Author: aandrejevic
Date: Tue Apr  8 00:28:49 2014
New Revision: 62686

URL: http://svn.reactos.org/svn/reactos?rev=62686&view=rev
Log:
[NTVDM]
Start implementing the BaseVDM interface.


Modified:
    branches/ntvdm/subsystems/ntvdm/ntvdm.c
    branches/ntvdm/subsystems/ntvdm/ntvdm.h

Modified: branches/ntvdm/subsystems/ntvdm/ntvdm.c
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ntvdm.c?rev=62686&r1=62685&r2=62686&view=diff
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ntvdm.c     [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ntvdm.c     [iso-8859-1] Tue Apr  8 
00:28:49 2014
@@ -371,9 +371,14 @@
 INT wmain(INT argc, WCHAR *argv[])
 {
 #ifndef STANDALONE
-    wprintf(L"\nReactOS Virtual DOS Machine\n\n"
-            L"OS integration (BaseVDM) unimplemented\n");
-    return 0;
+
+    VDM_COMMAND_INFO CommandInfo;
+    CHAR CmdLine[MAX_PATH];
+    CHAR AppName[MAX_PATH];
+    CHAR PifFile[MAX_PATH];
+    CHAR Desktop[MAX_PATH];
+    CHAR Title[MAX_PATH];
+
 #else
 
     CHAR CommandLine[DOS_CMDLINE_LENGTH];
@@ -391,6 +396,8 @@
 
     DPRINT1("\n\n\nNTVDM - Starting '%s'...\n\n\n", CommandLine);
 
+#endif
+
     /* Initialize the console */
     if (!ConsoleInit())
     {
@@ -419,6 +426,44 @@
         goto Cleanup;
     }
 
+#ifndef STANDALONE
+
+    while (TRUE)
+    {
+        /* Clear the structure */
+        ZeroMemory(&CommandInfo, sizeof(CommandInfo));
+
+        /* Initialize the structure members */
+        CommandInfo.VDMState = VDM_NOT_LOADED;
+        CommandInfo.CmdLine = CmdLine;
+        CommandInfo.CmdLen = sizeof(CmdLine);
+        CommandInfo.AppName = AppName;
+        CommandInfo.AppLen = sizeof(AppName);
+        CommandInfo.PifFile = PifFile;
+        CommandInfo.PifLen = sizeof(PifFile);
+        CommandInfo.Desktop = Desktop;
+        CommandInfo.DesktopLen = sizeof(Desktop);
+        CommandInfo.Title = Title;
+        CommandInfo.TitleLen = sizeof(Title);
+
+        if (!GetNextVDMCommand(&CommandInfo)) break;
+
+        /* Start the process from the command line */
+        if (!DosCreateProcess(AppName, 0))
+        {
+            DisplayMessage(L"Could not start program: %S", AppName);
+            goto Cleanup;
+        }
+
+        /* Start simulation */
+        EmulatorSimulate();
+
+        /* Perform another screen refresh */
+        VgaRefreshDisplay();
+    }
+
+#else
+
     /* Start the process from the command line */
     if (!DosCreateProcess(CommandLine, 0))
     {
@@ -428,6 +473,8 @@
 
     /* Start simulation */
     EmulatorSimulate();
+
+#endif
 
     /* Perform another screen refresh */
     VgaRefreshDisplay();
@@ -437,11 +484,11 @@
     EmulatorCleanup();
     ConsoleCleanup();
 
+    /* Quit the VDM */
     DPRINT1("\n\n\nNTVDM - Exiting...\n\n\n");
+    ExitVDM(FALSE, 0);
 
     return 0;
-
-#endif
 }
 
 /* EOF */

Modified: branches/ntvdm/subsystems/ntvdm/ntvdm.h
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ntvdm.h?rev=62686&r1=62685&r2=62686&view=diff
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ntvdm.h     [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ntvdm.h     [iso-8859-1] Tue Apr  8 
00:28:49 2014
@@ -23,12 +23,26 @@
 #include <winnls.h>
 #include <winreg.h>
 #include <winuser.h>
+#include <subsys/win/vdm.h>
 
 #include <vddsvc.h>
 
 #include <debug.h>
 
-/* DEFINES 
********************************************************************/
+/* PROTOTYPES 
*****************************************************************/
+
+BOOL
+WINAPI
+GetNextVDMCommand(
+    IN OUT PVDM_COMMAND_INFO CommandData OPTIONAL
+);
+
+VOID
+WINAPI
+ExitVDM(
+    IN BOOL IsWow,
+    IN ULONG iWowTask
+);
 
 /* FUNCTIONS 
******************************************************************/
 


Reply via email to