+static int handle_joy_event(struct in_sdl_state *state, SDL_Event *event,
+ int *kc_out, int *down_out)
+{
+ int kc = -1, down = 0, ret = 0;
+
+ /* FIXME: should ckeck .which */
+ /* TODO: remaining axis */
+ switch (event->type) {
+ case SDL_JOYAXISMOTION:
+ if (event->jaxis.axis > 1)
+ break;
+ if (-16384 <= event->jaxis.value && event->jaxis.value <= 16384) {
+ kc = state->axis_keydown[event->jaxis.axis];
+ state->axis_keydown[event->jaxis.axis] = 0;
+ ret = 1;
+ }
+ else if (event->jaxis.value < -16384) {
+ kc = state->axis_keydown[event->jaxis.axis];
+ if (kc)
+ update_keystate(state->keystate, kc, 0);
+ kc = event->jaxis.axis ? SDLK_UP : SDLK_LEFT;
+ state->axis_keydown[event->jaxis.axis] = kc;
+ down = 1;
+ ret = 1;
+ }
+ else if (event->jaxis.value > 16384) {
+ kc = state->axis_keydown[event->jaxis.axis];
+ if (kc)
+ update_keystate(state->keystate, kc, 0);
+ kc = event->jaxis.axis ? SDLK_DOWN : SDLK_RIGHT;
+ state->axis_keydown[event->jaxis.axis] = kc;
+ down = 1;
+ ret = 1;
+ }
+ break;
+
+ case SDL_JOYBUTTONDOWN:
+ case SDL_JOYBUTTONUP:
+ kc = (int)event->jbutton.button + SDLK_WORLD_0;
+ down = event->jbutton.state == SDL_PRESSED;
+ ret = 1;
+ break;