Index: /trunk/psLib/src/fits/psFits.c
===================================================================
--- /trunk/psLib/src/fits/psFits.c	(revision 5167)
+++ /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;
     }
 
Index: /trunk/psLib/test/fits/tst_psFits.c
===================================================================
--- /trunk/psLib/test/fits/tst_psFits.c	(revision 5167)
+++ /trunk/psLib/test/fits/tst_psFits.c	(revision 5168)
@@ -6,6 +6,6 @@
 *  @author Robert DeSonia, MHPCC
 *
-*  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-09-28 02:38:01 $
+*  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-09-28 20:02:49 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -203,6 +203,6 @@
 
         psVector* vec = psVectorAlloc(5,PS_TYPE_S32);
-        for (int x=0; x < 5; x++) {
-            vec->data.S32[x] = x*2;
+        for (int x=0; x < 4; x++) {
+            vec->data.S32[x] = x*10+row;
         }
         psMetadataAdd(header,PS_LIST_TAIL, "MYVEC",
@@ -899,4 +899,5 @@
         psBool boolItem = psMetadataLookupBool(NULL, rowData, "MYBOOL");
         psString strItem = psMetadataLookupStr(NULL, rowData, "MYSTR");
+        psVector* vecItem = psMetadataLookupPtr(NULL, rowData, "MYVEC");
 
         if (intItem != row) {
@@ -935,4 +936,22 @@
                     row, strItem, strValue);
             return 24;
+        }
+
+        if ( vecItem == NULL ) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psVector metadata item from file (row=%d).",
+                    row);
+            return 25;
+        }
+
+        if ( vecItem->type.type != PS_DATA_S32 ||
+                vecItem->data.S32[0] != row ||
+                vecItem->data.S32[3] != row+30 ) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Retrieved psVector (row=%d) didn't match expected values [%d,%d,%d,%d] vs [%d,%d,%d,%d].",
+                    row,vecItem->data.S32[0], vecItem->data.S32[1],
+                    vecItem->data.S32[2], vecItem->data.S32[3],
+                    row,row+10,row+20,row+30);
+            return 26;
         }
     }
