Subversion Repositories eduke32

Rev

Rev 5 | Rev 400 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 Plagman 1
//-------------------------------------------------------------------------
2
/*
3
Copyright (C) 1996, 2003 - 3D Realms Entertainment
4
 
5
This file is NOT part of Duke Nukem 3D version 1.5 - Atomic Edition
6
However, it is either an older version of a file that is, or is
7
some test code written during the development of Duke Nukem 3D.
8
This file is provided purely for educational interest.
9
 
10
Duke Nukem 3D is free software; you can redistribute it and/or
11
modify it under the terms of the GNU General Public License
12
as published by the Free Software Foundation; either version 2
13
of the License, or (at your option) any later version.
14
 
15
This program is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
18
 
19
See the GNU General Public License for more details.
20
 
21
You should have received a copy of the GNU General Public License
22
along with this program; if not, write to the Free Software
23
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24
 
25
Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
26
*/
27
//-------------------------------------------------------------------------
28
 
29
//****************************************************************************
30
//
31
// Private header for CONTROL.C
32
//
33
//****************************************************************************
34
 
35
#ifndef _control_private
36
#define _control_private
37
#ifdef __cplusplus
38
extern "C" {
39
#endif
40
 
41
//****************************************************************************
42
//
43
// DEFINES
44
//
45
//****************************************************************************
46
 
47
#define BUTTON0_SCAN_1   sc_Space
48
#define BUTTON0_SCAN_2   sc_Enter
49
#define BUTTON0_SCAN_3   sc_kpad_Enter
50
#define BUTTON1_SCAN     sc_Escape
51
 
52
#define AXISUNDEFINED   0x7f
53
#define BUTTONUNDEFINED 0x7f
54
#define KEYUNDEFINED    0x7f
55
 
56
#define SENSITIVE        0x400
57
//#define MINSENSITIVE     0x30
58
 
59
#define THRESHOLD        0x200
60
#define MINTHRESHOLD     0x80
61
 
62
#define USERINPUTDELAY   200
63
 
64
#define ResetMouse       0
65
#define GetMouseButtons  3
66
#define GetMouseDelta    11
67
 
68
#define MouseInt         0x33
69
#define JoyMax           0xa00
70
#define MaxJoyValue      5000
71
 
127 terminx 72
#define DEFAULTMOUSESENSITIVITY 10 // 0x7000+MINIMUMMOUSESENSITIVITY
73
 
5 Plagman 74
#define CONTROL_NUM_FLAGS   64
75
#define INSTANT_ONOFF       0
76
#define TOGGLE_ONOFF        1
77
 
78
#define MAXCONTROLVALUE  0x7fff
79
 
80
// Maximum number of buttons for any controller
81
#define MAXBUTTONS 32
82
 
83
// Number of Mouse buttons
84
 
85
#define MAXMOUSEBUTTONS 6
86
 
87
// Number of Mouse Axes
88
 
89
#define MAXMOUSEAXES 2
90
 
91
// Number of JOY buttons
92
 
93
#define MAXJOYBUTTONS 32
94
 
95
// Number of JOY axes
96
 
97
#define MAXJOYAXES 6
98
 
99
// Number of GamePad axes
100
 
101
#define MAXGAMEPADAXES 2
102
 
103
// Number of axes
104
 
105
#define MAXAXES 6
106
 
107
// NORMAL axis scale
108
 
109
#define NORMALAXISSCALE (65536)
110
 
111
#define BUTTONSET(x,value) \
112
    (\
113
    ((x)>31) ?\
114
    (CONTROL_ButtonState2 |= (value<<((x)-32)))  :\
115
    (CONTROL_ButtonState1 |= (value<<(x)))\
116
    )
117
 
118
#define BUTTONCLEAR(x) \
119
    (\
120
    ((x)>31) ?\
121
    (CONTROL_ButtonState2 &= (~(1<<((x)-32)))) :\
122
    (CONTROL_ButtonState1 &= (~(1<<(x))))\
123
    )
124
 
125
#define BUTTONHELDSET(x,value)\
126
    (\
127
    ((x)>31) ?\
128
    (CONTROL_ButtonHeldState2 |= value<<((x)-32)) :\
129
    (CONTROL_ButtonHeldState1 |= value<<(x))\
130
    )
131
 
132
#define LIMITCONTROL(x)\
133
    {\
134
    if ((*x)>MAXCONTROLVALUE) \
135
       {\
136
       (*x) = MAXCONTROLVALUE;\
137
       }\
138
    if ((*x)<-MAXCONTROLVALUE) \
139
       {\
140
       (*x) = -MAXCONTROLVALUE;\
141
       }\
142
    }
143
#define SGN(x) \
144
    ( ( (x) > 0 ) ? 1 : ( (x) < 0 ) ? -1 : 0 )
145
 
146
//****************************************************************************
147
//
148
// TYPEDEFS
149
//
150
//****************************************************************************
151
 
152
typedef enum
153
   {
154
   motion_Left  = -1,
155
   motion_Up    = -1,
156
   motion_None  = 0,
157
   motion_Right = 1,
158
   motion_Down  = 1
159
   } motion;
160
 
161
 
162
typedef struct
163
   {
164
   int32 joyMinX;
165
   int32 joyMinY;
166
   int32 threshMinX;
167
   int32 threshMinY;
168
   int32 threshMaxX;
169
   int32 threshMaxY;
170
   int32 joyMaxX;
171
   int32 joyMaxY;
172
   int32 joyMultXL;
173
   int32 joyMultYL;
174
   int32 joyMultXH;
175
   int32 joyMultYH;
176
   } JoystickDef;
177
 
178
//   int32 ThrottleMin;
179
//   int32 RudderMin;
180
//   int32 ThrottlethreshMin;
181
//   int32 RudderthreshMin;
182
//   int32 ThrottlethreshMax;
183
//   int32 RudderthreshMax;
184
//   int32 ThrottleMax;
185
//   int32 RudderMax;
186
//   int32 ThrottleMultL;
187
//   int32 RudderMultL;
188
//   int32 ThrottleMultH;
189
//   int32 RudderMultH;
190
 
191
/*
192
typedef struct
193
   {
194
   byte active     : 1;
195
   byte used       : 1;
196
   byte toggle     : 1;
197
   byte buttonheld : 1;
198
   byte cleared    : 1;
199
   } controlflags;
200
typedef struct
201
   {
202
   volatile byte active     : 1;
203
   volatile byte used       : 1;
204
   volatile byte toggle     : 1;
205
   volatile byte buttonheld : 1;
206
   volatile byte cleared    : 1;
207
   } controlflags;
208
*/
209
typedef struct
210
   {
211
   byte active     ;
212
   byte used       ;
213
   byte toggle     ;
214
   byte buttonheld ;
215
   int32 cleared    ;
216
   } controlflags;
217
 
218
typedef struct
219
   {
220
   kb_scancode key1;
221
   kb_scancode key2;
222
   } controlkeymaptype;
223
 
224
typedef struct
225
   {
226
   byte singleclicked;
227
   byte doubleclicked;
228
   word extra;
229
   } controlbuttontype;
230
 
231
typedef struct
232
   {
233
   byte analogmap;
234
   byte minmap;
235
   byte maxmap;
236
   byte extra;
237
   } controlaxismaptype;
238
 
239
typedef struct
240
   {
241
   int32 analog;
242
   int32 digital;
243
   } controlaxistype;
244
 
245
 
246
//***************************************************************************
247
//
248
// PROTOTYPES
249
//
250
//***************************************************************************
251
 
252
void    CONTROL_GetMouseDelta( void );
253
byte    CONTROL_GetMouseButtons( void );
254
boolean CONTROL_StartMouse( void );
255
void    CONTROL_GetJoyAbs( void );
256
void    CONTROL_GetJoyDelta( void );
257
void    CONTROL_SetJoyScale( void );
258
boolean CONTROL_StartJoy( int32 joy );
259
void    CONTROL_ShutJoy( int32 joy );
260
void    CONTROL_SetFlag( int32 which, boolean active );
261
void    CONTROL_ButtonFunctionState( boolean * state );
262
boolean CONTROL_KeyboardFunctionPressed( int32 whichfunction );
263
boolean CONTROL_CheckRange( int32 which );
264
int32   CONTROL_GetTime( void );
265
void    CONTROL_AxisFunctionState( boolean * state );
266
void    CONTROL_GetJoyMovement( ControlInfo * info );
267
 
268
#ifdef __cplusplus
269
};
270
#endif
271
#endif