Use DllOverrides from wine.ini as defaults also in
[wine] / include / windef.h
1 /*
2  * Basic types definitions
3  *
4  * Copyright 1996 Alexandre Julliard
5  */
6
7 #ifndef __WINE_WINDEF_H
8 #define __WINE_WINDEF_H
9
10 #ifdef __WINE__
11 # include "config.h"
12 # undef UNICODE
13 #endif  /* __WINE__ */
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 /* Misc. constants. */
20
21 #ifdef FALSE
22 #undef FALSE
23 #endif
24 #define FALSE 0
25
26 #ifdef TRUE
27 #undef TRUE
28 #endif
29 #define TRUE  1
30
31 #ifdef NULL
32 #undef NULL
33 #endif
34 #define NULL  0
35
36 /* Macros to map Winelib names to the correct implementation name */
37 /* depending on __WINE__ and UNICODE macros.                      */
38 /* Note that Winelib is purely Win32.                             */
39
40 #ifdef __WINE__
41 # define WINELIB_NAME_AW(func)   this_is_a_syntax_error this_is_a_syntax_error
42 #else  /* __WINE__ */
43 # ifdef UNICODE
44 #  define WINELIB_NAME_AW(func) func##W
45 # else
46 #  define WINELIB_NAME_AW(func) func##A
47 # endif  /* UNICODE */
48 #endif  /* __WINE__ */
49
50 #ifdef __WINE__
51 # define DECL_WINELIB_TYPE_AW(type)  /* nothing */
52 #else   /* __WINE__ */
53 # define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;
54 #endif  /* __WINE__ */
55
56
57 /* Calling conventions definitions */
58
59 #ifdef __i386__
60 # if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)
61 #  define __stdcall __attribute__((__stdcall__))
62 #  define __cdecl   __attribute__((__cdecl__))
63 #  define __RESTORE_ES  __asm__ __volatile__("pushl %ds\n\tpopl %es")
64 # else
65 #  error You need gcc >= 2.7 to build Wine on a 386
66 # endif  /* __GNUC__ */
67 #else  /* __i386__ */
68 # define __stdcall
69 # define __cdecl
70 # define __RESTORE_ES
71 #endif  /* __i386__ */
72
73 #define CALLBACK    __stdcall
74 #define WINAPI      __stdcall
75 #define APIPRIVATE  __stdcall
76 #define PASCAL      __stdcall
77 #define _pascal     __stdcall
78 #define _stdcall    __stdcall
79 #define _fastcall   __stdcall
80 #define __export    __stdcall
81 #define WINAPIV     __cdecl
82 #define APIENTRY    WINAPI
83
84 #define CONST       const
85
86 /* Standard data types. These are the same for emulator and library. */
87
88 typedef void            VOID;
89 typedef short           INT16;
90 typedef unsigned short  UINT16;
91 typedef int             INT;
92 typedef unsigned int    UINT;
93 typedef unsigned short  WORD;
94 typedef unsigned long   DWORD;
95 typedef unsigned long   ULONG;
96 typedef unsigned char   BYTE;
97 typedef long            LONG;
98 typedef short           SHORT;
99 typedef unsigned short  USHORT;
100 typedef char            CHAR;
101 typedef unsigned char   UCHAR;
102 /* Some systems might have wchar_t, but we really need 16 bit characters */
103 typedef unsigned short  WCHAR;
104 typedef unsigned short  BOOL16;
105 typedef int             BOOL;
106 typedef double          DATE;
107 typedef long            LONG_PTR;
108 typedef unsigned long   ULONG_PTR;
109 typedef double          DOUBLE;
110 typedef double          LONGLONG;
111 typedef double          ULONGLONG;
112
113 /* Integer types. These are the same for emulator and library. */
114
115 typedef UINT16          HANDLE16;
116 typedef UINT            HANDLE;
117 typedef UINT16         *LPHANDLE16;
118 typedef UINT           *LPHANDLE;
119 typedef UINT16          WPARAM16;
120 typedef UINT            WPARAM;
121 typedef LONG            LPARAM;
122 typedef LONG            HRESULT;
123 typedef LONG            LRESULT;
124 typedef WORD            ATOM;
125 typedef WORD            CATCHBUF[9];
126 typedef WORD           *LPCATCHBUF;
127 typedef DWORD           ACCESS_MASK;
128 typedef ACCESS_MASK     REGSAM;
129 typedef HANDLE          HHOOK;
130 typedef HANDLE          HKEY;
131 typedef HANDLE          HMONITOR;
132 typedef DWORD           LCID;
133 typedef WORD            LANGID;
134 typedef DWORD           LCTYPE;
135 typedef float           FLOAT;
136 typedef long long       __int64;
137
138 /* Pointers types. These are the same for emulator and library. */
139 /* winnt types */
140 typedef VOID           *PVOID;
141 typedef const void     *PCVOID;
142 typedef CHAR           *PCHAR;
143 typedef UCHAR          *PUCHAR;
144 typedef BYTE           *PBYTE;
145 typedef ULONG          *PULONG;
146 typedef LONG           *PLONG;
147 typedef DWORD          *PDWORD;
148 /* common win32 types */
149 typedef CHAR           *LPSTR;
150 typedef CHAR           *PSTR;
151 typedef const CHAR     *LPCSTR;
152 typedef const CHAR     *PCSTR;
153 typedef WCHAR          *LPWSTR;
154 typedef WCHAR          *PWSTR;
155 typedef const WCHAR    *LPCWSTR;
156 typedef const WCHAR    *PCWSTR;
157 typedef BYTE           *LPBYTE;
158 typedef WORD           *LPWORD;
159 typedef DWORD          *LPDWORD;
160 typedef LONG           *LPLONG;
161 typedef VOID           *LPVOID;
162 typedef const VOID     *LPCVOID;
163 typedef INT16          *LPINT16;
164 typedef UINT16         *LPUINT16;
165 typedef INT            *PINT;
166 typedef INT            *LPINT;
167 typedef UINT           *PUINT;
168 typedef UINT           *LPUINT;
169 typedef HKEY           *LPHKEY;
170 typedef HKEY           *PHKEY;
171 typedef FLOAT          *PFLOAT;
172 typedef FLOAT          *LPFLOAT;
173 typedef BOOL           *PBOOL;
174 typedef BOOL           *LPBOOL;
175
176 /* Special case: a segmented pointer is just a pointer in the user's code. */
177
178 #ifdef __WINE__
179 typedef DWORD SEGPTR;
180 #else
181 typedef void* SEGPTR;
182 #endif /* __WINE__ */
183
184 /* Handle types that exist both in Win16 and Win32. */
185
186 #define DECLARE_HANDLE(a) \
187         typedef HANDLE16 a##16; \
188         typedef HANDLE a; \
189         typedef a##16 *P##a##16; \
190         typedef a##16 *NP##a##16; \
191         typedef a##16 *LP##a##16; \
192         typedef a *P##a; \
193         typedef a *LP##a
194 DECLARE_HANDLE(HACMDRIVERID);
195 DECLARE_HANDLE(HACMDRIVER);
196 DECLARE_HANDLE(HACMOBJ);
197 DECLARE_HANDLE(HACMSTREAM);
198 DECLARE_HANDLE(HMETAFILEPICT);
199
200 DECLARE_HANDLE(HACCEL);
201 DECLARE_HANDLE(HBITMAP);
202 DECLARE_HANDLE(HBRUSH);
203 DECLARE_HANDLE(HCOLORSPACE);
204 DECLARE_HANDLE(HCURSOR);
205 DECLARE_HANDLE(HDC);
206 DECLARE_HANDLE(HDROP);
207 DECLARE_HANDLE(HDRVR);
208 DECLARE_HANDLE(HDWP);
209 DECLARE_HANDLE(HENHMETAFILE);
210 DECLARE_HANDLE(HFILE);
211 DECLARE_HANDLE(HFONT);
212 DECLARE_HANDLE(HGDIOBJ);
213 DECLARE_HANDLE(HGLOBAL);
214 DECLARE_HANDLE(HICON);
215 DECLARE_HANDLE(HINSTANCE);
216 DECLARE_HANDLE(HLOCAL);
217 DECLARE_HANDLE(HMENU);
218 DECLARE_HANDLE(HMETAFILE);
219 DECLARE_HANDLE(HMIDI);
220 DECLARE_HANDLE(HMIDIIN);
221 DECLARE_HANDLE(HMIDIOUT);
222 DECLARE_HANDLE(HMIDISTRM);
223 DECLARE_HANDLE(HMIXER);
224 DECLARE_HANDLE(HMIXEROBJ);
225 DECLARE_HANDLE(HMMIO);
226 DECLARE_HANDLE(HMODULE);
227 DECLARE_HANDLE(HPALETTE);
228 DECLARE_HANDLE(HPEN);
229 DECLARE_HANDLE(HQUEUE);
230 DECLARE_HANDLE(HRGN);
231 DECLARE_HANDLE(HRSRC);
232 DECLARE_HANDLE(HTASK);
233 DECLARE_HANDLE(HWAVE);
234 DECLARE_HANDLE(HWAVEIN);
235 DECLARE_HANDLE(HWAVEOUT);
236 DECLARE_HANDLE(HWINSTA);
237 DECLARE_HANDLE(HDESK);
238 DECLARE_HANDLE(HWND);
239 DECLARE_HANDLE(HKL);
240 DECLARE_HANDLE(HIC);
241 DECLARE_HANDLE(HRASCONN);
242 #undef DECLARE_HANDLE
243
244 /* Callback function pointers types */
245
246 typedef BOOL    (CALLBACK* DATEFMT_ENUMPROCA)(LPSTR);
247 typedef BOOL    (CALLBACK* DATEFMT_ENUMPROCW)(LPWSTR);
248 DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
249 typedef BOOL16  (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
250 typedef BOOL    (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);
251 typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
252 typedef LRESULT (CALLBACK *DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
253 typedef INT16   (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
254 typedef INT     (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
255 typedef INT     (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
256 DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
257 typedef LRESULT (CALLBACK *FARPROC16)();
258 typedef LRESULT (CALLBACK *FARPROC)();
259 typedef INT16   (CALLBACK *PROC16)();
260 typedef INT     (CALLBACK *PROC)();
261 typedef INT16   (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM);
262 typedef INT     (CALLBACK *GOBJENUMPROC)(LPVOID,LPARAM);
263 typedef BOOL16  (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
264 typedef BOOL    (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT);
265 typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM);
266 typedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM);
267 typedef VOID    (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM);
268 typedef VOID    (CALLBACK *LINEDDAPROC)(INT,INT,LPARAM);
269 typedef BOOL16  (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
270 typedef BOOL    (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
271 typedef BOOL    (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
272 DECL_WINELIB_TYPE_AW(PROPENUMPROC)
273 typedef BOOL    (CALLBACK *PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
274 typedef BOOL    (CALLBACK *PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
275 DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
276 typedef BOOL    (CALLBACK* TIMEFMT_ENUMPROCA)(LPSTR);
277 typedef BOOL    (CALLBACK* TIMEFMT_ENUMPROCW)(LPWSTR);
278 DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
279 typedef VOID    (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
280 typedef VOID    (CALLBACK *TIMERPROC)(HWND,UINT,UINT,DWORD);
281 typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM);
282 typedef LRESULT (CALLBACK *WNDENUMPROC)(HWND,LPARAM);
283 typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
284 typedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
285
286 /* TCHAR data types definitions for Winelib. */
287 /* These types are _not_ defined for the emulator, because they */
288 /* depend on the UNICODE macro that only exists in user's code. */
289
290 #ifndef __WINE__
291 # ifdef UNICODE
292 typedef WCHAR TCHAR;
293 typedef LPWSTR LPTSTR;
294 typedef LPCWSTR LPCTSTR;
295 #define __TEXT(string) L##string /*probably wrong */
296 # else  /* UNICODE */
297 typedef CHAR TCHAR;
298 typedef LPSTR LPTSTR;
299 typedef LPCSTR LPCTSTR;
300 #define __TEXT(string) string
301 # endif /* UNICODE */
302 #endif   /* __WINE__ */
303 #define TEXT(quote) __TEXT(quote)
304
305 /* Data types specific to the library. These do _not_ exist in the emulator. */
306
307
308
309 /* Define some empty macros for compatibility with Windows code. */
310
311 #ifndef __WINE__
312 #define NEAR
313 #define FAR
314 #define near
315 #define far
316 #define _near
317 #define _far
318 #define IN
319 #define OUT
320 #define OPTIONAL
321 #endif  /* __WINE__ */
322
323 /* Macro for structure packing. */
324
325 #ifdef __GNUC__
326 #define WINE_PACKED __attribute__ ((packed))
327 #define WINE_UNUSED __attribute__ ((unused))
328 #else
329 #define WINE_PACKED  /* nothing */
330 #define WINE_UNUSED  /* nothing */
331 #endif
332
333 /* Macros to split words and longs. */
334
335 #define LOBYTE(w)              ((BYTE)(WORD)(w))
336 #define HIBYTE(w)              ((BYTE)((WORD)(w) >> 8))
337
338 #define LOWORD(l)              ((WORD)(DWORD)(l))
339 #define HIWORD(l)              ((WORD)((DWORD)(l) >> 16))
340
341 #define SLOWORD(l)             ((INT16)(LONG)(l))
342 #define SHIWORD(l)             ((INT16)((LONG)(l) >> 16))
343
344 #define MAKEWORD(low,high)     ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
345 #define MAKELONG(low,high)     ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
346 #define MAKELPARAM(low,high)   ((LPARAM)MAKELONG(low,high))
347 #define MAKEWPARAM(low,high)   ((WPARAM)MAKELONG(low,high))
348 #define MAKELRESULT(low,high)  ((LRESULT)MAKELONG(low,high))
349 #define MAKEINTATOM(atom)      ((LPCSTR)MAKELONG((atom),0))
350
351 #define SELECTOROF(ptr)     (HIWORD(ptr))
352 #define OFFSETOF(ptr)       (LOWORD(ptr))
353
354 /* Macros to access unaligned or wrong-endian WORDs and DWORDs. */
355 /* Note: These macros are semantically broken, at least for wrc.  wrc
356    spits out data in the platform's current binary format, *not* in 
357    little-endian format.  These macros are used throughout the resource
358    code to load and store data to the resources.  Since it is unlikely 
359    that we'll ever be dealing with little-endian resource data, the 
360    byte-swapping nature of these macros has been disabled.  Rather than 
361    remove the use of these macros from the resource loading code, the
362    macros have simply been disabled.  In the future, someone may want 
363    to reactivate these macros for other purposes.  In that case, the
364    resource code will have to be modified to use different macros. */ 
365
366 #if 1
367 #define PUT_WORD(ptr,w)   (*(WORD *)(ptr) = (w))
368 #define GET_WORD(ptr)     (*(WORD *)(ptr))
369 #define PUT_DWORD(ptr,dw) (*(DWORD *)(ptr) = (dw))
370 #define GET_DWORD(ptr)    (*(DWORD *)(ptr))
371 #else
372 #define PUT_WORD(ptr,w)   (*(BYTE *)(ptr) = LOBYTE(w), \
373                            *((BYTE *)(ptr) + 1) = HIBYTE(w))
374 #define GET_WORD(ptr)     ((WORD)(*(BYTE *)(ptr) | \
375                                   (WORD)(*((BYTE *)(ptr)+1) << 8)))
376 #define PUT_DWORD(ptr,dw) (PUT_WORD((ptr),LOWORD(dw)), \
377                            PUT_WORD((WORD *)(ptr)+1,HIWORD(dw)))
378 #define GET_DWORD(ptr)    ((DWORD)(GET_WORD(ptr) | \
379                                    ((DWORD)GET_WORD((WORD *)(ptr)+1) << 16)))
380 #endif  /* 1 */
381
382 /* MIN and MAX macros */
383
384 #ifdef MAX
385 #undef MAX
386 #endif
387 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
388
389 #ifdef MIN
390 #undef MIN
391 #endif
392 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
393
394 #define __max(a,b) MAX(a,b)
395 #define __min(a,b) MIN(a,b)
396 #define max(a,b)   MAX(a,b)
397 #define min(a,b)   MIN(a,b)
398
399 #define _MAX_PATH  260
400 #define MAX_PATH   260
401 #define _MAX_DRIVE 3
402 #define _MAX_DIR   256
403 #define _MAX_FNAME 255
404 #define _MAX_EXT   256
405
406 #define HFILE_ERROR16   ((HFILE16)-1)
407 #define HFILE_ERROR     ((HFILE)-1)
408
409 /* Winelib run-time flag */
410
411 #ifdef __WINE__
412 extern int __winelib;
413 #endif  /* __WINE__ */
414
415 /* The SIZE structure */
416
417 typedef struct
418 {
419     INT16  cx;
420     INT16  cy;
421 } SIZE16, *PSIZE16, *LPSIZE16;
422
423 typedef struct tagSIZE
424 {
425     INT  cx;
426     INT  cy;
427 } SIZE, *PSIZE, *LPSIZE;
428
429
430 typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
431
432 #define CONV_SIZE16TO32(s16,s32) \
433             ((s32)->cx = (INT)(s16)->cx, (s32)->cy = (INT)(s16)->cy)
434 #define CONV_SIZE32TO16(s32,s16) \
435             ((s16)->cx = (INT16)(s32)->cx, (s16)->cy = (INT16)(s32)->cy)
436
437 /* The POINT structure */
438
439 typedef struct
440 {
441     INT16  x;
442     INT16  y;
443 } POINT16, *PPOINT16, *LPPOINT16;
444
445 typedef struct tagPOINT
446 {
447     LONG  x;
448     LONG  y;
449 } POINT, *PPOINT, *LPPOINT;
450
451 typedef struct _POINTL
452 {
453     LONG x;
454     LONG y;
455 } POINTL;
456
457 #define CONV_POINT16TO32(p16,p32) \
458             ((p32)->x = (INT)(p16)->x, (p32)->y = (INT)(p16)->y)
459 #define CONV_POINT32TO16(p32,p16) \
460             ((p16)->x = (INT16)(p32)->x, (p16)->y = (INT16)(p32)->y)
461
462 #define MAKEPOINT16(l) (*((POINT16 *)&(l)))
463
464 /* The POINTS structure */
465
466 typedef struct tagPOINTS
467 {
468         SHORT x;
469         SHORT y;
470 } POINTS, *PPOINTS, *LPPOINTS;
471
472
473 #define MAKEPOINTS(l)  (*((POINTS *)&(l)))
474
475
476 /* The RECT structure */
477
478 typedef struct
479 {
480     INT16  left;
481     INT16  top;
482     INT16  right;
483     INT16  bottom;
484 } RECT16, *LPRECT16;
485
486 typedef struct tagRECT
487 {
488     INT  left;
489     INT  top;
490     INT  right;
491     INT  bottom;
492 } RECT, *PRECT, *LPRECT;
493 typedef const RECT *LPCRECT;
494
495
496 typedef struct tagRECTL
497 {
498     LONG left;
499     LONG top;  
500     LONG right;
501     LONG bottom;
502 } RECTL, *PRECTL, *LPRECTL;
503
504 typedef const RECTL *LPCRECTL;
505
506 #define CONV_RECT16TO32(r16,r32) \
507     ((r32)->left  = (INT)(r16)->left,  (r32)->top    = (INT)(r16)->top, \
508      (r32)->right = (INT)(r16)->right, (r32)->bottom = (INT)(r16)->bottom)
509 #define CONV_RECT32TO16(r32,r16) \
510     ((r16)->left  = (INT16)(r32)->left,  (r16)->top    = (INT16)(r32)->top, \
511      (r16)->right = (INT16)(r32)->right, (r16)->bottom = (INT16)(r32)->bottom)
512
513 #ifdef __cplusplus
514 }
515 #endif
516
517 #endif /* __WINE_WINDEF_H */