📄 exfput.c
字号:
/* Put specified file to HT1820 through communication file server
project file should include:
commplus.c
cplib.lib
*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
#include <commplus.h>
#define _BUFF_SIZE 4096
#define _MAX_ERROR 20
char ComPlsMsg[_MAX_ERROR][31]={
/*eng_NOT_READY*/ {"Communication time out"},
/*eng_IO_ERROR*/ {"Communication I/O error"},
/*eng_TOO_LONG*/ {"Internal Error 3"},
/*eng_INVALID_MD*/ {"Internal Error 4"},
/*eng_ILLEGAL_BDRT*/ {"Internal Error 5"},
/*eng_EXF_CANCELED*/ {"Coping has been aborted"},
/*eng_EXF_NAM_MIST*/ {"Internal Error 7"},
/*eng_EXF_INVALID_CD*/ {"Internal Error 8"},
/*eng_EXF_TRUNCATED*/ {"File truncated"},
/*eng_EXF_ALRDY_OPN*/ {"Internal Error 10"},
/*eng_EXF_ILLEGAL_FN*/ {"Internal Error 11"},
/*eng_EXF_CODE_12*/ {"Internal Error 12"},
/*eng_CLNT_REQ_REJECT*/ {"Request has been rejected"},
/*eng_CLNT_REQ_NOTSUP*/ {"Request has not been supported"},
/*eng_EXFerr_fOpen*/ {"File not found"},
/*eng_EXFerr_fCreate*/ {"Illegal file path"},
/*eng_EXFerr_fRead*/ {"File read error"},
/*eng_EXFerr_fWrite*/ {"Disk full"},
/*eng_EXFerr_fErase*/ {"File Erase Error"},
{"Unkown Error"}
};
int ParseComLn(int argc, char *argv[],
unsigned char *CommPort,
unsigned int *ServerID,
unsigned long *BdRtInput,
char *Localf,
char *Remotef,
unsigned int *convertToFox);
int db3tofox(char *filename);
int ParseComLn(int argc, char *argv[],
unsigned char *CommPort,
unsigned int *SerialNo,
unsigned long *BdRtInput,
char *Localf,
char *Remotef,
unsigned int *convertToFox)
{
int i, result=0;
unsigned char Mode, Port;
unsigned int SNo, BdRt;
unsigned long BdRttmp;
if (ComPlsInstalled())
{
GetCommMode(&Mode, &Port, &BdRt);
BdRttmp=BdRt;
}
else
{
Port=0;
BdRttmp=38400;
}
SNo=0;
strcpy(Remotef, "*");
for (i=1; i<argc; i++)
switch (argv[i][0])
{
case 'c':;
case 'C': if (argv[i][1]=='1')
Port=0;
else if (argv[i][1]=='2')
Port=1;
break;
case 'b':;
case 'B': sscanf(&argv[i][1], "%lu", &BdRttmp);
break;
case 's':;
case 'S': sscanf(&argv[i][1], "%d", &SNo);
break;
case 'l':
case 'L': if (argv[i][1]!=0)
{
result=1;
strcpy(Localf, &argv[i][1]);
}
break;
case 'r':
case 'R': if (argv[i][1]!=0)
strcpy(Remotef, &argv[i][1]);
break;
case '!': *convertToFox = 1;
}
if (!result)
{
printf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.\n");
printf("Syntax: EXFPUT lLocalFile(s) [rRemoteFile(s)] [bBaudRate] [{c1|c2}] [sSerialNo]\n");
printf("LocalFile(s): file names(delimited by ';') in local machine\n");
printf("RemoteFile(s): file names(delimited by ';') in remote machine, default is *\n");
printf("BaudRate: 9600 19200 38400 57600 or 115200, default is 38400\n");
printf("c1: use COM1 c2: use COM2\n");
printf("SerialNo: serial no of remote machine, default is zero for all\n");
}
else
{
*CommPort=Port;
*BdRtInput=BdRttmp;
*SerialNo=SNo;
}
return(result);
}
int db3tofox(char *filename)
{
FILE *stream;
unsigned char buf[32];
unsigned int numOfColumn, curPosition, i;
if ((stream = fopen(filename, "rb+")) == NULL)
{
printf("\nCannot open DB3 file");
return 1;
}
fseek(stream, 0, SEEK_SET);
if ((i = fread(buf, 32, 1, stream)) != 1)
{
printf("\nCannot read DB3 file");
return 1;
}
numOfColumn = (buf[8] + buf[9] * 256 - 33) / 32;
curPosition = 1;
for (i = 1; i <= numOfColumn; i++)
{
fseek(stream, i * 32 + 12, SEEK_SET);
fwrite(&curPosition, 1, 1, stream);
fseek(stream, i * 32 + 16, SEEK_SET);
fread(buf, 1, 1, stream);
curPosition = curPosition + buf[0];
}
if (fclose(stream) != 0)
{
printf("\nCannot close DB3 file");
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
unsigned char CommPort;
unsigned int SerialNo, result;
unsigned long BdRtInput;
unsigned int BaudRate;
unsigned int convertToFox = 0;
char Localf[256];
char Remotef[256];
char Buffer[_BUFF_SIZE];
char tempRemote[64];
char *curLocal, *curRemote, *oldLocal, *oldRemote, *ptr;
char ch;
directvideo=0;
if (ParseComLn(argc, argv, &CommPort, &SerialNo, &BdRtInput,
Localf, Remotef, &convertToFox))
{
if (!ComPlsInstalled())
if (InstallComPls(CommPort) == 2)
{
cprintf("BIOS Setting for COM1 or COM2 Error!!!!\r\n\n");
return 0;
}
if (BdRtInput == 115200)
BaudRate=0x0fff0;
else
BaudRate=(unsigned int)BdRtInput;
if (!SetCommMode(_PAK_MODE, CommPort, BaudRate))
{
EnableRx(0);
printf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.\n");
printf("COM%u avaliable with baud rate %lu, oriented server %u \n", CommPort+1, BdRtInput, SerialNo);
oldLocal = Localf;
oldRemote = Remotef;
while (oldLocal[0] != 0)
{
ptr = strpbrk(oldLocal, ";");
if (ptr)
{
curLocal = oldLocal;
oldLocal = &ptr[1];
ptr[0] = 0;
}
else
{
curLocal = oldLocal;
oldLocal = &curLocal[strlen(curLocal)];
}
ptr = strpbrk(oldRemote, ";");
if (ptr)
{
curRemote = oldRemote;
oldRemote = &ptr[1];
ptr[0] = 0;
}
else
{
curRemote = oldRemote;
oldRemote = &curRemote[strlen(curRemote)];
}
if (curRemote[0] == 0)
strcpy(tempRemote, "*");
else
strcpy(tempRemote, curRemote);
if (convertToFox == 1)
db3tofox(curLocal);
result=ExfPut(curLocal, tempRemote, _NOT_SLNT, _IN_ENG, SerialNo, Buffer, _BUFF_SIZE);
printf("\n\n");
if (result)
{
if (result > _MAX_ERROR)
result = _MAX_ERROR;
printf("\nCommPls Error: %s\n", ComPlsMsg[result-1]);
printf("\nPress ENTER to exit");
ch = getc(stdin);
DisableRx();
UninstComPls();
exit(EXIT_FAILURE);
}
}
DisableRx();
}
else
{
if (result > _MAX_ERROR)
result = _MAX_ERROR;
printf("%u is an invalid baud rate for CommPlus.\n", BdRtInput);
printf("\nPress ENTER to exit");
ch = getc(stdin);
ch = ch;
UninstComPls();
exit(EXIT_FAILURE);
}
UninstComPls();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -