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;