Index: trunk/psLib/src/fileUtils/psFits.c
===================================================================
--- trunk/psLib/src/fileUtils/psFits.c	(revision 2967)
+++ trunk/psLib/src/fileUtils/psFits.c	(revision 2971)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-01-13 02:08:30 $
+ *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-01-13 19:50:44 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -25,4 +25,18 @@
 
 #define MAX_STRING_LENGTH 256  // maximum length string for FITS routines
+
+static char* standardFitsKeys[] = {
+                                      "SIMPLE",
+                                      "BITPIX",
+                                      "NAXIS",
+                                      "NAXIS1",
+                                      "NAXIS2",
+                                      "NAXIS3",
+                                      "EXTEND",
+                                      "COMMENT",
+                                      "EXTNAME",
+                                      "HDUNAME",
+                                      NULL
+                                  };
 
 static psElemType convertFitsToPsType(int datatype)
@@ -457,65 +471,86 @@
     psBool tempBool;
     psBool success;
+    psBool stdKey;
     for (int i = 1; i <= numKeys; i++) {
 
         fits_read_keyn(fits->p_fd, i, keyName, keyValue, keyComment, &status);
-        fits_get_keytype(keyValue, &keyType, &status);
+
+        stdKey = false;
+
+        int stdKeyIdx = 0;
+        while (standardFitsKeys[stdKeyIdx] != NULL && ! stdKey) {
+            if (strcmp(keyName,standardFitsKeys[stdKeyIdx++]) == 0) {
+                stdKey = true;
+            }
+        }
+
+        if (keyValue[0] != 0) { // blank values are not handled by fits_get_keytype
+            fits_get_keytype(keyValue, &keyType, &status);
+        } else {
+            keyType = 'C';
+        }
         if (status != 0) {
             break;
         }
 
-        switch (keyType) {
-        case 'I':
-            success = psMetadataAdd(out,
-                                    PS_LIST_TAIL,
-                                    keyName,
-                                    PS_TYPE_S32,
-                                    PS_META_PRIMITIVE,
-                                    keyComment,
-                                    atoi(keyValue));
-            break;
-        case 'F':
-            success = psMetadataAdd(out,
-                                    PS_LIST_TAIL,
-                                    keyName,
-                                    PS_TYPE_F64,
-                                    PS_META_PRIMITIVE,
-                                    keyComment,
-                                    atof(keyValue));
-            break;
-        case 'C':
-            success = psMetadataAdd(out,
-                                    PS_LIST_TAIL,
-                                    keyName,
-                                    PS_TYPE_U8,
-                                    PS_META_STR,
-                                    keyComment,
-                                    keyValue);
-            break;
-        case 'L':
-            tempBool = (keyValue[0] == 'T') ? 1 : 0;
-            success = psMetadataAdd(out,
-                                    PS_LIST_TAIL,
-                                    keyName,
-                                    PS_TYPE_BOOL,
-                                    PS_META_PRIMITIVE,
-                                    keyComment,
-                                    tempBool);
-            break;
-        case 'U':
-        case 'X':
-        default:
-            psError(PS_ERR_IO, true,
-                    PS_ERRORTEXT_psFits_METATYPE_INVALID,
-                    keyType);
-            return out;
-        }
-
-        if (!success) {
-            psError(PS_ERR_UNKNOWN, false,
-                    PS_ERRORTEXT_psFits_METADATA_ADD_FAILED,
-                    keyName);
-            return out;
-        }
+        if (! stdKey) {
+            switch (keyType) {
+            case 'X': // bit
+            case 'I': // short int.
+            case 'J': // int.
+            case 'B': // byte
+                success = psMetadataAdd(out,
+                                        PS_LIST_TAIL,
+                                        keyName,
+                                        PS_TYPE_S32,
+                                        PS_META_PRIMITIVE,
+                                        keyComment,
+                                        atoi(keyValue));
+                break;
+            case 'U': // unsigned int. may not fit in a psS32
+            case 'K': // long int. can't all fit in a psS32
+            case 'F':
+                success = psMetadataAdd(out,
+                                        PS_LIST_TAIL,
+                                        keyName,
+                                        PS_TYPE_F64,
+                                        PS_META_PRIMITIVE,
+                                        keyComment,
+                                        atof(keyValue));
+                break;
+            case 'C':
+                success = psMetadataAdd(out,
+                                        PS_LIST_TAIL,
+                                        keyName,
+                                        PS_TYPE_U8,
+                                        PS_META_STR,
+                                        keyComment,
+                                        keyValue);
+                break;
+            case 'L':
+                tempBool = (keyValue[0] == 'T') ? 1 : 0;
+                success = psMetadataAdd(out,
+                                        PS_LIST_TAIL,
+                                        keyName,
+                                        PS_TYPE_BOOL,
+                                        PS_META_PRIMITIVE,
+                                        keyComment,
+                                        tempBool);
+                break;
+            default:
+                psError(PS_ERR_IO, true,
+                        PS_ERRORTEXT_psFits_METATYPE_INVALID,
+                        keyType);
+                return out;
+            }
+
+            if (!success) {
+                psError(PS_ERR_UNKNOWN, false,
+                        PS_ERRORTEXT_psFits_METADATA_ADD_FAILED,
+                        keyName);
+                return out;
+            }
+        }
+
     }
 
