aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp25
-rw-r--r--src/settings.h10
2 files changed, 31 insertions, 4 deletions
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:"<<std::endl;
for(core::map<std::string, ValueSpec>::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."<<std::endl;
+ commanded_world = commanded_world.substr(
+ 0, commanded_world.size()-worldmt.size());
+ }
+ }
+
// Gamespec
SubgameSpec commanded_gamespec;
if(cmd_args.exists("gameid")){
@@ -1065,7 +1079,9 @@ int main(int argc, char *argv[])
*/
std::string address = g_settings->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<std::string, ValueSpec> &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 \""
<<argname<<"\": --<option> expected."<<std::endl;
return false;