|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)rlook.c 1.2 (Berkeley) 8/11/83"; ! 3: #endif ! 4: ! 5: #define NULL 0 ! 6: #define EOS 0 ! 7: #define HSHSIZ 101 ! 8: struct nlist { ! 9: char *name; ! 10: char *def; ! 11: int ydef; ! 12: struct nlist *next; ! 13: }; ! 14: ! 15: struct nlist *hshtab[HSHSIZ]; ! 16: struct nlist *lookup(); ! 17: char *install(); ! 18: char *malloc(); ! 19: char *copy(); ! 20: int hshval; ! 21: ! 22: struct nlist *lookup(str) ! 23: char *str; ! 24: { ! 25: register char *s1, *s2; ! 26: register struct nlist *np; ! 27: static struct nlist nodef; ! 28: ! 29: s1 = str; ! 30: for (hshval = 0; *s1; ) ! 31: hshval += *s1++; ! 32: hshval %= HSHSIZ; ! 33: for (np = hshtab[hshval]; np!=NULL; np = np->next) { ! 34: s1 = str; ! 35: s2 = np->name; ! 36: while (*s1++ == *s2) ! 37: if (*s2++ == EOS) ! 38: return(np); ! 39: } ! 40: return(&nodef); ! 41: } ! 42: ! 43: char *install(nam, val, tran) ! 44: char *nam, *val; ! 45: int tran; ! 46: { ! 47: register struct nlist *np; ! 48: ! 49: if ((np = lookup(nam))->name == NULL) { ! 50: np = (struct nlist *)malloc(sizeof(*np)); ! 51: np->name = copy(nam); ! 52: np->def = copy(val); ! 53: np->ydef = tran; ! 54: np->next = hshtab[hshval]; ! 55: hshtab[hshval] = np; ! 56: return(np->def); ! 57: } ! 58: free(np->def); ! 59: np->def = copy(val); ! 60: return(np->def); ! 61: } ! 62: ! 63: char *copy(s) ! 64: register char *s; ! 65: { ! 66: register char *p, *s1; ! 67: ! 68: p = s1 = (char *) malloc((unsigned)strlen(s)+1); ! 69: while (*s1++ = *s++); ! 70: return(p); ! 71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.