Mercurial > libavutil.hg
diff log.c @ 936:41b43a526d0d libavutil
Add win32 console color output.
Based on patches by James Darnley <james dot darnley at gmail dot com>.
author | ramiro |
---|---|
date | Wed, 09 Jun 2010 18:13:01 +0000 |
parents | 096294624d52 |
children | 823d95e42402 |
line wrap: on
line diff
--- a/log.c Wed Jun 09 18:10:35 2010 +0000 +++ b/log.c Wed Jun 09 18:13:01 2010 +0000 @@ -34,13 +34,33 @@ #endif int av_log_level = AV_LOG_INFO; +#ifdef _WIN32 +#include <windows.h> +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 @@ } 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(); } }