diff -NpuBr -Xexclude.txt main/mp_msg.c sherpya/mp_msg.c --- main/mp_msg.c 2010-10-11 12:28:30.812500000 +0200 +++ sherpya/mp_msg.c 2010-10-11 14:16:51.156250000 +0200 @@ -34,6 +34,26 @@ /* maximum message length of mp_msg */ #define MSGSIZE_MAX 3072 +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#include +#define hSTDOUT GetStdHandle(STD_OUTPUT_HANDLE) +static short stdoutAttrs = 0; +static const unsigned char ansi2win32[10] = { + 0, + FOREGROUND_RED, + FOREGROUND_GREEN, + FOREGROUND_GREEN | FOREGROUND_RED, + FOREGROUND_BLUE, + FOREGROUND_BLUE | FOREGROUND_RED, + FOREGROUND_BLUE | FOREGROUND_GREEN, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED +}; +#endif + int mp_msg_levels[MSGT_MAX]; // verbose level of this module. initialized to -2 int mp_msg_level_all = MSGL_STATUS; int verbose = 0; @@ -77,6 +97,15 @@ const char* filename_recode(const char* } void mp_msg_init(void){ +#ifdef _WIN32 + CONSOLE_SCREEN_BUFFER_INFO cinfo; + long cmode = 0; + GetConsoleMode(hSTDOUT, &cmode); + cmode |= (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT); + SetConsoleMode(hSTDOUT, cmode); + GetConsoleScreenBufferInfo(hSTDOUT, &cinfo); + stdoutAttrs = cinfo.wAttributes; +#endif int i; char *env = getenv("MPLAYER_VERBOSE"); if (env) @@ -111,7 +140,11 @@ static void set_msg_color(FILE* stream, } #endif if (mp_msg_color) +#ifdef _WIN32 + SetConsoleTextAttribute(hSTDOUT, ansi2win32[c] | FOREGROUND_INTENSITY); +#else fprintf(stream, "\033[%d;3%dm", c >> 3, c & 7); +#endif } static void print_msg_module(FILE* stream, int mod) @@ -168,11 +201,19 @@ static void print_msg_module(FILE* strea if (!mp_msg_module) return; +#ifdef _WIN32 + if (mp_msg_color) + SetConsoleTextAttribute(hSTDOUT, ansi2win32[c2&7] | FOREGROUND_INTENSITY); + fprintf(stream, "%9s", module_text[mod]); + if (mp_msg_color) + SetConsoleTextAttribute(hSTDOUT, stdoutAttrs); +#else if (mp_msg_color) fprintf(stream, "\033[%d;3%dm", c2 >> 3, c2 & 7); fprintf(stream, "%9s", module_text[mod]); if (mp_msg_color) fprintf(stream, "\033[0;37m"); +#endif fprintf(stream, ": "); } @@ -240,6 +281,10 @@ void mp_msg_va(int mod, int lev, const c fprintf(stream, "%s", tmp); if (mp_msg_color) +#ifdef _WIN32 + SetConsoleTextAttribute(hSTDOUT, stdoutAttrs); +#else fprintf(stream, "\033[0m"); +#endif fflush(stream); }