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