src/Application.cc
branchnew_graphics
changeset 418 194bc810a570
parent 417 c503e0c6a740
child 426 510c83aab425
--- a/src/Application.cc	Thu Jan 22 01:53:05 2009 +0200
+++ b/src/Application.cc	Thu Jan 22 02:38:33 2009 +0200
@@ -28,6 +28,7 @@
     ARG_VERSION         = 0xff02,
     ARG_TERRAIN_SEED    = 0xff03,
     ARG_TERRAIN_SIZE    = 0xff04,
+    ARG_LOG_LEVEL       = 0xff05,
 
 };
 
@@ -90,6 +91,9 @@
 
     
     args.add_group("General");
+    args.add_option(ARG_LOG_LEVEL, "log-level", "LEVEL",
+            "set maximum log level to one of FATAL/ERROR/WARN/INFO/DEBUG");
+
     args.add_option(ARG_HELP, "help", "",
             "display argument help and exit");
 
@@ -116,6 +120,10 @@
                 args.print_help();
                 return false;
 
+            case ARG_LOG_LEVEL:
+                engine.log_level = parse_arg_loglevel(args.get_argument(), "--log-level");
+                break;
+
 #if NETWORK_ENABLED                
             case ARG_PORT:
                 net_port = args.get_argument();
@@ -218,6 +226,27 @@
     return PixelDimensions(w, h);
 }
 
+LogLevel Main::parse_arg_loglevel (const std::string &arg_val, const char *arg_name) {
+    // brute-force if-elseif
+    if (arg_val == "FATAL")
+        return FATAL;
+
+    else if (arg_val == "ERROR")
+        return ERROR;
+
+    else if (arg_val == "WARN")
+        return WARN;
+
+    else if (arg_val == "INFO")
+        return INFO;
+
+    else if (arg_val == "DEBUG")
+        return DEBUG;
+
+    else
+        throw ArgumentError(std::string() + "invalid log level for " + arg_name + ": " + arg_val);
+}
+
 #if GRAPHICS_ENABLED
 void Main::dump_display_modes (void) {
     // get the list of display modes from graphics
@@ -271,7 +300,7 @@
             return 0;
 
         // our engine
-        Engine engine;
+        Engine engine(this->engine);
 
         // setup game unless client
         if (net_connect.empty())