Figure 4: Null modem class declaration
#define MAX_IO_BYTES 4096 // max #bytes for Win32 overlapped I/O

class AFX_EXT_CLASS CLocalConnect
{
// public interface
public:
    CLocalConnect(uint16 portID, BOOL OpenRequested=TRUE,
        BOOL useDefaultThread=TRUE, BOOL echoEnabled=FALSE);
    virtual  ~CLocalConnect();

    enum TTYCommand {DisplayData,ClearScreen};

// default I/O thread function
    static UINT ThreadProc(LPVOID pParam);

// some redefinable functions
    virtual HANDLE SpawnPortThread();
    virtual void StopPortThread();
    virtual BOOL PortInitOk() {  return m_portInitOk; };

// port handle
    HANDLE getPortHandle() { return m_hPort; };

// some async I/O methods
    void putMessage(const CString&);
    void putMessage(const CByteArray& Msg);
    void putMessage(const char*, DWORD len);
    void getMessage(CByteArray& Msg);
  
// sync I/O
    BOOL SyncRead(CByteArray& Msg, DWORD timeout=INFINITE);

// private/protected members <not shown for brevity>
};