WITH DIRECT_IO;
WITH REPORT; USE REPORT;
PROCEDURE CE2102K IS
INCOMPLETE : EXCEPTION;
BEGIN
TEST ("CE2102K", "CHECK THAT USE_ERROR IS RAISED IF AN " &
"IMPLEMENTATION DOES NOT SUPPORT RESET FOR " &
"DIRECT_IO");
DECLARE
PACKAGE DIR IS NEW DIRECT_IO (INTEGER);
USE DIR;
FILE1 : FILE_TYPE;
INT1 : INTEGER := IDENT_INT(1);
INT2 : INTEGER := 2;
BEGIN
BEGIN
CREATE (FILE1, OUT_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED ON CREATE OF " &
"DIRECT FILE WITH OUT_FILE MODE");
RAISE INCOMPLETE;
WHEN NAME_ERROR =>
NOT_APPLICABLE ("NAME_ERROR RAISED ON CREATE OF " &
"DIRECT FILE WITH OUT_FILE MODE");
RAISE INCOMPLETE;
END;
WRITE (FILE1, INT2);
BEGIN
RESET (FILE1, IN_FILE);
COMMENT ("RESET FROM OUT_FILE TO IN_FILE IS ALLOWED");
BEGIN
READ (FILE1, INT1);
IF INT1 /= IDENT_INT(2) THEN
FAILED ("RESETTING FROM OUT_FILE TO IN_FILE " &
"AFFECTED DATA");
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHILE " &
"READING FROM FILE - 1");
END;
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM OUT_FILE TO IN_FILE IS NOT " &
"ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM OUT_FILE TO IN_FILE");
END;
CLOSE (FILE1);
CREATE (FILE1, OUT_FILE, LEGAL_FILE_NAME(2));
WRITE (FILE1, INT2);
BEGIN
RESET (FILE1, INOUT_FILE);
COMMENT ("RESET FROM OUT_FILE TO INOUT_FILE IS ALLOWED");
BEGIN
READ (FILE1, INT1);
IF INT1 /= IDENT_INT(2) THEN
FAILED ("RESETTING FROM OUT_FILE TO " &
"INOUT_FILE AFFECTED DATA");
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHILE " &
"READING FROM FILE - 2");
END;
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM OUT_FILE TO INOUT_FILE IS " &
"NOT ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM OUT_FILE TO INOUT_FILE");
END;
BEGIN
DELETE (FILE1);
EXCEPTION
WHEN USE_ERROR =>
NULL;
END;
BEGIN
OPEN (FILE1, IN_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED ON OPENING OF " &
"DIRECT FILE WITH IN_FILE MODE");
RAISE INCOMPLETE;
END;
BEGIN
RESET (FILE1, OUT_FILE);
COMMENT ("RESET FROM IN_FILE TO OUT_FILE IS ALLOWED");
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM IN_FILE TO OUT_FILE IS NOT " &
"ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM IN_FILE TO OUT_FILE");
END;
CLOSE (FILE1);
OPEN (FILE1, IN_FILE, LEGAL_FILE_NAME);
BEGIN
RESET (FILE1, INOUT_FILE);
COMMENT ("RESET FROM IN_FILE TO INOUT_FILE IS ALLOWED");
BEGIN
READ (FILE1, INT1);
IF INT1 /= IDENT_INT(2) THEN
FAILED ("RESETTING FROM IN_FILE TO " &
"INOUT_FILE AFFECTED DATA");
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHILE " &
"READING FROM FILE - 3");
END;
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM IN_FILE TO INOUT_FILE IS " &
"NOT ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM IN_FILE TO INOUT_FILE");
END;
CLOSE (FILE1);
BEGIN
OPEN (FILE1, INOUT_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED ON OPENING OF " &
"DIRECT FILE WITH INOUT_FILE MODE");
RAISE INCOMPLETE;
END;
BEGIN
RESET (FILE1, IN_FILE);
COMMENT ("RESET FROM INOUT_FILE TO IN_FILE IS ALLOWED");
BEGIN
READ (FILE1, INT1);
IF INT1 /= IDENT_INT(2) THEN
FAILED ("RESETTING FROM INOUT_FILE TO " &
"IN_FILE AFFECTED DATA");
END IF;
EXCEPTION
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHILE " &
"READING FROM FILE - 2");
END;
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM INOUT_FILE TO IN_FILE IS " &
"NOT ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM INOUT_FILE TO IN_FILE");
END;
CLOSE (FILE1);
OPEN (FILE1, INOUT_FILE, LEGAL_FILE_NAME);
BEGIN
RESET (FILE1, OUT_FILE);
COMMENT ("RESET FROM INOUT_FILE TO OUT_FILE IS ALLOWED");
EXCEPTION
WHEN USE_ERROR =>
COMMENT ("RESET FROM INOUT_FILE TO OUT_FILE IS " &
"NOT ALLOWED");
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED WHEN " &
"RESETTING FROM INOUT_FILE TO OUT_FILE");
END;
BEGIN
DELETE (FILE1);
EXCEPTION
WHEN USE_ERROR =>
NULL;
END;
EXCEPTION
WHEN INCOMPLETE =>
NULL;
END;
RESULT;
END CE2102K;