Full memory management support (memory.c & memory.h & mem.S)
[reactos.git] / reactos / include / base.h
1 /*
2 Base.h
3
4 Base definitions
5
6 Copyright (C) 1996, 1997 Free Software Foundation, Inc.
7
8 Author: Scott Christley <scottc@net-community.com>
9
10 This file is part of the Windows32 API Library.
11
12 This library is free software; you can redistribute it and/or
13 modify it under the terms of the GNU Library General Public
14 License as published by the Free Software Foundation; either
15 version 2 of the License, or (at your option) any later version.
16
17 This library is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 Library General Public License for more details.
21
22 If you are interested in a warranty or support for this source code,
23 contact Scott Christley <scottc@net-community.com> for more information.
24
25 You should have received a copy of the GNU Library General Public
26 License along with this library; see the file COPYING.LIB.
27 If not, write to the Free Software Foundation,
28 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 */
30
31 #ifndef _GNU_H_WINDOWS32_BASE
32 #define _GNU_H_WINDOWS32_BASE
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif /* __cplusplus */
37
38 #ifndef NULL
39 #ifdef __cplusplus
40 #define NULL (0)
41 #else
42 #define NULL ((void *)0)
43 #endif
44 #endif /* !NULL */
45
46 #include <ntos/types.h>
47
48 /* Check VOID before defining CHAR, SHORT, and LONG */
49 #ifndef VOID
50 #define VOID void
51 typedef char CHAR;
52 typedef short SHORT;
53 typedef long LONG;
54 #endif
55
56
57 #define CONST const
58
59 #ifdef i386
60 #define STDCALL __attribute__ ((stdcall))
61 #define CDECL __attribute((cdecl))
62 #define CALLBACK WINAPI
63 #define PASCAL WINAPI
64 #else
65 #define STDCALL
66 #define CDECL
67 #define CALLBACK
68 #define PASCAL
69 #endif
70 #define WINAPI STDCALL
71 #define APIENTRY STDCALL
72 #define WINGDIAPI
73
74
75
76 #ifdef UNICODE
77 typedef unsigned short *LPTCH;
78 typedef unsigned short *LPTSTR;
79 #else
80 typedef char *LPTCH;
81 typedef char *LPTSTR;
82 #endif /* UNICODE */
83
84 #ifndef RC_INVOKED
85
86 /* typedef ACMDRIVERENUMCB;
87 typedef ACMDRIVERPROC;
88 typedef ACMFILERCHOOSEHOOKPROC;
89 typedef ACMFILTERENUMCB;
90 typedef ACMFILTERTAGENUMCB;
91 typedef ACMFORMATCHOOSEHOOKPROC;
92 typedef ACMFORMATENUMCB;
93 typedef ACMFORMATTAGENUMCB;
94 typedef APPLET_PROC;
95 */
96 /* Changed from BOOL to WINBOOL to avoid Objective-C conflict */
97 typedef unsigned long CALTYPE;
98 typedef unsigned long CALID;
99 typedef unsigned long COLORREF;
100
101 /*
102 typedef CTRYID;
103 typedef DLGPROC;
104 */
105 typedef double DWORDLONG, *PDWORDLONG;
106 /*
107 typedef EDITWORDBREAKPROC;
108 typedef ENHMFENUMPROC;
109 typedef ENUMRESLANGPROC;
110 typedef ENUMRESNAMEPROC;
111 typedef ENUMRESTYPEPROC;
112 */
113 typedef float FLOAT;
114 /* typedef GLOBALHANDLE; */
115 typedef HANDLE HACCEL;
116 typedef HANDLE HBITMAP;
117 typedef HANDLE HBRUSH;
118 typedef HANDLE HCOLORSPACE;
119 typedef HANDLE HCONV;
120 typedef HANDLE HCONVLIST;
121 typedef HANDLE HCURSOR;
122 typedef HANDLE HDBC;
123 typedef HANDLE HDC;
124 typedef HANDLE HDDEDATA;
125 typedef HANDLE HDESK;
126 typedef HANDLE HDROP;
127 typedef HANDLE HDWP;
128 typedef HANDLE HENHMETAFILE;
129 typedef HANDLE HENV;
130 typedef int HFILE;
131 typedef HANDLE HFONT;
132 typedef HANDLE HGDIOBJ;
133 typedef HANDLE HGLOBAL;
134 typedef HANDLE HGLRC;
135 typedef HANDLE HHOOK;
136 typedef HANDLE HICON;
137 typedef HANDLE HIMAGELIST;
138 typedef HANDLE HINSTANCE;
139 typedef HANDLE HKEY, *PHKEY;
140 typedef HANDLE HKL;
141 typedef HANDLE HLOCAL;
142 typedef HANDLE HMENU;
143 typedef HANDLE HMETAFILE;
144 typedef HANDLE HMODULE;
145 typedef HANDLE HPALETTE;
146 typedef HANDLE HPEN;
147 typedef HANDLE HRASCONN;
148 typedef long HRESULT;
149 typedef HANDLE HRGN;
150 typedef HANDLE HRSRC;
151 typedef HANDLE HSTMT;
152 typedef HANDLE HSZ;
153 typedef HANDLE HWINSTA;
154 typedef HANDLE HWND;
155 typedef unsigned short LANGID;
156 //typedef DWORD LCID;
157 typedef DWORD LCTYPE;
158 /* typedef LOCALHANDLE */
159 typedef unsigned short *LP;
160 typedef long LPARAM;
161 typedef int WINBOOL;
162 typedef WINBOOL *LPBOOL;
163 typedef CONST CHAR *LPCCH;
164 typedef CHAR *LPCH;
165 typedef COLORREF *LPCOLORREF;
166
167 #ifdef UNICODE
168 typedef const unsigned short *LPCTSTR;
169 #else
170 typedef const char *LPCTSTR;
171 #endif /* UNICODE */
172
173 typedef const unsigned short *LPCWCH;
174 typedef DWORD *LPDWORD;
175 /* typedef LPFRHOOKPROC; */
176 typedef HANDLE *LPHANDLE;
177 /* typedef LPHANDLER_FUNCTION; */
178 typedef PINT LPINT;
179 typedef PLONG LPLONG;
180
181 typedef long LRESULT;
182 typedef unsigned short *LPWCH;
183 typedef unsigned short *LPWORD;
184 /* typedef NPSTR; */
185 typedef unsigned short *NWPSTR;
186 typedef WINBOOL *PWINBOOL;
187 typedef const CHAR *PCCH;
188 typedef const char *PCSTR;
189 typedef const unsigned short *PCWCH;
190 /* typedef PHKEY; */
191 /* typedef LCID *PLCID; */
192 typedef short *PSHORT;
193 /* typedef PSID; */
194 typedef char *PSTR;
195 typedef char *PSZ;
196
197 #ifdef UNICODE
198 typedef unsigned short *PTBYTE;
199 typedef unsigned short *PTCH;
200 typedef unsigned short *PTCHAR;
201 typedef unsigned short *PTSTR;
202 #else
203 typedef unsigned char *PTBYTE;
204 typedef char *PTCH;
205 typedef char *PTCHAR;
206 typedef char *PTSTR;
207 #endif /* UNICODE */
208
209 /*
210 typedef PWSTR;
211 */
212 typedef DWORD REGSAM;
213
214
215 typedef short RETCODE;
216
217 typedef HANDLE SC_HANDLE;
218 typedef LPVOID SC_LOCK;
219 typedef SC_HANDLE *LPSC_HANDLE;
220 typedef DWORD SERVICE_STATUS_HANDLE;
221 /* typedef SPHANDLE; */
222
223 #ifdef UNICODE
224 typedef unsigned short TBYTE;
225 #ifndef _TCHAR_DEFINED
226 #define _TCHAR_DEFINED
227 typedef unsigned short TCHAR;
228 #endif /* _TCHAR_DEFINED */
229 typedef unsigned short BCHAR;
230 #else
231 typedef unsigned char TBYTE;
232 #ifndef _TCHAR_DEFINED
233 #define _TCHAR_DEFINED
234 typedef char TCHAR;
235 #endif /* _TCHAR_DEFINED */
236 typedef BYTE BCHAR;
237 #endif /* UNICODE */
238
239 typedef unsigned int WPARAM;
240 /* typedef YIELDPROC; */
241
242 /* Only use __stdcall under WIN32 compiler */
243
244 #define _export
245
246 /*
247 Enumerations
248 */
249
250
251 #define RASCS_DONE 0x2000
252 #define RASCS_PAUSED 0x1000
253 typedef enum _RASCONNSTATE {
254 RASCS_OpenPort = 0,
255 RASCS_PortOpened,
256 RASCS_ConnectDevice,
257 RASCS_DeviceConnected,
258 RASCS_AllDevicesConnected,
259 RASCS_Authenticate,
260 RASCS_AuthNotify,
261 RASCS_AuthRetry,
262 RASCS_AuthCallback,
263 RASCS_AuthChangePassword,
264 RASCS_AuthProject,
265 RASCS_AuthLinkSpeed,
266 RASCS_AuthAck,
267 RASCS_ReAuthenticate,
268 RASCS_Authenticated,
269 RASCS_PrepareForCallback,
270 RASCS_WaitForModemReset,
271 RASCS_WaitForCallback,
272 RASCS_Projected,
273
274 RASCS_StartAuthentication,
275 RASCS_CallbackComplete,
276 RASCS_LogonNetwork,
277
278 RASCS_Interactive = RASCS_PAUSED,
279 RASCS_RetryAuthentication,
280 RASCS_CallbackSetByCaller,
281 RASCS_PasswordExpired,
282
283 RASCS_Connected = RASCS_DONE,
284 RASCS_Disconnected
285 } RASCONNSTATE ;
286
287 typedef enum _RASPROJECTION {
288 RASP_Amb = 0x10000,
289 RASP_PppNbf = 0x803F,
290 RASP_PppIpx = 0x802B,
291 RASP_PppIp = 0x8021
292 } RASPROJECTION ;
293
294 typedef enum _SID_NAME_USE {
295 SidTypeUser = 1,
296 SidTypeGroup,
297 SidTypeDomain,
298 SidTypeAlias,
299 SidTypeWellKnownGroup,
300 SidTypeDeletedAccount,
301 SidTypeInvalid,
302 SidTypeUnknown
303 } SID_NAME_USE, *PSID_NAME_USE;
304
305 #endif /* ! defined (RC_INVOKED) */
306
307 /*
308 Macros
309 */
310 #define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) (void)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(id), (LPARAM)(NMHDR FAR*)(pnmhdr))
311
312 #define GetBValue(rgb) ((BYTE) ((rgb) >> 16))
313 #define GetGValue(rgb) ((BYTE) (((WORD) (rgb)) >> 8))
314 #define GetRValue(rgb) ((BYTE) (rgb))
315 #define RGB(r, g ,b) ((DWORD) (((BYTE) (r) | ((WORD) (g) << 8)) | (((DWORD) (BYTE) (b)) << 16)))
316
317 #define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) (fn)((hwnd), (int)(wParam), (NMHDR FAR*)(lParam))
318
319 #define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF))
320 #define HIWORD(l) ((WORD) (((DWORD) (l) >> 16) & 0xFFFF))
321 #define LOBYTE(w) ((BYTE) (w))
322 #define LOWORD(l) ((WORD) (l))
323 #define MAKELONG(a, b) ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))
324 #define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8))
325
326 /* original Cygnus headers also had the following defined: */
327 #define SEXT_HIWORD(l) ((((int)l) >> 16))
328 #define ZEXT_HIWORD(l) ((((unsigned int)l) >> 16))
329 #define SEXT_LOWORD(l) ((int)(short)l)
330
331 #define INDEXTOOVERLAYMASK(i) ((i) << 8)
332 #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
333
334 #define MAKEINTATOM(i) (LPTSTR) ((DWORD) ((WORD) (i)))
335 #define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))
336
337 #define MAKELANGID(p, s) ((((WORD) (s)) << 10) | (WORD) (p))
338 #define PRIMARYLANGID(lgid) ((WORD )(lgid) & 0x3ff)
339 #define SUBLANGID(lgid) ((WORD )(lgid) >> 10)
340
341 #define LANGIDFROMLCID(lcid) ((WORD) (lcid))
342 #define SORTIDFROMLCID(lcid) ((WORD )((((DWORD)(lcid)) & 0x000FFFFF) >> 16))
343 #define MAKELCID(lgid, srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))
344 #define MAKELPARAM(l, h) ((LPARAM) MAKELONG(l, h))
345 #define MAKELRESULT(l, h) ((LRESULT) MAKELONG(l, h))
346 #define MAKEPOINTS(l) (*((POINTS FAR *) & (l)))
347 #define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore))
348 #define MAKEWPARAM(l, h) ((WPARAM) MAKELONG(l, h))
349
350
351 #define PALETTEINDEX(i) ((COLORREF) (0x01000000 | (DWORD) (WORD) (i)))
352 #define PALETTERGB(r, g, b) (0x02000000 | RGB(r, g, b))
353 #define POINTSTOPOINT(pt, pts) {(pt).x = (SHORT) LOWORD(pts); (pt).y = (SHORT) HIWORD(pts);}
354 #define POINTTOPOINTS(pt) (MAKELONG((short) ((pt).x), (short) ((pt).y)))
355
356 #define INDEXTOOVERLAYMASK(i) ((i) << 8)
357 #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
358
359 #ifdef UNICODE
360 #define _T(quote) L##quote
361 #define TEXT(quote) L##quote
362 #else
363 #define _T(quote) quote
364 #define TEXT(quote) quote
365 #endif
366
367 #ifndef RC_INVOKED
368
369 /*
370 Definitions for callback procedures
371 */
372 typedef int CALLBACK (*BFFCALLBACK) (HWND, UINT, LPARAM, LPARAM);
373 typedef UINT CALLBACK (*LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
374 typedef UINT CALLBACK (*LPCFHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
375 typedef DWORD CALLBACK (*EDITSTREAMCALLBACK) (DWORD, LPBYTE, LONG, LONG);
376 typedef UINT CALLBACK (*LPFRHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
377 typedef UINT CALLBACK (*LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
378 typedef UINT CALLBACK (*LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
379 typedef UINT CALLBACK (*LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
380 typedef WINBOOL CALLBACK (*DLGPROC) (HWND, UINT, WPARAM, LPARAM);
381 typedef int CALLBACK (*PFNPROPSHEETCALLBACK) (HWND, UINT, LPARAM);
382 typedef VOID CALLBACK (*LPSERVICE_MAIN_FUNCTION) (DWORD, LPTSTR);
383 typedef int CALLBACK (*PFNTVCOMPARE) (LPARAM, LPARAM, LPARAM);
384 typedef LRESULT CALLBACK (*WNDPROC) (HWND, UINT, WPARAM, LPARAM);
385 typedef int CALLBACK (*FARPROC)(void);
386 typedef FARPROC PROC;
387 typedef WINBOOL CALLBACK (*ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG);
388 typedef WINBOOL CALLBACK (*ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG);
389 typedef WINBOOL CALLBACK (*ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG);
390 typedef FARPROC DESKTOPENUMPROC;
391 typedef WINBOOL CALLBACK (*ENUMWINDOWSPROC) (HWND, LPARAM);
392 typedef WINBOOL CALLBACK (*ENUMWINDOWSTATIONPROC) (LPTSTR, LPARAM);
393 typedef VOID CALLBACK (*SENDASYNCPROC) (HWND, UINT, DWORD, LRESULT);
394 typedef VOID CALLBACK (*TIMERPROC) (HWND, UINT, UINT, DWORD);
395 typedef FARPROC GRAYSTRINGPROC;
396 typedef WINBOOL CALLBACK (*DRAWSTATEPROC) (HDC, LPARAM, WPARAM, int, int);
397 typedef WINBOOL CALLBACK (*PROPENUMPROCEX) (HWND, LPCTSTR, HANDLE, DWORD);
398 typedef WINBOOL CALLBACK (*PROPENUMPROC) (HWND, LPCTSTR, HANDLE);
399 typedef LRESULT CALLBACK (*HOOKPROC) (int, WPARAM, LPARAM);
400 typedef VOID CALLBACK (*ENUMOBJECTSPROC) (LPVOID, LPARAM);
401 typedef VOID CALLBACK (*LINEDDAPROC) (int, int, LPARAM);
402 typedef WINBOOL CALLBACK (*ABORTPROC) (HDC, int);
403 typedef UINT CALLBACK (*LPPAGEPAINTHOOK) (HWND, UINT, WPARAM, LPARAM );
404 typedef UINT CALLBACK (*LPPAGESETUPHOOK) (HWND, UINT, WPARAM, LPARAM );
405 typedef int CALLBACK (*ICMENUMPROC) (LPTSTR, LPARAM);
406 typedef LONG (*EDITWORDBREAKPROCEX) (char *, LONG, BYTE, INT);
407 typedef int CALLBACK (*PFNLVCOMPARE) (LPARAM, LPARAM, LPARAM);
408 typedef WINBOOL CALLBACK (*LOCALE_ENUMPROC) (LPTSTR);
409 typedef WINBOOL CALLBACK (*CODEPAGE_ENUMPROC) (LPTSTR);
410 typedef WINBOOL CALLBACK (*DATEFMT_ENUMPROC) (LPTSTR);
411 typedef WINBOOL CALLBACK (*TIMEFMT_ENUMPROC) (LPTSTR);
412 typedef WINBOOL CALLBACK (*CALINFO_ENUMPROC) (LPTSTR);
413 typedef WINBOOL CALLBACK (*PHANDLER_ROUTINE) (DWORD);
414 typedef WINBOOL CALLBACK (*LPHANDLER_FUNCTION) (DWORD);
415 typedef UINT CALLBACK (*PFNGETPROFILEPATH) (LPCTSTR, LPSTR, UINT);
416 typedef UINT CALLBACK (*PFNRECONCILEPROFILE) (LPCTSTR, LPCTSTR, DWORD);
417 typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, DWORD);
418
419 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
420 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
421 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
422 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
423 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
424 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
425
426 #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
427 #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
428 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
429 #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
430 #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
431 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
432 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
433 #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
434 #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
435 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
436 #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
437 #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
438 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
439 #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
440 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
441 #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
442 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
443 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
444 #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
445 #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
446 #define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
447 #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
448 #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
449 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
450
451 #define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
452 #define SERVICES_FAILED_DATABASEW L"ServicesFailed"
453 #define SERVICES_ACTIVE_DATABASEA "ServicesActive"
454 #define SERVICES_FAILED_DATABASEA "ServicesFailed"
455 #define SC_GROUP_IDENTIFIERW L'+'
456 #define SC_GROUP_IDENTIFIERA '+'
457
458 #ifdef UNICODE
459 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
460 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
461 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
462 #else
463 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
464 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
465 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
466 #endif /* UNICODE */
467
468 /* ---------------------------------- */
469 /* From ddeml.h in old Cygnus headers */
470
471 typedef void (*CALLB) (void);
472 typedef CALLB PFNCALLBACK;
473
474
475 /* End of stuff from ddeml.h in old Cygnus headers */
476 /* ----------------------------------------------- */
477
478 typedef FARPROC WNDENUMPROC;
479 typedef FARPROC MFENUMPROC;
480 typedef FARPROC ENHMFENUMPROC;
481 typedef DWORD CCSTYLE, *PCCSTYLE, *LPCCSTYLE;
482 typedef DWORD CCSTYLEFLAGA, *PCCSTYLEFLAGA, *LPCCSTYLEFLAGA;
483 #define DECLARE_HANDLE(s) typedef HANDLE s
484
485 #endif /* ! defined (RC_INVOKED) */
486
487 #ifdef __cplusplus
488 }
489 #endif /* __cplusplus */
490
491 #endif /* _GNU_H_WINDOWS32_BASE */