/******************************************************************************/ /* Peter Kirchgessner */ /* e-mail: pkirchg@aol.com */ /* WWW : http://members.aol.com/pkirchg */ /******************************************************************************/ /* #BEG-HDR */ /* */ /* Package : FITS reading/writing library */ /* Modul-Name : fitsrw.h */ /* Description : Include file for FITS-r/w-library */ /* Function(s) : */ /* Author : P. Kirchgessner */ /* Date of Gen. : 12-Apr-97 */ /* Last modified : 17-May-97 */ /* Version : 0.10 */ /* Compiler Opt. : */ /* Changes : */ /* */ /* #END-HDR */ /******************************************************************************/ #ifndef FITS_MAX_AXIS #include #define FITS_CARD_SIZE 80 #define FITS_RECORD_SIZE 2880 #define FITS_MAX_AXIS 999 #define FITS_NADD_CARDS 128 /* Data representations */ typedef unsigned char FITS_BITPIX8; typedef short FITS_BITPIX16; typedef long FITS_BITPIX32; typedef float FITS_BITPIXM32; typedef double FITS_BITPIXM64; typedef int FITS_BOOL; typedef long FITS_LONG; typedef double FITS_DOUBLE; typedef char FITS_STRING[FITS_CARD_SIZE]; typedef enum { typ_bitpix8, typ_bitpix16, typ_bitpix32, typ_bitpixm32, typ_bitpixm64, typ_fbool, typ_flong, typ_fdouble, typ_fstring } FITS_DATA_TYPES; /* How to transform FITS pixel values */ typedef struct { double pixmin, pixmax; /* Pixel values [pixmin,pixmax] should be mapped */ double datamin, datamax; /* to [datamin,datamax] */ double replacement; /* datavalue to use for blank or NaN pixels */ char dsttyp; /* Destination typ ('c' = char) */ } FITS_PIX_TRANSFORM; typedef union { FITS_BITPIX8 bitpix8; FITS_BITPIX16 bitpix16; FITS_BITPIX32 bitpix32; FITS_BITPIXM32 bitpixm32; FITS_BITPIXM64 bitpixm64; FITS_BOOL fbool; FITS_LONG flong; FITS_DOUBLE fdouble; FITS_STRING fstring; } FITS_DATA; typedef struct fits_record_list { /* Record list */ char data[FITS_RECORD_SIZE]; struct fits_record_list *next_record; } FITS_RECORD_LIST; typedef struct fits_hdu_list { /* Header and Data Unit List */ long header_offset; /* Offset of header in the file */ long data_offset; /* Offset of data in the file */ long data_size; /* Size of data in the HDU (including pad)*/ long udata_size; /* Size of used data in the HDU (excl. pad) */ int bpp; /* Bytes per pixel */ int numpic; /* Number of interpretable images in HDU */ int naddcards; /* Number of additional cards */ char addcards[FITS_NADD_CARDS][FITS_CARD_SIZE]; struct { char nan_value; /* NaN's found in data ? */ char blank_value; /* Blanks found in data ? */ /* Flags specifying if some cards are used */ char blank; /* The corresponding data below is only */ char datamin; /* valid, if the flag is set. */ char datamax; char simple; /* This indicates a simple HDU */ char xtension; /* This indicates an extension */ char gcount; char pcount; char bzero; char bscale; char groups; char extend; } used; double pixmin, pixmax; /* Minimum/Maximum pixel values */ /* Some decoded data of the HDU: */ int naxis; /* Number of axes */ int naxisn[FITS_MAX_AXIS]; /* Sizes of axes (NAXIS1 --> naxisn[0]) */ int bitpix; /* Data representation (8,16,32,-16,-32) */ /* When using the following data, */ /* the used-flags must be checked before. */ long blank; /* Blank value */ double datamin, datamax; /* Minimum/Maximum physical data values */ char xtension[FITS_CARD_SIZE]; /* Type of extension */ long gcount, pcount; /* Used by XTENSION */ double bzero, bscale; /* Transformation values */ int groups; /* Random groups indicator */ int extend; /* Extend flag */ FITS_RECORD_LIST *header_record_list; /* Header records read in */ struct fits_hdu_list *next_hdu; } FITS_HDU_LIST; typedef struct { FILE *fp; /* File pointer to fits file */ char openmode; /* Mode the file was opened (0, 'r', 'w') */ int n_hdu; /* Number of HDUs in file */ int n_pic; /* Total number of interpretable pictures */ int nan_used; /* NaN's used in the file ? */ int blank_used; /* Blank's used in the file ? */ FITS_HDU_LIST *hdu_list; /* Header and Data Unit List */ } FITS_FILE; /* User callable functions of the FITS-library */ FITS_FILE *fits_open (char *filename, char *openmode); void fits_close (FITS_FILE *ff); FITS_HDU_LIST *fits_add_hdu (FITS_FILE *ff); int fits_add_card (FITS_HDU_LIST *hdulist, char *card); int fits_write_header (FITS_FILE *ff, FITS_HDU_LIST *hdulist); FITS_HDU_LIST *fits_image_info (FITS_FILE *ff, int picind, int *hdupicind); FITS_HDU_LIST *fits_seek_image (FITS_FILE *ff, int picind); void fits_print_header (FITS_HDU_LIST *hdr); FITS_DATA *fits_decode_card (const char *card, FITS_DATA_TYPES data_type); char *fits_search_card (FITS_RECORD_LIST *rl, char *keyword); int fits_read_pixel (FITS_FILE *ff, FITS_HDU_LIST *hdulist, int npix, FITS_PIX_TRANSFORM *trans, void *buf); char *fits_get_error (void); /* Demo functions */ #define FITS_NO_DEMO int fits_to_pgmraw (char *fitsfile, char *pgmfile); int pgmraw_to_fits (char *pgmfile, char *fitsfile); #endif