Index: trunk/psLib/src/fits/psFitsTableNew.c
===================================================================
--- trunk/psLib/src/fits/psFitsTableNew.c	(revision 32251)
+++ trunk/psLib/src/fits/psFitsTableNew.c	(revision 32263)
@@ -95,5 +95,6 @@
 
 void
-freeTable(psFitsTable *table) {
+freeTable(psFitsTable *table)
+{
     for (int col = 0; col < table->numCols; col++) {
         psFitsTableColumn *column = &table->columns[col];
@@ -287,6 +288,6 @@
 }
 
-// return the index for a given column
-int psFitsTableGetColumnIndex(psFitsTable *table, psString name)
+// return the column number with a given name
+int psFitsTableGetColumnNumber(psFitsTable *table, const char *name)
 {
     bool mdok;
@@ -294,5 +295,5 @@
 
     if (!mdok) {
-        psFitsError(mdok, false, "Failed to lookup column index for %s", name);
+        psFitsError(mdok, true, "Failed to lookup column index for %s", name);
         return -1;
     }
@@ -301,20 +302,92 @@
 }
 
-// return F32 value for given cell
-psF32 psFitsTableGetCellF32(psFitsTable *table, int row, int col) {
-    return table->columns[col].data.F32[row];
-}
-
-// return value for a named column for a given row
-psF32 psFitsTableGetF32(bool *status, psFitsTable *table, psString name, int row) {
-    bool mdok;
-    int col = psFitsTableGetColumnIndex(table, name);
-
-    if (mdok) {
-        return table->columns[col].data.F32[row];
-    } else {
-        return 0;
-    }
-}
+#define psFitsTableGetNumTYPE(TYPE, NAME) \
+ps##TYPE psFitsTableGet##NAME(bool *status, psFitsTable *table, int row, const char *name) \
+{ \
+    ps##TYPE value = 0; \
+    if (status) { \
+        *status = true; \
+    } \
+    \
+    if (row >= table->numRows || row < 0) { \
+        if (status) { \
+            *status = false; \
+        } \
+        return 0; \
+    } \
+    bool mdok; \
+    int col = psMetadataLookupS32(&mdok, table->index, name); \
+    if (!mdok) { \
+        if (status) { \
+            *status = false; \
+        } \
+        return 0; \
+    } \
+    if (col < 0) { \
+        if (status) { \
+            *status = false; \
+        } \
+        return 0; \
+    } \
+    psFitsTableColumn *column = &table->columns[col]; \
+    switch (column->type) { \
+        case PS_DATA_S8: \
+        value = (ps##TYPE)column->data.S8[row]; \
+        break; \
+    case PS_DATA_S16: \
+        value = (ps##TYPE)column->data.S16[row]; \
+        break; \
+    case PS_DATA_S32: \
+        value = (ps##TYPE)column->data.S32[row]; \
+        break; \
+    case PS_DATA_S64: \
+        value = (ps##TYPE)column->data.S64[row]; \
+        break; \
+    case PS_DATA_U8: \
+        value = (ps##TYPE)column->data.U8[row]; \
+        break; \
+    case PS_DATA_U16: \
+        value = (ps##TYPE)column->data.U16[row]; \
+        break; \
+    case PS_DATA_U32: \
+        value = (ps##TYPE)column->data.U32[row]; \
+        break; \
+    case PS_DATA_U64: \
+        value = (ps##TYPE)column->data.U64[row]; \
+        break; \
+    case PS_DATA_F32: \
+        value = (ps##TYPE)column->data.F32[row]; \
+        break; \
+    case PS_DATA_F64: \
+        value = (ps##TYPE)column->data.F64[row]; \
+        break; \
+    case PS_DATA_BOOL: \
+        if (column->data.BOOL[row]) { \
+            value = 1; \
+        } \
+        break; \
+    default: \
+        /* if you get to this point, the value is not a number. */ \
+        if (status) {  \
+            *status = false; \
+        }  \
+        break; \
+    } \
+    return value; \
+}
+
+// #define psFitsTableGetNumTYPE(TYPE, NAME)
+
+psFitsTableGetNumTYPE(S8, S8);
+psFitsTableGetNumTYPE(U8, U8);
+psFitsTableGetNumTYPE(S16, S16);
+psFitsTableGetNumTYPE(U16, U16);
+psFitsTableGetNumTYPE(S32, S32);
+psFitsTableGetNumTYPE(U32, U32);
+psFitsTableGetNumTYPE(S64, S64);
+psFitsTableGetNumTYPE(U64, U64);
+psFitsTableGetNumTYPE(F32, F32);
+psFitsTableGetNumTYPE(F64, F64);
+psFitsTableGetNumTYPE(Bool, BOOL);
 
 // remove rows from table that are marked in the mask array as censored.
