Revision: 9016 https://osdn.net/projects/ttssh2/scm/svn/commits/9016 Author: zmatsuo Date: 2020-11-02 00:40:32 +0900 (Mon, 02 Nov 2020) Log Message: ----------- ファイル選択ダイアログを Unicode 化 - 通信プロトコルの各モジュール内のファイル名のエンコードはUTF-8 - ファイル名をダイアログに表示するときは SetDlgProtoFileName() を使用する - ファイル名を扱う関数は UTF-8 で扱う - GetRecievePath() - GetNextFname() - SetDlgProtoFileName() - 各プロトコルでファイルを送信するときのファイル名はwchar_t型に変更 filesys.h - マクロからのファイル名指定も Unicode 対応となった Modified Paths: -------------- branches/proto_unicode/teraterm/teraterm/filesys.h branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp branches/proto_unicode/teraterm/teraterm/filesys_proto.h branches/proto_unicode/teraterm/teraterm/ttdde.c branches/proto_unicode/teraterm/ttpfile/ymodem.c branches/proto_unicode/teraterm/ttpfile/zmodem.c -------------- next part -------------- Modified: branches/proto_unicode/teraterm/teraterm/filesys.h =================================================================== --- branches/proto_unicode/teraterm/teraterm/filesys.h 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/teraterm/filesys.h 2020-11-01 15:40:32 UTC (rev 9016) @@ -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: branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp =================================================================== --- branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/teraterm/filesys_proto.cpp 2020-11-01 15:40:32 UTC (rev 9016) @@ -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: branches/proto_unicode/teraterm/teraterm/filesys_proto.h =================================================================== --- branches/proto_unicode/teraterm/teraterm/filesys_proto.h 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/teraterm/filesys_proto.h 2020-11-01 15:40:32 UTC (rev 9016) @@ -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: branches/proto_unicode/teraterm/teraterm/ttdde.c =================================================================== --- branches/proto_unicode/teraterm/teraterm/ttdde.c 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/teraterm/ttdde.c 2020-11-01 15:40:32 UTC (rev 9016) @@ -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: branches/proto_unicode/teraterm/ttpfile/ymodem.c =================================================================== --- branches/proto_unicode/teraterm/ttpfile/ymodem.c 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/ttpfile/ymodem.c 2020-11-01 15:40:32 UTC (rev 9016) @@ -673,7 +673,7 @@ } } - SetDlgItemText(fv->HWin, IDC_PROTOFNAME, name); + fv->SetDlgProtoFileName(fv, name); yv->SendFileInfo = 1; Modified: branches/proto_unicode/teraterm/ttpfile/zmodem.c =================================================================== --- branches/proto_unicode/teraterm/ttpfile/zmodem.c 2020-11-01 15:40:16 UTC (rev 9015) +++ branches/proto_unicode/teraterm/ttpfile/zmodem.c 2020-11-01 15:40:32 UTC (rev 9016) @@ -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);