aboutsummaryrefslogtreecommitdiff
path: root/pkg/xtools/xtmksection.x
blob: 3dd404cb1b17e57d3900638dda88e58d4a43b499 (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
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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<imhdr.h>

# XT_MKSECTION -- Convert an generalized image section string to an IMIO
# section string.  The generalized image section string has one of the
# following formats:
#	1. An IMIO image section
#	2. [line|column] [#|middle|last]
#	3. [#|middle|last] [line|column]
# where # is a line or column number.  The strings may be abbreviated.
# This procedure will work for images of dimension greater than 2  provided
# that missing sections references default to 1.

define	SZ_WRD	10

procedure xt_mksection (image, secstr, section, sz_section)

char	image[ARB]		# Image
char	secstr[ARB]		# Image section string
char	section[sz_section]	# Returned image section string
int	sz_section		# Maximum size of image section string

char	wrd1[SZ_WRD], wrd2[SZ_WRD]
int	ndim, len1, len2, i, j, k
pointer	im

int	strdic(), ctoi()
pointer	immap()
errchk	immap()

begin
	im = immap (image, READ_ONLY, 0)
	ndim = IM_NDIM(im)
	len1 = IM_LEN(im, 1)
	len2 = IM_LEN(im, 2)
	call imunmap (im)

	switch (ndim) {
	case 1:
	    section[1] = EOS
	default:
	    if (len2 == 1) {
		section[1] = EOS
		return
	    }
 
	    if (secstr[1] == '[')
	        call strcpy (secstr, section, sz_section)
	    else {
		call sscan (secstr)
		call gargwrd (wrd1, SZ_WRD)
		i = strdic (wrd1, wrd1, SZ_WRD, "|column|line|middle|last|")
		call gargwrd (wrd2, SZ_WRD)
		j = strdic (wrd2, wrd2, SZ_WRD, "|column|line|middle|last|")

		if ((j == 1) || (j == 2)) {
		    k = i
		    i = j
		    j = k
		    call strcpy (wrd1, wrd2, SZ_WRD)
		}

		switch (i) {
		case 1:
		    switch (j) {
		    case 3:
		        call sprintf (section, sz_section, "[%d,*]")
		            call pargi ((len1 + 1) / 2)
		    case 4:
		        call sprintf (section, sz_section, "[%d,*]")
		            call pargi (len1)
		    default:
			i = 1
			if (ctoi (wrd2, i, len1) == 0)
			    call error (0, "Bad column number")
		        call sprintf (section, sz_section, "[%d,*]")
		            call pargi (len1)
		    }
		case 2:
		    switch (j) {
		    case 3:
		        call sprintf (section, sz_section, "[*,%d]")
		            call pargi ((len2 + 1) / 2)
		    case 4:
		        call sprintf (section, sz_section, "[*,%d]")
		            call pargi (len2)
		    default:
			i = 1
			if (ctoi (wrd2, i, len1) == 0)
			    call error (0, "Bad line number")
		        call sprintf (section, sz_section, "[*,%d]")
		            call pargi (len1)
		    }
		default:
		    call error (0,
	    "Unknown section specification - Possible non-unique abbreviation")
		}
	    }
	}
end


# XT_MKIMSEC -- Apply a generalized image section to an image.

procedure xt_mkimsec (image, secstr, imagesec, sz_fname)

char	image[ARB]			# Image name
char	secstr[ARB]			# Image section string
char	imagesec[sz_fname]		# Image with section
int	sz_fname			# Maximum size of image name

char	section[SZ_FNAME]
errchk	xt_mksection()

begin
	call xt_mksection (image, secstr, section, SZ_FNAME)
	call sprintf (imagesec, sz_fname, "%s%s")
	    call pargstr (image)
	    call pargstr (section)
end


# XT_MK1D -- In some applications a one dimensional image is expected.
# This procedure checks to see if the image is one dimensional.  If it is
# not then a section is added to the image name.  This procedure should
# not be used and xt_mkimsec should be used instead.

procedure xt_mk1d (image, secstr, sz_fname)

char	image[sz_fname]			# Image name
char	secstr[ARB]			# Image section string
int	sz_fname			# Maximum size of image name

char	section[SZ_FNAME]
errchk	xt_mksection()

begin
	call xt_mksection (image, secstr, section, SZ_FNAME)
	call strcat (section, image, sz_fname)
end