CnC_Remastered_Collection

Command and Conquer: Red Alert
Log | Files | Refs | README | LICENSE

KEYBOARD.H (18696B)


      1 //
      2 // Copyright 2020 Electronic Arts Inc.
      3 //
      4 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free 
      5 // software: you can redistribute it and/or modify it under the terms of 
      6 // the GNU General Public License as published by the Free Software Foundation, 
      7 // either version 3 of the License, or (at your option) any later version.
      8 
      9 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed 
     10 // in the hope that it will be useful, but with permitted additional restrictions 
     11 // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT 
     12 // distributed with this program. You should have received a copy of the 
     13 // GNU General Public License along with permitted additional restrictions 
     14 // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
     15 
     16 /* $Header:   F:\projects\c&c0\vcs\code\conquer.cpv   4.74   23 Sep 1996 12:36:00   JOE_BOSTIC  $ */
     17 /***********************************************************************************************
     18  *                                                                                             *
     19  *                 Project Name : Westwood Keyboard Library                                    *
     20  *                                                                                             *
     21  *                    File Name : KEYBOARD.H                                                   *
     22  *                                                                                             *
     23  *                   Programmer : Philip W. Gorrow                                             *
     24  *                                                                                             *
     25  *                   Start Date : 10/16/95                                                     *
     26  *                                                                                             *
     27  *                  Last Update : October 16, 1995 [PWG]                                       *
     28  *                                                                                             *
     29  *---------------------------------------------------------------------------------------------*
     30  * Functions:                                                                                  *
     31  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
     32 
     33 #ifndef KEYBOARD_H
     34 #define KEYBOARD_H
     35 
     36 #include	<windows.h>
     37 
     38 /*
     39 **	The "bool" integral type was defined by the C++ comittee in
     40 **	November of '94. Until the compiler supports this, use the following
     41 **	definition.
     42 */
     43 #ifndef __BORLANDC__
     44 #ifndef TRUE_FALSE_DEFINED
     45 #define TRUE_FALSE_DEFINED
     46 enum {false=0,true=1};
     47 typedef int bool;
     48 #endif
     49 #endif
     50 
     51 
     52 typedef enum {
     53 	WWKEY_SHIFT_BIT	= 0x100,
     54 	WWKEY_CTRL_BIT		= 0x200,
     55 	WWKEY_ALT_BIT		= 0x400,
     56 	WWKEY_RLS_BIT		= 0x800,
     57 	WWKEY_VK_BIT		= 0x1000,
     58 	WWKEY_DBL_BIT		= 0x2000,
     59 	WWKEY_BTN_BIT		= 0x8000,
     60 } WWKey_Type;
     61 
     62 
     63 class WWKeyboardClass
     64 {
     65 	public:
     66 		/* Define the base constructor and destructors for the class			*/
     67 		WWKeyboardClass();
     68 
     69 		/* Define the functions which work with the Keyboard Class				*/
     70 		unsigned short Check(void) const;
     71 		unsigned short Get(void);
     72 		bool Put(unsigned short key);
     73 		void Clear(void);
     74 		char To_ASCII(unsigned short num);
     75 		bool Down(unsigned short key);
     76 
     77 		/* Define the main hook for the message processing loop.					*/
     78 		void Message_Handler(HWND hwnd, UINT message, UINT wParam, LONG lParam);
     79 
     80 		/* Define the public access variables which are used with the			*/
     81 		/*   Keyboard Class.																	*/
     82 		int MouseQX;
     83 		int MouseQY;
     84 
     85 	private:
     86 
     87 		/*
     88 		**	This is a keyboard state array that is used to aid in translating
     89 		**	KN_ keys into KA_ keys.
     90 		*/
     91 		unsigned char KeyState[256];
     92 
     93 		/*
     94 		**	This is the circular keyboard holding buffer. It holds the VK key and
     95 		**	the current shift state at the time the key was added to the queue.
     96 		*/
     97 		unsigned short Buffer[256];		// buffer which holds actual keypresses
     98 
     99 		unsigned short Buff_Get(void);
    100 		unsigned short Fetch_Element(void);
    101 		unsigned short Peek_Element(void) const;
    102 		bool Put_Element(unsigned short val);
    103 		bool Is_Buffer_Full(void) const;
    104 		bool Is_Buffer_Empty(void) const;
    105 		static bool Is_Mouse_Key(unsigned short key);
    106 		void Fill_Buffer_From_System(void);
    107 		bool Put_Key_Message(unsigned short vk_key, bool release = false);
    108 
    109 		/*
    110 		**	These are the tracking pointers to maintain the
    111 		**	circular keyboard list.
    112 		*/
    113 		int Head;
    114 		int Tail;
    115 };
    116 
    117 
    118 #define	VK_NONE				  0x00
    119 #define	VK_LBUTTON          0x01
    120 #define	VK_RBUTTON          0x02
    121 #define	VK_CANCEL           0x03
    122 #define	VK_MBUTTON          0x04
    123 #define	VK_NONE_05			  0x05
    124 #define	VK_NONE_06			  0x06
    125 #define	VK_NONE_07			  0x07
    126 #define	VK_BACK             0x08
    127 #define	VK_TAB              0x09
    128 #define	VK_NONE_0A			  0x0A
    129 #define	VK_NONE_0B			  0x0B
    130 #define	VK_CLEAR            0x0C
    131 #define	VK_RETURN           0x0D
    132 #define	VK_NONE_0E			  0x0E
    133 #define	VK_NONE_0F			  0x0F
    134 #define	VK_SHIFT            0x10
    135 #define	VK_CONTROL          0x11
    136 #define	VK_MENU             0x12
    137 #define	VK_PAUSE            0x13
    138 #define	VK_CAPITAL          0x14
    139 #define	VK_NONE_15			  0x15
    140 #define	VK_NONE_16			  0x16
    141 #define	VK_NONE_17			  0x17
    142 #define	VK_NONE_18			  0x18
    143 #define	VK_NONE_19			  0x19
    144 #define	VK_NONE_1A			  0x1A
    145 #define	VK_ESCAPE           0x1B
    146 #define	VK_NONE_1C			  0x1C
    147 #define	VK_NONE_1D			  0x1D
    148 #define	VK_NONE_1E			  0x1E
    149 #define	VK_NONE_1F			  0x1F
    150 #define	VK_SPACE            0x20
    151 #define	VK_PRIOR            0x21
    152 #define	VK_NEXT             0x22
    153 #define	VK_END              0x23
    154 #define	VK_HOME             0x24
    155 #define	VK_LEFT             0x25
    156 #define	VK_UP               0x26
    157 #define	VK_RIGHT            0x27
    158 #define	VK_DOWN             0x28
    159 #define	VK_SELECT           0x29
    160 #define	VK_PRINT            0x2A
    161 #define	VK_EXECUTE          0x2B
    162 #define	VK_SNAPSHOT         0x2C
    163 #define	VK_INSERT           0x2D
    164 #define	VK_DELETE           0x2E
    165 #define	VK_HELP             0x2F
    166 #define	VK_0					  0x30
    167 #define	VK_1					  0x31
    168 #define	VK_2					  0x32
    169 #define	VK_3					  0x33
    170 #define	VK_4					  0x34
    171 #define	VK_5					  0x35
    172 #define	VK_6					  0x36
    173 #define	VK_7					  0x37
    174 #define	VK_8					  0x38
    175 #define	VK_9					  0x39
    176 #define	VK_NONE_3B			  0x3B
    177 #define	VK_NONE_3C			  0x3C
    178 #define	VK_NONE_3D			  0x3D
    179 #define	VK_NONE_3E			  0x3E
    180 #define	VK_NONE_3F			  0x3F
    181 #define	VK_NONE_40			  0x40
    182 #define	VK_A					  0x41
    183 #define	VK_B					  0x42
    184 #define	VK_C					  0x43
    185 #define	VK_D					  0x44
    186 #define	VK_E					  0x45
    187 #define	VK_F					  0x46
    188 #define	VK_G					  0x47
    189 #define	VK_H					  0x48
    190 #define	VK_I					  0x49
    191 #define	VK_J					  0x4A
    192 #define	VK_K					  0x4B
    193 #define	VK_L					  0x4C
    194 #define	VK_M					  0x4D
    195 #define	VK_N					  0x4E
    196 #define	VK_O					  0x4F
    197 #define	VK_P					  0x50
    198 #define	VK_Q					  0x51
    199 #define	VK_R					  0x52
    200 #define	VK_S					  0x53
    201 #define	VK_T					  0x54
    202 #define	VK_U					  0x55
    203 #define	VK_V					  0x56
    204 #define	VK_W					  0x57
    205 #define	VK_X					  0x58
    206 #define	VK_Y					  0x59
    207 #define	VK_Z					  0x5A
    208 #define	VK_NONE_5B			  0x5B
    209 #define	VK_NONE_5C			  0x5C
    210 #define	VK_NONE_5D			  0x5D
    211 #define	VK_NONE_5E			  0x5E
    212 #define	VK_NONE_5F			  0x5F
    213 #define	VK_NUMPAD0          0x60
    214 #define	VK_NUMPAD1          0x61
    215 #define	VK_NUMPAD2          0x62
    216 #define	VK_NUMPAD3          0x63
    217 #define	VK_NUMPAD4          0x64
    218 #define	VK_NUMPAD5          0x65
    219 #define	VK_NUMPAD6          0x66
    220 #define	VK_NUMPAD7          0x67
    221 #define	VK_NUMPAD8          0x68
    222 #define	VK_NUMPAD9          0x69
    223 #define	VK_MULTIPLY         0x6A
    224 #define	VK_ADD              0x6B
    225 #define	VK_SEPARATOR        0x6C
    226 #define	VK_SUBTRACT         0x6D
    227 #define	VK_DECIMAL          0x6E
    228 #define	VK_DIVIDE           0x6F
    229 #define	VK_F1               0x70
    230 #define	VK_F2               0x71
    231 #define	VK_F3               0x72
    232 #define	VK_F4               0x73
    233 #define	VK_F5               0x74
    234 #define	VK_F6               0x75
    235 #define	VK_F7               0x76
    236 #define	VK_F8               0x77
    237 #define	VK_F9               0x78
    238 #define	VK_F10              0x79
    239 #define	VK_F11              0x7A
    240 #define	VK_F12              0x7B
    241 #define	VK_F13              0x7C
    242 #define	VK_F14              0x7D
    243 #define	VK_F15              0x7E
    244 #define	VK_F16              0x7F
    245 #define	VK_F17              0x80
    246 #define	VK_F18              0x81
    247 #define	VK_F19              0x82
    248 #define	VK_F20              0x83
    249 #define	VK_F21              0x84
    250 #define	VK_F22              0x85
    251 #define	VK_F23              0x86
    252 #define	VK_F24              0x87
    253 #define	VK_NONE_88          0x88
    254 #define	VK_NONE_89          0x89
    255 #define	VK_NONE_8A          0x8A
    256 #define	VK_NONE_8B          0x8B
    257 #define	VK_NONE_8C          0x8C
    258 #define	VK_NONE_8D          0x8D
    259 #define	VK_NONE_8E          0x8E
    260 #define	VK_NONE_8F          0x8F
    261 #define	VK_NUMLOCK          0x90
    262 #define	VK_SCROLL           0x91
    263 #define	VK_NONE_92			  0x92
    264 #define	VK_NONE_93			  0x93
    265 #define	VK_NONE_94			  0x94
    266 #define	VK_NONE_95			  0x95
    267 #define	VK_NONE_96			  0x96
    268 #define	VK_NONE_97			  0x97
    269 #define	VK_NONE_98			  0x98
    270 #define	VK_NONE_99			  0x99
    271 #define	VK_NONE_9A			  0x9A
    272 #define	VK_NONE_9B			  0x9B
    273 #define	VK_NONE_9C			  0x9C
    274 #define	VK_NONE_9D			  0x9D
    275 #define	VK_NONE_9E			  0x9E
    276 #define	VK_NONE_9F			  0x9F
    277 #define	VK_NONE_A0			  0xA0
    278 #define	VK_NONE_A1			  0xA1
    279 #define	VK_NONE_A2			  0xA2
    280 #define	VK_NONE_A3			  0xA3
    281 #define	VK_NONE_A4			  0xA4
    282 #define	VK_NONE_A5			  0xA5
    283 #define	VK_NONE_A6			  0xA6
    284 #define	VK_NONE_A7			  0xA7
    285 #define	VK_NONE_A8			  0xA8
    286 #define	VK_NONE_A9			  0xA9
    287 #define	VK_NONE_AA			  0xAA
    288 #define	VK_NONE_AB			  0xAB
    289 #define	VK_NONE_AC			  0xAC
    290 #define	VK_NONE_AD			  0xAD
    291 #define	VK_NONE_AE			  0xAE
    292 #define	VK_NONE_AF			  0xAF
    293 #define	VK_NONE_B0			  0xB0
    294 #define	VK_NONE_B1			  0xB1
    295 #define	VK_NONE_B2			  0xB2
    296 #define	VK_NONE_B3			  0xB3
    297 #define	VK_NONE_B4			  0xB4
    298 #define	VK_NONE_B5			  0xB5
    299 #define	VK_NONE_B6			  0xB6
    300 #define	VK_NONE_B7			  0xB7
    301 #define	VK_NONE_B8			  0xB8
    302 #define	VK_NONE_B9			  0xB9
    303 #define	VK_NONE_BA			  0xBA	//	;
    304 #define	VK_NONE_BB			  0xBB	// =
    305 #define	VK_NONE_BC			  0xBC	// ,
    306 #define	VK_NONE_BD			  0xBD	// -
    307 #define	VK_NONE_BE			  0xBE	// .
    308 #define	VK_NONE_BF			  0xBF	// /
    309 #define	VK_NONE_C0			  0xC0	// `
    310 #define	VK_NONE_C1			  0xC1
    311 #define	VK_NONE_C2			  0xC2
    312 #define	VK_NONE_C3			  0xC3
    313 #define	VK_NONE_C4			  0xC4
    314 #define	VK_NONE_C5			  0xC5
    315 #define	VK_NONE_C6			  0xC6
    316 #define	VK_NONE_C7			  0xC7
    317 #define	VK_NONE_C8			  0xC8
    318 #define	VK_NONE_C9			  0xC9
    319 #define	VK_NONE_CA			  0xCA
    320 #define	VK_NONE_CB			  0xCB
    321 #define	VK_NONE_CC			  0xCC
    322 #define	VK_NONE_CD			  0xCD
    323 #define	VK_NONE_CE			  0xCE
    324 #define	VK_NONE_CF			  0xCF
    325 #define	VK_NONE_D0			  0xD0
    326 #define	VK_NONE_D1			  0xD1
    327 #define	VK_NONE_D2			  0xD2
    328 #define	VK_NONE_D3			  0xD3
    329 #define	VK_NONE_D4			  0xD4
    330 #define	VK_NONE_D5			  0xD5
    331 #define	VK_NONE_D6			  0xD6
    332 #define	VK_NONE_D7			  0xD7
    333 #define	VK_NONE_D8			  0xD8
    334 #define	VK_NONE_D9			  0xD9
    335 #define	VK_NONE_DA			  0xDA
    336 #define	VK_NONE_DB			  0xDB		// [
    337 #define	VK_NONE_DC			  0xDC		// '\'
    338 #define	VK_NONE_DD			  0xDD		// ]
    339 #define	VK_NONE_DE			  0xDE		// '
    340 #define	VK_NONE_DF			  0xDF
    341 #define	VK_NONE_E0			  0xE0
    342 #define	VK_NONE_E1			  0xE1
    343 #define	VK_NONE_E2			  0xE2
    344 #define	VK_NONE_E3			  0xE3
    345 #define	VK_NONE_E4			  0xE4
    346 #define	VK_NONE_E5			  0xE5
    347 #define	VK_NONE_E6			  0xE6
    348 #define	VK_NONE_E7			  0xE7
    349 #define	VK_NONE_E8			  0xE8
    350 #define	VK_NONE_E9			  0xE9
    351 #define	VK_NONE_EA			  0xEA
    352 #define	VK_NONE_EB			  0xEB
    353 #define	VK_NONE_EC			  0xEC
    354 #define	VK_NONE_ED			  0xED
    355 #define	VK_NONE_EE			  0xEE
    356 #define	VK_NONE_EF			  0xEF
    357 #define	VK_NONE_F0			  0xF0
    358 #define	VK_NONE_F1			  0xF1
    359 #define	VK_NONE_F2			  0xF2
    360 #define	VK_NONE_F3			  0xF3
    361 #define	VK_NONE_F4			  0xF4
    362 #define	VK_NONE_F5			  0xF5
    363 #define	VK_NONE_F6			  0xF6
    364 #define	VK_NONE_F7			  0xF7
    365 #define	VK_NONE_F8			  0xF8
    366 #define	VK_NONE_F9			  0xF9
    367 #define	VK_NONE_FA			  0xFA
    368 #define	VK_NONE_FB			  0xFB
    369 #define	VK_NONE_FC			  0xFC
    370 #define	VK_NONE_FD			  0xFD
    371 #define	VK_NONE_FE			  0xFE
    372 #define	VK_NONE_FF			  0xFF
    373 
    374 #define	VK_UPLEFT			  VK_HOME
    375 #define	VK_UPRIGHT			  VK_PRIOR
    376 #define	VK_DOWNLEFT			  VK_END
    377 #define	VK_DOWNRIGHT		  VK_NEXT
    378 #define	VK_ALT				  VK_MENU
    379 
    380 enum {
    381 	//
    382 	// Define all the KA types as variations of the VK types.  This is
    383 	// so the KA functions will work properly under windows 95.
    384 	//
    385 	KA_NONE				= 0,
    386 	KA_MORE 				= 1,
    387 	KA_SETBKGDCOL 		= 2,
    388 	KA_SETFORECOL 		= 6,
    389 	KA_FORMFEED 		= 12,
    390 	KA_SPCTAB 			= 20,
    391 	KA_SETX 				= 25,
    392 	KA_SETY 				= 26,
    393 
    394 	KA_SPACE				= 32,					/*   */
    395 	KA_EXCLAMATION,							/* ! */
    396 	KA_DQUOTE,									/* " */
    397 	KA_POUND,									/* # */
    398 	KA_DOLLAR,									/* $ */
    399 	KA_PERCENT,									/* % */
    400 	KA_AMPER,									/* & */
    401 	KA_SQUOTE,									/* ' */
    402 	KA_LPAREN,									/* ( */
    403 	KA_RPAREN,									/* ) */
    404 	KA_ASTERISK,								/* * */
    405 	KA_PLUS,										/* + */
    406 	KA_COMMA,									/* , */
    407 	KA_MINUS,									/* - */
    408 	KA_PERIOD,									/* . */
    409 	KA_SLASH,									/* / */
    410 
    411 	KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
    412 	KA_COLON,									/* : */
    413 	KA_SEMICOLON,								/* ; */
    414 	KA_LESS_THAN,								/* < */
    415 	KA_EQUAL,									/* = */
    416 	KA_GREATER_THAN,							/* > */
    417 	KA_QUESTION,								/* ? */
    418 
    419 	KA_AT,										/* @ */
    420 	KA_A,											/* A */
    421 	KA_B,											/* B */
    422 	KA_C,											/* C */
    423 	KA_D,											/* D */
    424 	KA_E,											/* E */
    425 	KA_F,											/* F */
    426 	KA_G,											/* G */
    427 	KA_H,											/* H */
    428 	KA_I,											/* I */
    429 	KA_J,											/* J */
    430 	KA_K,											/* K */
    431 	KA_L,											/* L */
    432 	KA_M,											/* M */
    433 	KA_N,											/* N */
    434 	KA_O,											/* O */
    435 
    436 	KA_P,											/* P */
    437 	KA_Q,											/* Q */
    438 	KA_R,											/* R */
    439 	KA_S,											/* S */
    440 	KA_T,											/* T */
    441 	KA_U,											/* U */
    442 	KA_V,											/* V */
    443 	KA_W,											/* W */
    444 	KA_X,											/* X */
    445 	KA_Y,											/* Y */
    446 	KA_Z,											/* Z */
    447 	KA_LBRACKET,								/* [ */
    448 	KA_BACKSLASH,								/* \ */
    449 	KA_RBRACKET,								/* ] */
    450 	KA_CARROT,									/* ^ */
    451 	KA_UNDERLINE,								/* _ */
    452 
    453 	KA_GRAVE,									/* ` */
    454 	KA_a,											/* a */
    455 	KA_b,											/* b */
    456 	KA_c,											/* c */
    457 	KA_d,											/* d */
    458 	KA_e,											/* e */
    459 	KA_f,											/* f */
    460 	KA_g,											/* g */
    461 	KA_h,											/* h */
    462 	KA_i,											/* i */
    463 	KA_j,											/* j */
    464 	KA_k,											/* k */
    465 	KA_l,											/* l */
    466 	KA_m,											/* m */
    467 	KA_n,											/* n */
    468 	KA_o,											/* o */
    469 
    470 	KA_p,											/* p */
    471 	KA_q,											/* q */
    472 	KA_r,											/* r */
    473 	KA_s,											/* s */
    474 	KA_t,											/* t */
    475 	KA_u,											/* u */
    476 	KA_v,											/* v */
    477 	KA_w,											/* w */
    478 	KA_x,											/* x */
    479 	KA_y,											/* y */
    480 	KA_z,											/* z */
    481 	KA_LBRACE,									/* { */
    482 	KA_BAR,										/* | */
    483 	KA_RBRACE,									/* ] */
    484 	KA_TILDA,									/* ~ */
    485 
    486 	KA_ESC 				= VK_ESCAPE,
    487 	KA_EXTEND 			= VK_ESCAPE,
    488 	KA_RETURN 			= VK_RETURN,
    489 	KA_BACKSPACE 		= VK_BACK,
    490 	KA_TAB 				= VK_TAB ,
    491 	KA_DELETE			= VK_DELETE,									/* <DELETE> */
    492 	KA_INSERT			= VK_INSERT,									/* <INSERT> */
    493 	KA_PGDN				= VK_NEXT,										/* <PAGE DOWN> */
    494 	KA_DOWNRIGHT 		= VK_NEXT,
    495 	KA_DOWN				= VK_DOWN,										/* <DOWN ARROW> */
    496 	KA_END				= VK_END,										/* <END> */
    497 	KA_DOWNLEFT 		= VK_END,
    498 	KA_RIGHT				= VK_RIGHT,									/* <RIGHT ARROW> */
    499 	KA_KEYPAD5			= VK_SELECT,									/* NUMERIC KEY PAD <5> */
    500 	KA_LEFT				= VK_LEFT,										/* <LEFT ARROW> */
    501 	KA_PGUP				= VK_PRIOR,										/* <PAGE UP> */
    502 	KA_UPRIGHT 			= VK_PRIOR,
    503 	KA_UP					= VK_UP,										/* <UP ARROW> */
    504 	KA_HOME				= VK_HOME,										/* <HOME> */
    505 	KA_UPLEFT 			= VK_HOME,
    506 	KA_F12				= VK_F12,
    507 	KA_F11				= VK_F11,
    508 	KA_F10				= VK_F10,
    509 	KA_F9 				= VK_F9,
    510 	KA_F8					= VK_F8,
    511 	KA_F7					= VK_F7,
    512 	KA_F6					= VK_F6,
    513 	KA_F5					= VK_F5,
    514 	KA_F4					= VK_F4,
    515 	KA_F3					= VK_F3,
    516 	KA_F2					= VK_F2,
    517 	KA_F1					= VK_F1,
    518 	KA_LMOUSE 	 		= VK_LBUTTON,
    519 	KA_RMOUSE 	 		= VK_RBUTTON,
    520 
    521 	KA_SHIFT_BIT 		= WWKEY_SHIFT_BIT,
    522 	KA_CTRL_BIT  		= WWKEY_CTRL_BIT,
    523 	KA_ALT_BIT   		= WWKEY_ALT_BIT,
    524 	KA_RLSE_BIT  		= WWKEY_RLS_BIT,
    525 };
    526 
    527 
    528 typedef enum KeyNumType {
    529 	KN_NONE				= 0,
    530 
    531 	KN_0 					= VK_0,
    532 	KN_1 					= VK_1,
    533 	KN_2 					= VK_2,
    534 	KN_3 					= VK_3,
    535 	KN_4 					= VK_4,
    536 	KN_5 					= VK_5,
    537 	KN_6 					= VK_6,
    538 	KN_7 					= VK_7,
    539 	KN_8 					= VK_8,
    540 	KN_9 					= VK_9,
    541 	KN_A 					= VK_A,
    542 	KN_B 					= VK_B,
    543 	KN_BACKSLASH		= VK_NONE_DC,
    544 	KN_BACKSPACE		= VK_BACK,
    545 	KN_C 					= VK_C,
    546 	KN_CAPSLOCK			= VK_CAPITAL,
    547 	KN_CENTER			= VK_CLEAR,
    548 	KN_COMMA 			= VK_NONE_BC,
    549 	KN_D 					= VK_D,
    550 	KN_DELETE			= VK_DELETE,
    551 	KN_DOWN				= VK_DOWN,
    552 	KN_DOWNLEFT			= VK_END,
    553 	KN_DOWNRIGHT		= VK_NEXT,
    554 	KN_E 					= VK_E,
    555 	KN_END				= VK_END,
    556 	KN_EQUAL 			= VK_NONE_BB,
    557 	KN_ESC				= VK_ESCAPE,
    558 	KN_E_DELETE 		= VK_DELETE,
    559 	KN_E_DOWN			= VK_NUMPAD2,
    560 	KN_E_END				= VK_NUMPAD1,
    561 	KN_E_HOME			= VK_NUMPAD7,
    562 	KN_E_INSERT			= VK_INSERT,
    563 	KN_E_LEFT			= VK_NUMPAD4,
    564 	KN_E_PGDN   		= VK_NUMPAD3,
    565 	KN_E_PGUP			= VK_NUMPAD9,
    566 	KN_E_RIGHT			= VK_NUMPAD6,
    567 	KN_E_UP				= VK_NUMPAD8,
    568 	KN_F 					= VK_F,
    569 	KN_F1					= VK_F1,
    570 	KN_F10				= VK_F10,
    571 	KN_F11				= VK_F11,
    572 	KN_F12				= VK_F12,
    573 	KN_F2					= VK_F2,
    574 	KN_F3					= VK_F3,
    575 	KN_F4					= VK_F4,
    576 	KN_F5					= VK_F5,
    577 	KN_F6					= VK_F6,
    578 	KN_F7					= VK_F7,
    579 	KN_F8					= VK_F8,
    580 	KN_F9					= VK_F9,
    581 	KN_G 					= VK_G,
    582 	KN_GRAVE 			= VK_NONE_C0,
    583 	KN_H 					= VK_H,
    584 	KN_HOME				= VK_HOME,
    585 	KN_I 					= VK_I,
    586 	KN_INSERT			= VK_INSERT,
    587 	KN_J 					= VK_J,
    588 	KN_K 					= VK_K,
    589 	KN_KEYPAD_ASTERISK= VK_MULTIPLY,
    590 	KN_KEYPAD_MINUS	= VK_SUBTRACT,
    591 	KN_KEYPAD_PLUS		= VK_ADD,
    592 	KN_KEYPAD_RETURN	= VK_RETURN,
    593 	KN_KEYPAD_SLASH	= VK_DIVIDE,
    594 	KN_L 					= VK_L,
    595 	KN_LALT				= VK_MENU,
    596 	KN_LBRACKET			= VK_NONE_DB,
    597 	KN_LCTRL				= VK_CONTROL,
    598 	KN_LEFT				= VK_LEFT,
    599 	KN_LMOUSE			= VK_LBUTTON,
    600 	KN_LSHIFT			= VK_SHIFT,
    601 	KN_M 					= VK_M,
    602 	KN_MINUS 			= VK_NONE_BD,
    603 	KN_N 					= VK_N,
    604 	KN_NUMLOCK			= VK_NUMLOCK,
    605 	KN_O 					= VK_O,
    606 	KN_P 					= VK_P,
    607 	KN_PAUSE				= VK_PAUSE,
    608 	KN_PERIOD 			= VK_NONE_BE,
    609 	KN_PGDN				= VK_NEXT,
    610 	KN_PGUP				= VK_PRIOR,
    611 	KN_PRNTSCRN			= VK_PRINT,
    612 	KN_Q 					= VK_Q,
    613 	KN_R 					= VK_R,
    614 	KN_RALT				= VK_MENU,
    615 	KN_RBRACKET			= VK_NONE_DD,
    616 	KN_RCTRL				= VK_CONTROL,
    617 	KN_RETURN 			= VK_RETURN,
    618 	KN_RIGHT				= VK_RIGHT,
    619 	KN_RMOUSE			= VK_RBUTTON,
    620 	KN_RSHIFT			= VK_SHIFT,
    621 	KN_S 					= VK_S,
    622 	KN_SCROLLLOCK		= VK_SCROLL,
    623 	KN_SEMICOLON 		= VK_NONE_BA,
    624 	KN_SLASH 			= VK_NONE_BF,
    625 	KN_SPACE 			= VK_SPACE,
    626 	KN_SQUOTE 			= VK_NONE_DE,
    627 	KN_T 					= VK_T,
    628 	KN_TAB				= VK_TAB,
    629 	KN_U 					= VK_U,
    630 	KN_UP					= VK_UP,
    631 	KN_UPLEFT			= VK_HOME,
    632 	KN_UPRIGHT			= VK_PRIOR,
    633 	KN_V 					= VK_V,
    634 	KN_W 					= VK_W,
    635 	KN_X 					= VK_X,
    636 	KN_Y 					= VK_Y,
    637 	KN_Z 					= VK_Z,
    638 
    639 	KN_SHIFT_BIT 		= WWKEY_SHIFT_BIT,
    640 	KN_CTRL_BIT  		= WWKEY_CTRL_BIT,
    641 	KN_ALT_BIT   		= WWKEY_ALT_BIT,
    642 	KN_RLSE_BIT  		= WWKEY_RLS_BIT,
    643 	KN_BUTTON    		= WWKEY_BTN_BIT,
    644 } KeyNumType;
    645 
    646 
    647 extern WWKeyboardClass *_Kbd;
    648 
    649 #endif