]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - win/colours.h
6a71d78530ab047d48f3d63039301cc17cd6d29d
[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 #ifndef __COLOURS_H\r
15 #define __COLOURS_H\r
16 \r
17 #define TRED FOREGROUND_RED | FOREGROUND_INTENSITY\r
18 #define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY\r
19 #define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY\r
20 #define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE\r
21 #define TWHITE TNORMAL | FOREGROUND_INTENSITY\r
22 #define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY\r
23 \r
24 inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }\r
25 \r
26 /* Handles colors in printf */\r
27 int printf_c(const char * format, ...)\r
28 {\r
29         // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P\r
30         static char message[500];\r
31         static char temp[10];\r
32         int color1, color2;\r
33 \r
34         /* parse arguments */\r
35         va_list ap;\r
36         va_start(ap, format);\r
37         vsnprintf(message, 500, format, ap);\r
38         va_end(ap);\r
39 \r
40         /* search for unix-style escape sequences */\r
41         int t;\r
42         int c = 0;\r
43         const char * p = message;\r
44         while(*p != 0)\r
45         {\r
46                 if(*p == '\033')\r
47                 {\r
48                         // Escape sequence -> copy into the temp buffer, and parse the color.\r
49                         p++;\r
50                         t = 0;\r
51                         while(*p != 'm')\r
52                         {\r
53                                 temp[t++] = *p;\r
54                                 ++p;\r
55                         }\r
56 \r
57                         temp[t] = 0;\r
58                         p++;\r
59                         if(!_stricmp(temp, "[0"))\r
60                         {\r
61                                 // Returning to normal colour.\r
62                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r
63                         }\r
64                         else if(!_stricmp(temp, "[1"))\r
65                         {\r
66                                 // White\r
67                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);\r
68                         }\r
69                         else if(sscanf(temp, "[%u;%u", &color1, &color2) == 2)\r
70                         {\r
71                                 switch(color2)\r
72                                 {\r
73                                 case 32:                // Green\r
74                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);              // Yellow\r
75                                         break;\r
76 \r
77                                 default:                // Unknown\r
78                                         // White\r
79                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);\r
80                                         break;\r
81                                 }\r
82                         }\r
83                         else\r
84                         {\r
85                                 char message[50];\r
86                                 sprintf(message, "Unknown color code: %s", temp);\r
87                                 MessageBox(0, message, message, MB_OK);\r
88                         }\r
89                 }\r
90 \r
91                 putchar(*p);\r
92                 ++c;\r
93                 ++p;\r
94         }\r
95 \r
96         return c;\r
97 }\r
98 \r
99 #endif\r
100 \r