3 -- Grant of Unlimited Rights
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
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.
33 -- JRK 11/18/85 ADDED PRAGMA ELABORATE.
34 -- PWB 07/29/87 ADDED STATUS ACTION_REQUIRED AND
35 -- PROCEDURE SPECIAL_ACTION.
36 -- TBN 08/20/87 ADDED FUNCTION LEGAL_FILE_NAME.
37 -- BCB 05/17/90 MODIFIED TO ALLOW OUTPUT TO DIRECT_IO FILE.
39 -- LDC 05/17/90 REMOVED OUTPUT TO DIRECT_IO FILE.
40 -- WMC 08/11/92 UPDATED ACVC VERSION STRING TO "9X BASIC".
41 -- DTN 07/05/92 UPDATED ACVC VERSION STRING TO
42 -- "ACVC 2.0 JULY 6 1993 DRAFT".
43 -- WMC 01/24/94 MODIFIED LEGAL_FILE_NAME TO ALLOW FIVE POSSIBLE
44 -- FILE NAMES (INCREASED RANGE OF TYPE FILE_NUM TO 1..5).
45 -- WMC 11/06/94 UPDATED ACVC VERSION STRING TO
46 -- "ACVC 2.0 NOVEMBER 6 1994 DRAFT".
47 -- DTN 12/04/94 UPDATED ACVC VERSION STRING TO
49 -- KAS 06/19/95 ADDED FUNCTION IDENT_WIDE_CHAR.
50 -- KAS 06/19/95 ADDED FUNCTION IDENT_WIDE_STR.
51 -- DTN 11/21/95 UPDATED ACVC VERSION STRING TO
53 -- DTN 12/14/95 UPDATED ACVC VERSION STRING TO
55 -- EDS 12/17/97 UPDATED ACVC VERSION STRING TO
57 -- RLB 3/16/00 UPDATED ACATS VERSION STRING TO "2.3".
58 -- CHANGED VARIOUS STRINGS TO READ "ACATS".
59 -- RLB 3/22/01 UPDATED ACATS VERSION STRING TO "2.4".
60 -- RLB 3/29/01 UPDATED ACATS VERSION STRING TO "2.5".
62 WITH TEXT_IO
, CALENDAR
;
63 USE TEXT_IO
, CALENDAR
;
64 PRAGMA ELABORATE
(TEXT_IO
, CALENDAR
);
66 PACKAGE BODY REPORT
IS
68 TYPE STATUS
IS (PASS
, FAIL
, DOES_NOT_APPLY
, ACTION_REQUIRED
,
71 TYPE TIME_INTEGER
IS RANGE 0 .. 86_400
;
73 TEST_STATUS
: STATUS
:= FAIL
;
75 MAX_NAME_LEN
: CONSTANT := 15; -- MAXIMUM TEST NAME LENGTH.
76 TEST_NAME
: STRING (1..MAX_NAME_LEN
);
78 NO_NAME
: CONSTANT STRING (1..7) := "NO_NAME";
79 TEST_NAME_LEN
: INTEGER RANGE 0..MAX_NAME_LEN
:= 0;
83 ACATS_VERSION
: CONSTANT STRING := "2.5";
84 -- VERSION OF ACATS BEING RUN (X.XX).
86 PROCEDURE PUT_MSG
(MSG
: STRING) IS
87 -- WRITE MESSAGE. LONG MESSAGES ARE FOLDED (AND INDENTED).
88 MAX_LEN
: CONSTANT INTEGER RANGE 50..150 := 72; -- MAXIMUM
89 -- OUTPUT LINE LENGTH.
90 INDENT
: CONSTANT INTEGER := TEST_NAME_LEN
+ 9; -- AMOUNT TO
91 -- INDENT CONTINUATION LINES.
92 I
: INTEGER := 0; -- CURRENT INDENTATION.
93 M
: INTEGER := MSG
'FIRST; -- START OF MESSAGE SLICE.
94 N
: INTEGER; -- END OF MESSAGE SLICE.
97 IF I
+ (MSG
'LAST-M
+1) > MAX_LEN
THEN
98 N
:= M
+ (MAX_LEN
-I
) - 1;
99 IF MSG
(N
) /= ' ' THEN
100 WHILE N
>= M
AND THEN MSG
(N
+1) /= ' ' LOOP
104 N
:= M
+ (MAX_LEN
-I
) - 1;
109 SET_COL
(STANDARD_OUTPUT
, TEXT_IO
.COUNT
(I
+1));
110 PUT_LINE
(STANDARD_OUTPUT
, MSG
(M
..N
));
113 WHILE M
<= MSG
'LAST AND THEN MSG
(M
) = ' ' LOOP
116 EXIT WHEN M
> MSG
'LAST;
120 FUNCTION TIME_STAMP
RETURN STRING IS
121 TIME_NOW
: CALENDAR
.TIME
;
127 SECOND
: TIME_INTEGER
:= 1;
129 FUNCTION CONVERT
(NUMBER
: TIME_INTEGER
) RETURN STRING IS
130 STR
: STRING (1..2) := (OTHERS => '0');
131 DEC_DIGIT
: CONSTANT STRING := "0123456789";
132 NUM
: TIME_INTEGER
:= NUMBER
;
138 STR
(2) := DEC_DIGIT
(INTEGER (NUM
MOD 10 + 1));
140 STR
(1) := DEC_DIGIT
(INTEGER (NUM
+ 1));
145 TIME_NOW
:= CALENDAR
.CLOCK
;
146 SPLIT
(TIME_NOW
, YEAR_NUMBER
(YEAR
), MONTH_NUMBER
(MONTH
),
147 DAY_NUMBER
(DAY
), DAY_DURATION
(SECOND
));
148 HOUR
:= SECOND
/ 3600;
149 SECOND
:= SECOND
MOD 3600;
150 MINUTE
:= SECOND
/ 60;
151 SECOND
:= SECOND
MOD 60;
152 RETURN (CONVERT
(TIME_INTEGER
(YEAR
)) & "-" &
153 CONVERT
(TIME_INTEGER
(MONTH
)) & "-" &
154 CONVERT
(TIME_INTEGER
(DAY
)) & " " &
155 CONVERT
(TIME_INTEGER
(HOUR
)) & ":" &
156 CONVERT
(TIME_INTEGER
(MINUTE
)) & ":" &
157 CONVERT
(TIME_INTEGER
(SECOND
)));
160 PROCEDURE TEST
(NAME
: STRING; DESCR
: STRING) IS
163 IF NAME
'LENGTH <= MAX_NAME_LEN
THEN
164 TEST_NAME_LEN
:= NAME
'LENGTH;
165 ELSE TEST_NAME_LEN
:= MAX_NAME_LEN
;
167 TEST_NAME
(1..TEST_NAME_LEN
) :=
168 NAME
(NAME
'FIRST .. NAME
'FIRST+TEST_NAME_LEN
-1);
171 PUT_MSG
(",.,. " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
172 "ACATS " & ACATS_VERSION
& " " & TIME_STAMP
);
173 PUT_MSG
("---- " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
177 PROCEDURE COMMENT
(DESCR
: STRING) IS
179 PUT_MSG
(" - " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
183 PROCEDURE FAILED
(DESCR
: STRING) IS
186 PUT_MSG
(" * " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
190 PROCEDURE NOT_APPLICABLE
(DESCR
: STRING) IS
192 IF TEST_STATUS
= PASS
OR TEST_STATUS
= ACTION_REQUIRED
THEN
193 TEST_STATUS
:= DOES_NOT_APPLY
;
195 PUT_MSG
(" + " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
199 PROCEDURE SPECIAL_ACTION
(DESCR
: STRING) IS
201 IF TEST_STATUS
= PASS
THEN
202 TEST_STATUS
:= ACTION_REQUIRED
;
204 PUT_MSG
(" ! " & TEST_NAME
(1..TEST_NAME_LEN
) & " " &
212 PUT_MSG
("==== " & TEST_NAME
(1..TEST_NAME_LEN
) &
213 " PASSED ============================.");
214 WHEN DOES_NOT_APPLY
=>
215 PUT_MSG
("++++ " & TEST_NAME
(1..TEST_NAME_LEN
) &
216 " NOT-APPLICABLE ++++++++++++++++++++.");
217 WHEN ACTION_REQUIRED
=>
218 PUT_MSG
("!!!! " & TEST_NAME
(1..TEST_NAME_LEN
) &
219 " TENTATIVELY PASSED !!!!!!!!!!!!!!!!.");
220 PUT_MSG
("!!!! " & (1..TEST_NAME_LEN
=> ' ') &
221 " SEE '!' COMMENTS FOR SPECIAL NOTES!!");
223 PUT_MSG
("**** " & TEST_NAME
(1..TEST_NAME_LEN
) &
224 " FAILED ****************************.");
227 TEST_NAME_LEN
:= NO_NAME
'LENGTH;
228 TEST_NAME
(1..TEST_NAME_LEN
) := NO_NAME
;
231 FUNCTION IDENT_INT
(X
: INTEGER) RETURN INTEGER IS
233 IF EQUAL
(X
, X
) THEN -- ALWAYS EQUAL.
234 RETURN X
; -- ALWAYS EXECUTED.
236 RETURN 0; -- NEVER EXECUTED.
239 FUNCTION IDENT_CHAR
(X
: CHARACTER) RETURN CHARACTER IS
241 IF EQUAL
(CHARACTER'POS(X
), CHARACTER'POS(X
)) THEN -- ALWAYS
243 RETURN X
; -- ALWAYS EXECUTED.
245 RETURN '0'; -- NEVER EXECUTED.
248 FUNCTION IDENT_WIDE_CHAR
(X
: WIDE_CHARACTER) RETURN WIDE_CHARACTER IS
250 IF EQUAL
(WIDE_CHARACTER'POS(X
), WIDE_CHARACTER'POS(X
)) THEN
252 RETURN X
; -- ALWAYS EXECUTED.
254 RETURN '0'; -- NEVER EXECUTED.
257 FUNCTION IDENT_BOOL
(X
: BOOLEAN) RETURN BOOLEAN IS
259 IF EQUAL
(BOOLEAN'POS(X
), BOOLEAN'POS(X
)) THEN -- ALWAYS
261 RETURN X
; -- ALWAYS EXECUTED.
263 RETURN FALSE; -- NEVER EXECUTED.
266 FUNCTION IDENT_STR
(X
: STRING) RETURN STRING IS
268 IF EQUAL
(X
'LENGTH, X
'LENGTH) THEN -- ALWAYS EQUAL.
269 RETURN X
; -- ALWAYS EXECUTED.
271 RETURN ""; -- NEVER EXECUTED.
274 FUNCTION IDENT_WIDE_STR
(X
: WIDE_STRING) RETURN WIDE_STRING IS
276 IF EQUAL
(X
'LENGTH, X
'LENGTH) THEN -- ALWAYS EQUAL.
277 RETURN X
; -- ALWAYS EXECUTED.
279 RETURN ""; -- NEVER EXECUTED.
282 FUNCTION EQUAL
(X
, Y
: INTEGER) RETURN BOOLEAN IS
283 REC_LIMIT
: CONSTANT INTEGER RANGE 1..100 := 3; -- RECURSION
285 Z
: BOOLEAN; -- RESULT.
292 ELSIF X
> REC_LIMIT
THEN
293 Z
:= EQUAL
(REC_LIMIT
, Y
-X
+REC_LIMIT
);
295 Z
:= EQUAL
(X
-1, Y
-1);
304 FUNCTION LEGAL_FILE_NAME
(X
: FILE_NUM
:= 1;
307 SUFFIX
: STRING (2..6);
310 SUFFIX
:= TEST_NAME
(3..7);
316 WHEN 1 => RETURN ('X' & SUFFIX
);
317 WHEN 2 => RETURN ('Y' & SUFFIX
);
318 WHEN 3 => RETURN ('Z' & SUFFIX
);
319 WHEN 4 => RETURN ('V' & SUFFIX
);
320 WHEN 5 => RETURN ('W' & SUFFIX
);
326 TEST_NAME_LEN
:= NO_NAME
'LENGTH;
327 TEST_NAME
(1..TEST_NAME_LEN
) := NO_NAME
;