R. Eric Wheeler 05e1a8422e | ||
---|---|---|
tests | ||
.gitignore | ||
LICENSE | ||
README.md | ||
Renegade.Random.BSDRandom.pas | ||
Renegade.Random.Generic.pas | ||
Renegade.Random.LinuxRandom.pas | ||
Renegade.Random.RandomInterface.pas | ||
Renegade.Random.URandom.pas | ||
Renegade.Random.WinRandom.pas | ||
Renegade.Random.pas |
README.md
Free Pascal Random Bytes
This file is a part of Olive BBS.
This will only work with Free Pascal version 3+. I Think namespacing is a good idea, and FPC 3+ is not hard to get your hands on for any platform. In fact, I believe its the most cross platform program that I have ever found, including ScummVM.
Usage
Make sure to include {$mode objfpc}{$H+}
in your header or compile with -S2 -Sh
switches.
Program RandomTest;
{$mode objfpc}{$H+}
uses
Olive.Random,
Classes;
var
R : TRandom;
S : AnsiString;
T : TBytes;
begin
R := TRandom.Init;
S := R.GetString(22);
T := R.GetBytes(22);
R.Free;
You can also use a custom random generator. It needs to implement Olive.Random.RandomInterface;
Program RandomTest;
{$mode objfpc}{$H+}
uses
Olive.Random,
MyCustomGenerator,
Classes;
var
R : TRandom;
S : AnsiString;
T : TBytes;
begin
R := TRandom.Init;
R.RandomGenerator := MyCustomGenerator.Create;
S := R.GetString(22);
T := R.GetBytes(22);
R.SetDefaultGenerator; // To get back to the default Generator.
S := R.GetString(22);
T := R.GetBytes(22);
R.Free;
- On Linux systems TRandom uses SYS_getrandom.
- On Windows systems TRandom uses Windows built in CryptGenRandom function.
- On BSD systems TRandom uses arc4random_buf this is the same on Mac systems, because Mac = FreeBSD).
TRandom will fall back on reading from /dev/urandom, then /dev/random, and finally Free Pascal's Random function which uses the Mersenne Twister algorithm to get random bytes.