[Back to DOS SWAG index] [Back to Main SWAG index] [Original]
{***************************************************************************}
{ }
{ Pause2P - Convert the PAUSE key to a 'P' char. Freeware. }
{ Simply add this unit to an USES clause of your program }
{ and forget it. Its way of operating is fully automatic! }
{ A minimal demo is at the end of this unit. }
{ }
{ Author: Pino Navato }
{ }
{ E-Mail: pnavato@poboxes.com }
{ pnavato@geocities.com }
{ Pino Navato, 2:335/225.18 (The Bits BBS, Fidonet) }
{ }
{ WWW: www.poboxes.com/pnavato }
{ (currently forwards to www.geocities.com/SiliconValley/4421) }
{ }
{ Advertisement: }
{ Do you need new CHR fonts for the BGI? Visit my home page! }
{ }
{***************************************************************************}
Unit Pause2P;
interface
{ This unit doesn't export anything! }
implementation
uses Dos;
const PauseChar = 'P'; { You can use any char you like (not a string!) }
var OldInt9 : Procedure;
KbdFlags : byte absolute $0040:$0018;
OldExitProc : pointer;
procedure ExitHandler; far;
begin
ExitProc := OldExitProc;
SetIntVec($9, Addr(OldInt9)) { Restore the old vector }
end;
procedure NewInt9; interrupt;
begin
inline ($9C); { PUSHF -- Push flags }
OldInt9; { Call the old ISR }
if KbdFlags and 8 = 8 then { IF the pause flag is set THEN... }
begin
KbdFlags := KbdFlags and 247; { ...clear it and... }
asm { ...put a 'P' in the kdb buffer }
XOR CH,CH { You can remove }
MOV CL,PauseChar { these asm instructions }
MOV AH,5 { if you simply want to }
INT 16h { disable the PAUSE key }
end
end
end;
begin { Initialization }
GetIntVec($9, @OldInt9);
SetIntVec($9, Addr(NewInt9)); { Insert NewInt9 into the keyboard chain }
OldExitProc := ExitProc;
ExitProc := @ExitHandler
end.
{ ========================================================================== }
Program Pause2P_Test;
uses Pause2P;
begin
readln { Try to press the PAUSE key and look at the result! }
end.
{ It couldn't be easier! :) }
[Back to DOS SWAG index] [Back to Main SWAG index] [Original]