534 lines
18 KiB
Plaintext
534 lines
18 KiB
Plaintext
This directory contains the distribution of scm4e2. Scm conforms to
|
|
Revised^4 Report on the Algorithmic Language Scheme and the IEEE P1178
|
|
specification. Scm runs under VMS, MS-DOS, OS2, MacOS, Amiga,
|
|
Atari-ST, NOS/VE, Unix and similar systems.
|
|
|
|
The author can be reached at jaffer@ai.mit.edu or
|
|
Aubrey Jaffer, 84 Pleasant St., Wakefield MA 01880.
|
|
|
|
MANIFEST
|
|
|
|
`README' is this file. It contains a MANIFEST, INSTALLATION
|
|
INSTRUCTIONS, hints for EDITING SCHEME CODE, and a TROUBLE
|
|
SHOOTING GUIDE.
|
|
`COPYING' details the LACK OF WARRANTY for scm and the conditions
|
|
for distributing scm.
|
|
`scm.1' is the unix style man page in nroff format.
|
|
`scm.doc' is the text man page generated from scm.1.
|
|
`QUICKREF' is a Quick Reference card for IEEE and R4RS.
|
|
`MANUAL' details feature support and enhancements to Scheme and
|
|
contains a SCHEME BIBLIOGRAPHY.
|
|
`ChangeLog' documents changes to the scm.
|
|
`code.doc' describes the internal representations and algorithms.
|
|
Also describes how to modify scm.
|
|
|
|
`test.scm' is Scheme code which tests conformance with Scheme
|
|
specifications.
|
|
`example.scm' is Scheme code from Revised^4 Report on the
|
|
Algorithmic Language Scheme which uses inexact numbers.
|
|
`pi.scm' is Scheme code for computing digits of pi [type (pi 100 5)]
|
|
which can be used to test the performance of scm against
|
|
compiled C code [cc -o pi pi.c;time pi 100 5].
|
|
`pi.c' is C code for computing digits of pi.
|
|
|
|
`makefile.unix' is for building scm using the `make'program.
|
|
`makefile.msc' is for building scm on IBM PC using Microsoft C.
|
|
`makefile.qc' is for building scm on IBM PC using Microsoft QuickC.
|
|
`makefile.bor' is for building scm on IBM PC using Borland C.
|
|
`makefile.tur' is for building scm on IBM PC using Turbo C.
|
|
`makefile.wcc' is for building scm on IBM PC using Watcom C.
|
|
`makefile.djg' is for building scm on i386 IBM PC using DJGPP
|
|
(Gnu CC ported to MSDOS).
|
|
`makefile.emx' is for building scm on i386 IBM PC using EMX port
|
|
of Gnu CC to OS/2.
|
|
`makefile.ast' is for building scm on a ATARI-ST using Gnu CC.
|
|
`makefile.prj' is the project file for scm on a ATARI-ST using Turbo C.
|
|
`makefile.aztec' is for building scm on AMIGA using
|
|
Aztec C 5.2a.
|
|
`makefile.acorn' is for building scm on an Acorn Achimedes using Huw
|
|
Rogers free unix function call library.
|
|
`dmakefile' is for building scm on AMIGA using DICE C.
|
|
`compile.amiga' is for compiling scm on AMIGA.
|
|
`link.amiga' is for linking scm on AMIGA.
|
|
`VMSBUILD.COM' is the command file for building scm on a VMS
|
|
machine.
|
|
`VMSGCC.COM' is the command file for building scm using GCC on a
|
|
VMS machine.
|
|
`setjump.mar' provides setjmp and longjmp which do not use $unwind
|
|
utility on VMS.
|
|
`setjump.s' provides setjmp and longjmp for the Cray YMP.
|
|
|
|
`Init.scm' is Scheme initialization code.
|
|
`Transcen.scm' has Scheme code for inexact builtin procedures.
|
|
`Link.scm' has Scheme code for compiling and dynamic linking.
|
|
`scmfig.h' is a C include file containing system dependent definitions.
|
|
`patchlvl.h is the patchlevel of this release.
|
|
`setjump.h' is an include file dealing with continuations, stacks,
|
|
and memory allocation.
|
|
`scm.h' has the data type and external definitions of scm.
|
|
|
|
`scm.c' has the top level and interrupt code.
|
|
`time.c' has functions dealing with time.
|
|
`repl.c' has error, read-eval-print loop, read, write and load code.
|
|
`scl.c' has the code for utility functions which are not part of the
|
|
IEEE Scheme spec or which are required for non-integer
|
|
arithmetic.
|
|
`eval.c' has the evaluator, apply, map, and foreach.
|
|
`sys.c' has the code for call-with-current-continuation, opening and
|
|
closing files, storage allocation and garbage collection.
|
|
`subr.c' has all the rest of functions.
|
|
`sc2.c' has code for procedures from R2RS and R3RS not in R4RS.
|
|
`dynl.c' has c code for dynamically loading object files.
|
|
`unif.c' has code for uniform vectors.
|
|
`rgx.c' has code for string regular expression match.
|
|
`crs.c' has code for interactive terminal control.
|
|
`split.scm' sets up CURSCM (SCM with crs.c) so that input, output,
|
|
and diagnostic output are each directed to separate windows.
|
|
|
|
SLIB
|
|
|
|
Although SLIB is not neccessary to run SCM, I strongly suggest you
|
|
obtain and install it. Bug reports about running SCM without SLIB
|
|
have very low priority. SLIB is available from the same sites as SCM:
|
|
altdorf.ai.mit.edu:archive/scm/slib2a2.tar.gz
|
|
prep.ai.mit.edu:pub/gnu/jacal/slib2a2.tar.gz
|
|
ftp.maths.tcd.ie:pub/bosullvn/jacal/slib2a2.tar.gz
|
|
ftp.cs.indiana.edu:/pub/scheme-repository/imp/slib2a2.tar.gz
|
|
|
|
INSTALLATION INSTRUCTIONS
|
|
|
|
These #defines should be checked before compilation. Those with
|
|
entries in the scmfig.h column can be defined either in the Makefile
|
|
or scmfig.h. See scmfig.h for more information.
|
|
|
|
Makefile scmfig.h note
|
|
-------- -------- --------
|
|
bindir directory where `make install' will put the
|
|
executable. Unix only.
|
|
man1dir directory where `make install' will put the
|
|
unix style manual page. Unix only.
|
|
|
|
-DIMPLINIT IMPLINIT directory and pathname where Init.scm will
|
|
reside.
|
|
-DFLOATS FLOATS support for inexact numerical types. On unix
|
|
systems, FLOATS is automatically handled by
|
|
makefile.unix.
|
|
-DENGNOT ENGNOT for engineering notation instead of scientific
|
|
notation.
|
|
-DSUN_DL SUN_DL configures code in "dynl.c" to dynamic link
|
|
using the SUN dynamic linking library "dl".
|
|
-DDLD DLD configures code in "dynl.c" to dynamic link
|
|
using the "dld" library. You will need to get
|
|
the DLD libaray (see below).
|
|
|
|
Notes about dynamic linking:
|
|
|
|
Dynamic linking has not been ported to all platforms.
|
|
Operating systems in the BSD family (a.out binary format) can usually
|
|
be ported to DLD. The "dl" library (SUN_DL above) was a proposed
|
|
POSIX standard and may be available on other machines with COFF binary
|
|
format. There are notes about porting to MSWindows and finishing the
|
|
port to VMS in scm/code.doc. The HP-UX port is complete but doesn't
|
|
work on the machine available to me; shl_findsym doesn't.
|
|
|
|
DLD is a library package of C functions that performs "dynamic link
|
|
editing" on Linux, VAX (Ultrix), Sun 3 (SunOS 3.4 and 4.0),
|
|
SPARCstation (SunOS 4.0), Sequent Symmetry (Dynix), and Atari ST. It
|
|
is available from:
|
|
altdorf.ai.mit.edu:archive/scm/dld-3.2.4.src.tar.gz
|
|
prep.ai.mit.edu:/pub/gnu/jacal/dld-3.2.4.src.tar.gz
|
|
ftp.cs.indiana.edu:/pub/scheme-repository/imp/scm-support/dld-3.2.4.src.tar.gz
|
|
tsx-11.mit.edu:/pub/linux/sources/libs/dld-src-3.2.4.tar.gz
|
|
tsx-11.mit.edu:/pub/linux/binaries/libs/dld-bin-3.2.4.tar.gz (binaries)
|
|
|
|
These notes about using libdl on SunOS are from gcc.info:
|
|
|
|
On a Sun, linking using GNU CC fails to find a shared library and
|
|
reports that the library doesn't exist at all.
|
|
|
|
This happens if you are using the GNU linker, because it does only
|
|
static linking and looks only for unshared libraries. If you have
|
|
a shared library with no unshared counterpart, the GNU linker
|
|
won't find anything.
|
|
|
|
We hope to make a linker which supports Sun shared libraries, but
|
|
please don't ask when it will be finished--we don't know.
|
|
|
|
Sun forgot to include a static version of `libdl.a' with some
|
|
versions of SunOS (mainly 4.1). This results in undefined symbols
|
|
when linking static binaries (that is, if you use `-static'). If
|
|
you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
|
|
linking, compile and link against the file `mit/util/misc/dlsym.c'
|
|
from the MIT version of X windows.
|
|
|
|
Automatic Processor Defines:
|
|
|
|
These #defines are automatically generated by various preprocessors.
|
|
Scm uses them to find include files and the proper names for system
|
|
functions. If a define for your system type is missing on your
|
|
system, put -Dflag in the Makefile or #define flag in scmfig.h.
|
|
|
|
define note
|
|
------ --------
|
|
AZTEC_C Aztec_C 5.2a
|
|
_DCC Dice C on AMIGA
|
|
__GNUC__ Gnu CC (and DJGPP)
|
|
__EMX__ Gnu C port (gcc/emx 0.8e) to OS/2 2.0
|
|
MWC Mark Williams C on COHERENT
|
|
_QC Microsoft QuickC
|
|
__STDC__ ANSI C compliant
|
|
__TURBOC__ Turbo C and Borland C
|
|
__WATCOMC__ Watcom C on MSDOS
|
|
__ZTC__ Zortech C
|
|
|
|
_AIX AIX operating system
|
|
AMIGA SAS/C 5.10 on AMIGA
|
|
atarist ATARI-ST under Gnu CC
|
|
GNUDOS DJGPP (obsolete in version 1.08)
|
|
__GO32__ DJGPP (future?)
|
|
hpux HP-UX
|
|
linux Linux
|
|
MCH_AMIGA Aztec_c 5.2a on AMIGA
|
|
MSDOS Microsoft C 5.10 and 6.00A
|
|
__MSDOS__ Turbo C, Borland C, and DJGPP
|
|
nosve Control Data NOS/VE
|
|
SVR2 System V Revision 2.
|
|
THINK_C developement environment for the Macintosh
|
|
ultrix VAX with ULTRIX operating system.
|
|
unix most Unix and similar systems and DJGPP (!?)
|
|
__unix__ Gnu CC and DJGPP
|
|
_UNICOS Cray operating system
|
|
_Windows Borland C 3.1 compiling for Windows
|
|
vms (and VMS) VAX-11 C under VMS.
|
|
|
|
hp9000s800 HP RISC processor
|
|
__i386__ DJGPP
|
|
i386 DJGPP
|
|
MULTIMAX Encore computer
|
|
pyr Pyramid 9810 processor
|
|
sparc SPARC processor
|
|
sequent Sequent computer
|
|
tahoe CCI Tahoe processor
|
|
|
|
TO COMPILE
|
|
|
|
under UNIX and similar systems:
|
|
From: bos@scrg.cs.tcd.ie
|
|
Build and install scripts using GNU autoconf are available from
|
|
scmconfig.tar.gz in the distribution directories. See README.unix
|
|
in scmconfig.tar.gz for further instructions.
|
|
|
|
Alternatively:
|
|
cp makefile.unix Makefile
|
|
Edit Makefile to change CFLAGS, LIBS, and especially IMPLINIT. If
|
|
you are compiling under HP-UX, see comments in Makefile (fscm.o).
|
|
make scm
|
|
|
|
Once you have built scm (using either method) test it:
|
|
make check
|
|
|
|
under VMS:
|
|
Edit SCMFIG.H to set desired options and IMPLINIT.
|
|
Execute VMSBUILD.COM or VMSGCC.COM (for Gnu C compiler).
|
|
@VMSBUILD
|
|
Test scm
|
|
run scm
|
|
(load "test.scm")
|
|
(test-sc4)
|
|
(test-cont)
|
|
(test-inexact)
|
|
|
|
under MSDOS:
|
|
Copy the appropriate makefile to MAKEFILE:
|
|
MAKEFILE.MSC for Microsoft C,
|
|
MAKEFILE.BOR for Borland C,
|
|
MAKEFILE.TUR for Turbo C,
|
|
MAKEFILE.QC for Quick C, or
|
|
MAKEFILE.DJG for DJGPP (GCC port to i386 MSDOS).
|
|
COPY MAKEFILE.xxx MAKEFILE
|
|
Edit MAKEFILE to set desired options and IMPLINIT.
|
|
MAKE
|
|
Test scm
|
|
SCM (GO32 SCM for DJGPP)
|
|
(load "test.scm")
|
|
(test-sc4)
|
|
(test-cont)
|
|
(test-inexact)
|
|
|
|
under OS/2 2.0
|
|
from: soravi@Athena.MIT.EDU
|
|
use *EMX* port of GNU C/C++ to OS/2 2.0 (ftp from hobbes.nmsu.edu).
|
|
Use makefile.unix. Remove unix specific dir names.
|
|
Remove IMPLINIT from Makefile as pre-processor will not take "" as
|
|
part of "-DIMPLINIT" macro. (this is a bug with *EMX* ver 0.8d)
|
|
Remove the DFLAGS macro.
|
|
Specify all shell variables ie
|
|
SCM_INIT_PATH
|
|
SCHEME_LIBRARY_PATH
|
|
HOME
|
|
prior to running the executable.
|
|
|
|
under Think C 4.0 (or 4.1):
|
|
Edit Scmfig.H to set desired options and IMPLINIT.
|
|
from Yasuaki Honda // honda@csl.SONY.co.jp:
|
|
Make a project and add source files repl.c, time.c, scm.c, subr.c,
|
|
sys.c, eval.c, scl.c, sc2.c, and unif.c to it.
|
|
Add libraries MacTraps, unix, ANSI to the project.
|
|
The project should be segmented in the following way:
|
|
----------
|
|
repl.c
|
|
scm.c
|
|
subr.c
|
|
sys.c
|
|
sc2.c
|
|
unif.c
|
|
time.c
|
|
----------
|
|
MacTraps
|
|
unix
|
|
----------
|
|
ANSI
|
|
----------
|
|
eval.c
|
|
----------
|
|
scl.c
|
|
----------
|
|
Choose 'Set Project Type' from 'Project' menu.
|
|
Choose Application from radio buttons.
|
|
Set Partition size to 600K. (The default 384K is not enough).
|
|
|
|
under Aztec C 5.2a on AMIGA:
|
|
Edit makefile.aztec to set desired options and IMPLINIT.
|
|
make
|
|
|
|
under SAS/C 5.10 on AMIGA:
|
|
Edit compile.amiga to set desired options and IMPLINIT.
|
|
compile.amiga
|
|
|
|
INSTALL
|
|
|
|
under UNIX:
|
|
|
|
Edit Makefile to have appropriate destinations for scm and scm.1,
|
|
bindir and man1dir respectively.
|
|
|
|
make install
|
|
|
|
If IMPLINIT is not correctly defined in Makefile or scmfig.h then
|
|
you will need to define the environment variable SCM_INIT_PATH to be
|
|
the full pathname of Init.scm. In a csh init file (.cshrc) this is
|
|
done by:
|
|
setenv SCM_INIT_PATH /usr/src/scm/Init.scm
|
|
In a .profile file this should be:
|
|
SCM_INIT_PATH=/usr/src/scm/Init.scm; export SCM_INIT_PATH
|
|
|
|
Define the environment variable SCHEME_LIBRARY_PATH to be the full
|
|
pathname of the Scheme Library directory if you have one. In a csh
|
|
init file (.cshrc) this is done by
|
|
setenv SCHEME_LIBRARY_PATH /usr/lib/scheme/
|
|
In a .profile file this should be:
|
|
SCHEME_LIBRARY_PATH=/usr/lib/scheme/; export SCHEME_LIBRARY_PATH
|
|
|
|
under VMS:
|
|
|
|
Put SCM.EXE, INIT.SCM, and COPYING someplace. INIT.SCM and COPYING
|
|
need to be in the same directory. Either put SCM.EXE in a
|
|
SYS$SYSTEM directory or, in your LOGIN.COM file, define the symbol
|
|
SCHEME to be "$" appended to the full pathname of SCM.EXE. For
|
|
example:
|
|
SCHEME == "$DKB100:[AGJ.SCM]SCM.EXE"
|
|
|
|
In your LOGIN.COM file define the environment SCM_INIT_PATH to be
|
|
the full pathname of INIT.SCM. For example:
|
|
DEFINE SCM_INIT_PATH DKB100:[AGJ.SCM]INIT.SCM
|
|
Define SCHEME_LIBRARY_PATH to be the pathname of the Scheme Library
|
|
if you have one. For example:
|
|
DEFINE SCHEME_LIBRARY_PATH DKB100:[AGJ.SLIB]
|
|
|
|
under MSDOS:
|
|
|
|
If you are using DJGPP do:
|
|
STRIP SCM.32
|
|
COPY /B C:\DJGPP\BIN\STUB.EXE+SCM.32 SCM.EXE
|
|
|
|
Put SCM.EXE, INIT.SCM, and COPYING someplace. INIT.SCM and COPYING
|
|
need to be in the same directory. SCM.EXE needs to be in your
|
|
search path.
|
|
|
|
In AUTOEXEC.BAT define the environment variable SCM_INIT_PATH to be
|
|
the full pathname of INIT.SCM. For example:
|
|
SET SCM_INIT_PATH=G:\AGJ\SCM\INIT.SCM
|
|
|
|
In AUTOEXEC.BAT define the environment variable SCHEME_LIBRARY_PATH
|
|
to be the full pathname of the Scheme Library directory if you have
|
|
one. For example:
|
|
SET SCHEME_LIBRARY_PATH=G:\AGJ\SLIB\
|
|
|
|
EDITING SCHEME CODE
|
|
|
|
under Gnu Emacs:
|
|
Editing of Scheme code is supported by emacs. Buffers holding files
|
|
ending in .scm are automatically put into scheme-mode.
|
|
|
|
If your Emacs can run a process in a buffer you can use the Emacs
|
|
command M-x run-scheme with SCM. However, the run-scheme
|
|
(`xscheme.el') which comes included with Gnu Emacs 18 will work only
|
|
with MIT Cscheme. If you are using Emacs 18 get the emacs packages
|
|
`cmuscheme.el' and `comint.el' from the ftp directory
|
|
altdorf.ai.mit.edu:archive/scheme-editor-packages/;
|
|
They are already standard in Emacs 19.
|
|
|
|
If your Emacs can not run a process in a buffer, see "under other
|
|
systems" below.
|
|
|
|
under Epsilon (MSDOS):
|
|
There is lisp (and scheme) mode available by use of the package
|
|
`LISP.E'. It offers several different indentation formats. With
|
|
this package, buffers holding files ending in .L, .LSP, .S, and .SCM
|
|
(my modification) are automatically put into lisp-mode.
|
|
|
|
It is possible to run a process in a buffer under Epsilon. With
|
|
Epsilon 5.0 the command line options -e512 -m0 are neccessary to
|
|
manage RAM properly. One can also call out to the editor from SCM
|
|
if RAM is at a premium; See "under other systems" below.
|
|
|
|
under other systems:
|
|
Define the environment variable "EDITOR" to be the name of the
|
|
editor you use. The SCM procedure (ed arg1 ...) will then invoke
|
|
that editor and return to SCM when you exit the editor. I find the
|
|
following definition very convenient:
|
|
|
|
(define (e) (ed "work.scm") (load "work.scm"))
|
|
|
|
Invoking (e) will then put me into the editor with the file I am
|
|
working on and load this file after I have changed it.
|
|
|
|
TROUBLE SHOOTING
|
|
|
|
Compiling:
|
|
|
|
FILE ERROR or WARNING HOW TO FIX
|
|
|
|
*.c include file not found Correct status of
|
|
STDC_HEADERS
|
|
|
|
fix #include statement
|
|
or add #define for
|
|
system type to scmfig.h
|
|
|
|
scm.c assignment between incompatible types change SIGRETTYPE in scm.c
|
|
|
|
time.c CLK_TCK redefined incompatablility
|
|
between <stdlib.h> and
|
|
<sys/types.h>. remove
|
|
STDC_HEADERS in scmfig.h
|
|
|
|
edit <sys/types.h> to
|
|
remove incompatability.
|
|
|
|
sys.c statement not reached ignore
|
|
constant in conditional expression ignore
|
|
|
|
sys.c: `???' undeclared, outside of functions #undef STDC_HEADERS
|
|
in scmfig.h
|
|
|
|
scl.c syntax error define system type in
|
|
scmfig.h and scl.c (softtype)
|
|
|
|
Linking:
|
|
|
|
ERROR or WARNING HOW TO FIX
|
|
|
|
_sin etc. missing. uncomment LIBS in makefile
|
|
|
|
Running:
|
|
|
|
PROBLEM HOW TO FIX
|
|
|
|
Opening message and then machine Change memory model option
|
|
crashes. to C compiler (or makefile).
|
|
|
|
Make sure sizet definition is
|
|
correct in scmfig.h
|
|
|
|
Reduce size of HEAP_SEG_SIZE
|
|
in setjump.h
|
|
|
|
Input hangs #define NOSETBUF
|
|
|
|
ERROR: heap: need larger initial Need to increase the initial
|
|
heap allocation using
|
|
-a<kbytes> or INIT_HEAP_SIZE.
|
|
|
|
ERROR: Could not allocate ... Check sizet definition.
|
|
|
|
Get more memory.
|
|
|
|
Don't try to run as subproccess
|
|
|
|
... in scmfig.h and recompile scm Do it and recompile files.
|
|
|
|
ERROR: Init.scm not found Assign correct IMPLINIT in
|
|
makefile or scmfig.h or
|
|
define environment variable
|
|
SCM_INIT_PATH to be the full
|
|
pathname of Init.scm (see
|
|
INSTALLATION instructions).
|
|
|
|
WARNING: require.scm not found define environment variable
|
|
SCHEME_LIBRARY_PATH to be the
|
|
full pathname of the scheme
|
|
library SLIB or change
|
|
library-vicinity in Init.scm
|
|
to point to library or remove.
|
|
See section SLIB above.
|
|
|
|
Make sure library-vicinity has
|
|
a trailing file separator
|
|
(like / or \).
|
|
|
|
Testing: (load "test.scm") or (load "pi.scm") (pi 100 5)
|
|
|
|
Runs some and then machine crashes. See above under machine
|
|
crashes.
|
|
|
|
Runs some and then ERROR: ... Remove optimization option
|
|
(after a GC has happened) to C compiler and recompile.
|
|
|
|
#define SHORT_ALIGN in scmfig.h
|
|
|
|
Some symbol names print incorrectly. Change memory model option
|
|
to C compiler (or makefile).
|
|
|
|
Check that HEAP_SEG_SIZE fits
|
|
within sizet.
|
|
|
|
Increase size of HEAP_SEG_SIZE
|
|
(or INIT_HEAP_SIZE if it is
|
|
smaller than HEAP_SEG_SIZE).
|
|
|
|
ERROR: Rogue pointer in Heap. See above under machine
|
|
crashes.
|
|
|
|
Newlines don't appear correctly in Check file mode (define OPEN_...
|
|
output files. in Init.scm
|
|
|
|
Spaces or control characters appear Check character defines in
|
|
in symbol names scmfig.h
|
|
|
|
Negative numbers turn positive. Check SRS in scmfig.h
|
|
|
|
VMS: Couldn't unwind stack #define CHEAP_CONTIUATIONS
|
|
VAX: botched longjmp in scmfig.h
|
|
|
|
Sparc(SUN-4) heap is growing out of control:
|
|
|
|
You are experiencing a GC problem peculiar to the Sparc. The
|
|
problem is that SCM doesn't know how to clear register
|
|
windows. Every location which is not reused still gets marked
|
|
at GC time. This causes lots of stuff which should be
|
|
collected to not be. This will be a problem with any
|
|
"conservative" GC until we find what instruction will clear
|
|
the register windows. This problem is exacerbated by using
|
|
lots of call-with-current-continuations.
|