topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-Components.h / h



  /*
       File:       Components.h
   
       Contains:   QuickTime Interfaces.
   
       Version:    Technology: QuickTime 6.0
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1990-2001 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 __COMPONENTS__
  define __COMPONENTS__
  
  ifndef __MACERRORS__
  include <MacErrors.h>
  endif
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __MIXEDMODE__
  include <MixedMode.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=mac68k
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  enum {
      kAppleManufacturer          = FOUR_CHAR_CODE('appl'),       /* Apple supplied components */
      kComponentResourceType      = FOUR_CHAR_CODE('thng'),       /* a components resource type */
      kComponentAliasResourceType = FOUR_CHAR_CODE('thga')        /* component alias resource type */
  };
  
  enum {
      kAnyComponentType           = 0,
      kAnyComponentSubType        = 0,
      kAnyComponentManufacturer   = 0,
      kAnyComponentFlagsMask      = 0
  };
  
  enum {
      cmpIsMissing                = 1L << 29,
      cmpWantsRegisterMessage     = 1L << 31
  };
  
  enum {
      kComponentOpenSelect        = -1,                           /* ComponentInstance for this open */
      kComponentCloseSelect       = -2,                           /* ComponentInstance for this close */
      kComponentCanDoSelect       = -3,                           /* selector # being queried */
      kComponentVersionSelect     = -4,                           /* no params */
      kComponentRegisterSelect    = -5,                           /* no params */
      kComponentTargetSelect      = -6,                           /* ComponentInstance for top of call chain */
      kComponentUnregisterSelect  = -7,                           /* no params */
      kComponentGetMPWorkFunctionSelect = -8,                     /* some params */
      kComponentExecuteWiredActionSelect = -9,                    /* QTAtomContainer actionContainer, QTAtom actionAtom, QTCustomActionTargetPtr target, QTEventRecordPtr event */
      kComponentGetPublicResourceSelect = -10                     /* OSType resourceType, short resourceId, Handle *resource */
  };
  
  /* Component Resource Extension flags */
  enum {
      componentDoAutoVersion      = (1 << 0),
      componentWantsUnregister    = (1 << 1),
      componentAutoVersionIncludeFlags = (1 << 2),
      componentHasMultiplePlatforms = (1 << 3),
      componentLoadResident       = (1 << 4)
  };
  
  /* Set Default Component flags */
  enum {
      defaultComponentIdentical   = 0,
      defaultComponentAnyFlags    = 1,
      defaultComponentAnyManufacturer = 2,
      defaultComponentAnySubType  = 4,
      defaultComponentAnyFlagsAnyManufacturer = (defaultComponentAnyFlags + defaultComponentAnyManufacturer),
      defaultComponentAnyFlagsAnyManufacturerAnySubType = (defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType)
  };
  
  /* RegisterComponentResource flags */
  enum {
      registerComponentGlobal     = 1,
      registerComponentNoDuplicates = 2,
      registerComponentAfterExisting = 4,
      registerComponentAliasesOnly = 8
  };
  
  struct ComponentDescription {
      OSType                          componentType;              /* A unique 4-byte code indentifying the command set */
      OSType                          componentSubType;           /* Particular flavor of this instance */
      OSType                          componentManufacturer;      /* Vendor indentification */
      unsigned long                   componentFlags;             /* 8 each for Component,Type,SubType,Manuf/revision */
      unsigned long                   componentFlagsMask;         /* Mask for specifying which flags to consider in search, zero during registration */
  };
  typedef struct ComponentDescription     ComponentDescription;
  
  struct ResourceSpec {
      OSType                          resType;                    /* 4-byte code    */
      short                           resID;                      /*         */
  };
  typedef struct ResourceSpec             ResourceSpec;
  
  struct ComponentResource {
      ComponentDescription            cd;                         /* Registration parameters */
      ResourceSpec                    component;                  /* resource where Component code is found */
      ResourceSpec                    componentName;              /* name string resource */
      ResourceSpec                    componentInfo;              /* info string resource */
      ResourceSpec                    componentIcon;              /* icon resource */
  };
  typedef struct ComponentResource        ComponentResource;
  typedef ComponentResource *             ComponentResourcePtr;
  typedef ComponentResourcePtr *          ComponentResourceHandle;
  
  struct ComponentPlatformInfo {
      long                            componentFlags;             /* flags of Component */
      ResourceSpec                    component;                  /* resource where Component code is found */
      short                           platformType;               /* gestaltSysArchitecture result */
  };
  typedef struct ComponentPlatformInfo    ComponentPlatformInfo;
  
  struct ComponentResourceExtension {
      long                            componentVersion;           /* version of Component */
      long                            componentRegisterFlags;     /* flags for registration */
      short                           componentIconFamily;        /* resource id of Icon Family */
  };
  typedef struct ComponentResourceExtension ComponentResourceExtension;
  
  struct ComponentPlatformInfoArray {
      long                            count;
      ComponentPlatformInfo           platformArray[1];
  };
  typedef struct ComponentPlatformInfoArray ComponentPlatformInfoArray;
  
  struct ExtComponentResource {
      ComponentDescription            cd;                         /* registration parameters */
      ResourceSpec                    component;                  /* resource where Component code is found */
      ResourceSpec                    componentName;              /* name string resource */
      ResourceSpec                    componentInfo;              /* info string resource */
      ResourceSpec                    componentIcon;              /* icon resource */
      long                            componentVersion;           /* version of Component */
      long                            componentRegisterFlags;     /* flags for registration */
      short                           componentIconFamily;        /* resource id of Icon Family */
      long                            count;                      /* elements in platformArray */
      ComponentPlatformInfo           platformArray[1];
  };
  typedef struct ExtComponentResource     ExtComponentResource;
  typedef ExtComponentResource *          ExtComponentResourcePtr;
  typedef ExtComponentResourcePtr *       ExtComponentResourceHandle;
  
  struct ComponentAliasResource {
      ComponentResource               cr;                         /* Registration parameters */
      ComponentDescription            aliasCD;                    /* component alias description */
  };
  typedef struct ComponentAliasResource   ComponentAliasResource;
  /*  Structure received by Component:        */
  
  struct ComponentParameters {
      UInt8                           flags;                      /* call modifiers: sync/async, deferred, immed, etc */
      UInt8                           paramSize;                  /* size in bytes of actual parameters passed to this call */
      short                           what;                       /* routine selector, negative for Component management calls */
      long                            params[1];                  /* actual parameters for the indicated routine */
  };
  typedef struct ComponentParameters      ComponentParameters;
  
  struct ComponentRecord {
      long                            data[1];
  };
  typedef struct ComponentRecord          ComponentRecord;
  
  typedef ComponentRecord *               Component;
  
  struct ComponentInstanceRecord {
      long                            data[1];
  };
  typedef struct ComponentInstanceRecord  ComponentInstanceRecord;
  
  typedef ComponentInstanceRecord *       ComponentInstance;
  
  struct RegisteredComponentRecord {
      long                            data[1];
  };
  typedef struct RegisteredComponentRecord RegisteredComponentRecord;
  typedef RegisteredComponentRecord *     RegisteredComponentRecordPtr;
  
  typedef RegisteredComponentRecord *     RegisteredComponentPtr;
  
  struct RegisteredComponentInstanceRecord {
      long                            data[1];
  };
  typedef struct RegisteredComponentInstanceRecord RegisteredComponentInstanceRecord;
  typedef RegisteredComponentInstanceRecord * RegisteredComponentInstanceRecordPtr;
  
  typedef RegisteredComponentInstanceRecord * RegisteredComponentInstancePtr;
  typedef long                            ComponentResult;
  enum {
      platform68k                 = 1,                            /* platform type (response from gestaltComponentPlatform) */
      platformPowerPC             = 2,                            /* (when gestaltComponentPlatform is not implemented, use */
      platformInterpreted         = 3,                            /* gestaltSysArchitecture) */
      platformWin32               = 4,
      platformPowerPCNativeEntryPoint = 5
  };
  
  enum {
      mpWorkFlagDoWork            = (1 << 0),
      mpWorkFlagDoCompletion      = (1 << 1),
      mpWorkFlagCopyWorkBlock     = (1 << 2),
      mpWorkFlagDontBlock         = (1 << 3),
      mpWorkFlagGetProcessorCount = (1 << 4),
      mpWorkFlagGetIsRunning      = (1 << 6)
  };
  
  enum {
      cmpAliasNoFlags             = 0,
      cmpAliasOnlyThisFile        = 1
  };
  
  struct ComponentMPWorkFunctionHeaderRecord {
      UInt32                          headerSize;
      UInt32                          recordSize;
      UInt32                          workFlags;
      UInt16                          processorCount;
      UInt8                           unused;
      UInt8                           isRunning;
  };
  typedef struct ComponentMPWorkFunctionHeaderRecord ComponentMPWorkFunctionHeaderRecord;
  typedef ComponentMPWorkFunctionHeaderRecord * ComponentMPWorkFunctionHeaderRecordPtr;
  typedef CALLBACK_API( ComponentResult , ComponentMPWorkFunctionProcPtr )(void *globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header);
  typedef CALLBACK_API( ComponentResult , ComponentRoutineProcPtr )(ComponentParameters *cp, Handle componentStorage);
  typedef CALLBACK_API( OSErr , GetMissingComponentResourceProcPtr )(Component c, OSType resType, short resID, void *refCon, Handle *resource);
  typedef STACK_UPP_TYPE(ComponentMPWorkFunctionProcPtr)          ComponentMPWorkFunctionUPP;
  typedef STACK_UPP_TYPE(ComponentRoutineProcPtr)                 ComponentRoutineUPP;
  typedef STACK_UPP_TYPE(GetMissingComponentResourceProcPtr)      GetMissingComponentResourceUPP;
  /*
      The parameter list for each ComponentFunction is unique. It is
      therefore up to users to create the appropriate procInfo for their
      own ComponentFunctions where necessary.
  */
  
  typedef UniversalProcPtr                ComponentFunctionUPP;
  /*
      For Carbon, we add NewComponentFunctionUPP and DisposeComponentFunctionUPP
      calls that take a procInfo as their second parameter. This allows native
      Component writers to easily write a Carbon compliant component. Note that
      there is no InvokeComponentFunctionUPP, use the CallComponentFunction calls
      with the UPP instead.
  */
  
  if OPAQUE_UPP_TYPES
  EXTERN_API( ComponentFunctionUPP )
  NewComponentFunctionUPP         (ProcPtr                userRoutine,
                                   ProcInfoType           procInfo);
  
  EXTERN_API( void )
  DisposeComponentFunctionUPP     (ComponentFunctionUPP   userUPP);
  
  else
  define NewComponentFunctionUPP(userRoutine,procInfo)       (ComponentFunctionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), (ProcInfoType)procInfo, GetCurrentArchitecture())
  define DisposeComponentFunctionUPP(userUPP)                DisposeRoutineDescriptor(userUPP)
  endif  /* OPAQUE_UPP_TYPES */
  
  if TARGET_RT_MAC_CFM
  /* 
      CallComponentUPP is a global variable exported from InterfaceLib.
      It is the ProcPtr passed to CallUniversalProc to manually call a component function.
  */
  extern UniversalProcPtr CallComponentUPP;
  endif
  
  define ComponentCallNow( callNumber, paramSize ) \
      FIVEWORDINLINE( 0x2F3C,paramSize,callNumber,0x7000,0xA82A )
  
  
****************************************************** * APPLICATION LEVEL CALLS * * ******************************************************

  
  
****************************************************** Component Database Add, Delete, and Query Routines ******************************************************

  
  EXTERN_API( Component )
  RegisterComponent               (ComponentDescription * cd,
                                   ComponentRoutineUPP    componentEntryPoint,
                                   short                  global,
                                   Handle                 componentName,
                                   Handle                 componentInfo,
                                   Handle                 componentIcon)                      TWOWORDINLINE(0x7001, 0xA82A);
  
  EXTERN_API( Component )
  RegisterComponentResource       (ComponentResourceHandle  cr,
                                   short                  global)                             TWOWORDINLINE(0x7012, 0xA82A);
  
  EXTERN_API( OSErr )
  UnregisterComponent             (Component              aComponent)                         TWOWORDINLINE(0x7002, 0xA82A);
  
  EXTERN_API( Component )
  FindNextComponent               (Component              aComponent,
                                   ComponentDescription * looking)                            TWOWORDINLINE(0x7004, 0xA82A);
  
  EXTERN_API( long )
  CountComponents                 (ComponentDescription * looking)                            TWOWORDINLINE(0x7003, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentInfo                (Component              aComponent,
                                   ComponentDescription * cd,
                                   Handle                 componentName,
                                   Handle                 componentInfo,
                                   Handle                 componentIcon)                      TWOWORDINLINE(0x7005, 0xA82A);
  
  EXTERN_API( long )
  GetComponentListModSeed         (void)                                                      TWOWORDINLINE(0x7006, 0xA82A);
  
  EXTERN_API( long )
  GetComponentTypeModSeed         (OSType                 componentType)                      TWOWORDINLINE(0x702C, 0xA82A);
  
  
****************************************************** Component Instance Allocation and dispatch routines ******************************************************

  
  EXTERN_API( OSErr )
  OpenAComponent                  (Component              aComponent,
                                   ComponentInstance *    ci)                                 TWOWORDINLINE(0x702D, 0xA82A);
  
  EXTERN_API( ComponentInstance )
  OpenComponent                   (Component              aComponent)                         TWOWORDINLINE(0x7007, 0xA82A);
  
  EXTERN_API( OSErr )
  CloseComponent                  (ComponentInstance      aComponentInstance)                 TWOWORDINLINE(0x7008, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentInstanceError       (ComponentInstance      aComponentInstance)                 TWOWORDINLINE(0x700A, 0xA82A);
  
  
****************************************************** Component aliases ******************************************************

  
  EXTERN_API( Component )
  ResolveComponentAlias           (Component              aComponent)                         TWOWORDINLINE(0x7020, 0xA82A);
  
  
****************************************************** Component public resources and public string lists ******************************************************

  
  /* Note: GetComponentPublicResource returns a Handle, not a resource.  The caller must dispose it with DisposeHandle. */
  EXTERN_API( OSErr )
  GetComponentPublicResource      (Component              aComponent,
                                   OSType                 resourceType,
                                   short                  resourceID,
                                   Handle *               theResource)                        TWOWORDINLINE(0x7038, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentPublicResourceList  (OSType                 resourceType,
                                   short                  resourceID,
                                   long                   flags,
                                   ComponentDescription * cd,
                                   GetMissingComponentResourceUPP  missingProc,
                                   void *                 refCon,
                                   void *                 atomContainerPtr)                   TWOWORDINLINE(0x7039, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentPublicIndString     (Component              aComponent,
                                   Str255                 theString,
                                   short                  strListID,
                                   short                  index)                              TWOWORDINLINE(0x703A, 0xA82A);
  
  
****************************************************** * CALLS MADE BY COMPONENTS * * ******************************************************

  
  
****************************************************** Component Management routines ******************************************************

  
  EXTERN_API( void )
  SetComponentInstanceError       (ComponentInstance      aComponentInstance,
                                   OSErr                  theError)                           TWOWORDINLINE(0x700B, 0xA82A);
  
  EXTERN_API( long )
  GetComponentRefcon              (Component              aComponent)                         TWOWORDINLINE(0x7010, 0xA82A);
  
  EXTERN_API( void )
  SetComponentRefcon              (Component              aComponent,
                                   long                   theRefcon)                          TWOWORDINLINE(0x7011, 0xA82A);
  
  EXTERN_API( short )
  OpenComponentResFile            (Component              aComponent)                         TWOWORDINLINE(0x7015, 0xA82A);
  
  EXTERN_API( OSErr )
  OpenAComponentResFile           (Component              aComponent,
                                   short *                resRef)                             TWOWORDINLINE(0x702F, 0xA82A);
  
  EXTERN_API( OSErr )
  CloseComponentResFile           (short                  refnum)                             TWOWORDINLINE(0x7018, 0xA82A);
  
  /* Note: GetComponentResource returns a Handle, not a resource.  The caller must dispose it with DisposeHandle. */
  EXTERN_API( OSErr )
  GetComponentResource            (Component              aComponent,
                                   OSType                 resType,
                                   short                  resID,
                                   Handle *               theResource)                        TWOWORDINLINE(0x7035, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentIndString           (Component              aComponent,
                                   Str255                 theString,
                                   short                  strListID,
                                   short                  index)                              TWOWORDINLINE(0x7036, 0xA82A);
  
  
****************************************************** Component Instance Management routines ******************************************************

  
  EXTERN_API( Handle )
  GetComponentInstanceStorage     (ComponentInstance      aComponentInstance)                 TWOWORDINLINE(0x700C, 0xA82A);
  
  EXTERN_API( void )
  SetComponentInstanceStorage     (ComponentInstance      aComponentInstance,
                                   Handle                 theStorage)                         TWOWORDINLINE(0x700D, 0xA82A);
  
  EXTERN_API( long )
  GetComponentInstanceA5          (ComponentInstance      aComponentInstance)                 TWOWORDINLINE(0x700E, 0xA82A);
  
  EXTERN_API( void )
  SetComponentInstanceA5          (ComponentInstance      aComponentInstance,
                                   long                   theA5)                              TWOWORDINLINE(0x700F, 0xA82A);
  
  EXTERN_API( long )
  CountComponentInstances         (Component              aComponent)                         TWOWORDINLINE(0x7013, 0xA82A);
  
  /* useful helper routines for convenient method dispatching */
  EXTERN_API( long )
  CallComponentFunction           (ComponentParameters *  params,
                                   ComponentFunctionUPP   func)                               TWOWORDINLINE(0x70FF, 0xA82A);
  
  EXTERN_API( long )
  CallComponentFunctionWithStorage (Handle                storage,
                                   ComponentParameters *  params,
                                   ComponentFunctionUPP   func)                               TWOWORDINLINE(0x70FF, 0xA82A);
  
  if TARGET_OS_MAC
  EXTERN_API( long )
  CallComponentFunctionWithStorageProcInfo (Handle        storage,
                                   ComponentParameters *  params,
                                   ProcPtr                func,
                                   ProcInfoType           funcProcInfo);
  
  else
  define CallComponentFunctionWithStorageProcInfo(storage, params, func, funcProcInfo ) CallComponentFunctionWithStorage(storage, params, func)
  
  endif  /* TARGET_OS_MAC */
  
  EXTERN_API( long )
  DelegateComponentCall           (ComponentParameters *  originalParams,
                                   ComponentInstance      ci)                                 TWOWORDINLINE(0x7024, 0xA82A);
  
  EXTERN_API( OSErr )
  SetDefaultComponent             (Component              aComponent,
                                   short                  flags)                              TWOWORDINLINE(0x701E, 0xA82A);
  
  EXTERN_API( ComponentInstance )
  OpenDefaultComponent            (OSType                 componentType,
                                   OSType                 componentSubType)                   TWOWORDINLINE(0x7021, 0xA82A);
  
  EXTERN_API( OSErr )
  OpenADefaultComponent           (OSType                 componentType,
                                   OSType                 componentSubType,
                                   ComponentInstance *    ci)                                 TWOWORDINLINE(0x702E, 0xA82A);
  
  EXTERN_API( Component )
  CaptureComponent                (Component              capturedComponent,
                                   Component              capturingComponent)                 TWOWORDINLINE(0x701C, 0xA82A);
  
  EXTERN_API( OSErr )
  UncaptureComponent              (Component              aComponent)                         TWOWORDINLINE(0x701D, 0xA82A);
  
  EXTERN_API( long )
  RegisterComponentResourceFile   (short                  resRefNum,
                                   short                  global)                             TWOWORDINLINE(0x7014, 0xA82A);
  
  EXTERN_API( OSErr )
  GetComponentIconSuite           (Component              aComponent,
                                   Handle *               iconSuite)                          TWOWORDINLINE(0x7029, 0xA82A);
  
  
****************************************************** * Direct calls to the Components * * ******************************************************

  
  /* Old style names*/
  
  EXTERN_API( long )
  ComponentFunctionImplemented    (ComponentInstance      ci,
                                   short                  ftnNumber)                          FIVEWORDINLINE(0x2F3C, 0x0002, 0xFFFD, 0x7000, 0xA82A);
  
  EXTERN_API( long )
  GetComponentVersion             (ComponentInstance      ci)                                 FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFC, 0x7000, 0xA82A);
  
  EXTERN_API( long )
  ComponentSetTarget              (ComponentInstance      ci,
                                   ComponentInstance      target)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFA, 0x7000, 0xA82A);
  
  /* New style names*/
  
  EXTERN_API( ComponentResult )
  CallComponentOpen               (ComponentInstance      ci,
                                   ComponentInstance      self)                               FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFF, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentClose              (ComponentInstance      ci,
                                   ComponentInstance      self)                               FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFE, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentCanDo              (ComponentInstance      ci,
                                   short                  ftnNumber)                          FIVEWORDINLINE(0x2F3C, 0x0002, 0xFFFD, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentVersion            (ComponentInstance      ci)                                 FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFC, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentRegister           (ComponentInstance      ci)                                 FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFB, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentTarget             (ComponentInstance      ci,
                                   ComponentInstance      target)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFA, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentUnregister         (ComponentInstance      ci)                                 FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFF9, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentGetMPWorkFunction  (ComponentInstance      ci,
                                   ComponentMPWorkFunctionUPP * workFunction,
                                   void **                refCon)                             FIVEWORDINLINE(0x2F3C, 0x0008, 0xFFF8, 0x7000, 0xA82A);
  
  EXTERN_API( ComponentResult )
  CallComponentGetPublicResource  (ComponentInstance      ci,
                                   OSType                 resourceType,
                                   short                  resourceID,
                                   Handle *               resource)                           FIVEWORDINLINE(0x2F3C, 0x000A, 0xFFF6, 0x7000, 0xA82A);
  
  if !TARGET_OS_MAC
  /* 
          CallComponent is used by ComponentGlue routines to manually call a component function.
       */
  EXTERN_API( ComponentResult )
  CallComponent                   (ComponentInstance      ci,
                                   ComponentParameters *  cp);
  
  endif  /* !TARGET_OS_MAC */
  
  /*
      CallComponentDispatch is a CarbonLib routine that replaces CallComponent inline glue
      to call a component function.
   */
  EXTERN_API( ComponentResult )
  CallComponentDispatch           (ComponentParameters *  cp);
  
  /* UPP call backs */
  if OPAQUE_UPP_TYPES
      EXTERN_API(ComponentMPWorkFunctionUPP)
      NewComponentMPWorkFunctionUPP    (ComponentMPWorkFunctionProcPtr userRoutine);
  
      EXTERN_API(ComponentRoutineUPP)
      NewComponentRoutineUPP         (ComponentRoutineProcPtr userRoutine);
  
      EXTERN_API(GetMissingComponentResourceUPP)
      NewGetMissingComponentResourceUPP    (GetMissingComponentResourceProcPtr userRoutine);
  
      EXTERN_API(void)
      DisposeComponentMPWorkFunctionUPP    (ComponentMPWorkFunctionUPP userUPP);
  
      EXTERN_API(void)
      DisposeComponentRoutineUPP     (ComponentRoutineUPP     userUPP);
  
      EXTERN_API(void)
      DisposeGetMissingComponentResourceUPP    (GetMissingComponentResourceUPP userUPP);
  
      EXTERN_API(ComponentResult)
      InvokeComponentMPWorkFunctionUPP    (void *             globalRefCon,
                                      ComponentMPWorkFunctionHeaderRecordPtr header,
                                      ComponentMPWorkFunctionUPP userUPP);
  
      EXTERN_API(ComponentResult)
      InvokeComponentRoutineUPP      (ComponentParameters *   cp,
                                      Handle                  componentStorage,
                                      ComponentRoutineUPP     userUPP);
  
      EXTERN_API(OSErr)
      InvokeGetMissingComponentResourceUPP    (Component      c,
                                      OSType                  resType,
                                      short                   resID,
                                      void *                  refCon,
                                      Handle *                resource,
                                      GetMissingComponentResourceUPP userUPP);
  
  else
      enum { uppComponentMPWorkFunctionProcInfo = 0x000003F0 };       /* pascal 4_bytes Func(4_bytes, 4_bytes) */
      enum { uppComponentRoutineProcInfo = 0x000003F0 };              /* pascal 4_bytes Func(4_bytes, 4_bytes) */
      enum { uppGetMissingComponentResourceProcInfo = 0x0000FBE0 };   /* pascal 2_bytes Func(4_bytes, 4_bytes, 2_bytes, 4_bytes, 4_bytes) */
      #define NewComponentMPWorkFunctionUPP(userRoutine)              (ComponentMPWorkFunctionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppComponentMPWorkFunctionProcInfo, GetCurrentArchitecture())
      #define NewComponentRoutineUPP(userRoutine)                     (ComponentRoutineUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppComponentRoutineProcInfo, GetCurrentArchitecture())
      #define NewGetMissingComponentResourceUPP(userRoutine)          (GetMissingComponentResourceUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppGetMissingComponentResourceProcInfo, GetCurrentArchitecture())
      #define DisposeComponentMPWorkFunctionUPP(userUPP)              DisposeRoutineDescriptor(userUPP)
      #define DisposeComponentRoutineUPP(userUPP)                     DisposeRoutineDescriptor(userUPP)
      #define DisposeGetMissingComponentResourceUPP(userUPP)          DisposeRoutineDescriptor(userUPP)
      #define InvokeComponentMPWorkFunctionUPP(globalRefCon, header, userUPP)  (ComponentResult)CALL_TWO_PARAMETER_UPP((userUPP), uppComponentMPWorkFunctionProcInfo, (globalRefCon), (header))
      #define InvokeComponentRoutineUPP(cp, componentStorage, userUPP)  (ComponentResult)CALL_TWO_PARAMETER_UPP((userUPP), uppComponentRoutineProcInfo, (cp), (componentStorage))
      #define InvokeGetMissingComponentResourceUPP(c, resType, resID, refCon, resource, userUPP)  (OSErr)CALL_FIVE_PARAMETER_UPP((userUPP), uppGetMissingComponentResourceProcInfo, (c), (resType), (resID), (refCon), (resource))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewComponentMPWorkFunctionProc(userRoutine)             NewComponentMPWorkFunctionUPP(userRoutine)
  define NewComponentRoutineProc(userRoutine)                    NewComponentRoutineUPP(userRoutine)
  define NewGetMissingComponentResourceProc(userRoutine)         NewGetMissingComponentResourceUPP(userRoutine)
  define CallComponentMPWorkFunctionProc(userRoutine, globalRefCon, header) InvokeComponentMPWorkFunctionUPP(globalRefCon, header, userRoutine)
  define CallComponentRoutineProc(userRoutine, cp, componentStorage) InvokeComponentRoutineUPP(cp, componentStorage, userRoutine)
  define CallGetMissingComponentResourceProc(userRoutine, c, resType, resID, refCon, resource) InvokeGetMissingComponentResourceUPP(c, resType, resID, refCon, resource, userRoutine)
  /* ProcInfos */
  
  /* MixedMode ProcInfo constants for component calls */
  enum {
      uppComponentFunctionImplementedProcInfo    = 0x000002F0,
      uppGetComponentVersionProcInfo             = 0x000000F0,
      uppComponentSetTargetProcInfo              = 0x000003F0,
      uppCallComponentOpenProcInfo               = 0x000003F0,
      uppCallComponentCloseProcInfo              = 0x000003F0,
      uppCallComponentCanDoProcInfo              = 0x000002F0,
      uppCallComponentVersionProcInfo            = 0x000000F0,
      uppCallComponentRegisterProcInfo           = 0x000000F0,
      uppCallComponentTargetProcInfo             = 0x000003F0,
      uppCallComponentUnregisterProcInfo         = 0x000000F0,
      uppCallComponentGetMPWorkFunctionProcInfo  = 0x00000FF0,
      uppCallComponentGetPublicResourceProcInfo  = 0x00003BF0
  };
  
  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 /* __COMPONENTS__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.