\documentclass{article} \usepackage{axiom} \title{\$SPAD/src/interp setvars.boot} \author{The Axiom Team} \begin{document} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{Top level function calling conventions} Conventions: \begin{list}{} \item when called with argument "\%initialize", a function will set the appropriate variables to their default states. \item when called with argument "\%display\%", a function will return a current state information suitable for sayBrightly \item when called with argument "\%describe\%", a function will print a description of itself and any conditions it imposes. \item otherwise, a function may interpret its arguments as it sees appropriate. \end{list} Also by convention each top level function named in the FUNCTION slot (see the data structure in setvart.boot.pamphlet\cite{1}) has an associated describe function. Thus, for example, setOutputFortran is accompanied by function to describe its arguments, such as describeSetOutputFortran. \section{Top level set functions} The {\bf set} function in this file handles the top level {\bf )set} command line functions. <>= <> <> <> <> <> <> <> <> @ \section{initializeSetVariables} <>= initializeSetVariables (setTree) == -- this function passes through the table of set variable information -- and initializes the variables to their default definitions. for setData in setTree repeat st := setData.setType st = 'FUNCTION => -- here setVar is really the name of a function to call if functionp(setData.setVar) then FUNCALL( setData.setVar,"%initialize%") else sayMSG '" Function not implemented." st = 'INTEGER => SET(setData.setVar, setData.setDef) st = 'STRING => SET(setData.setVar, setData.setDef) st = 'LITERALS => SET(setData.setVar, translateYesNo2TrueFalse setData.setDef) st = 'TREE => initializeSetVariables(setData.setLeaf) @ \subsection{resetWorkspaceVariables} <>= resetWorkspaceVariables () == -- this replaces def in DEBUG LISP -- this function resets many workspace variables to their default -- values. Some things are reset by start and not reset by restart. SETQ(_/COUNTLIST , NIL) SETQ(_/EDITFILE , NIL) SETQ(_/SOURCEFILES , NIL) SETQ($sourceFiles , NIL) SETQ(_/PRETTY , NIL) SETQ(_/SPACELIST , NIL) SETQ(_/TIMERLIST , NIL) SETQ($existingFiles , MAKE_-HASHTABLE 'UEQUAL) SETQ($functionTable , NIL) SETQ($BOOT , NIL) SETQ($echoLineStack , NIL) SETQ($operationNameList , NIL) SETQ($slamFlag , NIL) SETQ($CommandSynonymAlist , COPY($InitialCommandSynonymAlist)) SETQ($UserAbbreviationsAlist , NIL) SETQ($msgAlist , NIL) SETQ($msgDatabase , NIL) SETQ($msgDatabaseName , NIL) SETQ($dependeeClosureAlist , NIL) SETQ($IOindex , 1 ) SETQ($coerceIntByMapCounter , 0 ) SETQ($e , [[NIL]]) SETQ($env , [[NIL]]) -- many variables set by the following initializeSetVariables($setOptions) @ \subsection{translateYesNo2TrueFalse} <>= translateYesNo2TrueFalse x == x in '(yes on) => true x in '(no off) => false x @ \subsection{translateTrueFalse2YesNo} <>= translateTrueFalse2YesNo x == x = true => 'on x = false => 'off x @ \subsection{set} <>= set l == set1(l, $setOptions) @ \subsection{set1} <>= set1(l,setTree) == null l => displaySetVariableSettings(setTree,"") $setOptionNames : local := [x.0 for x in setTree] arg := selectOption(DOWNCASE CAR l,$setOptionNames,'optionError) setData := [arg,:LASSOC(arg,setTree)] -- check is the user is authorized for the set variable null satisfiesUserLevel setData.setLevel => sayKeyedMsg("S2IZ0007",[$UserLevel,'"set option"]) 1 = #l => displaySetOptionInformation(arg,setData) st := setData.setType st = 'FUNCTION => -- allow the user to set the default setfunarg := l.1 = 'DEFAULT => "%initialize%" -- (arg2 := selectOption(l.1,['default],nil)) => "%initialize%" KDR l if functionp(setData.setVar) then FUNCALL( setData.setVar,setfunarg) else sayMSG '" Function not implemented." -- if so set, then show option information if $displaySetValue then displaySetOptionInformation(arg,setData) NIL st = 'STRING => arg2 := l.1 if arg2 = 'DEFAULT then SET(setData.setVar, setData.setDef) else if arg2 then SET(setData.setVar, arg2) -- if so set or not a valid choice, then show option information if $displaySetValue or (null arg2) then displaySetOptionInformation(arg,setData) NIL st = 'INTEGER => -- validate the option, allowing the user to set the default arg2 := num := l.1 (FIXP num) and (num >= (setData.setLeaf).0) and (null (upperlimit := setData.setLeaf.1) or num <= upperlimit) => num selectOption(l.1,['default,:setData.setLeaf],nil) if arg2 = 'DEFAULT then SET(setData.setVar, setData.setDef) else if arg2 then SET(setData.setVar, arg2) -- if so set or not a valid choice, then show option information if $displaySetValue or (null arg2) then displaySetOptionInformation(arg,setData) null arg2 => sayMessage ['" Your value",:bright object2String l.1, '"is not among the valid choices."] NIL st = 'LITERALS => -- validate the option, allowing the user to set the default if (arg2 := selectOption(l.1,['default,:setData.setLeaf],nil)) then if arg2 = 'DEFAULT then SET(setData.setVar, translateYesNo2TrueFalse setData.setDef) else if arg2 = 'nobreak then USE_-FAST_-LINKS 'T if arg2 = 'fastlinks then USE_-FAST_-LINKS 'NIL arg2 := 'break SET(setData.setVar, translateYesNo2TrueFalse arg2) -- if so set or not a valid choice, then show option information if $displaySetValue or (null arg2) then displaySetOptionInformation(arg,setData) null arg2 => sayMessage ['" Your value",:bright object2String l.1, '"is not among the valid choices."] NIL -- for a sub-tree, we must recurse st = 'TREE => set1(KDR l,setData.setLeaf) NIL sayMessage ['"Cannot handle set tree node type",:bright st,"yet"] NIL @ \subsection{displaySetOptionInformation} <>= displaySetOptionInformation(arg,setData) == st := setData.setType -- if the option is a sub-tree, show the full menu st = 'TREE => displaySetVariableSettings(setData.setLeaf,setData.setName) -- otherwise we want to show the current setting centerAndHighlight (STRCONC('"The ",object2String arg,'" Option"), $LINELENGTH,specialChar 'hbar) sayBrightly ['%l,:bright '"Description:",setData.setLabel] st = 'FUNCTION => TERPRI() if functionp(setData.setVar) then FUNCALL(setData.setVar,"%describe%") else sayMSG '" Function not implemented." st = 'INTEGER => sayMessage ['" The",:bright arg,'"option", '" may be followed by an integer in the range", :bright (setData.setLeaf).0,'"to",'%l, :bright (setData.setLeaf).1,'"inclusive.", '" The current setting is",:bright eval setData.setVar] st = 'STRING => sayMessage ['" The",:bright arg,'"option", '" is followed by a string enclosed in double quote marks.", '%l, '" The current setting is",:bright ["_"",eval setData.setVar, "_""]] st = 'LITERALS => sayMessage ['" The",:bright arg,'"option", '" may be followed by any one of the following:"] current := translateTrueFalse2YesNo eval setData.setVar for name in setData.setLeaf repeat if name = current then sayBrightly ['" ->",:bright object2String name] else sayBrightly ['" ",object2String name] sayMessage '" The current setting is indicated within the list." if (setData.setLeaf = '(yes no on off)) or (setData.setLeaf = '(yes no on off long)) then sayMessage [:bright '"yes",'"and",:bright '"no", '"have the same effect as",:bright '"on",'"and",:bright '"off", '"respectively."] @ \subsection{displaySetVariableSettings} <>= displaySetVariableSettings(setTree,label) == if label = "" then label := '")set" else label := STRCONC('" ",object2String label,'" ") centerAndHighlight(STRCONC('"Current Values of ",label, '" Variables"),$LINELENGTH," ") TERPRI() sayBrightly ["Variable ", "Description ", "Current Value"] SAY fillerSpaces($LINELENGTH,specialChar 'hbar) subtree := nil for setData in setTree repeat null satisfiesUserLevel setData.setLevel => nil setOption := object2String setData.setName setOption := STRCONC(setOption,fillerSpaces(13-#setOption,'" "), setData.setLabel) setOption := STRCONC(setOption,fillerSpaces(55-#setOption,'" ")) st := setData.setType st = 'FUNCTION => opt := functionp(setData.setVar) => FUNCALL( setData.setVar,"%display%") '"unimplemented" if PAIRP opt then opt := [:[o,'" "] for o in opt] sayBrightly concat(setOption,'%b,opt,'%d) st = 'STRING => opt := object2String eval setData.setVar sayBrightly [setOption,:bright opt] st = 'INTEGER => opt := object2String eval setData.setVar sayBrightly [setOption,:bright opt] st = 'LITERALS => opt := object2String translateTrueFalse2YesNo eval setData.setVar sayBrightly [setOption,:bright opt] st = 'TREE => sayBrightly [setOption,:bright '"..."] subtree := true subname := object2String setData.setName TERPRI() subtree => sayBrightly ['"Variables with current values of",:bright '"...", '"have further sub-options. For example,"] sayBrightly ['"issue",:bright '")set ",subname, '" to see what the options are for",:bright subname,'".",'%l, '"For more information, issue",:bright '")help set",'"."] @ \section{compiler} See the section compiler in setvart.boot.pamphlet\cite{1}. \begin{verbatim} Current Values of compiler Variables Variable Description Current Value ----------------------------------------------------------------- output library in which to place compiled code input controls libraries from which to load compiled code args arguments for compiling AXIOM code -O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra \end{verbatim} <>= <> <> <> <> <> <> @ \subsection{setAsharpArgs} <>= setAsharpArgs arg == arg = "%initialize%" => $asharpCmdlineFlags := '"-O -Fasy -Fao -Flsp -laxiom -Mno-AXL__W__WillObsolete -DAxiom -Y $AXIOM/algebra" arg = "%display%" => $asharpCmdlineFlags (null arg) or (arg = "%describe%") or (first arg = '_?) => describeAsharpArgs() $asharpCmdlineFlags := first(arg) @ \subsection{describeAsharpArgs} <>= describeAsharpArgs() == sayBrightly LIST ( '%b,'")set compiler args ",'%d,_ '"is used to tell AXIOM how to invoke the library compiler ",'%l,_ '" when compiling code for AXIOM.",'%l,_ '" The args option is followed by a string enclosed in double quotes.",'%l,'%l,_ '" The current setting is",'%l,'%b,'"_"",$asharpCmdlineFlags,'"_"",'%d) @ \subsection{setInputLibrary} <>= setInputLibrary arg == arg = "%initialize%" => true arg = "%display%" => [LIBRARY_-NAME(u) for u in INPUT_-LIBRARIES] (null arg) or (arg = "%describe%") or (first arg = '_?) => describeInputLibraryArgs() arg is [act, filename] and (act := selectOptionLC(act,'(add drop),nil)) => act = 'add => addInputLibrary TRUENAME STRINGIMAGE filename act = 'drop => dropInputLibrary TRUENAME STRINGIMAGE filename setInputLibrary NIL @ \subsection{setOutputLibrary} <>= setOutputLibrary arg == -- Hack to avoid initialising libraries in KCL: not $cclSystem => false arg = "%initialize%" => $outputLibraryName := nil arg = "%display%" => $outputLibraryName or '"user.lib" (null arg) or (arg = "%describe%") or (first arg = '_?) => describeOutputLibraryArgs() not ONEP(#arg) => setOutputLibrary nil -- If the file already exists then use the complete pathname to help -- keep track of it in the case the user issues )cd commands. if FILEP (fn := STRINGIMAGE first arg) then fn := TRUENAME fn openOutputLibrary($outputLibraryName := fn) @ \subsection{describeOutputLibraryArgs} <>= describeOutputLibraryArgs() == sayBrightly LIST ( '%b,'")set compiler output library",'%d,_ '"is used to tell the compiler where to place", '%l,_ '"compiled code generated by the library compiler. By default it goes",'%l,_ '"in a file called",'%b, '"user.lib", '%d, '"in the current directory." ) @ \subsection{describeInputLibraryArgs} <>= describeInputLibraryArgs() == sayBrightly LIST ( '%b,'")set compiler input add library",'%d,_ '"is used to tell AXIOM to add", '%b, '"library", '%d, '"to",'%l, '"the front of the path which determines where compiled code is loaded from.",_ '%l, '%b,'")set compiler input drop library",'%d,_ '"is used to tell AXIOM to remove", '%b, '"library", '%d, '%l,_ '"from this path." ) @ \section{expose} See the section expose in setvart.boot.pamphlet\cite{1} \begin{verbatim} ---------------------- The expose Option ---------------------- Description: control interpreter constructor exposure The following groups are explicitly exposed in the current frame (called initial ): basic categories naglink anna The following constructors are explicitly exposed in the current frame: there are no explicitly exposed constructors The following constructors are explicitly hidden in the current frame: there are no explicitly hidden constructors When )set expose is followed by no arguments, the information you now see is displayed. When followed by the initialize argument, the exposure group data in the file INTERP.EXPOSED is read and is then available. The arguments add and drop are used to add or drop exposure groups or explicit constructors from the local frame exposure data. Issue )set expose add or )set expose drop for more information. \end{verbatim} <>= <> <> <> <> <> <> <> @ \subsection{setExpose} <>= setExpose arg == arg = "%initialize%" => loadExposureGroupData() arg = "%display%" => '"..." (null arg) or (arg = "%describe%") or (first arg = '_?) => -- give msg about exposure groups displayExposedGroups() -- give msg about explicitly exposed constructors sayMSG '" " displayExposedConstructors() -- give msg about explicitly hidden constructors sayMSG '" " displayHiddenConstructors() -- give some more details sayMSG '" " sayKeyedMsg("S2IZ0049D",[namestring pathname ["INTERP","EXPOSED"]]) arg is [fn,:fnargs] and (fn := selectOptionLC(fn, '(add drop initialize),NIL)) => fn = 'add => setExposeAdd fnargs fn = 'drop => setExposeDrop fnargs fn = 'initialize => setExpose "%initialize%" NIL setExpose NIL @ \subsection{setExposeAdd} <>= setExposeAdd arg == (null arg) => centerAndHighlight ("The add Option",$LINELENGTH,specialChar 'hbar) -- give msg about exposure groups displayExposedGroups() -- give msg about explicitly exposed constructors sayMSG '" " displayExposedConstructors() sayMSG '" " sayKeyedMsg("S2IZ0049E",NIL) arg is [fn,:fnargs] and (fn := selectOptionLC(fn, '(group constructor),NIL)) => fn = 'group => setExposeAddGroup fnargs fn = 'constructor => setExposeAddConstr fnargs NIL setExposeAdd NIL @ \subsection{setExposeAddGroup} <>= setExposeAddGroup arg == (null arg) => centerAndHighlight("The group Option",$LINELENGTH,specialChar 'hbar) -- give msg about exposure groups displayExposedGroups() sayMSG '" " sayKeyedMsg("S2IZ0049G",[namestring pathname ["INTERP","EXPOSED"]]) sayMSG '" " sayAsManyPerLineAsPossible [object2String first x for x in $globalExposureGroupAlist] for x in arg repeat if PAIRP x then x := QCAR x x = 'all => $localExposureData.0 :=[first x for x in $globalExposureGroupAlist] $localExposureData.1 :=NIL $localExposureData.2 :=NIL displayExposedGroups() sayMSG '" " displayExposedConstructors() sayMSG '" " displayHiddenConstructors() clearClams() null GETALIST($globalExposureGroupAlist,x) => sayKeyedMsg("S2IZ0049H",[x]) member(x,$localExposureData.0) => sayKeyedMsg("S2IZ0049I",[x,$interpreterFrameName]) $localExposureData.0 := MSORT cons(x,$localExposureData.0) sayKeyedMsg("S2IZ0049R",[x,$interpreterFrameName]) clearClams() @ \subsection{setExposeAddConstr} <>= setExposeAddConstr arg == (null arg) => centerAndHighlight ("The constructor Option",$LINELENGTH, specialChar 'hbar) -- give msg about explicitly exposed constructors displayExposedConstructors() for x in arg repeat x := unabbrev x if PAIRP x then x := QCAR x -- if the constructor is known, we know what type it is null GETDATABASE(x,'CONSTRUCTORKIND) => sayKeyedMsg("S2IZ0049J",[x]) member(x,$localExposureData.1) => sayKeyedMsg("S2IZ0049K",[x,$interpreterFrameName]) -- if the constructor is explicitly hidden, then remove that if member(x,$localExposureData.2) then $localExposureData.2 := delete(x,$localExposureData.2) $localExposureData.1 := MSORT cons(x,$localExposureData.1) clearClams() sayKeyedMsg("S2IZ0049P",[x,$interpreterFrameName]) @ \subsection{setExposeDrop} <>= setExposeDrop arg == (null arg) => centerAndHighlight ("The drop Option",$LINELENGTH,specialChar 'hbar) -- give msg about explicitly hidden constructors displayHiddenConstructors() sayMSG '" " sayKeyedMsg("S2IZ0049F",NIL) arg is [fn,:fnargs] and (fn := selectOptionLC(fn, '(group constructor),NIL)) => fn = 'group => setExposeDropGroup fnargs fn = 'constructor => setExposeDropConstr fnargs NIL setExposeDrop NIL @ \subsection{setExposeDropGroup} <>= setExposeDropGroup arg == (null arg) => centerAndHighlight ("The group Option",$LINELENGTH,specialChar 'hbar) sayKeyedMsg("S2IZ0049L",NIL) sayMSG '" " displayExposedGroups() for x in arg repeat if PAIRP x then x := QCAR x x = 'all => $localExposureData.0 := NIL $localExposureData.1 := NIL $localExposureData.2 := NIL displayExposedGroups() sayMSG '" " displayExposedConstructors() sayMSG '" " displayHiddenConstructors() clearClams() member(x,$localExposureData.0) => $localExposureData.0 := delete(x,$localExposureData.0) clearClams() sayKeyedMsg("S2IZ0049S",[x,$interpreterFrameName]) GETALIST($globalExposureGroupAlist,x) => sayKeyedMsg("S2IZ0049I",[x,$interpreterFrameName]) sayKeyedMsg("S2IZ0049H",[x]) @ \subsection{setExposeDropConstr} <>= setExposeDropConstr arg == (null arg) => centerAndHighlight ("The constructor Option",$LINELENGTH, specialChar 'hbar) sayKeyedMsg("S2IZ0049N",NIL) sayMSG '" " displayExposedConstructors() sayMSG '" " displayHiddenConstructors() for x in arg repeat x := unabbrev x if PAIRP x then x := QCAR x -- if the constructor is known, we know what type it is null GETDATABASE(x,'CONSTRUCTORKIND) => sayKeyedMsg("S2IZ0049J",[x]) member(x,$localExposureData.2) => sayKeyedMsg("S2IZ0049O",[x,$interpreterFrameName]) if member(x,$localExposureData.1) then $localExposureData.1 := delete(x,$localExposureData.1) $localExposureData.2 := MSORT cons(x,$localExposureData.2) clearClams() sayKeyedMsg("S2IZ0049Q",[x,$interpreterFrameName]) @ \section{fortran calling} See the section calling in servart.boot.pamphlet. \begin{verbatim} Current Values of calling Variables Variable Description Current Value ----------------------------------------------------------------- tempfile set location of temporary data files /tmp/ directory set location of generated FORTRAN files ./ linker linker arguments (e.g. libraries to search) -lxlf \end{verbatim} <>= <> <> <> <> <> <> <> @ \subsection{setFortTmpDir} <>= setFortTmpDir arg == arg = "%initialize%" => $fortranTmpDir := '"/tmp/" arg = "%display%" => STRINGP $fortranTmpDir => $fortranTmpDir PNAME $fortranTmpDir (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetFortTmpDir() -- try to figure out what the argument is -- VM code - must be an accessed disk mode [mode] not (mode := validateOutputDirectory arg) => sayBrightly ['" Sorry, but your argument(s)",:bright arg, '"is(are) not valid.",'%l] describeSetFortTmpDir() $fortranTmpDir := mode @ \subsection{validateOutputDirectory} <>= validateOutputDirectory x == AND(PATHNAME_-DIRECTORY(PROBE_-FILE(CAR(x))), NOT PATHNAME_-NAME (PROBE_-FILE(CAR(x)))) => CAR(x) NIL @ \subsection{describeSetFortTmpDir} <>= describeSetFortTmpDir() == sayBrightly LIST ( '%b,'")set fortran calling tempfile",'%d,_ '" is used to tell AXIOM where",'%l,_ '" to place intermediate FORTRAN data files . This must be the ",'%l,_ '" name of a valid existing directory to which you have permission ",'%l,_ '" to write (including the final slash).",'%l,'%l,_ '" Syntax:",'%l,_ '" )set fortran calling tempfile DIRECTORYNAME",'%l,'%l,_ '" The current setting is",'%b,$fortranTmpDir,'%d) @ \subsection{setFortDir} <>= setFortDir arg == arg = "%initialize%" => $fortranDirectory := '"./" arg = "%display%" => STRINGP $fortranDirectory => $fortranDirectory PNAME $fortranDirectory (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetFortDir() -- try to figure out what the argument is -- VM code - must be an accessed disk mode [mode] not (mode := validateOutputDirectory arg) => sayBrightly ['" Sorry, but your argument(s)",:bright arg, '"is(are) not valid.",'%l] describeSetFortDir() $fortranDirectory := mode @ \subsection{describeSetFortDir} <>= describeSetFortDir() == sayBrightly LIST ( '%b,'")set fortran calling directory",'%d,_ '" is used to tell AXIOM where",'%l,_ '" to place generated FORTRAN files. This must be the name ",'%l,_ '" of a valid existing directory to which you have permission ",'%l,_ '" to write (including the final slash).",'%l,'%l,_ '" Syntax:",'%l,_ '" )set fortran calling directory DIRECTORYNAME",'%l,'%l,_ '" The current setting is",'%b,$fortranDirectory,'%d) @ \subsection{setLinkerArgs} <>= setLinkerArgs arg == arg = "%initialize%" => $fortranLibraries := '"-lxlf" arg = "%display%" => object2String $fortranLibraries (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetLinkerArgs() LISTP(arg) and STRINGP(first arg) => $fortranLibraries := first(arg) describeSetLinkerArgs() @ \subsection{describeSetLinkerArgs} <>= describeSetLinkerArgs() == sayBrightly LIST ( '%b,'")set fortran calling linkerargs",'%d,_ '" is used to pass arguments to the linker",'%l,_ '" when using ",'%b,'"mkFort",'%d,_ '" to create functions which call Fortran code.",'%l,_ '" For example, it might give a list of libraries to be searched,",'%l,_ '" and their locations.",'%l,_ '" The string is passed verbatim, so must be the correct syntax for",'%l,_ '" the particular linker being used.",'%l,'%l,_ '" Example: )set fortran calling linker _"-lxlf_"",'%l,'%l,_ '" The current setting is",'%b,$fortranLibraries,'%d) @ \section{functions} See the section functions in setvart.boot.pamphlet\cite{1} \begin{verbatim} Current Values of functions Variables Variable Description Current Value ----------------------------------------------------------------- cache number of function results to cache 0 compile compile, don't just define function bodies off recurrence specially compile recurrence relations on \end{verbatim} <>= <> <> <> <> <> @ \subsection{setFunctionsCache} <>= setFunctionsCache arg == $options : local := NIL arg = "%initialize%" => $cacheCount := 0 $cacheAlist := NIL arg = "%display%" => null $cacheAlist => object2String $cacheCount '"..." (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetFunctionsCache() TERPRI() sayAllCacheCounts() n := first arg (n ^= 'all) and ((not FIXP n) or (n < 0)) => sayMessage ['"Your value of",:bright n,'"is invalid because ..."] describeSetFunctionsCache() terminateSystemCommand() if (rest arg) then $options := [['vars,:rest arg]] countCache n @ \subsection{countCache} <>= countCache n == $options => $options is [["vars",:l]] => for x in l repeat NULL IDENTP x => sayKeyedMsg("S2IF0007",[x]) $cacheAlist:= insertAlist(x,n,$cacheAlist) cacheCountName:= INTERNL(x,'";COUNT") SET(cacheCountName,n) sayCacheCount(x,n) optionError(CAAR $options,nil) sayCacheCount(nil,$cacheCount:= n) @ \subsection{describeSetFunctionsCache} <>= describeSetFunctionsCache() == sayBrightly LIST( '%b,'")set functions cache",'%d,'"is used to tell AXIOM how many",'%l,_ '" values computed by interpreter functions should be saved. This can save ",'%l, _ '" quite a bit of time in recursive functions, though one must consider that",'%l,_ '" the cached values will take up (perhaps valuable) room in the workspace.",'%l,'%l,_ '" The value given after",'%b,'"cache",'%d,'"must either be the",_ '" word",'%b,'"all",'%d,'"or a positive",'%l,_ '" integer. This may be followed by any number of function names whose cache",'%l,_ '" sizes you wish to so set. If no functions are given, the default cache",'%l,_ '" size is set.",'%l,'" Examples:",_ '" )set fun cache all )set fun cache 10 f g Legendre") @ \subsection{sayAllCacheCounts} <>= sayAllCacheCounts () == sayCacheCount(nil,$cacheCount) $cacheAlist => TERPRI() -- SAY '" However," for [x,:n] in $cacheAlist | n ^= $cacheCount repeat sayCacheCount(x,n) @ \subsection{sayCacheCount} <>= sayCacheCount(fn,n) == prefix:= fn => ["function",:bright linearFormatName fn] n = 0 => ["interpreter functions "] ["In general, interpreter functions "] n = 0 => fn => sayBrightly ['" Caching for ",:prefix, '"is turned off"] sayBrightly '" In general, functions will cache no returned values." phrase:= n="all" => [:bright "all","values."] n=1 => [" only the last value."] [" the last",:bright n,"values."] sayBrightly ['" ",:prefix,'"will cache",:phrase] @ \section{history} See the section history in setvart.boot.pamphlet\cite{1} \begin{verbatim} --------------------- The history Option ---------------------- Description: save workspace values in a history file The history option may be followed by any one of the following: -> on off The current setting is indicated within the list. \end{verbatim} <>= <> @ \subsection{setHistory} <>= setHistory arg == -- this is just a front end for the history functions arg = "%initialize%" => nil current := object2String translateTrueFalse2YesNo $HiFiAccess arg = "%display%" => current (null arg) or (arg = "%describe%") or (first arg = '_?) => sayMessage ['" The",:bright '"history",'"option", '" may be followed by any one of the following:"] for name in '("on" "off" "yes" "no") repeat if name = current then sayBrightly ['" ->",:bright name] else sayBrightly ['" ",name] TERPRI() sayBrightly '" The current setting is indicated within the list." sayBrightly [:bright '"yes",'"and",:bright '"no", '"have the same effect as",:bright '"on",'"and",:bright '"off", '"respectively."] if $useInternalHistoryTable then wh := '"memory" else wh := '"a file" sayBrightly ['%l,'" When the history facility is active, the data", '" is kept in ",wh,'"."] sayMessage ['" Issue",:bright '")help history", '"for more information."] arg is [fn] and (fn := DOWNCASE(fn)) in '(y n ye yes no on of off) => $options := [[fn]] historySpad2Cmd() setHistory NIL @ \section{kernel} See the section kernel in setvart.boot.pamphlet\cite{1} \begin{verbatim} Current Values of kernel Variables Variable Description Current Value ----------------------------------------------------------------- warn warn when re-definition is attempted off protect prevent re-definition of kernel functions off \end{verbatim} <>= <> <> <> <> @ \subsection{describeProtectedSymbolsWarning} <>= describeProtectedSymbolsWarning() == sayBrightly LIST( '"Some AXIOM library functions are compiled into the kernel for efficiency",_ '%l,'"reasons. To prevent them being re-defined when loaded from a library",_ '%l,'"they are specially protected. If a user wishes to know when an attempt",_ '%l,'"is made to re-define such a function, he or she should issue the command:",_ '%l,'" )set kernel warn on",_ '%l,'"To restore the default behaviour, he or she should issue the command:",_ '%l,'" )set kernel warn off") @ \subsection{protectedSymbolsWarning} <>= protectedSymbolsWarning arg == arg = "%initialize%" => PROTECTED_-SYMBOL_-WARN(false) arg = "%display%" => v := PROTECTED_-SYMBOL_-WARN(true) PROTECTED_-SYMBOL_-WARN(v) v => '"on" '"off" (null arg) or (arg = "%describe%") or (first arg = '_?) => describeProtectedSymbolsWarning() PROTECTED_-SYMBOL_-WARN translateYesNo2TrueFalse first arg @ \subsection{describeProtectSymbols} <>= describeProtectSymbols() == sayBrightly LIST( '"Some AXIOM library functions are compiled into the kernel for efficiency",_ '%l,'"reasons. To prevent them being re-defined when loaded from a library",_ '%l,'"they are specially protected. If a user wishes to re-define these",_ '%l,'"functions, he or she should issue the command:",_ '%l,'" )set kernel protect off",_ '%l,'"To restore the default behaviour, he or she should issue the command:",_ '%l,'" )set kernel protect on") @ \subsection{protectSymbols} <>= protectSymbols arg == arg = "%initialize%" => PROTECT_-SYMBOLS(true) arg = "%display%" => v := PROTECT_-SYMBOLS(true) PROTECT_-SYMBOLS(v) v => '"on" '"off" (null arg) or (arg = "%describe%") or (first arg = '_?) => describeProtectSymbols() PROTECT_-SYMBOLS translateYesNo2TrueFalse first arg @ \section{naglink} See the section naglink in setvart.boot.pamphlet\cite{1} \begin{verbatim} Current Values of naglink Variables Variable Description Current Value ----------------------------------------------------------------- host internet address of host for NAGLink localhost persistence number of (fortran) functions to remember 1 messages show NAGLink messages on double enforce DOUBLE PRECISION ASPs on \end{verbatim} <>= <> <> <> <> @ \subsection{setNagHost} <>= setNagHost arg == arg = "%initialize%" => $nagHost := '"localhost" arg = "%display%" => object2String $nagHost (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetNagHost() $nagHost := object2String arg @ \subsection{describeSetNagHost} <>= describeSetNagHost() == sayBrightly LIST ( '%b,'")set naglink host",'%d,_ '"is used to tell AXIOM which host to contact for",'%l,_ '" a NAGLink request. An Internet address should be supplied. The host",'%l,_ '" specified must be running the NAGLink daemon.",'%l,'%l,_ '" The current setting is",'%b,$nagHost,'%d) @ \subsection{setFortPers} <>= setFortPers arg == arg = "%initialize%" => $fortPersistence := 1 arg = "%display%" => $fortPersistence (null arg) or (arg = "%describe%") or (first arg = '_?) => describeFortPersistence() n := first arg ((not FIXP n) or (n < 0)) => sayMessage ['"Your value of",:bright n,'"is invalid because ..."] describeFortPersistence() terminateSystemCommand() $fortPersistence := first(arg) @ \subsection{describeFortPersistence} <>= describeFortPersistence() == sayBrightly LIST ( '%b,'")set naglink persistence",'%d,_ '"is used to tell the ",'%b,"nagd",'%d," daemon how many ASP",'%l,_ '" source and object files to keep around in case you reuse them. This helps",'%l,_ '" to avoid needless recompilations. The number specified should be a ",'%l,_ '" non-negative integer.", '%l,'%l,_ '" The current setting is",'%b,$fortPersistence,'%d) @ \section{output algebra} See the subsection output algebra in setvart.boot.pamphlet\cite{1} \begin{verbatim} --------------------- The algebra Option ---------------------- Description: display output in algebraic form )set output algebra is used to tell AXIOM to turn algebra-style output printing on and off, and where to place the output. By default, the destination for the output is the screen but printing is turned off. Syntax: )set output algebra where arg can be one of on turn algebra printing on (default state) off turn algebra printing off console send algebra output to screen (default state) fp<.fe> send algebra output to file with file prefix fp and file extension .fe. If not given, .fe defaults to .spout. If you wish to send the output to a file, you may need to issue this command twice: once with on and once with the file name. For example, to send algebra output to the file polymer.spout, issue the two commands )set output algebra on )set output algebra polymer The output is placed in the directory from which you invoked AXIOM or the one you set with the )cd system command. The current setting is: On:CONSOLE \end{verbatim} <>= <> <> @ \subsection{setOutputAlgebra} <>= setOutputAlgebra arg == arg = "%initialize%" => $algebraOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $algebraOutputFile := '"CONSOLE" $algebraFormat := true arg = "%display%" => if $algebraFormat then label := '"On:" else label := '"Off:" STRCONC(label,$algebraOutputFile) (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetOutputAlgebra() -- try to figure out what the argument is if arg is [fn] and fn in '(Y N YE YES NO O ON OF OFF CONSOLE y n ye yes no o on of off console) then 'ok else arg := [fn,'spout] arg is [fn] => UPCASE(fn) in '(Y N YE O OF) => sayKeyedMsg("S2IV0002",'(algebra algebra)) UPCASE(fn) in '(NO OFF) => $algebraFormat := NIL UPCASE(fn) in '(YES ON) => $algebraFormat := true UPCASE(fn) = 'CONSOLE => SHUT $algebraOutputStream $algebraOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $algebraOutputFile := '"CONSOLE" (arg is [fn,ft]) or (arg is [fn,ft,fm]) => -- aha, a file if (ptype := pathnameType fn) then fn := STRCONC(pathnameDirectory fn,pathnameName fn) ft := ptype if null fm then fm := 'A filename := $FILEP(fn,ft,fm) null filename => sayKeyedMsg("S2IV0003",[fn,ft,fm]) (testStream := MAKE_-OUTSTREAM(filename,255,0)) => SHUT $algebraOutputStream $algebraOutputStream := testStream $algebraOutputFile := object2String filename sayKeyedMsg("S2IV0004",['"Algebra",$algebraOutputFile]) sayKeyedMsg("S2IV0003",[fn,ft,fm]) sayKeyedMsg("S2IV0005",NIL) describeSetOutputAlgebra() @ \subsection{describeSetOutputAlgebra} <>= describeSetOutputAlgebra() == sayBrightly LIST ('%b,'")set output algebra",'%d,_ '"is used to tell AXIOM to turn algebra-style output",'%l,_ '"printing on and off, and where to place the output. By default, the",'%l,_ '"destination for the output is the screen but printing is turned off.",'%l,_ '%l,_ '"Syntax: )set output algebra ",'%l,_ '" where arg can be one of",'%l,_ '" on turn algebra printing on (default state)",'%l,_ '" off turn algebra printing off",'%l,_ '" console send algebra output to screen (default state)",'%l,_ '" fp<.fe> send algebra output to file with file prefix fp",'%l,_ '" and file extension .fe. If not given, .fe defaults to .spout.",'%l, '%l,_ '"If you wish to send the output to a file, you may need to issue this command",'%l,_ '"twice: once with",'%b,'"on",'%d,'"and once with the file name. For example, to send",'%l,_ '"algebra output to the file",'%b,'"polymer.spout,",'%d,'"issue the two commands",'%l,_ '%l,_ '" )set output algebra on",'%l,_ '" )set output algebra polymer",'%l,_ '%l,_ '"The output is placed in the directory from which you invoked AXIOM or",'%l,_ '"the one you set with the )cd system command.",'%l,_ '"The current setting is: ",'%b,setOutputAlgebra "%display%",'%d) @ \section{output characters} See the subsection output characters in setvart.boot.pamphlet\cite{1} \begin{verbatim} -------------------- The characters Option -------------------- Description: choose special output character set The characters option may be followed by any one of the following: default -> plain The current setting is indicated within the list. This option determines the special characters used for algebraic output. This is what the current choice of special characters looks like: ulc is shown as + urc is shown as + llc is shown as + lrc is shown as + vbar is shown as | hbar is shown as - quad is shown as ? lbrk is shown as [ rbrk is shown as ] lbrc is shown as { rbrc is shown as } ttee is shown as + btee is shown as + rtee is shown as + ltee is shown as + ctee is shown as + bslash is shown as \ \end{verbatim} <>= <> @ \subsection{setOutputCharacters} <>= setOutputCharacters arg == -- this sets the special character set arg = "%initialize%" => $specialCharacters := $plainRTspecialCharacters current := $specialCharacters = $RTspecialCharacters => '"default" $specialCharacters = $plainRTspecialCharacters => '"plain" '"unknown" arg = "%display%" => current (null arg) or (arg = "%describe%") or (first arg = '_?) => sayMessage ['" The",:bright '"characters",'"option", '" may be followed by any one of the following:"] for name in '("default" "plain") repeat if name = current then sayBrightly ['" ->",:bright name] else sayBrightly ['" ",name] TERPRI() sayBrightly '" The current setting is indicated within the list. This option determines " sayBrightly '" the special characters used for algebraic output. This is what the" sayBrightly '" current choice of special characters looks like:" l := NIL for [char,:.] in $specialCharacterAlist repeat s := STRCONC('" ",PNAME char,'" is shown as ", PNAME specialChar(char)) l := cons(s,l) sayAsManyPerLineAsPossible reverse l arg is [fn] and (fn := DOWNCASE(fn)) => fn = 'default => $specialCharacters := $RTspecialCharacters fn = 'plain => $specialCharacters := $plainRTspecialCharacters setOutputCharacters NIL setOutputCharacters NIL @ \section{output fortran} See the subsection output fortran in setvart.boot.pamphlet\cite{1} \begin{verbatim} --------------------- The fortran Option ---------------------- Description: create output in FORTRAN format )set output fortran is used to tell AXIOM to turn FORTRAN-style output printing on and off, and where to place the output. By default, the destination for the output is the screen but printing is turned off. Also See: )set fortran Syntax: )set output fortran where arg can be one of on turn FORTRAN printing on off turn FORTRAN printing off (default state) console send FORTRAN output to screen (default state) fp<.fe> send FORTRAN output to file with file prefix fp and file extension .fe. If not given, .fe defaults to .sfort. If you wish to send the output to a file, you must issue this command twice: once with on and once with the file name. For example, to send FORTRAN output to the file polymer.sfort, issue the two commands )set output fortran on )set output fortran polymer The output is placed in the directory from which you invoked AXIOM or the one you set with the )cd system command. The current setting is: Off:CONSOLE \end{verbatim} <>= <> <> <> @ \subsection{makeStream} <>= makeStream(append,filename,i,j) == append => MAKE_-APPENDSTREAM(filename,i,j) MAKE_-OUTSTREAM(filename,i,j) @ \subsection{setOutputFortran} <>= setOutputFortran arg == arg = "%initialize%" => $fortranOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $fortranOutputFile := '"CONSOLE" $fortranFormat := NIL arg = "%display%" => if $fortranFormat then label := '"On:" else label := '"Off:" STRCONC(label,$fortranOutputFile) (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetOutputFortran() -- try to figure out what the argument is append := NIL quiet := NIL while LISTP arg and UPCASE(first arg) in '(APPEND QUIET) repeat if UPCASE first(arg) = 'APPEND then append := true else if UPCASE first(arg) = 'QUIET then quiet := true arg := rest(arg) if arg is [fn] and fn in '(Y N YE YES NO O ON OF OFF CONSOLE y n ye yes no o on of off console) then 'ok else arg := [fn,'sfort] arg is [fn] => UPCASE(fn) in '(Y N YE O OF) => sayKeyedMsg("S2IV0002",'(FORTRAN fortran)) UPCASE(fn) in '(NO OFF) => $fortranFormat := NIL UPCASE(fn) in '(YES ON) => $fortranFormat := true UPCASE(fn) = 'CONSOLE => SHUT $fortranOutputStream $fortranOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $fortranOutputFile := '"CONSOLE" (arg is [fn,ft]) or (arg is [fn,ft,fm]) => -- aha, a file if (ptype := pathnameType fn) then fn := STRCONC(pathnameDirectory fn,pathnameName fn) ft := ptype if null fm then fm := 'A filename := $FILEP(fn,ft,fm) null filename => sayKeyedMsg("S2IV0003",[fn,ft,fm]) (testStream := makeStream(append,filename,255,0)) => SHUT $fortranOutputStream $fortranOutputStream := testStream $fortranOutputFile := object2String filename if null quiet then sayKeyedMsg("S2IV0004",['FORTRAN,$fortranOutputFile]) if null quiet then sayKeyedMsg("S2IV0003",[fn,ft,fm]) if null quiet then sayKeyedMsg("S2IV0005",NIL) describeSetOutputFortran() @ \subsection{describeSetOutputFortran} <>= describeSetOutputFortran() == sayBrightly LIST ('%b,'")set output fortran",'%d,_ '"is used to tell AXIOM to turn FORTRAN-style output",'%l,_ '"printing on and off, and where to place the output. By default, the",'%l,_ '"destination for the output is the screen but printing is turned off.",'%l,_ '%l,_ '"Also See: )set fortran",'%l, '%l,_ '"Syntax: )set output fortran ",'%l,_ '" where arg can be one of",'%l,_ '" on turn FORTRAN printing on",'%l,_ '" off turn FORTRAN printing off (default state)",'%l,_ '" console send FORTRAN output to screen (default state)",'%l,_ '" fp<.fe> send FORTRAN output to file with file prefix fp and file",'%l,_ '" extension .fe. If not given, .fe defaults to .sfort.",'%l, '%l,_ '"If you wish to send the output to a file, you must issue this command",'%l,_ '"twice: once with",'%b,'"on",'%d,'"and once with the file name. For example, to send",'%l,_ '"FORTRAN output to the file",'%b,'"polymer.sfort,",'%d,'"issue the two commands",'%l,_ '%l,_ '" )set output fortran on",'%l,_ '" )set output fortran polymer",'%l,_ '%l,_ '"The output is placed in the directory from which you invoked AXIOM or",'%l,_ '"the one you set with the )cd system command.",'%l,_ '"The current setting is: ",'%b,setOutputFortran "%display%",'%d) @ \section{output openmath} See the subsection output openmath in setvart.boot.pamphlet\cite{1} \begin{verbatim} ------------------ The openmath Option ------------------------ Description: create output in OpenMath style )set output tex is used to tell AXIOM to turn TeX-style output printing on and off, and where to place the output. By default, the destination for the output is the screen but printing is turned off. Syntax: )set output tex where arg can be one of on turn TeX printing on off turn TeX printing off (default state) console send TeX output to screen (default state) fp<.fe> send TeX output to file with file prefix fp and file extension .fe. If not given, .fe defaults to .som. If you wish to send the output to a file, you must issue this command twice: once with on and once with the file name. For example, to send TeX output to the file polymer.som, issue the two commands )set output tex on )set output tex polymer The output is placed in the directory from which you invoked AXIOM or the one you set with the )cd system command. The current setting is: Off:CONSOLE <>= <> <> @ \subsection{setOutputOpenMath} <>= setOutputOpenMath arg == arg = "%initialize%" => $openMathOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $openMathOutputFile := '"CONSOLE" $openMathFormat := NIL arg = "%display%" => if $openMathFormat then label := '"On:" else label := '"Off:" STRCONC(label,$openMathOutputFile) (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetOutputOpenMath() -- try to figure out what the argument is if arg is [fn] and fn in '(Y N YE YES NO O ON OF OFF CONSOLE y n ye yes no o on of off console) then 'ok else arg := [fn,'som] arg is [fn] => UPCASE(fn) in '(Y N YE O OF) => sayKeyedMsg("S2IV0002",'(OpenMath openmath)) UPCASE(fn) in '(NO OFF) => $openMathFormat := NIL UPCASE(fn) in '(YES ON) => $openMathFormat := true UPCASE(fn) = 'CONSOLE => SHUT $openMathOutputStream $openMathOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $openMathOutputFile := '"CONSOLE" (arg is [fn,ft]) or (arg is [fn,ft,fm]) => -- aha, a file if (ptype := pathnameType fn) then fn := STRCONC(pathnameDirectory fn,pathnameName fn) ft := ptype if null fm then fm := 'A filename := $FILEP(fn,ft,fm) null filename => sayKeyedMsg("S2IV0003",[fn,ft,fm]) (testStream := MAKE_-OUTSTREAM(filename,255,0)) => SHUT $openMathOutputStream $openMathOutputStream := testStream $openMathOutputFile := object2String filename sayKeyedMsg("S2IV0004",['"OpenMath",$openMathOutputFile]) sayKeyedMsg("S2IV0003",[fn,ft,fm]) sayKeyedMsg("S2IV0005",NIL) describeSetOutputOpenMath() @ \subsection{describeSetOutputOpenMath} <>= describeSetOutputOpenMath() == sayBrightly LIST ('%b,'")set output openmath",'%d,_ '"is used to tell AXIOM to turn OpenMath output",'%l,_ '"printing on and off, and where to place the output. By default, the",'%l,_ '"destination for the output is the screen but printing is turned off.",'%l,_ '%l,_ '"Syntax: )set output openmath ",'%l,_ '" where arg can be one of",'%l,_ '" on turn OpenMath printing on",'%l,_ '" off turn OpenMath printing off (default state)",'%l,_ '" console send OpenMath output to screen (default state)",'%l,_ '" fp<.fe> send OpenMath output to file with file prefix fp and file",'%l,_ '" extension .fe. If not given, .fe defaults to .som.",'%l, '%l,_ '"If you wish to send the output to a file, you must issue this command",'%l,_ '"twice: once with",'%b,'"on",'%d,'"and once with the file name. For example, to send",'%l,_ '"OpenMath output to the file",'%b,'"polymer.som,",'%d,'"issue the two commands",'%l,_ '%l,_ '" )set output openmath on",'%l,_ '" )set output openmath polymer",'%l,_ '%l,_ '"The output is placed in the directory from which you invoked AXIOM or",'%l,_ '"the one you set with the )cd system command.",'%l,_ '"The current setting is: ",'%b,setOutputOpenMath "%display%",'%d) @ \section{output script} See the subsection output script in setvart.boot.pamphlet\cite{1} \begin{verbatim} ---------------------- The script Option ---------------------- Description: display output in SCRIPT formula format )set output script is used to tell AXIOM to turn IBM Script formula-style output printing on and off, and where to place the output. By default, the destination for the output is the screen but printing is turned off. Syntax: )set output script where arg can be one of on turn IBM Script formula printing on off turn IBM Script formula printing off (default state) console send IBM Script formula output to screen (default state) fp<.fe> send IBM Script formula output to file with file prefix fp and file extension .fe. If not given, .fe defaults to .sform. If you wish to send the output to a file, you must issue this command twice: once with on and once with the file name. For example, to send IBM Script formula output to the file polymer.sform, issue the two commands )set output script on )set output script polymer The output is placed in the directory from which you invoked AXIOM or the one you set with the )cd system command. The current setting is: Off:CONSOLE \end{verbatim} <>= <> <> @ \subsection{setOutputFormula} <>= setOutputFormula arg == arg = "%initialize%" => $formulaOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $formulaOutputFile := '"CONSOLE" $formulaFormat := NIL arg = "%display%" => if $formulaFormat then label := '"On:" else label := '"Off:" STRCONC(label,$formulaOutputFile) (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetOutputFormula() -- try to figure out what the argument is if arg is [fn] and fn in '(Y N YE YES NO O ON OF OFF CONSOLE y n ye yes no o on of off console) then 'ok else arg := [fn,'sform] arg is [fn] => UPCASE(fn) in '(Y N YE O OF) => sayKeyedMsg("S2IV0002",'(script script)) UPCASE(fn) in '(NO OFF) => $formulaFormat := NIL UPCASE(fn) in '(YES ON) => $formulaFormat := true UPCASE(fn) = 'CONSOLE => SHUT $formulaOutputStream $formulaOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $formulaOutputFile := '"CONSOLE" (arg is [fn,ft]) or (arg is [fn,ft,fm]) => -- aha, a file if (ptype := pathnameType fn) then fn := STRCONC(pathnameDirectory fn,pathnameName fn) ft := ptype if null fm then fm := 'A filename := $FILEP(fn,ft,fm) null filename => sayKeyedMsg("S2IV0003",[fn,ft,fm]) (testStream := MAKE_-OUTSTREAM(filename,255,0)) => SHUT $formulaOutputStream $formulaOutputStream := testStream $formulaOutputFile := object2String filename sayKeyedMsg("S2IV0004",['"IBM Script formula",$formulaOutputFile]) sayKeyedMsg("S2IV0003",[fn,ft,fm]) sayKeyedMsg("S2IV0005",NIL) describeSetOutputFormula() @ \subsection{describeSetOutputFormula} <>= describeSetOutputFormula() == sayBrightly LIST ('%b,'")set output script",'%d,_ '"is used to tell AXIOM to turn IBM Script formula-style",'%l,_ '"output printing on and off, and where to place the output. By default, the",'%l,_ '"destination for the output is the screen but printing is turned off.",'%l,_ '%l,_ '"Syntax: )set output script ",'%l,_ '" where arg can be one of",'%l,_ '" on turn IBM Script formula printing on",'%l,_ '" off turn IBM Script formula printing off (default state)",'%l,_ '" console send IBM Script formula output to screen (default state)",'%l,_ '" fp<.fe> send IBM Script formula output to file with file prefix fp",'%l,_ '" and file extension .fe. If not given, .fe defaults to .sform.",'%l, '%l,_ '"If you wish to send the output to a file, you must issue this command",'%l,_ '"twice: once with",'%b,'"on",'%d,'"and once with the file name. For example, to send",'%l,_ '"IBM Script formula output to the file",'%b,'"polymer.sform,",'%d,'"issue the two commands",'%l,_ '%l,_ '" )set output script on",'%l,_ '" )set output script polymer",'%l,_ '%l,_ '"The output is placed in the directory from which you invoked AXIOM or",'%l,_ '"the one you set with the )cd system command.",'%l,_ '"The current setting is: ",'%b,setOutputFormula "%display%",'%d) @ \section{output tex} See the section tex in setvart.boot.pamphlet\cite{1} \begin{verbatim} ----------------------- The tex Option ------------------------ Description: create output in TeX style )set output tex is used to tell AXIOM to turn TeX-style output printing on and off, and where to place the output. By default, the destination for the output is the screen but printing is turned off. Syntax: )set output tex where arg can be one of on turn TeX printing on off turn TeX printing off (default state) console send TeX output to screen (default state) fp<.fe> send TeX output to file with file prefix fp and file extension .fe. If not given, .fe defaults to .stex. If you wish to send the output to a file, you must issue this command twice: once with on and once with the file name. For example, to send TeX output to the file polymer.stex, issue the two commands )set output tex on )set output tex polymer The output is placed in the directory from which you invoked AXIOM or the one you set with the )cd system command. The current setting is: Off:CONSOLE \end{verbatim} <>= <> <> @ \subsection{setOutputTex} <>= setOutputTex arg == arg = "%initialize%" => $texOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $texOutputFile := '"CONSOLE" $texFormat := NIL arg = "%display%" => if $texFormat then label := '"On:" else label := '"Off:" STRCONC(label,$texOutputFile) (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetOutputTex() -- try to figure out what the argument is if arg is [fn] and fn in '(Y N YE YES NO O ON OF OFF CONSOLE y n ye yes no o on of off console) then 'ok else arg := [fn,'stex] arg is [fn] => UPCASE(fn) in '(Y N YE O OF) => sayKeyedMsg("S2IV0002",'(TeX tex)) UPCASE(fn) in '(NO OFF) => $texFormat := NIL UPCASE(fn) in '(YES ON) => $texFormat := true UPCASE(fn) = 'CONSOLE => SHUT $texOutputStream $texOutputStream := DEFIOSTREAM('((MODE . OUTPUT) (DEVICE . CONSOLE)),255,0) $texOutputFile := '"CONSOLE" (arg is [fn,ft]) or (arg is [fn,ft,fm]) => -- aha, a file if (ptype := pathnameType fn) then fn := STRCONC(pathnameDirectory fn,pathnameName fn) ft := ptype if null fm then fm := 'A filename := $FILEP(fn,ft,fm) null filename => sayKeyedMsg("S2IV0003",[fn,ft,fm]) (testStream := MAKE_-OUTSTREAM(filename,255,0)) => SHUT $texOutputStream $texOutputStream := testStream $texOutputFile := object2String filename sayKeyedMsg("S2IV0004",['"TeX",$texOutputFile]) sayKeyedMsg("S2IV0003",[fn,ft,fm]) sayKeyedMsg("S2IV0005",NIL) describeSetOutputTex() @ \subsection{describeSetOutputTex} <>= describeSetOutputTex() == sayBrightly LIST ('%b,'")set output tex",'%d,_ '"is used to tell AXIOM to turn TeX-style output",'%l,_ '"printing on and off, and where to place the output. By default, the",'%l,_ '"destination for the output is the screen but printing is turned off.",'%l,_ '%l,_ '"Syntax: )set output tex ",'%l,_ '" where arg can be one of",'%l,_ '" on turn TeX printing on",'%l,_ '" off turn TeX printing off (default state)",'%l,_ '" console send TeX output to screen (default state)",'%l,_ '" fp<.fe> send TeX output to file with file prefix fp and file",'%l,_ '" extension .fe. If not given, .fe defaults to .stex.",'%l, '%l,_ '"If you wish to send the output to a file, you must issue this command",'%l,_ '"twice: once with",'%b,'"on",'%d,'"and once with the file name. For example, to send",'%l,_ '"TeX output to the file",'%b,'"polymer.stex,",'%d,'"issue the two commands",'%l,_ '%l,_ '" )set output tex on",'%l,_ '" )set output tex polymer",'%l,_ '%l,_ '"The output is placed in the directory from which you invoked AXIOM or",'%l,_ '"the one you set with the )cd system command.",'%l,_ '"The current setting is: ",'%b,setOutputTex "%display%",'%d) @ \section{streams calculate} See the section streams in setvart.boot.pamphlet\cite{1} \begin{verbatim} Current Values of streams Variables Variable Description Current Value ----------------------------------------------------------------- calculate specify number of elements to calculate 10 showall display all stream elements computed off \end{verbatim} <>= <> <> @ \subsection{setStreamsCalculate} <>= setStreamsCalculate arg == arg = "%initialize%" => $streamCount := 10 arg = "%display%" => object2String $streamCount (null arg) or (arg = "%describe%") or (first arg = '_?) => describeSetStreamsCalculate() n := first arg (n ^= 'all) and ((not FIXP n) or (n < 0)) => sayMessage ['"Your value of",:bright n,'"is invalid because ..."] describeSetStreamsCalculate() terminateSystemCommand() $streamCount := n @ \subsection{describeSetStreamsCalculate} <>= describeSetStreamsCalculate() == sayKeyedMsg("S2IV0001",[$streamCount]) @ \section{License} <>= -- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions are -- met: -- -- - Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- - Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in -- the documentation and/or other materials provided with the -- distribution. -- -- - Neither the name of The Numerical ALgorithms Group Ltd. nor the -- names of its contributors may be used to endorse or promote products -- derived from this software without specific prior written permission. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @ <<*>>= <> )package "BOOT" <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> @ \eject \begin{thebibliography}{99} \bibitem{1} setvart.boot.pamphlet \end{thebibliography} \end{document}