topical media & game development
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.