Index: trunk/Ohana/src/libautocode/def/autocode.c
===================================================================
--- trunk/Ohana/src/libautocode/def/autocode.c	(revision 15038)
+++ trunk/Ohana/src/libautocode/def/autocode.c	(revision 24399)
@@ -7,7 +7,6 @@
 
   if (size != $SIZE) { 
-    fprintf (stderr, "ERROR: mismatch in data types $STRUCT: %d vs %d\n",
-	     size, $SIZE);
-    exit (1);
+    fprintf (stderr, "WARNING: mismatch in data types $STRUCT: %d vs %d\n", size, $SIZE);
+    return (FALSE);
   }
 
@@ -26,14 +25,50 @@
 } 
 
+$STRUCT *gfits_downsize_and_convert_$STRUCT ($STRUCT *data, int size, int nitems) {
+
+  int i;
+  unsigned char *byte, tmp;
+  $STRUCT *output;
+
+  if ($SIZE > size) { 
+    fprintf (stderr, "ERROR: uncorrectable mismatch in data types $STRUCT: %d vs %d\n", size, $SIZE);
+    exit (1);
+  }
+
+  // allocate a new array 
+  ALLOCATE (output, $STRUCT, nitems);
+  for (i = 0; i < nitems; i++) {
+    memcpy (&output[i], &data[i], $SIZE);
+  }
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+# ifdef BYTE_SWAP
+  byte = (unsigned char *) output;
+  for (i = 0; i < nitems; i++, byte += size) {
+    /** BYTE SWAP **/
+  }
+# endif  
+
+  return (output);
+} 
+
 /*** add test of EXTNAME and header-defined columns? ***/
 /* return internal structure representation */
 $STRUCT *gfits_table_get_$STRUCT (FTable *ftable, int *Ndata, int *swapped) {
 
-  $STRUCT *data;
+  $STRUCT *data, *output;
 
   *Ndata = ftable[0].header[0].Naxis[1];
   data = ($STRUCT *) ftable[0].buffer;
   if ((swapped == NULL) || (*swapped == FALSE)) {
-    gfits_convert_$STRUCT (data, sizeof ($STRUCT), *Ndata);
+    if (!gfits_convert_$STRUCT (data, sizeof ($STRUCT), *Ndata)) {
+      output = gfits_downsize_and_convert_$STRUCT (data, sizeof ($STRUCT), *Ndata);
+      free (ftable[0].buffer);
+      ftable[0].buffer = output;
+      // XXX do I need to change NX?
+    }
     gfits_table_scale_data (ftable);
     if (swapped != NULL) *swapped = TRUE;
