1 /* +------------------------------------+
\r * | Inspire Internet Relay Chat Daemon |
\r * +------------------------------------+
\r *
\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team
\r * See: http://www.inspircd.org/wiki/index.php/Credits
\r *
\r * This program is free but copyrighted software; see
\r * the file COPYING for details.
\r *
\r * ---------------------------------------------------
\r */
\r\r#ifndef __COLOURS_H
\r#define __COLOURS_H
\r\r#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY
\r#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
\r#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
\r#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE
\r#define TWHITE TNORMAL | FOREGROUND_INTENSITY
\r#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
\r\rinline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }
\r\r/* Handles colors in printf */
\rint printf_c(const char * format, ...)
\r{
\r // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P
\r static char message[500];
\r static char temp[500];
\r int color1, color2;
\r\r /* parse arguments */
\r va_list ap;
\r va_start(ap, format);
\r vsnprintf(message, 500, format, ap);
\r va_end(ap);
\r\r /* search for unix-style escape sequences */
\r int t;
\r int c = 0;
\r const char * p = message;
\r while (*p != 0)
\r {
\r if (*p == '\033')
\r {
\r // Escape sequence -> copy into the temp buffer, and parse the color.
\r p++;
\r t = 0;
\r while ((*p) && (*p != 'm'))
\r {
\r temp[t++] = *p;
\r ++p;
\r }
\r\r temp[t] = 0;
\r p++;
\r\r if (*temp == '[')
\r {
\r if (sscanf(temp, "[%u;%u", &color1, &color2) == 2)
\r {
\r switch(color2)
\r {
\r case 32: // Green
\r SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow
\r break;
\r\r default: // Unknown
\r // White
\r SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
\r break;
\r }
\r }
\r else
\r {
\r switch (*(temp+1))
\r {
\r case '0':
\r // Returning to normal colour.
\r SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
\r break;
\r\r case '1':
\r // White
\r SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);
\r break;
\r\r default:
\r char message[50];
\r sprintf(message, "Unknown color code: %s", temp);
\r MessageBox(0, message, message, MB_OK);
\r break;
\r }
\r }
\r }
\r }
\r\r putchar(*p);
\r ++c;
\r ++p;
\r }
\r\r return c;
\r}
\r\r#endif
\r\r