home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
insidetp
/
1990_05
/
break.pas
next >
Wrap
Pascal/Delphi Source File
|
1990-04-16
|
1KB
|
55 lines
UNIT Break;
{This unit traps the Ctrl-Break sequence}
INTERFACE
USES
DOS;
CONST
BrkTrapped : Boolean = FALSE;
PROCEDURE TrapCtrlBrkOn;
PROCEDURE TrapCtrlBrkOff;
IMPLEMENTATION
CONST
CtrlBrkInterrupt = $1B;
BrkTrapSet : Boolean = FALSE;
VAR
OldBrkVector : Pointer;
{ The following procedure is the new Ctrl-Break
Interrupt handler. It traps the Ctrl-Break key
sequence and setsa flag for the currently
running program to check. You should do any
special processing based on this flag's value}
{$F+}
PROCEDURE NewCtrlBrkVector; INTERRUPT;
{$F-}
BEGIN
INLINE($FA); {Clear interrupts instruction -CLI}
{Reset bit 7 low}
Mem[$0040:$0071] := Mem[$0040:$0071] AND $E;
BrkTrapped := TRUE;
INLINE($FB) {Set interrupts instruction - STI}
END;
PROCEDURE TrapCtrlBrkOn;
BEGIN
{Make sure no stacked calls are possible}
IF NOT BrkTrapSet THEN
BEGIN
BrkTrapSet := TRUE;
GetIntVec(CtrlBrkInterrupt, OldBrkVector);
SetIntVec(CtrlBrkInterrupt, @NewCtrlBrkVector)
END
END;
PROCEDURE TrapCtrlBrkOff;
BEGIN {Check if there is an old vector to restore}
IF BrkTrapSet THEN
BEGIN
BrkTrapSet := FALSE;
SetIntVec(CtrlBrkInterrupt, OldBrkVector)
END
END;
END.