master
  1/*
  2 * Copyright (c) 1993-2011 by Apple Inc.. All rights reserved.
  3 *
  4 * @APPLE_LICENSE_HEADER_START@
  5 * 
  6 * This file contains Original Code and/or Modifications of Original Code
  7 * as defined in and that are subject to the Apple Public Source License
  8 * Version 2.0 (the 'License'). You may not use this file except in
  9 * compliance with the License. Please obtain a copy of the License at
 10 * http://www.opensource.apple.com/apsl/ and read it before using this
 11 * file.
 12 * 
 13 * The Original Code and all software distributed under the License are
 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 18 * Please see the License for the specific language governing rights and
 19 * limitations under the License.
 20 * 
 21 * @APPLE_LICENSE_HEADER_END@
 22 */
 23
 24/*
 25     File:       ConditionalMacros.h
 26 
 27     Contains:   Set up for compiler independent conditionals
 28 
 29     Version:    CarbonCore-769~1
 30  
 31     Bugs?:      For bug reports, consult the following page on
 32                 the World Wide Web:
 33 
 34                     http://developer.apple.com/bugreporter/
 35 
 36*/
 37#ifndef __CONDITIONALMACROS__
 38#define __CONDITIONALMACROS__
 39
 40#include <Availability.h>
 41/****************************************************************************************************
 42    UNIVERSAL_INTERFACES_VERSION
 43    
 44        0x0400 --> version 4.0 (Mac OS X only)
 45        0x0335 --> version 3.4 
 46        0x0331 --> version 3.3.1
 47        0x0330 --> version 3.3
 48        0x0320 --> version 3.2
 49        0x0310 --> version 3.1
 50        0x0301 --> version 3.0.1
 51        0x0300 --> version 3.0
 52        0x0210 --> version 2.1
 53        This conditional did not exist prior to version 2.1
 54****************************************************************************************************/
 55#define UNIVERSAL_INTERFACES_VERSION 0x0400
 56/****************************************************************************************************
 57
 58    All TARGET_* condtionals are set up by TargetConditionals.h
 59
 60****************************************************************************************************/
 61#include <TargetConditionals.h>
 62
 63
 64
 65
 66/****************************************************************************************************
 67
 68    PRAGMA_*
 69    These conditionals specify whether the compiler supports particular #pragma's
 70    
 71        PRAGMA_IMPORT           - Compiler supports: #pragma import on/off/reset
 72        PRAGMA_ONCE             - Compiler supports: #pragma once
 73        PRAGMA_STRUCT_ALIGN     - Compiler supports: #pragma options align=mac68k/power/reset
 74        PRAGMA_STRUCT_PACK      - Compiler supports: #pragma pack(n)
 75        PRAGMA_STRUCT_PACKPUSH  - Compiler supports: #pragma pack(push, n)/pack(pop)
 76        PRAGMA_ENUM_PACK        - Compiler supports: #pragma options(!pack_enums)
 77        PRAGMA_ENUM_ALWAYSINT   - Compiler supports: #pragma enumsalwaysint on/off/reset
 78        PRAGMA_ENUM_OPTIONS     - Compiler supports: #pragma options enum=int/small/reset
 79
 80
 81    FOUR_CHAR_CODE
 82    This conditional is deprecated.  It was used to work around a bug in one obscure compiler that did not pack multiple characters in single quotes rationally.
 83    It was never intended for endian swapping.
 84
 85        FOUR_CHAR_CODE('abcd')  - Convert a four-char-code to the correct 32-bit value
 86
 87
 88    TYPE_*
 89    These conditionals specify whether the compiler supports particular types.
 90
 91        TYPE_LONGLONG               - Compiler supports "long long" 64-bit integers
 92        TYPE_EXTENDED               - Compiler supports "extended" 80/96 bit floating point
 93        TYPE_LONGDOUBLE_IS_DOUBLE   - Compiler implements "long double" same as "double"
 94
 95
 96    FUNCTION_*
 97    These conditionals specify whether the compiler supports particular language extensions
 98    to function prototypes and definitions.
 99
100        FUNCTION_PASCAL         - Compiler supports "pascal void Foo()"
101        FUNCTION_DECLSPEC       - Compiler supports "__declspec(xxx) void Foo()"
102        FUNCTION_WIN32CC        - Compiler supports "void __cdecl Foo()" and "void __stdcall Foo()"
103
104****************************************************************************************************/
105
106#if defined(__GNUC__) && (defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__NEXT_CPP__) || defined(__MACOS_CLASSIC__))
107   /*
108     gcc based compilers used on Mac OS X
109   */
110  #define PRAGMA_IMPORT               0
111  #define PRAGMA_ONCE                 0
112
113  #if __GNUC__ >= 4
114    #define PRAGMA_STRUCT_PACK          1
115    #define PRAGMA_STRUCT_PACKPUSH      1
116  #else
117    #define PRAGMA_STRUCT_PACK          0
118    #define PRAGMA_STRUCT_PACKPUSH      0
119  #endif
120
121  #if __LP64__ || __arm64__ || __ARM_ARCH_7K
122    #define PRAGMA_STRUCT_ALIGN         0
123  #else
124    #define PRAGMA_STRUCT_ALIGN         1
125  #endif
126
127  #define PRAGMA_ENUM_PACK            0
128  #define PRAGMA_ENUM_ALWAYSINT       0
129  #define PRAGMA_ENUM_OPTIONS         0
130  #define FOUR_CHAR_CODE(x)           (x)
131
132  #define TYPE_EXTENDED               0
133
134  #ifdef __ppc__
135  #ifdef __LONG_DOUBLE_128__
136     #define TYPE_LONGDOUBLE_IS_DOUBLE 0
137    #else
138      #define TYPE_LONGDOUBLE_IS_DOUBLE 1
139    #endif
140  #else
141    #define TYPE_LONGDOUBLE_IS_DOUBLE 0
142  #endif
143
144  #define TYPE_LONGLONG               1
145 
146  #define FUNCTION_PASCAL             0
147  #define FUNCTION_DECLSPEC           0
148  #define FUNCTION_WIN32CC            0 
149  
150  #ifdef __MACOS_CLASSIC__
151    #ifndef TARGET_API_MAC_CARBON            /* gcc cfm cross compiler assumes you're building Carbon code */
152       #define TARGET_API_MAC_CARBON 1
153    #endif
154  #endif
155  
156
157
158#elif defined(__MWERKS__)
159   /*
160       CodeWarrior compiler from Metrowerks/Motorola
161   */
162   #define PRAGMA_ONCE                 1
163   #define PRAGMA_IMPORT               0
164   #define PRAGMA_STRUCT_ALIGN         1
165   #define PRAGMA_STRUCT_PACK          1
166   #define PRAGMA_STRUCT_PACKPUSH      0
167   #define PRAGMA_ENUM_PACK            0
168   #define PRAGMA_ENUM_ALWAYSINT       1
169   #define PRAGMA_ENUM_OPTIONS         0
170   #if __option(enumsalwaysint) && __option(ANSI_strict)
171     #define FOUR_CHAR_CODE(x)       ((long)(x)) /* otherwise compiler will complain about values with high bit set */
172   #else
173     #define FOUR_CHAR_CODE(x)       (x)
174   #endif
175   #define FUNCTION_PASCAL             1
176   #define FUNCTION_DECLSPEC           1
177   #define FUNCTION_WIN32CC            0           
178      
179   #if __option(longlong)
180      #define TYPE_LONGLONG            1
181   #else
182     #define TYPE_LONGLONG             0
183   #endif
184   #define TYPE_EXTENDED               0
185   #define TYPE_LONGDOUBLE_IS_DOUBLE   1
186
187
188
189#else
190    /*
191     Unknown compiler, perhaps set up from the command line
192    */
193   #error unknown compiler
194    #ifndef PRAGMA_IMPORT
195  #define PRAGMA_IMPORT               0
196  #endif
197 #ifndef PRAGMA_STRUCT_ALIGN
198    #define PRAGMA_STRUCT_ALIGN         0
199  #endif
200 #ifndef PRAGMA_ONCE
201    #define PRAGMA_ONCE                 0
202  #endif
203 #ifndef PRAGMA_STRUCT_PACK
204 #define PRAGMA_STRUCT_PACK          0
205  #endif
206 #ifndef PRAGMA_STRUCT_PACKPUSH
207 #define PRAGMA_STRUCT_PACKPUSH      0
208  #endif
209 #ifndef PRAGMA_ENUM_PACK
210   #define PRAGMA_ENUM_PACK            0
211  #endif
212 #ifndef PRAGMA_ENUM_ALWAYSINT
213  #define PRAGMA_ENUM_ALWAYSINT       0
214  #endif
215 #ifndef PRAGMA_ENUM_OPTIONS
216    #define PRAGMA_ENUM_OPTIONS         0
217  #endif
218 #ifndef FOUR_CHAR_CODE
219 #define FOUR_CHAR_CODE(x)           (x)
220    #endif
221
222    #ifndef TYPE_LONGDOUBLE_IS_DOUBLE
223  #define TYPE_LONGDOUBLE_IS_DOUBLE   1
224  #endif
225 #ifndef TYPE_EXTENDED
226  #define TYPE_EXTENDED               0
227  #endif
228 #ifndef TYPE_LONGLONG
229  #define TYPE_LONGLONG               0
230  #endif
231 #ifndef FUNCTION_PASCAL
232    #define FUNCTION_PASCAL             0
233  #endif
234 #ifndef FUNCTION_DECLSPEC
235  #define FUNCTION_DECLSPEC           0
236  #endif
237 #ifndef FUNCTION_WIN32CC
238   #define FUNCTION_WIN32CC            0
239  #endif
240#endif
241
242
243
244
245/****************************************************************************************************
246
247    Under MacOS, the classic 68k runtime has two calling conventions: pascal or C
248    Under Win32, there are two calling conventions: __cdecl or __stdcall
249    Headers and implementation files can use the following macros to make their
250    source more portable by hiding the calling convention details:
251
252    EXTERN_API*
253    These macros are used to specify the calling convention on a function prototype.
254
255        EXTERN_API              - Classic 68k: pascal, Win32: __cdecl
256        EXTERN_API_C            - Classic 68k: C,      Win32: __cdecl
257        EXTERN_API_STDCALL      - Classic 68k: pascal, Win32: __stdcall
258        EXTERN_API_C_STDCALL    - Classic 68k: C,      Win32: __stdcall
259
260
261    DEFINE_API*
262    These macros are used to specify the calling convention on a function definition.
263
264        DEFINE_API              - Classic 68k: pascal, Win32: __cdecl
265        DEFINE_API_C            - Classic 68k: C,      Win32: __cdecl
266        DEFINE_API_STDCALL      - Classic 68k: pascal, Win32: __stdcall
267        DEFINE_API_C_STDCALL    - Classic 68k: C,      Win32: __stdcall
268
269
270    CALLBACK_API*
271    These macros are used to specify the calling convention of a function pointer.
272
273        CALLBACK_API            - Classic 68k: pascal, Win32: __stdcall
274        CALLBACK_API_C          - Classic 68k: C,      Win32: __stdcall
275        CALLBACK_API_STDCALL    - Classic 68k: pascal, Win32: __cdecl
276        CALLBACK_API_C_STDCALL  - Classic 68k: C,      Win32: __cdecl
277
278****************************************************************************************************/
279
280#if FUNCTION_PASCAL && !FUNCTION_DECLSPEC && !FUNCTION_WIN32CC
281    /* compiler supports pascal keyword only  */
282    #define EXTERN_API(_type)                       extern pascal _type
283    #define EXTERN_API_C(_type)                     extern        _type
284    #define EXTERN_API_STDCALL(_type)               extern pascal _type
285    #define EXTERN_API_C_STDCALL(_type)             extern        _type
286    
287    #define DEFINE_API(_type)                       pascal _type
288    #define DEFINE_API_C(_type)                            _type
289    #define DEFINE_API_STDCALL(_type)               pascal _type
290    #define DEFINE_API_C_STDCALL(_type)                    _type
291    
292    #define CALLBACK_API(_type, _name)              pascal _type (*_name)
293    #define CALLBACK_API_C(_type, _name)                   _type (*_name)
294    #define CALLBACK_API_STDCALL(_type, _name)      pascal _type (*_name)
295    #define CALLBACK_API_C_STDCALL(_type, _name)           _type (*_name)
296
297#elif FUNCTION_PASCAL && FUNCTION_DECLSPEC && !FUNCTION_WIN32CC
298    /* compiler supports pascal and __declspec() */
299    #define EXTERN_API(_type)                       extern pascal __declspec(dllimport) _type
300    #define EXTERN_API_C(_type)                     extern        __declspec(dllimport) _type
301    #define EXTERN_API_STDCALL(_type)               extern pascal __declspec(dllimport) _type
302    #define EXTERN_API_C_STDCALL(_type)             extern        __declspec(dllimport) _type
303    
304    #define DEFINE_API(_type)                       pascal __declspec(dllexport) _type
305    #define DEFINE_API_C(_type)                            __declspec(dllexport) _type
306    #define DEFINE_API_STDCALL(_type)               pascal __declspec(dllexport) _type
307    #define DEFINE_API_C_STDCALL(_type)                    __declspec(dllexport) _type
308
309    #define CALLBACK_API(_type, _name)              pascal _type (*_name)
310    #define CALLBACK_API_C(_type, _name)                   _type (*_name)
311    #define CALLBACK_API_STDCALL(_type, _name)      pascal _type (*_name)
312    #define CALLBACK_API_C_STDCALL(_type, _name)           _type (*_name)
313
314#elif !FUNCTION_PASCAL && FUNCTION_DECLSPEC && !FUNCTION_WIN32CC
315    /* compiler supports __declspec() */
316    #define EXTERN_API(_type)                       extern __declspec(dllimport) _type
317    #define EXTERN_API_C(_type)                     extern __declspec(dllimport) _type
318    #define EXTERN_API_STDCALL(_type)               extern __declspec(dllimport) _type
319    #define EXTERN_API_C_STDCALL(_type)             extern __declspec(dllimport) _type
320    
321    #define DEFINE_API(_type)                       __declspec(dllexport) _type 
322    #define DEFINE_API_C(_type)                     __declspec(dllexport) _type
323    #define DEFINE_API_STDCALL(_type)               __declspec(dllexport) _type
324    #define DEFINE_API_C_STDCALL(_type)             __declspec(dllexport) _type
325
326    #define CALLBACK_API(_type, _name)              _type ( * _name)
327    #define CALLBACK_API_C(_type, _name)            _type ( * _name)
328    #define CALLBACK_API_STDCALL(_type, _name)      _type ( * _name)
329    #define CALLBACK_API_C_STDCALL(_type, _name)    _type ( * _name)
330
331#elif !FUNCTION_PASCAL && FUNCTION_DECLSPEC && FUNCTION_WIN32CC
332    /* compiler supports __declspec() and __cdecl */
333    #define EXTERN_API(_type)                       __declspec(dllimport) _type __cdecl
334    #define EXTERN_API_C(_type)                     __declspec(dllimport) _type __cdecl
335    #define EXTERN_API_STDCALL(_type)               __declspec(dllimport) _type __stdcall
336    #define EXTERN_API_C_STDCALL(_type)             __declspec(dllimport) _type __stdcall
337    
338    #define DEFINE_API(_type)                       __declspec(dllexport) _type __cdecl
339    #define DEFINE_API_C(_type)                     __declspec(dllexport) _type __cdecl
340    #define DEFINE_API_STDCALL(_type)               __declspec(dllexport) _type __stdcall
341    #define DEFINE_API_C_STDCALL(_type)             __declspec(dllexport) _type __stdcall
342    
343    #define CALLBACK_API(_type, _name)              _type (__cdecl * _name)
344    #define CALLBACK_API_C(_type, _name)            _type (__cdecl * _name)
345    #define CALLBACK_API_STDCALL(_type, _name)      _type (__stdcall * _name)
346    #define CALLBACK_API_C_STDCALL(_type, _name)    _type (__stdcall * _name)
347
348#elif !FUNCTION_PASCAL && !FUNCTION_DECLSPEC && FUNCTION_WIN32CC
349    /* compiler supports __cdecl */
350    #define EXTERN_API(_type)                       _type __cdecl
351    #define EXTERN_API_C(_type)                     _type __cdecl
352    #define EXTERN_API_STDCALL(_type)               _type __stdcall
353    #define EXTERN_API_C_STDCALL(_type)             _type __stdcall
354    
355    #define DEFINE_API(_type)                       _type __cdecl
356    #define DEFINE_API_C(_type)                     _type __cdecl
357    #define DEFINE_API_STDCALL(_type)               _type __stdcall
358    #define DEFINE_API_C_STDCALL(_type)             _type __stdcall
359    
360    #define CALLBACK_API(_type, _name)              _type (__cdecl * _name)
361    #define CALLBACK_API_C(_type, _name)            _type (__cdecl * _name)
362    #define CALLBACK_API_STDCALL(_type, _name)      _type (__stdcall * _name)
363    #define CALLBACK_API_C_STDCALL(_type, _name)    _type (__stdcall * _name)
364
365#else 
366    /* compiler supports no extensions */
367    #define EXTERN_API(_type)                       extern _type
368    #define EXTERN_API_C(_type)                     extern _type
369    #define EXTERN_API_STDCALL(_type)               extern _type
370    #define EXTERN_API_C_STDCALL(_type)             extern _type
371    
372    #define DEFINE_API(_type)                       _type
373    #define DEFINE_API_C(_type)                     _type
374    #define DEFINE_API_STDCALL(_type)               _type
375    #define DEFINE_API_C_STDCALL(_type)             _type
376
377    #define CALLBACK_API(_type, _name)              _type ( * _name)
378    #define CALLBACK_API_C(_type, _name)            _type ( * _name)
379    #define CALLBACK_API_STDCALL(_type, _name)      _type ( * _name)
380    #define CALLBACK_API_C_STDCALL(_type, _name)    _type ( * _name)
381    #undef pascal
382    #define pascal
383#endif
384
385/****************************************************************************************************
386    
387    Set up TARGET_API_*_* values
388
389****************************************************************************************************/
390#if !defined(TARGET_API_MAC_OS8) && !defined(TARGET_API_MAC_OSX) && !defined(TARGET_API_MAC_CARBON)
391/* No TARGET_API_MAC_* predefined on command line */
392#if TARGET_RT_MAC_MACHO
393/* Looks like MachO style compiler */
394#define TARGET_API_MAC_OS8 0
395#define TARGET_API_MAC_CARBON 1
396#define TARGET_API_MAC_OSX 1
397#elif defined(TARGET_CARBON) && TARGET_CARBON
398/* grandfather in use of TARGET_CARBON */
399#define TARGET_API_MAC_OS8 0
400#define TARGET_API_MAC_CARBON 1
401#define TARGET_API_MAC_OSX 0
402#elif TARGET_CPU_PPC && TARGET_RT_MAC_CFM
403/* Looks like CFM style PPC compiler */
404#define TARGET_API_MAC_OS8 1
405#define TARGET_API_MAC_CARBON 0
406#define TARGET_API_MAC_OSX 0
407#else
408/* 68k or some other compiler */
409#define TARGET_API_MAC_OS8 1
410#define TARGET_API_MAC_CARBON 0
411#define TARGET_API_MAC_OSX 0
412#endif  /*  */
413
414#else
415#ifndef TARGET_API_MAC_OS8
416#define TARGET_API_MAC_OS8 0
417#endif  /* !defined(TARGET_API_MAC_OS8) */
418
419#ifndef TARGET_API_MAC_OSX
420#define TARGET_API_MAC_OSX TARGET_RT_MAC_MACHO
421#endif  /* !defined(TARGET_API_MAC_OSX) */
422
423#ifndef TARGET_API_MAC_CARBON
424#define TARGET_API_MAC_CARBON TARGET_API_MAC_OSX
425#endif  /* !defined(TARGET_API_MAC_CARBON) */
426
427#endif  /* !defined(TARGET_API_MAC_OS8) && !defined(TARGET_API_MAC_OSX) && !defined(TARGET_API_MAC_CARBON) */
428
429#if TARGET_API_MAC_OS8 && TARGET_API_MAC_OSX
430#error TARGET_API_MAC_OS8 and TARGET_API_MAC_OSX are mutually exclusive
431#endif  /* TARGET_API_MAC_OS8 && TARGET_API_MAC_OSX */
432
433#if !TARGET_API_MAC_OS8 && !TARGET_API_MAC_CARBON && !TARGET_API_MAC_OSX
434#error At least one of TARGET_API_MAC_* must be true
435#endif  /* !TARGET_API_MAC_OS8 && !TARGET_API_MAC_CARBON && !TARGET_API_MAC_OSX */
436
437/* Support source code still using TARGET_CARBON */
438#ifndef TARGET_CARBON
439#if TARGET_API_MAC_CARBON && !TARGET_API_MAC_OS8
440#define TARGET_CARBON 1
441#else
442#define TARGET_CARBON 0
443#endif  /* TARGET_API_MAC_CARBON && !TARGET_API_MAC_OS8 */
444
445#endif  /* !defined(TARGET_CARBON) */
446
447/****************************************************************************************************
448    Backward compatibility for clients expecting 2.x version on ConditionalMacros.h
449
450    GENERATINGPOWERPC       - Compiler is generating PowerPC instructions
451    GENERATING68K           - Compiler is generating 68k family instructions
452    GENERATING68881         - Compiler is generating mc68881 floating point instructions
453    GENERATINGCFM           - Code being generated assumes CFM calling conventions
454    CFMSYSTEMCALLS          - No A-traps.  Systems calls are made using CFM and UPP's
455    PRAGMA_ALIGN_SUPPORTED  - Compiler supports: #pragma options align=mac68k/power/reset
456    PRAGMA_IMPORT_SUPPORTED - Compiler supports: #pragma import on/off/reset
457    CGLUESUPPORTED          - Clients can use all lowercase toolbox functions that take C strings instead of pascal strings
458
459****************************************************************************************************/
460#if !TARGET_API_MAC_CARBON
461#define GENERATINGPOWERPC TARGET_CPU_PPC
462#define GENERATING68K 0
463#define GENERATING68881 TARGET_RT_MAC_68881
464#define GENERATINGCFM TARGET_RT_MAC_CFM
465#define CFMSYSTEMCALLS TARGET_RT_MAC_CFM
466#ifndef CGLUESUPPORTED
467#define CGLUESUPPORTED 0
468#endif  /* !defined(CGLUESUPPORTED) */
469
470#ifndef OLDROUTINELOCATIONS
471#define OLDROUTINELOCATIONS 0
472#endif  /* !defined(OLDROUTINELOCATIONS) */
473
474#define PRAGMA_ALIGN_SUPPORTED  PRAGMA_STRUCT_ALIGN
475#define PRAGMA_IMPORT_SUPPORTED PRAGMA_IMPORT
476#else
477/* Carbon code should not use old conditionals */
478#define PRAGMA_ALIGN_SUPPORTED  ..PRAGMA_ALIGN_SUPPORTED_is_obsolete..
479#define GENERATINGPOWERPC       ..GENERATINGPOWERPC_is_obsolete..
480#define GENERATING68K           ..GENERATING68K_is_obsolete..
481#define GENERATING68881         ..GENERATING68881_is_obsolete..
482#define GENERATINGCFM           ..GENERATINGCFM_is_obsolete..
483#define CFMSYSTEMCALLS          ..CFMSYSTEMCALLS_is_obsolete..
484#endif  /* !TARGET_API_MAC_CARBON */
485
486
487
488/****************************************************************************************************
489
490    OLDROUTINENAMES         - "Old" names for Macintosh system calls are allowed in source code.
491                              (e.g. DisposPtr instead of DisposePtr). The names of system routine
492                              are now more sensitive to change because CFM binds by name.  In the 
493                              past, system routine names were compiled out to just an A-Trap.  
494                              Macros have been added that each map an old name to its new name.  
495                              This allows old routine names to be used in existing source files,
496                              but the macros only work if OLDROUTINENAMES is true.  This support
497                              will be removed in the near future.  Thus, all source code should 
498                              be changed to use the new names! You can set OLDROUTINENAMES to false
499                              to see if your code has any old names left in it.
500    
501****************************************************************************************************/
502#ifndef OLDROUTINENAMES
503#define OLDROUTINENAMES 0
504#endif  /* !defined(OLDROUTINENAMES) */
505
506
507
508/****************************************************************************************************
509 The following macros isolate the use of 68K inlines in function prototypes.
510    On the Mac OS under the Classic 68K runtime, function prototypes were followed
511 by a list of 68K opcodes which the compiler inserted in the generated code instead
512 of a JSR.  Under Classic 68K on the Mac OS, this macro will put the opcodes
513    in the right syntax.  For all other OS's and runtimes the macro suppress the opcodes.
514  Example:
515   
516       EXTERN_P void DrawPicture(PicHandle myPicture, const Rect *dstRect)
517            ONEWORDINLINE(0xA8F6);
518 
519****************************************************************************************************/
520
521#if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
522 #define ONEWORDINLINE(w1) = w1
523 #define TWOWORDINLINE(w1,w2) = {w1,w2}
524 #define THREEWORDINLINE(w1,w2,w3) = {w1,w2,w3}
525 #define FOURWORDINLINE(w1,w2,w3,w4)  = {w1,w2,w3,w4}
526   #define FIVEWORDINLINE(w1,w2,w3,w4,w5) = {w1,w2,w3,w4,w5}
527  #define SIXWORDINLINE(w1,w2,w3,w4,w5,w6)     = {w1,w2,w3,w4,w5,w6}
528 #define SEVENWORDINLINE(w1,w2,w3,w4,w5,w6,w7)    = {w1,w2,w3,w4,w5,w6,w7}
529  #define EIGHTWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8)     = {w1,w2,w3,w4,w5,w6,w7,w8}
530   #define NINEWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9)   = {w1,w2,w3,w4,w5,w6,w7,w8,w9}
531    #define TENWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10)  = {w1,w2,w3,w4,w5,w6,w7,w8,w9,w10}
532  #define ELEVENWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11)     = {w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11}
533    #define TWELVEWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12)     = {w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12}
534#else
535  #define ONEWORDINLINE(w1)
536  #define TWOWORDINLINE(w1,w2)
537   #define THREEWORDINLINE(w1,w2,w3)
538  #define FOURWORDINLINE(w1,w2,w3,w4)
539    #define FIVEWORDINLINE(w1,w2,w3,w4,w5)
540 #define SIXWORDINLINE(w1,w2,w3,w4,w5,w6)
541   #define SEVENWORDINLINE(w1,w2,w3,w4,w5,w6,w7)
542  #define EIGHTWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8)
543   #define NINEWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9)
544 #define TENWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10)
545  #define ELEVENWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11)
546   #define TWELVEWORDINLINE(w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12)
547#endif
548
549
550/****************************************************************************************************
551
552    TARGET_CARBON                   - default: false. Switches all of the above as described.  Overrides all others
553                                    - NOTE: If you set TARGET_CARBON to 1, then the other switches will be setup by
554                                            ConditionalMacros, and should not be set manually.
555
556    If you wish to do development for pre-Carbon Systems, you can set the following:
557
558    OPAQUE_TOOLBOX_STRUCTS          - default: false. True for Carbon builds, hides struct fields.
559    OPAQUE_UPP_TYPES                - default: false. True for Carbon builds, UPP types are unique and opaque.
560    ACCESSOR_CALLS_ARE_FUNCTIONS    - default: false. True for Carbon builds, enables accessor functions.
561    CALL_NOT_IN_CARBON              - default: true.  False for Carbon builds, hides calls not supported in Carbon.
562    
563    Specifically, if you are building a non-Carbon application (one that links against InterfaceLib)
564    but you wish to use some of the accessor functions, you can set ACCESSOR_CALLS_ARE_FUNCTIONS to 1
565    and link with CarbonAccessors.o, which implements just the accessor functions. This will help you
566    preserve source compatibility between your Carbon and non-Carbon application targets.
567    
568    MIXEDMODE_CALLS_ARE_FUNCTIONS   - deprecated.
569
570****************************************************************************************************/
571#if TARGET_API_MAC_CARBON && !TARGET_API_MAC_OS8
572#ifndef OPAQUE_TOOLBOX_STRUCTS
573#define OPAQUE_TOOLBOX_STRUCTS 1
574#endif  /* !defined(OPAQUE_TOOLBOX_STRUCTS) */
575
576#ifndef OPAQUE_UPP_TYPES
577#define OPAQUE_UPP_TYPES 1
578#endif  /* !defined(OPAQUE_UPP_TYPES) */
579
580#ifndef ACCESSOR_CALLS_ARE_FUNCTIONS
581#define ACCESSOR_CALLS_ARE_FUNCTIONS 1
582#endif  /* !defined(ACCESSOR_CALLS_ARE_FUNCTIONS) */
583
584#ifndef CALL_NOT_IN_CARBON
585#define CALL_NOT_IN_CARBON 0
586#endif  /* !defined(CALL_NOT_IN_CARBON) */
587
588#ifndef MIXEDMODE_CALLS_ARE_FUNCTIONS
589#define MIXEDMODE_CALLS_ARE_FUNCTIONS 1
590#endif  /* !defined(MIXEDMODE_CALLS_ARE_FUNCTIONS) */
591
592#else
593#ifndef OPAQUE_TOOLBOX_STRUCTS
594#define OPAQUE_TOOLBOX_STRUCTS 0
595#endif  /* !defined(OPAQUE_TOOLBOX_STRUCTS) */
596
597#ifndef ACCESSOR_CALLS_ARE_FUNCTIONS
598#define ACCESSOR_CALLS_ARE_FUNCTIONS 0
599#endif  /* !defined(ACCESSOR_CALLS_ARE_FUNCTIONS) */
600
601/*
602     * It's possible to have ACCESSOR_CALLS_ARE_FUNCTIONS set to true and OPAQUE_TOOLBOX_STRUCTS
603     * set to false, but not the other way around, so make sure the defines are not set this way.
604     */
605#ifndef CALL_NOT_IN_CARBON
606#define CALL_NOT_IN_CARBON 1
607#endif  /* !defined(CALL_NOT_IN_CARBON) */
608
609#ifndef MIXEDMODE_CALLS_ARE_FUNCTIONS
610#define MIXEDMODE_CALLS_ARE_FUNCTIONS 0
611#endif  /* !defined(MIXEDMODE_CALLS_ARE_FUNCTIONS) */
612
613#endif  /* TARGET_API_MAC_CARBON && !TARGET_API_MAC_OS8 */
614
615
616
617
618#endif /* __CONDITIONALMACROS__ */
619