madrec.h
207 lines
| 6.6 KiB
| text/x-c
|
CLexer
r0 | /* $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 | ||||