/* * Emulator initialisation code * */ #include "winbase.h" #include "wine/winbase16.h" #include "wingdi.h" #include "winuser.h" #include "builtin32.h" #include "callback.h" #include "options.h" #include "process.h" #include "debugtools.h" /*********************************************************************** * Main loop of initial task */ static void initial_task(void) { MSG msg; HINSTANCE16 instance; STARTUPINFOA info; GetStartupInfoA( &info ); if (!(info.dwFlags & STARTF_USESHOWWINDOW)) info.wShowWindow = SW_SHOWNORMAL; if ((instance = WinExec16( GetCommandLineA(), info.wShowWindow )) < 32) { MESSAGE( "%s: can't exec '%s': ", argv0, GetCommandLineA() ); switch (instance) { case 2: MESSAGE("file not found\n" ); break; case 11: MESSAGE("invalid exe file\n" ); break; default: MESSAGE("error=%d\n", instance ); break; } ExitProcess(instance); } /* Start message loop for desktop window */ while ( GetNumTasks16() > 1 && Callout.GetMessageA( &msg, 0, 0, 0 ) ) { Callout.TranslateMessage( &msg ); Callout.DispatchMessageA( &msg ); } ExitProcess( 0 ); } /********************************************************************** * main */ int main( int argc, char *argv[] ) { BUILTIN32_DESCRIPTOR descriptor; memset( &descriptor, 0, sizeof(descriptor) ); descriptor.filename = argv[0]; descriptor.dllentrypoint = initial_task; BUILTIN32_RegisterDLL( &descriptor ); PROCESS_InitWine( argc, argv ); return 1; /* not reached */ }