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