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