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