Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/Makefile
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/Makefile	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/Makefile	(revision 34686)
@@ -1,3 +1,3 @@
-default: delstar
+default: delstar delstar_client
 help:
 	@echo "make options: addstar (default)"
@@ -18,5 +18,7 @@
 
 delstar: $(BIN)/delstar.$(ARCH)
-install: $(DESTBIN)/delstar
+delstar_client: $(BIN)/delstar_client.$(ARCH)
+
+install: $(DESTBIN)/delstar $(DESTBIN)/delstar_client
 
 DELSTAR = \
@@ -27,4 +29,5 @@
 $(SRC)/delete_imagename.$(ARCH).o \
 $(SRC)/delete_imagefile.$(ARCH).o \
+$(SRC)/delete_photcodes.$(ARCH).o \
 $(SRC)/delete_times.$(ARCH).o 	  \
 $(SRC)/gimages.$(ARCH).o   	  \
@@ -33,4 +36,12 @@
 $(SRC)/parse_time.$(ARCH).o       \
 $(SRC)/check_permissions.$(ARCH).o \
+$(SRC)/Shutdown.$(ARCH).o          
+
+DELSTAR_CLIENT = \
+$(SRC)/delstar_client.$(ARCH).o   \
+$(SRC)/SetSignals.$(ARCH).o       \
+$(SRC)/ConfigInit.$(ARCH).o 	  \
+$(SRC)/args.$(ARCH).o	          \
+$(SRC)/delete_photcodes.$(ARCH).o \
 $(SRC)/Shutdown.$(ARCH).o          
 
@@ -42,2 +53,5 @@
 $(DELSTAR): $(INC)/delstar.h
 $(BIN)/delstar.$(ARCH) : $(DELSTAR)
+
+$(DELSTAR_CLIENT): $(INC)/delstar.h
+$(BIN)/delstar_client.$(ARCH) : $(DELSTAR_CLIENT)
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/include/delstar.h
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/include/delstar.h	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/include/delstar.h	(revision 34686)
@@ -19,4 +19,7 @@
 char   CATMODE[16];    /* raw, mef, split, mysql */
 char   CATFORMAT[16];  /* internal, elixir, loneos, panstarrs */
+
+char  *IMAGENAME;
+
 double NSIGMA;
 double ALPHA;
@@ -27,12 +30,23 @@
 int    SKY_DEPTH;  /** XXX EAM : depth of catalog tables, fix usage */
 
+int    PARALLEL;
+int    PARALLEL_MANUAL;
+int    PARALLEL_SERIAL;
+
+int          HOST_ID;
+char        *HOSTDIR;
+
 time_t    START;
 time_t    END;
 PhotCode *PHOTCODE;
 
+char *PHOTCODE_LIST;
+
 int    MODE;
-enum {MODE_NONE, MODE_IMAGENAME, MODE_IMAGEFILE, MODE_TIME, MODE_ORPHAN, MODE_MISSED};
+enum {MODE_NONE, MODE_IMAGENAME, MODE_IMAGEFILE, MODE_TIME, MODE_ORPHAN, MODE_MISSED, MODE_PHOTCODES};
 
 char DateKeyword[64], DateMode[64], UTKeyword[64], MJDKeyword[64], JDKeyword[64];
+
+SkyRegion UserPatch;
 
 /*** delstar prototypes ***/
@@ -46,8 +60,8 @@
 int        Shutdown               PROTO((char *format, ...)) OHANA_FORMAT(printf, 1, 2);
 void       TrapSignal             PROTO((int sig));
-int        args                   PROTO((int *argc, char **argv));
+int        args                   PROTO((int argc, char **argv));
 void       check_permissions      PROTO((char *basefile));
-void       delete_imagefile       PROTO((FITS_DB *db, char *filename));
-void       delete_imagename       PROTO((FITS_DB *db, char *name));
+void       delete_imagefile       PROTO((FITS_DB *db));
+void       delete_imagename       PROTO((FITS_DB *db));
 void       delete_times           PROTO((FITS_DB *db));
 int        edge_check             PROTO((double *x1, double *y1, double *x2, double *y2));
@@ -72,2 +86,10 @@
 
 void set_db (FITS_DB *in);
+
+int args_client (int argc, char **argv);
+
+void SortAveMeasMatch (off_t *MEAS, off_t *AVE, off_t N);
+
+int delete_photcodes (SkyList *skylist, int hostID, char *hostpath);
+int delete_photcodes_parallel (SkyList *sky);
+int delete_photcodes_catalog (Catalog *catalog, PhotCode **photcodes, int Nphotcodes);
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/args.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/args.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/args.c	(revision 34686)
@@ -4,6 +4,6 @@
 
   fprintf (stderr, "USAGE:\n");
-  fprintf (stderr, "  delstar (filename)\n");
-  fprintf (stderr, "  delstar -name (filename)\n");
+  fprintf (stderr, "  delstar -file (filename)\n");
+  fprintf (stderr, "  delstar -name (imagename)\n");
   fprintf (stderr, "  delstar -time (start) (stop/range)\n");
   fprintf (stderr, "  delstar -orphan (region)\n");
@@ -22,5 +22,10 @@
 }
 
-int args (int *argc, char **argv) {
+void delstar_client_usage () {
+  fprintf (stderr, "USAGE: delstar_client [options]\n");
+  exit (2);
+}
+
+int args (int argc, char **argv) {
   
   int N;
@@ -28,47 +33,100 @@
 
   /* check for help request */
-  if (get_argument (*argc, argv, "-help") ||
-      get_argument (*argc, argv, "-h")) {
+  if (get_argument (argc, argv, "-help") ||
+      get_argument (argc, argv, "-h")) {
     help ();
   }
 
   VERBOSE = FALSE;
-  if ((N = get_argument (*argc, argv, "-v"))) {
+  if ((N = get_argument (argc, argv, "-v"))) {
     VERBOSE = TRUE;
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
   }
 
   // region of interest
-
-  MODE = MODE_IMAGEFILE;
-  if ((N = get_argument (*argc, argv, "-name"))) {
-    if (MODE != MODE_IMAGEFILE) usage();
+  UserPatch.Rmin = 0;
+  UserPatch.Rmax = 360;
+  UserPatch.Dmin = -90;
+  UserPatch.Dmax = +90;
+  if ((N = get_argument (argc, argv, "-region"))) {
+    remove_argument (N, &argc, argv);
+    UserPatch.Rmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Rmax = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmax = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  // XXX for the moment, make this selection manual.  it needs to be automatic 
+  // based on the state of the SkyTable
+  PARALLEL = FALSE;
+  if ((N = get_argument (argc, argv, "-parallel"))) {
+    PARALLEL = TRUE;
+    remove_argument (N, &argc, argv);
+  }
+  // this is a test mode : rather than launching the remote jobs and waiting for completion,
+  // delstar will simply list the remote command and wait for the user to signal completion
+  PARALLEL_MANUAL = FALSE;
+  if ((N = get_argument (argc, argv, "-parallel-manual"))) {
+    PARALLEL = TRUE; // -parallel-manual implies -parallel
+    PARALLEL_MANUAL = TRUE;
+    remove_argument (N, &argc, argv);
+  }
+  // this is a test mode : rather than launching the delstar_client jobs remotely, they are 
+  // run in serial via 'system'
+  PARALLEL_SERIAL = FALSE;
+  if ((N = get_argument (argc, argv, "-parallel-serial"))) {
+    if (PARALLEL_MANUAL) {
+      fprintf (stderr, "ERROR: cannot mix -parallel-manual and -parallel-serial\n");
+      exit (1);
+    }
+    PARALLEL = TRUE; // -parallel-serial implies -parallel
+    PARALLEL_SERIAL = TRUE;
+    remove_argument (N, &argc, argv);
+  }
+
+  IMAGENAME = NULL;
+  MODE = MODE_NONE;
+  if ((N = get_argument (argc, argv, "-name"))) {
+    if (MODE != MODE_NONE) usage();
     MODE = MODE_IMAGENAME;
-    remove_argument (N, argc, argv);
-  }
-  if ((N = get_argument (*argc, argv, "-orphan"))) {
-    if (MODE != MODE_IMAGEFILE) usage();
+    remove_argument (N, &argc, argv);
+    IMAGENAME = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-file"))) {
+    if (MODE != MODE_NONE) usage();
+    MODE = MODE_IMAGENAME;
+    remove_argument (N, &argc, argv);
+    IMAGENAME = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-orphan"))) {
+    if (MODE != MODE_NONE) usage();
     MODE = MODE_ORPHAN;
-    remove_argument (N, argc, argv);
-  }
-  if ((N = get_argument (*argc, argv, "-missed"))) {
-    if (MODE != MODE_IMAGEFILE) usage();
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-missed"))) {
+    if (MODE != MODE_NONE) usage();
     MODE = MODE_MISSED;
-    remove_argument (N, argc, argv);
-  }
-  if ((N = get_argument (*argc, argv, "-photcodes"))) {
-    if (MODE != MODE_IMAGEFILE) usage();
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-photcodes"))) {
+    if (MODE != MODE_NONE) usage();
     MODE = MODE_PHOTCODES;
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
     PHOTCODE_LIST = strcreate(argv[N]);
-    remove_argument (N, argc, argv);
-  }
-  if ((N = get_argument (*argc, argv, "-time"))) {
-    if (MODE != MODE_IMAGEFILE) usage();
+    remove_argument (N, &argc, argv);
+  }
+  if ((N = get_argument (argc, argv, "-time"))) {
+    if (MODE != MODE_NONE) usage();
     MODE = MODE_TIME;
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
 
     if (!ohana_str_to_time (argv[N], &START)) usage ();
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
 
     /* interpret second value */
@@ -80,5 +138,5 @@
 	END = START + trange;
       }
-      remove_argument (N, argc, argv);
+      remove_argument (N, &argc, argv);
       goto goodtime;
     }
@@ -90,5 +148,5 @@
 	END   = tmp;
       }
-      remove_argument (N, argc, argv);
+      remove_argument (N, &argc, argv);
       goto goodtime;
     }
@@ -100,42 +158,78 @@
   /* restrict to a single photcode (not compatible with -image) */
   PHOTCODE = NULL;
-  if ((N = get_argument (*argc, argv, "-photcode"))) {
-    remove_argument (N, argc, argv);
+  if ((N = get_argument (argc, argv, "-photcode"))) {
+    remove_argument (N, &argc, argv);
     PHOTCODE = GetPhotcodebyName (argv[N]);
-    remove_argument (N, argc, argv);
-  }
-
-  if ((MODE == MODE_TIME) && (*argc != 1)) usage ();
-  if ((MODE != MODE_TIME) && (*argc != 2)) usage ();
+    remove_argument (N, &argc, argv);
+  }
+
+  if (argc != 1) usage ();
   return (TRUE);
 }
 
-int args_client (int *argc, char **argv) {
+int args_client (int argc, char **argv) {
   
   int N;
-  double trange;
+
+  // by definition, the client is not parallel 
+  PARALLEL = FALSE;
+  PARALLEL_MANUAL = FALSE;
+  PARALLEL_SERIAL = FALSE;
+
+  HOST_ID = 0;
+  if ((N = get_argument (argc, argv, "-hostID"))) {
+    remove_argument (N, &argc, argv);
+    HOST_ID = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if (!HOST_ID) delstar_client_usage();
+
+  HOSTDIR = NULL;
+  if ((N = get_argument (argc, argv, "-hostdir"))) {
+    remove_argument (N, &argc, argv);
+    HOSTDIR = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if (!HOSTDIR) delstar_client_usage();
 
   /* check for help request */
-  if (get_argument (*argc, argv, "-help") ||
-      get_argument (*argc, argv, "-h")) {
+  if (get_argument (argc, argv, "-help") ||
+      get_argument (argc, argv, "-h")) {
     help ();
   }
 
   VERBOSE = FALSE;
-  if ((N = get_argument (*argc, argv, "-v"))) {
+  if ((N = get_argument (argc, argv, "-v"))) {
     VERBOSE = TRUE;
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
+  }
+
+  /* specify portion of the sky */
+  UserPatch.Rmin = 0;
+  UserPatch.Rmax = 360;
+  UserPatch.Dmin = -90;
+  UserPatch.Dmax = +90;
+  if ((N = get_argument (argc, argv, "-region"))) {
+    remove_argument (N, &argc, argv);
+    UserPatch.Rmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Rmax = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmin = atof (argv[N]);
+    remove_argument (N, &argc, argv);
+    UserPatch.Dmax = atof (argv[N]);
+    remove_argument (N, &argc, argv);
   }
 
   MODE = MODE_NONE;
-  if ((N = get_argument (*argc, argv, "-photcodes"))) {
-    if (MODE != MODE_NONE) usage();
+  if ((N = get_argument (argc, argv, "-photcodes"))) {
+    if (MODE != MODE_NONE) delstar_client_usage();
     MODE = MODE_PHOTCODES;
-    remove_argument (N, argc, argv);
+    remove_argument (N, &argc, argv);
     PHOTCODE_LIST = strcreate(argv[N]);
-    remove_argument (N, argc, argv);
-  }
-
-  if (MODE == MODE_NONE) usage ();
+    remove_argument (N, &argc, argv);
+  }
+
+  if (MODE == MODE_NONE) delstar_client_usage ();
   return (TRUE);
 }
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagefile.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagefile.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagefile.c	(revision 34686)
@@ -1,5 +1,5 @@
 # include "delstar.h"
 
-void delete_imagefile (FITS_DB *db, char *filename) {
+void delete_imagefile (FITS_DB *db) {
 
   off_t i, Nimlist;
@@ -16,5 +16,5 @@
 
   /* load information about file - time/photcode */
-  image = gimages (filename);
+  image = gimages (IMAGENAME);
   
   /* need to define method to get the mosaic (look up from table) */
@@ -54,5 +54,5 @@
   // XXX EAM : load image data above, find mosaic?
   imlist = find_images_data (db, image, &Nimlist);
-  if (!Nimlist) Shutdown ("image %s not found in db", filename);
+  if (!Nimlist) Shutdown ("image %s not found in db", IMAGENAME);
 
   gfits_vtable_from_ftable (&db[0].ftable, &db[0].vtable, imlist, Nimlist);
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagename.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagename.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_imagename.c	(revision 34686)
@@ -1,5 +1,5 @@
 # include "delstar.h"
 
-void delete_imagename (FITS_DB *db, char *name) {
+void delete_imagename (FITS_DB *db) {
 
   off_t i, j, k;
@@ -25,6 +25,6 @@
 
   /* find image in db by name */
-  imlist = find_images_name (db, name, &Nimlist);
-  if (!Nimlist) Shutdown ("image %s not found in db", name);
+  imlist = find_images_name (db, IMAGENAME, &Nimlist);
+  if (!Nimlist) Shutdown ("image %s not found in db", IMAGENAME);
   
   for (k = 0; k < Nimlist; k++) {
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_photcodes.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_photcodes.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delete_photcodes.c	(revision 34686)
@@ -1,4 +1,5 @@
 # include "delstar.h"
 
+# if (0)
 void delete_photcodes (FITS_DB *db, photcodes, Nphotcodes) {
 
@@ -27,12 +28,20 @@
   exit (0);
 }
-
-void delete_photcodes_catalogs (skylist, hostID, photcodesDrop, NphotcodesDrop) {
+# endif
+
+int delete_photcodes (SkyList *skylist, int hostID, char *hostpath) {
+
+  int i;
+  Catalog catalog;
 
   // launch the remote jobs
   if (PARALLEL && !hostID) {
-    int status = delete_photcodes_parallel (skylist, photcodesDrop, NphotcodesDrop);
+    int status = delete_photcodes_parallel (skylist);
     return status;
   }
+
+  // xxx where does this go?
+  int Nphotcodes = 0;
+  PhotCode **photcodes = ParsePhotcodeList (PHOTCODE_LIST, &Nphotcodes, FALSE);
 
   // delete detections from region
@@ -63,5 +72,5 @@
     }
 
-    delete_photcodes_from_catalog (&catalog, photcodes, Nphotcodes);
+    delete_photcodes_catalog (&catalog, photcodes, Nphotcodes);
     dvo_catalog_save (&catalog, VERBOSE);
     dvo_catalog_unlock (&catalog);
@@ -150,11 +159,12 @@
 }
 
-int delete_photcodes_catalog (Catalog *catalog, photcodes, Nphotcodes) {
-
-  off_t i, j, N, currentAve;
-
-  off_t *measureSeq = NULL;
-  off_t *averageSeq = NULL;
-  Measure *measureTMP = NULL;
+int delete_photcodes_catalog (Catalog *catalog, PhotCode **photcodes, int Nphotcodes) {
+
+  off_t i, j, n, m, N, D, currentAve;
+
+  Measure *measureOut = NULL;
+  Average *averageOut = NULL;
+
+  off_t *measureDrop, *measureSeqRaw, *measureSeqOut, *measureRefOut, *measureAveRaw, *averageNmeas, *averageDmeas, *averageSeqOut, *averageRefOut, *measureAveOut;
 
   /* internal counters */
@@ -165,5 +175,5 @@
   Average *average = catalog[0].average;
   
-  if (VERBOSE) fprintf (stderr, "starting with Nave, Nmeas: "OFF_T_FMT" "OFF_T_FMT"\n",  catalog[0].Naverage,  catalog[0]Nmeasure);
+  if (VERBOSE) fprintf (stderr, "starting with Nave, Nmeas: "OFF_T_FMT" "OFF_T_FMT"\n",  catalog[0].Naverage,  catalog[0].Nmeasure);
 
   // we have a table of average objects and an unsorted table of measurements.  each measurement
@@ -179,4 +189,5 @@
   ALLOCATE (measureSeqRaw, off_t, Nmeasure);
   ALLOCATE (measureSeqOut, off_t, Nmeasure);
+  ALLOCATE (measureRefOut, off_t, Nmeasure);
   ALLOCATE (measureAveRaw, off_t, Nmeasure);
   ALLOCATE (averageNmeas,  off_t, Naverage);
@@ -184,5 +195,4 @@
   ALLOCATE (averageSeqOut, off_t, Naverage);
   ALLOCATE (averageRefOut, off_t, Naverage);
-  ALLOCATE (measureAveOut, off_t, NmeasOut);
 
   // mark the measures to be dropped
@@ -190,5 +200,5 @@
     int drop = FALSE;
     for (j = 0; !drop && (j < Nphotcodes); j++) {
-      drop |= (photcodes[j].code == measure[i].photcode);
+      drop |= (photcodes[j][0].code == measure[i].photcode);
     }
     measureDrop[i] = drop;
@@ -214,8 +224,9 @@
   // n = measureSeqOut[i] : measureOut[i] = measure[n]  (i = 0 -- NmeasOut, n = 0 -- Nmeasure)
   // n = measureRefOut[i] : measureOut[n] = measure[i]
+  ALLOCATE (measureAveOut, off_t, NmeasOut);
 
   // count the number of measures for each averef
-  off_t N =  0;
-  off_t D = -1;
+  N =  0;
+  D = -1;
   currentAve = measureAveRaw[0];
   for (i = 0; i < Nmeasure; i++) {
@@ -240,10 +251,10 @@
 
   // generate the new average sequence, skipping entries with no measurements
-  int NaveOut = 0;
+  off_t NaveOut = 0;
   for (i = 0; i < Naverage; i++) {
     if (averageNmeas[i] == 0) continue;
-    averageSeqOut[Nave] = i;
-    averageRefOut[i] = Nave;
-    Nave ++;
+    averageSeqOut[NaveOut] = i;
+    averageRefOut[i] = NaveOut;
+    NaveOut ++;
   }
   // n = averageSeqOut[i] : averageOut[i] = average[n]  (i = 0 -- NaveOut, n = 0 -- Naverage)
@@ -259,6 +270,6 @@
 
   // copy the (kept) measurements in the sorted order
-  ALLOCATE (measureOut, Measure, Nmeas);
-  for (i = 0; i < Nmeas; i++) {
+  ALLOCATE (measureOut, Measure, NmeasOut);
+  for (i = 0; i < NmeasOut; i++) {
     j = measureSeqOut[i];
     measureOut[i] = measure[j];
@@ -267,6 +278,6 @@
 
   // copy the (kept) average entries
-  ALLOCATE (averageOut, Average, Nave);
-  for (i = 0; i < Nave; i++) {
+  ALLOCATE (averageOut, Average, NaveOut);
+  for (i = 0; i < NaveOut; i++) {
     j = averageSeqOut[i];
     averageOut[i] = average[j];
@@ -284,4 +295,5 @@
   int NmeasureTotal = 0;
   int measureOffsetOK = TRUE;
+  int averefOK = TRUE;
   for (i = 0; i < Naverage; i++) {
     NmeasureTotal += catalog[0].average[i].Nmeasure;
@@ -301,5 +313,5 @@
       averefOK &= (catalog[0].measure[m+j].averef == i);
       if (VERBOSE && !(catalog[0].measure[m+j].averef == i)) {
-	fprintf (stderr, "averef broken: %d vs %d (measure %d)\n", (int) i, catalog[0].measure[m+j].averef, m+j);
+	fprintf (stderr, "averef broken: %d vs %d (measure %d)\n", (int) i, catalog[0].measure[m+j].averef, (int) (m+j));
       }
     }
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar.c	(revision 34686)
@@ -8,5 +8,5 @@
   SetSignals ();
   ConfigInit (&argc, argv);
-  args (&argc, argv);
+  args (argc, argv);
 
   set_db (&db);
@@ -20,15 +20,32 @@
   switch (MODE) {
     case MODE_IMAGEFILE:
-      delete_imagefile (&db, argv[1]);
+      delete_imagefile (&db);
       break;
     case MODE_IMAGENAME:
-      delete_imagename (&db, argv[1]);
+      delete_imagename (&db);
       break;
     case MODE_TIME:
       delete_times (&db);
       break;
-    case MODE_PHOTCODES:
-      delete_photcoes (&db);
+    case MODE_PHOTCODES: {
+      // delete_image_photcodes (&db);
+
+      // load the current sky table (layout of all SkyRegions) 
+      SkyTable *sky = SkyTableLoadOptimal (CATDIR, NULL, NULL, TRUE, -1, VERBOSE);
+      if (!sky) {
+	  fprintf (stderr, "ERROR running loading sky table from %s\n", CATDIR);
+	  exit (2);
+      }
+      SkyTableSetFilenames (sky, CATDIR, "cpt");
+
+      SkyList *skylist = SkyListByPatch (sky, -1, &UserPatch);
+      if (!skylist) {
+	  fprintf (stderr, "ERROR setting up skylist for %s\n", CATDIR);
+	  exit (2);
+      }
+
+      delete_photcodes (skylist, 0, NULL);
       break;
+    }
     case MODE_ORPHAN:
       fprintf (stderr, "delete orphans not available\n");
Index: /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar_client.c
===================================================================
--- /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar_client.c	(revision 34685)
+++ /branches/eam_branches/ipp-20120905/Ohana/src/delstar/src/delstar_client.c	(revision 34686)
@@ -1,48 +1,45 @@
 # include "delstar.h"
+
+// delstar_client is run on a remote host and is responsible for deleting measures from the
+// catalogs owned by that host.
 
 int main (int argc, char **argv) {
 
-  FITS_DB db;
-
-  int status;
   SetSignals ();
   ConfigInit (&argc, argv);
-  args (&argc, argv);
+  args_client (argc, argv);
 
-  set_db (&db);
-  status = dvo_image_lock (&db, ImageCat, 60.0, LCK_XCLD); /* XCLD */
-  if (!status) Shutdown ("ERROR: failure to lock image catalog %s", db.filename);
-  if (db.dbstate == LCK_EMPTY) Shutdown ("ERROR: No images in catalog %s (1)", db.filename);
+  // load the current sky table (layout of all SkyRegions) 
+  SkyTable *sky = SkyTableLoadOptimal (CATDIR, NULL, NULL, TRUE, -1, VERBOSE);
+  if (!sky) {
+      fprintf (stderr, "ERROR running loading sky table from %s\n", CATDIR);
+      exit (2);
+  }
+  SkyTableSetFilenames (sky, CATDIR, "cpt");
 
-  status = dvo_image_load (&db, VERBOSE, FALSE);
-  if (!status) Shutdown ("can't read image catalog %s", db.filename);
+  SkyList *skylist = SkyListByPatch (sky, -1, &UserPatch);
+  if (!skylist) {
+      fprintf (stderr, "ERROR setting up skylist for %s\n", CATDIR);
+      exit (2);
+  }
 
   switch (MODE) {
     case MODE_IMAGEFILE:
-      delete_imagefile (&db, argv[1]);
       break;
     case MODE_IMAGENAME:
-      delete_imagename (&db, argv[1]);
       break;
     case MODE_TIME:
-      delete_times (&db);
       break;
     case MODE_PHOTCODES:
-      // delete images with these photcodes
-      delete_photcodes_images (db, photcodesDrop, NphotcodesDrop);
-
-      delete_photcoes (&db);
+      delete_photcodes (skylist, HOST_ID, HOSTDIR);
       break;
     case MODE_ORPHAN:
-      fprintf (stderr, "delete orphans not available\n");
-      // delete_orphans (argv[1]);
       break;
     case MODE_MISSED:
-      fprintf (stderr, "delete missed not available\n");
-      // delete_missed (argv[1]);
       break;
     default:
       usage ();
   }
+  fprintf (stderr, "this mode is not supported by delstar_client\n");
   exit (1);
 }
