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