source: trunk/include/win/windef.h@ 21389

Last change on this file since 21389 was 21389, checked in by dmik, 15 years ago

ULONG_PTR and friends are integer types rather than pointers to integer.

File size: 22.1 KB
Line 
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#if (defined(__WINE__)) && (!defined(__WIN32OS2__))
11# include "config.h"
12# undef UNICODE
13#endif /* __WINE__ */
14
15#define WINVER 0x0500
16
17#ifdef UNICODE
18#include <wchar.h>
19#endif
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25/* Misc. constants. */
26
27#ifdef FALSE
28#undef FALSE
29#endif
30#define FALSE 0
31
32#ifdef TRUE
33#undef TRUE
34#endif
35#define TRUE 1
36
37#ifdef NULL
38#undef NULL
39#endif
40#define NULL 0
41
42/* Macros to map Winelib names to the correct implementation name */
43/* depending on __WINE__ and UNICODE macros. */
44/* Note that Winelib is purely Win32. */
45
46#ifdef __WINE__
47#ifdef __WIN32OS2__
48# define WINELIB_NAME_AW(func) func
49#else
50# define WINELIB_NAME_AW(func) this_is_a_syntax_error this_is_a_syntax_error
51#endif
52#else /* __WINE__ */
53# ifdef UNICODE
54# define WINELIB_NAME_AW(func) func##W
55# else
56# define WINELIB_NAME_AW(func) func##A
57# endif /* UNICODE */
58#endif /* __WINE__ */
59
60#ifdef __WINE__
61# define DECL_WINELIB_TYPE_AW(type) /* nothing */
62#else /* __WINE__ */
63# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type;
64#endif /* __WINE__ */
65
66
67/* Calling conventions definitions */
68
69#ifndef __WIN32OS2__
70#ifdef __i386__
71# if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)
72# define __stdcall __attribute__((__stdcall__))
73# define __cdecl __attribute__((__cdecl__))
74# define __RESTORE_ES __asm__ __volatile__("pushl %ds\n\tpopl %es")
75# else
76# error You need gcc >= 2.7 to build Wine on a 386
77# endif /* __GNUC__ */
78#else /* __i386__ */
79# define __stdcall
80# define __cdecl
81# define __RESTORE_ES
82#endif /* __i386__ */
83#endif
84
85
86#include <odin.h>
87
88/* define needed macros as required */
89#ifndef CALLBACK
90 #define CALLBACK __stdcall
91#endif
92
93#ifndef WINAPI
94 #define WINAPI __stdcall
95#endif
96
97#ifndef APIPRIVATE
98 #define APIPRIVATE __stdcall
99#endif
100
101#ifndef PASCAL
102 #define PASCAL __stdcall
103#endif
104
105#ifndef pascal
106 #define pascal __stdcall
107#endif
108
109#ifndef _pascal
110 #define _pascal __stdcall
111#endif
112
113#ifndef _stdcall
114 #define _stdcall __stdcall
115#endif
116
117#ifndef _fastcall
118 #define _fastcall __stdcall
119#endif
120
121#ifndef __export
122 #define __export
123#endif
124
125#ifndef CDECL
126 #define CDECL __cdecl
127#endif
128
129#ifndef _CDECL
130 #define _CDECL __cdecl
131#endif
132
133#ifndef cdecl
134 #define cdecl __cdecl
135#endif
136
137#ifndef _cdecl
138 #define _cdecl __cdecl
139#endif
140
141#ifndef WINAPIV
142 #define WINAPIV __cdecl
143#endif
144
145#ifndef APIENTRY
146 #define APIENTRY WINAPI
147#endif
148
149#ifndef WIN32API
150 #define WIN32API WINAPI
151#endif
152
153#ifndef __EMX__
154#if (__IBMC__ < 400) && (__IBMCPP__ < 360)
155#ifndef __declspec
156 #define __declspec(x)
157#endif
158
159#ifndef dllimport
160 #define dllimport
161#endif
162
163#ifndef dllexport
164 #define dllexport
165#endif
166#endif // (__IBMC__ < 400) && (__IBMCPP__ < 360)
167#endif // __EMX__
168
169#ifndef CONST
170 #define CONST const
171#endif
172
173/* Anonymous union/struct handling */
174
175#ifndef NONAMELESSSTRUCT
176#define DUMMYSTRUCTNAME
177#define DUMMYSTRUCTNAME1
178#define DUMMYSTRUCTNAME2
179#define DUMMYSTRUCTNAME3
180#define DUMMYSTRUCTNAME4
181#define DUMMYSTRUCTNAME5
182#else /* !defined(NONAMELESSSTRUCT) */
183#define DUMMYSTRUCTNAME s
184#define DUMMYSTRUCTNAME1 s1
185#define DUMMYSTRUCTNAME2 s2
186#define DUMMYSTRUCTNAME3 s3
187#define DUMMYSTRUCTNAME4 s4
188#define DUMMYSTRUCTNAME5 s5
189#endif /* !defined(NONAMELESSSTRUCT) */
190
191#ifndef NONAMELESSUNION
192#define DUMMYUNIONNAME
193#define DUMMYUNIONNAME1
194#define DUMMYUNIONNAME2
195#define DUMMYUNIONNAME3
196#define DUMMYUNIONNAME4
197#define DUMMYUNIONNAME5
198#define DUMMYUNIONNAME6
199#define DUMMYUNIONNAME7
200#define DUMMYUNIONNAME8
201#else /* !defined(NONAMELESSUNION) */
202#define DUMMYUNIONNAME u
203#define DUMMYUNIONNAME1 u1
204#define DUMMYUNIONNAME2 u2
205#define DUMMYUNIONNAME3 u3
206#define DUMMYUNIONNAME4 u4
207#define DUMMYUNIONNAME5 u5
208#define DUMMYUNIONNAME6 u6
209#define DUMMYUNIONNAME7 u7
210#define DUMMYUNIONNAME8 u8
211#endif /* !defined(NONAMELESSUNION) */
212
213
214/* Standard data types. These are the same for emulator and library. */
215
216#if defined(__GNUC__) && defined(__cplusplus)
217/* prototypes like foo(VOID) don't work with typedef */
218#define VOID void
219#else
220typedef void VOID;
221#endif
222typedef short INT16;
223typedef unsigned short UINT16;
224typedef int INT;
225
226#ifndef INT_PTR_D
227#define INT_PTR_D
228typedef int INT_PTR, *PINT_PTR;
229#endif
230typedef unsigned int UINT;
231typedef signed int INT32;
232#ifndef UINT_PTR_D
233#define UINT_PTR_D
234typedef unsigned int UINT_PTR, *PUINT_PTR;
235#endif
236typedef unsigned short WORD;
237typedef unsigned long DWORD;
238#ifndef DWORD_PTR_D
239#define DWORD_PTR_D
240typedef unsigned long DWORD_PTR, *PDWORD_PTR;
241#endif
242typedef unsigned long ULONG;
243typedef unsigned char BYTE;
244typedef long LONG;
245typedef short SHORT;
246typedef unsigned short USHORT;
247typedef char CHAR;
248typedef unsigned char UCHAR;
249/* Some systems might have wchar_t, but we really need 16 bit characters */
250#ifdef UNICODE
251typedef wchar_t WCHAR;
252#else
253typedef unsigned short WCHAR;
254#endif
255typedef unsigned short BOOL16;
256#ifdef __FORCE_BOOL_AS_INT__
257typedef int BOOL;
258#else
259typedef unsigned long BOOL;
260#endif
261typedef double DATE;
262typedef long LONG_PTR;
263typedef unsigned long ULONG_PTR;
264typedef double DOUBLE;
265#if (__IBMC__ < 360) && (__IBMCPP__ < 360) && !defined (__EMX__)
266typedef double LONGLONG;
267typedef double ULONGLONG;
268typedef double ULONGULONG;
269typedef double DWORDLONG;
270#elif defined (__EMX__)
271#ifndef _INT64_T_DECLARED
272typedef long long int64_t; /* LONGLONG */
273typedef unsigned long long u_int64_t; /* LONGLONG */
274#endif
275#ifndef _UINT64_T_DECLARED
276typedef unsigned long long uint64_t; /* LONGLONG */
277#endif
278typedef int64_t LONGLONG;
279typedef uint64_t ULONGLONG;
280typedef uint64_t ULONGULONG;
281typedef uint64_t DWORDLONG;
282#else
283#include <inttypes.h>
284typedef int64_t LONGLONG;
285typedef uint64_t ULONGLONG;
286typedef uint64_t ULONGULONG;
287typedef uint64_t DWORDLONG;
288#endif
289
290/* FIXME: Wine does not compile with strict on, therefore strict
291 * handles are presently only usable on machines where sizeof(UINT) ==
292 * sizeof(void*). HANDLEs are supposed to be void* but a large amount
293 * of WINE code operates on HANDLES as if they are UINTs. So to WINE
294 * they exist as UINTs but to the Winelib user who turns on strict,
295 * they exist as void*. If there is a size difference between UINT and
296 * void* then things get ugly. */
297#ifdef STRICT
298typedef UINT16 HANDLE16;
299typedef VOID* HANDLE;
300#else
301typedef UINT16 HANDLE16;
302typedef ULONG HANDLE;
303#endif
304
305typedef HANDLE16 *LPHANDLE16;
306typedef HANDLE *LPHANDLE;
307typedef HANDLE GLOBALHANDLE;
308typedef HANDLE LOCALHANDLE;
309
310/* Integer types. These are the same for emulator and library. */
311typedef UINT16 WPARAM16;
312typedef UINT WPARAM;
313typedef LONG LPARAM;
314typedef LONG HRESULT;
315typedef LONG LRESULT;
316typedef WORD ATOM;
317typedef WORD CATCHBUF[9];
318typedef WORD *LPCATCHBUF;
319typedef DWORD REGSAM;
320typedef HANDLE HHOOK;
321typedef HANDLE HKEY;
322typedef HANDLE HMONITOR;
323typedef DWORD LCID;
324typedef WORD LANGID;
325typedef DWORD LCTYPE;
326typedef float FLOAT;
327#ifdef __WIN32OS2__
328#if (__IBMC__ < 400) && (__IBMCPP__ < 360) && !defined(__WATCOMC__) && !defined(__EMX__)
329typedef double __int64;
330#elif defined (__EMX__)
331#ifndef _JAVASOFT_JNI_MD_H_
332typedef long long __int64;
333#endif
334#endif
335#else
336typedef long long __int64;
337#endif
338
339/* Pointers types. These are the same for emulator and library. */
340/* winnt types */
341typedef VOID *PVOID;
342typedef const void *PCVOID;
343typedef CHAR *PCHAR;
344typedef UCHAR *PUCHAR;
345typedef BYTE *PBYTE;
346typedef ULONG *PULONG;
347typedef LONG *PLONG;
348typedef DWORD *PDWORD;
349/* common win32 types */
350#ifdef __WINE__
351typedef CHAR *LPTSTR;
352typedef const CHAR *LPCTSTR;
353#endif
354typedef CHAR *LPSTR;
355typedef CHAR *PSTR;
356typedef const CHAR *LPCSTR;
357typedef const CHAR *PCSTR;
358typedef WCHAR *LPWSTR;
359typedef WCHAR *PWSTR;
360typedef const WCHAR *LPCWSTR;
361typedef const WCHAR *PCWSTR;
362typedef BYTE *LPBYTE;
363typedef WORD *LPWORD;
364typedef DWORD *LPDWORD;
365typedef LONG *LPLONG;
366typedef VOID *LPVOID;
367typedef const VOID *LPCVOID;
368typedef INT16 *LPINT16;
369typedef UINT16 *LPUINT16;
370typedef INT *PINT;
371typedef INT *LPINT;
372typedef UINT *PUINT;
373typedef UINT *LPUINT;
374typedef HKEY *LPHKEY;
375typedef HKEY *PHKEY;
376typedef FLOAT *PFLOAT;
377typedef FLOAT *LPFLOAT;
378typedef BOOL *PBOOL;
379typedef BOOL *LPBOOL;
380
381/* Special case: a segmented pointer is just a pointer in the user's code. */
382
383#ifdef __WINE__
384typedef DWORD SEGPTR;
385#else
386typedef void* SEGPTR;
387#endif /* __WINE__ */
388
389/* Handle types that exist both in Win16 and Win32. */
390
391#ifdef STRICT
392#define DECLARE_HANDLE(a) \
393 typedef HANDLE16 a##16; \
394 typedef a##16 *P##a##16; \
395 typedef a##16 *NP##a##16; \
396 typedef a##16 *LP##a##16; \
397 typedef struct a##__ { int unused; } *a; \
398 typedef a *P##a; \
399 typedef a *LP##a
400#else /*STRICT*/
401#define DECLARE_HANDLE(a) \
402 typedef HANDLE16 a##16; \
403 typedef a##16 *P##a##16; \
404 typedef a##16 *NP##a##16; \
405 typedef a##16 *LP##a##16; \
406 typedef HANDLE a; \
407 typedef a *P##a; \
408 typedef a *LP##a
409#endif /*STRICT*/
410
411DECLARE_HANDLE(HACMDRIVERID);
412DECLARE_HANDLE(HACMDRIVER);
413DECLARE_HANDLE(HACMOBJ);
414DECLARE_HANDLE(HACMSTREAM);
415DECLARE_HANDLE(HMETAFILEPICT);
416
417typedef int HFILE;
418typedef HANDLE16 HFILE16;
419
420DECLARE_HANDLE(HACCEL);
421DECLARE_HANDLE(HBITMAP);
422DECLARE_HANDLE(HBRUSH);
423DECLARE_HANDLE(HCOLORSPACE);
424DECLARE_HANDLE(HCURSOR);
425DECLARE_HANDLE(HDC);
426DECLARE_HANDLE(HGLRC); // OpenGL
427DECLARE_HANDLE(HDROP);
428DECLARE_HANDLE(HDRVR);
429DECLARE_HANDLE(HDWP);
430DECLARE_HANDLE(HENHMETAFILE);
431DECLARE_HANDLE(HFONT);
432DECLARE_HANDLE(HICON);
433DECLARE_HANDLE(HINSTANCE);
434DECLARE_HANDLE(HMENU);
435DECLARE_HANDLE(HMETAFILE);
436DECLARE_HANDLE(HMIDI);
437DECLARE_HANDLE(HMIDIIN);
438DECLARE_HANDLE(HMIDIOUT);
439DECLARE_HANDLE(HMIDISTRM);
440DECLARE_HANDLE(HMIXER);
441DECLARE_HANDLE(HMIXEROBJ);
442DECLARE_HANDLE(HMMIO);
443DECLARE_HANDLE(HPALETTE);
444DECLARE_HANDLE(HPEN);
445DECLARE_HANDLE(HQUEUE);
446DECLARE_HANDLE(HRGN);
447DECLARE_HANDLE(HRSRC);
448DECLARE_HANDLE(HTASK);
449DECLARE_HANDLE(HWAVE);
450DECLARE_HANDLE(HWAVEIN);
451DECLARE_HANDLE(HWAVEOUT);
452DECLARE_HANDLE(HWINSTA);
453DECLARE_HANDLE(HDESK);
454DECLARE_HANDLE(HWND);
455DECLARE_HANDLE(HKL);
456DECLARE_HANDLE(HIC);
457DECLARE_HANDLE(HRASCONN);
458DECLARE_HANDLE(HPRINTER);
459#undef DECLARE_HANDLE
460
461/* Handle types that must remain interchangeable even with strict on */
462
463typedef HINSTANCE16 HMODULE16;
464typedef HINSTANCE HMODULE;
465typedef HANDLE16 HGDIOBJ16;
466typedef HANDLE16 HGLOBAL16;
467typedef HANDLE16 HLOCAL16;
468typedef HANDLE HGDIOBJ;
469typedef HANDLE HGLOBAL;
470typedef HANDLE HLOCAL;
471
472/* Callback function pointers types */
473
474#ifdef __IBMC__
475typedef BOOL16 (* CALLBACK DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
476typedef BOOL (* CALLBACK DLGPROC)(HWND,UINT,WPARAM,LPARAM);
477typedef LRESULT (* CALLBACK DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
478typedef LRESULT (* CALLBACK DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
479typedef INT16 (* CALLBACK EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
480typedef INT (* CALLBACK EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
481typedef INT (* CALLBACK EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
482DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
483typedef LRESULT (* CALLBACK FARPROC16)();
484typedef LRESULT (* CALLBACK FARPROC)();
485typedef INT16 (* CALLBACK PROC16)();
486typedef INT (* CALLBACK PROC)();
487typedef INT16 (* CALLBACK GOBJENUMPROC16)(SEGPTR,LPARAM);
488typedef INT (* CALLBACK GOBJENUMPROC)(LPVOID,LPARAM);
489typedef BOOL16 (* CALLBACK GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
490typedef BOOL (* CALLBACK GRAYSTRINGPROC)(HDC,LPARAM,INT);
491typedef LRESULT (* CALLBACK HOOKPROC16)(INT16,WPARAM16,LPARAM);
492typedef LRESULT (* CALLBACK HOOKPROC)(INT,WPARAM,LPARAM);
493typedef VOID (* CALLBACK LINEDDAPROC16)(INT16,INT16,LPARAM);
494typedef VOID (* CALLBACK LINEDDAPROC)(INT,INT,LPARAM);
495typedef BOOL16 (* CALLBACK PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
496typedef BOOL (* CALLBACK PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
497typedef BOOL (* CALLBACK PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
498DECL_WINELIB_TYPE_AW(PROPENUMPROC)
499typedef BOOL (* CALLBACK PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
500typedef BOOL (* CALLBACK PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
501DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
502typedef VOID (* CALLBACK TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
503typedef VOID (* CALLBACK TIMERPROC)(HWND,UINT,UINT,DWORD);
504typedef LRESULT (* CALLBACK WNDENUMPROC16)(HWND16,LPARAM);
505//typedef LRESULT (* CALLBACK WNDENUMPROC)(HWND,LPARAM);
506typedef BOOL (* CALLBACK WNDENUMPROC)(HWND,LPARAM);
507typedef LRESULT (* CALLBACK WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
508typedef LRESULT (* CALLBACK WNDPROC)(HWND,UINT,WPARAM,LPARAM);
509#else
510typedef BOOL16 ( CALLBACK * DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
511typedef BOOL ( CALLBACK * DLGPROC)(HWND,UINT,WPARAM,LPARAM);
512typedef LRESULT ( CALLBACK * DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
513typedef LRESULT ( CALLBACK * DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
514typedef INT16 ( CALLBACK * EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
515typedef INT ( CALLBACK * EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
516typedef INT ( CALLBACK * EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
517DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
518typedef LRESULT ( CALLBACK * FARPROC16)();
519typedef LRESULT ( CALLBACK * FARPROC)();
520typedef INT16 ( CALLBACK * PROC16)();
521typedef INT ( CALLBACK * PROC)();
522typedef INT16 ( CALLBACK * GOBJENUMPROC16)(SEGPTR,LPARAM);
523typedef INT ( CALLBACK * GOBJENUMPROC)(LPVOID,LPARAM);
524typedef BOOL16 ( CALLBACK * GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
525typedef BOOL ( CALLBACK * GRAYSTRINGPROC)(HDC,LPARAM,INT);
526typedef LRESULT ( CALLBACK * HOOKPROC16)(INT16,WPARAM16,LPARAM);
527typedef LRESULT ( CALLBACK * HOOKPROC)(INT,WPARAM,LPARAM);
528typedef VOID ( CALLBACK * LINEDDAPROC16)(INT16,INT16,LPARAM);
529typedef VOID ( CALLBACK * LINEDDAPROC)(INT,INT,LPARAM);
530typedef BOOL16 ( CALLBACK * PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
531typedef BOOL ( CALLBACK * PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
532typedef BOOL ( CALLBACK * PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
533DECL_WINELIB_TYPE_AW(PROPENUMPROC)
534typedef BOOL ( CALLBACK * PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
535typedef BOOL ( CALLBACK * PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
536DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
537typedef VOID ( CALLBACK * TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
538typedef VOID ( CALLBACK * TIMERPROC)(HWND,UINT,UINT,DWORD);
539typedef LRESULT ( CALLBACK * WNDENUMPROC16)(HWND16,LPARAM);
540typedef BOOL ( CALLBACK * WNDENUMPROC)(HWND,LPARAM);
541typedef LRESULT ( CALLBACK * WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
542typedef LRESULT ( CALLBACK * WNDPROC)(HWND,UINT,WPARAM,LPARAM);
543#endif
544
545/* TCHAR data types definitions for Winelib. */
546/* These types are _not_ defined for the emulator, because they */
547/* depend on the UNICODE macro that only exists in user's code. */
548
549#ifndef __WINE__
550# ifdef UNICODE
551typedef WCHAR TCHAR;
552typedef LPWSTR LPTSTR;
553typedef LPCWSTR LPCTSTR;
554#define __TEXT(string) L##string /*probably wrong */
555# else /* UNICODE */
556typedef CHAR TCHAR, *PTCHAR;
557typedef LPSTR LPTSTR;
558typedef LPCSTR LPCTSTR;
559#define __TEXT(string) string
560# endif /* UNICODE */
561#endif /* __WINE__ */
562#define TEXT(quote) __TEXT(quote)
563
564/* Data types specific to the library. These do _not_ exist in the emulator. */
565
566
567
568/* Define some empty macros for compatibility with Windows code. */
569
570#ifndef __WINE__
571#define NEAR
572#define FAR
573#define near
574#define far
575#define _near
576#define _far
577#define IN
578#define OUT
579#define OPTIONAL
580#endif /* __WINE__ */
581
582/* Macro for structure packing. */
583
584#ifdef __GNUC__
585#define WINE_PACKED __attribute__ ((packed))
586#define WINE_UNUSED __attribute__ ((unused))
587#else
588#define WINE_PACKED /* nothing */
589#define WINE_UNUSED /* nothing */
590#endif
591
592/* Macros to split words and longs. */
593
594#define LOBYTE(w) ((BYTE)(WORD)(w))
595#define HIBYTE(w) ((BYTE)((WORD)(w) >> 8))
596
597#define LOWORD(l) ((WORD)(DWORD)(l))
598#define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
599
600#define SLOWORD(l) ((INT16)(LONG)(l))
601#define SHIWORD(l) ((INT16)((LONG)(l) >> 16))
602
603#define MAKEWORD(low,high) ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
604#define MAKELONG(low,high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
605#define MAKELPARAM(low,high) ((LPARAM)MAKELONG(low,high))
606#define MAKEWPARAM(low,high) ((WPARAM)MAKELONG(low,high))
607#define MAKELRESULT(low,high) ((LRESULT)MAKELONG(low,high))
608#define MAKEINTATOM(atom) ((LPCSTR)MAKELONG((atom),0))
609
610#define SELECTOROF(ptr) (HIWORD(ptr))
611#define OFFSETOF(ptr) (LOWORD(ptr))
612
613/* Macros to access unaligned or wrong-endian WORDs and DWORDs. */
614/* Note: These macros are semantically broken, at least for wrc. wrc
615 spits out data in the platform's current binary format, *not* in
616 little-endian format. These macros are used throughout the resource
617 code to load and store data to the resources. Since it is unlikely
618 that we'll ever be dealing with little-endian resource data, the
619 byte-swapping nature of these macros has been disabled. Rather than
620 remove the use of these macros from the resource loading code, the
621 macros have simply been disabled. In the future, someone may want
622 to reactivate these macros for other purposes. In that case, the
623 resource code will have to be modified to use different macros. */
624
625#if 1
626#define PUT_WORD(ptr,w) (*(WORD *)(ptr) = (w))
627#define GET_WORD(ptr) (*(WORD *)(ptr))
628#define PUT_DWORD(ptr,dw) (*(DWORD *)(ptr) = (dw))
629#define GET_DWORD(ptr) (*(DWORD *)(ptr))
630#else
631#define PUT_WORD(ptr,w) (*(BYTE *)(ptr) = LOBYTE(w), \
632 *((BYTE *)(ptr) + 1) = HIBYTE(w))
633#define GET_WORD(ptr) ((WORD)(*(BYTE *)(ptr) | \
634 (WORD)(*((BYTE *)(ptr)+1) << 8)))
635#define PUT_DWORD(ptr,dw) (PUT_WORD((ptr),LOWORD(dw)), \
636 PUT_WORD((WORD *)(ptr)+1,HIWORD(dw)))
637#define GET_DWORD(ptr) ((DWORD)(GET_WORD(ptr) | \
638 ((DWORD)GET_WORD((WORD *)(ptr)+1) << 16)))
639#endif /* 1 */
640
641/* MIN and MAX macros */
642
643#ifdef MAX
644#undef MAX
645#endif
646#define MAX(a,b) (((a) > (b)) ? (a) : (b))
647
648#ifdef MIN
649#undef MIN
650#endif
651#define MIN(a,b) (((a) < (b)) ? (a) : (b))
652
653#ifdef __max /* watcom stdlib.h defines this */
654#undef __max
655#endif
656#define __max(a,b) MAX(a,b)
657
658#ifdef __min /* watcom stdlib.h defines this */
659#undef __min
660#endif
661#define __min(a,b) MIN(a,b)
662#ifndef RC_INVOKED
663#include <stdlib.h>
664#endif
665
666#if !defined(__WATCOMC__) || !defined(_MAX_PATH)
667#define _MAX_PATH 260
668#endif
669#define MAX_PATH 260
670#define _MAX_DRIVE 3
671#if !defined(__WATCOMC__) && !defined(_MAX_DIR)
672#define _MAX_DIR 256
673#endif
674#if !defined(__WIN32OS2__) && !defined(_MAX_FNAME)
675#define _MAX_FNAME 255
676#endif
677#if !defined(__WATCOMC__) && !defined(_MAX_EXT)
678#define _MAX_EXT 256
679#endif
680
681#define HFILE_ERROR16 ((HFILE16)-1)
682#define HFILE_ERROR ((HFILE)-1)
683
684/* Winelib run-time flag */
685
686#ifdef __WINE__
687extern int __winelib;
688#endif /* __WINE__ */
689
690/* The SIZE structure */
691
692typedef struct
693{
694 INT16 cx;
695 INT16 cy;
696} SIZE16, *PSIZE16, *LPSIZE16;
697
698typedef struct tagSIZE
699{
700 INT cx;
701 INT cy;
702} SIZE, *PSIZE, *LPSIZE;
703
704
705typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
706
707#define CONV_SIZE16TO32(s16,s32) \
708 ((s32)->cx = (INT)(s16)->cx, (s32)->cy = (INT)(s16)->cy)
709#define CONV_SIZE32TO16(s32,s16) \
710 ((s16)->cx = (INT16)(s32)->cx, (s16)->cy = (INT16)(s32)->cy)
711
712/* The POINT structure */
713
714typedef struct
715{
716 INT16 x;
717 INT16 y;
718} POINT16, *PPOINT16, *LPPOINT16;
719
720typedef struct tagPOINT
721{
722 LONG x;
723 LONG y;
724} POINT, *PPOINT, *LPPOINT;
725
726typedef struct _POINTL
727{
728 LONG x;
729 LONG y;
730} POINTL;
731
732#define CONV_POINT16TO32(p16,p32) \
733 ((p32)->x = (INT)(p16)->x, (p32)->y = (INT)(p16)->y)
734#define CONV_POINT32TO16(p32,p16) \
735 ((p16)->x = (INT16)(p32)->x, (p16)->y = (INT16)(p32)->y)
736
737#define MAKEPOINT(l) (*((POINT *)&(l)))
738
739#define MAKEPOINT16(l) (*((POINT16 *)&(l)))
740
741/* The POINTS structure */
742
743typedef struct tagPOINTS
744{
745 SHORT x;
746 SHORT y;
747} POINTS, *PPOINTS, *LPPOINTS;
748
749
750#define MAKEPOINTS(l) (*((POINTS *)&(l)))
751
752
753/* The RECT structure */
754
755typedef struct
756{
757 INT16 left;
758 INT16 top;
759 INT16 right;
760 INT16 bottom;
761} RECT16, *LPRECT16;
762
763typedef struct tagRECT
764{
765 INT left;
766 INT top;
767 INT right;
768 INT bottom;
769} RECT, *PRECT, *LPRECT;
770typedef const RECT *LPCRECT;
771
772
773typedef struct tagRECTL
774{
775 LONG left;
776 LONG top;
777 LONG right;
778 LONG bottom;
779} RECTL, *PRECTL, *LPRECTL;
780
781typedef const RECTL *LPCRECTL;
782
783/*
784 * 8.9.99 DJR DECIMAL support
785 */
786typedef struct tagDEC
787{
788 USHORT wReserved;
789 union
790 {
791 struct
792 {
793 BYTE scale;
794 BYTE sign;
795 } a;
796 USHORT signscale;
797 } b;
798 ULONG Hi32;
799 union
800 {
801 struct
802 {
803 ULONG Lo32;
804 ULONG Mid32;
805 } c;
806 ULONGLONG Lo64;
807 } d;
808} DECIMAL;
809typedef DECIMAL *LPDECIMAL;
810
811#include <winbase.h>
812
813#ifdef __cplusplus
814}
815#endif
816
817#endif /* __WINE_WINDEF_H */
Note: See TracBrowser for help on using the repository browser.