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

Last change on this file since 9596 was 9521, checked in by sandervl, 23 years ago

header updates

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