diff options
Diffstat (limited to 'pkg/utilities/nttools/tchsize')
-rw-r--r-- | pkg/utilities/nttools/tchsize/mkpkg | 11 | ||||
-rw-r--r-- | pkg/utilities/nttools/tchsize/tchsize.x | 173 |
2 files changed, 184 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/tchsize/mkpkg b/pkg/utilities/nttools/tchsize/mkpkg new file mode 100644 index 00000000..3459a3f5 --- /dev/null +++ b/pkg/utilities/nttools/tchsize/mkpkg @@ -0,0 +1,11 @@ +# Update the tchsize application code in the ttools package library +# Author: HODGE, 2-FEB-1988 + +$checkout libpkg.a ../ +$update libpkg.a +$checkin libpkg.a ../ +$exit + +libpkg.a: + tchsize.x <tbset.h> + ; diff --git a/pkg/utilities/nttools/tchsize/tchsize.x b/pkg/utilities/nttools/tchsize/tchsize.x new file mode 100644 index 00000000..89a53293 --- /dev/null +++ b/pkg/utilities/nttools/tchsize/tchsize.x @@ -0,0 +1,173 @@ +include <tbset.h> + +# tchsize -- Change size of table(s) + +# The input tables are given by an filename template list. The output +# is either a matching list of tables or a directory. The number of +# input tables may be either one or match the number of output tables. +# This is based on the t_imcopy procedure. +# +# NOTE: If task is used on a FITS table, it will be skipped. +# +# Phil Hodge, 28-Aug-1987 Task created. +# Phil Hodge, 7-Sep-1988 Change parameter names for tables. +# Phil Hodge, 26-Mar-1992 Remove calls to tbtext. +# Phil Hodge, 3-Oct-1995 Modify to use tbn instead of fnt; check for FITS. +# Phil hodge, 16-Apr-1999 Call tbttyp instead of tbparse. + +procedure tchsize() + +char tablist1[SZ_LINE] # Input table list +char tablist2[SZ_LINE] # Output table list +bool verbose # Print operations? +int maxpar # new max number of user (header) parameters +int maxcols # new max space for column descriptors +int rowlen # new row length (for row-ordered tables) +int allrows # new allocated number of rows (for col-ordered) +#-- +int ttype, exists, tbttyp() # to check for a FITS table (exists is ignored) + +pointer tp # Pointer to table descriptor +char table1[SZ_PATHNAME] # Input table name +char table2[SZ_PATHNAME] # Output table name +char dirname1[SZ_PATHNAME] # Directory name +char dirname2[SZ_PATHNAME] # Directory name + +pointer list1, list2 +int root_len + +pointer tbtopn() +pointer tbnopen() +int tbnget(), tbnlen() +int fnldir(), isdirectory() +int clgeti() +bool clgetb(), streq() + +begin + # Get input and output table template lists. + call clgstr ("intable", tablist1, SZ_LINE) + call clgstr ("outtable", tablist2, SZ_LINE) + + # Get new values of table size parameters. + maxpar = clgeti ("maxpar") + maxcols = clgeti ("maxcols") + rowlen = clgeti ("rowlen") * SZ_REAL + allrows = clgeti ("allrows") + + verbose = clgetb ("verbose") + + # Check whether the output string is blank. + if (tablist2[1] == EOS) { + + # Expand the input table list, and change the sizes in-place. + list1 = tbnopen (tablist1) + + while (tbnget (list1, table1, SZ_PATHNAME) != EOF) { + + # Check for a FITS table. + ttype = tbttyp (table1, exists) + if (ttype == TBL_TYPE_FITS) { + call eprintf ("Skipping FITS table %s\n") + call pargstr (table1) + next + } + + if (verbose) { + call printf ("%s\n") + call pargstr (table1) + call flush (STDOUT) + } + # Open the table, change its size, and close it. + tp = tbtopn (table1, READ_WRITE, 0) + call tbtchs (tp, maxpar, maxcols, rowlen, allrows) + call tbtclo (tp) + } + call tbnclose (list1) + + # Check whether the output string is a directory. + } else if (isdirectory (tablist2, dirname2, SZ_PATHNAME) > 0) { + + list1 = tbnopen (tablist1) + while (tbnget (list1, table1, SZ_PATHNAME) != EOF) { + + ttype = tbttyp (table1, exists) + if (ttype == TBL_TYPE_FITS) { + call eprintf ("Skipping FITS table %s\n") + call pargstr (table1) + next + } + + # Place the input table name without a directory in + # string dirname1. + + call get_root (table1, table2, SZ_PATHNAME) + root_len = fnldir (table2, dirname1, SZ_PATHNAME) + call strcpy (table2[root_len + 1], dirname1, SZ_PATHNAME) + + call strcpy (dirname2, table2, SZ_PATHNAME) + call strcat (dirname1, table2, SZ_PATHNAME) + + if (verbose) { + call printf ("%s -> %s\n") + call pargstr (table1) + call pargstr (table2) + call flush (STDOUT) + } + # Copy the table, open it, change its size, and close it. + call tbtcpy (table1, table2) + tp = tbtopn (table2, READ_WRITE, 0) + call tbtchs (tp, maxpar, maxcols, rowlen, allrows) + call tbtclo (tp) + } + call tbnclose (list1) + + } else { + + # Expand the input and output table lists. + + list1 = tbnopen (tablist1) + list2 = tbnopen (tablist2) + + if (tbnlen (list1) != tbnlen (list2)) { + call tbnclose (list1) + call tbnclose (list2) + call error (1, "Number of input and output tables not the same") + } + + # Change each table in the list. + + while ((tbnget (list1, table1, SZ_PATHNAME) != EOF) && + (tbnget (list2, table2, SZ_PATHNAME) != EOF)) { + + ttype = tbttyp (table1, exists) + if (ttype == TBL_TYPE_FITS) { + call eprintf ("Skipping FITS table: %s --> %s\n") + call pargstr (table1) + call pargstr (table2) + next + } + + if (streq (table1, table2)) { + # Same input and output names; no need to copy the table. + if (verbose) { + call eprintf ("%s\n") + call pargstr (table1) + } + } else { + # Different input & output names, so copy the table. + if (verbose) { + call eprintf ("%s -> %s\n") + call pargstr (table1) + call pargstr (table2) + } + call tbtcpy (table1, table2) + } + # Open the table, change its size, and close it. + tp = tbtopn (table2, READ_WRITE, 0) + call tbtchs (tp, maxpar, maxcols, rowlen, allrows) + call tbtclo (tp) + } + call tbnclose (list1) + call tbnclose (list2) + } +end |