148116Sbostic /*- 2*62219Sbostic * Copyright (c) 1980, 1993 3*62219Sbostic * The Regents of the University of California. All rights reserved. 448116Sbostic * 548116Sbostic * %sccs.include.redist.c% 622195Sdist */ 7776Speter 814744Sthien #ifndef lint 9*62219Sbostic static char sccsid[] = "@(#)string.c 8.1 (Berkeley) 06/06/93"; 1048116Sbostic #endif /* not lint */ 11776Speter 12776Speter #include "whoami.h" 1330837Smckusick #include "align.h" 14776Speter #include "0.h" 15776Speter #ifndef PI01 16776Speter #ifndef PXP 17776Speter #include "send.h" 18776Speter #endif 19776Speter #endif 20776Speter 21776Speter /* 22776Speter * STRING SPACE DECLARATIONS 23776Speter * 24776Speter * Strng is the base of the current 25776Speter * string space and strngp the 26776Speter * base of the free area therein. 27776Speter * Strp is the array of descriptors. 28776Speter */ 29776Speter #ifndef PI0 30776Speter STATIC char strings[STRINC]; 31776Speter STATIC char *strng = strings; 32776Speter STATIC char *strngp = strings; 33776Speter #else 34776Speter char *strng, *strngp; 35776Speter #endif 36776Speter #ifndef PI01 37776Speter #ifndef PXP 38776Speter STATIC char *strp[20]; 39776Speter STATIC char **stract strp; 40776Speter int strmax; 41776Speter #endif 42776Speter #endif 43776Speter 44776Speter #ifndef PI01 45776Speter #ifndef PXP 46776Speter #ifndef PI0 initstring()47776Speterinitstring() 48776Speter #else 49776Speter initstring(strings) 50776Speter char *strings; 51776Speter #endif 52776Speter { 53776Speter 54776Speter *stract++ = strings; 55776Speter #ifdef PI0 56776Speter strng = strngp = strings; 57776Speter #endif 58776Speter strmax = STRINC * 2; 59776Speter } 60776Speter #endif 61776Speter #endif 62776Speter 63776Speter /* 64776Speter * Copy a string into the string area. 65776Speter */ 66776Speter char * savestr(cp)67776Spetersavestr(cp) 68776Speter register char *cp; 69776Speter { 70776Speter register int i; 71776Speter 72776Speter i = strlen(cp) + 1; 73776Speter if (strngp + i >= strng + STRINC) { 74776Speter strngp = malloc(STRINC); 751835Speter if (strngp == 0) { 76776Speter yerror("Ran out of memory (string)"); 77776Speter pexit(DIED); 78776Speter } 79776Speter #ifndef PI01 80776Speter #ifndef PXP 81776Speter *stract++ = strngp; 8232765Sbostic strmax += STRINC; 83776Speter #endif 84776Speter #endif 85776Speter strng = strngp; 86776Speter } 8714744Sthien (void) pstrcpy(strngp, cp); 88776Speter cp = strngp; 89776Speter strngp = cp + i; 90776Speter #ifdef PI0 91776Speter send(RSTRING, cp); 92776Speter #endif 93776Speter return (cp); 94776Speter } 95776Speter 96776Speter #ifndef PI1 97776Speter #ifndef PXP 9814744Sthien char * esavestr(cp)99776Speteresavestr(cp) 100776Speter char *cp; 101776Speter { 102776Speter 103776Speter #ifdef PI0 104776Speter send(REVENIT); 105776Speter #endif 10630837Smckusick strngp = ( (char *) roundup( strngp, A_LONG ) ); 107776Speter return (savestr(cp)); 108776Speter } 109776Speter #endif 110776Speter #endif 111776Speter 112776Speter #ifndef PI01 113776Speter #ifndef PXP soffset(cp)114776Spetersoffset(cp) 115776Speter register char *cp; 116776Speter { 117776Speter register char **sp; 118776Speter register int i; 119776Speter 120776Speter if (cp == NIL || cp == OCT || cp == HEX) 121776Speter return (-cp); 122776Speter for (i = STRINC, sp = strp; sp < stract; sp++) { 123776Speter if (cp >= *sp && cp < (*sp + STRINC)) 124776Speter return (i + (cp - *sp)); 12532765Sbostic i += STRINC; 126776Speter } 127776Speter i = nlfund(cp); 128776Speter if (i != 0) 129776Speter return (i); 130776Speter panic("soffset"); 131776Speter } 132776Speter #ifdef PI1 sreloc(i)133776Spetersreloc(i) 134776Speter register int i; 135776Speter { 136776Speter 137776Speter if (i == 0 || i == -OCT || i == -HEX) 138776Speter return (-i); 139776Speter if (i < STRINC) { 140776Speter if (i >= INL) 141776Speter panic("sreloc INL"); 142776Speter i = nl[i].symbol; 143776Speter if (i == 0) 144776Speter panic("sreloc nl[i]"); 145776Speter return (i); 146776Speter } 147776Speter if (i > strmax || i < 0) 148776Speter panic("sreloc"); 149776Speter return (strp[(i / STRINC) - 1] + (i % STRINC)); 150776Speter } 151776Speter #endif 152776Speter #endif 153776Speter #endif 154