[Back to CRT SWAG index] [Back to Main SWAG index] [Original]
{
To the person that posted the message about using KeyPressed or anyone
else interested. Below is a Function that I have used to read keyboard input
that is similiar to KeyPressed. It does a KeyPressed and ReadKey all in one
statement. If you are familiar With BASIC this InKey Function is similiar
to the one in BASIC in that is doesn't sit and wait For input. The KeyEnh
Function just returns True/False depending on whether or not it detected
an Enhanced keyboard. SHIFT, CTRL, and ALT are global Boolean Variables
which value reflect the state of these keys involved in the the keypress.
}
Uses
Dos;
Function KeyEnh: Boolean;
Var
Enh: Byte Absolute $0040:$0096;
begin
KeyEnh := False;
if (Enh and $10) = $10 then
KeyEnh := True;
end;
Function InKey(Var SCAN, ASCII: Byte): Boolean;
Var
i : Integer;
Shift,
Ctrl,
Alt : Boolean;
Temp,
Flag1 : Byte;
HEXCH,
HEXRD,
HEXFL : Byte;
reg : Registers;
begin
if KeyEnh then
begin
HEXCH := $11;
HEXRD := $10;
HEXFL := $12;
end
else
begin
HEXCH := $01;
HEXRD := $00;
HEXFL := $02;
end;
reg.ah := HEXCH;
Intr($16, reg);
i := reg.flags and FZero;
reg.ah := HEXFL;
Intr($16, reg);
Flag1 := Reg.al;
Temp := Flag1 and $03;
if Temp = 0 then
SHIFT := False
ELSE
SHIFT := True;
Temp := Flag1 and $04;
if Temp = 0 then
CTRL := False
ELSE
CTRL := True;
Temp := Flag1 and $08;
if Temp = 0 Then
ALT := False
ELSE
ALT := True;
if i = 0 then
begin
reg.ah := HEXRD;
Intr($16, reg);
scan := reg.ah;
ascii := reg.al;
InKey := True;
end
else
InKey := False;
end;
Var
Hi, Hi2 : Byte;
begin
Repeat Until InKey(Hi,Hi2);
Writeln(Hi);
Writeln(Hi2);
end.
[Back to CRT SWAG index] [Back to Main SWAG index] [Original]