[Ttssh2-commit] [7317] ttssh unicode化 #1

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2018年 12月 11日 (火) 00:01:12 JST


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(&params) != 0) {
+	if (GetOpenFileNameA(&params) != 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\x82΁A\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\x82΁Adisabled 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\x82ƒT\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\x82ƒT\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\x82𓮓I\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(&params) != 0) {
+	if (GetOpenFileNameA(&params) != 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


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