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