{************************************************************************
*									*
*  MTHDEF								*
*									*
*  Declarations for MTH$ (Mathematical) RTL routines.			*
*									*
************************************************************************}


[ASYNCHRONOUS] FUNCTION MTH$ACOS (
	Cosine: REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DACOS (
	Cosine: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GACOS (
	Cosine: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HACOS (
	VAR H_Radians : [VOLATILE] QUADRUPLE ;
	Cosine: QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ACOSD (
	Cosine: REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DACOSD (
	Cosine: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GACOSD (
	Cosine: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HACOSD (
	VAR H_Degrees : [VOLATILE] QUADRUPLE ;
	Cosine: QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ASIN (
	Sine : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DASIN (
	Sine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GASIN (
	Sine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HASIN (
	VAR H_Radians : [VOLATILE] QUADRUPLE ;
	Sine : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ASIND (
	Sine : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DASIND (
	Sine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GASIND (
	Sine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HASIND (
	VAR H_Degrees : [VOLATILE] QUADRUPLE ;
	Sine : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ATAN (
	Tangent : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DATAN (
	Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GATAN (
	Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HATAN (
	VAR H_Radians : [VOLATILE] QUADRUPLE ;
	Tangent : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ATAN2 (
	Sine : REAL ;
	Cosine : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DATAN2 (
	Sine : DOUBLE ;
	Cosine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GATAN2 (
	Sine : DOUBLE ;
	Cosine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HATAN2 (
	VAR H_Radians : [VOLATILE] QUADRUPLE ;
	Sine : QUADRUPLE ;
	Cosine : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ATAND (
	Tangent : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DATAND (
	Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GATAND (
	Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HATAND (
	VAR H_Degrees : [VOLATILE] QUADRUPLE ;
	Tangent : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ATANH (
	Hyperbolic_Tangent : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DATANH (
	Hyperbolic_Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GATANH (
	Hyperbolic_Tangent : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HATANH (
	VAR H_Atanh : [VOLATILE] QUADRUPLE ;
	Hyperbolic_Tangent : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ATAND2 (
	Sine : REAL ;
	Cosine : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DATAND2 (
	Sine : DOUBLE ;
	Cosine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GATAND2 (
	Sine : DOUBLE ;
	Cosine : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HATAND2 (
	VAR H_Degrees : [VOLATILE] QUADRUPLE ;
	Sine : QUADRUPLE ;
	Cosine : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$CABS (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$CDABS (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$CGABS (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

{************************************************************************
 ****								     ****
 ****  The following Complex Number RTL Mathematical Routines are    ****
 ****  NOT implemented in these declarations:			     ****

 MTH$CCOS
 MTH$CDCOS
 MTH$CGCOS
 MTH$CEXPP
 MTH$CDEXP
 MTH$CGEXP
 MTH$CLOG
 MTH$CDLOG
 MTH$CGLOG
 MTH$CMPLX
 MTH$DCMPLX
 MTH$GCMPLX
 MTH$CONJG
 MTH$DCONJG
 MTH$GCONJG
 MTH$CSIN
 MTH$CDSIN
 MTH$CGSIN
 MTH$CSQRT
 MTH$CDSQRT
 MTH$CGSQRT

 ************************************************************************}

[ASYNCHRONOUS] FUNCTION MTH$COS (
	Angle_In_Radians: REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DCOS (
	Angle_In_Radians: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GCOS (
	Angle_In_Radians: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HCOS (
	VAR H_Cosine : [VOLATILE] QUADRUPLE ;
	Angle_In_Radians: QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$COSD (
	Angle_In_Degrees: REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DCOSD (
	Angle_In_Degrees: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GCOSD (
	Angle_In_Degrees: DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HCOSD (
	VAR H_Cosine : [VOLATILE] QUADRUPLE ;
	Angle_In_Degrees: QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$COSH (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DCOSH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GCOSH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HCOSH (
	VAR H_Cosh : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$CVT_D_G (
	Floating_Point_Input_Val : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$CVT_G_D (
	Floating_Point_Input_Val : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$CVT_DA_GA (
	%REF Floating_Point_Input_Array : ARRAY [$L1..$U1:INTEGER] OF DOUBLE ;
	%REF Floating_Point_Dest_Array  : ARRAY [$L2..$U2:INTEGER] OF DOUBLE ;
	Array_Size : INTEGER := %IMMED 0 ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$CVT_GA_DA (
	%REF Floating_Point_Input_Array : ARRAY [$L1..$U1:INTEGER] OF DOUBLE ;
	%REF Floating_Point_Dest_Array  : ARRAY [$L2..$U2:INTEGER] OF DOUBLE ;
	Array_Size : INTEGER := %IMMED 0 ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$EXP (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DEXP (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GEXP (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HEXP (
	VAR H_Exp : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$AIMAG (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DIMAG (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GIMAG (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ALOG (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DLOG (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GLOG (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HLOG (
	VAR H_Natlog : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ALOG10 (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DLOG10 (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GLOG10 (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HLOG10 (
	VAR H_Log10 : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$ALOG2 (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DLOG2 (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GLOG2 (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HLOG2 (
	VAR H_Log2 : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$RANDOM (
	VAR Seed : [VOLATILE] UNSIGNED )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$REAL (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DREAL (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GREAL (
	Complex_Number : [UNSAFE] PACKED ARRAY [$L1..$U1:INTEGER] OF $UBYTE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$SIN (
	Angle_In_Radians : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DSIN (
	Angle_In_Radians : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GSIN (
	Angle_In_Radians : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSIN (
	VAR H_Sine : [VOLATILE] QUADRUPLE ;
	Angle_In_Radians : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$SIND (
	Angle_In_Degrees : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DSIND (
	Angle_In_Degrees : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GSIND (
	Angle_In_Degrees : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSIND (
	VAR H_Sine : [VOLATILE] QUADRUPLE ;
	Angle_In_Degrees : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$SINH (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DSINH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GSINH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSINH (
	VAR H_Sinh : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$SINCOS (
	Angle_In_Radians : REAL ;
	VAR Sine   : [VOLATILE] REAL ;
	VAR Cosine : [VOLATILE] REAL ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$DSINCOS (
	Angle_In_Radians : DOUBLE ;
	VAR Sine   : [VOLATILE] DOUBLE ;
	VAR Cosine : [VOLATILE] DOUBLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$GSINCOS (
	Angle_In_Radians : DOUBLE ;
	VAR Sine   : [VOLATILE] DOUBLE ;
	VAR Cosine : [VOLATILE] DOUBLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSINCOS (
	Angle_In_Radians : QUADRUPLE ;
	VAR Sine   : [VOLATILE] QUADRUPLE ;
	VAR Cosine : [VOLATILE] QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$SINCOSD (
	Angle_In_Degrees : REAL ;
	VAR Sine   : [VOLATILE] REAL ;
	VAR Cosine : [VOLATILE] REAL ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$DSINCOSD (
	Angle_In_Degrees : DOUBLE ;
	VAR Sine   : [VOLATILE] DOUBLE ;
	VAR Cosine : [VOLATILE] DOUBLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$GSINCOSD (
	Angle_In_Degrees : DOUBLE ;
	VAR Sine   : [VOLATILE] DOUBLE ;
	VAR Cosine : [VOLATILE] DOUBLE ) ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSINCOSD (
	Angle_In_Degrees : QUADRUPLE ;
	VAR Sine   : [VOLATILE] QUADRUPLE ;
	VAR Cosine : [VOLATILE] QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$SQRT (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DSQRT (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GSQRT (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HSQRT (
	VAR H_Sqrt : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$TAN (
	Angle_In_Radians : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DTAN (
	Angle_In_Radians : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GTAN (
	Angle_In_Radians : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HTAN (
	VAR H_Tan : [VOLATILE] QUADRUPLE ;
	Angle_In_Radians : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$TAND (
	Angle_In_Degrees : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DTAND (
	Angle_In_Degrees : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GTAND (
	Angle_In_Degrees : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HTAND (
	VAR H_Tand : [VOLATILE] QUADRUPLE ;
	Angle_In_Degrees : QUADRUPLE ) ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$TANH (
	Floating_Point_Input_Value : REAL )
		: REAL ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$DTANH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] FUNCTION MTH$GTANH (
	Floating_Point_Input_Value : DOUBLE )
		: DOUBLE ; EXTERNAL ;

[ASYNCHRONOUS] PROCEDURE MTH$HTANH (
	VAR H_Tanh : [VOLATILE] QUADRUPLE ;
	Floating_Point_Input_Value : QUADRUPLE ) ; EXTERNAL ;

{************************************************************************
 ****								     ****
 ****  The MTH$UMAX and MTH$UMIN RTL Mathematical Routines are	     ****
 ****  called indirectly in Pascal by the MAX and MIN Routines       ****
 ****  respectively.  Hence, no declarations are necessary here.     ****
 ****								     ****
 ************************************************************************}

