]>
Commit | Line | Data |
---|---|---|
67c8f8a1 A |
1 | /* -*- Mode: C; tab-width: 4 -*- |
2 | * | |
8e92c31c A |
3 | * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved. |
4 | * | |
67c8f8a1 A |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | * you may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8e92c31c | 8 | * |
67c8f8a1 | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
8e92c31c | 10 | * |
67c8f8a1 A |
11 | * Unless required by applicable law or agreed to in writing, software |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
8e92c31c | 15 | * limitations under the License. |
263eeeab | 16 | */ |
8e92c31c A |
17 | |
18 | //--------------------------------------------------------------------------------------------------------------------------- | |
19 | /*! @header CommonServices | |
20 | ||
21 | Common Services for Mac OS X, Linux, Palm, VxWorks, Windows, and Windows CE. | |
22 | */ | |
23 | ||
24 | #ifndef __COMMON_SERVICES__ | |
25 | #define __COMMON_SERVICES__ | |
26 | ||
27 | #ifdef __cplusplus | |
28 | extern "C" { | |
29 | #endif | |
30 | ||
31 | #if 0 | |
32 | #pragma mark == Target == | |
33 | #endif | |
34 | ||
35 | //=========================================================================================================================== | |
36 | // Target | |
37 | //=========================================================================================================================== | |
38 | ||
39 | // Macintosh | |
40 | ||
41 | #if( !defined( TARGET_OS_MAC ) ) | |
42 | #if( ( macintosh || __MACH__ ) && !KERNEL ) | |
43 | // ConditionalMacros.h in CoreServices will define this TARGET_* flag. | |
44 | #else | |
45 | #define TARGET_OS_MAC 0 | |
46 | #endif | |
47 | #endif | |
48 | ||
49 | #if( !defined( TARGET_API_MAC_OSX_KERNEL ) ) | |
50 | #if( __MACH__ && KERNEL ) | |
51 | #define TARGET_API_MAC_OSX_KERNEL 1 | |
52 | #else | |
53 | #define TARGET_API_MAC_OSX_KERNEL 0 | |
54 | #endif | |
55 | #endif | |
56 | ||
57 | // Linux | |
58 | ||
59 | #if( !defined( TARGET_OS_LINUX ) ) | |
60 | #if( defined( __linux__ ) ) | |
61 | #define TARGET_OS_LINUX 1 | |
62 | #else | |
63 | #define TARGET_OS_LINUX 0 | |
64 | #endif | |
65 | #endif | |
66 | ||
32bb7e43 A |
67 | // Solaris |
68 | ||
69 | #if( !defined( TARGET_OS_SOLARIS ) ) | |
70 | #if( defined(solaris) || (defined(__SVR4) && defined(sun)) ) | |
71 | #define TARGET_OS_SOLARIS 1 | |
72 | #else | |
73 | #define TARGET_OS_SOLARIS 0 | |
74 | #endif | |
75 | #endif | |
76 | ||
8e92c31c A |
77 | // Palm |
78 | ||
79 | #if( !defined( TARGET_OS_PALM ) ) | |
80 | #if( defined( __PALMOS_TRAPS__ ) || defined( __PALMOS_ARMLET__ ) ) | |
81 | #define TARGET_OS_PALM 1 | |
82 | #else | |
83 | #define TARGET_OS_PALM 0 | |
84 | #endif | |
85 | #endif | |
86 | ||
87 | // VxWorks | |
88 | ||
89 | #if( !defined( TARGET_OS_VXWORKS ) ) | |
90 | ||
91 | // No predefined macro for VxWorks so just assume VxWorks if nothing else is set. | |
92 | ||
8b5f5b69 | 93 | #if( !macintosh && !__MACH__ && !defined( __linux__ ) && !defined ( __SVR4 ) && !defined ( __sun ) && !defined( __PALMOS_TRAPS__ ) && !defined( __PALMOS_ARMLET__ ) && !defined( _WIN32 ) ) |
8e92c31c A |
94 | #define TARGET_OS_VXWORKS 1 |
95 | #else | |
96 | #define TARGET_OS_VXWORKS 0 | |
97 | #endif | |
98 | #endif | |
99 | ||
100 | // Windows | |
101 | ||
102 | #if( !defined( TARGET_OS_WIN32 ) ) | |
103 | #if( macintosh || __MACH__ ) | |
104 | // ConditionalMacros.h in CoreServices will define this TARGET_* flag. | |
105 | #else | |
106 | #if( defined( _WIN32 ) ) | |
107 | #define TARGET_OS_WIN32 1 | |
108 | #else | |
109 | #define TARGET_OS_WIN32 0 | |
110 | #endif | |
111 | #endif | |
112 | #endif | |
113 | ||
114 | // Windows CE | |
115 | ||
116 | #if( !defined( TARGET_OS_WINDOWS_CE ) ) | |
117 | #if( defined( _WIN32_WCE ) ) | |
118 | #define TARGET_OS_WINDOWS_CE 1 | |
119 | #else | |
120 | #define TARGET_OS_WINDOWS_CE 0 | |
121 | #endif | |
122 | #endif | |
123 | ||
124 | #if 0 | |
125 | #pragma mark == Includes == | |
126 | #endif | |
127 | ||
128 | //=========================================================================================================================== | |
129 | // Includes | |
130 | //=========================================================================================================================== | |
131 | ||
132 | #if( !KERNEL ) | |
32bb7e43 A |
133 | #if defined(WIN32) && !defined(_WSPIAPI_COUNTOF) |
134 | #define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0])) | |
135 | #endif | |
8e92c31c A |
136 | #include <stddef.h> |
137 | #endif | |
138 | ||
139 | #if( ( macintosh || __MACH__ ) && !KERNEL ) | |
140 | ||
141 | #if( defined( __MWERKS__ ) ) | |
142 | #if( __option( c9x ) ) | |
143 | #include <stdbool.h> | |
144 | #endif | |
145 | #else | |
146 | #include <stdbool.h> | |
147 | #endif | |
148 | ||
149 | #include <stdint.h> | |
150 | ||
151 | #if( __MACH__ ) | |
152 | ||
153 | // Mac OS X | |
154 | ||
155 | #include <sys/types.h> | |
156 | #include <netinet/in.h> | |
157 | #include <arpa/inet.h> | |
158 | #include <fcntl.h> | |
159 | #include <pthread.h> | |
160 | #include <sys/ioctl.h> | |
161 | #include <sys/socket.h> | |
162 | #include <unistd.h> | |
67c8f8a1 | 163 | |
8e92c31c A |
164 | #else |
165 | ||
166 | // Classic Mac OS | |
167 | ||
168 | #include <ConditionalMacros.h> | |
169 | #include <MacTypes.h> | |
170 | ||
171 | #endif | |
172 | ||
173 | #elif( KERNEL ) | |
174 | ||
175 | // Mac OS X Kernel | |
176 | ||
177 | #include <stdint.h> | |
178 | ||
179 | #include <libkern/OSTypes.h> | |
180 | #include <sys/types.h> | |
181 | ||
182 | #elif( TARGET_OS_LINUX ) | |
183 | ||
32bb7e43 A |
184 | // Linux |
185 | ||
186 | #include <stdint.h> | |
187 | #include <arpa/inet.h> | |
188 | ||
189 | #elif( TARGET_OS_SOLARIS ) | |
190 | ||
191 | // Solaris | |
192 | ||
193 | #include <stdint.h> | |
194 | ||
195 | #include <arpa/inet.h> | |
196 | #include <arpa/nameser.h> | |
197 | ||
198 | #if ( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) ) | |
199 | #define TARGET_RT_LITTLE_ENDIAN 1 | |
200 | #endif | |
201 | #if ( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) ) | |
202 | #define TARGET_RT_BIG_ENDIAN 1 | |
203 | #endif | |
8e92c31c A |
204 | |
205 | #elif( TARGET_OS_PALM ) | |
206 | ||
207 | // Palm (no special includes yet). | |
208 | ||
209 | #elif( TARGET_OS_VXWORKS ) | |
210 | ||
211 | // VxWorks | |
212 | ||
213 | #include "vxWorks.h" | |
214 | ||
215 | #elif( TARGET_OS_WIN32 ) | |
216 | ||
217 | // Windows | |
218 | ||
219 | #if( !defined( WIN32_WINDOWS ) ) | |
220 | #define WIN32_WINDOWS 0x0401 | |
221 | #endif | |
222 | ||
223 | #if( !defined( _WIN32_WINDOWS ) ) | |
224 | #define _WIN32_WINDOWS 0x0401 | |
225 | #endif | |
226 | ||
227 | #if( !defined( WIN32_LEAN_AND_MEAN ) ) | |
228 | #define WIN32_LEAN_AND_MEAN // Needed to avoid redefinitions by Windows interfaces. | |
229 | #endif | |
230 | ||
231 | #if( defined( __MWERKS__ ) ) | |
232 | ||
233 | #if( __option( c9x ) ) | |
234 | #include <stdbool.h> | |
235 | #endif | |
236 | ||
237 | #include <stdint.h> | |
238 | ||
239 | #elif( defined( _MSC_VER ) ) | |
240 | ||
241 | #pragma warning( disable:4127 ) // Disable "conditional expression is constant" warning for debug macros. | |
242 | #pragma warning( disable:4706 ) // Disable "assignment within conditional expression" for Microsoft headers. | |
243 | ||
244 | #endif | |
245 | ||
246 | #include <windows.h> | |
247 | #include <winsock2.h> | |
248 | #include <Ws2tcpip.h> | |
249 | ||
250 | #if( defined( _MSC_VER ) ) | |
251 | #pragma warning( default:4706 ) | |
252 | #endif | |
253 | ||
254 | #else | |
255 | #error unknown OS - update this file to support your OS | |
256 | #endif | |
257 | ||
258 | #if( !defined( TARGET_BUILD_MAIN ) ) | |
259 | #if( !TARGET_OS_VXWORKS ) | |
260 | #define TARGET_BUILD_MAIN 1 | |
261 | #endif | |
262 | #endif | |
263 | ||
264 | #if( __GNUC__ || !TARGET_OS_VXWORKS ) | |
265 | #define TARGET_LANGUAGE_C_LIKE 1 | |
266 | #else | |
267 | #define TARGET_LANGUAGE_C_LIKE 0 | |
268 | #endif | |
269 | ||
270 | #if 0 | |
271 | #pragma mark == CPU == | |
272 | #endif | |
273 | ||
274 | //=========================================================================================================================== | |
275 | // CPU | |
276 | //=========================================================================================================================== | |
277 | ||
278 | // PowerPC | |
279 | ||
280 | #if( !defined( TARGET_CPU_PPC ) ) | |
281 | #if( defined( __ppc__ ) || defined( __PPC__ ) || defined( powerpc ) || defined( ppc ) || defined( _M_MPPC ) ) | |
282 | #define TARGET_CPU_PPC 1 | |
283 | #else | |
284 | #define TARGET_CPU_PPC 0 | |
285 | #endif | |
286 | #endif | |
287 | ||
288 | // x86 | |
289 | ||
290 | #if( !defined( TARGET_CPU_X86 ) ) | |
291 | #if( __INTEL__ || defined( __i386__ ) || defined( i386 ) || defined( intel ) || defined( _M_IX86 ) ) | |
292 | #define TARGET_CPU_X86 1 | |
293 | #else | |
294 | #define TARGET_CPU_X86 0 | |
295 | #endif | |
296 | #endif | |
297 | ||
298 | // MIPS | |
299 | ||
300 | #if( !defined( TARGET_CPU_MIPS ) ) | |
301 | #if( __MIPS__ || defined( MIPS32 ) || defined( R3000 ) || defined( R4000 ) || defined( R4650 ) || defined( _M_MRX000 ) ) | |
302 | #define TARGET_CPU_MIPS 1 | |
303 | #else | |
304 | #define TARGET_CPU_MIPS 0 | |
305 | #endif | |
306 | #endif | |
307 | ||
308 | #if( !defined( TARGET_CPU_PPC ) && !defined( TARGET_CPU_X86 ) && !defined( TARGET_CPU_MIPS ) ) | |
309 | #error unknown CPU - update this file to support your CPU | |
310 | #endif | |
311 | ||
312 | #if 0 | |
313 | #pragma mark == Byte Order == | |
314 | #endif | |
315 | ||
316 | //=========================================================================================================================== | |
317 | // Byte Order | |
318 | //=========================================================================================================================== | |
319 | ||
320 | // TARGET_RT_LITTLE_ENDIAN | |
321 | ||
322 | #if( !defined( TARGET_RT_LITTLE_ENDIAN ) ) | |
323 | #if( MIPSEL || IL_LITTLE_ENDIAN || defined( __LITTLE_ENDIAN__ ) || \ | |
324 | ( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) ) || \ | |
325 | ( defined( _BYTE_ORDER ) && defined( _LITTLE_ENDIAN ) && ( _BYTE_ORDER == _LITTLE_ENDIAN ) ) || \ | |
326 | ( defined( __BYTE_ORDER ) && defined( __LITTLE_ENDIAN ) && ( __BYTE_ORDER == __LITTLE_ENDIAN ) ) || \ | |
327 | TARGET_CPU_X86 || ( defined( TARGET_RT_BIG_ENDIAN ) && !TARGET_RT_BIG_ENDIAN ) ) | |
328 | #define TARGET_RT_LITTLE_ENDIAN 1 | |
329 | #else | |
330 | #define TARGET_RT_LITTLE_ENDIAN 0 | |
331 | #endif | |
332 | #endif | |
333 | ||
334 | // TARGET_RT_BIG_ENDIAN | |
335 | ||
336 | #if( !defined( TARGET_RT_BIG_ENDIAN ) ) | |
337 | #if( MIPSEB || IL_BIG_ENDIAN || defined( __BIG_ENDIAN__ ) || \ | |
338 | ( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) ) || \ | |
339 | ( defined( _BYTE_ORDER ) && defined( _BIG_ENDIAN ) && ( _BYTE_ORDER == _BIG_ENDIAN ) ) || \ | |
340 | ( defined( __BYTE_ORDER ) && defined( __BIG_ENDIAN ) && ( __BYTE_ORDER == __BIG_ENDIAN ) ) || \ | |
341 | ( defined( TARGET_RT_LITTLE_ENDIAN ) && !TARGET_RT_LITTLE_ENDIAN ) ) | |
342 | #define TARGET_RT_BIG_ENDIAN 1 | |
343 | #else | |
344 | #define TARGET_RT_BIG_ENDIAN 0 | |
345 | #endif | |
346 | #endif | |
347 | ||
348 | #if( defined( TARGET_RT_LITTLE_ENDIAN ) && !defined( TARGET_RT_BIG_ENDIAN ) ) | |
349 | #if( TARGET_RT_LITTLE_ENDIAN ) | |
350 | #define TARGET_RT_BIG_ENDIAN 0 | |
351 | #else | |
352 | #define TARGET_RT_BIG_ENDIAN 1 | |
353 | #endif | |
354 | #endif | |
355 | ||
356 | #if( defined( TARGET_RT_BIG_ENDIAN ) && !defined( TARGET_RT_LITTLE_ENDIAN ) ) | |
357 | #if( TARGET_RT_BIG_ENDIAN ) | |
358 | #define TARGET_RT_LITTLE_ENDIAN 0 | |
359 | #else | |
360 | #define TARGET_RT_LITTLE_ENDIAN 1 | |
361 | #endif | |
362 | #endif | |
363 | ||
364 | #if( !defined( TARGET_RT_LITTLE_ENDIAN ) || !defined( TARGET_RT_BIG_ENDIAN ) ) | |
365 | #error unknown byte order - update this file to support your byte order | |
366 | #endif | |
367 | ||
368 | // TARGET_RT_BYTE_ORDER | |
369 | ||
370 | #if( !defined( TARGET_RT_BYTE_ORDER_BIG_ENDIAN ) ) | |
371 | #define TARGET_RT_BYTE_ORDER_BIG_ENDIAN 1234 | |
372 | #endif | |
373 | ||
374 | #if( !defined( TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN ) ) | |
375 | #define TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN 4321 | |
376 | #endif | |
377 | ||
378 | #if( !defined( TARGET_RT_BYTE_ORDER ) ) | |
379 | #if( TARGET_RT_LITTLE_ENDIAN ) | |
380 | #define TARGET_RT_BYTE_ORDER TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN | |
381 | #else | |
382 | #define TARGET_RT_BYTE_ORDER TARGET_RT_BYTE_ORDER_BIG_ENDIAN | |
383 | #endif | |
384 | #endif | |
385 | ||
386 | #if 0 | |
387 | #pragma mark == Constants == | |
388 | #endif | |
389 | ||
390 | //=========================================================================================================================== | |
391 | // Constants | |
392 | //=========================================================================================================================== | |
393 | ||
394 | #if( !TARGET_OS_MAC ) | |
395 | #define CR '\r' | |
396 | #endif | |
397 | ||
398 | #define LF '\n' | |
399 | #define CRSTR "\r" | |
400 | #define LFSTR "\n" | |
401 | #define CRLF "\r\n" | |
402 | #define CRCR "\r\r" | |
403 | ||
404 | #if 0 | |
405 | #pragma mark == Compatibility == | |
406 | #endif | |
407 | ||
408 | //=========================================================================================================================== | |
409 | // Compatibility | |
410 | //=========================================================================================================================== | |
411 | ||
412 | // Macros to allow the same code to work on Windows and other sockets API-compatible platforms. | |
413 | ||
414 | #if( TARGET_OS_WIN32 ) | |
415 | #define close_compat( X ) closesocket( X ) | |
416 | #define errno_compat() (int) GetLastError() | |
417 | #define set_errno_compat( X ) SetLastError( X ) | |
418 | #define EWOULDBLOCK_compat WSAEWOULDBLOCK | |
419 | #define ETIMEDOUT_compat WSAETIMEDOUT | |
420 | #define ENOTCONN_compat WSAENOTCONN | |
421 | #define IsValidSocket( X ) ( ( X ) != INVALID_SOCKET ) | |
422 | #define kInvalidSocketRef INVALID_SOCKET | |
423 | #if( TARGET_LANGUAGE_C_LIKE ) | |
424 | typedef SOCKET SocketRef; | |
425 | #endif | |
426 | #else | |
427 | #define close_compat( X ) close( X ) | |
428 | #define errno_compat() errno | |
429 | #define set_errno_compat( X ) do { errno = ( X ); } while( 0 ) | |
430 | #define EWOULDBLOCK_compat EWOULDBLOCK | |
431 | #define ETIMEDOUT_compat ETIMEDOUT | |
432 | #define ENOTCONN_compat ENOTCONN | |
433 | #define IsValidSocket( X ) ( ( X ) >= 0 ) | |
434 | #define kInvalidSocketRef -1 | |
435 | #if( TARGET_LANGUAGE_C_LIKE ) | |
436 | typedef int SocketRef; | |
437 | #endif | |
438 | #endif | |
439 | ||
440 | // socklen_t is not defined on the following platforms so emulate it if not defined: | |
441 | // | |
442 | // - Pre-Panther Mac OS X. Panther defines SO_NOADDRERR so trigger off that. | |
443 | // - Windows SDK prior to 2003. 2003+ SDK's define EAI_AGAIN so trigger off that. | |
444 | // - VxWorks | |
445 | ||
446 | #if( TARGET_LANGUAGE_C_LIKE ) | |
447 | #if( ( TARGET_OS_MAC && !defined( SO_NOADDRERR ) ) || ( TARGET_OS_WIN32 && !defined( EAI_AGAIN ) ) || TARGET_OS_VXWORKS ) | |
448 | typedef int socklen_t; | |
449 | #endif | |
450 | #endif | |
451 | ||
452 | // ssize_t is not defined on the following platforms so emulate it if not defined: | |
453 | // | |
454 | // - Mac OS X when not building with BSD headers | |
455 | // - Windows | |
456 | ||
457 | #if( TARGET_LANGUAGE_C_LIKE ) | |
8b5f5b69 | 458 | #if( !defined(_SSIZE_T) && ( TARGET_OS_WIN32 || !defined( _BSD_SSIZE_T_DEFINED_ ) ) && !TARGET_OS_LINUX && !TARGET_OS_VXWORKS && !TARGET_OS_MAC) |
8e92c31c A |
459 | typedef int ssize_t; |
460 | #endif | |
461 | #endif | |
462 | ||
463 | // sockaddr_storage is not supported on non-IPv6 machines so alias it to an IPv4-compatible structure. | |
464 | ||
465 | #if( TARGET_LANGUAGE_C_LIKE ) | |
466 | #if( !defined( AF_INET6 ) ) | |
467 | #define sockaddr_storage sockaddr_in | |
468 | #define ss_family sin_family | |
469 | #endif | |
470 | #endif | |
471 | ||
472 | //--------------------------------------------------------------------------------------------------------------------------- | |
473 | /*! @defined SOCKADDR_IS_IP_LOOPBACK | |
474 | ||
475 | @abstract Determines if a sockaddr is an IPv4 or IPv6 loopback address (if IPv6 is supported). | |
476 | */ | |
477 | ||
478 | #if( defined( AF_INET6 ) ) | |
479 | #define SOCKADDR_IS_IP_LOOPBACK( SA ) \ | |
480 | ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \ | |
481 | ? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) ) \ | |
482 | : ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET6 ) \ | |
483 | ? IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) \ | |
484 | : 0 | |
485 | #else | |
486 | #define SOCKADDR_IS_IP_LOOPBACK( SA ) \ | |
487 | ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \ | |
488 | ? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) ) \ | |
489 | : 0 | |
490 | #endif | |
491 | ||
492 | //--------------------------------------------------------------------------------------------------------------------------- | |
493 | /*! @defined SOCKADDR_IS_IP_LINK_LOCAL | |
494 | ||
495 | @abstract Determines if a sockaddr is an IPv4 or IPv6 link-local address (if IPv6 is supported). | |
496 | */ | |
497 | ||
498 | #if( defined( AF_INET6 ) ) | |
499 | #define SOCKADDR_IS_IP_LINK_LOCAL( SA ) \ | |
500 | ( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \ | |
501 | ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && \ | |
502 | ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) ) \ | |
503 | : IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) ) | |
504 | #else | |
505 | #define SOCKADDR_IS_IP_LINK_LOCAL( SA ) \ | |
506 | ( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET ) \ | |
507 | ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) && \ | |
508 | ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) ) \ | |
509 | : 0 ) | |
510 | #endif | |
511 | ||
512 | // _beginthreadex and _endthreadex are not supported on Windows CE 2.1 or later (the C runtime issues with leaking | |
513 | // resources have apparently been resolved and they seem to have just ripped out support for the API) so map it to | |
514 | // CreateThread on Windows CE. | |
515 | ||
516 | #if( TARGET_OS_WINDOWS_CE ) | |
517 | #define _beginthreadex_compat( SECURITY_PTR, STACK_SIZE, START_ADDRESS, ARG_LIST, FLAGS, THREAD_ID_PTR ) \ | |
518 | (uintptr_t) CreateThread( SECURITY_PTR, STACK_SIZE, (LPTHREAD_START_ROUTINE) START_ADDRESS, ARG_LIST, FLAGS, \ | |
519 | (LPDWORD) THREAD_ID_PTR ) | |
520 | ||
521 | #define _endthreadex_compat( RESULT ) ExitThread( (DWORD) RESULT ) | |
522 | #elif( TARGET_OS_WIN32 ) | |
523 | #define _beginthreadex_compat _beginthreadex | |
524 | #define _endthreadex_compat _endthreadex | |
525 | #endif | |
526 | ||
527 | // The C99 "inline" keyword is not supported by Microsoft compilers, but they do support __inline so map it when needed. | |
528 | ||
529 | #if( defined( _MSC_VER ) ) | |
530 | #define inline_compat __inline | |
531 | #else | |
532 | #define inline_compat inline | |
533 | #endif | |
534 | ||
535 | // Calling conventions | |
536 | ||
537 | #if( !defined( CALLBACK_COMPAT ) ) | |
538 | #if( TARGET_OS_WIN32 || TARGET_OS_WINDOWS_CE ) | |
539 | #define CALLBACK_COMPAT CALLBACK | |
540 | #else | |
541 | #define CALLBACK_COMPAT | |
542 | #endif | |
543 | #endif | |
544 | ||
545 | #if 0 | |
546 | #pragma mark == Macros == | |
547 | #endif | |
548 | ||
549 | //--------------------------------------------------------------------------------------------------------------------------- | |
550 | /*! @defined kSizeCString | |
551 | ||
552 | @abstract A meta-value to pass to supported routines to indicate the size should be calculated with strlen. | |
553 | */ | |
554 | ||
555 | #define kSizeCString ( (size_t) -1 ) | |
556 | ||
557 | //--------------------------------------------------------------------------------------------------------------------------- | |
558 | /*! @defined sizeof_array | |
559 | ||
560 | @abstract Determines the number of elements in an array. | |
561 | */ | |
562 | ||
563 | #define sizeof_array( X ) ( sizeof( X ) / sizeof( X[ 0 ] ) ) | |
564 | ||
565 | //--------------------------------------------------------------------------------------------------------------------------- | |
566 | /*! @defined sizeof_element | |
567 | ||
568 | @abstract Determines the size of an array element. | |
569 | */ | |
570 | ||
571 | #define sizeof_element( X ) sizeof( X[ 0 ] ) | |
572 | ||
573 | //--------------------------------------------------------------------------------------------------------------------------- | |
574 | /*! @defined sizeof_string | |
575 | ||
576 | @abstract Determines the size of a constant C string, excluding the null terminator. | |
577 | */ | |
578 | ||
579 | #define sizeof_string( X ) ( sizeof( ( X ) ) - 1 ) | |
580 | ||
581 | //--------------------------------------------------------------------------------------------------------------------------- | |
582 | /*! @defined sizeof_field | |
583 | ||
584 | @abstract Determines the size of a field of a type. | |
585 | */ | |
586 | ||
587 | #define sizeof_field( TYPE, FIELD ) sizeof( ( ( (TYPE *) 0 )->FIELD ) ) | |
588 | ||
589 | //--------------------------------------------------------------------------------------------------------------------------- | |
590 | /*! @function RoundUp | |
591 | ||
592 | @abstract Rounds X up to a multiple of Y. | |
593 | */ | |
594 | ||
595 | #define RoundUp( X, Y ) ( ( X ) + ( ( Y ) - ( ( X ) % ( Y ) ) ) ) | |
596 | ||
597 | //--------------------------------------------------------------------------------------------------------------------------- | |
598 | /*! @function IsAligned | |
599 | ||
600 | @abstract Returns non-zero if X is aligned to a Y byte boundary and 0 if not. Y must be a power of 2. | |
601 | */ | |
602 | ||
603 | #define IsAligned( X, Y ) ( ( ( X ) & ( ( Y ) - 1 ) ) == 0 ) | |
604 | ||
605 | //--------------------------------------------------------------------------------------------------------------------------- | |
606 | /*! @function IsFieldAligned | |
607 | ||
608 | @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. | |
609 | */ | |
610 | ||
611 | #define IsFieldAligned( X, TYPE, FIELD, Y ) IsAligned( ( (uintptr_t)( X ) ) + offsetof( TYPE, FIELD ), ( Y ) ) | |
612 | ||
613 | //--------------------------------------------------------------------------------------------------------------------------- | |
614 | /*! @function AlignDown | |
615 | ||
616 | @abstract Aligns X down to a Y byte boundary. Y must be a power of 2. | |
617 | */ | |
618 | ||
619 | #define AlignDown( X, Y ) ( ( X ) & ~( ( Y ) - 1 ) ) | |
620 | ||
621 | //--------------------------------------------------------------------------------------------------------------------------- | |
622 | /*! @function AlignUp | |
623 | ||
624 | @abstract Aligns X up to a Y byte boundary. Y must be a power of 2. | |
625 | */ | |
626 | ||
627 | #define AlignUp( X, Y ) ( ( ( X ) + ( ( Y ) - 1 ) ) & ~( ( Y ) - 1 ) ) | |
628 | ||
629 | //--------------------------------------------------------------------------------------------------------------------------- | |
630 | /*! @function Min | |
631 | ||
632 | @abstract Returns the lesser of X and Y. | |
633 | */ | |
634 | ||
635 | #if( !defined( Min ) ) | |
636 | #define Min( X, Y ) ( ( ( X ) < ( Y ) ) ? ( X ) : ( Y ) ) | |
637 | #endif | |
638 | ||
639 | //--------------------------------------------------------------------------------------------------------------------------- | |
640 | /*! @function Max | |
641 | ||
642 | @abstract Returns the greater of X and Y. | |
643 | */ | |
644 | ||
645 | #if( !defined( Max ) ) | |
646 | #define Max( X, Y ) ( ( ( X ) > ( Y ) ) ? ( X ) : ( Y ) ) | |
647 | #endif | |
648 | ||
649 | //--------------------------------------------------------------------------------------------------------------------------- | |
650 | /*! @function InsertBits | |
651 | ||
652 | @abstract Inserts BITS (both 0 and 1 bits) into X, controlled by MASK and SHIFT, and returns the result. | |
653 | ||
654 | @discussion | |
655 | ||
656 | MASK is the bitmask of the bits in the final position. | |
657 | SHIFT is the number of bits to shift left for 1 to reach the first bit position of MASK. | |
658 | ||
659 | For example, if you wanted to insert 0x3 into the leftmost 4 bits of a 32-bit value: | |
660 | ||
661 | InsertBits( 0, 0x3, 0xF0000000U, 28 ) == 0x30000000 | |
662 | */ | |
663 | ||
664 | #define InsertBits( X, BITS, MASK, SHIFT ) ( ( ( X ) & ~( MASK ) ) | ( ( ( BITS ) << ( SHIFT ) ) & ( MASK ) ) ) | |
665 | ||
666 | //--------------------------------------------------------------------------------------------------------------------------- | |
667 | /*! @function ExtractBits | |
668 | ||
669 | @abstract Extracts bits from X, controlled by MASK and SHIFT, and returns the result. | |
670 | ||
671 | @discussion | |
672 | ||
673 | MASK is the bitmask of the bits in the final position. | |
674 | SHIFT is the number of bits to shift right to right justify MASK. | |
675 | ||
676 | For example, if you had a 32-bit value (e.g. 0x30000000) wanted the left-most 4 bits (e.g. 3 in this example): | |
677 | ||
678 | ExtractBits( 0x30000000U, 0xF0000000U, 28 ) == 0x3 | |
679 | */ | |
680 | ||
681 | #define ExtractBits( X, MASK, SHIFT ) ( ( ( X ) >> ( SHIFT ) ) & ( ( MASK ) >> ( SHIFT ) ) ) | |
682 | ||
683 | //--------------------------------------------------------------------------------------------------------------------------- | |
684 | /*! @function Stringify | |
685 | ||
686 | @abstract Stringify's an expression. | |
687 | ||
688 | @discussion | |
689 | ||
690 | Stringify macros to process raw text passed via -D options to C string constants. The double-wrapping is necessary | |
691 | because the C preprocessor doesn't perform its normal argument expansion pre-scan with stringified macros so the | |
692 | -D macro needs to be expanded once via the wrapper macro then stringified so the raw text is stringified. Otherwise, | |
693 | the replacement value would be used instead of the symbolic name (only for preprocessor symbols like #defines). | |
694 | ||
695 | For example: | |
696 | ||
697 | #define kMyConstant 1 | |
698 | ||
699 | printf( "%s", Stringify( kMyConstant ) ); // Prints "kMyConstant" | |
700 | printf( "%s", StringifyExpansion( kMyConstant ) ); // Prints "1" | |
701 | ||
702 | Non-preprocessor symbols do not have this issue. For example: | |
703 | ||
704 | enum | |
705 | { | |
706 | kMyConstant = 1 | |
707 | }; | |
708 | ||
709 | printf( "%s", Stringify( kMyConstant ) ); // Prints "kMyConstant" | |
710 | printf( "%s", StringifyExpansion( kMyConstant ) ); // Prints "kMyConstant" | |
711 | ||
712 | See <http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html> for more info on C preprocessor pre-scanning. | |
713 | */ | |
714 | ||
715 | #define Stringify( X ) # X | |
716 | #define StringifyExpansion( X ) Stringify( X ) | |
717 | ||
718 | #if 0 | |
719 | #pragma mark == Types == | |
720 | #endif | |
721 | ||
722 | #if( TARGET_LANGUAGE_C_LIKE ) | |
723 | //=========================================================================================================================== | |
724 | // Standard Types | |
725 | //=========================================================================================================================== | |
726 | ||
727 | #if( !defined( INT8_MIN ) ) | |
728 | ||
729 | #define INT8_MIN SCHAR_MIN | |
730 | ||
731 | #if( defined( _MSC_VER ) ) | |
732 | ||
733 | // C99 stdint.h not supported in VC++/VS.NET yet. | |
734 | ||
735 | typedef INT8 int8_t; | |
736 | typedef UINT8 uint8_t; | |
737 | typedef INT16 int16_t; | |
738 | typedef UINT16 uint16_t; | |
739 | typedef INT32 int32_t; | |
740 | typedef UINT32 uint32_t; | |
741 | typedef __int64 int64_t; | |
742 | typedef unsigned __int64 uint64_t; | |
743 | ||
744 | #elif( TARGET_OS_VXWORKS && ( TORNADO_VERSION < 220 ) ) | |
745 | typedef long long int64_t; | |
746 | typedef unsigned long long uint64_t; | |
747 | #endif | |
748 | ||
749 | typedef int8_t int_least8_t; | |
750 | typedef int16_t int_least16_t; | |
751 | typedef int32_t int_least32_t; | |
752 | typedef int64_t int_least64_t; | |
753 | ||
754 | typedef uint8_t uint_least8_t; | |
755 | typedef uint16_t uint_least16_t; | |
756 | typedef uint32_t uint_least32_t; | |
757 | typedef uint64_t uint_least64_t; | |
758 | ||
759 | typedef int8_t int_fast8_t; | |
760 | typedef int16_t int_fast16_t; | |
761 | typedef int32_t int_fast32_t; | |
762 | typedef int64_t int_fast64_t; | |
763 | ||
764 | typedef uint8_t uint_fast8_t; | |
765 | typedef uint16_t uint_fast16_t; | |
766 | typedef uint32_t uint_fast32_t; | |
767 | typedef uint64_t uint_fast64_t; | |
768 | ||
769 | #if( !defined( _MSC_VER ) || TARGET_OS_WINDOWS_CE ) | |
770 | typedef long int intptr_t; | |
771 | typedef unsigned long int uintptr_t; | |
772 | #endif | |
773 | ||
774 | #endif | |
775 | ||
776 | // Macros for minimum-width integer constants | |
777 | ||
778 | #if( !defined( INT8_C ) ) | |
779 | #define INT8_C( value ) value | |
780 | #endif | |
781 | ||
782 | #if( !defined( INT16_C ) ) | |
783 | #define INT16_C( value ) value | |
784 | #endif | |
785 | ||
786 | #if( !defined( INT32_C ) ) | |
787 | #define INT32_C( value ) value ## L | |
788 | #endif | |
789 | ||
790 | #if( !defined( INT64_C ) ) | |
791 | #if( defined( _MSC_VER ) ) | |
792 | #define INT64_C( value ) value ## i64 | |
793 | #else | |
794 | #define INT64_C( value ) value ## LL | |
795 | #endif | |
796 | #endif | |
797 | ||
798 | #if( !defined( UINT8_C ) ) | |
799 | #define UINT8_C( value ) value ## U | |
800 | #endif | |
801 | ||
802 | #if( !defined( UINT16_C ) ) | |
803 | #define UINT16_C( value ) value ## U | |
804 | #endif | |
805 | ||
806 | #if( !defined( UINT32_C ) ) | |
807 | #define UINT32_C( value ) value ## UL | |
808 | #endif | |
809 | ||
810 | #if( !defined( UINT64_C ) ) | |
811 | #if( defined( _MSC_VER ) ) | |
812 | #define UINT64_C( value ) value ## UI64 | |
813 | #else | |
814 | #define UINT64_C( value ) value ## ULL | |
815 | #endif | |
816 | #endif | |
817 | ||
818 | #if 0 | |
819 | #pragma mark == bool == | |
820 | #endif | |
821 | ||
822 | //=========================================================================================================================== | |
823 | // Boolean Constants and Types | |
824 | //=========================================================================================================================== | |
825 | ||
826 | // C++ defines bool, true, and false. Metrowerks allows this to be controlled by the "bool" option though. | |
827 | // C99 defines __bool_true_false_are_defined when bool, true, and false are defined. | |
828 | // MacTypes.h defines true and false (Mac builds only). | |
829 | // | |
830 | // Note: The Metrowerks has to be in its own block because Microsoft Visual Studio .NET does not completely | |
831 | // short-circuit and gets confused by the option( bool ) portion of the conditional. | |
832 | ||
833 | #if( defined( __MWERKS__ ) ) | |
834 | ||
835 | // Note: The following test is done on separate lines because CodeWarrior doesn't like it all on one line. | |
836 | ||
837 | #if( !__bool_true_false_are_defined && ( !defined( __cplusplus ) || !__option( bool ) ) ) | |
838 | #define COMMON_SERVICES_NEEDS_BOOL 1 | |
839 | #else | |
840 | #define COMMON_SERVICES_NEEDS_BOOL 0 | |
841 | #endif | |
842 | ||
843 | // Workaround when building with CodeWarrior, but using the Apple stdbool.h header, which uses _Bool. | |
844 | ||
845 | #if( __bool_true_false_are_defined && !defined( __cplusplus ) && !__option( c9x ) ) | |
846 | #define _Bool int | |
847 | #endif | |
848 | ||
849 | // Workaround when building with CodeWarrior for C++ with bool disabled and using the Apple stdbool.h header, | |
850 | // which defines true and false to map to C++ true and false (which are not enabled). Serenity Now! | |
851 | ||
852 | #if( __bool_true_false_are_defined && defined( __cplusplus ) && !__option( bool ) ) | |
853 | #define true 1 | |
854 | #define false 0 | |
855 | #endif | |
856 | #else | |
857 | #define COMMON_SERVICES_NEEDS_BOOL ( !defined( __cplusplus ) && !__bool_true_false_are_defined ) | |
858 | #endif | |
859 | ||
860 | #if( COMMON_SERVICES_NEEDS_BOOL ) | |
861 | ||
862 | typedef int bool; | |
863 | ||
864 | #define bool bool | |
865 | ||
866 | #if( !defined( __MACTYPES__ ) && !defined( true ) && !defined( false ) ) | |
867 | #define true 1 | |
868 | #define false 0 | |
869 | #endif | |
870 | ||
871 | #define __bool_true_false_are_defined 1 | |
872 | #endif | |
873 | ||
874 | // IOKit IOTypes.h typedef's bool if TYPE_BOOL is not defined so define it here to prevent redefinition by IOTypes.h. | |
875 | ||
876 | #if( TARGET_API_MAC_OSX_KERNEL ) | |
877 | #define TYPE_BOOL 1 | |
878 | #endif | |
879 | ||
880 | //--------------------------------------------------------------------------------------------------------------------------- | |
881 | /*! @typedef CStr255 | |
882 | ||
883 | @abstract 255 character null-terminated (C-style) string. | |
884 | */ | |
885 | ||
886 | #if( TARGET_LANGUAGE_C_LIKE ) | |
887 | typedef char CStr255[ 256 ]; | |
888 | #endif | |
889 | ||
890 | #endif // TARGET_LANGUAGE_C_LIKE | |
891 | ||
892 | //--------------------------------------------------------------------------------------------------------------------------- | |
893 | /*! @defined TYPE_LONGLONG_NATIVE | |
894 | ||
895 | @abstract Defines whether long long (or its equivalent) is natively supported or requires special libraries. | |
896 | */ | |
897 | ||
898 | #if( !defined( TYPE_LONGLONG_NATIVE ) ) | |
899 | #if( !TARGET_OS_VXWORKS ) | |
900 | #define TYPE_LONGLONG_NATIVE 1 | |
901 | #else | |
902 | #define TYPE_LONGLONG_NATIVE 0 | |
903 | #endif | |
904 | #endif | |
905 | ||
906 | //--------------------------------------------------------------------------------------------------------------------------- | |
907 | /*! @defined long_long_compat | |
908 | ||
909 | @abstract Compatibility type to map to the closest thing to long long and unsigned long long. | |
910 | ||
911 | @discussion | |
912 | ||
913 | Neither long long nor unsigned long long are supported by Microsoft compilers, but they do support proprietary | |
914 | "__int64" and "unsigned __int64" equivalents so map to those types if the real long long is not supported. | |
915 | */ | |
916 | ||
917 | #if( TARGET_LANGUAGE_C_LIKE ) | |
918 | #if( TARGET_OS_WIN32 ) | |
919 | typedef __int64 long_long_compat; | |
920 | typedef unsigned __int64 unsigned_long_long_compat; | |
921 | #else | |
922 | typedef signed long long long_long_compat; | |
923 | typedef unsigned long long unsigned_long_long_compat; | |
924 | #endif | |
925 | #endif | |
926 | ||
927 | #if 0 | |
928 | #pragma mark == Errors == | |
929 | #endif | |
930 | ||
931 | //--------------------------------------------------------------------------------------------------------------------------- | |
932 | /*! @enum OSStatus | |
933 | ||
934 | @abstract Status Code | |
935 | ||
936 | @constant kNoErr 0 No error occurred. | |
937 | @constant kInProgressErr 1 Operation in progress. | |
938 | @constant kUnknownErr -6700 Unknown error occurred. | |
939 | @constant kOptionErr -6701 Option was not acceptable. | |
940 | @constant kSelectorErr -6702 Selector passed in is invalid or unknown. | |
941 | @constant kExecutionStateErr -6703 Call made in the wrong execution state (e.g. called at interrupt time). | |
942 | @constant kPathErr -6704 Path is invalid, too long, or otherwise not usable. | |
943 | @constant kParamErr -6705 Parameter is incorrect, missing, or not appropriate. | |
944 | @constant kParamCountErr -6706 Incorrect or unsupported number of parameters. | |
945 | @constant kCommandErr -6707 Command invalid or not supported. | |
946 | @constant kIDErr -6708 Unknown, invalid, or inappropriate identifier. | |
947 | @constant kStateErr -6709 Not in appropriate state to perform operation. | |
948 | @constant kRangeErr -6710 Index is out of range or not valid. | |
949 | @constant kRequestErr -6711 Request was improperly formed or not appropriate. | |
950 | @constant kResponseErr -6712 Response was incorrect or out of sequence. | |
951 | @constant kChecksumErr -6713 Checksum does not match the actual data. | |
952 | @constant kNotHandledErr -6714 Operation was not handled (or not handled completely). | |
953 | @constant kVersionErr -6715 Version is not incorrect or not compatibile. | |
954 | @constant kSignatureErr -6716 Signature did not match what was expected. | |
955 | @constant kFormatErr -6717 Unknown, invalid, or inappropriate file/data format. | |
956 | @constant kNotInitializedErr -6718 Action request before needed services were initialized. | |
957 | @constant kAlreadyInitializedErr -6719 Attempt made to initialize when already initialized. | |
958 | @constant kNotInUseErr -6720 Object not in use (e.g. cannot abort if not already in use). | |
959 | @constant kInUseErr -6721 Object is in use (e.g. cannot reuse active param blocks). | |
960 | @constant kTimeoutErr -6722 Timeout occurred. | |
961 | @constant kCanceledErr -6723 Operation canceled (successful cancel). | |
962 | @constant kAlreadyCanceledErr -6724 Operation has already been canceled. | |
963 | @constant kCannotCancelErr -6725 Operation could not be canceled (maybe already done or invalid). | |
964 | @constant kDeletedErr -6726 Object has already been deleted. | |
965 | @constant kNotFoundErr -6727 Something was not found. | |
966 | @constant kNoMemoryErr -6728 Not enough memory was available to perform the operation. | |
967 | @constant kNoResourcesErr -6729 Resources unavailable to perform the operation. | |
968 | @constant kDuplicateErr -6730 Duplicate found or something is a duplicate. | |
969 | @constant kImmutableErr -6731 Entity is not changeable. | |
970 | @constant kUnsupportedDataErr -6732 Data is unknown or not supported. | |
971 | @constant kIntegrityErr -6733 Data is corrupt. | |
972 | @constant kIncompatibleErr -6734 Data is not compatible or it is in an incompatible format. | |
973 | @constant kUnsupportedErr -6735 Feature or option is not supported. | |
974 | @constant kUnexpectedErr -6736 Error occurred that was not expected. | |
975 | @constant kValueErr -6737 Value is not appropriate. | |
976 | @constant kNotReadableErr -6738 Could not read or reading is not allowed. | |
977 | @constant kNotWritableErr -6739 Could not write or writing is not allowed. | |
978 | @constant kBadReferenceErr -6740 An invalid or inappropriate reference was specified. | |
979 | @constant kFlagErr -6741 An invalid, inappropriate, or unsupported flag was specified. | |
980 | @constant kMalformedErr -6742 Something was not formed correctly. | |
981 | @constant kSizeErr -6743 Size was too big, too small, or not appropriate. | |
982 | @constant kNameErr -6744 Name was not correct, allowed, or appropriate. | |
983 | @constant kNotReadyErr -6745 Device or service is not ready. | |
984 | @constant kReadErr -6746 Could not read. | |
985 | @constant kWriteErr -6747 Could not write. | |
986 | @constant kMismatchErr -6748 Something does not match. | |
987 | @constant kDateErr -6749 Date is invalid or out-of-range. | |
988 | @constant kUnderrunErr -6750 Less data than expected. | |
989 | @constant kOverrunErr -6751 More data than expected. | |
990 | @constant kEndingErr -6752 Connection, session, or something is ending. | |
991 | @constant kConnectionErr -6753 Connection failed or could not be established. | |
992 | @constant kAuthenticationErr -6754 Authentication failed or is not supported. | |
993 | @constant kOpenErr -6755 Could not open file, pipe, device, etc. | |
994 | @constant kTypeErr -6756 Incorrect or incompatible type (e.g. file, data, etc.). | |
995 | @constant kSkipErr -6757 Items should be or was skipped. | |
996 | @constant kNoAckErr -6758 No acknowledge. | |
997 | @constant kCollisionErr -6759 Collision occurred (e.g. two on bus at same time). | |
998 | @constant kBackoffErr -6760 Backoff in progress and operation intentionally failed. | |
999 | @constant kNoAddressAckErr -6761 No acknowledge of address. | |
1000 | @constant kBusyErr -6762 Cannot perform because something is busy. | |
1001 | @constant kNoSpaceErr -6763 Not enough space to perform operation. | |
1002 | */ | |
1003 | ||
1004 | #if( TARGET_LANGUAGE_C_LIKE ) | |
1005 | #if( !TARGET_OS_MAC && !TARGET_API_MAC_OSX_KERNEL ) | |
1006 | typedef int32_t OSStatus; | |
1007 | #endif | |
1008 | #endif | |
1009 | ||
1010 | #define kNoErr 0 | |
1011 | #define kInProgressErr 1 | |
1012 | ||
1013 | // Generic error codes are in the range -6700 to -6779. | |
1014 | ||
1015 | #define kGenericErrorBase -6700 // Starting error code for all generic errors. | |
1016 | ||
1017 | #define kUnknownErr -6700 | |
1018 | #define kOptionErr -6701 | |
1019 | #define kSelectorErr -6702 | |
1020 | #define kExecutionStateErr -6703 | |
1021 | #define kPathErr -6704 | |
1022 | #define kParamErr -6705 | |
1023 | #define kParamCountErr -6706 | |
1024 | #define kCommandErr -6707 | |
1025 | #define kIDErr -6708 | |
1026 | #define kStateErr -6709 | |
1027 | #define kRangeErr -6710 | |
1028 | #define kRequestErr -6711 | |
1029 | #define kResponseErr -6712 | |
1030 | #define kChecksumErr -6713 | |
1031 | #define kNotHandledErr -6714 | |
1032 | #define kVersionErr -6715 | |
1033 | #define kSignatureErr -6716 | |
1034 | #define kFormatErr -6717 | |
1035 | #define kNotInitializedErr -6718 | |
1036 | #define kAlreadyInitializedErr -6719 | |
1037 | #define kNotInUseErr -6720 | |
1038 | #define kInUseErr -6721 | |
1039 | #define kTimeoutErr -6722 | |
1040 | #define kCanceledErr -6723 | |
1041 | #define kAlreadyCanceledErr -6724 | |
1042 | #define kCannotCancelErr -6725 | |
1043 | #define kDeletedErr -6726 | |
1044 | #define kNotFoundErr -6727 | |
1045 | #define kNoMemoryErr -6728 | |
1046 | #define kNoResourcesErr -6729 | |
1047 | #define kDuplicateErr -6730 | |
1048 | #define kImmutableErr -6731 | |
1049 | #define kUnsupportedDataErr -6732 | |
1050 | #define kIntegrityErr -6733 | |
1051 | #define kIncompatibleErr -6734 | |
1052 | #define kUnsupportedErr -6735 | |
1053 | #define kUnexpectedErr -6736 | |
1054 | #define kValueErr -6737 | |
1055 | #define kNotReadableErr -6738 | |
1056 | #define kNotWritableErr -6739 | |
1057 | #define kBadReferenceErr -6740 | |
1058 | #define kFlagErr -6741 | |
1059 | #define kMalformedErr -6742 | |
1060 | #define kSizeErr -6743 | |
1061 | #define kNameErr -6744 | |
1062 | #define kNotReadyErr -6745 | |
1063 | #define kReadErr -6746 | |
1064 | #define kWriteErr -6747 | |
1065 | #define kMismatchErr -6748 | |
1066 | #define kDateErr -6749 | |
1067 | #define kUnderrunErr -6750 | |
1068 | #define kOverrunErr -6751 | |
1069 | #define kEndingErr -6752 | |
1070 | #define kConnectionErr -6753 | |
1071 | #define kAuthenticationErr -6754 | |
1072 | #define kOpenErr -6755 | |
1073 | #define kTypeErr -6756 | |
1074 | #define kSkipErr -6757 | |
1075 | #define kNoAckErr -6758 | |
1076 | #define kCollisionErr -6759 | |
1077 | #define kBackoffErr -6760 | |
1078 | #define kNoAddressAckErr -6761 | |
1079 | #define kBusyErr -6762 | |
1080 | #define kNoSpaceErr -6763 | |
1081 | ||
1082 | #define kGenericErrorEnd -6779 // Last generic error code (inclusive) | |
1083 | ||
1084 | #if 0 | |
1085 | #pragma mark == Mac Compatibility == | |
1086 | #endif | |
1087 | ||
1088 | //=========================================================================================================================== | |
1089 | // Mac Compatibility | |
1090 | //=========================================================================================================================== | |
1091 | ||
1092 | //--------------------------------------------------------------------------------------------------------------------------- | |
1093 | /*! @enum Duration | |
1094 | ||
1095 | @abstract Type used to specify a duration of time. | |
1096 | ||
1097 | @constant kDurationImmediate Indicates no delay/wait time. | |
1098 | @constant kDurationMicrosecond Microsecond units. | |
1099 | @constant kDurationMillisecond Millisecond units. | |
1100 | @constant kDurationSecond Second units. | |
1101 | @constant kDurationMinute Minute units. | |
1102 | @constant kDurationHour Hour units. | |
1103 | @constant kDurationDay Day units. | |
1104 | @constant kDurationForever Infinite period of time (no timeout). | |
1105 | ||
1106 | @discussion | |
1107 | ||
1108 | Duration values are intended to be multiplied by the specific interval to achieve an actual duration. For example, | |
1109 | to wait for 5 seconds you would use "5 * kDurationSecond". | |
1110 | */ | |
1111 | ||
1112 | #if( TARGET_LANGUAGE_C_LIKE ) | |
1113 | #if( !TARGET_OS_MAC ) | |
1114 | typedef int32_t Duration; | |
1115 | #endif | |
1116 | #endif | |
1117 | ||
1118 | #define kDurationImmediate 0L | |
1119 | #define kDurationMicrosecond -1L | |
1120 | #define kDurationMillisecond 1L | |
1121 | #define kDurationSecond ( 1000L * kDurationMillisecond ) | |
1122 | #define kDurationMinute ( 60L * kDurationSecond ) | |
1123 | #define kDurationHour ( 60L * kDurationMinute ) | |
1124 | #define kDurationDay ( 24L * kDurationHour ) | |
1125 | #define kDurationForever 0x7FFFFFFFL | |
1126 | ||
1127 | // Seconds <-> Minutes <-> Hours <-> Days <-> Weeks <-> Months <-> Years conversions | |
1128 | ||
1129 | #define kNanosecondsPerMicrosecond 1000 | |
1130 | #define kNanosecondsPerMillisecond 1000000 | |
1131 | #define kNanosecondsPerSecond 1000000000 | |
1132 | #define kMicrosecondsPerSecond 1000000 | |
1133 | #define kMicrosecondsPerMillisecond 1000 | |
1134 | #define kMillisecondsPerSecond 1000 | |
1135 | #define kSecondsPerMinute 60 | |
1136 | #define kSecondsPerHour ( 60 * 60 ) // 3600 | |
1137 | #define kSecondsPerDay ( 60 * 60 * 24 ) // 86400 | |
1138 | #define kSecondsPerWeek ( 60 * 60 * 24 * 7 ) // 604800 | |
1139 | #define kMinutesPerHour 60 | |
1140 | #define kMinutesPerDay ( 60 * 24 ) // 1440 | |
1141 | #define kHoursPerDay 24 | |
1142 | #define kDaysPerWeek 7 | |
1143 | #define kWeeksPerYear 52 | |
1144 | #define kMonthsPerYear 12 | |
1145 | ||
1146 | //--------------------------------------------------------------------------------------------------------------------------- | |
1147 | /*! @defined VersionStages | |
1148 | ||
1149 | @abstract NumVersion-style version stages. | |
1150 | */ | |
1151 | ||
1152 | #define kVersionStageDevelopment 0x20 | |
1153 | #define kVersionStageAlpha 0x40 | |
1154 | #define kVersionStageBeta 0x60 | |
1155 | #define kVersionStageFinal 0x80 | |
1156 | ||
1157 | //--------------------------------------------------------------------------------------------------------------------------- | |
1158 | /*! @function NumVersionBuild | |
1159 | ||
1160 | @abstract Builds a 32-bit Mac-style NumVersion value (e.g. NumVersionBuild( 1, 2, 3, kVersionStageBeta, 4 ) -> 1.2.3b4). | |
1161 | */ | |
1162 | ||
1163 | #define NumVersionBuild( MAJOR, MINOR, BUGFIX, STAGE, REV ) \ | |
1164 | ( ( ( ( MAJOR ) & 0xFF ) << 24 ) | \ | |
1165 | ( ( ( MINOR ) & 0x0F ) << 20 ) | \ | |
1166 | ( ( ( BUGFIX ) & 0x0F ) << 16 ) | \ | |
1167 | ( ( ( STAGE ) & 0xFF ) << 8 ) | \ | |
1168 | ( ( ( REV ) & 0xFF ) ) ) | |
1169 | ||
1170 | #define NumVersionExtractMajor( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 24 ) & 0xFF ) ) | |
1171 | #define NumVersionExtractMinorAndBugFix( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0xFF ) ) | |
1172 | #define NumVersionExtractMinor( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 20 ) & 0x0F ) ) | |
1173 | #define NumVersionExtractBugFix( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0x0F ) ) | |
1174 | #define NumVersionExtractStage( VERSION ) ( (uint8_t)( ( ( VERSION ) >> 8 ) & 0xFF ) ) | |
1175 | #define NumVersionExtractRevision( VERSION ) ( (uint8_t)( ( VERSION ) & 0xFF ) ) | |
1176 | ||
1177 | //--------------------------------------------------------------------------------------------------------------------------- | |
1178 | /*! @function NumVersionCompare | |
1179 | ||
1180 | @abstract Compares two NumVersion values and returns the following values: | |
1181 | ||
1182 | left < right -> -1 | |
1183 | left > right -> 1 | |
1184 | left = right -> 0 | |
1185 | */ | |
1186 | ||
1187 | #if( TARGET_LANGUAGE_C_LIKE ) | |
1188 | int NumVersionCompare( uint32_t inLeft, uint32_t inRight ); | |
1189 | #endif | |
1190 | ||
1191 | #if 0 | |
1192 | #pragma mark == Binary Constants == | |
1193 | #endif | |
1194 | ||
1195 | //--------------------------------------------------------------------------------------------------------------------------- | |
1196 | /*! @defined binary_4 | |
1197 | ||
1198 | @abstract Macro to generate an 4-bit constant using binary notation (e.g. binary_4( 1010 ) == 0xA). | |
1199 | */ | |
1200 | ||
1201 | #define binary_4( a ) binary_4_hex_wrap( hex_digit4( a ) ) | |
1202 | #define binary_4_hex_wrap( a ) binary_4_hex( a ) | |
1203 | #define binary_4_hex( a ) ( 0x ## a ) | |
1204 | ||
1205 | //--------------------------------------------------------------------------------------------------------------------------- | |
1206 | /*! @defined binary_8 | |
1207 | ||
1208 | @abstract Macro to generate an 8-bit constant using binary notation (e.g. binary_8( 01111011 ) == 0x7B). | |
1209 | */ | |
1210 | ||
1211 | #define binary_8( a ) binary_8_hex_wrap( hex_digit8( a ) ) | |
1212 | #define binary_8_hex_wrap( a ) binary_8_hex( a ) | |
1213 | #define binary_8_hex( a ) ( 0x ## a ) | |
1214 | ||
1215 | //--------------------------------------------------------------------------------------------------------------------------- | |
1216 | /*! @defined binary_16 | |
1217 | ||
1218 | @abstract Macro to generate an 16-bit constant using binary notation (e.g. binary_16( 01111011, 01111011 ) == 0x7B7B). | |
1219 | */ | |
1220 | ||
1221 | #define binary_16( a, b ) binary_16_hex_wrap( hex_digit8( a ), hex_digit8( b ) ) | |
1222 | #define binary_16_hex_wrap( a, b ) binary_16_hex( a, b ) | |
1223 | #define binary_16_hex( a, b ) ( 0x ## a ## b ) | |
1224 | ||
1225 | //--------------------------------------------------------------------------------------------------------------------------- | |
1226 | /*! @defined binary_32 | |
1227 | ||
1228 | @abstract Macro to generate an 32-bit constant using binary notation | |
1229 | (e.g. binary_32( 01111011, 01111011, 01111011, 01111011 ) == 0x7B7B7B7B). | |
1230 | */ | |
1231 | ||
1232 | #define binary_32( a, b, c, d ) binary_32_hex_wrap( hex_digit8( a ), hex_digit8( b ), hex_digit8( c ), hex_digit8( d ) ) | |
1233 | #define binary_32_hex_wrap( a, b, c, d ) binary_32_hex( a, b, c, d ) | |
1234 | #define binary_32_hex( a, b, c, d ) ( 0x ## a ## b ## c ## d ) | |
1235 | ||
1236 | // Binary Constant Helpers | |
1237 | ||
1238 | #define hex_digit8( a ) HEX_DIGIT_ ## a | |
1239 | #define hex_digit4( a ) HEX_DIGIT_ ## 0000 ## a | |
1240 | ||
1241 | #define HEX_DIGIT_00000000 00 | |
1242 | #define HEX_DIGIT_00000001 01 | |
1243 | #define HEX_DIGIT_00000010 02 | |
1244 | #define HEX_DIGIT_00000011 03 | |
1245 | #define HEX_DIGIT_00000100 04 | |
1246 | #define HEX_DIGIT_00000101 05 | |
1247 | #define HEX_DIGIT_00000110 06 | |
1248 | #define HEX_DIGIT_00000111 07 | |
1249 | #define HEX_DIGIT_00001000 08 | |
1250 | #define HEX_DIGIT_00001001 09 | |
1251 | #define HEX_DIGIT_00001010 0A | |
1252 | #define HEX_DIGIT_00001011 0B | |
1253 | #define HEX_DIGIT_00001100 0C | |
1254 | #define HEX_DIGIT_00001101 0D | |
1255 | #define HEX_DIGIT_00001110 0E | |
1256 | #define HEX_DIGIT_00001111 0F | |
1257 | #define HEX_DIGIT_00010000 10 | |
1258 | #define HEX_DIGIT_00010001 11 | |
1259 | #define HEX_DIGIT_00010010 12 | |
1260 | #define HEX_DIGIT_00010011 13 | |
1261 | #define HEX_DIGIT_00010100 14 | |
1262 | #define HEX_DIGIT_00010101 15 | |
1263 | #define HEX_DIGIT_00010110 16 | |
1264 | #define HEX_DIGIT_00010111 17 | |
1265 | #define HEX_DIGIT_00011000 18 | |
1266 | #define HEX_DIGIT_00011001 19 | |
1267 | #define HEX_DIGIT_00011010 1A | |
1268 | #define HEX_DIGIT_00011011 1B | |
1269 | #define HEX_DIGIT_00011100 1C | |
1270 | #define HEX_DIGIT_00011101 1D | |
1271 | #define HEX_DIGIT_00011110 1E | |
1272 | #define HEX_DIGIT_00011111 1F | |
1273 | #define HEX_DIGIT_00100000 20 | |
1274 | #define HEX_DIGIT_00100001 21 | |
1275 | #define HEX_DIGIT_00100010 22 | |
1276 | #define HEX_DIGIT_00100011 23 | |
1277 | #define HEX_DIGIT_00100100 24 | |
1278 | #define HEX_DIGIT_00100101 25 | |
1279 | #define HEX_DIGIT_00100110 26 | |
1280 | #define HEX_DIGIT_00100111 27 | |
1281 | #define HEX_DIGIT_00101000 28 | |
1282 | #define HEX_DIGIT_00101001 29 | |
1283 | #define HEX_DIGIT_00101010 2A | |
1284 | #define HEX_DIGIT_00101011 2B | |
1285 | #define HEX_DIGIT_00101100 2C | |
1286 | #define HEX_DIGIT_00101101 2D | |
1287 | #define HEX_DIGIT_00101110 2E | |
1288 | #define HEX_DIGIT_00101111 2F | |
1289 | #define HEX_DIGIT_00110000 30 | |
1290 | #define HEX_DIGIT_00110001 31 | |
1291 | #define HEX_DIGIT_00110010 32 | |
1292 | #define HEX_DIGIT_00110011 33 | |
1293 | #define HEX_DIGIT_00110100 34 | |
1294 | #define HEX_DIGIT_00110101 35 | |
1295 | #define HEX_DIGIT_00110110 36 | |
1296 | #define HEX_DIGIT_00110111 37 | |
1297 | #define HEX_DIGIT_00111000 38 | |
1298 | #define HEX_DIGIT_00111001 39 | |
1299 | #define HEX_DIGIT_00111010 3A | |
1300 | #define HEX_DIGIT_00111011 3B | |
1301 | #define HEX_DIGIT_00111100 3C | |
1302 | #define HEX_DIGIT_00111101 3D | |
1303 | #define HEX_DIGIT_00111110 3E | |
1304 | #define HEX_DIGIT_00111111 3F | |
1305 | #define HEX_DIGIT_01000000 40 | |
1306 | #define HEX_DIGIT_01000001 41 | |
1307 | #define HEX_DIGIT_01000010 42 | |
1308 | #define HEX_DIGIT_01000011 43 | |
1309 | #define HEX_DIGIT_01000100 44 | |
1310 | #define HEX_DIGIT_01000101 45 | |
1311 | #define HEX_DIGIT_01000110 46 | |
1312 | #define HEX_DIGIT_01000111 47 | |
1313 | #define HEX_DIGIT_01001000 48 | |
1314 | #define HEX_DIGIT_01001001 49 | |
1315 | #define HEX_DIGIT_01001010 4A | |
1316 | #define HEX_DIGIT_01001011 4B | |
1317 | #define HEX_DIGIT_01001100 4C | |
1318 | #define HEX_DIGIT_01001101 4D | |
1319 | #define HEX_DIGIT_01001110 4E | |
1320 | #define HEX_DIGIT_01001111 4F | |
1321 | #define HEX_DIGIT_01010000 50 | |
1322 | #define HEX_DIGIT_01010001 51 | |
1323 | #define HEX_DIGIT_01010010 52 | |
1324 | #define HEX_DIGIT_01010011 53 | |
1325 | #define HEX_DIGIT_01010100 54 | |
1326 | #define HEX_DIGIT_01010101 55 | |
1327 | #define HEX_DIGIT_01010110 56 | |
1328 | #define HEX_DIGIT_01010111 57 | |
1329 | #define HEX_DIGIT_01011000 58 | |
1330 | #define HEX_DIGIT_01011001 59 | |
1331 | #define HEX_DIGIT_01011010 5A | |
1332 | #define HEX_DIGIT_01011011 5B | |
1333 | #define HEX_DIGIT_01011100 5C | |
1334 | #define HEX_DIGIT_01011101 5D | |
1335 | #define HEX_DIGIT_01011110 5E | |
1336 | #define HEX_DIGIT_01011111 5F | |
1337 | #define HEX_DIGIT_01100000 60 | |
1338 | #define HEX_DIGIT_01100001 61 | |
1339 | #define HEX_DIGIT_01100010 62 | |
1340 | #define HEX_DIGIT_01100011 63 | |
1341 | #define HEX_DIGIT_01100100 64 | |
1342 | #define HEX_DIGIT_01100101 65 | |
1343 | #define HEX_DIGIT_01100110 66 | |
1344 | #define HEX_DIGIT_01100111 67 | |
1345 | #define HEX_DIGIT_01101000 68 | |
1346 | #define HEX_DIGIT_01101001 69 | |
1347 | #define HEX_DIGIT_01101010 6A | |
1348 | #define HEX_DIGIT_01101011 6B | |
1349 | #define HEX_DIGIT_01101100 6C | |
1350 | #define HEX_DIGIT_01101101 6D | |
1351 | #define HEX_DIGIT_01101110 6E | |
1352 | #define HEX_DIGIT_01101111 6F | |
1353 | #define HEX_DIGIT_01110000 70 | |
1354 | #define HEX_DIGIT_01110001 71 | |
1355 | #define HEX_DIGIT_01110010 72 | |
1356 | #define HEX_DIGIT_01110011 73 | |
1357 | #define HEX_DIGIT_01110100 74 | |
1358 | #define HEX_DIGIT_01110101 75 | |
1359 | #define HEX_DIGIT_01110110 76 | |
1360 | #define HEX_DIGIT_01110111 77 | |
1361 | #define HEX_DIGIT_01111000 78 | |
1362 | #define HEX_DIGIT_01111001 79 | |
1363 | #define HEX_DIGIT_01111010 7A | |
1364 | #define HEX_DIGIT_01111011 7B | |
1365 | #define HEX_DIGIT_01111100 7C | |
1366 | #define HEX_DIGIT_01111101 7D | |
1367 | #define HEX_DIGIT_01111110 7E | |
1368 | #define HEX_DIGIT_01111111 7F | |
1369 | #define HEX_DIGIT_10000000 80 | |
1370 | #define HEX_DIGIT_10000001 81 | |
1371 | #define HEX_DIGIT_10000010 82 | |
1372 | #define HEX_DIGIT_10000011 83 | |
1373 | #define HEX_DIGIT_10000100 84 | |
1374 | #define HEX_DIGIT_10000101 85 | |
1375 | #define HEX_DIGIT_10000110 86 | |
1376 | #define HEX_DIGIT_10000111 87 | |
1377 | #define HEX_DIGIT_10001000 88 | |
1378 | #define HEX_DIGIT_10001001 89 | |
1379 | #define HEX_DIGIT_10001010 8A | |
1380 | #define HEX_DIGIT_10001011 8B | |
1381 | #define HEX_DIGIT_10001100 8C | |
1382 | #define HEX_DIGIT_10001101 8D | |
1383 | #define HEX_DIGIT_10001110 8E | |
1384 | #define HEX_DIGIT_10001111 8F | |
1385 | #define HEX_DIGIT_10010000 90 | |
1386 | #define HEX_DIGIT_10010001 91 | |
1387 | #define HEX_DIGIT_10010010 92 | |
1388 | #define HEX_DIGIT_10010011 93 | |
1389 | #define HEX_DIGIT_10010100 94 | |
1390 | #define HEX_DIGIT_10010101 95 | |
1391 | #define HEX_DIGIT_10010110 96 | |
1392 | #define HEX_DIGIT_10010111 97 | |
1393 | #define HEX_DIGIT_10011000 98 | |
1394 | #define HEX_DIGIT_10011001 99 | |
1395 | #define HEX_DIGIT_10011010 9A | |
1396 | #define HEX_DIGIT_10011011 9B | |
1397 | #define HEX_DIGIT_10011100 9C | |
1398 | #define HEX_DIGIT_10011101 9D | |
1399 | #define HEX_DIGIT_10011110 9E | |
1400 | #define HEX_DIGIT_10011111 9F | |
1401 | #define HEX_DIGIT_10100000 A0 | |
1402 | #define HEX_DIGIT_10100001 A1 | |
1403 | #define HEX_DIGIT_10100010 A2 | |
1404 | #define HEX_DIGIT_10100011 A3 | |
1405 | #define HEX_DIGIT_10100100 A4 | |
1406 | #define HEX_DIGIT_10100101 A5 | |
1407 | #define HEX_DIGIT_10100110 A6 | |
1408 | #define HEX_DIGIT_10100111 A7 | |
1409 | #define HEX_DIGIT_10101000 A8 | |
1410 | #define HEX_DIGIT_10101001 A9 | |
1411 | #define HEX_DIGIT_10101010 AA | |
1412 | #define HEX_DIGIT_10101011 AB | |
1413 | #define HEX_DIGIT_10101100 AC | |
1414 | #define HEX_DIGIT_10101101 AD | |
1415 | #define HEX_DIGIT_10101110 AE | |
1416 | #define HEX_DIGIT_10101111 AF | |
1417 | #define HEX_DIGIT_10110000 B0 | |
1418 | #define HEX_DIGIT_10110001 B1 | |
1419 | #define HEX_DIGIT_10110010 B2 | |
1420 | #define HEX_DIGIT_10110011 B3 | |
1421 | #define HEX_DIGIT_10110100 B4 | |
1422 | #define HEX_DIGIT_10110101 B5 | |
1423 | #define HEX_DIGIT_10110110 B6 | |
1424 | #define HEX_DIGIT_10110111 B7 | |
1425 | #define HEX_DIGIT_10111000 B8 | |
1426 | #define HEX_DIGIT_10111001 B9 | |
1427 | #define HEX_DIGIT_10111010 BA | |
1428 | #define HEX_DIGIT_10111011 BB | |
1429 | #define HEX_DIGIT_10111100 BC | |
1430 | #define HEX_DIGIT_10111101 BD | |
1431 | #define HEX_DIGIT_10111110 BE | |
1432 | #define HEX_DIGIT_10111111 BF | |
1433 | #define HEX_DIGIT_11000000 C0 | |
1434 | #define HEX_DIGIT_11000001 C1 | |
1435 | #define HEX_DIGIT_11000010 C2 | |
1436 | #define HEX_DIGIT_11000011 C3 | |
1437 | #define HEX_DIGIT_11000100 C4 | |
1438 | #define HEX_DIGIT_11000101 C5 | |
1439 | #define HEX_DIGIT_11000110 C6 | |
1440 | #define HEX_DIGIT_11000111 C7 | |
1441 | #define HEX_DIGIT_11001000 C8 | |
1442 | #define HEX_DIGIT_11001001 C9 | |
1443 | #define HEX_DIGIT_11001010 CA | |
1444 | #define HEX_DIGIT_11001011 CB | |
1445 | #define HEX_DIGIT_11001100 CC | |
1446 | #define HEX_DIGIT_11001101 CD | |
1447 | #define HEX_DIGIT_11001110 CE | |
1448 | #define HEX_DIGIT_11001111 CF | |
1449 | #define HEX_DIGIT_11010000 D0 | |
1450 | #define HEX_DIGIT_11010001 D1 | |
1451 | #define HEX_DIGIT_11010010 D2 | |
1452 | #define HEX_DIGIT_11010011 D3 | |
1453 | #define HEX_DIGIT_11010100 D4 | |
1454 | #define HEX_DIGIT_11010101 D5 | |
1455 | #define HEX_DIGIT_11010110 D6 | |
1456 | #define HEX_DIGIT_11010111 D7 | |
1457 | #define HEX_DIGIT_11011000 D8 | |
1458 | #define HEX_DIGIT_11011001 D9 | |
1459 | #define HEX_DIGIT_11011010 DA | |
1460 | #define HEX_DIGIT_11011011 DB | |
1461 | #define HEX_DIGIT_11011100 DC | |
1462 | #define HEX_DIGIT_11011101 DD | |
1463 | #define HEX_DIGIT_11011110 DE | |
1464 | #define HEX_DIGIT_11011111 DF | |
1465 | #define HEX_DIGIT_11100000 E0 | |
1466 | #define HEX_DIGIT_11100001 E1 | |
1467 | #define HEX_DIGIT_11100010 E2 | |
1468 | #define HEX_DIGIT_11100011 E3 | |
1469 | #define HEX_DIGIT_11100100 E4 | |
1470 | #define HEX_DIGIT_11100101 E5 | |
1471 | #define HEX_DIGIT_11100110 E6 | |
1472 | #define HEX_DIGIT_11100111 E7 | |
1473 | #define HEX_DIGIT_11101000 E8 | |
1474 | #define HEX_DIGIT_11101001 E9 | |
1475 | #define HEX_DIGIT_11101010 EA | |
1476 | #define HEX_DIGIT_11101011 EB | |
1477 | #define HEX_DIGIT_11101100 EC | |
1478 | #define HEX_DIGIT_11101101 ED | |
1479 | #define HEX_DIGIT_11101110 EE | |
1480 | #define HEX_DIGIT_11101111 EF | |
1481 | #define HEX_DIGIT_11110000 F0 | |
1482 | #define HEX_DIGIT_11110001 F1 | |
1483 | #define HEX_DIGIT_11110010 F2 | |
1484 | #define HEX_DIGIT_11110011 F3 | |
1485 | #define HEX_DIGIT_11110100 F4 | |
1486 | #define HEX_DIGIT_11110101 F5 | |
1487 | #define HEX_DIGIT_11110110 F6 | |
1488 | #define HEX_DIGIT_11110111 F7 | |
1489 | #define HEX_DIGIT_11111000 F8 | |
1490 | #define HEX_DIGIT_11111001 F9 | |
1491 | #define HEX_DIGIT_11111010 FA | |
1492 | #define HEX_DIGIT_11111011 FB | |
1493 | #define HEX_DIGIT_11111100 FC | |
1494 | #define HEX_DIGIT_11111101 FD | |
1495 | #define HEX_DIGIT_11111110 FE | |
1496 | #define HEX_DIGIT_11111111 FF | |
1497 | ||
1498 | #if 0 | |
1499 | #pragma mark == Debugging == | |
1500 | #endif | |
1501 | ||
1502 | //--------------------------------------------------------------------------------------------------------------------------- | |
1503 | /*! @function CommonServicesTest | |
1504 | ||
1505 | @abstract Unit test. | |
1506 | */ | |
1507 | ||
1508 | #if( DEBUG ) | |
1509 | #if( TARGET_LANGUAGE_C_LIKE ) | |
1510 | OSStatus CommonServicesTest( void ); | |
1511 | #endif | |
1512 | #endif | |
1513 | ||
1514 | #ifdef __cplusplus | |
1515 | } | |
1516 | #endif | |
1517 | ||
1518 | #endif // __COMMON_SERVICES__ |