Contributor: DJ MURDOCH               

{
>A>overlooked. No Pascal compiler that I know of (including Turbo) can return
>A>a complex value (i.e., a record or an array) from a FUNCTION. In order for
>
>Hmm...never tried this before. Anyway, the sollution is quite simple:
>just have the megaword-variable public, and pass it to the procedure.

Returning function values by setting a public variable is pretty dangerous -
what if your function calls another that uses the same public to return its
value?  In this case, it's not necessary, since there's a trick to let TP
return complex numbers:
}

type
  Float = Double;
  TComplex = string[2*sizeof(float)];
  { Complex number.  Not a true string:  the values are stored in binary
    format within it. }

  TCmplx = record   { The internal storage format for TComplex }
    len : byte;
    r,i : float;
  end;

function Re(z:TComplex):float;
begin
  Re := TCmplx(z).r;
end;

function Im(z:TComplex):float;
begin
  Im := TCmplx(z).i;
end;

function Complex(x,y:float):TComplex;
{ Convert x + iy to complex number. }
var
  result : TCmplx;
begin
  with result do
  begin
    len := 2*sizeof(float);
    r := x;
    i := y;
  end;
  Complex := TComplex(result);
end;

{You can use these to build up lots of functions returning TComplex types.}