Index: /trunk/Ohana/src/libfits/header/F_init_H.c
===================================================================
--- /trunk/Ohana/src/libfits/header/F_init_H.c	(revision 35755)
+++ /trunk/Ohana/src/libfits/header/F_init_H.c	(revision 35756)
@@ -18,6 +18,6 @@
   header[0].Naxes  = 0;
   header[0].buffer = NULL;
-  for (i = 0; i < FT_MAX_NAXES; i++)
-    header[0].Naxis[i] = 0;
+  for (i = 0; i < FT_MAX_NAXES; i++) header[0].Naxis[i] = 0;
+  header[0].datasize = 0;
 
   return (TRUE);
Index: /trunk/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- /trunk/Ohana/src/libfits/include/gfitsio.h	(revision 35755)
+++ /trunk/Ohana/src/libfits/include/gfitsio.h	(revision 35756)
@@ -26,4 +26,7 @@
 # define FT_LINE_LENGTH          80  /* FITS header line length */
 # define FT_RECORD_SIZE        2880  /* FITS block size */
+
+# define FT_BZERO_INT16 1.0*0x8000	  
+# define FT_BZERO_INT32 1.0*0x80000000
 
 /* this structure defines the buffer which contains a header
@@ -137,4 +140,5 @@
 /******************************* Matrix functions *************/
 
+int     gfits_init_matrix              PROTO((Matrix *matrix));
 void   	gfits_add_matrix_value         PROTO((Matrix *matrix, off_t x, off_t y, double value)); 
 int    	gfits_convert_format           PROTO((Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int inBlank, int outUnsign));
@@ -165,4 +169,7 @@
 
 /******************************* Table functions *************/
+
+int     gfits_init_table  	       PROTO((FTable *table));
+int     gfits_init_vtable 	       PROTO((VTable *table));
 
 char   *gfits_table_print              PROTO((FTable *ftable,...));
Index: /trunk/Ohana/src/libfits/matrix/F_create_M.c
===================================================================
--- /trunk/Ohana/src/libfits/matrix/F_create_M.c	(revision 35755)
+++ /trunk/Ohana/src/libfits/matrix/F_create_M.c	(revision 35756)
@@ -25,3 +25,21 @@
 }
 
+/*********************** fits create matrix *******************************/
+int gfits_init_matrix (Matrix *matrix) {
+
+  int i;
+
+  matrix[0].bitpix = 8;
+  matrix[0].unsign = FALSE;
+  matrix[0].bscale = 1.0;
+  matrix[0].bzero  = 0.0;
+  matrix[0].Naxes  = 0;
+  for (i = 0; i < FT_MAX_NAXES; i++) matrix[0].Naxis[i] = 0;
+
+  matrix[0].buffer = NULL;
+  matrix[0].datasize = 0;
+  return (TRUE);
+
+}
+
 // XXX free buffer if non-null: need to double check for existing frees
Index: /trunk/Ohana/src/libfits/table/F_create_T.c
===================================================================
--- /trunk/Ohana/src/libfits/table/F_create_T.c	(revision 35755)
+++ /trunk/Ohana/src/libfits/table/F_create_T.c	(revision 35756)
@@ -1,4 +1,26 @@
 # include <ohana.h>
 # include <gfitsio.h>
+
+/*********************** fits init table *******************************/
+int gfits_init_table (FTable *table) {
+  table[0].header = NULL;
+  table[0].buffer = NULL;
+  table[0].datasize = 0;
+  table[0].validsize = 0;
+  return (TRUE);
+
+}
+
+/*********************** fits init table *******************************/
+int gfits_init_vtable (VTable *table) {
+
+  table[0].header   = NULL;
+  table[0].buffer   = NULL;
+  table[0].row      = NULL;
+  table[0].Nrow     = 0;
+  table[0].datasize = 0;
+  table[0].pad      = 0;
+  return (TRUE);
+}
 
 /*********************** fits create table *******************************/
Index: /trunk/Ohana/src/libfits/table/F_define_column.c
===================================================================
--- /trunk/Ohana/src/libfits/table/F_define_column.c	(revision 35755)
+++ /trunk/Ohana/src/libfits/table/F_define_column.c	(revision 35756)
@@ -1,4 +1,48 @@
 # include <ohana.h>
 # include <gfitsio.h>
+
+# if (0)
+/*** special version of this function to define unsigned int columns (special values for BZERO, BSCALE) ********************/
+int gfits_define_bintable_column_unsigned_int (Header *header, char *format, char *label, char *comment, char *unit, int inttype) {
+
+  assert (label);
+  assert (format);
+
+  off_t Naxis1;
+  int Nfields, Nbytes, Nval;
+  char type[16], field[16];
+  
+  if (!gfits_bintable_format (format, type, &Nval, &Nbytes)) return (FALSE);
+  
+  Nfields = 0;
+  gfits_scan (header, "TFIELDS", "%d", 1, &Nfields);
+  gfits_scan (header, "NAXIS1",  OFF_T_FMT, 1,  &Naxis1);
+  Nfields ++;
+  Naxis1 += Nbytes*Nval;
+
+  sprintf (field, "TTYPE%d", Nfields);
+  gfits_modify (header, field, "%s", 1, label);
+  gfits_modify_alt (header, field, "%C", 1, comment);
+  sprintf (field, "TUNIT%d", Nfields);
+  gfits_modify (header, field, "%s", 1, unit);
+  sprintf (field, "TFORM%d", Nfields);
+  gfits_modify (header, field, "%s", 1, format);
+
+  // add scaling parameters unless they amount to a noop
+  if ((bscale != 1.0) || (bzero != 0.0)) {
+      sprintf (field, "TSCAL%d", Nfields);
+      gfits_modify (header, field, "%lf", 1, bscale);
+      sprintf (field, "TZERO%d", Nfields);
+      gfits_modify (header, field, "%lf", 1, bzero);
+  }
+
+  /* update TFIELDS & NAXIS1 */
+  gfits_modify (header, "TFIELDS", "%d", 1, Nfields);
+  gfits_modify (header, "NAXIS1",  OFF_T_FMT, 1,  Naxis1);
+  header[0].Naxis[0] = Naxis1;
+
+  return (TRUE);
+}
+# endif
 
 /***********************/
