aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/ptools/pselect.cl
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/ptools/pselect.cl')
-rw-r--r--noao/digiphot/ptools/pselect.cl77
1 files changed, 77 insertions, 0 deletions
diff --git a/noao/digiphot/ptools/pselect.cl b/noao/digiphot/ptools/pselect.cl
new file mode 100644
index 00000000..86ebb9bf
--- /dev/null
+++ b/noao/digiphot/ptools/pselect.cl
@@ -0,0 +1,77 @@
+# PSELECT - Select records from an ST table of an APPHOT/DAOPHOT text file
+# based on the value of a boolean expression.
+
+procedure pselect (infiles, outfiles, expr)
+
+string infiles {prompt="Input apphot/daophot database(s)"}
+string outfiles {prompt="Output apphot/daophot database(s)"}
+string expr {prompt="Boolean expression for record selection"}
+
+struct *inlist, *outlist
+
+begin
+ # Local variable declarations.
+ file tmpin, tmpout
+ int nin, nout
+ string in, out, ex, inname, outname
+
+ # Cache the istable parameters.
+ cache ("istable")
+
+ # Get the positional parameters.
+ in = infiles
+ out = outfiles
+ ex = expr
+
+ # Make temporary names.
+ tmpin = mktemp ("tmp$")
+ tmpout = mktemp ("tmp$")
+
+ # Expand the file list names.
+ files (in, sort=no, > tmpin)
+ files (out, sort=no, > tmpout)
+
+ # Compute the lengths of the input and output lists.
+ inlist = tmpin
+ for (nin = 0; fscan (inlist, inname) != EOF; nin = nin + 1)
+ ;
+ inlist = ""
+ outlist = tmpout
+ for (nout = 0; fscan (outlist, outname) != EOF; nout = nout + 1)
+ ;
+ outlist = ""
+
+ # Delete the temporary files.
+ delete (tmpin, ver-, >& "dev$null")
+ delete (tmpout, ver-, >& "dev$null")
+
+ # Quit if the number of input and output files is different.
+ if (nin != nout) {
+ print ("ERROR: Input and output file lists are different lengths")
+ return
+ }
+
+ # Expand the file list names.
+ files (in, sort=no, > tmpin)
+ files (out, sort=no, > tmpout)
+
+ # Loop over each file in the input and output lists selecting records.
+ inlist = tmpin
+ outlist = tmpout
+ while (fscan (inlist, inname) != EOF && fscan (outlist, outname) !=
+ EOF) {
+ istable (inname)
+ if (istable.table) {
+ tselect (inname, outname, ex)
+ } else if (istable.text) {
+ txselect (inname, outname, ex)
+ } else {
+ print ("ERROR: Cannot run PSELECT on file: " // inname)
+ }
+ }
+
+ delete (tmpin, ver-, >& "dev$null")
+ delete (tmpout, ver-, >& "dev$null")
+ inlist = ""
+ outlist = ""
+end