summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/SETINT24.ASM
blob: 9e3e8d8329107615fc9d79f81645e8537808d5f6 (plain) (blame)
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
;0
page 80,132

;**********************************************************************
;*
;*   MODULE:   set_int24_vector
;*
;*   Critical error handler for C programs BACKUP and RESTORE
;*
;*********************************************************************
;------------------------------------------------------------;;;;AN000;
databuff  segment   public  'databuff'                       ;;;;AN000;
databuff   ends 					     ;;;;AN000;
;------------------------------------------------------------;;;;AN000;


dosxxx	segment byte public 'dos'                               ;AN000;
	assume	cs:dosxxx,ds:nothing,es:nothing,ss:nothing	;AN000;


	    public   set_int24_vector				;AN000;
	    .sall						;AN000;
	    .xlist						;AN000;
	    include  macros.inc 				;AN000;
	    .list						;AN000;

str	    struc						;AN000;
old_bp	    dw	     ?						;AN000;
Return	    dd	     ?						;AN000;
Flag	    dw	     ?						;AN000;
str	    ends						;AN000;


set_int24_vector   proc  far					;AN000;
	Enter	set_int24_vector				;AN000;

	mov	ax,seg databuff 				;AN000;
	mov	ds,ax						;AN000;
	assume	ds:databuff					;AN000;

	mov	ax,03524h		;Get Int24 Vector	;AN000;
	int	21h						;AN000;
					;Save it
	mov	word ptr cs:OldInt24,bx 			;AN000;
	mov	word ptr cs:OldInt24+2,es			;AN000;

					;Get address of my Int24 Handler
	mov	dx,cs						;AN000;
	mov	ds,dx						;AN000;
	mov	dx,offset AppErrorHandler			;AN000;

	mov	ax,02524H	       ;Set new INT24 vector	;AN000;
	int	21h						;AN000;

	xor	ax,ax		       ;Set good error return	;AN000;

exit:	mexit			       ; pop all registers	;AN000;
	ret	size str - 6	       ; return 		;AN000;

set_int24_vector    endp					;AN000;





;-------------------------------------------------------
;
;	    ****   Error Handler  ******
;
;-------------------------------------------------------
Ignore		equ	0		;AN000;
Retry		equ	1		;AN000;
Abort		equ	2		;AN000;
Fail		equ	3		;AN000;

OldInt24   dd	?			;AN000; ;save old interrupt handler address  ;;;

AppErrorHandler    proc    near 	;AN000;
	pushf				;AN000;
	call	dword ptr cs:OldInt24	;AN000; Get user to respond
	cmp	al,Abort		;AN000; For any resonse other than Abort
	jne	rett			;AN000;  retry the operation

	int	023h			;AN000;

rett:					;AN000;
	iret				;AN000; return to caller
AppErrorHandler 	endp		;AN000;
;-------------------------------------------------------
;-------------------------------------------------------

dosxxx	    ends			;AN000;
	   end				;AN000;