WITH REPORT; USE REPORT;
WITH TEXT_IO; USE TEXT_IO;
PROCEDURE CE3115A IS
BEGIN
TEST ("CE3115A", "CHECK THAT RESETTING ONE OF A MULTIPLE OF " &
"INTERNAL FILES ASSOCIATED WITH THE SAME " &
"EXTERNAL FILE HAS NO EFFECT ON ANY OF THE " &
"OTHER INTERNAL FILES");
DECLARE
TXT_FILE_ONE : TEXT_IO.FILE_TYPE;
TXT_FILE_TWO : TEXT_IO.FILE_TYPE;
CH : CHARACTER := 'A';
INCOMPLETE : EXCEPTION;
PROCEDURE TXT_CLEANUP IS
FILE1_OPEN : BOOLEAN := IS_OPEN (TXT_FILE_ONE);
FILE2_OPEN : BOOLEAN := IS_OPEN (TXT_FILE_TWO);
BEGIN
IF FILE1_OPEN AND FILE2_OPEN THEN
CLOSE (TXT_FILE_TWO);
DELETE (TXT_FILE_ONE);
ELSIF FILE1_OPEN THEN
DELETE (TXT_FILE_ONE);
ELSIF FILE2_OPEN THEN
DELETE (TXT_FILE_TWO);
END IF;
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("UNEXPECTED EXCEPTION RAISED " &
"IN CLEANUP - 1");
END TXT_CLEANUP;
BEGIN
BEGIN
CREATE (TXT_FILE_ONE, OUT_FILE, LEGAL_FILE_NAME);
PUT (TXT_FILE_ONE, CH);
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED; CREATE OF " &
"EXTERNAL FILENAME IS NOT " &
"SUPPORTED - 2");
RAISE INCOMPLETE;
WHEN TEXT_IO.NAME_ERROR =>
NOT_APPLICABLE ("NAME_ERROR RAISED; CREATE OF " &
"EXTERNAL FILENAME IS NOT " &
"SUPPORTED - 3");
RAISE INCOMPLETE;
END;
BEGIN
OPEN (TXT_FILE_TWO, IN_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
NOT_APPLICABLE ("MULTIPLE INTERNAL FILES ARE NOT " &
"SUPPORTED WHEN ONE IS MODE " &
"OUT_FILE AND THE OTHER IS MODE " &
"IN_FILE - 4" &
" - USE_ERROR RAISED ");
TXT_CLEANUP;
RAISE INCOMPLETE;
WHEN TEXT_IO.NAME_ERROR =>
NOT_APPLICABLE ("MULTIPLE INTERNAL FILES ARE NOT " &
"SUPPORTED WHEN ONE IS MODE " &
"OUT_FILE AND THE OTHER IS MODE " &
"IN_FILE - 4" &
" - NAME_ERROR RAISED ");
TXT_CLEANUP;
RAISE INCOMPLETE;
END; FLUSH (TXT_FILE_ONE);
CH := 'B';
GET (TXT_FILE_TWO, CH);
IF CH /= 'A' THEN
FAILED ("INCORRECT VALUE FOR GET - 5");
END IF;
BEGIN
RESET (TXT_FILE_ONE);
IF MODE (TXT_FILE_ONE) /= OUT_FILE THEN
FAILED ("FILE WAS NOT RESET - 6");
END IF;
IF MODE (TXT_FILE_TWO) /= IN_FILE THEN
FAILED ("RESETTING OF ONE INTERNAL FILE " &
"AFFECTED THE OTHER INTERNAL FILE - 7");
END IF;
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
NOT_APPLICABLE ("RESETTING OF EXTERNAL FILE FOR " &
"OUT_FILE MODE IS " &
" NOT SUPPORTED - 8");
TXT_CLEANUP;
RAISE INCOMPLETE;
END;
PUT (TXT_FILE_ONE, 'C');
PUT (TXT_FILE_ONE, 'D');
PUT (TXT_FILE_ONE, 'E');
CLOSE (TXT_FILE_ONE);
BEGIN
OPEN (TXT_FILE_ONE, IN_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("MULTIPLE INTERNAL FILES NOT " &
"SUPPORTED WHEN BOTH FILES HAVE " &
"IN_FILE MODE - 9");
RAISE INCOMPLETE;
END;
GET (TXT_FILE_ONE, CH);
GET (TXT_FILE_ONE, CH);
BEGIN
CLOSE (TXT_FILE_TWO);
OPEN (TXT_FILE_TWO, IN_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
FAILED ("MULTIPLE INTERNAL FILES SHOULD STILL " &
"BE ALLOWED - 10");
TXT_CLEANUP;
RAISE INCOMPLETE;
END;
BEGIN
GET (TXT_FILE_TWO, CH);
IF CH /= 'C' THEN
FAILED ("INCORRECT VALUE FOR GET OPERATION - 11");
END IF;
RESET (TXT_FILE_ONE);
GET (TXT_FILE_TWO, CH);
IF CH /= 'D' THEN
FAILED ("RESETTING INDEX OF ONE TEXT FILE " &
"RESETS THE OTHER ASSOCIATED FILE - 12");
END IF;
EXCEPTION
WHEN TEXT_IO.USE_ERROR =>
FAILED ("RESETTING SHOULD STILL BE SUPPORTED - 13");
TXT_CLEANUP;
RAISE INCOMPLETE;
END;
TXT_CLEANUP;
EXCEPTION
WHEN INCOMPLETE =>
NULL;
END;
RESULT;
END CE3115A;