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