[Ttssh2-commit] [9101] ファイル選択ダイアログを Unicode 化

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 12月 20日 (日) 21:15:44 JST


Revision: 9101
          https://osdn.net/projects/ttssh2/scm/svn/commits/9101
Author:   zmatsuo
Date:     2020-12-20 21:15:44 +0900 (Sun, 20 Dec 2020)
Log Message:
-----------
ファイル選択ダイアログを Unicode 化

- 通信プロトコルの各モジュール内のファイル名のエンコードはUTF-8
  - ファイル名をダイアログに表示するときは SetDlgProtoFileName() を使用する
- ファイル名を扱う関数は UTF-8 で扱う
  - GetRecievePath()
  - GetNextFname()
  - SetDlgProtoFileName()
- 各プロトコルでファイルを送信するときのファイル名はwchar_t型に変更 filesys.h
  - マクロからのファイル名指定も Unicode 対応となった

Modified Paths:
--------------
    trunk/teraterm/teraterm/filesys.h
    trunk/teraterm/teraterm/filesys_proto.cpp
    trunk/teraterm/teraterm/filesys_proto.h
    trunk/teraterm/teraterm/ttdde.c
    trunk/teraterm/ttpfile/ymodem.c
    trunk/teraterm/ttpfile/zmodem.c

-------------- next part --------------
Modified: trunk/teraterm/teraterm/filesys.h
===================================================================
--- trunk/teraterm/teraterm/filesys.h	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/teraterm/filesys.h	2020-12-20 12:15:44 UTC (rev 9101)
@@ -46,20 +46,20 @@
 int ProtoDlgParse(void);
 void ProtoDlgTimeOut(void);
 void ProtoDlgCancel(void);
-BOOL KermitStartSend(const char *filename);
-BOOL KermitGet(const char *filename);
+BOOL KermitStartSend(const wchar_t *filename);
+BOOL KermitGet(const wchar_t *filename);
 BOOL KermitStartRecive(BOOL macro);
 BOOL KermitFinish(BOOL macro);
-BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt);
-BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt);
+BOOL XMODEMStartReceive(const wchar_t *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt);
+BOOL XMODEMStartSend(const wchar_t *fiename, WORD ParamXmodemOpt);
 BOOL YMODEMStartReceive(BOOL macro);
-BOOL YMODEMStartSend(const char *fiename);
+BOOL YMODEMStartSend(const wchar_t *fiename);
 BOOL ZMODEMStartReceive(BOOL macro, BOOL autostart);
-BOOL ZMODEMStartSend(const char *fiename, WORD ParamBinaryFlag, BOOL autostart);
-BOOL BPStartSend(const char *filename);
+BOOL ZMODEMStartSend(const wchar_t *fiename, WORD ParamBinaryFlag, BOOL autostart);
+BOOL BPStartSend(const wchar_t *filename);
 BOOL BPStartReceive(BOOL macro, BOOL autostart);
 BOOL QVStartReceive(BOOL macro);
-BOOL QVStartSend(const char *filename);
+BOOL QVStartSend(const wchar_t *filename);
 
 #ifdef __cplusplus
 }

Modified: trunk/teraterm/teraterm/filesys_proto.cpp
===================================================================
--- trunk/teraterm/teraterm/filesys_proto.cpp	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/teraterm/filesys_proto.cpp	2020-12-20 12:15:44 UTC (rev 9101)
@@ -31,6 +31,9 @@
 #include <windows.h>
 #include <htmlhelp.h>
 #include <assert.h>
+#include <stdlib.h>
+#define _CRTDBG_MAP_ALLOC
+#include <crtdbg.h>
 
 #include "teraterm.h"
 #include "tttypes.h"
@@ -125,19 +128,23 @@
 	SetDlgItemText(fv->HWin, IDC_PROTOPROT, text);
 }
 
-static void _SetDlgProtoFileName(struct FileVarProto *fv, const char *text)
+static void _SetDlgProtoFileName(struct FileVarProto *fv, const char *filename)
 {
+	if (filename == NULL) {
+		SetDlgItemTextA(fv->HWin, IDC_PROTOFNAME, "");
+		return;
+	}
 	// \x83t\x83@\x83C\x83\x8B\x96\xBC(\x8DŌ\xE3\x82̃p\x83X\x83Z\x83p\x83\x8C\x81[\x83^\x82\xA9\x82\xE7\x8C\xE3\x82\xEB\x82\xF0\x95\\x8E\xA6)
-	const char *s = text;
-	const char *p = strrchr(text, '\\');
+	const char *s = filename;
+	const char *p = strrchr(filename, '\\');
 	if (p == NULL) {
-		p = strrchr(text, '/');
+		p = strrchr(filename, '/');
 	}
 	if (p != NULL) {
 		s = p + 1;
 	}
 	assert(fv->HWin != NULL);
-	SetDlgItemText(fv->HWin, IDC_PROTOFNAME, s);
+	_SetDlgItemTextW(fv->HWin, IDC_PROTOFNAME, wc::fromUtf8(s));
 }
 
 static void _InitDlgProgress(struct FileVarProto *fv, int *CurProgStat)
@@ -148,20 +155,20 @@
 /**
  *	\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x8E擾
  *
- *	@return		\x83t\x83@\x83C\x83\x8B\x96\xBC
+ *	@return		\x83t\x83@\x83C\x83\x8B\x96\xBC UTF-8
  *				NULL\x82̂Ƃ\xAB\x8E\x9F\x82̃t\x83@\x83C\x83\x8B\x82͂Ȃ\xA2
  *				\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
  */
 static char *GetNextFname(PFileVarProto fv)
 {
-	char *f = fv->FileNames[fv->FNCount];
+	wchar_t *f = fv->FileNames[fv->FNCount];
 	if (f == NULL) {
 		/* no more file name */
 		return NULL;
 	}
 	fv->FNCount++;
-	f = _strdup(f);
-	return f;
+	char *u8 = ToU8W(f);
+	return u8;
 }
 
 /**
@@ -172,7 +179,7 @@
  */
 static char *GetRecievePath(struct FileVarProto *fv)
 {
-	return _strdup(fv->RecievePath);
+	return ToU8W(fv->RecievePath);
 }
 
 static void FTSetTimeOut(PFileVarProto fv, int T)
@@ -188,7 +195,7 @@
 	wchar_t uimsg[MAX_UIMSG];
 	wchar_t caption[MAX_UIMSG];
 	wcsncpy_s(caption, _countof(caption), L"Tera Term: ", _TRUNCATE);
-	get_lang_msgW(key, uimsg, sizeof(uimsg), default_caption, UILanguageFile);
+	get_lang_msgW(key, uimsg, _countof(uimsg), default_caption, UILanguageFile);
 	wcsncat_s(caption, _countof(caption), uimsg, _TRUNCATE);
 	free((void *)fv->DlgCaption);
 	fv->DlgCaption = _wcsdup(caption);
@@ -205,10 +212,10 @@
 	memset(fv, 0, sizeof(*fv));
 
 	// \x8E\xF3\x90M\x83t\x83H\x83\x8B\x83_
-	char FileDirExpanded[MAX_PATH];
-	ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, _countof(FileDirExpanded));
-	AppendSlash(FileDirExpanded, _countof(FileDirExpanded));
-	fv->RecievePath = _strdup(FileDirExpanded);
+	wchar_t FileDirExpanded[MAX_PATH];
+	_ExpandEnvironmentStringsW((wc)ts.FileDir, FileDirExpanded, _countof(FileDirExpanded));
+	AppendSlashW(FileDirExpanded, _countof(FileDirExpanded));
+	fv->RecievePath = _wcsdup(FileDirExpanded);
 
 	fv->FileOpen = FALSE;
 	fv->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
@@ -401,8 +408,6 @@
 	CenterWindow(hWndDlgRoot, GetParent(hWndDlgRoot));
 }
 
-static HFONT DlgXoptFont;
-
 /* Hook function for XMODEM file name dialog box */
 static UINT_PTR CALLBACK XFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
 {
@@ -413,7 +418,7 @@
 		{ IDC_XOPT1K, "DLG_XOPT_1K" },
 		{ IDC_XOPTBIN, "DLG_XOPT_BINARY" },
 	};
-	LPOPENFILENAME ofn;
+	LPOPENFILENAMEW ofn;
 	WORD Hi, Lo;
 	LPLONG pl;
 	LPOFNOTIFY notify;
@@ -420,10 +425,11 @@
 	LOGFONT logfont;
 	HFONT font;
 	const char *UILanguageFile = ts.UILanguageFile;
+	static HFONT DlgXoptFont;
 
 	switch (Message) {
 	case WM_INITDIALOG:
-		ofn = (LPOPENFILENAME)lParam;
+		ofn = (LPOPENFILENAMEW)lParam;
 		pl = (LPLONG)ofn->lCustData;
 		SetWindowLongPtr(Dialog, DWLP_USER, (LONG_PTR)pl);
 
@@ -571,38 +577,29 @@
 	return filename;
 }
 
-static char *GetCommonDialogDefaultFilenameA(const char *path)
+wchar_t **MakeStrArrayFromArray(wchar_t **strs)
 {
-	wchar_t *pathW = ToWcharA(path);
-	wchar_t *fileW = GetCommonDialogDefaultFilenameW(pathW);
-	char *fileA = ToCharW(fileW);
-	free(pathW);
-	free(fileW);
-	return fileA;
-}
-
-char **MakeStrArrayFromArray(char **strs)
-{
 	// \x90\x94\x82𐔂\xA6\x82\xE9
 	size_t strs_count = 0;
 	size_t strs_len = 0;
 	while(1) {
-		const char *f = strs[strs_count];
+		const wchar_t *f = strs[strs_count];
 		if (f == NULL) {
 			break;
 		}
 		strs_count++;
-		size_t len = strlen(f) + 1;	// len = 1 when "\0"
+		size_t len = wcslen(f) + 1;	// len = 1 when "\0"
 		strs_len += len;
 	}
 
 	// 1\x97̈\xE6\x82ɕۑ\xB6
 	size_t ptrs_len = sizeof(char *) * (strs_count + 1);
-	char *pool = (char *)malloc(ptrs_len + strs_len);
-	char **ptrs = (char **)pool;
-	char *strpool = pool + ptrs_len;
+	char *pool = (char *)malloc(ptrs_len + strs_len * sizeof(wchar_t));
+	wchar_t **ptrs = (wchar_t **)pool;
+	wchar_t *strpool = (wchar_t *)(pool + ptrs_len);
 	for (int i = 0 ; i < strs_count; i++) {
-		size_t len = strlen(strs[i]) + 1;
+		size_t len = wcslen(strs[i]) + 1;
+		len = len * sizeof(wchar_t);
 		memcpy(strpool, strs[i], len);
 		ptrs[i] = strpool;
 		strpool += len;
@@ -611,25 +608,25 @@
 	return ptrs;
 }
 
-char **MakeStrArrayFromStr(const char *str)
+wchar_t **MakeStrArrayFromStr(const wchar_t *str)
 {
-	const char *strs[2];
+	const wchar_t *strs[2];
 	strs[0] = str;
 	strs[1] = NULL;
-	char **ret = MakeStrArrayFromArray((char **)strs);
+	wchar_t **ret = MakeStrArrayFromArray((wchar_t **)strs);
 	return ret;
 }
 
-char **MakeFileArrayMultiSelect(const char *lpstrFile)
+wchar_t **MakeFileArrayMultiSelect(const wchar_t *lpstrFile)
 {
 	// \x90\x94\x82𐔂\xA6\x82\xE9
 	size_t file_count = 0;
-	const char *p = lpstrFile;
-	const char *path = p;
-	size_t len = strlen(p);
+	const wchar_t *p = lpstrFile;
+	const wchar_t *path = p;
+	size_t len = wcslen(p);
 	p += len + 1;
 	while(1) {
-		len = strlen(p);
+		len = wcslen(p);
 		if (len == 0) {
 			break;
 		}
@@ -643,20 +640,20 @@
 	}
 
 	// \x83p\x83X + \x83t\x83@\x83C\x83\x8B\x96\xBC \x88ꗗ\x8D쐬
-	size_t ptr_len = sizeof(char *) * (file_count + 1);
-	char **filenames = (char **)malloc(ptr_len);
-	len = strlen(path);
+	size_t ptr_len = sizeof(wchar_t *) * (file_count + 1);
+	wchar_t **filenames = (wchar_t **)malloc(ptr_len);
+	len = wcslen(path);
 	p = path + (len + 1);
 	size_t filelen_sum = 0;
 	for (int i = 0 ; i < file_count; i++) {
-		size_t filelen = asprintf(&filenames[i], "%s\\%s", path, p);
+		size_t filelen = aswprintf(&filenames[i], L"%s\\%s", path, p);
 		filelen_sum += filelen + 1;
-		len = strlen(p);
+		len = wcslen(p);
 		p += len + 1;
 	}
 	filenames[file_count] = NULL;
 
-	char **ret = MakeStrArrayFromArray(filenames);
+	wchar_t **ret = MakeStrArrayFromArray(filenames);
 
 	for (int i = 0 ; i < file_count; i++) {
 		free(filenames[i]);
@@ -665,25 +662,25 @@
 	return ret;
 }
 
-static char **_GetXFname(HWND HWin, BOOL Receive, const wchar_t *caption, LPLONG Option)
+static wchar_t **_GetXFname(HWND HWin, BOOL Receive, const wchar_t *caption, LPLONG Option)
 {
-	char FileDirExpanded[MAX_PATH];
-	ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
-	PCHAR CurDir = FileDirExpanded;
+	wchar_t FileDirExpanded[MAX_PATH];
+	_ExpandEnvironmentStringsW((wc)ts.FileDir, FileDirExpanded, _countof(FileDirExpanded));
+	wchar_t *CurDir = FileDirExpanded;
 
-	char *FNFilter = GetCommonDialogFilterA(!Receive ? ts.FileSendFilter : NULL, ts.UILanguageFile);
+	wchar_t *FNFilter = GetCommonDialogFilterW(!Receive ? ts.FileSendFilter : NULL, ts.UILanguageFile);
 
-	char FullName[MAX_PATH];
+	wchar_t FullName[MAX_PATH];
 	FullName[0] = 0;
 	if (!Receive) {
-		char *default_filename = GetCommonDialogDefaultFilenameA(CurDir);
+		wchar_t *default_filename = GetCommonDialogDefaultFilenameW(CurDir);
 		if (default_filename != NULL) {
-			strncpy_s(FullName, _countof(FullName), default_filename, _TRUNCATE);
+			wcsncpy_s(FullName, _countof(FullName), default_filename, _TRUNCATE);
 			free(default_filename);
 		}
 	}
 
-	OPENFILENAME ofn = {};
+	OPENFILENAMEW ofn = {};
 	ofn.lStructSize = get_OPENFILENAME_SIZE();
 	ofn.hwndOwner   = HWin;
 	ofn.lpstrFilter = FNFilter;
@@ -703,9 +700,9 @@
 	ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING;
 	ofn.Flags |= OFN_SHOWHELP;
 	ofn.lCustData = (LPARAM)&opt;
-	ofn.lpstrTitle = ToCharW(caption);
+	ofn.lpstrTitle = caption;
 	ofn.lpfnHook = XFnHook;
-	ofn.lpTemplateName = MAKEINTRESOURCE(IDD_XOPT);
+	ofn.lpTemplateName = MAKEINTRESOURCEW(IDD_XOPT);
 	ofn.hInstance = hInst;
 
 	/* save current dir */
@@ -714,16 +711,15 @@
 	BOOL Ok;
 	if (!Receive)
 	{
-		Ok = GetOpenFileName(&ofn);
+		Ok = _GetOpenFileNameW(&ofn);
 	}
 	else {
-		Ok = GetSaveFileName(&ofn);
+		Ok = _GetSaveFileNameW(&ofn);
 	}
 	free(FNFilter);
-	free((void *)ofn.lpstrTitle);
 	_SetCurrentDirectoryW(TempDir);
 
-	char **ret = NULL;
+	wchar_t **ret = NULL;
 	if (Ok) {
 		if (Receive)
 			*Option = opt;
@@ -783,7 +779,7 @@
 		{ IDC_GETFNHELP, "BTN_HELP" },
 	};
 	PFileVarProto fv;
-	char TempFull[MAX_PATH];
+	wchar_t TempFull[MAX_PATH];
 	const char *UILanguageFile = ts.UILanguageFile;
 
 	switch (Message) {
@@ -799,15 +795,12 @@
 		switch (LOWORD(wParam)) {
 		case IDOK:
 			if (fv!=NULL) {
-				GetDlgItemText(Dialog, IDC_GETFN, TempFull, sizeof(TempFull));
-				if (strlen(TempFull)==0) {
+				_GetDlgItemTextW(Dialog, IDC_GETFN, TempFull, _countof(TempFull));
+				if (wcslen(TempFull)==0) {
 					fv->FileNames = NULL;
 					return TRUE;
 				}
-				int FnPos;
-				GetFileNamePos(TempFull, NULL, &FnPos);
-				FitFileName(&(TempFull[FnPos]),sizeof(TempFull) - FnPos, NULL);
-				fv->FileNames = MakeStrArrayFromStr(&(TempFull[FnPos]));
+				fv->FileNames = MakeStrArrayFromStr(TempFull);
 			}
 			EndDialog(Dialog, 1);
 			return TRUE;
@@ -834,8 +827,6 @@
 								  HWin, GetFnDlg, (LPARAM)fv);
 }
 
-static HFONT DlgFoptFont;
-
 static UINT_PTR CALLBACK TransFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
 {
 	static const DlgTextInfo text_info[] = {
@@ -842,16 +833,16 @@
 		{ IDC_FOPT, "DLG_FOPT" },
 		{ IDC_FOPTBIN, "DLG_FOPT_BINARY" },
 	};
-	LPOPENFILENAME ofn;
 	LPWORD pw;
 	LPOFNOTIFY notify;
 	LOGFONT logfont;
 	HFONT font;
-	const char *UILanguageFile = ts.UILanguageFile;
+	static HFONT DlgFoptFont;
 
 	switch (Message) {
-	case WM_INITDIALOG:
-		ofn = (LPOPENFILENAME)lParam;
+	case WM_INITDIALOG: {
+		const char *UILanguageFile = ts.UILanguageFile;
+		LPOPENFILENAMEW ofn = (LPOPENFILENAMEW)lParam;
 		pw = (LPWORD)ofn->lCustData;
 		SetWindowLongPtr(Dialog, DWLP_USER, (LONG_PTR)pw);
 
@@ -875,6 +866,7 @@
 		CenterCommonDialog(Dialog);
 
 		return TRUE;
+	}
 	case WM_COMMAND: // for old style dialog
 		switch (LOWORD(wParam)) {
 		case IDOK:
@@ -916,7 +908,7 @@
 #define GMF_Y  3     /* YMODEM Send */
 
 
-static char **_GetMultiFname(HWND hWnd, WORD FuncId, const wchar_t *caption, LPWORD Option)
+static wchar_t **_GetMultiFname(HWND hWnd, WORD FuncId, const wchar_t *caption, LPWORD Option)
 {
 #define FnStrMemSize 4096
 	wchar_t TempDir[MAX_PATH];
@@ -923,14 +915,14 @@
 	const char *FileSendFilter = ts.FileSendFilter;
 	const char *UILanguageFile = ts.UILanguageFile;
 
-	char FileDirExpanded[MAX_PATH];
-	ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
-	PCHAR CurDir = FileDirExpanded;
+	wchar_t FileDirExpanded[MAX_PATH];
+	_ExpandEnvironmentStringsW((wc)ts.FileDir, FileDirExpanded, _countof(FileDirExpanded));
+	wchar_t *CurDir = FileDirExpanded;
 
 	/* save current dir */
 	_GetCurrentDirectoryW(_countof(TempDir), TempDir);
 
-	char *FnStrMem = (char *)malloc(FnStrMemSize);
+	wchar_t *FnStrMem = (wchar_t *)malloc(FnStrMemSize * sizeof(wchar_t));
 	if (FnStrMem == NULL) {
 		MessageBeep(0);
 		return FALSE;
@@ -937,22 +929,22 @@
 	}
 	FnStrMem[0] = 0;
 
-	char *FNFilter = GetCommonDialogFilterA(FileSendFilter, UILanguageFile);
+	wchar_t *FNFilter = GetCommonDialogFilterW(FileSendFilter, UILanguageFile);
 
-	char *default_filename = GetCommonDialogDefaultFilenameA(CurDir);
+	wchar_t *default_filename = GetCommonDialogDefaultFilenameW(CurDir);
 	if (default_filename != NULL) {
-		strncpy_s(FnStrMem, FnStrMemSize / sizeof(char), default_filename, _TRUNCATE);
+		wcsncpy_s(FnStrMem, FnStrMemSize, default_filename, _TRUNCATE);
 		free(default_filename);
 	}
 
-	OPENFILENAME ofn = {};
+	OPENFILENAMEW ofn = {};
 	ofn.lStructSize = get_OPENFILENAME_SIZE();
 	ofn.hwndOwner   = hWnd;
 	ofn.lpstrFilter = FNFilter;
 	ofn.nFilterIndex = 1;
 	ofn.lpstrFile = FnStrMem;
-	ofn.nMaxFile = FnStrMemSize / sizeof(char);
-	ofn.lpstrTitle= ToCharW(caption);
+	ofn.nMaxFile = FnStrMemSize;
+	ofn.lpstrTitle= caption;
 	ofn.lpstrInitialDir = CurDir;
 	ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
 	ofn.Flags |= OFN_ALLOWMULTISELECT | OFN_EXPLORER;
@@ -962,7 +954,7 @@
 		ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING;
 		ofn.lCustData = (LPARAM)Option;
 		ofn.lpfnHook = TransFnHook;
-		ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FOPT);
+		ofn.lpTemplateName = MAKEINTRESOURCEW(IDD_FOPT);
 	} else if (FuncId==GMF_Y) {
 		// TODO: YMODEM
 
@@ -970,11 +962,10 @@
 
 	ofn.hInstance = hInst;
 
-	BOOL Ok = GetOpenFileName(&ofn);
+	BOOL Ok = _GetOpenFileNameW(&ofn);
 	free(FNFilter);
-	free((void *)ofn.lpstrTitle);
 
-	char **ret = NULL;
+	wchar_t **ret = NULL;
 	if (Ok) {
 		// multiple selection
 		ret = MakeFileArrayMultiSelect(FnStrMem);
@@ -1006,7 +997,7 @@
  *
  *	@param[in]	filename			\x8E\xF3\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC(NULL\x82̂Ƃ\xAB\x81A\x83_\x83C\x83A\x83\x8D\x83O\x82őI\x91\xF0\x82\xB7\x82\xE9)
  */
-BOOL KermitStartSend(const char *filename)
+BOOL KermitStartSend(const wchar_t *filename)
 {
 	if (FileVar !=NULL)
 		return FALSE;
@@ -1020,7 +1011,7 @@
 
 	if (filename == NULL) {
 		WORD w = 0;
-		char **filenames = _GetMultiFname(fv->HMainWin, GMF_KERMIT, fv->DlgCaption, &w);
+		wchar_t **filenames = _GetMultiFname(fv->HMainWin, GMF_KERMIT, fv->DlgCaption, &w);
 		if (filenames == NULL) {
 			FreeFileVar_(&FileVar);
 			return FALSE;
@@ -1039,7 +1030,7 @@
 /**
  *	Kermit \x8E\xF3\x90M
  */
-BOOL KermitGet(const char *filename)
+BOOL KermitGet(const wchar_t *filename)
 {
 	if (FileVar !=NULL)
 		return FALSE;
@@ -1121,7 +1112,7 @@
  *	@param[in]	ParamBinaryFlag
  *	@param[in]	ParamXmodemOpt
  */
-BOOL XMODEMStartReceive(const char *filename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
+BOOL XMODEMStartReceive(const wchar_t *filename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
 {
 	if (FileVar !=NULL)
 		return FALSE;
@@ -1135,7 +1126,7 @@
 
 	if (filename == NULL) {
 		LONG Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
-		char **filenames = _GetXFname(HVTWin, TRUE, fv->DlgCaption, &Option);
+		wchar_t **filenames = _GetXFname(HVTWin, TRUE, fv->DlgCaption, &Option);
 		if (filenames == NULL) {
 			FreeFileVar_(&FileVar);
 			return FALSE;
@@ -1207,7 +1198,7 @@
  *	@param[in]	filename			\x91\x97\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC(NULL\x82̂Ƃ\xAB\x81A\x83_\x83C\x83A\x83\x8D\x83O\x82őI\x91\xF0\x82\xB7\x82\xE9)
  *	@param[in]	ParamXmodemOpt
  */
-BOOL XMODEMStartSend(const char *filename, WORD ParamXmodemOpt)
+BOOL XMODEMStartSend(const wchar_t *filename, WORD ParamXmodemOpt)
 {
 	if (FileVar !=NULL)
 		return FALSE;
@@ -1221,7 +1212,7 @@
 
 	if (filename == NULL) {
 		LONG Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
-		char **filenames = _GetXFname(HVTWin, FALSE, fv->DlgCaption, &Option);
+		wchar_t **filenames = _GetXFname(HVTWin, FALSE, fv->DlgCaption, &Option);
 		if (filenames == NULL) {
 			FreeFileVar_(&FileVar);
 			return FALSE;
@@ -1333,7 +1324,7 @@
  *
  *	@param[in]	filename			\x91\x97\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC(NULL\x82̂Ƃ\xAB\x81A\x83_\x83C\x83A\x83\x8D\x83O\x82őI\x91\xF0\x82\xB7\x82\xE9)
  */
-BOOL YMODEMStartSend(const char *filename)
+BOOL YMODEMStartSend(const wchar_t *filename)
 {
 	if (FileVar != NULL) {
 		return FALSE;
@@ -1354,7 +1345,7 @@
 	WORD Opt = Yopt1K;
 	FileVar->OpId = OpYSend;
 	if (filename == NULL) {
-		char **filenames = _GetMultiFname(fv->HMainWin, GMF_Y, fv->DlgCaption, &Opt);
+		wchar_t **filenames = _GetMultiFname(fv->HMainWin, GMF_Y, fv->DlgCaption, &Opt);
 		if (filenames == NULL) {
 			ProtoEnd();
 			return FALSE;
@@ -1431,7 +1422,7 @@
  *	@param[in]	ParamBinaryFlag		binary mode
  *	@param[in]	autostart			TURE\x82̂Ƃ\xAB\x8E\xA9\x93\xAE\x83X\x83^\x81[\x83g
  */
-BOOL ZMODEMStartSend(const char *filename, WORD ParamBinaryFlag, BOOL autostart)
+BOOL ZMODEMStartSend(const wchar_t *filename, WORD ParamBinaryFlag, BOOL autostart)
 {
 	if (FileVar != NULL) {
 		return FALSE;
@@ -1452,7 +1443,7 @@
 	WORD Opt = ts.XmodemBin;
 	FileVar->OpId = OpZSend;
 	if (filename == NULL) {
-		char **filenames = _GetMultiFname(fv->HMainWin, GMF_Z, fv->DlgCaption, &Opt);
+		wchar_t **filenames = _GetMultiFname(fv->HMainWin, GMF_Z, fv->DlgCaption, &Opt);
 		if (filenames == NULL) {
 			if (mode == IdZAutoS) {
 				CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
@@ -1482,22 +1473,22 @@
 	return TRUE;
 }
 
-static char **_GetTransFname(HWND hWnd, const wchar_t *DlgCaption)
+static wchar_t **_GetTransFname(HWND hWnd, const wchar_t *DlgCaption)
 {
 	wchar_t TempDir[MAX_PATH];
-	char FileName[MAX_PATH];
+	wchar_t FileName[MAX_PATH];
 	const char *UILanguageFile = ts.UILanguageFile;
 
-	char FileDirExpanded[MAX_PATH];
-	ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
-	PCHAR CurDir = FileDirExpanded;
+	wchar_t FileDirExpanded[MAX_PATH];
+	_ExpandEnvironmentStringsW((wc)ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+	wchar_t *CurDir = FileDirExpanded;
 
 	/* save current dir */
 	_GetCurrentDirectoryW(_countof(TempDir), TempDir);
 
-	char *FNFilter = GetCommonDialogFilterA(ts.FileSendFilter, UILanguageFile);
+	wchar_t *FNFilter = GetCommonDialogFilterW(ts.FileSendFilter, UILanguageFile);
 
-	OPENFILENAME ofn = {};
+	OPENFILENAMEW ofn = {};
 	ofn.lStructSize = get_OPENFILENAME_SIZE();
 	ofn.hwndOwner   = hWnd;
 	ofn.lpstrFilter = FNFilter;
@@ -1506,14 +1497,13 @@
 	ofn.nMaxFile = _countof(FileName);
 	ofn.lpstrInitialDir = CurDir;
 	ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_SHOWHELP;
-	ofn.lpstrTitle = ToCharW(DlgCaption);
+	ofn.lpstrTitle = DlgCaption;
 	ofn.hInstance = hInst;
 
-	BOOL Ok = GetOpenFileName(&ofn);
+	BOOL Ok = _GetOpenFileNameW(&ofn);
 	free(FNFilter);
-	free((void *)ofn.lpstrTitle);
 
-	char **ret = NULL;
+	wchar_t **ret = NULL;
 	if (Ok) {
 		ret = MakeStrArrayFromStr(FileName);
 	}
@@ -1522,7 +1512,7 @@
 	return ret;
 }
 
-BOOL BPStartSend(const char *filename)
+BOOL BPStartSend(const wchar_t *filename)
 {
 	if (FileVar != NULL) {
 		return FALSE;
@@ -1540,7 +1530,7 @@
 		return FALSE;
 
 	if (filename == NULL) {
-		char **filenames = _GetTransFname(fv->HMainWin, FileVar->DlgCaption);
+		wchar_t **filenames = _GetTransFname(fv->HMainWin, FileVar->DlgCaption);
 		if (filenames == NULL) {
 			ProtoEnd();
 			return FALSE;
@@ -1636,7 +1626,7 @@
 	return TRUE;
 }
 
-BOOL QVStartSend(const char *filename)
+BOOL QVStartSend(const wchar_t *filename)
 {
 	if (FileVar != NULL) {
 		return FALSE;
@@ -1656,7 +1646,7 @@
 
 	if (filename == NULL) {
 		WORD Opt;
-		char **filenames = _GetMultiFname(fv->HMainWin, GMF_QV, fv->DlgCaption, &Opt);
+		wchar_t **filenames = _GetMultiFname(fv->HMainWin, GMF_QV, fv->DlgCaption, &Opt);
 		if (filenames == NULL) {
 			ProtoEnd();
 			return FALSE;

Modified: trunk/teraterm/teraterm/filesys_proto.h
===================================================================
--- trunk/teraterm/teraterm/filesys_proto.h	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/teraterm/filesys_proto.h	2020-12-20 12:15:44 UTC (rev 9101)
@@ -40,11 +40,11 @@
 
 	// \x91\x97\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC\x94z\x97\xF1
 	//	\x83t\x83\x8B\x83p\x83X\x82̃t\x83@\x83C\x83\x8B\x96\xBC\x94z\x97\xF1(\x88\xEA\x94ԍŌ\xE3\x82\xCDNULL)
-	char **FileNames;
+	wchar_t **FileNames;
 	int FNCount;		// \x91\x97\x90M\x92\x86\x83t\x83@\x83C\x83\x8B\x96\xBC\x94z\x97\xF1index(0...)
 
 	// \x8E\xF3\x90M
-	char *RecievePath;		// \x8E\xF3\x90M\x83t\x83H\x83\x8B\x83_(\x8FI\x92[\x82Ƀp\x83X\x83Z\x83p\x83\x8C\x81[\x83^'\\'\x82\xAA\x95t\x89\xC1\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9)
+	wchar_t *RecievePath;		// \x8E\xF3\x90M\x83t\x83H\x83\x8B\x83_(\x8FI\x92[\x82Ƀp\x83X\x83Z\x83p\x83\x8C\x81[\x83^'\\'\x82\xAA\x95t\x89\xC1\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9)
 
 	// \x81\xAAprotosys_proto.cpp\x93\xE0\x82̂ݎg\x97p
 

Modified: trunk/teraterm/teraterm/ttdde.c
===================================================================
--- trunk/teraterm/teraterm/ttdde.c	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/teraterm/ttdde.c	2020-12-20 12:15:44 UTC (rev 9101)
@@ -386,6 +386,8 @@
 	char Command[MaxStrLen + 1];
 	int i;
 	WORD w, c;
+	wchar_t *ParamFileNameW;
+	BOOL r;
 
 	memset(Command, 0, sizeof(Command));
 
@@ -433,7 +435,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdBPlusSend:
-		if (!BPStartSend(ParamFileName)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = BPStartSend(ParamFileNameW);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -522,7 +527,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdKmtGet:
-		if (KermitGet(ParamFileName)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = KermitGet(ParamFileNameW);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -529,7 +537,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdKmtSend:
-		if (KermitStartSend(ParamFileName)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = KermitStartSend(ParamFileNameW);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -598,7 +609,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdQVSend:
-		if (QVStartSend(ParamFileName)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = QVStartSend(ParamFileNameW);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -667,7 +681,10 @@
 		}
 		break;
 	case CmdXmodemRecv:
-		if (XMODEMStartSend(ParamFileName, ParamXmodemOpt)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = XMODEMStartSend(ParamFileNameW, ParamXmodemOpt);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -674,7 +691,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdXmodemSend:
-		if (XMODEMStartReceive(ParamFileName, ParamBinaryFlag, ParamXmodemOpt)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = XMODEMStartReceive(ParamFileNameW, ParamBinaryFlag, ParamXmodemOpt);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -688,7 +708,10 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdZmodemSend:
-		if (ZMODEMStartSend(ParamFileName, ParamBinaryFlag, FALSE)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = ZMODEMStartSend(ParamFileNameW, ParamBinaryFlag, FALSE);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
@@ -704,7 +727,9 @@
 			return DDE_FNOTPROCESSED;
 		break;
 	case CmdYmodemSend:
-		if (YMODEMStartSend(ParamFileName)) {
+		ParamFileNameW = ToWcharU8(ParamFileName);
+		r = YMODEMStartSend(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else

Modified: trunk/teraterm/ttpfile/ymodem.c
===================================================================
--- trunk/teraterm/ttpfile/ymodem.c	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/ttpfile/ymodem.c	2020-12-20 12:15:44 UTC (rev 9101)
@@ -673,7 +673,7 @@
 			}
 		}
 
-		SetDlgItemText(fv->HWin, IDC_PROTOFNAME, name);
+		fv->SetDlgProtoFileName(fv, name);
 
 		yv->SendFileInfo = 1;
 

Modified: trunk/teraterm/ttpfile/zmodem.c
===================================================================
--- trunk/teraterm/ttpfile/zmodem.c	2020-12-20 12:15:33 UTC (rev 9100)
+++ trunk/teraterm/ttpfile/zmodem.c	2020-12-20 12:15:44 UTC (rev 9101)
@@ -568,7 +568,7 @@
 		ZSendCancel(zv);
 		return;
 	}
-	SetDlgItemText(fv->HWin, IDC_PROTOFNAME, zv->FullName);
+	fv->SetDlgProtoFileName(fv, zv->FullName);
 
 	/* file name */
 	filename = file->GetSendFilename(file, zv->FullName, FALSE, TRUE, FALSE);


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