261 lines
8.9 KiB
C
261 lines
8.9 KiB
C
![]() |
/*
|
||
|
** Command & Conquer Generals Zero Hour(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) 2001-2003 Electronic Arts Inc. //
|
||
|
// //
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// FILE: KeyDefs.h ////////////////////////////////////////////////////////////
|
||
|
//-----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Westwood Studios Pacific.
|
||
|
//
|
||
|
// Confidential Information
|
||
|
// Copyright (C) 2001 - All Rights Reserved
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Project: RTS3
|
||
|
//
|
||
|
// File name: KeyDefs.h
|
||
|
//
|
||
|
// Created: Mike Morrison, 1995
|
||
|
// Colin Day, June 2001
|
||
|
//
|
||
|
// Desc: Basic keyboard key definitions.
|
||
|
//
|
||
|
/** @todo NOTE: These key definitions are currently tied directly to the
|
||
|
* Direct Input key codes, therefore making these definitions device
|
||
|
* dependent even though this code lives on the device INdependent side
|
||
|
* of the engine. In the future to be truly device independent we
|
||
|
* need to define our own key codes, and have a translation between
|
||
|
* what we read from the device to our own system*/
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#ifndef __KEYDEFS_H_
|
||
|
#define __KEYDEFS_H_
|
||
|
|
||
|
// SYSTEM INCLUDES ////////////////////////////////////////////////////////////
|
||
|
#include <stdlib.h>
|
||
|
#ifndef DIRECTINPUT_VERSION
|
||
|
# define DIRECTINPUT_VERSION 0x800
|
||
|
#endif
|
||
|
|
||
|
#include <dinput.h>
|
||
|
|
||
|
// USER INCLUDES //////////////////////////////////////////////////////////////
|
||
|
|
||
|
// FORWARD REFERENCES /////////////////////////////////////////////////////////
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// TYPE DEFINES ///////////////////////////////////////////////////////////////
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef DIK_OEM_102
|
||
|
#define DIK_OEM_102 0x56 /* < > | on UK/Germany keyboards */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_KANA
|
||
|
#define DIK_KANA 0x70 /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_CONVERT
|
||
|
#define DIK_CONVERT 0x79 /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_NOCONVERT
|
||
|
#define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_YEN
|
||
|
#define DIK_YEN 0x7D /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_CIRCUMFLEX
|
||
|
#define DIK_CIRCUMFLEX 0x90 /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
#ifndef DIK_KANJI
|
||
|
#define DIK_KANJI 0x94 /* (Japanese keyboard) */
|
||
|
#endif
|
||
|
|
||
|
//=============================================================================
|
||
|
/** The key tables */
|
||
|
//=============================================================================
|
||
|
|
||
|
enum KeyDefType
|
||
|
{
|
||
|
// keypad keys ----------------------------------------------------------------
|
||
|
KEY_KP0 = DIK_NUMPAD0,
|
||
|
KEY_KP1 = DIK_NUMPAD1,
|
||
|
KEY_KP2 = DIK_NUMPAD2,
|
||
|
KEY_KP3 = DIK_NUMPAD3,
|
||
|
KEY_KP4 = DIK_NUMPAD4,
|
||
|
KEY_KP5 = DIK_NUMPAD5,
|
||
|
KEY_KP6 = DIK_NUMPAD6,
|
||
|
KEY_KP7 = DIK_NUMPAD7,
|
||
|
KEY_KP8 = DIK_NUMPAD8,
|
||
|
KEY_KP9 = DIK_NUMPAD9,
|
||
|
KEY_KPDEL = DIK_NUMPADPERIOD,
|
||
|
KEY_KPSTAR = DIK_NUMPADSTAR,
|
||
|
KEY_KPMINUS = DIK_NUMPADMINUS,
|
||
|
KEY_KPPLUS = DIK_NUMPADPLUS,
|
||
|
|
||
|
// regular keys ---------------------------------------------------------------
|
||
|
KEY_ESC = DIK_ESCAPE,
|
||
|
KEY_BACKSPACE = DIK_BACK,
|
||
|
KEY_ENTER = DIK_RETURN,
|
||
|
KEY_SPACE = DIK_SPACE,
|
||
|
KEY_TAB = DIK_TAB,
|
||
|
KEY_F1 = DIK_F1,
|
||
|
KEY_F2 = DIK_F2,
|
||
|
KEY_F3 = DIK_F3,
|
||
|
KEY_F4 = DIK_F4,
|
||
|
KEY_F5 = DIK_F5,
|
||
|
KEY_F6 = DIK_F6,
|
||
|
KEY_F7 = DIK_F7,
|
||
|
KEY_F8 = DIK_F8,
|
||
|
KEY_F9 = DIK_F9,
|
||
|
KEY_F10 = DIK_F10,
|
||
|
KEY_F11 = DIK_F11,
|
||
|
KEY_F12 = DIK_F12,
|
||
|
KEY_A = DIK_A,
|
||
|
KEY_B = DIK_B,
|
||
|
KEY_C = DIK_C,
|
||
|
KEY_D = DIK_D,
|
||
|
KEY_E = DIK_E,
|
||
|
KEY_F = DIK_F,
|
||
|
KEY_G = DIK_G,
|
||
|
KEY_H = DIK_H,
|
||
|
KEY_I = DIK_I,
|
||
|
KEY_J = DIK_J,
|
||
|
KEY_K = DIK_K,
|
||
|
KEY_L = DIK_L,
|
||
|
KEY_M = DIK_M,
|
||
|
KEY_N = DIK_N,
|
||
|
KEY_O = DIK_O,
|
||
|
KEY_P = DIK_P,
|
||
|
KEY_Q = DIK_Q,
|
||
|
KEY_R = DIK_R,
|
||
|
KEY_S = DIK_S,
|
||
|
KEY_T = DIK_T,
|
||
|
KEY_U = DIK_U,
|
||
|
KEY_V = DIK_V,
|
||
|
KEY_W = DIK_W,
|
||
|
KEY_X = DIK_X,
|
||
|
KEY_Y = DIK_Y,
|
||
|
KEY_Z = DIK_Z,
|
||
|
KEY_1 = DIK_1,
|
||
|
KEY_2 = DIK_2,
|
||
|
KEY_3 = DIK_3,
|
||
|
KEY_4 = DIK_4,
|
||
|
KEY_5 = DIK_5,
|
||
|
KEY_6 = DIK_6,
|
||
|
KEY_7 = DIK_7,
|
||
|
KEY_8 = DIK_8,
|
||
|
KEY_9 = DIK_9,
|
||
|
KEY_0 = DIK_0,
|
||
|
KEY_MINUS = DIK_MINUS,
|
||
|
KEY_EQUAL = DIK_EQUALS,
|
||
|
KEY_LBRACKET = DIK_LBRACKET,
|
||
|
KEY_RBRACKET = DIK_RBRACKET,
|
||
|
KEY_SEMICOLON = DIK_SEMICOLON,
|
||
|
KEY_APOSTROPHE = DIK_APOSTROPHE,
|
||
|
KEY_TICK = DIK_GRAVE,
|
||
|
KEY_BACKSLASH = DIK_BACKSLASH,
|
||
|
KEY_COMMA = DIK_COMMA,
|
||
|
KEY_PERIOD = DIK_PERIOD,
|
||
|
KEY_SLASH = DIK_SLASH,
|
||
|
|
||
|
// special keys ---------------------------------------------------------------
|
||
|
KEY_SYSREQ = DIK_SYSRQ,
|
||
|
|
||
|
KEY_CAPS = DIK_CAPSLOCK,
|
||
|
KEY_NUM = DIK_NUMLOCK,
|
||
|
KEY_SCROLL = DIK_SCROLL,
|
||
|
KEY_LCTRL = DIK_LCONTROL,
|
||
|
KEY_LALT = DIK_LALT,
|
||
|
KEY_LSHIFT = DIK_LSHIFT,
|
||
|
KEY_RSHIFT = DIK_RSHIFT,
|
||
|
|
||
|
KEY_UP = DIK_UPARROW,
|
||
|
KEY_DOWN = DIK_DOWNARROW,
|
||
|
KEY_LEFT = DIK_LEFTARROW,
|
||
|
KEY_RIGHT = DIK_RIGHTARROW,
|
||
|
KEY_RALT = DIK_RALT,
|
||
|
KEY_RCTRL = DIK_RCONTROL,
|
||
|
KEY_HOME = DIK_HOME,
|
||
|
KEY_END = DIK_END,
|
||
|
KEY_PGUP = DIK_PGUP,
|
||
|
KEY_PGDN = DIK_PGDN,
|
||
|
KEY_INS = DIK_INSERT,
|
||
|
KEY_DEL = DIK_DELETE,
|
||
|
KEY_KPENTER = DIK_NUMPADENTER,
|
||
|
KEY_KPSLASH = DIK_NUMPADSLASH,
|
||
|
|
||
|
KEY_102 = DIK_OEM_102,
|
||
|
|
||
|
// Japanese keyboard keys -----------------------------------------------------
|
||
|
KEY_KANA = DIK_KANA,
|
||
|
KEY_CONVERT = DIK_CONVERT,
|
||
|
KEY_NOCONVERT = DIK_NOCONVERT,
|
||
|
KEY_YEN = DIK_YEN,
|
||
|
KEY_CIRCUMFLEX = DIK_CIRCUMFLEX,
|
||
|
KEY_KANJI = DIK_KANJI,
|
||
|
|
||
|
// specials -------------------------------------------------------------------
|
||
|
KEY_NONE = 0x00, ///< to report end of key stream
|
||
|
KEY_LOST = 0xFF ///< to report lost keyboard focus
|
||
|
|
||
|
}; // end KeyDefType
|
||
|
|
||
|
// state for keyboard IO ------------------------------------------------------
|
||
|
enum
|
||
|
{
|
||
|
KEY_STATE_NONE = 0x0000, // No modifier state
|
||
|
KEY_STATE_UP = 0x0001, // Key is up (default state)
|
||
|
KEY_STATE_DOWN = 0x0002, // Key is down
|
||
|
KEY_STATE_LCONTROL = 0x0004, // Left control is pressed
|
||
|
KEY_STATE_RCONTROL = 0x0008, // Right control is pressed
|
||
|
KEY_STATE_LSHIFT = 0x0010, // left shift is pressed
|
||
|
KEY_STATE_RSHIFT = 0x0020, // right shift is pressed
|
||
|
KEY_STATE_LALT = 0x0040, // left alt is pressed
|
||
|
KEY_STATE_RALT = 0x0080, // right alt is pressed
|
||
|
KEY_STATE_AUTOREPEAT = 0x0100, // Key is down due to autorepeat (only seen in conjunction with KEY_STATE_DOWN)
|
||
|
KEY_STATE_CAPSLOCK = 0x0200, // Caps Lock key is on.
|
||
|
KEY_STATE_SHIFT2 = 0x0400, // Alternate shift key is pressed (I think this is for foreign keyboards..)
|
||
|
|
||
|
// modifier combinations when left/right isn't a factor
|
||
|
KEY_STATE_CONTROL = (KEY_STATE_LCONTROL | KEY_STATE_RCONTROL),
|
||
|
KEY_STATE_SHIFT = (KEY_STATE_LSHIFT | KEY_STATE_RSHIFT | KEY_STATE_SHIFT2 ),
|
||
|
KEY_STATE_ALT = (KEY_STATE_LALT | KEY_STATE_RALT)
|
||
|
|
||
|
}; // end KeyStateType
|
||
|
|
||
|
// INLINING ///////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// EXTERNALS //////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endif // __KEYDEFS_H_
|