[Ttssh2-commit] [3462] IsDBCSLeadByteEx を _isleadbyte_l に置き換え。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 6月 10日 (水) 12:28:31 JST


Revision: 3462
          http://svn.sourceforge.jp/view?root=ttssh2&view=rev&rev=3462
Author:   doda
Date:     2009-06-10 12:28:31 +0900 (Wed, 10 Jun 2009)

Log Message:
-----------
IsDBCSLeadByteEx を _isleadbyte_l に置き換え。
Locale/CodePage の対応があっているならば動作に近いがないので問題ないはず。
これによって CodePage の設定は使われなくなる。

動作の違いの確認は以下のコードで行った。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctype.h>
#include <locale.h>

void leadbyte_test(char *locale_str, unsigned int codepage) {
	_locale_t locale;
	int i;

	printf("testing %s(%d)\n", locale_str, codepage);
	locale = _create_locale(LC_ALL, locale_str);

	for (i=0; i<256; i++) {
		if ((_isleadbyte_l(i, locale)!=0) != (IsDBCSLeadByteEx(codepage, i)!=0)) {
			printf("%02x: Fail\n", i);
		}
	}

	_free_locale(locale);
}

int main(void) {
	leadbyte_test("Japanese", 932);
	leadbyte_test("Korean", 949);
	leadbyte_test("cht", 950);
	leadbyte_test("chs", 936);
	leadbyte_test("english", 1252);

	return 0;
}

Modified Paths:
--------------
    trunk/teraterm/ttpcmn/ttcmn.c


-------------- next part --------------
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c	2009-06-09 14:57:09 UTC (rev 3461)
+++ trunk/teraterm/ttpcmn/ttcmn.c	2009-06-10 03:28:31 UTC (rev 3462)
@@ -14,6 +14,7 @@
 #include <windows.h>
 #include <tchar.h>
 #include <setupapi.h>
+#include <locale.h>
 
 #include "compat_w95.h"
 
@@ -1151,7 +1152,10 @@
 	int SendCodeNew;
 	BYTE d;
 	BOOL Full, KanjiFlagNew;
+	_locale_t locale;
 
+	locale = _create_locale(LC_ALL, cv->Locale);
+
 	Full = FALSE;
 	i = 0;
 	while (! Full && (i < C)) {
@@ -1195,7 +1199,7 @@
 				TempStr[TempLen++] = LOBYTE(K);
 			}
 		}
-		else if (IsDBCSLeadByteEx(*cv->CodePage, d)) {
+		else if (_isleadbyte_l(d, locale)) {
 			KanjiFlagNew = TRUE;
 			cv->SendKanjiFirst = d;
 			SendCodeNew = IdKanji;
@@ -1301,6 +1305,8 @@
 
 	} // end of "while {}"
 
+	_free_locale(locale);
+
 	return i;
 }
 
@@ -1411,7 +1417,10 @@
 	int EchoCodeNew;
 	BYTE d;
 	BOOL Full, KanjiFlagNew;
+	_locale_t locale;
 
+	locale = _create_locale(LC_ALL, cv->Locale);
+
 	Full = FALSE;
 	i = 0;
 	while (! Full && (i < C)) {
@@ -1455,7 +1464,7 @@
 				TempStr[TempLen++] = LOBYTE(K);
 			}
 		}
-		else if (IsDBCSLeadByteEx(*cv->CodePage, d)) {
+		else if (_isleadbyte_l(d, locale)) {
 			KanjiFlagNew = TRUE;
 			cv->EchoKanjiFirst = d;
 			EchoCodeNew = IdKanji;
@@ -1562,6 +1571,8 @@
 
 	} // end of "while {}"
 
+	_free_locale(locale);
+
 	return i;
 }
 



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