int21 move a0
György 'Nog' Jeney
nog at sdf.lonestar.org
Sat Nov 9 06:55:33 CST 2002
This patch prepares the floor for the moving of funcitons of int21 to
winedos.
ChangeLog:
* dlls/winedos/int21.c
Only check if were in Win16 mode in functions that realy need it.
nog.
-------------- next part --------------
Index: dlls/winedos/int21.c
===================================================================
RCS file: /home/wine/wine/dlls/winedos/int21.c,v
retrieving revision 1.15
diff -u -r1.15 int21.c
--- dlls/winedos/int21.c 6 Nov 2002 19:57:49 -0000 1.15
+++ dlls/winedos/int21.c 9 Nov 2002 09:43:44 -0000
@@ -78,11 +78,6 @@
{
BYTE ascii;
- if (DOSVM_IsWin16()) {
- DOS3Call( context );
- return;
- }
-
RESET_CFLAG(context); /* Not sure if this is a good idea */
if(AH_reg(context) == 0x0c) /* FLUSH BUFFER AND READ STANDARD INPUT */
@@ -105,7 +100,8 @@
{
case 0x00: /* TERMINATE PROGRAM */
TRACE("TERMINATE PROGRAM\n");
- MZ_Exit( context, FALSE, 0 );
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else MZ_Exit( context, FALSE, 0 );
break;
case 0x01: /* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */
@@ -176,13 +172,17 @@
break;
case 0x25: /* SET INTERRUPT VECTOR */
- DOSVM_SetRMHandler( AL_reg(context),
- (FARPROC16)MAKESEGPTR( context->SegDs, DX_reg(context)));
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else
+ DOSVM_SetRMHandler( AL_reg(context),
+ (FARPROC16)MAKESEGPTR( context->SegDs,
+ DX_reg(context)));
break;
case 0x35: /* GET INTERRUPT VECTOR */
TRACE("GET INTERRUPT VECTOR 0x%02x\n",AL_reg(context));
- {
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else {
FARPROC16 addr = DOSVM_GetRMHandler( AL_reg(context) );
context->SegEs = SELECTOROF(addr);
SET_BX( context, OFFSETOF(addr) );
@@ -209,17 +209,22 @@
case 0x4b: /* "EXEC" - LOAD AND/OR EXECUTE PROGRAM */
TRACE("EXEC %s\n", (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx ));
- if (!MZ_Exec( context, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx),
- AL_reg(context), CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx) ))
- {
- SET_AX( context, GetLastError() );
- SET_CFLAG(context);
- }
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else
+ if(!MZ_Exec(context, CTX_SEG_OFF_TO_LIN(context, context->SegDs,
+ context->Edx), AL_reg(context),
+ CTX_SEG_OFF_TO_LIN(context, context->SegEs,
+ context->Ebx)))
+ {
+ SET_AX(context, GetLastError());
+ SET_CFLAG(context);
+ }
break;
case 0x4c: /* "EXIT" - TERMINATE WITH RETURN CODE */
TRACE("EXIT with return code %d\n",AL_reg(context));
- MZ_Exit( context, FALSE, AL_reg(context) );
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else MZ_Exit( context, FALSE, AL_reg(context) );
break;
case 0x4d: /* GET RETURN CODE */
@@ -237,11 +242,14 @@
TRACE("GET CURRENT PROCESS ID (GET PSP ADDRESS)\n");
/* FIXME: should we return the original DOS PSP upon */
/* Windows startup ? */
- SET_BX( context, DOSVM_psp );
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else SET_BX( context, DOSVM_psp );
break;
case 0x52: /* "SYSVARS" - GET LIST OF LISTS */
TRACE("SYSVARS - GET LIST OF LISTS\n");
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else
{
context->SegEs = HIWORD(DOS_LOLSeg);
SET_BX( context, FIELD_OFFSET(DOS_LISTOFLISTS, ptr_first_DPB) );
@@ -252,7 +260,8 @@
TRACE("GET CURRENT PSP ADDRESS\n");
/* FIXME: should we return the original DOS PSP upon */
/* Windows startup ? */
- SET_BX( context, DOSVM_psp );
+ if(DOSVM_IsWin16()) DOS3Call(context);
+ else SET_BX( context, DOSVM_psp );
break;
default:
More information about the wine-patches
mailing list