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

Last change on this file since 9683 was 9631, checked in by sandervl, 23 years ago

PF: header updates

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