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
|