-- Demonstrates:
--   declaring exceptions
--   declaring exceptions with messages
--   ada.exceptions.exception_name
--   ada.exceptions.exception_message

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 excep3  is 
    Invalid_Data: Exception;
    n: integer;
begin
    loop
        put("Enter an even number less than 1000, negative to quit:");
        get(n);
        if n >= 1_000 then
            raise Invalid_Data;
        elsif n mod 2 = 1 then
            raise Invalid_Data with "Number must be even!";
        end if;
        exit when n < 0;
        put_line(n'img);
    end loop;
exception
    when e: Invalid_Data =>
        put(exception_name(e));
        put(".  Data was not valid!  ");
        put(exception_message(e));
    when e: Others =>
        put("Something unexpected happened!  ");
        put(exception_name(e));
        put(exception_message(e));
end  excep3;