Index: trunk/psLib/src/fits/psFits.c
===================================================================
--- trunk/psLib/src/fits/psFits.c	(revision 5164)
+++ trunk/psLib/src/fits/psFits.c	(revision 5168)
@@ -1,3 +1,3 @@
-/** @file  psFits.cr
+/** @file  psFits.c
  *
  *  @brief Contains Fits I/O routines
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-09-28 02:37:58 $
+ *  @version $Revision: 1.50 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-09-28 20:02:46 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -682,8 +682,7 @@
             psMetadataAddMetadata(out, PS_LIST_HEAD, name, 0, "FITS Header",
                                   header);
-        } else { // XXX: is this a warning or error?
-            psLogMsg(__func__, PS_LOG_WARN,
-                     "Failed to read HDU#%d header data.",
-                     lcv);
+        } else {
+            psWarning("Failed to read HDU#%d header data.",
+                      lcv);
         }
 
@@ -1249,13 +1248,24 @@
             #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \
         case FITSTYPE: { \
-                NATIVETYPE value = 0; \
-                int anynul = 0; \
-                fits_read_col(fits->fd, FITSTYPE, col,row+1, \
-                              1, 1, NULL, &value, &anynul, &status); \
-                psTrace(".psFits.psFitsReadTableRow",5,"Column #%i, '%s', is type %i, repeat %i, Value = %g\n", \
-                        col, name, typecode, repeat, (double)value); \
-                psMetadataAdd(data,PS_LIST_TAIL, name, \
-                              PS_DATA_##TYPE, \
-                              "", (ps##TYPE)value); \
+                if (repeat == 1) { \
+                    NATIVETYPE value; \
+                    int anynul = 0; \
+                    fits_read_col(fits->fd, FITSTYPE, col,row+1, \
+                                  1, 1, NULL, &value, &anynul, &status); \
+                    psTrace(".psFits.psFitsReadTableRow",5,"Column #%i, '%s', is type %i, repeat %i, Value = %g\n", \
+                            col, name, typecode, repeat, (double)value); \
+                    psMetadataAdd(data,PS_LIST_TAIL, name, \
+                                  PS_DATA_##TYPE, \
+                                  "", (ps##TYPE)value); \
+                } else { \
+                    psVector* value = psVectorAlloc(repeat,PS_DATA_##TYPE); \
+                    int anynul = 0; \
+                    fits_read_col(fits->fd, FITSTYPE, col,row+1, \
+                                  1, repeat, NULL, value->data.U8, &anynul, &status); \
+                    psMetadataAdd(data,PS_LIST_TAIL, name, \
+                                  PS_DATA_VECTOR, \
+                                  "", value); \
+                    psFree(value); \
+                } \
                 break; \
             }
@@ -1285,4 +1295,7 @@
                 }
             default:
+                psWarning("Data type (%d) not supportted for column %d",
+                          typecode, col);
+
                 psTrace("psFits.psFitsReadTableRow", 2,
                         "Column %d or row %d was of a non primitive type, %d",
@@ -1584,4 +1597,12 @@
                         columns->data[n] = psMemIncrRefCounter(item);
                     }
+                } else {
+                    // unsupported type -- treating as an error
+                    psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                            "Unsupported data type (%d) for Metadata Item '%s' in row %d.",
+                            item->type, item->name, row);
+                    psFree(iter);
+                    psFree(columns);
+                    return false;
                 }
             }
@@ -1591,5 +1612,7 @@
 
     if (columns->n == 0) { // no table columns found
-        // XXX: Error?
+        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
+                "Did not find any column data to write to a table.");
+        psFree(columns);
         return false;
     }
@@ -1599,12 +1622,16 @@
     psArray* columnTypes = psArrayAlloc(columns->n);
     for (int n=0; n < columns->n; n++) {
-        char* fitsType;
         columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name);
         if ( ! getMetadataTForm((psMetadataItem*)columns->data[n],
-                                &fitsType,1) ) {
-            // XXX: error message
+                                (char**)&(columnTypes->data[n]),1) ) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to determine the FITS data type of '%s' (type=%d).",
+                    columnNames->data[n],
+                    ((psMetadataItem*)columns->data[n])->type);
+            psFree(columns);
+            psFree(columnNames);
+            psFree(columnTypes);
             return false;
         }
-        columnTypes->data[n] = fitsType;
     }
 
