/* $Id: madrec.h 3304 2011-01-17 15:25:59Z brideout $ */ /* madrigal record structure definition */ /* */ /* jmh 04/22/96 original */ /* jmh 03/24/00 Read/write all file types */ #ifndef _MADRECH_ #define _MADRECH_ #include "cedarIO.h" #define MAXFCH 500 #define MAXPARCODES 2000 #define MAXINSTRUMENTS 5000 #define MAXCATEGORIES 100 #define MAX_KINST 500 /* maximum kinst values per file */ #define MAX_KINDAT 500 /* maximum kindat values per file */ #define DESC_LEN 40 #define DESC16_LEN 12 #define UNIT_LEN 9 #define MNEM_LEN 21 #define CAT_LEN 50 #define INST_LEN 100 /* max length of an instrument name */ #define NO_ERR_STR "No errors" enum { MADRIGALBLOCKSIZE = 6720, CBFBLOCKSIZE = 4096 }; typedef struct cedarIndex { /* this structure is used for searching an array of records */ int recNo; double startKey; double endKey; int pos; int posPrev; Int16 *int16p1; int int1; int int2; int int3; int int4; int int5; int int6; int int7; int int8; long long1; int isData; /* 1 if data record, 0 if catalog or header */ int isCatalog; /* i if catalog record, 0 otherwise */ } CedarIndex; typedef struct MadrigalParms { /* read/write */ int blockSize; /* read */ int sigWords; /* write */ int blockIndex; Int16 *blockp; int prevRec; int thisRec; } MadrigalParms; typedef struct BlockedBinaryParms { /* read/write */ int pos; /* read */ Int16 lBlock; /* write */ int maxBlock; int lbuf; Int16 *blockp; } BlockedBinaryParms; typedef struct CbfParms { /* read/write */ int blockSize; int pos; Int16 *cosRecordp; /* read */ int lCosBlock; int fwi; /* Random read */ int initPos8; int initFwi; int initPos; int initLCosBlock; /* write */ int lbuf; int blockNumber; int previousFileIndex; int previousRecordIndex; long lastControlWord; } CbfParms; typedef struct UnblockedBinaryParms { int placeHolder; } UnblockedBinaryParms; typedef struct AsciiParms { int placeHolder; } AsciiParms; typedef struct madrec { /* File Parameters */ char *filnam; FILE *fp; int fd; int file_status; int iotype; /* file type - see madrecOpen in madrec.c */ int fileSize; /* memory allocated to madrec->filep - size of in-memory file*/ Int16 *filep; /* pointer to hold entire madrigal file in memory */ int pos; /* present position in file - io or memory */ int nrecords; /* number of records in filep */ int currentRecord; /* number of record in filep presently loaded in recordp */ CedarIndex *indexp; /* array of CedarIndex structures, one for each record */ /* Parameters for the 5 file types */ MadrigalParms madrigalParms; BlockedBinaryParms blockedBinaryParms; CbfParms cbfParms; UnblockedBinaryParms unblockedBinaryParms; AsciiParms asciiParms; /* Record Parameters */ Int16 *recordp; /* an array of Int16 that hold one entire record, prolog included */ int recordpInMem; /* 1 if recordp is is pointing into memory block filep, 0 if pointing */ /* to separate block on the heap; */ double earliestStartTime; /* earliest start time found in file */ double latestEndTime; /* latest end time found in file */ /* Parameter Information */ int numParms; /* number of parameters in madrec struct */ int *parmsListp; /* list of parameters: [0] 10: year, [1] 11: month, [2] 12: day */ /* [3] 13: hour, [4] 14: minute, [5] 15: second, [6] 16: centisecond */ /* [7] 34: uth, [8] 160: gdlat, [9] 170: glon, [10] 110: gdalt */ /* Other parameters found in 1-D and 2-D records - note that 8-10 will */ /* only exist if location in terms of az, el, and range */ int *parmLocp; /* indicates whether given parameter is 1-D (1) or 2-D (2) or 3 for 0-7 (time) */ /* undefined for 8-10 */ double *parmMinp; /* minimum value of parameter so far */ double *parmMaxp; /* maximum value of parameter so far */ int *parmMissing; /* is parameter missing for some record in the file 0=no, 1=yes */ int numKinst; /* number of kinst values found in file */ int kinstArr[MAX_KINST]; /* array of kinst values found in file */ int numKindat; /* number of kindat values found in file */ int kindatArr[MAX_KINDAT]; /* array of kindat values found in file */ /* Miscellaneous Parameters */ int pflag; char *lastError; int startJday0; /* holds Julian day number of earliest record in file */ int *sortedRecnoList; /* an array of ints listing the chronological */ /* order of records in the file. Set to null when */ /* filed opened; malloc'ed by madrecGetSortedRecnoList */ } Madrec; /* Method declarations */ Madrec *madrecCreate (void); Madrec *madrecCreatex (int blockSize); int madrecDestroy (Madrec *madrecp); int madrecOpen (Madrec *madrecp, int iotype, char *filnam); int madrecClose (Madrec *madrecp); int madrecGetNextRec (Madrec *madrecp); int madrecPutNextRec (Madrec *madrecp); int madrecRewind (Madrec *madrecp); int madrecGetPreviousRec (Madrec *madrecp); int madrecGetRecByKey (Madrec *madrecp, double key); int madrecGetRecByRecno (Madrec *madrecp, int recno); int madrecGenKeys (Madrec *madrecp); int madrecDeleteKeys (Madrec *madrecp); int madrecPrintKeys (Madrec *madrecp); int madrecCheckFile (Madrec *madrecp); int madrecCopy (Madrec *madrec1p, Madrec *madrec2p); int madrecSetError (Madrec *madrecp,const char *error); char *madrecGetError (Madrec *madrecp); double madrecGetMissing (Madrec *madrecp); int madrecGetNumParms (Madrec *madrecp); int *madrecGetParmsList (Madrec *madrecp); int *madrecGetParmLoc (Madrec *madrecp); double *madrecGetParmMin (Madrec *madrecp); double *madrecGetParmMax (Madrec *madrecp); int madrecGetFileType (Madrec *madrecp); int madrecHasCatalog(Madrec *madrecp); int madrecHasHeader(Madrec *madrecp); int * madrecGetSortedRecnoList (Madrec *madrecp); int compareCedarIndices(const void * index1, const void * index2); #endif