aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/ccdred/src/setproc.x
blob: 06c7977bffb574b6f430594d37e87a9b7b3bdca8 (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
include	<imhdr.h>
include	"ccdred.h"

# SET_PROC -- Set the processing parameter structure pointer.

procedure set_proc (in, out, ccd)

pointer	in			# Input IMIO pointer
pointer	out			# Output IMIO pointer
pointer	ccd			# CCD structure (returned)

int	clgwrd(), clscan(), nscan()
real	clgetr()
pointer	sp, str

begin
	call smark (sp)
	call salloc (str, SZ_LINE, TY_CHAR)

	# Allocate the ccd structure.
	call calloc (ccd, LEN_CCD, TY_STRUCT)

	IN_IM(ccd) = in
	OUT_IM(ccd) = out
	COR(ccd) = NO
	CORS(ccd, FIXPIX) = NO
	CORS(ccd, OVERSCAN) = NO
	CORS(ccd, TRIM) = NO
	READAXIS(ccd) = clgwrd ("readaxis",Memc[str],SZ_LINE,"|line|columns|")
	MINREPLACE(ccd) = clgetr ("minreplace")

	CALCTYPE(ccd) = TY_REAL
	if (clscan ("pixeltype") != EOF) {
	    call gargwrd (Memc[str], SZ_LINE)
	    call gargwrd (Memc[str], SZ_LINE)
	    if (nscan() == 2) {
	        if (Memc[str] == 'r')
		    CALCTYPE(ccd) = TY_REAL
		else if (Memc[str] == 's')
		    CALCTYPE(ccd) = TY_SHORT
		else
		    call error (1, "Invalid calculation datatype")
	    }
	}

	call sfree (sp)
end


# FREE_PROC -- Free the processing structure pointer.

procedure free_proc (ccd)

pointer	ccd			# CCD structure

begin
	# Unmap calibration images.
	if (MASK_IM(ccd) != NULL)
	    call imunmap (MASK_IM(ccd))
	if (ZERO_IM(ccd) != NULL)
	    call ccd_unmap (ZERO_IM(ccd))
	if (DARK_IM(ccd) != NULL)
	    call ccd_unmap (DARK_IM(ccd))
	if (FLAT_IM(ccd) != NULL)
	    call ccd_unmap (FLAT_IM(ccd))
	if (ILLUM_IM(ccd) != NULL)
	    call ccd_unmap (ILLUM_IM(ccd))
	if (FRINGE_IM(ccd) != NULL)
	    call ccd_unmap (FRINGE_IM(ccd))

	# Free memory
	if (OVERSCAN_VEC(ccd) != NULL)
	    call mfree (OVERSCAN_VEC(ccd), TY_REAL)
	if (MASK_FP(ccd) != NULL)
	    call xt_fpfree (MASK_FP(ccd))
	call mfree (ccd, TY_STRUCT)
end