84 lines
3.5 KiB
Plaintext
84 lines
3.5 KiB
Plaintext
The current scsh release is structured as follows.
|
|
|
|
Scsh is packaged up inside a standard S48 file tree.
|
|
The main directory contains a copy of Scheme 48 0.36.
|
|
However... we've made a few small mods to this copy of
|
|
0.36, so do not try to compile scsh with an off-the-shelf
|
|
0.39 or a newer release just yet.
|
|
|
|
In order for scsh's ports to be handled correctly by GC,
|
|
we have installed a call-out in the 0.36 vm's gc code that
|
|
is activated after every gc (it's post_gc_fdports()). This
|
|
means that you *must* use our 0.36 vm. There is machinery
|
|
in the latest releases of S48 that makes this hackery unnecessary,
|
|
so we intend to drop this constraint in the future.
|
|
|
|
For this reason, the scsh vm is called "scshvm" not scheme48vm,
|
|
since it is not quite the same thing.
|
|
|
|
* S48
|
|
We intend to port scsh to the current release of S48. The
|
|
major difficulty here is that S48 now has threads and all
|
|
i/o is non-blocking. This greatly complicates the Unix services
|
|
scsh provides, since the details of the Unix system architecture do
|
|
not get along well with threads. We'll have to completely rewrite our i/o
|
|
subsystem, for example. For now, we use 0.36.
|
|
|
|
* DOC
|
|
The doc/ directory contains the scsh manual and a paper about scsh.
|
|
The paper is also available as MIT LCS and University of Hong Kong
|
|
tech reports; a revised version is due to appear in *Lisp and Symbolic
|
|
Computation*.
|
|
|
|
* CIG
|
|
Scsh uses a lot of foreign-function calls to interface to the Unix
|
|
system calls and other support routines. It uses a package called "cig"
|
|
(C Interface Generator) to do this. The code for cig lives in the
|
|
cig/ subdirectory. Cig is a system that processes a .scm file containing
|
|
(DEFINE-FOREIGN ...) forms, producing a C file of stub interfaces. The
|
|
C code manages the handoff to the C routine you were calling, converting
|
|
between Scheme and C representations, handling argument passing protocols,
|
|
nary function conventions, multiple-value return protocols, and so forth.
|
|
The C stub file is then compiled and linked in with the S48 vm (statically
|
|
or dynamically), and away you go.
|
|
|
|
There is a draft manual for cig in cig/doc, but be warned that it is
|
|
incomplete and out of date.
|
|
|
|
Although scsh uses cig-generated C stub files, we ship the source tree
|
|
with these files already generated, so you should not have to process
|
|
Scheme code with cig to make scsh unless you go and change the
|
|
DEFINE-FOREIGN forms in the scsh source.
|
|
|
|
* SCSH
|
|
The source for scsh proper lives in the scsh/ directory. This directory
|
|
contains
|
|
- the system-independent code
|
|
|
|
- the regexp/ subdirectory, containing Henry Spencer's regexp pattern
|
|
matching library.
|
|
|
|
- A subdirectory for each type of system supported by scsh,
|
|
e.g. sparc-sunos/, i386-linux/, hppa-hpux/, and so forth.
|
|
These directories contain system-dependent code, such as
|
|
definitions of the actual numeric values of the Unix errno codes
|
|
(errno.h), operations that extend the stdio library, and so forth.
|
|
|
|
- A symlink to one of the system-specific subdirectories.
|
|
This symlink is made when the top-level configure decides the system
|
|
for which we are building scsh. For example, if we are building scsh for
|
|
Sparcstations, then the scsh directory has the following symlink:
|
|
machine -> sparc-sunos/
|
|
The machine dependant files are:
|
|
errno.scm
|
|
fdflags.scm
|
|
load-scsh.scm
|
|
packages.scm
|
|
signals.scm
|
|
stdio_dep.c
|
|
|
|
The source code follows a convention that if a file foo.scm contains
|
|
some DEFINE-FOREIGN forms, then the stub C file produced by cig is
|
|
called foo.c, and any related support C code written by a human goes
|
|
in foo1.c.
|