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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <pkg/rg.h>
# RG_EXCLUDE -- Exclude points given by ranges.
#
# The output array must be large enough to contain the desired points.
# If the ranges are merged then the input and output arrays may be the same.
procedure rg_exclude$t (rg, a, nin, b, nout)
pointer rg # Ranges
PIXEL a[nin] # Input array
int nin # Number of input points
PIXEL b[ARB] # Output array
int nout # Number of output points
int i, j, k, n, ntemp
begin
# Error check the range pointer.
if (rg == NULL)
call error (0, "Range descriptor undefined")
if (RG_NRGS(rg) == 0) {
call amov$t (a[1], b[1], nin)
nout = nin
} else {
ntemp = 0
i = 1
j = 1
k = min (nin, min (RG_X1(rg, i), RG_X2(rg, i)) - 1)
n = max (0, k - j + 1)
call amov$t (a[j], b[ntemp+1], n)
ntemp = ntemp + n
do i = 2, RG_NRGS(rg) {
j = max (1, max (RG_X1(rg, i-1), RG_X2(rg, i-1)) + 1)
k = min (nin, min (RG_X1(rg, i), RG_X2(rg, i)) - 1)
n = max (0, k - j + 1)
call amov$t (a[j], b[ntemp+1], n)
ntemp = ntemp + n
}
i = RG_NRGS (rg)
j = max (1, max (RG_X1(rg, i), RG_X2(rg, i)) + 1)
k = nin
n = max (0, k - j + 1)
call amov$t (a[j], b[ntemp+1], n)
ntemp = ntemp + n
}
nout = ntemp
end
|