147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* -*- Mode: C; tab-width: 4 -*-
247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *
347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved.
447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *
547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License");
647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * you may not use this file except in compliance with the License.
747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * You may obtain a copy of the License at
847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *
947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *     http://www.apache.org/licenses/LICENSE-2.0
1047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *
1147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Unless required by applicable law or agreed to in writing, software
1247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS,
1347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * See the License for the specific language governing permissions and
1547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * limitations under the License.
1647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt */
1747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
1847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
1947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@header		CommonServices
2047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
2147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	Common Services for Mac OS X, Linux, Palm, VxWorks, Windows, and Windows CE.
2247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
2347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
2447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#ifndef	__COMMON_SERVICES__
2547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	__COMMON_SERVICES__
2647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
2747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#ifdef	__cplusplus
2847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	extern "C" {
2947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
3047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
3147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
3247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Target ==
3347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
3447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
3547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
3647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	 Target
3747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
3847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
3947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Macintosh
4047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
4147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_MAC ) )
4247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( ( macintosh || __MACH__ ) && !KERNEL )
4347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		// ConditionalMacros.h in CoreServices will define this TARGET_* flag.
4447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
4547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_MAC			0
4647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
4747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
4847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
4947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_API_MAC_OSX_KERNEL ) )
5047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __MACH__ && KERNEL )
5147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_API_MAC_OSX_KERNEL		1
5247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
5347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_API_MAC_OSX_KERNEL		0
5447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
5547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
5647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
5747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// FreeBSD
5847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
5947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_FREEBSD ) )
6047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __FreeBSD__ ) )
6147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define TARGET_OS_FREEBSD		1
6247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
6347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define TARGET_OS_FREEBSD		0
6447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
6547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
6647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
6747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Linux
6847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
6947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_LINUX ) )
7047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __linux__ ) )
7147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_LINUX			1
7247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
7347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_LINUX			0
7447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
7547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
7647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
7747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Solaris
7847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
7947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_SOLARIS ) )
8047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined(solaris) || (defined(__SVR4) && defined(sun)) )
8147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_SOLARIS		1
8247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
8347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_SOLARIS		0
8447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
8547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
8647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
8747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Palm
8847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
8947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_PALM ) )
9047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __PALMOS_TRAPS__ ) || defined( __PALMOS_ARMLET__ ) )
9147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_PALM			1
9247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
9347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_PALM			0
9447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
9547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
9647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
9747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// VxWorks
9847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
9947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_VXWORKS ) )
10047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
10147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// No predefined macro for VxWorks so just assume VxWorks if nothing else is set.
10247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
10347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !macintosh && !__MACH__  && !defined( __FreeBSD__ ) && !defined( __linux__ ) && !defined ( __SVR4 ) && !defined ( __sun ) && !defined( __PALMOS_TRAPS__ ) && !defined( __PALMOS_ARMLET__ ) && !defined( _WIN32 ) )
10447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_VXWORKS		1
10547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
10647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_VXWORKS		0
10747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
10847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
10947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
11047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Windows
11147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
11247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_WIN32 ) )
11347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( macintosh || __MACH__ )
11447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		// ConditionalMacros.h in CoreServices will define this TARGET_* flag.
11547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
11647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#if( defined( _WIN32 ) )
11747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			#define	TARGET_OS_WIN32		1
11847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#else
11947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			#define	TARGET_OS_WIN32		0
12047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#endif
12147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
12247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
12347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
12447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Windows CE
12547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
12647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_OS_WINDOWS_CE ) )
12747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( _WIN32_WCE ) )
12847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_WINDOWS_CE	1
12947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
13047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_OS_WINDOWS_CE	0
13147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
13247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
13347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
13447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
13547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Includes ==
13647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
13747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
13847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
13947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	 Includes
14047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
14147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
14247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !KERNEL )
14347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if defined(WIN32) && !defined(_WSPIAPI_COUNTOF)
14447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0]))
14547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
14647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stddef.h>
14747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
14847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
14947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( ( macintosh || __MACH__ ) && !KERNEL )
15047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
15147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __MWERKS__ ) )
15247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#if( __option( c9x ) )
15347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			#include	<stdbool.h>
15447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#endif
15547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
15647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<stdbool.h>
15747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
15847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
15947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stdint.h>
16047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
16147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __MACH__ )
16247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
16347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		// Mac OS X
16447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
16547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<sys/types.h>
16647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<netinet/in.h>
16747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<arpa/inet.h>
16847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<fcntl.h>
16947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<pthread.h>
17047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<sys/ioctl.h>
17147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<sys/socket.h>
17247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<unistd.h>
17347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
17447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
17547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
17647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		// Classic Mac OS
17747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
17847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<ConditionalMacros.h>
17947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<MacTypes.h>
18047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
18147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
18247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
18347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( KERNEL )
18447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
18547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Mac OS X Kernel
18647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
18747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stdint.h>
18847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
18947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<libkern/OSTypes.h>
19047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<sys/types.h>
19147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
19247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_FREEBSD )
19347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
19447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// FreeBSD
19547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stdint.h>
19647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<pthread.h>
19747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<netinet/in.h>
19847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<arpa/inet.h>
19947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<sys/socket.h>
20047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
20147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_LINUX )
20247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
20347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Linux
20447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
20547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stdint.h>
20647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<arpa/inet.h>
20747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
20847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_SOLARIS )
20947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
21047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Solaris
21147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
21247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<stdint.h>
21347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
21447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<arpa/inet.h>
21547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<arpa/nameser.h>
21647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
21747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if ( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) )
21847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define TARGET_RT_LITTLE_ENDIAN		1
21947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
22047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if ( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) )
22147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define TARGET_RT_BIG_ENDIAN		1
22247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
22347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
22447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_PALM )
22547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
22647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Palm (no special includes yet).
22747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
22847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_VXWORKS )
22947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
23047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// VxWorks
23147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
23247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	"vxWorks.h"
23347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
23447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_WIN32 )
23547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
23647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Windows
23747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
23847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( WIN32_WINDOWS ) )
23947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	WIN32_WINDOWS		0x0401
24047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
24147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
24247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( _WIN32_WINDOWS ) )
24347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	_WIN32_WINDOWS		0x0401
24447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
24547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
24647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( WIN32_LEAN_AND_MEAN ) )
24747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	WIN32_LEAN_AND_MEAN			// Needed to avoid redefinitions by Windows interfaces.
24847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
24947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
25047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __MWERKS__ ) )
25147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
25247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#if( __option( c9x ) )
25347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			#include	<stdbool.h>
25447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#endif
25547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
25647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#include	<stdint.h>
25747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
25847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#elif( defined( _MSC_VER ) )
25947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
26047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#pragma warning( disable:4127 )		// Disable "conditional expression is constant" warning for debug macros.
26147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#pragma warning( disable:4706 )		// Disable "assignment within conditional expression" for Microsoft headers.
26247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
26347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
26447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
26547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<windows.h>
26647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<winsock2.h>
26747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#include	<Ws2tcpip.h>
26847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
26947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( _MSC_VER ) )
27047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#pragma warning( default:4706 )
27147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
27247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
27347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
27447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#error unknown OS - update this file to support your OS
27547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
27647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
27747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_BUILD_MAIN ) )
27847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !TARGET_OS_VXWORKS )
27947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_BUILD_MAIN		1
28047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
28147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
28247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
28347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( __GNUC__ || !TARGET_OS_VXWORKS )
28447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	TARGET_LANGUAGE_C_LIKE		1
28547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
28647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	TARGET_LANGUAGE_C_LIKE		0
28747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
28847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
28947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
29047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == CPU ==
29147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
29247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
29347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
29447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	CPU
29547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
29647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
29747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// PowerPC
29847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
29947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_CPU_PPC ) )
30047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( __ppc__ ) || defined( __PPC__ ) || defined( powerpc ) || defined( ppc ) || defined( _M_MPPC ) )
30147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_PPC				1
30247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
30347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_PPC				0
30447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
30547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
30647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
30747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// x86
30847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
30947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_CPU_X86 ) )
31047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __INTEL__ || defined( __i386__ ) || defined( i386 ) || defined( intel ) || defined( _M_IX86 ) )
31147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_X86				1
31247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
31347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_X86				0
31447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
31547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
31647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
31747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// MIPS
31847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
31947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_CPU_MIPS ) )
32047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __MIPS__ || defined( MIPS32 ) || defined( R3000 ) || defined( R4000 ) || defined( R4650 ) || defined( _M_MRX000 ) )
32147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_MIPS				1
32247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
32347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_CPU_MIPS				0
32447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
32547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
32647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
32747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_CPU_PPC ) && !defined( TARGET_CPU_X86 ) && !defined( TARGET_CPU_MIPS ) )
32847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#error unknown CPU - update this file to support your CPU
32947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
33047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
33147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
33247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Byte Order ==
33347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
33447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
33547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
33647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	Byte Order
33747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
33847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
33947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// TARGET_RT_LITTLE_ENDIAN
34047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
34147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_LITTLE_ENDIAN ) )
34247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( MIPSEL || IL_LITTLE_ENDIAN || defined( __LITTLE_ENDIAN__ ) 										|| \
34347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined(   BYTE_ORDER ) && defined(   LITTLE_ENDIAN ) && (   BYTE_ORDER ==   LITTLE_ENDIAN ) )	|| \
34447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined(  _BYTE_ORDER ) && defined(  _LITTLE_ENDIAN ) && (  _BYTE_ORDER ==  _LITTLE_ENDIAN ) )	|| \
34547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined( __BYTE_ORDER ) && defined( __LITTLE_ENDIAN ) && ( __BYTE_ORDER == __LITTLE_ENDIAN ) )	|| \
34647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 TARGET_CPU_X86 || ( defined( TARGET_RT_BIG_ENDIAN ) && !TARGET_RT_BIG_ENDIAN ) )
34747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_LITTLE_ENDIAN		1
34847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
34947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_LITTLE_ENDIAN		0
35047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
35147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
35247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
35347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// TARGET_RT_BIG_ENDIAN
35447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
35547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_BIG_ENDIAN ) )
35647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( MIPSEB || IL_BIG_ENDIAN || defined( __BIG_ENDIAN__ ) 										|| \
35747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined(   BYTE_ORDER ) && defined(   BIG_ENDIAN ) && (   BYTE_ORDER ==   BIG_ENDIAN ) )	|| \
35847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined(  _BYTE_ORDER ) && defined(  _BIG_ENDIAN ) && (  _BYTE_ORDER ==  _BIG_ENDIAN ) )	|| \
35947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		 ( defined( __BYTE_ORDER ) && defined( __BIG_ENDIAN ) && ( __BYTE_ORDER == __BIG_ENDIAN ) )	|| \
36047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		( defined( TARGET_RT_LITTLE_ENDIAN ) && !TARGET_RT_LITTLE_ENDIAN ) )
36147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BIG_ENDIAN		1
36247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
36347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BIG_ENDIAN		0
36447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
36547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
36647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
36747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( TARGET_RT_LITTLE_ENDIAN ) && !defined( TARGET_RT_BIG_ENDIAN ) )
36847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_RT_LITTLE_ENDIAN )
36947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BIG_ENDIAN		0
37047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
37147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BIG_ENDIAN		1
37247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
37347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
37447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
37547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( TARGET_RT_BIG_ENDIAN ) && !defined( TARGET_RT_LITTLE_ENDIAN ) )
37647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_RT_BIG_ENDIAN )
37747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_LITTLE_ENDIAN		0
37847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
37947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_LITTLE_ENDIAN		1
38047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
38147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
38247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
38347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_LITTLE_ENDIAN ) || !defined( TARGET_RT_BIG_ENDIAN ) )
38447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#error unknown byte order - update this file to support your byte order
38547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
38647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
38747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// TARGET_RT_BYTE_ORDER
38847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
38947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_BYTE_ORDER_BIG_ENDIAN ) )
39047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	TARGET_RT_BYTE_ORDER_BIG_ENDIAN			1234
39147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
39247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
39347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN ) )
39447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN		4321
39547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
39647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
39747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TARGET_RT_BYTE_ORDER ) )
39847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_RT_LITTLE_ENDIAN )
39947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BYTE_ORDER				TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN
40047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
40147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TARGET_RT_BYTE_ORDER				TARGET_RT_BYTE_ORDER_BIG_ENDIAN
40247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
40347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
40447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
40547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
40647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Constants ==
40747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
40847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
40947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
41047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	Constants
41147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
41247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
41347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !TARGET_OS_MAC )
41447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define CR		'\r'
41547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
41647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
41747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define LF			'\n'
41847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	CRSTR		"\r"
41947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	LFSTR		"\n"
42047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define CRLF		"\r\n"
42147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define CRCR 		"\r\r"
42247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
42347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
42447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Compatibility ==
42547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
42647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
42747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
42847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	Compatibility
42947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
43047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
43147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Macros to allow the same code to work on Windows and other sockets API-compatible platforms.
43247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
43347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 )
43447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	close_compat( X )		closesocket( X )
43547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	errno_compat()			(int) GetLastError()
43647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	set_errno_compat( X )	SetLastError( X )
43747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	EWOULDBLOCK_compat		WSAEWOULDBLOCK
43847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	ETIMEDOUT_compat		WSAETIMEDOUT
43947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	ENOTCONN_compat			WSAENOTCONN
44047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	IsValidSocket( X )		( ( X ) != INVALID_SOCKET )
44147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	kInvalidSocketRef		INVALID_SOCKET
44247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_LANGUAGE_C_LIKE )
44347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef SOCKET				SocketRef;
44447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
44547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
44647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	close_compat( X )		close( X )
44747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	errno_compat()			errno
44847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	set_errno_compat( X )	do { errno = ( X ); } while( 0 )
44947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	EWOULDBLOCK_compat		EWOULDBLOCK
45047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	ETIMEDOUT_compat		ETIMEDOUT
45147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	ENOTCONN_compat			ENOTCONN
45247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	IsValidSocket( X )		( ( X ) >= 0 )
45347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	kInvalidSocketRef		-1
45447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_LANGUAGE_C_LIKE )
45547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef int					SocketRef;
45647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
45747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
45847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
45947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// socklen_t is not defined on the following platforms so emulate it if not defined:
46047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//
46147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// - Pre-Panther Mac OS X. Panther defines SO_NOADDRERR so trigger off that.
46247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// - Windows SDK prior to 2003. 2003+ SDK's define EAI_AGAIN so trigger off that.
46347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// - VxWorks
46447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
46547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
46647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( ( TARGET_OS_MAC && !defined( SO_NOADDRERR ) ) || ( TARGET_OS_WIN32 && !defined( EAI_AGAIN ) ) || TARGET_OS_VXWORKS )
46747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef int						socklen_t;
46847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
46947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
47047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
47147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// ssize_t is not defined on the following platforms so emulate it if not defined:
47247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//
47347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// - Mac OS X when not building with BSD headers
47447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// - Windows
47547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
47647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
47747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined(_SSIZE_T) && ( TARGET_OS_WIN32 || !defined( _BSD_SSIZE_T_DEFINED_ ) ) && !TARGET_OS_FREEBSD && !TARGET_OS_LINUX && !TARGET_OS_VXWORKS && !TARGET_OS_MAC)
47847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef int						ssize_t;
47947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
48047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
48147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
48247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// sockaddr_storage is not supported on non-IPv6 machines so alias it to an IPv4-compatible structure.
48347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
48447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
48547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( AF_INET6 ) )
48647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	sockaddr_storage		sockaddr_in
48747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	ss_family				sin_family
48847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
48947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
49047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
49147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
49247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	SOCKADDR_IS_IP_LOOPBACK
49347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
49447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines if a sockaddr is an IPv4 or IPv6 loopback address (if IPv6 is supported).
49547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
49647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
49747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( AF_INET6 ) )
49847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	SOCKADDR_IS_IP_LOOPBACK( SA )															\
49947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )   							\
50047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) )	\
50147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		: ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET6 ) 							\
50247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			? IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) 			\
50347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			: 0
50447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
50547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	SOCKADDR_IS_IP_LOOPBACK( SA )															\
50647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )  								\
50747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) ) 	\
50847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		: 0
50947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
51047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
51147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
51247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	SOCKADDR_IS_IP_LINK_LOCAL
51347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
51447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines if a sockaddr is an IPv4 or IPv6 link-local address (if IPv6 is supported).
51547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
51647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
51747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( AF_INET6 ) )
51847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	SOCKADDR_IS_IP_LINK_LOCAL( SA )																\
51947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )   								\
52047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		  ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && 	\
52147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			  ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) )	\
52247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		  : IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) )
52347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
52447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	SOCKADDR_IS_IP_LINK_LOCAL( SA )																\
52547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )   								\
52647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		  ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && 	\
52747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			  ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) )	\
52847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		  : 0 )
52947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
53047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
53147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// _beginthreadex and _endthreadex are not supported on Windows CE 2.1 or later (the C runtime issues with leaking
53247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// resources have apparently been resolved and they seem to have just ripped out support for the API) so map it to
53347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// CreateThread on Windows CE.
53447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
53547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WINDOWS_CE )
53647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	_beginthreadex_compat( SECURITY_PTR, STACK_SIZE, START_ADDRESS, ARG_LIST, FLAGS, THREAD_ID_PTR )			\
53747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		(uintptr_t) CreateThread( SECURITY_PTR, STACK_SIZE, (LPTHREAD_START_ROUTINE) START_ADDRESS, ARG_LIST, FLAGS, 	\
53847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt					  (LPDWORD) THREAD_ID_PTR )
53947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
54047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	_endthreadex_compat( RESULT )		ExitThread( (DWORD) RESULT )
54147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#elif( TARGET_OS_WIN32 )
54247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	_beginthreadex_compat				_beginthreadex
54347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	_endthreadex_compat					_endthreadex
54447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
54547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
54647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// The C99 "inline" keyword is not supported by Microsoft compilers, but they do support __inline so map it when needed.
54747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
54847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( _MSC_VER ) )
54947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	inline_compat		__inline
55047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
55147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	inline_compat		inline
55247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
55347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
55447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Calling conventions
55547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
55647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( CALLBACK_COMPAT ) )
55747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_OS_WIN32 || TARGET_OS_WINDOWS_CE )
55847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	CALLBACK_COMPAT		CALLBACK
55947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
56047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	CALLBACK_COMPAT
56147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
56247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
56347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
56447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
56547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Macros ==
56647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
56747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
56847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
56947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	kSizeCString
57047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
57147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	A meta-value to pass to supported routines to indicate the size should be calculated with strlen.
57247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
57347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
57447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kSizeCString		( (size_t) -1 )
57547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
57647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
57747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	sizeof_array
57847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
57947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines the number of elements in an array.
58047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
58147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
58247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	sizeof_array( X )		( sizeof( X ) / sizeof( X[ 0 ] ) )
58347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
58447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
58547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	sizeof_element
58647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
58747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines the size of an array element.
58847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
58947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
59047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	sizeof_element( X )		sizeof( X[ 0 ] )
59147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
59247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
59347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	sizeof_string
59447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
59547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines the size of a constant C string, excluding the null terminator.
59647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
59747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
59847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	sizeof_string( X )		( sizeof( ( X ) ) - 1 )
59947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
60047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
60147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	sizeof_field
60247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
60347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Determines the size of a field of a type.
60447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
60547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
60647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	sizeof_field( TYPE, FIELD )		sizeof( ( ( (TYPE *) 0 )->FIELD ) )
60747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
60847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
60947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	RoundUp
61047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
61147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Rounds X up to a multiple of Y.
61247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
61347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
61447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	RoundUp( X, Y )		( ( X ) + ( ( Y ) - ( ( X ) % ( Y ) ) ) )
61547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
61647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
61747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	IsAligned
61847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
61947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Returns non-zero if X is aligned to a Y byte boundary and 0 if not. Y must be a power of 2.
62047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
62147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
62247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	IsAligned( X, Y )		( ( ( X ) & ( ( Y ) - 1 ) ) == 0 )
62347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
62447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
62547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	IsFieldAligned
62647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
62747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Returns non-zero if FIELD of type TYPE is aligned to a Y byte boundary and 0 if not. Y must be a power of 2.
62847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
62947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
63047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	IsFieldAligned( X, TYPE, FIELD, Y )		IsAligned( ( (uintptr_t)( X ) ) + offsetof( TYPE, FIELD ), ( Y ) )
63147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
63247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
63347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	AlignDown
63447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
63547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Aligns X down to a Y byte boundary. Y must be a power of 2.
63647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
63747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
63847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	AlignDown( X, Y )		( ( X ) & ~( ( Y ) - 1 ) )
63947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
64047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
64147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	AlignUp
64247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
64347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Aligns X up to a Y byte boundary. Y must be a power of 2.
64447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
64547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
64647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	AlignUp( X, Y )		( ( ( X ) + ( ( Y ) - 1 ) ) & ~( ( Y ) - 1 ) )
64747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
64847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
64947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	Min
65047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
65147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Returns the lesser of X and Y.
65247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
65347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
65447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( Min ) )
65547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	Min( X, Y )		( ( ( X ) < ( Y ) ) ? ( X ) : ( Y ) )
65647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
65747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
65847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
65947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	Max
66047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
66147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Returns the greater of X and Y.
66247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
66347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
66447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( Max ) )
66547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	Max( X, Y )		( ( ( X ) > ( Y ) ) ? ( X ) : ( Y ) )
66647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
66747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
66847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
66947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	InsertBits
67047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
67147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Inserts BITS (both 0 and 1 bits) into X, controlled by MASK and SHIFT, and returns the result.
67247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
67347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@discussion
67447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
67547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	MASK is the bitmask of the bits in the final position.
67647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	SHIFT is the number of bits to shift left for 1 to reach the first bit position of MASK.
67747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
67847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	For example, if you wanted to insert 0x3 into the leftmost 4 bits of a 32-bit value:
67947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
68047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	InsertBits( 0, 0x3, 0xF0000000U, 28 ) == 0x30000000
68147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
68247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
68347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	InsertBits( X, BITS, MASK, SHIFT )		( ( ( X ) & ~( MASK ) ) | ( ( ( BITS ) << ( SHIFT ) ) & ( MASK ) ) )
68447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
68547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
68647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	ExtractBits
68747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
68847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Extracts bits from X, controlled by MASK and SHIFT, and returns the result.
68947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
69047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@discussion
69147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
69247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	MASK is the bitmask of the bits in the final position.
69347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	SHIFT is the number of bits to shift right to right justify MASK.
69447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
69547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	For example, if you had a 32-bit value (e.g. 0x30000000) wanted the left-most 4 bits (e.g. 3 in this example):
69647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
69747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	ExtractBits( 0x30000000U, 0xF0000000U, 28 ) == 0x3
69847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
69947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
70047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	ExtractBits( X, MASK, SHIFT )			( ( ( X ) >> ( SHIFT ) ) & ( ( MASK ) >> ( SHIFT ) ) )
70147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
70247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
70347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	Stringify
70447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
70547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Stringify's an expression.
70647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
70747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@discussion
70847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
70947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	Stringify macros to process raw text passed via -D options to C string constants. The double-wrapping is necessary
71047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	because the C preprocessor doesn't perform its normal argument expansion pre-scan with stringified macros so the
71147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	-D macro needs to be expanded once via the wrapper macro then stringified so the raw text is stringified. Otherwise,
71247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	the replacement value would be used instead of the symbolic name (only for preprocessor symbols like #defines).
71347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
71447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	For example:
71547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
71647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	kMyConstant		1
71747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
71847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		printf( "%s", Stringify( kMyConstant ) );			// Prints "kMyConstant"
71947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		printf( "%s", StringifyExpansion( kMyConstant ) );	// Prints "1"
72047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
72147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	Non-preprocessor symbols do not have this issue. For example:
72247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
72347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		enum
72447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		{
72547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt			kMyConstant = 1
72647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		};
72747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
72847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		printf( "%s", Stringify( kMyConstant ) );			// Prints "kMyConstant"
72947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		printf( "%s", StringifyExpansion( kMyConstant ) );	// Prints "kMyConstant"
73047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
73147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	See <http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html> for more info on C preprocessor pre-scanning.
73247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
73347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
73447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	Stringify( X )				# X
73547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	StringifyExpansion( X )		Stringify( X )
73647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
73747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
73847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Types ==
73947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
74047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
74147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
74247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
74347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	 Standard Types
74447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
74547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
74647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( INT8_MIN ) )
74747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
74847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define INT8_MIN					SCHAR_MIN
74947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
75047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( _MSC_VER ) )
75147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
75247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		// C99 stdint.h not supported in VC++/VS.NET yet.
75347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
75447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef INT8					int8_t;
75547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef UINT8					uint8_t;
75647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef INT16					int16_t;
75747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef UINT16					uint16_t;
75847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef INT32					int32_t;
75947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef UINT32					uint32_t;
76047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef __int64					int64_t;
76147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef unsigned __int64		uint64_t;
76247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
76347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#elif( TARGET_OS_VXWORKS && ( TORNADO_VERSION < 220 ) )
76447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef long long				int64_t;
76547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef unsigned long long		uint64_t;
76647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
76747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
76847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int8_t						int_least8_t;
76947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int16_t						int_least16_t;
77047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int32_t						int_least32_t;
77147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int64_t						int_least64_t;
77247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
77347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint8_t						uint_least8_t;
77447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint16_t					uint_least16_t;
77547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint32_t					uint_least32_t;
77647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint64_t					uint_least64_t;
77747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
77847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int8_t						int_fast8_t;
77947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int16_t						int_fast16_t;
78047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int32_t						int_fast32_t;
78147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int64_t						int_fast64_t;
78247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
78347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint8_t						uint_fast8_t;
78447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint16_t					uint_fast16_t;
78547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint32_t					uint_fast32_t;
78647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef uint64_t					uint_fast64_t;
78747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
78847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( _MSC_VER ) || TARGET_OS_WINDOWS_CE )
78947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef long int				intptr_t;
79047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef unsigned long int		uintptr_t;
79147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
79247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
79347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
79447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
79547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Macros for minimum-width integer constants
79647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
79747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( INT8_C ) )
79847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define INT8_C( value )			value
79947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
80047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
80147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( INT16_C ) )
80247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define INT16_C( value )		value
80347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
80447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
80547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( INT32_C ) )
80647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define INT32_C( value )		value ## L
80747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
80847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
80947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( INT64_C ) )
81047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( _MSC_VER ) )
81147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define INT64_C( value )	value ## i64
81247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
81347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define INT64_C( value )	value ## LL
81447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
81547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
81647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
81747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( UINT8_C ) )
81847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define UINT8_C( value )		value ## U
81947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
82047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
82147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( UINT16_C ) )
82247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define UINT16_C( value )		value ## U
82347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
82447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
82547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( UINT32_C ) )
82647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define UINT32_C( value )		value ## UL
82747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
82847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
82947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( UINT64_C ) )
83047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( defined( _MSC_VER ) )
83147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define UINT64_C( value )	value ## UI64
83247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
83347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define UINT64_C( value )	value ## ULL
83447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
83547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
83647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
83747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
83847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == bool ==
83947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
84047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
84147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
84247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	 Boolean Constants and Types
84347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
84447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
84547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// C++ defines bool, true, and false. Metrowerks allows this to be controlled by the "bool" option though.
84647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// C99 defines __bool_true_false_are_defined when bool, true, and false are defined.
84747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// MacTypes.h defines true and false (Mac builds only).
84847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//
84947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Note: The Metrowerks has to be in its own block because Microsoft Visual Studio .NET does not completely
85047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// short-circuit and gets confused by the option( bool ) portion of the conditional.
85147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
85247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( __MWERKS__ ) )
85347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
85447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Note: The following test is done on separate lines because CodeWarrior doesn't like it all on one line.
85547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
85647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !__bool_true_false_are_defined && ( !defined( __cplusplus ) || !__option( bool ) ) )
85747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	COMMON_SERVICES_NEEDS_BOOL		1
85847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
85947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	COMMON_SERVICES_NEEDS_BOOL		0
86047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
86147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
86247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Workaround when building with CodeWarrior, but using the Apple stdbool.h header, which uses _Bool.
86347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
86447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __bool_true_false_are_defined && !defined( __cplusplus ) && !__option( c9x ) )
86547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define _Bool	int
86647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
86747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
86847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// Workaround when building with CodeWarrior for C++ with bool disabled and using the Apple stdbool.h header,
86947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	// which defines true and false to map to C++ true and false (which are not enabled). Serenity Now!
87047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
87147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( __bool_true_false_are_defined && defined( __cplusplus ) && !__option( bool ) )
87247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	true	1
87347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	false	0
87447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
87547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else
87647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	COMMON_SERVICES_NEEDS_BOOL			( !defined( __cplusplus ) && !__bool_true_false_are_defined )
87747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
87847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
87947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( COMMON_SERVICES_NEEDS_BOOL )
88047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
88147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef int		bool;
88247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
88347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define	bool	bool
88447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
88547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !defined( __MACTYPES__ ) && !defined( true ) && !defined( false ) )
88647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define true	1
88747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define false	0
88847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
88947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
89047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define __bool_true_false_are_defined		1
89147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
89247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
89347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// IOKit IOTypes.h typedef's bool if TYPE_BOOL is not defined so define it here to prevent redefinition by IOTypes.h.
89447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
89547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_API_MAC_OSX_KERNEL )
89647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#define TYPE_BOOL		1
89747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
89847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
89947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
90047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@typedef	CStr255
90147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
90247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	255 character null-terminated (C-style) string.
90347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
90447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
90547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
90647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	typedef char	CStr255[ 256 ];
90747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
90847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
90947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif	// TARGET_LANGUAGE_C_LIKE
91047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
91147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
91247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	TYPE_LONGLONG_NATIVE
91347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
91447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Defines whether long long (or its equivalent) is natively supported or requires special libraries.
91547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
91647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
91747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !defined( TYPE_LONGLONG_NATIVE ) )
91847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !TARGET_OS_VXWORKS )
91947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TYPE_LONGLONG_NATIVE			1
92047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
92147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		#define	TYPE_LONGLONG_NATIVE			0
92247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
92347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
92447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
92547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
92647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	long_long_compat
92747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
92847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Compatibility type to map to the closest thing to long long and unsigned long long.
92947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
93047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@discussion
93147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
93247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	Neither long long nor unsigned long long are supported by Microsoft compilers, but they do support proprietary
93347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	"__int64" and "unsigned __int64" equivalents so map to those types if the real long long is not supported.
93447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
93547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
93647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
93747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_OS_WIN32 )
93847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef __int64					long_long_compat;
93947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef unsigned __int64		unsigned_long_long_compat;
94047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#else
94147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef signed long long		long_long_compat;
94247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef unsigned long long		unsigned_long_long_compat;
94347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
94447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
94547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
94647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
94747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Errors ==
94847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
94947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
95047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
95147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@enum		OSStatus
95247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
95347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Status Code
95447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
95547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoErr						    0 No error occurred.
95647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kInProgressErr				    1 Operation in progress.
95747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kUnknownErr					-6700 Unknown error occurred.
95847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kOptionErr					-6701 Option was not acceptable.
95947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kSelectorErr				-6702 Selector passed in is invalid or unknown.
96047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kExecutionStateErr			-6703 Call made in the wrong execution state (e.g. called at interrupt time).
96147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kPathErr					-6704 Path is invalid, too long, or otherwise not usable.
96247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kParamErr					-6705 Parameter is incorrect, missing, or not appropriate.
96347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kParamCountErr				-6706 Incorrect or unsupported number of parameters.
96447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kCommandErr					-6707 Command invalid or not supported.
96547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kIDErr						-6708 Unknown, invalid, or inappropriate identifier.
96647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kStateErr					-6709 Not in appropriate state to perform operation.
96747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kRangeErr					-6710 Index is out of range or not valid.
96847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kRequestErr					-6711 Request was improperly formed or not appropriate.
96947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kResponseErr				-6712 Response was incorrect or out of sequence.
97047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kChecksumErr				-6713 Checksum does not match the actual data.
97147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotHandledErr				-6714 Operation was not handled (or not handled completely).
97247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kVersionErr					-6715 Version is not incorrect or not compatibile.
97347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kSignatureErr				-6716 Signature did not match what was expected.
97447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kFormatErr					-6717 Unknown, invalid, or inappropriate file/data format.
97547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotInitializedErr			-6718 Action request before needed services were initialized.
97647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kAlreadyInitializedErr		-6719 Attempt made to initialize when already initialized.
97747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotInUseErr				-6720 Object not in use (e.g. cannot abort if not already in use).
97847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kInUseErr					-6721 Object is in use (e.g. cannot reuse active param blocks).
97947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kTimeoutErr					-6722 Timeout occurred.
98047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kCanceledErr				-6723 Operation canceled (successful cancel).
98147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kAlreadyCanceledErr			-6724 Operation has already been canceled.
98247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kCannotCancelErr			-6725 Operation could not be canceled (maybe already done or invalid).
98347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDeletedErr					-6726 Object has already been deleted.
98447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotFoundErr				-6727 Something was not found.
98547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoMemoryErr				-6728 Not enough memory was available to perform the operation.
98647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoResourcesErr				-6729 Resources unavailable to perform the operation.
98747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDuplicateErr				-6730 Duplicate found or something is a duplicate.
98847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kImmutableErr				-6731 Entity is not changeable.
98947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kUnsupportedDataErr			-6732 Data is unknown or not supported.
99047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kIntegrityErr				-6733 Data is corrupt.
99147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kIncompatibleErr			-6734 Data is not compatible or it is in an incompatible format.
99247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kUnsupportedErr				-6735 Feature or option is not supported.
99347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kUnexpectedErr				-6736 Error occurred that was not expected.
99447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kValueErr					-6737 Value is not appropriate.
99547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotReadableErr				-6738 Could not read or reading is not allowed.
99647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotWritableErr				-6739 Could not write or writing is not allowed.
99747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kBadReferenceErr			-6740 An invalid or inappropriate reference was specified.
99847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kFlagErr					-6741 An invalid, inappropriate, or unsupported flag was specified.
99947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kMalformedErr				-6742 Something was not formed correctly.
100047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kSizeErr					-6743 Size was too big, too small, or not appropriate.
100147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNameErr					-6744 Name was not correct, allowed, or appropriate.
100247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNotReadyErr				-6745 Device or service is not ready.
100347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kReadErr					-6746 Could not read.
100447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kWriteErr					-6747 Could not write.
100547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kMismatchErr				-6748 Something does not match.
100647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDateErr					-6749 Date is invalid or out-of-range.
100747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kUnderrunErr				-6750 Less data than expected.
100847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kOverrunErr					-6751 More data than expected.
100947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kEndingErr					-6752 Connection, session, or something is ending.
101047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kConnectionErr				-6753 Connection failed or could not be established.
101147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kAuthenticationErr			-6754 Authentication failed or is not supported.
101247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kOpenErr					-6755 Could not open file, pipe, device, etc.
101347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kTypeErr					-6756 Incorrect or incompatible type (e.g. file, data, etc.).
101447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kSkipErr					-6757 Items should be or was skipped.
101547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoAckErr					-6758 No acknowledge.
101647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kCollisionErr				-6759 Collision occurred (e.g. two on bus at same time).
101747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kBackoffErr					-6760 Backoff in progress and operation intentionally failed.
101847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoAddressAckErr			-6761 No acknowledge of address.
101947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kBusyErr					-6762 Cannot perform because something is busy.
102047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kNoSpaceErr					-6763 Not enough space to perform operation.
102147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
102247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
102347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
102447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !TARGET_OS_MAC && !TARGET_API_MAC_OSX_KERNEL )
102547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef int32_t		OSStatus;
102647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
102747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
102847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
102947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNoErr						0
103047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kInProgressErr				1
103147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
103247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Generic error codes are in the range -6700 to -6779.
103347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
103447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kGenericErrorBase			-6700	// Starting error code for all generic errors.
103547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
103647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kUnknownErr					-6700
103747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kOptionErr					-6701
103847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSelectorErr				-6702
103947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kExecutionStateErr			-6703
104047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kPathErr					-6704
104147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kParamErr					-6705
104247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kParamCountErr				-6706
104347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kCommandErr					-6707
104447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kIDErr						-6708
104547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kStateErr					-6709
104647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kRangeErr					-6710
104747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kRequestErr					-6711
104847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kResponseErr				-6712
104947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kChecksumErr				-6713
105047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotHandledErr				-6714
105147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kVersionErr					-6715
105247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSignatureErr				-6716
105347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kFormatErr					-6717
105447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotInitializedErr			-6718
105547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kAlreadyInitializedErr		-6719
105647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotInUseErr				-6720
105747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kInUseErr					-6721
105847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kTimeoutErr					-6722
105947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kCanceledErr				-6723
106047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kAlreadyCanceledErr			-6724
106147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kCannotCancelErr			-6725
106247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kDeletedErr					-6726
106347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotFoundErr				-6727
106447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNoMemoryErr				-6728
106547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNoResourcesErr				-6729
106647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kDuplicateErr				-6730
106747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kImmutableErr				-6731
106847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kUnsupportedDataErr			-6732
106947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kIntegrityErr				-6733
107047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kIncompatibleErr			-6734
107147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kUnsupportedErr				-6735
107247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kUnexpectedErr				-6736
107347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kValueErr					-6737
107447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotReadableErr				-6738
107547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNotWritableErr				-6739
107647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kBadReferenceErr			-6740
107747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kFlagErr					-6741
107847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kMalformedErr				-6742
107947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kSizeErr					-6743
108047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kNameErr					-6744
108147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kNotReadyErr				-6745
108247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kReadErr					-6746
108347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kWriteErr					-6747
108447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kMismatchErr				-6748
108547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDateErr					-6749
108647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kUnderrunErr				-6750
108747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kOverrunErr					-6751
108847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kEndingErr					-6752
108947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kConnectionErr				-6753
109047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kAuthenticationErr			-6754
109147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kOpenErr					-6755
109247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kTypeErr					-6756
109347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kSkipErr					-6757
109447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kNoAckErr					-6758
109547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kCollisionErr				-6759
109647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kBackoffErr					-6760
109747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kNoAddressAckErr			-6761
109847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kBusyErr					-6762
109947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kNoSpaceErr					-6763
110047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
110147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kGenericErrorEnd			-6779	// Last generic error code (inclusive)
110247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
110347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
110447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Mac Compatibility ==
110547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
110647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
110747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
110847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//	Mac Compatibility
110947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//===========================================================================================================================
111047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
111147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
111247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@enum		Duration
111347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
111447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Type used to specify a duration of time.
111547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
111647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationImmediate			Indicates no delay/wait time.
111747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationMicrosecond		Microsecond units.
111847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationMillisecond		Millisecond units.
111947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationSecond				Second units.
112047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationMinute				Minute units.
112147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationHour				Hour units.
112247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationDay				Day units.
112347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@constant	kDurationForever			Infinite period of time (no timeout).
112447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
112547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@discussion
112647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
112747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	Duration values are intended to be multiplied by the specific interval to achieve an actual duration. For example,
112847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	to wait for 5 seconds you would use "5 * kDurationSecond".
112947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
113047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
113147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
113247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( !TARGET_OS_MAC )
113347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		typedef	int32_t		Duration;
113447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
113547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
113647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
113747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationImmediate				0L
113847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationMicrosecond			-1L
113947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationMillisecond			1L
114047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationSecond					( 1000L * kDurationMillisecond )
114147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationMinute					( 60L * kDurationSecond )
114247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationHour					( 60L * kDurationMinute )
114347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationDay					( 24L * kDurationHour )
114447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kDurationForever				0x7FFFFFFFL
114547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
114647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Seconds <-> Minutes <-> Hours <-> Days <-> Weeks <-> Months <-> Years conversions
114747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
114847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNanosecondsPerMicrosecond		1000
114947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNanosecondsPerMillisecond		1000000
115047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kNanosecondsPerSecond			1000000000
115147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMicrosecondsPerSecond			1000000
115247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMicrosecondsPerMillisecond		1000
115347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMillisecondsPerSecond			1000
115447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSecondsPerMinute				60
115547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSecondsPerHour					( 60 * 60 )				// 3600
115647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSecondsPerDay					( 60 * 60 * 24 )		// 86400
115747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kSecondsPerWeek					( 60 * 60 * 24 * 7 )	// 604800
115847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMinutesPerHour					60
115947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMinutesPerDay					( 60 * 24 )				// 1440
116047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kHoursPerDay					24
116147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kDaysPerWeek					7
116247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kWeeksPerYear					52
116347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define kMonthsPerYear					12
116447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
116547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
116647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	VersionStages
116747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
116847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	NumVersion-style version stages.
116947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
117047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
117147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kVersionStageDevelopment		0x20
117247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kVersionStageAlpha				0x40
117347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kVersionStageBeta				0x60
117447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	kVersionStageFinal				0x80
117547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
117647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
117747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	NumVersionBuild
117847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
117947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Builds a 32-bit Mac-style NumVersion value (e.g. NumVersionBuild( 1, 2, 3, kVersionStageBeta, 4 ) -> 1.2.3b4).
118047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
118147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
118247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionBuild( MAJOR, MINOR, BUGFIX, STAGE, REV )	\
118347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	( ( ( ( MAJOR )  & 0xFF ) << 24 ) |						\
118447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	  ( ( ( MINOR )  & 0x0F ) << 20 ) |						\
118547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	  ( ( ( BUGFIX ) & 0x0F ) << 16 ) |						\
118647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	  ( ( ( STAGE )  & 0xFF ) <<  8 ) |						\
118747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	  ( ( ( REV )    & 0xFF )       ) )
118847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
118947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractMajor( VERSION )				( (uint8_t)( ( ( VERSION ) >> 24 ) & 0xFF ) )
119047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractMinorAndBugFix( VERSION )		( (uint8_t)( ( ( VERSION ) >> 16 ) & 0xFF ) )
119147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractMinor( VERSION )				( (uint8_t)( ( ( VERSION ) >> 20 ) & 0x0F ) )
119247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractBugFix( VERSION )				( (uint8_t)( ( ( VERSION ) >> 16 ) & 0x0F ) )
119347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractStage( VERSION )				( (uint8_t)( ( ( VERSION ) >>  8 ) & 0xFF ) )
119447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	NumVersionExtractRevision( VERSION )			( (uint8_t)(   ( VERSION )         & 0xFF ) )
119547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
119647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
119747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	NumVersionCompare
119847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
119947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Compares two NumVersion values and returns the following values:
120047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
120147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		left < right -> -1
120247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		left > right ->  1
120347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		left = right ->  0
120447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
120547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
120647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_LANGUAGE_C_LIKE )
120747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	int	NumVersionCompare( uint32_t inLeft, uint32_t inRight );
120847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
120947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
121047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
121147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Binary Constants ==
121247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
121347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
121447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
121547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	binary_4
121647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
121747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Macro to generate an 4-bit constant using binary notation (e.g. binary_4( 1010 ) == 0xA).
121847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
121947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
122047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	binary_4( a )						binary_4_hex_wrap( hex_digit4( a ) )
122147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_4_hex_wrap( a )				binary_4_hex( a )
122247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_4_hex( a )					( 0x ## a )
122347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
122447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
122547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	binary_8
122647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
122747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Macro to generate an 8-bit constant using binary notation (e.g. binary_8( 01111011 ) == 0x7B).
122847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
122947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
123047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	binary_8( a )						binary_8_hex_wrap( hex_digit8( a ) )
123147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_8_hex_wrap( a )				binary_8_hex( a )
123247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_8_hex( a )					( 0x ## a )
123347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
123447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
123547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	binary_16
123647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
123747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Macro to generate an 16-bit constant using binary notation (e.g. binary_16( 01111011, 01111011 ) == 0x7B7B).
123847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
123947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
124047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	binary_16( a, b )					binary_16_hex_wrap( hex_digit8( a ), hex_digit8( b ) )
124147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_16_hex_wrap( a, b )			binary_16_hex( a, b )
124247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_16_hex( a, b )				( 0x ## a ## b )
124347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
124447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
124547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@defined	binary_32
124647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
124747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Macro to generate an 32-bit constant using binary notation
124847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt				(e.g. binary_32( 01111011, 01111011, 01111011, 01111011 ) == 0x7B7B7B7B).
124947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
125047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
125147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define	binary_32( a, b, c, d )				binary_32_hex_wrap( hex_digit8( a ), hex_digit8( b ), hex_digit8( c ), hex_digit8( d ) )
125247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_32_hex_wrap( a, b, c, d )	binary_32_hex( a, b, c, d )
125347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define binary_32_hex( a, b, c, d )			( 0x ## a ## b ## c ## d )
125447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
125547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Binary Constant Helpers
125647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
125747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define hex_digit8( a )						HEX_DIGIT_ ## a
125847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define hex_digit4( a )						HEX_DIGIT_ ## 0000 ## a
125947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
126047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000000					00
126147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000001					01
126247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000010					02
126347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000011					03
126447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000100					04
126547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000101					05
126647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000110					06
126747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00000111					07
126847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001000					08
126947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001001					09
127047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001010					0A
127147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001011					0B
127247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001100					0C
127347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001101					0D
127447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001110					0E
127547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00001111					0F
127647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010000					10
127747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010001					11
127847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010010					12
127947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010011					13
128047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010100					14
128147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010101					15
128247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010110					16
128347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00010111					17
128447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011000					18
128547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011001					19
128647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011010					1A
128747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011011					1B
128847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011100					1C
128947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011101					1D
129047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011110					1E
129147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00011111					1F
129247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100000					20
129347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100001					21
129447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100010					22
129547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100011					23
129647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100100					24
129747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100101					25
129847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100110					26
129947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00100111					27
130047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101000					28
130147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101001					29
130247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101010					2A
130347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101011					2B
130447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101100					2C
130547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101101					2D
130647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101110					2E
130747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00101111					2F
130847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110000					30
130947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110001					31
131047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110010					32
131147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110011					33
131247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110100					34
131347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110101					35
131447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110110					36
131547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00110111					37
131647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111000					38
131747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111001					39
131847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111010					3A
131947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111011					3B
132047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111100					3C
132147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111101					3D
132247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111110					3E
132347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_00111111					3F
132447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000000					40
132547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000001					41
132647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000010					42
132747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000011					43
132847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000100					44
132947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000101					45
133047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000110					46
133147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01000111					47
133247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001000					48
133347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001001					49
133447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001010					4A
133547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001011					4B
133647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001100					4C
133747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001101					4D
133847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001110					4E
133947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01001111					4F
134047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010000					50
134147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010001					51
134247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010010					52
134347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010011					53
134447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010100					54
134547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010101					55
134647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010110					56
134747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01010111					57
134847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011000					58
134947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011001					59
135047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011010					5A
135147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011011					5B
135247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011100					5C
135347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011101					5D
135447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011110					5E
135547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01011111					5F
135647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100000					60
135747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100001					61
135847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100010					62
135947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100011					63
136047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100100					64
136147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100101					65
136247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100110					66
136347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01100111					67
136447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101000					68
136547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101001					69
136647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101010					6A
136747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101011					6B
136847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101100					6C
136947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101101					6D
137047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101110					6E
137147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01101111					6F
137247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110000					70
137347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110001					71
137447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110010					72
137547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110011					73
137647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110100					74
137747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110101					75
137847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110110					76
137947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01110111					77
138047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111000					78
138147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111001					79
138247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111010					7A
138347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111011					7B
138447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111100					7C
138547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111101					7D
138647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111110					7E
138747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_01111111					7F
138847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000000					80
138947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000001					81
139047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000010					82
139147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000011					83
139247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000100					84
139347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000101					85
139447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000110					86
139547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10000111					87
139647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001000					88
139747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001001					89
139847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001010					8A
139947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001011					8B
140047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001100					8C
140147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001101					8D
140247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001110					8E
140347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10001111					8F
140447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010000					90
140547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010001					91
140647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010010					92
140747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010011					93
140847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010100					94
140947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010101					95
141047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010110					96
141147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10010111					97
141247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011000					98
141347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011001					99
141447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011010					9A
141547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011011					9B
141647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011100					9C
141747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011101					9D
141847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011110					9E
141947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10011111					9F
142047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100000					A0
142147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100001					A1
142247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100010					A2
142347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100011					A3
142447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100100					A4
142547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100101					A5
142647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100110					A6
142747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10100111					A7
142847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101000					A8
142947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101001					A9
143047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101010					AA
143147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101011					AB
143247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101100					AC
143347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101101					AD
143447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101110					AE
143547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10101111					AF
143647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110000					B0
143747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110001					B1
143847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110010					B2
143947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110011					B3
144047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110100					B4
144147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110101					B5
144247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110110					B6
144347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10110111					B7
144447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111000					B8
144547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111001					B9
144647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111010					BA
144747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111011					BB
144847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111100					BC
144947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111101					BD
145047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111110					BE
145147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_10111111					BF
145247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000000					C0
145347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000001					C1
145447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000010					C2
145547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000011					C3
145647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000100					C4
145747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000101					C5
145847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000110					C6
145947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11000111					C7
146047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001000					C8
146147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001001					C9
146247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001010					CA
146347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001011					CB
146447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001100					CC
146547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001101					CD
146647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001110					CE
146747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11001111					CF
146847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010000					D0
146947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010001					D1
147047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010010					D2
147147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010011					D3
147247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010100					D4
147347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010101					D5
147447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010110					D6
147547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11010111					D7
147647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011000					D8
147747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011001					D9
147847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011010					DA
147947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011011					DB
148047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011100					DC
148147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011101					DD
148247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011110					DE
148347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11011111					DF
148447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100000					E0
148547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100001					E1
148647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100010					E2
148747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100011					E3
148847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100100					E4
148947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100101					E5
149047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100110					E6
149147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11100111					E7
149247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101000					E8
149347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101001					E9
149447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101010					EA
149547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101011					EB
149647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101100					EC
149747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101101					ED
149847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101110					EE
149947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11101111					EF
150047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110000					F0
150147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110001					F1
150247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110010					F2
150347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110011					F3
150447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110100					F4
150547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110101					F5
150647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110110					F6
150747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11110111					F7
150847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111000					F8
150947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111001					F9
151047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111010					FA
151147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111011					FB
151247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111100					FC
151347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111101					FD
151447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111110					FE
151547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define HEX_DIGIT_11111111					FF
151647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
151747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0
151847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Debugging ==
151947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
152047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
152147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//---------------------------------------------------------------------------------------------------------------------------
152247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/*!	@function	CommonServicesTest
152347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
152447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	@abstract	Unit test.
152547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/
152647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
152747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG )
152847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#if( TARGET_LANGUAGE_C_LIKE )
152947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt		OSStatus	CommonServicesTest( void );
153047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	#endif
153147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
153247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
153347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#ifdef	__cplusplus
153447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt	}
153547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif
153647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt
153747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif	// __COMMON_SERVICES__
1538