Index: trunk/ppSub/src/ppSubCamera.c
===================================================================
--- trunk/ppSub/src/ppSubCamera.c	(revision 29954)
+++ trunk/ppSub/src/ppSubCamera.c	(revision 37966)
@@ -22,4 +22,27 @@
 #include "ppSub.h"
 
+bool checkFileruleFileSave (pmFPAfile *file, pmConfig *config) {
+
+  bool status;
+
+  psMetadata *filerule = pmConfigFileRule(config, file->camera, file->name); // File rule
+  if (!filerule) return false;
+
+  char *myString = psMetadataLookupStr(&status, filerule, "FILE.SAVE");
+  if (!myString) return false;
+
+  // do not change the value from the default unless TRUE or FALSE are found
+  if (!strcasecmp(myString, "TRUE")) {
+    file->save = true;
+    return true;
+  } 
+  if (!strcasecmp(myString, "FALSE")) {
+    file->save = false;
+    return true;
+  } 
+ 
+  return false;
+}
+
 // Define an input file
 static pmFPAfile *defineInputFile(bool *success,
@@ -131,6 +154,6 @@
         }
         if (file) {
-            // It's an output
-            file->save = true;
+            // It's an output (respect filerules)
+	  checkFileruleFileSave(file, config); 
         }
     }
@@ -244,4 +267,5 @@
         return false;
     }
+    // these ->save values below are set by command-line arguments (in ppSubArguments.c) : -save-inconv, -save-refconv
     inConvImage->save = data->saveInConv;
     inConvMask->save = data->saveInConv;
@@ -283,6 +307,6 @@
         return false;
     }
-    output->save = true;
-    outMask->save = true;
+    checkFileruleFileSave (output, config);
+    checkFileruleFileSave (outMask, config);
     if (inVar && refVar) {
         pmFPAfile *outVar = defineOutputFile(config, output, false, "PPSUB.OUTPUT.VARIANCE",
@@ -292,5 +316,5 @@
             return false;
         }
-        outVar->save = true;
+	checkFileruleFileSave (outVar, config);
     }
 
@@ -305,6 +329,6 @@
             return false;
         }
-        inverse->save = true;
-        invMask->save = true;
+        checkFileruleFileSave (inverse, config);
+        checkFileruleFileSave (invMask, config);
         if (inVar && refVar) {
             pmFPAfile *invVar = defineOutputFile(config, inverse, false, "PPSUB.INVERSE.VARIANCE",
@@ -314,5 +338,5 @@
                 return false;
             }
-            invVar->save = true;
+            checkFileruleFileSave(invVar, config);
         }
     }
@@ -329,5 +353,5 @@
         return false;
     }
-    jpeg1->save = true;
+    checkFileruleFileSave(jpeg1, config);
     pmFPAfile *jpeg2 = pmFPAfileDefineOutput(config, NULL, "PPSUB.OUTPUT.JPEG2");
     if (!jpeg2) {
@@ -339,5 +363,5 @@
         return false;
     }
-    jpeg2->save = true;
+    checkFileruleFileSave(jpeg2, config);
 
     // Output residual JPEG
@@ -351,5 +375,5 @@
         return false;
     }
-    jpeg3->save = true;
+    checkFileruleFileSave(jpeg3, config);
 
     // Output subtraction kernel
@@ -395,5 +419,5 @@
         // Deactivate psphot output sources --- we want to define output source files of our own
         pmFPAfile *psphotOutput = pmFPAfileSelectSingle(config->files, "PSPHOT.OUTPUT", 0);
-        psphotOutput->save = false;
+        psphotOutput->save = false;  // this one should NOT be set
 
         pmFPAfile *outSources = defineOutputFile(config, output, false, "PPSUB.OUTPUT.SOURCES",
@@ -403,5 +427,5 @@
             return false;
         }
-        outSources->save = true;
+        checkFileruleFileSave(outSources, config);
 
         if (data->inverse) {
@@ -412,5 +436,5 @@
                 return false;
             }
-            invSources->save = true;
+            checkFileruleFileSave(invSources, config);
         }
 
@@ -423,5 +447,5 @@
                 return false;
             }
-            posSources1->save = true;
+            checkFileruleFileSave(posSources1, config);
 
 	    // this pmFPAfile is used to carry sources detected in the diff image @ the positions from positive image #1
@@ -431,5 +455,5 @@
                 return false;
             }
-            frcSources1->save = true;
+            checkFileruleFileSave(frcSources1, config);
 	}
 
@@ -441,5 +465,5 @@
                 return false;
             }
-            posSources2->save = true;
+            checkFileruleFileSave(posSources2, config);
 
 	    // this pmFPAfile is used to carry sources detected in the diff image @ the positions from positive image #2
@@ -449,5 +473,5 @@
                 return false;
             }
-            frcSources2->save = true;
+	    checkFileruleFileSave(frcSources2, config);
         }
     }
