diff --git a/if1632/thunk.c b/if1632/thunk.c index 64e15859dc3..c7eadc21e5e 100644 --- a/if1632/thunk.c +++ b/if1632/thunk.c @@ -176,14 +176,16 @@ static const CALLBACKS_TABLE CALLBACK_EmulatorTable = (void *)THUNK_CallTo16_word_ww /* CallDrvAbortProc */ }; +const CALLBACKS_TABLE *Callbacks = &CALLBACK_EmulatorTable; + +CALLOUT_TABLE Callout = { 0 }; + /*********************************************************************** * THUNK_Init */ BOOL THUNK_Init(void) { - /* Set the window proc calling functions */ - Callbacks = &CALLBACK_EmulatorTable; /* Initialize Thunklets */ return THUNK_ThunkletInit(); } diff --git a/include/main.h b/include/main.h index ed84ca782e9..4d1acf2b33b 100644 --- a/include/main.h +++ b/include/main.h @@ -18,6 +18,7 @@ extern void MAIN_ParseLanguageOption( char *arg ); extern void MAIN_ParseModeOption( char *arg ); extern BOOL RELAY_Init(void); +extern void THUNK_InitCallout(void); extern int RELAY_ShowDebugmsgRelay(const char *func); extern void CALL32_Init( void *func, void *target, void *stack ); diff --git a/loader/main.c b/loader/main.c index a813f248d66..695f4c4a8af 100644 --- a/loader/main.c +++ b/loader/main.c @@ -46,6 +46,8 @@ #include "task.h" #include "debugtools.h" #include "psdrv.h" +#include "win16drv.h" +#include "callback.h" #include "server.h" #include "cursoricon.h" #include "loadorder.h" @@ -101,6 +103,9 @@ BOOL MAIN_MainInit(void) /* Read DOS config.sys */ if (!DOSCONF_ReadConfig()) return FALSE; + /* Initialize relay code */ + if (!RELAY_Init()) return FALSE; + return TRUE; } @@ -182,6 +187,8 @@ BOOL WINAPI MAIN_GdiInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved /* GDI initialisation */ if(!GDI_Init()) return FALSE; + /* Create the Win16 printer driver */ + if (!WIN16DRV_Init()) return FALSE; /* PSDRV initialization */ if(!PSDRV_Init()) return FALSE; @@ -256,9 +263,8 @@ BOOL WINAPI MAIN_UserInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserve /* Set double click time */ SetDoubleClickTime( GetProfileIntA("windows","DoubleClickSpeed",452) ); - /* Create task message queue for the initial task */ - queueSize = GetProfileIntA( "windows", "DefaultQueueSize", 8 ); - if (!SetMessageQueue( queueSize )) return FALSE; + /* Create message queue of initial thread */ + InitThreadInput16( 0, 0 ); /* Create desktop window */ if (!WIN_CreateDesktopWindow()) return FALSE; @@ -296,6 +302,7 @@ HINSTANCE MAIN_WinelibInit( int *argc, char *argv[] ) if (!MAIN_MainInit()) return 0; /* Initialize KERNEL */ + if (!LoadLibrary16( "KERNEL" )) return 0; if (!LoadLibraryA( "KERNEL32" )) return 0; /* Create and switch to initial task */ @@ -311,9 +318,13 @@ HINSTANCE MAIN_WinelibInit( int *argc, char *argv[] ) if (!TASK_Create( pModule, FALSE )) return 0; - /* Initialize GDI and USER */ - if (!LoadLibraryA( "GDI32.DLL" )) return 0; - if (!LoadLibraryA( "USER32.DLL" )) return 0; + /* Load system DLLs into the initial process (and initialize them) */ + if ( !LoadLibrary16("GDI.EXE" ) || !LoadLibraryA("GDI32.DLL" ) + || !LoadLibrary16("USER.EXE") || !LoadLibraryA("USER32.DLL")) + ExitProcess( 1 ); + + /* Get pointers to USER routines called by KERNEL */ + THUNK_InitCallout(); return wm->module; } diff --git a/misc/Makefile.in b/misc/Makefile.in index 405fb785e63..517ed081a40 100644 --- a/misc/Makefile.in +++ b/misc/Makefile.in @@ -7,7 +7,6 @@ VPATH = @srcdir@ MODULE = misc C_SRCS = \ - callback.c \ cdrom.c \ comm.c \ crtdll.c \ diff --git a/misc/callback.c b/misc/callback.c deleted file mode 100644 index 0bfbe9f58c9..00000000000 --- a/misc/callback.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Function callbacks for the library - * - * Copyright 1997 Alexandre Julliard - */ - -#include -#include "winuser.h" -#include "callback.h" -#include "task.h" -#include "syslevel.h" -#include "cursoricon.h" -#include "user.h" -#include "queue.h" -#include "debugtools.h" -#include "win.h" - -DEFAULT_DEBUG_CHANNEL(relay) - - -/********************************************************************** - * CALLBACK_CallWndProc - */ -static LRESULT WINAPI CALLBACK_CallWndProc( WNDPROC16 proc, HWND16 hwnd, - UINT16 msg, WPARAM16 wParam, - LPARAM lParam ) -{ - LRESULT retvalue; - int iWndsLocks; - - /* To avoid any deadlocks, all the locks on the windows structures - must be suspended before the control is passed to the application */ - iWndsLocks = WIN_SuspendWndsLock(); - retvalue = proc( hwnd, msg, wParam, lParam ); - WIN_RestoreWndsLock(iWndsLocks); - return retvalue; -} - -/********************************************************************** - * CALLBACK_CallRegisterProc - */ -static LONG WINAPI CALLBACK_CallRegisterProc( CONTEXT86 *context, INT offset) -{ - ERR("Cannot call a register proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallDriverProc - */ -static LRESULT WINAPI CALLBACK_CallDriverProc( DRIVERPROC16 proc, DWORD dwId, - HDRVR16 hdrvr, UINT16 msg, - LPARAM lp1, LPARAM lp2 ) -{ - ERR("Cannot call a 16-bit driver proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallDriverCallback - */ -static LRESULT WINAPI CALLBACK_CallDriverCallback( FARPROC16 proc, - HANDLE16 hDev, UINT16 msg, - DWORD dwUser, LPARAM lp1, - LPARAM lp2 ) -{ - ERR("Cannot call a 16-bit driver proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallTimeFuncProc - */ -static LRESULT WINAPI CALLBACK_CallTimeFuncProc( FARPROC16 proc, WORD id, - UINT16 msg, DWORD dwUser, - LPARAM lp1, LPARAM lp2 ) -{ - ERR("Cannot call a 16-bit multimedia timer proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallWindowsExitProc - */ -static INT16 WINAPI CALLBACK_CallWindowsExitProc( FARPROC16 proc, INT16 type) -{ - ERR("Cannot call a 16-bit WEP routine in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallWordBreakProc - */ -static INT16 WINAPI CALLBACK_CallWordBreakProc( EDITWORDBREAKPROC16 proc, - SEGPTR text, INT16 word, - INT16 len, INT16 action ) -{ - ERR("Cannot call a 16-bit word break proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallBootAppProc - */ -static void WINAPI CALLBACK_CallBootAppProc( FARPROC16 proc, HANDLE16 module, - HFILE16 file ) -{ - ERR("Cannot call a 16-bit self-load handler in Winelib\n" ); - assert( FALSE ); - return; -} - -/********************************************************************** - * CALLBACK_CallLoadAppSegProc - */ -static WORD WINAPI CALLBACK_CallLoadAppSegProc( FARPROC16 proc, - HANDLE16 module, HFILE16 file, - WORD seg ) -{ - ERR("Cannot call a 16-bit self-load handler in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallLocalNotifyFunc - */ -static WORD WINAPI CALLBACK_CallLocalNotifyFunc( FARPROC16 proc, - WORD wMsg, HLOCAL16 hMem, WORD wArg ) -{ - ERR("Cannot call a 16-bit notification handler in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallResourceHandlerProc - */ -static HGLOBAL16 WINAPI CALLBACK_CallResourceHandlerProc( FARPROC16 proc, - HGLOBAL16 hMemObj, - HMODULE16 hModule, - HRSRC16 hRsrc ) -{ - ERR("Cannot call a 16-bit resource handler in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallASPIPostProc - */ -static LRESULT WINAPI CALLBACK_CallASPIPostProc( FARPROC16 proc, SEGPTR ptr ) -{ - ERR("Cannot call a 16-bit ASPI proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallWOWCallbackProc - */ -static DWORD WINAPI CALLBACK_CallWOWCallbackProc( FARPROC16 proc, DWORD dw ) -{ - ERR("Cannot call a WOW thunk proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallWOWCallback16Ex - */ -static BOOL WINAPI CALLBACK_CallWOWCallback16Ex( FARPROC16 proc, DWORD dwFlags, - DWORD cbArgs, LPVOID xargs, LPDWORD pdwret ) -{ - ERR("Cannot call a WOW thunk proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_CallUTProc - */ -static DWORD WINAPI CALLBACK_CallUTProc( FARPROC16 proc, DWORD w1, DWORD w2 ) -{ - ERR("Cannot call a UT thunk proc in Winelib\n" ); - assert( FALSE ); - return 0; -} - -/********************************************************************** - * CALLBACK_WinelibTable - * - * The callbacks function table for Winelib - */ -static const CALLBACKS_TABLE CALLBACK_WinelibTable = -{ - CALLBACK_CallRegisterProc, /* CallRegisterShortProc */ - CALLBACK_CallRegisterProc, /* CallRegisterLongProc */ - NULL, /* CallFrom16WndProc */ - CALLBACK_CallWndProc, /* CallWndProc */ - CALLBACK_CallDriverProc, /* CallDriverProc */ - CALLBACK_CallDriverCallback, /* CallDriverCallback */ - CALLBACK_CallTimeFuncProc, /* CallTimeFuncProc */ - CALLBACK_CallWindowsExitProc, /* CallWindowsExitProc */ - CALLBACK_CallWordBreakProc, /* CallWordBreakProc */ - CALLBACK_CallBootAppProc, /* CallBootAppProc */ - CALLBACK_CallLoadAppSegProc, /* CallLoadAppSegProc */ - CALLBACK_CallLocalNotifyFunc, /* CallLocalNotifyFunc */ - CALLBACK_CallResourceHandlerProc, /* CallResourceHandlerProc */ - CALLBACK_CallWOWCallbackProc, /* CallWOWCallbackProc */ - CALLBACK_CallWOWCallback16Ex, /* CallWOWCallback16Ex */ - CALLBACK_CallUTProc, /* CallUTProc */ - CALLBACK_CallASPIPostProc, /* CallASPIPostProc */ - /* The graphics driver callbacks are never used in Winelib */ - NULL, /* CallDrvControlProc */ - NULL, /* CallDrvEnableProc */ - NULL, /* CallDrvEnumDFontsProc */ - NULL, /* CallDrvEnumObjProc */ - NULL, /* CallDrvOutputProc */ - NULL, /* CallDrvRealizeProc */ - NULL, /* CallDrvStretchBltProc */ - NULL, /* CallDrvExtTextOutProc */ - NULL, /* CallDrvGetCharWidth */ - NULL /* CallDrvAbortProc */ -}; - -const CALLBACKS_TABLE *Callbacks = &CALLBACK_WinelibTable; - - -/********************************************************************** - * CALLOUT_Table - * - * The callout function table for Winelib - */ - -CALLOUT_TABLE Callout = -{ - PeekMessage16, PeekMessageA, PeekMessageW, - GetMessage16, GetMessageA, GetMessageW, - SendMessage16, SendMessageA, SendMessageW, - PostMessage16, PostMessageA, PostMessageW, - PostAppMessage16, PostThreadMessageA, PostThreadMessageW, - TranslateMessage16, TranslateMessage, - DispatchMessage16, DispatchMessageA, DispatchMessageW, - RedrawWindow16, RedrawWindow, - UserSignalProc, - InitApp16, InitThreadInput16, - UserYield16, - CURSORICON_Destroy -}; - diff --git a/miscemu/main.c b/miscemu/main.c index 8c8ce209097..0e1ec925abe 100644 --- a/miscemu/main.c +++ b/miscemu/main.c @@ -10,7 +10,6 @@ #include "debugger.h" #include "main.h" #include "miscemu.h" -#include "win16drv.h" #include "module.h" #include "options.h" #include "process.h" @@ -24,30 +23,11 @@ static int MAIN_argc; static char **MAIN_argv; -/*********************************************************************** - * Emulator initialisation - */ -BOOL MAIN_EmulatorInit(void) -{ - /* Main initialization */ - if (!MAIN_MainInit()) return FALSE; - - /* Initialize relay code */ - if (!RELAY_Init()) return FALSE; - - /* Create the Win16 printer driver */ - if (!WIN16DRV_Init()) return FALSE; - - return TRUE; -} - - /*********************************************************************** * Main loop of initial task */ void MAIN_EmulatorRun( void ) { - extern void THUNK_InitCallout( void ); char startProg[256], defProg[256]; HINSTANCE handle; int i, tasks = 0; @@ -148,7 +128,7 @@ int main( int argc, char *argv[] ) TASK_AddTaskEntryBreakpoint = DEBUG_AddTaskEntryBreakpoint; /* Initialize everything */ - if (!MAIN_EmulatorInit()) return 1; + if (!MAIN_MainInit()) return 1; /* Load kernel modules */ if (!LoadLibrary16( "KERNEL" )) return 1;