Subversion Repositories Kolibri OS

Rev

Rev 7265 | Rev 7293 | 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_LEFT  176
  14. #define ASCII_KEY_RIGHT 179
  15. #define ASCII_KEY_DOWN  177
  16. #define ASCII_KEY_UP    178
  17. #define ASCII_KEY_HOME  180
  18. #define ASCII_KEY_END   181
  19. #define ASCII_KEY_PGDN  183
  20. #define ASCII_KEY_PGUP  184
  21.  
  22. //SCAN CODE KEYS
  23. #define SCAN_CODE_BS    014
  24. #define SCAN_CODE_TAB   015
  25. #define SCAN_CODE_ENTER 028
  26. #define SCAN_CODE_ESC   001
  27. #define SCAN_CODE_DEL   083
  28. #define SCAN_CODE_INS   082
  29. #define SCAN_CODE_SPACE 057
  30.  
  31. #define SCAN_CODE_LEFT  075
  32. #define SCAN_CODE_RIGHT 077
  33. #define SCAN_CODE_DOWN  080
  34. #define SCAN_CODE_UP    072
  35. #define SCAN_CODE_HOME  071
  36. #define SCAN_CODE_END   079
  37. #define SCAN_CODE_PGDN  081
  38. #define SCAN_CODE_PGUP  073
  39.  
  40. #define SCAN_CODE_MINUS 012
  41. #define SCAN_CODE_PLUS  013
  42.  
  43. #define SCAN_CODE_F1    059
  44. #define SCAN_CODE_F11   087
  45. #define SCAN_CODE_F12   088
  46.  
  47. #define SCAN_CODE_KEY_B 048
  48. #define SCAN_CODE_KEY_C 046
  49. #define SCAN_CODE_KEY_E 018
  50. #define SCAN_CODE_KEY_F 033
  51. #define SCAN_CODE_KEY_I 023
  52. #define SCAN_CODE_KEY_L 038
  53. #define SCAN_CODE_KEY_M 050
  54. #define SCAN_CODE_KEY_O 024
  55. #define SCAN_CODE_KEY_P 025
  56. #define SCAN_CODE_KEY_R 019
  57. #define SCAN_CODE_KEY_S 031
  58. #define SCAN_CODE_KEY_T 020
  59. #define SCAN_CODE_KEY_V 047
  60. #define SCAN_CODE_KEY_X 045
  61. #define SCAN_CODE_KEY_Y 021
  62. #define SCAN_CODE_KEY_Z 044
  63.  
  64.  
  65. #define KEY_LSHIFT     00000000001b
  66. #define KEY_RSHIFT     00000000010b
  67. #define KEY_LCTRL      00000000100b
  68. #define KEY_RCTRL      00000001000b
  69. #define KEY_LALT       00000010000b
  70. #define KEY_RALT       00000100000b
  71. #define KEY_CAPSLOCK   00001000000b
  72. #define KEY_NUMLOCK    00010000000b
  73. #define KEY_SCROLLLOCK 00100000000b
  74. #define KEY_LWIN       01000000000b
  75. #define KEY_RWIN       10000000000b
  76.  
  77. inline fastcall word GetKey()  //+Gluk fix
  78. {
  79.                 $push edx
  80. GETKEY:
  81.                 $mov  eax,2
  82.                 $int  0x40
  83.                 $cmp eax,1
  84.                 $jne GETKEYI
  85.                 $mov ah,dh
  86.                 $jmp GETKEYII //jz?
  87. GETKEYI:
  88.                 $mov dh,ah
  89.                 $jmp GETKEY
  90. GETKEYII:
  91.                 $pop edx
  92.                 $shr eax,8
  93. }
  94.  
  95. :unsigned char key_ascii;
  96. :dword key_scancode, key_modifier, key_editbox;
  97. :int GetKeys()
  98. {
  99.                 $push edx
  100. GETKEY:
  101.                 $mov  eax,2
  102.                 $int  0x40
  103.                 $cmp eax,1
  104.                 $jne GETKEYI
  105.                 $mov eax,edx
  106.                 $jmp GETKEYII
  107. GETKEYI:
  108.                 $mov edx,eax
  109.                 $jmp GETKEY
  110. GETKEYII:
  111.                 $pop edx
  112.         key_editbox = EAX;
  113.         key_ascii = AH;
  114.         $shr  eax,16
  115.         key_scancode = AL;
  116.         //get alt/shift/ctrl key status
  117.         $mov eax,66
  118.         $mov ebx,3
  119.         $int 0x40
  120.         key_modifier = EAX;
  121.         EAX = key_editbox;
  122. }
  123.  
  124. #endif