{ test of array parameters in GCL
}
$c+
module test16_2 { array Params}
private
typedefinition integer range [0..9] zero_nine;
typedefinition integer array [zero_nine] sortable;
sortable x;
integer i;

[procedure sort(reference sortable y)] sortIt;

procedure sortIt@sort

	tuple [procedure swap(reference integer x; reference integer y)] swapper;

	procedure swapper@swap
	begin
		x, y := y, x;
	end;

	integer i,j;
	
begin
	i := 10;
	do i > 0 -> 
	   i:= i-1;
	   j := 1;
	   do j<=i -> 
			if y[j-1] > y[j] -> 
					swapper!swap (y[j],y[j-1]); 
					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;

sortIt!sort (x);

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