/*
     File:       QD3DErrors.h
 
     Contains:   Error API and error codes
 
     Version:    Technology: Quickdraw 3D 1.6
                 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 __QD3DERRORS__
#define __QD3DERRORS__

#ifndef __QD3D__
#include "QD3D.h"
#endif


#if TARGET_OS_MAC
#ifndef __MACTYPES__
#include "MacTypes.h"
#endif

#endif  /* TARGET_OS_MAC */



#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 __QD3DERRORS__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 __QD3DERRORS__RESTORE_PACKED_ENUMS
        #pragma options(!pack_enums)
    #endif
#endif

/******************************************************************************
 **                                                                          **
 **                         Error Types and Codes                            **
 **                                                                          **
 *****************************************************************************/
enum TQ3Error {
  kQ3ErrorNone                  = 0,    /* Fatal Errors */
  kQ3ErrorInternalError         = -28500,
  kQ3ErrorNoRecovery            = -28499,
  kQ3ErrorLastFatalError        = -28498, /* System Errors */
  kQ3ErrorNotInitialized        = -28490,
  kQ3ErrorAlreadyInitialized    = -28489,
  kQ3ErrorUnimplemented         = -28488,
  kQ3ErrorRegistrationFailed    = -28487, /* OS Errors */
  kQ3ErrorUnixError             = -28486,
  kQ3ErrorMacintoshError        = -28485,
  kQ3ErrorX11Error              = -28484, /* Memory Errors */
  kQ3ErrorMemoryLeak            = -28483,
  kQ3ErrorOutOfMemory           = -28482, /* Parameter errors */
  kQ3ErrorNULLParameter         = -28481,
  kQ3ErrorParameterOutOfRange   = -28480,
  kQ3ErrorInvalidParameter      = -28479,
  kQ3ErrorInvalidData           = -28478,
  kQ3ErrorAcceleratorAlreadySet = -28477,
  kQ3ErrorVector3DNotUnitLength = -28476,
  kQ3ErrorVector3DZeroLength    = -28475, /* Object Errors */
  kQ3ErrorInvalidObject         = -28474,
  kQ3ErrorInvalidObjectClass    = -28473,
  kQ3ErrorInvalidObjectType     = -28472,
  kQ3ErrorInvalidObjectName     = -28471,
  kQ3ErrorObjectClassInUse      = -28470,
  kQ3ErrorAccessRestricted      = -28469,
  kQ3ErrorMetaHandlerRequired   = -28468,
  kQ3ErrorNeedRequiredMethods   = -28467,
  kQ3ErrorNoSubClassType        = -28466,
  kQ3ErrorUnknownElementType    = -28465,
  kQ3ErrorNotSupported          = -28464, /* Extension Errors */
  kQ3ErrorNoExtensionsFolder    = -28463,
  kQ3ErrorExtensionError        = -28462,
  kQ3ErrorPrivateExtensionError = -28461, /* Geometry Errors */
  kQ3ErrorDegenerateGeometry    = -28460,
  kQ3ErrorGeometryInsufficientNumberOfPoints = -28459, /* IO Errors */
  kQ3ErrorNoStorageSetForFile   = -28458,
  kQ3ErrorEndOfFile             = -28457,
  kQ3ErrorFileCancelled         = -28456,
  kQ3ErrorInvalidMetafile       = -28455,
  kQ3ErrorInvalidMetafilePrimitive = -28454,
  kQ3ErrorInvalidMetafileLabel  = -28453,
  kQ3ErrorInvalidMetafileObject = -28452,
  kQ3ErrorInvalidMetafileSubObject = -28451,
  kQ3ErrorInvalidSubObjectForObject = -28450,
  kQ3ErrorUnresolvableReference = -28449,
  kQ3ErrorUnknownObject         = -28448,
  kQ3ErrorStorageInUse          = -28447,
  kQ3ErrorStorageAlreadyOpen    = -28446,
  kQ3ErrorStorageNotOpen        = -28445,
  kQ3ErrorStorageIsOpen         = -28444,
  kQ3ErrorFileAlreadyOpen       = -28443,
  kQ3ErrorFileNotOpen           = -28442,
  kQ3ErrorFileIsOpen            = -28441,
  kQ3ErrorBeginWriteAlreadyCalled = -28440,
  kQ3ErrorBeginWriteNotCalled   = -28439,
  kQ3ErrorEndWriteNotCalled     = -28438,
  kQ3ErrorReadStateInactive     = -28437,
  kQ3ErrorStateUnavailable      = -28436,
  kQ3ErrorWriteStateInactive    = -28435,
  kQ3ErrorSizeNotLongAligned    = -28434,
  kQ3ErrorFileModeRestriction   = -28433,
  kQ3ErrorInvalidHexString      = -28432,
  kQ3ErrorWroteMoreThanSize     = -28431,
  kQ3ErrorWroteLessThanSize     = -28430,
  kQ3ErrorReadLessThanSize      = -28429,
  kQ3ErrorReadMoreThanSize      = -28428,
  kQ3ErrorNoBeginGroup          = -28427,
  kQ3ErrorSizeMismatch          = -28426,
  kQ3ErrorStringExceedsMaximumLength = -28425,
  kQ3ErrorValueExceedsMaximumSize = -28424,
  kQ3ErrorNonUniqueLabel        = -28423,
  kQ3ErrorEndOfContainer        = -28422,
  kQ3ErrorUnmatchedEndGroup     = -28421,
  kQ3ErrorFileVersionExists     = -28420, /* View errors */
  kQ3ErrorViewNotStarted        = -28419,
  kQ3ErrorViewIsStarted         = -28418,
  kQ3ErrorRendererNotSet        = -28417,
  kQ3ErrorRenderingIsActive     = -28416,
  kQ3ErrorImmediateModeUnderflow = -28415,
  kQ3ErrorDisplayNotSet         = -28414,
  kQ3ErrorCameraNotSet          = -28413,
  kQ3ErrorDrawContextNotSet     = -28412,
  kQ3ErrorNonInvertibleMatrix   = -28411,
  kQ3ErrorRenderingNotStarted   = -28410,
  kQ3ErrorPickingNotStarted     = -28409,
  kQ3ErrorBoundsNotStarted      = -28408,
  kQ3ErrorDataNotAvailable      = -28407,
  kQ3ErrorNothingToPop          = -28406, /* Renderer Errors */
  kQ3ErrorUnknownStudioType     = -28405,
  kQ3ErrorAlreadyRendering      = -28404,
  kQ3ErrorStartGroupRange       = -28403,
  kQ3ErrorUnsupportedGeometryType = -28402,
  kQ3ErrorInvalidGeometryType   = -28401,
  kQ3ErrorUnsupportedFunctionality = -28400, /* Group Errors */
  kQ3ErrorInvalidPositionForGroup = -28399,
  kQ3ErrorInvalidObjectForGroup = -28398,
  kQ3ErrorInvalidObjectForPosition = -28397, /* Transform Errors */
  kQ3ErrorScaleOfZero           = -28396, /* String Errors */
  kQ3ErrorBadStringType         = -28395, /* Attribute Errors */
  kQ3ErrorAttributeNotContained = -28394,
  kQ3ErrorAttributeInvalidType  = -28393, /* Camera Errors */
  kQ3ErrorInvalidCameraValues   = -28392, /* DrawContext Errors */
  kQ3ErrorBadDrawContextType    = -28391,
  kQ3ErrorBadDrawContextFlag    = -28390,
  kQ3ErrorBadDrawContext        = -28389,
  kQ3ErrorUnsupportedPixelDepth = -28388, /* Controller Errors */
  kQ3ErrorController            = -28387, /* Tracker Errors */
  kQ3ErrorTracker               = -28386, /* Another OS Error */
  kQ3ErrorWin32Error            = -28385, /* Object Errors */
  kQ3ErrorTypeAlreadyExistsAndHasSubclasses = -28384,
  kQ3ErrorTypeAlreadyExistsAndOtherClassesDependOnIt = -28383,
  kQ3ErrorTypeAlreadyExistsAndHasObjectInstances = -28382, /* submit loop errors: if you ever get one of these check the previous*/
                                        /* error posted, it may be kQ3ErrorOutOfMemory.  If so you *may* be able*/
                                        /* to recover by freeing up some memory and trying again*/
  kQ3ErrorPickingLoopFailed     = -28381,
  kQ3ErrorRenderingLoopFailed   = -28380,
  kQ3ErrorWritingLoopFailed     = -28379,
  kQ3ErrorBoundingLoopFailed    = -28378
};
typedef enum TQ3Error TQ3Error;

enum TQ3Warning {
  kQ3WarningNone                = 0,    /* General System */
  kQ3WarningInternalException   = -28300, /* Object Warnings */
  kQ3WarningNoObjectSupportForDuplicateMethod = -28299,
  kQ3WarningNoObjectSupportForDrawMethod = -28298,
  kQ3WarningNoObjectSupportForWriteMethod = -28297,
  kQ3WarningNoObjectSupportForReadMethod = -28296,
  kQ3WarningUnknownElementType  = -28295,
  kQ3WarningTypeAndMethodAlreadyDefined = -28294,
  kQ3WarningTypeIsOutOfRange    = -28293,
  kQ3WarningTypeHasNotBeenRegistered = -28292, /* Parameter Warnings */
  kQ3WarningVector3DNotUnitLength = -28291, /* IO Warnings */
  kQ3WarningInvalidSubObjectForObject = -28290,
  kQ3WarningInvalidHexString    = -28289,
  kQ3WarningUnknownObject       = -28288,
  kQ3WarningInvalidMetafileObject = -28287,
  kQ3WarningUnmatchedBeginGroup = -28286,
  kQ3WarningUnmatchedEndGroup   = -28285,
  kQ3WarningInvalidTableOfContents = -28284,
  kQ3WarningUnresolvableReference = -28283,
  kQ3WarningNoAttachMethod      = -28282,
  kQ3WarningInconsistentData    = -28281,
  kQ3WarningReadLessThanSize    = -28280,
  kQ3WarningFilePointerResolutionFailed = -28279,
  kQ3WarningFilePointerRedefined = -28278,
  kQ3WarningStringExceedsMaximumLength = -28277, /* Memory Warnings */
  kQ3WarningLowMemory           = -28276,
  kQ3WarningPossibleMemoryLeak  = -28275, /* View Warnings */
  kQ3WarningViewTraversalInProgress = -28274,
  kQ3WarningNonInvertibleMatrix = -28273, /* Quaternion Warning */
  kQ3WarningQuaternionEntriesAreZero = -28272, /* Renderer Warning */
  kQ3WarningFunctionalityNotSupported = -28271, /* DrawContext Warning */
  kQ3WarningInvalidPaneDimensions = -28270, /* Pick Warning */
  kQ3WarningPickParamOutside    = -28269, /* Scale Warnings */
  kQ3WarningScaleEntriesAllZero = -28268,
  kQ3WarningScaleContainsNegativeEntries = -28267, /* Generic Warnings */
  kQ3WarningParameterOutOfRange = -28266, /* Extension Warnings */
  kQ3WarningExtensionNotLoading = -28265, /* Object Warnings */
  kQ3WarningTypeAlreadyRegistered = -28264,
  kQ3WarningTypeSameVersionAlreadyRegistered = -28263,
  kQ3WarningTypeNewerVersionAlreadyRegistered = -28262, /* Invalid Group Object */
  kQ3WarningInvalidObjectInGroupMetafile = -28261
};
typedef enum TQ3Warning TQ3Warning;


enum TQ3Notice {
  kQ3NoticeNone                 = 0,
  kQ3NoticeDataAlreadyEmpty     = -28100,
  kQ3NoticeMethodNotSupported   = -28099,
  kQ3NoticeObjectAlreadySet     = -28098,
  kQ3NoticeParameterOutOfRange  = -28097,
  kQ3NoticeFileAliasWasChanged  = -28096,
  kQ3NoticeMeshVertexHasNoComponent = -28095,
  kQ3NoticeMeshInvalidVertexFacePair = -28094,
  kQ3NoticeMeshEdgeVertexDoNotCorrespond = -28093,
  kQ3NoticeMeshEdgeIsNotBoundary = -28092,
  kQ3NoticeDrawContextNotSetUsingInternalDefaults = -28091,
  kQ3NoticeInvalidAttenuationTypeUsingInternalDefaults = -28090,
  kQ3NoticeBrightnessGreaterThanOne = -28089,
  kQ3NoticeScaleContainsZeroEntries = -28088,
  kQ3NoticeSystemAlreadyInitialized = -28087,
  kQ3NoticeViewSyncCalledAgain  = -28086,
  kQ3NoticeFileCancelled        = -28085
};
typedef enum TQ3Notice TQ3Notice;

typedef CALLBACK_API_C( void , TQ3ErrorMethod )(TQ3Error firstError, TQ3Error lastError, long reference);
typedef CALLBACK_API_C( void , TQ3WarningMethod )(TQ3Warning firstWarning, TQ3Warning lastWarning, long reference);
typedef CALLBACK_API_C( void , TQ3NoticeMethod )(TQ3Notice firstNotice, TQ3Notice lastNotice, long reference);
/******************************************************************************
 **                                                                          **
 **                             Error Routines                               **
 **                                                                          **
 *****************************************************************************/
#if CALL_NOT_IN_CARBON
/*
 *  Q3Error_Register()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Error_Register(
  TQ3ErrorMethod   errorPost,
  long             reference);


/*
 *  Q3Warning_Register()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Warning_Register(
  TQ3WarningMethod   warningPost,
  long               reference);


/*
 *  Q3Notice_Register()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Status )
Q3Notice_Register(
  TQ3NoticeMethod   noticePost,
  long              reference);


/*
 *  Getting error codes -
 *  Clears error type on next entry into system (except all of these 
 *  error calls), and returns the last error, and optionally the 
 *  first error. The parameter to these "_Get" calls may be NULL.
 */
/*
 *  Q3Error_Get()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Error )
Q3Error_Get(TQ3Error * firstError);


/*
 *  Q3Error_IsFatalError()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Boolean )
Q3Error_IsFatalError(TQ3Error error);


/*
 *  Q3Warning_Get()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Warning )
Q3Warning_Get(TQ3Warning * firstWarning);


/*
 *  Q3Notice_Get()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( TQ3Notice )
Q3Notice_Get(TQ3Notice * firstNotice);


#endif  /* CALL_NOT_IN_CARBON */

#if TARGET_OS_MAC
#if CALL_NOT_IN_CARBON
/*
 *  Q3MacintoshError_Get()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available
 *    Mac OS X:         not available
 */
EXTERN_API_C( OSErr )
Q3MacintoshError_Get(OSErr * firstMacErr);


#endif  /* CALL_NOT_IN_CARBON */

#endif  /* TARGET_OS_MAC */



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

