topical media & game development

talk show tell print

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



  /*
       File:       MacMemory.h
   
       Contains:   Memory Manager Interfaces.
   
       Version:    Technology: System 8.5
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1985-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 __MACMEMORY__
  define __MACMEMORY__
  
  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 {
      maxSize                     = 0x7FFFFFF0                    /*the largest block possible*/
  };
  
  enum {
      defaultPhysicalEntryCount   = 8
  };
  
  enum {
                                                                  /* values returned from the GetPageState function */
      kPageInMemory               = 0,
      kPageOnDisk                 = 1,
      kNotPaged                   = 2
  };
  
  enum {
                                                                  /* masks for Zone->heapType field */
      k32BitHeap                  = 1,                            /* valid in all Memory Managers */
      kNewStyleHeap               = 2,                            /* true if new Heap Manager is present */
      kNewDebugHeap               = 4                             /* true if new Heap Manager is running in debug mode on this heap */
  };
  
  /* Note: The type "Size" moved to Types.h */
  
  typedef CALLBACK_API( long , GrowZoneProcPtr )(Size cbNeeded);
  typedef CALLBACK_API( void , PurgeProcPtr )(Handle blockToPurge);
  typedef CALLBACK_API( void , UserFnProcPtr )(void *parameter);
  /*
      WARNING: UserFnProcPtr uses register based parameters under classic 68k
               and cannot be written in a high-level language without 
               the help of mixed mode or assembly glue.
  */
  typedef STACK_UPP_TYPE(GrowZoneProcPtr)                         GrowZoneUPP;
  typedef STACK_UPP_TYPE(PurgeProcPtr)                            PurgeUPP;
  typedef REGISTER_UPP_TYPE(UserFnProcPtr)                        UserFnUPP;
  
  struct Zone {
      Ptr                             bkLim;
      Ptr                             purgePtr;
      Ptr                             hFstFree;
      long                            zcbFree;
      GrowZoneUPP                     gzProc;
      short                           moreMast;
      short                           flags;
      short                           cntRel;
      short                           maxRel;
      short                           cntNRel;
      SInt8                           heapType;                   /* previously "maxNRel", now holds flags (e.g. k32BitHeap)*/
      SInt8                           unused;
      short                           cntEmpty;
      short                           cntHandles;
      long                            minCBFree;
      PurgeUPP                        purgeProc;
      Ptr                             sparePtr;
      Ptr                             allocPtr;
      short                           heapData;
  };
  typedef struct Zone                     Zone;
  
  typedef Zone *                          THz;
  
  struct MemoryBlock {
      void *                          address;
      unsigned long                   count;
  };
  typedef struct MemoryBlock              MemoryBlock;
  
  struct LogicalToPhysicalTable {
      MemoryBlock                     logical;
      MemoryBlock                     physical[8];
  };
  typedef struct LogicalToPhysicalTable   LogicalToPhysicalTable;
  
  typedef short                           PageState;
  typedef short                           StatusRegisterContents;
  enum {
      kVolumeVirtualMemoryInfoVersion1 = 1                        /* first version of VolumeVirtualMemoryInfo*/
  };
  
  struct VolumeVirtualMemoryInfo {
      PBVersion                       version;                    /* Input: Version of the VolumeVirtualMemoryInfo structure*/
      SInt16                          volumeRefNum;               /* Input: volume reference number*/
      Boolean                         inUse;                      /* output: true if volume is currently used for file mapping*/
      UInt8                           _fill;
      UInt32                          vmOptions;                  /* output: tells what volume can support (same as DriverGestaltVMOptionsResponse vmOptions bits in DriverGestalt)*/
                                                                  /* end of kVolumeVirtualMemoryInfoVersion1 structure*/
  };
  typedef struct VolumeVirtualMemoryInfo  VolumeVirtualMemoryInfo;
  typedef VolumeVirtualMemoryInfo *       VolumeVirtualMemoryInfoPtr;
  if OPAQUE_UPP_TYPES
      EXTERN_API(GrowZoneUPP)
      NewGrowZoneUPP                 (GrowZoneProcPtr         userRoutine);
  
      EXTERN_API(PurgeUPP)
      NewPurgeUPP                    (PurgeProcPtr            userRoutine);
  
      EXTERN_API(UserFnUPP)
      NewUserFnUPP                   (UserFnProcPtr           userRoutine);
  
      EXTERN_API(void)
      DisposeGrowZoneUPP             (GrowZoneUPP             userUPP);
  
      EXTERN_API(void)
      DisposePurgeUPP                (PurgeUPP                userUPP);
  
      EXTERN_API(void)
      DisposeUserFnUPP               (UserFnUPP               userUPP);
  
      EXTERN_API(long)
      InvokeGrowZoneUPP              (Size                    cbNeeded,
                                      GrowZoneUPP             userUPP);
  
      EXTERN_API(void)
      InvokePurgeUPP                 (Handle                  blockToPurge,
                                      PurgeUPP                userUPP);
  
      EXTERN_API(void)
      InvokeUserFnUPP                (void *                  parameter,
                                      UserFnUPP               userUPP);
  
  else
      enum { uppGrowZoneProcInfo = 0x000000F0 };                      /* pascal 4_bytes Func(4_bytes) */
      enum { uppPurgeProcInfo = 0x000000C0 };                         /* pascal no_return_value Func(4_bytes) */
      enum { uppUserFnProcInfo = 0x00009802 };                        /* register no_return_value Func(4_bytes:A0) */
      #define NewGrowZoneUPP(userRoutine)                             (GrowZoneUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppGrowZoneProcInfo, GetCurrentArchitecture())
      #define NewPurgeUPP(userRoutine)                                (PurgeUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppPurgeProcInfo, GetCurrentArchitecture())
      #define NewUserFnUPP(userRoutine)                               (UserFnUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserFnProcInfo, GetCurrentArchitecture())
      #define DisposeGrowZoneUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
      #define DisposePurgeUPP(userUPP)                                DisposeRoutineDescriptor(userUPP)
      #define DisposeUserFnUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
      #define InvokeGrowZoneUPP(cbNeeded, userUPP)                    (long)CALL_ONE_PARAMETER_UPP((userUPP), uppGrowZoneProcInfo, (cbNeeded))
      #define InvokePurgeUPP(blockToPurge, userUPP)                   CALL_ONE_PARAMETER_UPP((userUPP), uppPurgeProcInfo, (blockToPurge))
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      #pragma parameter InvokeUserFnUPP(__A0, __A1)
      void InvokeUserFnUPP(void * parameter, UserFnUPP userUPP) = 0x4E91;
      #else
          #define InvokeUserFnUPP(parameter, userUPP)                     CALL_ONE_PARAMETER_UPP((userUPP), uppUserFnProcInfo, (parameter))
      #endif
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewGrowZoneProc(userRoutine)                            NewGrowZoneUPP(userRoutine)
  define NewPurgeProc(userRoutine)                               NewPurgeUPP(userRoutine)
  define NewUserFnProc(userRoutine)                              NewUserFnUPP(userRoutine)
  define CallGrowZoneProc(userRoutine, cbNeeded)                 InvokeGrowZoneUPP(cbNeeded, userRoutine)
  define CallPurgeProc(userRoutine, blockToPurge)                InvokePurgeUPP(blockToPurge, userRoutine)
  define CallUserFnProc(userRoutine, parameter)                  InvokeUserFnUPP(parameter, userRoutine)
  if CALL_NOT_IN_CARBON
  EXTERN_API( Ptr )
  GetApplLimit                    (void)                                                      TWOWORDINLINE(0x2EB8, 0x0130);
  
  EXTERN_API( THz )
  SystemZone                      (void)                                                      TWOWORDINLINE(0x2EB8, 0x02A6);
  
  EXTERN_API( THz )
  ApplicationZone                 (void)                                                      TWOWORDINLINE(0x2EB8, 0x02AA);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  EXTERN_API( Handle )
  GZSaveHnd                       (void)                                                      TWOWORDINLINE(0x2EB8, 0x0328);
  
  EXTERN_API( Ptr )
  TopMem                          (void)                                                      TWOWORDINLINE(0x2EB8, 0x0108);
  
  EXTERN_API( OSErr )
  MemError                        (void)                                                      TWOWORDINLINE(0x3EB8, 0x0220);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 GetZone
                                                                                              #endif
  EXTERN_API( THz )
  GetZone                         (void)                                                      ONEWORDINLINE(0xA11A);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewHandle(__D0)
                                                                                              #endif
  EXTERN_API( Handle )
  NewHandle                       (Size                   byteCount)                          ONEWORDINLINE(0xA122);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewHandleSys(__D0)
                                                                                              #endif
  EXTERN_API( Handle )
  NewHandleSys                    (Size                   byteCount)                          ONEWORDINLINE(0xA522);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewHandleClear(__D0)
                                                                                              #endif
  EXTERN_API( Handle )
  NewHandleClear                  (Size                   byteCount)                          ONEWORDINLINE(0xA322);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewHandleSysClear(__D0)
                                                                                              #endif
  EXTERN_API( Handle )
  NewHandleSysClear               (Size                   byteCount)                          ONEWORDINLINE(0xA722);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 HandleZone(__A0)
                                                                                              #endif
  EXTERN_API( THz )
  HandleZone                      (Handle                 h)                                  ONEWORDINLINE(0xA126);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 RecoverHandle(__A0)
                                                                                              #endif
  EXTERN_API( Handle )
  RecoverHandle                   (Ptr                    p)                                  ONEWORDINLINE(0xA128);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 RecoverHandleSys(__A0)
                                                                                              #endif
  EXTERN_API( Handle )
  RecoverHandleSys                (Ptr                    p)                                  ONEWORDINLINE(0xA528);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewPtr(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  NewPtr                          (Size                   byteCount)                          ONEWORDINLINE(0xA11E);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewPtrSys(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  NewPtrSys                       (Size                   byteCount)                          ONEWORDINLINE(0xA51E);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewPtrClear(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  NewPtrClear                     (Size                   byteCount)                          ONEWORDINLINE(0xA31E);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewPtrSysClear(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  NewPtrSysClear                  (Size                   byteCount)                          ONEWORDINLINE(0xA71E);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 PtrZone(__A0)
                                                                                              #endif
  EXTERN_API( THz )
  PtrZone                         (Ptr                    p)                                  ONEWORDINLINE(0xA148);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MaxBlock
                                                                                              #endif
  EXTERN_API( long )
  MaxBlock                        (void)                                                      ONEWORDINLINE(0xA061);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MaxBlockSys
                                                                                              #endif
  EXTERN_API( long )
  MaxBlockSys                     (void)                                                      ONEWORDINLINE(0xA461);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 StackSpace
                                                                                              #endif
  EXTERN_API( long )
  StackSpace                      (void)                                                      ONEWORDINLINE(0xA065);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewEmptyHandle
                                                                                              #endif
  EXTERN_API( Handle )
  NewEmptyHandle                  (void)                                                      ONEWORDINLINE(0xA166);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 NewEmptyHandleSys
                                                                                              #endif
  EXTERN_API( Handle )
  NewEmptyHandleSys               (void)                                                      ONEWORDINLINE(0xA566);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HLock(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HLock                           (Handle                 h)                                  ONEWORDINLINE(0xA029);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HUnlock(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HUnlock                         (Handle                 h)                                  ONEWORDINLINE(0xA02A);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HPurge(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HPurge                          (Handle                 h)                                  ONEWORDINLINE(0xA049);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HNoPurge(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HNoPurge                        (Handle                 h)                                  ONEWORDINLINE(0xA04A);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HLockHi(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HLockHi                         (Handle                 h)                                  TWOWORDINLINE(0xA064, 0xA029);
  
  EXTERN_API( Handle )
  TempNewHandle                   (Size                   logicalSize,
                                   OSErr *                resultCode)                         THREEWORDINLINE(0x3F3C, 0x001D, 0xA88F);
  
  EXTERN_API( Size )
  TempMaxMem                      (Size *                 grow)                               THREEWORDINLINE(0x3F3C, 0x0015, 0xA88F);
  
  EXTERN_API( long )
  TempFreeMem                     (void)                                                      THREEWORDINLINE(0x3F3C, 0x0018, 0xA88F);
  
  if CALL_NOT_IN_CARBON
  EXTERN_API( void )
  InitZone                        (GrowZoneUPP            pgrowZone,
                                   short                  cmoreMasters,
                                   void *                 limitPtr,
                                   void *                 startPtr);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetZone(__A0)
                                                                                              #endif
  EXTERN_API( void )
  SetZone                         (THz                    hz)                                 ONEWORDINLINE(0xA01B);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 CompactMem(__D0)
                                                                                              #endif
  EXTERN_API( Size )
  CompactMem                      (Size                   cbNeeded)                           ONEWORDINLINE(0xA04C);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 CompactMemSys(__D0)
                                                                                              #endif
  EXTERN_API( Size )
  CompactMemSys                   (Size                   cbNeeded)                           ONEWORDINLINE(0xA44C);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter PurgeMem(__D0)
                                                                                              #endif
  EXTERN_API( void )
  PurgeMem                        (Size                   cbNeeded)                           ONEWORDINLINE(0xA04D);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter PurgeMemSys(__D0)
                                                                                              #endif
  EXTERN_API( void )
  PurgeMemSys                     (Size                   cbNeeded)                           ONEWORDINLINE(0xA44D);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 FreeMem
                                                                                              #endif
  EXTERN_API( long )
  FreeMem                         (void)                                                      ONEWORDINLINE(0xA01C);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 FreeMemSys
                                                                                              #endif
  EXTERN_API( long )
  FreeMemSys                      (void)                                                      ONEWORDINLINE(0xA41C);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter ReserveMem(__D0)
                                                                                              #endif
  EXTERN_API( void )
  ReserveMem                      (Size                   cbNeeded)                           ONEWORDINLINE(0xA040);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter ReserveMemSys(__D0)
                                                                                              #endif
  EXTERN_API( void )
  ReserveMemSys                   (Size                   cbNeeded)                           ONEWORDINLINE(0xA440);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MaxMem(__A1)
                                                                                              #endif
  EXTERN_API( Size )
  MaxMem                          (Size *                 grow)                               TWOWORDINLINE(0xA11D, 0x2288);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MaxMemSys(__A1)
                                                                                              #endif
  EXTERN_API( Size )
  MaxMemSys                       (Size *                 grow)                               TWOWORDINLINE(0xA51D, 0x2288);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetGrowZone(__A0)
                                                                                              #endif
  EXTERN_API( void )
  SetGrowZone                     (GrowZoneUPP            growZone)                           ONEWORDINLINE(0xA04B);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter MoveHHi(__A0)
                                                                                              #endif
  EXTERN_API( void )
  MoveHHi                         (Handle                 h)                                  ONEWORDINLINE(0xA064);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter DisposePtr(__A0)
                                                                                              #endif
  EXTERN_API( void )
  DisposePtr                      (Ptr                    p)                                  ONEWORDINLINE(0xA01F);
  
  EXTERN_API( Size )
  GetPtrSize                      (Ptr                    p);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetPtrSize(__A0, __D0)
                                                                                              #endif
  EXTERN_API( void )
  SetPtrSize                      (Ptr                    p,
                                   Size                   newSize)                            ONEWORDINLINE(0xA020);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter DisposeHandle(__A0)
                                                                                              #endif
  EXTERN_API( void )
  DisposeHandle                   (Handle                 h)                                  ONEWORDINLINE(0xA023);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetHandleSize(__A0, __D0)
                                                                                              #endif
  EXTERN_API( void )
  SetHandleSize                   (Handle                 h,
                                   Size                   newSize)                            ONEWORDINLINE(0xA024);
  
  /* 
      NOTE
      
      GetHandleSize and GetPtrSize are documented in Inside Mac as returning 0 
      in case of an error, but the traps actually return an error code in D0.
      The glue sets D0 to 0 if an error occurred.
  */
  EXTERN_API( Size )
  GetHandleSize                   (Handle                 h);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 InlineGetHandleSize(__A0)
                                                                                              #endif
  EXTERN_API( Size )
  InlineGetHandleSize             (Handle                 h)                                  ONEWORDINLINE(0xA025);
  
  if !TARGET_OS_MAC
  define InlineGetHandleSize GetHandleSize
  endif
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter ReallocateHandle(__A0, __D0)
                                                                                              #endif
  EXTERN_API( void )
  ReallocateHandle                (Handle                 h,
                                   Size                   byteCount)                          ONEWORDINLINE(0xA027);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter ReallocateHandleSys(__A0, __D0)
                                                                                              #endif
  EXTERN_API( void )
  ReallocateHandleSys             (Handle                 h,
                                   Size                   byteCount)                          ONEWORDINLINE(0xA427);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter EmptyHandle(__A0)
                                                                                              #endif
  EXTERN_API( void )
  EmptyHandle                     (Handle                 h)                                  ONEWORDINLINE(0xA02B);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HSetRBit(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HSetRBit                        (Handle                 h)                                  ONEWORDINLINE(0xA067);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HClrRBit(__A0)
                                                                                              #endif
  EXTERN_API( void )
  HClrRBit                        (Handle                 h)                                  ONEWORDINLINE(0xA068);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 HGetState(__A0)
                                                                                              #endif
  EXTERN_API( SInt8 )
  HGetState                       (Handle                 h)                                  ONEWORDINLINE(0xA069);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter HSetState(__A0, __D0)
                                                                                              #endif
  EXTERN_API( void )
  HSetState                       (Handle                 h,
                                   SInt8                  flags)                              ONEWORDINLINE(0xA06A);
  
  EXTERN_API( void )
  PurgeSpace                      (long *                 total,
                                   long *                 contig);
  
  /*
      PurgeSpaceTotal and PurgeSpaceContiguous are currently only implement
      on classic 68K.  The are the same as PurgeSpace() but return just
      one value (either total space purgable or contiguous space purgable).
      Begining in Mac OS 8.5 they are available in InterfaceLib.
  */
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 PurgeSpaceTotal
                                                                                              #endif
  EXTERN_API( long )
  PurgeSpaceTotal                 (void)                                                      ONEWORDINLINE(0xA062);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 PurgeSpaceContiguous
                                                                                              #endif
  EXTERN_API( long )
  PurgeSpaceContiguous            (void)                                                      ONEWORDINLINE(0xA062);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __A0 PurgeSpaceSysTotal
                                                                                              #endif
  EXTERN_API( long )
  PurgeSpaceSysTotal              (void)                                                      ONEWORDINLINE(0xA562);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 PurgeSpaceSysContiguous
                                                                                              #endif
  EXTERN_API( long )
  PurgeSpaceSysContiguous         (void)                                                      ONEWORDINLINE(0xA562);
  
  
***************************************************************************

      The routines: 
  
          BlockMoveUncached, BlockMoveDataUncached
          BlockZero, BlockZeroUncached
      
      were first created for developers writing drivers. Originally they only
      existed in DriverServicesLib.  Later they were added to InterfaceLib 
      in PCI based PowerMacs.  MacOS 8.5 provides these routines in InterfaceLib
      on all supported machines. 
      
  *****************************************************************************/
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter BlockMove(__A0, __A1, __D0)
                                                                                              #endif
  EXTERN_API( void )
  BlockMove                       (const void *           srcPtr,
                                   void *                 destPtr,
                                   Size                   byteCount)                          ONEWORDINLINE(0xA02E);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter BlockMoveData(__A0, __A1, __D0)
                                                                                              #endif
  EXTERN_API( void )
  BlockMoveData                   (const void *           srcPtr,
                                   void *                 destPtr,
                                   Size                   byteCount)                          ONEWORDINLINE(0xA22E);
  
  EXTERN_API_C( void )
  BlockMoveUncached               (const void *           srcPtr,
                                   void *                 destPtr,
                                   Size                   byteCount);
  
  EXTERN_API_C( void )
  BlockMoveDataUncached           (const void *           srcPtr,
                                   void *                 destPtr,
                                   Size                   byteCount);
  
  EXTERN_API_C( void )
  BlockZero                       (void *                 destPtr,
                                   Size                   byteCount);
  
  EXTERN_API_C( void )
  BlockZeroUncached               (void *                 destPtr,
                                   Size                   byteCount);
  
  if CALL_NOT_IN_CARBON
  EXTERN_API( void )
  MaxApplZone                     (void)                                                      ONEWORDINLINE(0xA063);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetApplBase(__A0)
                                                                                              #endif
  EXTERN_API( void )
  SetApplBase                     (void *                 startPtr)                           ONEWORDINLINE(0xA057);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  EXTERN_API( void )
  MoreMasters                     (void)                                                      ONEWORDINLINE(0xA036);
  
  if TARGET_API_MAC_CARBON
  EXTERN_API_C( void )
  MoreMasterPointers              (UInt32                 inCount);
  
  endif  /* TARGET_API_MAC_CARBON */
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SetApplLimit(__A0)
                                                                                              #endif
  EXTERN_API( void )
  SetApplLimit                    (void *                 zoneLimit)                          ONEWORDINLINE(0xA02D);
  
  EXTERN_API( void )
  InitApplZone                    (void)                                                      ONEWORDINLINE(0xA02C);
  
  /*  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  */
  endif  /* CALL_NOT_IN_CARBON */
  
  EXTERN_API( void )
  TempHLock                       (Handle                 h,
                                   OSErr *                resultCode)                         THREEWORDINLINE(0x3F3C, 0x001E, 0xA88F);
  
  EXTERN_API( void )
  TempHUnlock                     (Handle                 h,
                                   OSErr *                resultCode)                         THREEWORDINLINE(0x3F3C, 0x001F, 0xA88F);
  
  EXTERN_API( void )
  TempDisposeHandle               (Handle                 h,
                                   OSErr *                resultCode)                         THREEWORDINLINE(0x3F3C, 0x0020, 0xA88F);
  
  EXTERN_API( Ptr )
  TempTopMem                      (void)                                                      THREEWORDINLINE(0x3F3C, 0x0016, 0xA88F);
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 HoldMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  HoldMemory                      (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7000, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 UnholdMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  UnholdMemory                    (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7001, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 LockMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  LockMemory                      (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7002, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 LockMemoryForOutput(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  LockMemoryForOutput             (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x700A, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 LockMemoryContiguous(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  LockMemoryContiguous            (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7004, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 UnlockMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  UnlockMemory                    (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7003, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MakeMemoryResident(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  MakeMemoryResident              (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x700B, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 ReleaseMemoryData(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  ReleaseMemoryData               (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x700C, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 MakeMemoryNonResident(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  MakeMemoryNonResident           (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x700D, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 FlushMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  FlushMemory                     (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x700E, 0xA05C);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
  EXTERN_API( OSErr )
  GetPhysical                     (LogicalToPhysicalTable * addresses,
                                   unsigned long *        physicalEntryCount);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 GetVolumeVirtualMemoryInfo(__A0)
                                                                                              #endif
  EXTERN_API( OSErr )
  GetVolumeVirtualMemoryInfo      (VolumeVirtualMemoryInfoPtr  volVMInfo)                     TWOWORDINLINE(0x700F, 0xA05C);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 DeferUserFn(__A0, __D0)
                                                                                              #endif
  EXTERN_API( OSErr )
  DeferUserFn                     (UserFnUPP              userFunction,
                                   void *                 argument)                           ONEWORDINLINE(0xA08F);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 DebuggerGetMax
                                                                                              #endif
  EXTERN_API( long )
  DebuggerGetMax                  (void)                                                      TWOWORDINLINE(0x7000, 0xA08D);
  
  EXTERN_API( void )
  DebuggerEnter                   (void)                                                      TWOWORDINLINE(0x7001, 0xA08D);
  
  EXTERN_API( void )
  DebuggerExit                    (void)                                                      TWOWORDINLINE(0x7002, 0xA08D);
  
  EXTERN_API( void )
  DebuggerPoll                    (void)                                                      TWOWORDINLINE(0x7003, 0xA08D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 GetPageState(__A0)
                                                                                              #endif
  EXTERN_API( PageState )
  GetPageState                    (const void *           address)                            TWOWORDINLINE(0x7004, 0xA08D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 PageFaultFatal
                                                                                              #endif
  EXTERN_API( Boolean )
  PageFaultFatal                  (void)                                                      TWOWORDINLINE(0x7005, 0xA08D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 DebuggerLockMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  DebuggerLockMemory              (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7006, 0xA08D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 DebuggerUnlockMemory(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  DebuggerUnlockMemory            (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7007, 0xA08D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 EnterSupervisorMode
                                                                                              #endif
  EXTERN_API( StatusRegisterContents )
  EnterSupervisorMode             (void)                                                      TWOWORDINLINE(0x7008, 0xA08D);
  
  /* 
      StripAddress is a trap on classic 68K and the
      identity function on PowerMacs and other OS's.
  */
  if TARGET_OS_MAC && TARGET_CPU_68K
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 StripAddress(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  StripAddress                    (void *                 theAddress)                         ONEWORDINLINE(0xA055);
  
  else
  define StripAddress(x)     ((Ptr)(x))
  endif
  /* 
      Translate24To32 is a trap on classic 68K and the
      identity function on PowerMacs and other OS's.
  */
  if TARGET_OS_MAC && TARGET_CPU_68K
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 Translate24To32(__D0)
                                                                                              #endif
  EXTERN_API( Ptr )
  Translate24To32                 (void *                 addr24)                             ONEWORDINLINE(0xA091);
  
  else
  define Translate24To32(x)      ((Ptr)(x))
  endif
  endif  /* CALL_NOT_IN_CARBON */
  
  EXTERN_API( OSErr )
  HandToHand                      (Handle *               theHndl);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 PtrToXHand(__A0, __A1, __D0)
                                                                                              #endif
  EXTERN_API( OSErr )
  PtrToXHand                      (const void *           srcPtr,
                                   Handle                 dstHndl,
                                   long                   size)                               ONEWORDINLINE(0xA9E2);
  
  EXTERN_API( OSErr )
  PtrToHand                       (const void *           srcPtr,
                                   Handle *               dstHndl,
                                   long                   size);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 HandAndHand(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  HandAndHand                     (Handle                 hand1,
                                   Handle                 hand2)                              ONEWORDINLINE(0xA9E4);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 PtrAndHand(__A0, __A1, __D0)
                                                                                              #endif
  EXTERN_API( OSErr )
  PtrAndHand                      (const void *           ptr1,
                                   Handle                 hand2,
                                   long                   size)                               ONEWORDINLINE(0xA9EF);
  
  /* Carbon routines to aid in debugging. */
  /* Checks all applicable heaps for validity */
  EXTERN_API( Boolean )
  CheckAllHeaps                   (void);
  
  /* Checks the application heap for validity */
  EXTERN_API( Boolean )
  IsHeapValid                     (void);
  
  /* It is invalid to pass a NULL or an empty Handle to IsHandleValid */
  EXTERN_API( Boolean )
  IsHandleValid                   (Handle                 h);
  
  /* It is invalid to pass a NULL Pointer to IsPointerValid */
  EXTERN_API( Boolean )
  IsPointerValid                  (Ptr                    p);
  
  if OLDROUTINENAMES
  define ApplicZone() ApplicationZone()
  define MFTempNewHandle(logicalSize, resultCode) TempNewHandle(logicalSize, resultCode)
  define MFMaxMem(grow) TempMaxMem(grow)
  define MFFreeMem() TempFreeMem()
  define MFTempHLock(h, resultCode) TempHLock(h, resultCode)
  define MFTempHUnlock(h, resultCode) TempHUnlock(h, resultCode)
  define MFTempDisposHandle(h, resultCode) TempDisposeHandle(h, resultCode)
  define MFTopMem() TempTopMem()
  define ResrvMem(cbNeeded) ReserveMem(cbNeeded)
  define DisposPtr(p) DisposePtr(p)
  define DisposHandle(h) DisposeHandle(h)
  define ReallocHandle(h, byteCount) ReallocateHandle(h, byteCount)
  endif  /* OLDROUTINENAMES */
  
  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 /* __MACMEMORY__ */
  
  


(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.