// ┌─────────────────────────────────────────────────────────┐
// │ COMMPORT.LIB (C) 1994, Nearly Perfect Software. ├┐
// │ ││
// │ ● Written by Brad Broerman ││
// │ ● Last Modified: 05/04/94 ││
// │ ● Revision 1.0 ││
// └─┬───────────────────────────────────────────────────────┘│
// └────────────────────────────────────────────────────────┘
#ifndef COMMPORT
#define COMMPORT
#define MAX_COMM_BUFF_SIZE 5120
// These define the parity options for setting up the modem.
#define PAR_None 0
#define PAR_Even 1
#define PAR_Odd 2
#define PAR_Mark 3
#define PAR_Space 4
// These define the status bits for testing the line status register.
#define LS_DAVL 1 // Data available in the RDR
#define LS_OVRR 2 // Data Overrun
#define LS_PAR 4 // Parity Error
#define LS_FRAM 8 // Framing Error
#define LS_BREAK 16 // Break Detected.
#define LS_THRE 32 // Transmitter holding register empty.
#define LS_TMOT 128 // Timeout
// These define the status bits for testing the modem status register.
#define MS_CCTS 1 // CTS has changed
#define MS_CDSR 2 // DSR has changed
#define MS_CRI 4 // Ring Indicator hass changed.
#define MS_CDCD 8 // DCD has changed
#define MS_CTS 16 // CTS is currently high.
#define MS_DSR 32 // DSR is currently high.
#define MS_RI 64 // RI is currently high.
#define MS_DCD 128 // DCD is currently high.
class commport
{
// The commport class accesses the serial port. It can use com1 through
// com4, or a custom port. With this version, you can open several ports
//at a time. It does this by making duplicate copies of the ISR and plugging
// in the necessary buffer pointers. It offers highly reliable communications
// through 57600bps. Input is buffered, and the buffer size is variable.
// Output is unbuffered.
//
private:
int TimeOut,
TimeOutInt,
Active,
Save_PIC;
char COMM_Port,
COMM_PortIRQ,
COMM_PortINT,
COMM_PortSettings,
COMM_Buffer[MAX_COMM_BUFF_SIZE];
unsigned int COMM_PortBase,
COMM_Buffer_Tail,
COMM_Buffer_MaxSize,
COMM_Buffer_Size,
COMM_Buffer_Head,
VectSeg,
VectOff;
unsigned char *CommInterruptHandler;
public:
commport(int Port=1,int Baud=2400, int Parity=PAR_None, int DATA=8, int STOP=1);
~commport();
void init(int Port=1,int Baud=2400, int Parity=PAR_None, int DATA=8, int STOP=1); // Open the comm port.
void initcustom(int Port, int Baud, int Parity, int DATA, int STOP, unsigned int Base, unsigned int IRQ, unsigned int INTR); // Opens port with custom base & irq.
void close(); // Close the comm port.
void chgsettings(int Parity=PAR_None, int Data=8, int Stop=1); // Change the communication settings.
void chgbaud(int Baud); // Change the baud rate.
int modstatus(); // Gets the status of the modem status register.
int portstatus(); // Gets the status of the lline status register.
int bad(); // Returns a 1 if an error occured during the last read/write.
void setdsr(int S); // If S is 1, sets DSR, else it clears DSR.
void setrts(int S); // If S is 1, sets RTS, else it clears RTS
void setbreak(int S); // If S is 1, sets Break, else it clears the break.
void settmot(int S); // Sets the timeout time to S (1/10th seconds).
int bufferempty(); // Returns TRUE if the buffer is empty.
char peek(); // Get the next byte from the buffer without extracting it.
void flush(); // Emptys the input buffer.
// Extractors receive text form from port, and returns the types indicated.
commport &operator>> (char &); // Single character.
commport &operator>> (char *); // String.
commport &operator>> (int &); // Integer
commport &operator>> (long &); // Long Integer.
commport &operator>> (double &); // Double precision float.
// Inserters take the types indicated and send the text form to the port.
commport &operator<< (char &); // Single character.
commport &operator<< (char *); // String.
commport &operator<< (int &); // Integer
commport &operator<< (long &); // Long Integer.
commport &operator<< (double &); // Double precision float.
};
#endif