From 6a1f8e0cbd628b1d6e833247d7f55107dac13de8 Mon Sep 17 00:00:00 2001 From: Mathieu Schroeter Date: Fri, 11 Aug 2017 22:07:43 +0200 Subject: [PATCH] Add cmdline options for some stuff You can set the speedrate, timerinterval, fullscreen and the renderer exactly like with the config.ini file. Note that the timerinterval can be set in the ini file but it's not really public. The default interval is a good choice (50 ms). --- src/blupi.cxx | 132 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 100 insertions(+), 32 deletions(-) diff --git a/src/blupi.cxx b/src/blupi.cxx index 4b68cf3..ddee278 100644 --- a/src/blupi.cxx +++ b/src/blupi.cxx @@ -47,12 +47,22 @@ CSound * g_pSound = nullptr; // sound principal CMovie * g_pMovie = nullptr; // movie principal CDecor * g_pDecor = nullptr; -bool g_bFullScreen = false; // false si mode de test -Sint32 g_speedRate = 1; -Sint32 g_timerInterval = 50; // inverval = 50ms -bool g_bTermInit = false; // initialisation en cours -Uint32 g_lastPhase = 999; -int g_rendererType = 0; +bool g_bFullScreen = false; // false si mode de test +Sint32 g_speedRate = 1; +Sint32 g_timerInterval = 50; // inverval = 50ms +int g_rendererType = 0; + +enum Settings { + SETTING_FULLSCREEN = 1 << 0, + SETTING_SPEEDRATE = 1 << 1, + SETTING_TIMERINTERVAL = 1 << 2, + SETTING_RENDERER = 1 << 3, +}; + +static int g_settingsOverload = 0; + +bool g_bTermInit = false; // initialisation en cours +Uint32 g_lastPhase = 999; static bool g_pause; /** @@ -95,41 +105,53 @@ static bool ReadConfig () buffer[nb] = 0; fclose (file); - pText = strstr (buffer, "SpeedRate="); - if (pText != nullptr) + if (!(g_settingsOverload & SETTING_SPEEDRATE)) { - g_speedRate = GetNum (pText + 10); - if (g_speedRate < 1) - g_speedRate = 1; - if (g_speedRate > 2) - g_speedRate = 2; + pText = strstr (buffer, "SpeedRate="); + if (pText != nullptr) + { + g_speedRate = GetNum (pText + 10); + if (g_speedRate < 1) + g_speedRate = 1; + if (g_speedRate > 2) + g_speedRate = 2; + } } - pText = strstr (buffer, "Timer="); - if (pText != nullptr) + if (!(g_settingsOverload & SETTING_TIMERINTERVAL)) { - g_timerInterval = GetNum (pText + 6); - if (g_timerInterval < 10) - g_timerInterval = 10; - if (g_timerInterval > 1000) - g_timerInterval = 1000; + pText = strstr (buffer, "Timer="); + if (pText != nullptr) + { + g_timerInterval = GetNum (pText + 6); + if (g_timerInterval < 10) + g_timerInterval = 10; + if (g_timerInterval > 1000) + g_timerInterval = 1000; + } } - pText = strstr (buffer, "FullScreen="); - if (pText != nullptr) + if (!(g_settingsOverload & SETTING_FULLSCREEN)) { - g_bFullScreen = !!GetNum (pText + 11); - if (g_bFullScreen != 0) - g_bFullScreen = 1; + pText = strstr (buffer, "FullScreen="); + if (pText != nullptr) + { + g_bFullScreen = !!GetNum (pText + 11); + if (g_bFullScreen != 0) + g_bFullScreen = 1; + } } - pText = strstr (buffer, "Renderer="); - if (pText) + if (!(g_settingsOverload & SETTING_RENDERER)) { - if (!strncmp (pText + 9, "software", 8)) - g_rendererType = SDL_RENDERER_SOFTWARE; - else if (!strncmp (pText + 9, "accelerated", 11)) - g_rendererType = SDL_RENDERER_ACCELERATED; + pText = strstr (buffer, "Renderer="); + if (pText) + { + if (!strncmp (pText + 9, "software", 8)) + g_rendererType = SDL_RENDERER_SOFTWARE; + else if (!strncmp (pText + 9, "accelerated", 11)) + g_rendererType = SDL_RENDERER_ACCELERATED; + } } return true; @@ -394,8 +416,24 @@ static void InitFail (const char * msg) static int parseArgs (int argc, char * argv[], bool & exit) { argagg::parser argparser{{ - {"help", {"-h", "--help"}, "print this help message and axit", 0}, + {"help", {"-h", "--help"}, "print this help message and exit", 0}, {"version", {"-V", "--version"}, "print version and exit", 0}, + {"speedrate", + {"-s", "--speed-rate"}, + "change the speed rate [1;2] (default: 1)", + 1}, + {"timerinterval", + {"-t", "--timer-interval"}, + "set the timer interval (refresh)", + 1}, + {"fullscreen", + {"-f", "--fullscreen"}, + "load in fullscreen [on;off] (default: on)", + 1}, + {"renderer", + {"-r", "--renderer"}, + "set a renderer [auto;software;accelerated] (default: auto)", + 1}, }}; argagg::parser_results args; @@ -423,6 +461,36 @@ static int parseArgs (int argc, char * argv[], bool & exit) return EXIT_SUCCESS; } + if (args["speedrate"]) + { + g_speedRate = args["speedrate"]; + g_settingsOverload |= SETTING_SPEEDRATE; + } + + if (args["timerinterval"]) + { + g_timerInterval = args["timerinterval"]; + g_settingsOverload |= SETTING_TIMERINTERVAL; + } + + if (args["fullscreen"]) + { + g_bFullScreen = + args["fullscreen"].as () != std::string ("off"); + g_settingsOverload |= SETTING_FULLSCREEN; + } + + if (args["renderer"]) + { + if (args["renderer"].as () == "auto") + g_rendererType = 0; + else if (args["renderer"].as () == "software") + g_rendererType = SDL_RENDERER_SOFTWARE; + else if (args["renderer"].as () == "accelerated") + g_rendererType = SDL_RENDERER_ACCELERATED; + g_settingsOverload |= SETTING_RENDERER; + } + return EXIT_SUCCESS; }