aboutsummaryrefslogtreecommitdiff
path: root/sys/mwcs/iwparray.x
blob: cb6cb0d95b9a7f1dfa822e8a97a9b67890370b57 (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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	"imwcs.h"

# IW_PUTARRAY -- Output a double floating array as a sequence of FITS cards,
# one value per card in the form "keyword = value", using the format string
# given to format the name of the FITS keyword.

procedure iw_putarray (iw, new, old, ndim, kw_format, kw_type, kw_index)

pointer	iw			#I pointer to IMWCS descriptor
double	new[ndim]		#I new array values
double	old[ndim]		#I old array values from header
int	ndim			#I image and WCS dimension
char	kw_format[ARB]		#I format for encoding keyword name
int	kw_type			#I IMWCS keyword type code
int	kw_index		#I keword index or 0 if don't care

int	axis
pointer	cp, im
char	kwname[SZ_KWNAME]
bool	fp_equald()
pointer	iw_findcard()
errchk	imaddf, imputd

begin
	do axis = 1, ndim {
	    # If new value is zero, no output, delete old card if present.
	    if (fp_equald (new[axis], 0.0D0))
		next

	    # See if we read the card for this parameter.
	    cp = iw_findcard (iw, kw_type, axis, kw_index)
	    im = IW_IM(iw)

	    # If value is unchanged, no need to do anything.
	    if (fp_equald (new[axis], old[axis])) {
		if (cp != NULL)
		    C_UPDATED(cp) = YES
		next
	    }

	    # Update the keyword in the image header.
	    call sprintf (kwname, SZ_KWNAME, kw_format)
		call pargi (axis)

	    if (cp == NULL)
		call imaddf (im, kwname, "d")
	    call imputd (im, kwname, new[axis])
	    if (cp != NULL)
		C_UPDATED(cp) = YES
	}
end