summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/SELQUIT.ASM
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/SELECT/SELQUIT.ASM
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/SELECT/SELQUIT.ASM')
-rw-r--r--v4.0/src/SELECT/SELQUIT.ASM313
1 files changed, 313 insertions, 0 deletions
diff --git a/v4.0/src/SELECT/SELQUIT.ASM b/v4.0/src/SELECT/SELQUIT.ASM
new file mode 100644
index 0000000..e92a619
--- /dev/null
+++ b/v4.0/src/SELECT/SELQUIT.ASM
@@ -0,0 +1,313 @@
1
2
3PAGE 55,132 ;AN000;
4NAME SELQUIT ;AN000;
5TITLE SELQUIT - Exit Panel support for SELECT.EXE;AN000;
6SUBTTL selquit.asm ;AN000;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;
9;
10; SELQUIT.ASM
11;
12; DATE: July 6/87
13;
14; COMMENTS:
15;
16; This files must be compiled with MASM 3.0 (using /A option)
17;
18; Copyright 1988 Microsoft
19;
20; ;AN001; Added flag to indicate error processing was in effect.
21;
22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23.LFCOND ;AN000;
24.XLIST ;AN000;
25 INCLUDE PANEL.MAC ;AN000;
26 INCLUDE PCEQUATE.INC ;AN000;
27 INCLUDE PAN-LIST.INC ;AN000;
28 INCLUDE CASTRUC.INC ;AN000;
29 INCLUDE EXT.INC ;AN000;
30 INCLUDE STRUC.INC ;AN000;
31 INCLUDE MACROS.INC ;AN000;
32.LIST ;AN000;
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34;
35; Setup Environment
36;
37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38 EXTRN QM_ACTIVEPAN:WORD ;AN000;
39 ;
40 EXTRN GET_KEY:NEAR ;AN000;
41 EXTRN CURSOROFF:NEAR ;AN000;
42 EXTRN PCINPUT_CALL:NEAR ;AN000;
43 EXTRN PCDISPQ_CALL:NEAR ;AN000;
44 ;
45 EXTRN WR_DRETLEN:WORD ;AN000;
46 EXTRN WR_DRETOFF:WORD ;AN000;
47 EXTRN WR_DRETSEG:WORD ;AN000;
48 EXTRN GET_PCB:NEAR ;AN000;
49 EXTRN QM_OPT1:WORD ;AN000;
50 EXTRN QM_ID:WORD ;AN000;
51 EXTRN INC_KS:WORD ;AN000;
52 ;
53 EXTRN HANDLE_CHILDREN:NEAR ;AN000;
54 EXTRN ADJUST_UP:NEAR ;AN000;
55 EXTRN ADJUST_DOWN:NEAR ;AN000;
56 EXTRN INIT_PQUEUE_CALL:NEAR ;AN000;
57 EXTRN PREPARE_PANEL_CALL:NEAR ;AN000;
58 EXTRN DISPLAY_PANEL_CALL:NEAR ;AN000;
59 EXTRN GET_FUNCTION_CALL:NEAR ;AN000;
60 EXTRN QM_OPT2:WORD ;AN000;
61 EXTRN WR_REFIELDCNT:WORD ;AN000;
62 EXTRN ERROR_KEYS:BYTE ;AN000;
63 EXTRN ERROR_KEYS_LEN:ABS ;AN000;
64 EXTRN PCMBEEP_CALL:NEAR ;AN000;
65 EXTRN BIN_TO_CHAR_ROUTINE:FAR ;AN000;
66 ;
67TRUE EQU 1 ;AN000;
68FALSE EQU 0 ;AN000;
69 ;
70SELECT SEGMENT PARA PUBLIC 'SELECT' ;AN000;segment for far routine
71 ASSUME CS:SELECT ;AN000;
72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73;
74; HANDLE_F3
75;
76;
77; CLC = return to SELECT
78; STC = quit SELECT.....
79;
80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
81F3_ACTIVE DB FALSE ;AN001;DT
82 ;
83 PUBLIC HANDLE_F3 ;AN000;
84HANDLE_F3 PROC ;AN000;
85 PUSHH <AX,BX,DI,ES,WR_DRETLEN> ;AN000;
86 PUSHH <WR_DRETOFF,WR_DRETSEG> ;AN000;
87 PUSHH <WR_REFIELDCNT> ;AN000;
88 ;
89 .IF < F3_ACTIVE eq FALSE > near ;AN000;
90 CALL CURSOROFF ;;AN000;;;
91 ;
92 MOV AX,QM_PUSHPQU ;AN000;save parent queue
93 OR AX,QM_PUSHCQU ;AN000;save child queue
94 MOV QM_OPT1,AX ;AN000;
95 CALL PCDISPQ_CALL ;AN000;update display queue
96 ;
97 MOV QM_OPT1,QM_CLSPAN ;AN000;clear parent panel queue
98 OR QM_OPT1,QM_CLSCHD ;AN000;clear parent panel queue
99 CALL PCDISPQ_CALL ;AN000;update display queue
100 MOV QM_ACTIVEPAN,PAN_CONFIRM;AN000;current active parent panel
101 MOV AX,PAN_CONFIRM ;AN000;
102 MOV QM_OPT1,QM_PUSHPAN ;AN000;push parent panels
103 CALL PREPARE_PANEL_CALL ;AN000;add panel to display queue
104
105 MOV WR_REFIELDCNT,0 ;AN000;set for break = off
106 PREPARE_PANEL PAN_HBAR ;AN000;
107 PREPARE_CHILDREN ;AN000;
108 DISPLAY_PANEL ;AN000;push parent panels
109 ;
110 MOV CX,FK_ENT_F3_LEN ;AN000;
111 LEA DX,FK_ENT_F3 ;AN000;
112 MOV WR_DRETLEN,CX ;AN000;get return string length
113 MOV AX,DX ;AN000;get return string offset
114 MOV WR_DRETOFF,AX ;AN000;
115 MOV AX,DS ;AN000;get return string segment
116 MOV WR_DRETSEG,AX ;AN000;
117 CALL GET_KEY ;AN000;
118 MOV AX,INC_KS ;AN003;GHG
119 MOV N_USER_FUNC,AX ;AN003;GHG
120 ;
121 MOV AX,QM_POPPQU ;AN000;
122 OR AX,QM_POPCQU ;AN000;
123 MOV QM_OPT1,AX ;AN000;
124 CALL PCDISPQ_CALL ;AN000;
125 MOV AX,I_USER_INDEX ;AN000;get last current element
126 ;
127 .IF < N_USER_FUNC eq F3*256 > ;AN000;
128 .THEN ;AN000;
129 STC ;AN000;
130 MOV F3_ACTIVE,TRUE ;AN000;DT Indicate exit selected
131 .ELSE ;AN000;
132 POP WR_REFIELDCNT ;AN000;
133 PUSH WR_REFIELDCNT ;AN000;
134 DISPLAY_PANEL ;AN000;
135 CLC ;AN000;
136 .ENDIF ;AN000;;;
137 ;
138 .ELSE ;AN027;SEH Set carry flag to avoid
139 STC ;AN027;SEH endless loop in Get_Function_call
140 .ENDIF ;AN000;
141 ;
142 POPP <WR_REFIELDCNT,WR_DRETSEG> ;AN000;
143 POPP <WR_DRETOFF,WR_DRETLEN,ES> ;AN000;
144 POPP <DI,BX,AX> ;AN000;
145 RET ;AN000;
146HANDLE_F3 ENDP ;AN000;
147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
148;
149; AX,input
150; BX,action
151;
152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
153ERROR_PANEL DW ? ;AN000;
154ERROR_TYPE DW ? ;AN000;
155ERROR_CODE DW ? ;AN000;
156ERROR_STRING DB 5 DUP(0) ;AN000;
157 ;
158 PUBLIC ERROR_ACTIVE ;AN001;JW
159ERROR_ACTIVE DB 0 ;AN001;JW
160 ;
161 PUBLIC HANDLE_ERROR_CALL ;AN000;
162HANDLE_ERROR_CALL PROC FAR ;AN000;
163 PUSHH <AX,BX,DI,ES,WR_DRETLEN> ;AN000;
164 PUSHH <WR_DRETOFF,WR_DRETSEG> ;AN000;
165 PUSHH <WR_REFIELDCNT> ;AN000;
166 ;
167 MOV ERROR_CODE,AX ;AN000;
168 MOV ERROR_PANEL,BX ;AN000;
169 MOV ERROR_TYPE,CX ;AN000;
170 MOV ERROR_ACTIVE,1 ;AN001;JW
171 ;
172 MOV BX,ERR_BORDER ;AN000;DT current active parent panel
173 CALL GET_PCB ;AN000;DT get the PCB for this
174 MOV ES:[DI].PCB_CHILDNUM,CX ;AN000;DT set the number of children
175 ;
176 CALL CURSOROFF ;AN000;
177 ;
178 MOV QM_OPT1,QM_PUSHPQU ;AN000;save parent queue
179 OR QM_OPT1,QM_PUSHCQU ;AN000;save child queue
180 CALL PCDISPQ_CALL ;AN000;update display queue
181 ;
182 .IF < F3_ACTIVE eq TRUE > ;AN000;
183 MOV QM_OPT1,QM_CLSPAN ;AN000;clear parent panel queue
184 OR QM_OPT1,QM_CLSCHD ;AN000;clear parent panel queue
185 CALL PCDISPQ_CALL ;AN000;update display queue
186 .ENDIF ;AN000;
187
188 MOV QM_OPT1,QM_PUSHPAN ;AN000;push parent panels
189 OR QM_OPT2,QM_BREAKON ;AN000;break on
190
191 MOV BX,ERR_BORDER ;AN000;current active parent panel
192 MOV QM_ID,BX ;AN000;current active parent panel
193 MOV QM_ACTIVEPAN,BX ;AN000;current active parent panel
194 MOV AX,BX ;AN000;
195 CALL PREPARE_PANEL_CALL ;AN000;add panel to display queue
196 ;
197 MOV QM_OPT2,0 ;AN000;
198 ;
199;;;;;;;;MOV WR_REFIELDCNT,0 ;set for break = off
200 PREPARE_PANEL ERROR_PANEL ;AN000;
201 PREPARE_CHILDREN ;AN000;
202 DISPLAY_PANEL ;AN000;push parent panels
203 ;
204 CALL PCMBEEP_CALL ;AN000;
205 ;
206 MOV CX,ERROR_TYPE ;AN000;
207 INC CX ;AN000;JW
208 LEA DX,ERROR_KEYS ;AN000;
209 CALL GET_FUNCTION_CALL ;AN000;
210 MOV ERROR_ACTIVE,0 ;AN001;JW
211 ;
212 MOV QM_OPT1,QM_POPPQU ;AN000;
213 OR QM_OPT1,QM_POPCQU ;AN000;
214 CALL PCDISPQ_CALL ;AN000;
215 MOV AX,I_USER_INDEX ;AN000;get last current element
216 ;
217 .IF < N_USER_FUNC eq F3*256 > or ;AC000;DT F3 to exit SELECT
218 .IF < F3_ACTIVE eq TRUE > ;AN000;DT or already selected
219 .THEN ;AN000;
220 STC ;AN000;
221 .ELSE ;AN000;
222 POP WR_REFIELDCNT ;AN000;
223 PUSH WR_REFIELDCNT ;AN000;
224 DISPLAY_PANEL ;AN000;
225 CLC ;AN000;
226 .ENDIF ;AN000;
227 ;
228 POPP <WR_REFIELDCNT,WR_DRETSEG>;AN000;
229 POPP <WR_DRETOFF,WR_DRETLEN,ES>;AN000;
230 POPP <DI,BX,AX> ;AN000;
231 RET ;AN000;
232HANDLE_ERROR_CALL ENDP ;AN000;
233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
234;
235; AX,input
236; BX,action
237;
238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
239 PUBLIC HANDLE_PANEL_CALL ;AN000;
240HANDLE_PANEL_CALL PROC FAR ;AN000;
241 PUSH AX ;AN000;
242 PUSH AX ;AN000;
243 PUSH AX ;AN000;
244 MOV AX,PAN_INSTALL_DOS ;AN000;
245 CALL INIT_PQUEUE_CALL ;AN000;
246 POP AX ;AN000;
247 CALL PREPARE_PANEL_CALL ;AN000;
248 POP AX ;AN000;
249 .IF < AX ne PAN_DSKCPY_CPY > ;AN000;
250 MOV AX,PAN_HBAR ;AN000;
251 CALL PREPARE_PANEL_CALL ;AN000;
252 CALL HANDLE_CHILDREN ;AN000;
253 .ENDIF ;AN000;
254 CALL DISPLAY_PANEL_CALL ;AN000;
255 POP AX ;AN000;
256 RET ;AN000;
257HANDLE_PANEL_CALL ENDP ;AN000;
258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
259;
260; AX,input
261; BX,action
262;
263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
264 PUBLIC HANDLE_PANEL_CALL2 ;AN000;
265HANDLE_PANEL_CALL2 PROC FAR ;AN000;
266 PUSH AX ;AN000;
267 PUSH AX ;AN000;
268 MOV AX,BX ;AN000;DT
269 CALL INIT_PQUEUE_CALL ;AN000;DT
270 POP AX ;AN000;
271 CALL PREPARE_PANEL_CALL ;AN000;
272 POP AX ;AN000;
273 PUSH AX ;AN000;DT
274 .IF < AX ne SUB_COPYING > ;AN000;
275 MOV AX,PAN_HBAR ;AN000;
276 CALL PREPARE_PANEL_CALL ;AN000;
277 CALL HANDLE_CHILDREN ;AN000;
278 .ENDIF ;AN000;
279 CALL DISPLAY_PANEL_CALL ;AN000;
280 POP AX ;AN000;
281 RET ;AN000;
282HANDLE_PANEL_CALL2 ENDP ;AN000;
283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
284;
285; AX,input
286;
287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
288 PUBLIC HANDLE_PANEL_CALL3 ;AN111;JW
289HANDLE_PANEL_CALL3 PROC FAR ;AN111;JW
290 CALL INIT_PQUEUE_CALL ;AN111;JW
291 CALL DISPLAY_PANEL_CALL ;AN111;JW
292 RET ;AN111;JW
293HANDLE_PANEL_CALL3 ENDP ;AN111;JW
294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
295;
296; AX,input
297; BX,action
298;
299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
300 PUBLIC HANDLE_KEYSTROKE ;AN000;
301HANDLE_KEYSTROKE PROC FAR ;AN000;
302 MOV CX,FK_ENT_LEN ;AN000;
303 LEA DX,FK_ENT ;AN000;
304 CALL GET_FUNCTION_CALL ;AN000;
305 RET ;AN000;
306HANDLE_KEYSTROKE ENDP ;AN000;
307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
308;
309; End of program code
310;
311;;;;;;;;;;;;;;;;;;;;;;;;;
312SELECT ENDS ;AN000;
313 END ;AN000;