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

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

windef.h: Looks like the jni_md.h hack isn't necessary for OpenJDK.

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