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