diff options
| -rw-r--r-- | base/commandLine.cpp | 35 | ||||
| -rw-r--r-- | base/commandLine.h | 2 | ||||
| -rw-r--r-- | base/main.cpp | 6 | ||||
| -rw-r--r-- | common/error.h | 10 | 
4 files changed, 34 insertions, 19 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp index 8fa2f54b03..207ff79c4c 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -602,7 +602,9 @@ static void listTargets() {  }  /** List all saves states for the given target. */ -static void listSaves(const char *target) { +static Common::Error listSaves(const char *target) { +	Common::Error result = Common::kNoError; +  	// FIXME HACK  	g_system->initBackend(); @@ -627,13 +629,14 @@ static void listSaves(const char *target) {  	GameDescriptor game = EngineMan.findGame(gameid, &plugin);  	if (!plugin) { -		error("Could not find any plugin to handle target '%s' (gameid '%s')", target, gameid.c_str()); -		return; +		warning("Could not find any plugin to handle target '%s' (gameid '%s')", target, gameid.c_str()); +		return Common::kPluginNotFound;  	}  	if (!(*plugin)->hasFeature(MetaEngine::kSupportsListSaves)) {  		// TODO: Include more info about the target (desc, engine name, ...) ???  		printf("ScummVM does not support listing save states for target '%s' (gameid '%s') .\n", target, gameid.c_str()); +		result = Common::kPluginNotSupportSaves;  	} else {  		// Query the plugin for a list of savegames  		SaveStateList saveList = (*plugin)->listSaves(target); @@ -643,6 +646,9 @@ static void listSaves(const char *target) {  		printf("  Slot Description                                           \n"  		       "  ---- ------------------------------------------------------\n"); +		if (saveList.size() == 0) +			result = Common::kNoSavesError; +  		for (SaveStateList::const_iterator x = saveList.begin(); x != saveList.end(); ++x) {  			printf("  %-4s %s\n", x->save_slot().c_str(), x->description().c_str());  			// TODO: Could also iterate over the full hashmap, printing all key-value pairs @@ -651,6 +657,8 @@ static void listSaves(const char *target) {  	// Revert to the old active domain  	ConfMan.setActiveDomain(oldDomain); + +	return result;  }  /** Lists all usable themes */ @@ -863,7 +871,7 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha  #endif // DISABLE_COMMAND_LINE -bool processSettings(Common::String &command, Common::StringMap &settings) { +Common::Error processSettings(Common::String &command, Common::StringMap &settings) {  #ifndef DISABLE_COMMAND_LINE @@ -872,34 +880,33 @@ bool processSettings(Common::String &command, Common::StringMap &settings) {  	// have been loaded.  	if (command == "list-targets") {  		listTargets(); -		return false; +		return Common::kNoError;  	} else if (command == "list-games") {  		listGames(); -		return false; +		return Common::kNoError;  	} else if (command == "list-saves") { -		listSaves(settings["list-saves"].c_str()); -		return false; +		return listSaves(settings["list-saves"].c_str());  	} else if (command == "list-themes") {  		listThemes(); -		return false; +		return Common::kNoError;  	} else if (command == "version") {  		printf("%s\n", gScummVMFullVersion);  		printf("Features compiled in: %s\n", gScummVMFeatures); -		return false; +		return Common::kNoError;  	} else if (command == "help") {  		printf(HELP_STRING, s_appName); -		return false; +		return Common::kNoError;  	}  #ifdef DETECTOR_TESTING_HACK  	else if (command == "test-detector") {  		runDetectorTest(); -		return false; +		return Common::kNoError;  	}  #endif  #ifdef UPGRADE_ALL_TARGETS_HACK  	else if (command == "upgrade-targets") {  		upgradeTargets(); -		return false; +		return Common::kNoError;  	}  #endif @@ -971,7 +978,7 @@ bool processSettings(Common::String &command, Common::StringMap &settings) {  		ConfMan.set(key, value, Common::ConfigManager::kTransientDomain);  	} -	return true; +	return Common::kArgumentNotProcessed;  }  } // End of namespace Base diff --git a/base/commandLine.h b/base/commandLine.h index 8801ed17d8..c7e8d8b0d0 100644 --- a/base/commandLine.h +++ b/base/commandLine.h @@ -33,7 +33,7 @@ namespace Base {  void registerDefaults();  Common::String parseCommandLine(Common::StringMap &settings, int argc, const char * const *argv); -bool processSettings(Common::String &command, Common::StringMap &settings); +Common::Error processSettings(Common::String &command, Common::StringMap &settings);  } // End of namespace Base diff --git a/base/main.cpp b/base/main.cpp index 2658d1dc67..bfb6611a91 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -340,8 +340,10 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {  	// Process the remaining command line settings. Must be done after the  	// config file and the plugins have been loaded. -	if (!Base::processSettings(command, settings)) -		return 0; +	Common::Error res; + +	if ((res = Base::processSettings(command, settings)) != Common::kArgumentNotProcessed) +		return res;  	// Init the backend. Must take place after all config data (including  	// the command line params) was read. diff --git a/common/error.h b/common/error.h index c4d383e508..7aff8d40b9 100644 --- a/common/error.h +++ b/common/error.h @@ -59,10 +59,16 @@ enum Error {  	kPathNotDirectory,			///< The specified path does not point to a directory  	kPathNotFile,				///< The specified path does not point to a file -	kCreatingFileFailed, -	kReadingFailed,				///< Failed creating a (savestate) file +	kCreatingFileFailed,		///< Failed creating a (savestate) file +	kReadingFailed,				///< Failed to read a file (permission denied?)  	kWritingFailed,				///< Failure to write data -- disk full? +	// The following are used by --list-saves +	kPluginNotFound,			///< Failed to find plugin to handle tager +	kPluginNotSupportSaves,		///< Failed if plugin does not support saves +	kNoSavesError,				///< There are no saves to show + +	kArgumentNotProcessed,		///< Used in command line parsing  	kUnknownError				///< Catch-all error, used if no other error code matches  };  | 
