hxtypes.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:22k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxtypes.h,v 1.17.2.4 2004/07/23 06:41:37 pankajgupta Exp $
  3.  *
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  *
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  *
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  *
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  *
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  *
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  *
  46.  * Contributor(s):
  47.  *
  48.  * ***** END LICENSE BLOCK ***** */
  49. #if defined(_SYMBIAN)
  50. # include <e32def.h>
  51. # include <e32std.h>
  52. # include <platform/symbian/symbiantypes.h> /* For our TInt64 impl */
  53. #endif
  54. #ifdef _VXWORKS
  55. #include "types/vxTypesOld.h"
  56. #include "vxWorks.h"
  57.      /* md3 - added to override SENS macro. net/mbuf.h */
  58. #    ifdef m_flags
  59. #    undef m_flags
  60. #    endif /* m_flags */
  61.      /* md3 - added to override SENS macro, net/radix.h */
  62. #    ifdef Free
  63. #    undef Free
  64. #    endif /* Free */
  65. #endif
  66. #ifdef _MACINTOSH
  67. #pragma once
  68. #endif
  69. #ifndef _HXTYPES_H_
  70. #define _HXTYPES_H_
  71. // this is essential to make sure that new is not #define'd before the C++ version is included.
  72. #if (defined(_MSC_VER) && defined(_DEBUG) && defined(__cplusplus) && !defined(WIN32_PLATFORM_PSPC) && !defined(_SYMBIAN) && !defined(_OPENWAVE))
  73. #include <memory>
  74. #endif
  75. // disable the "debug info truncated at 255" warning.
  76. #if defined _MSC_VER
  77. #pragma warning (disable: 4786)
  78. #endif
  79. #if (defined(_MSC_VER) && (_MSC_VER > 1100) && defined(_BASETSD_H_))
  80. #error For VC++ 6.0 or higher you must include hxtypes.h before other windows header files.
  81. #endif
  82. #if defined(_SYMBIAN)
  83. typedef TInt8   INT8;
  84. typedef TUint8  UINT8;
  85. typedef TInt16  INT16;
  86. typedef TUint16 UINT16;
  87. typedef TInt32  INT32;
  88. typedef TUint32 UINT32;
  89. typedef TUint32 UINT; /* Its unclear, but UINT is suppose to be 32 bits. */
  90. typedef TBool   BOOL;
  91. #else
  92. # ifndef _VXWORKS
  93. #  if defined(QWS) && !defined(QT_CLEAN_NAMESPACE)
  94. #error "You need to define QT_CLEAN_NAMESPACE when using Qt with Helix. If you don't you'll have conflicts with the Helix INT32, UINT32, and UINT definitions"
  95. #  endif
  96.    typedef char                    INT8;   /* signed 8 bit value */
  97.    typedef unsigned char           UINT8;  /* unsigned 8 bit value */
  98.    typedef short int               INT16;  /* signed 16 bit value */
  99.    typedef unsigned short int      UINT16; /* unsigned 16 bit value */
  100. #  if (defined _UNIX && defined _LONG_IS_64)
  101.      typedef int                     INT32;  /* signed 32 bit value */
  102.      typedef unsigned int            UINT32; /* unsigned 32 bit value */
  103.      typedef unsigned int            UINT;
  104. #  elif defined _VXWORKS
  105.        typedef int                     INT32;  /* signed 32 bit value */
  106.        typedef unsigned int            UINT32; /* unsigned 32 bit value */
  107.        typedef unsigned int            UINT;
  108. #  else
  109.      typedef long int                INT32;  /* signed 32 bit value */
  110.      typedef unsigned long int       UINT32; /* unsigned 32 bit value */
  111.      typedef unsigned int            UINT;
  112. #  endif /* (defined _UNIX && (defined _ALPHA || OSF1)) */
  113. #  if (defined _UNIX && defined _IRIX)
  114. #    ifdef __LONG_MAX__
  115. #    undef __LONG_MAX__
  116. #  endif
  117. #  define __LONG_MAX__ 2147483647
  118. # endif
  119. #ifndef BOOL
  120. typedef int     BOOL;                   /* signed int value (0 or 1) */
  121. #endif
  122. #endif /* _VXWORKS */
  123. #endif /* _SYMBIAN */
  124. #define ARE_BOOLS_EQUAL(a,b) (((a) && (b)) || (!(a) && !(b)))
  125. #ifndef HX_BITFIELD
  126. typedef unsigned char HX_BITFIELD;
  127. #endif
  128. typedef INT32   LONG32;                 /* signed 32 bit value */
  129. typedef UINT32  ULONG32;                /* unsigned 32 bit value */
  130. #ifdef _LONG_IS_64
  131. typedef long int                INT64;
  132. typedef unsigned long int       UINT64;
  133. #elif defined(_WINDOWS) || defined(_OPENWAVE_SIMULATOR)
  134. typedef __int64 INT64;
  135. typedef unsigned __int64 UINT64;
  136. #elif defined(_SYMBIAN)
  137. typedef SymInt64                INT64;
  138. typedef SymInt64                UINT64;
  139. #else
  140. typedef long long INT64;
  141. typedef unsigned long long UINT64;
  142. #endif /* _WINDOWS */
  143. /* define the float and double type for all platforms */
  144. #define HXFLOAT  float
  145. #define HXDOUBLE double
  146. typedef ULONG32 HX_MOFTAG;
  147. /* Some platforms have native 64 bit int types, others don't
  148.  * so, we provide these casting macros that have to be used
  149.  * to cast 64-bit ints to smaller datatypes
  150.  */
  151. #if defined(_SYMBIAN)
  152. #define INT64_TO_ULONG32(a) ((ULONG32)((a).Low()))
  153. #define INT64_TO_UINT32(a)  ((UINT32)((a).Low()))
  154. #define INT64_TO_INT32(a)   ((INT32)((a).Low()))
  155. #define INT64_TO_DOUBLE(a)  ((a).GetTReal())
  156. #define INT64_TO_FLOAT(a)   ((a).GetTReal())
  157. #define UINT32_TO_DOUBLE(a) (SymbianUINT32toDouble(a))
  158. #else
  159. #define INT64_TO_ULONG32(a) ((ULONG32)(a))
  160. #define INT64_TO_UINT32(a)  ((UINT32) (a))
  161. #define INT64_TO_INT32(a)   ((INT32)  (a))
  162. #define INT64_TO_DOUBLE(a)  ((double) (a))
  163. #define INT64_TO_FLOAT(a)   ((float) (a))
  164. #define UINT32_TO_DOUBLE(a) ((double) (a))
  165. #endif
  166. /*
  167.  * Added for ease of reading.
  168.  * Instead of using __MWERKS__ you can  now use _MACINTOSH
  169.  */
  170. #ifdef __MWERKS__
  171.     #if __dest_os==__macos
  172. #ifndef _MACINTOSH
  173. #define _MACINTOSH  1
  174. #ifdef powerc
  175. #define _MACPPC
  176. #else
  177. #define _MAC68K
  178. #endif
  179. #endif
  180.     #endif
  181. #endif
  182. #if defined(_SYMBIAN)
  183. #define PATH_MAX      KMaxPath
  184. #endif
  185. #ifdef __cplusplus
  186. extern "C" {            /* Assume C declarations for C++ */
  187. #endif  /* __cplusplus */
  188. #define LANGUAGE_CODE "EN"
  189. #ifdef _WIN16
  190. #define MAX_PATH 260
  191. #define PRODUCT_ID "play16"
  192. #define PLUS_PRODUCT_ID "plus16"
  193. #else
  194. #define PRODUCT_ID "play32"
  195. #define PLUS_PRODUCT_ID "plus32"
  196. #endif
  197. // $Private:
  198. #define DEFAULT_CONN_TIMEOUT 20     // in seconds
  199. #define MAX_TIMESTAMP_GAP 0x2fffffff
  200. #if !defined(MAX_UINT32)
  201. #define MAX_UINT32 0xffffffff
  202. #endif /* MAX_UINT32 */
  203. #if defined(_MACINTOSH)
  204. #define kLetInterruptsFinishBeforeQuittingGestalt 'RN$~'
  205. #endif
  206. // $EndPrivate.
  207. #define MAX_DISPLAY_NAME        256
  208. #define HX_INVALID_VALUE (ULONG32)0xffffffff
  209. #define HX_FREE(x) ((x) ? (free (x), (x) = 0) : 0)
  210. #if defined(HELIX_CONFIG_NULL_DELETE_UNSAFE)
  211. #define HX_DELETE(x) ((x) ? (delete (x), (x) = 0) : 0)
  212. #define HX_VECTOR_DELETE(x) ((x) ? (delete [] (x), (x) = 0) : 0)
  213. #else // defined(HELIX_CONFIG_NULL_DELETE_UNSAFE)
  214. #define HX_DELETE(x) (delete (x), (x) = 0)
  215. #define HX_VECTOR_DELETE(x) (delete [] (x), (x) = 0)
  216. #endif // defined(HELIX_CONFIG_NULL_DELETE_UNSAFE)
  217. #define RA_FILE_MAGIC_NUMBER    0x2E7261FDL /* RealAudio File Identifier */
  218. #define RM_FILE_MAGIC_NUMBER    0x2E524D46L /* RealMedia File Identifier */
  219. #define RIFF_FILE_MAGIC_NUMBER  0x52494646L /* RIFF (AVI etc.) File Identifier */
  220. #ifndef _VXWORKS
  221. typedef UINT8   UCHAR;                  /* unsigned 8 bit value */
  222. #endif
  223. typedef INT8    CHAR;                   /* signed 8 bit value */
  224. typedef UINT8   BYTE;
  225. typedef INT32   long32;
  226. typedef UINT32  u_long32;
  227. #ifndef _MACINTOSH
  228. typedef INT8    Int8;
  229. #endif
  230. typedef UINT8   u_Int8;
  231. typedef INT16   Int16;
  232. typedef UINT16  u_Int16;
  233. typedef INT32   Int32;
  234. typedef UINT32  u_Int32;
  235. /*
  236.  * XXXGo
  237.  * depricated...now that we need UFIXED and FIXED, this name is confusing...
  238.  * use the ones below.
  239.  */
  240. typedef ULONG32                 UFIXED32;           /* FIXED point value  */
  241. #define FLOAT_TO_FIXED(x)   ((UFIXED32) ((x) * (1L << 16) + 0.5))
  242. #define FIXED_TO_FLOAT(x)   ((float) ((((float)x)/ (float)(1L <<16))))
  243. /*
  244.  * float and fixed point value conversion
  245.  */
  246. #define HX_FLOAT_TO_UFIXED(x)   ((UFIXED32) ((x) * (1L << 16) + 0.5))
  247. #define HX_UFIXED_TO_FLOAT(x)   ((float) ((((float)x)/ (float)(1L <<16))))
  248. typedef LONG32                  FIXED32;          /* FIXED point value  */
  249. #define HX_FLOAT_TO_FIXED(x)    ((FIXED32) ((x) * (1L << 16) + 0.5))
  250. #define HX_FIXED_TO_FLOAT(x)    ((float) ((((float)x)/ (float)(1L <<16))))
  251. /*
  252.  * UFIXED32 is a 32 value where the upper 16 bits are the unsigned integer
  253.  * portion of value, and the lower 16 bits are the fractional part of the
  254.  * value
  255.  */
  256. typedef const char*             PCSTR;
  257. /*
  258.  *  FOURCC's are 32bit codes used in Tagged File formats like
  259.  *  the RealMedia file format.
  260.  */
  261. #ifndef FOURCC
  262. typedef UINT32                  FOURCC;
  263. #endif
  264. #ifndef HX_FOURCC
  265. #define HX_FOURCC( ch0, ch1, ch2, ch3 )                                    
  266.                 ( (UINT32)(UINT8)(ch0) | ( (UINT32)(UINT8)(ch1) << 8 ) |        
  267.                 ( (UINT32)(UINT8)(ch2) << 16 ) | ( (UINT32)(UINT8)(ch3) << 24 ) )
  268. #endif
  269. typedef UINT16 PrefKey;
  270. #ifdef __cplusplus
  271. }
  272. #endif  /* __cplusplus */
  273. #ifdef TRUE
  274. #undef TRUE
  275. #endif
  276. #ifdef FALSE
  277. #undef FALSE
  278. #endif
  279. #ifndef TRUE
  280. #define TRUE                1
  281. #endif
  282. #ifndef FALSE
  283. #define FALSE               0
  284. #endif
  285. #ifndef NULL
  286. #ifdef __cplusplus
  287. #define NULL                0
  288. #else
  289. #define NULL                ((void *)0)
  290. #endif
  291. #endif
  292. #ifndef _WINDOWS /* defined in windef.h on Windows platform */
  293. #ifndef HIWORD
  294. #define HIWORD(x) ((x) >> 16)
  295. #endif
  296. #ifndef LOWORD
  297. #define LOWORD(x) ((x) & 0xffff)
  298. #endif
  299. #endif
  300. /* Always use macro versions of these! */
  301. #ifndef max
  302. #define max(a, b)  (((a) > (b)) ? (a) : (b))
  303. #endif
  304. #ifndef min
  305. #define min(a, b)  (((a) < (b)) ? (a) : (b))
  306. #endif
  307. /* Should use capitalized macro versions of these, as the lowercase
  308. versions conflict with the STL spec */
  309. //get these from sys/param.h to avoid tons of warnings about redefining them:
  310. #ifdef _UNIX
  311. #include <sys/param.h>
  312. #endif
  313. #ifndef MAX
  314. #define MAX(a, b)  (((a) > (b)) ? (a) : (b))
  315. #endif
  316. #ifndef MIN
  317. #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
  318. #endif
  319. /*--------------------------------------------------------------------------
  320. |   ZeroInit - initializes a block of memory with zeros
  321. --------------------------------------------------------------------------*/
  322. #define ZeroInit(pb)    memset((void *)pb,0,sizeof(*(pb)))
  323. #ifndef __MACTYPES__
  324. typedef unsigned char   Byte;
  325. #endif
  326. /*
  327. /////////////////////////////////////////////////////////////////////////////
  328. // HXEXPORT needed for RA.H and RAGUI.H, should be able to be defined
  329. // and used in cross platform code...
  330. /////////////////////////////////////////////////////////////////////////////
  331. */
  332. #if defined(_WIN32) || defined(_WINDOWS)
  333. #ifdef _WIN32
  334. #define HXEXPORT            __declspec(dllexport) __stdcall
  335. #define HXEXPORT_PTR        __stdcall *
  336. #else /* Windows, but not 32 bit... */
  337. #define HXEXPORT            _pascal __export
  338. #define HXEXPORT_PTR        _pascal *
  339. #define WAVE_FORMAT_PCM     1
  340. #define LPCTSTR LPCSTR
  341. #endif
  342. #else /* Not Windows... */
  343. #define HXEXPORT
  344. #define HXEXPORT_PTR        *
  345. #endif
  346. #if defined(_WIN32) || defined(_WINDOWS) || defined (_MACINTOSH)|| defined (_UNIX)
  347. typedef void (*RANOTIFYPROC)( void* );
  348. #endif
  349. #if defined(EXPORT_CLASSES) && defined(_WINDOWS)
  350. #ifdef _WIN32
  351. #define HXEXPORT_CLASS __declspec(dllexport)
  352. #else
  353. #define HXEXPORT_CLASS __export
  354. #endif // _WIN32
  355. #else
  356. #define HXEXPORT_CLASS
  357. #endif // EXPORT_CLASSES
  358. /*
  359.  *  STDMETHODCALLTYPE
  360.  */
  361. #ifndef STDMETHODCALLTYPE
  362. #if defined(_WIN32) || defined(_MPPC_)
  363. #ifdef _MPPC_
  364. #define STDMETHODCALLTYPE       __cdecl
  365. #else
  366. #define STDMETHODCALLTYPE       __stdcall
  367. #endif
  368. #elif defined(_WIN16)
  369. // XXXTW I made the change below on 5/18/98.  The __export was causing
  370. //       conflicts with duplicate CHXBuffer methods in being linked into
  371. //       rpupgrd and rpdestpn.  Also, the warning was "export imported".
  372. //       This was fixed by removing the __export.  The __export is also
  373. //       causing the same problem in pndebug methods.
  374. //#define STDMETHODCALLTYPE       __export far _cdecl
  375. #define STDMETHODCALLTYPE       far _cdecl
  376. #else
  377. #define STDMETHODCALLTYPE
  378. #endif
  379. #endif
  380. /*
  381.  *  STDMETHODVCALLTYPE  (V is for variable number of arguments)
  382.  */
  383. #ifndef STDMETHODVCALLTYPE
  384. #if defined(_WINDOWS) || defined(_MPPC_)
  385. #define STDMETHODVCALLTYPE      __cdecl
  386. #else
  387. #define STDMETHODVCALLTYPE
  388. #endif
  389. #endif
  390. /*
  391.  *  STDAPICALLTYPE
  392.  */
  393. #ifndef STDAPICALLTYPE
  394. #if defined(_WIN32) || defined(_MPPC_)
  395. #define STDAPICALLTYPE          __stdcall
  396. #elif defined(_WIN16)
  397. #define STDAPICALLTYPE          __export FAR PASCAL
  398. #else
  399. #define STDAPICALLTYPE
  400. #endif
  401. #endif
  402. /*
  403.  *  STDAPIVCALLTYPE (V is for variable number of arguments)
  404.  */
  405. #ifndef STDAPIVCALLTYPE
  406. #if defined(_WINDOWS) || defined(_MPPC_)
  407. #define STDAPIVCALLTYPE         __cdecl
  408. #else
  409. #define STDAPIVCALLTYPE
  410. #endif
  411. #endif
  412. /*
  413. /////////////////////////////////////////////////////////////////////////////
  414. //
  415. //  Macro:
  416. //
  417. //      HX_GET_MAJOR_VERSION()
  418. //
  419. //  Purpose:
  420. //
  421. //      Returns the Major version portion of the encoded product version
  422. //      of the RealAudio application interface DLL previously returned from
  423. //      a call to RaGetProductVersion().
  424. //
  425. //  Parameters:
  426. //
  427. //      prodVer
  428. //      The encoded product version of the RealAudio application interface
  429. //      DLL previously returned from a call to RaGetProductVersion().
  430. //
  431. //  Return:
  432. //
  433. //      The major version number of the RealAudio application interface DLL
  434. //
  435. //
  436. */
  437. #define HX_GET_MAJOR_VERSION(prodVer)   ((prodVer >> 28) & 0xF)
  438. /*
  439. /////////////////////////////////////////////////////////////////////////////
  440. //
  441. //  Macro:
  442. //
  443. //      HX_GET_MINOR_VERSION()
  444. //
  445. //  Purpose:
  446. //
  447. //      Returns the minor version portion of the encoded product version
  448. //      of the RealAudio application interface DLL previously returned from
  449. //      a call to RaGetProductVersion().
  450. //
  451. //  Parameters:
  452. //
  453. //      prodVer
  454. //      The encoded product version of the RealAudio application interface
  455. //      DLL previously returned from a call to RaGetProductVersion().
  456. //
  457. //  Return:
  458. //
  459. //      The minor version number of the RealAudio application interface DLL
  460. //
  461. //
  462. */
  463. #define HX_GET_MINOR_VERSION(prodVer)   ((prodVer >> 20) & 0xFF)
  464. /*
  465. /////////////////////////////////////////////////////////////////////////////
  466. //
  467. //  Macro:
  468. //
  469. //      HX_GET_RELEASE_NUMBER()
  470. //
  471. //  Purpose:
  472. //
  473. //      Returns the release number portion of the encoded product version
  474. //      of the RealAudio application interface DLL previously returned from
  475. //      a call to RaGetProductVersion().
  476. //
  477. //  Parameters:
  478. //
  479. //      prodVer
  480. //      The encoded product version of the RealAudio application interface
  481. //      DLL previously returned from a call to RaGetProductVersion().
  482. //
  483. //  Return:
  484. //
  485. //      The release number of the RealAudio application interface DLL
  486. //
  487. //
  488. */
  489. #define HX_GET_RELEASE_NUMBER(prodVer)  ((prodVer >> 12) & 0xFF)
  490. /*
  491. /////////////////////////////////////////////////////////////////////////////
  492. //
  493. //  Macro:
  494. //
  495. //      HX_GET_BUILD_NUMBER()
  496. //
  497. //  Purpose:
  498. //
  499. //      Returns the build number portion of the encoded product version
  500. //      of the RealAudio application interface DLL previously returned from
  501. //      a call to RaGetProductVersion().
  502. //
  503. //  Parameters:
  504. //
  505. //      prodVer
  506. //      The encoded product version of the RealAudio application interface
  507. //      DLL previously returned from a call to RaGetProductVersion().
  508. //
  509. //  Return:
  510. //
  511. //      The build number of the RealAudio application interface DLL
  512. //
  513. //
  514. */
  515. #define HX_GET_BUILD_NUMBER(prodVer)    (prodVer & 0xFFF)
  516. /*
  517. /////////////////////////////////////////////////////////////////////////////
  518. //
  519. //  Macro:
  520. //
  521. //      HX_ENCODE_PROD_VERSION()
  522. //
  523. //  Purpose:
  524. //
  525. //      Encodes a major version, minor version, release number, and build
  526. //      number into a product version for testing against the product version
  527. //      of the RealAudio application interface DLL returned from a call to
  528. //      RaGetProductVersion().
  529. //
  530. //  Parameters:
  531. //
  532. //      major
  533. //      The major version number to encode.
  534. //
  535. //      mimor
  536. //      The minor version number to encode.
  537. //
  538. //      release
  539. //      The release number to encode.
  540. //
  541. //      build
  542. //      The build number to encode.
  543. //
  544. //  Return:
  545. //
  546. //      The encoded product version.
  547. //
  548. //  NOTES:
  549. //
  550. //      Macintosh DEVELOPERS especially, make sure when using the HX_ENCODE_PROD_VERSION
  551. //      that you are passing a ULONG32 or equivalent for each of the parameters.
  552. //      By default a number passed in as a constant is a short unless it requires more room,
  553. //      so designate the constant as a long by appending a L to the end of it.
  554. //      Example:
  555. //          WORKS:
  556. //              HX_ENCODE_VERSION(2L,1L,1L,0L);
  557. //
  558. //          DOES NOT WORK:
  559. //              HX_ENCODE_VERSION(2,1,1,0);
  560. //
  561. */
  562. #define HX_ENCODE_PROD_VERSION(major,minor,release,build)   
  563.             ((ULONG32)((ULONG32)major << 28) | ((ULONG32)minor << 20) | 
  564.             ((ULONG32)release << 12) | (ULONG32)build)
  565. #define HX_ENCODE_ADD_PRIVATE_FIELD(ulversion,ulprivate) 
  566. ((ULONG32)((ULONG32)(ulversion) & (UINT32)0xFFFFFF00) | (ULONG32)(ulprivate) )
  567. #define HX_EXTRACT_PRIVATE_FIELD(ulversion)(ulversion & (UINT32)0xFF)
  568. #define HX_EXTRACT_MAJOR_VERSION(ulversion) ((ulversion)>>28)
  569. #define HX_EXTRACT_MINOR_VERSION(ulversion) (((ulversion)>>20) & (UINT32)0xFF)
  570. #ifdef _AIX
  571.     typedef int                 tv_sec_t;
  572.     typedef int                 tv_usec_t;
  573. #elif (defined _HPUX)
  574.     typedef UINT32              tv_sec_t;
  575.     typedef INT32               tv_usec_t;
  576. #else
  577.     typedef INT32               tv_sec_t;
  578.     typedef INT32               tv_usec_t;
  579. #endif /* _AIX */
  580. #ifndef VOLATILE
  581. #define VOLATILE volatile
  582. #endif
  583. #ifdef __GNUC__
  584. #define PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME friend class SilenceGCCWarnings;
  585. #else
  586. #define PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  587. #endif
  588. typedef ULONG32 HXXRESOURCE;
  589. typedef ULONG32 HXXHANDLE;
  590. typedef ULONG32 HXXIMAGE;
  591. // Macro which indicates that a particular variable is unused. Use this to
  592. // avoid compiler warnings.
  593. #define UNUSED(x)
  594. /*
  595.  * For VC++ 6.0 and higher we need to include this substitute header file
  596.  * in place of the standard header file basetsd.h, since this standard
  597.  * header file conflicts with our definitions.
  598.  */
  599. #if defined(_MSC_VER) && (_MSC_VER > 1100) && !defined(_SYMBIAN)
  600. #include "hxbastsd.h"
  601. #ifdef WIN32_PLATFORM_PSPC
  602. #define _TYPES_H_
  603. #endif
  604. #endif
  605. #ifdef _VXWORKS
  606. /* throw in some defines for VXWORKS */
  607. #define MAXPATHLEN 255
  608. #endif
  609. #ifdef _MACINTOSH
  610. // xxxbobclark with CWPro 7, there is a code generation bug in the long long
  611. // casting code. It can be avoided by first casting to an unsigned long long.
  612. // This is supposedly fixed in the upcoming (as of this writing) CWPro 8, but
  613. // for now we're setting up the casting using a macro to change it easily.
  614. #define CAST_TO_INT64 (INT64)(UINT64)
  615. #else
  616. #define CAST_TO_INT64 (INT64)
  617. #endif
  618. #if defined _LONG_IS_64 && (defined _OSF1 || defined _SOLARIS || defined _HPUX)
  619. typedef unsigned long PTR_INT;
  620. #else
  621. typedef unsigned int PTR_INT;
  622. #endif
  623. /*
  624. /////////////////////////////////////////////////////////////////////////////
  625. //
  626. //  Macro:
  627. //
  628. //      DEFINE_CONSTANT_STRING()
  629. //
  630. //  Purpose:
  631. //
  632. //      declare a constant string as "const char *" or "extern const char *" depending on whether or
  633. // not INITGUID is defined. This allows constant strings to be safely added
  634. // to a header file without risk of multiply defined symbols if that header is included in a DLL
  635. // and in a library that the DLL links to. While INITGUID doesn't have anything to do with constant
  636. // strings, it is a great constant to switch off of because it is already used to denote when a GUID
  637. // should be defined as external.
  638. //
  639. //  Parameters:
  640. //
  641. //      name
  642. //      The name of the variable to which the constant string will be assigned
  643. //
  644. //      string
  645. //      the constant string (in quotes).
  646. //
  647. //
  648. //
  649. //  NOTES:
  650. //      There is currently no way to use DEFINE_CONSTANT_STRING() to declare an "extern const char*" when
  651. // INITGUID is defined. This functionality could be added, but until there is a use case, it would just
  652. // make things more complicated.
  653. //
  654. */
  655. #if defined (INITGUID)
  656. #define DEFINE_CONSTANT_STRING(name, string) 
  657.     const char *name = string;
  658. #else
  659. #define DEFINE_CONSTANT_STRING(name, string) 
  660.     extern const char* name;
  661. #endif
  662. #endif /* _HXTYPES_H_ */