Index: /trunk/psModules/src/config/pmConfig.c
===================================================================
--- /trunk/psModules/src/config/pmConfig.c	(revision 14650)
+++ /trunk/psModules/src/config/pmConfig.c	(revision 14651)
@@ -4,6 +4,6 @@
  *  @author EAM (IfA)
  *
- *  @version $Revision: 1.101 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-08-15 20:21:18 $
+ *  @version $Revision: 1.102 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-08-23 23:45:05 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -295,9 +295,9 @@
 // Read the calibrations for a camera
 static bool cameraReadCalibrations(psMetadata *camera, // Camera for which to read the formats
-                                   const char *name // Name of the camera, for error messages
+                                   const char *cameraName // Name of the camera, for error messages
     )
 {
     assert(camera);
-    assert(name);
+    assert(cameraName);
 
     psMetadataItem *darkNorm = psMetadataLookup(camera, "DARK.NORM"); // The dark normalisation calibration
@@ -305,9 +305,9 @@
         if (darkNorm->type == PS_DATA_STRING) {
             const char *darkNormName = darkNorm->data.str; // The file name
-            psTrace("config", 2, "Reading %s dark normalisation: %s\n", name, darkNormName);
+            psTrace("config", 2, "Reading %s dark normalisation: %s\n", cameraName, darkNormName);
             psMetadata *new = NULL;         // New metadata
             if (!pmConfigFileRead(&new, darkNormName, "Dark normalisation")) {
                 psError(PM_ERR_CONFIG, false, "Trouble reading reading %s dark normalisation %s --- "
-                        "ignored.\n", name, darkNormName);
+                        "ignored.\n", cameraName, darkNormName);
                 psFree(new);
                 return false;
@@ -320,5 +320,5 @@
             darkNorm->data.md = new;
         } else if (darkNorm->type != PS_DATA_METADATA) {
-            psWarning("DARK.NORM in camera %s is not of type STR or METADATA (%x)", name, darkNorm->type);
+            psWarning("DARK.NORM in camera %s is not of type STR or METADATA (%x)", cameraName, darkNorm->type);
         }
     } else {
@@ -541,21 +541,10 @@
                      "ignored.\n");
         } else {
-            char *cameraFile = argv[argNum]; // The camera configuration file to read
-
-            // look for a symbolic camera name in the CAMERAS metadata
-            // otherwise fall back to trying the -camera option as a literal
-            // filename
             bool mdok = true;           // Status of MD lookup
+            char *cameraName = argv[argNum]; // symbolic name of the camera
+
+	    // look for the CAMERAS list in config->site
             psMetadata *cameras = psMetadataLookupMetadata(&mdok, config->site, "CAMERAS");
-            if (mdok && cameras) {
-                char *newFile = psMetadataLookupStr(NULL, cameras, cameraFile); // The filename
-                if (newFile) {
-                    cameraFile = newFile;
-                } else {
-		    psLogMsg ("psModules.config", PS_LOG_INFO, 
-			      "%s is not listed in the site CAMERAS list,\n"
-			      "trying as a camera configuration file\n", cameraFile);
-		}
-            } else {
+            if (!cameras) {
                 psError(PS_ERR_IO, false, "Unable to find CAMERAS in site configuration.\n");
                 psFree(config);
@@ -563,10 +552,21 @@
             }
 
-            if (!pmConfigFileRead(&config->camera, cameraFile, "camera")) {
-                psError(PM_ERR_CONFIG, false, "Problem reading %s", cameraFile);
+            // look for the symbolic camera name in the CAMERAS metadata
+	    char *cameraFile = psMetadataLookupStr(&mdok, cameras, cameraName); // The filename
+	    if (!cameraFile) {
+                psError(PS_ERR_IO, false, "%s is not listed in the site CAMERAS list\n", cameraName);
                 psFree(config);
                 return NULL;
             }
 
+	    // load this camera's configuration informatoin
+            if (!pmConfigFileRead(&config->camera, cameraFile, "camera")) {
+                psError(PM_ERR_CONFIG, false, "Problem reading %s", cameraName);
+                psFree(config);
+                return NULL;
+            }
+	    // save the name for future uses
+	    config->cameraName = psStringCopy (cameraName);
+	    
             psArgumentRemove(argNum, argc, argv);
 
@@ -580,27 +580,27 @@
 
             // Read in any camera-specific calibrations
-            if (!cameraReadCalibrations(config->camera, cameraFile)) {
+            if (!cameraReadCalibrations(config->camera, cameraName)) {
                 psError(PS_ERR_UNKNOWN, false,
                         "Unable to read calibrations within camera configuration %s.\n",
-                        cameraFile);
+                        cameraName);
                 psFree(config);
                 return NULL;
             }
 
-            psMetadataAddMetadata(cameras, PS_LIST_HEAD, cameraFile, PS_META_REPLACE,
+            psMetadataAddMetadata(cameras, PS_LIST_HEAD, cameraName, PS_META_REPLACE,
                                   "Camera specified on command line", config->camera);
 
-            if (!pmConfigCameraSkycellVersion(config->site, cameraFile)) {
+            if (!pmConfigCameraSkycellVersion(config->site, cameraName)) {
                 psError(PS_ERR_UNKNOWN, false,
                         "Unable to generate skycell versions of specified camera %s.\n",
-                        cameraFile);
+                        cameraName);
                 psFree(config);
                 return NULL;
             }
 
-            if (!pmConfigCameraMosaickedVersions(config->site, cameraFile)) {
+            if (!pmConfigCameraMosaickedVersions(config->site, cameraName)) {
                 psError(PS_ERR_UNKNOWN, false,
                         "Unable to generate mosaicked versions of specified camera %s.\n",
-                        cameraFile);
+                        cameraName);
                 psFree(config);
                 return NULL;
@@ -875,5 +875,6 @@
     assert(camera);
     assert(header);
-    assert(cameraName && strlen(cameraName) > 0);
+    assert(cameraName);
+    assert(*cameraName);
 
     bool result = false;                // Did we find the first match?
@@ -1008,5 +1009,5 @@
         psFree(name);
     }
-    return format;
+    return psMemIncrRefCounter(format);
 }
 
