[Ttssh2-commit] [8616] TTMessageBoxW() を追加、一部利用するよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 3月 24日 (火) 00:54:27 JST


Revision: 8616
          https://osdn.net/projects/ttssh2/scm/svn/commits/8616
Author:   zmatsuo
Date:     2020-03-24 00:54:26 +0900 (Tue, 24 Mar 2020)
Log Message:
-----------
TTMessageBoxW() を追加、一部利用するよう修正

- MessageBox()の i18n 対応版
- TTMessageBoxW() を使用
  - ttssh/ttxssh.c
  - teraterm/teraterm/commlib.c
  - teraterm/ttpcmn/ttcmn.c
- GetI18nStrW() に戻り値を追加、文字数を返す
- TTGetLangStrW() 追加
  - GetI18nStrW() の動的バッファ版

Modified Paths:
--------------
    trunk/teraterm/common/CMakeLists.txt
    trunk/teraterm/common/common_static.v16.vcxproj
    trunk/teraterm/common/common_static.v8.vcproj
    trunk/teraterm/common/i18n.c
    trunk/teraterm/common/i18n.h
    trunk/teraterm/common/i18n_static.c
    trunk/teraterm/common/ttlib.c
    trunk/teraterm/common/ttlib.h
    trunk/teraterm/teraterm/commlib.c
    trunk/teraterm/ttpcmn/ttcmn.c
    trunk/ttssh2/ttxssh/ttxssh.c

Added Paths:
-----------
    trunk/teraterm/common/ttlib_static_cpp.cpp

-------------- next part --------------
Modified: trunk/teraterm/common/CMakeLists.txt
===================================================================
--- trunk/teraterm/common/CMakeLists.txt	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/CMakeLists.txt	2020-03-23 15:54:26 UTC (rev 8616)
@@ -10,13 +10,9 @@
   compat_win.cpp
   compat_win.h
   dlglib.c
-  dlglib.c
   dlglib.h
-  dlglib.h
   dlglib_cpp.cpp
-  dlglib_cpp.cpp
   dlglib_tmpl.cpp
-  dlglib_tmpl.cpp
   dllutil.cpp
   dllutil.h
   fileread.cpp
@@ -25,7 +21,6 @@
   getcontent.h
   i18n.h
   i18n_static.c
-  i18n_static.c
   layer_for_unicode.cpp
   layer_for_unicode.h
   layer_for_unicode_comctl32.cpp
@@ -37,6 +32,7 @@
   tmfc_property.cpp
   ttlib.h
   ttlib_static.c
+  ttlib_static_cpp.cpp
   win16api.c
   win16api.h
   )

Modified: trunk/teraterm/common/common_static.v16.vcxproj
===================================================================
--- trunk/teraterm/common/common_static.v16.vcxproj	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/common_static.v16.vcxproj	2020-03-23 15:54:26 UTC (rev 8616)
@@ -148,6 +148,7 @@
     <ClCompile Include="layer_for_unicode.cpp" />
     <ClCompile Include="layer_for_unicode_comctl32.cpp" />
     <ClCompile Include="ttlib_static.c" />
+    <ClCompile Include="ttlib_static_cpp.cpp" />
     <ClCompile Include="win16api.c" />
   </ItemGroup>
   <ItemGroup>

Modified: trunk/teraterm/common/common_static.v8.vcproj
===================================================================
--- trunk/teraterm/common/common_static.v8.vcproj	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/common_static.v8.vcproj	2020-03-23 15:54:26 UTC (rev 8616)
@@ -289,6 +289,10 @@
 			>
 		</File>
 		<File
+			RelativePath=".\ttlib_static_cpp.cpp"
+			>
+		</File>
+		<File
 			RelativePath=".\win16api.c"
 			>
 		</File>

Modified: trunk/teraterm/common/i18n.c
===================================================================
--- trunk/teraterm/common/i18n.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/i18n.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -35,12 +35,13 @@
 
 /**
  *	GetI18nStr() \x82\xCC unicode\x94\xC5
- *	@param	buf_len		\x95\xB6\x8E\x9A\x90\x94(\0\x8A܂\xDE)
+ *	@param[in]	buf_len		\x95\xB6\x8E\x9A\x90\x94(\0\x8A܂\xDE)
+ *	@reterm		\x83o\x83b\x83t\x83@\x82̕\xB6\x8E\x9A\x90\x94(L'\0'\x82\xF0\x8A܂\xDE)
  */
-DllExport void WINAPI GetI18nStrW(const char *section, const char *key, wchar_t *buf, int buf_len, const wchar_t *def,
-								  const char *iniFile)
+DllExport size_t WINAPI GetI18nStrW(const char *section, const char *key, wchar_t *buf, int buf_len, const wchar_t *def,
+									const char *iniFile)
 {
-	DWORD size;
+	size_t size;
 	if (pGetPrivateProfileStringW != NULL) {
 		wchar_t sectionW[64];
 		wchar_t keyW[128];
@@ -48,6 +49,8 @@
 		MultiByteToWideChar(CP_ACP, 0, section, -1, sectionW, _countof(sectionW));
 		MultiByteToWideChar(CP_ACP, 0, key, -1, keyW, _countof(keyW));
 		MultiByteToWideChar(CP_ACP, 0, iniFile, -1, iniFileW, _countof(iniFileW));
+		// The return value is the number of characters copied to the buffer,
+		// not including the terminating null character.
 		size = pGetPrivateProfileStringW(sectionW, keyW, def, buf, buf_len, iniFileW);
 		if (size == 0 && def == NULL) {
 			buf[0] = 0;
@@ -63,7 +66,8 @@
 		}
 		MultiByteToWideChar(CP_ACP, 0, tmp, -1, buf, buf_len);
 	}
-	RestoreNewLineW(buf);
+	size = RestoreNewLineW(buf);
+	return size;
 }
 
 /**

Modified: trunk/teraterm/common/i18n.h
===================================================================
--- trunk/teraterm/common/i18n.h	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/i18n.h	2020-03-23 15:54:26 UTC (rev 8616)
@@ -51,7 +51,7 @@
 	const wchar_t *default_text;	// key == NULL && default_text == NULL\x82̏ꍇ\x8FI\x92[
 } I18nTextInfo;
 
-DllExport void WINAPI GetI18nStrW(const char *section, const char *key, wchar_t *buf, int buf_len, const wchar_t *def, const char *iniFile);
+DllExport size_t WINAPI GetI18nStrW(const char *section, const char *key, wchar_t *buf, int buf_len, const wchar_t *def, const char *iniFile);
 DllExport void WINAPI GetI18nStr(const char *section, const char *key, PCHAR buf, int buf_len, const char *def, const char *iniFile);
 DllExport int WINAPI GetI18nLogfont(const char *section, const char *key, PLOGFONTA logfont, int ppi, const char *iniFile);
 DllExport int WINAPI SetI18nDlgStrs(const char *section, HWND hDlgWnd,

Modified: trunk/teraterm/common/i18n_static.c
===================================================================
--- trunk/teraterm/common/i18n_static.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/i18n_static.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -80,7 +80,7 @@
 {
 	UINT ADDSTRING;
 	UINT SETCURSEL;
-	int i;
+	size_t i;
 	char ClassName[32];
 	int r = GetClassNameA(GetDlgItem(hDlg, nIDDlgItem), ClassName, _countof(ClassName));
 	assert(r != 0);

Modified: trunk/teraterm/common/ttlib.c
===================================================================
--- trunk/teraterm/common/ttlib.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/ttlib.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -807,10 +807,16 @@
 	memcpy(Text, buf, size);
 }
 
-void RestoreNewLineW(wchar_t *Text)
+/**
+ *	\x83G\x83X\x83P\x81[\x83v\x95\xB6\x8E\x9A\x82\xF0\x8F\x88\x97\x9D\x82\xB7\x82\xE9
+ *	\\,\n,\t,\0 \x82\xF0\x92u\x82\xAB\x8A\xB7\x82\xA6\x82\xE9
+ *	@return		\x95\xB6\x8E\x9A\x90\x94\x81iL'\0'\x82\xF0\x8A܂\xDE)
+ */
+size_t RestoreNewLineW(wchar_t *Text)
 {
-	int i, j=0;
-	int size= wcslen(Text);
+	size_t i;
+	int j=0;
+	size_t size= wcslen(Text);
 	wchar_t *buf = (wchar_t *)_alloca((size+1) * sizeof(wchar_t));
 
 	memset(buf, 0, (size+1) * sizeof(wchar_t));
@@ -844,7 +850,9 @@
 		}
 	}
 	/* use memcpy to copy with '\0' */
-	memcpy(Text, buf, size * sizeof(wchar_t));
+	j++;	// \x95\xB6\x8E\x9A\x97\xF1\x92\xB7
+	memcpy(Text, buf, j * sizeof(wchar_t));
+	return j;
 }
 
 BOOL GetNthString(PCHAR Source, int Nth, int Size, PCHAR Dest)

Modified: trunk/teraterm/common/ttlib.h
===================================================================
--- trunk/teraterm/common/ttlib.h	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/common/ttlib.h	2020-03-23 15:54:26 UTC (rev 8616)
@@ -67,7 +67,7 @@
 void ParseStrftimeFileName(PCHAR FName, int destlen);
 void ConvFName(PCHAR HomeDir, PCHAR Temp, int templen, PCHAR DefExt, PCHAR FName, int destlen);
 void RestoreNewLine(PCHAR Text);
-void RestoreNewLineW(wchar_t *Text);
+size_t RestoreNewLineW(wchar_t *Text);
 BOOL GetNthString(PCHAR Source, int Nth, int Size, PCHAR Dest);
 void GetNthNum(PCHAR Source, int Nth, int far *Num);
 int GetNthNum2(PCHAR Source, int Nth, int defval);
@@ -147,6 +147,17 @@
 	COM_FLOWCTRL,
 };
 
+typedef struct {
+	const char *section;			// \x83Z\x83N\x83V\x83\x87\x83\x93\x96\xBC
+	const char *title_key;			// \x83^\x83C\x83g\x83\x8B(NULL\x82̂Ƃ\xAB\x81Atitle_default \x82\xF0\x8F\xED\x82Ɏg\x97p)
+	const wchar_t *title_default;	//   lng \x83t\x83@\x83C\x83\x8B\x82Ɍ\xA9\x82‚\xA9\x82\xE7\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x8Eg\x97p
+	const char *message_key;		// \x83\x81\x83b\x83Z\x81[\x83W
+	const wchar_t *message_default;	//   lng \x83t\x83@\x83C\x83\x8B\x82Ɍ\xA9\x82‚\xA9\x82\xE7\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x8Eg\x97p
+} TTMessageBoxInfoW;
+
+int TTMessageBoxW(HWND hWnd, const TTMessageBoxInfoW *info, UINT uType, const char *UILanguageFile, ...);
+wchar_t *TTGetLangStrW(const char *section, const char *key, const wchar_t *def, const char *UILanguageFile);
+
 #ifdef __cplusplus
 }
 #endif

Added: trunk/teraterm/common/ttlib_static_cpp.cpp
===================================================================
--- trunk/teraterm/common/ttlib_static_cpp.cpp	                        (rev 0)
+++ trunk/teraterm/common/ttlib_static_cpp.cpp	2020-03-23 15:54:26 UTC (rev 8616)
@@ -0,0 +1,76 @@
+
+#include <windows.h>
+#include <string.h>
+#if !defined(_CRTDBG_MAP_ALLOC)
+#define _CRTDBG_MAP_ALLOC
+#endif
+#include <stdlib.h>
+#include <crtdbg.h>
+
+
+#include "i18n.h"
+#include "layer_for_unicode.h"
+#include "asprintf.h"
+
+#include "ttlib.h"
+
+/**
+ *	GetI18nStrW() \x82̓\xAE\x93I\x83o\x83b\x83t\x83@\x94\xC5
+ */
+wchar_t *TTGetLangStrW(const char *section, const char *key, const wchar_t *def, const char *UILanguageFile)
+{
+	wchar_t *buf = (wchar_t *)malloc(MAX_UIMSG * sizeof(wchar_t));
+	size_t size = GetI18nStrW(section, key, buf, MAX_UIMSG, def, UILanguageFile);
+	buf = (wchar_t *)realloc(buf, size * sizeof(wchar_t));
+	return buf;
+}
+
+/**
+ *	MessageBox\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9
+ *
+ *	@param[in]	hWnd			\x90e window
+ *	@param[in]	info			\x83^\x83C\x83g\x83\x8B\x81A\x83\x81\x83b\x83Z\x81[\x83W
+ *	@param[in]	uType			MessageBox\x82\xCC uType
+ *	@param[in]	UILanguageFile	lng\x83t\x83@\x83C\x83\x8B
+ *	@param[in]	...				\x83t\x83H\x81[\x83}\x83b\x83g\x88\xF8\x90\x94
+ *
+ *	info.message \x82\xF0\x8F\x91\x8E\xAE\x89\xBB\x95\xB6\x8E\x9A\x97\xF1\x82Ƃ\xB5\x82āA
+ *	UILanguageFile\x82\xE6\x82\xE8\x8C\xE3\x82\xEB\x82̈\xF8\x90\x94\x82\xF0\x8Fo\x97͂\xB7\x82\xE9
+ *
+ *	info.message_key, info.message_default \x97\xBC\x95\xFB\x82Ƃ\xE0NULL\x82̏ꍇ
+ *		\x89•ψ\xF8\x90\x94\x82\xCC1\x82–ڂ\xF0\x8F\x91\x8E\xAE\x89\xBB\x95\xB6\x8E\x9A\x97\xF1\x82Ƃ\xB5\x82Ďg\x97p\x82\xB7\x82\xE9
+ */
+int TTMessageBoxW(HWND hWnd, const TTMessageBoxInfoW *info, UINT uType, const char *UILanguageFile, ...)
+{
+	const char *section = info->section;
+	wchar_t *title;
+	if (info->title_key == NULL) {
+		title = _wcsdup(info->title_default);
+	}
+	else {
+		title = TTGetLangStrW(section, info->title_key, info->title_default, UILanguageFile);
+	}
+
+	wchar_t *message = NULL;
+	if (info->message_key == NULL && info->message_default == NULL) {
+		wchar_t *format;
+		va_list ap;
+		va_start(ap, UILanguageFile);
+		format = va_arg(ap, wchar_t *);
+		vaswprintf(&message, format, ap);
+	}
+	else {
+		wchar_t *format = TTGetLangStrW(section, info->message_key, info->message_default, UILanguageFile);
+		va_list ap;
+		va_start(ap, UILanguageFile);
+		vaswprintf(&message, format, ap);
+		free(format);
+	}
+
+	int r = _MessageBoxW(hWnd, message, title, uType);
+
+	free(title);
+	free(message);
+
+	return r;
+}

Modified: trunk/teraterm/teraterm/commlib.c
===================================================================
--- trunk/teraterm/teraterm/commlib.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/teraterm/commlib.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 1994-1998 T. Teranishi
- * (C) 2005-2017 TeraTerm Project
+ * (C) 2005-2020 TeraTerm Project
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -47,6 +47,9 @@
 #include <time.h>
 #include <locale.h>
 
+#include "ttlib.h"
+#include "codeconv.h"
+
 static SOCKET OpenSocket(PComVar);
 static void AsyncConnect(PComVar);
 static int CloseSocket(SOCKET);
@@ -288,7 +291,8 @@
 
 void CommOpen(HWND HW, PTTSet ts, PComVar cv)
 {
-	char ErrMsg[21+256];
+	char ErrMsg[21 + 256];
+	wchar_t ErrMsgW[21 + 256];
 	char P[50+256];
 
 	MSG Msg;
@@ -297,8 +301,6 @@
 
 	BOOL InvalidHost;
 
-	char uimsg[MAX_UIMSG];
-
 	// \x83z\x83X\x83g\x96\xBC\x82\xAA\x96\xBC\x91O\x95t\x82\xAB\x83p\x83C\x83v\x82\xA9\x82ǂ\xA4\x82\xA9\x82𒲂ׂ\xE9\x81B
 	if (ts->PortType == IdTCPIP) {
 		if (CheckNamedPipeFormat(ts->HostName, strlen(ts->HostName)) == 0) {
@@ -373,9 +375,15 @@
 			}
 			if (! LoadWinsock()) {
 				if (cv->NoMsg==0) {
-					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-					get_lang_msg("MSG_WINSOCK_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot use winsock", ts->UILanguageFile);
-					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"Tera Term",
+						"MSG_TT_ERROR", L"Tera Term: Error",
+						"MSG_WINSOCK_ERROR", L"Cannot use winsock",
+					};
+					TTMessageBoxW(
+						cv->HWin,
+						&info, (MB_TASKMODAL | MB_ICONEXCLAMATION),
+						ts->UILanguageFile);
 				}
 				InvalidHost = TRUE;
 			}
@@ -429,9 +437,13 @@
 
 			if (InvalidHost) {
 				if (cv->NoMsg==0) {
-					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-					get_lang_msg("MSG_INVALID_HOST_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Invalid host", ts->UILanguageFile);
-					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"Tera Term",
+						"MSG_TT_ERROR", L"Tera Term: Error",
+						"MSG_INVALID_HOST_ERROR", L"Invalid host"
+					};
+					TTMessageBoxW(
+						cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile);
 				}
 				goto BreakSC;
 			}
@@ -457,26 +469,34 @@
 			cv->ComID = PCreateFile(P, GENERIC_READ | GENERIC_WRITE, 0, NULL,
 			                        OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
 			if (cv->ComID == INVALID_HANDLE_VALUE ) {
-				DWORD err = GetLastError();
+				if (cv->NoMsg==0) {
+					DWORD err = GetLastError();
+					wchar_t *format;
+					wchar_t *PW = ToWcharA(&P[4]);
+					static const TTMessageBoxInfoW info = {
+						"Tera Term",
+						"MSG_TT_ERROR", L"Tera Term: Error",
+					};
 
-				switch (err) {
-				case ERROR_FILE_NOT_FOUND:
-					get_lang_msg("MSG_CANTOPEN_ERROR_NOTFOUND", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Not found.", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]);
-					break;
-				case ERROR_ACCESS_DENIED:
-					get_lang_msg("MSG_CANTOPEN_ERROR_DENIED", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Access denied.", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]);
-					break;
-				default:
-					get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. (0x%08x)", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4], err);
-					break;
-				}
+					switch (err) {
+					case ERROR_FILE_NOT_FOUND:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR_NOTFOUND", L"Cannot open %s. Not found.", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW);
+						break;
+					case ERROR_ACCESS_DENIED:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR_DENIED", L"Cannot open %s. Access denied.", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW);
+						break;
+					default:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR", L"Cannot open %s. (0x%08x)", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW, err);
+						break;
+					}
+					free(format);
+					free(PW);
 
-				if (cv->NoMsg==0) {
-					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-					MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+					TTMessageBoxW(
+						cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile, ErrMsgW);
 				}
 				InvalidHost = TRUE;
 			}
@@ -503,9 +523,13 @@
 			InvalidHost = (cv->ComID == INVALID_HANDLE_VALUE);
 			if (InvalidHost) {
 				if (cv->NoMsg==0) {
-					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-					get_lang_msg("MSG_CANTOPEN_FILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open file", ts->UILanguageFile);
-					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"Tera Term",
+						"MSG_TT_ERROR", L"Tera Term: Error",
+						"MSG_CANTOPEN_FILE_ERROR", L"Cannot open file"
+					};
+					TTMessageBoxW(
+						cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile);
 				}
 			}
 			else {
@@ -523,15 +547,18 @@
 
 			// \x96\xBC\x91O\x95t\x82\xAB\x83p\x83C\x83v\x82\xAA\x90\xB3\x82\xB5\x82\xA2\x8F\x91\x8E\xAE\x82\xA9\x82\xF0\x83`\x83F\x83b\x83N\x82\xB7\x82\xE9\x81B
 			if (CheckNamedPipeFormat(P, strlen(P)) < 0) {
+				static const TTMessageBoxInfoW info = {
+					"Tera Term",
+					"MSG_TT_ERROR", L"Tera Term: Error",
+				};
 				InvalidHost = TRUE;
 
-				_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE,
-					"Invalid pipe name (%d)\n\n"
-					"A valid pipe name has the form\n"
-					"\"\\\\<ServerName>\\pipe\\<PipeName>\"",
+				_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE,
+					L"Invalid pipe name (%d)\n\n"
+					L"A valid pipe name has the form\n"
+					L"\"\\\\<ServerName>\\pipe\\<PipeName>\"",
 					GetLastError());
-				get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-				MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+				TTMessageBoxW(cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile, ErrMsgW);
 				break;
 			}
 
@@ -539,30 +566,38 @@
 			                        0,  // \x83u\x83\x8D\x83b\x83L\x83\x93\x83O\x83\x82\x81[\x83h\x82ɂ\xB7\x82\xE9(FILE_FLAG_OVERLAPPED \x82͎w\x92肵\x82Ȃ\xA2)
 			                        NULL);
 			if (cv->ComID == INVALID_HANDLE_VALUE ) {
-				DWORD err = GetLastError();
+				if (cv->NoMsg==0) {
+					DWORD err = GetLastError();
+					wchar_t *format;
+					wchar_t* PW = ToWcharA(&P[4]);
+					static const TTMessageBoxInfoW info = {
+						"Tera Term",
+						"MSG_TT_ERROR", L"Tera Term: Error",
+					};
 
-				switch (err) {
-				case ERROR_FILE_NOT_FOUND:
-					get_lang_msg("MSG_CANTOPEN_ERROR_NOTFOUND", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Not found.", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, P);
-					break;
-				case ERROR_ACCESS_DENIED:
-					get_lang_msg("MSG_CANTOPEN_ERROR_DENIED", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Access denied.", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, P);
-					break;
-				case ERROR_PIPE_BUSY:
-					get_lang_msg("MSG_CANTOPEN_ERROR_PIPEBUSY", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Pipe is busy.", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, P);
-					break;
-				default:
-					get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. (0x%08x)", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, P, err);
-					break;
-				}
+					switch (err) {
+					case ERROR_FILE_NOT_FOUND:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR_NOTFOUND", L"Cannot open %s. Not found.", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW);
+						break;
+					case ERROR_ACCESS_DENIED:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR_DENIED", L"Cannot open %s. Access denied.", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW);
+						break;
+					case ERROR_PIPE_BUSY:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR_PIPEBUSY", L"Cannot open %s. Pipe is busy.", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW);
+						break;
+					default:
+						format = TTGetLangStrW("Tera Term", "MSG_CANTOPEN_ERROR", L"Cannot open %s. (0x%08x)", ts->UILanguageFile);
+						_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, format, PW, err);
+						break;
+					}
+					free(format);
+					free(PW);
 
-				if (cv->NoMsg==0) {
-					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-					MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+					TTMessageBoxW(
+						cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile, ErrMsgW);
 				}
 				InvalidHost = TRUE;
 			}
@@ -664,8 +699,9 @@
 void CommStart(PComVar cv, LONG lParam, PTTSet ts)
 {
 	char ErrMsg[31];
+	wchar_t ErrMsgW[31];
 	char Temp[20];
-	char uimsg[MAX_UIMSG];
+	wchar_t UIMsgW[MAX_UIMSG];
 
 	if (! cv->Open ) {
 		return;
@@ -684,20 +720,20 @@
 			ErrMsg[0] = 0;
 			switch (HIWORD(lParam)) {
 				case WSAECONNREFUSED:
-					get_lang_msg("MSG_COMM_REFUSE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Connection refused", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, "%s", ts->UIMsg);
+					get_lang_msgW("MSG_COMM_REFUSE_ERROR", UIMsgW, _countof(UIMsgW), L"Connection refused", ts->UILanguageFile);
+					_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, L"%s", UIMsgW);
 					break;
 				case WSAENETUNREACH:
-					get_lang_msg("MSG_COMM_REACH_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Network cannot be reached", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, "%s", ts->UIMsg);
+					get_lang_msgW("MSG_COMM_REACH_ERROR", UIMsgW, _countof(UIMsgW), L"Network cannot be reached", ts->UILanguageFile);
+					_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, L"%s", UIMsgW);
 					break;
 				case WSAETIMEDOUT:
-					get_lang_msg("MSG_COMM_CONNECT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Connection timed out", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, "%s", ts->UIMsg);
+					get_lang_msgW("MSG_COMM_CONNECT_ERROR", UIMsgW, _countof(UIMsgW), L"Connection timed out", ts->UILanguageFile);
+					_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, L"%s", UIMsgW);
 					break;
 				default:
-					get_lang_msg("MSG_COMM_TIMEOUT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot connect the host", ts->UILanguageFile);
-					_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, "%s", ts->UIMsg);
+					get_lang_msgW("MSG_COMM_TIMEOUT_ERROR", UIMsgW, _countof(UIMsgW), L"Cannot connect the host", ts->UILanguageFile);
+					_snwprintf_s(ErrMsgW, _countof(ErrMsgW), _TRUNCATE, L"%s", UIMsgW);
 			}
 			if (HIWORD(lParam)>0) {
 				/* connect() failed */
@@ -719,8 +755,15 @@
 					/* trying with all protocol family are failed */
 					if (cv->NoMsg==0)
 					{
-						get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-						MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+						static const TTMessageBoxInfoW info = {
+							"Tera Term",
+							"MSG_TT_ERROR", L"Tera Term: Error",
+							NULL, NULL
+						};
+						TTMessageBoxW(
+							cv->HWin,
+							&info, (MB_TASKMODAL | MB_ICONEXCLAMATION),
+							ts->UILanguageFile, ErrMsgW);
 					}
 					PostMessage(cv->HWin, WM_USER_COMMNOTIFY, 0, FD_CLOSE);
 					cv->RetryWithOtherProtocol = FALSE;
@@ -746,9 +789,12 @@
 
 			/* create the receiver thread */
 			if (_beginthread(CommThread,0,cv) == -1) {
-				get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-				get_lang_msg("MSG_TT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Can't create thread", ts->UILanguageFile);
-				MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+				static const TTMessageBoxInfoW info = {
+					"Tera Term",
+					"MSG_TT_ERROR", L"Tera Term: Error",
+					"MSG_TT_ERROR", L"Can't create thread"
+				};
+				TTMessageBoxW(cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile);
 			}
 			break;
 
@@ -769,9 +815,12 @@
 
 			/* create the receiver thread */
 			if (_beginthread(NamedPipeThread,0,cv) == -1) {
-				get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
-				get_lang_msg("MSG_TT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Can't create thread", ts->UILanguageFile);
-				MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
+				static const TTMessageBoxInfoW info = {
+					"Tera Term",
+					"MSG_TT_ERROR", L"Tera Term: Error",
+					"MSG_TT_ERROR", L"Can't create thread"
+				};
+				TTMessageBoxW(cv->HWin, &info, MB_TASKMODAL | MB_ICONEXCLAMATION, ts->UILanguageFile);
 			}
 			break;
 	}

Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/teraterm/ttpcmn/ttcmn.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -140,14 +140,16 @@
 	char path[1024];
 	STARTUPINFO si;
 	PROCESS_INFORMATION pi;
-	char uimsg[MAX_UIMSG];
 	int ret;
 
-	get_lang_msg("MSG_TT_TAKE_EFFECT", uimsg, sizeof(uimsg),
-		"This option takes effect the next time a session is started.\n"
-		"Are you sure that you want to relaunch Tera Term?"
-		, ts->UILanguageFile);
-	ret = MessageBox(hwnd, uimsg, "Tera Term: Configuration Warning", MB_YESNO | MB_ICONEXCLAMATION | MB_DEFBUTTON2);
+	static const TTMessageBoxInfoW info = {
+		"Tera Term",
+		NULL, L"Tera Term: Configuration Warning",
+		"MSG_TT_TAKE_EFFECT",
+		L"This option takes effect the next time a session is started.\n"
+		L"Are you sure that you want to relaunch Tera Term?"
+	};
+	ret = TTMessageBoxW(hwnd, &info, MB_YESNO | MB_ICONEXCLAMATION | MB_DEFBUTTON2, ts->UILanguageFile);
 	if (ret != IDYES)
 		return;
 
@@ -1184,11 +1186,11 @@
 	HWin = GetDesktopWindow();
 	if (_HtmlHelpW(HWin, HelpFN, Command, Data) == NULL) {
 		// \x83w\x83\x8B\x83v\x82\xAA\x8AJ\x82\xAF\x82Ȃ\xA9\x82\xC1\x82\xBD
-		wchar_t buf[MAX_PATH];
-		get_lang_msgW("MSG_OPENHELP_ERROR", uimsg, _countof(uimsg),
-					  L"Can't open HTML help file(%s).", UILanguageFile);
-		_snwprintf_s(buf, _countof(buf), _TRUNCATE, uimsg, HelpFN);
-		_MessageBoxW(HWin, buf, L"Tera Term: HTML help", MB_OK | MB_ICONERROR);
+		static const TTMessageBoxInfoW info = {
+			"Tera Term",
+			NULL, L"Tera Term: HTML help",
+			"MSG_OPENHELP_ERROR", L"Can't open HTML help file(%s)." };
+		TTMessageBoxW(HWin, &info, MB_OK | MB_ICONERROR, UILanguageFile, HelpFN);
 		return;
 	}
 }

Modified: trunk/ttssh2/ttxssh/ttxssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.c	2020-03-23 14:16:42 UTC (rev 8615)
+++ trunk/ttssh2/ttxssh/ttxssh.c	2020-03-23 15:54:26 UTC (rev 8616)
@@ -1317,7 +1317,6 @@
 	WORD ComPortTable[MAXCOMPORT];
 	static char *ComPortDesc[MAXCOMPORT];
 	int comports;
-	BOOL Ok;
 	static HWND hwndHostname     = NULL; // HOSTNAME dropdown
 	static HWND hwndHostnameEdit = NULL; // Edit control on HOSTNAME dropdown
 
@@ -1497,17 +1496,20 @@
 			GetHNRec = (PGetHNRec) GetWindowLongPtr(dlg, DWLP_USER);
 			if (GetHNRec != NULL) {
 				if (IsDlgButtonChecked(dlg, IDC_HOSTTCPIP)) {
+					BOOL Ok;
 					char afstr[BUFSIZ];
 					i = GetDlgItemInt(dlg, IDC_HOSTTCPPORT, &Ok, FALSE);
-					if (Ok) {
-						GetHNRec->TCPPort = i;
-					} else {
-						UTIL_get_lang_msg("MSG_TCPPORT_NAN_ERROR", pvar,
-						                  "The TCP port must be a number.");
-						MessageBox(dlg, pvar->ts->UIMsg,
-						           "Tera Term", MB_OK | MB_ICONEXCLAMATION);
+					if (!Ok) {
+						// TODO IDC_HOSTTCPPORT\x82͐\x94\x92l\x82\xB5\x82\xA9\x93\xFC\x97͂ł\xAB\x82Ȃ\xA2\x81A\x95s\x97v?
+						static const TTMessageBoxInfoW info = {
+							"TTSSH",
+							NULL, L"Tera Term",
+							"MSG_TCPPORT_NAN_ERROR", L"The TCP port must be a number."
+						};
+						TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 						return TRUE;
 					}
+					GetHNRec->TCPPort = i;
 #define getaf(str) \
 ((strcmp((str), "IPv6") == 0) ? AF_INET6 : \
  ((strcmp((str), "IPv4") == 0) ? AF_INET : AF_UNSPEC))
@@ -1897,13 +1899,12 @@
 					pvar->settings.ssh_protocol_version = 2;
 
 				} else {
-					char buf[1024];
-
-					UTIL_get_lang_msg("MSG_UNKNOWN_OPTION_ERROR", pvar,
-					                  "Unrecognized command-line option: %s");
-					_snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, option);
-
-					MessageBox(NULL, buf, "TTSSH", MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						NULL, L"TTSSH",
+						"MSG_UNKNOWN_OPTION_ERROR", L"Unrecognized command-line option: %s"
+					};
+					TTMessageBoxW(NULL, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile, option);
 				}
 
 			// 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)
@@ -3155,12 +3156,12 @@
 		int err = CommDlgExtendedError();
 
 		if (err != 0) {
-			char buf[1024];
-			UTIL_get_lang_msg("MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", pvar,
-			                  "Unable to display file dialog box: error %d");
-			_snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, err);
-			MessageBox(parent, buf, "TTSSH Error",
-			           MB_OK | MB_ICONEXCLAMATION);
+			static const TTMessageBoxInfoW info = {
+				"TTSSH",
+				NULL, L"TTSSH Error",
+				"MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", L"Unable to display file dialog box: error %d"
+			};
+			TTMessageBoxW(parent, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile, err);
 		}
 
 		return 0;
@@ -4021,7 +4022,6 @@
 	unsigned char *cp = NULL;
 	unsigned int len, check;
 	FILE *fp;
-	char uimsg[MAX_UIMSG];
 
 	b = buffer_init();
 	kdf = buffer_init();
@@ -4131,20 +4131,22 @@
 	// \x94閧\x8C\xAE\x82\xF0\x83t\x83@\x83C\x83\x8B\x82ɕۑ\xB6\x82\xB7\x82\xE9\x81B
 	fp = fopen(filename, "wb");
 	if (fp == NULL) {
-		UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
-		                  "Can't open key file");
-		strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-		UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-		MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+		static const TTMessageBoxInfoW info = {
+			"TTSSH",
+			"MSG_ERROR", L"ERROR",
+			"MSG_SAVE_KEY_OPENFILE_ERROR", L"Can't open key file"
+		};
+		TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 		goto ed25519_error;
 	}
 	n = fwrite(buffer_ptr(blob), buffer_len(blob), 1, fp);
 	if (n != 1) {
-		UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar,
-		                  "Can't open key file");
-		strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-		UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-		MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+		static const TTMessageBoxInfoW info = {
+			"TTSSH",
+			"MSG_ERROR", L"ERROR",
+			"MSG_SAVE_KEY_WRITEFILE_ERROR", L"Can't open key file"
+		};
+		TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 	}
 	fclose(fp);
 
@@ -4242,10 +4244,12 @@
 				case KEY_RSA:
 				case KEY_DSA:
 					if (bits < ((key_type==KEY_DSA)?SSH_DSA_MINIMUM_KEY_SIZE:SSH_RSA_MINIMUM_KEY_SIZE)) {
-						UTIL_get_lang_msg("MSG_KEYBITS_MIN_ERROR", pvar,
-						                  "The key bits is too small.");
-						MessageBox(dlg, pvar->ts->UIMsg,
-						           "Tera Term", MB_OK | MB_ICONEXCLAMATION);
+						static const TTMessageBoxInfoW info = {
+							"TTSSH",
+							NULL, L"Tera Term",
+							"MSG_KEYBITS_MIN_ERROR", L"The key bits is too small."
+						};
+						TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 						return TRUE;
 					}
 					break;
@@ -4541,11 +4545,12 @@
 			// saving public key file
 			fp = fopen(filename, "wb");
 			if (fp == NULL) {
-				UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
-				                  "Can't open key file");
-				strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-				UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-				MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+				static const TTMessageBoxInfoW info = {
+					"TTSSH",
+					"MSG_ERROR", L"ERROR",
+					"MSG_SAVE_KEY_OPENFILE_ERROR", L"Can't open key file"
+				};
+				TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 				break;
 			}
 
@@ -4666,21 +4671,23 @@
 
 			// check matching
 			if (strcmp(buf, buf_conf) != 0) {
-				UTIL_get_lang_msg("MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", pvar,
-				                  "Two passphrases don't match.");
-				strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-				UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-				MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+				static const TTMessageBoxInfoW info = {
+					"TTSSH",
+					"MSG_ERROR", L"ERROR",
+					"MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", L"Two passphrases don't match."
+				};
+				TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 				break;
 			}
 
 			// check empty-passphrase (this is warning level)
 			if (buf[0] == '\0') {
-				UTIL_get_lang_msg("MSG_SAVE_PRIVATEKEY_EMPTY_WARN", pvar,
-				                  "Are you sure that you want to use a empty passphrase?");
-				strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-				UTIL_get_lang_msg("MSG_WARNING", pvar, "WARNING");
-				ret = MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_YESNO | MB_ICONWARNING);
+				static const TTMessageBoxInfoW info = {
+					"TTSSH",
+					"MSG_WARNING", L"WARNING",
+					"MSG_SAVE_PRIVATEKEY_EMPTY_WARN", L"Are you sure that you want to use a empty passphrase?",
+				};
+				ret = TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 				if (ret == IDNO)
 					break;
 			}
@@ -4689,17 +4696,21 @@
 			if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
 				rounds = GetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, NULL, FALSE);
 				if (rounds < SSH_KEYGEN_MINIMUM_ROUNDS) {
-					UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MIN_ERROR", pvar,
-					                  "The number of rounds is too small.");
-					MessageBox(dlg, pvar->ts->UIMsg,
-					           "Tera Term", MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						NULL, L"Tera Term",
+						"MSG_BCRYPT_ROUNDS_MIN_ERROR", L"The number of rounds is too small."
+					};
+					TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 					break;
 				}
 				if (rounds > SSH_KEYGEN_MAXIMUM_ROUNDS) {
-					UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MAX_ERROR", pvar,
-					                  "The number of rounds is too large.");
-					MessageBox(dlg, pvar->ts->UIMsg,
-					           "Tera Term", MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						NULL, L"Tera Term",
+						"MSG_BCRYPT_ROUNDS_MAX_ERROR", L"The number of rounds is too large."
+					};
+					TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 					break;
 				}
 			}
@@ -4872,11 +4883,12 @@
 				// saving private key file (binary mode)
 				fp = fopen(filename, "wb");
 				if (fp == NULL) {
-					UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
-					                  "Can't open key file");
-					strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-					UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-					MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						"MSG_ERROR", L"ERROR",
+						"MSG_SAVE_KEY_OPENFILE_ERROR", L"Can't open key file"
+					};
+					TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 					break;
 				}
 				fwrite(buffer_ptr(enc), buffer_len(enc), 1, fp);
@@ -4913,11 +4925,12 @@
 
 				fp = fopen(filename, "w");
 				if (fp == NULL) {
-					UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar,
-					                  "Can't open key file");
-					strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-					UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-					MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						"MSG_ERROR", L"ERROR",
+						"MSG_SAVE_KEY_OPENFILE_ERROR", L"Can't open key file"
+					};
+					TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 					break;
 				}
  
@@ -4935,11 +4948,12 @@
 					break;
 				}
 				if (ret == 0) {
-					UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar,
-					                  "Can't open key file");
-					strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-					UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR");
-					MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+					static const TTMessageBoxInfoW info = {
+						"TTSSH",
+						"MSG_ERROR", L"ERROR",
+						"MSG_SAVE_KEY_WRITEFILE_ERROR", L"Can't open key file"
+					};
+					TTMessageBoxW(dlg, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 				}
 				fclose(fp);
 			}
@@ -4958,8 +4972,6 @@
 
 static int PASCAL TTXProcessCommand(HWND hWin, WORD cmd)
 {
-	char uimsg[MAX_UIMSG];
-
 	if (pvar->fatal_error) {
 		return 0;
 	}
@@ -4975,11 +4987,12 @@
 		UTIL_SetDialogFont();
 		if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog,
 			(LPARAM) pvar) == -1) {
-			UTIL_get_lang_msg("MSG_CREATEWINDOW_SCP_ERROR", pvar,
-			                  "Unable to display SCP dialog box.");
-			strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-			UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
-			MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+			static const TTMessageBoxInfoW info = {
+				"TTSSH",
+				"MSG_TTSSH_ERROR", L"TTSSH Error",
+				"MSG_CREATEWINDOW_SCP_ERROR", L"Unable to display SCP dialog box."
+			};
+			TTMessageBoxW(hWin, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 		}
 		return 1;
 
@@ -4987,11 +5000,12 @@
 		UTIL_SetDialogFont();
 		if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator,
 			(LPARAM) pvar) == -1) {
-			UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar,
-			                  "Unable to display Key Generator dialog box.");
-			strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-			UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
-			MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+			static const TTMessageBoxInfoW info = {
+				"TTSSH",
+				"MSG_TTSSH_ERROR", L"TTSSH Error",
+				"MSG_CREATEWINDOW_KEYGEN_ERROR", L"Unable to display Key Generator dialog box."
+			};
+			TTMessageBoxW(hWin, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 		}
 		return 1;
 
@@ -4999,11 +5013,12 @@
 		UTIL_SetDialogFont();
 		if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_ABOUTDIALOG),
 		                   hWin, TTXAboutDlg, (LPARAM) pvar) == -1) {
-			UTIL_get_lang_msg("MSG_CREATEWINDOW_ABOUT_ERROR", pvar,
-			                  "Unable to display About dialog box.");
-			strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-			UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
-			MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+			static const TTMessageBoxInfoW info = {
+				"TTSSH",
+				"MSG_TTSSH_ERROR", L"TTSSH Error",
+				"MSG_CREATEWINDOW_ABOUT_ERROR", L"Unable to display About dialog box."
+			};
+			TTMessageBoxW(hWin, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 		}
 		return 1;
 	case ID_SSHAUTH:
@@ -5014,11 +5029,12 @@
 		UTIL_SetDialogFont();
 		if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSETUP),
 		                   hWin, TTXSetupDlg, (LPARAM) pvar) == -1) {
-			UTIL_get_lang_msg("MSG_CREATEWINDOW_SETUP_ERROR", pvar,
-			                  "Unable to display TTSSH Setup dialog box.");
-			strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE);
-			UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error");
-			MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION);
+			static const TTMessageBoxInfoW info = {
+				"TTSSH",
+				"MSG_TTSSH_ERROR", L"TTSSH Error",
+				"MSG_CREATEWINDOW_SETUP_ERROR", L"Unable to display TTSSH Setup dialog box."
+			};
+			TTMessageBoxW(hWin, &info, MB_OK | MB_ICONEXCLAMATION, pvar->ts->UILanguageFile);
 		}
 		return 1;
 	case ID_SSHAUTHSETUPMENU:


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