224 lines
7.2 KiB
C++
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 ******************************/
|