Index: trunk/psModules/test/camera/tap_pmFPAReadWrite.c
===================================================================
--- trunk/psModules/test/camera/tap_pmFPAReadWrite.c	(revision 14882)
+++ trunk/psModules/test/camera/tap_pmFPAReadWrite.c	(revision 15987)
@@ -29,5 +29,5 @@
 #define BASE_WEIGHT		70
 #define VERBOSE			0
-#define ERR_TRACE_LEVEL		0
+#define ERR_TRACE_LEVEL		10
 
 psPlaneTransform *PS_CREATE_2D_IDENTITY_PLANE_TRANSFORM()
@@ -80,10 +80,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 +105,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.
@@ -121,14 +124,8 @@
     psMetadataAddS32(chip->analysis, PS_LIST_HEAD, MISC_NAME, 0, NULL, MISC_NUM);
     psMetadataAddS32(chip->concepts, PS_LIST_HEAD, MISC_NAME, 0, NULL, MISC_NUM);
-//    chip->hdu = pmHDUAlloc("chipExtName");
-//
-//    bool rc = pmConfigFileRead(&chip->hdu->format, "data/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);
+        chip->cells->data[i] = psMemDecrRefCounter((psPtr) generateSimpleCell(chip));
     }
 
@@ -152,50 +149,11 @@
     psMetadataAddS32((psMetadata *) fpa->camera, PS_LIST_HEAD, MISC_NAME, 0, NULL, MISC_NUM);
     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");
-//    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);
 }
 
@@ -206,5 +164,5 @@
     psLogSetLevel(PS_LOG_INFO);
     psTraceSetLevel("err", ERR_TRACE_LEVEL);
-    plan_tests(405);
+    plan_tests(22);
 
     // ----------------------------------------------------------------------
@@ -212,5 +170,5 @@
     // pmCellWrite(): tests
     // Verify pmCellWrite() with NULL pmCell arg
-    {
+    if (0) {
         psMemId id = psMemGetId();
         psFits* fitsFileW = psFitsOpen(".tmp00", "w");
@@ -220,7 +178,8 @@
     }
 
+
     // Verify pmCellWrite() with NULL pmCell arg
     // XXXX: Big problem: Without the next code, everything else fails.  Why?
-    if (1) {
+    if (0) {
         psMemId id = psMemGetId();
         psFits* fitsFileW = psFitsOpen(".tmp00", "w");
@@ -232,5 +191,5 @@
 
     // Verify pmCellWrite() with NULL pmFits arg
-    {
+    if (0) {
         psMemId id = psMemGetId();
         psMetadata *camera = psMetadataAlloc();
@@ -240,5 +199,5 @@
         ok(cell != NULL, "Allocated a pmCell successfully");
         ok(!pmCellWrite(cell, NULL, NULL, false), "pmCellWrite() returned FALSE with NULL psFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -265,9 +224,8 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        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");
+    }
 
     // ----------------------------------------------------------------------
@@ -291,5 +249,5 @@
         pmCell *cell = chip->cells->data[0];
         ok(!pmCellRead(cell, NULL, NULL), "pmCellRead() returned FALSE with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -313,4 +271,5 @@
         rc = pmCellRead(cell, fitsFileR, NULL);
         ok(rc, "pmCellRead() returned TRUE");
+        skip_start(!rc, 1, "Skipping tests because pmCellRead returned NULL");
         for (int k = 0 ; k < cell->hdu->images->n ; k++) {
             bool errorFlag = false;
@@ -327,6 +286,7 @@
             ok(!errorFlag, "pmCellWrite()/pmCellRead() properly set the image data (image %d)", k);
         }
-        psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        skip_end();
+        psFitsClose(fitsFileR);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -356,5 +316,5 @@
         ok(cell != NULL, "Allocated a pmCell successfully");
         ok(!pmCellWriteWeight(cell, NULL, NULL, false), "pmCellWriteWeight() returned FALSE with NULL psFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -381,5 +341,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -407,5 +367,5 @@
         pmCell *cell = chip->cells->data[0];
         ok(!pmCellReadWeight(cell, NULL, NULL), "pmCellReadWeight() returned FALSE with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -444,5 +404,5 @@
         }
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -473,5 +433,5 @@
         ok(cell != NULL, "Allocated a pmCell successfully");
         ok(!pmCellWriteMask(cell, NULL, NULL, false), "pmCellWriteMask() returned FALSE with NULL psFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -498,5 +458,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -524,5 +484,5 @@
         pmCell *cell = chip->cells->data[0];
         ok(!pmCellReadMask(cell, NULL, NULL), "pmCellReadMask() returned FALSE with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -570,5 +530,5 @@
         }
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -599,5 +559,5 @@
         ok(chip != NULL, "Allocated a pmChip successfully");
         ok(!pmChipWrite(chip, NULL, NULL, false, true), "pmChipWrite() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -621,5 +581,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -646,5 +606,5 @@
         pmChip *chip = fpa->chips->data[0];
         ok(!pmChipRead(chip, NULL, NULL), "pmChipRead() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -663,5 +623,5 @@
         for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
-            myFreeCell(cell);
+            psFree(cell);
             cell = NULL;
 	}
@@ -676,5 +636,5 @@
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
             for (int k = 0 ; k < cell->hdu->images->n ; k++) {
-                if (VERBOSE) diag("Cool: image %d\n", k);
+                if (VERBOSE) diag("NOTE: image %d\n", k);
                 psImage *img = cell->hdu->images->data[k];
                 for (int i = 0 ; i < img->numRows ; i++) {
@@ -692,5 +652,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -719,5 +679,5 @@
         ok(chip != NULL, "Allocated a pmChip successfully");
         ok(!pmChipWriteWeight(chip, NULL, NULL, false, true), "pmChipWriteWeight() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -741,5 +701,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -766,5 +726,5 @@
         pmChip *chip = fpa->chips->data[0];
         ok(!pmChipReadMask(chip, NULL, NULL), "pmChipReadMask() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -783,5 +743,5 @@
         for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
-            myFreeCell(cell);
+            psFree(cell);
             cell = NULL;
 	}
@@ -796,5 +756,5 @@
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
             for (int k = 0 ; k < cell->hdu->weights->n ; k++) {
-                if (VERBOSE) diag("Cool: image %d\n", k);
+                if (VERBOSE) diag("NOTE: image %d\n", k);
                 psImage *wgt = cell->hdu->weights->data[k];
                 for (int i = 0 ; i < wgt->numRows ; i++) {
@@ -812,5 +772,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -837,5 +797,5 @@
         pmChip *chip = fpa->chips->data[0];
         ok(!pmChipReadMask(chip, NULL, NULL), "pmChipReadMask() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -854,5 +814,5 @@
         for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
-            myFreeCell(cell);
+            psFree(cell);
             cell = NULL;
 	}
@@ -867,5 +827,5 @@
             pmCell *cell = (pmCell *) chip->cells->data[chipID];
             for (int k = 0 ; k < cell->hdu->masks->n ; k++) {
-                if (VERBOSE) diag("Cool: image %d\n", k);
+                if (VERBOSE) diag("NOTE: image %d\n", k);
                 psImage *msk = cell->hdu->masks->data[k];
                 for (int i = 0 ; i < msk->numRows ; i++) {
@@ -883,5 +843,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -911,5 +871,5 @@
         ok(fpa != NULL, "Allocated a pmFPA successfully");
         ok(!pmFPAWrite(fpa, NULL, NULL, false, true), "pmFPAWrite() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -929,5 +889,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -953,5 +913,5 @@
         pmFPA* fpa = generateSimpleFPA(camera);
         ok(!pmFPARead(fpa, NULL, NULL), "pmFPARead() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -971,5 +931,5 @@
             for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
-                myFreeCell(cell);
+                psFree(cell);
                 cell = NULL;
             }
@@ -988,5 +948,5 @@
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
                 for (int k = 0 ; k < cell->hdu->images->n ; k++) {
-                    if (VERBOSE) diag("Cool: image %d\n", k);
+                    if (VERBOSE) diag("NOTE: image %d\n", k);
                     psImage *img = cell->hdu->images->data[k];
                     for (int i = 0 ; i < img->numRows ; i++) {
@@ -1005,5 +965,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1033,5 +993,5 @@
         ok(fpa != NULL, "Allocated a pmFPA successfully");
         ok(!pmFPAWriteWeight(fpa, NULL, NULL, false, true), "pmFPAWriteWeight() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1051,5 +1011,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1075,5 +1035,5 @@
         pmFPA* fpa = generateSimpleFPA(camera);
         ok(!pmFPARead(fpa, NULL, NULL), "pmFPAReadWeight() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1093,5 +1053,5 @@
             for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
-                myFreeCell(cell);
+                psFree(cell);
                 cell = NULL;
             }
@@ -1110,5 +1070,5 @@
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
                 for (int k = 0 ; k < cell->hdu->weights->n ; k++) {
-                    if (VERBOSE) diag("Cool: image %d\n", k);
+                    if (VERBOSE) diag("NOTE: image %d\n", k);
                     psImage *wgt = cell->hdu->weights->data[k];
                     for (int i = 0 ; i < wgt->numRows ; i++) {
@@ -1127,5 +1087,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1155,5 +1115,5 @@
         ok(fpa != NULL, "Allocated a pmFPA successfully");
         ok(!pmFPAWriteMask(fpa, NULL, NULL, false, true), "pmFPAWriteMask() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1173,5 +1133,5 @@
         //  Close the FITS file, free memory
         psFitsClose(fitsFileW);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1197,5 +1157,5 @@
         pmFPA* fpa = generateSimpleFPA(camera);
         ok(!pmFPARead(fpa, NULL, NULL), "pmFPAReadMask() returned NULL with NULL pmFits param");
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
@@ -1215,5 +1175,5 @@
             for (int chipID = 0 ; chipID < chip->cells->n ; chipID++) {
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
-                myFreeCell(cell);
+                psFree(cell);
                 cell = NULL;
             }
@@ -1232,5 +1192,5 @@
                 pmCell *cell = (pmCell *) chip->cells->data[chipID];
                 for (int k = 0 ; k < cell->hdu->masks->n ; k++) {
-                    if (VERBOSE) diag("Cool: image %d\n", k);
+                    if (VERBOSE) diag("NOTE: image %d\n", k);
                     psImage *msk = cell->hdu->masks->data[k];
                     for (int i = 0 ; i < msk->numRows ; i++) {
@@ -1249,5 +1209,5 @@
 
         psFitsClose(fitsFileR);
-        myFreeFPA(fpa);
+        psFree(fpa);
         psFree(camera);
         ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
