diff --git a/desktop_version/src/Vlogging.c b/desktop_version/src/Vlogging.c index 6a17f466..666b612b 100644 --- a/desktop_version/src/Vlogging.c +++ b/desktop_version/src/Vlogging.c @@ -2,7 +2,12 @@ #include #include -#if defined(__unix__) || defined(__APPLE__) +#ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# include +# define STDOUT_IS_TTY 0 +# define STDERR_IS_TTY 0 +#elif defined(__unix__) || defined(__APPLE__) # include # define STDOUT_IS_TTY isatty(STDOUT_FILENO) # define STDERR_IS_TTY isatty(STDERR_FILENO) @@ -26,7 +31,7 @@ static int info_enabled = 1; static int warn_enabled = 1; static int error_enabled = 1; -void vlog_init(void) +static void check_color_support(void) { if (STDOUT_IS_TTY && STDERR_IS_TTY) { @@ -34,6 +39,11 @@ void vlog_init(void) } } +void vlog_init(void) +{ + check_color_support(); +} + void vlog_toggle_output(const int enable_output) { output_enabled = enable_output; @@ -147,3 +157,32 @@ SDL_PRINTF_VARARG_FUNC(1) void vlog_error(const char* text, ...) fputc('\n', stderr); } + +#ifdef _WIN32 +void vlog_open_console(void) +{ + static int run_once = 0; + if (run_once) + { + return; + } + run_once = 1; + + const BOOL success = AllocConsole(); + if (!success) + { + /* Debug, not error, because it might not be an error. + * (E.g. there is already an attached console.) */ + vlog_debug( + "Could not open console: AllocConsole() failed with %d", + GetLastError() + ); + return; + } + + freopen("CON", "w", stdout); + freopen("CON", "w", stderr); + + check_color_support(); +} +#endif /* _WIN32 */ diff --git a/desktop_version/src/Vlogging.h b/desktop_version/src/Vlogging.h index 70bc6f09..99d203a8 100644 --- a/desktop_version/src/Vlogging.h +++ b/desktop_version/src/Vlogging.h @@ -10,6 +10,10 @@ extern "C" void vlog_init(void); +#ifdef _WIN32 +void vlog_open_console(void); +#endif + void vlog_toggle_output(int enable_output); void vlog_toggle_color(int enable_color); diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index 4632a3d6..25d4779f 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -369,6 +369,9 @@ int main(int argc, char *argv[]) char* baseDir = NULL; char* assetsPath = NULL; bool seed_use_sdl_getticks = false; +#ifdef _WIN32 + bool open_console = false; +#endif vlog_init(); @@ -479,6 +482,12 @@ int main(int argc, char *argv[]) { vlog_toggle_error(0); } +#ifdef _WIN32 + else if (ARG("-console")) + { + open_console = true; + } +#endif else if (ARG("-seed-use-sdl-getticks")) { seed_use_sdl_getticks = true; @@ -492,6 +501,13 @@ int main(int argc, char *argv[]) } } +#ifdef _WIN32 + if (open_console) + { + vlog_open_console(); + } +#endif + if(!FILESYSTEM_init(argv[0], baseDir, assetsPath)) { vlog_error("Unable to initialize filesystem!");