Index: /trunk/psLib/src/fits/psFits.c
===================================================================
--- /trunk/psLib/src/fits/psFits.c	(revision 5140)
+++ /trunk/psLib/src/fits/psFits.c	(revision 5141)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-09-26 21:13:22 $
+ *  @version $Revision: 1.47 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-09-27 02:27:28 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -172,5 +172,5 @@
         break;
     case PS_DATA_STRING:
-        *fitsType = psStringCopy("1A");
+        *fitsType = psStringCopy("A");
         break;
         // XXX: Handle other types, e.g., Vectors, etc.
@@ -1497,5 +1497,6 @@
                     bool found = false;
                     psMetadataItem* fItem = NULL;
-                    for (int n=0; n < columns->n && ! found; n++) {
+                    int n;
+                    for (n=0; n < columns->n && ! found; n++) {
                         fItem = (psMetadataItem*)(columns->data[n]);
                         if (strcmp(item->name, fItem->name) == 0) {
@@ -1507,8 +1508,9 @@
                         psArrayAdd(columns, columns->nalloc, item);
                     } else if (item->type == PS_DATA_STRING &&
-                               strlen(fItem->data.V) > strlen(item->data.V)) {
+                               strlen(fItem->data.V) < strlen(item->data.V)) {
                         // got to keep the longest string value as to know what size to create the table column
-                        psMemDecrRefCounter(item->data.V);
-                        item->data.V = psMemIncrRefCounter(fItem->data.V);
+                        psMemDecrRefCounter(fItem);
+                        columns->data[n] = psMemIncrRefCounter(item);
+
                     }
 
@@ -1537,5 +1539,5 @@
         if (fitsType[strlen(fitsType)-1] == 'A') {
             // string type -- append length to the type.
-            psStringAppend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V));
+            psStringPrepend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V)+1);
         }
         columnTypes->data[n] = fitsType;
@@ -1567,107 +1569,104 @@
         int row;
         item = columns->data[n];
-        if (PS_DATA_IS_PRIMITIVE(item->type)) {
-            psVector* col = NULL;
-            psArray* colArray = NULL;
-            switch (item->type) {
-            case PS_DATA_S32:
-                col = psVectorAlloc(table->n, PS_TYPE_S32);
-                for (row = 0; row < table->n; row++) {
-                    col->data.S32[row] = psMetadataLookupS32(NULL,
-                                         table->data[row],
-                                         item->name);
-                }
-                fits_write_col_int(fits->fd,
-                                   n+1, // column number
-                                   1, // firstrow
-                                   1, // firstelem
-                                   table->n, // nelements
-                                   col->data.S32,
-                                   &status);
-                break;
-
-            case PS_DATA_F32:
-                col = psVectorAlloc(table->n, PS_TYPE_F32);
-                for (row = 0; row < table->n; row++) {
-                    col->data.F32[row] = psMetadataLookupF32(NULL,
-                                         table->data[row],
-                                         item->name);
-                }
-                fits_write_col_flt(fits->fd,
-                                   n+1, // column number
-                                   1, // firstrow
-                                   1, // firstelem
-                                   table->n, // nelements
-                                   col->data.F32,
-                                   &status);
-                break;
-
-            case PS_DATA_F64:
-                col = psVectorAlloc(table->n, PS_TYPE_F64);
-                for (row = 0; row < table->n; row++) {
-                    col->data.F64[row] = psMetadataLookupF64(NULL,
-                                         table->data[row],
-                                         item->name);
-                }
-                fits_write_col_dbl(fits->fd,
-                                   n+1, // column number
-                                   1, // firstrow
-                                   1, // firstelem
-                                   table->n, // nelements
-                                   col->data.F64,
-                                   &status);
-                break;
-
-            case PS_DATA_BOOL:
-                col = psVectorAlloc(table->n, PS_TYPE_BOOL);
-                for (row = 0; row < table->n; row++) {
-                    col->data.S8[row] = psMetadataLookupBool(NULL,
-                                        table->data[row],
-                                        item->name);
-                }
-                fits_write_col_log(fits->fd,
-                                   n+1, // column number
-                                   1, // firstrow
-                                   1, // firstelem
-                                   table->n, // nelements
-                                   (char*)col->data.S8,
-                                   &status);
-                break;
-
-            case PS_DATA_STRING:
-                colArray = psArrayAlloc(table->n);
-                for (row = 0; row < table->n; row++) {
-                    colArray->data[row] = psMetadataLookupStr(NULL,
-                                          table->data[row],
-                                          item->name);
-                }
-                fits_write_col_str(fits->fd,
-                                   n+1,
-                                   1,
-                                   1,
-                                   table->n,
-                                   (char**)colArray->data,
-                                   &status);
-                break;
-
-            default:
-                // XXX: error message?
-                break;
+        psVector* col = NULL;
+        psArray* colArray = NULL;
+        switch (item->type) {
+        case PS_DATA_S32:
+            col = psVectorAlloc(table->n, PS_TYPE_S32);
+            for (row = 0; row < table->n; row++) {
+                col->data.S32[row] = psMetadataLookupS32(NULL,
+                                     table->data[row],
+                                     item->name);
             }
-            psFree(col);
-        } else if (item->type == PS_DATA_STRING) {
-            psArray* col = psArrayAlloc(table->n);
-            for (row = 0; row < table->n; row++) {
-                col->data[row] = item->data.V;
-            }
-            fits_write_col_str(fits->fd,
-                               n, // column number
+            fits_write_col_int(fits->fd,
+                               n+1, // column number
                                1, // firstrow
                                1, // firstelem
                                table->n, // nelements
-                               (char**)col->data,
+                               col->data.S32,
                                &status);
-            psFree(col);
-        }
+            break;
+
+        case PS_DATA_F32:
+            col = psVectorAlloc(table->n, PS_TYPE_F32);
+            for (row = 0; row < table->n; row++) {
+                col->data.F32[row] = psMetadataLookupF32(NULL,
+                                     table->data[row],
+                                     item->name);
+            }
+            fits_write_col_flt(fits->fd,
+                               n+1, // column number
+                               1, // firstrow
+                               1, // firstelem
+                               table->n, // nelements
+                               col->data.F32,
+                               &status);
+            break;
+
+        case PS_DATA_F64:
+            col = psVectorAlloc(table->n, PS_TYPE_F64);
+            for (row = 0; row < table->n; row++) {
+                col->data.F64[row] = psMetadataLookupF64(NULL,
+                                     table->data[row],
+                                     item->name);
+            }
+            fits_write_col_dbl(fits->fd,
+                               n+1, // column number
+                               1, // firstrow
+                               1, // firstelem
+                               table->n, // nelements
+                               col->data.F64,
+                               &status);
+            break;
+
+        case PS_DATA_BOOL:
+            col = psVectorAlloc(table->n, PS_TYPE_BOOL);
+            for (row = 0; row < table->n; row++) {
+                col->data.S8[row] = psMetadataLookupBool(NULL,
+                                    table->data[row],
+                                    item->name);
+            }
+            fits_write_col_log(fits->fd,
+                               n+1, // column number
+                               1, // firstrow
+                               1, // firstelem
+                               table->n, // nelements
+                               (char*)col->data.S8,
+                               &status);
+            break;
+
+        case PS_DATA_STRING:
+            colArray = psArrayAlloc(table->n);
+            for (row = 0; row < table->n; row++) {
+                colArray->data[row] = psMemIncrRefCounter(
+                                          psMetadataLookupStr(NULL,
+                                                              table->data[row],
+                                                              item->name));
+            }
+            fits_write_col_str(fits->fd,
+                               n+1,
+                               1,
+                               1,
+                               table->n,
+                               (char**)colArray->data,
+                               &status);
+            psFree(colArray);
+            break;
+
+        default:
+            // XXX: error message?
+            break;
+        }
+        psFree(col);
+        if (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);
+            psFree(columns);
+            return false;
+        }
+
     }
 
Index: /trunk/psLib/test/fits/tst_psFits.c
===================================================================
--- /trunk/psLib/test/fits/tst_psFits.c	(revision 5140)
+++ /trunk/psLib/test/fits/tst_psFits.c	(revision 5141)
@@ -6,6 +6,6 @@
 *  @author Robert DeSonia, MHPCC
 *
-*  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-09-26 22:54:40 $
+*  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-09-27 02:27:32 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -195,5 +195,5 @@
 
         char* str = NULL;
-        psStringAppend(&str,"row=%d",row);
+        psStringAppend(&str,"row=%d",row+1);
         psMetadataAdd(header,PS_LIST_TAIL, "MYSTR",
                       PS_DATA_STRING,
