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: