KeyDefs.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. // FILE: KeyDefs.h ////////////////////////////////////////////////////////////
  24. //-----------------------------------------------------------------------------
  25. //
  26. // Westwood Studios Pacific.
  27. //
  28. // Confidential Information
  29. // Copyright (C) 2001 - All Rights Reserved
  30. //
  31. //-----------------------------------------------------------------------------
  32. //
  33. // Project: RTS3
  34. //
  35. // File name: KeyDefs.h
  36. //
  37. // Created: Mike Morrison, 1995
  38. // Colin Day, June 2001
  39. //
  40. // Desc: Basic keyboard key definitions.
  41. //
  42. /** @todo NOTE: These key definitions are currently tied directly to the
  43. * Direct Input key codes, therefore making these definitions device
  44. * dependent even though this code lives on the device INdependent side
  45. * of the engine. In the future to be truly device independent we
  46. * need to define our own key codes, and have a translation between
  47. * what we read from the device to our own system*/
  48. //
  49. //-----------------------------------------------------------------------------
  50. ///////////////////////////////////////////////////////////////////////////////
  51. #pragma once
  52. #ifndef __KEYDEFS_H_
  53. #define __KEYDEFS_H_
  54. // SYSTEM INCLUDES ////////////////////////////////////////////////////////////
  55. #include <stdlib.h>
  56. #ifndef DIRECTINPUT_VERSION
  57. # define DIRECTINPUT_VERSION 0x800
  58. #endif
  59. #include <dinput.h>
  60. // USER INCLUDES //////////////////////////////////////////////////////////////
  61. // FORWARD REFERENCES /////////////////////////////////////////////////////////
  62. ///////////////////////////////////////////////////////////////////////////////
  63. // TYPE DEFINES ///////////////////////////////////////////////////////////////
  64. ///////////////////////////////////////////////////////////////////////////////
  65. #ifndef DIK_OEM_102
  66. #define DIK_OEM_102 0x56 /* < > | on UK/Germany keyboards */
  67. #endif
  68. #ifndef DIK_KANA
  69. #define DIK_KANA 0x70 /* (Japanese keyboard) */
  70. #endif
  71. #ifndef DIK_CONVERT
  72. #define DIK_CONVERT 0x79 /* (Japanese keyboard) */
  73. #endif
  74. #ifndef DIK_NOCONVERT
  75. #define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */
  76. #endif
  77. #ifndef DIK_YEN
  78. #define DIK_YEN 0x7D /* (Japanese keyboard) */
  79. #endif
  80. #ifndef DIK_CIRCUMFLEX
  81. #define DIK_CIRCUMFLEX 0x90 /* (Japanese keyboard) */
  82. #endif
  83. #ifndef DIK_KANJI
  84. #define DIK_KANJI 0x94 /* (Japanese keyboard) */
  85. #endif
  86. //=============================================================================
  87. /** The key tables */
  88. //=============================================================================
  89. enum KeyDefType
  90. {
  91. // keypad keys ----------------------------------------------------------------
  92. KEY_KP0 = DIK_NUMPAD0,
  93. KEY_KP1 = DIK_NUMPAD1,
  94. KEY_KP2 = DIK_NUMPAD2,
  95. KEY_KP3 = DIK_NUMPAD3,
  96. KEY_KP4 = DIK_NUMPAD4,
  97. KEY_KP5 = DIK_NUMPAD5,
  98. KEY_KP6 = DIK_NUMPAD6,
  99. KEY_KP7 = DIK_NUMPAD7,
  100. KEY_KP8 = DIK_NUMPAD8,
  101. KEY_KP9 = DIK_NUMPAD9,
  102. KEY_KPDEL = DIK_NUMPADPERIOD,
  103. KEY_KPSTAR = DIK_NUMPADSTAR,
  104. KEY_KPMINUS = DIK_NUMPADMINUS,
  105. KEY_KPPLUS = DIK_NUMPADPLUS,
  106. // regular keys ---------------------------------------------------------------
  107. KEY_ESC = DIK_ESCAPE,
  108. KEY_BACKSPACE = DIK_BACK,
  109. KEY_ENTER = DIK_RETURN,
  110. KEY_SPACE = DIK_SPACE,
  111. KEY_TAB = DIK_TAB,
  112. KEY_F1 = DIK_F1,
  113. KEY_F2 = DIK_F2,
  114. KEY_F3 = DIK_F3,
  115. KEY_F4 = DIK_F4,
  116. KEY_F5 = DIK_F5,
  117. KEY_F6 = DIK_F6,
  118. KEY_F7 = DIK_F7,
  119. KEY_F8 = DIK_F8,
  120. KEY_F9 = DIK_F9,
  121. KEY_F10 = DIK_F10,
  122. KEY_F11 = DIK_F11,
  123. KEY_F12 = DIK_F12,
  124. KEY_A = DIK_A,
  125. KEY_B = DIK_B,
  126. KEY_C = DIK_C,
  127. KEY_D = DIK_D,
  128. KEY_E = DIK_E,
  129. KEY_F = DIK_F,
  130. KEY_G = DIK_G,
  131. KEY_H = DIK_H,
  132. KEY_I = DIK_I,
  133. KEY_J = DIK_J,
  134. KEY_K = DIK_K,
  135. KEY_L = DIK_L,
  136. KEY_M = DIK_M,
  137. KEY_N = DIK_N,
  138. KEY_O = DIK_O,
  139. KEY_P = DIK_P,
  140. KEY_Q = DIK_Q,
  141. KEY_R = DIK_R,
  142. KEY_S = DIK_S,
  143. KEY_T = DIK_T,
  144. KEY_U = DIK_U,
  145. KEY_V = DIK_V,
  146. KEY_W = DIK_W,
  147. KEY_X = DIK_X,
  148. KEY_Y = DIK_Y,
  149. KEY_Z = DIK_Z,
  150. KEY_1 = DIK_1,
  151. KEY_2 = DIK_2,
  152. KEY_3 = DIK_3,
  153. KEY_4 = DIK_4,
  154. KEY_5 = DIK_5,
  155. KEY_6 = DIK_6,
  156. KEY_7 = DIK_7,
  157. KEY_8 = DIK_8,
  158. KEY_9 = DIK_9,
  159. KEY_0 = DIK_0,
  160. KEY_MINUS = DIK_MINUS,
  161. KEY_EQUAL = DIK_EQUALS,
  162. KEY_LBRACKET = DIK_LBRACKET,
  163. KEY_RBRACKET = DIK_RBRACKET,
  164. KEY_SEMICOLON = DIK_SEMICOLON,
  165. KEY_APOSTROPHE = DIK_APOSTROPHE,
  166. KEY_TICK = DIK_GRAVE,
  167. KEY_BACKSLASH = DIK_BACKSLASH,
  168. KEY_COMMA = DIK_COMMA,
  169. KEY_PERIOD = DIK_PERIOD,
  170. KEY_SLASH = DIK_SLASH,
  171. // special keys ---------------------------------------------------------------
  172. KEY_SYSREQ = DIK_SYSRQ,
  173. KEY_CAPS = DIK_CAPSLOCK,
  174. KEY_NUM = DIK_NUMLOCK,
  175. KEY_SCROLL = DIK_SCROLL,
  176. KEY_LCTRL = DIK_LCONTROL,
  177. KEY_LALT = DIK_LALT,
  178. KEY_LSHIFT = DIK_LSHIFT,
  179. KEY_RSHIFT = DIK_RSHIFT,
  180. KEY_UP = DIK_UPARROW,
  181. KEY_DOWN = DIK_DOWNARROW,
  182. KEY_LEFT = DIK_LEFTARROW,
  183. KEY_RIGHT = DIK_RIGHTARROW,
  184. KEY_RALT = DIK_RALT,
  185. KEY_RCTRL = DIK_RCONTROL,
  186. KEY_HOME = DIK_HOME,
  187. KEY_END = DIK_END,
  188. KEY_PGUP = DIK_PGUP,
  189. KEY_PGDN = DIK_PGDN,
  190. KEY_INS = DIK_INSERT,
  191. KEY_DEL = DIK_DELETE,
  192. KEY_KPENTER = DIK_NUMPADENTER,
  193. KEY_KPSLASH = DIK_NUMPADSLASH,
  194. KEY_102 = DIK_OEM_102,
  195. // Japanese keyboard keys -----------------------------------------------------
  196. KEY_KANA = DIK_KANA,
  197. KEY_CONVERT = DIK_CONVERT,
  198. KEY_NOCONVERT = DIK_NOCONVERT,
  199. KEY_YEN = DIK_YEN,
  200. KEY_CIRCUMFLEX = DIK_CIRCUMFLEX,
  201. KEY_KANJI = DIK_KANJI,
  202. // specials -------------------------------------------------------------------
  203. KEY_NONE = 0x00, ///< to report end of key stream
  204. KEY_LOST = 0xFF ///< to report lost keyboard focus
  205. }; // end KeyDefType
  206. // state for keyboard IO ------------------------------------------------------
  207. enum
  208. {
  209. KEY_STATE_NONE = 0x0000, // No modifier state
  210. KEY_STATE_UP = 0x0001, // Key is up (default state)
  211. KEY_STATE_DOWN = 0x0002, // Key is down
  212. KEY_STATE_LCONTROL = 0x0004, // Left control is pressed
  213. KEY_STATE_RCONTROL = 0x0008, // Right control is pressed
  214. KEY_STATE_LSHIFT = 0x0010, // left shift is pressed
  215. KEY_STATE_RSHIFT = 0x0020, // right shift is pressed
  216. KEY_STATE_LALT = 0x0040, // left alt is pressed
  217. KEY_STATE_RALT = 0x0080, // right alt is pressed
  218. KEY_STATE_AUTOREPEAT = 0x0100, // Key is down due to autorepeat (only seen in conjunction with KEY_STATE_DOWN)
  219. KEY_STATE_CAPSLOCK = 0x0200, // Caps Lock key is on.
  220. KEY_STATE_SHIFT2 = 0x0400, // Alternate shift key is pressed (I think this is for foreign keyboards..)
  221. // modifier combinations when left/right isn't a factor
  222. KEY_STATE_CONTROL = (KEY_STATE_LCONTROL | KEY_STATE_RCONTROL),
  223. KEY_STATE_SHIFT = (KEY_STATE_LSHIFT | KEY_STATE_RSHIFT | KEY_STATE_SHIFT2 ),
  224. KEY_STATE_ALT = (KEY_STATE_LALT | KEY_STATE_RALT)
  225. }; // end KeyStateType
  226. // INLINING ///////////////////////////////////////////////////////////////////
  227. // EXTERNALS //////////////////////////////////////////////////////////////////
  228. #endif // __KEYDEFS_H_