aboutsummaryrefslogtreecommitdiff
path: root/src/interp/setvars.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/setvars.boot')
-rw-r--r--src/interp/setvars.boot1585
1 files changed, 1585 insertions, 0 deletions
diff --git a/src/interp/setvars.boot b/src/interp/setvars.boot
new file mode 100644
index 00000000..b40f4c65
--- /dev/null
+++ b/src/interp/setvars.boot
@@ -0,0 +1,1585 @@
+-- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+-- All rights reserved.
+-- Copyright (C) 2007, Gabriel Dos Reis.
+-- 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.
+
+
+
+-- Conventions:
+
+-- * when called with argument "%initialize", a function will set the
+-- appropriate variables to their default states.
+
+-- * when called with argument "%display%", a function will return a
+-- current state information suitable for sayBrightly
+
+-- * when called with argument "%describe%", a function will print a
+-- description of itself and any conditions it imposes.
+
+-- * otherwise, a function may interpret its arguments as it sees appropriate.
+
+-- Also by convention each top level function named in the FUNCTION
+-- slot (see the data structure in setvart.boot) has an
+-- associated describe function. Thus, for example,
+-- setOutputFortran is accompanied by function to describe
+-- its arguments, such as describeSetOutputFortran.
+
+
+)package "BOOT"
+
+-- The `set' function in this file handles the top level `)set'
+-- command line functions.
+
+
+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)
+
+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($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)
+
+
+translateYesNo2TrueFalse x ==
+ x in '(yes on) => true
+ x in '(no off) => false
+ x
+
+
+translateTrueFalse2YesNo x ==
+ x = true => 'on
+ x = false => 'off
+ x
+
+
+set l == set1(l, $setOptions)
+
+
+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
+
+
+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."]
+
+
+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",'"."]
+
+
+-- See the section compiler in setvart.boot.
+--
+-- 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
+
+
+
+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)
+
+
+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)
+
+
+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
+
+
+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)
+
+
+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."
+ )
+
+
+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."
+ )
+
+
+-- See the section expose in setvart.boot
+-- ---------------------- 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.
+
+
+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
+
+
+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
+
+
+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()
+
+
+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])
+
+
+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
+
+
+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])
+
+
+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])
+
+-- See the section calling in servart.boot
+
+-- 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
+
+
+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
+
+
+validateOutputDirectory x ==
+ AND(PATHNAME_-DIRECTORY(PROBE_-FILE(CAR(x))), NOT PATHNAME_-NAME (PROBE_-FILE(CAR(x)))) =>
+ CAR(x)
+ NIL
+
+
+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)
+
+
+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
+
+
+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)
+
+
+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()
+
+
+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)
+
+-- See the section functions in setvart.boot
+--
+-- 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
+
+
+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
+
+
+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)
+
+
+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")
+
+
+sayAllCacheCounts () ==
+ sayCacheCount(nil,$cacheCount)
+ $cacheAlist =>
+ TERPRI()
+-- SAY '" However,"
+ for [x,:n] in $cacheAlist | n ^= $cacheCount repeat sayCacheCount(x,n)
+
+
+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]
+
+-- See the section history in setvart.boot
+-- --------------------- 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.
+
+
+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
+
+--
+-- See the section kernel in setvart.boot
+-- \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
+
+--
+
+
+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")
+
+
+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
+
+
+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")
+
+
+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
+
+--
+-- See the section naglink in setvart.boot
+-- \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
+
+--
+
+
+setNagHost arg ==
+ arg = "%initialize%" =>
+ $nagHost := '"localhost"
+ arg = "%display%" =>
+ object2String $nagHost
+ (null arg) or (arg = "%describe%") or (first arg = '_?) =>
+ describeSetNagHost()
+ $nagHost := object2String arg
+
+
+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)
+
+
+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)
+
+
+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)
+
+-- See the subsection output algebra in setvart.boot
+--
+-- --------------------- 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 <arg>
+-- 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
+--
+
+
+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()
+
+
+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 <arg>",'%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)
+
+
+-- See the subsection output characters in setvart.boot
+--
+-- -------------------- 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 \
+--
+
+
+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
+
+-- See the subsection output fortran in setvart.boot
+--
+-- --------------------- 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 <arg>
+-- 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
+--
+
+
+makeStream(append,filename,i,j) ==
+ append => MAKE_-APPENDSTREAM(filename,i,j)
+ MAKE_-OUTSTREAM(filename,i,j)
+
+
+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()
+
+
+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 <arg>",'%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)
+
+
+-- See the subsection output openmath in setvart.boot
+--
+-- ------------------ 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 <arg>
+-- 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
+
+
+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()
+
+
+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 <arg>",'%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)
+
+-- See the subsection output script in setvart.boot
+--
+-- ---------------------- 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 <arg>
+-- 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
+--
+
+
+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()
+
+
+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 <arg>",'%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)
+
+
+-- See the section tex in setvart.boot
+--
+-- ----------------------- 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 <arg>
+-- 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
+--
+
+
+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()
+
+
+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 <arg>",'%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)
+
+-- See the section streams in setvart.boot
+-- Current Values of streams Variables
+
+-- Variable Description Current Value
+-- -----------------------------------------------------------------
+-- calculate specify number of elements to calculate 10
+-- showall display all stream elements computed off
+
+
+
+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
+
+describeSetStreamsCalculate() == sayKeyedMsg("S2IV0001",[$streamCount])
+