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 ******************************************************************/