(* This is a test of procs *) 
(* Has procs and units *) 
(* No arrays  -- lots of expressions *) 

program proc_test; 

unit mile alias (miles, mi), foot alias (feet, ft), 
     inches alias (inch,in); 
const
      ft_per_mi = 5280;
      min_per_hr = 60; 

var   d1: miles; d2: foot; d3: in;
      fact, bigRet: number;  
       

procedure converter (d1);
const
      in_per_ft = 12 inches; 
begin 
    d2 := (* convert to feet *){d2.units} (d1 * ft_per_mi); 
    d3 := (* convert to inches *){d3.units} d2 * in_per_ft; 
end; (* converter *)

procedure factorial (n);
var n_minus_1 : number;
begin
    if n<=1 then fact := 1
    else
       begin
          n_minus_1 := n-1;
          factorial( n_minus_1 );
          fact := n * fact;
       end;
end; (* factorial *)

procedure big (m);
var  m1 : number;
begin
    m1 := m * {miles} 1 ;
    factorial (m1);
    bigRet := {feet} (fact * 5)
end; (* big *)

begin (* proc_test *)
    d1 := 10;
    converter(d1);
    big(d1); 
end.  (* proc_test *) 
