123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- {
- System independent keyboard interface for tp7
- $Id$
- }
- procedure InitKeyboard;
- begin
- end;
- procedure DoneKeyboard;
- begin
- end;
- function GetKeyEvent: TKeyEvent; assembler;
- asm
- mov ax,[word ptr PendingKeyEvent+0]
- or ax,[word ptr PendingKeyEvent+2]
- je @@1
- mov ax,[word ptr PendingKeyEvent+0]
- mov dx,[word ptr PendingKeyEvent+2]
- mov [word ptr PendingKeyEvent+0],0
- mov [word ptr PendingKeyEvent+2],0
- jmp @@99
- @@1:
- mov ax,40h
- mov es,ax
- mov ah, 10h { get extended key }
- int 16h
- mov dh,3
- mov dl,[byte ptr es:17h] { shift state }
- and dl,0fh
- cmp al,0e0h
- jne @@2
- or ah,ah
- jz @@2
- mov al,0
- @@2:
- @@99:
- end;
- function PollKeyEvent: TKeyEvent; assembler;
- asm
- mov ax,[word ptr PendingKeyEvent+0]
- or ax,[word ptr PendingKeyEvent+2]
- je @@1
- mov ax,[word ptr PendingKeyEvent+0]
- mov dx,[word ptr PendingKeyEvent+2]
- jmp @@2
- @@1:
- mov ax,40h
- mov es,ax
- mov ah,11h
- int 16h
- jnz @@2
- xor ax,ax
- xor dx,dx
- jmp @@99
- @@2: mov dh,3
- mov dl,[byte ptr es:17h] { shift state }
- and dl,0fh
- cmp al,0e0h
- jne @@3
- or ah,ah
- jz @@3
- mov al,0
- @@3:
- @@99:
- end;
- function PollShiftStateEvent: TKeyEvent;assembler;
- asm
- mov ax,40h
- mov es,ax
- xor dx,dx
- xor ax,ax
- mov dl,byte ptr es:[17h] { shift state}
- and dl,0fh
- end;
- { Function key translation }
- type
- TTranslationEntry = 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
- if KeyEvent and $03000000 = $03000000 then
- 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;
- function TranslateKeyEventUniCode(KeyEvent: TKeyEvent): TKeyEvent;
- begin
- TranslateKeyEventUniCode := KeyEvent;
- ErrorHandler(errKbdNotImplemented, nil);
- end;
- {
- $Log$
- Revision 1.2 2000-07-13 11:32:26 michael
- + removed logs
-
- }
|