diff --git a/changelog b/changelog index 652e829..684be9c 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,18 @@ +20071215 tpd src/interp/bookvol5 browse and top-level command handling +20071215 tpd src/interp/setq.lisp move command initialization to bookvol5 +20071215 tpd src/interp/nci.lisp move ncloopInclude to bookvol5 +20071215 tpd src/interp/intint.lisp move setCurrentLine to bookvol5 +20071215 tpd src/interp/int-top.boot move ncloopCommand, etc. to bookvol5 +20071215 tpd src/interp/incl.boot move incBiteOff to bookvol5 +20071215 tpd src/interp/i-syscmd.boot move $SYSCOMMANDS to bookvol5 +20071215 tpd src/interp/bootfuns.lisp move $systemCommands to bookvol5 +20071215 tpd src/hyper/Makefile expand bookvol11 for the browser +20071215 tpd src/algebra/axserver.spad algebra code to support AJAX +20071215 tpd src/hyper/axbook.tgz add book pages for browser +20071215 tpd src/hyper/bigbayou.png add browse rootpage background +20071215 tpd src/hyper/bookvol11 add the pages for the browser +20071215 tpd src/hyper/doctitle.png add headline for browser pages +20071214 tpd faq FAQ 44: I don't have the math fonts 20071208 tpd src/algebra/axserver.spad add makeDBPage, getShow 20071208 tpd src/interp/http.lisp add replace-entities 20071206 tpd src/interp/daase.lisp find the right sourcefile (bug 7020) diff --git a/faq b/faq index 2083417..0465fd7 100644 --- a/faq +++ b/faq @@ -42,6 +42,7 @@ FAQ 40: Text entry fails in the hypertex browser window FAQ 41: How can I work in lisp from Axiom? FAQ 42: How can I output equations as lisp s-expressions? FAQ 43: Is Axiom's License compatible with the GPL? +FAQ 44: I don't have the math fonts =================================================================== FAQ 0: How do I use Axiom? @@ -1590,3 +1591,17 @@ which we quote here: Please note that all legal discussions should occur ONLY on the axiom-legal@nongnu.org mailing list and not copied to the other developer mailing lists. + +=================================================================== +FAQ 44: I don't have the math fonts +=================================================================== +View the file zips/mathops.html to see if you have all the symbols. +See http://www.unicode.org/charts/PDF/U2200.pdf + +There is a file zips/axiomfonts.tgz which contains some of the fonts +(mostly the Stix fonts which recently became available). Other +missing fonts can be found at: + +http://www.stixfonts.org +http://www.alanwood.net/unicode +http://support.wolfram.com/mathematica/systems/windows/general/latestfonts.html diff --git a/src/algebra/axserver.spad.pamphlet b/src/algebra/axserver.spad.pamphlet index 57ab398..77910f1 100644 --- a/src/algebra/axserver.spad.pamphlet +++ b/src/algebra/axserver.spad.pamphlet @@ -28,8 +28,9 @@ AxiomServer: public == private where getFile: (SExpression,String) -> Void getCommand: (SExpression,String) -> Void getDescription: String -> String - getLisp: (SExpression,String) -> Void - getShow: (SExpression,String) -> Void + getInterp: (SExpression,String) -> Void + getLisp: (SExpression,String) -> Void + getShow: (SExpression,String) -> Void lastStep: () -> String lastType: () -> String formatMessages: String -> String @@ -42,7 +43,7 @@ AxiomServer: public == private where getDatabase(constructor:String, key:String):String == answer:=string GETDATABASE(INTERN$Lisp constructor,INTERN$Lisp key)$Lisp - WriteLine$Lisp concat ["getDatabase: ",constructor," ",key," ",answer] +-- WriteLine$Lisp concat ["getDatabase: ",constructor," ",key," ",answer] answer @ @@ -51,7 +52,7 @@ When it gets a input on the socket it calls the server function on the socket input. <>= axServer(port:Integer,serverfunc:SExpression->Void):Void == - WriteLine("socketServer")$Lisp + WriteLine$Lisp "listening on port 8085" s := SiSock(port,serverfunc)$Lisp -- To listen for just one connection and then close the socket -- uncomment i := 0. @@ -77,7 +78,7 @@ A POST request starts with <>= multiServ(s:SExpression):Void == - WriteLine("multiServ begin")$Lisp +-- WriteLine("multiServ begin")$Lisp headers:String := "" char:String -- read in the http headers @@ -85,13 +86,13 @@ A POST request starts with STRING(READ_-CHAR_-NO_-HANG(s,NIL$Lisp,'EOF)$Lisp)$Lisp) ^= "EOF"_ repeat headers := concat [headers,char] - sayTeX$Lisp headers +-- sayTeX$Lisp headers StringMatch("([^ ]*)", headers)$Lisp u:UniversalSegment(Integer) u := segment(MatchBeginning(1)$Lisp+1,_ MatchEnd(1)$Lisp)$UniversalSegment(Integer) reqtype:String := headers.u - sayTeX$Lisp concat ["request type: ",reqtype] +-- sayTeX$Lisp concat ["request type: ",reqtype] if reqtype = "GET" then StringMatch("GET ([^ ]*)",headers)$Lisp u:UniversalSegment(Integer) @@ -104,6 +105,12 @@ A POST request starts with u := segment(MatchBeginning(1)$Lisp+1,_ MatchEnd(1)$Lisp)$UniversalSegment(Integer) getCommand(s,headers.u) + if reqtype = "POST" and StringMatch("interpcall=(.*)$",headers)$Lisp > 0 + then + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getInterp(s,headers.u) if reqtype = "POST" and StringMatch("lispcall=(.*)$",headers)$Lisp > 0 then u:UniversalSegment(Integer) @@ -116,8 +123,8 @@ A POST request starts with u := segment(MatchBeginning(1)$Lisp+1,_ MatchEnd(1)$Lisp)$UniversalSegment(Integer) getShow(s,headers.u) - WriteLine("multiServ end")$Lisp - WriteLine("")$Lisp +-- WriteLine("multiServ end")$Lisp +-- WriteLine("")$Lisp @ \subsection{getFile} @@ -127,7 +134,7 @@ then we need to parse the parameters and dynamically construct the file contents. <>= getFile(s:SExpression,pathvar:String):Void == - WriteLine("")$Lisp +-- WriteLine("")$Lisp WriteLine$Lisp concat ["getFile: ",pathvar] params:=split(pathvar,char "?") if #params = 1 @@ -155,7 +162,7 @@ file contents. page:=page "_"http://www.w3.org/TR/xthml1/DTD/xhtml1-strict.dtd_">" page:=page "" page:=page "Error" msg "" - WriteLine(page)$Lisp +-- WriteLine(page)$Lisp page @ \subsection{getDescription} @@ -180,7 +187,7 @@ and do a lookup for the source file. abbreviation:String,_ dom:String):String == sourcekey:="@<<" constructorkind " " abbreviation " " dom ">>" - WriteLine(sourcekey)$Lisp +-- WriteLine(sourcekey)$Lisp sourcefile:=lowerCase last split(getDatabase(dom,"SOURCEFILE"),char "/") sourcefile:=sourcefile ".pamphlet" @@ -262,13 +269,13 @@ We have q which is a stream which contains the file. We read the file into a string-stream to get it all into one string. We return the string. <>= readTheFile(q:SExpression):String == - WriteLine("begin reading file")$Lisp +-- WriteLine("begin reading file")$Lisp r := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp SiCopyStream(q,r)$Lisp filestream:String := GET_-OUTPUT_-STREAM_-STRING(r)$Lisp CLOSE(r)$Lisp CLOSE(q)$Lisp - WriteLine("end reading file")$Lisp +-- WriteLine("end reading file")$Lisp filestream @ @@ -287,7 +294,7 @@ prepend it to the file. The resulting string is output to the socket. file := concat ["Content-Type: ",contentType,nl,file] file := concat ["HTTP/1.1 200 OK",nl,file] file := concat [file,filestream] - WriteLine(file)$Lisp +-- WriteLine(file)$Lisp f:=MAKE_-STRING_-INPUT_-STREAM(file)$Lisp SiCopyStream(f,s)$Lisp CLOSE(f)$Lisp @@ -345,15 +352,75 @@ corresponding functions in the browser HTML.
",algebra,"
_
",mathml,"
_
",lastType(),"
"] - WriteLine$Lisp concat ["mathml answer: ",mathml] - WriteLine$Lisp concat ["algebra answer: ",algebra] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp SiCopyStream(q,s)$Lisp CLOSE(q)$Lisp CLOSE(s)$Lisp +@ + +\subsection{getInterp} +The getInterp function is invoked when the HTTP request is a POST +and contains the string "command". Essentially the game here is +to rebind the various output streams used by Axiom so we can +capture the normal output. This function returns a set of HTML 5 div +blocks: +\begin{enumerate} +\item stepnum, the value of lastStep() +\item command, the value of the command variable +\item algebra, the value of the algebra variable +\item mathml, the value of the mathml variable +\item type, the value of lastType() +\end{enumerate} +The HTML functions in the hyperdoc browser depend on the order +of these variables so do not change this without changing the +corresponding functions in the browser HTML. +<>= + getInterp(s:SExpression,command:String):Void == + WriteLine$Lisp concat ["getInterp: ",command] + SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp + SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp + ans := string parseAndEvalToStringEqNum$Lisp command + SETQ(resultmathml$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp + SETQ(resultalgebra$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp + CLOSE(tmpmathml$Lisp)$Lisp + CLOSE(tmpalgebra$Lisp)$Lisp + -- Since strings returned from axiom are going to be displayed in html I + -- should really check for the characters &,<,> and replace them with + -- &,<,>. + -- At present I only check for ampersands in formatMessages. + mathml:String := string(resultmathml$Lisp) + algebra:String := string(resultalgebra$Lisp) + algebra := formatMessages(algebra) + -- At this point mathml contains the mathml for the output but does not + -- include step number or type information. + -- We should also save the command. + -- I get the type and step number from the $internalHistoryTable + axans:String := _ + concat ["
", lastStep(), "
_ +
", command, "
_ +
",algebra,"
_ +
",mathml,"
_ +
",lastType(),"
"] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] + q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp + SiCopyStream(q,s)$Lisp + CLOSE(q)$Lisp + CLOSE(s)$Lisp @ + \subsection{getLisp} The getLisp function is invoked when the HTTP request is a POST and contains the string "lispcall". @@ -362,8 +429,8 @@ and contains the string "lispcall". WriteLine$Lisp concat ["getLisp: ",command] evalresult:=EVAL(READ_-FROM_-STRING(command)$Lisp)$Lisp mathml:String:=string(evalresult) - WriteLine$Lisp concat ["getLisp: after ",mathml] - WriteLine$Lisp concat ["getLisp output: ",mathml] +-- WriteLine$Lisp concat ["getLisp: after ",mathml] +-- WriteLine$Lisp concat ["getLisp output: ",mathml] SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp @@ -390,8 +457,8 @@ and contains the string "lispcall".
",algebra,"
_
",mathml,"
_
",lastType(),"
"] - WriteLine$Lisp concat ["mathml answer: ",mathml] - WriteLine$Lisp concat ["algebra answer: ",algebra] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp SiCopyStream(q,s)$Lisp CLOSE(q)$Lisp @@ -410,7 +477,7 @@ This is done in the call to replace-entitites (see http.lisp) realarg:=SUBSEQ(showarg,6)$Lisp show:=_ "(progn (setq |$options| '((|operations|))) (|show| '|" realarg "|))" - WriteLine$Lisp concat ["getShow: ",show] +-- WriteLine$Lisp concat ["getShow: ",show] SETQ(SAVESTREAM$Lisp,_*STANDARD_-OUTPUT_*$Lisp)$Lisp SETQ(_*STANDARD_-OUTPUT_*$Lisp,_ MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp @@ -445,7 +512,7 @@ This is done in the call to replace-entitites (see http.lisp)
",algebra,"
_
",mathml,"
_
",lastType(),"
"] - WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp SiCopyStream(q,s)$Lisp CLOSE(q)$Lisp @@ -468,11 +535,11 @@ This is done in the call to replace-entitites (see http.lisp) string car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp formatMessages(str:String):String == - WriteLine("formatMessages")$Lisp +-- WriteLine("formatMessages")$Lisp -- I need to replace any ampersands with & and may also need to -- replace < and > with < and > strlist:List String - WriteLine(str)$Lisp +-- WriteLine(str)$Lisp strlist := split(str,char "&") str := "" -- oops, if & is the last character in the string this method @@ -481,19 +548,19 @@ This is done in the call to replace-entitites (see http.lisp) str := concat [str,s,"&"] strlen:Integer := #str str := str.(1..(#str - 5)) - WriteLine(str)$Lisp +-- WriteLine(str)$Lisp -- Here I split the string into lines and put each line in a "div". strlist := split(str, char string NewlineChar$Lisp) str := "" - WriteLine("formatMessages1")$Lisp - WriteLine(concat strlist)$Lisp +-- WriteLine("formatMessages1")$Lisp +-- WriteLine(concat strlist)$Lisp for s in strlist repeat - WriteLine(s)$Lisp +-- WriteLine(s)$Lisp str := concat [str,"
",s,"
"] str getContentType(pathvar:String):String == - WriteLine("getContentType begin")$Lisp +-- WriteLine("getContentType begin")$Lisp -- set default content type contentType:String := "text/plain" -- need to test for successful match? @@ -502,7 +569,7 @@ This is done in the call to replace-entitites (see http.lisp) u := segment(MatchBeginning(1)$Lisp+1,_ MatchEnd(1)$Lisp)$UniversalSegment(Integer) extension:String := pathvar.u - WriteLine$Lisp concat ["file extension: ",extension] +-- WriteLine$Lisp concat ["file extension: ",extension] -- test for extensions: html, htm, xml, xhtml, js, css if extension = "html" then contentType:String := "text/html" @@ -522,8 +589,8 @@ This is done in the call to replace-entitites (see http.lisp) contentType:String := "image/jpeg" else if extension = "jpeg" then contentType:String := "image/jpeg" - WriteLine$Lisp concat ["Content-Type: ",contentType] - WriteLine("getContentType end")$Lisp +-- WriteLine$Lisp concat ["Content-Type: ",contentType] +-- WriteLine("getContentType end")$Lisp contentType @ diff --git a/src/hyper/Makefile.pamphlet b/src/hyper/Makefile.pamphlet index cae708f..7d43f87 100644 --- a/src/hyper/Makefile.pamphlet +++ b/src/hyper/Makefile.pamphlet @@ -162,11 +162,11 @@ ${MID}/sup.bitmap: ${IN}/bitmaps.pamphlet @${TANGLE} -R"sup.bitmap" ${IN}/bitmaps.pamphlet >${MID}/sup.bitmap ${MID}/ht-icon: ${IN}/bitmaps.pamphlet - @echo 12 making ${OUT}/ht-icon from ${IN}/bitmaps.pamphlet + @echo 13 making ${OUT}/ht-icon from ${IN}/bitmaps.pamphlet @${TANGLE} -R"hticon" ${IN}/bitmaps.pamphlet >${MID}/ht-icon ${DOC}/bitmaps.dvi: ${IN}/bitmaps.pamphlet - @ echo 4 making ${DOC}/bitmaps.dvi from ${IN}/bitmaps.pamphlet + @ echo 14 making ${DOC}/bitmaps.dvi from ${IN}/bitmaps.pamphlet @ (cd ${DOC} ; \ cp ${IN}/bitmaps.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} bitmaps ; \ @@ -178,20 +178,20 @@ ${DOC}/bitmaps.dvi: ${IN}/bitmaps.pamphlet \section{cond} <>= ${MID}/cond.h: ${IN}/cond.pamphlet - @ echo 13 making ${MID}/cond.h from ${IN}/cond.pamphlet + @ echo 15 making ${MID}/cond.h from ${IN}/cond.pamphlet @ (cd ${MID} ; ${TANGLE} -R"cond.h" ${IN}/cond.pamphlet >cond.h ) ${MID}/cond.c: ${IN}/cond.pamphlet - @ echo 14 making ${MID}/cond.c from ${IN}/cond.pamphlet + @ echo 16 making ${MID}/cond.c from ${IN}/cond.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/cond.pamphlet >cond.c ) ${MIDOBJ}/cond.o: ${MID}/cond.c - @ echo 15 making ${MIDOBJ}/cond.o from ${MID}/cond.c + @ echo 17 making ${MIDOBJ}/cond.o from ${MID}/cond.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/cond.c ) ${DOC}/cond.dvi: ${IN}/cond.pamphlet - @ echo 16 making ${DOC}/cond.dvi from ${IN}/cond.pamphlet + @ echo 18 making ${DOC}/cond.dvi from ${IN}/cond.pamphlet @ (cd ${DOC} ; \ cp ${IN}/cond.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} cond ; \ @@ -203,16 +203,16 @@ ${DOC}/cond.dvi: ${IN}/cond.pamphlet \section{debug} <>= ${MID}/debug.c: ${IN}/debug.pamphlet - @ echo 17 making ${MID}/debug.c from ${IN}/debug.pamphlet + @ echo 19 making ${MID}/debug.c from ${IN}/debug.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/debug.pamphlet >debug.c ) ${MIDOBJ}/debug.o: ${MID}/debug.c - @ echo 18 making ${MIDOBJ}/debug.o from ${MID}/debug.c + @ echo 20 making ${MIDOBJ}/debug.o from ${MID}/debug.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/debug.c ) ${DOC}/debug.dvi: ${IN}/debug.pamphlet - @ echo 19 making ${DOC}/debug.dvi from ${IN}/debug.pamphlet + @ echo 21 making ${DOC}/debug.dvi from ${IN}/debug.pamphlet @ (cd ${DOC} ; \ cp ${IN}/debug.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} debug ; \ @@ -224,20 +224,20 @@ ${DOC}/debug.dvi: ${IN}/debug.pamphlet \section{dialog} <>= ${MID}/dialog.h: ${IN}/dialog.pamphlet - @ echo 20 making ${MID}/dialog.h from ${IN}/dialog.pamphlet + @ echo 22 making ${MID}/dialog.h from ${IN}/dialog.pamphlet @ (cd ${MID} ; ${TANGLE} -R"dialog.h" ${IN}/dialog.pamphlet >dialog.h ) ${MID}/dialog.c: ${IN}/dialog.pamphlet - @ echo 21 making ${MID}/dialog.c from ${IN}/dialog.pamphlet + @ echo 23 making ${MID}/dialog.c from ${IN}/dialog.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/dialog.pamphlet >dialog.c ) ${MIDOBJ}/dialog.o: ${MID}/dialog.c - @ echo 22 making ${MIDOBJ}/dialog.o from ${MID}/dialog.c + @ echo 24 making ${MIDOBJ}/dialog.o from ${MID}/dialog.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/dialog.c ) ${DOC}/dialog.dvi: ${IN}/dialog.pamphlet - @ echo 23 making ${DOC}/dialog.dvi from ${IN}/dialog.pamphlet + @ echo 25 making ${DOC}/dialog.dvi from ${IN}/dialog.pamphlet @ (cd ${DOC} ; \ cp ${IN}/dialog.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} dialog ; \ @@ -249,20 +249,20 @@ ${DOC}/dialog.dvi: ${IN}/dialog.pamphlet \section{display} <>= ${MID}/display.h: ${IN}/display.pamphlet - @ echo 24 making ${MID}/display.h from ${IN}/display.pamphlet + @ echo 26 making ${MID}/display.h from ${IN}/display.pamphlet @ (cd ${MID} ; ${TANGLE} -R"display.h" ${IN}/display.pamphlet >display.h ) ${MID}/display.c: ${IN}/display.pamphlet - @ echo 25 making ${MID}/display.c from ${IN}/display.pamphlet + @ echo 27 making ${MID}/display.c from ${IN}/display.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/display.pamphlet >display.c ) ${MIDOBJ}/display.o: ${MID}/display.c - @ echo 26 making ${MIDOBJ}/display.o from ${MID}/display.c + @ echo 28 making ${MIDOBJ}/display.o from ${MID}/display.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/display.c ) ${DOC}/display.dvi: ${IN}/display.pamphlet - @ echo 27 making ${DOC}/display.dvi from ${IN}/display.pamphlet + @ echo 29 making ${DOC}/display.dvi from ${IN}/display.pamphlet @ (cd ${DOC} ; \ cp ${IN}/display.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} display ; \ @@ -274,20 +274,20 @@ ${DOC}/display.dvi: ${IN}/display.pamphlet \section{event} <>= ${MID}/event.h: ${IN}/event.pamphlet - @ echo 28 making ${MID}/event.h from ${IN}/event.pamphlet + @ echo 30 making ${MID}/event.h from ${IN}/event.pamphlet @ (cd ${MID} ; ${TANGLE} -R"event.h" ${IN}/event.pamphlet >event.h ) ${MID}/event.c: ${IN}/event.pamphlet - @ echo 29 making ${MID}/event.c from ${IN}/event.pamphlet + @ echo 31 making ${MID}/event.c from ${IN}/event.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/event.pamphlet >event.c ) ${MIDOBJ}/event.o: ${MID}/event.c - @ echo 30 making ${MIDOBJ}/event.o from ${MID}/event.c + @ echo 32 making ${MIDOBJ}/event.o from ${MID}/event.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/event.c ) ${DOC}/event.dvi: ${IN}/event.pamphlet - @ echo 31 making ${DOC}/event.dvi from ${IN}/event.pamphlet + @ echo 33 making ${DOC}/event.dvi from ${IN}/event.pamphlet @ (cd ${DOC} ; \ cp ${IN}/event.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} event ; \ @@ -299,16 +299,16 @@ ${DOC}/event.dvi: ${IN}/event.pamphlet \section{ex2ht} <>= ${MID}/ex2ht.c: ${IN}/ex2ht.pamphlet - @ echo 32 making ${MID}/ex2ht.c from ${IN}/ex2ht.pamphlet + @ echo 34 making ${MID}/ex2ht.c from ${IN}/ex2ht.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/ex2ht.pamphlet >ex2ht.c ) ${MIDOBJ}/ex2ht.o: ${MID}/ex2ht.c - @ echo 33 making ${MIDOBJ}/ex2ht.o from ${MID}/ex2ht.c + @ echo 35 making ${MIDOBJ}/ex2ht.o from ${MID}/ex2ht.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/ex2ht.c ) ${DOC}/ex2ht.dvi: ${IN}/ex2ht.pamphlet - @ echo 34 making ${DOC}/ex2ht.dvi from ${IN}/ex2ht.pamphlet + @ echo 36 making ${DOC}/ex2ht.dvi from ${IN}/ex2ht.pamphlet @ (cd ${DOC} ; \ cp ${IN}/ex2ht.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} ex2ht ; \ @@ -320,23 +320,23 @@ ${DOC}/ex2ht.dvi: ${IN}/ex2ht.pamphlet \section{extent} <>= ${MID}/extent.h: ${IN}/extent.pamphlet - @ echo 35 making ${MID}/extent.h from ${IN}/extent.pamphlet + @ echo 37 making ${MID}/extent.h from ${IN}/extent.pamphlet @ (cd ${MID} ; ${TANGLE} -R"extent.h" ${IN}/extent.pamphlet >extent.h ) @ \section{extent1} <>= ${MID}/extent1.c: ${IN}/extent1.pamphlet - @ echo 36 making ${MID}/extent1.c from ${IN}/extent1.pamphlet + @ echo 38 making ${MID}/extent1.c from ${IN}/extent1.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/extent1.pamphlet >extent1.c ) ${MIDOBJ}/extent1.o: ${MID}/extent1.c - @ echo 37 making ${MIDOBJ}/extent1.o from ${MID}/extent1.c + @ echo 39 making ${MIDOBJ}/extent1.o from ${MID}/extent1.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/extent1.c ) ${DOC}/extent1.dvi: ${IN}/extent1.pamphlet - @ echo 38 making ${DOC}/extent1.dvi from ${IN}/extent1.pamphlet + @ echo 40 making ${DOC}/extent1.dvi from ${IN}/extent1.pamphlet @ (cd ${DOC} ; \ cp ${IN}/extent1.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} extent1 ; \ @@ -348,16 +348,16 @@ ${DOC}/extent1.dvi: ${IN}/extent1.pamphlet \section{extent2} <>= ${MID}/extent2.c: ${IN}/extent2.pamphlet - @ echo 39 making ${MID}/extent2.c from ${IN}/extent2.pamphlet + @ echo 41 making ${MID}/extent2.c from ${IN}/extent2.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/extent2.pamphlet >extent2.c ) ${MIDOBJ}/extent2.o: ${MID}/extent2.c - @ echo 40 making ${MIDOBJ}/extent2.o from ${MID}/extent2.c + @ echo 42 making ${MIDOBJ}/extent2.o from ${MID}/extent2.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/extent2.c ) ${DOC}/extent2.dvi: ${IN}/extent2.pamphlet - @ echo 41 making ${DOC}/extent2.dvi from ${IN}/extent2.pamphlet + @ echo 43 making ${DOC}/extent2.dvi from ${IN}/extent2.pamphlet @ (cd ${DOC} ; \ cp ${IN}/extent2.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} extent2 ; \ @@ -369,16 +369,16 @@ ${DOC}/extent2.dvi: ${IN}/extent2.pamphlet \section{form-ext} <>= ${MID}/form-ext.c: ${IN}/form-ext.pamphlet - @ echo 42 making ${MID}/form-ext.c from ${IN}/form-ext.pamphlet + @ echo 44 making ${MID}/form-ext.c from ${IN}/form-ext.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/form-ext.pamphlet >form-ext.c ) ${MIDOBJ}/form-ext.o: ${MID}/form-ext.c - @ echo 43 making ${MIDOBJ}/form-ext.o from ${MID}/form-ext.c + @ echo 45 making ${MIDOBJ}/form-ext.o from ${MID}/form-ext.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/form-ext.c ) ${DOC}/form-ext.dvi: ${IN}/form-ext.pamphlet - @ echo 44 making ${DOC}/form-ext.dvi from ${IN}/form-ext.pamphlet + @ echo 46 making ${DOC}/form-ext.dvi from ${IN}/form-ext.pamphlet @ (cd ${DOC} ; \ cp ${IN}/form-ext.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} form-ext ; \ @@ -390,20 +390,20 @@ ${DOC}/form-ext.dvi: ${IN}/form-ext.pamphlet \section{group} <>= ${MID}/group.h: ${IN}/group.pamphlet - @ echo 45 making ${MID}/group.h from ${IN}/group.pamphlet + @ echo 47 making ${MID}/group.h from ${IN}/group.pamphlet @ (cd ${MID} ; ${TANGLE} -R"group.h" ${IN}/group.pamphlet >group.h ) ${MID}/group.c: ${IN}/group.pamphlet - @ echo 46 making ${MID}/group.c from ${IN}/group.pamphlet + @ echo 48 making ${MID}/group.c from ${IN}/group.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/group.pamphlet >group.c ) ${MIDOBJ}/group.o: ${MID}/group.c - @ echo 47 making ${MIDOBJ}/group.o from ${MID}/group.c + @ echo 49 making ${MIDOBJ}/group.o from ${MID}/group.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/group.c ) ${DOC}/group.dvi: ${IN}/group.pamphlet - @ echo 48 making ${DOC}/group.dvi from ${IN}/group.pamphlet + @ echo 50 making ${DOC}/group.dvi from ${IN}/group.pamphlet @ (cd ${DOC} ; \ cp ${IN}/group.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} group ; \ @@ -415,16 +415,16 @@ ${DOC}/group.dvi: ${IN}/group.pamphlet \section{halloc} <>= ${MID}/halloc.c: ${IN}/halloc.pamphlet - @ echo 49 making ${MID}/halloc.c from ${IN}/halloc.pamphlet + @ echo 51 making ${MID}/halloc.c from ${IN}/halloc.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/halloc.pamphlet >halloc.c ) ${MIDOBJ}/halloc.o: ${MID}/halloc.c - @ echo 50 making ${MIDOBJ}/halloc.o from ${MID}/halloc.c + @ echo 52 making ${MIDOBJ}/halloc.o from ${MID}/halloc.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/halloc.c ) ${DOC}/halloc.dvi: ${IN}/halloc.pamphlet - @ echo 51 making ${DOC}/halloc.dvi from ${IN}/halloc.pamphlet + @ echo 53 making ${DOC}/halloc.dvi from ${IN}/halloc.pamphlet @ (cd ${DOC} ; \ cp ${IN}/halloc.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} halloc ; \ @@ -436,16 +436,16 @@ ${DOC}/halloc.dvi: ${IN}/halloc.pamphlet \section{hash} <>= ${MID}/hash.c: ${IN}/hash.pamphlet - @ echo 52 making ${MID}/hash.c from ${IN}/hash.pamphlet + @ echo 54 making ${MID}/hash.c from ${IN}/hash.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/hash.pamphlet >hash.c ) ${MIDOBJ}/hash.o: ${MID}/hash.c - @ echo 53 making ${MIDOBJ}/hash.o from ${MID}/hash.c + @ echo 55 making ${MIDOBJ}/hash.o from ${MID}/hash.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/hash.c ) ${DOC}/hash.dvi: ${IN}/hash.pamphlet - @ echo 54 making ${DOC}/hash.dvi from ${IN}/hash.pamphlet + @ echo 56 making ${DOC}/hash.dvi from ${IN}/hash.pamphlet @ (cd ${DOC} ; \ cp ${IN}/hash.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} hash ; \ @@ -457,16 +457,16 @@ ${DOC}/hash.dvi: ${IN}/hash.pamphlet \section{htadd} <>= ${MID}/htadd.c: ${IN}/htadd.pamphlet - @ echo 55 making ${MID}/htadd.c from ${IN}/htadd.pamphlet + @ echo 57 making ${MID}/htadd.c from ${IN}/htadd.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/htadd.pamphlet >htadd.c ) ${MIDOBJ}/htadd.o: ${MID}/htadd.c - @ echo 56 making ${MIDOBJ}/htadd.o from ${MID}/htadd.c + @ echo 58 making ${MIDOBJ}/htadd.o from ${MID}/htadd.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/htadd.c ) ${DOC}/htadd.dvi: ${IN}/htadd.pamphlet - @ echo 57 making ${DOC}/htadd.dvi from ${IN}/htadd.pamphlet + @ echo 59 making ${DOC}/htadd.dvi from ${IN}/htadd.pamphlet @ (cd ${DOC} ; \ cp ${IN}/htadd.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} htadd ; \ @@ -478,20 +478,20 @@ ${DOC}/htadd.dvi: ${IN}/htadd.pamphlet \section{hterror} <>= ${MID}/hterror.h: ${IN}/hterror.pamphlet - @ echo 58 making ${MID}/hterror.h from ${IN}/hterror.pamphlet + @ echo 60 making ${MID}/hterror.h from ${IN}/hterror.pamphlet @ (cd ${MID} ; ${TANGLE} -R"hterror.h" ${IN}/hterror.pamphlet >hterror.h ) ${MID}/hterror.c: ${IN}/hterror.pamphlet - @ echo 59 making ${MID}/hterror.c from ${IN}/hterror.pamphlet + @ echo 61 making ${MID}/hterror.c from ${IN}/hterror.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/hterror.pamphlet >hterror.c ) ${MIDOBJ}/hterror.o: ${MID}/hterror.c - @ echo 60 making ${MIDOBJ}/hterror.o from ${MID}/hterror.c + @ echo 62 making ${MIDOBJ}/hterror.o from ${MID}/hterror.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/hterror.c ) ${DOC}/hterror.dvi: ${IN}/hterror.pamphlet - @ echo 61 making ${DOC}/hterror.dvi from ${IN}/hterror.pamphlet + @ echo 63 making ${DOC}/hterror.dvi from ${IN}/hterror.pamphlet @ (cd ${DOC} ; \ cp ${IN}/hterror.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} hterror ; \ @@ -503,16 +503,16 @@ ${DOC}/hterror.dvi: ${IN}/hterror.pamphlet \section{hthits} <>= ${MID}/hthits.c: ${IN}/hthits.pamphlet - @ echo 62 making ${MID}/hthits.c from ${IN}/hthits.pamphlet + @ echo 64 making ${MID}/hthits.c from ${IN}/hthits.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/hthits.pamphlet >hthits.c ) ${MIDOBJ}/hthits.o: ${MID}/hthits.c - @ echo 63 making ${MIDOBJ}/hthits.o from ${MID}/hthits.c + @ echo 65 making ${MIDOBJ}/hthits.o from ${MID}/hthits.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/hthits.c ) ${DOC}/hthits.dvi: ${IN}/hthits.pamphlet - @ echo 64 making ${DOC}/hthits.dvi from ${IN}/hthits.pamphlet + @ echo 66 making ${DOC}/hthits.dvi from ${IN}/hthits.pamphlet @ (cd ${DOC} ; \ cp ${IN}/hthits.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} hthits ; \ @@ -524,16 +524,16 @@ ${DOC}/hthits.dvi: ${IN}/hthits.pamphlet \section{htinp} <>= ${MID}/htinp.c: ${IN}/htinp.pamphlet - @ echo 65 making ${MID}/htinp.c from ${IN}/htinp.pamphlet + @ echo 67 making ${MID}/htinp.c from ${IN}/htinp.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/htinp.pamphlet >htinp.c ) ${MIDOBJ}/htinp.o: ${MID}/htinp.c - @ echo 66 making ${MIDOBJ}/htinp.o from ${MID}/htinp.c + @ echo 68 making ${MIDOBJ}/htinp.o from ${MID}/htinp.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/htinp.c ) ${DOC}/htinp.dvi: ${IN}/htinp.pamphlet - @ echo 67 making ${DOC}/htinp.dvi from ${IN}/htinp.pamphlet + @ echo 69 making ${DOC}/htinp.dvi from ${IN}/htinp.pamphlet @ (cd ${DOC} ; \ cp ${IN}/htinp.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} htinp ; \ @@ -545,20 +545,20 @@ ${DOC}/htinp.dvi: ${IN}/htinp.pamphlet \section{hyper} <>= ${MID}/hyper.h: ${IN}/hyper.pamphlet - @ echo 68 making ${MID}/hyper.h from ${IN}/hyper.pamphlet + @ echo 70 making ${MID}/hyper.h from ${IN}/hyper.pamphlet @ (cd ${MID} ; ${TANGLE} -R"hyper.h" ${IN}/hyper.pamphlet >hyper.h ) ${MID}/hyper.c: ${IN}/hyper.pamphlet - @ echo 69 making ${MID}/hyper.c from ${IN}/hyper.pamphlet + @ echo 71 making ${MID}/hyper.c from ${IN}/hyper.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/hyper.pamphlet >hyper.c ) ${MIDOBJ}/hyper.o: ${MID}/hyper.c - @ echo 70 making ${MIDOBJ}/hyper.o from ${MID}/hyper.c + @ echo 72 making ${MIDOBJ}/hyper.o from ${MID}/hyper.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/hyper.c ) ${DOC}/hyper.dvi: ${IN}/hyper.pamphlet - @ echo 71 making ${DOC}/hyper.dvi from ${IN}/hyper.pamphlet + @ echo 73 making ${DOC}/hyper.dvi from ${IN}/hyper.pamphlet @ (cd ${DOC} ; \ cp ${IN}/hyper.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} hyper ; \ @@ -570,20 +570,20 @@ ${DOC}/hyper.dvi: ${IN}/hyper.pamphlet \section{initx} <>= ${MID}/initx.h: ${IN}/initx.pamphlet - @ echo 72 making ${MID}/initx.h from ${IN}/initx.pamphlet + @ echo 74 making ${MID}/initx.h from ${IN}/initx.pamphlet @ (cd ${MID} ; ${TANGLE} -R"initx.h" ${IN}/initx.pamphlet >initx.h ) ${MID}/initx.c: ${IN}/initx.pamphlet - @ echo 73 making ${MID}/initx.c from ${IN}/initx.pamphlet + @ echo 75 making ${MID}/initx.c from ${IN}/initx.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/initx.pamphlet >initx.c ) ${MIDOBJ}/initx.o: ${MID}/initx.c - @ echo 74 making ${MIDOBJ}/initx.o from ${MID}/initx.c + @ echo 76 making ${MIDOBJ}/initx.o from ${MID}/initx.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/initx.c ) ${DOC}/initx.dvi: ${IN}/initx.pamphlet - @ echo 75 making ${DOC}/initx.dvi from ${IN}/initx.pamphlet + @ echo 77 making ${DOC}/initx.dvi from ${IN}/initx.pamphlet @ (cd ${DOC} ; \ cp ${IN}/initx.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} initx ; \ @@ -595,16 +595,16 @@ ${DOC}/initx.dvi: ${IN}/initx.pamphlet \section{input} <>= ${MID}/input.c: ${IN}/input.pamphlet - @ echo 76 making ${MID}/input.c from ${IN}/input.pamphlet + @ echo 78 making ${MID}/input.c from ${IN}/input.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/input.pamphlet >input.c ) ${MIDOBJ}/input.o: ${MID}/input.c - @ echo 77 making ${MIDOBJ}/input.o from ${MID}/input.c + @ echo 79 making ${MIDOBJ}/input.o from ${MID}/input.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/input.c ) ${DOC}/input.dvi: ${IN}/input.pamphlet - @ echo 78 making ${DOC}/input.dvi from ${IN}/input.pamphlet + @ echo 80 making ${DOC}/input.dvi from ${IN}/input.pamphlet @ (cd ${DOC} ; \ cp ${IN}/input.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} input ; \ @@ -616,16 +616,16 @@ ${DOC}/input.dvi: ${IN}/input.pamphlet \section{item} <>= ${MID}/item.c: ${IN}/item.pamphlet - @ echo 79 making ${MID}/item.c from ${IN}/item.pamphlet + @ echo 81 making ${MID}/item.c from ${IN}/item.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/item.pamphlet >item.c ) ${MIDOBJ}/item.o: ${MID}/item.c - @ echo 80 making ${MIDOBJ}/item.o from ${MID}/item.c + @ echo 82 making ${MIDOBJ}/item.o from ${MID}/item.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/item.c ) ${DOC}/item.dvi: ${IN}/item.pamphlet - @ echo 81 making ${DOC}/item.dvi from ${IN}/item.pamphlet + @ echo 83 making ${DOC}/item.dvi from ${IN}/item.pamphlet @ (cd ${DOC} ; \ cp ${IN}/item.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} item ; \ @@ -637,20 +637,20 @@ ${DOC}/item.dvi: ${IN}/item.pamphlet \section{keyin} <>= ${MID}/keyin.h: ${IN}/keyin.pamphlet - @ echo 82 making ${MID}/keyin.h from ${IN}/keyin.pamphlet + @ echo 84 making ${MID}/keyin.h from ${IN}/keyin.pamphlet @ (cd ${MID} ; ${TANGLE} -R"keyin.h" ${IN}/keyin.pamphlet >keyin.h ) ${MID}/keyin.c: ${IN}/keyin.pamphlet - @ echo 83 making ${MID}/keyin.c from ${IN}/keyin.pamphlet + @ echo 85 making ${MID}/keyin.c from ${IN}/keyin.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/keyin.pamphlet >keyin.c ) ${MIDOBJ}/keyin.o: ${MID}/keyin.c - @ echo 84 making ${MIDOBJ}/keyin.o from ${MID}/keyin.c + @ echo 86 making ${MIDOBJ}/keyin.o from ${MID}/keyin.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/keyin.c ) ${DOC}/keyin.dvi: ${IN}/keyin.pamphlet - @ echo 85 making ${DOC}/keyin.dvi from ${IN}/keyin.pamphlet + @ echo 87 making ${DOC}/keyin.dvi from ${IN}/keyin.pamphlet @ (cd ${DOC} ; \ cp ${IN}/keyin.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} keyin ; \ @@ -662,20 +662,20 @@ ${DOC}/keyin.dvi: ${IN}/keyin.pamphlet \section{lex} <>= ${MID}/lex.h: ${IN}/lex.pamphlet - @ echo 86 making ${MID}/lex.h from ${IN}/lex.pamphlet + @ echo 88 making ${MID}/lex.h from ${IN}/lex.pamphlet @ (cd ${MID} ; ${TANGLE} -R"lex.h" ${IN}/lex.pamphlet >lex.h ) ${MID}/lex.c: ${IN}/lex.pamphlet - @ echo 87 making ${MID}/lex.c from ${IN}/lex.pamphlet + @ echo 89 making ${MID}/lex.c from ${IN}/lex.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/lex.pamphlet >lex.c ) ${MIDOBJ}/lex.o: ${MID}/lex.c - @ echo 88 making ${MIDOBJ}/lex.o from ${MID}/lex.c + @ echo 90 making ${MIDOBJ}/lex.o from ${MID}/lex.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/lex.c ) ${DOC}/lex.dvi: ${IN}/lex.pamphlet - @ echo 89 making ${DOC}/lex.dvi from ${IN}/lex.pamphlet + @ echo 91 making ${DOC}/lex.dvi from ${IN}/lex.pamphlet @ (cd ${DOC} ; \ cp ${IN}/lex.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} lex ; \ @@ -687,16 +687,16 @@ ${DOC}/lex.dvi: ${IN}/lex.pamphlet \section{macro} <>= ${MID}/macro.c: ${IN}/macro.pamphlet - @ echo 90 making ${MID}/macro.c from ${IN}/macro.pamphlet + @ echo 92 making ${MID}/macro.c from ${IN}/macro.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/macro.pamphlet >macro.c ) ${MIDOBJ}/macro.o: ${MID}/macro.c - @ echo 91 making ${MIDOBJ}/macro.o from ${MID}/macro.c + @ echo 93 making ${MIDOBJ}/macro.o from ${MID}/macro.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/macro.c ) ${DOC}/macro.dvi: ${IN}/macro.pamphlet - @ echo 92 making ${DOC}/macro.dvi from ${IN}/macro.pamphlet + @ echo 94 making ${DOC}/macro.dvi from ${IN}/macro.pamphlet @ (cd ${DOC} ; \ cp ${IN}/macro.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} macro ; \ @@ -708,20 +708,20 @@ ${DOC}/macro.dvi: ${IN}/macro.pamphlet \section{mem} <>= ${MID}/mem.h: ${IN}/mem.pamphlet - @ echo 93 making ${MID}/mem.h from ${IN}/mem.pamphlet + @ echo 95 making ${MID}/mem.h from ${IN}/mem.pamphlet @ (cd ${MID} ; ${TANGLE} -R"mem.h" ${IN}/mem.pamphlet >mem.h ) ${MID}/mem.c: ${IN}/mem.pamphlet - @ echo 94 making ${MID}/mem.c from ${IN}/mem.pamphlet + @ echo 96 making ${MID}/mem.c from ${IN}/mem.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/mem.pamphlet >mem.c ) ${MIDOBJ}/mem.o: ${MID}/mem.c - @ echo 95 making ${MIDOBJ}/mem.o from ${MID}/mem.c + @ echo 97 making ${MIDOBJ}/mem.o from ${MID}/mem.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/mem.c ) ${DOC}/mem.dvi: ${IN}/mem.pamphlet - @ echo 96 making ${DOC}/mem.dvi from ${IN}/mem.pamphlet + @ echo 98 making ${DOC}/mem.dvi from ${IN}/mem.pamphlet @ (cd ${DOC} ; \ cp ${IN}/mem.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} mem ; \ @@ -733,20 +733,20 @@ ${DOC}/mem.dvi: ${IN}/mem.pamphlet \section{parse} <>= ${MID}/parse.h: ${IN}/parse.pamphlet - @ echo 97 making ${MID}/parse.h from ${IN}/parse.pamphlet + @ echo 99 making ${MID}/parse.h from ${IN}/parse.pamphlet @ (cd ${MID} ; ${TANGLE} -R"parse.h" ${IN}/parse.pamphlet >parse.h ) ${MID}/parse.c: ${IN}/parse.pamphlet - @ echo 98 making ${MID}/parse.c from ${IN}/parse.pamphlet + @ echo 100 making ${MID}/parse.c from ${IN}/parse.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/parse.pamphlet >parse.c ) ${MIDOBJ}/parse.o: ${MID}/parse.c - @ echo 99 making ${MIDOBJ}/parse.o from ${MID}/parse.c + @ echo 101 making ${MIDOBJ}/parse.o from ${MID}/parse.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/parse.c ) ${DOC}/parse.dvi: ${IN}/parse.pamphlet - @ echo 100 making ${DOC}/parse.dvi from ${IN}/parse.pamphlet + @ echo 102 making ${DOC}/parse.dvi from ${IN}/parse.pamphlet @ (cd ${DOC} ; \ cp ${IN}/parse.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} parse ; \ @@ -758,20 +758,20 @@ ${DOC}/parse.dvi: ${IN}/parse.pamphlet \section{parse-aux} <>= ${MID}/parse-aux.h: ${IN}/parse-aux.pamphlet - @ echo 101 making ${MID}/parse-aux.h from ${IN}/parse-aux.pamphlet + @ echo 103 making ${MID}/parse-aux.h from ${IN}/parse-aux.pamphlet @ (cd ${MID} ; ${TANGLE} -R"parseaux.h" ${IN}/parse-aux.pamphlet >parse-aux.h ) ${MID}/parse-aux.c: ${IN}/parse-aux.pamphlet - @ echo 102 making ${MID}/parse-aux.c from ${IN}/parse-aux.pamphlet + @ echo 104 making ${MID}/parse-aux.c from ${IN}/parse-aux.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/parse-aux.pamphlet >parse-aux.c ) ${MIDOBJ}/parse-aux.o: ${MID}/parse-aux.c - @ echo 103 making ${MIDOBJ}/parse-aux.o from ${MID}/parse-aux.c + @ echo 105 making ${MIDOBJ}/parse-aux.o from ${MID}/parse-aux.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/parse-aux.c ) ${DOC}/parse-aux.dvi: ${IN}/parse-aux.pamphlet - @ echo 104 making ${DOC}/parse-aux.dvi from ${IN}/parse-aux.pamphlet + @ echo 106 making ${DOC}/parse-aux.dvi from ${IN}/parse-aux.pamphlet @ (cd ${DOC} ; \ cp ${IN}/parse-aux.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} parse-aux ; \ @@ -783,16 +783,17 @@ ${DOC}/parse-aux.dvi: ${IN}/parse-aux.pamphlet \section{parse-input} <>= ${MID}/parse-input.c: ${IN}/parse-input.pamphlet - @ echo 105 making ${MID}/parse-input.c from ${IN}/parse-input.pamphlet + @ echo 107 making ${MID}/parse-input.c from ${IN}/parse-input.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/parse-input.pamphlet >parse-input.c ) ${MIDOBJ}/parse-input.o: ${MID}/parse-input.c - @ echo 106 making ${MIDOBJ}/parse-input.o from ${MID}/parse-input.c + @ echo 108 making ${MIDOBJ}/parse-input.o from ${MID}/parse-input.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/parse-input.c ) ${DOC}/parse-input.dvi: ${IN}/parse-input.pamphlet - @ echo 107 making ${DOC}/parse-input.dvi from ${IN}/parse-input.pamphlet + @ echo 109 making ${DOC}/parse-input.dvi \ + from ${IN}/parse-input.pamphlet @ (cd ${DOC} ; \ cp ${IN}/parse-input.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} parse-input ; \ @@ -804,20 +805,21 @@ ${DOC}/parse-input.dvi: ${IN}/parse-input.pamphlet \section{parse-paste} <>= ${MID}/parse-paste.h: ${IN}/parse-paste.pamphlet - @ echo 108 making ${MID}/parse-paste.h from ${IN}/parse-paste.pamphlet + @ echo 110 making ${MID}/parse-paste.h from ${IN}/parse-paste.pamphlet @ (cd ${MID} ; ${TANGLE} -R"parsepaste.h" ${IN}/parse-paste.pamphlet >parse-paste.h ) ${MID}/parse-paste.c: ${IN}/parse-paste.pamphlet - @ echo 109 making ${MID}/parse-paste.c from ${IN}/parse-paste.pamphlet + @ echo 111 making ${MID}/parse-paste.c from ${IN}/parse-paste.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/parse-paste.pamphlet >parse-paste.c ) ${MIDOBJ}/parse-paste.o: ${MID}/parse-paste.c - @ echo 110 making ${MIDOBJ}/parse-paste.o from ${MID}/parse-paste.c + @ echo 112 making ${MIDOBJ}/parse-paste.o from ${MID}/parse-paste.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/parse-paste.c ) ${DOC}/parse-paste.dvi: ${IN}/parse-paste.pamphlet - @ echo 111 making ${DOC}/parse-paste.dvi from ${IN}/parse-paste.pamphlet + @ echo 113 making ${DOC}/parse-paste.dvi \ + from ${IN}/parse-paste.pamphlet @ (cd ${DOC} ; \ cp ${IN}/parse-paste.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} parse-paste ; \ @@ -829,20 +831,21 @@ ${DOC}/parse-paste.dvi: ${IN}/parse-paste.pamphlet \section{parse-types} <>= ${MID}/parse-types.h: ${MID}/hterror.h ${IN}/parse-types.pamphlet - @ echo 112 making ${MID}/parse-types.h from ${IN}/parse-types.pamphlet + @ echo 114 making ${MID}/parse-types.h from ${IN}/parse-types.pamphlet @ (cd ${MID} ; ${TANGLE} -R"parsetypes.h" ${IN}/parse-types.pamphlet >parse-types.h ) ${MID}/parse-types.c: ${IN}/parse-types.pamphlet - @ echo 113 making ${MID}/parse-types.c from ${IN}/parse-types.pamphlet + @ echo 115 making ${MID}/parse-types.c from ${IN}/parse-types.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/parse-types.pamphlet >parse-types.c ) ${MIDOBJ}/parse-types.o: ${MID}/parse-types.c - @ echo 114 making ${MIDOBJ}/parse-types.o from ${MID}/parse-types.c + @ echo 116 making ${MIDOBJ}/parse-types.o from ${MID}/parse-types.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/parse-types.c ) ${DOC}/parse-types.dvi: ${IN}/parse-types.pamphlet - @ echo 115 making ${DOC}/parse-types.dvi from ${IN}/parse-types.pamphlet + @ echo 117 making ${DOC}/parse-types.dvi \ + from ${IN}/parse-types.pamphlet @ (cd ${DOC} ; \ cp ${IN}/parse-types.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} parse-types ; \ @@ -854,16 +857,16 @@ ${DOC}/parse-types.dvi: ${IN}/parse-types.pamphlet \section{readbitmap} <>= ${MID}/readbitmap.c: ${IN}/readbitmap.pamphlet - @ echo 116 making ${MID}/readbitmap.c from ${IN}/readbitmap.pamphlet + @ echo 118 making ${MID}/readbitmap.c from ${IN}/readbitmap.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/readbitmap.pamphlet >readbitmap.c ) ${MIDOBJ}/readbitmap.o: ${MID}/readbitmap.c - @ echo 117 making ${MIDOBJ}/readbitmap.o from ${MID}/readbitmap.c + @ echo 119 making ${MIDOBJ}/readbitmap.o from ${MID}/readbitmap.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/readbitmap.c ) ${DOC}/readbitmap.dvi: ${IN}/readbitmap.pamphlet - @ echo 118 making ${DOC}/readbitmap.dvi from ${IN}/readbitmap.pamphlet + @ echo 120 making ${DOC}/readbitmap.dvi from ${IN}/readbitmap.pamphlet @ (cd ${DOC} ; \ cp ${IN}/readbitmap.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} readbitmap ; \ @@ -875,20 +878,20 @@ ${DOC}/readbitmap.dvi: ${IN}/readbitmap.pamphlet \section{scrollbar} <>= ${MID}/scrollbar.h: ${IN}/scrollbar.pamphlet - @ echo 119 making ${MID}/scrollbar.h from ${IN}/scrollbar.pamphlet + @ echo 121 making ${MID}/scrollbar.h from ${IN}/scrollbar.pamphlet @ (cd ${MID} ; ${TANGLE} -R"scrollbar.h" ${IN}/scrollbar.pamphlet >scrollbar.h ) ${MID}/scrollbar.c: ${IN}/scrollbar.pamphlet - @ echo 120 making ${MID}/scrollbar.c from ${IN}/scrollbar.pamphlet + @ echo 122 making ${MID}/scrollbar.c from ${IN}/scrollbar.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/scrollbar.pamphlet >scrollbar.c ) ${MIDOBJ}/scrollbar.o: ${MID}/scrollbar.c - @ echo 121 making ${MIDOBJ}/scrollbar.o from ${MID}/scrollbar.c + @ echo 123 making ${MIDOBJ}/scrollbar.o from ${MID}/scrollbar.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/scrollbar.c ) ${DOC}/scrollbar.dvi: ${IN}/scrollbar.pamphlet - @ echo 122 making ${DOC}/scrollbar.dvi from ${IN}/scrollbar.pamphlet + @ echo 124 making ${DOC}/scrollbar.dvi from ${IN}/scrollbar.pamphlet @ (cd ${DOC} ; \ cp ${IN}/scrollbar.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} scrollbar ; \ @@ -900,17 +903,17 @@ ${DOC}/scrollbar.dvi: ${IN}/scrollbar.pamphlet \section{search} <>= ${OUTLIB}/htsearch: ${IN}/search.pamphlet - @echo 123 making ${OUTLIB}/htsearch from ${IN}/search.pamphlet + @echo 125 making ${OUTLIB}/htsearch from ${IN}/search.pamphlet @${TANGLE} -R"htsearch" ${IN}/search.pamphlet >${OUTLIB}/htsearch @chmod a+x ${OUTLIB}/htsearch ${OUTLIB}/presea: ${IN}/search.pamphlet - @echo 124 making ${OUTLIB}/presea from ${IN}/search.pamphlet + @echo 126 making ${OUTLIB}/presea from ${IN}/search.pamphlet @${TANGLE} -R"presea" ${IN}/search.pamphlet >${OUTLIB}/presea @chmod a+x ${OUTLIB}/presea ${DOC}/search.dvi: ${IN}/search.pamphlet - @ echo 122 making ${DOC}/search.dvi from ${IN}/search.pamphlet + @ echo 127 making ${DOC}/search.dvi from ${IN}/search.pamphlet @ (cd ${DOC} ; \ cp ${IN}/search.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} search ; \ @@ -922,20 +925,20 @@ ${DOC}/search.dvi: ${IN}/search.pamphlet \section{show-types} <>= ${MID}/show-types.h: ${IN}/show-types.pamphlet - @ echo 125 making ${MID}/show-types.h from ${IN}/show-types.pamphlet + @ echo 128 making ${MID}/show-types.h from ${IN}/show-types.pamphlet @ (cd ${MID} ; ${TANGLE} -R"showtypes.h" ${IN}/show-types.pamphlet >show-types.h ) ${MID}/show-types.c: ${IN}/show-types.pamphlet - @ echo 126 making ${MID}/show-types.c from ${IN}/show-types.pamphlet + @ echo 129 making ${MID}/show-types.c from ${IN}/show-types.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/show-types.pamphlet >show-types.c ) ${MIDOBJ}/show-types.o: ${MID}/show-types.c - @ echo 127 making ${MIDOBJ}/show-types.o from ${MID}/show-types.c + @ echo 130 making ${MIDOBJ}/show-types.o from ${MID}/show-types.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/show-types.c ) ${DOC}/show-types.dvi: ${IN}/show-types.pamphlet - @ echo 128 making ${DOC}/show-types.dvi from ${IN}/show-types.pamphlet + @ echo 131 making ${DOC}/show-types.dvi from ${IN}/show-types.pamphlet @ (cd ${DOC} ; \ cp ${IN}/show-types.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} show-types ; \ @@ -947,16 +950,16 @@ ${DOC}/show-types.dvi: ${IN}/show-types.pamphlet \section{spadbuf} <>= ${MID}/spadbuf.c: ${IN}/spadbuf.pamphlet - @ echo 129 making ${MID}/spadbuf.c from ${IN}/spadbuf.pamphlet + @ echo 132 making ${MID}/spadbuf.c from ${IN}/spadbuf.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/spadbuf.pamphlet >spadbuf.c ) ${MIDOBJ}/spadbuf.o: ${MID}/spadbuf.c - @ echo 130 making ${MIDOBJ}/spadbuf.o from ${MID}/spadbuf.c + @ echo 133 making ${MIDOBJ}/spadbuf.o from ${MID}/spadbuf.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/spadbuf.c ) ${DOC}/spadbuf.dvi: ${IN}/spadbuf.pamphlet - @ echo 131 making ${DOC}/spadbuf.dvi from ${IN}/spadbuf.pamphlet + @ echo 134 making ${DOC}/spadbuf.dvi from ${IN}/spadbuf.pamphlet @ (cd ${DOC} ; \ cp ${IN}/spadbuf.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} spadbuf ; \ @@ -968,16 +971,16 @@ ${DOC}/spadbuf.dvi: ${IN}/spadbuf.pamphlet \section{spadint} <>= ${MID}/spadint.c: ${IN}/spadint.pamphlet - @ echo 132 making ${MID}/spadint.c from ${IN}/spadint.pamphlet + @ echo 135 making ${MID}/spadint.c from ${IN}/spadint.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/spadint.pamphlet >spadint.c ) ${MIDOBJ}/spadint.o: ${MID}/spadint.c - @ echo 133 making ${MIDOBJ}/spadint.o from ${MID}/spadint.c + @ echo 136 making ${MIDOBJ}/spadint.o from ${MID}/spadint.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/spadint.c ) ${DOC}/spadint.dvi: ${IN}/spadint.pamphlet - @ echo 134 making ${DOC}/spadint.dvi from ${IN}/spadint.pamphlet + @ echo 137 making ${DOC}/spadint.dvi from ${IN}/spadint.pamphlet @ (cd ${DOC} ; \ cp ${IN}/spadint.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} spadint ; \ @@ -989,20 +992,20 @@ ${DOC}/spadint.dvi: ${IN}/spadint.pamphlet \section{titlebar} <>= ${MID}/titlebar.h: ${IN}/titlebar.pamphlet - @ echo 135 making ${MID}/titlebar.h from ${IN}/titlebar.pamphlet + @ echo 138 making ${MID}/titlebar.h from ${IN}/titlebar.pamphlet @ (cd ${MID} ; ${TANGLE} -R"titlebar.h" ${IN}/titlebar.pamphlet >titlebar.h ) ${MID}/titlebar.c: ${IN}/titlebar.pamphlet - @ echo 136 making ${MID}/titlebar.c from ${IN}/titlebar.pamphlet + @ echo 139 making ${MID}/titlebar.c from ${IN}/titlebar.pamphlet @ (cd ${MID} ; ${TANGLE} ${IN}/titlebar.pamphlet >titlebar.c ) ${MIDOBJ}/titlebar.o: ${MID}/titlebar.c - @ echo 137 making ${MIDOBJ}/titlebar.o from ${MID}/titlebar.c + @ echo 140 making ${MIDOBJ}/titlebar.o from ${MID}/titlebar.c @ ( cd ${MIDOBJ} ; \ ${CC} -I${INC} -I${MID} -c ${CFLAGS} ${MID}/titlebar.c ) ${DOC}/titlebar.dvi: ${IN}/titlebar.pamphlet - @ echo 138 making ${DOC}/titlebar.dvi from ${IN}/titlebar.pamphlet + @ echo 141 making ${DOC}/titlebar.dvi from ${IN}/titlebar.pamphlet @ (cd ${DOC} ; \ cp ${IN}/titlebar.pamphlet ${DOC} ; \ ${DOCUMENT} ${NOISE} titlebar ; \ @@ -1014,21 +1017,21 @@ ${DOC}/titlebar.dvi: ${IN}/titlebar.pamphlet \section{token} <>= ${MID}/token.h: ${IN}/token.pamphlet - @ echo 139 making ${MID}/token.h from ${IN}/token.pamphlet + @ echo 142 making ${MID}/token.h from ${IN}/token.pamphlet @ (cd ${MID} ; ${TANGLE} -R"token.h" ${IN}/token.pamphlet >token.h ) @ \section{ex2ht binary} <>= ${OUTLIB}/ex2ht: ${EX2HT_OBJS} - @ echo linking ${OUTLIB}/ex2ht + @ echo 143 linking ${OUTLIB}/ex2ht @ ${CC} ${EX2HT_OBJS} -o ${OUTLIB}/ex2ht ${LDFLAGS} @ \section{htadd binary} <>= ${OUT}/htadd: ${HTADD_OBJS} ${LIB}/sockio-c.o ${LIB}/bsdsignal.o - @ echo linking ${OUT}/htadd + @ echo 144 linking ${OUT}/htadd @ ${CC} ${HTADD_OBJS} -o ${OUT}/htadd ${LIB}/sockio-c.o \ ${LIB}/bsdsignal.o ${LDFLAGS} @@ -1036,7 +1039,7 @@ ${OUT}/htadd: ${HTADD_OBJS} ${LIB}/sockio-c.o ${LIB}/bsdsignal.o \section{hthits binary} <>= ${OUTLIB}/hthits: ${HTHITS_OBJS} - @ echo linking ${OUTLIB}/hthits + @ echo 145 linking ${OUTLIB}/hthits @ ${CC} ${HTHITS_OBJS} -o ${OUTLIB}/hthits ${LDFLAGS} @ @@ -1044,7 +1047,7 @@ ${OUTLIB}/hthits: ${HTHITS_OBJS} <>= ${OUT}/hypertex: ${HYPER_OBJS} ${LIB}/sockio-c.o ${LIB}/pixmap.o \ ${LIB}/spadcolors.o ${LIB}/util.o ${LIB}/bsdsignal.o - @ echo 139 linking ${OUT}/hypertex + @ echo 146 linking ${OUT}/hypertex (cd ${OUT} ; \ ${CC} -g ${HYPER_OBJS} -o ${OUT}/hypertex ${LIB}/sockio-c.o \ ${LIB}/pixmap.o ${LIB}/spadcolors.o ${LIB}/util.o \ @@ -1054,7 +1057,7 @@ ${OUT}/hypertex: ${HYPER_OBJS} ${LIB}/sockio-c.o ${LIB}/pixmap.o \ \section{htsearch binary} <>= ${OUT}/htsearch: ${OUTLIB}/htsearch ${OUTLIB}/presea - @ echo making ${OUT}/htsearch + @ echo 147 making ${OUT}/htsearch @ cp -p ${OUTLIB}/htsearch ${OUT}/htsearch @ cp -p ${OUTLIB}/presea ${OUT}/presea @@ -1064,7 +1067,7 @@ ${OUT}/htsearch: ${OUTLIB}/htsearch ${OUTLIB}/presea ${OUTLIB}/spadbuf: ${SPADBUF_OBJS} ${LIB}/sockio-c.o ${LIB}/bsdsignal.o \ ${LIB}/wct.o ${LIB}/edin.o ${LIB}/prt.o ${LIB}/cursor.o \ ${LIB}/fnct-key.o - @ echo making ${OUTLIB}/spadbuf + @ echo 148 making ${OUTLIB}/spadbuf @ (cd ${OUTLIB} ; \ ${CC} ${SPADBUF_OBJS} -o ${OUTLIB}/spadbuf ${LIB}/sockio-c.o \ ${LIB}/bsdsignal.o ${LIB}/wct.o ${LIB}/edin.o ${LIB}/prt.o \ @@ -1078,7 +1081,7 @@ is up to date. The file contains absolute offsets into the various order to do this we run [[htadd]] in the [[${HYPER}/pages]] directory. <>= ${HYPER}/pages/ht.db: ${IN}/pages/*.ht ${IN}/pages/*.pht - @echo making ${HYPER}/pages from ${SRC}/pages directory + @echo 149 making ${HYPER}/pages from ${SRC}/pages directory @ mkdir -p ${HYPER}/pages @ cp -pr pages/*.ht ${HYPER}/pages @ cp -pr pages/*.pht ${HYPER}/pages @@ -1090,14 +1093,55 @@ ${HYPER}/pages/ht.db: ${IN}/pages/*.ht ${IN}/pages/*.pht @ cp -pr viewports ${MNT}/${SYS}/doc @ +<>= +${HYPER}/rootpage.xhtml: ${IN}/bookvol11.pamphlet + @ echo 150 making ${HYPER}/xhtml from ${IN}/bookvol11.pamphlet + ( cd ${HYPER} ; \ + cp ${IN}/bookvol11.pamphlet . ; \ + ${TANGLE} -t8 bookvol11.pamphlet >Makefile.pages ; \ + make -j 10 -f Makefile.pages ; \ + rm -f Makefile.pages ; \ + rm -f bookvol11.pamphlet ) + +${HYPER}/bigbayou.png: ${IN}/bigbayou.png + @ echo 151 making ${HYPER}/bigbayou.png from ${IN}/bigbayou.png + @ cp ${IN}/bigbayou.png ${HYPER}/bigbayou.png + +${HYPER}/doctitle.png: ${IN}/doctitle.png + @ echo 152 making ${HYPER}/doctitle.png from ${IN}/doctitle.png + @ cp ${IN}/doctitle.png ${HYPER}/doctitle.png + +${MNT}/${SYS}/doc/bookvol11.dvi: ${IN}/bookvol11.pamphlet + @ echo 153 making ${MNT}/${SYS}/doc/bookvol11.dvi \ + from ${IN}/bookvol11.pamphlet + @ ( cd ${MNT}/${SYS} ; \ + cp ${IN}/bookvol11.pamphlet . ; \ + ${DOCUMENT} ${NOISE} bookvol11 ; \ + rm -f bookvol11.pamphlet ; \ + rm -f bookvol11.tex ; \ + rm -f bookvol11.idx ; \ + rm -f bookvol11 ) + +@ +<>= +${HYPER}/axbook/book-index.xhtml: ${IN}/axbook.tgz + @ echo 154 making ${HYPER}/axbook/*.xhtml from ${IN}/axbook.tgz + @( cd ${HYPER} ; tar -zxf ${IN}/axbook.tgz ) + +@ <<*>>= <> all: ${INCLUDES} ${BITMAPS} ${OBJS} ${SCRIPTS} ${BINFILES} \ - ${HYPER}/pages/ht.db ${DOCFILES} - @ echo 141 finished ${IN} + ${HYPER}/pages/ht.db ${DOCFILES} ${HYPER}/rootpage.xhtml \ + ${HYPER}/axbook/book-index.xhtml ${MNT}/${SYS}/doc/bookvol11.dvi \ + ${HYPER}/bigbayou.png ${HYPER}/doctitle.png + @ echo 155 finished ${IN} clean: - @echo 142 cleaning ${SRC}/hyper + @echo 156 cleaning ${SRC}/hyper + +<> +<> <> <> @@ -1145,6 +1189,7 @@ clean: <> <> <> + <> <> diff --git a/src/hyper/axbook.tgz b/src/hyper/axbook.tgz new file mode 100644 index 0000000..2baf4bb Binary files /dev/null and b/src/hyper/axbook.tgz differ diff --git a/src/hyper/bigbayou.png b/src/hyper/bigbayou.png new file mode 100644 index 0000000..14a7e2a Binary files /dev/null and b/src/hyper/bigbayou.png differ diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet new file mode 100644 index 0000000..295ffe0 --- /dev/null +++ b/src/hyper/bookvol11.pamphlet @@ -0,0 +1,22191 @@ +\documentclass{book} +\usepackage{axiom} +\usepackage{makeidx} +\makeindex +\usepackage{graphicx} +\begin{document} +\begin{titlepage} +\center{\includegraphics{ps/axiomfront.ps}} +\vskip 0.1in +\includegraphics{ps/bluebayou.ps}\\ +\vskip 0.1in +{\Huge{The 30 Year Horizon}} +\vskip 0.1in +$$ +\begin{array}{lll} +Manuel\ Bronstein & William\ Burge & Timothy\ Daly \\ +James\ Davenport & Michael\ Dewar & Martin\ Dunstan \\ +Albrecht\ Fortenbacher & Patrizia\ Gianni & Johannes\ Grabmeier \\ +Jocelyn\ Guidry & Richard\ Jenks & Larry\ Lambe \\ +Michael\ Monagan & Scott\ Morrison & William\ Sit \\ +Jonathan\ Steinbach & Robert\ Sutor & Barry\ Trager \\ +Stephen\ Watt & Jim\ Wen & Clifton\ Williamson +\end{array} +$$ +\center{\large{VOLUME 11: BROWSER}} +\end{titlepage} +\pagenumbering{roman} +\begin{verbatim} +Portions Copyright (c) 2007 Timothy Daly +Portions Copyright (c) 2007 Alfredo Portes +Portions Copyright (c) 2007 Arthur Ralfs + +The Blue Bayou image Copyright (c) 2004 Jocelyn Guidry + +This book is licensed as follows: + +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. + +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. + +\end{verbatim} + +Inclusion of names in the list of credits is based on historical +information and is as accurate as possible. Inclusion of names +does not in any way imply an endorsement but represents historical +influence on Axiom development. +\vfill +\eject +\begin{tabular}{lll} +Cyril Alberga & Roy Adler & Richard Anderson\\ +George Andrews & Henry Baker & Stephen Balzac\\ +Yurij Baransky & David R. Barton & Gerald Baumgartner\\ +Gilbert Baumslag & Fred Blair & Vladimir Bondarenko\\ +Mark Botch & Alexandre Bouyer & Peter A. Broadbery\\ +Martin Brock & Manuel Bronstein & Florian Bundschuh\\ +William Burge & Quentin Carpent & Bob Caviness\\ +Bruce Char & Cheekai Chin & David V. Chudnovsky\\ +Gregory V. Chudnovsky & Josh Cohen & Christophe Conil\\ +Don Coppersmith & George Corliss & Robert Corless\\ +Gary Cornell & Meino Cramer & Claire Di Crescenzo\\ +Timothy Daly Sr. & Timothy Daly Jr. & James H. Davenport\\ +Jean Della Dora & Gabriel Dos Reis & Michael Dewar\\ +Claire DiCrescendo & Sam Dooley & Lionel Ducos\\ +Martin Dunstan & Brian Dupee & Dominique Duval\\ +Robert Edwards & Heow Eide-Goodman & Lars Erickson\\ +Richard Fateman & Bertfried Fauser & Stuart Feldman\\ +Brian Ford & Albrecht Fortenbacher & George Frances\\ +Constantine Frangos & Timothy Freeman & Korrinn Fu\\ +Marc Gaetano & Rudiger Gebauer & Kathy Gerber\\ +Patricia Gianni & Holger Gollan & Teresa Gomez-Diaz\\ +Laureano Gonzalez-Vega& Stephen Gortler & Johannes Grabmeier\\ +Matt Grayson & James Griesmer & Vladimir Grinberg\\ +Oswald Gschnitzer & Jocelyn Guidry & Steve Hague\\ +Vilya Harvey & Satoshi Hamaguchi & Martin Hassner\\ +Ralf Hemmecke & Henderson & Antoine Hersen\\ +Pietro Iglio & Richard Jenks & Kai Kaminski\\ +Grant Keady & Tony Kennedy & Paul Kosinski\\ +Klaus Kusche & Bernhard Kutzler & Larry Lambe\\ +Frederic Lehobey & Michel Levaud & Howard Levy\\ +Rudiger Loos & Michael Lucks & Richard Luczak\\ +Camm Maguire & Bob McElrath & Michael McGettrick\\ +Ian Meikle & David Mentre & Victor S. Miller\\ +Gerard Milmeister & Mohammed Mobarak & H. Michael Moeller\\ +Michael Monagan & Marc Moreno-Maza & Scott Morrison\\ +Mark Murray & William Naylor & C. Andrew Neff\\ +John Nelder & Godfrey Nolan & Arthur Norman\\ +Jinzhong Niu & Michael O'Connor & Kostas Oikonomou\\ +Julian A. Padget & Bill Page & Jaap Weel\\ +Susan Pelzel & Michel Petitot & Didier Pinchon\\ +Claude Quitte & Norman Ramsey & Michael Richardson\\ +Renaud Rioboo & Jean Rivlin & Nicolas Robidoux\\ +Simon Robinson & Michael Rothstein & Martin Rubey\\ +Philip Santas & Alfred Scheerhorn & William Schelter\\ +Gerhard Schneider & Martin Schoenert & Marshall Schor\\ +Fritz Schwarz & Nick Simicich & William Sit\\ +Elena Smirnova & Jonathan Steinbach & Christine Sundaresan\\ +Robert Sutor & Moss E. Sweedler & Eugene Surowitz\\ +James Thatcher & Baldir Thomas & Mike Thomas\\ +Dylan Thurston & Barry Trager & Themos T. Tsikas\\ +Gregory Vanuxem & Bernhard Wall & Stephen Watt\\ +Juergen Weiss & M. Weller & Mark Wegman\\ +James Wen & Thorsten Werther & Michael Wester\\ +John M. Wiley & Berhard Will & Clifton J. Williamson\\ +Stephen Wilson & Shmuel Winograd & Robert Wisbauer\\ +Sandra Wityak & Waldemar Wiwianka & Knut Wolf\\ +Clifford Yapp & David Yun & Richard Zippel\\ +Evelyn Zoernack & Bruno Zuercher & Dan Zwillinger +\end{tabular} +\eject +\tableofcontents +\vfill +\eject +\setlength{\parindent}{0em} +\setlength{\parskip}{1ex} +{\Large{\bf New Foreword}} +\vskip .25in + +On October 1, 2001 Axiom was withdrawn from the market and ended +life as a commercial product. +On September 3, 2002 Axiom was released under the Modified BSD +license, including this document. +On August 27, 2003 Axiom was released as free and open source +software available for download from the Free Software Foundation's +website, Savannah. + +Work on Axiom has had the generous support of the Center for +Algorithms and Interactive Scientific Computation (CAISS) at +City College of New York. Special thanks go to Dr. Gilbert +Baumslag for his support of the long term goal. + +The online version of this documentation is roughly 1000 pages. +In order to make printed versions we've broken it up into three +volumes. The first volume is tutorial in nature. The second volume +is for programmers. The third volume is reference material. We've +also added a fourth volume for developers. All of these changes +represent an experiment in print-on-demand delivery of documentation. +Time will tell whether the experiment succeeded. + +Axiom has been in existence for over thirty years. It is estimated to +contain about three hundred man-years of research and has, as of +September 3, 2003, 143 people listed in the credits. All of these +people have contributed directly or indirectly to making Axiom +available. Axiom is being passed to the next generation. I'm looking +forward to future milestones. + +With that in mind I've introduced the theme of the ``30 year horizon''. +We must invent the tools that support the Computational Mathematician +working 30 years from now. How will research be done when every bit of +mathematical knowledge is online and instantly available? What happens +when we scale Axiom by a factor of 100, giving us 1.1 million domains? +How can we integrate theory with code? How will we integrate theorems +and proofs of the mathematics with space-time complexity proofs and +running code? What visualization tools are needed? How do we support +the conceptual structures and semantics of mathematics in effective +ways? How do we support results from the sciences? How do we teach +the next generation to be effective Computational Mathematicians? + +The ``30 year horizon'' is much nearer than it appears. + +\vskip .25in +%\noindent +Tim Daly\\ +CAISS, City College of New York\\ +November 10, 2003 ((iHy)) +\vfill +\eject +\pagenumbering{arabic} +\setcounter{chapter}{0} % Chapter 1 +\chapter{Overview} +This book contains the Firefox browser AJAX routines. + +\section{Build Instructions} +\begin{verbatim} + mkdir -p /home/silver/bitmaps + cp bookvol11.pamphlet /home/silver + cd /home/silver + export AXIOM=(where) + export PATH=$AXIOM/bin/lib:$AXIOM/bin:$PATH + notangle -t8 bookvol11.pamphlet > Makefile + make -j 10 + axiom -nox + -> )set mes auto off + -> )set out mathml on + -> axServer(8085,multiServ)$AXSERV + + Now start your browser and go to: + file:///home/silver/rootpage.xhtml + and then do: + Basic Commands -> Calculus -> Differentiate -> Continue + Basic Commands -> Matrix -> Continue + + You should see the result of the differentiate appear inline in the + page. You can change the values in the text areas, click continue, + and see the new result. +\end{verbatim} + +\section{The Makefile} +<<*>>= +TANGLE=${AXIOM}/bin/lib/notangle + +%.xhtml: bookvol11.pamphlet + @ echo making $*.xhtml + @ ${TANGLE} -R"$*.xhtml" bookvol11.pamphlet > $*.xhtml + +<> + +all: ${PAGES} + @ mkdir -p bitmaps + @ ${TANGLE} -R"axiom1.bitmap" bookvol11.pamphlet >bitmaps/axiom1.bitmap + @ ${TANGLE} -R"rcm3720.input" bookvol11.pamphlet >rcm3720.input + @ ${TANGLE} -R"strang.input" bookvol11.pamphlet >strang.input + @ ${TANGLE} -R"signatures.txt" bookvol11.pamphlet >signatures.txt + +clean: + @ rm -rf bitmaps + @ rm -f *.xhtml + @ rm -f rcm3720.input + @ rm -f signatures.txt +@ + +\section{Building new pages} +To add a new page you need to create a page with the default layout below +and add the name of the page to the PAGES variable below. + +Most of the pages have a default layout of the form: +\begin{verbatim} +\subsection{pagename.xhtml} +<>= +<> + + +<> +
Page subtitle goes here
+
+your basic page text goes here. +<> +@ +\end{verbatim} +There are several things to observe here: +
    +
  1. Each page lives in its own subsection and its own chunk.
  2. +
  3. The pagename and the chunkname are the same
  4. +
  5. The chunk includes the @<>
  6. +
  7. The chunk includes the @<>
  8. +
  9. The chunk includes the @<>
  10. +
+The default page layout cannot communicate with Axiom. + +\subsection{Communicating with Axiom} +If your page needs to communicate with Axiom you need to add some +information in the header of the page. +The default page that talks to Axiom has the form: +\begin{verbatim} +\subsection{pagename.xhtml} +@<>= +@<> + + + +@<> +
Page subtitle goes here
+
+your text goes here +your communication blocks go here +@<> +\end{verbatim} + +\subsection{Handling statements with no free variables} +Use a makeRequest call with a parameter of the id. +Note that the div with id of ``ansXX'' will get replaced +automatically and the ``ans'' prefix is required. +\begin{verbatim} +
  • + +
    +
  • +\end{verbatim} + +\subsection{Handling statements with free variables} +Free variables exist are used in statements but they are defined in +other statements. To make sure the free variables have the correct +values you need to include an explicit list of the other ids that +need to be executed {\sl before} this statement. You do this with +a call to ``handleFree''. It expects a list, enclosed in brackets, +of the ids to execute in order. Be certain that the current id is +at the end of the list. +\begin{verbatim} +
  • + +
    +
  • +\end{verbatim} + +\subsection{Handling domain database lookups} +Use an anchor tag of the form: +\begin{verbatim} +Vector +\end{verbatim} +This will be interpreted by Axiom to mean that you want to do a +lookup on a domain, category, or package whose name follows the +question mark. Note that the domain name should NOT be an abbreviation. + +\subsection{Handling )show domain} +Use a block containing a showcall of the form: +\begin{verbatim} +
  • + +
    +
  • +\end{verbatim} +Note that the ``)show'' must be at the beginning of the line +and that there can only be one space between the word show and +the following argument. + +\subsection{Handling lisp expressions} +Use a block containing a lispcall of the form: +
  • + +
    +
  • +Note that this works but you can easily blow away your Axiom +session with random statements. Let the coder beware. + +\subsection{Handling expressions that have no output} +Use the CSS class=``noresult'' tag on the input form. +This causes the item to show up in black text. It is +still executable and is generally executed by handleFree +calls because it contains definitions. However, things like +function definitions in Axiom return no interesting output +so there is no point in clicking on them. +\begin{verbatim} +
  • + +
    +
  • +\end{verbatim} + + +\section{Defined Pages} +Every page in this file is extracted by the Makefile. This is the list +of pages that will be extracted. It is organized roughly in the hierarchy +that you see in the browser pages. This is convention and is not required. + +The page hierarchy (used by the Makefile) is: +<>= +PAGES=rootpage.xhtml \ + commandline.xhtml \ + basiccommand.xhtml \ + tutorial.xhtml \ + jenks.xhtml \ + calculus.xhtml \ + differentiate.xhtml \ + indefiniteintegral.xhtml \ + definiteintegral.xhtml \ + basiclimit.xhtml \ + reallimit.xhtml \ + complexlimit.xhtml \ + summation.xhtml \ + bcmatrix.xhtml \ + bcexpand.xhtml \ + draw.xhtml \ + draw2donevariable.xhtml \ + draw2ddefinedcurve.xhtml \ + draw2dpolynomialequation.xhtml \ + draw3dtwovariable.xhtml \ + draw3ddefinedtube.xhtml \ + draw3ddefinedsurface.xhtml \ + series.xhtml \ + seriesexpand.xhtml \ + taylorseries.xhtml \ + laurentseries.xhtml \ + puiseuxseries.xhtml \ + solve.xhtml \ + solvelinearequations.xhtml \ + solvelinearmatrix.xhtml \ + solvesystempolynomials.xhtml \ + solvesinglepolynomial.xhtml \ + topreferencepage.xhtml \ + releasenotes.xhtml \ + usersguidepage.xhtml \ + aldorusersguidepage.xhtml \ + foundationlibrarydocpage.xhtml \ + topicspage.xhtml \ + uglangpage.xhtml \ + examplesexposedpage.xhtml \ + ugsyscmdpage.xhtml \ + operations.xhtml \ + dblookup.xhtml \ + dbcharacteristic.xhtml \ + dbcomplexcomplex.xhtml \ + dbcomplexconjugate.xhtml \ + dbcomplexfactor.xhtml \ + dbcompleximag.xhtml \ + dbcomplexnorm.xhtml \ + dbcomplexreal.xhtml \ + dbcomplexdoublefloat.xhtml \ + dbcomplexfloat.xhtml \ + dbcomplexinteger.xhtml \ + dbexpressioninteger.xhtml \ + dbfractioninteger.xhtml \ + dbfractionpolynomialinteger.xhtml \ + dbopbinary.xhtml \ + dbopacos.xhtml \ + dbopacosh.xhtml \ + dbopacot.xhtml \ + dbopacoth.xhtml \ + dbopacsc.xhtml \ + dbopacsch.xhtml \ + dbopaddmod.xhtml \ + dbopairyai.xhtml \ + dbopairybi.xhtml \ + dbopapproximants.xhtml \ + dbopasin.xhtml \ + dbopasinh.xhtml \ + dbopasec.xhtml \ + dbopasech.xhtml \ + dbopatan.xhtml \ + dbopatanh.xhtml \ + dbopbesseli.xhtml \ + dbopbesselj.xhtml \ + dbopbesselk.xhtml \ + dbopbessely.xhtml \ + dbopbeta.xhtml \ + dbopcardinalnumber.xhtml \ + dbopcoefficient.xhtml \ + dbopcoefficients.xhtml \ + dbopcoerce.xhtml \ + dbopcolumn.xhtml \ + dbopcompactfraction.xhtml \ + dbopcomplexeigenvectors.xhtml \ + dbopcomplexelementary.xhtml \ + dbopcomplexintegrate.xhtml \ + dbopcomplexlimit.xhtml \ + dbopcomplexsolve.xhtml \ + dbopcontent.xhtml \ + dbopcontinuedfraction.xhtml \ + dbopconvergents.xhtml \ + dbopcopy.xhtml \ + dbopcos.xhtml \ + dbopcosh.xhtml \ + dbopcot.xhtml \ + dbopcoth.xhtml \ + dbopcount.xhtml \ + dbopcountableq.xhtml \ + dbopcsc.xhtml \ + dbopcsch.xhtml \ + dbopcycleragits.xhtml \ + dbopd.xhtml \ + dbopdecimal.xhtml \ + dbopdefiningpolynomial.xhtml \ + dbopdegree.xhtml \ + dbopdenom.xhtml \ + dbopdeterminant.xhtml \ + dbopdiagonalmatrix.xhtml \ + dbopdigamma.xhtml \ + dbopdigits.xhtml \ + dbopdimension.xhtml \ + dbopdivide.xhtml \ + dbopeigenmatrix.xhtml \ + dbopeigenvalues.xhtml \ + dbopeigenvector.xhtml \ + dbopeigenvectors.xhtml \ + dbopelt.xhtml \ + dbopeval.xhtml \ + dbopevenq.xhtml \ + dbopexp.xhtml \ + dbopfactor.xhtml \ + dbopfactorfraction.xhtml \ + dbopfiniteq.xhtml \ + dbopfirstdenom.xhtml \ + dbopfirstnumer.xhtml \ + dbopfractragits.xhtml \ + dbopgamma.xhtml \ + dbopgcd.xhtml \ + dbophex.xhtml \ + dbophorizconcat.xhtml \ + dbophtrigs.xhtml \ + dbophypergeometric0f1.xhtml \ + dbopinteger.xhtml \ + dbopintegrate.xhtml \ + dbopinverse.xhtml \ + dbopinvmod.xhtml \ + dboplaurent.xhtml \ + dboplcm.xhtml \ + dbopleadingcoefficient.xhtml \ + dbopleadingmonomial.xhtml \ + dboplength.xhtml \ + dboplimit.xhtml \ + dboplog.xhtml \ + dboploggamma.xhtml \ + dbopmainvariable.xhtml \ + dbopmap.xhtml \ + dbopmapbang.xhtml \ + dbopmatrix.xhtml \ + dbopmax.xhtml \ + dbopmemberq.xhtml \ + dbopmin.xhtml \ + dbopminimumdegree.xhtml \ + dbopminus.xhtml \ + dbopmonicdivide.xhtml \ + dbopmulmod.xhtml \ + dbopncols.xhtml \ + dbopnew.xhtml \ + dbopnorm.xhtml \ + dbopnrows.xhtml \ + dbopnthfractionalterm.xhtml \ + dbopnthroot.xhtml \ + dbopnullity.xhtml \ + dbopnullspace.xhtml \ + dbopnumberoffractionalterms.xhtml \ + dbopnumer.xhtml \ + dbopnumeric.xhtml \ + dbopoperator.xhtml \ + dboporthonormalbasis.xhtml \ + dboppadicfraction.xhtml \ + dboppartialfraction.xhtml \ + dboppartialquotients.xhtml \ + dboppattern.xhtml \ + dboppermanent.xhtml \ + dboppi.xhtml \ + dbopplus.xhtml \ + dboppolygamma.xhtml \ + dboppositiveremainder.xhtml \ + dbopprefixragits.xhtml \ + dbopprimefactor.xhtml \ + dboppuiseux.xhtml \ + dbopqelt.xhtml \ + dbopqseteltbang.xhtml \ + dbopquatern.xhtml \ + dbopquo.xhtml \ + dbopradicaleigenvectors.xhtml \ + dbopradicalsolve.xhtml \ + dboprank.xhtml \ + dbopratdenom.xhtml \ + dboprealeigenvectors.xhtml \ + dboprealelementary.xhtml \ + dbopreduce.xhtml \ + dbopreductum.xhtml \ + dboprem.xhtml \ + dbopresetvariableorder.xhtml \ + dbopresultant.xhtml \ + dboprootof.xhtml \ + dboprootsimp.xhtml \ + dboprootsof.xhtml \ + dboprow.xhtml \ + dboprowechelon.xhtml \ + dbopsetcolumnbang.xhtml \ + dbopsetelt.xhtml \ + dbopseteltbang.xhtml \ + dbopsetrowbang.xhtml \ + dbopsetsubmatrixbang.xhtml \ + dbopsimplify.xhtml\ + dbopsec.xhtml \ + dbopsech.xhtml \ + dbopseries.xhtml \ + dbopseriessolve.xhtml \ + dbopsin.xhtml \ + dbopsingleintegerand.xhtml \ + dbopsingleintegernot.xhtml \ + dbopsingleintegeror.xhtml \ + dbopsingleintegerxor.xhtml \ + dbopsinh.xhtml \ + dbopsetvariableorder.xhtml \ + dbopsolve.xhtml \ + dbopsqrt.xhtml \ + dbopstar.xhtml \ + dbopstarstar.xhtml \ + dbopsubmatrix.xhtml \ + dbopsubmatrix.xhtml \ + dbopsubmod.xhtml \ + dboptan.xhtml \ + dboptanh.xhtml \ + dboptaylor.xhtml \ + dboptimes.xhtml \ + dboptotaldegree.xhtml \ + dboptrace.xhtml \ + dboptranspose.xhtml \ + dboptrigs.xhtml \ + dbopvariables.xhtml \ + dbopvectorise.xhtml \ + dbopvectorspace.xhtml \ + dbopvertconcat.xhtml \ + dbopwholepart.xhtml \ + dbopwholeragits.xhtml \ + dbopzeroof.xhtml \ + dbopzerosof.xhtml \ + dbpolynomialinteger.xhtml \ + dbpolynomialfractioninteger.xhtml \ + systemvariables.xhtml \ + glossarypage.xhtml \ + htxtoppage.xhtml \ + refsearchpage.xhtml \ + topicspage.xhtml \ + numberspage.xhtml \ + numintegers.xhtml \ + numgeneralinfo.xhtml \ + numfactorization.xhtml \ + numfunctions.xhtml \ + numexamples.xhtml \ + numproblems.xhtml \ + numfractions.xhtml \ + numrationalnumbers.xhtml \ + numquotientfields.xhtml \ + nummachinefloats.xhtml \ + numfloat.xhtml \ + numcomplexnumbers.xhtml \ + numfinitefields.xhtml \ + numnumericfunctions.xhtml \ + numcardinalnumbers.xhtml \ + nummachinesizedintegers.xhtml \ + numromannumerals.xhtml \ + numcontinuedfractions.xhtml \ + numpartialfractions.xhtml \ + numquaternions.xhtml \ + numoctonions.xhtml \ + numrepeatingdecimals.xhtml \ + numrepeatingbinaryexpansions.xhtml \ + numrepeatinghexexpansions.xhtml \ + numotherbases.xhtml \ + polynomialpage.xhtml \ + polybasicfunctions.xhtml \ + polysubstitutions.xhtml \ + polyfactorization.xhtml \ + polyfactorization1.xhtml \ + polyfactorization2.xhtml \ + polyfactorization3.xhtml \ + polyfactorization4.xhtml \ + polygcdandfriends.xhtml \ + polyroots.xhtml \ + polyroots1.xhtml \ + polyroots2.xhtml \ + polyroots3.xhtml \ + polyroots4.xhtml \ + polyspecifictypes.xhtml \ + polyspecifictypes1.xhtml \ + factored.xhtml \ + polyspecifictypes2.xhtml \ + polyspecifictypes3.xhtml \ + polyspecifictypes4.xhtml \ + functionpage.xhtml \ + funrationalfunctions.xhtml \ + funalgebraicfunctions.xhtml \ + funelementaryfunctions.xhtml \ + funsimplification.xhtml \ + funpatternmatching.xhtml \ + funoperatoralgebra.xhtml \ + equationpage.xhtml \ + equsystemlinear.xhtml \ + equdifferential.xhtml \ + equdifferentiallinear.xhtml \ + equdifferentialnonlinear.xhtml \ + equdifferentialpowerseries.xhtml \ + calculuspage.xhtml \ + callimits.xhtml \ + calderivatives.xhtml \ + calintegrals.xhtml \ + calmoreintegrals.xhtml \ + callaplace.xhtml \ + calseries.xhtml \ + calseries1.xhtml \ + calseries2.xhtml \ + calseries3.xhtml \ + calseries4.xhtml \ + calseries5.xhtml \ + calseries6.xhtml \ + calseries7.xhtml \ + calseries8.xhtml \ + linalgpage.xhtml \ + linintro.xhtml \ + lincreate.xhtml \ + linoperations.xhtml \ + lineigen.xhtml \ + linhilbert.xhtml \ + linpermaent.xhtml \ + linvectors.xhtml \ + linsquarematrices.xhtml \ + lin1darrays.xhtml \ + lin2darrays.xhtml \ + linconversion.xhtml \ + graphicspage.xhtml \ + graphexamples.xhtml \ + graph2d.xhtml \ + graph3d.xhtml \ + graphviewports.xhtml \ + algebrapage.xhtml \ + algnumbertheory.xhtml \ + alggrouptheory.xhtml \ + cryptopage.xhtml \ + cryptoclass1.xhtml \ + cryptoclass2.xhtml \ + cryptoclass3.xhtml \ + cryptoclass4.xhtml \ + cryptoclass5.xhtml \ + cryptoclass6.xhtml \ + cryptoclass7.xhtml \ + cryptoclass8.xhtml \ + cryptoclass9.xhtml \ + cryptoclass10.xhtml \ + cryptoclass11.xhtml \ + ocwmit18085.xhtml \ + ocwmit18085lecture1.xhtml \ + ocwmit18085lecture2.xhtml \ + man0page.xhtml \ + topexamplepage.xhtml \ + topsettingspage.xhtml \ + axiomfonts.xhtml \ + pagelist.xhtml \ + pagematrix.xhtml \ + pageonedimensionalarray.xhtml \ + pagepermanent.xhtml \ + pageset.xhtml \ + pagesquarematrix.xhtml \ + pagetable.xhtml \ + pagetwodimensionalarray.xhtml \ + pagevector.xhtml + +@ + +\section{The Standard Layout} +Generally a page has a standard layout using a couple of chunks +to minimize the typing. The defined chunks are: +\begin{itemize} +\item ``standard head'' which includes the head element, xmlns, meta, and +title element. It also contains the ``style'' element for CSS information. +\item ``page head'' contains the banner information +\item ``page foot'' contains the trailing page information and the +body-end and html-end tags +\end{itemize} +So the basic layout looks like +\begin{verbatim} +@<> + (local and general javascript goes here) + + +@<> + (local page definition goes here) +@<> +\end{verbatim} +So all you need to worry about are the actual page forms and the +javascript to fetch those forms. + +For ``active pages'', that is those that communicate with Axiom +they generally define a javascript function called ``commandline'' +which formats the request to be sent to the host. You also need to +include the ``axiom talker'' chunk. Note that ``axiom talker'' +expects the ``commandline'' function to exist and calls it. Thus, +for the page that handles differentiation calls to Axiom we add +the local javascript: +\begin{verbatim} + + + +\end{verbatim} +This defined the ``commandline'' function and embeds the ``axiom talker''. +The ``commandline'' function knows how to fetch fields from the rest of +the page and format them into a single Axiom string. This is page +specific code. For example, this shows a single input line which +will be sent to the host when the ``Continue'' is pressed: +\begin{verbatim} +
    +

    + Type an input command line to Axiom:
    + + @<> +

    +
    + @<> +\end{verbatim} + +Note that the commandline function takes an argument which it gets +from the caller, makeRequest. This argument can be used to distinguish +which button was pressed. + +The {\bf div} section with {\bf id=``mathAns''} is replaced by the +result sent from the server. + +\section{Cascading Style Sheet} +This is the standard CSS style section that gets included with every +page. We do this here but it could be a separate style sheet. It +hardly matters either way as the style sheet is trivial. +\begin{verbatim} +\end{verbatim} +< +@ + +\section{standard head} +This is the standard head section. It is used on pages that do not +include javascript. Note that it does NOT include the so +the javascript can be added easily. +<>= + + + + + Axiom Documentation +< + + +<> + +<> +@ + +\subsection{graphexamples.xhtml} +<>= +<> + + +<> + graphexamples not implemented +<> +@ + +\subsection{graphicspage.xhtml} +<>= +<> + + +<> +Axiom can plot curves and surfaces of various types, as well as +lists of points in the plane. + + + + + + + + + + + + + + + + + +
    + Examples + + See examples of Axiom graphics +
    + 2D Graphics + + Graphics in the real and complex plane +
    + 3D Graphics + + Plot surfaces, curves, or tubes around curves +
    + Viewports + + Customize graphics using Viewports +
    +<> +@ + +\subsection{graphviewports.xhtml} +<>= +<> + + +<> + graphviewports not implemented +<> +@ + +\subsection{graph2d.xhtml} +<>= +<> + + +<> + graph2d not implemented +<> +@ + +\subsection{graph3d.xhtml} +<>= +<> + + +<> + graph3d not implemented +<> +@ + +%%H +\subsection{htxtoppage.xhtml} +<>= +<> + + +<> + htxtoppage not implemented +<> +@ + + +%%I +\subsection{indefiniteintegral.xhtml} +<>= +<> + + + +<> +
    + Enter the function you want to integrate:
    +
    + Enter the variable of integration: +
    +
    +<> +<> +<> +@ + +%%J +\subsection{jenks.xhtml} +<>= +<> + + +<> +
    + + + +
    +
    +

    + + AXIOM -- Richard D. Jenks and Robert S. Sutor + +

    +
    +
    +

    + + The Scientific Computation System + +

    +
    +
    +

    + + Volume 0 -- The Textbook + +

    +
    + + Chapter 0: Introduction to Axiom +
    + + Chapter 1: An Overview of Axiom +
    + + Chapter 2: Using Types and Modes +
    + + Chapter 3: Using HyperDoc +
    + + Chapter 4: Input Files and Output Styles +
    + + Chapter 5: Overview of Interactive Language +
    + + Chapter 6: User-Defined Functions, Macros and Rules +
    + + Chapter 7: Graphics +
    + + Chapter 8: Advanced Problem Solving +
    + + Chapter 9: Some Examples of Domains and Packages +
    + + Chapter 10: Interactive Programming +
    + + Chapter 11: Packages +
    + + Chapter 12: Categories +
    + + Chapter 13: Domains +
    + + Chapter 14: Browse +
    + + Chapter 15: What's New in Axiom Version 2.0 +
    + + Chapter 17: Categories +
    + + Chapter 18: Domains +
    + + Chapter 19: Packages +
    + + Chapter 21: Programs for AXIOM Images +
    +<> +@ + +%%K +%%L + +\subsection{laurentseries.xhtml} +<>= +<> + + + +<> + + + + + + + + + + + + + + + + +
    + Enter the formula for the general coefficient of the series: +
    + +
    + Enter the index variable for your formula: + +
    + Enter the power series variable: + +
    + Enter the point about which to expand: + +
    +For Laurent Series, the exponent of the power series variable ranges +from an initial value, an arbitrary integer value, to plus +infinity; the step size is any positive integer. + + + + + + + +
    + Enter the initial value of the index (an integer): + +
    + Enter the step size (a positive integer): + +
    +<> +<> +<> + +@ + +\subsection{linalgpage.xhtml} +<>= +<> + + +<> + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Introduction +
    + Create and manipulate matrices. Work with the entries of a + matrix. Perform matrix arithmetic. +
    + Creating Matrices +
    + Create matrices from scratch and from other matrices +
    + Operations on Matrices +
    + Algebraic manipulations with matrices. Compute the inverse, + determinant, and trace of a matrix. Find the rank, nullspace, + and row echelon form of a matrix. +
    + Eigenvalues and Eigenvectors +
    + How to compute eigenvalues and eigenvectors +
    +
    + +<> +@ + +\subsection{linconversion.xhtml} +<>= +<> + + +<> + linconversion not implemented +<> +@ + +\subsection{lincreate.xhtml} +<>= +<> + + + +<> +
    Creating Matrices
    +
    +There are many ways to create a matrix from a collection of values or +from existing matrices. + +If the matrix has almost all items equal to the same value, use +new to create a matrix filled with that value +and then reset the entries that are different. +
      +
    • + +
      +
    • +
    +To change the entry in the second row, third column to 5, use +setelt. +
      +
    • + +
      +
    • +
    +An alternative syntax is to use assignment. +
      +
    • + +
      +
    • +
    +The matrix was destructively modified. +
      +
    • + +
      +
    • +
    +If you already have the matrix entries as a list of lists, use +matrix. +
      +
    • + +
      +
    • +
    +If the matrix is diagonal, use +diagonalMatrix +
      +
    • + +
      +
    • +
    +Use setRow! and +setColumn! +to change a row or column of a matrix. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +Use copy to make a copy of a matrix. +
      +
    • + +
      +
    • +
    +This is useful if you intend to modify a matrix destructively but want a +copy of the original. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +Use subMatrix(dm,2,3,2,4) to extract +part of an existing matrix. The syntax is +
    +  subMatrix(m,firstrow,lastrow,firstcol,lastcol)
    +
    +
      +
    • + +
      +
    • +
    +To change a submatrix, use +setsubMatrix!. +
      +
    • + +
      +
    • +
    +If e is too big to fit where you specify, an error message is displayed. Use +subMatrix. +
      +
    • + +
      +
    • +
    +This changes the submatrix of d whose upper left corner is at the first row +and second column and whose size is that of e. +
      +
    • + +
      +
    • +
    +
      +
    • + +
      +
    • +
    +Matrices can be joined either horizontally or vertically to make new +matrices. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +Use horizConcat to append them side to +side. The two matrices must have the same number of rows. +
      +
    • + +
      +
    • +
    +Use vertConcat to stack one upon the +other. The two matrices must have the same number of columns. +
      +
    • + +
      +
    • +
    +The operation transpose is used to create +a new matrix by reflection across the main diagonal. +
      +
    • + +
      +
    • +
    +<> +@ + +\subsection{lineigen.xhtml} +<>= +<> + + + +<> +
    Computation of Eigenvalues and Eigenvectors
    +
    +In this section we show you some of Axiom's facilities for computing and +manipulating eigenvalues and eigenvectors, also called characteristic +values and characteristic vectors, respectively. + +Let's first create a matrix with integer entries. +
      +
    • + +
      +
    • +
    +To get a list of the rational eigenvalues, use the operation +eigenvalues. +
      +
    • + +
      +
    • +
    +Given an explicit eigenvalue, +eigenvector computes the eigenvectors +corresponding to it. +
      +
    • + +
      +
    • +
    +The operation eigenvectors returns a +list of pairs of values and vectors. When an eigenvalue is rational, Axiom +gives you the value explicitly; otherwise, its minimal polynomial is given, +(the polynomial of lowest degree with the eigenvalues as roots), together +with a parametric representation of the eigenvector using the eigenvalue. +This means that if you ask Axiom to solve +the minimal polynomial, then you can substitute these roots into the +parametric form of the corresponding eigenvectors. + +You must be aware that unless an exact eigenvalue has been computed, +the eigenvector may be badly in error. +
      +
    • + +
      +
    • +
    +Another possibility is to use the operation +radicalEigenvectors tries to +compute explicitly the eignevectors in terms of radicals. +
      +
    • + +
      +
    • +
    +Alternatively, Axiom can compute real or complex approximations to the +eigenvectors and eigenvalues using the operations +realEigenvectors or +complexEigenvectors. They +each take an additional argument epsilon to specify the "precision" +required. In the real case, this means that each approximation will be +within plus or minus epsilon of the actual result. In the complex case, this +means that each approximation will be within plus or minus epsilon of the +actual result in each of the real and imaginary parts. + +The precision can be specified as a Float if +the results are desired in floating-point notation, or as +Fraction Integer if the results are +to be expressed using rational (or complex rational) numbers. +
      +
    • + +
      +
    • +
    +If an n by n matrix has n distinct eigenvalues (and therefore n eigenvectors) +the operation eigenMatrix gives you a +matrix of the eigenvectors. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +If a symmetric matrix has a basis of orthonormal eigenvectors, then +orthonormalBasis computes a list +of these vectors. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +<> +@ + +\subsection{linhilbert.xhtml} +<>= +<> + + + +<> +
    An Example: Determinant of a Hilbert Matrix
    +
    +Consider the problem of computing the determinant of a 10 by 10 Hilbert +matrix. The (i,j)-th entry of a Hilbert matrix is given by 1/(i+j+1). + +First do the computation using rational numbers to obtain the exact result. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +The result given by hardware floats is correct only to four significant digits +of precision. In the jargon of numerical analysis, the Hilbert matrix is said +to be "ill-conditioned". +
      +
    • + +
      +
    • +
    +Now repeat the computation at a higher precision using Float. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +Reset digits to its default value. +
      +
    • + +
      +
    • +
    +<> +@ + +\subsection{linintro.xhtml} +<>= +<> + + + +<> +
    Expanding to Higher Dimensions
    +
    +To get higher dimensional aggregates, you can create one-dimensional +aggregates with elements that are themselves aggregates, for example, +lists of list, one-dimensional arrays of list of multisets, and so on. For +applications requiring two-dimensional homogeneous aggregates, you will +likely find two-dimensional arrays and matrices useful. + +The entries in TwoDimensionalArray +and Matrix objects are all the same type, +except that those for Matrix must belong to a +Ring. You create and access elements in roughly +the same way. Since matrices have an understood algebraic structure, certain +algebraic operations are available for matrices but not for arrays. Because +of this, we limit our discussion here to Matrix, +that can be regarded as an extension of +TwoDimensionalArray. See +TwoDimensionalArray +For more +information about Axiom's linear algebra facilities see +Matrix, +Permanent, +SquareMatrix, +Vector, + +Computation of Eigenvalues and Eigenvectors, and + +Solution of Linear and Polynomial Equations. + +You can create a matrix from a list of lists, where each of the inner +lists represents a row of the matrix. +
      +
    • + +
      +
    • +
    +The "collections" construct (see + +Creating Lists and Streams with Iterators) +is useful for creating matrices whose entries are given by formulas. +
      +
    • + +
      +
    • +
    +Let vm denote the three by three Vandermonde matrix. +
      +
    • + +
      +
    • +
    +Use this syntax to extract an entry in the matrix. +
      +
    • + +
      +
    • +
    +You can also pull out a row or a column. +
      +
    • + +
      +
    • +
    +You can do arithmetic. +
      +
    • + +
      +
    • +
    +You can perform operations such as +transpose, +trace, and +determinant +
      +
    • + +
      +
    • +
    +<> +@ + +\subsection{linoperations.xhtml} +<>= +<> + + + +<> +
    Operations on Matrices
    +
    +Axiom provides both left and right scalar multiplication. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +You can add, subtract, and multiply matrices provided, of course, that the +matrices have compatible dimensions. If not, an error message is displayed. +
      +
    • + +
      +
    • +
    +This following product is defined but n*m is not. +
      +
    • + +
      +
    • +
    +The operations nrows and +ncols return the number of rows and +columns of a matrix. You can extract a row or a column of a matrix using +the operations row and +column. The object returned ia a +Vector. Here is the third column of the matrix n. +
      +
    • + +
      +
    • +
    +You can multiply a matrix on the left by a "row vector" and on the right by +a "column vector". +
      +
    • + +
      +
    • +
    +The operation inverse computes the inverse +of a matrix if the matrix is invertible, and returns "failed" if not. This +Hilbert matrix invertible. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +This matrix is not invertible. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +The operation determinant computes the +determinant of a matrix provided that the entries of the matrix belong to a +CommutativeRing. The above matrix mm +is not invertible and, hence, must have determinant 0. +
      +
    • + +
      +
    • +
    +The operation trace computes the trace of a +square matrix. +
      +
    • + +
      +
    • +
    +The operation rank computes the rank of a matrix: +the maximal number of linearly independent rows or columns. +
      +
    • + +
      +
    • +
    +The operation nullity computes the nullity +of a matrix: the dimension of its null space. +
      +
    • + +
      +
    • +
    +The operation nullSpace returns a list +containing a basis for the null space of a matrix. Note that the nullity is +the number of elements in a basis for the null space. +
      +
    • + +
      +
    • +
    +The operation rowEchelon returns the row +echelon form of a matrix. It is easy to see that the rank of this matrix is +two and that its nullity is also two. +
      +
    • + +
      +
    • +
    +For more information see +Expanding to Higher Dimensions, + +Computation of Eigenvalues and Eigenvectors, and + +An Example: Determinant of a Hilbert Matrix. Also see +Permanent, +Vector, +OneDimensionalArray, and +TwoDimensionalArray. Issue the +system command +
      +
    • + +
      +
    • +
    +to display the full ist of operations defined by +Matrix. +<> +@ + +\subsection{linpermaent.xhtml} +<>= +<> + + + +<> +
    Permanent
    +
    +The package Permanent provides the function +permanent for square matrices. The +permanent of a square matrix can be +computed in the same way as the determinant by expansion of minors except +that for the permanent the sign for each element is 1, rather than being 1 +if the row plus column indices is positive and -1 otherwise. This function +is much more difficult to compute efficiently than the +determinant. An example of the use of +permanent is the calculation of the nth +derangement number, defined to be the number of different possibilities +for n couples to dance but never with their own spouse. Consider an n by x +matrix with entries 0 on the diagonal and 1 elsewhere. Think of the rows as +one-half of each couple (for example, the males) and the columns the other +half. The permanent of such a matrix gives the desired derangement number. +
      +
    • + +
      +
    • +
    +Here are some derangement numbers, which you see grow quite fast. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +<> +@ + +\subsection{linsquarematrices.xhtml} +<>= +<> + + + +<> +
    SquareMatrix
    +
    +The top level matrix type in Axiom is +Matrix, see +(Matrix), which provides basic arithmetic +and linear algebra functions. However, since the matrices can be of any +size it is not true that any pair can be added or multiplied. Thus +Matrix has little algebraic structure. + +Sometimes you want to use matrices as coefficients for polynomials or in +other algebraic contexts. In this case, +SquareMatrix should be used. The +domain SquareMatrix(n,R) gives the +ring of n by n square matrices over R. +
      +
    • + +
      +
    • +
    +The usual arithmetic operations are available. +
      +
    • + +
      +
    • +
    +Square matrices can be used where ring elements are required. For example, +here is a matrix with matrix entries. +
      +
    • + +
      +
    • +
    +Or you can construct a polynomial with square matrix coefficients. +
      +
    • + +
      +
    • +
    +This value can be converted to a square matrix with polynomial coefficients. +
      +
    • + +
      +
    • +
    +For more information on related topics see +Modes and +Matrix. Issue the system command +
      +
    • + +
      +
    • +
    +to display the full list of operations defined by +SquareMatrix. +<> +@ + +\subsection{linvectors.xhtml} +<>= +<> + + + +<> +
    Vector
    +
    +The Vector domain is used for storing +data in a one-dimensonal indexed data structure. A vector is a +homogeneous data structure in that all the components of the vector +must belong to the same Axiom domain. Each vector has a fixed length +specified by the user; vectors are not extensible. This domain is +similar to the +OneDimensionalArray domain, +except that when the components of a +Vector belong to a +Ring, arithmetic operations are provided. +For more examples of operations that are defined for both +Vector and +OneDimensionalArray, see +OneDimensionalArray. + +As with the OneDimensionalArray +domain, a +Vector can be created by calling the operation +new, its components can be accessed by calling +the operations elt and +qelt, and its components can be reset by +calling the operations +setelt and +setelt!. This creates a vector of +integers of length 5 all of whose components are 12. +
      +
    • + +
      +
    • +
    +This is how you create a vector from a list of its components. +
      +
    • + +
      +
    • +
    +Indexing for vectors begins at 1. The last element has index equal to +the length of the vector, which is computed by +#. +
      +
    • + +
      +
    • +
    +This is the standard way to use elt to extract +an element. +
      +
    • + +
      +
    • +
    +This is the standard way to use setelt to change an element. It is the +same as if you had typed setelt(v,3,99). +
      +
    • + +
      +
    • +
    +Now look at v to see the change. You can use +qelt and +qsetelt! (instead of +elt and +setelt, respectively) but only when you +know that the indexis within the valid range. +
      +
    • + +
      +
    • +
    +When the components belong to a +Ring, +Axiom provides arithmetic operations for +Vector. These include left and right +scalar multiplication. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +Addition and subtraction are also available +
      +
    • + +
      +
    • +
    +Of course, when adding or subtracting, the two vectors must have the +same length or an error message is displayed. +
      +
    • + +
      +
    • +
    +For more information about other aggregate domains, see +List, +Matrix, +OneDimensionalArray. +Set, +Table, and +TwoDimensionalArray. +Issue the system command +
      +
    • + +
      +
    • +
    +to display the full list of operations defined by +Vector. +<> +@ + +\subsection{lin1darrays.xhtml} +<>= +<> + + +<> + lin1darrays not implemented +<> +@ + +\subsection{lin2darrays.xhtml} +<>= +<> + + +<> + lin2darrays not implemented +<> +@ + +%%M +\subsection{man0page.xhtml} +<>= +<> + + +<> +Enter search string (use * for wild card unless counter-indicated): +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + +
    + + Constructors + + + Search for + + categories + , + + domains + , + or + + packages + +
    + + Operations + + Search for operations.
    + + Attributes + + Search for attributes.
    + + General + + Search for all three of the above.
    + + Documentation + + Search library documentation. +
    + + Complete + + All of the above. +
    + + Selectable + + Detailed search with selectable options. +
    + + Reference + + Search Reference documentation (* wild card is not accepted). +
    + + Commands + + View system command documentation. +
    +<> +@ + +%%N +\subsection{numberspage.xhtml} +<>= +<> + + +<> +The following types of numbers are among those available in Axiom + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Integers + + Arithmetic with arbitrarily large integers +
    + Fractions + + Rational numbers and general fractions +
    + Machine Floats + + Fixed precision machine floating point +
    + Real Numbers + + Arbitrary precision decimal arithmetic +
    + Complex Numbers + + Complex numbers in general +
    + Finite Fields + + Arithmetic in characteristic p +
    +
    +Addtional topics + +<> +@ + +\subsection{numcardinalnumbers.xhtml} +<>= +<> + + + +<> +
    Cardinal Numbers
    +
    +The CardinalNumber can be used for +values indicating the cardinality of sets, both finite and infinite. For +example, the dimension operation in the +category VectorSpace returns a cardinal +number. + +The non-negative integers have a natural construction as cardinals +
    +0=#{ }, 1={0}, 2={0,1}, ..., n={i | 0 <= i < n}
    +
    +The fact that 0 acts as a zero for the multiplication of cardinals is +equivalent to the axiom of choice. + +Cardinal numbers can be created by conversion from non-negative integers. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +The can also be obtained as the named cardinal Aleph(n) +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +The finite? operation tests whether a value +is a finite cardinal, that is, a non-negative integer. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +Similarly, the countable? operation +determines whether a value is a countable cardinal, that is, finite or +Aleph(0). +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +Arithmetic operations are defined on cardinal numbers as follows: + + + + + + + + + + + + + + + + + +
    + x+y = #(X+Y) + + cardinality of the disjoint union +
    + x-y = #(X-Y) + + cardinality of the relative complement +
    + x*y = #(X*Y) + + cardinality of the Cartesian product +
    + x+*y = #(X**Y) + + cardinality of the set of maps from Y to X +
    +Here are some arithmetic examples: +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +Subtraction is a partial operation; it is not defined when subtracting +a larger cardinal from a smaller one, nor when subtracting two equal +infinite cardinals. +
      +
    • + +
      +
    • +
    +The generalized continuum hypothesis asserts that +
    + 2**Aleph i = Aleph(i+1)
    +
    +and is independent of the axioms of set theory. (Goedel, The consistency +of the continuum hypothesis, Ann. Math. Studies, Princeton Univ. Press, +1940) The CardinalNumber domain +provides an operation to assert whether the hypothesis is to be assumed. +
      +
    • + +
      +
    • +
    +When the generalized continuum hypothesis is assumed, exponentiation to +a transfinite power is allowed. +
      +
    • + +
      +
    • +
    +Three commonly encountered cardinal numbers are +
    +  a = #Z                 countable infinity
    +  c = #R                 the continuum
    +  f = #{g|g: [0,1]->R}
    +
    +In this domain, these values are obtained under the generalized continuum +hypothesis in this way: +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +<> +@ + +\subsection{numcomplexnumbers.xhtml} +<>= +<> + + + +<> +
    Complex Numbers
    +
    +The Complex constructor implements +complex objects over a commutative ring R. Typically, the ring R is +Integer, +Fraction Integer, +Float, +DoubleFloat, +R can also be a symbolic type, like +Polynomial Integer. +For more information about the numerical and graphical aspects of +complex numbers, see +Numeric Functions +in section 8.1. + +Complex objects are created by the +complex operation +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +The standard arithmetic operations are available. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +If R is a field, you can also divide the complex objects. +
      +
    • + +
      +
    • +
    +Use a conversion +(see Conversion in +section 2.7) to view the last object as a fraction of complex +integers. +
      +
    • + +
      +
    • +
    +The predefined macro %i is defined to be complex(0,1). +
      +
    • + +
      +
    • +
    +You can also compute the +conjugate and +norm of a complex number. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +The real and +imag operations are provided to +extract the real and imaginary parts, respectively. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +The domain +Complex Integer +is also called the Gaussian integers. If R is the integers (or, more +generally, a +Euclidean Domain), +you can compute greatest common divisors. +
      +
    • + +
      +
    • +
    +You can also compute least common multiples +
      +
    • + +
      +
    • +
    +You can factor Gaussian integers. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    +<> +@ + +\subsection{numcontinuedfractions.xhtml} +<>= +<> + + + +<> +
    Continued Fractions
    +
    +Continued fractions have been a fascinating and useful tool in mathematics +for well over three hundred years. Axiom implements continued fractions +for fractions of any Euclidean domain. In practice, this usually means +rational numbers. In this section we demonstrate some of the operations +available for manipulating both finite and infinite continued fractions. +It may be helpful if you review +Stream to remind yourself of some of the +operations with streams. + +The ContinuedFraction domain is a +field and therefore you can add, subtract, multiply, and divide the +fractions. The +continuedFraction operation +converts its fractional argument to a continued fraction. +
      +
    • + +
      +
    • +
    +This display is the compact form of the bulkier +
    +  3 +             1
    +     ---------------------------
    +     7 +            1
    +         -----------------------
    +         15 +         1
    +              ------------------
    +              1 +        1
    +                  --------------
    +                  25 +     1
    +                       ---------
    +                       1 +   1
    +                           -----
    +                           7 + 1
    +                               -
    +                               4
    +
    +You can write any rational number in a similar form. The fraction will +be finite and you can always take the "numerators" to be 1. That is, any +rational number can be written as a simple, finite continued fraction of +the form +
    +a(1) +            1
    +     ---------------------------
    +  a(2) +            1
    +         -----------------------
    +       a(3) +         1
    +                        .
    +                         .
    +                          .
    +                           1
    +
    +              -----------------
    +              a(n-1) +     1
    +                       ---------
    +                          a(n)
    +
    +The a(i) are called partial quotients and the operation +partialQuotients creates a +stream of them. +
      +
    • + +
      +
    • +
    +By considering more and more of the fraction, you get the +convergents. For example, the +first convergent is a(1), the second is a(1)+1/a(2) and so on. +
      +
    • + +
      +
    • +
    +Since this ia a finite continued fraction, the last convergent is the +original rational number, in reduced form. The result of +approximants is always an infinite +stream, though it may just repeat the "last" value. +
      +
    • + +
      +
    • +
    +Inverting c only changes the partial quotients of its fraction by +inserting a 0 at the beginning of the list. +
      +
    • + +
      +
    • +
    +Do this to recover the original continued fraction from this list of +partial quotients. The three argument form of the +continuedFraction operation takes +an element which is the whole part of the fraction, a stream of elements +which are the denominators of the fraction. +
      +
    • + +
      +
    • +
    +The streams need not be finite for +continuedFraction. Can you guess +which irrational number has the following continued fraction? See the end +of this section for the answer. +
      +
    • + +
      +
    • +
    +In 1737 Euler discovered the infinite continued fraction expansion +
    + e - 1                 1
    + ----- =  ---------------------------
    +p          2 +            1
    +              -----------------------
    +              6  +         1
    +                   ------------------
    +                  10 +        1
    +                       --------------
    +                       14 +  ... 
    +
    +We use this expansion to compute rational and floating point +approximations of e. (For this and other interesting expansions, +see C. D. Olds, Continued Fractions, New Mathematical Library, +Random House, New York, 1963 pp.134-139). + +By looking at the above expansion, we see that the whole part is 0 +and the numerators are all equal to 1. This constructs the stream of +denominators. +
      +
    • + +
      +
    • +
    +Therefore this is the continued fraction expansion for (e-1)/2. +
      +
    • + +
      +
    • +
    +These are the rational number convergents. +
      +
    • + +
      +
    • +
    +You can get rational convergents for e by multiplying by 2 and adding 1. +
      +
    • + +
      +
    • +
    +You can also compute the floating point approximations to these convergents. +
      +
    • + +
      +
    • +
    +Compare this to the value of e computed by the +exp operation in +Float. +
      +
    • + +
      +
    • +
    +In about 1658, Lord Brouncker established the following expansion for 4/pi. +
    +  1 +             1
    +     ---------------------------
    +     2 +            9
    +         -----------------------
    +         2  +         25
    +              ------------------
    +              2 +        49
    +                  --------------
    +                  2  +     81
    +                       ---------
    +                       2 +   ...
    +
    +Let's use this expansion to compute rational and floating point +approximations for pi. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +As you can see, the values are converging to +
    +  pi = 3.14159265358979323846..., but not very quickly.
    +
    +
      +
    • + +
      +
    • +
    +You need not restrict yourself to continued fractions of integers. Here is +an expansion for a quotient of Gaussian integers. +
      +
    • + +
      +
    • +
    +This is an expansion for a quotient of polynomials in one variable with +rational number coefficients. +
      +
    • + +
      +
    • +
    • + +
      +
    • +
    • + +
      +
    • +
    +To conclude this section, we give you evidence that +
    +  z =  3 +             1
    +          ---------------------------
    +          3 +            1
    +              -----------------------
    +              6 +          1
    +                  -------------------
    +                   3 +        1
    +                       --------------
    +                       6  +     1
    +                            ---------
    +                            3 + ...
    +
    +is the expansion of the square root of 11. +
      +
    • + +
      +
    • +
    +<> +@ + +\subsection{numexamples.xhtml} +<>= +<> + + +<> + numexamples not implemented +<> +@ + +\subsection{numfactorization.xhtml} +<>= +<> + + +<> + numfactorization not implemented +<> +@ + +\subsection{numfinitefields.xhtml} +<>= +<> + + +<> +
    Finite Fields
    +
    +A finite field (also called a Galois field) is a finite +algebraic structure where on can add, multiply, and divide under the same +laws (for example, commutativity, associativity, or distributivity) as +apply to the rational, real, or complex numbers. Unlike those three fields, +for any finite field there exists a positive prime integer p, called the +characteristic, such that p*x=0 for +any element x in the finite field. In fact, the number of elements in a +finite filed is a power of the characteristic and for each prime p and +positive integer n there exists exactly one finite field with p**n elements, +up to an isomorphism. (For more information about the algebraic structure and +properties of finite fields, see for example, S. Lang Algebr, +Second Edition, New York, Addison-Wesley Publishing Company, Inc. 1984, +ISBN 0 201 05476 6; or R. Lidl, H. Niederreiter, Finite Fields, +Encyclopedia of Mathematics and Its Applications, Vol. 20, Cambridge. +Cambridge Univ. Press, 1983, ISBN 0 521 30240 4) + +When n=1, the field has p elements and is called a prime field, +discussed in + +Modular Arithmetic and Prime Fields +in section 8.11.1. There are several ways of implementing extensions of +finite fields, and Axiom provides quite a bit of freedom to allow you to +choose the one that is best for your application. Moreover, we provide +operations for converting among the different representations of extensions +and different extensions of a single field. Finally, note that you usually +need to package call operations from finite fields if the operations do not +take as an argument an object of the field. See +Package Calling and Target Types +in section 2.9 for more information on package calling. + +<> +@ + +\subsection{numfloat.xhtml} +<>= +<> + + +<> +
    Real Numbers
    +
    +Axiom provides two kinds of floating point numbers. The domain +Float +(abbreviation FLOAT) +implements a model of arbitrary precisions floating point numbers. The +domain +DoubleFloat +(abbreviation DFLOAT) +is intended to make available hardware floating point arithmetic in Axiom. +The actual model of floating point +DoubleFloat that Axiom +provides is system dependent. For example, on the IBM System 370, Axiom +uses IBM double precision which has fourteen hexadecimal digits of +precision or roughly sixteen decimal digits. Arbitrary precision floats +allow the user to specify the precision at which arithmetic operations +are computed. Although this is an attractive facility, it comes at a cost. +Arbitrary precision floating point arithmetic typically takes twenty to +two hundred times more time than hardware floating point. + +For more information about Axiom's numeric and graphic facilities +see Graphics in section 7, +Numeric Functions +in section 8.1, and DoubleFloat +