anchor.diff:  
   read_expression(Prompt, Eval, St) ->
       Read = fun () ->
  -		   %% Ret = lfe_io:read(Prompt),
  -		   io:put_chars(Prompt),
  -		   Ret = lfe_io:read(),
  -		   exit(Ret)
  -	   end,
  +                   %% Ret = lfe_io:read(Prompt),
  +                   io:put_chars(Prompt),
  +                   Ret = lfe_io:read(),
  +                   exit(Ret)
  +           end,
       Rdr = spawn_link(Read),
       read_expression_1(Rdr, Eval, St).
   
   read_expression_1(Rdr, Eval, St) ->
  +    %% Eval is not doing anything here, so exits from it can only
  +    %% occur if it was terminated by a signal from another process.
       receive
  -	{'EXIT',Rdr,Ret} ->
  -	    {Ret,Eval};
  -	{'EXIT',Eval,{Reason,Stk}} ->
  -	    report_exception(error, {Reason,Stk}),
  -	    read_expression_1(Rdr, start_eval(St), St);
  -	{'EXIT',Eval,Reason} ->
  -	    report_exception(error, {Reason,[]}),
  -	    read_expression_1(Rdr, start_eval(St), St)
  +        {'EXIT',Rdr,Ret} ->
  +            {Ret,Eval};
  +        {'EXIT',Eval,{Reason,Stk}} ->
  +            report_exception(error, Reason, Stk),
  +            read_expression_1(Rdr, start_eval(St), St);
  +        {'EXIT',Eval,Reason} ->
  +            report_exception(exit, Reason, []),
  +            read_expression_1(Rdr, start_eval(St), St)
       end.
   
   %% new_state(ScriptName, Args [,Env]) -> State.
  
positive.code: 
  eval_form(Form, Shell, St0) ->
      try
  	Ce1 = add_vbinding('-', Form, St0#state.curr),
  	%% Macro expand and evaluate it.
  	{Value,St1} = eval_form(Form, St0#state{curr=Ce1}),
  	%% Print the result, but only to depth 30.
  	VS = lfe_io:prettyprint1(Value, 30),
  	io:requests([{put_chars,VS},nl]),
  	%% Update bindings.
  	Ce2 = update_shell_vars(Form, Value, St1#state.curr),
  	St2 = St1#state{curr=Ce2},
  	%% Return value and updated state.
  	Shell ! {eval_value,self(),Value,St2},
  	St2
      catch
  	exit:normal -> exit(normal);
  	Class:Reason ->
  	    Stk = erlang:get_stacktrace(),
  	    %% We don't want the ERROR REPORT generated by the
  	    %% emulator. Note: exit(kill) needs nothing special.
  	    %% {links,Ps} = process_info(self(), links),
  	    %% E = nocatch(Class, {Reason,Stk}),
  	    %% foreach(fun (P) -> exit(P, E) end, Ps -- [Shell]),
  	    %% Shell ! {eval_exit,self(),Class,{Reason,Stk}},
  	    %% exit(normal)
  	    E = nocatch(Class, {Reason,Stk}),
  	    exit(E)
      end.
  
  nocatch(throw, {Term,Stack}) ->
  
negative.code: 
  start_eval(St) ->
      Self = self(),
      spawn_link(fun () -> eval_init(Self, St) end).
  
  eval_init(Shell, St) ->
      eval_loop(Shell, St).
  
  eval_loop(Shell, St0) ->
      receive
          {eval_expr,Shell,Form} ->
              St1 = eval_form(Form, Shell, St0),
              eval_loop(Shell, St1)
      end.
  
  %% eval_form(Form, ShellPid, State) -> State.
  