Main Page | Modules | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

windef.h

00001 /*
00002  * Basic types definitions
00003  *
00004  * Copyright 1996 Alexandre Julliard
00005  *
00006  * Modified for use with MPlayer, detailed CVS changelog at
00007  * http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
00008  * $Id: windef.h 11593 2005-06-28 18:02:01Z courmisch $
00009  *
00010  */
00011 
00012 #ifndef __WINE_WINDEF_H
00013 #define __WINE_WINDEF_H
00014 
00015 #ifdef __WINE__
00016 # include "config.h"
00017 # undef UNICODE
00018 #endif
00019 
00020 #ifdef _EGCS_
00021 #define __stdcall
00022 #endif
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 /* Misc. constants. */
00029 
00030 #ifdef FALSE
00031 #undef FALSE
00032 #endif
00033 #define FALSE 0
00034 
00035 #ifdef TRUE
00036 #undef TRUE
00037 #endif
00038 #define TRUE  1
00039 
00040 #ifdef NULL
00041 #undef NULL
00042 #endif
00043 #define NULL  0
00044 
00045 /* Macros to map Winelib names to the correct implementation name */
00046 /* depending on __WINE__ and UNICODE macros.                      */
00047 /* Note that Winelib is purely Win32.                             */
00048 
00049 #ifdef __WINE__
00050 # define WINELIB_NAME_AW(func) \
00051     func##_must_be_suffixed_with_W_or_A_in_this_context \
00052     func##_must_be_suffixed_with_W_or_A_in_this_context
00053 #else  /* __WINE__ */
00054 # ifdef UNICODE
00055 #  define WINELIB_NAME_AW(func) func##W
00056 # else
00057 #  define WINELIB_NAME_AW(func) func##A
00058 # endif  /* UNICODE */
00059 #endif  /* __WINE__ */
00060 
00061 #ifdef __WINE__
00062 # define DECL_WINELIB_TYPE_AW(type)  /* nothing */
00063 #else   /* __WINE__ */
00064 # define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;
00065 #endif  /* __WINE__ */
00066 
00067 #ifndef NONAMELESSSTRUCT
00068 # if defined(__WINE__) || !defined(_FORCENAMELESSSTRUCT)
00069 #  define NONAMELESSSTRUCT
00070 # endif
00071 #endif /* !defined(NONAMELESSSTRUCT) */
00072 
00073 #ifndef NONAMELESSUNION
00074 # if defined(__WINE__) || !defined(_FORCENAMELESSUNION) || !defined(__cplusplus)
00075 #  define NONAMELESSUNION
00076 # endif
00077 #endif /* !defined(NONAMELESSUNION) */
00078 
00079 #ifndef NONAMELESSSTRUCT
00080 #define DUMMYSTRUCTNAME
00081 #define DUMMYSTRUCTNAME1
00082 #define DUMMYSTRUCTNAME2
00083 #define DUMMYSTRUCTNAME3
00084 #define DUMMYSTRUCTNAME4
00085 #define DUMMYSTRUCTNAME5
00086 #else /* !defined(NONAMELESSSTRUCT) */
00087 #define DUMMYSTRUCTNAME   s
00088 #define DUMMYSTRUCTNAME1  s1
00089 #define DUMMYSTRUCTNAME2  s2
00090 #define DUMMYSTRUCTNAME3  s3
00091 #define DUMMYSTRUCTNAME4  s4
00092 #define DUMMYSTRUCTNAME5  s5
00093 #endif /* !defined(NONAMELESSSTRUCT) */
00094 
00095 #ifndef NONAMELESSUNION
00096 #define DUMMYUNIONNAME
00097 #define DUMMYUNIONNAME1
00098 #define DUMMYUNIONNAME2
00099 #define DUMMYUNIONNAME3
00100 #define DUMMYUNIONNAME4
00101 #define DUMMYUNIONNAME5
00102 #else /* !defined(NONAMELESSUNION) */
00103 #define DUMMYUNIONNAME   u
00104 #define DUMMYUNIONNAME1  u1
00105 #define DUMMYUNIONNAME2  u2
00106 #define DUMMYUNIONNAME3  u3
00107 #define DUMMYUNIONNAME4  u4
00108 #define DUMMYUNIONNAME5  u5
00109 #endif /* !defined(NONAMELESSUNION) */
00110 
00111 /* Calling conventions definitions */
00112 
00113 #ifdef __i386__
00114 # if defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
00115 #  ifndef _EGCS_ 
00116 #define __stdcall __attribute__((__stdcall__))
00117 #define __cdecl   __attribute__((__cdecl__))
00118 #  define __RESTORE_ES  __asm__ __volatile__("pushl %ds\n\tpopl %es")
00119 #  endif
00120 # else
00121 // #  error You need gcc >= 2.7 to build Wine on a 386
00122 # endif
00123 #else 
00124 # define __stdcall
00125 # define __cdecl
00126 # define __RESTORE_ES
00127 #endif
00128 
00129 #define CALLBACK    __stdcall
00130 #define WINAPI      __stdcall
00131 #define APIPRIVATE  __stdcall
00132 #define PASCAL      __stdcall
00133 #define pascal      __stdcall
00134 #define _pascal     __stdcall
00135 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
00136 #define _stdcall    __stdcall
00137 #define _fastcall   __stdcall
00138 #define __fastcall  __stdcall
00139 #endif
00140 #define __export    __stdcall
00141 #define CDECL       __cdecl
00142 #define _CDECL      __cdecl
00143 #define cdecl       __cdecl
00144 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
00145 #define _cdecl      __cdecl
00146 #endif
00147 #define WINAPIV     __cdecl
00148 #define APIENTRY    WINAPI
00149 
00150 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
00151 #define __declspec(x)
00152 #endif
00153 #define dllimport
00154 #define dllexport
00155 
00156 #define CONST       const
00157 
00158 /* Standard data types. These are the same for emulator and library. */
00159 
00160 typedef void            VOID;
00161 typedef int             INT;
00162 typedef unsigned int    UINT;
00163 typedef unsigned short  WORD;
00164 typedef unsigned long   DWORD;
00165 typedef unsigned long   ULONG;
00166 typedef unsigned char   BYTE;
00167 typedef long            LONG;
00168 typedef short           SHORT;
00169 typedef unsigned short  USHORT;
00170 typedef char            CHAR;
00171 typedef unsigned char   UCHAR;
00172 
00173 typedef LONG SCODE;
00174 
00175 /* Some systems might have wchar_t, but we really need 16 bit characters */
00176 typedef unsigned short  WCHAR;
00177 typedef int             WIN_BOOL;
00178 typedef double          DATE;
00179 typedef double          DOUBLE;
00180 typedef long long       LONGLONG;
00181 typedef unsigned long long   ULONGLONG;
00182 
00183 /* FIXME: Wine does not compile with strict on, therefore strict
00184  * handles are presently only usable on machines where sizeof(UINT) ==
00185  * sizeof(void*).  HANDLEs are supposed to be void* but a large amount
00186  * of WINE code operates on HANDLES as if they are UINTs. So to WINE
00187  * they exist as UINTs but to the Winelib user who turns on strict,
00188  * they exist as void*. If there is a size difference between UINT and
00189  * void* then things get ugly.  */
00190 #ifdef STRICT
00191 typedef VOID*           HANDLE;
00192 #else
00193 typedef UINT            HANDLE;
00194 #endif
00195 
00196 
00197 typedef HANDLE         *LPHANDLE;
00198 
00199 /* Integer types. These are the same for emulator and library. */
00200 typedef UINT            WPARAM;
00201 typedef LONG            LPARAM;
00202 typedef LONG            HRESULT;
00203 typedef LONG            LRESULT;
00204 typedef WORD            ATOM;
00205 typedef WORD            CATCHBUF[9];
00206 typedef WORD           *LPCATCHBUF;
00207 typedef HANDLE          HHOOK;
00208 typedef HANDLE          HMONITOR;
00209 typedef DWORD           LCID;
00210 typedef WORD            LANGID;
00211 typedef DWORD           LCTYPE;
00212 typedef float           FLOAT;
00213 
00214 /* Pointers types. These are the same for emulator and library. */
00215 /* winnt types */
00216 typedef VOID           *PVOID;
00217 typedef const void     *PCVOID;
00218 typedef CHAR           *PCHAR;
00219 typedef UCHAR          *PUCHAR;
00220 typedef BYTE           *PBYTE;
00221 typedef WORD           *PWORD;
00222 typedef USHORT         *PUSHORT;
00223 typedef SHORT          *PSHORT;
00224 typedef ULONG          *PULONG;
00225 typedef LONG           *PLONG;
00226 typedef DWORD          *PDWORD;
00227 /* common win32 types */
00228 typedef CHAR           *LPSTR;
00229 typedef CHAR           *PSTR;
00230 typedef const CHAR     *LPCSTR;
00231 typedef const CHAR     *PCSTR;
00232 typedef WCHAR          *LPWSTR;
00233 typedef WCHAR          *PWSTR;
00234 typedef const WCHAR    *LPCWSTR;
00235 typedef const WCHAR    *PCWSTR;
00236 typedef BYTE           *LPBYTE;
00237 typedef WORD           *LPWORD;
00238 typedef DWORD          *LPDWORD;
00239 typedef LONG           *LPLONG;
00240 typedef VOID           *LPVOID;
00241 typedef const VOID     *LPCVOID;
00242 typedef INT            *PINT;
00243 typedef INT            *LPINT;
00244 typedef UINT           *PUINT;
00245 typedef UINT           *LPUINT;
00246 typedef FLOAT          *PFLOAT;
00247 typedef FLOAT          *LPFLOAT;
00248 typedef WIN_BOOL           *PWIN_BOOL;
00249 typedef WIN_BOOL           *LPWIN_BOOL;
00250 
00251 /* Special case: a segmented pointer is just a pointer in the user's code. */
00252 
00253 #ifdef __WINE__
00254 typedef DWORD SEGPTR;
00255 #else
00256 typedef void* SEGPTR;
00257 #endif /* __WINE__ */
00258 
00259 /* Handle types that exist both in Win16 and Win32. */
00260 
00261 #ifdef STRICT
00262 #define DECLARE_HANDLE(a) \
00263         typedef struct a##__ { int unused; } *a; \
00264         typedef a *P##a; \
00265         typedef a *LP##a
00266 #else /*STRICT*/
00267 #define DECLARE_HANDLE(a) \
00268         typedef HANDLE a; \
00269         typedef a *P##a; \
00270         typedef a *LP##a
00271 #endif /*STRICT*/
00272 
00273 DECLARE_HANDLE(HACMDRIVERID);
00274 DECLARE_HANDLE(HACMDRIVER);
00275 DECLARE_HANDLE(HACMOBJ);
00276 DECLARE_HANDLE(HACMSTREAM);
00277 DECLARE_HANDLE(HMETAFILEPICT);
00278 
00279 DECLARE_HANDLE(HACCEL);
00280 DECLARE_HANDLE(HBITMAP);
00281 DECLARE_HANDLE(HBRUSH);
00282 DECLARE_HANDLE(HCOLORSPACE);
00283 DECLARE_HANDLE(HCURSOR);
00284 DECLARE_HANDLE(HDC);
00285 DECLARE_HANDLE(HDROP);
00286 DECLARE_HANDLE(HDRVR);
00287 DECLARE_HANDLE(HDWP);
00288 DECLARE_HANDLE(HENHMETAFILE);
00289 DECLARE_HANDLE(HFILE);
00290 DECLARE_HANDLE(HFONT);
00291 DECLARE_HANDLE(HICON);
00292 DECLARE_HANDLE(HINSTANCE);
00293 DECLARE_HANDLE(HKEY);
00294 DECLARE_HANDLE(HMENU);
00295 DECLARE_HANDLE(HMETAFILE);
00296 DECLARE_HANDLE(HMIDI);
00297 DECLARE_HANDLE(HMIDIIN);
00298 DECLARE_HANDLE(HMIDIOUT);
00299 DECLARE_HANDLE(HMIDISTRM);
00300 DECLARE_HANDLE(HMIXER);
00301 DECLARE_HANDLE(HMIXEROBJ);
00302 DECLARE_HANDLE(HMMIO);
00303 DECLARE_HANDLE(HPALETTE);
00304 DECLARE_HANDLE(HPEN);
00305 DECLARE_HANDLE(HQUEUE);
00306 DECLARE_HANDLE(HRGN);
00307 DECLARE_HANDLE(HRSRC);
00308 DECLARE_HANDLE(HTASK);
00309 DECLARE_HANDLE(HWAVE);
00310 DECLARE_HANDLE(HWAVEIN);
00311 DECLARE_HANDLE(HWAVEOUT);
00312 DECLARE_HANDLE(HWINSTA);
00313 DECLARE_HANDLE(HDESK);
00314 DECLARE_HANDLE(HWND);
00315 DECLARE_HANDLE(HKL);
00316 DECLARE_HANDLE(HIC);
00317 DECLARE_HANDLE(HRASCONN);
00318 
00319 /* Handle types that must remain interchangeable even with strict on */
00320 
00321 typedef HINSTANCE HMODULE;
00322 typedef HANDLE HGDIOBJ;
00323 typedef HANDLE HGLOBAL;
00324 typedef HANDLE HLOCAL;
00325 typedef HANDLE GLOBALHANDLE;
00326 typedef HANDLE LOCALHANDLE;
00327 
00328 /* Callback function pointers types */
00329 //WIN_BOOL CALLBACK DATEFMT_ENUMPROCA(LPSTR);
00330 
00331 typedef WIN_BOOL  CALLBACK  (* DATEFMT_ENUMPROCA)(LPSTR);
00332 typedef WIN_BOOL    CALLBACK (* DATEFMT_ENUMPROCW)(LPWSTR);
00333 DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
00334 typedef WIN_BOOL    CALLBACK (*DLGPROC)(HWND,UINT,WPARAM,LPARAM);
00335 typedef LRESULT CALLBACK (*DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
00336 typedef INT     CALLBACK (*EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
00337 typedef INT     CALLBACK (*EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
00338 DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
00339 typedef LRESULT CALLBACK (*FARPROC)();
00340 typedef INT     CALLBACK (*PROC)();
00341 typedef WIN_BOOL    CALLBACK (*GRAYSTRINGPROC)(HDC,LPARAM,INT);
00342 typedef LRESULT CALLBACK (*HOOKPROC)(INT,WPARAM,LPARAM);
00343 typedef WIN_BOOL    CALLBACK (*PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
00344 typedef WIN_BOOL    CALLBACK (*PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
00345 DECL_WINELIB_TYPE_AW(PROPENUMPROC)
00346 typedef WIN_BOOL    CALLBACK (*PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
00347 typedef WIN_BOOL    CALLBACK (*PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
00348 DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
00349 typedef WIN_BOOL    CALLBACK (* TIMEFMT_ENUMPROCA)(LPSTR);
00350 typedef WIN_BOOL    CALLBACK (* TIMEFMT_ENUMPROCW)(LPWSTR);
00351 DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
00352 typedef VOID    CALLBACK (*TIMERPROC)(HWND,UINT,UINT,DWORD);
00353 typedef WIN_BOOL CALLBACK (*WNDENUMPROC)(HWND,LPARAM);
00354 typedef LRESULT CALLBACK (*WNDPROC)(HWND,UINT,WPARAM,LPARAM);
00355 
00356 /*----------------------------------------------------------------------------
00357 ** FIXME:  Better isolate Wine's reliance on the xxx16 type definitions.
00358 **         For now, we just isolate them to make the situation clear.
00359 **--------------------------------------------------------------------------*/
00360 /*
00361  * Basic type definitions for 16 bit variations on Windows types.
00362  * These types are provided mostly to insure compatibility with
00363  * 16 bit windows code.
00364  */
00365 
00366 #ifndef __WINE_WINDEF16_H
00367 #define __WINE_WINDEF16_H
00368 
00369 #include "windef.h"
00370 
00371 /* Standard data types */
00372 
00373 typedef short           INT16;
00374 typedef unsigned short  UINT16;
00375 typedef unsigned short  WIN_BOOL16;
00376 
00377 typedef UINT16          HANDLE16;
00378 typedef HANDLE16       *LPHANDLE16;
00379 
00380 typedef UINT16          WPARAM16;
00381 typedef INT16          *LPINT16;
00382 typedef UINT16         *LPUINT16;
00383 
00384 #define DECLARE_HANDLE16(a) \
00385         typedef HANDLE16 a##16; \
00386         typedef a##16 *P##a##16; \
00387         typedef a##16 *NP##a##16; \
00388         typedef a##16 *LP##a##16 
00389 
00390 DECLARE_HANDLE16(HACMDRIVERID);
00391 DECLARE_HANDLE16(HACMDRIVER);
00392 DECLARE_HANDLE16(HACMOBJ);
00393 DECLARE_HANDLE16(HACMSTREAM);
00394 DECLARE_HANDLE16(HMETAFILEPICT);
00395 
00396 DECLARE_HANDLE16(HACCEL);
00397 DECLARE_HANDLE16(HBITMAP);
00398 DECLARE_HANDLE16(HBRUSH);
00399 DECLARE_HANDLE16(HCOLORSPACE);
00400 DECLARE_HANDLE16(HCURSOR);
00401 DECLARE_HANDLE16(HDC);
00402 DECLARE_HANDLE16(HDROP);
00403 DECLARE_HANDLE16(HDRVR);
00404 DECLARE_HANDLE16(HDWP);
00405 DECLARE_HANDLE16(HENHMETAFILE);
00406 DECLARE_HANDLE16(HFILE);
00407 DECLARE_HANDLE16(HFONT);
00408 DECLARE_HANDLE16(HICON);
00409 DECLARE_HANDLE16(HINSTANCE);
00410 DECLARE_HANDLE16(HKEY);
00411 DECLARE_HANDLE16(HMENU);
00412 DECLARE_HANDLE16(HMETAFILE);
00413 DECLARE_HANDLE16(HMIDI);
00414 DECLARE_HANDLE16(HMIDIIN);
00415 DECLARE_HANDLE16(HMIDIOUT);
00416 DECLARE_HANDLE16(HMIDISTRM);
00417 DECLARE_HANDLE16(HMIXER);
00418 DECLARE_HANDLE16(HMIXEROBJ);
00419 DECLARE_HANDLE16(HMMIO);
00420 DECLARE_HANDLE16(HPALETTE);
00421 DECLARE_HANDLE16(HPEN);
00422 DECLARE_HANDLE16(HQUEUE);
00423 DECLARE_HANDLE16(HRGN);
00424 DECLARE_HANDLE16(HRSRC);
00425 DECLARE_HANDLE16(HTASK);
00426 DECLARE_HANDLE16(HWAVE);
00427 DECLARE_HANDLE16(HWAVEIN);
00428 DECLARE_HANDLE16(HWAVEOUT);
00429 DECLARE_HANDLE16(HWINSTA);
00430 DECLARE_HANDLE16(HDESK);
00431 DECLARE_HANDLE16(HWND);
00432 DECLARE_HANDLE16(HKL);
00433 DECLARE_HANDLE16(HIC);
00434 DECLARE_HANDLE16(HRASCONN);
00435 #undef DECLARE_HANDLE16
00436 
00437 typedef HINSTANCE16 HMODULE16;
00438 typedef HANDLE16 HGDIOBJ16;
00439 typedef HANDLE16 HGLOBAL16;
00440 typedef HANDLE16 HLOCAL16;
00441 
00442 /* The SIZE structure */
00443 typedef struct
00444 {
00445     INT16  cx;
00446     INT16  cy;
00447 } SIZE16, *PSIZE16, *LPSIZE16;
00448 
00449 /* The POINT structure */
00450 
00451 typedef struct
00452 {
00453     INT16  x;
00454     INT16  y;
00455 } POINT16, *PPOINT16, *LPPOINT16;
00456 
00457 /* The RECT structure */
00458 
00459 typedef struct
00460 {
00461     INT16  left;
00462     INT16  top;
00463     INT16  right;
00464     INT16  bottom;
00465 } RECT16, *LPRECT16;
00466 
00467 /* Callback function pointers types */
00468 
00469 typedef LRESULT CALLBACK (*DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
00470 typedef WIN_BOOL16  CALLBACK (*DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
00471 typedef INT16   CALLBACK (*EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
00472 typedef LRESULT CALLBACK (*FARPROC16)();
00473 typedef INT16   CALLBACK (*PROC16)();
00474 typedef WIN_BOOL16  CALLBACK (*GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
00475 typedef LRESULT CALLBACK (*HOOKPROC16)(INT16,WPARAM16,LPARAM);
00476 typedef WIN_BOOL16  CALLBACK (*PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
00477 typedef VOID    CALLBACK (*TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
00478 typedef LRESULT CALLBACK (*WNDENUMPROC16)(HWND16,LPARAM);
00479 typedef LRESULT CALLBACK (*WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
00480 
00481 #endif /* __WINE_WINDEF16_H */
00482 
00483 /* Define some empty macros for compatibility with Windows code. */
00484 
00485 #ifndef __WINE__
00486 #define NEAR
00487 #define FAR
00488 #define near
00489 #define far
00490 #define _near
00491 #define _far
00492 #define IN
00493 #define OUT
00494 #define OPTIONAL
00495 #endif  /* __WINE__ */
00496 
00497 /* Macro for structure packing. */
00498 
00499 #ifdef __GNUC__
00500 #ifndef _EGCS_
00501 #define WINE_PACKED   __attribute__((packed))
00502 #define WINE_UNUSED   __attribute__((unused))
00503 #define WINE_NORETURN __attribute__((noreturn))
00504 #endif
00505 #else
00506 #define WINE_PACKED    /* nothing */
00507 #define WINE_UNUSED    /* nothing */
00508 #define WINE_NORETURN  /* nothing */
00509 #endif
00510 
00511 /* Macros to split words and longs. */
00512 
00513 #define LOBYTE(w)              ((BYTE)(WORD)(w))
00514 #define HIBYTE(w)              ((BYTE)((WORD)(w) >> 8))
00515 
00516 #define LOWORD(l)              ((WORD)(DWORD)(l))
00517 #define HIWORD(l)              ((WORD)((DWORD)(l) >> 16))
00518 
00519 #define SLOWORD(l)             ((INT16)(LONG)(l))
00520 #define SHIWORD(l)             ((INT16)((LONG)(l) >> 16))
00521 
00522 #define MAKEWORD(low,high)     ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
00523 #define MAKELONG(low,high)     ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
00524 #define MAKELPARAM(low,high)   ((LPARAM)MAKELONG(low,high))
00525 #define MAKEWPARAM(low,high)   ((WPARAM)MAKELONG(low,high))
00526 #define MAKELRESULT(low,high)  ((LRESULT)MAKELONG(low,high))
00527 #define MAKEINTATOM(atom)      ((LPCSTR)MAKELONG((atom),0))
00528 
00529 #define SELECTOROF(ptr)     (HIWORD(ptr))
00530 #define OFFSETOF(ptr)       (LOWORD(ptr))
00531 
00532 #ifdef __WINE__
00533 /* macros to set parts of a DWORD (not in the Windows API) */
00534 #define SET_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD(val))
00535 #define SET_LOBYTE(dw,val)  ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))
00536 #define SET_HIBYTE(dw,val)  ((dw) = ((dw) & 0xffff00ff) | (LOWORD(val) & 0xff00))
00537 #define ADD_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))
00538 #endif
00539 
00540 /* Macros to access unaligned or wrong-endian WORDs and DWORDs. */
00541 /* Note: These macros are semantically broken, at least for wrc.  wrc
00542    spits out data in the platform's current binary format, *not* in 
00543    little-endian format.  These macros are used throughout the resource
00544    code to load and store data to the resources.  Since it is unlikely 
00545    that we'll ever be dealing with little-endian resource data, the 
00546    byte-swapping nature of these macros has been disabled.  Rather than 
00547    remove the use of these macros from the resource loading code, the
00548    macros have simply been disabled.  In the future, someone may want 
00549    to reactivate these macros for other purposes.  In that case, the
00550    resource code will have to be modified to use different macros. */ 
00551 
00552 #if 1
00553 #define PUT_WORD(ptr,w)   (*(WORD *)(ptr) = (w))
00554 #define GET_WORD(ptr)     (*(WORD *)(ptr))
00555 #define PUT_DWORD(ptr,dw) (*(DWORD *)(ptr) = (dw))
00556 #define GET_DWORD(ptr)    (*(DWORD *)(ptr))
00557 #else
00558 #define PUT_WORD(ptr,w)   (*(BYTE *)(ptr) = LOBYTE(w), \
00559                            *((BYTE *)(ptr) + 1) = HIBYTE(w))
00560 #define GET_WORD(ptr)     ((WORD)(*(BYTE *)(ptr) | \
00561                                   (WORD)(*((BYTE *)(ptr)+1) << 8)))
00562 #define PUT_DWORD(ptr,dw) (PUT_WORD((ptr),LOWORD(dw)), \
00563                            PUT_WORD((WORD *)(ptr)+1,HIWORD(dw)))
00564 #define GET_DWORD(ptr)    ((DWORD)(GET_WORD(ptr) | \
00565                                    ((DWORD)GET_WORD((WORD *)(ptr)+1) << 16)))
00566 #endif  /* 1 */
00567 
00568 /* min and max macros */
00569 #define __max(a,b) (((a) > (b)) ? (a) : (b))
00570 #define __min(a,b) (((a) < (b)) ? (a) : (b))
00571 #ifndef max
00572 #define max(a,b)   (((a) > (b)) ? (a) : (b))
00573 #endif
00574 #ifndef min
00575 #define min(a,b)   (((a) < (b)) ? (a) : (b))
00576 #endif
00577 
00578 #ifndef _MAX_PATH
00579 #define _MAX_PATH  260
00580 #endif
00581 #ifndef MAX_PATH
00582 #define MAX_PATH   260
00583 #endif
00584 #ifndef _MAX_DRIVE
00585 #define _MAX_DRIVE 3
00586 #endif
00587 #ifndef _MAX_DIR
00588 #define _MAX_DIR   256
00589 #endif
00590 #ifndef _MAX_FNAME
00591 #define _MAX_FNAME 255
00592 #endif
00593 #ifndef _MAX_EXT
00594 #define _MAX_EXT   256
00595 #endif
00596 
00597 #define HFILE_ERROR16   ((HFILE16)-1)
00598 #define HFILE_ERROR     ((HFILE)-1)
00599 
00600 /* The SIZE structure */
00601 typedef struct tagSIZE
00602 {
00603     INT  cx;
00604     INT  cy;
00605 } SIZE, *PSIZE, *LPSIZE;
00606 
00607 
00608 typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
00609 
00610 #define CONV_SIZE16TO32(s16,s32) \
00611             ((s32)->cx = (INT)(s16)->cx, (s32)->cy = (INT)(s16)->cy)
00612 #define CONV_SIZE32TO16(s32,s16) \
00613             ((s16)->cx = (INT16)(s32)->cx, (s16)->cy = (INT16)(s32)->cy)
00614 
00615 /* The POINT structure */
00616 typedef struct tagPOINT
00617 {
00618     LONG  x;
00619     LONG  y;
00620 } POINT, *PPOINT, *LPPOINT;
00621 
00622 typedef struct _POINTL
00623 {
00624     LONG x;
00625     LONG y;
00626 } POINTL;
00627 
00628 #define CONV_POINT16TO32(p16,p32) \
00629             ((p32)->x = (INT)(p16)->x, (p32)->y = (INT)(p16)->y)
00630 #define CONV_POINT32TO16(p32,p16) \
00631             ((p16)->x = (INT16)(p32)->x, (p16)->y = (INT16)(p32)->y)
00632 
00633 #define MAKEPOINT16(l) (*((POINT16 *)&(l)))
00634 
00635 /* The POINTS structure */
00636 
00637 typedef struct tagPOINTS
00638 {
00639         SHORT x;
00640         SHORT y;
00641 } POINTS, *PPOINTS, *LPPOINTS;
00642 
00643 
00644 #define MAKEPOINTS(l)  (*((POINTS *)&(l)))
00645 
00646 
00647 /* The RECT structure */
00648 typedef struct tagRECT
00649 {
00650     short  left;
00651     short  top;
00652     short  right;
00653     short  bottom;
00654 } RECT, *PRECT, *LPRECT;
00655 typedef const RECT *LPCRECT;
00656 
00657 
00658 typedef struct tagRECTL
00659 {
00660     LONG left;
00661     LONG top;  
00662     LONG right;
00663     LONG bottom;
00664 } RECTL, *PRECTL, *LPRECTL;
00665 
00666 typedef const RECTL *LPCRECTL;
00667 
00668 #define CONV_RECT16TO32(r16,r32) \
00669     ((r32)->left  = (INT)(r16)->left,  (r32)->top    = (INT)(r16)->top, \
00670      (r32)->right = (INT)(r16)->right, (r32)->bottom = (INT)(r16)->bottom)
00671 #define CONV_RECT32TO16(r32,r16) \
00672     ((r16)->left  = (INT16)(r32)->left,  (r16)->top    = (INT16)(r32)->top, \
00673      (r16)->right = (INT16)(r32)->right, (r16)->bottom = (INT16)(r32)->bottom)
00674 
00675 #ifdef __cplusplus
00676 }
00677 #endif
00678 
00679 #endif /* __WINE_WINDEF_H */

Generated on Tue Dec 20 10:14:23 2005 for vlc-0.8.4a by  doxygen 1.4.2