Annotation of 3BSD/cmd/pi/string.c, revision 1.1

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

unix.superglobalmegacorp.com

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