|
|
1.1 ! root 1: /* @(#)hashcheck.c 1.1 */ ! 2: #include <stdio.h> ! 3: #include "hash.h" ! 4: long fetch(); ! 5: unsigned short index[NI]; ! 6: unsigned *table; ! 7: unsigned wp; ! 8: int bp; ! 9: #define U (BYTE*sizeof(unsigned)) ! 10: #define L (BYTE*sizeof(long)) ! 11: ! 12: main() ! 13: { ! 14: int i; ! 15: long v; ! 16: long a; ! 17: extern char *malloc(); ! 18: rhuff(stdin); ! 19: fread((char*)index, sizeof(*index), NI, stdin); ! 20: table = (unsigned*)malloc(index[NI-1]*sizeof(*table)); ! 21: fread((char*)table, sizeof(*table), index[NI-1], stdin); ! 22: for(i=0;i<NI-1;i++) { ! 23: bp = U; ! 24: v = (long)i<<(HASHWIDTH-INDEXWIDTH); ! 25: for(wp=index[i];wp<index[i+1]; ) { ! 26: if(wp==index[i]&&bp==U) ! 27: a = fetch(); ! 28: else { ! 29: a = fetch(); ! 30: if(a==0) ! 31: break; ! 32: } ! 33: if(wp>index[i+1]|| ! 34: wp==index[i+1]&&bp<U) ! 35: break; ! 36: v += a; ! 37: printf("%.9lo\n",v); ! 38: } ! 39: } ! 40: } ! 41: ! 42: long fetch() ! 43: { ! 44: long w; ! 45: long y = 0; ! 46: int empty = L; ! 47: int i = bp; ! 48: int tp = wp; ! 49: while(empty>=i) { ! 50: empty -= i; ! 51: i = U; ! 52: y |= (long)table[tp++] << empty; ! 53: } ! 54: if(empty>0) ! 55: y |= table[tp]>>i-empty; ! 56: i = decode((y>>1)&((1L<<(BYTE*sizeof(y)-1))-1), &w); ! 57: bp -= i; ! 58: while(bp<=0) { ! 59: bp += U; ! 60: wp++; ! 61: } ! 62: return(w); ! 63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.