program Test2; // read Keyboard via Unit keyboard
{$mode objfpc}{$H+}
uses keyboard;
var k,t: TKeyEvent;
RK: TKeyRecord absolute k;
RT: TKeyRecord absolute t;
begin
InitKeyBoard;
writeln('FPC-Version: ' + {$I %FPCVERSION%});
writeln('"scan"=Scancode, "code"=ASCII-Code of printable chars / To exit press "x"');
repeat
k:=GetKeyEvent; {waits for a key}
write('scan=', HexStr(hi(RK.KeyCode),2), ' code=', HexStr(lo(RK.KeyCode),2),
' shift=', HexStr(RK.ShiftState,2), ' flags=', HexStr(RK.Flags,2), '':2);
t:=TranslateKeyEvent(k);
write('scan=', HexStr(hi(RT.KeyCode),2), ' code=', HexStr(lo(RT.KeyCode),2),
' shift=', HexStr(RT.ShiftState,2), ' flags=', HexStr(RT.Flags,2), '':2);
write('"', KeyEventToString(t), '" ');
case GetKeyEventFlags(t) of
kbASCII: write('ASCII');
kbUniCode: write('Unicode');
kbFnKey: write('Function');
kbPhys: write('Physical');
kbReleased: write('Released');
end; {case}
writeln;
until GetKeyEventChar(t) = 'x';
DoneKeyBoard;
end.