ali@11: #ifdef WIN32 ali@11: #include ali@11: #endif ali@11: #include ali@11: #include ali@11: #include ali@11: ali@11: /* ali@11: * Handlers for g_print() and g_printerr() which will output via ali@11: * WriteConsoleW when run under MS-Windows and the corresponding ali@11: * stream has not been re-directed. In all other cases, output ali@11: * via stdout and stderr respectively. ali@11: */ ali@11: ali@11: #ifdef WIN32 ali@11: static HANDLE bl_console=0; ali@11: ali@11: static void bl_print_handler_console(const char *string) ali@11: { ali@11: long len; ali@11: DWORD dummy; ali@11: gunichar2 *string2; ali@11: string2=g_utf8_to_utf16(string,-1,NULL,&len,NULL); ali@11: if (string2) ali@11: { ali@11: WriteConsoleW(bl_console,string2,len,&dummy,NULL); ali@11: g_free(string2); ali@11: } ali@11: } ali@11: #endif ali@11: ali@11: static void bl_print_handler_stdout(const char *string) ali@11: { ali@11: fputs(string,stdout); ali@11: } ali@11: ali@11: static void bl_print_handler_stderr(const char *string) ali@11: { ali@11: fputs(string,stderr); ali@11: } ali@11: ali@11: void bl_set_print_handlers(void) ali@11: { ali@11: #ifdef WIN32 ali@11: DWORD dummy; ali@11: if (GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),&dummy)) ali@11: { ali@11: bl_console=GetStdHandle(STD_OUTPUT_HANDLE); ali@11: g_set_print_handler(bl_print_handler_console); ali@11: } ali@11: else ali@11: #endif ali@11: g_set_print_handler(bl_print_handler_stdout); ali@11: #ifdef WIN32 ali@11: if (GetConsoleMode(GetStdHandle(STD_ERROR_HANDLE),&dummy)) ali@11: { ali@11: if (!bl_console) ali@11: bl_console=GetStdHandle(STD_ERROR_HANDLE); ali@11: g_set_printerr_handler(bl_print_handler_console); ali@11: } ali@11: else ali@11: #endif ali@11: g_set_printerr_handler(bl_print_handler_stderr); ali@11: }