aboutsummaryrefslogtreecommitdiff
path: root/src/libcf/cf_header_io.c
blob: d534ac283f5988548c308ef049c1872737cd7dfa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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);
}