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