- implemented correctly the HSZ as local atoms and added the needed
[wine] / dlls / user / thunk.c
1 /*
2  * USER 16-bit thunks
3  *
4  * Copyright 1996, 1997 Alexandre Julliard
5  * Copyright 1998       Ulrich Weigand
6  */
7
8 #include "windef.h"
9 #include "wingdi.h"
10 #include "wine/winuser16.h"
11 #include "callback.h"
12
13 /* ### start build ### */
14 extern WORD CALLBACK THUNK_CallTo16_word_wl   (FARPROC16,WORD,LONG);
15 extern WORD CALLBACK THUNK_CallTo16_word_wlw  (FARPROC16,WORD,LONG,WORD);
16 extern WORD CALLBACK THUNK_CallTo16_word_wlwww(FARPROC16,WORD,LONG,WORD,WORD,WORD);
17 /* ### stop build ### */
18
19
20 /*******************************************************************
21  *           EnumWindows   (USER.54)
22  */
23 BOOL16 WINAPI EnumWindows16( WNDENUMPROC16 func, LPARAM lParam )
24 {
25     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wl );
26     return EnumWindows( (WNDENUMPROC)&thunk, lParam );
27 }
28
29
30 /**********************************************************************
31  *           EnumChildWindows   (USER.55)
32  */
33 BOOL16 WINAPI EnumChildWindows16( HWND16 parent, WNDENUMPROC16 func, LPARAM lParam )
34 {
35     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wl );
36     return EnumChildWindows( parent, (WNDENUMPROC)&thunk, lParam );
37 }
38
39
40 /**********************************************************************
41  *           EnumTaskWindows   (USER.225)
42  */
43 BOOL16 WINAPI THUNK_EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
44                                        LPARAM lParam )
45 {
46     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wl );
47     return EnumTaskWindows16( hTask, (WNDENUMPROC16)&thunk, lParam );
48 }
49
50
51 /***********************************************************************
52  *           EnumProps   (USER.27)
53  */
54 INT16 WINAPI THUNK_EnumProps16( HWND16 hwnd, PROPENUMPROC16 func )
55 {
56     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wlw );
57     return EnumProps16( hwnd, (PROPENUMPROC16)&thunk );
58 }
59
60
61 /***********************************************************************
62  *           GrayString   (USER.185)
63  */
64 BOOL16 WINAPI THUNK_GrayString16( HDC16 hdc, HBRUSH16 hbr,
65                                   GRAYSTRINGPROC16 func, LPARAM lParam,
66                                   INT16 cch, INT16 x, INT16 y,
67                                   INT16 cx, INT16 cy )
68 {
69     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wlw );
70     if (!func)
71         return GrayString16( hdc, hbr, NULL, lParam, cch, x, y, cx, cy );
72     else
73         return GrayString16( hdc, hbr, (GRAYSTRINGPROC16)&thunk, lParam, cch,
74                              x, y, cx, cy );
75 }
76
77
78 /**********************************************************************
79  *           DrawState    (USER.449)
80  */
81 BOOL16 WINAPI DrawState16( HDC16 hdc, HBRUSH16 hbr, DRAWSTATEPROC16 func, LPARAM ldata,
82                            WPARAM16 wdata, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags )
83 {
84     UINT opcode = flags & 0xf;
85     DECL_THUNK( thunk, func, THUNK_CallTo16_word_wlwww );
86
87     if (opcode == DST_TEXT || opcode == DST_PREFIXTEXT)
88     {
89         /* make sure DrawStateA doesn't try to use ldata as a pointer */
90         if (!wdata) wdata = strlen( MapSL(ldata) );
91         if (!cx || !cy)
92         {
93             SIZE s;
94             if (!GetTextExtentPoint32A( hdc, MapSL(ldata), wdata, &s )) return FALSE;
95             if (!cx) cx = s.cx;
96             if (!cy) cy = s.cy;
97         }
98     }
99     return DrawStateA( hdc, hbr, (DRAWSTATEPROC)&thunk, ldata, wdata, x, y, cx, cy, flags );
100 }