UNIT libmc;

INTERFACE

{$if __GPC_RELEASE__ >= 20030303}
{$define asmname external name}
{$define varasmname external name}
{$else}
{$define varasmname external; asmname}
{$endif}

type LongComplex = record
                      RealPart,ImagPart: LongReal;
                   end;

function Rel(a:LongComplex): LongReal;
function Iml(a:LongComplex): LongReal;
function cmplxl(a,b:LongReal) c: LongComplex;
operator + (a,b:LongComplex) c: LongComplex; asmname 'caddl';
operator - (a,b:LongComplex) c: LongComplex;
operator * (a,b:LongComplex) c: LongComplex; asmname 'cmull';
operator / (a,b:LongComplex) c: LongComplex;

function csqrt(x:LongComplex): LongComplex; asmname 'csqrtl';
function cabs(x:LongComplex): LongReal; asmname 'cabsl';

function cexp(x:LongComplex): LongComplex; asmname 'cexpl';
function cln(x:LongComplex): LongComplex; asmname 'clogl';
function csin(x:LongComplex): LongComplex; asmname 'csinl';
function ccos(x:LongComplex): LongComplex; asmname 'ccosl';
function ctan(x:LongComplex): LongComplex; asmname 'ctanl';
function ccotan(x:LongComplex): LongComplex; asmname 'ccotl';
function carcsin(x:LongComplex): LongComplex; asmname 'casinl';
function carccos(x:LongComplex): LongComplex; asmname 'cacosl';
function carctan(x:LongComplex): LongComplex; asmname 'catanl';
function csinh(x:LongComplex): LongComplex; asmname 'csinhl';
function ccosh(x:LongComplex): LongComplex; asmname 'ccoshl';
function ctanh(x:LongComplex): LongComplex; asmname 'ctanhl';
function casinh(x:LongComplex): LongComplex; asmname 'casinhl';
function cacosh(x:LongComplex): LongComplex; asmname 'cacoshl';
function catanh(x:LongComplex): LongComplex; asmname 'catanhl';

function cGamma(x:LongComplex): LongComplex; asmname 'cgammal';
function clnGamma(x:LongComplex): LongComplex; asmname 'clgaml';

IMPLEMENTATION

{$L mc}
{$L ml}

function Rel(a:LongComplex): LongReal;
begin
   Rel:=a.RealPart
end;

function Iml(a:LongComplex): LongReal;
begin
   Iml:=a.ImagPart
end;

function cmplxl(a,b:LongReal) c: LongComplex;
begin
   c.RealPart:=a; c.ImagPart:=b
end;

operator - (a,b:LongComplex) c: LongComplex;
   function csubl(a,b: LongComplex): LongComplex; asmname 'csubl';
begin
   c:=csubl(b,a)
end;

operator / (a,b:LongComplex) c: LongComplex;
   function cdivl(a,b: LongComplex): LongComplex; asmname 'cdivl';
begin
   c:=cdivl(b,a)
end;

end.