aboutsummaryrefslogtreecommitdiff
path: root/pkg/tbtables/tbciga.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/tbtables/tbciga.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/tbtables/tbciga.x')
-rw-r--r--pkg/tbtables/tbciga.x95
1 files changed, 95 insertions, 0 deletions
diff --git a/pkg/tbtables/tbciga.x b/pkg/tbtables/tbciga.x
new file mode 100644
index 00000000..aad3c6a1
--- /dev/null
+++ b/pkg/tbtables/tbciga.x
@@ -0,0 +1,95 @@
+include <tbset.h>
+include "tbtables.h"
+
+# This define is here only temporarily.
+define TBL_MAXDIM 7 # maximum dimension of array in table
+
+# This file contains tbciga and tbcisa. For a column that contains arrays,
+# the dimension of the array and the length of each axis may be gotten or
+# specified using these routines.
+#
+# For table types other than FITS, these routines just get or set the
+# total array length.
+#
+# Phil Hodge, 18-Nov-1994 Subroutines created.
+# Phil Hodge, 5-Jul-1995 Modify for FITS tables; change calling sequence.
+# Phil Hodge, 5-Aug-1999 Use COL_NELEM instead of tbalen to get array length.
+
+# tbciga -- get dimension of array and length of each axis
+
+procedure tbciga (tp, cp, ndim, axlen, maxdim)
+
+pointer tp # i: pointer to table descriptor
+pointer cp # i: pointer to column descriptor
+int ndim # o: dimension of array
+int axlen[maxdim] # o: length of each axis
+int maxdim # i: size of axlen array
+#--
+errchk tbfiga
+
+begin
+ if (TB_TYPE(tp) == TBL_TYPE_FITS) {
+ call tbfiga (tp, cp, ndim, axlen, maxdim)
+ } else {
+ ndim = 1
+ axlen[1] = COL_NELEM(cp)
+ }
+end
+
+# tbcisa -- set dimension of array and length of each axis
+
+procedure tbcisa (tp, cp, ndim, axlen)
+
+pointer tp # i: pointer to table descriptor
+pointer cp # i: pointer to column descriptor
+int ndim # i: dimension of array
+int axlen[ARB] # i: length of each axis
+#--
+pointer sp
+pointer errmess # scratch for possible error message
+pointer colname # scratch for column name
+int nelem # actual total number of elements in array
+int nvals # total number specified as input
+int i
+errchk tbfisa
+
+begin
+ # Compare actual array size of column with the total number of
+ # elements specified as input.
+ nelem = COL_NELEM(cp)
+ nvals = 1
+ do i = 1, ndim
+ nvals = nvals * axlen[i]
+
+ if (nelem != nvals) {
+ call smark (sp)
+ call salloc (errmess, SZ_LINE, TY_CHAR)
+ call salloc (colname, SZ_COLNAME, TY_CHAR)
+ call tbcigt (cp, TBL_COL_NAME, Memc[colname], SZ_COLNAME)
+ call sprintf (Memc[errmess], SZ_LINE,
+ "tbcisa: column `%s', actual array size=%d, specified size=%d")
+ call pargstr (Memc[colname])
+ call pargi (nelem)
+ call pargi (nvals)
+ call error (1, Memc[errmess])
+ }
+
+ # Check whether dimension is too large.
+ if (ndim > TBL_MAXDIM) {
+ call smark (sp)
+ call salloc (errmess, SZ_LINE, TY_CHAR)
+ call salloc (colname, SZ_COLNAME, TY_CHAR)
+ call tbcigt (cp, TBL_COL_NAME, Memc[colname], SZ_COLNAME)
+ call sprintf (Memc[errmess], SZ_LINE,
+ "tbcisa: column `%s', dimension %d is too large")
+ call pargstr (Memc[colname])
+ call pargi (ndim)
+ call error (1, Memc[errmess])
+ }
+
+ # Assign values in column descriptor.
+ if (TB_TYPE(tp) == TBL_TYPE_FITS) {
+ call tbfisa (tp, cp, ndim, axlen)
+ }
+ # else nothing
+end