From 71a3c2fcd13051dbaed45c69107a6e6b4a94cfe8 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Tue, 13 Mar 2012 01:32:21 +0200 Subject: Allow directly supplying world as a parameter, including world.mt --- src/main.cpp | 25 +++++++++++++++++++++---- src/settings.h | 10 ++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index 4ce73f633..e01e59a33 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -806,7 +806,7 @@ int main(int argc, char *argv[]) bool ret = cmd_args.parseCommandLine(argc, argv, allowed_options); - if(ret == false || cmd_args.getFlag("help")) + if(ret == false || cmd_args.getFlag("help") || cmd_args.exists("nonopt1")) { dstream<<"Allowed options:"<::Iterator @@ -979,9 +979,23 @@ int main(int argc, char *argv[]) commanded_world = cmd_args.get("world"); else if(cmd_args.exists("map-dir")) commanded_world = cmd_args.get("map-dir"); + else if(cmd_args.exists("nonopt0")) + commanded_world = cmd_args.get("nonopt0"); else if(g_settings->exists("map-dir")) commanded_world = g_settings->get("map-dir"); + // Strip world.mt from commanded_world + { + std::string worldmt = "world.mt"; + if(commanded_world.size() > worldmt.size() && + commanded_world.substr(commanded_world.size()-worldmt.size()) + == worldmt){ + dstream<<"Supplied world.mt file - stripping it off."<get("address"); - if(cmd_args.exists("address")) + if(commanded_world != "") + address = ""; + else if(cmd_args.exists("address")) address = cmd_args.get("address"); else if(cmd_args.exists("world")) address = ""; @@ -1294,9 +1310,10 @@ int main(int argc, char *argv[]) std::string gameid = getWorldGameId(commanded_world, true); if(gameid == "") gameid = g_settings->get("default_game"); - WorldSpec spec(commanded_world, "--world", gameid); + WorldSpec spec(commanded_world, "[--world parameter]", + gameid); worldspecs.push_back(spec); - menudata.selected_world = menudata.worlds.size()-1; + menudata.selected_world = worldspecs.size()-1; } // Copy worldspecs to menu menudata.worlds = worldspecs; diff --git a/src/settings.h b/src/settings.h index 0b828e2a5..b95fbd184 100644 --- a/src/settings.h +++ b/src/settings.h @@ -330,6 +330,7 @@ public: bool parseCommandLine(int argc, char *argv[], core::map &allowed_options) { + int nonopt_index = 0; int i=1; for(;;) { @@ -338,6 +339,15 @@ public: std::string argname = argv[i]; if(argname.substr(0, 2) != "--") { + // If option doesn't start with -, read it in as nonoptX + if(argname[0] != '-'){ + std::string name = "nonopt"; + name += itos(nonopt_index); + set(name, argname); + nonopt_index++; + i++; + continue; + } errorstream<<"Invalid command-line parameter \"" < expected."<