Figure 25.
Form_Solution.
---------------------------------------------------------
-- The right way to solve the problem, using a local
-- exception handler and a function that returns
-- additional error information.
with SCROLL_TERMINAL;
with FORM_TERMINAL; use FORM_TERMINAL;
procedure Form_Solution is
NAME : string(1..30);
ADDRESS : string(1..40);
CITY_STATE_ZIP : string(1..40);
procedure get(FIRST_FIELD : Field_names;
NAME, ADDRESS, CITY : out string) is
DOESNT_MATTER : boolean;
begin
Update(CURSOR_AT => FIRST_FIELD,
NEXT => DOESNT_MATTER);
get("Name field ", NAME);
get("Address field ", ADDRESS);
get("City field ", CITY_STATE_ZIP);
exception
when NEEDS_HELP =>
SCROLL_TERMINAL.new_line(10);
if Confusing_Field = "NAME FIELD " then
SCROLL_TERMINAL.put_line
("Don't you even know your own name?");
elsif Confusing_Field = "ADDRESS FIELD " then
SCROLL_TERMINAL.put_line
("What is your street or P.O Box?");
elsif Confusing_Field = "CITY FIELD " then
SCROLL_TERMINAL.put_line
("Please enter City, State, and Zip code.");
end if;
SCROLL_TERMINAL.Wait_for_User;
get(Confusing_Field, NAME, ADDRESS, CITY_STATE_ZIP);
end get;
begin
Read("ADDRESS.DAT");
get("Name field ",NAME, ADDRESS,
CITY_STATE_ZIP);
SCROLL_TERMINAL.New_Line(10);
SCROLL_TERMINAL.put_line("NAME = " & NAME);
SCROLL_TERMINAL.put_line("ADDRESS = " & ADDRESS);
SCROLL_TERMINAL.put_line("CITY = " & CITY_STATE_ZIP);
end Form_Solution;