1*22195Sdist /* 2*22195Sdist * Copyright (c) 1980 Regents of the University of California. 3*22195Sdist * All rights reserved. The Berkeley software License Agreement 4*22195Sdist * specifies the terms and conditions for redistribution. 5*22195Sdist */ 6776Speter 714744Sthien #ifndef lint 8*22195Sdist static char sccsid[] = "@(#)string.c 5.1 (Berkeley) 06/05/85"; 9*22195Sdist #endif not lint 10776Speter 11776Speter #include "whoami.h" 12776Speter #include "0.h" 13776Speter #ifndef PI01 14776Speter #ifndef PXP 15776Speter #include "send.h" 16776Speter #endif 17776Speter #endif 18776Speter 19776Speter /* 20776Speter * STRING SPACE DECLARATIONS 21776Speter * 22776Speter * Strng is the base of the current 23776Speter * string space and strngp the 24776Speter * base of the free area therein. 25776Speter * Strp is the array of descriptors. 26776Speter */ 27776Speter #ifndef PI0 28776Speter STATIC char strings[STRINC]; 29776Speter STATIC char *strng = strings; 30776Speter STATIC char *strngp = strings; 31776Speter #else 32776Speter char *strng, *strngp; 33776Speter #endif 34776Speter #ifndef PI01 35776Speter #ifndef PXP 36776Speter STATIC char *strp[20]; 37776Speter STATIC char **stract strp; 38776Speter int strmax; 39776Speter #endif 40776Speter #endif 41776Speter 42776Speter #ifndef PI01 43776Speter #ifndef PXP 44776Speter #ifndef PI0 45776Speter initstring() 46776Speter #else 47776Speter initstring(strings) 48776Speter char *strings; 49776Speter #endif 50776Speter { 51776Speter 52776Speter *stract++ = strings; 53776Speter #ifdef PI0 54776Speter strng = strngp = strings; 55776Speter #endif 56776Speter strmax = STRINC * 2; 57776Speter } 58776Speter #endif 59776Speter #endif 60776Speter 61776Speter /* 62776Speter * Copy a string into the string area. 63776Speter */ 64776Speter char * 65776Speter savestr(cp) 66776Speter register char *cp; 67776Speter { 68776Speter register int i; 69776Speter 70776Speter i = strlen(cp) + 1; 71776Speter if (strngp + i >= strng + STRINC) { 72776Speter strngp = malloc(STRINC); 731835Speter if (strngp == 0) { 74776Speter yerror("Ran out of memory (string)"); 75776Speter pexit(DIED); 76776Speter } 77776Speter #ifndef PI01 78776Speter #ifndef PXP 79776Speter *stract++ = strngp; 80776Speter strmax =+ STRINC; 81776Speter #endif 82776Speter #endif 83776Speter strng = strngp; 84776Speter } 8514744Sthien (void) pstrcpy(strngp, cp); 86776Speter cp = strngp; 87776Speter strngp = cp + i; 88776Speter #ifdef PI0 89776Speter send(RSTRING, cp); 90776Speter #endif 91776Speter return (cp); 92776Speter } 93776Speter 94776Speter #ifndef PI1 95776Speter #ifndef PXP 9614744Sthien char * 97776Speter esavestr(cp) 98776Speter char *cp; 99776Speter { 100776Speter 101776Speter #ifdef PI0 102776Speter send(REVENIT); 103776Speter #endif 104776Speter strngp = ( (char *) ( ( (int) (strngp + 1) ) &~ 1 ) ); 105776Speter return (savestr(cp)); 106776Speter } 107776Speter #endif 108776Speter #endif 109776Speter 110776Speter #ifndef PI01 111776Speter #ifndef PXP 112776Speter soffset(cp) 113776Speter register char *cp; 114776Speter { 115776Speter register char **sp; 116776Speter register int i; 117776Speter 118776Speter if (cp == NIL || cp == OCT || cp == HEX) 119776Speter return (-cp); 120776Speter for (i = STRINC, sp = strp; sp < stract; sp++) { 121776Speter if (cp >= *sp && cp < (*sp + STRINC)) 122776Speter return (i + (cp - *sp)); 123776Speter i =+ STRINC; 124776Speter } 125776Speter i = nlfund(cp); 126776Speter if (i != 0) 127776Speter return (i); 128776Speter panic("soffset"); 129776Speter } 130776Speter #ifdef PI1 131776Speter sreloc(i) 132776Speter register int i; 133776Speter { 134776Speter 135776Speter if (i == 0 || i == -OCT || i == -HEX) 136776Speter return (-i); 137776Speter if (i < STRINC) { 138776Speter if (i >= INL) 139776Speter panic("sreloc INL"); 140776Speter i = nl[i].symbol; 141776Speter if (i == 0) 142776Speter panic("sreloc nl[i]"); 143776Speter return (i); 144776Speter } 145776Speter if (i > strmax || i < 0) 146776Speter panic("sreloc"); 147776Speter return (strp[(i / STRINC) - 1] + (i % STRINC)); 148776Speter } 149776Speter 150776Speter evenit() 151776Speter { 152776Speter 153776Speter strngp = (strngp + 1) &~ 1; 154776Speter } 155776Speter #endif 156776Speter #endif 157776Speter #endif 158