KEYBOARD.H 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. /*
  2. ** Command & Conquer Red Alert(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. ** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
  20. ***************************************************************************
  21. * *
  22. * Project Name : Westwood 32 bit Library *
  23. * *
  24. * File Name : KEYBOARD.H *
  25. * *
  26. * Programmer : Phil W. Gorrow *
  27. * *
  28. * Start Date : July 13, 1994 *
  29. * *
  30. * Last Update : July 13, 1994 [PWG] *
  31. * *
  32. *-------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #ifndef KEYBOARD_H
  36. #define KEYBOARD_H
  37. /*=========================================================================*/
  38. /* If we have not already loaded the standard library header, than we can */
  39. /* load it. */
  40. /*=========================================================================*/
  41. #ifndef WWSTD_H
  42. #include "wwstd.h"
  43. #endif
  44. extern "C" {
  45. void Install_Keyboard_Interrupt(void *addr, long size);
  46. void Install_Page_Fault_Handle(void) ;
  47. void *Get_RM_Keyboard_Address(void);
  48. long Get_RM_Keyboard_Size(void);
  49. void Remove_Keyboard_Interrupt(void);
  50. int Check_Key_Num(void);
  51. int Check_Key_Bits(void);
  52. int Check_Key(void);
  53. short Get_Key_Num(void);
  54. short Get_Key_Bits(void);
  55. int Get_Key(void);
  56. int KN_To_KA(int keynum);
  57. int Keyboard_Attributes_On(int key_flags);
  58. int Keyboard_Attributes_Off(int key_flags);
  59. void Clear_KeyBuffer(void);
  60. int Key_Down(int key);
  61. int Key_Satisfied(int key);
  62. void Stuff_Key_WORD(int code);
  63. void Stuff_Key_Num(int key);
  64. int Install_Mouse(int max_width, int max_height, int scr_width, int scr_height);
  65. void Reset_Mouse (void) ;
  66. void Remove_Mouse(void);
  67. int Get_Mouse_State(void);
  68. int Get_Mouse_X(void);
  69. int Get_Mouse_Y(void);
  70. int Get_Mouse_Disabled(void);
  71. void *Set_Mouse_Cursor(int xhotspot, int yhotspot, void *cursor);
  72. void Hide_Mouse(void);
  73. void Show_Mouse(void);
  74. void Conditional_Hide_Mouse(int sx_pixel, int sy_pixel, int dx_pixel, int dy_pixel);
  75. void Conditional_Show_Mouse(void);
  76. void __interrupt far Keyboard_Interrupt(void);
  77. extern int MouseQX;
  78. extern int MouseQY;
  79. }
  80. enum {
  81. REPEATON = 0x0001, /* 1:all makes into buffer, 0:only 1st make */
  82. TRACKEXT = 0x0002, /* 1:Home != keypad Home, 0:Home=keypad Home */
  83. FILTERONLY = 0x0004, /* 1:Normal BIOS operation with filter */
  84. CTRLALTTURBO = 0x0010, /* 1:Allow turbo up and down in application */
  85. NONUMLOCK = 0x0200, /* 1:do NOT remap keypad to numbers */
  86. TASKSWITCHABLE = 0x400, /* 1:allows task switching keys thru ALT-TAB, */
  87. /* ALT-ESC,CTRL-ESC */
  88. PASSBREAKS = 0x0800, // Pass all breaks to the keyboard buffer.
  89. /* The following flags, if turned on, should only be used for
  90. debugging purposes (remember to take out the calls when BETA */
  91. CTRLSON = 0x0008, /* 1:pass scroll lock sequence into BIOS */
  92. CTRLCON = 0x0020, /* 1:pass stop code to BIOS */
  93. SCROLLLOCKON = 0x0040, /* 1:pass scroll lock key into BIOS */
  94. PAUSEON = 0x0080, /* 1:pass the pause key and seq to BIOS */
  95. /* make sure FILTERONLY is set */
  96. BREAKON = 0x0100, /* 1:pass the ctrl break seq to BIOS */
  97. KEYMOUSE = 0x1000, /* 1:keypad translates into mouse moves */
  98. SIMLBUTTON = 0x2000, /* 1:have space and enter keys simulate Left */
  99. /* mouse button when KEYMOUSE is set */
  100. DEBUGINT = 0x4000 /* Use scroll lock to disable keyboard int */
  101. };
  102. /*
  103. ** These are the codes for the various key codes that are returned from the
  104. ** keyboard input routines Get_Key() and Input_ASCII().
  105. */
  106. typedef enum {
  107. KA_CTRL_AT = 0,
  108. KA_CTRL_A,
  109. KA_MORE = KA_CTRL_A,
  110. KA_CTRL_B,
  111. KA_SETBKGDCOL = KA_CTRL_B,
  112. KA_CTRL_C,
  113. KA_CTRL_D,
  114. KA_CTRL_E,
  115. KA_CTRL_F,
  116. KA_SETFORECOL = KA_CTRL_F,
  117. KA_CTRL_G,
  118. KA_CTRL_H,
  119. KA_BACKSPACE = KA_CTRL_H,
  120. KA_CTRL_I,
  121. KA_TAB = KA_CTRL_I,
  122. KA_CTRL_J,
  123. KA_CTRL_K,
  124. KA_CTRL_L,
  125. KA_FORMFEED = KA_CTRL_L,
  126. KA_CTRL_M,
  127. KA_RETURN = KA_CTRL_M,
  128. KA_CTRL_N,
  129. KA_CTRL_O,
  130. KA_CTRL_P,
  131. KA_CTRL_Q,
  132. KA_CTRL_R,
  133. KA_CTRL_S,
  134. KA_SPCTAB = KA_CTRL_S,
  135. KA_CTRL_T,
  136. KA_CTRL_U,
  137. KA_CTRL_V,
  138. KA_CTRL_W,
  139. KA_CTRL_X,
  140. KA_SETX = KA_CTRL_X,
  141. KA_CTRL_Y,
  142. KA_SETY = KA_CTRL_Y,
  143. KA_CTRL_Z,
  144. KA_CTRL_LBRACKET,
  145. KA_ESC = KA_CTRL_LBRACKET,
  146. KA_EXTEND = KA_ESC,
  147. KA_CTRL_BACKSLASH,
  148. KA_CTRL_RBRACKET,
  149. KA_LITERAL = KA_CTRL_RBRACKET,
  150. KA_CTRL_CARROT,
  151. KA_CTRL_UNDERLINE,
  152. KA_SPACE, /* */
  153. KA_EXCLAMATION, /* ! */
  154. KA_DQUOTE, /* " */
  155. KA_POUND, /* # */
  156. KA_DOLLAR, /* $ */
  157. KA_PERCENT, /* % */
  158. KA_AMPER, /* & */
  159. KA_SQUOTE, /* ' */
  160. KA_LPAREN, /* ( */
  161. KA_RPAREN, /* ) */
  162. KA_ASTERISK, /* * */
  163. KA_PLUS, /* + */
  164. KA_COMMA, /* , */
  165. KA_MINUS, /* - */
  166. KA_PERIOD, /* . */
  167. KA_SLASH, /* / */
  168. KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
  169. KA_COLON, /* : */
  170. KA_SEMICOLON, /* ; */
  171. KA_LESS_THAN, /* < */
  172. KA_EQUAL, /* = */
  173. KA_GREATER_THAN, /* > */
  174. KA_QUESTION, /* ? */
  175. KA_AT, /* @ */
  176. KA_A, /* A */
  177. KA_B, /* B */
  178. KA_C, /* C */
  179. KA_D, /* D */
  180. KA_E, /* E */
  181. KA_F, /* F */
  182. KA_G, /* G */
  183. KA_H, /* H */
  184. KA_I, /* I */
  185. KA_J, /* J */
  186. KA_K, /* K */
  187. KA_L, /* L */
  188. KA_M, /* M */
  189. KA_N, /* N */
  190. KA_O, /* O */
  191. KA_P, /* P */
  192. KA_Q, /* Q */
  193. KA_R, /* R */
  194. KA_S, /* S */
  195. KA_T, /* T */
  196. KA_U, /* U */
  197. KA_V, /* V */
  198. KA_W, /* W */
  199. KA_X, /* X */
  200. KA_Y, /* Y */
  201. KA_Z, /* Z */
  202. KA_LBRACKET, /* [ */
  203. KA_BACKSLASH, /* \ */
  204. KA_RBRACKET, /* ] */
  205. KA_CARROT, /* ^ */
  206. KA_UNDERLINE, /* _ */
  207. KA_GRAVE, /* ` */
  208. KA_a, /* a */
  209. KA_b, /* b */
  210. KA_c, /* c */
  211. KA_d, /* d */
  212. KA_e, /* e */
  213. KA_f, /* f */
  214. KA_g, /* g */
  215. KA_h, /* h */
  216. KA_i, /* i */
  217. KA_j, /* j */
  218. KA_k, /* k */
  219. KA_l, /* l */
  220. KA_m, /* m */
  221. KA_n, /* n */
  222. KA_o, /* o */
  223. KA_p, /* p */
  224. KA_q, /* q */
  225. KA_r, /* r */
  226. KA_s, /* s */
  227. KA_t, /* t */
  228. KA_u, /* u */
  229. KA_v, /* v */
  230. KA_w, /* w */
  231. KA_x, /* x */
  232. KA_y, /* y */
  233. KA_z, /* z */
  234. KA_LBRACE, /* { */
  235. KA_BAR, /* | */
  236. KA_RBRACE, /* ] */
  237. KA_TILDA, /* ~ */
  238. KA_DEL, /* not used */
  239. KA_ALT_F10 = 143,
  240. KA_ALT_F9, KA_ALT_F8, KA_ALT_F7, KA_ALT_F6, KA_ALT_F5,
  241. KA_ALT_F4, KA_ALT_F3, KA_ALT_F2, KA_ALT_F1,
  242. KA_CTRL_F10, KA_CTRL_F9, KA_CTRL_F8, KA_CTRL_F7, KA_CTRL_F6,
  243. KA_CTRL_F5, KA_CTRL_F4, KA_CTRL_F3, KA_CTRL_F2, KA_CTRL_F1,
  244. KA_SHIFT_F10, KA_SHIFT_F9, KA_SHIFT_F8, KA_SHIFT_F7, KA_SHIFT_F6,
  245. KA_SHIFT_F5, KA_SHIFT_F4, KA_SHIFT_F3, KA_SHIFT_F2, KA_SHIFT_F1,
  246. KA_DELETE, /* <DELETE> */
  247. KA_INSERT, /* <INSERT> */
  248. KA_PGDN, /* <PAGE DOWN> */
  249. KA_DOWNRIGHT = KA_PGDN,
  250. KA_DOWN, /* <DOWN ARROW> */
  251. KA_END, /* <END> */
  252. KA_DOWNLEFT = KA_END,
  253. KA_RESERVED1,
  254. KA_RIGHT, /* <RIGHT ARROW> */
  255. KA_KEYPAD5, /* NUMERIC KEY PAD <5> */
  256. KA_LEFT, /* <LEFT ARROW> */
  257. KA_RESERVED2,
  258. KA_PGUP, /* <PAGE UP> */
  259. KA_UPRIGHT = KA_PGUP,
  260. KA_UP, /* <UP ARROW> */
  261. KA_HOME, /* <HOME> */
  262. KA_UPLEFT = KA_HOME,
  263. KA_RESERVED3,
  264. KA_RESERVED4,
  265. KA_F10, KA_F9, KA_F8, KA_F7, KA_F6, KA_F5, KA_F4, KA_F3, KA_F2, KA_F1,
  266. KA_LMOUSE,
  267. KA_RMOUSE,
  268. KA_JBUTTON1,
  269. KA_JBUTTON2,
  270. KA_J_UP,
  271. KA_J_RIGHT,
  272. KA_J_DOWN,
  273. KA_J_LEFT,
  274. KA_SHIFT_BIT = 0x0100,
  275. KA_CTRL_BIT = 0x0200,
  276. KA_ALT_BIT = 0x0400,
  277. KA_RLSE_BIT = 0x0800,
  278. KA_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
  279. KA_RCOMM_BIT = 0x2000 /* Amiga Right Comm key */
  280. } KeyASCIIType;
  281. /*
  282. ** These are the keyboard codes that are returned from the input routines
  283. ** Get_Key_Num and Input_Num.
  284. */
  285. typedef enum {
  286. KN_NONE = 0,
  287. KN_GRAVE = 1, /* ` */
  288. KN_1, KN_2, KN_3, KN_4, KN_5, KN_6, KN_7, KN_8, KN_9, KN_0,
  289. KN_MINUS, /* - */
  290. KN_EQUAL, /* = */
  291. KN_RESERVED1,
  292. KN_BACKSPACE, /* <BACKSPACE> */
  293. KN_TAB, /* <TAB> */
  294. KN_Q, KN_W, KN_E, KN_R, KN_T, KN_Y, KN_U, KN_I, KN_O, KN_P,
  295. KN_LBRACKET, /* [ */
  296. KN_RBRACKET, /* ] */
  297. KN_BACKSLASH, /* \ */
  298. KN_CAPSLOCK, /* <CAPS LOCK> */
  299. KN_A, KN_S, KN_D, KN_F, KN_G, KN_H, KN_J, KN_K, KN_L,
  300. KN_SEMICOLON, /* ; */
  301. KN_SQUOTE, /* ' */
  302. KN_BACKSLASH2,
  303. KN_RETURN, /* <RETURN> or <ENTER> */
  304. KN_LSHIFT, /* <LEFT SHIFT> */
  305. KN_MOUSE_MOVE, // Indicate a mouse move (for playback of
  306. KN_Z, KN_X, KN_C, KN_V, KN_B, KN_N, KN_M,
  307. KN_COMMA, /* , */
  308. KN_PERIOD, /* . */
  309. KN_SLASH, /* / */
  310. KN_RESERVED3,
  311. KN_RSHIFT, /* <RIGHT SHIFT> */
  312. KN_LCTRL, /* <LEFT CTRL> */
  313. KN_LCOMM, /* for AMIGA */
  314. KN_LALT, /* <LEFT ALT> */
  315. KN_SPACE, /* <SPACE BAR> */
  316. KN_RALT, /* <RIGHT ALT> */
  317. KN_RCOMM, /* for AMIGA */
  318. KN_RCTRL, /* <RIGHT CTRL> */
  319. /* the following are forced into key buffer */
  320. KN_LMOUSE,
  321. KN_RMOUSE,
  322. KN_JBUTTON1,
  323. KN_JBUTTON2,
  324. KN_J_UP,
  325. KN_J_RIGHT,
  326. KN_J_DOWN,
  327. KN_J_LEFT,
  328. KN_SPECIAL9,
  329. KN_SPECIAL10,
  330. KN_E_INSERT, /* extended <INSERT> */
  331. KN_E_DELETE, /* extended <DELETE> */
  332. KN_RESERVED4,
  333. KN_RESERVED5,
  334. KN_E_LEFT, /* extended <LEFT ARROW> */
  335. KN_E_HOME, /* extended <HOME> */
  336. KN_E_END, /* extended <END> */
  337. KN_RESERVED6,
  338. KN_E_UP, /* extended <UP ARROW> */
  339. KN_E_DOWN, /* extended <DOWN ARROW> */
  340. KN_E_PGUP, /* extended <PAGE UP> */
  341. KN_E_PGDN, /* extended <PAGE DOWN> */
  342. KN_K_LPAREN, /* for AMIGA */
  343. KN_K_RPAREN, /* for AMIGA */
  344. KN_E_RIGHT, /* extended <RIGHT ARROW> */
  345. KN_NUMLOCK, /* <NUM LOCK> */
  346. KN_HOME, /* num key pad 7 */
  347. KN_UPLEFT = KN_HOME,
  348. KN_LEFT, /* num key pad 4 */
  349. KN_END, /* num key pad 1 */
  350. KN_DOWNLEFT = KN_END,
  351. KN_RESERVED7,
  352. KN_KEYPAD_SLASH, /* num key pad / */
  353. KN_UP, /* num key pad 8 */
  354. KN_CENTER, /* num key pad 5 */
  355. KN_DOWN, /* num key pad 2 */
  356. KN_INSERT, /* num key pad 0 */
  357. KN_KEYPAD_ASTERISK, /* num key pad * */
  358. KN_PGUP, /* num key pad 9 */
  359. KN_UPRIGHT = KN_PGUP,
  360. KN_RIGHT, /* num key pad 6 */
  361. KN_PGDN, /* num key pad 3 */
  362. KN_DOWNRIGHT = KN_PGDN,
  363. KN_DELETE, /* num key pad . */
  364. KN_KEYPAD_MINUS, /* num key pad - */
  365. KN_KEYPAD_PLUS, /* num key pad + */
  366. KN_RESERVED8,
  367. KN_KEYPAD_RETURN, /* num key pad <ENTER> */
  368. KN_RESERVED9,
  369. KN_ESC,
  370. KN_HELP, /* for AMIGA */
  371. KN_F1, KN_F2, KN_F3, KN_F4, KN_F5, KN_F6, KN_F7, KN_F8, KN_F9, KN_F10,
  372. KN_F11,
  373. KN_F12,
  374. KN_PRNTSCRN, /* <PRINT SCRN> */
  375. KN_SCROLLLOCK, /* <SCROLL LOCK> */
  376. KN_PAUSE, /* <PAUSE> */
  377. KN_SHIFT_BIT = 0x0100,
  378. KN_CTRL_BIT = 0x0200,
  379. KN_ALT_BIT = 0x0400,
  380. KN_RLSE_BIT = 0x0800,
  381. KN_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
  382. KN_RCOMM_BIT = 0x2000, /* Amiga Right Comm key */
  383. KN_BUTTON = 0x8000 /* Amiga Right Comm key */
  384. } KeyNumType;
  385. #endif