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