1 #ifndef lint 2 static char sccsid[] = "@(#)parse.c 1.1 11/18/84"; 3 #endif 4 5 #include "externs.h" 6 7 wordinit() 8 { 9 register struct wlist *w; 10 11 for (w = wlist; w->string; w++) 12 install(w); 13 } 14 15 hash(s) 16 register char *s; 17 { 18 register hashval = 0; 19 20 while (*s) { 21 hashval += *s++; 22 hashval *= HASHMUL; 23 hashval &= HASHMASK; 24 } 25 return hashval; 26 } 27 28 struct wlist * 29 lookup(s) 30 char *s; 31 { 32 register struct wlist *wp; 33 34 for (wp = hashtab[hash(s)]; wp != NULL; wp = wp->next) 35 if (*s == *wp->string && strcmp(s, wp->string) == 0) 36 return wp; 37 return NULL; 38 } 39 40 install(wp) 41 register struct wlist *wp; 42 { 43 int hashval; 44 45 if (lookup(wp->string) == NULL) { 46 hashval = hash(wp->string); 47 wp->next = hashtab[hashval]; 48 hashtab[hashval] = wp; 49 } else 50 printf("Multiply defined %s.\n", wp->string); 51 } 52 53 parse() 54 { 55 register struct wlist *wp; 56 register n; 57 58 wordnumber = 0; /* for cypher */ 59 for (n = 0; n <= wordcount; n++) { 60 if ((wp = lookup(words[n])) == NULL) { 61 wordvalue[n] = -1; 62 wordtype[n] = -1; 63 } else { 64 wordvalue[n] = wp -> value; 65 wordtype[n] = wp -> article; 66 } 67 } 68 } 69