1 package winapi_module_user
;
5 use vars
qw($VERSION @ISA @EXPORT @EXPORT_OK);
12 &get_message_result_type
13 &get_message_result_kind
14 &get_message_wparam_type
15 &get_message_wparam_kind
16 &get_message_lparam_type
17 &get_message_lparam_kind
20 use config
qw($wine_dir);
21 use options qw($options);
22 use output qw($output);
26 ########################################################################
30 ########################################################################
33 sub is_user_function {
35 if($name =~ /^(?:DefWindowProc|SendMessage)[AW]?$/) {
39 ########################################################################
44 id => 0, result => "void", wparam => ["", ""], lparam => "HWND" },
46 id => 0, result => "void", wparam => "BOOL", lparam => "LPARAM" },
49 id => 0, result => "", wparam => "", lparam => "" },
52 id => 0, result => "void", wparam => "void", lparam => "void" },
54 id => 0, result => "void", wparam => "TCHAR", lparam => ["", ""] },
56 id => 0x002f, result => "void", wparam => ["UINT", "int"], lparam => "HWND" },
58 id => 0, result => "void", wparam => "void", lparam => "void" },
60 id => 0, result => "void", wparam => ["int", "UINT"], lparam => "HWND" },
62 id => 0x0301, result => "void", wparam => "void", lparam => "void" },
64 id => 0, result => "void", wparam => "UINT", lparam => "void" },
66 id => 0, result => "int", wparam => "UINT", lparam => "const COMPAREITEMSTRUCT *" },
69 id => 0, result => "BOOL", wparam => "void", lparam => "LPCREATESTRUCT" },
71 id => 0x0135, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
73 id => 0x136, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
75 id => 0x133, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
76 WM_CTLCOLORLISTBOX => {
77 id => 0x134, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
78 WM_CTLCOLORMSGBOX => {
79 id => 0x132, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
80 WM_CTLCOLORSCROLLBAR => {
81 id => 0x137, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
82 WM_CTLCOLORSTATIC => {
83 id => 0x138, result => "HBRUSH", wparam => "HDC", lparam => "HWND" },
86 id => 0, result => "void", wparam => "void", lparam => "void" },
89 id => 0, result => "void", wparam => "TCHAR", lparam => ["", ""] },
91 id => 0, result => "void", wparam => "UINT", lparam => "const DELETEITEMSTRUCT *" },
93 id => 0, result => "void", wparam => "void", lparam => "LPCTSTR" },
95 id => 0, result => "void", wparam => "void", lparam => "void" },
97 id => 0, result => "void", wparam => "void", lparam => "const DRAWITEMSTRUCT *" },
99 id => 0, result => "void", wparam => "HDROP", lparam => "void" },
102 id => 0, result => "void", wparam => "BOOL", lparam => "void" },
104 id => 0, result => "void", wparam => "BOOL", lparam => "void" },
106 id => 0x0121, result => "void", wparam => "UINT", lparam => "HWND" },
107 WM_ENTERMENULOOP => {
108 id => 0x0211, result => "", wparam => "", lparam => "" },
110 id => 0, result => "BOOL", wparam => "HDC", lparam => "void" },
112 id => 0x0212, result => "", wparam => "", lparam => "" },
115 id => 0, result => "void", wparam => "void", lparam => "void" },
118 id => 0, result => "int", wparam => "int", lparam => "LPTSTR" },
119 WM_GETTEXTLENGTH => {
120 id => 0, result => "int", wparam => "void", lparam => "void" },
123 id => 0x0053, result => "", wparam => "", lparam => "" },
125 id => 0, result => "void", wparam => ["UINT", "int"], lparam => "HWND" },
127 WM_ICONERASEBKGND => {
128 id => 0, result => "BOOL", wparam => "HDC", lparam => "void" },
130 id => 0, result => "void", wparam => "HMENU", lparam => "void" },
131 WM_INITMENUPOPUP => {
132 id => 0, result => "void", wparam => "HMENU", lparam => ["UINT", "BOOL"] },
134 id => 0, result => "", wparam => "", lparam => "" },
137 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
139 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
141 id => 0, result => "void", wparam => "HWND", lparam => "void" },
144 id => 0, result => "", wparam => "", lparam => "" },
145 WM_LBUTTONDBLCLK => {
146 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
148 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
150 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
152 WM_MBUTTONDBLCLK => {
153 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
155 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
157 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
159 id => 0, result => "void", wparam => "UINT", lparam => "MEASUREITEMSTRUCT *" },
161 id => 0, result => "void", wparam => ["", ""], lparam => "HMENU" },
163 id => 0, result => "DWORD", wparam => ["", ""], lparam => "HMENU" },
164 WM_MOUSEACTIVATE => {
165 id => 0, result => "int", wparam => "HWND", lparam => ["", ""] },
167 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
169 id => 0, result => "void", wparam => "void", lparam => ["", ""] },
172 id => 0, result => "BOOL", wparam => "BOOL", lparam => "void" },
173 WM_NCLBUTTONDBLCLK => {
174 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
175 WM_NCLBUTTONDOWN => {
176 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
178 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
180 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
181 WM_NCMBUTTONDBLCLK => {
182 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
183 WM_NCMBUTTONDOWN => {
184 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
186 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
187 WM_NCRBUTTONDBLCLK => {
188 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
189 WM_NCRBUTTONDOWN => {
190 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
192 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
194 id => 0, result => "UINT", wparam => "void", lparam => "LPARAM" },
196 id => 0, result => "BOOL", wparam => "void", lparam => "LPCREATESTRUCT" },
198 id => 0, result => "void", wparam => "void", lparam => "void" },
200 id => 0, result => "void", wparam => "HRGN", lparam => "void" },
202 id => 0x0213, result => "", wparam => "", lparam => "" },
204 id => 0x004e, result => "LRESULT", wparam => "int", lparam => "NMHDR *" },
207 WM_PALETTEISCHANGING => {
208 id => 0, result => "void", wparam => "HWND", lparam => "void" },
209 WM_PALETTECHANGED => {
210 id => 0, result => "void", wparam => "HWND", lparam => "void" },
212 id => 0, result => "void", wparam => "void", lparam => "void" },
214 id => 0x0302, result => "void", wparam => "void", lparam => "void" },
216 id => 0, result => "void", wparam => "int", lparam => "void" },
218 WM_QUERYDRAGICON => {
219 id => 0, result => "HICON", wparam => "void", lparam => "void" },
220 WM_QUERYENDSESSION => {
221 id => 0, result => "BOOL", wparam => "void", lparam => "void" },
222 WM_QUERYNEWPALETTE => {
223 id => 0, result => "BOOL", wparam => "void", lparam => "void" },
225 id => 0, result => "BOOL", wparam => "void", lparam => "void" },
227 id => 0, result => "void", wparam => "WPARAM", lparam => "void" },
229 WM_RBUTTONDBLCLK => {
230 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
232 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
234 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
237 id => 0x0020, result => "", wparam => "HWND", lparam => ["UINT", "UINT"] },
239 id => 0, result => "void", wparam => "HWND", lparam => "void" },
241 id => 0x0030, result => "void", wparam => "HFONT", lparam => "BOOL" },
243 id => 0, result => "void", wparam => "BOOL", lparam => "void" },
245 id => 0, result => "void", wparam => "void", lparam => "LPCTSTR" },
247 id => 0, result => "void", wparam => "BOOL", lparam => "UINT" },
249 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
250 WM_SPOOLERSTATUS => {
251 id => 0, result => "void", wparam => "WPARAM", lparam => ["", ""] },
253 id => 0, result => "void", wparam => "TCHAR", lparam => ["", ""] },
254 WM_SYSCOLORCHANGE => {
255 id => 0, result => "void", wparam => "void", lparam => "void" },
257 id => 0, result => "void", wparam => "TCHAR", lparam => ["", ""] },
259 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
261 id => 0, result => "void", wparam => "UINT", lparam => ["", ""] },
264 id => 0, result => "void", wparam => "void", lparam => "void" },
267 id => 0x002e, result => "void", wparam => ["UINT", "int"], lparam => "HWND" },
269 id => 0, result => "void", wparam => ["UINT", "int"], lparam => "HWND" },
271 WM_WINDOWPOSCHANGING => {
272 id => 0, result => "BOOL", wparam => "void", lparam => "LPWINDOWPOS" },
273 WM_WINDOWPOSCHANGED => {
274 id => 0, result => "void", wparam => "void", lparam => "LPARAM" },
276 id => 0, result => "void", wparam => "void", lparam => "LPCTSTR" }
279 ########################################################################
287 } elsif(/^(?:HBRUSH|HDC|HFONT|HMENU|HRGN|HWND)$/ || /\*$/ ||
296 ########################################################################
297 # get_message_result_type
299 sub get_message_result_type {
301 return $$message{$name}{result};
304 ########################################################################
305 # get_message_result_kind
307 sub get_message_result_kind {
308 return _get_kind(get_message_result_type(@_));
311 ########################################################################
312 # get_message_wparam_type
314 sub get_message_wparam_type {
316 return $$message{$name}{wparam};
319 ########################################################################
320 # get_message_wparam_kind
322 sub get_message_wparam_kind {
323 return _get_kind(get_message_wparam_type(@_));
326 ########################################################################
327 # get_message_lparam_type
329 sub get_message_lparam_type {
331 return $$message{$name}{lparam};
334 ########################################################################
335 # get_message_lparam_kind
337 sub get_message_lparam_kind {
338 return _get_kind(get_message_lparam_type(@_));
341 ########################################################################
344 sub _parse_windowsx_h {
345 my $file = "$wine_dir/include/windowsx.h";
353 my $parser = new c_parser($file);
355 my $found_preprocessor = sub {
356 my $begin_line = shift;
357 my $begin_column = shift;
360 if(!s/^\#\s*define\s*// || !/^FORWARD_WM_/) {
365 if(s/^FORWARD_(\w+)\([^\)]*\)\s*(.*?)\s*$/$2/s) {
369 if($msg eq "WM_SYSTEMERROR") {
374 if(s/^\(\s*(\w+)\s*\)(?:\(\s*\w+\s*\))*\(\s*\w+\s*\)\(\s*(?:hwnd|\(hwnd\))\s*,\s*(.*?)\s*\)$/$2/) {
381 if(s/^$msg\s*,\s*//) {
383 } elsif(s/^\(\w+\)\s*\?\s*(\w+)\s*:\s*(\w+)\s*,\s*//s) {
390 if(s/^\(WPARAM\)(?:\(\s*(\w+)\s*\))*\((.*?)\)\s*,\s*//) {
396 } elsif(s/^MAKEWPARAM\(\s*(.*?)\s*,\s*(.*?)\s*\)\s*,\s*//) {
397 $wparam = "(,)"; # "($1, $2)";
398 } elsif(s/^\((.*?)\)$//) {
400 } elsif(s/^0L\s*,\s*//) {
407 if(s/^\(LPARAM\)(?:\(\s*(\w+)\s*\))*\((.*?)\)$//) {
413 } elsif(s/^MAKELPARAM\(\s*(.*?)\s*,\s*(.*?)\s*\)$//) {
414 $lparam = "(,)"; # "($1, $2)";
415 } elsif(s/^\((.*?)\)$//) {
423 foreach my $msg (@msgs) {
424 $output->write("$msg => { result => \"$return_type\", wparam => \"$wparam\", lparam => \"$lparam\" },\n");
430 $parser->set_found_preprocessor_callback($found_preprocessor);
435 my $old_prefix = $output->prefix;
436 $output->progress("$file");
437 $output->prefix("$file: ");
439 if(!$parser->parse_c_file(\$_, \$line, \$column)) {
440 $output->write("can't parse file\n");
443 $output->prefix($old_prefix);