diff options
Diffstat (limited to 'funtoolsP.h')
-rw-r--r-- | funtoolsP.h | 343 |
1 files changed, 343 insertions, 0 deletions
diff --git a/funtoolsP.h b/funtoolsP.h new file mode 100644 index 0000000..14953ea --- /dev/null +++ b/funtoolsP.h @@ -0,0 +1,343 @@ +/* + * Copyright (c) 1999-2003 Smithsonian Astrophysical Observatory + */ + +/* + * + * funtools.h + * + */ + +#ifndef __funtoolsP_h +#define __funtoolsP_h + +#if HAVE_CONFIG_H +#include "conf.h" +#endif + +#include <stdio.h> +#if HAVE_UNISTD_H +#include <unistd.h> +#endif +#if HAVE_STRING_H +#include <string.h> +#endif +#if HAVE_STDLIB_H +#include <stdlib.h> +#endif +#if HAVE_MALLOC_H +#include <malloc.h> +#endif +#if HAVE_GETOPT_H +#include <getopt.h> +#endif +#include <sys/types.h> +#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 */ |