Bring OS2 port up to date. Thanks Jochen
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3923
This commit is contained in:
parent
b0c72903e4
commit
79419f1f53
6 changed files with 27 additions and 22 deletions
|
@ -24,7 +24,6 @@ dnl perharps join this with the other target depended checks. move them upwards
|
|||
if test x$host = xi386-pc-os2-emx ; then
|
||||
CXXFLAGS="$CXXFLAGS -Zmt"
|
||||
LDFLAGS="$LDFLAGS -Zomf -Zmt"
|
||||
LIBS="$LIBS -los2me"
|
||||
fi
|
||||
|
||||
dnl Check for SDL
|
||||
|
|
|
@ -112,7 +112,7 @@ typedef struct {
|
|||
|
||||
typedef enum {
|
||||
PART,
|
||||
LINE,
|
||||
DRAWLINE,
|
||||
EGALINE
|
||||
} Drawmode;
|
||||
|
||||
|
|
|
@ -410,8 +410,11 @@ static void MIXER_Mix_NoSound(void) {
|
|||
mixer.tick_remain&=MIXER_REMAIN;
|
||||
mixer.done=0;
|
||||
}
|
||||
|
||||
#ifdef OS2
|
||||
static void SDL_CALL MIXER_CallBack(void * userdata, Uint8 *stream, int len) {
|
||||
#else
|
||||
static void MIXER_CallBack(void * userdata, Uint8 *stream, int len) {
|
||||
#endif
|
||||
Bitu need=(Bitu)len/MIXER_SSIZE;
|
||||
Bit16s * output=(Bit16s *)stream;
|
||||
Bitu reduce;
|
||||
|
|
|
@ -482,11 +482,13 @@ void SERIAL_setRTS(COMPORT port, bool value) {
|
|||
#define INCL_DOSDEVIOCTL
|
||||
#define INCL_DOSPROCESS
|
||||
#include <os2.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct _COMPORT {
|
||||
HFILE porthandle;
|
||||
bool breakstatus;
|
||||
DCBINFO backup;
|
||||
DCBINFO orig_dcb;
|
||||
};
|
||||
// TODO: THIS IS INCOMPLETE and UNTESTED.
|
||||
|
||||
|
@ -495,18 +497,18 @@ bool SERIAL_open(const char* portname, COMPORT* port) {
|
|||
COMPORT cp = (_COMPORT*)malloc(sizeof(_COMPORT));
|
||||
if(cp == NULL) return false;
|
||||
cp->porthandle=0;
|
||||
cp->breakstatus=false;
|
||||
|
||||
USHORT errors = 0;
|
||||
ULONG ulAction = 0;
|
||||
APIRET rc = DosOpen(portname, &cp->porthandle,
|
||||
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;
|
||||
}
|
||||
|
||||
ULONG ulParmLen = sizeof(DCBINFO);
|
||||
rc = DosDevIOCtl(hCom, IOCTL_ASYNC, ASYNC_GETDCBINFO,
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_GETDCBINFO,
|
||||
0, 0, 0, &cp->orig_dcb, ulParmLen, &ulParmLen);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
|
@ -517,18 +519,17 @@ bool SERIAL_open(const char* portname, COMPORT* port) {
|
|||
|
||||
newdcb.usWriteTimeout = 0;
|
||||
newdcb.usReadTimeout = 0; //65535;
|
||||
newdcb.fbCtlHndShake = dcb.fbFlowReplace = 0;
|
||||
newdcb.fbCtlHndShake = cp->orig_dcb.fbFlowReplace = 0;
|
||||
newdcb.fbTimeout = 6;
|
||||
|
||||
rc = DosDevIOCtl(hCom, IOCTL_ASYNC, ASYNC_SETDCBINFO,
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_SETDCBINFO,
|
||||
&newdcb, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
}
|
||||
|
||||
USHORT errors = 0;
|
||||
ulParmLen = sizeof(errors);
|
||||
rc = DosDevIOCtl(hCom, IOCTL_ASYNC, ASYNC_GETCOMMERROR,
|
||||
rc = DosDevIOCtl(cp->porthandle, IOCTL_ASYNC, ASYNC_GETCOMMERROR,
|
||||
0, 0, 0, &errors, ulParmLen, &ulParmLen);
|
||||
if ( rc != NO_ERROR) {
|
||||
goto cleanup_error;
|
||||
|
@ -539,7 +540,7 @@ bool SERIAL_open(const char* portname, COMPORT* port) {
|
|||
|
||||
cleanup_error:
|
||||
// TODO error string - rc value
|
||||
if (cp->porthandle != 0) CloseHandle(cp->porthandle);
|
||||
if (cp->porthandle != 0) DosClose(cp->porthandle);
|
||||
free(cp);
|
||||
return false;
|
||||
}
|
||||
|
@ -553,14 +554,12 @@ void SERIAL_close(COMPORT port) {
|
|||
if (port->porthandle != 0) {
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETDCBINFO,
|
||||
&port->orig_dcb, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
SetCmmState(port->porthandle, &port->orig_dcb);
|
||||
DosClose (port->porthandle);
|
||||
}
|
||||
free(port);
|
||||
}
|
||||
bool SERIAL_sendchar(COMPORT port, char data) {
|
||||
ULONG bytesWritten = 0;
|
||||
if(port->breakstatus) return true; // does OS/2 need this?
|
||||
|
||||
APIRET rc = DosWrite(port->porthandle, &data, 1, &bytesWritten);
|
||||
if (rc == NO_ERROR && bytesWritten > 0) return true;
|
||||
|
@ -571,7 +570,7 @@ void SERIAL_setBREAK(COMPORT port, bool value) {
|
|||
USHORT error;
|
||||
ULONG ulParmLen = sizeof(error);
|
||||
DosDevIOCtl(port->porthandle, IOCTL_ASYNC,
|
||||
value? ASYNC_SETBREAKON:ASYNC_SETBREAKOFF,
|
||||
value ? ASYNC_SETBREAKON : ASYNC_SETBREAKOFF,
|
||||
0,0,0, &error, ulParmLen, &ulParmLen);
|
||||
}
|
||||
|
||||
|
@ -656,7 +655,7 @@ bool SERIAL_setCommParameters(COMPORT port,
|
|||
setbaud.baud = baudrate;
|
||||
setbaud.fraction = 0;
|
||||
ULONG ulParmLen = sizeof(setbaud);
|
||||
APIRET rc = DosDevIOCtl(hCom, IOCTL_ASYNC, ASYNC_EXTSETBAUDRATE,
|
||||
APIRET rc = DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_EXTSETBAUDRATE,
|
||||
&setbaud, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if (rc != NO_ERROR) {
|
||||
return false;
|
||||
|
@ -697,7 +696,7 @@ bool SERIAL_setCommParameters(COMPORT port,
|
|||
}
|
||||
// set it
|
||||
ulParmLen = sizeof(paramline);
|
||||
rc = DosDevIOCtl(hCom, IOCTL_ASYNC, ASYNC_SETLINECTRL,
|
||||
rc = DosDevIOCtl(port->porthandle, IOCTL_ASYNC, ASYNC_SETLINECTRL,
|
||||
¶mline, ulParmLen, &ulParmLen, 0, 0, 0);
|
||||
if ( rc != NO_ERROR)
|
||||
return false;
|
||||
|
|
|
@ -64,7 +64,11 @@ 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)->
|
||||
|
|
|
@ -946,7 +946,7 @@ static void VGA_VerticalTimer(Bitu /*val*/) {
|
|||
vga.draw.parts_left = vga.draw.parts_total;
|
||||
PIC_AddEvent(VGA_DrawPart,(float)vga.draw.delay.parts + draw_skip,vga.draw.parts_lines);
|
||||
break;
|
||||
case LINE:
|
||||
case DRAWLINE:
|
||||
case EGALINE:
|
||||
if (GCC_UNLIKELY(vga.draw.lines_done < vga.draw.lines_total)) {
|
||||
LOG(LOG_VGAMISC,LOG_NORMAL)( "Lines left: %d",
|
||||
|
@ -1042,7 +1042,7 @@ void VGA_SetupDrawing(Bitu /*val*/) {
|
|||
case MCH_CGA:
|
||||
case MCH_PCJR:
|
||||
case MCH_TANDY:
|
||||
vga.draw.mode = LINE;
|
||||
vga.draw.mode = DRAWLINE;
|
||||
break;
|
||||
case MCH_EGA:
|
||||
// Note: The Paradise SVGA uses the same panning mechanism as EGA
|
||||
|
@ -1050,7 +1050,7 @@ void VGA_SetupDrawing(Bitu /*val*/) {
|
|||
break;
|
||||
case MCH_VGA:
|
||||
if (svgaCard==SVGA_None) {
|
||||
vga.draw.mode = LINE;
|
||||
vga.draw.mode = DRAWLINE;
|
||||
break;
|
||||
}
|
||||
// fall-through
|
||||
|
|
Loading…
Add table
Reference in a new issue