1-- CA13002.A
2--
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25--
26-- OBJECTIVE:
27--      Check that two library child units and/or subunits may have the same
28--      simple names if they have distinct expanded names.
29--
30-- TEST DESCRIPTION:
31--      Declare a package that provides some primitive functionality (minimal
32--      terminal driver operations in this case).  Add child packages to
33--      expand the functionality for different but related contexts (different
34--      terminal kinds).  Add child packages, or subunits, to the children to
35--      provide the same high level operation for each of the different
36--      contexts (terminals).  Since the operations are the same, at the leaf
37--      level they are likely to have the same names.
38--
39--      The main program "with"s the child packages.  Check that the
40--      child units and subunits perform as expected.
41--
42--
43-- CHANGE HISTORY:
44--      06 Dec 94   SAIC    ACVC 2.0
45--
46--!
47
48-- Public parent.
49package CA13002_0 is                     -- Terminal_Driver.
50
51   type TC_Name is (First_Child, Second_Child, Third_Child, Fourth_Child);
52   type TC_Call_From is (First_Grandchild, Second_Grandchild, First_Subunit,
53                           Second_Subunit);
54   type TC_Calls_Arr is array (TC_Name, TC_Call_From) of boolean;
55   TC_Calls : TC_Calls_Arr := (others => (others => false));
56
57   -- In real application, Send_Control_Sequence sends keystrokes from
58   -- the terminal, i.e., space, escape, etc.
59   procedure Send_Control_Sequence (Row : in TC_Name;
60                                    Col : in TC_Call_From);
61
62end CA13002_0;
63
64     --==================================================================--
65
66-- First child.
67package CA13002_0.CA13002_1 is           -- Terminal_Driver.VT100
68
69   -- Move cursor up, down, left, or right.
70   procedure Move_Cursor (Col : in TC_Call_From);
71
72end CA13002_0.CA13002_1;
73
74     --==================================================================--
75
76-- First grandchild.
77procedure CA13002_0.CA13002_1.CA13002_5; -- Terminal_Driver.VT100.Cursor_Up
78
79     --==================================================================--
80
81-- Second child.
82package CA13002_0.CA13002_2 is           -- Terminal_Driver.IBM3270
83
84   procedure Move_Cursor (Col : in TC_Call_From);
85
86end CA13002_0.CA13002_2;
87
88     --==================================================================--
89
90-- Second grandchild.
91procedure CA13002_0.CA13002_2.CA13002_5; -- Terminal_Driver.IBM3270.Cursor_Up
92
93     --==================================================================--
94
95-- Third child.
96package CA13002_0.CA13002_3 is           -- Terminal_Driver.DOS_ANSI
97
98   procedure Move_Cursor (Col : in TC_Call_From);
99
100   procedure CA13002_5;                  -- Terminal_Driver.DOS_ANSI.Cursor_Up
101                                         -- implementation will be as a
102                                         -- separate subunit.
103end CA13002_0.CA13002_3;
104
105     --==================================================================--
106
107-- Fourth child.
108package CA13002_0.CA13002_4 is           -- Terminal_Driver.WYSE
109
110   procedure Move_Cursor (Col : in TC_Call_From);
111
112   procedure CA13002_5;                  -- Terminal_Driver.WYSE.Cursor_Up
113                                         -- implementation will be as a
114                                         -- separate subunit.
115
116end CA13002_0.CA13002_4;
117
118     --==================================================================--
119
120-- Terminal_Driver.
121package body CA13002_0 is
122
123   procedure Send_Control_Sequence (Row : in TC_Name;
124                                    Col : in TC_Call_From) is
125   begin
126      -- Reads a key and takes action.
127      TC_Calls (Row, Col) := true;
128   end Send_Control_Sequence;
129
130end CA13002_0;
131
132     --==================================================================--
133
134-- Terminal_Driver.VT100.
135package body CA13002_0.CA13002_1 is
136
137   procedure Move_Cursor (Col : in TC_Call_From) is
138   begin
139      Send_Control_Sequence (First_Child, Col);
140   end Move_Cursor;
141
142end CA13002_0.CA13002_1;
143
144     --==================================================================--
145
146-- Terminal_Driver.VT100.Cursor_Up.
147procedure CA13002_0.CA13002_1.CA13002_5 is
148begin
149   Move_Cursor (First_Grandchild);        -- from Terminal_Driver.VT100.
150end CA13002_0.CA13002_1.CA13002_5;
151
152     --==================================================================--
153
154-- Terminal_Driver.IBM3270.
155package body CA13002_0.CA13002_2 is
156
157   procedure Move_Cursor (Col : in TC_Call_From) is
158   begin
159      Send_Control_Sequence (Second_Child, Col);
160   end Move_Cursor;
161
162end CA13002_0.CA13002_2;
163
164     --==================================================================--
165
166-- Terminal_Driver.IBM3270.Cursor_Up.
167procedure CA13002_0.CA13002_2.CA13002_5 is
168begin
169   Move_Cursor (Second_Grandchild);       -- from Terminal_Driver.IBM3270.
170end CA13002_0.CA13002_2.CA13002_5;
171
172     --==================================================================--
173
174-- Terminal_Driver.DOS_ANSI.
175package body CA13002_0.CA13002_3 is
176
177   procedure Move_Cursor (Col : in TC_Call_From) is
178   begin
179      Send_Control_Sequence (Third_Child, Col);
180   end Move_Cursor;
181
182   procedure CA13002_5 is separate;
183
184end CA13002_0.CA13002_3;
185
186     --==================================================================--
187
188-- Terminal_Driver.DOS_ANSI.Cursor_Up.
189separate (CA13002_0.CA13002_3)
190procedure CA13002_5 is
191begin
192   Move_Cursor (First_Subunit);           -- from Terminal_Driver.DOS_ANSI.
193end CA13002_5;
194
195     --==================================================================--
196
197-- Terminal_Driver.WYSE.
198package body CA13002_0.CA13002_4 is
199
200   procedure Move_Cursor (Col : in TC_Call_From) is
201   begin
202      Send_Control_Sequence (Fourth_Child, Col);
203   end Move_Cursor;
204
205   procedure CA13002_5 is separate;
206
207end CA13002_0.CA13002_4;
208
209     --==================================================================--
210
211-- Terminal_Driver.WYSE.Cursor_Up.
212separate (CA13002_0.CA13002_4)
213procedure CA13002_5 is
214begin
215   Move_Cursor (Second_Subunit);          -- from Terminal_Driver.WYSE.
216end CA13002_5;
217
218     --==================================================================--
219
220with CA13002_0.CA13002_1.CA13002_5;     -- Terminal_Driver.VT100.Cursor_Up,
221                                        -- implicitly with parent, CA13002_0.
222with CA13002_0.CA13002_2.CA13002_5;     -- Terminal_Driver.IBM3270.Cursor_Up.
223with CA13002_0.CA13002_3;               -- Terminal_Driver.DOS_ANSI.
224with CA13002_0.CA13002_4;               -- Terminal_Driver.WYSE.
225with Report;
226use  CA13002_0;                         -- All primitive subprograms directly
227                                        -- visible.
228
229procedure CA13002 is
230   Expected_Calls : constant CA13002_0.TC_Calls_Arr
231                  := ((true,  false, false, false),
232                      (false, true , false, false),
233                      (false, false, true , false),
234                      (false, false, false, true ));
235begin
236   Report.Test ("CA13002", "Check that two library units and/or subunits " &
237                "may have the same simple names if they have distinct " &
238                "expanded names");
239
240   -- Note that the leaves all have the same name.
241   -- Call the first grandchild.
242   CA13002_0.CA13002_1.CA13002_5;
243
244   -- Call the second grandchild.
245   CA13002_0.CA13002_2.CA13002_5;
246
247   -- Call the first subunit.
248   CA13002_0.CA13002_3.CA13002_5;
249
250   -- Call the second subunit.
251   CA13002_0.CA13002_4.CA13002_5;
252
253   if TC_Calls /= Expected_Calls then
254      Report.Failed ("Wrong result");
255   end if;
256
257   Report.Result;
258
259end CA13002;
260