Implemented WIN16_CallMsgFilter32, WIN16_DispatchMessage32,
DrawAnimatedRects16 (stub), FormatMessage16, WIN16_GetMessage32,
WIN16_PeekMessage32 and WIN16_TranslateMessage32.

diff --git a/windows/hook.c b/windows/hook.c
index 61928bd..5aac94e 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -1347,6 +1347,49 @@
 
 
 /***********************************************************************
+ *           WIN16_CallMsgFilter32   (USER.823)
+ */
+BOOL16 WINAPI WIN16_CallMsgFilter32( SEGPTR msg16_32, INT16 code, BOOL16 wHaveParamHigh )
+{
+    MSG16_32 *lpmsg16_32 = (MSG16_32 *)PTR_SEG_TO_LIN(msg16_32);
+
+    if (wHaveParamHigh == FALSE)
+    {
+        lpmsg16_32->wParamHigh = 0;
+        /* WARNING: msg16_32->msg has to be the first variable in the struct */ 
+        return CallMsgFilter16(msg16_32, code);
+    }
+    else
+    {
+        MSG32 msg32;
+        BOOL16 ret;
+
+        msg32.hwnd		= lpmsg16_32->msg.hwnd;
+        msg32.message	= lpmsg16_32->msg.message;
+        msg32.wParam	=
+                     MAKELONG(lpmsg16_32->msg.wParam, lpmsg16_32->wParamHigh);
+        msg32.lParam	= lpmsg16_32->msg.lParam;
+        msg32.time		= lpmsg16_32->msg.time;
+        msg32.pt.x		= (INT32)lpmsg16_32->msg.pt.x;
+        msg32.pt.y      = (INT32)lpmsg16_32->msg.pt.y;
+        
+        ret = (BOOL16)CallMsgFilter32A(&msg32, (INT32)code);
+
+        lpmsg16_32->msg.hwnd    = msg32.hwnd;
+        lpmsg16_32->msg.message = msg32.message;
+        lpmsg16_32->msg.wParam  = LOWORD(msg32.wParam);
+        lpmsg16_32->msg.lParam  = msg32.lParam;
+        lpmsg16_32->msg.time    = msg32.time;
+        lpmsg16_32->msg.pt.x    = (INT16)msg32.pt.x;
+        lpmsg16_32->msg.pt.y    = (INT16)msg32.pt.y;
+        lpmsg16_32->wParamHigh  = HIWORD(msg32.wParam);
+
+        return ret;
+    }
+}
+
+
+/***********************************************************************
  *           CallMsgFilter32A   (USER32.15)
  */
 /*