Stubs for VMM GetDemandPageInfo function and VWin32 "Get VMCPD Version".
Implementation for VWin32 Int31/DPMI dispatch call.
Fixed "dangling else" compiler warning.

diff --git a/win32/device.c b/win32/device.c
index 131ecab..fe4f94a 100644
--- a/win32/device.c
+++ b/win32/device.c
@@ -784,10 +784,12 @@
 
 	virt_new_perm = ( virt_old_perm )  & ~0xff;
 	if ( pg_new_perm & PC_USER )
+	{
 	  if ( pg_new_perm & PC_WRITEABLE )
 	    virt_new_perm |= PAGE_EXECUTE_READWRITE;
 	  else
 	    virt_new_perm |= PAGE_EXECUTE_READ;
+	}
   
 	if ( ! VirtualProtect ( address, ( npages * psize ), virt_new_perm, &virt_old_perm ) ) {
 	  ERR("Can't change page permissions for %08lx\n", (DWORD )address );
@@ -811,8 +813,23 @@
 
 	return 0;
       }
+    case 0x001e: /* GetDemandPageInfo */
+      {
+	 DWORD dinfo = (DWORD)stack32_pop( context );
+         DWORD flags = (DWORD)stack32_pop( context );   
 
+	 /* GetDemandPageInfo is supposed to fill out the struct at
+          * "dinfo" with various low-level memory management information.
+          * Apps are certainly not supposed to call this, although it's
+          * demoed and documented by Pietrek on pages 441-443 of "Windows
+          * 95 System Programming Secrets" if any program needs a real
+          * implementation of this.
+	  */
 
+	 FIXME("GetDemandPageInfo(%08lx %08lx): stub!\n", dinfo, flags);
+
+	 return 0;
+      }
     default:
         if (LOWORD(service) < N_VMM_SERVICE)
             FIXME( "Unimplemented service %s (%08lx)\n",
@@ -1001,6 +1018,35 @@
     }
     break;
 
+    case 0x0020: /* Get VMCPD Version */
+    {
+	DWORD parm = (DWORD) stack32_pop(context);
+
+	FIXME("Get VMCPD Version(%08lx): partial stub!\n", parm);
+
+	/* FIXME: This is what Win98 returns, it may
+         *        not be correct in all situations.
+         *        It makes Bleem! happy though.
+         */
+
+	return 0x0405;
+    }
+
+    case 0x0029: /* Int31/DPMI dispatch */
+    {
+	DWORD callnum = (DWORD) stack32_pop(context);
+        DWORD parm    = (DWORD) stack32_pop(context);
+ 
+        TRACE("Int31/DPMI dispatch(%08lx)\n", callnum);
+
+	AX_reg(context) = callnum;
+        CX_reg(context) = parm;  
+	INT_Int31Handler(context);
+
+	return(AX_reg(context));
+    }
+    break;
+
     case 0x002a: /* Int41 dispatch - parm = int41 service number */
     {
 	DWORD callnum = (DWORD) stack32_pop(context);