diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index cc22727..cc36e5a 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -16901,7 +16901,6 @@ Also See:
 o )compile
  
 @
-\footnote{\fnref{compile}}
 
 \section{Functions}
 \defun{abbreviations}{abbreviations}
@@ -17307,7 +17306,6 @@ o )spool
  
 @
 \footnote{
-\fnref{compile}
 \fnref{edit}
 \fnref{history}
 \fnref{library}
@@ -18102,122 +18100,6 @@ o )library
 @
 
 
-\defun{compiler}{compiler}
-\calls{compiler}{helpSpad2Cmd}
-\calls{compiler}{selectOptionLC}
-\calls{compiler}{new}
-\calls{compiler}{translate}
-\calls{compiler}{constructor}
-\calls{compiler}{old}
-\calls{compiler}{throwKeyedMsg}
-\calls{compiler}{pathname}
-\calls{compiler}{pathnameType}
-\callsdollar{compiler}{findfile}
-\calls{compiler}{compileAsharpCmd}
-\calls{compiler}{compileSpad2Cmd}
-\calls{compiler}{compileAsharpLispCmd}
-\calls{compiler}{compileSpadLispCmd}
-\calls{compiler}{compileAsharpArchiveCmd}
-\calls{compiler}{mergePathnames}
-\calls{compiler}{boot-equal}
-\usesdollar{compiler}{newConlist}
-\usesdollar{compiler}{options}
-\uses{compiler}{/editfile}
-<<defun compiler>>=
-(defun |compiler| (args)
- (let (|$newConlist| optlist optname optargs havenew haveold aft ef af af1)
-  (declare (special |$newConlist| |$options| /editfile))
-  (setq |$newConlist| nil)
-  (cond
-   ((and (null args) (null |$options|) (null /editfile))
-     (|helpSpad2Cmd| '(|compiler|)))
-   (t
-    (cond ((null args) (setq args (cons /editfile nil))))
-    (setq optlist '(|new| |old| |translate| |constructor|))
-    (setq havenew nil)
-    (setq haveold nil)
-    (do ((t0 |$options| (cdr t0)) (opt nil))
-        ((or (atom t0) 
-             (progn (setq opt (car t0)) nil)
-             (null (null (and havenew haveold))))
-          nil)
-     (setq optname (car opt))
-     (setq optargs (cdr opt))
-     (case (|selectOptionLC| optname optlist nil)
-      (|new|         (setq havenew t))
-      (|translate|   (setq haveold t))
-      (|constructor| (setq haveold t))
-      (|old|         (setq haveold t))))
-    (cond
-     ((and havenew haveold) (|throwKeyedMsg| 's2iz0081 nil))
-     (t
-      (setq af (|pathname| args))
-      (setq aft (|pathnameType| af))
-      (cond
-       ((or havenew (string= aft "as"))
-        (if (null (setq af1 ($findfile af '(|as|))))
-          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
-          (|compileAsharpCmd| (cons af1 nil))))
-       ((or haveold (string= aft "spad"))
-        (if (null (setq af1 ($findfile af '(|spad|))))
-           (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
-           (|compileSpad2Cmd| (cons af1 nil))))
-       ((string= aft "lsp")
-        (if (null (setq af1 ($findfile af '(|lsp|))))
-          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
-          (|compileAsharpLispCmd| (cons af1 nil))))
-       ((string= aft "nrlib")
-        (if (null (setq af1 ($findfile af '(|nrlib|))))
-          (|throwKeyedMsg| 'S2IL0003 (cons (namestring af) nil))
-          (|compileSpadLispCmd| (cons af1 nil))))
-       ((string= aft "ao")
-        (if (null (setq af1 ($findfile af '(|ao|))))
-          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
-         (|compileAsharpCmd| (cons af1 nil))))
-       ((string= aft "al")
-        (if (null (setq af1 ($findfile af '(|al|))))
-          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
-          (|compileAsharpArchiveCmd| (cons af1 nil))))
-       (t
-        (setq af1 ($findfile af '(|as| |spad| |ao| |asy|)))
-        (cond
-         ((and af1 (string= (|pathnameType| af1) "as"))
-          (|compileAsharpCmd| (cons af1 nil)))
-         ((and af1 (string= (|pathnameType| af1) "ao"))
-          (|compileAsharpCmd| (cons af1 nil)))
-         ((and af1 (string= (|pathnameType| af1) "spad"))
-          (|compileSpad2Cmd| (cons af1 nil)))
-         ((and af1 (string= (|pathnameType| af1) "asy"))
-          (|compileAsharpArchiveCmd| (cons af1 nil)))
-         (t
-          (setq ef (|pathname| /editfile))
-          (setq ef (|mergePathnames| af ef))
-          (cond
-           ((boot-equal ef af) (|throwKeyedMsg| 's2iz0039 nil))
-           (t
-            (setq af ef)
-            (cond
-             ((string= (|pathnameType| af) "as")
-              (|compileAsharpCmd| args))
-             ((string= (|pathnameType| af) "ao")
-              (|compileAsharpCmd| args))
-             ((string= (|pathnameType| af) "spad")
-              (|compileSpad2Cmd| args))
-             (t
-              (setq af1 ($findfile af '(|as| |spad| |ao| |asy|)))
-              (cond
-               ((and af1 (string= (|pathnameType| af1) "as"))
-                 (|compileAsharpCmd| (cons af1 nil)))
-               ((and af1 (string= (|pathnameType| af1) "ao"))
-                 (|compileAsharpCmd| (cons af1 nil)))
-               ((and af1 (string= (|pathnameType| af1) "spad"))
-                 (|compileSpad2Cmd| (cons af1 nil)))
-               ((and af1 (string= (|pathnameType| af1) "asy"))
-                (|compileAsharpArchiveCmd| (cons af1 nil)))
-               (t (|throwKeyedMsg| 's2iz0039 nil)))))))))))))))))
-
-@
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \cmdhead{copyright help page}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -19146,7 +19028,6 @@ o )read
 @ 
 \footnote{
 \fnref{system}
-\fnref{compile}
 \fnref{read}}
 
 \section{Functions}
@@ -22281,7 +22162,6 @@ o )set
 @ 
 \footnote{
 \fnref{cd}
-\fnref{compile}
 \fnref{frame}
 \fnref{set}}
 
@@ -22616,7 +22496,6 @@ o )history
  
 @ 
 \footnote{
-\fnref{compile}
 \fnref{edit}
 \fnref{history}}
 
@@ -39903,7 +39782,6 @@ This needs to work off the internal exposure list, not the file.
 <<defun commandUserLevelError>>
 <<defun compareposns>>
 <<defun compileBoot>>
-<<defun compiler>>
 <<defun compressOpen>>
 <<defun concat>>
 <<defun constoken>>
diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index c6f7947..cff3e35 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -518,9 +518,22 @@ is called. For Aldor, You must also have present a {\tt .asy}
 generated from the same source file.
 
 \defunsec{compiler}{The top level compiler command}
-\calls{compiler}{}
-\usesdollar{compiler}{}
-\uses{compiler}{}
+\calls{compiler}{vol5/helpSpad2Cmd}
+\calls{compiler}{vol5/selectOptionLC}
+\calls{compiler}{vol5/pathname}
+\calls{compiler}{vol5/mergePathnames}
+\calls{compiler}{vol5/pathnameType}
+\calls{compiler}{vol5/namestring}
+\calls{compiler}{throwKeyedMsg}
+\calls{compiler}{findfile}
+\calls{compiler}{compileSpad2Cmd}
+\calls{compiler}{compileAsharpLispCmd}
+\calls{compiler}{compileSpadLispCmd}
+\calls{compiler}{compileAsharpCmd}
+\calls{compiler}{compileAsharpArchiveCmd}
+\usesdollar{compiler}{newConlist}
+\usesdollar{compiler}{options}
+\uses{compiler}{/editfile}
 <<defun compiler>>=
 (defun |compiler| (args)
  "The top level compiler command"
@@ -623,6 +636,40 @@ a file with file extension .spad.
 
 The \verb|$f| and \verb|$m| are compiler variables, probably function
 and mode.
+\calls{compileSpad2Cmd}{vol5/pathname}
+\calls{compileSpad2Cmd}{vol5/pathnameType}
+\calls{compileSpad2Cmd}{vol5/namestring}
+\calls{compileSpad2Cmd}{vol5/updateSourceFiles}
+\calls{compileSpad2Cmd}{vol5/selectOptionLC}
+\calls{compileSpad2Cmd}{vol5/terminateSystemCommand}
+\calls{compileSpad2Cmd}{nequal}
+\calls{compileSpad2Cmd}{throwKeyedMsg}
+\calls{compileSpad2Cmd}{sayKeyedMsg}
+\calls{compileSpad2Cmd}{error}
+\calls{compileSpad2Cmd}{strconc}
+\calls{compileSpad2Cmd}{object2String}
+\calls{compileSpad2Cmd}{oldParserAutoloadOnceTrigger}
+\calls{compileSpad2Cmd}{browserAutoloadOnceTrigger}
+\calls{compileSpad2Cmd}{spad2AsTranslatorAutoloadOnceTrigger}
+\calls{compileSpad2Cmd}{convertSpadToAsFile}
+\calls{compileSpad2Cmd}{compilerDoitWithScreenedLisplib}
+\calls{compileSpad2Cmd}{compilerDoit}
+\calls{compileSpad2Cmd}{extendLocalLibdb}
+\calls{compileSpad2Cmd}{spadPrompt}
+\usesdollar{compileSpad2Cmd}{newcompMode}
+\usesdollar{compileSpad2Cmd}{ncConverse}
+\usesdollar{compileSpad2Cmd}{newComp}
+\usesdollar{compileSpad2Cmd}{scanIfTrue}
+\usesdollar{compileSpad2Cmd}{compileOnlyCertainItems}
+\usesdollar{compileSpad2Cmd}{f}
+\usesdollar{compileSpad2Cmd}{m}
+\usesdollar{compileSpad2Cmd}{QuickLet}
+\usesdollar{compileSpad2Cmd}{QuickCode}
+\usesdollar{compileSpad2Cmd}{sourceFileTypes}
+\usesdollar{compileSpad2Cmd}{InteractiveMode}
+\usesdollar{compileSpad2Cmd}{options}
+\usesdollar{compileSpad2Cmd}{newConlist}
+\uses{compileSpad2Cmd}{/editfile}
 <<defun compileSpad2Cmd>>=
 (defun |compileSpad2Cmd| (args)
  (let (|$newcompMode| |$ncConverse| |$newComp| |$scanIfTrue| 
@@ -697,6 +744,22 @@ and mode.
 
 @
 \defun{compileSpadLispCmd}{compileSpadLispCmd}
+\calls{compileSpadLispCmd}{vol5/pathname}
+\calls{compileSpadLispCmd}{vol5/pathnameType}
+\calls{compileSpadLispCmd}{vol5/selectOptionLC}
+\calls{compileSpadLispCmd}{vol5/namestring}
+\calls{compileSpadLispCmd}{vol5/terminateSystemCommand}
+\calls{compileSpadLispCmd}{vol5/fnameMake}
+\calls{compileSpadLispCmd}{vol5/pathnameDirectory}
+\calls{compileSpadLispCmd}{vol5/pathnameName}
+\calls{compileSpadLispCmd}{vol5/fnameReadable?}
+\calls{compileSpadLispCmd}{vol5/localdatabase}
+\calls{compileSpadLispCmd}{throwKeyedMsg}
+\calls{compileSpadLispCmd}{object2String}
+\calls{compileSpadLispCmd}{sayKeyedMsg}
+\calls{compileSpadLispCmd}{recompile-lib-file-if-necessary}
+\calls{compileSpadLispCmd}{spadPrompt}
+\usesdollar{compileSpadLispCmd}{options}
 <<defun compileSpadLispCmd>>=
 (defun |compileSpadLispCmd| (args)
  (let (path optlist optname optargs beQuiet dolibrary lsp)
@@ -743,6 +806,9 @@ and mode.
 @
 
 \defun{compileAsharpCmd}{compileAsharpCmd}
+\calls{compileAsharpCmd}{vol5/terminateSystemCommand}
+\calls{compileAsharpCmd}{compileAsharpCmd1}
+\calls{compileAsharpCmd}{spadPrompt}
 <<defun compileAsharpCmd>>=
 (defun |compileAsharpCmd| (args)
   (|compileAsharpCmd1| args)
@@ -752,6 +818,29 @@ and mode.
 @
 
 \defun{compileAsharpCmd1}{compileAsharpCmd1}
+\calls{compileAsharpCmd1}{vol5/pathname}
+\calls{compileAsharpCmd1}{vol5/pathnameType}
+\calls{compileAsharpCmd1}{vol5/fnameMake}
+\calls{compileAsharpCmd1}{vol5/namestring}
+\calls{compileAsharpCmd1}{vol5/selectOptionLC}
+\calls{compileAsharpCmd1}{vol5/pathnameName}
+\calls{compileAsharpCmd1}{vol5/fnameReadable?}
+\calls{compileAsharpCmd1}{vol5/updateSourceFiles}
+\calls{compileAsharpCmd1}{vol5/getenviron}
+\calls{compileAsharpCmd1}{nequal}
+\calls{compileAsharpCmd1}{throwKeyedMsg}
+\calls{compileAsharpCmd1}{error}
+\calls{compileAsharpCmd1}{strconc}
+\calls{compileAsharpCmd1}{object2String}
+\calls{compileAsharpCmd1}{sayKeyedMsg}
+\calls{compileAsharpCmd1}{obey}
+\calls{compileAsharpCmd1}{compileFileQuietly}
+\calls{compileAsharpCmd1}{withAsharpCmd}
+\calls{compileAsharpCmd1}{extendLocalLibdb}
+\usesdollar{compileAsharpCmd1}{options}
+\usesdollar{compileAsharpCmd1}{asharpCmdlineFlags}
+\usesdollar{compileAsharpCmd1}{newConlist}
+\uses{compileAsharpCmd1}{/editfile}
 <<defun compileAsharpCmd1>>=
 (defun |compileAsharpCmd1| (args)
  (let (path pathtype optlist optname optargs bequiet docompilelisp 
@@ -822,7 +911,7 @@ and mode.
      (|sayKeyedMsg| 's2iz0038a  (list (|namestring| args) asharpargs )))
     (setq command
      (strconc
-      (strconc (getenv "ALDORROOT") "/bin/")
+      (strconc (getenviron "ALDORROOT") "/bin/")
       '|aldor | asharpargs " " (|namestring| args)))
     (setq rc (obey command))
     (cond
@@ -846,6 +935,21 @@ and mode.
 @
 
 \defun{compileAsharpArchiveCmd}{compileAsharpArchiveCmd}
+\calls{compileAsharpArchiveCmd}{vol5/pathname}
+\calls{compileAsharpArchiveCmd}{vol5/terminateSystemCommand}
+\calls{compileAsharpArchiveCmd}{vol5/namestring}
+\calls{compileAsharpArchiveCmd}{vol5/fnameMake}
+\calls{compileAsharpArchiveCmd}{vol5/pathnameName}
+\calls{compileAsharpArchiveCmd}{throwKeyedMsg}
+\calls{compileAsharpArchiveCmd}{directoryp}
+\calls{compileAsharpArchiveCmd}{nequal}
+\calls{compileAsharpArchiveCmd}{strconc}
+\calls{compileAsharpArchiveCmd}{obey}
+\calls{compileAsharpArchiveCmd}{object2Identifier}
+\calls{compileAsharpArchiveCmd}{cd}
+\calls{compileAsharpArchiveCmd}{compileAsharpCmd1}
+\calls{compileAsharpArchiveCmd}{spadPrompt}
+\usesdollar{compileAsharpArchiveCmd}{current-directory}
 <<defun compileAsharpArchiveCmd>>=
 (defun |compileAsharpArchiveCmd| (args)
  (let (path dir exists isdir curdir cmd rc asos)
@@ -892,6 +996,23 @@ and mode.
 @
 
 \defun{compileAsharpLispCmd}{compileAsharpLispCmd}
+\calls{compileAsharpLispCmd}{vol5/pathname}
+\calls{compileAsharpLispCmd}{vol5/namestring}
+\calls{compileAsharpLispCmd}{vol5/selectOptionLC}
+\calls{compileAsharpLispCmd}{vol5/terminateSystemCommand}
+\calls{compileAsharpLispCmd}{vol5/pathnameType}
+\calls{compileAsharpLispCmd}{vol5/fnameMake}
+\calls{compileAsharpLispCmd}{vol5/pathnameDirectory}
+\calls{compileAsharpLispCmd}{vol5/pathnameName}
+\calls{compileAsharpLispCmd}{vol5/fnameReadable?}
+\calls{compileAsharpLispCmd}{throwKeyedMsg}
+\calls{compileAsharpLispCmd}{strconc}
+\calls{compileAsharpLispCmd}{object2String}
+\calls{compileAsharpLispCmd}{sayKeyedMsg}
+\calls{compileAsharpLispCmd}{compileFileQuietly}
+\calls{compileAsharpLispCmd}{withAsharpCmd}
+\calls{compileAsharpLispCmd}{spadPrompt}
+\usesdollar{compileAsharpLispCmd}{options}
 <<defun compileAsharpLispCmd>>=
 (defun |compileAsharpLispCmd| (args)
  (let (path optlist optname optargs bequiet dolibrary lsp)
@@ -938,6 +1059,8 @@ and mode.
 @
 
 \defun{withAsharpCmd}{withAsharpCmd}
+\calls{withAsharpCmd}{vol5/localdatabase}
+\usesdollar{withAsharpCmd}{options}
 <<defun withAsharpCmd>>=
 (defun |withAsharpCmd| (args)
  (let (|$options|)
@@ -948,6 +1071,8 @@ and mode.
 
 \defun{compileFileQuietly}{compileFileQuietly}
 if \verb|$InteractiveMode| then use a null outputstream 
+\usesdollar{compileFileQuietly}{InteractiveMode}
+\uses{compileFileQuietly}{*standard-output*}
 <<defun compileFileQuietly>>=
 (defun |compileFileQuietly| (fn) 
   (let (
@@ -969,6 +1094,11 @@ if \verb|$InteractiveMode| then use a null outputstream
 
 @
 \defun{compilerDoit}{compilerDoit}
+\calls{compilerDoit}{vol5/member}
+\calls{compilerDoit}{/RQ,LIB}
+\calls{compilerDoit}{sayBrightly}
+\usesdollar{compilerDoit}{byConstructors}
+\usesdollar{compilerDoit}{constructorsSeen}
 <<defun compilerDoit>>=
 (defun |compilerDoit| (constructor fun)
  (let (|$byConstructors| |$constructorsSeen|)
@@ -989,83 +1119,6 @@ if \verb|$InteractiveMode| then use a null outputstream
 
 @
 
-\chapter{Dangling references}
-\section{shell variables}
-\begin{verbatim}
-ALDORROOT
-\end{verbatim}
-
-\section{catch tags}
-\begin{verbatim}
-\end{verbatim}
-
-\section{throw tags}
-\begin{verbatim}
-\end{verbatim}
-
-\section{defined special variables}
-\begin{verbatim}
-\end{verbatim}
-
-\section{undefined special variables}
-\begin{verbatim}
-|$asharpCmdlineFlags| 
-|$compileOnlyCertainItems| 
-$current-directory
-/editfile 
-|$f| 
-|$InteractiveMode| 
-|$m| 
-|$ncConverse| 
-|$newComp| 
-|$newcompMode| 
-|$newConlist|
-|$options|
-|$QuickCode| 
-|$QuickLet| 
-|$scanIfTrue| 
-|$sourceFileTypes| 
-*standard-output* 
-$syscommands
-|$systemCommands|
-\end{verbatim}
-
-\section{undefined functions}
-\begin{verbatim}
-|browserAutoloadOnceTrigger|
-|compilerDoit|
-|compilerDoitWithScreenedLisplib|
-|convertSpadToAsFile|
-directory
-|directoryp|
-|error|
-|extendLocalLibdb|
-|fnameMake|
-|fnameReadable?|
-getenv
-|member|
-|namestring|
-nequal
-obey
-|object2Identifier|
-|object2String|
-|oldParserAutoloadOnceTrigger|
-|pathname|
-|pathnameDirectory|
-|pathnameName|
-|pathnameType|
-recompile-lib-file-if-necessary
-|sayBrightly|
-|sayKeyedMsg|
-|spadPrompt|
-|spad2AsTranslatorAutoloadOnceTrigger|
-strconc
-strpos
-|throwKeyedMsg|
-|terminateSystemCommand|
-|updateSourceFiles|
-\end{verbatim}
-
 \chapter{The Compiler}
 <<Compiler>>=
 (in-package "BOOT")
@@ -1077,6 +1130,7 @@ strpos
 <<defun compileAsharpCmd1>>
 <<defun compileAsharpLispCmd>>
 <<defun compileFileQuietly>>
+<<defun compiler>>
 <<defun compilerDoit>>
 <<defun compileSpad2Cmd>>
 <<defun compileSpadLispCmd>>
diff --git a/changelog b/changelog
index 98e4a17..c3b1540 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20100814 tpd src/axiom-website/patches.html 20100814.01.tpd.patch
+20100814 tpd books/bookvol9 cross-reference functions and variables
+20100814 tpd books/bookvol5 remove compile, duplicated in vol9
 20100813 tpd src/axiom-website/patches.html 20100813.02.tpd.patch
 20100813 tpd src/axiom-website/download.html update ubuntu yum advice
 20100813 tpd src/axiom-website/patches.html 20100813.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a750a0a..fac558a 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3061,5 +3061,7 @@ books/ps/v103guessoptionfunctions0.eps added<br/>
 books/bookvol10.4 remove POLYVEC<br/>
 <a href="patches/20100813.02.tpd.patch">20100813.02.tpd.patch</a>
 src/axiom-website/download.html update ubuntu yum advice<br/>
+<a href="patches/20100814.01.tpd.patch">20100814.01.tpd.patch</a>
+books/bookvol9 cross-reference functions and variables<br/>
  </body>
 </html>
