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
|
include <tbset.h>
include "filetype.h"
define SZ_KEYWORD 64
define USRERR 1
# TABKEY -- Transfer a table element to a header keyword
#
# B.Simon 17-Aug-87 First Code
# B.Simon 24-Jan-92 Added salloc for errtxt
# Phil Hodge 15-May-2002 Add 'format' argument to gettabdat.
procedure t_tabkey ()
pointer table # Name of table
pointer column # Name of column
int row # Row number of element in the table
pointer output # Name of file containing header keyword
pointer keyword # Name of header keyword
bool add # Is it OK to add a new keyword?
bool undef
bool format # Format the value using table print format?
int ftype, eltype
pointer sp, hd, value, errtxt
string undeferr "Table element is undefined"
string unfilerr "Header file name not found or ambiguous (%s)"
bool clgetb()
int clgeti(), filetype()
pointer immap(), tbtopn()
begin
# Allocate storage for character strings
call smark (sp)
call salloc (table, SZ_FNAME, TY_CHAR)
call salloc (column, SZ_COLNAME, TY_CHAR)
call salloc (output, SZ_FNAME, TY_CHAR)
call salloc (keyword, SZ_KEYWORD, TY_CHAR)
call salloc (value, SZ_KEYWORD, TY_CHAR)
call salloc (errtxt, SZ_LINE, TY_CHAR) # Added (BPS 01.24.92)
# Read input parameters
call clgstr ("table", Memc[table], SZ_FNAME)
call clgstr ("column", Memc[column], SZ_COLNAME)
row = clgeti ("row")
call clgstr ("output", Memc[output], SZ_FNAME)
call clgstr ("keyword", Memc[keyword], SZ_KEYWORD)
add = clgetb("add")
# Read the table element as a character string
format = false
hd = tbtopn (Memc[table], READ_ONLY, NULL)
call gettabdat (hd, Memc[column], row, SZ_KEYWORD, format,
Memc[value], undef, eltype)
call tbtclo (hd)
# It is an error to try to write an undefined value to the header
if (undef)
call error (USRERR, undeferr)
ftype = filetype (Memc[output])
if (ftype == IMAGE_FILE) {
# Write image header keyword
hd = immap (Memc[output], READ_WRITE, NULL)
call putimghdr (hd, Memc[keyword], Memc[value], eltype, 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], eltype, 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
|