[Ttssh2-commit] [7410] UnicodeToCP932()内のwctomb()をWideCharToMultiByte()に置き換え

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 1月 27日 (日) 03:03:31 JST


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;
 	}
 }
 


Ttssh2-commit メーリングリストの案内
Back to archive index