-- CA13002.A
--
--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--
-- OBJECTIVE:
--      Check that two library child units and/or subunits may have the same 
--      simple names if they have distinct expanded names.
--
-- TEST DESCRIPTION:
--      Declare a package that provides some primitive functionality (minimal
--      terminal driver operations in this case).  Add child packages to 
--      expand the functionality for different but related contexts (different
--      terminal kinds).  Add child packages, or subunits, to the children to
--      provide the same high level operation for each of the different 
--      contexts (terminals).  Since the operations are the same, at the leaf
--      level they are likely to have the same names.
--
--      The main program "with"s the child packages.  Check that the
--      child units and subunits perform as expected.  
--
--
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--
--!
   
-- Public parent.
package CA13002_0 is                     -- Terminal_Driver.

   type TC_Name is (First_Child, Second_Child, Third_Child, Fourth_Child);
   type TC_Call_From is (First_Grandchild, Second_Grandchild, First_Subunit, 
                           Second_Subunit);
   type TC_Calls_Arr is array (TC_Name, TC_Call_From) of boolean;
   TC_Calls : TC_Calls_Arr := (others => (others => false));

   -- In real application, Send_Control_Sequence sends keystrokes from
   -- the terminal, i.e., space, escape, etc.
   procedure Send_Control_Sequence (Row : in TC_Name;
                                    Col : in TC_Call_From);

end CA13002_0;

     --==================================================================--

-- First child.
package CA13002_0.CA13002_1 is           -- Terminal_Driver.VT100

   -- Move cursor up, down, left, or right.
   procedure Move_Cursor (Col : in TC_Call_From);

end CA13002_0.CA13002_1;

     --==================================================================--

-- First grandchild.
procedure CA13002_0.CA13002_1.CA13002_5; -- Terminal_Driver.VT100.Cursor_Up

     --==================================================================--

-- Second child.
package CA13002_0.CA13002_2 is           -- Terminal_Driver.IBM3270

   procedure Move_Cursor (Col : in TC_Call_From);

end CA13002_0.CA13002_2;

     --==================================================================--

-- Second grandchild.
procedure CA13002_0.CA13002_2.CA13002_5; -- Terminal_Driver.IBM3270.Cursor_Up

     --==================================================================--

-- Third child.
package CA13002_0.CA13002_3 is           -- Terminal_Driver.DOS_ANSI

   procedure Move_Cursor (Col : in TC_Call_From);

   procedure CA13002_5;                  -- Terminal_Driver.DOS_ANSI.Cursor_Up
                                         -- implementation will be as a 
                                         -- separate subunit.
end CA13002_0.CA13002_3;

     --==================================================================--

-- Fourth child.
package CA13002_0.CA13002_4 is           -- Terminal_Driver.WYSE

   procedure Move_Cursor (Col : in TC_Call_From);

   procedure CA13002_5;                  -- Terminal_Driver.WYSE.Cursor_Up
                                         -- implementation will be as a 
                                         -- separate subunit.

end CA13002_0.CA13002_4;

     --==================================================================--

-- Terminal_Driver.
package body CA13002_0 is                  

   procedure Send_Control_Sequence (Row : in TC_Name;
                                    Col : in TC_Call_From) is
   begin
      -- Reads a key and takes action.
      TC_Calls (Row, Col) := true;
   end Send_Control_Sequence;

end CA13002_0;

     --==================================================================--

-- Terminal_Driver.VT100.
package body CA13002_0.CA13002_1 is                     

   procedure Move_Cursor (Col : in TC_Call_From) is
   begin
      Send_Control_Sequence (First_Child, Col);
   end Move_Cursor;

end CA13002_0.CA13002_1;

     --==================================================================--

-- Terminal_Driver.VT100.Cursor_Up.
procedure CA13002_0.CA13002_1.CA13002_5 is 
begin
   Move_Cursor (First_Grandchild);        -- from Terminal_Driver.VT100.
end CA13002_0.CA13002_1.CA13002_5;

     --==================================================================--

-- Terminal_Driver.IBM3270.
package body CA13002_0.CA13002_2 is                     

   procedure Move_Cursor (Col : in TC_Call_From) is
   begin
      Send_Control_Sequence (Second_Child, Col);
   end Move_Cursor;

end CA13002_0.CA13002_2;

     --==================================================================--

-- Terminal_Driver.IBM3270.Cursor_Up.
procedure CA13002_0.CA13002_2.CA13002_5 is 
begin
   Move_Cursor (Second_Grandchild);       -- from Terminal_Driver.IBM3270.
end CA13002_0.CA13002_2.CA13002_5;

     --==================================================================--

-- Terminal_Driver.DOS_ANSI.
package body CA13002_0.CA13002_3 is                     

   procedure Move_Cursor (Col : in TC_Call_From) is
   begin
      Send_Control_Sequence (Third_Child, Col);
   end Move_Cursor;

   procedure CA13002_5 is separate;

end CA13002_0.CA13002_3;

     --==================================================================--

-- Terminal_Driver.DOS_ANSI.Cursor_Up.
separate (CA13002_0.CA13002_3)
procedure CA13002_5 is 
begin
   Move_Cursor (First_Subunit);           -- from Terminal_Driver.DOS_ANSI.
end CA13002_5;

     --==================================================================--

-- Terminal_Driver.WYSE.
package body CA13002_0.CA13002_4 is                     

   procedure Move_Cursor (Col : in TC_Call_From) is
   begin
      Send_Control_Sequence (Fourth_Child, Col);
   end Move_Cursor;

   procedure CA13002_5 is separate;

end CA13002_0.CA13002_4;

     --==================================================================--

-- Terminal_Driver.WYSE.Cursor_Up.
separate (CA13002_0.CA13002_4)
procedure CA13002_5 is 
begin
   Move_Cursor (Second_Subunit);          -- from Terminal_Driver.WYSE.
end CA13002_5;

     --==================================================================--

with CA13002_0.CA13002_1.CA13002_5;     -- Terminal_Driver.VT100.Cursor_Up,
                                        -- implicitly with parent, CA13002_0.
with CA13002_0.CA13002_2.CA13002_5;     -- Terminal_Driver.IBM3270.Cursor_Up.
with CA13002_0.CA13002_3;               -- Terminal_Driver.DOS_ANSI.
with CA13002_0.CA13002_4;               -- Terminal_Driver.WYSE.
with Report;
use  CA13002_0;                         -- All primitive subprograms directly
                                        -- visible.

procedure CA13002 is
   Expected_Calls : constant CA13002_0.TC_Calls_Arr 
                  := ((true,  false, false, false),
                      (false, true , false, false),
                      (false, false, true , false),
                      (false, false, false, true ));
begin
   Report.Test ("CA13002", "Check that two library units and/or subunits " &
                "may have the same simple names if they have distinct " &
                "expanded names");

   -- Note that the leaves all have the same name.
   -- Call the first grandchild.
   CA13002_0.CA13002_1.CA13002_5;       

   -- Call the second grandchild.
   CA13002_0.CA13002_2.CA13002_5;

   -- Call the first subunit.
   CA13002_0.CA13002_3.CA13002_5;

   -- Call the second subunit.
   CA13002_0.CA13002_4.CA13002_5;

   if TC_Calls /= Expected_Calls then
      Report.Failed ("Wrong result");
   end if;  

   Report.Result;

end CA13002;
