aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/texpand/texpand.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/utilities/nttools/texpand/texpand.x')
-rw-r--r--pkg/utilities/nttools/texpand/texpand.x94
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