Add code to detect and convert to console codepage on Windows.

Patch by Zuxy Meng [zuxy.meng at gmail com]


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22460 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2007-03-04 19:04:08 +00:00
parent 9ca5decb0b
commit a188335a33
3 changed files with 61 additions and 11 deletions

View File

@ -8,13 +8,10 @@
#include "config.h"
#ifdef USE_LANGINFO
#include <locale.h>
#include <langinfo.h>
#endif
#ifdef USE_ICONV
#include <iconv.h>
#include <errno.h>
extern char* get_term_charset();
#endif
#if defined(FOR_MENCODER) || defined(CODECS2HTML)
@ -79,13 +76,8 @@ void mp_msg_init(void){
mp_msg_levels[MSGT_IDENTIFY] = -1; // no -identify output by default
#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
if (!mp_msg_charset)
mp_msg_charset = get_term_charset();
#endif
}

View File

@ -4,6 +4,7 @@
// for additional virtual keycodes
#include "config.h"
#include <stdio.h>
#include <windows.h>
#include "keycodes.h"
@ -134,3 +135,42 @@ void getch2_disable(){
getch2_status=0;
}
#ifdef USE_ICONV
static const struct {
unsigned cp;
char* alias;
} cp_alias[] = {
{ 20127, "ASCII" },
{ 20866, "KOI8-R" },
{ 21866, "KOI8-RU" },
{ 28591, "ISO-8859-1" },
{ 28592, "ISO-8859-2" },
{ 28593, "ISO-8859-3" },
{ 28594, "ISO-8859-4" },
{ 28595, "ISO-8859-5" },
{ 28596, "ISO-8859-6" },
{ 28597, "ISO-8859-7" },
{ 28598, "ISO-8859-8" },
{ 28599, "ISO-8859-9" },
{ 28605, "ISO-8859-15" },
{ 65001, "UTF-8" },
{ 0, NULL }
};
char* get_term_charset()
{
static char codepage[10];
unsigned i, cpno = GetConsoleOutputCP();
if (!cpno)
cpno = GetACP();
if (!cpno)
return NULL;
for (i = 0; cp_alias[i].cp; i++)
if (cpno == cp_alias[i].cp)
return cp_alias[i].alias;
snprintf(codepage, sizeof(codepage), "CP%u", cpno);
return codepage;
}
#endif

View File

@ -28,6 +28,11 @@
#endif
#endif
#if defined(USE_LANGINFO) && defined(USE_ICONV)
#include <locale.h>
#include <langinfo.h>
#endif
#include <unistd.h>
#include "keycodes.h"
@ -238,3 +243,16 @@ void getch2_disable(void){
getch2_status=0;
}
#ifdef USE_ICONV
char* get_term_charset()
{
char* charset = NULL;
#ifdef USE_LANGINFO
setlocale(LC_CTYPE, "");
charset = nl_langinfo(CODESET);
setlocale(LC_CTYPE, "C");
#endif
return charset;
}
#endif