#ifndef __COMMON_SERVICES__
#define __COMMON_SERVICES__
#ifdef __cplusplus
extern "C" {
#endif
#if 0
#pragma mark == Target ==
#endif
#if( !defined( TARGET_OS_MAC ) )
#if( ( macintosh || __MACH__ ) && !KERNEL )
#else
#define TARGET_OS_MAC 0
#endif
#endif
#if( !defined( TARGET_API_MAC_OSX_KERNEL ) )
#if( __MACH__ && KERNEL )
#define TARGET_API_MAC_OSX_KERNEL 1
#else
#define TARGET_API_MAC_OSX_KERNEL 0
#endif
#endif
#if( !defined( TARGET_OS_LINUX ) )
#if( defined( __linux__ ) )
#define TARGET_OS_LINUX 1
#else
#define TARGET_OS_LINUX 0
#endif
#endif
#if( !defined( TARGET_OS_SOLARIS ) )
#if( defined(solaris) || (defined(__SVR4) && defined(sun)) )
#define TARGET_OS_SOLARIS 1
#else
#define TARGET_OS_SOLARIS 0
#endif
#endif
#if( !defined( TARGET_OS_PALM ) )
#if( defined( __PALMOS_TRAPS__ ) || defined( __PALMOS_ARMLET__ ) )
#define TARGET_OS_PALM 1
#else
#define TARGET_OS_PALM 0
#endif
#endif
#if( !defined( TARGET_OS_VXWORKS ) )
#if( !macintosh && !__MACH__ && !defined( __linux__ ) && !defined ( __SVR4 ) && !defined ( __sun ) && !defined( __PALMOS_TRAPS__ ) && !defined( __PALMOS_ARMLET__ ) && !defined( _WIN32 ) )
#define TARGET_OS_VXWORKS 1
#else
#define TARGET_OS_VXWORKS 0
#endif
#endif
#if( !defined( TARGET_OS_WIN32 ) )
#if( macintosh || __MACH__ )
#else
#if( defined( _WIN32 ) )
#define TARGET_OS_WIN32 1
#else
#define TARGET_OS_WIN32 0
#endif
#endif
#endif
#if( !defined( TARGET_OS_WINDOWS_CE ) )
#if( defined( _WIN32_WCE ) )
#define TARGET_OS_WINDOWS_CE 1
#else
#define TARGET_OS_WINDOWS_CE 0
#endif
#endif
#if 0
#pragma mark == Includes ==
#endif
#if( !KERNEL )
#if defined(WIN32) && !defined(_WSPIAPI_COUNTOF)
#define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#endif
#include <stddef.h>
#endif
#if( ( macintosh || __MACH__ ) && !KERNEL )
#if( defined( __MWERKS__ ) )
#if( __option( c9x ) )
#include <stdbool.h>
#endif
#else
#include <stdbool.h>
#endif
#include <stdint.h>
#if( __MACH__ )
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <unistd.h>
#else
#include <ConditionalMacros.h>
#include <MacTypes.h>
#endif
#elif( KERNEL )
#include <stdint.h>
#include <libkern/OSTypes.h>
#include <sys/types.h>
#elif( TARGET_OS_LINUX )
#include <stdint.h>
#include <arpa/inet.h>
#elif( TARGET_OS_SOLARIS )
#include <stdint.h>
#include <arpa/inet.h>
#include <arpa/nameser.h>
#if ( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) )
#define TARGET_RT_LITTLE_ENDIAN 1
#endif
#if ( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) )
#define TARGET_RT_BIG_ENDIAN 1
#endif
#elif( TARGET_OS_PALM )
#elif( TARGET_OS_VXWORKS )
#include "vxWorks.h"
#elif( TARGET_OS_WIN32 )
#if( !defined( WIN32_WINDOWS ) )
#define WIN32_WINDOWS 0x0401
#endif
#if( !defined( _WIN32_WINDOWS ) )
#define _WIN32_WINDOWS 0x0401
#endif
#if( !defined( WIN32_LEAN_AND_MEAN ) )
#define WIN32_LEAN_AND_MEAN #endif
#if( defined( __MWERKS__ ) )
#if( __option( c9x ) )
#include <stdbool.h>
#endif
#include <stdint.h>
#elif( defined( _MSC_VER ) )
#pragma warning( disable:4127 ) #pragma warning( disable:4706 )
#endif
#include <windows.h>
#include <winsock2.h>
#include <Ws2tcpip.h>
#if( defined( _MSC_VER ) )
#pragma warning( default:4706 )
#endif
#else
#error unknown OS - update this file to support your OS
#endif
#if( !defined( TARGET_BUILD_MAIN ) )
#if( !TARGET_OS_VXWORKS )
#define TARGET_BUILD_MAIN 1
#endif
#endif
#if( __GNUC__ || !TARGET_OS_VXWORKS )
#define TARGET_LANGUAGE_C_LIKE 1
#else
#define TARGET_LANGUAGE_C_LIKE 0
#endif
#if 0
#pragma mark == CPU ==
#endif
#if( !defined( TARGET_CPU_PPC ) )
#if( defined( __ppc__ ) || defined( __PPC__ ) || defined( powerpc ) || defined( ppc ) || defined( _M_MPPC ) )
#define TARGET_CPU_PPC 1
#else
#define TARGET_CPU_PPC 0
#endif
#endif
#if( !defined( TARGET_CPU_X86 ) )
#if( __INTEL__ || defined( __i386__ ) || defined( i386 ) || defined( intel ) || defined( _M_IX86 ) )
#define TARGET_CPU_X86 1
#else
#define TARGET_CPU_X86 0
#endif
#endif
#if( !defined( TARGET_CPU_MIPS ) )
#if( __MIPS__ || defined( MIPS32 ) || defined( R3000 ) || defined( R4000 ) || defined( R4650 ) || defined( _M_MRX000 ) )
#define TARGET_CPU_MIPS 1
#else
#define TARGET_CPU_MIPS 0
#endif
#endif
#if( !defined( TARGET_CPU_PPC ) && !defined( TARGET_CPU_X86 ) && !defined( TARGET_CPU_MIPS ) )
#error unknown CPU - update this file to support your CPU
#endif
#if 0
#pragma mark == Byte Order ==
#endif
#if( !defined( TARGET_RT_LITTLE_ENDIAN ) )
#if( MIPSEL || IL_LITTLE_ENDIAN || defined( __LITTLE_ENDIAN__ ) || \
( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) ) || \
( defined( _BYTE_ORDER ) && defined( _LITTLE_ENDIAN ) && ( _BYTE_ORDER == _LITTLE_ENDIAN ) ) || \
( defined( __BYTE_ORDER ) && defined( __LITTLE_ENDIAN ) && ( __BYTE_ORDER == __LITTLE_ENDIAN ) ) || \
TARGET_CPU_X86 || ( defined( TARGET_RT_BIG_ENDIAN ) && !TARGET_RT_BIG_ENDIAN ) )
#define TARGET_RT_LITTLE_ENDIAN 1
#else
#define TARGET_RT_LITTLE_ENDIAN 0
#endif
#endif
#if( !defined( TARGET_RT_BIG_ENDIAN ) )
#if( MIPSEB || IL_BIG_ENDIAN || defined( __BIG_ENDIAN__ ) || \
( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) ) || \
( defined( _BYTE_ORDER ) && defined( _BIG_ENDIAN ) && ( _BYTE_ORDER == _BIG_ENDIAN ) ) || \
( defined( __BYTE_ORDER ) && defined( __BIG_ENDIAN ) && ( __BYTE_ORDER == __BIG_ENDIAN ) ) || \
( defined( TARGET_RT_LITTLE_ENDIAN ) && !TARGET_RT_LITTLE_ENDIAN ) )
#define TARGET_RT_BIG_ENDIAN 1
#else
#define TARGET_RT_BIG_ENDIAN 0
#endif
#endif
#if( defined( TARGET_RT_LITTLE_ENDIAN ) && !defined( TARGET_RT_BIG_ENDIAN ) )
#if( TARGET_RT_LITTLE_ENDIAN )
#define TARGET_RT_BIG_ENDIAN 0
#else
#define TARGET_RT_BIG_ENDIAN 1
#endif
#endif
#if( defined( TARGET_RT_BIG_ENDIAN ) && !defined( TARGET_RT_LITTLE_ENDIAN ) )
#if( TARGET_RT_BIG_ENDIAN )
#define TARGET_RT_LITTLE_ENDIAN 0
#else
#define TARGET_RT_LITTLE_ENDIAN 1
#endif
#endif
#if( !defined( TARGET_RT_LITTLE_ENDIAN ) || !defined( TARGET_RT_BIG_ENDIAN ) )
#error unknown byte order - update this file to support your byte order
#endif
#if( !defined( TARGET_RT_BYTE_ORDER_BIG_ENDIAN ) )
#define TARGET_RT_BYTE_ORDER_BIG_ENDIAN 1234
#endif
#if( !defined( TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN ) )
#define TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN 4321
#endif
#if( !defined( TARGET_RT_BYTE_ORDER ) )
#if( TARGET_RT_LITTLE_ENDIAN )
#define TARGET_RT_BYTE_ORDER TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN
#else
#define TARGET_RT_BYTE_ORDER TARGET_RT_BYTE_ORDER_BIG_ENDIAN
#endif
#endif
#if 0
#pragma mark == Constants ==
#endif
#if( !TARGET_OS_MAC )
#define CR '\r'
#endif
#define LF '\n'
#define CRSTR "\r"
#define LFSTR "\n"
#define CRLF "\r\n"
#define CRCR "\r\r"
#if 0
#pragma mark == Compatibility ==
#endif
#if( TARGET_OS_WIN32 )
#define close_compat( X ) closesocket( X )
#define errno_compat() (int) GetLastError()
#define set_errno_compat( X ) SetLastError( X )
#define EWOULDBLOCK_compat WSAEWOULDBLOCK
#define ETIMEDOUT_compat WSAETIMEDOUT
#define ENOTCONN_compat WSAENOTCONN
#define IsValidSocket( X ) ( ( X ) != INVALID_SOCKET )
#define kInvalidSocketRef INVALID_SOCKET
#if( TARGET_LANGUAGE_C_LIKE )
typedef SOCKET SocketRef;
#endif
#else
#define close_compat( X ) close( X )
#define errno_compat() errno
#define set_errno_compat( X ) do { errno = ( X ); } while( 0 )
#define EWOULDBLOCK_compat EWOULDBLOCK
#define ETIMEDOUT_compat ETIMEDOUT
#define ENOTCONN_compat ENOTCONN
#define IsValidSocket( X ) ( ( X ) >= 0 )
#define kInvalidSocketRef -1
#if( TARGET_LANGUAGE_C_LIKE )
typedef int SocketRef;
#endif
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( ( TARGET_OS_MAC && !defined( SO_NOADDRERR ) ) || ( TARGET_OS_WIN32 && !defined( EAI_AGAIN ) ) || TARGET_OS_VXWORKS )
typedef int socklen_t;
#endif
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( !defined(_SSIZE_T) && ( TARGET_OS_WIN32 || !defined( _BSD_SSIZE_T_DEFINED_ ) ) && !TARGET_OS_LINUX && !TARGET_OS_VXWORKS && !TARGET_OS_MAC)
typedef int ssize_t;
#endif
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( !defined( AF_INET6 ) )
#define sockaddr_storage sockaddr_in
#define ss_family sin_family
#endif
#endif
#if( defined( AF_INET6 ) )
#define SOCKADDR_IS_IP_LOOPBACK( SA ) \
( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \
? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) ) \
: ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET6 ) \
? IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) \
: 0
#else
#define SOCKADDR_IS_IP_LOOPBACK( SA ) \
( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \
? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) ) \
: 0
#endif
#if( defined( AF_INET6 ) )
#define SOCKADDR_IS_IP_LINK_LOCAL( SA ) \
( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \
? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && \
( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) ) \
: IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) )
#else
#define SOCKADDR_IS_IP_LINK_LOCAL( SA ) \
( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \
? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && \
( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) ) \
: 0 )
#endif
#if( TARGET_OS_WINDOWS_CE )
#define _beginthreadex_compat( SECURITY_PTR, STACK_SIZE, START_ADDRESS, ARG_LIST, FLAGS, THREAD_ID_PTR ) \
(uintptr_t) CreateThread( SECURITY_PTR, STACK_SIZE, (LPTHREAD_START_ROUTINE) START_ADDRESS, ARG_LIST, FLAGS, \
(LPDWORD) THREAD_ID_PTR )
#define _endthreadex_compat( RESULT ) ExitThread( (DWORD) RESULT )
#elif( TARGET_OS_WIN32 )
#define _beginthreadex_compat _beginthreadex
#define _endthreadex_compat _endthreadex
#endif
#if( defined( _MSC_VER ) )
#define inline_compat __inline
#else
#define inline_compat inline
#endif
#if( !defined( CALLBACK_COMPAT ) )
#if( TARGET_OS_WIN32 || TARGET_OS_WINDOWS_CE )
#define CALLBACK_COMPAT CALLBACK
#else
#define CALLBACK_COMPAT
#endif
#endif
#if 0
#pragma mark == Macros ==
#endif
#define kSizeCString ( (size_t) -1 )
#define sizeof_array( X ) ( sizeof( X ) / sizeof( X[ 0 ] ) )
#define sizeof_element( X ) sizeof( X[ 0 ] )
#define sizeof_string( X ) ( sizeof( ( X ) ) - 1 )
#define sizeof_field( TYPE, FIELD ) sizeof( ( ( (TYPE *) 0 )->FIELD ) )
#define RoundUp( X, Y ) ( ( X ) + ( ( Y ) - ( ( X ) % ( Y ) ) ) )
#define IsAligned( X, Y ) ( ( ( X ) & ( ( Y ) - 1 ) ) == 0 )
#define IsFieldAligned( X, TYPE, FIELD, Y ) IsAligned( ( (uintptr_t)( X ) ) + offsetof( TYPE, FIELD ), ( Y ) )
#define AlignDown( X, Y ) ( ( X ) & ~( ( Y ) - 1 ) )
#define AlignUp( X, Y ) ( ( ( X ) + ( ( Y ) - 1 ) ) & ~( ( Y ) - 1 ) )
#if( !defined( Min ) )
#define Min( X, Y ) ( ( ( X ) < ( Y ) ) ? ( X ) : ( Y ) )
#endif
#if( !defined( Max ) )
#define Max( X, Y ) ( ( ( X ) > ( Y ) ) ? ( X ) : ( Y ) )
#endif
#define InsertBits( X, BITS, MASK, SHIFT ) ( ( ( X ) & ~( MASK ) ) | ( ( ( BITS ) << ( SHIFT ) ) & ( MASK ) ) )
#define ExtractBits( X, MASK, SHIFT ) ( ( ( X ) >> ( SHIFT ) ) & ( ( MASK ) >> ( SHIFT ) ) )
#define Stringify( X ) # X
#define StringifyExpansion( X ) Stringify( X )
#if 0
#pragma mark == Types ==
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( !defined( INT8_MIN ) )
#define INT8_MIN SCHAR_MIN
#if( defined( _MSC_VER ) )
typedef INT8 int8_t;
typedef UINT8 uint8_t;
typedef INT16 int16_t;
typedef UINT16 uint16_t;
typedef INT32 int32_t;
typedef UINT32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#elif( TARGET_OS_VXWORKS && ( TORNADO_VERSION < 220 ) )
typedef long long int64_t;
typedef unsigned long long uint64_t;
#endif
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;
typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
#if( !defined( _MSC_VER ) || TARGET_OS_WINDOWS_CE )
typedef long int intptr_t;
typedef unsigned long int uintptr_t;
#endif
#endif
#if( !defined( INT8_C ) )
#define INT8_C( value ) value
#endif
#if( !defined( INT16_C ) )
#define INT16_C( value ) value
#endif
#if( !defined( INT32_C ) )
#define INT32_C( value ) value ## L
#endif
#if( !defined( INT64_C ) )
#if( defined( _MSC_VER ) )
#define INT64_C( value ) value ## i64
#else
#define INT64_C( value ) value ## LL
#endif
#endif
#if( !defined( UINT8_C ) )
#define UINT8_C( value ) value ## U
#endif
#if( !defined( UINT16_C ) )
#define UINT16_C( value ) value ## U
#endif
#if( !defined( UINT32_C ) )
#define UINT32_C( value ) value ## UL
#endif
#if( !defined( UINT64_C ) )
#if( defined( _MSC_VER ) )
#define UINT64_C( value ) value ## UI64
#else
#define UINT64_C( value ) value ## ULL
#endif
#endif
#if 0
#pragma mark == bool ==
#endif
#if( defined( __MWERKS__ ) )
#if( !__bool_true_false_are_defined && ( !defined( __cplusplus ) || !__option( bool ) ) )
#define COMMON_SERVICES_NEEDS_BOOL 1
#else
#define COMMON_SERVICES_NEEDS_BOOL 0
#endif
#if( __bool_true_false_are_defined && !defined( __cplusplus ) && !__option( c9x ) )
#define _Bool int
#endif
#if( __bool_true_false_are_defined && defined( __cplusplus ) && !__option( bool ) )
#define true 1
#define false 0
#endif
#else
#define COMMON_SERVICES_NEEDS_BOOL ( !defined( __cplusplus ) && !__bool_true_false_are_defined )
#endif
#if( COMMON_SERVICES_NEEDS_BOOL )
typedef int bool;
#define bool bool
#if( !defined( __MACTYPES__ ) && !defined( true ) && !defined( false ) )
#define true 1
#define false 0
#endif
#define __bool_true_false_are_defined 1
#endif
#if( TARGET_API_MAC_OSX_KERNEL )
#define TYPE_BOOL 1
#endif
#if( TARGET_LANGUAGE_C_LIKE )
typedef char CStr255[ 256 ];
#endif
#endif // TARGET_LANGUAGE_C_LIKE
#if( !defined( TYPE_LONGLONG_NATIVE ) )
#if( !TARGET_OS_VXWORKS )
#define TYPE_LONGLONG_NATIVE 1
#else
#define TYPE_LONGLONG_NATIVE 0
#endif
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( TARGET_OS_WIN32 )
typedef __int64 long_long_compat;
typedef unsigned __int64 unsigned_long_long_compat;
#else
typedef signed long long long_long_compat;
typedef unsigned long long unsigned_long_long_compat;
#endif
#endif
#if 0
#pragma mark == Errors ==
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( !TARGET_OS_MAC && !TARGET_API_MAC_OSX_KERNEL )
typedef int32_t OSStatus;
#endif
#endif
#define kNoErr 0
#define kInProgressErr 1
#define kGenericErrorBase -6700 // Starting error code for all generic errors.
#define kUnknownErr -6700
#define kOptionErr -6701
#define kSelectorErr -6702
#define kExecutionStateErr -6703
#define kPathErr -6704
#define kParamErr -6705
#define kParamCountErr -6706
#define kCommandErr -6707
#define kIDErr -6708
#define kStateErr -6709
#define kRangeErr -6710
#define kRequestErr -6711
#define kResponseErr -6712
#define kChecksumErr -6713
#define kNotHandledErr -6714
#define kVersionErr -6715
#define kSignatureErr -6716
#define kFormatErr -6717
#define kNotInitializedErr -6718
#define kAlreadyInitializedErr -6719
#define kNotInUseErr -6720
#define kInUseErr -6721
#define kTimeoutErr -6722
#define kCanceledErr -6723
#define kAlreadyCanceledErr -6724
#define kCannotCancelErr -6725
#define kDeletedErr -6726
#define kNotFoundErr -6727
#define kNoMemoryErr -6728
#define kNoResourcesErr -6729
#define kDuplicateErr -6730
#define kImmutableErr -6731
#define kUnsupportedDataErr -6732
#define kIntegrityErr -6733
#define kIncompatibleErr -6734
#define kUnsupportedErr -6735
#define kUnexpectedErr -6736
#define kValueErr -6737
#define kNotReadableErr -6738
#define kNotWritableErr -6739
#define kBadReferenceErr -6740
#define kFlagErr -6741
#define kMalformedErr -6742
#define kSizeErr -6743
#define kNameErr -6744
#define kNotReadyErr -6745
#define kReadErr -6746
#define kWriteErr -6747
#define kMismatchErr -6748
#define kDateErr -6749
#define kUnderrunErr -6750
#define kOverrunErr -6751
#define kEndingErr -6752
#define kConnectionErr -6753
#define kAuthenticationErr -6754
#define kOpenErr -6755
#define kTypeErr -6756
#define kSkipErr -6757
#define kNoAckErr -6758
#define kCollisionErr -6759
#define kBackoffErr -6760
#define kNoAddressAckErr -6761
#define kBusyErr -6762
#define kNoSpaceErr -6763
#define kGenericErrorEnd -6779 // Last generic error code (inclusive)
#if 0
#pragma mark == Mac Compatibility ==
#endif
#if( TARGET_LANGUAGE_C_LIKE )
#if( !TARGET_OS_MAC )
typedef int32_t Duration;
#endif
#endif
#define kDurationImmediate 0L
#define kDurationMicrosecond -1L
#define kDurationMillisecond 1L
#define kDurationSecond ( 1000L * kDurationMillisecond )
#define kDurationMinute ( 60L * kDurationSecond )
#define kDurationHour ( 60L * kDurationMinute )
#define kDurationDay ( 24L * kDurationHour )
#define kDurationForever 0x7FFFFFFFL
#define kNanosecondsPerMicrosecond 1000
#define kNanosecondsPerMillisecond 1000000
#define kNanosecondsPerSecond 1000000000
#define kMicrosecondsPerSecond 1000000
#define kMicrosecondsPerMillisecond 1000
#define kMillisecondsPerSecond 1000
#define kSecondsPerMinute 60
#define kSecondsPerHour ( 60 * 60 ) // 3600
#define kSecondsPerDay ( 60 * 60 * 24 ) // 86400
#define kSecondsPerWeek ( 60 * 60 * 24 * 7 ) // 604800
#define kMinutesPerHour 60
#define kMinutesPerDay ( 60 * 24 ) // 1440
#define kHoursPerDay 24
#define kDaysPerWeek 7
#define kWeeksPerYear 52
#define kMonthsPerYear 12
#define kVersionStageDevelopment 0x20
#define kVersionStageAlpha 0x40
#define kVersionStageBeta 0x60
#define kVersionStageFinal 0x80
#define NumVersionBuild( MAJOR, MINOR, BUGFIX, STAGE, REV ) \
( ( ( ( MAJOR ) & 0xFF ) << 24 ) | \
( ( ( MINOR ) & 0x0F ) << 20 ) | \
( ( ( BUGFIX ) & 0x0F ) << 16 ) | \
( ( ( STAGE ) & 0xFF ) << 8 ) | \
( ( ( REV ) & 0xFF ) ) )
#define NumVersionExtractMajor( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 24 ) & 0xFF ) )
#define NumVersionExtractMinorAndBugFix( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0xFF ) )
#define NumVersionExtractMinor( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 20 ) & 0x0F ) )
#define NumVersionExtractBugFix( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0x0F ) )
#define NumVersionExtractStage( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 8 ) & 0xFF ) )
#define NumVersionExtractRevision( VERSION ) ( (uint8_t)( ( VERSION ) & 0xFF ) )
#if( TARGET_LANGUAGE_C_LIKE )
int NumVersionCompare( uint32_t inLeft, uint32_t inRight );
#endif
#if 0
#pragma mark == Binary Constants ==
#endif
#define binary_4( a ) binary_4_hex_wrap( hex_digit4( a ) )
#define binary_4_hex_wrap( a ) binary_4_hex( a )
#define binary_4_hex( a ) ( 0x ## a )
#define binary_8( a ) binary_8_hex_wrap( hex_digit8( a ) )
#define binary_8_hex_wrap( a ) binary_8_hex( a )
#define binary_8_hex( a ) ( 0x ## a )
#define binary_16( a, b ) binary_16_hex_wrap( hex_digit8( a ), hex_digit8( b ) )
#define binary_16_hex_wrap( a, b ) binary_16_hex( a, b )
#define binary_16_hex( a, b ) ( 0x ## a ## b )
#define binary_32( a, b, c, d ) binary_32_hex_wrap( hex_digit8( a ), hex_digit8( b ), hex_digit8( c ), hex_digit8( d ) )
#define binary_32_hex_wrap( a, b, c, d ) binary_32_hex( a, b, c, d )
#define binary_32_hex( a, b, c, d ) ( 0x ## a ## b ## c ## d )
#define hex_digit8( a ) HEX_DIGIT_ ## a
#define hex_digit4( a ) HEX_DIGIT_ ## 0000 ## a
#define HEX_DIGIT_00000000 00
#define HEX_DIGIT_00000001 01
#define HEX_DIGIT_00000010 02
#define HEX_DIGIT_00000011 03
#define HEX_DIGIT_00000100 04
#define HEX_DIGIT_00000101 05
#define HEX_DIGIT_00000110 06
#define HEX_DIGIT_00000111 07
#define HEX_DIGIT_00001000 08
#define HEX_DIGIT_00001001 09
#define HEX_DIGIT_00001010 0A
#define HEX_DIGIT_00001011 0B
#define HEX_DIGIT_00001100 0C
#define HEX_DIGIT_00001101 0D
#define HEX_DIGIT_00001110 0E
#define HEX_DIGIT_00001111 0F
#define HEX_DIGIT_00010000 10
#define HEX_DIGIT_00010001 11
#define HEX_DIGIT_00010010 12
#define HEX_DIGIT_00010011 13
#define HEX_DIGIT_00010100 14
#define HEX_DIGIT_00010101 15
#define HEX_DIGIT_00010110 16
#define HEX_DIGIT_00010111 17
#define HEX_DIGIT_00011000 18
#define HEX_DIGIT_00011001 19
#define HEX_DIGIT_00011010 1A
#define HEX_DIGIT_00011011 1B
#define HEX_DIGIT_00011100 1C
#define HEX_DIGIT_00011101 1D
#define HEX_DIGIT_00011110 1E
#define HEX_DIGIT_00011111 1F
#define HEX_DIGIT_00100000 20
#define HEX_DIGIT_00100001 21
#define HEX_DIGIT_00100010 22
#define HEX_DIGIT_00100011 23
#define HEX_DIGIT_00100100 24
#define HEX_DIGIT_00100101 25
#define HEX_DIGIT_00100110 26
#define HEX_DIGIT_00100111 27
#define HEX_DIGIT_00101000 28
#define HEX_DIGIT_00101001 29
#define HEX_DIGIT_00101010 2A
#define HEX_DIGIT_00101011 2B
#define HEX_DIGIT_00101100 2C
#define HEX_DIGIT_00101101 2D
#define HEX_DIGIT_00101110 2E
#define HEX_DIGIT_00101111 2F
#define HEX_DIGIT_00110000 30
#define HEX_DIGIT_00110001 31
#define HEX_DIGIT_00110010 32
#define HEX_DIGIT_00110011 33
#define HEX_DIGIT_00110100 34
#define HEX_DIGIT_00110101 35
#define HEX_DIGIT_00110110 36
#define HEX_DIGIT_00110111 37
#define HEX_DIGIT_00111000 38
#define HEX_DIGIT_00111001 39
#define HEX_DIGIT_00111010 3A
#define HEX_DIGIT_00111011 3B
#define HEX_DIGIT_00111100 3C
#define HEX_DIGIT_00111101 3D
#define HEX_DIGIT_00111110 3E
#define HEX_DIGIT_00111111 3F
#define HEX_DIGIT_01000000 40
#define HEX_DIGIT_01000001 41
#define HEX_DIGIT_01000010 42
#define HEX_DIGIT_01000011 43
#define HEX_DIGIT_01000100 44
#define HEX_DIGIT_01000101 45
#define HEX_DIGIT_01000110 46
#define HEX_DIGIT_01000111 47
#define HEX_DIGIT_01001000 48
#define HEX_DIGIT_01001001 49
#define HEX_DIGIT_01001010 4A
#define HEX_DIGIT_01001011 4B
#define HEX_DIGIT_01001100 4C
#define HEX_DIGIT_01001101 4D
#define HEX_DIGIT_01001110 4E
#define HEX_DIGIT_01001111 4F
#define HEX_DIGIT_01010000 50
#define HEX_DIGIT_01010001 51
#define HEX_DIGIT_01010010 52
#define HEX_DIGIT_01010011 53
#define HEX_DIGIT_01010100 54
#define HEX_DIGIT_01010101 55
#define HEX_DIGIT_01010110 56
#define HEX_DIGIT_01010111 57
#define HEX_DIGIT_01011000 58
#define HEX_DIGIT_01011001 59
#define HEX_DIGIT_01011010 5A
#define HEX_DIGIT_01011011 5B
#define HEX_DIGIT_01011100 5C
#define HEX_DIGIT_01011101 5D
#define HEX_DIGIT_01011110 5E
#define HEX_DIGIT_01011111 5F
#define HEX_DIGIT_01100000 60
#define HEX_DIGIT_01100001 61
#define HEX_DIGIT_01100010 62
#define HEX_DIGIT_01100011 63
#define HEX_DIGIT_01100100 64
#define HEX_DIGIT_01100101 65
#define HEX_DIGIT_01100110 66
#define HEX_DIGIT_01100111 67
#define HEX_DIGIT_01101000 68
#define HEX_DIGIT_01101001 69
#define HEX_DIGIT_01101010 6A
#define HEX_DIGIT_01101011 6B
#define HEX_DIGIT_01101100 6C
#define HEX_DIGIT_01101101 6D
#define HEX_DIGIT_01101110 6E
#define HEX_DIGIT_01101111 6F
#define HEX_DIGIT_01110000 70
#define HEX_DIGIT_01110001 71
#define HEX_DIGIT_01110010 72
#define HEX_DIGIT_01110011 73
#define HEX_DIGIT_01110100 74
#define HEX_DIGIT_01110101 75
#define HEX_DIGIT_01110110 76
#define HEX_DIGIT_01110111 77
#define HEX_DIGIT_01111000 78
#define HEX_DIGIT_01111001 79
#define HEX_DIGIT_01111010 7A
#define HEX_DIGIT_01111011 7B
#define HEX_DIGIT_01111100 7C
#define HEX_DIGIT_01111101 7D
#define HEX_DIGIT_01111110 7E
#define HEX_DIGIT_01111111 7F
#define HEX_DIGIT_10000000 80
#define HEX_DIGIT_10000001 81
#define HEX_DIGIT_10000010 82
#define HEX_DIGIT_10000011 83
#define HEX_DIGIT_10000100 84
#define HEX_DIGIT_10000101 85
#define HEX_DIGIT_10000110 86
#define HEX_DIGIT_10000111 87
#define HEX_DIGIT_10001000 88
#define HEX_DIGIT_10001001 89
#define HEX_DIGIT_10001010 8A
#define HEX_DIGIT_10001011 8B
#define HEX_DIGIT_10001100 8C
#define HEX_DIGIT_10001101 8D
#define HEX_DIGIT_10001110 8E
#define HEX_DIGIT_10001111 8F
#define HEX_DIGIT_10010000 90
#define HEX_DIGIT_10010001 91
#define HEX_DIGIT_10010010 92
#define HEX_DIGIT_10010011 93
#define HEX_DIGIT_10010100 94
#define HEX_DIGIT_10010101 95
#define HEX_DIGIT_10010110 96
#define HEX_DIGIT_10010111 97
#define HEX_DIGIT_10011000 98
#define HEX_DIGIT_10011001 99
#define HEX_DIGIT_10011010 9A
#define HEX_DIGIT_10011011 9B
#define HEX_DIGIT_10011100 9C
#define HEX_DIGIT_10011101 9D
#define HEX_DIGIT_10011110 9E
#define HEX_DIGIT_10011111 9F
#define HEX_DIGIT_10100000 A0
#define HEX_DIGIT_10100001 A1
#define HEX_DIGIT_10100010 A2
#define HEX_DIGIT_10100011 A3
#define HEX_DIGIT_10100100 A4
#define HEX_DIGIT_10100101 A5
#define HEX_DIGIT_10100110 A6
#define HEX_DIGIT_10100111 A7
#define HEX_DIGIT_10101000 A8
#define HEX_DIGIT_10101001 A9
#define HEX_DIGIT_10101010 AA
#define HEX_DIGIT_10101011 AB
#define HEX_DIGIT_10101100 AC
#define HEX_DIGIT_10101101 AD
#define HEX_DIGIT_10101110 AE
#define HEX_DIGIT_10101111 AF
#define HEX_DIGIT_10110000 B0
#define HEX_DIGIT_10110001 B1
#define HEX_DIGIT_10110010 B2
#define HEX_DIGIT_10110011 B3
#define HEX_DIGIT_10110100 B4
#define HEX_DIGIT_10110101 B5
#define HEX_DIGIT_10110110 B6
#define HEX_DIGIT_10110111 B7
#define HEX_DIGIT_10111000 B8
#define HEX_DIGIT_10111001 B9
#define HEX_DIGIT_10111010 BA
#define HEX_DIGIT_10111011 BB
#define HEX_DIGIT_10111100 BC
#define HEX_DIGIT_10111101 BD
#define HEX_DIGIT_10111110 BE
#define HEX_DIGIT_10111111 BF
#define HEX_DIGIT_11000000 C0
#define HEX_DIGIT_11000001 C1
#define HEX_DIGIT_11000010 C2
#define HEX_DIGIT_11000011 C3
#define HEX_DIGIT_11000100 C4
#define HEX_DIGIT_11000101 C5
#define HEX_DIGIT_11000110 C6
#define HEX_DIGIT_11000111 C7
#define HEX_DIGIT_11001000 C8
#define HEX_DIGIT_11001001 C9
#define HEX_DIGIT_11001010 CA
#define HEX_DIGIT_11001011 CB
#define HEX_DIGIT_11001100 CC
#define HEX_DIGIT_11001101 CD
#define HEX_DIGIT_11001110 CE
#define HEX_DIGIT_11001111 CF
#define HEX_DIGIT_11010000 D0
#define HEX_DIGIT_11010001 D1
#define HEX_DIGIT_11010010 D2
#define HEX_DIGIT_11010011 D3
#define HEX_DIGIT_11010100 D4
#define HEX_DIGIT_11010101 D5
#define HEX_DIGIT_11010110 D6
#define HEX_DIGIT_11010111 D7
#define HEX_DIGIT_11011000 D8
#define HEX_DIGIT_11011001 D9
#define HEX_DIGIT_11011010 DA
#define HEX_DIGIT_11011011 DB
#define HEX_DIGIT_11011100 DC
#define HEX_DIGIT_11011101 DD
#define HEX_DIGIT_11011110 DE
#define HEX_DIGIT_11011111 DF
#define HEX_DIGIT_11100000 E0
#define HEX_DIGIT_11100001 E1
#define HEX_DIGIT_11100010 E2
#define HEX_DIGIT_11100011 E3
#define HEX_DIGIT_11100100 E4
#define HEX_DIGIT_11100101 E5
#define HEX_DIGIT_11100110 E6
#define HEX_DIGIT_11100111 E7
#define HEX_DIGIT_11101000 E8
#define HEX_DIGIT_11101001 E9
#define HEX_DIGIT_11101010 EA
#define HEX_DIGIT_11101011 EB
#define HEX_DIGIT_11101100 EC
#define HEX_DIGIT_11101101 ED
#define HEX_DIGIT_11101110 EE
#define HEX_DIGIT_11101111 EF
#define HEX_DIGIT_11110000 F0
#define HEX_DIGIT_11110001 F1
#define HEX_DIGIT_11110010 F2
#define HEX_DIGIT_11110011 F3
#define HEX_DIGIT_11110100 F4
#define HEX_DIGIT_11110101 F5
#define HEX_DIGIT_11110110 F6
#define HEX_DIGIT_11110111 F7
#define HEX_DIGIT_11111000 F8
#define HEX_DIGIT_11111001 F9
#define HEX_DIGIT_11111010 FA
#define HEX_DIGIT_11111011 FB
#define HEX_DIGIT_11111100 FC
#define HEX_DIGIT_11111101 FD
#define HEX_DIGIT_11111110 FE
#define HEX_DIGIT_11111111 FF
#if 0
#pragma mark == Debugging ==
#endif
#if( DEBUG )
#if( TARGET_LANGUAGE_C_LIKE )
OSStatus CommonServicesTest( void );
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif // __COMMON_SERVICES__