Index: /trunk/psdemo/.cvsignore
===================================================================
--- /trunk/psdemo/.cvsignore	(revision 5615)
+++ /trunk/psdemo/.cvsignore	(revision 5615)
@@ -0,0 +1,1 @@
+bin
Index: /trunk/psdemo/Makefile
===================================================================
--- /trunk/psdemo/Makefile	(revision 5615)
+++ /trunk/psdemo/Makefile	(revision 5615)
@@ -0,0 +1,64 @@
+default: psdemo
+help:
+	@echo "USAGE: make psdemo"
+
+CC      =       gcc
+SRC     =       src
+BIN     =       bin
+
+DESTBIN =       $(HOME)/src/bin/$(ARCH)
+
+LPSLIB  :=      $(shell pslib-config --libs)
+IPSLIB  :=      $(shell pslib-config --cflags)
+
+INCS	= 	$(IPSLIB)
+LIBS	= 	$(LPSLIB)
+CFLAGS	=	$(INCS) -std=c99 -Wall -Werror -g
+LFLAGS	=	$(LIBS) 
+
+PSDEMO = \
+$(SRC)/psdemo.$(ARCH).o            \
+$(SRC)/psdemoArgs.$(ARCH).o
+
+psdemo: $(BIN)/psdemo.$(ARCH)
+$(BIN)/psdemo.$(ARCH) : $(PSDEMO)
+$(PSDEMO): $(SRC)/psdemo.h
+
+INSTALL = psdemo
+
+# dependancy rules for binary code #########################
+.PRECIOUS: %.$(ARCH).o
+.PRECIOUS: $(BIN)/%.$(ARCH)
+
+%.$(ARCH).o : %.c
+	$(CC) $(CFLAGS) -c $< -o $@
+
+$(BIN)/%.$(ARCH) : $(SRC)/%.$(ARCH).o
+	@if [ ! -d $(BIN) ]; then mkdir -p $(BIN); fi
+	$(CC) $^ -o $@ $(LFLAGS)
+	@echo "done with $@"
+
+$(DESTBIN)/%: $(BIN)/%.$(ARCH)
+	@if [ ! -d $(DESTBIN) ]; then mkdir -p $(DESTBIN); fi
+	rm -f $(DESTBIN)/$*
+	cp $(BIN)/$*.$(ARCH) $(DESTBIN)/$*
+
+$(INSTALL): % : $(BIN)/%.$(ARCH)
+
+%.clean :
+	rm -f $(BIN)/$*.$(ARCH)
+	rm -f $(SRC)/*.$(ARCH).o
+
+%.install:
+	make $(DESTBIN)/$*
+
+# utilities #################################################
+
+install:
+	for i in $(INSTALL); do make $$i.install; done
+
+clean:	
+	rm -f $(BIN)/*.$(ARCH)
+	rm -f `find . -name "*.o"`
+	rm -f `find . -name "*~"`
+	rm -f `find . -name "#*"`
Index: /trunk/psdemo/src/psdemo.c
===================================================================
--- /trunk/psdemo/src/psdemo.c	(revision 5615)
+++ /trunk/psdemo/src/psdemo.c	(revision 5615)
@@ -0,0 +1,10 @@
+# include "psdemo.h"
+
+int main (int argc, char **argv) {
+
+    psMetadata *config = NULL;
+
+    config = psdemoArgs (&argc, argv);
+
+    exit (0);
+}
Index: /trunk/psdemo/src/psdemo.h
===================================================================
--- /trunk/psdemo/src/psdemo.h	(revision 5615)
+++ /trunk/psdemo/src/psdemo.h	(revision 5615)
@@ -0,0 +1,6 @@
+# include <stdio.h>
+# include <strings.h>  // for strcasecmp
+# include <unistd.h>   // for unlink
+# include <pslib.h>
+
+psMetadata  *psdemoArgs (int *argc, char **argv);
Index: /trunk/psdemo/src/psdemoArgs.c
===================================================================
--- /trunk/psdemo/src/psdemoArgs.c	(revision 5615)
+++ /trunk/psdemo/src/psdemoArgs.c	(revision 5615)
@@ -0,0 +1,74 @@
+# include "psdemo.h"
+
+static void usage (void) ;
+
+psMetadata *psdemoArgs (int *argc, char **argv) {
+
+  int N;
+  int mode = PS_DATA_STRING | PS_META_REPLACE;
+
+  // basic pslib options
+  fprintf (stderr, "starting... %s\n", psLibVersion());
+  psLogSetFormat ("M");
+  psArgumentVerbosity (argc, argv);
+
+  // optional mask image - add to config
+  char *mask = NULL;
+  if ((N = psArgumentGet (*argc, argv, "-mask"))) {
+    psArgumentRemove (N, argc, argv);
+    mask = psStringCopy (argv[N]);
+    psArgumentRemove (N, argc, argv);
+  }
+
+  // optional weight image - add to config
+  char *weight = NULL;
+  if ((N = psArgumentGet (*argc, argv, "-weight"))) {
+    psArgumentRemove (N, argc, argv);
+    weight = psStringCopy (argv[N]);
+    psArgumentRemove (N, argc, argv);
+  }
+
+  // optional output residual image - add to config
+  char *resid = NULL;
+  if ((N = psArgumentGet (*argc, argv, "-resid"))) {
+    psArgumentRemove (N, argc, argv);
+    resid = psStringCopy (argv[N]);
+    psArgumentRemove (N, argc, argv);
+  }
+
+  if (*argc != 4) usage ();
+
+  // setup config information
+  psMetadata *config = psMetadataAlloc ();
+
+  // load config file 
+  // psMetadataAdd (config, PS_LIST_HEAD, "PSF_MODEL", PS_META_MULTI, "folder for psf model entries", NULL);
+  // config = psMetadataConfigParse (config, &Nfail, argv[3], FALSE);
+  // fprintf (stderr, "loaded config...\n");
+
+  // identify input image & optional weight & mask images
+  // command-line entries override config-file entries
+  psMetadataAdd (config, PS_LIST_HEAD, "IMAGE",       mode, "", argv[1]);
+  psMetadataAdd (config, PS_LIST_HEAD, "OUTPUT_FILE", mode, "", argv[2]);
+
+  if (mask != NULL) {
+    psMetadataAdd (config, PS_LIST_HEAD, "MASK_IMAGE", mode, "", mask);
+  }
+  if (weight != NULL) {
+    psMetadataAdd (config, PS_LIST_HEAD, "WEIGHT_IMAGE", mode, "", weight);
+  }
+  if (resid != NULL) {
+    psMetadataAdd (config, PS_LIST_HEAD, "RESID_IMAGE", mode, "", resid);
+  }
+  return (config);
+}
+
+static void usage (void) {
+
+    fprintf (stderr, "USAGE: psdemo (image) (output) (config)\n");
+    fprintf (stderr, "options: \n");
+    fprintf (stderr, "  -mask  (filename)\n");
+    fprintf (stderr, "  -weight (filename)\n");
+    fprintf (stderr, "  -resid (filename)\n");
+    exit (2);
+}
