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

Last change on this file since 10367 was 9973, checked in by sandervl, 22 years ago

YD: Header updates

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