Release 960428
[wine/multimedia.git] / if1632 / relay32.c
blobc67ac680e77fe547bc03da579f58356d4ee2a1bf
1 /*
2 * Copyright 1995 Martin von Loewis
3 */
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <fcntl.h>
11 #include <unistd.h>
12 #include <errno.h>
13 #include "windows.h"
14 #include "callback.h"
15 #include "module.h"
16 #include "neexe.h"
17 #include "peexe.h"
18 #include "relay32.h"
19 #include "struct32.h"
20 #include "stackframe.h"
21 #include "ldt.h"
22 #include "stddebug.h"
23 #include "debug.h"
26 LONG RELAY32_CallWindowProcConvStruct( WNDPROC func, int hwnd, int message,
27 int wParam, LPARAM lParam16)
29 WINDOWPOS32 wp;
30 union {
31 MINMAXINFO32 mmi;
32 NCCALCSIZE_PARAMS32 nccs;
33 CREATESTRUCT32 cs;
34 } st;
35 CREATESTRUCT *lpcs;
36 LONG result;
37 void *lParam;
38 if(!lParam16)
39 return CallWndProc32(func,hwnd,message,wParam,(int)lParam16);
40 lParam = PTR_SEG_TO_LIN(lParam16);
41 switch(message) {
42 case WM_GETMINMAXINFO:
43 STRUCT32_MINMAXINFO16to32(lParam,&st.mmi);
44 result=CallWndProc32(func,hwnd,message,wParam,(int)&st.mmi);
45 STRUCT32_MINMAXINFO32to16(&st.mmi,lParam);
46 return result;
47 case WM_WINDOWPOSCHANGING:
48 case WM_WINDOWPOSCHANGED:
49 STRUCT32_WINDOWPOS16to32(lParam,&wp);
50 result=CallWndProc32(func,hwnd,message,wParam,(int)&wp);
51 STRUCT32_WINDOWPOS32to16(&wp,lParam);
52 return result;
53 case WM_NCCALCSIZE:
54 STRUCT32_NCCALCSIZE16to32Flat(lParam,&st.nccs);
55 if(((NCCALCSIZE_PARAMS*)lParam)->lppos) {
56 STRUCT32_WINDOWPOS16to32(((NCCALCSIZE_PARAMS*)lParam)->lppos,&wp);
57 st.nccs.lppos=&wp;
58 } else
59 st.nccs.lppos= 0;
60 result=CallWndProc32(func,hwnd,message,wParam,(int)&st.nccs);
61 STRUCT32_NCCALCSIZE32to16Flat(&st.nccs,lParam);
62 if(((NCCALCSIZE_PARAMS*)lParam)->lppos)
63 STRUCT32_WINDOWPOS32to16(&wp,((NCCALCSIZE_PARAMS*)lParam)->lppos);
64 return result;
65 case WM_NCCREATE:
66 lpcs = (CREATESTRUCT*)lParam;
67 STRUCT32_CREATESTRUCT16to32(lParam,&st.cs);
68 st.cs.lpszName = HIWORD(lpcs->lpszName) ?
69 PTR_SEG_TO_LIN(lpcs->lpszName) : (char*)lpcs->lpszName;
70 st.cs.lpszClass = HIWORD(lpcs->lpszClass) ?
71 PTR_SEG_TO_LIN(lpcs->lpszClass) : (char*)lpcs->lpszClass;
72 result=CallWndProc32(func,hwnd,message,wParam,(int)&st.cs);
73 STRUCT32_CREATESTRUCT32to16(&st.cs,lParam);
74 lpcs->lpszName = HIWORD(st.cs.lpszName) ?
75 MAKE_SEGPTR(st.cs.lpszName) : (SEGPTR)st.cs.lpszName;
76 lpcs->lpszClass = HIWORD(st.cs.lpszClass) ?
77 MAKE_SEGPTR(st.cs.lpszClass) : (SEGPTR)st.cs.lpszClass;
78 return result;
79 case WM_GETTEXT:
80 case WM_SETTEXT:
81 return CallWndProc32(func,hwnd,message,wParam,(int)lParam);
82 default:
83 fprintf(stderr,"No conversion function for message %d\n",message);
85 return CallWndProc32(func,hwnd,message,wParam,(int)lParam);