1-- C3900052.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--      See C3900053.AM.
28--
29-- TEST DESCRIPTION:
30--      See C3900053.AM.
31--
32-- TEST FILES:
33--      This test consists of the following files:
34--
35--         C3900050.A
36--         C3900051.A
37--      => C3900052.A
38--         C3900053.AM
39--
40-- CHANGE HISTORY:
41--      06 Dec 94   SAIC    ACVC 2.0
42--      15 May 96   SAIC    ACVC 2.1: Modified prologue. Added pragma Elaborate
43--                          for Ada.Calendar.
44--
45--!
46
47with C3900051;       -- Extended alert system abstraction.
48package C3900052 is  -- Further extended alert system abstraction.
49
50
51   -- Declarations used by component Action_Officer;
52
53   type Person_Enum is (Nobody,          Duty_Officer,
54                        Watch_Commander, Commanding_Officer);
55
56
57   type Medium_Alert_Type is new C3900051.Low_Alert_Type
58     with private;                                      -- Private extension of
59                                                        -- private extension.
60
61   -- Inherits (inherited) procedure Display from Low_Alert_Type.
62   -- Inherits function Level_Of from Low_Alert_Type.
63
64   procedure Handle (MA : in out Medium_Alert_Type);    -- Override parent's
65                                                        -- primitive subprog.
66
67   procedure Assign_Officer (MA : in out Medium_Alert_Type;
68                             To : in     Person_Enum);
69
70
71   -- The following functions are needed to verify the values of the
72   -- extension's private components.
73
74   function Initial_Values_Okay (MA : in Medium_Alert_Type)
75     return Boolean;                                    -- Override parent's
76                                                        -- primitive subprog.
77
78   function Bad_Final_Values (MA: in Medium_Alert_Type) -- Override parent's
79     return Boolean;                                    -- primitive subprog.
80
81private
82
83   type Medium_Alert_Type is new C3900051.Low_Alert_Type with record
84      Action_Officer : Person_Enum := Nobody;
85   end record;
86
87end C3900052;
88
89
90     --==================================================================--
91
92
93with C3900050;            -- Basic alert abstraction.
94with Ada.Calendar;
95pragma Elaborate (Ada.Calendar);
96
97package body C3900052 is  -- Further extended alert system abstraction.
98
99   use C3900050;  -- Enumeration values directly visible.
100   use C3900051;  -- Extended alert system abstraction.
101
102
103   procedure Assign_Officer (MA : in out Medium_Alert_Type;
104                             To : in     Person_Enum) is
105   begin
106      MA.Action_Officer := To;
107   end Assign_Officer;
108
109
110   procedure Handle (MA : in out Medium_Alert_Type) is
111   begin
112      Handle (Low_Alert_Type (MA));      -- Call parent's op (type conversion).
113      Set_Level (MA, 2);                 -- Call inherited operation.
114      Assign_Officer (MA, Duty_Officer); -- Call newly declared operation.
115      Set_Display (MA, Console);         -- Call inherited operation.
116      Display (MA);                      -- Call doubly inherited operation.
117   end Handle;
118
119
120   function Initial_Values_Okay (MA : in Medium_Alert_Type) return Boolean is
121   begin
122      -- Call parent's operation (type conversion).
123      return (Initial_Values_Okay (Low_Alert_Type (MA)) and
124              MA.Action_Officer = Nobody);
125   end Initial_Values_Okay;
126
127
128   function Bad_Final_Values (MA : in Medium_Alert_Type) return Boolean is
129      use type Ada.Calendar.Time;
130   begin
131      return (Get_Time(MA)      /= Alert_Time or
132              Get_Display(MA)   /= Console    or
133              Get_Level(MA)     /= 2          or
134              MA.Action_Officer /= Duty_Officer);
135   end Bad_Final_Values;
136
137
138end C3900052;
139