From 5d5c02d66c680ef442f68138bae6a403e6bc3336 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 4 May 2006 23:24:09 +0000 Subject: Moved GameDetector::setTarget & findGame to the new namespace Base; moved their declaration to base/game.h, their implementation to base/main.cpp (both until we can come up with a better location). Also moved detectMain into main.cpp, where it now is a local static function svn-id: r22346 --- base/game.h | 14 +++++++++ base/gameDetector.cpp | 77 ++++--------------------------------------------- base/gameDetector.h | 13 --------- base/main.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 96 insertions(+), 88 deletions(-) (limited to 'base') diff --git a/base/game.h b/base/game.h index 2510179c14..066781bdf6 100644 --- a/base/game.h +++ b/base/game.h @@ -53,4 +53,18 @@ struct GameDescriptor { gameid(g.gameid), description(g.description) {} }; + +class Plugin; + +namespace Base { + +// TODO: Find a better place for this function. +GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin = NULL); + +// TODO: Find a better place for this function. +void setTarget(const Common::String &name); + +} // End of namespace Base + + #endif diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp index 1adf73f9b4..1984c2d1ea 100644 --- a/base/gameDetector.cpp +++ b/base/gameDetector.cpp @@ -252,26 +252,6 @@ void GameDetector::registerDefaults() { #endif // #ifdef DEFAULT_SAVE_PATH } -GameDescriptor GameDetector::findGame(const String &gameName, const Plugin **plugin) { - // Find the GameDescriptor for this target - const PluginList &plugins = PluginManager::instance().getPlugins(); - GameDescriptor result; - - if (plugin) - *plugin = 0; - - PluginList::const_iterator iter = plugins.begin(); - for (iter = plugins.begin(); iter != plugins.end(); ++iter) { - result = (*iter)->findGame(gameName.c_str()); - if (!result.gameid.empty()) { - if (plugin) - *plugin = *iter; - break; - } - } - return result; -} - // // Various macros used by the command line parser. // @@ -545,8 +525,8 @@ void GameDetector::processSettings(Common::String &target, Common::StringMap &se // domain (i.e. a target) matching this argument, or alternatively // whether there is a gameid matching that name. if (!target.empty()) { - if (ConfMan.hasGameDomain(target) || findGame(target).gameid.size() > 0) { - setTarget(target); + if (ConfMan.hasGameDomain(target) || Base::findGame(target).gameid.size() > 0) { + Base::setTarget(target); } else { usage("Unrecognized game target '%s'", target.c_str()); } @@ -570,11 +550,11 @@ void GameDetector::processSettings(Common::String &target, Common::StringMap &se // Finally, store the command line settings into the config manager. for (Common::StringMap::const_iterator x = settings.begin(); x != settings.end(); ++x) { - String key(x->_key); - String value(x->_value); + Common::String key(x->_key); + Common::String value(x->_value); // Replace any "-" in the key by "_" (e.g. change "save-slot" to "save_slot"). - for (String::iterator c = key.begin(); c != key.end(); ++c) + for (Common::String::iterator c = key.begin(); c != key.end(); ++c) if (*c == '-') *c = '_'; @@ -582,50 +562,3 @@ void GameDetector::processSettings(Common::String &target, Common::StringMap &se ConfMan.set(key, value, Common::ConfigManager::kTransientDomain); } } - - -void GameDetector::setTarget(const String &target) { - ConfMan.setActiveDomain(target); - - // Make sure the gameid is set in the config manager, and that it is lowercase. - String gameid(target); - if (ConfMan.hasKey("gameid")) - gameid = ConfMan.get("gameid"); - gameid.toLowercase(); - ConfMan.set("gameid", gameid); -} - -const Plugin *GameDetector::detectMain() { - const Plugin *plugin = 0; - - if (ConfMan.getActiveDomainName().empty()) { - warning("No game was specified..."); - return 0; - } - - printf("Looking for %s\n", ConfMan.get("gameid").c_str()); - GameDescriptor game = findGame(ConfMan.get("gameid"), &plugin); - - if (plugin == 0) { - printf("Failed game detection\n"); - warning("%s is an invalid target. Use the --list-targets option to list targets", ConfMan.getActiveDomainName().c_str()); - return 0; - } - - printf("Trying to start game '%s'\n", game.description.c_str()); - - String gameDataPath(ConfMan.get("path")); - if (gameDataPath.empty()) { - warning("No path was provided. Assuming the data files are in the current directory"); - gameDataPath = "./"; - } else if (gameDataPath.lastChar() != '/' -#if defined(__MORPHOS__) || defined(__amigaos4__) - && gameDataPath.lastChar() != ':' -#endif - && gameDataPath.lastChar() != '\\') { - gameDataPath += '/'; - ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain); - } - - return plugin; -} diff --git a/base/gameDetector.h b/base/gameDetector.h index 89793cf48c..93f3668137 100644 --- a/base/gameDetector.h +++ b/base/gameDetector.h @@ -28,24 +28,11 @@ #include "common/config-manager.h" #include "base/game.h" -class Plugin; - - class GameDetector { - typedef Common::String String; - public: static void registerDefaults(); - static Common::String parseCommandLine(Common::StringMap &settings, int argc, char **argv); static void processSettings(Common::String &target, Common::StringMap &settings); - static const Plugin *detectMain(); - -public: - static GameDescriptor findGame(const String &gameName, const Plugin **plugin = NULL); - -//protected: - static void setTarget(const String &name); // TODO: This should be protected }; #endif diff --git a/base/main.cpp b/base/main.cpp index dc7546d73f..759aec4699 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -65,6 +65,45 @@ #include "gui/Actions.h" #endif + +namespace Base { + +// TODO: Find a better place for this function. +GameDescriptor findGame(const Common::String &gameName, const Plugin **plugin) { + // Find the GameDescriptor for this target + const PluginList &plugins = PluginManager::instance().getPlugins(); + GameDescriptor result; + + if (plugin) + *plugin = 0; + + PluginList::const_iterator iter = plugins.begin(); + for (iter = plugins.begin(); iter != plugins.end(); ++iter) { + result = (*iter)->findGame(gameName.c_str()); + if (!result.gameid.empty()) { + if (plugin) + *plugin = *iter; + break; + } + } + return result; +} + +// TODO: Find a better place for this function. +void setTarget(const Common::String &target) { + ConfMan.setActiveDomain(target); + + // Make sure the gameid is set in the config manager, and that it is lowercase. + Common::String gameid(target); + if (ConfMan.hasKey("gameid")) + gameid = ConfMan.get("gameid"); + gameid.toLowercase(); + ConfMan.set("gameid", gameid); +} + +} // End of namespace Base + + /** List all supported game IDs, i.e. all games which any loaded plugin supports. */ void listGames() { const PluginList &plugins = PluginManager::instance().getPlugins(); @@ -99,7 +138,7 @@ void listTargets() { // to find the proper desc. In fact, the platform probably should // be taken into account, too. Common::String gameid(name); - GameDescriptor g = GameDetector::findGame(gameid); + GameDescriptor g = Base::findGame(gameid); if (g.description.size() > 0) description = g.description; } @@ -164,6 +203,41 @@ static bool launcherDialog(OSystem &system) { return (dlg.runModal() != -1); } +static const Plugin *detectMain() { + const Plugin *plugin = 0; + + if (ConfMan.getActiveDomainName().empty()) { + warning("No game was specified..."); + return 0; + } + + printf("Looking for %s\n", ConfMan.get("gameid").c_str()); + GameDescriptor game = Base::findGame(ConfMan.get("gameid"), &plugin); + + if (plugin == 0) { + printf("Failed game detection\n"); + warning("%s is an invalid target. Use the --list-targets option to list targets", ConfMan.getActiveDomainName().c_str()); + return 0; + } + + printf("Trying to start game '%s'\n", game.description.c_str()); + + Common::String gameDataPath(ConfMan.get("path")); + if (gameDataPath.empty()) { + warning("No path was provided. Assuming the data files are in the current directory"); + gameDataPath = "./"; + } else if (gameDataPath.lastChar() != '/' +#if defined(__MORPHOS__) || defined(__amigaos4__) + && gameDataPath.lastChar() != ':' +#endif + && gameDataPath.lastChar() != '\\') { + gameDataPath += '/'; + ConfMan.set("path", gameDataPath, Common::ConfigManager::kTransientDomain); + } + + return plugin; +} + static int runGame(const Plugin *plugin, OSystem &system, const Common::String &edebuglevels) { // We add it here, so MD5-based detection will be able to // read mixed case files @@ -197,7 +271,7 @@ static int runGame(const Plugin *plugin, OSystem &system, const Common::String & // Set the window caption to the game name Common::String caption(ConfMan.get("description")); - Common::String desc = GameDetector::findGame(ConfMan.get("gameid")).description; + Common::String desc = Base::findGame(ConfMan.get("gameid")).description; if (caption.empty() && !desc.empty()) caption = desc; if (caption.empty()) @@ -424,7 +498,7 @@ extern "C" int scummvm_main(int argc, char *argv[]) { // cleanly, so this is now enabled to encourage people to fix bits :) while (running) { // Verify the given game name is a valid supported game - const Plugin *plugin = GameDetector::detectMain(); + const Plugin *plugin = detectMain(); if (plugin) { // Unload all plugins not needed for this game, // to save memory -- cgit v1.2.3