Index: /trunk/Ohana/src/libdvo/src/dvo_catalog_split.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 15747)
+++ /trunk/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 15748)
@@ -65,4 +65,5 @@
     }
   }		
+  free (tmpfilt);
   free (primary);
   return (TRUE);
@@ -101,8 +102,7 @@
 int dvo_catalog_open_subcat (Catalog *catalog, Catalog **Subcat, Header *header, char *name, int VERBOSE) {
 
-  int status;
+  int Nskip, status;
   char *path, string[80];
   Catalog *subcat;
-  Matrix matrix;
 
   /* in split mode, we need to init & open the corresponding measure file (even if we do not read
@@ -117,7 +117,11 @@
 
   /* get split filename from main header (paths relative to cpt file) */
-  if (!gfits_scan (&catalog[0].header, name,  "%s", 1, string)) return (DVO_CAT_OPEN_FAIL);
+  if (!gfits_scan (&catalog[0].header, name,  "%s", 1, string)) {
+    free (path);
+    return (DVO_CAT_OPEN_FAIL);
+  }
   ALLOCATE (subcat[0].filename, char, strlen(path) + strlen(string) + 2);
   sprintf (subcat[0].filename, "%s/%s", path, string);
+  free (path);
 
   /* lock & open catalog file */
@@ -139,13 +143,11 @@
     return (DVO_CAT_OPEN_FAIL);
   }
-  /* matrix should be empty : XXX skip the matrix data? */
-  if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
-    if (VERBOSE) fprintf (stderr, "can't read primary matrix for %s\n", name);
-    return (DVO_CAT_OPEN_FAIL);
-  }
-  gfits_free_matrix (&matrix);
+  Nskip = gfits_data_size (&subcat[0].header);
+  fseek (subcat[0].f, Nskip, SEEK_CUR);
+
   /* read Measure table header */
   if (!gfits_fread_header (subcat[0].f, header)) {
     if (VERBOSE) fprintf (stderr, "can't read %s PHU header\n", name);
+    gfits_free_header (&subcat[0].header);
     return (DVO_CAT_OPEN_FAIL);
   }
@@ -155,8 +157,6 @@
 int dvo_catalog_load_split (Catalog *catalog, int VERBOSE) {
 
-  int Nitems, Nexpect, Naverage, Nmeasure, Nmissing, Nsecfilt, status;
-  char *path, string[80];
+  int Nbytes, Nitems, Nexpect, Naverage, Nmeasure, Nmissing, Nsecfilt, status;
   Header header;
-  Matrix matrix;
   FTable ftable;
   SecFilt *primary;
@@ -168,7 +168,4 @@
   primary = NULL;
 
-  /* needed to find the split files below */
-  path = pathname (catalog[0].filename);
-
   /* get the components from the header - these duplicate information in the split files (NAXIS2) */
   if (!gfits_scan (&catalog[0].header, "NSTARS",   "%d", 1, &Naverage)) return (FALSE);
@@ -196,17 +193,13 @@
   if (catalog[0].catflags & LOAD_AVES) {
     /* move pointer past header -- must be already read (load_catalog) */
-    fseek (catalog[0].f, catalog[0].header.size, SEEK_SET);
-    /* matrix should be empty : XXX should we drop this step and skip the data? */
-    if (!gfits_fread_matrix (catalog[0].f, &matrix, &catalog[0].header)) {
-      if (VERBOSE) fprintf (stderr, "can't read primary matrix");
-      return (FALSE);
-    }
+    Nbytes = catalog[0].header.size + gfits_data_size (&catalog[0].header);
+    fseek (catalog[0].f, Nbytes, SEEK_SET);
     /* read Average table header */
-    if (!gfits_fread_header (catalog[0].f, &header)) {
+    if (!gfits_fread_header (catalog[0].f, &header)) { 
       if (VERBOSE) fprintf (stderr, "can't read table average header");
       return (FALSE);
     }
     /* read Average table data : format is irrelevant here */
-    if (!gfits_fread_ftable_data (catalog[0].f, &ftable)) {
+    if (!gfits_fread_ftable_data (catalog[0].f, &ftable)) { 
       if (VERBOSE) fprintf (stderr, "can't read table average data");
       return (FALSE);
@@ -257,5 +250,5 @@
     catalog[0].Nmeas_off = catalog[0].Nmeas_disk;
   }
-  gfits_free_header (ftable.header);
+  gfits_free_header (&header);
 
   /*** Missing Table ***/
@@ -335,7 +328,6 @@
 int dvo_catalog_load_segment_split (Catalog *catalog, int VERBOSE, int start, int Nrows) {
 
-  int Naverage, Nsecfilt, Nexpect, Nitems, Nmeasure, Nmissing;
+  int Nbytes, Naverage, Nsecfilt, Nexpect, Nitems, Nmeasure, Nmissing;
   Header header;
-  Matrix matrix;
   FTable ftable;
   SecFilt *primary;
@@ -351,11 +343,7 @@
 
     /*** load the Average data ***/
-    /* move pointer past header -- must be already read (load_catalog) */
-    fseek (catalog[0].f, catalog[0].header.size, SEEK_SET);
-    /* matrix should be empty : XXX should we drop this step and skip the data? */
-    if (!gfits_fread_matrix (catalog[0].f, &matrix, &catalog[0].header)) {
-      if (VERBOSE) fprintf (stderr, "can't read primary matrix");
-      return (FALSE);
-    }
+    /* move pointer past header and matrix -- must be already read (load_catalog) */
+    Nbytes = catalog[0].header.size + gfits_data_size (&catalog[0].header);
+    fseek (catalog[0].f, Nbytes, SEEK_SET);
     /* read Average table header */
     if (!gfits_fread_header (catalog[0].f, &header)) {
@@ -385,10 +373,7 @@
 
     /* move pointer past header -- must be already read (load_catalog) */
-    fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
-    /* matrix should be empty : XXX should we drop this step and skip the data? */
-    if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
-      if (VERBOSE) fprintf (stderr, "can't read primary matrix");
-      return (FALSE);
-    }
+    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
+    fseek (subcat[0].f, Nbytes, SEEK_SET);
+
     /* read Secfilt table header */
     if (!gfits_fread_header (subcat[0].f, &header)) {
@@ -416,5 +401,4 @@
     } 
     gfits_free_header (&header);
-    gfits_free_matrix (&matrix);
   }
 
@@ -425,10 +409,7 @@
 
     /* move pointer past header -- must be already read (load_catalog) */
-    fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
-    /* matrix should be empty : XXX should we drop this step and skip the data? */
-    if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
-      if (VERBOSE) fprintf (stderr, "can't read primary matrix");
-      return (FALSE);
-    }
+    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
+    fseek (subcat[0].f, Nbytes, SEEK_SET);
+
     /* read Measure table header */
     if (!gfits_fread_header (subcat[0].f, &header)) {
@@ -448,5 +429,4 @@
     }
     gfits_free_header (&header);
-    gfits_free_matrix (&matrix);
     catalog[0].Nmeasure = Nmeasure;
     catalog[0].Nmeas_off = start;
@@ -459,10 +439,7 @@
 
     /* move pointer past header -- must be already read (load_catalog) */
-    fseek (subcat[0].f, subcat[0].header.size, SEEK_SET);
-    /* matrix should be empty : XXX should we drop this step and skip the data? */
-    if (!gfits_fread_matrix (subcat[0].f, &matrix, &subcat[0].header)) {
-      if (VERBOSE) fprintf (stderr, "can't read primary matrix");
-      return (FALSE);
-    }
+    Nbytes = subcat[0].header.size + gfits_data_size (&subcat[0].header);
+    fseek (subcat[0].f, Nbytes, SEEK_SET);
+
     /* read Missing table header */
     if (!gfits_fread_header (subcat[0].f, &header)) {
@@ -482,5 +459,4 @@
     }
     gfits_free_header (&header);
-    gfits_free_matrix (&matrix);
     catalog[0].Nmissing = Nmissing;
     catalog[0].Nmiss_off = start;
@@ -549,5 +525,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < catalog[0].Naverage);
+    assert (first <= catalog[0].Naverage);
     assert (catalog[0].Naves_disk >= catalog[0].Naves_off);
 
@@ -586,5 +562,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < catalog[0].Nmeasure);
+    assert (first <= catalog[0].Nmeasure);
     assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
 
@@ -637,5 +613,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < Nitems);
+    assert (first <= Nitems);
     assert (catalog[0].Nsecf_disk >= catalog[0].Nsecf_off);
     // XXX check these for consistency...
@@ -731,5 +707,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < catalog[0].Naverage);
+    assert (first <= catalog[0].Naverage);
     assert (catalog[0].Naves_disk >= catalog[0].Naves_off);
 
@@ -768,5 +744,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < catalog[0].Nmeasure);
+    assert (first <= catalog[0].Nmeasure);
     assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
 
@@ -823,5 +799,5 @@
     assert (Nrows >= 0);
     assert (first >= 0);
-    assert (first < Nitems);
+    assert (first <= Nitems);
     assert (catalog[0].Nmeas_disk >= catalog[0].Nmeas_off);
 
