From c8b4ac03a8b6440c5403033428e0938094c6567b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Sat, 5 Jul 2008 08:54:59 +0000 Subject: [PATCH] disable 0xff escaping for transparent nullmodem mode Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3176 --- src/hardware/serialport/nullmodem.cpp | 29 +++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/hardware/serialport/nullmodem.cpp b/src/hardware/serialport/nullmodem.cpp index f0853c17..2c017460 100644 --- a/src/hardware/serialport/nullmodem.cpp +++ b/src/hardware/serialport/nullmodem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2007 The DOSBox Team + * Copyright (C) 2002-2008 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 @@ -16,6 +16,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* $Id: nullmodem.cpp,v 1.4 2008-07-05 08:54:59 c2woody Exp $ */ + #include "dosbox.h" #if C_MODEM @@ -139,13 +141,13 @@ CNullModem::CNullModem(Bitu id, CommandLine* cmd):CSerial (id, cmd) { if(cmd->FindStringBegin("server:",tmpstring,false)) { // we are a client const char* hostnamechar=tmpstring.c_str(); - Bitu hostlen=strlen(hostnamechar)+1; + size_t hostlen=strlen(hostnamechar)+1; if(hostlen>sizeof(hostnamebuffer)) { hostlen=sizeof(hostnamebuffer); hostnamebuffer[sizeof(hostnamebuffer)-1]=0; } memcpy(hostnamebuffer,hostnamechar,hostlen); - clientport=temptcpport; + clientport=(Bit16u)temptcpport; if(dtrrespect) { // we connect as soon as DTR is switched on setEvent(SERIAL_NULLMODEM_DTR_EVENT, 50); @@ -176,9 +178,10 @@ CNullModem::~CNullModem () { if(serversocket) delete serversocket; if(clientsocket) delete clientsocket; // remove events - for(Bitu i = SERIAL_BASE_EVENT_COUNT+1; - i <= SERIAL_NULLMODEM_EVENT_COUNT; i++) + for(Bit16u i = SERIAL_BASE_EVENT_COUNT+1; + i <= SERIAL_NULLMODEM_EVENT_COUNT; i++) { removeEvent(i); + } } void CNullModem::WriteChar(Bit8u data) { @@ -194,7 +197,7 @@ void CNullModem::WriteChar(Bit8u data) { Bits CNullModem::readChar() { Bits rxchar = clientsocket->GetcharNonBlock(); - if(telnet && rxchar>=0) return TelnetEmulation(rxchar); + if(telnet && rxchar>=0) return TelnetEmulation((Bit8u)rxchar); else if(rxchar==0xff && !transparent) {// escape char // get the next char Bits rxchar = clientsocket->GetcharNonBlock(); @@ -300,7 +303,8 @@ void CNullModem::handleUpperEvent(Bit16u type) { case SERIAL_SERVER_POLLING_EVENT: { // As long as nothing is connected to out server poll the // connection. - if((clientsocket=serversocket->Accept())) { + clientsocket=serversocket->Accept(); + if(clientsocket) { Bit8u peeripbuf[16]; clientsocket->GetRemoteAddressString(peeripbuf); LOG_MSG("Serial%d: A client (%s) has connected.",idnumber+1,peeripbuf); @@ -338,7 +342,7 @@ void CNullModem::handleUpperEvent(Bit16u type) { /* updatePortConfig is called when emulated app changes the serial port **/ /* parameters baudrate, stopbits, number of databits, parity. **/ /*****************************************************************************/ -void CNullModem::updatePortConfig (Bit16u divider, Bit8u lcr) { +void CNullModem::updatePortConfig (Bit16u /*divider*/, Bit8u /*lcr*/) { } @@ -351,13 +355,12 @@ void CNullModem::transmitByte (Bit8u val, bool first) { // transmit it later in THR_Event if(first) { setEvent(SERIAL_THR_EVENT, bytetime/8); - } - else { + } else { //if(clientsocket) clientsocket->Putchar(val); setEvent(SERIAL_TX_EVENT, bytetime); } - /*****************************/ - if(val==0xff) WriteChar(0xff); + // disable 0xff escaping when transparent mode is enabled + if (!transparent && (val==0xff)) WriteChar(0xff); WriteChar(val); } @@ -471,7 +474,7 @@ Bits CNullModem::TelnetEmulation(Bit8u data) { /* setBreak(val) switches break on or off **/ /*****************************************************************************/ -void CNullModem::setBreak (bool value) { +void CNullModem::setBreak (bool /*value*/) { CNullModem::setRTSDTR(getRTS(), getDTR()); }