From scmnotify @ osdn.net Sun Jun 6 22:56:43 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 06 Jun 2021 22:56:43 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkyOTldIOODgOOCpuODs+ODreODvOODiQ==?= =?utf-8?b?5pyA5paw54mI44KSNC4xMDbjgavmm7TmlrA=?= Message-ID: <1622987803.716028.1729.nullmailer@users.osdn.me> Revision: 9299 https://osdn.net/projects/ttssh2/scm/svn/commits/9299 Author: zmatsuo Date: 2021-06-06 22:56:43 +0900 (Sun, 06 Jun 2021) Log Message: ----------- ダウンロード最新版を4.106に更新 - 4.105 -> 4.106 Modified Paths: -------------- trunk/doc/web/index.html.en trunk/doc/web/index.html.ja -------------- next part -------------- Modified: trunk/doc/web/index.html.en =================================================================== --- trunk/doc/web/index.html.en 2021-05-31 11:19:45 UTC (rev 9298) +++ trunk/doc/web/index.html.en 2021-06-06 13:56:43 UTC (rev 9299) @@ -67,7 +67,7 @@

Download

-Latest version is available from OSDN download page. Current latest release is 4.105. +Latest version is available from OSDN download page. Current latest release is 4.106.

Modified: trunk/doc/web/index.html.ja =================================================================== --- trunk/doc/web/index.html.ja 2021-05-31 11:19:45 UTC (rev 9298) +++ trunk/doc/web/index.html.ja 2021-06-06 13:56:43 UTC (rev 9299) @@ -67,7 +67,7 @@

ダウンロード

-最新のリリースは、OSDN よりダウンロードすることができます。現在の最新版は 4.105 です。 +最新のリリースは、OSDN よりダウンロードすることができます。現在の最新版は 4.106 です。

From scmnotify @ osdn.net Sat Jun 12 23:39:03 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sat, 12 Jun 2021 23:39:03 +0900 Subject: [Ttssh2-commit] [9300] unfrozen Message-ID: <1623508743.502041.7488.nullmailer@users.osdn.me> Revision: 9300 https://osdn.net/projects/ttssh2/scm/svn/commits/9300 Author: zmatsuo Date: 2021-06-12 23:39:03 +0900 (Sat, 12 Jun 2021) Log Message: ----------- unfrozen Modified Paths: -------------- branches/4-stable/installer/teraterm.iss -------------- next part -------------- Modified: branches/4-stable/installer/teraterm.iss =================================================================== --- branches/4-stable/installer/teraterm.iss 2021-06-06 13:56:43 UTC (rev 9299) +++ branches/4-stable/installer/teraterm.iss 2021-06-12 14:39:03 UTC (rev 9300) @@ -1,30 +1,30 @@ #define AppName "Tera Term" #define AppVer "4.106" -;#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', ''); +#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', ''); [InnoIDE_PreCompile] Name: makechm.bat -;Name: build.bat -Name: build.bat; Parameters: rebuild +Name: build.bat +;Name: build.bat; Parameters: rebuild [InnoIDE_PostCompile] -Name: makearchive.bat; Parameters: release +;Name: makearchive.bat; Parameters: release [PreCompile] Name: makechm.bat -;Name: build.bat -Name: build.bat; Parameters: rebuild +Name: build.bat +;Name: build.bat; Parameters: rebuild [PostCompile] -Name: makearchive.bat; Parameters: release +;Name: makearchive.bat; Parameters: release [_ISToolPreCompile] Name: makechm.bat -;Name: build.bat -Name: build.bat; Parameters: rebuild +Name: build.bat +;Name: build.bat; Parameters: rebuild [_ISToolPostCompile] -Name: makearchive.bat; Parameters: release +;Name: makearchive.bat; Parameters: release [Setup] AppCopyright=(C) 2004-2019 TeraTerm Project From scmnotify @ osdn.net Sun Jun 13 00:26:02 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:26:02 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDFdIOODoeODouODquODquODvOOCrw==?= =?utf-8?b?5L+u5q2j?= Message-ID: <1623511562.514034.21139.nullmailer@users.osdn.me> Revision: 9301 https://osdn.net/projects/ttssh2/scm/svn/commits/9301 Author: zmatsuo Date: 2021-06-13 00:26:01 +0900 (Sun, 13 Jun 2021) Log Message: ----------- メモリリーク修正 - r9242 Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9242 Modified Paths: -------------- trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2021-06-12 14:39:03 UTC (rev 9300) +++ trunk/teraterm/ttpset/ttset.c 2021-06-12 15:26:01 UTC (rev 9301) @@ -38,6 +38,10 @@ #include #include #include +#define _CRTDBG_MAP_ALLOC +#include +#include + #include "ttlib.h" #include "tt_res.h" #include "servicenames.h" @@ -183,6 +187,7 @@ if (lenW != 0 && strA[lenA-1] == 0) { lenA--; } + free(strW); return lenA; } @@ -4373,6 +4378,9 @@ break; case DLL_PROCESS_ATTACH: /* do process initialization */ +#ifdef _DEBUG + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif break; case DLL_PROCESS_DETACH: /* do process cleanup */ From scmnotify @ osdn.net Sun Jun 13 00:26:11 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:26:11 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDJdIENNYWtlTGlzdHMudHh0IOOBrg==?= =?utf-8?b?44Or44O844Or44GM6YGp5b+c44GV44KM44Gq44GL44Gj44Gf?= Message-ID: <1623511571.964992.21537.nullmailer@users.osdn.me> Revision: 9302 https://osdn.net/projects/ttssh2/scm/svn/commits/9302 Author: zmatsuo Date: 2021-06-13 00:26:11 +0900 (Sun, 13 Jun 2021) Log Message: ----------- CMakeLists.txt のルールが適応されなかった - *.txt が後ろに書いてあるため - r9281 - セクションの並び順を変更した Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9281 Modified Paths: -------------- trunk/.editorconfig -------------- next part -------------- Modified: trunk/.editorconfig =================================================================== --- trunk/.editorconfig 2021-06-12 15:26:01 UTC (rev 9301) +++ trunk/.editorconfig 2021-06-12 15:26:11 UTC (rev 9302) @@ -22,12 +22,6 @@ charset = utf-8-bom indent_style = space -[{CMakeLists.txt,*.cmake}] -end_of_line = crlf -charset = utf-8-bom -indent_style = space -indent_size = 2 - [*.pl] end_of_line = crlf charset = utf-8-bom @@ -39,3 +33,9 @@ charset = cp932 indent_style = tab indent_size = 4 + +[{CMakeLists.txt,*.cmake}] +end_of_line = crlf +charset = utf-8-bom +indent_style = space +indent_size = 2 From scmnotify @ osdn.net Sun Jun 13 00:29:07 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:07 +0900 Subject: [Ttssh2-commit] [9303] wcsdup() -> _wcsdup() Message-ID: <1623511747.671501.23935.nullmailer@users.osdn.me> Revision: 9303 https://osdn.net/projects/ttssh2/scm/svn/commits/9303 Author: zmatsuo Date: 2021-06-13 00:29:07 +0900 (Sun, 13 Jun 2021) Log Message: ----------- wcsdup() -> _wcsdup() - 警告対応 warning C4996: 'wcsdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _wcsdup. See online help for details. Modified Paths: -------------- trunk/teraterm/common/dllutil.cpp -------------- next part -------------- Modified: trunk/teraterm/common/dllutil.cpp =================================================================== --- trunk/teraterm/common/dllutil.cpp 2021-06-12 15:26:11 UTC (rev 9302) +++ trunk/teraterm/common/dllutil.cpp 2021-06-12 15:29:07 UTC (rev 9303) @@ -98,7 +98,7 @@ HandleListCount++; HandleList = (HandleList_t *)realloc(HandleList, sizeof(HandleList_t)*HandleListCount); p = &HandleList[i]; - p->dllName = wcsdup(dllName); + p->dllName = _wcsdup(dllName); p->handle = module; p->LoadFlag = LoadFlag; p->refCount = 1; From scmnotify @ osdn.net Sun Jun 13 00:29:15 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:15 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDRdIGN5Z3Rlcm1fdCDjgaggZXRlcm1f?= =?utf-8?b?bG9va2ZlZWxfdCDmp4vpgKDkvZPjgavjg6rjgrbjg7zjg5bjgpLov73liqA=?= =?utf-8?b?44GX44Gf?= Message-ID: <1623511755.547463.24088.nullmailer@users.osdn.me> Revision: 9304 https://osdn.net/projects/ttssh2/scm/svn/commits/9304 Author: zmatsuo Date: 2021-06-13 00:29:15 +0900 (Sun, 13 Jun 2021) Log Message: ----------- cygterm_t と eterm_lookfeel_t 構造体にリザーブを追加した - この構造体のサイズが変化すると TTTSet構造体のサイズが変化する - 大きな修正が必要となることが予想される - Tera Term 4 の r9109 - 将来メンバを追加する時のため領域を確保 - plugin は再ビルドが必要 Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9109 Modified Paths: -------------- trunk/teraterm/common/tttypes.h -------------- next part -------------- Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2021-06-12 15:29:07 UTC (rev 9303) +++ trunk/teraterm/common/tttypes.h 2021-06-12 15:29:15 UTC (rev 9304) @@ -340,6 +340,7 @@ int BGNoFrame; char BGThemeFile[MAX_PATH]; int BGIgnoreThemeFile; + char reserve[20]; } eterm_lookfeel_t; typedef struct cygterm { @@ -354,6 +355,7 @@ BOOL login_shell; BOOL home_chdir; BOOL agent_proxy; + char reserve[20]; } cygterm_t; /* TTTSet */ From scmnotify @ osdn.net Sun Jun 13 00:29:23 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:23 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDVdIFdJTjMyIEFQSSDjgafmloflrZc=?= =?utf-8?b?5YiX44KS5YuV55qE44Gr5omx44GG44OY44Or44OR44KS5L2c5oiQ?= Message-ID: <1623511763.529055.24251.nullmailer@users.osdn.me> Revision: 9305 https://osdn.net/projects/ttssh2/scm/svn/commits/9305 Author: zmatsuo Date: 2021-06-13 00:29:23 +0900 (Sun, 13 Jun 2021) Log Message: ----------- WIN32 API で文字列を動的に扱うヘルパを作成 - 最大長を気にしなくてもよい - 文字列が不要になったらfree()する - ヘルパAPI - GetModuleFileNameW() - GetPrivateProfileStringW() - GetFullPathNameW() Modified Paths: -------------- trunk/teraterm/common/CMakeLists.txt trunk/teraterm/common/common_static.v16.vcxproj trunk/teraterm/common/common_static.v8.vcproj Added Paths: ----------- trunk/teraterm/common/win32helper.cpp trunk/teraterm/common/win32helper.h -------------- next part -------------- Modified: trunk/teraterm/common/CMakeLists.txt =================================================================== --- trunk/teraterm/common/CMakeLists.txt 2021-06-12 15:29:15 UTC (rev 9304) +++ trunk/teraterm/common/CMakeLists.txt 2021-06-12 15:29:23 UTC (rev 9305) @@ -41,6 +41,8 @@ ttlib_static_cpp.cpp win16api.c win16api.h + win32helper.cpp + win32helper.h ) target_include_directories( Modified: trunk/teraterm/common/common_static.v16.vcxproj =================================================================== --- trunk/teraterm/common/common_static.v16.vcxproj 2021-06-12 15:29:15 UTC (rev 9304) +++ trunk/teraterm/common/common_static.v16.vcxproj 2021-06-12 15:29:23 UTC (rev 9305) @@ -152,6 +152,7 @@ + @@ -169,6 +170,7 @@ + Modified: trunk/teraterm/common/common_static.v8.vcproj =================================================================== --- trunk/teraterm/common/common_static.v8.vcproj 2021-06-12 15:29:15 UTC (rev 9304) +++ trunk/teraterm/common/common_static.v8.vcproj 2021-06-12 15:29:23 UTC (rev 9305) @@ -312,6 +312,14 @@ RelativePath=".\win16api.h" > + + + + Added: trunk/teraterm/common/win32helper.cpp =================================================================== --- trunk/teraterm/common/win32helper.cpp (rev 0) +++ trunk/teraterm/common/win32helper.cpp 2021-06-12 15:29:23 UTC (rev 9305) @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2021- 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. + */ + +#include +#define _CRTDBG_MAP_ALLOC +#include +#include + +#include "win32helper.h" + +/** + * GetModuleFileNameW() \x82̓\xAE\x93I\x83o\x83b\x83t\x83@\x94\xC5 + * + * @param buf \x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x83o\x83b\x83t\x83@ + * \x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7free()\x82\xB7\x82\xE9 + * @return \x83G\x83\x89\x81[\x83R\x81[\x83h,0(=NO_ERROR)\x82̂Ƃ\xAB\x83G\x83\x89\x81[\x82Ȃ\xB5 + */ +DWORD hGetModuleFileNameW(HMODULE hModule, wchar_t **buf) +{ + size_t size = MAX_PATH; + wchar_t *b = (wchar_t*)malloc(sizeof(wchar_t) * size); + DWORD error; + if (b == NULL) { + error = ERROR_NOT_ENOUGH_MEMORY; + goto error_return; + } + + for(;;) { + DWORD r = GetModuleFileNameW(hModule, b, (DWORD)size); + if (r == 0) { + // \x8A֐\x94\x82\xAA\x8E\xB8\x94s + error = GetLastError(); + break; + } else if (r < size - 1) { + // \x8E擾\x90\xAC\x8C\xF7 + size = r + 1; + b = (wchar_t*)realloc(b, sizeof(wchar_t) * size); + *buf = b; + return NO_ERROR; + } else { + size *= 2; + wchar_t *p = (wchar_t*)realloc(b, sizeof(wchar_t) * size); + if (p == NULL) { + free(b); + error = ERROR_NOT_ENOUGH_MEMORY; + break; + } + b = p; + } + } + + // error + free(b); +error_return: + *buf = NULL; + return error; +} + +/** + * GetPrivateProfileStringW() \x82̓\xAE\x93I\x83o\x83b\x83t\x83@\x94\xC5 + * + * @param str \x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x83o\x83b\x83t\x83@ + * \x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7free()\x82\xB7\x82\xE9 + * @return \x83G\x83\x89\x81[\x83R\x81[\x83h,0(=NO_ERROR)\x82̂Ƃ\xAB\x83G\x83\x89\x81[\x82Ȃ\xB5 + */ +DWORD hGetPrivateProfileStringW(const wchar_t *section, const wchar_t *key, const wchar_t *def, const wchar_t *ini, wchar_t **str) +{ + size_t size = 256; + wchar_t *b = (wchar_t*)malloc(sizeof(wchar_t) * size); + DWORD error; + if (b == NULL) { + error = ERROR_NOT_ENOUGH_MEMORY; + goto error_return; + } + b[0] = 0; + for(;;) { + DWORD r = GetPrivateProfileStringW(section, key, def, b, (DWORD)size, ini); + if (r == 0 || b[0] == L'\0') { + // \x8E\x9F\x82̏ꍇ\x82\xB1\x82\xB1\x82ɓ\xFC\x82\xE9 + // ini\x82\xC9'key='\x82ƋL\x8Fq ("="\x82̌\xE3\x82ɉ\xBD\x82\xE0\x8F\x91\x82\xA2\x82Ă\xA2\x82Ȃ\xA2) + // ini\x82\xC9'key=...' \x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2 \x82\xA9\x82\xC2 def=NULL + free(b); + *str = NULL; + return NO_ERROR; + } else if (r < size - 2) { + size = r + 1; + b = (wchar_t *)realloc(b, sizeof(wchar_t) * size); + *str = b; + return NO_ERROR; + } else { + wchar_t *p; + size *= 2; + p = (wchar_t*)realloc(b, sizeof(wchar_t) * size); + if (p == NULL) { + free(b); + error = ERROR_NOT_ENOUGH_MEMORY; + break; + } + b = p; + } + } + + // error + free(b); +error_return: + *str = NULL; + return error; +} + +/** + * GetFullPathNameW() \x82̓\xAE\x93I\x83o\x83b\x83t\x83@\x94\xC5 + * + * @param fullpath fullpath\x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x83o\x83b\x83t\x83@ + * \x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7free()\x82\xB7\x82\xE9 + * @return \x83G\x83\x89\x81[\x83R\x81[\x83h,0(=NO_ERROR)\x82̂Ƃ\xAB\x83G\x83\x89\x81[\x82Ȃ\xB5 + */ +DWORD hGetFullPathNameW(const wchar_t *lpFileName, wchar_t **fullpath, wchar_t **filepart) +{ + size_t len = GetFullPathNameW(lpFileName, 0, NULL, NULL); // include L'\0' + if (len == 0) { + *fullpath = NULL; + *filepart = NULL; + return GetLastError(); + } + wchar_t *path = (wchar_t *)malloc(sizeof(wchar_t) * len); + wchar_t *file; + len = GetFullPathNameW(lpFileName, (DWORD)len, path, &file); + if (len == 0) { + free(path); + return GetLastError(); + } + if (filepart != NULL) { + *filepart = file; + } + *fullpath = path; + return NO_ERROR; +} Added: trunk/teraterm/common/win32helper.h =================================================================== --- trunk/teraterm/common/win32helper.h (rev 0) +++ trunk/teraterm/common/win32helper.h 2021-06-12 15:29:23 UTC (rev 9305) @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2021- 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. + */ + +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +DWORD hGetModuleFileNameW(HMODULE hModule, wchar_t **buf); +DWORD hGetPrivateProfileStringW(const wchar_t *section, const wchar_t *key, const wchar_t *def, const wchar_t *ini, wchar_t **str); +DWORD hGetFullPathNameW(const wchar_t *lpFileName, wchar_t **fullpath, wchar_t **filepart); + +#ifdef __cplusplus +} +#endif From scmnotify @ osdn.net Sun Jun 13 00:29:32 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:32 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDZdIFRUVFNldOani+mAoOS9k+OBrg==?= =?utf-8?b?44OV44Kh44Kk44Or44KS5L+d5oyB44GZ44KL44Oh44Oz44OQ44KSVW5pY29k?= =?utf-8?b?ZeWMlizli5XnmoTjg5Djg4Pjg5XjgqHljJbjgZfjgZ8=?= Message-ID: <1623511772.697844.24356.nullmailer@users.osdn.me> Revision: 9306 https://osdn.net/projects/ttssh2/scm/svn/commits/9306 Author: zmatsuo Date: 2021-06-13 00:29:32 +0900 (Sun, 13 Jun 2021) Log Message: ----------- TTTSet構造体のファイルを保持するメンバをUnicode化,動的バッファ化した - common/tttypes.h - 次のメンバを追加 - wchar_t *HomeDirW; - wchar_t *SetupFNameW; - wchar_t *KeyCnfFNW; - wchar_t *LogFNW; - wchar_t *MacroFNW; - wchar_t *UILanguageFileW; - wchar_t *UILanguageFileW_ini; - 主要なメンバのみ - 従来の(ANSI文字列版)メンバーも利用可能 - Unicode版から変換 - 従来通りのフォルダ名に従来通りのファイル名で使用すれば問題は起きないはず - Tera Term内部はほとんど従来通り(ANSI文字版)を使用 Modified Paths: -------------- trunk/teraterm/common/codeconv.cpp trunk/teraterm/common/codeconv.h trunk/teraterm/common/ttlib.c trunk/teraterm/common/ttlib.h trunk/teraterm/common/ttlib_static_cpp.cpp trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpcmn/ttcmn.c trunk/teraterm/ttpdlg/ttdlg.c trunk/teraterm/ttpmacro/ttmacro.cpp trunk/teraterm/ttpmacro/ttmdlg.cpp trunk/teraterm/ttpmacro/ttmdlg.h trunk/teraterm/ttpset/ttset.c trunk/ttpmenu/ttpmenu.cpp -------------- next part -------------- Modified: trunk/teraterm/common/codeconv.cpp =================================================================== --- trunk/teraterm/common/codeconv.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/codeconv.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -1026,6 +1026,36 @@ return wstr_ptr; } +/** + * WideCharToMultiByte() \x82\xCC TRUNCATE + CP_ACP \x94\xC5 + * wchar_t \x82̃p\x83X,\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0 char \x82ɕϊ\xB7\x82\xB7\x82\xE9\x82Ƃ\xAB\x82Ɏg\x97p + * + * @param[in] wstr_ptr wchar_t \x82̕\xB6\x8E\x9A\x97\xF1 + * @param[in,out] mb_ptr char \x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6ptr + * @param[in] mb_len char \x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6\x83T\x83C\x83Y + */ +void WideCharToACP_t(const wchar_t *wstr_ptr, char *mb_ptr, size_t mb_len) +{ + const DWORD flags = 0; + size_t out_len = WideCharToMultiByte(CP_ACP, flags, wstr_ptr, -1, mb_ptr, mb_len, NULL, NULL); + if (out_len == 0) { + // \x95ϊ\xB7\x8E\xB8\x94s + DWORD err = GetLastError(); + if (err == ERROR_INSUFFICIENT_BUFFER) { + // wstr_ptr \x82̒\xB7\x82\xB3\x82\xF0 -1 \x82Ŏw\x92肵\x82āAmb_len \x82\xAA\x95s\x91\xAB\x82\xB5\x82Ă\xA2\x82\xE9\x82Ƃ\xAB + // \x83o\x83b\x83t\x83@\x82\xA2\x82\xC1\x82ς\xA2\x82ɕϊ\xB7\x82͍s\x82\xED\x82\xEA\x82Ă\xA2\x82\xE9 + mb_ptr[mb_len - 1] = 0; + } + else { + mb_ptr[0] = 0; + } + } + else if (out_len == mb_len) { + // TRUNCATE + mb_ptr[mb_len - 1] = 0; + } +} + char *ToCharW(const wchar_t *strW) { if (strW == NULL) return NULL; Modified: trunk/teraterm/common/codeconv.h =================================================================== --- trunk/teraterm/common/codeconv.h 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/codeconv.h 2021-06-12 15:29:32 UTC (rev 9306) @@ -57,6 +57,7 @@ void WideCharToUTF32(const wchar_t *wstr_ptr, size_t *wstr_len_, char32_t *u32_ptr, size_t *u32_len_); int UTF8ToWideChar(const char *u8_ptr, int u8_len, wchar_t *wstr_ptr, int wstr_len); +void WideCharToACP_t(const wchar_t *wstr_ptr, char *mb_ptr, size_t mb_len); // API wrappers char *_WideCharToMultiByte(const wchar_t *wstr_ptr, size_t wstr_len, int code_page, size_t *mb_len_); Modified: trunk/teraterm/common/ttlib.c =================================================================== --- trunk/teraterm/common/ttlib.c 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/ttlib.c 2021-06-12 15:29:32 UTC (rev 9306) @@ -42,6 +42,7 @@ #include "teraterm.h" #include "tttypes.h" #include "compat_win.h" +#include "codeconv.h" #include "../teraterm/unicode_test.h" @@ -982,32 +983,6 @@ } /* - * Get home(exe,dll) directory - * @param[in] hInst WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL - * @param[in,out] HomeDir - * @param[out] HomeDirLen - */ -void GetHomeDir(HINSTANCE hInst, char *HomeDir, size_t HomeDirLen) -{ - char Temp[MAX_PATH]; - DWORD result = GetModuleFileName(NULL,Temp,sizeof(Temp)); - if (result == 0 || result == _countof(Temp)) { - // \x83p\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x81B\x92v\x96\xBD\x93I\x81Aabort() \x82\xB7\x82\xE9\x81B - abort(); - // \x82\xB1\x82\xB1\x82\xC5return\x82\xB5\x82Ă\xE0\x83v\x83\x89\x83O\x83C\x83\x93(ttpset.dll)\x82̃\x8D\x81[\x83h\x82Ɏ\xB8\x94s\x82\xB5\x82\xC4abort()\x82\xB7\x82\xE9 - } - ExtractDirName(Temp, Temp); - strncpy_s(HomeDir, HomeDirLen, Temp, _TRUNCATE); -} - -// \x83f\x83t\x83H\x83\x8B\x83g\x82\xCC TERATERM.INI \x82̃t\x83\x8B\x83p\x83X\x82\xF0 ttpmacro \x82\xA9\x82\xE7\x82\xE0 -// \x8E擾\x82\xB7\x82邽\x82߂ɒlj\xC1\x82\xB5\x82\xBD\x81B(2007.2.18 maya) -void GetDefaultSetupFName(const char *home, char *dest, int destlen) -{ - GetDefaultFName(home, "TERATERM.INI", dest, destlen); -} - -/* * UILanguageFile\x82̃t\x83\x8B\x83p\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9 * * @param[in] HomeDir exe,dll\x82̑\xB6\x8D݂\xB7\x82\xE9\x83t\x83H\x83\x8B\x83_ GetHomeDir()\x82Ŏ擾\x82ł\xAB\x82\xE9 @@ -1027,43 +1002,30 @@ SetCurrentDirectory(CurDir); } -void GetUILanguageFile(char *buf, int buflen) -{ - char HomeDir[MAX_PATH]; - char Temp[MAX_PATH]; - char SetupFName[MAX_PATH]; - - /* Get home directory */ - GetHomeDir(NULL, HomeDir, sizeof(HomeDir)); - - /* Get SetupFName */ - GetDefaultSetupFName(HomeDir, SetupFName, sizeof(SetupFName)); - - /* Get LanguageFile name */ - GetPrivateProfileString("Tera Term", "UILanguageFile", "lang\\Default.lng", - Temp, sizeof(Temp), SetupFName); - - GetUILanguageFileFull(HomeDir, Temp, buf, buflen); -} - // \x8Ew\x92肵\x82\xBD\x83G\x83\x93\x83g\x83\x8A\x82\xF0 teraterm.ini \x82\xA9\x82\xE7\x93ǂݎ\xE6\x82\xE9 (2009.3.23 yutaka) void GetOnOffEntryInifile(char *entry, char *buf, int buflen) { - char HomeDir[MAX_PATH]; - char Temp[MAX_PATH]; - char SetupFName[MAX_PATH]; + wchar_t *HomeDirW; + wchar_t Temp[MAX_PATH]; + wchar_t *SetupFName; + wchar_t *entryW = ToWcharA(entry); + char * TempA; /* Get home directory */ - GetHomeDir(NULL, HomeDir, sizeof(HomeDir)); + HomeDirW = GetHomeDirW(NULL); /* Get SetupFName */ - GetDefaultSetupFName(HomeDir, SetupFName, sizeof(SetupFName)); + SetupFName = GetDefaultSetupFNameW(HomeDirW); /* Get LanguageFile name */ - GetPrivateProfileString("Tera Term", entry, "off", - Temp, sizeof(Temp), SetupFName); + GetPrivateProfileStringW(L"Tera Term", entryW, L"off", + Temp, _countof(Temp), SetupFName); - strncpy_s(buf, buflen, Temp, _TRUNCATE); + TempA = ToCharW(Temp); + strncpy_s(buf, buflen, TempA, _TRUNCATE); + free(HomeDirW); + free(SetupFName); + free(TempA); } void get_lang_msgW(const char *key, wchar_t *buf, int buf_len, const wchar_t *def, const char *iniFile) Modified: trunk/teraterm/common/ttlib.h =================================================================== --- trunk/teraterm/common/ttlib.h 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/ttlib.h 2021-06-12 15:29:32 UTC (rev 9306) @@ -46,6 +46,7 @@ BOOL GetFileNamePosW(const wchar_t *PathName, size_t *DirLen, size_t *FNPos); DllExport BOOL ExtractFileName(PCHAR PathName, PCHAR FileName, int destlen); DllExport BOOL ExtractDirName(PCHAR PathName, PCHAR DirName); +wchar_t *ExtractDirNameW(const wchar_t *PathName); void FitFileName(PCHAR FileName, int destlen, const char *DefExt); void AppendSlash(PCHAR Path, int destlen); void AppendSlashW(wchar_t *Path, size_t destlen); @@ -79,12 +80,13 @@ void GetNthNum(PCHAR Source, int Nth, int far *Num); int GetNthNum2(PCHAR Source, int Nth, int defval); void GetDownloadFolder(char *dest, int destlen); -void GetHomeDir(HINSTANCE hInst, char *HomeDir, size_t HomeDirLen); +wchar_t *GetHomeDirW(HINSTANCE hInst); void GetDefaultFName(const char *home, const char *file, char *dest, int destlen); -void GetDefaultSetupFName(const char *home, char *dest, int destlen); -void GetUILanguageFile(char *buf, int buflen); +wchar_t *GetDefaultFNameW(const wchar_t *home, const wchar_t *file); +wchar_t *GetDefaultSetupFNameW(const wchar_t *home); void GetUILanguageFileFull(const char *HomeDir, const char *UILanguageFileRel, char *UILanguageFileFull, size_t UILanguageFileFullLen); +wchar_t *GetUILanguageFileFullW(const wchar_t *HomeDir, const wchar_t *UILanguageFileRel); void GetOnOffEntryInifile(char *entry, char *buf, int buflen); void get_lang_msg(const char *key, PCHAR buf, int buf_len, const char *def, const char *iniFile); void get_lang_msgW(const char *key, wchar_t *buf, int buf_len, const wchar_t *def, const char *iniFile); Modified: trunk/teraterm/common/ttlib_static_cpp.cpp =================================================================== --- trunk/teraterm/common/ttlib_static_cpp.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/ttlib_static_cpp.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -35,10 +35,13 @@ #include #include #include +#include #include "i18n.h" #include "layer_for_unicode.h" #include "asprintf.h" +#include "win32helper.h" +#include "codeconv.h" #include "ttlib.h" @@ -794,3 +797,116 @@ return (int)j; } + +/** + * ExtractDirName() \x82\xCC wchar_t \x94\xC5 + */ +wchar_t *ExtractDirNameW(const wchar_t *PathName) +{ + size_t i; + wchar_t *DirName = _wcsdup(PathName); + if (!GetFileNamePosW(DirName, &i, NULL)) + return NULL; + DirName[i] = 0; + return DirName; +} + +/* + * Get home(exe,dll) directory + * + * @param[in] hInst WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL + * @return HomeDir + */ +wchar_t *GetHomeDirW(HINSTANCE hInst) +{ + wchar_t *TempW; + wchar_t *dir; + DWORD error = hGetModuleFileNameW(NULL, &TempW); + if (error != 0) { + // \x83p\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x81B\x92v\x96\xBD\x93I\x81Aabort() \x82\xB7\x82\xE9\x81B + abort(); + // \x82\xB1\x82\xB1\x82\xC5return\x82\xB5\x82Ă\xE0\x83v\x83\x89\x83O\x83C\x83\x93(ttpset.dll)\x82̃\x8D\x81[\x83h\x82Ɏ\xB8\x94s\x82\xB5\x82\xC4abort()\x82\xB7\x82\xE9 + } + dir = ExtractDirNameW(TempW); + free(TempW); + return dir; +} + +/* + * UILanguageFile\x82̃t\x83\x8B\x83p\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9 + * + * @param[in] HomeDir exe,dll\x82̑\xB6\x8D݂\xB7\x82\xE9\x83t\x83H\x83\x8B\x83_ GetHomeDir()\x82Ŏ擾\x82ł\xAB\x82\xE9 + * @param[in] UILanguageFileRel lng\x83t\x83@\x83C\x83\x8B\x81AHomeDir\x82\xA9\x82\xE7\x82̑\x8A\x91΃p\x83X + * @param[in,out] UILanguageFileFull lng\x83t\x83@\x83C\x83\x8Bptr\x81A\x83t\x83\x8B\x83p\x83X + * @param[in] UILanguageFileFullLen lng\x83t\x83@\x83C\x83\x8Blen\x81A\x83t\x83\x8B\x83p\x83X + */ +wchar_t *GetUILanguageFileFullW(const wchar_t *HomeDir, const wchar_t *UILanguageFileRel) +{ + wchar_t *fullpath; + size_t size = wcslen(HomeDir) + 1 + wcslen(UILanguageFileRel) + 1; + wchar_t *rel = (wchar_t *)malloc(sizeof(wchar_t) * size); + wcscpy(rel, HomeDir); + wcscat(rel, L"\\"); + wcscat(rel, UILanguageFileRel); + hGetFullPathNameW(rel, &fullpath, NULL); + free(rel); + return fullpath; +} + +/** + * \x90ݒ\xE8\x83t\x83@\x83C\x83\x8B\x82̃t\x83\x8B\x83p\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9 + * GetDefaultFName() \x82\xCC wchar_t\x94\xC5 + * + * @param[in] home ttermpro.exe \x93\x99\x82̎\xC0\x8Ds\x83t\x83@\x83C\x83\x8B\x82̂\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_ + * My Documents \x82Ƀt\x83@\x83C\x83\x8B\x82\xAA\x82\xA0\x82\xC1\x82\xBD\x8Fꍇ\x82͎g\x97p\x82\xB3\x82\xEA\x82Ȃ\xA2 + * @param[in] file \x90ݒ\xE8\x83t\x83@\x83C\x83\x8B\x96\xBC + * @return \x83t\x83\x8B\x83p\x83X + */ +wchar_t *GetDefaultFNameW(const wchar_t *home, const wchar_t *file) +{ + // My Documents \x82\xC9 file \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ\x81A + // \x82\xBB\x82\xEA\x82\xF0\x93ǂݍ\x9E\x82ނ悤\x82ɂ\xB5\x82\xBD\x81B(2007.2.18 maya) + wchar_t MyDoc[MAX_PATH]; + LPITEMIDLIST pidl; + + IMalloc *pmalloc; + SHGetMalloc(&pmalloc); + if (SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl) == S_OK) { + SHGetPathFromIDListW(pidl, MyDoc); + pmalloc->Free(pidl); + pmalloc->Release(); + } + else { + pmalloc->Release(); + MyDoc[0] = 0; + } + + if (MyDoc[0] != 0) { + // My Documents \x82\xC9 file \x82\xAA\x82\xA0\x82邩? + size_t destlen = (wcslen(MyDoc) + wcslen(file) + 1 + 1) * sizeof(wchar_t); + wchar_t *dest = (wchar_t *)malloc(sizeof(wchar_t) * destlen); + wcscpy(dest, MyDoc); + AppendSlashW(dest,destlen); + wcsncat_s(dest, destlen, file, _TRUNCATE); + if (GetFileAttributesW(dest) != INVALID_FILE_ATTRIBUTES) { + // My Documents \x82̐ݒ\xE8\x83t\x83@\x83C\x83\x8B + return dest; + } + free(dest); + } + + size_t destlen = (wcslen(home) + wcslen(file) + 1 + 1) * sizeof(wchar_t); + wchar_t *dest = (wchar_t *)malloc(sizeof(wchar_t) * destlen); + wcscpy(dest, home); + AppendSlashW(dest,destlen); + wcsncat_s(dest, destlen, file, _TRUNCATE); + return dest; +} + +// \x83f\x83t\x83H\x83\x8B\x83g\x82\xCC TERATERM.INI \x82̃t\x83\x8B\x83p\x83X\x82\xF0\x8E擾 +wchar_t *GetDefaultSetupFNameW(const wchar_t *home) +{ + const wchar_t *ini = L"TERATERM.INI"; + wchar_t *buf = GetDefaultFNameW(home, ini); + return buf; +} Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/common/tttypes.h 2021-06-12 15:29:32 UTC (rev 9306) @@ -362,7 +362,7 @@ struct tttset { /*------ VTSet --------*/ /* Tera Term home directory */ - char HomeDir[MAXPATHLEN]; + char HomeDir[MAXPATHLEN]; // ttermpro.exe \x82̂\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_ /* Setup file name */ char SetupFName[MAX_PATH]; @@ -526,7 +526,7 @@ #ifdef USE_NORMAL_BGCOLOR WORD UseNormalBGColor; #endif - char UILanguageFile[MAX_PATH]; + char UILanguageFile[MAX_PATH]; // \x90\xE2\x91΃p\x83X char UIMsg[MAX_UIMSG]; WORD BroadcastCommandHistory; WORD AcceptBroadcast; // 337: 2007/03/20 @@ -539,7 +539,7 @@ WORD DisableAppCursor; WORD ClearComBuffOnOpen; WORD Send8BitCtrl; - char UILanguageFile_ini[MAX_PATH]; + char UILanguageFile_ini[MAX_PATH]; // \x91\x8A\x91΃p\x83X,ini\x83t\x83@\x83C\x83\x8B\x82̒\x86\x90g WORD SelectOnlyByLButton; WORD TelAutoDetect; char XModemRcvCommand[MAX_PATH]; @@ -647,6 +647,13 @@ BYTE UnicodeAmbiguousWidth; BYTE UnicodeEmojiOverride; BYTE UnicodeEmojiWidth; + wchar_t *HomeDirW; // ttermpro.exe \x82̂\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_ + wchar_t *SetupFNameW; + wchar_t *KeyCnfFNW; + wchar_t *LogFNW; + wchar_t *MacroFNW; + wchar_t *UILanguageFileW; // \x90\xE2\x91΃p\x83X + wchar_t *UILanguageFileW_ini; // \x91\x8A\x91΃p\x83X,ini\x83t\x83@\x83C\x83\x8B\x82̒\x86\x90g }; typedef struct tttset TTTSet, *PTTSet; Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -3364,17 +3364,12 @@ /* Auto start logging or /L= option */ if (ts.LogAutoStart || ts.LogFN[0] != 0) { - if (ts.LogFN[0] == 0) { - wchar_t *filenameW = FLogGetLogFilename(NULL); - char *filenameA = ToCharW(filenameW); - strncpy_s(ts.LogFN, sizeof(ts.LogFN), filenameA, _TRUNCATE); - free(filenameA); - free(filenameW); + if (ts.LogFN == NULL || ts.LogFN[0] == 0) { + ts.LogFNW = FLogGetLogFilename(NULL); + WideCharToACP_t(ts.LogFNW, ts.LogFN, sizeof(ts.LogFN)); } if (ts.LogFN[0]!=0) { - wchar_t *fnW = ToWcharA(ts.LogFN); - FLogOpen(fnW, LOG_UTF8, FALSE); - free(fnW); + FLogOpen(ts.LogFNW, LOG_UTF8, FALSE); } } Modified: trunk/teraterm/ttpcmn/ttcmn.c =================================================================== --- trunk/teraterm/ttpcmn/ttcmn.c 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpcmn/ttcmn.c 2021-06-12 15:29:32 UTC (rev 9306) @@ -110,7 +110,6 @@ memcpy(&pm->ts, ts, sizeof(TTTSet)); } - BOOL WINAPI StartTeraTerm(PTTSet ts) { if (FirstInstance) { @@ -129,15 +128,17 @@ // if (FirstInstance) { \x82̕\x94\x95\xAA\x82\xA9\x82\xE7\x88ړ\xAE (2008.3.13 maya) // \x8BN\x93\xAE\x8E\x9E\x82ɂ́A\x8B\xA4\x97L\x83\x81\x83\x82\x83\x8A\x82\xCC HomeDir \x82\xC6 SetupFName \x82͋\xF3\x82ɂȂ\xE9 - /* Get home directory */ - GetHomeDir(hInst, ts->HomeDir, sizeof(ts->HomeDir)); - _chdir(ts->HomeDir); - GetDefaultSetupFName(ts->HomeDir, ts->SetupFName, sizeof(ts->SetupFName)); + /* Get home directory (ttermpro.exe\x82̃t\x83H\x83\x8B\x83_) */ + ts->HomeDirW = GetHomeDirW(hInst); + WideCharToACP_t(ts->HomeDirW, ts->HomeDir, _countof(ts->HomeDir)); + SetCurrentDirectoryW(ts->HomeDirW); - strncpy_s(ts->KeyCnfFN, sizeof(ts->KeyCnfFN), ts->HomeDir, _TRUNCATE); - AppendSlash(ts->KeyCnfFN, sizeof(ts->KeyCnfFN)); - strncat_s(ts->KeyCnfFN, sizeof(ts->KeyCnfFN), "KEYBOARD.CNF", _TRUNCATE); + ts->SetupFNameW = GetDefaultSetupFNameW(ts->HomeDirW); + WideCharToACP_t(ts->SetupFNameW, ts->SetupFName, _countof(ts->SetupFName)); + ts->KeyCnfFNW = GetDefaultFNameW(ts->HomeDirW, L"KEYBOARD.CNF"); + WideCharToACP_t(ts->KeyCnfFNW, ts->KeyCnfFN, _countof(ts->KeyCnfFN)); + if (FirstInstance) { FirstInstance = FALSE; return TRUE; Modified: trunk/teraterm/ttpdlg/ttdlg.c =================================================================== --- trunk/teraterm/ttpdlg/ttdlg.c 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpdlg/ttdlg.c 2021-06-12 15:29:32 UTC (rev 9306) @@ -53,6 +53,7 @@ #include "codeconv.h" #include "helpid.h" #include "layer_for_unicode.h" +#include "asprintf.h" // Oniguruma: Regular expression library #define ONIG_EXTERN extern @@ -3015,11 +3016,11 @@ // \x8C\xBE\x8C\xEA\x83t\x83@\x83C\x83\x8B\x82\xAA\x95ύX\x82\xB3\x82\xEA\x82Ă\xA2\x82\xBD\x8Fꍇ w = (WORD)GetCurSel(Dialog, IDC_GENLANG_UI); if (1 <= w && w <= uilist_count && w != langui_sel) { - _snprintf_s(ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini), _TRUNCATE, - "%s\\%s", get_lang_folder(), LangUIList[w - 1]); + aswprintf(&ts->UILanguageFileW_ini, L"%hs\\%hs", get_lang_folder(), LangUIList[w - 1]); + WideCharToACP_t(ts->UILanguageFileW_ini, ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini)); - GetUILanguageFileFull(ts->HomeDir, ts->UILanguageFile_ini, - ts->UILanguageFile, sizeof(ts->UILanguageFile)); + ts->UILanguageFileW = GetUILanguageFileFullW(ts->HomeDirW, ts->UILanguageFileW_ini); + WideCharToACP_t(ts->UILanguageFileW, ts->UILanguageFile, sizeof(ts->UILanguageFileW)); // \x83^\x83C\x83g\x83\x8B\x82̍X\x90V\x82\xF0\x8Ds\x82\xA4\x81B(2014.2.23 yutaka) PostMessage(GetParent(Dialog),WM_USER_CHANGETITLE,0,0); Modified: trunk/teraterm/ttpmacro/ttmacro.cpp =================================================================== --- trunk/teraterm/ttpmacro/ttmacro.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpmacro/ttmacro.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -40,6 +40,7 @@ #include "tmfc.h" #include "dlglib.h" #include "dllutil.h" +#include "codeconv.h" #include "ttm_res.h" #include "ttmmain.h" @@ -53,7 +54,8 @@ #endif char UILanguageFile[MAX_PATH]; -static char SetupFName[MAX_PATH]; +static wchar_t *SetupFNameW; +static char *SetupFName; static HWND CtrlWnd; static HINSTANCE hInst; @@ -75,8 +77,12 @@ char UILanguageFileRel[MAX_PATH]; LOGFONTA logfont; - GetHomeDir(hInst, HomeDir, sizeof(HomeDir)); - GetDefaultFName(HomeDir, "TERATERM.INI", SetupFName, sizeof(SetupFName)); + HomeDirW = GetHomeDirW(hInst); + char *HomeDirA = ToCharW(HomeDirW); + strcpy_s(HomeDir, sizeof(HomeDir), HomeDirA); + free(HomeDirA); + SetupFNameW = GetDefaultFNameW(HomeDirW, L"TERATERM.INI"); + SetupFName = ToCharW(SetupFNameW); GetPrivateProfileString("Tera Term", "UILanguageFile", "lang\\Default.lng", UILanguageFileRel, sizeof(UILanguageFileRel), SetupFName); GetUILanguageFileFull(HomeDir, UILanguageFileRel, Modified: trunk/teraterm/ttpmacro/ttmdlg.cpp =================================================================== --- trunk/teraterm/ttpmacro/ttmdlg.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpmacro/ttmdlg.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -56,6 +56,7 @@ #include "ttmdlg.h" char HomeDir[MAX_PATH]; +wchar_t *HomeDirW; char FileName[MAX_PATH]; char TopicName[11]; char ShortName[MAX_PATH]; @@ -293,4 +294,3 @@ } return r == IDCANCEL ? -1 : -2; } - Modified: trunk/teraterm/ttpmacro/ttmdlg.h =================================================================== --- trunk/teraterm/ttpmacro/ttmdlg.h 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpmacro/ttmdlg.h 2021-06-12 15:29:32 UTC (rev 9306) @@ -51,6 +51,7 @@ int OpenListDlg(const wchar_t *Text, const wchar_t *Caption, wchar_t **Lists, int Selected); extern char HomeDir[MAX_PATH]; +extern wchar_t *HomeDirW; extern char FileName[MAX_PATH]; extern char TopicName[11]; extern char ShortName[MAX_PATH]; Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/teraterm/ttpset/ttset.c 2021-06-12 15:29:32 UTC (rev 9306) @@ -46,6 +46,7 @@ #include "tt_res.h" #include "servicenames.h" #include "codeconv.h" +#include "win32helper.h" #define DllExport __declspec(dllexport) #include "ttset.h" @@ -56,6 +57,7 @@ #define INI_FILE_IS_UNICODE 1 #define Section "Tera Term" +#define SectionW L"Tera Term" #define MaxStrLen (LONG)512 @@ -1698,8 +1700,8 @@ GetPrivateProfileInt(Section, "SendBreakTime", 1000, FName); /* Startup macro -- special option */ - GetPrivateProfileString(Section, "StartupMacro", "", - ts->MacroFN, sizeof(ts->MacroFN), FName); + hGetPrivateProfileStringW(SectionW, L"StartupMacro", L"", FName, &ts->MacroFNW); + WideCharToACP_t(ts->MacroFNW, ts->MacroFN, sizeof(ts->MacroFN)); /* TEK GIN Mouse keycode -- special option */ ts->GINMouseCode = @@ -1901,13 +1903,17 @@ strncpy_s(ts->Locale, sizeof(ts->Locale), Temp, _TRUNCATE); // UI language message file (\x91\x8A\x91΃p\x83X) - GetPrivateProfileString(Section, "UILanguageFile", "lang\\Default.lng", - ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini), FName); + hGetPrivateProfileStringW(SectionW, L"UILanguageFile", NULL, FName, &ts->UILanguageFileW_ini); + if (ts->UILanguageFileW_ini == NULL) { + ts->UILanguageFileW_ini = wcsdup(L"lang\\Default.lng"); + } + WideCharToACP_t(ts->UILanguageFileW_ini, ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini)); // UI language message file (full path) - GetUILanguageFileFull(ts->HomeDir, ts->UILanguageFile_ini, - ts->UILanguageFile, sizeof(ts->UILanguageFile)); + ts->UILanguageFileW = GetUILanguageFileFullW(ts->HomeDirW, ts->UILanguageFileW_ini); + WideCharToACP_t(ts->UILanguageFileW, ts->UILanguageFile, sizeof(ts->UILanguageFile)); + // Broadcast Command History (2007.3.3 maya) ts->BroadcastCommandHistory = GetOnOff(Section, "BroadcastCommandHistory", FName, FALSE); Modified: trunk/ttpmenu/ttpmenu.cpp =================================================================== --- trunk/ttpmenu/ttpmenu.cpp 2021-06-12 15:29:23 UTC (rev 9305) +++ trunk/ttpmenu/ttpmenu.cpp 2021-06-12 15:29:32 UTC (rev 9306) @@ -38,7 +38,10 @@ #include "resource.h" #include "ttlib.h" +#include "codeconv.h" +#include "win32helper.h" + // UTF-8 TeraTerm\x82ł́A\x83f\x83t\x83H\x83\x8B\x83g\x83C\x83\x93\x83X\x83g\x81[\x83\x8B\x90\xE6\x82\xF0\x89\xBA\x8BL\x82ɕύX\x82\xB5\x82\xBD\x81B(2004.12.2 yutaka) // \x82\xB3\x82\xE7\x82ɁA\x83f\x83t\x83H\x83\x8B\x83g\x83C\x83\x93\x83X\x83g\x81[\x83\x8B\x90\xE6\x82̓J\x83\x8C\x83\x93\x83g\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82ɕύX\x81B(2004.12.14 yutaka) #define DEFAULT_PATH "." @@ -2638,6 +2641,37 @@ return ::DefWindowProc(hWnd, uMsg, wParam, lParam); } +static void GetUILanguageFile(char *buf, int buflen) +{ + wchar_t *HomeDirW; + wchar_t *Temp; + wchar_t *SetupFName; + wchar_t *fullpath; + char *fullpathA; + + /* Get home directory */ + HomeDirW = GetHomeDirW(NULL); + + /* Get SetupFName */ + SetupFName = GetDefaultSetupFNameW(HomeDirW); + + /* Get LanguageFile name */ + hGetPrivateProfileStringW(L"Tera Term", L"UILanguageFile", NULL, SetupFName, &Temp); + if (Temp == NULL) { + Temp = _wcsdup(L"lang\\Default.lng"); + } + + fullpath = GetUILanguageFileFullW(HomeDirW, Temp); + fullpathA = ToCharW(fullpath); + free(HomeDirW); + free(SetupFName); + free(Temp); + free(fullpath); + + strcpy_s(buf, buflen, fullpathA); + free(fullpathA); +} + /* ========================================================================== Function Name : (int WINAPI) WinMain() Outline : \x83\x81\x83C\x83\x93\x8A֐\x94 From scmnotify @ osdn.net Sun Jun 13 00:29:41 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:41 +0900 Subject: [Ttssh2-commit] =?utf-8?q?=5B9307=5D_layer=5Ffor=5Funicode_?= =?utf-8?b?44GrIEFQSSDov73liqA=?= Message-ID: <1623511781.461267.24521.nullmailer@users.osdn.me> Revision: 9307 https://osdn.net/projects/ttssh2/scm/svn/commits/9307 Author: zmatsuo Date: 2021-06-13 00:29:41 +0900 (Sun, 13 Jun 2021) Log Message: ----------- layer_for_unicode に API 追加 - 追加 - _GetModuleHandleW() - _GetSystemDirectoryW() - _GetTempFileNameW() - _GetTempPathW() Modified Paths: -------------- trunk/teraterm/common/codeconv.cpp trunk/teraterm/common/codeconv.h trunk/teraterm/common/compat_win.cpp trunk/teraterm/common/compat_win.h trunk/teraterm/common/layer_for_unicode.cpp trunk/teraterm/common/layer_for_unicode.h -------------- next part -------------- Modified: trunk/teraterm/common/codeconv.cpp =================================================================== --- trunk/teraterm/common/codeconv.cpp 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/codeconv.cpp 2021-06-12 15:29:41 UTC (rev 9307) @@ -1056,6 +1056,27 @@ } } +/** + * MultiByteToWideChar() \x82\xCC TRUNCATE + CP_ACP \x94\xC5 + * wchar_t \x82̃p\x83X,\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0 char \x82ɕϊ\xB7\x82\xB7\x82\xE9\x82Ƃ\xAB\x82Ɏg\x97p + * + * @param[in] str_ptr char \x82̕\xB6\x8E\x9A\x97\xF1 + * @param[in,out] wstr_ptr wchar_t \x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6ptr + * @param[in] wstr_len wchar_t \x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐敶\x8E\x9A\x90\x94 + * @return \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x90\x94(L'^0'\x8A܂\xDE), wcslen(wstr_ptr) + 1 + */ +size_t ACPToWideChar_t(const char *str_ptr, wchar_t *wstr_ptr, size_t wstr_len) +{ + const DWORD flags = 0; + size_t out_len = MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, + str_ptr, -1, + wstr_ptr, wstr_len); + if (out_len == wstr_len) { + wstr_ptr[wstr_len-1] = 0; + } + return out_len; +} + char *ToCharW(const wchar_t *strW) { if (strW == NULL) return NULL; Modified: trunk/teraterm/common/codeconv.h =================================================================== --- trunk/teraterm/common/codeconv.h 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/codeconv.h 2021-06-12 15:29:41 UTC (rev 9307) @@ -58,6 +58,7 @@ char32_t *u32_ptr, size_t *u32_len_); int UTF8ToWideChar(const char *u8_ptr, int u8_len, wchar_t *wstr_ptr, int wstr_len); void WideCharToACP_t(const wchar_t *wstr_ptr, char *mb_ptr, size_t mb_len); +size_t ACPToWideChar_t(const char *str_ptr, wchar_t *wstr_ptr, size_t wstr_len); // API wrappers char *_WideCharToMultiByte(const wchar_t *wstr_ptr, size_t wstr_len, int code_page, size_t *mb_len_); Modified: trunk/teraterm/common/compat_win.cpp =================================================================== --- trunk/teraterm/common/compat_win.cpp 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/compat_win.cpp 2021-06-12 15:29:41 UTC (rev 9307) @@ -38,7 +38,7 @@ #include "ttlib.h" // for debug -//#define UNICODE_API_DISABLE 1 +#define UNICODE_API_DISABLE 1 ATOM (WINAPI *pRegisterClassW)(const WNDCLASSW *lpWndClass); HWND (WINAPI *pCreateWindowExW)(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, @@ -84,6 +84,7 @@ DWORD (WINAPI *pGetPrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); BOOL (WINAPI *pWritePrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpString, LPCWSTR lpFileName); +UINT (WINAPI *pGetPrivateProfileIntW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName); BOOL (WINAPI *pCreateProcessW)(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, @@ -102,6 +103,8 @@ HMODULE (WINAPI *pLoadLibraryW)(LPCWSTR lpLibFileName); DWORD (WINAPI *pGetModuleFileNameW)(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); DWORD (WINAPI *pExpandEnvironmentStringsW)(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); +DWORD (WINAPI *pGetTempPathW)(DWORD nBufferLength, LPWSTR lpBuffer); +UINT (WINAPI *pGetTempFileNameW)(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); // gdi32 int (WINAPI *pAddFontResourceExW)(LPCWSTR name, DWORD fl, PVOID res); @@ -251,6 +254,7 @@ { "SetCurrentDirectoryW", (void **)&pSetCurrentDirectoryW }, { "GetPrivateProfileStringW", (void **)&pGetPrivateProfileStringW }, { "WritePrivateProfileStringW", (void **)&pWritePrivateProfileStringW }, + { "GetPrivateProfileIntW", (void **)&pGetPrivateProfileIntW }, { "CreateProcessW", (void **)&pCreateProcessW }, { "CopyFileW", (void **)&pCopyFileW }, { "DeleteFileW", (void **)&pDeleteFileW }, @@ -263,6 +267,8 @@ { "LoadLibraryW", (void **)&pLoadLibraryW }, { "GetModuleFileNameW", (void **)&pGetModuleFileNameW }, { "ExpandEnvironmentStringsW", (void **)&pExpandEnvironmentStringsW }, + { "GetTempPathW", (void **)&pGetTempPathW }, + { "GetTempFileNameW", (void **)&pGetTempFileNameW }, #endif { "GetConsoleWindow", (void **)&pGetConsoleWindow }, {}, @@ -363,7 +369,11 @@ pFindFirstFileW = NULL; pFindNextFileW = NULL; pRemoveDirectoryW = NULL; + pGetPrivateProfileIntW = NULL; pGetModuleFileNameW = NULL; + pLoadLibraryW = NULL; + pGetTempPathW = NULL; + pGetTempFileNameW = NULL; } // GetConsoleWindow\x93\xC1\x95ʏ\x88\x97\x9D Modified: trunk/teraterm/common/compat_win.h =================================================================== --- trunk/teraterm/common/compat_win.h 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/compat_win.h 2021-06-12 15:29:41 UTC (rev 9307) @@ -79,8 +79,6 @@ extern BOOL(WINAPI *pModifyMenuW)(HMENU hMnu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem); extern int(WINAPI *pGetMenuStringW)(HMENU hMenu, UINT uIDItem, LPWSTR lpString, int cchMax, UINT flags); extern BOOL(WINAPI *pSetWindowTextW)(HWND hWnd, LPCWSTR lpString); -extern DWORD(WINAPI *pGetPrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, - LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); extern UINT(WINAPI *pDragQueryFileW)(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch); extern BOOL (WINAPI *pSetDlgItemTextW)(HWND hDlg, int nIDDlgItem, LPCWSTR lpString); extern BOOL (WINAPI *pGetDlgItemTextW)(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax); @@ -128,6 +126,7 @@ extern DWORD (WINAPI *pGetPrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); extern BOOL (WINAPI *pWritePrivateProfileStringW)(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); +extern UINT (WINAPI *pGetPrivateProfileIntW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName); extern BOOL (WINAPI *pCreateProcessW)(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, @@ -160,6 +159,8 @@ extern HMODULE (WINAPI *pLoadLibraryW)(LPCWSTR lpLibFileName); extern DWORD (WINAPI *pGetModuleFileNameW)(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); extern DWORD (WINAPI *pExpandEnvironmentStringsW)(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); +extern DWORD (WINAPI *pGetTempPathW)(DWORD nBufferLength, LPWSTR lpBuffer); +extern UINT (WINAPI *pGetTempFileNameW)(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); // shlobj_core.h extern LPITEMIDLIST (WINAPI *pSHBrowseForFolderW)(LPBROWSEINFOW lpbi); Modified: trunk/teraterm/common/layer_for_unicode.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode.cpp 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/layer_for_unicode.cpp 2021-06-12 15:29:41 UTC (rev 9307) @@ -683,6 +683,22 @@ return r; } +UINT _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName) +{ + if (pGetPrivateProfileIntW != NULL) { + return pGetPrivateProfileIntW(lpAppName, lpKeyName, nDefault, lpFileName); + } + + char *appA = ToCharW(lpAppName); + char *keyA = ToCharW(lpKeyName); + char *fileA = ToCharW(lpFileName); + UINT r = GetPrivateProfileIntA(appA, keyA, nDefault, fileA); + free(appA); + free(keyA); + free(fileA); + return r; +} + BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, @@ -887,11 +903,11 @@ char filenameA[MAX_PATH]; DWORD r = GetModuleFileNameA(hModule, filenameA, sizeof(filenameA)); - wchar_t *bufW = ToWcharA(filenameA); - wcsncpy_s(lpFilename, nSize, bufW, _TRUNCATE); - r = (DWORD)wcslen(lpFilename); - free(bufW); - return r; + if (r == 0) { + return 0; + } + DWORD wlen = ACPToWideChar_t(filenameA, lpFilename, nSize); + return wlen - 1; // not including the terminating null character } DWORD _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize) @@ -910,3 +926,53 @@ free(dstW); return r; } + +HMODULE _GetModuleHandleW(LPCWSTR lpModuleName) +{ + char *lpStringA = ToCharW(lpModuleName); + HMODULE h = GetModuleHandleA(lpStringA); + free(lpStringA); + return h; +} + +UINT _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize) +{ + char buf[MAX_PATH]; + UINT r = GetSystemDirectoryA(buf, _countof(buf)); + if (r == 0) { + return 0; + } + size_t wlen = ACPToWideChar_t(buf, lpBuffer, uSize); + return wlen - 1; // not including the terminating null character +} + +DWORD _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer) +{ + if (pGetTempPathW != NULL) { + return pGetTempPathW(nBufferLength, lpBuffer); + } + + char buf[MAX_PATH]; + DWORD r = GetTempPathA(_countof(buf), buf); + if (r == 0) { + return 0; + } + size_t wlen = ACPToWideChar_t(buf, lpBuffer, nBufferLength); + return wlen - 1; // not including the terminating null character +} + +UINT _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName) +{ + if (pGetTempFileNameW != NULL) { + return pGetTempFileNameW(lpPathName, lpPrefixString, uUnique, lpTempFileName); + } + + char buf[MAX_PATH]; + char *lpPathNameA = ToCharW(lpPathName); + char *lpPrefixStringA = ToCharW(lpPrefixString); + UINT r = GetTempFileNameA(lpPathNameA, lpPrefixStringA, uUnique, buf); + ACPToWideChar_t(buf, lpTempFileName, MAX_PATH); + free(lpPathNameA); + free(lpPrefixStringA); + return r; +} Modified: trunk/teraterm/common/layer_for_unicode.h =================================================================== --- trunk/teraterm/common/layer_for_unicode.h 2021-06-12 15:29:32 UTC (rev 9306) +++ trunk/teraterm/common/layer_for_unicode.h 2021-06-12 15:29:41 UTC (rev 9307) @@ -121,6 +121,7 @@ DWORD _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); BOOL _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); +UINT _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName); BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, @@ -139,6 +140,10 @@ HMODULE _LoadLibraryW(LPCWSTR lpLibFileName); DWORD _GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); DWORD _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); +HMODULE _GetModuleHandleW(LPCWSTR lpModuleName); +UINT _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize); +DWORD _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer); +UINT _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); // gdi32.lib int _AddFontResourceW(LPCWSTR lpFileName); From scmnotify @ osdn.net Sun Jun 13 00:29:49 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:49 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDhdIF9fd2ZvcGVuX3MoKSDjgpIgbGF5?= =?utf-8?b?ZXJfZm9yX3VuaWNvZGVfY3J0IOOBuOenu+WLlQ==?= Message-ID: <1623511789.520724.24786.nullmailer@users.osdn.me> Revision: 9308 https://osdn.net/projects/ttssh2/scm/svn/commits/9308 Author: zmatsuo Date: 2021-06-13 00:29:49 +0900 (Sun, 13 Jun 2021) Log Message: ----------- __wfopen_s() を layer_for_unicode_crt へ移動 Modified Paths: -------------- trunk/teraterm/common/fileread.cpp trunk/teraterm/common/layer_for_unicode_crt.cpp trunk/teraterm/common/layer_for_unicode_crt.h -------------- next part -------------- Modified: trunk/teraterm/common/fileread.cpp =================================================================== --- trunk/teraterm/common/fileread.cpp 2021-06-12 15:29:41 UTC (rev 9307) +++ trunk/teraterm/common/fileread.cpp 2021-06-12 15:29:49 UTC (rev 9308) @@ -37,6 +37,7 @@ #include "codeconv.h" #include "ttlib.h" +#include "layer_for_unicode_crt.h" #include "fileread.h" @@ -44,25 +45,6 @@ typedef unsigned char uint8_t; #endif -static void __wfopen_s(FILE **fp, wchar_t const* filename, wchar_t const* mode) -{ - if (IsWindowsNTKernel()) { - // \x91\xBD\x95\xAA\x93\xE0\x95\x94\x82\xC5 CreateFileW() \x82\xF0\x8Eg\x97p\x82\xB5\x82Ă\xA2\x82\xE9 - // NT\x82ł̂ݎg\x97p\x82\xB7\x82\xE9 - _wfopen_s(fp, filename, mode); - if (fp != NULL) { - return; - } - // \x94O\x82̈\xD7 ANSI \x82ł\xE0\x83I\x81[\x83v\x83\x93\x82\xB7\x82\xE9 - } - // ANSI \x82ŃI\x81[\x83v\x83\x93 - char *filenameA = ToCharW(filename); - char *modeA = ToCharW(mode); - fopen_s(fp, filenameA, modeA); - free(filenameA); - free(modeA); -} - /** * \x83t\x83@\x83C\x83\x8B\x82\xF0\x83\x81\x83\x82\x83\x8A\x82ɓǂݍ\x9E\x82\xDE * @param[out] *_len \x83T\x83C\x83Y(terminater\x8A܂\xDE) Modified: trunk/teraterm/common/layer_for_unicode_crt.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode_crt.cpp 2021-06-12 15:29:41 UTC (rev 9307) +++ trunk/teraterm/common/layer_for_unicode_crt.cpp 2021-06-12 15:29:49 UTC (rev 9308) @@ -29,12 +29,12 @@ #include #include "codeconv.h" +#include "ttlib.h" #include "layer_for_unicode_crt.h" /** - * fopen \x82\xCC wchar_t, char \x97\xBC\x91Ή\x9E\x94\xC5 - * TODO __wfopen_s()#fileread.cpp \x82\xE0\x82\xB1\x82̃t\x83@\x83C\x83\x8B\x82Ɉړ\xAE\x82\xB7\x82\xE9 + * fopen \x82\xCC wchar_t\x94\xC5 */ FILE *__wfopen(const wchar_t *fname, const wchar_t *mode) { @@ -49,3 +49,22 @@ free(modeA); return fp; } + +void __wfopen_s(FILE **fp, wchar_t const* filename, wchar_t const* mode) +{ + if (IsWindowsNTKernel()) { + // \x91\xBD\x95\xAA\x93\xE0\x95\x94\x82\xC5 CreateFileW() \x82\xF0\x8Eg\x97p\x82\xB5\x82Ă\xA2\x82\xE9 + // NT\x82ł̂ݎg\x97p\x82\xB7\x82\xE9 + _wfopen_s(fp, filename, mode); + if (fp != NULL) { + return; + } + // \x94O\x82̈\xD7 ANSI \x82ł\xE0\x83I\x81[\x83v\x83\x93\x82\xB7\x82\xE9 + } + // ANSI \x82ŃI\x81[\x83v\x83\x93 + char *filenameA = ToCharW(filename); + char *modeA = ToCharW(mode); + fopen_s(fp, filenameA, modeA); + free(filenameA); + free(modeA); +} Modified: trunk/teraterm/common/layer_for_unicode_crt.h =================================================================== --- trunk/teraterm/common/layer_for_unicode_crt.h 2021-06-12 15:29:41 UTC (rev 9307) +++ trunk/teraterm/common/layer_for_unicode_crt.h 2021-06-12 15:29:49 UTC (rev 9308) @@ -35,6 +35,7 @@ #endif FILE *__wfopen(const wchar_t *fname, const wchar_t *mode); +void __wfopen_s(FILE **fp, wchar_t const* filename, wchar_t const* mode); #ifdef __cplusplus } From scmnotify @ osdn.net Sun Jun 13 00:29:58 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 13 Jun 2021 00:29:58 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMDldIGxheWVyX2Zvcl91bmljb2Rl44KS?= =?utf-8?b?5L2/55So44GZ44KL44KI44GG5L+u5q2j?= Message-ID: <1623511798.195826.24883.nullmailer@users.osdn.me> Revision: 9309 https://osdn.net/projects/ttssh2/scm/svn/commits/9309 Author: zmatsuo Date: 2021-06-13 00:29:57 +0900 (Sun, 13 Jun 2021) Log Message: ----------- layer_for_unicodeを使用するよう修正 Modified Paths: -------------- trunk/teraterm/common/dllutil.cpp trunk/teraterm/common/ttlib.c trunk/teraterm/common/ttlib_static_cpp.cpp trunk/teraterm/common/win32helper.cpp trunk/teraterm/teraterm/teraprn.cpp trunk/teraterm/teraterm/ttplug.c trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpmacro/ttmlib.c trunk/teraterm/ttpset/ttset.c trunk/teraterm/ttpset/ttset_keyboard.c trunk/ttpmenu/CMakeLists.txt -------------- next part -------------- Modified: trunk/teraterm/common/dllutil.cpp =================================================================== --- trunk/teraterm/common/dllutil.cpp 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/common/dllutil.cpp 2021-06-12 15:29:57 UTC (rev 9309) @@ -33,6 +33,8 @@ #endif #include +#include "layer_for_unicode.h" + #include "dllutil.h" typedef struct { @@ -54,7 +56,7 @@ int r; if (LoadFlag == DLL_GET_MODULE_HANDLE) { - module = GetModuleHandleW(dllName); + module = _GetModuleHandleW(dllName); assert(module != NULL); return module; } @@ -73,12 +75,12 @@ dllPath[0] = 0; switch (LoadFlag) { case DLL_LOAD_LIBRARY_SYSTEM: - r = GetSystemDirectoryW(dllPath, _countof(dllPath)); + r = _GetSystemDirectoryW(dllPath, _countof(dllPath)); assert(r != 0); if (r == 0) return NULL; break; case DLL_LOAD_LIBRARY_CURRENT: - r = GetModuleFileNameW(NULL, dllPath, _countof(dllPath)); + r = _GetModuleFileNameW(NULL, dllPath, _countof(dllPath)); assert(r != 0); if (r == 0) return NULL; *wcsrchr(dllPath, L'\\') = 0; @@ -88,7 +90,7 @@ } wcscat_s(dllPath, _countof(dllPath), L"\\"); wcscat_s(dllPath, _countof(dllPath), dllName); - module = LoadLibraryW(dllPath); + module = _LoadLibraryW(dllPath); if (module == NULL) { // \x91\xB6\x8D݂\xB5\x82Ȃ\xA2,dll\x82\xB6\x82\xE1\x82Ȃ\xA2? return NULL; Modified: trunk/teraterm/common/ttlib.c =================================================================== --- trunk/teraterm/common/ttlib.c 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/common/ttlib.c 2021-06-12 15:29:57 UTC (rev 9309) @@ -43,6 +43,7 @@ #include "tttypes.h" #include "compat_win.h" #include "codeconv.h" +#include "layer_for_unicode.h" #include "../teraterm/unicode_test.h" @@ -1018,8 +1019,8 @@ SetupFName = GetDefaultSetupFNameW(HomeDirW); /* Get LanguageFile name */ - GetPrivateProfileStringW(L"Tera Term", entryW, L"off", - Temp, _countof(Temp), SetupFName); + _GetPrivateProfileStringW(L"Tera Term", entryW, L"off", + Temp, _countof(Temp), SetupFName); TempA = ToCharW(Temp); strncpy_s(buf, buflen, TempA, _TRUNCATE); Modified: trunk/teraterm/common/ttlib_static_cpp.cpp =================================================================== --- trunk/teraterm/common/ttlib_static_cpp.cpp 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/common/ttlib_static_cpp.cpp 2021-06-12 15:29:57 UTC (rev 9309) @@ -872,7 +872,7 @@ IMalloc *pmalloc; SHGetMalloc(&pmalloc); if (SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl) == S_OK) { - SHGetPathFromIDListW(pidl, MyDoc); + _SHGetPathFromIDListW(pidl, MyDoc); pmalloc->Free(pidl); pmalloc->Release(); } @@ -888,7 +888,7 @@ wcscpy(dest, MyDoc); AppendSlashW(dest,destlen); wcsncat_s(dest, destlen, file, _TRUNCATE); - if (GetFileAttributesW(dest) != INVALID_FILE_ATTRIBUTES) { + if (_GetFileAttributesW(dest) != INVALID_FILE_ATTRIBUTES) { // My Documents \x82̐ݒ\xE8\x83t\x83@\x83C\x83\x8B return dest; } Modified: trunk/teraterm/common/win32helper.cpp =================================================================== --- trunk/teraterm/common/win32helper.cpp 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/common/win32helper.cpp 2021-06-12 15:29:57 UTC (rev 9309) @@ -31,6 +31,8 @@ #include #include +#include "layer_for_unicode.h" + #include "win32helper.h" /** @@ -51,7 +53,7 @@ } for(;;) { - DWORD r = GetModuleFileNameW(hModule, b, (DWORD)size); + DWORD r = _GetModuleFileNameW(hModule, b, (DWORD)size); if (r == 0) { // \x8A֐\x94\x82\xAA\x8E\xB8\x94s error = GetLastError(); @@ -99,7 +101,7 @@ } b[0] = 0; for(;;) { - DWORD r = GetPrivateProfileStringW(section, key, def, b, (DWORD)size, ini); + DWORD r = _GetPrivateProfileStringW(section, key, def, b, (DWORD)size, ini); if (r == 0 || b[0] == L'\0') { // \x8E\x9F\x82̏ꍇ\x82\xB1\x82\xB1\x82ɓ\xFC\x82\xE9 // ini\x82\xC9'key='\x82ƋL\x8Fq ("="\x82̌\xE3\x82ɉ\xBD\x82\xE0\x8F\x91\x82\xA2\x82Ă\xA2\x82Ȃ\xA2) @@ -141,7 +143,7 @@ */ DWORD hGetFullPathNameW(const wchar_t *lpFileName, wchar_t **fullpath, wchar_t **filepart) { - size_t len = GetFullPathNameW(lpFileName, 0, NULL, NULL); // include L'\0' + size_t len = _GetFullPathNameW(lpFileName, 0, NULL, NULL); // include L'\0' if (len == 0) { *fullpath = NULL; *filepart = NULL; @@ -149,7 +151,7 @@ } wchar_t *path = (wchar_t *)malloc(sizeof(wchar_t) * len); wchar_t *file; - len = GetFullPathNameW(lpFileName, (DWORD)len, path, &file); + len = _GetFullPathNameW(lpFileName, (DWORD)len, path, &file); if (len == 0) { free(path); return GetLastError(); Modified: trunk/teraterm/teraterm/teraprn.cpp =================================================================== --- trunk/teraterm/teraterm/teraprn.cpp 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/teraterm/teraprn.cpp 2021-06-12 15:29:57 UTC (rev 9309) @@ -42,6 +42,7 @@ #include "ttlib.h" #include "codeconv.h" #include "vtdisp.h" +#include "layer_for_unicode.h" #include "tt_res.h" #include "tmfc.h" @@ -450,15 +451,15 @@ KillTimer(HVTWin, IdPrnStartTimer); wchar_t TempPath[MAX_PATH]; - GetTempPathW(_countof(TempPath), TempPath); + _GetTempPathW(_countof(TempPath), TempPath); wchar_t Temp[MAX_PATH]; - if (GetTempFileNameW(TempPath, L"tmp", 0, Temp) == 0) { + if (_GetTempFileNameW(TempPath, L"tmp", 0, Temp) == 0) { free(p); return NULL; } p->PrnFName = _wcsdup(Temp); - HANDLE h = CreateFileW(p->PrnFName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE h = _CreateFileW(p->PrnFName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) { free(p); return NULL; @@ -474,7 +475,7 @@ if (handle->PrnFName == NULL) { return; } - DeleteFileW(handle->PrnFName); + _DeleteFileW(handle->PrnFName); free(handle->PrnFName); handle->PrnFName = NULL; } @@ -491,9 +492,9 @@ static void PrintFile_(PrintFile *handle) { if (VTPrintInit(IdPrnFile)==IdPrnFile) { - HANDLE HPrnFile = CreateFileW(handle->PrnFName, - GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE HPrnFile = _CreateFileW(handle->PrnFName, + GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (HPrnFile != INVALID_HANDLE_VALUE) { char BuffA[TermWidthMax]; @@ -589,9 +590,9 @@ PrnAbortDlg->Create(hInst,hParent,&PrintAbortFlag,&ts); HPrnAbortDlg = PrnAbortDlg->GetSafeHwnd(); - handle->HPrnFile = CreateFileW(handle->PrnFName, - GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + handle->HPrnFile = _CreateFileW(handle->PrnFName, + GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); PrintAbortFlag = (handle->HPrnFile == INVALID_HANDLE_VALUE) || ! PrnOpen(ts.PrnDev); handle->PrnBuffCount = 0; SetTimer(HVTWin,IdPrnProcTimer,0,NULL); Modified: trunk/teraterm/teraterm/ttplug.c =================================================================== --- trunk/teraterm/teraterm/ttplug.c 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/teraterm/ttplug.c 2021-06-12 15:29:57 UTC (rev 9309) @@ -41,6 +41,7 @@ #include "ttplugin.h" #include "codeconv.h" #include "asprintf.h" +#include "layer_for_unicode.h" #include "ttplug.h" @@ -66,7 +67,7 @@ const wchar_t *sub_message; HMODULE hPlugin; - hPlugin = LoadLibraryW(fileName); + hPlugin = _LoadLibraryW(fileName); if (hPlugin != NULL) { TTXBindProc bind = NULL; FARPROC *pbind = (FARPROC *)&bind; @@ -147,7 +148,7 @@ aswprintf(&load_mask, L"%s\\TTX*.DLL", HomeDirW); - hFind = FindFirstFileW(load_mask, &fd); + hFind = _FindFirstFileW(load_mask, &fd); if (hFind != INVALID_HANDLE_VALUE) { do { wchar_t *filename; @@ -154,7 +155,7 @@ aswprintf(&filename, L"%s\\%s", HomeDirW, fd.cFileName); loadExtension(filename); free(filename); - } while (FindNextFileW(hFind, &fd)); + } while (_FindNextFileW(hFind, &fd)); FindClose(hFind); } free(load_mask); Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-06-12 15:29:57 UTC (rev 9309) @@ -4659,7 +4659,7 @@ free(HomeDirW); } - SetCurrentDirectoryW(DirW); + _SetCurrentDirectoryW(DirW); /* OPENFILENAME record */ OPENFILENAMEW ofn = {}; Modified: trunk/teraterm/ttpmacro/ttmlib.c =================================================================== --- trunk/teraterm/ttpmacro/ttmlib.c 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/ttpmacro/ttmlib.c 2021-06-12 15:29:57 UTC (rev 9309) @@ -38,6 +38,7 @@ #include "compat_win.h" #include "ttmlib.h" #include "codeconv.h" +#include "layer_for_unicode.h" static char CurrentDir[MAXPATHLEN]; @@ -186,13 +187,13 @@ wchar_t *pCurrentDirW = ToWcharU8(CurrentDir); wchar_t *DirW = ToWcharU8(Dir); char *pCurrentDirU8; - GetCurrentDirectoryW(_countof(Temp), Temp); - SetCurrentDirectoryW(pCurrentDirW); - SetCurrentDirectoryW(DirW); - GetCurrentDirectoryW(_countof(CurrentDirW), CurrentDirW); + _GetCurrentDirectoryW(_countof(Temp), Temp); + _SetCurrentDirectoryW(pCurrentDirW); + _SetCurrentDirectoryW(DirW); + _GetCurrentDirectoryW(_countof(CurrentDirW), CurrentDirW); pCurrentDirU8 = ToU8W(CurrentDirW); strncpy_s(CurrentDir, _countof(CurrentDir), pCurrentDirU8, _TRUNCATE); - SetCurrentDirectoryW(Temp); + _SetCurrentDirectoryW(Temp); free(pCurrentDirW); free(DirW); free(pCurrentDirU8); Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/ttpset/ttset.c 2021-06-12 15:29:57 UTC (rev 9309) @@ -46,6 +46,7 @@ #include "tt_res.h" #include "servicenames.h" #include "codeconv.h" +#include "layer_for_unicode.h" #include "win32helper.h" #define DllExport __declspec(dllexport) @@ -171,7 +172,7 @@ wchar_t *defW = ToWcharA(defA); DWORD lenW_max = size; wchar_t *strW = malloc(sizeof(wchar_t) * lenW_max); - DWORD lenW = GetPrivateProfileStringW(appW, keyW, defW, strW, lenW_max, filenameW); + DWORD lenW = _GetPrivateProfileStringW(appW, keyW, defW, strW, lenW_max, filenameW); free(appW); free(keyW); free(defW); @@ -201,7 +202,7 @@ wchar_t *appW = ToWcharA(appA); wchar_t *keyW = ToWcharA(keyA); wchar_t *strW = ToWcharA(strA); - BOOL r = WritePrivateProfileStringW(appW, keyW, strW, filenameW); + BOOL r = _WritePrivateProfileStringW(appW, keyW, strW, filenameW); free(appW); free(keyW); free(strW); @@ -215,7 +216,7 @@ { wchar_t *appW = ToWcharA(appA); wchar_t *keyW = ToWcharA(keyA); - UINT r = GetPrivateProfileIntW(appW, keyW, def, filenameW); + UINT r = _GetPrivateProfileIntW(appW, keyW, def, filenameW); free(appW); free(keyW); return r; Modified: trunk/teraterm/ttpset/ttset_keyboard.c =================================================================== --- trunk/teraterm/ttpset/ttset_keyboard.c 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/teraterm/ttpset/ttset_keyboard.c 2021-06-12 15:29:57 UTC (rev 9309) @@ -36,6 +36,7 @@ #include #include "ttlib.h" #include "codeconv.h" +#include "layer_for_unicode.h" #include "../teraterm/keyboard_i.h" typedef struct { @@ -50,7 +51,7 @@ for (i = 0; i < count; i++) { wchar_t Temp[11]; WORD Num; - GetPrivateProfileStringW(section, p->key_str, L"", Temp, _countof(Temp), FName); + _GetPrivateProfileStringW(section, p->key_str, L"", Temp, _countof(Temp), FName); if (Temp[0] == 0) Num = 0xFFFF; else if (_wcsicmp(Temp, L"off") == 0) @@ -190,8 +191,8 @@ wchar_t EntName[7]; wchar_t TempStr[256]; _snwprintf_s(EntName, _countof(EntName), _TRUNCATE, L"User%d", i + 1); - GetPrivateProfileStringW(L"User keys", EntName, L"", - TempStr, _countof(TempStr), FName); + _GetPrivateProfileStringW(L"User keys", EntName, L"", + TempStr, _countof(TempStr), FName); if (TempStr[0] == 0) { continue; } Modified: trunk/ttpmenu/CMakeLists.txt =================================================================== --- trunk/ttpmenu/CMakeLists.txt 2021-06-12 15:29:49 UTC (rev 9308) +++ trunk/ttpmenu/CMakeLists.txt 2021-06-12 15:29:57 UTC (rev 9309) @@ -30,9 +30,8 @@ source_group( "common" - FILES - ${COMMON_SRC} - ) + REGULAR_EXPRESSION + "teraterm\/common\/") if(SUPPORT_OLD_WINDOWS) if(MSVC) From scmnotify @ osdn.net Sat Jun 19 01:05:02 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sat, 19 Jun 2021 01:05:02 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMTBdIFRleHTjg5XjgqHjgqTjg6vpgIE=?= =?utf-8?b?5L+h5pmCLEFOU0njgafjg5XjgqHjgqTjg6vjgpLoqq3jgb/ovrzjgb/jgIFV?= =?utf-8?b?bmljb2Rl44Gn6YCB5L+h?= Message-ID: <1624032302.288623.5983.nullmailer@users.osdn.me> Revision: 9310 https://osdn.net/projects/ttssh2/scm/svn/commits/9310 Author: zmatsuo Date: 2021-06-19 01:05:01 +0900 (Sat, 19 Jun 2021) Log Message: ----------- Textファイル送信時,ANSIでファイルを読み込み、Unicodeで送信 - テキストファイル読み込み - ANSI文字コードに決め打ちで読み込む - 日本語 Windows では Shift JIS (CP932) - Unicode に変換する - 送信時に Unicode を出力文字コードに変換する - ワークをできるだけ動的に確保するようにした Modified Paths: -------------- trunk/doc/en/html/menu/file-sendfile.html trunk/doc/ja/html/menu/file-sendfile.html trunk/installer/release/lang_utf8/Japanese.lng trunk/teraterm/teraterm/filesys.cpp -------------- next part -------------- Modified: trunk/doc/en/html/menu/file-sendfile.html =================================================================== --- trunk/doc/en/html/menu/file-sendfile.html 2021-06-12 15:29:57 UTC (rev 9309) +++ trunk/doc/en/html/menu/file-sendfile.html 2021-06-18 16:05:01 UTC (rev 9310) @@ -18,9 +18,26 @@

File Name
- Enter or select the file name of an existing file. + \x91\x97\x90M\x82\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82̃t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x93\xFC\x97͂܂\xBD\x82͑I\x91\xF0\x82\xB5\x82Ă\xAD\x82\xBE\x82\xB3\x82\xA2\x81B + \x82\xB7\x82łɑ\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82łȂ\xAF\x82\xEA\x82΂Ȃ\xE8\x82܂\xB9\x82\xF1\x81B
+ \x83_\x83C\x83A\x83\x8D\x83O\x82Ƀt\x83@\x83C\x83\x8B\x82\xF0\x83h\x83\x8D\x83b\x83v\x82\xB7\x82邱\x82ƂŃt\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x93\xFC\x97͂\xB7\x82邱\x82Ƃ\xE0\x82ł\xAB\x82܂\xB7\x81B
+
Tera Term 4 \x82Ɠ\xAF\x82\xB6\x95\xFB\x96@\x82ő\x97\x90M
+
+
+
Tera Term 4 \x82Ɠ\xAF\x82\xB6\x95\xFB\x96@(\x83`\x83F\x83b\x83N\x82\xF0\x93\xFC\x82ꂽ\x82Ƃ\xAB)
+
+ \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82݂Ȃ\xAA\x82瑗\x90M\x82\xB5\x82܂\xB7\x81B
+ \x83e\x83L\x83X\x83g\x83t\x83@\x83C\x83\x8B\x82\xCDACP\x82Ƃ\xB5\x82ēǂݍ\x9E\x82݁A\x83G\x83\x93\x83R\x81[\x83h\x82͎\xA9\x93\xAE\x94\xBB\x92肳\x82\xEA\x82܂\xB9\x82\xF1\x81B
+
+
\x83`\x83F\x83b\x83N\x82\xF0\x8AO\x82\xB5\x82\xBD\x8E\x9E
+
+ \x83t\x83@\x83C\x83\x8B\x82\xF0\x83\x81\x83\x82\x83\x8A\x82ɓǂݍ\x9E\x82\xF1\x82ł\xA9\x82瑗\x90M\x82\xB5\x82܂\xB7\x81B
+ \x83e\x83L\x83X\x83g\x83t\x83@\x83C\x83\x8B\x82̃G\x83\x93\x83R\x81[\x83h\x82͎\xA9\x93\xAE\x94\xBB\x92肵\x82܂\xB7\x81B +
+
+
Binary
If you select this option, received characters are sent without any @@ -27,8 +44,107 @@ modifications. Otherwise, new-line codes are converted and control characters (except TAB, LF and CR) are stripped out.
+ +
delay type
+
+
+
no delay
+
+ \x83f\x83B\x83\x8C\x83C\x8F\x88\x97\x9D\x82Ȃ\xB5 +
+ +
per charactor
+
+ 1\x95\xB6\x8E\x9A\x96\x88\x82Ƀf\x83B\x83\x8C\x83C\x8F\x88\x97\x9D\x82\xF0\x8Ds\x82\xA4 +
+ +
per line
+
+ 1\x8Ds\x96\x88\x82Ƀf\x83B\x83\x8C\x83C\x8F\x88\x97\x9D\x82\xF0\x8Ds\x82\xA4 +
+ +
per sendsize
+
+ \x8Ew\x92著\x90M\x95\xB6\x8E\x9A\x96\x88\x82Ƀf\x83B\x83\x8C\x83C\x8F\x88\x97\x9D\x82\xF0\x8Ds\x82\xA4 +
+
+ +
+ +
send size
+
+ \x91\x97\x90M\x83T\x83C\x83Y(delay type\x82\xAA per sendsize\x82̂Ƃ\xAB\x97L\x8C\xF8) +
+ +
delay time(ms)
+
+ \x83f\x83B\x83\x8C\x83C\x8E\x9E\x8A\xD4 +
+

\x91\x97\x90M\x83T\x83C\x83Y

+ +

+ Tera Term\x82̒ʐM\x91\x8A\x8E\xE8\x82̎\xF3\x90M\x83o\x83b\x83t\x83@\x83T\x83C\x83Y\x82Ə\x88\x97\x9D\x91\xAC\x93x\x82\xF0\x8Dl\x97\xB6\x82\xB7\x82邱\x82ƂŁA + \x8Ew\x92肵\x82\xBD\x91\x97\x90M\x83T\x83C\x83Y\x96\x88\x82Ƀf\x83B\x83\x8C\x83C\x82\xF0\x93\xFC\x82\xEA\x82邱\x82ƂŁA + 1\x83L\x83\x83\x83\x89\x83N\x83^\x96\x88\x81A1\x8Ds\x96\x88\x82Ƀf\x83B\x83\x8C\x83C\x82\xF0\x93\xFC\x82\xEA\x82\xE9\x82\xE6\x82\xE8\x8C\xF8\x97\xA6\x93I\x82Ƀt\x83@\x83C\x83\x8B\x91\x97\x90M\x82\xF0\x8Ds\x82\xA4\x82\xB1\x82Ƃ\xAA\x82ł\xAB\x82܂\xB7\x81B +

+ +

+ \x91\x97\x90M\x83f\x81[\x83^\x82̃h\x83\x8D\x83b\x83v\x82͎\x9F\x82̂Ƃ\xB1\x82\xEB\x82Ŕ\xAD\x90\xB6\x82\xB7\x82邱\x82Ƃ\xAA\x8Dl\x82\xA6\x82\xE7\x82\xEA\x82܂\xB7\x81B +

+ +
+                     s1            s2                 s3                s4                         program
+Tera Term ---> Tera Term\x93\xE0  ---> Windows ---> (sshd,telnet,pipe) ---> OS,driver      ---> \x8B[\x8E\x97\x92[\x96\x96(pty) + \x83V\x83F\x83\x8B,\x82\xBB\x82̑\xBC\x83R\x83}\x83\x93\x83h
+               \x91\x97\x90M\x83o\x83b\x83t\x83@                   (serial          )      UART\x83`\x83b\x83v\x82Ȃ\xC7      \x91g\x8D\x9E\x83v\x83\x8D\x83O\x83\x89\x83\x80\x93\x99
+               \x8E\xF3\x90M\x83o\x83b\x83t\x83@ <---         <---                    <---                <---
+                     r1            r2                 r3                r4
+    
+ +
+
s1 Tera Term\x93\xE0\x82̑\x97\x90M\x83o\x83b\x83t\x83@
+
+ \x89”\\x90\xAB\x82͒Ⴂ\x82ł\xB5\x82傤\x81B
+ \x91\x97\x90M\x83o\x83b\x83t\x83@\x82̋󂫃T\x83C\x83Y\x82\xF0\x8C\xA9\x82Ȃ\xAA\x82\xE7\x83f\x81[\x83^\x82\xF0\x8Bl\x82߂Ă\xA2\x82\xAB\x82܂\xB7\x81B
+
s2 Windows
+
+ \x89”\\x90\xAB\x82͒Ⴂ\x82ł\xB5\x82傤\x81B
+ \x8Eg\x97p\x82\xB7\x82\xE9\x83n\x81[\x83h\x83E\x83F\x83A\x81A\x83h\x83\x89\x83C\x83o\x82̃o\x81[\x83W\x83\x87\x83\x93\x82ɂ\xE6\x82\xC1\x82Ă\xCDBSoD\x82\xF0\x8A܂߂ėl\x81X\x82ȕs\x8B\x82\xAA\x94\xAD\x90\xB6\x82\xB7\x82邱\x82Ƃ\xAA\x82\xA0\x82\xE8\x82܂\xB7\x81B
+ Tera Term\x82̃V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x90ݒ\xE8\x82ł̓h\x83\x89\x83C\x83o\x82̏ڍׂ\xF0\x8C\xA9\x82邱\x82Ƃ\xAA\x82ł\xAB\x82܂\xB7\x81B +
+
s3 \x91\x97\x90M\x98H
+
+ serial\x82̏ꍇ\x83G\x83\x89\x81[\x8E\x9E\x82̍đ\x97\x8F\x88\x97\x9D\x82͂\xA0\x82\xE8\x82܂\xB9\x82\xF1\x81B\x83f\x81[\x83^\x82ɃG\x83\x89\x81[\x82\xAA\x94\xAD\x90\xB6\x82\xB7\x82\xE9\x82ƃh\x83\x8D\x83b\x83v\x82\xB5\x82܂\xB7\x81B
+ TCP/IP, pipe\x82̏ꍇ\x82͉”\\x90\xAB\x82͒Ⴂ\x82Ǝv\x82\xED\x82\xEA\x82܂\xB7\x81B +
+
s4 OS,UART\x83`\x83b\x83v
+
+ PC(CPU)\x82̏\x88\x97\x9D\x94\\x97͂𒴂\xA6\x82\xBD\x83f\x81[\x83^\x82̎\xF3\x90M(program\x82\xAAOS\x82\xE2\x83`\x83b\x83v\x82\xA9\x82\xE7\x8E\xF3\x90M\x83f\x81[\x83^\x82\xF0\x88\xF8\x82\xAB\x8E\xE6\x82\xE7\x82Ȃ\xA2\x8Fꍇ)\x93\x99\x82ŁA + OS(\x83h\x83\x89\x83C\x83o)\x81AUART\x83`\x83b\x83v\x82̎\xF3\x90M\x83o\x83b\x83t\x83@\x82\xAA\x83I\x81[\x83o\x81[\x83t\x83\x8D\x81[\x82\xB5\x82ăh\x83\x8D\x83b\x83v\x82\xB5\x82܂\xB7\x81B
+ \x83t\x83\x8D\x81[\x90\xA7\x8C䓙\x82\xCDOS(\x83h\x83\x89\x83C\x83o)\x82\xAA\x8Ds\x82\xA4\x82\xA9program\x82\xAA\x8Ds\x82\xA4\x82\xA9\x82͎\xC0\x91\x95\x82ɂ\xE6\x82\xE8\x82܂\xB7\x81B
+ TCP/IP\x82ł̓t\x83\x8D\x81[\x90\xA7\x8C\xE4,\x83G\x83\x89\x81[\x8E\x9E\x82̍đ\x97\x82\xAA\x8Ds\x82\xED\x82\xEA\x81A\x91\xBD\x82\xAD\x82̏ꍇOS\x93\xE0\x82̃v\x83\x8D\x83g\x83R\x83\x8B\x83X\x83^\x83b\x83N\x82\xAA\x82\xB1\x82\xEA\x82\xE7\x82̏\x88\x97\x9D\x82\xF0\x8Ds\x82\xA2\x82܂\xB7\x81B
+ \x83V\x83\x8A\x83A\x83\x8B\x82ł̓t\x83\x8D\x81[\x90\xA7\x8C\xE4\x82̗L\x96\xB3\x82̓\x86\x81[\x83U\x81[\x82\xAA\x8C\x88\x82߂邱\x82Ƃ\xAA\x82ł\xAB\x81A\x83I\x81[\x83o\x81[\x83t\x83\x8D\x81[\x82ȂǃG\x83\x89\x81[\x8E\x9E\x82̍đ\x97\x82͍s\x82\xED\x82\xEA\x82܂\xB9\x82\xF1\x81B +
+
program
+
+ \x83v\x83\x8D\x83O\x83\x89\x83\x80\x93\xE0\x82̎\xF3\x90M\x83o\x83b\x83t\x83@\x83I\x81[\x83o\x81[\x83t\x83\x8D\x81[\x82ȂǂŃh\x83\x8D\x83b\x83v\x82\xB5\x82܂\xB7\x81B
+ \x89\xBC\x91z\x92[\x96\x96(pty)\x82ł̓o\x83b\x83t\x83@\x82\xAA\x88\xEC\x82ꂻ\x82\xA4\x82ɂȂ\xE9\x82\xC60x07(BEL)\x82\xAA\x91\x97\x82\xE7\x82\xEA\x81ATera Term\x82Ńx\x83\x8B\x82\xAA\x82Ȃ\xE8\x82܂\xB7\x81B +
+
+ + \x8E\xE5\x82\xC8UART\x83`\x83b\x83v\x81A\x83h\x83\x89\x83C\x83o\x82̎\xF3\x90M\x83o\x83b\x83t\x83@\x83T\x83C\x83Y +
+      8250 UART                 \x8E\xF3\x90M\x83o\x83b\x83t\x83@\x82Ȃ\xB5
+      16550 UART                16 Byte FIFO
+      FT232R                    256 Byte receive buffer
+      TTY drive(Linux 2.6.26)   4KB  (TTSSH\x82ɂ\xE6\x82\xE9SSH\x82̐݌v\x82Ǝ\xC0\x91\x95/\x8B^\x8E\x97\x92[\x96\x96\x82̂\xB5\x82\xAD\x82\xDD)
+    
+ +

+ \x91\x97\x90M\x83f\x81[\x83^\x82̃G\x83R\x81[\x82\xAA\x95Ԃ\xC1\x82Ă\xB1\x82Ȃ\xA2\x8Fꍇ\x82͎\xF3\x90M\x83f\x81[\x83^\x82\xAA\x82ǂ\xB1\x82\xA9\x82Ńh\x83\x8D\x83b\x83v\x82\xB5\x82Ă\xA2\x82邱\x82Ƃ\xE0\x8Dl\x82\xA6\x82\xE7\x82\xEA\x82܂\xB7\x81B +

+

"Send file" dialog box (displayed while sending)

Close
Modified: trunk/doc/ja/html/menu/file-sendfile.html =================================================================== --- trunk/doc/ja/html/menu/file-sendfile.html 2021-06-12 15:29:57 UTC (rev 9309) +++ trunk/doc/ja/html/menu/file-sendfile.html 2021-06-18 16:05:01 UTC (rev 9310) @@ -19,9 +19,25 @@
File Name
\x91\x97\x90M\x82\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82̃t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x93\xFC\x97͂܂\xBD\x82͑I\x91\xF0\x82\xB5\x82Ă\xAD\x82\xBE\x82\xB3\x82\xA2\x81B - \x82\xB7\x82łɑ\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82łȂ\xAF\x82\xEA\x82΂Ȃ\xE8\x82܂\xB9\x82\xF1\x81B + \x82\xB7\x82łɑ\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82łȂ\xAF\x82\xEA\x82΂Ȃ\xE8\x82܂\xB9\x82\xF1\x81B
+ \x83_\x83C\x83A\x83\x8D\x83O\x82Ƀt\x83@\x83C\x83\x8B\x82\xF0\x83h\x83\x8D\x83b\x83v\x82\xB7\x82邱\x82ƂŃt\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x93\xFC\x97͂\xB7\x82邱\x82Ƃ\xE0\x82ł\xAB\x82܂\xB7\x81B
+
Tera Term 4 \x82Ɠ\xAF\x82\xB6\x95\xFB\x96@\x82ő\x97\x90M
+
+
+
Tera Term 4 \x82Ɠ\xAF\x82\xB6\x95\xFB\x96@(\x83`\x83F\x83b\x83N\x82\xF0\x93\xFC\x82ꂽ\x82Ƃ\xAB)
+
+ \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82݂Ȃ\xAA\x82瑗\x90M\x82\xB5\x82܂\xB7\x81B
+ \x83e\x83L\x83X\x83g\x83t\x83@\x83C\x83\x8B\x82\xCDACP\x82Ƃ\xB5\x82ēǂݍ\x9E\x82݁A\x83G\x83\x93\x83R\x81[\x83h\x82͎\xA9\x93\xAE\x94\xBB\x92肳\x82\xEA\x82܂\xB9\x82\xF1\x81B
+
+
\x83`\x83F\x83b\x83N\x82\xF0\x8AO\x82\xB5\x82\xBD\x8E\x9E
+
+ \x83t\x83@\x83C\x83\x8B\x82\xF0\x83\x81\x83\x82\x83\x8A\x82ɓǂݍ\x9E\x82\xF1\x82ł\xA9\x82瑗\x90M\x82\xB5\x82܂\xB7\x81B
+ \x83e\x83L\x83X\x83g\x83t\x83@\x83C\x83\x8B\x82̃G\x83\x93\x83R\x81[\x83h\x82͎\xA9\x93\xAE\x94\xBB\x92肵\x82܂\xB7\x81B +
+
+
Binary
\x83t\x83@\x83C\x83\x8B\x82̓\xE0\x97e\x82\xF0\x82\xBB\x82̂܂ܑ\x97\x90M\x82\xB5\x82\xBD\x82\xA2\x8Fꍇ\x82͑I\x91\xF0\x82\xB5\x82Ă\xAD\x82\xBE\x82\xB3\x82\xA2\x81B Modified: trunk/installer/release/lang_utf8/Japanese.lng =================================================================== --- trunk/installer/release/lang_utf8/Japanese.lng 2021-06-12 15:29:57 UTC (rev 9309) +++ trunk/installer/release/lang_utf8/Japanese.lng 2021-06-18 16:05:01 UTC (rev 9310) @@ -546,7 +546,7 @@ ; sendfile DLG_SENDFILE_TERATERM4=Tera Term 4と同じ方法で送信 -DLG_SENDFILE_TERATERM4_TOOLTIP=Tera Term 4の場合\n・ファイルから読み込みながら送信する\n・テキストファイルのエンコードは自動判定されない\nTera Term 5の場合\n・ファイルをメモリに読み込んでから送信する\n・テキストファイルのエンコードは自動判定される +DLG_SENDFILE_TERATERM4_TOOLTIP=Tera Term 4の場合\n・ファイルから読み込みながら送信する\n・テキストファイルはACPとして読み込み,エンコードは自動判定されない\nTera Term 5の場合\n・ファイルをメモリに読み込んでから送信する\n・テキストファイルのエンコードは自動判定される [TTSSH] ; font Modified: trunk/teraterm/teraterm/filesys.cpp =================================================================== --- trunk/teraterm/teraterm/filesys.cpp 2021-06-12 15:29:57 UTC (rev 9309) +++ trunk/teraterm/teraterm/filesys.cpp 2021-06-18 16:05:01 UTC (rev 9310) @@ -41,20 +41,10 @@ #include "vtterm.h" #include "layer_for_unicode.h" #include "asprintf.h" +#include "codeconv.h" #include "filesys.h" -typedef struct { - wchar_t *FullName; - - HANDLE FileHandle; - LONG FileSize, ByteCount; - - DWORD StartTime; - BOOL FilePause; -} TFileVar; -typedef TFileVar *PFileVar; - typedef enum { FS_BRACKET_NONE, FS_BRACKET_START, @@ -61,11 +51,6 @@ FS_BRACKET_END, } FileBracketMode_t; -static PFileVar SendVar = NULL; - -static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode; -static BYTE FileByte; - #define FILE_SEND_BUF_SIZE 8192 struct FileSendHandler { CHAR buf[FILE_SEND_BUF_SIZE]; @@ -72,17 +57,36 @@ int pos; int end; }; -static struct FileSendHandler FileSendHandler; -static int FileDlgRefresh; -static FileBracketMode_t FileBracketMode = FS_BRACKET_NONE; -static int FileBracketPtr = 0; -static char BracketStartStr[] = "\033[200~"; -static char BracketEndStr[] = "\033[201~"; +typedef struct { + wchar_t *FullName; + HANDLE FileHandle; + LONG FileSize; // uint64_t FileSize; TODO + LONG ByteCount; // uint64_t ByteCount; + + DWORD StartTime; + BOOL FilePause; + + BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode; + + FileBracketMode_t FileBracketMode; + int FileBracketPtr; + + PFileTransDlg SendDlg; + int FileDlgRefresh; // ? + + wchar_t SendChar; + + struct FileSendHandler FileSendHandler; +} TFileVar; +typedef TFileVar *PFileVar; + +static PFileVar SendVar = NULL; static BOOL FSend = FALSE; -static PFileTransDlg SendDlg = NULL; +static const char BracketStartStr[] = "\033[200~"; +static const char BracketEndStr[] = "\033[201~"; static BOOL OpenFTDlg(PFileVar fv) { @@ -114,7 +118,7 @@ fv->FilePause = FALSE; fv->StartTime = GetTickCount(); - SendDlg = FTDlg; /* File send */ + fv->SendDlg = FTDlg; /* File send */ return TRUE; } @@ -122,9 +126,9 @@ #if 0 static void ShowFTDlg(WORD OpId) { - if (SendDlg != NULL) { - SendDlg->ShowWindow(SW_SHOWNORMAL); - SetForegroundWindow(SendDlg->GetSafeHwnd()); + if (fv->SendDlg != NULL) { + fv->SendDlg->ShowWindow(SW_SHOWNORMAL); + SetForegroundWindow(fv->SendDlg->GetSafeHwnd()); } } #endif @@ -201,25 +205,25 @@ return FALSE; } SendVar->ByteCount = 0; - SendVar->FileSize = (LONG)GetFSize64H(SendVar->FileHandle); + SendVar->FileSize = GetFSize64H(SendVar->FileHandle); TalkStatus = IdTalkFile; - FileRetrySend = FALSE; - FileRetryEcho = FALSE; - FileCRSend = FALSE; - FileReadEOF = FALSE; - FileSendHandler.pos = 0; - FileSendHandler.end = 0; - FileDlgRefresh = 0; + fv->FileRetrySend = FALSE; + fv->FileRetryEcho = FALSE; + fv->FileCRSend = FALSE; + fv->FileReadEOF = FALSE; + fv->FileSendHandler.pos = 0; + fv->FileSendHandler.end = 0; + fv->FileDlgRefresh = 0; if (BracketedPasteMode()) { - FileBracketMode = FS_BRACKET_START; - FileBracketPtr = 0; - BinaryMode = TRUE; + fv->FileBracketMode = FS_BRACKET_START; + fv->FileBracketPtr = 0; + fv->BinaryMode = TRUE; } else { - FileBracketMode = FS_BRACKET_NONE; - BinaryMode = ts.TransBin; + fv->FileBracketMode = FS_BRACKET_NONE; + fv->BinaryMode = ts.TransBin; } if (! OpenFTDlg(SendVar)) { @@ -233,12 +237,13 @@ void FileSendEnd(void) { if (FSend) { + PFileVar fv = SendVar; FSend = FALSE; TalkStatus = IdTalkKeyb; - if (SendDlg!=NULL) + if (fv->SendDlg!=NULL) { - SendDlg->DestroyWindow(); - SendDlg = NULL; + fv->SendDlg->DestroyWindow(); + fv->SendDlg = NULL; } FreeFileVar(&SendVar); } @@ -257,22 +262,31 @@ } } -static int FSOut1(BYTE b) +static int FSOut1(PFileVar fv) { - if (BinaryMode) - return CommBinaryOut(&cv,(PCHAR)&b,1); - else if ((b>=0x20) || (b==0x09) || (b==0x0A) || (b==0x0D)) - return CommTextOut(&cv,(PCHAR)&b,1); - else - return 1; + if (fv->BinaryMode) { + BYTE b = (BYTE)fv->SendChar; + return CommBinaryOut(&cv, (PCHAR)&b, 1); + } + else { + wchar_t wc = fv->SendChar; + if ((wc >= 0x20) || (wc == 0x09) || (wc == 0x0A) || (wc == 0x0D)) { + return CommTextOutW(&cv, &wc, 1); + } + else { + return 1; + } + } } -static int FSEcho1(BYTE b) +static int FSEcho1(PFileVar fv) { - if (BinaryMode) + if (fv->BinaryMode) { + BYTE b = (BYTE)fv->SendChar; return CommBinaryEcho(&cv,(PCHAR)&b,1); - else - return CommTextEcho(&cv,(PCHAR)&b,1); + } else { + return CommTextEchoW(&cv, &fv->SendChar, 1); + } } // \x88ȉ\xBA\x82̎\x9E\x82͂\xB1\x82\xBF\x82\xE7\x82̊֐\x94\x82\xF0\x8Eg\x82\xA4 @@ -287,48 +301,48 @@ DWORD read_bytes; PFileVar fv = SendVar; - if ((SendDlg == NULL) || (fv->FilePause == TRUE)) + if ((fv->SendDlg == NULL) || (fv->FilePause == TRUE)) return; BCOld = SendVar->ByteCount; - if (FileRetrySend) + if (fv->FileRetrySend) { - c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]), - FileSendHandler.end - FileSendHandler.pos); - FileSendHandler.pos += c; - FileRetrySend = (FileSendHandler.end != FileSendHandler.pos); - if (FileRetrySend) + c = CommRawOut(&cv, &(fv->FileSendHandler.buf[fv->FileSendHandler.pos]), + fv->FileSendHandler.end - fv->FileSendHandler.pos); + fv->FileSendHandler.pos += c; + fv->FileRetrySend = (fv->FileSendHandler.end != fv->FileSendHandler.pos); + if (fv->FileRetrySend) return; } do { - if (FileSendHandler.pos == FileSendHandler.end) { - ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL); + if (fv->FileSendHandler.pos == fv->FileSendHandler.end) { + ReadFile(SendVar->FileHandle, &(fv->FileSendHandler.buf[0]), sizeof(fv->FileSendHandler.buf), &read_bytes, NULL); fc = LOWORD(read_bytes); - FileSendHandler.pos = 0; - FileSendHandler.end = fc; + fv->FileSendHandler.pos = 0; + fv->FileSendHandler.end = fc; } else { - fc = FileSendHandler.end - FileSendHandler.end; + fc = fv->FileSendHandler.end - fv->FileSendHandler.end; } if (fc != 0) { - c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]), - FileSendHandler.end - FileSendHandler.pos); - FileSendHandler.pos += c; - FileRetrySend = (FileSendHandler.end != FileSendHandler.pos); + c = CommRawOut(&cv, &(fv->FileSendHandler.buf[fv->FileSendHandler.pos]), + fv->FileSendHandler.end - fv->FileSendHandler.pos); + fv->FileSendHandler.pos += c; + fv->FileRetrySend = (fv->FileSendHandler.end != fv->FileSendHandler.pos); SendVar->ByteCount = SendVar->ByteCount + c; - if (FileRetrySend) + if (fv->FileRetrySend) { if (SendVar->ByteCount != BCOld) { - SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); + fv->SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); } return; } } - FileDlgRefresh = SendVar->ByteCount; - SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); + fv->FileDlgRefresh = SendVar->ByteCount; + fv->SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); BCOld = SendVar->ByteCount; if (fc != 0) return; @@ -344,69 +358,87 @@ PFileVar fv = SendVar; if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode && - BinaryMode && FileBracketMode == FS_BRACKET_NONE && !cv.TelFlag && + fv->BinaryMode && fv->FileBracketMode == FS_BRACKET_NONE && !cv.TelFlag && (ts.LocalEcho == 0) && (ts.Baud >= 115200)) { return FileSendBinayBoost(); } - if ((SendDlg == NULL) || (fv->FilePause == TRUE)) + if ((fv->SendDlg == NULL) || (fv->FilePause == TRUE)) return; BCOld = SendVar->ByteCount; - if (FileRetrySend) + if (fv->FileRetrySend) { - FileRetryEcho = (ts.LocalEcho>0); - c = FSOut1(FileByte); - FileRetrySend = (c==0); - if (FileRetrySend) + fv->FileRetryEcho = (ts.LocalEcho>0); + c = FSOut1(fv); + fv->FileRetrySend = (c==0); + if (fv->FileRetrySend) return; } - if (FileRetryEcho) + if (fv->FileRetryEcho) { - c = FSEcho1(FileByte); - FileRetryEcho = (c==0); - if (FileRetryEcho) + c = FSEcho1(fv); + fv->FileRetryEcho = (c==0); + if (fv->FileRetryEcho) return; } do { - if (FileBracketMode == FS_BRACKET_START) { - FileByte = BracketStartStr[FileBracketPtr++]; + if (fv->FileBracketMode == FS_BRACKET_START) { + fv->SendChar = BracketStartStr[fv->FileBracketPtr++]; fc = 1; - if (FileBracketPtr >= sizeof(BracketStartStr) - 1) { - FileBracketMode = FS_BRACKET_END; - FileBracketPtr = 0; - BinaryMode = ts.TransBin; + if (fv->FileBracketPtr >= sizeof(BracketStartStr) - 1) { + fv->FileBracketMode = FS_BRACKET_END; + fv->FileBracketPtr = 0; + fv->BinaryMode = ts.TransBin; } } - else if (! FileReadEOF) { + else if (!fv->FileReadEOF) { DWORD read_bytes; + BYTE FileByte; ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL); fc = LOWORD(read_bytes); SendVar->ByteCount = SendVar->ByteCount + fc; - if (FileCRSend && (fc==1) && (FileByte==0x0A)) { + if (FileByte==0x0A && fc == 1 && fv->FileCRSend) { + // CR \x82𑗂\xC1\x82\xBD\x92\xBC\x8C\xE3 0x0A \x82\xBE\x82\xC1\x82\xBD -> \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE71\x83o\x83C\x83g\x93ǂ\xDE ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL); fc = LOWORD(read_bytes); SendVar->ByteCount = SendVar->ByteCount + fc; } + + if (IsDBCSLeadByte(FileByte)) { + // DBCS\x82\xCC1byte\x96ڂ\xBE\x82\xC1\x82\xBD -> \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE71\x83o\x83C\x83g\x93ǂ\xF1\x82\xC5 Unicode \x82Ƃ\xB7\x82\xE9 + char dbcs[2]; + dbcs[0] = FileByte; + + ReadFile(SendVar->FileHandle, &dbcs[1], 1, &read_bytes ,NULL); + fc = LOWORD(read_bytes); + SendVar->ByteCount = SendVar->ByteCount + fc; + + unsigned int u32; + MBCPToUTF32(dbcs, 2, CP_ACP, &u32); + fv->SendChar = u32; + } else { + fv->SendChar = FileByte; + } } else { fc = 0; } - if (fc == 0 && FileBracketMode == FS_BRACKET_END) { - FileReadEOF = TRUE; - FileByte = BracketEndStr[FileBracketPtr++]; + if (fc == 0 && fv->FileBracketMode == FS_BRACKET_END) { + fv->FileReadEOF = TRUE; + fv->SendChar = BracketEndStr[fv->FileBracketPtr++]; fc = 1; - BinaryMode = TRUE; + fv->BinaryMode = TRUE; - if (FileBracketPtr >= sizeof(BracketEndStr) - 1) { - FileBracketMode = FS_BRACKET_NONE; - FileBracketPtr = 0; + if (fv->FileBracketPtr >= sizeof(BracketEndStr) - 1) { + fv->FileBracketMode = FS_BRACKET_NONE; + fv->FileBracketPtr = 0; } } @@ -413,26 +445,26 @@ if (fc!=0) { - c = FSOut1(FileByte); - FileCRSend = (ts.TransBin==0) && (FileByte==0x0D); - FileRetrySend = (c==0); - if (FileRetrySend) + c = FSOut1(fv); + fv->FileCRSend = (ts.TransBin == 0) && (fv->SendChar == 0x0D); + fv->FileRetrySend = (c == 0); + if (fv->FileRetrySend) { if (SendVar->ByteCount != BCOld) { - SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); + fv->SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); } return; } if (ts.LocalEcho>0) { - c = FSEcho1(FileByte); - FileRetryEcho = (c==0); - if (FileRetryEcho) + c = FSEcho1(fv); + fv->FileRetryEcho = (c==0); + if (fv->FileRetryEcho) return; } } - if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) { - SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); + if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (fv->FileBracketPtr == 0))) { + fv->SendDlg->RefreshNum(SendVar->StartTime, SendVar->FileSize, SendVar->ByteCount); BCOld = SendVar->ByteCount; if (fc!=0) return; From scmnotify @ osdn.net Sat Jun 19 01:05:11 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sat, 19 Jun 2021 01:05:11 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMTFdIEFOU0npgIHkv6HplqLmlbDjgpI=?= =?utf-8?b?5YmK6Zmk?= Message-ID: <1624032311.131443.6110.nullmailer@users.osdn.me> Revision: 9311 https://osdn.net/projects/ttssh2/scm/svn/commits/9311 Author: zmatsuo Date: 2021-06-19 01:05:10 +0900 (Sat, 19 Jun 2021) Log Message: ----------- ANSI送信関数を削除 - 出力をすべて Unicode に置き換えて、使用されなくなったので削除 - CommTextOut() - CommTextEcho() - 未使用となる変数を削除 Modified Paths: -------------- trunk/teraterm/common/ttcommon.h trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/commlib.c trunk/teraterm/teraterm/vtterm.c trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpcmn/ttcmn.c trunk/teraterm/ttpcmn/ttpcmn.def -------------- next part -------------- Modified: trunk/teraterm/common/ttcommon.h =================================================================== --- trunk/teraterm/common/ttcommon.h 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/common/ttcommon.h 2021-06-18 16:05:10 UTC (rev 9311) @@ -69,10 +69,8 @@ DllExport int PASCAL CommRawOut(PComVar cv, PCHAR B, int C); DllExport int PASCAL CommBinaryOut(PComVar cv, PCHAR B, int C); DllExport int PASCAL CommBinaryBuffOut(PComVar cv, PCHAR B, int C); -DllExport int PASCAL CommTextOut(PComVar cv, PCHAR B, int C); DllExport int PASCAL CommTextOutW(PComVar cv, const wchar_t *B, int C); DllExport int PASCAL CommBinaryEcho(PComVar cv, PCHAR B, int C); -DllExport int PASCAL CommTextEcho(PComVar cv, PCHAR B, int C); DllExport int PASCAL CommTextEchoW(PComVar cv, const wchar_t *B, int C); DllExport void PASCAL CreateNotifyIcon(PComVar cv); Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/common/tttypes.h 2021-06-18 16:05:10 UTC (rev 9311) @@ -891,12 +891,12 @@ HANDLE ComID; BOOL CanSend, RRQ; - BOOL SendKanjiFlag; - BOOL EchoKanjiFlag; + BOOL reserve_SendKanjiFlag; + BOOL reserve_EchoKanjiFlag; int SendCode; int EchoCode; - BYTE SendKanjiFirst; - BYTE EchoKanjiFirst; + BYTE reserve_SendKanjiFirst; + BYTE reserve_EchoKanjiFirst; /* from VTSet */ WORD Language; @@ -909,7 +909,7 @@ WORD KanjiIn; WORD KanjiOut; WORD RussHost; - WORD RussClient; + WORD reserve_RussClient; /* from PortSet */ WORD DelayPerChar; WORD DelayPerLine; Modified: trunk/teraterm/teraterm/commlib.c =================================================================== --- trunk/teraterm/teraterm/commlib.c 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/teraterm/commlib.c 2021-06-18 16:05:10 UTC (rev 9311) @@ -307,9 +307,7 @@ cv->ComID = INVALID_HANDLE_VALUE; cv->CanSend = TRUE; cv->RRQ = FALSE; - cv->SendKanjiFlag = FALSE; cv->SendCode = IdASCII; - cv->EchoKanjiFlag = FALSE; cv->EchoCode = IdASCII; cv->Language = ts->Language; cv->CRSend = ts->CRSend; @@ -320,7 +318,6 @@ cv->KanjiIn = ts->KanjiIn; cv->KanjiOut = ts->KanjiOut; cv->RussHost = ts->RussHost; - cv->RussClient = ts->RussClient; cv->DelayFlag = TRUE; cv->DelayPerChar = ts->DelayPerChar; cv->DelayPerLine = ts->DelayPerLine; Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/teraterm/vtterm.c 2021-06-18 16:05:10 UTC (rev 9311) @@ -388,9 +388,7 @@ Glr[0] = 0; Glr[1] = 0; cv.SendCode = IdASCII; - cv.SendKanjiFlag = FALSE; cv.EchoCode = IdASCII; - cv.EchoKanjiFlag = FALSE; } /* Kanji flag */ KanjiIn = FALSE; Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-06-18 16:05:10 UTC (rev 9311) @@ -1239,7 +1239,6 @@ // for russian mode cv.RussHost = ts.RussHost; - cv.RussClient = ts.RussClient; if (cv.Ready) { if (cv.TelFlag && (ts.TelEcho>0)) { Modified: trunk/teraterm/ttpcmn/ttcmn.c =================================================================== --- trunk/teraterm/ttpcmn/ttcmn.c 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/ttpcmn/ttcmn.c 2021-06-18 16:05:10 UTC (rev 9311) @@ -918,295 +918,6 @@ return i; } -// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF-8\x82֏o\x97͂\xB7\x82\xE9 -static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv) -{ - int CodePage = *cv->CodePage; - unsigned int code; - int outlen; - - code = MBCP_UTF32(K, CodePage); - if (code == 0) { - // \x95ϊ\xB7\x8E\xB8\x94s - code = 0xfffd; // U+FFFD: Replacement Character - } - outlen = UTF32ToUTF8(code, TempStr, 4); - return outlen; -} - -static int __isleadbyte_l(int d, PComVar cv) -{ - int CodePage = *cv->CodePage; - return IsDBCSLeadByteEx(CodePage, d); -} - -// -// MBCS\x82\xA9\x82\xE7\x8Ae\x8E튿\x8E\x9A\x83R\x81[\x83h\x82֕ϊ\xB7\x82\xB5\x82ďo\x97͂\xB7\x82\xE9\x81B -// -static int TextOutMBCS(PComVar cv, PCHAR B, int C) -{ - int i, TempLen; - WORD K; - char TempStr[12]; - BYTE d; - BOOL Full; - int SendCodeNew; // \x91\x97\x90M\x83R\x81[\x83h - BOOL KanjiFlagNew; // TRUE=\x8E\x9F\x82̕\xB6\x8E\x9A\x82ƍ\x87\x82킹\x82Ċ\xBF\x8E\x9A\x82Ƃ\xB7\x82\xE9 - - Full = FALSE; - i = 0; - while (! Full && (i < C)) { - TempLen = 0; - d = (BYTE)B[i]; - SendCodeNew = cv->SendCode; - KanjiFlagNew = FALSE; - - if (cv->SendKanjiFlag) { - SendCodeNew = IdKanji; - - K = (cv->SendKanjiFirst << 8) + d; - - // UTF-8\x82ւ̕ϊ\xB7\x82\xF0\x8Ds\x82\xA4\x81B1\x81`3\x83o\x83C\x83g\x82܂ł̑Ή\x9E\x82Ȃ̂Œ\x8D\x88ӁB - if (cv->KanjiCodeSend == IdUTF8 || cv->Language == IdUtf8) { - TempLen += OutputTextUTF8(K, TempStr, cv); - } - else { - switch (cv->Language) { - case IdJapanese: - switch (cv->KanjiCodeSend) { - case IdEUC: - K = SJIS2EUC(K); - break; - case IdJIS: - K = SJIS2JIS(K); - if ((cv->SendCode==IdKatakana) && - (cv->JIS7KatakanaSend==1)) { - TempStr[TempLen++] = SI; - } - break; - case IdSJIS: - /* nothing to do */ - break; - } - break; - case IdKorean: - break; - } - TempStr[TempLen++] = HIBYTE(K); - TempStr[TempLen++] = LOBYTE(K); - } - } - else if (__isleadbyte_l(d, cv)) { - KanjiFlagNew = TRUE; - cv->SendKanjiFirst = d; - SendCodeNew = IdKanji; - - if (cv->Language == IdJapanese) { - if ((cv->SendCode!=IdKanji) && (cv->KanjiCodeSend==IdJIS)) { - TempStr[0] = 0x1B; - TempStr[1] = '$'; - if (cv->KanjiIn == IdKanjiInB) { - TempStr[2] = 'B'; - } - else { - TempStr[2] = '@'; - } - TempLen = 3; - } - } - } - else { - if (cv->Language == IdJapanese) { - if ((cv->SendCode==IdKanji) && (cv->KanjiCodeSend==IdJIS)) { - TempStr[0] = 0x1B; - TempStr[1] = '('; - switch (cv->KanjiOut) { - case IdKanjiOutJ: - TempStr[2] = 'J'; - break; - case IdKanjiOutH: - TempStr[2] = 'H'; - break; - default: - TempStr[2] = 'B'; - } - TempLen = 3; - } - - if ((0xa0SendCode!=IdKatakana) && - (cv->KanjiCodeSend==IdJIS) && - (cv->JIS7KatakanaSend==1)) { - TempStr[TempLen++] = SO; - } - } - else { - SendCodeNew = IdASCII; - if ((cv->SendCode==IdKatakana) && - (cv->KanjiCodeSend==IdJIS) && - (cv->JIS7KatakanaSend==1)) { - TempStr[TempLen++] = SI; - } - } - } - - if (d==CR) { - TempStr[TempLen++] = 0x0d; - if (cv->CRSend==IdCRLF) { - TempStr[TempLen++] = 0x0a; - } - else if ((cv->CRSend==IdCR) && - cv->TelFlag && ! cv->TelBinSend) { - TempStr[TempLen++] = 0; - } - else if (cv->CRSend == IdLF) { - TempStr[TempLen-1] = 0x0a; - } - if (cv->TelLineMode) { - cv->Flush = TRUE; - } - } - else if (d==BS) { - if (cv->TelLineMode) { - if (cv->FlushLen < cv->LineModeBuffCount) { - cv->LineModeBuffCount--; - } - } - else { - TempStr[TempLen++] = d; - } - } - else if (d==0x15) { // Ctrl-U - if (cv->TelLineMode) { - cv->LineModeBuffCount = cv->FlushLen; - } - else { - TempStr[TempLen++] = d; - } - } - else if ((d>=0x80) && (cv->KanjiCodeSend==IdUTF8 || cv->Language==IdUtf8)) { - TempLen += OutputTextUTF8((WORD)d, TempStr, cv); - } - else if ((d>=0xa1) && (d<=0xe0) && (cv->Language == IdJapanese)) { - /* Katakana */ - if (cv->KanjiCodeSend==IdEUC) { - TempStr[TempLen++] = (char)SS2; - } - if ((cv->KanjiCodeSend==IdJIS) && - (cv->JIS7KatakanaSend==1)) { - TempStr[TempLen++] = d & 0x7f; - } - else { - TempStr[TempLen++] = d; - } - } - else { - TempStr[TempLen++] = d; - if (cv->TelFlag && (d==0xff)) { - TempStr[TempLen++] = (char)0xff; - } - } - } // if (cv->SendKanjiFlag) else if ... else ... end - - if (WriteOutBuff(cv, TempStr, TempLen)) { - i++; // 1\x95\xB6\x8E\x9A\x8F\x88\x97\x9D\x82\xB5\x82\xBD - // \x8A\xBF\x8E\x9A\x82̏\xF3\x91Ԃ\xF0\x95ۑ\xB6\x82\xB7\x82\xE9 - cv->SendCode = SendCodeNew; - cv->SendKanjiFlag = KanjiFlagNew; - } else { - Full = TRUE; - } - - } // end of "while {}" - - return i; -} - -int WINAPI CommTextOut(PComVar cv, PCHAR B, int C) -{ - int i, TempLen; - char TempStr[12]; - BYTE d; - BOOL Full; - - if (! cv->Ready ) { - return C; - } - - switch (cv->Language) { - case IdUtf8: - case IdJapanese: - case IdKorean: - return TextOutMBCS(cv, B, C); - break; - } - - Full = FALSE; - i = 0; - while (! Full && (i < C)) { - TempLen = 0; - d = (BYTE)B[i]; - - switch (d) { - case CR: - TempStr[TempLen] = 0x0d; - TempLen++; - if (cv->CRSend==IdCRLF) { - TempStr[TempLen++] = 0x0a; - } - else if (cv->CRSend==IdCR && cv->TelFlag && ! cv->TelBinSend) { - TempStr[TempLen++] = 0; - } - else if (cv->CRSend == IdLF) { - TempStr[TempLen-1] = 0x0a; - } - if (cv->TelLineMode) { - cv->Flush = TRUE; - } - break; - - case BS: - if (cv->TelLineMode) { - if (cv->FlushLen < cv->LineModeBuffCount) { - cv->LineModeBuffCount--; - } - } - else { - TempStr[TempLen++] = d; - } - break; - - case 0x15: // Ctrl-U - if (cv->TelLineMode) { - cv->LineModeBuffCount = cv->FlushLen; - } - else { - TempStr[TempLen++] = d; - } - break; - - default: - if ((cv->Language==IdRussian) && (d>=128)) { - d = RussConv(cv->RussClient, cv->RussHost, d); - } - TempStr[TempLen++] = d; - if (cv->TelFlag && (d==0xff)) { - TempStr[TempLen++] = (char)0xff; - } - } - - if (WriteOutBuff(cv, TempStr, TempLen)) { - i++; // 1\x95\xB6\x8E\x9A\x8F\x88\x97\x9D\x82\xB5\x82\xBD - } else { - Full = TRUE; - } - - } // end of while {} - - return i; -} - /** * @retval true \x93\xFA\x96{\x8C\xEA\x82̔\xBC\x8Ap\x83J\x83^\x83J\x83i * @retval false \x82\xBB\x82̑\xBC @@ -1631,246 +1342,6 @@ return i; } -static int WINAPI TextEchoMBCS(PComVar cv, PCHAR B, int C) -{ - int i, TempLen; - WORD K; - char TempStr[12]; - int EchoCodeNew; - BYTE d; - BOOL Full, KanjiFlagNew; - - Full = FALSE; - i = 0; - while (! Full && (i < C)) { - TempLen = 0; - d = (BYTE)B[i]; - EchoCodeNew = cv->EchoCode; - KanjiFlagNew = FALSE; - - if (cv->EchoKanjiFlag) { - EchoCodeNew = IdKanji; - - K = (cv->EchoKanjiFirst << 8) + d; - - // UTF-8\x82ւ̕ϊ\xB7\x82\xF0\x8Ds\x82\xA4\x81B1\x81`3\x83o\x83C\x83g\x82܂ł̑Ή\x9E\x82Ȃ̂Œ\x8D\x88ӁB - if (cv->KanjiCodeEcho == IdUTF8 || cv->Language==IdUtf8) { - TempLen += OutputTextUTF8(K, TempStr, cv); - } - else { - switch (cv->Language) { - case IdJapanese: - switch (cv->KanjiCodeEcho) { - case IdEUC: - K = SJIS2EUC(K); - break; - case IdJIS: - K = SJIS2JIS(K); - if ((cv->EchoCode==IdKatakana) && - (cv->JIS7KatakanaEcho==1)) { - TempStr[TempLen++] = SI; - } - break; - case IdSJIS: - /* nothing to do */ - break; - } - break; - case IdKorean: - break; - } - TempStr[TempLen++] = HIBYTE(K); - TempStr[TempLen++] = LOBYTE(K); - } - } - else if (__isleadbyte_l(d, cv)) { - KanjiFlagNew = TRUE; - cv->EchoKanjiFirst = d; - EchoCodeNew = IdKanji; - - if (cv->Language == IdJapanese) { - if ((cv->EchoCode!=IdKanji) && (cv->KanjiCodeEcho==IdJIS)) { - TempStr[0] = 0x1B; - TempStr[1] = '$'; - if (cv->KanjiIn == IdKanjiInB) { - TempStr[2] = 'B'; - } - else { - TempStr[2] = '@'; - } - TempLen = 3; - } - } - } - else { - if (cv->Language == IdJapanese) { - if ((cv->EchoCode==IdKanji) && (cv->KanjiCodeEcho==IdJIS)) { - TempStr[0] = 0x1B; - TempStr[1] = '('; - switch (cv->KanjiOut) { - case IdKanjiOutJ: - TempStr[2] = 'J'; - break; - case IdKanjiOutH: - TempStr[2] = 'H'; - break; - default: - TempStr[2] = 'B'; - } - TempLen = 3; - } - - if ((0xa0EchoCode!=IdKatakana) && - (cv->KanjiCodeEcho==IdJIS) && - (cv->JIS7KatakanaEcho==1)) { - TempStr[TempLen++] = SO; - } - } - else { - EchoCodeNew = IdASCII; - if ((cv->EchoCode==IdKatakana) && - (cv->KanjiCodeEcho==IdJIS) && - (cv->JIS7KatakanaEcho==1)) { - TempStr[TempLen++] = SI; - } - } - } - - if (d==CR) { - TempStr[TempLen++] = 0x0d; - if (cv->CRSend==IdCRLF) { - TempStr[TempLen++] = 0x0a; - } - else if ((cv->CRSend==IdCR) && - cv->TelFlag && ! cv->TelBinSend) { - TempStr[TempLen++] = 0; - } - else if (cv->CRSend == IdLF) { - TempStr[TempLen-1] = 0x0a; - } - } - else if (d==0x15) { // Ctrl-U - if (cv->TelLineMode) { - // Move to top of line (CHA "\033[G") and erase line (EL "\033[K") - strncpy_s(TempStr, sizeof(TempStr), "\033[G\033[K", _TRUNCATE); - TempLen += 6; - } - else { - TempStr[TempLen++] = d; - } - } - else if ((d>=0x80) && (cv->KanjiCodeEcho==IdUTF8 || cv->Language==IdUtf8)) { - TempLen += OutputTextUTF8((WORD)d, TempStr, cv); - } - else if ((d>=0xa1) && (d<=0xe0) && (cv->Language == IdJapanese)) { - /* Katakana */ - if (cv->KanjiCodeEcho==IdEUC) { - TempStr[TempLen++] = (char)SS2; - } - if ((cv->KanjiCodeEcho==IdJIS) && - (cv->JIS7KatakanaEcho==1)) { - TempStr[TempLen++] = d & 0x7f; - } - else { - TempStr[TempLen++] = d; - } - } - else { - TempStr[TempLen++] = d; - if (cv->TelFlag && (d==0xff)) { - TempStr[TempLen++] = (char)0xff; - } - } - } // if (cv->EchoKanjiFlag) else if ... else ... end - - if (WriteInBuff(cv, TempStr, TempLen)) { - i++; - cv->EchoCode = EchoCodeNew; - cv->EchoKanjiFlag = KanjiFlagNew; - } else { - Full = FALSE; - } - - } // end of "while {}" - - return i; -} - -int WINAPI CommTextEcho(PComVar cv, PCHAR B, int C) -{ - int i, TempLen; - char TempStr[11]; - BYTE d; - BOOL Full; - - if ( ! cv->Ready ) { - return C; - } - - PackInBuff(cv); - - switch (cv->Language) { - case IdUtf8: - case IdJapanese: - case IdKorean: - return TextEchoMBCS(cv,B,C); - break; - } - - Full = FALSE; - i = 0; - while (! Full && (i < C)) { - TempLen = 0; - d = (BYTE)B[i]; - - switch (d) { - case CR: - TempStr[TempLen] = 0x0d; - TempLen++; - if (cv->CRSend==IdCRLF) { - TempStr[TempLen++] = 0x0a; - } - else if (cv->CRSend==IdCR && cv->TelFlag && ! cv->TelBinSend) { - TempStr[TempLen++] = 0; - } - else if (cv->CRSend == IdLF) { - TempStr[TempLen-1] = 0x0a; - } - break; - - case 0x15: // Ctrl-U - if (cv->TelLineMode) { - // Move to top of line (CHA "\033[G") and erase line (EL "\033[K") - strncpy_s(TempStr, sizeof(TempStr), "\033[G\033[K", _TRUNCATE); - TempLen += 6; - } - else { - TempStr[TempLen++] = d; - } - break; - - default: - if ((cv->Language==IdRussian) && (d>=128)) { - d = RussConv(cv->RussClient,cv->RussHost,d); - } - TempStr[TempLen++] = d; - if (cv->TelFlag && (d==0xff)) { - TempStr[TempLen++] = (char)0xff; - } - } - - if(WriteInBuff(cv, TempStr,TempLen)) { - i++; - } else { - Full = TRUE; - } - } // end of while {} - - return i; -} - /* * @return \x83G\x83\x89\x81[\x82\xAA\x97L\x82\xE9\x8Fꍇ FALSE * @param[in] BOOL first_instance Modified: trunk/teraterm/ttpcmn/ttpcmn.def =================================================================== --- trunk/teraterm/ttpcmn/ttpcmn.def 2021-06-18 16:05:01 UTC (rev 9310) +++ trunk/teraterm/ttpcmn/ttpcmn.def 2021-06-18 16:05:10 UTC (rev 9311) @@ -18,10 +18,8 @@ CommRawOut @23 CommBinaryOut @24 CommBinaryBuffOut @52 - CommTextOut @25 CommTextOutW CommBinaryEcho @26 - CommTextEcho @27 CommTextEchoW DetectComPorts @42 GetDefaultFName @47 From scmnotify @ osdn.net Sun Jun 20 10:07:22 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 20 Jun 2021 10:07:22 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMTJdIOODh+ODkOOCsOeUqOOCs+ODvA==?= =?utf-8?b?44OJ44KS44Kz44Of44OD44OI44GX44Gm44GE44Gf44Gu44Gn5L+u5q2j?= Message-ID: <1624151242.955426.1829.nullmailer@users.osdn.me> Revision: 9312 https://osdn.net/projects/ttssh2/scm/svn/commits/9312 Author: zmatsuo Date: 2021-06-20 10:07:22 +0900 (Sun, 20 Jun 2021) Log Message: ----------- デバグ用コードをコミットしていたので修正 - r9307 でコミット Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9307 Modified Paths: -------------- trunk/teraterm/common/compat_win.cpp -------------- next part -------------- Modified: trunk/teraterm/common/compat_win.cpp =================================================================== --- trunk/teraterm/common/compat_win.cpp 2021-06-18 16:05:10 UTC (rev 9311) +++ trunk/teraterm/common/compat_win.cpp 2021-06-20 01:07:22 UTC (rev 9312) @@ -38,7 +38,7 @@ #include "ttlib.h" // for debug -#define UNICODE_API_DISABLE 1 +//#define UNICODE_API_DISABLE 1 ATOM (WINAPI *pRegisterClassW)(const WNDCLASSW *lpWndClass); HWND (WINAPI *pCreateWindowExW)(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, From scmnotify @ osdn.net Sun Jun 20 10:07:40 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Sun, 20 Jun 2021 10:07:40 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMTNdIGxvY2FsZeioreWumuOCkuWJig==?= =?utf-8?b?6Zmk?= Message-ID: <1624151260.653046.2039.nullmailer@users.osdn.me> Revision: 9313 https://osdn.net/projects/ttssh2/scm/svn/commits/9313 Author: zmatsuo Date: 2021-06-20 10:07:40 +0900 (Sun, 20 Jun 2021) Log Message: ----------- locale設定を削除 - Cランタイムの文字コードの設定 - 従来Cランタイムの文字コード変換関数を使用していたため必要だった - wctomb() - 現在Cランタイムの文字コード変換は使用していないため不要 - OSのAPI WideCharToMultiByte(), MultiByteToWideChar() を使用 - setlocale()を削除 - 不要な locale.h の include を削除 - 設定ダイアログの locale 設定を削除 - IDC_LOCALE_LABEL 削除 - lng 内の DLG_TERM_LOCALE 削除 - ドキュメント locale 設定個所を削除 - iniファイルのlocale読み書きを削除 - r9145 Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9145 Modified Paths: -------------- trunk/doc/en/html/menu/setup-terminal_ja.html trunk/doc/en/html/menu/setup-terminal_ko.html trunk/doc/en/html/menu/setup-terminal_utf8.html trunk/doc/en/html/setup/teraterm-ini.html trunk/doc/ja/html/menu/setup-terminal.html trunk/doc/ja/html/menu/setup-terminal_ko.html trunk/doc/ja/html/menu/setup-terminal_utf8.html trunk/doc/ja/html/setup/teraterm-ini.html trunk/installer/release/lang_utf8/English.lng trunk/installer/release/lang_utf8/French.lng trunk/installer/release/lang_utf8/German.lng trunk/installer/release/lang_utf8/Japanese.lng trunk/installer/release/lang_utf8/Korean.lng trunk/installer/release/lang_utf8/Russian.lng trunk/installer/release/lang_utf8/Simplified Chinese.lng trunk/installer/release/lang_utf8/Traditional Chinese.lng trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/commlib.c trunk/teraterm/teraterm/vtterm.c trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpcmn/language.c trunk/teraterm/ttpcmn/ttcmn.c trunk/teraterm/ttpdlg/dlg_res.h trunk/teraterm/ttpdlg/ttdlg.c trunk/teraterm/ttpdlg/ttpdlg.rc trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/doc/en/html/menu/setup-terminal_ja.html =================================================================== --- trunk/doc/en/html/menu/setup-terminal_ja.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/en/html/menu/setup-terminal_ja.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -153,12 +153,6 @@

-
locale
-
- Locale setting. - Refer to Unicode for details. -
-
Modified: trunk/doc/en/html/menu/setup-terminal_ko.html =================================================================== --- trunk/doc/en/html/menu/setup-terminal_ko.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/en/html/menu/setup-terminal_ko.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -119,12 +119,6 @@ Character code that is sent from client(KS5601 and UTF-8). -
locale
-
- Locale setting. - Refer to Unicode for details. -
- Modified: trunk/doc/en/html/menu/setup-terminal_utf8.html =================================================================== --- trunk/doc/en/html/menu/setup-terminal_utf8.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/en/html/menu/setup-terminal_utf8.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -119,12 +119,6 @@ Character code that is sent from client(UTF-8). -
locale
-
- Locale setting. - Refer to Unicode for details. -
- Modified: trunk/doc/en/html/setup/teraterm-ini.html =================================================================== --- trunk/doc/en/html/setup/teraterm-ini.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/en/html/setup/teraterm-ini.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -758,12 +758,6 @@ - Locale - * - japanese - * by the installer - - LocalEcho off <- Modified: trunk/doc/ja/html/menu/setup-terminal.html =================================================================== --- trunk/doc/ja/html/menu/setup-terminal.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/ja/html/menu/setup-terminal.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -154,12 +154,6 @@

-
locale
-
- \x83\x8D\x83P\x81[\x83\x8B\x81B - \x8Fڍׂ\xCDUnicode\x90ݒ\xE8\x82\xF0\x8EQ\x8FƁB -
- Modified: trunk/doc/ja/html/menu/setup-terminal_ko.html =================================================================== --- trunk/doc/ja/html/menu/setup-terminal_ko.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/ja/html/menu/setup-terminal_ko.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -120,12 +120,6 @@ \x91\x97\x8Fo\x82\xB7\x82镶\x8E\x9A\x83R\x81[\x83h (KS5601, UTF-8 \x82\xCC2\x8E\xED\x97\xDE)\x81B -
locale
-
- \x83\x8D\x83P\x81[\x83\x8B\x81B - \x8Fڍׂ\xCDUnicode\x90ݒ\xE8\x82\xF0\x8EQ\x8FƁB -
- Modified: trunk/doc/ja/html/menu/setup-terminal_utf8.html =================================================================== --- trunk/doc/ja/html/menu/setup-terminal_utf8.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/ja/html/menu/setup-terminal_utf8.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -120,12 +120,6 @@ \x91\x97\x8Fo\x82\xB7\x82镶\x8E\x9A\x83R\x81[\x83h (UTF-8 \x82\xCC1\x8E\xED\x97\xDE)\x81B -
locale
-
- \x83\x8D\x83P\x81[\x83\x8B\x81B - \x8Fڍׂ\xCDUnicode\x90ݒ\xE8\x82\xF0\x8EQ\x8FƁB -
- Modified: trunk/doc/ja/html/setup/teraterm-ini.html =================================================================== --- trunk/doc/ja/html/setup/teraterm-ini.html 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/doc/ja/html/setup/teraterm-ini.html 2021-06-20 01:07:40 UTC (rev 9313) @@ -764,12 +764,6 @@ - Locale - \x81\xA6 - japanese - \x81\xA6\x83C\x83\x93\x83X\x83g\x81[\x83\x89\x82ɂ\xE6\x82\xE9 - - LocalEcho off <- Modified: trunk/installer/release/lang_utf8/English.lng =================================================================== --- trunk/installer/release/lang_utf8/English.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/English.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -408,7 +408,6 @@ DLG_TERM_KANASEND=Half-wi&dth kana DLG_TERM_KIN=Kanji-i&n: DLG_TERM_KOUT=Kanji-&out: -DLG_TERM_LOCALE=lo&cale: DLG_TERM_RUSSCHARSET=Character set DLG_TERM_RUSSHOST=H&ost: DLG_TERM_RUSSCLIENT=&Client: Modified: trunk/installer/release/lang_utf8/French.lng =================================================================== --- trunk/installer/release/lang_utf8/French.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/French.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth kana DLG_TERM_KIN=Kanji-i&n: DLG_TERM_KOUT=Kanji-&out: -DLG_TERM_LOCALE=lo&cal: DLG_TERM_RUSSCHARSET=Jeu de caractères DLG_TERM_RUSSHOST=Hôte: DLG_TERM_RUSSCLIENT=&Client: Modified: trunk/installer/release/lang_utf8/German.lng =================================================================== --- trunk/installer/release/lang_utf8/German.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/German.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth kana DLG_TERM_KIN=Kanji-i&n: DLG_TERM_KOUT=Kanji-&out: -DLG_TERM_LOCALE=locale: DLG_TERM_RUSSCHARSET=Zeichensatz DLG_TERM_RUSSHOST=H&ost: DLG_TERM_RUSSCLIENT=&Client: Modified: trunk/installer/release/lang_utf8/Japanese.lng =================================================================== --- trunk/installer/release/lang_utf8/Japanese.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/Japanese.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -408,7 +408,6 @@ DLG_TERM_KANASEND=半角カナ(&D) DLG_TERM_KIN=漢字イン(&N): DLG_TERM_KOUT=漢字アウト(&O): -DLG_TERM_LOCALE=ロケール(&C): DLG_TERM_RUSSCHARSET=文字セット DLG_TERM_RUSSHOST=ホスト(&O): DLG_TERM_RUSSCLIENT=クライアント(&C): Modified: trunk/installer/release/lang_utf8/Korean.lng =================================================================== --- trunk/installer/release/lang_utf8/Korean.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/Korean.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth kana DLG_TERM_KIN=Kanji-i&n: DLG_TERM_KOUT=Kanji-&out: -DLG_TERM_LOCALE=lo&cale: DLG_TERM_RUSSCHARSET=문자세트 DLG_TERM_RUSSHOST=호스트(&O): DLG_TERM_RUSSCLIENT=클라이언트(&C): Modified: trunk/installer/release/lang_utf8/Russian.lng =================================================================== --- trunk/installer/release/lang_utf8/Russian.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/Russian.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth kana DLG_TERM_KIN=Kanji-i&n: DLG_TERM_KOUT=Kanji-&out: -DLG_TERM_LOCALE=&Расположение: DLG_TERM_RUSSCHARSET=Кодировка DLG_TERM_RUSSHOST=&Хост: DLG_TERM_RUSSCLIENT=&Клиент: Modified: trunk/installer/release/lang_utf8/Simplified Chinese.lng =================================================================== --- trunk/installer/release/lang_utf8/Simplified Chinese.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/Simplified Chinese.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth 假名 DLG_TERM_KIN=汉字输入(&N): DLG_TERM_KOUT=汉字输出(&O): -DLG_TERM_LOCALE=地区(&C): DLG_TERM_RUSSCHARSET=字符集 DLG_TERM_RUSSHOST=主机端(&O): DLG_TERM_RUSSCLIENT=客户端(&C): Modified: trunk/installer/release/lang_utf8/Traditional Chinese.lng =================================================================== --- trunk/installer/release/lang_utf8/Traditional Chinese.lng 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/installer/release/lang_utf8/Traditional Chinese.lng 2021-06-20 01:07:40 UTC (rev 9313) @@ -409,7 +409,6 @@ DLG_TERM_KANASEND=Half-wi&dth 假名 DLG_TERM_KIN=中文輸入(&N): DLG_TERM_KOUT=中文輸出(&O): -DLG_TERM_LOCALE=地區(&C): DLG_TERM_RUSSCHARSET=字符集 DLG_TERM_RUSSHOST=主機端(&O): DLG_TERM_RUSSCLIENT=客戶端(&C): Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/teraterm/common/tttypes.h 2021-06-20 01:07:40 UTC (rev 9313) @@ -30,7 +30,6 @@ /* Constants and types for Tera Term */ #pragma once -#include #include "teraterm.h" #include "tt-version.h" #include "../teraterm/unicode_test.h" @@ -508,8 +507,7 @@ BYTE AlphaBlendInactive; BYTE reserve_0[2]; // \x96\xA2\x8Eg\x97p char CygwinDirectory[MAX_PATH]; -#define DEFAULT_LOCALE "japanese" - char Locale[80]; + char reserve_Locale[80]; int CodePage; int DuplicateSession; char ViewlogEditor[MAX_PATH]; Modified: trunk/teraterm/teraterm/commlib.c =================================================================== --- trunk/teraterm/teraterm/commlib.c 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/teraterm/teraterm/commlib.c 2021-06-20 01:07:40 UTC (rev 9313) @@ -46,7 +46,6 @@ #include #include /* for _snprintf() */ #include -#include #include "filesys_log.h" #include "ttlib.h" Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/teraterm/teraterm/vtterm.c 2021-06-20 01:07:40 UTC (rev 9313) @@ -368,7 +368,6 @@ void ResetCharSet() { - char *result; if (ts.Language==IdJapanese) { Gn[0] = IdASCII; Gn[1] = IdKatakana; @@ -407,24 +406,15 @@ cv.KanjiIn = ts.KanjiIn; cv.KanjiOut = ts.KanjiOut; - // \x83\x8D\x83P\x81[\x83\x8B\x82̐ݒ\xE8 - // wctomb \x82̂\xBD\x82\xDF - result = setlocale(LC_ALL, ts.Locale); - if (result == NULL) { - // \x82\xA8\x82\xA9\x82\xB5\x82\xC8Locale\x95\xB6\x8E\x9A\x97񂪃Z\x83b\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9? - // default\x82\xF0\x83Z\x83b\x83g\x82\xB5\x82Ă\xA8\x82\xAD - strcpy(ts.Locale, DEFAULT_LOCALE); - result = setlocale(LC_ALL, ts.Locale); - } - // \x89p\x8C\xEA\x94\xC5Windows\x82ł́Ats.Locale\x82\xAA\x83f\x83t\x83H\x83\x8B\x83g\x82\xCC"japanese"\x82\xBE\x82\xC1\x82\xBD\x8Fꍇ\x81A - // setlocale\x82\xAA NULL \x82\xF0\x95Ԃ\xB7\x82\xBD\x82߁ATera Term\x82̋N\x93\xAE\x8E\x9E\x82ɗ\x8E\x82\xBF\x82\xE9\x81Bstrrchr\x82\xCC - // \x91\xE61\x88\xF8\x90\x94\x82ɂ\xCDNULL\x82\xAA\x8Ew\x92\xE8\x82ł\xAB\x82Ȃ\xA2\x82\xBD\x82߁B - // setlocale \x82ɐ\xAC\x8C\x{1C2D42}\xBD\x8E\x9E\x82̓R\x81[\x83h\x83y\x81[\x83W\x82\xF0\x90ݒ肵\x81A\x8E\xB8\x94s\x82\xB5\x82\xBD\x8E\x9E\x82\xCD - // ANSI\x83R\x81[\x83h\x83y\x81[\x83W\x82\xF0\x90ݒ肷\x82\xE9\x81B - if (result) - ts.CodePage = atoi(strrchr(result, '.')+1); - else - ts.CodePage = GetACP(); + // \x83\x8D\x83P\x81[\x83\x8B\x82̐ݒ\xE8(\x8D폜\x82\xB5\x82\xBD) TODO: \x8D폜 + // \x8F]\x97\x88\x82\xCD wctomb()\x8Cn\x82̂\xBD\x82߂\xC9setlocale()\x82\xF0\x8Eg\x97p\x82\xB5\x82Ă\xA2\x82\xBD\x82\xAA + // \x8C\xBB\x8D݂\xCD wctomb()\x8Cn\x82͎g\x97p\x82\xB5\x82Ȃ\xAD\x82Ȃ\xC1\x82\xBD\x81B + // ts.Locale[] \x82\xA9\x82\xE7 setlocale() \x82̖߂\xE8\x92l\x82𓾂\xC4 + // \x82\xBB\x82\xB1\x82\xA9\x82\xE7\x83R\x81[\x83h\x83y\x81[\x83W\x82\xF0ts.CodePage \x82Ɏ擾\x82\xB5\x82Ă\xA2\x82\xBD\x81B + // + // ts.CodePage \x82̒l\x82\xCD cv.CodePage \x82Ɉ\xF8\x82\xAB\x8Cp\x82\xAA\x82\xEA\x82\xC4 + // CommTextOut(),CommTextEcho()@ttcmn.c \x82Ŏg\x97p\x82\xB3\x82\xEA\x82\xE9 + ts.CodePage = GetACP(); } void ResetKeypadMode(BOOL DisabledModeOnly) Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-06-20 01:07:22 UTC (rev 9312) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-06-20 01:07:40 UTC (rev 9313) @@ -71,7 +71,6 @@ #include #include #include -#include #include #include @@ -475,9 +474,6 @@ logfile_lock_initialize(); SetMouseCursor(ts.MouseCursorName); - // \x83\x8D\x83P\x81[\x83\x8B\x82̐ݒ\xE8 - // wctomb \x82̂\xBD\x82\xDF - setlocale(LC_ALL, ts.Locale); #ifdef ALPHABLEND_TYPE2 // SSH2 sending data on TCP - + NOTE: payload = type(1) + raw-data len = ssh_state.outgoing_packet_len = payload size @@ -2678,11 +2677,11 @@ set_uint32(outmsg, len); memcpy(outmsg + 4, cred->password, len); - + // \x83Z\x83b\x83V\x83\x87\x83\x93\x95\xA1\x90\xBB\x8E\x9E\x82Ƀp\x83X\x83\x8F\x81[\x83h\x82\xF0\x8Eg\x82\xA2\x89񂵂\xBD\x82\xA2\x82̂ŁA\x82\xB1\x82\xB1\x82ł̃\x8A\x83\\x81[\x83X\x89\xF0\x95\xFA\x82͂\xE2\x82߂\xE9\x81B // socket close\x8E\x9E\x82ɂ\xE0\x82\xB1\x82̊֐\x94\x82͌Ă΂\xEA\x82Ă\xA2\x82\xE9\x82̂ŁA\x82\xBD\x82Ԃ\xF1\x96\xE2\x91\xE8\x82Ȃ\xA2\x81B(2005.4.8 yutaka) //AUTH_destroy_cur_cred(pvar); - + enque_simple_auth_handlers(pvar); break; } @@ -3795,7 +3794,7 @@ c = ssh2_local_channel_lookup(local_channel_num); if (c == NULL) return; - + SSH2_channel_input_eof(pvar, c); } } @@ -3947,7 +3946,7 @@ return; } - // making the fake data + // making the fake data newlen = 2 * auth_data_len + 1; newdata = malloc(newlen); if (newdata == NULL) @@ -4181,7 +4180,7 @@ goto error; } } else { // copy remote to local - strncpy_s(c->scp.remotefile, sizeof(c->scp.remotefile), sendfile, _TRUNCATE); + strncpy_s(c->scp.remotefile, sizeof(c->scp.remotefile), sendfile, _TRUNCATE); if (dstfile == NULL || dstfile[0] == '\0') { // local file path is empty. char *fn; @@ -4236,7 +4235,7 @@ } // setup SCP data - c->scp.dir = direction; + c->scp.dir = direction; c->scp.state = SCP_INIT; // session open @@ -4484,7 +4483,7 @@ } // \x8Ew\x92肳\x82ꂽ\x95\xB6\x8E\x9A\x97\xF1\x82𑖍\xB8\x82\xB5\x81A\x8B\x96\x89‚\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x95\xB6\x8E\x9A\x81A\x8Fd\x95\xA1\x82\xB7\x82镶\x8E\x9A\x82͍폜\x82\xB7\x82\xE9\x81B - // + // // ex. (i=5 \x82̕\xB6\x8E\x9A\x82\xF0\x8D폜\x82\xB7\x82\xE9) // i=012345 // >:=9<87;A@?B3026(\0) @@ -4492,7 +4491,7 @@ // <------------> // \x81\xAB // >:=9<7;A@?B3026(\0) - // + // for (i = 0; buf[i] != 0; i++) { int num = buf[i] - '0'; @@ -4512,7 +4511,7 @@ } // \x8Ew\x92肳\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x95\xB6\x8E\x9A\x82\xAA\x82\xA0\x82\xEA\x82΁Adisabled line\x82̒\xBC\x91O\x82ɑ}\x93\xFC\x82\xB7\x82\xE9\x81B - // + // // ex. (Z\x82\xF0\x91}\x93\xFC\x82\xB7\x82\xE9) // k // >:=9<87;A@?B3026(\0) @@ -4522,7 +4521,7 @@ // >:=9<87;A@?B30026(\0) // \x81\xAB k // >:=9<87;A@?B3Z026(\0) - // + // for (j = 0; j < default_strings_len && default_strings[j] != 0; j++) { int num = default_strings[j]; @@ -5259,7 +5258,7 @@ _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, pvar->ts->UIMsg, pvar->kexgex_max, grp_bits); } - + if (tmpbuf[0] != 0) { UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_TITLE", pvar, "TTSSH: Confirm GEX group size"); @@ -5329,7 +5328,7 @@ // // KEX_ECDH_SHA2_256 or KEX_ECDH_SHA2_384 or KEX_ECDH_SHA2_521 // - + static void SSH2_ecdh_kex_init(PTInstVar pvar) { EC_KEY *client_key = NULL; @@ -5779,7 +5778,7 @@ clear_contents_for_known_hosts(pvar); - /* + /* * SSH2_MSG_NEWKEYS \x82\xF0\x8E\xF3\x90M\x82\xB5\x82Ă\xA2\x82\xBD\x82\xE7\x81A\x8E\xA9\x95\xAA\x82ŏ\x88\x97\x9D\x82\xF0\x8CĂяo\x82\xB7\x81B */ if (pvar->contents_after_known_hosts.SSH2_MSG_NEWKEYS_received) { @@ -5816,7 +5815,7 @@ Key *hostkey = NULL; // hostkey BOOL result = FALSE; int ret; - + logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_KEX_DH_GEX_REPLY was received."); memset(&hostkey, 0, sizeof(hostkey)); @@ -6057,7 +6056,7 @@ clear_contents_for_known_hosts(pvar); - /* + /* * SSH2_MSG_NEWKEYS \x82\xF0\x8E\xF3\x90M\x82\xB5\x82Ă\xA2\x82\xBD\x82\xE7\x81A\x8E\xA9\x95\xAA\x82ŏ\x88\x97\x9D\x82\xF0\x8CĂяo\x82\xB7\x81B */ if (pvar->contents_after_known_hosts.SSH2_MSG_NEWKEYS_received) { @@ -6344,7 +6343,7 @@ clear_contents_for_known_hosts(pvar); - /* + /* * SSH2_MSG_NEWKEYS \x82\xF0\x8E\xF3\x90M\x82\xB5\x82Ă\xA2\x82\xBD\x82\xE7\x81A\x8E\xA9\x95\xAA\x82ŏ\x88\x97\x9D\x82\xF0\x8CĂяo\x82\xB7\x81B */ if (pvar->contents_after_known_hosts.SSH2_MSG_NEWKEYS_received) { @@ -7202,7 +7201,7 @@ case 2: msgW = ToWcharU8(msg); if (msgW) { - _MessageBoxW(pvar->cv->HWin, msgW, L"Authentication Banner", MB_OK | MB_ICONINFORMATION); + MessageBoxW(pvar->cv->HWin, msgW, L"Authentication Banner", MB_OK | MB_ICONINFORMATION); free(msgW); } break; @@ -7243,7 +7242,7 @@ // SSH2 \x83\x81\x83b\x83Z\x81[\x83W 60 \x94Ԃ̏\x88\x97\x9D\x8A֐\x94 // // SSH2 \x82ł͈ȉ\xBA\x82̃\x81\x83b\x83Z\x81[\x83W\x82\xAA 60 \x94Ԃ֏d\x95\xA1\x82\xB5\x82Ċ\x84\x82蓖\x82Ă\xE7\x82\xEA\x82Ă\xA2\x82\xE9\x81B -// +// // * SSH2_MSG_USERAUTH_INFO_REQUEST (keyboard-interactive) // * SSH2_MSG_USERAUTH_PK_OK (publickey / Tera Term \x82ł\xCD Pageant \x94F\x8F؂̂\xDD) // * SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ (password) @@ -7250,7 +7249,7 @@ // // \x8C\xBB\x8F\xF3\x82̎\xC0\x91\x95\x82ł͓\xAF\x82\xB6\x83\x81\x83b\x83Z\x81[\x83W\x94ԍ\x86\x82\xAA\x91\xB6\x8D݂ł\xAB\x82Ȃ\xA2\x82̂ŁA // 60 \x94Ԃ͂\xB1\x82̊֐\x94\x82Ŏ󂯁Amethod \x82ɂ\xE6\x82\xC1\x82đΉ\x9E\x82\xB7\x82\xE9\x83n\x83\x93\x83h\x83\x89\x8A֐\x94\x82ɐU\x82蕪\x82\xAF\x82\xE9\x81B -// +// BOOL handle_SSH2_userauth_msg60(PTInstVar pvar) { if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) { @@ -7337,7 +7336,7 @@ // \x83p\x83X\x83\x8F\x81[\x83h\x95ύX\x82̏ꍇ\x81A\x83\x81\x83b\x83Z\x81[\x83W\x82\xAA\x82\xA0\x82\xEA\x82΁A\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B(2010.11.11 yutaka) if (num == 0) { - if (strlen(lprompt) > 0) + if (strlen(lprompt) > 0) MessageBox(pvar->cv->HWin, lprompt, "USERAUTH INFO_REQUEST", MB_OK | MB_ICONINFORMATION); } @@ -7913,7 +7912,7 @@ // SSH2 port-forwarding \x82ɂ\xA8\x82\xA2\x82ăZ\x83b\x83V\x83\x87\x83\x93\x82\xAA\x83I\x81[\x83v\x83\x93\x82ł\xAB\x82Ȃ\xA2\x8Fꍇ\x82̃T\x81[\x83o\x82\xA9\x82\xE7\x82̃\x8A\x83v\x83\x89\x83C\x81i\x8E\xB8\x94s\x81j static BOOL handle_SSH2_open_failure(PTInstVar pvar) -{ +{ int len; char *data; int id; @@ -8043,7 +8042,7 @@ // SSH2 port-forwarding (remote -> local)\x82ɑ΂\xB7\x82郊\x83v\x83\x89\x83C\x81i\x90\xAC\x8C\xF7\x81j static BOOL handle_SSH2_request_success(PTInstVar pvar) -{ +{ // \x95K\x97v\x82ł\xA0\x82\xEA\x82΃\x8D\x83O\x82\xF0\x8E\xE6\x82\xE9\x81B\x93\xC1\x82ɉ\xBD\x82\xE0\x82\xB5\x82Ȃ\xAD\x82Ă\xE0\x82悢\x81B logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_REQUEST_SUCCESS was received."); @@ -8054,7 +8053,7 @@ // SSH2 port-forwarding (remote -> local)\x82ɑ΂\xB7\x82郊\x83v\x83\x89\x83C\x81i\x8E\xB8\x94s\x81j static BOOL handle_SSH2_request_failure(PTInstVar pvar) -{ +{ // \x95K\x97v\x82ł\xA0\x82\xEA\x82΃\x8D\x83O\x82\xF0\x8E\xE6\x82\xE9\x81B\x93\xC1\x82ɉ\xBD\x82\xE0\x82\xB5\x82Ȃ\xAD\x82Ă\xE0\x82悢\x81B logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_REQUEST_FAILURE was received."); @@ -8064,7 +8063,7 @@ } static BOOL handle_SSH2_channel_success(PTInstVar pvar) -{ +{ Channel_t *c; #ifdef DONT_WANTCONFIRM int want_reply = 0; // false @@ -8482,7 +8481,7 @@ if (c->scp.state == SCP_INIT) { char buf[128]; - _snprintf_s(buf, sizeof(buf), _TRUNCATE, "T%lu 0 %lu 0\n", + _snprintf_s(buf, sizeof(buf), _TRUNCATE, "T%lu 0 %lu 0\n", (unsigned long)c->scp.filestat.st_mtime, (unsigned long)c->scp.filestat.st_atime); c->scp.state = SCP_TIMESTAMP; @@ -8491,7 +8490,7 @@ } else if (c->scp.state == SCP_TIMESTAMP) { char buf[128]; - _snprintf_s(buf, sizeof(buf), _TRUNCATE, "C0644 %lld %s\n", + _snprintf_s(buf, sizeof(buf), _TRUNCATE, "C0644 %lld %s\n", c->scp.filestat.st_size, c->scp.localfile); c->scp.state = SCP_FILEINFO; @@ -8877,7 +8876,7 @@ static BOOL handle_SSH2_channel_data(PTInstVar pvar) -{ +{ int len; char *data; int id; @@ -8959,7 +8958,7 @@ // \x83G\x83\x89\x81[\x83\x81\x83b\x83Z\x81[\x83W\x82\xF0 SSH2_MSG_CHANNEL_EXTENDED_DATA \x82ő\x97\x90M\x82\xB5\x82Ă\xAD\x82\xE9\x81B // SSH2_MSG_CHANNEL_EXTENDED_DATA \x82\xF0\x8F\x88\x97\x9D\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B(2006.10.30 maya) static BOOL handle_SSH2_channel_extended_data(PTInstVar pvar) -{ +{ int len; char *data; int id; @@ -9042,7 +9041,7 @@ static BOOL handle_SSH2_channel_eof(PTInstVar pvar) -{ +{ int len; char *data; int id; @@ -9081,7 +9080,7 @@ } static BOOL handle_SSH2_channel_open(PTInstVar pvar) -{ +{ int len; char *data; Channel_t *c = NULL; @@ -9209,7 +9208,7 @@ c->remote_id = remote_id; c->remote_window = remote_window; c->remote_maxpacket = remote_maxpacket; - + SSH2_confirm_channel_open(pvar, c); } else { @@ -9243,7 +9242,7 @@ static BOOL handle_SSH2_channel_close(PTInstVar pvar) -{ +{ int len; char *data; int id; @@ -9395,7 +9394,7 @@ static BOOL handle_SSH2_window_adjust(PTInstVar pvar) -{ +{ int len; char *data; int id; Modified: trunk/ttssh2/ttxssh/ttxssh.c =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.c 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.c 2021-06-29 15:20:20 UTC (rev 9324) @@ -84,7 +84,6 @@ #include "sftp.h" #include "compat_win.h" -#include "layer_for_unicode.h" #include "codeconv.h" #include "libputty.h" @@ -160,7 +159,7 @@ FWDUI_init(pvar); ssh_heartbeat_lock_initialize(); - + pvar->cc[MODE_IN] = NULL; pvar->cc[MODE_OUT] = NULL; // \x83\x81\x83\x82\x83\x8A\x8Am\x95ۂ\xCD CRYPT_start_encryption \x82̐\xE6\x82\xCC cipher_init_SSH2 \x82Ɉړ\xAE @@ -1046,12 +1045,12 @@ wchar_t EntNameW[128]; wchar_t TempHostW[HostNameMaxLength + 1]; _snwprintf_s(EntNameW, _countof(EntNameW), _TRUNCATE, L"host%d", i); - _GetPrivateProfileStringW(L"Hosts", EntNameW, L"", - TempHostW, _countof(TempHostW), - SetupFnW); + GetPrivateProfileStringW(L"Hosts", EntNameW, L"", + TempHostW, _countof(TempHostW), + SetupFnW); if (TempHostW[0] != 0) - _SendDlgItemMessageW(dlg, IDC_HOSTNAME, CB_ADDSTRING, - 0, (LPARAM) TempHostW); + SendDlgItemMessageW(dlg, IDC_HOSTNAME, CB_ADDSTRING, + 0, (LPARAM) TempHostW); i++; } while (i <= MAXHOSTLIST); free(SetupFnW); @@ -2042,7 +2041,7 @@ { wchar_t *strW = ToWcharU8(buf2); - _SetDlgItemTextW(dlg, IDC_ABOUTTEXT, strW); + SetDlgItemTextW(dlg, IDC_ABOUTTEXT, strW); free(strW); } } @@ -2158,7 +2157,7 @@ // Edit control\x82\xF0\x83T\x83u\x83N\x83\x89\x83X\x89\xBB\x82\xB7\x82\xE9\x81B g_deltaSumAboutDlg = 0; - g_defAboutDlgEditWndProc = (WNDPROC)_SetWindowLongPtrW(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); + g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtrW(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); CenterWindow(dlg, GetParent(dlg)); @@ -2299,8 +2298,8 @@ wchar_t *name = get_listbox_cipher_nameW(cipher, pvar); if (name != NULL) { - int index = _SendMessageW(cipherControl, LB_ADDSTRING, 0, (LPARAM) name); - _SendMessageW(cipherControl, LB_SETITEMDATA, index, cipher); + int index = SendMessageW(cipherControl, LB_ADDSTRING, 0, (LPARAM) name); + SendMessageW(cipherControl, LB_SETITEMDATA, index, cipher); free(name); } } @@ -2316,7 +2315,7 @@ if (index == 0) { UTIL_get_lang_msgW("DLG_SSHSETUP_KEX_BORDER", pvar, L"", uimsg); - _SendMessageW(kexControl, LB_ADDSTRING, 0, (LPARAM)uimsg); + SendMessageW(kexControl, LB_ADDSTRING, 0, (LPARAM)uimsg); } else { const char *name = get_kex_algorithm_name(index); if (name != NULL) { @@ -2335,7 +2334,7 @@ if (index == 0) { UTIL_get_lang_msgW("DLG_SSHSETUP_HOST_KEY_BORDER", pvar, L"", uimsg); - _SendMessageW(hostkeyControl, LB_ADDSTRING, 0, (LPARAM)uimsg); + SendMessageW(hostkeyControl, LB_ADDSTRING, 0, (LPARAM)uimsg); } else { const char *name = get_ssh2_hostkey_type_name(index); if (name != NULL) { @@ -2354,7 +2353,7 @@ if (index == 0) { UTIL_get_lang_msgW("DLG_SSHSETUP_MAC_BORDER", pvar, L"", uimsg); - _SendMessageW(macControl, LB_ADDSTRING, 0, (LPARAM)uimsg); + SendMessageW(macControl, LB_ADDSTRING, 0, (LPARAM)uimsg); } else { const char *name = get_ssh2_mac_name_by_id(index); if (name != NULL) { @@ -2373,7 +2372,7 @@ if (index == 0) { UTIL_get_lang_msgW("DLG_SSHSETUP_COMP_BORDER", pvar, L"", uimsg); - _SendMessageW(compControl, LB_ADDSTRING, 0, (LPARAM)uimsg); + SendMessageW(compControl, LB_ADDSTRING, 0, (LPARAM)uimsg); } else { const char *name = get_ssh2_comp_name(index); if (name != NULL) { @@ -2435,7 +2434,7 @@ // hostkey rotation(OpenSSH 6.8) for (i = 0; i < SSH_UPDATE_HOSTKEYS_MAX; i++) { UTIL_get_lang_msgW(rotationItemKey[i], pvar, rotationItem[i], uimsg); - _SendMessageW(hostkeyRotationControlList, CB_INSERTSTRING, i, (LPARAM)uimsg); + SendMessageW(hostkeyRotationControlList, CB_INSERTSTRING, i, (LPARAM)uimsg); } ch = pvar->settings.UpdateHostkeys; if (!(ch >= 0 && ch < SSH_UPDATE_HOSTKEYS_MAX)) @@ -2535,7 +2534,7 @@ count = (int) SendMessage(cipherControl, LB_GETCOUNT, 0, 0); buf2index = 0; for (i = 0; i < count; i++) { - int chipher = _SendMessageW(cipherControl, LB_GETITEMDATA, i, 0); + int chipher = SendMessageW(cipherControl, LB_GETITEMDATA, i, 0); buf2[buf2index] = '0' + chipher; buf2index++; } @@ -2711,22 +2710,22 @@ static void move_cur_sel_delta(HWND listbox, int delta) { - int curPos = (int) _SendMessageW(listbox, LB_GETCURSEL, 0, 0); - int maxPos = (int) _SendMessageW(listbox, LB_GETCOUNT, 0, 0) - 1; + int curPos = (int) SendMessageW(listbox, LB_GETCURSEL, 0, 0); + int maxPos = (int) SendMessageW(listbox, LB_GETCOUNT, 0, 0) - 1; int newPos = curPos + delta; if (curPos >= 0 && newPos >= 0 && newPos <= maxPos) { int item_data; int index; - size_t len = _SendMessageW(listbox, LB_GETTEXTLEN, curPos, 0); + size_t len = SendMessageW(listbox, LB_GETTEXTLEN, curPos, 0); wchar_t *buf = malloc(sizeof(wchar_t) * (len+1)); buf[0] = 0; - _SendMessageW(listbox, LB_GETTEXT, curPos, (LPARAM) buf); - item_data = (int)_SendMessageW(listbox, LB_GETITEMDATA, curPos, 0); - _SendMessageW(listbox, LB_DELETESTRING, curPos, 0); - index = (int)_SendMessageW(listbox, LB_INSERTSTRING, newPos, (LPARAM)buf); - _SendMessageW(listbox, LB_SETITEMDATA, index, item_data); - _SendMessageW(listbox, LB_SETCURSEL, newPos, 0); + SendMessageW(listbox, LB_GETTEXT, curPos, (LPARAM) buf); + item_data = (int)SendMessageW(listbox, LB_GETITEMDATA, curPos, 0); + SendMessageW(listbox, LB_DELETESTRING, curPos, 0); + index = (int)SendMessageW(listbox, LB_INSERTSTRING, newPos, (LPARAM)buf); + SendMessageW(listbox, LB_SETITEMDATA, index, item_data); + SendMessageW(listbox, LB_SETCURSEL, newPos, 0); free(buf); } } Modified: trunk/ttssh2/ttxssh/ttxssh.v10.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v10.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v10.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -180,7 +180,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v11.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v11.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v11.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -185,7 +185,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v12.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v12.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v12.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -185,7 +185,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v14.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v14.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v14.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -185,7 +185,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v15.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v15.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v15.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -186,7 +186,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v16.vcxproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v16.vcxproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v16.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -187,7 +187,6 @@ - Modified: trunk/ttssh2/ttxssh/ttxssh.v8.vcproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v8.vcproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v8.vcproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -328,10 +328,6 @@ > - - Modified: trunk/ttssh2/ttxssh/ttxssh.v9.vcproj =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.v9.vcproj 2021-06-29 15:20:06 UTC (rev 9323) +++ trunk/ttssh2/ttxssh/ttxssh.v9.vcproj 2021-06-29 15:20:20 UTC (rev 9324) @@ -335,10 +335,6 @@ > - - From scmnotify @ osdn.net Wed Jun 30 00:20:36 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Wed, 30 Jun 2021 00:20:36 +0900 Subject: [Ttssh2-commit] =?utf-8?q?=5B9325=5D_layer_for_unicode_=E3=82=92?= =?utf-8?b?44Op44Kk44OW44Op44Oq44Gr5YiG6Zui?= Message-ID: <1624980036.851763.5114.nullmailer@users.osdn.me> Revision: 9325 https://osdn.net/projects/ttssh2/scm/svn/commits/9325 Author: zmatsuo Date: 2021-06-30 00:20:36 +0900 (Wed, 30 Jun 2021) Log Message: ----------- layer for unicode をライブラリに分離 - Windows 9xをサポートするためのパートをライブラリとして切り出し - MSUL(unicows.lib)と同様に、ライブラリをリンクするだけで 9x をサポート - Tera Term のソース(layer for unicode 以外の部分)では 9x を気にする必要がなくなった - vs2005 のプロジェクトを調整 - CMakeLists.txt 調整 - VS2005 を使用しないと 95での起動はできない - しかしVS2005をサポートしている cmake のバージョンが古い Modified Paths: -------------- trunk/.editorconfig trunk/TTXKanjiMenu/CMakeLists.txt trunk/TTXSamples/TTXAdditionalTitle/CMakeLists.txt trunk/TTXSamples/TTXAlwaysOnTop/CMakeLists.txt trunk/TTXSamples/TTXCallSysMenu/CMakeLists.txt trunk/TTXSamples/TTXFixedWinSize/CMakeLists.txt trunk/TTXSamples/TTXResizeMenu/CMakeLists.txt trunk/TTXSamples/TTXResizeWin/CMakeLists.txt trunk/TTXSamples/TTXShowCommandLine/CMakeLists.txt trunk/TTXSamples/TTXttyrec/CMakeLists.txt trunk/TTXSamples/ttxtest/CMakeLists.txt trunk/teraterm/CMakeLists.txt trunk/teraterm/common/CMakeLists.txt trunk/teraterm/common/common_static.v16.vcxproj trunk/teraterm/common/fileread.cpp trunk/teraterm/common/layer_for_unicode.cpp trunk/teraterm/common/layer_for_unicode.h trunk/teraterm/common/layer_for_unicode_comctl32.cpp trunk/teraterm/keycode/CMakeLists.txt trunk/teraterm/teraterm/CMakeLists.txt trunk/teraterm/teraterm/ttermpro.v8.vcproj trunk/teraterm/ttermpro.v8.sln trunk/teraterm/ttpcmn/CMakeLists.txt trunk/teraterm/ttpcmn/ttpcmn.v8.vcproj trunk/teraterm/ttpset/CMakeLists.txt trunk/teraterm/ttpset/ttpset.v8.vcproj trunk/ttpmenu/CMakeLists.txt trunk/ttssh2/matcher/CMakeLists.txt trunk/ttssh2/ttssh/CMakeLists.txt trunk/ttssh2/ttxssh/CMakeLists.txt Added Paths: ----------- trunk/buildtools/nasm.cmake trunk/teraterm/common/layer_for_unicode/ trunk/teraterm/common/layer_for_unicode/.gitignore trunk/teraterm/common/layer_for_unicode/CMakeLists.txt trunk/teraterm/common/layer_for_unicode/README.md trunk/teraterm/common/layer_for_unicode/generate.pl trunk/teraterm/common/layer_for_unicode/init_ptr.cpp trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v16.vcxproj trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v8.vcproj trunk/teraterm/common/layer_for_unicode/layer_for_unicode.vcxproj.v16.filters trunk/teraterm/common/layer_for_unicode/symbol_list.txt trunk/teraterm/common/layer_for_unicode/templ_nasm.asm.in trunk/teraterm/common/layer_for_unicode.md -------------- next part -------------- Modified: trunk/.editorconfig =================================================================== --- trunk/.editorconfig 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/.editorconfig 2021-06-29 15:20:36 UTC (rev 9325) @@ -34,6 +34,14 @@ indent_style = tab indent_size = 4 +[*.asm] +end_of_line = crlf +charset = utf8 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true + [{CMakeLists.txt,*.cmake}] end_of_line = crlf charset = utf-8-bom Modified: trunk/TTXKanjiMenu/CMakeLists.txt =================================================================== --- trunk/TTXKanjiMenu/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXKanjiMenu/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXAdditionalTitle/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXAdditionalTitle/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXAdditionalTitle/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXAlwaysOnTop/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXAlwaysOnTop/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXAlwaysOnTop/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + common_static + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXCallSysMenu/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXCallSysMenu/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXCallSysMenu/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXFixedWinSize/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXFixedWinSize/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXFixedWinSize/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXResizeMenu/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXResizeMenu/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXResizeMenu/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXResizeWin/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXResizeWin/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXResizeWin/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXShowCommandLine/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXShowCommandLine/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXShowCommandLine/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Modified: trunk/TTXSamples/TTXttyrec/CMakeLists.txt =================================================================== --- trunk/TTXSamples/TTXttyrec/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/TTXttyrec/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -10,6 +10,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + TTXttyplay + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( TTXttyplay @@ -58,6 +63,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + TTXttyrec + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( TTXttyrec Modified: trunk/TTXSamples/ttxtest/CMakeLists.txt =================================================================== --- trunk/TTXSamples/ttxtest/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/TTXSamples/ttxtest/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -8,6 +8,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} Added: trunk/buildtools/nasm.cmake =================================================================== --- trunk/buildtools/nasm.cmake (rev 0) +++ trunk/buildtools/nasm.cmake 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,20 @@ +# cmake -P nasm.cmake + +set(NASM_BASE "nasm-2.15.05") +set(NASM_ZIP "${NASM_BASE}-win32.zip") +set(NASM_URL "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win32/${NASM_ZIP}") +set(NASM_HASH "258c7d1076e435511cf2fdf94e2281eadbdb9e3003fd57f356f446e2bce3119e") +file(MAKE_DIRECTORY "download/nasm") +file(DOWNLOAD + ${NASM_URL} + download/nasm/${NASM_ZIP} + EXPECTED_HASH SHA256=${NASM_HASH} + SHOW_PROGRESS + ) +if(EXISTS "nasm") + file(REMOVE_RECURSE "nasm") +endif() +execute_process( + COMMAND ${CMAKE_COMMAND} -E tar xvf download/nasm/${NASM_ZIP} + ) +file(RENAME "${NASM_BASE}" "nasm") Modified: trunk/teraterm/CMakeLists.txt =================================================================== --- trunk/teraterm/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -37,9 +37,20 @@ common_static PROPERTIES FOLDER teraterm) -if(SUPPORT_OLD_WINDOWS AND MINGW) - add_subdirectory(libmingw) - set_target_properties( - mingw_msvcrt - PROPERTIES FOLDER teraterm) +if(SUPPORT_OLD_WINDOWS) + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + add_subdirectory(common/layer_for_unicode) + set_target_properties( + layer_for_unicode + PROPERTIES FOLDER teraterm) + endif() + + if(MINGW) + add_subdirectory(libmingw) + set_target_properties( + mingw_msvcrt + PROPERTIES FOLDER teraterm) + endif(MINGW) endif() + + Modified: trunk/teraterm/common/CMakeLists.txt =================================================================== --- trunk/teraterm/common/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -25,8 +25,6 @@ getcontent.h i18n.h i18n_static.c - layer_for_unicode_crt.h - layer_for_unicode_crt.cpp tipwin.cpp tipwin.h tmfc.cpp @@ -51,5 +49,6 @@ target_link_libraries( ${PACKAGE_NAME} PUBLIC + # setupapi ) Modified: trunk/teraterm/common/common_static.v16.vcxproj =================================================================== --- trunk/teraterm/common/common_static.v16.vcxproj 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/common_static.v16.vcxproj 2021-06-29 15:20:36 UTC (rev 9325) @@ -172,4 +172,4 @@ - \ No newline at end of file + Modified: trunk/teraterm/common/fileread.cpp =================================================================== --- trunk/teraterm/common/fileread.cpp 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/fileread.cpp 2021-06-29 15:20:36 UTC (rev 9325) @@ -37,7 +37,6 @@ #include "codeconv.h" #include "ttlib.h" -#include "layer_for_unicode_crt.h" #include "fileread.h" @@ -100,7 +99,7 @@ uint8_t *LoadFileBinary(const wchar_t *FileName, size_t *_len) { FILE *fp; - __wfopen_s(&fp, FileName, L"rb"); + _wfopen_s(&fp, FileName, L"rb"); if (fp == NULL) { return NULL; } @@ -254,7 +253,7 @@ *_len = 0; } FILE *fp; - __wfopen_s(&fp, FileName, L"rb"); + _wfopen_s(&fp, FileName, L"rb"); if (fp == NULL) { return NULL; } Added: trunk/teraterm/common/layer_for_unicode/.gitignore =================================================================== --- trunk/teraterm/common/layer_for_unicode/.gitignore (rev 0) +++ trunk/teraterm/common/layer_for_unicode/.gitignore 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,3 @@ +Makefile +*.asm +*.obj Added: trunk/teraterm/common/layer_for_unicode/CMakeLists.txt =================================================================== --- trunk/teraterm/common/layer_for_unicode/CMakeLists.txt (rev 0) +++ trunk/teraterm/common/layer_for_unicode/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,102 @@ +cmake_minimum_required(VERSION 3.11) + +set(PACKAGE_NAME "layer_for_unicode") + +project(${PACKAGE_NAME}) + +add_library( + ${PACKAGE_NAME} + STATIC + init_ptr.cpp + ../layer_for_unicode.cpp + ../layer_for_unicode.h + ../layer_for_unicode_comctl32.cpp + ) + +target_include_directories( + ${PACKAGE_NAME} + PRIVATE + .. + ) + +if(NOT EXISTS "list_asm.cmake") + execute_process( + COMMAND ${PERL} generate.pl + RESULT_VARIABLE rv + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + ) + if(NOT rv STREQUAL "0") + message(FATAL_ERROR "execute error ${PERL}") + endif() +endif() + +if(${CMAKE_VERSION} VERSION_LESS "3.12.0") + + set(OBJ_DIR ".") + include("list_obj.cmake") + + target_sources( + ${PACKAGE_NAME} + PRIVATE + ${SRC} + ) + +else() + # VS2010+ + + include("list_asm.cmake") + + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + set(BUILDTOOLS_NASM ${CMAKE_CURRENT_LIST_DIR}/../../../buildtools/nasm/nasm.exe) + if(EXISTS ${BUILDTOOLS_NASM}) + set(CMAKE_ASM_NASM_COMPILER ${BUILDTOOLS_NASM}) + endif() + endif() + set(CMAKE_ASM_NASM_OBJECT_FORMAT win32) + set(CMAKE_ASM_NASM_FLAGS_DEBUG "-g -Fcv8") + + enable_language(ASM_NASM) + + target_sources( + ${PACKAGE_NAME} + PRIVATE + ${SRC} + ) + + source_group( + "assember" + REGULAR_EXPRESSION + "asm") +endif() + +if(${CMAKE_VERSION} VERSION_GREATER "3.12.0") + target_link_libraries( + ${PACKAGE_NAME} + PUBLIC + common_static + $<$:libucrt.lib libvcruntime.lib> + $<$:libucrtd.lib libvcruntimed.lib> + ) +else() + target_link_libraries( + ${PACKAGE_NAME} + PUBLIC + $<$:LIBCMT.lib LIBCPMT.lib> + $<$:LIBCMTd.lib LIBCPMTd.lib> + ) +endif() + +target_link_libraries( + ${PACKAGE_NAME} + PUBLIC + oleaut32 + advapi32 + ole32 + user32 + kernel32 + gdi32 + comdlg32 + comctl32 + shell32 + uuid + ) Added: trunk/teraterm/common/layer_for_unicode/README.md =================================================================== --- trunk/teraterm/common/layer_for_unicode/README.md (rev 0) +++ trunk/teraterm/common/layer_for_unicode/README.md 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,11 @@ +Layer for unicode +================= + +- Unicode API を持たない9x系用 +- Unicode API を ANSI API でエミュレーションする + +## 準備 + +- linuxでは nasm パッケージが必要 + `apt-get install nasm` + Added: trunk/teraterm/common/layer_for_unicode/generate.pl =================================================================== --- trunk/teraterm/common/layer_for_unicode/generate.pl (rev 0) +++ trunk/teraterm/common/layer_for_unicode/generate.pl 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,152 @@ +use utf8; +use strict; + +sub ShowAPIs { + my $apis_ref = $_[0]; + my @apis = @$apis_ref; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + print $api{"dll"}, " ", $api{"symbol"}, "@", $api{"param_bytes"}, "\n"; + } +} + +sub ReadSymbleList { + open(FILE, "symbol_list.txt") || die "Cannot open file."; + + my(%table, $val, $key); + my($symbols); + + my @apis = (); + while (my $line = ) { + if ($line =~ /^\s*(\w+)\s+(\w+)@(\d+)/) { + my %api = ( + "dll" => $1, + "symbol" => $2, + "param_bytes" => $3 + ); + push(@apis, \%api); + } + } + close(FILE); + + return @apis; +} + +sub CreateAsm() { + my($dll, $symbol, $param_bytes) = @_; + + my $template = "templ_nasm.asm.in"; + my $filename = "$symbol.asm"; + open(IN, $template) || die "cannot open $template"; + open(OUT, ">$filename") || die "cannot open $filename"; + + while (my $line = ) { + $line =~ s/%SYMBOL%/$symbol/; + $line =~ s/%PARAM_BYTES%/$param_bytes/; + $line =~ s/%DLL%/$dll/; + print OUT $line; + } + close(IN); + close(OUT); +} + +sub CreateAsmArray() { + my $apis_ref = $_[0]; + my @apis = @$apis_ref; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + my $dll = $api{"dll"}; + my $symbol = $api{"symbol"}; + my $param_bytes = $api{"param_bytes"}; + &CreateAsm($dll, $symbol, $param_bytes); + } +} + +sub CreateMakefile() { + my $apis_ref = $_[0]; + my @apis = @$apis_ref; + my $top = <<"EOS"; +# generated by perl script + +NASM = ../../../buildtools/nasm/nasm.exe +NASM_FLAGS = -f win32 -g -F cv8 + +all: all_objs + +clean: + rm -rf *.obj *.asm + +generate: + perl generate.pl + +all_objs: \\ +EOS + open(OUT, ">Makefile") || die "Cannot open file."; + print OUT $top; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + my $symbol = $api{"symbol"}; + print OUT " $symbol.obj \\\n"; + } + print OUT "\n"; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + my $dll = $api{"dll"}; + my $symbol = $api{"symbol"}; + my $param_bytes = $api{"param_bytes"}; + print OUT "$symbol.obj: $symbol.asm\n"; + print OUT " \${NASM} \${NASM_FLAGS} $symbol.asm -o \$@\n"; + print OUT "\n"; + } + close(OUT); +} + +sub CreateAsmCmake() { + my $apis_ref = $_[0]; + my @apis = @$apis_ref; + + open(OUT, ">list_asm.cmake") || die "Cannot open file."; + my $top = <<"EOS"; +# generated by perl script + +set(SRC +EOS + print OUT $top; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + my $symbol = $api{"symbol"}; + print OUT " $symbol.asm\n"; +# print OUT " ${ASM_DIR}/$symbol.asm\n"; + } + print OUT " )\n"; + close(OUT); +} + +sub CreateObjCmake() { + my $apis_ref = $_[0]; + my @apis = @$apis_ref; + + open(OUT, ">list_obj.cmake") || die "Cannot open file."; + my $top = <<"EOS"; +# generated by perl script + +set(SRC +EOS + print OUT $top; + foreach my $api_ref (@apis) { + my %api = %{$api_ref}; + my $symbol = $api{"symbol"}; + print OUT " \${OBJ_DIR}/$symbol.obj\n"; + } + print OUT " )\n"; + close(OUT); +} + +my @apis = &ReadSymbleList(); +ShowAPIs(\@apis); +&CreateAsmArray(\@apis); +&CreateMakefile(\@apis); +&CreateAsmCmake(\@apis); +&CreateObjCmake(\@apis); + +exit(0); Added: trunk/teraterm/common/layer_for_unicode/init_ptr.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode/init_ptr.cpp (rev 0) +++ trunk/teraterm/common/layer_for_unicode/init_ptr.cpp 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2021- 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. + */ + +#include + +#include "codeconv.h" + +static bool IsWindowsNTKernel(void) +{ +#if defined(_MSC_VER) && _MSC_VER > 1400 + // VS2005\x82\xE6\x82肠\x82\xBD\x82炵\x82\xA2\x8Fꍇ\x82́ANT\x82݂̂\xF0\x83^\x81[\x83Q\x83b\x83g\x82Ƃ\xB7\x82\xE9 + return true; +#else + static bool kernel_checked; + static bool nt_kernel; + + if (kernel_checked) { + return nt_kernel; + } + kernel_checked = true; + + // VS2005 or MinGW + OSVERSIONINFOA osvi; + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionExA(&osvi); + if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { + // Windows 9x + nt_kernel = false; + } + else { + nt_kernel = true; + } + return nt_kernel; +#endif +} + +static HMODULE _GetModuleHandleW(LPCWSTR lpModuleName) +{ + char* lpStringA = ToCharW(lpModuleName); + HMODULE h = GetModuleHandleA(lpStringA); + free(lpStringA); + return h; +} + +static DWORD DLLGetApiAddress(const wchar_t *dllPath, + const char *ApiName, void **pFunc) +{ + HMODULE hDll = _GetModuleHandleW(dllPath); + if (hDll == NULL) { + *pFunc = NULL; + return ERROR_FILE_NOT_FOUND; + } else { + *pFunc = (void *)GetProcAddress(hDll, ApiName); + if (*pFunc == NULL) { + return ERROR_PROC_NOT_FOUND; + } + return NO_ERROR; // = 0 + } +} + +extern "C" void init_ptr(const wchar_t *dll, const char *func_name, void *wrap_func, void **func_ptr) +{ + if (!IsWindowsNTKernel()) { + *func_ptr = wrap_func; + return; + } + + void *ptr; + DWORD r = DLLGetApiAddress(dll, func_name, &ptr); + if (r == NO_ERROR) { + *func_ptr = ptr; + } +} Added: trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v16.vcxproj =================================================================== --- trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v16.vcxproj (rev 0) +++ trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v16.vcxproj 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {96045741-75ea-4b86-a7f7-46930f4ed6e3} + layerforunicode + 10.0 + + + + StaticLibrary + true + v142 + Unicode + + + StaticLibrary + false + v142 + true + Unicode + + + StaticLibrary + true + v142 + Unicode + + + StaticLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + true + true + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + + + + + Level3 + true + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + true + true + + + + + + \ No newline at end of file Added: trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v8.vcproj =================================================================== --- trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v8.vcproj (rev 0) +++ trunk/teraterm/common/layer_for_unicode/layer_for_unicode.v8.vcproj 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: trunk/teraterm/common/layer_for_unicode/layer_for_unicode.vcxproj.v16.filters =================================================================== --- trunk/teraterm/common/layer_for_unicode/layer_for_unicode.vcxproj.v16.filters (rev 0) +++ trunk/teraterm/common/layer_for_unicode/layer_for_unicode.vcxproj.v16.filters 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,17 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + \ No newline at end of file Added: trunk/teraterm/common/layer_for_unicode/symbol_list.txt =================================================================== --- trunk/teraterm/common/layer_for_unicode/symbol_list.txt (rev 0) +++ trunk/teraterm/common/layer_for_unicode/symbol_list.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,55 @@ +user32 SetWindowTextW @ 8 +user32 SetDlgItemTextW @ 12 +user32 GetDlgItemTextW @ 16 +user32 SendDlgItemMessageW @ 20 +user32 SendMessageW @ 16 +user32 CreateWindowExW @ 48 +user32 RegisterClassW @ 4 +user32 MessageBoxW @ 16 +user32 InsertMenuW @ 20 +user32 AppendMenuW @ 16 +user32 GetWindowTextW @ 12 +user32 GetWindowTextLengthW @ 4 +user32 CallWindowProcW @ 20 +user32 CreateDialogIndirectParamW @ 20 +user32 DialogBoxIndirectParamW @ 20 +user32 SetWindowLongW @ 12 +user32 GetWindowLongW @ 8 + +kernel32 GetFileAttributesW @ 4 +kernel32 GetModuleFileNameW @ 12 +kernel32 SetCurrentDirectoryW @ 4 +kernel32 GetCurrentDirectoryW @ 8 +kernel32 OutputDebugStringW @ 4 +kernel32 GetPrivateProfileStringW @ 24 +kernel32 WritePrivateProfileStringW @ 16 +kernel32 GetPrivateProfileIntW @ 16 +kernel32 CreateProcessW @ 40 +kernel32 CopyFileW @ 12 +kernel32 DeleteFileW @ 4 +kernel32 MoveFileW @ 8 +kernel32 CreateFileW @ 28 +kernel32 FindFirstFileW @ 8 +kernel32 FindNextFileW @ 8 +kernel32 RemoveDirectoryW @ 4 +kernel32 GetFullPathNameW @ 16 +kernel32 LoadLibraryW @ 4 +kernel32 ExpandEnvironmentStringsW @ 12 +kernel32 GetModuleHandleW @ 4 +kernel32 GetSystemDirectoryW @ 8 +kernel32 GetTempPathW @ 8 +kernel32 GetTempFileNameW @ 16 + +gdi32 AddFontResourceW @ 4 +gdi32 RemoveFontResourceW @ 4 + +comctl32 CreatePropertySheetPageW @ 4 +comctl32 PropertySheetW @ 4 + +comdlg32 GetOpenFileNameW @ 4 +comdlg32 GetSaveFileNameW @ 4 + +shell32 DragQueryFileW @ 16 +shell32 Shell_NotifyIconW @ 8 +shell32 SHBrowseForFolderW @ 4 +shell32 SHGetPathFromIDListW @ 8 Added: trunk/teraterm/common/layer_for_unicode/templ_nasm.asm.in =================================================================== --- trunk/teraterm/common/layer_for_unicode/templ_nasm.asm.in (rev 0) +++ trunk/teraterm/common/layer_for_unicode/templ_nasm.asm.in 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,40 @@ +;;; nasm -f win32 %SYMBOL%.asm + + global __imp__%SYMBOL%@%PARAM_BYTES% + global %SYMBOL% + global _%SYMBOL%@%PARAM_BYTES% + + extern __%SYMBOL%@%PARAM_BYTES% + extern _init_ptr + + section .data + + ;; pointer of %SYMBOL%(), stdcall style +__imp__%SYMBOL%@%PARAM_BYTES%: + dd init + + + section .text + + ;; call api pointer initializer +init: + pusha + push dword __imp__%SYMBOL%@%PARAM_BYTES% ; place to save the pointer + push dword __%SYMBOL%@%PARAM_BYTES% ; wrapper + push dword api_str + push dword %DLL%_dll_str + call _init_ptr + add esp,byte 16 + popa + + ;; call api +;%SYMBOL%: +;_%SYMBOL%@%PARAM_BYTES%: + jmp [__imp__%SYMBOL%@%PARAM_BYTES%] + + + section .data +%DLL%_dll_str: + dw __utf16__("%DLL%.dll"), 0 +api_str: + db "%SYMBOL%",0 Modified: trunk/teraterm/common/layer_for_unicode.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode.cpp 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/layer_for_unicode.cpp 2021-06-29 15:20:36 UTC (rev 9325) @@ -60,7 +60,7 @@ static Initializer initializer; -BOOL _SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString) +BOOL WINAPI _SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString) { if (pSetDlgItemTextW != NULL) { return pSetDlgItemTextW(hDlg, nIDDlgItem, lpString); @@ -72,7 +72,7 @@ return retval; } -UINT _DragQueryFileW(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch) +UINT WINAPI _DragQueryFileW(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch) { if (pDragQueryFileW != NULL) { return pDragQueryFileW(hDrop, iFile, lpszFile, cch); @@ -106,7 +106,7 @@ return retval; } -DWORD _GetFileAttributesW(LPCWSTR lpFileName) +DWORD WINAPI _GetFileAttributesW(LPCWSTR lpFileName) { if (pGetFileAttributesW != NULL) { return pGetFileAttributesW(lpFileName); @@ -179,7 +179,7 @@ return strW; } -int _GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount) +int WINAPI _GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount) { if (pGetWindowTextW != NULL) { return pGetWindowTextW(hWnd, lpString, nMaxCount); @@ -194,7 +194,7 @@ return (int)(dest_len - 1); } -int _GetWindowTextLengthW(HWND hWnd) +int WINAPI _GetWindowTextLengthW(HWND hWnd) { if (pGetWindowTextLengthW != NULL) { return pGetWindowTextLengthW(hWnd); @@ -257,7 +257,7 @@ return retval; } -LRESULT _SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +LRESULT WINAPI _SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { if (pSendMessageW != NULL) { return pSendMessageW(hWnd, Msg, wParam, lParam); @@ -265,7 +265,7 @@ return SendMessageAFromW(hWnd, Msg, wParam, lParam); } -LRESULT _SendDlgItemMessageW(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam) +LRESULT WINAPI _SendDlgItemMessageW(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam) { if (pSendDlgItemMessageW != NULL) { return pSendDlgItemMessageW(hDlg, nIDDlgItem, Msg, wParam, lParam); @@ -275,8 +275,9 @@ return SendMessageAFromW(hWnd, Msg, wParam, lParam); } -HWND _CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, - int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) +HWND WINAPI _CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, + int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, + LPVOID lpParam) { if (pCreateWindowExW != NULL) { return pCreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, @@ -294,7 +295,7 @@ return hWnd; } -ATOM _RegisterClassW(const WNDCLASSW *lpWndClass) +ATOM WINAPI _RegisterClassW(const WNDCLASSW *lpWndClass) { if (pRegisterClassW != NULL) { return pRegisterClassW(lpWndClass); @@ -325,7 +326,7 @@ return atom; } -BOOL _SetWindowTextW(HWND hWnd, LPCWSTR lpString) +BOOL WINAPI _SetWindowTextW(HWND hWnd, LPCWSTR lpString) { if (pSetWindowTextW != NULL) { return pSetWindowTextW(hWnd, lpString); @@ -337,7 +338,7 @@ return retval; } -UINT _GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax) +UINT WINAPI _GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax) { if (pGetDlgItemTextW != NULL) { return pGetDlgItemTextW(hDlg, nIDDlgItem, lpString, cchMax); @@ -366,7 +367,7 @@ * * TODO:9x\x8Cn\x82\xC5DrawTextW\x82\xAA\x90\xB3\x82\xB5\x82\xAD\x93\xAE\x8D삷\x82\xE9? */ -int _DrawTextW(HDC hdc, LPCWSTR lpchText, int cchText, LPRECT lprc, UINT format) +int WINAPI _DrawTextW(HDC hdc, LPCWSTR lpchText, int cchText, LPRECT lprc, UINT format) { if (IsWindowsNTKernel()) { return DrawTextW(hdc, lpchText, cchText, lprc, format); @@ -380,7 +381,7 @@ return result; } -int _MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) +int WINAPI _MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) { if (pMessageBoxW != NULL) { return pMessageBoxW(hWnd, lpText, lpCaption, uType); @@ -394,7 +395,7 @@ return result; } -BOOL _InsertMenuW(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem) +BOOL WINAPI _InsertMenuW(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem) { if (pInsertMenuW != NULL) { return pInsertMenuW(hMenu, uPosition, uFlags, uIDNewItem, lpNewItem); @@ -406,7 +407,7 @@ return result; } -BOOL _AppendMenuW(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem) +BOOL WINAPI _AppendMenuW(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem) { if (pAppendMenuW != NULL) { return pAppendMenuW(hMenu, uFlags, uIDNewItem, lpNewItem); @@ -417,7 +418,7 @@ return result; } -int _AddFontResourceW(LPCWSTR lpFileName) +int WINAPI _AddFontResourceW(LPCWSTR lpFileName) { char *filenameA = ToCharW(lpFileName); int result = AddFontResourceA(filenameA); @@ -425,7 +426,7 @@ return result; } -BOOL _RemoveFontResourceW(LPCWSTR lpFileName) +BOOL WINAPI _RemoveFontResourceW(LPCWSTR lpFileName) { char *filenameA = ToCharW(lpFileName); int result = RemoveFontResourceA(filenameA); @@ -436,7 +437,7 @@ /* * lpData.cbSize == 952\x82̂Ƃ\xAB\x82̂\xDD ANSI\x8A֐\x94\x82ŏ\x88\x97\x9D\x82\xB7\x82\xE9 */ -BOOL _Shell_NotifyIconW(DWORD dwMessage, TT_NOTIFYICONDATAW_V2 *lpData) +BOOL WINAPI _Shell_NotifyIconW(DWORD dwMessage, TT_NOTIFYICONDATAW_V2 *lpData) { if (pShell_NotifyIconW != NULL) { return pShell_NotifyIconW(dwMessage, (PNOTIFYICONDATAW)lpData); @@ -474,7 +475,7 @@ return r; } -HWND _CreateDialogIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEW lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, +HWND WINAPI _CreateDialogIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEW lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) { if (pCreateDialogIndirectParamW != NULL) { @@ -483,7 +484,7 @@ return CreateDialogIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, dwInitParam); } -INT_PTR _DialogBoxIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, +INT_PTR WINAPI _DialogBoxIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { if (pDialogBoxIndirectParamW != NULL) { @@ -492,7 +493,7 @@ return DialogBoxIndirectParamA(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, lParamInit); } -LONG _SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong) +LONG WINAPI _SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong) { if (pSetWindowLongW != NULL) { return pSetWindowLongW(hWnd, nIndex, dwNewLong); @@ -500,7 +501,7 @@ return SetWindowLongA(hWnd, nIndex, dwNewLong); } -LONG_PTR _SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong) +LONG_PTR WINAPI _SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong) { #ifdef _WIN64 if (pSetWindowLongPtrW != NULL) { @@ -512,7 +513,7 @@ #endif } -LONG _GetWindowLongW(HWND hWnd, int nIndex) +LONG WINAPI _GetWindowLongW(HWND hWnd, int nIndex) { if (pGetWindowLongW != NULL) { return pGetWindowLongW(hWnd, nIndex); @@ -520,7 +521,7 @@ return GetWindowLongA(hWnd, nIndex); } -LONG_PTR _GetWindowLongPtrW(HWND hWnd, int nIndex) +LONG_PTR WINAPI _GetWindowLongPtrW(HWND hWnd, int nIndex) { #ifdef _WIN64 if (pGetWindowLongPtrW != NULL) { @@ -532,7 +533,7 @@ #endif } -LRESULT _CallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +LRESULT WINAPI _CallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { if (pCallWindowProcW != NULL) { return pCallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam); @@ -540,7 +541,7 @@ return CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam); } -void _OutputDebugStringW(LPCWSTR lpOutputString) +void WINAPI _OutputDebugStringW(LPCWSTR lpOutputString) { if (pOutputDebugStringW != NULL) { return pOutputDebugStringW(lpOutputString); @@ -551,7 +552,7 @@ free(strA); } -DWORD _GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer) +DWORD WINAPI _GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer) { if (pGetCurrentDirectoryW != NULL) { return pGetCurrentDirectoryW(nBufferLength, lpBuffer); @@ -565,7 +566,7 @@ return r; } -BOOL _SetCurrentDirectoryW(LPCWSTR lpPathName) +BOOL WINAPI _SetCurrentDirectoryW(LPCWSTR lpPathName) { if (pSetCurrentDirectoryW != NULL) { return pSetCurrentDirectoryW(lpPathName); @@ -576,7 +577,7 @@ return r; } -LPITEMIDLIST _SHBrowseForFolderW(LPBROWSEINFOW lpbi) +LPITEMIDLIST WINAPI _SHBrowseForFolderW(LPBROWSEINFOW lpbi) { if (pSHBrowseForFolderW != NULL) { return pSHBrowseForFolderW(lpbi); @@ -597,7 +598,7 @@ return pidlBrowse; } -BOOL _SHGetPathFromIDListW(LPITEMIDLIST pidl, LPWSTR pszPath) +BOOL WINAPI _SHGetPathFromIDListW(LPITEMIDLIST pidl, LPWSTR pszPath) { if (pSHGetPathFromIDListW != NULL) { return pSHGetPathFromIDListW(pidl, pszPath); @@ -609,7 +610,7 @@ return r; } -DWORD _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, +DWORD WINAPI _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName) { if (pGetPrivateProfileStringW != NULL) { @@ -617,6 +618,9 @@ lpReturnedString, nSize, lpFileName); } + if (lpDefault == NULL) { + lpDefault = L""; + } char *buf = (char* )malloc(nSize); char *appA = ToCharW(lpAppName); char *keyA = ToCharW(lpKeyName); @@ -633,7 +637,7 @@ return r; } -BOOL _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName) +BOOL WINAPI _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName) { if (pWritePrivateProfileStringW != NULL) { return pWritePrivateProfileStringW(lpAppName, lpKeyName, lpString, lpFileName); @@ -651,7 +655,7 @@ return r; } -UINT _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName) +UINT WINAPI _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName) { if (pGetPrivateProfileIntW != NULL) { return pGetPrivateProfileIntW(lpAppName, lpKeyName, nDefault, lpFileName); @@ -667,7 +671,7 @@ return r; } -BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, +BOOL WINAPI _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, @@ -716,7 +720,7 @@ return r; } -BOOL _CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists) +BOOL WINAPI _CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists) { if (pCopyFileW != NULL) { return pCopyFileW(lpExistingFileName, lpNewFileName, bFailIfExists); @@ -729,7 +733,7 @@ return r; } -BOOL _DeleteFileW(LPCWSTR lpFileName) +BOOL WINAPI _DeleteFileW(LPCWSTR lpFileName) { if (pDeleteFileW != NULL) { return pDeleteFileW(lpFileName); @@ -740,7 +744,7 @@ return r; } -BOOL _MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName) +BOOL WINAPI _MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName) { if (pMoveFileW != NULL) { return pMoveFileW(lpExistingFileName, lpNewFileName); @@ -753,7 +757,7 @@ return r; } -HANDLE _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, +HANDLE WINAPI _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { @@ -783,7 +787,7 @@ ::MultiByteToWideChar(CP_ACP, 0, a->cAlternateFileName, _countof(a->cAlternateFileName), w->cAlternateFileName, _countof(w->cAlternateFileName)); } -HANDLE _FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData) +HANDLE WINAPI _FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData) { if (pFindFirstFileW != NULL) { return pFindFirstFileW(lpFileName, lpFindFileData); @@ -797,7 +801,7 @@ return handle; } -BOOL _FindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData) +BOOL WINAPI _FindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData) { if (pFindNextFileW != NULL) { return pFindNextFileW(hFindFile, lpFindFileData); @@ -808,7 +812,7 @@ return r; } -BOOL _RemoveDirectoryW(LPCWSTR lpPathName) +BOOL WINAPI _RemoveDirectoryW(LPCWSTR lpPathName) { if (pRemoveDirectoryW != NULL) { return pRemoveDirectoryW(lpPathName); @@ -819,40 +823,47 @@ return r; } -DWORD _GetFullPathNameW(LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart) +DWORD WINAPI _GetFullPathNameW(LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart) { if (pGetFullPathNameW != NULL) { return pGetFullPathNameW(lpFileName, nBufferLength, lpBuffer, lpFilePart); } - char *filenameA = ToCharW(lpFileName); - char bufA[MAX_PATH]; - char *filepartA; - DWORD r = GetFullPathNameA(filenameA, sizeof(bufA), bufA, &filepartA); - if (r == 0) { - // error + if (nBufferLength == 0 || lpBuffer == NULL) { + char *filenameA = ToCharW(lpFileName); + DWORD r = GetFullPathNameA(filenameA, 0, NULL, NULL); free(filenameA); - return 0; + return r; } - wchar_t *bufW = ToWcharA(bufA); - r = (DWORD)wcslen(bufW); - if (nBufferLength == 0 || lpBuffer == NULL) { - // \x95K\x97v\x82ȕ\xB6\x8E\x9A\x90\x94\x82\xF0\x95Ԃ\xB7('\0'\x8A܂\xDE) - r = r + 1; - } else { - // \x83p\x83X\x82\xF0\x83R\x83s\x81[\x82\xB5\x82āA\x95\xB6\x8E\x9A\x97񒷂\xF0\x95Ԃ\xB7('\0'\x8A܂܂Ȃ\xA2) - wcsncpy_s(lpBuffer, nBufferLength, bufW, _TRUNCATE); - if (lpFilePart != NULL) { - *lpFilePart = lpBuffer + (filepartA - filenameA) * sizeof(wchar_t); + else { + char *filenameA = ToCharW(lpFileName); + char bufA[MAX_PATH]; + char *filepartA; + DWORD r = GetFullPathNameA(filenameA, sizeof(bufA), bufA, &filepartA); + if (r == 0) { + // error + free(filenameA); + return 0; } + wchar_t *bufW = ToWcharA(bufA); + r = (DWORD)wcslen(bufW); + if (nBufferLength == 0 || lpBuffer == NULL) { + // \x95K\x97v\x82ȕ\xB6\x8E\x9A\x90\x94\x82\xF0\x95Ԃ\xB7('\0'\x8A܂\xDE) + r = r + 1; + } else { + // \x83p\x83X\x82\xF0\x83R\x83s\x81[\x82\xB5\x82āA\x95\xB6\x8E\x9A\x97񒷂\xF0\x95Ԃ\xB7('\0'\x8A܂܂Ȃ\xA2) + wcsncpy_s(lpBuffer, nBufferLength, bufW, _TRUNCATE); + if (lpFilePart != NULL) { + *lpFilePart = lpBuffer + (filepartA - filenameA) * sizeof(wchar_t); + } + } + free(filenameA); + free(bufW); + return r; } - free(filenameA); - free(bufW); - - return r; } -HMODULE _LoadLibraryW(LPCWSTR lpLibFileName) +HMODULE WINAPI _LoadLibraryW(LPCWSTR lpLibFileName) { if (pLoadLibraryW != NULL) { return pLoadLibraryW(lpLibFileName); @@ -863,7 +874,7 @@ return r; } -DWORD _GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize) +DWORD WINAPI _GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize) { if (pGetModuleFileNameW != NULL) { return pGetModuleFileNameW(hModule, lpFilename, nSize); @@ -878,7 +889,7 @@ return wlen - 1; // not including the terminating null character } -DWORD _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize) +DWORD WINAPI _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize) { if (pExpandEnvironmentStringsW != NULL) { return pExpandEnvironmentStringsW(lpSrc, lpDst, nSize); @@ -895,7 +906,7 @@ return r; } -HMODULE _GetModuleHandleW(LPCWSTR lpModuleName) +HMODULE WINAPI _GetModuleHandleW(LPCWSTR lpModuleName) { char *lpStringA = ToCharW(lpModuleName); HMODULE h = GetModuleHandleA(lpStringA); @@ -903,7 +914,7 @@ return h; } -UINT _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize) +UINT WINAPI _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize) { char buf[MAX_PATH]; UINT r = GetSystemDirectoryA(buf, _countof(buf)); @@ -914,7 +925,7 @@ return wlen - 1; // not including the terminating null character } -DWORD _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer) +DWORD WINAPI _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer) { if (pGetTempPathW != NULL) { return pGetTempPathW(nBufferLength, lpBuffer); @@ -929,7 +940,7 @@ return wlen - 1; // not including the terminating null character } -UINT _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName) +UINT WINAPI _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName) { if (pGetTempFileNameW != NULL) { return pGetTempFileNameW(lpPathName, lpPrefixString, uUnique, lpTempFileName); Modified: trunk/teraterm/common/layer_for_unicode.h =================================================================== --- trunk/teraterm/common/layer_for_unicode.h 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/layer_for_unicode.h 2021-06-29 15:20:36 UTC (rev 9325) @@ -93,82 +93,82 @@ //HICON hBalloonIcon; // Vista+ } TT_NOTIFYICONDATAW_V2; -BOOL _SetWindowTextW(HWND hWnd, LPCWSTR lpString); -BOOL _SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString); -UINT _GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax); -LRESULT _SendDlgItemMessageW(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam); -LRESULT _SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -HWND _CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, +BOOL WINAPI _SetWindowTextW(HWND hWnd, LPCWSTR lpString); +BOOL WINAPI _SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString); +UINT WINAPI _GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int cchMax); +LRESULT WINAPI _SendDlgItemMessageW(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI _SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +HWND WINAPI WINAPI _CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); -ATOM _RegisterClassW(const WNDCLASSW *lpWndClass); -int _DrawTextW(HDC hdc, LPCWSTR lpchText, int cchText, LPRECT lprc, UINT format); -int _MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); -BOOL _InsertMenuW(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem); -BOOL _AppendMenuW(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem); -int _GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount); -int _GetWindowTextLengthW(HWND hWnd); -LONG _SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong); -LONG _GetWindowLongW(HWND hWnd, int nIndex); -LONG_PTR _SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong); -LONG_PTR _GetWindowLongPtrW(HWND hWnd, int nIndex); -LRESULT _CallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +ATOM WINAPI _RegisterClassW(const WNDCLASSW *lpWndClass); +int WINAPI _DrawTextW(HDC hdc, LPCWSTR lpchText, int cchText, LPRECT lprc, UINT format); +int WINAPI _MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); +BOOL WINAPI _InsertMenuW(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem); +BOOL WINAPI _AppendMenuW(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCWSTR lpNewItem); +int WINAPI _GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount); +int WINAPI _GetWindowTextLengthW(HWND hWnd); +LONG WINAPI _SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong); +LONG WINAPI _GetWindowLongW(HWND hWnd, int nIndex); +LONG_PTR WINAPI _SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong); +LONG_PTR WINAPI _GetWindowLongPtrW(HWND hWnd, int nIndex); +LRESULT WINAPI _CallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // kernel32.dll -DWORD _GetFileAttributesW(LPCWSTR lpFileName); -DWORD _GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer); -BOOL _SetCurrentDirectoryW(LPCWSTR lpPathName); -void _OutputDebugStringW(LPCWSTR lpOutputString); -DWORD _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, +DWORD WINAPI _GetFileAttributesW(LPCWSTR lpFileName); +DWORD WINAPI _GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer); +BOOL WINAPI _SetCurrentDirectoryW(LPCWSTR lpPathName); +void WINAPI _OutputDebugStringW(LPCWSTR lpOutputString); +DWORD WINAPI _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); -BOOL _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); -UINT _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName); -BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, +BOOL WINAPI _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); +UINT WINAPI _GetPrivateProfileIntW(LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName); +BOOL WINAPI _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); -BOOL _CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists); -BOOL _DeleteFileW(LPCWSTR lpFileName); -BOOL _MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName); -HANDLE _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, +BOOL WINAPI _CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists); +BOOL WINAPI _DeleteFileW(LPCWSTR lpFileName); +BOOL WINAPI _MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName); +HANDLE WINAPI _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); -HANDLE _FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData); -BOOL _FindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData); -BOOL _RemoveDirectoryW(LPCWSTR lpPathName); -DWORD _GetFullPathNameW(LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart); -HMODULE _LoadLibraryW(LPCWSTR lpLibFileName); -DWORD _GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); -DWORD _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); -HMODULE _GetModuleHandleW(LPCWSTR lpModuleName); -UINT _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize); -DWORD _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer); -UINT _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); +HANDLE WINAPI _FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData); +BOOL WINAPI _FindNextFileW(HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData); +BOOL WINAPI _RemoveDirectoryW(LPCWSTR lpPathName); +DWORD WINAPI _GetFullPathNameW(LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart); +HMODULE WINAPI _LoadLibraryW(LPCWSTR lpLibFileName); +DWORD WINAPI WINAPI _GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); +DWORD WINAPI _ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); +HMODULE WINAPI _GetModuleHandleW(LPCWSTR lpModuleName); +UINT WINAPI _GetSystemDirectoryW(LPWSTR lpBuffer, UINT uSize); +DWORD WINAPI _GetTempPathW(DWORD nBufferLength, LPWSTR lpBuffer); +UINT WINAPI _GetTempFileNameW(LPCWSTR lpPathName, LPCWSTR lpPrefixString, UINT uUnique, LPWSTR lpTempFileName); // gdi32.lib -int _AddFontResourceW(LPCWSTR lpFileName); -BOOL _RemoveFontResourceW(LPCWSTR lpFileName); +int WINAPI _AddFontResourceW(LPCWSTR lpFileName); +BOOL WINAPI _RemoveFontResourceW(LPCWSTR lpFileName); // Comctl32.lib -HPROPSHEETPAGE _CreatePropertySheetPageW(LPCPROPSHEETPAGEW_V1 constPropSheetPagePointer); -INT_PTR _PropertySheetW(PROPSHEETHEADERW *constPropSheetHeaderPointer); -//INT_PTR _PropertySheetW(PROPSHEETHEADERW_V1 *constPropSheetHeaderPointer); +HPROPSHEETPAGE WINAPI _CreatePropertySheetPageW(LPCPROPSHEETPAGEW_V1 constPropSheetPagePointer); +INT_PTR WINAPI _PropertySheetW(PROPSHEETHEADERW *constPropSheetHeaderPointer); +//INT_PTR WINAPI _PropertySheetW(PROPSHEETHEADERW_V1 *constPropSheetHeaderPointer); // Comdlg32.lib -BOOL _GetOpenFileNameW(LPOPENFILENAMEW ofnW); -BOOL _GetSaveFileNameW(LPOPENFILENAMEW ofnW); +BOOL WINAPI _GetOpenFileNameW(LPOPENFILENAMEW ofnW); +BOOL WINAPI _GetSaveFileNameW(LPOPENFILENAMEW ofnW); // shell32.lib -UINT _DragQueryFileW(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch); -BOOL _Shell_NotifyIconW(DWORD dwMessage, TT_NOTIFYICONDATAW_V2 *lpData); -LPITEMIDLIST _SHBrowseForFolderW(LPBROWSEINFOW lpbi); -BOOL _SHGetPathFromIDListW(LPITEMIDLIST pidl, LPWSTR pszPath); +UINT WINAPI _DragQueryFileW(HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch); +BOOL WINAPI _Shell_NotifyIconW(DWORD dwMessage, TT_NOTIFYICONDATAW_V2 *lpData); +LPITEMIDLIST WINAPI _SHBrowseForFolderW(LPBROWSEINFOW lpbi); +BOOL WINAPI _SHGetPathFromIDListW(LPITEMIDLIST pidl, LPWSTR pszPath); -HWND _CreateDialogIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEW lpTemplate, +HWND WINAPI _CreateDialogIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEW lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam); -INT_PTR _DialogBoxIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, +INT_PTR WINAPI _DialogBoxIndirectParamW(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit); #ifdef __cplusplus Added: trunk/teraterm/common/layer_for_unicode.md =================================================================== --- trunk/teraterm/common/layer_for_unicode.md (rev 0) +++ trunk/teraterm/common/layer_for_unicode.md 2021-06-29 15:20:36 UTC (rev 9325) @@ -0,0 +1,84 @@ +layer for unicode +================= + +## layer for unicode について + +Unicode API が存在しない環境で Unicode API を利用するためのライブラリ +- [Microsoft Layer for Unicode, MSLU](https://ja.wikipedia.org/wiki/Microsoft_Layer_for_Unicode) +- Windows 9x系を想定 +- Unicode APIが利用できる場合は利用する +- Unicode APIが利用できない場合はANSI(非Unicode)APIを使用 + - Unicode API をエミュレーションする + +## ビルド + +### 必要なツール + +- nasm + - buildtools/ で `cmake -P nasm.cmake` を実行すると準備することができる +- perl +- make + +### 準備 + +ビルド前に次のコマンドを実行しておく + +``` +perl generate.pl +make +``` + +## 経緯 + +- Tera Term では 9x系をサポートするため独自実装していた + - Microsoft Layer for Unicode を使用すると dll が必要となる + - 同梱するためにはライセンス、再頒布の検討が必要 + - dllが配布されなくなる可能性がある + - Tera Term では独自実装のコードをバイナリにstaticにリンクしていた +- 従来 Tera Term の layer for unicode を使用するためには、少しコードを変更する必要があった + - includeの追加 + - WIN32 API 名を少し変更する + - 例 SetDlgItemTextW() -> _SetDlgItemTextW() +- ライブラリとして分離したい,モチベーション + - 9x系のサポートを Tera Term 本体の開発と分離したい + - Microsoft Layer for Unicode への置き換えを可能にしたい + - x64(64bit)環境ではUnicode APIが存在するはずなので組み込まずにバイナリを作りたい + - 将来9xサポートをやめるときにソースを修正を最小としたい +- [libunicodes](http://libunicows.sourceforge.net/)プロジェクトを参考にライブラリとして分離 + - Cでは記述できないのでアセンブラを使用 + - nasm を採用 + - linuxでも使用できる + - ソースはテンプレートから自動生成 + - テンプレートを作成すれば他のアセンブラでも作成可能 + - ラベルに`@`が含まれるため + - 例 `__imp__GetDlgItemTextW @ 16` + +## 方針 + +- Tera Term が動作する程度に実装 +- Microsoft Layer for Unicode と同等のAPI + - `nm "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.xxxxxx.0\um\x86\unicows.lib"` + - Visual Studio 2019 Win32 に含まれている + - Visual Studio 2019 で作成したバイナリは 9x では動作しない + - 従来のコードをそのままビルドできるよう,互換性を維持するため存在すると思われる + +## ライブラリの利用 + +- 利用する側のソース + - 利用するうえで特に気にかけることはない +- 利用する側のライブラリのリンク + - kernel32.lib, user32.lib などよりも前に layer for unicode ライブラリをリンクする + - 順序を誤ると Unicode API を使用するバイナリとなる + - static リンクであれば、バイナリ内のAPIを置き換えることができる + - CreateFileW() を使用していると思われる wfopen() も利用可能となる +- バイナリ内に Unicode API が存在するかチェックする例 + - 存在しない場合 + + $ objdump -p ../../release/ttermpro.exe | grep CreateFile + b1256 83 CreateFileA + + - 存在する場合 + + $ objdump -p ../../release/ttermpro.exe | grep CreateFile + b0618 83 CreateFileA + b016c 86 CreateFileW Modified: trunk/teraterm/common/layer_for_unicode_comctl32.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode_comctl32.cpp 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/common/layer_for_unicode_comctl32.cpp 2021-06-29 15:20:36 UTC (rev 9325) @@ -40,7 +40,7 @@ #include "layer_for_unicode.h" -HPROPSHEETPAGE _CreatePropertySheetPageW(LPCPROPSHEETPAGEW_V1 psp) +HPROPSHEETPAGE WINAPI _CreatePropertySheetPageW(LPCPROPSHEETPAGEW_V1 psp) { if (pCreatePropertySheetPageW != NULL) { return pCreatePropertySheetPageW((LPCPROPSHEETPAGEW)psp); @@ -70,7 +70,7 @@ // SDK: Windows Server 2003 R2 Platform SDK // (Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1) //INT_PTR _PropertySheetW(PROPSHEETHEADERW_V1 *psh) -INT_PTR _PropertySheetW(PROPSHEETHEADERW *psh) +INT_PTR WINAPI _PropertySheetW(PROPSHEETHEADERW *psh) { if (pPropertySheetW != NULL) { return pPropertySheetW((PROPSHEETHEADERW *)psh); @@ -150,7 +150,7 @@ return result; } -BOOL _GetOpenFileNameW(LPOPENFILENAMEW ofnW) +BOOL WINAPI _GetOpenFileNameW(LPOPENFILENAMEW ofnW) { if (pGetOpenFileNameW != NULL) { return pGetOpenFileNameW(ofnW); @@ -159,7 +159,7 @@ return GetOpenSaveFileNameA(GetOpenFileNameA, ofnW); } -BOOL _GetSaveFileNameW(LPOPENFILENAMEW ofnW) +BOOL WINAPI _GetSaveFileNameW(LPOPENFILENAMEW ofnW) { if (pGetSaveFileNameW != NULL) { return pGetSaveFileNameW(ofnW); Modified: trunk/teraterm/keycode/CMakeLists.txt =================================================================== --- trunk/teraterm/keycode/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/keycode/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -12,6 +12,11 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME} @@ -60,6 +65,12 @@ ) if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME_2} + PRIVATE + common_static + layer_for_unicode + ) if(MSVC) target_sources( ${PACKAGE_NAME_2} Modified: trunk/teraterm/teraterm/CMakeLists.txt =================================================================== --- trunk/teraterm/teraterm/CMakeLists.txt 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/teraterm/CMakeLists.txt 2021-06-29 15:20:36 UTC (rev 9325) @@ -206,6 +206,17 @@ if(SUPPORT_OLD_WINDOWS) if(MSVC) + if(${CMAKE_VERSION} VERSION_LESS "3.12.0") + set(CMAKE_C_STANDARD_LIBRARIES "") + set(CMAKE_CXX_STANDARD_LIBRARIES "") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB") + else() + target_link_options( + ${PACKAGE_NAME} + PRIVATE + /NODEFAULTLIB + ) + endif() target_sources( ${PACKAGE_NAME} PRIVATE @@ -271,6 +282,8 @@ /pdbaltpath:ttermpro.pdb /map ) + else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /map") endif() elseif(MINGW) target_link_options( @@ -289,12 +302,31 @@ ttptek ${ONIGURUMA_LIB} ${SFMT_LIB} - # + ) + +if(SUPPORT_OLD_WINDOWS) + target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + layer_for_unicode + ) +endif() + +target_link_libraries( + ${PACKAGE_NAME} + PRIVATE + advapi32 + comctl32 + comdlg32 gdi32 - comctl32 - ws2_32 imagehlp + kernel32 + ole32 + oleaut32 + shell32 + user32 uuid + ws2_32 ) install( Modified: trunk/teraterm/teraterm/ttermpro.v8.vcproj =================================================================== --- trunk/teraterm/teraterm/ttermpro.v8.vcproj 2021-06-29 15:20:20 UTC (rev 9324) +++ trunk/teraterm/teraterm/ttermpro.v8.vcproj 2021-06-29 15:20:36 UTC (rev 9325) @@ -71,11 +71,12 @@ /> Revision: 9326 https://osdn.net/projects/ttssh2/scm/svn/commits/9326 Author: zmatsuo Date: 2021-06-30 22:36:44 +0900 (Wed, 30 Jun 2021) Log Message: ----------- 言語ファイルが切り替えられなくなっていたので修正 - r9306 Revision Links: -------------- https://osdn.net/projects/ttssh2/scm/svn/commits/9306 Modified Paths: -------------- trunk/teraterm/ttpdlg/ttdlg.c -------------- next part -------------- Modified: trunk/teraterm/ttpdlg/ttdlg.c =================================================================== --- trunk/teraterm/ttpdlg/ttdlg.c 2021-06-29 15:20:36 UTC (rev 9325) +++ trunk/teraterm/ttpdlg/ttdlg.c 2021-06-30 13:36:44 UTC (rev 9326) @@ -195,7 +195,7 @@ SetWindowLongPtr(Dialog, DWLP_USER, lParam); SetDlgTexts(Dialog, TextInfosCom, _countof(TextInfosCom), UILanguageFile); - if (ts->Language==IdJapanese) { + if (ts->Language==IdJapanese) { static const DlgTextInfo TextInfosJp[] = { { IDC_TERMKANJILABEL, "DLG_TERM_KANJI" }, { IDC_TERMKANA, "DLG_TERM_KANA" }, @@ -3001,7 +3001,7 @@ WideCharToACP_t(ts->UILanguageFileW_ini, ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini)); ts->UILanguageFileW = GetUILanguageFileFullW(ts->HomeDirW, ts->UILanguageFileW_ini); - WideCharToACP_t(ts->UILanguageFileW, ts->UILanguageFile, sizeof(ts->UILanguageFileW)); + WideCharToACP_t(ts->UILanguageFileW, ts->UILanguageFile, sizeof(ts->UILanguageFile)); // \x83^\x83C\x83g\x83\x8B\x82̍X\x90V\x82\xF0\x8Ds\x82\xA4\x81B(2014.2.23 yutaka) PostMessage(GetParent(Dialog),WM_USER_CHANGETITLE,0,0); From scmnotify @ osdn.net Wed Jun 30 22:36:59 2021 From: scmnotify @ osdn.net (scmnotify @ osdn.net) Date: Wed, 30 Jun 2021 22:36:59 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzkzMjddIGNtYWtl44OT44Or44OJ5pmCVlMy?= =?utf-8?b?MDA444Gn44Ko44Op44O844GM5Ye644Gq44GE44KI44GG5L+u5q2j?= Message-ID: <1625060219.824846.18538.nullmailer@users.osdn.me> Revision: 9327 https://osdn.net/projects/ttssh2/scm/svn/commits/9327 Author: zmatsuo Date: 2021-06-30 22:36:59 +0900 (Wed, 30 Jun 2021) Log Message: ----------- cmakeビルド時VS2008でエラーが出ないよう修正 Modified Paths: -------------- trunk/ttssh2/argon2/CMakeLists.txt -------------- next part -------------- Modified: trunk/ttssh2/argon2/CMakeLists.txt =================================================================== --- trunk/ttssh2/argon2/CMakeLists.txt 2021-06-30 13:36:44 UTC (rev 9326) +++ trunk/ttssh2/argon2/CMakeLists.txt 2021-06-30 13:36:59 UTC (rev 9327) @@ -22,7 +22,8 @@ ../../libs/argon2/src/thread.h ) -if(${CMAKE_GENERATOR} MATCHES "Visual Studio 8 2005") +if(MSVC AND (MSVC_VERSION LESS_EQUAL 1500)) + # Visual Studio 2005, 2008 (1500=VS2008) target_sources( ${PACKAGE_NAME} PRIVATE