Research V7 development
[unix-history] / usr / src / cmd / refer / thash.c
CommitLineData
52960f2f
ML
1# include "stdio.h"
2int nh 500;
3int saw[6000];
4char *comname "/usr/lib/eign";
5
6main (argc,argv)
7 char *argv[];
8{
9
10int i, z;
11char *name;
12
13FILE *f;
14
15while (argc>1 && argv[1][0] == '-')
16 {
17 switch(argv[1][1])
18 {
19 case 'h':
20 nh = atoi(argv[1]+2); break;
21 }
22 argc--; argv++;
23 }
24if (argc<=1)
25 dofile(stdin, "");
26else
27for(i=1; i<argc; i++)
28 {
29 f = fopen(name=argv[i], "r");
30 if (f==NULL)
31 err("No file %s",name);
32 else
33 dofile(f, name);
34 }
35for(z=i=0; i<nh; i++)
36 {
37 if (saw[i]) z++;
38 }
39printf("hashes %d used %d\n",nh,z);
40}
41# include "stdio.h"
42
43dofile(f, name)
44 FILE *f;
45 char *name;
46{
47
48/* read file f & spit out keys & ptrs */
49# define MAXLINE 750
50char line[MAXLINE], *s;
51char key[20], *p;
52int k 0;
53int c, lim;
54int alph 0;
55int used 0;
56long lp 0;
57
58while (fgets(line, MAXLINE, f))
59 {
60 k++;
61 used=alph=0;
62 lim = strlen(line);
63 p = key;
64 for(s=line; c= *s; s++)
65 {
66 if (isalpha(c) || isdigit(c))
67 {
68 if (alph++ < 6)
69 *p++ = c;
70 }
71 else
72 {
73 *p = 0;
74 if (outkey(p=key))
75 {
76 tkey(key,k);
77 used=1;
78 }
79 alph=0;
80 }
81 }
82 lp += lim;
83 }
84}
85
86outkey( ky)
87 char *ky;
88{
89 int n;
90n = strlen(ky);
91if (n<3) return(0);
92if (isdigit(ky[0]))
93 if (ky[0] != '1' || ky[1] != '9' || n!= 4) return(0);
94return(1);
95}
96# include "stdio.h"
97hash (s)
98 char *s;
99{
100int c, n, q;
101for(q=n=0; c= *s; s++)
102 n += (c*n + c << (n%4));
103return(n);
104}
105err (s, a)
106 char *s;
107{
108fprintf(stderr, "Error: ");
109fprintf(stderr, s, a);
110putc('\n', stderr);
111}
112prefix(t, s)
113 char *t, *s;
114{
115int c, d;
116while ( (c= *t++) == *s++)
117 if (c==0) return(1);
118return(c==0 ? 1: 0);
119}
120mindex(s, c)
121 char *s;
122{
123register char *p;
124for( p=s; *p; p++)
125 if (*p ==c)
126 return(p);
127return(0);
128}
129tkey(s,nw)
130 char *s;
131{
132int x;
133x = abs(hash(s)) % nh;
134/* if (saw[x]) printf("%d %d\n", x, nw); */
135saw[x]= nw;
136}
137abs(n)
138{
139return(n>0 ? n : -n);
140}