[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]

    {  >> What sort of code do I need to include in a pascal Program (Writen in
      >> Borland Pascal 6.0) to disable CTRL-BREAK and CTRL-C?
    }
    Unit CAD;

    Interface

    Uses Dos;

    Var
      Int9Handler  : Pointer;

    Procedure InterceptCtrlAltDel;
    Procedure RestoreCAD;

      Implementation

    Procedure InterceptCtrlAltDel; Assembler;

    Const
      Ctrl         = 4;
      Alt          = 8;
      Del          = $53;
      KbdPort      = $60;                  { Keyboard port }
      KbdCtrlPort  = $61;                  { Keyboard control port }
      PIC          = $20;                  { 8259 Interrupt controller }
      EOI          = $20;                  { end-of-interrupt }

      Asm

      PUSH   AX
      PUSH   DS
      MOV    AX, SEG @Data
      MOV    DS, AX
      STI
      in     AL, KbdPort
      and    AL, 01111111b
      CMP    AL, Del
      JNE    @2

      @1 :     MOV    AH, 2               { BIOS Get keyboard flags service }
      inT    16h
      TEST   AL, Ctrl + Alt
      JNZ    @3

      @2 :     PUSHF
      CALL   [Int9Handler]
      JMP    @4

      @3 :     in     AL, KbdCtrlPort
      MOV    AH, AL
      or     AL, 10000000b
      OUT    KbdCtrlPort, AL
      XCHG   AH, AL
      OUT    KbdCtrlPort, AL
      CLI

      MOV    AL, EOI
      OUT    PIC, AL
      @4 :     POP    DS
      POP    AX
      IRET                       { make sure we return correctly }
    end;  { InterceptCtrlAltDel }

    Procedure RestoreCAD;

    begin
      SETinTVEC (9, Int9Handler);
    end;  { RestoreCAD }

    begin
      GETinTVEC (9, Int9Handler);
      SETinTVEC (9, @InterceptCtrlAltDel);
    end. {Unit CAD}

[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]