Index: /trunk/Ohana/src/opihi/cmd.data/read_vectors.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 17041)
+++ /trunk/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 17042)
@@ -148,4 +148,11 @@
 }
 
+# define ESCAPE(MSG) \
+  gprint (GP_ERR, "%s\n", MSG); \
+  if (CCDKeyword != NULL) free (CCDKeyword); \
+  gfits_free_table  (&table); \
+  gfits_free_header (&header); \
+  return (FALSE); 
+
 int read_table_vectors (int argc, char **argv, char *extname) {
 
@@ -172,11 +179,7 @@
   }
 
-  if (argc < 2) {
-    gprint (GP_ERR, "USAGE: read -fits extension [-extnum] [-keyword key] name name ...\n");
-    gprint (GP_ERR, "  ('extension' may be a name or number)\n");
-    goto escape;
-  }
-
-  if (f == (FILE *) NULL) goto escape;
+  if (argc < 2) ESCAPE ("USAGE: read -fits extension [-extnum] [-keyword key] name name ...");
+
+  if (f == NULL) ESCAPE ("file not found");
   fseek (f, 0, SEEK_SET);
   table.header = &header;
@@ -186,5 +189,5 @@
     // first extension is PHU, cannot be a table. 
     // Nextend counts from 0 for first extension
-    if (!gfits_load_header (f, &header)) goto escape;
+    if (!gfits_load_header (f, &header)) ESCAPE ("error reading primary header for file");
     Nbytes = gfits_data_size (&header);
     fseek (f, Nbytes, SEEK_CUR);
@@ -192,5 +195,5 @@
 
     for (i = 0; i < Nextend; i++) {
-      if (!gfits_load_header (f, &header)) goto escape;
+      if (!gfits_load_header (f, &header)) ESCAPE ("extension not found");
       Nbytes = gfits_data_size (&header);
       /* skip the prior data buffers */
@@ -198,6 +201,6 @@
       gfits_free_header (&header);
     }
-    if (!gfits_load_header (f, &header)) goto escape;
-    if (!gfits_fread_ftable_data (f, &table)) goto escape;
+    if (!gfits_load_header (f, &header)) ESCAPE ("error reading header for extension");
+    if (!gfits_fread_ftable_data (f, &table)) ESCAPE ("error reading table for extension");
 
   } else {
@@ -210,5 +213,5 @@
 
     while (1) {
-      if (!gfits_load_header (f, &header)) goto escape;
+      if (!gfits_load_header (f, &header)) ESCAPE ("extensio not found in file");
       Nbytes = gfits_data_size (&header);
 
@@ -223,5 +226,5 @@
 	continue;
       }
-      if (!gfits_fread_ftable_data (f, &table)) goto escape;
+      if (!gfits_fread_ftable_data (f, &table)) ESCAPE ("error reading table for extension");
       break;
     }
@@ -232,6 +235,5 @@
   gfits_scan (&header, "XTENSION", "%s", 1, type);
   if (strcmp (type, "BINTABLE") && strcmp (type, "TABLE")) {
-    gprint (GP_ERR, "specified extension (%s) is not a table\n", extname);
-    goto escape;
+    ESCAPE ("specified extension is not a table\n");
   }
   Binary = !strcmp (type, "BINTABLE");
@@ -251,11 +253,11 @@
     Nval = 0;
     if (Binary) {
-      if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) goto escape;
-      if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) goto escape;
+      if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) ESCAPE ("requested field not found");
+      if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) ESCAPE ("error reading data from specified field");
     } else {
-      if (!gfits_get_table_column_type (&header, argv[i], type)) goto escape;
-      if (!gfits_get_table_column (&header, &table, argv[i], &data)) goto escape;
-    }
-    if (Nval == 0) goto escape;
+      if (!gfits_get_table_column_type (&header, argv[i], type)) ESCAPE ("requested field not found");
+      if (!gfits_get_table_column (&header, &table, argv[i], &data)) ESCAPE ("error reading data from specified field");
+    }
+    if (Nval == 0) ESCAPE ("no data for field in table");
 
     ALLOCATE (vec, Vector *, Nval);
@@ -265,5 +267,5 @@
       else
 	sprintf (name, "%s:%d", argv[i], j);
-      if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape;
+      if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name");
       REALLOCATE (vec[j][0].elements, float, MAX (Ny,1));
       vec[j][0].Nelements = Ny;
@@ -317,9 +319,3 @@
   gfits_free_header (&header);
   return (TRUE);
-
-escape:
-  if (CCDKeyword != NULL) free (CCDKeyword);
-  gfits_free_table  (&table);
-  gfits_free_header (&header);
-  return (FALSE);
 }
