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

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

Make sure basetsd.h is eventually included by windows.h (for compatibility with current Windows SDK versions).

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