]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - win/colours.h
3700b1dea0135c23b322aa8780e0087660eac610
[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[500];\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) && (*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 \r
60                         if (*temp == '[')\r
61                         {\r
62                                 if (sscanf(temp, "[%u;%u", &color1, &color2) == 2)\r
63                                 {\r
64                                         switch(color2)\r
65                                         {\r
66                                         case 32:                // Green\r
67                                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);              // Yellow\r
68                                                 break;\r
69 \r
70                                         default:                // Unknown\r
71                                                 // White\r
72                                                 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);\r
73                                                 break;\r
74                                         }\r
75                                 }\r
76                                 else\r
77                                 {\r
78                                         switch (*(temp+1))\r
79                                         {\r
80                                                 case '0':\r
81                                                         // Returning to normal colour.\r
82                                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r
83                                                         break;\r
84 \r
85                                                 case '1':\r
86                                                         // White\r
87                                                         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);\r
88                                                         break;\r
89 \r
90                                                 default:\r
91                                                         char message[50];\r
92                                                         sprintf(message, "Unknown color code: %s", temp);\r
93                                                         MessageBox(0, message, message, MB_OK);\r
94                                                         break;\r
95                                         }\r
96                                 }\r
97                         }\r
98                 }\r
99 \r
100                 putchar(*p);\r
101                 ++c;\r
102                 ++p;\r
103         }\r
104 \r
105         return c;\r
106 }\r
107 \r
108 #endif\r
109 \r