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

(*
LOU DUCHEZ

>> How can i disable the Pascal interrupt key Ctrl-Break?

>Try CheckBreak := False;

> Isn't there another way to do this that works better? Just wondering... :)

Well, here's some code I came up With.  What it does is "cheat": it
detects if you're pressing "C" While "Ctrl" is down.  if so, it changes
"Ctrl" to "undepressed".  As For "Ctrl-Break", I just changed the
built-in "Ctrl-Break" interrupt to an "empty" routine (i.e., it does
NOTHING).  And it's a TSR, too; to "un-TSR" the code, remove the
"{$M ...}" at the beginning and the "keep(0)" at the end, then just
incorporate the code into your Programs.  More comments as I go:
*)

{$M $0400, $0000, $0000}
{$F+}

Program nobreak;
Uses
  Dos;

Const
  ctrlByte = $04;  { Memory location $0040:$0017 governs the statUses of
                     the Ctrl key, Alt, Shifts, etc.  the "$04" bit
                     handles "Ctrl". }

Var
  old09h       : Procedure; { original keyboard handler }
  ctrldown,
  cdown        : Boolean;
  keyboardstat : Byte Absolute $0040:$0017;    { the aforementioned location }

Procedure new1bh; interrupt;  { new Ctrl-Break handler: does NOTHING }
begin
end;

Procedure new09h; interrupt;  { new keyboard handler: it checks if you've
                                pressed "C" or "Brk"; if you have, it changes
                                "Ctrl" to "undepressed.  Then it calls the
                                "old" keyboard handler. }
begin
  if port[$60] and $1d = $1d then
    ctrldown := (port[$60] < 128);
  if port[$60] and $2e = $2e then
    cdown := (port[$60] < 128);
  if cdown and ctrldown then
    keyboardstat := keyboardstat and not ctrlByte;
  Asm
    pushf
  end;
  old09h;
end;

begin
  getintvec($09, @old09h);
  setintvec($09, @new09h);  { set up new keyboard handler }
  setintvec($1b, @new1bh);  { set up new "break" handler }
  ctrldown := False;
  cdown    := False;
  keep(0);
end.

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