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