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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <ctype.h>
include <imhdr.h>
# NEW_TITLE -- Get a new image title.
# The null string defaults to the original title.
procedure new_title (param, im)
char param[ARB] # Parameter
pointer im # Image descriptor
char title[SZ_LINE]
int strlen()
begin
call clgstr (param, title, SZ_LINE)
if (strlen (title) > 0)
call strcpy (title, IM_TITLE(im), SZ_IMTITLE)
end
# NEW_PIXTYPE -- Get a new pixel datatype.
# The null string defaults to the original pixel datatype.
procedure new_pixtype (param, im)
char param[ARB] # Parameter
pointer im # Image descriptor
char pixtype[7]
int type_codes[6], i
data type_codes /TY_SHORT, TY_INT, TY_LONG, TY_REAL, TY_DOUBLE, TY_COMPLEX/
int strdic()
begin
call clgstr ("pixtype", pixtype, 7)
i = strdic (pixtype, pixtype, 7, "|short|int|long|real|double|complex|")
if (i > 0)
IM_PIXTYPE(im) = type_codes[i]
end
# GET_ROOT -- Get the root name from an image.
procedure get_root (image, root, maxch)
char image[ARB] # Image name with possible section
char root[ARB] # Root image name
int maxch # Maximum length of root image name
begin
call imgimage (image, root, maxch)
end
# GET_SECTION -- Get the image section from an image.
procedure get_section (image, section, maxch)
char image[ARB] # Image name with possible section
char section[ARB] # Section
int maxch # Maximum length of section
begin
call imgsection (image, section, maxch)
end
# XT_MKIMTEMP -- Return the temporary output image name to be used.
# XT_DELIMTEMP -- Delete the temporary image.
#
# In order to have an output image be the same as the input
# image a temporary image is used. When the temporary image has been
# created it replaces the desired output image name. Only root names
# are considered.
procedure xt_mkimtemp (input, output, original, sz_fname)
char input[ARB] #I Input image
char output[ARB] #U Output image to use
char original[ARB] #O Root of original output image
int sz_fname #I Maximum size of image names
pointer sp, inname, outname, extn
int i, j, k, gstrmatch(), strncmp(), fnextn()
bool xt_imnameeq()
begin
call smark (sp)
call salloc (inname, SZ_FNAME, TY_CHAR)
call salloc (outname, SZ_FNAME, TY_CHAR)
call salloc (extn, SZ_FNAME, TY_CHAR)
# Strip image sections leaving only the path and root image name
# (with group and image kernel parameters). To change to
# remove group and image kernel stuff use imgcluster instead of
# imgimage.
call imgimage (input, Memc[inname], SZ_FNAME)
if (gstrmatch (input, Memc[inname], i, k) > 0)
call strcpy (input, Memc[inname], k)
call imgimage (output, Memc[outname], SZ_FNAME)
if (gstrmatch (output, Memc[outname], j, k) > 0)
call strcpy (output, Memc[outname], k)
call strcpy (Memc[outname], output, sz_fname)
call strcpy (Memc[outname], original, sz_fname)
# Check if the input and output images are the same.
# First check if the path names are the same and then if
# the image names are the same. If they are return a temporary
# image name with the same extension as the output image.
if (i == j && strncmp (Memc[inname], Memc[outname], i-1) == 0) {
if (xt_imnameeq (Memc[inname], Memc[outname])) {
call mktemp ("tmp", output, sz_fname)
if (fnextn (original, Memc[extn], SZ_FNAME) > 0) {
call strcat (".", output, sz_fname)
call strcat (Memc[extn], output, sz_fname)
}
}
}
call sfree (sp)
end
procedure xt_delimtemp (output, original)
char output[ARB] # Output image
char original[ARB] # Temporary output image name
bool strne()
errchk imdelete
begin
# If the output image is not the same as the original output image name
# replace the original output image with the new image.
if (strne (output, original)) {
iferr (call imdelete (original))
;
call imrename (output, original)
}
end
|