Index: trunk/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/avextract.c	(revision 14191)
+++ trunk/Ohana/src/opihi/dvo/avextract.c	(revision 14287)
@@ -3,9 +3,10 @@
 int avextract (int argc, char **argv) {
   
-  int i, j, n, m, Npts, NPTS, last, Nfields, Nreturn, Ncstack, Nstack;
-  int Nsecfilt, mode;
+  int i, j, n, m, N, Npts, NPTS, last, Nfields, Nreturn, Ncstack, Nstack;
+  int Nsecfilt, mode, VERBOSE;
   char *RegionName, *RegionList, *p;
   char **cstack, name[1024];
   float *values;
+  void *Signal;
 
   Catalog catalog;
@@ -24,4 +25,10 @@
   fields = NULL;
   stack = NULL;
+
+  VERBOSE = FALSE;
+  if ((N = get_argument (argc, argv, "-v"))) {
+    remove_argument (N, &argc, argv);
+    VERBOSE = TRUE;
+  }
 
   dvo_catalog_init (&catalog, TRUE);
@@ -69,6 +76,8 @@
   NPTS = 1;
 
-  // XXX need to add interrupt test to this loop
-  for (i = 0; i < skylist[0].Nregions; i++) {
+  // grab data from all selected sky regions
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+  for (i = 0; (i < skylist[0].Nregions) && !interrupt; i++) {
     /* lock, load, unlock catalog */
     catalog.filename = skylist[0].filename[i];
@@ -76,12 +85,14 @@
     catalog.Nsecfilt = 0;
 
+    if (VERBOSE) gprint (GP_ERR, "trying %s (%d of %d)\n", catalog.filename, i, skylist[0].Nregions);
+      
     // an error exit status here is a significant error
     if (!dvo_catalog_open (&catalog, NULL, FALSE, "r")) {
-      fprintf (stderr, "ERROR: failure to open catalog file %s\n", catalog.filename);
+      gprint (GP_ERR, "ERROR: failure to open catalog file %s\n", catalog.filename);
       exit (2);
     }
     dvo_catalog_unlock (&catalog);
 
-    for (j = 0; j < catalog.Naverage; j++) {
+    for (j = 0; (j < catalog.Naverage) && !interrupt; j++) {
       m = catalog.average[j].offset;
       // extract the relevant values
@@ -105,4 +116,6 @@
     dvo_catalog_free (&catalog);
   }
+  signal (SIGINT, Signal);
+  interrupt = FALSE;
   for (n = 0; n < Nreturn; n++) {
     vec[n][0].Nelements = Npts;
