void winSaveKeys() { for(int i = 0; i < JOYPADS; i++) { winSaveKey("Left", i, theApp.input->joypaddata[JOYPAD(i,KEY_LEFT)]); winSaveKey("Right", i, theApp.input->joypaddata[JOYPAD(i,KEY_RIGHT)]); winSaveKey("Up", i, theApp.input->joypaddata[JOYPAD(i,KEY_UP)]); winSaveKey("Speed", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_SPEED)]); winSaveKey("Capture", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_CAPTURE)]); winSaveKey("GS", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_GS)]); winSaveKey("Down", i, theApp.input->joypaddata[JOYPAD(i,KEY_DOWN)]); winSaveKey("A", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_A)]); winSaveKey("B", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_B)]); winSaveKey("L", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_L)]); winSaveKey("R", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_R)]); winSaveKey("Start", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_START)]); winSaveKey("Select", i, theApp.input->joypaddata[JOYPAD(i,KEY_BUTTON_SELECT)]); } regSetDwordValue("joyVersion", 1); winSaveKey("Motion_Left", theApp.input->joypaddata[MOTION(KEY_LEFT)]); winSaveKey("Motion_Right", theApp.input->joypaddata[MOTION(KEY_RIGHT)]); winSaveKey("Motion_Up", theApp.input->joypaddata[MOTION(KEY_UP)]); winSaveKey("Motion_Down", theApp.input->joypaddata[MOTION(KEY_DOWN)]); }
void* processEvent(VM* vm, int r, SDL_Event * e) { VAL idris_event; SDL_Event event = *e; idris_requireAlloc(128); // Conservative! if (r==0) { idris_constructor(idris_event, vm, 0, 0, 0); // Nothing } else { VAL ievent = NULL; switch(event.type) { case SDL_KEYDOWN: ievent = KEY(vm, 0, event.key.keysym.sym); break; case SDL_KEYUP: ievent = KEY(vm, 1, event.key.keysym.sym); break; case SDL_MOUSEMOTION: ievent = MOTION(vm, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; case SDL_MOUSEBUTTONDOWN: ievent = BUTTON(vm, 3, event.button.button, event.button.x, event.button.y); break; case SDL_MOUSEBUTTONUP: ievent = BUTTON(vm, 4, event.button.button, event.button.x, event.button.y); break; case SDL_MOUSEWHEEL: idris_constructor(ievent, vm, 5, 1, 0); idris_setConArg(ievent, 0, MKINT((intptr_t) event.wheel.y)); break; case SDL_WINDOWEVENT: switch(event.window.event) { case SDL_WINDOWEVENT_RESIZED: ievent = RESIZE(vm, event.window.data1, event.window.data2); break; default: // TODO: other window event idris_constructor(ievent, vm, 8, 0, 0); } break; case SDL_QUIT: idris_constructor(ievent, vm, 7, 0, 0); break; default: idris_constructor(idris_event, vm, 0, 0, 0); // Nothing idris_doneAlloc(vm); return idris_event; } idris_constructor(idris_event, vm, 1, 1, 0); idris_setConArg(idris_event, 0, ievent); // Just ievent } idris_doneAlloc(vm); return idris_event; }