X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Fcolours.h;h=c0bccd24944d9d2e544241104fe91f66e8b015e1;hb=810c662c9b55908101ca085293c52c3239ef22d1;hp=cc984334f3bc5b6722dc93ae33e78efc703fab01;hpb=8d660061375b8177ecce6c4e9803714d9fdd4b11;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/colours.h b/win/colours.h index cc984334f..c0bccd249 100644 --- a/win/colours.h +++ b/win/colours.h @@ -1,81 +1,109 @@ -#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY -#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY -#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY -#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE -#define TWHITE TNORMAL | FOREGROUND_INTENSITY -#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY - -inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); } - -/* Handles colors in printf */ -int printf_c(const char * format, ...) -{ - // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P - static char message[500]; - static char temp[10]; - int color1, color2; - - /* parse arguments */ - va_list ap; - va_start(ap, format); - vsprintf(message, format, ap); - va_end(ap); - - /* search for unix-style escape sequences */ - int t; - int c = 0; - const char * p = message; - while(*p != 0) - { - if(*p == '\033') - { - // Escape sequence -> copy into the temp buffer, and parse the color. - p++; - t = 0; - while(*p != 'm') - { - temp[t++] = *p; - ++p; - } - - temp[t] = 0; - p++; - if(!_stricmp(temp, "[0")) - { - // Returning to normal colour. - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); - } - else if(!_stricmp(temp, "[1")) - { - // White - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE); - } - else if(sscanf(temp, "[%u;%u", &color1, &color2) == 2) - { - switch(color2) - { - case 32: // Green - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow - break; - - default: // Unknown - // White - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); - break; - } - } - else - { - char message[50]; - sprintf(message, "Unknown color code: %s", temp); - MessageBox(0, message, message, MB_OK); - } - } - - putchar(*p); - ++c; - ++p; - } - - return c; -} +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#ifndef __COLOURS_H +#define __COLOURS_H + +#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY +#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY +#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY +#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE +#define TWHITE TNORMAL | FOREGROUND_INTENSITY +#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY + +inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); } + +/* Handles colors in printf */ +int printf_c(const char * format, ...) +{ + // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P + static char message[500]; + static char temp[500]; + int color1, color2; + + /* parse arguments */ + va_list ap; + va_start(ap, format); + vsnprintf(message, 500, format, ap); + va_end(ap); + + /* search for unix-style escape sequences */ + int t; + int c = 0; + const char * p = message; + while (*p != 0) + { + if (*p == '\033') + { + // Escape sequence -> copy into the temp buffer, and parse the color. + p++; + t = 0; + while ((*p) && (*p != 'm')) + { + temp[t++] = *p; + ++p; + } + + temp[t] = 0; + p++; + + if (*temp == '[') + { + if (sscanf(temp, "[%u;%u", &color1, &color2) == 2) + { + switch(color2) + { + case 32: // Green + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow + break; + + default: // Unknown + // White + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY); + break; + } + } + else + { + switch (*(temp+1)) + { + case '0': + // Returning to normal colour. + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + break; + + case '1': + // White + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE); + break; + + default: + char message[50]; + sprintf(message, "Unknown color code: %s", temp); + MessageBox(0, message, message, MB_OK); + break; + } + } + } + } + + putchar(*p); + ++c; + ++p; + } + + return c; +} + +#endif +