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: | 
