1 #ifndef lint 2 static char *sccsid = "@(#)inv6.c 4.2 (Berkeley) 01/09/85"; 3 #endif 4 5 #include <stdio.h> 6 #include <assert.h> 7 8 whash(ft, fa, fb, nhash, iflong, ptotct, phused) 9 FILE *fa, *fb, *ft; 10 int nhash, *phused; 11 long *ptotct; 12 { 13 char line[100]; 14 int hash = 0, hused = 0; 15 long totct = 0L; 16 int ct = 0; 17 long point; 18 long opoint = -1; 19 int m; 20 int k; 21 long lp; 22 long *hpt; 23 int *hfreq; 24 25 hpt = (long *) calloc (nhash+1, sizeof(*hpt)); 26 _assert (hpt != NULL); 27 hfreq = (int *) calloc (nhash, sizeof(*hfreq)); 28 _assert (hfreq != NULL); 29 hpt[0] = 0; 30 lp= 0; 31 while (fgets(line, 100, ft)) 32 { 33 totct++; 34 sscanf(line, "%d %ld", &k, &point); 35 if (hash < k) 36 { 37 hused++; 38 if (iflong) putl(-1L, fb); 39 else putw(-1, fb); 40 hfreq[hash]=ct; 41 while (hash<k) 42 { 43 hpt[++hash] = lp; 44 hfreq[hash] = 0; 45 } 46 hpt[hash] = lp += iflong? sizeof(long) : sizeof(int); 47 opoint= -1; 48 ct=0; 49 } 50 if (point!=opoint) 51 { 52 if (iflong) 53 putl(opoint=point, fb); 54 else 55 putw( (int)(opoint=point), fb); 56 lp += iflong? sizeof(long) : sizeof(int); 57 ct++; 58 } 59 } 60 if (iflong) putl(-1L, fb); 61 else putw(-1,fb); 62 while (hash<nhash) 63 hpt[++hash]=lp; 64 fwrite(&nhash, sizeof(nhash), 1, fa); 65 fwrite(&iflong, sizeof(iflong), 1, fa); 66 fwrite(hpt, sizeof(*hpt), nhash, fa); 67 fwrite (hfreq, sizeof(*hfreq), nhash, fa); 68 *ptotct = totct; 69 *phused = hused; 70 } 71 72 putl(ll, f) 73 long ll; 74 FILE *f; 75 { 76 putw(ll, f); 77 } 78 79 long 80 getl(f) 81 FILE *f; 82 { 83 return(getw(f)); 84 } 85