Allow directly supplying world as a parameter, including world.mt
authorPerttu Ahola <celeron55@gmail.com>
Mon, 12 Mar 2012 23:32:21 +0000 (01:32 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 12 Mar 2012 23:46:19 +0000 (01:46 +0200)
src/main.cpp
src/settings.h

index 4ce73f633df6a103a752297d9c20c9adf72c3fd3..e01e59a332aa8005a7abc81942d91ed16f8321bf 100644 (file)
@@ -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;
index 0b828e2a5a09356e1501758ca9444e24818965ec..b95fbd1845ef4f5eae88ba24f4160b587882134f 100644 (file)
@@ -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;