diff options
Diffstat (limited to 'funtools/funtest/evcre.c')
-rw-r--r-- | funtools/funtest/evcre.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/funtools/funtest/evcre.c b/funtools/funtest/evcre.c new file mode 100644 index 0000000..b5b2cd3 --- /dev/null +++ b/funtools/funtest/evcre.c @@ -0,0 +1,115 @@ +/* + * + * evcre foo.fits -- test event creation + * + * + */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <funtools.h> + +#define MAXREC 10 + +typedef struct EvStruct{ + short x[4], *atp; +} *Event, EventRec; + +int main(int argc, char **argv) +{ + int i, j; + int val=1; + int got, put; + Fun fun; + EventRec events[MAXREC]; + Event ev; + + /* exit on gio errors */ + setgerror(2); + + if( argc < 2 ){ + fprintf( stderr, "usage: %s oname\n", argv[0]); + exit(1); + } + + /* fill in the records */ + got = MAXREC; + for(i=0; i<got; i++){ + ev = &events[i]; + for(j=0; j<4; j++){ + ev->x[j] = -i-j; + } + ev->atp = calloc(10,sizeof(short)); + for(j=0; j<10; j++){ + ev->atp[j] = i+j; + } + } + + /* open output file */ + if( !(fun = FunOpen(argv[1],"w", NULL)) ) + gerror(stderr, "Could not open the output file: %s\n", argv[1]); + + /* set up the (hardwired) columns */ + FunColumnSelect(fun, sizeof(EventRec), NULL, + "2i", "2I ", "w", FUN_OFFSET(Event, x), + "2i2", "2I[2]", "w", FUN_OFFSET(Event, x), + "at2p", "@2I", "w", FUN_OFFSET(Event, atp), + "at2p4", "@2I[4]", "w", FUN_OFFSET(Event, atp), + "atp9", "@I[9]", "w", FUN_OFFSET(Event, atp), + NULL); + + /* put these in extension header */ + FunParamPuti(fun, "IPAR", 0, 100, "INTEGER Param", 0); + FunParamPuti(fun, "IPAR", 1, 101, "INTEGER Param", 0); + FunParamPutd(fun, "DPAR", 0, 123456789.9876, 12, "DOUBLE Param", 0); + FunParamPutd(fun, "DPAR", 1, 123456.780, 4, "DOUBLE Param", 0); + FunParamPuts(fun, NULL, 0, "", NULL, 0); + FunParamPuts(fun, NULL, 0, "Null param", NULL, 0); + FunParamPuts(fun, "COMMENT", 0, "This is comment #1", "Comment card", 0); + FunParamPuts(fun, "COMMENT", 0, "This is comment #2", "Comment card", 0); + FunParamPuts(fun, "COMMENT", 0, "This is comment #3", "Comment card", 0); + + /* put these in primary header */ + val = 1; + FunInfoPut(fun, FUN_PRIMARYHEADER, &val, 0); + FunParamPuti(fun, "IPAR", 0, -100, "INTEGER Param", 0); + FunParamPuti(fun, "IPAR", 1, -101, "INTEGER Param", 0); + FunParamPutd(fun, "DPAR", 0, -123456789.9876, 12, "DOUBLE Param", 0); + FunParamPutd(fun, "DPAR", 1, -123456.780, 4, "DOUBLE Param", 0); + + /* put these in extension header */ + val = 0; + FunInfoPut(fun, FUN_PRIMARYHEADER, &val, 0); + FunParamPuti(fun, "IPAR", 2, 200, "INTEGER Param", 0); + /* blank card used as a place holder */ + FunParamPuts(fun, NULL, 0, "IPAR3", "INTEGER Param", 0); + FunParamPuts(fun, NULL, 0, "IPAR4", "INTEGER Param", 0); + + /* put these in primary header */ + FunParamPuti(FUN_PRIMARY(fun), "IPAR", 2, -200, "INTEGER Param", 0); + + if( (put=FunTableRowPut(fun, events, got, 0, NULL)) != got ){ + gerror(stderr, "expected to write %d rows; only wrote %d\n", + got, put); + } + + /* update file after writing data */ + FunParamPuti(fun, "IPAR", 2, 400, "INTEGER Param", 0); + FunParamPuti(fun, "IPAR", 3, 600, "INTEGER Param", 2); + /* this will not update because append flag is 1, not 2 */ + FunParamPuti(fun, "IPAR", 4, 800, "INTEGER Param", 1); + /* this will not update because there was no space saved */ + FunParamPuti(fun, "IPAR", 5, 1000, "INTEGER Param", 2); + + /* close file */ + FunClose(fun); + + + /* fill in the records */ + for(i=0; i<got; i++){ + ev = &events[i]; + free(ev->atp); + } + + return(0); +} |