[ttssh2-commit] [9796] ttlib_static_dir.cpp,h を追加、フォルダに関する関数をまとめた

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2022年 3月 9日 (水) 00:07:17 JST


Revision: 9796
          https://osdn.net/projects/ttssh2/scm/svn/commits/9796
Author:   zmatsuo
Date:     2022-03-09 00:07:17 +0900 (Wed, 09 Mar 2022)
Log Message:
-----------
ttlib_static_dir.cpp,h を追加、フォルダに関する関数をまとめた

- 他の関連プログラムで容易に利用できるようにするため
  - cyglaunch
  - TTWinExec() も移動
- cyglib.c
  - ttlib.h を ttlib_static_dir.h に変更

Modified Paths:
--------------
    trunk/cygwin/cyglib/cyglib.c
    trunk/teraterm/common/CMakeLists.txt
    trunk/teraterm/common/common_static.v16.vcxproj
    trunk/teraterm/common/common_static.v8.vcproj
    trunk/teraterm/common/ttlib.h
    trunk/teraterm/common/ttlib_static_cpp.cpp

Added Paths:
-----------
    trunk/teraterm/common/ttlib_static_dir.cpp
    trunk/teraterm/common/ttlib_static_dir.h

-------------- next part --------------
Modified: trunk/cygwin/cyglib/cyglib.c
===================================================================
--- trunk/cygwin/cyglib/cyglib.c	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/cygwin/cyglib/cyglib.c	2022-03-08 15:07:17 UTC (rev 9796)
@@ -33,7 +33,7 @@
 #include <string.h>
 #include <errno.h>
 
-#include "ttlib.h"
+#include "ttlib_static_dir.h"
 #include "asprintf.h"
 
 #include "cyglib.h"

Modified: trunk/teraterm/common/CMakeLists.txt
===================================================================
--- trunk/teraterm/common/CMakeLists.txt	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/teraterm/common/CMakeLists.txt	2022-03-08 15:07:17 UTC (rev 9796)
@@ -36,10 +36,12 @@
   ttknownfolders.h
   ttknownfolders.c
   ttlib.h
+  ttlib_charset.cpp
+  ttlib_charset.h
   ttlib_static.c
   ttlib_static_cpp.cpp
-  ttlib_charset.h
-  ttlib_charset.cpp
+  ttlib_static_dir.cpp
+  ttlib_static_dir.h
   win32helper.cpp
   win32helper.h
   )

Modified: trunk/teraterm/common/common_static.v16.vcxproj
===================================================================
--- trunk/teraterm/common/common_static.v16.vcxproj	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/teraterm/common/common_static.v16.vcxproj	2022-03-08 15:07:17 UTC (rev 9796)
@@ -151,6 +151,7 @@
     <ClCompile Include="ttlib_charset.cpp" />
     <ClCompile Include="ttlib_static.c" />
     <ClCompile Include="ttlib_static_cpp.cpp" />
+    <ClCompile Include="ttlib_static_dir.cpp" />
     <ClCompile Include="win32helper.cpp" />
   </ItemGroup>
   <ItemGroup>
@@ -169,6 +170,7 @@
     <ClInclude Include="ttknownfolders.h" />
     <ClInclude Include="ttlib.h" />
     <ClInclude Include="ttlib_charset.h" />
+    <ClInclude Include="ttlib_static_dir.h" />
     <ClInclude Include="win32helper.h" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

Modified: trunk/teraterm/common/common_static.v8.vcproj
===================================================================
--- trunk/teraterm/common/common_static.v8.vcproj	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/teraterm/common/common_static.v8.vcproj	2022-03-08 15:07:17 UTC (rev 9796)
@@ -309,6 +309,14 @@
 			>
 		</File>
 		<File
+			RelativePath=".\ttlib_static_dir.cpp"
+			>
+		</File>
+		<File
+			RelativePath=".\ttlib_static_dir.h"
+			>
+		</File>
+		<File
 			RelativePath=".\win32helper.cpp"
 			>
 		</File>

Modified: trunk/teraterm/common/ttlib.h
===================================================================
--- trunk/teraterm/common/ttlib.h	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/teraterm/common/ttlib.h	2022-03-08 15:07:17 UTC (rev 9796)
@@ -34,6 +34,7 @@
 #pragma once
 
 #include "i18n.h"
+#include "ttlib_static_dir.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -92,9 +93,6 @@
 int GetNthNum2(PCHAR Source, int Nth, int defval);
 void GetDownloadFolder(char *dest, int destlen);
 wchar_t *GetDownloadFolderW(void);
-wchar_t *GetHomeDirW(HINSTANCE hInst);
-wchar_t *GetExeDirW(HINSTANCE hInst);
-wchar_t* GetLogDirW(HINSTANCE hInst);
 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,
@@ -199,7 +197,6 @@
 wchar_t *NormalizeLineBreakCRLF(const wchar_t *src_);
 BOOL IsRelativePathA(const char *path);
 BOOL IsRelativePathW(const wchar_t *path);
-DWORD TTWinExec(const wchar_t *command);
 DWORD TTWinExecA(const char *commandA);
 void CreateBakupFile(const wchar_t *fname, const wchar_t *prev_str);
 BOOL ConvertIniFileCharCode(const wchar_t *fname,  const wchar_t *bak_str);

Modified: trunk/teraterm/common/ttlib_static_cpp.cpp
===================================================================
--- trunk/teraterm/common/ttlib_static_cpp.cpp	2022-03-08 15:07:04 UTC (rev 9795)
+++ trunk/teraterm/common/ttlib_static_cpp.cpp	2022-03-08 15:07:17 UTC (rev 9796)
@@ -880,123 +880,6 @@
 }
 
 /*
- * Get Exe(exe,dll) directory
- *	ttermpro.exe, \x83v\x83\x89\x83O\x83C\x83\x93\x82\xAA\x82\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_
- *	ttypes.ExeDirW \x82Ɠ\xAF\x88\xEA
- *	\x82\xE0\x82Ƃ\xCD GetHomeDirW() \x82\xBE\x82\xC1\x82\xBD
- *
- * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
- * @return			ExeDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
- *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
- */
-wchar_t *GetExeDirW(HINSTANCE hInst)
-{
-	wchar_t *TempW;
-	wchar_t *dir;
-	DWORD error = hGetModuleFileNameW(hInst, &TempW);
-	if (error != NO_ERROR) {
-		// \x83p\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x81B\x92v\x96\xBD\x93I\x81Aabort() \x82\xB7\x82\xE9\x81B
-		abort();
-	}
-	dir = ExtractDirNameW(TempW);
-	free(TempW);
-	return dir;
-}
-
-#define PORTABLE_FILENAME L"portable.ini"
-
-/**
- *	\x83|\x81[\x83^\x83u\x83\x8B\x94łƂ\xB5\x82ē\xAE\x8D삷\x82邩
- *
- *	@retval		TRUE		\x83|\x81[\x83^\x83u\x83\x8B\x94\xC5
- *	@retval		FALSE		\x92ʏ\xED\x83C\x83\x93\x83X\x83g\x81[\x83\x8B\x94\xC5
- */
-BOOL IsPortableMode(void)
-{
-	static BOOL called = FALSE;
-	static BOOL ret_val = FALSE;
-	if (called == FALSE) {
-		called = TRUE;
-		wchar_t *exe_dir = GetExeDirW(NULL);
-		wchar_t *portable_ini = NULL;
-		awcscats(&portable_ini, exe_dir, L"\\", PORTABLE_FILENAME, NULL);
-		free(exe_dir);
-		DWORD r = GetFileAttributesW(portable_ini);
-		free(portable_ini);
-		if (r == INVALID_FILE_ATTRIBUTES) {
-			//\x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2
-			ret_val = FALSE;
-		}
-		else {
-			ret_val = TRUE;
-		}
-	}
-	return ret_val;
-}
-
-/*
- * Get home directory
- *		\x8Cl\x97p\x90ݒ\xE8\x83t\x83@\x83C\x83\x8B\x83t\x83H\x83\x8B\x83_\x8E擾
- *		ttypes.HomeDirW \x82Ɠ\xAF\x88\xEA
- *		TERATERM.INI \x82Ȃǂ\xAA\x82\xA8\x82\xA2\x82Ă\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_
- *		ttermpro.exe \x82\xAA\x82\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_\x82\xCD GetHomeDirW() \x82ł͂Ȃ\xAD GetExeDirW() \x82Ŏ擾\x82ł\xAB\x82\xE9
- *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ
- *			ExeDirW
- *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82Ȃ\xA2\x8Fꍇ
- *			%APPDATA%\teraterm5 (%USERPROFILE%\AppData\Roaming\teraterm5)
- *
- * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
- * @return			HomeDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
- *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
- */
-wchar_t *GetHomeDirW(HINSTANCE hInst)
-{
-	if (IsPortableMode()) {
-		return GetExeDirW(hInst);
-	}
-	else {
-		wchar_t *path;
-		wchar_t *ret = NULL;
-		_SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &path);
-		awcscats(&ret, path, L"\\teraterm5", NULL);
-		free(path);
-		CreateDirectoryW(ret, NULL);
-		return ret;
-	}
-}
-
-/*
- * Get log directory
- *		\x83\x8D\x83O\x95ۑ\xB6\x83t\x83H\x83\x8B\x83_\x8E擾
- *		ttypes.LogDirW \x82Ɠ\xAF\x88\xEA
- *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ
- *			ExeDirW\log
- *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82Ȃ\xA2\x8Fꍇ
- *			%LOCALAPPDATA%\teraterm5 (%USERPROFILE%\AppData\Local\teraterm5)
- *
- * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
- * @return			LogDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
- *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
- */
-wchar_t* GetLogDirW(HINSTANCE hInst)
-{
-	wchar_t *ret = NULL;
-	if (IsPortableMode()) {
-		wchar_t *ExeDirW = GetExeDirW(hInst);
-		awcscats(&ret, ExeDirW, L"\\log", NULL);
-		free(ExeDirW);
-	}
-	else {
-		wchar_t *path;
-		_SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, NULL, &path);
-		awcscats(&ret, path, L"\\teraterm5", NULL);
-		free(path);
-	}
-	CreateDirectoryW(ret, NULL);
-	return ret;
-}
-
-/*
  *	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_ GetExeDir()\x82Ŏ擾\x82ł\xAB\x82\xE9
@@ -1415,37 +1298,6 @@
 	return dest_top;
 }
 
-/**
- *	\x83v\x83\x8D\x83O\x83\x89\x83\x80\x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9
- *
- *	@param[in]	command		\x8E\xC0\x8Ds\x82\xB7\x82\xE9\x83R\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93
- *							CreateProcess() \x82ɂ\xBB\x82̂܂ܓn\x82\xB3\x82\xEA\x82\xE9
- * 	@retval		NO_ERROR	\x83G\x83\x89\x81[\x82Ȃ\xB5
- *	@retval		\x83G\x83\x89\x81[\x83R\x81[\x83h	(NO_ERROR\x88ȊO)
- *
- *	\x83V\x83\x93\x83v\x83\x8B\x82Ƀv\x83\x8D\x83O\x83\x89\x83\x80\x82\xF0\x8BN\x93\xAE\x82\xB7\x82邾\x82\xAF\x82̊֐\x94
- *		CreateProcess() \x82\xCD CloseHandle() \x82\xF0\x96Y\x82\xEA\x82ăn\x83\x93\x83h\x83\x8B\x83\x8A\x81[\x83N\x82\xF0\x8BN\x82\xB1\x82\xB5\x82₷\x82\xA2
- *		\x92P\x8F\x83\x82ȃv\x83\x8D\x83O\x83\x89\x83\x80\x8E\xC0\x8Ds\x82ł͂\xB1\x82̊֐\x94\x82\xF0\x8Eg\x97p\x82\xB7\x82\xE9\x82ƈ\xC0\x91S
- */
-DWORD TTWinExec(const wchar_t *command)
-{
-	STARTUPINFOW si = {};
-	PROCESS_INFORMATION pi = {};
-
-	GetStartupInfoW(&si);
-
-	BOOL r = CreateProcessW(NULL, (LPWSTR)command, NULL, NULL, FALSE, 0,
-							NULL, NULL, &si, &pi);
-	if (r == 0) {
-		// error
-		return GetLastError();
-	}
-
-	CloseHandle(pi.hThread);
-	CloseHandle(pi.hProcess);
-	return NO_ERROR;
-}
-
 DWORD TTWinExecA(const char *commandA)
 {
 	wchar_t *commandW = ToWcharA(commandA);

Added: trunk/teraterm/common/ttlib_static_dir.cpp
===================================================================
--- trunk/teraterm/common/ttlib_static_dir.cpp	                        (rev 0)
+++ trunk/teraterm/common/ttlib_static_dir.cpp	2022-03-08 15:07:17 UTC (rev 9796)
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2020- 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.
+ */
+
+/* ttlib_static_cpp \x82\xA9\x82番\x97\xA3 */
+/* \x83t\x83H\x83\x8B\x83_\x82Ɋւ\xB7\x82\xE9\x8A֐\x94\x81A*/
+/* cyglaunch\x82Ŏg\x82\xA4 TTWinExec() */
+
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+#if !defined(_CRTDBG_MAP_ALLOC)
+#define _CRTDBG_MAP_ALLOC
+#endif
+#include <stdlib.h>
+#include <crtdbg.h>
+#include <assert.h>
+#include <wchar.h>
+#include <shlobj.h>
+
+// compat_win \x82𗘗p\x82\xB7\x82\xE9
+//		cyglaunch \x82̒P\x93ƃr\x83\x8B\x83h\x82̂Ƃ\xAB\x81Acompatwin \x82\xF0\x8Eg\x97p\x82\xB9\x82\xB8\x83r\x83\x8B\x83h\x82\xB7\x82\xE9
+#if !defined(ENABLE_COMAPT_WIN)
+#define ENABLE_COMAPT_WIN	1
+#endif
+
+#include "asprintf.h"
+#include "win32helper.h"	// for hGetModuleFileNameW()
+#include "ttknownfolders.h"
+
+#if ENABLE_COMAPT_WIN
+#include "compat_win.h"
+#endif
+
+#include "ttlib_static_dir.h"
+
+// \x83|\x81[\x83^\x83u\x83\x8B\x94łƂ\xB5\x82ē\xAE\x8D삷\x82邩\x82\xF0\x8C\x88\x82߂\xE9\x83t\x83@\x83C\x83\x8B
+#define PORTABLE_FILENAME L"portable.ini"
+
+/**
+ *	AppData\x83t\x83H\x83\x8B\x83_\x82̎擾
+ *	\x8A‹\xAB\x95ϐ\x94 APPDATA \x82̃t\x83H\x83\x8B\x83_
+ *
+ *	@retval	AppData\x83t\x83H\x83\x8B\x83_
+ */
+#if ENABLE_COMAPT_WIN
+static wchar_t *GetAppdataDir(void)
+{
+	wchar_t *path;
+	_SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &path);
+	return path;
+}
+#else
+static wchar_t *GetAppdataDir(void)
+{
+#if _WIN32_WINNT > 0x0600
+	wchar_t *appdata;
+	SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, NULL, &appdata);
+	wchar_t *retval = _wcsdup(appdata);
+	CoTaskMemFree(appdata);
+	return retval;
+#else
+	LPITEMIDLIST pidl;
+	HRESULT r = SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl);
+	if (r == NOERROR) {
+		wchar_t appdata[MAX_PATH];
+		SHGetPathFromIDListW(pidl, appdata);
+		wchar_t *retval = wcsdup(appdata);
+		CoTaskMemFree(pidl);
+		return retval;
+	}
+	char *env = getenv("APPDATA");
+	if (env == NULL) {
+		// \x82\xE0\x82\xC1\x82ƌÂ\xA2 windows ?
+		abort();
+	}
+	wchar_t *appdata = ToWcharA(env);
+	return appdata;
+#endif
+}
+#endif
+
+/*
+ * Get Exe(exe,dll) directory
+ *	ttermpro.exe, \x83v\x83\x89\x83O\x83C\x83\x93\x82\xAA\x82\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_
+ *	ttypes.ExeDirW \x82Ɠ\xAF\x88\xEA
+ *	\x82\xE0\x82Ƃ\xCD GetHomeDirW() \x82\xBE\x82\xC1\x82\xBD
+ *
+ * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
+ * @return			ExeDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
+ *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
+ */
+wchar_t *GetExeDirW(HINSTANCE hInst)
+{
+	wchar_t *dir;
+	DWORD error = hGetModuleFileNameW(hInst, &dir);
+	if (error != NO_ERROR) {
+		// \x83p\x83X\x82̎擾\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x81B\x92v\x96\xBD\x93I\x81Aabort() \x82\xB7\x82\xE9\x81B
+		abort();
+	}
+	wchar_t *sep = wcsrchr(dir, L'\\');
+	*sep = 0;
+	return dir;
+}
+
+/**
+ *	\x83|\x81[\x83^\x83u\x83\x8B\x94łƂ\xB5\x82ē\xAE\x8D삷\x82邩
+ *
+ *	@retval		TRUE		\x83|\x81[\x83^\x83u\x83\x8B\x94\xC5
+ *	@retval		FALSE		\x92ʏ\xED\x83C\x83\x93\x83X\x83g\x81[\x83\x8B\x94\xC5
+ */
+BOOL IsPortableMode(void)
+{
+	static BOOL called = FALSE;
+	static BOOL ret_val = FALSE;
+	if (called == FALSE) {
+		called = TRUE;
+		wchar_t *exe_dir = GetExeDirW(NULL);
+		wchar_t *portable_ini = NULL;
+		awcscats(&portable_ini, exe_dir, L"\\", PORTABLE_FILENAME, NULL);
+		free(exe_dir);
+		DWORD r = GetFileAttributesW(portable_ini);
+		free(portable_ini);
+		if (r == INVALID_FILE_ATTRIBUTES) {
+			//\x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2
+			ret_val = FALSE;
+		}
+		else {
+			ret_val = TRUE;
+		}
+	}
+	return ret_val;
+}
+
+/*
+ * Get home directory
+ *		\x8Cl\x97p\x90ݒ\xE8\x83t\x83@\x83C\x83\x8B\x83t\x83H\x83\x8B\x83_\x8E擾
+ *		ttypes.HomeDirW \x82Ɠ\xAF\x88\xEA
+ *		TERATERM.INI \x82Ȃǂ\xAA\x82\xA8\x82\xA2\x82Ă\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_
+ *		ttermpro.exe \x82\xAA\x82\xA0\x82\xE9\x83t\x83H\x83\x8B\x83_\x82\xCD GetHomeDirW() \x82ł͂Ȃ\xAD GetExeDirW() \x82Ŏ擾\x82ł\xAB\x82\xE9
+ *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ
+ *			ExeDirW
+ *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82Ȃ\xA2\x8Fꍇ
+ *			%APPDATA%\teraterm5 (%USERPROFILE%\AppData\Roaming\teraterm5)
+ *
+ * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
+ * @return			HomeDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
+ *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
+ */
+wchar_t *GetHomeDirW(HINSTANCE hInst)
+{
+	if (IsPortableMode()) {
+		return GetExeDirW(hInst);
+	}
+	else {
+		wchar_t *path = GetAppdataDir();
+		wchar_t *ret = NULL;
+		awcscats(&ret, path, L"\\teraterm5", NULL);
+		free(path);
+		CreateDirectoryW(ret, NULL);
+		return ret;
+	}
+}
+
+/*
+ * Get log directory
+ *		\x83\x8D\x83O\x95ۑ\xB6\x83t\x83H\x83\x8B\x83_\x8E擾
+ *		ttypes.LogDirW \x82Ɠ\xAF\x88\xEA
+ *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ
+ *			ExeDirW\log
+ *		ExeDirW \x82\xC9 portable.ini \x82\xAA\x82Ȃ\xA2\x8Fꍇ
+ *			%LOCALAPPDATA%\teraterm5 (%USERPROFILE%\AppData\Local\teraterm5)
+ *
+ * @param[in]		hInst		WinMain()\x82\xCC HINSTANCE \x82܂\xBD\x82\xCD NULL
+ * @return			LogDir		\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
+ *								\x95\xB6\x8E\x9A\x97\xF1\x82̍Ō\xE3\x82Ƀp\x83X\x8B\xE6\x90؂\xE8('\')\x82͂‚\xA2\x82Ă\xA2\x82Ȃ\xA2
+ */
+wchar_t* GetLogDirW(HINSTANCE hInst)
+{
+	wchar_t *ret = NULL;
+	if (IsPortableMode()) {
+		wchar_t *ExeDirW = GetExeDirW(hInst);
+		awcscats(&ret, ExeDirW, L"\\log", NULL);
+		free(ExeDirW);
+	}
+	else {
+		wchar_t *path = GetAppdataDir();
+		awcscats(&ret, path, L"\\teraterm5", NULL);
+		free(path);
+	}
+	CreateDirectoryW(ret, NULL);
+	return ret;
+}
+
+/**
+ *	\x83v\x83\x8D\x83O\x83\x89\x83\x80\x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9
+ *
+ *	@param[in]	command		\x8E\xC0\x8Ds\x82\xB7\x82\xE9\x83R\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93
+ *							CreateProcess() \x82ɂ\xBB\x82̂܂ܓn\x82\xB3\x82\xEA\x82\xE9
+ * 	@retval		NO_ERROR	\x83G\x83\x89\x81[\x82Ȃ\xB5
+ *	@retval		\x83G\x83\x89\x81[\x83R\x81[\x83h	(NO_ERROR\x88ȊO)
+ *
+ *	\x83V\x83\x93\x83v\x83\x8B\x82Ƀv\x83\x8D\x83O\x83\x89\x83\x80\x82\xF0\x8BN\x93\xAE\x82\xB7\x82邾\x82\xAF\x82̊֐\x94
+ *		CreateProcess() \x82\xCD CloseHandle() \x82\xF0\x96Y\x82\xEA\x82ăn\x83\x93\x83h\x83\x8B\x83\x8A\x81[\x83N\x82\xF0\x8BN\x82\xB1\x82\xB5\x82₷\x82\xA2
+ *		\x92P\x8F\x83\x82ȃv\x83\x8D\x83O\x83\x89\x83\x80\x8E\xC0\x8Ds\x82ł͂\xB1\x82̊֐\x94\x82\xF0\x8Eg\x97p\x82\xB7\x82\xE9\x82ƈ\xC0\x91S
+ */
+DWORD TTWinExec(const wchar_t *command)
+{
+	STARTUPINFOW si = {};
+	PROCESS_INFORMATION pi = {};
+
+	GetStartupInfoW(&si);
+
+	BOOL r = CreateProcessW(NULL, (LPWSTR)command, NULL, NULL, FALSE, 0,
+							NULL, NULL, &si, &pi);
+	if (r == 0) {
+		// error
+		return GetLastError();
+	}
+
+	CloseHandle(pi.hThread);
+	CloseHandle(pi.hProcess);
+	return NO_ERROR;
+}

Added: trunk/teraterm/common/ttlib_static_dir.h
===================================================================
--- trunk/teraterm/common/ttlib_static_dir.h	                        (rev 0)
+++ trunk/teraterm/common/ttlib_static_dir.h	2022-03-08 15:07:17 UTC (rev 9796)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 1994-1998 T. Teranishi
+ * (C) 2006- 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
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+wchar_t *GetExeDirW(HINSTANCE hInst);
+BOOL IsPortableMode(void);
+wchar_t *GetHomeDirW(HINSTANCE hInst);
+wchar_t* GetLogDirW(HINSTANCE hInst);
+DWORD TTWinExec(const wchar_t *command);
+
+#ifdef __cplusplus
+}
+#endif


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