aboutsummaryrefslogtreecommitdiff
path: root/vendor/cfitsio/changes.txt
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/cfitsio/changes.txt')
-rw-r--r--vendor/cfitsio/changes.txt3844
1 files changed, 3844 insertions, 0 deletions
diff --git a/vendor/cfitsio/changes.txt b/vendor/cfitsio/changes.txt
new file mode 100644
index 00000000..ebd8bb9d
--- /dev/null
+++ b/vendor/cfitsio/changes.txt
@@ -0,0 +1,3844 @@
+ Log of Changes Made to CFITSIO
+
+Version 3.31 - 18 July 2012
+
+ - enhanced the CFITSIO column filtering syntax to allow the comma, in addition
+ to the semi-colon, to be used to separate clauses, for example:
+ [col X,Y;Z = max(X,Y)]. This was done because users are not allowed to
+ enter the semi-colon character in the on-line Hera data processing
+ system due to computer security concerns.
+
+ - enhanced the CFITSIO extended filename syntax to allow specifying image
+ compression parameters (e.g. '[compress Rice]') when opening an existing
+ FITS file with write access. The specified compression parameters will
+ be used by default if more images are appended to the existing file.
+
+ - modified drvrfile.c to do additional file secrity checks when CFITSIO
+ is running within the HEASARC's Hera software system. In this case
+ CFITSIO will not allow FITS files to be created outside of the user's
+ individual Hera data directory area.
+
+ - fixed an issue in fpack and funpack on Windows machines, caused by
+ the fact that the 'rename' function behaves differently on Windows
+ in that it does not clobber an existing file, as it does on Unix
+ platforms.
+
+ - fixed bug in the way byte-swapping was being performed when writing
+ integer*8 null values to an image or binary table column.
+
+ - added the missing macro definition for fffree to fitsio.h.
+
+ - modified the low level table read and write functions in getcol*.c and
+ putcol*.c to remove the 32-bit limitation on the number of elements.
+ These routines now support reading and writing more than 2**31 elements
+ at one time. Thanks to Keh-Cheng Chu (Stanford U.) for the patch.
+
+ - modified Makefile.in so that the shared libcfitsio.so is linked against
+ pthreads and libm.
+
+Version 3.30 - 11 April 2012
+
+ Enhancements
+
+ - Added new routine called fits_is_reentrant which returns 1 or 0 depending on
+ whether or not CFITSIO was compiled with the -D_REENTRANT directive. This can
+ be used to determine if it is safe to use CFITSIO in multi-threaded programs.
+
+ - Implimented much faster byte-swapping algorithms in swapproc.c based on code
+ provided by Julian Taylor at ESO, Garching. These routines significantly
+ improve the FITS image read and write speed (by more than a factor of 2 in
+ some cases) on little-endian machines (e.g., Linux and Microsoft Windows and
+ Macs running on x86 CPUs) where byte-swapping is required when reading and
+ writing data in FITS files. This has no effect on big-endian machines
+ (e.g. Motorola CPUs and some IBM systems). Even faster byte-swapping
+ performance can be achieved in some cases by invoking the new "--enable-sse2"
+ or "--enable-ssse3" configure options when building CFITSIO on machines that
+ have CPUs and compilers that support the SSE2 and SSSE3 machine instructions.
+
+ - added additional support for implicit data type conversion in cases where
+ the floating point image has been losslessly compressed with gzip. The
+ pixels in these compressed images can now be read back as arrays of short,
+ int, and long integers as well as single and double precision floating-point.
+
+ - modified fitsio2.h and f77_wrap.h to recognize IBM System z mainframes by
+ testing if __s390x__ or __s390__ is defined.
+
+ - small change to ffgcrd in getkey.c so that it supports reading a blank
+ keyword (e.g., a keyword whose name simply contains 8 space chracters).
+
+ Bug Fixes
+
+ - fixed a bug in imcomp_decompress_tile that caused the tile-compressed image
+ to be uncompressed incorrectly (even though the tile-compressed image itself
+ was written correctly) under the following specific conditions:
+ - the original FITS image has a "float" datatype (R*4)
+ - one or more of the image tiles cannot be compressed using the standard
+ quantization method and instead are losslessly compressed with gzip
+ - the pixels in these tiles are not all equal to zero (this bug does
+ affect tiles where all the pixels are equal to zero)
+ - the program that is reading the compressed image uses CFITSIO's
+ "implicit datatype conversion" feature to read the "float" image
+ back into an array of "double" pixel values.
+ If all these conditions are met, then the returned pixel values in the
+ affected image tiles will be garbage, with values often ranging
+ up to 10**34. Note that this bug does not affect the fpack/funpack
+ programs, because funpack does not use CFITSIO's implicit datatype
+ conversion feature when uncompressing the image.
+
+Version 3.29 - 2 December 2011
+
+ Enhancements
+
+ - modified Makefile.in to allow configure to override the lib and include
+ destination directories.
+
+ - added (or restored actually) support for tile compression of 1-byte integer
+ images in imcomp_compress_tile. Support for that data type was overlooked
+ during recent updates to this routine.
+
+ - modified the fits_get_token command-line parsing routine to perform more
+ rigorous checks to determine if the token can be interpreted as a number
+ or not.
+
+ - made small modification to fpack.c to not allow the -i2f option (convert
+ image from integer to floating point) with the "-g -q 0" option (do lossless
+ gzip compression). It is more efficient to simply use the -g option alone.
+
+ - made modifications to fitsio.h and drvrfile.c to support reading and
+ writing large FITS files (> 2.1 GB) when building CFITSIO using
+ Microsoft Visual C++ on Windows platforms.
+
+ - added new WCS routine (ffgicsa) which returns the WCS keyword values
+ for a particular WCS version ('A' - 'Z').
+
+ Bug Fixes
+
+ - fixed a problem with multi-threaded apps that open/close FITS files
+ simultaneously by putting mutex locks around the call to
+ fits_already_open and in fits_clear_Fptr.
+
+ - fixed a bug when using the 'regfilter' function to select a subset of the
+ rows in a FITS table that have coordinates that lie within a specified
+ spatial region on the sky. This bug only affects the rarely used panda
+ (and epanda and bpanda) region shapes in which the region is defined by
+ the intersection of an annulus and a pie-shaped wedge. The previous code
+ (starting with version 3.181 of CFITSIO where support for the panda region
+ was first introduced) only worked correctly if the 2 angles that define
+ the wedge have values between -180 and +180. If not, then fewer rows than
+ expected may have been selected from the table.
+
+ - fixed the extended filename parser so that when creating a histogram by
+ binning 2 table columns, if a keyword or column name is given as the
+ weighting factor, then the output histrogram image will have a floating
+ point datatype, not the default integer datatype as is the case when no
+ weigth is specified (e.g. with a filename like
+ "myfile.fits[bin x,y; weight_column]"
+
+ - added fix to the code in imcompress.c to work around a problem with
+ dereferencing the value of a pointer, in cases where the address of
+ that pointer has not been defined (e.g., the nulval variable).
+
+ - modified the byte shuffling algorithm in fits_shuffle_8bytes to work
+ around a strange bug in the proprietary SunStudioExpress C compiler
+ under OpenSolaris.
+
+ - removed spurious messages on the CFITSIO error stack when opening a
+ FITS file with FTP (in drvrnet.c);
+
+Version 3.28 - 12 May 2011
+
+ - added an enhancement to the tiled-image compression method when compressing
+ floating-point image using the standard (lossy) quantization method. In
+ cases where an image tile cannot be quantized, The floating-point pixel values
+ will be losslessly compressed with gzip before writing them to the tile-
+ compressed file. Previously, the uncompressed pixel values would have
+ been written to the file, which obviously requires more disk space.
+
+ - made significant internal changes to the structure of the tile compression
+ and uncompression routines in imcompress.c to make them more modular and
+ easier to maintain.
+
+ - modified configure.in and configure to force it to build a Universal
+ binary on Mac OS X.
+
+ - modified the ffiter function in putcol.c to properly clean up allocated
+ memory if an error occurs.
+
+ - in quantize.c, when searching for the min and max values in a float array,
+ initialize the max value to -FLT_MAX instead of FLT_MIN (and similarly
+ for double array).
+
+Version 3.27 - 3 March 2011
+
+ Enhancements
+
+ - added new routines fits_read_str and fits_delete_str which read or
+ delete, respectively, a header keyword record that contains a specified
+ character string.
+
+ - added a new routine called fits_free_memory which frees the memory
+ that fits_read_key_longstr allocated for the long string keyword value.
+
+ - enhanced the ffmkky routine in fitscore.c to not put a space before the
+ equals sign when writing long string-valued keywords using the ESO
+ HIERARCH keyword convension, if that extra character is needed to
+ fit the length of the keyword name + value string within the 80-character
+ FITS keyword record.
+
+ - made small change to fits_translate_keyword to support translation of
+ blank keywords (where the name = 8 blank chracters)
+
+ - modified fpack so that it uses the minimum of the 2nd, 3rd, and 5th order
+ MAD noise values when quantizing and compressing a floating point image.
+ This is more conservative than just using the 3rd order MAD value alone.
+
+ - added new routine imcomp_copy_prime2img to imcompress.c that is used by
+ funpack to copy any keywords that may have been added to the primary
+ array of the compressed image file (a null image) back into the header of
+ the uncompressed image.
+
+ - enhanced the fits_quantize_float and fits_quantize_double routines in
+ quantize.c to also compress the tile if it is completely filled with
+ null values. Previously, this type of tile would have been written
+ to the output compressed image without any compression.
+
+ - enhanced imcomp_decompress_tile to support implicit datatype conversion
+ when reading a losslessly compressed (with gzip) real*4 image into an
+ array of real*8 values.
+
+ - in imcompress.c, removed possible attempt to free memory that had not
+ been allocated.
+
+
+Version 3.26 - 30 December 2010
+
+ Enhancements
+
+ - defined 2 new macros in fitsio.h:
+ #define CFITSIO_MAJOR 3
+ #define CFITSIO_MINOR 26
+ These may be used within other macros to detect the CFITSIO
+ version number at compile time.
+
+ - modified group.c to initialize the output URL to a null string in
+ fits_url2relurl. Also added more robust tests to see if 2 file
+ pointers point to the same file.
+
+ - enhanced the template keyword parsing code in grparser.c to support
+ the 'D' exponent character in the ASCII representation of floating
+ point keyword values (as in TVAL = 1.23D03). Previously, the parser
+ would have writen this keyword with a string value (TVAL = '1.23D03').
+
+ - modified the low-level routines that write a keyword record to a FITS
+ header so that they silently replace any illegal characters (ASCII
+ values less than 32 or greater than 126) with an ASCII space character.
+ Previously, these routines would have returned with an error when
+ encountering these illegal characters in the keyword record (most commonly
+ tab, carriage return, and line feed characters).
+
+ - made substantial internal changes to imcompress.c in preparation for
+ possible future support for compression methods for FITS tables analogous
+ to the tiled image compression method.
+
+ - replaced all the source code in CFITSIO that was distributed under the
+ GNU General Public License with freely available code. In particular,
+ the gzip file compression and uncompression code was replaced by the
+ zlib compression library. Thus, beginning with this version 3.26 of CFITSIO,
+ other software applications may freely use CFITSIO without necessarily
+ incurring any GNU licensing requirement. See the License.txt file for
+ the CFITSIO licensing requirements.
+
+ - added support for using cfitsio in different 'locales' which use a
+ comma, not a period, as the decimal point character in ASCII
+ representation of a floating point number (e.g., France). This
+ affects how floating point keyword values and floating point numbers
+ in ASCII tables are read and written with the 'printf' and 'strtod'
+ functions.
+
+ - added a new utility routine called fits_copy_rows/ffcprw that copies
+ a specified range of rows from one table to another.
+
+ - enhanced the test for illegal ASCII characters in a header (fftrec) to
+ print out the name of the offending character (e.g TAB or Line Feed) as
+ well as the Hex value of the chracter.
+
+ - modified ffgtbc (in fitscore.c) to support nonstandard vector variable
+ length array columns in binary tables (e.g. with TFORMn = 2000PE(500)').
+
+ - modified the configure file to add "-lm" when linking CFITSIO on
+ Solaris machines.
+
+ - added new routine, fits_get_inttype, to parse an integer keyword value
+ string and return the minimum integer datatype (TBYTE, TSHORT, TLONG,
+ TLONGLONG) required to store the integer value.
+
+ - added new routine, fits_convert_hdr2str, which is similar to fits_hdr2str
+ except that if the input HDU is a tile compressed image (stored
+ in a binary table) then it will first convert that header back to
+ that of a normal uncompressed FITS image before concatenating the header
+ keyword records.
+
+ - modified the file template reading routine (ngp_line_from_file in
+ grparser.c) so that it ignores any carriage return characters (\r)
+ in the line, that might be present, e.g. if the file was created on a
+ Windows machine that uses \r\n as end of line characters.
+
+ - modified the ffoptplt routine in cfileio.c to check if the PCOUNT
+ keyword in the template file has a non-zero value, and if so, resets
+ it to zero in the newly created file.
+
+ Bug Fixes
+
+ - fixed a bug when uncompressing floating-point images that contain Nan
+ values on some 64-bit platforms.
+
+ - fixed a bug when updating the value of the CRPIXn world coordinate
+ system keywords when extracting a subimage from larger FITS image, using the
+ extended CFITSIO syntax (e.g. myimage[1:500:2, 1:500:2]). This bug only
+ affects casee where the pixel increment value is not equal to 1, and caused
+ the coordinate grid to be shifted by between 0.25 pixels (in the case of
+ a pixel increment of 2) and 0.5 pixels (for large pixel increment values).
+
+ - fixed a potential string buffer overflow error in the ffmkls routine
+ that modifies the value and comment strings in a keyword that uses
+ the HEASARC long string keyword convention.
+
+ - fixed a bug in imcompress.c that could cause programs to abort on 64-bit
+ machines when using gzip to tile-compress images. Changed the declaration
+ of clen in imcomp_compress_tile from int to size_t.
+
+Version 3.25 - 9 June 2010
+
+ - fixed bug that was introduced in version 3.13 that broke the ability
+ to reverse an image section along the y-axis with an image section
+ specifier like this: myimage.fits[*,-*]. This bug caused the output
+ image to be filled with zeros.
+
+ - fixed typo in the definition of the ftgprh Fortran wrapper routine
+ in f77_wrap3.c.
+
+ - modified the cfitsio.pc.in configuration file to make the lib path
+ a variable instead of hard coding the path. The provides more
+ flexibility for projects such as suse and fedora when building CFITSIO.
+
+ - fixed bug in imcomp_compress_tile in imcompress.c which caused
+ null pixel values to be written incorrectly in the rare case where
+ the floating-point tile of pixels could not be quantized into integers.
+
+ - modified imcompress.c to add a new specialized routine to uncompress
+ an input image and then write it to a output image on a tile by tile basis.
+ This appears to be faster than the old method of uncompressing the
+ whole image into memory before writing it out. It also supports
+ large images with more than 2**31 pixels.
+
+ - made trivial changes to 2 statements in drvrfile.c to suppress
+ nuisance compiler warnings.
+
+ - some compilers define CLOCKS_PER_SEC as a double instead of an integer,
+ so added an explicted integer type conversion to 2 statements in
+ imcompress.c that used this macro.
+
+ - removed debugging printf statements in drvrnet.c (15 July)
+
+Version 3.24 - 26 January 2010
+
+ - modified fits_translate_keywords so that it silently ignores any
+ illegal ASCII characters in the value or comment fields of the input
+ FITS file. Otherwise, fpack would abort without compressing input
+ files that contained this minor violation of the FITS rules.
+
+ - added support for Super H cpu in fitsio2.h
+
+ - updated funpack to correctly handle the -S option, and to use a
+ more robust algorithm for creating temporary output files.
+
+ - modified the imcomp_compress_tile routine to support the NOCOMPRESS
+ debugging option for real*4 images.
+
+Version 3.23 - 7 January 2010
+
+ - reduced the default value for the floating point image quantization
+ parameter (q) from 16 to 4. This parameter is used when tile compressing
+ floating point images. This change will increase the average compression
+ ratio for floating point images from about 4.6 to about 6.5 without losing
+ any significant information in the image.
+
+ - enhanced the template keyword parsing routine to reject a header
+ template string that only contains a sequence of dashes.
+
+ - enhanced the ASCII region file reading routine to allow tabs as well
+ as spaces between fields in the file.
+
+ - got rid of bogus error message when calling fits_update_key_longstr
+
+ - Made the error message more explicit when CFITSIO tries to write
+ to a GZIP compressed file. Instead of just stating "cannot write
+ to a READONLY file", it will say "cannot write to a GZIP compressed
+ file".
+
+Version 3.22 - 28 October 2009
+
+ - added an option (in imcompress.c) to losslessly compress floating
+ point images, rather than using the default integer scaling method.
+ This option is almost never useful in practice for astronomical
+ images (because the amount of compression is so poor), but it has
+ been added for test comparison purposes.
+
+ - enhanced the dithering option when quantizing and compressing
+ floating point images so that a random dithering starting point
+ is used, so that the same dithering pattern does not get used for
+ every image.
+
+ - modified the architecture setup section of fitsio2.h to support the
+ 64-core 8x8-architecture Tile64 platform (thanks to Ken Mighell, NOAO)
+
+ Fixes
+
+ - fixed a problem that was introduced in version 3.13 of CFITSIO
+ in cases where a program writes it own END keyword to the header
+ instead of letting CFITSIO do it, as is strongly recommended. In
+ one case this caused CFITSIO to rewrite the END keyword and any
+ blank fill keywords in the header many times, causing a
+ noticeable slow-down in the FITS file writing speed.
+
+Version 3.21 - 24 September 2009
+
+ - fixed bug in cfileio.c that caused CFITSIO to crash with a bus error
+ on Mac OS X if CFITSIO was compiled with multi-threaded support (with
+ the --enable-reentrant configure option). The Mac requires an
+ additional thread initialization step that is not required on Linux
+ machines. Even with this fix, occasional bus errors have been seen on
+ some Mac platforms, The bus errors are seen when running the
+ thread_test.c program. The bus errors are very intermittent, and occur
+ less than about 1% of the time, on the affected platforms.
+ These bus errors have not been seen on Linux platforms.
+
+ - fixed invalid C comment delimiter ("//*" should have been "/*")
+ in imcompress.c.
+
+ - Increased the CFITSIO version number string length
+ in fpackutil.c, to fix problem on some platforms when running
+ fpack -V or funpack -V. Also modified the output format of the
+ fpack -L command.
+
+Version 3.20 - 31 August 2009
+
+ - modified configure.in and configure so that it will build the Fortran
+ interface routines by default, even if no Fortran compiler is found
+ in the user's path. Building the interface routines may be disabled
+ by specifying FC="none". This was done at the request of users who
+ obtained CFITSIO from some other standard linux distributions, where
+ CFITSIO was apparently built in an environment that had no Fortran
+ compiler and hence did not build the Fortran wrappers.
+
+ - modified ffchdu (close HDU) so that it calls the routine to update
+ the maximum length of variable length table columns in the TFORM
+ values in all cases where the values may have changed. Previously
+ it would not update the values if a value was already specified in
+ the TFORM value.
+
+ - added 2 new string manipulation functions to the CFITSIO parser
+ (contributed by Craig Markwardt): strmid extracts a substring
+ from a string, and strstr searches for a substring within a string.
+
+ - removed the code in quantize.c that treated "floating-point integer"
+ images as a special case (it would just do a datatype conversion from
+ float to int, and not otherwise quantize the pixel values). This
+ caused complications with the new subtractive dithering feature.
+
+ - enhanced the code for converting floating point images to quantized
+ scaled integer prior to tile-compressing them, to apply a random
+ subtractive dithering, which improves the photometric accuracy
+ of the compressed images.
+
+ - added new internal routine, iraf_delete_file, for use by fpack to
+ delete a pair of IRAF format header and pixel files.
+
+ - small change in cfileio.c in the way it recognizes an IRAF format
+ .imh file. Instead of just requiring that the filename contain the
+ ".imh" string, that string must occur at the end of the file name.
+
+ - fixed bug in the code that is used when tile-compressing real*4 FITS
+ images, which quantizes the floating point pixel values into
+ integer levels. The bug would only appear in the fairly rare
+ circumstance of tile compressing a floating point image that contains
+ null pixels (NaNs) and only when using the lossy Hcompress algorithm
+ (with the s parameter not equal to 1). This could cause underflow of
+ low valued pixels, causing them to appear as very large pixel values
+ (e.g., > 10**30) in the compressed image
+
+ - changed the "if defined" blocks in fitsio.h, fitsio2.h and f77_wrap.h
+ to correctly set the length of long variables on sparc64 machines.
+ Patch contributed by Matthew Truch (U. Penn).
+
+ - modified the HTTP file access code in drvrnet.c to support basic
+ HTTP authentication, where the user supplies a user name and
+ password. The CFITSIO filename format in this case is:
+ "http://username:password@hostname/..."
+ Thanks to Jochen Liske (ESO) for the suggestion and the code.
+
+Version 3.181 (BETA) - 12 May 2009
+
+ - modified region.c and region.h to add support for additional
+ types of region shapes that are supported by ds9: panda, epanda,
+ and bpanda.
+
+ - fixed compiler error when using the new _REENTRANT flag, having to
+ do with the an attempted static definition of Fitsio_Lock in
+ several source files, after declaring it to be non-static in fitsio2.h.
+
+Version 3.18 (BETA) - 10 April 2009
+
+ - Made extensive changes to make CFITSIO thread safe. Previously,
+ all opened FITS files shared a common pool of memory to store
+ the most recently read or written FITS records in the files.
+ In a multi-threaded environment different threads could
+ simultaneously read or write to this common area causing
+ unpredictable results. This was changed so that every opened
+ FITS file has its own private memory area for buffering the
+ file. Most of the changes were in buffers.c, fitsio.h, and
+ fitsio2.h. Additional changes were made to cfileio.c, mainly
+ to put locks around small sections of code when setting up the
+ low-level drivers to read or write the FITS file. Also, locks
+ were needed around the GZIP compression and uncompression code
+ in compress.c., the error message stack access routine in
+ fitscore.c, the encode and decode routines in fits_hcompress.c
+ and fits_hdecompress.c, in ricecomp.c, and the table row
+ selection and table calculator functions. Also, removed the
+ 'static' declaration of the local variables in pliocomp.c
+ which did not appeared to be required and prevented the
+ routines from being thread safe.
+
+ As a consequence of having a separate memory buffer for every
+ FITS file (by default, about 115 kB per file), CFITSIO may now
+ allocate more memory than previously when an application
+ program opens multiple FITS files at once. The read and write
+ speed may also be slightly faster, since the buffers are not
+ shared between files.
+
+ - Added new families of Fortran wrapper routines to read and
+ write values to large tables that have more than 2**31 rows.
+ The arguments that define the first row and first element to
+ read or write must be I*8 integers, not ordinary I*4
+ integers. The names of these new routines have 'LL' appended
+ to them, so for example, ftgcvb becomes ftgcvbll.
+
+ Fixes
+
+ - Corrected an obscure bug in imcompress.c that would have incorrectly
+ written the null values only in the rare case of writing a signed
+ byte array that is then tile compressed using the Hcompress or PLIO
+ algorithm.
+
+Version 3.14 - 18 March 2009
+
+ Enhancements
+
+ - modified the tiled-image compression and uncompression code to
+ support compressing unsigned 16-bit integer images with PLIO.
+ FITS unsigned integer arrays are offset by -32768, but the PLIO
+ algorithm does not work with negative integer values. In this
+ case, an offset of 32768 is added to the array before compression,
+ and then subtracted again when reading the compressed array.
+ IMPORTANT NOTE: This change is not backward compatible, so
+ these PLIO compressed unsigned 16-bit integer images will not be
+ read correctly by previous versions of CFITSIO; the pixel values
+ will have an offset of +32768.
+
+ - minor changes to the fpack utility to print out more complete
+ version information with the -V option, and format the report
+ produced by the -T option more compactly.
+
+ Fixes
+
+ - Modified imcomp_compress_image (which is called by fpack) so that
+ it will preserve any null values (NaNs) if the input image has
+ a floating point datatype (BITPIX = -32 or -64). Null values in
+ integer datatype images are handled correctly.
+
+ - Modified imcomp_copy_comp2img so that it does not copy the
+ ZBLANK keyword, if present, from the compressed image header
+ when uncompressing the image.
+
+ - Fixed typo in the Fortran wrapper macro for the ftexist function.
+
+Version 3.13 - 5 January 2009
+
+ Enhancements
+
+ - updated the typedef of LONGLONG in fitsio.h and cfortran.h to
+ support the Borland compiler which uses the __int64 data type.
+
+ - added new feature to the extended filename syntax so that when
+ performing a filtering operation on specified HDU, if you add
+ a '#' character after the name or number of the HDU, then ONLY
+ that HDU (and the primary array if the HDU is a table) will be
+ copied into the filtered version of the file in memory. Otherwise,
+ by default CFITSIO copies all the HDUs from the input file into
+ memory.
+
+ - when specifying a section, if the specified number of dimensions
+ is less than the number of dimensions in the image, then CFITSIO
+ will use the entire dimension, as if a '*' had been specified.
+ Thus [1:100] is equivalent to [1:100,*] when specifying a section
+ of 2 dimensional image.
+
+ - modified fits_copy_image_section to read/write the section 1 row
+ at a time, instead of the whole section, to reduce memory usage.
+
+ - added new stream:// drivers for reading/writing to stdin/stdout.
+ This driver is somewhat fragile, but for simple FITS read and
+ write operations this driver streams the FITS file on stdin
+ or stdout without first copying the entire file in memory, as is
+ done when specifying the file name as "-".
+
+ - slight modification to ffcopy to make sure that the END keyword
+ is correctly written before copying the data. This is required
+ by the new stream driver.
+
+ - modified ffgcprll, so that when writing data to an HDU, it first
+ checks that the END keyword has been written to the correct place.
+ This is required by the new stream driver.
+
+ Fixes
+
+ - fixed bug in ffgcls2 when reading an ASCII string column in binary
+ tables in cases where the width of the column is greater than 2880
+ characters and when reading more than 1 row at a time. Similar
+ change was made to ffpcls to fix same problem with writing to
+ columns wider than 2880 characters.
+
+ - updated the source files listed in makepc.bat so that it can be
+ used to build CFITSIO with the Borland C++ compiler.
+
+ - fixed overflow error in ffiblk that could cause writing to Large Files
+ (> 2.1 GB) to fail with an error status.
+
+ - fixed a bug in the spatial region code (region.c) with the annulus
+ region. This bug only affected specialized applications which
+ directly use the internal region structure; it does not affect
+ any CFITSIO functions directly.
+
+ - fixed memory corruption bug in region.c that was triggered if the
+ region file contained a large number of excluded regions.
+
+ - got rid of a harmless error message that would appear if filtering
+ a FITS table with a GTI file that has zero rows. (eval_f.c)
+
+ - modified fits_read_rgnfile so that it removes the error messages
+ from the error stack if it is unable to open the region file as
+ a FITS file. (region.c)
+
+Version 3.12 - 8 October 2008
+
+ - modified the histogramming code so that the first pixel in the binned
+ array is chosen as the reference pixel by default, if no other
+ value is previously defined.
+
+ - modified ffitab and ffibin to allow a null pointer to the
+ EXTNAME string, when inserting a table with no name.
+
+Version 3.11 - 19 September 2008
+
+ - optimized the code when tile compressing real*4 images (which get
+ scaled to integers). This produced a modest speed increase. For
+ best performance, one must specify the absolute q quantization
+ parameter, rather than relative to the noise in the tile (which
+ is expensive to compute).
+
+ - modified the FITS region file reading code to check for NaN values,
+ which signify the end of the array of points in a polygon region.
+
+ - removed the test for LONGSIZE == 64 from fitsio.h, since it may
+ not be defined.
+
+ - modified imcompress.c to support unconventional floating point FITS
+ images that also have BSCALE and BZERO keywords. The compressed
+ floating point images are linearly scaled twice in this case.
+
+Version 3.10 - 20 August 2008
+
+ - fixed a number of cases, mainly dealing with long input file names
+ (> 1024 char), where unsafe usage of strcat and strcpy could have caused
+ buffer overflows. These buffer overflows could cause the application
+ to crash, and at least theoretically, could be exploited by a
+ malicious user to execute arbitrary code. There are no known instances
+ of this type of malicious attack on CFITSIO applications, and the
+ likelihood of such an attack seems remote. None the less, it would
+ be prudent for CFITSIO users to upgrade to this new version to guard
+ against this possibility.
+
+ - modified some of the routines to define input character string
+ parameters as "const char *" rather than just "char *" to eliminate
+ some compiler warnings when the calling routine passes a constant
+ string to the CFITSIO routine. Most of the changes were to the
+ keyword name argument in the many routines that read or write keywords.
+
+ - fixed bug when tile-compressing a FITS image which caused all the
+ completely blank keywords in the input header to be deleted from
+ the output compressed image. Also added a feature to preserve any
+ empty FITS blocks in the header (reserved space for future keywords)
+ when compressing or uncompressing an image.
+
+ - fixed small bug in the way the default tile size is set in imcompress.c.
+ (Fix sent in by Paul Price).
+
+ - added support for reading FITS format region files (in addition
+ to the ASCII format that was previously supported). Thanks to
+ Keith Arnaud for modifying region.c to do this.
+
+Version 3.09 - 12 June 2008
+
+ - fixed bug in the calculator function, parse_data, that evaluates
+ expressions then selecting rows or modifying values in table columns.
+ This bug only appeared in unusual circumstances
+ where the calculated value has a null value (= TNULLn). The bug
+ could cause elements to not be flagged as having a null value, or
+ in rare cases could cause valid elements to be flagged as null. This
+ only appears to have affected 64-bit platforms (where size(long) = 8).
+
+ - fixed typo in imcomp_decompress_tile: call to fffi2r8 should have
+ been to fffi4r8.
+
+ - in the imcopy_copy_comp2img routine, moved the call to
+ fits_translate_keywords outside of the 'if' statement. This could
+ affect reading compressed images that did not have a EXTNAME keyword
+ in the header.
+
+ - fixed imcomp_compress_tile in imcompress.c to properly support
+ writing unsigned integers, in place, to tile compressed images.
+
+ - modified fits_read_compressed_img so that if the calling routine
+ specifies nullval = 0, then it will not check for null-valued
+ pixels in the compressed FITS image. This mimics the same
+ behavior when reading normal uncompressed FITS images.
+
+Version 3.08 - 15 April 2008
+
+ - fixed backwards compatibility issue when uncompressing a Rice
+ compressed image that was created with previous versions of
+ CFITSIO (this late fix was added on May 18).
+
+ - small change to cfortran.h to add "extern" to the common block
+ definition. This was done for compatibility with the version
+ of cfortran.h that is distributed by the debian project.
+
+ - relaxed the requirement that a string valued keyword must have a
+ closing quote character. If the quote is missing, CFITSIO will silently
+ append a quote at the end of the keyword record. This change was made
+ because otherwise it is very difficult to correct the keyword
+ because CFITSIO would exit with an error before making the fix.
+
+ - added a new BYTEPIX compression parameter when tile-compressing
+ images with the Rice algorithm.
+
+ - cached the NAXIS and NAXISn keyword values in the fitsio structure
+ for efficiency, to eliminate duplicates reads of these keywords.
+
+ - added variants of the Rice compression and uncompression routines to
+ support short int images (in addition to the routines that support int).
+
+ - moved the definition of LONGLONG_MIN and LONGLONG_MAX from fitsio2.h
+ to fitsio.h, to make it accessible to application programs.
+
+ - make efficiency improvements to fitscore.c, to avoid needless searches
+ through the entire header when reading the required keywords that must
+ be near the beginning of the header.
+
+ - made several improvements to getcol.c to optimize reading of compressed
+ and uncompressed images.
+
+ - changed the compression level in the gzip code from 6 to 1. In most
+ cases this will provide nearly the same amount of compression, but is
+ significantly faster in some cases.
+
+ - added new "helper routines' to imcompress.c to allow applications to
+ specified the "quantize level" and Hcompress scaling and smoothing
+ parameters
+
+ - modified the extended filename syntax to support the "quantize level"
+ and Hcompress scaling and smoothing parameters. The parser in
+ cfileio.c was extensively modified.
+
+ - extensive changes to quantize.c:
+ - replace the "nbits" parameter with "quantize level"
+ - the quantize level is now relative to the RMS noise in the image
+ - the HCOMPRESS scale factor is now relative to the RMS noise
+ - added routines to calculate RMS noise in image
+ (these changes require a change to the main file structure in fitsio.h)
+
+ - initialize errno = 0 before the call to strtol in ffext, in case errno
+ has previously been set by an unrelated error condition.
+
+ - added the corresponding long name for the ffgkyjj routine to longnam.h.
+
+ - changed imcomp_copy_comp2img (in imcompress.c) to not require the
+ presence of the EXTNAME keyword in the input compressed image header.
+
+ - modified imcompress.c to only write the UNCOMPRESSED_DATA column
+ in tile-compressed images if it is actually needed. This eliminates
+ the need to subsequently delete the column if it is not used
+ (which is almost always the case).
+
+ - found that it is necessary to seek to the EOF of a file after
+ truncating the size of the file, to reestablish a definite
+ current location in the file. The required small changes to 3
+ routines: file_truncate (to seek to EOF) and fftrun (to set io_pos)
+ and the truncation routine in drvrmem.c.
+
+ - improved the efficiency when compressing integer images with
+ gzip. Previously, the image was always represented using integer*4
+ pixels, which were then compressed. Now, if the range of pixel
+ values can be represented with integer*2 pixels or integer*1 pixels,
+ then that is used. This change is backward compatible with any
+ compressed images that used the previous method.
+
+ - changed the default tiling pattern when using Hcompress from
+ large squares (200 to 600 pixels wide) to 16 rows of the image.
+ This generally requires less memory, compresses faster, and is more
+ consistent with the default row by row tiling when using the other
+ compression methods.
+
+ - modified imcomp_init_table in imcompress.c to enforce a restriction
+ when using the Hcompress algorithm that the 1st 2 dimensions of sll
+ image tiles must be at least 4 pixels long. Hcompress becomes very
+ inefficient for smaller dimensions, and does not work at all with
+ 1D images.
+
+ - fixed bug in the Hcompress compression algorithm that could affect
+ compression of I*4 images, using non-square compression tiles
+ (in the encode64 routine).
+
+Version 3.07 - 6 December 2007 (internal release)
+
+ - fixed bug with the PLIO image compression routine which silently
+ produced a corrupted compressed image if the uncompressed image pixels
+ were not all in the range 0 to 2**24. (fixed in November)
+
+ - fixed several 'for' loops in imcompress.c which were exceeding the
+ bounds of an array by 1. (fixed in November)
+
+ - fixed a possible, but unlikely, memory overflow issue in iraffits.c.
+
+ - added a clarification to the cfortran.doc file that cfortran.h
+ may be used and distributed under the terms of the GNU Library
+ General Public License.
+
+ - fixed bug in the fits_modify_vector_len routine when modifying
+ the vector length of a 'X' bit column.
+
+Version 3.06 - 27 August 2007
+
+ - modified the imcopy.c utility program (to tile-compress images)
+ so that it writes the default EXTNAME = 'COMPRESSED_IMAGE'
+ keyword in the compressed images, to preserve the behavior of
+ earlier versions of imcopy.
+
+ - modified the angsep function in the FITS calculator (in eval.y)
+ to use haversines, instead of the 'law of cosines', to provide
+ more precision at small angles (< 0.1 arcsec).
+
+Version 3.05 - July 2007 (internal release only)
+
+ - extensive changes to imcompress.c to fully support implicit data
+ type conversion when reading and writing arrays of data to FITS
+ images, where the data type of the array is not the same as the
+ data type of the FITS image. This includes support for null pixels,
+ and data scaling via the BSCALE and BZERO keywords.
+
+ - rewrote the fits_read_tbl_coord routine in wcssub.c, that gets the
+ standard set of WCS keywords appropriate to a pair of columns in a
+ table, to better support the full set of officially approved WCS keywords.
+
+ - made significant changes to histo.c, which creates an image by binning
+ columns of a table, to better translate the WCS keywords in the table
+ header into the WCS keywords that are appropriate for an image HDU.
+
+ - modified imcompress.c so that when pixels are written to a
+ tile-compressed image, the appropriate BSCALE and BZERO values of
+ that image are applied. This fixes a bug in which writing to
+ an unsigned integer datatype image (with BZERO = 32768) was not
+ done correctly.
+
+Version 3.04 - 3 April 2007
+
+ - The various table calculator routines (fits_select_rows, etc.) implicitly
+ assumed that the input table has not been modified immediately prior to
+ the call. To cover cases where the table has been modified a call to
+ ffrdef has been added to ffprs. IN UNUSUAL CASES THIS CHANGE COULD
+ CAUSE CFITSIO TO BEHAVE DIFFERENTLY THAN IN PREVIOUS VERSIONS. For
+ example, opening a FITS table with this column-editing virtual file
+ expression:
+ myfile.fits[3][col A==X; B = sqrt(X)]
+ no longer works, because the X column does not exist when the
+ sqrt expression is evaluated. The correct expression in this case is
+ myfile.fits[3][col A==X; B = sqrt(A)]
+
+ - modified putkey.c to support USHORT_IMG when calling fits_create_img
+ to create a signed byte datatype image.
+
+ - enhanced the column histogramming function to propagate any TCn_k and
+ TPn_k keywords in the table header to the corresponding CDi_j and PCi_j
+ keywords in the image header.
+
+ - enhanced the random, randomn, and randomp functions in the lexical
+ parser to take a vector column name argument to specify the length
+ of the vector of random numbers that should be generated (provided by
+ Craig Markwardt, GSFC)
+
+ - enhanced the ffmcrd routine (to modify an existing header card) to
+ support long string keywords so that any CONTINUE keywords associated
+ with the previous keyword will be deleted.
+
+ - modified the ffgtbp routine to recognize the TDIMn keyword for
+ ASCII string columns in a binary table. The first dimension is
+ taken to be the size of a unit string. (The TFORMn = 'rAw'
+ syntax may also be used to specify the unit string size).
+
+ - in fits_img_decompress, the fits_get_img_param function was called
+ with an invalid dimension size, which caused a fatal error on at
+ least 1 platform.
+
+ - in ffopentest, set the status value before returning in case of error.
+
+ - in the drvrnet.c file, the string terminators needed to be changed
+ from "\n" to "\r\n" to support the strict interpretation of the
+ http and ftp standard that is enforced by some newer web servers.
+
+Version 3.03 - 11 December 2006
+
+ New Routine
+
+ - fits_write_hdu writes the current HDU to a FILE stream (e.g. stdout).
+
+ Changes
+
+ - modified the region parsing code to support region files where the
+ keyword "physical" is on a separate line preceding the region shape
+ token. (However, "physical" coordinates are not fully supported, and
+ are treated identically to "image" coordinates).
+
+ - enhanced the iterator routines to support calculations on 64-bit
+ integer columns and images. Currently, the values are cast to
+ double precision when doing the calculations, which can cause a
+ loss of precision for integer values greater than about 2**52.
+
+ - added support for accessing FITS files on the computational grid.
+ Giuliano Taffoni and Andrea Barisani, at INAF, University of Trieste,
+ Italy, implemented the necessary I/O driver routines in drvrgsiftp.c.
+
+ - modified the tiled image compression/uncompression routines to
+ preserve/restore the original CHECKSUM and DATASUM keywords if they
+ exist. (saved as ZHECKSUM and ZDATASUM in the compressed image)
+
+ - split fits_select_image_section into 2 routines: a higher level routine
+ that creates the output file and copies other HDUs from the input file
+ to the output file, and a lower level routine that extracts the image
+ section from the input image into an output image HDU.
+
+ - Improved the error messages that get generated if one tries to
+ use the lexical parser to perform calculations on variable-length
+ array columns.
+
+ - added "#define MACHINE NATIVE" in fitsio2.h for all machines where
+ BYTESWAPPED == FALSE. This may improve the file writing performance
+ by eliminating the need to allocate a temporary buffer in some cases.
+
+ - modified the configure.in and configure script to fix problems with
+ testing if network services are available, which affects the definition
+ of the HAVE_NET_SERVICES flag.
+
+ - added explicit type casting to all malloc statements, and deleted
+ declarations of unreferenced variables in the image compression code
+ to suppress compiler warnings.
+
+ - fixed incorrect logic in fitsio2.h in the way it determined if numerical
+ values are byteswapped or not on MIPS and ARM architectures.
+
+ - added __BORLANDC__ to the list of environments in fitsio.h that don't
+ use %lld in printf for longlong integers
+
+ - added "#if defined(unix)" around "#include <usistd.h>" statements in
+ several C source files, to make them compatible with Windows.
+
+
+Version 3.02 - 18 Sept 2006
+
+ - applied the security patch to the gzip code, available at
+ http://security.FreeBSD.org/patches/SA-06:21/gzip.patch
+ The insufficient bounds checks in buffer use can cause gzip to crash,
+ and may permit the execution of arbitrary code. The NULL pointer
+ deference can cause gzip to crash. The infinite loop can cause a
+ Denial-of-Service situation where gzip uses all available CPU time.
+
+ - added HCOMPRESS as one of the compression algorithm options in the
+ tiled image compression code. (code provided by Richard White (STScI))
+ Made other improvements to preserve the exact header structure in the
+ compressed image file so that the compressed-and-then-uncompressed FITS
+ image will be as identical as possible to the original FITS image file.
+
+ New Routines
+
+ - the following new routines were added to support reading and writing
+ non-standard extension types:
+ fits_write_exthdr - write required keywords for a conforming extension
+ fits_write_ext - write data to the extension
+ fits_read_ext - read data from the extension
+
+ - added new routines to compute the RMS noise in the background pixels
+ of an image: fits_rms_float and fits_rms_short (take an input
+ array of floats or shorts, respectively).
+
+ Fixes
+
+ - added the missing 64-bit integer case to set of "if (datatype)"
+ statements in the routine that returns information about a
+ particular column (ffgbclll).
+
+ - fixed a parsing error in ffexts in cases where an extension number
+ is followed by a semi-colon and then the column and row number of an
+ array in a binary table. Also removed an extraneous HISTORY keyword
+ that was being written when specifying an input image in a table cel.
+
+ - modified the routine that reads a table column returning a string
+ value (ffgcls) so that if the displayed numerical value is too
+ wide to fit in the specified length string, then it will return
+ a string of "*" characters instead of the number string.
+
+ - small change to fitsio.h to support a particular Fortran and C
+ compiler combination on a SGI Altix system
+
+ - added a test in the gunzip code to prevent seg. fault when trying
+ to uncompress a corrupted file (at least in some cases).
+
+ - fixed a rarely-occurring bug in the routine that copies a table
+ cell into an image; had to call the ffflsh call a few lines earlier.
+
+Version 3.01 - (in FTOOLS 6.1 release)
+
+ - modified fits_copy_image2cell to correctly copy all the appropriate
+ header keywords when copying an image into a table cell
+
+ - in eval.y, explicitly included the code for the lgamma function
+ instead of assuming it is available in a system library (e.g., the
+ lgamma function is currently not included in MS Visual++ libraries)
+
+ - modified the logic in fits_pixel_filter so that the default data
+ type of the output image will be promoted to at least BITPIX = -32
+ (a single precision floating point) if the expression that is being
+ evaluated resolves to a floating point result. If the expression
+ resolves to an integer result, the output image will have the same
+ BITPIX as the input image.
+
+ - in fits_copy_cell2image, added 5 more WCS keywords to the list of
+ keywords related to other columns that should be deleted in the
+ output image header.
+
+ - disabled code in cfileio.c that would write HISTORY keywords to the
+ output file in fits_copy_image2cell and cell2image, because some tasks
+ would not want these extraneous HISTORY keywords.
+
+ - added 2 new random number functions to the CFITSIO parser
+ RANDOMN() - produces a normal deviate (mean=0, stddev=1)
+ RANDOMP(X) - produces a Poisson deviate for an expected # of counts X
+
+ - in f77_wrap.h, removed the restriction that "g77Fortran" must be
+ defined on 64-bit Itanium machines before assuming that
+ sizeof(long) = 8. It appears that "long"s are always
+ 8 bytes long on this machine, regardless of what compilers are used.
+
+ - added test in fitsio.h so that LONGLONG cannot be multiply defined
+
+ - modified longnam.h so that both "fits_write_nulrows" and
+ "fits_write_nullrows" get replace by the string "ffprwu". This
+ fixes a documentation error regarding the long name of this
+ routine.
+
+ Bug fixes
+
+ - fixed a potential null character string dereferencing error in the
+ the ffphtb and ffphbn routines that write the FITS table keywords.
+ This concerned the optional TUNITn keywords.
+
+ - fixed a few issues in fits_copy_cell2image and fits_copy_image2cell
+ related to converting some WCS keyword between the image extension
+ form and the table cell form of the keyword. (cfileio.c)
+
+ - fixed bug in fits_translate_keyword (fitscore.c) that, e.g., caused
+ 'EQUINOX' to be translated to EQUINOXA' if the pattern is 'EQUINOXa'
+
+ - fixed 2 bugs that could affect 'tile compressed' floating point
+ images that contain NaN pixels (null pixels). First, the
+ ZBLANK keyword was not being written, and second, an integer
+ overflow could occur when computing the BZERO offset in the
+ compressed array. (quantize.c and imcompress.c)
+
+Version 3.006 - 20 February 2006 -(first full release of v3)
+
+ - enhanced the 'col' extended filename syntax to support keyword name
+ expressions like
+ [col error=sqrt(rate); #TUNIT# = 'counts/s'],
+ in which the trailing '#' will be replaced by the column number
+ of the most recently referenced column.
+
+ - fixed bug in the parse_data iterator work function that caused it
+ to fail to return a value of -1 in cases where only a selected
+ set of rows were to be processed. (affected Fv)
+
+ - added code to fitsio.h and cfortran.h to typedef LONGLONG to
+ the appropriate 8-byte integer data type. Most compilers now
+ support the 'long long' data type, but older MS Visual C++
+ compilers used '__int64' instead.
+
+ - made several small changes based on testing by Martin Reinecke:
+ o in eval.y, change 'int undef' to 'long undef'
+ o in getcold.c and getcole.c, fixed a couple format conversion
+ specifiers when displaying the value of long long variables.
+ o in fitsio.h, modified the definition of USE_LL_SUFFIX in the
+ case of Athon64 machines.
+ o in fitsio2.h, defined BYTESWAPPED in the case of SGI machines.
+ o in group.c, added 'include unistd.h' to get rid of compiler warning.
+
+Version 3.005 - 20 December 2005 (beta)
+
+ - cfortran.h has been enhanced to support 64-bit integer parameters
+ when calling C routines from Fortran. This modification was kindly
+ provided by Martin Reinecke (MPE, Garching).
+
+ - Many new Fortran wrapper routines have been added to support reading
+ and writing 64-bit integer values in FITS files. These new routines
+ are documented in the updated version of the 'FITSIO User's Guide'
+ for Fortran programmers.
+
+ - fixed a problem in the fits_get_keyclass routine that caused it
+ to not recognize the special COMMENT keywords at the beginning
+ of most FITS files that defines the FITS format.
+
+ - added a new check to the ffifile routine that parses the
+ input extended file name, to distinguish between a FITS extension
+ name that begins with 'pix', and a pixel filtering operator that
+ begins with the 'pix' keyword.
+
+ - small change to the WCSLIB interface routine, fits_read_wcstab, to
+ be more permissive in allowing the TDIMn keyword to be omitted for
+ degenerate coordinate array.
+
+Version 3.004 - 16 September 2005 (3rd public beta release)
+
+ - a major enhancement to the CFITSIO virtual file parser was provided
+ by Robert Wiegand (GSFC). One can now specify filtering operations
+ that will be applied on the fly to the pixel values in a FITS image.
+ For example [pix sqrt(X)] will create a virtual FITS image where the
+ pixel values are the square root of the input image pixels.
+
+ - modified region.c so that it interprets the position angles of regions
+ in a SAO style region file in the same way as DS9. In particular, if
+ the region parameters are given in WCS units, then the position angle
+ should be relative to the WCS coordinates of the image (increasing CCW
+ from West) instead of relative to the X/Y pixel coordinate system.
+ This only affects rotated images (e.g. with non-zero CROTA2 keyword)
+ with elliptical or rectangular regions.
+
+ - cleaned up fitsio.h and fitsio2.h to make the definition of LONGLONG
+ and BYTESWAPPED and MACHINE more logical.
+
+ - removed HAVE_LONGLONG everywhere since it is no longer needed (the
+ compiler now must have an 8-byte integer datatype to build CFITSIO).
+
+ - added support for the 64-bit IBM AIX platform
+
+ - modified eval.y so that the circle, ellipse, box, and near functions
+ can operate on vectors as well as scalars. This allows region filtering
+ on images that are stored in a vector cell in a binary table.
+ (provided by Craig Markwardt, GSFC)
+
+ New Routines
+
+ - added new fits_read_wcstab routine that serves as an interface to
+ Mark Calabretta's wcslib library for reading WCS information when
+ the -TAB table lookup convention is used in the FITS file.
+
+ - added new fits_write_nullrows routine, which writes null values into
+ every column of a specified range of rows in a FITS table.
+
+ - added the fits_translate_keyword and fits_translate_keywords utility
+ routines for converting the names of keywords when moving columns and
+ images around.
+
+ - added fits_copy_cell2image and fits_copy_image2cell routines for
+ copying an image extension (or primary array) to or from a cell
+ in a binary table vector column.
+
+ Bug fixes
+
+ - fixed a memory leak in eval.y; was fixed by changing a call to malloc
+ to cmalloc instead.
+
+ - changed the definition of several global variables at the beginning
+ of buffers.c to make them 'static' and thus invisible to applications
+ programs.
+
+ - in fits_copy_image_cell, added a call to flush the internal buffers
+ before reading from the file, in case any records had been modified.
+
+Version 3.003 - 28 July 2005 - 2nd public beta release (used in HEASOFT)
+
+ Enhancements
+
+ - enhanced the string column reading routing fits_get_col_str to
+ support cases where the user enters a null pointer (rather than
+ a null string) as the nulval parameter.
+
+ - modified the low level ffread and ffwrite routines that physically
+ read and write data from the FITS file so that they write the name
+ of the file to the CFITSIO error stack if an error occurs.
+
+ - changed the definition of fits_open_file into a macro that will test
+ that the version of the fitsio.h include file that was used to
+ build the CFITSIO library is the same version as included when
+ compiling the application program.
+
+ - made a simple modification to region.c to support regions files
+ of type "linear", for compatibility with ds9 and fv.
+
+ - modified the internal ffgpr routine (and renamed it ffgprll) so
+ that it returns the TNULL value as a LONGLONG parameter instead
+ of 'long'.
+
+ - in fits_get_col_display_width, added support for TFORM = 'k'
+
+ - modified fitsio.h, fitsio2.h, and f77_wrap.h to add test for (_SX)
+ to identify NEC SX supercomputers.
+
+ - modified eval_f.c to treat table columns of TULONG (unsigned long)
+ as a double. Also added support for TLONGLONG (8-byte integers) as
+ a double, which is only a temporary fix, since doubles only have about
+ 52 bits of precision.
+
+ - changed the 'blank' parameter in the internal ffgphd function to
+ to type LONGLONG to support integer*8 FITS images.
+
+ - when reading the TNULL keyword value, now use ffc2jj instead of
+ ffc2ii, to support integer*8 values.
+
+ Bug fixes
+
+ - fixed a significant bug when writing character strings to a variable
+ length array column of a binary table. This bug would result in some
+ unused space in the variable length heap, making the heap somewhat
+ larger than necessary. This in itself is usually a minor issue, since
+ the FITS files are perfectly valid, and other software should have
+ no problems reading back the characters strings. In some cases, however,
+ this problem could cause the program that is writing the table
+ to exit with a status = 108 disk read error.
+
+ - modified the standalone imcopy.c utility program to fix a memory allocation
+ bug when running on 64-bit platforms where sizeof(long) = 8 bytes.
+
+ - added an immediate 'return' statement to ffgtcl if the input status >0,
+ to prevent a segfault on some platforms.
+
+Version 3.002 - 15 April 2005 - first public beta release
+
+ - in drvrfile.c, if it fails to open the file for some reason, then
+ it should reset file_outfile to a null string, to avoid errors on
+ a subsequent call to open a file.
+
+ - updated fits_get_keyclass to recognize most of the WCS keywords
+ defined in the WCS Papers I and II.
+
+Version 3.001 - 15 March 2005 - released with HEASOFT 6.0
+
+ - numerous minor changes to the code to get rid of compiler warning
+ messages, mainly dealing with numerical data type casting and the
+ subsequent possible loss of precision in the result.
+
+Version 3.000 - 1 March 2005 (internal beta release)
+
+ Enhancements:
+
+ - Made major changes to many of the CFITSIO routines to more generally
+ support Large Files (> 2.1 GB). These changes are intended to
+ be 100% backward compatible with software that used the previous
+ versions of CFITSIO. The datatype of many of the integer parameters
+ in the CFITSIO functions has been changed from 'long' to 'LONGLONG',
+ which is typedef'ed to be equivalent to an 8-byte integer datatype on
+ each platform. With these changes, CFITSIO supports the following:
+ - integer FITS keywords with absolute values > 2**31
+ - FITS files with total sizes > 2**31 bytes
+ - FITS tables in which the number of rows, the row width, or
+ the size of the heap is > 2**31 bytes
+ - FITS images with dimensions > 2**31 bytes (support is still
+ somewhat limited, with full support to be added later).
+
+ - added another lexical parser function (thanks to Craig Markwardt,
+ GSFC): angsep computes the angular separation between 2 positions
+ on the celestial sphere.
+
+ - modified the image subset extraction code (e.g., when specifying
+ an image subregion when opening the file, such as
+ 'myimage.fits[21:40, 81:90]') so that in addition to
+ updating the values of the primary WCS keywords CRPIXk, CDELTi, and
+ CDj_i in the extracted/binned image, it also looks for and updates
+ any secondary WCS keywords (e.g., 'CRPIX1P').
+
+ - made cosmetic change to group.c, so that when a group table is
+ copied, any extra columns will be appended after the last existing
+ column, instead of being inserted before the last column.
+
+ - modified the routines that read tile compressed images to support
+ NULL as the input value for the 'anynul' parameter (meaning the
+ calling program does not want the value of 'anynul' returned to it).
+
+ - when constructing or parsing a year/month/day character string,
+ (e.g, when writing the DATE keyword) the routines now rigorously
+ verify that the input day value is valid for the given month
+ (including leap years).
+
+ - added some checks in cfileio.c to detect if some vital parameters
+ that are stored in memory have been corrupted. This can occur if
+ a user's program writes to areas of memory that it did not allocate.
+
+ - added the wcsutil_alternate.c source code file which contains
+ non-working stubs for the 2 Classic AIPS world coordinate
+ conversion routines that are distributed under the GNU General
+ Public License. Users who are unwilling or unable to distribute
+ their software under the General Public License may use this
+ alternate source file which has no GPL restrictions, instead
+ of wcsutil.c. This will have no effect on programs that use
+ CFITSIO as long as they do not call the fits_pix_to_world/ffwldp
+ or fits_world_to_pix/ffxypx routines.
+
+ Bug Fixes
+
+ - in ffdtdm (which parses the TDIMn keyword value), the check for
+ consistency between the length of the array defined by TDIMn and
+ the size of the TFORMn repeat value, is now not performed for variable
+ length array columns (which always have repeat = 1).
+
+ - fixed byteswapping problem when writing null values to non-standard
+ long integer FITS images with BITPIX = 64 and FITS table columns with
+ TFORMn = 'K'.
+
+ - fixed buffer overflow problem in fits_parse_template/ffgthd that
+ occurred only if the input template keyword value string was much
+ longer than can fit in an 80-char header record.
+
+Version 2.510 - 2 December 2004
+
+ New Routines:
+
+ - added fits_open_diskfile and fits_create_diskfile routines that simply
+ open or create a FITS file with a specified name. CFITSIO does not
+ try to parse the name using the extended filename syntax.
+
+ - 2 new C functions, CFITS2Unit and CUnit2FITS, were added to convert
+ between the C fitsfile pointer value and the Fortran unit number.
+ These functions may be useful in mixed language C and Fortran programs.
+
+ Enhancements:
+
+ - added the ability to recognize and open a compressed FITS file
+ (compressed with gzip or unix compress) on the stdin standard input
+ stream.
+
+ - Craig Markwardt (GSFC) provided 2 more lexical parser functions:
+ accum(x) and seqdiff(x) that compute the cumulative sum and the
+ sequential difference of the values of x.
+
+ - modified putcole.c and putcold.c so that when writing arrays of
+ pixels to the FITS image or column that contain null values, and
+ there are also numerical overflows when converting some of the
+ non-null values to the FITS values, CFITSIO will now ignore the
+ overflow error until after all the data have been written. Previously,
+ in some circumstances CFITSIO would have simply stopped writing any
+ data after the first overflow error.
+
+ - modified fitsio2.h to try to eliminate compiler warning messages
+ on some platforms about the use of 'long long' constants when
+ defining the value of LONGLONG_MAX (whether to use L or LL
+ suffix).
+
+ - modified region.c to support 'physical' regions in addition to
+ 'image', 'fk4', etc.
+
+ - modified ffiurl (input filename parsing routine) to increase the
+ maximum allowed extension number that can be specified from 9999
+ to 99999 (e.g. 'myfile.fits+99999')
+
+ Bug Fixes:
+
+ - added check to fits_create_template to force it to start with
+ the primary array in the template file, in case an extension
+ number was specified as part of the template FITS file name.
+
+Version 2.500 - 28 & 30 July 2004
+
+ New Routine:
+
+ - fits_file_exists tests whether the specified input file, or a
+ compressed version of the file, exists on disk.
+
+ Enhancements:
+
+ - modified the way CFITSIO reads and writes data in COMPLEX ('C') and
+ DBLCOMPLEX 'M' columns. Now, in all cases, when referring to the
+ number of elements in the vector, or the value of the offset to a
+ particular element within the vector, CFITSIO considers each pair of
+ numbers (the imaginary and real parts) as a single element instead of
+ treating each single number as an element. In particular, this changes
+ the behavior of fits_write_col_null when writing to complex columns.
+ It also changes the length of the 'nullarray' vector in the
+ fits_read_colnull routine; it is now only 1/2 as long as before.
+ Each element of the nullarray is set = 1 if either the real or
+ imaginary parts of the corresponding complex value have a null
+ value.(this change was added to version 2.500 on 30 July).
+
+ - Craig Markwardt, at GSFC, provided a number of significant enhancements
+ to the CFITSIO lexical parser that is used to evaluate expressions:
+
+ - the parser now can operate on bit columns ('X') in a similar
+ way as for other numeric columns (e.g., 'B' or 'I' columns)
+
+ - range checking has been implemented, so that the following
+ conditions return a Null value, rather than returning an error:
+ divide by zero, sqrt(negative), arccos(>1), arcsin(>1),
+ log(negative), log10(negative)
+
+ - new vector functions: MEDIAN, AVERAGE, STDDEV, and
+ NVALID (returns the number of non-null values in the vector)
+
+ - all the new functions (and SUM, MIN and MAX) ignore null values
+
+ - modified the iterator to support variable-length array columns
+
+ - modified configure to support AIX systems that have flock in a non-
+ standard location.
+
+ - modified configure to remove the -D_FILE_OFFSET_BITS flag when running
+ on Mac Darwin systems. This caused conflicts with the Fortran
+ wrappers, and should only be needed in any case when using CFITSIO
+ to read/write FITS files greater than 2.1 GB in size.
+
+ - modified fitsio2.h to support compilers that define LONG_LONG_MAX.
+
+ - modified ffrsim (resize an existing image) so that it supports changing
+ the datatype to an unsigned integer image using the USHORT_IMG and
+ ULONG_IMG definitions.
+
+ - modified the disk file driver (drvrfile.c) so that if an output
+ file is specified when opening an ordinary file (e.g. with the syntax
+ 'myfile.fits(outputfile.fits)' then it will make a copy of the file,
+ close the original file and open the copy. Previously, the
+ specified output file would be ignored unless the file was compressed.
+
+ - modified f77_wrap.h and f77_wrap3.c to support the Fortran wrappers
+ on 64-bit AMD Opteron machines
+
+ Bug fixes:
+
+ - made small change to ffsrow in eval_f.c to avoid potential array
+ bounds overflow.
+
+ - made small change to group.c to fix problem where an 'int' was
+ incorrectly being cast to a 'long'.
+
+ - corrected a memory allocation error in the new fits_hdr2str routine
+ that was added in version 2.48
+
+ - The on-the-fly row-selection filtering would fail with a segfault
+ if the length of a table row (NAXIS1 value) was greater than
+ 500000 bytes. A small change to eval_f.c was required to fix this.
+
+Version 2.490 - 11 February 2004
+
+ Bug fixes:
+
+ - fixed a bug that was introduced in the previous release, which caused
+ the CFITSIO parser to no longer move to a named extension when opening
+ a FITS file, e.g., when opening myfile.fit[events] CFITSIO would just
+ open the primary array instead of moving to the EVENTS extension.
+
+ - new group.c file from the INTEGRAL Science Data Center. It fixes
+ a problem when you attach a child to a parent and they are both
+ is the same file, but, that parent contains groups in other files.
+ In certain cases the attach would not happen because it seemed that
+ the new child was already in the parent group.
+
+ - fixed bug in fits_calculator_rng when performing a calculation
+ on a range of rows in a table, so that it does not reset the
+ value in all the other rows that are not in the range = 0.
+
+ - modified fits_write_chksum so that it updates the TFORMn
+ keywords for any variable length vector table columns BEFORE
+ calculating the CHECKSUM values. Otherwise the CHECKSUM
+ value is invalidated when the HDU is subsequently closed.
+
+Version 2.480 - 28 January 2004
+
+ New Routines:
+
+ - fits_get_img_equivtype - just like fits_get_img_type, except in
+ the case of scaled integer images, it returns the 'equivalent'
+ data type that is necessary to store the scaled data values.
+
+ - fits_hdr2str copies all the header keywords in the current HDU
+ into a single long character string. This is a convenient method
+ of passing the header information to other subroutines.
+ The user may exclude any specified keywords from the list.
+
+ Enhancements:
+
+ - modified the filename parser so that it accepts extension
+ names that begin with digits, as in 'myfile.fits[123TEST]'.
+ In this case CFITSIO will try to open the extension with
+ EXTNAME = '123TEST' instead of trying to move to the 123rd
+ extension in the file.
+
+ - the template keyword parser now preserves the comments on the
+ the mandatory FITS keywords if present, otherwise a standard
+ default comment is provided.
+
+ - modified the ftp driver file (drvrnet.c) to overcome a timeout
+ or hangup problem caused by some firewall software at the user's
+ end (Thanks to Bruce O'Neel for this fix).
+
+ - modified iraffits.c to incorporate Doug Mink's latest changes to
+ his wcstools library routines. The biggest change is that now
+ the actual image dimensions, rather than the physically stored
+ dimensions, are used when converting an IRAF file to FITS.
+
+ Bug fixes:
+
+ - when writing to ASCII FITS tables, the 'elemnum' parameter was
+ supposed to be ignored if it did not have the default value of 1.
+ In some cases however setting elemnum to a value other than 1
+ could cause the wrong number of rows to be produced in the output
+ table.
+
+ - If a cfitsio calculator expression was imported from a text file
+ (e.g. using the extended filename syntax 'file.fits[col @file.calc]')
+ and if any individual lines in that text file were greater than
+ 255 characters long, then a space character would be inserted
+ after the 255th character. This could corrupt the line if the space
+ was inserted within a column name or keyword name token.
+
+Version 2.480beta (used in the FTOOLS 5.3 release, 1 Nov 2003)
+
+ New Routines:
+
+ - fits_get_eqcoltype - just like fits_get_coltype, except in the
+ case of scaled integer columns, it returns the 'equivalent'
+ data type that is necessary to store the scaled data values.
+
+ - fits_split_names - splits an input string containing a comma or
+ space delimited list of names (typically file names or column
+ names) into individual name tokens.
+
+ Enhancements:
+
+ - changed fhist in histo.c so that it can make histograms of ASCII
+ table columns as well as binary table columns (as long as they
+ contain numeric data).
+
+ Bug fixes:
+
+ - removed an erroneous reference to listhead.c in makefile.vcc, that is
+ used to build the cfitsio dll under Windows. This caused a 'main'
+ routine to be added to the library, which causes problems when linking
+ fortran programs to cfitsio under windows.
+
+ - if an error occurs when opening for a 2nd time (with ffopen) a file that
+ is already open (e.g., the specified extension doesn't exist), and
+ if the file had been modified before attempting to reopen it, then
+ the modified buffers may not get written to disk and the internal
+ state of the file may become corrupted. ffclos was modified to
+ always set status=0 before calling ffflsh if the file has been
+ concurrently opened more than once.
+
+Version 2.470 - 18 August 2003
+
+ Enhancements:
+
+ - defined 'TSBYTE' to represent the 'signed char' datatype (similar to
+ 'TBYTE' that represents the 'unsigned char' datatype) and added
+ support for this datatype to all the routines that read or write
+ data to a FITS image or table. This was implemented by adding 2
+ new C source code files to the package: getcolsb.c and putcolsb.c.
+
+ - Defined a new '1S' shorthand data code for a signed byte column in
+ a binary table. CFITSIO will write TFORMn = '1B' and
+ TZEROn = -128 in this case, which is the convention used to
+ store signed byte values in a 'B' type column.
+
+ - in fitsio2.h, added test of whether `__x86_64__` is defined, to
+ support the new AMD Opteron 64-bit processor
+
+ - modified configure to not use the -fast compiler flag on Solaris
+ platforms when using the proprietary Solaris cc compiler. This
+ flag causes compilation problems in eval_y.c (compiler just
+ hangs forever).
+
+ Bug fixes:
+
+ - In the special case of writing 0 elements to a vector table column
+ that contains 0 rows, ffgcpr no longer adds a blank row to the table.
+
+ - added error checking code for cases where a ASCII string column
+ in a binary table is greater than 28800 characters wide, to avoid
+ going into an infinite loop.
+
+ - the fits_get_col_display_width routine was incorrectly returning
+ width = 0 for a 'A' binary table column that did not have an
+ explicit vector length character.
+
+Version 2.460 - 20 May 2003
+
+ Enhancements:
+
+ - modified the HTTP driver in drvrnet.c so that CFITSIO can read
+ FITS files via a proxy HTTP server. (This code was contributed by
+ Philippe Prugniel, Obs. de Lyon). To use this feature, the
+ 'http_proxy' environment variable must be defined with the
+ address (URL) and port number of the proxy server, i.e.,
+ > setenv http_proxy http://heasarc.gsfc.nasa.gov:3128
+ will use port 3128 on heasarc.gsfc.nasa.gov
+
+ - suppressed some compiler warnings by casting a variable of
+ type 'size_t' to type 'int' in fftkey (in fitscore.c) and
+ iraftofits and irafrdimge (in iraffits.c).
+
+Version 2.450 - 30 April 2003
+
+ Enhancements:
+
+ - modified the WCS keyword reading routine (ffgics) to support cases
+ where some of the CDi_j keywords are omitted (with an assumed
+ value = 0).
+
+ - Made a change to http_open_network in drvrnet.c to add a 'Host: '
+ string to the open request. This is required by newer HTTP 1.1
+ servers (so-called virtual servers).
+
+ - modified ffgcll (read logical table column) to return the illegal
+ character value itself if the FITS file contains a logical value that is
+ not equal to T, F or zero. Previously it treated this case the
+ same as if the FITS file value was = 0.
+
+ - modified fits_movnam_hdu (ffmnhd) so that it will move to a tile-
+ compressed image (that is stored in a binary table) if the input
+ desired HDU type is BINARY_TBL as well as if the HDU type = IMAGE_HDU.
+
+ Bug fixes:
+
+ - in the routine that checks the data fill bytes (ffcdfl), the call
+ to ffmbyt should not ignore an EOF error when trying to read the bytes.
+ This is a little-used routine that is not called by any other CFITSIO
+ routine.
+
+ - fits_copy_file was not reporting an error if it hit the End Of File
+ while copying the last extension in the input file to the output file.
+
+ - fixed inconsistencies in the virtual file column filter parser
+ (ffedit_columns) to properly support expressions which create or
+ modify a keyword, instead of a column. Previously it was only possible
+ to modify keywords in a table extension (not an image), and the
+ keyword filtering could cause some of the table columns to not
+ get propagated into the virtual file. Also, spaces are now
+ allowed within the specified keyword comment field.
+
+ - ffdtyp was incorrectly returning the data type of FITS keyword
+ values of the form '1E-09' (i.e., an exponential value without
+ a decimal point) as integer rather than floating point.
+
+ - The enhancement in the previous 2.440 release to allow more files to be
+ opened at one time introduced a bug: if ffclos is called with
+ a non-zero status value, then any subsequent call to ffopen will likely
+ cause a segmentation fault. The fits_clear_Fptr routine was modified
+ to fix this.
+
+ - rearranged the order of some computations in fits_resize_img so as
+ to not exceed the range of a 32-bit integer when dealing with
+ large images.
+
+ - the template parser routine, ngp_read_xtension, was testing for
+ "ASCIITABLE" instead of "TABLE" as the XTENSION value of an ASCII
+ table, and it did not allow for optional trailing spaces in the IMAGE"
+ or "TABLE" string value.
+
+Version 2.440 - 8 January 2003
+
+ Enhancements:
+
+ - modified the iterator function, ffiter, to operate on random
+ groups files.
+
+ - decoupled the NIOBUF (= 40) parameter from the limit on the number
+ FITS files that can be opened, so that more files may be opened
+ without the overhead of having to increase the number of NIOBUF
+ buffers. A new NMAXFILES parameter is defined in fitsio2.h which sets
+ the maximum number of opened FITS files. It is set = 300 by default.
+ Note however, that the underlying compiler or operating system may
+ not allow this many files to be opened at one time.
+
+ - updated the version of cfortran.h that is distributed with CFITSIO from
+ version 3.9 to version 4.4. This required changes to f77_wrap.h
+ and f77_wrap3.c. The original cfortran.h v4.4 file was modified
+ slightly to support CFITSIO and ftools (see comments in the header
+ of cfortran.h).
+
+ - modified ffhist so that it copies all the non-structural keywords from
+ the original binary table header to the binned image header.
+
+ - modified fits_get_keyclass so that it recognizes EXTNAME =
+ COMPRESSED_IMAGE as a special tile compression keyword.
+
+ - modified Makefile.in to support the standard --prefix convention
+ for specifying the install target directory.
+
+ Bug fixes:
+
+ - in fits_decompress_img, needed to add a call to ffpscl to turn
+ off the BZERO and BSCALE scaling when reading the compressed image.
+
+Version 2.430 - 4 November 2002
+
+ Enhancements:
+
+ - modified fits_create_hdu/ffcrhd so that it returns without doing
+ anything and does not generate an error if the current HDU is
+ already an empty HDU. There is no need in this case to append
+ a new empty HDU to the file.
+
+ - new version of group.c (supplied by B. O'Neel at the ISDC) fixes 2
+ limitations: 1 - Groups now have 256 characters rather than 160
+ for the path lengths in the group tables. - ISDC SPR 1720. 2 -
+ Groups now can have backpointers longer than 68 chars using the long
+ string convention. - ISDC SPR 1738.
+
+ - small change to f77_wrap.h and f77_wrap3.c to support the fortran
+ wrappers on SUN solaris 64-bit sparc systems (see also change to v2.033)
+
+ - small change to find_column in eval_f.c to support unsigned long
+ columns in binary tables (with TZEROn = 2147483648.0)
+
+ - small modification to cfortran.h to support Mac OS-X, (Darwin)
+
+ Bug fixes:
+
+ - When reading tile-compress images, the BSCALE and BZERO scaling
+ keywords were not being applied, if present.
+
+ - Previous changes to the error message stack code caused the
+ tile compressed image routines to not clean up spurious error
+ messages properly.
+
+ - fits_open_image was not skipping over null primary arrays.
+
+Version 2.420 - 19 July 2002
+
+ Enhancements:
+
+ - modified the virtual filename parser to support exponential notation
+ when specifying the min, max or binsize in a binning specifier, as in:
+ myfile.fits[binr X=1:10:1.0E-01, Y=1:10:1.0E-01]
+
+ - removed the limitation on the maximum number of HDUs in a FITS file
+ (limit used to be 1000 HDUs per file). Now any number of HDUs
+ can be written/read in a FITS file. (BUT files that have huge numbers
+ of HDUs can be difficult to manage and are not recommended);
+
+ - modified grparser.c to support HIERARCH keywords, based on
+ code supplied by Richard Mathar (Max-Planck)
+
+ - moved the ffflsh (fits_flush_buffer) from the private to the
+ public interface, since this routine may be useful for some
+ applications. It is much faster than ffflus.
+
+ - small change to the definition of OFF_T in fitsio.h to support
+ large files on IBM AIX operating systems.
+
+ Bug fixes:
+
+ - fixed potential problem reading beyond array bounds in ffpkls. This
+ would not have affected the content of any previously generated FITS
+ files.
+
+ - in the net driver code in drvrnet.c, the requested protocol string
+ was changed from "http/1.0" to "HTTP/1.0" to support apache 1.3.26.
+
+ - When using the virtual file syntax to open a vector cell in a binary
+ table as if it were a primary array image, there was a bug
+ in fits_copy_image_cell which garbled the data if the vector
+ was more than 30000 bytes long.
+
+ - fixed problem that caused fits_report_error to crash under Visual
+ C++ on Windows systems. The fix is to use the '/MD' switch
+ on the cl command line, or, in Visual Studio, under project
+ settings / C++ select use runtime library multithreaded DLL
+
+ - modified ffpscl so it does not attempt to reset the scaling values
+ in the internal structure if the image is tile-compressed.
+
+ - fixed multiple bugs in mem_rawfile_open which affected the case
+ where a raw binary file is read and converted on the fly into
+ a FITS file.
+
+ - several small changes to group.c to suppress compiler warnings.
+
+Version 2.410 - 22 April 2002 (used in the FTOOLS 5.2 release)
+
+ New Routines:
+
+ - fits_open_data behaves similarly to fits_open_file except that it
+ also will move to the first HDU containing significant data if
+ and an explicit HDU name or number to open was not specified.
+ This is useful for automatically skipping over a null primary
+ array when opening the file.
+
+ - fits_open_table and fits_open_image behaves similarly to
+ fits_open_data, except they move to the first table or image
+ HDU in the file, respectively.
+
+ - fits_write_errmark and fits_clear_errmark routines can be use
+ to write an invisible marker to the CFITSIO error stack, and
+ then clear any more recent messages on the stack, back to
+ that mark. This preserves any older messages on the stack.
+
+ - fits_parse_range utility routine parses a row list string
+ and returns integer arrays giving the min and max row in each
+ range.
+
+ - fits_delete_rowrange deletes a specified list of rows or row
+ ranges.
+
+ - fits_copy_file copies all or part of the HDUs in the input file
+ to the output file.
+
+ - added fits_insert_card/ffikey to the publicly defined set
+ of routines (previously, it was a private routine).
+
+ Enhancements:
+
+ - changed the default numeric display format in ffgkys from 'E' format
+ to 'G' format, and changed the format for 'X' columns to a
+ string of 8 1s or 0s representing each bit value.
+
+ - modified ffflsh so the system 'fflush' call is not made in cases
+ where the file was opened with 'READONLY' access.
+
+ - modified the output filename parser so the "-.gz", and "stdout.gz"
+ now cause the output file to be initially created in memory,
+ and then compressed and written out to the stdout stream when
+ the file is closed.
+
+ - modified the routines that delete rows from a table to also
+ update the variable length array heap, to remove any orphaned
+ data from the heap.
+
+ - modified ffedit_columns so that wild card characters may be
+ used when specifying column names in the 'col' file filter
+ specifier (e.g., file.fits[col TIME; *RAW] will create a
+ virtual table contain only the TIME column and any other columns
+ whose name ends with 'RAW').
+
+ - modified the keyword classifier utility, fits_get_keyclass, to
+ support cases where the input string is just the keyword name,
+ not the entire 80-character card.
+
+ - modified configure.in and configure to see if a proprietary
+ C compiler is available (e.g. 'cc'), and only use 'gcc' if not.
+
+ - modified ffcpcl (copy columns from one table to another) so that
+ it also copies any WCS keywords related to that column.
+
+ - included an alternate source file that can be used to replace
+ compress.c, which is distributed under the GNU General Public
+ License. The alternate file contains non-functional stubs for
+ the compression routines, which can be used to make a version of
+ CFITSIO that does not have the GPL restrictions (and is also less
+ functional since it cannot read or write compressed FITS files).
+
+ - modifications to the iterator routine (ffiter) to support writing
+ tile compressed output images.
+
+ - modified ffourl to support the [compress] qualifier when specifying
+ the optional output file name. E.g., file.fit(out.file[compress])[3]
+
+ - modified imcomp_compress_tile to fully support implicit data type
+ conversion when writing to tile-compressed images. Previously,
+ one could not write a floating point array to an integer compressed
+ image.
+
+ - increased the number of internal 2880-byte I/O buffers allocated
+ by CFITSIO from 25 to 40, in recognition of the larger amount
+ of memory available on typical machines today compared with
+ a few years ago. The number of buffers can be set by the user
+ with the NIOBUF parameter in fitsio2.h. (Setting this too large
+ can actually hurt performance).
+
+ - modified the #if statements in fitsio2.h, f77_wrap.h and f77_wrap1.c
+ to support the new Itanium 64-bit Intel PC.
+
+ - a couple minor modifications to fitsio.h needed to support the off_t
+ datatype on debian linux systems.
+
+ - increased internal buffer sizes in ffshft and ffsrow to improve
+ the I/O performance.
+
+ Bug fixes:
+
+ - fits_get_keyclass could sometimes try to append to an unterminated
+ string, causing an overflow of a string array.
+
+ - fits_create_template no longer worked because of improvements made
+ to other routines. Had to modify ffghdt to not try to rescan
+ the header keywords if the file is still empty and contains no
+ keywords yet.
+
+ - ffrtnm, which returns the root filename, sometimes did not work
+ properly when testing if the 'filename+n' convention was used for
+ specifying an extension number.
+
+ - fixed minor problem in the keyword template parsing routine, ffgthd
+ which in rare cases could cause an improperly terminated string to
+ be returned.
+
+ - the routine to compare 2 strings, ffcmps, failed to find a match
+ in comparing strings like "*R" and "ERROR" where the match occurs
+ on the last character, but where the same matching character occurs
+ previously in the 2nd string.
+
+ - the region file reading routine (ffrrgn) did not work correctly if
+ the region file (created by POW and perhaps other programs) had an
+ 'exclude' region (beginning with a '-' sign) as the first region
+ in the file. In this case all points outside the excluded region
+ should be accepted, but in fact no points were being accepted
+ in this case.
+
+Version 2.401 - 28 Jan 2002
+
+ - added the imcopy example program to the release (and Makefile)
+
+ Bug fixes:
+
+ - fixed typo in the imcompress code which affected compression
+ of 3D datacubes.
+
+ - made small change to fficls (insert column) to allow colums with
+ TFORMn = '1PU' and '1PV' to be inserted in a binary table. The
+ 'U' and 'V' are codes only used within CFITSIO to represent unsigned
+ 16-bit and 32-bit integers; They get replaced by '1PI' and '1PJ'
+ respectively in the FITS table header, along with the appropriate
+ TZEROn keyword.
+
+Version 2.400 - 18 Jan 2002
+
+ (N.B.: Application programs must be recompiled, not just relinked
+ with the new CFITSIO library because of changes made to fitsio.h)
+
+ New Routines:
+
+ - fits_write_subset/ffpss writes a rectangular subset (or the whole
+ image) to a FITS image.
+
+ - added a whole new family of routines to read and write arrays of
+ 'long long' integers (64-bit) to FITS images or table columns. The
+ new routine names all end in 'jj': ffpprjj, ffppnjj, ffp2djj,
+ ffp3djj, ffppssjj, ffpgpjj, ffpcljj, ffpcnjj. ffgpvjj, ffgpfjj,
+ ffg2djj, ffg3djj, ffgsvjj, ffgsfjj, ffggpjj, ffgcvjj, and ffgcfjj.
+
+ - added a set of helper routines that are used in conjunction with
+ the new support for tiled image compression. 3 routines set the
+ parameters that should be used when CFITSIO compresses an image:
+ fits_set_compression_type
+ fits_set_tile_dim
+ fits_set_noise_bits
+
+ 3 corresponding routines report back the current settings:
+ fits_get_compression_type
+ fits_get_tile_dim
+ fits_get_noise_bits
+
+ Enhancements:
+
+ - major enhancement was made to support writing to tile-compressed
+ images. In this format, the image is divided up into a rectangular
+ grid of tiles, and each tile of pixels is compressed individually
+ and stored in a row of a variable-length array column in a binary
+ table. CFITSIO has been able to transparently read this compressed
+ image format ever since version 2.1. Now all the CFITSIO image
+ writing routines also transparently support this format. There are
+ 2 ways to force CFITSIO to write compressed images: 1) call the
+ fits_set_compression_type routine before writing the image header
+ keywords, or 2), specify that the image should be compressed when
+ entering the name of the output FITS file, using a new extended
+ filename syntax. (examples: "myfile.fits[compress]" will use the
+ default compression parameters, and "myfile.fits[compress GZIP
+ 100,100] will use the GZIP compression algorithm with 100 x 100
+ pixel tiles.
+
+ - added new driver to support creating output .gz compressed fits
+ files. If the name of the output FITS file to be created ends with
+ '.gz' then CFITSIO will initially write the FITS file in memory and
+ then, when the FITS file is closed, CFITSIO will gzip the entire
+ file before writing it out to disk.
+
+ - when over-writing vectors in a variable length array in a binary
+ table, if the new vector to be written is less than or equal to
+ the length of the previously written vector, then CFITSIO will now
+ reuse the existing space in the heap, rather than always appending
+ the new array to the end of the heap.
+
+ - modified configure.in to support building cfitsio as a dynamic
+ library on Mac OS X. Use 'make shared' like on other UNIX platforms,
+ but a .dylib file will be created instead of .so. If installed in a
+ nonstandard location, add its location to the DYLD_LIBRARY_PATH
+ environment variable so that the library can be found at run time.
+
+ - made various modifications to better support the 8-byte long integer
+ datatype on more platforms. The 'LONGLONG' datatype is typedef'ed
+ to equal 'long long' on most Unix platforms and MacOS, and equal
+ to '__int64' on Windows machines.
+
+ - modified configure.in and makefile.in to better support cases
+ where the system has no Fortran compiler and thus the f77 wrapper
+ routines should not be compiled.
+
+ - made small modification to eval.y and eval_y.f to get rid of warning
+ on some platforms about redefinition of the 'alloca'.
+
+ Bug fixes:
+
+ - other recent bug fixes in ffdblk (delete blocks) caused ffdhdu (delete
+ HDU) to fail when trying to replace the primary array with a null
+ primary array.
+
+ - fixed bug that prevented inserting a new variable length column
+ into a table that already contained variable length data.
+
+ - modified fits_delete_file so that it will delete the file even if
+ the input status value is not equal to zero.
+
+ - in fits_resize_image, it was sometimes necessary to call ffrdef to
+ force the image structure to be defined.
+
+ - modified the filename parser to support input files with names like:
+ "myfile.fits.gz(mem://tmp)" in which the url type is specified for
+ the output file but not for the input file itself. This required
+ modifications to ffiurl and ffrtnm.
+
+Version 2.301 - 7 Dec 2001
+
+ Enhancements:
+
+ - modified the http file driver so that if the filename to be opened
+ contains a '?' character (most likely a cgi related string) then it
+ will not attempt to append a .gz or .Z as it would normally do.
+
+ - added support for the '!' clobber character when specifying
+ the output disk file name in CFITSIO's extended filename syntax, e.g.,
+ 'http://a.b.c.d/myfile.fits.gz(!outfile.fits)'
+
+ - added new device driver which is used when opening a compressed FITS
+ file on disk by uncompressing it into memory with READWRITE
+ access. This happens when specifying an output filename
+ 'mem://'.
+
+ - added 2 other device drivers to open http and ftp files in memory
+ with write access.
+
+ - improved the error trapping and reporting in cases where program
+ attempts to write to a READONLY file (especially in cases where the
+ 'file' resides in memory, as is the case when opening an ftp or http
+ file.
+
+ - modified the extended filename parser so that it is does not confuse
+ the bracket character '[' which is sometimes used in the root name
+ of files of type 'http://', as the start of an extname or row filter
+ expression. If the file is of type 'http://', the parser now
+ checks to see if the last character in the extended file name is
+ a ')' or ']'. If not, it does not try to parse the file name
+ any further.
+
+ - improved the efficiency when writing FITS files in memory, by
+ initially allocating enough memory for the entire HDU when it is
+ created, rather than incrementally reallocing memory 2880 bytes
+ at a time (modified ffrhdu and mem_truncate). This change also
+ means that the program will fail much sooner if it cannot allocate
+ enough memory to hold the entire FITS HDU.
+
+ Bug fixes:
+
+ - There was an error in the definition of the Fortran ftphtb wrapper
+ routine (writes required ASCII table header keywords) that caused
+ it to fail on DEC OSF and other platforms where sizeof(long) = 8.
+
+Version 2.300 - 23 Oct 2001
+
+ New Routines:
+
+ - fits_comp_img and fits_decomp_img are now fully supported and
+ documented. These routine compress and decompress, respective,
+ a FITS image using a new algorithm in which the image is first
+ divided into a grid of rectangular tiles, then the compressed byte
+ stream from each tile is stored in a row of a binary table.
+ CFITSIO can transparently read FITS images stored in this
+ compressed format. Compression ratios of 3 - 6 are typically
+ achieved. Large compression ratios are achieved for floating
+ point images by throwing away non-significant noise bits in the
+ pixel values.
+
+ - fits_test_heap tests the integrity of the binary table heap and
+ returns statistics on the amount of unused space in the heap and
+ the amount of space that is pointed to by more than 1 descriptor.
+
+ - fits_compress_heap which will reorder the arrays in the binary
+ table heap, recovering any unused space.
+
+ Enhancements:
+
+ - made substantial internal changes to the code to support FITS
+ files containing 64-bit integer data values. These files have
+ BITPIX = 64 or TFORMn = 'K'. This new feature in CFITSIO is
+ currently only enabled if SUPPORT_64BIT_INTEGERS is defined = 1 in
+ the beginning of the fitsio2.h file. By default support for
+ 64-bit integers is not enabled.
+
+ - improved the ability to read and return a table column value as a
+ formatted string by supporting quasi-legal TDISPn values which
+ have a lowercase format code letter, and by completely ignoring
+ other unrecognizable TDISPn values. Previously, unrecognized
+ TDISPn values could cause zero length strings to be returned.
+
+ - made fits_write_key_longstr more efficient when writing keywords
+ using the long string CONTINUE convention. It previously did not
+ use all the available space on each card when the string to be
+ written contained many single quote characters.
+
+ - added a new "CFITSIO Quick Start Guide" which provides all the
+ basic information needed to write C programs using CFITSIO.
+
+ - updated the standard COMMENT keywords that are written at the
+ beginning of every primary array to refer to the newly published
+ FITS Standard document in Astronomy and Astrophysics.
+ Note: because of this change, any FITS file created with this
+ version of CFITSIO will not be identical to the same file written
+ with a previous version of CFITSIO.
+
+ - replaced the 2 routines in pliocomp.c with new versions provided by
+ D Tody and N Zarate. These routines compress/uncompress image pixels
+ using the IRAF pixel list compression algorithm.
+
+ - modified fits_copy_hdu so that when copying a Primary Array
+ to an Image extension, the COMMENT cards which give the reference
+ to the A&A journal article about FITS are not copied. In the
+ inverse case the COMMENT keywords are inserted in the header.
+
+ - modified configure and Makefile.in to add capability to build a
+ shared version of the CFITSIO library. Type 'make shared' or
+ 'make libcfitsio.so' to invoke this option.
+
+ - disabled some uninformative error messages on the error stack:
+ 1) when calling ffclos (and then ffchdu) with input status > 0
+ 2) when ffmahd tries to move beyond the end of file.
+ The returned status value remains the same as before, but the
+ annoying error messages no longer get written to the error stack.
+
+ - The syntax for column filtering has been modified so that
+ if one only specifies a list of column names, then only those
+ columns will be copied into the output file. This provides a simple
+ way to make a copy of a table containing only a specified list of
+ columns. If the column specifier explicitly deletes a column, however,
+ than all the other columns will be copied to the filtered input
+ file, regardless of whether the columns were listed or not.
+ Similarly, if the expression specifies only a column to be modified
+ or created, then all the other columns in the table will be
+ copied.
+
+ mytable.fit[1][col Time;Rate] - only the Time and Rate
+ columns will be copied to the filtered input file.
+
+ mytable.fit[1][col -Time ] - all but the Time column are copied
+ to the filtered input file.
+
+ mytable.fit[1][col Rate;-Time] - same as above.
+
+ - changed a '#if defined' statement in f77_wrap.h and f77_wrap1.c
+ to support the fortran wrappers on 64-bit IBM/RS6000 systems
+
+ - modified group.c so that when attaching one group (the child) to
+ another (the parent), check in each file for the existence of a
+ pointer to the other before adding the link. This is to prevent
+ multiple links from forming under all circumstances.
+
+ - modified the filename parser to accept 'STDIN', 'stdin',
+ 'STDOUT' and 'stdout' in addition to '-' to mean read the
+ file from standard input or write to standard output.
+
+ - Added support for reversing an axis when reading a subsection
+ of a compressed image using the extended filename syntax, as in
+ myfile.fits+1[-*, *] or myfile.fits+1[600:501,501:600]
+
+ - When copying a compressed image to a uncompressed image, the
+ EXTNAME keyword is no longer copied if the value is equal to
+ 'COMPRESSED_IMAGE'.
+
+ - slight change to the comment field of the DATE keyword to reflect
+ the fact that the Unix system date and time is not true UTC time.
+
+ Bug fixes:
+
+ - fits_write_key_longstr was not writing the keyword if a null
+ input string value was given.
+
+ - writing data to a variable length column, if that binary table is not
+ the last HDU in the FITS file, might overwrite the following HDU.
+ Fixed this by changing the order of a couple operations in ffgcpr.
+
+ - deleting a column from a table containing variable length columns
+ could cause the last few FITS blocks of the file to be reset = 0.
+ This bug occurred as a result of modifications to ffdblk in v2.202.
+ This mainly affects users of the 'compress_fits' utility
+ program.
+
+ - fixed obscure problem when writing bits to a variable length 'B'
+ column.
+
+ - when reading a subsection of an image, the BSCALE and BZERO pixel
+ scaling may not have been applied when reading image pixel values
+ (even though the scaling keywords were properly written in the
+ header).
+
+ - fits_get_keyclass was not returning 'TYP_STRUCT_KEY' for the
+ END keyword.
+
+Version 2.204 - 26 July 2001
+
+ Bug fixes:
+
+ - Re-write of fits_clean_url in group.c to solve various problems
+ with invalid bounds checking.
+
+Version 2.203 - 19 July 2001 (version in FTOOLS v5.1)
+
+ Enhancements:
+
+ - When a row selection or calculator expression is written in
+ an external file (and read by CFITSIO with the '@filename' syntax)
+ the file can now contain comment lines. The comment line must
+ begin with 2 slash characters as the first 2 characters on the
+ line. CFITSIO will ignore the entire line when reading the
+ expression.
+
+ Bug fixes:
+
+ - With previous versions of CFITSIO, the pixel values in a FITS
+ image could be read incorrectly in the following case: when
+ opening a subset of a FITS image (using the
+ 'filename.fits[Xmin:Xmax,Ymin:Ymax]' notation) on a PC linux, PC
+ Windows, or DEC OSF machine (but not on a SUN or Mac). This
+ problem only occurs when reading more than 8640 bytes of data
+ (2160 4-byte integers) at a time, and usually only occurs if the
+ reading program reads the pixel data immediately after opening the
+ file, without first reading any header keywords. This error would
+ cause strips of zero valued pixels to appear at semi-random
+ positions in the image, where each strip usually would be 2880
+ bytes long. This problem does not affect cases where the input
+ subsetted image is simply copied to a new output FITS file.
+
+
+Version 2.202 - 22 May 2001
+
+ Enhancements:
+
+ - revised the logic in the routine that tests if a point is
+ within a region: if the first region is an excluded region,
+ then it implicitly assumes a prior include region covering
+ the entire detector. It also now supports cases where a
+ smaller include region is within a prior exclude region.
+
+ - made enhancement to ffgclb (read bytes) so that it can
+ also read values from a logical column, returning an array
+ of 1s and 0s.
+
+ - defined 2 new grouping error status values (349, 350) in
+ cfitsio.h and made minor changes to group.c to use these new
+ status values.
+
+ - modified fits_open_file so that if it encounters an error while
+ trying to move to a user-specified extension (or select a subset
+ of the rows in an input table, or make a histogram of the
+ column values) it will close the input file instead of leaving
+ it open.
+
+ - when using the extended filename syntax to filter the rows in
+ an input table, or create a histogram image from the values in
+ a table column, CFITSIO now writes HISTORY keywords in the
+ output file to document the filtering expression that was used.
+
+ Bug fixes:
+
+ - ffdblk (called by ffdrow) could overwrite the last FITS block(s) in
+ the file in some cases where one writes data to a variable length
+ column and then calls ffdrow to delete rows in the table. This
+ bug was similar to the ffiblk bug that was fixed in v2.033.
+
+ - modified fits_write_col_null to fix a problem which under unusual
+ circumstances would cause a End-of-File error when trying to
+ read back the value in an ASCII string column, after initializing
+ if by writing a null value to it.
+
+ - fixed obscure bug in the calculator function that caused an
+ error when trying to modify the value of a keyword in a HDU
+ that does not have a NAXIS2 keyword (e.g., a null primary array).
+
+ - the iterator function (in putcol.c) had a bug when calculating
+ the optimum number rows to process in the case where the table
+ has very wide rows (>33120 bytes) and the calculator expression
+ involves columns from more than one FITS table. This could
+ cause an infinite loop in calls to the ffcalc calculator function.
+
+ - fixed bug in ffmvec, which modifies the length of an
+ existing vector column in a binary table. If the vector
+ was reduced in length, the FITS file could sometimes be left
+ in a corrupted state, and in all cases the values in the remaining
+ vector elements of that column would be altered.
+
+ - in drvrfile.c, replaced calls to fsetpos and fgetpos with
+ fseek and ftell (or fseeko and ftello) because the fpos_t
+ filetype used in fsetpos is incompatible with the off_t
+ filetype used in fseek, at least on some platforms (Linux 7.0).
+ (This fix was inserted into the V2.201 release on April 4).
+
+ - added "#define fits_write_pixnull ffppxn" to longnam.h
+
+Version 2.201 - 15 March 2001
+
+ Enhancements
+
+ - enhanced the keyword reading routines so that they will do
+ implicit datatype conversion from a string keyword value
+ to a numeric keyword value, if the string consist of a
+ valid number enclosed in quotes. For example, the keyword
+ mykey = '37.5' can be read by ffgkye.
+
+ - modified ffiimg so that it is possible to insert a new
+ primary array at the beginning of the file. The original
+ primary array is then converted into an IMAGE extension.
+
+ - modified ffcpdt (copy data unit) to support the case where
+ the data unit is being copied between 2 HDUs in the same file.
+
+ - enhanced the fits_read_pix and fits_read_pixnull routines so
+ that they support the tiled image compression format that the
+ other image reading routines also support.
+
+ - modified the Extended File Name syntax to also accept a
+ minus sign (-) as well as an exclamation point (!) as
+ the leading character when specifying a column or or keyword
+ to be deleted, as in [col -time] will delete the TIME column.
+
+ - now completely support reading subimages, including pixel
+ increments in each dimension, for tile-compressed images
+ (where the compressed image tiles are stored in a binary
+ table).
+
+ Bug fixes:
+
+ - fixed confusion in the use of the fpos_t and off_t datatypes
+ in the fgetpos and fsetpos routines in drvrfile.c which caused
+ problems with the Windows VC++ compiler. (fpos_t is not
+ necessarily identical to off_t)
+
+ - fixed a typo in the fits_get_url function in group.c which
+ caused problems when determining the relative URL to a compressed
+ FITS file.
+
+ - included fitsio.h in the shared memory utility program,
+ smem.c, in order to define OFF_T.
+
+ - fixed typo in the datatype of 'nullvalue' in ffgsvi, which caused
+ attempts to read subsections of a short integer tiled compressed
+ image to fail with a bus error.
+
+ - fixed bug in ffdkey which sometimes worked incorrectly if one
+ tried to delete a nonexistent keyword beyond the end of the header.
+
+ - fixed problem in fits_select_image_section when it writes a dummy
+ value to the last pixel of the section. If the image contains
+ scaled integer pixels, then in some cases the pixel value could end
+ up out of range.
+
+ - fixed obscure bug in the ffpcn_ family of routines which gave
+ a floating exception when trying to write zero number of pixels to
+ a zero length array (why would anyone do this?)
+
+Version 2.200 - 26 Jan 2001
+
+ Enhancements
+
+ - updated the region filtering code to support the latest region
+ file formats that are generated by the POW, SAOtng and ds9
+ programs. Region positions may now be given in HH:MM:SS.s,
+ DD:MM:SS.s format, and region sizes may be given arcsec or arcmin
+ instead of only in pixel units. Also changed the logic so that if
+ multiple 'include' regions are specified in the region file, they
+ are ORed together, instead of ANDed, so that the filtering keeps
+ points that are located within any of the 'include' regions, not
+ just the intersection of the regions.
+
+ - added support for reading raw binary data arrays by converting
+ them on the fly into virtual FITS files.
+
+ - modified ffpmsg, which writes error messages to CFITSIO's internal
+ error stack, so that messages > 80 characters long will be wrapped
+ around into multiple 80 character messages, instead of just
+ being truncated at 80 characters.
+
+ - modified the CFITSIO parser so that expression which involve
+ scaled integer columns get cast to double rather than int.
+
+ - Modified the keyword template parsing routine, ffgthd, to
+ support the HIERARCH keyword.
+
+ - modified ffainit and ffbinit so that they don't unnecessarily
+ allocate 0 bytes of memory if there are no columns (TFIELDS = 0)
+ in the table that is being opened.
+
+ - modified fitsio2.h to support NetBSD on Alpha OSF platforms
+ (NetBSD does not define the '__unix__' symbol).
+
+ - changed the way OFF_T is defined in fitsio.h for greater
+ portability.
+
+ - changed drvrsmem.c so it is compiled only when HAVE_SHMEM_SERVICES
+ is defined in order to removed the conditional logic from the Makefile
+
+ - reorganized the CFITSIO User's guide to make it
+ clearer and easier for new users to learn the basic routines.
+
+ - fixed ffhdef (which reserves space for more header keywords) so
+ that is also updates the start position of the next HDU. This
+ affected the offset values returned by ffghof.
+
+Version 2.100 - 18 Oct 2000
+
+ Enhancements
+
+ - made substantial modification to the code to support Large files,
+ i.e., files larger than 2**31 bytes = 2.1GB. FITS files up to
+ 6 terabytes in size may now be read and written on platforms
+ that support Large files (currently only Solaris).
+
+ - modified ffpcom and ffphis, which write COMMENT and HISTORY
+ keywords, respectively, so that they now use columns 9 - 80,
+ instead of only columns 11 - 80. Previously, these routines
+ avoided using columns 9 and 10, but this is was unnecessarily
+ restrictive.
+
+ - modified ffdhdu so that instead of refusing to delete the
+ primary array, it will replace the current primary array
+ with a null primary array containing the bare minimum of
+ required keywords and no data.
+
+ New Routines
+
+ - fits_read_pix, fits_read_pixnull, fits_read_subset, and fits_write_pix
+ routines were added to enable reading and writing of Large images,
+ with more than 2.1e9 pixels. These new routines are now recommended
+ as the basic routines for reading and writing all images.
+
+ - fits_get_hduoff returns the byte offset in the file to
+ the start and end of the current HDU. This routine replaces the
+ now obsolete fits_get_hduaddr routine; it uses 'off_t' instead of
+ 'long' as the datatype of the arguments and can support offsets
+ in files greater than 2.1GB in size.
+
+ Bug fixes:
+
+ - fixed bug in fits_select_image_section that caused an integer
+ overflow when reading very large image sections (bigger than
+ 8192 x 8192 4-byte pixels).
+
+ - improved ffptbb, the low-level table writing routine, so that
+ it will insert additional rows in the table if the table is
+ not already big enough. Previously it would have just over-
+ written any HDUs following the table in the FITS file.
+
+ - fixed a bug in the fits_write_col_bit/ffpclx routine which
+ could not write to a bit 'X' column if that was the first column
+ in the table to be written to. This bug would not appear if
+ any other datatype column was written to first.
+
+ - non-sensible (but still formally legal) binary table TFORM values
+ such as '8A15', or '1A8' or 'A8' would confuse CFITSIO and cause it
+ to return a 308 error. When parsing the TFORMn = 'rAw' value,
+ the ffbnfm routine has been modified to ignore the 'w' value in cases
+ where w > r.
+
+ - fixed bug in the blsearch routine in iraffits.c which sometimes
+ caused an out-of-bounds string pointer to be returned when searching
+ for blank space in the header just before the 'END' keyword.
+
+ - fixed minor problem in ffgtcr in group.c, which sometimes failed
+ while trying to move to the end of file before appending a
+ grouping table.
+
+ - on Solaris, with Sun CC 5.0, one must check for '__unix' rather
+ than '__unix__' or 'unix' as it's symbol. Needed to modify this
+ in drvrfile.c in 3 places.
+
+ - in ffextn, the FITS file would be left open if the named
+ extension doesn't exist, thus preventing the file from being
+ opened again later with write access.
+
+ - fixed bug in ffiimg that would cause attempts to insert a new
+ image extension following a table extension, and in front of any
+ other type of extension, to fail.
+
+Version 2.037 - 6 July 2000
+
+ Enhancements
+
+ - added support in the extended filename syntax for flipping
+ an image along any axis either by specifying a starting
+ section pixel number greater than the ending pixel number,
+ or by using '-*' to flip the whole axis. Examples:
+ "myfile.fits[1:100, 50:10]" or "myfile.fits[-*,*]".
+
+ - when reading a section of an image with the extended filename
+ syntax (e.g. image.fits[1:100:2, 1:100:2), any CDi_j WCS keywords
+ will be updated if necessary to transfer the world coordinate
+ system from the imput image to the output image section.
+
+ - on UNIX platforms, added support for filenames that begin
+ with "~/" or "~user/". The "~" symbol will get expanded
+ into a string that gives the user's home directory.
+
+ - changed the filename parser to support disk file names that
+ begin with a minus sign. Previously, the leading minus sign would
+ cause CFITSIO to try to read/write the file from/to stdin/stdout.
+
+ - modified the general fits_update_key routine, which writes
+ or updates a keyword value, to use the 'G' display format
+ instead of the 'E' format for floating point keyword values.
+ This will eliminate trailing zeros from appearing in the value.
+
+ - added support for the "-CAR" celestial coordinate projection
+ in the ffwldp and ffxypx routines. The "-CAR" projection is
+ the default simplest possible linear projection.
+
+ - added new fits_create_memfile/ffimem routine to create a new
+ fits file at a designated memory location.
+
+ - ported f77_wrap.h and f77_wrap1.c so that the Fortran interface
+ wrappers work correctly on 64-bit SGI operating systems. In this
+ environment, C 'long's are 8-bytes long, but Fortran 'integers'
+ are still only 4-bytes long, so the words have to be converted
+ by the wrappers.
+
+ - minor modification to cfortran.h to automatically detect when it
+ is running on a linux platform, and then define f2cFortran in that
+ case. This eliminates the need to define -Df2cFortran on the
+ command line.
+
+ - modified group.c to support multiple "/" characters in
+ the path name of the file to be opened/created.
+
+ - minor modifications to the parser (eval.y, eval_f.c, eval_y.c)
+ to a) add the unary '+' operator, and b) support copying the
+ TDIMn keyword from the input to the output image under certain
+ circumstances.
+
+ - modified the lexical parser in eval_l.y and eval_l.c to
+ support #NULL and #SNULL constants which act to set the
+ value to Null. Support was also added for the C-conditional
+ expression: 'boolean ? trueVal : falseVal'.
+
+ - small modification to eval_f.c to write an error message to
+ the error stack if numerical overflow occurs when evaluating
+ an expression.
+
+ - configure and configure.in now support the egcs g77 compiler
+ on Linux platforms.
+
+ Bug fixes:
+
+ - fixed a significant bug when using the extended filename binning
+ syntax to generate a 2-dimensional image from a histogram of the
+ values in 2 table columns. This bug would cause table events that
+ should have been located in the row just below the bottom row of
+ the image (and thus should have been excluded from the histogram)
+ to be instead added into the first row of the image. Similarly,
+ the first plane of a 3-D or 4-D data cube would include the events
+ that should have been excluded as falling in the previous plane of
+ the cube.
+
+ - fixed minor bug when parsing an extended filename that contains
+ nested pairs of square brackets (e.g., '[col newcol=oldcol[9]]').
+
+ - fixed bug when reading unsigned integer values from a table or
+ image with fits_read_col_uint/ffgcvuk. This bug only occurred on
+ systems like Digital Unix (now Tru64 Unix) in which 'long'
+ integers are 8 bytes long, and only when reading more than 7200
+ elements at a time. This bug would generally cause the program to
+ crash with a segmentation fault.
+
+ - modified ffgcpr to update 'heapstart' as well as 'numrows' when
+ writing more rows beyond the end of the table. heapstart
+ is needed to calculate if more space needs to be inserted in the
+ table when inserting columns into the table.
+
+ - modified fficls (insert column), ffmvec, ffdrow and ffdcol to
+ not use the value of the NAXIS2 keyword as the number of rows
+ in the table, and instead use the value that is stored in
+ an internal structure, because the keyword value may not
+ be up to date.
+
+ - Fixed bug in the iterator function that affected the handling
+ of null values in string columns in ASCII and binary tables.
+
+ - Reading a subsample of pixels in very large images, (e.g.,
+ file = myfile.fits[1:10000:10,1:10000:10], could cause a
+ long integer overflow (value > 2**31) in the computation of the
+ starting byte offset in the file, and cause a return error status
+ = 304 (negative byte address). This was fixed by changing the
+ order of the arithmetic operations in calculating the value of
+ 'readptr' in the ffgcli, ffgclj, ffgcle, ffgcld, etc. routines.
+
+ - In version 2.031, a fix to prevent compressed files from being
+ opened with write privilege was implemented incorrectly. The fix
+ was intended to not allow a compressed FITS file to be opened
+ except when a local uncompressed copy of the file is being
+ produced (then the copy is opened with write access), but in fact
+ the opposite behavior occurred: Compressed files could be opened
+ with write access, EXCEPT when a local copy is produced. This
+ has been fixed in the mem_compress_open and file_compress_open
+ routines.
+
+ - in iraffits.c, a global variable called 'val' caused multiply
+ defined symbols warning when linking cfitsio and IRAF libraries.
+ This was fixed by making 'val' a local variable within the
+ routine.
+
+Version 2.036 - 1 Feb 2000
+
+ - added 2 new generic routines, ffgpf and ffgcf which are analogous
+ to ffgpv and ffgcv but return an array of null flag values instead
+ of setting null pixels to a reserved value.
+
+ - minor change to eval_y.c and eval.y to "define alloca malloc"
+ on all platforms, not just VMS.
+
+ - added support for the unsigned int datatype (TUINT) in the
+ generic ffuky routine and changed ffpky so that unsigned ints
+ are cast to double instead of long before being written to
+ the header.
+
+ - modified ffs2c so that if a null string is given as input then
+ a null FITS string (2 successive single quotes) will be returned.
+ Previously this routine would just return a string with a single
+ quote, which could cause an illegal keyword record to be written.
+
+ - The file flush operation on Windows platforms apparently
+ changes the internal file position pointer (!) in violation of the
+ C standard. Put a patch into the file_flush routine to explicitly
+ seek back to the original file position.
+
+ - changed the name of imcomp_get_compressed_image_parms to
+ imcomp_get_compressed_image_par to not exceed the 31 character
+ limit on some compilers.
+
+ - modified the filename parser (which is used when moving to a
+ named HDU) to support EXTNAME values which contain embedded blanks.
+
+ - modified drvrnet.c to deal with ftp compressed files better so
+ that even fits files returned from cgi queries which have the wrong
+ mime types and/or wrong types of file names should still decompress.
+
+ - modified ffgics to reduce the tolerance for acceptable skewness
+ between the axes, and added a new warning return status =
+ APPROX_WCS_KEY in cases where there is significant skewness
+ between the axes.
+
+ - fixed bug in ffgics that affected cases where the first coordinate
+ axis was DEC, not RA, and the image was a mirror image of the sky.
+
+ - fixed bug in ffhist when trying to read the default binning
+ factor keyword, TDBIN.
+
+ - modified ffhist so that is correctly computes the rotation angle
+ in a 2-D image if the first histogram column has a CROTA type
+ keyword but the 2nd column does not.
+
+ - modified ffcpcl so that it preserves the comment fields on the
+ TTYPE and TFORM keywords when the column is copied to a new file.
+
+ - make small change to configure.in to support FreeBSD Linux
+ by setting CFLAGS = -Df2cFortran instead of -Dg77Fortran. Then
+ regenerated configure with autoconf 2.13 instead of 2.12.
+
+Version 2.035 - 7 Dec 1999 (internal release only, FTOOLS 5.0.2)
+
+ - added new routine called fits_get_keyclass/ffgkcl that returns
+ the general class of the keyword, e.g., required structural
+ keyword, WCS keyword, Comment keyword, etc. 15 classes of
+ keywords have been defined in fitsio.h
+
+ - added new routine called fits_get_img_parm/ffgipr that is similar
+ to ffgphd but it only return the bitpix, naxis, and naxisn values.
+
+ - added 3 new routines that support the long string keyword
+ convention: fits_insert_key_longstr, fits_modify_key_longstr
+ fits_update_key_longstr.
+
+ - modified ffgphd which reads image header keywords to support
+ the new experimental compressed image format.
+
+ - when opening a .Z compressed file, CFITSIO tries to allocate
+ memory equal to 3 times the file size, which may be excessive
+ in some cases. This was changed so that if the allocation fails,
+ then CFITSIO will try again to allocate only enough memory
+ equal to 1 times the file size. More memory will be allocated
+ later if this turns out to be too small.
+
+ - improved the error checking in the fits_insert_key routine
+ to check for illegal characters in the keyword.
+
+Version 2.034 - 23 Nov 1999
+
+ - enhanced support for the new 'CD' matrix world coordinate system
+ keywords in the ffigics routine. This routine has been enhanced
+ to look for the new 'CD' keywords, if present, and convert them
+ back to the old CDELTn and CROTAn values, which are then returned.
+ The routine will also swap the WCS parameters for the 2 axes if
+ the declination-like axis is the first WCS axis.
+
+ - modified ffphbn in putkey.c to support the 'U' and 'V" TFORM characters
+ (which represent unsigned short and unsigned int columns) in variable
+ length array columns. (previously only supported these types in
+ fixed length columns).
+
+ - added checks when reading gzipped files to detect unexpected EOF.
+ Previously, the 'inflate_codes' routine would just sit in an infinite
+ loop if the file ended unexpectedly.
+
+ - modified fits_verify_chksum/ffvcks so that checksum keywords with
+ a blank value string are treated as undefined, the same as
+ if the keyword did not exist at all.
+
+ - fixed ffghtb and ffghbn so that they return the extname value
+ in cases where there are no columns in the table.
+
+ - fixed bug in the ffgtwcs routine (this is a little utility
+ routine to aid in interfacing to Doug Mink's WCS routines);
+ it was not correctly padding the length of string-valued keywords
+ in the returned string.
+
+ - fixed bug in 'iraffits.c' that prevented Type-2 IRAF images from
+ being correctly byte-swapped on PCs and DEC-OSF machines.
+
+ - fixed tiny memory leak in irafncmp in iraffits.c. Only relevant when
+ reading IRAF .imh files.
+
+ - fixed a bug (introduced in version 2.027) that caused the keyword
+ reading routines to sometimes not find a matching keyword if the
+ input name template used the '*' wildcard as the last character.
+ (e.g., if input name = 'COMMENT*' then it would not find the
+ 'COMMENT' keywords. (It would have found longer keywords like
+ 'COMMENTX' correctly). The fix required a minor change to ffgcrd
+ in getkey.c
+
+ - modified the routine (ffswap8) that does byteswapping of
+ double precision numbers. Some linux systems have reported floating
+ point exceptions because they were trying to interpret the bytes
+ as a double before the bytes had been swapped.
+
+ - fixed bug in the calculation of the position of the last byte
+ in the string of bits to be read in ffgcxuk and ffgcxui. This
+ bug generally caused no harm, but could cause the routine to
+ exit with an invalid error message about trying to read
+ beyond the size of the field.
+
+ - If a unix machine did not have '__unix__', 'unix', or '__unix'
+ C preprocessor symbols defined, then CFITSIO would correctly open
+ one FITS file, but would not correctly open subsequent files. Instead
+ it would think that the same file was being opened multiple times.
+ This problem has only been seen on an IBM/AIX machine. The fits_path2url
+ and fits_url2path routines in group.c were modified to fix the problem.
+
+ - fixed bug in group.c, which affected WINDOWS platforms only, that
+ caused programs to go into infinite loop when trying to open
+ certain files.
+
+ - the ftrsim Fortran wrapper routine to ffrsim was not defined
+ correctly, which caused the naxis(2) value to be passed incorrectly
+ on Dec OSF machines, where sizeof(long) != sizeof(int).
+
+Version 2.033 - 17 Sept 1999
+
+ - New Feature: enhanced the row selection parser so that comparisons
+ between values in different rows of the table are allowed, and the
+ string comparisons with <, >, <=, and >= are supported.
+
+ - added new routine the returns the name of the keyword in the
+ input keyword record string. The name is usually the first
+ 8 characters of the record, except if the HIERARCH convention
+ is being used in which case the name may be up to 67 characters
+ long.
+
+ - added new routine called fits_null_check/ffnchk that checks to
+ see if the current header contains any null (ASCII 0) characters.
+ These characters are illegal in FITS headers, but they go undetected
+ by the other CFITSIO routines that read the header keywords.
+
+ - the group.c file has been replaced with a new version as supplied
+ by the ISDC. The changes are mainly to support partial URLs and
+ absolute URLs more robustly. Host dependent directory paths are
+ now converted to true URLs before being read from/written to
+ grouping tables.
+
+ - modified ffnmhd slightly so that it will move to the first extension
+ in which either the EXTNAME or the HDUNAME keyword is equal to the
+ user-specified name. Previously, it only checked for HDUNAME if
+ the EXTNAME keyword did not exist.
+
+ - made small change to drvrnet.c so that it uncompress files
+ which end in .Z and .gz just as for ftp files.
+
+ - rewrote ffcphd (copy header) to handle the case where the
+ input and output HDU are in the same physical FITS file.
+
+ - fixed bug in how long string keyword values (using the CONTINUE
+ convention) were read. If the string keyword value ended in an
+ '&' character, then fits_read_key_longstr, fits_modify_key_str,
+ and fits_delete_key would interpret the following keyword as
+ a continuation, regardless of whether that keyword name was
+ 'CONTINUE' as required by this convention. There was also a bug
+ in that if the string keyword value was all blanks, then
+ fits_modify_key_str could in certain unusual cases think
+ that the keyword ended in an '&' and go into an infinite loop.
+
+ - modified ffgpv so that it calls the higher level ffgpv_ routine
+ rather than directly calling the lower level ffgcl_ routine. This
+ change is needed to eventually support reading compressed images.
+
+ - added 3 new routines to get the image datatype, image dimensions,
+ and image axes length. These support the case where the image is
+ compressed and stored in a binary table.
+
+ - fixed bug in ffiblk that could sometimes cause it to insert a
+ new block in a file somewhere in the middle of the data, instead
+ of at the end of the HDU. This fortunately is a rare problem,
+ mainly only occurring in certain cases when inserting rows in a binary
+ table that contains variable length array data (i.e., has a heap).
+
+ - modified fits_write_tdim so that it double checks the TFORMn
+ value directly if the column repeat count stored in the internal
+ structure is not equal to the product of all the dimensions.
+
+ - fixed bug that prevented ffitab or ffibin from inserting a new
+ table after a null primary array (can't read NAXIS2 keyword).
+ Required a small change to ffrdef.
+
+ - modified testprog.c so that it will continue to run even if
+ it cannot open or process the template file testprog.tpt.
+
+ - modified the logic in lines 1182-1185 of grparser.c so that
+ it returns the correct status value in case of an error.
+
+ - added test in fitsio2.h to see if __sparcv9 is defined; this
+ identifies a machine running Solaris 7 in 64-bit mode where
+ long integers are 64 bits long.
+
+Version 2.032 - 25 May 1999
+
+ - the distribution .tar file was changed so that all the files
+ will be untarred into a subdirectory by default instead of
+ into the current directory.
+
+ - modified ffclos so that it always frees the space allocated by
+ the fptr pointer, even when another fptr points to the same file.
+
+ - plugged a potential (but rare in practice) memory leak in ffpinit
+
+ - fixed bug in all the ffp3d_ and ffg3d_ routines in cases where
+ the data cube that has been allocated in memory has more planes
+ than the data cube in the FITS file.
+
+ - modified drvrsmem.c so that it allocates a small shared
+ memory segment only if CFITSIO tries to read or write a
+ FITS file in shared memory. Previously it always allocated
+ the segment whether it was needed or not. Also, this small
+ segment is removed if 0 shared memory segments remain in
+ the system.
+
+ - put "static" in front of 7 DECLARE macros in compress.c
+ because these global variables were causing conflicts with other
+ applications programs that had variables with the same names.
+
+ - modified ffasfm to return datatype = TDOUBLE instead of TFLOAT
+ if the ASCII table column has TFORMn = 'Ew.d' with d > 6.
+
+ - modified the column reading routines to a) print out the offending
+ entry if an error occurs when trying to read a numeric ASCII table
+ column, and b) print out the column number that had the error
+ (the messages are written to CFITSIOs error stack)
+
+ - major updates to the Fortran FITSIO User's Guide to include many
+ new functions that have been added to CFITSIO in the past year.
+
+ - modified fitsio2.h so that the test for __D_FLOAT etc. is only
+ made on Alpha VMS machines, to avoid syntax errors on some other
+ platforms.
+
+ - modified ffgthd so that it recognizes a floating point value
+ that uses the 'd' or 'D' exponent character.
+
+ - removed the range check in fftm2s that returned an error if
+ 'decimals' was less than zero. A negative value is OK and is
+ used to return only the date and not the time in the string.
+
+Version 2.031 - 31 Mar 1999
+
+ - moved the code that updates the NAXIS2 and PCOUNT keywords from
+ ffchdu into the lower lever ffrdef routine. This ensures that
+ other routines which call ffrdef will correctly update these 2
+ keywords if required. Otherwise, for instance, calling
+ fits_write_checksum before closing the HDU could cause the NAXIS2
+ keyword (number of rows in the table) to not be updated.
+
+ - fixed bug (introduced in version 2.030) when writing null values
+ to a primary array or image extension. If trying to set more
+ than 1 pixel to null at a time, then typically only 1 null would
+ be written. Also fixed related bug when writing null values to
+ rows in a table that are beyond the currently defined size of the
+ table (the size of the table was not being expanded properly).
+
+ - enhanced the extended filename parser to support '*' in image
+ section specifiers, to mean use the whole range of the axis.
+ myfile.fits[*,1:100] means use the whole range of the first
+ axis and pixels 1 to 100 in the second axis. Also supports
+ an increment, as in myfile.fits[*:2, *:2] to use just the
+ odd numbered rows and columns.
+
+ - modified fitscore.c to set the initial max size of the header, when
+ first reading it, to the current size of the file, rather than to
+ 2 x 10**9 to avoid rare cases where CFITSIO ends up writing a huge
+ file to disk.
+
+ - modified file_compress_open so that it will not allow a compressed
+ FITS file to be opened with write access. Otherwise, a program
+ could write to the temporary copy of the uncompressed file, but
+ the modification would be lost when the program exits.
+
+Version 2.030 - 24 Feb 1999
+
+ - fixed bug in ffpclu when trying to write a null value to a row
+ beyond the current size of the table (wouldn't append new rows
+ like it should).
+
+ - major new feature: enhanced the routines that read ASCII string
+ columns in tables so that they can read any table column, including
+ logical and numeric valued columns. The column values are returned
+ as a formatted string. The format is determined by the TDISPn
+ keyword if present, otherwise a default format based on the
+ datatype of the column is used.
+
+ - new routine: fits_get_col_display_width/ffgcdw returns the length
+ of the formatted strings that will be returned by the routines that
+ read table columns as strings.
+
+ - major new feature: added support for specifying an 'image section'
+ when opening an image: e.g, myfile.fits[1:512:2,2:512:2] to
+ open a 256x256 pixel image consisting of the odd columns and the
+ even numbered rows of the input image.
+
+ - added supporting project files and instructions for building
+ CFITSIO under Windows NT with the Microsoft Visual C++ compiler.
+
+ - changed the variable 'template' to 'templt' in testprog.c since
+ it conflicted with a reserved word on some compilers.
+
+ - modified group.c to conditionally include sys/stat.h only on
+ unix platforms
+
+ - fixed bug in the ffiter iterator function that caused it to always
+ pass 'firstn' = 1 to the work function when reading from the
+ primary array or IMAGE extension. It worked correctly for tables.
+
+ - fixed bug in the template header keyword parser (ffgthd) in cases
+ where the input template line contains a logical valued keyword
+ (T or F) without any following comment string. It was previously
+ interpreting this as a string-valued keyword.
+
+ - modified ffrhdu that reads and opens a new HDU, so that it
+ ignores any leading blank characters in the XTENSION name, e.g.,
+ XTENSION= ' BINTABLE' will not cause any errors, even though
+ this technically violates the FITS Standard.
+
+ - modified ffgtbp that reads the required table keywords to make
+ it more lenient and not exit with an error if the THEAP keyword
+ in binary tables cannot be read as an integer. Now it will
+ simply ignore this keyword if it cannot be read.
+
+ - added test for 'WIN32' as well as '__WIN32__' in fitsio2.h,
+ eval.l and eval_l.c in a preprocessor statement.
+
+ - changed definition of strcasecmp and strncasecmp in fitsio2.h,
+ eval.l and eval_l.c to conform to the function prototypes under
+ the Alpha VMS v7.1 compiler.
+
+ - corrected the long function names in longnam.h for the new WCS
+ utility functions in wcssubs.c
+
+Version 2.029 - 11 Feb 1999
+
+ - fixed bug in the way NANs and underflows were being detected on
+ VAX and Alpha VMS machines.
+
+ - enhanced the filename parser to distinguish between a VMS-style
+ directory name (e.g. disk:[directory]myfile.fits) and a CFITSIO
+ filter specifier at the end of the name.
+
+ - modified ffgthd to support the HIERARCH convention for keyword
+ names that are longer than 8 characters or contain characters
+ that would be illegal in standard FITS keyword names.
+
+ - modified the include statements in grparser.c so that malloc.h
+ and memory.h are only included on the few platforms that really
+ need them.
+
+ - modified the file_read routine in drvrfile.c to ignore the last
+ record in the FITS file it it only contains a single character that
+ is equal to 0, 10 or 32. Text editors sometimes append a character
+ like this to the end of the file, so CFITSIO will ignore it and
+ treat it as if it had reached the end of file.
+
+ - minor modifications to fitsio.h to help support the ROOT environment.
+
+ - installed new version of group.c and group.h; the main change
+ is to support relative paths (e.g. "../filename") in the URLs
+
+ - modified the histogramming routines so that it looks for the
+ default preferred column axes in a keyword of the form
+ CPREF = 'Xcol, Ycol'
+ instead of separate keywords of the form
+ CPREF1 = 'Xcol'
+ CPREF2 = 'Ycol'
+
+ - fixed bug so that if the binning spec is just a single integer,
+ as in [bin 4] then this will be interpreted as meaning to make
+ a 2D histogram using the preferred or default axes, with the
+ integer taken as the binning factor in both axes.
+
+Version 2.028 - 27 Jan 1999
+
+ - if the TNULLn keyword value was outside the range of a 'I' or 'B'
+ column, an overflow would occur when setting the short or char
+ to the TNULLn value, leading to incorrect values being flagged as
+ being undefined. This has been fixed so that CFITSIO will ignore
+ TNULLn values that are beyond the range of the column data type.
+
+ - changed a few instances of the string {"\0"} to {'\0'} in the
+ file groups.c
+
+ - installed new version of the grparser.c file from the ISDC
+
+ - added new WCS support routines (in wcssub.c) which make it easier
+ to call Doug Mink's WCSlib routines for converting between plate
+ and sky coordinates. The CFITSIO routines themselves never
+ call a WCSlib routine, so CFITSIO is not dependent on WCSlib.
+
+ - modified ffopen so that if you use the extended filename
+ syntax to both select rows in a table and then bin columns into
+ a histogram, then CFITSIO will simply construct an array listing
+ the good row numbers to be used when making the histogram,
+ instead of making a whole new temporary FITS file containing
+ the selected rows.
+
+ - modified ffgphd which parses the primary array header keywords
+ when opening a file, to not choke on minor format errors in
+ optional keywords. Otherwise, this prevents CFITSIO from
+ even opening the file.
+
+ - changed a few more variable declarations in compress.c from global
+ to static.
+
+Version 2.027 - 12 Jan 1999
+
+ - modified the usage of the output filename specifier so that it,
+ a) gives the name of the binned image, if specified, else,
+ b) gives the name of column filtered and/or row filtered table, if
+ specified, else
+ c) is the name for a local copy of the ftp or http file, else,
+ d) is the name for the local uncompressed version of the compressed
+ FITS file, else,
+ e) the output filename is ignored.
+
+ - fixed minor bug in ffcmps, when comparing 2 strings while using
+ a '*' wild card character.
+
+ - fixed bug in ftgthd that affected cases where the template string
+ started with a minus sign and contained 2 tokens (to rename a
+ keyword).
+
+ - added support for the HIERARCH keyword convention for reading
+ and writing keywords longer than 8 characters or that contain
+ ASCII characters not allowed in normal FITS keywords.
+
+ - modified the extended filename syntax to support opening images
+ that are contained in a single cell of a binary table with syntax:
+ filename.fits[extname; col_name(row_expression)]
+
+Version 2.026 - 23 Dec 1998
+
+ - modified the group parser to:
+ a) support CFITSIO_INCLUDE_FILES environment variable, which can
+ point to the location of template files, and,
+ b) the FITS file parameter passed to the parser no longer has to point
+ to an empty file. If there are already HDUs in the file, then the
+ parser appends new HDUs to the end of the file.
+
+ - make a small change to the drvrnet.c file to accommodate creating
+ a static version of the CFITSIO library.
+
+ - added 2 new routines to read consecutive bits as an unsigned integer
+ from a Bit 'X' or Byte 'B' column (ffgcxui and ffgcxuk).
+
+ - modified the logic for determining histogram boundaries in ffhisto
+ to add one more bin by default, to catch values that are right on
+ the upper boundary of the histogram, or are in the last partial bin.
+
+ - modified cfitsio2.h to support the new Solaris 7 64-bit mode operating
+ system.
+
+ - Add utility routine, CFits2Unit, to the Fortran wrappers which searches
+ the gFitsFiles array for a fptr, returning its element (Fortran unit
+ number), or allocating a new element if one doesn't already
+ exists... for C calling Fortran calling CFITSIO.
+
+ - modified configure so that it does not use the compiler optimizer
+ when using gcc 2.8.x on Linux
+
+ - (re)added the fitsio.* documentation files that describe the
+ Fortran-callable FITSIO interface to the C routines.
+
+ - modified the lexical parser in eval_f.c to fix bug in null detections
+ and bug in ffsrow when nrows = 0.
+
+ - modified ffcalc so that it creates a TNULLn keyword if appropriate
+ when a new column is created. Also fixed detection of OVERFLOWs
+ so that it ignores null values.
+
+ - added hyperbolic trig and rounding functions to
+ the lexical parser in the eval* files.
+
+ - improved error message that gets written when the group number is
+ out of range when reading a 'random groups' array.
+
+ - added description of shared memory, grouping, and template parsing
+ error messages to ffgerr and to the User's Guide. Moved the error
+ code definitions from drvsmem.h to fitsio.h.
+
+ - modified grparser.c to compile correctly on Alpha/OSF machines
+
+ - modified drvrnet.c to eliminate compiler warnings
+
+ - Modified Makefile.in to include targets for building all the sample
+ programs that are included with CFITSIO.
+
+Version 2.025 - 1 Dec 1998
+
+ - modified ffgphd and ffgtbp so that they ignores BLANK and TNULLn keywords
+ that do not have a valid integer value. Also, any error while reading
+ the BSCALE, BZERO, TSCALn, or TZEROn keywords will be ignored.
+ Previously, CFITSIO would have simply refused to read an HDU that had
+ such an invalid keyword.
+
+ - modified the parser in eval_f.c to accept out of order times in GTIs
+
+ - updated cfitsio_mac.sit.hqx to fix bad target parameters for Mac's
+ speed test program
+
+ - modified template parser in grparser.c to: 1) not write GRPNAME keyword
+ twice, and 2) assign correct value for EXTVERS keyword.
+
+ - fixed minor bugs in group.c; mainly would only affect users of the
+ INTEGRAL Data Access Layer.
+
+ - temporarily removed the prototype for ffiwcs from fitsio.h until
+ full WCS support is added to CFITSIO in the near future.
+
+ - modified the HTTP driver to send a User-Agent string:
+ HEASARC/CFITSIO/<version number>
+
+ - declared local variables in compress.c as 'static' to avoid
+ conflicts with other libraries.
+
+Version 2.024 - 9 Nov 1998
+
+ - added new function fits_url_type which returns the driver prefix string
+ associated with a particular FITS file pointer.
+
+Version 2.023 - 1 Nov 1998 - first full release of CFITSIO 2.0
+
+ - slightly modified the way real keyword values are formatted, to ensure
+ that it includes a decimal point. E.g., '1.0E-09' instead of '1E-09'
+
+ - added new function to support template files when creating new FITS files.
+
+ - support the TCROTn WCS keyword in tables, when reading the WCS keywords.
+
+ - modified the iterator to support null values in logical columns in
+ binary tables.
+
+ - fixed bug in iterator to support null values in integer columns in
+ ASCII tables.
+
+ - changed the values for FLOATNULLVALUE and DOUBLENULLVALUE to make them
+ less likely to duplicate actual values in the data.
+
+ - fixed major bug when freeing memory in the iterator function. It caused
+ mysterious crashes on a few platforms, but had no effect on most others.
+
+ - added support for reading IRAF format image (.imh files)
+
+ - added more error checking to return an error if the size of the FITS
+ file exceeds the largest value of a long integer (2.1 GB on 32-bit
+ platforms).
+
+ - CFITSIO now will automatically insert space for additional table rows
+ or add space to the data heap, if one writes beyond the current end
+ of the table or heap. This prevents any HDUs which might follow
+ the current HDU from being overwritten. It is thus no longer necessary
+ to explicitly call fits_insert_rows before writing new rows of data
+ to the FITS file.
+
+ - CFITSIO now automatically keeps track of the number of rows that have
+ been written to a FITS table, and updates the NAXIS2 keyword accordingly
+ when the table is closed. It is no longer necessary for the application
+ program to updated NAXIS2.
+
+ - When reading from a FITS table, CFITSIO will now return an error if the
+ application tries to read beyond the end of the table.
+
+ - added 2 routines to get the number of rows or columns in a table.
+
+ - improved the undocumented feature that allows a '20A' column to be
+ read as though it were a '20B' column by fits_read_col_byt.
+
+ - added overflow error checking when reading keywords. Previously, the
+ returned value could be silently truncated to the maximum allowed value
+ for that data type. Now an error status is returned whenever an
+ overflow occurs.
+
+ - added new set of routines dealing with hierarchical groups of files.
+ These were provided by Don Jennings of the INTEGRAL Science Data Center.
+
+ - added new URL parsing routines.
+
+ - changed the calling sequence to ffghad (get HDU address) from
+ ffghad(fitsfile *fptr, > long *headstart, long *dataend) to
+ ffghad(fitsfile *fptr, > long *headstart, long datastart,
+ long *dataend, int *status)
+
+ - major modification to support opening the same FITS file more
+ than once. Now one can open the same file multiple times and
+ read and write simultaneously to different HDUs within the file.
+ fits_open_file automatically detects if the file is already opened.
+
+ - added the ability to clobber/overwrite an existing file
+ with the same name when creating a new output file. Just
+ precede the output file name with '!' (an exclamation mark)
+
+ - changed the ffpdat routine which writes the DATE keyword
+ to use the new 'YYYY-MM-DDThh:mm:ss' format.
+
+ - added several new routines to create or parse the new date/time
+ format string.
+
+ - changed ifdef for DECFortran in f77_wrap.h and f77_wrap1.c:
+ expanded to recognize Linux/Alpha
+
+ - added new lexical parsing routines (from Peter Wilson):
+ eval_l.c, eval_y.c, eval_f.c, eval_defs.h, and eval_tab.h.
+ These are used when doing on-the-fly table row selections.
+
+ - added new family of routines to support reading and writing
+ 'unsigned int' data type values in keywords, images or tables.
+
+ - restructured all the putcol and getcol routines to provide
+ simpler and more robust support for machines which have
+ sizeof(long) = 8. Defined a new datatype INT32BIT which is
+ always 32 bits long (platform independent) and is used internally
+ in CFITSIO when reading or writing BITPIX = 32 images or 'J'
+ columns. This eliminated the need for specialize routines like
+ ffswaplong, ffunswaplong, and ffpacklong.
+
+ - overhauled cfileio.c (and other files) to use loadable drivers for
+ doing data I/O to different devices. Now CFITSIO support network
+ access to ftp:// and http:// files, and to shared memory files.
+
+ - removed the ffsmem routine and replaced it with ffomem. This will
+ only affect software that reads an existing file in core memory.
+ (written there by some other process).
+
+ - modified all the ffgkn[] routines (get an array of keywords) so
+ that the 'nfound' parameter is = the number of keywords returned,
+ not the highest index value on the returned keywords. This makes
+ no difference if the starting index value to look for = 1.
+ This change is not backward compatible with previous versions
+ of CFITSIO, but is the way that FITSIO behaved.
+
+ - added new error code = 1 for any application error external
+ to CFITSIO. Also reports "unknown error status" if the
+ value doesn't match a known CFITSIO error.
+
+Version 1.42 - 30 April 1998 (included in FTOOLS 4.1 release)
+
+ - modified the routines which read a FITS float values into
+ a float array, or read FITS double values into a double array,
+ so that the array value is also explicitly set in addition
+ to setting the array of flag values, if the FITS value is a NaN.
+ This ensures that no NaN values get passed back to the calling
+ program, which can cause serious problems on some platforms (OSF).
+
+ - added calls to ffrdef at the beginning of the insert
+ or delete rows or columns routines in editcol.c to make sure
+ that CFITSIO has correctly initialized the HDU information.
+
+ - added new routine ffdrws to delete a list of rows in a table
+
+ - added ffcphd to copy the header keywords from one hdu to another
+
+ - made the anynul parameter in the ffgcl* routines optional
+ by first checking to see if the pointer is not null before
+ initializing it.
+
+ - modified ffbinit and ffainit to ignore minor format
+ errors in header keywords so that cfitsio can at least
+ move to an extension that contains illegal keywords.
+
+ - modified all the ffgcl* routines to simply return without
+ error if nelem = 0.
+
+ - added check to ffclose to check the validity of the fitsfile
+ pointer before closing it. This should prevent program crashes
+ when someone tries to close the same file more than once.
+
+ - replaced calls to strcmp and strncmp with macros FSTRCMP and
+ FSTRNCMP in a few places to improve performance when reading
+ header keywords (suggested by Mike Noble)
+
+ Bug Fixes:
+
+ - fixed typo in macro definition of error 504 in the file fitsio.h.
+
+ - in ffopen, reserved space for 4 more characters in the input
+ file name in case a '.zip' suffix needs to be added.
+
+ - small changes to ffpclx to fix problems when writing bit (X) data
+ columns beyond the current end of file.
+
+ - fixed small bug in ffcrhd where a dummy pointer was not initialized
+
+ - initialized the dummy variable in ffgcfe and ffgcfd which
+ was causing crashes under OSF in some cases.
+
+ - increased the length of the allocated string ffgkls by 2
+ to support the case of reading a numeric keyword as a string
+ which doesn't have the enclosing quote characters.
+
+Version 1.4 - 6 Feb 1998
+
+ - major restructuring of the CFITSIO User's Guide
+
+ - added the new 'iterator' function. The fortran wrapper is
+ in f77_iter.c for now.
+
+ - enhanced ffcrtb so that it writes a dummy primary array
+ if none currently exists before appending the table.
+
+ - removed the ffgcl routine and replaced it with ffgcvl
+
+ - modified ffpcnl to just take a single input null value instead
+ of an entire array of null value flags.
+
+ - modified ffcmps and ffgnxk so that, for example, the string 'rate'
+ is not considered a match to the string 'rate2', and 'rate*'
+ is a match to the string 'rate'.
+
+ - modified ffgrsz to also work with images, in which case
+ it returns the optimum number of pixels to process at
+ one time.
+
+ - modified ffgthd to support null valued keywords
+
+ - added a new source file 'f77_wrap.c' that includes all the
+ Fortran77 wrapper routines for calling CFITSIO. This will
+ eventually replace the Fortran FITSIO library.
+
+ - added new routines:
+ ffppn - generic write primary array with null values
+ ffpprn - write null values to primary array
+
+ ffuky - 'update' a keyword value, with any specified datatype.
+
+ ffrprt - write out report of error status and error messages
+ ffiter - apply a user function iteratively to all the rows of a table
+ ffpkyc - write complex-valued keyword
+ ffpkym - write double complex-valued keyword
+ ffpkfc - write complex-valued keyword in fixed format
+ ffpkfm - write double complex-valued keyword in fixed format
+
+ ffgkyc - read complex-valued keyword
+ ffgkym - read double complex-valued keyword
+
+ ffmkyc - modify complex-valued keyword
+ ffmkym - modify double complex-valued keyword
+ ffmkfc - modify complex-valued keyword in fixed format
+ ffmkfm - modify double complex-valued keyword in fixed format
+
+ ffukyc - update complex-valued keyword
+ ffukym - update double complex-valued keyword
+ ffukfc - update complex-valued keyword in fixed format
+ ffukfm - update double complex-valued keyword in fixed format
+
+ ffikyc - insert complex-valued keyword
+ ffikym - insert double complex-valued keyword
+ ffikfc - insert complex-valued keyword in fixed format
+ ffikfm - insert double complex-valued keyword in fixed format
+
+ ffpktp - write or modify keywords using ASCII template file
+ ffcpcl - copy a column from one table to another
+ ffcpky - copy an indexed keyword from one HDU to another
+ ffpcnl - write logical values, including nulls, to binary table
+ ffpcns - write string values, including nulls, to table
+ ffmnhd - move to HDU with given exttype, EXTNAME and EXTVERS values
+ ffthdu - return the total number of HDUs in the file
+ ffghdt - return the type of the CHDU
+ ffflnm - return the name of the open FITS file
+ ffflmd - return the mode of the file (READONLY or READWRITE)
+
+ - modified ffmahd and ffmrhd (to move to a new extension) so that
+ a null pointer may be given for the returned HDUTYPE argument.
+
+ - worked around a bug in the Mac CWpro2 compiler by changing all
+ the statements like "#if BYTESWAPPED == TRUE" to "if BYTESWAPPED".
+
+ - modified ffitab (insert new ASCII table) to allow tables with
+ zero number of columns
+
+ - modified Makefile.in and configure to define the -Dg77Fortran
+ CFLAGS variable on Linux platforms. This is needed to
+ compile the new f77_wrap.c file (which includes cfortran.h)
+
+ Bug Fixes:
+
+ - fixed small bug in ffgrz (get optimum row size) which sometimes
+ caused it to return slightly less than the maximum optimum size.
+ This bug would have done no harm to application programs.
+
+ - fixed bug in ffpclk and ffgclk to add an 'else' case
+ if size of int is not equal to size of short or size of long.
+
+ - added test to ffgkls to check if the input string is not null before
+ allocating memory for it.
+
+Version 1.32 - 21 November 1997 (internal release only)
+
+ - fixed bug in the memory deallocation (free) statements
+ in the ffopen routine in the cfileio.c file.
+
+ - modified ffgphd to tolerate minor violations of the FITS
+ standard in the format of the XTENSION = 'IMAGE '
+ keyword when reading FITS files. Extra trailing spaces
+ are now allowed in the keyword value. (FITS standard
+ will be changed so that this is not a violation).
+
+Version 1.31 - 4 November 1997 (internal release only)
+
+ Enhancements:
+
+ - added support for directly reading compressed FITS files
+ by copying the algorithms from the gzip program. This
+ supports the Unix compress, gzip and pkzip algorithms.
+
+ - modified ffiimg, ffitab, and ffibin (insert HDUs into
+ a FITS file) so that if the inserted HDU is at the end of
+ the FITS file, then it simply appends a new empty HDU
+ and writes the required keywords. This allows space
+ to be reserved for additional keywords in the header
+ if desired.
+
+ - added the ffchfl and ffcdfl routines to check the header and
+ data fill values, for compatibility with the Fortran FITSIO
+ library.
+
+ - added the ffgsdt routine to return the system date
+ for compatibility with the Fortran FITSIO library.
+
+ - added a diagnostic error message (written to the error stack)
+ if the routines that read data from image or column fail.
+
+ - modified ffgclb so that it simply copies the bytes from
+ an ASCII 'nA' or 'An' format column into the user's byte
+ array. Previously, CFITSIO would return an error when
+ trying to read an 'A' column with ffgclb.
+
+ - modified ffpclb so that it simply copies the input array
+ of bytes to an ASCII 'nA' or 'An' format column.
+ Previously, CFITSIO would return an error when
+ trying to write to an 'A' column with ffpclb.
+
+ Bug Fixes:
+
+ - ffgkls was allocating one too few bytes when reading continued
+ string keyword values.
+
+ - in testprog.c added code to properly free the memory that
+ had been allocated for string arrays.
+
+ - corrected typographical errors in the User's Guide.
+
+Version 1.30 - 11 September 1997
+
+ - major overhaul to support reading and writing FITS files
+ in memory. The new routines fits_set_mem_buff and
+ fits_write_mem_buff have been added to initialize and
+ copy out the memory buffer, respectively.
+
+ - added support for reading FITS files piped in on 'stdin'
+ and piped out on 'stdout'. Just specify the file name as '-'
+ when opening or creating the FITS file.
+
+ - added support for 64-bit SGI IRIX machines. This required
+ adding routines to pack and unpack 32-bit integers into
+ 64-bit integers.
+
+ - cleaned up the code that supports G_FLOAT and IEEE_FLOAT
+ on Alpha VMS systems. Now, the type of float is determined
+ at compile time, not run time.
+
+ Bug Fixes:
+
+ - replaced the malloc calls in the error message stack routines
+ with a static fixed size array. The malloc's cause more
+ problems than they solved, and were prone to cause memory
+ leaks if users don't clear the error message stack when
+ closing the FITS file.
+
+ - when writing float or double keywords, test that the value
+ is not a special IEEE value such as a NaN. Some
+ compilers would write the string 'NaN' in this case into
+ the output value string.
+
+ - fixed bug in ffiblk, to ignore EOF status return if it is
+ inserting blocks at the end of the file.
+
+ - removed the 'l' from printf format string that is constructed
+ in the ffcfmt routine. This 'l' is non-standard and causes problems
+ with the Metrowerks compiler on a Mac.
+
+ - the default null value in images was mistakenly being set
+ equal to NO_NULL = 314, rather than NULL_UNDEFINED = 1234554321
+ in the ffgphd routine.
+
+ - check status value in ffgkls to make sure the keyword exists
+ before allocating memory for the value string.
+
+ - fixed the support for writing and reading unsigned long integer
+ keyword values in ffpky and ffgky by internally treating
+ the values as doubles. This required changes to ffc2r and
+ ffc2d as well.
+
+ - added explicit cast to 'double' in one place in putcolb.c and
+ 6 places in pubcolui.c, to get rid of warning messages issued
+ by one compiler.
+
+ - in ffbinit and ffainit, it is necessary to test that tfield > 0
+ before trying to allocate memory with calloc. Otherwise, some
+ compilers return a null pointer which CFITSIO interprets to
+ mean the memory allocation failed.
+
+ - had to explicitly cast the null buffer pointer to a char
+ pointer (cptr = (char *)buffer;) in 4 places in the buffers.c
+ file to satisfy a picky C++ compiler.
+
+ - changed the test for an ALPHA VMS system to see if
+ '__VMS' is defined, rather than 'VMS'. The latter
+ is not defined by at least one C++ compiler.
+
+ - modified ffpcls so that it can write a null string to
+ a variable length string column, without going into
+ an infinite loop.
+
+ - fixed bug in ffgcfl that caused the 'next' variable to be
+ incremented twice.
+
+ - fixed bug in ffgcpr that caused it write 2x the number of
+ complex elements into the descriptor when writing to
+ a complex or double complex variable length array column.
+
+ - added call to ffrdef at the end of ffrsim to ensure that
+ the internal structures are updated to correspond to the
+ modified header keywords
+
+Version 1.25 - 7 July 1997
+
+ - improved the efficiency of the ffiblk routine, when inserting
+ more than one block into the file.
+
+ - fixed bug in ffwend that in rare instances caused the beginning
+ of the following extension to be overwritten by blank fill.
+
+ - added new routine to modify the size of an existing primary
+ array or image extension: fits_resize_img/ffrsim.
+
+ - added support for null-valued keywords, e.g., keywords that
+ have no defined value. These keywords have an equal sign and
+ space in columns 9-10, but have not value string. Example:
+ KEYNAME = / null-valued keyword
+ Support for this feature required the following changes:
+ - modified ffpsvc to return a null value string without error
+ - modified ffc2[ilrd] to return error VALUE_UNDEFINED in this case
+ - modified ffgkn[sljed] to continue reading additional keywords
+ even if one or more keywords have undefined values.
+ - added 4 new routines: ffpkyu, ffikyu, ffmkyu, ffukyu to
+ write, insert, modify, or update an undefined keyword
+
+ - a new makefile.os2 file was added, for building CFITSIO
+ on OS/2 systems.
+
+ - modified ffgtkn so that if it finds an unexpected keyword
+ name, the returned error status = BAD_ORDER instead of
+ NOT_POS_INT.
+
+ - added 2 new routines, fits_write_key_unit/ffpunt and
+ fits_read_key_unit/ffgunt to write/read the physical
+ units of a keyword value. These routines use a local
+ FITS convention for storing the units in square brackets
+ following the '/' comment field separator, as in:
+ VELOCITY= 12 / [km/s] orbit speed
+ The testprog.c program was modified to test these
+ new routines.
+
+ - in the test of Alpha OSF/1 machines in fitsio2.h,
+ change 'defined(unix)' to 'defined(__unix__)' which
+ appears to be a more robust test.
+
+ - remove test for linux environment variable from fitsio2.h
+
+Version 1.24 - 2 May 1997
+
+ - fixed bug in ffpbyt that incorrectly computed the current
+ location in the FITS file when writing > 10000 bytes.
+
+ - changed the datatype of the 'nbytes' parameter in ffpbyt
+ from 'int' to 'long'. Made corresponding datatype change
+ to some internal variables in ffshft.
+
+ - changed '(unsigned short *)' to '(short *)' in getcolui.c, and
+ changed '(unsigned long *)' to '(long *)' in getcoluj.c, to
+ work around problem with the VAX/VMS cc compiler.
+
+Version 1.23 - 24 April 1997
+
+ - modified ffcins and ffdins (in editcol.c) to simply return
+ without error if there are no (zero) rows in the table.
+
+Version 1.22 - 18 April 1997
+
+ - fixed bug in ffgcpr that caused it to think that all values were
+ undefined in ASCII tables columns that have TNULLn = ' '
+ (i.e., the TNULLn keyword value is a string of blanks.
+
+ - fixed bug in the ffgcl[bdeijk,ui,uj] family of routines
+ when parsing a numeric value in an ASCII table. The
+ returned values would have the decimal place shifted to
+ the left if the table field contained an explicit decimal
+ point followed by blanks. Example: in an F5.2 column,
+ the value '16. ' would be returned as 0.16. If the
+ trailing zeros were present, then cfitsio returned the
+ correct value (e.g., '16.00' returns 16.).
+
+ - fixed another bug in the ffgcl[bdeijk,ui,uj] family of routines
+ that caused them to misread values in an ASCII table in rows
+ following an undefined value when all the values were read
+ at once in a single call to the routine.
+
+Version 1.21 - 26 March 1997
+
+ - added general support for reading and writing unsigned integer
+ keywords, images, and binary table column values.
+
+ - fixed bug in the way the column number was used in ffgsve and
+ similar routines. This bug caused cfitsio to read (colnum - 1)
+ rather than the desired column.
+
+ - fixed a bug in ftgkls that prevented it from reading more than one
+ continuation line of a long string keyword value.
+
+ - fixed the definition of fits_write_longwarn in longnam.h
+
+Version 1.20 - 29 Jan 1997
+
+ - when creating a binary table with variable length vector columns, if the
+ calling routine does not specify a value for the maximum length of
+ the vector (e.g., TFORMn = '1PE(400)') then cfitsio will automatically
+ calculate the maximum value and append it to the TFORM value
+ when the binary table is first closed.
+
+ - added the set of routines to do coordinate system transformations
+
+ - added support for wildcards ('*', '?', and '#') in the input
+ keyword name when reading, modifying, or deleting keywords.
+
+ - added new general keyword reading routine, ffgnxk, to return
+ the next keyword whose name matches a list of template names,
+ but does not match any names on a second template list.
+
+ - modified ftgrec so that it simply moves to the beginning
+ of the header if the input keyword number = 0
+
+ - added check in ffdelt to make sure the input fits file pointer is
+ not already null
+
+ - added check in ffcopy to make sure the output HDU does not
+ already contain any keywords (it must be empty).
+
+ - modified ffgcls so that it does not test if each string column
+ value equals the null string value if the null string value
+ is longer than the width of the column.
+
+ - fixed bug in ftgtdm that caused it to fail if the TDIMn
+ keyword did not exist in the FITS file
+
+ - modified testprog.c to include tests of keyword wildcards
+ and the WCS coordinate transformation routines.
+
+ - added a test for 'EMX' in fitsio2.h so that cfitsio builds
+ correctly on a PC running OS/2.
+
+Version 1.11 - 04 Dec 1996
+
+ - modified the testprog.c program that is included with the
+ distribution, so that the output FITS file is identical to
+ that produced by the Fortran FITSIO test program.
+
+ - changed all instances of the 'extname' variable to 'extnm'
+ to avoid a conflict with the -Dextname switch in cfortran.h
+ on HP machines.
+
+ - in all the routines like ffi4fi1, which convert an array
+ of values to integers just prior to writing them to the FITS
+ file, the integer value is now rounded to the nearest integer
+ rather than truncated. (ffi4fi1, ffi4fi2, ffi4fi4, etc)
+
+ - changed ffgcfl (and hence ffgcl) so that the input value
+ of the logical array element is not changed if the corresponding
+ FITS value is undefined.
+
+ - in ffgacl, the returned value of TBCOL was off by 1 (too small)
+
+ - fixed the comment of EXTNAME keyword to read 'binary table'
+ instead of 'ASCII table' in the header of binary tables.
+
+Version 1.101 - 17 Nov 1996
+
+ - Made major I/O efficiency improvements by adding internal buffers
+ rather than directly reading or writing to disk. Access to
+ columns in binary tables is now 50 - 150 times faster. Access to
+ FITS image is also slightly faster.
+
+ - made significant speed improvements when reading numerical data
+ in FITS ASCII tables by writing my own number parsing routines
+ rather than using the sscanf C library routine. This change
+ requires that the -lm argument now be included when linking
+ a program that calls cfitsio (under UNIX).
+
+ - regrouped the source files into logically related sets of routines.
+ The Makefile now runs much faster since every single routine is
+ not split into a separate file.
+
+ - now use the memcpy function, rather than a 'for' loop in several
+ places for added efficiency
+
+ - redesigned the low-level binary table read and write routines
+ (ffpbytoff and ffgbytoff) for greater efficiency.
+
+ - added a new error status: 103 = too many open FITS files.
+
+ - added a 'extern "C"' statement around the function prototypes
+ in fitsio.h, to support use of cfitsio by C++ compilers.
+
+ - fixed routines for writing or reading fixed-length substrings
+ within a binary table ASCII column, with TFORM values of
+ of the form 'rAw' where 'r' is the total width of the ASCII
+ column and 'w' is the width of a substring within the column.
+
+ - no longer automatically rewrite the END card and following fill
+ values if they are already correct.
+
+ - all the 'get keyword value and comment' routines have been changed
+ so that the comment is not returned if the input pointer is NULL.
+
+ - added new routine to return the optimum number of tables rows
+ that should be read or written at one time for optimum efficiency.
+
+ - modified the way numerical values in ASCII tables are parsed so
+ that embedded spaces in the value are ignored, and implicit
+ decimal points are now supported. (e.g, the string '123E 12'
+ in a 'E10.2' format column will be interpreted as 1.23 * 10**12).
+
+ - modified ffpcl and ffgcl to support binary table columns of
+ all datatype (added logical, bit, complex, and double complex)
+
+ - when writing numerical data to ASCII table columns, the ffpcl_
+ routines now return an overflow error if a value is too large
+ to be expressed in the column format.
+
+ - closed small memory leak in ffpcls.
+
+ - initialized the 'incre' variable in ffgcpr to eliminate compiler warning.
+
+Version 1.04 - 17 Sept 1996
+
+ - added README.MacOS and cfitsio_mac.sit.hqx to the distribution
+ to support the Mac platforms.
+
+ - fixed bug in ffpdfl that caused an EOF error (107) when a program
+ creates a new extension that is an exact multiple of 2880 bytes long,
+ AND the program does not write a value to the last element
+ in the table or image.
+
+ - fixed bug in all the ffgsf* and ffgcv* routines which caused
+ core dumps when reading null values in a table.
+
+Version 1.03 - 20 August 1996
+
+ - added full support for reading and writing the C 'int'
+ data type. This was a problem on Alpha/OSF where short,
+ int, and long datatypes are 2, 4, and 8 bytes long, respectively.
+
+ - cleaned up the code in the byte-swapping routines.
+
+ - renamed the file 'longname.h' to 'longnam.h' to avoid conflict
+ with a file with the same name in another unrelated package.
+
+Version 1.02 - 15 August 1996
+
+ - ffgtbp was not correctly reading the THEAP keyword, hence would
+ not correctly read variable length data in binary tables if
+ the heap was not at the default starting location (i.e.,
+ starting immediately after the fixed length table).
+
+ - now force the cbuff variable in ffpcl_ and ffgcl_ to be
+ aligned on a double word boundary. Non-alignment can
+ cause program to crash on some systems.
+
+Version 1.01 - 12 August 1996
+
+ - initial public release