Index: trunk/psLib/src/fits/psFits.c
===================================================================
--- trunk/psLib/src/fits/psFits.c	(revision 15919)
+++ trunk/psLib/src/fits/psFits.c	(revision 16185)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-12-25 01:29:42 $
+ *  @version $Revision: 1.77 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-01-23 03:08:03 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -78,5 +78,5 @@
         fitsClose(fits);
     }
-    psFree (fits->extword);
+    psFree(fits->options);
 }
 
@@ -160,14 +160,45 @@
 
     psFits* fits = psAlloc(sizeof(psFits));
+    psMemSetDeallocator(fits, (psFreeFunc)fitsFree);
+
     fits->fd = fptr;
     fits->writable = (iomode == READWRITE);
-    fits->extword = NULL;
-    fits->conventions.compression = true;
-    fits->conventions.psBitpix = true;
-    fits->bitpix = 0;
-    fits->floatType = PS_FITS_FLOAT_NONE;
-    psMemSetDeallocator(fits,(psFreeFunc)fitsFree);
+
+    fits->options = NULL;
 
     return fits;
+}
+
+
+static void fitsOptionsFree(psFitsOptions *options)
+{
+    psFree(options->extword);
+}
+
+
+psFitsOptions *psFitsOptionsAlloc(void)
+{
+    psFitsOptions *options = psAlloc(sizeof(psFitsOptions)); // Options, to return
+    psMemSetDeallocator(options, (psFreeFunc)fitsOptionsFree);
+
+    options->extword = NULL;
+
+    options->conventions.compression = true;
+    options->conventions.psBitpix = true;
+
+    options->floatType = PS_FITS_FLOAT_NONE;
+
+    options->bitpix = 0;
+
+    options->scaling = PS_FITS_SCALE_NONE;
+    options->fuzz = true;
+    options->bscale = 1.0;
+    options->bzero = 0.0;
+    options->mean = NAN;
+    options->stdev = NAN;
+    options->stdevBits = 4;
+    options->stdevNum = 5.0;
+
+    return options;
 }
 
@@ -227,11 +258,15 @@
 }
 
-bool psFitsSetExtnameWord (psFits *fits, const char *extword)
+bool psFitsSetExtnameWord(psFits *fits, const char *extword)
 {
     PS_ASSERT_PTR_NON_NULL(fits,    false);
     PS_ASSERT_PTR_NON_NULL(extword, false);
 
-    psFree (fits->extword);
-    fits->extword = psStringCopy (extword);
+    if (!fits->options) {
+        fits->options = psFitsOptionsAlloc();
+    }
+
+    psFree(fits->options->extword);
+    fits->options->extword = psStringCopy(extword);
     return true;
 }
@@ -251,5 +286,6 @@
     int status = 0;
 
-    if (!fits->conventions.compression && !fits->extword) {
+    psFitsOptions *options = fits->options; // FITS options
+    if (options && !options->conventions.compression && !options->extword) {
         // User wants to use cfitsio.  Good luck to them!
         if (fits_movnam_hdu(fits->fd, ANY_HDU, (char*)extname, 0, &status) != 0) {
@@ -260,7 +296,7 @@
     }
 
-    bool ignoreCI = (fits->conventions.compression &&
+    bool ignoreCI = (options->conventions.compression &&
                      (strcmp(extname, "COMPRESSED_IMAGE") != 0)); // Ignore COMPRESSED_IMAGE extension name?
-    char *extword = (fits->extword ? fits->extword : "EXTNAME"); // Word to use as extension name
+    char *extword = (options->extword ? options->extword : "EXTNAME"); // Word to use as extension name
 
 #if 0
@@ -365,9 +401,9 @@
     char name[MAX_STRING_LENGTH];
 
-    char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
+    psFitsOptions *options = fits->options; // FITS options
+    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
 
     if (fits_read_key_str(fits->fd, extword, name, NULL, &status) != 0) {
-        psError(PS_ERR_BAD_PARAMETER_NULL, true,
-                _("Header keyword %s is not found"), extword);
+        psError(PS_ERR_BAD_PARAMETER_NULL, true, _("Header keyword %s is not found"), extword);
         return NULL;
     }
@@ -382,12 +418,11 @@
     int status = 0;
 
-    char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
+    psFitsOptions *options = fits->options; // FITS options
+    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
 
     if (fits_update_key_str(fits->fd, extword, (char*)name, NULL, &status) != 0) {
         char fitsErr[MAX_STRING_LENGTH];
         (void)fits_get_errstatus(status, fitsErr);
-        psError(PS_ERR_IO, true,
-                _("Could not write data to file. CFITSIO Error: %s"),
-                fitsErr);
+        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
         return false;
     }
@@ -404,8 +439,6 @@
 
     // move to the specified HDU
-    if (! psFitsMoveExtNum(fits,extnum,relative) ) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
-                "Failed to delete HDU #%d",
-                extnum);
+    if (!psFitsMoveExtNum(fits, extnum, relative) ) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Failed to delete HDU #%d", extnum);
         return false;
     }
@@ -417,7 +450,5 @@
         char fitsErr[MAX_STRING_LENGTH];
         (void)fits_get_errstatus(status, fitsErr);
-        psError(PS_ERR_IO, true,
-                _("Could not write data to file. CFITSIO Error: %s"),
-                fitsErr);
+        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
         return false;
     }
@@ -598,12 +629,12 @@
     // that is the restriction; data must be 32 or 64 bit for noise bits to be valid.
     if (type != PS_FITS_COMPRESS_PLIO) {
-	if (fits_set_noise_bits(fits->fd, noisebits, &status)) {
-	    fits_set_compression_type(fits->fd, 0x0, &status);
-	    char fitsErr[MAX_STRING_LENGTH];
-	    fits_get_errstatus(status, fitsErr);
-	    psError(PS_ERR_BAD_FITS, true,
-		    "Error while configuring compression. CFITSIO error: %s", fitsErr);
-	    return false;
-	}
+        if (fits_set_noise_bits(fits->fd, noisebits, &status)) {
+            fits_set_compression_type(fits->fd, 0x0, &status);
+            char fitsErr[MAX_STRING_LENGTH];
+            fits_get_errstatus(status, fitsErr);
+            psError(PS_ERR_BAD_FITS, true,
+                    "Error while configuring compression. CFITSIO error: %s", fitsErr);
+            return false;
+        }
     }
 
