We are pleased to release scsh version 0.5.1 to celebrate Flag Day.
The new release has many bug fixes, improvements and new features.

The text below gives a general description of scsh, instructions for
obtaining it, pointers to discussion forums, and a description of the
new features in release 0.5. To read this document with emacs outline
mode, say M-x outline-mode.

* What is scsh
==============
Scsh is a broad-spectrum systems-programming environment for Unix embedded
in R4RS Scheme. 

** Scsh as a scripting language
-------------------------------
Scsh has a high-level process notation for doing shell-script like tasks:
running programs, establishing pipelines and I/O redirection. For example, the
shell pipeline

    gunzip < paper.tex.gz | detex | spell | lpr -Ppulp &

would be written in scsh as

    (& (| (gunzip) (detex) (spell) (lpr -Ppulp))	; Background a pipeline
       (< paper.tex.gz))				; with this redirection

Scsh embeds this process notation within a full Scheme implementation.
The process notation is realized as a set of macro definitions, and is
carefully designed to allow full integration with standard Scheme code.
Scsh isn't Scheme-like; it is Scheme.

At the scripting level, scsh also has an Awk design, also implemented
as a macro that can be embedded inside general Scheme code.

** Scsh as a systems-programming language
-----------------------------------------
Scsh additionally provides the low-level access to the operating system
normally associated with C. The current release provides full access to Posix,
plus important non-Posix extensions, such as complete sockets
support. "Complete Posix" means: fork, exec & wait, sockets, full read, write,
open & close, seek & tell, complete file-system access, including stat,
chmod/chgrp/chown, symlink, FIFO & directory access, tty & pty support, file
locking, pipes, select, file-name pattern-matching, time & date, environment
variables, signal handlers, and more.

In brief, you can now write Unix systems programs in Scheme instead of C.
For example, we have implemented an extensible HTTP server at MIT entirely
in scsh.

As important as full access to the OS is the manner in which it is provided.
Scsh integrates the OS support into Scheme in a manner which respects the
general structure of the language. The details of the design are discussed
in a joint MIT Lab for Computer Science/University of Hong Kong technical
report, "A Scheme Shell," also to appear in a revised format in the *Journal 
of Lisp and Symbolic Computation."  This paper is also available by ftp:
    ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh-paper.ps


** Scsh is a portable programming environment
---------------------------------------------
Scsh is designed for portability. It is implemented on top of Scheme 48,
a byte-code-interpreter Scheme implementation. The Scheme 48 virtual machine
can be compiled on any system with a C compiler; the rest of Scheme 48 is
machine-independent across 32-bit processors. Scsh's OS interface is
also quite portable, providing a consistent interface across different
Unix platforms. We currently have scsh implementations for
    AIX,
    BSD/OS,
    CXUX,
    FreeBSD,
    HP-UX,
    IRIX,
    Linux,
    NetBSD,
    NeXTStep,
    Solaris,
    SunOS,
    Ultrix
Scsh code should run without change across these systems.
Porting to new platforms is usually not difficult.


* Obtaining and installing scsh
===============================
You can get a copy of scsh via anonymous ftp, from
    ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh.tar.gz
The tar file includes a detailed manual and a paper describing
the design of the system.

For the lazily curious, we also have the manual separately available as
    ftp://ftp-swiss.ai.mit.edu/pub/su/scsh/scsh-manual.ps
Just click 'n view.

You *should* be able to build scsh on the standard platforms with exactly five
commands: gunzip, tar, cd, ./configure, and make. The configure script figures
out the special flags and switches needed to make the build work (thanks to
the GNU project for the autoconfig tool that makes this possible).

After doing the make, you can start up a Scheme shell and try it out
by saying
    ./scshvm -o ./scshvm -i ./scsh/scsh.image
See the manual for full details on the command-line switches.

If it's harder than this, and your system is standard, we'd like to know
about it.


* Getting in touch
==================
There are two main ways to join in scsh-related discussion: the mailing-list
    scsh@martigny.ai.mit.edu
and the netnews group 
    comp.lang.scheme.scsh
These two forums are exactly equivalent, being bi-directionally gatewayed 
at MIT.

Bugs can be reported to
    scsh-bugs@martigny.ai.mit.edu

If you do not receive the alt netnews hierarchy, or wish to join the mailing
list for other reasons, send mail to
    scsh-request@martigny.ai.mit.edu


* The World-Wide What?
======================

We even have one of those URL things: 
    http://www-swiss.ai.mit.edu/scsh/


* New in this release
=====================

** Signal handlers
  We finally have signal handlers. Go wild.

** Static heap linker
  The static heap linker converts a Scheme 48 bytecode image as
  embodied in a .image file to a C representation. This C
  code is then compiled and linked in with a virtual machine. One
  pleasant side effect of this is reduced startup times and heap sizes. 
  Another good thing is that immutable parts of the image can be shared
  between processes. see the script scsh/static.scm

** Last few bits of Posix
    Scheme bindings for isatty(), ttyname(), ctermid(), and fcntl().

** Regular expression compilation
    - MAKE-REGEXP now actually does something useful.
    - AWK has been modified to use it, precompiling all of its
      patterns outside the main loop.
    - Unfortunately, things are still pretty slow. We'll work on it.

** New meta-arg second-line syntax
    Simpler grammar.

** New -sfd <fdes> command line switch
    Scripts can be read from stdin or other open file descriptors.

** Starting up programs with the "-e <entry-point>" command-line
   switch and with the (DUMP-SCSH-PROGRAM <file-name> <entry-point>)
   are now equivalent in that both pass a list of command-line arguments
   that includes the program name. The two start-up methods were not
   the same in the previous release. NOTE: THIS IS A BACKWARDS-INCOMPATIBLE
   CHANGE IN DUMP-SCSH-PROGRAM FROM THE PREVIOUS RELEASE.

** Etc.
  Solaris 2 on i386 support, AIX 4 support, HP-UX now uses dld for
  faster loading, a few small networking bug fixs, better error
  reporting, bug fixes, more efficient handling of closing unrevealed
  file descriptors at exec() with CLOEXEC, ...


* Thanks
========

We would like to thank Michael Becker, Glenn Barry, Travis Broughton,
Robert E. Brown, Charlie Conklin, Franklin Chen, Jin S. Choi, Douglas
S. J. De Couto, Brian F. Dennis, Sean Doran, Kevin Esler, Lutz Euler,
Lewis Girod, Dan Hagerty, Rolf-Thomas Happe, David Hull, Steven L.
Jenkins, Patrick May, Richard Kelsey, Jay Nietling, Tod Olson, Stephen
Pascoe, Jonathan Rees, Michel Schinz, Cotton Seed, Bill Sommerfeld,
Michael Sperber, Steven L. Tamm, Ed Tobin, Victor Zandy, and others
for bug reports, bug fixes, and comments that were incorporated into
this release. We really appreciate their help, particularly in the
task of porting scsh to new platforms.

We'd like to thank everyone else for their patience; this release seemed like
a long time coming.

Brought to you by the Scheme Underground scsh team. Go forth and write
elegant systems programs.
    -Olin Shivers & Brian Carlstrom
     Cambridge
     14 June 1997
