-int printf_c(const char * format, ...)\r
-{\r
- // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P\r
- static char message[500];\r
- static char temp[10];\r
- int color1, color2;\r
- \r
- /* parse arguments */\r
- va_list ap;\r
- va_start(ap, format);\r
- vsnprintf(message, 500, format, ap);\r
- va_end(ap);\r
-\r
- /* search for unix-style escape sequences */\r
- int t;\r
- int c = 0;\r
- const char * p = message;\r
- while(*p != 0)\r
- {\r
- if (*p == '\033')\r
- {\r
- // Escape sequence -> copy into the temp buffer, and parse the color.\r
- p++;\r
- t = 0;\r
- while(*p != 'm')\r
- {\r
- temp[t++] = *p;\r
- ++p;\r
- }\r
- \r
- temp[t] = 0;\r
- p++;\r
- if (!_stricmp(temp, "[0"))\r
- {\r
- // Returning to normal colour.\r
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r
- }\r
- else if (sscanf(temp, "[%u;%u", &color1, &color2) == 2)\r
- {\r
- switch(color2)\r
- {\r
- case 32: // Green\r
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);\r
- break;\r
- \r
- default: // Unknown\r
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);\r
- break;\r
- }\r
- }\r
- else\r
- {\r
- char message[50];\r
- sprintf("Unknown color code: %s", temp);\r
- MessageBox(0, message, message, MB_OK);\r
- }\r
- }\r
-\r
- putchar(*p);\r
- ++c;\r
- ++p;\r
- }\r
-\r
- return c;\r
-}\r
-\r