Index: trunk/ppConfigDump/src/ppConfigDump.c
===================================================================
--- trunk/ppConfigDump/src/ppConfigDump.c	(revision 24187)
+++ trunk/ppConfigDump/src/ppConfigDump.c	(revision 29925)
@@ -26,6 +26,7 @@
 void dump(const char *filename,     // Filename to which to dump
           const char *description,  // Description of what's being dumped
-          psMetadata *md            // Metadata to dump
-          )
+          psMetadata *md,           // Metadata to dump
+	  const char *compressMode
+    )
 {
     if (!filename || strlen(filename) == 0) {
@@ -38,9 +39,39 @@
             die(PS_EXIT_SYS_ERROR);
         }
-        fprintf(stdout, "%s", string);
+
+	if (compressMode) {
+	    if (strlen(compressMode) > 2) {
+		psErrorStackPrint(stderr, "invalid compression options %s!\n", compressMode);
+		die(PS_EXIT_CONFIG_ERROR);
+	    }
+	    char modeString[4];
+	    snprintf (modeString, 4, "w%s", compressMode);
+
+	    gzFile file = gzdopen (STDOUT_FILENO, modeString);
+	    if (file == Z_NULL) {
+		psErrorStackPrint(stderr, "Failed to open file\n");
+		die(PS_EXIT_SYS_ERROR);
+	    }
+	    int nbytes = gzwrite (file, string, strlen(string));
+	    if (nbytes != strlen(string)) {
+		psErrorStackPrint(stderr, "Failed to write contents of configuration file %s", filename);
+		psFree(string);
+		gzclose(file);
+		die(PS_EXIT_SYS_ERROR);
+	    }
+	    psFree(string);
+	    if (gzclose(file) != Z_OK) {
+		psErrorStackPrint(stderr, "Failed to close file, %s\n", filename);
+		die(PS_EXIT_SYS_ERROR);
+	    }
+	} else {
+	    fprintf(stdout, "%s", string);
+	}
         psFree(string);
-    } else if (!psMetadataConfigWrite(md, filename)) {
-        psErrorStackPrint(stderr, "Can't write %s to %s\n", description, filename);
-        die(PS_EXIT_SYS_ERROR);
+    } else {
+	if (!psMetadataConfigWrite(md, filename, compressMode)) {
+	    psErrorStackPrint(stderr, "Can't write %s to %s\n", description, filename);
+	    die(PS_EXIT_SYS_ERROR);
+	}
     }
 }
@@ -62,4 +93,6 @@
     arguments = psMetadataAlloc();
     psMetadataAddStr(arguments, PS_LIST_TAIL, "-file", 0, "FITS file to use for camera determination", NULL);
+    psMetadataAddStr(arguments, PS_LIST_TAIL, "-compress", 0, "output compression mode", NULL);
+    psMetadataAddBool(arguments, PS_LIST_TAIL, "-z", 0, "default compression", false);
     psMetadataAddStr(arguments, PS_LIST_TAIL, "-dump-user", 0, "Filename for user configuration", NULL);
     psMetadataAddStr(arguments, PS_LIST_TAIL, "-dump-site", 0, "Filename for site configuration", NULL);
@@ -84,4 +117,11 @@
         psArgumentHelp(arguments);
         die(PS_EXIT_CONFIG_ERROR);
+    }
+
+    const char *defaultCompressMode = "7f";
+    const char *compressMode = psMetadataLookupStr(NULL, arguments, "-compress"); // compression
+    bool defaultCompression = psMetadataLookupBool(NULL, arguments, "-z"); // compression?
+    if (!compressMode && defaultCompression) {
+	compressMode = defaultCompressMode;
     }
 
@@ -122,20 +162,20 @@
 
     const char *userName = psMetadataLookupStr(NULL, arguments, "-dump-user"); // User filename
-    dump(userName, "user configuration", config->user);
+    dump(userName, "user configuration", config->user, compressMode);
 
     const char *siteName = psMetadataLookupStr(NULL, arguments, "-dump-site"); // Site filename
-    dump(siteName, "site configuration", config->site);
+    dump(siteName, "site configuration", config->site, compressMode);
 
     const char *systemName = psMetadataLookupStr(NULL, arguments, "-dump-system"); // System filename
-    dump(systemName, "system configuration", config->system);
+    dump(systemName, "system configuration", config->system, compressMode);
 
     const char *camName = psMetadataLookupStr(NULL, arguments, "-dump-camera"); // Camera filename
-    dump(camName, "camera configuration", config->camera);
+    dump(camName, "camera configuration", config->camera, compressMode);
 
     const char *formatName = psMetadataLookupStr(NULL, arguments, "-dump-format"); // Format filename
-    dump(formatName, "camera format", config->format);
+    dump(formatName, "camera format", config->format, compressMode);
 
     const char *recipesName = psMetadataLookupStr(NULL, arguments, "-dump-recipes"); // Recipes filename
-    dump(recipesName, "recipes", config->recipes);
+    dump(recipesName, "recipes", config->recipes, compressMode);
 
     recipeArgs = psMetadataLookupMetadata(NULL, arguments, "-dump-recipe");
@@ -148,5 +188,5 @@
         }
         const char *recipeFile = psMetadataLookupStr(NULL, recipeArgs, "filename"); // Filename for recipe
-        dump(recipeFile, "recipe", recipe);
+        dump(recipeFile, "recipe", recipe, compressMode);
     }
 
