mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 13:49:39 +02:00
Changes for new style (TKeyboardDriver record)
This commit is contained in:
parent
c513f38d82
commit
d9bb2a85c2
@ -13,43 +13,42 @@
|
|||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
**********************************************************************}
|
**********************************************************************}
|
||||||
{ 2001/04/16 armin: first version for netware }
|
{ 2001/04/16 armin: first version for netware
|
||||||
|
2002/03/03 armin: changes for fpc 1.1 }
|
||||||
unit Keyboard;
|
unit Keyboard;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
{$i keybrdh.inc}
|
{$i keybrdh.inc}
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$i keyboard.inc}
|
{$i keyboard.inc}
|
||||||
{$i nwsys.inc}
|
{$i nwsys.inc}
|
||||||
|
|
||||||
procedure InitKeyboard;
|
procedure SysInitKeyboard;
|
||||||
begin
|
begin
|
||||||
PendingKeyEvent := 0;
|
PendingKeyEvent := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure DoneKeyboard;
|
|
||||||
begin
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetKeyEvent: TKeyEvent;
|
function SysGetKeyEvent: TKeyEvent;
|
||||||
var T : TKeyEvent;
|
var T : TKeyEvent;
|
||||||
begin
|
begin
|
||||||
if PendingKeyEvent<>0 then
|
if PendingKeyEvent<>0 then
|
||||||
begin
|
begin
|
||||||
GetKeyEvent:=PendingKeyEvent;
|
SysGetKeyEvent:=PendingKeyEvent;
|
||||||
PendingKeyEvent:=0;
|
PendingKeyEvent:=0;
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
T := byte(_getch);
|
T := byte(_getch);
|
||||||
if T = 0 then
|
if T = 0 then
|
||||||
T := word(_getch) shl 8;
|
T := word(_getch) shl 8;
|
||||||
GetKeyEvent := $03000000 OR T;
|
SysGetKeyEvent := $03000000 OR T;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function PollKeyEvent: TKeyEvent;
|
function SysPollKeyEvent: TKeyEvent;
|
||||||
begin
|
begin
|
||||||
if PendingKeyEvent<>0 then
|
if PendingKeyEvent<>0 then
|
||||||
exit(PendingKeyEvent);
|
exit(PendingKeyEvent);
|
||||||
@ -59,76 +58,36 @@ begin
|
|||||||
if PendingKeyEvent = 0 then
|
if PendingKeyEvent = 0 then
|
||||||
PendingKeyEvent := word(_getch) shl 8;
|
PendingKeyEvent := word(_getch) shl 8;
|
||||||
PendingKeyEvent := PendingKeyEvent OR $03000000;
|
PendingKeyEvent := PendingKeyEvent OR $03000000;
|
||||||
PollKeyEvent := PendingKeyEvent;
|
SysPollKeyEvent := PendingKeyEvent;
|
||||||
end else
|
end else
|
||||||
PollKeyEvent := 0;
|
SysPollKeyEvent := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function PollShiftStateEvent: TKeyEvent;
|
function SysPollShiftStateEvent: TKeyEvent;
|
||||||
begin
|
begin
|
||||||
PollShiftStateEvent:=0;
|
SysPollShiftStateEvent:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function SysGetShiftState: Byte;
|
||||||
{ Function key translation }
|
|
||||||
type
|
|
||||||
TTranslationEntry = packed record
|
|
||||||
Min, Max: Byte;
|
|
||||||
Offset: Word;
|
|
||||||
end;
|
|
||||||
const
|
|
||||||
TranslationTableEntries = 12;
|
|
||||||
TranslationTable: array [1..TranslationTableEntries] of TTranslationEntry =
|
|
||||||
((Min: $3B; Max: $44; Offset: kbdF1), { function keys F1-F10 }
|
|
||||||
(Min: $54; Max: $5D; Offset: kbdF1), { Shift fn keys F1-F10 }
|
|
||||||
(Min: $5E; Max: $67; Offset: kbdF1), { Ctrl fn keys F1-F10 }
|
|
||||||
(Min: $68; Max: $71; Offset: kbdF1), { Alt fn keys F1-F10 }
|
|
||||||
(Min: $85; Max: $86; Offset: kbdF11), { function keys F11-F12 }
|
|
||||||
(Min: $87; Max: $88; Offset: kbdF11), { Shift+function keys F11-F12 }
|
|
||||||
(Min: $89; Max: $8A; Offset: kbdF11), { Ctrl+function keys F11-F12 }
|
|
||||||
(Min: $8B; Max: $8C; Offset: kbdF11), { Alt+function keys F11-F12 }
|
|
||||||
(Min: 71; Max: 73; Offset: kbdHome), { Keypad keys kbdHome-kbdPgUp }
|
|
||||||
(Min: 75; Max: 77; Offset: kbdLeft), { Keypad keys kbdLeft-kbdRight }
|
|
||||||
(Min: 79; Max: 81; Offset: kbdEnd), { Keypad keys kbdEnd-kbdPgDn }
|
|
||||||
(Min: $52; Max: $53; Offset: kbdInsert));
|
|
||||||
|
|
||||||
|
|
||||||
function TranslateKeyEvent(KeyEvent: TKeyEvent): TKeyEvent;
|
|
||||||
var
|
|
||||||
I: Integer;
|
|
||||||
ScanCode: Byte;
|
|
||||||
begin
|
begin
|
||||||
if KeyEvent and $03000000 = $03000000 then
|
SysGetShiftState:=0;
|
||||||
begin
|
|
||||||
if KeyEvent and $000000FF <> 0 then
|
|
||||||
begin
|
|
||||||
TranslateKeyEvent := KeyEvent and $00FFFFFF;
|
|
||||||
exit;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
{ This is a function key }
|
|
||||||
ScanCode := (KeyEvent and $0000FF00) shr 8;
|
|
||||||
for I := 1 to TranslationTableEntries do
|
|
||||||
begin
|
|
||||||
if (TranslationTable[I].Min <= ScanCode) and (ScanCode <= TranslationTable[I].Max) then
|
|
||||||
begin
|
|
||||||
TranslateKeyEvent := $02000000 + (KeyEvent and $00FF0000) +
|
|
||||||
(ScanCode - TranslationTable[I].Min) + TranslationTable[I].Offset;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
TranslateKeyEvent := KeyEvent;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TranslateKeyEventUniCode(KeyEvent: TKeyEvent): TKeyEvent;
|
Const
|
||||||
|
SysKeyboardDriver : TKeyboardDriver = (
|
||||||
|
InitDriver : Nil;
|
||||||
|
DoneDriver : Nil;
|
||||||
|
GetKeyevent : @SysGetKeyEvent;
|
||||||
|
PollKeyEvent : @SysPollKeyEvent;
|
||||||
|
GetShiftState : @SysGetShiftState;
|
||||||
|
TranslateKeyEvent : Nil;
|
||||||
|
TranslateKeyEventUnicode : Nil;
|
||||||
|
);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
TranslateKeyEventUniCode := KeyEvent;
|
KeyboardInitialized := false;
|
||||||
ErrorCode:=errKbdNotImplemented;
|
PendingKeyEvent := 0;
|
||||||
end;
|
SetKeyBoardDriver(SysKeyBoardDriver);
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user