1*9075Srrh #ifndef lint
2*9075Srrh static char sccsid[] = "@(#)nhash.c	4.1	(Berkeley)	82/11/06";
3*9075Srrh #endif not lint
4*9075Srrh 
5*9075Srrh struct dict {
6*9075Srrh 	char *entry;
7*9075Srrh 	char val;
8*9075Srrh };
9*9075Srrh extern struct dict ary_d[], cy_d[], ery_d[], fy_d[],gy_d[];
10*9075Srrh extern struct dict ity_d[],ly_d[],ory_d[],ry_d[],ty_d[];
11*9075Srrh extern struct dict dict[];
12*9075Srrh char aahash();
13*9075Srrh char lookup();
14*9075Srrh char ary();
15*9075Srrh char cy();
16*9075Srrh char ery();
17*9075Srrh char fy();
18*9075Srrh char gy();
19*9075Srrh char ity();
20*9075Srrh char ly();
21*9075Srrh char ory();
22*9075Srrh char ry();
23*9075Srrh char ty();
24*9075Srrh 
25*9075Srrh struct hnode {
26*9075Srrh 	char *aakey;
27*9075Srrh 	struct dict *aadata;
28*9075Srrh };
29*9075Srrh char
30*9075Srrh aahash(s,ex,aatsize,aapr1,aapr2,tbl,data)
31*9075Srrh char *s;
32*9075Srrh struct hnode tbl[];
33*9075Srrh struct dict *data;
34*9075Srrh {
35*9075Srrh 	char *cp;
36*9075Srrh 	int ii, key, c, p1, p2;
37*9075Srrh 	cp = s;
38*9075Srrh 	key =0;
39*9075Srrh 	while (c = *cp++)
40*9075Srrh 		key = key + (key<<5) + c;
41*9075Srrh 	key &= 077777;
42*9075Srrh 	p1 = key%aapr1;
43*9075Srrh 	p2 = key%aapr2;
44*9075Srrh 	if (p2==0) p2=17;
45*9075Srrh 	for(ii=0; ii<aatsize; ii++)
46*9075Srrh 	{
47*9075Srrh 		if (tbl[p1].aakey==0)
48*9075Srrh 		{ /* new item */
49*9075Srrh 			if (ex ==0)
50*9075Srrh 			{
51*9075Srrh 				tbl[p1].aakey = s;
52*9075Srrh 				tbl[p1].aadata= data;
53*9075Srrh 				return(tbl[p1].aadata->val);
54*9075Srrh 			}
55*9075Srrh 			else
56*9075Srrh 				return(0);
57*9075Srrh 		}
58*9075Srrh 		else
59*9075Srrh 			if(strcmp(tbl[p1].aakey, s)== 0)
60*9075Srrh 			{
61*9075Srrh 				return(tbl[p1].aadata->val);
62*9075Srrh 			}
63*9075Srrh 		p1 = (p1+p2)%aatsize;
64*9075Srrh 	}
65*9075Srrh 	fprintf(stderr, "hash table full\n");
66*9075Srrh 	exit();
67*9075Srrh }
68*9075Srrh getd(){
69*9075Srrh 	struct dict *ptr;
70*9075Srrh 	ptr = dict;
71*9075Srrh 	while(ptr->entry != 0){
72*9075Srrh 		lookup(ptr->entry,0,ptr);
73*9075Srrh 		ptr++;
74*9075Srrh 	}
75*9075Srrh }
76*9075Srrh 
77*9075Srrh struct hnode aa1root[463];
78*9075Srrh #define aa1tsize 463
79*9075Srrh #define aa1p1 457
80*9075Srrh #define aa1p2 461
81*9075Srrh char
82*9075Srrh lookup(a0,a1,ptr)
83*9075Srrh char *a0;
84*9075Srrh struct dict *ptr;
85*9075Srrh {
86*9075Srrh 	return(aahash(a0,a1,aa1tsize,aa1p1,aa1p2,aa1root,ptr));
87*9075Srrh }
88*9075Srrh struct hnode aa6root[113];
89*9075Srrh #define aa6tsize 113
90*9075Srrh #define aa6p1 107
91*9075Srrh #define aa6p2 109
92*9075Srrh char
93*9075Srrh ary(a0,a1,ptr)
94*9075Srrh 	char *a0;
95*9075Srrh 	struct dict *ptr;
96*9075Srrh {
97*9075Srrh 	return(aahash(a0,a1,aa6tsize,aa6p1,aa6p2,aa6root,ptr));
98*9075Srrh }
99*9075Srrh struct hnode aa9root[13];
100*9075Srrh #define aa9tsize 13
101*9075Srrh #define aa9p1 7
102*9075Srrh #define aa9p2 1
103*9075Srrh char
104*9075Srrh cy(a0,a1,ptr)
105*9075Srrh 	char *a0;
106*9075Srrh 	struct dict *ptr;
107*9075Srrh {
108*9075Srrh 	return(aahash(a0,a1,aa9tsize,aa9p1,aa9p2,aa9root,ptr));
109*9075Srrh }
110*9075Srrh struct hnode aa12root[59];
111*9075Srrh #define aa12tsize 59
112*9075Srrh #define aa12p1 47
113*9075Srrh #define aa12p2 43
114*9075Srrh char
115*9075Srrh ery(a0,a1,ptr)
116*9075Srrh 	char *a0;
117*9075Srrh 	struct dict *ptr;
118*9075Srrh {
119*9075Srrh 	return(aahash(a0,a1,aa12tsize,aa12p1,aa12p2,aa12root,ptr));
120*9075Srrh }
121*9075Srrh struct hnode aa16root[23];
122*9075Srrh #define aa16tsize 23
123*9075Srrh #define aa16p1 17
124*9075Srrh #define aa16p2 19
125*9075Srrh char
126*9075Srrh fy(a0,a1,ptr)
127*9075Srrh 	char *a0;
128*9075Srrh 	struct dict *ptr;
129*9075Srrh {
130*9075Srrh 	return(aahash(a0,a1,aa16tsize,aa16p1,aa16p2,aa16root,ptr));
131*9075Srrh }
132*9075Srrh struct hnode aa17root[29];
133*9075Srrh #define aa17tsize 29
134*9075Srrh #define aa17p1 19
135*9075Srrh #define aa17p2 23
136*9075Srrh char
137*9075Srrh gy(a0,a1,ptr)
138*9075Srrh 	char *a0;
139*9075Srrh 	struct dict *ptr;
140*9075Srrh {
141*9075Srrh 	return(aahash(a0,a1,aa17tsize,aa17p1,aa17p2,aa17root,ptr));
142*9075Srrh }
143*9075Srrh struct hnode aa27root[11];
144*9075Srrh #define aa27tsize 11
145*9075Srrh #define aa27p1 5
146*9075Srrh #define aa27p2 7
147*9075Srrh char
148*9075Srrh ity(a0,a1,ptr)
149*9075Srrh 	char *a0;
150*9075Srrh 	struct dict *ptr;
151*9075Srrh {
152*9075Srrh 	return(aahash(a0,a1,aa27tsize,aa27p1,aa27p2,aa27root,ptr));
153*9075Srrh }
154*9075Srrh struct hnode aa32root[281];
155*9075Srrh #define aa32tsize 281
156*9075Srrh #define aa32p1 271
157*9075Srrh #define aa32p2 277
158*9075Srrh char
159*9075Srrh ly(a0,a1,ptr)
160*9075Srrh 	char *a0;
161*9075Srrh 	struct dict *ptr;
162*9075Srrh {
163*9075Srrh 	return(aahash(a0,a1,aa32tsize,aa32p1,aa32p2,aa32root,ptr));
164*9075Srrh }
165*9075Srrh struct hnode aa36root[59];
166*9075Srrh #define aa36tsize 59
167*9075Srrh #define aa36p1 47
168*9075Srrh #define aa36p2 43
169*9075Srrh char
170*9075Srrh ory(a0,a1,ptr)
171*9075Srrh 	char *a0;
172*9075Srrh 	struct dict *ptr;
173*9075Srrh {
174*9075Srrh 	return(aahash(a0,a1,aa36tsize,aa36p1,aa36p2,aa36root,ptr));
175*9075Srrh }
176*9075Srrh struct hnode aa38root[59];
177*9075Srrh #define aa38tsize 59
178*9075Srrh #define aa38p1 47
179*9075Srrh #define aa38p2 53
180*9075Srrh char
181*9075Srrh ry(a0,a1,ptr)
182*9075Srrh 	char *a0;
183*9075Srrh 	struct dict *ptr;
184*9075Srrh {
185*9075Srrh 	return(aahash(a0,a1,aa38tsize,aa38p1,aa38p2,aa38root,ptr));
186*9075Srrh }
187*9075Srrh struct hnode aa41root[127];
188*9075Srrh #define aa41tsize 127
189*9075Srrh #define aa41p1 109
190*9075Srrh #define aa41p2 113
191*9075Srrh char
192*9075Srrh ty(a0,a1,ptr)
193*9075Srrh 	char *a0;
194*9075Srrh 	struct dict *ptr;
195*9075Srrh {
196*9075Srrh 	return(aahash(a0,a1,aa41tsize,aa41p1,aa41p2,aa41root,ptr));
197*9075Srrh }
198*9075Srrh struct fandd {
199*9075Srrh 	char (*fun)();
200*9075Srrh 	struct dict *yd;
201*9075Srrh } arr[] = {
202*9075Srrh 	ary,	ary_d,
203*9075Srrh 	cy,	cy_d,
204*9075Srrh 	ery,	ery_d,
205*9075Srrh 	fy,	fy_d,
206*9075Srrh 	gy,	gy_d,
207*9075Srrh 	ity,	ity_d,
208*9075Srrh 	ly,	ly_d,
209*9075Srrh 	ory,	ory_d,
210*9075Srrh 	ry,	ry_d,
211*9075Srrh 	ty,	ty_d,
212*9075Srrh 	0,	0
213*9075Srrh };
214*9075Srrh 
215*9075Srrh ygetd(){
216*9075Srrh 	struct fandd *ptr;
217*9075Srrh 	struct dict *pp;
218*9075Srrh 	ptr=arr;
219*9075Srrh 	while(ptr->fun != 0){
220*9075Srrh 		pp = ptr->yd;
221*9075Srrh 		while(pp->entry != 0){
222*9075Srrh 			(*ptr->fun)(pp->entry,0,pp);
223*9075Srrh 			pp++;
224*9075Srrh 		}
225*9075Srrh 		ptr++;
226*9075Srrh 	}
227*9075Srrh }
228