I took the s7 code because I love the presentation page (light style, good content) and the binding of C language. It is in the hope to write my shell (as bash, zsh, ...) with the Scheme language. It is an early version which can break the original code.
The big work is a REPL
version with a full configuration thanks to files or command line options. Because I am not Windows friendly, all the work is done on Linux and (later) BSD systems. Here is what is working.
There is a Makefile
for the GNU version of make
(gmake
on BSD systems). The targets are the following:
all
: compilerepl-s7
,clean
: delete all the compilation products,install
: install all that stuff in/usr/local
(or elsewhere after editing thePREFIX
variable), not implemented today,full-clean
: call theclean
target and remove all object files and dynamic libraries created by runningrepl-s7
,test
andtest-load
are deprecated tests.
mid October 2019 : There is only one configuration file, ~/.shs7.scm
, which must be filled by the user. It is loaded only in interactive mode (see modes below). There is one sample in the s7
directory.
The first flag to know is -h
which show this help and exits:
repl-s7 [-h|-v|-qb] [-L dir-lib] [files ...]
-h: show this text and exits
-v: show VERSION and exits
-q: quiet, suppress some messages
-b: batch, executes files and quit, implies -q
-L dir-lib: add dir-lib to *load-path*
The second one is -v
which shows the version:
repl-s7 VERSION v0.0.2 (Oct 15 2019 - 16:09:08)
repl-s7
runs in two modes:
- interactive, where you can enter Scheme code at the prompt,
- batch, in which the files of the command line are executed and the interpreter quits at the end of the execution of all files.
Without arguments, repl-s7
loads some libraries, the configuration file(s)and start in interactive mode:
$ ./repl-s7
repl-s7 VERSION v0.0.2 (Oct 15 2019 - 16:09:08)
<1>
You can add some files:
$ ./repl-s7 more-tests/fact.scm
loading more-tests/fact.scm...
repl-s7 VERSION v0.0.2 (Oct 15 2019 - 16:09:08)
<1> (load "more-tests/show-facts.scm")
error: require: no autoload info for fact.scm
<2> (autoload 'fact.scm "fact.scm")
"fact.scm"
<3> (load "more-tests/show-facts.scm")
15! = 1307674368000
14! = 87178291200
13! = 6227020800
...
2! = 2
1! = 1
#<unspecified>
<4>
You can add some library path with one or more -L dirname
options.