text: /*
       File:       QD3DOld.h
   
       Contains:   Obsolete API for Quickdraw 3D that QuickTime still uses
   
       Version:    Technology: Quickdraw 3D 1.5.1
                   Release:    QuickTime 7.3
   
       Copyright:  (c) 2007 (c) 1995-1998 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  #ifndef __QD3DOLD__
  #define __QD3DOLD__
  
  #ifndef __CONDITIONALMACROS__
  #include "ConditionalMacros.h"
  #endif
  
  
  #if TARGET_OS_MAC
  #ifndef __MACTYPES__
  #include "MacTypes.h"
  #endif
  
  #endif  /* TARGET_OS_MAC */
  
  #ifndef __QD3D__
  #include "QD3D.h"
  #endif
  
  #ifndef __QD3DPICK__
  #include "QD3DPick.h"
  #endif
  
  #ifndef __QD3DRENDERER__
  #include "QD3DRenderer.h"
  #endif
  
  #ifndef __QD3DIO__
  #include "QD3DIO.h"
  #endif
  
  
  
  
  #if PRAGMA_ONCE
  #pragma once
  #endif
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #if PRAGMA_IMPORT
  #pragma import on
  #endif
  
  #if PRAGMA_STRUCT_ALIGN
      #pragma options align=power
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  #endif
  
  #if PRAGMA_ENUM_ALWAYSINT
      #if defined(__fourbyteints__) && !__fourbyteints__ 
          #define __QD3DOLD__RESTORE_TWOBYTEINTS
          #pragma fourbyteints on
      #endif
      #pragma enumsalwaysint on
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=int
  #elif PRAGMA_ENUM_PACK
      #if __option(pack_enums)
          #define __QD3DOLD__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  #endif
  
  /******************************************************************************
   **                                                                          **
   **                     Obsolete Object System Types                         **
   **                         from QD3D.i                                      **
   **                                                                          **
   *****************************************************************************/
  typedef struct OpaqueTQ3ObjectClass*    TQ3ObjectClass;
  typedef unsigned long                   TQ3MethodType;
  /*
   * Object methods
   */
  #define kQ3MethodTypeObjectUnregister       Q3_METHOD_TYPE('u','n','r','g')
  /*
   * IO Methods
   */
  #define kQ3MethodTypeObjectFileVersion      Q3_METHOD_TYPE('v','e','r','s') /* version */
  #define kQ3MethodTypeObjectTraverse         Q3_METHOD_TYPE('t','r','v','s') /* byte count */
  #define kQ3MethodTypeObjectTraverseData     Q3_METHOD_TYPE('t','r','v','d') /* byte count */
  #define kQ3MethodTypeObjectWrite            Q3_METHOD_TYPE('w','r','i','t') /* Dump info to file */
  #define kQ3MethodTypeObjectReadData         Q3_METHOD_TYPE('r','d','d','t') /* Read info from file into buffer or, attach read data to parent */ 
  typedef CALLBACK_API_C( void , TQ3FunctionPointer )(void);
  typedef CALLBACK_API_C( TQ3FunctionPointer , TQ3MetaHandler )(TQ3MethodType methodType);
  /*
   * MetaHandler:
   *      When you give a metahandler to QuickDraw 3D, it is called multiple times to
   *      build method tables, and then is thrown away. You are guaranteed that
   *      your metahandler will never be called again after a call that was passed
   *      a metahandler returns.
   *
   *      Your metahandler should contain a switch on the methodType passed to it
   *      and should return the corresponding method as an TQ3FunctionPointer.
   *
   *      IMPORTANT: A metaHandler MUST always "return" a value. If you are
   *      passed a methodType that you do not understand, ALWAYS return NULL.
   *
   *      These types here are prototypes of how your functions should look.
   */
  typedef CALLBACK_API_C( TQ3Status , TQ3ObjectUnregisterMethod )(TQ3ObjectClass objectClass);
  /******************************************************************************
   **                                                                          **
   **                     Obsolete ObjectClass Routines                        **
   **                         from QD3D.i                                      **
   **                                                                          **
   *****************************************************************************/
  /*
   *  Q3ObjectClass_Unregister is an obsolete function.  For the new extensions 
   *  model you should now use Q3XObjectHierarchy_UnregisterClass which is 
   *  defined in QD3DExtension.h and takes identical parameters.
   */
  #if CALL_NOT_IN_CARBON
  /*
   *  Q3ObjectClass_Unregister()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3ObjectClass_Unregister(TQ3ObjectClass objectClass);
  
  
  
  
  /******************************************************************************
   **                                                                          **
   **                 Obsolete Custom Element Registration                     **
   **                         from QD3DSet.i                                   **
   **                                                                          **
   *****************************************************************************/
  #define kQ3MethodTypeElementCopyAdd         Q3_METHOD_TYPE('e','c','p','a')
  #define kQ3MethodTypeElementCopyReplace     Q3_METHOD_TYPE('e','c','p','r')
  #define kQ3MethodTypeElementCopyGet         Q3_METHOD_TYPE('e','c','p','g')
  #define kQ3MethodTypeElementCopyDuplicate   Q3_METHOD_TYPE('e','c','p','d')
  #define kQ3MethodTypeElementDelete          Q3_METHOD_TYPE('e','d','e','l')
  #endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3ElementCopyAddMethod )(const void *fromAPIElement, void *toInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3ElementCopyReplaceMethod )(const void *fromAPIElement, void *ontoInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3ElementCopyGetMethod )(const void *fromInternalElement, void *toAPIElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3ElementCopyDuplicateMethod )(const void *fromInternalElement, void *toInternalElement);
  typedef CALLBACK_API_C( TQ3Status , TQ3ElementDeleteMethod )(void * internalElement);
  #if CALL_NOT_IN_CARBON
  /*
   *  Q3ElementClass_Register()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3ObjectClass )
  Q3ElementClass_Register(
    TQ3ElementType   elementType,
    const char *     name,
    unsigned long    sizeOfElement,
    TQ3MetaHandler   metaHandler);
  
  
  /*
   *  Q3ElementType_GetElementSize()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3ElementType_GetElementSize(
    TQ3ElementType   elementType,
    unsigned long *  sizeOfElement);
  
  
  
  /******************************************************************************
   **                                                                          **
   **                 Obsolete QD3DPick.i API                                  **
   **                                                                          **
   *****************************************************************************/
  /*
   *  The following data structure has been obsoleted by
   *  the Q3Pick_GetPickDetailData function in conjunction
   *  with the pickDetailValue enum
   */
  #endif  /* CALL_NOT_IN_CARBON */
  
  struct TQ3HitData {
    TQ3PickParts        part;
    TQ3PickDetail       validMask;
    unsigned long       pickID;
    TQ3HitPath          path;
    TQ3Object           object;
    TQ3Matrix4x4        localToWorldMatrix;
    TQ3Point3D          xyzPoint;
    float               distance;
    TQ3Vector3D         normal;
    TQ3ShapePartObject  shapePart;
  };
  typedef struct TQ3HitData               TQ3HitData;
  /*
   *  The following functions have been superseeded
   *  by the Q3Pick_GetPickDetailData function
   */
  #if CALL_NOT_IN_CARBON
  /*
   *  Q3Pick_GetHitData()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3Pick_GetHitData(
    TQ3PickObject   pick,
    unsigned long   index,
    TQ3HitData *    hitData);
  
  
  /*
   *  Q3Hit_EmptyData()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3Hit_EmptyData(TQ3HitData * hitData);
  
  
  /******************************************************************************
   **                                                                          **
   **                 Obsolete QD3DRenderer.i API                              **
   **                                                                          **
   *****************************************************************************/
  /*
   *  Blocking, flush all buffered graphics to rasterizer and update
   *  draw context.
   *  
   *  This function has been replaced by Q3View_Sync
   */
  /*
   *  Q3Renderer_Sync()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3Renderer_Sync(
    TQ3RendererObject   renderer,
    TQ3ViewObject       view);
  
  
  
  /******************************************************************************
   **                                                                          **
   **                     Obsolete QD3DIO.i API                                **
   **                                                                          **
   *****************************************************************************/
  /*
   *  TQ3ObjectTraverseMethod
   *
   *  For "elements" (meaning "attributes, too), you will be passed NULL for 
   *  object. Sorry, custom objects will be available in the next major revision.
   *
   *  The "data" is a pointer to your internal element data.
   *
   *  The view is the current traversal view.
   */
  #endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3ObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  typedef CALLBACK_API_C( TQ3Status , TQ3ObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  /*
   *  Use Q3XView_SubmitWriteData instead...
   */
  typedef CALLBACK_API_C( void , TQ3DataDeleteMethod )(void * data);
  #if CALL_NOT_IN_CARBON
  /*
   *  Q3View_SubmitWriteData()
   *  
   *  Availability:
   *    Non-Carbon CFM:   not available
   *    CarbonLib:        not available
   *    Mac OS X:         not available
   */
  EXTERN_API_C( TQ3Status )
  Q3View_SubmitWriteData(
    TQ3ViewObject         view,
    TQ3Size               size,
    void *                data,
    TQ3DataDeleteMethod   deleteData);
  
  
  /*
   *  TQ3ObjectReadDataMethod
   *
   *  For "elements" (meaning "attributes", too), you must allocate stack space 
   *  and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
   *
   *  Otherwise, parentObject is whatever object your element is a subobject of...
   */
  #endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API_C( TQ3Status , TQ3ObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  
  
  #if PRAGMA_ENUM_ALWAYSINT
      #pragma enumsalwaysint reset
      #ifdef __QD3DOLD__RESTORE_TWOBYTEINTS
          #pragma fourbyteints off
      #endif
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=reset
  #elif defined(__QD3DOLD__RESTORE_PACKED_ENUMS)
      #pragma options(pack_enums)
  #endif
  
  #if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  #endif
  
  #ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  #endif
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* __QD3DOLD__ */
  
  