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
|
include <imhdr.h>
include <pmset.h>
include "ace.h"
procedure omwrite (pm, fname, omtype, refim, cat, catalog, objid, logfd)
pointer pm #I Pixel mask pointer to save
char fname[ARB] #I Filename
int omtype #I Type of mask values
pointer refim #I Reference image pointer
pointer cat #I Catalog pointer
char catalog[ARB] #I Catalog filename
char objid[ARB] #I Object ID string
int logfd #I Logfile
int i, j, k, nc, nl, stridxs(), andi()
long v[2]
pointer sp, str, im, buf, immap(), impl2i()
errchk immap
begin
call smark (sp)
call salloc (str, SZ_LINE, TY_CHAR)
# Remove output only fields.
call strcpy (fname, Memc[str], SZ_LINE)
i = stridxs (",", fname)
if (i > 0) {
Memc[str+i-1] = ']'
Memc[str+i] = EOS
}
if (logfd != NULL) {
call fprintf (logfd, " Write object mask: %s\n")
call pargstr (Memc[str])
}
im = immap (fname, NEW_COPY, refim)
IM_PIXTYPE(im) = TY_INT
nc = IM_LEN(refim,1)
nl = IM_LEN(refim,2)
v[1] = 1
switch (omtype) {
case OM_BOOL:
do i = 1, nl {
v[2] = i
buf = impl2i (im, i)
call pmglpi (pm, v, Memi[buf], 0, nc, PIX_SRC)
call aminki (Memi[buf], 1, Memi[buf], nc)
}
case OM_ONUM:
do i = 1, nl {
v[2] = i
buf = impl2i (im, i)
call pmglpi (pm, v, Memi[buf], 0, nc, PIX_SRC)
do j = buf, buf+nc-1
Memi[j] = MNUM(Memi[j])
}
case OM_COLORS:
do i = 1, nl {
v[2] = i
buf = impl2i (im, i)
call pmglpi (pm, v, Memi[buf], 0, nc, PIX_SRC)
do j = buf, buf+nc-1 {
k = MNUM(Memi[j])
if (k > 0) {
if (k < NUMSTART)
k = 1
else
k = mod (k, 8) + 2
}
Memi[j] = k
}
}
default:
do i = 1, nl {
v[2] = i
call pmglpi (pm, v, Memi[impl2i(im,i)], 0, nc, PIX_SRC)
}
}
iferr (call imdelf (im, "DATASEC"))
;
iferr (call imdelf (im, "TRIMSEC"))
;
if (catalog[1] != EOS)
call imastr (im, "CATALOG", catalog)
if (objid[1] != EOS)
call imastr (im, "OBJID", objid)
call imastr (refim, "OBJMASK", Memc[str])
call imunmap (im)
end
|