--  Copyright 2005, 2007, 2008, 2009, 2010, 2011
--  Free Software Foundation, Inc.
--
--  This program is free software; you can redistribute it and/or modify
--  it under the terms of the GNU General Public License as published by
--  the Free Software Foundation; either version 3 of the License, or
--  (at your option) any later version.
--
--  This program is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--  GNU General Public License for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.

procedure P is
   type Index is (One, Two, Three);

   type Table is array (Integer range 1 .. 3) of Integer;
   type ETable is array (Index) of Integer;
   type RTable is array (Index range Two .. Three) of Integer;
   type UTable is array (Positive range <>) of Integer;

   type PTable is array (Index) of Boolean;
   pragma Pack (PTable);

   function Get_UTable (I : Integer) return UTable is
   begin
      return Utable'(1 => I, 2 => 2, 3 => 3);
   end Get_UTable;

   One_Two_Three : Table := (1, 2, 3);
   E_One_Two_Three : ETable := (1, 2, 3);
   R_Two_Three : RTable := (2, 3);
   U_One_Two_Three : UTable := Get_UTable (1);
   P_One_Two_Three : PTable := (False, True, True);

   Few_Reps : UTable := (1, 2, 3, 3, 3, 3, 3, 4, 5);
   Many_Reps : UTable := (1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5);

   Empty : array (1 .. 0) of Integer := (others => 0);

begin
   One_Two_Three (1) := 4;  --  START
   E_One_Two_Three (One) := 4;
   R_Two_Three (Two) := 4;
   U_One_Two_Three (U_One_Two_Three'First) := 4;
   P_One_Two_Three (One) := True;

   Few_Reps (Few_Reps'First) := 2;
   Many_Reps (Many_Reps'First) := 2;

   Empty := (others => 1);
end P;
