Partial merge from the ROX-U branch (various fixes for Visual C++ compilation, see...
[reactos.git] / reactos / w32api / include / windef.h
1 #ifndef _WINDEF_H
2 #define _WINDEF_H
3 #if __GNUC__ >=3
4 #pragma GCC system_header
5 #endif
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #ifndef WINVER
12 #define WINVER 0x0400
13 /*
14 * If you need Win32 API features newer the Win95 and WinNT then you must
15 * define WINVER before including windows.h or any other method of including
16 * the windef.h header.
17 */
18 #endif
19 #ifndef _WIN32_WINNT
20 #define _WIN32_WINNT WINVER
21 /*
22 * There may be the need to define _WIN32_WINNT to a value different from
23 * the value of WINVER. I don't have any example of why you would do that.
24 * However, if you must then define _WIN32_WINNT to the value required before
25 * including windows.h or any other method of including the windef.h header.
26 */
27 #endif
28 #ifndef WIN32
29 #define WIN32
30 #endif
31 #ifndef _WIN32
32 #define _WIN32
33 #endif
34 #define FAR
35 #define far
36 #define NEAR
37 #define near
38 #ifndef CONST
39 #define CONST const
40 #endif
41 #undef MAX_PATH
42 #define MAX_PATH 260
43
44 #ifndef NULL
45 #ifdef __cplusplus
46 #define NULL 0
47 #else
48 #define NULL ((void*)0)
49 #endif
50 #endif
51 #ifndef FALSE
52 #define FALSE 0
53 #endif
54 #ifndef TRUE
55 #define TRUE 1
56 #endif
57 #define IN
58 #define OUT
59 #ifndef OPTIONAL
60 #define OPTIONAL
61 #endif
62
63 #ifdef __GNUC__
64 #define PACKED __attribute__((packed))
65 #ifndef _fastcall
66 #define _fastcall __attribute__((fastcall))
67 #endif
68 #ifndef __fastcall
69 #define __fastcall __attribute__((fastcall))
70 #endif
71 #ifndef _stdcall
72 #define _stdcall __attribute__((stdcall))
73 #endif
74 #ifndef __stdcall
75 #define __stdcall __attribute__((stdcall))
76 #endif
77 #ifndef _cdecl
78 #define _cdecl __attribute__((cdecl))
79 #endif
80 #ifndef __cdecl
81 #define __cdecl __attribute__((cdecl))
82 #endif
83 #ifndef __declspec
84 #define __declspec(e) __attribute__((e))
85 #endif
86 #ifndef _declspec
87 #define _declspec(e) __attribute__((e))
88 #endif
89 #elif defined(__WATCOMC__)
90 #define PACKED
91 #else
92 #define PACKED
93 #define _cdecl
94 #define __cdecl
95 #endif
96
97 #undef pascal
98 #undef _pascal
99 #undef __pascal
100 #define pascal __stdcall
101 #define _pascal __stdcall
102 #define __pascal __stdcall
103 #define PASCAL _pascal
104 #define CDECL _cdecl
105 #define STDCALL __stdcall
106 #define FASTCALL __fastcall
107 #define WINAPI __stdcall
108 #define WINAPIV __cdecl
109 #define APIENTRY __stdcall
110 #define CALLBACK __stdcall
111 #define APIPRIVATE __stdcall
112
113 #define DECLSPEC_IMPORT __declspec(dllimport)
114 #define DECLSPEC_EXPORT __declspec(dllexport)
115 #ifdef __GNUC__
116 #define DECLSPEC_NORETURN __declspec(noreturn)
117 #define DECLARE_STDCALL_P( type ) __stdcall type
118 #elif defined(__WATCOMC__)
119 #define DECLSPEC_NORETURN
120 #define DECLARE_STDCALL_P( type ) type __stdcall
121 #elif defined(_MSC_VER)
122 #define DECLSPEC_NORETURN __declspec(noreturn)
123 #define DECLARE_STDCALL_P( type ) type __stdcall
124 #endif /* __GNUC__/__WATCOMC__ */
125 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
126 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
127 #define LOWORD(l) ((WORD)((DWORD)(l)))
128 #define HIWORD(l) ((WORD)(((DWORD)(l)>>16)&0xFFFF))
129 #define LOBYTE(w) ((BYTE)(w))
130 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
131
132 #ifndef __WATCOMC__
133 #ifndef _export
134 #define _export
135 #endif
136 #ifndef __export
137 #define __export
138 #endif
139 #endif
140
141 #ifndef NOMINMAX
142 #ifndef max
143 #define max(a,b) ((a)>(b)?(a):(b))
144 #endif
145 #ifndef min
146 #define min(a,b) ((a)<(b)?(a):(b))
147 #endif
148 #endif
149
150 #define UNREFERENCED_PARAMETER(P) {(P)=(P);}
151 #define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
152 #define DBG_UNREFERENCED_PARAMETER(P)
153 #define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
154
155 #ifdef __GNUC__
156 #ifndef NONAMELESSUNION
157 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
158 #define _ANONYMOUS_UNION __extension__
159 #define _ANONYMOUS_STRUCT __extension__
160 #else
161 #if defined(__cplusplus)
162 #define _ANONYMOUS_UNION __extension__
163 #endif /* __cplusplus */
164 #endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
165 #endif /* NONAMELESSUNION */
166 #elif defined(__WATCOMC__) || defined(_MSC_VER)
167 #define _ANONYMOUS_UNION
168 #define _ANONYMOUS_STRUCT
169 #endif /* __GNUC__/__WATCOMC__ */
170
171 #ifndef _ANONYMOUS_UNION
172 #define _ANONYMOUS_UNION
173 #define _UNION_NAME(x) x
174 #define DUMMYUNIONNAME u
175 #define DUMMYUNIONNAME2 u2
176 #define DUMMYUNIONNAME3 u3
177 #define DUMMYUNIONNAME4 u4
178 #define DUMMYUNIONNAME5 u5
179 #define DUMMYUNIONNAME6 u6
180 #define DUMMYUNIONNAME7 u7
181 #define DUMMYUNIONNAME8 u8
182 #else
183 #define _UNION_NAME(x)
184 #define DUMMYUNIONNAME
185 #define DUMMYUNIONNAME2
186 #define DUMMYUNIONNAME3
187 #define DUMMYUNIONNAME4
188 #define DUMMYUNIONNAME5
189 #define DUMMYUNIONNAME6
190 #define DUMMYUNIONNAME7
191 #define DUMMYUNIONNAME8
192 #endif
193 #ifndef _ANONYMOUS_STRUCT
194 #define _ANONYMOUS_STRUCT
195 #define _STRUCT_NAME(x) x
196 #define DUMMYSTRUCTNAME s
197 #define DUMMYSTRUCTNAME2 s2
198 #define DUMMYSTRUCTNAME3 s3
199 #else
200 #define _STRUCT_NAME(x)
201 #define DUMMYSTRUCTNAME
202 #define DUMMYSTRUCTNAME2
203 #define DUMMYSTRUCTNAME3
204 #endif
205
206 #ifndef NO_STRICT
207 #ifndef STRICT
208 #define STRICT 1
209 #endif
210 #endif
211
212 /* FIXME: This will make some code compile. The programs will most
213 likely crash when an exception is raised, but at least they will
214 compile. */
215 #if defined (__GNUC__) && defined (__SEH_NOOP)
216 #define __try
217 #define __except(x) if (0) /* don't execute handler */
218 #define __finally
219
220 #define _try __try
221 #define _except __except
222 #define _finally __finally
223 #endif
224
225 typedef unsigned long DWORD;
226 typedef int WINBOOL,*PWINBOOL,*LPWINBOOL;
227 /* FIXME: Is there a good solution to this? */
228 #ifndef XFree86Server
229 #ifndef __OBJC__
230 typedef WINBOOL BOOL;
231 #else
232 #define BOOL WINBOOL
233 #endif
234 typedef unsigned char BYTE;
235 #endif /* ndef XFree86Server */
236 typedef BOOL *PBOOL,*LPBOOL;
237 typedef unsigned short WORD;
238 typedef float FLOAT;
239 typedef FLOAT *PFLOAT;
240 typedef BYTE *PBYTE,*LPBYTE;
241 typedef int *PINT,*LPINT;
242 typedef WORD *PWORD,*LPWORD;
243 typedef long *LPLONG;
244 typedef DWORD *PDWORD,*LPDWORD;
245 typedef CONST void *PCVOID,*LPCVOID;
246 typedef int INT;
247 typedef unsigned int UINT,*PUINT,*LPUINT;
248
249 #include <winnt.h>
250
251 typedef UINT_PTR WPARAM;
252 typedef LONG_PTR LPARAM;
253 typedef LONG_PTR LRESULT;
254 #ifndef _HRESULT_DEFINED
255 typedef LONG HRESULT;
256 #define _HRESULT_DEFINED
257 #endif
258 #ifndef XFree86Server
259 typedef WORD ATOM;
260 #endif /* XFree86Server */
261 typedef HANDLE HGLOBAL;
262 typedef HANDLE HLOCAL;
263 typedef HANDLE GLOBALHANDLE;
264 typedef HANDLE LOCALHANDLE;
265 typedef void *HGDIOBJ;
266 DECLARE_HANDLE(HACCEL);
267 DECLARE_HANDLE(HBITMAP);
268 DECLARE_HANDLE(HBRUSH);
269 DECLARE_HANDLE(HCOLORSPACE);
270 DECLARE_HANDLE(HDC);
271 DECLARE_HANDLE(HGLRC);
272 DECLARE_HANDLE(HDESK);
273 DECLARE_HANDLE(HENHMETAFILE);
274 DECLARE_HANDLE(HFONT);
275 DECLARE_HANDLE(HICON);
276 DECLARE_HANDLE(HKEY);
277 /* FIXME: How to handle these. SM_CMONITORS etc in winuser.h also. */
278 /* #if (WINVER >= 0x0500) */
279 DECLARE_HANDLE(HMONITOR);
280 #define HMONITOR_DECLARED 1
281 DECLARE_HANDLE(HTERMINAL);
282 DECLARE_HANDLE(HWINEVENTHOOK);
283 /* #endif */
284 typedef HKEY *PHKEY;
285 DECLARE_HANDLE(HMENU);
286 DECLARE_HANDLE(HMETAFILE);
287 DECLARE_HANDLE(HINSTANCE);
288 typedef HINSTANCE HMODULE;
289 DECLARE_HANDLE(HPALETTE);
290 DECLARE_HANDLE(HPEN);
291 DECLARE_HANDLE(HRGN);
292 DECLARE_HANDLE(HRSRC);
293 DECLARE_HANDLE(HSTR);
294 DECLARE_HANDLE(HTASK);
295 DECLARE_HANDLE(HWND);
296 DECLARE_HANDLE(HWINSTA);
297 DECLARE_HANDLE(HKL);
298 typedef int HFILE;
299 typedef HICON HCURSOR;
300 typedef DWORD COLORREF;
301 typedef int (WINAPI *FARPROC)();
302 typedef int (WINAPI *NEARPROC)();
303 typedef int (WINAPI *PROC)();
304 typedef struct tagRECT {
305 LONG left;
306 LONG top;
307 LONG right;
308 LONG bottom;
309 } RECT,*PRECT,*LPRECT;
310 typedef const RECT *LPCRECT;
311 typedef struct tagRECTL {
312 LONG left;
313 LONG top;
314 LONG right;
315 LONG bottom;
316 } RECTL,*PRECTL,*LPRECTL;
317 typedef const RECTL *LPCRECTL;
318 typedef struct tagPOINT {
319 LONG x;
320 LONG y;
321 } POINT,POINTL,*PPOINT,*LPPOINT,*PPOINTL,*LPPOINTL;
322 typedef struct tagSIZE {
323 LONG cx;
324 LONG cy;
325 } SIZE,SIZEL,*PSIZE,*LPSIZE,*PSIZEL,*LPSIZEL;
326 typedef struct tagPOINTS {
327 SHORT x;
328 SHORT y;
329 } POINTS,*PPOINTS,*LPPOINTS;
330
331 #ifdef __cplusplus
332 }
333 #endif
334 #endif