Index: trunk/ppImage/src/ppFile.c
===================================================================
--- trunk/ppImage/src/ppFile.c	(revision 6260)
+++ trunk/ppImage/src/ppFile.c	(revision 6747)
@@ -12,4 +12,5 @@
         psFitsClose(file->fits);
     }
+    psFree(file->view);
     return;
 }
@@ -25,4 +26,5 @@
     file->fits = NULL;
     file->phu = NULL;
+    file->view = NULL;
 
     return file;
@@ -30,2 +32,21 @@
 
 
+bool ppFileOpen(ppFile *file, const char *name, pmConfig *config, psMetadata *camera, psMetadata *format)
+{
+    file->fpa = pmFPAConstruct(camera);
+    psString filename = psMetadataLookupStr(NULL, config->arguments, name);
+    if (strlen(filename) == 0) {
+        return false;
+    }
+    file->filename = psMemIncrRefCounter(filename);
+    file->fits = psFitsOpen(filename, "r");
+    file->phu = psFitsReadHeader(NULL, file->fits);
+    if (!pmConfigValidateCameraFormat(format, file->phu)) {
+        psLogMsg(__func__, PS_LOG_WARN, "File %s doesn't match camera format --- ignored.\n", filename);
+        psFitsClose(file->fits);
+        return false;
+    }
+    file->view = pmFPAAddSource(file->fpa, file->phu, format);
+    return true;
+}
+
