diff options
Diffstat (limited to 'packages/univint/src/FixMath.pas')
-rw-r--r-- | packages/univint/src/FixMath.pas | 494 |
1 files changed, 494 insertions, 0 deletions
diff --git a/packages/univint/src/FixMath.pas b/packages/univint/src/FixMath.pas new file mode 100644 index 0000000000..d6f119bf23 --- /dev/null +++ b/packages/univint/src/FixMath.pas @@ -0,0 +1,494 @@ +{ + File: FixMath.p + + Contains: Fixed Math Interfaces. + + Version: Technology: Mac OS 8 + Release: Universal Interfaces 3.4.2 + + Copyright: © 1985-2002 by Apple Computer, Inc., all rights reserved + + Bugs?: For bug reports, consult the following page on + the World Wide Web: + + http://www.freepascal.org/bugs.html + +} + + +{ + Modified for use with Free Pascal + Version 200 + Please report any bugs to <gpc@microbizz.nl> +} + +{$mode macpas} +{$packenum 1} +{$macro on} +{$inline on} +{$CALLING MWPASCAL} + +unit FixMath; +interface +{$setc UNIVERSAL_INTERFACES_VERSION := $0342} +{$setc GAP_INTERFACES_VERSION := $0200} + +{$ifc not defined USE_CFSTR_CONSTANT_MACROS} + {$setc USE_CFSTR_CONSTANT_MACROS := TRUE} +{$endc} + +{$ifc defined CPUPOWERPC and defined CPUI386} + {$error Conflicting initial definitions for CPUPOWERPC and CPUI386} +{$endc} +{$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN} + {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN} +{$endc} + +{$ifc not defined __ppc__ and defined CPUPOWERPC} + {$setc __ppc__ := 1} +{$elsec} + {$setc __ppc__ := 0} +{$endc} +{$ifc not defined __i386__ and defined CPUI386} + {$setc __i386__ := 1} +{$elsec} + {$setc __i386__ := 0} +{$endc} + +{$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__} + {$error Conflicting definitions for __ppc__ and __i386__} +{$endc} + +{$ifc defined __ppc__ and __ppc__} + {$setc TARGET_CPU_PPC := TRUE} + {$setc TARGET_CPU_X86 := FALSE} +{$elifc defined __i386__ and __i386__} + {$setc TARGET_CPU_PPC := FALSE} + {$setc TARGET_CPU_X86 := TRUE} +{$elsec} + {$error Neither __ppc__ nor __i386__ is defined.} +{$endc} +{$setc TARGET_CPU_PPC_64 := FALSE} + +{$ifc defined FPC_BIG_ENDIAN} + {$setc TARGET_RT_BIG_ENDIAN := TRUE} + {$setc TARGET_RT_LITTLE_ENDIAN := FALSE} +{$elifc defined FPC_LITTLE_ENDIAN} + {$setc TARGET_RT_BIG_ENDIAN := FALSE} + {$setc TARGET_RT_LITTLE_ENDIAN := TRUE} +{$elsec} + {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.} +{$endc} +{$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE} +{$setc CALL_NOT_IN_CARBON := FALSE} +{$setc OLDROUTINENAMES := FALSE} +{$setc OPAQUE_TOOLBOX_STRUCTS := TRUE} +{$setc OPAQUE_UPP_TYPES := TRUE} +{$setc OTCARBONAPPLICATION := TRUE} +{$setc OTKERNEL := FALSE} +{$setc PM_USE_SESSION_APIS := TRUE} +{$setc TARGET_API_MAC_CARBON := TRUE} +{$setc TARGET_API_MAC_OS8 := FALSE} +{$setc TARGET_API_MAC_OSX := TRUE} +{$setc TARGET_CARBON := TRUE} +{$setc TARGET_CPU_68K := FALSE} +{$setc TARGET_CPU_MIPS := FALSE} +{$setc TARGET_CPU_SPARC := FALSE} +{$setc TARGET_OS_MAC := TRUE} +{$setc TARGET_OS_UNIX := FALSE} +{$setc TARGET_OS_WIN32 := FALSE} +{$setc TARGET_RT_MAC_68881 := FALSE} +{$setc TARGET_RT_MAC_CFM := FALSE} +{$setc TARGET_RT_MAC_MACHO := TRUE} +{$setc TYPED_FUNCTION_POINTERS := TRUE} +{$setc TYPE_BOOL := FALSE} +{$setc TYPE_EXTENDED := FALSE} +{$setc TYPE_LONGLONG := TRUE} +uses MacTypes; + + +{$ALIGN MAC68K} + + +const + fixed1 = $00010000; + fract1 = $40000000; + positiveInfinity = $7FFFFFFF; + negativeInfinity = $80000000; + + { + FixRatio, FixMul, and FixRound were previously in ToolUtils.h + } + { + * FixRatio() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FixRatio(numer: SInt16; denom: SInt16): Fixed; external name '_FixRatio'; +{ + * FixMul() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FixMul(a: Fixed; b: Fixed): Fixed; external name '_FixMul'; +{ + * FixRound() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FixRound(x: Fixed): SInt16; external name '_FixRound'; +{ + * Fix2Frac() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Fix2Frac(x: Fixed): Fract; external name '_Fix2Frac'; +{ + * Fix2Long() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Fix2Long(x: Fixed): SInt32; external name '_Fix2Long'; +{ + * Long2Fix() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Long2Fix(x: SInt32): Fixed; external name '_Long2Fix'; +{ + * Frac2Fix() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Frac2Fix(x: Fract): Fixed; external name '_Frac2Fix'; +{ + * FracMul() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FracMul(x: Fract; y: Fract): Fract; external name '_FracMul'; +{ + * FixDiv() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FixDiv(x: Fixed; y: Fixed): Fixed; external name '_FixDiv'; +{ + * FracDiv() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FracDiv(x: Fract; y: Fract): Fract; external name '_FracDiv'; +{ + * FracSqrt() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FracSqrt(x: Fract): Fract; external name '_FracSqrt'; +{ + * FracSin() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FracSin(x: Fixed): Fract; external name '_FracSin'; +{ + * FracCos() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FracCos(x: Fixed): Fract; external name '_FracCos'; +{ + * FixATan2() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function FixATan2(x: SInt32; y: SInt32): Fixed; external name '_FixATan2'; +{ + 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. +} +{$ifc TARGET_CPU_68K} +{$ifc TARGET_RT_MAC_68881} +{$ifc CALL_NOT_IN_CARBON} +{ + * Frac2X() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function Frac2X(x: Fract): extended; external name '_Frac2X'; + +{ + * Fix2X() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function Fix2X(x: Fixed): extended; external name '_Fix2X'; + +{ + * X2Fix() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function X2Fix(x: extended): Fixed; external name '_X2Fix'; + +{ + * X2Frac() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function X2Frac(x: extended): Fract; external name '_X2Frac'; + +{$endc} {CALL_NOT_IN_CARBON} +{$elsec} +{$ifc CALL_NOT_IN_CARBON} +{ + * Frac2X() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function Frac2X(x: Fract): extended; external name '_Frac2X'; +{ + * Fix2X() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function Fix2X(x: Fixed): extended; external name '_Fix2X'; +{ + * X2Fix() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function X2Fix(x: extended): Fixed; external name '_X2Fix'; +{ + * X2Frac() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: not available + } +function X2Frac(x: extended): Fract; external name '_X2Frac'; +{$endc} {CALL_NOT_IN_CARBON} +{$endc} {TARGET_RT_MAC_68881} +{$elsec} +{ + * Frac2X() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Frac2X(x: Fract): Double; external name '_Frac2X'; + +{ + * Fix2X() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function Fix2X(x: Fixed): Double; external name '_Fix2X'; + +{ + * X2Fix() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function X2Fix(x: Double): Fixed; external name '_X2Fix'; + +{ + * X2Frac() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function X2Frac(x: Double): Fract; external name '_X2Frac'; + +{$endc} {TARGET_CPU_68K} + +{ QuickTime 3.0 makes these Wide routines available on other platforms } +{$ifc TARGET_CPU_PPC OR NOT TARGET_OS_MAC} +{ + * WideCompare() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideCompare(const (*var*) target: wide; const (*var*) source: wide): SInt16; external name '_WideCompare'; + +{ + * WideAdd() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideAdd(var target: wide; const (*var*) source: wide): widePtr; external name '_WideAdd'; + +{ + * WideSubtract() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideSubtract(var target: wide; const (*var*) source: wide): widePtr; external name '_WideSubtract'; + +{ + * WideNegate() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideNegate(var target: wide): widePtr; external name '_WideNegate'; + +{ + * WideShift() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideShift(var target: wide; shift: SInt32): widePtr; external name '_WideShift'; + +{ + * WideSquareRoot() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideSquareRoot(const (*var*) source: wide): UInt32; external name '_WideSquareRoot'; + +{ + * WideMultiply() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideMultiply(multiplicand: SInt32; multiplier: SInt32; var target: wide): widePtr; external name '_WideMultiply'; + +{ returns the quotient } +{ + * WideDivide() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideDivide(const (*var*) dividend: wide; divisor: SInt32; var remainder: SInt32): SInt32; external name '_WideDivide'; + +{ quotient replaces dividend } +{ + * WideWideDivide() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideWideDivide(var dividend: wide; divisor: SInt32; var remainder: SInt32): widePtr; external name '_WideWideDivide'; + +{ + * WideBitShift() + * + * Availability: + * Non-Carbon CFM: in InterfaceLib 7.1 and later + * CarbonLib: in CarbonLib 1.0 and later + * Mac OS X: in version 10.0 and later + } +function WideBitShift(var src: wide; shift: SInt32): widePtr; external name '_WideBitShift'; + +{$endc} + + +{$ALIGN MAC68K} + + +end. |