diff --git a/changelog b/changelog
index df5f255..f6e4cb8 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090825 tpd src/axiom-website/patches.html 20090826.03.tpd.patch
+20090825 tpd src/interp/Makefile move server.boot to server.lisp
+20090825 tpd src/interp/server.lisp added, rewritten from server.boot
+20090825 tpd src/interp/server.boot removed, rewritten to server.lisp
 20090825 tpd src/axiom-website/patches.html 20090826.02.tpd.patch
 20090825 tpd src/interp/Makefile move serror.boot to serror.lisp
 20090825 tpd src/interp/serror.lisp added, rewritten from serror.boot
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index e6d2760..34b199f 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1900,5 +1900,7 @@ rulesets.lisp rewrite from boot to lisp<br/>
 scan.lisp rewrite from boot to lisp<br/>
 <a href="patches/20090826.02.tpd.patch">20090826.02.tpd.patch</a>
 serror.lisp rewrite from boot to lisp<br/>
+<a href="patches/20090826.03.tpd.patch">20090826.03.tpd.patch</a>
+server.lisp rewrite from boot to lisp<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index d47ab38..9c8c4be 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -3910,45 +3910,26 @@ ${MID}/rulesets.lisp: ${IN}/rulesets.lisp.pamphlet
 
 @
 
-\subsection{server.boot}
+\subsection{server.lisp}
 <<server.o (OUT from MID)>>=
-${OUT}/server.${O}: ${MID}/server.clisp 
-	@ echo 390 making ${OUT}/server.${O} from ${MID}/server.clisp
-	@ (cd ${MID} ; \
+${OUT}/server.${O}: ${MID}/server.lisp
+	@ echo 136 making ${OUT}/server.${O} from ${MID}/server.lisp
+	@ ( cd ${MID} ; \
 	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/server.clisp"' \
-             ':output-file "${OUT}/server.${O}") (${BYE}))' |  ${DEPSYS} ; \
+	   echo '(progn  (compile-file "${MID}/server.lisp"' \
+             ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} ; \
 	  else \
-	   echo '(progn  (compile-file "${MID}/server.clisp"' \
-             ':output-file "${OUT}/server.${O}") (${BYE}))' |  ${DEPSYS} \
+	   echo '(progn  (compile-file "${MID}/server.lisp"' \
+             ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} \
              >${TMP}/trace ; \
 	  fi )
 
 @
-<<server.clisp (MID from IN)>>=
-${MID}/server.clisp: ${IN}/server.boot.pamphlet
-	@ echo 391 making ${MID}/server.clisp from ${IN}/server.boot.pamphlet
+<<server.lisp (MID from IN)>>=
+${MID}/server.lisp: ${IN}/server.lisp.pamphlet
+	@ echo 137 making ${MID}/server.lisp from ${IN}/server.lisp.pamphlet
 	@ (cd ${MID} ; \
-	  ${TANGLE} ${IN}/server.boot.pamphlet >server.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "server.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-	  else \
-	   echo '(progn (boottran::boottocl "server.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm server.boot )
-
-@
-<<server.boot.dvi (DOC from IN)>>=
-${DOC}/server.boot.dvi: ${IN}/server.boot.pamphlet 
-	@echo 392 making ${DOC}/server.boot.dvi from ${IN}/server.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/server.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} server.boot ; \
-	rm -f ${DOC}/server.boot.pamphlet ; \
-	rm -f ${DOC}/server.boot.tex ; \
-	rm -f ${DOC}/server.boot )
+	   ${TANGLE} ${IN}/server.lisp.pamphlet >server.lisp )
 
 @
 
@@ -6085,8 +6066,7 @@ clean:
 <<serror.lisp (MID from IN)>>
 
 <<server.o (OUT from MID)>>
-<<server.clisp (MID from IN)>>
-<<server.boot.dvi (DOC from IN)>>
+<<server.lisp (MID from IN)>>
 
 <<sfsfun.o (OUT from MID)>>
 <<sfsfun.clisp (MID from IN)>>
diff --git a/src/interp/server.boot.pamphlet b/src/interp/server.boot.pamphlet
deleted file mode 100644
index b243c3e..0000000
--- a/src/interp/server.boot.pamphlet
+++ /dev/null
@@ -1,177 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp server.boot}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{License}
-<<license>>=
--- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--- All rights reserved.
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions are
--- met:
---
---     - Redistributions of source code must retain the above copyright
---       notice, this list of conditions and the following disclaimer.
---
---     - Redistributions in binary form must reproduce the above copyright
---       notice, this list of conditions and the following disclaimer in
---       the documentation and/or other materials provided with the
---       distribution.
---
---     - Neither the name of The Numerical ALgorithms Group Ltd. nor the
---       names of its contributors may be used to endorse or promote products
---       derived from this software without specific prior written permission.
---
--- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-@
-<<*>>=
-<<license>>
-
--- Scratchpad-II server
-
--- Assoc list of interpreter frame names and unique integer identifiers
-
-parseAndInterpret str ==
-  $InteractiveMode :fluid := true
-  $BOOT: fluid := NIL
-  $SPAD: fluid := true
-  $e:fluid := $InteractiveFrame
-  $useNewParser =>
-    ncParseAndInterpretString str
-  oldParseAndInterpret str
-
-oldParseAndInterpret str ==
-  tree := string2SpadTree str
-  tree => processInteractive(parseTransform postTransform tree, NIL)
-  NIL
-
-executeQuietCommand() ==
-  $QuietCommand: fluid := true
-  stringBuf := MAKE_-STRING 512
-  sockGetString($MenuServer, stringBuf, 512)
-  CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
-    parseAndInterpret stringBuf)))
-
--- Includued for compatability with old-parser systems
-serverLoop() ==
-  IN_-STREAM: fluid := CURINSTREAM
-  _*EOF_*: fluid := NIL
-  while not $EndServerSession and not _*EOF_* repeat
-    if $Prompt then (PRINC MKPROMPT(); FINISH_-OUTPUT())
-    $Prompt := NIL
-    action := serverSwitch()
-    action = $CallInterp =>
-      CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
-        parseAndInterpret READ_-LINE(CURINSTREAM) )))
-      PRINC MKPROMPT()
-      FINISH_-OUTPUT()
-      sockSendInt($SessionManager, $EndOfOutput)
-    action = $CreateFrame =>
-      frameName := GENTEMP('"frame")
-      addNewInterpreterFrame(frameName)
-      $frameAlist := [[$frameNumber,:frameName], :$frameAlist]
-      $currentFrameNum := $frameNumber
-      sockSendInt($SessionManager, $frameNumber)
-      $frameNumber := $frameNumber + 1
-      sockSendString($SessionManager, MKPROMPT())
-    action = $SwitchFrames =>
-      $currentFrameNum := sockGetInt($SessionManager)
-      currentFrame := LASSOC($currentFrameNum, $frameAlist)
-      changeToNamedInterpreterFrame currentFrame
-    action = $EndSession =>
-      $EndServerSession := true
-    action = $LispCommand =>
-      stringBuf := MAKE_-STRING 512
-      sockGetString($MenuServer, stringBuf, 512)
-      form := unescapeStringsInForm READ_-FROM_-STRING stringBuf
-      EVAL form
-    action = $QuietSpadCommand =>
-      executeQuietCommand()
-    action = $SpadCommand =>
-      stringBuf := MAKE_-STRING 512
-      sockGetString($MenuServer, stringBuf, 512)
-      CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
-        parseAndInterpret stringBuf)))
-      PRINC MKPROMPT()
-      FINISH_-OUTPUT()
-      sockSendInt($SessionManager, $EndOfOutput)
-    NIL
-  if _*EOF_* then $Prompt := true
-  NIL
-
-parseAndEvalToHypertex str ==
-  lines := parseAndEvalToStringForHypertex str
-  len := LENGTH lines
-  sockSendInt($MenuServer, len)
-  for s in lines repeat
-    sockSendString($MenuServer, s)
-
-parseAndEvalToString str ==
-  $collectOutput:local := true
-  $outputLines: local := nil
-  $IOindex: local := nil
-  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
-  v = 'restart => ['"error"]
-  NREVERSE $outputLines
-
-parseAndEvalToStringForHypertex str ==
-  $collectOutput:local := true
-  $outputLines: local := nil
-  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
-  v = 'restart => ['"error"]
-  NREVERSE $outputLines
-
-parseAndEvalToStringEqNum str ==
-  $collectOutput:local := true
-  $outputLines: local := nil
-  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
-  v = 'restart => ['"error"]
-  NREVERSE $outputLines
-
-parseAndInterpToString str ==
-  v := applyWithOutputToString('parseAndEvalStr, [str])
-  breakIntoLines CDR v
-
-parseAndEvalStr string ==
-  $InteractiveMode :fluid := true
-  $BOOT: fluid := NIL
-  $SPAD: fluid := true
-  $e:fluid := $InteractiveFrame
-  parseAndEvalStr1 string
-
-parseAndEvalStr1 string ==
-  string.0 = char '")" =>
-    doSystemCommand SUBSEQ(string, 1)
-  processInteractive(ncParseFromString string, NIL)
-
-protectedEVAL x ==
-  error := true
-  val := NIL
-  UNWIND_-PROTECT((val := EVAL x; error := NIL),
-                   error => (resetStackLimits(); sendHTErrorSignal()))
-  val
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
diff --git a/src/interp/server.lisp.pamphlet b/src/interp/server.lisp.pamphlet
new file mode 100644
index 0000000..cebf396
--- /dev/null
+++ b/src/interp/server.lisp.pamphlet
@@ -0,0 +1,358 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/interp server.lisp}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+
+(IN-PACKAGE "BOOT" )
+
+;-- Scratchpad-II server
+;-- Assoc list of interpreter frame names and unique integer identifiers
+;parseAndInterpret str ==
+;  $InteractiveMode :fluid := true
+;  $BOOT: fluid := NIL
+;  $SPAD: fluid := true
+;  $e:fluid := $InteractiveFrame
+;  $useNewParser =>
+;    ncParseAndInterpretString str
+;  oldParseAndInterpret str
+
+(DEFUN |parseAndInterpret| (|str|)
+  (PROG (|$InteractiveMode| $BOOT $SPAD |$e|)
+    (DECLARE (SPECIAL |$InteractiveMode| $BOOT $SPAD |$e|))
+    (RETURN
+      (PROGN
+        (SPADLET |$InteractiveMode| 'T)
+        (SPADLET $BOOT NIL)
+        (SPADLET $SPAD 'T)
+        (SPADLET |$e| |$InteractiveFrame|)
+        (COND
+          (|$useNewParser| (|ncParseAndInterpretString| |str|))
+          ('T (|oldParseAndInterpret| |str|)))))))
+
+;oldParseAndInterpret str ==
+;  tree := string2SpadTree str
+;  tree => processInteractive(parseTransform postTransform tree, NIL)
+;  NIL
+
+(DEFUN |oldParseAndInterpret| (|str|)
+  (PROG (|tree|)
+    (RETURN
+      (PROGN
+        (SPADLET |tree| (|string2SpadTree| |str|))
+        (COND
+          (|tree| (|processInteractive|
+                      (|parseTransform| (|postTransform| |tree|)) NIL))
+          ('T NIL))))))
+
+;executeQuietCommand() ==
+;  $QuietCommand: fluid := true
+;  stringBuf := MAKE_-STRING 512
+;  sockGetString($MenuServer, stringBuf, 512)
+;  CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
+;    parseAndInterpret stringBuf)))
+
+(DEFUN |executeQuietCommand| ()
+  (PROG (|$QuietCommand| |stringBuf|)
+    (DECLARE (SPECIAL |$QuietCommand|))
+    (RETURN
+      (PROGN
+        (SPADLET |$QuietCommand| 'T)
+        (SPADLET |stringBuf| (MAKE-STRING 512))
+        (|sockGetString| |$MenuServer| |stringBuf| 512)
+        (CATCH '|coerceFailure|
+          (CATCH '|top_level|
+            (CATCH 'SPAD_READER (|parseAndInterpret| |stringBuf|))))))))
+
+;-- Includued for compatability with old-parser systems
+;serverLoop() ==
+;  IN_-STREAM: fluid := CURINSTREAM
+;  _*EOF_*: fluid := NIL
+;  while not $EndServerSession and not _*EOF_* repeat
+;    if $Prompt then (PRINC MKPROMPT(); FINISH_-OUTPUT())
+;    $Prompt := NIL
+;    action := serverSwitch()
+;    action = $CallInterp =>
+;      CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
+;        parseAndInterpret READ_-LINE(CURINSTREAM) )))
+;      PRINC MKPROMPT()
+;      FINISH_-OUTPUT()
+;      sockSendInt($SessionManager, $EndOfOutput)
+;    action = $CreateFrame =>
+;      frameName := GENTEMP('"frame")
+;      addNewInterpreterFrame(frameName)
+;      $frameAlist := [[$frameNumber,:frameName], :$frameAlist]
+;      $currentFrameNum := $frameNumber
+;      sockSendInt($SessionManager, $frameNumber)
+;      $frameNumber := $frameNumber + 1
+;      sockSendString($SessionManager, MKPROMPT())
+;    action = $SwitchFrames =>
+;      $currentFrameNum := sockGetInt($SessionManager)
+;      currentFrame := LASSOC($currentFrameNum, $frameAlist)
+;      changeToNamedInterpreterFrame currentFrame
+;    action = $EndSession =>
+;      $EndServerSession := true
+;    action = $LispCommand =>
+;      stringBuf := MAKE_-STRING 512
+;      sockGetString($MenuServer, stringBuf, 512)
+;      form := unescapeStringsInForm READ_-FROM_-STRING stringBuf
+;      EVAL form
+;    action = $QuietSpadCommand =>
+;      executeQuietCommand()
+;    action = $SpadCommand =>
+;      stringBuf := MAKE_-STRING 512
+;      sockGetString($MenuServer, stringBuf, 512)
+;      CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
+;        parseAndInterpret stringBuf)))
+;      PRINC MKPROMPT()
+;      FINISH_-OUTPUT()
+;      sockSendInt($SessionManager, $EndOfOutput)
+;    NIL
+;  if _*EOF_* then $Prompt := true
+;  NIL
+
+(DEFUN |serverLoop| ()
+  (PROG (IN-STREAM *EOF* |action| |frameName| |currentFrame| |form|
+            |stringBuf|)
+    (DECLARE (SPECIAL IN-STREAM *EOF*))
+    (RETURN
+      (SEQ (PROGN
+             (SPADLET IN-STREAM CURINSTREAM)
+             (SPADLET *EOF* NIL)
+             (DO ()
+                 ((NULL (AND (NULL |$EndServerSession|) (NULL *EOF*)))
+                  NIL)
+               (SEQ (EXIT (PROGN
+                            (COND
+                              (|$Prompt| (PRINC (MKPROMPT))
+                                  (FINISH-OUTPUT)))
+                            (SPADLET |$Prompt| NIL)
+                            (SPADLET |action| (|serverSwitch|))
+                            (COND
+                              ((BOOT-EQUAL |action| |$CallInterp|)
+                               (CATCH '|coerceFailure|
+                                 (CATCH '|top_level|
+                                   (CATCH 'SPAD_READER
+                                     (|parseAndInterpret|
+                                      (|read-line| CURINSTREAM)))))
+                               (PRINC (MKPROMPT)) (FINISH-OUTPUT)
+                               (|sockSendInt| |$SessionManager|
+                                   |$EndOfOutput|))
+                              ((BOOT-EQUAL |action| |$CreateFrame|)
+                               (SPADLET |frameName|
+                                        (GENTEMP (MAKESTRING "frame")))
+                               (|addNewInterpreterFrame| |frameName|)
+                               (SPADLET |$frameAlist|
+                                        (CONS
+                                         (CONS |$frameNumber|
+                                          |frameName|)
+                                         |$frameAlist|))
+                               (SPADLET |$currentFrameNum|
+                                        |$frameNumber|)
+                               (|sockSendInt| |$SessionManager|
+                                   |$frameNumber|)
+                               (SPADLET |$frameNumber|
+                                        (PLUS |$frameNumber| 1))
+                               (|sockSendString| |$SessionManager|
+                                   (MKPROMPT)))
+                              ((BOOT-EQUAL |action| |$SwitchFrames|)
+                               (SPADLET |$currentFrameNum|
+                                        (|sockGetInt|
+                                         |$SessionManager|))
+                               (SPADLET |currentFrame|
+                                        (LASSOC |$currentFrameNum|
+                                         |$frameAlist|))
+                               (|changeToNamedInterpreterFrame|
+                                   |currentFrame|))
+                              ((BOOT-EQUAL |action| |$EndSession|)
+                               (SPADLET |$EndServerSession| 'T))
+                              ((BOOT-EQUAL |action| |$LispCommand|)
+                               (SPADLET |stringBuf| (MAKE-STRING 512))
+                               (|sockGetString| |$MenuServer|
+                                   |stringBuf| 512)
+                               (SPADLET |form|
+                                        (|unescapeStringsInForm|
+                                         (READ-FROM-STRING |stringBuf|)))
+                               (EVAL |form|))
+                              ((BOOT-EQUAL |action|
+                                   |$QuietSpadCommand|)
+                               (|executeQuietCommand|))
+                              ((BOOT-EQUAL |action| |$SpadCommand|)
+                               (SPADLET |stringBuf| (MAKE-STRING 512))
+                               (|sockGetString| |$MenuServer|
+                                   |stringBuf| 512)
+                               (CATCH '|coerceFailure|
+                                 (CATCH '|top_level|
+                                   (CATCH 'SPAD_READER
+                                     (|parseAndInterpret| |stringBuf|))))
+                               (PRINC (MKPROMPT)) (FINISH-OUTPUT)
+                               (|sockSendInt| |$SessionManager|
+                                   |$EndOfOutput|))
+                              ('T NIL))))))
+             (COND (*EOF* (SPADLET |$Prompt| 'T)))
+             NIL)))))
+
+;parseAndEvalToHypertex str ==
+;  lines := parseAndEvalToStringForHypertex str
+;  len := LENGTH lines
+;  sockSendInt($MenuServer, len)
+;  for s in lines repeat
+;    sockSendString($MenuServer, s)
+
+(DEFUN |parseAndEvalToHypertex| (|str|)
+  (PROG (|lines| |len|)
+    (RETURN
+      (SEQ (PROGN
+             (SPADLET |lines|
+                      (|parseAndEvalToStringForHypertex| |str|))
+             (SPADLET |len| (LENGTH |lines|))
+             (|sockSendInt| |$MenuServer| |len|)
+             (DO ((G166130 |lines| (CDR G166130)) (|s| NIL))
+                 ((OR (ATOM G166130)
+                      (PROGN (SETQ |s| (CAR G166130)) NIL))
+                  NIL)
+               (SEQ (EXIT (|sockSendString| |$MenuServer| |s|)))))))))
+
+;parseAndEvalToString str ==
+;  $collectOutput:local := true
+;  $outputLines: local := nil
+;  $IOindex: local := nil
+;  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
+;  v = 'restart => ['"error"]
+;  NREVERSE $outputLines
+
+(DEFUN |parseAndEvalToString| (|str|)
+  (PROG (|$collectOutput| |$outputLines| |$IOindex| |v|)
+    (DECLARE (SPECIAL |$collectOutput| |$outputLines| |$IOindex|))
+    (RETURN
+      (PROGN
+        (SPADLET |$collectOutput| 'T)
+        (SPADLET |$outputLines| NIL)
+        (SPADLET |$IOindex| NIL)
+        (SPADLET |v|
+                 (CATCH 'SPAD_READER
+                   (CATCH '|top_level| (|parseAndEvalStr| |str|))))
+        (COND
+          ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL))
+          ('T (NREVERSE |$outputLines|)))))))
+
+;parseAndEvalToStringForHypertex str ==
+;  $collectOutput:local := true
+;  $outputLines: local := nil
+;  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
+;  v = 'restart => ['"error"]
+;  NREVERSE $outputLines
+
+(DEFUN |parseAndEvalToStringForHypertex| (|str|)
+  (PROG (|$collectOutput| |$outputLines| |v|)
+    (DECLARE (SPECIAL |$collectOutput| |$outputLines|))
+    (RETURN
+      (PROGN
+        (SPADLET |$collectOutput| 'T)
+        (SPADLET |$outputLines| NIL)
+        (SPADLET |v|
+                 (CATCH 'SPAD_READER
+                   (CATCH '|top_level| (|parseAndEvalStr| |str|))))
+        (COND
+          ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL))
+          ('T (NREVERSE |$outputLines|)))))))
+
+;parseAndEvalToStringEqNum str ==
+;  $collectOutput:local := true
+;  $outputLines: local := nil
+;  v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str))
+;  v = 'restart => ['"error"]
+;  NREVERSE $outputLines
+
+(DEFUN |parseAndEvalToStringEqNum| (|str|)
+  (PROG (|$collectOutput| |$outputLines| |v|)
+    (DECLARE (SPECIAL |$collectOutput| |$outputLines|))
+    (RETURN
+      (PROGN
+        (SPADLET |$collectOutput| 'T)
+        (SPADLET |$outputLines| NIL)
+        (SPADLET |v|
+                 (CATCH 'SPAD_READER
+                   (CATCH '|top_level| (|parseAndEvalStr| |str|))))
+        (COND
+          ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL))
+          ('T (NREVERSE |$outputLines|)))))))
+
+;parseAndInterpToString str ==
+;  v := applyWithOutputToString('parseAndEvalStr, [str])
+;  breakIntoLines CDR v
+
+(DEFUN |parseAndInterpToString| (|str|)
+  (PROG (|v|)
+    (RETURN
+      (PROGN
+        (SPADLET |v|
+                 (|applyWithOutputToString| '|parseAndEvalStr|
+                     (CONS |str| NIL)))
+        (|breakIntoLines| (CDR |v|))))))
+
+;parseAndEvalStr string ==
+;  $InteractiveMode :fluid := true
+;  $BOOT: fluid := NIL
+;  $SPAD: fluid := true
+;  $e:fluid := $InteractiveFrame
+;  parseAndEvalStr1 string
+
+(DEFUN |parseAndEvalStr| (|string|)
+  (PROG (|$InteractiveMode| $BOOT $SPAD |$e|)
+    (DECLARE (SPECIAL |$InteractiveMode| $BOOT $SPAD |$e|))
+    (RETURN
+      (PROGN
+        (SPADLET |$InteractiveMode| 'T)
+        (SPADLET $BOOT NIL)
+        (SPADLET $SPAD 'T)
+        (SPADLET |$e| |$InteractiveFrame|)
+        (|parseAndEvalStr1| |string|)))))
+
+;parseAndEvalStr1 string ==
+;  string.0 = char '")" =>
+;    doSystemCommand SUBSEQ(string, 1)
+;  processInteractive(ncParseFromString string, NIL)
+
+(DEFUN |parseAndEvalStr1| (|string|)
+  (COND
+    ((BOOT-EQUAL (ELT |string| 0) (|char| (MAKESTRING ")")))
+     (|doSystemCommand| (SUBSEQ |string| 1)))
+    ('T (|processInteractive| (|ncParseFromString| |string|) NIL))))
+
+;protectedEVAL x ==
+;  error := true
+;  val := NIL
+;  UNWIND_-PROTECT((val := EVAL x; error := NIL),
+;                   error => (resetStackLimits(); sendHTErrorSignal()))
+;  val
+
+(DEFUN |protectedEVAL| (|x|)
+  (PROG (|val| |error|)
+    (RETURN
+      (SEQ (PROGN
+             (SPADLET |error| 'T)
+             (SPADLET |val| NIL)
+             (SEQ (UNWIND-PROTECT
+                    (PROGN
+                      (SPADLET |val| (EVAL |x|))
+                      (SPADLET |error| NIL))
+                    (COND
+                      (|error| (EXIT (PROGN
+                                       (|resetStackLimits|)
+                                       (|sendHTErrorSignal|))))))
+                  (EXIT |val|)))))))
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
