xref: /csrg-svn/old/refer/NOTUSED/thash.c (revision 48291)
1*48291Sbostic /*-
2*48291Sbostic  * %sccs.include.proprietary.c%
3*48291Sbostic  */
4*48291Sbostic 
512303Stut #ifndef lint
6*48291Sbostic static char sccsid[] = "@(#)thash.c	4.3 (Berkeley) 04/18/91";
7*48291Sbostic #endif /* not lint */
812303Stut 
912303Stut #include <stdio.h>
1037895Sbostic #include "pathnames.h"
1137895Sbostic 
1212303Stut #define MAXLINE 750
1312303Stut 
1412303Stut int nh 500;
1512303Stut int saw[6000];
1637895Sbostic char *comname = _PATH_EIGN;
1712303Stut 
main(argc,argv)1812303Stut main (argc,argv)
1912303Stut char *argv[];
2012303Stut {
2112303Stut 
2212303Stut 	int i, z;
2312303Stut 	char *name;
2412303Stut 
2512303Stut 	FILE *f;
2612303Stut 
2712303Stut 	while (argc>1 && argv[1][0] == '-')
2812303Stut 	{
2912303Stut 		switch(argv[1][1])
3012303Stut 		{
3112303Stut 		case 'h':
3212303Stut 			nh = atoi(argv[1]+2);
3312303Stut 			break;
3412303Stut 		}
3512303Stut 		argc--;
3612303Stut 		argv++;
3712303Stut 	}
3812303Stut 	if (argc<=1)
3912303Stut 		dofile(stdin, "");
4012303Stut 	else
4112303Stut 		for(i=1; i<argc; i++)
4212303Stut 		{
4312303Stut 			f = fopen(name=argv[i], "r");
4412303Stut 			if (f==NULL)
4512303Stut 				err("No file %s",name);
4612303Stut 			else
4712303Stut 				dofile(f, name);
4812303Stut 		}
4912303Stut 	for(z=i=0; i<nh; i++)
5012303Stut 	{
5112303Stut 		if (saw[i]) z++;
5212303Stut 	}
5312303Stut 	printf("hashes %d used %d\n",nh,z);
5412303Stut }
5512303Stut 
dofile(f,name)5612303Stut dofile(f, name)
5712303Stut FILE *f;
5812303Stut char *name;
5912303Stut {
6012303Stut 	/* read file f & spit out keys & ptrs */
6112303Stut 	char line[MAXLINE], *s;
6212303Stut 	char key[20], *p;
6312303Stut 	int k 0;
6412303Stut 	int c, lim;
6512303Stut 	int alph 0;
6612303Stut 	int used 0;
6712303Stut 	long lp 0;
6812303Stut 
6912303Stut 	while (fgets(line, MAXLINE, f))
7012303Stut 	{
7112303Stut 		k++;
7212303Stut 		used=alph=0;
7312303Stut 		lim = strlen(line);
7412303Stut 		p = key;
7512303Stut 		for(s=line; c= *s; s++)
7612303Stut 		{
7712303Stut 			if (isalpha(c) || isdigit(c))
7812303Stut 			{
7912303Stut 				if (alph++ < 6)
8012303Stut 					*p++ = c;
8112303Stut 			}
8212303Stut 			else
8312303Stut 			{
8412303Stut 				*p = 0;
8512303Stut 				if (outkey(p=key))
8612303Stut 				{
8712303Stut 					tkey(key,k);
8812303Stut 					used=1;
8912303Stut 				}
9012303Stut 				alph=0;
9112303Stut 			}
9212303Stut 		}
9312303Stut 		lp += lim;
9412303Stut 	}
9512303Stut }
9612303Stut 
outkey(ky)9712303Stut outkey( ky)
9812303Stut char *ky;
9912303Stut {
10012303Stut 	int n;
10112303Stut 	n = strlen(ky);
10212303Stut 	if (n<3) return(0);
10312303Stut 	if (isdigit(ky[0]))
10412303Stut 		if (ky[0] != '1' || ky[1] != '9' || n!= 4) return(0);
10512303Stut 	return(1);
10612303Stut }
10712303Stut 
hash(s)10812303Stut hash (s)
10912303Stut char *s;
11012303Stut {
11112303Stut 	int c, n, q;
11212303Stut 	for(q=n=0; c= *s; s++)
11312303Stut 		n += (c*n + c << (n%4));
11412303Stut 	return(n);
11512303Stut }
11612303Stut 
err(s,a)11712303Stut err (s, a)
11812303Stut char *s;
11912303Stut {
12012303Stut 	fprintf(stderr, "Error: ");
12112303Stut 	fprintf(stderr, s, a);
12212303Stut 	putc('\n', stderr);
12312303Stut }
12412303Stut 
prefix(t,s)12512303Stut prefix(t, s)
12612303Stut char *t, *s;
12712303Stut {
12812303Stut 	int c, d;
12912303Stut 	while ( (c= *t++) == *s++)
13012303Stut 		if (c==0) return(1);
13112303Stut 	return(c==0 ? 1: 0);
13212303Stut }
13312303Stut 
mindex(s,c)13412303Stut mindex(s, c)
13512303Stut char *s;
13612303Stut {
13712303Stut 	register char *p;
13812303Stut 	for( p=s; *p; p++)
13912303Stut 		if (*p ==c)
14012303Stut 			return(p);
14112303Stut 	return(0);
14212303Stut }
14312303Stut 
tkey(s,nw)14412303Stut tkey(s,nw)
14512303Stut char *s;
14612303Stut {
14712303Stut 	int x;
14812303Stut 	x = abs(hash(s)) % nh;
14912303Stut 	/* if (saw[x]) printf("%d %d\n", x, nw); */
15012303Stut 	saw[x]= nw;
15112303Stut }
15212303Stut 
abs(n)15312303Stut abs(n)
15412303Stut {
15512303Stut 	return(n>0 ? n : -n);
15612303Stut }
157