include include include include "identify.h" include # ID_DBREAD -- Read features data from the database. procedure id_dbread (id, name, ap, add, verbose) pointer id # ID pointer char name[SZ_LINE] # Image name int ap[2] # Aperture number int add # Add features? int verbose # Verbose flag int rec, dtlocate() pointer sp, line, str errchk dtremap, dtlocate, id_dbread_rec begin call smark (sp) call salloc (line, SZ_LINE, TY_CHAR) call strcpy ("id", Memc[line], SZ_LINE) call imgcluster (name, Memc[line+2], SZ_LINE) call dtremap (ID_DT(id), ID_DATABASE(id), Memc[line], READ_ONLY) call id_dbsection (id, name, ap, ID_SECTION(id), ID_LENSTRING) call sprintf (Memc[line], SZ_LINE, "identify %s%s") call pargstr (name) call pargstr (ID_SECTION(id)) iferr (rec = dtlocate (ID_DT(Id), Memc[line])) { call salloc (str, SZ_LINE, TY_CHAR) call sprintf (Memc[str], SZ_LINE, "Entry not found: %s") call pargstr (Memc[line]) call error (0, Memc[str]) } call id_dbread_rec (id, rec, add) if (ID_NFEATURES(id) > 0) { ID_NEWGRAPH(id) = YES ID_NEWFEATURES(id) = YES ID_CURRENT(id) = 1 } else ID_CURRENT(id) = 0 if (verbose == YES) { call printf ("identify %s%s\n") call pargstr (name) call pargstr (ID_SECTION(id)) } call sfree (sp) end # ID_DBSAVE -- Read all entries from a database and save. procedure id_dbsave (id, name) pointer id # ID pointer char name[SZ_LINE] # Image name int rec, dtgeti() pointer sp, line, dt errchk dtremap, dtgeti, id_dbread_rec, id_saveap begin call smark (sp) call salloc (line, SZ_FNAME, TY_CHAR) call strcpy ("id", Memc[line], SZ_FNAME) call imgcluster (name, Memc[line+2], SZ_FNAME) call dtremap (ID_DT(id), ID_DATABASE(id), Memc[line], READ_ONLY) dt = ID_DT(id) do rec = 1, DT_NRECS(dt) { ID_AP(id,1) = dtgeti (dt, rec, "aperture") ID_AP(id,2) = 1 call id_dbread_rec (id, rec, NO) call id_saveap (id) } call sfree (sp) end # ID_DBREAD_REC -- Read specified record from the database. procedure id_dbread_rec (id, rec, add) pointer id # ID pointer int rec # Database record int add # Add features? double pix int i, j, k, ncoeffs pointer dt, sh, sp, line, coeffs int dtgeti(), dcvstati(), dtscan(), nscan() real dtgetr() double dcvstatd() errchk dtgeti(), dtgad() begin call smark (sp) call salloc (line, SZ_LINE, TY_CHAR) dt = ID_DT(id) sh = ID_SH(id) if (add == YES) { j = dtgeti (dt, rec, "features") k = j + ID_NFEATURES(id) ID_NALLOC(id) = k call realloc (ID_PIX(id), k, TY_DOUBLE) call realloc (ID_FIT(id), k, TY_DOUBLE) call realloc (ID_USER(id), k, TY_DOUBLE) call realloc (ID_WTS(id), k, TY_DOUBLE) call realloc (ID_FWIDTHS(id), k, TY_REAL) call realloc (ID_FTYPES(id), k, TY_INT) call realloc (ID_LABEL(id), k, TY_POINTER) do i = 1, j { k = dtscan (dt) call gargd (pix) ID_NFEATURES(id) = ID_NFEATURES(id) + 1 for (k=ID_NFEATURES(id); (k>1)&&(pix