keyboard.inc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. {
  2. System independent keyboard interface for tp7
  3. $Id$
  4. }
  5. procedure InitKeyboard;
  6. begin
  7. end;
  8. procedure DoneKeyboard;
  9. begin
  10. end;
  11. function GetKeyEvent: TKeyEvent; assembler;
  12. asm
  13. mov ax,[word ptr PendingKeyEvent+0]
  14. or ax,[word ptr PendingKeyEvent+2]
  15. je @@1
  16. mov ax,[word ptr PendingKeyEvent+0]
  17. mov dx,[word ptr PendingKeyEvent+2]
  18. mov [word ptr PendingKeyEvent+0],0
  19. mov [word ptr PendingKeyEvent+2],0
  20. jmp @@99
  21. @@1:
  22. mov ax,40h
  23. mov es,ax
  24. mov ah, 10h { get extended key }
  25. int 16h
  26. mov dh,3
  27. mov dl,[byte ptr es:17h] { shift state }
  28. and dl,0fh
  29. cmp al,0e0h
  30. jne @@2
  31. or ah,ah
  32. jz @@2
  33. mov al,0
  34. @@2:
  35. @@99:
  36. end;
  37. function PollKeyEvent: TKeyEvent; assembler;
  38. asm
  39. mov ax,[word ptr PendingKeyEvent+0]
  40. or ax,[word ptr PendingKeyEvent+2]
  41. je @@1
  42. mov ax,[word ptr PendingKeyEvent+0]
  43. mov dx,[word ptr PendingKeyEvent+2]
  44. jmp @@2
  45. @@1:
  46. mov ax,40h
  47. mov es,ax
  48. mov ah,11h
  49. int 16h
  50. jnz @@2
  51. xor ax,ax
  52. xor dx,dx
  53. jmp @@99
  54. @@2: mov dh,3
  55. mov dl,[byte ptr es:17h] { shift state }
  56. and dl,0fh
  57. cmp al,0e0h
  58. jne @@3
  59. or ah,ah
  60. jz @@3
  61. mov al,0
  62. @@3:
  63. @@99:
  64. end;
  65. function PollShiftStateEvent: TKeyEvent;assembler;
  66. asm
  67. mov ax,40h
  68. mov es,ax
  69. xor dx,dx
  70. xor ax,ax
  71. mov dl,byte ptr es:[17h] { shift state}
  72. and dl,0fh
  73. end;
  74. { Function key translation }
  75. type
  76. TTranslationEntry = record
  77. Min, Max: Byte;
  78. Offset: Word;
  79. end;
  80. const
  81. TranslationTableEntries = 12;
  82. TranslationTable: array [1..TranslationTableEntries] of TTranslationEntry =
  83. ((Min: $3B; Max: $44; Offset: kbdF1), { function keys F1-F10 }
  84. (Min: $54; Max: $5D; Offset: kbdF1), { Shift fn keys F1-F10 }
  85. (Min: $5E; Max: $67; Offset: kbdF1), { Ctrl fn keys F1-F10 }
  86. (Min: $68; Max: $71; Offset: kbdF1), { Alt fn keys F1-F10 }
  87. (Min: $85; Max: $86; Offset: kbdF11), { function keys F11-F12 }
  88. (Min: $87; Max: $88; Offset: kbdF11), { Shift+function keys F11-F12 }
  89. (Min: $89; Max: $8A; Offset: kbdF11), { Ctrl+function keys F11-F12 }
  90. (Min: $8B; Max: $8C; Offset: kbdF11), { Alt+function keys F11-F12 }
  91. (Min: 71; Max: 73; Offset: kbdHome), { Keypad keys kbdHome-kbdPgUp }
  92. (Min: 75; Max: 77; Offset: kbdLeft), { Keypad keys kbdLeft-kbdRight }
  93. (Min: 79; Max: 81; Offset: kbdEnd), { Keypad keys kbdEnd-kbdPgDn }
  94. (Min: $52; Max: $53; Offset: kbdInsert));
  95. function TranslateKeyEvent(KeyEvent: TKeyEvent): TKeyEvent;
  96. var
  97. I: Integer;
  98. ScanCode: Byte;
  99. begin
  100. if KeyEvent and $03000000 = $03000000 then
  101. begin
  102. if KeyEvent and $000000FF <> 0 then
  103. begin
  104. TranslateKeyEvent := KeyEvent and $00FFFFFF;
  105. exit;
  106. end
  107. else
  108. begin
  109. { This is a function key }
  110. ScanCode := (KeyEvent and $0000FF00) shr 8;
  111. for I := 1 to TranslationTableEntries do
  112. begin
  113. if (TranslationTable[I].Min <= ScanCode) and (ScanCode <= TranslationTable[I].Max) then
  114. begin
  115. TranslateKeyEvent := $02000000 + (KeyEvent and $00FF0000) +
  116. (ScanCode - TranslationTable[I].Min) + TranslationTable[I].Offset;
  117. exit;
  118. end;
  119. end;
  120. end;
  121. end;
  122. TranslateKeyEvent := KeyEvent;
  123. end;
  124. function TranslateKeyEventUniCode(KeyEvent: TKeyEvent): TKeyEvent;
  125. begin
  126. TranslateKeyEventUniCode := KeyEvent;
  127. ErrorHandler(errKbdNotImplemented, nil);
  128. end;
  129. {
  130. $Log$
  131. Revision 1.2 2000-07-13 11:32:26 michael
  132. + removed logs
  133. }