Merged back changes from 0.3.x branch
[supertux.git] / src / main.cpp
index 8f1f50d..5936bad 100644 (file)
@@ -55,6 +55,7 @@
 #include "physfs/physfs_sdl.hpp"
 #include "random_generator.hpp"
 #include "worldmap/worldmap.hpp"
+#include "binreloc/binreloc.h"
 
 SDL_Surface* screen = 0;
 JoystickKeyboardController* main_controller = 0;
@@ -176,9 +177,14 @@ static void init_physfs(const char* argv0)
 #if defined(APPDATADIR) || defined(ENABLE_BINRELOC)
     std::string datadir;
 #ifdef ENABLE_BINRELOC
-    char* brdatadir = br_strcat(DATADIR, "/" PACKAGE_NAME);
-    datadir = brdatadir;
-    free(brdatadir);
+
+    char* dir;
+    br_init (NULL); 
+    dir = br_find_data_dir(APPDATADIR); 
+    datadir = dir;
+    datadir += "/" PACKAGE_NAME;
+    free(dir); 
+
 #else
     datadir = APPDATADIR;
 #endif
@@ -208,12 +214,36 @@ static void print_usage(const char* argv0)
             "  --disable-music              Disable music\n"
             "  --help                       Show this help message\n"
             "  --version                    Display SuperTux version and quit\n"
+            "  --console                    Enable ingame scripting console\n"
             "  --show-fps                   Display framerate in levels\n"
             "  --record-demo FILE LEVEL     Record a demo to FILE\n"
             "  --play-demo FILE LEVEL       Play a recorded demo\n"
             "\n"));
 }
 
+/**
+ * Options that should be evaluated prior to any initializations at all go here
+ */
+static bool pre_parse_commandline(int argc, char** argv)
+{
+  for(int i = 1; i < argc; ++i) {
+    std::string arg = argv[i];
+
+    if(arg == "--help") {
+      print_usage(argv[0]);
+      return true;
+    } else if(arg == "--version") {
+      std::cout << PACKAGE_NAME << " " << PACKAGE_VERSION << std::endl;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+/**
+ * Options that should be evaluated after config is read go here
+ */
 static bool parse_commandline(int argc, char** argv)
 {
   for(int i = 1; i < argc; ++i) {
@@ -235,6 +265,8 @@ static bool parse_commandline(int argc, char** argv)
       }
     } else if(arg == "--show-fps") {
       config->show_fps = true;
+    } else if(arg == "--console") {
+      config->console_enabled = true;
     } else if(arg == "--disable-sfx") {
       config->sound_enabled = false;
     } else if(arg == "--disable-music") {
@@ -253,12 +285,6 @@ static bool parse_commandline(int argc, char** argv)
       config->record_demo = argv[++i];
     } else if(arg == "-d") {
       config->enable_script_debugger = true;
-    } else if(arg == "--help") {
-      print_usage(argv[0]);
-      return true;
-    } else if(arg == "--version") {
-      log_info << PACKAGE_NAME << " " << PACKAGE_VERSION << std::endl;
-      return true;
     } else if(arg[0] != '-') {
       config->start_level = arg;
     } else {
@@ -444,6 +470,10 @@ int main(int argc, char** argv)
   int result = 0;
 
   try {
+
+    if(pre_parse_commandline(argc, argv))
+      return 0;
+
     Console::instance = new Console();
     init_physfs(argv[0]);
     init_sdl();