Subversion Repositories Kolibri OS

Rev

Rev 7771 | Rev 7981 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef INCLUDE_KEYBOARD_H
  2. #define INCLUDE_KEYBOARD_H
  3.  
  4. //ASCII KEYS
  5. #define ASCII_KEY_BS    008
  6. #define ASCII_KEY_TAB   009
  7. #define ASCII_KEY_ENTER 013
  8. #define ASCII_KEY_ESC   027
  9. #define ASCII_KEY_DEL   182
  10. #define ASCII_KEY_INS   185
  11. #define ASCII_KEY_SPACE 032
  12.  
  13. #define ASCII_KEY_PLUS  043
  14. #define ASCII_KEY_MINUS 045
  15. #define ASCII_KEY_EQU   061
  16.  
  17. #define ASCII_KEY_LEFT  176
  18. #define ASCII_KEY_RIGHT 179
  19. #define ASCII_KEY_DOWN  177
  20. #define ASCII_KEY_UP    178
  21. #define ASCII_KEY_HOME  180
  22. #define ASCII_KEY_END   181
  23. #define ASCII_KEY_PGDN  183
  24. #define ASCII_KEY_PGUP  184
  25.  
  26. //SCAN CODE KEYS
  27. #define SCAN_CODE_BS    014
  28. #define SCAN_CODE_TAB   015
  29. #define SCAN_CODE_ENTER 028
  30. #define SCAN_CODE_ESC   001
  31. #define SCAN_CODE_DEL   083
  32. #define SCAN_CODE_INS   082
  33. #define SCAN_CODE_SPACE 057
  34. #define SCAN_CODE_MENU  093
  35.  
  36. #define SCAN_CODE_LEFT  075
  37. #define SCAN_CODE_RIGHT 077
  38. #define SCAN_CODE_DOWN  080
  39. #define SCAN_CODE_UP    072
  40. #define SCAN_CODE_HOME  071
  41. #define SCAN_CODE_END   079
  42. #define SCAN_CODE_PGDN  081
  43. #define SCAN_CODE_PGUP  073
  44.  
  45. #define SCAN_CODE_MINUS 012
  46. #define SCAN_CODE_PLUS  013
  47.  
  48. #define SCAN_CODE_F1    059
  49. #define SCAN_CODE_F2    060
  50. #define SCAN_CODE_F3    061
  51. #define SCAN_CODE_F4    062
  52. #define SCAN_CODE_F5    063
  53. #define SCAN_CODE_F6    064
  54. #define SCAN_CODE_F7    065
  55. #define SCAN_CODE_F8    066
  56. #define SCAN_CODE_F9    067
  57. #define SCAN_CODE_F10   068
  58. #define SCAN_CODE_F11   087
  59. #define SCAN_CODE_F12   088
  60.  
  61. #define SCAN_CODE_1     002
  62. #define SCAN_CODE_2     003
  63. #define SCAN_CODE_3     004
  64. #define SCAN_CODE_4     005
  65. #define SCAN_CODE_5     006
  66. #define SCAN_CODE_6     007
  67. #define SCAN_CODE_7     008
  68. #define SCAN_CODE_8     009
  69. #define SCAN_CODE_9     010
  70. #define SCAN_CODE_10    011
  71.  
  72. #define SCAN_CODE_KEY_A 030
  73. #define SCAN_CODE_KEY_B 048
  74. #define SCAN_CODE_KEY_C 046
  75. #define SCAN_CODE_KEY_D 032
  76. #define SCAN_CODE_KEY_E 018
  77. #define SCAN_CODE_KEY_F 033
  78. #define SCAN_CODE_KEY_G 034
  79. #define SCAN_CODE_KEY_J 036
  80. #define SCAN_CODE_KEY_H 035
  81. #define SCAN_CODE_KEY_I 023
  82. #define SCAN_CODE_KEY_L 038
  83. #define SCAN_CODE_KEY_M 050
  84. #define SCAN_CODE_KEY_N 049
  85. #define SCAN_CODE_KEY_O 024
  86. #define SCAN_CODE_KEY_P 025
  87. #define SCAN_CODE_KEY_Q 016
  88. #define SCAN_CODE_KEY_R 019
  89. #define SCAN_CODE_KEY_S 031
  90. #define SCAN_CODE_KEY_T 020
  91. #define SCAN_CODE_KEY_U 022
  92. #define SCAN_CODE_KEY_V 047
  93. #define SCAN_CODE_KEY_W 017
  94. #define SCAN_CODE_KEY_X 045
  95. #define SCAN_CODE_KEY_Y 021
  96. #define SCAN_CODE_KEY_Z 044
  97.  
  98.  
  99. #define KEY_LSHIFT     00000000001b
  100. #define KEY_RSHIFT     00000000010b
  101. #define KEY_LCTRL      00000000100b
  102. #define KEY_RCTRL      00000001000b
  103. #define KEY_LALT       00000010000b
  104. #define KEY_RALT       00000100000b
  105. #define KEY_CAPSLOCK   00001000000b
  106. #define KEY_NUMLOCK    00010000000b
  107. #define KEY_SCROLLLOCK 00100000000b
  108. #define KEY_LWIN       01000000000b
  109. #define KEY_RWIN       10000000000b
  110.  
  111. :unsigned char key_ascii;
  112. :dword key_scancode, key_modifier, key_editbox;
  113. :int GetKeys()
  114. {
  115.                 $push edx
  116. GETKEY:
  117.                 $mov  eax,2
  118.                 $int  0x40
  119.                 $cmp eax,1
  120.                 $jne GETKEYI
  121.                 $mov eax,edx
  122.                 $jmp GETKEYII
  123. GETKEYI:
  124.                 $mov edx,eax
  125.                 $jmp GETKEY
  126. GETKEYII:
  127.                 $pop edx
  128.         key_editbox = EAX;
  129.         key_ascii = AH;
  130.         $shr  eax,16
  131.         key_scancode = AL;
  132.         key_modifier = GetKeyModifier();
  133.         EAX = key_editbox;
  134. }
  135.  
  136. // ECX is a mode: 1 - scancodes, 0 - ascii
  137. inline fastcall SetKeyboardMode(ECX)
  138. {
  139.         $mov  eax,66
  140.         $mov  ebx,1
  141.         //$mov  ecx,?  
  142.         $int 0x40      
  143. }
  144.  
  145. //get alt/shift/ctrl key status
  146. inline fastcall dword GetKeyModifier()
  147. {
  148.         $mov eax,66
  149.         $mov ebx,3
  150.         $int 0x40
  151.         key_modifier = EAX;
  152. }
  153.  
  154. #endif