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