[Ttssh2-commit] [7375] コードページからcharsetを調べて良さそうなフォントを選択

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2018年 12月 28日 (金) 00:31:40 JST


Revision: 7375
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7375
Author:   zmatsuo
Date:     2018-12-28 00:31:39 +0900 (Fri, 28 Dec 2018)
Log Message:
-----------
コードページからcharsetを調べて良さそうなフォントを選択

Modified Paths:
--------------
    branches/cmake/teraterm/common/dlglib.c
    branches/cmake/teraterm/common/dlglib.h
    branches/cmake/teraterm/common/dlglib_tmpl.cpp
    branches/cmake/teraterm/teraterm/teraterm.cpp
    branches/cmake/teraterm/ttpmacro/ttmacro.cpp
    branches/cmake/tests/test_file.ttl
    branches/cmake/ttssh2/ttxssh/ttxssh.c

Added Paths:
-----------
    branches/cmake/tests/test_file_utf8.ttl

-------------- next part --------------
Modified: branches/cmake/teraterm/common/dlglib.c
===================================================================
--- branches/cmake/teraterm/common/dlglib.c	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/teraterm/common/dlglib.c	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (C) 1994-1998 T. Teranishi
  * (C) 2008-2018 TeraTerm Project
  * All rights reserved.
@@ -30,7 +30,7 @@
 /* Routines for dialog boxes */
 #include "dlglib.h"
 
-#include "i18n.h"		// for MAX_UIMSG
+#include "i18n.h"
 #include <windows.h>
 #include <assert.h>
 #include <stdio.h>
@@ -125,8 +125,8 @@
 
 void SetDlgPercent(HWND HDlg, int id_Item, int id_Progress, LONG a, LONG b, int *p)
 {
-	// 20MB\x88ȏ\xE3\x82̃t\x83@\x83C\x83\x8B\x82\xF0\x83A\x83b\x83v\x83\x8D\x81[\x83h\x82\xB5\x82悤\x82Ƃ\xB7\x82\xE9\x82ƁAbuffer overflow\x82\xC5
-	// \x97\x8E\x82\xBF\x82\xE9\x96\xE2\x91\xE8\x82ւ̑Ώ\x88\x81B(2005.3.18 yutaka)
+	// 20MB以上のファイルをアップロードしようとすると、buffer overflowで
+	// 落ちる問題への対処。(2005.3.18 yutaka)
 	// cf. http://sourceforge.jp/tracker/index.php?func=detail&aid=5713&group_id=1412&atid=5333
 	double Num;
 	TCHAR NumStr[10];
@@ -228,11 +228,11 @@
 	BOOL ComboBox;
 } EditSubclassData;
 
-// C-n/C-p \x82̂\xBD\x82߂ɃT\x83u\x83N\x83\x89\x83X\x89\xBB (2007.9.4 maya)
-// 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-n/C-p のためにサブクラス化 (2007.9.4 maya)
+// C-p/C-n/C-b/C-f/C-a/C-e をサポート (2007.9.5 maya)
+// C-d/C-k をサポート (2007.10.3 yutaka)
+// ドロップダウンの中のエディットコントロールを
+// サブクラス化するためのウインドウプロシージャ
 static LRESULT CALLBACK HostnameEditProc(HWND dlg, UINT msg,
                                          WPARAM wParam, LPARAM lParam)
 {
@@ -244,7 +244,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) {
@@ -296,17 +296,17 @@
 						if (str != NULL) {
 							len = GetWindowTextA(dlg, str, (int)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 {
@@ -325,7 +325,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:
@@ -361,7 +361,7 @@
 	return Result;
 }
 
-// C-n/C-p \x82̂\xBD\x82߂ɃT\x83u\x83N\x83\x89\x83X\x89\xBB
+// C-n/C-p のためにサブクラス化
 void SetEditboxSubclass(HWND hDlg, int nID, BOOL ComboBox)
 {
 	EditSubclassData *data;
@@ -376,3 +376,205 @@
 	SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR)HostnameEditProc);
 	SetWindowLongPtr(hWndEdit, GWLP_USERDATA, (LONG_PTR)data);
 }
+
+typedef struct {
+	BOOL found;
+	const TCHAR *face;
+	BYTE charset;
+} IsExistFontInfo;
+
+int CALLBACK IsExistFontSub(
+	ENUMLOGFONT* lpelf, NEWTEXTMETRIC* lpntm,
+	int nFontType, LPARAM lParam)
+{
+	IsExistFontInfo *info = (IsExistFontInfo *)lParam;
+	(void)lpntm;
+	if (nFontType != DEVICE_FONTTYPE &&
+		_tcsicmp(lpelf->elfLogFont.lfFaceName, info->face) == 0 &&
+		lpelf->elfLogFont.lfCharSet == info->charset)
+	{
+		info->found = TRUE;
+		return 0;
+	}
+	return 1;
+}
+
+/**
+ *	フォントがインストールされているか調べる
+ */
+BOOL IsExistFont(const TCHAR *face, BYTE charset, BOOL strict)
+{
+	HDC hDC = GetDC(NULL);
+	LOGFONT lf;
+	IsExistFontInfo info;
+	(void)face;
+	(void)charset;
+	memset(&lf, 0, sizeof(lf));
+	lf.lfCharSet = strict ? DEFAULT_CHARSET : charset;
+	// ↑DEFAULT_CHARSETとするとフォントリンクも有効になるようだ
+	lf.lfPitchAndFamily = 0;
+	info.found = FALSE;
+	info.face = face;
+	info.charset = charset;
+	EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)IsExistFontSub, (LPARAM)&info, 0);
+	ReleaseDC(NULL, hDC);
+	return info.found;
+}
+
+/**
+ *	使用するCharSetを取得する
+ */
+DWORD GetCharSet()
+{
+	DWORD codepage;
+	CHARSETINFO charset_info;
+	BOOL result;
+
+#if 0
+	TCHAR codepage_str[16];
+	int ri = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE,
+						  (LPSTR)&codepage_str, _countof(codepage_str));
+	if (ri == 0) {
+		return 0;
+	}
+	codepage = _ttoi(codepage_str);
+#else
+	codepage = GetACP();
+#endif
+
+	result = TranslateCharsetInfo((DWORD *)codepage, &charset_info, TCI_SRCCODEPAGE);
+	assert(result == TRUE);
+	if (result == FALSE) {
+		return SHIFTJIS_CHARSET;
+	}
+
+	return charset_info.ciCharset;
+}
+
+/**
+ *	使用するダイアログフォントの候補
+ */
+typedef struct {
+	const TCHAR *face;
+	LONG height;
+} DialogFontLists;
+
+DWORD GetDialogFontCandidate(const DialogFontLists **candidate_list)
+{
+	DWORD char_set = GetCharSet();
+	switch (char_set) {
+	case SHIFTJIS_CHARSET: {
+		static const DialogFontLists list[] = {
+			{ _T("Yu Gothic UI"), -9 },
+			{ _T("Meiryo UI"), -9 }, 	// Vista以降
+			{ _T("MS UI Gothic"), -9 },	// 98以降
+			{ _T("MS ゴシック"), -9 },	// Windows 3.1以降
+			0
+		};
+		*candidate_list = list;
+		return char_set;
+	}
+	case HANGUL_CHARSET: {
+		// Korean
+		static const DialogFontLists list[] = {
+			{ _T("돋움"), -9 },
+			{ _T("굴림"), -10 },
+			0
+		};
+		*candidate_list = list;
+		return char_set;
+	}
+	case GB2312_CHARSET: {
+		// Simplified Chinese
+		static const DialogFontLists list[] = {
+			{ _T("微软雅黑") , -8 },
+			{ _T("微软雅黑") , -10 },
+			0
+		};
+		*candidate_list = list;
+		return char_set;
+	}
+	case CHINESEBIG5_CHARSET: {
+		// Traditional Chinese
+		static const DialogFontLists list[] = {
+			{ _T("細明體") , -8 },
+			{ _T("新細明體") , -10 },
+			0
+		};
+		*candidate_list = list;
+		return char_set;
+	}
+	default: {
+		static const DialogFontLists list[] = {
+			{ _T("Tahoma"), -8 },
+			0
+		};
+		*candidate_list = list;
+		return char_set;
+	}
+	}
+}
+
+/**
+ *	使用するダイアログフォントを決定する
+ */
+void SetDialogFont(const char *section, const char *UILanguageFile)
+{
+	// 明示的に指定されている場合はそれに従う
+	{
+		BOOL result = FALSE;
+		LOGFONTA logfont;
+		if (section != NULL) {
+			result = GetI18nLogfont(section, "DLG_FONT", &logfont, 72, UILanguageFile);
+		}
+		if (result == FALSE) {
+			result = GetI18nLogfont("Tera Term", "DLG_FONT", &logfont, 72, UILanguageFile);
+		}
+		if (result == TRUE) {
+#if defined(UNICODE)
+			wchar_t face[LF_FACESIZE];
+			mbstowcs(face, logfont.lfFaceName, LF_FACESIZE);		// TODO MultiByteToWideChar()を使う
+			if (IsExistFont(face, logfont.lfCharSet, FALSE)) {
+				TTSetDlgFontA(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
+				return;
+			}
+#else
+			if (IsExistFont(logfont.lfFaceName, logfont.lfCharSet, FALSE)) {
+				TTSetDlgFontA(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
+				return;
+			}
+#endif
+			// TODO フォントが見つからなかったときの処理
+			//	messagebox()出して下へ続くが妥当か?
+		}
+	}
+
+	// 実際に存在するフォントを使用する
+	{
+		DWORD charset;
+		const DialogFontLists *list;
+		charset = GetDialogFontCandidate(&list);
+		while(list->face != NULL) {
+			if (IsExistFont(list->face, charset, TRUE)) {
+				TTSetDlgFont(list->face, list->height, charset);
+				return;
+			}
+		}
+	}
+
+	// messageboxのフォントを選択
+	{
+		NONCLIENTMETRICS nci;
+		int st_size = CCSIZEOF_STRUCT(NONCLIENTMETRICS, lfMessageFont);
+		BOOL r;
+		const LOGFONT *logfont;
+
+		memset(&nci, 0, sizeof(nci));
+		nci.cbSize = st_size;
+		r = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, st_size, &nci, 0);
+		assert(r == TRUE);
+		logfont = &nci.lfStatusFont;
+
+		TTSetDlgFont(logfont->lfFaceName, /*logfont->lfHeight*/ -9, logfont->lfCharSet);
+	}
+}

Modified: branches/cmake/teraterm/common/dlglib.h
===================================================================
--- branches/cmake/teraterm/common/dlglib.h	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/teraterm/common/dlglib.h	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (C) 1994-1998 T. Teranishi
  * (C) 2005-2018 TeraTerm Project
  * All rights reserved.
@@ -58,8 +58,8 @@
 #endif
 
 ////////////////////////////////////////
-void TTSetDlgFont(const char *face, int height, int charset);
-//void TTSetDlgFont(const wchar_t *face, int height, int charset);
+void TTSetDlgFontA(const char *face, int height, int charset);
+void TTSetDlgFontW(const wchar_t *face, int height, int charset);
 const wchar_t *TTGetClassName(const DLGTEMPLATE *DlgTempl);
 DLGTEMPLATE *TTGetDlgTemplate(HINSTANCE hInst, LPCTSTR lpTemplateName);
 DLGTEMPLATE *TTGetNewDlgTemplate(
@@ -88,7 +88,14 @@
 	LPCTSTR lpTemplateName,
 	HWND hWndParent,
 	DLGPROC lpDialogFunc);
+void SetDialogFont(const char *section, const char *UILanguageFile);
 
+#if defined(_UNICODE)
+#define TTSetDlgFont(p1,p2,p3)	TTSetDlgFontW(p1,p2,p3)
+#else
+#define TTSetDlgFont(p1,p2,p3)	TTSetDlgFontA(p1,p2,p3)
+#endif
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/cmake/teraterm/common/dlglib_tmpl.cpp
===================================================================
--- branches/cmake/teraterm/common/dlglib_tmpl.cpp	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/teraterm/common/dlglib_tmpl.cpp	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,510 +1,510 @@
-/*
- * (C) 2005-2018 TeraTerm Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Routines for dialog boxes */
-
-#include "dlglib.h"
-
-#include <wchar.h>
-#include <assert.h>
-#include <crtdbg.h>
-
-#ifdef _DEBUG
-#define malloc(l) _malloc_dbg((l), _NORMAL_BLOCK, __FILE__, __LINE__)
-#define free(p)   _free_dbg((p), _NORMAL_BLOCK, __FILE__, __LINE__)
-#endif
-
-//#define	_countof(ary)	(sizeof(ary)/sizeof(ary[0]))
-
-// https://docs.microsoft.com/ja-jp/windows/desktop/dlgbox/dlgtemplateex
-// https://www.pg-fl.jp/program/tips/dlgmem.htm
-#pragma pack(push, 1)
-typedef struct
-{
-    WORD dlgVer;
-    WORD signature;
-    DWORD helpID;
-    DWORD exStyle;
-    DWORD style;
-    WORD cDlgItems;
-    short x;
-    short y;
-    short cx;
-    short cy;
-
-	// sz_Or_Ord menu;				// name or ordinal of a menu resource
-	// sz_Or_Ord windowClass;		// name or ordinal of a window class
-	// WCHAR title[N];
-	// WORD pointsize;				// only if DS_SETFONT is set
-	// WORD weight;					// only if DS_SETFONT is set
-    // BYTE italic;					// only if DS_SETFONT is set
-    // BYTE charset;				// only if DS_SETFONT is set
-	// WCHAR typeface[stringLen];	// only if DS_SETFONT is set
-
-	// PAD
-
-    // DLGITEMTEMPLATEEX controls[cDlgItems];
-} DLGTEMPLATEEX;
-
-typedef struct
-{
-    DWORD helpID;
-    DWORD exStyle;
-    DWORD style;
-    short x;
-    short y;
-    short cx;
-    short cy;
-    DWORD id;
-
-	// sz_Or_Ord windowClass;	// name or ordinal of a window class
-	// sz_Or_Ord title;			// title string or ordinal of a resource
-	// WORD extraCount;			// bytes following creation data
-} DLGITEMTEMPLATEEX;
-#pragma pack(pop)
-
-#if 0 // !defined(_MSC_VER)
-static inline errno_t wcscpy_s(
-	wchar_t *dest,
-	size_t dest_size,
-	const wchar_t *src)
-{
-	wcscpy(dest, src);
-	return 0;
-}
-#endif
-
-static size_t CopySz(const WORD *src, WORD *dest)
-{
-	size_t size = 0;
-	do {
-		if (dest != NULL) {
-			*dest++ = *src;
-		}
-		size++;
-	} while (*src++ != 0);
-	return size;
-}
-
-static size_t CopySzOrOrd(const WORD *src, WORD *dest)
-{
-	size_t size;
-	if (*src == 0x0000) {
-		// 0x0000 のとき、なにもない
-		if (dest != NULL) {
-			*dest = *src;
-		}
-		size = 1;
-	} else if (*src == 0xffff) {
-		// 0xffff のとき、1WORDのデータ
-		if (dest != NULL) {
-			*dest++ = *src++;
-			*dest++ = *src++;
-		}
-		size = 2;
-	} else {
-		// 以外はwchar_tの文字列
-		return CopySz(src, dest);
-	}
-	return size;
-}
-
-static size_t CopyDlgItem(const WORD *src, WORD *dest)
-{
-	size_t size = sizeof(DLGITEMTEMPLATE) / sizeof(WORD);
-	if (dest != NULL) {
-		*(DLGITEMTEMPLATE *)dest = *(DLGITEMTEMPLATE *)src;
-		dest += size;
-	}
-	src += size;
-
-	size_t t;
-	t = CopySzOrOrd(src, dest);		// windowClass
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySzOrOrd(src, dest);		// title
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	const WORD extraCount = *src++;
-	size++;
-	if (dest != NULL) {
-		*dest++ = extraCount;
-	}
-	if (extraCount != 0) {
-		size += extraCount;
-		if (dest != NULL) {
-			memcpy(dest, src, extraCount * sizeof(WORD));
-			dest += extraCount;
-		}
-		src += extraCount;
-	}
-	
-	size = (size + 1) & ~1;
-	return size;
-}
-
-/**
- *	drc		ダイアログリソースへのポインタ
- *	dest	コピー先(NULLのときコピーしない)
- *	logfont	設定するフォント情報(ただし、dest_vがNULLの時は取得)
- *			NULLのとき設定,取得しない
- */
-static size_t CopyDlgTemplate(
-	const WORD *src_v,
-	WORD *dest_v,
-	LOGFONTW *logfont)
-{
-	const WORD *src = (const WORD *)src_v;
-	WORD *dest = (WORD *)dest_v;
-	size_t size = sizeof(DLGTEMPLATE) / sizeof(WORD);
-	const DLGTEMPLATE *dlg = (DLGTEMPLATE *)src;
-	if (dest != NULL) {
-		*(DLGTEMPLATE *)dest = *dlg;
-		dest += size;
-	}
-	src += size;
-
-	size_t t;
-	t = CopySzOrOrd(src, dest);	// menu
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySzOrOrd(src, dest);	// windowClass
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySz(src, dest);		// title
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	size_t dsize = 0;
-	if (dlg->style & DS_SETFONT) {
-		if (dest == NULL) {
-			// 取得
-			if (logfont != NULL) {
-				memset(logfont, 0, sizeof(*logfont));
-				logfont->lfHeight = -(*src++);
-				t = CopySz(src, (WORD *)(&logfont->lfFaceName[0]));
-			} else {
-				src++;
-				t = CopySz(src, NULL);
-			}
-			size += t + 1;
-		} else {
-			// セット
-			if (logfont != NULL) {
-				*dest++ = (WORD)(-logfont->lfHeight);
-				src += 1;
-				t = CopySz((WORD *)(&logfont->lfFaceName[0]), dest);
-				dest += t;
-				dsize = size + t + 1;
-				t = CopySz(src, NULL);
-				size += t + 1;
-			} else {
-				*dest++ = *src++;
-				t = CopySz(src, dest);
-				size += t + 1;
-				dsize = size;
-			}
-		}
-	}
-
-	size = (size + 1) & ~1;
-	src = ((const WORD *)src_v) + size;
-	if (dest != NULL) {
-		dsize = (dsize + 1) & ~1;
-		dest = ((WORD *)dest_v) + dsize;
-		size = dsize;
-	}
-	for (int i = 0; i < dlg->cdit; i++) {
-		t = CopyDlgItem(src, dest);
-		src += t; if (dest != NULL) dest += t;
-		size += t;
-	}
-
-	return size * sizeof(WORD);
-}
-
-static size_t CopyDlgItemEx(const WORD *src, WORD *dest)
-{
-	size_t size = sizeof(DLGITEMTEMPLATEEX) / sizeof(WORD);
-	if (dest != NULL) {
-		*(DLGITEMTEMPLATEEX *)dest = *(DLGITEMTEMPLATEEX *)src;
-		dest += size;
-	}
-	src += size;
-
-	size_t t;
-	t = CopySzOrOrd(src, dest);		// windowClass
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySzOrOrd(src, dest);		// title
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	const WORD extraCount = *src++;
-	size++;
-	if (dest != NULL) {
-		*dest++ = extraCount;
-	}
-	if (extraCount != 0) {
-		size += extraCount;
-		if (dest != NULL) {
-			memcpy(dest, src, extraCount * sizeof(WORD));
-			dest += extraCount;
-		}
-		src += extraCount;
-	}
-	
-	size = (size + 1) & ~1;
-	return size;
-}
-
-/**
- *	drc_v	ダイアログリソースへのポインタ
- *	dest_v	コピー先(NULLのときコピーしない)
- *	logfont	設定するフォント情報(ただし、dest_vがNULLの時は取得)
- *			NULLのとき設定,取得しない
- */
-static size_t CopyDlgTemplateEx(
-	const DLGTEMPLATE *src_v,
-	DLGTEMPLATE *dest_v,
-	LOGFONTW *logfont)
-{
-	const WORD *src = (const WORD *)src_v;
-	WORD *dest = (WORD *)dest_v;
-	if (*src != 1) {
-		return CopyDlgTemplate(src, dest, logfont);
-	}
-	// version 1
-	size_t size = sizeof(DLGTEMPLATEEX) / sizeof(WORD);
-	const DLGTEMPLATEEX *dlg = (DLGTEMPLATEEX *)src;
-	if (dest != NULL) {
-		*(DLGTEMPLATEEX *)dest = *dlg;
-		dest += size;
-	}
-	src += size;
-
-	size_t t;
-	t = CopySzOrOrd(src, dest);	// menu
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySzOrOrd(src, dest);	// windowClass
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	t = CopySz(src, dest);		// title
-	size += t;
-	src += t; if (dest != NULL) dest += t;
-	size_t dsize = 0;
-	if (dlg->style & DS_SETFONT) {
-		if (dest == NULL) {
-			// 取得
-			if (logfont != NULL) {
-				memset(logfont, 0, sizeof(*logfont));
-				logfont->lfHeight = -(*src++);
-				logfont->lfWeight = *src++;
-				logfont->lfItalic = *((BYTE *)src);
-				logfont->lfCharSet = *(((BYTE *)src)+1);
-				src++;
-				t = CopySz(src, (WORD *)(&logfont->lfFaceName[0]));
-			} else {
-				src++;
-				src++;
-				src++;
-				t = CopySz(src, NULL);
-			}
-			size += t + 3;
-		} else {
-			// セット
-			if (logfont != NULL) {
-				*dest++ = (WORD)(-logfont->lfHeight);
-				*dest++ = (WORD)logfont->lfWeight;
-				*((BYTE *)dest) = logfont->lfItalic;
-				*(((BYTE *)dest)+1) = logfont->lfCharSet;
-				dest++;
-				src += 3;
-				t = CopySz((WORD *)(&logfont->lfFaceName[0]), dest);
-				dest += t;
-				dsize = size + t + 3;
-				t = CopySz(src, NULL);
-				size += t + 3;
-			} else {
-				*dest++ = *src++;
-				*dest++ = *src++;
-				*dest++ = *src++;
-				t = CopySz(src, dest);
-				size += t + 3;
-				dsize = size;
-			}
-		}
-	}
-
-	size = (size + 1) & ~1;
-	src = ((const WORD *)src_v) + size;
-	if (dest != NULL) {
-		dsize = (dsize + 1) & ~1;
-		dest = ((WORD *)dest_v) + dsize;
-		size = dsize;
-	}
-	for (int i = 0; i < dlg->cDlgItems; i++) {
-		t = CopyDlgItemEx(src, dest);
-		src += t; if (dest != NULL) dest += t;
-		size += t;
-	}
-
-	return size * sizeof(WORD);
-}
-
-static DLGTEMPLATE *GetDlgTemplate(
-	const DLGTEMPLATE *src,
-	const WCHAR *FontFaceName, LONG FontHeight, BYTE FontCharSet,
-	size_t *PrevTemplSize, size_t *NewTemplSize)
-{
-	LOGFONTW logfont;
-	const size_t prev_size = CopyDlgTemplateEx(src, NULL, &logfont);
-	DLGTEMPLATE *dest;
-	size_t new_size = 0;
-	if (FontFaceName == NULL || FontFaceName[0] == '\0') {
-		// simple copy
-		dest = (DLGTEMPLATE *)malloc(prev_size);
-		CopyDlgTemplateEx(src, dest, NULL);
-		new_size = prev_size;
-	} else {
-		// copy with replacing font
-		size_t size_namediff =
-			wcslen(FontFaceName) - wcslen(logfont.lfFaceName);
-		size_namediff *= sizeof(WCHAR);
-		size_namediff += 3;		// テキスト、フォント名長でalignが変化する
-		size_t new_size_forcast = prev_size + size_namediff;
-		new_size_forcast = (new_size_forcast + 3) & ~3;
-		dest = (DLGTEMPLATE *)malloc(new_size_forcast);
-		logfont.lfCharSet = FontCharSet;
-		logfont.lfHeight = FontHeight;
-		wcscpy_s(logfont.lfFaceName, _countof(logfont.lfFaceName),
-				 FontFaceName);
-		new_size = CopyDlgTemplateEx(src, dest, &logfont);
-		assert(new_size <= new_size_forcast);
-	}
-
-	if (PrevTemplSize != NULL) {
-		*PrevTemplSize = prev_size;
-	}
-	if (NewTemplSize != NULL) {
-		*NewTemplSize = new_size;
-	}
-	return dest;
-}
-
-static DLGTEMPLATE *GetDlgTemplate(
-	HINSTANCE hInst, LPCTSTR lpTemplateName,
-	const WCHAR *FontFaceName, LONG FontHeight, BYTE FontCharSet,
-	size_t *PrevTemplSize, size_t *NewTemplSize)
-{
-	HRSRC hResource = ::FindResource(hInst, lpTemplateName, RT_DIALOG);
-	assert(hResource != NULL);
-	HANDLE hDlgTemplate = ::LoadResource(hInst, hResource);
-	const DLGTEMPLATE *src = (DLGTEMPLATE *)::LockResource(hDlgTemplate);
-
-	DLGTEMPLATE *dest = GetDlgTemplate(
-		src,
-		FontFaceName, FontHeight, FontCharSet,
-		PrevTemplSize, NewTemplSize);
-
-	::FreeResource(hDlgTemplate);
-
-	return dest;
-}
-
-static wchar_t FontFaceName[LF_FACESIZE];
-static LONG FontHeight;
-static BYTE FontCharSet;
-
-void TTSetDlgFont(const wchar_t *face, int height, int charset)
-{
-	if (face != NULL) {
-		wcscpy_s(FontFaceName, face);
-	} else {
-		FontFaceName[0] = L'\0';
-	}
-	FontHeight = height;
-	FontCharSet = (BYTE)charset;
-}
-
-void TTSetDlgFont(const char *face, int height, int charset)
-{
-	if (face != NULL) {
-		mbstowcs(FontFaceName, face, LF_FACESIZE);		// TODO MultiByteToWideChar()を使う
-	} else {
-		FontFaceName[0] = L'\0';
-	}
-	FontHeight = height;
-	FontCharSet = (BYTE)charset;
-}
-
-DLGTEMPLATE *TTGetNewDlgTemplate(
-	HINSTANCE hInst, const DLGTEMPLATE *src,
-	size_t *PrevTemplSize, size_t *NewTemplSize)
-{
-	(void)hInst;
-	DLGTEMPLATE *DlgTemplate =
-		GetDlgTemplate(src,
-					   FontFaceName, FontHeight, FontCharSet,
-					   PrevTemplSize, NewTemplSize);
-
-	return DlgTemplate;
-}
-
-DLGTEMPLATE *TTGetDlgTemplate(HINSTANCE hInst, LPCTSTR lpTemplateName)
-{
-	DLGTEMPLATE *DlgTemplate =
-		GetDlgTemplate(hInst, lpTemplateName,
-					   FontFaceName, FontHeight, FontCharSet,
-					   NULL, NULL);
-	return DlgTemplate;
-}
-
-/*
- *	ダイアログテンプレートのクラス名取得
- *	@retval		クラス文字列
- *	@retval		NULL クラスなし
- */
-const wchar_t *TTGetClassName(const DLGTEMPLATE *DlgTempl)
-{
-	const WORD *src = (const WORD *)DlgTempl;
-	if (*src != 1) {
-		// DLGTEMPLATE
-		src += sizeof(DLGTEMPLATE) / sizeof(WORD);
-	} else {
-		// DLGTEMPLATEEX
-		src += sizeof(DLGTEMPLATEEX) / sizeof(WORD);
-	}
-	size_t t = CopySzOrOrd(src, NULL);	// menu
-	src += t;
-
-	if (*src == L'\0') {
-		// no class name
-		return NULL;
-	}
-	return (wchar_t *)src;
-}
+/*
+ * (C) 2005-2018 TeraTerm Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Routines for dialog boxes */
+
+#include "dlglib.h"
+
+#include <wchar.h>
+#include <assert.h>
+#include <crtdbg.h>
+
+#ifdef _DEBUG
+#define malloc(l) _malloc_dbg((l), _NORMAL_BLOCK, __FILE__, __LINE__)
+#define free(p)   _free_dbg((p), _NORMAL_BLOCK, __FILE__, __LINE__)
+#endif
+
+//#define	_countof(ary)	(sizeof(ary)/sizeof(ary[0]))
+
+// https://docs.microsoft.com/ja-jp/windows/desktop/dlgbox/dlgtemplateex
+// https://www.pg-fl.jp/program/tips/dlgmem.htm
+#pragma pack(push, 1)
+typedef struct
+{
+    WORD dlgVer;
+    WORD signature;
+    DWORD helpID;
+    DWORD exStyle;
+    DWORD style;
+    WORD cDlgItems;
+    short x;
+    short y;
+    short cx;
+    short cy;
+
+	// sz_Or_Ord menu;				// name or ordinal of a menu resource
+	// sz_Or_Ord windowClass;		// name or ordinal of a window class
+	// WCHAR title[N];
+	// WORD pointsize;				// only if DS_SETFONT is set
+	// WORD weight;					// only if DS_SETFONT is set
+    // BYTE italic;					// only if DS_SETFONT is set
+    // BYTE charset;				// only if DS_SETFONT is set
+	// WCHAR typeface[stringLen];	// only if DS_SETFONT is set
+
+	// PAD
+
+    // DLGITEMTEMPLATEEX controls[cDlgItems];
+} DLGTEMPLATEEX;
+
+typedef struct
+{
+    DWORD helpID;
+    DWORD exStyle;
+    DWORD style;
+    short x;
+    short y;
+    short cx;
+    short cy;
+    DWORD id;
+
+	// sz_Or_Ord windowClass;	// name or ordinal of a window class
+	// sz_Or_Ord title;			// title string or ordinal of a resource
+	// WORD extraCount;			// bytes following creation data
+} DLGITEMTEMPLATEEX;
+#pragma pack(pop)
+
+#if 0 // !defined(_MSC_VER)
+static inline errno_t wcscpy_s(
+	wchar_t *dest,
+	size_t dest_size,
+	const wchar_t *src)
+{
+	wcscpy(dest, src);
+	return 0;
+}
+#endif
+
+static size_t CopySz(const WORD *src, WORD *dest)
+{
+	size_t size = 0;
+	do {
+		if (dest != NULL) {
+			*dest++ = *src;
+		}
+		size++;
+	} while (*src++ != 0);
+	return size;
+}
+
+static size_t CopySzOrOrd(const WORD *src, WORD *dest)
+{
+	size_t size;
+	if (*src == 0x0000) {
+		// 0x0000 \x82̂Ƃ\xAB\x81A\x82Ȃɂ\xE0\x82Ȃ\xA2
+		if (dest != NULL) {
+			*dest = *src;
+		}
+		size = 1;
+	} else if (*src == 0xffff) {
+		// 0xffff \x82̂Ƃ\xAB\x81A1WORD\x82̃f\x81[\x83^
+		if (dest != NULL) {
+			*dest++ = *src++;
+			*dest++ = *src++;
+		}
+		size = 2;
+	} else {
+		// \x88ȊO\x82\xCDwchar_t\x82̕\xB6\x8E\x9A\x97\xF1
+		return CopySz(src, dest);
+	}
+	return size;
+}
+
+static size_t CopyDlgItem(const WORD *src, WORD *dest)
+{
+	size_t size = sizeof(DLGITEMTEMPLATE) / sizeof(WORD);
+	if (dest != NULL) {
+		*(DLGITEMTEMPLATE *)dest = *(DLGITEMTEMPLATE *)src;
+		dest += size;
+	}
+	src += size;
+
+	size_t t;
+	t = CopySzOrOrd(src, dest);		// windowClass
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySzOrOrd(src, dest);		// title
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	const WORD extraCount = *src++;
+	size++;
+	if (dest != NULL) {
+		*dest++ = extraCount;
+	}
+	if (extraCount != 0) {
+		size += extraCount;
+		if (dest != NULL) {
+			memcpy(dest, src, extraCount * sizeof(WORD));
+			dest += extraCount;
+		}
+		src += extraCount;
+	}
+	
+	size = (size + 1) & ~1;
+	return size;
+}
+
+/**
+ *	drc		\x83_\x83C\x83A\x83\x8D\x83O\x83\x8A\x83\\x81[\x83X\x82ւ̃|\x83C\x83\x93\x83^
+ *	dest	\x83R\x83s\x81[\x90\xE6(NULL\x82̂Ƃ\xAB\x83R\x83s\x81[\x82\xB5\x82Ȃ\xA2)
+ *	logfont	\x90ݒ肷\x82\xE9\x83t\x83H\x83\x93\x83g\x8F\xEE\x95\xF1(\x82\xBD\x82\xBE\x82\xB5\x81Adest_v\x82\xAANULL\x82̎\x9E\x82͎擾)
+ *			NULL\x82̂Ƃ\xAB\x90ݒ\xE8,\x8E擾\x82\xB5\x82Ȃ\xA2
+ */
+static size_t CopyDlgTemplate(
+	const WORD *src_v,
+	WORD *dest_v,
+	LOGFONTW *logfont)
+{
+	const WORD *src = (const WORD *)src_v;
+	WORD *dest = (WORD *)dest_v;
+	size_t size = sizeof(DLGTEMPLATE) / sizeof(WORD);
+	const DLGTEMPLATE *dlg = (DLGTEMPLATE *)src;
+	if (dest != NULL) {
+		*(DLGTEMPLATE *)dest = *dlg;
+		dest += size;
+	}
+	src += size;
+
+	size_t t;
+	t = CopySzOrOrd(src, dest);	// menu
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySzOrOrd(src, dest);	// windowClass
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySz(src, dest);		// title
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	size_t dsize = 0;
+	if (dlg->style & DS_SETFONT) {
+		if (dest == NULL) {
+			// \x8E擾
+			if (logfont != NULL) {
+				memset(logfont, 0, sizeof(*logfont));
+				logfont->lfHeight = -(*src++);
+				t = CopySz(src, (WORD *)(&logfont->lfFaceName[0]));
+			} else {
+				src++;
+				t = CopySz(src, NULL);
+			}
+			size += t + 1;
+		} else {
+			// \x83Z\x83b\x83g
+			if (logfont != NULL) {
+				*dest++ = (WORD)(-logfont->lfHeight);
+				src += 1;
+				t = CopySz((WORD *)(&logfont->lfFaceName[0]), dest);
+				dest += t;
+				dsize = size + t + 1;
+				t = CopySz(src, NULL);
+				size += t + 1;
+			} else {
+				*dest++ = *src++;
+				t = CopySz(src, dest);
+				size += t + 1;
+				dsize = size;
+			}
+		}
+	}
+
+	size = (size + 1) & ~1;
+	src = ((const WORD *)src_v) + size;
+	if (dest != NULL) {
+		dsize = (dsize + 1) & ~1;
+		dest = ((WORD *)dest_v) + dsize;
+		size = dsize;
+	}
+	for (int i = 0; i < dlg->cdit; i++) {
+		t = CopyDlgItem(src, dest);
+		src += t; if (dest != NULL) dest += t;
+		size += t;
+	}
+
+	return size * sizeof(WORD);
+}
+
+static size_t CopyDlgItemEx(const WORD *src, WORD *dest)
+{
+	size_t size = sizeof(DLGITEMTEMPLATEEX) / sizeof(WORD);
+	if (dest != NULL) {
+		*(DLGITEMTEMPLATEEX *)dest = *(DLGITEMTEMPLATEEX *)src;
+		dest += size;
+	}
+	src += size;
+
+	size_t t;
+	t = CopySzOrOrd(src, dest);		// windowClass
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySzOrOrd(src, dest);		// title
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	const WORD extraCount = *src++;
+	size++;
+	if (dest != NULL) {
+		*dest++ = extraCount;
+	}
+	if (extraCount != 0) {
+		size += extraCount;
+		if (dest != NULL) {
+			memcpy(dest, src, extraCount * sizeof(WORD));
+			dest += extraCount;
+		}
+		src += extraCount;
+	}
+	
+	size = (size + 1) & ~1;
+	return size;
+}
+
+/**
+ *	drc_v	\x83_\x83C\x83A\x83\x8D\x83O\x83\x8A\x83\\x81[\x83X\x82ւ̃|\x83C\x83\x93\x83^
+ *	dest_v	\x83R\x83s\x81[\x90\xE6(NULL\x82̂Ƃ\xAB\x83R\x83s\x81[\x82\xB5\x82Ȃ\xA2)
+ *	logfont	\x90ݒ肷\x82\xE9\x83t\x83H\x83\x93\x83g\x8F\xEE\x95\xF1(\x82\xBD\x82\xBE\x82\xB5\x81Adest_v\x82\xAANULL\x82̎\x9E\x82͎擾)
+ *			NULL\x82̂Ƃ\xAB\x90ݒ\xE8,\x8E擾\x82\xB5\x82Ȃ\xA2
+ */
+static size_t CopyDlgTemplateEx(
+	const DLGTEMPLATE *src_v,
+	DLGTEMPLATE *dest_v,
+	LOGFONTW *logfont)
+{
+	const WORD *src = (const WORD *)src_v;
+	WORD *dest = (WORD *)dest_v;
+	if (*src != 1) {
+		return CopyDlgTemplate(src, dest, logfont);
+	}
+	// version 1
+	size_t size = sizeof(DLGTEMPLATEEX) / sizeof(WORD);
+	const DLGTEMPLATEEX *dlg = (DLGTEMPLATEEX *)src;
+	if (dest != NULL) {
+		*(DLGTEMPLATEEX *)dest = *dlg;
+		dest += size;
+	}
+	src += size;
+
+	size_t t;
+	t = CopySzOrOrd(src, dest);	// menu
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySzOrOrd(src, dest);	// windowClass
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	t = CopySz(src, dest);		// title
+	size += t;
+	src += t; if (dest != NULL) dest += t;
+	size_t dsize = 0;
+	if (dlg->style & DS_SETFONT) {
+		if (dest == NULL) {
+			// \x8E擾
+			if (logfont != NULL) {
+				memset(logfont, 0, sizeof(*logfont));
+				logfont->lfHeight = -(*src++);
+				logfont->lfWeight = *src++;
+				logfont->lfItalic = *((BYTE *)src);
+				logfont->lfCharSet = *(((BYTE *)src)+1);
+				src++;
+				t = CopySz(src, (WORD *)(&logfont->lfFaceName[0]));
+			} else {
+				src++;
+				src++;
+				src++;
+				t = CopySz(src, NULL);
+			}
+			size += t + 3;
+		} else {
+			// \x83Z\x83b\x83g
+			if (logfont != NULL) {
+				*dest++ = (WORD)(-logfont->lfHeight);
+				*dest++ = (WORD)logfont->lfWeight;
+				*((BYTE *)dest) = logfont->lfItalic;
+				*(((BYTE *)dest)+1) = logfont->lfCharSet;
+				dest++;
+				src += 3;
+				t = CopySz((WORD *)(&logfont->lfFaceName[0]), dest);
+				dest += t;
+				dsize = size + t + 3;
+				t = CopySz(src, NULL);
+				size += t + 3;
+			} else {
+				*dest++ = *src++;
+				*dest++ = *src++;
+				*dest++ = *src++;
+				t = CopySz(src, dest);
+				size += t + 3;
+				dsize = size;
+			}
+		}
+	}
+
+	size = (size + 1) & ~1;
+	src = ((const WORD *)src_v) + size;
+	if (dest != NULL) {
+		dsize = (dsize + 1) & ~1;
+		dest = ((WORD *)dest_v) + dsize;
+		size = dsize;
+	}
+	for (int i = 0; i < dlg->cDlgItems; i++) {
+		t = CopyDlgItemEx(src, dest);
+		src += t; if (dest != NULL) dest += t;
+		size += t;
+	}
+
+	return size * sizeof(WORD);
+}
+
+static DLGTEMPLATE *GetDlgTemplate(
+	const DLGTEMPLATE *src,
+	const WCHAR *FontFaceName, LONG FontHeight, BYTE FontCharSet,
+	size_t *PrevTemplSize, size_t *NewTemplSize)
+{
+	LOGFONTW logfont;
+	const size_t prev_size = CopyDlgTemplateEx(src, NULL, &logfont);
+	DLGTEMPLATE *dest;
+	size_t new_size = 0;
+	if (FontFaceName == NULL || FontFaceName[0] == '\0') {
+		// simple copy
+		dest = (DLGTEMPLATE *)malloc(prev_size);
+		CopyDlgTemplateEx(src, dest, NULL);
+		new_size = prev_size;
+	} else {
+		// copy with replacing font
+		size_t size_namediff =
+			wcslen(FontFaceName) - wcslen(logfont.lfFaceName);
+		size_namediff *= sizeof(WCHAR);
+		size_namediff += 3;		// \x83e\x83L\x83X\x83g\x81A\x83t\x83H\x83\x93\x83g\x96\xBC\x92\xB7\x82\xC5align\x82\xAA\x95ω\xBB\x82\xB7\x82\xE9
+		size_t new_size_forcast = prev_size + size_namediff;
+		new_size_forcast = (new_size_forcast + 3) & ~3;
+		dest = (DLGTEMPLATE *)malloc(new_size_forcast);
+		logfont.lfCharSet = FontCharSet;
+		logfont.lfHeight = FontHeight;
+		wcscpy_s(logfont.lfFaceName, _countof(logfont.lfFaceName),
+				 FontFaceName);
+		new_size = CopyDlgTemplateEx(src, dest, &logfont);
+		assert(new_size <= new_size_forcast);
+	}
+
+	if (PrevTemplSize != NULL) {
+		*PrevTemplSize = prev_size;
+	}
+	if (NewTemplSize != NULL) {
+		*NewTemplSize = new_size;
+	}
+	return dest;
+}
+
+static DLGTEMPLATE *GetDlgTemplate(
+	HINSTANCE hInst, LPCTSTR lpTemplateName,
+	const WCHAR *FontFaceName, LONG FontHeight, BYTE FontCharSet,
+	size_t *PrevTemplSize, size_t *NewTemplSize)
+{
+	HRSRC hResource = ::FindResource(hInst, lpTemplateName, RT_DIALOG);
+	assert(hResource != NULL);
+	HANDLE hDlgTemplate = ::LoadResource(hInst, hResource);
+	const DLGTEMPLATE *src = (DLGTEMPLATE *)::LockResource(hDlgTemplate);
+
+	DLGTEMPLATE *dest = GetDlgTemplate(
+		src,
+		FontFaceName, FontHeight, FontCharSet,
+		PrevTemplSize, NewTemplSize);
+
+	::FreeResource(hDlgTemplate);
+
+	return dest;
+}
+
+static wchar_t FontFaceName[LF_FACESIZE];
+static LONG FontHeight;
+static BYTE FontCharSet;
+
+void TTSetDlgFontW(const wchar_t *face, int height, int charset)
+{
+	if (face != NULL) {
+		wcscpy_s(FontFaceName, face);
+	} else {
+		FontFaceName[0] = L'\0';
+	}
+	FontHeight = height;
+	FontCharSet = (BYTE)charset;
+}
+
+void TTSetDlgFontA(const char *face, int height, int charset)
+{
+	if (face != NULL) {
+		mbstowcs(FontFaceName, face, LF_FACESIZE);		// TODO MultiByteToWideChar()\x82\xF0\x8Eg\x82\xA4
+	} else {
+		FontFaceName[0] = L'\0';
+	}
+	FontHeight = height;
+	FontCharSet = (BYTE)charset;
+}
+
+DLGTEMPLATE *TTGetNewDlgTemplate(
+	HINSTANCE hInst, const DLGTEMPLATE *src,
+	size_t *PrevTemplSize, size_t *NewTemplSize)
+{
+	(void)hInst;
+	DLGTEMPLATE *DlgTemplate =
+		GetDlgTemplate(src,
+					   FontFaceName, FontHeight, FontCharSet,
+					   PrevTemplSize, NewTemplSize);
+
+	return DlgTemplate;
+}
+
+DLGTEMPLATE *TTGetDlgTemplate(HINSTANCE hInst, LPCTSTR lpTemplateName)
+{
+	DLGTEMPLATE *DlgTemplate =
+		GetDlgTemplate(hInst, lpTemplateName,
+					   FontFaceName, FontHeight, FontCharSet,
+					   NULL, NULL);
+	return DlgTemplate;
+}
+
+/*
+ *	\x83_\x83C\x83A\x83\x8D\x83O\x83e\x83\x93\x83v\x83\x8C\x81[\x83g\x82̃N\x83\x89\x83X\x96\xBC\x8E擾
+ *	@retval		\x83N\x83\x89\x83X\x95\xB6\x8E\x9A\x97\xF1
+ *	@retval		NULL \x83N\x83\x89\x83X\x82Ȃ\xB5
+ */
+const wchar_t *TTGetClassName(const DLGTEMPLATE *DlgTempl)
+{
+	const WORD *src = (const WORD *)DlgTempl;
+	if (*src != 1) {
+		// DLGTEMPLATE
+		src += sizeof(DLGTEMPLATE) / sizeof(WORD);
+	} else {
+		// DLGTEMPLATEEX
+		src += sizeof(DLGTEMPLATEEX) / sizeof(WORD);
+	}
+	size_t t = CopySzOrOrd(src, NULL);	// menu
+	src += t;
+
+	if (*src == L'\0') {
+		// no class name
+		return NULL;
+	}
+	return (wchar_t *)src;
+}

Modified: branches/cmake/teraterm/teraterm/teraterm.cpp
===================================================================
--- branches/cmake/teraterm/teraterm/teraterm.cpp	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/teraterm/teraterm/teraterm.cpp	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (C) 1994-1998 T. Teranishi
  * (C) 2006-2018 TeraTerm Project
  * All rights reserved.
@@ -61,12 +61,12 @@
 
 	if ((module = GetModuleHandleA("kernel32.dll")) != NULL) {
 		if ((setDefDllDir = (pSetDefDllDir)GetProcAddress(module, "SetDefaultDllDirectories")) != NULL) {
-			// SetDefaultDllDirectories() が使える場合は、検索パスを %WINDOWS%\system32 のみに設定する
+			// SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82́A\x8C\x9F\x8D\xF5\x83p\x83X\x82\xF0 %WINDOWS%\system32 \x82݂̂ɐݒ肷\x82\xE9
 			(*setDefDllDir)((DWORD)0x00000800); // LOAD_LIBRARY_SEARCH_SYSTEM32
 		}
 		else if ((setDllDir = (pSetDllDir)GetProcAddress(module, "SetDllDirectoryA")) != NULL) {
-			// SetDefaultDllDirectories() が使えなくても、SetDllDirectory() が使える場合は
-			// カレントディレクトリだけでも検索パスからはずしておく。
+			// SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82Ȃ\xAD\x82Ă\xE0\x81ASetDllDirectory() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82\xCD
+			// \x83J\x83\x8C\x83\x93\x83g\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82\xBE\x82\xAF\x82ł\xE0\x8C\x9F\x8D\xF5\x83p\x83X\x82\xA9\x82\xE7\x82͂\xB8\x82\xB5\x82Ă\xA8\x82\xAD\x81B
 			(*setDllDir)("");
 		}
 	}
@@ -116,9 +116,9 @@
 				switch (ActiveWin) {
 				case IdVT:
 					Change =  ((CVTWindow*)pVTWin)->Parse();
-					// TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
-					// 現象への暫定対処。(2006.2.6 yutaka)
-					// 待ち時間をなくし、コンテキストスイッチだけにする。(2006.3.20 yutaka)
+					// TEK window\x82̃A\x83N\x83e\x83B\x83u\x92\x86\x82\xC9 pause \x82\xF0\x8Eg\x82\xA4\x82ƁACPU\x8Eg\x97p\x97\xA6100%\x82ƂȂ\xE9
+					// \x8C\xBB\x8Fۂւ̎b\x92\xE8\x91Ώ\x88\x81B(2006.2.6 yutaka)
+					// \x91҂\xBF\x8E\x9E\x8AԂ\xF0\x82Ȃ\xAD\x82\xB5\x81A\x83R\x83\x93\x83e\x83L\x83X\x83g\x83X\x83C\x83b\x83`\x82\xBE\x82\xAF\x82ɂ\xB7\x82\xE9\x81B(2006.3.20 yutaka)
 					Sleep(0);
 					break;
 
@@ -125,8 +125,8 @@
 				case IdTEK:
 					if (pTEKWin != NULL) {
 						Change = ((CTEKWindow*)pTEKWin)->Parse();
-						// TEK windowのアクティブ中に pause を使うと、CPU使用率100%となる
-						// 現象への暫定対処。(2006.2.6 yutaka)
+						// TEK window\x82̃A\x83N\x83e\x83B\x83u\x92\x86\x82\xC9 pause \x82\xF0\x8Eg\x82\xA4\x82ƁACPU\x8Eg\x97p\x97\xA6100%\x82ƂȂ\xE9
+						// \x8C\xBB\x8Fۂւ̎b\x92\xE8\x91Ώ\x88\x81B(2006.2.6 yutaka)
 						Sleep(1);
 					}
 					else {
@@ -182,10 +182,10 @@
 
 		/* Receiver */
 		if (DDELog && cv.DCount >0) {
-			// ログバッファがまだDDEクライアントへ送られていない場合は、
-			// TCPパケットの受信を行わない。
-			// 連続して受信を行うと、ログバッファがラウンドロビンにより未送信のデータを
-			// 上書きしてしまう可能性がある。(2007.6.14 yutaka)
+			// \x83\x8D\x83O\x83o\x83b\x83t\x83@\x82\xAA\x82܂\xBEDDE\x83N\x83\x89\x83C\x83A\x83\x93\x83g\x82֑\x97\x82\xE7\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ\x82́A
+			// TCP\x83p\x83P\x83b\x83g\x82̎\xF3\x90M\x82\xF0\x8Ds\x82\xED\x82Ȃ\xA2\x81B
+			// \x98A\x91\xB1\x82\xB5\x82Ď\xF3\x90M\x82\xF0\x8Ds\x82\xA4\x82ƁA\x83\x8D\x83O\x83o\x83b\x83t\x83@\x82\xAA\x83\x89\x83E\x83\x93\x83h\x83\x8D\x83r\x83\x93\x82ɂ\xE6\x82薢\x91\x97\x90M\x82̃f\x81[\x83^\x82\xF0
+			// \x8F㏑\x82\xAB\x82\xB5\x82Ă\xB5\x82܂\xA4\x89”\\x90\xAB\x82\xAA\x82\xA0\x82\xE9\x81B(2007.6.14 yutaka)
 
 		} else {
 			CommReceive(&cv);
@@ -220,51 +220,6 @@
 	return main_window;
 }
 
-static void SetDialogFont()
-{
-	LOGFONTA logfont;
-	BOOL result;
-
-	// 明示的に指定されている場合はそれに従う
-	result = GetI18nLogfont("Tera Term", "DLG_FONT", &logfont, 72, ts.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 HWND hModalWnd;
 
 void AddModalHandle(HWND hWnd)
@@ -291,7 +246,7 @@
 	CVTWindow *m_pMainWnd = new CVTWindow();
 	pVTWin = m_pMainWnd;
 	main_window = m_pMainWnd->m_hWnd;
-	SetDialogFont();
+	SetDialogFont(NULL, ts.UILanguageFile);
 
 	MSG msg;
 	while (GetMessage(&msg, NULL, 0, 0)) {
@@ -305,9 +260,9 @@
 
 		if (m_pMainWnd->m_hAccel != NULL) {
 			if (!MetaKey(ts.MetaKey)) {
-				// matakeyが押されていない
+				// matakey\x82\xAA\x89\x9F\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2
 				if (TranslateAccelerator(m_pMainWnd->m_hWnd , m_pMainWnd->m_hAccel, &msg)) {
-					// アクセラレーターキーを処理した
+					// \x83A\x83N\x83Z\x83\x89\x83\x8C\x81[\x83^\x81[\x83L\x81[\x82\xF0\x8F\x88\x97\x9D\x82\xB5\x82\xBD
 					message_processed = true;
 				}
 			}
@@ -319,16 +274,16 @@
 		}
 
 		while (!PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE)) {
-			// メッセージがない
+			// \x83\x81\x83b\x83Z\x81[\x83W\x82\xAA\x82Ȃ\xA2
 			if (!OnIdle(lCount)) {
-				// idle不要
-				if (SleepTick < 500) {	// 最大 501ms未満
+				// idle\x95s\x97v
+				if (SleepTick < 500) {	// \x8Dő\xE5 501ms\x96\xA2\x96\x9E
 					SleepTick += 2;
 				}
 				lCount = 0;
 				Sleep(SleepTick);
 			} else {
-				// 要idle
+				// \x97vidle
 				SleepTick = 0;
 				lCount++;
 			}

Modified: branches/cmake/teraterm/ttpmacro/ttmacro.cpp
===================================================================
--- branches/cmake/teraterm/ttpmacro/ttmacro.cpp	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/teraterm/ttpmacro/ttmacro.cpp	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (C) 1994-1998 T. Teranishi
  * (C) 2006-2017 TeraTerm Project
  * All rights reserved.
@@ -66,12 +66,12 @@
 
 	if ((module = GetModuleHandleA("kernel32.dll")) != NULL) {
 		if ((setDefDllDir = (pSetDefDllDir)GetProcAddress(module, "SetDefaultDllDirectories")) != NULL) {
-			// SetDefaultDllDirectories() が使える場合は、検索パスを %WINDOWS%\system32 のみに設定する
+			// SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82́A\x8C\x9F\x8D\xF5\x83p\x83X\x82\xF0 %WINDOWS%\system32 \x82݂̂ɐݒ肷\x82\xE9
 			(*setDefDllDir)((DWORD)0x00000800); // LOAD_LIBRARY_SEARCH_SYSTEM32
 		}
 		else if ((setDllDir = (pSetDllDir)GetProcAddress(module, "SetDllDirectoryA")) != NULL) {
-			// SetDefaultDllDirectories() が使えなくても、SetDllDirectory() が使える場合は
-			// カレントディレクトリだけでも検索パスからはずしておく。
+			// SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82Ȃ\xAD\x82Ă\xE0\x81ASetDllDirectory() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82\xCD
+			// \x83J\x83\x8C\x83\x93\x83g\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82\xBE\x82\xAF\x82ł\xE0\x8C\x9F\x8D\xF5\x83p\x83X\x82\xA9\x82\xE7\x82͂\xB8\x82\xB5\x82Ă\xA8\x82\xAD\x81B
 			(*setDllDir)("");
 		}
 	}
@@ -125,31 +125,31 @@
 	LOGFONTA logfont;
 	BOOL result;
 
-	// 明示的に指定されている場合はそれに従う
+	// \x96\xBE\x8E\xA6\x93I\x82Ɏw\x92肳\x82\xEA\x82Ă\xA2\x82\xE9\x8Fꍇ\x82͂\xBB\x82\xEA\x82ɏ]\x82\xA4
 	result = GetI18nLogfont("Tera Term", "DLG_FONT", &logfont, 72, UILanguageFile);
 
-	// 明示されていない場合
+	// \x96\xBE\x8E\xA6\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ
 	if (result == FALSE) {
-		// ガイドラインに沿った設定を行う
+		// \x83K\x83C\x83h\x83\x89\x83C\x83\x93\x82ɉ\x88\x82\xC1\x82\xBD\x90ݒ\xE8\x82\xF0\x8Ds\x82\xA4
 		// https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511282.aspx
 		if (IsWindowsVistaOrLater()) {
-			// Windows Vista以降 Segoe UI
+			// Windows Vista\x88ȍ~ 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 にマッピングされます。
+			// WindowsXP \x82\xA8\x82\xE6\x82\xD1 Windows 2000 \x82\xF0\x83^\x81[\x83Q\x83b\x83g\x82Ƃ\xB7\x82\xE9\x8Fꍇ\x82́A
+			// 8 \x83|\x83C\x83\x93\x83g MS Shell Dlg 2 \x8B[\x8E\x97\x83t\x83H\x83\x93\x83g\x82\xF0\x8Eg\x97p\x82\xB5\x82܂\xB7\x81B
+			// \x82\xB1\x82̃t\x83H\x83\x93\x83g\x82\xCD Tahoma \x82Ƀ}\x83b\x83s\x83\x93\x83O\x82\xB3\x82\xEA\x82܂\xB7\x81B
 			strcpy(logfont.lfFaceName, "MS Shell Dlg 2");
 			logfont.lfCharSet = 0;
 			logfont.lfHeight = -8;
 			logfont.lfWidth = 0;
 		} else {
-			// 以前のバージョンをターゲットとする場合は
-			// 8 ポイント MS Shell Dlg 擬似フォントを使用します
-			// MS Sans Serif にそれぞれマッピングされます
+			// \x88ȑO\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x83^\x81[\x83Q\x83b\x83g\x82Ƃ\xB7\x82\xE9\x8Fꍇ\x82\xCD
+			// 8 \x83|\x83C\x83\x93\x83g MS Shell Dlg \x8B[\x8E\x97\x83t\x83H\x83\x93\x83g\x82\xF0\x8Eg\x97p\x82\xB5\x82܂\xB7
+			// MS Sans Serif \x82ɂ\xBB\x82ꂼ\x82\xEA\x83}\x83b\x83s\x83\x93\x83O\x82\xB3\x82\xEA\x82܂\xB7
 			strcpy(logfont.lfFaceName, "MS Shell Dlg");
 			logfont.lfCharSet = 0;
 			logfont.lfHeight = -8;
@@ -159,7 +159,7 @@
 	}
 
 	if (result) {
-		TTSetDlgFont(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
+		TTSetDlgFontA(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
 	} else {
 		TTSetDlgFont(NULL, 0, 0);
 	}
@@ -199,9 +199,9 @@
 		bool message_processed = false;
 		if (m_pMainWnd->m_hAccel != NULL) {
 			if (!MetaKey(ts.MetaKey)) {
-				// matakeyが押されていない
+				// matakey\x82\xAA\x89\x9F\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2
 				if (TranslateAccelerator(m_pMainWnd->m_hWnd , m_pMainWnd->m_hAccel, &msg)) {
-					// アクセラレーターキーを処理した
+					// \x83A\x83N\x83Z\x83\x89\x83\x8C\x81[\x83^\x81[\x83L\x81[\x82\xF0\x8F\x88\x97\x9D\x82\xB5\x82\xBD
 					message_processed = true;
 				}
 			}
@@ -209,7 +209,7 @@
 #endif
 
 		if (IsDialogMessage(hWnd, &msg) != 0) {
-			/* 処理された*/
+			/* \x8F\x88\x97\x9D\x82\xB3\x82ꂽ*/
 		} else {
 			TranslateMessage(&msg);
 			DispatchMessage(&msg);
@@ -222,16 +222,16 @@
 #endif
 
 		while (!PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE)) {
-			// メッセージがない
+			// \x83\x81\x83b\x83Z\x81[\x83W\x82\xAA\x82Ȃ\xA2
 			if (!OnIdle(lCount)) {
-				// idle不要
-				if (SleepTick < 500) {	// 最大 501ms未満
+				// idle\x95s\x97v
+				if (SleepTick < 500) {	// \x8Dő\xE5 501ms\x96\xA2\x96\x9E
 					SleepTick += 2;
 				}
 				lCount = 0;
 				Sleep(SleepTick);
 			} else {
-				// 要idle
+				// \x97vidle
 				SleepTick = 0;
 				lCount++;
 			}
@@ -240,7 +240,7 @@
 	
 	//////////////////////////////////////////////////////////////////////
 
-	// TODO すでに閉じられている、この処理不要?
+	// TODO \x82\xB7\x82łɕ‚\xB6\x82\xE7\x82\xEA\x82Ă\xA2\x82\xE9\x81A\x82\xB1\x82̏\x88\x97\x9D\x95s\x97v?
 	if (pCCtrlWindow) {
 		pCCtrlWindow->DestroyWindow();
 	}

Modified: branches/cmake/tests/test_file.ttl
===================================================================
--- branches/cmake/tests/test_file.ttl	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/tests/test_file.ttl	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,202 +1,205 @@
-;;;
-;;; file commands
-;;;
-;call test_macrodir
-;call test_open
-;call test_filecommands
-;call test_filesearch
-;call test_filestat
-;call test_find
-;call test_folder
-;call test_password
-messagebox "finish all tests" "test_file.ttl"
-end
-
-
-;;;
-;;; test folder
-;;;
-:test_macrodir
-:retry
-getdir macro_dir
-dirnamebox "test_file.ttl folder for test/テストで使用するフォルダ" macro_dir
-s = "folder for test:\nテストで使用するフォルダ:\n"
-strspecial s
-strconcat s macro_dir
-yesnobox s "test_file.ttl"
-if result == 0 goto retry
-setdir macro_dir
-return
-
-;;;
-;;; test fileopen
-;;;
-:test_open
-filenamebox '書き込みファイル' 1
-if result == 0 goto test_open
-fname = inputstr
-fileopen fh fname 1
-filewrite fh "testこんにちは안녕하세요"#13#10
-filewriteln fh "testこんにちは안녕하세요"#13#10
-fileclose fh
-return
-
-;;;
-;;; fileopen (create)
-;;; filewrite
-;;; filewriteln
-;;; fileclose
-;;; filerename
-;;; filecreate
-;;; filedelete
-;;; filecopy
-;;; fileconcat
-;;;
-:test_filecommands
-fname_1 = "00こんにちは.txt"
-fileopen fh fname_1 1
-filewrite fh "test1 こんにちは안녕하세요"#13#10
-fileclose fh
-fname_2 = "00مرحبا هناك.txt"
-filerename fname_1 fname_2
-if result <> 0 messagebox "filerename error" "test_file.ttl"
-filecreate fh fname_1
-filewriteln fh "test2 こんにちは안녕하세요"
-fileclose fh
-messagebox "checkfiles 1" "test_file.ttl"
-fileconcat fname_1 fname_2
-messagebox "checkfiles 2" "test_file.ttl"
-
-if result <> 0 messagebox "fileconcat error" "test_file.ttl"
-fname_3 = "00привет там.txt"
-filecopy fname_1 fname_3
-if result <> 0 messagebox "filecopy error" "test_file.ttl"
-filetruncate fname_1 1024
-if result <> 0 messagebox "filetruncate error" "test_file.ttl"
-filestat fname_1 size
-if result = -1 messagebox "filestat error" "test_file.ttl"
-if size <> 1024 messagebox "file size?" "test_file.ttl"
-messagebox "checkfiles 3" "test_file.ttl"
-filedelete fname_1
-if result <> 0 messagebox "filedelete error" "test_file.ttl"
-filedelete fname_2
-if result <> 0 messagebox "filedelete error" "test_file.ttl"
-filedelete fname_3
-if result <> 0 messagebox "filedelete error" "test_file.ttl"
-messagebox "checkfiles 4" "test_file.ttl"
-return
-
-;;;
-;;; filesearch
-;;;
-:test_filesearch
-fname = "hello ワールド.bin"
-filesearch fname
-if result = 1 messagebox "check filesearch 1" "test_file.ttl"
-;;fileopen fh fname 1 1	;@@@@ TODO read only でファイルが生成できてしまう
-fileopen fh fname 1
-filewriteln fh "this is hello world"
-fileclose fh
-filesearch fname
-if result = 0 messagebox "check filesearch 2" "test_file.ttl"
-filedelete fname
-filesearch fname
-if result = 1 messagebox "check filesearch 3" "test_file.ttl"
-return
-
-;;;
-;;; filestat
-;;;
-:test_filestat
-fname = "statテスト.bin"
-filetruncate fname 10240
-filestat fname size
-if result = -1 messagebox "check filestat 1" "test_file.ttl"
-if size <> 10240 messagebox "check filestat 2" "test_file.ttl"
-filedelete fname
-return
-
-;;;
-;;; findfirst
-;;; findnext
-;;; findclose
-;;;
-:test_find
-n = 0
-filelist = ""
-findfirst dh "*.ttl" filename
-if result = 1 then
-	while result
-		strconcat filelist filename
-		strconcat filelist "\n"
-		n = n + 1
-		findnext dh filename
-	endwhile
-endif
-findclose dh
-strspecial filelist
-messagebox filelist "test_file.ttl"
-return
-
-;;;
-;;; foldercreate
-;;; folderdelete
-;;; foldersearch
-;;; setfileattr
-;;; getfileattr
-;;;
-:test_folder
-dname = "フォルダمجلدaa"
-foldersearch dname
-if result == 1 messagebox "check foldersearch 1" "test_file.ttl"
-foldercreate "フォルダمجلدaa"
-fname = "フォルダمجلدaa/test.txt"
-filecreate fh fname
-filewriteln fh "こんにちは"
-fileclose fh
-getfileattr fname
-if result == -1 messagebox "check getfileattr" "test_file.ttl"
-foldersearch dname
-if result == 0 messagebox "check foldersearch 2" "test_file.ttl"
-folderdelete dname
-if result == 0 messagebox "check folderdelete 1" "test_file.ttl"
-setfileattr fname $1
-if result == 0 messagebox "check setfileattr 1" "test_file.ttl"
-setfileattr fname $80
-if result == 0 messagebox "check setfileattr 2" "test_file.ttl"
-filedelete fname
-folderdelete dname
-if result <> 0 messagebox "check folderdelete 2" "test_file.ttl"
-foldersearch dname
-if result == 1 messagebox "check foldersearch 3" "test_file.ttl"
-return
-
-;;;
-;;; setpassword
-;;; getpassword
-;;; ispassword
-;;; delpassword
-;;;
-:test_password
-pwfile = "パスワード.txt"
-filedelete pwfile
-pw1 = "password"
-setpassword pwfile "password1" pw1
-if result == 0 messagebox "check setpassword 1" "test_file.ttl"
-getpassword pwfile "password1" pw2
-if result == 0 messagebox "check getpassword 2" "test_file.ttl"
-strcompare pw1 pw2
-if result <> 0 messagebox "check setpassword 3" "test_file.ttl"
-getpassword pwfile "password2" pw1
-if result == 0 messagebox "check getpassword 4" "test_file.ttl"
-getpassword pwfile "password2" pw2
-if result == 0 messagebox "check getpassword 5" "test_file.ttl"
-strcompare pw1 pw2
-if result <> 0 messagebox "check setpassword 6" "test_file.ttl"
-ispassword pwfile "password2"
-if result <> 1 messagebox "check ispassword 7" "test_file.ttl"
-delpassword pwfile "password2"
-ispassword pwfile "password2"
-if result <> 0 messagebox "check ispassword 8" "test_file.ttl"
-filedelete pwfile
-return
+;;;
+;;; file commands
+;;;
+call test_macrodir
+call test_open
+call test_filecommands
+call test_filesearch
+call test_filestat
+call test_find
+call test_folder
+call test_password
+messagebox "finish all tests" "test_file.ttl"
+end
+
+
+;;;
+;;; test folder
+;;;
+:test_macrodir
+:retry
+getdir macro_dir
+dirnamebox "test_file.ttl folder for test" macro_dir
+s = "folder for test:\n"
+strspecial s
+strconcat s macro_dir
+yesnobox s "test_file.ttl"
+if result == 0 goto retry
+setdir macro_dir
+return
+
+;;;
+;;; test fileopen
+;;;
+:test_open
+filenamebox '\x8F\x91\x82\xAB\x8D\x9E\x82݃t\x83@\x83C\x83\x8B' 1
+if result == 0 goto test_open
+fname = inputstr
+fileopen fh fname 1 1
+if fh <> -1 messagebox "check fileopen" "test_file.ttl"
+fileopen fh fname 1
+filewrite fh "test hello"#13#10
+filewriteln fh "test hello"#13#10
+fileclose fh
+filedelete fname
+return
+
+;;;
+;;; fileopen (create)
+;;; filewrite
+;;; filewriteln
+;;; fileclose
+;;; filerename
+;;; filecreate
+;;; filedelete
+;;; filecopy
+;;; fileconcat
+;;;
+:test_filecommands
+fname_1 = "01_hello.txt"
+fileopen fh fname_1 1
+filewrite fh "test1 hello"#13#10
+fileclose fh
+fname_2 = "02_hello.txt"
+filerename fname_1 fname_2
+if result <> 0 messagebox "filerename error" "test_file.ttl"
+filecreate fh fname_1
+filewriteln fh "test2 hello"
+fileclose fh
+messagebox "checkfiles 1" "test_file.ttl"
+fileconcat fname_1 fname_2
+messagebox "checkfiles 2" "test_file.ttl"
+
+if result <> 0 messagebox "fileconcat error" "test_file.ttl"
+fname_3 = "03_hello.txt"
+filecopy fname_1 fname_3
+if result <> 0 messagebox "filecopy error" "test_file.ttl"
+filetruncate fname_1 1024
+if result <> 0 messagebox "filetruncate error" "test_file.ttl"
+filestat fname_1 size
+if result = -1 messagebox "filestat error" "test_file.ttl"
+if size <> 1024 messagebox "file size?" "test_file.ttl"
+messagebox "checkfiles 3" "test_file.ttl"
+filedelete fname_1
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+filedelete fname_2
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+filedelete fname_3
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+messagebox "checkfiles 4" "test_file.ttl"
+return
+
+;;;
+;;; filesearch
+;;;
+:test_filesearch
+fname = "hello world.bin"
+filesearch fname
+if result = 1 messagebox "check filesearch 1" "test_file.ttl"
+fileopen fh fname 1
+if fh = -1 messagebox "check fileopen" "test_file.ttl"
+filewriteln fh "this is hello world"
+fileclose fh
+filesearch fname
+if result = 0 messagebox "check filesearch 2" "test_file.ttl"
+filedelete fname
+filesearch fname
+if result = 1 messagebox "check filesearch 3" "test_file.ttl"
+return
+
+;;;
+;;; filestat
+;;;
+:test_filestat
+fname = "stat_test.bin"
+filetruncate fname 10240
+filestat fname size
+if result = -1 messagebox "check filestat 1" "test_file.ttl"
+if size <> 10240 messagebox "check filestat 2" "test_file.ttl"
+filedelete fname
+return
+
+;;;
+;;; findfirst
+;;; findnext
+;;; findclose
+;;;
+:test_find
+n = 0
+filelist = ""
+findfirst dh "*.ttl" filename
+if result = 1 then
+	while result
+		strconcat filelist filename
+		strconcat filelist "\n"
+		n = n + 1
+		findnext dh filename
+	endwhile
+endif
+findclose dh
+strspecial filelist
+messagebox filelist "test_file.ttl"
+return
+
+;;;
+;;; foldercreate
+;;; folderdelete
+;;; foldersearch
+;;; setfileattr
+;;; getfileattr
+;;;
+:test_folder
+dname = "folder_aa"
+foldersearch dname
+if result == 1 messagebox "check foldersearch 1" "test_file.ttl"
+foldercreate "folder_aa"
+fname = "folder_aa/test.txt"
+filecreate fh fname
+filewriteln fh "hello"
+fileclose fh
+getfileattr fname
+if result == -1 messagebox "check getfileattr" "test_file.ttl"
+foldersearch dname
+if result == 0 messagebox "check foldersearch 2" "test_file.ttl"
+folderdelete dname
+if result == 0 messagebox "check folderdelete 1" "test_file.ttl"
+setfileattr fname $1
+if result == 0 messagebox "check setfileattr 1" "test_file.ttl"
+setfileattr fname $80
+if result == 0 messagebox "check setfileattr 2" "test_file.ttl"
+filedelete fname
+folderdelete dname
+if result <> 0 messagebox "check folderdelete 2" "test_file.ttl"
+foldersearch dname
+if result == 1 messagebox "check foldersearch 3" "test_file.ttl"
+return
+
+;;;
+;;; setpassword
+;;; getpassword
+;;; ispassword
+;;; delpassword
+;;;
+:test_password
+pwfile = "password.txt"
+filedelete pwfile
+pw1 = "password"
+setpassword pwfile "password1" pw1
+if result == 0 messagebox "check setpassword 1" "test_file.ttl"
+getpassword pwfile "password1" pw2
+if result == 0 messagebox "check getpassword 2" "test_file.ttl"
+strcompare pw1 pw2
+if result <> 0 messagebox "check setpassword 3" "test_file.ttl"
+getpassword pwfile "password2" pw1
+if result == 0 messagebox "check getpassword 4" "test_file.ttl"
+getpassword pwfile "password2" pw2
+if result == 0 messagebox "check getpassword 5" "test_file.ttl"
+strcompare pw1 pw2
+if result <> 0 messagebox "check setpassword 6" "test_file.ttl"
+ispassword pwfile "password2"
+if result <> 1 messagebox "check ispassword 7" "test_file.ttl"
+delpassword pwfile "password2"
+ispassword pwfile "password2"
+if result <> 0 messagebox "check ispassword 8" "test_file.ttl"
+filedelete pwfile
+return

Copied: branches/cmake/tests/test_file_utf8.ttl (from rev 7374, branches/cmake/tests/test_file.ttl)
===================================================================
--- branches/cmake/tests/test_file_utf8.ttl	                        (rev 0)
+++ branches/cmake/tests/test_file_utf8.ttl	2018-12-27 15:31:39 UTC (rev 7375)
@@ -0,0 +1,202 @@
+;;;
+;;; file commands
+;;;
+;call test_macrodir
+;call test_open
+;call test_filecommands
+;call test_filesearch
+;call test_filestat
+;call test_find
+;call test_folder
+;call test_password
+messagebox "finish all tests" "test_file.ttl"
+end
+
+
+;;;
+;;; test folder
+;;;
+:test_macrodir
+:retry
+getdir macro_dir
+dirnamebox "test_file.ttl folder for test/テストで使用するフォルダ" macro_dir
+s = "folder for test:\nテストで使用するフォルダ:\n"
+strspecial s
+strconcat s macro_dir
+yesnobox s "test_file.ttl"
+if result == 0 goto retry
+setdir macro_dir
+return
+
+;;;
+;;; test fileopen
+;;;
+:test_open
+filenamebox '書き込みファイル' 1
+if result == 0 goto test_open
+fname = inputstr
+fileopen fh fname 1
+filewrite fh "testこんにちは안녕하세요"#13#10
+filewriteln fh "testこんにちは안녕하세요"#13#10
+fileclose fh
+return
+
+;;;
+;;; fileopen (create)
+;;; filewrite
+;;; filewriteln
+;;; fileclose
+;;; filerename
+;;; filecreate
+;;; filedelete
+;;; filecopy
+;;; fileconcat
+;;;
+:test_filecommands
+fname_1 = "00こんにちは.txt"
+fileopen fh fname_1 1
+filewrite fh "test1 こんにちは안녕하세요"#13#10
+fileclose fh
+fname_2 = "00مرحبا هناك.txt"
+filerename fname_1 fname_2
+if result <> 0 messagebox "filerename error" "test_file.ttl"
+filecreate fh fname_1
+filewriteln fh "test2 こんにちは안녕하세요"
+fileclose fh
+messagebox "checkfiles 1" "test_file.ttl"
+fileconcat fname_1 fname_2
+messagebox "checkfiles 2" "test_file.ttl"
+
+if result <> 0 messagebox "fileconcat error" "test_file.ttl"
+fname_3 = "00привет там.txt"
+filecopy fname_1 fname_3
+if result <> 0 messagebox "filecopy error" "test_file.ttl"
+filetruncate fname_1 1024
+if result <> 0 messagebox "filetruncate error" "test_file.ttl"
+filestat fname_1 size
+if result = -1 messagebox "filestat error" "test_file.ttl"
+if size <> 1024 messagebox "file size?" "test_file.ttl"
+messagebox "checkfiles 3" "test_file.ttl"
+filedelete fname_1
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+filedelete fname_2
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+filedelete fname_3
+if result <> 0 messagebox "filedelete error" "test_file.ttl"
+messagebox "checkfiles 4" "test_file.ttl"
+return
+
+;;;
+;;; filesearch
+;;;
+:test_filesearch
+fname = "hello ワールド.bin"
+filesearch fname
+if result = 1 messagebox "check filesearch 1" "test_file.ttl"
+;;fileopen fh fname 1 1	;@@@@ TODO read only でファイルが生成できてしまう
+fileopen fh fname 1
+filewriteln fh "this is hello world"
+fileclose fh
+filesearch fname
+if result = 0 messagebox "check filesearch 2" "test_file.ttl"
+filedelete fname
+filesearch fname
+if result = 1 messagebox "check filesearch 3" "test_file.ttl"
+return
+
+;;;
+;;; filestat
+;;;
+:test_filestat
+fname = "statテスト.bin"
+filetruncate fname 10240
+filestat fname size
+if result = -1 messagebox "check filestat 1" "test_file.ttl"
+if size <> 10240 messagebox "check filestat 2" "test_file.ttl"
+filedelete fname
+return
+
+;;;
+;;; findfirst
+;;; findnext
+;;; findclose
+;;;
+:test_find
+n = 0
+filelist = ""
+findfirst dh "*.ttl" filename
+if result = 1 then
+	while result
+		strconcat filelist filename
+		strconcat filelist "\n"
+		n = n + 1
+		findnext dh filename
+	endwhile
+endif
+findclose dh
+strspecial filelist
+messagebox filelist "test_file.ttl"
+return
+
+;;;
+;;; foldercreate
+;;; folderdelete
+;;; foldersearch
+;;; setfileattr
+;;; getfileattr
+;;;
+:test_folder
+dname = "フォルダمجلدaa"
+foldersearch dname
+if result == 1 messagebox "check foldersearch 1" "test_file.ttl"
+foldercreate "フォルダمجلدaa"
+fname = "フォルダمجلدaa/test.txt"
+filecreate fh fname
+filewriteln fh "こんにちは"
+fileclose fh
+getfileattr fname
+if result == -1 messagebox "check getfileattr" "test_file.ttl"
+foldersearch dname
+if result == 0 messagebox "check foldersearch 2" "test_file.ttl"
+folderdelete dname
+if result == 0 messagebox "check folderdelete 1" "test_file.ttl"
+setfileattr fname $1
+if result == 0 messagebox "check setfileattr 1" "test_file.ttl"
+setfileattr fname $80
+if result == 0 messagebox "check setfileattr 2" "test_file.ttl"
+filedelete fname
+folderdelete dname
+if result <> 0 messagebox "check folderdelete 2" "test_file.ttl"
+foldersearch dname
+if result == 1 messagebox "check foldersearch 3" "test_file.ttl"
+return
+
+;;;
+;;; setpassword
+;;; getpassword
+;;; ispassword
+;;; delpassword
+;;;
+:test_password
+pwfile = "パスワード.txt"
+filedelete pwfile
+pw1 = "password"
+setpassword pwfile "password1" pw1
+if result == 0 messagebox "check setpassword 1" "test_file.ttl"
+getpassword pwfile "password1" pw2
+if result == 0 messagebox "check getpassword 2" "test_file.ttl"
+strcompare pw1 pw2
+if result <> 0 messagebox "check setpassword 3" "test_file.ttl"
+getpassword pwfile "password2" pw1
+if result == 0 messagebox "check getpassword 4" "test_file.ttl"
+getpassword pwfile "password2" pw2
+if result == 0 messagebox "check getpassword 5" "test_file.ttl"
+strcompare pw1 pw2
+if result <> 0 messagebox "check setpassword 6" "test_file.ttl"
+ispassword pwfile "password2"
+if result <> 1 messagebox "check ispassword 7" "test_file.ttl"
+delpassword pwfile "password2"
+ispassword pwfile "password2"
+if result <> 0 messagebox "check ispassword 8" "test_file.ttl"
+filedelete pwfile
+return

Modified: branches/cmake/ttssh2/ttxssh/ttxssh.c
===================================================================
--- branches/cmake/ttssh2/ttxssh/ttxssh.c	2018-12-27 14:12:40 UTC (rev 7374)
+++ branches/cmake/ttssh2/ttxssh/ttxssh.c	2018-12-27 15:31:39 UTC (rev 7375)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright (c) 1998-2001, Robert O'Callahan
  * (C) 2004-2017 TeraTerm Project
  * All rights reserved.
@@ -207,36 +207,36 @@
 	ssh_heartbeat_lock_finalize();
 }
 
-static void SetDialogFont(const char *UILanguageFile)
+static void _SetDialogFont(const char *UILanguageFile)
 {
 	LOGFONTA logfont;
 	BOOL result;
 
-	// 明示的に指定されている場合はそれに従う
+	// \x96\xBE\x8E\xA6\x93I\x82Ɏw\x92肳\x82\xEA\x82Ă\xA2\x82\xE9\x8Fꍇ\x82͂\xBB\x82\xEA\x82ɏ]\x82\xA4
 	result = GetI18nLogfont("Tera Term", "DLG_FONT", &logfont, 72, UILanguageFile);
 
-	// 明示されていない場合
+	// \x96\xBE\x8E\xA6\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ
 	if (result == FALSE) {
-		// ガイドラインに沿った設定を行う
+		// \x83K\x83C\x83h\x83\x89\x83C\x83\x93\x82ɉ\x88\x82\xC1\x82\xBD\x90ݒ\xE8\x82\xF0\x8Ds\x82\xA4
 		// https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511282.aspx
 		if (IsWindowsVistaOrLater()) {
-			// Windows Vista以降 Segoe UI
+			// Windows Vista\x88ȍ~ 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 にマッピングされます。
+			// WindowsXP \x82\xA8\x82\xE6\x82\xD1 Windows 2000 \x82\xF0\x83^\x81[\x83Q\x83b\x83g\x82Ƃ\xB7\x82\xE9\x8Fꍇ\x82́A
+			// 8 \x83|\x83C\x83\x93\x83g MS Shell Dlg 2 \x8B[\x8E\x97\x83t\x83H\x83\x93\x83g\x82\xF0\x8Eg\x97p\x82\xB5\x82܂\xB7\x81B
+			// \x82\xB1\x82̃t\x83H\x83\x93\x83g\x82\xCD Tahoma \x82Ƀ}\x83b\x83s\x83\x93\x83O\x82\xB3\x82\xEA\x82܂\xB7\x81B
 			strcpy(logfont.lfFaceName, "MS Shell Dlg 2");
 			logfont.lfCharSet = 0;
 			logfont.lfHeight = -8;
 			logfont.lfWidth = 0;
 		} else {
-			// 以前のバージョンをターゲットとする場合は
-			// 8 ポイント MS Shell Dlg 擬似フォントを使用します
-			// MS Sans Serif にそれぞれマッピングされます
+			// \x88ȑO\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x83^\x81[\x83Q\x83b\x83g\x82Ƃ\xB7\x82\xE9\x8Fꍇ\x82\xCD
+			// 8 \x83|\x83C\x83\x93\x83g MS Shell Dlg \x8B[\x8E\x97\x83t\x83H\x83\x93\x83g\x82\xF0\x8Eg\x97p\x82\xB5\x82܂\xB7
+			// MS Sans Serif \x82ɂ\xBB\x82ꂼ\x82\xEA\x83}\x83b\x83s\x83\x93\x83O\x82\xB3\x82\xEA\x82܂\xB7
 			strcpy(logfont.lfFaceName, "MS Shell Dlg");
 			logfont.lfCharSet = 0;
 			logfont.lfHeight = -8;
@@ -246,7 +246,7 @@
 	}
 
 	if (result) {
-		TTSetDlgFont(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
+		TTSetDlgFontA(logfont.lfFaceName, logfont.lfHeight, logfont.lfCharSet);
 	} else {
 		TTSetDlgFont(NULL, 0, 0);
 	}
@@ -262,7 +262,7 @@
 	pvar->err_msg = NULL;
 
 	init_TTSSH(pvar);
-	SetDialogFont(ts->UILanguageFile);
+	_SetDialogFont(ts->UILanguageFile);
 }
 
 static void normalize_generic_order(char *buf, char default_strings[], int default_strings_len)
@@ -274,19 +274,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 の文字を削除する)
+	// ex. (i=5 \x82̕\xB6\x8E\x9A\x82\xF0\x8D폜\x82\xB7\x82\xE9)
 	// i=012345
 	//   >:=9<87;A@?B3026(\0)
 	//         i+1
 	//         <------------>
-	//       ↓
+	//       \x81\xAB
 	//   >:=9<7;A@?B3026(\0)
 	//         
 	for (i = 0; buf[i] != 0; i++) {
@@ -301,22 +301,22 @@
 			listed[num] = 1;
 		}
 
-		// disabled lineがあれば、位置を覚えておく。
+		// disabled line\x82\xAA\x82\xA0\x82\xEA\x82΁A\x88ʒu\x82\xF0\x8Ao\x82\xA6\x82Ă\xA8\x82\xAD\x81B
 		if (num == 0) {
 			k = i;
 		}
 	}
 
-	// 指定されていない文字があれば、disabled lineの直前に挿入する。
+	// \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
 	// 
-	// ex. (Zを挿入する)
+	// ex. (Z\x82\xF0\x91}\x93\xFC\x82\xB7\x82\xE9)
 	//                k
 	//   >:=9<87;A@?B3026(\0)
 	//                 k+1
 	//                 <---->
-	//       ↓       k
+	//       \x81\xAB       k
 	//   >:=9<87;A@?B30026(\0)
-	//       ↓        k
+	//       \x81\xAB        k
 	//   >:=9<87;A@?B3Z026(\0)
 	//       
 	for (j = 0; j < default_strings_len && default_strings[j] != 0; j++) {
@@ -326,7 +326,7 @@
 			int copylen = strlen(buf + k + 1) + 1;
 
 			memmove(buf + k + 1, buf + k, copylen);
-			buf[k + 1 + copylen] = '\0';   // 終端を忘れずに付ける。
+			buf[k + 1 + copylen] = '\0';   // \x8FI\x92[\x82\xF0\x96Y\x82ꂸ\x82ɕt\x82\xAF\x82\xE9\x81B
 			buf[k] = num + '0';
 			k++;
 			i++;
@@ -339,7 +339,7 @@
 		j++;
 	}
 
-	// disabled lineが存在しない場合は、そのまま末尾に追加する。
+	// 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
 	for (; j < default_strings_len ; j++) {
 		int num = default_strings[j];
 
@@ -576,27 +576,27 @@
 	// SSH heartbeat time(second) (2004.12.11 yutaka)
 	settings->ssh_heartbeat_overtime = GetPrivateProfileInt("TTSSH", "HeartBeat", 60, fileName);
 
-	// パスワード認証および公開鍵認証に使うパスワードをメモリ上に保持しておくかどうかを
-	// 表す。(2006.8.5 yutaka)
+	// \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)
 	settings->remember_password = GetPrivateProfileInt("TTSSH", "RememberPassword", 1, fileName);
 
-	// 初回の認証ダイアログでサポートされているメソッドをチェックし、
-	// 無効なメソッドをグレイアウトする (2007.9.24 maya)
+	// \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)
 	settings->CheckAuthListFirst = read_BOOL_option(fileName, "CheckAuthListFirst", FALSE);
 
-	// 768bit 未満の RSA 鍵を持つサーバへの接続を有効にする (2008.9.11 maya)
+	// 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)
 	settings->EnableRsaShortKeyServer = read_BOOL_option(fileName, "EnableRsaShortKeyServer", FALSE);
 
-	// agent forward を有効にする (2008.11.25 maya)
+	// agent forward \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.11.25 maya)
 	settings->ForwardAgent = read_BOOL_option(fileName, "ForwardAgent", FALSE);
 
-	// agent forward 確認を有効にする
+	// agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9
 	settings->ForwardAgentConfirm = read_BOOL_option(fileName, "ForwardAgentConfirm", TRUE);
 
-	// agent forward 確認を有効にする
+	// agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9
 	settings->ForwardAgentNotify = read_BOOL_option(fileName, "ForwardAgentNotify", TRUE);
 
-	// ホスト鍵の DNS でのチェック (RFC 4255)
+	// \x83z\x83X\x83g\x8C\xAE\x82\xCC DNS \x82ł̃`\x83F\x83b\x83N (RFC 4255)
 	settings->VerifyHostKeyDNS = read_BOOL_option(fileName, "VerifyHostKeyDNS", TRUE);
 
 	// icon
@@ -614,7 +614,7 @@
 		settings->IconID = IDI_SECURETT;
 	}
 
-	// エラーおよび警告時のポップアップメッセージを抑止する (2014.6.26 yutaka)
+	// \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)
 	settings->DisablePopupMessage = GetPrivateProfileInt("TTSSH", "DisablePopupMessage", 0, fileName);
 
 	READ_STD_STRING_OPTION(X11Display);
@@ -701,32 +701,32 @@
 	    settings->remember_password ? "1" : "0",
 	    fileName);
 
-	// 初回の認証ダイアログでサポートされているメソッドをチェックし、
-	// 無効なメソッドをグレイアウトする (2007.9.24 maya)
+	// \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)
 	WritePrivateProfileString("TTSSH", "CheckAuthListFirst",
 	                          settings->CheckAuthListFirst ? "1" : "0", fileName);
 
-	// 768bit 未満の RSA 鍵を持つサーバへの接続を有効にする (2008.9.11 maya)
+	// 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)
 	WritePrivateProfileString("TTSSH", "EnableRsaShortKeyServer",
 	                          settings->EnableRsaShortKeyServer ? "1" : "0", fileName);
 
-	// agent forward を有効にする (2008.11.25 maya)
+	// agent forward \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (2008.11.25 maya)
 	WritePrivateProfileString("TTSSH", "ForwardAgent",
 	                          settings->ForwardAgent ? "1" : "0", fileName);
 
-	// agent forward 確認を有効にする
+	// agent forward \x8Am\x94F\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9
 	WritePrivateProfileString("TTSSH", "ForwardAgentConfirm",
 	                          settings->ForwardAgentConfirm ? "1" : "0", fileName);
 
-	// agent forward 通知を有効にする
+	// agent forward \x92ʒm\x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9
 	WritePrivateProfileString("TTSSH", "ForwardAgentNotify",
 	                          settings->ForwardAgentNotify ? "1" : "0", fileName);
 
-	// ホスト鍵の DNS でのチェック (RFC 4255)
+	// \x83z\x83X\x83g\x8C\xAE\x82\xCC DNS \x82ł̃`\x83F\x83b\x83N (RFC 4255)
 	WritePrivateProfileString("TTSSH", "VerifyHostKeyDNS",
 	                          settings->VerifyHostKeyDNS ? "1" : "0", fileName);
 
-	// SSH アイコン
+	// SSH \x83A\x83C\x83R\x83\x93
 	if (settings->IconID==IDI_SECURETT_YELLOW) {
 		WritePrivateProfileString("TTSSH", "SSHIcon", "yellow", fileName);
 	}
@@ -909,8 +909,8 @@
 		fuLoad = LR_VGACOLOR;
 	}
 
-	// LoadIcon ではなく LoadImage を使うようにし、
-	// 16x16 のアイコンを明示的に取得するようにした (2006.8.9 maya)
+	// 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)
 	if (SecureLargeIcon == NULL) {
 		SecureLargeIcon = LoadImage(hInst, MAKEINTRESOURCE(pvar->settings.IconID),
 		                            IMAGE_ICON, 0, 0, fuLoad);
@@ -975,8 +975,8 @@
 void notify_nonfatal_error(PTInstVar pvar, char *msg)
 {
 	if (!pvar->showing_err) {
-		// 未接続の状態では通知先ウィンドウがないので、デスクトップをオーナーとして
-		// メッセージボックスを出現させる。(2006.6.11 yutaka)
+		// \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)
 		if (pvar->NotificationWindow == NULL) {
 			const TCHAR *msgT = ToTcharU8(msg);
 			TCHAR uimsg[MAX_UIMSG];
@@ -1066,11 +1066,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);
 
-	/* バイナリ表示(4バイトごとに空白を挿入)*/
+	/* \x83o\x83C\x83i\x83\x8A\x95\\x8E\xA6\x81i4\x83o\x83C\x83g\x82\xB2\x82Ƃɋ󔒂\xF0\x91}\x93\xFC\x81j*/
 	for (i = 0; i < byte_cnt; i++) {
 		if (i > 0 && i % 4 == 0) {
 			strncat_s(buf, buflen, " ", _TRUNCATE);
@@ -1080,11 +1080,11 @@
 		strncat_s(buf, buflen, tmp, _TRUNCATE);
 	}
 
-	/* ASCII表示部分までの空白を補う */
+	/* ASCII\x95\\x8E\xA6\x95\x94\x95\xAA\x82܂ł̋󔒂\xF0\x95₤ */
 	_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表示 */
+	/* ASCII\x95\\x8E\xA6 */
 	for (i = 0; i < byte_cnt; i++) {
 		c = bytes[i];
 		if (isprint(c)) {
@@ -1143,7 +1143,7 @@
 static void PASCAL TTXOpenTCP(TTXSockHooks *hooks)
 {
 	if (pvar->settings.Enabled) {
-		// TCPLocalEcho/TCPCRSend を無効にする (maya 2007.4.25)
+		// TCPLocalEcho/TCPCRSend \x82𖳌\xF8\x82ɂ\xB7\x82\xE9 (maya 2007.4.25)
 		pvar->origDisableTCPEchoCR = pvar->ts->DisableTCPEchoCR;
 		pvar->ts->DisableTCPEchoCR = TRUE;
 
@@ -1176,7 +1176,7 @@
 		HOSTS_open(pvar);
 		FWDUI_open(pvar);
 
-		// 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya)
+		// \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)
 		SSH2_update_cipher_myproposal(pvar);
 		SSH2_update_kex_myproposal(pvar);
 		SSH2_update_host_key_myproposal(pvar);
@@ -1211,10 +1211,10 @@
 	}
 }
 
-// C-p/C-n/C-b/C-f/C-a/C-e をサポート (2007.9.5 maya)
-// C-d/C-k をサポート (2007.10.3 yutaka)
-// ドロップダウンの中のエディットコントロールを
-// サブクラス化するためのウインドウプロシージャ
+// 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
 WNDPROC OrigHostnameEditProc; // Original window procedure
 LRESULT CALLBACK HostnameEditProc(HWND dlg, UINT msg,
                                   WPARAM wParam, LPARAM lParam)
@@ -1224,7 +1224,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) {
@@ -1270,17 +1270,17 @@
 						if (str != NULL) {
 							len = GetWindowText(dlg, str, max);
 							if (select >= 0 && select < len) {
-								if (wParam == 0x44) { // カーソル配下の文字のみを削除する
+								if (wParam == 0x44) { // \x83J\x81[\x83\\x83\x8B\x94z\x89\xBA\x82̕\xB6\x8E\x9A\x82݂̂\xF0\x8D폜\x82\xB7\x82\xE9
 									memmove(&str[select], &str[select + 1], len - select - 1);
 									str[len - 1] = '\0';
 
-								} else if (wParam == 0x4b) { // カーソルから行末まで削除する
+								} else if (wParam == 0x4b) { // \x83J\x81[\x83\\x83\x8B\x82\xA9\x82\xE7\x8Ds\x96\x96\x82܂ō폜\x82\xB7\x82\xE9
 									str[select] = '\0';
 
 								}
 							}
 
-							if (wParam == 0x55) { // カーソルより左側をすべて消す
+							if (wParam == 0x55) { // \x83J\x81[\x83\\x83\x8B\x82\xE6\x82荶\x91\xA4\x82\xF0\x82\xB7\x82ׂď\xC1\x82\xB7
 								if (select >= len) {
 									str[0] = '\0';
 								} else {
@@ -1299,7 +1299,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:
@@ -1399,7 +1399,7 @@
 		SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
 #endif
 
-		// ホストヒストリのチェックボックスを追加 (2005.10.21 yutaka)
+		// \x83z\x83X\x83g\x83q\x83X\x83g\x83\x8A\x82̃`\x83F\x83b\x83N\x83{\x83b\x83N\x83X\x82\xF0\x92lj\xC1 (2005.10.21 yutaka)
 		if (pvar->ts->HistoryList > 0) {
 			SendMessage(GetDlgItem(dlg, IDC_HISTORY), BM_SETCHECK, BST_CHECKED, 0);
 		} else {
@@ -1406,7 +1406,7 @@
 			SendMessage(GetDlgItem(dlg, IDC_HISTORY), BM_SETCHECK, BST_UNCHECKED, 0);
 		}
 
-		// ファイルおよび名前付きパイプの場合、TCP/IP扱いとする。
+		// \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
 		if (GetHNRec->PortType == IdFile ||
 			GetHNRec->PortType == IdNamedPipe
 			)
@@ -1431,7 +1431,7 @@
 
 		SendDlgItemMessage(dlg, IDC_HOSTNAME, CB_SETCURSEL, 0, 0);
 
-		// C-n/C-p のためにサブクラス化 (2007.9.4 maya)
+		// C-n/C-p \x82̂\xBD\x82߂ɃT\x83u\x83N\x83\x89\x83X\x89\xBB (2007.9.4 maya)
 		hwndHostname = GetDlgItem(dlg, IDC_HOSTNAME);
 		hwndHostnameEdit = GetWindow(hwndHostname, GW_CHILD);
 		OrigHostnameEditProc = (WNDPROC)GetWindowLongPtr(hwndHostnameEdit, GWLP_WNDPROC);
@@ -1476,12 +1476,12 @@
 		w = 1;
 		if ((comports=DetectComPorts(ComPortTable, GetHNRec->MaxComPort, ComPortDesc)) >= 0) {
 			for (i=0; i<comports; i++) {
-				// MaxComPort を越えるポートは表示しない
+				// MaxComPort \x82\xF0\x89z\x82\xA6\x82\xE9\x83|\x81[\x83g\x82͕\\x8E\xA6\x82\xB5\x82Ȃ\xA2
 				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;
 				}
@@ -1500,7 +1500,7 @@
 
 		} 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;
 				}
@@ -1544,7 +1544,7 @@
 			enable_dlg_items(dlg, IDC_HISTORY, IDC_HISTORY, FALSE); // disabled
 		}
 
-		// Host dialogにフォーカスをあてる (2004.10.2 yutaka)
+		// Host dialog\x82Ƀt\x83H\x81[\x83J\x83X\x82\xF0\x82\xA0\x82Ă\xE9 (2004.10.2 yutaka)
 		if (GetHNRec->PortType == IdTCPIP) {
 			HWND hwnd = GetDlgItem(dlg, IDC_HOSTNAME);
 			SetFocus(hwnd);
@@ -1583,8 +1583,8 @@
 		}
 #endif
 		
-		// SetFocus()でフォーカスをあわせた場合、FALSEを返す必要がある。
-		// TRUEを返すと、TABSTOP対象の一番はじめのコントロールが選ばれる。
+		// 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
 		// (2004.11.23 yutaka)
 		return FALSE;
 		//return TRUE;
@@ -1804,8 +1804,8 @@
 	FWDUI_load_settings(pvar);
 }
 
-// Percent-encodeされた文字列srcをデコードしてdstにコピーする。
-// dstlenはdstのサイズ。これより結果が長い場合、その分は切り捨てられる。
+// 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
 static void percent_decode(char *dst, int dstlen, char *src) {
 	if (src == NULL || dst == NULL || dstlen < 1) {
 		return;
@@ -1876,11 +1876,11 @@
 					action = OPTION_CLEAR;
 				}
 
-			// ttermpro.exe の /F= 指定でも TTSSH の設定を読む (2006.10.11 maya)
+			// ttermpro.exe \x82\xCC /F= \x8Ew\x92\xE8\x82ł\xE0 TTSSH \x82̐ݒ\xE8\x82\xF0\x93ǂ\xDE (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側でも解釈する必要があるので消さない
+				// 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
 			}
 		}
 
@@ -1988,7 +1988,7 @@
 				} else if (strcmp(option + 4, "-N") == 0) {
 					pvar->nosession = TRUE;
 
-				// /ssh1 と /ssh2 オプションの新規追加 (2006.9.16 maya)
+				// /ssh1 \x82\xC6 /ssh2 \x83I\x83v\x83V\x83\x87\x83\x93\x82̐V\x8BK\x92lj\xC1 (2006.9.16 maya)
 				} else if (strcmp(option + 4, "1") == 0) {
 					pvar->settings.Enabled = 1;
 					pvar->settings.ssh_protocol_version = 1;
@@ -2007,17 +2007,17 @@
 					MessageBox(NULL, buf, _T("TTSSH"), MB_OK | MB_ICONEXCLAMATION);
 				}
 
-			// ttermpro.exe の /T= 指定の流用なので、大文字も許す (2006.10.19 maya)
+			// 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)
 			} else if (MATCH_STR_I(option + 1, "t=") == 0) {
 				if (strcmp(option + 3, "2") == 0) {
 					pvar->settings.Enabled = 1;
-					// /t=2はttssh側での拡張なので消す
+					// /t=2\x82\xCDttssh\x91\xA4\x82ł̊g\x92\xA3\x82Ȃ̂ŏ\xC1\x82\xB7
 				} else {
 					pvar->settings.Enabled = 0;
-					action = OPTION_NONE;	// Tera Term側で解釈するので消さない
+					action = OPTION_NONE;	// Tera Term\x91\xA4\x82ʼn\xF0\x8E߂\xB7\x82\xE9\x82̂ŏ\xC1\x82\xB3\x82Ȃ\xA2
 				}
 
-			// /1 および /2 オプションの新規追加 (2004.10.3 yutaka)
+			// /1 \x82\xA8\x82\xE6\x82\xD1 /2 \x83I\x83v\x83V\x83\x87\x83\x93\x82̐V\x8BK\x92lj\xC1 (2004.10.3 yutaka)
 			} else if (strcmp(option + 1, "1") == 0) {
 				// command line: /ssh /1 is SSH1 only
 				pvar->settings.ssh_protocol_version = 1;
@@ -2027,47 +2027,47 @@
 				pvar->settings.ssh_protocol_version = 2;
 
 			} else if (strcmp(option + 1, "nossh") == 0) {
-				// '/nossh' オプションの追加。
-				// TERATERM.INI でSSHが有効になっている場合、うまくCygtermが起動しないことが
-				// あることへの対処。(2004.10.11 yutaka)
+				// '/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)
 				pvar->settings.Enabled = 0;
 
 			} else if (strcmp(option + 1, "telnet") == 0) {
-				// '/telnet' が指定されているときには '/nossh' と同じく
-				// SSHを無効にする (2006.9.16 maya)
+				// '/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)
 				pvar->settings.Enabled = 0;
-				// Tera Term の Telnet フラグも付ける
+				// Tera Term \x82\xCC Telnet \x83t\x83\x89\x83O\x82\xE0\x95t\x82\xAF\x82\xE9
 				pvar->ts->Telnet = 1;
 
 			} else if (MATCH_STR(option + 1, "auth=") == 0) {
-				// SSH2自動ログインオプションの追加
+				// SSH2\x8E\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x83I\x83v\x83V\x83\x87\x83\x93\x82̒lj\xC1
 				//
-				// 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」
+				// 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
 				//          /ssh /auth=publickey /user=foo /passwd=bar /keyfile=d:\tmp\id_rsa
-				// NOTICE: パスワードやパスに空白やセミコロンが含まれる場合はダブルクォート " で囲む
-				//         パスワードにダブルクォートが含まれる場合は連続したダブルクォート "" に置き換える
+				// 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
 				//
 				pvar->ssh2_autologin = 1; // for SSH2 (2004.11.30 yutaka)
 
-				if (_stricmp(option + 6, "password") == 0) { // パスワード
+				if (_stricmp(option + 6, "password") == 0) { // \x83p\x83X\x83\x8F\x81[\x83h
 					//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認証
+				} else if (_stricmp(option + 6, "keyboard-interactive") == 0) { // keyboard-interactive\x94F\x8F\xD8
 					//pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
 					pvar->ssh2_authmethod = SSH_AUTH_TIS;
 
-				} else if (_stricmp(option + 6, "challenge") == 0) { // keyboard-interactive認証
+				} else if (_stricmp(option + 6, "challenge") == 0) { // keyboard-interactive\x94F\x8F\xD8
 					//pvar->auth_state.cur_cred.method = SSH_AUTH_TIS;
 					pvar->ssh2_authmethod = SSH_AUTH_TIS;
 
-				} else if (_stricmp(option + 6, "publickey") == 0) { // 公開鍵認証
+				} else if (_stricmp(option + 6, "publickey") == 0) { // \x8C\xF6\x8AJ\x8C\xAE\x94F\x8F\xD8
 					//pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
 					pvar->ssh2_authmethod = SSH_AUTH_RSA;
 
-				} else if (_stricmp(option + 6, "pageant") == 0) { // 公開鍵認証 by Pageant
+				} else if (_stricmp(option + 6, "pageant") == 0) { // \x8C\xF6\x8AJ\x8C\xAE\x94F\x8F\xD8 by Pageant
 					//pvar->auth_state.cur_cred.method = SSH_AUTH_RSA;
 					pvar->ssh2_authmethod = SSH_AUTH_PAGEANT;
 
@@ -2085,22 +2085,22 @@
 				_snprintf_s(pvar->ssh2_keyfile, sizeof(pvar->ssh2_keyfile), _TRUNCATE, "%s", option+9);
 
 			} else if (strcmp(option + 1, "ask4passwd") == 0) {
-				// パスワードを聞く (2006.9.18 maya)
+				// \x83p\x83X\x83\x8F\x81[\x83h\x82𕷂\xAD (2006.9.18 maya)
 				pvar->ask4passwd = 1;
 
 			} else if (strcmp(option + 1, "nosecuritywarning") == 0) {
-				// known_hostsチェックをしない。当該オプションを使うと、セキュリティ性が低下する
-				// ため、隠しオプション扱いとする。
+				// 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
 				// (2009.10.4 yutaka)
 				pvar->nocheck_known_hosts = TRUE;
 
 			}
 			else {	// Other (not ttssh) option
-				action = OPTION_NONE;	// ttsshのオプションではないので消さない
+				action = OPTION_NONE;	// ttssh\x82̃I\x83v\x83V\x83\x87\x83\x93\x82ł͂Ȃ\xA2\x82̂ŏ\xC1\x82\xB3\x82Ȃ\xA2
 			}
 
-			// パスワードを聞く場合は自動ログインが無効になる
-			// /auth は認証メソッドの指定としては利用される (2006.9.18 maya)
+			// \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)
 			if (pvar->ask4passwd == 1) {
 				pvar->ssh2_autologin = 0;
 			}
@@ -2113,10 +2113,10 @@
 		         (MATCH_STR_I(option, "slogin1://") == 0) ||
 		         (MATCH_STR_I(option, "slogin2://") == 0)) {
 			//
-			// ssh://user@host/ 等のURL形式のサポート
-			// 基本的な書式は telnet:// URLに順ずる
+			// 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
 			//
-			// 参考:
+			// \x8EQ\x8Dl:
 			//   RFC3986: Uniform Resource Identifier (URI): Generic Syntax
 			//   RFC4248: The telnet URI Scheme
 			//
@@ -2125,7 +2125,7 @@
 
 			optlen = strlen(option);
 
-			// 最初の':'の前の文字が数字だった場合、それをsshプロトコルバージョンとみなす
+			// \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
 			p = _mbschr(option, ':');
 			switch (*(p-1)) {
 			case '1':
@@ -2136,34 +2136,34 @@
 				break;
 			}
 
-			// authority part までポインタを移動
+			// authority part \x82܂Ń|\x83C\x83\x93\x83^\x82\xF0\x88ړ\xAE
 			p += 3;
 
-			// path part を切り捨てる
+			// path part \x82\xF0\x90؂\xE8\x8ÊĂ\xE9
 			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 が host part の先頭('@'の次の文字)を差すようにする
+				// p \x82\xAA host part \x82̐擪('@'\x82̎\x9F\x82̕\xB6\x8E\x9A)\x82\xF0\x8D\xB7\x82\xB7\x82悤\x82ɂ\xB7\x82\xE9
 				p = p2 + 1;
 			}
 
-			// host part を option の先頭に移動して、scheme part を潰す
-			// port指定が無かった時にport番号を足すための領域確保の意味もある
+			// 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
 			hostlen = strlen(p);
 			memmove_s(option, optlen, p, hostlen);
 			option[hostlen] = 0;
 
-			// ポート指定が無い時は":22"を足す
+			// \x83|\x81[\x83g\x8Ew\x92肪\x96\xB3\x82\xA2\x8E\x9E\x82\xCD":22"\x82𑫂\xB7
 			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);
@@ -2170,7 +2170,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;
@@ -2179,11 +2179,11 @@
 		}
 		else if (_mbschr(option, '@') != NULL) {
 			//
-			// user @ host 形式のサポート
-			//   取り合えずsshでのみサポートの為、ユーザ名はttssh内で潰す。
-			//   (ssh接続以外 --  ttsshには関係ない場合でも)
-			//   将来的にtelnet authentication optionをサポートした時は
-			//   Tera Term本体で処理するようにする予定。
+			// 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
 			//
 			char *p;
 			p = _mbschr(option, '@');
@@ -2191,9 +2191,9 @@
 
 			strncpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), option, _TRUNCATE);
 
-			// ユーザ名部分をスペースで潰す。
-			// 後続のTTXやTera Term本体で解釈する時にはスペースを読み飛ばすので、
-			// ホスト名を先頭に詰める必要は無い。
+			// \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
 			memset(option, ' ', p-option+1);
 
 			action = OPTION_REPLACE;
@@ -2323,7 +2323,7 @@
 	char *fp = NULL;
 	const char *lang = pvar->ts->UILanguageFile;
 
-	// TTSSHダイアログに表示するSSHに関する情報 (2004.10.30 yutaka)
+	// 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)
 	if (pvar->socket != INVALID_SOCKET) {
 		buf2[0] = '\0';
 
@@ -2417,7 +2417,7 @@
 			strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE);
 			strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE);
 
-			if (pvar->ctos_compression == COMP_DELAYED) { // 遅延パケット圧縮の場合 (2006.6.23 yutaka)
+			if (pvar->ctos_compression == COMP_DELAYED) { // \x92x\x89\x84\x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82̏ꍇ (2006.6.23 yutaka)
 				UTIL_get_lang_msgU8("DLG_ABOUT_COMPDELAY", uimsg, _countof(uimsg), "Delayed Compression:", lang);
 			}
 			else {
@@ -2444,7 +2444,7 @@
 			strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE);
 		}
 
-		// ホスト公開鍵のfingerprintを表示する。
+		// \x83z\x83X\x83g\x8C\xF6\x8AJ\x8C\xAE\x82\xCCfingerprint\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B
 		// (2014.5.1 yutaka)
 		UTIL_get_lang_msgU8("DLG_ABOUT_FINGERPRINT", uimsg, _countof(uimsg), "Host key's fingerprint:", lang);
 		strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE);
@@ -2501,17 +2501,17 @@
 	UTIL_get_lang_msg("BTN_OK", pvar, uimsg);
 	SetDlgItemText(dlg, IDOK, pvar->ts->UIMsg);
 #endif
-	// TTSSHのバージョンを設定する (2005.2.28 yutaka)
+	// TTSSH\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (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);
 	SetDlgItemTextA(dlg, IDC_TTSSH_VERSION, buf);
 
-	// OpenSSLのバージョンを設定する (2005.1.24 yutaka)
-	// 条件文追加 (2005.5.11 yutaka)
-	// OPENSSL_VERSION_TEXT マクロ定義ではなく、関数を使ってバージョンを取得する。(2013.11.24 yutaka)
+	// 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)
 	SetDlgItemTextA(dlg, IDC_OPENSSL_VERSION, SSLeay_version(SSLEAY_VERSION));
 
-	// zlibのバージョンを設定する (2005.5.11 yutaka)
+	// zlib\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2005.5.11 yutaka)
 #ifdef ZLIB_VERSION
 	_snprintf_s(buf, sizeof(buf), _TRUNCATE, "ZLib %s", ZLIB_VERSION);
 #else
@@ -2519,19 +2519,19 @@
 #endif
 	SetDlgItemTextA(dlg, IDC_ZLIB_VERSION, buf);
 
-	// PuTTYのバージョンを設定する (2011.7.26 yutaka)
+	// PuTTY\x82̃o\x81[\x83W\x83\x87\x83\x93\x82\xF0\x90ݒ肷\x82\xE9 (2011.7.26 yutaka)
 	_snprintf_s(buf, sizeof(buf), _TRUNCATE, "PuTTY %s", putty_get_version());
 	SetDlgItemTextA(dlg, IDC_PUTTY_VERSION, buf);
 }
 
-// WM_MOUSEWHEEL は winuser.h ヘッダで宣言されていますが、#define _WIN32_WINNT 0x0400 が宣言されていないと認識されません。
+// 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
 #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のサブクラス化用
-static int g_deltaSumAboutDlg = 0;        // マウスホイールのDelta累積用
+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 LRESULT CALLBACK AboutDlgEditWindowProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) 
 {
@@ -2541,7 +2541,7 @@
 
 	switch (msg) {
 		case WM_KEYDOWN:
-			// Edit control上で CTRL+A を押下すると、テキストを全選択する。
+			// 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
 			if (wp == 'A' && GetKeyState(VK_CONTROL) < 0) {
 				PostMessage(hWnd, EM_SETSEL, 0, -1);
 				return 0;
@@ -2549,7 +2549,7 @@
 			break;
 
 		case WM_MOUSEWHEEL:
-			// CTRLorSHIFT + マウスホイールの場合、横スクロールさせる。
+			// 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
 			keys = GET_KEYSTATE_WPARAM(wp);
 			delta = GET_WHEEL_DELTA_WPARAM(wp);
 			page = keys & (MK_CONTROL | MK_SHIFT);
@@ -2603,15 +2603,15 @@
 		}
 #endif
 
-		// Edit controlは等幅フォントで表示したいので、別設定情報からフォントをセットする。
+		// 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
 		// (2014.5.5. yutaka)
 #if 0
 		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);
@@ -2627,7 +2627,7 @@
 		DlgAboutTextFont = NULL;
 #endif
 
-		// アイコンを動的にセット
+		// \x83A\x83C\x83R\x83\x93\x82𓮓I\x82ɃZ\x83b\x83g
 		{
 			int fuLoad = LR_DEFAULTCOLOR;
 			HICON hicon;
@@ -2646,7 +2646,7 @@
 		about_dlg_set_abouttext(pvar, dlg, SSH_DIGEST_SHA256);
 		SetFocus(GetDlgItem(dlg, IDOK));
 
-		// Edit controlをサブクラス化する。
+		// Edit control\x82\xF0\x83T\x83u\x83N\x83\x89\x83X\x89\xBB\x82\xB7\x82\xE9\x81B
 		g_deltaSumAboutDlg = 0;
 		g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc);
 
@@ -3086,7 +3086,7 @@
 		               pvar->settings.KnownHostsFiles);
 	}
 
-	// SSH2 HeartBeat(keep-alive)を追加 (2005.2.22 yutaka)
+	// SSH2 HeartBeat(keep-alive)\x82\xF0\x92lj\xC1 (2005.2.22 yutaka)
 	{
 		char buf[10];
 		_snprintf_s(buf, sizeof(buf), _TRUNCATE,
@@ -3708,7 +3708,7 @@
 
 static void free_ssh_key(void)
 {
-	// DSA_free(), RSA_free()にNULLを渡しても問題はなし。
+	// DSA_free(), RSA_free()\x82\xC9NULL\x82\xF0\x93n\x82\xB5\x82Ă\xE0\x96\xE2\x91\xE8\x82͂Ȃ\xB5\x81B
 	DSA_free(private_key.dsa);
 	private_key.dsa = NULL;
 	DSA_free(public_key.dsa);
@@ -3842,7 +3842,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)
@@ -3849,7 +3849,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;
@@ -4112,13 +4112,13 @@
 	case WM_INITDIALOG:
 		DragAcceptFiles(dlg, TRUE);
 
-		// SCPファイル送信先を表示する
+		// SCP\x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x90\xE6\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9
 		if (sendfiledir[0] == '\0') {
 			_snprintf_s(sendfiledir, sizeof(sendfiledir), _TRUNCATE, pvar->ts->ScpSendDir); // home directory
 		}
 		SetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir);
 
-		// SCPファイル受信先を表示する
+		// SCP\x83t\x83@\x83C\x83\x8B\x8E\xF3\x90M\x90\xE6\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9
 		if (recvdir[0] == '\0') {
 			_snprintf_s(recvdir, sizeof(recvdir), _TRUNCATE, "%s", pvar->ts->FileDir);
 		}
@@ -4166,7 +4166,7 @@
 #endif
 			ofn.lpstrTitle = "Choose a sending file with SCP";
 
-// WINVER がセットされないためにマクロが定義されないので、ここで定義する(2008.1.21 maya)
+// 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)
 #ifndef OFN_FORCESHOWHIDDEN
 /* from commdlg.h */
 #define OFN_FORCESHOWHIDDEN          0x10000000
@@ -4193,7 +4193,7 @@
 		case IDOK:
 			GetDlgItemTextA(dlg, IDC_SENDFILE_EDIT, sendfile, sizeof(sendfile));
 			if (sendfile[0] != '\0') {
-				// 送信パスを取り出し、teraterm.ini も合わせて更新する。
+				// \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
 				GetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir, sizeof(sendfiledir));
 				strncpy_s(pvar->ts->ScpSendDir, sizeof(pvar->ts->ScpSendDir), sendfiledir, _TRUNCATE);
 
@@ -4205,11 +4205,11 @@
 			return FALSE;
 
 		case IDCANCEL:
-			// 送信パスを取り出し、teraterm.ini も合わせて更新する。
+			// \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
 			GetDlgItemTextA(dlg, IDC_SENDFILE_TO, sendfiledir, sizeof(sendfiledir));
 			strncpy_s(pvar->ts->ScpSendDir, sizeof(pvar->ts->ScpSendDir), sendfiledir, _TRUNCATE);
 
-			// 受信パスに関しても更新する。(2013.8.18 yutaka)
+			// \x8E\xF3\x90M\x83p\x83X\x82Ɋւ\xB5\x82Ă\xE0\x8DX\x90V\x82\xB7\x82\xE9\x81B(2013.8.18 yutaka)
 			GetDlgItemTextA(dlg, IDC_RECVFILE_TO, recvdir, sizeof(recvdir));
 			strncpy_s(pvar->ts->FileDir, sizeof(pvar->ts->FileDir), recvdir, _TRUNCATE);
 
@@ -4216,7 +4216,7 @@
 			EndDialog(dlg, 0); // dialog close
 			return TRUE;
 
-		case IDC_RECV:  // ファイル受信
+		case IDC_RECV:  // \x83t\x83@\x83C\x83\x8B\x8E\xF3\x90M
 			GetDlgItemTextA(dlg, IDC_RECVFILE, szFileName, sizeof(szFileName));
 			if (szFileName[0] != '\0') {
 				char recvpath[MAX_PATH] = "";
@@ -4250,7 +4250,7 @@
 	return FALSE;
 }
 
-// マクロコマンド"scpsend"から呼び出すために、DLL外へエクスポートする。"ttxssh.def"ファイルに記載。
+// \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
 // (2008.1.1 yutaka)
 __declspec(dllexport) int CALLBACK TTXScpSendfile(char *filename, char *dstfile)
 {
@@ -4263,10 +4263,10 @@
 }
 
 
-// TTSSHの設定内容(known hosts file)を返す。
+// TTSSH\x82̐ݒ\xE8\x93\xE0\x97e(known hosts file)\x82\xF0\x95Ԃ\xB7\x81B
 //
-// return TRUE: 返却成功
-//        FALSE: 失敗
+// return TRUE: \x95ԋp\x90\xAC\x8C\xF7
+//        FALSE: \x8E\xB8\x94s
 // (2015.3.9 yutaka)
 __declspec(dllexport) int CALLBACK TTXReadKnownHostsFile(char *filename, int maxlen)
 {
@@ -4340,7 +4340,7 @@
 	                            (LONG_PTR) password_wnd_proc));
 }
 
-// bcrypt KDF形式で秘密鍵を保存する
+// bcrypt KDF\x8C`\x8E\xAE\x82Ŕ閧\x8C\xAE\x82\xF0\x95ۑ\xB6\x82\xB7\x82\xE9
 // based on OpenSSH 6.5:key_save_private(), key_private_to_blob2()
  static void save_bcrypt_private_key(char *passphrase, const TCHAR *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds)
 {
@@ -4377,7 +4377,7 @@
 	blocksize = get_cipher_block_size(cipher);
 	keylen = get_cipher_key_len(cipher);
 	ivlen = blocksize;
-	authlen = 0;  // TODO: とりあえず固定化
+	authlen = 0;  // TODO: \x82Ƃ肠\x82\xA6\x82\xB8\x8CŒ艻
 	key = calloc(1, keylen + ivlen);
 
 	if (strcmp(kdfname, "none") != 0) {
@@ -4389,9 +4389,9 @@
 		buffer_put_string(kdf, salt, SALT_LEN);
 		buffer_put_int(kdf, rounds);
 	}
-	// 暗号化の準備
-	// TODO: OpenSSH 6.5では -Z オプションで、暗号化アルゴリズムを指定可能だが、
-	// ここでは"AES256-CBC"に固定とする。
+	// \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
 	cipher_init_SSH2(&cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_ENCRYPT, 
 		get_cipher_EVP_CIPHER(cipher), 0, 0, pvar);
 	SecureZeroMemory(key, keylen + ivlen);
@@ -4403,7 +4403,7 @@
 	buffer_put_string(encoded, buffer_ptr(kdf), buffer_len(kdf));
 	buffer_put_int(encoded, 1);			/* number of keys */
 
-	// key_to_blob()を一時利用するため、Key構造体を初期化する。
+	// 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
 	keyblob.type = private_key.type;
 	keyblob.rsa = private_key.rsa;
 	keyblob.dsa = private_key.dsa;
@@ -4465,7 +4465,7 @@
 
 	len = buffer_len(blob);
 
-	// 秘密鍵をファイルに保存する。
+	// \x94閧\x8C\xAE\x82\xF0\x83t\x83@\x83C\x83\x8B\x82ɕۑ\xB6\x82\xB7\x82\xE9\x81B
 	fp = _tfopen(filename, _T("wb"));
 	if (fp == NULL) {
 		UTIL_get_lang_msgT("MSG_SAVE_KEY_OPENFILE_ERROR", uimsg1, _countof(uimsg1),
@@ -4699,7 +4699,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);
@@ -4850,7 +4850,7 @@
 			break;
 
 		case IDC_ED25519_TYPE | (BN_CLICKED << 16):
-			/* ED25519 ではビット数を指定できない。*/
+			/* ED25519 \x82ł̓r\x83b\x83g\x90\x94\x82\xF0\x8Ew\x92\xE8\x82ł\xAB\x82Ȃ\xA2\x81B*/
 			if (!isFixedLengthKey(key_type)) {
 				EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), FALSE);
 				saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);
@@ -5061,7 +5061,7 @@
 			TCHAR filter[128];
 			TCHAR title[128];
 
-			// パスフレーズのチェックを行う。パスフレーズは秘密鍵ファイルに付ける。
+			// \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
 			GetDlgItemTextA(dlg, IDC_KEY_EDIT, buf, sizeof(buf));
 			GetDlgItemTextA(dlg, IDC_CONFIRM_EDIT, buf_conf, sizeof(buf_conf));
 
@@ -5359,11 +5359,11 @@
 	}
 
 	switch (cmd) {
-	case 50430: // FIXME: ID_CONTROL_SENDBREAK(tt_res.h)を指定したいが、ヘッダをincludeすると、多重定義となる。
+	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
 		if (SSH_notify_break_signal(pvar))
 			return 1;
 		else
-			return 0;  // SSH2で処理されなかった場合は、本来の動作を行うべく、ゼロを返す。
+			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
 
 	case ID_SSHSCPMENU:
 		if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog,
@@ -5486,7 +5486,7 @@
 
 static void dquote_string(char *str, char *dst, int dst_len)
 {
-	// ",スペース,;,^A-^_ が含まれる場合にはクオートする
+	// ",\x83X\x83y\x81[\x83X,;,^A-^_ \x82\xAA\x8A܂܂\xEA\x82\xE9\x8Fꍇ\x82ɂ̓N\x83I\x81[\x83g\x82\xB7\x82\xE9
 	if (strchr(str, '"') != NULL ||
 	    strchr(str, ' ') != NULL ||
 	    strchr(str, ';') != NULL ||
@@ -5524,7 +5524,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);
 }
 
@@ -5558,7 +5558,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':
@@ -5573,9 +5573,9 @@
 			ssh_enable = 0;
 		}
 
-		// ホスト名で /ssh /1, /ssh  /2, /ssh1, /ssh2, /nossh, /telnet が
-		// 指定されたときは、ラジオボタンの SSH および SSH プロトコルバージョンを
-		// 適用するのをやめる (2007.11.1 maya)
+		// \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)
 		if (pvar->hostdlg_Enabled && ssh_enable == -1) {
 			strncat_s(cmd, cmdlen, " /ssh", _TRUNCATE);
 
@@ -5588,12 +5588,12 @@
 
 		}
 
-		// セッション複製の場合は、自動ログイン用パラメータを付ける。(2005.4.8 yutaka)
+		// \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)
 		if (strstr(buf, "DUPLICATE")) {
 			char mark[MAX_PATH];
 			char tmp[MAX_PATH*2];
 
-			// 自動ログインの場合は下記フラグが0のため、必要なコマンドを付加する。
+			// \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
 			if (!pvar->hostdlg_Enabled) {
 				_snprintf_s(tmp, sizeof(tmp), _TRUNCATE,
 					" /ssh /%d", pvar->settings.ssh_protocol_version);
@@ -5600,7 +5600,7 @@
 				strncat_s(cmd, cmdlen, tmp, _TRUNCATE);
 			}
 
-			// パスワードを覚えている場合のみ、コマンドラインに渡す。(2006.8.3 yutaka)
+			// \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)
 			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));
@@ -5726,7 +5726,7 @@
 		/* 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


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