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

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

Fixed broken build after r21492 by sorting out a huuuuge wagon of duplicates, wrong include order and other dirty mess.

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