mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 17:49:43 +01:00
Add -console
option on Windows
This adds the `-console` command-line option (for Win32 only) so the game can spawn an attached console window which will contain all console output. This is to make it easier for people to debug on Windows systems. Otherwise, the only way to get console output would be to either compile the application as a console app (i.e. switch the subsystem to console) - which is undesirable for regular users as this makes it so a console is always spawned even when unwanted - or launch the game with shell arguments that make it so output is redirected to a file. As a result, color checking support is factored out of vlog_init() into its own function, even though we don't support colors on Windows.
This commit is contained in:
parent
5bb3768782
commit
3fc23f2b2c
3 changed files with 61 additions and 2 deletions
|
@ -2,7 +2,12 @@
|
|||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(__unix__) || defined(__APPLE__)
|
||||
#ifdef _WIN32
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
# define STDOUT_IS_TTY 0
|
||||
# define STDERR_IS_TTY 0
|
||||
#elif defined(__unix__) || defined(__APPLE__)
|
||||
# include <unistd.h>
|
||||
# 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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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!");
|
||||
|
|
Loading…
Reference in a new issue