[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]