Remove code ifdefed for OS/2
Cleanup before replacing SDL1.2 with SDL2. OS/2 support was introduced in DOSBox in March 2006. OS/2 reached EOL in December 2006. As of 2019, OS/2 is being continued by proprietary 32-bit only ArcaOS, although there is no official SDL2 support, despite pledges from SDL2 maintainers.
This commit is contained in:
parent
ef2686ac02
commit
5f9ac5eeab
19 changed files with 29 additions and 529 deletions
|
@ -478,232 +478,3 @@ void SERIAL_setRTS(COMPORT port, bool value) {
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef OS2
|
||||
// OS/2 related headers
|
||||
#define INCL_DOSFILEMGR
|
||||
#define INCL_DOSERRORS
|
||||
#define INCL_DOSDEVICES
|
||||
#define INCL_DOSDEVIOCTL
|
||||
#define INCL_DOSPROCESS
|
||||
#include <os2.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct _COMPORT {
|
||||
HFILE porthandle;
|
||||
DCBINFO orig_dcb;
|
||||
};
|
||||
// TODO: THIS IS INCOMPLETE and UNTESTED.
|
||||
|
||||
bool SERIAL_open(const char* portname, COMPORT* port) {
|
||||
// allocate COMPORT structure
|
||||
COMPORT cp = (_COMPORT*)malloc(sizeof(_COMPORT));
|
||||
if(cp == NULL) return false;
|
||||
cp->porthandle=0;
|
||||
|
||||
USHORT errors = 0;
|
||||
ULONG ulAction = 0;
|
||||
ULONG ulParmLen = sizeof(DCBINFO);
|
||||
APIRET rc = DosOpen((PSZ)portname, &cp->porthandle,
|
||||
&ulAction, 0L, FILE_NORMAL, FILE_OPEN,
|
||||
OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | OPEN_FLAGS_SEQUENTIAL, 0L);
|
||||
if (rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
}
|
||||
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_GETDCBINFO,
|
||||
0, 0, 0, &cp->orig_dcb, ulParmLen, &ulParmLen);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
}
|
||||
// configure the port for polling
|
||||
DCBINFO newdcb;
|
||||
memcpy(&newdcb,&cp->orig_dcb,sizeof(DCBINFO));
|
||||
|
||||
newdcb.usWriteTimeout = 0;
|
||||
newdcb.usReadTimeout = 0; //65535;
|
||||
newdcb.fbCtlHndShake = cp->orig_dcb.fbFlowReplace = 0;
|
||||
newdcb.fbTimeout = 6;
|
||||
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_SETDCBINFO,
|
||||
&newdcb, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
}
|
||||
|
||||
ulParmLen = sizeof(errors);
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_GETCOMMERROR,
|
||||
0, 0, 0, &errors, ulParmLen, &ulParmLen);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
}
|
||||
|
||||
*port = cp;
|
||||
return true;
|
||||
|
||||
cleanup_error:
|
||||
// TODO error string - rc value
|
||||
if (cp->porthandle != 0) DosClose(cp->porthandle);
|
||||
free(cp);
|
||||
return false;
|
||||
}
|
||||
|
||||
void SERIAL_getErrorString(char* buffer, size_t length) {
|
||||
sprintf(buffer, "TODO: error handling is not fun");
|
||||
}
|
||||
void SERIAL_close(COMPORT port) {
|
||||
ULONG ulParmLen = sizeof(DCBINFO);
|
||||
// restore original DCB, close handle, free the COMPORT struct
|
||||
if (port->porthandle != 0) {
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETDCBINFO,
|
||||
&port->orig_dcb, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
DosClose (port->porthandle);
|
||||
}
|
||||
free(port);
|
||||
}
|
||||
bool SERIAL_sendchar(COMPORT port, char data) {
|
||||
ULONG bytesWritten = 0;
|
||||
|
||||
APIRET rc = DosWrite(port->porthandle, &data, 1, &bytesWritten);
|
||||
if (rc == NO_ERROR && bytesWritten > 0) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
void SERIAL_setBREAK(COMPORT port, bool value) {
|
||||
USHORT error;
|
||||
ULONG ulParmLen = sizeof(error);
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC,
|
||||
value ? ASYNC_SETBREAKON : ASYNC_SETBREAKOFF,
|
||||
0,0,0, &error, ulParmLen, &ulParmLen);
|
||||
}
|
||||
|
||||
int SERIAL_getextchar(COMPORT port) {
|
||||
ULONG dwRead = 0; // Number of chars read
|
||||
char chRead;
|
||||
|
||||
int retval = 0;
|
||||
// receive a byte; TODO communicate failure
|
||||
if (DosRead(port->porthandle, &chRead, 1, &dwRead) == NO_ERROR) {
|
||||
if (dwRead) {
|
||||
// check for errors; will OS/2 clear the error on reading its data?
|
||||
// if yes then this is in wrong order
|
||||
USHORT errors = 0, event = 0;
|
||||
ULONG ulParmLen = sizeof(errors);
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_GETCOMMEVENT,
|
||||
0, 0, 0, &event, ulParmLen, &ulParmLen);
|
||||
if (event & (64 + 128) ) { // Break (Bit 6) or Frame or Parity (Bit 7) error
|
||||
Bit8u errreg = 0;
|
||||
if (event & 64) retval |= SERIAL_BREAK_ERR;
|
||||
if (event & 128) {
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_GETCOMMERROR,
|
||||
0, 0, 0, &errors, ulParmLen, &ulParmLen);
|
||||
if (errors & 8) retval |= SERIAL_FRAMING_ERR;
|
||||
if (errors & 4) retval |= SERIAL_PARITY_ERR;
|
||||
}
|
||||
}
|
||||
retval |= (chRead & 0xff);
|
||||
retval |= 0x10000;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
int SERIAL_getmodemstatus(COMPORT port) {
|
||||
UCHAR dptr = 0;
|
||||
ULONG ulParmLen = sizeof(dptr);
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_GETMODEMINPUT,
|
||||
0, 0, 0, &dptr, ulParmLen, &ulParmLen);
|
||||
// bits are the same as return value
|
||||
return (int)dptr;
|
||||
}
|
||||
void SERIAL_setDTR(COMPORT port, bool value) {
|
||||
UCHAR masks[2];
|
||||
ULONG ulParmLen = sizeof(masks);
|
||||
if(value) {
|
||||
masks[0]=0x01;
|
||||
masks[1]=0xFF;
|
||||
} else {
|
||||
masks[0]=0x00;
|
||||
masks[1]=0xFE;
|
||||
}
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETMODEMCTRL,
|
||||
0,0,0, &masks, ulParmLen, &ulParmLen);
|
||||
}
|
||||
|
||||
void SERIAL_setRTS(COMPORT port, bool value) {
|
||||
UCHAR masks[2];
|
||||
ULONG ulParmLen = sizeof(masks);
|
||||
if(value) {
|
||||
masks[0]=0x02;
|
||||
masks[1]=0xFF;
|
||||
} else {
|
||||
masks[0]=0x00;
|
||||
masks[1]=0xFD;
|
||||
}
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETMODEMCTRL,
|
||||
0,0,0, &masks, ulParmLen, &ulParmLen);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool SERIAL_setCommParameters(COMPORT port,
|
||||
int baudrate, char parity, int stopbits, int length) {
|
||||
// baud
|
||||
struct {
|
||||
ULONG baud;
|
||||
BYTE fraction;
|
||||
} setbaud;
|
||||
|
||||
setbaud.baud = baudrate;
|
||||
setbaud.fraction = 0;
|
||||
ULONG ulParmLen = sizeof(setbaud);
|
||||
APIRET rc = DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_EXTSETBAUDRATE,
|
||||
&setbaud, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if (rc != NO_ERROR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
struct {
|
||||
UCHAR data;
|
||||
UCHAR parity;
|
||||
UCHAR stop;
|
||||
} paramline;
|
||||
|
||||
// byte length
|
||||
if(length > 8 || length < 5) {
|
||||
// TODO SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return false;
|
||||
}
|
||||
paramline.data = length;
|
||||
|
||||
// parity
|
||||
switch (parity) {
|
||||
case 'n': paramline.parity = 0; break;
|
||||
case 'o': paramline.parity = 1; break;
|
||||
case 'e': paramline.parity = 2; break;
|
||||
case 'm': paramline.parity = 3; break;
|
||||
case 's': paramline.parity = 4; break;
|
||||
default:
|
||||
// TODO SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return false;
|
||||
}
|
||||
// stopbits
|
||||
switch(stopbits) {
|
||||
case SERIAL_1STOP: paramline.stop = 0; break;
|
||||
case SERIAL_2STOP: paramline.stop = 2; break;
|
||||
case SERIAL_15STOP: paramline.stop = 1; break;
|
||||
default:
|
||||
// TODO SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return false;
|
||||
}
|
||||
// set it
|
||||
ulParmLen = sizeof(paramline);
|
||||
rc = DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETLINECTRL,
|
||||
¶mline, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if ( rc != NO_ERROR)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -64,11 +64,7 @@ TCPClientSocket::TCPClientSocket(int platformsocket) {
|
|||
((struct _TCPsocketX*)nativetcpstruct)->sflag=0;
|
||||
((struct _TCPsocketX*)nativetcpstruct)->channel=(SOCKET) platformsocket;
|
||||
sockaddr_in sa;
|
||||
#ifdef OS2
|
||||
int sz;
|
||||
#else
|
||||
socklen_t sz;
|
||||
#endif
|
||||
sz=sizeof(sa);
|
||||
if(getpeername(platformsocket, (sockaddr *)(&sa), &sz)==0) {
|
||||
((struct _TCPsocketX*)nativetcpstruct)->
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <ws2tcpip.h> //for socklen_t
|
||||
//typedef int socklen_t;
|
||||
|
||||
//Tests for BSD/OS2/LINUX
|
||||
//Tests for BSD/LINUX
|
||||
#elif defined HAVE_STDLIB_H && defined HAVE_SYS_TYPES_H && defined HAVE_SYS_SOCKET_H && defined HAVE_NETINET_IN_H
|
||||
#define NATIVESOCKETS
|
||||
#define SOCKET int
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue