topical media & game development

talk show tell print

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



  /*
       File:       FixMath.h
   
       Contains:   Fixed Math 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 __FIXMATH__
  define __FIXMATH__
  
  ifndef __MACTYPES__
  include <MacTypes.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
  
  define fixed1              ((Fixed) 0x00010000L)
  define fract1              ((Fract) 0x40000000L)
  define positiveInfinity    ((long)  0x7FFFFFFFL)
  define negativeInfinity    ((long)  0x80000000L)
  /*
      FixRatio, FixMul, and FixRound were previously in ToolUtils.h
  */
  EXTERN_API( Fixed )
  FixRatio                        (short                  numer,
                                   short                  denom)                              ONEWORDINLINE(0xA869);
  
  EXTERN_API( Fixed )
  FixMul                          (Fixed                  a,
                                   Fixed                  b)                                  ONEWORDINLINE(0xA868);
  
  EXTERN_API( short )
  FixRound                        (Fixed                  x)                                  ONEWORDINLINE(0xA86C);
  
  EXTERN_API( Fract )
  Fix2Frac                        (Fixed                  x)                                  ONEWORDINLINE(0xA841);
  
  EXTERN_API( long )
  Fix2Long                        (Fixed                  x)                                  ONEWORDINLINE(0xA840);
  
  EXTERN_API( Fixed )
  Long2Fix                        (long                   x)                                  ONEWORDINLINE(0xA83F);
  
  EXTERN_API( Fixed )
  Frac2Fix                        (Fract                  x)                                  ONEWORDINLINE(0xA842);
  
  EXTERN_API( Fract )
  FracMul                         (Fract                  x,
                                   Fract                  y)                                  ONEWORDINLINE(0xA84A);
  
  EXTERN_API( Fixed )
  FixDiv                          (Fixed                  x,
                                   Fixed                  y)                                  ONEWORDINLINE(0xA84D);
  
  EXTERN_API( Fract )
  FracDiv                         (Fract                  x,
                                   Fract                  y)                                  ONEWORDINLINE(0xA84B);
  
  EXTERN_API( Fract )
  FracSqrt                        (Fract                  x)                                  ONEWORDINLINE(0xA849);
  
  EXTERN_API( Fract )
  FracSin                         (Fixed                  x)                                  ONEWORDINLINE(0xA848);
  
  EXTERN_API( Fract )
  FracCos                         (Fixed                  x)                                  ONEWORDINLINE(0xA847);
  
  EXTERN_API( Fixed )
  FixATan2                        (long                   x,
                                   long                   y)                                  ONEWORDINLINE(0xA818);
  
  /*
      Frac2X, Fix2X, X2Fix, and X2Frac translate to and from
      the floating point type "extended" (that's what the X is for).
      On the original Mac this was 80-bits and the functions could be
      accessed via A-Traps.  When the 68881 co-processor was added,
      it used 96-bit floating point types, so the A-Traps could not 
      be used.  When PowerPC was added, it used 64-bit floating point
      types, so yet another prototype was added.
  */
  if TARGET_CPU_68K
  if TARGET_RT_MAC_68881
  if CALL_NOT_IN_CARBON
  EXTERN_API( long double )
  Frac2X                          (Fract                  x);
  
  EXTERN_API( long double )
  Fix2X                           (Fixed                  x);
  
  EXTERN_API( Fixed )
  X2Fix                           (long double            x);
  
  EXTERN_API( Fract )
  X2Frac                          (long double            x);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  else
  if CALL_NOT_IN_CARBON
  EXTERN_API( long double )
  Frac2X                          (Fract                  x)                                  ONEWORDINLINE(0xA845);
  
  EXTERN_API( long double )
  Fix2X                           (Fixed                  x)                                  ONEWORDINLINE(0xA843);
  
  EXTERN_API( Fixed )
  X2Fix                           (long double            x)                                  ONEWORDINLINE(0xA844);
  
  EXTERN_API( Fract )
  X2Frac                          (long double            x)                                  ONEWORDINLINE(0xA846);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  endif  /* TARGET_RT_MAC_68881 */
  
  else
  EXTERN_API( double )
  Frac2X                          (Fract                  x);
  
  EXTERN_API( double )
  Fix2X                           (Fixed                  x);
  
  EXTERN_API( Fixed )
  X2Fix                           (double                 x);
  
  EXTERN_API( Fract )
  X2Frac                          (double                 x);
  
  endif  /* TARGET_CPU_68K */
  
  /* QuickTime 3.0 makes these Wide routines available on other platforms*/
  if TARGET_CPU_PPC || !TARGET_OS_MAC || TARGET_CPU_X86
  EXTERN_API_C( short )
  WideCompare                     (const wide *           target,
                                   const wide *           source);
  
  EXTERN_API_C( wide *)
  WideAdd                         (wide *                 target,
                                   const wide *           source);
  
  EXTERN_API_C( wide *)
  WideSubtract                    (wide *                 target,
                                   const wide *           source);
  
  EXTERN_API_C( wide *)
  WideNegate                      (wide *                 target);
  
  EXTERN_API_C( wide *)
  WideShift                       (wide *                 target,
                                   long                   shift);
  
  EXTERN_API_C( unsigned long )
  WideSquareRoot                  (const wide *           source);
  
  EXTERN_API_C( wide *)
  WideMultiply                    (long                   multiplicand,
                                   long                   multiplier,
                                   wide *                 target);
  
  /* returns the quotient */
  EXTERN_API_C( long )
  WideDivide                      (const wide *           dividend,
                                   long                   divisor,
                                   long *                 remainder);
  
  /* quotient replaces dividend */
  EXTERN_API_C( wide *)
  WideWideDivide                  (wide *                 dividend,
                                   long                   divisor,
                                   long *                 remainder);
  
  EXTERN_API_C( wide *)
  WideBitShift                    (wide *                 src,
                                   long                   shift);
  
  endif  /* TARGET_CPU_PPC || !TARGET_OS_MAC || TARGET_CPU_X86 */
  
  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 /* __FIXMATH__ */
  
  


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