aboutsummaryrefslogtreecommitdiff
path: root/sys/imio/dbc/impkdc.x
blob: 6eb671f3698569036280954be824b5bc141a927f (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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<mach.h>

# IMPKDDC -- Put an image header parameter of type double.

procedure impkdc (im, key, dval, comment)

pointer	im			# image descriptor
char	key[ARB]		# parameter to be set
double	dval			# double precision value
char	comment[ARB]		# 

pointer	sp, sval
int	i, strlen()

begin
	call smark (sp)
	call salloc (sval, SZ_FNAME, TY_CHAR)

	# Reduce the precision of the encoded value if necessary to fit in
	# the FITS value field.  Start with NDIGITS_DP-1 as the precision
	# estimate NDIGITS_DP is only approximate, and if we make up half a
	# digit of precision the result can be 1.00000000000000001 instead
	# of 1.0.

	for (i=NDIGITS_DP-1;  i >= NDIGITS_RP;  i=i-1) {
	    call sprintf (Memc[sval], SZ_FNAME, "%0.*g")
		call pargi (i)
		call pargd (dval)
	    if (strlen (Memc[sval]) < 20)
		break
	}

	# Write the new value to the header.
	call impstrc (im, key, Memc[sval], comment)

	call sfree (sp)
end