Callout table (for KERNEL->USER calls) added.
Callbacks->CallPostAppMessageProc removed.

diff --git a/if1632/thunk.c b/if1632/thunk.c
index 511b834..72a0918 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -34,6 +34,7 @@
 extern WORD CALLBACK CallTo16_word_     (FARPROC16);
 extern LONG CALLBACK CallTo16_long_     (FARPROC16);
 extern WORD CALLBACK CallTo16_word_w    (FARPROC16,WORD);
+extern WORD CALLBACK CallTo16_word_l    (FARPROC16,LONG);
 extern LONG CALLBACK CallTo16_long_l    (FARPROC16,LONG);
 extern WORD CALLBACK CallTo16_word_ww   (FARPROC16,WORD,WORD);
 extern WORD CALLBACK CallTo16_word_wl   (FARPROC16,WORD,LONG);
@@ -47,11 +48,14 @@
 extern WORD CALLBACK CallTo16_word_llwl (FARPROC16,LONG,LONG,WORD,LONG);
 extern WORD CALLBACK CallTo16_word_lwll (FARPROC16,LONG,WORD,LONG,LONG);
 extern WORD CALLBACK CallTo16_word_lwww (FARPROC16,LONG,WORD,WORD,WORD);
+extern WORD CALLBACK CallTo16_word_wlww (FARPROC16,WORD,LONG,WORD,WORD);
 extern WORD CALLBACK CallTo16_word_wwll (FARPROC16,WORD,WORD,LONG,LONG);
 extern WORD CALLBACK CallTo16_word_wwwl (FARPROC16,WORD,WORD,WORD,LONG);
+extern LONG CALLBACK CallTo16_long_wwwl (FARPROC16,WORD,WORD,WORD,LONG);
 extern WORD CALLBACK CallTo16_word_llll (FARPROC16,LONG,LONG,LONG,LONG);
 extern LONG CALLBACK CallTo16_long_llll (FARPROC16,LONG,LONG,LONG,LONG);
 extern WORD CALLBACK CallTo16_word_wllwl(FARPROC16,WORD,LONG,LONG,WORD,LONG);
+extern WORD CALLBACK CallTo16_word_lwwww(FARPROC16,LONG,WORD,WORD,WORD,WORD);
 extern LONG CALLBACK CallTo16_long_lwwll(FARPROC16,LONG,WORD,WORD,LONG,LONG);
 extern WORD CALLBACK CallTo16_word_wwlll(FARPROC16,WORD,WORD,LONG,LONG,LONG);
 extern WORD CALLBACK CallTo16_word_wwwww(FARPROC16,WORD,WORD,WORD,WORD,WORD);
@@ -158,7 +162,6 @@
     (void *)CallTo16_word_www,             /* CallLoadAppSegProc */
     (void *)CallTo16_word_www,             /* CallLocalNotifyFunc */
     (void *)CallTo16_word_www,             /* CallResourceHandlerProc */
-    (void *)CallTo16_word_wwwl,            /* CallPostAppMessageProc */
     (void *)CallTo16_long_l,               /* CallWOWCallbackProc */
     THUNK_WOWCallback16Ex,                 /* CallWOWCallback16Ex */
     (void *)CallTo16_long_l,               /* CallASPIPostProc */
@@ -850,6 +853,57 @@
     return timer;
 }
 
+/***********************************************************************
+ *           THUNK_InitCallout
+ */
+void THUNK_InitCallout(void)
+{
+    HMODULE32 hModule = GetModuleHandle32A( "USER32" );
+    if ( hModule )
+    {
+#define GETADDR( var, name )  \
+        *(FARPROC32 *)&Callout.##var = GetProcAddress32( hModule, name )
+
+        GETADDR( PeekMessage32A, "PeekMessageA" );
+        GETADDR( PeekMessage32W, "PeekMessageW" );
+        GETADDR( GetMessage32A, "GetMessageA" );
+        GETADDR( GetMessage32W, "GetMessageW" );
+        GETADDR( SendMessage32A, "SendMessageA" );
+        GETADDR( SendMessage32W, "SendMessageW" );
+        GETADDR( PostMessage32A, "PostMessageA" );
+        GETADDR( PostMessage32W, "PostMessageW" );
+        GETADDR( PostThreadMessage32A, "PostThreadMessageA" );
+        GETADDR( PostThreadMessage32W, "PostThreadMessageW" );
+        GETADDR( TranslateMessage32, "TranslateMessage" );
+        GETADDR( DispatchMessage32W, "DispatchMessageW" );
+        GETADDR( DispatchMessage32A, "DispatchMessageA" );
+        GETADDR( RedrawWindow32, "RedrawWindow" );
+
+#undef GETADDR
+    }
+
+    hModule = GetModuleHandle16( "USER" );
+    if ( hModule )
+    {
+#define GETADDR( var, name, thk )  \
+        *(FARPROC32 *)&Callout.##var = (FARPROC32) \
+              THUNK_Alloc( WIN32_GetProcAddress16( hModule, name ), \
+                           (RELAY)CallTo16_##thk )
+
+        GETADDR( PeekMessage16, "PeekMessage", word_lwwww );
+        GETADDR( GetMessage16, "GetMessage", word_lwww );
+        GETADDR( SendMessage16, "SendMessage", long_wwwl );
+        GETADDR( PostMessage16, "PostMessage", word_wwwl );
+        GETADDR( PostAppMessage16, "PostAppMessage", word_wwwl );
+        GETADDR( TranslateMessage16, "TranslateMessage", word_l );
+        GETADDR( DispatchMessage16, "DispatchMessage", long_l );
+        GETADDR( RedrawWindow16, "RedrawWindow", word_wlww );
+        GETADDR( InitThreadInput, "InitThreadInput", word_ww );
+        GETADDR( UserYield, "UserYield", word_ );
+
+#undef GETADDR
+    }
+}
 
 /***********************************************************************
  * 16->32 Flat Thunk routines:
diff --git a/include/callback.h b/include/callback.h
index f787a5d..1705b2e 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -38,7 +38,6 @@
     WORD (CALLBACK *CallLoadAppSegProc)( FARPROC16, HANDLE16, HFILE16, WORD );
     WORD (CALLBACK *CallLocalNotifyFunc)( FARPROC16, WORD, HLOCAL16, WORD );
     HGLOBAL16 (CALLBACK *CallResourceHandlerProc)( FARPROC16, HGLOBAL16, HMODULE16, HRSRC16 );
-    BOOL16 (CALLBACK *CallPostAppMessageProc)( FARPROC16, HTASK16, UINT16, WPARAM16, LPARAM );
     DWORD (CALLBACK *CallWOWCallbackProc)( FARPROC16, DWORD );
     BOOL32 (CALLBACK *CallWOWCallback16Ex)( FARPROC16, DWORD, DWORD, LPVOID, 
                                             LPDWORD );
@@ -71,4 +70,62 @@
 
 extern const CALLBACKS_TABLE *Callbacks;
 
+typedef struct
+{
+    BOOL16 WINAPI (*PeekMessage16)( LPMSG16 msg, HWND16 hwnd, 
+                                    UINT16 first, UINT16 last, UINT16 flags );
+    BOOL32 WINAPI (*PeekMessage32A)( LPMSG32 lpmsg, HWND32 hwnd,
+                                     UINT32 min, UINT32 max, UINT32 wRemoveMsg );
+    BOOL32 WINAPI (*PeekMessage32W)( LPMSG32 lpmsg, HWND32 hwnd, 
+                                     UINT32 min, UINT32 max, UINT32 wRemoveMsg );
+
+    BOOL16 WINAPI (*GetMessage16)( SEGPTR msg, HWND16 hwnd, 
+                                   UINT16 first, UINT16 last );
+    BOOL32 WINAPI (*GetMessage32A)( MSG32* lpmsg, HWND32 hwnd, 
+                                    UINT32 min, UINT32 max );
+    BOOL32 WINAPI (*GetMessage32W)( MSG32* lpmsg, HWND32 hwnd, 
+                                    UINT32 min, UINT32 max );
+
+    LRESULT WINAPI (*SendMessage16)( HWND16 hwnd, UINT16 msg, 
+                                     WPARAM16 wParam, LPARAM lParam );
+    LRESULT WINAPI (*SendMessage32A)( HWND32 hwnd, UINT32 msg, 
+                                      WPARAM32 wParam, LPARAM lParam );
+    LRESULT WINAPI (*SendMessage32W)( HWND32 hwnd, UINT32 msg, 
+                                      WPARAM32 wParam, LPARAM lParam );
+
+    BOOL16 WINAPI (*PostMessage16)( HWND16 hwnd, UINT16 message, 
+                                    WPARAM16 wParam, LPARAM lParam );
+    BOOL32 WINAPI (*PostMessage32A)( HWND32 hwnd, UINT32 message, 
+                                     WPARAM32 wParam, LPARAM lParam );
+    BOOL32 WINAPI (*PostMessage32W)( HWND32 hwnd, UINT32 message, 
+                                     WPARAM32 wParam, LPARAM lParam );
+
+    BOOL16 WINAPI (*PostAppMessage16)( HTASK16 hTask, UINT16 message, 
+                                       WPARAM16 wParam, LPARAM lParam );
+    BOOL32 WINAPI (*PostThreadMessage32A)( DWORD idThread , UINT32 message,
+                                           WPARAM32 wParam, LPARAM lParam );
+    BOOL32 WINAPI (*PostThreadMessage32W)( DWORD idThread , UINT32 message,
+                                           WPARAM32 wParam, LPARAM lParam );
+
+    BOOL16 WINAPI (*TranslateMessage16)( const MSG16 *msg );
+    BOOL32 WINAPI (*TranslateMessage32)( const MSG32 *msg );
+
+    LONG WINAPI (*DispatchMessage16)( const MSG16* msg );
+    LONG WINAPI (*DispatchMessage32A)( const MSG32* msg );
+    LONG WINAPI (*DispatchMessage32W)( const MSG32* msg );
+
+    BOOL16 WINAPI (*RedrawWindow16)( HWND16 hwnd, const RECT16 *rectUpdate,
+                                     HRGN16 hrgnUpdate, UINT16 flags );
+
+    BOOL32 WINAPI (*RedrawWindow32)( HWND32 hwnd, const RECT32 *rectUpdate,
+                                     HRGN32 hrgnUpdate, UINT32 flags );
+
+    HQUEUE16 WINAPI (*InitThreadInput)( WORD unknown, WORD flags );
+    void WINAPI (*UserYield)( void );
+    
+}  CALLOUT_TABLE;
+
+extern CALLOUT_TABLE Callout;
+
+
 #endif /* __WINE_CALLBACK_H */
diff --git a/misc/callback.c b/misc/callback.c
index 243d2ba..fe489ac 100644
--- a/misc/callback.c
+++ b/misc/callback.c
@@ -10,6 +10,7 @@
 #include "callback.h"
 #include "task.h"
 #include "syslevel.h"
+#include "queue.h"
 
 
 /**********************************************************************
@@ -271,7 +272,6 @@
     CALLBACK_CallLoadAppSegProc,      /* CallLoadAppSegProc */
     CALLBACK_CallLocalNotifyFunc,     /* CallLocalNotifyFunc */
     CALLBACK_CallResourceHandlerProc, /* CallResourceHandlerProc */
-    NULL,                             /* CallPostAppMessageProc */
     CALLBACK_CallWOWCallbackProc,     /* CallWOWCallbackProc */
     CALLBACK_CallWOWCallback16Ex,     /* CallWOWCallback16Ex */
     CALLBACK_CallASPIPostProc,        /* CallASPIPostProc */
@@ -291,3 +291,23 @@
 const CALLBACKS_TABLE *Callbacks = &CALLBACK_WinelibTable;
 
 
+/**********************************************************************
+ *	     CALLOUT_Table
+ *
+ * The callout function table for Winelib
+ */
+
+CALLOUT_TABLE Callout = 
+{
+    PeekMessage16, PeekMessage32A, PeekMessage32W,
+    GetMessage16, GetMessage32A, GetMessage32W,
+    SendMessage16, SendMessage32A, SendMessage32W,
+    PostMessage16, PostMessage32A, PostMessage32W,
+    PostAppMessage16, PostThreadMessage32A, PostThreadMessage32W,
+    TranslateMessage16, TranslateMessage32,
+    DispatchMessage16, DispatchMessage32A, DispatchMessage32W,
+    RedrawWindow16, RedrawWindow32,
+    InitThreadInput,
+    UserYield
+};
+