]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add color support to console in windows. Note, I don't like the colors I chose,...
authorMichael Jerris <mike@jerris.com>
Sun, 4 Mar 2007 22:19:39 +0000 (22:19 +0000)
committerMichael Jerris <mike@jerris.com>
Sun, 4 Mar 2007 22:19:39 +0000 (22:19 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4446 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/loggers/mod_console/mod_console.c

index f8f35fc5b8349d2615c909dec23e3b41f7700ba0..e6a2ff9c7e41c0e9dd6c93fbddb3c25c86e04a21 100644 (file)
 static const char modname[] = "mod_console";
 static const uint8_t STATIC_LEVELS[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
 static int COLORIZE = 0;
+#ifdef WIN32
+static HANDLE hStdout;
+static WORD wOldColorAttrs;\r
+static CONSOLE_SCREEN_BUFFER_INFO csbiInfo;\r
+static WORD COLORS[] =\r
+       {       FOREGROUND_RED | FOREGROUND_INTENSITY,\r
+               FOREGROUND_RED | FOREGROUND_INTENSITY,\r
+               FOREGROUND_RED | FOREGROUND_INTENSITY,\r
+               FOREGROUND_RED | FOREGROUND_INTENSITY,\r
+               FOREGROUND_BLUE | FOREGROUND_INTENSITY,\r
+               FOREGROUND_BLUE | FOREGROUND_INTENSITY,\r
+               FOREGROUND_GREEN | FOREGROUND_INTENSITY,\r
+               FOREGROUND_GREEN | FOREGROUND_INTENSITY,\r
+               FOREGROUND_GREEN | FOREGROUND_INTENSITY };\r
+#else\r
 static const char *COLORS[] = 
        { SWITCH_SEQ_FRED, SWITCH_SEQ_FRED, SWITCH_SEQ_FRED, SWITCH_SEQ_FRED, SWITCH_SEQ_FMAGEN, SWITCH_SEQ_FCYAN, SWITCH_SEQ_FGREEN, SWITCH_SEQ_FYELLOW, "" };
+#endif
 
 static switch_loadable_module_interface_t console_module_interface = {
        /*.module_name */ modname,
@@ -109,7 +125,16 @@ static switch_status_t config_logger(void)
                        char *val = (char *) switch_xml_attr_soft(param, "value");
 
                        if (!strcasecmp(var, "colorize") && switch_true(val)) {
+#ifdef WIN32
+                               hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+                               if (switch_core_get_console() == stdout && hStdout != INVALID_HANDLE_VALUE 
+                                       && GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) {
+                                       wOldColorAttrs = csbiInfo.wAttributes;
+                                       COLORIZE = 1;
+                               }
+#else
                                COLORIZE = 1;
+#endif
                        }
                }
        }
@@ -143,7 +168,13 @@ static switch_status_t switch_console_logger(const switch_log_node_t *node, swit
 
                if (!log_hash || (((all_level > - 1) || lookup) && level >= node->level)) {
                        if (COLORIZE) {
+#ifdef WIN32
+                               SetConsoleTextAttribute(hStdout, COLORS[node->level]);
+                               WriteFile(hStdout, node->data, (DWORD)strlen(node->data), NULL, NULL);\r
+                               SetConsoleTextAttribute(hStdout, wOldColorAttrs);
+#else
                                fprintf(handle, "%s%s%s", COLORS[node->level], node->data, SWITCH_SEQ_DEFAULT_COLOR);
+#endif
                        } else {
                                fprintf(handle, "%s", node->data);
                        }