final int21 move (10/11)

György 'Nog' Jeney nog at sdf.lonestar.org
Wed Nov 27 13:47:10 CST 2002


ChangeLog:
 * dlls/winedos/int21.c
 * msdos/int21.c
 * dlls/kernel/kernel32.spec
   Move memory functions to winedos.

nog.

-------------- next part --------------
--- dlls/winedos/int21.c.9	2002-11-27 16:45:19.000000000 +0200
+++ dlls/winedos/int21.c	2002-11-27 16:47:02.000000000 +0200
@@ -2066,6 +2066,65 @@
             SET_AX(context, 0x0100); /* success return code */
         break;
 
+    case 0x48: /* ALLOCATE MEMORY */
+        TRACE("ALLOCATE MEMORY for %d paragraphs\n", BX_reg(context));
+        {
+            LPVOID *mem;
+            if(ISV86(context)) {
+                mem = DOSMEM_GetBlock((DWORD)BX_reg(context) << 4, NULL);
+                if(mem)
+                    SET_AX(context, DOSMEM_MapLinearToDos(mem) >> 4);
+            } else {
+                mem = (LPVOID)GlobalDOSAlloc16(BX_reg(context)<<4);
+                if(mem)
+                    SET_AX(context, (DWORD)mem & 0xffff);
+            }
+            if (!mem) {
+                SET_CFLAG(context);
+                SET_AX(context, 0x0008); /* insufficient memory */
+                SET_BX(context, DOSMEM_Available() >> 4);
+            }
+        }
+        break;
+
+    case 0x49: /* FREE MEMORY */
+        TRACE("FREE MEMORY segment %04lX\n", context->SegEs);
+        {
+            BOOL ret;
+            if(ISV86(context))
+                ret= DOSMEM_FreeBlock(DOSMEM_MapDosToLinear(context->SegEs<<4));            else {
+                ret = !GlobalDOSFree16(context->SegEs);
+                /* If we don't reset ES_reg, we will fail in the relay code */
+                context->SegEs=ret;
+            }
+            if(!ret) {
+                TRACE("FREE MEMORY failed\n");
+                SET_CFLAG(context);
+                SET_AX(context, 0x0009); /* memory block address invalid */
+            }
+        }
+        break;
+
+    case 0x4a: /* RESIZE MEMORY BLOCK */
+        TRACE("RESIZE MEMORY segment %04lX to %d paragraphs\n", context->SegEs,
+              BX_reg(context));
+        if(!ISV86(context))
+            FIXME("RESIZE MEMORY probably insufficient implementation. Expect "
+                  "crash soon\n");
+        {
+            LPVOID *mem = DOSMEM_ResizeBlock(DOSMEM_MapDosToLinear(
+                                                    context->SegEs << 4),
+                                             BX_reg(context) << 4, NULL);
+            if(mem)
+                SET_AX(context, DOSMEM_MapLinearToDos(mem) >> 4);
+            else {
+                SET_CFLAG(context);
+                SET_AX(context, 0x0008); /* insufficient memory */
+                SET_BX(context, DOSMEM_Available() >> 4); /* not quite right */
+            }
+        }
+        break;
+
     case 0x4b: /* "EXEC" - LOAD AND/OR EXECUTE PROGRAM */
         TRACE("EXEC %s\n", (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs,
               context->Edx));
--- msdos/int21.c.9	2002-11-27 16:45:10.000000000 +0200
+++ msdos/int21.c	2002-11-27 16:47:20.000000000 +0200
@@ -223,69 +223,6 @@
         bSetDOSExtendedError = (FILE_Dup2( BX_reg(context), CX_reg(context) ) == HFILE_ERROR16);
         break;
 
-    case 0x48: /* ALLOCATE MEMORY */
-        TRACE("ALLOCATE MEMORY for %d paragraphs\n", BX_reg(context));
-        {
-            LPVOID *mem;
-	    if (ISV86(context))
-	      {
-		mem= DOSMEM_GetBlock((DWORD)BX_reg(context)<<4,NULL);
-            if (mem)
-                SET_AX( context, DOSMEM_MapLinearToDos(mem)>>4 );
-	      }
-	    else
-	      {
-		mem = (LPVOID)GlobalDOSAlloc16(BX_reg(context)<<4);
-		if (mem)
-		  SET_AX( context, (DWORD)mem&0xffff );
-	      }
-	    if (!mem)
-	      {
-                SET_CFLAG(context);
-                SET_AX( context, 0x0008 ); /* insufficient memory */
-                SET_BX( context, DOSMEM_Available()>>4 );
-            }
-        }
-	break;
-
-    case 0x49: /* FREE MEMORY */
-        TRACE("FREE MEMORY segment %04lX\n", context->SegEs);
-        {
-	  BOOL ret;
-	  if (ISV86(context))
-	    ret= DOSMEM_FreeBlock(DOSMEM_MapDosToLinear(context->SegEs<<4));
-	  else
-	    {
-	      ret = !GlobalDOSFree16(context->SegEs);
-	      /* If we don't reset ES_reg, we will fail in the relay code */
-	      context->SegEs=ret;
-	    }
-	  if (!ret)
-	    {
-	      TRACE("FREE MEMORY failed\n");
-            SET_CFLAG(context);
-            SET_AX( context, 0x0009 ); /* memory block address invalid */
-        }
-	}
-        break;
-
-    case 0x4a: /* RESIZE MEMORY BLOCK */
-        TRACE("RESIZE MEMORY segment %04lX to %d paragraphs\n", context->SegEs, BX_reg(context));
-	if (!ISV86(context))
-	  FIXME("RESIZE MEMORY probably insufficient implementation. Expect crash soon\n");
-	{
-	    LPVOID *mem = DOSMEM_ResizeBlock(DOSMEM_MapDosToLinear(context->SegEs<<4),
-					     BX_reg(context)<<4,NULL);
-	    if (mem)
-		SET_AX( context, DOSMEM_MapLinearToDos(mem)>>4 );
-	    else {
-		SET_CFLAG(context);
-		SET_AX( context, 0x0008 ); /* insufficient memory */
-		SET_BX( context, DOSMEM_Available()>>4 ); /* not quite right */
-	    }
-	}
-        break;
-
     case 0x5e:
 	bSetDOSExtendedError = INT21_networkfunc (context);
         break;
--- dlls/kernel/kernel32.spec.0	2002-11-27 16:55:31.000000000 +0200
+++ dlls/kernel/kernel32.spec	2002-11-27 16:55:43.000000000 +0200
@@ -1054,6 +1054,9 @@
 @ cdecl DOSMEM_GetBlock(long ptr) DOSMEM_GetBlock
 @ cdecl DOSMEM_GetDPMISegments() DOSMEM_GetDPMISegments
 @ cdecl DOSMEM_Init(long) DOSMEM_Init
+@ cdecl DOSMEM_MapDosToLinear(long) DOSMEM_MapDosToLinear
+@ cdecl DOSMEM_MapLinearToDos(ptr) DOSMEM_MapLinearToDos
+@ cdecl DOSMEM_ResizeBlock(ptr long ptr) DOSMEM_ResizeBlock
 @ cdecl DRIVE_OpenDevice(long long) DRIVE_OpenDevice
 @ cdecl LOCAL_Alloc(long long long) LOCAL_Alloc
 @ cdecl LOCAL_Compact(long long long) LOCAL_Compact



More information about the wine-patches mailing list