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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <error.h>
include <fio.h>
include <fset.h>
include "ids.h"
include <gki.h>
include <gset.h>
define DIM 512
define MCXSCALE 64
define MCYSCALE 64
# zoom
procedure t_im()
pointer gp
char device[SZ_FNAME]
pointer gopen()
int dd[LEN_GKIDD]
short i, data[DIM+1]
int key, but, fnum
real x, y
real xjunk, yjunk
begin
call clgstr("device", device, SZ_FNAME)
call ids_open (device, dd)
call gki_inline_kernel (STDIMAGE, dd)
gp = gopen ( device, NEW_FILE, STDIMAGE)
call fseti (STDIMAGE, F_TYPE, SPOOL_FILE)
call fseti (STDIMAGE, F_CANCEL, OK)
call ids_grstream (STDIMAGE)
# read first to clear box
call gseti(gp, G_CURSOR, IDS_BUT_RD)
call ggcur(gp, xjunk, yjunk, key)
i = 1
repeat {
call eprintf("set zoom and zoom center\n")
call gseti (gp, G_CURSOR, IDS_BUT_WT)
call ggcur(gp, x, y, but)
call gseti (gp, G_CURSOR, 1)
call ggcur(gp, x, y, key)
call zm(gp, but, x, y)
call eprintf("set frame, 4 to exit\n")
call gseti (gp, G_CURSOR, IDS_BUT_WT)
call ggcur(gp, xjunk, yjunk, fnum)
if ( fnum == 4)
break
call iset(gp, fnum)
repeat {
call gseti (gp, G_CURSOR, IDS_BUT_WT)
call ggcur(gp, xjunk, yjunk, but)
call gseti (gp, G_CURSOR, fnum)
call rpc(gp, x, y, key)
call ggcell (gp, data, 1, 1, x, y, x, y)
call eprintf("frame %d, datum: %d\n")
call pargi (fnum)
call pargs (data[1])
} until ( but == 4)
} until ( i == 0 )
# all done
call gclose ( gp )
call ids_close
end
# rpcursor --- read and print cursor
procedure rpc(gp, sx, sy, key)
pointer gp
real sx,sy
int key
begin
call ggcur (gp, sx, sy, key)
call eprintf("cursor: (%f,%f) (%d,%d) key %d\n")
call pargr (sx)
call pargr (sy)
call pargi ( int(sx*32767)/64)
call pargi ( int(sy*32767)/64)
call pargi (key)
end
# zoom
procedure zm(gp, pow, x, y)
int pow
pointer gp
real x, y
short data[9]
begin
data[1] = IDS_ZOOM
data[2] = IDS_WRITE
data[3] = 3
data[4] = IDS_EOD
data[5] = IDS_EOD
data[6] = 0
data[7] = 2**(pow-1)
data[8] = x * GKI_MAXNDC
data[9] = y * GKI_MAXNDC
call gescape ( gp, IDS_CONTROL, data[1], 9)
end
# set image plane for operation
procedure iset (gp, frame)
int frame
pointer gp
short data[10]
begin
data[1] = frame
data[2] = IDS_EOD
data[3] = IDS_EOD # all bitplanes
call gescape (gp, IDS_SET_IP, data, 3)
end
|