2
System independent keyboard interface for go32v2
5
$Id: keyboard.inc,v 1.1 2000/07/13 06:29:38 michael Exp $
7
WARNING this code needs %fs to contain the DOS memory selector
8
don't forget to reload it after calling C functions
9
that could change it PM
11
$Id: keyboard.inc,v 1.1 2000/07/13 06:29:38 michael Exp $
17
procedure InitKeyboard;
21
procedure DoneKeyboard;
25
function GetKeyEvent: TKeyEvent;
29
if PendingKeyEvent<>0 then
31
GetKeyEvent:=PendingKeyEvent;
37
if (regs.al=$e0) and (regs.ah<>0) then
39
GetKeyEvent:=regs.ax or ((mem[$40:$17] and $f) shl 16);
43
function PollKeyEvent: TKeyEvent;
47
if PendingKeyEvent<>0 then
48
exit(PendingKeyEvent);
51
if (regs.realflags and zeroflag<>0) then
53
if (regs.al=$e0) and (regs.ah<>0) then
55
PollKeyEvent:=regs.ax or ((mem[$40:$17] and $f) shl 16);
59
function PollShiftStateEvent: TKeyEvent;
61
PollShiftStateEvent:=((mem[$40:$17] and $f) shl 16);
65
{ Function key translation }
67
TTranslationEntry = packed record
72
TranslationTableEntries = 12;
73
TranslationTable: array [1..TranslationTableEntries] of TTranslationEntry =
74
((Min: $3B; Max: $44; Offset: kbdF1), { function keys F1-F10 }
75
(Min: $54; Max: $5D; Offset: kbdF1), { Shift fn keys F1-F10 }
76
(Min: $5E; Max: $67; Offset: kbdF1), { Ctrl fn keys F1-F10 }
77
(Min: $68; Max: $71; Offset: kbdF1), { Alt fn keys F1-F10 }
78
(Min: $85; Max: $86; Offset: kbdF11), { function keys F11-F12 }
79
(Min: $87; Max: $88; Offset: kbdF11), { Shift+function keys F11-F12 }
80
(Min: $89; Max: $8A; Offset: kbdF11), { Ctrl+function keys F11-F12 }
81
(Min: $8B; Max: $8C; Offset: kbdF11), { Alt+function keys F11-F12 }
82
(Min: 71; Max: 73; Offset: kbdHome), { Keypad keys kbdHome-kbdPgUp }
83
(Min: 75; Max: 77; Offset: kbdLeft), { Keypad keys kbdLeft-kbdRight }
84
(Min: 79; Max: 81; Offset: kbdEnd), { Keypad keys kbdEnd-kbdPgDn }
85
(Min: $52; Max: $53; Offset: kbdInsert));
88
function TranslateKeyEvent(KeyEvent: TKeyEvent): TKeyEvent;
93
if KeyEvent and $03000000 = $03000000 then
95
if KeyEvent and $000000FF <> 0 then
97
TranslateKeyEvent := KeyEvent and $00FFFFFF;
102
{ This is a function key }
103
ScanCode := (KeyEvent and $0000FF00) shr 8;
104
for I := 1 to TranslationTableEntries do
106
if (TranslationTable[I].Min <= ScanCode) and (ScanCode <= TranslationTable[I].Max) then
108
TranslateKeyEvent := $02000000 + (KeyEvent and $00FF0000) +
109
(ScanCode - TranslationTable[I].Min) + TranslationTable[I].Offset;
115
TranslateKeyEvent := KeyEvent;
119
function TranslateKeyEventUniCode(KeyEvent: TKeyEvent): TKeyEvent;
121
TranslateKeyEventUniCode := KeyEvent;
122
ErrorHandler(errKbdNotImplemented, nil);
126
$Log: keyboard.inc,v $
127
Revision 1.1 2000/07/13 06:29:38 michael
130
Revision 1.1 2000/01/06 01:20:30 peter
131
* moved out of packages/ back to topdir
133
Revision 1.2 1999/12/10 12:42:26 pierre
134
* several mods to handle different keyboard layouts
136
Revision 1.3 1999/11/24 23:36:56 peter
137
* moved to packages dir
139
Revision 1.2 1998/12/12 19:13:00 peter
141
* make test target, make all only makes units
143
Revision 1.1 1998/12/04 12:48:27 peter
146
Revision 1.3 1998/11/01 20:28:26 peter
147
* fixed strange al=$e0 after int $16 call
149
Revision 1.2 1998/10/28 21:18:24 peter
152
Revision 1.1 1998/10/26 11:31:47 peter
153
+ inital include files