summaryrefslogtreecommitdiff
path: root/packages/univint/src/FixMath.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/univint/src/FixMath.pas')
-rw-r--r--packages/univint/src/FixMath.pas494
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.