``````{
HG> Did any one have an algorithm to generate random numbers?
HG> I know Borland Pascal have de function RANDOM but what I realy
HG> want is the code to do that. Any Language is ok, but I prefer
HG> Pascal.

Here's a small random number unit that is quite good..
}

unit Random;

interface

procedure SeedRandomNum(ASeed : word);
procedure InitRandom;
function  RandomNum : word;
function  RandomRange(ARange : word): word;

implementation

var
Fib   : array[1..17] of word;
i, j  : word;

procedure SeedRandomNum(ASeed : word);
var x : word;
begin
Fib := ASeed;
Fib := ASeed;
for x := 3 to 17 do
Fib[x] := Fib[x-2] + Fib[x-1];
i := 17;
j := ASeed mod 17;
end;

procedure InitRandom;
begin
SeedRandomNum(MemW[\$40:\$6C]);
end;

procedure SeedRandom(ASeed : word);
var x : word;
begin
Fib := ASeed;
Fib := ASeed;
for x := 3 to 17 do
Fib[x] := Fib[x-2] + Fib[x-1];
i := 17;
j := ASeed mod 17;
end;

function RandomNum : word;
var k : word;
begin
k := Fib[i] + Fib[j];
Fib[i] := k;
dec(i);
dec(j);
if i = 0 then i := 17;
if j = 0 then j := 17;
RandomNum := k;
end;

function RandomRange(ARange : word): word;
begin
RandomRange := RandomNum mod ARange;
end;

end.

``````