/********************************************************************** * Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. * * All Rights Reserved. * * Reference "/usr/src/COPYRIGHT" for applicable restrictions. * **********************************************************************/ static char Sccsid[] = "@(#)inv6.c 3.0 4/22/86"; # include "stdio.h" # include "assert.h" whash(ft, fa, fb, nhash, iflong, ptotct, phused) FILE *fa, *fb, *ft; int nhash, *phused; long *ptotct; { char line[100]; int hash 0, hused 0; long totct 0L; int ct 0; long point; long opoint -1; int m; int k; long lp; long *hpt; int *hfreq NULL; hpt = calloc (nhash+1, sizeof(*hpt)); _assert (hpt != NULL); hfreq = calloc (nhash, sizeof(*hfreq)); _assert (hfreq !=NULL); hpt[0] = 0; lp= 0; while (fgets(line, 100, ft)) { totct++; sscanf(line, "%d %ld", &k, &point); if (hash < k) { hused++; if (iflong) putl(-1L, fb); else putw(-1, fb); hfreq[hash]=ct; while (hash<k) { hpt[++hash] = lp; hfreq[hash] = 0; } hpt[hash] = lp += iflong? sizeof(long) : sizeof(int); opoint= -1; ct=0; } if (point!=opoint) { if (iflong) putl(opoint=point, fb); else putw( (int)(opoint=point), fb); lp += iflong? sizeof(long) : sizeof(int); ct++; } } if (iflong) putl(-1L, fb); else putw(-1,fb); while (hash<nhash) hpt[++hash]=lp; fwrite(&nhash, sizeof(nhash), 1, fa); fwrite(&iflong, sizeof(iflong), 1, fa); fwrite(hpt, sizeof(*hpt), nhash, fa); fwrite (hfreq, sizeof(*hfreq), nhash, fa); *ptotct = totct; *phused = hused; } putl(ll, f) long ll; FILE *f; { int *x; x = ≪ putw(x[0], f); putw(x[1], f); } long getl(f) FILE *f; { int x[2]; int *ll; x[0] = getw(f); x[1] = getw(f); ll = x; return (*ll); }