-- CA11022.A
|
-- CA11022.A
|
--
|
--
|
-- Grant of Unlimited Rights
|
-- Grant of Unlimited Rights
|
--
|
--
|
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
|
-- 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
|
-- 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 in the software and documentation contained herein.
|
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
|
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
|
-- this public release, the Government intends to confer upon all
|
-- this public release, the Government intends to confer upon all
|
-- recipients unlimited rights equal to those held by the Government.
|
-- recipients unlimited rights equal to those held by the Government.
|
-- These rights include rights to use, duplicate, release or disclose the
|
-- These rights include rights to use, duplicate, release or disclose the
|
-- released technical data and computer software in whole or in part, in
|
-- 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
|
-- any manner and for any purpose whatsoever, and to have or permit others
|
-- to do so.
|
-- to do so.
|
--
|
--
|
-- DISCLAIMER
|
-- DISCLAIMER
|
--
|
--
|
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
|
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
|
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
|
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
|
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
|
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
|
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
|
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
|
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
|
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
|
-- PARTICULAR PURPOSE OF SAID MATERIAL.
|
-- PARTICULAR PURPOSE OF SAID MATERIAL.
|
--*
|
--*
|
--
|
--
|
-- OBJECTIVE:
|
-- OBJECTIVE:
|
-- Check that body of a child unit can instantiate its generic sibling.
|
-- Check that body of a child unit can instantiate its generic sibling.
|
--
|
--
|
-- TEST DESCRIPTION:
|
-- TEST DESCRIPTION:
|
-- Declare a package that provides some types for the graphic
|
-- Declare a package that provides some types for the graphic
|
-- application. Add a generic child package with a subprogram parameter
|
-- application. Add a generic child package with a subprogram parameter
|
-- to provide algorithms that can be used by different terminal types
|
-- to provide algorithms that can be used by different terminal types
|
-- but that have to be customized to the specific terminal. Add child
|
-- but that have to be customized to the specific terminal. Add child
|
-- packages to take advantage of the parent types and to provide a
|
-- packages to take advantage of the parent types and to provide a
|
-- customized operation for each of the different terminals. The
|
-- customized operation for each of the different terminals. The
|
-- customized operation will be passed as a generic subprogram parameter
|
-- customized operation will be passed as a generic subprogram parameter
|
-- to the child package's sibling.
|
-- to the child package's sibling.
|
--
|
--
|
-- The main program "with"s the child packages. Check that the
|
-- The main program "with"s the child packages. Check that the
|
-- operations in child units perform as expected.
|
-- operations in child units perform as expected.
|
--
|
--
|
--
|
--
|
-- CHANGE HISTORY:
|
-- CHANGE HISTORY:
|
-- 06 Dec 94 SAIC ACVC 2.0
|
-- 06 Dec 94 SAIC ACVC 2.0
|
--
|
--
|
--!
|
--!
|
|
|
package CA11022_0 is -- Graphic Manager
|
package CA11022_0 is -- Graphic Manager
|
|
|
type Row is range 1 .. 66;
|
type Row is range 1 .. 66;
|
type Column is range 1 .. 80;
|
type Column is range 1 .. 80;
|
type Radius is range 1 .. 3;
|
type Radius is range 1 .. 3;
|
type Length is range 5 .. 10;
|
type Length is range 5 .. 10;
|
|
|
-- Testing artifice.
|
-- Testing artifice.
|
TC_Screen : array (Row, Column) of boolean := (others => (others => false));
|
TC_Screen : array (Row, Column) of boolean := (others => (others => false));
|
TC_Draw_Circle : boolean := false;
|
TC_Draw_Circle : boolean := false;
|
TC_Draw_Square : boolean := false;
|
TC_Draw_Square : boolean := false;
|
|
|
-- ... and other complicated ones.
|
-- ... and other complicated ones.
|
|
|
end CA11022_0;
|
end CA11022_0;
|
|
|
-- No bodies required for CA11022_0.
|
-- No bodies required for CA11022_0.
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
-- Child package to provide general graphic functionalities.
|
-- Child package to provide general graphic functionalities.
|
|
|
generic
|
generic
|
|
|
with procedure Put_Dot (X : in Column;
|
with procedure Put_Dot (X : in Column;
|
Y : in Row);
|
Y : in Row);
|
|
|
package CA11022_0.CA11022_1 is
|
package CA11022_0.CA11022_1 is
|
|
|
procedure Draw_Square (At_Col : in Column;
|
procedure Draw_Square (At_Col : in Column;
|
At_Row : in Row;
|
At_Row : in Row;
|
Len : in Length);
|
Len : in Length);
|
|
|
procedure Draw_Circle (At_Col : in Column;
|
procedure Draw_Circle (At_Col : in Column;
|
At_Row : in Row;
|
At_Row : in Row;
|
Rad : in Radius);
|
Rad : in Radius);
|
|
|
-- procedure Draw_Ellipse ...
|
-- procedure Draw_Ellipse ...
|
-- and other drawings ...
|
-- and other drawings ...
|
|
|
end CA11022_0.CA11022_1;
|
end CA11022_0.CA11022_1;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
package body CA11022_0.CA11022_1 is
|
package body CA11022_0.CA11022_1 is
|
|
|
procedure Draw_Square (At_Col : in Column;
|
procedure Draw_Square (At_Col : in Column;
|
At_Row : in Row;
|
At_Row : in Row;
|
Len : in Length) is
|
Len : in Length) is
|
begin
|
begin
|
-- use square drawing algorithm
|
-- use square drawing algorithm
|
-- call
|
-- call
|
Put_Dot (At_Col + Column (Len), At_Row + Row(Len));
|
Put_Dot (At_Col + Column (Len), At_Row + Row(Len));
|
-- as needed in the algorithm.
|
-- as needed in the algorithm.
|
TC_Draw_Square := true;
|
TC_Draw_Square := true;
|
end Draw_Square;
|
end Draw_Square;
|
|
|
-------------------------------------------------------
|
-------------------------------------------------------
|
procedure Draw_Circle (At_Col : in Column;
|
procedure Draw_Circle (At_Col : in Column;
|
At_Row : in Row;
|
At_Row : in Row;
|
Rad : in Radius) is
|
Rad : in Radius) is
|
begin
|
begin
|
-- use circle drawing algorithm
|
-- use circle drawing algorithm
|
-- call
|
-- call
|
for I in 1 .. Rad loop
|
for I in 1 .. Rad loop
|
Put_Dot (At_Col + Column(I), At_Row + Row(I));
|
Put_Dot (At_Col + Column(I), At_Row + Row(I));
|
end loop;
|
end loop;
|
-- as needed in the algorithm.
|
-- as needed in the algorithm.
|
TC_Draw_Circle := true;
|
TC_Draw_Circle := true;
|
end Draw_Circle;
|
end Draw_Circle;
|
|
|
end CA11022_0.CA11022_1;
|
end CA11022_0.CA11022_1;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
with CA11022_0.CA11022_1; -- Generic sibling.
|
with CA11022_0.CA11022_1; -- Generic sibling.
|
|
|
-- Child package to provide customized graphic functions for the
|
-- Child package to provide customized graphic functions for the
|
-- VT100.
|
-- VT100.
|
package CA11022_0.CA11022_2 is -- VT100 Graphic.
|
package CA11022_0.CA11022_2 is -- VT100 Graphic.
|
|
|
X : Column := 8;
|
X : Column := 8;
|
Y : Row := 3;
|
Y : Row := 3;
|
R : Radius := 2;
|
R : Radius := 2;
|
L : Length := 6;
|
L : Length := 6;
|
|
|
procedure VT100_Graphic;
|
procedure VT100_Graphic;
|
|
|
end CA11022_0.CA11022_2;
|
end CA11022_0.CA11022_2;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
package body CA11022_0.CA11022_2 is
|
package body CA11022_0.CA11022_2 is
|
|
|
procedure VT100_Graphic is
|
procedure VT100_Graphic is
|
procedure VT100_Putdot (X : in Column;
|
procedure VT100_Putdot (X : in Column;
|
Y : in Row) is
|
Y : in Row) is
|
begin
|
begin
|
-- Light a pixel at location (X, Y);
|
-- Light a pixel at location (X, Y);
|
TC_Screen (Y, X) := true;
|
TC_Screen (Y, X) := true;
|
end VT100_Putdot;
|
end VT100_Putdot;
|
|
|
------------------------------------
|
------------------------------------
|
|
|
-- Declare instance of the generic sibling package to draw a circle,
|
-- Declare instance of the generic sibling package to draw a circle,
|
-- a square, or an ellipse customized for the VT100.
|
-- a square, or an ellipse customized for the VT100.
|
package VT100_Graphic is new CA11022_0.CA11022_1 (VT100_Putdot);
|
package VT100_Graphic is new CA11022_0.CA11022_1 (VT100_Putdot);
|
|
|
begin
|
begin
|
VT100_Graphic.Draw_Circle (X, Y, R);
|
VT100_Graphic.Draw_Circle (X, Y, R);
|
VT100_Graphic.Draw_Square (X, Y, L);
|
VT100_Graphic.Draw_Square (X, Y, L);
|
end VT100_Graphic;
|
end VT100_Graphic;
|
|
|
end CA11022_0.CA11022_2;
|
end CA11022_0.CA11022_2;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
with CA11022_0.CA11022_1; -- Generic sibling.
|
with CA11022_0.CA11022_1; -- Generic sibling.
|
|
|
-- Child package to provide customized graphic functions for the
|
-- Child package to provide customized graphic functions for the
|
-- IBM3270.
|
-- IBM3270.
|
package CA11022_0.CA11022_3 is -- IBM3270 Graphic.
|
package CA11022_0.CA11022_3 is -- IBM3270 Graphic.
|
|
|
X : Column := 39;
|
X : Column := 39;
|
Y : Row := 11;
|
Y : Row := 11;
|
R : Radius := 3;
|
R : Radius := 3;
|
L : Length := 7;
|
L : Length := 7;
|
|
|
procedure IBM3270_Graphic;
|
procedure IBM3270_Graphic;
|
|
|
end CA11022_0.CA11022_3;
|
end CA11022_0.CA11022_3;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
package body CA11022_0.CA11022_3 is
|
package body CA11022_0.CA11022_3 is
|
|
|
procedure IBM3270_Graphic is
|
procedure IBM3270_Graphic is
|
procedure IBM3270_Putdot (X : in Column;
|
procedure IBM3270_Putdot (X : in Column;
|
Y : in Row) is
|
Y : in Row) is
|
begin
|
begin
|
-- Light a pixel at location (X + 2, Y);
|
-- Light a pixel at location (X + 2, Y);
|
TC_Screen (Y, X + Column(2)) := true;
|
TC_Screen (Y, X + Column(2)) := true;
|
end IBM3270_Putdot;
|
end IBM3270_Putdot;
|
|
|
------------------------------------
|
------------------------------------
|
|
|
-- Declare instance of the generic sibling package to draw a circle,
|
-- Declare instance of the generic sibling package to draw a circle,
|
-- a square, or an ellipse customized for the IBM3270.
|
-- a square, or an ellipse customized for the IBM3270.
|
package IBM3270_Graphic is new CA11022_0.CA11022_1 (IBM3270_Putdot);
|
package IBM3270_Graphic is new CA11022_0.CA11022_1 (IBM3270_Putdot);
|
|
|
begin
|
begin
|
IBM3270_Graphic.Draw_Circle (X, Y, R);
|
IBM3270_Graphic.Draw_Circle (X, Y, R);
|
IBM3270_Graphic.Draw_Square (X, Y, L);
|
IBM3270_Graphic.Draw_Square (X, Y, L);
|
end IBM3270_Graphic;
|
end IBM3270_Graphic;
|
|
|
end CA11022_0.CA11022_3;
|
end CA11022_0.CA11022_3;
|
|
|
--==================================================================--
|
--==================================================================--
|
|
|
with CA11022_0.CA11022_2; -- VT100 Graphic, implicitly with
|
with CA11022_0.CA11022_2; -- VT100 Graphic, implicitly with
|
-- CA11022_0, Graphic Manager.
|
-- CA11022_0, Graphic Manager.
|
with CA11022_0.CA11022_3; -- IBM3270 Graphic.
|
with CA11022_0.CA11022_3; -- IBM3270 Graphic.
|
with Report;
|
with Report;
|
|
|
procedure CA11022 is
|
procedure CA11022 is
|
|
|
begin
|
begin
|
|
|
Report.Test ("CA11022", "Check that body of a child unit can depend on " &
|
Report.Test ("CA11022", "Check that body of a child unit can depend on " &
|
"its generic sibling");
|
"its generic sibling");
|
|
|
-- Customized graphic functions for the VT100 terminal.
|
-- Customized graphic functions for the VT100 terminal.
|
CA11022_0.CA11022_2.VT100_Graphic;
|
CA11022_0.CA11022_2.VT100_Graphic;
|
|
|
if not CA11022_0.TC_Screen (4,9) and not CA11022_0.TC_Screen (5,10)
|
if not CA11022_0.TC_Screen (4,9) and not CA11022_0.TC_Screen (5,10)
|
and not CA11022_0.TC_Screen (9,14) and not CA11022_0.TC_Draw_Circle
|
and not CA11022_0.TC_Screen (9,14) and not CA11022_0.TC_Draw_Circle
|
and not CA11022_0.TC_Draw_Square then
|
and not CA11022_0.TC_Draw_Square then
|
Report.Failed ("Wrong results for the VT100");
|
Report.Failed ("Wrong results for the VT100");
|
end if;
|
end if;
|
|
|
CA11022_0.TC_Draw_Circle := false;
|
CA11022_0.TC_Draw_Circle := false;
|
CA11022_0.TC_Draw_Square := false;
|
CA11022_0.TC_Draw_Square := false;
|
|
|
-- Customized graphic functions for the IBM3270 terminal.
|
-- Customized graphic functions for the IBM3270 terminal.
|
CA11022_0.CA11022_3.IBM3270_Graphic;
|
CA11022_0.CA11022_3.IBM3270_Graphic;
|
|
|
if not CA11022_0.TC_Screen (12,42) and not CA11022_0.TC_Screen (13,43)
|
if not CA11022_0.TC_Screen (12,42) and not CA11022_0.TC_Screen (13,43)
|
and not CA11022_0.TC_Screen (14,44) and not CA11022_0.TC_Screen (46,18)
|
and not CA11022_0.TC_Screen (14,44) and not CA11022_0.TC_Screen (46,18)
|
and not CA11022_0.TC_Draw_Circle and not CA11022_0.TC_Draw_Square then
|
and not CA11022_0.TC_Draw_Circle and not CA11022_0.TC_Draw_Square then
|
Report.Failed ("Wrong results for the IBM3270");
|
Report.Failed ("Wrong results for the IBM3270");
|
end if;
|
end if;
|
|
|
Report.Result;
|
Report.Result;
|
|
|
end CA11022;
|
end CA11022;
|
|
|