diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2017-11-03 01:51:33 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-11-03 07:49:11 -0700 |
commit | 0c74f7a2c8e0af7ac006c16fc9ef05e5f9245518 (patch) | |
tree | 6e282217d0e6a9bffa6c438bc718bd39cf38e39b /core/windows.c | |
parent | 6bab8267ebaa324ff0cbd32303ad04ae4bc998b9 (diff) | |
download | subsurface-0c74f7a2c8e0af7ac006c16fc9ef05e5f9245518.tar.gz |
win32: optimize the console and logging logic
Currently one has to explicitly use --win32console and/or
--win32log to enable a dedicated console (a console window
that opens next to the Subsurface window) or to enable file
logging on Win32.
This patch makes the following changes:
- removes the --win32* command line arguments
- removes the dedicated console window support
- if the app starts from a shortcut and not from a console, always
redirect stderr and stdout to _err & _out log files
- if the app starts from a console redirect stderr and stdout to that
console
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'core/windows.c')
-rw-r--r-- | core/windows.c | 66 |
1 files changed, 18 insertions, 48 deletions
diff --git a/core/windows.c b/core/windows.c index 6a852bf6f..ebee3436c 100644 --- a/core/windows.c +++ b/core/windows.c @@ -390,7 +390,7 @@ static struct { FILE *out, *err; } console_desc; -void subsurface_console_init(bool dedicated, bool logfile) +void subsurface_console_init(void) { (void)console_desc; /* if this is a console app already, do nothing */ @@ -398,69 +398,39 @@ void subsurface_console_init(bool dedicated, bool logfile) /* just in case of multiple calls */ memset((void *)&console_desc, 0, sizeof(console_desc)); - /* the AttachConsole(..) call can be used to determine if the parent process - * is a terminal. if it succeeds, there is no need for a dedicated console - * window and we don't need to call the AllocConsole() function. on the other - * hand if the user has set the 'dedicated' flag to 'true' and if AttachConsole() - * has failed, we create a dedicated console window. + + /* if AttachConsole(ATTACH_PARENT_PROCESS) returns true the parent process + * is a terminal. based on the result, either redirect to that terminal or + * to log files. */ console_desc.allocated = AttachConsole(ATTACH_PARENT_PROCESS); - if (console_desc.allocated) - dedicated = false; - if (!console_desc.allocated && dedicated) - console_desc.allocated = AllocConsole(); - if (!console_desc.allocated) - return; - - console_desc.cp = GetConsoleCP(); - SetConsoleOutputCP(CP_UTF8); /* make the ouput utf8 */ - - /* set some console modes; we don't need to reset these back. - * ENABLE_EXTENDED_FLAGS = 0x0080, ENABLE_QUICK_EDIT_MODE = 0x0040 */ - HANDLE h_in = GetStdHandle(STD_INPUT_HANDLE); - if (h_in) { - SetConsoleMode(h_in, 0x0080 | 0x0040); - CloseHandle(h_in); - } - - /* dedicated only; disable the 'x' button as it will close the main process as well */ - HWND h_cw = GetConsoleWindow(); - if (h_cw && dedicated) { - SetWindowTextA(h_cw, "Subsurface Console"); - HMENU h_menu = GetSystemMenu(h_cw, 0); - if (h_menu) { - EnableMenuItem(h_menu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED); - DrawMenuBar(h_cw); - } - SetConsoleCtrlHandler(NULL, TRUE); /* disable the CTRL handler */ + if (console_desc.allocated) { + console_desc.cp = GetConsoleCP(); + SetConsoleOutputCP(CP_UTF8); /* make the ouput utf8 */ + console_desc.out = freopen("CON", "w", stdout); + console_desc.err = freopen("CON", "w", stderr); + } else { + console_desc.out = freopen("subsurface_out.log", "w", stdout); + console_desc.err = freopen("subsurface_err.log", "w", stderr); } - const char *location_out = logfile ? "subsurface_out.log" : "CON"; - const char *location_err = logfile ? "subsurface_err.log" : "CON"; - - /* redirect; on win32, CON is a reserved pipe target, like NUL */ - console_desc.out = freopen(location_out, "w", stdout); - console_desc.err = freopen(location_err, "w", stderr); - if (!dedicated) - puts(""); /* add an empty line */ + puts(""); /* add an empty line */ #endif } void subsurface_console_exit(void) { #ifndef WIN32_CONSOLE_APP - if (!console_desc.allocated) - return; - /* close handles */ if (console_desc.out) fclose(console_desc.out); if (console_desc.err) fclose(console_desc.err); - /* reset code page and free */ - SetConsoleOutputCP(console_desc.cp); - FreeConsole(); + if (console_desc.allocated) { + SetConsoleOutputCP(console_desc.cp); + FreeConsole(); + } #endif } |