#include "focas1.h" #define FMAX 10 /* MERGE - Merge catalogs */ merge (argv, argc, output) char *argv[]; int *argc; char output[]; { int i, j, k, n; struct objrec ob[FMAX]; FILE *fin[FMAX], *fout; for (i = 0, n = 0; i < *argc && i < FMAX; i++, n++) fin[n] = catopen (argv[i], 0); rdcathdr (fin[0], 0); fout = catopen (output, 2); wtcathdr (fout, 0); for (i = 0; i < n; i++) { if (rdcatob (fin[i], 0L, &ob[i])) { for (j = i + 1; j < n; j++) fin[j - 1] = fin[j]; n--; i--; } } for (; n > 0;) { for (i = 0, j = n; i < n; i++) { for (j = i + 1; j < n; j++) { if (ob[j].entnum < ob[i].entnum) break; if (ob[j].entnum > ob[i].entnum) continue; if (rdcatob (fin[j], 0L, &ob[j])) { for (k = j + 1; k < n; k++) { fin[k - 1] = fin[k]; ob[k - 1] = ob[k]; } n--; j--; } } if (j == n) { wtcat (&ob[i], fout); if (rdcatob (fin[i], 0L, &ob[i])) { for (j = i + 1; j < n; j++) { fin[j - 1] = fin[j]; ob[j - 1] = ob[j]; } n--; } break; } } } for (i=0; i