#adptwv      (* Pre-process with filter *)
(*
 
                PASCAL BASED MINI-LISP
 
  File:         PASN.RED - Trailer File
  ChangeDate:   5:39am  Saturday, 26 September 1981
  By:           M. L. Griss
                Add Hooks for CATCH/THROW
 
            All RIGHTS RESERVED
            COPYRIGHT (C) - 1981 - M. L. GRISS
            Computer Science Department
            University of Utah
 
            Do Not distribute with out written consent of M. L. Griss
 
*)


(* pasN.PAS ---- the last file to be appended, close CATCH, do init *)
BEGIN     (*  Body of Catch  *)
IF initphase=0 THEN  (* Kludge to get into scope of CATCH *)
    BEGIN init; initphase := 1; firstp; END
ELSE BEGIN
#p  initphase:=initphase+1;               (* ??? *)
    idspace[xthrowing].val := nilref;
    catch_stk:=st;                        (* Capture Stack *)
    catch_bstk:=idspace[xbstack].val;     (* Capture Bstack *)
    xeval;
#p    initphase:=initphase-1;            (* ??? *)
   (* Return Point *)
#adv 9999:
    IF idspace[xthrowing].val <> nilref
    THEN BEGIN
        st:=catch_stk;
        r[2]:=catch_bstk;
        xunbindto; (* return value, old stack *)
        END;
    END
END (* catch *);

BEGIN   (* Top Level *)
    initphase := 0;
    r[1] := nilref;
    Xcatch;
#d  break(tty);
end.
