xref: /csrg-svn/games/battlestar/parse.c (revision 18724)
1*18724Sedward /*
2*18724Sedward  * Copyright (c) 1983 Regents of the University of California,
3*18724Sedward  * All rights reserved.  Redistribution permitted subject to
4*18724Sedward  * the terms of the Berkeley Software License Agreement.
5*18724Sedward  */
6*18724Sedward 
717388Sedward #ifndef lint
8*18724Sedward static char sccsid[] = "@(#)parse.c	1.2 04/24/85";
917388Sedward #endif
1017388Sedward 
1117388Sedward #include "externs.h"
1217388Sedward 
1317388Sedward wordinit()
1417388Sedward {
1517388Sedward 	register struct wlist *w;
1617388Sedward 
1717388Sedward 	for (w = wlist; w->string; w++)
1817388Sedward 		install(w);
1917388Sedward }
2017388Sedward 
2117388Sedward hash(s)
2217388Sedward 	register char *s;
2317388Sedward {
2417388Sedward 	register hashval = 0;
2517388Sedward 
2617388Sedward 	while (*s) {
2717388Sedward 		hashval += *s++;
2817388Sedward 		hashval *= HASHMUL;
2917388Sedward 		hashval &= HASHMASK;
3017388Sedward 	}
3117388Sedward 	return hashval;
3217388Sedward }
3317388Sedward 
3417388Sedward struct wlist *
3517388Sedward lookup(s)
3617388Sedward 	char *s;
3717388Sedward {
3817388Sedward 	register struct wlist *wp;
3917388Sedward 
4017388Sedward 	for (wp = hashtab[hash(s)]; wp != NULL; wp = wp->next)
4117388Sedward 		if (*s == *wp->string && strcmp(s, wp->string) == 0)
4217388Sedward 			return wp;
4317388Sedward 	return NULL;
4417388Sedward }
4517388Sedward 
4617388Sedward install(wp)
4717388Sedward 	register struct wlist *wp;
4817388Sedward {
4917388Sedward 	int hashval;
5017388Sedward 
5117388Sedward 	if (lookup(wp->string) == NULL) {
5217388Sedward 		hashval = hash(wp->string);
5317388Sedward 		wp->next = hashtab[hashval];
5417388Sedward 		hashtab[hashval] = wp;
5517388Sedward 	} else
5617388Sedward 		printf("Multiply defined %s.\n", wp->string);
5717388Sedward }
5817388Sedward 
5917388Sedward parse()
6017388Sedward {
6117388Sedward 	register struct wlist *wp;
6217388Sedward 	register n;
6317388Sedward 
6417388Sedward 	wordnumber = 0;           /* for cypher */
6517388Sedward 	for (n = 0; n <= wordcount; n++) {
6617388Sedward 		if ((wp = lookup(words[n])) == NULL) {
6717388Sedward 			wordvalue[n] = -1;
6817388Sedward 			wordtype[n] = -1;
6917388Sedward 		} else {
7017388Sedward 			wordvalue[n] = wp -> value;
7117388Sedward 			wordtype[n] = wp -> article;
7217388Sedward 		}
7317388Sedward 	}
7417388Sedward }
75