From 79419f1f534c4c32d100784bc29b4a954ae1c198 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Wed, 8 Jul 2015 12:01:33 +0000 Subject: [PATCH] Bring OS2 port up to date. Thanks Jochen Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3923 --- configure.ac | 1 - include/vga.h | 2 +- src/hardware/mixer.cpp | 5 ++++- src/hardware/serialport/libserial.cpp | 31 +++++++++++++-------------- src/hardware/serialport/misc_util.cpp | 4 ++++ src/hardware/vga_draw.cpp | 6 +++--- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 455997e1..dc2aa0ff 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/include/vga.h b/include/vga.h index 0bbeb567..aa570ec4 100644 --- a/include/vga.h +++ b/include/vga.h @@ -112,7 +112,7 @@ typedef struct { typedef enum { PART, - LINE, + DRAWLINE, EGALINE } Drawmode; diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index e49ccd57..0e74a0ce 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -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; diff --git a/src/hardware/serialport/libserial.cpp b/src/hardware/serialport/libserial.cpp index b55e1778..aa65571a 100644 --- a/src/hardware/serialport/libserial.cpp +++ b/src/hardware/serialport/libserial.cpp @@ -482,11 +482,13 @@ void SERIAL_setRTS(COMPORT port, bool value) { #define INCL_DOSDEVIOCTL #define INCL_DOSPROCESS #include +#include +#include +#include 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; diff --git a/src/hardware/serialport/misc_util.cpp b/src/hardware/serialport/misc_util.cpp index 302dfb7d..147ef2fe 100644 --- a/src/hardware/serialport/misc_util.cpp +++ b/src/hardware/serialport/misc_util.cpp @@ -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)-> diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index bd1cadc8..470f5e61 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -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