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

Last change on this file since 21301 was 21301, checked in by ydario, 16 years ago

Header updates.

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