Revision: 9383 https://osdn.net/projects/ttssh2/scm/svn/commits/9383 Author: zmatsuo Date: 2021-08-29 00:32:45 +0900 (Sun, 29 Aug 2021) Log Message: ----------- ANSI環境でIME制御を行っていないときでも漢字入力できるようにした Modified Paths: -------------- trunk/teraterm/teraterm/vtdisp.c trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/vtdisp.c =================================================================== --- trunk/teraterm/teraterm/vtdisp.c 2021-08-28 15:29:03 UTC (rev 9382) +++ trunk/teraterm/teraterm/vtdisp.c 2021-08-28 15:32:45 UTC (rev 9383) @@ -1983,7 +1983,7 @@ MB_ICONEXCLAMATION }; TTMessageBoxW(0, &info, ts.UILanguageFileW); - WritePrivateProfileStringA("Tera Term","IME","off",ts.SetupFName); + WritePrivateProfileStringW(L"Tera Term", L"IME", L"off", ts.SetupFNameW); ts.UseIME = 0; } Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-08-28 15:29:03 UTC (rev 9382) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-08-28 15:32:45 UTC (rev 9383) @@ -124,11 +124,12 @@ static int AutoDisconnectedPort = -1; -#ifndef WM_IME_COMPOSITION -#define WM_IME_COMPOSITION 0x010F -#endif +UnicodeDebugParam_t UnicodeDebugParam; +typedef struct { + char dbcs_lead_byte; +} vtwin_work_t; +static vtwin_work_t vtwin_work; -UnicodeDebugParam_t UnicodeDebugParam; extern "C" PrintFile *PrintFile_; ///////////////////////////////////////////////////////////////////////////// @@ -1327,14 +1328,38 @@ u16 = (wchar_t)nChar; } else { // \x93\xFC\x97͂\xCD ANSI - // ANSI(ACP) -> UTF-32 -> UTF-16 - const char mb_str[2] = {(char)nChar, 0}; - unsigned int u32; - size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32); - if (mb_len == 0) { + if (vtwin_work.dbcs_lead_byte == 0 && IsDBCSLeadByte(nChar)) { + // ANSI 2\x83o\x83C\x83g\x95\xB6\x8E\x9A\x82\xCC 1byte\x96ڂ\xBE\x82\xC1\x82\xBD + // \x92ʏ\xED\x82\xCD WM_IME_* \x83\x81\x83b\x83Z\x81[\x83W\x82ŏ\x88\x97\x9D\x82\xB3\x82\xEA\x82\xE9 + // \x8E\x9F\x82̏ꍇ\x82\xB1\x82\xB1\x82ɓ\xFC\x82\xC1\x82Ă\xAD\x82\xE9 + // TERATERM.INI \x82\xC5 IME=off \x82̂Ƃ\xAB + // imm32.dll \x82\xAA\x83\x8D\x81[\x83h\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB + vtwin_work.dbcs_lead_byte = nChar; return; } - u16 = (wchar_t)u32; + else { + // ANSI(ACP) -> UTF-32 -> UTF-16 + char mb_str[2]; + size_t mb_len; + if (vtwin_work.dbcs_lead_byte == 0) { + // 1\x83o\x83C\x83g\x95\xB6\x8E\x9A + mb_str[0] = (char)nChar; + mb_len = 1; + } + else { + // 2\x83o\x83C\x83g\x95\xB6\x8E\x9A + mb_str[0] = (char)vtwin_work.dbcs_lead_byte; + mb_str[1] = (char)nChar; + mb_len = 2; + vtwin_work.dbcs_lead_byte = 0; + } + unsigned int u32; + mb_len = MBCPToUTF32(mb_str, mb_len, CP_ACP, &u32); + if (mb_len == 0) { + return; + } + u16 = (wchar_t)u32; + } } // \x83o\x83b\x83t\x83@\x82֏o\x97́A\x89\xE6\x96ʂ֏o\x97\xCD