Use Callout table instead of direct GetProcAddress.
UserYield moved to USER.
diff --git a/miscemu/main.c b/miscemu/main.c
index 3e216d0..c9a2375 100644
--- a/miscemu/main.c
+++ b/miscemu/main.c
@@ -41,30 +41,26 @@
return TRUE;
}
-typedef BOOL32 (*WINAPI tGetMessage)(MSG32* lpmsg,HWND32 hwnd,UINT32 min,UINT32 max);
-typedef BOOL32 (*WINAPI tTranslateMessage)(const MSG32* msg);
-typedef LONG (*WINAPI tDispatchMessage)( const MSG32* msg );
/***********************************************************************
* Main loop of initial task
*/
void MAIN_EmulatorRun( void )
{
+ extern void THUNK_InitCallout( void );
char startProg[256], defProg[256];
HINSTANCE32 handle;
int i;
-
- tGetMessage pGetMessage;
- tTranslateMessage pTranslateMessage;
- tDispatchMessage pDispatchMessage;
- HMODULE32 hModule;
- MSG32 msg;
+ MSG32 msg;
/* Load system DLLs into the initial process (and initialize them) */
if ( !LoadLibrary16("GDI.EXE" ) || !LoadLibrary32A("GDI32.DLL" )
|| !LoadLibrary16("USER.EXE") || !LoadLibrary32A("USER32.DLL"))
ExitProcess( 1 );
+ /* Get pointers to USER routines called by KERNEL */
+ THUNK_InitCallout();
+
/* Add the Default Program if no program on the command line */
if (!MAIN_argv[1])
{
@@ -107,19 +103,10 @@
/* Start message loop for desktop window */
- hModule = GetModuleHandle32A( "USER32" );
- pGetMessage = (tGetMessage)GetProcAddress32( hModule, "GetMessageA" );
- pTranslateMessage = (tTranslateMessage)GetProcAddress32( hModule, "TranslateMessage" );
- pDispatchMessage = (tDispatchMessage)GetProcAddress32( hModule, "DispatchMessageA" );
-
- assert( pGetMessage );
- assert( pTranslateMessage );
- assert( pDispatchMessage );
-
- while ( GetNumTasks() > 1 && pGetMessage( &msg, 0, 0, 0 ) )
+ while ( GetNumTasks() > 1 && Callout.GetMessage32A( &msg, 0, 0, 0 ) )
{
- pTranslateMessage( &msg );
- pDispatchMessage( &msg );
+ Callout.TranslateMessage32( &msg );
+ Callout.DispatchMessage32A( &msg );
}
ExitProcess( 0 );