Index: trunk/psLib/src/fits/psFits.c
===================================================================
--- trunk/psLib/src/fits/psFits.c	(revision 3341)
+++ trunk/psLib/src/fits/psFits.c	(revision 3407)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-28 23:34:10 $
+ *  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-03-11 20:38:56 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -98,4 +98,5 @@
         break;
 
+    case PS_TYPE_BOOL:
     case PS_TYPE_S8:
         bitpix = BYTE_IMG;
@@ -1450,5 +1451,5 @@
         psError(PS_ERR_BAD_PARAMETER_NULL, true,
                 PS_ERRORTEXT_psFits_NULL);
-        return NULL;
+        return false;
     }
 
@@ -1619,2 +1620,69 @@
     return true;
 }
+
+bool psFitsUpdateTable(psFits* fits,
+                       psMetadata* data,
+                       int row)
+{
+    int status = 0;
+
+    if (fits == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true,
+                PS_ERRORTEXT_psFits_NULL);
+        return false;
+    }
+
+    if (data == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true,
+                PS_ERRORTEXT_psFits_IMAGE_NULL);
+        return false;
+    }
+
+
+    // check to see if we even are positioned on a table HDU
+    int hdutype;
+    if ( fits_get_hdu_type(fits->p_fd,&hdutype, &status) != 0) {
+        char fitsErr[MAX_STRING_LENGTH];
+        (void)fits_get_errstatus(status, fitsErr);
+        psError(PS_ERR_IO, true,
+                PS_ERRORTEXT_psFits_GET_HDU_TYPE_FAILED,
+                fitsErr);
+        return false;
+    }
+    if (hdutype != ASCII_TBL && hdutype != BINARY_TBL) {
+        psError(PS_ERR_IO, true,
+                PS_ERRORTEXT_psFits_NOT_TABLE_TYPE);
+        return false;
+    }
+
+
+    psMetadataIterator* iter = psMetadataIteratorAlloc(data,PS_LIST_HEAD,NULL);
+
+    psMetadataItem* item;
+
+    while ( (item=psMetadataGetAndIncrement(iter)) != NULL) {
+        if (PS_META_IS_PRIMITIVE(item->type)) {
+            // operating on primitive data type, i.e., not a complex object
+            int colnum = 0;
+
+            if ( fits_get_colnum(fits->p_fd, CASESEN, item->name, &colnum, &status) == 0) {
+                // cooresponding column found in table
+                int dataType = 0;
+                convertPsTypeToFits(item->type, NULL, NULL, &dataType);
+
+                if (fits_write_col(fits->p_fd, dataType, colnum, row, 0,1,&item->data,&status) != 0) {
+                    char fitsErr[MAX_STRING_LENGTH];
+                    (void)fits_get_errstatus(status, fitsErr);
+                    psError(PS_ERR_IO, true,
+                            PS_ERRORTEXT_psFits_WRITE_FAILED,
+                            fits->filename, fitsErr);
+                    return false;
+                }
+            }
+        }
+    }
+
+    psFree(iter);
+
+    return true;
+}
