1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
# tbtables.h -- Internal definitions for the table I/O package.
# Software version number.
#
# Version 0 corresponds to STSDAS and TABLES versions 1.2.3 and earlier.
# The row length was restricted to integral multiples of the size of a
# real number.
#
# Version 1 begins with STSDAS and TABLES version 1.3. Short integer
# datatype was introduced, and character strings were rounded up to a
# multiple of the number of bytes in a char. The row length is allowed
# to be any integral multiple of SZ_CHAR.
#
# Version 2 allows header parameters to have comments.
# This change was made after TABLES version 1.3.3 was released.
#
# Version 3 allows the character strings in column definitions to have
# one more character, and the end-of-string character may be absent.
# 14-Apr-1998
define TBL_CURRENT_VERSION 3
# Default maximum number of header parameters. The current value is TB_MAXPAR.
define DEFMAXPAR 5
# Default maximum number of columns. The current value is TB_MAXCOLS.
define DEFMAXCOLS 5
# This section describes the size information record.
define LEN_SIZINFO 12 # unit = SZ_INT32
define SZ_SIZINFO (LEN_SIZINFO * SZ_INT32)
define S_NPAR $1[1] # Number of header parameters
define S_MAXPAR $1[2] # Max number of header pars
define S_NROWS $1[3] # Number of rows
define S_ALLROWS $1[4] # Number of rows allocated
define S_NCOLS $1[5] # Number of columns defined
define S_MAXCOLS $1[6] # Current max number of columns
define S_COLUSED $1[7] # Chars used by defined columns
define S_ROWLEN $1[8] # Total row length alloc (chars)
define S_TYPE $1[9] # Type (row or column ordered)
define S_VERSION $1[10] # Software version number
# This is the size of the table-descriptor structure.
define LEN_TBLSTRUCT (39)
# File descriptor for the table file, or pointer to CFITSIO descriptor for
# FITS files. Note that by including TB_FILE2 there's space for two words.
define TB_FILE Memi[$1]
define TB_FILE2 Memi[$1+1] # second half of pointer
# Table file name; this can be an IRAF virtual file name.
define TB_NAME_PTR Memi[$1+2] # pointer to table name string
define TB_NAME Memc[TB_NAME_PTR($1)]
# Table file name converted to a host operating system file name.
# This name is needed for CFITSIO, since that uses host OS I/O.
define TB_OS_FILENAME_PTR Memi[$1+3] # pointer to OS file name string
define TB_OS_FILENAME Memc[TB_OS_FILENAME_PTR($1)]
# General descriptive information. (R) means relevant only for row-ordered
# tables, (C) is for column-ordered tables, and (F) is for FITS tables.
# For row-ordered tables, TB_ROWLEN is the allocated row length in SPP chars,
# while for FITS tables, TB_ROWLEN is the value of NAXIS1, the length in bytes.
define TB_TYPE Memi[$1+4] # what type of table
define TB_SUBTYPE Memi[$1+5] # subtype of text or FITS table
define TB_NPAR Memi[$1+6] # number of header paramters
define TB_MAXPAR Memi[$1+7] # max number of header paramters
define TB_NROWS Memi[$1+8] # number of rows
define TB_ALLROWS Memi[$1+9] # (C) allocated number of rows
define TB_NCOLS Memi[$1+10] # number of columns
define TB_MAXCOLS Memi[$1+11] # current max number of columns
define TB_COLUSED Memi[$1+12] # (R) chars used by columns
define TB_ROWLEN Memi[$1+13] # (R,F) row length
define TB_VERSION Memi[$1+14] # Software version number
define TB_BOD Meml[$1+15] # L beg of data (in SZ_CHAR)
define TB_IOMODE Memi[$1+16] # I/O mode
# Flags
define TB_IS_OPEN Memb[$1+17] # Table is open?
define TB_READONLY Memb[$1+18] # I/O mode is read-only?
define TB_MODIFIED Memb[$1+19] # Has table been changed?
define TB_INDEF_IS_CURRENT Memb[$1+20] # (F) TB_INDEF is up-to-date?
# Pointers. TB_INDEF is used for row-ordered tables and FITS tables.
define TB_INDEF Memi[$1+21] # Pointer to indef record buffer
define TB_COLPTR Memi[$1+22] # Ptr to array of column ptrs
# These are for tables in FITS files.
define TB_HDU Memi[$1+23] # number of HDU in FITS file
define TB_EXTVER Memi[$1+24] # version number
define TB_OVERWRITE Memi[$1+25] # +1 --> yes, 0 --> no
define TB_CD Memi[$1+26] # returned by cd_open()
define TB_EXTNAME_PTR Memi[$1+27] # pointer to EXTNAME
define TB_EXTNAME Memc[TB_EXTNAME_PTR($1)]
# These are for row and column selectors.
# TB_ROW_SELECT will be YES if there is a row selector in effect for the
# current table. TB_ROWSET will in this case not be NULL, and the actual
# row number corresponding to a selected row number will be:
# rst_rownum (TB_ROWSET(tp), selected_row)
# TB_COLUMN_SELECT will be YES if there is a column selector in effect for
# the current table. TB_SELCOL(tp,M) will in this case be the selectors
# descriptor of Mth selected column (note: not the same as column descriptor)
define TB_ROW_SELECT Memi[$1+28] # row selection turned on?
define TB_NSEL_ROWS Memi[$1+29] # number of selected rows
define TB_ROWSET Memi[$1+30] # pointer to row set
define TB_COLUMN_SELECT Memi[$1+31] # column selection turned on?
define TB_NSEL_COLS Memi[$1+32] # number of selected columns
define TB_MAX_SELCOLS Memi[$1+33] # size of TB_SELCOL_PTR array
define TB_SELCOL_PTR Memi[$1+34]
define TB_SELCOL Memi[TB_SELCOL_PTR($1)+$2-1]
# These are for text tables.
define TB_COMMENT Memi[$1+35] # pointer to comment string
define TB_SZ_COMMENT Memi[$1+36] # size of comment string
define TB_KEYLIST_PTR Memi[$1+37] # pointer to list of keywords
define TB_KEYWORD Memi[TB_KEYLIST_PTR($1)+$2-1] # ptr to keyword
# Table file name; this can be an IRAF virtual file name.
define TB_SRC_PTR Memi[$1+38] # pointer to source name string
define TB_SRC Memc[TB_SRC_PTR($1)]
# Array of pointers to column information. This array can be reallocated
# to allow more columns; the current size at any time is TB_MAXCOLS.
define TB_COLINFO Memi[TB_COLPTR($1)+$2-1]
# Column information structures.
# This is the size of the buffer for a column name (i.e. including EOS).
define FULL_SZ_COLNAME (SZ_COLNAME+SZ_CHAR)
# This structure is for maintaining a column definition in memory.
# The size is for five integers plus three strings, unit = SZ_STRUCT.
# Note that some of these are only meaningful for stsdas format tables,
# and some others are only meaningful for FITS tables.
# COL_LEN is the number of char taken up by one cell in the table,
# the entire array (if the column contains arrays) at one row & column.
# COL_OFFSET is the offset in char from the beginning of a row to
# the beginning of a cell in that row (although it is also used for
# a column ordered table).
# In a FITS table, the true data type in the table may be an integer type
# (byte, short, or int), but with TSCALi and TZEROi keywords to scale the
# values to floating point. In this case, COL_DTYPE will be real or
# double, while COL_TDTYPE will be the integer type, and COL_TSCAL and
# COL_TZERO will be something other than 1 and 0 respectively.
# COL_DTYPE is the apparent data type, the type as seen by the user and
# by most of the routines in this interface.
define LEN_COLSTRUCT (10 + 3*(FULL_SZ_COLNAME)/SZ_STRUCT)
define COL_NUMBER Memi[$1] # Column number
define COL_OFFSET Memi[$1+1] # Offset from start of row
define COL_LEN Memi[$1+2] # Chars for one cell
define COL_DTYPE Memi[$1+3] # Data type
define COL_TDTYPE Memi[$1+4] # True data type, in FITS table
define COL_NELEM Memi[$1+5] # Length of array
define COL_TSCAL Memd[P2D($1+6)] # TSCAL, if FITS table
define COL_TZERO Memd[P2D($1+8)] # TZERO, if FITS table
define COL_NAME Memc[P2C($1+10)]
define COL_UNITS Memc[P2C($1+10+ FULL_SZ_COLNAME/SZ_STRUCT)]
define COL_FMT Memc[P2C($1+10+2*FULL_SZ_COLNAME/SZ_STRUCT)]
# This structure is a copy of the bytes read from or written to an
# stsdas format table (either row or column ordered).
define LEN_COLDEF 16 # unit = SZ_STRUCT
define SZ_COLDEF (LEN_COLDEF * SZ_STRUCT32)
# Lengths of character strings for column information in an stsdas format
# table. Note that SZ_COLNAME, etc, defined in tbset.h are larger than these.
# Note: These have been increased by one character, so there may not be room
# for an EOS.
define SZ_CD_COLNAME 20 # Size of a column name
define SZ_CD_COLUNITS 20 # Size of string for units
define SZ_CD_COLFMT 8 # Size for print format
define CD_COL_NUMBER Memi[$1] # Column number
define CD_COL_OFFSET Memi[$1+1] # Offset from start of row
define CD_COL_LEN Memi[$1+2] # Chars for one cell
define CD_COL_DTYPE Memi[$1+3] # Data type
define CD_COL_NAME Memc[P2C($1+4)] # Column name 20
define CD_COL_UNITS Memc[P2C($1+9)] # Units 20
define CD_COL_FMT Memc[P2C($1+14)] # Print format 8
# Definitions of data types. These agree with iraf.h at the time of writing.
define TBL_TY_BOOL 1
define TBL_TY_CHAR 2
define TBL_TY_SHORT 3
define TBL_TY_INT 4
define TBL_TY_REAL 6
define TBL_TY_DOUBLE 7
# Undefined double for tables. This agrees with the pre-IRAF 2.11 INDEFD.
define TBL_INDEFD 1.6d38
define TBL_IS_INDEFD (($1)==TBL_INDEFD)
|