SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit cee486ab11074e06199ef99530ee0fdfc98ff86a parent 407e540638c537e532dbd1b23041ff25e375f5a0 Author: Lior Halphon <LIJI32@gmail.com> Date: Fri, 21 Jun 2024 16:52:41 +0300 Merge pull request #433 Diffstat:
| M | SDL/console.c | 31 | +++++++++++++++++-------------- |
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/SDL/console.c b/SDL/console.c @@ -85,28 +85,31 @@ static bool is_term(void) { if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) return false; #ifdef _WIN32 - if (AllocConsole()) { - FreeConsole(); - return false; - } - unsigned long input_mode, output_mode; + bool has_con_output; - GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &input_mode); - GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &output_mode); - SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); - SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + HANDLE stdin_handle = GetStdHandle(STD_INPUT_HANDLE); + HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); + + GetConsoleMode(stdin_handle, &input_mode); + has_con_output = GetConsoleMode(stdout_handle, &output_mode); + if (!has_con_output) { + return false; // stdout has been redirected to a file or pipe + } + + SetConsoleMode(stdin_handle, ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(stdout_handle, ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); CONSOLE_SCREEN_BUFFER_INFO before = {0,}; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &before); + GetConsoleScreenBufferInfo(stdout_handle, &before); printf(SGR("0")); CONSOLE_SCREEN_BUFFER_INFO after = {0,}; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &after); + GetConsoleScreenBufferInfo(stdout_handle, &after); - SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), input_mode); - SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), output_mode); + SetConsoleMode(stdin_handle, input_mode); + SetConsoleMode(stdout_handle, output_mode); if (before.dwCursorPosition.X != after.dwCursorPosition.X || @@ -127,7 +130,7 @@ static char raw_getc(void) #ifdef _WIN32 char c; unsigned long ret; - ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &ret, NULL); + ReadFile(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &ret, NULL); #else ssize_t ret; char c;
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.