home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
programmation
/
scm4e2.arc
/
!Scm
/
docs
/
README
< prev
next >
Wrap
Text File
|
1994-11-21
|
18KB
|
509 lines
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' is for building scmlit using the `make'program.
`build.scm' is a program for compiling and linking new SCM programs.
`ccnfigdb.scm' is the database used by "build.scm" which describes
C-compilers SCM has been ported to.
`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.
`record.c' has code for proposed "Record" user definable datatypes.
`gsubr.c' has make_gsubr for arbitrary (< 11) arguments to C functions.
`ioext.c' has code for system calls in common between PC compilers and unix.
`posix.c' has code for posix library interface.
`unix.c' has code for non-posix system calls on unix systems.
`socket.c' has code for socket interface.
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
__HIGHC__ MetaWare High C
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:
Edit Makefile to change CFLAGS, LIBS, and especially IMPLINIT.
make scmlit
Once you have built scm (using either method) test it:
make checklit
or 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 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).
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. It has been reported that when compiling SCM
with Turbo C, you need to `#define NOSETBUF' for proper operation in
a process buffer with Epsilon 5.0.
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
Reported problems and solutions are grouped under "Compiling",
"Linking", "Running", and "Testing". If you don't find your problem
listed here, please send a bug report to <jaffer@ai.mit.edu> or
<bug-scm@scrg.cs.tcd.ie>. The bug report should include:
* The version of SCM (printed when SCM is invoked with no arguments).
* The type of computer you are using.
* The name and version of your computer's operating system.
* The values of the environment variables SCM_INIT_PATH and
SCHEME_LIBRARY_PATH.
* The name and version of your C compiler.
* If you are using an executable from a distribution, the name,
vendor, and date of that distribution. In this case,
corresponding with the vendor is recommended.
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.