-- FXC6A00.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. --* -- -- FOUNDATION DESCRIPTION: -- This foundation declares various volatile and non-volatile types. Some -- are by-reference types, and some allow pass-by-copy. -- -- CHANGE HISTORY: -- 23 Jan 96 SAIC Initial version for ACVC 2.1. -- 02 DEC 97 EDS Removed Pragma Volatile applied to composite types. -- 27 AUG 99 RLB Repaired so Nonvolatile_Tagged really is -- Nonvolatile. --! package FXC6A00 is type Roman is ('I', 'V', 'X', 'L', 'C', 'D', 'M'); -- By-copy type. type Acc_Roman is access all Roman; type Tagged_Type is tagged record -- By-reference type. C: Natural; end record; type Volatile_Tagged is new Tagged_Type with record -- Volatile by-reference R1: Roman; -- type. end record; pragma Volatile (Volatile_Tagged); type Acc_Volatile_Tagged is access all Volatile_Tagged; -- By-reference type. type NonVolatile_Tagged is new Tagged_Type with record R2: aliased Roman; end record; task type Task_Type is -- By-reference type. entry Calculate (C: in out Natural); end Task_Type; type Acc_Task_Type is access all Task_Type; protected type Protected_Type is -- By-reference type. procedure Op; private Count : Natural := 0; end Protected_Type; protected type Volatile_Protected is -- Volatile by-reference procedure Handler; -- type. pragma Interrupt_Handler (Handler); function Handled return Boolean; private Was_Handled : Boolean := False; end Volatile_Protected; pragma Volatile (Volatile_Protected); type Acc_Vol_Protected is access all Volatile_Protected; type Record_Type is record -- Allows pass-by-copy. C: String(1 .. 2); end record; type Volatile_Record is limited record -- Volatile by-reference C: String(1 .. 2); -- type. end record; pragma Volatile (Volatile_Record); type Composite_Type is record -- By-reference type. C: Tagged_Type; D: aliased Volatile_Tagged; -- Volatile component. end record; type Private_Type is private; -- By-reference type. type Array_Type is array (1..3) of Tagged_Type; -- By-reference type. pragma Volatile_Components (Array_Type); type Acc_Array_Type is access all Array_Type; type Lim_Private_Type is limited private; -- By-copy type. private type Private_Type is new Tagged_Type with record D: Character; end record; type Lim_Private_Type is new Integer; end FXC6A00; --==================================================================-- package body FXC6A00 is task body Task_Type is begin accept Calculate (C: in out Natural) do C := C * 10; end Calculate; end Task_Type; protected body Protected_Type is procedure Op is begin Count := Count + 1; end Op; end Protected_Type; protected body Volatile_Protected is procedure Handler is begin Was_Handled := True; end Handler; function Handled return Boolean is begin return Was_Handled; end Handled; end Volatile_Protected; end FXC6A00;