user: Get rid of the MSGPARAMS16 structure.
diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 21f1375..0289664 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -67,13 +67,6 @@
 };
 static CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
 
-typedef struct
-{
-    WPARAM16 wParam;
-    LPARAM   lParam;
-    LRESULT  lResult;
-} MSGPARAM16;
-
 /* map a Unicode string to a 16-bit pointer */
 inline static SEGPTR map_str_32W_to_16( LPCWSTR str )
 {
@@ -2281,13 +2274,13 @@
  * Unmap a message that was mapped from 32-bit Ansi to 16-bit.
  */
 static void WINPROC_UnmapMsg32ATo16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
-                                     MSGPARAM16* p16 )
+                                     WPARAM16 wParam16, LPARAM lParam16, LRESULT *result )
 {
     switch(msg)
     {
     case SBM_GETRANGE:
-        *(LPINT)wParam = LOWORD(p16->lResult);
-        *(LPINT)lParam = HIWORD(p16->lResult);
+        *(LPINT)wParam = LOWORD(*result);
+        *(LPINT)lParam = HIWORD(*result);
         break;
 
     case LB_ADDFILE:
@@ -2308,22 +2301,22 @@
     case WM_SETTEXT:
     case WM_WININICHANGE:
     case WM_DEVMODECHANGE:
-        UnMapLS( (SEGPTR)p16->lParam );
+        UnMapLS( (SEGPTR)lParam16 );
         break;
     case LB_SETTABSTOPS:
     case WM_COMPAREITEM:
     case WM_DELETEITEM:
     case WM_DRAWITEM:
         {
-            void *ptr = MapSL( p16->lParam );
-            UnMapLS( p16->lParam );
+            void *ptr = MapSL( lParam16 );
+            UnMapLS( lParam16 );
             HeapFree( GetProcessHeap(), 0, ptr );
         }
         break;
     case WM_COPYDATA:
         {
-            PCOPYDATASTRUCT16 pcds = MapSL( p16->lParam );
-            UnMapLS( p16->lParam );
+            PCOPYDATASTRUCT16 pcds = MapSL( lParam16 );
+            UnMapLS( lParam16 );
             UnMapLS( pcds->lpData );
             HeapFree( GetProcessHeap(), 0, pcds );
         }
@@ -2332,10 +2325,10 @@
     case LB_GETITEMRECT:
         {
             RECT *r32;
-            RECT16 *rect = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *(LPARAM *)(rect + 1);
-            r32 = (RECT *)p16->lParam;
+            RECT16 *rect = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *(LPARAM *)(rect + 1);
+            r32 = (RECT *)lParam16;
             r32->left   = rect->left;
             r32->top    = rect->top;
             r32->right  = rect->right;
@@ -2346,75 +2339,75 @@
     case LB_GETSELITEMS:
         {
             INT i;
-            LPINT16 items = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *((LPARAM *)items - 1);
-            for (i = 0; i < p16->wParam; i++) *((LPINT)(p16->lParam) + i) = items[i];
+            LPINT16 items = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *((LPARAM *)items - 1);
+            for (i = 0; i < wParam16; i++) *((LPINT)lParam16 + i) = items[i];
             HeapFree( GetProcessHeap(), 0, (LPARAM *)items - 1 );
         }
         break;
 
     case CB_GETEDITSEL:
         if( wParam )
-            *((PUINT)(wParam)) = LOWORD(p16->lResult);
+            *((PUINT)(wParam)) = LOWORD(*result);
         if( lParam )
-            *((PUINT)(lParam)) = HIWORD(p16->lResult);  /* FIXME: substract 1? */
+            *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: substract 1? */
         break;
 
     case WM_MEASUREITEM:
         {
-            MEASUREITEMSTRUCT16 *mis = MapSL(p16->lParam);
+            MEASUREITEMSTRUCT16 *mis = MapSL(lParam16);
             MEASUREITEMSTRUCT *mis32 = *(MEASUREITEMSTRUCT **)(mis + 1);
             mis32->itemWidth  = mis->itemWidth;
             mis32->itemHeight = mis->itemHeight;
-            UnMapLS( p16->lParam );
+            UnMapLS( lParam16 );
             HeapFree( GetProcessHeap(), 0, mis );
         }
         break;
     case WM_GETMINMAXINFO:
         {
-            MINMAXINFO16 *mmi = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *(LPARAM *)(mmi + 1);
-            MINMAXINFO16to32( mmi, (MINMAXINFO *)(p16->lParam) );
+            MINMAXINFO16 *mmi = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *(LPARAM *)(mmi + 1);
+            MINMAXINFO16to32( mmi, (MINMAXINFO *)lParam16 );
             HeapFree( GetProcessHeap(), 0, mmi );
         }
         break;
     case WM_GETTEXT:
     case WM_ASKCBFORMATNAME:
         {
-            LPSTR str = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *((LPARAM *)str - 1);
-            lstrcpynA( (LPSTR)(p16->lParam), str, p16->wParam );
+            LPSTR str = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *((LPARAM *)str - 1);
+            lstrcpynA( (LPSTR)lParam16, str, wParam16 );
             HeapFree( GetProcessHeap(), 0, (LPARAM *)str - 1 );
         }
         break;
     case WM_MDICREATE:
         {
-            MDICREATESTRUCT16 *cs = MapSL(p16->lParam);
+            MDICREATESTRUCT16 *cs = MapSL(lParam16);
             UnMapLS( cs->szTitle );
             UnMapLS( cs->szClass );
-            UnMapLS( p16->lParam );
+            UnMapLS( lParam16 );
             HeapFree( GetProcessHeap(), 0, cs );
         }
         break;
     case WM_MDIGETACTIVE:
-        if (lParam) *(BOOL *)lParam = (BOOL16)HIWORD(p16->lResult);
-        p16->lResult = (LRESULT)WIN_Handle32( LOWORD(p16->lResult) );
+        if (lParam) *(BOOL *)lParam = (BOOL16)HIWORD(*result);
+        *result = (LRESULT)WIN_Handle32( LOWORD(*result) );
         break;
     case WM_NCCALCSIZE:
         {
             NCCALCSIZE_PARAMS *nc32;
-            NCCALCSIZE_PARAMS16 *nc = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *(LPARAM *)(nc + 1);
-            nc32 = (NCCALCSIZE_PARAMS *)(p16->lParam);
+            NCCALCSIZE_PARAMS16 *nc = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *(LPARAM *)(nc + 1);
+            nc32 = (NCCALCSIZE_PARAMS *)lParam16;
             nc32->rgrc[0].left   = nc->rgrc[0].left;
             nc32->rgrc[0].top    = nc->rgrc[0].top;
             nc32->rgrc[0].right  = nc->rgrc[0].right;
             nc32->rgrc[0].bottom = nc->rgrc[0].bottom;
-            if (p16->wParam)
+            if (wParam16)
             {
                 WINDOWPOS16 *pos = MapSL(nc->lppos);
                 UnMapLS( nc->lppos );
@@ -2435,8 +2428,8 @@
     case WM_NCCREATE:
     case WM_CREATE:
         {
-            CREATESTRUCT16 *cs = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
+            CREATESTRUCT16 *cs = MapSL(lParam16);
+            UnMapLS( lParam16 );
             UnMapLS( cs->lpszName );
             UnMapLS( cs->lpszClass );
             if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
@@ -2453,30 +2446,30 @@
     case WM_WINDOWPOSCHANGING:
     case WM_WINDOWPOSCHANGED:
         {
-            WINDOWPOS16 *wp = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *(LPARAM *)(wp + 1);
-            WINDOWPOS16to32( wp, (WINDOWPOS *)p16->lParam );
+            WINDOWPOS16 *wp = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *(LPARAM *)(wp + 1);
+            WINDOWPOS16to32( wp, (WINDOWPOS *)lParam16 );
             HeapFree( GetProcessHeap(), 0, wp );
         }
         break;
     case WM_NOTIFY:
-        UnMapLS(p16->lParam);
+        UnMapLS(lParam16);
         break;
     case WM_GETDLGCODE:
-        if (p16->lParam)
+        if (lParam16)
         {
-            LPMSG16 msg16 = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
+            LPMSG16 msg16 = MapSL(lParam16);
+            UnMapLS( lParam16 );
             HeapFree( GetProcessHeap(), 0, msg16 );
         }
         break;
     case WM_NEXTMENU:
         {
             MDINEXTMENU *next = (MDINEXTMENU *)lParam;
-            next->hmenuNext = HMENU_32( LOWORD(p16->lResult) );
-            next->hwndNext = WIN_Handle32( HIWORD(p16->lResult) );
-            p16->lResult = 0;
+            next->hmenuNext = HMENU_32( LOWORD(*result) );
+            next->hwndNext = WIN_Handle32( HIWORD(*result) );
+            *result = 0;
         }
         break;
     }
@@ -2605,7 +2598,7 @@
  * Unmap a message that was mapped from 32-bit Unicode to 16-bit.
  */
 static void WINPROC_UnmapMsg32WTo16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
-                                     MSGPARAM16* p16 )
+                                     WPARAM16 wParam16, LPARAM lParam16, LRESULT *result )
 {
     switch(msg)
     {
@@ -2625,13 +2618,13 @@
     case WM_SETTEXT:
     case WM_WININICHANGE:
     case WM_DEVMODECHANGE:
-        unmap_str_32W_to_16( p16->lParam );
+        unmap_str_32W_to_16( lParam16 );
         break;
     case WM_NCCREATE:
     case WM_CREATE:
         {
-            CREATESTRUCT16 *cs = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
+            CREATESTRUCT16 *cs = MapSL(lParam16);
+            UnMapLS( lParam16 );
             unmap_str_32W_to_16( cs->lpszName );
             unmap_str_32W_to_16( cs->lpszClass );
 
@@ -2648,8 +2641,8 @@
         break;
     case WM_MDICREATE:
         {
-            MDICREATESTRUCT16 *cs = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
+            MDICREATESTRUCT16 *cs = MapSL(lParam16);
+            UnMapLS( lParam16 );
             unmap_str_32W_to_16( cs->szTitle );
             unmap_str_32W_to_16( cs->szClass );
             HeapFree( GetProcessHeap(), 0, cs );
@@ -2658,11 +2651,11 @@
     case WM_GETTEXT:
     case WM_ASKCBFORMATNAME:
         {
-            LPSTR str = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lParam = *((LPARAM *)str - 1);
-            MultiByteToWideChar( CP_ACP, 0, str, -1, (LPWSTR)p16->lParam, 0x7fffffff );
-            p16->lResult = strlenW( (LPWSTR)p16->lParam );
+            LPSTR str = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            lParam16 = *((LPARAM *)str - 1);
+            MultiByteToWideChar( CP_ACP, 0, str, -1, (LPWSTR)lParam16, 0x7fffffff );
+            *result = strlenW( (LPWSTR)lParam16 );
             HeapFree( GetProcessHeap(), 0, (LPARAM *)str - 1 );
         }
         break;
@@ -2670,14 +2663,14 @@
     case CB_GETLBTEXT:
         if ( WINPROC_TestLBForStr( hwnd, msg ))
         {
-            LPSTR str = MapSL(p16->lParam);
-            UnMapLS( p16->lParam );
-            p16->lResult = MultiByteToWideChar( CP_ACP, 0, str, -1, (LPWSTR)lParam, 0x7fffffff ) - 1;
+            LPSTR str = MapSL(lParam16);
+            UnMapLS( lParam16 );
+            *result = MultiByteToWideChar( CP_ACP, 0, str, -1, (LPWSTR)lParam, 0x7fffffff ) - 1;
             HeapFree( GetProcessHeap(), 0, (LPARAM *)str );
         }
         break;
     default:
-        WINPROC_UnmapMsg32ATo16( hwnd, msg, wParam, lParam, p16 );
+        WINPROC_UnmapMsg32ATo16( hwnd, msg, wParam, lParam, wParam16, lParam16, result );
         break;
     }
 }
@@ -3018,18 +3011,17 @@
 {
     LRESULT ret;
     UINT16 msg16;
-    MSGPARAM16 mp16;
+    WPARAM16 wParam16;
+    LPARAM lParam16;
 
     TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
                 hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam);
 
-    mp16.lParam = lParam;
-    if (WINPROC_MapMsg32ATo16( hwnd, msg, wParam, &msg16, &mp16.wParam, &mp16.lParam ) == -1)
+    lParam16 = lParam;
+    if (WINPROC_MapMsg32ATo16( hwnd, msg, wParam, &msg16, &wParam16, &lParam16 ) == -1)
         return 0;
-    ret = callback( HWND_16(hwnd), msg16, mp16.wParam, mp16.lParam, result, arg );
-    mp16.lResult = *result;
-    WINPROC_UnmapMsg32ATo16( hwnd, msg, wParam, lParam, &mp16 );
-    *result = mp16.lResult;
+    ret = callback( HWND_16(hwnd), msg16, wParam16, lParam16, result, arg );
+    WINPROC_UnmapMsg32ATo16( hwnd, msg, wParam, lParam, wParam16, lParam16, result );
     return ret;
 }
 
@@ -3044,18 +3036,17 @@
 {
     LRESULT ret;
     UINT16 msg16;
-    MSGPARAM16 mp16;
+    WPARAM16 wParam16;
+    LPARAM lParam16;
 
     TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
                 hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam);
 
-    mp16.lParam = lParam;
-    if (WINPROC_MapMsg32WTo16( hwnd, msg, wParam, &msg16, &mp16.wParam, &mp16.lParam ) == -1)
+    lParam16 = lParam;
+    if (WINPROC_MapMsg32WTo16( hwnd, msg, wParam, &msg16, &wParam16, &lParam16 ) == -1)
         return 0;
-    ret = callback( HWND_16(hwnd), msg16, mp16.wParam, mp16.lParam, result, arg );
-    mp16.lResult = *result;
-    WINPROC_UnmapMsg32WTo16( hwnd, msg, wParam, lParam, &mp16 );
-    *result = mp16.lResult;
+    ret = callback( HWND_16(hwnd), msg16, wParam16, lParam16, result, arg );
+    WINPROC_UnmapMsg32WTo16( hwnd, msg, wParam, lParam, wParam16, lParam16, result );
     return ret;
 }