CnC_Remastered_Collection/REDALERT/NULLMGR.H

224 lines
7.2 KiB
C++

//
// Copyright 2020 Electronic Arts Inc.
//
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
// software: you can redistribute it and/or modify it under the terms of
// the GNU General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
// in the hope that it will be useful, but with permitted additional restrictions
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
// distributed with this program. You should have received a copy of the
// GNU General Public License along with permitted additional restrictions
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
/* $Header: /CounterStrike/NULLMGR.H 1 3/03/97 10:25a Joe_bostic $ */
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
***************************************************************************
* *
* Project Name : Command & Conquer *
* *
* File Name : CONNECT.H *
* *
* Programmer : Bill Randolph *
* *
* Start Date : December 19, 1994 *
* *
* Last Update : April 3, 1995 [BR] *
* *
*-------------------------------------------------------------------------*
* *
* This is the Connection Manager for a NULL-Modem connection. *
* *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef NULLMODEM_H
#define NULLMODEM_H
/*
********************************* Includes **********************************
*/
#include "nullconn.h"
#include "connmgr.h"
#include "commlib.h"
/*
***************************** Class Declaration *****************************
*/
class NullModemClass : public ConnManClass
{
/*
---------------------------- Public Interface ----------------------------
*/
public:
enum SendModemEnum {
MODEM_CMD_TIMEOUT = 0,
MODEM_CMD_OK,
MODEM_CMD_0,
MODEM_CMD_ERROR
};
char *BuildBuf;
int MaxLen;
char *EchoBuf;
int EchoSize;
int EchoCount;
int OldIRQPri;
int ModemVerboseOn;
int ModemEchoOn;
int ModemWaitCarrier;
int ModemCarrierDetect;
int ModemCarrierLoss;
int ModemHangupDelay;
int ModemGuardTime;
char ModemEscapeCode;
static void (*OrigAbortModemFunc)(int);
static KeyNumType Input;
static GadgetClass *Commands; // button list
/*
** Constructor/destructor.
*/
NullModemClass (int numsend, int numreceive, int maxlen, unsigned short magicnum);
virtual ~NullModemClass ();
/*
** This is the main initialization routine.
*/
int Init( int port, int irq, char *dev_name, int baud, char parity, int wordlength, int stopbits, int flowcontrol );
int Delete_Connection( void );
virtual int Num_Connections(void);
virtual int Connection_ID(int ) {return (0);}
virtual int Connection_Index(int ) {return (0);}
int Init_Send_Queue( void );
void Shutdown( void );
virtual void Set_Timing (unsigned long retrydelta,
unsigned long maxretries, unsigned long timeout);
/*
** This is how the application sends & receives messages.
*/
int Send_Message (void *buf, int buflen, int ack_req = 1);
int Get_Message (void *buf, int *buflen);
/*
** These are for compatibility
*/
virtual int Send_Private_Message (void *buf, int buflen,
int ack_req = 1, int = CONNECTION_NONE)
{return (Send_Message(buf,buflen,ack_req));}
virtual int Get_Private_Message (void *buf, int *buflen, int *)
{return (Get_Message(buf,buflen));}
/*
** The main polling routine; should be called as often as possible.
*/
virtual int Service (void);
/*
** Queue utility routines. The application can determine how many
** messages are in the send/receive queues, and the queue's average
** response time (in clock ticks).
*/
int Num_Send(void);
int Num_Receive(void);
virtual unsigned long Response_Time(void);
virtual void Reset_Response_Time(void);
void * Oldest_Send(void);
virtual void Configure_Debug(int index, int type_offset, int type_size,
char **names, int namestart, int namecount);
#ifdef CHEAT_KEYS
virtual void Mono_Debug_Print(int index, int refresh = 0);
#endif
/*
** These are for compatibility
*/
virtual int Global_Num_Send(void) {return (Num_Send());}
virtual int Global_Num_Receive(void) {return (Num_Receive());}
virtual int Private_Num_Send(int = CONNECTION_NONE)
{return (Num_Send());}
virtual int Private_Num_Receive(int = CONNECTION_NONE)
{return (Num_Receive());}
DetectPortType Detect_Port( SerialSettingsType *settings );
int Detect_Modem( SerialSettingsType *settings, int reconnect = 0 );
DialStatusType Dial_Modem(char *string, DialMethodType method, int reconnect = 0);
DialStatusType Answer_Modem(int reconnect = 0);
int Hangup_Modem(void);
void Setup_Modem_Echo(void (*func)(char c));
void Remove_Modem_Echo(void);
void Print_EchoBuf(void);
void Reset_EchoBuf(void);
static int Abort_Modem(PORT *);
void Setup_Abort_Modem(void);
void Remove_Abort_Modem(void);
int Change_IRQ_Priority(int irq);
int Get_Modem_Status(void);
int Send_Modem_Command( char *command, char terminator, char *buffer, int buflen, int delay, int retries );
int Verify_And_Convert_To_Int( char *buffer );
/*
** Private Interface.
*/
private:
/*
** This is a pointer to the NULL-Modem Connection object.
*/
NullModemConnClass *Connection;
int NumConnections; // # connection objects in use
#ifdef WIN32
/*
** This is the Win95 port handle
*/
HANDLE PortHandle;
#else //WIN32
/*
** This is the Greenleaf port handle.
*/
PORT *Port;
#endif //WIN32
int NumSend;
int NumReceive;
unsigned short MagicNum;
/*
** This is the staging buffer for parsing incoming packets.
** RXSize is the allocated size of the RX buffer.
** RXCount is the # of characters we currently have in our buffer.
*/
char *RXBuf;
int RXSize;
int RXCount;
/*.....................................................................
Timing parameters for all connections
.....................................................................*/
unsigned long RetryDelta;
unsigned long MaxRetries;
unsigned long Timeout;
/*
** Various Statistics
*/
int SendOverflows;
int ReceiveOverflows;
int CRCErrors;
};
#endif
/*************************** end of nullmgr.h ******************************/