// // ID Engine // ID_IN.h - Header file for Input Manager // v1.0d1 // By Jason Blochowiak // #ifndef __ID_IN__ #define __ID_IN__ #ifdef __DEBUG__ #define __DEBUG_InputMgr__ #endif #define MaxPlayers 4 #define MaxKbds 2 #define MaxJoys 2 #define NumCodes 128 typedef byte ScanCode; #define sc_None 0 #define sc_Bad 0xff #define sc_Return 0x1c #define sc_Enter sc_Return #define sc_Escape 0x01 #define sc_Space 0x39 #define sc_BackSpace 0x0e #define sc_Tab 0x0f #define sc_Alt 0x38 #define sc_Control 0x1d #define sc_CapsLock 0x3a #define sc_LShift 0x2a #define sc_RShift 0x36 #define sc_UpArrow 0x48 #define sc_DownArrow 0x50 #define sc_LeftArrow 0x4b #define sc_RightArrow 0x4d #define sc_Insert 0x52 #define sc_Delete 0x53 #define sc_Home 0x47 #define sc_End 0x4f #define sc_PgUp 0x49 #define sc_PgDn 0x51 #define sc_F1 0x3b #define sc_F2 0x3c #define sc_F3 0x3d #define sc_F4 0x3e #define sc_F5 0x3f #define sc_F6 0x40 #define sc_F7 0x41 #define sc_F8 0x42 #define sc_F9 0x43 #define sc_F10 0x44 #define sc_F11 0x57 #define sc_F12 0x59 #define sc_1 0x02 #define sc_2 0x03 #define sc_3 0x04 #define sc_4 0x05 #define sc_5 0x06 #define sc_6 0x07 #define sc_7 0x08 #define sc_8 0x09 #define sc_9 0x0a #define sc_0 0x0b #define sc_A 0x1e #define sc_B 0x30 #define sc_C 0x2e #define sc_D 0x20 #define sc_E 0x12 #define sc_F 0x21 #define sc_G 0x22 #define sc_H 0x23 #define sc_I 0x17 #define sc_J 0x24 #define sc_K 0x25 #define sc_L 0x26 #define sc_M 0x32 #define sc_N 0x31 #define sc_O 0x18 #define sc_P 0x19 #define sc_Q 0x10 #define sc_R 0x13 #define sc_S 0x1f #define sc_T 0x14 #define sc_U 0x16 #define sc_V 0x2f #define sc_W 0x11 #define sc_X 0x2d #define sc_Y 0x15 #define sc_Z 0x2c #define key_None 0 #define key_Return 0x0d #define key_Enter key_Return #define key_Escape 0x1b #define key_Space 0x20 #define key_BackSpace 0x08 #define key_Tab 0x09 #define key_Delete 0x7f // Stuff for the mouse #define MReset 0 #define MButtons 3 #define MDelta 11 #define MouseInt 0x33 #define Mouse(x) _AX = x,geninterrupt(MouseInt) typedef enum { demo_Off,demo_Record,demo_Playback,demo_PlayDone } Demo; typedef enum { ctrl_Keyboard, ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2, ctrl_Joystick, ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2, ctrl_Mouse } ControlType; typedef enum { motion_Left = -1,motion_Up = -1, motion_None = 0, motion_Right = 1,motion_Down = 1 } Motion; typedef enum { dir_North,dir_NorthEast, dir_East,dir_SouthEast, dir_South,dir_SouthWest, dir_West,dir_NorthWest, dir_None } Direction; typedef struct { boolean button0,button1,button2,button3; int x,y; Motion xaxis,yaxis; Direction dir; } CursorInfo; typedef CursorInfo ControlInfo; typedef struct { ScanCode button0,button1, upleft, up, upright, left, right, downleft, down, downright; } KeyboardDef; typedef struct { word joyMinX,joyMinY, threshMinX,threshMinY, threshMaxX,threshMaxY, joyMaxX,joyMaxY, joyMultXL,joyMultYL, joyMultXH,joyMultYH; } JoystickDef; // Global variables extern boolean Keyboard[], MousePresent, JoysPresent[]; extern boolean Paused; extern char LastASCII; extern ScanCode LastScan; extern KeyboardDef KbdDefs; extern JoystickDef JoyDefs[]; extern ControlType Controls[MaxPlayers]; extern Demo DemoMode; extern byte _seg *DemoBuffer; extern word DemoOffset,DemoSize; // Function prototypes #define IN_KeyDown(code) (Keyboard[(code)]) #define IN_ClearKey(code) {Keyboard[code] = false;\ if (code == LastScan) LastScan = sc_None;} // DEBUG - put names in prototypes extern void IN_Startup(void),IN_Shutdown(void), IN_Default(boolean gotit,ControlType in), IN_SetKeyHook(void (*)()), IN_ClearKeysDown(void), IN_ReadCursor(CursorInfo *), IN_ReadControl(int,ControlInfo *), IN_SetControlType(int,ControlType), IN_GetJoyAbs(word joy,word *xp,word *yp), IN_SetupJoy(word joy,word minx,word maxx, word miny,word maxy), IN_StopDemo(void),IN_FreeDemoBuffer(void), IN_Ack(void),IN_AckBack(void); extern boolean IN_UserInput(longword delay); extern char IN_WaitForASCII(void); extern ScanCode IN_WaitForKey(void); extern word IN_GetJoyButtonsDB(word joy); extern byte *IN_GetScanName(ScanCode); byte IN_MouseButtons (void); byte IN_JoyButtons (void); void INL_GetJoyDelta(word joy,int *dx,int *dy); void IN_StartAck(void); boolean IN_CheckAck (void); #endif