xref: /csrg-svn/usr.bin/diction/style1/nhash.c (revision 61974)
148245Sbostic /*-
248245Sbostic  * %sccs.include.proprietary.c%
348788Sbostic  *
4*61974Sbostic  *	@(#)nhash.c	8.1 (Berkeley) 06/06/93
548245Sbostic  */
648245Sbostic 
79075Srrh struct dict {
89075Srrh 	char *entry;
99075Srrh 	char val;
109075Srrh };
119075Srrh extern struct dict ary_d[], cy_d[], ery_d[], fy_d[],gy_d[];
129075Srrh extern struct dict ity_d[],ly_d[],ory_d[],ry_d[],ty_d[];
139075Srrh extern struct dict dict[];
149090Srrh extern struct dict abbrev_d[];
159075Srrh char aahash();
169075Srrh char lookup();
179090Srrh char abbrev();
189075Srrh char ary();
199075Srrh char cy();
209075Srrh char ery();
219075Srrh char fy();
229075Srrh char gy();
239075Srrh char ity();
249075Srrh char ly();
259075Srrh char ory();
269075Srrh char ry();
279075Srrh char ty();
289075Srrh 
299075Srrh struct hnode {
309075Srrh 	char *aakey;
319075Srrh 	struct dict *aadata;
329075Srrh };
339075Srrh char
aahash(s,ex,aatsize,aapr1,aapr2,tbl,data)349075Srrh aahash(s,ex,aatsize,aapr1,aapr2,tbl,data)
359075Srrh char *s;
369075Srrh struct hnode tbl[];
379075Srrh struct dict *data;
389075Srrh {
399075Srrh 	char *cp;
409075Srrh 	int ii, key, c, p1, p2;
419075Srrh 	cp = s;
429075Srrh 	key =0;
439075Srrh 	while (c = *cp++)
449075Srrh 		key = key + (key<<5) + c;
459075Srrh 	key &= 077777;
469075Srrh 	p1 = key%aapr1;
479075Srrh 	p2 = key%aapr2;
489075Srrh 	if (p2==0) p2=17;
499075Srrh 	for(ii=0; ii<aatsize; ii++)
509075Srrh 	{
519075Srrh 		if (tbl[p1].aakey==0)
529075Srrh 		{ /* new item */
539075Srrh 			if (ex ==0)
549075Srrh 			{
559075Srrh 				tbl[p1].aakey = s;
569075Srrh 				tbl[p1].aadata= data;
579075Srrh 				return(tbl[p1].aadata->val);
589075Srrh 			}
599075Srrh 			else
609075Srrh 				return(0);
619075Srrh 		}
629075Srrh 		else
639075Srrh 			if(strcmp(tbl[p1].aakey, s)== 0)
649075Srrh 			{
659075Srrh 				return(tbl[p1].aadata->val);
669075Srrh 			}
679075Srrh 		p1 = (p1+p2)%aatsize;
689075Srrh 	}
699090Srrh 	fprintf(stderr, "hash table full:size %d\n",aatsize);
7046229Storek 	exit(1);
719075Srrh }
getd()729075Srrh getd(){
739075Srrh 	struct dict *ptr;
749075Srrh 	ptr = dict;
759075Srrh 	while(ptr->entry != 0){
769075Srrh 		lookup(ptr->entry,0,ptr);
779075Srrh 		ptr++;
789075Srrh 	}
799075Srrh }
getab()809090Srrh getab(){
819090Srrh 	struct dict *ptr;
829090Srrh 	ptr = abbrev_d;
839090Srrh 	while(ptr->entry != 0){
849090Srrh 		abbrev(ptr->entry,0,ptr);
859090Srrh 		ptr++;
869090Srrh 	}
879090Srrh }
889075Srrh 
899090Srrh struct hnode aa1root[499];
909090Srrh #define aa1tsize 499
919090Srrh #define aa1p1 487
929090Srrh #define aa1p2 491
939075Srrh char
lookup(a0,a1,ptr)949075Srrh lookup(a0,a1,ptr)
959075Srrh char *a0;
969075Srrh struct dict *ptr;
979075Srrh {
989075Srrh 	return(aahash(a0,a1,aa1tsize,aa1p1,aa1p2,aa1root,ptr));
999075Srrh }
1009075Srrh struct hnode aa6root[113];
1019075Srrh #define aa6tsize 113
1029075Srrh #define aa6p1 107
1039075Srrh #define aa6p2 109
1049075Srrh char
ary(a0,a1,ptr)1059075Srrh ary(a0,a1,ptr)
1069075Srrh 	char *a0;
1079075Srrh 	struct dict *ptr;
1089075Srrh {
1099075Srrh 	return(aahash(a0,a1,aa6tsize,aa6p1,aa6p2,aa6root,ptr));
1109075Srrh }
1119075Srrh struct hnode aa9root[13];
1129075Srrh #define aa9tsize 13
1139075Srrh #define aa9p1 7
1149075Srrh #define aa9p2 1
1159075Srrh char
cy(a0,a1,ptr)1169075Srrh cy(a0,a1,ptr)
1179075Srrh 	char *a0;
1189075Srrh 	struct dict *ptr;
1199075Srrh {
1209075Srrh 	return(aahash(a0,a1,aa9tsize,aa9p1,aa9p2,aa9root,ptr));
1219075Srrh }
1229075Srrh struct hnode aa12root[59];
1239075Srrh #define aa12tsize 59
1249075Srrh #define aa12p1 47
1259075Srrh #define aa12p2 43
1269075Srrh char
ery(a0,a1,ptr)1279075Srrh ery(a0,a1,ptr)
1289075Srrh 	char *a0;
1299075Srrh 	struct dict *ptr;
1309075Srrh {
1319075Srrh 	return(aahash(a0,a1,aa12tsize,aa12p1,aa12p2,aa12root,ptr));
1329075Srrh }
1339075Srrh struct hnode aa16root[23];
1349075Srrh #define aa16tsize 23
1359075Srrh #define aa16p1 17
1369075Srrh #define aa16p2 19
1379075Srrh char
fy(a0,a1,ptr)1389075Srrh fy(a0,a1,ptr)
1399075Srrh 	char *a0;
1409075Srrh 	struct dict *ptr;
1419075Srrh {
1429075Srrh 	return(aahash(a0,a1,aa16tsize,aa16p1,aa16p2,aa16root,ptr));
1439075Srrh }
1449075Srrh struct hnode aa17root[29];
1459075Srrh #define aa17tsize 29
1469075Srrh #define aa17p1 19
1479075Srrh #define aa17p2 23
1489075Srrh char
gy(a0,a1,ptr)1499075Srrh gy(a0,a1,ptr)
1509075Srrh 	char *a0;
1519075Srrh 	struct dict *ptr;
1529075Srrh {
1539075Srrh 	return(aahash(a0,a1,aa17tsize,aa17p1,aa17p2,aa17root,ptr));
1549075Srrh }
1559075Srrh struct hnode aa27root[11];
1569075Srrh #define aa27tsize 11
1579075Srrh #define aa27p1 5
1589075Srrh #define aa27p2 7
1599075Srrh char
ity(a0,a1,ptr)1609075Srrh ity(a0,a1,ptr)
1619075Srrh 	char *a0;
1629075Srrh 	struct dict *ptr;
1639075Srrh {
1649075Srrh 	return(aahash(a0,a1,aa27tsize,aa27p1,aa27p2,aa27root,ptr));
1659075Srrh }
1669075Srrh struct hnode aa32root[281];
1679075Srrh #define aa32tsize 281
1689075Srrh #define aa32p1 271
1699075Srrh #define aa32p2 277
1709075Srrh char
ly(a0,a1,ptr)1719075Srrh ly(a0,a1,ptr)
1729075Srrh 	char *a0;
1739075Srrh 	struct dict *ptr;
1749075Srrh {
1759075Srrh 	return(aahash(a0,a1,aa32tsize,aa32p1,aa32p2,aa32root,ptr));
1769075Srrh }
1779075Srrh struct hnode aa36root[59];
1789075Srrh #define aa36tsize 59
1799075Srrh #define aa36p1 47
1809075Srrh #define aa36p2 43
1819075Srrh char
ory(a0,a1,ptr)1829075Srrh ory(a0,a1,ptr)
1839075Srrh 	char *a0;
1849075Srrh 	struct dict *ptr;
1859075Srrh {
1869075Srrh 	return(aahash(a0,a1,aa36tsize,aa36p1,aa36p2,aa36root,ptr));
1879075Srrh }
1889075Srrh struct hnode aa38root[59];
1899075Srrh #define aa38tsize 59
1909075Srrh #define aa38p1 47
1919075Srrh #define aa38p2 53
1929075Srrh char
ry(a0,a1,ptr)1939075Srrh ry(a0,a1,ptr)
1949075Srrh 	char *a0;
1959075Srrh 	struct dict *ptr;
1969075Srrh {
1979075Srrh 	return(aahash(a0,a1,aa38tsize,aa38p1,aa38p2,aa38root,ptr));
1989075Srrh }
1999075Srrh struct hnode aa41root[127];
2009075Srrh #define aa41tsize 127
2019075Srrh #define aa41p1 109
2029075Srrh #define aa41p2 113
2039075Srrh char
ty(a0,a1,ptr)2049075Srrh ty(a0,a1,ptr)
2059075Srrh 	char *a0;
2069075Srrh 	struct dict *ptr;
2079075Srrh {
2089075Srrh 	return(aahash(a0,a1,aa41tsize,aa41p1,aa41p2,aa41root,ptr));
2099075Srrh }
2109075Srrh struct fandd {
2119075Srrh 	char (*fun)();
2129075Srrh 	struct dict *yd;
2139075Srrh } arr[] = {
2149075Srrh 	ary,	ary_d,
2159075Srrh 	cy,	cy_d,
2169075Srrh 	ery,	ery_d,
2179075Srrh 	fy,	fy_d,
2189075Srrh 	gy,	gy_d,
2199075Srrh 	ity,	ity_d,
2209075Srrh 	ly,	ly_d,
2219075Srrh 	ory,	ory_d,
2229075Srrh 	ry,	ry_d,
2239075Srrh 	ty,	ty_d,
2249075Srrh 	0,	0
2259075Srrh };
2269075Srrh 
ygetd()2279075Srrh ygetd(){
2289075Srrh 	struct fandd *ptr;
2299075Srrh 	struct dict *pp;
2309075Srrh 	ptr=arr;
2319075Srrh 	while(ptr->fun != 0){
2329075Srrh 		pp = ptr->yd;
2339075Srrh 		while(pp->entry != 0){
2349075Srrh 			(*ptr->fun)(pp->entry,0,pp);
2359075Srrh 			pp++;
2369075Srrh 		}
2379075Srrh 		ptr++;
2389075Srrh 	}
2399075Srrh }
2409090Srrh struct hnode aa42root[71];
2419090Srrh #define aa42tsize 71
2429090Srrh #define aa42p1 61
2439090Srrh #define aa42p2 67
2449090Srrh char
abbrev(a0,a1,ptr)2459090Srrh abbrev(a0,a1,ptr)
2469090Srrh 	char *a0;
2479090Srrh 	struct dict *ptr;
2489090Srrh {
2499090Srrh 	return(aahash(a0,a1,aa42tsize,aa42p1,aa42p2,aa42root,ptr));
2509090Srrh }
251