zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

ConditionalMacros.h (26422B) - Raw


      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