[ttssh2-commit] [9529] 言語設定と文字コード設定が行えなかったので修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 11月 12日 (金) 00:30:33 JST


Revision: 9529
          https://osdn.net/projects/ttssh2/scm/svn/commits/9529
Author:   zmatsuo
Date:     2021-11-12 00:30:32 +0900 (Fri, 12 Nov 2021)
Log Message:
-----------
言語設定と文字コード設定が行えなかったので修正

- 文字コードの設定が正しく行えなかった
- ロシア語の文字設定を追加
  - 仮実装
- 中国語の文字コード設定を追加

Modified Paths:
--------------
    trunk/teraterm/ttpdlg/ttdlg.c
    trunk/teraterm/ttpdlg/ttpdlg.rc

-------------- next part --------------
Modified: trunk/teraterm/ttpdlg/ttdlg.c
===================================================================
--- trunk/teraterm/ttpdlg/ttdlg.c	2021-11-11 15:30:24 UTC (rev 9528)
+++ trunk/teraterm/ttpdlg/ttdlg.c	2021-11-11 15:30:32 UTC (rev 9529)
@@ -102,8 +102,6 @@
 static const char *TermListJ[] =
 	{"VT100", "VT100J", "VT101", "VT102", "VT102J", "VT220J", "VT282",
 	 "VT320", "VT382", "VT420", "VT520", "VT525", NULL};
-static const char *KanjiList[] = {"SJIS","EUC","JIS", "UTF-8", NULL};
-static const char *KanjiListSend[] = {"SJIS","EUC","JIS", "UTF-8", NULL};
 static const char *KanjiInList[] = {"^[$@","^[$B",NULL};
 static const char *KanjiOutList[] = {"^[(B","^[(J",NULL};
 static const char *KanjiOutList2[] = {"^[(B","^[(J","^[(H",NULL};
@@ -111,56 +109,67 @@
 static const char *MetaList[] = {"off", "on", "left", "right", NULL};
 static const char *MetaList2[] = {"off", "on", NULL};
 
-// HKS
-static const char *KoreanList[] = {"KS5601", "UTF-8", NULL};
-static const char *KoreanListSend[] = {"KS5601", "UTF-8", NULL};
+// TODO ttlib_charset \x82Ɠ\x9D\x8D\x87\x82\xF0\x8Dl\x82\xA6\x82\xE9
+typedef struct {
+	const char *name;
+	int code;
+} TDropList;
 
-// UTF-8
-static const char *Utf8List[] = {"UTF-8", NULL};
-static const char *Utf8ListSend[] = {"UTF-8", NULL};
+static const TDropList KanjiList[] = {
+	{ "SJIS", IdSJIS },
+	{ "EUC", IdEUC },
+	{ "JIS", IdJIS },
+	{ "UTF-8", IdUTF8 },
+	{ NULL, 0 },
+};
 
+static const TDropList RussList[] = {
+	{ "Windows(CP1251)", IdWindows },
+	{ "KOI8-R", IdKOI8 },
+	{ "CP866", Id866 },
+	{ "ISO 8859-5", IdISO },
+	{ NULL, 0 },
+};
+
+static const TDropList KoreanList[] = {
+	{ "KS5601", IdKoreanCP51949 },
+	{ "UTF-8", IdUTF8 },
+	{ NULL, 0 },
+};
+
+static const TDropList Utf8List[] = {
+	{ "UTF-8", IdUTF8 },
+	{ NULL, 0 },
+};
+
+static const TDropList ChineseList[] = {
+	{ "GB2312 (CP936)",	IdCnGB2312 },
+	{ "BIG5 (CP950)", IdCnBig5 },
+	{ "UTF-8", IdUTF8 },
+	{ NULL, 0 },
+};
+
 static const char *BaudList[] =
 	{"110","300","600","1200","2400","4800","9600",
 	 "14400","19200","38400","57600","115200",
 	 "230400", "460800", "921600", NULL};
 
-// convert table for KanjiCodeID and ListID
-// cf. KanjiList,KanjiListSend
-//     KoreanList,KoreanListSend
-//     Utf8List,Utf8ListSend
-//     IdSJIS, IdEUC, IdJIS, IdUTF8, IdUTF8m
-//     IdEnglish, IdJapanese, IdRussian, IdKorean, IdUtf8
-/* KanjiCode2List(Language,KanjiCodeID) returns ListID */
-static int KanjiCode2List(int lang, int kcode)
+static void SetKanjiCodeDropDownList(HWND HDlg, int id, const TDropList *list, int sel_code)
 {
-	int Table[5][5] = {
-		{1, 2, 3, 4, 5}, /* English (dummy) */
-		{1, 2, 3, 4, 5}, /* Japanese(dummy) */
-		{1, 2, 3, 4, 5}, /* Russian (dummy) */
-		{1, 1, 1, 2, 3}, /* Korean */
-		{1, 1, 1, 1, 2}, /* Utf8 */
-	};
-	lang--;
-	kcode--;
-	return Table[lang][kcode];
-}
+	int i = 0;
+	int sel_index = 0;
 
-/* List2KanjiCode(Language,ListID) returns KanjiCodeID */
-static int List2KanjiCode(int lang, int list)
-{
-	int Table[5][5] = {
-		{1, 2, 3, 4, 5}, /* English (dummy) */
-		{1, 2, 3, 4, 5}, /* Japanese(dummy) */
-		{1, 2, 3, 4, 5}, /* Russian (dummy) */
-		{1, 4, 5, 1, 1}, /* Korean */
-		{4, 5, 4, 4, 4}, /* Utf8 */
-	};
-	lang--;
-	list--;
-	if (list < 0) {
-		list = 0;
+	while (list[i].name != NULL) {
+		const char *name = list[i].name;
+		int code = list[i].code;
+		int index = SendDlgItemMessageA(HDlg, id, CB_ADDSTRING, 0, (LPARAM)name);
+		SendDlgItemMessageA(HDlg, id, CB_SETITEMDATA, index, code);
+		if (code == sel_code) {
+			sel_index = i;
+		}
+		i++;
 	}
-	return Table[lang][list];
+	SendDlgItemMessage(HDlg, id, CB_SETCURSEL, sel_index, 0);
 }
 
 /*
@@ -218,7 +227,7 @@
 				};
 				SetDlgTexts(Dialog, TextInfosRu, _countof(TextInfosRu), UILanguageFile);
 			}
-			else if (ts->Language==IdUtf8 || ts->Language==IdKorean) {
+			else if (ts->Language==IdUtf8 || ts->Language==IdKorean || ts->Language == IdChinese) {
 				static const DlgTextInfo TextInfosKo[] = {
 					{ IDC_TERMKANJILABEL, "DLG_TERMK_KANJI" },
 					{ IDC_TERMKANJISENDLABEL, "DLG_TERMK_KANJISEND" },
@@ -270,12 +279,12 @@
 			SetRB(Dialog,ts->AutoWinSwitch,IDC_TERMAUTOSWITCH,IDC_TERMAUTOSWITCH);
 
 			if (ts->Language==IdJapanese) {
-				SetDropDownList(Dialog, IDC_TERMKANJI, KanjiList, ts->KanjiCode);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJI, KanjiList, ts->KanjiCode);
 				if ( ts->KanjiCode!=IdJIS ) {
 					DisableDlgItem(Dialog,IDC_TERMKANA,IDC_TERMKANA);
 				}
 				SetRB(Dialog,ts->JIS7Katakana,IDC_TERMKANA,IDC_TERMKANA);
-				SetDropDownList(Dialog, IDC_TERMKANJISEND, KanjiListSend, ts->KanjiCodeSend);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJISEND, KanjiList, ts->KanjiCodeSend);
 				if ( ts->KanjiCodeSend!=IdJIS ) {
 					DisableDlgItem(Dialog,IDC_TERMKANASEND,IDC_TERMKOUT);
 				}
@@ -289,19 +298,21 @@
 				}
 			}
 			else if (ts->Language==IdRussian) {
-#if UNICODE_INTERNAL_BUFF
-				EnableWindow(GetDlgItem(Dialog, IDC_TERMRUSSCLIENT),FALSE);
-				EnableWindow(GetDlgItem(Dialog, IDC_TERMRUSSFONT),FALSE);
-#endif
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJI, RussList,ts->KanjiCode);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJISEND, RussList,ts->KanjiCodeSend);
 			}
 			else if (ts->Language==IdKorean) { // HKS
-				SetDropDownList(Dialog, IDC_TERMKANJI, KoreanList, KanjiCode2List(ts->Language,ts->KanjiCode));
-				SetDropDownList(Dialog, IDC_TERMKANJISEND, KoreanListSend, KanjiCode2List(ts->Language,ts->KanjiCodeSend));
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJI, KoreanList, ts->KanjiCode);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJISEND, KoreanList, ts->KanjiCodeSend);
 			}
 			else if (ts->Language==IdUtf8) {
-				SetDropDownList(Dialog, IDC_TERMKANJI, Utf8List, KanjiCode2List(ts->Language,ts->KanjiCode));
-				SetDropDownList(Dialog, IDC_TERMKANJISEND, Utf8ListSend, KanjiCode2List(ts->Language,ts->KanjiCodeSend));
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJI, Utf8List, ts->KanjiCode);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJISEND, Utf8List, ts->KanjiCodeSend);
 			}
+			else if (ts->Language == IdChinese) {
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJI, ChineseList, ts->KanjiCode);
+				SetKanjiCodeDropDownList(Dialog, IDC_TERMKANJISEND, ChineseList, ts->KanjiCodeSend);
+			}
 			CenterWindow(Dialog, GetParent(Dialog));
 			return TRUE;
 
@@ -364,10 +375,12 @@
 
 						if (ts->Language==IdJapanese) {
 							if ((w = (WORD)GetCurSel(Dialog, IDC_TERMKANJI)) > 0) {
+								w = (int)SendDlgItemMessageA(Dialog, IDC_TERMKANJI, CB_GETITEMDATA, w - 1, 0);
 								ts->KanjiCode = w;
 							}
 							GetRB(Dialog,&ts->JIS7Katakana,IDC_TERMKANA,IDC_TERMKANA);
 							if ((w = (WORD)GetCurSel(Dialog, IDC_TERMKANJISEND)) > 0) {
+								w = (int)SendDlgItemMessageA(Dialog, IDC_TERMKANJISEND, CB_GETITEMDATA, w - 1, 0);
 								ts->KanjiCodeSend = w;
 							}
 							GetRB(Dialog,&ts->JIS7KatakanaSend,IDC_TERMKANASEND,IDC_TERMKANASEND);
@@ -378,16 +391,17 @@
 								ts->KanjiOut = w;
 							}
 						}
-						else if (ts->Language==IdRussian) {
-							;
-						}
 						else if (ts->Language==IdKorean || // HKS
+								 ts->Language==IdRussian ||
+								 ts->Language==IdChinese ||
 						         ts->Language==IdUtf8) {
 							if ((w = (WORD)GetCurSel(Dialog, IDC_TERMKANJI)) > 0) {
-								ts->KanjiCode = List2KanjiCode(ts->Language, w);
+								w = (int)SendDlgItemMessageA(Dialog, IDC_TERMKANJI, CB_GETITEMDATA, w - 1, 0);
+								ts->KanjiCode = w;
 							}
 							if ((w = (WORD)GetCurSel(Dialog, IDC_TERMKANJISEND)) > 0) {
-								ts->KanjiCodeSend = List2KanjiCode(ts->Language, w);
+								w = (int)SendDlgItemMessageA(Dialog, IDC_TERMKANJISEND, CB_GETITEMDATA, w - 1, 0);
+								ts->KanjiCodeSend = w;
 							}
 
 							ts->JIS7KatakanaSend=0;
@@ -2956,6 +2970,7 @@
 						sel = i;
 					}
 					SendDlgItemMessageA(Dialog, IDC_GENLANG, CB_ADDSTRING, 0, (LPARAM)lang->str);
+					SendDlgItemMessageA(Dialog, IDC_GENLANG, CB_SETITEMDATA, i, (LPARAM)lang->language);
 				}
 				SendDlgItemMessage(Dialog, IDC_GENLANG, CB_SETCURSEL, sel, 0);
 			}
@@ -2994,7 +3009,9 @@
 						}
 
 						if ((ts->MenuFlag & MF_NOLANGUAGE)==0) {
-							WORD language = (WORD)GetCurSel(Dialog, IDC_GENLANG);
+							WORD language;
+							w = (WORD)GetCurSel(Dialog, IDC_GENLANG);
+							language = (int)SendDlgItemMessageA(Dialog, IDC_GENLANG, CB_GETITEMDATA, w - 1, 0);
 
 							// Language \x82\xAA\x95ύX\x82\xB3\x82ꂽ\x82Ƃ\xAB\x81A
 							// KanjiCode/KanjiCodeSend \x82\xF0\x95ύX\x90\xE6\x82\xCC Language \x82ɑ\xB6\x8D݂\xB7\x82\xE9\x92l\x82ɒu\x82\xAB\x8A\xB7\x82\xA6\x82\xE9
@@ -3140,6 +3157,7 @@
 		break;
 	case IdKorean: // Korean mode //HKS
 	case IdUtf8:   // UTF-8 mode
+	case IdChinese:
 		i = IDD_TERMDLGK;
 		break;
 	case IdRussian: // Russian mode
@@ -3150,9 +3168,9 @@
 	}
 
 	return
-		(BOOL)DialogBoxParam(hInst,
-		                     MAKEINTRESOURCE(i),
-		                     WndParent, TermDlg, (LPARAM)ts);
+		(BOOL)TTDialogBoxParam(hInst,
+							   MAKEINTRESOURCE(i),
+							   WndParent, TermDlg, (LPARAM)ts);
 }
 
 BOOL WINAPI _SetupWin(HWND WndParent, PTTSet ts)

Modified: trunk/teraterm/ttpdlg/ttpdlg.rc
===================================================================
--- trunk/teraterm/ttpdlg/ttpdlg.rc	2021-11-11 15:30:24 UTC (rev 9528)
+++ trunk/teraterm/ttpdlg/ttpdlg.rc	2021-11-11 15:30:32 UTC (rev 9529)
@@ -380,9 +380,9 @@
     CONTROL         "A&uto switch (VT<->TEK)",IDC_TERMAUTOSWITCH,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,123,80,110,12
     GROUPBOX        "Character set",IDC_TERMRUSSCHARSET,8,94,221,43
     RTEXT           "H&ost:",IDC_TERMRUSSHOSTLABEL,14,106,36,11
-    COMBOBOX        IDC_TERMRUSSHOST,52,105,55,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_TERMKANJI,52,105,55,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     RTEXT           "&Client:",IDC_TERMRUSSCLIENTLABEL,113,106,52,11
-    COMBOBOX        IDC_TERMRUSSCLIENT,167,105,55,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_TERMKANJISEND,167,105,55,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     RTEXT           "&Font:",IDC_TERMRUSSFONTLABEL,14,122,36,11
     COMBOBOX        IDC_TERMRUSSFONT,52,121,55,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     DEFPUSHBUTTON   "OK",IDOK,198,10,40,14,WS_GROUP
@@ -397,8 +397,12 @@
 //
 
 #ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO 
+GUIDELINES DESIGNINFO
 BEGIN
+    IDD_TERMDLGJ, DIALOG
+    BEGIN
+    END
+
     IDD_SERIALDLG, DIALOG
     BEGIN
         RIGHTMARGIN, 232
@@ -422,6 +426,10 @@
         BOTTOMMARGIN, 75
     END
 
+    IDD_TERMDLG, DIALOG
+    BEGIN
+    END
+
     IDD_WINDLG, DIALOG
     BEGIN
         BOTTOMMARGIN, 182
@@ -434,6 +442,10 @@
         TOPMARGIN, 7
         BOTTOMMARGIN, 93
     END
+
+    IDD_TERMDLGR, DIALOG
+    BEGIN
+    END
 END
 #endif    // APSTUDIO_INVOKED
 


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