1 | DDGLBXA1 ;SFISC/MKO-SINGLE SELECTION LIST BOX ;11:33 AM 26 Apr 1996
|
---|
2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | N DDGLQT,Y
|
---|
6 | D CUP(DDGLLINE,1)
|
---|
7 | ;
|
---|
8 | S DDGLQT=0
|
---|
9 | F S Y=$$READ D Q:DDGLQT
|
---|
10 | . I Y'[U,$T(@Y)="" W $C(7) Q
|
---|
11 | . D @Y
|
---|
12 | . D:$G(DDGLKEY("KMAP","KD"))]"" @DDGLKEY("KMAP","KD")
|
---|
13 | ;
|
---|
14 | S:$P(DDGLQT,U,2,999)]"" DDGLOUT("C")=$P(DDGLQT,U,2,999)
|
---|
15 | Q
|
---|
16 | ;
|
---|
17 | UP ;Move up
|
---|
18 | I DDGLLINE>1 D
|
---|
19 | . D CUP(DDGLLINE,1)
|
---|
20 | . W $E(DDGLSEL,1,DDGLNC)
|
---|
21 | . S DDGLLINE=DDGLLINE-1
|
---|
22 | . S DDGLSEL=DDGLITEM(DDGLLINE)
|
---|
23 | . ;
|
---|
24 | . D CUP(DDGLLINE,1)
|
---|
25 | . W $P(DDGLVID,DDGLDEL,6)_$E(DDGLSEL,1,DDGLNC)_$P(DDGLVID,DDGLDEL,10)
|
---|
26 | ;
|
---|
27 | E D
|
---|
28 | . N DDGLE
|
---|
29 | . D SHIFTDN(1,.DDGLE) Q:$G(DDGLE)
|
---|
30 | . S DDGLSEL=DDGLITEM(1)
|
---|
31 | . D DISP(DDGLSEL)
|
---|
32 | Q
|
---|
33 | ;
|
---|
34 | DN ;Move down
|
---|
35 | I DDGLLINE<DDGLNL D
|
---|
36 | . Q:DDGLITEM(DDGLLINE+1)=""
|
---|
37 | . D CUP(DDGLLINE,1)
|
---|
38 | . W $E(DDGLSEL,1,DDGLNC)
|
---|
39 | . S DDGLLINE=DDGLLINE+1
|
---|
40 | . S DDGLSEL=DDGLITEM(DDGLLINE)
|
---|
41 | . ;
|
---|
42 | . D CUP(DDGLLINE,1)
|
---|
43 | . W $P(DDGLVID,DDGLDEL,6)_$E(DDGLSEL,1,DDGLNC)_$P(DDGLVID,DDGLDEL,10)
|
---|
44 | ;
|
---|
45 | E D
|
---|
46 | . N DDGLE
|
---|
47 | . D SHIFTUP(1,.DDGLE) Q:$G(DDGLE)
|
---|
48 | . S DDGLSEL=DDGLITEM(DDGLNL)
|
---|
49 | . D DISP(DDGLSEL)
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | PUP ;Page up in list
|
---|
53 | I DDGLLINE>1 D
|
---|
54 | . D CUP(DDGLLINE,1)
|
---|
55 | . W $E(DDGLSEL,1,DDGLNC)
|
---|
56 | . S DDGLLINE=1,DDGLSEL=DDGLITEM(1)
|
---|
57 | . D CUP(1,1)
|
---|
58 | . W $P(DDGLVID,DDGLDEL,6)_$E(DDGLSEL,1,DDGLNC)_$P(DDGLVID,DDGLDEL,10)
|
---|
59 | ;
|
---|
60 | E D
|
---|
61 | . N DDGLE
|
---|
62 | . D SHIFTDN(DDGLNL,.DDGLE) Q:$G(DDGLE)
|
---|
63 | . S DDGLSEL=DDGLITEM(1)
|
---|
64 | . D DISP(DDGLSEL)
|
---|
65 | Q
|
---|
66 | ;
|
---|
67 | PDN ;Page down in list
|
---|
68 | I DDGLLINE<DDGLNL D
|
---|
69 | . D CUP(DDGLLINE,1)
|
---|
70 | . W $E(DDGLSEL,1,DDGLNC)
|
---|
71 | . F DDGLLINE=DDGLNL:-1:1 Q:DDGLITEM(DDGLLINE)]""
|
---|
72 | . S DDGLSEL=DDGLITEM(DDGLLINE)
|
---|
73 | . D CUP(DDGLLINE,1)
|
---|
74 | . W $P(DDGLVID,DDGLDEL,6)_$E(DDGLSEL,1,DDGLNC)_$P(DDGLVID,DDGLDEL,10)
|
---|
75 | ;
|
---|
76 | E D
|
---|
77 | . N DDGLE
|
---|
78 | . D SHIFTUP(DDGLNL,.DDGLE) Q:$G(DDGLE)
|
---|
79 | . S DDGLSEL=DDGLITEM(DDGLNL)
|
---|
80 | . D DISP(DDGLSEL)
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | TOP ;Move to top of list
|
---|
84 | N DDGLFRST,DDGLI,DDGLT
|
---|
85 | ;
|
---|
86 | ;Check whether first item in list is the first displayed
|
---|
87 | S DDGLFRST=$O(@DDGLGLO@(""))
|
---|
88 | I DDGLFRST=DDGLITEM(1) D:DDGLLINE>1 PUP Q
|
---|
89 | ;
|
---|
90 | ;Fill DDGLITEM array
|
---|
91 | S DDGLT=DDGLFRST
|
---|
92 | F DDGLI=1:1:DDGLNL D
|
---|
93 | . S DDGLITEM(DDGLI)=DDGLT
|
---|
94 | . S:DDGLT]"" DDGLT=$O(@DDGLGLO@(DDGLT))
|
---|
95 | ;
|
---|
96 | S DDGLLINE=1,DDGLSEL=DDGLITEM(1)
|
---|
97 | D DISP(DDGLSEL)
|
---|
98 | Q
|
---|
99 | ;
|
---|
100 | BOT ;Move to bottom of list
|
---|
101 | N DDGLAST,DDGLI,DDGLT,DDGLIND
|
---|
102 | ;
|
---|
103 | ;Set DDGLIND = index of last non-null DDGLITEM
|
---|
104 | F DDGLIND=DDGLNL:-1:1 Q:DDGLITEM(DDGLIND)]""
|
---|
105 | ;
|
---|
106 | S DDGLAST=$O(@DDGLGLO@(""),-1)
|
---|
107 | I DDGLAST=DDGLITEM(DDGLIND) D:DDGLLINE<DDGLIND PDN Q
|
---|
108 | ;
|
---|
109 | ;Fill DDGLITEM array
|
---|
110 | S DDGLT=DDGLAST
|
---|
111 | F DDGLI=DDGLNL:-1:1 D
|
---|
112 | . S DDGLITEM(DDGLI)=DDGLT
|
---|
113 | . S DDGLT=$O(@DDGLGLO@(DDGLT),-1)
|
---|
114 | ;
|
---|
115 | S DDGLLINE=DDGLNL,DDGLSEL=DDGLITEM(DDGLNL)
|
---|
116 | D DISP(DDGLSEL)
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | SEL ;Select item
|
---|
120 | K DDGLOUT
|
---|
121 | S DDGLOUT=$O(@DDGLGLO@(DDGLSEL,"")),DDGLOUT(0)=DDGLSEL
|
---|
122 | S DDGLOUT("C")="SEL"
|
---|
123 | S DDGLQT=1
|
---|
124 | Q
|
---|
125 | ;
|
---|
126 | QT ;Quit
|
---|
127 | K DDGLOUT
|
---|
128 | S DDGLOUT=-1,DDGLOUT(0)="",DDGLOUT("C")="QT"
|
---|
129 | S DDGLQT=1
|
---|
130 | Q
|
---|
131 | ;
|
---|
132 | TO ;Timeout
|
---|
133 | D:$G(DDGLKEY("KMAP","TO"))]"" @DDGLKEY("KMAP","TO")
|
---|
134 | K DDGLOUT
|
---|
135 | S DDGLOUT=-1,DDGLOUT(0)="",DDGLOUT("C")="TO"
|
---|
136 | S DDGLQT=1
|
---|
137 | Q
|
---|
138 | ;
|
---|
139 | READ() ;Read next key and return mnemonic
|
---|
140 | N S,Y
|
---|
141 | F R *Y:DTIME D C Q:Y'=-1
|
---|
142 | Q Y
|
---|
143 | ;
|
---|
144 | C I Y<0 S Y="TO" Q
|
---|
145 | S S=""
|
---|
146 | C1 S S=S_$C(Y)
|
---|
147 | I DDGLKEY("KMAP","IN")'[(U_S) D I Y=-1 W $C(7) D FLUSH Q
|
---|
148 | . I $C(Y)'?1L S Y=-1 Q
|
---|
149 | . S S=$E(S,1,$L(S)-1)_$C(Y-32) S:DDGLKEY("KMAP","IN")'[(U_S_U) Y=-1
|
---|
150 | ;
|
---|
151 | I DDGLKEY("KMAP","IN")[(U_S_U),S'=$C(27) S Y=$P(DDGLKEY("KMAP","OUT"),";",$L($P(DDGLKEY("KMAP","IN"),U_S_U),U)) Q
|
---|
152 | R *Y:5 G:Y'=-1 C1
|
---|
153 | W $C(7)
|
---|
154 | Q
|
---|
155 | ;
|
---|
156 | SHIFTDN(DDGLN,DDGLE) ;Shift DDGLITEM array down DDGLN times
|
---|
157 | ;Out: DDGLE = 1, if no more items above
|
---|
158 | ;
|
---|
159 | N DDGLI,DDGLT,DDGLA
|
---|
160 | S DDGLE=0
|
---|
161 | S DDGLT=DDGLITEM(1) I DDGLT="" S DDGLE=1 Q
|
---|
162 | ;
|
---|
163 | F DDGLI=-1:-1:-DDGLN S DDGLT=$O(@DDGLGLO@(DDGLT),-1) Q:DDGLT="" D
|
---|
164 | . S DDGLA(DDGLI)=DDGLT
|
---|
165 | S:DDGLT="" DDGLI=DDGLI+1
|
---|
166 | I DDGLI=0 S DDGLE=1 Q
|
---|
167 | S DDGLN=-DDGLI
|
---|
168 | ;
|
---|
169 | F DDGLI=DDGLNL:-1:DDGLN+1 S DDGLITEM(DDGLI)=DDGLITEM(DDGLI-DDGLN)
|
---|
170 | F DDGLI=DDGLN:-1:1 S DDGLITEM(DDGLI)=DDGLA(DDGLI-DDGLN-1)
|
---|
171 | Q
|
---|
172 | ;
|
---|
173 | SHIFTUP(DDGLN,DDGLE) ;Shift DDGLITEM array down DDGLN times
|
---|
174 | ;Out: DDGLE = 1, if no more items above
|
---|
175 | ;
|
---|
176 | N DDGLI,DDGLT,DDGLA
|
---|
177 | S DDGLE=0
|
---|
178 | S DDGLT=DDGLITEM(DDGLNL) I DDGLT="" S DDGLE=1 Q
|
---|
179 | ;
|
---|
180 | F DDGLI=1:1:DDGLN S DDGLT=$O(@DDGLGLO@(DDGLT)) Q:DDGLT="" D
|
---|
181 | . S DDGLA(DDGLI)=DDGLT
|
---|
182 | S:DDGLT="" DDGLI=DDGLI-1
|
---|
183 | I DDGLI=0 S DDGLE=1 Q
|
---|
184 | S DDGLN=DDGLI
|
---|
185 | ;
|
---|
186 | F DDGLI=1:1:DDGLNL-DDGLN S DDGLITEM(DDGLI)=DDGLITEM(DDGLI+DDGLN)
|
---|
187 | F DDGLI=DDGLNL-DDGLN+1:1:DDGLNL S DDGLITEM(DDGLI)=DDGLA(DDGLI-DDGLNL+DDGLN)
|
---|
188 | Q
|
---|
189 | ;
|
---|
190 | DISP(DDGLSEL) ;Display the list
|
---|
191 | ;In: DDGLSEL = text of selected item
|
---|
192 | ;
|
---|
193 | N DDGLI,DDGLT
|
---|
194 | F DDGLI=1:1:DDGLNL D
|
---|
195 | . D CUP(DDGLI,1)
|
---|
196 | . S DDGLT=$E(DDGLITEM(DDGLI),1,DDGLNC)
|
---|
197 | . S DDGLT=$S(DDGLT=DDGLSEL:$P(DDGLVID,DDGLDEL,6)_DDGLT_$P(DDGLVID,DDGLDEL,10),1:DDGLT)_$J("",DDGLNC-$L(DDGLT))
|
---|
198 | . W DDGLT
|
---|
199 | Q
|
---|
200 | ;
|
---|
201 | FLUSH ;Flush read buffer
|
---|
202 | N DDGLX
|
---|
203 | F R *DDGLX:0 E Q
|
---|
204 | Q
|
---|
205 | ;
|
---|
206 | CUP(Y,X) ;Position cursor relative to list coords
|
---|
207 | S DY=DDGLROW+Y,DX=DDGLCOL+X+1 X IOXY
|
---|
208 | Q
|
---|