From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- pkg/utilities/nttools/tselect/tselect.x | 83 +++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 pkg/utilities/nttools/tselect/tselect.x (limited to 'pkg/utilities/nttools/tselect/tselect.x') diff --git a/pkg/utilities/nttools/tselect/tselect.x b/pkg/utilities/nttools/tselect/tselect.x new file mode 100644 index 00000000..266753c5 --- /dev/null +++ b/pkg/utilities/nttools/tselect/tselect.x @@ -0,0 +1,83 @@ +include # to check whether I/O is redirected + +define SYNTAX 1 + +# TSELECT -- Create a new table from selected rows of an old table +# +# B.Simon 7-Oct-1987 First Code +# Phil Hodge 7-Sep-1988 Change parameter names for tables. +# Phil Hodge 4-Oct-1995 Use table name template routines tbnopenp, etc. +# B.Simon 25-Aug-1998 Changed to write directly to output table +# Phil Hodge 8-Apr-1999 Call tbfpri. +# Phil Hodge 9-Jun-1999 Set input/output to STDIN/STDOUT if redirected. + +procedure t_tselect() + +pointer ilist # Input table name template +pointer olist # Output table name template +pointer expr # Expression used to select rows +#-- +int junk +int phu_copied # set by tbfpri and ignored +pointer sp, itp, otp, intable, outtable + +string nomatch "Number of input tables must match output tables" + +int fstati() +int tbnget(), tbnlen() +pointer tbtopn(), tbnopenp(), tbnopen() + +begin + # Allocate stack memory for strings + + call smark (sp) + call salloc (intable, SZ_FNAME, TY_CHAR) + call salloc (outtable, SZ_FNAME, TY_CHAR) + call salloc (expr, SZ_LINE, TY_CHAR) + + # Read the task parameters + + if (fstati (STDIN, F_REDIR) == YES) + ilist = tbnopen ("STDIN") + else + ilist = tbnopenp ("intable") + + if (fstati (STDOUT, F_REDIR) == YES) + olist = tbnopen ("STDOUT") + else + olist = tbnopenp ("outtable") + + call clgstr ("expr", Memc[expr], SZ_LINE) + + # Loop over all table names in the input file name template + + if (tbnlen (ilist) != tbnlen (olist)) + call error (SYNTAX, nomatch) + + while (tbnget (ilist, Memc[intable], SZ_FNAME) != EOF) { + junk = tbnget (olist, Memc[outtable], SZ_FNAME) + + # Open the tables + + itp = tbtopn (Memc[intable], READ_ONLY, NULL) + call tbfpri (Memc[intable], Memc[outtable], phu_copied) + otp = tbtopn (Memc[outtable], NEW_COPY, itp) + + # Copy header and selected rows to output table + + call tbtcre (otp) + call tbhcal (itp, otp) + call subset (itp, otp, Memc[expr]) + + # Close the tables + + call tbtclo (itp) + call tbtclo (otp) + } + + # Close the filename template lists + + call tbnclose (ilist) + call tbnclose (olist) + call sfree (sp) +end -- cgit