| -- 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; |