{$debug-}
{$symtab-,$pagesize:86,$linesize:132,
$title:'UTIL.PAS -- games utilities'}
{$debug-}
module util;
var [static]
    seed : word;
    starttime : integer;
    elasped : integer;
    is_stopped : boolean;
value
    elasped := 0;
    is_stopped := true;
function uaddok(a,b:word; var c:word) : boolean; external;
function umulok(a,b:word; var c:word) : boolean; external;

procedure time(var s: string); external;
function rand(x : integer) : integer [public];
var
	a,b : word;
	trash : boolean;
	s : word;
	r : integer;
begin
	a := 46269;
	b := 13849;
	s := seed;
	trash := umulok(a,s,seed);
	s := seed;
	trash := uaddok(b,s,seed);
	r    := ord(seed-32768);
	if (r < 0) then r := -r;
	rand := (r    mod x) + 1;
end;
procedure srand [public];
var
    trashtime : string(10);
begin
    time(trashtime);
    seed := (wrd(trashtime[2])-48)*3600+(wrd(trashtime[4])-48)*600+
    (wrd(trashtime[5])-48)*60+(wrd(trashtime[7])-48)*10+(wrd(trashtime[8])-48);
    elasped := 0;
end;
procedure startclock [public];
var
    trashtime : string(10);
begin
    time(trashtime);
    starttime := (ord(trashtime[2])-48)*3600+(ord(trashtime[4])-48)*600+
    (ord(trashtime[5])-48)*60+(ord(trashtime[7])-48)*10+(ord(trashtime[8])-48);
    starttime := starttime - elasped;
    elasped := 0;
    is_stopped := false;
end;
procedure stopclock [public];
var
    trashtime : string(10);
    trashint : integer;
begin
    if (is_stopped = false) then begin
	time(trashtime);
	trashint := (ord(trashtime[2])-48)*3600+(ord(trashtime[4])-48)*600+
	(ord(trashtime[5])-48)*60+(ord(trashtime[7])-48)*10+(ord(trashtime[8])-48);
	elasped := trashint - starttime;
	is_stopped := true;
    end;
end;
function readclock : integer [public];
var
    currtime : integer;
    trashtime : string(10);
begin
    if (is_stopped = false) then begin
	time(trashtime);
	currtime := (ord(trashtime[2])-48)*3600+(ord(trashtime[4])-48)*600+
	(ord(trashtime[5])-48)*60+(ord(trashtime[7])-48)*10+(ord(trashtime[8])-48);
	readclock := currtime - starttime;
    end
    else readclock := elasped;
end;
procedure timepenalty(pen : integer);
begin
      if (is_stopped = false) then starttime := starttime - pen
      else elasped := elasped + pen;
end;
end.
 #f; 