Switched from Cygwin to mingw32 on MS boxes. Vastly improved compilability.
[btb/d2x.git] / arch / include / joy.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 /*
15  * $Source: /cvs/cvsroot/d2x/arch/include/joy.h,v $
16  * $Revision: 1.3 $
17  * $Author: bradleyb $
18  * $Date: 2001-10-12 00:18:37 $
19  *
20  * Header for joystick functions
21  *
22  * $Log: not supported by cvs2svn $
23  * Revision 1.2  2001/01/29 13:36:14  bradleyb
24  * Removed duplicate files
25  *
26  * Revision 1.1  2001/01/28 16:10:57  bradleyb
27  * unified input headers.
28  *
29  */
30
31 #ifndef _JOY_H
32 #define _JOY_H
33
34 #include "pstypes.h"
35 #include "fix.h"
36
37 #define JOY_1_BUTTON_A  1
38 #define JOY_1_BUTTON_B  2
39 #define JOY_2_BUTTON_A  4
40 #define JOY_2_BUTTON_B  8
41 #define JOY_ALL_BUTTONS (1+2+4+8)
42
43 #define JOY_1_X_AXIS            1
44 #define JOY_1_Y_AXIS            2
45 #define JOY_1_Z_AXIS            4
46 #define JOY_1_R_AXIS            16
47 #define JOY_1_U_AXIS            32
48 #define JOY_1_V_AXIS            64
49
50 #if defined WINDOWS
51 #define JOY_NUM_AXES            7
52 #elif defined __ENV_LINUX__
53 #define JOY_NUM_AXES            5
54 #else
55 #define JOY_NUM_AXES            4
56 #endif
57
58 #if defined(_WIN32) && !defined(__MINGW32__)
59 #define JOY_1_POV                       8
60 #define JOY_ALL_AXIS            (1+2+4+8)
61 #define JOY_EXT_AXIS            (16+32+64)
62 #else
63 #define JOY_2_X_AXIS            4
64 #define JOY_2_Y_AXIS            8
65 #define JOY_ALL_AXIS            (1+2+4+8)
66 #endif
67
68 #define JOY_SLOW_READINGS       1
69 #define JOY_POLLED_READINGS     2
70 #define JOY_BIOS_READINGS       4
71 /* not present in d2src, maybe we don't really need it? */
72 #define JOY_FRIENDLY_READINGS   8
73
74 #ifdef __ENV_LINUX__
75 #define MAX_BUTTONS 64
76 #else
77 #define MAX_BUTTONS 20
78 #endif
79
80 //==========================================================================
81 // This initializes the joy and does a "quick" calibration which
82 // assumes the stick is centered and sets the minimum value to 0 and
83 // the maximum value to 2 times the centered reading. Returns 0 if no
84 // joystick was detected, 1 if everything is ok.
85 // joy_init() is called.
86
87 #if defined (__NT__)
88 extern int joy_init(int joy, int spjoy);
89 extern int joy95_init_stick(int joy, int spjoy);
90 #else
91 extern int joy_init();
92 #endif
93 extern void joy_close();
94
95 extern char joy_installed;
96 extern char joy_present;
97
98 //==========================================================================
99 // The following 3 routines can be used to zero in on better joy
100 // calibration factors. To use them, ask the user to hold the stick
101 // in either the upper left, lower right, or center and then have them
102 // press a key or button and then call the appropriate one of these
103 // routines, and it will read the stick and update the calibration factors.
104 // Usually, assuming that the stick was centered when joy_init was
105 // called, you really only need to call joy_set_lr, since the upper
106 // left position is usually always 0,0 on most joys.  But, the safest
107 // bet is to do all three, or let the user choose which ones to set.
108
109 extern void joy_set_ul();
110 extern void joy_set_lr();
111 extern void joy_set_cen();
112
113
114 //==========================================================================
115 // This reads the joystick. X and Y will be between -128 and 127.
116 // Takes about 1 millisecond in the worst case when the stick
117 // is in the lower right hand corner. Always returns 0,0 if no stick
118 // is present.
119
120 extern void joy_get_pos( int *x, int *y );
121
122 //==========================================================================
123 // This just reads the buttons and returns their status.  When bit 0
124 // is 1, button 1 is pressed, when bit 1 is 1, button 2 is pressed.
125 extern int joy_get_btns();
126
127 //==========================================================================
128 // This returns the number of times a button went either down or up since
129 // the last call to this function.
130 extern int joy_get_button_up_cnt( int btn );
131 extern int joy_get_button_down_cnt( int btn );
132
133 //==========================================================================
134 // This returns how long (in approximate milliseconds) that each of the
135 // buttons has been held down since the last call to this function.
136 // It is the total time... say you pressed it down for 3 ticks, released
137 // it, and held it down for 6 more ticks. The time returned would be 9.
138 extern fix joy_get_button_down_time( int btn );
139
140 extern ubyte joy_read_raw_buttons();
141 extern ubyte joystick_read_raw_axis( ubyte mask, int * axis );
142 extern void joy_flush();
143 extern ubyte joy_get_present_mask();
144 extern void joy_set_timer_rate(int max_value );
145 extern int joy_get_timer_rate();
146
147 extern int joy_get_button_state( int btn );
148 extern void joy_set_cen_fake(int channel);
149 extern ubyte joy_read_stick( ubyte masks, int *axis );
150 extern void joy_get_cal_vals(int *axis_min, int *axis_center, int *axis_max);
151 extern void joy_set_cal_vals(int *axis_min, int *axis_center, int *axis_max);
152 extern void joy_set_btn_values( int btn, int state, fix timedown, int downcount, int upcount );
153 extern int joy_get_scaled_reading( int raw, int axn );
154 extern void joy_set_slow_reading( int flag );
155
156 #if defined(_WIN32) && !defined(__MINGW32__)
157 extern int joy95_init_stick(int joy, int spjoy);
158 #endif
159
160
161 #endif