📄 ca11022.a
字号:
-- CA11022.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 body of a child unit can instantiate its generic sibling.-- -- TEST DESCRIPTION:-- Declare a package that provides some types for the graphic -- application. Add a generic child package with a subprogram parameter-- to provide algorithms that can be used by different terminal types-- but that have to be customized to the specific terminal. Add child -- packages to take advantage of the parent types and to provide a -- customized operation for each of the different terminals. The -- customized operation will be passed as a generic subprogram parameter -- to the child package's sibling.---- The main program "with"s the child packages. Check that the-- operations in child units perform as expected. ------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!package CA11022_0 is -- Graphic Manager type Row is range 1 .. 66; type Column is range 1 .. 80; type Radius is range 1 .. 3; type Length is range 5 .. 10; -- Testing artifice. TC_Screen : array (Row, Column) of boolean := (others => (others => false)); TC_Draw_Circle : boolean := false; TC_Draw_Square : boolean := false; -- ... and other complicated ones.end CA11022_0;-- No bodies required for CA11022_0. --==================================================================---- Child package to provide general graphic functionalities.generic with procedure Put_Dot (X : in Column; Y : in Row);package CA11022_0.CA11022_1 is procedure Draw_Square (At_Col : in Column; At_Row : in Row; Len : in Length); procedure Draw_Circle (At_Col : in Column; At_Row : in Row; Rad : in Radius); -- procedure Draw_Ellipse ... -- and other drawings ...end CA11022_0.CA11022_1; --==================================================================--package body CA11022_0.CA11022_1 is procedure Draw_Square (At_Col : in Column; At_Row : in Row; Len : in Length) is begin -- use square drawing algorithm -- call Put_Dot (At_Col + Column (Len), At_Row + Row(Len)); -- as needed in the algorithm. TC_Draw_Square := true; end Draw_Square; ------------------------------------------------------- procedure Draw_Circle (At_Col : in Column; At_Row : in Row; Rad : in Radius) is begin -- use circle drawing algorithm -- call for I in 1 .. Rad loop Put_Dot (At_Col + Column(I), At_Row + Row(I)); end loop; -- as needed in the algorithm. TC_Draw_Circle := true; end Draw_Circle;end CA11022_0.CA11022_1; --==================================================================--with CA11022_0.CA11022_1; -- Generic sibling.-- Child package to provide customized graphic functions for the-- VT100.package CA11022_0.CA11022_2 is -- VT100 Graphic. X : Column := 8; Y : Row := 3; R : Radius := 2; L : Length := 6; procedure VT100_Graphic;end CA11022_0.CA11022_2; --==================================================================--package body CA11022_0.CA11022_2 is procedure VT100_Graphic is procedure VT100_Putdot (X : in Column; Y : in Row) is begin -- Light a pixel at location (X, Y); TC_Screen (Y, X) := true; end VT100_Putdot; ------------------------------------ -- Declare instance of the generic sibling package to draw a circle, -- a square, or an ellipse customized for the VT100. package VT100_Graphic is new CA11022_0.CA11022_1 (VT100_Putdot); begin VT100_Graphic.Draw_Circle (X, Y, R); VT100_Graphic.Draw_Square (X, Y, L); end VT100_Graphic;end CA11022_0.CA11022_2; --==================================================================--with CA11022_0.CA11022_1; -- Generic sibling.-- Child package to provide customized graphic functions for the-- IBM3270.package CA11022_0.CA11022_3 is -- IBM3270 Graphic. X : Column := 39; Y : Row := 11; R : Radius := 3; L : Length := 7; procedure IBM3270_Graphic;end CA11022_0.CA11022_3; --==================================================================--package body CA11022_0.CA11022_3 is procedure IBM3270_Graphic is procedure IBM3270_Putdot (X : in Column; Y : in Row) is begin -- Light a pixel at location (X + 2, Y); TC_Screen (Y, X + Column(2)) := true; end IBM3270_Putdot; ------------------------------------ -- Declare instance of the generic sibling package to draw a circle, -- a square, or an ellipse customized for the IBM3270. package IBM3270_Graphic is new CA11022_0.CA11022_1 (IBM3270_Putdot); begin IBM3270_Graphic.Draw_Circle (X, Y, R); IBM3270_Graphic.Draw_Square (X, Y, L); end IBM3270_Graphic;end CA11022_0.CA11022_3; --==================================================================--with CA11022_0.CA11022_2; -- VT100 Graphic, implicitly with -- CA11022_0, Graphic Manager.with CA11022_0.CA11022_3; -- IBM3270 Graphic.with Report;procedure CA11022 isbegin Report.Test ("CA11022", "Check that body of a child unit can depend on " & "its generic sibling"); -- Customized graphic functions for the VT100 terminal. CA11022_0.CA11022_2.VT100_Graphic; 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_Draw_Square then Report.Failed ("Wrong results for the VT100"); end if; CA11022_0.TC_Draw_Circle := false; CA11022_0.TC_Draw_Square := false; -- Customized graphic functions for the IBM3270 terminal. CA11022_0.CA11022_3.IBM3270_Graphic; 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_Draw_Circle and not CA11022_0.TC_Draw_Square then Report.Failed ("Wrong results for the IBM3270"); end if; Report.Result;end CA11022;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -