Functions4U: New functions to handle console text

git-svn-id: svn://ultimatepp.org/upp/trunk@14791 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
koldo 2020-08-11 14:25:26 +00:00
parent 16fff43fe6
commit 73ecddafec
2 changed files with 96 additions and 0 deletions

View file

@ -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
}
}

View file

@ -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