Alexandre Julliard : winedos: Merge the XMS handler into int31.c.

Alexandre Julliard julliard at winehq.org
Mon Jan 4 10:54:19 CST 2010


Module: wine
Branch: master
Commit: 741690faa427022f5e75c7a47be259a7257eb5bd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=741690faa427022f5e75c7a47be259a7257eb5bd

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jan  4 13:54:43 2010 +0100

winedos: Merge the XMS handler into int31.c.

---

 dlls/winedos/Makefile.in |    3 +-
 dlls/winedos/dosexe.h    |    3 -
 dlls/winedos/int31.c     |  100 ++++++++++++++++++++++++++++++++++
 dlls/winedos/xms.c       |  136 ----------------------------------------------
 4 files changed, 101 insertions(+), 141 deletions(-)

diff --git a/dlls/winedos/Makefile.in b/dlls/winedos/Makefile.in
index ae340a2..52b8173 100644
--- a/dlls/winedos/Makefile.in
+++ b/dlls/winedos/Makefile.in
@@ -33,8 +33,7 @@ C_SRCS = \
 	relay.c \
 	soundblaster.c \
 	timer.c \
-	vga.c \
-	xms.c
+	vga.c
 
 @MAKE_DLL_RULES@
 
diff --git a/dlls/winedos/dosexe.h b/dlls/winedos/dosexe.h
index 5ed8599..52a1988 100644
--- a/dlls/winedos/dosexe.h
+++ b/dlls/winedos/dosexe.h
@@ -489,7 +489,4 @@ extern char IO_pp_init(void);
 /* timer.c */
 extern void WINAPI DOSVM_Int08Handler(CONTEXT86*);
 
-/* xms.c */
-extern void XMS_Handler(CONTEXT86*);
-
 #endif /* __WINE_DOSEXE_H */
diff --git a/dlls/winedos/int31.c b/dlls/winedos/int31.c
index 5093b7a..e8cc47b 100644
--- a/dlls/winedos/int31.c
+++ b/dlls/winedos/int31.c
@@ -70,6 +70,21 @@ static WORD dpmi_flag;
 static void* lastvalloced = NULL;
 static BYTE DPMI_retval;
 
+#include "pshpack1.h"
+
+typedef struct {
+ WORD Handle;
+ DWORD Offset;
+} MOVEOFS;
+
+typedef struct {
+ DWORD Length;
+ MOVEOFS Source;
+ MOVEOFS Dest;
+} MOVESTRUCT;
+
+#include "poppack.h"
+
 /**********************************************************************
  *          DOSVM_IsDos32
  * 
@@ -818,6 +833,91 @@ static void DOSVM_FreeRMCB( CONTEXT86 *context )
 }
 
 
+static BYTE * XMS_Offset( MOVEOFS *ofs )
+{
+    if (ofs->Handle) return (BYTE*)GlobalLock16(ofs->Handle)+ofs->Offset;
+    else return PTR_REAL_TO_LIN(SELECTOROF(ofs->Offset),OFFSETOF(ofs->Offset));
+}
+
+/**********************************************************************
+ *	    XMS_Handler
+ */
+static void XMS_Handler( CONTEXT86 *context )
+{
+    switch(AH_reg(context))
+    {
+    case 0x00:   /* Get XMS version number */
+        TRACE("get XMS version number\n");
+        SET_AX( context, 0x0200 ); /* 2.0 */
+        SET_BX( context, 0x0000 ); /* internal revision */
+        SET_DX( context, 0x0001 ); /* HMA exists */
+        break;
+    case 0x08:   /* Query Free Extended Memory */
+    {
+        MEMORYSTATUS status;
+
+        TRACE("query free extended memory\n");
+        GlobalMemoryStatus( &status );
+        SET_DX( context, status.dwAvailVirtual >> 10 );
+        SET_AX( context, status.dwAvailVirtual >> 10 );
+        TRACE("returning largest %dK, total %dK\n", AX_reg(context), DX_reg(context));
+    }
+    break;
+    case 0x09:   /* Allocate Extended Memory Block */
+        TRACE("allocate extended memory block (%dK)\n",
+            DX_reg(context));
+	SET_DX( context, GlobalAlloc16(GMEM_MOVEABLE, (DWORD)DX_reg(context)<<10) );
+	SET_AX( context, DX_reg(context) ? 1 : 0 );
+	if (!DX_reg(context)) SET_BL( context, 0xA0 ); /* out of memory */
+	break;
+    case 0x0a:   /* Free Extended Memory Block */
+	TRACE("free extended memory block %04x\n",DX_reg(context));
+       if(!DX_reg(context) || GlobalFree16(DX_reg(context))) {
+         SET_AX( context, 0 );    /* failure */
+         SET_BL( context, 0xa2 ); /* invalid handle */
+       } else
+         SET_AX( context, 1 );    /* success */
+	break;
+    case 0x0b:   /* Move Extended Memory Block */
+    {
+	MOVESTRUCT*move=CTX_SEG_OFF_TO_LIN(context,
+	    context->SegDs,context->Esi);
+        BYTE*src,*dst;
+        TRACE("move extended memory block\n");
+        src=XMS_Offset(&move->Source);
+        dst=XMS_Offset(&move->Dest);
+	memcpy(dst,src,move->Length);
+	if (move->Source.Handle) GlobalUnlock16(move->Source.Handle);
+	if (move->Dest.Handle) GlobalUnlock16(move->Dest.Handle);
+	break;
+    }
+    case 0x88:   /* Query Any Free Extended Memory */
+    {
+        MEMORYSTATUS status;
+        SYSTEM_INFO  info;
+
+        TRACE("query any free extended memory\n");
+
+        GlobalMemoryStatus( &status );
+        GetSystemInfo( &info );
+        context->Eax = status.dwAvailVirtual >> 10;
+        context->Edx = status.dwAvailVirtual >> 10;
+        context->Ecx = (DWORD)info.lpMaximumApplicationAddress;
+        SET_BL( context, 0 ); /* No errors. */
+
+        TRACE("returning largest %dK, total %dK, highest 0x%x\n",
+              context->Eax, context->Edx, context->Ecx);
+    }
+    break;
+    default:
+        INT_BARF( context, 0x31 );
+        SET_AX( context, 0x0000 ); /* failure */
+        SET_BL( context, 0x80 );   /* function not implemented */
+        break;
+    }
+}
+
+
 /**********************************************************************
  *         DOSVM_CheckWrappers
  *
diff --git a/dlls/winedos/xms.c b/dlls/winedos/xms.c
deleted file mode 100644
index 14e5302..0000000
--- a/dlls/winedos/xms.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * XMS v2+ emulation
- *
- * Copyright 1998 Ove Kåven
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * Note: This XMS emulation is hooked through the DPMI interrupt.
- */
-
-#include "config.h"
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <stdarg.h>
-#include <string.h>
-#include "windef.h"
-#include "winbase.h"
-#include "wine/winbase16.h"
-#include "dosexe.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(int31);
-
-#include "pshpack1.h"
-
-typedef struct {
- WORD Handle;
- DWORD Offset;
-} MOVEOFS;
-
-typedef struct {
- DWORD Length;
- MOVEOFS Source;
- MOVEOFS Dest;
-} MOVESTRUCT;
-
-#include "poppack.h"
-
-static BYTE * XMS_Offset( MOVEOFS *ofs )
-{
-    if (ofs->Handle) return (BYTE*)GlobalLock16(ofs->Handle)+ofs->Offset;
-    else return PTR_REAL_TO_LIN(SELECTOROF(ofs->Offset),OFFSETOF(ofs->Offset));
-}
-
-/**********************************************************************
- *	    XMS_Handler
- */
-
-void XMS_Handler( CONTEXT86 *context )
-{
-    switch(AH_reg(context))
-    {
-    case 0x00:   /* Get XMS version number */
-        TRACE("get XMS version number\n");
-        SET_AX( context, 0x0200 ); /* 2.0 */
-        SET_BX( context, 0x0000 ); /* internal revision */
-        SET_DX( context, 0x0001 ); /* HMA exists */
-        break;
-    case 0x08:   /* Query Free Extended Memory */
-    {
-        MEMORYSTATUS status;
-
-        TRACE("query free extended memory\n");
-        GlobalMemoryStatus( &status );
-        SET_DX( context, status.dwAvailVirtual >> 10 );
-        SET_AX( context, status.dwAvailVirtual >> 10 );
-        TRACE("returning largest %dK, total %dK\n", AX_reg(context), DX_reg(context));
-    }
-    break;
-    case 0x09:   /* Allocate Extended Memory Block */
-        TRACE("allocate extended memory block (%dK)\n",
-            DX_reg(context));
-	SET_DX( context, GlobalAlloc16(GMEM_MOVEABLE, (DWORD)DX_reg(context)<<10) );
-	SET_AX( context, DX_reg(context) ? 1 : 0 );
-	if (!DX_reg(context)) SET_BL( context, 0xA0 ); /* out of memory */
-	break;
-    case 0x0a:   /* Free Extended Memory Block */
-	TRACE("free extended memory block %04x\n",DX_reg(context));
-       if(!DX_reg(context) || GlobalFree16(DX_reg(context))) {
-         SET_AX( context, 0 );    /* failure */
-         SET_BL( context, 0xa2 ); /* invalid handle */
-       } else
-         SET_AX( context, 1 );    /* success */
-	break;
-    case 0x0b:   /* Move Extended Memory Block */
-    {
-	MOVESTRUCT*move=CTX_SEG_OFF_TO_LIN(context,
-	    context->SegDs,context->Esi);
-        BYTE*src,*dst;
-        TRACE("move extended memory block\n");
-        src=XMS_Offset(&move->Source);
-        dst=XMS_Offset(&move->Dest);
-	memcpy(dst,src,move->Length);
-	if (move->Source.Handle) GlobalUnlock16(move->Source.Handle);
-	if (move->Dest.Handle) GlobalUnlock16(move->Dest.Handle);
-	break;
-    }
-    case 0x88:   /* Query Any Free Extended Memory */
-    {
-        MEMORYSTATUS status;
-        SYSTEM_INFO  info;
-
-        TRACE("query any free extended memory\n");
-
-        GlobalMemoryStatus( &status );
-        GetSystemInfo( &info );
-        context->Eax = status.dwAvailVirtual >> 10;
-        context->Edx = status.dwAvailVirtual >> 10;
-        context->Ecx = (DWORD)info.lpMaximumApplicationAddress;
-        SET_BL( context, 0 ); /* No errors. */
-
-        TRACE("returning largest %dK, total %dK, highest 0x%x\n",
-              context->Eax, context->Edx, context->Ecx);
-    }
-    break;
-    default:
-        INT_BARF( context, 0x31 );
-        SET_AX( context, 0x0000 ); /* failure */
-        SET_BL( context, 0x80 );   /* function not implemented */
-        break;
-    }
-}




More information about the wine-cvs mailing list