Index: /branches/rel10_ifa/psModules/src/astrom/Makefile.am
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/Makefile.am	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/astrom/Makefile.am	(revision 6573)
@@ -13,6 +13,6 @@
 	pmConceptsWrite.c \
 	pmConceptsStandard.c \
-	pmFPAfile.c \
-	pmFPAview.c 
+	pmFPAview.c \
+	pmFPAfile.c
 
 #	pmFPAAstrometry.c
@@ -33,6 +33,6 @@
 	pmConceptsWrite.h \
 	pmConceptsStandard.h \
-	pmFPAfile.h \
-	pmFPAview.h
+	pmFPAview.h \
+	pmFPAfile.h
 
 #	pmFPAAstrometry.h
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.c
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.c	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.c	(revision 6573)
@@ -3,6 +3,9 @@
 #include "pmHDU.h"
 #include "pmFPA.h"
+#include "pmFPAConstruct.h"
 #include "pmFPAview.h"
 #include "pmFPAfile.h"
+#include "pmFPARead.h"
+#include "pmFPAWrite.h"
 #include "pmFPAviewObjectsIO.h"
 
@@ -40,5 +43,5 @@
 
 // XXX is a file allowed to be both READ and WRITE?
-pmFPAfile *pmFPAfileDefine (pmFPAview *view, psMetadata *camera, char *name)
+pmFPAfile *pmFPAfileDefine (psMetadata *files, psMetadata *camera, pmFPA *fpa, char *name)
 {
 
@@ -49,5 +52,5 @@
     psMetadata *data = psMetadataLookupPtr (&status, camera, name);
     if (data == NULL) {
-        return false;
+        return NULL;
     }
 
@@ -114,8 +117,14 @@
     }
 
+    if (fpa == NULL) {
+        fpa = pmFPAConstruct (camera);
+    }
+    file->fpa = fpa;
+
+    psMetadataAddPtr (files, PS_LIST_TAIL, name, PS_META_REPLACE, "", file);
     return (file);
 }
 
-bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view, psMetadata *camera)
+bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view)
 {
 
@@ -130,13 +139,13 @@
 
     // determine the file name
-    file->filename = pmFPAviewNameFromRule (file->filerule, view);
+    file->filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
 
     // indirect filenames
     if (!strcasecmp (file->filename, "@FPAIO")) {
-        extra = pmFPAviewNameFromRule (file->filextra, view);
-        file->filename = psMetadataLookupStr (&status, view->IO, extra);
+        extra = pmFPAviewNameFromRule (file->filextra, view, file->fpa);
+        file->filename = psMetadataLookupStr (&status, file->names, extra);
     }
     if (!strcasecmp (file->filename, "@DETDB")) {
-        extra = pmFPAviewNameFromRule (file->filextra, view);
+        extra = pmFPAviewNameFromRule (file->filextra, view, file->fpa);
         // file->filename = pmDetrendSelect (extra);
     }
@@ -165,5 +174,5 @@
     switch (file->type) {
     case PM_FPA_FILE_IMAGE:
-        pmFPAviewReadFitsImage (view, file->fits);
+        pmFPAviewReadFitsImage (view, file);
         break;
 
@@ -216,15 +225,27 @@
 }
 
+bool pmFPAfileClose (pmFPAfile *file, pmFPAview *view)
+{
+    // is current depth == open depth?
+    pmFPAdepth depth = pmFPAviewDepth (view);
+    if (file->openDepth != depth) {
+        return false;
+    }
+
+    // check if we are actually open
+    psFitsClose (file->fits);
+    return true;
+}
+
 // attempt open and read for all pmFPAfiles in view->IO
-bool pmFPAfileIOCheck (pmFPAview *view, psMetadata *camera)
-{
-
+bool pmFPAfileReadChecks (psMetadata *files, pmFPAview *view)
+{
     // recipe override values (command-line options):
     psMetadataItem *item = NULL;
-    psMetadataIterator *iter = psMetadataIteratorAlloc (view->IO, PS_LIST_HEAD, NULL);
+    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
     while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
         pmFPAfile *file = item->data.V;
 
-        pmFPAfileOpen (file, view, camera);
+        pmFPAfileOpen (file, view);
         pmFPAfileRead (file, view);
     }
@@ -232,2 +253,169 @@
     return true;
 }
+
+// attempt open and read for all pmFPAfiles in view->IO
+bool pmFPAfileWriteChecks (psMetadata *files, pmFPAview *view)
+{
+    // recipe override values (command-line options):
+    psMetadataItem *item = NULL;
+    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
+    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
+        pmFPAfile *file = item->data.V;
+
+        pmFPAfileWrite (file, view);
+        pmFPAfileClose (file, view);
+    }
+    psFree (iter);
+    return true;
+}
+
+psImage *pmFPAfileReadoutImage (psMetadata *files, pmFPAview *view, char *name, int Nx, int Ny, int type)
+{
+    bool status;
+    psImage *image = NULL;
+
+    // I want an image from the
+    pmFPA *fpa = psMetadataLookupPtr (&status, files, name);
+    if (fpa == NULL) {
+        // use Nx or Ny == 0 to avoid creating an image
+        if (Nx*Ny <= 0) {
+            return NULL;
+        }
+        image = psImageAlloc (Nx, Ny, type);
+        return (image);
+    }
+
+    // inconsistent result: return NULL
+    pmReadout *readout = pmFPAviewThisReadout (view, fpa);
+    if (readout == NULL) {
+        return NULL;
+    }
+
+    // resize the existing readout??? this is wrong...
+    // need to allocate it if it does not exist...
+    image = psImageRecycle (readout->image, Nx, Ny, type);
+    psMemIncrRefCounter (image);
+    return (image);
+}
+
+# if (0)
+    // return the named pmFPAfile
+    pmFPAfile *pmFPAfileSelect (pmFPAview *view, char *name)
+{
+
+    // select the name from the camera config data
+    pmFPAfile *file = psMetadataLookupPtr (&status, view->IO, name);
+    if (file == NULL) {
+        return NULL;
+    }
+    return file;
+}
+
+bool pmFPAfileWriteChecks (pmFPAview *view, char *name)
+{
+
+    pmFPAfile *file = pmFPAfileSelect (view, name);
+    pmFPAfileWrite (file, view);
+    return true;
+}
+#endif
+
+// given an already-opened fits file, read the components corresponding
+// to the specified view
+bool pmFPAviewReadFitsImage (pmFPAview *view, pmFPAfile *file)
+{
+    pmFPA *fpa = file->fpa;
+    psFits *fits = file->fits;
+
+    if (view->chip == -1) {
+        pmFPARead (fpa, fits, NULL);
+        return true;
+    }
+
+    if (view->chip >= fpa->chips->n) {
+        return false;
+    }
+    pmChip *chip = fpa->chips->data[view->chip];
+
+    if (view->cell == -1) {
+        pmChipRead (chip, fits, NULL);
+        return true;
+    }
+
+    if (view->cell >= chip->cells->n) {
+        return false;
+    }
+    pmCell *cell = chip->cells->data[view->cell];
+
+    if (view->readout == -1) {
+        pmCellRead (cell, fits, NULL);
+        return true;
+    }
+
+    // XXX pmReadoutRead, pmReadoutReadSegement disabled for now
+    return false;
+
+    # if (0)
+
+        if (view->readout >= cell->readouts->n) {
+            return false;
+        }
+    pmReadout *readout = cell->readouts->data[view->readout];
+
+    if (view->nRows == 0) {
+        pmReadoutRead (readout, fits, NULL);
+    } else {
+        pmReadoutReadSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
+    }
+    return true;
+    # endif
+}
+
+// XXX image writes disabled for now
+# if (0)
+    // given an already-opened fits file, write the components corresponding
+    // to the specified view
+    bool pmFPAviewWriteFitsImage (pmFPAview *view, pmFPAfile *file)
+{
+
+    pmFPA *fpa = file->fpa;
+    psFits *fits = file->fits;
+
+    if (view->chip == -1) {
+        pmFPAWrite (fpa, fits, NULL, NULL);
+        return true;
+    }
+
+    if (view->chip >= fpa->chips->n) {
+        return false;
+    }
+    pmChip *chip = fpa->chips->data[view->chip];
+
+    if (view->cell == -1) {
+        pmChipWrite (chip, fits, NULL, NULL);
+        return true;
+    }
+
+    if (view->cell >= chip->cells->n) {
+        return false;
+    }
+    pmCell *cell = chip->cells->data[view->cell];
+
+    if (view->readout == -1) {
+        pmCellWrite (cell, fits, NULL, NULL);
+        return true;
+    }
+
+    if (view->readout >= cell->readouts->n) {
+        return false;
+    }
+    pmReadout *readout = cell->readouts->data[view->readout];
+
+    if (view->nRows == 0) {
+        pmReadoutWrite (readout, fits, NULL, NULL);
+    } else {
+        pmReadoutWriteSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
+    }
+    return true;
+}
+# endif
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.h
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.h	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPAfile.h	(revision 6573)
@@ -7,6 +7,6 @@
 *  @author EAM, IfA
 *
-*  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-03-09 20:56:39 $
+*  @version $Revision: 1.1.2.5 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-03-14 02:21:07 $
 *
 *  Copyright 2004-2005 Institute for Astronomy, University of Hawaii
@@ -17,5 +17,4 @@
 
 typedef enum {
-    PM_FPA_FILE_IMAGE,
     PM_FPA_FILE_SX,
     PM_FPA_FILE_OBJ,
@@ -23,4 +22,5 @@
     PM_FPA_FILE_CMF,
     PM_FPA_FILE_RAW,
+    PM_FPA_FILE_IMAGE,
 } pmFPAfileType;
 
@@ -41,13 +41,27 @@
 
     pmFPAfileType type;
+
+    psMetadata *names;
+    pmFPA *fpa;
 }
 pmFPAfile;
 
 pmFPAfile *pmFPAfileAlloc ();
-pmFPAfile *pmFPAfileDefine (pmFPAview *view, psMetadata *camera, char *name);
-bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view, psMetadata *camera);
+pmFPAfile *pmFPAfileDefine (psMetadata *files, psMetadata *camera, pmFPA *fpa, char *name);
+bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view);
 bool pmFPAfileRead (pmFPAfile *file, pmFPAview *view);
 bool pmFPAfileWrite (pmFPAfile *file, pmFPAview *view);
-bool pmFPAfileIOCheck (pmFPAview *view, psMetadata *camera);
+bool pmFPAfileClose (pmFPAfile *file, pmFPAview *view);
+
+bool pmFPAfileReadChecks (psMetadata *files, pmFPAview *view);
+bool pmFPAfileWriteChecks (psMetadata *files, pmFPAview *view);
+
+psImage *pmFPAfileReadoutImage (psMetadata *files, pmFPAview *view, char *name, int Nx, int Ny, int type);
+
+// read an image into the current view
+bool pmFPAviewReadFitsImage (pmFPAview *view, pmFPAfile *file);
+
+// write the components for the specified view
+bool pmFPAviewWriteFitsImage (pmFPAview *view, pmFPAfile *file);
 
 # endif
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPAview.c
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPAview.c	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPAview.c	(revision 6573)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 20:56:39 $
+ *  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-14 02:21:07 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -17,33 +17,22 @@
 #include "pmFPA.h"
 #include "pmFPAview.h"
-#include "pmFPARead.h"
-#include "pmFPAWrite.h"
 
 static void pmFPAviewFree (pmFPAview *view)
 {
-
     if (view == NULL)
         return;
-
-    psFree (view->IO);
     return;
 }
 
-pmFPAview *pmFPAviewAlloc (pmFPA *fpa, psMetadata *camera, int nRows)
-{
-
+pmFPAview *pmFPAviewAlloc (int nRows)
+{
     pmFPAview *view = psAlloc (sizeof(pmFPAview));
     psMemSetDeallocator (view, (psFreeFunc) pmFPAviewFree);
-
-    view->fpa     = fpa;
-    view->nRows   = nRows;
-    view->camera  = camera;
 
     view->chip    = -1;
     view->cell    = -1;
     view->readout = -1;
-    view->iRows   = 0;
-
-    view->IO      = psMetadataAlloc ();
+    view->iRows   =  0;
+    view->nRows   = nRows;
     return (view);
 }
@@ -64,5 +53,5 @@
 }
 
-pmChip *pmFPAviewThisChip (pmFPAview *view)
+pmChip *pmFPAviewThisChip (pmFPAview *view, pmFPA *fpa)
 {
 
@@ -71,15 +60,14 @@
     }
 
-    if (view->chip >= view->fpa->chips->n) {
-        return NULL;
-    }
-
-    pmChip *chip = view->fpa->chips->data[view->chip];
+    if (view->chip >= fpa->chips->n) {
+        return NULL;
+    }
+
+    pmChip *chip = fpa->chips->data[view->chip];
     return chip;
 }
 
-pmChip *pmFPAviewNextChip (pmFPAview *view, int nStep)
-{
-
+pmChip *pmFPAviewNextChip (pmFPAview *view, pmFPA *fpa, int nStep)
+{
     view->cell = -1;
     view->readout = -1;
@@ -87,5 +75,5 @@
 
     // if there are no available chips, return NULL
-    if (view->fpa->chips->n <= 0) {
+    if (fpa->chips->n <= 0) {
         view->chip = -1;
         return NULL;
@@ -101,5 +89,5 @@
 
     // if we are at the end of the stack, return NULL
-    if (view->chip >= view->fpa->chips->n) {
+    if (view->chip >= fpa->chips->n) {
         view->chip = -1;
         return NULL;
@@ -107,9 +95,9 @@
 
     // get the correct chip pointer
-    pmChip *chip = view->fpa->chips->data[view->chip];
+    pmChip *chip = fpa->chips->data[view->chip];
     return (chip);
 }
 
-pmCell *pmFPAviewThisCell (pmFPAview *view)
+pmCell *pmFPAviewThisCell (pmFPAview *view, pmFPA *fpa)
 {
 
@@ -118,5 +106,5 @@
     }
 
-    pmChip *chip = pmFPAviewThisChip (view);
+    pmChip *chip = pmFPAviewThisChip (view, fpa);
     if (chip == NULL) {
         return NULL;
@@ -131,8 +119,8 @@
 }
 
-pmCell *pmFPAviewNextCell (pmFPAview *view, int nStep)
-{
-
-    pmChip *chip = pmFPAviewThisChip (view);
+pmCell *pmFPAviewNextCell (pmFPAview *view, pmFPA *fpa, int nStep)
+{
+
+    pmChip *chip = pmFPAviewThisChip (view, fpa);
     if (chip == NULL) {
         return NULL;
@@ -167,5 +155,5 @@
 }
 
-pmReadout *pmFPAviewThisReadout (pmFPAview *view)
+pmReadout *pmFPAviewThisReadout (pmFPAview *view, pmFPA *fpa)
 {
 
@@ -174,5 +162,5 @@
     }
 
-    pmCell *cell = pmFPAviewThisCell (view);
+    pmCell *cell = pmFPAviewThisCell (view, fpa);
     if (cell == NULL) {
         return NULL;
@@ -187,8 +175,8 @@
 }
 
-pmReadout *pmFPAviewNextReadout (pmFPAview *view, int nStep)
-{
-
-    pmCell *cell = pmFPAviewThisCell (view);
+pmReadout *pmFPAviewNextReadout (pmFPAview *view, pmFPA *fpa, int nStep)
+{
+
+    pmCell *cell = pmFPAviewThisCell (view, fpa);
     if (cell == NULL) {
         return NULL;
@@ -222,5 +210,5 @@
 }
 
-pmHDU *pmFPAviewThisHDU (pmFPAview *view)
+pmHDU *pmFPAviewThisHDU (pmFPAview *view, pmFPA *fpa)
 {
 
@@ -230,11 +218,11 @@
 
     if (view->chip < 0) {
-        return pmHDUFromFPA (view->fpa);
+        return pmHDUFromFPA (fpa);
     }
     if (view->cell < 0) {
-        return pmHDUFromChip (pmFPAviewThisChip (view));
+        return pmHDUFromChip (pmFPAviewThisChip (view, fpa));
     }
     if (view->readout < 0) {
-        return pmHDUFromCell (pmFPAviewThisCell (view));
+        return pmHDUFromCell (pmFPAviewThisCell (view, fpa));
     }
     return NULL;
@@ -242,5 +230,5 @@
 
 // select the rule from the camera configuration, perform substitutions as needed
-char *pmFPAviewNameFromRule (char *rule, pmFPAview *view)
+char *pmFPAviewNameFromRule (char *rule, pmFPAview *view, pmFPA *fpa)
 {
 
@@ -250,5 +238,5 @@
 
     if (strstr (newName, "{CHIP.NAME}") != NULL) {
-        pmChip *chip = pmFPAviewThisChip (view);
+        pmChip *chip = pmFPAviewThisChip (view, fpa);
         if (chip != NULL) {
             char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
@@ -259,5 +247,5 @@
     }
     if (strstr (newName, "{CELL.NAME}") != NULL) {
-        pmCell *cell = pmFPAviewThisCell (view);
+        pmCell *cell = pmFPAviewThisCell (view, fpa);
         if (cell != NULL) {
             char *name = psMetadataLookupStr (NULL, cell->concepts, "CELL.NAME");
@@ -268,5 +256,5 @@
     }
     if (strstr (newName, "{EXTNAME}") != NULL) {
-        pmHDU *hdu = pmFPAviewThisHDU (view);
+        pmHDU *hdu = pmFPAviewThisHDU (view, fpa);
         if (hdu->extname != NULL) {
             newName = psStringSubstitute (newName, hdu->extname, "{EXTNAME}");
@@ -275,101 +263,2 @@
     return newName;
 }
-
-// given an already-opened fits file, read the components corresponding
-// to the specified view
-bool pmFPAviewReadFitsImage (pmFPAview *view, psFits *fits)
-{
-
-    pmFPA *fpa = view->fpa;
-
-    if (view->chip == -1) {
-        pmFPARead (fpa, fits, NULL);
-        return true;
-    }
-
-    if (view->chip >= fpa->chips->n) {
-        return false;
-    }
-    pmChip *chip = fpa->chips->data[view->chip];
-
-    if (view->cell == -1) {
-        pmChipRead (chip, fits, NULL);
-        return true;
-    }
-
-    if (view->cell >= chip->cells->n) {
-        return false;
-    }
-    pmCell *cell = chip->cells->data[view->cell];
-
-    if (view->readout == -1) {
-        pmCellRead (cell, fits, NULL);
-        return true;
-    }
-
-    // XXX pmReadoutRead, pmReadoutReadSegement disabled for now
-    return false;
-
-    # if (0)
-
-        if (view->readout >= cell->readouts->n) {
-            return false;
-        }
-    pmReadout *readout = cell->readouts->data[view->readout];
-
-    if (view->nRows == 0) {
-        pmReadoutRead (readout, fits, NULL);
-    } else {
-        pmReadoutReadSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
-    }
-    return true;
-    # endif
-}
-
-// XXX image writes disabled for now
-# if (0)
-    // given an already-opened fits file, write the components corresponding
-    // to the specified view
-    bool pmFPAviewWriteFitsImage (pmFPAview *view, psFits *fits)
-{
-
-    pmFPA *fpa = view->fpa;
-
-    if (view->chip == -1) {
-        pmFPAWrite (fpa, fits, NULL, NULL);
-        return true;
-    }
-
-    if (view->chip >= fpa->chips->n) {
-        return false;
-    }
-    pmChip *chip = fpa->chips->data[view->chip];
-
-    if (view->cell == -1) {
-        pmChipWrite (chip, fits, NULL, NULL);
-        return true;
-    }
-
-    if (view->cell >= chip->cells->n) {
-        return false;
-    }
-    pmCell *cell = chip->cells->data[view->cell];
-
-    if (view->readout == -1) {
-        pmCellWrite (cell, fits, NULL, NULL);
-        return true;
-    }
-
-    if (view->readout >= cell->readouts->n) {
-        return false;
-    }
-    pmReadout *readout = cell->readouts->data[view->readout];
-
-    if (view->nRows == 0) {
-        pmReadoutWrite (readout, fits, NULL, NULL);
-    } else {
-        pmReadoutWriteSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
-    }
-    return true;
-}
-# endif
Index: /branches/rel10_ifa/psModules/src/astrom/pmFPAview.h
===================================================================
--- /branches/rel10_ifa/psModules/src/astrom/pmFPAview.h	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/astrom/pmFPAview.h	(revision 6573)
@@ -7,6 +7,6 @@
 *  @author EAM, IfA
 *
-*  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-03-09 20:56:39 $
+*  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-03-14 02:21:07 $
 *
 *  Copyright 2004-2005 Institute for Astronomy, University of Hawaii
@@ -30,7 +30,4 @@
 typedef struct
 {
-    pmFPA *fpa;
-    psMetadata *IO;
-    psMetadata *camera;
     int chip;
     int cell;
@@ -38,9 +35,10 @@
     int nRows;
     int iRows;
+    pmFPA *fpa;
 }
 pmFPAview;
 
 // allocate a pmFPAview structure for this fpa and camera
-pmFPAview *pmFPAviewAlloc (pmFPA *fpa, psMetadata *camera, int nRows);
+pmFPAview *pmFPAviewAlloc (int nRows);
 
 // determine the current view depth
@@ -48,32 +46,26 @@
 
 // return the currently selected chip for this view
-pmChip *pmFPAviewThisChip (pmFPAview *view);
+pmChip *pmFPAviewThisChip (pmFPAview *view, pmFPA *fpa);
 
 // advance view to the next chip
-pmChip *pmFPAviewNextChip (pmFPAview *view, int nStep);
+pmChip *pmFPAviewNextChip (pmFPAview *view, pmFPA *fpa, int nStep);
 
 // return the currently selected cell for this view
-pmCell *pmFPAviewThisCell (pmFPAview *view);
+pmCell *pmFPAviewThisCell (pmFPAview *view, pmFPA *fpa);
 
 // advance view to the next cell
-pmCell *pmFPAviewNextCell (pmFPAview *view, int nStep);
+pmCell *pmFPAviewNextCell (pmFPAview *view, pmFPA *fpa, int nStep);
 
 // return the currently selected readout for this view
-pmReadout *pmFPAviewThisReadout (pmFPAview *view);
+pmReadout *pmFPAviewThisReadout (pmFPAview *view, pmFPA *fpa);
 
 // advance view to the next readout
-pmReadout *pmFPAviewNextReadout (pmFPAview *view, int nStep);
+pmReadout *pmFPAviewNextReadout (pmFPAview *view, pmFPA *fpa, int nStep);
 
 // return the HDU corresponding to the current view
-pmHDU *pmFPAviewThisHDU (pmFPAview *view);
+pmHDU *pmFPAviewThisHDU (pmFPAview *view, pmFPA *fpa);
 
 // convert the rule to a name based on the current view
-char *pmFPAviewNameFromRule (char *rule, pmFPAview *view);
-
-// read an image into the current view
-bool pmFPAviewReadFitsImage (pmFPAview *view, psFits *fits);
-
-// write the components for the specified view
-bool pmFPAviewWriteFitsImage (pmFPAview *view, psFits *fits);
+char *pmFPAviewNameFromRule (char *rule, pmFPAview *view, pmFPA *fpa);
 
 # endif
Index: /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/objects/pmFPAviewReadObjects.c	(revision 6573)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA; GLG, MHPCC
  *
- *  @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 03:14:23 $
+ *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-14 02:21:07 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -30,6 +30,5 @@
 bool pmFPAviewReadObjects (pmFPAview *view, pmFPAfile *file)
 {
-
-    pmFPA *fpa = view->fpa;
+    pmFPA *fpa = file->fpa;
 
     if (view->chip == -1) {
@@ -124,7 +123,7 @@
 
         // read in header, if not yet loaded
-        hdu = pmFPAviewThisHDU (view);
+        hdu = pmFPAviewThisHDU (view, file->fpa);
 
-        char *filename = pmFPAviewNameFromRule (file->filerule, view);
+        char *filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
         file->fits = psFitsOpen (filename, "r");
         hdu->header = psFitsReadHeader (NULL, file->fits);
@@ -135,12 +134,12 @@
     case PM_FPA_FILE_CMF:
         // read in header, if not yet loaded
-        hdu = pmFPAviewThisHDU (view);
+        hdu = pmFPAviewThisHDU (view, file->fpa);
         if (hdu->header == NULL) {
-            char *headname = pmFPAviewNameFromRule (file->extxtra, view);
+            char *headname = pmFPAviewNameFromRule (file->extxtra, view, file->fpa);
             psFitsMoveExtName (file->fits, headname);
             hdu->header = psFitsReadHeader (NULL, file->fits);
         }
 
-        char *dataname = pmFPAviewNameFromRule (file->extrule, view);
+        char *dataname = pmFPAviewNameFromRule (file->extrule, view, file->fpa);
         psFitsMoveExtName (file->fits, dataname);
         sources  = pmSourcesReadCMF (file->fits, hdu->header);
Index: /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c
===================================================================
--- /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c	(revision 6572)
+++ /branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c	(revision 6573)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA; GLG, MHPCC
  *
- *  @version $Revision: 1.1.2.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-09 03:14:23 $
+ *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-03-14 02:21:07 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -117,10 +117,10 @@
     switch (file->type) {
     case PM_FPA_FILE_OBJ:
-        filename = pmFPAviewNameFromRule (file->filerule, view);
+        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
         pmSourcesWriteOBJ (sources, filename);
         break;
 
     case PM_FPA_FILE_SX:
-        filename = pmFPAviewNameFromRule (file->filerule, view);
+        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
         pmSourcesWriteSX (sources, filename);
         break;
@@ -128,6 +128,6 @@
     case PM_FPA_FILE_CMP:
         // a SPLIT format : only one header and object table per file
-        hdu = pmFPAviewThisHDU (view);
-        filename = pmFPAviewNameFromRule (file->filerule, view);
+        hdu = pmFPAviewThisHDU (view, file->fpa);
+        filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
         pmSourcesWriteCMP (sources, filename, hdu->header);
         break;
@@ -135,5 +135,5 @@
     case PM_FPA_FILE_CMF:
         // write header, if not yet written?
-        hdu = pmFPAviewThisHDU (view);
+        hdu = pmFPAviewThisHDU (view, file->fpa);
 
         // XXX is this needed? is it automatically added?
@@ -143,5 +143,5 @@
         if (hdu->header) {
             psMetadataItem *mdi = NULL;
-            headname = pmFPAviewNameFromRule (file->extxtra, view);
+            headname = pmFPAviewNameFromRule (file->extxtra, view, file->fpa);
 
             // set NAXIS to 0 (we don't write out the data array)
@@ -156,5 +156,5 @@
             psFitsWriteHeader (hdu->header, file->fits);
         }
-        dataname = pmFPAviewNameFromRule (file->extrule, view);
+        dataname = pmFPAviewNameFromRule (file->extrule, view, file->fpa);
         pmSourcesWriteCMF (file->fits, sources, hdu->header, dataname);
         break;
