windef.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:19k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*
  2.  * Basic types definitions
  3.  *
  4.  * Copyright 1996 Alexandre Julliard
  5.  *
  6.  * Modified for use with MPlayer, detailed CVS changelog at
  7.  * http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
  8.  * $Id: a84cf0e98e012f437bb6deb1c4210b4cd75181e8 $
  9.  *
  10.  */
  11. #ifndef __WINE_WINDEF_H
  12. #define __WINE_WINDEF_H
  13. #ifdef __WINE__
  14. # include "config.h"
  15. # undef UNICODE
  16. #endif
  17. #ifdef _EGCS_
  18. #define __stdcall
  19. #endif
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /* Misc. constants. */
  24. #ifdef FALSE
  25. #undef FALSE
  26. #endif
  27. #define FALSE 0
  28. #ifdef TRUE
  29. #undef TRUE
  30. #endif
  31. #define TRUE  1
  32. #ifdef NULL
  33. #undef NULL
  34. #endif
  35. #define NULL  0
  36. /* Macros to map Winelib names to the correct implementation name */
  37. /* depending on __WINE__ and UNICODE macros.                      */
  38. /* Note that Winelib is purely Win32.                             */
  39. #ifdef __WINE__
  40. # define WINELIB_NAME_AW(func) 
  41.     func##_must_be_suffixed_with_W_or_A_in_this_context 
  42.     func##_must_be_suffixed_with_W_or_A_in_this_context
  43. #else  /* __WINE__ */
  44. # ifdef UNICODE
  45. #  define WINELIB_NAME_AW(func) func##W
  46. # else
  47. #  define WINELIB_NAME_AW(func) func##A
  48. # endif  /* UNICODE */
  49. #endif  /* __WINE__ */
  50. #ifdef __WINE__
  51. # define DECL_WINELIB_TYPE_AW(type)  /* nothing */
  52. #else   /* __WINE__ */
  53. # define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;
  54. #endif  /* __WINE__ */
  55. #ifndef NONAMELESSSTRUCT
  56. # if defined(__WINE__) || !defined(_FORCENAMELESSSTRUCT)
  57. #  define NONAMELESSSTRUCT
  58. # endif
  59. #endif /* !defined(NONAMELESSSTRUCT) */
  60. #ifndef NONAMELESSUNION
  61. # if defined(__WINE__) || !defined(_FORCENAMELESSUNION) || !defined(__cplusplus)
  62. #  define NONAMELESSUNION
  63. # endif
  64. #endif /* !defined(NONAMELESSUNION) */
  65. #ifndef NONAMELESSSTRUCT
  66. #define DUMMYSTRUCTNAME
  67. #define DUMMYSTRUCTNAME1
  68. #define DUMMYSTRUCTNAME2
  69. #define DUMMYSTRUCTNAME3
  70. #define DUMMYSTRUCTNAME4
  71. #define DUMMYSTRUCTNAME5
  72. #else /* !defined(NONAMELESSSTRUCT) */
  73. #define DUMMYSTRUCTNAME   s
  74. #define DUMMYSTRUCTNAME1  s1
  75. #define DUMMYSTRUCTNAME2  s2
  76. #define DUMMYSTRUCTNAME3  s3
  77. #define DUMMYSTRUCTNAME4  s4
  78. #define DUMMYSTRUCTNAME5  s5
  79. #endif /* !defined(NONAMELESSSTRUCT) */
  80. #ifndef NONAMELESSUNION
  81. #define DUMMYUNIONNAME
  82. #define DUMMYUNIONNAME1
  83. #define DUMMYUNIONNAME2
  84. #define DUMMYUNIONNAME3
  85. #define DUMMYUNIONNAME4
  86. #define DUMMYUNIONNAME5
  87. #else /* !defined(NONAMELESSUNION) */
  88. #define DUMMYUNIONNAME   u
  89. #define DUMMYUNIONNAME1  u1
  90. #define DUMMYUNIONNAME2  u2
  91. #define DUMMYUNIONNAME3  u3
  92. #define DUMMYUNIONNAME4  u4
  93. #define DUMMYUNIONNAME5  u5
  94. #endif /* !defined(NONAMELESSUNION) */
  95. /* Calling conventions definitions */
  96. #ifdef __i386__
  97. # if defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
  98. #  ifndef _EGCS_ 
  99. #define __stdcall __attribute__((__stdcall__))
  100. #define __cdecl   __attribute__((__cdecl__))
  101. #  define __RESTORE_ES  __asm__ __volatile__("pushl %dsntpopl %es")
  102. #  endif
  103. # else
  104. // #  error You need gcc >= 2.7 to build Wine on a 386
  105. # endif
  106. #else 
  107. # define __stdcall
  108. # define __cdecl
  109. # define __RESTORE_ES
  110. #endif
  111. #define CALLBACK    __stdcall
  112. #define WINAPI      __stdcall
  113. #define APIPRIVATE  __stdcall
  114. #define PASCAL      __stdcall
  115. #define pascal      __stdcall
  116. #define _pascal     __stdcall
  117. #if !defined(__CYGWIN__) && !defined(__MINGW32__)
  118. #define _stdcall    __stdcall
  119. #define _fastcall   __stdcall
  120. #define __fastcall  __stdcall
  121. #endif
  122. #define __export    __stdcall
  123. #define CDECL       __cdecl
  124. #define _CDECL      __cdecl
  125. #define cdecl       __cdecl
  126. #if !defined(__CYGWIN__) && !defined(__MINGW32__)
  127. #define _cdecl      __cdecl
  128. #endif
  129. #define WINAPIV     __cdecl
  130. #define APIENTRY    WINAPI
  131. #if !defined(__CYGWIN__) && !defined(__MINGW32__)
  132. #define __declspec(x)
  133. #endif
  134. #define dllimport
  135. #define dllexport
  136. #define CONST       const
  137. /* Standard data types. These are the same for emulator and library. */
  138. typedef void            VOID;
  139. typedef int             INT;
  140. typedef unsigned int    UINT;
  141. typedef unsigned short  WORD;
  142. typedef unsigned long   DWORD;
  143. typedef unsigned long   ULONG;
  144. typedef unsigned char   BYTE;
  145. typedef long            LONG;
  146. typedef short           SHORT;
  147. typedef unsigned short  USHORT;
  148. typedef char            CHAR;
  149. typedef unsigned char   UCHAR;
  150. typedef LONG SCODE;
  151. /* Some systems might have wchar_t, but we really need 16 bit characters */
  152. typedef unsigned short  WCHAR;
  153. typedef int             WIN_BOOL;
  154. typedef double          DATE;
  155. typedef double          DOUBLE;
  156. typedef long long       LONGLONG;
  157. typedef unsigned long long   ULONGLONG;
  158. /* FIXME: Wine does not compile with strict on, therefore strict
  159.  * handles are presently only usable on machines where sizeof(UINT) ==
  160.  * sizeof(void*).  HANDLEs are supposed to be void* but a large amount
  161.  * of WINE code operates on HANDLES as if they are UINTs. So to WINE
  162.  * they exist as UINTs but to the Winelib user who turns on strict,
  163.  * they exist as void*. If there is a size difference between UINT and
  164.  * void* then things get ugly.  */
  165. #ifdef STRICT
  166. typedef VOID*           HANDLE;
  167. #else
  168. typedef UINT            HANDLE;
  169. #endif
  170. typedef HANDLE         *LPHANDLE;
  171. /* Integer types. These are the same for emulator and library. */
  172. typedef UINT            WPARAM;
  173. typedef LONG            LPARAM;
  174. typedef LONG            HRESULT;
  175. typedef LONG            LRESULT;
  176. typedef WORD            ATOM;
  177. typedef WORD            CATCHBUF[9];
  178. typedef WORD           *LPCATCHBUF;
  179. typedef HANDLE          HHOOK;
  180. typedef HANDLE          HMONITOR;
  181. typedef DWORD           LCID;
  182. typedef WORD            LANGID;
  183. typedef DWORD           LCTYPE;
  184. typedef float           FLOAT;
  185. /* Pointers types. These are the same for emulator and library. */
  186. /* winnt types */
  187. typedef VOID           *PVOID;
  188. typedef const void     *PCVOID;
  189. typedef CHAR           *PCHAR;
  190. typedef UCHAR          *PUCHAR;
  191. typedef BYTE           *PBYTE;
  192. typedef WORD           *PWORD;
  193. typedef USHORT         *PUSHORT;
  194. typedef SHORT          *PSHORT;
  195. typedef ULONG          *PULONG;
  196. typedef LONG           *PLONG;
  197. typedef DWORD          *PDWORD;
  198. /* common win32 types */
  199. typedef CHAR           *LPSTR;
  200. typedef CHAR           *PSTR;
  201. typedef const CHAR     *LPCSTR;
  202. typedef const CHAR     *PCSTR;
  203. typedef WCHAR          *LPWSTR;
  204. typedef WCHAR          *PWSTR;
  205. typedef const WCHAR    *LPCWSTR;
  206. typedef const WCHAR    *PCWSTR;
  207. typedef BYTE           *LPBYTE;
  208. typedef WORD           *LPWORD;
  209. typedef DWORD          *LPDWORD;
  210. typedef LONG           *LPLONG;
  211. typedef VOID           *LPVOID;
  212. typedef const VOID     *LPCVOID;
  213. typedef INT            *PINT;
  214. typedef INT            *LPINT;
  215. typedef UINT           *PUINT;
  216. typedef UINT           *LPUINT;
  217. typedef FLOAT          *PFLOAT;
  218. typedef FLOAT          *LPFLOAT;
  219. typedef WIN_BOOL           *PWIN_BOOL;
  220. typedef WIN_BOOL           *LPWIN_BOOL;
  221. /* Special case: a segmented pointer is just a pointer in the user's code. */
  222. #ifdef __WINE__
  223. typedef DWORD SEGPTR;
  224. #else
  225. typedef void* SEGPTR;
  226. #endif /* __WINE__ */
  227. /* Handle types that exist both in Win16 and Win32. */
  228. #ifdef STRICT
  229. #define DECLARE_HANDLE(a) 
  230. typedef struct a##__ { int unused; } *a; 
  231. typedef a *P##a; 
  232. typedef a *LP##a
  233. #else /*STRICT*/
  234. #define DECLARE_HANDLE(a) 
  235. typedef HANDLE a; 
  236. typedef a *P##a; 
  237. typedef a *LP##a
  238. #endif /*STRICT*/
  239. DECLARE_HANDLE(HACMDRIVERID);
  240. DECLARE_HANDLE(HACMDRIVER);
  241. DECLARE_HANDLE(HACMOBJ);
  242. DECLARE_HANDLE(HACMSTREAM);
  243. DECLARE_HANDLE(HMETAFILEPICT);
  244. DECLARE_HANDLE(HACCEL);
  245. DECLARE_HANDLE(HBITMAP);
  246. DECLARE_HANDLE(HBRUSH);
  247. DECLARE_HANDLE(HCOLORSPACE);
  248. DECLARE_HANDLE(HCURSOR);
  249. DECLARE_HANDLE(HDC);
  250. DECLARE_HANDLE(HDROP);
  251. DECLARE_HANDLE(HDRVR);
  252. DECLARE_HANDLE(HDWP);
  253. DECLARE_HANDLE(HENHMETAFILE);
  254. DECLARE_HANDLE(HFILE);
  255. DECLARE_HANDLE(HFONT);
  256. DECLARE_HANDLE(HICON);
  257. DECLARE_HANDLE(HINSTANCE);
  258. DECLARE_HANDLE(HKEY);
  259. DECLARE_HANDLE(HMENU);
  260. DECLARE_HANDLE(HMETAFILE);
  261. DECLARE_HANDLE(HMIDI);
  262. DECLARE_HANDLE(HMIDIIN);
  263. DECLARE_HANDLE(HMIDIOUT);
  264. DECLARE_HANDLE(HMIDISTRM);
  265. DECLARE_HANDLE(HMIXER);
  266. DECLARE_HANDLE(HMIXEROBJ);
  267. DECLARE_HANDLE(HMMIO);
  268. DECLARE_HANDLE(HPALETTE);
  269. DECLARE_HANDLE(HPEN);
  270. DECLARE_HANDLE(HQUEUE);
  271. DECLARE_HANDLE(HRGN);
  272. DECLARE_HANDLE(HRSRC);
  273. DECLARE_HANDLE(HTASK);
  274. DECLARE_HANDLE(HWAVE);
  275. DECLARE_HANDLE(HWAVEIN);
  276. DECLARE_HANDLE(HWAVEOUT);
  277. DECLARE_HANDLE(HWINSTA);
  278. DECLARE_HANDLE(HDESK);
  279. DECLARE_HANDLE(HWND);
  280. DECLARE_HANDLE(HKL);
  281. DECLARE_HANDLE(HIC);
  282. DECLARE_HANDLE(HRASCONN);
  283. /* Handle types that must remain interchangeable even with strict on */
  284. typedef HINSTANCE HMODULE;
  285. typedef HANDLE HGDIOBJ;
  286. typedef HANDLE HGLOBAL;
  287. typedef HANDLE HLOCAL;
  288. typedef HANDLE GLOBALHANDLE;
  289. typedef HANDLE LOCALHANDLE;
  290. /* Callback function pointers types */
  291. //WIN_BOOL CALLBACK DATEFMT_ENUMPROCA(LPSTR);
  292. typedef WIN_BOOL  CALLBACK  (* DATEFMT_ENUMPROCA)(LPSTR);
  293. typedef WIN_BOOL    CALLBACK (* DATEFMT_ENUMPROCW)(LPWSTR);
  294. DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
  295. typedef WIN_BOOL    CALLBACK (*DLGPROC)(HWND,UINT,WPARAM,LPARAM);
  296. typedef LRESULT CALLBACK (*DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM);
  297. typedef INT     CALLBACK (*EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
  298. typedef INT     CALLBACK (*EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
  299. DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
  300. typedef LRESULT CALLBACK (*FARPROC)();
  301. typedef INT     CALLBACK (*PROC)();
  302. typedef WIN_BOOL    CALLBACK (*GRAYSTRINGPROC)(HDC,LPARAM,INT);
  303. typedef LRESULT CALLBACK (*HOOKPROC)(INT,WPARAM,LPARAM);
  304. typedef WIN_BOOL    CALLBACK (*PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
  305. typedef WIN_BOOL    CALLBACK (*PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
  306. DECL_WINELIB_TYPE_AW(PROPENUMPROC)
  307. typedef WIN_BOOL    CALLBACK (*PROPENUMPROCEXA)(HWND,LPCSTR,HANDLE,LPARAM);
  308. typedef WIN_BOOL    CALLBACK (*PROPENUMPROCEXW)(HWND,LPCWSTR,HANDLE,LPARAM);
  309. DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
  310. typedef WIN_BOOL    CALLBACK (* TIMEFMT_ENUMPROCA)(LPSTR);
  311. typedef WIN_BOOL    CALLBACK (* TIMEFMT_ENUMPROCW)(LPWSTR);
  312. DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
  313. typedef VOID    CALLBACK (*TIMERPROC)(HWND,UINT,UINT,DWORD);
  314. typedef WIN_BOOL CALLBACK (*WNDENUMPROC)(HWND,LPARAM);
  315. typedef LRESULT CALLBACK (*WNDPROC)(HWND,UINT,WPARAM,LPARAM);
  316. /*----------------------------------------------------------------------------
  317. ** FIXME:  Better isolate Wine's reliance on the xxx16 type definitions.
  318. **         For now, we just isolate them to make the situation clear.
  319. **--------------------------------------------------------------------------*/
  320. /*
  321.  * Basic type definitions for 16 bit variations on Windows types.
  322.  * These types are provided mostly to insure compatibility with
  323.  * 16 bit windows code.
  324.  */
  325. #ifndef __WINE_WINDEF16_H
  326. #define __WINE_WINDEF16_H
  327. #include "windef.h"
  328. /* Standard data types */
  329. typedef short           INT16;
  330. typedef unsigned short  UINT16;
  331. typedef unsigned short  WIN_BOOL16;
  332. typedef UINT16          HANDLE16;
  333. typedef HANDLE16       *LPHANDLE16;
  334. typedef UINT16          WPARAM16;
  335. typedef INT16          *LPINT16;
  336. typedef UINT16         *LPUINT16;
  337. #define DECLARE_HANDLE16(a) 
  338. typedef HANDLE16 a##16; 
  339. typedef a##16 *P##a##16; 
  340. typedef a##16 *NP##a##16; 
  341. typedef a##16 *LP##a##16 
  342. DECLARE_HANDLE16(HACMDRIVERID);
  343. DECLARE_HANDLE16(HACMDRIVER);
  344. DECLARE_HANDLE16(HACMOBJ);
  345. DECLARE_HANDLE16(HACMSTREAM);
  346. DECLARE_HANDLE16(HMETAFILEPICT);
  347. DECLARE_HANDLE16(HACCEL);
  348. DECLARE_HANDLE16(HBITMAP);
  349. DECLARE_HANDLE16(HBRUSH);
  350. DECLARE_HANDLE16(HCOLORSPACE);
  351. DECLARE_HANDLE16(HCURSOR);
  352. DECLARE_HANDLE16(HDC);
  353. DECLARE_HANDLE16(HDROP);
  354. DECLARE_HANDLE16(HDRVR);
  355. DECLARE_HANDLE16(HDWP);
  356. DECLARE_HANDLE16(HENHMETAFILE);
  357. DECLARE_HANDLE16(HFILE);
  358. DECLARE_HANDLE16(HFONT);
  359. DECLARE_HANDLE16(HICON);
  360. DECLARE_HANDLE16(HINSTANCE);
  361. DECLARE_HANDLE16(HKEY);
  362. DECLARE_HANDLE16(HMENU);
  363. DECLARE_HANDLE16(HMETAFILE);
  364. DECLARE_HANDLE16(HMIDI);
  365. DECLARE_HANDLE16(HMIDIIN);
  366. DECLARE_HANDLE16(HMIDIOUT);
  367. DECLARE_HANDLE16(HMIDISTRM);
  368. DECLARE_HANDLE16(HMIXER);
  369. DECLARE_HANDLE16(HMIXEROBJ);
  370. DECLARE_HANDLE16(HMMIO);
  371. DECLARE_HANDLE16(HPALETTE);
  372. DECLARE_HANDLE16(HPEN);
  373. DECLARE_HANDLE16(HQUEUE);
  374. DECLARE_HANDLE16(HRGN);
  375. DECLARE_HANDLE16(HRSRC);
  376. DECLARE_HANDLE16(HTASK);
  377. DECLARE_HANDLE16(HWAVE);
  378. DECLARE_HANDLE16(HWAVEIN);
  379. DECLARE_HANDLE16(HWAVEOUT);
  380. DECLARE_HANDLE16(HWINSTA);
  381. DECLARE_HANDLE16(HDESK);
  382. DECLARE_HANDLE16(HWND);
  383. DECLARE_HANDLE16(HKL);
  384. DECLARE_HANDLE16(HIC);
  385. DECLARE_HANDLE16(HRASCONN);
  386. #undef DECLARE_HANDLE16
  387. typedef HINSTANCE16 HMODULE16;
  388. typedef HANDLE16 HGDIOBJ16;
  389. typedef HANDLE16 HGLOBAL16;
  390. typedef HANDLE16 HLOCAL16;
  391. /* The SIZE structure */
  392. typedef struct
  393. {
  394.     INT16  cx;
  395.     INT16  cy;
  396. } SIZE16, *PSIZE16, *LPSIZE16;
  397. /* The POINT structure */
  398. typedef struct
  399. {
  400.     INT16  x;
  401.     INT16  y;
  402. } POINT16, *PPOINT16, *LPPOINT16;
  403. /* The RECT structure */
  404. typedef struct
  405. {
  406.     INT16  left;
  407.     INT16  top;
  408.     INT16  right;
  409.     INT16  bottom;
  410. } RECT16, *LPRECT16;
  411. /* Callback function pointers types */
  412. typedef LRESULT CALLBACK (*DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
  413. typedef WIN_BOOL16  CALLBACK (*DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
  414. typedef INT16   CALLBACK (*EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
  415. typedef LRESULT CALLBACK (*FARPROC16)();
  416. typedef INT16   CALLBACK (*PROC16)();
  417. typedef WIN_BOOL16  CALLBACK (*GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
  418. typedef LRESULT CALLBACK (*HOOKPROC16)(INT16,WPARAM16,LPARAM);
  419. typedef WIN_BOOL16  CALLBACK (*PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
  420. typedef VOID    CALLBACK (*TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
  421. typedef LRESULT CALLBACK (*WNDENUMPROC16)(HWND16,LPARAM);
  422. typedef LRESULT CALLBACK (*WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
  423. #endif /* __WINE_WINDEF16_H */
  424. /* Define some empty macros for compatibility with Windows code. */
  425. #ifndef __WINE__
  426. #define NEAR
  427. #define FAR
  428. #define near
  429. #define far
  430. #define _near
  431. #define _far
  432. #define IN
  433. #define OUT
  434. #define OPTIONAL
  435. #endif  /* __WINE__ */
  436. /* Macro for structure packing. */
  437. #ifdef __GNUC__
  438. #ifndef _EGCS_
  439. #define WINE_PACKED   __attribute__((packed))
  440. #define WINE_UNUSED   __attribute__((unused))
  441. #define WINE_NORETURN __attribute__((noreturn))
  442. #endif
  443. #else
  444. #define WINE_PACKED    /* nothing */
  445. #define WINE_UNUSED    /* nothing */
  446. #define WINE_NORETURN  /* nothing */
  447. #endif
  448. /* Macros to split words and longs. */
  449. #define LOBYTE(w)              ((BYTE)(WORD)(w))
  450. #define HIBYTE(w)              ((BYTE)((WORD)(w) >> 8))
  451. #define LOWORD(l)              ((WORD)(DWORD)(l))
  452. #define HIWORD(l)              ((WORD)((DWORD)(l) >> 16))
  453. #define SLOWORD(l)             ((INT16)(LONG)(l))
  454. #define SHIWORD(l)             ((INT16)((LONG)(l) >> 16))
  455. #define MAKEWORD(low,high)     ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
  456. #define MAKELONG(low,high)     ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
  457. #define MAKELPARAM(low,high)   ((LPARAM)MAKELONG(low,high))
  458. #define MAKEWPARAM(low,high)   ((WPARAM)MAKELONG(low,high))
  459. #define MAKELRESULT(low,high)  ((LRESULT)MAKELONG(low,high))
  460. #define MAKEINTATOM(atom)      ((LPCSTR)MAKELONG((atom),0))
  461. #define SELECTOROF(ptr)     (HIWORD(ptr))
  462. #define OFFSETOF(ptr)       (LOWORD(ptr))
  463. #ifdef __WINE__
  464. /* macros to set parts of a DWORD (not in the Windows API) */
  465. #define SET_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD(val))
  466. #define SET_LOBYTE(dw,val)  ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))
  467. #define SET_HIBYTE(dw,val)  ((dw) = ((dw) & 0xffff00ff) | (LOWORD(val) & 0xff00))
  468. #define ADD_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))
  469. #endif
  470. /* Macros to access unaligned or wrong-endian WORDs and DWORDs. */
  471. /* Note: These macros are semantically broken, at least for wrc.  wrc
  472.    spits out data in the platform's current binary format, *not* in 
  473.    little-endian format.  These macros are used throughout the resource
  474.    code to load and store data to the resources.  Since it is unlikely 
  475.    that we'll ever be dealing with little-endian resource data, the 
  476.    byte-swapping nature of these macros has been disabled.  Rather than 
  477.    remove the use of these macros from the resource loading code, the
  478.    macros have simply been disabled.  In the future, someone may want 
  479.    to reactivate these macros for other purposes.  In that case, the
  480.    resource code will have to be modified to use different macros. */ 
  481. #if 1
  482. #define PUT_WORD(ptr,w)   (*(WORD *)(ptr) = (w))
  483. #define GET_WORD(ptr)     (*(WORD *)(ptr))
  484. #define PUT_DWORD(ptr,dw) (*(DWORD *)(ptr) = (dw))
  485. #define GET_DWORD(ptr)    (*(DWORD *)(ptr))
  486. #else
  487. #define PUT_WORD(ptr,w)   (*(BYTE *)(ptr) = LOBYTE(w), 
  488.                            *((BYTE *)(ptr) + 1) = HIBYTE(w))
  489. #define GET_WORD(ptr)     ((WORD)(*(BYTE *)(ptr) | 
  490.                                   (WORD)(*((BYTE *)(ptr)+1) << 8)))
  491. #define PUT_DWORD(ptr,dw) (PUT_WORD((ptr),LOWORD(dw)), 
  492.                            PUT_WORD((WORD *)(ptr)+1,HIWORD(dw)))
  493. #define GET_DWORD(ptr)    ((DWORD)(GET_WORD(ptr) | 
  494.                                    ((DWORD)GET_WORD((WORD *)(ptr)+1) << 16)))
  495. #endif  /* 1 */
  496. /* min and max macros */
  497. #define __max(a,b) (((a) > (b)) ? (a) : (b))
  498. #define __min(a,b) (((a) < (b)) ? (a) : (b))
  499. #ifndef max
  500. #define max(a,b)   (((a) > (b)) ? (a) : (b))
  501. #endif
  502. #ifndef min
  503. #define min(a,b)   (((a) < (b)) ? (a) : (b))
  504. #endif
  505. #ifndef _MAX_PATH
  506. #define _MAX_PATH  260
  507. #endif
  508. #ifndef MAX_PATH
  509. #define MAX_PATH   260
  510. #endif
  511. #ifndef _MAX_DRIVE
  512. #define _MAX_DRIVE 3
  513. #endif
  514. #ifndef _MAX_DIR
  515. #define _MAX_DIR   256
  516. #endif
  517. #ifndef _MAX_FNAME
  518. #define _MAX_FNAME 255
  519. #endif
  520. #ifndef _MAX_EXT
  521. #define _MAX_EXT   256
  522. #endif
  523. #define HFILE_ERROR16   ((HFILE16)-1)
  524. #define HFILE_ERROR     ((HFILE)-1)
  525. /* The SIZE structure */
  526. typedef struct tagSIZE
  527. {
  528.     INT  cx;
  529.     INT  cy;
  530. } SIZE, *PSIZE, *LPSIZE;
  531. typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
  532. #define CONV_SIZE16TO32(s16,s32) 
  533.             ((s32)->cx = (INT)(s16)->cx, (s32)->cy = (INT)(s16)->cy)
  534. #define CONV_SIZE32TO16(s32,s16) 
  535.             ((s16)->cx = (INT16)(s32)->cx, (s16)->cy = (INT16)(s32)->cy)
  536. /* The POINT structure */
  537. typedef struct tagPOINT
  538. {
  539.     LONG  x;
  540.     LONG  y;
  541. } POINT, *PPOINT, *LPPOINT;
  542. typedef struct _POINTL
  543. {
  544.     LONG x;
  545.     LONG y;
  546. } POINTL;
  547. #define CONV_POINT16TO32(p16,p32) 
  548.             ((p32)->x = (INT)(p16)->x, (p32)->y = (INT)(p16)->y)
  549. #define CONV_POINT32TO16(p32,p16) 
  550.             ((p16)->x = (INT16)(p32)->x, (p16)->y = (INT16)(p32)->y)
  551. #define MAKEPOINT16(l) (*((POINT16 *)&(l)))
  552. /* The POINTS structure */
  553. typedef struct tagPOINTS
  554. {
  555. SHORT x;
  556. SHORT y;
  557. } POINTS, *PPOINTS, *LPPOINTS;
  558. #define MAKEPOINTS(l)  (*((POINTS *)&(l)))
  559. /* The RECT structure */
  560. typedef struct tagRECT
  561. {
  562.     short  left;
  563.     short  top;
  564.     short  right;
  565.     short  bottom;
  566. } RECT, *PRECT, *LPRECT;
  567. typedef const RECT *LPCRECT;
  568. typedef struct tagRECTL
  569. {
  570.     LONG left;
  571.     LONG top;  
  572.     LONG right;
  573.     LONG bottom;
  574. } RECTL, *PRECTL, *LPRECTL;
  575. typedef const RECTL *LPCRECTL;
  576. #define CONV_RECT16TO32(r16,r32) 
  577.     ((r32)->left  = (INT)(r16)->left,  (r32)->top    = (INT)(r16)->top, 
  578.      (r32)->right = (INT)(r16)->right, (r32)->bottom = (INT)(r16)->bottom)
  579. #define CONV_RECT32TO16(r32,r16) 
  580.     ((r16)->left  = (INT16)(r32)->left,  (r16)->top    = (INT16)(r32)->top, 
  581.      (r16)->right = (INT16)(r32)->right, (r16)->bottom = (INT16)(r32)->bottom)
  582. #ifdef __cplusplus
  583. }
  584. #endif
  585. #endif /* __WINE_WINDEF_H */