📄 exfserv.c
字号:
/* CommPlus Server for PC
project file should include:
Intcaptr.asm
commplus.c
cplib.lib
compiled with NO STACK WARNING & NO REGISTER VALUABLE
*/
#include <conio.h>
#include <stdio.h>
#include <commplus.h>
#include <dos.h>
#include <string.h>
#include "intcaptr.h"
#define _BUFF_SIZE 4096
int ParseComLn(int argc, char *argv[],
unsigned char *CommPort,
unsigned int *ServerID,
unsigned long *BdRtInput,
char *filename);
void TimeStamp(void);
void linefeed(void);
char filename[64] = "";
void linefeed()
{
_asm {
mov ax, 0e0ah
int 10h
mov ax, 0e0dh
int 10h
};
}
void TimeStamp()
{
struct dosdate_t d;
struct time t;
_dos_getdate(&d);
gettime(&t);
putch('\r');
cprintf("%d/%d/%d %2d:%02d ", d.year, d.month, d.day, t.ti_hour, t.ti_min);
}
int ParseComLn(int argc, char *argv[],
unsigned char *CommPort,
unsigned int *ServerID,
unsigned long *BdRtInput,
char *filename)
{
int i, result=1;
unsigned char Mode, Port;
unsigned int SNo;
unsigned long BdRttmp;
unsigned int BdRt;
if (ComPlsInstalled())
{
GetCommMode(&Mode, &Port, &BdRt);
BdRttmp=BdRt;
SNo=GetSerialNo();
}
else
{
Port=SNo=0;
BdRttmp=38400;
}
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 'f': ;
case 'F': sscanf (&argv[i][1], "%64s", filename);
break;
case '?': result=0;
linefeed();
cprintf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.");
linefeed();
cprintf("Syntax: EXFSERV [bBaudRate] [{c1|c2}] [sServerID] [fFileName]");
linefeed();
cprintf("BaudRate: 9600 19200 38400 57600 or 115200, default is 38400");
linefeed();
cprintf("c1: use COM1 c2: use COM2");
linefeed();
cprintf("ServerID: unsigned int for server ID, default is current");
linefeed();
cprintf("FileName: log file for the server to write to");
linefeed();
break;
}
*CommPort=Port;
*BdRtInput=BdRttmp;
*ServerID=SNo;
return(result);
}
int main(int argc, char *argv[])
{
unsigned char CommPort;
unsigned int ServerID;
unsigned int BaudRate;
unsigned long BdRtInput;
char Buffer[_BUFF_SIZE];
directvideo=0;
if (ParseComLn(argc, argv, &CommPort, &ServerID, &BdRtInput, filename))
{
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;
BaudRate=0x0fff0;
if (!SetCommMode(_PAK_MODE, CommPort, BaudRate))
{
EnableRx(0);
if (strlen(filename)!=0)
{
bPointer = 0;
oldInt10 = _dos_getvect(0x10);
_dos_setvect(0x10, Int10);
}
linefeed();
cprintf("Exfile Server Version 3.0 (C) 2000, LandTech Development Co.");
linefeed();
cprintf("COM%u avaliable with baud rate %lu", CommPort+1, BdRtInput);
linefeed();
SetSerialNo(ServerID);
cprintf("Server %d started...", ServerID);
linefeed();
fServer(CommPort, BaudRate, _NOT_SLNT, _IN_ENG, _BUFF_SIZE, Buffer);
linefeed();
cprintf("Server %d downed.", ServerID);
linefeed();
if (strlen(filename)!=0)
_dos_setvect(0x10, oldInt10);
DisableRx();
}
else
cprintf("%d is an invalid baud rate for CommPlus.\n\r", BaudRate);
UninstComPls();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -