]> 4ch.mooo.com Git - 16.git/blob - src/lib/16_in.h
wwww
[16.git] / src / lib / 16_in.h
1 /* Catacomb Armageddon Source Code\r
2  * Copyright (C) 1993-2014 Flat Rock Software\r
3  *\r
4  * This program is free software; you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation; either version 2 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along\r
15  * with this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17  */\r
18 \r
19 //\r
20 //      ID Engine\r
21 //      ID_IN.h - Header file for Input Manager\r
22 //      v1.0d1\r
23 //      By Jason Blochowiak\r
24 //\r
25 \r
26 #ifndef __16_IN__\r
27 #define __16_IN__\r
28
29 #include "src/lib/lib_head.h"\r
30 //#include "src/lib/16_us.h"
31 \r
32 #ifdef  __DEBUG__\r
33 #define __DEBUG_InputMgr__\r
34 #endif\r
35
36 #define KeyInt  9       // The keyboard ISR number
37
38 // Stuff for the joystick
39 #define JoyScaleMax             32768
40 #define JoyScaleShift   8
41 #define MaxJoyValue             5000
42 \r
43 #define MaxPlayers      4\r
44 #define MaxKbds         2\r
45 #define MaxJoys         2\r
46 #define NumCodes        128\r
47 \r
48 typedef byte            ScanCode;\r
49 #define sc_None                 0\r
50 #define sc_Bad                  0xff\r
51 #define sc_Return               0x1c\r
52 #define sc_Enter                sc_Return\r
53 #define sc_Escape               0x01\r
54 #define sc_Space                0x39\r
55 #define sc_BackSpace    0x0e\r
56 #define sc_Tab                  0x0f\r
57 #define sc_Alt                  0x38\r
58 #define sc_Control              0x1d\r
59 #define sc_CapsLock             0x3a\r
60 #define sc_LShift               0x2a\r
61 #define sc_RShift               0x36\r
62 #define sc_UpArrow              0x48\r
63 #define sc_DownArrow    0x50\r
64 #define sc_LeftArrow    0x4b\r
65 #define sc_RightArrow   0x4d\r
66 #define sc_Insert               0x52\r
67 #define sc_Delete               0x53\r
68 #define sc_Home                 0x47\r
69 #define sc_End                  0x4f\r
70 #define sc_PgUp                 0x49\r
71 #define sc_PgDn                 0x51\r
72 #define sc_F1                   0x3b\r
73 #define sc_F2                   0x3c\r
74 #define sc_F3                   0x3d\r
75 #define sc_F4                   0x3e\r
76 #define sc_F5                   0x3f\r
77 #define sc_F6                   0x40\r
78 #define sc_F7                   0x41\r
79 #define sc_F8                   0x42\r
80 #define sc_F9                   0x43\r
81 #define sc_F10                  0x44\r
82 #define sc_F11                  0x57\r
83 #define sc_F12                  0x59\r
84 \r
85 #define sc_1                    0x02\r
86 #define sc_2                    0x03\r
87 #define sc_3                    0x04\r
88 #define sc_4                    0x05\r
89 #define sc_5                    0x06\r
90 #define sc_6                    0x07\r
91 #define sc_7                    0x08\r
92 #define sc_8                    0x09\r
93 #define sc_9                    0x0a\r
94 #define sc_0                    0x0b\r
95 \r
96 #define sc_A                    0x1e\r
97 #define sc_B                    0x30\r
98 #define sc_C                    0x2e\r
99 #define sc_D                    0x20\r
100 #define sc_E                    0x12\r
101 #define sc_F                    0x21\r
102 #define sc_G                    0x22\r
103 #define sc_H                    0x23\r
104 #define sc_I                    0x17\r
105 #define sc_J                    0x24\r
106 #define sc_K                    0x25\r
107 #define sc_L                    0x26\r
108 #define sc_M                    0x32\r
109 #define sc_N                    0x31\r
110 #define sc_O                    0x18\r
111 #define sc_P                    0x19\r
112 #define sc_Q                    0x10\r
113 #define sc_R                    0x13\r
114 #define sc_S                    0x1f\r
115 #define sc_T                    0x14\r
116 #define sc_U                    0x16\r
117 #define sc_V                    0x2f\r
118 #define sc_W                    0x11\r
119 #define sc_X                    0x2d\r
120 #define sc_Y                    0x15\r
121 #define sc_Z                    0x2c\r
122 \r
123 #define key_None                0\r
124 #define key_Return              0x0d\r
125 #define key_Enter               key_Return\r
126 #define key_Escape              0x1b\r
127 #define key_Space               0x20\r
128 #define key_BackSpace   0x08\r
129 #define key_Tab                 0x09\r
130 #define key_Delete              0x7f\r
131 \r
132 //      Stuff for the mouse\r
133 #define MReset          0\r
134 #define MButtons        3\r
135 #define MDelta          11\r
136 \r
137 #define MouseInt        0x33\r
138 #ifdef DEMO0\r
139 typedef enum            {\r
140                                                 demo_Off,demo_Record,demo_Playback,demo_PlayDone\r
141                                         } Demo;
142 #endif\r
143 typedef enum            {\r
144                                                 ctrl_None,                              // MDM (GAMERS EDGE) - added\r
145                                                 ctrl_Keyboard,\r
146                                                         ctrl_Keyboard1 = ctrl_Keyboard,ctrl_Keyboard2,\r
147                                                 ctrl_Joystick,\r
148                                                         ctrl_Joystick1 = ctrl_Joystick,ctrl_Joystick2,\r
149                                                 ctrl_Mouse\r
150                                         } ControlType;\r
151 typedef enum            {\r
152                                                 motion_Left = -1,motion_Up = -1,\r
153                                                 motion_None = 0,\r
154                                                 motion_Right = 1,motion_Down = 1\r
155                                         } Motion;\r
156 typedef enum            {\r
157                                                 dir_North,dir_NorthEast,\r
158                                                 dir_East,dir_SouthEast,\r
159                                                 dir_South,dir_SouthWest,\r
160                                                 dir_West,dir_NorthWest,\r
161                                                 dir_None\r
162                                         } Direction;\r
163 typedef struct          {\r
164                                                 boolean         button0,button1;\r
165                                                 int                     x,y;\r
166                                                 Motion          xaxis,yaxis;\r
167                                                 Direction       dir;\r
168                                         } CursorInfo;\r
169 typedef CursorInfo      ControlInfo;\r
170 typedef struct          {\r
171                                                 ScanCode        button0,button1,\r
172                                                                         upleft,         up,             upright,\r
173                                                                         left,                           right,\r
174                                                                         downleft,       down,   downright;\r
175                                         } KeyboardDef;\r
176 typedef struct          {\r
177                                                 word            joyMinX,joyMinY,\r
178                                                                         threshMinX,threshMinY,\r
179                                                                         threshMaxX,threshMaxY,\r
180                                                                         joyMaxX,joyMaxY,\r
181                                                                         joyMultXL,joyMultYL,\r
182                                                                         joyMultXH,joyMultYH;\r
183                                         } JoystickDef;\r
184 /*\r
185 =============================================================================\r
186 \r
187                                         GLOBAL VARIABLES\r
188 \r
189 =============================================================================\r
190 */\r
191 \r
192 //\r
193 // configuration variables\r
194 //\r
195 static boolean                  MousePresent;\r
196 static boolean                  JoysPresent[MaxJoys];\r
197 static boolean                  JoyPadPresent;\r
198 \r
199 \r
200 //      Global variables
201                 static boolean JoystickCalibrated=false;                // MDM (GAMERS EDGE) - added
202                 static ControlType ControlTypeUsed;                             // MDM (GAMERS EDGE) - added
203 \r
204                 static boolean          Keyboard[NumCodes];\r
205                 static boolean          Paused;\r
206                 static char             LastASCII;\r
207                 static ScanCode LastScan;\r
208 \r
209                 static KeyboardDef      KbdDefs[] = {0x1d,0x38,0x47,0x48,0x49,0x4b,0x4d,0x4f,0x50,0x51};\r
210                 static JoystickDef      JoyDefs[MaxJoys];\r
211                 static ControlType      Controls[MaxPlayers];\r
212 \r
213                 static dword    MouseDownCount;
214 \r
215 #ifdef DEMO0\r
216                 static Demo             DemoMode = demo_Off;\r
217                 static byte /*_seg*/    *DemoBuffer;\r
218                 static word             DemoOffset,DemoSize;
219 #endif
220
221 extern dword far* clockdw;
222
223 /*\r
224 =============================================================================\r
225 \r
226                                         LOCAL VARIABLES\r
227 \r
228 =============================================================================\r
229 */\r
230 static  byte        far ASCIINames[] =          // Unshifted ASCII for scan codes\r
231                                         {\r
232 //       0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F\r
233         0  ,27 ,'1','2','3','4','5','6','7','8','9','0','-','=',8  ,9  ,        // 0\r
234         'q','w','e','r','t','y','u','i','o','p','[',']',13 ,0  ,'a','s',        // 1\r
235         'd','f','g','h','j','k','l',';',39 ,'`',0  ,92 ,'z','x','c','v',        // 2\r
236         'b','n','m',',','.','/',0  ,'*',0  ,' ',0  ,0  ,0  ,0  ,0  ,0  ,        // 3\r
237         0  ,0  ,0  ,0  ,0  ,0  ,0  ,'7','8','9','-','4','5','6','+','1',        // 4\r
238         '2','3','0',127,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 5\r
239         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 6\r
240         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0           // 7\r
241                                         },\r
242                                         far ShiftNames[] =              // Shifted ASCII for scan codes\r
243                                         {\r
244 //       0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F\r
245         0  ,27 ,'!','@','#','$','%','^','&','*','(',')','_','+',8  ,9  ,        // 0\r
246         'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0  ,'A','S',        // 1\r
247         'D','F','G','H','J','K','L',':',34 ,'~',0  ,'|','Z','X','C','V',        // 2\r
248         'B','N','M','<','>','?',0  ,'*',0  ,' ',0  ,0  ,0  ,0  ,0  ,0  ,        // 3\r
249         0  ,0  ,0  ,0  ,0  ,0  ,0  ,'7','8','9','-','4','5','6','+','1',        // 4\r
250         '2','3','0',127,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 5\r
251         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 6\r
252         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0           // 7\r
253                                         },\r
254                                         far SpecialNames[] =    // ASCII for 0xe0 prefixed codes\r
255                                         {\r
256 //       0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F\r
257         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 0\r
258         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,13 ,0  ,0  ,0  ,        // 1\r
259         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 2\r
260         0  ,0  ,0  ,0  ,0  ,'/',0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 3\r
261         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 4\r
262         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 5\r
263         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,        // 6\r
264         0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0           // 7\r
265                                         };\r
266 \r
267 \r
268 static  boolean         IN_Started;\r
269 static  boolean         CapsLock;\r
270 static  ScanCode        CurCode,LastCode;\r
271 \r
272 static  Direction       DirTable[] =            // Quick lookup for total direction\r
273                                         {\r
274                                                 dir_NorthWest,  dir_North,      dir_NorthEast,\r
275                                                 dir_West,               dir_None,       dir_East,\r
276                                                 dir_SouthWest,  dir_South,      dir_SouthEast\r
277                                         };\r
278 \r
279 static  void                    (*INL_KeyHook)(void);\r
280 static  void interrupt  (*OldKeyVect)(void);\r
281 \r
282 static  char                    *ParmStrings[] = {"nojoys","nomouse",nil};\r
283 \r
284 // Function prototypes\r
285 #define IN_KeyDown(code)        (Keyboard[(code)])\r
286 #define IN_ClearKey(code)       {Keyboard[code] = false;\\r
287                                                         if (code == LastScan) LastScan = sc_None;}\r
288 \r
289 // DEBUG - put names in prototypes\r
290 extern  void            IN_Startup(void),IN_Shutdown(void),\r
291                                         IN_Default(boolean gotit,ControlType in),\r
292                                         IN_SetKeyHook(void (*)()),\r
293                                         IN_ClearKeysDown(void),\r
294                                         IN_ReadCursor(CursorInfo *),\r
295                                         IN_ReadControl(int,ControlInfo *),\r
296                                         IN_SetControlType(int,ControlType),\r
297                                         IN_GetJoyAbs(word joy,word *xp,word *yp),\r
298                                         IN_SetupJoy(word joy,word minx,word maxx,\r
299                                                                 word miny,word maxy),
300 #ifdef DEMO0\r
301                                         IN_StartDemoPlayback(byte __segment *buffer,word bufsize),\r
302                                         IN_StopDemo(void),IN_FreeDemoBuffer(void),
303 #endif\r
304                                         IN_Ack(void),IN_AckBack(void);\r
305 extern  boolean         IN_UserInput(dword delay,boolean clear),\r
306                                         IN_IsUserInput(void)
307 #ifdef DEMO0\r
308                                         , IN_StartDemoRecord(word bufsize)
309 #endif
310 ;\r
311 extern  byte            *IN_GetScanName(ScanCode);\r
312 extern  char            IN_WaitForASCII(void);\r
313 extern  ScanCode        IN_WaitForKey(void);\r
314 extern  word            IN_GetJoyButtonsDB(word joy);
315
316 //static void interrupt INL_KeyService(void);\r
317 #endif\r