/*
     File:       QD3DIO.h
 
     Contains:   QuickDraw 3D IO API
 
     Version:    Technology: Quickdraw 3D 1.6
                 Release:    QuickTime 7.3
 
     Copyright:  (c) 2007 (c) 1995-1999 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 __QD3DIO__
#define __QD3DIO__

#ifndef __QD3D__
#include <QD3D.h>
#endif


#ifndef __QD3DDRAWCONTEXT__
#include <QD3DDrawContext.h>
#endif

#ifndef __QD3DVIEW__
#include <QD3DView.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 __QD3DIO__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 __QD3DIO__RESTORE_PACKED_ENUMS
        #pragma options(!pack_enums)
    #endif
#endif

/******************************************************************************
 **                                                                          **
 **                                 Basic Types                              **                                                 
 **                                                                          **
 *****************************************************************************/
typedef unsigned char                   TQ3Uns8;
typedef signed char                     TQ3Int8;
typedef unsigned short                  TQ3Uns16;
typedef signed short                    TQ3Int16;
typedef unsigned long                   TQ3Uns32;
typedef signed long                     TQ3Int32;
#if TARGET_RT_BIG_ENDIAN
struct TQ3Uns64 {
  unsigned long       hi;
  unsigned long       lo;
};
typedef struct TQ3Uns64                 TQ3Uns64;
struct TQ3Int64 {
  signed long         hi;
  unsigned long       lo;
};
typedef struct TQ3Int64                 TQ3Int64;
#else
struct TQ3Uns64 {
  unsigned long       lo;
  unsigned long       hi;
};
typedef struct TQ3Uns64                 TQ3Uns64;
struct TQ3Int64 {
  unsigned long       lo;
  signed long         hi;
};
typedef struct TQ3Int64                 TQ3Int64;
#endif  /* TARGET_RT_BIG_ENDIAN */


typedef float                           TQ3Float32;
typedef double                          TQ3Float64;
typedef TQ3Uns32                        TQ3Size;
/******************************************************************************
 **                                                                          **
 **                                 File Types                               **
 **                                                                          **
 *****************************************************************************/
enum TQ3FileModeMasks {
  kQ3FileModeNormal             = 0,
  kQ3FileModeStream             = 1 << 0,
  kQ3FileModeDatabase           = 1 << 1,
  kQ3FileModeText               = 1 << 2
};
typedef enum TQ3FileModeMasks TQ3FileModeMasks;

typedef unsigned long                   TQ3FileMode;
/******************************************************************************
 **                                                                          **
 **                                 Method Types                             **
 **                                                                          **
 *****************************************************************************/
/*
 *  IO Methods
 *
 *  The IO system treats all objects as groups of typed information.
 *  When you register your element or attribute, the "elementType" is the 
 *  binary type of your object, the "elementName" the ascii type.
 *  
 *  All objects in the metafile are made up of a "root" or parent object which
 *  defines the instantiated object type. You may define the format of your 
 *  data any way you wish as long as you use the primitives types above and the
 *  routines below.
 *
 *  Root Objects are often appended with additional child objects, called 
 *  subobjects. You may append your object with other QuickDraw 3D objects.
 *  
 *  Writing is straightforward: an object traverses itself any other objects 
 *  that make it up, then writes its own data. Writing uses two methods: 
 *  TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
 *
 *  The TQ3XObjectTraverseMethod method should:
 *  + First, Determine if the data should be written 
 *      - if you don't want to write out your object after examining your
 *          data, return kQ3Success in your Traverse method without calling
 *          any other submit calls.
 *  + Next, calculate the size of your object on disk
 *  + Gather whatever state from the view you need to preserve
 *      - you may access the view state NOW, as the state of the
 *          view duing your TQ3XObjectWriteMethod will not be valid. You may
 *          pass a temporary buffer to your write method.
 *  + Submit your view write data using Q3View_SubmitWriteData
 *      - note that you MUST call this before any other "_Submit" call.
 *      - you may pass in a "deleteMethod" for your data. This method
 *          will be called whether or not your write method succeeds or fails.
 *  + Submit your subobjects to the view
 *  
 *  The TQ3XObjectWriteMethod method should:
 *  + Write your data format to the file using the primitives routines below.
 *      - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
 *          method will be called upon exit of your write method.
 *
 *  Reading is less straightforward because your root object and
 *  any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
 *  is an implicit state contained in the file while reading, which you must 
 *  be aware of. When you first enter the read method, you must physically 
 *  read in your data format using the primitives routines until
 *  
 *  Q3File_IsEndOfData(file) == kQ3True
 *  
 *  Generally, your data format should be self-descriptive such that you do not
 *  need to call Q3File_IsEndOfData to determine if you are done reading. 
 *  However, this call is useful for determining zero-sized object or 
 *  determining the end of an object's data.
 *  
 *  Once you have read in all the data, you may collect subobjects. A metafile
 *  object ONLY has subobjects if it is in a container. The call
 *  
 *  Q3File_IsEndOfContainer(file)
 *  
 *  returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
 *  exist.
 *  
 *  At this point, you may use
 *  
 *  Q3File_GetNextObjectType
 *  Q3File_IsNextObjectOfType
 *  Q3File_ReadObject
 *  Q3File_SkipObject
 *  
 *  to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
 *  is kQ3True.
 * 
 */

/*
 * IO Methods
 */
enum {
  kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'), /* version */
  kQ3XMethodTypeObjectTraverse  = FOUR_CHAR_CODE('trvs'), /* byte count */
  kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'), /* byte count */
  kQ3XMethodTypeObjectWrite     = FOUR_CHAR_CODE('writ'), /* Dump info to file */
  kQ3XMethodTypeObjectReadData  = FOUR_CHAR_CODE('rddt'), /* Read info from file into buffer or, attach read data to parent */
  kQ3XMethodTypeObjectRead      = FOUR_CHAR_CODE('read'),
  kQ3XMethodTypeObjectAttach    = FOUR_CHAR_CODE('attc')
};

/*
 *  TQ3XObjectTraverseMethod
 *
 *  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.
 */
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
/*
 *  TQ3XObjectTraverseDataMethod
 */
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
/*
 *  TQ3XObjectWriteMethod
 */
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
/*
 *  Custom object writing 
 */
typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void * data);
#if CALL_NOT_IN_CARBON
/*
 *  Q3XView_SubmitWriteData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3XView_SubmitWriteData(
  TQ3ViewObject          view,
  TQ3Size                size,
  void *                 data,
  TQ3XDataDeleteMethod   deleteData);


/*
 *  Q3XView_SubmitSubObjectData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3XView_SubmitSubObjectData(
  TQ3ViewObject          view,
  TQ3XObjectClass        objectClass,
  unsigned long          size,
  void *                 data,
  TQ3XDataDeleteMethod   deleteData);


/*
 *  TQ3XObjectReadMethod
 */
#endif  /* CALL_NOT_IN_CARBON */

typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
/*
 *  TQ3XObjectReadDataMethod
 *
 *  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...
 */
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
/*
 *  TQ3XObjectAttachMethod
 */
typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);


/******************************************************************************
 **                                                                          **
 **                             Versioning                                   **
 **                                                                          **
 *****************************************************************************/

#define Q3FileVersion(majorVersion, minorVersion)  (TQ3FileVersion) \
 ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))

typedef unsigned long                   TQ3FileVersion;
#define kQ3FileVersionCurrent   Q3FileVersion(1,6)

/******************************************************************************
 **                                                                          **
 **                             File Routines                                **
 **                                                                          **
 *****************************************************************************/
/*
 * Creation and accessors
 */
#if CALL_NOT_IN_CARBON
/*
 *  Q3File_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3FileObject )
Q3File_New(void);


/*
 *  Q3File_GetStorage()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_GetStorage(
  TQ3FileObject       theFile,
  TQ3StorageObject *  storage);


/*
 *  Q3File_SetStorage()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_SetStorage(
  TQ3FileObject      theFile,
  TQ3StorageObject   storage);


/*
 * Opening, and accessing "open" state, closing/cancelling
 */
/*
 *  Q3File_OpenRead()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_OpenRead(
  TQ3FileObject   theFile,
  TQ3FileMode *   mode);


/*
 *  Q3File_OpenWrite()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_OpenWrite(
  TQ3FileObject   theFile,
  TQ3FileMode     mode);


/*
 *  Q3File_IsOpen()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_IsOpen(
  TQ3FileObject   theFile,
  TQ3Boolean *    isOpen);


/*
 *  Q3File_GetMode()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_GetMode(
  TQ3FileObject   theFile,
  TQ3FileMode *   mode);


/*
 *  Q3File_GetVersion()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_GetVersion(
  TQ3FileObject     theFile,
  TQ3FileVersion *  version);


/*
 *  Q3File_Close()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_Close(TQ3FileObject theFile);


/*
 *  Q3File_Cancel()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_Cancel(TQ3FileObject theFile);


/*
 * Writing (Application)
 */
/*
 *  Q3View_StartWriting()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3View_StartWriting(
  TQ3ViewObject   view,
  TQ3FileObject   theFile);


/*
 *  Q3View_EndWriting()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ViewStatus )
Q3View_EndWriting(TQ3ViewObject view);


/*
 * Reading (Application)
 */
/*
 *  Q3File_GetNextObjectType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3File_GetNextObjectType(TQ3FileObject theFile);


/*
 *  Q3File_IsNextObjectOfType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3File_IsNextObjectOfType(
  TQ3FileObject   theFile,
  TQ3ObjectType   ofType);


/*
 *  Q3File_ReadObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Object )
Q3File_ReadObject(TQ3FileObject theFile);


/*
 *  Q3File_SkipObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_SkipObject(TQ3FileObject theFile);


/*
 *  Q3File_IsEndOfData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3File_IsEndOfData(TQ3FileObject theFile);


/*
 *  Q3File_IsEndOfContainer()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3File_IsEndOfContainer(
  TQ3FileObject   theFile,
  TQ3Object       rootObject);


/*
 *  Q3File_IsEndOfFile()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3File_IsEndOfFile(TQ3FileObject theFile);


/*    
 *  External file references
 */
/*
 *  Q3File_MarkAsExternalReference()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_MarkAsExternalReference(
  TQ3FileObject     theFile,
  TQ3SharedObject   sharedObject);


/*
 *  Q3File_GetExternalReferences()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3GroupObject )
Q3File_GetExternalReferences(TQ3FileObject theFile);


/*    
 *  Tracking editing in read-in objects with custom elements
 */
/*
 *  Q3Shared_ClearEditTracking()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Shared_ClearEditTracking(TQ3SharedObject sharedObject);


/*
 *  Q3Shared_GetEditTrackingState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3Shared_GetEditTrackingState(TQ3SharedObject sharedObject);


/*    
 *  Reading objects inside a group one-by-one
 */
#endif  /* CALL_NOT_IN_CARBON */

enum TQ3FileReadGroupStateMasks {
  kQ3FileReadWholeGroup         = 0,
  kQ3FileReadObjectsInGroup     = 1 << 0,
  kQ3FileCurrentlyInsideGroup   = 1 << 1
};
typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;

typedef unsigned long                   TQ3FileReadGroupState;
#if CALL_NOT_IN_CARBON
/*
 *  Q3File_SetReadInGroup()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_SetReadInGroup(
  TQ3FileObject           theFile,
  TQ3FileReadGroupState   readGroupState);


/*
 *  Q3File_GetReadInGroup()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_GetReadInGroup(
  TQ3FileObject            theFile,
  TQ3FileReadGroupState *  readGroupState);



/*
 * Idling
 */
#endif  /* CALL_NOT_IN_CARBON */

typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
#if CALL_NOT_IN_CARBON
/*
 *  Q3File_SetIdleMethod()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3File_SetIdleMethod(
  TQ3FileObject       theFile,
  TQ3FileIdleMethod   idle,
  const void *        idleData);



/******************************************************************************
 **                                                                          **
 **                             Primitives Routines                          **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3NewLine_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3NewLine_Write(TQ3FileObject theFile);


/*
 *  Q3Uns8_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns8_Read(
  TQ3Uns8 *       data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns8_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns8_Write(
  TQ3Uns8         data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns16_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns16_Read(
  TQ3Uns16 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns16_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns16_Write(
  TQ3Uns16        data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns32_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns32_Read(
  TQ3Uns32 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns32_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns32_Write(
  TQ3Uns32        data,
  TQ3FileObject   theFile);


/*
 *  Q3Int8_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int8_Read(
  TQ3Int8 *       data,
  TQ3FileObject   theFile);


/*
 *  Q3Int8_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int8_Write(
  TQ3Int8         data,
  TQ3FileObject   theFile);


/*
 *  Q3Int16_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int16_Read(
  TQ3Int16 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Int16_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int16_Write(
  TQ3Int16        data,
  TQ3FileObject   theFile);


/*
 *  Q3Int32_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int32_Read(
  TQ3Int32 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Int32_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int32_Write(
  TQ3Int32        data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns64_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns64_Read(
  TQ3Uns64 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Uns64_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Uns64_Write(
  TQ3Uns64        data,
  TQ3FileObject   theFile);


/*
 *  Q3Int64_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int64_Read(
  TQ3Int64 *      data,
  TQ3FileObject   theFile);


/*
 *  Q3Int64_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Int64_Write(
  TQ3Int64        data,
  TQ3FileObject   theFile);


/*
 *  Q3Float32_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Float32_Read(
  TQ3Float32 *    data,
  TQ3FileObject   theFile);


/*
 *  Q3Float32_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Float32_Write(
  TQ3Float32      data,
  TQ3FileObject   theFile);


/*
 *  Q3Float64_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Float64_Read(
  TQ3Float64 *    data,
  TQ3FileObject   theFile);


/*
 *  Q3Float64_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Float64_Write(
  TQ3Float64      data,
  TQ3FileObject   theFile);


/*
 *  Q3Size_Pad()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Size )
Q3Size_Pad(TQ3Size size);


/*
 * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
 */
/*
 *  Q3String_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3String_Read(
  char *           data,
  unsigned long *  length,
  TQ3FileObject    theFile);


/*
 *  Q3String_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3String_Write(
  const char *    data,
  TQ3FileObject   theFile);


/* 
 * This call will read Q3Size_Pad(size) bytes,
 *  but only place size bytes into data.
 */
/*
 *  Q3RawData_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RawData_Read(
  unsigned char *  data,
  unsigned long    size,
  TQ3FileObject    theFile);


/* 
 * This call will write Q3Size_Pad(size) bytes,
 *  adding 0's to pad to the nearest 4 byte boundary.
 */
/*
 *  Q3RawData_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RawData_Write(
  const unsigned char *  data,
  unsigned long          size,
  TQ3FileObject          theFile);


/******************************************************************************
 **                                                                          **
 **                     Convenient Primitives Routines                       **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3Point2D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Point2D_Read(
  TQ3Point2D *    point2D,
  TQ3FileObject   theFile);


/*
 *  Q3Point2D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Point2D_Write(
  const TQ3Point2D *  point2D,
  TQ3FileObject       theFile);


/*
 *  Q3Point3D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Point3D_Read(
  TQ3Point3D *    point3D,
  TQ3FileObject   theFile);


/*
 *  Q3Point3D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Point3D_Write(
  const TQ3Point3D *  point3D,
  TQ3FileObject       theFile);


/*
 *  Q3RationalPoint3D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RationalPoint3D_Read(
  TQ3RationalPoint3D *  point3D,
  TQ3FileObject         theFile);


/*
 *  Q3RationalPoint3D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RationalPoint3D_Write(
  const TQ3RationalPoint3D *  point3D,
  TQ3FileObject               theFile);


/*
 *  Q3RationalPoint4D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RationalPoint4D_Read(
  TQ3RationalPoint4D *  point4D,
  TQ3FileObject         theFile);


/*
 *  Q3RationalPoint4D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3RationalPoint4D_Write(
  const TQ3RationalPoint4D *  point4D,
  TQ3FileObject               theFile);


/*
 *  Q3Vector2D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Vector2D_Read(
  TQ3Vector2D *   vector2D,
  TQ3FileObject   theFile);


/*
 *  Q3Vector2D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Vector2D_Write(
  const TQ3Vector2D *  vector2D,
  TQ3FileObject        theFile);


/*
 *  Q3Vector3D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Vector3D_Read(
  TQ3Vector3D *   vector3D,
  TQ3FileObject   theFile);


/*
 *  Q3Vector3D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Vector3D_Write(
  const TQ3Vector3D *  vector3D,
  TQ3FileObject        theFile);


/*
 *  Q3Matrix4x4_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Matrix4x4_Read(
  TQ3Matrix4x4 *  matrix4x4,
  TQ3FileObject   theFile);


/*
 *  Q3Matrix4x4_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Matrix4x4_Write(
  const TQ3Matrix4x4 *  matrix4x4,
  TQ3FileObject         theFile);


/*
 *  Q3Tangent2D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Tangent2D_Read(
  TQ3Tangent2D *  tangent2D,
  TQ3FileObject   theFile);


/*
 *  Q3Tangent2D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Tangent2D_Write(
  const TQ3Tangent2D *  tangent2D,
  TQ3FileObject         theFile);


/*
 *  Q3Tangent3D_Read()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Tangent3D_Read(
  TQ3Tangent3D *  tangent3D,
  TQ3FileObject   theFile);


/*
 *  Q3Tangent3D_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Tangent3D_Write(
  const TQ3Tangent3D *  tangent3D,
  TQ3FileObject         theFile);


/*  This call affects only text Files - it is a no-op in binary files */
/*
 *  Q3Comment_Write()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Comment_Write(
  char *          comment,
  TQ3FileObject   theFile);


/******************************************************************************
 **                                                                          **
 **                             Unknown Object                               **
 **                                                                          **
 **     Unknown objects are generated when reading files which contain       **
 **     custom data which has not been registered in the current             **
 **     instantiation of QuickDraw 3D.                                       **
 **                                                                          **
 *****************************************************************************/
/*
 *  Q3Unknown_GetType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ObjectType )
Q3Unknown_GetType(TQ3UnknownObject unknownObject);


/*
 *  Q3Unknown_GetDirtyState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Unknown_GetDirtyState(
  TQ3UnknownObject   unknownObject,
  TQ3Boolean *       isDirty);


/*
 *  Q3Unknown_SetDirtyState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Unknown_SetDirtyState(
  TQ3UnknownObject   unknownObject,
  TQ3Boolean         isDirty);



/******************************************************************************
 **                                                                          **
 **                         Unknown Text Routines                            **
 **                                                                          **
 *****************************************************************************/
#endif  /* CALL_NOT_IN_CARBON */

struct TQ3UnknownTextData {
  char *              objectName;             /* '\0' terminated */
  char *              contents;               /* '\0' terminated */
};
typedef struct TQ3UnknownTextData       TQ3UnknownTextData;
#if CALL_NOT_IN_CARBON
/*
 *  Q3UnknownText_GetData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownText_GetData(
  TQ3UnknownObject      unknownObject,
  TQ3UnknownTextData *  unknownTextData);


/*
 *  Q3UnknownText_EmptyData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownText_EmptyData(TQ3UnknownTextData * unknownTextData);



/******************************************************************************
 **                                                                          **
 **                         Unknown Binary Routines                          **
 **                                                                          **
 *****************************************************************************/
#endif  /* CALL_NOT_IN_CARBON */

struct TQ3UnknownBinaryData {
  TQ3ObjectType       objectType;
  unsigned long       size;
  TQ3Endian           byteOrder;
  char *              contents;
};
typedef struct TQ3UnknownBinaryData     TQ3UnknownBinaryData;
#if CALL_NOT_IN_CARBON
/*
 *  Q3UnknownBinary_GetData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownBinary_GetData(
  TQ3UnknownObject        unknownObject,
  TQ3UnknownBinaryData *  unknownBinaryData);


/*
 *  Q3UnknownBinary_EmptyData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownBinary_EmptyData(TQ3UnknownBinaryData * unknownBinaryData);



#endif  /* CALL_NOT_IN_CARBON */

#if CALL_NOT_IN_CARBON
/*
 *  Q3UnknownBinary_GetTypeString()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownBinary_GetTypeString(
  TQ3UnknownObject   unknownObject,
  char **            typeString);


/*
 *  Q3UnknownBinary_EmptyTypeString()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3UnknownBinary_EmptyTypeString(char ** typeString);


#endif  /* CALL_NOT_IN_CARBON */

/******************************************************************************
 **                                                                          **
 **                         ViewHints routines                               **
 **                                                                          **
 **     ViewHints are an object in a metafile to give you some hints on how  **
 **     to render a scene.  You may create a view with any of the objects    **
 **     retrieved from it, or you can just throw it away.                    **
 **                                                                          **
 **     To write a view hints to a file, create a view hints object from a   **
 **     view and write the view hints.                                       **
 **                                                                          **
 *****************************************************************************/
#if CALL_NOT_IN_CARBON
/*
 *  Q3ViewHints_New()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3ViewHintsObject )
Q3ViewHints_New(TQ3ViewObject view);


/*
 *  Q3ViewHints_SetRenderer()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetRenderer(
  TQ3ViewHintsObject   viewHints,
  TQ3RendererObject    renderer);


/*
 *  Q3ViewHints_GetRenderer()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetRenderer(
  TQ3ViewHintsObject   viewHints,
  TQ3RendererObject *  renderer);


/*
 *  Q3ViewHints_SetCamera()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetCamera(
  TQ3ViewHintsObject   viewHints,
  TQ3CameraObject      camera);


/*
 *  Q3ViewHints_GetCamera()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetCamera(
  TQ3ViewHintsObject   viewHints,
  TQ3CameraObject *    camera);


/*
 *  Q3ViewHints_SetLightGroup()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetLightGroup(
  TQ3ViewHintsObject   viewHints,
  TQ3GroupObject       lightGroup);


/*
 *  Q3ViewHints_GetLightGroup()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetLightGroup(
  TQ3ViewHintsObject   viewHints,
  TQ3GroupObject *     lightGroup);


/*
 *  Q3ViewHints_SetAttributeSet()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetAttributeSet(
  TQ3ViewHintsObject   viewHints,
  TQ3AttributeSet      attributeSet);


/*
 *  Q3ViewHints_GetAttributeSet()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetAttributeSet(
  TQ3ViewHintsObject   viewHints,
  TQ3AttributeSet *    attributeSet);


/*
 *  Q3ViewHints_SetDimensionsState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetDimensionsState(
  TQ3ViewHintsObject   viewHints,
  TQ3Boolean           isValid);


/*
 *  Q3ViewHints_GetDimensionsState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetDimensionsState(
  TQ3ViewHintsObject   viewHints,
  TQ3Boolean *         isValid);


/*
 *  Q3ViewHints_SetDimensions()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetDimensions(
  TQ3ViewHintsObject   viewHints,
  unsigned long        width,
  unsigned long        height);


/*
 *  Q3ViewHints_GetDimensions()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetDimensions(
  TQ3ViewHintsObject   viewHints,
  unsigned long *      width,
  unsigned long *      height);


/*
 *  Q3ViewHints_SetMaskState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetMaskState(
  TQ3ViewHintsObject   viewHints,
  TQ3Boolean           isValid);


/*
 *  Q3ViewHints_GetMaskState()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetMaskState(
  TQ3ViewHintsObject   viewHints,
  TQ3Boolean *         isValid);


/*
 *  Q3ViewHints_SetMask()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetMask(
  TQ3ViewHintsObject   viewHints,
  const TQ3Bitmap *    mask);


/*
 *  Q3ViewHints_GetMask()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetMask(
  TQ3ViewHintsObject   viewHints,
  TQ3Bitmap *          mask);


/* Call Q3Bitmap_Empty when done with the mask  */
/*
 *  Q3ViewHints_SetClearImageMethod()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetClearImageMethod(
  TQ3ViewHintsObject               viewHints,
  TQ3DrawContextClearImageMethod   clearMethod);


/*
 *  Q3ViewHints_GetClearImageMethod()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetClearImageMethod(
  TQ3ViewHintsObject                viewHints,
  TQ3DrawContextClearImageMethod *  clearMethod);


/*
 *  Q3ViewHints_SetClearImageColor()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_SetClearImageColor(
  TQ3ViewHintsObject    viewHints,
  const TQ3ColorARGB *  color);


/*
 *  Q3ViewHints_GetClearImageColor()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3ViewHints_GetClearImageColor(
  TQ3ViewHintsObject   viewHints,
  TQ3ColorARGB *       color);




#endif  /* CALL_NOT_IN_CARBON */


#if PRAGMA_ENUM_ALWAYSINT
    #pragma enumsalwaysint reset
    #ifdef __QD3DIO__RESTORE_TWOBYTEINTS
        #pragma fourbyteints off
    #endif
#elif PRAGMA_ENUM_OPTIONS
    #pragma option enum=reset
#elif defined(__QD3DIO__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 /* __QD3DIO__ */