aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/copyone/parkey.x
blob: c473ee808128db1d4689b438399865ec366b6f30 (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
include	"filetype.h"

define	SZ_KEYWORD	64
define	USRERR		1

# PARKEY -- Transfer IRAF parameter to header keyword
#
# B.Simon	14-Aug-87	First Code

procedure t_parkey()

pointer	value		# IRAF parameter value
pointer	output		# Name of file containing header keyword
pointer	keyword		# Name of header keyword
bool	add		# Is it OK to add a new keyword?

int	ftype, keytype
pointer errtxt, sp, hd

string	unfilerr	"Header file name not found or ambiguous (%s)"

bool	clgetb()
int	filetype(), datatype()
pointer	immap(), tbtopn()

begin
	# Allocate storage for character strings

	call smark (sp)
	call salloc (value, SZ_KEYWORD, TY_CHAR)
	call salloc (output, SZ_FNAME, TY_CHAR)
	call salloc (keyword, SZ_KEYWORD, TY_CHAR)
	call salloc (errtxt, SZ_LINE, TY_CHAR)

	# Read parameters

	call clgstr ("value", Memc[value], SZ_KEYWORD)
	call clgstr ("output", Memc[output], SZ_FNAME)
	call clgstr ("keyword", Memc[keyword], SZ_KEYWORD)
	add = clgetb("add")

	ftype = filetype (Memc[output])
	keytype = datatype (Memc[value])

	if (ftype == IMAGE_FILE) {

	    # Write image header keyword

	    hd = immap (Memc[output], READ_WRITE, NULL)
	    call putimghdr (hd, Memc[keyword], Memc[value], keytype, add)
	    call imunmap (hd)

	} else if (ftype == TABLE_FILE) {

	    # Write table header keyword

	    hd = tbtopn (Memc[output], READ_WRITE, NULL)
	    call puttabhdr (hd, Memc[keyword], Memc[value], keytype, add)
	    call tbtclo (hd)

	} else {

	    call sprintf (Memc[errtxt], SZ_LINE, unfilerr)
	    call pargstr (Memc[output])
	    call error (USRERR, Memc[errtxt])

	}

	call sfree(sp)
	return
end