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

Last change on this file since 21352 was 21352, checked in by rlwalsh, 16 years ago

eliminate VACPP warning & info msgs - see Ticket #1

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