-- Return can be used from anywhere in a main routine to exit a program
-- Return always returns to the caller.
-- Not recommended!

with ada.integer_text_io; use ada.integer_text_io; 
with ada.text_io; use ada.text_io; 
 
procedure exit_anywhere  is 
    procedure p(n: integer) is
    begin
        if n < 0 then
            return;
        else
            put("N is positive.  ");
        end if;
    end p;

    n: Integer;
begin
    loop
        put("Enter a positive even integer, negative to quit: ");
        get(n);
        p(n);
        exit when n < 0;  -- Normal exit from loop

        if n mod 2 = 1 then
            put_line("Number must be even!  Exiting Program");
            return;  -- Error - return from program
        elsif n > 1_000 then
            put_line("Number must be < 1,000!  Exiting Program");
            return;  -- Error - return from program
        else
            put_line("That's a valid number!");
        end if;
        put_line(n'img);
    end loop;

end  exit_anywhere;