#include <stdio.h>
#include <locale.h>
extern void err();
int
recopy(FILE *ft, FILE *fb, FILE *fa, int nhash)
{
int n, i, iflong;
long getl();
int getw();
int *hpt_s;
int (*getfun)();
long *hpt_l;
long k, lp;
if (fa == NULL) {
err(gettext("No old pointers"), 0);
return (0);
}
fread(&n, sizeof (n), 1, fa);
fread(&iflong, sizeof (iflong), 1, fa);
if (iflong) {
hpt_l = (long *)calloc(sizeof (*hpt_l), n+1);
n = fread(hpt_l, sizeof (*hpt_l), n, fa);
} else {
hpt_s = (int *)calloc(sizeof (*hpt_s), n+1);
n = fread(hpt_s, sizeof (*hpt_s), n, fa);
}
if (n != nhash)
fprintf(stderr, gettext("Changing hash value to old %d\n"), n);
fclose(fa);
if (iflong)
getfun = (int(*)())getl;
else
getfun = getw;
for (i = 0; i < n; i++) {
if (iflong)
lp = hpt_l[i];
else
lp = hpt_s[i];
fseek(fb, lp, 0);
while ((k = (*getfun)(fb)) != -1)
fprintf(ft, "%04d %06ld\n", i, k);
}
fclose(fb);
return (n);
}