118724Sedward /* 260750Sbostic * Copyright (c) 1983, 1993 360750Sbostic * The Regents of the University of California. All rights reserved. 434234Sbostic * 542571Sbostic * %sccs.include.redist.c% 618724Sedward */ 718724Sedward 817388Sedward #ifndef lint 9*69066Sbostic static char sccsid[] = "@(#)parse.c 8.2 (Berkeley) 04/28/95"; 1034234Sbostic #endif /* not lint */ 1117388Sedward 12*69066Sbostic #include "extern.h" 1317388Sedward wordinit()1417388Sedwardwordinit() 1517388Sedward { 1617388Sedward register struct wlist *w; 1717388Sedward 1817388Sedward for (w = wlist; w->string; w++) 1917388Sedward install(w); 2017388Sedward } 2117388Sedward hash(s)2217388Sedwardhash(s) 2317388Sedward register char *s; 2417388Sedward { 2517388Sedward register hashval = 0; 2617388Sedward 2717388Sedward while (*s) { 2817388Sedward hashval += *s++; 2917388Sedward hashval *= HASHMUL; 3017388Sedward hashval &= HASHMASK; 3117388Sedward } 3217388Sedward return hashval; 3317388Sedward } 3417388Sedward 3517388Sedward struct wlist * lookup(s)3617388Sedwardlookup(s) 3717388Sedward char *s; 3817388Sedward { 3917388Sedward register struct wlist *wp; 4017388Sedward 4117388Sedward for (wp = hashtab[hash(s)]; wp != NULL; wp = wp->next) 4217388Sedward if (*s == *wp->string && strcmp(s, wp->string) == 0) 4317388Sedward return wp; 4417388Sedward return NULL; 4517388Sedward } 4617388Sedward install(wp)4717388Sedwardinstall(wp) 4817388Sedward register struct wlist *wp; 4917388Sedward { 5017388Sedward int hashval; 5117388Sedward 5217388Sedward if (lookup(wp->string) == NULL) { 5317388Sedward hashval = hash(wp->string); 5417388Sedward wp->next = hashtab[hashval]; 5517388Sedward hashtab[hashval] = wp; 5617388Sedward } else 5717388Sedward printf("Multiply defined %s.\n", wp->string); 5817388Sedward } 5917388Sedward parse()6017388Sedwardparse() 6117388Sedward { 6217388Sedward register struct wlist *wp; 6317388Sedward register n; 6417388Sedward 6517388Sedward wordnumber = 0; /* for cypher */ 6617388Sedward for (n = 0; n <= wordcount; n++) { 6717388Sedward if ((wp = lookup(words[n])) == NULL) { 6817388Sedward wordvalue[n] = -1; 6917388Sedward wordtype[n] = -1; 7017388Sedward } else { 7117388Sedward wordvalue[n] = wp -> value; 7217388Sedward wordtype[n] = wp -> article; 7317388Sedward } 7417388Sedward } 7517388Sedward } 76