Annotation of 43BSDTahoe/ucb/pascal/src/string.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1980 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  */
        !             6: 
        !             7: #ifndef lint
        !             8: static char sccsid[] = "@(#)string.c   5.4 (Berkeley) 12/4/87";
        !             9: #endif not lint
        !            10: 
        !            11: #include "whoami.h"
        !            12: #include "align.h"
        !            13: #include "0.h"
        !            14: #ifndef PI01
        !            15: #ifndef PXP
        !            16: #include "send.h"
        !            17: #endif
        !            18: #endif
        !            19: 
        !            20: /*
        !            21:  * STRING SPACE DECLARATIONS
        !            22:  *
        !            23:  * Strng is the base of the current
        !            24:  * string space and strngp the
        !            25:  * base of the free area therein.
        !            26:  * Strp is the array of descriptors.
        !            27:  */
        !            28: #ifndef PI0
        !            29: STATIC char strings[STRINC];
        !            30: STATIC char *strng = strings;
        !            31: STATIC char *strngp = strings;
        !            32: #else
        !            33: char   *strng, *strngp;
        !            34: #endif
        !            35: #ifndef PI01
        !            36: #ifndef PXP
        !            37: STATIC char *strp[20];
        !            38: STATIC char **stract strp;
        !            39: int    strmax;
        !            40: #endif
        !            41: #endif
        !            42: 
        !            43: #ifndef PI01
        !            44: #ifndef PXP
        !            45: #ifndef PI0
        !            46: initstring()
        !            47: #else
        !            48: initstring(strings)
        !            49:        char *strings;
        !            50: #endif
        !            51: {
        !            52: 
        !            53:        *stract++ = strings;
        !            54: #ifdef PI0
        !            55:        strng = strngp = strings;
        !            56: #endif
        !            57:        strmax = STRINC * 2;
        !            58: }
        !            59: #endif
        !            60: #endif
        !            61: 
        !            62: /*
        !            63:  * Copy a string into the string area.
        !            64:  */
        !            65: char *
        !            66: savestr(cp)
        !            67:        register char *cp;
        !            68: {
        !            69:        register int i;
        !            70: 
        !            71:        i = strlen(cp) + 1;
        !            72:        if (strngp + i >= strng + STRINC) {
        !            73:                strngp = malloc(STRINC);
        !            74:                if (strngp == 0) {
        !            75:                        yerror("Ran out of memory (string)");
        !            76:                        pexit(DIED);
        !            77:                }
        !            78: #ifndef PI01
        !            79: #ifndef PXP
        !            80:                *stract++ = strngp;
        !            81:                strmax += STRINC;
        !            82: #endif
        !            83: #endif
        !            84:                strng = strngp;
        !            85:        }
        !            86:        (void) pstrcpy(strngp, cp);
        !            87:        cp = strngp;
        !            88:        strngp = cp + i;
        !            89: #ifdef PI0
        !            90:        send(RSTRING, cp);
        !            91: #endif
        !            92:        return (cp);
        !            93: }
        !            94: 
        !            95: #ifndef PI1
        !            96: #ifndef PXP
        !            97: char *
        !            98: esavestr(cp)
        !            99:        char *cp;
        !           100: {
        !           101: 
        !           102: #ifdef PI0
        !           103:        send(REVENIT);
        !           104: #endif
        !           105:        strngp = ( (char *) roundup( strngp, A_LONG ) );
        !           106:        return (savestr(cp));
        !           107: }
        !           108: #endif
        !           109: #endif
        !           110: 
        !           111: #ifndef PI01
        !           112: #ifndef PXP
        !           113: soffset(cp)
        !           114:        register char *cp;
        !           115: {
        !           116:        register char **sp;
        !           117:        register int i;
        !           118: 
        !           119:        if (cp == NIL || cp == OCT || cp == HEX)
        !           120:                return (-cp);
        !           121:        for (i = STRINC, sp = strp; sp < stract; sp++) {
        !           122:                if (cp >= *sp && cp < (*sp + STRINC))
        !           123:                        return (i + (cp - *sp));
        !           124:                i += STRINC;
        !           125:        }
        !           126:        i = nlfund(cp);
        !           127:        if (i != 0)
        !           128:                return (i);
        !           129:        panic("soffset");
        !           130: }
        !           131: #ifdef PI1
        !           132: sreloc(i)
        !           133:        register int i;
        !           134: {
        !           135: 
        !           136:        if (i == 0 || i == -OCT || i == -HEX)
        !           137:                return (-i);
        !           138:        if (i < STRINC) {
        !           139:                if (i >= INL)
        !           140:                        panic("sreloc INL");
        !           141:                i = nl[i].symbol;
        !           142:                if (i == 0)
        !           143:                        panic("sreloc nl[i]");
        !           144:                return (i);
        !           145:        }
        !           146:        if (i > strmax || i < 0)
        !           147:                panic("sreloc");
        !           148:        return (strp[(i / STRINC) - 1] + (i % STRINC));
        !           149: }
        !           150: #endif
        !           151: #endif
        !           152: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.