Softmodem changes related to the dail command. (Beta 2)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3261
This commit is contained in:
parent
f47d48ba07
commit
b81691c53c
1 changed files with 49 additions and 48 deletions
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: softmodem.cpp,v 1.9 2007-11-01 12:11:40 qbix79 Exp $ */
|
||||
/* $Id: softmodem.cpp,v 1.10 2009-01-14 22:24:39 qbix79 Exp $ */
|
||||
|
||||
#include "dosbox.h"
|
||||
|
||||
|
@ -329,60 +329,61 @@ void CSerialModem::DoCommand() {
|
|||
SendRes(ResOK);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check for dial command */
|
||||
if(strncmp(cmdbuf,"ATD3",3)==0) {
|
||||
char * foundstr=&cmdbuf[3];
|
||||
if (*foundstr=='T' || *foundstr=='P') foundstr++;
|
||||
/* Small protection against empty line */
|
||||
if (!foundstr[0]) {
|
||||
SendRes(ResERROR);
|
||||
return;
|
||||
}
|
||||
char* helper;
|
||||
// scan for and remove spaces; weird bug: with leading spaces in the string,
|
||||
// SDLNet_ResolveHost will return no error but not work anyway (win)
|
||||
while(foundstr[0]==' ') foundstr++;
|
||||
helper=foundstr;
|
||||
helper+=strlen(foundstr);
|
||||
while(helper[0]==' ') {
|
||||
helper[0]=0;
|
||||
helper--;
|
||||
}
|
||||
|
||||
if (strlen(foundstr) >= 12) {
|
||||
// Check if supplied parameter only consists of digits
|
||||
bool isNum = true;
|
||||
for (Bitu i=0; i<strlen(foundstr); i++)
|
||||
if (foundstr[i] < '0' || foundstr[i] > '9')
|
||||
isNum = false;
|
||||
if (isNum) {
|
||||
// Parameter is a number with at least 12 digits => this cannot be a valid IP/name
|
||||
// Transform by adding dots
|
||||
char buffer[128];
|
||||
Bitu j = 0;
|
||||
for (Bitu i=0; i<strlen(foundstr); i++) {
|
||||
buffer[j++] = foundstr[i];
|
||||
// Add a dot after the third, sixth and ninth number
|
||||
if (i == 2 || i == 5 || i == 8)
|
||||
buffer[j++] = '.';
|
||||
// If the string is longer than 12 digits, interpret the rest as port
|
||||
if (i == 11 && strlen(foundstr)>12)
|
||||
buffer[j++] = ':';
|
||||
}
|
||||
buffer[j] = 0;
|
||||
foundstr = buffer;
|
||||
}
|
||||
}
|
||||
Dial(foundstr);
|
||||
return;
|
||||
}
|
||||
char * scanbuf;
|
||||
scanbuf=&cmdbuf[2];
|
||||
char chr;
|
||||
Bitu num;
|
||||
while (chr=*scanbuf++) {
|
||||
switch (chr) {
|
||||
case 'D': // Dial
|
||||
{
|
||||
char * foundstr=&scanbuf[0];
|
||||
if (*foundstr=='T' || *foundstr=='P') foundstr++;
|
||||
// Small protection against empty line and long string
|
||||
if ((!foundstr[0]) || (strlen(foundstr)>100)) {
|
||||
SendRes(ResERROR);
|
||||
return;
|
||||
}
|
||||
char* helper;
|
||||
// scan for and remove spaces; weird bug: with leading spaces in the string,
|
||||
// SDLNet_ResolveHost will return no error but not work anyway (win)
|
||||
while(foundstr[0]==' ') foundstr++;
|
||||
helper=foundstr;
|
||||
helper+=strlen(foundstr);
|
||||
while(helper[0]==' ') {
|
||||
helper[0]=0;
|
||||
helper--;
|
||||
}
|
||||
if (strlen(foundstr) >= 12) {
|
||||
// Check if supplied parameter only consists of digits
|
||||
bool isNum = true;
|
||||
for (Bitu i=0; i<strlen(foundstr); i++)
|
||||
if (foundstr[i] < '0' || foundstr[i] > '9')
|
||||
isNum = false;
|
||||
if (isNum) {
|
||||
// Parameter is a number with at least 12 digits => this cannot
|
||||
// be a valid IP/name
|
||||
// Transform by adding dots
|
||||
char buffer[128];
|
||||
Bitu j = 0;
|
||||
for (Bitu i=0; i<strlen(foundstr); i++) {
|
||||
buffer[j++] = foundstr[i];
|
||||
// Add a dot after the third, sixth and ninth number
|
||||
if (i == 2 || i == 5 || i == 8)
|
||||
buffer[j++] = '.';
|
||||
// If the string is longer than 12 digits,
|
||||
// interpret the rest as port
|
||||
if (i == 11 && strlen(foundstr)>12)
|
||||
buffer[j++] = ':';
|
||||
}
|
||||
buffer[j] = 0;
|
||||
foundstr = buffer;
|
||||
}
|
||||
}
|
||||
Dial(foundstr);
|
||||
return;
|
||||
}
|
||||
case 'I': //Some strings about firmware
|
||||
switch (num=ScanNumber(scanbuf)) {
|
||||
case 3:SendLine("DosBox Emulated Modem Firmware V1.00");break;
|
||||
|
|
Loading…
Add table
Reference in a new issue