aboutsummaryrefslogtreecommitdiff
path: root/noao/nproto/ace/omwrite.x
blob: 83b96d2f42a555c81905f3acfd8b883ae0248d7b (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
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