diff options
Diffstat (limited to 'fitsy/fitsy.h')
-rw-r--r-- | fitsy/fitsy.h | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/fitsy/fitsy.h b/fitsy/fitsy.h new file mode 100644 index 0000000..182be0e --- /dev/null +++ b/fitsy/fitsy.h @@ -0,0 +1,393 @@ +/* Fitsy FITS Image Library. + */ + +#ifndef FITSY_H +#define FITSY_H + +#if HAVE_CONFIG_H +#include "conf.h" +#endif + +#if USE_XFILEIO +#include "xfileio.h" +#else +#include "xfile.h" +#endif + +#ifdef __STDC__ +#define PROTOTYPE(X) X +#else +#define PROTOTYPE(X) ( ) +#endif + +#ifndef UNUSED +#ifdef __GNUC__ +# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__)) +#else +# define UNUSED(x) UNUSED_ ## x +#endif +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#include <ctype.h> + +#include "longlong.h" + +#ifndef NULL +#define NULL 0 +#endif + +#define FT_BITS 23040 +#define FT_BLOCK 2880 +#define FT_CARDLEN 80 +#define FT_WORDLEN 8 +#define FT_CARDS (FT_BLOCK/FT_CARDLEN) + +#define FT_UNSIGNED 0x1000 +#define FT_BITPIX -1 + +#define FT_FILENAME 4096 +#define FT_MAXAXES 10 + +#define ft_fitsbloks(bytes) ((bytes+(FT_BLOCK-1))/FT_BLOCK) + +/* Card memory types + */ +#define FT_MALLOC 1 +#define FT_MMAP 2 +#define FT_SHMAT 3 +#define FT_EXTERN 4 + +typedef enum { + FT_UNKNOWN = 0 + , FT_COMMENT + , FT_LOGICAL + , FT_INTEGER + , FT_STRING + , FT_VALUE + , FT_REAL + , FT_COMPLEX + , FT_LONG +} FITSType; + +typedef struct _FITSBuff { + char c[FT_CARDLEN]; +} FITSBuff; + +typedef FITSBuff *FITSCard; + +extern char *FT_Comment; + +#define ft_simple(fits) ( fits->basic->simple ) +#define ft_name(fits) ( fits->basic->name ) +#define ft_hduname(fits) ( fits->basic->hduname ) +#define ft_extn(fits) ( fits->basic->extn ) +#define ft_bitpix(fits) ( fits->basic->bitpix ) +#define ft_naxes(fits) ( fits->basic->naxes ) +#define ft_naxis(fits, i) ( fits->basic->naxis[i-1]) +#define ft_pcount(fits) ( fits->basic->pcount ) +#define ft_gcount(fits) ( fits->basic->gcount ) +#define ft_databytes(fits) ( fits->basic->databytes) +#define ft_datapixls(fits) ( fits->basic->datapixls) +#define ft_databloks(fits) ( fits->basic->databloks) +#define ft_rowbytes(fits) ( fits->basic->row_bytes) + +typedef struct _FITSBasic { + int simple; + char *name; + char *hduname; + int extn; + + int bitpix; + int naxes; + int naxis[FT_MAXAXES]; + + int gcount; + int pcount; + + size_t databytes; + int datapixls; + size_t databloks; + int row_bytes; +} *FITSBasic; + + +#define ft_hasbscale(fits) ( fits->image->has_bscale ) +#define ft_bscale(fits) ( fits->image->dbscale ) +#define ft_hasbzero(fits) ( fits->image->has_bzero ) +#define ft_bzero(fits) ( fits->image->dbzero ) +#define ft_hasscaling(fits) ( fits->image->has_bzero || fits->image->has_bscale ) +#define ft_hasblank(fits) ( fits->image->has_blank ) +#define ft_blank(fits) ( fits->image->blank ) + +typedef struct _FITSLinWCS { + int has_wcs; + + double fwd[3][2]; + double rev[3][2]; +} *FITSLinWCS; + +#define ft_phy2img(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->log, x0, y0, x1, y1, 1) +#define ft_img2phy(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->log, x0, y0, x1, y1, 0) +#define ft_phy2amp(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->amp, x0, y0, x1, y1, 1) +#define ft_amp2phy(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->amp, x0, y0, x1, y1, 0) +#define ft_phy2det(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->det, x0, y0, x1, y1, 1) +#define ft_det2phy(fits, x0, y0, x1, y1) ft_trxlcs(&fits->image->det, x0, y0, x1, y1, 0) + +#define ft_phy2img_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->log, x0, y0, x1, y1, 1) +#define ft_img2phy_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->log, x0, y0, x1, y1, 0) +#define ft_phy2amp_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->amp, x0, y0, x1, y1, 1) +#define ft_amp2phy_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->amp, x0, y0, x1, y1, 0) +#define ft_phy2det_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->det, x0, y0, x1, y1, 1) +#define ft_det2phy_size(fits, x0, y0, x1, y1) ft_trxsiz(&fits->image->det, x0, y0, x1, y1, 0) + +typedef struct _FITSImage { + int has_bscale; + double dbscale; + int has_bzero; + double dbzero; + + int has_blank; + int blank; + + struct _FITSLinWCS log; + struct _FITSLinWCS det; + struct _FITSLinWCS amp; +} *FITSImage; + +typedef struct _FITSTCol { + int type; + int n; + int size; + int width; + int offset; + char *format; + + char *vla; + int vla_type; + int vla_max; + + int heap; + + char *name; + char *unit; + char *disp; + + int prec; + + int has_scale; + double scale; + int has_zero; + double zero; + int scaled; + + int has_blank; + char *ablank; + double dblank; +} *FITSTCol; + +typedef struct _FITSTable { + int tabtype; /* TABLE or BINTABLE */ + int tfields; /* # of fields */ + FITSTCol col; /* Column pointers */ +} *FITSTable; + + +#define ft_cards(fits) ( (void *)fits->cards ) +#define ft_data(fits) ( fits->data ) +#define ft_ncards(fits) ( fits->ncard ) +#define ft_cardnth(fits, nth) ( ( nth <= fits->ncard ) \ + ? &fits->cards[nth-1] \ + : NULL ) + +#define ft_last(fits) ft_cardnth(fits, fits->ncard) + +#define ft_byteswap() (*(short *)"\001\000" & 0x0001) +#define ft_seek(fits) ( fits->seek ) + +typedef struct _FITSHead { + FITSCard cards; + FITSCard *index; + FITSCard last; + int acard; + int ncard; + + char *filename; + File file; + + off_t seek; + off_t data; + int step; + + void *cache; + int nbuffers; + int buffrows; + + int mem; + char *mmap_here; + int mmap_size; + + int sync; + + FITSBasic basic; + FITSImage image; + FITSTable table; + + struct _FITSHead*primary; + int rfcount; +} *FITSHead; + +typedef struct _FITSFile { + FITSHead head; + void *data; + int bitpix; +} *FITSFile; + + +#ifdef __cplusplus +extern "C" { +#endif + +/* cardfind.c */ +FITSCard ft_cardfind PROTOTYPE((FITSHead fits, FITSCard key, int add)); +FITSCard ft_cardfindidx PROTOTYPE((FITSHead fits, FITSCard key, int *match)); +FITSCard ft_cardfindseq PROTOTYPE((FITSHead fits, FITSCard key, int *match)); +FITSCard ft_cardfindblok PROTOTYPE((FITSCard cards, FITSCard key, int *match, int *nhist)); +/* cardfmt.c */ +int ft_isblank PROTOTYPE((char *s)); +FITSCard ft_cardfmt PROTOTYPE((FITSCard card, char *name, int n, FITSType type, void *value, int prec, char *comm)); +FITSCard ft_cardkey PROTOTYPE((FITSCard card, char *name, int n)); +FITSCard ft_cardset PROTOTYPE((FITSCard card, FITSType type, void *value, int prec, char *comm)); +FITSCard ft_cardsetl PROTOTYPE((FITSCard card, int lvalue, char *comm)); +FITSCard ft_cardseti PROTOTYPE((FITSCard card, int ivalue, char *comm)); +FITSCard ft_cardsetil PROTOTYPE((FITSCard card, longlong ivalue, char *comm)); +FITSCard ft_cardsetr PROTOTYPE((FITSCard card, double rvalue, int prec, char *comm)); +FITSCard ft_cardsets PROTOTYPE((FITSCard card, char *svalue, char *comm)); +FITSCard ft_cardclr PROTOTYPE((FITSCard card, int ncards)); +FITSCard ft_cardcpy PROTOTYPE((FITSCard card1, FITSCard card2)); +/* cardins.c */ +FITSCard ft_cardins PROTOTYPE((FITSHead fits, FITSCard card, FITSCard here)); +FITSCard ft_cardapp PROTOTYPE((FITSHead fits, FITSCard card)); +FITSCard ft_carddel PROTOTYPE((FITSHead fits, FITSCard card)); +/* cardpar.c */ +char *ft_cardpar PROTOTYPE((FITSCard card, FITSType *type, char *value, int *index, char *comm)); +char *ft_cardget PROTOTYPE((FITSCard card)); +int ft_cardgetl PROTOTYPE((FITSCard card)); +int ft_cardgeti PROTOTYPE((FITSCard card)); +longlong ft_cardgetil PROTOTYPE((FITSCard card)); +double ft_cardgetr PROTOTYPE((FITSCard card)); +char *ft_cardgets PROTOTYPE((FITSCard card)); +/* ftimage.c */ +int ft_shmdt PROTOTYPE((FITSHead fits)); +FITSImage ft_imageloadhead PROTOTYPE((FITSHead fits)); +void ft_imagestorhead PROTOTYPE((FITSHead fits, FITSImage image)); +void ft_imagefree PROTOTYPE((FITSImage image)); +FITSBasic ft_basicloadhead PROTOTYPE((FITSHead fits)); +void ft_basicstorhead PROTOTYPE((FITSHead fits, FITSBasic basic)); +void ft_basicfree PROTOTYPE((FITSBasic basic)); +/* fttable.c */ +FITSTable ft_tableloadhead PROTOTYPE((FITSHead fits)); +void ft_tablestorhead PROTOTYPE((FITSHead fits, FITSTable table)); +void ft_tablefree PROTOTYPE((FITSTable table)); +/* headtable.c */ +int ft_sizeof PROTOTYPE((int type)); +/* headfile.c */ +FITSHead ft_headread0 PROTOTYPE((File file, char *card1, size_t n)); +FITSHead ft_headread PROTOTYPE((File file)); +int ft_headwrite PROTOTYPE((File file, FITSHead fits)); +void *ft_fileparse PROTOTYPE((File ifile, int (*callback)(File ifile, FITSHead fits, void *data, void *cdata1), void *cdata)); +off_t ft_dataskip PROTOTYPE((File ifile, FITSHead fits, File *ofile, int nofile)); +off_t ft_dataseek PROTOTYPE((File file, FITSHead fits)); +void *ft_dataread PROTOTYPE((File file, FITSHead fits, void *dataptr, int pixtype)); +int ft_simpleimageread PROTOTYPE((char *filename, FITSHead *headptr, void **dataptr, void ***data2dptr, int pixtype)); +int ft_simpleimagemmap PROTOTYPE((char *filename, FITSHead *headptr, void **dataptr, void ***data2dptr, int prot, int share)); +int ft_munmap(FITSHead fits); +int ft_imageread PROTOTYPE((File file, FITSHead *headptr, void **dataptr, void ***data2dptr, int pixtype)); +int ft_simpleimagewrite PROTOTYPE((char *filename, FITSHead fits, void *data, int pixtype)); +int ft_imagewrite PROTOTYPE((File file, FITSHead fits, void *data, int pixtype)); +void *ft_dataswap PROTOTYPE((void *to, void *from, size_t n, int type)); +FITSFile ft_fileread PROTOTYPE((File file, int flag, int pixtype, int *n)); +void *ft_filedata PROTOTYPE((File file, FITSFile ft)); +/* headfind.c */ +FITSCard ft_headfind PROTOTYPE((FITSHead fits, char *name, int n, int add)); +void ft_headindex PROTOTYPE((FITSHead fits)); +FITSCard ft_headfindidx PROTOTYPE((FITSHead fits, char *name, int n, int *match)); +FITSCard ft_headfindseq PROTOTYPE((FITSHead fits, char *name, int n, int *match)); +/* headinit.c */ +FITSHead ft_headinit PROTOTYPE((void *cards, int acard)); +FITSHead ft_headcopy PROTOTYPE((FITSHead fits)); +void ft_primlink PROTOTYPE((FITSHead prim, FITSHead fits)); + +void ft_headfree PROTOTYPE((FITSHead fits, int freecards)); +void ft_setcards PROTOTYPE((FITSHead fits, void *cards)); +/* headins.c */ +FITSCard ft_headinsl PROTOTYPE((FITSHead fits, char *name, int n, int lvalue, char *comm, FITSCard here)); +FITSCard ft_headinsi PROTOTYPE((FITSHead fits, char *name, int n, int ivalue, char *comm, FITSCard here)); +FITSCard ft_headinsr PROTOTYPE((FITSHead fits, char *name, int n, double dvalue, int prec, char *comm, FITSCard here)); +FITSCard ft_headinss PROTOTYPE((FITSHead fits, char *name, int n, char *svalue, char *comm, FITSCard here)); +FITSCard ft_headinsv PROTOTYPE((FITSHead fits, char *name, int n, char *vvalue, char *comm, FITSCard here)); +FITSCard ft_headappl PROTOTYPE((FITSHead fits, char *name, int n, int lvalue, char *comm)); +FITSCard ft_headappi PROTOTYPE((FITSHead fits, char *name, int n, int ivalue, char *comm)); +FITSCard ft_headappil PROTOTYPE((FITSHead fits, char *name, int n, longlong ivalue, char *comm)); +FITSCard ft_headappr PROTOTYPE((FITSHead fits, char *name, int n, double dvalue, int prec, char *comm)); +FITSCard ft_headapps PROTOTYPE((FITSHead fits, char *name, int n, char *svalue, char *comm)); +FITSCard ft_headappv PROTOTYPE((FITSHead fits, char *name, int n, char *vvalue, char *comm)); +FITSCard ft_headdel PROTOTYPE((FITSHead fits, char *name, int n)); +/* headset.c */ +FITSCard ft_headsetl PROTOTYPE((FITSHead fits, char *name, int n, int lvalue, char *comm, int append)); +FITSCard ft_headseti PROTOTYPE((FITSHead fits, char *name, int n, int ivalue, char *comm, int append)); +FITSCard ft_headsetil PROTOTYPE((FITSHead fits, char *name, int n, longlong ivalue, char *comm, int append)); +FITSCard ft_headsetr PROTOTYPE((FITSHead fits, char *name, int n, double rvalue, int prec, char *comm, int append)); +FITSCard ft_headsets PROTOTYPE((FITSHead fits, char *name, int n, char *svalue, char *comm, int append)); +/* headget.c */ +char *ft_headget PROTOTYPE((FITSHead fits, char *name, int n, FITSCard *card)); +int ft_headgetl PROTOTYPE((FITSHead fits, char *name, int n, int ldefault, FITSCard *card)); +int ft_headgeti PROTOTYPE((FITSHead fits, char *name, int n, int idefault, FITSCard *card)); +longlong ft_headgetil PROTOTYPE((FITSHead fits, char *name, int n, longlong idefault, FITSCard *card)); +double ft_headgetr PROTOTYPE((FITSHead fits, char *name, int n, double ddefault, FITSCard *card)); +char *ft_headgets PROTOTYPE((FITSHead fits, char *name, int n, char *sdefault, FITSCard *card)); + +FITSHead ft_primary PROTOTYPE((FITSHead fits)); +FITSHead ft_headmerge PROTOTYPE((FITSHead fits1, FITSHead fits2, int copy)); +void ft_synchead PROTOTYPE((FITSHead fits)); +void ft_syncdata PROTOTYPE((FITSHead fits)); + +void ft_acht PROTOTYPE((int type1, void* v1, int type2, void* v2, int npix, int direction, int hasscale, double dbscale, double dbzero)); + +void ft_acht2 PROTOTYPE((int type1, void* v1, int type2, void* v2, int npix, int swap, int direction)); + +char **ft_make2d PROTOTYPE((char *ptr, int size, int xstar, int ystar, int xsize, int ysize)); +int ft_datawrite PROTOTYPE((File file, FITSHead fits, void *data, int pixtype)); + +/* fitshead.c */ +int ft_parsefilename PROTOTYPE((char *filename, char *name, char *extn, int nmaxlen, int *indx, char *tail, int tmaxlen)); +int ft_cfile PROTOTYPE((File cfile)); +File ft_fitsheadread PROTOTYPE((File file, char *filename, FITSHead *head, char *mode, char *iline, File *ifd)); +File ft_fitsheadopen PROTOTYPE((char *filename, FITSHead *head, char *tail, int size, char *mode)); +File ft_fitsheadopenfd PROTOTYPE((char *filename, FITSHead *head, char *tail, int size, char *mode, File file, char *iline, File *ifd)); + +int ft_inverse PROTOTYPE((double f[3][2], double r[3][2])); + +/* dataimage.c */ +void swap2 PROTOTYPE((char *to, char *from, size_t nbytes)); +void swap4 PROTOTYPE((char *to, char *from, size_t nbytes)); +void swap8 PROTOTYPE((char *to, char *from, size_t nbytes)); + +/* headwcs.c */ +int ft_trxlcs PROTOTYPE((FITSLinWCS lcs, double x0, double y0, + double *x1, double *y1, int direction)); +int ft_trxsiz PROTOTYPE((FITSLinWCS lcs, double x0, double y0, + double *x1, double *y1, int direction)); + +#ifdef __cplusplus +} +#endif +#endif + |