#include "focas1.h" struct objrec ob[ARMAX]; struct areas area[ARMAX]; /* SPLITS -- Split objects by increasing isophotes */ splits (catalog, nlevels, type, center, v0, v1) char *catalog; int *nlevels, *type, *center; float *v0, *v1; { FILE *fout; int level, tmpflag; cfd = catopen (catalog, 0); pfd = fndfld (sp.ptfl, 0); afd = fndar (sp.arfl, 2); cmmnt ("splits"); fout = catopen ("splits.tmp", 1); fclose (fout); fout = catopen ("splits.tmp", 2); setr (); tmpflag = -1; level = -1; for (;;) { if (rdcatob (cfd, 0L, ob)) break; wtcat (ob, fout); split (fout, level, *nlevels, *type, *center, *v0, *v1, &tmpflag); } fclose (afd); fclose (cfd); fclose (fout); c_delete (catalog); c_rename ("splits.tmp", catalog); } split (fd, level, nlevels, type, center, v0, v1, tmpflag) int fd; int level; int nlevels; int type; int center; float v0; float v1; int *tmpflag; { long i, n, pos, szrec, szobjrec(); szrec = szobjrec (); fseek (fd, -szrec , 1); for (;;) { if (rdcatob (fd, 0L, ob)) break; if ((level > 0) && (ob[0].subent >= level)) continue; if ((ob[0].class[0] != 'm') && ffilter (ob)) { rdarea (afd, ob[0].entnum, ob[0].subent, ob[0].arpos, area); n = msplit (ob, area, nlevels, 0); fseek (fd, -szrec, 1); pos = ftell (fd) + szrec; wtcat (ob, fd); fseek (fd, 0L, 2); if (n > 0) { for (i = 1; i <= n; i++) { ob[i].arpos = wrarea (afd, &ob[i], &area[i]); fit (&ob[i], &area[i], type, center, v0, v1, tmpflag); classes (&ob[i]); wtcat (&ob[i], fd); } } fseek (fd, pos, 0); } } }