summaryrefslogtreecommitdiffstats
path: root/funtools/fitsy/fitsy.h
diff options
context:
space:
mode:
Diffstat (limited to 'funtools/fitsy/fitsy.h')
-rw-r--r--funtools/fitsy/fitsy.h393
1 files changed, 393 insertions, 0 deletions
diff --git a/funtools/fitsy/fitsy.h b/funtools/fitsy/fitsy.h
new file mode 100644
index 0000000..182be0e
--- /dev/null
+++ b/funtools/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
+