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