[Ttssh2-commit] [9052] filesys.cpp,h からプロトコル転送に関するソースを filesys_proto.cpp へ分離

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


Revision: 9052
          https://osdn.net/projects/ttssh2/scm/svn/commits/9052
Author:   zmatsuo
Date:     2020-12-20 21:06:06 +0900 (Sun, 20 Dec 2020)
Log Message:
-----------
filesys.cpp,h からプロトコル転送に関するソースを filesys_proto.cpp へ分離

Modified Paths:
--------------
    trunk/teraterm/teraterm/CMakeLists.txt
    trunk/teraterm/teraterm/filesys.cpp
    trunk/teraterm/teraterm/filesys.h
    trunk/teraterm/teraterm/ttermpro.v16.vcxproj
    trunk/teraterm/teraterm/ttermpro.v8.vcproj

Added Paths:
-----------
    trunk/teraterm/teraterm/filesys_proto.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/CMakeLists.txt
===================================================================
--- trunk/teraterm/teraterm/CMakeLists.txt	2020-12-20 12:05:50 UTC (rev 9051)
+++ trunk/teraterm/teraterm/CMakeLists.txt	2020-12-20 12:06:06 UTC (rev 9052)
@@ -32,6 +32,7 @@
   filesys_log.cpp
   filesys_log.rc
   filesys_log_res.h
+  filesys_proto.cpp
   font_pp.cpp
   font_pp.h
   font_pp.rc

Modified: trunk/teraterm/teraterm/filesys.cpp
===================================================================
--- trunk/teraterm/teraterm/filesys.cpp	2020-12-20 12:05:50 UTC (rev 9051)
+++ trunk/teraterm/teraterm/filesys.cpp	2020-12-20 12:06:06 UTC (rev 9052)
@@ -64,9 +64,9 @@
 #define FS_BRACKET_END   2
 
 PFileVar SendVar = NULL;
-PFileVar FileVar = NULL;
-static PCHAR ProtoVar = NULL;
-static int ProtoId;
+//PFileVar FileVar = NULL;
+//static PCHAR ProtoVar = NULL;
+//static int ProtoId;
 
 static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode;
 static BYTE FileByte;
@@ -85,19 +85,19 @@
 static char BracketStartStr[] = "\033[200~";
 static char BracketEndStr[] = "\033[201~";
 
-static BOOL FSend = FALSE;
+BOOL FSend = FALSE;
 
 static HMODULE HTTFILE = NULL;
 static int TTFILECount = 0;
 
 PGetSetupFname GetSetupFname;
-static PGetTransFname GetTransFname;
+PGetTransFname GetTransFname;
 PGetMultiFname GetMultiFname;
 PGetGetFname GetGetFname;
 PSetFileVar SetFileVar;
 PGetXFname GetXFname;
 PProtoInit ProtoInit;
-static PProtoParse ProtoParse;
+PProtoParse ProtoParse;
 PProtoTimeOutProc ProtoTimeOutProc;
 PProtoCancel ProtoCancel;
 PTTFILESetUILanguageFile TTFILESetUILanguageFile;
@@ -232,7 +232,7 @@
 }
 
 static PFileTransDlg SendDlg = NULL;
-static PProtoDlg PtDlg = NULL;
+//static PProtoDlg PtDlg = NULL;
 
 static BOOL OpenFTDlg(PFileVar fv)
 {
@@ -265,7 +265,7 @@
 	}
 }
 
-BOOL NewFileVar(PFileVar *fv)
+static BOOL NewFileVar(PFileVar *fv)
 {
 	if ((*fv)==NULL)
 	{
@@ -290,7 +290,7 @@
 	return ((*fv)!=NULL);
 }
 
-void FreeFileVar(PFileVar *fv)
+static void FreeFileVar(PFileVar *fv)
 {
 	if ((*fv)!=NULL)
 	{
@@ -614,6 +614,7 @@
 	FileTransEnd(OpSendFile);
 }
 
+#if 0
 static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
 {
 	int vsize;
@@ -1347,6 +1348,7 @@
 
 	return TRUE;
 }
+#endif
 
 BOOL IsSendVarNULL()
 {
@@ -1353,7 +1355,9 @@
 	return SendVar == NULL;
 }
 
+#if 0
 BOOL IsFileVarNULL()
 {
 	return FileVar == NULL;
 }
+#endif

Modified: trunk/teraterm/teraterm/filesys.h
===================================================================
--- trunk/teraterm/teraterm/filesys.h	2020-12-20 12:05:50 UTC (rev 9051)
+++ trunk/teraterm/teraterm/filesys.h	2020-12-20 12:06:06 UTC (rev 9052)
@@ -58,13 +58,13 @@
   (char *file);
 
 extern PGetSetupFname GetSetupFname;
-//extern PGetTransFname GetTransFname;
+extern PGetTransFname GetTransFname;
 extern PGetMultiFname GetMultiFname;
 extern PGetGetFname GetGetFname;
 extern PSetFileVar SetFileVar;
 extern PGetXFname GetXFname;
 extern PProtoInit ProtoInit;
-//extern PProtoParse ProtoParse;
+extern PProtoParse ProtoParse;
 extern PProtoTimeOutProc ProtoTimeOutProc;
 extern PProtoCancel ProtoCancel;
 extern PTTFILESetUILanguageFile TTFILESetUILanguageFile;

Copied: trunk/teraterm/teraterm/filesys_proto.cpp (from rev 9051, trunk/teraterm/teraterm/filesys.cpp)
===================================================================
--- trunk/teraterm/teraterm/filesys_proto.cpp	                        (rev 0)
+++ trunk/teraterm/teraterm/filesys_proto.cpp	2020-12-20 12:06:06 UTC (rev 9052)
@@ -0,0 +1,1374 @@
+/*
+ * Copyright (C) 1994-1998 T. Teranishi
+ * (C) 2005-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.
+ */
+
+/* TERATERM.EXE, file transfer routines */
+#include <stdio.h>
+#include <io.h>
+#include <process.h>
+#include <windows.h>
+#include <htmlhelp.h>
+#include <assert.h>
+
+#include "teraterm.h"
+#include "tttypes.h"
+#include "ttftypes.h"
+#include "ftdlg.h"
+#include "protodlg.h"
+#include "ttwinman.h"
+#include "commlib.h"
+#include "ttcommon.h"
+#include "ttdde.h"
+#include "ttlib.h"
+#include "dlglib.h"
+#include "vtterm.h"
+#include "win16api.h"
+#include "ftlib.h"
+#include "buffer.h"
+#include "helpid.h"
+#include "layer_for_unicode.h"
+#include "layer_for_unicode_crt.h"
+#include "codeconv.h"
+
+#include "filesys_log_res.h"
+
+#include "filesys.h"
+
+#if 0
+#define FS_BRACKET_NONE  0
+#define FS_BRACKET_START 1
+#define FS_BRACKET_END   2
+#endif
+
+//PFileVar SendVar = NULL;
+PFileVar FileVar = NULL;
+static PCHAR ProtoVar = NULL;
+static int ProtoId;
+
+#if 0
+static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode;
+static BYTE FileByte;
+
+#define FILE_SEND_BUF_SIZE  8192
+struct FileSendHandler {
+	CHAR buf[FILE_SEND_BUF_SIZE];
+	int pos;
+	int end;
+};
+static struct FileSendHandler FileSendHandler;
+static int FileDlgRefresh;
+
+static int FileBracketMode = FS_BRACKET_NONE;
+static int FileBracketPtr = 0;
+static char BracketStartStr[] = "\033[200~";
+static char BracketEndStr[] = "\033[201~";
+#endif
+
+extern BOOL FSend;
+
+#if 0
+static HMODULE HTTFILE = NULL;
+static int TTFILECount = 0;
+
+PGetSetupFname GetSetupFname;
+PGetTransFname GetTransFname;
+PGetMultiFname GetMultiFname;
+PGetGetFname GetGetFname;
+PSetFileVar SetFileVar;
+PGetXFname GetXFname;
+PProtoInit ProtoInit;
+PProtoParse ProtoParse;
+PProtoTimeOutProc ProtoTimeOutProc;
+PProtoCancel ProtoCancel;
+PTTFILESetUILanguageFile TTFILESetUILanguageFile;
+PTTFILESetFileSendFilter TTFILESetFileSendFilter;
+#endif
+
+#define IdGetSetupFname  1
+#define IdGetTransFname  2
+#define IdGetMultiFname  3
+#define IdGetGetFname	 4
+#define IdSetFileVar	 5
+#define IdGetXFname	 6
+
+#define IdProtoInit	 7
+#define IdProtoParse	 8
+#define IdProtoTimeOutProc 9
+#define IdProtoCancel	 10
+
+#define IdTTFILESetUILanguageFile 11
+#define IdTTFILESetFileSendFilter 12
+
+#if 0
+BOOL LoadTTFILE(void)
+{
+	BOOL Err;
+
+	if (HTTFILE != NULL)
+	{
+		TTFILECount++;
+		return TRUE;
+	}
+	else
+		TTFILECount = 0;
+
+	HTTFILE = LoadHomeDLL("TTPFILE.DLL");
+	if (HTTFILE == NULL)
+		return FALSE;
+
+	Err = FALSE;
+
+	GetSetupFname = (PGetSetupFname)GetProcAddress(HTTFILE,
+	                                               MAKEINTRESOURCE(IdGetSetupFname));
+	if (GetSetupFname==NULL)
+		Err = TRUE;
+
+	GetTransFname = (PGetTransFname)GetProcAddress(HTTFILE,
+	                                               MAKEINTRESOURCE(IdGetTransFname));
+	if (GetTransFname==NULL)
+		Err = TRUE;
+
+	GetMultiFname = (PGetMultiFname)GetProcAddress(HTTFILE,
+	                                               MAKEINTRESOURCE(IdGetMultiFname));
+	if (GetMultiFname==NULL)
+		Err = TRUE;
+
+	GetGetFname = (PGetGetFname)GetProcAddress(HTTFILE,
+	                                           MAKEINTRESOURCE(IdGetGetFname));
+	if (GetGetFname==NULL)
+		Err = TRUE;
+
+	SetFileVar = (PSetFileVar)GetProcAddress(HTTFILE,
+	                                         MAKEINTRESOURCE(IdSetFileVar));
+	if (SetFileVar==NULL)
+		Err = TRUE;
+
+	GetXFname = (PGetXFname)GetProcAddress(HTTFILE,
+	                                       MAKEINTRESOURCE(IdGetXFname));
+	if (GetXFname==NULL)
+		Err = TRUE;
+
+	ProtoInit = (PProtoInit)GetProcAddress(HTTFILE,
+	                                       MAKEINTRESOURCE(IdProtoInit));
+	if (ProtoInit==NULL)
+		Err = TRUE;
+
+	ProtoParse = (PProtoParse)GetProcAddress(HTTFILE,
+	                                         MAKEINTRESOURCE(IdProtoParse));
+	if (ProtoParse==NULL)
+		Err = TRUE;
+
+	ProtoTimeOutProc = (PProtoTimeOutProc)GetProcAddress(HTTFILE,
+	                                                     MAKEINTRESOURCE(IdProtoTimeOutProc));
+	if (ProtoTimeOutProc==NULL)
+		Err = TRUE;
+
+	ProtoCancel = (PProtoCancel)GetProcAddress(HTTFILE,
+	                                           MAKEINTRESOURCE(IdProtoCancel));
+	if (ProtoCancel==NULL)
+		Err = TRUE;
+
+	TTFILESetUILanguageFile = (PTTFILESetUILanguageFile)GetProcAddress(HTTFILE,
+	                                                                   MAKEINTRESOURCE(IdTTFILESetUILanguageFile));
+	if (TTFILESetUILanguageFile==NULL) {
+		Err = TRUE;
+	}
+	else {
+		TTFILESetUILanguageFile(ts.UILanguageFile);
+	}
+
+	TTFILESetFileSendFilter = (PTTFILESetFileSendFilter)GetProcAddress(HTTFILE,
+	                                                                   MAKEINTRESOURCE(IdTTFILESetFileSendFilter));
+	if (TTFILESetFileSendFilter==NULL) {
+		Err = TRUE;
+	}
+	else {
+		TTFILESetFileSendFilter(ts.FileSendFilter);
+	}
+
+	if (Err)
+	{
+		FreeLibrary(HTTFILE);
+		HTTFILE = NULL;
+		return FALSE;
+	}
+	else {
+		TTFILECount = 1;
+		return TRUE;
+	}
+}
+
+BOOL FreeTTFILE(void)
+{
+	if (TTFILECount==0)
+		return FALSE;
+	TTFILECount--;
+	if (TTFILECount>0)
+		return TRUE;
+	if (HTTFILE!=NULL)
+	{
+		FreeLibrary(HTTFILE);
+		HTTFILE = NULL;
+	}
+	return TRUE;
+}
+#endif
+
+//static PFileTransDlg SendDlg = NULL;
+static PProtoDlg PtDlg = NULL;
+
+#if 0
+static BOOL OpenFTDlg(PFileVar fv)
+{
+	PFileTransDlg FTDlg;
+
+	FTDlg = new CFileTransDlg();
+
+	fv->StartTime = 0;
+	fv->ProgStat = 0;
+	cv.FilePause &= ~fv->OpId;
+
+	if (FTDlg!=NULL)
+	{
+		FTDlg->Create(hInst, HVTWin, fv, &cv, &ts);
+		FTDlg->RefreshNum(fv);
+	}
+
+	SendDlg = FTDlg; /* File send */
+
+	fv->StartTime = GetTickCount();
+
+	return (FTDlg!=NULL);
+}
+
+static void ShowFTDlg(WORD OpId)
+{
+	if (SendDlg != NULL) {
+		SendDlg->ShowWindow(SW_SHOWNORMAL);
+		SetForegroundWindow(SendDlg->GetSafeHwnd());
+	}
+}
+#endif
+
+static BOOL NewFileVar_(PFileVar *fv)
+{
+	if ((*fv)==NULL)
+	{
+		*fv = (PFileVar)malloc(sizeof(TFileVar));
+		if ((*fv)!=NULL)
+		{
+			char FileDirExpanded[MAX_PATH];
+			ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+			memset(*fv, 0, sizeof(TFileVar));
+			strncpy_s((*fv)->FullName, sizeof((*fv)->FullName), FileDirExpanded, _TRUNCATE);
+			AppendSlash((*fv)->FullName,sizeof((*fv)->FullName));
+			(*fv)->DirLen = strlen((*fv)->FullName);
+			(*fv)->FileOpen = FALSE;
+			(*fv)->OverWrite = ((ts.FTFlag & FT_RENAME) == 0);
+			(*fv)->HMainWin = HVTWin;
+			(*fv)->Success = FALSE;
+			(*fv)->NoMsg = FALSE;
+			(*fv)->HideDialog = FALSE;
+		}
+	}
+
+	return ((*fv)!=NULL);
+}
+
+static void FreeFileVar_(PFileVar *fv)
+{
+	if ((*fv)!=NULL)
+	{
+		if ((*fv)->FileOpen) CloseHandle((*fv)->FileHandle);
+		if ((*fv)->FnStrMemHandle != 0)
+		{
+			GlobalUnlock((*fv)->FnStrMemHandle);
+			GlobalFree((*fv)->FnStrMemHandle);
+		}
+		free(*fv);
+		*fv = NULL;
+	}
+}
+
+#if 0
+void FileSendStart(void)
+{
+	LONG Option = 0;
+
+	if (! cv.Ready || FSend) return;
+	if (cv.ProtoFlag)
+	{
+		FreeFileVar(&SendVar);
+		return;
+	}
+
+	if (! LoadTTFILE())
+		return;
+	if (! NewFileVar(&SendVar))
+	{
+		FreeTTFILE();
+		return;
+	}
+	SendVar->OpId = OpSendFile;
+
+	FSend = TRUE;
+
+	if (strlen(&(SendVar->FullName[SendVar->DirLen])) == 0) {
+		char FileDirExpanded[MAX_PATH];
+		ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+		if (ts.TransBin)
+			Option |= LOGDLG_BINARY;
+		SendVar->FullName[0] = 0;
+		if (! (*GetTransFname)(SendVar, FileDirExpanded, GTF_SEND, &Option)) {
+			FileTransEnd(OpSendFile);
+			return;
+		}
+		ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
+	}
+	else
+		(*SetFileVar)(SendVar);
+
+	SendVar->FileHandle = CreateFile(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
+	                                 OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
+	SendVar->FileOpen = (SendVar->FileHandle != INVALID_HANDLE_VALUE);
+	if (! SendVar->FileOpen)
+	{
+		FileTransEnd(OpSendFile);
+		return;
+	}
+	SendVar->ByteCount = 0;
+	SendVar->FileSize = GetFSize(SendVar->FullName);
+
+	TalkStatus = IdTalkFile;
+	FileRetrySend = FALSE;
+	FileRetryEcho = FALSE;
+	FileCRSend = FALSE;
+	FileReadEOF = FALSE;
+	FileSendHandler.pos = 0;
+	FileSendHandler.end = 0;
+	FileDlgRefresh = 0;
+
+	if (BracketedPasteMode()) {
+		FileBracketMode = FS_BRACKET_START;
+		FileBracketPtr = 0;
+		BinaryMode = TRUE;
+	}
+	else {
+		FileBracketMode = FS_BRACKET_NONE;
+		BinaryMode = ts.TransBin;
+	}
+
+	if (! OpenFTDlg(SendVar))
+		FileTransEnd(OpSendFile);
+}
+
+BOOL FileSendStart2(const char *filename, int binary)
+{
+	if (SendVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar(&SendVar)) {
+		return FALSE;
+	}
+
+	SendVar->DirLen = 0;
+	strncpy_s(SendVar->FullName, sizeof(SendVar->FullName), filename, _TRUNCATE);
+	ts.TransBin = binary;
+	SendVar->NoMsg = TRUE;
+	FileSendStart();
+
+	return TRUE;
+}
+
+void FileTransEnd(WORD OpId)
+/* OpId = 0: close Log and FileSend
+      OpLog: close Log
+ OpSendFile: close FileSend */
+{
+	if ((OpId==0) || (OpId==OpLog)) {
+		if (FLogIsOpend()) {
+			FLogClose();
+		}
+	}
+
+	if (((OpId==0) || (OpId==OpSendFile)) && FSend)
+	{
+		FSend = FALSE;
+		TalkStatus = IdTalkKeyb;
+		if (SendDlg!=NULL)
+		{
+			SendDlg->DestroyWindow();
+			SendDlg = NULL;
+		}
+		FreeFileVar(&SendVar);
+		FreeTTFILE();
+	}
+
+	EndDdeCmnd(0);
+}
+
+void FileTransPause(WORD OpId, BOOL Pause)
+{
+	if (Pause) {
+		cv.FilePause |= OpId;
+	}
+	else {
+		cv.FilePause &= ~OpId;
+	}
+}
+
+int FSOut1(BYTE b)
+{
+	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;
+}
+
+int FSEcho1(BYTE b)
+{
+	if (BinaryMode)
+		return CommBinaryEcho(&cv,(PCHAR)&b,1);
+	else
+		return CommTextEcho(&cv,(PCHAR)&b,1);
+}
+
+// \x88ȉ\xBA\x82̎\x9E\x82͂\xB1\x82\xBF\x82\xE7\x82̊֐\x94\x82\xF0\x8Eg\x82\xA4
+// - BinaryMode == true
+// - FileBracketMode == false
+// - cv.TelFlag == false
+// - ts.LocalEcho == 0
+static void FileSendBinayBoost(void)
+{
+	WORD c, fc;
+	LONG BCOld;
+	DWORD read_bytes;
+
+	if ((SendDlg == NULL) ||
+		((cv.FilePause & OpSendFile) != 0))
+		return;
+
+	BCOld = SendVar->ByteCount;
+
+	if (FileRetrySend)
+	{
+		c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
+			FileSendHandler.end - FileSendHandler.pos);
+		FileSendHandler.pos += c;
+		FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
+		if (FileRetrySend)
+			return;
+	}
+
+	do {
+		if (FileSendHandler.pos == FileSendHandler.end) {
+			ReadFile(SendVar->FileHandle, &(FileSendHandler.buf[0]), sizeof(FileSendHandler.buf), &read_bytes, NULL);
+			fc = LOWORD(read_bytes);
+			FileSendHandler.pos = 0;
+			FileSendHandler.end = fc;
+		} else {
+			fc = FileSendHandler.end - FileSendHandler.end;
+		}
+
+		if (fc != 0)
+		{
+			c = CommRawOut(&cv, &(FileSendHandler.buf[FileSendHandler.pos]),
+				FileSendHandler.end - FileSendHandler.pos);
+			FileSendHandler.pos += c;
+			FileRetrySend = (FileSendHandler.end != FileSendHandler.pos);
+			SendVar->ByteCount = SendVar->ByteCount + c;
+			if (FileRetrySend)
+			{
+				if (SendVar->ByteCount != BCOld)
+					SendDlg->RefreshNum(SendVar);
+				return;
+			}
+		}
+		FileDlgRefresh = SendVar->ByteCount;
+		SendDlg->RefreshNum(SendVar);
+		BCOld = SendVar->ByteCount;
+		if (fc != 0)
+			return;
+	} while (fc != 0);
+
+	FileTransEnd(OpSendFile);
+}
+
+void FileSend(void)
+{
+	WORD c, fc;
+	LONG BCOld;
+	DWORD read_bytes;
+
+	if (cv.PortType == IdSerial && ts.FileSendHighSpeedMode &&
+	    BinaryMode && !FileBracketMode && !cv.TelFlag &&
+	    (ts.LocalEcho == 0) && (ts.Baud >= 115200)) {
+		return FileSendBinayBoost();
+	}
+
+	if ((SendDlg==NULL) ||
+	    ((cv.FilePause & OpSendFile) !=0))
+		return;
+
+	BCOld = SendVar->ByteCount;
+
+	if (FileRetrySend)
+	{
+		FileRetryEcho = (ts.LocalEcho>0);
+		c = FSOut1(FileByte);
+		FileRetrySend = (c==0);
+		if (FileRetrySend)
+			return;
+	}
+
+	if (FileRetryEcho)
+	{
+		c = FSEcho1(FileByte);
+		FileRetryEcho = (c==0);
+		if (FileRetryEcho)
+			return;
+	}
+
+	do {
+		if (FileBracketMode == FS_BRACKET_START) {
+			FileByte = BracketStartStr[FileBracketPtr++];
+			fc = 1;
+
+			if (FileBracketPtr >= sizeof(BracketStartStr) - 1) {
+				FileBracketMode = FS_BRACKET_END;
+				FileBracketPtr = 0;
+				BinaryMode = ts.TransBin;
+			}
+		}
+		else if (! FileReadEOF) {
+			ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
+			fc = LOWORD(read_bytes);
+			SendVar->ByteCount = SendVar->ByteCount + fc;
+
+			if (FileCRSend && (fc==1) && (FileByte==0x0A)) {
+				ReadFile(SendVar->FileHandle, &FileByte, 1, &read_bytes, NULL);
+				fc = LOWORD(read_bytes);
+				SendVar->ByteCount = SendVar->ByteCount + fc;
+			}
+		}
+		else {
+			fc = 0;
+		}
+
+		if (fc == 0 && FileBracketMode == FS_BRACKET_END) {
+			FileReadEOF = TRUE;
+			FileByte = BracketEndStr[FileBracketPtr++];
+			fc = 1;
+			BinaryMode = TRUE;
+
+			if (FileBracketPtr >= sizeof(BracketEndStr) - 1) {
+				FileBracketMode = FS_BRACKET_NONE;
+				FileBracketPtr = 0;
+			}
+		}
+
+
+		if (fc!=0)
+		{
+			c = FSOut1(FileByte);
+			FileCRSend = (ts.TransBin==0) && (FileByte==0x0D);
+			FileRetrySend = (c==0);
+			if (FileRetrySend)
+			{
+				if (SendVar->ByteCount != BCOld)
+					SendDlg->RefreshNum(SendVar);
+				return;
+			}
+			if (ts.LocalEcho>0)
+			{
+				c = FSEcho1(FileByte);
+				FileRetryEcho = (c==0);
+				if (FileRetryEcho)
+					return;
+			}
+		}
+		if ((fc==0) || ((SendVar->ByteCount % 100 == 0) && (FileBracketPtr == 0))) {
+			SendDlg->RefreshNum(SendVar);
+			BCOld = SendVar->ByteCount;
+			if (fc!=0)
+				return;
+		}
+	} while (fc!=0);
+
+	FileTransEnd(OpSendFile);
+}
+#endif
+
+
+static BOOL OpenProtoDlg(PFileVar fv, int IdProto, int Mode, WORD Opt1, WORD Opt2)
+{
+	int vsize;
+	PProtoDlg pd;
+
+	ProtoId = IdProto;
+
+	switch (ProtoId) {
+		case PROTO_KMT:
+			vsize = sizeof(TKmtVar);
+			break;
+		case PROTO_XM:
+			vsize = sizeof(TXVar);
+			break;
+		case PROTO_YM:
+			vsize = sizeof(TYVar);
+			break;
+		case PROTO_ZM:
+			vsize = sizeof(TZVar);
+			break;
+		case PROTO_BP:
+			vsize = sizeof(TBPVar);
+			break;
+		case PROTO_QV:
+			vsize = sizeof(TQVVar);
+			break;
+		default:
+			vsize = 0;
+			assert(FALSE);
+			break;
+	}
+	ProtoVar = (PCHAR)malloc(vsize);
+	if (ProtoVar==NULL)
+		return FALSE;
+
+	switch (ProtoId) {
+		case PROTO_KMT:
+			((PKmtVar)ProtoVar)->KmtMode = Mode;
+			break;
+		case PROTO_XM:
+			((PXVar)ProtoVar)->XMode = Mode;
+			((PXVar)ProtoVar)->XOpt = Opt1;
+			((PXVar)ProtoVar)->TextFlag = 1 - (Opt2 & 1);
+			break;
+		case PROTO_YM:
+			((PYVar)ProtoVar)->YMode = Mode;
+			((PYVar)ProtoVar)->YOpt = Opt1;
+			break;
+		case PROTO_ZM:
+			((PZVar)ProtoVar)->BinFlag = (Opt1 & 1) != 0;
+			((PZVar)ProtoVar)->ZMode = Mode;
+			break;
+		case PROTO_BP:
+			((PBPVar)ProtoVar)->BPMode = Mode;
+			break;
+		case PROTO_QV:
+			((PQVVar)ProtoVar)->QVMode = Mode;
+			break;
+	}
+
+	pd = new CProtoDlg();
+	if (pd==NULL)
+	{
+		free(ProtoVar);
+		ProtoVar = NULL;
+		return FALSE;
+	}
+	CProtoDlgInfo info;
+	info.UILanguageFile = ts.UILanguageFile;
+	info.HMainWin = fv->HMainWin;
+	pd->Create(hInst, HVTWin, &info);
+	fv->HWin = pd->m_hWnd;
+
+	(*ProtoInit)(ProtoId,FileVar,ProtoVar,&cv,&ts);
+
+	PtDlg = pd;
+	return TRUE;
+}
+
+static void CloseProtoDlg(void)
+{
+	if (PtDlg!=NULL)
+	{
+		PtDlg->DestroyWindow();
+		PtDlg = NULL;
+
+		::KillTimer(FileVar->HMainWin,IdProtoTimer);
+		if ((ProtoId==PROTO_QV) &&
+		    (((PQVVar)ProtoVar)->QVMode==IdQVSend))
+			CommTextOut(&cv,"\015",1);
+		if (FileVar->LogFlag)
+			CloseHandle(FileVar->LogFile);
+		FileVar->LogFile = 0;
+		if (ProtoVar!=NULL)
+		{
+			free(ProtoVar);
+			ProtoVar = NULL;
+		}
+	}
+}
+
+static BOOL ProtoStart(void)
+{
+	if (cv.ProtoFlag)
+		return FALSE;
+	if (FSend)
+	{
+		FreeFileVar_(&FileVar);
+		return FALSE;
+	}
+
+	if (! LoadTTFILE())
+		return FALSE;
+	NewFileVar_(&FileVar);
+
+	if (FileVar==NULL)
+	{
+		FreeTTFILE();
+		return FALSE;
+	}
+	cv.ProtoFlag = TRUE;
+	return TRUE;
+}
+
+void ProtoEnd(void)
+{
+	if (! cv.ProtoFlag)
+		return;
+	cv.ProtoFlag = FALSE;
+
+	/* Enable transmit delay (serial port) */
+	cv.DelayFlag = TRUE;
+	TalkStatus = IdTalkKeyb;
+
+	CloseProtoDlg();
+
+	if ((FileVar!=NULL) && FileVar->Success)
+		EndDdeCmnd(1);
+	else
+		EndDdeCmnd(0);
+
+	FreeTTFILE();
+	FreeFileVar_(&FileVar);
+}
+
+/**
+ *	OnIdle()#teraterm.cpp\x82\xA9\x82\xE7\x83R\x81[\x83\x8B\x82\xB3\x82\xEA\x82\xE9
+ *		cv.ProtoFlag \x82\xAA 0 \x88ȊO\x82̂Ƃ\xAB
+ *	@retval		0		continue
+ *				1/2		ActiveWin(\x83O\x83\x8D\x81[\x83o\x83\x8B\x95ϐ\x94)\x82̒l(IdVT=1/IdTek=2)
+ *				\x92\x8D \x8D\xA1\x82̂Ƃ\xB1\x82\xEB\x8ÊĂ\xE7\x82\xEA\x82Ă\xA2\x82\xE9
+ */
+int ProtoDlgParse(void)
+{
+	int P;
+
+	P = ActiveWin;
+	if (PtDlg==NULL)
+		return P;
+
+	if ((*ProtoParse)(ProtoId,FileVar,ProtoVar,&cv))
+		P = 0; /* continue */
+	else {
+		CommSend(&cv);
+		ProtoEnd();
+	}
+	return P;
+}
+
+void ProtoDlgTimeOut(void)
+{
+	if (PtDlg!=NULL)
+		(*ProtoTimeOutProc)(ProtoId,FileVar,ProtoVar,&cv);
+}
+
+void ProtoDlgCancel(void)
+{
+	if ((PtDlg!=NULL) &&
+	    (*ProtoCancel)(ProtoId,FileVar,ProtoVar,&cv))
+		ProtoEnd();
+}
+
+void KermitStart(int mode)
+{
+	WORD w;
+
+	if (! ProtoStart())
+		return;
+
+	switch (mode) {
+		case IdKmtSend:
+			FileVar->OpId = OpKmtSend;
+			if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+			{
+				char FileDirExpanded[MAX_PATH];
+				ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+				if (!(*GetMultiFname)(FileVar, FileDirExpanded, GMF_KERMIT, &w) ||
+				    (FileVar->NumFname==0))
+				{
+					ProtoEnd();
+					return;
+				}
+			}
+			else
+				(*SetFileVar)(FileVar);
+			break;
+		case IdKmtReceive:
+			FileVar->OpId = OpKmtRcv;
+			break;
+		case IdKmtGet:
+			FileVar->OpId = OpKmtSend;
+			if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+			{
+				if (! (*GetGetFname)(FileVar->HMainWin,FileVar, &ts) ||
+				    (strlen(FileVar->FullName)==0))
+				{
+					ProtoEnd();
+					return;
+				}
+			}
+			else
+				(*SetFileVar)(FileVar);
+			break;
+		case IdKmtFinish:
+			FileVar->OpId = OpKmtFin;
+			break;
+		default:
+			ProtoEnd();
+			return;
+	}
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_KMT,mode,0,0))
+		ProtoEnd();
+}
+
+BOOL KermitStartSend(const char *filename)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	FileVar->NoMsg = TRUE;
+	KermitStart(IdKmtSend);
+
+	return TRUE;
+}
+
+BOOL KermitGet(const char *filename)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	FileVar->NoMsg = TRUE;
+	KermitStart(IdKmtGet);
+
+	return TRUE;
+}
+
+BOOL KermitStartRecive(void)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->NoMsg = TRUE;
+	KermitStart(IdKmtReceive);
+
+	return TRUE;
+}
+
+BOOL KermitFinish(void)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->NoMsg = TRUE;
+	KermitStart(IdKmtFinish);
+
+	return TRUE;
+}
+
+void XMODEMStart(int mode)
+{
+	LONG Option;
+	int tmp;
+
+	if (! ProtoStart())
+		return;
+
+	if (mode==IdXReceive)
+		FileVar->OpId = OpXRcv;
+	else
+		FileVar->OpId = OpXSend;
+
+	if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+	{
+		char FileDirExpanded[MAX_PATH];
+		ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+		Option = MAKELONG(ts.XmodemBin,ts.XmodemOpt);
+		if (! (*GetXFname)(FileVar->HMainWin,
+		                   mode==IdXReceive,&Option,FileVar,FileDirExpanded))
+		{
+			ProtoEnd();
+			return;
+		}
+		tmp = HIWORD(Option);
+		if (mode == IdXReceive) {
+			if (IsXoptCRC(tmp)) {
+				if (IsXopt1k(ts.XmodemOpt)) {
+					ts.XmodemOpt = Xopt1kCRC;
+				}
+				else {
+					ts.XmodemOpt = XoptCRC;
+				}
+			}
+			else {
+				if (IsXopt1k(ts.XmodemOpt)) {
+					ts.XmodemOpt = Xopt1kCksum;
+				}
+				else {
+					ts.XmodemOpt = XoptCheck;
+				}
+			}
+			ts.XmodemBin = LOWORD(Option);
+		}
+		else {
+			if (IsXopt1k(tmp)) {
+				if (IsXoptCRC(ts.XmodemOpt)) {
+					ts.XmodemOpt = Xopt1kCRC;
+				}
+				else {
+					ts.XmodemOpt = Xopt1kCksum;
+				}
+			}
+			else {
+				if (IsXoptCRC(ts.XmodemOpt)) {
+					ts.XmodemOpt = XoptCRC;
+				}
+				else {
+					ts.XmodemOpt = XoptCheck;
+				}
+			}
+		}
+	}
+	else
+		(*SetFileVar)(FileVar);
+
+	if (mode==IdXReceive)
+		FileVar->FileHandle = _lcreat(FileVar->FullName,0);
+	else
+		FileVar->FileHandle = _lopen(FileVar->FullName,OF_READ);
+
+	FileVar->FileOpen = FileVar->FileHandle != INVALID_HANDLE_VALUE;
+	if (! FileVar->FileOpen)
+	{
+		ProtoEnd();
+		return;
+	}
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_XM,mode,
+	                   ts.XmodemOpt,ts.XmodemBin))
+		ProtoEnd();
+}
+
+BOOL XMODEMStartReceive(const char *fiename, WORD ParamBinaryFlag, WORD ParamXmodemOpt)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
+	if (IsXopt1k(ts.XmodemOpt)) {
+		if (IsXoptCRC(ParamXmodemOpt)) {
+			// CRC
+			ts.XmodemOpt = Xopt1kCRC;
+		}
+		else {	// Checksum
+			ts.XmodemOpt = Xopt1kCksum;
+		}
+	}
+	else {
+		if (IsXoptCRC(ParamXmodemOpt)) {
+			ts.XmodemOpt = XoptCRC;
+		}
+		else {
+			ts.XmodemOpt = XoptCheck;
+		}
+	}
+	ts.XmodemBin = ParamBinaryFlag;
+	FileVar->NoMsg = TRUE;
+	XMODEMStart(IdXReceive);
+
+	return TRUE;
+}
+
+BOOL XMODEMStartSend(const char *fiename, WORD ParamXmodemOpt)
+{
+	if (FileVar !=NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), fiename, _TRUNCATE);
+	if (IsXoptCRC(ts.XmodemOpt)) {
+		if (IsXopt1k(ParamXmodemOpt)) {
+			ts.XmodemOpt = Xopt1kCRC;
+		}
+		else {
+			ts.XmodemOpt = XoptCRC;
+		}
+	}
+	else {
+		if (IsXopt1k(ParamXmodemOpt)) {
+			ts.XmodemOpt = Xopt1kCksum;
+		}
+		else {
+			ts.XmodemOpt = XoptCheck;
+		}
+	}
+	FileVar->NoMsg = TRUE;
+	XMODEMStart(IdXSend);
+
+	return TRUE;
+}
+
+void YMODEMStart(int mode)
+{
+	WORD Opt;
+
+	if (! ProtoStart())
+		return;
+
+	if (mode==IdYSend)
+	{
+		char FileDirExpanded[MAX_PATH];
+		ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+
+		// \x83t\x83@\x83C\x83\x8B\x93]\x91\x97\x8E\x9E\x82̃I\x83v\x83V\x83\x87\x83\x93\x82\xCD"Yopt1K"\x82Ɍ\x88\x82ߑł\xBF\x81B
+		// TODO: "Yopt1K", "YoptG", "YoptSingle"\x82\xF0\x8B\xE6\x95ʂ\xB5\x82\xBD\x82\xA2\x82Ȃ\xE7\x82΁AIDD_FOPT\x82\xF0\x8Ag\x92\xA3\x82\xB7\x82\xE9\x95K\x97v\x82\xA0\x82\xE8\x81B
+		Opt = Yopt1K;
+		FileVar->OpId = OpYSend;
+		if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+		{
+			if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Y,&Opt) ||
+			    (FileVar->NumFname==0))
+			{
+				ProtoEnd();
+				return;
+			}
+			//ts.XmodemBin = Opt;
+		}
+		else
+		(*SetFileVar)(FileVar);
+	}
+	else {
+		FileVar->OpId = OpYRcv;
+		// \x83t\x83@\x83C\x83\x8B\x93]\x91\x97\x8E\x9E\x82̃I\x83v\x83V\x83\x87\x83\x93\x82\xCD"Yopt1K"\x82Ɍ\x88\x82ߑł\xBF\x81B
+		Opt = Yopt1K;
+		(*SetFileVar)(FileVar);
+	}
+
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_YM,mode,Opt,0))
+		ProtoEnd();
+}
+
+BOOL YMODEMStartReceive()
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+	FileVar->NoMsg = TRUE;
+	YMODEMStart(IdYReceive);
+	return TRUE;
+}
+
+BOOL YMODEMStartSend(const char *fiename)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	FileVar->NoMsg = TRUE;
+	YMODEMStart(IdYSend);
+	return TRUE;
+}
+
+void ZMODEMStart(int mode)
+{
+	WORD Opt;
+
+	if (! ProtoStart())
+		return;
+
+	if (mode == IdZSend || mode == IdZAutoS)
+	{
+		Opt = ts.XmodemBin;
+		FileVar->OpId = OpZSend;
+		if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+		{
+			char FileDirExpanded[MAX_PATH];
+			ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+			if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_Z,&Opt) ||
+			    (FileVar->NumFname==0))
+			{
+				if (mode == IdZAutoS) {
+					CommRawOut(&cv, "\030\030\030\030\030\030\030\030\b\b\b\b\b\b\b\b\b\b", 18);
+				}
+				ProtoEnd();
+				return;
+			}
+			ts.XmodemBin = Opt;
+		}
+		else
+		(*SetFileVar)(FileVar);
+	}
+	else /* IdZReceive or IdZAutoR */
+		FileVar->OpId = OpZRcv;
+
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_ZM,mode,Opt,0))
+		ProtoEnd();
+}
+
+BOOL ZMODEMStartReceive(void)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->NoMsg = TRUE;
+	ZMODEMStart(IdZReceive);
+
+	return TRUE;
+}
+
+BOOL ZMODEMStartSend(const char *fiename, WORD ParamBinaryFlag)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),fiename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	ts.XmodemBin = ParamBinaryFlag;
+	FileVar->NoMsg = TRUE;
+
+	ZMODEMStart(IdZSend);
+
+	return TRUE;
+}
+
+void BPStart(int mode)
+{
+	LONG Option = 0;
+
+	if (! ProtoStart())
+		return;
+	if (mode==IdBPSend)
+	{
+		FileVar->OpId = OpBPSend;
+		if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+		{
+			char FileDirExpanded[MAX_PATH];
+			ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+			FileVar->FullName[0] = 0;
+			if (! (*GetTransFname)(FileVar, FileDirExpanded, GTF_BP, &Option))
+			{
+				ProtoEnd();
+				return;
+			}
+		}
+		else
+			(*SetFileVar)(FileVar);
+	}
+	else /* IdBPReceive or IdBPAuto */
+		FileVar->OpId = OpBPRcv;
+
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_BP,mode,0,0))
+		ProtoEnd();
+}
+
+BOOL BPSendStart(const char *filename)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName), filename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	FileVar->NoMsg = TRUE;
+	BPStart(IdBPSend);
+
+	return TRUE;
+}
+
+BOOL BPStartReceive(void)
+{
+	if (FileVar != NULL)
+		return FALSE;
+	if (!NewFileVar_(&FileVar))
+		return FALSE;
+
+	FileVar->NoMsg = TRUE;
+	BPStart(IdBPReceive);
+
+	return TRUE;
+}
+
+void QVStart(int mode)
+{
+	WORD W;
+
+	if (! ProtoStart())
+		return;
+
+	if (mode==IdQVSend)
+	{
+		FileVar->OpId = OpQVSend;
+		if (strlen(&(FileVar->FullName[FileVar->DirLen]))==0)
+		{
+			char FileDirExpanded[MAX_PATH];
+			ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
+			if (! (*GetMultiFname)(FileVar,FileDirExpanded,GMF_QV, &W) ||
+			    (FileVar->NumFname==0))
+			{
+				ProtoEnd();
+				return;
+			}
+		}
+		else
+			(*SetFileVar)(FileVar);
+	}
+	else
+		FileVar->OpId = OpQVRcv;
+
+	TalkStatus = IdTalkQuiet;
+
+	/* disable transmit delay (serial port) */
+	cv.DelayFlag = FALSE;
+
+	if (! OpenProtoDlg(FileVar,PROTO_QV,mode,0,0))
+		ProtoEnd();
+}
+
+BOOL QVStartReceive(void)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->NoMsg = TRUE;
+	QVStart(IdQVReceive);
+
+	return TRUE;
+}
+
+BOOL QVStartSend(const char *filename)
+{
+	if (FileVar != NULL) {
+		return FALSE;
+	}
+	if (!NewFileVar_(&FileVar)) {
+		return FALSE;
+	}
+
+	FileVar->DirLen = 0;
+	strncpy_s(FileVar->FullName, sizeof(FileVar->FullName),filename, _TRUNCATE);
+	FileVar->NumFname = 1;
+	FileVar->NoMsg = TRUE;
+	QVStart(IdQVSend);
+
+	return TRUE;
+}
+
+#if 0
+BOOL IsSendVarNULL()
+{
+	return SendVar == NULL;
+}
+#endif
+
+BOOL IsFileVarNULL()
+{
+	return FileVar == NULL;
+}

Modified: trunk/teraterm/teraterm/ttermpro.v16.vcxproj
===================================================================
--- trunk/teraterm/teraterm/ttermpro.v16.vcxproj	2020-12-20 12:05:50 UTC (rev 9051)
+++ trunk/teraterm/teraterm/ttermpro.v16.vcxproj	2020-12-20 12:06:06 UTC (rev 9052)
@@ -147,6 +147,7 @@
     <ClCompile Include="dnddlg.cpp" />
     <ClCompile Include="filesys.cpp" />
     <ClCompile Include="filesys_log.cpp" />
+    <ClCompile Include="filesys_proto.cpp" />
     <ClCompile Include="font_pp.cpp" />
     <ClCompile Include="ftdlg.cpp" />
     <ClCompile Include="keyboard.c" />

Modified: trunk/teraterm/teraterm/ttermpro.v8.vcproj
===================================================================
--- trunk/teraterm/teraterm/ttermpro.v8.vcproj	2020-12-20 12:05:50 UTC (rev 9051)
+++ trunk/teraterm/teraterm/ttermpro.v8.vcproj	2020-12-20 12:06:06 UTC (rev 9052)
@@ -225,6 +225,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\filesys_proto.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\susie_plugin\libsusieplugin.cpp"
 				>
 			</File>


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