int processSdlEvents(void) { SDL_Event event; resetEvents(); while (SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: return 1; break; default: keyboardEvent(&event.key,1); break; } break; case SDL_KEYUP: keyboardEvent(&event.key,0); break; case SDL_MOUSEMOTION: mouseMovedEvent(event.motion.x,event.motion.y, event.motion.xrel,event.motion.yrel); break; case SDL_MOUSEBUTTONDOWN: mouseButtonEvent(event.button.button,1); break; case SDL_MOUSEBUTTONUP: mouseButtonEvent(event.button.button,0); break; case SDL_QUIT: exit(0); break; } /* If the next event to process is of type KEYUP or * MOUSEBUTTONUP we want to stop processing here, so that * a fast up/down event be noticed by Lua. */ if (SDL_PeepEvents(&event,1,SDL_PEEKEVENT,SDL_ALLEVENTS)) { if (event.type == SDL_KEYUP || event.type == SDL_MOUSEBUTTONUP) break; /* Go to lua before processing more. */ } } /* Call the setup function, only the first time. */ if (l81.epoch == 0) { setup(); if (l81.luaerr) return l81.luaerr; } /* Call the draw function at every iteration. */ draw(); l81.epoch++; /* Refresh the screen */ if (l81.opt_show_fps) showFPS(); SDL_Flip(l81.fb->screen); /* Wait some time if the frame was produced in less than 1/FPS seconds. */ SDL_framerateDelay(&l81.fb->fps_mgr); /* Stop execution on error */ return l81.luaerr; }
/** @brief Unload real-time instrument script. * * Unloads the currently used real-time instrument script and frees all * resources allocated for that script. The sampler engine's resource manager * is used to share equivalent scripts among multiple sampler channels, and * to deallocate the parsed script once not used on any engine channel * anymore. * * Calling this method will however not clear the @c code member variable. * Thus, the script can be parsed again afterwards. */ void InstrumentScript::unload() { //dmsg(1,("InstrumentScript::unload(this=0x%llx)\n", this)); if (parserContext) dmsg(1,("Unloading current instrument script.\n")); resetEvents(); // free allocated VM execution contexts if (pEvents) { pEvents->clear(); while (!pEvents->poolIsEmpty()) { RTList<ScriptEvent>::Iterator it = pEvents->allocAppend(); if (it->execCtx) { // free VM execution context object delete it->execCtx; it->execCtx = NULL; // free C array of handler pointers delete [] it->handlers; } } pEvents->clear(); } // hand back VM representation of script if (parserContext) { AbstractInstrumentManager* pManager = dynamic_cast<AbstractInstrumentManager*>(pEngineChannel->pEngine->GetInstrumentManager()); pManager->scripts.HandBack(parserContext, pEngineChannel); parserContext = NULL; handlerInit = NULL; handlerNote = NULL; handlerRelease = NULL; handlerController = NULL; } bHasValidScript = false; }