Index: /trunk/Ohana/src/imregister/Makefile
===================================================================
--- /trunk/Ohana/src/imregister/Makefile	(revision 3508)
+++ /trunk/Ohana/src/imregister/Makefile	(revision 3509)
@@ -20,5 +20,5 @@
 
 INCS	= 	-I$(INC) -I$(LINC) -I$(XINC)
-LIBS	= 	-L$(LLIB) -lFITS -lohana -lm 
+LIBS	= 	-L$(LLIB) -lohana -lFITS -lm 
 # CFLAGS	=	$(INCS) -Wall -Werror
 CFLAGS	=	$(INCS)
@@ -63,16 +63,16 @@
 
 SPOBJ  = \
-$(SPREG)/db.$(ARCH).o     \
 $(SPREG)/delete.$(ARCH).o \
 $(SPREG)/define.$(ARCH).o \
-$(SPREG)/spinfo.$(ARCH).o \
 $(SPREG)/match.$(ARCH).o  \
 $(SPREG)/modify.$(ARCH).o \
-$(SPREG)/fits_scan_nchar.$(ARCH).o \
 $(SPREG)/output.$(ARCH).o \
 $(SPREG)/unique.$(ARCH).o \
 $(SPREG)/ConfigInit.$(ARCH).o    \
+$(SPREG)/spinfo.$(ARCH).o \
+$(SPREG)/fits_scan_nchar.$(ARCH).o \
 $(SPREG)/showinfo.$(ARCH).o  \
 $(BASEDIR)/misc.$(ARCH).o        \
+$(BASEDIR)/version.$(ARCH).o        \
 $(BASEDIR)/parse_time.$(ARCH).o  \
 $(BASEDIR)/sort.$(ARCH).o
Index: /trunk/Ohana/src/imregister/base/misc.c
===================================================================
--- /trunk/Ohana/src/imregister/base/misc.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/base/misc.c	(revision 3509)
@@ -319,19 +319,4 @@
    */
 
-
-/* fseek with timeout - 0.5 sec */
-int Fseek (FILE *f, long offset, int whence) {
-
-  int status, k;
-
-  status = fseek (f, offset, whence);
-  if (status == -1) {
-    for (k = 0; (k < 10) && ((status = fseek (f, 0, SEEK_SET)) == -1); k++) usleep (50000);
-    if (status == -1) {
-      return (0);
-    }
-  }
-  return (1);
-}
 
 /* return values:
@@ -400,24 +385,4 @@
 }
   
-void make_backup (char *filename) {
-
-  int status, cmode;
-  struct stat filestat;
-  char line[256];
-
-  status = stat (filename, &filestat);
-  if (status == 0) { /* file exists, make backup copy */
-    sprintf (line, "cp %s %s~", filename, filename);
-    status = system (line);
-    if (status) {
-      fprintf (stderr, "ERROR: unable to create %s~, exiting\n", filename);
-      exit (0);
-    }
-    cmode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-    sprintf (line, "%s~", filename);
-    chmod (line, cmode);
-  }
-}
-
 int get_filter_arguments (int *argc, char **argv, int **Filt, int *Nfilt) {
 
@@ -458,34 +423,4 @@
   
    
-void get_version (int argc, char **argv, char *version) {
-
-  int N;
-  char *p, *q, *line;
-
-  if (get_argument (argc, argv, "-version")) {
-
-    N = strlen (version) + 2;
-    line = (char *) malloc (N);
-    bzero (line, N);
-
-    p = strstr (version, "$Revision: ");
-    if (p != (char *) NULL) 
-      p += strlen ("$Revision: ");
-    else
-      p = version;
-
-    q = strstr (p, "$");
-    if (q != (char *) NULL) 
-      N = q - p; 
-    else
-      N = strlen (p);
-
-    strncpy (line, p, N);
-
-    fprintf (stderr, "%s\n", line);
-    exit (2);
-  }
-}  
-
 /* replaces whitespace blocks with single . */
 void clean_spaces (char *line) {
Index: /trunk/Ohana/src/imregister/base/parse_time.c
===================================================================
--- /trunk/Ohana/src/imregister/base/parse_time.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/base/parse_time.c	(revision 3509)
@@ -119,9 +119,2 @@
 }
 
-void uppercase (char *string) {
-
-  int i;
-    
-  for (i = 0; i < strlen (string); i++) string[i] = toupper (string[i]);
-
-}
Index: /trunk/Ohana/src/imregister/include/imregister.h
===================================================================
--- /trunk/Ohana/src/imregister/include/imregister.h	(revision 3508)
+++ /trunk/Ohana/src/imregister/include/imregister.h	(revision 3509)
@@ -80,11 +80,8 @@
 int str_to_time (char *line, unsigned long *second);
 
-int Fseek (FILE *f, long offset, int whence);
 int get_trange_arguments (int *argc, char **argv, unsigned long **Tstart, unsigned long **Tstop, int *ntimes);
 int get_filter_arguments (int *argc, char **argv, int **Filt, int *Nfilt);
 
-void make_backup (char *filename);
 int parse_time (Header *header);
-void uppercase (char *string);
 void sort (float *value, int N);
 void dsort (double *value, int N);
Index: /trunk/Ohana/src/imregister/include/spreg.h
===================================================================
--- /trunk/Ohana/src/imregister/include/spreg.h	(revision 3508)
+++ /trunk/Ohana/src/imregister/include/spreg.h	(revision 3509)
@@ -1,27 +1,3 @@
 # include <signal.h>
-
-/*** fits_db test APIs ***/
-typedef struct {
-  FILE  *f;
-  char  *extname;
-  int    dbstate;
-  int    lockstat;
-  Header header;
-  Matrix matrix;
-  Header theader;
-  FTable ftable;
-} DB;
-
-DB *fits_db_init ();
-DB *fits_db_lock (DB *db, char *filename);
-int fits_db_load (DB *db);
-int fits_db_save (DB *db);
-int fits_db_free (DB *db);
-int fits_db_update (DB *db, VTable *vtable);
-int fits_db_close (DB *db);
-int fits_db_print_status (DB *db, char *message);
-int fits_db_escape (DB *db, char *message);
-
-/**** move to fitsio.h ***/
 
 enum {
@@ -42,32 +18,4 @@
   SPSTATE_N
 };
-
-/* structure for Image Registration Database */
-typedef struct {
-  float ra, dec;
-  float exptime;
-  float airmass;
-
-  float Ws, We, dW;
-
-  int  Nspec;
-
-  unsigned long int obstime;
-  unsigned long int regtime;
-
-  char mode;                       /* MEF, SINGLE, SPLIT */
-  char state;                      /* MEF, SINGLE, SPLIT */
-  char flag;                       /* image status flags */
-  char extra[13];
-
-  char pathname[64];
-  char filename[32];
-  char extname[16];
-
-  char instrument[16];
-  char telescope[16];
-  char objname[16];
-
-} Spectrum;  /* 328 bytes / image */
 
 struct {
@@ -132,37 +80,23 @@
 
 int args (int argc, char **argv);
-Spectrum *get_spectrums (int *N);
-int set_spectrums (Spectrum *new, int Nnew);
-int load_db ();
-int save_db ();
-int update_db (int *match, int Nmatch);
-int append_db (Spectrum *new, int Nnew);
-int create_db ();
-int close_db ();
-void DeleteSubset (int *match, int Nmatch);
-Spectrum *spinfo (char *filename);
-int *match_criteria (int *Nmatch);
-int *match_spectrums (Spectrum *subset, int Nsubset, int *Nmatch);
-void ModifySubset (int *match, int Nmatch);
+int *match_criteria (Spectrum *spectrum, int Nspectrum, int *Nmatch);
+int *unique_entries (Spectrum *spectrum, int Nspectrum, int *subset, int *Nmatch);
+
+void ModifySubset (FITS_DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch);
+void DeleteSubset (FITS_DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch);
+void OutputSubset (Spectrum *spectrum, int Nspectrum, int *match, int Nmatch);
+
 void SetOutputMode (char *mode);
-void OutputSubset (int *match, int Nmatch);
 void DumpFitsBintable (char *filename, Spectrum *spectrum, int *match, int Nmatch);
 void DumpFitsTable (char *filename, Spectrum *spectrum, int *match, int Nmatch);
 int PrintSubset (Spectrum *spectrum, int *match, int Nmatch);
 int dump_data (Spectrum *spectrum, int Nspectrum);
+
+Spectrum *spinfo (char *filename);
+int *match_spectrums (Spectrum *subset, int Nsubset, int *Nmatch);
 int SubmitSpectrums (Spectrum *spectrum);
 int load_probes (char *filename, unsigned long tzero, int *wantprobe, double *values, int Nprobe);
 int define_table (Header *header, Matrix *matrix, Header *theader, FTable *table);
 void set_timezone (double dt);
-
-void DumpCADCTable (char *filename, Spectrum *spectrum, int *match, int Nmatch);
-int *GetObsIDSubset (Spectrum *spectrum, int start, int *index, int *entry, int Nindex, int *Nsubset);
-int *GetUniqueObsID (Spectrum *spectrum, int *index, int *entry, int Nindex, int *Nmatch);
-void GetObsIDIndex (Spectrum *spectrum, int *match, int Nmatch, int **Index, int **Entry);
-double SigmaClipList (double *list, int N);
-double MosaicIQStats (Spectrum *spectrum, int *match, int Nmatch, MosaicRegion *region);
-MosaicLayout *CreateCFH12K ();
-MosaicLayout *CreateMegaCam ();
-int GetREFCCD (Spectrum *spectrum, int *index, int *entry, int Nindex, int start);
 
 void showinfo (Spectrum *spec);
@@ -173,4 +107,2 @@
 int fits_scan_nchar (Header *header, int size, char *field, int N,...);
 void warn_scan_nchar (Header *header, int size, char *field, int N, void *var);
-
-int *unique_entries (int *subset, int *Nmatch);
Index: /trunk/Ohana/src/imregister/spreg/delete.c
===================================================================
--- /trunk/Ohana/src/imregister/spreg/delete.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/spreg/delete.c	(revision 3509)
@@ -2,5 +2,5 @@
 # include "spreg.h"
 
-void DeleteSubset (DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch) {
+void DeleteSubset (FITS_DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch) {
 
   int i, j;
@@ -32,6 +32,12 @@
   free (keep);
 
-  fits_table_set_Spectrum (&db[0].table, subset, Nsubset);
+  /** we may later want to pull this out and put it elsewhere **/
+  /** free db[0].theader, db[0].table.buffer? **/
+  fits_table_set_Spectrum (&db[0].ftable, subset, Nsubset);
   fits_db_save (db);
+  fits_db_close (db);
+  fits_db_free (db);
+
+  fprintf (stderr, "SUCCESS\n");
   exit (0);
 }
Index: /trunk/Ohana/src/imregister/spreg/match.c
===================================================================
--- /trunk/Ohana/src/imregister/spreg/match.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/spreg/match.c	(revision 3509)
@@ -49,4 +49,6 @@
 }
 
+# if (0)
+
 int *match_spectra (Spectrum *subset, int Nsubset, int *Nmatch) {
   
@@ -82,2 +84,4 @@
   return (match);
 }
+
+# endif
Index: /trunk/Ohana/src/imregister/spreg/modify.c
===================================================================
--- /trunk/Ohana/src/imregister/spreg/modify.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/spreg/modify.c	(revision 3509)
@@ -2,5 +2,5 @@
 # include "spreg.h"
 
-void ModifySubset (DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch) {
+void ModifySubset (FITS_DB *db, Spectrum *spectrum, int Nspectrum, int *match, int Nmatch) {
 
   int i, j, Nold;
@@ -38,11 +38,14 @@
   }
 
-  fits_vtable_from_ftable (&vtable, &db[0].ftable, match, Nmatch);
+  /** we may later want to pull this out and put it elsewhere **/
+  fits_vtable_from_ftable (&db[0].ftable, &vtable, match, Nmatch);
   for (i = 0; i < Nmatch; i++) {
-    fits_convert_Spectrum (vtable.buffer[i], 1);
+    fits_convert_Spectrum ((Spectrum *) vtable.buffer[i], sizeof (Spectrum), 1);
   }
   fits_db_update (db, &vtable);
+  fits_db_close (db);
+  fits_db_free (db);
+
   fprintf (stderr, "SUCCESS\n");
   exit (0);
-
 }
Index: /trunk/Ohana/src/imregister/spreg/output.c
===================================================================
--- /trunk/Ohana/src/imregister/spreg/output.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/spreg/output.c	(revision 3509)
@@ -3,5 +3,4 @@
 
 static int RegTimeMode = FALSE;
-static int PTstyle     = FALSE;
 
 void SetOutputMode (char *mode) {
@@ -11,13 +10,9 @@
     return;
   }
-  if (!strcmp (mode, "PTstyle")) {
-    PTstyle = TRUE;
-    return;
-  }
-
+  return;
 }
 
 /* given a subset list, write out the selected spectra, if desired */
-void OutputSubset (Spectrum *spectra, int Nspectra, int *match, int Nmatch) {
+void OutputSubset (Spectrum *spectrum, int Nspectra, int *match, int Nmatch) {
 
   if (output.table != (char *) NULL) {
@@ -37,4 +32,5 @@
 
   int i, j;
+  FILE *f;
   Header header;
   Matrix matrix;
@@ -58,9 +54,9 @@
 
   /* create primary header */
-  fits_init_header (header);    
-  header[0].extend = TRUE;
-  fits_create_header (header);
-  fits_create_matrix (header, matrix);
-  fits_print (header, "NEXTEND", "%d", 1, 1);
+  fits_init_header (&header);    
+  header.extend = TRUE;
+  fits_create_header (&header);
+  fits_create_matrix (&header, &matrix);
+  fits_print (&header, "NEXTEND", "%d", 1, 1);
 
   ftable.header = &theader;
@@ -70,5 +66,5 @@
   fits_fwrite_matrix   (f, &matrix);
   fits_fwrite_Theader  (f, &theader);
-  fits_fwrite_ftable   (f, &ftable);
+  fits_fwrite_table   (f, &ftable);
   fclose (f);
 
@@ -76,5 +72,5 @@
 }
 
-/* can the table definition here be autocoded as well? */
+/* write out an ASCII table */
 void DumpFitsTable (char *filename, Spectrum *spectrum, int *match, int Nmatch) {
   
@@ -82,7 +78,8 @@
   char *obsstr, *regstr, *line, *datestr;
   unsigned long tsecond;
+  FILE *f;
   Header header, theader;
   Matrix matrix;
-  FTable table;
+  FTable ftable;
   Spectrum *subset;
 
@@ -94,19 +91,20 @@
   fits_print (&header, "NEXTEND", "%d", 1, 1);
   
+  /* the ASCII table is always a little harder than the binary:
+   * we need to build the data line a bit carefully 
+   */
+
+  /* create an empty table which we will fill in by hand */
   ftable.header = &theader;
   fits_table_set_SpectrumASCII (&ftable, NULL, 0);
   
-  /* the ASCII table is always a little harder than the binary 
-     need to build the data line a bit carefully 
-   */
-
   /* add data to table */
   for (i = 0; i < Nmatch; i++) {
     subset = &spectrum[match[i]];
-    obsstr   = sec_to_date (subset[0].obstime);
-    regstr   = sec_to_date (subset[0].regtime);
+    obsstr = sec_to_date (subset[0].obstime);
+    regstr = sec_to_date (subset[0].regtime);
 
     /* we should get an error here if we don't construct this line correctly */
-    line = fits_table_print (&table, subset[0].filename, subset[0].pathname, subset[0].instrument, 
+    line = fits_table_print (&ftable, subset[0].filename, subset[0].pathname, subset[0].instrument, 
 			     subset[0].telescope, subset[0].objname, subset[0].extname, 
 			     subset[0].ra, subset[0].dec, subset[0].exptime, subset[0].airmass, 
@@ -115,5 +113,5 @@
 			     subset[0].mode, subset[0].state, subset[0].flag);
 
-    fits_add_rows (&table, line, 1, strlen(line));
+    fits_add_rows (&ftable, line, 1, strlen(line));
     free (line);
     free (obsstr);
@@ -127,8 +125,17 @@
   fits_modify (&theader, "DATE", "%s", 1, datestr);
 
-  fits_write_header  (filename, &header);
-  fits_write_matrix  (filename, &matrix);
-  fits_write_Theader (filename, &theader);
-  fits_write_table   (filename, &table);
+  /* open file for output */
+  f = fopen (filename, "w");
+  if (f == NULL) {
+    fprintf (stderr, "ERROR: can't open output file %s\n", filename);
+    exit (1);
+  }
+
+  fits_fwrite_header  (f, &header);
+  fits_fwrite_matrix  (f, &matrix);
+  fits_fwrite_Theader (f, &theader);
+  fits_fwrite_table   (f, &ftable);
+  fclose (f);
+
   exit (0);
 }
Index: /trunk/Ohana/src/imregister/src/spregister.c
===================================================================
--- /trunk/Ohana/src/imregister/src/spregister.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/src/spregister.c	(revision 3509)
@@ -1,28 +1,46 @@
 # include "imregister.h"
 # include "spreg.h"
-static char *version = "spregister $Revision: 1.3 $";
+static char *version = "spregister $Revision: 1.4 $";
 
 int main (int argc, char **argv) {
  
-  Spectrum *spectrum, *pspectrum;
-  int status, Nnew;
+  Spectrum *spectrum;
+  VTable vtable;
+  FITS_DB db;
 
   get_version (argc, argv, version);
   args (argc, argv);
+
   spectrum = spinfo (argv[1]);
 
   if (DUMP) showinfo (spectrum);
 
-  Nnew = 1;
-  pspectrum = &spectrum[0];
-
   if (NoReg) exit (0);
 
-  set_db (SpectrumDB);
-  status = load_db ();
-  if (!status) {
-    create_db ();
+  db.lockstate = LCK_HARD;
+  db.timeout   = 300.0;
+
+  fits_db_init (&db);
+
+  if (!fits_db_lock (&db, SpectrumDB)) {
+    fits_db_close (&db);
+    exit (1);
   }
-  append_db (pspectrum, Nnew);
+  if (db.dbstate == LCK_EMPTY) {
+    /* create db header & matrix */
+  } else {  
+    if (!fits_db_load (&db)) {
+      fits_db_close (&db);
+      exit (1);
+    }
+  }
+
+  /** we may later want to pull this out and put it elsewhere **/
+  fits_convert_Spectrum (spectrum, sizeof (Spectrum), 1);
+  fits_table_to_vtable (&db.ftable, &vtable, 0, 1);
+  fits_db_update (&db, &vtable);
+  fits_db_close (&db);
+  fits_db_free (&db);
+
   exit (0);
 }
Index: /trunk/Ohana/src/imregister/src/spsearch.c
===================================================================
--- /trunk/Ohana/src/imregister/src/spsearch.c	(revision 3508)
+++ /trunk/Ohana/src/imregister/src/spsearch.c	(revision 3509)
@@ -1,39 +1,41 @@
 # include "imregister.h"
 # include "spreg.h"
-static char *version = "spsearch $Revision: 1.2 $";
+static char *version = "spsearch $Revision: 1.3 $";
 
 int main (int argc, char **argv) {
  
-  int status, Nmatch, Nspectra;
-  int *match;
-  DB *db;
-  Spectrum *spectra;
+  int Nmatch, Nspectrum, *match;
+  Spectrum *spectrum;
+  FITS_DB db;
 
   get_version (argc, argv, version);
   args (argc, argv);
 
-  lockstate = (output.modify || output.delete) ? LCK_HARD : LCK_SOFT;
-  db = fits_db_init (lockstate);
+  db.lockstate = (output.modify || output.delete) ? LCK_HARD : LCK_SOFT;
+  db.timeout   = 300.0;
 
-  if (!fits_db_lock (db, SpectrumDB)) {
-    fits_db_close (db);
+  fits_db_init (&db);
+
+  if (!fits_db_lock (&db, SpectrumDB)) {
+    fits_db_close (&db);
     exit (1);
   }
   
-  if (!fits_db_load (db)) {
-    fits_db_close (db);
+  if (!fits_db_load (&db)) {
+    fits_db_close (&db);
     exit (1);
   }
-  if (!output.modify && !output.delete) fits_db_close (db);
 
-  spectrum = fits_table_get_Spectrum (&db[0].table, &Nspectrum);
+  if (!output.modify && !output.delete) fits_db_close (&db);
+
+  spectrum = fits_table_get_Spectrum (&db.ftable, &Nspectrum);
   
-  match = match_criteria (spectra, Nspectra, &Nmatch);
-  match = unique_entries (spectra, Nspectra, match, &Nmatch);
+  match = match_criteria (spectrum, Nspectrum, &Nmatch);
+  match = unique_entries (spectrum, Nspectrum, match, &Nmatch);
 
-  if (output.modify) ModifySubset (db, spectra, Nspectra, match, Nmatch);
-  if (output.delete) DeleteSubset (db, spectra, Nspectra, match, Nmatch);
+  if (output.modify) ModifySubset (&db, spectrum, Nspectrum, match, Nmatch);
+  if (output.delete) DeleteSubset (&db, spectrum, Nspectrum, match, Nmatch);
 
-  OutputSubset (spectra, Nspectra, match, Nmatch);
+  OutputSubset (spectrum, Nspectrum, match, Nmatch);
 
   exit (0);
