www.pudn.com > rs232 > RTERM.C


#include  
#include  
 
#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","ëDCD","ëRI","ëDSR","ëCTS","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='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 ); 
}