Change the console functions so that the terminal actually has colored text in Linux. (And doesn't have blue underlined text for most of FFX...)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2159 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-11-08 04:32:15 +00:00
parent 61b2ab7583
commit 190f66186f
2 changed files with 115 additions and 24 deletions

View File

@ -75,6 +75,29 @@ const IConsoleWriter ConsoleWriter_Null =
// Console_Stdio
// --------------------------------------------------------------------------------------
#ifdef __LINUX__
static wxString tbl_color_codes[] =
{
L"\033[30m" // black
, L"\033[31m" // red
, L"\033[32m" // green
, L"\033[33m" // yellow
, L"\033[34m" // blue
, L"\033[35m" // magenta
, L"\033[36m" // cyan
, L"\033[37m" // white!
, L"\033[30m\033[1m" // strong black
, L"\033[31m\033[1m" // strong red
, L"\033[32m\033[1m" // strong green
, L"\033[33m\033[1m" // strong yellow
, L"\033[34m\033[1m" // strong blue
, L"\033[35m\033[1m" // strong magenta
, L"\033[36m\033[1m" // strong cyan
, L"\033[37m\033[1m" // strong white!
, L"\033[0m" // Back to default.
};
#endif
// One possible default write action at startup and shutdown is to use the stdout.
static void __concall ConsoleStdio_DoWrite( const wxString& fmt )
{
@ -87,16 +110,62 @@ static void __concall ConsoleStdio_DoWriteLn( const wxString& fmt )
wxPrintf( fmt + L"\n" );
}
static void __concall ConsoleStdio_Newline()
{
wxPrintf( L"\n" );
}
static void __concall ConsoleStdio_SetColor( ConsoleColors color )
{
#ifdef __LINUX__
wxPrintf(tbl_color_codes[16]);
switch (color)
{
case Color_Black: wxPrintf(tbl_color_codes[0]); break;
case Color_Green: wxPrintf(tbl_color_codes[2]); break;
case Color_Red: wxPrintf(tbl_color_codes[1]); break;
case Color_Blue: wxPrintf(tbl_color_codes[4]); break;
case Color_Magenta: wxPrintf(tbl_color_codes[5]); break;
case Color_Orange: wxPrintf(tbl_color_codes[5]); break; // No orange, so use magenta.
case Color_Gray: wxPrintf(tbl_color_codes[7]); break; // Use white instead of grey.
case Color_Cyan: wxPrintf(tbl_color_codes[6]); break;
case Color_Yellow: wxPrintf(tbl_color_codes[3]); break;
case Color_White: wxPrintf(tbl_color_codes[7]); break;
case Color_StrongBlack: wxPrintf(tbl_color_codes[8]); break;
case Color_StrongRed: wxPrintf(tbl_color_codes[9]); break;
case Color_StrongGreen: wxPrintf(tbl_color_codes[10]); break;
case Color_StrongBlue: wxPrintf(tbl_color_codes[12]); break;
case Color_StrongOrange: wxPrintf(tbl_color_codes[13]); break; // strong magenta.
default: wxPrintf(tbl_color_codes[16]); break;
}
#endif
}
static void __concall ConsoleStdio_SetTitle( const wxString& title )
{
#ifdef __LINUX__
wxPrintf(L"\033]0;" + title + L"\007");
#endif
}
static void __concall ConsoleStdio_ClearColor()
{
#ifdef __LINUX__
wxPrintf(tbl_color_codes[17]);
#endif
}
const IConsoleWriter ConsoleWriter_Stdio =
{
ConsoleStdio_DoWrite, // Writes without newlines go to buffer to avoid error log spam.
ConsoleStdio_DoWriteLn,
ConsoleNull_Newline,
ConsoleStdio_Newline,
ConsoleNull_SetTitle,
ConsoleNull_SetColor,
ConsoleNull_ClearColor,
ConsoleStdio_SetTitle,
ConsoleStdio_SetColor,
ConsoleStdio_ClearColor,
};
// --------------------------------------------------------------------------------------

View File

@ -638,18 +638,19 @@ void Pcsx2App::ProgramLog_PostEvent( wxEvent& evt )
// --------------------------------------------------------------------------------------
// ConsoleImpl_ToFile
// --------------------------------------------------------------------------------------
static void __concall _immediate_logger( const char* src )
static void __concall _immediate_logger( wxString src )
{
#ifdef __LINUX__
fputs( src, stdout );
ConsoleWriter_Stdio.DoWrite(src);
#endif
px_fputs( emuLog, src );
px_fputs( emuLog, src.ToUTF8() );
}
static void __concall ConsoleToFile_Newline()
{
#ifdef __LINUX__
fputc( '\n', stdout );
ConsoleWriter_Stdio.Newline();
fputc( '\n', emuLog );
#else
fputs( "\r\n", emuLog );
@ -658,18 +659,33 @@ static void __concall ConsoleToFile_Newline()
static void __concall ConsoleToFile_DoWrite( const wxString& fmt )
{
_immediate_logger( fmt.ToUTF8() );
_immediate_logger( fmt );
}
static void __concall ConsoleToFile_DoWriteLn( const wxString& fmt )
{
_immediate_logger( fmt.ToUTF8() );
_immediate_logger( fmt );
ConsoleToFile_Newline();
if( emuLog != NULL )
fflush( emuLog );
}
static void __concall ConsoleToFile_SetTitle( const wxString& title )
{
ConsoleWriter_Stdio.SetTitle(title);
}
static void __concall ConsoleToFile_SetColor( ConsoleColors color )
{
ConsoleWriter_Stdio.SetColor(color);
}
static void __concall ConsoleToFile_ClearColor()
{
ConsoleWriter_Stdio.ClearColor();
}
extern const IConsoleWriter ConsoleWriter_File;
const IConsoleWriter ConsoleWriter_File =
{
@ -677,9 +693,9 @@ const IConsoleWriter ConsoleWriter_File =
ConsoleToFile_DoWriteLn,
ConsoleToFile_Newline,
ConsoleWriter_Null.SetTitle,
ConsoleWriter_Null.SetColor,
ConsoleWriter_Null.ClearColor,
ConsoleToFile_SetTitle,
ConsoleToFile_SetColor,
ConsoleToFile_ClearColor,
};
// thread-local console color storage.
@ -688,20 +704,26 @@ static __threadlocal ConsoleColors th_CurrentColor = DefaultConsoleColor;
// --------------------------------------------------------------------------------------
// ConsoleToWindow Implementations
// --------------------------------------------------------------------------------------
template< const IConsoleWriter& secondary >
static void __concall ConsoleToWindow_SetTitle( const wxString& title )
{
secondary.SetTitle(title);
wxCommandEvent evt( wxEVT_SetTitleText );
evt.SetString( title );
wxGetApp().ProgramLog_PostEvent( evt );
}
template< const IConsoleWriter& secondary >
static void __concall ConsoleToWindow_SetColor( ConsoleColors color )
{
secondary.SetColor(color);
th_CurrentColor = color;
}
template< const IConsoleWriter& secondary >
static void __concall ConsoleToWindow_ClearColor()
{
secondary.ClearColor();
th_CurrentColor = DefaultConsoleColor;
}
@ -734,9 +756,9 @@ static const IConsoleWriter ConsoleWriter_Window =
ConsoleToWindow_DoWriteLn<ConsoleWriter_Null>,
ConsoleToWindow_Newline<ConsoleWriter_Null>,
ConsoleToWindow_SetTitle,
ConsoleToWindow_SetColor,
ConsoleToWindow_ClearColor,
ConsoleToWindow_SetTitle<ConsoleWriter_Null>,
ConsoleToWindow_SetColor<ConsoleWriter_Null>,
ConsoleToWindow_ClearColor<ConsoleWriter_Null>,
};
static const IConsoleWriter ConsoleWriter_WindowAndFile =
@ -745,9 +767,9 @@ static const IConsoleWriter ConsoleWriter_WindowAndFile =
ConsoleToWindow_DoWriteLn<ConsoleWriter_File>,
ConsoleToWindow_Newline<ConsoleWriter_File>,
ConsoleToWindow_SetTitle,
ConsoleToWindow_SetColor,
ConsoleToWindow_ClearColor,
ConsoleToWindow_SetTitle<ConsoleWriter_File>,
ConsoleToWindow_SetColor<ConsoleWriter_File>,
ConsoleToWindow_ClearColor<ConsoleWriter_File>,
};
void Pcsx2App::EnableAllLogging() const