Index: trunk/Ohana/src/tools/src/ftable.c
===================================================================
--- trunk/Ohana/src/tools/src/ftable.c	(revision 41483)
+++ trunk/Ohana/src/tools/src/ftable.c	(revision 41484)
@@ -14,7 +14,7 @@
 int main (int argc, char **argv) {
 
-  off_t Nx, Ny, Nbytes, Nread, Row;
-  int N, Nextend, Column, ListExtname, Layout;
-  char *Extname, *Colname, ttype[80];
+  off_t Nx, Ny, Nbytes, Nread;
+  int N;
+  char ttype[80];
   FTable table;
   Header header;
@@ -33,5 +33,5 @@
   }
 
-  Nextend = 0;
+  int Nextend = 0;
   if ((N = get_argument (argc, argv, "-x"))) {
     remove_argument (N, &argc, argv);
@@ -40,5 +40,5 @@
   }
 
-  Extname = (char *) NULL;
+  char *Extname = NULL;
   if ((N = get_argument (argc, argv, "-n"))) {
     if (Nextend) usage ();
@@ -48,19 +48,33 @@
   }
 
-  Row = 0;
+  off_t Row = -1;
   if ((N = get_argument (argc, argv, "-row"))) {
     remove_argument (N, &argc, argv);
-    Row = atof (argv[N]);
-    remove_argument (N, &argc, argv);
-  }
-
-  Column = 0;
+    Row = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  off_t RowStart = 0;
+  if ((N = get_argument (argc, argv, "-row-start"))) {
+    remove_argument (N, &argc, argv);
+    RowStart = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  off_t RowStop = 20;
+  if ((N = get_argument (argc, argv, "-row-stop"))) {
+    remove_argument (N, &argc, argv);
+    RowStop = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  int Column = 0;
   if ((N = get_argument (argc, argv, "-ncolumn"))) {
     remove_argument (N, &argc, argv);
-    Column = atof (argv[N]);
-    remove_argument (N, &argc, argv);
-  }
-
-  Colname = 0;
+    Column = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  char *Colname = 0;
   if ((N = get_argument (argc, argv, "-column"))) {
     if (Column) usage ();
@@ -70,5 +84,5 @@
   }
 
-  ListExtname = FALSE;
+  int ListExtname = FALSE;
   if ((N = get_argument (argc, argv, "-list"))) {
     remove_argument (N, &argc, argv);
@@ -76,5 +90,5 @@
   }
 
-  Layout = FALSE;
+  int Layout = FALSE;
   if ((N = get_argument (argc, argv, "-layout"))) {
     remove_argument (N, &argc, argv);
@@ -113,5 +127,5 @@
 
   /* print a row */
-  if (Row) {
+  if (Row > -1) {
     if (!print_table_rows (&table, Row, 1)) {
       fprintf (stderr, "failed to print row\n");
@@ -120,8 +134,9 @@
   }
 
-  /* print complete table */
-  if (!print_table_rows (&table, 0, Ny)) {
+  /* print rows of table */
+  if (!print_table_rows (&table, RowStart, RowStop)) {
     fprintf (stderr, "failed to print table\n");
   }    
+  fprintf (stdout, "# %d of %d total rows (%d to %d)\n", (int) (RowStop - RowStart), (int) Ny, (int) RowStart, (int) RowStop);
   exit (0);
 }
@@ -198,4 +213,5 @@
 	if (!strcmp (types[i], "char")) {
 	  memcpy (line, &row[byte], Nvals[i]*Nbyte[i]);
+	  line[Nvals[i]*Nbyte[i]] = 0;
 	  fprintf (stdout, "%s ", line);
 	  found = TRUE;
@@ -264,12 +280,14 @@
 void usage () {
     fprintf (stderr, "USAGE: [-h] [-N N] (table.fits)\n");
-    fprintf (stderr, " -x N:       operate on extension N (0 is default)\n");
-    fprintf (stderr, " -n EXTNAME: operate on named extension (incompatible with -x)\n");
-    fprintf (stderr, " -row N:     print row number N\n");
-    fprintf (stderr, " -column n:  print column named n\n");
-    fprintf (stderr, " -ncolumn N: print column number N\n");
-    fprintf (stderr, " -list:      print extension names\n");
-    fprintf (stderr, " -layout:    describe extension\n");
-    fprintf (stderr, " -uncompress: uncompress file (requires output argument)\n");
+    fprintf (stderr, " -x N:         operate on extension N (0 is default)\n");
+    fprintf (stderr, " -n EXTNAME:   operate on named extension (incompatible with -x)\n");
+    fprintf (stderr, " -row N:       print row number N\n");
+    fprintf (stderr, " -row-start N: start at row number N\n");
+    fprintf (stderr, " -row-stop N:  stop at row number N\n");
+    fprintf (stderr, " -column n:    print column named n\n");
+    fprintf (stderr, " -ncolumn N:   print column number N\n");
+    fprintf (stderr, " -list:        print extension names\n");
+    fprintf (stderr, " -layout:      describe extension\n");
+    fprintf (stderr, " -uncompress:  uncompress file (requires output argument)\n");
     exit (2);
 }
