packages feed

language-Modula2-0.1: examples/Modula-2_Libraries/andrea-m2/lib/fst/randomly.mod

IMPLEMENTATION MODULE Randomly;
(* for 16 bit computers *)
(* $S-, $R-, $T- *)

(* John Andrea, Mar.27/92 *)
(* This code may NOT be sold, it may be freely used and distributed *)

FROM TimeDate IMPORT Time, GetTime;

CONST
   modulus    = 65535;
   multiplier = 25173;
   increment  = 13849;

VAR
  seed :CARDINAL;
  now  :Time;

(* -------------------------------------------------------- *)
PROCEDURE Choose_1_To_N( n :CARDINAL ) :CARDINAL;
BEGIN
  seed := ( ( seed * multiplier ) + increment ) MOD modulus;

  IF seed >= n THEN
    RETURN 1 + ( seed MOD n );
  ELSE
    RETURN 1 + seed;
  END;
END Choose_1_To_N;

(* -------------------------------------------------------- *)
PROCEDURE Choose_0_To_N( n :CARDINAL ) :CARDINAL;
BEGIN
   RETURN Choose_1_To_N( n + 1 ) - 1;
END Choose_0_To_N;

BEGIN
  GetTime( now );   seed := now.millisec;
  IF NOT ODD( seed ) THEN seed := seed + 1; END;
END Randomly.