1
0
Fork 0

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:
Peter Veenstra 2015-07-08 12:01:33 +00:00
parent b0c72903e4
commit 79419f1f53
6 changed files with 27 additions and 22 deletions

View file

@ -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

View file

@ -112,7 +112,7 @@ typedef struct {
typedef enum {
PART,
LINE,
DRAWLINE,
EGALINE
} Drawmode;

View file

@ -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;

View file

@ -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,
&paramline, ulParmLen, &ulParmLen, 0, 0, 0);
if ( rc != NO_ERROR)
return false;

View file

@ -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)->

View file

@ -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