diff --git a/bazaar/Functions4U/Functions4U.cpp b/bazaar/Functions4U/Functions4U.cpp index c3d4c4fcd..74311a932 100644 --- a/bazaar/Functions4U/Functions4U.cpp +++ b/bazaar/Functions4U/Functions4U.cpp @@ -2796,4 +2796,59 @@ size_t GetNumLines(Stream &stream) { return res; } + +bool SetConsoleColor(CONSOLE_COLOR color) { +#ifdef PLATFORM_WIN32 + static HANDLE hstdout = 0; + static CONSOLE_SCREEN_BUFFER_INFO csbiInfo = {}; + static WORD woldattrs; + + if (hstdout == 0) { + hstdout = GetStdHandle(STD_OUTPUT_HANDLE); + if (!GetConsoleScreenBufferInfo(hstdout, &csbiInfo)) { + hstdout = 0; + return false; + } + woldattrs = csbiInfo.wAttributes; + } + if (color == RESET) + return SetConsoleTextAttribute(hstdout, woldattrs); + else + return SetConsoleTextAttribute(hstdout, color); +#else + if (color < 100) + printf("\x1b[%dm", color); + else + printf("\x1b[1;%dm", color-100); + return true; +#endif +} + +void ConsoleOutputDisable(bool disable) { +#ifdef PLATFORM_WIN32 + if (disable) + freopen("nul", "w", stdout); + else + freopen("CONOUT$", "w", stdout); +#else + static int saved_id = Null; + static fpos_t saved_pos; + + if (disable) { + fflush(stdout); + fgetpos(stdout, &saved_pos); + saved_id = dup(fileno(stdout)); + close(fileno(stdout)); + } else { + if (!IsNull(saved_id)) { + fflush(stdout); + dup2(saved_id, fileno(stdout)); + close(saved_id); + clearerr(stdout); + fsetpos(stdout, &saved_pos); + } + } +#endif +} + } \ No newline at end of file diff --git a/bazaar/Functions4U/Functions4U.h b/bazaar/Functions4U/Functions4U.h index 9505122cc..c2c07bb47 100644 --- a/bazaar/Functions4U/Functions4U.h +++ b/bazaar/Functions4U/Functions4U.h @@ -1189,6 +1189,47 @@ protected: } }; +enum CONSOLE_COLOR { +#ifdef PLATFORM_WIN32 + BLACK = 0, + BLUE = FOREGROUND_BLUE, + GREEN = FOREGROUND_GREEN, + CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE, + RED = FOREGROUND_RED, + MAGENTA = FOREGROUND_RED | FOREGROUND_BLUE, + YELLOW = FOREGROUND_RED | FOREGROUND_GREEN, + GRAY = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, + LTBLUE = FOREGROUND_INTENSITY | FOREGROUND_BLUE, + LTGREEN = FOREGROUND_INTENSITY | FOREGROUND_GREEN, + LTCYAN = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, + LTRED = FOREGROUND_INTENSITY | FOREGROUND_RED, + LTMAGENTA = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE, + LTYELLOW = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN, + WHITE = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, + RESET +#else + BLACK = 30, + RED = 31, + GREEN = 32, + YELLOW = 33, + BLUE = 34, + MAGENTA = 35, + CYAN = 36, + GRAY = 37, + LTRED = 131, + LTGREEN = 132, + LTYELLOW = 133, + LTBLUE = 134, + LTMAGENTA = 135, + LTCYAN = 136, + WHITE = 137, + RESET = 0 +#endif +}; + +bool SetConsoleColor(CONSOLE_COLOR color); +void ConsoleOutputDisable(bool disable); + } #endif