| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Command & Conquer *
- * *
- * $Archive:: /Commando/Code/wwlib/keyboard.h $*
- * *
- * $Author:: Jani_p $*
- * *
- * $Modtime:: 5/04/01 9:03p $*
- * *
- * $Revision:: 2 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef KEY_H
- #define KEY_H
- #include "_xmouse.h"
- #include "win.h"
- /*
- ** The "bool" integral type was defined by the C++ comittee in
- ** November of '94. Until the compiler supports this, use the following
- ** definition.
- */
- #include "bool.h"
- typedef enum {
- WWKEY_SHIFT_BIT = 0x100,
- WWKEY_CTRL_BIT = 0x200,
- WWKEY_ALT_BIT = 0x400,
- WWKEY_RLS_BIT = 0x800,
- WWKEY_VK_BIT = 0x1000,
- WWKEY_DBL_BIT = 0x2000,
- WWKEY_BTN_BIT = 0x8000
- } WWKey_Type;
- class WWKeyboardClass
- {
- public:
- /* Define the base constructor and destructors for the class */
- WWKeyboardClass();
- /* Define the functions which work with the Keyboard Class */
- unsigned short Check(void) const;
- unsigned short Get(void);
- bool Put(unsigned short key);
- void Clear(void);
- char To_ASCII(unsigned short num);
- bool Down(unsigned short key);
- /* Define the main hook for the message processing loop. */
- bool Message_Handler(HWND hwnd, UINT message, UINT wParam, LONG lParam);
- /* Define the public access variables which are used with the */
- /* Keyboard Class. */
- int MouseQX;
- int MouseQY;
- private:
- /*
- ** This is a keyboard state array that is used to aid in translating
- ** KN_ keys into KA_ keys.
- */
- unsigned char KeyState[256];
- /*
- ** This is the circular keyboard holding buffer. It holds the VK key and
- ** the current shift state at the time the key was added to the queue.
- */
- unsigned short Buffer[256]; // buffer which holds actual keypresses
- unsigned short Buff_Get(void);
- unsigned short Fetch_Element(void);
- unsigned short Peek_Element(void) const;
- bool Put_Element(unsigned short val);
- bool Is_Buffer_Full(void) const;
- bool Is_Buffer_Empty(void) const;
- static bool Is_Mouse_Key(unsigned short key);
- void Fill_Buffer_From_System(void);
- bool Put_Key_Message(unsigned short vk_key, bool release = false);
- bool Put_Mouse_Message(unsigned short vk_key, int x, int y, bool release = false);
- int Available_Buffer_Room(void) const;
- /*
- ** These are the tracking pointers to maintain the
- ** circular keyboard list.
- */
- int Head;
- int Tail;
- };
- #define VK_NONE 0x00
- #define VK_LBUTTON 0x01
- #define VK_RBUTTON 0x02
- #define VK_CANCEL 0x03
- #define VK_MBUTTON 0x04
- #define VK_NONE_05 0x05
- #define VK_NONE_06 0x06
- #define VK_NONE_07 0x07
- #define VK_BACK 0x08
- #define VK_TAB 0x09
- #define VK_NONE_0A 0x0A
- #define VK_NONE_0B 0x0B
- #define VK_CLEAR 0x0C
- #define VK_RETURN 0x0D
- #define VK_NONE_0E 0x0E
- #define VK_NONE_0F 0x0F
- #define VK_SHIFT 0x10
- #define VK_CONTROL 0x11
- #define VK_MENU 0x12
- #define VK_PAUSE 0x13
- #define VK_CAPITAL 0x14
- #define VK_NONE_15 0x15
- #define VK_NONE_16 0x16
- #define VK_NONE_17 0x17
- #define VK_NONE_18 0x18
- #define VK_NONE_19 0x19
- #define VK_NONE_1A 0x1A
- #define VK_ESCAPE 0x1B
- #define VK_NONE_1C 0x1C
- #define VK_NONE_1D 0x1D
- #define VK_NONE_1E 0x1E
- #define VK_NONE_1F 0x1F
- #define VK_SPACE 0x20
- #define VK_PRIOR 0x21
- #define VK_NEXT 0x22
- #define VK_END 0x23
- #define VK_HOME 0x24
- #define VK_LEFT 0x25
- #define VK_UP 0x26
- #define VK_RIGHT 0x27
- #define VK_DOWN 0x28
- #define VK_SELECT 0x29
- #define VK_PRINT 0x2A
- #define VK_EXECUTE 0x2B
- #define VK_SNAPSHOT 0x2C
- #define VK_INSERT 0x2D
- #define VK_DELETE 0x2E
- #define VK_HELP 0x2F
- #define VK_0 0x30
- #define VK_1 0x31
- #define VK_2 0x32
- #define VK_3 0x33
- #define VK_4 0x34
- #define VK_5 0x35
- #define VK_6 0x36
- #define VK_7 0x37
- #define VK_8 0x38
- #define VK_9 0x39
- #define VK_NONE_3B 0x3B
- #define VK_NONE_3C 0x3C
- #define VK_NONE_3D 0x3D
- #define VK_NONE_3E 0x3E
- #define VK_NONE_3F 0x3F
- #define VK_NONE_40 0x40
- #define VK_A 0x41
- #define VK_B 0x42
- #define VK_C 0x43
- #define VK_D 0x44
- #define VK_E 0x45
- #define VK_F 0x46
- #define VK_G 0x47
- #define VK_H 0x48
- #define VK_I 0x49
- #define VK_J 0x4A
- #define VK_K 0x4B
- #define VK_L 0x4C
- #define VK_M 0x4D
- #define VK_N 0x4E
- #define VK_O 0x4F
- #define VK_P 0x50
- #define VK_Q 0x51
- #define VK_R 0x52
- #define VK_S 0x53
- #define VK_T 0x54
- #define VK_U 0x55
- #define VK_V 0x56
- #define VK_W 0x57
- #define VK_X 0x58
- #define VK_Y 0x59
- #define VK_Z 0x5A
- #define VK_NONE_5B 0x5B
- #define VK_NONE_5C 0x5C
- #define VK_NONE_5D 0x5D
- #define VK_NONE_5E 0x5E
- #define VK_NONE_5F 0x5F
- #define VK_NUMPAD0 0x60
- #define VK_NUMPAD1 0x61
- #define VK_NUMPAD2 0x62
- #define VK_NUMPAD3 0x63
- #define VK_NUMPAD4 0x64
- #define VK_NUMPAD5 0x65
- #define VK_NUMPAD6 0x66
- #define VK_NUMPAD7 0x67
- #define VK_NUMPAD8 0x68
- #define VK_NUMPAD9 0x69
- #define VK_MULTIPLY 0x6A
- #define VK_ADD 0x6B
- #define VK_SEPARATOR 0x6C
- #define VK_SUBTRACT 0x6D
- #define VK_DECIMAL 0x6E
- #define VK_DIVIDE 0x6F
- #define VK_F1 0x70
- #define VK_F2 0x71
- #define VK_F3 0x72
- #define VK_F4 0x73
- #define VK_F5 0x74
- #define VK_F6 0x75
- #define VK_F7 0x76
- #define VK_F8 0x77
- #define VK_F9 0x78
- #define VK_F10 0x79
- #define VK_F11 0x7A
- #define VK_F12 0x7B
- #define VK_F13 0x7C
- #define VK_F14 0x7D
- #define VK_F15 0x7E
- #define VK_F16 0x7F
- #define VK_F17 0x80
- #define VK_F18 0x81
- #define VK_F19 0x82
- #define VK_F20 0x83
- #define VK_F21 0x84
- #define VK_F22 0x85
- #define VK_F23 0x86
- #define VK_F24 0x87
- #define VK_NONE_88 0x88
- #define VK_NONE_89 0x89
- #define VK_NONE_8A 0x8A
- #define VK_NONE_8B 0x8B
- #define VK_NONE_8C 0x8C
- #define VK_NONE_8D 0x8D
- #define VK_NONE_8E 0x8E
- #define VK_NONE_8F 0x8F
- #define VK_NUMLOCK 0x90
- #define VK_SCROLL 0x91
- #define VK_NONE_92 0x92
- #define VK_NONE_93 0x93
- #define VK_NONE_94 0x94
- #define VK_NONE_95 0x95
- #define VK_NONE_96 0x96
- #define VK_NONE_97 0x97
- #define VK_NONE_98 0x98
- #define VK_NONE_99 0x99
- #define VK_NONE_9A 0x9A
- #define VK_NONE_9B 0x9B
- #define VK_NONE_9C 0x9C
- #define VK_NONE_9D 0x9D
- #define VK_NONE_9E 0x9E
- #define VK_NONE_9F 0x9F
- #define VK_NONE_A0 0xA0
- #define VK_NONE_A1 0xA1
- #define VK_NONE_A2 0xA2
- #define VK_NONE_A3 0xA3
- #define VK_NONE_A4 0xA4
- #define VK_NONE_A5 0xA5
- #define VK_NONE_A6 0xA6
- #define VK_NONE_A7 0xA7
- #define VK_NONE_A8 0xA8
- #define VK_NONE_A9 0xA9
- #define VK_NONE_AA 0xAA
- #define VK_NONE_AB 0xAB
- #define VK_NONE_AC 0xAC
- #define VK_NONE_AD 0xAD
- #define VK_NONE_AE 0xAE
- #define VK_NONE_AF 0xAF
- #define VK_NONE_B0 0xB0
- #define VK_NONE_B1 0xB1
- #define VK_NONE_B2 0xB2
- #define VK_NONE_B3 0xB3
- #define VK_NONE_B4 0xB4
- #define VK_NONE_B5 0xB5
- #define VK_NONE_B6 0xB6
- #define VK_NONE_B7 0xB7
- #define VK_NONE_B8 0xB8
- #define VK_NONE_B9 0xB9
- #define VK_NONE_BA 0xBA // ;
- #define VK_NONE_BB 0xBB // =
- #define VK_NONE_BC 0xBC // ,
- #define VK_NONE_BD 0xBD // -
- #define VK_NONE_BE 0xBE // .
- #define VK_NONE_BF 0xBF // /
- #define VK_NONE_C0 0xC0 // `
- #define VK_NONE_C1 0xC1
- #define VK_NONE_C2 0xC2
- #define VK_NONE_C3 0xC3
- #define VK_NONE_C4 0xC4
- #define VK_NONE_C5 0xC5
- #define VK_NONE_C6 0xC6
- #define VK_NONE_C7 0xC7
- #define VK_NONE_C8 0xC8
- #define VK_NONE_C9 0xC9
- #define VK_NONE_CA 0xCA
- #define VK_NONE_CB 0xCB
- #define VK_NONE_CC 0xCC
- #define VK_NONE_CD 0xCD
- #define VK_NONE_CE 0xCE
- #define VK_NONE_CF 0xCF
- #define VK_NONE_D0 0xD0
- #define VK_NONE_D1 0xD1
- #define VK_NONE_D2 0xD2
- #define VK_NONE_D3 0xD3
- #define VK_NONE_D4 0xD4
- #define VK_NONE_D5 0xD5
- #define VK_NONE_D6 0xD6
- #define VK_NONE_D7 0xD7
- #define VK_NONE_D8 0xD8
- #define VK_NONE_D9 0xD9
- #define VK_NONE_DA 0xDA
- #define VK_NONE_DB 0xDB // [
- #define VK_NONE_DC 0xDC // '\'
- #define VK_NONE_DD 0xDD // ]
- #define VK_NONE_DE 0xDE // '
- #define VK_NONE_DF 0xDF
- #define VK_NONE_E0 0xE0
- #define VK_NONE_E1 0xE1
- #define VK_NONE_E2 0xE2
- #define VK_NONE_E3 0xE3
- #define VK_NONE_E4 0xE4
- #define VK_NONE_E5 0xE5
- #define VK_NONE_E6 0xE6
- #define VK_NONE_E7 0xE7
- #define VK_NONE_E8 0xE8
- #define VK_NONE_E9 0xE9
- #define VK_NONE_EA 0xEA
- #define VK_NONE_EB 0xEB
- #define VK_NONE_EC 0xEC
- #define VK_NONE_ED 0xED
- #define VK_NONE_EE 0xEE
- #define VK_NONE_EF 0xEF
- #define VK_NONE_F0 0xF0
- #define VK_NONE_F1 0xF1
- #define VK_NONE_F2 0xF2
- #define VK_NONE_F3 0xF3
- #define VK_NONE_F4 0xF4
- #define VK_NONE_F5 0xF5
- #define VK_NONE_F6 0xF6
- #define VK_NONE_F7 0xF7
- #define VK_NONE_F8 0xF8
- #define VK_NONE_F9 0xF9
- #define VK_NONE_FA 0xFA
- #define VK_NONE_FB 0xFB
- #define VK_NONE_FC 0xFC
- #define VK_NONE_FD 0xFD
- #define VK_NONE_FE 0xFE
- #define VK_NONE_FF 0xFF
- #define VK_UPLEFT VK_HOME
- #define VK_UPRIGHT VK_PRIOR
- #define VK_DOWNLEFT VK_END
- #define VK_DOWNRIGHT VK_NEXT
- #define VK_ALT VK_MENU
- typedef enum KeyASCIIType {
- //
- // Define all the KA types as variations of the VK types. This is
- // so the KA functions will work properly under windows 95.
- //
- KA_NONE = 0,
- KA_MORE = 1,
- KA_SETBKGDCOL = 2,
- KA_SETFORECOL = 6,
- KA_FORMFEED = 12,
- KA_SPCTAB = 20,
- KA_SETX = 25,
- KA_SETY = 26,
- KA_SPACE = 32, /* */
- KA_EXCLAMATION, /* ! */
- KA_DQUOTE, /* " */
- KA_POUND, /* # */
- KA_DOLLAR, /* $ */
- KA_PERCENT, /* % */
- KA_AMPER, /* & */
- KA_SQUOTE, /* ' */
- KA_LPAREN, /* ( */
- KA_RPAREN, /* ) */
- KA_ASTERISK, /* * */
- KA_PLUS, /* + */
- KA_COMMA, /* , */
- KA_MINUS, /* - */
- KA_PERIOD, /* . */
- KA_SLASH, /* / */
- KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
- KA_COLON, /* : */
- KA_SEMICOLON, /* ; */
- KA_LESS_THAN, /* < */
- KA_EQUAL, /* = */
- KA_GREATER_THAN, /* > */
- KA_QUESTION, /* ? */
- KA_AT, /* @ */
- KA_A, /* A */
- KA_B, /* B */
- KA_C, /* C */
- KA_D, /* D */
- KA_E, /* E */
- KA_F, /* F */
- KA_G, /* G */
- KA_H, /* H */
- KA_I, /* I */
- KA_J, /* J */
- KA_K, /* K */
- KA_L, /* L */
- KA_M, /* M */
- KA_N, /* N */
- KA_O, /* O */
- KA_P, /* P */
- KA_Q, /* Q */
- KA_R, /* R */
- KA_S, /* S */
- KA_T, /* T */
- KA_U, /* U */
- KA_V, /* V */
- KA_W, /* W */
- KA_X, /* X */
- KA_Y, /* Y */
- KA_Z, /* Z */
- KA_LBRACKET, /* [ */
- KA_BACKSLASH, /* \ */
- KA_RBRACKET, /* ] */
- KA_CARROT, /* ^ */
- KA_UNDERLINE, /* _ */
- KA_GRAVE, /* ` */
- KA_a, /* a */
- KA_b, /* b */
- KA_c, /* c */
- KA_d, /* d */
- KA_e, /* e */
- KA_f, /* f */
- KA_g, /* g */
- KA_h, /* h */
- KA_i, /* i */
- KA_j, /* j */
- KA_k, /* k */
- KA_l, /* l */
- KA_m, /* m */
- KA_n, /* n */
- KA_o, /* o */
- KA_p, /* p */
- KA_q, /* q */
- KA_r, /* r */
- KA_s, /* s */
- KA_t, /* t */
- KA_u, /* u */
- KA_v, /* v */
- KA_w, /* w */
- KA_x, /* x */
- KA_y, /* y */
- KA_z, /* z */
- KA_LBRACE, /* { */
- KA_BAR, /* | */
- KA_RBRACE, /* ] */
- KA_TILDA, /* ~ */
- KA_ESC = VK_ESCAPE,
- KA_EXTEND = VK_ESCAPE,
- KA_RETURN = VK_RETURN,
- KA_BACKSPACE = VK_BACK,
- KA_TAB = VK_TAB ,
- KA_DELETE = VK_DELETE, /* <DELETE> */
- KA_INSERT = VK_INSERT, /* <INSERT> */
- KA_PGDN = VK_NEXT, /* <PAGE DOWN> */
- KA_DOWNRIGHT = VK_NEXT,
- KA_DOWN = VK_DOWN, /* <DOWN ARROW> */
- KA_END = VK_END, /* <END> */
- KA_DOWNLEFT = VK_END,
- KA_RIGHT = VK_RIGHT, /* <RIGHT ARROW> */
- KA_KEYPAD5 = VK_SELECT, /* NUMERIC KEY PAD <5> */
- KA_LEFT = VK_LEFT, /* <LEFT ARROW> */
- KA_PGUP = VK_PRIOR, /* <PAGE UP> */
- KA_UPRIGHT = VK_PRIOR,
- KA_UP = VK_UP, /* <UP ARROW> */
- KA_HOME = VK_HOME, /* <HOME> */
- KA_UPLEFT = VK_HOME,
- KA_F12 = VK_F12,
- KA_F11 = VK_F11,
- KA_F10 = VK_F10,
- KA_F9 = VK_F9,
- KA_F8 = VK_F8,
- KA_F7 = VK_F7,
- KA_F6 = VK_F6,
- KA_F5 = VK_F5,
- KA_F4 = VK_F4,
- KA_F3 = VK_F3,
- KA_F2 = VK_F2,
- KA_F1 = VK_F1,
- KA_LMOUSE = VK_LBUTTON,
- KA_RMOUSE = VK_RBUTTON,
- KA_SHIFT_BIT = WWKEY_SHIFT_BIT,
- KA_CTRL_BIT = WWKEY_CTRL_BIT,
- KA_ALT_BIT = WWKEY_ALT_BIT,
- KA_RLSE_BIT = WWKEY_RLS_BIT
- } KeyASCIIType;
- typedef enum KeyNumType {
- KN_NONE = 0,
- KN_0 = VK_0,
- KN_1 = VK_1,
- KN_2 = VK_2,
- KN_3 = VK_3,
- KN_4 = VK_4,
- KN_5 = VK_5,
- KN_6 = VK_6,
- KN_7 = VK_7,
- KN_8 = VK_8,
- KN_9 = VK_9,
- KN_A = VK_A,
- KN_B = VK_B,
- KN_BACKSLASH = VK_NONE_DC,
- KN_BACKSPACE = VK_BACK,
- KN_C = VK_C,
- KN_CAPSLOCK = VK_CAPITAL,
- KN_CENTER = VK_CLEAR,
- KN_COMMA = VK_NONE_BC,
- KN_D = VK_D,
- KN_DELETE = VK_DELETE,
- KN_DOWN = VK_DOWN,
- KN_DOWNLEFT = VK_END,
- KN_DOWNRIGHT = VK_NEXT,
- KN_E = VK_E,
- KN_END = VK_END,
- KN_EQUAL = VK_NONE_BB,
- KN_ESC = VK_ESCAPE,
- KN_E_DELETE = VK_DELETE,
- KN_E_DOWN = VK_NUMPAD2,
- KN_E_END = VK_NUMPAD1,
- KN_E_HOME = VK_NUMPAD7,
- KN_E_INSERT = VK_INSERT,
- KN_E_LEFT = VK_NUMPAD4,
- KN_E_PGDN = VK_NUMPAD3,
- KN_E_PGUP = VK_NUMPAD9,
- KN_E_RIGHT = VK_NUMPAD6,
- KN_E_UP = VK_NUMPAD8,
- KN_F = VK_F,
- KN_F1 = VK_F1,
- KN_F10 = VK_F10,
- KN_F11 = VK_F11,
- KN_F12 = VK_F12,
- KN_F2 = VK_F2,
- KN_F3 = VK_F3,
- KN_F4 = VK_F4,
- KN_F5 = VK_F5,
- KN_F6 = VK_F6,
- KN_F7 = VK_F7,
- KN_F8 = VK_F8,
- KN_F9 = VK_F9,
- KN_G = VK_G,
- KN_GRAVE = VK_NONE_C0,
- KN_H = VK_H,
- KN_HOME = VK_HOME,
- KN_I = VK_I,
- KN_INSERT = VK_INSERT,
- KN_J = VK_J,
- KN_K = VK_K,
- KN_KEYPAD_ASTERISK= VK_MULTIPLY,
- KN_KEYPAD_MINUS = VK_SUBTRACT,
- KN_KEYPAD_PLUS = VK_ADD,
- KN_KEYPAD_RETURN = VK_RETURN,
- KN_KEYPAD_SLASH = VK_DIVIDE,
- KN_L = VK_L,
- KN_LALT = VK_MENU,
- KN_LBRACKET = VK_NONE_DB,
- KN_LCTRL = VK_CONTROL,
- KN_LEFT = VK_LEFT,
- KN_LMOUSE = VK_LBUTTON,
- KN_LSHIFT = VK_SHIFT,
- KN_M = VK_M,
- KN_MINUS = VK_NONE_BD,
- KN_N = VK_N,
- KN_NUMLOCK = VK_NUMLOCK,
- KN_O = VK_O,
- KN_P = VK_P,
- KN_PAUSE = VK_PAUSE,
- KN_PERIOD = VK_NONE_BE,
- KN_PGDN = VK_NEXT,
- KN_PGUP = VK_PRIOR,
- KN_PRNTSCRN = VK_PRINT,
- KN_Q = VK_Q,
- KN_R = VK_R,
- KN_RALT = VK_MENU,
- KN_RBRACKET = VK_NONE_DD,
- KN_RCTRL = VK_CONTROL,
- KN_RETURN = VK_RETURN,
- KN_RIGHT = VK_RIGHT,
- KN_RMOUSE = VK_RBUTTON,
- KN_RSHIFT = VK_SHIFT,
- KN_S = VK_S,
- KN_SCROLLLOCK = VK_SCROLL,
- KN_SEMICOLON = VK_NONE_BA,
- KN_SLASH = VK_NONE_BF,
- KN_SPACE = VK_SPACE,
- KN_SQUOTE = VK_NONE_DE,
- KN_T = VK_T,
- KN_TAB = VK_TAB,
- KN_U = VK_U,
- KN_UP = VK_UP,
- KN_UPLEFT = VK_HOME,
- KN_UPRIGHT = VK_PRIOR,
- KN_V = VK_V,
- KN_W = VK_W,
- KN_X = VK_X,
- KN_Y = VK_Y,
- KN_Z = VK_Z,
- KN_SHIFT_BIT = WWKEY_SHIFT_BIT,
- KN_CTRL_BIT = WWKEY_CTRL_BIT,
- KN_ALT_BIT = WWKEY_ALT_BIT,
- KN_RLSE_BIT = WWKEY_RLS_BIT,
- KN_BUTTON = WWKEY_BTN_BIT
- } KeyNumType;
- /*
- ** Interface class to the keyboard. This insulates the game from library vagaries. Most
- ** notable being the return values are declared as "int" in the library whereas C&C
- ** expects it to be of KeyNumType.
- */
- //lint -esym(1725,KeyboardClass::MouseQX,KeyboardClass::MouseQY)
- struct KeyboardClass : public WWKeyboardClass
- {
- /*
- ** This flag is used to indicate whether the WW library has taken over
- ** the keyboard or not. If not, then the normal console input
- ** takes precedence.
- */
- unsigned IsLibrary;
- KeyboardClass() : IsLibrary(true) {}
- KeyNumType Get(void) {return ((KeyNumType)WWKeyboardClass::Get());};
- KeyNumType Check(void) {return ((KeyNumType)WWKeyboardClass::Check());};
- KeyASCIIType To_ASCII(KeyNumType key) {return((KeyASCIIType)WWKeyboardClass::To_ASCII((unsigned short)key));};
- void Clear(void) {WWKeyboardClass::Clear();};
- int Down(KeyNumType key) {return(WWKeyboardClass::Down((unsigned short)key));};
- int Mouse_X(void) {return(Get_Mouse_X());};
- int Mouse_Y(void) {return(Get_Mouse_Y());};
- };
- #endif
|