Index: trunk/Ohana/src/opihi/cmd.data/wd.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/wd.c	(revision 38062)
+++ trunk/Ohana/src/opihi/cmd.data/wd.c	(revision 38441)
@@ -18,4 +18,14 @@
   }
 
+  char *CompressMode = NULL;
+  if ((N = get_argument (argc, argv, "-compress-mode"))) {
+    remove_argument (N, &argc, argv);
+    CompressMode = strcreate(argv[N]);
+    remove_argument (N, &argc, argv);
+  } else if ((N = get_argument (argc, argv, "-compress"))) {
+    remove_argument (N, &argc, argv);
+    CompressMode = strcreate("GZIP_1");
+  }
+
   outZero = 0;
   newZero = FALSE;
@@ -54,4 +64,5 @@
     if (outUnsign == -1) {
       gprint (GP_ERR, "-unsign options: t, f, true, false\n");
+      FREE (CompressMode);
       return (FALSE);
     }
@@ -62,8 +73,9 @@
   if (argc != 3) {
     gprint (GP_ERR, "USAGE: wd <buffer> <filename> [-bitpix N] [-bscale X] [-bzero X] [-extend] [-newplane]\n");
+    FREE (CompressMode);
     return (FALSE);
   }
 
-  if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE);
+  if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) { FREE (CompressMode); return (FALSE); }
 
   if (!newBitpix) outBitpix = buf[0].bitpix;
@@ -159,7 +171,46 @@
     gfits_free_header (&temp_header);
     gfits_free_matrix (&temp_matrix);
+    FREE (CompressMode);
     return (status);
   }
   
+  // not compatible with extend
+  if (CompressMode) {
+    Header myHeader;
+    Matrix myMatrix;
+
+    FILE *f = fopen (argv[2], "w");
+    if (!f) {
+      fprintf (stderr, "ERROR: cannot open image subset file for output %s\n", argv[2]);
+      FREE (CompressMode);
+      return FALSE;
+    }
+    
+    gfits_init_header (&myHeader);
+    myHeader.extend = TRUE;
+    gfits_create_header (&myHeader);
+    gfits_create_matrix (&myHeader, &myMatrix);
+    gfits_fwrite_header  (f, &myHeader);
+    gfits_fwrite_matrix  (f, &myMatrix);
+    gfits_free_header (&myHeader);
+    gfits_free_matrix (&myMatrix);
+
+    FTable ftable;
+    Header theader;
+
+    ftable.header = &theader;
+
+    gfits_compress_image (&temp_header, &temp_matrix, &ftable, NULL, CompressMode);
+    gfits_byteswap_varlength_column (&ftable, 1);
+    gfits_fwrite_Theader (f, &theader);
+    gfits_fwrite_table  (f, &ftable);
+    fclose (f);
+
+    gfits_free_header (&theader);
+    gfits_free_table (&ftable);
+    FREE (CompressMode);
+    return (TRUE);
+  }
+
   /* the actual write-to-disk goes here */
   if (!gfits_write_header (argv[2], &temp_header)) {
@@ -167,4 +218,5 @@
     gfits_free_header (&temp_header);
     gfits_free_matrix (&temp_matrix);
+    FREE (CompressMode);
     return (FALSE);
   }
@@ -174,4 +226,5 @@
     gfits_free_header (&temp_header);
     gfits_free_matrix (&temp_matrix);
+    FREE (CompressMode);
     return (FALSE);
   }
@@ -180,4 +233,5 @@
   gfits_free_matrix (&temp_matrix);
   
+  FREE (CompressMode);
   return (TRUE);
 }
