Index: /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/dvo_host_utils.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/dvo_host_utils.c	(revision 34876)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/dvo_host_utils.c	(revision 34877)
@@ -295,2 +295,55 @@
   return TRUE;
 }
+
+// re-gather the remote results files: this can be used in case one of the clients failed,
+// and has since been re-run
+int HostTableGetResults (char *uniquer, int VERBOSE) {
+
+  int i;
+
+  // load the list of hosts
+  SkyTable *sky = GetSkyTable();
+  if (!sky) {
+    gprint (GP_ERR, "failed to load sky table for database\n");
+    return FALSE;
+  }
+
+  char *CATDIR = GetCATDIR ();
+  if (!CATDIR) {
+    gprint (GP_ERR, "failed to get CATDIR for database\n");
+    return FALSE;
+  }
+
+  HostTable *table = HostTableLoad (CATDIR, sky->hosts);
+  if (!table) {
+    gprint (GP_ERR, "ERROR: failure reading Host Table %s for database %s\n", sky->hosts, CATDIR);
+    return FALSE;
+  }    
+
+  // create the result file list
+  char name[256];
+  snprintf (name, 256, "RESULT_FILE:n");
+  set_int_variable (name, table->Nhosts);
+  snprintf (name, 256, "RESULT_DATA:n");
+  set_int_variable (name, table->Nhosts);
+  snprintf (name, 256, "RESULT_STATUS:n");
+  set_int_variable (name, table->Nhosts);
+
+  // load fields from file
+  for (i = 0; i < table->Nhosts; i++) {
+
+    snprintf (name, 256, "RESULT_FILE:%d", i);
+    set_str_variable (name, table->hosts[i].results);
+
+    // DATA : 0 (unread), 1 (read)
+    snprintf (name, 256, "RESULT_DATA:%d", i);
+    set_int_variable (name, 0);
+
+    // STATUS : 0 (normal exit), -1 (crash), N (failure exit status)
+    snprintf (name, 256, "RESULT_STATUS:%d", i);
+    set_int_variable (name, table->hosts[i].status);
+  }
+
+  free (table);
+  return TRUE;
+}
Index: /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/remote.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/remote.c	(revision 34876)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/remote.c	(revision 34877)
@@ -26,4 +26,5 @@
     gprint (GP_ERR, "  -v : verbose mode:\n");
     gprint (GP_ERR, "OR:    remote -reload (uniquer)\n");
+    gprint (GP_ERR, "OR:    remote -get-results (uniquer)\n");
     return FALSE;
   }
@@ -48,4 +49,16 @@
   }
 
+  if ((N = get_argument (argc, argv, "-get-results"))) {
+    remove_argument (N, &argc, argv);
+    if (argc != 2) {
+      gprint (GP_ERR, "USAGE: remote -get-results (uniquer)\n");
+      gprint (GP_ERR, " (uniquer) is the element in the middle of the results file\n");
+      gprint (GP_ERR, " eg: dvo.results.XXXXX.YYYYY.fits\n");
+      return FALSE;
+    }
+    int status = HostTableGetResults (argv[1], VERBOSE);
+    return status;
+  }
+
   // strip of the 'remote' and send the remaining arguments to the remote machine
   int status = HostTableParallelOps (argc - 1, &argv[1], NULL, ReadVectors, 0, VERBOSE);
Index: /branches/eam_branches/ipp-20121219/Ohana/src/opihi/include/dvoshell.h
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/opihi/include/dvoshell.h	(revision 34876)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/opihi/include/dvoshell.h	(revision 34877)
@@ -102,4 +102,5 @@
 int          HostTableParallelOps   PROTO((int argc, char **argv, char *ResultFile, int ReadVectors, int Nelements, int VERBOSE));
 int          HostTableReloadResults PROTO((char *uniquer, int VERBOSE));
+int          HostTableGetResults    PROTO((char *uniquer, int VERBOSE));
 
 # endif // DVOSHELL_H
