diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/utilities/nttools/texpand/texpand.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'pkg/utilities/nttools/texpand/texpand.x')
-rw-r--r-- | pkg/utilities/nttools/texpand/texpand.x | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/texpand/texpand.x b/pkg/utilities/nttools/texpand/texpand.x new file mode 100644 index 00000000..c89075c1 --- /dev/null +++ b/pkg/utilities/nttools/texpand/texpand.x @@ -0,0 +1,94 @@ +include <fset.h> + +# TEXPAND -- Expand the rows of a table according to a set of rules +# +# B.Simon 25-Apr-88 Original +# Phil Hodge 4-Oct-95 Use table name template routines tbnopenp, etc. + +procedure texpand () + +#-- +pointer ilist # Input file name template +pointer olist # Output file name template +pointer rbase # Name of file containing expansion rules +pointer debug # Debug file name +bool verbose # Diagnostic message flag + +int junk, dbg +pointer sp, itp, otp, input, output, target, action + +bool clgetb() +int open(), tbnlen(), tbnget() +pointer tbnopenp(), tbtopn() + +begin + # Allocate dynamic memory for strings + + call smark (sp) + call salloc (input, SZ_FNAME, TY_CHAR) + call salloc (output, SZ_FNAME, TY_CHAR) + call salloc (rbase, SZ_FNAME, TY_CHAR) + call salloc (debug, SZ_FNAME, TY_CHAR) + + # Read the parameter file + + ilist = tbnopenp ("input") + olist = tbnopenp ("output") + call clgstr ("rbase", Memc[rbase], SZ_FNAME) + call clgstr ("debug", Memc[debug], SZ_FNAME) + verbose = clgetb ("verbose") + + # Open debug file + + if (Memc[debug] == ' ' || Memc[debug] == EOS) + dbg = NULL + else + dbg = open (Memc[debug], NEW_FILE, TEXT_FILE) + + # Check to see that input & output templates + # have same number of files + + if (tbnlen (ilist) != tbnlen (olist)) + call error (ERR, "Number of input and output tables do not match") + + while (tbnget (ilist, Memc[input], SZ_FNAME) != EOF) { + + junk = tbnget (olist, Memc[output], SZ_FNAME) + + # Open input and output tables + + itp = tbtopn (Memc[input], READ_ONLY, NULL) + otp = tbtopn (Memc[output], NEW_COPY, itp) + call tbtcre (otp) + call tbhcal (itp, otp) + + # Create target and action tables from the rule base + + call parser (Memc[rbase], itp, dbg, target, action) + + # Expand the rows of the input table using the rules + # encoded in the target and action tables + + call use_rules (itp, otp, target, action, dbg, verbose) + + # Print diagnostic message and close tables + + if (verbose) { + call tbtnam (itp, Memc[input], SZ_FNAME) + call tbtnam (otp, Memc[output], SZ_FNAME) + + call printf ("%s -> %s\n") + call pargstr (Memc[input]) + call pargstr (Memc[output]) + call flush (STDOUT) + } + + call tbtclo (itp) + call tbtclo (otp) + } + + call close (dbg) + call tbnclose (ilist) + call tbnclose (olist) + call sfree (sp) +end |