windows-nt/Source/XPSP1/NT/shell/osshell/accesory/terminal/rcvbfile.c
2020-09-26 16:20:57 +08:00

230 lines
7 KiB
C

/*===========================================================================*/
/* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */
/* Houston, Texas */
/*===========================================================================*/
#define NOLSTRING TRUE /* jtf win3 mod */
#include <windows.h>
#include "port1632.h"
#include "dcrc.h"
#include "dynacomm.h"
#include "fileopen.h"
#include "task.h"
/*---------------------------------------------------------------------------*/
/* rcvBPre() - [mbb] */
/*---------------------------------------------------------------------------*/
VOID rcvBPre(BYTE *fileName)
{
WORD fScale = ((xferBinType != XFRYMODEM) && (xferBinFork == XFRBOTH)) ? IDSCALE : 0;
showXferCtrls(IDSTOP | IDFORK | fScale | IDSENDING | IDBERRORS);
showRXFname(fileName, STR_RECEIVING);
}
/*---------------------------------------------------------------------------*/
/* rcvPutBFile() - [scf] */
/*---------------------------------------------------------------------------*/
BOOL rcvPutBFile()
{
BOOL rcvPutBFile = FALSE;
FSReply reply;
WORD wMode;
BYTE fileExt[FILENAMELEN+1];
OFSTRUCT file;
wMode = FO_PUTFILE; /* jtf 3.31 | ((xferBinType == XFRYMODEM) ? FO_BATCHMODE : FO_NONDOSFILE); */
if(xferBinType == XFRKERMIT)
/* jtf 3.17 wMode |= FO_REMOTEFILE */ ;
getFileDocData(FILE_NDX_DATA, reply.vRefNum, reply.fName, fileExt, NULL);
*macFileName = 0;
/* mbbx 1.10: CUA... */
if(reply.vRefNum[strlen(reply.vRefNum) - 1] != '\\')
strcat(reply.vRefNum, "\\");
if(reply.good = FileOpen(reply.vRefNum, reply.fName, macFileName, fileExt,
NULL, FO_DBRCVFILE, NULL, wMode))
{
useMacFileName = (*macFileName != 0);
}
if(reply.good)
{
setFileDocData(FILE_NDX_DATA, reply.vRefNum, reply.fName, NULL, NULL); /* mbbx 2.00: no forced extents */
strcpy(xferVRefNum+1, reply.vRefNum); /* mbbx 0.62: save the path !!! */
*xferVRefNum = strlen(xferVRefNum+1);
xferRefNo = 0;
if(xferBinType != XFRYMODEM) /* mbbx 1.01: ymodem */
{
strcpy(xferFname+1, useMacFileName ? macFileName : reply.fName);
*xferFname = strlen(xferFname+1);
if((xferBinType == XFRYTERM) && !answerMode) /* mbbx: yterm */
return(FALSE);
#ifdef ORGCODE
strcpy(reply.vRefNum+strlen(reply.vRefNum), reply.fName);
#else
strcpy(reply.vRefNum+strlen(reply.vRefNum), "\\");
strcpy(reply.vRefNum+strlen(reply.vRefNum), reply.fName);
DEBOUT("rcvPutBfile: opening %s\n",reply.vRefNum);
DEBOUT("rcvPutBfile: %s","using O_CREAT|O_TRUNC, S_IWRITE args\n");
#endif
/* jtf 3.20 */
if((xferRefNo = OpenFile((LPSTR) reply.vRefNum, (LPOFSTRUCT)&file,
OF_WRITE | OF_CREATE)) == -1)
{
xferRefNo = 0; /* mbbx 2.00: remove XTalk... */
rcvErr(reply.fName);
return(FALSE);
}
}
xferErrors = 0;
xferLength = 0L;
xferPct = 0;
xferOrig = -1;
rcvBPre(reply.fName);
rcvPutBFile = TRUE;
}
return(rcvPutBFile);
}
/*---------------------------------------------------------------------------*/
/* rcvBFile() - [scf] */
/*---------------------------------------------------------------------------*/
VOID rcvBFile()
{
if(xferFlag != XFRNONE) /* mbbx 1.10: answerMode... */
{
return;
}
xferFast = FALSE;
if(!answerMode)
{
switch(trmParams.xBinType)
{
case ITMXMODEM:
xferBinType = XFRXMODEM;
break;
case ITMKERMIT:
KERRCVFLAG = KERFILE;
xferBinType = XFRKERMIT;
break;
}
}
xferBinFork = XFRDATA;
if(rcvPutBFile())
{
xferFlag = XFRBRCV;
}
}
/*---------------------------------------------------------------------------*/
/* rcvTerminate() - [scf] */
/*---------------------------------------------------------------------------*/
VOID rcvTerminate()
{
BYTE filePath[PATHLEN];
OFSTRUCT dummy;
if(xferRefNo != 0) /* mbbx 1.01: ymodem */
{
_lclose(xferRefNo);
strcpy(filePath, xferVRefNum+1);
strcpy(filePath+strlen(filePath), xferFname+1);
MOpenFile((LPSTR) filePath, (LPOFSTRUCT) &dummy, OF_DELETE);
}
}
/*---------------------------------------------------------------------------*/
/* rcvAbort() - [scf] */
/*---------------------------------------------------------------------------*/
VOID rcvAbort()
{
BYTE tmp1[TMPNSTR+1];
LoadString(hInst, STR_ABORTRCV, (LPSTR) tmp1, TMPNSTR);
testBox(NULL, -(MB_ICONEXCLAMATION | MB_OK), STR_APPNAME, tmp1, &xferFname[1]);
rcvTerminate();
}
/*---------------------------------------------------------------------------*/
/* rcvFileErr() - [scf] */
/*---------------------------------------------------------------------------*/
VOID rcvFileErr()
{
memcpy(taskState.string, xferFname, *xferFname+2);
TF_ErrProc(STREWRERR, MB_OK | MB_ICONHAND, 999);
rcvTerminate();
}
/*---------------------------------------------------------------------------*/
/* xRcvBFile() - [mbb] */
/*---------------------------------------------------------------------------*/
VOID xRcvBFile()
{
BYTE saveDataBits, saveParity, saveFlowCtrl;
termSendCmd(trmParams.binRXPrefix, strlen(trmParams.binRXPrefix), 0x42 | TRUE); /* mbbx 2.01.19 ... */
saveDataBits = trmParams.dataBits; /* mbbx 2.00: auto adjust settings... */
saveParity = trmParams.parity;
saveFlowCtrl = trmParams.flowControl; /* mbbx 2.00.05: eliminate flowSerial()... */
trmParams.dataBits = ITMDATA8;
trmParams.parity = ITMNOPARITY;
trmParams.flowControl = ITMNOFLOW;
resetSerial(&trmParams, FALSE, FALSE, 0); /* mbbx 2.00.05: auto reset... */
switch(xferBinType)
{
case XFRXMODEM:
XM_RcvFile(0x0800); /* XM_CRC */
break;
case XFRKERMIT:
KER_Receive(FALSE); /* rkhx 2.00 */
break;
}
if((trmParams.dataBits != saveDataBits) || (trmParams.parity != saveParity) || (trmParams.flowControl != saveFlowCtrl))
{
trmParams.dataBits = saveDataBits;
trmParams.parity = saveParity;
trmParams.flowControl = saveFlowCtrl;
resetSerial(&trmParams, FALSE, FALSE, 0); /* slc swat */
}
termSendCmd(trmParams.binRXSuffix, strlen(trmParams.binRXSuffix), 0x42 | TRUE); /* mbbx 2.01.19 ... */
}