diff options
Diffstat (limited to 'funtools/fitsy/fitsfile.c')
-rw-r--r-- | funtools/fitsy/fitsfile.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/funtools/fitsy/fitsfile.c b/funtools/fitsy/fitsfile.c new file mode 100644 index 0000000..035726c --- /dev/null +++ b/funtools/fitsy/fitsfile.c @@ -0,0 +1,65 @@ +/* Fitsy FITS routines to handle a complete multi extension FITS file. + */ + +typedef struct Ft_fileread { + int n; + int flag; + int pixtype; +} Ft_fileread; + +ft_fileimageread(file, fits, data, x) + File file; + FITSHead fits; + FITSFile *data; + Ft_fileread *x; +{ + int size; + + (void)ReAlloc(*data, sizeof(struct FITSFile) * ++x->n); + + (*data)[x->n-1].bitpix = x->pixtype; + + if ( x->flag || ft_seek(fits) == -1 ) { + if ( ((*data)[x->n-1].data = ft_dataread(file, fits, NULL, x->pixtype)) + == NULL ) { + return 0; + } + } +} + +/* Read an entire FITS file. + */ +FITSFile ft_fileread(file, flag, pixtype, n) + File file; + int flag; + int pixtype; + int *n; +{ + Ft_fileread x; + FITSFile data; + + x.n = 0; + x.flag = flag; + x.pixtype = pixtype; + + data = (FITSFile) ft_fileparse(file, ft_fileimageread, &x); + *n = x.n; + + return data; +} + +/* Return a pointer the data poriton of a FITS HDU. + */ +void *ft_filedata(file, ft) + File file; + FITSFile ft; +{ + if ( ft->data != NULL ) return ft->data; + if ( ft_seek(ft->head) == -1 ) return NULL; + + if ( ftSeek(file, ft_seek(ft->head), 0) == -1 ) + return NULL; + + return ft->data = ft_dataread(file, ft->head, NULL, ft->bitpix); +} + |