--- sourceforge.net/trunk/rdesktop/rdesktop.c 2005/03/13 03:29:19 848 +++ sourceforge.net/trunk/rdesktop/rdesktop.c 2005/03/13 13:18:48 855 @@ -30,6 +30,11 @@ #include #include "rdesktop.h" +#ifdef HAVE_ICONV +#include +#include +#endif + #ifdef EGD_SOCKET #include /* socket connect */ #include /* sockaddr_un */ @@ -79,6 +84,10 @@ BOOL g_rdpsnd = False; #endif +#ifdef HAVE_ICONV +char g_codepage[16] = ""; +#endif + extern RDPDR_DEVICE g_rdpdr_device[]; extern uint32 g_num_devices; extern char *g_rdpdr_clientname; @@ -113,6 +122,9 @@ fprintf(stderr, " -g: desktop geometry (WxH)\n"); fprintf(stderr, " -f: full-screen mode\n"); fprintf(stderr, " -b: force bitmap updates\n"); +#ifdef HAVE_ICONV + fprintf(stderr, " -L: local codepage\n"); +#endif fprintf(stderr, " -B: use BackingStore of X-server (if available)\n"); fprintf(stderr, " -e: disable encryption (French TS)\n"); fprintf(stderr, " -E: disable encryption from client to server\n"); @@ -367,7 +379,7 @@ #endif while ((c = getopt(argc, argv, - VNCOPT "u:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1) + VNCOPT "u:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1) { switch (c) { @@ -390,6 +402,14 @@ username_option = 1; break; + case 'L': +#ifdef HAVE_ICONV + STRNCPY(g_codepage, optarg, sizeof(g_codepage)); +#else + error("iconv support not available\n"); +#endif + break; + case 'd': STRNCPY(domain, optarg, sizeof(domain)); break; @@ -676,6 +696,20 @@ STRNCPY(g_username, pw->pw_name, sizeof(g_username)); } +#ifdef HAVE_ICONV + if (g_codepage[0] == 0) + { + if (setlocale(LC_CTYPE, "")) + { + STRNCPY(g_codepage, nl_langinfo(CODESET), sizeof(g_codepage)); + } + else + { + STRNCPY(g_codepage, DEFAULT_CODEPAGE, sizeof(g_codepage)); + } + } +#endif + if (g_hostname[0] == 0) { if (gethostname(fullhostname, sizeof(fullhostname)) == -1)