-/* Catacomb Armageddon Source Code\r
+/* Catacomb Apocalypse Source Code\r
* Copyright (C) 1993-2014 Flat Rock Software\r
*\r
* This program is free software; you can redistribute it and/or modify\r
//\r
// ID Engine\r
// ID_IN.h - Header file for Input Manager\r
-// v1.0d1\r
-// By Jason Blochowiak\r
+// v1.0d1w\r
+// By Jason Blochowiak
+// Open Watcom port by sparky4\r
//\r
\r
#ifndef __16_IN__\r
#define __16_IN__\r
+#include <string.h>\r
#include "src/lib/lib_head.h"\r
-#include "src/lib/16_us.h"
\r
-#ifdef __DEBUG__\r
+//++++#ifdef __DEBUG__\r
#define __DEBUG_InputMgr__\r
-#endif\r
-
-#define KeyInt 9 // The keyboard ISR number
-
-// Stuff for the joystick
-#define JoyScaleMax 32768
-#define JoyScaleShift 8
-#define MaxJoyValue 5000
+//++++#endif\r
+\r
+#define TESTKEYIN
+#define TESTCONTROLNOISY\r
+\r
+#define KeyInt 9 // The keyboard ISR number\r
+\r
+// Stuff for the joystick\r
+#define JoyScaleMax 32768\r
+#define JoyScaleShift 8\r
+#define MaxJoyValue 5000\r
\r
#define MaxPlayers 4\r
#define MaxKbds 2\r
-#define MaxJoys 2\r
+#define MaxJoys 2
+#define MaxPads 2\r
#define NumCodes 128\r
\r
typedef byte ScanCode;\r
#define key_BackSpace 0x08\r
#define key_Tab 0x09\r
#define key_Delete 0x7f\r
+
+#define key_LSuper 0x5b
+#define key_RSuper 0x5c
+#define key_Menu 0x5d
\r
// Stuff for the mouse\r
#define MReset 0\r
#define MDelta 11\r
\r
#define MouseInt 0x33\r
-\r
+#ifdef DEMO0\r
typedef enum {\r
demo_Off,demo_Record,demo_Playback,demo_PlayDone\r
} Demo;\r
+#endif\r
typedef enum {\r
- ctrl_None, // MDM (GAMERS EDGE) - added\r
+ //ctrl_None, // MDM (GAMERS EDGE) - added\r
ctrl_Keyboard,\r
ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2,\r
ctrl_Joystick,\r
ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2,\r
- ctrl_Mouse\r
+ ctrl_Mouse,
+ ctrl_Joypad,
+ ctrl_Joypad1 = ctrl_Joypad,ctrl_Joypad2\r
} ControlType;\r
typedef enum {\r
motion_Left = -1,motion_Up = -1,\r
motion_Right = 1,motion_Down = 1\r
} Motion;\r
typedef enum {\r
- dir_North,dir_NorthEast,\r
- dir_East,dir_SouthEast,\r
- dir_South,dir_SouthWest,\r
- dir_West,dir_NorthWest,\r
+ dir_North,//dir_NorthEast,\r
+ dir_East,//dir_SouthEast,\r
+ dir_South,//dir_Soutinest,\r
+ dir_West,//dir_Nortinest,\r
dir_None\r
} Direction;\r
typedef struct {\r
- boolean button0,button1;\r
+ boolean button0,button1,button2,button3;\r
int x,y;\r
Motion xaxis,yaxis;\r
Direction dir;\r
} CursorInfo;\r
-typedef CursorInfo ControlInfo;\r
+\r
typedef struct {\r
ScanCode button0,button1,\r
- upleft, up, upright,\r
+ //upleft,\r
+ up,\r
+ //upright,\r
left, right,\r
- downleft, down, downright;\r
+ //downleft,\r
+ down\r
+ //,downright\r
+ ;\r
} KeyboardDef;\r
typedef struct {\r
word joyMinX,joyMinY,\r
joyMaxX,joyMaxY,\r
joyMultXL,joyMultYL,\r
joyMultXH,joyMultYH;\r
- } JoystickDef;\r
+ } JoystickDef;
+typedef struct
+{
+ boolean w;\r
+} JoypadDef;
+
+typedef struct
+{
+ CursorInfo info;
+ ControlType Controls;
+} player_t;
+
+typedef struct
+{
+ boolean MousePresent;\r
+ boolean JoysPresent[MaxJoys];\r
+ boolean JoyPadPresent[MaxPads];
+ boolean Keyboard[NumCodes];\r
+ boolean Paused;\r
+ char LastASCII;\r
+ ScanCode LastScan;
+
+ boolean IN_Started;\r
+ boolean CapsLock;\r
+ ScanCode CurCode,LastCode;
+ KeyboardDef KbdDefs[MaxKbds];
+ JoystickDef JoyDefs[MaxJoys];
+ JoypadDef JoypadDefs[MaxPads];
+} inconfig;
+\r
/*\r
=============================================================================\r
\r
//\r
// configuration variables\r
//\r
-boolean MousePresent;\r
-boolean JoysPresent[MaxJoys];\r
-boolean JoyPadPresent;\r
-\r
+//static boolean MousePresent;\r
+//static boolean JoysPresent[MaxJoys];\r
+//static boolean JoyPadPresent[MaxPads];\r
\r
-// Global variables
- boolean JoystickCalibrated=false; // MDM (GAMERS EDGE) - added
- ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added
+// Global variables\r
+// extern boolean JoystickCalibrated; // MDM (GAMERS EDGE) - added\r
+// extern ControlType ControlTypeUsed; // MDM (GAMERS EDGE) - added\r
\r
- boolean Keyboard[NumCodes];\r
- boolean Paused;\r
- char LastASCII;\r
- ScanCode LastScan;\r
+ //extern boolean Keyboard[NumCodes];\r
+ //extern boolean Paused;\r
+ //extern char LastASCII;\r
+ //extern ScanCode LastScan;\r
\r
- KeyboardDef KbdDefs[] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};\r
- JoystickDef JoyDefs[MaxJoys];\r
- ControlType Controls[MaxPlayers];\r
+ //extern KeyboardDef KbdDefs[];
+ //static KeyboardDef KbdDefs[MaxKbds] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};\r
+ //extern JoystickDef JoyDefs[MaxJoys];\r
+ //extern ControlType Controls[MaxPlayers];\r
\r
- dword MouseDownCount;
+ //extern dword MouseDownCount;\r
\r
#ifdef DEMO0\r
- Demo DemoMode = demo_Off;\r
- byte /*_seg*/ *DemoBuffer;\r
- word DemoOffset,DemoSize;
-#endif
-
-
-
+ static Demo DemoMode = demo_Off;\r
+ static byte /*_seg*/ *DemoBuffer;\r
+ static word DemoOffset,DemoSize;\r
+#endif\r
+\r
+extern dword far* clockdw;\r
+\r
/*\r
=============================================================================\r
\r
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5\r
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6\r
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7\r
- };\r
-\r
-\r
-static boolean IN_Started;\r
-static boolean CapsLock;\r
-static ScanCode CurCode,LastCode;\r
+ },\r
+ *ScanNames[] = // Scan code names with single chars\r
+ {\r
+ "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?",\r
+ "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S",\r
+ "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V",\r
+ "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?",\r
+ "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?",\r
+ "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
+ "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
+ "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"\r
+ }, // DEBUG - consolidate these\r
+ far ExtScanCodes[] = // Scan codes with >1 char names\r
+ {\r
+ 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,\r
+ 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36,\r
+ 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48,\r
+ 0x50,0x4b,0x4d,0x00\r
+ },\r
+ *ExtScanNames[] = // Names corresponding to ExtScanCodes\r
+ {\r
+ "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4",\r
+ "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft",\r
+ "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up",\r
+ "Down","Left","Right",""\r
+ };
\r
static Direction DirTable[] = // Quick lookup for total direction\r
{\r
- dir_NorthWest, dir_North, dir_NorthEast,\r
+ //dir_Nortinest,\r
+ dir_North,\r
+ //dir_NorthEast,\r
dir_West, dir_None, dir_East,\r
- dir_SouthWest, dir_South, dir_SouthEast\r
+ //dir_Soutinest,\r
+ dir_South//,dir_SouthEast\r
};\r
\r
static void (*INL_KeyHook)(void);\r
static void interrupt (*OldKeyVect)(void);\r
\r
-static char *ParmStrings[] = {"nojoys","nomouse",nil};\r
+static char *ParmStringsIN[] = {"nojoys","nomouse",nil};\r
\r
// Function prototypes\r
#define IN_KeyDown(code) (Keyboard[(code)])\r
-#define IN_ClearKey(code) {Keyboard[code] = false;\\r
- if (code == LastScan) LastScan = sc_None;}\r
+#define IN_ClearKey(code) {Keyboard[code] = false; if (code == LastScan) LastScan = sc_None;}\r
+
+// Internal routines
+void interrupt INL_KeyService(inconfig *in);
+void Mouse(int x);
+//static void INL_GetMouseDelta(int *x,int *y);
+//static word INL_GetMouseButtons(void);
+void IN_GetJoyAbs(word joy,word *xp,word *yp);
+//static void INL_GetJoyDelta(word joy,int *dx,int *dy,boolean adaptive);
+//static word INL_GetJoyButtons(word joy);
+word IN_GetJoyButtonsDB(word joy);
+//static void INL_StartKbd(void);
+//static void INL_ShutKbd(void);
+//static boolean INL_StartMouse(void);
+//static void INL_ShutMouse(void);
+//static void INL_SetJoyScale(word joy);
+void IN_SetupJoy(word joy,word minx,word maxx,word miny,word maxy, inconfig *in);
+//static boolean INL_StartJoy(word joy);
+//static void INL_ShutJoy(word joy);
+void IN_Startup(inconfig *in);
+void IN_Default(boolean gotit,player_t *player,ControlType nt, inconfig *in);
+void IN_Shutdown(inconfig *in);
+void IN_SetKeyHook(void (*hook)());
+void IN_ClearKeysDown(inconfig *in);
+//static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy);
+void IN_ReadCursor(CursorInfo *info);
+void IN_ReadControl(int playnum,player_t *player);
+void IN_SetControlType(word playnum,player_t *player,ControlType type);
+#if DEMO0
+boolean IN_StartDemoRecord(word bufsize);
+void IN_StartDemoPlayback(byte /*__segment*/ *buffer,word bufsize);
+void IN_StopDemo(void);
+void IN_FreeDemoBuffer(void);
+#endif
+byte *IN_GetScanName(ScanCode scan);
+ScanCode IN_WaitForKey(void);
+char IN_WaitForASCII(void);
+void IN_AckBack(void);
+void IN_Ack(void);
+boolean IN_IsUserInput(void);
+boolean IN_UserInput(dword delay,boolean clear);
\r
-// DEBUG - put names in prototypes\r
-extern void IN_Startup(void),IN_Shutdown(void),\r
+/*extern void IN_Startup(void),IN_Shutdown(void),\r
IN_Default(boolean gotit,ControlType in),\r
IN_SetKeyHook(void (*)()),\r
IN_ClearKeysDown(void),\r
IN_SetControlType(int,ControlType),\r
IN_GetJoyAbs(word joy,word *xp,word *yp),\r
IN_SetupJoy(word joy,word minx,word maxx,\r
- word miny,word maxy),
+ word miny,word maxy),\r
+ Mouse(int x),\r
#ifdef DEMO0\r
IN_StartDemoPlayback(byte __segment *buffer,word bufsize),\r
- IN_StopDemo(void),IN_FreeDemoBuffer(void),
+ IN_StopDemo(void),IN_FreeDemoBuffer(void),\r
#endif\r
IN_Ack(void),IN_AckBack(void);\r
extern boolean IN_UserInput(dword delay,boolean clear),\r
- IN_IsUserInput(void)
+ IN_IsUserInput(void)\r
#ifdef DEMO0\r
- , IN_StartDemoRecord(word bufsize)
-#endif
+ , IN_StartDemoRecord(word bufsize)\r
+#endif\r
;\r
extern byte *IN_GetScanName(ScanCode);\r
extern char IN_WaitForASCII(void);\r
extern ScanCode IN_WaitForKey(void);\r
-extern word IN_GetJoyButtonsDB(word joy);\r
+extern word IN_GetJoyButtonsDB(word joy);*/\r
\r
+boolean IN_qb(byte kee);\r
#endif\r