diff --git a/changelog b/changelog
index df84830..35965bb 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090710 tpd src/axiom-website/patches.html 20090710.01.tpd.patch
+20090710 tpd src/interp/bc-matrix.boot merge bc-misc
+20090710 tpd src/interp/bc-misc.boot removed, merge with bc-matrix
+20090710 tpd src/interp/Makefile remove bc-misc
 20090709 tpd src/axiom-website/patches.html 20090709.01.tpd.patch
 20090709 tpd src/algebra/Makefile move QUATCT2 to bookvol10.4
 20090709 tpd src/algebra/quat.spad deleted
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index e3a61a8..376f72d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1693,5 +1693,7 @@ Makefile, src/algebra/Makefile parallel make help files<br/>
 src/axiom-website/patches.html fixup patch order<br/>
 <a href="patches/20090709.01.tpd.patch">20090709.01.tpd.patch</a>
 quat.spad move QUATCT2 to bookvol10.4<br/>
+<a href="patches/20090710.01.tpd.patch">20090710.01.tpd.patch</a>
+merge bc-matrix and bc-misc<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 785c6f3..2631f4a 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -284,7 +284,7 @@ The {\bf BROBJS} list contains files only used by the hypertex
 browser. These files should probably be autoloaded.
 <<environment>>=
 BROBJS=	${AUTO}/bc-matrix.${O}				\
-	${AUTO}/bc-misc.${O}	${AUTO}/bc-solve.${O}	\
+	${AUTO}/bc-solve.${O}	\
 	${AUTO}/bc-util.${O}				\
 	${AUTO}/ht-util.${O}	${AUTO}/htsetvar.${O}	\
 	${AUTO}/ht-root.${O}	\
@@ -431,7 +431,7 @@ DOCFILES=${DOC}/alql.boot.dvi \
 	 ${DOC}/as.boot.dvi \
 	 ${DOC}/astr.boot.dvi ${DOC}/ax.boot.dvi \
 	 ${DOC}/axext_l.lisp.dvi \
-	 ${DOC}/bc-matrix.boot.dvi ${DOC}/bc-misc.boot.dvi \
+	 ${DOC}/bc-matrix.boot.dvi \
 	 ${DOC}/bc-solve.boot.dvi ${DOC}/bc-util.boot.dvi \
 	 ${DOC}/bits.lisp.dvi ${DOC}/bootfuns.lisp.dvi \
 	 ${DOC}/br-con.boot.dvi \
@@ -5607,55 +5607,6 @@ ${DOC}/bc-matrix.boot.dvi: ${IN}/bc-matrix.boot.pamphlet
 
 @
 
-\subsection{bc-misc.boot}
-<<bc-misc.o (AUTO from OUT)>>=
-${AUTO}/bc-misc.${O}: ${OUT}/bc-misc.${O}
-	@ echo 426 making ${AUTO}/bc-misc.${O} from ${OUT}/bc-misc.${O}
-	@ cp ${OUT}/bc-misc.${O} ${AUTO}
-
-@
-<<bc-misc.o (OUT from MID)>>=
-${OUT}/bc-misc.${O}: ${MID}/bc-misc.clisp 
-	@ echo 427 making ${OUT}/bc-misc.${O} from ${MID}/bc-misc.clisp
-	@ (cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/bc-misc.clisp"' \
-             ':output-file "${OUT}/bc-misc.${O}") (${BYE}))' |  ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/bc-misc.clisp"' \
-             ':output-file "${OUT}/bc-misc.${O}") (${BYE}))' |  ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<bc-misc.clisp (MID from IN)>>=
-${MID}/bc-misc.clisp: ${IN}/bc-misc.boot.pamphlet
-	@ echo 428 making ${MID}/bc-misc.clisp from ${IN}/bc-misc.boot.pamphlet
-	@ (cd ${MID} ; \
-	  ${TANGLE} ${IN}/bc-misc.boot.pamphlet >bc-misc.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "bc-misc.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-	  else \
-	   echo '(progn (boottran::boottocl "bc-misc.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm bc-misc.boot )
-
-@
-<<bc-misc.boot.dvi (DOC from IN)>>=
-${DOC}/bc-misc.boot.dvi: ${IN}/bc-misc.boot.pamphlet 
-	@echo 429 making ${DOC}/bc-misc.boot.dvi \
-                  from ${IN}/bc-misc.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/bc-misc.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} bc-misc.boot ; \
-	rm -f ${DOC}/bc-misc.boot.pamphlet ; \
-	rm -f ${DOC}/bc-misc.boot.tex ; \
-	rm -f ${DOC}/bc-misc.boot )
-
-@
-
 \subsection{bc-solve.boot}
 <<bc-solve.o (AUTO from OUT)>>=
 ${AUTO}/bc-solve.${O}: ${OUT}/bc-solve.${O}
@@ -8054,11 +8005,6 @@ clean:
 <<bc-matrix.clisp (MID from IN)>>
 <<bc-matrix.boot.dvi (DOC from IN)>>
 
-<<bc-misc.o (AUTO from OUT)>>
-<<bc-misc.o (OUT from MID)>>
-<<bc-misc.clisp (MID from IN)>>
-<<bc-misc.boot.dvi (DOC from IN)>>
-
 <<bc-solve.o (AUTO from OUT)>>
 <<bc-solve.o (OUT from MID)>>
 <<bc-solve.clisp (MID from IN)>>
diff --git a/src/interp/bc-matrix.boot.pamphlet b/src/interp/bc-matrix.boot.pamphlet
index 008722a..1f26f27 100644
--- a/src/interp/bc-matrix.boot.pamphlet
+++ b/src/interp/bc-matrix.boot.pamphlet
@@ -167,6 +167,898 @@ bcMatrixGen htPage ==
     STRCONC('"matrix(",matstring,'")")
   systemError nil
   
+--Hypertex commands other than solve and matrix
+
+bcDrawIt2(ind,a,b) == STRCONC('"{}",ind,'"=",a,'"{}..",b,'"{}")
+
+bcIndefiniteIntegrate() ==
+  htInitPage("Indefinite Integration Basic Command",nil)
+  htMakePage '(
+     (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "Enter the {\em function} you would like to integrate:")
+     (text . "\newline\tab{2} ")
+     (bcStrings (45 "1/(x**2 + 6)" integrand EM))
+     (text . "\blankline")
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "Enter the {\em variable of integration}:")
+     (text . "\tab{37}")
+     (bcStrings (10 x symbol SY))
+     (doneButton "Continue" bcIndefiniteIntegrateGen))
+  htShowPage()
+
+bcIndefiniteIntegrateGen htPage ==
+  integrand := htpLabelInputString(htPage,'integrand)
+  var := htpLabelInputString(htPage,'symbol)
+  bcGen STRCONC('"integrate(",integrand,'",",var,")")
+
+
+bcDefiniteIntegrate() ==
+  htInitPage("Definite Integration Basic Command",nil)
+  htMakePage '(
+     (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "Enter the {\em function} you would like to integrate:")
+     (text . "\newline\tab{2} ")
+     (bcStrings (45 "1/(x**2 + 6)" integrand EM))
+     (text . "\blankline")
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "Enter the {\em variable of integration}:")
+     (text . "\tab{37}")
+     (bcStrings (10 x symbol SY))
+     (text . "\blankline")
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "\newline Enter {\em lower limit}:")
+     (radioButtons fromButton
+       ("" "Minus infinity" minusInfinity)
+       (""  (
+         (text . "A finite point:\tab{15}")
+         (bcStrings (10 0 from EM . bcOptional))) fromPoint))
+     (text . "\blankline")
+     (text . "\newline ")
+     (text . "\menuitemstyle{}\tab{2}")
+     (text . "\indent{2}\newline Enter {\em upper limit}:")
+     (radioButtons toButton
+       ("" "Plus infinity" plusInfinity)
+       ("" (
+         (text "A finite point:\tab{15}")
+         (bcStrings (10 y to EM . bcOptional))) toPoint))
+     (doneButton "Continue" bcDefiniteIntegrateGen))
+  htShowPage()
+
+bcDefiniteIntegrateGen htPage ==
+  integrand := htpLabelInputString(htPage,'integrand)
+  var := htpLabelInputString(htPage,'symbol)
+  lowerLimit :=
+    htpButtonValue(htPage,'fromButton) = 'fromPoint =>
+      htpLabelInputString(htPage,'from)
+    '"%minusInfinity"
+  upperLimit :=
+    htpButtonValue(htPage,'toButton) = 'toPoint =>
+      htpLabelInputString(htPage,'to)
+    '"%plusInfinity"
+  varpart := STRCONC(var,'" = ",lowerLimit,'"..",upperLimit)
+  bcGen
+   STRCONC('"integrate(",integrand,'",",varpart,'")")
+
+bcSum() ==
+  htInitPage("Sum Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em function} you would like to sum:")
+    (text . "\newline\tab{2} ")
+    (bcStrings (44 "i**3" summand EM))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em summation index}:")
+    (text . "\tab{36}")
+    (bcStrings (10 i index SY))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the limits of the sum:")
+    (text . "\newline\tab{10}{\em From:}")
+    (bcStrings (10 1 first S))
+    (text . "\tab{32}{\em To:}")
+    (text . "\tab{36}")
+    (bcStrings (10  n  last S))
+    (doneButton "Continue" bcSumGen))
+  htShowPage()
+
+bcSumGen htPage ==
+  mand := htpLabelInputString(htPage,'summand)
+  index := htpLabelInputString(htPage,'index)
+  first := htpLabelInputString(htPage,'first)
+  last := htpLabelInputString(htPage,'last)
+  bcGen STRCONC('"sum(",mand,'",",index,'" = ",first,'"..",last,'")")
+
+bcProduct() ==
+  htInitPage("Product Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+    (text . "Enter the {\em function} you would like to compute the product of:")
+    (inputStrings ("" "" 45 "i**2" mand EM))
+    (text . "\vspace{1}\newline")
+    (inputStrings ("Enter the {\em index of the product}:" "" 5 i index SY))
+    (text . "\vspace{1}\newline Enter the limits of the index:")
+    (inputStrings
+      ("\newline{\em From:}" "" 10 "1" first  EM)
+      ("{\em To:}\space{2}" "" 10  "n" last   EM))
+    (doneButton "Continue" bcProductGen))
+  htShowPage()
+
+bcProductGen htPage ==
+  mand := htpLabelInputString(htPage,'mand)
+  index := htpLabelInputString(htPage,'index)
+  first := htpLabelInputString(htPage,'first)
+  last := htpLabelInputString(htPage,'last)
+  bcGen STRCONC('"product(",mand,'",",index,'",",first,'",",last,'")")
+
+bcDifferentiate() ==
+  htInitPage("Differentiate Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em function} you want to differentiate:")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "sin(x*y)" diffand EM))
+    (text . "\blankline")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "\newline List the {\em variables} you want to differentiate with respect to?")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "x y" variables S . quoteString))
+    (text . "\blankline")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "\newline List the number of {\em times} you want to differentiate with respect to each variable (leave blank if once for each)")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "1 2" times S . quoteString)))
+  htMakeDoneButton('"Continue", 'bcDifferentiateGen)
+  htShowPage()
+
+bcDifferentiateGen htPage ==
+  mand := htpLabelInputString(htPage,'diffand)
+  varlist := bcString2WordList htpLabelInputString(htPage,'variables)
+  indexList := bcString2WordList htpLabelInputString(htPage,'times)
+  varpart :=
+    #varlist > 1 => bcwords2liststring varlist
+    first varlist
+  indexpart :=
+    null indexList => nil
+    null rest indexList => first indexList
+    #indexList = #varlist => bcwords2liststring indexList
+    bcError '"You must say how many times you want to differentiate with respect to each variable---or leave that entry blank"
+  lastPart :=
+    indexpart => STRCONC('",",indexpart,'")")
+    '")"
+  bcGen STRCONC('"differentiate(",mand,'",",varpart,lastPart)
+
+bcDraw() ==
+  htInitPage('"Draw Basic Command",nil)
+  bcHt '"What would you like to draw?"
+  bcHt '"\newline\centerline{{\em Two Dimensional Plots}}\newline"
+  bcHt '"\lispdownlink{A function of one variable}{(|bcDraw2Dfun|)}"
+  bcHt '"\space{2}y = f(x)\newline"
+  bcHt '"\lispdownlink{A parametrically defined curve}{(|bcDraw2Dpar|)}"
+  bcHt '"\space{2}(x(t), y(t))\newline"
+  bcHt '"\lispdownlink{A solution to a polynomial equation}{(|bcDraw2DSolve|)}"
+  bcHt '"\space{2} p(x,y) = 0\newline"
+  bcHt '"\vspace{1}\newline "
+  bcHt '"\centerline{{\em Three Dimensional Surfaces}}\newline\newline"
+  bcHt '"\lispdownlink{A function of two variables}{(|bcDraw3Dfun|)}"
+  bcHt '"\space{2} z = f(x,y)\newline"
+  bcHt '"\lispdownlink{A parametrically defined tube}{(|bcDraw3Dpar|)}"
+  bcHt '"\space{2}(x(t), y(t), z(t))\newline"
+  bcHt '"\lispdownlink{A parameterically defined surface}{(|bcDraw3Dpar1|)}"
+  bcHt '"\space{2}(x(u,v), y(u,v), z(u,v))\newline"
+  htShowPage()
+
+
+bcDraw2Dfun() ==
+  htInitPage('"Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Drawing {\em y = f(x)}}\newline "
+      "\centerline{where {\em y} is the dependent variable and}\newline "
+      "\centerline{where {\em x} is the independent variable}\vspace{1}\newline "
+      "\menuitemstyle{}\tab{2}What {\em function} f would you like to draw?\newline\tab{2}")
+    (bcStrings (55 "x*cos(x)" function EM))
+    (text . "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em dependent} variable:")
+    (bcStrings (6 y dependent SY))
+    (text . "\newline\vspace{1}\newline ")
+    (text . "\menuitemstyle{}\tab{2}Enter {\em independent} variable and {\em range}:\newline\tab{2} ")
+    (text . "{\em Variable:}")
+    (bcStrings (6 x ind SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 0 from1 F))
+    (text . "{\em to:}")
+    (bcStrings (9 30 to1 F))
+    (text
+      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "Optionally enter a {\em title} for your curve:"
+      )
+    (bcStrings (15 "y = x*cos(x)" title S))
+    (text . "\indent{0}")
+    (doneButton "Continue" bcDraw2DfunGen)
+    (text . "{}"))
+  htShowPage()
+
+bcDraw2DfunGen htPage ==
+  fun := htpLabelInputString(htPage,'function)
+  dep := htpLabelInputString(htPage,'dependent)
+  ind := htpLabelInputString(htPage,'ind)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  title := htpLabelInputString(htPage,'title)
+  if (title ^= '"") then
+    titlePart := STRCONC('"{}",'"title ==_"",title,'"_"")
+    bcFinish('"draw",fun,bcDrawIt2(ind,from1,to1),titlePart)
+  else
+    bcFinish('"draw",fun,bcDrawIt2(ind,from1,to1))
+
+
+bcDraw2Dpar() ==
+  htInitPage('"Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Drawing a parametrically defined curve:}\newline "
+      "\centerline{{\em ( f1(t), f2(t) )}}\newline "
+      "\centerline{in terms of two functions {\em f1} and {\em f2}}"
+      "\centerline{and an independent variable {\em t}}\vspace{1}\newline"
+      "\menuitemstyle{}\tab{2}Enter the two {\em functions:}")
+    (text . "\newline\tab{2}{\em Function 1:}")
+    (bcStrings (44 "-9*sin(4*t/5)" function1 EM))
+    (text . "\newline\tab{2}{\em Function 2:}")
+    (bcStrings (44 "8*sin(t)" function2 EM))
+    (text ."\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em independent} variable and range:\newline\tab{2} ")
+    (text . "{\em Variable:}")
+    (bcStrings (6 t ind SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 "-5*\%pi" from1 F))
+    (text . "{\em to:}")
+    (bcStrings (9 "5*\%pi" to1 F))
+    (text
+      "\vspace{1}\newline\menuitemstyle{}\tab{2}"
+      "Optionally enter a {\em title} for your curve:")
+    (bcStrings (15 "Lissajous" title S))
+    (text . "\indent{0}")
+    (doneButton "Continue" bcDraw2DparGen))
+  htShowPage()
+
+bcDraw2DparGen htPage ==
+  fun1 := htpLabelInputString(htPage,'function1)
+  fun2 := htpLabelInputString(htPage,'function2)
+  ind := htpLabelInputString(htPage,'ind)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  title := htpLabelInputString(htPage,'title)
+  curvePart := STRCONC('"curve(",'"{}",fun1,'",{}",fun2,'")")
+  if (title ^= '"") then
+    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
+    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),titlePart)
+  else
+    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1))
+
+bcDraw2DSolve() ==
+  htInitPage('"Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Plotting the solution to {\em p(x,y) = 0}, where} "
+      "\centerline{{\em p} is a polynomial in two variables {\em x} and {\em y}}"
+      "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter the {\em polynomial} p:"
+      "\newline\tab{2}")
+    (bcStrings (40 "y**2+7*x*y-(x**3+16*x)" function EM))
+    (text . "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter the {\em variables}:")
+    (text . "\newline\tab{2}{\em Variable 1:} ")
+    (bcStrings (4 x independent1 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 -15 from1 F))
+    (text . "{\em to:}")
+    (bcStrings (9 10 to1 F))
+    (text . "\newline\tab{2}{\em Variable 2:} ")
+    (bcStrings (4 y independent2 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 -10 from2 F))
+    (text . "{\em to:}")
+    (bcStrings (9 50 to2 F))
+    (text
+      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "Optionally enter a {\em title} for your curve:")
+    (bcStrings (15 "" title S))
+    (text . "\indent{0}"))
+  htMakeDoneButton('"Continue",'bcDraw2DSolveGen)
+  htShowPage()
+
+bcDraw2DSolveGen htPage ==
+  fun := htpLabelInputString(htPage,'function)
+  ind1 := htpLabelInputString(htPage,'independent1)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  ind2 := htpLabelInputString(htPage,'independent2)
+  from2 := htpLabelInputString(htPage,'from2)
+  to2 := htpLabelInputString(htPage,'to2)
+  title := htpLabelInputString(htPage,'title)
+  clipPart := STRCONC('"{}",'"range==[{}",from1,'"..",to1,",{}",from2,'"..",to2,'"]")
+  if (title ^= '"") then
+    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
+    bcFinish('"draw",STRCONC(fun,'" = 0 "),ind1,ind2,clipPart,titlePart)
+  else
+    bcFinish('"draw",STRCONC(fun,'" = 0 "),ind1,ind2,clipPart)
+
+bcDraw3Dfun() ==
+  htInitPage('"Three Dimensional Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Drawing {\em z = f(x,y)}}\newline "
+      "\centerline{where {\em z} is the dependent variable and}\newline "
+      "\centerline{where {\em x, y} are the independent variables}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "What {\em function} f which you like to draw?\newline\tab{2}")
+    (bcStrings (55 "exp(cos(x-y)-sin(x*y))-2" function EM))
+    (text . "\newline\menuitemstyle{}\tab{2}Enter {\em dependent} variable:")
+    (bcStrings (6 z dependent SY))
+    (text
+      "\vspace{1}\newline\menuitemstyle{}\tab{2}"
+      "Enter {\em independent} variables and ranges:\newline\tab{2} "
+      "{\em Variable:}")
+    (bcStrings (6 x independent1 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 -5 from1 F))
+    (text . "{\em to:}")
+    (bcStrings (9 5 to1 F))
+    (text . "\newline\tab{2}{\em Variable:}")
+    (bcStrings (6 y independent2 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 -5 from2 F))
+    (text . "{\em to:}")
+    (bcStrings (9 5 to2 F))
+    (text
+      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "Optionally enter a {\em title} for your surface:")
+    (bcStrings (15 "" title S))
+    (text . "\indent{0}")
+    (doneButton "Continue" bcDraw3DfunGen))
+  htShowPage()
+
+bcDraw3DfunGen htPage ==
+  fun := htpLabelInputString(htPage,'function)
+  dep := htpLabelInputString(htPage,'dependent)
+  ind1 := htpLabelInputString(htPage,'independent1)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  ind2 := htpLabelInputString(htPage,'independent2)
+  from2 := htpLabelInputString(htPage,'from2)
+  to2 := htpLabelInputString(htPage,'to2)
+  title := htpLabelInputString(htPage,'title)
+  if (title ^= '"") then
+    titlePart := (title = '"" => nil;STRCONC('"{}",'"title ==_"",title,'"_""))
+    bcFinish('"draw",fun,bcDrawIt2(ind1,from1,to1),bcDrawIt2(ind2,from2,to2),titlePart)
+  else
+    bcFinish('"draw",fun,bcDrawIt2(ind1,from1,to1),bcDrawIt2(ind2,from2,to2))
+
+bcDraw3Dpar() ==
+  htInitPage('"Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Drawing a parametrically defined curve:"
+      "{\em ( f1(t), f2(t), f3(t) )}}\newline "
+      "\centerline{in terms of three functions {\em f1}, {\em f2}, and {\em f3}}\newline "
+      "\centerline{and an independent variable {\em t}}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "Enter the three {\em functions} of the independent variable:")
+    (text . "\newline\tab{2}{\em Function f1:}")
+    (bcStrings (42 "1.3*cos(2*t)*cos(4*t) + sin(4*t)*cos(t)" function1 EM))
+    (text . "\newline\tab{2}{\em Function f2:}")
+    (bcStrings  (42 "1.3*sin(2*t)*cos(4*t) - sin(4*t)*sin(t)" function2 EM))
+    (text . "\newline\tab{2}{\em Function f3:}")
+    (bcStrings  (42 "2.5*cos(4*t)" function3 EM))
+    (text ."\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em independent} variable and range:\newline\tab{2} ")
+    (text ."{\em Variable:}")
+    (bcStrings (6 t ind SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 0 from1 F))
+    (text "{\em to:}")
+    (bcStrings (9 "4*\%pi" to1 F))
+    (text
+      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
+      "Optionally enter a {\em title} for your surface:")
+    (bcStrings (15 "knot" title S))
+    (text . "\indent{0}")
+    (doneButton "Continue" bcDraw3DparGen))
+  htShowPage()
+
+bcDraw3DparGen htPage ==
+  fun1 := htpLabelInputString(htPage,'function1)
+  fun2 := htpLabelInputString(htPage,'function2)
+  fun3 := htpLabelInputString(htPage,'function3)
+  ind := htpLabelInputString(htPage,'ind)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  title := htpLabelInputString(htPage,'title)
+  curvePart := STRCONC('"curve(",'"{}",fun1,'",{}",fun2,'",{}",fun3,'")")
+  tubePart := '"{}tubeRadius==.25,{}tubePoints==16"
+  if (title ^= '"") then
+    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
+    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),tubePart,titlePart)
+  else
+    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),tubePart)
+
+bcDraw3Dpar1() ==
+  htInitPage('"Draw Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text
+      "\centerline{Drawing a parametrically defined surface:}\newline "
+      "\centerline{{\em ( f1(u,v), f2(u,v), f3(u,v) )}}\newline "
+      "\centerline{in terms of three functions {\em f1}, {\em f2}, and {\em f3}}\newline "
+      "\centerline{and two independent variables {\em u} and {\em v}}\vspace{1}\newline\menuitemstyle{}\tab{2}"
+      "Enter the three {\em functions} of the independent variables:")
+    (text . "\newline\tab{2}")
+    (text . "{\em Function f1:}")
+    (bcStrings (43 "u*sin(v)" function1 EM))
+    (text . "\newline\tab{2}")
+    (text . "{\em Function f2:}")
+    (bcStrings (43 "v*cos(u)" function2 EM))
+    (text . "\newline\tab{2}")
+    (text . "{\em Function f3:}")
+    (bcStrings (43 "u*cos(v)" function3 EM))
+    (text . "\newline\menuitemstyle{}\tab{2}Enter independent {\em variables} and ranges:")
+    (text . "\newline\tab{2}")
+    (text . "{\em Variable 1:}")
+    (bcStrings (5 u ind1 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 "-\%pi" from1 F))
+    (text . "{\em to:}")
+    (bcStrings (9 "\%pi" to1 F))
+    (text . "\newline\tab{2}")
+    (text . "{\em Variable 2:}")
+    (bcStrings (5 v ind2 SY))
+    (text . "ranges {\em from:}")
+    (bcStrings (9 "-\%pi/2" from2 F))
+    (text . "{\em to:}")
+    (bcStrings (9 "\%pi/2" to2 F))
+    (text
+      "\indent{0}\newline\menuitemstyle{}\tab{2} "
+      "Optionally enter a {\em title} for your surface:")
+    (bcStrings (15 "surface" title S))
+    (text . "\indent{0}"))
+  htMakeDoneButton ('"Continue",'bcDraw3Dpar1Gen)
+  htShowPage()
+
+bcDraw3Dpar1Gen htPage ==
+  fun1 := htpLabelInputString(htPage,'function1)
+  fun2 := htpLabelInputString(htPage,'function2)
+  fun3 := htpLabelInputString(htPage,'function3)
+  ind1 := htpLabelInputString(htPage,'ind1)
+  from1 := htpLabelInputString(htPage,'from1)
+  to1 := htpLabelInputString(htPage,'to1)
+  ind2 := htpLabelInputString(htPage,'ind2)
+  from2 := htpLabelInputString(htPage,'from2)
+  to2 := htpLabelInputString(htPage,'to2)
+  title := htpLabelInputString(htPage,'title)
+  r1 := bcDrawIt2(ind1,from1,to1)
+  r2 := bcDrawIt2(ind2,from2,to2)
+  surfacePart := STRCONC('"surface(",'"{}",fun1,'",{}",fun2,'",{}",fun3,'")")
+  if (title ^= '"") then
+    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
+    bcFinish('"draw",surfacePart,r1,r2,titlePart)
+  else
+    bcFinish('"draw",surfacePart,r1,r2)
+
+bcSeries() ==
+  htInitPage('"Series Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+   (text .  "Create a series by: ")
+   (text . "\beginmenu")
+   (text . "\item ")
+   (bcLinks ("\menuitemstyle{Expansion}" "" bcSeriesExpansion NILl))
+   (text . "\tab{11}Expand a function in a series around a point")
+   (text . "\item ")
+   (bcLinks ("\menuitemstyle{Formula}"  "" bcSeriesByFormula NIL))
+   (text . "\tab{11}Give a formula for the {\em i}'th coefficient")
+   (text . "\endmenu"))
+  htShowPage()
+
+bcSeriesExpansion(a,b) ==
+  htInitPage('"Series Expansion Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain EEM (Expression $EmptyMode))
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em function} you want to expand in a power series")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "log(cot(x))" function EM))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em power series variable}")
+    (text . "\tab{49}")
+    (bcStrings (8 x variable SY))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em point} about which you want to expand")
+    (text . "\tab{49}")
+    (bcStrings (8 "\%pi/2" point EM)))
+  htMakeDoneButton('"Continue",'bcSeriesExpansionGen)
+  htShowPage()
+
+bcSeriesExpansionGen htPage ==
+  fun := htpLabelInputString(htPage,'function)
+  var := htpLabelInputString(htPage,'variable)
+  point := htpLabelInputString(htPage,'point)
+  terms := htpLabelInputString(htPage,'numberOfTerms)
+  bcFinish("series",fun,STRCONC(var,'" = ",point))
+
+bcSeriesByFormula(a,b) ==
+  htInitPage('"Power Series Basic Command",nil)
+  htMakePage '(
+    (text . "Select the kind of power series you want to create:")
+    (text . "\beginmenu")
+    (text . "\item ")
+    (bcLinks ("\menuitemstyle{Taylor Series}" "" bcTaylorSeries taylor))
+    (text . "\newline Series where the exponent ranges over the integers from a {\em non-negative integer} value to plus infinity by an arbitrary {\em positive integer} step size")
+    (text . "\item ")
+    (bcLinks ("\menuitemstyle{Laurent Series}" "" bcLaurentSeries laurent))
+    (text . "\newline Series where the exponent ranges from an arbitrary {\em integer} value to plus infinity by an arbitrary {\em positive integer} step size")
+    (text . "\item ")
+    (bcLinks ("\menuitemstyle{Puiseux Series}" "" bcPuiseuxSeries puiseux))
+    (text . "\newline Series where the exponent ranges from an arbitrary {\em rational value} to plus infinity by an arbitrary {\em positive rational number} step size")
+    (text . "\endmenu"))
+  htShowPage()
+
+bcTaylorSeries(a,b) ==
+  htInitPage('"Taylor Series Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain EEM (Expression $EmptyMode))
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the formula for the general coefficient of the series")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "1/factorial(i)" formula EM))
+    (text . "\blankline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em index variable} for your formula")
+    (text . "\tab{49}")
+    (bcStrings (8 i index SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em power series variable}")
+    (text . "\tab{49}")
+    (bcStrings (8 x variable SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em point} about which you want to expand")
+    (text . "\tab{49}")
+    (bcStrings (8 0 point EM))
+    (text . "\blankline ")
+    (text ."For Taylor Series, the exponent of the power series variable ranges  from an {\em initial value}, an arbitrary non-negative integer, to plus infinity; the {\em step size} is any positive integer.")
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em initial value} of the index (an integer)")
+    (text . "\tab{49}")
+    (bcStrings (8 "0" min I))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em step size} (a positive integer)")
+    (text . "\tab{49}")
+    (bcStrings (8 "1" step PI))
+    (doneButton "Continue" bcTaylorSeriesGen))
+  htShowPage()
+
+bcSeriesByFormulaGen htPage == bcNotReady()
+
+bcLaurentSeries(a,b) ==
+  htInitPage('"Laurent Series Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain EEM (Expression $EmptyMode))
+       (isDomain S (String))
+       (isDomain I (Integer))
+       (isDomain PI (PositiveInteger))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the formula for the general coefficient of the series")
+    (text . "\newline\tab{2} ")
+    (bcStrings (55 "(-1)**(n - 1)/(n + 2)" formula EM))
+    (text . "\vspace{1}\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em index variable} for your formula")
+    (text . "\tab{49}")
+    (bcStrings (8 n index SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em power series variable}")
+    (text . "\tab{49}")
+    (bcStrings (8 x variable SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em point} about which you want to expand")
+    (text . "\tab{49}")
+    (bcStrings (8 0 point F))
+    (text . "\blankline")
+    (text . "\newline For Laurent Series, the exponent of the power series variable ranges from an {\em initial value}, an arbitrary integer value, to plus infinity; the {\em step size} is any positive integer.")
+    (text . "\blankline")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em initial value} of the index (an integer)")
+    (text . "\tab{49}")
+    (bcStrings (8 "-1" min I))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em step size} (a positive integer)")
+    (text . "\tab{49}")
+    (bcStrings (8 "1" step PI))
+    (doneButton "Continue" bcLaurentSeriesGen))
+  htShowPage()
+
+bcPuiseuxSeries(a,b) ==
+  htInitPage('"Puiseux Series Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain EEM (Expression $EmptyMode))
+       (isDomain S (String))
+       (isDomain I (Integer))
+       (isDomain PI (PositiveInteger))
+       (isDOmain RN (Fraction (Integer)))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text ."Enter the {\em formula} for the general coefficient of the series")
+    (text . "\newline\tab{2} ")
+    (bcStrings(55 "(-1)**((3*n - 4)/6)/factorial(n - 1/3)" formula EM))
+    (text . "\vspace{1}\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em index variable} for your formula")
+    (text . "\tab{49}")
+    (bcStrings (8 n index SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em power series variable}")
+    (text . "\tab{49}")
+    (bcStrings (8 x variable SY))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em point} about which you want to expand")
+    (text . "\tab{49}")
+    (bcStrings (8 0 point F))
+    (text . "\blankline ")
+    (text . "For Puiseux Series, the exponent of the power series variable ranges from an {\em initial value}, an arbitary rational number, to plus infinity; the {\em step size} is an any positive rational number.")
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em initial value} of index (a rational number)")
+    (text . "\tab{51}")
+    (bcStrings (6 "4/3" min RN))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em step size} (a positive rational number)")
+    (text . "\tab{51}")
+    (bcStrings (6 "2" step RN))
+    (doneButton "Continue" bcPuiseuxSeriesGen))
+  htShowPage()
+
+bcTaylorSeriesGen htPage == bcSeriesGen(htPage)
+
+bcLaurentSeriesGen htPage ==
+  bcSeriesGen(htPage)
+
+bcPuiseuxSeriesGen htPage ==
+  bcSeriesGen(htPage)
+
+bcSeriesGen(htPage) ==
+  step:= htpLabelInputString(htPage,'step)
+  min := htpLabelInputString(htPage,'min)
+  formula := htpLabelInputString(htPage,'formula)
+  index   := htpLabelInputString(htPage,'index)
+  var := htpLabelInputString(htPage,'variable)
+  point := htpLabelInputString(htPage,'point)
+  varPart := STRCONC(var,'" = ",point)
+  minPart := STRCONC(min,'"..")
+  bcFinish('"series",STRCONC(index,'" +-> ",formula),varPart,minPart,step)
+
+bcLimit() ==
+  htInitPage('"Limit Basic Command",nil)
+  htMakePage '(
+   (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain SY (Symbol)))
+   (text . "What kind of limit do you want to compute? ")
+   (text . "\blankline ")
+   (text . "\beginmenu")
+   (text . "\item ")
+   (bcLinks ("\menuitemstyle{A real limit?}" "" bcRealLimit real))
+   (text . "\indentrel{17}\tab{0}")
+   (text . "The limit as the variable approaches a {\em real} value along the real axis")
+   (text . "\indentrel{-17}")
+   (text . "\item ")
+   (text . "\blankline ")
+   (bcLinks ("\menuitemstyle{A complex limit?}" "" bcComplexLimit complex))
+   (text . "\indentrel{17}\tab{0}")
+   (text . "The limit as the variable approaches a {\em complex} value along any path in the complex plane")
+   (text . "\indentrel{-17}")
+   (text . "\endmenu")
+    )
+  htShowPage()
+
+bcRealLimit(a,b) ==
+  htInitPage('"Real Limit Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+       (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em function} you want to compute the limit of:")
+    (text . "\newline\tab{2} ")
+    (bcStrings (45 "x*sin(1/x)" expression EM))
+    (text . "\blankline")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the name of the {\em variable}: ")
+    (text . "\tab{41}")
+    (bcStrings (6 x variable SY))
+    (text . "\blankline")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Compute the limit at")
+    (radioButtons location
+      ("A finite point:" (
+        (text . "\tab{33}")
+        (bcStrings (6 0 point F))) finitePoint)
+      ("Plus infinity" "" plusInfinity)
+      ("Minus infinity" "" minusInfinity))
+    (doneButton "Continue" bcRealLimitGen))
+  htShowPage()
+
+bcRealLimitGen htPage ==
+  (p := htpButtonValue(htPage,'location)) ^= 'finitePoint =>
+    fun := htpLabelInputString(htPage,'expression)
+    var := htpLabelInputString(htPage,'variable)
+    loc :=
+      p = 'plusInfinity => '"%plusInfinity"
+      '"%minusInfinity"
+    bcFinish('"limit",fun,STRCONC(var,'" = ",loc))
+  page := htInitPage('"Real Limit Basic Command",nil)
+  htMakePage '(
+    (text . "Compute the limit")
+    (lispLinks
+       ("\menuitemstyle{From both directions}" "" bcRealLimitGen1 both)
+       ("\menuitemstyle{From the right}" "" bcRealLimitGen1 right)
+       ("\menuitemstyle{From the left}" "" bcRealLimitGen1 left)))
+  htpSetProperty(page,'fun,htpLabelInputString(htPage,'expression))
+  htpSetProperty(page,'var,htpLabelInputString(htPage,'variable))
+  htpSetProperty(page,'loc,htpLabelInputString(htPage,'point))
+  htShowPage()
+
+bcRealLimitGen1(htPage,key) ==
+  direction :=
+    key = 'right => '"_"right_""
+    key = 'left => '"_"left_""
+    nil
+  fun := htpProperty(htPage,'fun)
+  var := htpProperty(htPage,'var)
+  loc := htpProperty(htPage,'loc)
+  varPart := STRCONC(var,'" = ",loc)
+  bcFinish('"limit",fun,varPart,direction)
+
+bcComplexLimit(a,b) ==
+  htInitPage('"Complex Limit Basic Command",nil)
+  htMakePage '(
+    (domainConditions
+        (isDomain EM $EmptyMode)
+       (isDomain S (String))
+       (isDomain F (Float))
+       (isDomain SY (Symbol)))
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the {\em function} you want to compute the limit of:")
+    (text . "\newline\tab{2} ")
+    (bcStrings (40 "sin(a*x)/tan(b*x)" expression EM))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Enter the name of the {\em variable}: ")
+    (text . "\tab{37}")
+    (bcStrings (5 x variable SY))
+    (text . "\blankline ")
+    (text . "\newline ")
+    (text . "\menuitemstyle{}\tab{2}")
+    (text . "Compute the limit at")
+    (radioButtons location
+      ("A finite point:" (
+       (text . "\newline\space{0}Real part:\space{3}")
+       (bcStrings (20 0 real F))
+       (text . "\newline Complex part:")
+       (bcStrings (20 0 complex F))) finitePoint)
+      ("Complex infinity" "" complexInfinity))
+     (doneButton "Continue" bcComplexLimitGen))
+  htShowPage()
+
+bcComplexLimitGen htPage ==
+  fun := htpLabelInputString(htPage,'expression)
+  var := htpLabelInputString(htPage,'variable)
+  loc :=
+    (p := htpButtonValue(htPage,'location)) = 'finitePoint =>
+      real := htpLabelInputString(htPage,'real)
+      comp := htpLabelInputString(htPage,'complex)
+      complexPart :=
+        comp = '"0" => '""
+        comp = '"1" => '"%i"
+        STRCONC(comp,'"*%i")
+      real = '"0" =>
+        complexPart = '"" => "0"
+        complexPart
+      complexPart = '"" => real
+      STRCONC(real,'" + ",complexPart)
+    '"%infinity"
+  varPart := STRCONC(var,'" = ",loc)
+  bcFinish('"complexLimit",fun,varPart)
+
+
 @
 \eject
 \begin{thebibliography}{99}
diff --git a/src/interp/bc-misc.boot.pamphlet b/src/interp/bc-misc.boot.pamphlet
deleted file mode 100644
index 8e879ad..0000000
--- a/src/interp/bc-misc.boot.pamphlet
+++ /dev/null
@@ -1,946 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp bc-misc.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>>
-
---Hypertex commands other than solve and matrix
-
-bcDrawIt2(ind,a,b) == STRCONC('"{}",ind,'"=",a,'"{}..",b,'"{}")
-
-bcIndefiniteIntegrate() ==
-  htInitPage("Indefinite Integration Basic Command",nil)
-  htMakePage '(
-     (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "Enter the {\em function} you would like to integrate:")
-     (text . "\newline\tab{2} ")
-     (bcStrings (45 "1/(x**2 + 6)" integrand EM))
-     (text . "\blankline")
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "Enter the {\em variable of integration}:")
-     (text . "\tab{37}")
-     (bcStrings (10 x symbol SY))
-     (doneButton "Continue" bcIndefiniteIntegrateGen))
-  htShowPage()
-
-bcIndefiniteIntegrateGen htPage ==
-  integrand := htpLabelInputString(htPage,'integrand)
-  var := htpLabelInputString(htPage,'symbol)
-  bcGen STRCONC('"integrate(",integrand,'",",var,")")
-
-
-bcDefiniteIntegrate() ==
-  htInitPage("Definite Integration Basic Command",nil)
-  htMakePage '(
-     (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "Enter the {\em function} you would like to integrate:")
-     (text . "\newline\tab{2} ")
-     (bcStrings (45 "1/(x**2 + 6)" integrand EM))
-     (text . "\blankline")
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "Enter the {\em variable of integration}:")
-     (text . "\tab{37}")
-     (bcStrings (10 x symbol SY))
-     (text . "\blankline")
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "\newline Enter {\em lower limit}:")
-     (radioButtons fromButton
-       ("" "Minus infinity" minusInfinity)
-       (""  (
-         (text . "A finite point:\tab{15}")
-         (bcStrings (10 0 from EM . bcOptional))) fromPoint))
-     (text . "\blankline")
-     (text . "\newline ")
-     (text . "\menuitemstyle{}\tab{2}")
-     (text . "\indent{2}\newline Enter {\em upper limit}:")
-     (radioButtons toButton
-       ("" "Plus infinity" plusInfinity)
-       ("" (
-         (text "A finite point:\tab{15}")
-         (bcStrings (10 y to EM . bcOptional))) toPoint))
-     (doneButton "Continue" bcDefiniteIntegrateGen))
-  htShowPage()
-
-bcDefiniteIntegrateGen htPage ==
-  integrand := htpLabelInputString(htPage,'integrand)
-  var := htpLabelInputString(htPage,'symbol)
-  lowerLimit :=
-    htpButtonValue(htPage,'fromButton) = 'fromPoint =>
-      htpLabelInputString(htPage,'from)
-    '"%minusInfinity"
-  upperLimit :=
-    htpButtonValue(htPage,'toButton) = 'toPoint =>
-      htpLabelInputString(htPage,'to)
-    '"%plusInfinity"
-  varpart := STRCONC(var,'" = ",lowerLimit,'"..",upperLimit)
-  bcGen
-   STRCONC('"integrate(",integrand,'",",varpart,'")")
-
-bcSum() ==
-  htInitPage("Sum Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em function} you would like to sum:")
-    (text . "\newline\tab{2} ")
-    (bcStrings (44 "i**3" summand EM))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em summation index}:")
-    (text . "\tab{36}")
-    (bcStrings (10 i index SY))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the limits of the sum:")
-    (text . "\newline\tab{10}{\em From:}")
-    (bcStrings (10 1 first S))
-    (text . "\tab{32}{\em To:}")
-    (text . "\tab{36}")
-    (bcStrings (10  n  last S))
-    (doneButton "Continue" bcSumGen))
-  htShowPage()
-
-bcSumGen htPage ==
-  mand := htpLabelInputString(htPage,'summand)
-  index := htpLabelInputString(htPage,'index)
-  first := htpLabelInputString(htPage,'first)
-  last := htpLabelInputString(htPage,'last)
-  bcGen STRCONC('"sum(",mand,'",",index,'" = ",first,'"..",last,'")")
-
-bcProduct() ==
-  htInitPage("Product Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-    (text . "Enter the {\em function} you would like to compute the product of:")
-    (inputStrings ("" "" 45 "i**2" mand EM))
-    (text . "\vspace{1}\newline")
-    (inputStrings ("Enter the {\em index of the product}:" "" 5 i index SY))
-    (text . "\vspace{1}\newline Enter the limits of the index:")
-    (inputStrings
-      ("\newline{\em From:}" "" 10 "1" first  EM)
-      ("{\em To:}\space{2}" "" 10  "n" last   EM))
-    (doneButton "Continue" bcProductGen))
-  htShowPage()
-
-bcProductGen htPage ==
-  mand := htpLabelInputString(htPage,'mand)
-  index := htpLabelInputString(htPage,'index)
-  first := htpLabelInputString(htPage,'first)
-  last := htpLabelInputString(htPage,'last)
-  bcGen STRCONC('"product(",mand,'",",index,'",",first,'",",last,'")")
-
-bcDifferentiate() ==
-  htInitPage("Differentiate Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em function} you want to differentiate:")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "sin(x*y)" diffand EM))
-    (text . "\blankline")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "\newline List the {\em variables} you want to differentiate with respect to?")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "x y" variables S . quoteString))
-    (text . "\blankline")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "\newline List the number of {\em times} you want to differentiate with respect to each variable (leave blank if once for each)")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "1 2" times S . quoteString)))
-  htMakeDoneButton('"Continue", 'bcDifferentiateGen)
-  htShowPage()
-
-bcDifferentiateGen htPage ==
-  mand := htpLabelInputString(htPage,'diffand)
-  varlist := bcString2WordList htpLabelInputString(htPage,'variables)
-  indexList := bcString2WordList htpLabelInputString(htPage,'times)
-  varpart :=
-    #varlist > 1 => bcwords2liststring varlist
-    first varlist
-  indexpart :=
-    null indexList => nil
-    null rest indexList => first indexList
-    #indexList = #varlist => bcwords2liststring indexList
-    bcError '"You must say how many times you want to differentiate with respect to each variable---or leave that entry blank"
-  lastPart :=
-    indexpart => STRCONC('",",indexpart,'")")
-    '")"
-  bcGen STRCONC('"differentiate(",mand,'",",varpart,lastPart)
-
-bcDraw() ==
-  htInitPage('"Draw Basic Command",nil)
-  bcHt '"What would you like to draw?"
-  bcHt '"\newline\centerline{{\em Two Dimensional Plots}}\newline"
-  bcHt '"\lispdownlink{A function of one variable}{(|bcDraw2Dfun|)}"
-  bcHt '"\space{2}y = f(x)\newline"
-  bcHt '"\lispdownlink{A parametrically defined curve}{(|bcDraw2Dpar|)}"
-  bcHt '"\space{2}(x(t), y(t))\newline"
-  bcHt '"\lispdownlink{A solution to a polynomial equation}{(|bcDraw2DSolve|)}"
-  bcHt '"\space{2} p(x,y) = 0\newline"
-  bcHt '"\vspace{1}\newline "
-  bcHt '"\centerline{{\em Three Dimensional Surfaces}}\newline\newline"
-  bcHt '"\lispdownlink{A function of two variables}{(|bcDraw3Dfun|)}"
-  bcHt '"\space{2} z = f(x,y)\newline"
-  bcHt '"\lispdownlink{A parametrically defined tube}{(|bcDraw3Dpar|)}"
-  bcHt '"\space{2}(x(t), y(t), z(t))\newline"
-  bcHt '"\lispdownlink{A parameterically defined surface}{(|bcDraw3Dpar1|)}"
-  bcHt '"\space{2}(x(u,v), y(u,v), z(u,v))\newline"
-  htShowPage()
-
-
-bcDraw2Dfun() ==
-  htInitPage('"Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Drawing {\em y = f(x)}}\newline "
-      "\centerline{where {\em y} is the dependent variable and}\newline "
-      "\centerline{where {\em x} is the independent variable}\vspace{1}\newline "
-      "\menuitemstyle{}\tab{2}What {\em function} f would you like to draw?\newline\tab{2}")
-    (bcStrings (55 "x*cos(x)" function EM))
-    (text . "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em dependent} variable:")
-    (bcStrings (6 y dependent SY))
-    (text . "\newline\vspace{1}\newline ")
-    (text . "\menuitemstyle{}\tab{2}Enter {\em independent} variable and {\em range}:\newline\tab{2} ")
-    (text . "{\em Variable:}")
-    (bcStrings (6 x ind SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 0 from1 F))
-    (text . "{\em to:}")
-    (bcStrings (9 30 to1 F))
-    (text
-      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "Optionally enter a {\em title} for your curve:"
-      )
-    (bcStrings (15 "y = x*cos(x)" title S))
-    (text . "\indent{0}")
-    (doneButton "Continue" bcDraw2DfunGen)
-    (text . "{}"))
-  htShowPage()
-
-bcDraw2DfunGen htPage ==
-  fun := htpLabelInputString(htPage,'function)
-  dep := htpLabelInputString(htPage,'dependent)
-  ind := htpLabelInputString(htPage,'ind)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  title := htpLabelInputString(htPage,'title)
-  if (title ^= '"") then
-    titlePart := STRCONC('"{}",'"title ==_"",title,'"_"")
-    bcFinish('"draw",fun,bcDrawIt2(ind,from1,to1),titlePart)
-  else
-    bcFinish('"draw",fun,bcDrawIt2(ind,from1,to1))
-
-
-bcDraw2Dpar() ==
-  htInitPage('"Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Drawing a parametrically defined curve:}\newline "
-      "\centerline{{\em ( f1(t), f2(t) )}}\newline "
-      "\centerline{in terms of two functions {\em f1} and {\em f2}}"
-      "\centerline{and an independent variable {\em t}}\vspace{1}\newline"
-      "\menuitemstyle{}\tab{2}Enter the two {\em functions:}")
-    (text . "\newline\tab{2}{\em Function 1:}")
-    (bcStrings (44 "-9*sin(4*t/5)" function1 EM))
-    (text . "\newline\tab{2}{\em Function 2:}")
-    (bcStrings (44 "8*sin(t)" function2 EM))
-    (text ."\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em independent} variable and range:\newline\tab{2} ")
-    (text . "{\em Variable:}")
-    (bcStrings (6 t ind SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 "-5*\%pi" from1 F))
-    (text . "{\em to:}")
-    (bcStrings (9 "5*\%pi" to1 F))
-    (text
-      "\vspace{1}\newline\menuitemstyle{}\tab{2}"
-      "Optionally enter a {\em title} for your curve:")
-    (bcStrings (15 "Lissajous" title S))
-    (text . "\indent{0}")
-    (doneButton "Continue" bcDraw2DparGen))
-  htShowPage()
-
-bcDraw2DparGen htPage ==
-  fun1 := htpLabelInputString(htPage,'function1)
-  fun2 := htpLabelInputString(htPage,'function2)
-  ind := htpLabelInputString(htPage,'ind)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  title := htpLabelInputString(htPage,'title)
-  curvePart := STRCONC('"curve(",'"{}",fun1,'",{}",fun2,'")")
-  if (title ^= '"") then
-    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
-    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),titlePart)
-  else
-    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1))
-
-bcDraw2DSolve() ==
-  htInitPage('"Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Plotting the solution to {\em p(x,y) = 0}, where} "
-      "\centerline{{\em p} is a polynomial in two variables {\em x} and {\em y}}"
-      "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter the {\em polynomial} p:"
-      "\newline\tab{2}")
-    (bcStrings (40 "y**2+7*x*y-(x**3+16*x)" function EM))
-    (text . "\vspace{1}\newline\menuitemstyle{}\tab{2}Enter the {\em variables}:")
-    (text . "\newline\tab{2}{\em Variable 1:} ")
-    (bcStrings (4 x independent1 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 -15 from1 F))
-    (text . "{\em to:}")
-    (bcStrings (9 10 to1 F))
-    (text . "\newline\tab{2}{\em Variable 2:} ")
-    (bcStrings (4 y independent2 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 -10 from2 F))
-    (text . "{\em to:}")
-    (bcStrings (9 50 to2 F))
-    (text
-      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "Optionally enter a {\em title} for your curve:")
-    (bcStrings (15 "" title S))
-    (text . "\indent{0}"))
-  htMakeDoneButton('"Continue",'bcDraw2DSolveGen)
-  htShowPage()
-
-bcDraw2DSolveGen htPage ==
-  fun := htpLabelInputString(htPage,'function)
-  ind1 := htpLabelInputString(htPage,'independent1)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  ind2 := htpLabelInputString(htPage,'independent2)
-  from2 := htpLabelInputString(htPage,'from2)
-  to2 := htpLabelInputString(htPage,'to2)
-  title := htpLabelInputString(htPage,'title)
-  clipPart := STRCONC('"{}",'"range==[{}",from1,'"..",to1,",{}",from2,'"..",to2,'"]")
-  if (title ^= '"") then
-    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
-    bcFinish('"draw",STRCONC(fun,'" = 0 "),ind1,ind2,clipPart,titlePart)
-  else
-    bcFinish('"draw",STRCONC(fun,'" = 0 "),ind1,ind2,clipPart)
-
-bcDraw3Dfun() ==
-  htInitPage('"Three Dimensional Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Drawing {\em z = f(x,y)}}\newline "
-      "\centerline{where {\em z} is the dependent variable and}\newline "
-      "\centerline{where {\em x, y} are the independent variables}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "What {\em function} f which you like to draw?\newline\tab{2}")
-    (bcStrings (55 "exp(cos(x-y)-sin(x*y))-2" function EM))
-    (text . "\newline\menuitemstyle{}\tab{2}Enter {\em dependent} variable:")
-    (bcStrings (6 z dependent SY))
-    (text
-      "\vspace{1}\newline\menuitemstyle{}\tab{2}"
-      "Enter {\em independent} variables and ranges:\newline\tab{2} "
-      "{\em Variable:}")
-    (bcStrings (6 x independent1 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 -5 from1 F))
-    (text . "{\em to:}")
-    (bcStrings (9 5 to1 F))
-    (text . "\newline\tab{2}{\em Variable:}")
-    (bcStrings (6 y independent2 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 -5 from2 F))
-    (text . "{\em to:}")
-    (bcStrings (9 5 to2 F))
-    (text
-      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "Optionally enter a {\em title} for your surface:")
-    (bcStrings (15 "" title S))
-    (text . "\indent{0}")
-    (doneButton "Continue" bcDraw3DfunGen))
-  htShowPage()
-
-bcDraw3DfunGen htPage ==
-  fun := htpLabelInputString(htPage,'function)
-  dep := htpLabelInputString(htPage,'dependent)
-  ind1 := htpLabelInputString(htPage,'independent1)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  ind2 := htpLabelInputString(htPage,'independent2)
-  from2 := htpLabelInputString(htPage,'from2)
-  to2 := htpLabelInputString(htPage,'to2)
-  title := htpLabelInputString(htPage,'title)
-  if (title ^= '"") then
-    titlePart := (title = '"" => nil;STRCONC('"{}",'"title ==_"",title,'"_""))
-    bcFinish('"draw",fun,bcDrawIt2(ind1,from1,to1),bcDrawIt2(ind2,from2,to2),titlePart)
-  else
-    bcFinish('"draw",fun,bcDrawIt2(ind1,from1,to1),bcDrawIt2(ind2,from2,to2))
-
-bcDraw3Dpar() ==
-  htInitPage('"Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Drawing a parametrically defined curve:"
-      "{\em ( f1(t), f2(t), f3(t) )}}\newline "
-      "\centerline{in terms of three functions {\em f1}, {\em f2}, and {\em f3}}\newline "
-      "\centerline{and an independent variable {\em t}}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "Enter the three {\em functions} of the independent variable:")
-    (text . "\newline\tab{2}{\em Function f1:}")
-    (bcStrings (42 "1.3*cos(2*t)*cos(4*t) + sin(4*t)*cos(t)" function1 EM))
-    (text . "\newline\tab{2}{\em Function f2:}")
-    (bcStrings  (42 "1.3*sin(2*t)*cos(4*t) - sin(4*t)*sin(t)" function2 EM))
-    (text . "\newline\tab{2}{\em Function f3:}")
-    (bcStrings  (42 "2.5*cos(4*t)" function3 EM))
-    (text ."\vspace{1}\newline\menuitemstyle{}\tab{2}Enter {\em independent} variable and range:\newline\tab{2} ")
-    (text ."{\em Variable:}")
-    (bcStrings (6 t ind SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 0 from1 F))
-    (text "{\em to:}")
-    (bcStrings (9 "4*\%pi" to1 F))
-    (text
-      "\indent{0}\vspace{1}\newline\menuitemstyle{}\tab{2} "
-      "Optionally enter a {\em title} for your surface:")
-    (bcStrings (15 "knot" title S))
-    (text . "\indent{0}")
-    (doneButton "Continue" bcDraw3DparGen))
-  htShowPage()
-
-bcDraw3DparGen htPage ==
-  fun1 := htpLabelInputString(htPage,'function1)
-  fun2 := htpLabelInputString(htPage,'function2)
-  fun3 := htpLabelInputString(htPage,'function3)
-  ind := htpLabelInputString(htPage,'ind)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  title := htpLabelInputString(htPage,'title)
-  curvePart := STRCONC('"curve(",'"{}",fun1,'",{}",fun2,'",{}",fun3,'")")
-  tubePart := '"{}tubeRadius==.25,{}tubePoints==16"
-  if (title ^= '"") then
-    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
-    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),tubePart,titlePart)
-  else
-    bcFinish('"draw",curvePart,bcDrawIt2(ind,from1,to1),tubePart)
-
-bcDraw3Dpar1() ==
-  htInitPage('"Draw Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text
-      "\centerline{Drawing a parametrically defined surface:}\newline "
-      "\centerline{{\em ( f1(u,v), f2(u,v), f3(u,v) )}}\newline "
-      "\centerline{in terms of three functions {\em f1}, {\em f2}, and {\em f3}}\newline "
-      "\centerline{and two independent variables {\em u} and {\em v}}\vspace{1}\newline\menuitemstyle{}\tab{2}"
-      "Enter the three {\em functions} of the independent variables:")
-    (text . "\newline\tab{2}")
-    (text . "{\em Function f1:}")
-    (bcStrings (43 "u*sin(v)" function1 EM))
-    (text . "\newline\tab{2}")
-    (text . "{\em Function f2:}")
-    (bcStrings (43 "v*cos(u)" function2 EM))
-    (text . "\newline\tab{2}")
-    (text . "{\em Function f3:}")
-    (bcStrings (43 "u*cos(v)" function3 EM))
-    (text . "\newline\menuitemstyle{}\tab{2}Enter independent {\em variables} and ranges:")
-    (text . "\newline\tab{2}")
-    (text . "{\em Variable 1:}")
-    (bcStrings (5 u ind1 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 "-\%pi" from1 F))
-    (text . "{\em to:}")
-    (bcStrings (9 "\%pi" to1 F))
-    (text . "\newline\tab{2}")
-    (text . "{\em Variable 2:}")
-    (bcStrings (5 v ind2 SY))
-    (text . "ranges {\em from:}")
-    (bcStrings (9 "-\%pi/2" from2 F))
-    (text . "{\em to:}")
-    (bcStrings (9 "\%pi/2" to2 F))
-    (text
-      "\indent{0}\newline\menuitemstyle{}\tab{2} "
-      "Optionally enter a {\em title} for your surface:")
-    (bcStrings (15 "surface" title S))
-    (text . "\indent{0}"))
-  htMakeDoneButton ('"Continue",'bcDraw3Dpar1Gen)
-  htShowPage()
-
-bcDraw3Dpar1Gen htPage ==
-  fun1 := htpLabelInputString(htPage,'function1)
-  fun2 := htpLabelInputString(htPage,'function2)
-  fun3 := htpLabelInputString(htPage,'function3)
-  ind1 := htpLabelInputString(htPage,'ind1)
-  from1 := htpLabelInputString(htPage,'from1)
-  to1 := htpLabelInputString(htPage,'to1)
-  ind2 := htpLabelInputString(htPage,'ind2)
-  from2 := htpLabelInputString(htPage,'from2)
-  to2 := htpLabelInputString(htPage,'to2)
-  title := htpLabelInputString(htPage,'title)
-  r1 := bcDrawIt2(ind1,from1,to1)
-  r2 := bcDrawIt2(ind2,from2,to2)
-  surfacePart := STRCONC('"surface(",'"{}",fun1,'",{}",fun2,'",{}",fun3,'")")
-  if (title ^= '"") then
-    titlePart := (title = '"" => nil; STRCONC('"{}",'"title ==_"",title,'"_""))
-    bcFinish('"draw",surfacePart,r1,r2,titlePart)
-  else
-    bcFinish('"draw",surfacePart,r1,r2)
-
-bcSeries() ==
-  htInitPage('"Series Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-   (text .  "Create a series by: ")
-   (text . "\beginmenu")
-   (text . "\item ")
-   (bcLinks ("\menuitemstyle{Expansion}" "" bcSeriesExpansion NILl))
-   (text . "\tab{11}Expand a function in a series around a point")
-   (text . "\item ")
-   (bcLinks ("\menuitemstyle{Formula}"  "" bcSeriesByFormula NIL))
-   (text . "\tab{11}Give a formula for the {\em i}'th coefficient")
-   (text . "\endmenu"))
-  htShowPage()
-
-bcSeriesExpansion(a,b) ==
-  htInitPage('"Series Expansion Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain EEM (Expression $EmptyMode))
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em function} you want to expand in a power series")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "log(cot(x))" function EM))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em power series variable}")
-    (text . "\tab{49}")
-    (bcStrings (8 x variable SY))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em point} about which you want to expand")
-    (text . "\tab{49}")
-    (bcStrings (8 "\%pi/2" point EM)))
-  htMakeDoneButton('"Continue",'bcSeriesExpansionGen)
-  htShowPage()
-
-bcSeriesExpansionGen htPage ==
-  fun := htpLabelInputString(htPage,'function)
-  var := htpLabelInputString(htPage,'variable)
-  point := htpLabelInputString(htPage,'point)
-  terms := htpLabelInputString(htPage,'numberOfTerms)
-  bcFinish("series",fun,STRCONC(var,'" = ",point))
-
-bcSeriesByFormula(a,b) ==
-  htInitPage('"Power Series Basic Command",nil)
-  htMakePage '(
-    (text . "Select the kind of power series you want to create:")
-    (text . "\beginmenu")
-    (text . "\item ")
-    (bcLinks ("\menuitemstyle{Taylor Series}" "" bcTaylorSeries taylor))
-    (text . "\newline Series where the exponent ranges over the integers from a {\em non-negative integer} value to plus infinity by an arbitrary {\em positive integer} step size")
-    (text . "\item ")
-    (bcLinks ("\menuitemstyle{Laurent Series}" "" bcLaurentSeries laurent))
-    (text . "\newline Series where the exponent ranges from an arbitrary {\em integer} value to plus infinity by an arbitrary {\em positive integer} step size")
-    (text . "\item ")
-    (bcLinks ("\menuitemstyle{Puiseux Series}" "" bcPuiseuxSeries puiseux))
-    (text . "\newline Series where the exponent ranges from an arbitrary {\em rational value} to plus infinity by an arbitrary {\em positive rational number} step size")
-    (text . "\endmenu"))
-  htShowPage()
-
-bcTaylorSeries(a,b) ==
-  htInitPage('"Taylor Series Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain EEM (Expression $EmptyMode))
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the formula for the general coefficient of the series")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "1/factorial(i)" formula EM))
-    (text . "\blankline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em index variable} for your formula")
-    (text . "\tab{49}")
-    (bcStrings (8 i index SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em power series variable}")
-    (text . "\tab{49}")
-    (bcStrings (8 x variable SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em point} about which you want to expand")
-    (text . "\tab{49}")
-    (bcStrings (8 0 point EM))
-    (text . "\blankline ")
-    (text ."For Taylor Series, the exponent of the power series variable ranges  from an {\em initial value}, an arbitrary non-negative integer, to plus infinity; the {\em step size} is any positive integer.")
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em initial value} of the index (an integer)")
-    (text . "\tab{49}")
-    (bcStrings (8 "0" min I))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em step size} (a positive integer)")
-    (text . "\tab{49}")
-    (bcStrings (8 "1" step PI))
-    (doneButton "Continue" bcTaylorSeriesGen))
-  htShowPage()
-
-bcSeriesByFormulaGen htPage == bcNotReady()
-
-bcLaurentSeries(a,b) ==
-  htInitPage('"Laurent Series Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain EEM (Expression $EmptyMode))
-       (isDomain S (String))
-       (isDomain I (Integer))
-       (isDomain PI (PositiveInteger))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the formula for the general coefficient of the series")
-    (text . "\newline\tab{2} ")
-    (bcStrings (55 "(-1)**(n - 1)/(n + 2)" formula EM))
-    (text . "\vspace{1}\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em index variable} for your formula")
-    (text . "\tab{49}")
-    (bcStrings (8 n index SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em power series variable}")
-    (text . "\tab{49}")
-    (bcStrings (8 x variable SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em point} about which you want to expand")
-    (text . "\tab{49}")
-    (bcStrings (8 0 point F))
-    (text . "\blankline")
-    (text . "\newline For Laurent Series, the exponent of the power series variable ranges from an {\em initial value}, an arbitrary integer value, to plus infinity; the {\em step size} is any positive integer.")
-    (text . "\blankline")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em initial value} of the index (an integer)")
-    (text . "\tab{49}")
-    (bcStrings (8 "-1" min I))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em step size} (a positive integer)")
-    (text . "\tab{49}")
-    (bcStrings (8 "1" step PI))
-    (doneButton "Continue" bcLaurentSeriesGen))
-  htShowPage()
-
-bcPuiseuxSeries(a,b) ==
-  htInitPage('"Puiseux Series Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain EEM (Expression $EmptyMode))
-       (isDomain S (String))
-       (isDomain I (Integer))
-       (isDomain PI (PositiveInteger))
-       (isDOmain RN (Fraction (Integer)))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text ."Enter the {\em formula} for the general coefficient of the series")
-    (text . "\newline\tab{2} ")
-    (bcStrings(55 "(-1)**((3*n - 4)/6)/factorial(n - 1/3)" formula EM))
-    (text . "\vspace{1}\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em index variable} for your formula")
-    (text . "\tab{49}")
-    (bcStrings (8 n index SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em power series variable}")
-    (text . "\tab{49}")
-    (bcStrings (8 x variable SY))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em point} about which you want to expand")
-    (text . "\tab{49}")
-    (bcStrings (8 0 point F))
-    (text . "\blankline ")
-    (text . "For Puiseux Series, the exponent of the power series variable ranges from an {\em initial value}, an arbitary rational number, to plus infinity; the {\em step size} is an any positive rational number.")
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em initial value} of index (a rational number)")
-    (text . "\tab{51}")
-    (bcStrings (6 "4/3" min RN))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em step size} (a positive rational number)")
-    (text . "\tab{51}")
-    (bcStrings (6 "2" step RN))
-    (doneButton "Continue" bcPuiseuxSeriesGen))
-  htShowPage()
-
-bcTaylorSeriesGen htPage == bcSeriesGen(htPage)
-
-bcLaurentSeriesGen htPage ==
-  bcSeriesGen(htPage)
-
-bcPuiseuxSeriesGen htPage ==
-  bcSeriesGen(htPage)
-
-bcSeriesGen(htPage) ==
-  step:= htpLabelInputString(htPage,'step)
-  min := htpLabelInputString(htPage,'min)
-  formula := htpLabelInputString(htPage,'formula)
-  index   := htpLabelInputString(htPage,'index)
-  var := htpLabelInputString(htPage,'variable)
-  point := htpLabelInputString(htPage,'point)
-  varPart := STRCONC(var,'" = ",point)
-  minPart := STRCONC(min,'"..")
-  bcFinish('"series",STRCONC(index,'" +-> ",formula),varPart,minPart,step)
-
-bcLimit() ==
-  htInitPage('"Limit Basic Command",nil)
-  htMakePage '(
-   (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain SY (Symbol)))
-   (text . "What kind of limit do you want to compute? ")
-   (text . "\blankline ")
-   (text . "\beginmenu")
-   (text . "\item ")
-   (bcLinks ("\menuitemstyle{A real limit?}" "" bcRealLimit real))
-   (text . "\indentrel{17}\tab{0}")
-   (text . "The limit as the variable approaches a {\em real} value along the real axis")
-   (text . "\indentrel{-17}")
-   (text . "\item ")
-   (text . "\blankline ")
-   (bcLinks ("\menuitemstyle{A complex limit?}" "" bcComplexLimit complex))
-   (text . "\indentrel{17}\tab{0}")
-   (text . "The limit as the variable approaches a {\em complex} value along any path in the complex plane")
-   (text . "\indentrel{-17}")
-   (text . "\endmenu")
-    )
-  htShowPage()
-
-bcRealLimit(a,b) ==
-  htInitPage('"Real Limit Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-       (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em function} you want to compute the limit of:")
-    (text . "\newline\tab{2} ")
-    (bcStrings (45 "x*sin(1/x)" expression EM))
-    (text . "\blankline")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the name of the {\em variable}: ")
-    (text . "\tab{41}")
-    (bcStrings (6 x variable SY))
-    (text . "\blankline")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Compute the limit at")
-    (radioButtons location
-      ("A finite point:" (
-        (text . "\tab{33}")
-        (bcStrings (6 0 point F))) finitePoint)
-      ("Plus infinity" "" plusInfinity)
-      ("Minus infinity" "" minusInfinity))
-    (doneButton "Continue" bcRealLimitGen))
-  htShowPage()
-
-bcRealLimitGen htPage ==
-  (p := htpButtonValue(htPage,'location)) ^= 'finitePoint =>
-    fun := htpLabelInputString(htPage,'expression)
-    var := htpLabelInputString(htPage,'variable)
-    loc :=
-      p = 'plusInfinity => '"%plusInfinity"
-      '"%minusInfinity"
-    bcFinish('"limit",fun,STRCONC(var,'" = ",loc))
-  page := htInitPage('"Real Limit Basic Command",nil)
-  htMakePage '(
-    (text . "Compute the limit")
-    (lispLinks
-       ("\menuitemstyle{From both directions}" "" bcRealLimitGen1 both)
-       ("\menuitemstyle{From the right}" "" bcRealLimitGen1 right)
-       ("\menuitemstyle{From the left}" "" bcRealLimitGen1 left)))
-  htpSetProperty(page,'fun,htpLabelInputString(htPage,'expression))
-  htpSetProperty(page,'var,htpLabelInputString(htPage,'variable))
-  htpSetProperty(page,'loc,htpLabelInputString(htPage,'point))
-  htShowPage()
-
-bcRealLimitGen1(htPage,key) ==
-  direction :=
-    key = 'right => '"_"right_""
-    key = 'left => '"_"left_""
-    nil
-  fun := htpProperty(htPage,'fun)
-  var := htpProperty(htPage,'var)
-  loc := htpProperty(htPage,'loc)
-  varPart := STRCONC(var,'" = ",loc)
-  bcFinish('"limit",fun,varPart,direction)
-
-bcComplexLimit(a,b) ==
-  htInitPage('"Complex Limit Basic Command",nil)
-  htMakePage '(
-    (domainConditions
-        (isDomain EM $EmptyMode)
-       (isDomain S (String))
-       (isDomain F (Float))
-       (isDomain SY (Symbol)))
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the {\em function} you want to compute the limit of:")
-    (text . "\newline\tab{2} ")
-    (bcStrings (40 "sin(a*x)/tan(b*x)" expression EM))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Enter the name of the {\em variable}: ")
-    (text . "\tab{37}")
-    (bcStrings (5 x variable SY))
-    (text . "\blankline ")
-    (text . "\newline ")
-    (text . "\menuitemstyle{}\tab{2}")
-    (text . "Compute the limit at")
-    (radioButtons location
-      ("A finite point:" (
-       (text . "\newline\space{0}Real part:\space{3}")
-       (bcStrings (20 0 real F))
-       (text . "\newline Complex part:")
-       (bcStrings (20 0 complex F))) finitePoint)
-      ("Complex infinity" "" complexInfinity))
-     (doneButton "Continue" bcComplexLimitGen))
-  htShowPage()
-
-bcComplexLimitGen htPage ==
-  fun := htpLabelInputString(htPage,'expression)
-  var := htpLabelInputString(htPage,'variable)
-  loc :=
-    (p := htpButtonValue(htPage,'location)) = 'finitePoint =>
-      real := htpLabelInputString(htPage,'real)
-      comp := htpLabelInputString(htPage,'complex)
-      complexPart :=
-        comp = '"0" => '""
-        comp = '"1" => '"%i"
-        STRCONC(comp,'"*%i")
-      real = '"0" =>
-        complexPart = '"" => "0"
-        complexPart
-      complexPart = '"" => real
-      STRCONC(real,'" + ",complexPart)
-    '"%infinity"
-  varPart := STRCONC(var,'" = ",loc)
-  bcFinish('"complexLimit",fun,varPart)
-
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
