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

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

Do not define TCHAR twice.

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