diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index b090abe..fccc9a7 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -399,12 +399,10 @@ says that such files should not be created.  The default is
 {\tt )nolibrary} for the new Aldor compiler and for the old system 
 compiler are completely different.
 
-The {\tt )vartrace} option causes the compiler to generate
-extra code for the constructor to support conditional tracing of
-variable assignments. (see 
-\ref{ugSysCmdtrace} on page~\pageref{ugSysCmdtrace}). Without
-this option, this code is suppressed and one cannot use
-the {\tt )vars} option for the trace command.
+The {\tt )vartrace} option causes the compiler to generate extra code
+for the constructor to support conditional tracing of variable
+assignments. Without this option, this code is suppressed and one
+cannot use the {\tt )vars} option for the trace command.
 
 The {\tt )constructor} option is used to
 specify a particular constructor to compile.
@@ -427,6 +425,200 @@ the spad compiler does when it encounters an error.
 should stop at the first error.
 The value of the {\tt )set break} variable then controls what happens.
 
+\section{Operator Precedence Table Initialization} 
+\begin{verbatim}
+; PURPOSE: This file sets up properties which are used by the Boot lexical
+;          analyzer for bottom-up recognition of operators.  Also certain
+;          other character-class definitions are included, as well as
+;          table accessing functions.
+;
+; ORGANIZATION: Each section is organized in terms of Creation and Access code.
+;
+;               1. Led and Nud Tables
+;               2. GLIPH  Table
+;               3. RENAMETOK Table
+;               4. GENERIC Table
+;               5. Character syntax class predicates
+\end{verbatim}
+\subsection{LED and NUD Tables}
+\begin{verbatim}
+; **** 1. LED and NUD Tables
+ 
+; ** TABLE PURPOSE
+ 
+; Led and Nud have to do with operators. An operator with a Led property takes
+; an operand on its left (infix/suffix operator).
+ 
+; An operator with a Nud takes no operand on its left (prefix/nilfix).
+; Some have both (e.g. - ).  This terminology is from the Pratt parser.
+; The translator for Scratchpad II is a modification of the Pratt parser which
+; branches to special handlers when it is most convenient and practical to
+; do so (Pratt's scheme cannot handle local contexts very easily).
+ 
+; Both LEDs and NUDs have right and left binding powers.  This is meaningful 
+; for prefix and infix operators.  These powers are stored as the values of 
+; the LED and NUD properties of an atom, if the atom has such a property. 
+; The format is:
+ 
+;       <Operator Left-Binding-Power  Right-Binding-Power <Special-Handler>>
+ 
+; where the Special-Handler is the name of a function to be evaluated when that
+; keyword is encountered.
+ 
+; The default values of Left and Right Binding-Power are NIL.  NIL is a 
+; legitimate value signifying no precedence.  If the Special-Handler is NIL,
+; this is just an ordinary operator (as opposed to a surfix operator like 
+; if-then-else).
+;
+; The Nud value gives the precedence when the operator is a prefix op.
+; The Led value gives the precedence when the operator is an infix op.
+; Each op has 2 priorities, left and right. 
+; If the right priority of the first is greater than or equal to the
+; left priority of the second then collect the second operator into
+; the right argument of the first operator. 
+ 
+\end{verbatim}
+<<LEDNUDTables>>=
+; ** TABLE CREATION
+ 
+(defun makenewop (x y) (makeop x y '|PARSE-NewKEY|))
+ 
+(defun makeop (x y keyname)
+  (if (or (not (cdr x)) (numberp (second x)))
+      (setq x (cons (first x) x)))
+  (if (and (alpha-char-p (elt (stringimage (first x)) 0))
+           (not (member (first x) (eval keyname))))
+      (set keyname (cons (first x) (eval keyname))))
+  (makeprop (first x) y x)
+  (second x))
+ 
+(setq |PARSE-NewKEY| nil) ;;list of keywords
+ 
+(mapcar #'(LAMBDA(J) (MAKENEWOP J '|Led|))
+        '((* 800 801)   (|rem| 800 801)   (|mod| 800 801)
+          (|quo| 800 801)   (|div| 800 801)
+          (/ 800 801)    (** 900 901)  (^ 900 901)
+          (|exquo| 800 801) (+ 700 701)
+          (\- 700 701)    (\-\> 1001 1002)  (\<\- 1001 1002)
+          (\: 996 997)    (\:\: 996 997)
+          (\@ 996 997)    (|pretend| 995 996)
+          (\.)            (\! \! 1002 1001)
+          (\, 110 111)
+          (\; 81 82 (|PARSE-SemiColon|))
+          (\< 400 400)    (\> 400 400)
+          (\<\< 400 400)  (\>\> 400 400)
+          (\<= 400 400)   (\>= 400 400)
+          (= 400 400)     (^= 400 400)
+          (\~= 400 400)
+          (|in| 400 400)    (|case| 400 400)
+          (|add| 400 120)   (|with| 2000 400 (|PARSE-InfixWith|))
+          (|has| 400 400)
+          (|where| 121 104)     ; must be 121 for SPAD, 126 for boot--> nboot
+          (|when| 112 190)
+          (|otherwise| 119 190 (|PARSE-Suffix|))
+          (|is| 400 400)    (|isnt| 400 400)
+          (|and| 250 251)   (|or| 200 201)
+          (/\\ 250 251)   (\\/ 200 201)
+          (\.\. SEGMENT 401 699 (|PARSE-Seg|))
+          (=\> 123 103)
+          (+-\> 995 112)
+          (== DEF 122 121)
+          (==\> MDEF 122 121)
+          (\| 108 111)                          ;was 190 190
+          (\:- LETD 125 124) (\:= LET 125 124)))
+ 
+(mapcar #'(LAMBDA (J) (MAKENEWOP J `|Nud|))
+        '((|for| 130 350 (|PARSE-Loop|))
+          (|while| 130 190 (|PARSE-Loop|))
+          (|until| 130 190 (|PARSE-Loop|))
+          (|repeat| 130 190 (|PARSE-Loop|))
+          (|import| 120 0 (|PARSE-Import|) )
+          (|unless|)
+          (|add| 900 120)
+          (|with| 1000 300 (|PARSE-With|))
+          (|has| 400 400)
+          (\- 701 700)  ; right-prec. wants to be -1 + left-prec
+;;        (\+ 701 700)
+          (\# 999 998)
+          (\! 1002 1001)
+          (\' 999 999 (|PARSE-Data|))
+          (\<\< 122 120 (|PARSE-LabelExpr|))
+          (\>\>)
+          (^ 260 259 NIL)
+          (\-\> 1001 1002)
+          (\: 194 195)
+          (|not| 260 259 NIL)
+          (\~ 260 259 nil)
+          (\= 400 700)
+          (|return| 202 201 (|PARSE-Return|))
+          (|leave| 202 201 (|PARSE-Leave|))
+          (|exit| 202 201 (|PARSE-Exit|))
+          (|from|)
+          (|iterate|)
+          (|yield|)
+          (|if| 130 0 (|PARSE-Conditional|))    ; was 130
+          (\| 0 190)
+          (|suchthat|)
+          (|then| 0 114)
+          (|else| 0 114)))
+
+@ 
+\section{Gliph Table}
+Gliphs are symbol clumps. The gliph property of a symbol gives
+the tree describing the tokens which begin with that symbol.
+The token reader uses the gliph property to determine the longest token.
+Thus [[:=]] is read as one token not as [[:]] followed by [[=]].
+ 
+<<GLIPHTable>>=
+(mapcar #'(lambda (x) (makeprop (car x) 'gliph (cdr x)))
+        `(
+          ( \| (\))        )
+          ( *  (*)         )
+          ( \( (<) (\|)    )
+          ( +  (- (>))     )
+          ( -  (>)         )
+          ( <  (=) (<)     )
+     ;;     ( /  (\\)        ) breaks */xxx
+          ( \\ (/)         )
+          ( >  (=) (>) (\)))
+          ( =  (= (>)) (>) )
+          ( \. (\.)        )
+          ( ^  (=)         )
+          ( \~ (=)         )
+          ( \: (=) (-) (\:))))
+ 
+@
+\subsection{Rename Token Table} 
+RENAMETOK defines alternate token strings which can be used for different
+keyboards which define equivalent tokens.
+<<RENAMETOKTable>>=
+(mapcar 
+  #'(lambda (x) (makeprop (car x) 'renametok (cadr x)) (makenewop x nil))
+        '((\(\| \[)                     ; (| |) means []
+          (\|\) \])
+          (\(< \{)                      ; (< >) means {}
+          (>\) \})))
+ 
+@
+\subsection{Generic function table}
+GENERIC operators be suffixed by [[$]] qualifications in SPAD code.  
+[[$]] is then followed by a domain label, such as I for Integer, which 
+signifies which domain the operator refers to.  For example [[+$Integer]] 
+is [[+]] for Integers.
+<<GENERICTable>>=
+(mapcar #'(lambda (x) (makeprop x 'generic 'true))
+        '(- = * |rem| |mod| |quo| |div| / ** |exquo| + - < > <= >= ^= ))
+
+@  
+\subsection{Character Syntax Table}
+<<CharacterSyntaxTable>>=
+(defun specialcasesyntax () (or (and (char= tok '#\#) (digitp chr))))
+ 
+(defun terminator (chr)
+  (member chr '(#\  #\( #\) #\. #\; #\, #\Return)) :test #'char=)
+ 
+@  
+
 \chapter{The Parser}
 \section{EQ.spad}
 We will explain the compilation function using the file {\tt EQ.spad}.
@@ -646,21 +838,25 @@ Equation(S: Type): public == private where
 
 \end{verbatim}
 
+\defdollar{index}
 <<initvars>>=
 (defvar $index 0 "File line number of most recently read line")
 
 @
 
+\defdollar{linelist}
 <<initvars>>=
 (defvar $linelist nil "Stack of preparsed lines")
 
 @
 
+\defdollar{echolinestack}
 <<initvars>>=
 (defvar $echolinestack nil "Stack of lines to list")
 
 @
 
+\defdollar{preparse-last-line}
 <<initvars>>=
 (defvar $preparse-last-line nil "Most recently read line")
 
@@ -7776,8 +7972,8 @@ IteratorTail:   ('repeat' <Iterator*>! / Iterator*) ;
 @
 
 \defun{PARSE-Primary}{PARSE-Primary}
-\calls{PARSE-Primary}{}
-\calls{PARSE-Primary}{}
+\calls{PARSE-Primary}{PARSE-Float}
+\calls{PARSE-Primary}{PARSE-PrimaryNoFloat}
 <<defun PARSE-Primary>>=
 (defun |PARSE-Primary| ()
   (or (|PARSE-Float|) (|PARSE-PrimaryNoFloat|)))
@@ -8531,8 +8727,7 @@ if X matches initial segment of inputstream.
 \calls{match-string}{current-char}
 \calls{match-string}{initial-substring-p}
 \calls{match-string}{subseq}
-\calls{match-string}{line-buffer}
-\calls{match-string}{line-current-index}
+\usesstruct{match-string}{line}
 \uses{match-string}{line}
 <<defun match-string>>=
 (defun match-string (x)
@@ -8554,10 +8749,6 @@ If it is successful, advance inputstream past X.
 \calls{match-advance-string}{line-current-index}
 \calls{match-advance-string}{line-past-end-p}
 \calls{match-advance-string}{line-current-char}
-\calls{match-advance-string}{line-buffer}
-\calls{match-advance-string}{make-token}
-\calls{match-advance-string}{}
-\calls{match-advance-string}{}
 \usesstruct{match-advance-string}{token}
 \usesstruct{match-advance-string}{line}
 <<defun match-advance-string>>=
@@ -8626,7 +8817,6 @@ If it is successful, advance inputstream past X.
 @
 
 \defun{escape-keywords}{escape-keywords}
-\calls{escape-keywords}{}
 <<defun escape-keywords>>=
 (defun escape-keywords (pname id)
   (if (member id keywords)
@@ -8636,7 +8826,7 @@ If it is successful, advance inputstream past X.
 @
 
 \defun{underscore}{underscore}
-\calls{underscore}{}
+\calls{underscore}{vector-push}
 <<defun underscore>>=
 (defun underscore (string)
  (if (every #'alpha-char-p string) 
@@ -8740,7 +8930,7 @@ This returns the next token if it has equal type and (optionally) equal symbol.
 @
 
 \defun{make-symbol-of}{make-symbol-of}
-\calls{make-symbol-of}{token-symbol}
+\usesstruct{make-symbol-of}{token}
 <<defun make-symbol-of>>=
 (defun make-symbol-of (token)
  (let ((u (and token (token-symbol token))))
@@ -8835,8 +9025,7 @@ This makes the next token be the current token.
 \defun{current-char}{current-char}
 This returns the current character of the line, initially blank for an 
 unread line.
-\calls{current-char}{line-past-end-p}
-\calls{current-char}{line-current-char}
+\usesstruct{current-char}{line}
 \uses{current-char}{current-line}
 <<defun current-char>>=
 (defun current-char ()
@@ -8888,6 +9077,7 @@ equivalent to.
 \uses{meta-syntax-error}{meta-error-handler}
 <<defun meta-syntax-error>>=
 (defun meta-syntax-error (&optional (wanted nil) (parsing nil))
+  (declare (special meta-error-handler))
   (funcall meta-error-handler wanted parsing))
 
 @
@@ -8953,6 +9143,7 @@ the stack, then stack a NIL. Return the value of prod.
 @
 
 \defmacro{must}
+\calls{must}{meta-syntax-error}
 <<defmacro must>>=
 (defmacro must (dothis &optional (this-is nil) (in-rule nil))
   `(or ,dothis (meta-syntax-error ,this-is ,in-rule)))
@@ -8978,7 +9169,6 @@ E.G., {\tt (Star IDs (parse-id))} with A B C will stack (3 IDs (A B C)),
 where (parse-id) would stack (1 ID (A)) when applied once.
 \calls{star}{stack-size}
 \calls{star}{push-reduction}
-\calls{star}{push}
 \calls{star}{pop-stack-1}
 <<defmacro star>>=
 (defmacro star (lab prod)
@@ -9054,6 +9244,12 @@ Return a pointer to the Nth cons of X, counting 0 as the first cons.
  (and (> n 0) (eq (char str (1- n)) xcape)))
 
 @
+
+\defdollar{comblocklist}
+<<initvars>>=
+(defvar $comblocklist nil "a dynamic lists of comments for this block")
+
+@
  
 \defun{fincomblock}{fincomblock}
 \begin{itemize}
@@ -9132,6 +9328,8 @@ Return a pointer to the Nth cons of X, counting 0 as the first cons.
 <<defun nonblankloc>>=
 (defun nonblankloc (str)
  (position-if-not #'blankp str))
+
+@
  
 \defun{parseprint}{parseprint}
 <<defun parseprint>>=
@@ -9619,7 +9817,7 @@ combination of operations was requested. For this case we see:
 \end{verbatim}
 
 \defun{compilerDoit}{compilerDoit}
-\calls{compilerDoit}{/rq(5)}
+\calls{compilerDoit}{/rq}
 \calls{compilerDoit}{/rf(5)}
 \calls{compilerDoit}{member(5)}
 \calls{compilerDoit}{sayBrightly}
@@ -9658,7 +9856,7 @@ This function simply calls {\bf \verb|/rf-1|}.
 \end{verbatim}
 
 \defun{/RQ,LIB}{/RQ,LIB}
-\calls{/RQ,LIB}{/rf-1(5)}
+\calls{/RQ,LIB}{/rf-1}
 \uses{/RQ,LIB}{echo-meta(5)}
 \usesdollar{/RQ,LIB}{lisplib}
 <<defun /RQ,LIB>>=
@@ -11845,10 +12043,17 @@ if \verb|$InteractiveMode| then use a null outputstream
 
 <<initvars>>
 
+<<LEDNUDTables>>
+<<GLIPHTable>>
+<<RENAMETOKTable>>
+<<GENERICTable>>
+<<CharacterSyntaxTable>>
+
 <<defmacro bang>>
 <<defmacro must>>
 <<defmacro star>>
 
+
 <<defun action>>
 <<defun addCARorCDR>>
 <<defun addclose>>
diff --git a/changelog b/changelog
index 7639d25..ff55f77 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20101210 tpd src/axiom-website/patches.html 20101210.01.tpd.patch
+20101210 tpd src/interp/newaux.lisp remove newaux.lisp
+20101210 tpd src/interp/Makefile merge and remove newaux.lisp
+20101210 tpd books/bookvol9 merge and remove newaux.lisp
 20101209 tpd src/axiom-website/patches.html 20101209.01.tpd.patch
 20101209 tpd src/input/series.input add series to polynomial example
 20101208 tpd src/axiom-website/patches.html 20101208.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 643deb6..3b9d23b 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3309,5 +3309,7 @@ books/bookvol9 treeshake compiler<br/>
 books/bookvol9 treeshake compiler<br/>
 <a href="patches/20101209.01.tpd.patch">20101209.01.tpd.patch</a>
 src/input/series.input add series to polynomial example<br/>
+<a href="patches/20101210.01.tpd.patch">20101210.01.tpd.patch</a>
+books/bookvol9 merge and remove newaux.lisp<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index ba96091..566dad7 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -164,7 +164,7 @@ OBJS= ${OUT}/vmlisp.${O}      \
       ${OUT}/lisplib.${O}  \
       ${OUT}/match.${O}    \
       ${OUT}/msgdb.${O}       ${OUT}/nci.${O}  \
-      ${OUT}/newaux.${O}      ${OUT}/newfort.${O} \
+      ${OUT}/newfort.${O} \
       ${OUT}/nrunfast.${O} \
       ${OUT}/nrungo.${O}      ${OUT}/nrunopt.${O} \
       ${OUT}/nruntime.${O}    \
@@ -590,7 +590,6 @@ of the form:
 ${DEPSYS}:	${DEP} ${OUT}/sys-pkg.${LISP} ${OUT}/nocompil.${LISP} \
 	        ${OUT}/bookvol5.${LISP} ${OUT}/util.${LISP} \
 	        ${OUT}/parsing.${LISP} \
-	        ${OUT}/newaux.${LISP} \
 	        ${OUT}/g-boot.lisp ${OUT}/c-util.lisp \
 	        ${OUT}/g-util.lisp \
 	        ${OUT}/clam.lisp \
@@ -609,10 +608,6 @@ ${DEPSYS}:	${DEP} ${OUT}/sys-pkg.${LISP} ${OUT}/nocompil.${LISP} \
           '(compile-file "${OUT}/parsing.${LISP}"' \
           ':output-file "${OUT}/parsing.${O}"))' >> ${OUT}/makedep.lisp
 	@ echo '(load "${OUT}/parsing")' >> ${OUT}/makedep.lisp
-	@ echo '(unless (probe-file "${OUT}/newaux.${O}")' \
-          '(compile-file "${OUT}/newaux.${LISP}"' \
-          ':output-file "${OUT}/newaux.${O}"))' >> ${OUT}/makedep.lisp
-	@ echo '(load "${OUT}/newaux")' >> ${OUT}/makedep.lisp
 	@ echo '(unless (probe-file "${OUT}/clam.${O}")' \
           '(compile-file "${OUT}/clam.lisp"' \
           ':output-file "${OUT}/clam.${O}"))' >> ${OUT}/makedep.lisp
@@ -853,35 +848,6 @@ ${MID}/hypertex.lisp: ${IN}/hypertex.lisp.pamphlet
 
 @
 
-\subsection{newaux.lisp \cite{25}}
-<<newaux.o (OUT from MID)>>=
-${OUT}/newaux.${O}: ${MID}/newaux.lisp
-	@ echo 79 making ${OUT}/newaux.${O} from ${MID}/newaux.lisp
-	@ ( cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/newaux.lisp"' \
-             ':output-file "${OUT}/newaux.${O}") (${BYE}))' | ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/newaux.lisp"' \
-             ':output-file "${OUT}/newaux.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<newaux.lisp (OUT from MID)>>=
-${OUT}/newaux.${LISP}: ${MID}/newaux.lisp
-	@ echo 80 making ${OUT}/newaux.${LISP} from ${MID}/newaux.lisp
-	@cp ${MID}/newaux.lisp ${OUT}/newaux.${LISP}
-
-@
-<<newaux.lisp (MID from IN)>>=
-${MID}/newaux.lisp: ${IN}/newaux.lisp.pamphlet
-	@ echo 81 making ${MID}/newaux.lisp from ${IN}/newaux.lisp.pamphlet
-	@ (cd ${MID} ; \
-	   ${TANGLE} ${IN}/newaux.lisp.pamphlet >newaux.lisp )
-
-@
-
 \subsection{nocompil.lisp \cite{27}}
 <<nocompil.lisp (OUT from MID)>>=
 ${OUT}/nocompil.${LISP}: ${MID}/nocompil.lisp 
@@ -3533,10 +3499,6 @@ clean:
 <<nci.o (OUT from MID)>>
 <<nci.lisp (MID from IN)>>
 
-<<newaux.o (OUT from MID)>>
-<<newaux.lisp (OUT from MID)>>
-<<newaux.lisp (MID from IN)>>
-
 <<newfort.o (OUT from MID)>>
 <<newfort.lisp (MID from IN)>>
 
diff --git a/src/interp/newaux.lisp.pamphlet b/src/interp/newaux.lisp.pamphlet
deleted file mode 100644
index bb1c50a..0000000
--- a/src/interp/newaux.lisp.pamphlet
+++ /dev/null
@@ -1,254 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp newaux.lisp}
-\author{Timothy Daly}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{Operator Precedence Table Initialization} 
-\begin{verbatim}
-; PURPOSE: This file sets up properties which are used by the Boot lexical
-;          analyzer for bottom-up recognition of operators.  Also certain
-;          other character-class definitions are included, as well as
-;          table accessing functions.
-;
-; ORGANIZATION: Each section is organized in terms of Creation and Access code.
-;
-;               1. Led and Nud Tables
-;               2. GLIPH  Table
-;               3. RENAMETOK Table
-;               4. GENERIC Table
-;               5. Character syntax class predicates
-\end{verbatim}
-\subsection{LED and NUD Tables}
-\begin{verbatim}
-; **** 1. LED and NUD Tables
- 
-; ** TABLE PURPOSE
- 
-; Led and Nud have to do with operators. An operator with a Led property takes
-; an operand on its left (infix/suffix operator).
- 
-; An operator with a Nud takes no operand on its left (prefix/nilfix).
-; Some have both (e.g. - ).  This terminology is from the Pratt parser.
-; The translator for Scratchpad II is a modification of the Pratt parser which
-; branches to special handlers when it is most convenient and practical to
-; do so (Pratt's scheme cannot handle local contexts very easily).
- 
-; Both LEDs and NUDs have right and left binding powers.  This is meaningful 
-; for prefix and infix operators.  These powers are stored as the values of 
-; the LED and NUD properties of an atom, if the atom has such a property. 
-; The format is:
- 
-;       <Operator Left-Binding-Power  Right-Binding-Power <Special-Handler>>
- 
-; where the Special-Handler is the name of a function to be evaluated when that
-; keyword is encountered.
- 
-; The default values of Left and Right Binding-Power are NIL.  NIL is a 
-; legitimate value signifying no precedence.  If the Special-Handler is NIL,
-; this is just an ordinary operator (as opposed to a surfix operator like 
-; if-then-else).
-;
-; The Nud value gives the precedence when the operator is a prefix op.
-; The Led value gives the precedence when the operator is an infix op.
-; Each op has 2 priorities, left and right. 
-; If the right priority of the first is greater than or equal to the
-; left priority of the second then collect the second operator into
-; the right argument of the first operator. 
- 
-\end{verbatim}
-<<LEDNUDTables>>=
-; ** TABLE CREATION
- 
-(defun MAKENEWOP (X Y) (MAKEOP X Y '|PARSE-NewKEY|))
- 
-(defun MAKEOP (X Y KEYNAME)
-  (if (OR (NOT (CDR X)) (NUMBERP (SECOND X)))
-      (SETQ X (CONS (FIRST X) X)))
-  (if (AND (alpha-char-p (ELT (STRINGIMAGE (FIRST X)) 0))
-           (NOT (MEMBER (FIRST X) (EVAL KEYNAME))))
-      (SET KEYNAME (CONS (FIRST X) (EVAL KEYNAME))))
-  (MAKEPROP (FIRST X) Y X)
-  (SECOND X))
- 
-(setq |PARSE-NewKEY| nil) ;;list of keywords
- 
-(mapcar #'(LAMBDA(J) (MAKENEWOP J '|Led|))
-        '((* 800 801)   (|rem| 800 801)   (|mod| 800 801)
-          (|quo| 800 801)   (|div| 800 801)
-          (/ 800 801)    (** 900 901)  (^ 900 901)
-          (|exquo| 800 801) (+ 700 701)
-          (\- 700 701)    (\-\> 1001 1002)  (\<\- 1001 1002)
-          (\: 996 997)    (\:\: 996 997)
-          (\@ 996 997)    (|pretend| 995 996)
-          (\.)            (\! \! 1002 1001)
-          (\, 110 111)
-          (\; 81 82 (|PARSE-SemiColon|))
-          (\< 400 400)    (\> 400 400)
-          (\<\< 400 400)  (\>\> 400 400)
-          (\<= 400 400)   (\>= 400 400)
-          (= 400 400)     (^= 400 400)
-          (\~= 400 400)
-          (|in| 400 400)    (|case| 400 400)
-          (|add| 400 120)   (|with| 2000 400 (|PARSE-InfixWith|))
-          (|has| 400 400)
-          (|where| 121 104)     ; must be 121 for SPAD, 126 for boot--> nboot
-          (|when| 112 190)
-          (|otherwise| 119 190 (|PARSE-Suffix|))
-          (|is| 400 400)    (|isnt| 400 400)
-          (|and| 250 251)   (|or| 200 201)
-          (/\\ 250 251)   (\\/ 200 201)
-          (\.\. SEGMENT 401 699 (|PARSE-Seg|))
-          (=\> 123 103)
-          (+-\> 995 112)
-          (== DEF 122 121)
-          (==\> MDEF 122 121)
-          (\| 108 111)                          ;was 190 190
-          (\:- LETD 125 124) (\:= LET 125 124)))
- 
-(mapcar #'(LAMBDA (J) (MAKENEWOP J `|Nud|))
-        '((|for| 130 350 (|PARSE-Loop|))
-          (|while| 130 190 (|PARSE-Loop|))
-          (|until| 130 190 (|PARSE-Loop|))
-          (|repeat| 130 190 (|PARSE-Loop|))
-          (|import| 120 0 (|PARSE-Import|) )
-          (|unless|)
-          (|add| 900 120)
-          (|with| 1000 300 (|PARSE-With|))
-          (|has| 400 400)
-          (\- 701 700)  ; right-prec. wants to be -1 + left-prec
-;;        (\+ 701 700)
-          (\# 999 998)
-          (\! 1002 1001)
-          (\' 999 999 (|PARSE-Data|))
-          (\<\< 122 120 (|PARSE-LabelExpr|))
-          (\>\>)
-          (^ 260 259 NIL)
-          (\-\> 1001 1002)
-          (\: 194 195)
-          (|not| 260 259 NIL)
-          (\~ 260 259 nil)
-          (\= 400 700)
-          (|return| 202 201 (|PARSE-Return|))
-          (|leave| 202 201 (|PARSE-Leave|))
-          (|exit| 202 201 (|PARSE-Exit|))
-          (|from|)
-          (|iterate|)
-          (|yield|)
-          (|if| 130 0 (|PARSE-Conditional|))    ; was 130
-          (\| 0 190)
-          (|suchthat|)
-          (|then| 0 114)
-          (|else| 0 114)))
-
-@ 
-\section{Gliph Table}
-Gliphs are symbol clumps. The gliph property of a symbol gives
-the tree describing the tokens which begin with that symbol.
-The token reader uses the gliph property to determine the longest token.
-Thus [[:=]] is read as one token not as [[:]] followed by [[=]].
- 
-<<GLIPHTable>>=
-(mapcar #'(lambda (x) (makeprop (car x) 'gliph (cdr x)))
-        `(
-          ( \| (\))        )
-          ( *  (*)         )
-          ( \( (<) (\|)    )
-          ( +  (- (>))     )
-          ( -  (>)         )
-          ( <  (=) (<)     )
-     ;;     ( /  (\\)        ) breaks */xxx
-          ( \\ (/)         )
-          ( >  (=) (>) (\)))
-          ( =  (= (>)) (>) )
-          ( \. (\.)        )
-          ( ^  (=)         )
-          ( \~ (=)         )
-          ( \: (=) (-) (\:))))
- 
-@
-\subsection{Rename Token Table} 
-RENAMETOK defines alternate token strings which can be used for different
-keyboards which define equivalent tokens.
-<<RENAMETOKTable>>=
-(mapcar 
-  #'(lambda (x) (MAKEPROP (CAR X) 'RENAMETOK (CADR X)) (MAKENEWOP X NIL))
-        '((\(\| \[)                     ; (| |) means []
-          (\|\) \])
-          (\(< \{)                      ; (< >) means {}
-          (>\) \})))
- 
-@
-\subsection{Generic function table}
-GENERIC operators be suffixed by [[$]] qualifications in SPAD code.  
-[[$]] is then followed by a domain label, such as I for Integer, which 
-signifies which domain the operator refers to.  For example [[+$Integer]] 
-is [[+]] for Integers.
-<<GENERICTable>>=
-(mapcar #'(lambda (x) (MAKEPROP X 'GENERIC 'TRUE))
-        '(- = * |rem| |mod| |quo| |div| / ** |exquo| + - < > <= >= ^= ))
-
-@  
-\subsection{Character Syntax Table}
-<<CharacterSyntaxTable>>=
-(defun SPECIALCASESYNTAX () (OR (AND (char= TOK '#\#) (DIGITP CHR))))
- 
-(defun TERMINATOR (CHR)
-  (member CHR '(#\  #\( #\) #\. #\; #\, #\Return)) :test #'char=)
- 
-@  
-\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>>
- 
-(in-package "BOOT")
- 
-<<LEDNUDTables>>
-<<GLIPHTable>> 
-<<RENAMETOKTable>>
-<<GENERICTable>>
-<<CharacterSyntaxTable>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
