Index: /trunk/psastro/src/psastroLoadRefstars.c
===================================================================
--- /trunk/psastro/src/psastroLoadRefstars.c	(revision 9644)
+++ /trunk/psastro/src/psastroLoadRefstars.c	(revision 9645)
@@ -2,5 +2,4 @@
 // int mkstemp(char *template);
 # define ELIXIR_MODE 1
-# define PIPE_MODE 0
 
 psArray *psastroLoadRefstars (pmConfig *config) {
@@ -8,5 +7,6 @@
     int fd;
     bool status;
-    char tempLine[256];
+    char *catformat = NULL;
+    char *getstarLine = NULL;
 
     // select the DVO database?
@@ -24,8 +24,7 @@
     char *CATDIR = psMetadataLookupStr(NULL, recipe, "DVO.CATDIR");
     if (CATDIR == NULL) {
-	psLogMsg ("psastro", 2, "warning: missing DVO.CATDIR, using HOME/.ptolemyrc definition\n");
+	psLogMsg ("psastro", 2, "warning: missing DVO.CATDIR, using ~/.ptolemyrc definition\n");
     }
 
-    // XXX need to add a padding area
     // issue the following command:
     // getstar -region RAmin RAmax DECmin DECmax
@@ -34,5 +33,5 @@
     sprintf (tempFile, "/tmp/psastro.XXXXXX");
     if ((fd = mkstemp (tempFile)) == -1) {
-        fprintf (stderr, "error creating temp output file\n");
+	psError(PSASTRO_ERR_REFSTARS, true, "error creating temp output file\n");
         return NULL;
     }
@@ -42,25 +41,25 @@
 
     // use fork to add timeout capability
-    // use cfitsio |filename format to avoid tempFile
-    # if ELIXIR_MODE
+    if (ELIXIR_MODE) {
+	psStringAppend (&catformat, "-D CATFORMAT elixir ");
+    } else {
+	psStringAppend (&catformat, "-D CATFORMAT panstarrs ");
+    }	
+
     if (CATDIR) {
-	sprintf (tempLine, "getstar -D CATDIR %s -D CATFORMAT elixir -D CATMODE mef -maglim %f -region %f %f %f %f -o %s", CATDIR, MAGmax, RAmin, DECmin, RAmax, DECmax, tempFile);
-    } else {
-	sprintf (tempLine, "getstar -D CATFORMAT elixir -D CATMODE mef -maglim %f -region %f %f %f %f -o %s", MAGmax, RAmin, DECmin, RAmax, DECmax, tempFile);
-    }
-    # else
-    if (CATDIR) {
-	sprintf (tempLine, "getstar -D CATDIR %s -D CATFORMAT panstarrs -D CATMODE mef -maglim %f -region %f %f %f %f -o %s", CATDIR, MAGmax, RAmin, DECmin, RAmax, DECmax, tempFile);
-    } else {
-	sprintf (tempLine, "getstar -D CATFORMAT panstarrs -D CATMODE mef -maglim %f -region %f %f %f %f -o %s", MAGmax, RAmin, DECmin, RAmax, DECmax, tempFile);
-    }
-    # endif
+	psStringAppend (&catformat, "-D CATDIR %s ", CATDIR);
+    } 
 
-    psTrace ("psastro", 3, "%s\n", tempLine);
-    status = system (tempLine);
+    psStringAppend (&getstarLine, "getstar %s -D CATMODE mef -maglim %f -region %f %f %f %f -o %s", catformat, MAGmax, RAmin, DECmin, RAmax, DECmax, tempFile);
+    psTrace ("psastro", 3, "%s\n", getstarLine);
+
+    // XXX use psPipe: catch stderr, stdout, allow for Nsec timeout...
+    status = system (getstarLine);
     if (status) {
-        fprintf (stderr, "error loading reference data\n");
+	psError(PSASTRO_ERR_REFSTARS, true, "error loading reference data\n");
         return NULL;
     }
+    psFree (getstarLine);
+    psFree (catformat);
 
     psLogMsg ("psastro", 3, "ran getstar : %f sec\n", psTimerMark ("psastro"));
@@ -69,9 +68,9 @@
     psFits *fits = psFitsOpen (tempFile, "r");
 
-    # if ELIXIR_MODE
-    psFitsMoveExtName (fits, "DVO_AVERAGE_ELIXIR");
-    # else
-    psFitsMoveExtName (fits, "DVO_AVERAGE_PANSTARRS");
-    # endif
+    if (ELIXIR_MODE) {
+	psFitsMoveExtName (fits, "DVO_AVERAGE_ELIXIR");
+    } else {
+	psFitsMoveExtName (fits, "DVO_AVERAGE_PANSTARRS");
+    }
 
     psTimerStart ("psastro");
@@ -92,13 +91,13 @@
 
         // DVO tables are stored in degrees
-        # if ELIXIR_MODE
-        ref->sky->r   = RAD_DEG*psMetadataLookupF32 (&status, row, "RA");
-        ref->sky->d   = RAD_DEG*psMetadataLookupF32 (&status, row, "DEC");
-        ref->Mag      = 0.001*psMetadataLookupS32 (&status, row, "MAG");  // XXX ELIXIR uses millimags, PANSTARRS uses mags
-        # else
-        ref->sky->r   = RAD_DEG*psMetadataLookupF64 (&status, row, "RA");
-        ref->sky->d   = RAD_DEG*psMetadataLookupF64 (&status, row, "DEC");
-        ref->Mag      = psMetadataLookupF32 (&status, row, "MAG");
-        # endif
+	if (ELIXIR_MODE) {
+	    ref->sky->r   = RAD_DEG*psMetadataLookupF32 (&status, row, "RA");
+	    ref->sky->d   = RAD_DEG*psMetadataLookupF32 (&status, row, "DEC");
+	    ref->Mag      = 0.001*psMetadataLookupS32 (&status, row, "MAG");  // ELIXIR uses millimags
+        } else {
+	    ref->sky->r   = RAD_DEG*psMetadataLookupF64 (&status, row, "RA");
+	    ref->sky->d   = RAD_DEG*psMetadataLookupF64 (&status, row, "DEC");
+	    ref->Mag      = psMetadataLookupF32 (&status, row, "MAG"); // PANSTARRS uses mags
+	}
 
         psArrayAdd (refs, 100, ref);
@@ -114,4 +113,2 @@
     return refs;
 }
-
-// XXX this function needs clarifiction of the getstar output format
