[Ttssh2-commit] [9143] 9x系でロシア語キーボードからの入力が正しくできるよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 1月 30日 (土) 00:35:36 JST


Revision: 9143
          https://osdn.net/projects/ttssh2/scm/svn/commits/9143
Author:   zmatsuo
Date:     2021-01-30 00:35:36 +0900 (Sat, 30 Jan 2021)
Log Message:
-----------
9x系でロシア語キーボードからの入力が正しくできるよう修正

Modified Paths:
--------------
    trunk/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2021-01-29 15:35:22 UTC (rev 9142)
+++ trunk/teraterm/teraterm/vtwin.cpp	2021-01-29 15:35:36 UTC (rev 9143)
@@ -1431,6 +1431,11 @@
 	}
 }
 
+/**
+ *	\x83L\x81[\x83{\x81[\x83h\x82\xA9\x82\xE71\x95\xB6\x8E\x9A\x93\xFC\x97\xCD
+ *	@param	nChar	UTF-16 char(wchar_t)	IsWindowUnicode() == TRUE \x8E\x9E
+ *					ANSI char(char)			IsWindowUnicode() == FALSE \x8E\x9E
+ */
 void CVTWindow::OnChar(WPARAM nChar, UINT nRepCnt, UINT nFlags)
 {
 	unsigned int i;
@@ -1444,31 +1449,35 @@
 		return;
 	}
 
-#if UNICODE_INTERNAL_BUFF
+	wchar_t u16;
+	if (IsWindowUnicode(HVTWin) == TRUE) {
+		// \x93\xFC\x97͂\xCD UTF-16
+		u16 = (wchar_t)nChar;
+	} else {
+		// \x93\xFC\x97͂\xCD ANSI, ANSI(ACP) -> UTF-32 -> UTF-16
+		char mb_str[1];
+		unsigned int u32;
+		mb_str[0] = (char)nChar;
+		size_t u32_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32);
+		if (u32_len == 0) {
+			return;
+		}
+		wchar_t u16_str[2];
+		size_t u16_len = UTF32ToUTF16(u32, u16_str, _countof(u16_str));
+		if (u16_len == 0) {
+			return;
+		}
+		u16 = u16_str[0];
+	}
+
+	// \x83o\x83b\x83t\x83@\x82֏o\x97́A\x89\xE6\x96ʂ֏o\x97\xCD
 	for (i=1 ; i<=nRepCnt ; i++) {
-		wchar_t u16 = nChar;
 		CommTextOutW(&cv,&u16,1);
 		if (ts.LocalEcho>0) {
 			CommTextEchoW(&cv,&u16,1);
 		}
 	}
-#else
-	{
-		char Code = nChar;
-		if ((ts.Language==IdRussian) &&
-			((BYTE)Code>=128)) {
-			Code = (char)RussConv(ts.RussKeyb,ts.RussClient,(BYTE)Code);
-		}
 
-		for (i=1 ; i<=nRepCnt ; i++) {
-			CommTextOut(&cv,&Code,1);
-			if (ts.LocalEcho>0) {
-				CommTextEcho(&cv,&Code,1);
-			}
-		}
-	}
-#endif
-
 	// \x83X\x83N\x83\x8D\x81[\x83\x8B\x88ʒu\x82\xF0\x83\x8A\x83Z\x83b\x83g
 	if (WinOrgY != 0) {
 		DispVScroll(SCROLL_BOTTOM, 0);


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