Annotation of 43BSDTahoe/ucb/pascal/src/string.c, revision 1.1.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.