aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/dc/dcmain.cpp4
-rw-r--r--base/game.h14
-rw-r--r--base/gameDetector.cpp77
-rw-r--r--base/gameDetector.h13
-rw-r--r--base/main.cpp80
-rw-r--r--common/system.cpp2
-rw-r--r--gui/launcher.cpp8
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: