diff options
-rw-r--r-- | backends/dc/dcmain.cpp | 4 | ||||
-rw-r--r-- | base/game.h | 14 | ||||
-rw-r--r-- | base/gameDetector.cpp | 77 | ||||
-rw-r--r-- | base/gameDetector.h | 13 | ||||
-rw-r--r-- | base/main.cpp | 80 | ||||
-rw-r--r-- | common/system.cpp | 2 | ||||
-rw-r--r-- | gui/launcher.cpp | 8 |
7 files changed, 102 insertions, 96 deletions
diff --git a/backends/dc/dcmain.cpp b/backends/dc/dcmain.cpp index 67081533b3..83544ae7c6 100644 --- a/backends/dc/dcmain.cpp +++ b/backends/dc/dcmain.cpp @@ -24,7 +24,7 @@ #include <common/stdafx.h> #include <common/scummsys.h> #include <base/engine.h> -#include <base/gameDetector.h> +#include <base/game.h> #include <base/main.h> #include <base/plugins.h> #include "dc.h" @@ -224,7 +224,7 @@ int DCLauncherDialog::runModal() ConfMan.set("path", dir, base); // Set the target. - GameDetector::setTarget(base); + Base::setTarget(base); return 0; } 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 diff --git a/common/system.cpp b/common/system.cpp index 642012badc..8b40114630 100644 --- a/common/system.cpp +++ b/common/system.cpp @@ -25,8 +25,6 @@ #include "backends/intern.h" -#include "base/gameDetector.h" - #include "gui/message.h" #include "common/config-manager.h" diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 73f74924a0..26d5e38bfd 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -24,7 +24,7 @@ #include "backends/fs/fs.h" #include "base/engine.h" -#include "base/gameDetector.h" +#include "base/game.h" #include "base/plugins.h" #include "base/version.h" @@ -538,7 +538,7 @@ void LauncherDialog::updateListing() { if (gameid.empty()) gameid = iter->_key; if (description.empty()) { - GameDescriptor g = GameDetector::findGame(gameid); + GameDescriptor g = Base::findGame(gameid); if (!g.description.empty()) description = g.description; } @@ -696,7 +696,7 @@ void LauncherDialog::editGame(int item) { String gameId(ConfMan.get("gameid", _domains[item])); if (gameId.empty()) gameId = _domains[item]; - EditGameDialog editDialog(_domains[item], GameDetector::findGame(gameId).description); + EditGameDialog editDialog(_domains[item], Base::findGame(gameId).description); if (editDialog.runModal() > 0) { // User pressed OK, so make changes permanent @@ -737,7 +737,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat case kListItemDoubleClickedCmd: // Print out what was selected assert(item >= 0); - GameDetector::setTarget(_domains[item]); + Base::setTarget(_domains[item]); close(); break; case kListSelectionChangedCmd: |