4 Items that can appear in lispsystem!*
There is a global variable called lispsystem!* whose value is reset in the process
of CSL starting up. An effect of this is that if the user changes its value those
changes do not survice a preserving and re-loading a heap image: this is
deliberate since the heap image may be re-loaded on a different instance of CSL
possibly on a quite different computer of with a different configuration. The value
of lispsystem!* is a list of items, where each item is either an atomic tag of
a pair whose first component is a key. In general it would be unwise
to rely on exactly what information is present without review of the
code that sets it up. The information may be of interest to anybody but
some tags and keys are reflections of experiments rather than fully stable
(c!-code . count)
- This will be present if code has been optimised into
C through the source files u01.c to u60.c, and in that case the value
tells you how many functions have been optimised in this manner.
- For a project some while ago a limited Common Lisp
compatibility mode was being developed, and this tag indicated that
it was active. In that case all entries are in upper case and the variable
is called *FEATURES* rather than lispsystem!*. But note that this
Lisp has never even aspired to be a full Common Lisp, since its author
considers Common Lisp to have been a sad mistake that must bear
significant responsibility for the fact that interest in Lisp has faded
dramatically since its introduction.
(compiler!-command . command)
- The value associated with this key is a
string that was used to compile the files of C code making up CSL.
It should contain directives to set up search paths and predefined
symbols. It is intended to be used in an experiment that generates
C code synamically, uses a command based on this string to compile
it and then dynamically links the resulting code in with the running
- A simple tag intended to indicate that this Lisp system is CSL and
not any other. This can of course only work properly if all other Lisp
systems agree not to set this tag! In the context of Reduce I note that
the PSL Lisp system sets a tag psl on lispsystem!* and the realistic
use of this is to discriminate between CSL and PSL hosted copies of
- If CSL was compiled with debugging options this is present, and one
can imagine various bits of code being more cautious or more verbose
if it is detected.
(executable . name)
- The value is the fully rooted name of the executable
file that was launched.
- Used to be present if the FOX GUI toolkit was detected and
incorporated as part of CSL, but now probably never used!
(linker . type)
- Intended for use in association
with compiler!-command, the value is win32 on Windows, x86_64 on
64-bit Linux and other things on other systems, as detected using the
(name . name)
- Some indication of the platform. For instance on one
system I use it is linux-gnu:x86_64 and on anther it is just win32.
(native . tag)
- One of the many experiments within CSL that were active
at one stage but are not current involved compilation directly into
machine code. The strong desire to ensure that image files coudl be
used on a cross-platform basis led to saved compiled code being tagged
with a numeric “native code tag”, and this key/value pair identified
the value to be used on the current machine.
(opsys . operating-system)
- Some crude indication of the host
operating system identity
- The name of the current operating system is
put on the list. Exactly what form is not explicitly defined!
- In the earlier days of CSL there were computers where pipes were
not supported, so this tag notes when they are present and hance the
facility to create sub-tasks through them can be used.
- An an extension to the CSL profiling scheme it it possible
to compile a special version that tracks and counts each use of
property-list access functions. This can be useful because there are
ways to give special treatment to a small number of flags and a small
number of properties. The special-case flage end up stored as a bitmap
in the symbol-header so avoid need for property-list searching. But of
course recording this extra information slows things down. This tag
notes when the slow version is in use. It might be used to trigger a
display of statistics at the end of a calculation.
- This is intended to report if the initial heap image is for Reduce
rather than merely for Lisp.
(shortname . name)
- Gives the short name of the current executable,
without its full path.
- If the “showmath” capability has been compiled into CSL this
will be present so that Lisp code can know it is reasonable to try to
- This marks the fact that this version of CSL will support
the output style where flat simple text preceeds TeX output, with a
U+0003 (end of text) marker to separate.
- Present if the Lisp was compiled for a 64-bit computer.
- Present if a cursor-addressable console was detected.
- Present if the system was launched with the --texmacs flag. The
intent is that this should only be done when it has been launched with
texmacs as a front-end.
(version . ver)
- The CSL version number.
- Any windows system puts win32 in lispsystem!*. If 64-bit
windows is is use then win64 is also included
- Present if CSL is running in its own window rather than in
Services provided by