{
> I am trying to learn Turbo Pascal 7.0 and I was hoping someone might
> post the code to some simple fractals or anything else that you think
> might be educating...

Note that my code will not work unless you've got my VGAUnit.  It doesn't
look very easy to convert it to use Borland's Graphics unit, either.
}
USES Crt, VGAUnit;

CONST
DStep  = 0.2;
Detail = 100;

TYPE
Complex = RECORD
a, b : REAL;
End;

VAR
Lambda, Z_Prime, Z : Complex;

FUNCTION Rnd : REAL;
Begin
Rnd := Random( 65001 ) / 65000;
End;

PROCEDURE Fractal( Lambda, Z_Prime : Complex; Count : INTEGER );
VAR
k            : INTEGER;
LambdaMag    : REAL;
FourOverLamb : Complex;

PROCEDURE CalcPoint( Z_Prime : Complex; VAR Z : Complex );
VAR
SaveB : REAL;

PROCEDURE ComplexMult( C1, C2 : Complex; VAR Result : Complex );
Begin
Result.A := C1.A * C2.A - C1.B * C2.B;
Result.B := C1.A + C2.B + C1.B * C2.A;
End;  { ComplexMult }

PROCEDURE ComplexSqrt( C : Complex; VAR Result : Complex );
VAR
CMag : REAL;

Begin
CMag := Sqrt( C.A * C.A + C.B * C.B );

IF (CMag + C.A) < 0 THEN
Result.A := 0
ELSE
Result.A := Sqrt( ( CMag + C.A ) / 2 );
IF (CMag - C.A) < 0 THEN
Result.B := 0
ELSE
Result.B := Sqrt( ( CMag - C.A ) / 2 );
End;  { ComplexSqrt }

{ CalcPoint }
Begin
ComplexMult( Z_Prime, FourOverLamb, Z );

Z.A   := 1 - Z.A;
SaveB := Z.B;

ComplexSqrt( Z, Z );

IF SaveB < 0 THEN
Z.A := -Z.A;

IF Rnd < 0.5 THEN
Begin
Z.A := -Z.A;
Z.B := -Z.B;
End;

Z.A := 1 - Z.A;
Z.A := Z.A / 2;
Z.B := Z.B / 2;
End;  { CalcPoint }

Begin  { Fractal }
LambdaMag := Lambda.A * Lambda.A + Lambda.B * Lambda.B;
FourOverLamb.A := 4 * Lambda.A / LambdaMag;
FourOverLamb.B := -4 * Lambda.B / LambdaMag;

FOR K := 1 TO 10 DO
Begin
CalcPoint( Z_Prime, Z );
Z_Prime := Z;
End;

FOR K := 1 TO Count DO
Begin
CalcPoint( Z_Prime, Z );

IF WinGetPix( Z.A, Z.B ) = BLACK THEN
WinPutPix( Z.A, Z.B,
(Abs(Round({Z.A * Z.B *} Lambda.A * Lambda.B * 256)) MOD 254) + 1 );

Z_Prime := Z;
End;
End;

VAR
Ch      : CHAR;
R1, G1,
B1, R2,
G2, B2  : BYTE;
Lim1,
Lim2    : LONGINT;

Begin
Randomize;

VGA;
BlendColours( 1, 255, RGBToLong( 60, 60, 60 ), RGBToLong( 0, 0, 63 ), 0 );

Window( -1, 1, 1, -1 );

Lambda.A  := 13;
Lambda.B  := -0.7;
Z_Prime.A := 0.1;
Z_Prime.B := -0.1;
Ch        := #0;

Repeat
Fractal( Lambda, Z_Prime, Detail );
Lambda.A := Lambda.A + DStep;
Until (Lambda.A >= 100) OR (KeyPressed AND (ReadKey = #27));

R1 := Random( 64 );
G1 := Random( 64 );
B1 := Random( 64 );

Repeat
R2 := Random( 64 );
G2 := Random( 64 );
B2 := Random( 64 );

Lim1 := RGBToLong( R1, G1, B1 );
Lim2 := RGBToLong( R2, G2, B2 );

BlendColours( 1, 255, Lim1, Lim2, 10 );

R1 := R2;
G1 := G2;
B1 := B2;
Until KeyPressed AND (ReadKey = #27);

IF ReadKey = #27 THEN;

TextMode;
End.