-- test of array parameters in GCL

@c+
module test18 -- array and tuple Params
private
typedef integer range [0..9] zero_nine;
typedef integer array [zero_nine] sortable;
sortable x;
integer i;

proc sort(ref sortable y)

	proc swap(val [integer, integer] x; ref [integer, integer] res)
	begin
		res := [x.2, x.1];
	end;

	integer i,j;
	[integer, integer] pair;
begin
	i := 10;
	do i > 0 -> 
	   i:= i-1;
	   j := 1;
	   do j<=i -> 
			if y[j-1] > y[j] -> 
					swap ([y[j],y[j-1]], pair); 
					y[j] := pair.1;
					y[j-1] := pair.2;
					j := j+1; 
			[]   y[j-1] <= y[j] -> 
					j := j+1;
			fi;
	   od;
	od;
end;

begin

i := 0;
do i < 10 -> read x[i]; i := i+1; od;
sort (x);
i := 0;
do i < 10 -> write x[i], ", "; i := i+1; od;
end. -- sorted list of inputs
