Index: trunk/psastro/src/psastroArguments.c
===================================================================
--- trunk/psastro/src/psastroArguments.c	(revision 5565)
+++ trunk/psastro/src/psastroArguments.c	(revision 6791)
@@ -1,50 +1,95 @@
 # include "psastro.h"
-
-static void usage (void);
-static void usage_test (void);
-
-psMetadata *psastroArguments (int *argc, char **argv) {
-
-    unsigned int Nfail;
-
-    // basic pslib options
-    fprintf (stderr, "starting... %s\n", psLibVersion());
-    psLogSetFormat ("M");
-    psLogArguments (argc, argv);
-    psTraceArguments (argc, argv);
-
-    if (*argc != 4) usage ();
-
-    // load config information
-    psMetadata *config = psMetadataAlloc ();
-    config = psMetadataConfigParse (config, &Nfail, argv[1], FALSE);
-    return (config);
-}
+# include <glob.h>
 
 static void usage (void) {
-    fprintf (stderr, "USAGE: psastro (config) (input) (output)\n");
+    fprintf (stderr, "USAGE: psastro [-file image(s)] [-list imagelist] (output)\n");
     exit (2);
 }
 
-psMetadata *testArguments (int *argc, char **argv) {
+pmConfig *psastroArguments (int *argc, char **argv) {
 
-    unsigned int Nfail;
+    int N;
+
+    if (*argc == 1) usage ();
 
     // basic pslib options
-    fprintf (stderr, "starting... %s\n", psLibVersion());
     psLogSetFormat ("M");
-    psLogArguments (argc, argv);
-    psTraceArguments (argc, argv);
 
-    if (*argc != 6) usage_test ();
+    // these other options override the PSPHOT recipe options
+    psMetadata *options = psMetadataAlloc ();
 
-    // load config information
-    psMetadata *config = psMetadataAlloc ();
-    config = psMetadataConfigParse (config, &Nfail, argv[1], FALSE);
+    // photcode : used in output to supplement header data (argument or recipe?)
+    if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
+	psArgumentRemove (N, argc, argv);
+	psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
+	psArgumentRemove (N, argc, argv);
+    }
+
+    // load config data from default locations 
+    pmConfig *config = pmConfigRead(argc, argv);
+
+    // Storage for other command-line arguments
+    config->arguments = psMetadataAlloc ();
+
+    // save these recipe options until we have loaded the options
+    psMetadataAddPtr (config->arguments, PS_LIST_TAIL, "PSASTRO.OPTIONS",  PS_DATA_METADATA, "", options);
+
+    // we load all input files onto a psArray, to be parsed later
+    psArray *input = psArrayAlloc (16);
+    input->n = 0;
+
+    // load the list of filenames the supplied file (may be a glob: "file*.fits")
+    if ((N = psArgumentGet (*argc, argv, "-file"))) {
+	glob_t globList;
+	psArgumentRemove (N, argc, argv);
+	globList.gl_offs = 0;
+	glob (argv[N], 0, NULL, &globList);
+	for (int i = 0; i < globList.gl_pathc; i++) {
+	    char *filename = psStringCopy (globList.gl_pathv[i]);
+	    psArrayAdd (input, 16, filename);
+	}
+	psArgumentRemove (N, argc, argv);
+    }
+
+    // load the list from the supplied text file
+    if ((N = psArgumentGet (*argc, argv, "-list"))) {
+	int nItems;
+	char line[1024]; // XXX limits the list lines to 1024 chars
+	char word[1024];
+	char *filename;
+
+	psArgumentRemove (N, argc, argv);
+	FILE *f = fopen (argv[N], "r");
+	if (f == NULL) {
+	    psAbort ("psphot", "unable to open specified list file");
+	}
+	while (fgets (line, 1024, f) != NULL) {
+	    nItems = sscanf (line, "%s", word);
+	    switch (nItems) {
+	      case 0:
+		break;
+	      case 1:
+		filename = psStringCopy (word);
+		psArrayAdd (input, 16, filename);
+		break;
+	      default:
+		// rigid format, no comments allowed?
+		psAbort ("psphot", "error parsing input list file");
+		break;
+	    }
+	}
+	psArgumentRemove (N, argc, argv);
+    }		
+    if (input->n < 1) usage ();
+
+    // input list gets places as an array on the config->arguements list
+    psMetadataAddPtr (config->arguments, PS_LIST_TAIL, "INPUT",  PS_DATA_ARRAY, "", input);
+
+    if (*argc != 2) usage ();
+
+    // output positions is fixed
+    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "", argv[2]);
+
+    psTrace(__func__, 1, "Done with psphotArguments...\n");
     return (config);
 }
-
-static void usage_test (void) {
-    fprintf (stderr, "USAGE: psastro-mktest (config) (cmpfile) (catfile) (rawfile) (reffile)\n");
-    exit (2);
-}
