249 lines
7.1 KiB
C
249 lines
7.1 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"
|
||
|
|
||
|
VOID sndBPre(BYTE *fname, INT actionString)
|
||
|
{
|
||
|
showXferCtrls(IDSTOP | IDFORK | IDSCALE | IDSENDING | IDBERRORS); /* mbbx 2.00: xfer ctrls... */
|
||
|
showRXFname(fname, actionString);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* sndBFileErr() - [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID sndBFileErr(INT ioErrFlag, STRING *fileName)
|
||
|
{
|
||
|
memcpy(taskState.string, fileName, *fileName+2);
|
||
|
TF_ErrProc(ioErrFlag, MB_OK | MB_ICONHAND, 999); /* taskState.error */
|
||
|
}
|
||
|
|
||
|
#ifdef ORGCODE
|
||
|
#else
|
||
|
VOID swapWords(PVOID pVoid)
|
||
|
{
|
||
|
WORD wTmpHigh,wTmpLow;
|
||
|
PWORD pw;
|
||
|
|
||
|
pw = (PWORD)pVoid;
|
||
|
|
||
|
wTmpHigh = *pw;
|
||
|
wTmpLow = *(pw+1);
|
||
|
*pw = wTmpLow;
|
||
|
*(pw+1) = wTmpHigh;
|
||
|
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* getSndBFile() - [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
BOOL getSndBFile(INT actionString)
|
||
|
{
|
||
|
BOOL getSndBFile;
|
||
|
FSReply reply;
|
||
|
INT refNo;
|
||
|
DOSTIME fileDate;
|
||
|
LONG secs;
|
||
|
LONG tmp;
|
||
|
WORD wMode;
|
||
|
BYTE fileExt[FILENAMELEN+1];
|
||
|
OFSTRUCT file;
|
||
|
|
||
|
getSndBFile = FALSE;
|
||
|
*reply.vRefNum = *reply.fName = 0;
|
||
|
|
||
|
wMode = FO_GETFILE | FO_FILEEXIST; /* rjs - added fileexist */
|
||
|
if(xferBinType == XFRYMODEM) /* mbbx 1.01 */
|
||
|
wMode |= FO_BATCHMODE;
|
||
|
else if(xferBinType == XFRKERMIT)
|
||
|
/* jtf 3.17 wMode |= FO_REMOTEFILE */ ;
|
||
|
getFileDocData(FILE_NDX_DATA, reply.vRefNum, reply.fName, fileExt, NULL);
|
||
|
*macFileName = 0;
|
||
|
|
||
|
if(reply.vRefNum[strlen(reply.vRefNum) - 1] != '\\')
|
||
|
strcat(reply.vRefNum, "\\");
|
||
|
|
||
|
if(reply.good = FileOpen(reply.vRefNum, reply.fName, macFileName, fileExt,
|
||
|
NULL, FO_DBSNDFILE, 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);
|
||
|
|
||
|
strcpy(xferFname+1, useMacFileName ? macFileName : reply.fName);
|
||
|
*xferFname = strlen(xferFname+1);
|
||
|
|
||
|
xferRefNo = 0;
|
||
|
if(xferBinType != XFRYMODEM) /* mbbx 1.01: ymodem */
|
||
|
{
|
||
|
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("getSndBFile: opening the file[%s]\n",reply.vRefNum);
|
||
|
DEBOUT("getSndBFile: with flags [%lx]\n",O_RDONLY);
|
||
|
#endif
|
||
|
|
||
|
if((xferRefNo = OpenFile((LPSTR) reply.vRefNum, (LPOFSTRUCT)&file,
|
||
|
OF_READ)) == -1)
|
||
|
{
|
||
|
sndBFileErr(STRFERROPEN, reply.fName);
|
||
|
xferRefNo = 0;
|
||
|
return FALSE;
|
||
|
}
|
||
|
if((xferBytes = fileLength(xferRefNo)) == -1L)
|
||
|
{
|
||
|
sndBFileErr(STRFERROPEN, reply.fName);
|
||
|
if(xferBinType == XFRYTERM) /* mbbx: yterm */
|
||
|
answerMode = FALSE;
|
||
|
_lclose(xferRefNo);
|
||
|
xferRefNo = 0;
|
||
|
return FALSE;
|
||
|
}
|
||
|
xferParams.ioFlLgLen = xferBytes;
|
||
|
swapWords (&xferParams.ioFlLgLen); /* intel tch tch */
|
||
|
xferParams.ioFlRLgLen = 0l;
|
||
|
xferLgLen = xferBytes;
|
||
|
|
||
|
getFileDate (&fileDate, xferRefNo);
|
||
|
|
||
|
secs = 0;
|
||
|
|
||
|
xferParams.ioFlCrDat =
|
||
|
xferParams.ioFlMdDat = secs;
|
||
|
xferParams.fdFlags = 0;
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
xferBytes = 1L;
|
||
|
}
|
||
|
|
||
|
xferErrors = 0;
|
||
|
xferLength = 0L;
|
||
|
xferOrig = xferBytes;
|
||
|
xferPct = 0;
|
||
|
|
||
|
sndBPre(reply.fName, actionString);
|
||
|
getSndBFile = TRUE;
|
||
|
}
|
||
|
|
||
|
return(getSndBFile);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* sndBFile() - Send a binary file. [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID sndBFile()
|
||
|
{
|
||
|
if(xferFlag != XFRNONE) /* mbbx 1.10: answerMode... */
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
xferFast = FALSE;
|
||
|
|
||
|
if(!answerMode)
|
||
|
{
|
||
|
switch(trmParams.xBinType)
|
||
|
{
|
||
|
case ITMXMODEM:
|
||
|
xferBinType = XFRXMODEM;
|
||
|
break;
|
||
|
|
||
|
case ITMKERMIT:
|
||
|
xferBinType = XFRKERMIT;
|
||
|
break;
|
||
|
}
|
||
|
xferBinFork = XFRDATA;
|
||
|
}
|
||
|
|
||
|
if(getSndBFile(STR_SENDING))
|
||
|
xferFlag = XFRBSND;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* sndAbort() - [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID sndAbort ()
|
||
|
{
|
||
|
BYTE tmp1[TMPNSTR+1];
|
||
|
|
||
|
LoadString(hInst, STR_ABORTSND, (LPSTR) tmp1, TMPNSTR);
|
||
|
testMsg(tmp1, &xferFname[1],NULL);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* xSndBFile() - */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID xSndBFile()
|
||
|
{
|
||
|
BYTE saveDataBits, saveParity, saveFlowCtrl;
|
||
|
|
||
|
termSendCmd(trmParams.binTXPrefix, strlen(trmParams.binTXPrefix), 0x0042 | 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()... */
|
||
|
|
||
|
if((xferBinType != XFRKERMIT) && (xferBinType != XFRYTERM))
|
||
|
{
|
||
|
trmParams.dataBits = ITMDATA8;
|
||
|
trmParams.parity = ITMNOPARITY;
|
||
|
trmParams.flowControl = ITMNOFLOW;
|
||
|
resetSerial(&trmParams, FALSE, FALSE, 0); /* slc swat */
|
||
|
}
|
||
|
|
||
|
switch(xferBinType)
|
||
|
{
|
||
|
case XFRXMODEM:
|
||
|
XM_SndFile(0x0800); /* XM_CRC */
|
||
|
break;
|
||
|
|
||
|
case XFRKERMIT:
|
||
|
KER_Send(); /* 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.binTXSuffix, strlen(trmParams.binTXSuffix), 0x0042 | TRUE); /* mbbx 2.01.19 ... */
|
||
|
}
|