⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 softmodem.h

📁 DOSBox emulates a full x86 pc with sound and dos. Its main use is to run old dosgames on platforms w
💻 H
字号:
/* *  Copyright (C) 2002-2007  The DOSBox Team * *  This program 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 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//* $Id: softmodem.h,v 1.7 2007/01/13 08:35:49 qbix79 Exp $ */#ifndef DOSBOX_SERIALMODEM_H#define DOSBOX_SERIALMODEM_H#include "dosbox.h"#if C_MODEM#include "serialport.h"#include "misc_util.h"#define MODEMSPD 57600#define SREGS 100//If it's too high you overflow terminal clients buffers i think#define MODEM_BUFFER_QUEUE_SIZE 1024#define MODEM_DEFAULT_PORT 23#define MODEM_TX_EVENT SERIAL_BASE_EVENT_COUNT + 1#define MODEM_RX_POLLING SERIAL_BASE_EVENT_COUNT + 2#define MODEM_RING_EVENT SERIAL_BASE_EVENT_COUNT + 3#define SERIAL_MODEM_EVENT_COUNT SERIAL_BASE_EVENT_COUNT+3enum ResTypes {	ResNONE,	ResOK,ResERROR,	ResCONNECT,ResRING,	ResBUSY,ResNODIALTONE,ResNOCARRIER,};#define TEL_CLIENT 0#define TEL_SERVER 1class CFifo {public:	CFifo(Bitu _size) {		size=_size;		pos=used=0;		data=new Bit8u[size];	}	~CFifo() {		delete[] data;	}	INLINE Bitu left(void) {		return size-used;	}	INLINE Bitu inuse(void) {		return used;	}	void clear(void) {		used=pos=0;	}	void addb(Bit8u _val) {		if(used>=size) {			LOG_MSG("FIFO Overflow!");			return;		}		//assert(used<size);		Bitu where=pos+used;		if (where>=size) where-=size;		data[where]=_val;		//LOG_MSG("+%x",_val);		used++;	}	void adds(Bit8u * _str,Bitu _len) {		if((used+_len)>size) {			LOG_MSG("FIFO Overflow!");			return;		}				//assert((used+_len)<=size);		Bitu where=pos+used;		used+=_len;		while (_len--) {			if (where>=size) where-=size;			//LOG_MSG("+%x",*_str);			data[where++]=*_str++;		}	}	Bit8u getb(void) {		if (!used) {			LOG_MSG("MODEM: FIFO UNDERFLOW!");			return data[pos];		}			Bitu where=pos;		if (++pos>=size) pos-=size;		used--;		//LOG_MSG("-%x",data[where]);		return data[where];	}	void gets(Bit8u * _str,Bitu _len) {		if (!used) {			LOG_MSG("MODEM: FIFO UNDERFLOW!");			return;		}			//assert(used>=_len);		used-=_len;		while (_len--) {			//LOG_MSG("-%x",data[pos]);			*_str++=data[pos];			if (++pos>=size) pos-=size;		}	}private:	Bit8u * data;	Bitu size,pos,used;};#define MREG_AUTOANSWER_COUNT 0#define MREG_RING_COUNT 1#define MREG_ESCAPE_CHAR 2#define MREG_CR_CHAR 3#define MREG_LF_CHAR 4#define MREG_BACKSPACE_CHAR 5class CSerialModem : public CSerial {public:	CFifo *rqueue;	CFifo *tqueue;	CSerialModem(Bitu id, CommandLine* cmd);	~CSerialModem();	void Reset();	void SendLine(const char *line);	void SendRes(ResTypes response);	void SendNumber(Bitu val);	void EnterIdleState();	void EnterConnectedState();	void openConnection(void);	bool Dial(char * host);	void AcceptIncomingCall(void);	Bitu ScanNumber(char * & scan);	void DoCommand();		void MC_Changed(Bitu new_mc);	void TelnetEmulation(Bit8u * data, Bitu size);	//TODO	void Timer2(void);	void handleUpperEvent(Bit16u type);	void RXBufferEmpty();	void transmitByte(Bit8u val, bool first);	void updatePortConfig(Bit16u divider, Bit8u lcr);	void updateMSR();	void setBreak(bool);	void setRTSDTR(bool rts, bool dtr);	void setRTS(bool val);	void setDTR(bool val);protected:	char cmdbuf[255];	bool commandmode;		// true: interpret input as commands	bool echo;				// local echo on or off	bool oldDTRstate;	bool ringing;	//bool response;	bool numericresponse;	// true: send control response as number.							// false: send text (i.e. NO DIALTONE)	bool telnetmode;		// true: process IAC commands.		bool connected;	Bitu doresponse;	Bit8u waiting_tx_character;	Bitu cmdpause;	Bits ringtimer;	Bits ringcount;	Bitu plusinc;	Bitu cmdpos;	Bitu flowcontrol;	Bit8u tmpbuf[MODEM_BUFFER_QUEUE_SIZE];	Bitu listenport;	Bit8u reg[SREGS];			TCPServerSocket* serversocket;	TCPClientSocket* clientsocket;	TCPClientSocket* waitingclientsocket;	struct {		bool binary[2];		bool echo[2];		bool supressGA[2];		bool timingMark[2];							bool inIAC;		bool recCommand;		Bit8u command;	} telClient;	struct {		bool active;		double f1, f2;		Bitu len,pos;		char str[256];	} dial;};#endif#endif 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -