git.y1.nz

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:
MSDL/console.c31+++++++++++++++++--------------
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.