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?…
==============================================================================
--- 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?…
==============================================================================
--- 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 ******************************************************************/