Revision: 7410 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7410 Author: zmatsuo Date: 2019-01-27 03:03:31 +0900 (Sun, 27 Jan 2019) Log Message: ----------- UnicodeToCP932()内のwctomb()をWideCharToMultiByte()に置き換え Modified Paths: -------------- trunk/teraterm/teraterm/vtterm.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2019-01-25 15:45:33 UTC (rev 7409) +++ trunk/teraterm/teraterm/vtterm.c 2019-01-26 18:03:31 UTC (rev 7410) @@ -4092,9 +4092,9 @@ utf8_stat = CheckUTF8Seq(b, utf8_stat); } -void RequestStatusString(unsigned char *StrBuff, int StrLen) // DECRQSS +static void RequestStatusString(const unsigned char *StrBuff, int StrLen) // DECRQSS { - unsigned char RepStr[256]; + char RepStr[256]; int len = 0; int tmp = 0; @@ -4277,7 +4277,7 @@ return copylen; } -int TermcapString(unsigned char *buff, int buffsize, unsigned char *capname) +static int TermcapString(unsigned char *buff, int buffsize, unsigned char *capname) { int len = 0, l; unsigned char *capval = NULL; @@ -4317,7 +4317,7 @@ return len; } -void RequestTermcapString(unsigned char *StrBuff, int StrLen) // xterm experimental +static void RequestTermcapString(unsigned char *StrBuff, int StrLen) // xterm experimental { unsigned char RepStr[256]; unsigned char CapName[16]; @@ -4389,7 +4389,7 @@ SendDCSstr(RepStr, replen); } -void ParseDCS(BYTE Cmd, unsigned char *StrBuff, int len) { +static void ParseDCS(BYTE Cmd, unsigned char *StrBuff, int len) { switch (ICount) { case 0: break; @@ -5469,52 +5469,50 @@ return (index); } - +// unicode(UTF-16,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE static void UnicodeToCP932(unsigned int code) { + wchar_t wchar = (wchar_t)code; int ret; - char mbchar[32]; - unsigned char wchar[32]; - unsigned short cset = 0; + char mbchar[2]; + unsigned short cset; - wchar[0] = code & 0xff; - wchar[1] = (code >> 8) & 0xff; - + // Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O if (ts.UnicodeDecSpMapping) { - cset = ConvertUnicode(code, mapUnicodeSymbolToDecSp, MAPSIZE(mapUnicodeSymbolToDecSp)); + cset = ConvertUnicode(wchar, mapUnicodeSymbolToDecSp, MAPSIZE(mapUnicodeSymbolToDecSp)); + if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { + PutDecSp(cset & 0xff); + return; + } } - if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) { - PutDecSp(cset & 0xff); - } - else { - // Unicode -> CP932 - ret = wctomb(mbchar, ((wchar_t *)wchar)[0]); - switch (ret) { - case -1: - if (_stricmp(ts.Locale, DEFAULT_LOCALE) == 0) { - // U+301C\x82Ȃǂ͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA2\x81BUnicode -> Shift_JIS\x82֕ϊ\xB7\x82\xB5\x82Ă݂\xE9\x81B - cset = ConvertUnicode(code, mapUnicodeToSJIS, MAPSIZE(mapUnicodeToSJIS)); - if (cset != 0) { - Kanji = cset & 0xff00; - PutKanji(cset & 0x00ff); - } - } - if (cset == 0) { - PutChar('?'); - if (ts.UnknownUnicodeCharaAsWide) { - PutChar('?'); - } + // Unicode -> \x93\xE0\x95\x94\x83R\x81[\x83h(ts.CodePage)\x82֕ϊ\xB7\x82\xB5\x82ďo\x97\xCD + ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL); + switch (ret) { + case 0: + if (ts.CodePage == 932) { + // CP932 + // U+301C\x82Ȃǂ͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA2\x81BUnicode -> Shift_JIS\x82֕ϊ\xB7\x82\xB5\x82Ă݂\xE9\x81B + cset = ConvertUnicode(code, mapUnicodeToSJIS, MAPSIZE(mapUnicodeToSJIS)); + if (cset != 0) { + Kanji = cset & 0xff00; + PutKanji(cset & 0x00ff); } - break; - case 1: - PutChar(mbchar[0]); - break; - default: - Kanji = mbchar[0] << 8; - PutKanji(mbchar[1]); - break; } + + PutChar('?'); + if (ts.UnknownUnicodeCharaAsWide) { + PutChar('?'); + } + break; + case 1: + PutChar(mbchar[0]); + break; + case 2: + default: + Kanji = mbchar[0] << 8; + PutKanji(mbchar[1]); + break; } }