diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /pkg/utilities/nttools/tdiffer/tdiffer.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/utilities/nttools/tdiffer/tdiffer.x')
-rw-r--r-- | pkg/utilities/nttools/tdiffer/tdiffer.x | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/tdiffer/tdiffer.x b/pkg/utilities/nttools/tdiffer/tdiffer.x new file mode 100644 index 00000000..9c30e82f --- /dev/null +++ b/pkg/utilities/nttools/tdiffer/tdiffer.x @@ -0,0 +1,92 @@ +include <tbset.h> + +define SYNTAX 1 + +# TDIFFER -- Create a new table which is the difference of two old tables +# +# B.Simon 14-Jun-1988 First Code +# Phil Hodge 7-Sep-1988 Change parameter names for tables. +# Phil Hodge 8-Apr-1999 Call tbfpri. + +procedure t_tdiffer() + +pointer tab1 # First table +pointer tab2 # Second table +pointer outtab # Output table +pointer colnam1 # Columns to match in first table +pointer colnam2 # Columns to match in second table +#-- +int nptr1, nptr2, ncol1, ncol2 +int phu_copied # set by tbfpri and ignored +pointer sp, tp1, tp2, otp, col1, col2 + +string notfound "Column(s) not found in table" +string colnumerr "Number of columns do not agree" + +int tbpsta() +pointer tbtopn() + +begin + # Allocate stack memory for strings + + call smark (sp) + call salloc (tab1, SZ_FNAME, TY_CHAR) + call salloc (tab2, SZ_FNAME, TY_CHAR) + call salloc (outtab, SZ_FNAME, TY_CHAR) + call salloc (colnam1, SZ_LINE, TY_CHAR) + call salloc (colnam2, SZ_LINE, TY_CHAR) + + # Read the task parameters + + call clgstr ("intable1", Memc[tab1], SZ_LINE) + call clgstr ("intable2", Memc[tab2], SZ_LINE) + call clgstr ("outtable", Memc[outtab], SZ_LINE) + call clgstr ("colnam1", Memc[colnam1], SZ_LINE) + call clgstr ("colnam2", Memc[colnam2], SZ_LINE) + + # Open the tables and create column arrays + + tp1 = tbtopn (Memc[tab1], READ_ONLY, NULL) + ncol1 = tbpsta (tp1, TBL_NCOLS) + call malloc (col1, ncol1, TY_INT) + + tp2 = tbtopn (Memc[tab2], READ_ONLY, NULL) + ncol2 = tbpsta (tp2, TBL_NCOLS) + call malloc (col2, ncol2, TY_INT) + + # Open output table and copy header(s) from first table + + call tbfpri (Memc[tab1], Memc[outtab], phu_copied) + otp = tbtopn (Memc[outtab], NEW_COPY, tp1) + call tbtcre (otp) + call tbhcal (tp1, otp) + + # Create two arrays of column pointers from the column templates + + call tctexp (tp1, Memc[colnam1], ncol1, nptr1, Memi[col1]) + if (nptr1 == 0) + call error (SYNTAX, notfound) + + call tctexp (tp2, Memc[colnam2], ncol2, nptr2, Memi[col2]) + if (nptr2 == 0) + call error (SYNTAX, notfound) + + if (nptr1 != nptr2) + call error (SYNTAX, colnumerr) + + # Retrieve the indices of the rows of the first table which are + # not in the second table + + call tbl_diff (tp1, tp2, otp, nptr1, Memi[col1], Memi[col2]) + + # Close the tables and free dynamic memory + + call tbtclo (tp1) + call tbtclo (tp2) + call tbtclo (otp) + + call mfree (col1, TY_INT) + call mfree (col2, TY_INT) + + call sfree (sp) +end |