aboutsummaryrefslogtreecommitdiff
path: root/pkg/xtools/mef/mefget.x
blob: 4860c99eba6b746a0e382e7210a8e4163ea668e5 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<syserr.h>
include	<ctype.h>
include	<pkg/mef.h>

# MEFGETB -- Get an image header parameter of type boolean.  False is returned
# if the parameter cannot be found or if the value is not true.

bool procedure mefgetb (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

pointer	sp, kv, line
int	strlen()
bool    bval

errchk mef_findkw

begin
	call smark (sp)
	call salloc (kv, LEN_CARD, TY_CHAR)
	call salloc (line, LEN_CARD, TY_CHAR)
	
	call mef_findkw (MEF_HDRP(mef), key, Memc[kv])
	if (strlen(Memc[kv]) != 1) {
	    call sprintf(Memc[line], LEN_CARD, "Invalid boolean value: '%s'")
		 call pargstr (Memc[kv])
	    call error (0,Memc[line]) 
	}else
	    bval = Memc[kv] == 'T'

	call sfree (sp)
	return (bval)
end


# MEFGETC -- Get an image header parameter of type char.

char procedure mefgetc (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned
long	mefgetl()

begin
	return (mefgetl (mef, key))
end


# MEFGETD -- Get an image header parameter of type double floating.  If the
# named parameter is a standard parameter return the value directly,
# else scan the user area for the named parameter and decode the value.

double procedure mefgetd (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

int	ip
double	dval
pointer	sp, sval
int	ctod()
errchk	syserrs, mefgstr

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

	ip = 1
	call mefgstr (mef, key, Memc[sval], SZ_LINE)
	if(Memc[sval]==EOS)
	    call syserrs (SYS_IDBKEYNF, key)
	if (ctod (Memc[sval], ip, dval) == 0)
	    call syserrs (SYS_IDBTYPE, key)

	call sfree (sp)
	return (dval)
end


# MEFGETI -- Get an image header parameter of type integer.

int procedure mefgeti (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

long	lval, mefgetl()
errchk	mefgetl

begin
	lval = mefgetl (mef, key)
	if (IS_INDEFL(lval))
	    return (INDEFI)
	else
	    return (lval)
end


# MEFGETL -- Get an image header parameter of type long integer.

long procedure mefgetl (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

double	dval, mefgetd()
errchk	mefgetd

begin
	dval = mefgetd (mef, key)
	if (IS_INDEFD(dval))
	    return (INDEFL)
	else
	    return (nint (dval))
end


# MEFGETR -- Get an image header parameter of type real.

real procedure mefgetr (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

double	dval, mefgetd()
errchk	mefgetd

begin
	dval = mefgetd (mef, key)
	if (IS_INDEFD(dval))
	    return (INDEFR)
	else
	    return (dval)
end


# MEFGETS -- Get an image header parameter of type short integer.

short procedure mefgets (mef, key)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned

long	lval, mefgetl()
errchk	mefgetl

begin
	lval = mefgetl (mef, key)
	if (IS_INDEFL(lval))
	    return (INDEFS)
	else
	    return (lval)
end


# MEFGSTR -- Get an image header parameter of type string.  If the named
# parameter is a standard parameter return the value directly, else scan
# the user area for the named parameter and decode the value.

procedure mefgstr (mef, key, outstr, maxch)

pointer	mef			# image descriptor
char	key[ARB]		# parameter to be returned
char	outstr[ARB]		# output string to receive parameter value
int	maxch

pointer	sp, kv

begin
	call smark (sp)
	call salloc (kv, LEN_CARD, TY_CHAR)

	# Find the record.
	iferr (call mef_findkw (MEF_HDRP(mef), key, Memc[kv]))
	    Memc[kv] = EOS

	call strcpy (Memc[kv], outstr, min (maxch, LEN_CARD))

	call sfree (sp)
end