diff --git a/changelog b/changelog
index 701d449..29a3e35 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090712 tpd src/axiom-website/patches.html 20090712.06.tpd.patch
+20090712 tpd src/interp/Makefile remove br-prof
+20090712 tpd src/interp/br-con.boot merge br-prof.boot
+20090712 tpd src/interp/br-prof.boot removed, merge with br-con
 20090712 tpd src/axiom-website/patches.html 20090712.05.tpd.patch
 20090712 tpd src/interp/Makefile remove br-util
 20090712 tpd src/interp/br-con.boot merge br-util.boot
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 3a0fa2f..f7f6d47 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1719,5 +1719,7 @@ merge br-con and br-op2<br/>
 merge br-con and br-search<br/>
 <a href="patches/20090712.05.tpd.patch">20090712.05.tpd.patch</a>
 merge br-con and br-util<br/>
+<a href="patches/20090712.06.tpd.patch">20090712.06.tpd.patch</a>
+merge br-con and br-prof<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 477eefa..afc5ad1 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -286,7 +286,7 @@ browser. These files should probably be autoloaded.
 BROBJS=	${AUTO}/bc-matrix.${O}				\
 	${AUTO}/ht-util.${O}	\
 	${AUTO}/br-con.${O}	\
-	${AUTO}/topics.${O}     ${AUTO}/br-prof.${O}    \
+	${AUTO}/topics.${O}     \
 	${AUTO}/br-saturn.${O}
 
 @
@@ -428,7 +428,6 @@ DOCFILES=${DOC}/alql.boot.dvi \
 	 ${DOC}/bc-matrix.boot.dvi \
 	 ${DOC}/bits.lisp.dvi ${DOC}/bootfuns.lisp.dvi \
 	 ${DOC}/br-con.boot.dvi \
-	 ${DOC}/br-prof.boot.dvi \
 	 ${DOC}/br-saturn.boot.dvi  \
 	 ${DOC}/buildom.boot.dvi \
 	 ${DOC}/category.boot.dvi ${DOC}/cattable.boot.dvi \
@@ -5933,55 +5932,6 @@ ${DOC}/topics.boot.dvi: ${IN}/topics.boot.pamphlet
 
 @
 
-\subsection{br-prof.boot}
-<<br-prof.o (AUTO from OUT)>>=
-${AUTO}/br-prof.${O}: ${OUT}/br-prof.${O}
-	@ echo 497 making ${AUTO}/br-prof.${O} from ${OUT}/br-prof.${O}
-	@ cp ${OUT}/br-prof.${O} ${AUTO}
-
-@
-<<br-prof.o (OUT from MID)>>=
-${OUT}/br-prof.${O}: ${MID}/br-prof.clisp 
-	@ echo 498 making ${OUT}/br-prof.${O} from ${MID}/br-prof.clisp
-	@ (cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/br-prof.clisp"' \
-             ':output-file "${OUT}/br-prof.${O}") (${BYE}))' |  ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/br-prof.clisp"' \
-             ':output-file "${OUT}/br-prof.${O}") (${BYE}))' |  ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<br-prof.clisp (MID from IN)>>=
-${MID}/br-prof.clisp: ${IN}/br-prof.boot.pamphlet
-	@ echo 499 making ${MID}/br-prof.clisp from ${IN}/br-prof.boot.pamphlet
-	@ (cd ${MID} ; \
-	  ${TANGLE} ${IN}/br-prof.boot.pamphlet >br-prof.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "br-prof.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-	  else \
-	   echo '(progn (boottran::boottocl "br-prof.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm br-prof.boot )
-
-@
-<<br-prof.boot.dvi (DOC from IN)>>=
-${DOC}/br-prof.boot.dvi: ${IN}/br-prof.boot.pamphlet 
-	@echo 500 making ${DOC}/br-prof.boot.dvi \
-                  from ${IN}/br-prof.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/br-prof.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} br-prof.boot ; \
-	rm -f ${DOC}/br-prof.boot.pamphlet ; \
-	rm -f ${DOC}/br-prof.boot.tex ; \
-	rm -f ${DOC}/br-prof.boot )
-
-@
-
 \subsection{unlisp.lisp}
  the new parser files are maintained here
 <<unlisp.o (OUT from MID)>>=
@@ -7517,11 +7467,6 @@ clean:
 <<br-con.clisp (MID from IN)>>
 <<br-con.boot.dvi (DOC from IN)>>
 
-<<br-prof.o (AUTO from OUT)>>
-<<br-prof.o (OUT from MID)>>
-<<br-prof.clisp (MID from IN)>>
-<<br-prof.boot.dvi (DOC from IN)>>
-
 <<br-saturn.o (AUTO from OUT)>>
 <<br-saturn.o (OUT from MID)>>
 <<br-saturn.clisp (MID from IN)>>
diff --git a/src/interp/br-con.boot.pamphlet b/src/interp/br-con.boot.pamphlet
index c35139b..83270e2 100644
--- a/src/interp/br-con.boot.pamphlet
+++ b/src/interp/br-con.boot.pamphlet
@@ -5900,6 +5900,238 @@ dbTickIndex(line,n,k) == --returns index of nth tick in line starting at k
 
 mySort u == listSort(function GLESSEQP,u)
 
+--====================> WAS b-prof.boot <================================
+
+--============================================================================
+--                Browser Code for Profiling
+--============================================================================
+kciPage(htPage,junk) ==
+  --info alist must have NEW format with [op,:sig] in its CAARs
+  which:= '"operation"
+  htpSetProperty(htPage,'which,which)
+  domname := htpProperty(htPage,'domname)
+  conform := htpProperty(htPage,'conform)
+  heading := ['"Capsule Cross Reference for ",:htpProperty(htPage,'heading)]
+  page := htInitPage(heading,htCopyProplist htPage)
+  conname := opOf conform
+  htpSetProperty(page,'infoAlist,infoAlist := getInfoAlist conname)
+  dbGetExpandedOpAlist page      --expand opAlist "in place"
+  opAlist := kciReduceOpAlist(htpProperty(page,'opAlist),infoAlist)
+  dbShowOperationsFromConform(page,which,opAlist)
+
+kciReduceOpAlist(opAlist,infoAlist) ==
+--count opAlist
+  res := [pair for [op,:items] in opAlist | pair] where pair ==
+    u := LASSOC(op,infoAlist) =>
+      y := [x for x in items
+            | x is [sig,:.] and or/[sig = sig1 for [sig1,:.] in u]] => [op,:y]
+      nil
+    nil
+  res
+
+displayInfoOp(htPage,infoAlist,op,sig) ==
+  (sigAlist := LASSOC(op,infoAlist)) and (itemlist := LASSOC(sig,sigAlist)) =>
+     dbShowInfoOp(htPage,op,sig,itemlist)
+  nil
+
+dbShowInfoOp(htPage,op,sig,alist) ==
+  heading := htpProperty(htPage,'heading)
+  domname := htpProperty(htPage,'domname)
+  conform := htpProperty(htPage,'conform)
+  opAlist := htpProperty(htPage,'opAlist)
+  conname := opOf conform
+  kind     := GETDATABASE(conname,'CONSTRUCTORKIND)
+  honestConform :=
+    kind = 'category =>
+      [INTERN STRCONC(PNAME conname,'"&"),"$",:CDR conform]
+    conform
+  faTypes  := CDDAR GETDATABASE(conname,'CONSTRUCTORMODEMAP)
+
+  conArgTypes :=
+    SUBLISLIS(IFCDR conform,TAKE(#faTypes,$FormalMapVariableList),faTypes)
+  conform := htpProperty(htPage,'conform)
+  conname := opOf conform
+--argTypes := REVERSE ASSOCRIGHT LASSOC('arguments,alist)
+--sig := or/[sig for [sig,:.] in LASSOC(op,opAlist) | rest sig = argTypes]
+  ops := escapeSpecialChars STRINGIMAGE zeroOneConvert op
+  oppart := ['"{\em ", ops, '"}"]
+  head :=
+    sig => [:oppart,'": ",:dbConformGen dbInfoSig sig]
+    oppart
+  heading := [:head,'" from {\sf ",form2HtString conform,'"}"]
+  for u in alist repeat
+    [x,:y] := u
+    x = 'locals => locals := y
+    x = 'arguments => arguments := y
+    fromAlist := [[x,:zeroOneConvertAlist y], :fromAlist]
+  fromAlist :=
+    cons := args := nil
+    for (p := [x,:y]) in fromAlist repeat
+      x = $ => dollar := [[honestConform,:y]]
+      x = 'Rep => rep := [['Rep,:y]]
+      IDENTP x => args := [dbInfoFindCat(conform,conArgTypes,p), :args]
+      cons := [dbInfoTran(x,y), :cons]
+    [:mySort args, :dollar, :rep, :mySort cons]
+  sigAlist  := LASSOC(op,opAlist)
+  item := or/[x for x in sigAlist | x is [sig1,:.] and sig1 = sig] or
+    systemError '"cannot find signature"
+  --item is [sig,pred,origin,exposeFlag,comments]
+  [sig,pred,origin,exposeFlag,doc] := item
+  htpSetProperty(htPage,'fromAlist,fromAlist)
+  htSayHline()
+  htSay('"\center{Cross Reference for definition of {\em ",ops,'"}}\beginmenu ")
+--  if arguments then
+--    htSay '"\item\menuitemstyle{}{\em arguments:}\newline"
+--    dbShowInfoList(arguments,0,false)
+  if locals then
+    htSay '"\item\menuitemstyle{}{\em local variables:}\newline"
+    dbShowInfoList(locals,8192,false)
+  bincount := 2
+  for [con,:fns] in fromAlist repeat
+    htSay '"\item"
+    if IDENTP con then
+        htSay '"\menuitemstyle{} {\em calls to} "
+        if con ^= 'Rep then htSay '"{\em argument} "
+        htSay con
+        if and/[fn is ['origin,orig,.] and
+          (null origin and (origin := orig) or origin = orig) for fn in fns] then
+            htSay '" {\em of type} "
+            bcConform orig
+        buttonForOp := false
+    else
+      htMakePage [['bcLinks,['"\menuitemstyle{}",'"",'dbInfoChoose,bincount]]]
+      htSay '"{\em calls to} "
+      bcConform con
+      buttonForOp := true
+    htSay('":\newline ")
+    dbShowInfoList(fns, bincount * 8192,buttonForOp)
+    bincount := bincount + 1
+  htSay '"\endmenu "
+
+dbShowInfoList(dataItems,count,buttonForOp?) ==
+--dataItems are [op,:sig]
+  single? := null rest dataItems
+  htSay '"\table{"
+  for item in dataItems repeat
+    [op,:sig] :=
+       item is ['origin,.,s] =>
+         buttonForOp? := true
+         s
+       item
+    ops := escapeSpecialChars STRINGIMAGE op
+    htSay '"{"
+    if count < 16384 or not buttonForOp? then
+      htSay [ops,'": "]
+      atom sig => bcConform sig
+      bcConform dbInfoSig sig
+    else
+      htMakePage [['bcLinks,[ops,'"",'dbInfoChooseSingle,count]]]
+      htSay '": "
+      if atom sig then htSay sig else
+        bcConform dbInfoSig sig
+    htSay '"}"
+    count := count + 1
+  htSay '"} "
+  count
+
+dbInfoFindCat(conform,conArgTypes,u) ==
+  [argName,:opSigList] := u
+  n := POSITION(argName,IFCDR conform) or systemError()
+  t := conArgTypes . n
+  [argName,:[dbInfoWrapOrigin(x,t) for x in opSigList]]
+
+dbInfoWrapOrigin(x, t) ==
+  [op, :sig] := x
+  origin := dbInfoOrigin(op,sig,t) => ['origin, origin, x]
+  x
+
+dbInfoOrigin(op,sig,t) ==
+  t is ['Join, :r] => or/[dbInfoOrigin(op,sig,x) for x in r]
+  t is ['CATEGORY,:.] => false
+  [sig = sig1 for [sig1,:.] in LASSOC(op, koOps(t,nil))] => t
+  false
+
+dbInfoTran(con,opSigList) == [con,:SUBST("$",con,mySort opSigList)]
+
+zeroOneConvertAlist u == [[zeroOneConvert x,:y] for [x,:y] in u]
+
+dbInfoChoose(htPage,count) ==
+  fromAlist := htpProperty(htPage,'fromAlist)
+  index := count - 2
+  [con, :alist] := fromAlist.index
+  dbInfoChoose1(htPage,con,alist)
+
+dbInfoChooseSingle(htPage,count) ==
+  fromAlist := htpProperty(htPage,'fromAlist)
+  [index, binkey] := DIVIDE(count, 8192)
+  [con, :alist] := fromAlist.(index - 2)
+  item := alist . binkey
+  alist :=
+    item is ['origin,origin,s] =>
+      con := origin
+      [s]
+    [item]
+  dbInfoChoose1(htPage,con,alist)
+
+dbInfoChoose1(htPage,con,alist) ==
+  $conform: local := con
+  opAlist := [pair for x in koOps(con,nil) | pair:=dbInfoSigMatch(x,alist)]
+  page := htInitPage(nil,nil)
+  htpSetProperty(page,'conform,con)
+  htpSetProperty(page,'kind,PNAME GETDATABASE(opOf con,'CONSTRUCTORKIND))
+  dbShowOperationsFromConform(page,'"operation",opAlist)
+
+dbInfoSigMatch(x,alist) ==
+  [op,:sigAlist] := x
+  candidates := [sig for [op1,:sig] in alist | op1 = op] or return nil
+  sigs := [s for s in sigAlist | "or"/[first s = s1 for s1 in candidates] or
+    (s2 := SUBST($conform,"$",s)) and "or"/[first s2 = s1 for s1 in candidates]]
+  sigs and [op,:sigs]
+
+
+dbInfoSig sig ==
+  null rest sig => first sig
+  ['Mapping,:sig]
+
+--============================================================================
+--                Code to Expand opAlist
+--============================================================================
+dbGetExpandedOpAlist htPage ==
+  expand := htpProperty(htPage,'expandOperations)
+  if expand ^= 'fullyExpanded then
+    if null expand then htpSetProperty(htPage,'expandOperations,'lists)
+    opAlist := koOps(htpProperty(htPage,'conform),nil)
+    htpSetProperty(htPage,'opAlist,opAlist)
+    dbExpandOpAlistIfNecessary(htPage,opAlist,'"operation",false,false)
+  htpProperty(htPage,'opAlist)
+
+--============================================================================
+--                  Get Info File Alist
+--============================================================================
+hasNewInfoAlist conname ==
+  (u := getInfoAlist conname) and hasNewInfoText u
+
+hasNewInfoText u ==
+  and/[ATOM op and and/[item is [sig,:alist] and
+    null sig or null atom sig and null atom alist for item in items] for [op,:items] in u]
+
+getInfoAlist conname ==
+  cat? := GETDATABASE(conname,'CONSTRUCTORKIND) = 'category
+  if cat? then conname := INTERN STRCONC(STRINGIMAGE conname,'"&")
+  abb := constructor? conname or return '"not a constructor"
+  fs  := STRCONC(PNAME abb,'".nrlib/info")
+  inStream :=
+    PROBE_-FILE fs => OPEN fs
+    filename := STRCONC('"/spad/int/algebra/",PNAME abb,'".nrlib/info")
+    PROBE_-FILE filename => OPEN filename
+    return nil
+  alist := mySort READ inStream
+  if cat? then
+    [.,dollarName,:.] := GETDATABASE(conname,'CONSTRUCTORFORM)
+    alist := SUBST("$",dollarName,alist)
+  alist
+
+
 
 @
 \eject
@@ -5907,3 +6139,4 @@ mySort u == listSort(function GLESSEQP,u)
 \bibitem{1} nothing
 \end{thebibliography}
 \end{document}
+
diff --git a/src/interp/br-prof.boot.pamphlet b/src/interp/br-prof.boot.pamphlet
deleted file mode 100644
index 58f787b..0000000
--- a/src/interp/br-prof.boot.pamphlet
+++ /dev/null
@@ -1,287 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp br-prof.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>>
-
---====================> WAS b-prof.boot <================================
-
---============================================================================
---                Browser Code for Profiling
---============================================================================
-kciPage(htPage,junk) ==
-  --info alist must have NEW format with [op,:sig] in its CAARs
-  which:= '"operation"
-  htpSetProperty(htPage,'which,which)
-  domname := htpProperty(htPage,'domname)
-  conform := htpProperty(htPage,'conform)
-  heading := ['"Capsule Cross Reference for ",:htpProperty(htPage,'heading)]
-  page := htInitPage(heading,htCopyProplist htPage)
-  conname := opOf conform
-  htpSetProperty(page,'infoAlist,infoAlist := getInfoAlist conname)
-  dbGetExpandedOpAlist page      --expand opAlist "in place"
-  opAlist := kciReduceOpAlist(htpProperty(page,'opAlist),infoAlist)
-  dbShowOperationsFromConform(page,which,opAlist)
-
-kciReduceOpAlist(opAlist,infoAlist) ==
---count opAlist
-  res := [pair for [op,:items] in opAlist | pair] where pair ==
-    u := LASSOC(op,infoAlist) =>
-      y := [x for x in items
-            | x is [sig,:.] and or/[sig = sig1 for [sig1,:.] in u]] => [op,:y]
-      nil
-    nil
-  res
-
-displayInfoOp(htPage,infoAlist,op,sig) ==
-  (sigAlist := LASSOC(op,infoAlist)) and (itemlist := LASSOC(sig,sigAlist)) =>
-     dbShowInfoOp(htPage,op,sig,itemlist)
-  nil
-
-dbShowInfoOp(htPage,op,sig,alist) ==
-  heading := htpProperty(htPage,'heading)
-  domname := htpProperty(htPage,'domname)
-  conform := htpProperty(htPage,'conform)
-  opAlist := htpProperty(htPage,'opAlist)
-  conname := opOf conform
-  kind     := GETDATABASE(conname,'CONSTRUCTORKIND)
-  honestConform :=
-    kind = 'category =>
-      [INTERN STRCONC(PNAME conname,'"&"),"$",:CDR conform]
-    conform
-  faTypes  := CDDAR GETDATABASE(conname,'CONSTRUCTORMODEMAP)
-
-  conArgTypes :=
-    SUBLISLIS(IFCDR conform,TAKE(#faTypes,$FormalMapVariableList),faTypes)
-  conform := htpProperty(htPage,'conform)
-  conname := opOf conform
---argTypes := REVERSE ASSOCRIGHT LASSOC('arguments,alist)
---sig := or/[sig for [sig,:.] in LASSOC(op,opAlist) | rest sig = argTypes]
-  ops := escapeSpecialChars STRINGIMAGE zeroOneConvert op
-  oppart := ['"{\em ", ops, '"}"]
-  head :=
-    sig => [:oppart,'": ",:dbConformGen dbInfoSig sig]
-    oppart
-  heading := [:head,'" from {\sf ",form2HtString conform,'"}"]
-  for u in alist repeat
-    [x,:y] := u
-    x = 'locals => locals := y
-    x = 'arguments => arguments := y
-    fromAlist := [[x,:zeroOneConvertAlist y], :fromAlist]
-  fromAlist :=
-    cons := args := nil
-    for (p := [x,:y]) in fromAlist repeat
-      x = $ => dollar := [[honestConform,:y]]
-      x = 'Rep => rep := [['Rep,:y]]
-      IDENTP x => args := [dbInfoFindCat(conform,conArgTypes,p), :args]
-      cons := [dbInfoTran(x,y), :cons]
-    [:mySort args, :dollar, :rep, :mySort cons]
-  sigAlist  := LASSOC(op,opAlist)
-  item := or/[x for x in sigAlist | x is [sig1,:.] and sig1 = sig] or
-    systemError '"cannot find signature"
-  --item is [sig,pred,origin,exposeFlag,comments]
-  [sig,pred,origin,exposeFlag,doc] := item
-  htpSetProperty(htPage,'fromAlist,fromAlist)
-  htSayHline()
-  htSay('"\center{Cross Reference for definition of {\em ",ops,'"}}\beginmenu ")
---  if arguments then
---    htSay '"\item\menuitemstyle{}{\em arguments:}\newline"
---    dbShowInfoList(arguments,0,false)
-  if locals then
-    htSay '"\item\menuitemstyle{}{\em local variables:}\newline"
-    dbShowInfoList(locals,8192,false)
-  bincount := 2
-  for [con,:fns] in fromAlist repeat
-    htSay '"\item"
-    if IDENTP con then
-        htSay '"\menuitemstyle{} {\em calls to} "
-        if con ^= 'Rep then htSay '"{\em argument} "
-        htSay con
-        if and/[fn is ['origin,orig,.] and
-          (null origin and (origin := orig) or origin = orig) for fn in fns] then
-            htSay '" {\em of type} "
-            bcConform orig
-        buttonForOp := false
-    else
-      htMakePage [['bcLinks,['"\menuitemstyle{}",'"",'dbInfoChoose,bincount]]]
-      htSay '"{\em calls to} "
-      bcConform con
-      buttonForOp := true
-    htSay('":\newline ")
-    dbShowInfoList(fns, bincount * 8192,buttonForOp)
-    bincount := bincount + 1
-  htSay '"\endmenu "
-
-dbShowInfoList(dataItems,count,buttonForOp?) ==
---dataItems are [op,:sig]
-  single? := null rest dataItems
-  htSay '"\table{"
-  for item in dataItems repeat
-    [op,:sig] :=
-       item is ['origin,.,s] =>
-         buttonForOp? := true
-         s
-       item
-    ops := escapeSpecialChars STRINGIMAGE op
-    htSay '"{"
-    if count < 16384 or not buttonForOp? then
-      htSay [ops,'": "]
-      atom sig => bcConform sig
-      bcConform dbInfoSig sig
-    else
-      htMakePage [['bcLinks,[ops,'"",'dbInfoChooseSingle,count]]]
-      htSay '": "
-      if atom sig then htSay sig else
-        bcConform dbInfoSig sig
-    htSay '"}"
-    count := count + 1
-  htSay '"} "
-  count
-
-dbInfoFindCat(conform,conArgTypes,u) ==
-  [argName,:opSigList] := u
-  n := POSITION(argName,IFCDR conform) or systemError()
-  t := conArgTypes . n
-  [argName,:[dbInfoWrapOrigin(x,t) for x in opSigList]]
-
-dbInfoWrapOrigin(x, t) ==
-  [op, :sig] := x
-  origin := dbInfoOrigin(op,sig,t) => ['origin, origin, x]
-  x
-
-dbInfoOrigin(op,sig,t) ==
-  t is ['Join, :r] => or/[dbInfoOrigin(op,sig,x) for x in r]
-  t is ['CATEGORY,:.] => false
-  [sig = sig1 for [sig1,:.] in LASSOC(op, koOps(t,nil))] => t
-  false
-
-dbInfoTran(con,opSigList) == [con,:SUBST("$",con,mySort opSigList)]
-
-zeroOneConvertAlist u == [[zeroOneConvert x,:y] for [x,:y] in u]
-
-dbInfoChoose(htPage,count) ==
-  fromAlist := htpProperty(htPage,'fromAlist)
-  index := count - 2
-  [con, :alist] := fromAlist.index
-  dbInfoChoose1(htPage,con,alist)
-
-dbInfoChooseSingle(htPage,count) ==
-  fromAlist := htpProperty(htPage,'fromAlist)
-  [index, binkey] := DIVIDE(count, 8192)
-  [con, :alist] := fromAlist.(index - 2)
-  item := alist . binkey
-  alist :=
-    item is ['origin,origin,s] =>
-      con := origin
-      [s]
-    [item]
-  dbInfoChoose1(htPage,con,alist)
-
-dbInfoChoose1(htPage,con,alist) ==
-  $conform: local := con
-  opAlist := [pair for x in koOps(con,nil) | pair:=dbInfoSigMatch(x,alist)]
-  page := htInitPage(nil,nil)
-  htpSetProperty(page,'conform,con)
-  htpSetProperty(page,'kind,PNAME GETDATABASE(opOf con,'CONSTRUCTORKIND))
-  dbShowOperationsFromConform(page,'"operation",opAlist)
-
-dbInfoSigMatch(x,alist) ==
-  [op,:sigAlist] := x
-  candidates := [sig for [op1,:sig] in alist | op1 = op] or return nil
-  sigs := [s for s in sigAlist | "or"/[first s = s1 for s1 in candidates] or
-    (s2 := SUBST($conform,"$",s)) and "or"/[first s2 = s1 for s1 in candidates]]
-  sigs and [op,:sigs]
-
-
-dbInfoSig sig ==
-  null rest sig => first sig
-  ['Mapping,:sig]
-
---============================================================================
---                Code to Expand opAlist
---============================================================================
-dbGetExpandedOpAlist htPage ==
-  expand := htpProperty(htPage,'expandOperations)
-  if expand ^= 'fullyExpanded then
-    if null expand then htpSetProperty(htPage,'expandOperations,'lists)
-    opAlist := koOps(htpProperty(htPage,'conform),nil)
-    htpSetProperty(htPage,'opAlist,opAlist)
-    dbExpandOpAlistIfNecessary(htPage,opAlist,'"operation",false,false)
-  htpProperty(htPage,'opAlist)
-
---============================================================================
---                  Get Info File Alist
---============================================================================
-hasNewInfoAlist conname ==
-  (u := getInfoAlist conname) and hasNewInfoText u
-
-hasNewInfoText u ==
-  and/[ATOM op and and/[item is [sig,:alist] and
-    null sig or null atom sig and null atom alist for item in items] for [op,:items] in u]
-
-getInfoAlist conname ==
-  cat? := GETDATABASE(conname,'CONSTRUCTORKIND) = 'category
-  if cat? then conname := INTERN STRCONC(STRINGIMAGE conname,'"&")
-  abb := constructor? conname or return '"not a constructor"
-  fs  := STRCONC(PNAME abb,'".nrlib/info")
-  inStream :=
-    PROBE_-FILE fs => OPEN fs
-    filename := STRCONC('"/spad/int/algebra/",PNAME abb,'".nrlib/info")
-    PROBE_-FILE filename => OPEN filename
-    return nil
-  alist := mySort READ inStream
-  if cat? then
-    [.,dollarName,:.] := GETDATABASE(conname,'CONSTRUCTORFORM)
-    alist := SUBST("$",dollarName,alist)
-  alist
-
-
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
