int vm_main(int argc, char *argv[]) { // Enable native language support, i.e. internationalization #ifdef ENABLE_NLS std::setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif int c; // scan for the two main standard GNU options for (c = 0; c < argc; c++) { if (strcmp("--help", argv[c]) == 0) { exit(EXIT_SUCCESS); } if (strcmp("--version", argv[c]) == 0) { printf (_("Gnash gprocessor version: %s, Gnash version: %s\n"), GPROC_VERSION, VERSION); exit(EXIT_SUCCESS); } } std::vector<std::string> infiles; //RcInitFile& rcfile = RcInitFile::getDefaultInstance(); //rcfile.loadFiles(); if (rcfile.verbosityLevel() > 0) { dbglogfile.setVerbosity(rcfile.verbosityLevel()); } dbglogfile.setLogFilename(rcfile.getDebugLog()); if (rcfile.useWriteLog()) { dbglogfile.setWriteDisk(true); } if (rcfile.useActionDump()) { dbglogfile.setActionDump(true); dbglogfile.setVerbosity(); } if (rcfile.useParserDump()) { dbglogfile.setParserDump(true); dbglogfile.setVerbosity(); } while ((c = getopt (argc, argv, ":hwvapr:gf:d:")) != -1) { switch (c) { case 'h': dbglogfile.removeLog(); exit(EXIT_SUCCESS); case 'w': s_do_output = true; break; case 'v': dbglogfile.setVerbosity(); log_debug (_("Verbose output turned on")); break; case 'g': #ifdef USE_DEBUGGER debugger.enabled(true); debugger.console(); log_debug (_("Setting debugger ON")); #else log_error (_("The debugger has been disabled at configuration time")); #endif case 'a': #if VERBOSE_ACTION dbglogfile.setActionDump(true); #else log_error (_("Verbose actions disabled at compile time")); #endif break; case 'p': #if VERBOSE_PARSE dbglogfile.setParserDump(true); #else log_error (_("Verbose parsing disabled at compile time")); #endif break; case 'r': allowed_end_hits = strtol(optarg, NULL, 0); break; case 'd': delay = strtol(optarg, NULL, 0)*1000; // delay is in microseconds // this will be recognized as a request to run at FPS speed if ( delay < 0 ) delay = -1; break; case 'f': limit_advances = strtol(optarg, NULL, 0); break; case ':': fprintf(stderr, "Missing argument for switch ``%c''\n", optopt); exit(EXIT_FAILURE); case '?': default: fprintf(stderr, "Unknown switch ``%c''\n", optopt); exit(EXIT_FAILURE); } } // get the file name from the command line while (optind < argc) { infiles.push_back(argv[optind]); optind++; } // No file names were supplied if (infiles.empty()) { std::cerr << "no input files" << std::endl; dbglogfile.removeLog(); exit(EXIT_FAILURE); } if (infiles.size() > 1) { // We're not ready for multiple runs yet. std::cerr << "Multiple input files not supported." << std::endl; dbglogfile.removeLog(); exit(EXIT_FAILURE); } #ifdef USE_FFMPEG std::auto_ptr<media::MediaHandler> handler( new gnash::media::ffmpeg::MediaHandlerFfmpeg() ); #elif defined(USE_GST) std::auto_ptr<media::MediaHandler> handler( new gnash::media::gst::MediaHandlerGst() ); #else std::cerr << "Neither SOUND_SDL nor SOUND_GST defined" << std::endl; exit(EXIT_FAILURE); #endif gnash::media::MediaHandler::set(handler); boost::shared_ptr<sound::sound_handler> soundHandler( new sound::NullSoundHandler()); std::vector<movie_data> data; // Play through all the movies. for (std::vector<std::string>::const_iterator i = infiles.begin(), e = infiles.end(); i != e; ++i) { RunResources runResources(*i); runResources.setSoundHandler(soundHandler); boost::intrusive_ptr<gnash::movie_definition> m = play_movie(*i, runResources); if (!m) { if (s_stop_on_errors) { // Fail. std::cerr << "error playing through movie " << *i << std::endl; std::exit(EXIT_FAILURE); } } movie_data md; md.m_movie = m.get(); md.m_filename = *i; data.push_back(md); } return 0; }
void DreamWebEngine::processEvents() { if (_eventMan->shouldQuit()) { quit(); return; } soundHandler(); Common::Event event; int softKey, hardKey; while (_eventMan->pollEvent(event)) { switch(event.type) { case Common::EVENT_RTL: quit(); break; case Common::EVENT_KEYDOWN: if (event.kbd.flags & Common::KBD_CTRL) { switch (event.kbd.keycode) { case Common::KEYCODE_d: _console->attach(); _console->onFrame(); break; case Common::KEYCODE_f: setSpeed(_speed != 20? 20: 1); break; case Common::KEYCODE_g: _turbo = !_turbo; break; case Common::KEYCODE_c: //skip statue puzzle _symbolBotNum = 3; _symbolTopNum = 5; break; default: break; } return; //do not pass ctrl + key to the engine } // Some parts of the ASM code uses the hardware key // code directly. We don't have that code, so we fake // it for the keys where it's needed and assume it's // 0 (which is actually an invalid value, as far as I // know) otherwise. hardKey = 0; switch (event.kbd.keycode) { case Common::KEYCODE_ESCAPE: hardKey = 1; break; case Common::KEYCODE_SPACE: hardKey = 57; break; default: hardKey = 0; break; } _lastHardKey = hardKey; // The rest of the keys are converted to ASCII. This // is fairly restrictive, and eventually we may want // to let through more keys. I think this is mostly to // keep weird glyphs out of savegame names. softKey = 0; if (event.kbd.keycode >= Common::KEYCODE_a && event.kbd.keycode <= Common::KEYCODE_z) { softKey = event.kbd.ascii & ~0x20; } else if (event.kbd.keycode == Common::KEYCODE_MINUS || event.kbd.keycode == Common::KEYCODE_SPACE || (event.kbd.keycode >= Common::KEYCODE_0 && event.kbd.keycode <= Common::KEYCODE_9)) { softKey = event.kbd.ascii; } else if (event.kbd.keycode >= Common::KEYCODE_KP0 && event.kbd.keycode <= Common::KEYCODE_KP9) { softKey = event.kbd.keycode - Common::KEYCODE_KP0 + '0'; } else if (event.kbd.keycode == Common::KEYCODE_KP_MINUS) { softKey = '-'; } else if (event.kbd.keycode == Common::KEYCODE_BACKSPACE || event.kbd.keycode == Common::KEYCODE_DELETE) { softKey = 8; } else if (event.kbd.keycode == Common::KEYCODE_RETURN || event.kbd.keycode == Common::KEYCODE_KP_ENTER) { softKey = 13; } if (softKey) keyPressed(softKey); break; default: break; } } }