-- Demonstrates: -- An exception can be raised from an exception handler with ada.text_io; use ada.text_io; with ada.integer_text_io; use ada.integer_text_io; with ada.exceptions; use ada.exceptions; procedure excep4 is Invalid_Data: Exception; subtype Small_Even is Integer range Integer'First .. 1_000 with dynamic_predicate => Small_Even mod 2 = 0; n: Small_Even; begin loop put("Enter an even number less than 1000, negative to quit:"); begin get(n); exception when data_error => put_line("Must enter a number"); raise Invalid_Data; when constraint_error => put_line("Number must be even and less than 1,000"); raise Invalid_Data; end; exit when n < 0; put_line(n'img); end loop; exception when e: Invalid_Data => put("Program halted because of invalid data."); when e: Others => put("Something unexpected happened! "); put(exception_name(e)); put(exception_message(e)); end excep4;