/* * Copyright (c) 1999-2003 Smithsonian Astrophysical Observatory */ /* * * funtools.h * */ #ifndef __funtoolsP_h #define __funtoolsP_h #if HAVE_CONFIG_H #include "conf.h" #endif #include #if HAVE_UNISTD_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_STDLIB_H #include #endif #if HAVE_MALLOC_H #include #endif #if HAVE_GETOPT_H #include #endif #include #include "prsetup.h" #define USE_XFILEIO 1 #include "fitsy.h" #undef USE_XFILEIO #include "wcs.h" #include "filter.h" #include "file.h" #include "swap.h" #include "word.h" #include "parse.h" #include "xalloc.h" #include "mkrtemp.h" #include "NaN.h" #include "xlaunch.h" #ifndef MAXINT #define MAXINT 2147483647 #endif #ifndef MININT #define MININT (-MAXINT - 1) #endif #ifndef MAXDBL #define MAXDBL 1.7976931348623157E+308 #endif #ifndef MINDBL #define MINDBL (-MAXDBL) #endif /* blocking types */ #define FUN_SUM 1 #define FUN_AVG 2 /* merge types */ #define MERGE_UPDATE 1 #define MERGE_REPLACE 2 #define MERGE_APPEND 4 /* special "region" column info */ #define COL_REGION_NAME "$REGION" #define COL_REGION_ONAME "REGION" #define COL_REGION_ID -1 #define COL_NUM_NAME "$N" #define COL_NUM_ONAME "N" #define COL_NUM_ID -2 #define COL_UNKNOWN_ID -100 /* image data types */ #define TY_CHAR 1 #define TY_USHORT -2 #define TY_SHORT 2 #define TY_INT 4 #define TY_LONG 8 #define TY_FLOAT -4 #define TY_DOUBLE -8 /* list types for multi-file list support */ #define LIST_NONE 0 #define LIST_FILEORDER 1 #define LIST_SORT 2 #define LIST_TRYSORT 3 #define LIST_UNSORT 4 /* values for scaled flag */ #define FUN_SCALE_EXISTS 1 #define FUN_SCALE_APPLIED 2 /* for a table, do we have an array of structs or a struct of arrays? */ #define FUN_ORG_AOS 1 #define FUN_ORG_SOA 2 /* the usual */ #ifndef DEFAULT_TMPDIR #define DEFAULT_TMPDIR "/tmp" #endif /* max number of ifun links to a single ifun struct */ #define FUN_MAXBFUN 1024 /* max number of columns in a file */ #define FUN_MAXCOL 1000 /* max buffer size when allocating memory to read rows */ #define FUN_MAXBUFSIZE 5000000 /* validation */ #define FUN_MAGIC 14285 #define FUN_VALID(fun) (fun && (*(short *)fun == FUN_MAGIC)) /* save buffer for reading multiple input files from one FunOpen() */ typedef struct savebufstruct{ struct savebufstruct *next; int type; int nrow; char *ebuf; unsigned char *rbuf; } *SaveBuf, SaveBufRec; /* columns record */ typedef struct funcolrec { char *name; int order; int type; int from; int ofrom; int mode; int n; int offset; int width; int tcol; int tindex; int poff; double tlmin; double tlmax; double binsiz; int doblank; /* do we have a BLANK value? */ int tblank; /* blank value */ int scaled; /* valid bscale, bzero values exist */ double tscale; /* bscale value */ double tzero; /* bzero value */ char *tunit; char *tctyp; char *tcrvl; char *tcdlt; char *tcrpx; char *tcrot; char *vla; } *FunCol, FunColRec; /* * * * funtools record structure * */ typedef struct funrec { /* magic MUST be first */ short magic; /* magic number identifying this as fun */ /* top level file info */ char *fname; /* file name */ char *mode; /* open mode */ int type; /* file type -- see above */ int bitpix; /* FITS bitpix defines data type */ double min1, max1; /* x limits for whole image or table */ double min2, max2; /* y limits for whole image or table */ double binsiz1, binsiz2; /* binsize for tables */ int dims; /* number of image dimensions */ int dim1, dim2; /* image dimensions */ int endian; /* 0=little, 1=big */ char *filter; /* filter info from bracket spec */ FITSHead header; /* underlying fitsy handle */ FITSHead theader; /* temp fitsy handle */ FITSHead primary; /* fitsy handle for *output* of primary */ GIO gio; /* I/O handle */ struct WorldCoor *wcs; /* WCS info -- converted to image */ struct WorldCoor *wcs0; /* WCS info -- unconverted to image */ char *activate; /* activation flag */ off_t datastart; /* starting position in file for data */ /* param-specific info */ int doprim; /* write to primary header */ int doraw; /* get raw value */ /* image-specific info */ off_t curpos; /* current position into image */ int primio; /* flag that the primary header was written */ int dtype; /* type of data -- see fits.h */ int dlen; /* length of data buffer */ int dpad; /* length of data padding */ int doblank; /* do we have a BLANK value? */ int blank; /* blank value */ int scaled; /* valid bscale, bzero values exist */ double bscale; /* bscale value */ double bzero; /* bzero value */ /* table-specific info */ char *bincols; /* binning columns string */ int bin[3]; /* pointers to column offsets for binning */ int vbin; /* column offset for val column when binning */ int vop; /* operator to apply to vcol binning */ int overflow; /* how many times we overflowed when binning */ int ncol; /* current nuber of selected columns */ int rowsize; /* size in bytes of selected column records */ int maxbufsize; /* max size of buffer holding columns */ int transparent; /* is mask transparent? */ int org; /* array of structs or struct of arrays? */ int idx; /* should we use filter index if found? */ FunCol *cols; /* selected columns */ off_t headpos; /* position in file for header start */ /* array/table specific info */ int total; /* number of rows in input table */ int left; /* number of rows left to process in table */ int io; /* count of number of putrows */ int skip; /* bytes to skip (for arrays) */ off_t bytes; /* count of bytes output via putrows */ /* text file info */ int nparser; /* number of parsers */ Parse *parsers; /* array of parsers */ /* raw row data buffer */ int rawsize; /* size in bytes of one (input) table row */ int rawbufsize; /* size in bytes of evbuf holding raw rows */ unsigned char *rawbuf; /* raw row buffer */ int dofilt; /* whether to run events through the filter */ Filter filt; /* filter handle */ int nmask; /* number of image masks */ FilterMask masks; /* image masks */ /* binning/section info */ int x0, x1, y0, y1, block, btype; int odims; int odim1, odim2; int obitpix, odtype; /* input/output info */ /* whether we convert data when moving from file to native */ int iconvert, oconvert; /* input fun struct that we used to open */ struct funrec *ifun; /* back-links to structs which use this struct as a reference */ struct funrec *bfun[FUN_MAXBFUN]; /* flag that we are copying all extensions from input */ int icopy; /* whether we merge back into raw input data */ int merge; /* operations performed on this handle */ int ops; /* list support */ int ltype; /* see LIST_XXX above */ int lmem; /* amount of memory for saved buffers */ int ifd; /* ifd of this gio for select() */ struct funrec *head; /* list head, where "global" info resides */ struct funrec *current; /* currently active member: stored in head */ struct funrec *next; /* next member in linked list */ SaveBuf save; /* linked list of save buffers */ FILE *lefp; /* temp file for saved overflow (user data) */ FILE *lrfp; /* temp file for saved overflow (raw data) */ /* view support */ char *view; /* original view */ char *vcols; /* view columns */ char *vfmt; /* view format */ } *Fun, FunRec; #define FUNTOOLS_PRIVATE 1 _PRbeg /* funopen.c */ Fun _FunFITSOpen _PRx((Fun ifun, char *fname, char *mode)); /* funim.c */ void *_FunImageMask _PRx((Fun fun, void *buf, int rstart, int rstop, FilterMask masks, int nmask, char *mode)); int _FunImagePutHeader _PRx((Fun fun, int dim1, int dim2, int bitpix)); /* funtab.c */ void *_FunRead _PRx((Fun fun, char *buf, size_t size, size_t get, size_t *got)); void _FunSaveNaxis2 _PRx((Fun fun)); int _FunFixNaxis2 _PRx((Fun fun)); int _FunTablePutHeader _PRx((Fun fun)); /* funcol.c */ void _FunColumnHeader _PRx((Fun fun, FunCol *cols, int ncol)); void _FunColumnFree _PRx((Fun fun)); /* funcopy.c */ void _FunCopyBinDelete _PRx((FITSHead header, int n)); int _FunCopy2ImageHeader _PRx((Fun from, Fun to)); /* funutils.c */ int _FunPrimaryExtension _PRx((Fun fun)); void _FunParseSection _PRx((Fun fun, char *section, int *min1, int *max1, int *min2, int *max2, int *block, int *btype, char *tail, int maxlen)); int _FunColumnDims _PRx((char *s, int type, double *tlmin, double *tlmax, double *binsiz, int *dims, double *tscale, double *tzero, int *scaled)); void _FunColumnType _PRx((char *s, int *type, int *n, double *tlmin, double *tlmax, double *binsiz, int *dims, double *tscale, double *tzero, int *scaled, int *ptype, int *poff)); int _FunFile _PRx((char *lbuf, char *tbuf, int len, int *lptr)); void * _FunSwap _PRx((void *obuf, void *ibuf, int width, int type)); /* funtext.c */ Fun FunTextOpen _PRx((char *fname, char *mode, char *iline, GIO ifd)); int FunTextParam _PRx((char *pdelims, char *lbuf, char *kbuf, char *vbuf, char *cbuf, int maxlen)); void FunTextParamHeader _PRx((FITSHead theader, char *lbuf, char *key, char *val, char *com, int pgot)); /* funopenp.c */ Fun _FunNew _PRx((void)); int _FunSpecialFile _PRx((char *fname, char *type, char *name, char *tail, char *extn, int mlen)); int _FunRowNum _PRx((Fun fun, char *tail, char *env)); int _FunTableBinCols _PRx((Fun fun, char *tail, char *env)); int _FunTableValCol _PRx((Fun fun, char *tail, char *env)); FITSHead _FunRawEvHeader _PRx((Fun fun, char *iname, char *iext, char *eventdef)); off_t _FunImageSkip _PRx((Fun fun, char *tail)); Fun _FunValid _PRx((Fun fun)); void _FunFree _PRx((Fun fun, int flag)); int _FunImageSize _PRx((Fun fun)); int _FunMaxBufSize _PRx((Fun fun, char *tail)); int _FunOpenCommon _PRx((Fun fun)); /* funvu.c */ int FunView _PRx((Fun fun, char *view, char *vmode, char *fname, int fmax)); _PRend #include "funtools.h" #endif /* __funtoolsP.h */