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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <pkg/rg.h>
# RG_WINDOW -- Intersect a set of ordered and merged ranges with a window.
pointer procedure rg_window (rg, rmin, rmax)
pointer rg # Ranges
int rmin, rmax # Window
pointer rgout # Pointer to windowed ranges
int i, j
begin
if (rg == NULL)
call error (0, "Range descriptor undefined")
# Allocate the range points array.
call malloc (rgout, LEN_RG + 2 * max (1, RG_NRGS(rg)), TY_STRUCT)
# Set the windowed ranges.
j = 0
do i = 1, RG_NRGS(rg) {
if ((rmin <= RG_X2(rg, i)) && (rmax >= RG_X1(rg, i))) {
j = j + 1
RG_X1(rgout, j) = max (rmin, RG_X1(rg, i))
RG_X2(rgout, j) = min (rmax, RG_X2(rg, i))
}
}
call realloc (rgout, LEN_RG + 2 * max (1, j), TY_STRUCT)
RG_NRGS(rgout) = j
RG_NPTS(rgout) = 0
do i = 1, RG_NRGS(rgout)
RG_NPTS(rgout) = RG_NPTS(rgout) +
abs (RG_X1(rgout, i) - RG_X2(rgout, i)) + 1
return (rgout)
end
|