You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
9.1 KiB
C

//
// G A M E.O.N.E - LOW LEVEL LIB V1.0
// Copyright (C) 2001 LEVEL ONE ENTERTAINMENT,
// Licensed under the terms of LGPL.
//:---------------------------------------------------------------------------
//:Description
//
// LOW LEVEL INPUT DRIVER INCLUDE FILE
//
#ifndef _LLINPUT_H
#define _LLINPUT_H
#include "lib_base.h"
#include "llqueue.h"
/*
* global states of system devices
* if( llinput_Keys[LLINPUT_KEY_I] ) key is down;
*/
extern TxU8 llinput_Keys[256]; // llinput_keyboard.cpp
extern int llinput_MouseX; // llinput_mouse.cpp
extern int llinput_MouseY;
extern int llinput_MouseZ;
extern int llinput_MouseRelX;
extern int llinput_MouseRelY;
extern int llinput_MouseRelZ;
extern TxU8 llinput_MouseBtn1;
extern TxU8 llinput_MouseBtn2;
extern TxU8 llinput_MouseBtn3;
extern TxU8 llinput_MouseBtn4;
extern TxU8 llinput_MouseBtn5;
extern TxU8 llinput_MouseBtn6;
extern TxU8 llinput_MouseBtn7;
extern TxU8 llinput_MouseBtn8;
/*
* Input Event Struct
*/
typedef struct
{
// info
int id; // device identifier
int userid; // user identifier
const char *devicename;
const char *eventname;
// state
TxU32 state;
int ch; // character if this event is a keyboard event
int x,y,z; // rel or abs coords
} s_event, inputEvent, *PtrInputEvent;
#include "llinput_devices.h"
/*
* INPUT TYPES
*
*/
typedef enum {
KEYBOARD = 0x10000,
MOUSE = 0x20000,
JOYSTICK = 0x30000,
GAMEPAD = 0x40000,
WHEEL = 0x60000,
FORCE_FB_JOYSTICK = 0x70000,
FORCE_FB_WHEEL = 0x80000,
} eInputDevices;
#define LLINPUT_CHAR 0x1000 /* value of userid for characters */
#define LLINPUT_ESCAPE (0xFF)
#define LLINPUT_FKEY1 (0xA0)
#define LLINPUT_FKEY2 (0xA1)
#define LLINPUT_FKEY3 (0xA2)
#define LLINPUT_FKEY4 (0xA3)
#define LLINPUT_FKEY5 (0xA4)
#define LLINPUT_FKEY6 (0xA5)
#define LLINPUT_FKEY7 (0xA6)
#define LLINPUT_FKEY8 (0xA7)
#define LLINPUT_FKEY9 (0xA9)
#define LLINPUT_FKEY10 (0xAA)
#define LLINPUT_FKEY11 (0xAB)
#define LLINPUT_FKEY12 (0xAC)
#define LLINPUT_CURSOR_UP (0xB0) /* UpArrow on arrow keypad */
#define LLINPUT_CURSOR_LEFT (0xB1) /* LeftArrow on arrow keypad */
#define LLINPUT_CURSOR_RIGHT (0xB2) /* RightArrow on arrow keypad */
#define LLINPUT_CURSOR_DOWN (0xB3) /* DownArrow on arrow keypad */
#define LLINPUT_PAGEUP (0xB4) /* PgUp on arrow keypad */
#define LLINPUT_PAGEDOWN (0xB5) /* PgDn on arrow keypad */
#define LLINPUT_CURSOR_PAUSE (0xB6) /* PAUSE */
//#define LLINPUT_CURSOR_SCROLL (0xB7) /* Scroll */
#define LLINPUT_CURSOR_INSERT (0xB8) /* Insert on arrow keypad */
#define LLINPUT_CURSOR_DELETE (0xB9) /* Delete on arrow keypad */
#define LLINPUT_CURSOR_HOME (0xBA) /* Home on arrow keypad */
#define LLINPUT_CURSOR_END (0xBB) /* End on arrow keypad */
#define LLINPUT_NUMPAD_ENTER (0xBC) /* Enter on numeric keypad */
#define LLINPUT_NUMPAD_ADD (0xBD) /* + on numeric keypad */
#define LLINPUT_NUMPAD_SUBTRACT (0xBE) /* - on numeric keypad */
#define LLINPUT_NUMPAD_DIVIDE (0xBF) /* / on numeric keypad */
#define LLINPUT_NUMPAD_MULTIPLY (0xC0) /* * on numeric keypad */
#define LLINPUT_NUMPAD_DECIMAL (0xC1) /* . on numeric keypad */
#define LLINPUT_NUMPAD_0 (0xC5)
#define LLINPUT_NUMPAD_1 (0xC6)
#define LLINPUT_NUMPAD_2 (0xC7)
#define LLINPUT_NUMPAD_3 (0xC8)
#define LLINPUT_NUMPAD_4 (0xC9)
#define LLINPUT_NUMPAD_5 (0xCA)
#define LLINPUT_NUMPAD_6 (0xCB)
#define LLINPUT_NUMPAD_7 (0xCC)
#define LLINPUT_NUMPAD_8 (0xCD)
#define LLINPUT_NUMPAD_9 (0xCE)
#define LLINPUT_LSHIFT (0xCF)
#define LLINPUT_RSHIFT (0xD0)
#define LLINPUT_LCONTROL (0xD1)
#define LLINPUT_RCONTROL (0xD2)
#define LLINPUT_SYSRQ (0xD3)
#define LLINPUT_CAPITAL (0xD4)
#define LLINPUT_NUMLOCK (0xD5)
#define LLINPUT_SCROLL (0xD7) /* Scroll Lock */
#define LLINPUT_LMENU (0xD8) /* left Alt */
#define LLINPUT_RMENU (0xD9) /* right Alt */
#define LLINPUT_LWIN (0xDA) /* Left Windows key */
#define LLINPUT_RWIN (0xDB) /* Right Windows key */
#define LLINPUT_APPS (0xFD) /* AppMenu key */
#define LLINPUT_KEY_1 ((TxU8)'1')
#define LLINPUT_KEY_2 ((TxU8)'2')
#define LLINPUT_KEY_3 ((TxU8)'3')
#define LLINPUT_KEY_4 ((TxU8)'4')
#define LLINPUT_KEY_5 ((TxU8)'5')
#define LLINPUT_KEY_6 ((TxU8)'6')
#define LLINPUT_KEY_7 ((TxU8)'7')
#define LLINPUT_KEY_8 ((TxU8)'8')
#define LLINPUT_KEY_9 ((TxU8)'9')
#define LLINPUT_KEY_0 ((TxU8)'0')
#define LLINPUT_KEY_A ((TxU8)'A')
#define LLINPUT_KEY_B ((TxU8)'B')
#define LLINPUT_KEY_C ((TxU8)'C')
#define LLINPUT_KEY_D ((TxU8)'D')
#define LLINPUT_KEY_E ((TxU8)'E')
#define LLINPUT_KEY_F ((TxU8)'F')
#define LLINPUT_KEY_G ((TxU8)'G')
#define LLINPUT_KEY_H ((TxU8)'H')
#define LLINPUT_KEY_I ((TxU8)'I')
#define LLINPUT_KEY_J ((TxU8)'J')
#define LLINPUT_KEY_K ((TxU8)'K')
#define LLINPUT_KEY_L ((TxU8)'L')
#define LLINPUT_KEY_M ((TxU8)'M')
#define LLINPUT_KEY_N ((TxU8)'N')
#define LLINPUT_KEY_O ((TxU8)'O')
#define LLINPUT_KEY_P ((TxU8)'P')
#define LLINPUT_KEY_Q ((TxU8)'Q')
#define LLINPUT_KEY_R ((TxU8)'R')
#define LLINPUT_KEY_S ((TxU8)'S')
#define LLINPUT_KEY_T ((TxU8)'T')
#define LLINPUT_KEY_U ((TxU8)'U')
#define LLINPUT_KEY_V ((TxU8)'V')
#define LLINPUT_KEY_W ((TxU8)'W')
#define LLINPUT_KEY_X ((TxU8)'X')
#define LLINPUT_KEY_Y ((TxU8)'Y')
#define LLINPUT_KEY_Z ((TxU8)'Z')
#define LLINPUT_KEY_MINUS ((TxU8)'-') /* - on main keyboard */
#define LLINPUT_KEY_EQUALS ((TxU8)'=')
#define LLINPUT_KEY_BACK ((TxU8)'\b') /* backspace */
#define LLINPUT_KEY_TAB ((TxU8)'\t')
#define LLINPUT_KEY_LBRACKET ((TxU8)'[')
#define LLINPUT_KEY_RBRACKET ((TxU8)']')
#define LLINPUT_KEY_RETURN ((TxU8)'\n') /* Enter on main keyboard */
#define LLINPUT_KEY_SEMICOLON ((TxU8)';')
#define LLINPUT_KEY_APOSTROPHE ((TxU8)'\'')
#define LLINPUT_KEY_GRAVE ((TxU8)'`') /* accent grave */
#define LLINPUT_KEY_BACKSLASH ((TxU8)'\\')
#define LLINPUT_KEY_COMMA ((TxU8)',')
#define LLINPUT_KEY_PERIOD ((TxU8)'.') /* . on main keyboard */
#define LLINPUT_KEY_SLASH ((TxU8)'/') /* / on main keyboard */
#define LLINPUT_KEY_SPACE ((TxU8)' ')
//:-------------------------------------------------------------------------
#define LLINPUT_MOTION 0x101
#define LLINPUT_POSITION 0x102
#define LLINPUT_BUTTON(idx) (0x200+idx)
#define LLINPUT_BUTTON_0 0x200
#define LLINPUT_BUTTON_1 0x201
#define LLINPUT_BUTTON_2 0x202
#define LLINPUT_BUTTON_3 0x203
#define LLINPUT_BUTTON_4 0x204
#define LLINPUT_BUTTON_5 0x205
#define LLINPUT_BUTTON_6 0x206
#define LLINPUT_BUTTON_7 0x207
#define LLINPUT_BUTTON_8 0x208
#define LLINPUT_BUTTON_9 0x209
#define LLINPUT_BUTTON_10 0x20a
#define LLINPUT_BUTTON_11 0x20b
#define LLINPUT_BUTTON_12 0x20c
#define LLINPUT_BUTTON_13 0x20d
#define LLINPUT_BUTTON_14 0x20e
#define LLINPUT_BUTTON_15 0x20f
#define LLINPUT_MOTION_X 0x300
#define LLINPUT_MOTION_XP 0x301
#define LLINPUT_MOTION_XM 0x302
#define LLINPUT_MOTION_Y 0x303
#define LLINPUT_MOTION_YP 0x304
#define LLINPUT_MOTION_YM 0x305
#define LLINPUT_MOTION_Z 0x306
#define LLINPUT_MOTION_ZP 0x307
#define LLINPUT_MOTION_ZM 0x308
#define LLINPUT_WINDOW_ACTIVE 0x400
#define LLINPUT_WINDOW_MINIMIZED 0x401
#define LLINPUT_DISPLAYMODE_CHANGED 0x402
/*
* Utilities
* STATE_Justdown() - returns true when key just pressed
* STATE_Justup() - returns true when key just released
* STATE_Up() - returns true when key released
* STATE_Down() - returns true when key pressed
*/
inline bool STATE_Justdown(PtrInputEvent ev )
{
SYS_ASSERT_PTR(ev);
return (ev->state & 0x3) == 0x1; // just pressed
}
inline bool STATE_Justup(PtrInputEvent ev )
{
SYS_ASSERT_PTR(ev);
return (ev->state & 0x3) == 0x2; // just released
}
inline bool STATE_Up(PtrInputEvent ev )
{
SYS_ASSERT_PTR(ev);
return (ev->state & 0x1) == 0x0; // released
}
inline bool STATE_Down(PtrInputEvent ev )
{
SYS_ASSERT_PTR(ev);
return (ev->state & 0x1) == 0x1; // pressed
}
inline bool Justdown(TxU8 kbtn){
return (kbtn&0x3) == 0x1; // just pressed
}
inline bool Justup(TxU8 kbtn){
return (kbtn&0x3) == 0x2; // just pressed
}
inline bool down(TxU8 kbtn){
return (kbtn&0x1); // pressed
}
inline bool up(TxU8 kbtn){
return (kbtn&0x1) == 0; // released
}
extern queue<char> Input_Devices;
/*
* prototypes exported functions
*/
extern void llinput_Init(void *window);
extern void llinput_Exit(void);
extern void llinput_Update(void); //no msg wait
extern void llinput_Poll(void); //msg wait
extern void llinput_ResetEvent(void);
extern void llinput_ResetEvent(const char *devicename);
extern void llinput_ClearEvent(void);
extern void llinput_ClearEvent(const char *devicename);
extern inputEvent * llinput_GetEvent(void);
extern inputEvent * llinput_GetEvent(const char *devicename);
extern inputEvent * llinput_GetState(int eventid, const char *devicename);
extern void llinput_WaitforActivation(void);
extern const char * llinput_GetEventName(int eventid);
extern int llinput_GetEventId(const char *eventname);
#endif