<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <font face="Helvetica, Arial, sans-serif">Dennis added setjmp() and
      longjmp() so the shell could handle errors in a reasonable way.<br>
      There are two places where setjmp was used in the original shell
      (7th edition) code as I recall.  Both at the top level<br>
      in main.c.<br>
      <br>
      The idea came from Algol68 but I do not know where it was
      originally invented.  longjmp() was used in the "exitsh"<br>
      function that got called on the exit command, default trap routine
      and a fault with no trap set.<br>
      <br>
      It was also used when executing a subshell to avoid a fork and
      exec.  In this case the setjmp() was at top level<br>
      in the initial sh setup.<br>
      <br>
      Hope this makes sense.  But these were two different uses.  One
      for error recovery and one to reset the execution environment<br>
      back to initial state.<br>
      <br>
      Steve<br>
    </font>
  </body>
</html>