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 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 } 72 getd(){ 73 struct dict *ptr; 74 ptr = dict; 75 while(ptr->entry != 0){ 76 lookup(ptr->entry,0,ptr); 77 ptr++; 78 } 79 } 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 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 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 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 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 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 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 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 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 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 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 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 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 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