summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/INTVEC.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/SELECT/INTVEC.ASM')
-rw-r--r--v4.0/src/SELECT/INTVEC.ASM546
1 files changed, 546 insertions, 0 deletions
diff --git a/v4.0/src/SELECT/INTVEC.ASM b/v4.0/src/SELECT/INTVEC.ASM
new file mode 100644
index 0000000..23e0350
--- /dev/null
+++ b/v4.0/src/SELECT/INTVEC.ASM
@@ -0,0 +1,546 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;
5;
6;
7; Change History:
8;
9;
10; ;AN000; S.R.
11; ;AN000; D.T.
12; ;AN001; DCR219
13; ;AN002; P1132 & P1136
14; ;AN003; P1757
15; ;AN004; P2683 - bad diskette in b:
16;
17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
18INCLUDE MAC_EQU.INC ;AN000;
19INCLUDE PANEL.MAC ;AN000;
20INCLUDE STRUC.INC ;AN000;
21INCLUDE MACROS.INC ;AN000;
22INCLUDE MACROS8.INC ;AN000;
23INCLUDE VARSTRUC.INC ;AN000;
24INCLUDE EXT.INC ;AN000;
25INCLUDE PAN-LIST.INC ;AN000;
26INCLUDE CASEXTRN.INC ;AN000;
27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28 ;
29EXTRN HANDLE_PANEL_CALL2:FAR ;AN000;
30EXTRN HANDLE_PANEL_CALL3:FAR ;AN111;JW
31EXTRN FIND_FILE_ROUTINE:FAR ;AN000;
32EXTRN DISPLAY_MESSAGE_ROUTINE:FAR ;AN000;DT
33EXTRN BEEP_ROUTINE:FAR ;AN000;DT
34 ;
35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
37NULl_DEVICE DB 'nul',0 ;AN000;
38CON_DEVICE DB 'con',0 ;AN000;
39SUB_PROGRAM DB 0 ;AN000;
40EXEC_ERR DB 0 ;AN000;
41 PUBLIC DSKCPY_WHICH,DSKCPY_PAN1,DSKCPY_PAN2;AN000;
42 PUBLIC DSKCPY_PAN3,DSKCPY_OPTION,DSKCPY_SOURCE;AN000;
43DSKCPY_WHICH DB 0 ;AN000;DT
44;DSKCPY_TO_A_720 EQU 0 ;AN000;DT (MACROS8.INC for actual equates)
45;DSKCPY_TO_A_360 EQU 1 ;AN000;DT
46;DSKCPY_TO_B EQU 2 ;AN000;DT
47
48DSKCPY_OPTION DB 0 ;AN000;DT
49;SOURCE1 EQU 0 ;AN000;DT
50;NO_SOURCE1 EQU 1 ;AN000;DT
51
52DSKCPY_SOURCE DW 0 ;AN000;DT offset of filename to check for on diskette
53DSKCPY_PAN1 DW 0 ;AN000;DT
54DSKCPY_PAN2 DW 0 ;AN000;DT
55DSKCPY_PAN3 DW 0 ;AN000;DT
56
57 PUBLIC DSKCPY_ERR ;AN000;
58DSKCPY_ERR DB 0 ;AN000;
59;DSKCPY_EXIT EQU 1
60
61DATA ENDS ;AN000; DATA
62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63;
64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65 EXTRN CHK_W_PROTECT_FLAG:BYTE ;AN000;
66 EXTRN W_PROTECT_FLAG:BYTE ;AN000;
67 EXTRN EXIT_SELECT:FAR ;AN000;
68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69;
70;
71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72CODE_FAR SEGMENT PARA PUBLIC 'CODE' ;AN000; Segment for far routine
73 ASSUME CS:CODE_FAR,DS:DATA ;AN000;
74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75;
76; The critical error handler. This routine should be placed in the CODE segment.
77;
78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79OLD_STACK_SEG DW ? ;AN001;GHG
80OLD_STACK_OFF DW ? ;AN001;GHG
81 ;GHG
82 PUBLIC INT_24_VECTOR ;AN000;
83INT_24_VECTOR: ;AN000;
84
85 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN000;
86 MOV AX,DATA ;AN000;
87 MOV DS,AX ;AN000;
88 MOV ES,AX ;AN000;
89 ;
90 MOV AX,CS ;AN002;S;GHG
91 CLI ;AN002;S;GHG
92 MOV OLD_STACK_SEG,SS ;AN002;S;GHG
93 MOV OLD_STACK_OFF,SP ;AN002;S;GHG
94 MOV SS,AX ;AN002;S;GHG
95 LEA SP,NEW_STACK_START ;AN002;S;GHG
96 STI ;AN002;S;GHG
97 ;
98 AND DI, 0FFH ;AN000; Mask off the high byte
99 .IF < CHK_W_PROTECT_FLAG EQ TRUE > ;AN000; Is this a check for write protect?
100 .IF < DI EQ 0 > ;AN000; Is this a write protect error?
101 MOV W_PROTECT_FLAG, TRUE ;AN000; If so, indicate to the calling program
102 .ENDIF ;AN000;
103 MOV AL, 3 ;AN000; Get DOS to trash this call
104 JMP EXIT_THE_INT ;AN000; Exit the interrupt
105 .ENDIF ;AN000;
106 ;
107 .IF < DI eq 0 > ;AN002;GHG
108 HANDLE_ERROR PAN_WRITE_PROT,2 ;AN002;GHG
109 MOV AL,1 ;AN002;GHG
110 .ELSEIF < DI eq 2 > ;AN002;GHG
111 HANDLE_ERROR PAN_DRIVE_ERROR,2 ;AN002;GHG
112 MOV AL,1 ;AN002;GHG
113 .ELSE ;AN002;GHG
114 .IF < SUB_PROGRAM EQ TRUE > ;AN000;
115 JMP END_SUB_PROGRAM ;AN000;
116 .ENDIF ;AN000;
117 MOV AL, 3 ;AN000; Fail this system call
118 .ENDIF ;AN000;
119EXIT_THE_INT: ;AN000;
120 MOV SS,OLD_STACK_SEG ;AN002;S;GHG
121 MOV SP,OLD_STACK_OFF ;AN002;S;GHG
122 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;
123 IRET ;AN000; Return from the interrupt
124 ;
125END_SUB_PROGRAM: ;AN000;
126 MOV SS,OLD_STACK_SEG ;AN002;S;GHG
127 MOV SP,OLD_STACK_OFF ;AN002;S;GHG
128 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;
129 ADD SP, 6 ;AN000;
130 ;
131 MOV AH, 4CH ;AN000;
132 MOV AL, 01 ;AN000;
133 DOSCALL ;AN000;
134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
135;
136; The DISKCOPY INT 2F INTERFACE
137;
138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
139 ;
140 EVEN ;AN000;
141NEW_STACK DW 200 DUP('S') ;AN001;GHG
142NEW_STACK_START DW 0 ;AN001;GHG
143 ;GHG
144FIRST_CALL DB 0 ;AN001;GHG
145 ;GHG
146 PUBLIC INT_2F_VECTOR ;AN001;GHG
147INT_2F_VECTOR: ;AN001;GHG
148 .IF < AX EQ 0ADC1H > near ;AN001;GHG
149 ;GHG
150 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN001;GHG
151 MOV AX,DATA ;AN001;GHG
152 MOV DS,AX ;AN001;GHG
153 MOV ES,AX ;AN001;GHG
154 ;GHG
155 MOV AX,CS ;AN001;S;GHG
156 CLI ;AN001;S;GHG
157 MOV OLD_STACK_SEG,SS ;AN001;S;GHG
158 MOV OLD_STACK_OFF,SP ;AN001;S;GHG
159 MOV SS,AX ;AN001;S;GHG
160 LEA SP,NEW_STACK_START ;AN001;S;GHG
161 STI ;AN001;S;GHG
162 ;GHG
163
164 .IF < DSKCPY_WHICH eq DSKCPY_TO_B > near ;AN000;DT
165 ;
166 .IF < BX EQ 9 > and ;AN000;DT
167 .IF < DSKCPY_PAN1 ne NOPANEL > ;AN000;DT
168 .REPEAT ;AN000;DT
169 MOV BX,PAN_INSTALL_DOS ;AN000;DT
170 MOV AX,DSKCPY_PAN1 ;AN000;DT
171 CALL HANDLE_PANEL_CALL2 ;AN000;DT
172 CALL HANDLE_KEYSTROKE ;AN000;DT
173 MOV DI, DSKCPY_SOURCE ;AN000;DT
174 MOV CX, 0 ;AN000;DT
175 CALL FIND_FILE_ROUTINE ;AN000;DT
176 .LEAVE < nc > ;AN000;DT
177 MOV BX,ERR_DOS_DISK ;AN000;DT
178 CALL INT2F_ERROR ;AN000;DT
179 ;AN000;DT
180 .UNTIL ;AN000;DT
181 ;AN000;DT
182 MOV BX,PAN_INSTALL_DOS ;AN000;DT
183 MOV AX,DSKCPY_PAN2 ;AN000;DT
184 CALL HANDLE_PANEL_CALL2 ;AN000;DT
185 ;AN000;DT
186 .ELSEIF <BX eq 13 > ;AN000;DT
187 MOV BX,PAN_DRIVE_ERROR ;AN000;
188 CALL INT2F_ERROR ;AN000;DT
189 ;
190 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
191 MOV BX,PAN_WRITE_PROT ;AN000;
192 CALL INT2F_ERROR ;AN000;DT
193 ;
194 .ELSEIF <BX eq 23 > or ;AN004;JW
195 .IF <BX eq 11 > or ;AN004;JW
196 .IF <BX eq 12 > or ;AN004;JW
197 .IF <BX eq 18 > or ;AN004;JW
198 .IF <BX eq 20 > ;AN004;JW
199 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
200 CALL INT2F_ERROR ;AN004;JW
201 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
202 ;
203 .ELSEIF <BX eq 16 > ;AN001;GHG
204 MOV FIRST_CALL,0 ;AN001;GHG
205 .ELSEIF <BX ne 2 > and ;AN001;GHG
206 .IF <BX ne 7 > and ;AN001;GHG
207 .IF <BX ne 8 > and ;AN001;GHG
208 .IF <BX ne 9 > and ;AN000;DT
209 .IF <BX ne 10 > and ;AN003;JW
210 .IF <BX ne 15 > and ;AN001;GHG
211 .IF <BX ne 17 > and ;AN001;GHG
212 .IF <BX ne 21 > and ;AN001;GHG
213 .IF <BX ne 26 > ;AN001;GHG
214 MOV BX,ERR_GENERAL ;AN000;
215 CALL INT2F_ERROR ;AN000;DT
216 .ENDIF ;AN000;
217 MOV AX,0FFFFH ;AN000;DT
218
219 .ELSEIF < DSKCPY_WHICH eq DSKCPY_TO_A_360 > near ;AN000;DT
220 .IF < BX EQ 8 > ;AN001;GHG
221 .IF < DSKCPY_OPTION eq SOURCE1 > or;AN000;
222 .IF <FIRST_CALL ne 0 > ;AN001;GHG
223 .REPEAT ;AN000;
224 MOV BX,PAN_INSTALL_DOS ;AN000;DT
225 MOV AX,DSKCPY_PAN1 ;AN000;DT
226 CALL HANDLE_PANEL_CALL2 ;AN000;DT
227 CALL HANDLE_KEYSTROKE ;AN000;DT
228 ;AN000;DT
229 MOV DI, DSKCPY_SOURCE ;AN000;DT
230 MOV CX, 0 ;AN000;DT
231 CALL FIND_FILE_ROUTINE ;AN000;DT
232 .LEAVE < nc > ;AN000;DT
233 MOV BX,ERR_DOS_DISK ;AN000;DT
234 CALL INT2F_ERROR ;AN000;DT
235 .UNTIL ;AN000;DT
236 ;AN000;DT
237 .ENDIF ;AN000;
238 MOV BX,PAN_INSTALL_DOS ;AN000;DT
239 MOV AX,DSKCPY_PAN2 ;AN000;DT
240 CALL HANDLE_PANEL_CALL2 ;AN000;DT
241 MOV FIRST_CALL,1 ;AN000;GHG
242 .ELSEIF <BX eq 9 > ;AN001;GHG
243 MOV BX,PAN_INSTALL_DOS ;AN000;DT
244 MOV AX,DSKCPY_PAN3 ;AN000;DT
245 CALL HANDLE_PANEL_CALL2 ;AN000;DT
246 CALL HANDLE_KEYSTROKE ;AN000;DT
247 MOV BX,PAN_INSTALL_DOS ;AN000;DT
248 MOV AX,DSKCPY_PAN2 ;AN000;DT
249 CALL HANDLE_PANEL_CALL2 ;AN000;DT
250 .ELSEIF <BX eq 13 > ;AN000;DT
251 MOV BX,PAN_DRIVE_ERROR ;AN000;
252 CALL INT2F_ERROR ;AN000;DT
253 ;
254 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
255 MOV BX,PAN_WRITE_PROT ;AN000;
256 CALL INT2F_ERROR ;AN000;
257 ;
258 .ELSEIF <BX eq 23 > or ;AN004;JW
259 .IF <BX eq 11 > or ;AN004;JW
260 .IF <BX eq 12 > or ;AN004;JW
261 .IF <BX eq 18 > or ;AN004;JW
262 .IF <BX eq 20 > ;AN004;JW
263 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
264 CALL INT2F_ERROR ;AN004;JW
265 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
266 ;
267 .ELSEIF <BX eq 16 > ;AN001;GHG
268 MOV FIRST_CALL,0 ;AN001;GHG
269 .ELSEIF <BX ne 2 > and ;AN001;GHG
270 .IF <BX ne 7 > and ;AN001;GHG
271 .IF <BX ne 10 > and ;AN003;JW
272 .IF <BX ne 15 > and ;AN001;GHG
273 .IF <BX ne 17 > and ;AN001;GHG
274 .IF <BX ne 21 > and ;AN001;GHG
275 .IF <BX ne 26 > ;AN001;GHG
276 MOV BX,ERR_GENERAL ;AN000;
277 CALL INT2F_ERROR ;AN000;
278 .ENDIF ;AN001;GHG
279 ;
280 MOV AX,0FFFFH ;AN001;GHG
281 .ELSE near ;AN000;
282 .IF < BX EQ 9 > ;AN001;GHG
283 MOV AX,PAN_DSKCPY_SRC ;AN001;GHG
284 CALL HANDLE_PANEL_CALL ;AN001;GHG
285 CALL HANDLE_KEYSTROKE ;AN001;GHG
286 MOV AX,PAN_DSKCPY_CPY ;AN001;GHG
287 CALL HANDLE_PANEL_CALL ;AN001;GHG
288 .ELSEIF <BX eq 8 > ;AN001;GHG
289 .IF <FIRST_CALL ne 0 > ;AN001;GHG
290 MOV AX,PAN_DSKCPY_TAR ;AN001;GHG
291 CALL HANDLE_PANEL_CALL ;AN001;GHG
292 CALL HANDLE_KEYSTROKE ;AN001;GHG
293 .ELSE ;AN001;GHG
294 MOV FIRST_CALL,1 ;AN001;GHG
295 .ENDIF ;AN001;GHG
296 MOV AX,PAN_DSKCPY_CPY ;AN001;GHG
297 CALL HANDLE_PANEL_CALL ;AN001;GHG
298 .ELSEIF <BX eq 16 > ;AN001;GHG
299 MOV AX,0FFFFH ;AN001;GHG
300 MOV FIRST_CALL,0 ;AN001;GHG
301 JMP INT2F_1 ;AN001;GHG
302 .ELSEIF <BX eq 13 > ;AN000;DT drive not ready
303 MOV BX,PAN_DRIVE_ERROR ;AN000;
304 CALL INT2F_ERROR ;AN000;DT
305 .ELSEIF <BX eq 14 > ;AN001;GHG write protect
306 MOV BX,PAN_WRITE_PROT ;AN000;
307 CALL INT2F_ERROR ;AN000;DT
308 .ELSEIF <BX eq 23 > or ;AN004;JW
309 .IF <BX eq 11 > or ;AN004;JW
310 .IF <BX eq 12 > or ;AN004;JW
311 .IF <BX eq 18 > or ;AN004;JW
312 .IF <BX eq 20 > ;AN004;JW
313 MOV BX,PAN_BAD_DISKET ;AN004;JW Bad diskette in b:
314 CALL INT2F_ERROR ;AN004;JW
315 MOV N_DSKCPY_ERR,E_DSKCPY_RETRY ;AN004;JW
316 ;
317 .ELSEIF <BX ne 2 > and ;AN001;GHG
318 .IF <BX ne 7 > and ;AN001;GHG
319 .IF <BX ne 10 > and ;AN001;GHG
320 .IF <BX ne 15 > and ;AN001;GHG
321 .IF <BX ne 17 > and ;AN001;GHG
322 .IF <BX ne 21 > and ;AN001;GHG
323 .IF <BX ne 26 > ;AN001;GHG
324 MOV BX,ERR_GENERAL ;AN000;
325 CALL INT2F_ERROR ;AN000;DT
326 .ENDIF ;AN001;GHG
327 ;
328 MOV AX,0FFFFH ;AN001;GHG
329
330 .ENDIF ;AN000;DT
331
332INT2F_1: MOV SS,OLD_STACK_SEG ;AN001;S;GHG
333 MOV SP,OLD_STACK_OFF ;AN001;S;GHG
334
335 ;
336 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN001;GHG
337 ;
338 ;
339 IRET ;AN001;GHG
340 .ELSE ;AN001;GHG
341 JMP CS:OLD_INT_2F ;AN001;GHG
342 .ENDIF ;AN001;GHG
343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
344;
345; The FORMAT INT2F interrupt routine
346;
347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
348 PUBLIC INT_2F_FORMAT ;AN111;JW
349INT_2F_FORMAT: ;AN111;JW
350 .IF < AX EQ 0ADC1H > near ;AN111;JW
351 ;AN111;JW
352 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN111;JW
353 MOV AX,DATA ;AN111;JW
354 MOV DS,AX ;AN111;JW
355 MOV ES,AX ;AN111;JW
356 ;AN111;JW
357 MOV AX,CS ;AN111;JW
358 CLI ;AN111;JW
359 MOV OLD_STACK_SEG,SS ;AN111;JW
360 MOV OLD_STACK_OFF,SP ;AN111;JW
361 MOV SS,AX ;AN111;JW
362 LEA SP,NEW_STACK_START ;AN111;JW
363 STI ;AN111;JW
364 ;AN111;JW
365 .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW
366 MOV AX,SUB_INS_STARTT_S360 ;AN111;JW
367 .ELSE ;AN111;JW
368 MOV AX,SUB_INS_SHELL_S360 ;AN111;JW
369 .ENDIF ;AN111;JW
370 MOV BX,PAN_INST_PROMPT ;AN111;JW
371 CALL HANDLE_PANEL_CALL2 ;AN111;JW
372 CALL HANDLE_KEYSTROKE ;AN111;JW
373 ;AN111;JW
374 .IF < FORMAT_WHICH eq STARTUP > ;AN111;JW
375 MOV AX,FORMAT_STARTUP ;AN111;JW
376 .ELSE ;AN111;JW
377 MOV AX,FORMAT_SHELL ;AN111;JW
378 .ENDIF ;AN111;JW
379 CALL HANDLE_PANEL_CALL3 ;AN111;JW
380 ;AN111;JW
381 MOV SS,OLD_STACK_SEG ;AN111;JW
382 MOV SP,OLD_STACK_OFF ;AN111;JW
383 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN111;JW
384 IRET ;AN111;JW
385 .ELSE ;AN111;JW
386 JMP CS:OLD_INT_2F ;AN111;JW
387 .ENDIF ;AN111;JW
388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
389;
390; The DISKCOPY INT 2F ERROR ROUTINE
391;
392; Input: BX = error panel
393;
394; Output: none
395;
396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
397INT2F_ERROR PROC NEAR ;AN000;DT
398 MOV CX,2 ;AN000;DT allow ESC and ENTER
399 CALL HANDLE_ERROR_CALL ;AN000;DT display error panel
400 JNC INT2F_ERROR_EXIT ;AN000;DT if ENTER pressed, then ok
401 ;AN000;DT else ESC
402 MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit
403 MOV AX,4C01H ;AN000;DT and error message already up DOS
404 INT 21H ;AN000;DT exit with error
405 ;AN000;DT
406INT2F_ERROR_EXIT: ;AN000;DT
407 RET ;AN000;DT
408INT2F_ERROR ENDP ;AN000;DT
409 ;;;;;;;;;;;;
410 ;
411;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
412;
413; The DISKCOPY INT 2F INTERFACE (256KB DISKCOPY)
414;
415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
416 PUBLIC INT_2F_256KB ;AN000;DT
417INT_2F_256KB: ;AN000;DT
418 .IF < AX EQ 0ADC1H > near ;AN000;DT
419 ;AN000;DT
420 PUSHH <BX,CX,DX,SI,DI,ES,DS> ;AN000;DT
421 MOV AX,DATA ;AN000;DT
422 MOV DS,AX ;AN000;DT
423 MOV ES,AX ;AN000;DT
424 ;AN000;DT
425 MOV AX,CS ;AN000;DT
426 CLI ;AN000;DT
427 MOV OLD_STACK_SEG,SS ;AN000;DT
428 MOV OLD_STACK_OFF,SP ;AN000;DT
429 MOV SS,AX ;AN000;DT
430 LEA SP,NEW_STACK_START ;AN000;DT
431 STI ;AN000;DT
432 .IF < BX EQ 9 > ;AN000;DT
433 CLEAR_SCREEN ;AN000;DT
434 DISPLAY_MESSAGE 14 ;AN000;DT insert INSTALL
435 CALL HANDLE_KEY256KB ;AN000;DT
436 CLEAR_SCREEN ;AN000;DT
437 DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes
438 .ELSEIF <BX eq 8 > ;AN000;DT
439 .IF <FIRST_CALL ne 0 > ;AN000;DT
440 CLEAR_SCREEN ;AN000;DT
441 DISPLAY_MESSAGE 13 ;AN000;DT insert INSTALL COPY
442 CALL HANDLE_KEY256KB ;AN000;DT
443 .ELSE ;AN000;DT
444 MOV FIRST_CALL,1 ;AN000;DT
445 .ENDIF ;AN000;DT
446 CLEAR_SCREEN ;AN000;DT
447 DISPLAY_MESSAGE 15 ;AN000;DT Copying diskettes
448 .ELSEIF <BX eq 16 > ;AN000;DT
449 MOV AX,0FFFFH ;AN000;DT
450 MOV FIRST_CALL,0 ;AN000;DT
451 JMP INT2F_1_ALT ;AN000;DT
452 .ELSEIF <BX eq 13 > ;AN000;DT
453 CLEAR_SCREEN ;AN000;DT
454 DISPLAY_MESSAGE 16 ;AN000;DT Drive door open
455 CALL INT2F_ERRALT ;AN000;DT
456 .ELSEIF <BX eq 14 > ;AN000;DT
457 CLEAR_SCREEN ;AN000;DT
458 DISPLAY_MESSAGE 17 ;AN000;DT Write Protect error
459 CALL INT2F_ERRALT ;AN000;DT
460 ;AN000;DT
461 .ELSEIF <BX ne 2 > and ;AN000;DT
462 .IF <BX ne 7 > and ;AN000;DT
463 .IF <BX ne 10 > and ;AN000;DT
464 .IF <BX ne 15 > and ;AN000;DT
465 .IF <BX ne 17 > and ;AN000;DT
466 .IF <BX ne 21 > and ;AN000;DT
467 .IF <BX ne 26 > ;AN000;DT
468 CLEAR_SCREEN ;AN000;DT
469 DISPLAY_MESSAGE 18 ;AN000;DT General error
470 CALL INT2F_ERRALT ;AN000;DT
471 .ENDIF ;AN000;DT
472 ;AN000;DT
473 MOV AX,0FFFFH ;AN000;DT
474 ;AN000;DT
475INT2F_1_ALT: MOV SS,OLD_STACK_SEG ;AN000;DT
476 MOV SP,OLD_STACK_OFF ;AN000;DT
477 ;AN000;DT
478 POPP <DS,ES,DI,SI,DX,CX,BX> ;AN000;DT
479 IRET ;;AN000;;DT
480 .ELSE ;AN000;DT
481 JMP CS:OLD_INT_2F ;AN000;DT
482 .ENDIF ;AN000;DT
483 ;AN000;DT
484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
485;
486; The DISKCOPY INT 2F ERROR ROUTINE (256KB)
487;
488; Input: BX = error panel
489;
490; Output: none
491;
492;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
493INT2F_ERRALT PROC NEAR ;AN000;DT
494INT2F_AGN: ;AN000;DT
495 MOV AH,0 ;AN000;DT
496 INT 16H ;AN000;DT get keystroke
497 CMP AL,13 ;AN000;DT If ENTER the continue
498 JE INT2F_ERRALT_EXIT ;AN000;DT
499 CMP AL,27 ;AN000;DT If not ESC the again
500 JE INT2F_ALT_ABORT ;AN000;
501 DISPLAY_MESSAGE 11 ;AN000;DT BEEP
502 JMP INT2F_AGN ;AN000;DT
503INT2F_ALT_ABORT: ;AN000;DT else ESC
504 MOV DSKCPY_ERR,DSKCPY_EXIT ;AN000;DT indicate user wants to exit
505 MOV AX,4C01H ;AN000;DT and error message already up DOS
506 INT 21H ;AN000;DT exit with error
507 ;AN000;DT
508INT2F_ERRALT_EXIT: ;AN000;DT
509 RET ;AN000;DT
510INT2F_ERRALT ENDP ;AN000;DT
511 ;
512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
513;
514; The INT23 interrupt routine (CTRL-BREAK)
515;
516;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
517;
518 PUBLIC INT_23_VECTOR ;AN074;SEH
519INT_23_VECTOR: ;AN074;SEH
520 ;
521 IRET ;AN074;SEH ignore ctrl-break and return
522 ;
523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
524;
525; The DISKCOPY GET KEY ROUTINE (256KB)
526;
527; Input: none
528;
529; Output: none
530;
531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
532HANDLE_KEY256KB PROC NEAR ;AN000;DT
533HAKEY_AGN: ;AN000;DT
534 MOV AH,0 ;AN000;DT
535 INT 16H ;AN000;DT get keystroke
536 CMP AL,13 ;AN000;DT If ENTER the continue
537 JE HAKEY_EXIT ;AN000;DT
538 DISPLAY_MESSAGE 11 ;AN000;DT BEEP
539 JMP HAKEY_AGN ;AN000;DT
540 ;AN000;DT
541HAKEY_EXIT: ;AN000;DT
542 RET ;AN000;DT
543HANDLE_KEY256KB ENDP ;AN000;DT
544
545CODE_FAR ENDS ;AN000;
546 END ;AN000;