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

368 lines
12 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"
/*---------------------------------------------------------------------------*/
/* sndPre() - */
/*---------------------------------------------------------------------------*/
VOID sndPre(BYTE *fileName, INT actionString)
{
showXferCtrls(IDSTOP | IDPAUSE | IDSCALE | IDSENDING); /* mbbx 2.00: xfer ctrls... */
showRXFname(fileName, actionString);
}
/*---------------------------------------------------------------------------*/
/* sndFileErr() - */
/*---------------------------------------------------------------------------*/
VOID sndFileErr(BYTE *fileName, INT wID)
{
BYTE tmp1[TMPNSTR+1];
LoadString(hInst, wID, tmp1, TMPNSTR);
testMsg("%s %s", tmp1, fileName);
}
/*---------------------------------------------------------------------------*/
/* getSndTFile() - */
/*---------------------------------------------------------------------------*/
INT_PTR APIENTRY FO_SendTextFile(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) /* mbbx 2.00: new FO hook scheme... */
{
switch(message)
{
case WM_INITDIALOG:
if(xferSndLF != 0)
CheckDlgButton(hDlg, (xferSndLF > 0) ? FO_IDSNDLF : FO_IDSNDNOLF, TRUE);
break;
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam))
{
case FO_IDSNDLF:
if(xferSndLF == -1)
CheckDlgButton(hDlg, FO_IDSNDNOLF, FALSE);
xferSndLF = ((xferSndLF == 1) ? 0 : 1);
CheckDlgButton(hDlg, FO_IDSNDLF, xferSndLF);
break;
case FO_IDSNDNOLF:
if(xferSndLF == 1)
CheckDlgButton(hDlg, FO_IDSNDLF, FALSE);
xferSndLF = ((xferSndLF == -1) ? 0 : -1);
CheckDlgButton(hDlg, FO_IDSNDNOLF, xferSndLF);
break;
}
break;
}
return FALSE;
}
BOOL getSndTFile(INT actionString)
{
BYTE fileExt[FILENAMELEN+1];
FSReply reply;
BYTE szTitle[MINRESSTR];
OFSTRUCT file;
DEBOUT("getSndTFile: %s\n","Got IN");
getFileDocData(FILE_NDX_MEMO, reply.vRefNum, reply.fName, fileExt, NULL); /* mbbx 1.03 */
if(actionString == STR_VIEWING)
{
xferSndLF = 0; /* mbbx: WAS xferSndLF = TRUE; */
LoadString(hInst, STR_VIEWTEXTFILE, szTitle, MINRESSTR);
}
else
{
xferSndLF = -1; /* jtf 3.22 */
LoadString(hInst, STR_SENDTEXTFILE, szTitle, MINRESSTR);
}
/* mbbx 2.00: new FO hook scheme... */
DEBOUT("getSndTFile: %s\n","Calling FileOpen");
if(reply.vRefNum[strlen(reply.vRefNum) - 1] != '\\')
strcat(reply.vRefNum, "\\");
reply.good = FileOpen(reply.vRefNum, reply.fName, NULL, fileExt, szTitle,
FO_DBSNDTEXT, FO_SendTextFile, FO_FILEEXIST);
if(reply.good)
{
DEBOUT("getSndTFile: %s\n","FileOpen reply was good");
setFileDocData(FILE_NDX_MEMO, reply.vRefNum, reply.fName, fileExt, 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, reply.fName);
*xferFname = strlen(xferFname+1);
#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("getSndTFile: opening the file[%s]\n",reply.vRefNum);
DEBOUT("getSndTFile: with flags [%lx]\n",O_RDONLY);
#endif
/* jtf 3.20 */
if((xferRefNo = OpenFile(reply.vRefNum, &file,
OF_READ)) == -1)
{
//sndFileErr (STRFERROPEN, reply.fName); BUG:12588 args are swaped!
sndFileErr (reply.fName,STRFERROPEN);
DEBOUT("getSndTFile: %s\n","Got OUT with FAIL(open)");
return FALSE;
}
if ((xferBytes = fileLength (xferRefNo)) == -1l)
{
//sndFileErr (STRFERRFILELENGTH, reply.fName); BUG:12588 args are swapped!
sndFileErr (reply.fName,STRFERRFILELENGTH);
DEBOUT("getSndTFile: %s\n","Got OUT with FAIL(filelength)");
return FALSE;
}
DEBOUT("getSndTFile: size of file put in xferBytes=%lx\n",xferBytes);
xferOrig = xferBytes;
xferPct = 0;
sndPre(reply.fName, actionString);
DEBOUT("getSndTFile: %s\n","Got OUT with success");
return TRUE;
}
DEBOUT("getSndTFile: %s\n","Got OUT with FAIL(!reply.good)");
return(FALSE);
}
/*---------------------------------------------------------------------------*/
/* sndTfile() - */
/*---------------------------------------------------------------------------*/
VOID sndTFile ()
{
xferFlag = XFRNONE;
xferPaused = FALSE;
xferTxtType = (TTXTTYPE) (trmParams.xTxtType - ITMSTD);
xferChrType = (TCHRTYPE) (trmParams.xChrType - ITMCHRDELAY);
xferLinType = (TLINTYPE) (trmParams.xLinType - ITMLINDELAY);
xferChrDelay = trmParams.xChrDelay;
xferLinDelay = trmParams.xLinDelay;
strcpy(xferLinStr+1, trmParams.xLinStr);
xferLinStr[0] = strlen(trmParams.xLinStr);
stripControl(xferLinStr);
if(getSndTFile(STR_SENDING))
{
xferFlag = XFRSND;
*outBuf = 0; /* (mbbx) clear out residuals */
if(trmParams.xWordWrap)
{
outBufCol = 0;
outBufSeq = FALSE;
xferBlkSize = 1; /* (xmbb) */
}
}
}
/*---------------------------------------------------------------------------*/
/* typTFile() - */
/*---------------------------------------------------------------------------*/
VOID typTFile()
{
xferFlag = XFRNONE;
xferPaused = FALSE;
xferStopped = FALSE;
if(getSndTFile(STR_VIEWING))
{
xferFlag = XFRTYP;
*outBuf = 0; /* (mbbx) */
if(trmParams.xWordWrap && (xferSndLF >= 0)) /* mbb?: wth??? */
{
outBufCol = 0;
outBufSeq = FALSE;
}
}
}
/*---------------------------------------------------------------------------*/
/* rcvErr() - */
/*---------------------------------------------------------------------------*/
VOID rcvErr(BYTE *fileName)
{
strcpy(taskState.string+1, fileName);
*taskState.string = strlen(fileName);
TF_ErrProc(STREWRERR, MB_OK | MB_ICONHAND, 999);
}
/*---------------------------------------------------------------------------*/
/* rcvPutFile() - */
/*---------------------------------------------------------------------------*/
INT_PTR APIENTRY FO_RcvTextFile(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) /* mbbx 2.00: new FO hook scheme... */
//HWND hDlg;
//WORD message;
//WPARAM wParam;
//LONG lParam;
{
switch(message)
{
case WM_INITDIALOG:
xferAppend = FALSE;
CheckDlgButton(hDlg, FO_IDCTRL, xferSaveCtlChr);
CheckDlgButton(hDlg, FO_IDTABLE, xferTableSave);
break;
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam))
{
case FO_IDAPPEND:
if(xferAppend = !xferAppend)
pFOData->wMode |= FO_FILEEXIST;
else
pFOData->wMode &= ~FO_FILEEXIST;
CheckDlgButton(hDlg, FO_IDAPPEND, xferAppend);
break;
case FO_IDCTRL:
CheckDlgButton(hDlg, FO_IDCTRL, xferSaveCtlChr = !xferSaveCtlChr);
break;
case FO_IDTABLE:
CheckDlgButton(hDlg, FO_IDTABLE, xferTableSave = !xferTableSave);
break;
}
break;
}
return FALSE;
}
VOID rcvPutFile(FSReply *reply, BYTE *fileExt)
{
*reply->fName = 0; /* mbbx 2.00: CUA */
/* mbbx 2.00: new FO hook scheme... */
if(reply->vRefNum[strlen(reply->vRefNum) - 1] != '\\')
strcat(reply->vRefNum, "\\");
reply->good = FileOpen(reply->vRefNum, reply->fName, NULL, fileExt, NULL,
FO_DBRCVTEXT, FO_RcvTextFile, FO_PUTFILE);
}
/*---------------------------------------------------------------------------*/
/* rcvPre() - Show transfer control & set up for receiving text.[scf] */
/*---------------------------------------------------------------------------*/
VOID rcvPre(BYTE *fileName, INT actionString)
{
xferFlag = XFRRCV;
xferBytes = -1; /* Special flag to enable stop */
xferPaused = FALSE; /* button */
xferLength = 0L; /* mbbx 2.00: mac */
tblPos = TBLBEGINLINE;
showXferCtrls(IDSTOP | IDPAUSE | IDSENDING); /* mbbx 2.00: xfer ctrls... */
showRXFname(fileName, actionString);
}
/*---------------------------------------------------------------------------*/
/* rcvTFile() - */
/*---------------------------------------------------------------------------*/
VOID rcvTFile()
{
FSReply reply;
BYTE fileExt[FILENAMELEN+1];
OFSTRUCT file;
BYTE OEMname[STR255]; /* jtf 3.20 */
getFileDocData(FILE_NDX_MEMO, reply.vRefNum, NULL, fileExt, NULL); /* mbbx 1.03 */
xferSaveCtlChr = FALSE;
xferTableSave = FALSE;
rcvPutFile(&reply, fileExt);
if(reply.good)
{
setFileDocData(FILE_NDX_MEMO, reply.vRefNum, reply.fName, fileExt, 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, reply.fName);
*xferFname = strlen(xferFname+1);
#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);
#endif
// JYF -- replace below two lines with the following if ()
// to remove the use of AnsiToOem()
//
//AnsiToOem(reply.vRefNum, OEMname); /* jtf 3.20 */
//if(xferAppend && fileExist(OEMname))
if (xferAppend && fileExist((LPSTR)reply.vRefNum))
{
/* jtf 3.20 */
DEBOUT("rcvTFile: doing open(%s)\n",reply.vRefNum);
DEBOUT("rcvTFile: with flag [%lx]\n",O_WRONLY);
if((xferRefNo = OpenFile(reply.vRefNum,
&file,
OF_WRITE | OF_CANCEL)) == -1)
{
rcvErr(reply.fName);
return;
}
_lseek(xferRefNo, 0L, 2);
}
else
{
/* jtf 3.20 */
DEBOUT("rcvTFile: doing open(%s)\n",reply.vRefNum);
DEBOUT("rcvTFile: with flag [%lx]\n",O_WRONLY|O_CREAT|O_TRUNC|S_IWRITE);
if((xferRefNo = OpenFile(reply.vRefNum,
&file,
OF_WRITE | OF_CREATE)) == -1)
{
rcvErr(reply.fName);
return;
}
}
xferBufferCount = 0; /* rjs bugs 016 */
xferBufferHandle = GlobalAlloc(GMEM_MOVEABLE, (DWORD) 1024); /* rjs bugs 016 */
rcvPre(reply.fName, STR_RECEIVING);
}
}