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