Exception Handling

If my program is executing code many layers deep in a nested procedure
calls, and something goes wrong, I want to transfer control to a
specific place in the mainline.  In Basic, this is done via the
ON ERROR GOTO construct, and in C it is done via SETJUMP and LONGJUMP.
How can it be done in Turbo Pascal?

Ideally I'd like to define a procedure called ABORT which I could call
anywhere in my code.  When invoked, it would return control, not to the
line from which it was called, but to a known place in the mainline.

For example, my mainline might look like this:

begin
  Initialize;
  while true do begin
    GetUserInput;
    Proc1;
    Proc2;
    Proc3;
    ...
    PrintResults;
  end;
end.

In this example, Proc1 might look like this:

procedure Proc1;
  begin
    SubProc1;
    SubProc2;
    SubProc3;
    ...
  end;

with Proc2 and Proc3 similarly defined.  OK, now let's suppose
something goes wrong while executing SubProc1.  I would like to call
ABORT which would print an error message and then return control to the
mainline in such a way that the next iteration of the "while" loop
begins immediately with the next GetUserInput.

Of course, I could convert all of my procedures into functions, and
then explicitly test return codes after each one returns, but I'd
prefer to not clutter and complicate my code with all this testing.
I know of the following two statements:
  Halt - Returns all the way out to the operating system (too far)
  Exit - Returns to the calling procedure (just one layer)
Are there any more options?

BTW I am using Turbo Pascal / Borland Pascal 7.01.

     - Rich