113
113
/* Create and initialize the joystick */
114
114
joystick = (SDL_Joystick *)SDL_malloc((sizeof *joystick));
115
if ( joystick != NULL ) {
116
SDL_memset(joystick, 0, (sizeof *joystick));
117
joystick->index = device_index;
118
if ( SDL_SYS_JoystickOpen(joystick) < 0 ) {
122
if ( joystick->naxes > 0 ) {
123
joystick->axes = (Sint16 *)SDL_malloc
124
(joystick->naxes*sizeof(Sint16));
126
if ( joystick->nhats > 0 ) {
127
joystick->hats = (Uint8 *)SDL_malloc
128
(joystick->nhats*sizeof(Uint8));
130
if ( joystick->nballs > 0 ) {
131
joystick->balls = (struct balldelta *)SDL_malloc
132
(joystick->nballs*sizeof(*joystick->balls));
134
if ( joystick->nbuttons > 0 ) {
135
joystick->buttons = (Uint8 *)SDL_malloc
136
(joystick->nbuttons*sizeof(Uint8));
138
if ( ((joystick->naxes > 0) && !joystick->axes)
139
|| ((joystick->nhats > 0) && !joystick->hats)
140
|| ((joystick->nballs > 0) && !joystick->balls)
141
|| ((joystick->nbuttons > 0) && !joystick->buttons)) {
143
SDL_JoystickClose(joystick);
146
if ( joystick->axes ) {
147
SDL_memset(joystick->axes, 0,
148
joystick->naxes*sizeof(Sint16));
150
if ( joystick->hats ) {
151
SDL_memset(joystick->hats, 0,
152
joystick->nhats*sizeof(Uint8));
154
if ( joystick->balls ) {
155
SDL_memset(joystick->balls, 0,
156
joystick->nballs*sizeof(*joystick->balls));
158
if ( joystick->buttons ) {
159
SDL_memset(joystick->buttons, 0,
160
joystick->nbuttons*sizeof(Uint8));
165
/* Add joystick to list */
166
++joystick->ref_count;
167
SDL_Lock_EventThread();
168
for ( i=0; SDL_joysticks[i]; ++i )
169
/* Skip to next joystick */;
170
SDL_joysticks[i] = joystick;
171
SDL_Unlock_EventThread();
119
SDL_memset(joystick, 0, (sizeof *joystick));
120
joystick->index = device_index;
121
if ( SDL_SYS_JoystickOpen(joystick) < 0 ) {
126
if ( joystick->naxes > 0 ) {
127
joystick->axes = (Sint16 *)SDL_malloc
128
(joystick->naxes*sizeof(Sint16));
130
if ( joystick->nhats > 0 ) {
131
joystick->hats = (Uint8 *)SDL_malloc
132
(joystick->nhats*sizeof(Uint8));
134
if ( joystick->nballs > 0 ) {
135
joystick->balls = (struct balldelta *)SDL_malloc
136
(joystick->nballs*sizeof(*joystick->balls));
138
if ( joystick->nbuttons > 0 ) {
139
joystick->buttons = (Uint8 *)SDL_malloc
140
(joystick->nbuttons*sizeof(Uint8));
142
if ( ((joystick->naxes > 0) && !joystick->axes)
143
|| ((joystick->nhats > 0) && !joystick->hats)
144
|| ((joystick->nballs > 0) && !joystick->balls)
145
|| ((joystick->nbuttons > 0) && !joystick->buttons)) {
147
SDL_JoystickClose(joystick);
151
if ( joystick->axes ) {
152
SDL_memset(joystick->axes, 0,
153
joystick->naxes*sizeof(Sint16));
155
if ( joystick->hats ) {
156
SDL_memset(joystick->hats, 0,
157
joystick->nhats*sizeof(Uint8));
159
if ( joystick->balls ) {
160
SDL_memset(joystick->balls, 0,
161
joystick->nballs*sizeof(*joystick->balls));
163
if ( joystick->buttons ) {
164
SDL_memset(joystick->buttons, 0,
165
joystick->nbuttons*sizeof(Uint8));
168
/* Add joystick to list */
169
++joystick->ref_count;
170
SDL_Lock_EventThread();
171
for ( i=0; SDL_joysticks[i]; ++i )
172
/* Skip to next joystick */ ;
173
SDL_joysticks[i] = joystick;
174
SDL_Unlock_EventThread();
173
176
return(joystick);