120 lines
3.2 KiB
C++
120 lines
3.2 KiB
C++
// File: crn_colorized_console.cpp
|
|
// This software is in the public domain. Please see license.txt.
|
|
#include "crn_core.h"
|
|
#include "crn_colorized_console.h"
|
|
#ifdef CRNLIB_USE_WIN32_API
|
|
#include "crn_winhdr.h"
|
|
#endif
|
|
|
|
namespace crnlib
|
|
{
|
|
void colorized_console::init()
|
|
{
|
|
console::init();
|
|
console::add_console_output_func(console_output_func, NULL);
|
|
}
|
|
|
|
void colorized_console::deinit()
|
|
{
|
|
console::remove_console_output_func(console_output_func);
|
|
console::deinit();
|
|
}
|
|
|
|
void colorized_console::tick()
|
|
{
|
|
}
|
|
|
|
#ifdef CRNLIB_USE_WIN32_API
|
|
bool colorized_console::console_output_func(eConsoleMessageType type, const char* pMsg, void* pData)
|
|
{
|
|
pData;
|
|
|
|
if (console::get_output_disabled())
|
|
return true;
|
|
|
|
HANDLE cons = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
|
|
DWORD attr = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
|
|
switch (type)
|
|
{
|
|
case cDebugConsoleMessage: attr = FOREGROUND_BLUE | FOREGROUND_INTENSITY; break;
|
|
case cMessageConsoleMessage: attr = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; break;
|
|
case cWarningConsoleMessage: attr = FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; break;
|
|
case cErrorConsoleMessage: attr = FOREGROUND_RED | FOREGROUND_INTENSITY; break;
|
|
default: break;
|
|
}
|
|
|
|
if (INVALID_HANDLE_VALUE != cons)
|
|
SetConsoleTextAttribute(cons, (WORD)attr);
|
|
|
|
if ((console::get_prefixes()) && (console::get_at_beginning_of_line()))
|
|
{
|
|
switch (type)
|
|
{
|
|
case cDebugConsoleMessage:
|
|
printf("Debug: %s", pMsg);
|
|
break;
|
|
case cWarningConsoleMessage:
|
|
printf("Warning: %s", pMsg);
|
|
break;
|
|
case cErrorConsoleMessage:
|
|
printf("Error: %s", pMsg);
|
|
break;
|
|
default:
|
|
printf("%s", pMsg);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("%s", pMsg);
|
|
}
|
|
|
|
if (console::get_crlf())
|
|
printf("\n");
|
|
|
|
if (INVALID_HANDLE_VALUE != cons)
|
|
SetConsoleTextAttribute(cons, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
|
|
|
|
return true;
|
|
}
|
|
#else
|
|
bool colorized_console::console_output_func(eConsoleMessageType type, const char* pMsg, void* pData)
|
|
{
|
|
pData;
|
|
if (console::get_output_disabled())
|
|
return true;
|
|
|
|
if ((console::get_prefixes()) && (console::get_at_beginning_of_line()))
|
|
{
|
|
switch (type)
|
|
{
|
|
case cDebugConsoleMessage:
|
|
printf("Debug: %s", pMsg);
|
|
break;
|
|
case cWarningConsoleMessage:
|
|
printf("Warning: %s", pMsg);
|
|
break;
|
|
case cErrorConsoleMessage:
|
|
printf("Error: %s", pMsg);
|
|
break;
|
|
default:
|
|
printf("%s", pMsg);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("%s", pMsg);
|
|
}
|
|
|
|
if (console::get_crlf())
|
|
printf("\n");
|
|
|
|
return true;
|
|
}
|
|
#endif
|
|
|
|
} // namespace crnlib
|
|
|