aboutsummaryrefslogtreecommitdiff
path: root/src/libcf/cf_header_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcf/cf_header_io.c')
-rw-r--r--src/libcf/cf_header_io.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/libcf/cf_header_io.c b/src/libcf/cf_header_io.c
new file mode 100644
index 0000000..d534ac2
--- /dev/null
+++ b/src/libcf/cf_header_io.c
@@ -0,0 +1,110 @@
+/*****************************************************************************
+ * Johns Hopkins University
+ * Center For Astrophysical Sciences
+ * FUSE
+ *****************************************************************************
+ *
+ * Synopsis: cf_copy_to_memory(*infile, **memp);
+ *
+ * Description: Returns an in-memory FITS file pointer
+ *
+ *
+ * Arguments: char *infile Input data file name
+ * fitsfile **memp In memory FITS file pointer
+ *
+ * Returns: None
+ *
+ * History: 08/15/2002 1.0 jch Initial coding
+ * 12/18/03 bjg Change calfusettag.h to calfuse.h
+ *
+ ****************************************************************************/
+
+
+#include <string.h>
+#include <stdio.h>
+#include "calfitsio.h"
+#include "calfuse.h"
+
+void
+cf_read_header(char *infile, fitsfile **memp)
+{
+ fitsfile *ip; /* input file pointer */
+ int status=0; /* status used in CFITSIO */
+
+ /* open the input file */
+ FITS_open_file(&ip, infile, READONLY, &status);
+
+ /* create the temp file in memory */
+ FITS_create_file(memp, "mem://", &status);
+
+ /* copy the input primary HDU to the temp file */
+ FITS_copy_hdu(ip, *memp, 0, &status);
+
+ /* close the input file */
+ FITS_close_file(ip, &status);
+}
+
+
+/*****************************************************************************
+ * Johns Hopkins University
+ * Center For Astrophysical Sciences
+ * FUSE
+ *****************************************************************************
+ *
+ * Synopsis: cf_copy_to_file(*memp, *outfile);
+ *
+ * Description: Copy the header in the in-memory FITS file to an output FITS
+ * file's primary HDU.
+ *
+ *
+ * Arguments: fitsfile *memp In memory FITS file pointer
+ * char *outfile Output data file name
+ *
+ * Returns: None
+ *
+ * History: 08/15/2002 jch 1.0 Initial coding
+ *
+ ****************************************************************************/
+
+void
+cf_write_header(fitsfile *memp, char *outfile)
+{
+ fitsfile *op; /* output file pointer */
+ int status=0; /* status used in CFITSIO */
+
+ int ncards_memp, ncards_op, morekeys=0;
+ char card[FLEN_CARD];
+
+ /* Open the output FITS file. */
+ FITS_open_file(&op, outfile, READWRITE, &status);
+
+ fits_get_hdrspace(memp, &ncards_memp, &morekeys, &status);
+ fits_get_hdrspace(op, &ncards_op, &morekeys, &status);
+
+ /* overwrite output file's primary HDU card by card */
+ if (ncards_op >= ncards_memp) {
+ int i;
+ for (i=1; i<=ncards_memp; i++) {
+ FITS_read_record(memp, i, card, &status);
+ FITS_modify_record(op, i, card, &status);
+ }
+ /* delete from the bottom */
+ for (i=ncards_op; i>=ncards_memp+1; i--) {
+ FITS_delete_record(op, i, &status);
+ }
+ }
+ else {
+ int i;
+ for (i=1; i<=ncards_op; i++) {
+ FITS_read_record(memp, i, card, &status);
+ FITS_modify_record(op, i, card, &status);
+ }
+ for (i=ncards_op+1; i<=ncards_memp; i++) {
+ FITS_read_record(memp, i, card, &status);
+ FITS_write_record(op, card, &status);
+ }
+ }
+
+ /* close output file. */
+ FITS_close_file(op, &status);
+}