]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - win/colours.h
946e725ff5988d7334d14247d92b0a51aba251a3
[user/henk/code/inspircd.git] / win / colours.h
1 /*       +------------------------------------+\r
2  *       | Inspire Internet Relay Chat Daemon |\r
3  *       +------------------------------------+\r
4  *\r
5  *  InspIRCd: (C) 2002-2007 InspIRCd Development Team\r
6  * See: http://www.inspircd.org/wiki/index.php/Credits\r
7  *\r
8  * This program is free but copyrighted software; see\r
9  *            the file COPYING for details.\r
10  *\r
11  * ---------------------------------------------------\r
12  */\r
13 \r
14 #define TRED FOREGROUND_RED | FOREGROUND_INTENSITY\r
15 #define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY\r
16 #define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY\r
17 #define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE\r
18 #define TWHITE TNORMAL | FOREGROUND_INTENSITY\r
19 #define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY\r
20 \r
21 inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }\r
22 \r
23 /* Handles colors in printf */\r
24 int printf_c(const char * format, ...)\r
25 {\r
26         // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P\r
27         static char message[500];\r
28         static char temp[10];\r
29         int color1, color2;\r
30 \r
31         /* parse arguments */\r
32         va_list ap;\r
33         va_start(ap, format);\r
34         vsprintf(message, format, ap);\r
35         va_end(ap);\r
36 \r
37         /* search for unix-style escape sequences */\r
38         int t;\r
39         int c = 0;\r
40         const char * p = message;\r
41         while(*p != 0)\r
42         {\r
43                 if(*p == '\033')\r
44                 {\r
45                         // Escape sequence -> copy into the temp buffer, and parse the color.\r
46                         p++;\r
47                         t = 0;\r
48                         while(*p != 'm')\r
49                         {\r
50                                 temp[t++] = *p;\r
51                                 ++p;\r
52                         }\r
53 \r
54                         temp[t] = 0;\r
55                         p++;\r
56                         if(!_stricmp(temp, "[0"))\r
57                         {\r
58                                 // Returning to normal colour.\r
59                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r
60                         }\r
61                         else if(!_stricmp(temp, "[1"))\r
62                         {\r
63                                 // White\r
64                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);\r
65                         }\r
66                         else if(sscanf(temp, "[%u;%u", &color1, &color2) == 2)\r
67                         {\r
68                                 switch(color2)\r
69                                 {\r
70                                 case 32:                // Green\r
71                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);              // Yellow\r
72                                         break;\r
73 \r
74                                 default:                // Unknown\r
75                                         // White\r
76                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);\r
77                                         break;\r
78                                 }\r
79                         }\r
80                         else\r
81                         {\r
82                                 char message[50];\r
83                                 sprintf(message, "Unknown color code: %s", temp);\r
84                                 MessageBox(0, message, message, MB_OK);\r
85                         }\r
86                 }\r
87 \r
88                 putchar(*p);\r
89                 ++c;\r
90                 ++p;\r
91         }\r
92 \r
93         return c;\r
94 }\r