Annotation of 3BSD/cmd/pi/string.c, revision 1.1.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.