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

Last change on this file since 9416 was 9396, checked in by sandervl, 23 years ago

added INT_PTR

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