int event_parse(SDL_Event ev) { switch(ev.type) { case SDL_KEYDOWN: return event_key(ev.key, EVENT_PRESS); case SDL_KEYUP: return event_key(ev.key, EVENT_RELEASE); case SDL_MOUSEMOTION: return event_mouse(ev.motion); case SDL_MOUSEBUTTONDOWN: return event_button(ev.button, EVENT_PRESS); case SDL_MOUSEBUTTONUP: return event_button(ev.button, EVENT_RELEASE); case SDL_JOYAXISMOTION: return event_joystick(ev.jaxis); case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: return event_fire(ev.jbutton); case SDL_WINDOWEVENT: if(ev.window.windowID == screen_window_id) { if(ev.window.event == SDL_WINDOWEVENT_RESIZED) { if((ev.window.data1 % 512) == 0 && (ev.window.data2 % 314) == 0) screen_make_texture(SDL_SCALING_NEAREST); else screen_make_texture(SDL_SCALING_LINEAR); } } break; case SDL_QUIT: if(debugger) return EVENT_DEBUG; else { SDL_Quit(); exit(0); } } return EVENT_NONE; }
int main(int argc, char** argv) { if (argc == 1) { print_help(argv[0]); exit(1); } // SDL2 will only report events when the window has focus, so set // this hint as we don't have a window SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); // FIXME: We don't need video, but without it SDL will fail to work in SDL_WaitEvent() if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC) < 0) { fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); exit(1); } else { atexit(SDL_Quit); if (argc == 2 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0)) { print_help(argv[0]); } if (argc == 2 && (strcmp(argv[1], "--version") == 0)) { printf("sdl-jstest 0.2.0\n"); exit(EXIT_SUCCESS); } else if (argc == 2 && (strcmp(argv[1], "--list") == 0 || (strcmp(argv[1], "-l") == 0))) { list_joysticks(); } else if (argc == 3 && (strcmp(argv[1], "--gamecontroller") == 0 || strcmp(argv[1], "-g") == 0)) { int idx; if (!str2int(argv[2], &idx)) { fprintf(stderr, "Error: JOYSTICKNUM argument must be a number, but was '%s'\n", argv[2]); exit(1); } else { test_gamecontroller(idx); } } else if (argc == 3 && (strcmp(argv[1], "--test") == 0 || strcmp(argv[1], "-t") == 0)) { int joy_idx; if (!str2int(argv[2], &joy_idx)) { fprintf(stderr, "Error: JOYSTICKNUM argument must be a number, but was '%s'\n", argv[2]); exit(1); } else { test_joystick(joy_idx); } } else if (argc == 3 && (strcmp(argv[1], "--event") == 0 || strcmp(argv[1], "-e") == 0)) { int joy_idx; if (!str2int(argv[2], &joy_idx)) { fprintf(stderr, "Error: JOYSTICKNUM argument must be a number, but was '%s'\n", argv[2]); exit(1); } event_joystick(joy_idx); } else if (argc == 3 && (strcmp(argv[1], "--rumble") == 0 || strcmp(argv[1], "-r") == 0)) { int idx; if (!str2int(argv[2], &idx)) { fprintf(stderr, "Error: JOYSTICKNUM argument must be a number, but was '%s'\n", argv[2]); exit(1); } else { test_rumble(idx); } } else { fprintf(stderr, "%s: unknown arguments\n", argv[0]); fprintf(stderr, "Try '%s --help' for more informations\n", argv[0]); } } }