Index: trunk/psModules/test/camera/tap_pmHDUUtils.c
===================================================================
--- trunk/psModules/test/camera/tap_pmHDUUtils.c	(revision 14882)
+++ trunk/psModules/test/camera/tap_pmHDUUtils.c	(revision 15987)
@@ -5,11 +5,7 @@
 #include "tap.h"
 #include "pstap.h"
-// XXX: Use better name for the temporary FITS file
-// XXX: The code to generate and free the FPA hierarchy was copied from
-// tap-pmFPA.c.  EIther include it directly, or library, or something.
-// Also, get rid of the manual free functions and use psFree() once
-// it correctly frees child members
-// XXX: This simpleFPA() requires that the HDUs be allocated.
-
+/* STATUS:
+    All functions are tested.
+*/
 
 #define CHIP_ALLOC_NAME        "ChipName"
@@ -80,10 +76,14 @@
     cell->hdu = pmHDUAlloc("cellExtName");
     for (int i = 0 ; i < NUM_READOUTS ; i++) {
-        cell->readouts->data[i] = generateSimpleReadout(cell);
-    }
-
-    bool rc = pmConfigFileRead(&cell->hdu->format, "data/camera0/format0.config", "Camera format 0");
+        cell->readouts->data[i] = psMemDecrRefCounter((psPtr) generateSimpleReadout(cell));
+    }
+
+    // First try to read data from ../dataFiles, then try dataFiles.
+    bool rc = pmConfigFileRead(&cell->hdu->format, "../dataFiles/camera0/format0.config", "Camera format 0");
     if (!rc) {
-        diag("pmConfigFileRead() was unsuccessful (from generateSimpleCell())");
+        rc = pmConfigFileRead(&cell->hdu->format, "dataFiles/camera0/format0.config", "Camera format 0");
+        if (!rc) {
+            diag("pmConfigFileRead() was unsuccessful (from generateSimpleCell())");
+	}
     }
 
@@ -101,5 +101,4 @@
 
     //XXX: Should the region be set some other way?  Like through the various config files?
-//    psRegion *region = psRegionAlloc(0.0, TEST_NUM_COLS-1, 0.0, TEST_NUM_ROWS-1);
     psRegion *region = psRegionAlloc(0.0, 0.0, 0.0, 0.0);
     // You shouldn't have to remove the key from the metadata.  Find out how to simply change the key value.
@@ -123,17 +122,16 @@
     chip->hdu = pmHDUAlloc("chipExtName");
 
-    bool rc = pmConfigFileRead(&chip->hdu->format, "data/camera0/format0.config", "Camera format 0");
+    bool rc = pmConfigFileRead(&chip->hdu->format, "dataFiles/camera0/format0.config", "Camera format 0");
     if (!rc) {
-        diag("pmConfigFileRead() was unsuccessful (from generateSimpleChip())");
+        rc = pmConfigFileRead(&chip->hdu->format, "../dataFiles/camera0/format0.config", "Camera format 0");
+        if (!rc) {
+            diag("pmConfigFileRead() was unsuccessful (from generateSimpleChip())");
+	}
     }
 
     psArrayRealloc(chip->cells, NUM_CELLS);
     for (int i = 0 ; i < NUM_CELLS ; i++) {
-        chip->cells->data[i] = generateSimpleCell(chip);
-    }
-
-    // XXX: Add code to initialize chip pmConcepts
-
-
+        chip->cells->data[i] = psMemDecrRefCounter((psPtr) generateSimpleCell(chip));
+    }
     return(chip);
 }
@@ -153,49 +151,18 @@
     psMetadataAddS32(fpa->concepts, PS_LIST_HEAD, MISC_NAME, 0, NULL, MISC_NUM);
     fpa->hdu = pmHDUAlloc("fpaExtName");
-
-    bool rc = pmConfigFileRead(&fpa->hdu->format, "data/camera0/format0.config", "Camera format 0");
+    bool rc = pmConfigFileRead(&fpa->hdu->format, "dataFiles/camera0/format0.config", "Camera format 0");
     if (!rc) {
-        diag("pmConfigFileRead() was unsuccessful (from generateSimpleFPA())");
+        rc = pmConfigFileRead(&fpa->hdu->format, "../dataFiles/camera0/format0.config", "Camera format 0");
+        if (!rc) {
+            diag("pmConfigFileRead() was unsuccessful (from generateSimpleFPA())");
+	}
     }
 
     psArrayRealloc(fpa->chips, NUM_CHIPS);
     for (int i = 0 ; i < NUM_CHIPS ; i++) {
-        fpa->chips->data[i] = generateSimpleChip(fpa);
-    }
-
-    // XXX: Eventually, when you finish the pmConcepts tests, add full concept
-    // reading code from wherever.
+        fpa->chips->data[i] = psMemDecrRefCounter((psPtr) generateSimpleChip(fpa));
+    }
     pmConceptsBlankFPA(fpa);
-//    bool mdok;
-//    psMetadata *fileData = psMetadataLookupMetadata(&mdok, fpa->hdu->format, "FILE");
-//    char *fpaNameHdr = psMetadataLookupStr(&mdok, fileData, "FPA.NAME");
-//    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.NAME", PS_META_REPLACE, NULL, fpaNameHdr);
-
     return(fpa);
-}
-
-// XXX: This should only be necessary until the psFree() functions for
-// FPA/chip/cell/readout correctly free all child chips/cells/readouts
-void myFreeCell(pmCell *cell)
-{
-    for (int k = 0 ; k < cell->readouts->n ; k++) {
-        psFree(cell->readouts->data[k]);
-    }
-    psFree(cell);
-}
-
-void myFreeChip(pmChip *chip) {
-    for (int j = 0 ; j < chip->cells->n ; j++) {
-        myFreeCell(chip->cells->data[j]);
-    }
-    psFree(chip);
-}
-
-void myFreeFPA(pmFPA *fpa)
-{
-    for (int i = 0 ; i < fpa->chips->n ; i++) {
-        myFreeChip(fpa->chips->data[i]);
-    }
-    psFree(fpa);
 }
 
@@ -208,8 +175,8 @@
     plan_tests(73);
 
-    // ----------------------------------------------------------------------
-    // pmHDU *pmHDUFromFPA(const pmFPA *fpa)
+
+    // ----------------------------------------------------------------------
     // pmHDUFromFPA() tests
-    // pmHDUFromFPA() verify with NULL input params
+    // Call pmHDUFromFPA() with NULL input params
     {
         psMemId id = psMemGetId();
@@ -219,5 +186,6 @@
     }
 
-    //pmHDUFromFPA() verify with acceptable input params
+
+    // Call pmHDUFromFPA() with acceptable input params
     {
         psMemId id = psMemGetId();
@@ -232,14 +200,13 @@
         pmHDU *hdu = pmHDUFromFPA(fpa);
         ok(hdu == fpa->hdu, "pmHDUFromFPA(NULL) returned the correct pmHDU of an pmFPA struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    // ----------------------------------------------------------------------
-    // pmHDU *pmHDUFromChip(const pmChip *chip)
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // ----------------------------------------------------------------------
     // pmHDUFromChip() tests
-    // pmHDUFromChip() verify with NULL input params
+    // Call pmHDUFromChip() with NULL input params
     {
         psMemId id = psMemGetId();
@@ -249,5 +216,6 @@
     }
 
-    //pmHDUFromChip() verify with acceptable input params
+
+    // Call pmHDUFromChip() with acceptable input params
     {
         psMemId id = psMemGetId();
@@ -262,10 +230,11 @@
         pmHDU *hdu = pmHDUFromChip(chip);
         ok(hdu == chip->hdu, "pmHDUFromChip() returned the correct pmHDU of an pmChip struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-    //pmHDUFromChip() verify with acceptable input params
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUFromChip() with acceptable input params
     // Set chip->hdu to NULL, verify chip->parent->hdu is returned
     {
@@ -283,14 +252,13 @@
         pmHDU *hdu = pmHDUFromChip(chip);
         ok(hdu == chip->parent->hdu, "pmHDUFromChip() returned the correct pmHDU of an pmChip struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    // ----------------------------------------------------------------------
-    // pmHDU *pmHDUFromCell(const pmCell *cell)
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // ----------------------------------------------------------------------
     // pmHDUFromCell() tests
-    // pmHDUFromCell() verify with NULL input params
+    // Call pmHDUFromCell() with NULL input params
     {
         psMemId id = psMemGetId();
@@ -300,5 +268,6 @@
     }
 
-    //pmHDUFromCell() verify with acceptable input params
+
+    // Call pmHDUFromCell() with acceptable input params
     {
         psMemId id = psMemGetId();
@@ -313,10 +282,11 @@
         pmHDU *hdu = pmHDUFromCell(cell);
         ok(hdu == cell->hdu, "pmHDUFromCell() returned the correct pmHDU of an pmCell struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-    //pmHDUFromCell() verify with acceptable input params
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUFromCell() with acceptable input params
     // Set cell->hdu to NULL, verify cell->parent->hdu is returned
     {
@@ -334,14 +304,13 @@
         pmHDU *hdu = pmHDUFromCell(cell);
         ok(hdu == cell->parent->hdu, "pmHDUFromCell() returned the correct pmHDU of an pmCell struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    // ----------------------------------------------------------------------
-    // pmHDU *pmHDUFromReadout(const pmCell *cell)
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // ----------------------------------------------------------------------
     // pmHDUFromReadout() tests
-    // pmHDUFromReadout() verify with NULL input params
+    // Call pmHDUFromReadout() with NULL input params
     {
         psMemId id = psMemGetId();
@@ -351,5 +320,6 @@
     }
 
-    //pmHDUFromReadout() verify with acceptable input params
+
+    // Call pmHDUFromReadout() with acceptable input params
     {
         psMemId id = psMemGetId();
@@ -366,14 +336,13 @@
         pmHDU *hdu = pmHDUFromReadout(readout);
         ok(hdu == readout->parent->hdu, "pmHDUFromReadout() returned the correct pmHDU of an pmReadout struct");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    // ----------------------------------------------------------------------
-    //pmHDUGetLowest() tests
-    //pmHDU *pmHDUGetLowest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetLowest(): verify with all NULL inputs
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // ----------------------------------------------------------------------
+    // pmHDUGetLowest() tests
+    // Call pmHDUGetLowest() with all NULL inputs
     {
         psMemId id = psMemGetId();
@@ -384,7 +353,5 @@
 
 
-    //pmHDUGetLowest() tests
-    //pmHDU *pmHDUGetLowest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetLowest(): verify with all acceptable inputs
+    // Call pmHDUGetLowest() with all acceptable inputs
     {
         psMemId id = psMemGetId();
@@ -399,13 +366,11 @@
         pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell);
         ok(hdu == cell->hdu, "pmHDUGetLowest(fpa, chip, cell)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    //pmHDUGetLowest() tests
-    //pmHDU *pmHDUGetLowest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetLowest(): verify with all (fpa, chip, NULL) inputs
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUGetLowest() with all (fpa, chip, NULL) inputs
     {
         psMemId id = psMemGetId();
@@ -420,13 +385,11 @@
         pmHDU *hdu = pmHDUGetLowest(fpa, chip, NULL);
         ok(hdu == chip->hdu, "pmHDUGetLowest(fpa, chip, NULL)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    //pmHDUGetLowest() tests
-    //pmHDU *pmHDUGetLowest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetLowest(): verify with all (fpa, NULL, NULL) inputs
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUGetLowest() with all (fpa, NULL, NULL) inputs
     {
         psMemId id = psMemGetId();
@@ -441,15 +404,13 @@
         pmHDU *hdu = pmHDUGetLowest(fpa, NULL, NULL);
         ok(hdu == fpa->hdu, "pmHDUGetLowest(fpa, NULL, NULL)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
 
 
     // ----------------------------------------------------------------------
     //pmHDUGetHighest() tests
-    //pmHDU *pmHDUGetHighest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetHighest(): verify with all NULL inputs
+    // Call pmHDUGetHighest() with all NULL inputs
     {
         psMemId id = psMemGetId();
@@ -460,7 +421,5 @@
 
 
-    //pmHDUGetHighest() tests
-    //pmHDU *pmHDUGetHighest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetHighest(): verify with all acceptable inputs
+    // Call pmHDUGetHighest() with all acceptable inputs
     {
         psMemId id = psMemGetId();
@@ -475,13 +434,11 @@
         pmHDU *hdu = pmHDUGetHighest(fpa, chip, cell);
         ok(hdu == fpa->hdu, "pmHDUGetHighest(fpa, chip, cell)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    //pmHDUGetHighest() tests
-    //pmHDU *pmHDUGetHighest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetHighest(): verify with (NULL, chip, cell) inputs
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUGetHighest() with (NULL, chip, cell) inputs
     {
         psMemId id = psMemGetId();
@@ -496,13 +453,11 @@
         pmHDU *hdu = pmHDUGetHighest(NULL, chip, cell);
         ok(hdu == chip->hdu, "pmHDUGetHighest(NULL, chip, cell)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-    //pmHDUGetHighest() tests
-    //pmHDU *pmHDUGetHighest(const pmFPA *fpa, const pmChip *chip, const pmCell *cell)
-    //pmHDUGetHighest(): verify with (NULL, NULL, cell) inputs
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+
+
+    // Call pmHDUGetHighest() with (NULL, NULL, cell) inputs
     {
         psMemId id = psMemGetId();
@@ -517,9 +472,7 @@
         pmHDU *hdu = pmHDUGetHighest(NULL, NULL, cell);
         ok(hdu == cell->hdu, "pmHDUGetHighest(NULL, NULL, cell)");
-        myFreeFPA(fpa);
-        psFree(camera);
-        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    }
-
-
-}
+        psFree(fpa);
+        psFree(camera);
+        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
+    }
+}
