diff options
Diffstat (limited to 'README')
-rw-r--r-- | README | 384 |
1 files changed, 384 insertions, 0 deletions
@@ -0,0 +1,384 @@ +This directory contains the distribution of scm4e6. 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. + +This file consists mainly of excerpts from "scm.info", the result of +compiling (with makeinfo) "scm.texi" to `info' form. In case of +conflicts with "scm.info", consult "scm.info". + +The author can be reached at <jaffer@ai.mit.edu> + + 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. + `scm.texi' details feature support and enhancements to Scheme and + contains a SCHEME BIBLIOGRAPHY. + `ChangeLog' documents changes to the scm. + + `r4rstest.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. + `bench.scm' is Scheme code for computing and recording speed of + "pi.scm". + + `Makefile' is for building scmlit using the `make' program. + `build.scm' creates a database and program for compiling and linking + new SCM executables, libraries, and dlls. + `build.bat' invokes build.scm on MS-DOS platforms. + `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. + `continue.c' code for continuations. + `continue.h' data types and external functions for continuations. + `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. + `findexec.c' has code to find the executable file. + `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 opening and closing files, storage + allocation and garbage collection. + `rope.c' has C interface functions. + `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. + `edline.c' Gnu readline input editing + (get ftp.sys.toronto.edu:/pub/rc/editline.shar). + `Iedline.scm' Gnu readline input editing. + `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 + +[SLIB] is a portable Scheme library meant to provide compatibility and +utility functions for all standard Scheme implementations. 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: + + * ftp-swiss.ai.mit.edu:pub/scm/slib2a6.tar.gz + * prep.ai.mit.edu:pub/gnu/jacal/slib2a6.tar.gz + * ftp.maths.tcd.ie:pub/bosullvn/jacal/slib2a6.tar.gz + * ftp.cs.indiana.edu:/pub/scheme-repository/imp/slib2a6.tar.gz + +Unpack SLIB (`tar xzf slib2a6.tar.gz' or `unzip -ao slib2a6.zip') in an +appropriate directory for your system; both `tar' and `unzip' will +create the directory `slib'. + +Then create a file `require.scm' in the SCM "implementation-vicinity" +(this is the same directory as where the file `Init.scm' is installed). +`require.scm' should have the contents: + + (define (library-vicinity) "/usr/local/lib/slib/") + (load (in-vicinity (library-vicinity) "require")) + +where the pathname string `/usr/local/lib/slib/' is to be replaced by +the pathname into which you installed SLIB. Absolute pathnames are +recommended here; if you use a relative pathname, SLIB can get confused +when the working directory is changed (*note chmod: I/O-Extensions.). +The way to specify a relative pathname is to append it to the +implementation-vicinity, which is absolute: + + (define library-vicinity + (let ((lv (string-append (implementation-vicinity) "../slib/"))) + (lambda () lv))) + (load (in-vicinity (library-vicinity) "require")) + +Alternatively, you can set the (shell) environment variable +`SCHEME_LIBRARY_PATH' to the pathname of the SLIB directory (*note +SCHEME_LIBRARY_PATH: SCM Variables.). If set, the environment variable +overrides `require.scm'. Again, absolute pathnames are recommended. + + MAKING SCM + + The SCM distribution has "Makefile" which contains rules for making +"scmlit", a "bare-bones" version of SCM sufficient for running +`build.scm'. `build.scm' is used to compile (or create scripts to +compile) full featured versions. + + Makefiles are not portable to the majority of platforms. If +`Makefile' works for you, good; If not, I don't want to hear about it. +If you need to compile SCM without build.scm, there are several ways to +proceed: + + * Use SCM on a different platform to run `build.scm' to create a + script to build SCM; + + * Use another implementation of Scheme to run `build.scm' to create a + script to build SCM; + + * Create your own script or `Makefile'. + + * Buy a SCM executable from jaffer@ai.mit.edu. See the end of + `ANNOUNCE' in the distribution for details. + + * Use scmconfig (From: bos@scrg.cs.tcd.ie): + + Build and install scripts using GNU "autoconf" are available from + `scmconfig4e6.tar.gz' in the distribution directories. See + `README.unix' in `scmconfig4e6.tar.gz' for further instructions. + + Making SCM with Think C 4.0 or 4.1 + +Note: These instructions need to be uptdated for scm4e6. If Think C +can be called using system(), then SCM can be built using build.scm. + + 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). + + EDITING SCHEME CODE + +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: + + * ftp-swiss.ai.mit.edu:/pub/scheme-editor-packages/cmuscheme.el + + * ftp-swiss.ai.mit.edu:/pub/scheme-editor-packages/comint.el + + These files are already standard in Emacs 19. + + If your Emacs can not run a process in a buffer, see "under other + systems" below. + +Epsilon (MS-DOS): + 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 an editor from SCM if RAM is at a + premium; See "under other systems" below. + +other systems: + Define the environment variable `EDITOR' to be the name of the + editing program you use. The SCM procedure `(ed arg1 ...)' will + invoke your editor and return to SCM when you exit the editor. The + following definition is convenient: + + (define (e) (ed "work.scm") (load "work.scm")) + + Typing `(e)' will invoke the editor with the file of interest. + After editing, the modified file will be loaded. + + TROUBLE SHOOTING + +Reported problems and solutions are grouped under "Compiling", +"Linking", "Running", and "Testing". If you don't find your problem +listed here, you can send a bug report to <jaffer@ai.mit.edu>. 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 "r4rstest.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. |