home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / refer / inv5.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  864 b   |  51 lines

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