From 4855f8679e40c7372e089a111538054ca57e89ca Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Wed, 9 Jun 2010 18:13:01 +0000 Subject: Add win32 console color output. Based on patches by James Darnley . Originally committed as revision 23554 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavutil/log.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'libavutil/log.c') diff --git a/libavutil/log.c b/libavutil/log.c index e5c06a1a59..119e199026 100644 --- a/libavutil/log.c +++ b/libavutil/log.c @@ -34,13 +34,33 @@ static #endif int av_log_level = AV_LOG_INFO; +#ifdef _WIN32 +#include +static const uint8_t color[] = {12,12,12,14,7,7,7}; +static int16_t background, attr_orig; +static HANDLE con; +#define set_color(x) SetConsoleTextAttribute(con, background | color[level]) +#define reset_color() SetConsoleTextAttribute(con, attr_orig) +#else static const uint8_t color[]={0x41,0x41,0x11,0x03,9,9,9}; +#define set_color(x) fprintf(stderr, "\033[%d;3%dm", color[x]>>4, color[x]&15) +#define reset_color() fprintf(stderr, "\033[0m") +#endif static int use_color=-1; #undef fprintf static void colored_fputs(int level, const char *str){ if(use_color<0){ -#if HAVE_ISATTY && !defined(_WIN32) +#ifdef _WIN32 + CONSOLE_SCREEN_BUFFER_INFO con_info; + con = GetStdHandle(STD_ERROR_HANDLE); + use_color = (con != INVALID_HANDLE_VALUE) && !getenv("NO_COLOR"); + if (use_color) { + GetConsoleScreenBufferInfo(con, &con_info); + attr_orig = con_info.wAttributes; + background = attr_orig & 0xF0; + } +#elif HAVE_ISATTY use_color= getenv("TERM") && !getenv("NO_COLOR") && isatty(2); #else use_color= 0; @@ -48,11 +68,11 @@ static void colored_fputs(int level, const char *str){ } if(use_color){ - fprintf(stderr, "\033[%d;3%dm", color[level]>>4, color[level]&15); + set_color(level); } fputs(str, stderr); if(use_color){ - fprintf(stderr, "\033[0m"); + reset_color(); } } -- cgit v1.2.3