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\x82A\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\x82Adisabled 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\x82T\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\x82T\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\x82I\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