Revision: 7317 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7317 Author: zmatsuo Date: 2018-12-11 00:01:12 +0900 (Tue, 11 Dec 2018) Log Message: ----------- ttssh unicode化 #1 Ticket Links: ------------ http://sourceforge.jp/projects/ttssh2/tracker/detail/1 Modified Paths: -------------- branches/cmake/ttssh2/ttxssh/CMakeLists.txt branches/cmake/ttssh2/ttxssh/auth.c branches/cmake/ttssh2/ttxssh/dns.c branches/cmake/ttssh2/ttxssh/fwd.c branches/cmake/ttssh2/ttxssh/fwdui.c branches/cmake/ttssh2/ttxssh/hosts.c branches/cmake/ttssh2/ttxssh/key.c branches/cmake/ttssh2/ttxssh/sftp.c branches/cmake/ttssh2/ttxssh/ssh.c branches/cmake/ttssh2/ttxssh/ttxssh.c branches/cmake/ttssh2/ttxssh/util.c branches/cmake/ttssh2/ttxssh/util.h -------------- next part -------------- Modified: branches/cmake/ttssh2/ttxssh/CMakeLists.txt =================================================================== --- branches/cmake/ttssh2/ttxssh/CMakeLists.txt 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/CMakeLists.txt 2018-12-10 15:01:12 UTC (rev 7317) @@ -5,11 +5,19 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_zlib.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_openssl.cmake) +if(USE_UNICODE_API) + add_definitions(-DUNICODE -D_UNICODE) +endif() + set(COMMON_SRC ../../teraterm/teraterm/WSAAsyncGetAddrInfo.c ../../teraterm/common/ttcommon.h ../../teraterm/common/i18n.h ../../teraterm/common/ttlib.h + ../../teraterm/common/dlglib.h + ../../teraterm/common/dlglib.c + ../../teraterm/common/dlglib_cpp.cpp + ../../teraterm/common/dlglib_tmpl.cpp ../../teraterm/common/servicenames.h ) Modified: branches/cmake/ttssh2/ttxssh/auth.c =================================================================== --- branches/cmake/ttssh2/ttxssh/auth.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/auth.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -31,11 +31,13 @@ #include "util.h" #include "ssh.h" #include "key.h" +#include "dlglib.h" #include <io.h> #include <fcntl.h> #include <stdlib.h> #include <errno.h> +#include <tchar.h> #include "resource.h" #include "keyfiles.h" @@ -45,10 +47,33 @@ #define MAX_AUTH_CONTROL IDC_SSHUSEPAGEANT -static HFONT DlgAuthFont; -static HFONT DlgTisFont; -static HFONT DlgAuthSetupFont; +#if defined(UNICODE) +#undef SetDlgItemText +#define SetDlgItemText SetDlgItemTextA +#undef GetDlgItemText +#define GetDlgItemText GetDlgItemTextA +#endif +#if defined(UNICODE) +#define SetWindowTextT SetWindowTextW +#define GetDlgItemTextT GetDlgItemTextW +#define SetDlgItemTextT SetDlgItemTextW +#else +#define SetWindowTextT SetWindowTextA +#define GetDlgItemTextT GetDlgItemTextA +#define SetDlgItemTextT SetDlgItemTextA +#endif +#undef DialogBoxParam +#define DialogBoxParam(p1,p2,p3,p4,p5) \ + TTDialogBoxParam(p1,p2,p3,p4,p5) +#undef EndDialog +#define EndDialog(p1,p2) \ + TTEndDialog(p1, p2) + +//static HFONT DlgAuthFont; +//static HFONT DlgTisFont; +//static HFONT DlgAuthSetupFont; + void destroy_malloced_string(char **str) { if (*str != NULL) { @@ -117,11 +142,20 @@ static void init_auth_machine_banner(PTInstVar pvar, HWND dlg) { - char buf[1024], buf2[1024]; + TCHAR buf[1024], buf2[1024]; + const char *hostname = SSH_get_host_name(pvar); - GetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf2, sizeof(buf2)); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, buf2, SSH_get_host_name(pvar)); - SetDlgItemText(dlg, IDC_SSHAUTHBANNER, buf); + GetDlgItemTextT(dlg, IDC_SSHAUTHBANNER, buf2, _countof(buf2)); +#if defined(UNICODE) + { + wchar_t hostnameW[128]; + MultiByteToWideChar(CP_UTF8, 0, hostname, -1, hostnameW, _countof(hostnameW)); + _sntprintf_s(buf, _countof(buf), _TRUNCATE, buf2, hostnameW); + } +#else + _sntprintf_s(buf, _countof(buf), _TRUNCATE, buf2, hostname); +#endif + SetDlgItemTextT(dlg, IDC_SSHAUTHBANNER, buf); } static void update_server_supported_types(PTInstVar pvar, HWND dlg) @@ -177,57 +211,78 @@ static void init_auth_dlg(PTInstVar pvar, HWND dlg) { + const static DlgTextInfo text_info[] = { + { 0, "DLG_AUTH_TITLE" }, + { IDC_SSHAUTHBANNER, "DLG_AUTH_BANNER" }, + { IDC_SSHAUTHBANNER2, "DLG_AUTH_BANNER2" }, + { IDC_SSHUSERNAMELABEL, "DLG_AUTH_USERNAME" }, + { IDC_SSHPASSWORDCAPTION, "DLG_AUTH_PASSWORD" }, + { IDC_REMEMBER_PASSWORD, "DLG_AUTH_REMEMBER_PASSWORD" }, + { IDC_FORWARD_AGENT, "DLG_AUTH_FWDAGENT" }, + { IDC_SSHUSEPASSWORD, "DLG_AUTH_METHOD_PASSWORD" }, + { IDC_SSHUSERSA, "DLG_AUTH_METHOD_RSA" }, + { IDC_SSHUSERHOSTS, "DLG_AUTH_METHOD_RHOST" }, + { IDC_SSHUSEPAGEANT, "DLG_AUTH_METHOD_PAGEANT" }, + { IDC_CHOOSERSAFILE, "DLG_AUTH_PRIVATEKEY" }, + { IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" }, + { IDC_CHOOSEHOSTRSAFILE, "DLG_AUTH_HOST_PRIVATEKEY" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_DISCONNECT" }, + }; + TCHAR uimsg[MAX_UIMSG]; int default_method = pvar->session_settings.DefaultAuthMethod; - char uimsg[MAX_UIMSG]; - GetWindowText(dlg, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_AUTH_TITLE", pvar, uimsg); + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 + GetWindowText(dlg, uimsg, _countof(uimsg)); + UTIL_get_lang_msgT("DLG_AUTH_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHAUTHBANNER, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_BANNER", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHAUTHBANNER, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHAUTHBANNER2, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_BANNER2", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_USERNAME", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHUSERNAMELABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_PASSWORD", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHPASSWORDCAPTION, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_REMEMBER_PASSWORD", pvar, uimsg); SetDlgItemText(dlg, IDC_REMEMBER_PASSWORD, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_FORWARD_AGENT, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_FORWARD_AGENT, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_FWDAGENT", pvar, uimsg); SetDlgItemText(dlg, IDC_FORWARD_AGENT, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHUSEPASSWORD, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_METHOD_PASSWORD", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHUSEPASSWORD, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHUSERSA, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_METHOD_RSA", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHUSERSA, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHUSERHOSTS, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_METHOD_RHOST", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHUSERHOSTS, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_SSHUSEPAGEANT, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_METHOD_PAGEANT", pvar, uimsg); SetDlgItemText(dlg, IDC_SSHUSEPAGEANT, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_CHOOSERSAFILE, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_PRIVATEKEY", pvar, uimsg); SetDlgItemText(dlg, IDC_CHOOSERSAFILE, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_LOCALUSER", pvar, uimsg); SetDlgItemText(dlg, IDC_LOCALUSERNAMELABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, uimsg, _countof(uimsg)); UTIL_get_lang_msg("DLG_AUTH_HOST_PRIVATEKEY", pvar, uimsg); SetDlgItemText(dlg, IDC_CHOOSEHOSTRSAFILE, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDOK, uimsg, _countof(uimsg)); UTIL_get_lang_msg("BTN_OK", pvar, uimsg); SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); + GetDlgItemText(dlg, IDCANCEL, uimsg, _countof(uimsg)); UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); +#endif init_auth_machine_banner(pvar, dlg); init_password_control(dlg); @@ -235,10 +290,11 @@ // \x94F\x8F؎\xB8\x94s\x8C\xE3\x82̓\x89\x83x\x83\x8B\x82\xF0\x8F\x91\x82\xAB\x8A\xB7\x82\xA6 if (pvar->auth_state.failed_method != SSH_AUTH_NONE) { /* must be retrying a failed attempt */ - UTIL_get_lang_msg("DLG_AUTH_BANNER2_FAILED", pvar, "Authentication failed. Please retry."); - SetDlgItemText(dlg, IDC_SSHAUTHBANNER2, pvar->ts->UIMsg); - UTIL_get_lang_msg("DLG_AUTH_TITLE_FAILED", pvar, "Retrying SSH Authentication"); - SetWindowText(dlg, pvar->ts->UIMsg); + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("DLG_AUTH_BANNER2_FAILED", uimsg, _countof(uimsg), _T("Authentication failed. Please retry."), pvar->ts->UILanguageFile); + SetDlgItemTextT(dlg, IDC_SSHAUTHBANNER2, uimsg); + UTIL_get_lang_msgT("DLG_AUTH_TITLE_FAILED", uimsg, _countof(uimsg), _T("Retrying SSH Authentication"), pvar->ts->UILanguageFile); + SetWindowTextT(dlg, uimsg); default_method = pvar->auth_state.failed_method; } @@ -254,22 +310,22 @@ // SSH \x83o\x81[\x83W\x83\x87\x83\x93\x82ɂ\xE6\x82\xC1\x82\xC4 TIS \x82̃\x89\x83x\x83\x8B\x82\xF0\x8F\x91\x82\xAB\x8A\xB7\x82\xA6 if (pvar->settings.ssh_protocol_version == 1) { - UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE1", pvar, - "Use challenge/response(&TIS) to log in"); - SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_AUTH_METHOD_CHALLENGE1", uimsg, _countof(uimsg), + _T("Use challenge/response(&TIS) to log in"), pvar->ts->UILanguageFile); + SetDlgItemTextT(dlg, IDC_SSHUSETIS, uimsg); } else { - UTIL_get_lang_msg("DLG_AUTH_METHOD_CHALLENGE2", pvar, - "Use keyboard-&interactive to log in"); - SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_AUTH_METHOD_CHALLENGE2", uimsg, _countof(uimsg), + _T("Use keyboard-&interactive to log in"), pvar->ts->UILanguageFile); + SetDlgItemTextT(dlg, IDC_SSHUSETIS, uimsg); } if (pvar->auth_state.user != NULL) { - SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user); + SetDlgItemTextA(dlg, IDC_SSHUSERNAME, pvar->auth_state.user); EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); } else if (strlen(pvar->ssh2_username) > 0) { - SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->ssh2_username); + SetDlgItemTextA(dlg, IDC_SSHUSERNAME, pvar->ssh2_username); if (pvar->ssh2_autologin == 1) { EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE); EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAMELABEL), FALSE); @@ -276,12 +332,12 @@ } } else if (pvar->session_settings.DefaultUserName[0] != 0) { - SetDlgItemText(dlg, IDC_SSHUSERNAME, + SetDlgItemTextA(dlg, IDC_SSHUSERNAME, pvar->session_settings.DefaultUserName); } if (strlen(pvar->ssh2_password) > 0) { - SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password); + SetDlgItemTextA(dlg, IDC_SSHPASSWORD, pvar->ssh2_password); if (pvar->ssh2_autologin == 1) { EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORD), FALSE); EnableWindow(GetDlgItem(dlg, IDC_SSHPASSWORDCAPTION), FALSE); @@ -288,11 +344,11 @@ } } - SetDlgItemText(dlg, IDC_RSAFILENAME, + SetDlgItemTextA(dlg, IDC_RSAFILENAME, pvar->session_settings.DefaultRSAPrivateKeyFile); - SetDlgItemText(dlg, IDC_HOSTRSAFILENAME, + SetDlgItemTextA(dlg, IDC_HOSTRSAFILENAME, pvar->session_settings.DefaultRhostsHostPrivateKeyFile); - SetDlgItemText(dlg, IDC_LOCALUSERNAME, + SetDlgItemTextA(dlg, IDC_LOCALUSERNAME, pvar->session_settings.DefaultRhostsLocalUserName); if (pvar->ssh2_authmethod == SSH_AUTH_PASSWORD) { @@ -301,7 +357,7 @@ } else if (pvar->ssh2_authmethod == SSH_AUTH_RSA) { CheckRadioButton(dlg, IDC_SSHUSEPASSWORD, MAX_AUTH_CONTROL, IDC_SSHUSERSA); - SetDlgItemText(dlg, IDC_RSAFILENAME, pvar->ssh2_keyfile); + SetDlgItemTextA(dlg, IDC_RSAFILENAME, pvar->ssh2_keyfile); if (pvar->ssh2_autologin == 1) { EnableWindow(GetDlgItem(dlg, IDC_CHOOSERSAFILE), FALSE); EnableWindow(GetDlgItem(dlg, IDC_RSAFILENAME), FALSE); @@ -355,11 +411,11 @@ static char *alloc_control_text(HWND ctl) { - int len = GetWindowTextLength(ctl); + int len = GetWindowTextLengthA(ctl); char *result = malloc(len + 1); if (result != NULL) { - GetWindowText(ctl, result, len + 1); + GetWindowTextA(ctl, result, len + 1); result[len] = 0; } @@ -368,7 +424,7 @@ static int get_key_file_name(HWND parent, char *buf, int bufsize, PTInstVar pvar) { - OPENFILENAME params; + OPENFILENAMEA params; char fullname_buf[2048] = "identity"; char filter[MAX_UIMSG]; @@ -395,7 +451,7 @@ OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; params.lpstrDefExt = NULL; - if (GetOpenFileName(¶ms) != 0) { + if (GetOpenFileNameA(¶ms) != 0) { copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf); return 1; } else { @@ -668,10 +724,11 @@ } EndDialog(dlg, 1); +#if 0 if (DlgAuthFont != NULL) { DeleteObject(DlgAuthFont); } - +#endif return TRUE; } @@ -684,8 +741,8 @@ const int IDC_TIMER3 = 302; // challenge \x82\xC5 ask4passwd \x82\xC5CheckAuthListFirst \x82\xAA FALSE \x82̂Ƃ\xAB const int autologin_timeout = 10; // \x83~\x83\x8A\x95b PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -694,7 +751,7 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); init_auth_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthFont, pvar)) { @@ -723,7 +780,7 @@ else { DlgAuthFont = NULL; } - +#endif // SSH2 autologin\x82\xAA\x97L\x8C\xF8\x82̏ꍇ\x82́A\x83^\x83C\x83}\x82\xF0\x8Ed\x8A|\x82\xAF\x82\xE9\x81B (2004.12.1 yutaka) if (pvar->ssh2_autologin == 1) { autologin_sent_none = FALSE; @@ -869,11 +926,11 @@ pvar->auth_state.auth_dialog = NULL; notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); - +#if 0 if (DlgAuthFont != NULL) { DeleteObject(DlgAuthFont); } - +#endif return TRUE; case IDC_SSHUSERNAME: @@ -1085,8 +1142,14 @@ static void init_TIS_dlg(PTInstVar pvar, HWND dlg) { - char uimsg[MAX_UIMSG]; - + const static DlgTextInfo text_info[] = { + { 0, "DLG_TIS_TITLE" }, + { IDC_SSHAUTHBANNER, "DLG_TIS_BANNER" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_DISCONNECT" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_TIS_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -1099,7 +1162,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif init_auth_machine_banner(pvar, dlg); init_password_control(dlg); @@ -1138,8 +1201,8 @@ LPARAM lParam) { PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -1148,7 +1211,7 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); init_TIS_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgTisFont, pvar)) { @@ -1161,7 +1224,7 @@ else { DlgTisFont = NULL; } - +#endif // /auth=challenge \x82\xF0\x92lj\xC1 (2007.10.5 maya) if (pvar->ssh2_autologin == 1) { SetDlgItemText(dlg, IDC_SSHPASSWORD, pvar->ssh2_password); @@ -1175,10 +1238,11 @@ switch (LOWORD(wParam)) { case IDOK: +#if 0 if (DlgTisFont != NULL) { DeleteObject(DlgTisFont); } - +#endif return end_TIS_dlg(pvar, dlg); case IDCANCEL: /* kill the connection */ @@ -1185,11 +1249,11 @@ pvar->auth_state.auth_dialog = NULL; notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); - +#if 0 if (DlgTisFont != NULL) { DeleteObject(DlgTisFont); } - +#endif return TRUE; default: @@ -1233,8 +1297,24 @@ static void init_default_auth_dlg(PTInstVar pvar, HWND dlg) { - char uimsg[MAX_UIMSG]; - + const static DlgTextInfo text_info[] = { + { 0, "DLG_AUTHSETUP_TITLE" }, + { IDC_SSHAUTHBANNER, "DLG_AUTHSETUP_BANNER" }, + { IDC_SSHUSERNAMELABEL, "DLG_AUTHSETUP_USERNAME" }, + { IDC_SSHUSEPASSWORD, "DLG_AUTHSETUP_METHOD_PASSWORD" }, + { IDC_SSHUSERSA, "DLG_AUTHSETUP_METHOD_RSA" }, + { IDC_SSHUSERHOSTS, "DLG_AUTHSETUP_METHOD_RHOST" }, + { IDC_SSHUSETIS, "DLG_AUTHSETUP_METHOD_CHALLENGE" }, + { IDC_SSHUSEPAGEANT, "DLG_AUTHSETUP_METHOD_PAGEANT" }, + { IDC_CHOOSERSAFILE, "DLG_AUTH_PRIVATEKEY" }, + { IDC_LOCALUSERNAMELABEL, "DLG_AUTH_LOCALUSER" }, + { IDC_CHOOSEHOSTRSAFILE, "DLG_AUTH_HOST_PRIVATEKEY" }, + { IDC_CHECKAUTH, "DLG_AUTHSETUP_CHECKAUTH" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_CANCEL" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_AUTHSETUP_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -1277,6 +1357,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); +#endif switch (pvar->settings.DefaultAuthMethod) { case SSH_AUTH_RSA: @@ -1360,8 +1441,8 @@ WPARAM wParam, LPARAM lParam) { PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -1369,7 +1450,7 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); init_default_auth_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAuthSetupFont, pvar)) { @@ -1394,7 +1475,7 @@ else { DlgAuthSetupFont = NULL; } - +#endif return TRUE; /* because we do not set the focus */ case WM_COMMAND: @@ -1402,20 +1483,20 @@ switch (LOWORD(wParam)) { case IDOK: - +#if 0 if (DlgAuthSetupFont != NULL) { DeleteObject(DlgAuthSetupFont); } - +#endif return end_default_auth_dlg(pvar, dlg); case IDCANCEL: EndDialog(dlg, 0); - +#if 0 if (DlgAuthSetupFont != NULL) { DeleteObject(DlgAuthSetupFont); } - +#endif return TRUE; case IDC_CHOOSERSAFILE: Modified: branches/cmake/ttssh2/ttxssh/dns.c =================================================================== --- branches/cmake/ttssh2/ttxssh/dns.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/dns.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -88,7 +88,7 @@ } logprintf(LOG_LEVEL_VERBOSE, "verify_hostkey_dns: key type = %d, SSHFP type = %d", key->type, hostkey_alg); - status = DnsQuery(hostname, DNS_TYPE_SSHFP, DNS_QUERY_STANDARD, NULL, &rec, NULL); + status = DnsQuery_A(hostname, DNS_TYPE_SSHFP, DNS_QUERY_STANDARD, NULL, &rec, NULL); if (status == 0) { for (p=rec; p!=NULL; p=p->pNext) { Modified: branches/cmake/ttssh2/ttxssh/fwd.c =================================================================== --- branches/cmake/ttssh2/ttxssh/fwd.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/fwd.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -528,7 +528,7 @@ if (pvar->fwd_state.accept_wnd == NULL) { UTIL_get_lang_msg("DLG_FWDMON_TITLE", pvar, "TTSSH Port Forwarding Monitor"); pvar->fwd_state.accept_wnd = - CreateWindow("STATIC", pvar->ts->UIMsg, + CreateWindowA("STATIC", pvar->ts->UIMsg, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, NULL, NULL, hInst, NULL); if (pvar->fwd_state.accept_wnd != NULL) { @@ -1856,7 +1856,7 @@ if (pvar->session_settings.ForwardAgentConfirm) { UTIL_get_lang_msg("MSG_FWD_AGENT_FORWARDING_CONFIRM", pvar, "Are you sure you want to accept agent-forwarding request?"); - if (MessageBox(cur_active != NULL ? cur_active : pvar->NotificationWindow, + if (MessageBoxA(cur_active != NULL ? cur_active : pvar->NotificationWindow, pvar->ts->UIMsg, "TTSSH", MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) == IDYES) { return TRUE; Modified: branches/cmake/ttssh2/ttxssh/fwdui.c =================================================================== --- branches/cmake/ttssh2/ttxssh/fwdui.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/fwdui.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -37,12 +37,31 @@ #include "resource.h" #include "x11util.h" #include "util.h" +#include "dlglib.h" #include "servicenames.h" -static HFONT DlgFwdEditFont; -static HFONT DlgFwdFont; +#if defined(UNICODE) +#undef SetDlgItemText +#define SetDlgItemText SetDlgItemTextA +#undef GetDlgItemText +#define GetDlgItemText GetDlgItemTextA +#undef GetWindowText +#define GetWindowText GetWindowTextA +#undef SetWindowText +#define SetWindowText SetWindowTextA +#endif +#undef DialogBoxParam +#define DialogBoxParam(p1,p2,p3,p4,p5) \ + TTDialogBoxParam(p1,p2,p3,p4,p5) +#undef EndDialog +#define EndDialog(p1,p2) \ + TTEndDialog(p1, p2) + +//static HFONT DlgFwdEditFont; +//static HFONT DlgFwdFont; + typedef struct { FWDRequestSpec *spec; PTInstVar pvar; @@ -492,8 +511,19 @@ FWDRequestSpec *requests = (FWDRequestSpec *) malloc(sizeof(FWDRequestSpec) * num_specs); int i; - char uimsg[MAX_UIMSG]; - + const static DlgTextInfo text_info[] = { + { 0, "DLG_FWD_TITLE" }, + { IDC_PORTFORWARD, "DLG_FWDSETUP_LIST" }, + { IDC_ADD, "DLG_FWDSETUP_ADD" }, + { IDC_EDIT, "DLG_FWDSETUP_EDIT" }, + { IDC_REMOVE, "DLG_FWDSETUP_REMOVE" }, + { IDC_XFORWARD, "DLG_FWDSETUP_X" }, + { IDC_SSHFWDX11, "DLG_FWDSETUP_XAPP" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_CANCEL" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_FWD_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -521,7 +551,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif FWD_get_request_specs(pvar, requests, num_specs); for (i = 0; i < num_specs; i++) { @@ -975,8 +1005,8 @@ { FWDEditClosure *closure; PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; BOOL result; switch (msg) { @@ -986,7 +1016,7 @@ pvar = closure->pvar; init_fwd_edit_dlg(pvar, closure->spec, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgFwdEditFont, pvar)) { @@ -1017,6 +1047,7 @@ else { DlgFwdEditFont = NULL; } +#endif return FALSE; /* because we set the focus */ case WM_COMMAND: @@ -1028,9 +1059,11 @@ result = end_fwd_edit_dlg(closure->pvar, closure->spec, dlg); if (result) { +#if 0 if (DlgFwdEditFont != NULL) { DeleteObject(DlgFwdEditFont); } +#endif } return result; @@ -1037,11 +1070,11 @@ case IDCANCEL: EndDialog(dlg, 0); - +#if 0 if (DlgFwdEditFont != NULL) { DeleteObject(DlgFwdEditFont); } - +#endif return TRUE; case IDC_SSHFWDLOCALTOREMOTE: @@ -1140,8 +1173,8 @@ LPARAM lParam) { PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; BOOL ret; switch (msg) { @@ -1150,7 +1183,7 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); init_fwd_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgFwdFont, pvar)) { @@ -1167,7 +1200,7 @@ else { DlgFwdFont = NULL; } - +#endif return TRUE; /* because we do not set the focus */ case WM_COMMAND: @@ -1177,21 +1210,21 @@ case IDOK: ret = end_fwd_dlg(pvar, dlg); - +#if 0 if (ret == TRUE && DlgFwdFont != NULL) { DeleteObject(DlgFwdFont); } - +#endif return ret; case IDCANCEL: free_all_listbox_specs(dlg); EndDialog(dlg, 0); - +#if 0 if (DlgFwdFont != NULL) { DeleteObject(DlgFwdFont); } - +#endif return TRUE; case IDC_ADD: Modified: branches/cmake/ttssh2/ttxssh/hosts.c =================================================================== --- branches/cmake/ttssh2/ttxssh/hosts.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/hosts.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -39,6 +39,7 @@ #include "key.h" #include "hosts.h" #include "dns.h" +#include "dlglib.h" #include <openssl/bn.h> #include <openssl/evp.h> @@ -52,10 +53,23 @@ #include <direct.h> #include <memory.h> +#if defined(UNICODE) +#undef SetDlgItemText +#define SetDlgItemText SetDlgItemTextA +#undef GetDlgItemText +#define GetDlgItemText GetDlgItemTextA +#endif -static HFONT DlgHostsAddFont; -static HFONT DlgHostsReplaceFont; +#undef DialogBoxParam +#define DialogBoxParam(p1,p2,p3,p4,p5) \ + TTDialogBoxParam(p1,p2,p3,p4,p5) +#undef EndDialog +#define EndDialog(p1,p2) \ + TTEndDialog(p1, p2) +//static HFONT DlgHostsAddFont; +//static HFONT DlgHostsReplaceFont; + // BASE64\x8D\\x90\xAC\x95\xB6\x8E\x9A\x97\xF1\x81i\x82\xB1\x82\xB1\x82ł\xCD'='\x82͊܂܂\xEA\x82Ă\xA2\x82Ȃ\xA2\x81j static char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @@ -936,7 +950,7 @@ case SSH_DIGEST_MD5: fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_HEX, dgst_alg); if (fp != NULL) { - SendMessage(GetDlgItem(dlg, IDC_FINGER_PRINT), WM_SETTEXT, 0, (LPARAM)fp); + SetDlgItemTextA(dlg, IDC_FINGER_PRINT, fp); free(fp); } break; @@ -944,7 +958,7 @@ default: fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_BASE64, SSH_DIGEST_SHA256); if (fp != NULL) { - SendMessage(GetDlgItem(dlg, IDC_FINGER_PRINT), WM_SETTEXT, 0, (LPARAM)fp); + SetDlgItemTextA(dlg, IDC_FINGER_PRINT, fp); free(fp); } break; @@ -953,7 +967,7 @@ // \x83r\x83W\x83\x85\x83A\x83\x8B\x89\xBBfingerprint\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9 fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_RANDOMART, dgst_alg); if (fp != NULL) { - SendMessage(GetDlgItem(dlg, IDC_FP_RANDOMART), WM_SETTEXT, 0, (LPARAM)fp); + SetDlgItemTextA(dlg, IDC_FP_RANDOMART, fp); free(fp); } } @@ -1701,10 +1715,19 @@ static BOOL CALLBACK hosts_add_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { + const static DlgTextInfo text_info[] = { + { 0, "DLG_UNKNOWNHOST_TITLE" }, + { IDC_HOSTWARNING, "DLG_UNKNOWNHOST_WARNING" }, + { IDC_HOSTWARNING2, "DLG_UNKNOWNHOST_WARNING2" }, + { IDC_HOSTFINGERPRINT, "DLG_UNKNOWNHOST_FINGERPRINT" }, + { IDC_FP_HASH_ALG, "DLG_UNKNOWNHOST_FP_HASH_ALGORITHM" }, + { IDC_ADDTOKNOWNHOSTS, "DLG_UNKNOWNHOST_ADD" }, + { IDC_CONTINUE, "BTN_CONTINUE" }, + { IDCANCEL, "BTN_DISCONNECT" }, + }; PTInstVar pvar; - LOGFONT logfont; - HFONT font; - char uimsg[MAX_UIMSG]; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -1713,6 +1736,8 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); // \x92lj\xC1\x81E\x92u\x82\xAB\x8A\xB7\x82\xA6\x82Ƃ\xE0 init_hosts_dlg \x82\xF0\x8CĂ\xF1\x82ł\xA2\x82\xE9\x82̂ŁA\x82\xBB\x82̑O\x82ɃZ\x83b\x83g\x82\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9 + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_UNKNOWNHOST_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -1737,7 +1762,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); @@ -1776,7 +1801,7 @@ } init_hosts_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgHostsAddFont, pvar)) { @@ -1796,7 +1821,7 @@ else { DlgHostsAddFont = NULL; } - +#endif // add host check box\x82Ƀ`\x83F\x83b\x83N\x82\xF0\x83f\x83t\x83H\x83\x8B\x83g\x82œ\xFC\x82\xEA\x82Ă\xA8\x82\xAD SendMessage(GetDlgItem(dlg, IDC_ADDTOKNOWNHOSTS), BM_SETCHECK, BST_CHECKED, 0); @@ -1825,11 +1850,11 @@ pvar->hosts_state.hosts_dialog = NULL; EndDialog(dlg, 1); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDCANCEL: /* kill the connection */ @@ -1837,11 +1862,11 @@ pvar->hosts_state.hosts_dialog = NULL; notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDC_FP_HASH_ALG_MD5: @@ -1867,10 +1892,19 @@ static BOOL CALLBACK hosts_replace_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { + const static DlgTextInfo text_info[] = { + { 0, "DLG_UNKNOWNHOST_TITLE" }, + { IDC_HOSTWARNING, "DLG_DIFFERENTKEY_WARNING" }, + { IDC_HOSTWARNING2, "DLG_DIFFERENTKEY_WARNING2" }, + { IDC_HOSTFINGERPRINT, "DLG_DIFFERENTKEY_FINGERPRINT" }, + { IDC_FP_HASH_ALG, "DLG_DIFFERENTKEY_FP_HASH_ALGORITHM" }, + { IDC_ADDTOKNOWNHOSTS, "DLG_DIFFERENTKEY_REPLACE" }, + { IDC_CONTINUE, "BTN_CONTINUE" }, + { IDCANCEL, "BTN_DISCONNECT" }, + }; PTInstVar pvar; - LOGFONT logfont; - HFONT font; - char uimsg[MAX_UIMSG]; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -1879,6 +1913,8 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); // \x92lj\xC1\x81E\x92u\x82\xAB\x8A\xB7\x82\xA6\x82Ƃ\xE0 init_hosts_dlg \x82\xF0\x8CĂ\xF1\x82ł\xA2\x82\xE9\x82̂ŁA\x82\xBB\x82̑O\x82ɃZ\x83b\x83g\x82\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9 + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_DIFFERENTKEY_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -1903,7 +1939,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); @@ -1942,7 +1978,7 @@ } init_hosts_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgHostsReplaceFont, pvar)) { @@ -1961,7 +1997,7 @@ else { DlgHostsReplaceFont = NULL; } - +#endif // \x83f\x83t\x83H\x83\x8B\x83g\x82Ń`\x83F\x83b\x83N\x82͓\xFC\x82\xEA\x82Ȃ\xA2 return TRUE; /* because we do not set the focus */ @@ -1989,11 +2025,11 @@ pvar->hosts_state.hosts_dialog = NULL; EndDialog(dlg, 1); - +#if 0 if (DlgHostsReplaceFont != NULL) { DeleteObject(DlgHostsReplaceFont); } - +#endif return TRUE; case IDCANCEL: /* kill the connection */ @@ -2001,11 +2037,11 @@ pvar->hosts_state.hosts_dialog = NULL; notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); - +#if 0 if (DlgHostsReplaceFont != NULL) { DeleteObject(DlgHostsReplaceFont); } - +#endif return TRUE; case IDC_FP_HASH_ALG_MD5: @@ -2031,10 +2067,19 @@ static BOOL CALLBACK hosts_add2_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { + const static DlgTextInfo text_info[] = { + { 0, "DLG_DIFFERENTTYPEKEY_TITLE" }, + { IDC_HOSTWARNING, "DLG_DIFFERENTTYPEKEY_WARNING" }, + { IDC_HOSTWARNING2, "DLG_DIFFERENTTYPEKEY_WARNING2" }, + { IDC_HOSTFINGERPRINT, "DLG_DIFFERENTTYPEKEY_FINGERPRINT" }, + { IDC_FP_HASH_ALG, "DLG_DIFFERENTTYPEKEY_FP_HASH_ALGORITHM" }, + { IDC_ADDTOKNOWNHOSTS, "DLG_DIFFERENTTYPEKEY_ADD" }, + { IDC_CONTINUE, "BTN_CONTINUE" }, + { IDCANCEL, "BTN_DISCONNECT" }, + }; PTInstVar pvar; - LOGFONT logfont; - HFONT font; - char uimsg[MAX_UIMSG]; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: @@ -2043,6 +2088,8 @@ SetWindowLongPtr(dlg, DWLP_USER, lParam); // \x92lj\xC1\x81E\x92u\x82\xAB\x8A\xB7\x82\xA6\x82Ƃ\xE0 init_hosts_dlg \x82\xF0\x8CĂ\xF1\x82ł\xA2\x82\xE9\x82̂ŁA\x82\xBB\x82̑O\x82ɃZ\x83b\x83g\x82\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9 + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_DIFFERENTTYPEKEY_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -2067,7 +2114,7 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_DISCONNECT", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); @@ -2106,7 +2153,7 @@ } init_hosts_dlg(pvar, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgHostsAddFont, pvar)) { @@ -2126,7 +2173,7 @@ else { DlgHostsAddFont = NULL; } - +#endif // add host check box \x82̃f\x83t\x83H\x83\x8B\x83g\x82\xCD off \x82ɂ\xB7\x82\xE9 // SendMessage(GetDlgItem(dlg, IDC_ADDTOKNOWNHOSTS), BM_SETCHECK, BST_CHECKED, 0); @@ -2155,11 +2202,11 @@ pvar->hosts_state.hosts_dialog = NULL; EndDialog(dlg, 1); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDCANCEL: /* kill the connection */ @@ -2167,11 +2214,11 @@ pvar->hosts_state.hosts_dialog = NULL; notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDC_FP_HASH_ALG_MD5: Modified: branches/cmake/ttssh2/ttxssh/key.c =================================================================== --- branches/cmake/ttssh2/ttxssh/key.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/key.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -27,6 +27,7 @@ */ #include "key.h" #include "resource.h" +#include "dlglib.h" #include <openssl/rsa.h> #include <openssl/dsa.h> @@ -33,6 +34,13 @@ #include <openssl/ecdsa.h> #include <openssl/buffer.h> +#undef DialogBoxParam +#define DialogBoxParam(p1,p2,p3,p4,p5) \ + TTDialogBoxParam(p1,p2,p3,p4,p5) +#undef EndDialog +#define EndDialog(p1,p2) \ + TTEndDialog(p1, p2) + #define INTBLOB_LEN 20 #define SIGBLOB_LEN (2*INTBLOB_LEN) @@ -2153,7 +2161,7 @@ strncat_s(buf, buf_len, "\r\n", _TRUNCATE); } } - SendDlgItemMessage(dlg, IDC_ADDKEY_EDIT, WM_SETTEXT, 0, (LPARAM)(char *)buf); + SetDlgItemTextA(dlg, IDC_ADDKEY_EDIT, buf); free(buf); } @@ -2160,7 +2168,7 @@ if (ctx->nold > 0) { buf_len = 100 * ctx->nold; buf = calloc(100, ctx->nold); - SendDlgItemMessage(dlg, IDC_REMOVEKEY_EDIT, WM_SETTEXT, 0, (LPARAM)(char *)""); + SetDlgItemTextA(dlg, IDC_REMOVEKEY_EDIT, ""); for (i = 0; i < ctx->nold; i++) { switch (dgst_alg) { case SSH_DIGEST_MD5: @@ -2181,7 +2189,7 @@ strncat_s(buf, buf_len, "\r\n", _TRUNCATE); } } - SendDlgItemMessage(dlg, IDC_REMOVEKEY_EDIT, WM_SETTEXT, 0, (LPARAM)(char *)buf); + SetDlgItemTextA(dlg, IDC_REMOVEKEY_EDIT, buf); free(buf); } } @@ -2188,10 +2196,10 @@ static BOOL CALLBACK hosts_updatekey_dlg_proc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { - static HFONT DlgHostsAddFont; +// static HFONT DlgHostsAddFont; PTInstVar pvar; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; char buf[1024]; char *host; struct hostkeys_update_ctx *ctx; @@ -2202,44 +2210,44 @@ pvar = (PTInstVar)lParam; SetWindowLongPtr(dlg, DWLP_USER, lParam); - GetWindowText(dlg, uimsg, sizeof(uimsg)); + GetWindowTextA(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOSTKEY_ROTATION_TITLE", pvar, uimsg); - SetWindowText(dlg, pvar->ts->UIMsg); + SetWindowTextA(dlg, pvar->ts->UIMsg); host = pvar->ssh_state.hostname; ctx = pvar->hostkey_ctx; - GetDlgItemText(dlg, IDC_HOSTKEY_MESSAGE, uimsg, sizeof(uimsg)); + GetDlgItemTextA(dlg, IDC_HOSTKEY_MESSAGE, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOSTKEY_ROTATION_WARNING", pvar, uimsg); _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, host, ctx->nnew, ctx->nold ); - SetDlgItemText(dlg, IDC_HOSTKEY_MESSAGE, buf); + SetDlgItemTextA(dlg, IDC_HOSTKEY_MESSAGE, buf); - GetDlgItemText(dlg, IDC_FP_HASH_ALG, uimsg, sizeof(uimsg)); + GetDlgItemTextA(dlg, IDC_FP_HASH_ALG, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOSTKEY_ROTATION_FP_HASH_ALGORITHM", pvar, uimsg); - SetDlgItemText(dlg, IDC_FP_HASH_ALG, pvar->ts->UIMsg); + SetDlgItemTextA(dlg, IDC_FP_HASH_ALG, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_ADDKEY_TEXT, uimsg, sizeof(uimsg)); + GetDlgItemTextA(dlg, IDC_ADDKEY_TEXT, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOSTKEY_ROTATION_ADD", pvar, uimsg); _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, ctx->nnew); - SetDlgItemText(dlg, IDC_ADDKEY_TEXT, buf); + SetDlgItemTextA(dlg, IDC_ADDKEY_TEXT, buf); - GetDlgItemText(dlg, IDC_REMOVEKEY_TEXT, uimsg, sizeof(uimsg)); + GetDlgItemTextA(dlg, IDC_REMOVEKEY_TEXT, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOSTKEY_ROTATION_REMOVE", pvar, uimsg); _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, ctx->nold); - SetDlgItemText(dlg, IDC_REMOVEKEY_TEXT, buf); + SetDlgItemTextA(dlg, IDC_REMOVEKEY_TEXT, buf); CheckDlgButton(dlg, IDC_FP_HASH_ALG_SHA256, TRUE); hosts_updatekey_dlg_set_fingerprint(pvar, dlg, SSH_DIGEST_SHA256); - GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); + GetDlgItemTextA(dlg, IDOK, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_YES", pvar, uimsg); - SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); + SetDlgItemTextA(dlg, IDOK, pvar->ts->UIMsg); + GetDlgItemTextA(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_NO", pvar, uimsg); - SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - + SetDlgItemTextA(dlg, IDCANCEL, pvar->ts->UIMsg); +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgHostsAddFont, pvar)) { @@ -2257,7 +2265,7 @@ else { DlgHostsAddFont = NULL; } - +#endif return TRUE; /* because we do not set the focus */ case WM_COMMAND: @@ -2267,20 +2275,20 @@ case IDOK: EndDialog(dlg, 1); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDCANCEL: /* kill the connection */ EndDialog(dlg, 0); - +#if 0 if (DlgHostsAddFont != NULL) { DeleteObject(DlgHostsAddFont); } - +#endif return TRUE; case IDC_FP_HASH_ALG_MD5: Modified: branches/cmake/ttssh2/ttxssh/sftp.c =================================================================== --- branches/cmake/ttssh2/ttxssh/sftp.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/sftp.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -808,8 +808,8 @@ switch (uMsg) { case WM_KEYDOWN: if ((int)wParam == VK_RETURN) { - GetWindowText(hwnd, buf, sizeof(buf)); - SetWindowText(hwnd, ""); + GetWindowTextA(hwnd, buf, sizeof(buf)); + SetWindowTextA(hwnd, ""); if (buf[0] != '\0') { SendDlgItemMessage(GetParent(hwnd), IDC_SFTP_CONSOLE, EM_REPLACESEL, 0, (LPARAM) buf); SendDlgItemMessage(GetParent(hwnd), IDC_SFTP_CONSOLE, EM_REPLACESEL, 0, Modified: branches/cmake/ttssh2/ttxssh/ssh.c =================================================================== --- branches/cmake/ttssh2/ttxssh/ssh.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/ssh.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -54,6 +54,7 @@ #include "fwd.h" #include "sftp.h" #include "kex.h" +#include "dlglib.h" #include <sys/types.h> #include <sys/stat.h> @@ -63,6 +64,25 @@ #include <direct.h> #include <io.h> +#if defined(UNICODE) +#undef GetPrivateProfileString +#define GetPrivateProfileString GetPrivateProfileStringA +#undef GetPrivateProfileInt +#define GetPrivateProfileInt GetPrivateProfileIntA +#undef WritePrivateProfileString +#define WritePrivateProfileString WritePrivateProfileStringA +#undef MessageBox +#define MessageBox MessageBoxA +#undef GetDlgItemText +#define GetDlgItemText GetDlgItemTextA +#undef SetDlgItemText +#define SetDlgItemText SetDlgItemTextA +#undef GetWindowText +#define GetWindowText GetWindowTextA +#undef SetWindowText +#define SetWindowText SetWindowTextA +#endif + // SSH2 macro #ifdef _DEBUG #define SSH2_DEBUG @@ -7337,14 +7357,21 @@ static BOOL CALLBACK passwd_change_dialog(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { + const static DlgTextInfo text_info[] = { + { 0, "DLG_PASSCHG_TITLE" }, + { IDC_PASSWD_CHANGEREQ_MSG, "DLG_PASSCHG_MESSAGE" }, + { IDC_OLD_PASSWD_LABEL, "DLG_PASSCHG_OLDPASSWD" }, + { IDC_NEW_PASSWD_LABEL, "DLG_PASSCHG_NEWPASSWD" }, + { IDC_CONFIRM_PASSWD_LABEL, "DLG_PASSCHG_CONFIRMPASSWD" }, + }; char old_passwd[PASSWD_MAXLEN]; char new_passwd[PASSWD_MAXLEN]; char retype_passwd[PASSWD_MAXLEN]; static struct change_password *cp; - LOGFONT logfont; - HFONT font; - static HFONT DlgChgPassFont; - char uimsg[MAX_UIMSG]; +// LOGFONT logfont; +// HFONT font; +// static HFONT DlgChgPassFont; +// char uimsg[MAX_UIMSG]; static PTInstVar pvar; @@ -7353,6 +7380,7 @@ cp = (struct change_password *)lParam; pvar = cp->pvar; +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); @@ -7362,7 +7390,9 @@ else { DlgChgPassFont = NULL; } - +#endif + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_PASSCHG_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -7382,7 +7412,7 @@ GetDlgItemText(dlg, IDC_CONFIRM_PASSWD_LABEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_PASSCHG_CONFIRMPASSWD", pvar, uimsg); SetDlgItemText(dlg, IDC_CONFIRM_PASSWD_LABEL, pvar->ts->UIMsg); - +#endif SetFocus(GetDlgItem(dlg, IDC_OLD_PASSWD)); return FALSE; @@ -7390,9 +7420,9 @@ case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: - SendMessage(GetDlgItem(dlg, IDC_OLD_PASSWD), WM_GETTEXT , sizeof(old_passwd), (LPARAM)old_passwd); - SendMessage(GetDlgItem(dlg, IDC_NEW_PASSWD), WM_GETTEXT , sizeof(new_passwd), (LPARAM)new_passwd); - SendMessage(GetDlgItem(dlg, IDC_CONFIRM_PASSWD), WM_GETTEXT , sizeof(retype_passwd), (LPARAM)retype_passwd); + GetDlgItemTextA(dlg, IDC_OLD_PASSWD, old_passwd, sizeof(old_passwd)); + GetDlgItemTextA(dlg, IDC_NEW_PASSWD, new_passwd, sizeof(new_passwd)); + GetDlgItemTextA(dlg, IDC_CONFIRM_PASSWD, retype_passwd, sizeof(retype_passwd)); if (strcmp(new_passwd, retype_passwd) == 1) { UTIL_get_lang_msg("MSG_PASSCHG_MISMATCH", pvar, "Mismatch; try again."); @@ -7410,12 +7440,12 @@ strncpy_s(cp->new_passwd, sizeof(cp->new_passwd), new_passwd, _TRUNCATE); EndDialog(dlg, 1); // dialog close - +#if 0 if (DlgChgPassFont != NULL) { DeleteObject(DlgChgPassFont); DlgChgPassFont = NULL; } - +#endif return TRUE; case IDCANCEL: @@ -7422,12 +7452,12 @@ // \x90ڑ\xB1\x82\xF0\x90\xE9 notify_closed_connection(pvar, "authentication cancelled"); EndDialog(dlg, 0); // dialog close - +#if 0 if (DlgChgPassFont != NULL) { DeleteObject(DlgChgPassFont); DlgChgPassFont = NULL; } - +#endif return TRUE; } } @@ -8186,6 +8216,7 @@ return 0; } +#if 0 void InitDlgProgress(HWND HDlg, int id_Progress, int *CurProgStat) { HWND HProg; HProg = GetDlgItem(HDlg, id_Progress); @@ -8198,6 +8229,7 @@ return; } +#endif static unsigned __stdcall ssh_scp_thread(void *p) { @@ -8218,7 +8250,7 @@ buf = malloc(buflen); //SendMessage(GetDlgItem(hWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfile); - SendMessage(GetDlgItem(hWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfilefull); + SetDlgItemTextA(hWnd, IDC_FILENAME, c->scp.localfilefull); InitDlgProgress(hWnd, IDC_PROGBAR, &ProgStat); @@ -8267,7 +8299,7 @@ rate = (int)(100 * total_size / c->scp.filestat.st_size); _snprintf_s(s, sizeof(s), _TRUNCATE, "%lld / %lld (%d%%)", total_size, c->scp.filestat.st_size, rate); - SendMessage(GetDlgItem(hWnd, IDC_PROGRESS), WM_SETTEXT, 0, (LPARAM)s); + SetDlgItemTextA(hWnd, IDC_PROGRESS, s); if (ProgStat != rate) { ProgStat = rate; SendDlgItemMessage(hWnd, IDC_PROGBAR, PBM_SETPOS, (WPARAM)ProgStat, 0); @@ -8290,7 +8322,7 @@ else { _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d", elapsed / 60, elapsed % 60); } - SendDlgItemMessage(hWnd, IDC_PROGTIME, WM_SETTEXT, 0, (LPARAM)s); + SetDlgItemTextA(hWnd, IDC_PROGTIME, s); prev_elapsed = elapsed; } @@ -8437,7 +8469,7 @@ rate =(int)(100 * c->scp.filercvsize / c->scp.filetotalsize); _snprintf_s(s, sizeof(s), _TRUNCATE, "%lld / %lld (%d%%)", c->scp.filercvsize, c->scp.filetotalsize, rate); - SendMessage(GetDlgItem(c->scp.progress_window, IDC_PROGRESS), WM_SETTEXT, 0, (LPARAM)s); + SetDlgItemTextA(c->scp.progress_window, IDC_PROGRESS, s); if (ProgStat != rate) { ProgStat = rate; @@ -8461,7 +8493,7 @@ else { _snprintf_s(s, sizeof(s), _TRUNCATE, "%d:%02d", elapsed / 60, elapsed % 60); } - SendDlgItemMessage(hWnd, IDC_PROGTIME, WM_SETTEXT, 0, (LPARAM)s); + SetDlgItemTextA(hWnd, IDC_PROGTIME, s); prev_elapsed = elapsed; } @@ -8618,7 +8650,7 @@ if (hDlgWnd != NULL) { c->scp.progress_window = hDlgWnd; SetWindowText(hDlgWnd, "TTSSH: SCP receiving file"); - SendMessage(GetDlgItem(hDlgWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfilefull); + SetDlgItemTextA(hDlgWnd, IDC_FILENAME, c->scp.localfilefull); ShowWindow(hDlgWnd, SW_SHOW); } Modified: branches/cmake/ttssh2/ttxssh/ttxssh.c =================================================================== --- branches/cmake/ttssh2/ttxssh/ttxssh.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/ttxssh.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 1998-2001, Robert O'Callahan * (C) 2004-2017 TeraTerm Project * All rights reserved. @@ -50,6 +50,7 @@ #include <sys/stat.h> #include <time.h> #include <mbstring.h> +#include <tchar.h> #include "resource.h" #include <commctrl.h> @@ -75,6 +76,7 @@ #include "buffer.h" #include "cipher.h" #include "key.h" +#include "dlglib.h" #include "sftp.h" @@ -82,6 +84,32 @@ #include "libputty.h" +#if defined(UNICODE) +#undef GetPrivateProfileString +#define GetPrivateProfileString GetPrivateProfileStringA +#undef GetPrivateProfileInt +#define GetPrivateProfileInt GetPrivateProfileIntA +#undef WritePrivateProfileString +#define WritePrivateProfileString WritePrivateProfileStringA +#undef MessageBox +#define MessageBox MessageBoxA +#undef GetDlgItemText +#define GetDlgItemText GetDlgItemTextA +#undef SetDlgItemText +#define SetDlgItemText SetDlgItemTextA +#undef GetWindowText +#define GetWindowText GetWindowTextA +#undef SetWindowText +#define SetWindowText SetWindowTextA +#endif + +#undef DialogBoxParam +#define DialogBoxParam(p1,p2,p3,p4,p5) \ + TTDialogBoxParam(p1,p2,p3,p4,p5) +#undef EndDialog +#define EndDialog(p1,p2) \ + TTEndDialog(p1, p2) + #define MATCH_STR(s, o) strncmp((s), (o), NUM_ELEM(o) - 1) #define MATCH_STR_I(s, o) _strnicmp((s), (o), NUM_ELEM(o) - 1) @@ -94,11 +122,11 @@ static HICON SecureNotifyIcon = NULL; static HICON OldNotifyIcon = NULL; -static HFONT DlgHostFont; -static HFONT DlgAboutFont; +//static HFONT DlgHostFont; +//static HFONT DlgAboutFont; static HFONT DlgAboutTextFont; -static HFONT DlgSetupFont; -static HFONT DlgKeygenFont; +//static HFONT DlgSetupFont; +//static HFONT DlgKeygenFont; static TInstVar *pvar; @@ -172,6 +200,51 @@ ssh_heartbeat_lock_finalize(); } +static void SetDialogFont(const char *UILanguageFile) +{ + LOGFONTA logfont; + BOOL result; + + // 明示的に指定されている場合はそれに従う + result = GetI18nLogfont("Tera Term", "DLG_FONT", &logfont, 72, UILanguageFile); + + // 明示されていない場合 + if (result == FALSE) { + // ガイドラインに沿った設定を行う + // https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511282.aspx + if (IsWindowsVistaOrLater()) { + // Windows Vista以降 Segoe UI + strcpy(logfont.lfFaceName, "Segoe UI"); + logfont.lfCharSet = 0; + logfont.lfHeight = -9; + logfont.lfWidth = 0; + } else if (IsWindows2000OrLater()) { + // Windows®XP および Windows 2000 をターゲットとする場合は、 + // 8 ポイント MS Shell Dlg 2 擬似フォントを使用します。 + // このフォントは Tahoma にマッピングされます。 + strcpy(logfont.lfFaceName, "MS Shell Dlg 2"); + logfont.lfCharSet = 0; + logfont.lfHeight = -8; + logfont.lfWidth = 0; + } else { + // 以前のバージョンをターゲットとする場合は + // 8 ポイント MS Shell Dlg 擬似フォントを使用します + // MS Sans Serif にそれぞれマッピングされます + strcpy(logfont.lfFaceName, "MS Shell Dlg"); + logfont.lfCharSet = 0; + logfont.lfHeight = -8; + logfont.lfWidth = 0; + } + result = TRUE; + } + + if (result) { + TTSetDlgFont(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet); + } else { + TTSetDlgFont(NULL, 0, 0); + } +} + static void PASCAL TTXInit(PTTSet ts, PComVar cv) { pvar->settings = *pvar->ts_SSH; @@ -182,6 +255,7 @@ pvar->err_msg = NULL; init_TTSSH(pvar); + SetDialogFont(ts->UILanguageFile); } static void normalize_generic_order(char *buf, char default_strings[], int default_strings_len) @@ -193,19 +267,19 @@ memset(listed, 0, sizeof(listed)); memset(allowed, 0, sizeof(allowed)); - // \x8B\x96\x89\xB3\x82\xEA\x82Ă\xA2\x82镶\x8E\x9A\x82̃\x8A\x83X\x83g\x82\xF0\x8D\xEC\x82\xE9\x81B + // 許可されている文字のリストを作る。 for (i = 0; i < default_strings_len ; i++) { allowed[default_strings[i]] = 1; } - // \x8Ew\x92肳\x82ꂽ\x95\xB6\x8E\x9A\x97\xF1\x82𑖍\xB8\x82\xB5\x81A\x8B\x96\x89\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x95\xB6\x8E\x9A\x81A\x8Fd\x95\xA1\x82\xB7\x82镶\x8E\x9A\x82͍폜\x82\xB7\x82\xE9\x81B + // 指定された文字列を走査し、許可されていない文字、重複する文字は削除する。 // - // ex. (i=5 \x82̕\xB6\x8E\x9A\x82\xF0\x8D폜\x82\xB7\x82\xE9) + // ex. (i=5 の文字を削除する) // i=012345 // >:=9<87;A@?B3026(\0) // i+1 // <------------> - // \x81\xAB + // ↓ // >:=9<7;A@?B3026(\0) // for (i = 0; buf[i] != 0; i++) { @@ -220,22 +294,22 @@ listed[num] = 1; } - // disabled line\x82\xAA\x82\xA0\x82\xEA\x82A\x88ʒu\x82\xF0\x8Ao\x82\xA6\x82Ă\xA8\x82\xAD\x81B + // disabled lineがあれば、位置を覚えておく。 if (num == 0) { k = i; } } - // \x8Ew\x92肳\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x95\xB6\x8E\x9A\x82\xAA\x82\xA0\x82\xEA\x82Adisabled line\x82̒\xBC\x91O\x82ɑ}\x93\xFC\x82\xB7\x82\xE9\x81B + // 指定されていない文字があれば、disabled lineの直前に挿入する。 // - // ex. (Z\x82\xF0\x91}\x93\xFC\x82\xB7\x82\xE9) + // ex. (Zを挿入する) // k // >:=9<87;A@?B3026(\0) // k+1 // <----> - // \x81\xAB k + // ↓ k // >:=9<87;A@?B30026(\0) - // \x81\xAB k + // ↓ k // >:=9<87;A@?B3Z026(\0) // for (j = 0; j < default_strings_len && default_strings[j] != 0; j++) { @@ -245,7 +319,7 @@ int copylen = strlen(buf + k + 1) + 1; memmove(buf + k + 1, buf + k, copylen); - buf[k + 1 + copylen] = '\0'; // \x8FI\x92[\x82\xF0\x96Y\x82ꂸ\x82ɕt\x82\xAF\x82\xE9\x81B + buf[k + 1 + copylen] = '\0'; // 終端を忘れずに付ける。 buf[k] = num + '0'; k++; i++; @@ -258,7 +332,7 @@ j++; } - // disabled line\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x82́A\x82\xBB\x82̂܂ܖ\x96\x94\xF6\x82ɒlj\xC1\x82\xB7\x82\xE9\x81B + // disabled lineが存在しない場合は、そのまま末尾に追加する。 for (; j < default_strings_len ; j++) { int num = default_strings[j]; @@ -495,27 +569,27 @@ // SSH heartbeat time(second) (2004.12.11 yutaka) settings->ssh_heartbeat_overtime = GetPrivateProfileInt("TTSSH", "HeartBeat", 60, fileName); - // \x83p\x83X\x83\x8F\x81[\x83h\x94F\x8F\xA8\x82\xE6\x82ь\xF6\x8AJ\x8C\xAE\x94F\x8FɎg\x82\xA4\x83p\x83X\x83\x8F\x81[\x83h\x82\xF0\x83\x81\x83\x82\x83\x8A\x8F\xE3\x82ɕێ\x9D\x82\xB5\x82Ă\xA8\x82\xAD\x82\xA9\x82ǂ\xA4\x82\xA9\x82\xF0 - // \x95\\x82\xB7\x81B(2006.8.5 yutaka) + // パスワード認証および公開鍵認証に使うパスワードをメモリ上に保持しておくかどうかを + // 表す。(2006.8.5 yutaka) settings->remember_password = GetPrivateProfileInt("TTSSH", "RememberPassword", 1, fileName); - // \x8F\x89\x89\xF1\x82̔F\x8F_\x83C\x83A\x83\x8D\x83O\x82ŃT\x83|\x81[\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82郁\x83\\x83b\x83h\x82\xF0\x83`\x83F\x83b\x83N\x82\xB5\x81A - // \x96\xB3\x8C\xF8\x82ȃ\x81\x83\\x83b\x83h\x82\xF0\x83O\x83\x8C\x83C\x83A\x83E\x83g\x82\xB7\x82\xE9 (2007.9.24 maya) + // 初回の認証ダイアログでサポートされているメソッドをチェックし、 + // 無効なメソッドをグレイアウトする (2007.9.24 maya) settings->CheckAuthListFirst = read_BOOL_option(fileName, "CheckAuthListFirst", FALSE); - // 768bit \x96\xA2\x96\x9E\x82\xCC RSA \x8C\xAE\x82\xF0\x8E\x9D\x82T\x81[\x83o\x82ւ̐ڑ\xB1\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.9.11 maya) + // 768bit 未満の RSA 鍵を持つサーバへの接続を有効にする (2008.9.11 maya) settings->EnableRsaShortKeyServer = read_BOOL_option(fileName, "EnableRsaShortKeyServer", FALSE); - // agent forward \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.11.25 maya) + // agent forward を有効にする (2008.11.25 maya) settings->ForwardAgent = read_BOOL_option(fileName, "ForwardAgent", FALSE); - // agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 + // agent forward 確認を有効にする settings->ForwardAgentConfirm = read_BOOL_option(fileName, "ForwardAgentConfirm", TRUE); - // agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 + // agent forward 確認を有効にする settings->ForwardAgentNotify = read_BOOL_option(fileName, "ForwardAgentNotify", TRUE); - // \x83z\x83X\x83g\x8C\xAE\x82\xCC DNS \x82ł̃`\x83F\x83b\x83N (RFC 4255) + // ホスト鍵の DNS でのチェック (RFC 4255) settings->VerifyHostKeyDNS = read_BOOL_option(fileName, "VerifyHostKeyDNS", TRUE); // icon @@ -533,7 +607,7 @@ settings->IconID = IDI_SECURETT; } - // \x83G\x83\x89\x81[\x82\xA8\x82\xE6\x82ьx\x8D\x90\x8E\x9E\x82̃|\x83b\x83v\x83A\x83b\x83v\x83\x81\x83b\x83Z\x81[\x83W\x82\xF0\x97}\x8E~\x82\xB7\x82\xE9 (2014.6.26 yutaka) + // エラーおよび警告時のポップアップメッセージを抑止する (2014.6.26 yutaka) settings->DisablePopupMessage = GetPrivateProfileInt("TTSSH", "DisablePopupMessage", 0, fileName); READ_STD_STRING_OPTION(X11Display); @@ -620,32 +694,32 @@ settings->remember_password ? "1" : "0", fileName); - // \x8F\x89\x89\xF1\x82̔F\x8F_\x83C\x83A\x83\x8D\x83O\x82ŃT\x83|\x81[\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82郁\x83\\x83b\x83h\x82\xF0\x83`\x83F\x83b\x83N\x82\xB5\x81A - // \x96\xB3\x8C\xF8\x82ȃ\x81\x83\\x83b\x83h\x82\xF0\x83O\x83\x8C\x83C\x83A\x83E\x83g\x82\xB7\x82\xE9 (2007.9.24 maya) + // 初回の認証ダイアログでサポートされているメソッドをチェックし、 + // 無効なメソッドをグレイアウトする (2007.9.24 maya) WritePrivateProfileString("TTSSH", "CheckAuthListFirst", settings->CheckAuthListFirst ? "1" : "0", fileName); - // 768bit \x96\xA2\x96\x9E\x82\xCC RSA \x8C\xAE\x82\xF0\x8E\x9D\x82T\x81[\x83o\x82ւ̐ڑ\xB1\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.9.11 maya) + // 768bit 未満の RSA 鍵を持つサーバへの接続を有効にする (2008.9.11 maya) WritePrivateProfileString("TTSSH", "EnableRsaShortKeyServer", settings->EnableRsaShortKeyServer ? "1" : "0", fileName); - // agent forward \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.11.25 maya) + // agent forward を有効にする (2008.11.25 maya) WritePrivateProfileString("TTSSH", "ForwardAgent", settings->ForwardAgent ? "1" : "0", fileName); - // agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 + // agent forward 確認を有効にする WritePrivateProfileString("TTSSH", "ForwardAgentConfirm", settings->ForwardAgentConfirm ? "1" : "0", fileName); - // agent forward \x92ʒm\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 + // agent forward 通知を有効にする WritePrivateProfileString("TTSSH", "ForwardAgentNotify", settings->ForwardAgentNotify ? "1" : "0", fileName); - // \x83z\x83X\x83g\x8C\xAE\x82\xCC DNS \x82ł̃`\x83F\x83b\x83N (RFC 4255) + // ホスト鍵の DNS でのチェック (RFC 4255) WritePrivateProfileString("TTSSH", "VerifyHostKeyDNS", settings->VerifyHostKeyDNS ? "1" : "0", fileName); - // SSH \x83A\x83C\x83R\x83\x93 + // SSH アイコン if (settings->IconID==IDI_SECURETT_YELLOW) { WritePrivateProfileString("TTSSH", "SSHIcon", "yellow", fileName); } @@ -828,8 +902,8 @@ fuLoad = LR_VGACOLOR; } - // LoadIcon \x82ł͂Ȃ\xAD LoadImage \x82\xF0\x8Eg\x82\xA4\x82悤\x82ɂ\xB5\x81A - // 16x16 \x82̃A\x83C\x83R\x83\x93\x82\xA6\x93I\x82Ɏ擾\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD (2006.8.9 maya) + // LoadIcon ではなく LoadImage を使うようにし、 + // 16x16 のアイコンを明示的に取得するようにした (2006.8.9 maya) if (SecureLargeIcon == NULL) { SecureLargeIcon = LoadImage(hInst, MAKEINTRESOURCE(pvar->settings.IconID), IMAGE_ICON, 0, 0, fuLoad); @@ -894,8 +968,8 @@ void notify_nonfatal_error(PTInstVar pvar, char *msg) { if (!pvar->showing_err) { - // \x96\xA2\x90ڑ\xB1\x82̏\xF3\x91Ԃł͒ʒm\x90\xE6\x83E\x83B\x83\x93\x83h\x83E\x82\xAA\x82Ȃ\xA2\x82̂ŁA\x83f\x83X\x83N\x83g\x83b\x83v\x82\xF0\x83I\x81[\x83i\x81[\x82Ƃ\xB5\x82\xC4 - // \x83\x81\x83b\x83Z\x81[\x83W\x83{\x83b\x83N\x83X\x82\xF0\x8Fo\x8C\xBB\x82\xB3\x82\xB9\x82\xE9\x81B(2006.6.11 yutaka) + // 未接続の状態では通知先ウィンドウがないので、デスクトップをオーナーとして + // メッセージボックスを出現させる。(2006.6.11 yutaka) if (pvar->NotificationWindow == NULL) { UTIL_get_lang_msg("MSG_NONFATAL_ERROR", pvar, "Tera Term: not fatal error"); @@ -982,11 +1056,11 @@ buf[0] = 0; - /* \x90擪\x82̃A\x83h\x83\x8C\x83X\x95\\x8E\xA6 */ + /* 先頭のアドレス表示 */ _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%08X : ", addr); strncat_s(buf, buflen, tmp, _TRUNCATE); - /* \x83o\x83C\x83i\x83\x8A\x95\\x8E\xA6\x81i4\x83o\x83C\x83g\x82\xB2\x82Ƃɋ\xF0\x91}\x93\xFC\x81j*/ + /* バイナリ表示(4バイトごとに空白を挿入)*/ for (i = 0; i < byte_cnt; i++) { if (i > 0 && i % 4 == 0) { strncat_s(buf, buflen, " ", _TRUNCATE); @@ -996,11 +1070,11 @@ strncat_s(buf, buflen, tmp, _TRUNCATE); } - /* ASCII\x95\\x8E\xA6\x95\x94\x95\xAA\x82܂ł̋\xF0\x95₤ */ + /* ASCII表示部分までの空白を補う */ _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, " %*s%*s", (16 - byte_cnt) * 2 + 1, " ", (16 - byte_cnt + 3) / 4, " "); strncat_s(buf, buflen, tmp, _TRUNCATE); - /* ASCII\x95\\x8E\xA6 */ + /* ASCII表示 */ for (i = 0; i < byte_cnt; i++) { c = bytes[i]; if (isprint(c)) { @@ -1059,7 +1133,7 @@ static void PASCAL TTXOpenTCP(TTXSockHooks *hooks) { if (pvar->settings.Enabled) { - // TCPLocalEcho/TCPCRSend \x82\xF8\x82ɂ\xB7\x82\xE9 (maya 2007.4.25) + // TCPLocalEcho/TCPCRSend を無効にする (maya 2007.4.25) pvar->origDisableTCPEchoCR = pvar->ts->DisableTCPEchoCR; pvar->ts->DisableTCPEchoCR = TRUE; @@ -1092,7 +1166,7 @@ HOSTS_open(pvar); FWDUI_open(pvar); - // \x90ݒ\xE8\x82\xF0 myproposal \x82ɔ\xBD\x89f\x82\xB7\x82\xE9\x82̂́A\x90ڑ\xB1\x92\xBC\x91O\x82̂\xB1\x82\xB1\x82\xBE\x82\xAF\x81B (2006.6.26 maya) + // 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya) SSH2_update_cipher_myproposal(pvar); SSH2_update_kex_myproposal(pvar); SSH2_update_host_key_myproposal(pvar); @@ -1127,10 +1201,10 @@ } } -// C-p/C-n/C-b/C-f/C-a/C-e \x82\xF0\x83T\x83|\x81[\x83g (2007.9.5 maya) -// C-d/C-k \x82\xF0\x83T\x83|\x81[\x83g (2007.10.3 yutaka) -// \x83h\x83\x8D\x83b\x83v\x83_\x83E\x83\x93\x82̒\x86\x82̃G\x83f\x83B\x83b\x83g\x83R\x83\x93\x83g\x83\x8D\x81[\x83\x8B\x82\xF0 -// \x83T\x83u\x83N\x83\x89\x83X\x89\xBB\x82\xB7\x82邽\x82߂̃E\x83C\x83\x93\x83h\x83E\x83v\x83\x8D\x83V\x81[\x83W\x83\x83 +// C-p/C-n/C-b/C-f/C-a/C-e をサポート (2007.9.5 maya) +// C-d/C-k をサポート (2007.10.3 yutaka) +// ドロップダウンの中のエディットコントロールを +// サブクラス化するためのウインドウプロシージャ WNDPROC OrigHostnameEditProc; // Original window procedure LRESULT CALLBACK HostnameEditProc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -1140,7 +1214,7 @@ char *str, *orgstr; switch (msg) { - // \x83L\x81[\x82\xAA\x89\x9F\x82\xB3\x82ꂽ\x82̂\xF0\x8C\x9F\x92m\x82\xB7\x82\xE9 + // キーが押されたのを検知する case WM_KEYDOWN: if (GetKeyState(VK_CONTROL) < 0) { switch (wParam) { @@ -1186,17 +1260,17 @@ if (str != NULL) { len = GetWindowText(dlg, str, max); if (select >= 0 && select < len) { - if (wParam == 0x44) { // \x83J\x81[\x83\\x83\x8B\x94z\x89\xBA\x82̕\xB6\x8E\x9A\x82݂̂\xF0\x8D폜\x82\xB7\x82\xE9 + if (wParam == 0x44) { // カーソル配下の文字のみを削除する memmove(&str[select], &str[select + 1], len - select - 1); str[len - 1] = '\0'; - } else if (wParam == 0x4b) { // \x83J\x81[\x83\\x83\x8B\x82\xA9\x82\xE7\x8Ds\x96\x96\x82܂ō폜\x82\xB7\x82\xE9 + } else if (wParam == 0x4b) { // カーソルから行末まで削除する str[select] = '\0'; } } - if (wParam == 0x55) { // \x83J\x81[\x83\\x83\x8B\x82\xE6\x82荶\x91\xA4\x82\xF0\x82\xB7\x82ׂď\xC1\x82\xB7 + if (wParam == 0x55) { // カーソルより左側をすべて消す if (select >= len) { str[0] = '\0'; } else { @@ -1215,7 +1289,7 @@ } break; - // \x8F\xE3\x82̃L\x81[\x82\xF0\x89\x9F\x82\xB5\x82\xBD\x8C\x8B\x89ʑ\x97\x82\xE7\x82\xEA\x82镶\x8E\x9A\x82ʼn\xB9\x82\xAA\x96\xE9\x82̂Ŏ̂Ă\xE9 + // 上のキーを押した結果送られる文字で音が鳴るので捨てる case WM_CHAR: switch (wParam) { case 0x01: @@ -1237,7 +1311,22 @@ static BOOL CALLBACK TTXHostDlg(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { - static char *ssh_version[] = {"SSH1", "SSH2", NULL}; + const static DlgTextInfo text_info[] = { + { 0, "DLG_HOST_TITLE" }, + { IDC_HOSTNAMELABEL, "DLG_HOST_TCPIPHOST" }, + { IDC_HISTORY, "DLG_HOST_TCPIPHISTORY" }, + { IDC_SERVICELABEL, "DLG_HOST_TCPIPSERVICE" }, + { IDC_HOSTOTHER, "DLG_HOST_TCPIPOTHER" }, + { IDC_HOSTTCPPORTLABEL, "DLG_HOST_TCPIPPORT" }, + { IDC_SSH_VERSION_LABEL, "DLG_HOST_TCPIPSSHVERSION" }, + { IDC_HOSTTCPPROTOCOLLABEL, "DLG_HOST_TCPIPPROTOCOL" }, + { IDC_HOSTSERIAL, "DLG_HOST_SERIAL" }, + { IDC_HOSTCOMLABEL, "DLG_HOST_SERIALPORT" }, + { IDC_HOSTHELP, "DLG_HOST_HELP" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_CANCEL" }, + }; + static const char *ssh_version[] = {"SSH1", "SSH2", NULL}; PGetHNRec GetHNRec; char EntName[128]; char TempHost[HostNameMaxLength + 1]; @@ -1246,9 +1335,8 @@ static char *ComPortDesc[MAXCOMPORT]; int comports; BOOL Ok; - LOGFONT logfont; - HFONT font; - char uimsg[MAX_UIMSG]; +// LOGFONT logfont; +// HFONT font; static HWND hwndHostname = NULL; // HOSTNAME dropdown static HWND hwndHostnameEdit = NULL; // Edit control on HOSTNAME dropdown @@ -1257,6 +1345,9 @@ GetHNRec = (PGetHNRec) lParam; SetWindowLongPtr(dlg, DWLP_USER, lParam); + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); + +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_HOST_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -1296,8 +1387,9 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); +#endif - // \x83z\x83X\x83g\x83q\x83X\x83g\x83\x8A\x82̃`\x83F\x83b\x83N\x83{\x83b\x83N\x83X\x82\xF0\x92lj\xC1 (2005.10.21 yutaka) + // ホストヒストリのチェックボックスを追加 (2005.10.21 yutaka) if (pvar->ts->HistoryList > 0) { SendMessage(GetDlgItem(dlg, IDC_HISTORY), BM_SETCHECK, BST_CHECKED, 0); } else { @@ -1304,7 +1396,7 @@ SendMessage(GetDlgItem(dlg, IDC_HISTORY), BM_SETCHECK, BST_UNCHECKED, 0); } - // \x83t\x83@\x83C\x83\x8B\x82\xA8\x82\xE6\x82і\xBC\x91O\x95t\x82\xAB\x83p\x83C\x83v\x82̏ꍇ\x81ATCP/IP\x88\xB5\x82\xA2\x82Ƃ\xB7\x82\xE9\x81B + // ファイルおよび名前付きパイプの場合、TCP/IP扱いとする。 if (GetHNRec->PortType == IdFile || GetHNRec->PortType == IdNamedPipe ) @@ -1319,7 +1411,7 @@ TempHost, sizeof(TempHost), GetHNRec->SetupFN); if (strlen(TempHost) > 0) - SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_ADDSTRING, + SendDlgItemMessageA(dlg, IDC_HOSTNAME, CB_ADDSTRING, 0, (LPARAM) TempHost); i++; } while (i <= MAXHOSTLIST); @@ -1329,7 +1421,7 @@ SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_SETCURSEL, 0, 0); - // C-n/C-p \x82̂\xBD\x82߂ɃT\x83u\x83N\x83\x89\x83X\x89\xBB (2007.9.4 maya) + // C-n/C-p のためにサブクラス化 (2007.9.4 maya) hwndHostname = GetDlgItem(dlg, IDC_HOSTNAME); hwndHostnameEdit = GetWindow(hwndHostname, GW_CHILD); OrigHostnameEditProc = (WNDPROC)GetWindowLongPtr(hwndHostnameEdit, GWLP_WNDPROC); @@ -1341,7 +1433,7 @@ SendDlgItemMessage(dlg, IDC_HOSTTCPPORT, EM_LIMITTEXT, 5, 0); SetDlgItemInt(dlg, IDC_HOSTTCPPORT, GetHNRec->TCPPort, FALSE); for (i = 0; ProtocolFamilyList[i]; ++i) { - SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, CB_ADDSTRING, + SendDlgItemMessageA(dlg, IDC_HOSTTCPPROTOCOL, CB_ADDSTRING, 0, (LPARAM) ProtocolFamilyList[i]); } SendDlgItemMessage(dlg, IDC_HOSTTCPPROTOCOL, EM_LIMITTEXT, @@ -1350,7 +1442,7 @@ /////// SSH version for (i = 0; ssh_version[i]; ++i) { - SendDlgItemMessage(dlg, IDC_SSH_VERSION, CB_ADDSTRING, + SendDlgItemMessageA(dlg, IDC_SSH_VERSION, CB_ADDSTRING, 0, (LPARAM) ssh_version[i]); } SendDlgItemMessage(dlg, IDC_SSH_VERSION, EM_LIMITTEXT, @@ -1374,12 +1466,12 @@ w = 1; if ((comports=DetectComPorts(ComPortTable, GetHNRec->MaxComPort, ComPortDesc)) >= 0) { for (i=0; i<comports; i++) { - // MaxComPort \x82\xF0\x89z\x82\xA6\x82\xE9\x83|\x81[\x83g\x82͕\\x8E\xA6\x82\xB5\x82Ȃ\xA2 + // MaxComPort を越えるポートは表示しない if (ComPortTable[i] > GetHNRec->MaxComPort) { continue; } - // \x8Eg\x97p\x92\x86\x82̃|\x81[\x83g\x82͕\\x8E\xA6\x82\xB5\x82Ȃ\xA2 + // 使用中のポートは表示しない if (CheckCOMFlag(ComPortTable[i]) == 1) { continue; } @@ -1389,7 +1481,7 @@ strncat_s(EntName, sizeof(EntName), ": ", _TRUNCATE); strncat_s(EntName, sizeof(EntName), ComPortDesc[i], _TRUNCATE); } - SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING, + SendDlgItemMessageA(dlg, IDC_HOSTCOM, CB_ADDSTRING, 0, (LPARAM)EntName); j++; if (GetHNRec->ComPort == ComPortTable[i]) @@ -1398,13 +1490,13 @@ } else { for (i = 1; i <= GetHNRec->MaxComPort; i++) { - // \x8Eg\x97p\x92\x86\x82̃|\x81[\x83g\x82͕\\x8E\xA6\x82\xB5\x82Ȃ\xA2 + // 使用中のポートは表示しない if (CheckCOMFlag(i) == 1) { continue; } _snprintf_s(EntName, sizeof(EntName), _TRUNCATE, "COM%d", i); - SendDlgItemMessage(dlg, IDC_HOSTCOM, CB_ADDSTRING, + SendDlgItemMessageA(dlg, IDC_HOSTCOM, CB_ADDSTRING, 0, (LPARAM) EntName); j++; if (GetHNRec->ComPort == i) @@ -1442,7 +1534,7 @@ enable_dlg_items(dlg, IDC_HISTORY, IDC_HISTORY, FALSE); // disabled } - // Host dialog\x82Ƀt\x83H\x81[\x83J\x83X\x82\xF0\x82\xA0\x82Ă\xE9 (2004.10.2 yutaka) + // Host dialogにフォーカスをあてる (2004.10.2 yutaka) if (GetHNRec->PortType == IdTCPIP) { HWND hwnd = GetDlgItem(dlg, IDC_HOSTNAME); SetFocus(hwnd); @@ -1451,6 +1543,7 @@ SetFocus(hwnd); } +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_SYSTEM_FONT", dlg, &logfont, &DlgHostFont, pvar)) { @@ -1478,9 +1571,10 @@ else { DlgHostFont = NULL; } - - // SetFocus()\x82Ńt\x83H\x81[\x83J\x83X\x82\xF0\x82\xA0\x82킹\x82\xBD\x8Fꍇ\x81AFALSE\x82\xF0\x95Ԃ\xB7\x95K\x97v\x82\xAA\x82\xA0\x82\xE9\x81B - // TRUE\x82\xF0\x95Ԃ\xB7\x82ƁATABSTOP\x91Ώۂ̈\xEA\x94Ԃ͂\xB6\x82߂̃R\x83\x93\x83g\x83\x8D\x81[\x83\x8B\x82\xAA\x91I\x82\xEA\x82\xE9\x81B +#endif + + // SetFocus()でフォーカスをあわせた場合、FALSEを返す必要がある。 + // TRUEを返すと、TABSTOP対象の一番はじめのコントロールが選ばれる。 // (2004.11.23 yutaka) return FALSE; //return TRUE; @@ -1556,21 +1650,21 @@ } SetWindowLongPtr(hwndHostnameEdit, GWLP_WNDPROC, (LONG_PTR)OrigHostnameEditProc); EndDialog(dlg, 1); - +#if 0 if (DlgHostFont != NULL) { DeleteObject(DlgHostFont); } - +#endif return TRUE; case IDCANCEL: SetWindowLongPtr(hwndHostnameEdit, GWLP_WNDPROC, (LONG_PTR)OrigHostnameEditProc); EndDialog(dlg, 0); - +#if 0 if (DlgHostFont != NULL) { DeleteObject(DlgHostFont); } - +#endif return TRUE; case IDC_HOSTTCPIP: @@ -1637,7 +1731,7 @@ len = SendMessage(hostcom, CB_GETLBTEXTLEN, i, 0); lbl = (char *)calloc(len+1, sizeof(char)); SendMessage(hostcom, CB_GETLBTEXT, i, (LPARAM)lbl); - GetTextExtentPoint32(TmpDC, lbl, len, &s); + GetTextExtentPoint32A(TmpDC, lbl, len, &s); if (s.cx > max_len) max_len = s.cx; free(lbl); @@ -1699,8 +1793,8 @@ FWDUI_load_settings(pvar); } -// Percent-encode\x82\xB3\x82ꂽ\x95\xB6\x8E\x9A\x97\xF1src\x82\xF0\x83f\x83R\x81[\x83h\x82\xB5\x82\xC4dst\x82ɃR\x83s\x81[\x82\xB7\x82\xE9\x81B -// dstlen\x82\xCDdst\x82̃T\x83C\x83Y\x81B\x82\xB1\x82\xEA\x82\xE6\x82茋\x89ʂ\xAA\x92\xB7\x82\xA2\x8Fꍇ\x81A\x82\xBB\x82̕\xAA\x82͐\xE8\x8ÊĂ\xE7\x82\xEA\x82\xE9\x81B +// Percent-encodeされた文字列srcをデコードしてdstにコピーする。 +// dstlenはdstのサイズ。これより結果が長い場合、その分は切り捨てられる。 static void percent_decode(char *dst, int dstlen, char *src) { if (src == NULL || dst == NULL || dstlen < 1) { return; @@ -1767,15 +1861,15 @@ } else if (MATCH_STR(option + 4, "-consume=") == 0) { strncpy_s(option2, opt_len, option + 13, _TRUNCATE); read_ssh_options_from_user_file(pvar, option2); - DeleteFile(option2); + DeleteFileA(option2); action = OPTION_CLEAR; } - // ttermpro.exe \x82\xCC /F= \x8Ew\x92\xE8\x82ł\xE0 TTSSH \x82̐ݒ\xE8\x82\xF0\x93ǂ\xDE (2006.10.11 maya) + // ttermpro.exe の /F= 指定でも TTSSH の設定を読む (2006.10.11 maya) } else if (MATCH_STR_I(option + 1, "f=") == 0) { strncpy_s(option2, opt_len, option + 3, _TRUNCATE); read_ssh_options_from_user_file(pvar, option2); - // Tera Term\x91\xA4\x82ł\xE0\x89\xF0\x8E߂\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9\x82̂ŏ\xC1\x82\xB3\x82Ȃ\xA2 + // Tera Term側でも解釈する必要があるので消さない } } @@ -1881,7 +1975,7 @@ sizeof(pvar->subsystem_name), option + 15, _TRUNCATE); - // /ssh1 \x82\xC6 /ssh2 \x83I\x83v\x83V\x83\x87\x83\x93\x82̐V\x8BK\x92lj\xC1 (2006.9.16 maya) + // /ssh1 と /ssh2 オプションの新規追加 (2006.9.16 maya) } else if (strcmp(option + 4, "1") == 0) { pvar->settings.Enabled = 1; pvar->settings.ssh_protocol_version = 1; @@ -1899,17 +1993,17 @@ MessageBox(NULL, buf, "TTSSH", MB_OK | MB_ICONEXCLAMATION); } - // ttermpro.exe \x82\xCC /T= \x8Ew\x92\xE8\x82̗\xAC\x97p\x82Ȃ̂ŁA\x91啶\x8E\x9A\x82\xE0\x8B\x96\x82\xB7 (2006.10.19 maya) + // ttermpro.exe の /T= 指定の流用なので、大文字も許す (2006.10.19 maya) } else if (MATCH_STR_I(option + 1, "t=") == 0) { if (strcmp(option + 3, "2") == 0) { pvar->settings.Enabled = 1; - // /t=2\x82\xCDttssh\x91\xA4\x82ł̊g\x92\xA3\x82Ȃ̂ŏ\xC1\x82\xB7 + // /t=2はttssh側での拡張なので消す } else { pvar->settings.Enabled = 0; - action = OPTION_NONE; // Tera Term\x91\xA4\x82ʼn\xF0\x8E߂\xB7\x82\xE9\x82̂ŏ\xC1\x82\xB3\x82Ȃ\xA2 + action = OPTION_NONE; // Tera Term側で解釈するので消さない } - // /1 \x82\xA8\x82\xE6\x82\xD1 /2 \x83I\x83v\x83V\x83\x87\x83\x93\x82̐V\x8BK\x92lj\xC1 (2004.10.3 yutaka) + // /1 および /2 オプションの新規追加 (2004.10.3 yutaka) } else if (strcmp(option + 1, "1") == 0) { // command line: /ssh /1 is SSH1 only pvar->settings.ssh_protocol_version = 1; @@ -1919,47 +2013,47 @@ pvar->settings.ssh_protocol_version = 2; } else if (strcmp(option + 1, "nossh") == 0) { - // '/nossh' \x83I\x83v\x83V\x83\x87\x83\x93\x82̒lj\xC1\x81B - // TERATERM.INI \x82\xC5SSH\x82\xAA\x97L\x8C\xF8\x82ɂȂ\xC1\x82Ă\xA2\x82\xE9\x8Fꍇ\x81A\x82\xA4\x82܂\xADCygterm\x82\xAA\x8BN\x93\xAE\x82\xB5\x82Ȃ\xA2\x82\xB1\x82Ƃ\xAA - // \x82\xA0\x82邱\x82Ƃւ̑Ώ\x88\x81B(2004.10.11 yutaka) + // '/nossh' オプションの追加。 + // TERATERM.INI でSSHが有効になっている場合、うまくCygtermが起動しないことが + // あることへの対処。(2004.10.11 yutaka) pvar->settings.Enabled = 0; } else if (strcmp(option + 1, "telnet") == 0) { - // '/telnet' \x82\xAA\x8Ew\x92肳\x82\xEA\x82Ă\xA2\x82\xE9\x82Ƃ\xAB\x82ɂ\xCD '/nossh' \x82Ɠ\xAF\x82\xB6\x82\xAD - // SSH\x82\xF8\x82ɂ\xB7\x82\xE9 (2006.9.16 maya) + // '/telnet' が指定されているときには '/nossh' と同じく + // SSHを無効にする (2006.9.16 maya) pvar->settings.Enabled = 0; - // Tera Term \x82\xCC Telnet \x83t\x83\x89\x83O\x82\xE0\x95t\x82\xAF\x82\xE9 + // Tera Term の Telnet フラグも付ける pvar->ts->Telnet = 1; } else if (MATCH_STR(option + 1, "auth=") == 0) { - // SSH2\x8E\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x83I\x83v\x83V\x83\x87\x83\x93\x82̒lj\xC1 + // SSH2自動ログインオプションの追加 // - // SYNOPSIS: /ssh /auth=passowrd /user=\x83\x86\x81[\x83U\x96\xBC /passwd=\x83p\x83X\x83\x8F\x81[\x83h - // /ssh /auth=publickey /user=\x83\x86\x81[\x83U\x96\xBC /passwd=\x83p\x83X\x83\x8F\x81[\x83h /keyfile=\x83p\x83X - // EXAMPLE: /ssh /auth=password /user=nike /passwd="a b""c" ; \x83p\x83X\x83\x8F\x81[\x83h: \x81ua b"c\x81v + // SYNOPSIS: /ssh /auth=passowrd /user=ユーザ名 /passwd=パスワード + // /ssh /auth=publickey /user=ユーザ名 /passwd=パスワード /keyfile=パス + // EXAMPLE: /ssh /auth=password /user=nike /passwd="a b""c" ; パスワード: 「a b"c」 // /ssh /auth=publickey /user=foo /passwd=bar /keyfile=d:\tmp\id_rsa - // NOTICE: \x83p\x83X\x83\x8F\x81[\x83h\x82\xE2\x83p\x83X\x82ɋ\xE2\x83Z\x83~\x83R\x83\x8D\x83\x93\x82\xAA\x8A܂܂\xEA\x82\xE9\x8Fꍇ\x82̓_\x83u\x83\x8B\x83N\x83H\x81[\x83g " \x82ň͂\xDE - // \x83p\x83X\x83\x8F\x81[\x83h\x82Ƀ_\x83u\x83\x8B\x83N\x83H\x81[\x83g\x82\xAA\x8A܂܂\xEA\x82\xE9\x8Fꍇ\x82͘A\x91\xB1\x82\xB5\x82\xBD\x83_\x83u\x83\x8B\x83N\x83H\x81[\x83g "" \x82ɒu\x82\xAB\x8A\xB7\x82\xA6\x82\xE9 + // NOTICE: パスワードやパスに空白やセミコロンが含まれる場合はダブルクォート " で囲む + // パスワードにダブルクォートが含まれる場合は連続したダブルクォート "" に置き換える // pvar->ssh2_autologin = 1; // for SSH2 (2004.11.30 yutaka) - if (_stricmp(option + 6, "password") == 0) { // \x83p\x83X\x83\x8F\x81[\x83h + if (_stricmp(option + 6, "password") == 0) { // パスワード //pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD; pvar->ssh2_authmethod = SSH_AUTH_PASSWORD; - } else if (_stricmp(option + 6, "keyboard-interactive") == 0) { // keyboard-interactive\x94F\x8F\xD8 + } else if (_stricmp(option + 6, "keyboard-interactive") == 0) { // keyboard-interactive認証 //pvar->auth_state.cur_cred.method = SSH_AUTH_TIS; pvar->ssh2_authmethod = SSH_AUTH_TIS; - } else if (_stricmp(option + 6, "challenge") == 0) { // keyboard-interactive\x94F\x8F\xD8 + } else if (_stricmp(option + 6, "challenge") == 0) { // keyboard-interactive認証 //pvar->auth_state.cur_cred.method = SSH_AUTH_TIS; pvar->ssh2_authmethod = SSH_AUTH_TIS; - } else if (_stricmp(option + 6, "publickey") == 0) { // \x8C\xF6\x8AJ\x8C\xAE\x94F\x8F\xD8 + } else if (_stricmp(option + 6, "publickey") == 0) { // 公開鍵認証 //pvar->auth_state.cur_cred.method = SSH_AUTH_RSA; pvar->ssh2_authmethod = SSH_AUTH_RSA; - } else if (_stricmp(option + 6, "pageant") == 0) { // \x8C\xF6\x8AJ\x8C\xAE\x94F\x8F\xD8 by Pageant + } else if (_stricmp(option + 6, "pageant") == 0) { // 公開鍵認証 by Pageant //pvar->auth_state.cur_cred.method = SSH_AUTH_RSA; pvar->ssh2_authmethod = SSH_AUTH_PAGEANT; @@ -1977,22 +2071,22 @@ _snprintf_s(pvar->ssh2_keyfile, sizeof(pvar->ssh2_keyfile), _TRUNCATE, "%s", option+9); } else if (strcmp(option + 1, "ask4passwd") == 0) { - // \x83p\x83X\x83\x8F\x81[\x83h\x82\xAD (2006.9.18 maya) + // パスワードを聞く (2006.9.18 maya) pvar->ask4passwd = 1; } else if (strcmp(option + 1, "nosecuritywarning") == 0) { - // known_hosts\x83`\x83F\x83b\x83N\x82\xF0\x82\xB5\x82Ȃ\xA2\x81B\x93\x96\x8AY\x83I\x83v\x83V\x83\x87\x83\x93\x82\xF0\x8Eg\x82\xA4\x82ƁA\x83Z\x83L\x83\x85\x83\x8A\x83e\x83B\x90\xAB\x82\xAA\x92ቺ\x82\xB7\x82\xE9 - // \x82\xBD\x82߁A\x89B\x82\xB5\x83I\x83v\x83V\x83\x87\x83\x93\x88\xB5\x82\xA2\x82Ƃ\xB7\x82\xE9\x81B + // known_hostsチェックをしない。当該オプションを使うと、セキュリティ性が低下する + // ため、隠しオプション扱いとする。 // (2009.10.4 yutaka) pvar->nocheck_known_hosts = TRUE; } else { // Other (not ttssh) option - action = OPTION_NONE; // ttssh\x82̃I\x83v\x83V\x83\x87\x83\x93\x82ł͂Ȃ\xA2\x82̂ŏ\xC1\x82\xB3\x82Ȃ\xA2 + action = OPTION_NONE; // ttsshのオプションではないので消さない } - // \x83p\x83X\x83\x8F\x81[\x83h\x82\xAD\x8Fꍇ\x82͎\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x82\xAA\x96\xB3\x8C\xF8\x82ɂȂ\xE9 - // /auth \x82͔F\x8F\x81\x83\\x83b\x83h\x82̎w\x92\xE8\x82Ƃ\xB5\x82Ă͗\x98\x97p\x82\xB3\x82\xEA\x82\xE9 (2006.9.18 maya) + // パスワードを聞く場合は自動ログインが無効になる + // /auth は認証メソッドの指定としては利用される (2006.9.18 maya) if (pvar->ask4passwd == 1) { pvar->ssh2_autologin = 0; } @@ -2005,10 +2099,10 @@ (MATCH_STR_I(option, "slogin1://") == 0) || (MATCH_STR_I(option, "slogin2://") == 0)) { // - // ssh://user@host/ \x93\x99\x82\xCCURL\x8C`\x8E\xAE\x82̃T\x83|\x81[\x83g - // \x8A\xEE\x96{\x93I\x82ȏ\x91\x8E\xAE\x82\xCD telnet:// URL\x82ɏ\x87\x82\xB8\x82\xE9 + // ssh://user@host/ 等のURL形式のサポート + // 基本的な書式は telnet:// URLに順ずる // - // \x8EQ\x8Dl: + // 参考: // RFC3986: Uniform Resource Identifier (URI): Generic Syntax // RFC4248: The telnet URI Scheme // @@ -2017,7 +2111,7 @@ optlen = strlen(option); - // \x8Dŏ\x89\x82\xCC':'\x82̑O\x82̕\xB6\x8E\x9A\x82\xAA\x90\x94\x8E\x9A\x82\xBE\x82\xC1\x82\xBD\x8Fꍇ\x81A\x82\xBB\x82\xEA\x82\xF0ssh\x83v\x83\x8D\x83g\x83R\x83\x8B\x83o\x81[\x83W\x83\x87\x83\x93\x82Ƃ݂Ȃ\xB7 + // 最初の':'の前の文字が数字だった場合、それをsshプロトコルバージョンとみなす p = _mbschr(option, ':'); switch (*(p-1)) { case '1': @@ -2028,34 +2122,34 @@ break; } - // authority part \x82܂Ń|\x83C\x83\x93\x83^\x82\xF0\x88ړ\xAE + // authority part までポインタを移動 p += 3; - // path part \x82\xF0\x90\xE8\x8ÊĂ\xE9 + // path part を切り捨てる if ((p2 = _mbschr(p, '/')) != NULL) { *p2 = 0; } - // '@'\x82\xAA\x82\xA0\x82\xC1\x82\xBD\x8Fꍇ\x81A\x82\xBB\x82\xEA\x82\xE6\x82\xE8\x91O\x82̓\x86\x81[\x83U\x8F\xEE\x95\xF1 + // '@'があった場合、それより前はユーザ情報 if ((p2 = _mbschr(p, '@')) != NULL) { *p2 = 0; - // ':'\x88ȍ~\x82̓p\x83X\x83\x8F\x81[\x83h + // ':'以降はパスワード if ((p3 = _mbschr(p, ':')) != NULL) { *p3 = 0; percent_decode(pvar->ssh2_password, sizeof(pvar->ssh2_password), p3 + 1); } percent_decode(pvar->ssh2_username, sizeof(pvar->ssh2_username), p); - // p \x82\xAA host part \x82̐擪('@'\x82̎\x9F\x82̕\xB6\x8E\x9A)\x82\xF0\x8D\xB7\x82\xB7\x82悤\x82ɂ\xB7\x82\xE9 + // p が host part の先頭('@'の次の文字)を差すようにする p = p2 + 1; } - // host part \x82\xF0 option \x82̐擪\x82Ɉړ\xAE\x82\xB5\x82āAscheme part \x82\xF0\x92ׂ\xB7 - // port\x8Ew\x92肪\x96\xB3\x82\xA9\x82\xC1\x82\xBD\x8E\x9E\x82\xC9port\x94ԍ\x86\x82𑫂\xB7\x82\xBD\x82߂̗̈\xE6\x8Am\x95ۂ̈Ӗ\xA1\x82\xE0\x82\xA0\x82\xE9 + // host part を option の先頭に移動して、scheme part を潰す + // port指定が無かった時にport番号を足すための領域確保の意味もある hostlen = strlen(p); memmove_s(option, optlen, p, hostlen); option[hostlen] = 0; - // \x83|\x81[\x83g\x8Ew\x92肪\x96\xB3\x82\xA2\x8E\x9E\x82\xCD":22"\x82𑫂\xB7 + // ポート指定が無い時は":22"を足す if (option[0] == '[' && option[hostlen-1] == ']' || // IPv6 raw address without port option[0] != '[' && _mbschr(option, ':') == NULL) { // hostname or IPv4 raw address without port memcpy_s(option+hostlen, optlen-hostlen, ":22", 3); @@ -2062,7 +2156,7 @@ hostlen += 3; } - // \x83|\x81[\x83g\x8Ew\x92\xE8\x82\xE6\x82\xE8\x8C\xE3\x82\xF0\x82\xB7\x82ׂăX\x83y\x81[\x83X\x82Œׂ\xB7 + // ポート指定より後をすべてスペースで潰す memset(option+hostlen, ' ', optlen-hostlen); pvar->settings.Enabled = 1; @@ -2071,11 +2165,11 @@ } else if (_mbschr(option, '@') != NULL) { // - // user @ host \x8C`\x8E\xAE\x82̃T\x83|\x81[\x83g - // \x8E\xE6\x82荇\x82\xA6\x82\xB8ssh\x82ł̂݃T\x83|\x81[\x83g\x82ׁ̈A\x83\x86\x81[\x83U\x96\xBC\x82\xCDttssh\x93\xE0\x82Œׂ\xB7\x81B - // (ssh\x90ڑ\xB1\x88ȊO -- ttssh\x82ɂ͊W\x82Ȃ\xA2\x8Fꍇ\x82ł\xE0) - // \x8F\xAB\x97\x88\x93I\x82\xC9telnet authentication option\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82\xBD\x8E\x9E\x82\xCD - // Tera Term\x96{\x91̂ŏ\x88\x97\x9D\x82\xB7\x82\xE9\x82悤\x82ɂ\xB7\x82\xE9\x97\\x92\xE8\x81B + // user @ host 形式のサポート + // 取り合えずsshでのみサポートの為、ユーザ名はttssh内で潰す。 + // (ssh接続以外 -- ttsshには関係ない場合でも) + // 将来的にtelnet authentication optionをサポートした時は + // Tera Term本体で処理するようにする予定。 // char *p; p = _mbschr(option, '@'); @@ -2083,9 +2177,9 @@ strncpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), option, _TRUNCATE); - // \x83\x86\x81[\x83U\x96\xBC\x95\x94\x95\xAA\x82\xF0\x83X\x83y\x81[\x83X\x82Œׂ\xB7\x81B - // \x8C㑱\x82\xCCTTX\x82\xE2Tera Term\x96{\x91̂ʼn\xF0\x8E߂\xB7\x82鎞\x82ɂ̓X\x83y\x81[\x83X\x82\xF0\x93ǂݔ\xF2\x82\xB7\x82̂ŁA - // \x83z\x83X\x83g\x96\xBC\x82\xF0\x90擪\x82ɋl\x82߂\xE9\x95K\x97v\x82͖\xB3\x82\xA2\x81B + // ユーザ名部分をスペースで潰す。 + // 後続のTTXやTera Term本体で解釈する時にはスペースを読み飛ばすので、 + // ホスト名を先頭に詰める必要は無い。 memset(option, ' ', p-option+1); action = OPTION_REPLACE; @@ -2129,7 +2223,7 @@ } static void insertMenuBeforeItem(HMENU menu, WORD beforeItemID, WORD flags, - WORD newItemID, char *text) + WORD newItemID, const TCHAR *text) { int i, j; @@ -2173,27 +2267,29 @@ static void PASCAL TTXModifyMenu(HMENU menu) { + TCHAR uimsg[MAX_UIMSG]; + const char *UILanguageFile = pvar->ts->UILanguageFile; pvar->FileMenu = GetFileMenu(menu); /* inserts before ID_HELP_ABOUT */ - UTIL_get_lang_msg("MENU_ABOUT", pvar, "About &TTSSH..."); - insertMenuBeforeItem(menu, 50990, MF_ENABLED, ID_ABOUTMENU, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MENU_ABOUT", uimsg, _countof(uimsg), _T("About &TTSSH..."), UILanguageFile); + insertMenuBeforeItem(menu, 50990, MF_ENABLED, ID_ABOUTMENU, uimsg); /* inserts before ID_SETUP_TCPIP */ - UTIL_get_lang_msg("MENU_SSH", pvar, "SS&H..."); - insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHSETUPMENU, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MENU_SSH", uimsg, _countof(uimsg), _T("SS&H..."), UILanguageFile); + insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHSETUPMENU, uimsg); /* inserts before ID_SETUP_TCPIP */ - UTIL_get_lang_msg("MENU_SSH_AUTH", pvar, "SSH &Authentication..."); - insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHAUTHSETUPMENU, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MENU_SSH_AUTH", uimsg, _countof(uimsg), _T("SSH &Authentication..."), UILanguageFile); + insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHAUTHSETUPMENU, uimsg); /* inserts before ID_SETUP_TCPIP */ - UTIL_get_lang_msg("MENU_SSH_FORWARD", pvar, "SSH F&orwarding..."); - insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHFWDSETUPMENU, pvar->ts->UIMsg); - UTIL_get_lang_msg("MENU_SSH_KEYGEN", pvar, "SSH KeyGe&nerator..."); - insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHKEYGENMENU, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MENU_SSH_FORWARD", uimsg, _countof(uimsg), _T("SSH F&orwarding..."), UILanguageFile); + insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHFWDSETUPMENU, uimsg); + UTIL_get_lang_msgT("MENU_SSH_KEYGEN", uimsg, _countof(uimsg), _T("SSH KeyGe&nerator..."), UILanguageFile); + insertMenuBeforeItem(menu, 50360, MF_ENABLED, ID_SSHKEYGENMENU, uimsg); /* inserts before ID_FILE_CHANGEDIR */ - UTIL_get_lang_msg("MENU_SSH_SCP", pvar, "SS&H SCP..."); - insertMenuBeforeItem(menu, 50170, MF_GRAYED, ID_SSHSCPMENU, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MENU_SSH_SCP", uimsg, _countof(uimsg), _T("SS&H SCP..."), UILanguageFile); + insertMenuBeforeItem(menu, 50170, MF_GRAYED, ID_SSHSCPMENU, uimsg); } static void PASCAL TTXModifyPopupMenu(HMENU menu) { @@ -2210,7 +2306,7 @@ char buf[1024], buf2[2048]; char *fp = NULL; - // TTSSH\x83_\x83C\x83A\x83\x8D\x83O\x82ɕ\\x8E\xA6\x82\xB7\x82\xE9SSH\x82Ɋւ\xB7\x82\xE9\x8F\xEE\x95\xF1 (2004.10.30 yutaka) + // TTSSHダイアログに表示するSSHに関する情報 (2004.10.30 yutaka) if (pvar->socket != INVALID_SOCKET) { buf2[0] = '\0'; @@ -2304,7 +2400,7 @@ strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - if (pvar->ctos_compression == COMP_DELAYED) { // \x92x\x89\x84\x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82̏ꍇ (2006.6.23 yutaka) + if (pvar->ctos_compression == COMP_DELAYED) { // 遅延パケット圧縮の場合 (2006.6.23 yutaka) UTIL_get_lang_msg("DLG_ABOUT_COMPDELAY", pvar, "Delayed Compression:"); } else { @@ -2331,7 +2427,7 @@ strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); } - // \x83z\x83X\x83g\x8C\xF6\x8AJ\x8C\xAE\x82\xCCfingerprint\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B + // ホスト公開鍵のfingerprintを表示する。 // (2014.5.1 yutaka) UTIL_get_lang_msg("DLG_ABOUT_FINGERPRINT", pvar, "Host key's fingerprint:"); strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); @@ -2359,7 +2455,7 @@ strncat_s(buf2, sizeof(buf2), fp, _TRUNCATE); free(fp); - SendDlgItemMessage(dlg, IDC_ABOUTTEXT, WM_SETTEXT, 0, (LPARAM)(char *)buf2); + SetDlgItemTextA(dlg, IDC_ABOUTTEXT, buf2); } } @@ -2366,8 +2462,13 @@ static void init_about_dlg(PTInstVar pvar, HWND dlg) { char buf[1024]; - char uimsg[MAX_UIMSG]; - + const static DlgTextInfo text_info[] = { + { 0, "DLG_ABOUT_TITLE" }, + { IDC_FP_HASH_ALG, "DLG_ABOUT_FP_HASH_ALGORITHM" }, + { IDOK, "BTN_OK" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_ABOUT_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -2377,38 +2478,38 @@ GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_OK", pvar, uimsg); SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); - - // TTSSH\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2005.2.28 yutaka) +#endif + // TTSSHのバージョンを設定する (2005.2.28 yutaka) _snprintf_s(buf, sizeof(buf), _TRUNCATE, "TTSSH\r\nTera Term Secure Shell extension, %d.%d", TTSSH_VERSION_MAJOR, TTSSH_VERSION_MINOR); - SendMessage(GetDlgItem(dlg, IDC_TTSSH_VERSION), WM_SETTEXT, 0, (LPARAM)buf); + SetDlgItemTextA(dlg, IDC_TTSSH_VERSION, buf); - // OpenSSL\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2005.1.24 yutaka) - // \x8F\xF0\x8C\x8F\x95\xB6\x92lj\xC1 (2005.5.11 yutaka) - // OPENSSL_VERSION_TEXT \x83}\x83N\x83\x8D\x92\xE8\x8B`\x82ł͂Ȃ\xAD\x81A\x8A\x94\x82\xF0\x8Eg\x82\xC1\x82ăo\x81[\x83W\x83\x87\x83\x93\x82\xF0\x8E擾\x82\xB7\x82\xE9\x81B(2013.11.24 yutaka) - SendMessage(GetDlgItem(dlg, IDC_OPENSSL_VERSION), WM_SETTEXT, 0, (LPARAM)SSLeay_version(SSLEAY_VERSION)); + // OpenSSLのバージョンを設定する (2005.1.24 yutaka) + // 条件文追加 (2005.5.11 yutaka) + // OPENSSL_VERSION_TEXT マクロ定義ではなく、関数を使ってバージョンを取得する。(2013.11.24 yutaka) + SetDlgItemTextA(dlg, IDC_OPENSSL_VERSION, SSLeay_version(SSLEAY_VERSION)); - // zlib\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2005.5.11 yutaka) + // zlibのバージョンを設定する (2005.5.11 yutaka) #ifdef ZLIB_VERSION _snprintf_s(buf, sizeof(buf), _TRUNCATE, "ZLib %s", ZLIB_VERSION); #else _snprintf(buf, sizeof(buf), "ZLib Unknown"); #endif - SendMessage(GetDlgItem(dlg, IDC_ZLIB_VERSION), WM_SETTEXT, 0, (LPARAM)buf); + SetDlgItemTextA(dlg, IDC_ZLIB_VERSION, buf); - // PuTTY\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2011.7.26 yutaka) + // PuTTYのバージョンを設定する (2011.7.26 yutaka) _snprintf_s(buf, sizeof(buf), _TRUNCATE, "PuTTY %s", putty_get_version()); - SendMessage(GetDlgItem(dlg, IDC_PUTTY_VERSION), WM_SETTEXT, 0, (LPARAM)buf); + SetDlgItemTextA(dlg, IDC_PUTTY_VERSION, buf); } -// WM_MOUSEWHEEL \x82\xCD winuser.h \x83w\x83b\x83_\x82Ő錾\x82\xB3\x82\xEA\x82Ă\xA2\x82܂\xB7\x82\xAA\x81A#define _WIN32_WINNT 0x0400 \x82\xAA\x90錾\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x82ƔF\x8E\xAF\x82\xB3\x82\xEA\x82܂\xB9\x82\xF1\x81B +// WM_MOUSEWHEEL は winuser.h ヘッダで宣言されていますが、#define _WIN32_WINNT 0x0400 が宣言されていないと認識されません。 #define WM_MOUSEWHEEL 0x020A #define WHEEL_DELTA 120 #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) -static WNDPROC g_defAboutDlgEditWndProc; // Edit Control\x82̃T\x83u\x83N\x83\x89\x83X\x89\xBB\x97p -static int g_deltaSumAboutDlg = 0; // \x83}\x83E\x83X\x83z\x83C\x81[\x83\x8B\x82\xCCDelta\x97ݐϗp +static WNDPROC g_defAboutDlgEditWndProc; // Edit Controlのサブクラス化用 +static int g_deltaSumAboutDlg = 0; // マウスホイールのDelta累積用 static LRESULT CALLBACK AboutDlgEditWindowProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { @@ -2418,7 +2519,7 @@ switch (msg) { case WM_KEYDOWN: - // Edit control\x8F\xE3\x82\xC5 CTRL+A \x82\xF0\x89\x9F\x89\xBA\x82\xB7\x82\xE9\x82ƁA\x83e\x83L\x83X\x83g\x82\xF0\x91S\x91I\x91\xF0\x82\xB7\x82\xE9\x81B + // Edit control上で CTRL+A を押下すると、テキストを全選択する。 if (wp == 'A' && GetKeyState(VK_CONTROL) < 0) { PostMessage(hWnd, EM_SETSEL, 0, -1); return 0; @@ -2426,7 +2527,7 @@ break; case WM_MOUSEWHEEL: - // CTRLorSHIFT + \x83}\x83E\x83X\x83z\x83C\x81[\x83\x8B\x82̏ꍇ\x81A\x89\xA1\x83X\x83N\x83\x8D\x81[\x83\x8B\x82\xB3\x82\xB9\x82\xE9\x81B + // CTRLorSHIFT + マウスホイールの場合、横スクロールさせる。 keys = GET_KEYSTATE_WPARAM(wp); delta = GET_WHEEL_DELTA_WPARAM(wp); page = keys & (MK_CONTROL | MK_SHIFT); @@ -2452,11 +2553,12 @@ static BOOL CALLBACK TTXAboutDlg(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { - LOGFONT logfont; - HFONT font; + LOGFONTA logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgAboutFont, pvar)) { @@ -2477,20 +2579,20 @@ else { DlgAboutFont = NULL; } - - // Edit control\x82͓\x99\x95\x9D\x83t\x83H\x83\x93\x83g\x82ŕ\\x8E\xA6\x82\xB5\x82\xBD\x82\xA2\x82̂ŁA\x95ʐݒ\xE8\x8F\xEE\x95\xE7\x83t\x83H\x83\x93\x83g\x82\xF0\x83Z\x83b\x83g\x82\xB7\x82\xE9\x81B +#endif + // Edit controlは等幅フォントで表示したいので、別設定情報からフォントをセットする。 // (2014.5.5. yutaka) if (UTIL_get_lang_font("DLG_ABOUT_FONT", dlg, &logfont, &DlgAboutTextFont, pvar)) { SendDlgItemMessage(dlg, IDC_ABOUTTEXT, WM_SETFONT, (WPARAM)DlgAboutTextFont, MAKELPARAM(TRUE,0)); } else { - // \x93ǂݍ\x9E\x82߂Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ\x82͓\x99\x95\x9D\x83t\x83H\x83\x93\x83g\x82\xF0\x8Ew\x92肷\x82\xE9\x81B - // \x83G\x83f\x83B\x83b\x83g\x83R\x83\x93\x83g\x83\x8D\x81[\x83\x8B\x82̓_\x83C\x83A\x83\x8D\x83O\x82Ɠ\xAF\x82\xB6\x83t\x83H\x83\x93\x83g\x82\xF0\x8E\x9D\x82\xC1\x82Ă\xA8\x82\xE8 - // \x93\x99\x95\x9D\x83t\x83H\x83\x93\x83g\x82ł͂Ȃ\xA2\x82\xBD\x82߁B + // 読み込めなかった場合は等幅フォントを指定する。 + // エディットコントロールはダイアログと同じフォントを持っており + // 等幅フォントではないため。 strncpy_s(logfont.lfFaceName, sizeof(logfont.lfFaceName), "Courier New", _TRUNCATE); logfont.lfCharSet = 0; logfont.lfHeight = MulDiv(8, GetDeviceCaps(GetDC(dlg),LOGPIXELSY) * -1, 72); logfont.lfWidth = 0; - if ((DlgAboutTextFont = CreateFontIndirect(&logfont)) != NULL) { + if ((DlgAboutTextFont = CreateFontIndirectA(&logfont)) != NULL) { SendDlgItemMessage(dlg, IDC_ABOUTTEXT, WM_SETFONT, (WPARAM)DlgAboutTextFont, MAKELPARAM(TRUE,0)); } else { @@ -2498,7 +2600,7 @@ } } - // \x83A\x83C\x83R\x83\x93\x82I\x82ɃZ\x83b\x83g + // アイコンを動的にセット { int fuLoad = LR_DEFAULTCOLOR; HICON hicon; @@ -2517,7 +2619,7 @@ about_dlg_set_abouttext(pvar, dlg, SSH_DIGEST_SHA256); SetFocus(GetDlgItem(dlg, IDOK)); - // Edit control\x82\xF0\x83T\x83u\x83N\x83\x89\x83X\x89\xBB\x82\xB7\x82\xE9\x81B + // Edit controlをサブクラス化する。 g_deltaSumAboutDlg = 0; g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); @@ -2527,9 +2629,11 @@ switch (LOWORD(wParam)) { case IDOK: EndDialog(dlg, 1); +#if 0 if (DlgAboutFont != NULL) { DeleteObject(DlgAboutFont); } +#endif if (DlgAboutTextFont != NULL) { DeleteObject(DlgAboutTextFont); } @@ -2537,9 +2641,11 @@ case IDCANCEL: /* there isn't a cancel button, but other Windows UI things can send this message */ EndDialog(dlg, 0); +#if 0 if (DlgAboutFont != NULL) { DeleteObject(DlgAboutFont); } +#endif if (DlgAboutTextFont != NULL) { DeleteObject(DlgAboutTextFont); } @@ -2648,7 +2754,6 @@ HWND hostkeyRotationControlList = GetDlgItem(dlg, IDC_HOSTKEY_ROTATION_COMBO); int i; int ch; - char uimsg[MAX_UIMSG]; char *rotationItem[SSH_UPDATE_HOSTKEYS_MAX] = { "No", "Yes", @@ -2660,6 +2765,52 @@ "DLG_SSHSETUP_HOSTKEY_ROTATION_ASK", }; + const static DlgTextInfo text_info[] = { + { 0, "DLG_SSHSETUP_TITLE" }, + { IDC_COMPRESSLABEL, "DLG_SSHSETUP_COMPRESS" }, + { IDC_COMPRESSNONE, "DLG_SSHSETUP_COMPRESS_NONE" }, + { IDC_COMPRESSHIGH, "DLG_SSHSETUP_COMPRESS_HIGHEST" }, + { IDC_COMPRESSNOTE, "DLG_SSHSETUP_COMPRESS_NOTE" }, + + { IDC_CIPHERORDER, "DLG_SSHSETUP_CIPHER" }, + { IDC_SSHMOVECIPHERUP, "DLG_SSHSETUP_CIPHER_UP" }, + { IDC_SSHMOVECIPHERDOWN, "DLG_SSHSETUP_CIPHER_DOWN" }, + + { IDC_KEX_ORDER, "DLG_SSHSETUP_KEX" }, + { IDC_SSHKEX_MOVEUP, "DLG_SSHSETUP_KEX_UP" }, + { IDC_SSHKEX_MOVEDOWN, "DLG_SSHSETUP_KEX_DOWN" }, + + { IDC_HOST_KEY_ORDER, "DLG_SSHSETUP_HOST_KEY" }, + { IDC_SSHHOST_KEY_MOVEUP, "DLG_SSHSETUP_HOST_KEY_UP" }, + { IDC_SSHHOST_KEY_MOVEDOWN, "DLG_SSHSETUP_HOST_KEY_DOWN" }, + + { IDC_MAC_ORDER, "DLG_SSHSETUP_MAC" }, + { IDC_SSHMAC_MOVEUP, "DLG_SSHSETUP_MAC_UP" }, + { IDC_SSHMAC_MOVEDOWN, "DLG_SSHSETUP_MAC_DOWN" }, + + { IDC_COMP_ORDER, "DLG_SSHSETUP_COMP" }, + { IDC_SSHCOMP_MOVEUP, "DLG_SSHSETUP_COMP_UP" }, + { IDC_SSHCOMP_MOVEDOWN, "DLG_SSHSETUP_COMP_DOWN" }, + + { IDC_KNOWNHOSTS, "DLG_SSHSETUP_KNOWNHOST" }, + { IDC_CHOOSEREADWRITEFILE, "DLG_SSHSETUP_KNOWNHOST_RW" }, + { IDC_CHOOSEREADONLYFILE, "DLG_SSHSETUP_KNOWNHOST_RO" }, + { IDC_HEARTBEATLABEL, "DLG_SSHSETUP_HEARTBEAT" }, + { IDC_HEARTBEATLABEL2, "DLG_SSHSETUP_HEARTBEAT_UNIT" }, + { IDC_REMEMBERPASSWORD, "DLG_SSHSETUP_PASSWORD" }, + { IDC_FORWARDAGENT, "DLG_SSHSETUP_FORWARDAGENT" }, + { IDC_FORWARDAGENTCONFIRM, "DLG_SSHSETUP_FORWARDAGENTCONFIRM" }, + { IDC_FORWARDAGENTNOTIFY, "DLG_SSHSETUP_FORWARDAGENTNOTIFY" }, + { IDC_VERIFYHOSTKEYDNS, "DLG_SSHSETUP_VERIFYHOSTKEYDNS" }, + { IDC_NOTICEBANNER, "DLG_SSHSETUP_NOTICE" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_CANCEL" }, + + { IDC_HOSTKEY_ROTATION_STATIC, "DLG_SSHSETUP_HOSTKEY_ROTATION" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); + +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_SSHSETUP_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -2769,6 +2920,7 @@ GetDlgItemText(dlg, IDC_HOSTKEY_ROTATION_STATIC, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_SSHSETUP_HOSTKEY_ROTATION", pvar, uimsg); SetDlgItemText(dlg, IDC_HOSTKEY_ROTATION_STATIC, pvar->ts->UIMsg); +#endif SendMessage(compressionControl, TBM_SETRANGE, TRUE, MAKELONG(0, 9)); SendMessage(compressionControl, TBM_SETPOS, TRUE, @@ -2782,7 +2934,7 @@ char *name = get_cipher_name(cipher); if (name != NULL) { - SendMessage(cipherControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageA(cipherControl, LB_ADDSTRING, 0, (LPARAM) name); } } @@ -2804,7 +2956,7 @@ } if (name != NULL) { - SendMessage(kexControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageA(kexControl, LB_ADDSTRING, 0, (LPARAM) name); } } SendMessage(kexControl, LB_SETCURSEL, 0, 0); @@ -2825,7 +2977,7 @@ } if (name != NULL) { - SendMessage(hostkeyControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageA(hostkeyControl, LB_ADDSTRING, 0, (LPARAM) name); } } SendMessage(hostkeyControl, LB_SETCURSEL, 0, 0); @@ -2846,7 +2998,7 @@ } if (name != NULL) { - SendMessage(macControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageA(macControl, LB_ADDSTRING, 0, (LPARAM) name); } } SendMessage(macControl, LB_SETCURSEL, 0, 0); @@ -2867,7 +3019,7 @@ } if (name != NULL) { - SendMessage(compControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageA(compControl, LB_ADDSTRING, 0, (LPARAM) name); } } SendMessage(compControl, LB_SETCURSEL, 0, 0); @@ -2888,7 +3040,7 @@ pvar->settings.KnownHostsFiles); } - // SSH2 HeartBeat(keep-alive)\x82\xF0\x92lj\xC1 (2005.2.22 yutaka) + // SSH2 HeartBeat(keep-alive)を追加 (2005.2.22 yutaka) { char buf[10]; _snprintf_s(buf, sizeof(buf), _TRUNCATE, @@ -2946,7 +3098,7 @@ return; } - GetModuleFileName(NULL, buf, bufsize); + GetModuleFileNameA(NULL, buf, bufsize); for (i = 0; (ch = buf[i]) != 0; i++) { if (ch == '\\' || ch == '/' || ch == ':') { filename_start = i + 1; @@ -2972,7 +3124,7 @@ return strlen(dest); } - GetModuleFileName(NULL, buf, sizeof(buf)); + GetModuleFileNameA(NULL, buf, sizeof(buf)); for (i = 0; (ch = buf[i]) != 0; i++) { if (ch == '\\' || ch == '/' || ch == ':') { filename_start = i + 1; @@ -3176,7 +3328,7 @@ } // get SSH HeartBeat(keep-alive) - SendMessage(GetDlgItem(dlg, IDC_HEARTBEAT_EDIT), WM_GETTEXT, sizeof(buf), (LPARAM)buf); + GetDlgItemTextA(dlg, IDC_HEARTBEAT_EDIT, buf, sizeof(buf)); i = atoi(buf); if (i < 0) i = 60; @@ -3219,7 +3371,7 @@ static int get_keys_file_name(HWND parent, char *buf, int bufsize, int readonly) { - OPENFILENAME params; + OPENFILENAMEA params; char fullname_buf[2048] = "ssh_known_hosts"; params.lStructSize = sizeof(OPENFILENAME); @@ -3245,7 +3397,7 @@ | OFN_HIDEREADONLY | (!readonly ? OFN_NOREADONLYRETURN : 0); params.lpstrDefExt = NULL; - if (GetOpenFileName(¶ms) != 0) { + if (GetOpenFileNameA(¶ms) != 0) { copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf); return 1; } else { @@ -3292,14 +3444,14 @@ static BOOL CALLBACK TTXSetupDlg(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: SetWindowLongPtr(dlg, DWLP_USER, lParam); init_setup_dlg((PTInstVar) lParam, dlg); - +#if 0 font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); GetObject(font, sizeof(LOGFONT), &logfont); if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgSetupFont, pvar)) { @@ -3356,7 +3508,7 @@ else { DlgSetupFont = NULL; } - +#endif return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { @@ -3363,16 +3515,20 @@ case IDOK: complete_setup_dlg((PTInstVar) GetWindowLongPtr(dlg, DWLP_USER), dlg); EndDialog(dlg, 1); +#if 0 if (DlgSetupFont != NULL) { DeleteObject(DlgSetupFont); } +#endif return TRUE; case IDCANCEL: /* there isn't a cancel button, but other Windows UI things can send this message */ EndDialog(dlg, 0); +#if 0 if (DlgSetupFont != NULL) { DeleteObject(DlgSetupFont); } +#endif return TRUE; // Cipher order case IDC_SSHMOVECIPHERUP: @@ -3498,7 +3654,7 @@ static void free_ssh_key(void) { - // DSA_free(), RSA_free()\x82\xC9NULL\x82\xF0\x93n\x82\xB5\x82Ă\xE0\x96\xE2\x91\xE8\x82͂Ȃ\xB5\x81B + // DSA_free(), RSA_free()にNULLを渡しても問題はなし。 DSA_free(private_key.dsa); private_key.dsa = NULL; DSA_free(public_key.dsa); @@ -3629,7 +3785,7 @@ case KEY_ED25519: { - // \x94閧\x8C\xAE\x82\xF0\x8D\xEC\x82\xE9 + // 秘密鍵を作る private_key.ed25519_pk = malloc(ED25519_PK_SZ); private_key.ed25519_sk = malloc(ED25519_SK_SZ); if (private_key.ed25519_pk == NULL || private_key.ed25519_sk == NULL) @@ -3636,7 +3792,7 @@ goto error; crypto_sign_ed25519_keypair(private_key.ed25519_pk, private_key.ed25519_sk); - // \x8C\xF6\x8AJ\x8C\xAE\x82\xF0\x8D\xEC\x82\xE9 + // 公開鍵を作る public_key.ed25519_pk = malloc(ED25519_PK_SZ); if (public_key.ed25519_pk == NULL) goto error; @@ -3797,7 +3953,7 @@ // get Windows logon user name dwSize = sizeof(user); - if (GetUserName(user, &dwSize) == 0) { + if (GetUserNameA(user, &dwSize) == 0) { strncpy_s(user, sizeof(user), "yutaka", _TRUNCATE); } @@ -3890,7 +4046,6 @@ static char sendfile[MAX_PATH] = ""; static char sendfiledir[MAX_PATH] = ""; static char recvdir[MAX_PATH] = ""; - HWND hWnd; HDROP hDrop; UINT uFileNo; char szFileName[256]; @@ -3900,18 +4055,18 @@ case WM_INITDIALOG: DragAcceptFiles(dlg, TRUE); - // SCP\x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x90\xE6\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9 + // SCPファイル送信先を表示する if (sendfiledir[0] == '\0') { _snprintf_s(sendfiledir, sizeof(sendfiledir), _TRUNCATE, pvar->ts->ScpSendDir); // home directory } - SendMessage(GetDlgItem(dlg, IDC_SENDFILE_TO), WM_SETTEXT, 0, (LPARAM)sendfiledir); + SetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir); - // SCP\x83t\x83@\x83C\x83\x8B\x8E\xF3\x90M\x90\xE6\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9 + // SCPファイル受信先を表示する if (recvdir[0] == '\0') { _snprintf_s(recvdir, sizeof(recvdir), _TRUNCATE, "%s", pvar->ts->FileDir); } - SendMessage(GetDlgItem(dlg, IDC_RECVFILE_TO), WM_SETTEXT, 0, (LPARAM)recvdir); - + SetDlgItemTextA(dlg, IDC_RECVFILE_TO, recvdir); + #ifdef SFTP_DEBUG ShowWindow(GetDlgItem(dlg, IDC_SFTP_TEST), SW_SHOW); #endif @@ -3923,11 +4078,10 @@ hDrop = (HDROP)wParam; uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0); for(i = 0; i < (int)uFileNo; i++) { - DragQueryFile(hDrop, i, szFileName, sizeof(szFileName)); + DragQueryFileA(hDrop, i, szFileName, sizeof(szFileName)); // update edit box - hWnd = GetDlgItem(dlg, IDC_SENDFILE_EDIT); - SendMessage(hWnd, WM_SETTEXT , 0, (LPARAM)szFileName); + SetDlgItemTextA(dlg, IDC_SENDFILE_EDIT, szFileName); } DragFinish(hDrop); } @@ -3937,7 +4091,7 @@ switch (wParam) { case IDC_SENDFILE_SELECT | (BN_CLICKED << 16): { - OPENFILENAME ofn; + OPENFILENAMEA ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(OPENFILENAME); @@ -3955,15 +4109,14 @@ #endif ofn.lpstrTitle = "Choose a sending file with SCP"; -// WINVER \x82\xAA\x83Z\x83b\x83g\x82\xB3\x82\xEA\x82Ȃ\xA2\x82\xBD\x82߂Ƀ}\x83N\x83\x8D\x82\xAA\x92\xE8\x8B`\x82\xB3\x82\xEA\x82Ȃ\xA2\x82̂ŁA\x82\xB1\x82\xB1\x82Œ\xE8\x8B`\x82\xB7\x82\xE9(2008.1.21 maya) +// WINVER がセットされないためにマクロが定義されないので、ここで定義する(2008.1.21 maya) #ifndef OFN_FORCESHOWHIDDEN /* from commdlg.h */ #define OFN_FORCESHOWHIDDEN 0x10000000 #endif ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_FORCESHOWHIDDEN | OFN_HIDEREADONLY; - if (GetOpenFileName(&ofn) != 0) { - hWnd = GetDlgItem(dlg, IDC_SENDFILE_EDIT); - SendMessage(hWnd, WM_SETTEXT , 0, (LPARAM)sendfile); + if (GetOpenFileNameA(&ofn) != 0) { + SetDlgItemTextA(dlg, IDC_SENDFILE_EDIT, sendfile); } } return TRUE; @@ -3970,11 +4123,10 @@ case IDC_RECVDIR_SELECT | (BN_CLICKED << 16): { char buf[MAX_PATH], buf2[MAX_PATH]; - hWnd = GetDlgItem(dlg, IDC_RECVFILE_TO); - SendMessage(hWnd, WM_GETTEXT , sizeof(buf), (LPARAM)buf); + GetDlgItemTextA(dlg, IDC_RECVFILE_TO, buf, sizeof(buf)); if (doSelectFolder(dlg, buf2, sizeof(buf2), buf, "Choose destination directory")) { strncpy_s(recvdir, sizeof(recvdir), buf2, _TRUNCATE); - SendMessage(GetDlgItem(dlg, IDC_RECVFILE_TO), WM_SETTEXT, 0, (LPARAM)recvdir); + SetDlgItemTextA(dlg, IDC_RECVFILE_TO, recvdir); } } return TRUE; @@ -3982,12 +4134,10 @@ switch (LOWORD(wParam)) { case IDOK: - hWnd = GetDlgItem(dlg, IDC_SENDFILE_EDIT); - SendMessage(hWnd, WM_GETTEXT , sizeof(sendfile), (LPARAM)sendfile); + GetDlgItemTextA(dlg, IDC_SENDFILE_EDIT, sendfile, sizeof(sendfile)); if (sendfile[0] != '\0') { - // \x91\x97\x90M\x83p\x83X\x82\xF0\x8E\xE6\x82\xE8\x8Fo\x82\xB5\x81Ateraterm.ini \x82\xE0\x8D\x87\x82킹\x82čX\x90V\x82\xB7\x82\xE9\x81B - hWnd = GetDlgItem(dlg, IDC_SENDFILE_TO); - SendMessage(hWnd, WM_GETTEXT , sizeof(sendfiledir), (LPARAM)sendfiledir); + // 送信パスを取り出し、teraterm.ini も合わせて更新する。 + GetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir, sizeof(sendfiledir)); strncpy_s(pvar->ts->ScpSendDir, sizeof(pvar->ts->ScpSendDir), sendfiledir, _TRUNCATE); SSH_start_scp(pvar, sendfile, sendfiledir); @@ -3998,22 +4148,19 @@ return FALSE; case IDCANCEL: - // \x91\x97\x90M\x83p\x83X\x82\xF0\x8E\xE6\x82\xE8\x8Fo\x82\xB5\x81Ateraterm.ini \x82\xE0\x8D\x87\x82킹\x82čX\x90V\x82\xB7\x82\xE9\x81B - hWnd = GetDlgItem(dlg, IDC_SENDFILE_TO); - SendMessage(hWnd, WM_GETTEXT , sizeof(sendfiledir), (LPARAM)sendfiledir); + // 送信パスを取り出し、teraterm.ini も合わせて更新する。 + GetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir, sizeof(sendfiledir)); strncpy_s(pvar->ts->ScpSendDir, sizeof(pvar->ts->ScpSendDir), sendfiledir, _TRUNCATE); - // \x8E\xF3\x90M\x83p\x83X\x82Ɋւ\xB5\x82Ă\xE0\x8DX\x90V\x82\xB7\x82\xE9\x81B(2013.8.18 yutaka) - hWnd = GetDlgItem(dlg, IDC_RECVFILE_TO); - SendMessage(hWnd, WM_GETTEXT , sizeof(recvdir), (LPARAM)recvdir); + // 受信パスに関しても更新する。(2013.8.18 yutaka) + GetDlgItemTextA(dlg, IDC_RECVFILE_TO, recvdir, sizeof(recvdir)); strncpy_s(pvar->ts->FileDir, sizeof(pvar->ts->FileDir), recvdir, _TRUNCATE); EndDialog(dlg, 0); // dialog close return TRUE; - case IDC_RECV: // \x83t\x83@\x83C\x83\x8B\x8E\xF3\x90M - hWnd = GetDlgItem(dlg, IDC_RECVFILE); - SendMessage(hWnd, WM_GETTEXT , sizeof(szFileName), (LPARAM)szFileName); + case IDC_RECV: // ファイル受信 + GetDlgItemTextA(dlg, IDC_RECVFILE, szFileName, sizeof(szFileName)); if (szFileName[0] != '\0') { char recvpath[MAX_PATH] = ""; char* fn = strrchr(szFileName, '/'); @@ -4029,7 +4176,7 @@ } strncpy_s(recvfn, sizeof(recvfn), fn, _TRUNCATE); replaceInvalidFileNameChar(recvfn, '_'); - SendMessage(GetDlgItem(dlg, IDC_RECVFILE_TO), WM_GETTEXT, sizeof(recvdir), (LPARAM)recvdir); + GetDlgItemTextA(dlg, IDC_RECVFILE_TO, recvdir, sizeof(recvdir)); _snprintf_s(recvpath, sizeof(recvpath), _TRUNCATE, "%s\\%s", recvdir, recvfn); SSH_scp_transaction(pvar, szFileName, recvpath, FROMREMOTE); EndDialog(dlg, 1); // dialog close @@ -4046,7 +4193,7 @@ return FALSE; } -// \x83}\x83N\x83\x8D\x83R\x83}\x83\x93\x83h"scpsend"\x82\xA9\x82\xE7\x8CĂяo\x82\xB7\x82\xBD\x82߂ɁADLL\x8AO\x82փG\x83N\x83X\x83|\x81[\x83g\x82\xB7\x82\xE9\x81B"ttxssh.def"\x83t\x83@\x83C\x83\x8B\x82ɋL\x8DځB +// マクロコマンド"scpsend"から呼び出すために、DLL外へエクスポートする。"ttxssh.def"ファイルに記載。 // (2008.1.1 yutaka) __declspec(dllexport) int CALLBACK TTXScpSendfile(char *filename, char *dstfile) { @@ -4059,10 +4206,10 @@ } -// TTSSH\x82̐ݒ\xE8\x93\xE0\x97e(known hosts file)\x82\xF0\x95Ԃ\xB7\x81B +// TTSSHの設定内容(known hosts file)を返す。 // -// return TRUE: \x95ԋp\x90\xAC\x8C\xF7 -// FALSE: \x8E\xB8\x94s +// return TRUE: 返却成功 +// FALSE: 失敗 // (2015.3.9 yutaka) __declspec(dllexport) int CALLBACK TTXReadKnownHostsFile(char *filename, int maxlen) { @@ -4133,7 +4280,7 @@ (LONG_PTR) password_wnd_proc)); } -// bcrypt KDF\x8C`\x8E\xAE\x82Ŕ閧\x8C\xAE\x82\xF0\x95ۑ\xB6\x82\xB7\x82\xE9 +// bcrypt KDF形式で秘密鍵を保存する // based on OpenSSH 6.5:key_save_private(), key_private_to_blob2() static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds) { @@ -4169,7 +4316,7 @@ blocksize = get_cipher_block_size(cipher); keylen = get_cipher_key_len(cipher); ivlen = blocksize; - authlen = 0; // TODO: \x82Ƃ肠\x82\xA6\x82\xB8\x8CŒ艻 + authlen = 0; // TODO: とりあえず固定化 key = calloc(1, keylen + ivlen); if (strcmp(kdfname, "none") != 0) { @@ -4181,9 +4328,9 @@ buffer_put_string(kdf, salt, SALT_LEN); buffer_put_int(kdf, rounds); } - // \x88Í\x86\x89\xBB\x82̏\x80\x94\xF5 - // TODO: OpenSSH 6.5\x82ł\xCD -Z \x83I\x83v\x83V\x83\x87\x83\x93\x82ŁA\x88Í\x86\x89\xBB\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xF0\x8Ew\x92\xE8\x89\\x82\xBE\x82\xAA\x81A - // \x82\xB1\x82\xB1\x82ł\xCD"AES256-CBC"\x82ɌŒ\xE8\x82Ƃ\xB7\x82\xE9\x81B + // 暗号化の準備 + // TODO: OpenSSH 6.5では -Z オプションで、暗号化アルゴリズムを指定可能だが、 + // ここでは"AES256-CBC"に固定とする。 cipher_init_SSH2(&cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_ENCRYPT, get_cipher_EVP_CIPHER(cipher), 0, 0, pvar); SecureZeroMemory(key, keylen + ivlen); @@ -4195,7 +4342,7 @@ buffer_put_string(encoded, buffer_ptr(kdf), buffer_len(kdf)); buffer_put_int(encoded, 1); /* number of keys */ - // key_to_blob()\x82\xF0\x88ꎞ\x97\x98\x97p\x82\xB7\x82邽\x82߁AKey\x8D\\x91\xA2\x91̂\xF0\x8F\x89\x8A\x{227B0B7}\x82\xE9\x81B + // key_to_blob()を一時利用するため、Key構造体を初期化する。 keyblob.type = private_key.type; keyblob.rsa = private_key.rsa; keyblob.dsa = private_key.dsa; @@ -4257,7 +4404,7 @@ len = buffer_len(blob); - // \x94閧\x8C\xAE\x82\xF0\x83t\x83@\x83C\x83\x8B\x82ɕۑ\xB6\x82\xB7\x82\xE9\x81B + // 秘密鍵をファイルに保存する。 fp = fopen(filename, "wb"); if (fp == NULL) { UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar, @@ -4291,110 +4438,128 @@ static ssh_keytype key_type; static int saved_key_bits; char uimsg[MAX_UIMSG]; - LOGFONT logfont; - HFONT font; +// LOGFONT logfont; +// HFONT font; switch (msg) { case WM_INITDIALOG: { - GetWindowText(dlg, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_TITLE", pvar, uimsg); - SetWindowText(dlg, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_KEYTYPE, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_KEYTYPE", pvar, uimsg); - SetDlgItemText(dlg, IDC_KEYTYPE, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_KEYBITS_LABEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_BITS", pvar, uimsg); - SetDlgItemText(dlg, IDC_KEYBITS_LABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_KEY_LABEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_PASSPHRASE", pvar, uimsg); - SetDlgItemText(dlg, IDC_KEY_LABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_CONFIRM_LABEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_PASSPHRASE2", pvar, uimsg); - SetDlgItemText(dlg, IDC_CONFIRM_LABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_COMMENT_LABEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_COMMENT", pvar, uimsg); - SetDlgItemText(dlg, IDC_COMMENT_LABEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SAVE_PUBLIC_KEY, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_SAVEPUBLIC", pvar, uimsg); - SetDlgItemText(dlg, IDC_SAVE_PUBLIC_KEY, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_SAVE_PRIVATE_KEY, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_SAVEPRIVATE", pvar, uimsg); - SetDlgItemText(dlg, IDC_SAVE_PRIVATE_KEY, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_GENERATE", pvar, uimsg); - SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("BTN_CLOSE", pvar, uimsg); - SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_KDF", pvar, uimsg); - SetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, pvar->ts->UIMsg); - GetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_ROUNDS", pvar, uimsg); - SetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, pvar->ts->UIMsg); + const static DlgTextInfo text_info[] = { + { 0, "DLG_KEYGEN_TITLE" }, + { IDC_KEYTYPE, "DLG_KEYGEN_KEYTYPE" }, + { IDC_KEYBITS_LABEL, "DLG_KEYGEN_BITS" }, + { IDC_KEY_LABEL, "DLG_KEYGEN_PASSPHRASE" }, + { IDC_CONFIRM_LABEL, "DLG_KEYGEN_PASSPHRASE2" }, + { IDC_COMMENT_LABEL, "DLG_KEYGEN_COMMENT" }, + { IDC_SAVE_PUBLIC_KEY, "DLG_KEYGEN_SAVEPUBLIC" }, + { IDC_SAVE_PRIVATE_KEY, "DLG_KEYGEN_SAVEPRIVATE" }, + { IDOK, "DLG_KEYGEN_GENERATE" }, + { IDCANCEL, "BTN_CLOSE" }, + { IDC_BCRYPT_KDF_CHECK, "DLG_KEYGEN_BCRYPT_KDF" }, + { IDC_BCRYPT_KDF_ROUNDS_LABEL, "DLG_KEYGEN_BCRYPT_ROUNDS" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 + GetWindowText(dlg, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_TITLE", pvar, uimsg); + SetWindowText(dlg, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_KEYTYPE, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_KEYTYPE", pvar, uimsg); + SetDlgItemText(dlg, IDC_KEYTYPE, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_KEYBITS_LABEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_BITS", pvar, uimsg); + SetDlgItemText(dlg, IDC_KEYBITS_LABEL, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_KEY_LABEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_PASSPHRASE", pvar, uimsg); + SetDlgItemText(dlg, IDC_KEY_LABEL, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_CONFIRM_LABEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_PASSPHRASE2", pvar, uimsg); + SetDlgItemText(dlg, IDC_CONFIRM_LABEL, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_COMMENT_LABEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_COMMENT", pvar, uimsg); + SetDlgItemText(dlg, IDC_COMMENT_LABEL, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_SAVE_PUBLIC_KEY, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_SAVEPUBLIC", pvar, uimsg); + SetDlgItemText(dlg, IDC_SAVE_PUBLIC_KEY, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_SAVE_PRIVATE_KEY, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_SAVEPRIVATE", pvar, uimsg); + SetDlgItemText(dlg, IDC_SAVE_PRIVATE_KEY, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDOK, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_GENERATE", pvar, uimsg); + SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("BTN_CLOSE", pvar, uimsg); + SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_KDF", pvar, uimsg); + SetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, pvar->ts->UIMsg); + GetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, uimsg, sizeof(uimsg)); + UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_ROUNDS", pvar, uimsg); + SetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, pvar->ts->UIMsg); +#endif +#if 0 + font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); + GetObject(font, sizeof(LOGFONT), &logfont); + if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgKeygenFont, pvar)) { + SendDlgItemMessage(dlg, IDC_KEYTYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_RSA1_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_RSA_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_DSA_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_ECDSA256_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_ECDSA384_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_ECDSA521_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_ED25519_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_KEYBITS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_KEYBITS, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_KEY_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_CONFIRM_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_COMMENT_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_KEY_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_CONFIRM_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_COMMENT_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_KEYGEN_PROGRESS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_SAVE_PUBLIC_KEY, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_SAVE_PRIVATE_KEY, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_CHECK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); + } + else { + DlgHostFont = NULL; + } +#endif - font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0); - GetObject(font, sizeof(LOGFONT), &logfont); - if (UTIL_get_lang_font("DLG_TAHOMA_FONT", dlg, &logfont, &DlgKeygenFont, pvar)) { - SendDlgItemMessage(dlg, IDC_KEYTYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_RSA1_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_RSA_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_DSA_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_ECDSA256_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_ECDSA384_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_ECDSA521_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_ED25519_TYPE, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_KEYBITS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_KEYBITS, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_KEY_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_CONFIRM_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_COMMENT_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_KEY_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_CONFIRM_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_COMMENT_EDIT, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_KEYGEN_PROGRESS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_SAVE_PUBLIC_KEY, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_SAVE_PRIVATE_KEY, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_CHECK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0)); - } - else { - DlgHostFont = NULL; - } + init_password_control(dlg, IDC_KEY_EDIT); + init_password_control(dlg, IDC_CONFIRM_EDIT); - init_password_control(dlg, IDC_KEY_EDIT); - init_password_control(dlg, IDC_CONFIRM_EDIT); + // default key type + SendMessage(GetDlgItem(dlg, IDC_RSA_TYPE), BM_SETCHECK, BST_CHECKED, 0); + key_type = KEY_RSA; + saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); - // default key type - SendMessage(GetDlgItem(dlg, IDC_RSA_TYPE), BM_SETCHECK, BST_CHECKED, 0); - key_type = KEY_RSA; - saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); + // default key bits + SetDlgItemInt(dlg, IDC_KEYBITS, SSH_KEYGEN_DEFAULT_BITS, FALSE); + SendDlgItemMessage(dlg, IDC_KEYBITS, EM_LIMITTEXT, 4, 0); - // default key bits - SetDlgItemInt(dlg, IDC_KEYBITS, SSH_KEYGEN_DEFAULT_BITS, FALSE); - SendDlgItemMessage(dlg, IDC_KEYBITS, EM_LIMITTEXT, 4, 0); + // passphrase edit box disabled(default) + EnableWindow(GetDlgItem(dlg, IDC_KEY_EDIT), FALSE); + EnableWindow(GetDlgItem(dlg, IDC_CONFIRM_EDIT), FALSE); - // passphrase edit box disabled(default) - EnableWindow(GetDlgItem(dlg, IDC_KEY_EDIT), FALSE); - EnableWindow(GetDlgItem(dlg, IDC_CONFIRM_EDIT), FALSE); + // comment edit box disabled (default) + EnableWindow(GetDlgItem(dlg, IDC_COMMENT_EDIT), FALSE); - // comment edit box disabled (default) - EnableWindow(GetDlgItem(dlg, IDC_COMMENT_EDIT), FALSE); + // file saving dialog disabled(default) + EnableWindow(GetDlgItem(dlg, IDC_SAVE_PUBLIC_KEY), FALSE); + EnableWindow(GetDlgItem(dlg, IDC_SAVE_PRIBATE_KEY), FALSE); - // file saving dialog disabled(default) - EnableWindow(GetDlgItem(dlg, IDC_SAVE_PUBLIC_KEY), FALSE); - EnableWindow(GetDlgItem(dlg, IDC_SAVE_PRIBATE_KEY), FALSE); + // default bcrypt KDF + EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE); + EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE); + SetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, DEFAULT_ROUNDS, FALSE); + SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, EM_LIMITTEXT, 4, 0); - // default bcrypt KDF - EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE); - EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE); - SetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, DEFAULT_ROUNDS, FALSE); - SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, EM_LIMITTEXT, 4, 0); - } return TRUE; @@ -4469,7 +4634,7 @@ if (generate_ssh_key(key_type, bits, keygen_progress, &cbarg)) { MSG msg; int c = 0; - // \x8C\xAE\x82̌v\x8EZ\x92\x86\x82ɔ\xAD\x90\xB6\x82\xB5\x82\xBD\x83C\x83x\x83\x93\x83g\x81i\x83{\x83^\x83\x93\x98A\x91łȂǁj\x82\xF0\x83t\x83\x89\x83b\x83V\x83\x85\x82\xB7\x82\xE9\x81B + // 鍵の計算中に発生したイベント(ボタン連打など)をフラッシュする。 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); @@ -4521,9 +4686,11 @@ // don't forget to free SSH resource! free_ssh_key(); EndDialog(dlg, 0); // dialog close +#if 0 if (DlgKeygenFont != NULL) { DeleteObject(DlgKeygenFont); } +#endif return TRUE; // if radio button pressed... @@ -4618,7 +4785,7 @@ break; case IDC_ED25519_TYPE | (BN_CLICKED << 16): - /* ED25519 \x82ł̓r\x83b\x83g\x90\x94\x82\xF0\x8Ew\x92\xE8\x82ł\xAB\x82Ȃ\xA2\x81B*/ + /* ED25519 ではビット数を指定できない。*/ if (!isFixedLengthKey(key_type)) { EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), FALSE); saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); @@ -4643,7 +4810,7 @@ case IDC_SAVE_PUBLIC_KEY: { int ret; - OPENFILENAME ofn; + OPENFILENAMEA ofn; char filename[MAX_PATH]; FILE *fp; char comment[1024]; // comment string in private key @@ -4700,7 +4867,7 @@ UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_TITLE", pvar, "Save public key as:"); ofn.lpstrTitle = pvar->ts->UIMsg; - if (GetSaveFileName(&ofn) == 0) { // failure + if (GetSaveFileNameA(&ofn) == 0) { // failure ret = CommDlgExtendedError(); break; } @@ -4816,13 +4983,13 @@ { char buf[1024], buf_conf[1024]; // passphrase int ret, rounds; - OPENFILENAME ofn; + OPENFILENAMEA ofn; char filename[MAX_PATH]; char comment[1024]; // comment string in private key - // \x83p\x83X\x83t\x83\x8C\x81[\x83Y\x82̃`\x83F\x83b\x83N\x82\xF0\x8Ds\x82\xA4\x81B\x83p\x83X\x83t\x83\x8C\x81[\x83Y\x82͔閧\x8C\xAE\x83t\x83@\x83C\x83\x8B\x82ɕt\x82\xAF\x82\xE9\x81B - SendMessage(GetDlgItem(dlg, IDC_KEY_EDIT), WM_GETTEXT, sizeof(buf), (LPARAM)buf); - SendMessage(GetDlgItem(dlg, IDC_CONFIRM_EDIT), WM_GETTEXT, sizeof(buf_conf), (LPARAM)buf_conf); + // パスフレーズのチェックを行う。パスフレーズは秘密鍵ファイルに付ける。 + GetDlgItemTextA(dlg, IDC_KEY_EDIT, buf, sizeof(buf)); + GetDlgItemTextA(dlg, IDC_CONFIRM_EDIT, buf_conf, sizeof(buf_conf)); // check matching if (strcmp(buf, buf_conf) != 0) { @@ -4916,7 +5083,7 @@ UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_TITLE", pvar, "Save private key as:"); ofn.lpstrTitle = pvar->ts->UIMsg; - if (GetSaveFileName(&ofn) == 0) { // failure + if (GetSaveFileNameA(&ofn) == 0) { // failure ret = CommDlgExtendedError(); break; } @@ -5114,11 +5281,11 @@ } switch (cmd) { - case 50430: // FIXME: ID_CONTROL_SENDBREAK(tt_res.h)\x82\xF0\x8Ew\x92肵\x82\xBD\x82\xA2\x82\xAA\x81A\x83w\x83b\x83_\x82\xF0include\x82\xB7\x82\xE9\x82ƁA\x91\xBD\x8Fd\x92\xE8\x8B`\x82ƂȂ\xE9\x81B + case 50430: // FIXME: ID_CONTROL_SENDBREAK(tt_res.h)を指定したいが、ヘッダをincludeすると、多重定義となる。 if (SSH_notify_break_signal(pvar)) return 1; else - return 0; // SSH2\x82ŏ\x88\x97\x9D\x82\xB3\x82\xEA\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ\x82́A\x96{\x97\x88\x82̓\xAE\x8D\xEC\x82\xF0\x8Ds\x82\xA4\x82ׂ\xAD\x81A\x83[\x83\x8D\x82\xF0\x95Ԃ\xB7\x81B + return 0; // SSH2で処理されなかった場合は、本来の動作を行うべく、ゼロを返す。 case ID_SSHSCPMENU: if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog, @@ -5237,7 +5404,7 @@ static void dquote_string(char *str, char *dst, int dst_len) { - // ",\x83X\x83y\x81[\x83X,;,^A-^_ \x82\xAA\x8A܂܂\xEA\x82\xE9\x8Fꍇ\x82ɂ̓N\x83I\x81[\x83g\x82\xB7\x82\xE9 + // ",スペース,;,^A-^_ が含まれる場合にはクオートする if (strchr(str, '"') != NULL || strchr(str, ' ') != NULL || strchr(str, ';') != NULL || @@ -5275,7 +5442,7 @@ _dquote_string(str, dst, dst_len); return; } - // \x82\xBB\x82̂܂܃R\x83s\x81[\x82\xB5\x82Ė߂\xE9 + // そのままコピーして戻る strncpy_s(dst, dst_len, str, _TRUNCATE); } @@ -5288,8 +5455,8 @@ char *p; int i; - GetTempPath(sizeof(tmpPath), tmpPath); - GetTempFileName(tmpPath, "TTX", 0, tmpFile); + GetTempPathA(sizeof(tmpPath), tmpPath); + GetTempFileNameA(tmpPath, "TTX", 0, tmpFile); for (i = 0; cmd[i] != ' ' && cmd[i] != 0; i++) { } @@ -5309,7 +5476,7 @@ strncat_s(cmd, cmdlen, buf, _TRUNCATE); - // \x83R\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93\x82ł̎w\x92\xE8\x82\xF0\x83`\x83F\x83b\x83N + // コマンドラインでの指定をチェック if (p = strstr(buf, " /ssh")) { switch (*(p + 5)) { case '\0': @@ -5324,9 +5491,9 @@ ssh_enable = 0; } - // \x83z\x83X\x83g\x96\xBC\x82\xC5 /ssh /1, /ssh /2, /ssh1, /ssh2, /nossh, /telnet \x82\xAA - // \x8Ew\x92肳\x82ꂽ\x82Ƃ\xAB\x82́A\x83\x89\x83W\x83I\x83{\x83^\x83\x93\x82\xCC SSH \x82\xA8\x82\xE6\x82\xD1 SSH \x83v\x83\x8D\x83g\x83R\x83\x8B\x83o\x81[\x83W\x83\x87\x83\x93\x82\xF0 - // \x93K\x97p\x82\xB7\x82\xE9\x82̂\xF0\x82\xE2\x82߂\xE9 (2007.11.1 maya) + // ホスト名で /ssh /1, /ssh /2, /ssh1, /ssh2, /nossh, /telnet が + // 指定されたときは、ラジオボタンの SSH および SSH プロトコルバージョンを + // 適用するのをやめる (2007.11.1 maya) if (pvar->hostdlg_Enabled && ssh_enable == -1) { strncat_s(cmd, cmdlen, " /ssh", _TRUNCATE); @@ -5339,12 +5506,12 @@ } - // \x83Z\x83b\x83V\x83\x87\x83\x93\x95\xA1\x90\xBB\x82̏ꍇ\x82́A\x8E\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x97p\x83p\x83\x89\x83\x81\x81[\x83^\x82\xF0\x95t\x82\xAF\x82\xE9\x81B(2005.4.8 yutaka) + // セッション複製の場合は、自動ログイン用パラメータを付ける。(2005.4.8 yutaka) if (strstr(buf, "DUPLICATE")) { char mark[MAX_PATH]; char tmp[MAX_PATH*2]; - // \x8E\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x82̏ꍇ\x82͉\xBA\x8BL\x83t\x83\x89\x83O\x82\xAA0\x82̂\xBD\x82߁A\x95K\x97v\x82ȃR\x83}\x83\x93\x83h\x82\xF0\x95t\x89\xC1\x82\xB7\x82\xE9\x81B + // 自動ログインの場合は下記フラグが0のため、必要なコマンドを付加する。 if (!pvar->hostdlg_Enabled) { _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, " /ssh /%d", pvar->settings.ssh_protocol_version); @@ -5351,7 +5518,7 @@ strncat_s(cmd, cmdlen, tmp, _TRUNCATE); } - // \x83p\x83X\x83\x8F\x81[\x83h\x82\xF0\x8Ao\x82\xA6\x82Ă\xA2\x82\xE9\x8Fꍇ\x82̂݁A\x83R\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93\x82ɓn\x82\xB7\x81B(2006.8.3 yutaka) + // パスワードを覚えている場合のみ、コマンドラインに渡す。(2006.8.3 yutaka) if (pvar->settings.remember_password && pvar->auth_state.cur_cred.method == SSH_AUTH_PASSWORD) { dquote_string(pvar->auth_state.cur_cred.password, mark, sizeof(mark)); @@ -5473,16 +5640,17 @@ /* do process initialization */ #ifdef _DEBUG //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); - // \x83\x8A\x81[\x83N\x8E\x9E\x82̃u\x83\x8D\x83b\x83N\x94ԍ\x86\x82\xF0\x8C\xB3\x82Ƀu\x83\x8C\x81[\x83N\x82\xF0\x8Ed\x8A|\x82\xAF\x82\xE9\x82ɂ́A\x88ȉ\xBA\x82̂悤\x82ɂ\xB7\x82\xE9\x81B + // リーク時のブロック番号を元にブレークを仕掛けるには、以下のようにする。 // cf. http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/MemLeaks/ //_CrtSetBreakAlloc(3228); #endif DoCover_IsDebuggerPresent(); DisableThreadLibraryCalls(hInstance); + set_lang_section("TTSSH"); hInst = hInstance; pvar = &InstVar; __mem_mapping = - CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, + CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(TS_SSH), TTSSH_FILEMAPNAME); if (__mem_mapping == NULL) { /* fake it. The settings won't be shared, but what the heck. */ Modified: branches/cmake/ttssh2/ttxssh/util.c =================================================================== --- branches/cmake/ttssh2/ttxssh/util.c 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/util.c 2018-12-10 15:01:12 UTC (rev 7317) @@ -314,14 +314,27 @@ return buf->buflen / 2 < buf->datalen; } -void UTIL_get_lang_msg(PCHAR key, PTInstVar pvar, PCHAR def) +void UTIL_get_lang_msgA(const char *key, char *buf, size_t buf_len, const char *def, const char *iniFile) { - GetI18nStr("TTSSH", key, pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), - def, pvar->ts->UILanguageFile); + get_lang_msg(key, buf, buf_len, def, iniFile); } -int UTIL_get_lang_font(PCHAR key, HWND dlg, PLOGFONT logfont, HFONT *font, PTInstVar pvar) +#if defined(_UNICODE) +void UTIL_get_lang_msgW(const char *key, wchar_t *buf, size_t buf_len, const wchar_t *def, const char *iniFile) { + get_lang_msgW(key, buf, buf_len, def, iniFile); +} +#endif + +void UTIL_get_lang_msg(const char *key, PTInstVar pvar, const char *def) +{ + UTIL_get_lang_msgA(key, + pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), def, + pvar->ts->UILanguageFile); +} + +int UTIL_get_lang_font(const char *key, HWND dlg, PLOGFONTA logfont, HFONT *font, PTInstVar pvar) +{ if (GetI18nLogfont("TTSSH", key, logfont, GetDeviceCaps(GetDC(dlg),LOGPIXELSY), pvar->ts->UILanguageFile) == FALSE) { @@ -328,7 +341,7 @@ return FALSE; } - if ((*font = CreateFontIndirect(logfont)) == NULL) { + if ((*font = CreateFontIndirectA(logfont)) == NULL) { return FALSE; } Modified: branches/cmake/ttssh2/ttxssh/util.h =================================================================== --- branches/cmake/ttssh2/ttxssh/util.h 2018-12-10 15:00:57 UTC (rev 7316) +++ branches/cmake/ttssh2/ttxssh/util.h 2018-12-10 15:01:12 UTC (rev 7317) @@ -84,7 +84,19 @@ void UTIL_destroy_sock_write_buf(UTILSockWriteBuf *buf); BOOL UTIL_is_sock_deeply_buffered(UTILSockWriteBuf *buf); -void UTIL_get_lang_msg(PCHAR key, PTInstVar pvar, PCHAR def); -int UTIL_get_lang_font(PCHAR key, HWND dlg, PLOGFONT logfont, HFONT *font, PTInstVar pvar); +#if defined(_UNICODE) +void UTIL_get_lang_msgW(const char *key, wchar_t *buf, size_t buf_len, const wchar_t *def, const char *iniFile); +#endif +void UTIL_get_lang_msgA(const char *key, char *buf, size_t buf_len, const char *def, const char *iniFile); +int UTIL_get_lang_font(const char *key, HWND dlg, PLOGFONTA logfont, HFONT *font, PTInstVar pvar); +void UTIL_get_lang_msg(const char *key, PTInstVar pvar, const char *def); + +#if defined(_UNICODE) +#define UTIL_get_lang_msgT(p1, p2, p3, p4, p5) UTIL_get_lang_msgW(p1, p2, p3, p4, p5) +#else +#define UTIL_get_lang_msgT(p1, p2, p3, p4, p5) UTIL_get_lang_msgA(p1, p2, p3, p4, p5) #endif + + +#endif