home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / mslang / as / brk2.asm < prev    next >
Assembly Source File  |  1985-08-05  |  3KB  |  71 lines

  1. TITLE   BRK2 -- Break Handling Utilities Module
  2.  
  3. TRUE            EQU     01H                     ;boolean true
  4. FALSE           EQU     00H                     ;boolean false
  5. BREAKINT        EQU     23H                     ;dos control-break intrpt
  6. GETVECTOR       EQU     35H                     ;dos get vector function
  7. SETVECTOR       EQU     25H                     ;dos set vector function
  8. DOS_FUNCTION    EQU     21H                     ;dos function call
  9.  
  10. BREAK           SEGMENT PUBLIC  'CODE'
  11. BREAKFLAG       DB      0H                      ;break key hit flag
  12. SAVEBRK         DD      0H                      ;saved break vec. contents
  13.                 ASSUME  CS:BREAK
  14.                 ASSUME  DS:NOTHING
  15.  
  16. ;CHECK_BREAK    checks if ctrl-break has been pressed.  It returns
  17. ;true if ctrl-break has been pressed and false if it hasn't.
  18.  
  19.                 PUBLIC  CHECK_BREAK
  20. CHECK_BREAK     PROC    FAR
  21.                 XOR     AX, AX                  ;clear ax
  22.                 MOV     AL, BREAKFLAG           ;return value = breakflag
  23.                 MOV     BREAKFLAG, FALSE        ;reset breakflag
  24.                 RET
  25. CHECK_BREAK     ENDP
  26.  
  27. ;INSTALL_BREAK_HANDLER  sets up a ctrl-break interrupt handler.  It
  28. ;also saves the address of the former break handler so that it can
  29. ;be restored later.
  30.  
  31.                 PUBLIC  INST_BRK_HANDLR
  32. INST_BRK_HANDLR PROC    FAR
  33.                 PUSH    DS
  34.                 MOV     AL, BREAKINT            ;AL = break interrupt
  35.                 MOV     AH, GETVECTOR           ;AH = dos function code
  36.                 INT     DOS_FUNCTION            ;call dos
  37.                 MOV     WORD PTR SAVEBRK, BX    ;save offset in int vector
  38.                 MOV     WORD PTR SAVEBRK+2, ES  ;save base in int vector
  39.                 MOV     AL, BREAKINT            ;AL = break interrupt
  40.                 MOV     AH, SETVECTOR           ;AH = dos function code
  41.                 MOV     DX, OFFSET BRK_HANDLER  ;DX = offset of brk handler
  42.                 MOV     BX, CS                  ;BX = this segment
  43.                 MOV     DS, BX                  ;DS = this segment
  44.                 INT     DOS_FUNCTION            ;call dos
  45.                 POP     DS
  46.                 RET
  47. INST_BRK_HANDLR ENDP
  48.  
  49. ;BRK_HANDLER    is invoked by the bios when ctrl_break is pressed
  50.  
  51. BRK_HANDLER     PROC    FAR
  52.                 MOV     BREAKFLAG, TRUE         ;breakflag = yes, break hit
  53.                 IRET
  54. BRK_HANDLER     ENDP
  55.  
  56. ;REMOVE_BREAK_HANDLER restores the previous ctrl-break handler
  57.  
  58. REM_BRK_HANDLR  PROC    FAR
  59.                 PUSH    DS
  60.                 MOV     AL, BREAKINT            ;AL = break interrupt
  61.                 MOV     AH, SETVECTOR           ;AH = dos function code
  62.                 MOV     DX, WORD PTR SAVEBRK    ;DX = saved 1st word
  63.                 MOV     BX, WORD PTR SAVEBRK+2  ;BX = saved 2nd word
  64.                 MOV     DS, BX                  ;DS = saved 2nd word
  65.                 INT     DOS_FUNCTION            ;call dos
  66.                 POP     DS
  67.                 RET
  68. REM_BRK_HANDLR  ENDP
  69. BREAK           ENDS
  70.                 END
  71.