Index: trunk/psphot/src/psphotOutput.c
===================================================================
--- trunk/psphot/src/psphotOutput.c	(revision 6311)
+++ trunk/psphot/src/psphotOutput.c	(revision 6379)
@@ -12,19 +12,31 @@
 static char *extRoot    = NULL;
 
+void psphotOutputCleanup () {
+
+    psFree (outputRoot);
+    psFree (outputName);
+    psFree (outputMode);
+    psFree (outputFormat);
+    psFree (extNumberFormat);
+    psFree (extNameKey);
+    psFree (extRoot);
+    return;
+}
+
 void psphotOutputPrep (ppFile *file, ppConfig *config) {
 
     bool status;
 
-    outputRoot   = psMetadataLookupPtr (&status, config->arguments, "OUTPUT_ROOT");
+    outputRoot      = psMetadataLookupStr (&status, config->arguments, "OUTPUT_ROOT");
     if (!status) psAbort ("psphot", "output file not specified");
 
-    outputName   = psMetadataLookupPtr (&status, config->recipe, "OUTPUT_NAME");
-    outputMode   = psMetadataLookupPtr (&status, config->recipe, "OUTPUT_MODE");
-    outputFormat = psMetadataLookupPtr (&status, config->recipe, "OUTPUT_FORMAT");
+    outputName      = psMetadataLookupStr (&status, config->recipe, "OUTPUT_NAME");
+    outputMode      = psMetadataLookupStr (&status, config->recipe, "OUTPUT_MODE");
+    outputFormat    = psMetadataLookupStr (&status, config->recipe, "OUTPUT_FORMAT");
 
     // rules to construct output names
-    extNumberFormat = psMetadataLookupPtr (&status, config->recipe, "EXTNUMBER_FORMAT");
-    extNameKey      = psMetadataLookupPtr (&status, config->recipe, "EXTNAME");
-    extRoot         = psMetadataLookupPtr (&status, config->recipe, "EXTROOT");
+    extNumberFormat = psMetadataLookupStr (&status, config->recipe, "EXTNUMBER_FORMAT");
+    extNameKey      = psMetadataLookupStr (&status, config->recipe, "EXTNAME");
+    extRoot         = psMetadataLookupStr (&status, config->recipe, "EXTROOT");
 
     if (extNumberFormat == NULL) {
@@ -63,4 +75,13 @@
     }
 
+    // save so freeing config will not drop these references
+    psMemCopy (outputRoot);
+    psMemCopy (outputName);
+    psMemCopy (outputMode);
+    psMemCopy (outputFormat);
+    psMemCopy (extNumberFormat);
+    psMemCopy (extNameKey);
+    psMemCopy (extRoot);
+
     return;
 }
@@ -79,5 +100,5 @@
 
     // find the extname:
-    char *extNameVal = psMetadataLookupPtr (&status, header, extNameKey);
+    char *extNameVal = psMetadataLookupStr (&status, header, extNameKey);
 	    
     extNameWord = extNameVal;
@@ -157,15 +178,9 @@
     if (!strcasecmp (outputMode, "SPLIT")) {
 	outputFile = psphotSplitName (header);
-    } else {
-	// construct appropriate extname
-	psAbort ("psphotOutput", "programming error");
-    }
-    
-    fprintf (stderr, "output file: %s\n", outputFile);
-    return;
-
-    char *psfFile    = psMetadataLookupPtr (&status, arguments, "PSF_OUTPUT_FILE");
-    char *psfSample  = psMetadataLookupPtr (&status, arguments, "PSF_SAMPLE_FILE");
-    char *residImage = psMetadataLookupPtr (&status, arguments, "RESID_IMAGE");
+    } 
+
+    char *psfFile    = psMetadataLookupStr (&status, arguments, "PSF_OUTPUT_FILE");
+    char *psfSample  = psMetadataLookupStr (&status, arguments, "PSF_SAMPLE_FILE");
+    char *residImage = psMetadataLookupStr (&status, arguments, "RESID_IMAGE");
 
     if (psfSample != NULL) psphotSamplePSFs (psf, readout->image, psfSample);
@@ -183,24 +198,30 @@
     if (outputFormat == NULL) {
 	psLogMsg ("output", 3, "no data output format selected");
+	psFree (outputFile);
 	return;
     }
     if (!strcasecmp (outputFormat, "SX")) {
 	pmSourcesWriteSX (sources, outputFile);
+	psFree (outputFile);
 	return;
     }
     if (!strcasecmp (outputFormat, "OBJ")) {
 	pmSourcesWriteOBJ (sources, outputFile);
+	psFree (outputFile);
 	return;
     }
     if (!strcasecmp (outputFormat, "CMP")) {
 	pmSourcesWriteCMP (sources, outputFile, header);
+	psFree (outputFile);
 	return;
     }
     if (!strcasecmp (outputFormat, "CMF")) {
 	pmSourcesWriteCMF (sources, outputFile, header);
+	psFree (outputFile);
 	return;
     }
     if (!strcasecmp (outputFormat, "TEXT")) {
 	pmSourcesWriteText (sources, outputFile);
+	psFree (outputFile);
 	return;
     }
@@ -610,4 +631,5 @@
     }
     fclose (f);
+    psFree (empty);
     return true;
 }
@@ -746,5 +768,5 @@
 
     // optional dump of all rough source data
-    char *output = psMetadataLookupPtr (&status, config, "MOMENTS_OUTPUT_FILE");
+    char *output = psMetadataLookupStr (&status, config, "MOMENTS_OUTPUT_FILE");
     if (!status) return false;
     if (output == NULL) return false;
@@ -752,5 +774,4 @@
 
     pmMomentsWriteText (sources, output);
-    psFree (output);
     return true;
 }
