TABLES v3.2 Full Release Notes CHANGES TO APPLICATIONS: TITABLE Code in titable.x confuses an array of column selectors (used by tcs_*) with an array of column descriptors (the "column pointers" used by the generic table I/O routines). In particular, in titable.x, tcs_close was being called for an array of column descriptors for the output table, which resulted in a panic error when the table was subsequently closed. This has been replaced by a call to mfree. In tinew.x, a call to tcs_close has been added for the array of column selectors that was populated by tcs_open for the input table. This task does not need the row and column selectors; these are now handled by the table I/O routines. TCALC The arithmetic expression parameter was generating bogus queries because it wasn't being properly initialized. The initialization value was set to an empty string ("") in the poarameter file. TQUERY If the user specifies tquery.uniq=yes, the unique() function is called to discard duplicate rows, based on the list of columns that are to be copied to the output table. Then the select() function is called to select the rows that were to be copied to output. The selection of unique rows is based only on output columns, but the expression for selecting rows can use other columns. If there are several rows that are the same when considering only the output columns, some may be rejected by the row selection criterion while others are accepted. If the one that survives the unique() function happens to be rejected by the row selection expression, a row that should be copied to the output table will be lost. The solution is to call select() before calling unique(). TCREATE The help file was updated to describe multidimensional arrays, and to reflect that the maximum line length is not 1024 characters, but 8196. There is an option to indicate that a column contains arrays, rather than scalar elements. This is specified in the 'cdfile' by putting the array length in brackets following the letter that gives the datatype, e.g. r[400] for a real array of 400 elements. It was supposed to be possible to specify a multidimensional array by giving the axis lengths, separated by commas, within the brackets. The only difference is that a TDIMi keyword (column number i) should be written that gives the individual axis lengths. This did not work, however. The total array size was correct, but the TDIMi keyword was not written. The reason is that the call to tbcisa to assign the TDIMi keyword was made when the column definitions were being read from the 'cdfile', prior to actually opening the table file (i.e. after calling tbtopn but before calling tbtcre), so tbcisa returned without doing anything. The solution was to move the call to tbcisa to a point after tbtcre has been called. This is done by saving the array dimension information in a structure, and returning a pointer to that structure from the function that reads the column definitions.