-- adatest03.ada  rob 84-01-10
--
-- comment out get
--    (adaf "ostrich:[truman.ada]adatest03.ada")


--
-- This problem will accept a number from 1 to 8, and produce all possible
--    permutation.
--
With text_io; Use text_io;

procedure perma is

   N: integer;
   arry: array(1..8) of integer;
   procedure generate_perm(number: integer);
   procedure output_permutate;
   procedure interchange(I,N: integer);

   procedure permute(num: integer) is
   begin
      if num < 1 or num > 8 then
	 PUT("Range exceeded");
      else
	 for I in 1..num loop
	    arry(I) := I;
	 end loop;
	 generate_perm(num);
      end if;
      NEW_LINE;
   end permute;

   procedure generate_perm(number: integer) is
   begin
      if number = 1 then
	 output_permutate;
      else
	 for I in 1..number loop
	   interchange(I,number);
	   generate_perm(number-1);
	   interchange(I,number);
	 end loop;
      end if;
   end generate_perm;

   procedure interchange(I,N: integer) is
      temp: integer;
   begin
      temp := arry(N);
      arry(N) := arry(I);
      arry(I) := temp;
   end;

package INT_IO is new INTEGER_IO(INTEGER);
use INT_IO;

procedure output_permutate is
   begin
      for I in 1..N loop
	 PUT(arry(I));
	 PUT(" ");
      end loop;
      NEW_LINE;
   end;

begin
   PUT("Permute how many numbers? ");
--   Get(N);
   N := 3;
   NEW_LINE;
   permute(n);
end;

