*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#ifndef __WINE_WINDEF_H
-#define __WINE_WINDEF_H
-
-#ifdef __WINE__
-# undef UNICODE
-#endif /* __WINE__ */
+#ifndef _WINDEF_
+#define _WINDEF_
+#ifndef WINVER
#define WINVER 0x0500
+#endif
-#include "winnt.h"
-
+#ifndef NO_STRICT
+# ifndef STRICT
+# define STRICT
+# endif /* STRICT */
+#endif /* NO_STRICT */
#ifdef __cplusplus
extern "C" {
#endif
+/* Calling conventions definitions */
+
+#if defined(__x86_64__) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+#ifndef _WIN64
+# if defined(__i386__) && !defined(_X86_)
+# define _X86_
+# endif
+# if defined(_X86_) && !defined(__i386__)
+# define __i386__
+# endif
+#endif
+
+#ifndef __stdcall
+# ifdef __i386__
+# ifdef __GNUC__
+# ifdef __APPLE__ /* Mac OS X uses a 16-byte aligned stack and not a 4-byte one */
+# define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __stdcall __attribute__((__stdcall__))
+# endif
+# elif defined(_MSC_VER)
+ /* Nothing needs to be done. __stdcall already exists */
+# else
+# error You need to define __stdcall for your compiler
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __stdcall __attribute__((ms_abi))
+# else /* __i386__ */
+# define __stdcall
+# endif /* __i386__ */
+#endif /* __stdcall */
+
+#ifndef __cdecl
+# if defined(__i386__) && defined(__GNUC__)
+# ifdef __APPLE__ /* Mac OS X uses 16-byte aligned stack and not a 4-byte one */
+# define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __cdecl __attribute__((__cdecl__))
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __cdecl __attribute__((ms_abi))
+# elif !defined(_MSC_VER)
+# define __cdecl
+# endif
+#endif /* __cdecl */
+
+#ifndef __ms_va_list
+# if defined(__x86_64__) && defined (__GNUC__)
+# define __ms_va_list __builtin_ms_va_list
+# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
+# define __ms_va_end(list) __builtin_ms_va_end(list)
+# else
+# define __ms_va_list va_list
+# define __ms_va_start(list,arg) va_start(list,arg)
+# define __ms_va_end(list) va_end(list)
+# endif
+#endif
+
+#ifdef __WINESRC__
+#define __ONLY_IN_WINELIB(x) do_not_use_this_in_wine
+#else
+#define __ONLY_IN_WINELIB(x) x
+#endif
+
+#ifndef pascal
+#define pascal __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _pascal
+#define _pascal __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _stdcall
+#define _stdcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _fastcall
+#define _fastcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __fastcall
+#define __fastcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __export
+#define __export __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef cdecl
+#define cdecl __ONLY_IN_WINELIB(__cdecl)
+#endif
+#ifndef _cdecl
+#define _cdecl __ONLY_IN_WINELIB(__cdecl)
+#endif
+
+#ifndef near
+#define near __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef far
+#define far __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _near
+#define _near __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _far
+#define _far __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef NEAR
+#define NEAR __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef FAR
+#define FAR __ONLY_IN_WINELIB(/* nothing */)
+#endif
+
+#ifndef _MSC_VER
+# ifndef _declspec
+# define _declspec(x) __ONLY_IN_WINELIB(/* nothing */)
+# endif
+# ifndef __declspec
+# define __declspec(x) __ONLY_IN_WINELIB(/* nothing */)
+# endif
+#endif
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+#define CALLBACK __stdcall
+#define WINAPI __stdcall
+#define APIPRIVATE __stdcall
+#define PASCAL __stdcall
+#define CDECL __cdecl
+#define _CDECL __cdecl
+#define WINAPIV __cdecl
+#define APIENTRY WINAPI
+#define CONST const
+
+/* Misc. constants. */
+
+#undef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif
+
+#ifdef FALSE
+#undef FALSE
+#endif
+#define FALSE 0
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#define TRUE 1
+
+#ifndef IN
+#define IN
+#endif
+
+#ifndef OUT
+#define OUT
+#endif
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+/* Standard data types */
+
+typedef void *LPVOID;
+typedef const void *LPCVOID;
+typedef int BOOL, *PBOOL, *LPBOOL;
+typedef unsigned char BYTE, *PBYTE, *LPBYTE;
+typedef unsigned char UCHAR, *PUCHAR;
+typedef unsigned short WORD, *PWORD, *LPWORD;
+typedef unsigned short USHORT, *PUSHORT;
+typedef int INT, *PINT, *LPINT;
+typedef unsigned int UINT, *PUINT;
+typedef float FLOAT, *PFLOAT;
+typedef char *PSZ;
+#ifdef _MSC_VER
+typedef long *LPLONG;
+typedef unsigned long DWORD, *PDWORD, *LPDWORD;
+typedef unsigned long ULONG, *PULONG;
+#else
+typedef int *LPLONG;
+typedef unsigned int DWORD, *PDWORD, *LPDWORD;
+typedef unsigned int ULONG, *PULONG;
+#endif
/* Macros to map Winelib names to the correct implementation name */
-/* depending on __WINE__ and UNICODE macros. */
/* Note that Winelib is purely Win32. */
-#ifdef __WINE__
+#ifdef __WINESRC__
+#define WINE_NO_UNICODE_MACROS 1
+#define WINE_STRICT_PROTOTYPES 1
+#endif
+
+#ifdef WINE_NO_UNICODE_MACROS
# define WINELIB_NAME_AW(func) \
func##_must_be_suffixed_with_W_or_A_in_this_context \
func##_must_be_suffixed_with_W_or_A_in_this_context
-#else /* __WINE__ */
+#else /* WINE_NO_UNICODE_MACROS */
# ifdef UNICODE
# define WINELIB_NAME_AW(func) func##W
# else
# define WINELIB_NAME_AW(func) func##A
-# endif /* UNICODE */
-#endif /* __WINE__ */
+# endif
+#endif /* WINE_NO_UNICODE_MACROS */
-#ifdef __WINE__
+#ifdef WINE_NO_UNICODE_MACROS
# define DECL_WINELIB_TYPE_AW(type) /* nothing */
-#else /* __WINE__ */
+#else
# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type;
-#endif /* __WINE__ */
+#endif
+
+#include <winnt.h>
+/* Polymorphic types */
+
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+typedef LONG_PTR LRESULT;
/* Integer types */
-typedef UINT WPARAM;
-typedef LONG LPARAM;
-typedef LONG LRESULT;
+
typedef WORD ATOM;
-typedef WORD CATCHBUF[9];
-typedef WORD *LPCATCHBUF;
typedef DWORD COLORREF, *LPCOLORREF;
-/* Handle types that exist both in Win16 and Win32. */
+/* Handle types */
typedef int HFILE;
-DECLARE_OLD_HANDLE(HACCEL);
-DECLARE_OLD_HANDLE(HBITMAP);
-DECLARE_OLD_HANDLE(HBRUSH);
+DECLARE_HANDLE(HACCEL);
+DECLARE_HANDLE(HBITMAP);
+DECLARE_HANDLE(HBRUSH);
DECLARE_HANDLE(HCOLORSPACE);
-DECLARE_OLD_HANDLE(HDC);
+DECLARE_HANDLE(HDC);
DECLARE_HANDLE(HDESK);
-DECLARE_OLD_HANDLE(HENHMETAFILE);
-DECLARE_OLD_HANDLE(HFONT);
-DECLARE_OLD_HANDLE(HHOOK);
-DECLARE_OLD_HANDLE(HICON);
-DECLARE_OLD_HANDLE(HINSTANCE);
-DECLARE_OLD_HANDLE(HKEY);
-DECLARE_OLD_HANDLE(HKL);
-DECLARE_OLD_HANDLE(HMENU);
-DECLARE_OLD_HANDLE(HMETAFILE);
-DECLARE_OLD_HANDLE(HMONITOR);
-DECLARE_OLD_HANDLE(HPALETTE);
-DECLARE_OLD_HANDLE(HPEN);
-DECLARE_OLD_HANDLE(HRGN);
-DECLARE_OLD_HANDLE(HRSRC);
-DECLARE_OLD_HANDLE(HTASK);
+DECLARE_HANDLE(HENHMETAFILE);
+DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGLRC);
+DECLARE_HANDLE(HHOOK);
+DECLARE_HANDLE(HICON);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HKEY);
+typedef HKEY *PHKEY;
+DECLARE_HANDLE(HKL);
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HMETAFILE);
+DECLARE_HANDLE(HMONITOR);
+DECLARE_HANDLE(HPALETTE);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HWINEVENTHOOK);
DECLARE_HANDLE(HWINSTA);
-DECLARE_OLD_HANDLE(HWND);
+DECLARE_HANDLE(HWND);
/* Handle types that must remain interchangeable even with strict on */
/* Callback function pointers types */
-typedef INT (CALLBACK *FARPROC)();
-typedef INT (CALLBACK *PROC)();
-
+#ifdef WINE_STRICT_PROTOTYPES
+typedef INT_PTR (CALLBACK *FARPROC)(void);
+typedef INT_PTR (CALLBACK *NEARPROC)(void);
+typedef INT_PTR (CALLBACK *PROC)(void);
+#else
+typedef INT_PTR (CALLBACK *FARPROC)();
+typedef INT_PTR (CALLBACK *NEARPROC)();
+typedef INT_PTR (CALLBACK *PROC)();
+#endif
/* Macros to split words and longs. */
-#define LOBYTE(w) ((BYTE)(WORD)(w))
-#define HIBYTE(w) ((BYTE)((WORD)(w) >> 8))
-
-#define LOWORD(l) ((WORD)(DWORD)(l))
-#define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
+#define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xFF))
+#define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8))
-#define SLOWORD(l) ((SHORT)(LONG)(l))
-#define SHIWORD(l) ((SHORT)((LONG)(l) >> 16))
+#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xFFFF))
+#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
-#define MAKEWORD(low,high) ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
-#define MAKELONG(low,high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
-#define MAKELPARAM(low,high) ((LPARAM)MAKELONG(low,high))
-#define MAKEWPARAM(low,high) ((WPARAM)MAKELONG(low,high))
-#define MAKELRESULT(low,high) ((LRESULT)MAKELONG(low,high))
-
-#define SELECTOROF(ptr) (HIWORD(ptr))
-#define OFFSETOF(ptr) (LOWORD(ptr))
-
-#ifdef __WINE__
-/* macros to set parts of a DWORD (not in the Windows API) */
-#define SET_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD(val))
-#define SET_LOBYTE(dw,val) ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))
-#define SET_HIBYTE(dw,val) ((dw) = ((dw) & 0xffff00ff) | (LOBYTE(val) << 8))
-#define ADD_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))
-#endif
+#define MAKEWORD(low,high) ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF)) | ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8))
+#define MAKELONG(low,high) ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
/* min and max macros */
#ifndef NOMINMAX
#endif
#endif /* NOMINMAX */
-#ifndef _MAX_PATH
-/* FIXME: These are supposed to be in stdlib.h only */
-#define _MAX_DRIVE 3
-#define _MAX_FNAME 256
-#define _MAX_DIR _MAX_FNAME
-#define _MAX_EXT _MAX_FNAME
-#define _MAX_PATH 260
-#endif
-#define MAX_PATH _MAX_PATH
-
+#ifdef MAX_PATH /* Work-around for Mingw */
+#undef MAX_PATH
+#endif /* MAX_PATH */
+#define MAX_PATH 260
#define HFILE_ERROR ((HFILE)-1)
/* The SIZE structure */
{
LONG x;
LONG y;
-} POINTL;
+} POINTL, *PPOINTL;
/* The POINTS structure */
typedef struct tagPOINTS
{
+#ifdef WORDS_BIGENDIAN
+ SHORT y;
+ SHORT x;
+#else
SHORT x;
SHORT y;
+#endif
} POINTS, *PPOINTS, *LPPOINTS;
+typedef struct _FILETIME {
+#ifdef WORDS_BIGENDIAN
+ DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+#else
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#define _FILETIME_
+
/* The RECT structure */
typedef struct tagRECT
{
- INT left;
- INT top;
- INT right;
- INT bottom;
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
} RECT, *PRECT, *LPRECT;
typedef const RECT *LPCRECT;
-
-typedef struct tagRECTL
+typedef struct _RECTL
{
LONG left;
LONG top;
}
#endif
-#endif /* __WINE_WINDEF_H */
+#endif /* _WINDEF_ */