diff mp_msg.c @ 17772:0d7cc103ed1e

Automaticall convert message to console charset, use utf8 for GTK2 Gui
author reimar
date Wed, 08 Mar 2006 12:45:48 +0000
parents c95961832830
children ed9950b8200d
line wrap: on
line diff
--- a/mp_msg.c	Wed Mar 08 12:37:10 2006 +0000
+++ b/mp_msg.c	Wed Mar 08 12:45:48 2006 +0000
@@ -7,6 +7,14 @@
 
 #include "config.h"
 
+#ifdef USE_LANGINFO
+#include <locale.h>
+#include <langinfo.h>
+#endif
+#ifdef USE_ICONV
+#include <iconv.h>
+#endif
+
 #if	defined(FOR_MENCODER) || defined(CODECS2HTML)
 #undef HAVE_NEW_GUI
 #endif
@@ -23,6 +31,11 @@
 int mp_msg_levels[MSGT_MAX]; // verbose level of this module. inited to -2
 int mp_msg_level_all = MSGL_STATUS;
 int verbose = 0;
+#ifdef USE_ICONV
+char *mp_msg_charset = NULL;
+static char *old_charset = NULL;
+static iconv_t msgiconv;
+#endif
 
 void mp_msg_init(void){
     int i;
@@ -43,6 +56,16 @@
 #endif
 #endif
     for(i=0;i<MSGT_MAX;i++) mp_msg_levels[i] = -2;
+#ifdef USE_ICONV
+    mp_msg_charset = getenv("MPLAYER_CHARSET");
+#ifdef USE_LANGINFO
+    if (!mp_msg_charset) {
+      setlocale(LC_CTYPE, "");
+      mp_msg_charset = nl_langinfo(CODESET);
+      setlocale(LC_CTYPE, "C");
+    }
+#endif
+#endif
 }
 
 int mp_msg_test(int mod, int lev)
@@ -66,6 +89,32 @@
         guiMessageBox(lev, tmp);
 #endif
 
+#if defined(USE_ICONV) && defined(MSG_CHARSET)
+    if (mp_msg_charset && strcasecmp(mp_msg_charset, "noconv")) {
+      char tmp2[MSGSIZE_MAX];
+      size_t inlen = strlen(tmp), outlen = MSGSIZE_MAX;
+      char *in = tmp, *out = tmp2;
+      if (!old_charset || strcmp(old_charset, mp_msg_charset)) {
+        if (old_charset) {
+          free(old_charset);
+          iconv_close(msgiconv);
+        }
+        msgiconv = iconv_open(mp_msg_charset, MSG_CHARSET);
+        old_charset = strdup(mp_msg_charset);
+      }
+      memset(tmp2, 0, MSGSIZE_MAX);
+      while (iconv(msgiconv, &in, &inlen, &out, &outlen) == -1) {
+        if (!inlen || !outlen)
+          break;
+        *out++ = *in++;
+        outlen--; inlen--;
+      }
+      strncpy(tmp, tmp2, MSGSIZE_MAX);
+      tmp[MSGSIZE_MAX-1] = 0;
+      tmp[MSGSIZE_MAX-2] = '\n';
+    }
+#endif
+
 #ifdef MSG_USE_COLORS
 /* that's only a silly color test */
 #ifdef MP_ANNOY_ME