topical media & game development

talk show tell print

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



  /*
       File:       OSUtils.h
   
       Contains:   OS Utilities Interfaces.
   
       Version:    Technology: Mac OS 8
                   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 __OSUTILS__
  define __OSUTILS__
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __MIXEDMODE__
  include <MixedMode.h>
  endif
  
  /*  HandToHand and other memory utilties were moved to MacMemory.h */
  ifndef __MACMEMORY__
  include <MacMemory.h>
  endif
  
  /*  GetTrapAddress and other trap table utilties were moved to Patches.h */
  ifndef __PATCHES__
  include <Patches.h>
  endif
  
  /*  Date and Time utilties were moved to DateTimeUtils.h */
  ifndef __DATETIMEUTILS__
  include <DateTimeUtils.h>
  endif
  
  if !TARGET_OS_MAC
  ifndef __ENDIAN__
  include <Endian.h>
  endif
  
  endif  /* !TARGET_OS_MAC */
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=mac68k
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  enum {
      useFree                     = 0,
      useATalk                    = 1,
      useAsync                    = 2,
      useExtClk                   = 3,                            /*Externally clocked*/
      useMIDI                     = 4
  };
  
  enum {
      false32b                    = 0,                            /*24 bit addressing error*/
      true32b                     = 1                             /*32 bit addressing error*/
  };
  
  enum {
                                                                  /* result types for RelString Call */
      sortsBefore                 = -1,                           /*first string < second string*/
      sortsEqual                  = 0,                            /*first string = second string*/
      sortsAfter                  = 1                             /*first string > second string*/
  };
  
  enum {
      dummyType                   = 0,
      vType                       = 1,
      ioQType                     = 2,
      drvQType                    = 3,
      evType                      = 4,
      fsQType                     = 5,
      sIQType                     = 6,
      dtQType                     = 7,
      nmType                      = 8
  };
  
  typedef SignedByte                      QTypes;
  
  struct SysParmType {
      UInt8                           valid;
      UInt8                           aTalkA;
      UInt8                           aTalkB;
      UInt8                           config;
      short                           portA;
      short                           portB;
      long                            alarm;
      short                           font;
      short                           kbdPrint;
      short                           volClik;
      short                           misc;
  };
  typedef struct SysParmType              SysParmType;
  
  typedef SysParmType *                   SysPPtr;
  
  struct QElem {
      struct QElem *                  qLink;
      short                           qType;
      short                           qData[1];
  };
  typedef struct QElem                    QElem;
  typedef QElem *                         QElemPtr;
  if TARGET_OS_MAC
  
  struct QHdr {
      volatile short                  qFlags;
      volatile QElemPtr               qHead;
      volatile QElemPtr               qTail;
  };
  typedef struct QHdr                     QHdr;
  typedef QHdr *                          QHdrPtr;
  else
  /*
     QuickTime 3.0
     this version of QHdr contains the Mutex necessary for
     non-mac non-interrupt code
  */
  
  struct QHdr {
      volatile short                  qFlags;
      short                           pad;
      long                            MutexID;
      volatile QElemPtr               qHead;
      volatile QElemPtr               qTail;
  };
  typedef struct QHdr                     QHdr;
  typedef QHdr *                          QHdrPtr;
  endif  /* TARGET_OS_MAC */
  
  typedef CALLBACK_API( void , DeferredTaskProcPtr )(long dtParam);
  /*
      WARNING: DeferredTaskProcPtr 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 REGISTER_UPP_TYPE(DeferredTaskProcPtr)                  DeferredTaskUPP;
  if OPAQUE_UPP_TYPES
      EXTERN_API(DeferredTaskUPP)
      NewDeferredTaskUPP             (DeferredTaskProcPtr     userRoutine);
  
      EXTERN_API(void)
      DisposeDeferredTaskUPP         (DeferredTaskUPP         userUPP);
  
      EXTERN_API(void)
      InvokeDeferredTaskUPP          (long                    dtParam,
                                      DeferredTaskUPP         userUPP);
  
  else
      enum { uppDeferredTaskProcInfo = 0x0000B802 };                  /* register no_return_value Func(4_bytes:A1) */
      #define NewDeferredTaskUPP(userRoutine)                         (DeferredTaskUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeferredTaskProcInfo, GetCurrentArchitecture())
      #define DisposeDeferredTaskUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      #pragma parameter InvokeDeferredTaskUPP(__A1, __A0)
      void InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP) = 0x4E90;
      #else
          #define InvokeDeferredTaskUPP(dtParam, userUPP)                 CALL_ONE_PARAMETER_UPP((userUPP), uppDeferredTaskProcInfo, (dtParam))
      #endif
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewDeferredTaskProc(userRoutine)                        NewDeferredTaskUPP(userRoutine)
  define CallDeferredTaskProc(userRoutine, dtParam)              InvokeDeferredTaskUPP(dtParam, userRoutine)
  
  struct DeferredTask {
      volatile QElemPtr               qLink;
      short                           qType;
      volatile short                  dtFlags;
      DeferredTaskUPP                 dtAddr;
      long                            dtParam;
      long                            dtReserved;
  };
  typedef struct DeferredTask             DeferredTask;
  typedef DeferredTask *                  DeferredTaskPtr;
  if TARGET_OS_MAC
  
  struct MachineLocation {
      Fract                           latitude;
      Fract                           longitude;
      union {
          SInt8                           dlsDelta;               /* signed byte; daylight savings delta */
          long                            gmtDelta;               /* use low 24-bits only */
      }                                 u;
  };
  typedef struct MachineLocation          MachineLocation;
  else
  /*
      QuickTime 3.0:
      Alignment of MachineLocation is weird. The union above used for delta
      tends not to work on non-Mac compilers.
  */
  
  struct MachineLocation {
      Fract                           latitude;
      Fract                           longitude;
      BigEndianLong                   delta;                      /* high byte is daylight savings delta, low 24-bits is GMT delta */
  };
  typedef struct MachineLocation          MachineLocation;
  endif  /* TARGET_OS_MAC */
  
  EXTERN_API( Boolean )
  IsMetric                        (void)                                                      THREEWORDINLINE(0x3F3C, 0x0004, 0xA9ED);
  
  EXTERN_API( SysPPtr )
  GetSysPPtr                      (void)                                                      THREEWORDINLINE(0x2EBC, 0x0000, 0x01F8);
  
  /*
      NOTE: SysBeep() has been moved to Sound.h.  
            We could not automatically #include Sound.h in this file
            because Sound.h indirectly #include's OSUtils.h which
            would make a circular include.
  */
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 DTInstall(__A0)
                                                                                              #endif
  EXTERN_API( OSErr )
  DTInstall                       (DeferredTaskPtr        dtTaskPtr)                          ONEWORDINLINE(0xA082);
  
  if TARGET_CPU_PPC || !TARGET_OS_MAC || TARGET_RT_MAC_MACHO
  define GetMMUMode() ((SInt8)true32b)
  define SwapMMUMode(x) (*(SInt8*)(x) = true32b)
  else
  if CALL_NOT_IN_CARBON
  EXTERN_API( SInt8 )
  GetMMUMode                      (void)                                                      TWOWORDINLINE(0x1EB8, 0x0CB2);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter SwapMMUMode(__A0)
                                                                                              #endif
  EXTERN_API( void )
  SwapMMUMode                     (SInt8 *                mode)                               THREEWORDINLINE(0x1010, 0xA05D, 0x1080);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  endif
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter Delay(__A0, __A1)
                                                                                              #endif
  EXTERN_API( void )
  Delay                           (unsigned long          numTicks,
                                   unsigned long *        finalTicks)                         TWOWORDINLINE(0xA03B, 0x2280);
  
  EXTERN_API( OSErr )
  WriteParam                      (void);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter Enqueue(__A0, __A1)
                                                                                              #endif
  EXTERN_API( void )
  Enqueue                         (QElemPtr               qElement,
                                   QHdrPtr                qHeader)                            ONEWORDINLINE(0xA96F);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 Dequeue(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  Dequeue                         (QElemPtr               qElement,
                                   QHdrPtr                qHeader)                            ONEWORDINLINE(0xA96E);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 SetCurrentA5
                                                                                              #endif
  EXTERN_API( long )
  SetCurrentA5                    (void)                                                      THREEWORDINLINE(0x200D, 0x2A78, 0x0904);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 SetA5(__D0)
                                                                                              #endif
  EXTERN_API( long )
  SetA5                           (long                   newA5)                              ONEWORDINLINE(0xC18D);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 InitUtil
                                                                                              #endif
  EXTERN_API( OSErr )
  InitUtil                        (void)                                                      ONEWORDINLINE(0xA03F);
  
  if TARGET_CPU_PPC
  EXTERN_API( void )
  MakeDataExecutable              (void *                 baseAddress,
                                   unsigned long          length);
  
  endif  /* TARGET_CPU_PPC */
  
  if TARGET_CPU_68K
  if CALL_NOT_IN_CARBON
  EXTERN_API( Boolean )
  SwapInstructionCache            (Boolean                cacheEnable);
  
  EXTERN_API( Boolean )
  SwapDataCache                   (Boolean                cacheEnable);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  if CALL_NOT_IN_CARBON
  EXTERN_API( void )
  FlushInstructionCache           (void)                                                      TWOWORDINLINE(0x7001, 0xA098);
  
  EXTERN_API( void )
  FlushDataCache                  (void)                                                      TWOWORDINLINE(0x7003, 0xA098);
  
  EXTERN_API( void )
  FlushCodeCache                  (void)                                                      ONEWORDINLINE(0xA0BD);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  endif  /* TARGET_CPU_68K */
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 FlushCodeCacheRange(__A0, __A1)
                                                                                              #endif
  EXTERN_API( OSErr )
  FlushCodeCacheRange             (void *                 address,
                                   unsigned long          count)                              TWOWORDINLINE(0x7009, 0xA098);
  
  endif  /* CALL_NOT_IN_CARBON */
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter ReadLocation(__A0)
                                                                                              #endif
  EXTERN_API( void )
  ReadLocation                    (MachineLocation *      loc)                                FOURWORDINLINE(0x203C, 0x000C, 0x00E4, 0xA051);
  
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter WriteLocation(__A0)
                                                                                              #endif
  EXTERN_API( void )
  WriteLocation                   (const MachineLocation * loc)                               FOURWORDINLINE(0x203C, 0x000C, 0x00E4, 0xA052);
  
  if OLDROUTINENAMES
  define IUMetric() IsMetric()
  endif  /* OLDROUTINENAMES */
  
  /*
      NOTE: SysEnvirons is obsolete.  You should be using Gestalt.
  */
  /* Environs Equates */
  enum {
      curSysEnvVers               = 2                             /*Updated to equal latest SysEnvirons version*/
  };
  
  struct SysEnvRec {
      short                           environsVersion;
      short                           machineType;
      short                           systemVersion;
      short                           processor;
      Boolean                         hasFPU;
      Boolean                         hasColorQD;
      short                           keyBoardType;
      short                           atDrvrVersNum;
      short                           sysVRefNum;
  };
  typedef struct SysEnvRec                SysEnvRec;
  enum {
                                                                  /* Machine Types */
      envMac                      = -1,
      envXL                       = -2,
      envMachUnknown              = 0,
      env512KE                    = 1,
      envMacPlus                  = 2,
      envSE                       = 3,
      envMacII                    = 4,
      envMacIIx                   = 5,
      envMacIIcx                  = 6,
      envSE30                     = 7,
      envPortable                 = 8,
      envMacIIci                  = 9,
      envMacIIfx                  = 11
  };
  
  enum {
                                                                  /* CPU types */
      envCPUUnknown               = 0,
      env68000                    = 1,
      env68010                    = 2,
      env68020                    = 3,
      env68030                    = 4,
      env68040                    = 5
  };
  
  enum {
                                                                  /* Keyboard types */
      envUnknownKbd               = 0,
      envMacKbd                   = 1,
      envMacAndPad                = 2,
      envMacPlusKbd               = 3,
      envAExtendKbd               = 4,
      envStandADBKbd              = 5,
      envPrtblADBKbd              = 6,
      envPrtblISOKbd              = 7,
      envStdISOADBKbd             = 8,
      envExtISOADBKbd             = 9
  };
  
  if CALL_NOT_IN_CARBON
                                                                                              #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
                                                                                              #pragma parameter __D0 SysEnvirons(__D0, __A0)
                                                                                              #endif
  EXTERN_API( OSErr )
  SysEnvirons                     (short                  versionRequested,
                                   SysEnvRec *            theWorld)                           ONEWORDINLINE(0xA090);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  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 /* __OSUTILS__ */
  
  


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