Mercurial > mplayer.hg
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