xref: /original-bsd/old/refer/inv/inv5.c (revision 1403a0cd)
1 #ifndef lint
2 static char *sccsid = "@(#)inv5.c	4.2 (Berkeley) 01/09/85";
3 #endif
4 
5 #include <stdio.h>
6 
7 recopy (ft, fb, fa, nhash)
8 FILE *ft, *fb, *fa;
9 {
10 	/* copy fb (old hash items/pointers) to ft (new ones) */
11 	int n, i, iflong;
12 	long getl();
13 	int getw();
14 	int *hpt_s;
15 	int (*getfun)();
16 	long *hpt_l;
17 	long k, lp;
18 	if (fa==NULL)
19 	{
20 		err("No old pointers",0);
21 		return;
22 	}
23 	fread(&n, sizeof(n), 1, fa);
24 	fread(&iflong, sizeof(iflong), 1, fa);
25 	if (iflong)
26 	{
27 		hpt_l = (long *) calloc(sizeof(*hpt_l), n+1);
28 		n =fread(hpt_l, sizeof(*hpt_l), n, fa);
29 	}
30 	else
31 	{
32 		hpt_s =  (int *) calloc(sizeof(*hpt_s), n+1);
33 		n =fread(hpt_s, sizeof(*hpt_s), n, fa);
34 	}
35 	if (n!= nhash)
36 		fprintf(stderr, "Changing hash value to old %d\n",n);
37 	fclose(fa);
38 	if (iflong)
39 		getfun = getl;
40 	else
41 		getfun = getw;
42 	for(i=0; i<n; i++)
43 	{
44 		if (iflong)
45 			lp = hpt_l[i];
46 		else
47 			lp = hpt_s[i];
48 		fseek(fb, lp, 0);
49 		while ( (k= (*getfun)(fb) ) != -1)
50 			fprintf(ft, "%04d %06ld\n",i,k);
51 	}
52 	fclose(fb);
53 	return(n);
54 }
55