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

Last change on this file since 21968 was 21968, checked in by dmik, 14 years ago

Add missing PTCHAR, PTSTR and PCTSTR defs.

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