📄 rterm.c
字号:
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define F1KEY 0x13b
#define F2KEY 0x13c
#define F10KEY 0x144
typedef unsigned char BYTE;
typedef unsigned char BOOL;
#include "rcomm.h"
COM_PORT cpPort=CP_COM1;
unsigned long nBaud=9600L;
COM_DATA_BITS cdbBits=CDB_8_BITS;
COM_STOP_BITS csbStop=CSB_1_BIT;
COM_PARITY cpParity=CP_NO_PARITY;
char *szStatusInfo[16]={ "DCD","RI","DSR","CTS","隓CD","隦I","隓SR","隒TS","RESERVED",
"TX EMPTY","TX READY","BREAK","FRAMING ERROR","PARITY ERROR",
"DATA OVERRUN","RX_READY" };
int inkey( void )
{
int key=0;
if ( kbhit() )
{
key=getch();
if ( key==0 ) key=getch()+256;
}
return( key );
}
void emulate( void );
void OpenSerialPort( void );
void CloseSerialPort( void );
void main( int argc, char *argv[] )
{
int i,j;
long lValue;
char c;
for ( i=1; i<argc; i++ )
{
if ( *argv[i]=='/' || *argv[i]=='-' )
{
switch( *(argv[i]+1) )
{
case 'h': case 'H': case '?':
printf( "\n Usage: TERM [/Cport] [/Bbaud] [/Ddbits] [/Pparity] [/Ssbits]\n" );
exit( 1 );
break;
case 'c': case 'C':
if ( (c=*(argv[i]+2))>='1' && c<='4' ) cpPort=(int) (c-'1');
break;
case 'b': case 'B':
lValue = atol( argv[i]+2 );
if ( lValue>0L ) nBaud=lValue;
break;
case 'd': case 'D':
j = atoi( argv[i]+2 );
if ( j==8 || j==7 ) cdbBits=(j==8?CDB_8_BITS:CDB_7_BITS);
break;
case 'p': case 'P':
switch( *(argv[i]+2) )
{
case 'N':
case 'n':
cpParity=CP_NO_PARITY;
break;
case 'O':
case 'o':
cpParity=CP_ODD_PARITY;
break;
case 'E':
case 'e':
cpParity=CP_EVEN_PARITY;
break;
}
break;
case 's': case 'S':
j = atoi( argv[i]+2 );
if ( j==1 || j==2 ) csbStop=(j==1?CSB_1_BIT:CSB_2_BIT);
break;
default:
printf( "\n\aError - Unknown parameter '%s'", argv[i] );
exit( 1 );
}
}
}
printf( "\n\nRocSoft (c) 1997 - RTERM Comms Test Utility\n\n" );
printf( "Settings: COM Port = COM%d\n", cpPort+1 );
printf( " Baud = %lu\n", nBaud );
printf( " Parity = %s\n", (cpParity==CP_NO_PARITY?"None":(cpParity==CP_ODD_PARITY?"Odd":"Even")) );
printf( " Data Bits = %d\n", (cdbBits==CDB_8_BITS?8:7) );
printf( " Stop Bits = %d\n", (csbStop==CSB_1_BIT?1:2) );
printf( "Use RTERM /? for command line options\n" );
printf( "Press F1 for port status info\n" );
printf( "Press F2 for detailed port diagnostics\n" );
printf( "Press F10 to exit\n\n" );
emulate();
printf( "\n\nRTERM (c) RocSoft 1997. Coded by CyberFrog.\n\n" );
}
/*=================================================================*/
/* */
/* Functions used by the main program are defined hereafter. */
/* */
/*=================================================================*/
void emulate( void )
{
BYTE cbChar;
int nQSize, key;
BOOL bAbort=FALSE;
COM_STATUS csStatus;
OpenSerialPort();
/* Infinite loop until we escape */
while ( !bAbort )
{
/* Look for characters received */
nQSize = COM_InQueue(cpPort);
if ( nQSize )
{
if ( COM_Read(cpPort,&cbChar,1)==1 )
{
printf( "%c",cbChar );
}
else
{
printf( "\nRead Error\n" );
}
}
if ( (key=inkey())!=0 )
{
switch( key )
{
case F10KEY:
bAbort=TRUE;
break;
case F1KEY:
/* Status */
printf( "\nCOM%d Status:\n",cpPort+1 );
printf( " InBuffer :%d\n",COM_InQueue(cpPort) );
printf( " OutBuffer:%d\n",COM_OutQueue(cpPort) );
csStatus = COM_Status(cpPort);
printf( " Status :%04X\n\n",csStatus );
break;
case F2KEY:
printf( "\nCOM%d Diagnostics:\n",cpPort+1 );
csStatus = COM_Status(cpPort);
for ( key=0; key<16; key++ )
{
if ( csStatus&(0x8000>>key) ) printf( " %s\n",szStatusInfo[key] );
}
break;
default:
if ( key<256 )
{
if ( COM_Write(cpPort,&key,1)!=1 )
{
printf( "\nWrite Error\n" );
}
}
}
}
}
CloseSerialPort();
}
void OpenSerialPort( void )
{
if ( !COM_Open(cpPort,nBaud,cdbBits,csbStop,cpParity,2048) )
{
printf( "\n\aError opening COM port!\n" );
exit( 1 );
}
atexit( CloseSerialPort );
COM_IOCtrl( cpPort,TRUE,TRUE );
}
void CloseSerialPort( void )
{
COM_Close( cpPort );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -