[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{
The code included in this example shows how to read
an enhanced keyboard using Turbo Pascal. That is, it detects
if the F11, F12, etc keys are pressed. It provides a substitute
for the ReadKey and KeyPressed functions.
This TI includes two source files, the first a unit
called ENHKEY.PAS and the second a test program called TEST.PAS.
ENHKEY.PAS contains three routines:
KeyEPressed: Works just like the CRT routine called
KeyPressed,
except it detects keypresses on enhanced keys.
NewReadKey: Works very much like ReadKey, except it detects
enhanced keys.
ReadEKey: This is the raw readkey function. It returns a
word.
The high order word contains the scan code and the
low word contains the regular key. Some users might
not want to call this function directle, but instead
might want to access it through the NewReadKey
function,
which acts much more like the original ReadKey function
from the CRT unit.
The code in the EnhKey unit depends on interrupt 16h,
functions
10 and 11, both of which assume the presence of AT or better
computer.
In this day and age, that's a fairly safe bet, but you should be
aware
that this code will not run on an old XT.
Notice that if NewReadKey returns zero the first time it is
called, you can grab the scan code in the global variable
ScanCode,
or you can call NewReadKey a second time to return the ScanCode.
}
unit EnhKey;
interface
var
ScanCode: Byte;
function KeyEPressed: Boolean;
function ReadEKey: Word;
function NewReadKey: Char;
implementation
function KeyEPressed: Boolean; assembler;
asm
mov ah, $11
int 16h
mov ax, 1
jnz @@True
xor ax, ax
@@True:
end;
function ReadEKey: Word; assembler;
asm
mov ah, 10h
int 16h
end;
function NewReadKey: Char;
var
Ch: Word;
begin
if ScanCode <> 0 then begin
NewReadKey := Char(ScanCode);
ScanCode := 0;
exit;
end;
Ch := ReadEKey;
if Lo(Ch) = 0 then begin
ScanCode := Hi(Ch);
NewReadKey := #0;
exit;
end;
NewReadKey := Char(Lo(Ch));
end;
begin
ScanCode := 0;
end.
begin
ScanCode := 0;
end.
{ ================= The Test Program ================ }
program Test;
uses
EnhKey;
var
Ch: Char;
i: Integer;
begin
i := 0;
while (Ch <> #27) do begin
if KeyEpressed then begin
Ch := NewReadKey;
if Ch = #0 then begin
Ch := NewReadKey;
WriteLn('Enhanced: ', Ch)
end else
WriteLn('Normal: ', Ch);
inc(i);
end;
end;
end.
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]