home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / tptools.zip / FIRSTED.ZIP / INT24.ASM < prev    next >
Assembly Source File  |  1987-12-21  |  4KB  |  139 lines

  1. ;
  2. ;       INT24.ASM
  3. ;       ED 4.0
  4. ;       Copyright (c) 1985, 87 by Borland International, Inc.
  5. ;
  6. ;       Critical error handling routines
  7. ;
  8.  
  9. DATA    SEGMENT BYTE PUBLIC
  10.  
  11.         SaveSeg24       DW      ?       ;Segment of old Int24 handler
  12.         SaveOfs24       DW      ?       ;Offset of old Int24 handler
  13.  
  14. DATA    ENDS
  15.  
  16. CODE    SEGMENT BYTE PUBLIC
  17.  
  18.         ASSUME  CS:CODE,DS:DATA
  19.  
  20.         PUBLIC  EdInt24Result, EdInt24On, EdInt24Off
  21.  
  22.         EXTRN   IoResultPrim:NEAR       ;Pascal routine
  23.  
  24.  
  25. ;CS-relative data:
  26.  
  27.         Int24Err        DB      0       ;Boolean -- 1 means critical error
  28.         Int24ErrCode    DB      0       ;Byte -- the DOS error code
  29.  
  30. ;****************************************************** EdInt24
  31.  
  32. ;procedure EdInt24
  33.  
  34. ;Interrupt handler for DOS critical errors
  35.  
  36. EdInt24         PROC NEAR
  37.  
  38.         MOV     CS:Int24Err,01          ;Set error flag
  39.         PUSH    AX                      ;Save AX
  40.         MOV     AX,DI                   ;DI has error code on entry
  41.         MOV     CS:Int24ErrCode,AL      ;Store error code for later
  42.         POP     AX                      ;Restore AX
  43.         MOV     AL,00                   ;Tell DOS to I)gnore error
  44.         IRET                            ;Return
  45.  
  46. EdInt24         ENDP
  47.  
  48. ;****************************************************** EdInt24Result
  49.  
  50. ;function EdInt24Result : Word;
  51.  
  52. ;Returns word in AX. AH has Int24ErrCode, AL has IoResult.
  53.  
  54. EdInt24Result   PROC FAR
  55.  
  56.         CALL    IoResultPrim            ;Get IoResult into AX
  57.         CMP     CS:Int24Err,1           ;Critical error flag set?
  58.         JNE     EirExit                 ;No? Done
  59.  
  60.         ;Merge critical error code into result
  61.  
  62.         MOV     AH,CS:Int24ErrCode      ;Int24ErrCode into AH
  63.         OR      AH,AH                   ;Check for "zero" error
  64.         JNZ     EIrAHnot0               ;Jump if not
  65.         MOV     AH,0Dh                  ;Return a fake non-zero error code
  66.  
  67. EIrAHnot0:
  68.         MOV     CS:Int24ErrCode,0       ;Reset Int24ErrCode to 0
  69. EirExit:
  70.         RET
  71.  
  72. EdInt24Result   ENDP
  73.  
  74. ;****************************************************** EdInt24On
  75.  
  76. ;Install our critical error handler and save address of old one
  77.  
  78. EdInt24On       PROC FAR
  79.  
  80.         PUSH    BP                      ;Save BP
  81.         MOV     BP,SP                   ;Set up stack frame
  82.         PUSH    DS                      ;Save DS
  83.  
  84.         ;Get and save address of old critical error handler
  85.  
  86.         MOV     AX,3524h                ;AH = Get vector, AL = vector to get
  87.         INT     21h                     ;Call DOS
  88.         MOV     SaveSeg24,ES            ;Save segment of current ISR
  89.         MOV     SaveOfs24,BX            ;Save offset of current ISR
  90.  
  91.         ;Install new critical error handler
  92.  
  93.         PUSH    CS                      ;Get CS...
  94.         POP     DS                      ; into DS
  95.         MOV     DX,Offset(EdInt24)      ;DS:DX points to EdInt24
  96.         MOV     AX,2524h                ;AH = Set vector, AL = vector to set
  97.         INT     21h                     ;Call DOS
  98.  
  99.         ;Initialize variables
  100.  
  101.         MOV     CS:Int24Err,0           ;Clear error flag
  102.         MOV     CS:Int24ErrCode,0       ;Clear error code
  103.  
  104.         POP     DS                      ;Restore DS
  105.         MOV     SP,BP                   ;Restore SP
  106.         POP     BP                      ;Restore BP
  107.         RET
  108.  
  109. EdInt24On       ENDP
  110.  
  111. ;****************************************************** EdInt24Off
  112.  
  113. ;Restore previous critical error handler
  114.  
  115. EdInt24Off      PROC FAR
  116.  
  117.         PUSH    BP                      ;Save BP
  118.         MOV     BP,SP                   ;Set up stack frame
  119.         PUSH    DS                      ;Save DS
  120.  
  121.         ;Install old critical error handler
  122.  
  123.         MOV     DX,SaveOfs24            ;DX = old offset
  124.         MOV     DS,SaveSeg24            ;DS:DX points to old ISR
  125.         MOV     AX,2524h                ;AH = Set vector, AL = vector to set
  126.         INT     21h                     ;Call DOS
  127.         MOV     CS:Int24Err,0           ;Clear error flag
  128.  
  129.         POP     DS                      ;Restore DS
  130.         MOV     SP,BP                   ;Restore SP
  131.         POP     BP                      ;Restore BP
  132.         RET
  133.  
  134. EdInt24Off      ENDP
  135.  
  136. CODE    ENDS
  137.  
  138.         END
  139.