Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/Makefile
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/Makefile	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/Makefile	(revision 38711)
@@ -283,4 +283,5 @@
 $(SRC)/loadstarpar_save_remote.$(ARCH).o \
 $(SRC)/loadstarpar_table.$(ARCH).o \
+$(SRC)/loadstarpar_extras.$(ARCH).o \
 $(SRC)/psps_ids.$(ARCH).o
 
@@ -300,4 +301,5 @@
 $(SRC)/loadstarpar_save_remote.$(ARCH).o \
 $(SRC)/loadstarpar_table.$(ARCH).o \
+$(SRC)/loadstarpar_extras.$(ARCH).o \
 $(SRC)/psps_ids.$(ARCH).o
 
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/include/loadstarpar.h
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/include/loadstarpar.h	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/include/loadstarpar.h	(revision 38711)
@@ -12,6 +12,6 @@
 char *INPUT;
 
-AddstarClientOptions args_loadstarpar (int argc, char **argv, AddstarClientOptions options);
-AddstarClientOptions args_loadstarpar_client (int argc, char **argv, AddstarClientOptions options);
+AddstarClientOptions args_loadstarpar (int *argc, char **argv, AddstarClientOptions options);
+AddstarClientOptions args_loadstarpar_client (int *argc, char **argv, AddstarClientOptions options);
 
 int loadstarpar_table (SkyList *skylistInput, HostTable *hosts, char *filename, AddstarClientOptions *options);
@@ -23,8 +23,8 @@
 int save_remote_host (HostInfo *host);
 
-int init_remote_hosts ();
-int find_empty_slot ();
-int harvest_all ();
-int harvest_host ();
+int init_remote_hosts (void);
+int find_empty_slot (void);
+int harvest_all (void);
+int harvest_host (void);
 
 int loadstarpar_catalog (StarPar_Stars *stars, int Nstars, SkyRegion *region, char *filename, AddstarClientOptions *options);
@@ -40,2 +40,4 @@
 
 int loadstarpar_sortStars (StarPar_Stars *stars, int Nstars);
+
+int loadstarpar_tmpdir (void);
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/args_loadstarpar.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/args_loadstarpar.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/args_loadstarpar.c	(revision 38711)
@@ -5,11 +5,11 @@
 static void help_client (void);
 
-AddstarClientOptions args_loadstarpar (int argc, char **argv, AddstarClientOptions options) {
+AddstarClientOptions args_loadstarpar (int *argc, char **argv, AddstarClientOptions options) {
   
   int N;
 
   /* 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 ();
   }
@@ -28,20 +28,20 @@
   HOST_ID = 0;
   PARALLEL = FALSE;
-  if ((N = get_argument (argc, argv, "-parallel"))) {
+  if ((N = get_argument (*argc, argv, "-parallel"))) {
     PARALLEL = TRUE;
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   // this is a test mode : rather than launching the remote jobs and waiting for completion,
   // relphot 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"))) {
+  if ((N = get_argument (*argc, argv, "-parallel-manual"))) {
     PARALLEL = TRUE; // -parallel-manual implies -parallel
     PARALLEL_MANUAL = TRUE;
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   // this is a test mode : rather than launching the relphot_client jobs remotely, they are 
   // run in serial via 'system'
   PARALLEL_SERIAL = FALSE;
-  if ((N = get_argument (argc, argv, "-parallel-serial"))) {
+  if ((N = get_argument (*argc, argv, "-parallel-serial"))) {
     if (PARALLEL_MANUAL) {
       fprintf (stderr, "ERROR: cannot mix -parallel-manual and -parallel-serial\n");
@@ -50,31 +50,33 @@
     PARALLEL = TRUE; // -parallel-serial implies -parallel
     PARALLEL_SERIAL = TRUE;
-    remove_argument (N, &argc, argv);
-  }
-
-  /* only add to existing regions */
+    remove_argument (N, argc, argv);
+  }
+
+  /* only add to existing regions  */
   options.existing_regions = FALSE;
-  if ((N = get_argument (argc, argv, "-existing-regions"))) {
-    options.existing_regions = TRUE;
-    remove_argument (N, &argc, argv);
-  }
+  // XXX NOT USED if ((N = get_argument (*argc, argv, "-existing-regions"))) {
+  // XXX NOT USED   options.existing_regions = TRUE;
+  // XXX NOT USED   remove_argument (N, argc, argv);
+  // XXX NOT USED }
+
   /* only add to existing objects */
   options.only_match = FALSE;
-  if ((N = get_argument (argc, argv, "-only-match"))) {
+  if ((N = get_argument (*argc, argv, "-only-match"))) {
     options.only_match = TRUE;
-    remove_argument (N, &argc, argv);
-  }
+    remove_argument (N, argc, argv);
+  }
+
   /* replace measurement, don't duplicate (ref/cat only) */
   options.replace = FALSE;
-  if ((N = get_argument (argc, argv, "-replace"))) {
+  if ((N = get_argument (*argc, argv, "-replace"))) {
     options.replace = TRUE;
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
 
   /* extra error messages */
   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);
   }
 
@@ -96,5 +98,5 @@
   DUMP = NULL;
 
-  if (argc < 2) {
+  if (*argc < 2) {
     fprintf (stderr, "USAGE: loadstarpar [options] (fitsfile) [..more files]\n");
     exit (2);
@@ -103,11 +105,11 @@
 }
 
-AddstarClientOptions args_loadstarpar_client (int argc, char **argv, AddstarClientOptions options) {
+AddstarClientOptions args_loadstarpar_client (int *argc, char **argv, AddstarClientOptions options) {
   
   int N;
 
   /* 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 ();
   }
@@ -118,32 +120,32 @@
 
   HOST_ID = 0;
-  if ((N = get_argument (argc, argv, "-hostID"))) {
-    remove_argument (N, &argc, argv);
+  if ((N = get_argument (*argc, argv, "-hostID"))) {
+    remove_argument (N, argc, argv);
     HOST_ID = atoi (argv[N]);
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   if (!HOST_ID) help_client();
 
   HOSTDIR = NULL;
-  if ((N = get_argument (argc, argv, "-hostdir"))) {
-    remove_argument (N, &argc, argv);
+  if ((N = get_argument (*argc, argv, "-hostdir"))) {
+    remove_argument (N, argc, argv);
     HOSTDIR = strcreate (argv[N]);
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   if (!HOSTDIR) help_client();
 
   CPT_FILE = NULL;
-  if ((N = get_argument (argc, argv, "-cpt"))) {
-    remove_argument (N, &argc, argv);
+  if ((N = get_argument (*argc, argv, "-cpt"))) {
+    remove_argument (N, argc, argv);
     CPT_FILE = strcreate (argv[N]);
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   if (!CPT_FILE) help_client();
   
   INPUT = NULL;
-  if ((N = get_argument (argc, argv, "-input"))) {
-    remove_argument (N, &argc, argv);
+  if ((N = get_argument (*argc, argv, "-input"))) {
+    remove_argument (N, argc, argv);
     INPUT = strcreate (argv[N]);
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   if (!INPUT) help_client();
@@ -157,20 +159,20 @@
   /* only add to existing objects */
   options.only_match = FALSE;
-  if ((N = get_argument (argc, argv, "-only-match"))) {
+  if ((N = get_argument (*argc, argv, "-only-match"))) {
     options.only_match = TRUE;
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
   /* replace measurement, don't duplicate (ref/cat only) */
   options.replace = FALSE;
-  if ((N = get_argument (argc, argv, "-replace"))) {
+  if ((N = get_argument (*argc, argv, "-replace"))) {
     options.replace = TRUE;
-    remove_argument (N, &argc, argv);
+    remove_argument (N, argc, argv);
   }
 
   /* extra error messages */
   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);
   }
 
@@ -192,5 +194,5 @@
   DUMP = NULL;
 
-  if (argc != 1) {
+  if (*argc != 1) {
     fprintf (stderr, "USAGE: loadstarpar_client -cpt (file) -input (file)\n");
     exit (2);
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/find_matches_starpar.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/find_matches_starpar.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/find_matches_starpar.c	(revision 38711)
@@ -131,17 +131,18 @@
 
     /** add starpar for this star **/
-
-    // set the new starparments
-    catalog[0].starpar[Nstarpar]          = stars[N].starpar;
-    catalog[0].starpar[Nstarpar].averef   = n;
-    catalog[0].starpar[Nstarpar].objID    = catalog[0].average[n].objID;
-    catalog[0].starpar[Nstarpar].catID    = catID;
-
-    // NOTE: include R,D in starpar?
-    // XXX if I add R,D to starpar, I should rationalize R,D to the same boundary?
-
+    off_t m;
+    if (options->replace && catalog[0].average[n].Nstarpar) {
+      m = catalog[0].average[n].starparOffset;
+    } else {
+      m = Nstarpar;
+      catalog[0].average[n].starparOffset = m;
+      catalog[0].average[n].Nstarpar ++;
+      Nstarpar ++;
+    }
+    catalog[0].starpar[m]          = stars[N].starpar;
+    catalog[0].starpar[m].averef   = n;
+    catalog[0].starpar[m].objID    = catalog[0].average[n].objID;
+    catalog[0].starpar[m].catID    = catID;
     stars[N].found = TRUE;
-    catalog[0].average[n].Nstarpar ++;
-    Nstarpar ++;
     i++;
   }
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar.c	(revision 38711)
@@ -19,5 +19,5 @@
   SetSignals ();
   options = ConfigInit (&argc, argv);
-  options = args_loadstarpar (argc, argv, options);
+  options = args_loadstarpar (&argc, argv, options);
 
   // load the full sky description table (dvodb must exist)
@@ -25,4 +25,7 @@
   SkyTableSetFilenames (sky, CATDIR, "cpt");
   
+  // make the tmpdir if needed
+  if (!loadstarpar_tmpdir()) exit (1);
+
   // load the list of hosts
   HostTable *hosts = NULL;
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_client.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_client.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_client.c	(revision 38711)
@@ -9,5 +9,5 @@
   SetSignals ();
   options = ConfigInit (&argc, argv);
-  options = args_loadstarpar_client (argc, argv, options);
+  options = args_loadstarpar_client (&argc, argv, options);
 
   // client is called with a pointer to the file to be loaded
@@ -21,5 +21,8 @@
   StarPar_Stars *stars = loadstarpar_load_stars (INPUT, &Nstars);
 
-  loadstarpar_catalog (stars, Nstars, skylist->regions[0], CPT_FILE, &options);
+  char filename[DVO_MAX_PATH];
+  snprintf (filename, DVO_MAX_PATH, "%s/%s.cpt", HOSTDIR, CPT_FILE);
+
+  loadstarpar_catalog (stars, Nstars, skylist->regions[0], filename, &options);
 
   free (stars);
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_extras.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_extras.c	(revision 38711)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_extras.c	(revision 38711)
@@ -0,0 +1,29 @@
+# include "addstar.h"
+# include "loadstarpar.h"
+
+int loadstarpar_tmpdir () {
+  
+  struct stat fstats;
+  char fullpath[DVO_MAX_PATH];
+
+  snprintf (fullpath, DVO_MAX_PATH, "%s/tmpdir", CATDIR);
+
+  int mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
+  int status = stat (fullpath, &fstats);
+  if (!status) {
+    // path exists, is it a directory?
+    if (!S_ISDIR(fstats.st_mode)) {
+      gprint (GP_ERR, "cannot create directory %s: is an existing file\n", fullpath);
+      return (FALSE);
+    }
+    return (TRUE);
+  }
+
+  status = mkdirhier (fullpath, mode);
+  if (status == -1) {
+    gprint (GP_ERR, "cannot create directory %s\n", fullpath);
+    return (FALSE);
+  }
+  return (TRUE);
+}
+
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_io.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_io.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_io.c	(revision 38711)
@@ -29,5 +29,5 @@
   gfits_define_bintable_column (&theader, "D", "DEC",      "", "degree", 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "GLON",     "", "degree", 1.0, 0.0);
-  gfits_define_bintable_column (&theader, "D", "GLAT",     "", "degree", 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "GLAT",     "", "degree", 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "Ebv",      "", "", 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "dEbv",     "", "", 1.0, 0.0);
@@ -84,11 +84,14 @@
   gfits_free_table (&ftable);
 
+  fflush (f);
+  fclose (f);
+
   return TRUE;
 }
 
 
-# define GET_COLUMN(OUT,NAME,TYPE)					\
+# define GET_COLUMN(OUT,NAME,TYPE,RTYPE)					\
   TYPE *OUT = gfits_get_bintable_column_data (&theader, &ftable, NAME, type, &Nrow, &Ncol); \
-  myAssert (!strcmp(type, #TYPE), "wrong column type");
+  myAssert (!strcmp(type, #RTYPE), "wrong column type");
 
 StarPar_Stars *loadstarpar_load_stars (char *filename, int *nstars) {
@@ -134,19 +137,19 @@
   if (!gfits_fread_ftable_data (f, &ftable, FALSE)) goto escape;
  
-  GET_COLUMN(ra      , "RA"        ,   double);
-  GET_COLUMN(dec     , "DEC"       ,   double);
-  GET_COLUMN(glon    , "GLON"      ,   float);
-  GET_COLUMN(glat    , "GLAT"      ,   float);
-  GET_COLUMN(Ebv     , "Ebv"       ,   float);
-  GET_COLUMN(dEbv    , "dEbv"      ,   float);
-  GET_COLUMN(DistMag , "DistMag"   ,   float);
-  GET_COLUMN(dDistMag, "dDistMag"  ,   float);
-  GET_COLUMN(M_r     , "M_r"       ,   float);
-  GET_COLUMN(dM_r    , "dM_r"      ,   float);
-  GET_COLUMN(FeH     , "FeH"       ,   float);
-  GET_COLUMN(dFeH    , "dFeH"      ,   float);
-  GET_COLUMN(averef  , "averef"    ,   unsigned int);
-  GET_COLUMN(objID   , "objID"     ,   unsigned int);
-  GET_COLUMN(catID   , "catID"     ,   unsigned int);
+  GET_COLUMN(ra      , "RA"        ,   double      ,   double      );
+  GET_COLUMN(dec     , "DEC"       ,   double      ,   double      );
+  GET_COLUMN(glon    , "GLON"      ,   float       ,   float       );
+  GET_COLUMN(glat    , "GLAT"      ,   float       ,   float       );
+  GET_COLUMN(Ebv     , "Ebv"       ,   float       ,   float       );
+  GET_COLUMN(dEbv    , "dEbv"      ,   float       ,   float       );
+  GET_COLUMN(DistMag , "DistMag"   ,   float       ,   float       );
+  GET_COLUMN(dDistMag, "dDistMag"  ,   float       ,   float       );
+  GET_COLUMN(M_r     , "M_r"       ,   float       ,   float       );
+  GET_COLUMN(dM_r    , "dM_r"      ,   float       ,   float       );
+  GET_COLUMN(FeH     , "FeH"       ,   float       ,   float       );
+  GET_COLUMN(dFeH    , "dFeH"      ,   float       ,   float       );
+  GET_COLUMN(averef  , "averef"    ,   unsigned int,   int         );
+  GET_COLUMN(objID   , "objID"     ,   unsigned int,   int         );
+  GET_COLUMN(catID   , "catID"     ,   unsigned int,   int         );
 
   gfits_free_header (&theader);
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_readstars.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_readstars.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_readstars.c	(revision 38711)
@@ -47,6 +47,6 @@
   char type[16];
 
-  GET_COLUMN (glat,    "l",    float);
-  GET_COLUMN (glon,    "b",    float);
+  GET_COLUMN (glon,    "l",    float);
+  GET_COLUMN (glat,    "b",    float);
   GET_COLUMN (conv,    "conv", byte);
   GET_COLUMN (lnZ,     "lnZ",  float);
Index: /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_save_remote.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_save_remote.c	(revision 38710)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/addstar/src/loadstarpar_save_remote.c	(revision 38711)
@@ -18,6 +18,6 @@
 
     // save to a unique filename
-    char filename[1024]; // CATDIR/tmpdir/starpar.PID.index.fits
-    snprintf (filename, 1024, "%s/tmpdir/starpar.%s.%05d.fits", CATDIR, uniquer, region->index);
+    char filename[DVO_MAX_PATH]; // CATDIR/tmpdir/starpar.PID.index.fits
+    snprintf (filename, DVO_MAX_PATH, "%s/tmpdir/starpar.%s.%05d.fits", CATDIR, uniquer, region->index);
 
     // write the data to the given FITS file
@@ -57,4 +57,9 @@
     strextend (&command, "-input %s", filename);
 
+    if (options->only_match) strextend (&command, "-only-match");
+    if (options->replace) strextend (&command, "-replace");
+
+    fprintf (stderr, "command: %s\n", command);
+
     // launch the job on the remote machine (no handshake)
     int errorInfo = 0;
