void input_init() { assert(SDL_WasInit(SDL_INIT_JOYSTICK)==SDL_INIT_JOYSTICK); statuskeys = calloc(SDL_NUM_SCANCODES, sizeof(kstat)); int i, njoysticks; if((njoysticks=SDL_NumJoysticks())==0) return; SDL_JoystickEventState(SDL_ENABLE); statuspads = calloc(njoysticks, sizeof(jstat)); for(i=0; i<njoysticks; i++) { SDL_Joystick *j = SDL_JoystickOpen(i); if((SDL_JoystickNumAxes(j)<8) && (SDL_JoystickNumButtons(j)<20)) { statuspads[i].joy = j; statuspads[i].axis = calloc(SDL_JoystickNumAxes(j), sizeof(sword)); statuspads[i].buttons = calloc(SDL_JoystickNumButtons(j), sizeof(byte)); } else { SDL_JoystickClose(j); } } pushexit(input_free); }
void initmodules(const string basedir) { log4me_init(LOG_EMU_NONE); #ifdef WIN32 string redirect = pathcombc(strdups(basedir), "output.txt"); log4me_redirectoutput(CSTR(redirect)); strfree(redirect); #endif LIBXML_TEST_VERSION; clock_init(); // initialize SDL video if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK)<0) { log4me_error(LOG_EMU_SDL, "Unable to init SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } // make sure SDL cleans up before exit pushexit(SDL_Quit); video_init(); input_init(); seticon(getcurrentwindow()); }
void clock_init() { _clocks = lcreate(); pushexit(clock_free); }