Unix Logo Interpreter
	Brian Harvey
	Lincoln-Sudbury Regional High School

This is release 4 of Unix Logo.  It differs from release 3 in that it
more closely follows the syntax of LCSI versions of Logo (Apple Logo,
IBM Logo, etc.)  In particular, multiple commands on a line are allowed
without semicolons required between them.  The prompt character is '?'
instead of '*' as before.  The abbreviations 'f', 'l', and 'top' have
been eliminated.  Positioned text (cleartext and setcursor) are supported
using termlib.  The 'random' primitive now takes an input, like 'rnd',
instead of being equivalent to 'rnd 10' as before.  Error messages are
closer to those in other versions of Logo.  Procedure names can be longer
than 11 characters if your version of Unix has long file names.

The following obsolete paragraph is included to help users of previous
versions understand the version history.

-----
This is release 3.2 of Unix Logo.  Release 1 was the one on the first 1982
Usenix tape.  Release 2 was sent by me (BH) directly to only a few sites.
This release is much like release 2 in capabilities and syntax, but has
been rearranged internally somewhat to make the process of installation
on a new system a bit easier.  One major new feature in release 3 is the
pause facility, which allows interactive debugging in the local context
of an error.  More on this below.  Release 3.1 differs from 3 only in a
few bug fixes and in what is left out under the SMALL option.  Release 3.2
differs from release 3.1 in bug fixes, better error messages, and one
incompatible change: the quotient of two integers can be a non-integer.
-----

I would like to thank Don Martin and his students at the College of Marin,
who have found huge numbers of obscure bugs in Logo and therefore helped
make this release much more reliable than it would otherwise have been.

Logo is a programming language for education.  It is, I think, unquestionably
the best introductory learning language now available, because it combines
the ease of an interactive language (like BASIC, otherwise terrible) with
the power and structure of a procedural language (like Pascal, not bad once
you get past the details of editing and compiling and loading and semicolons
and does var go before or after const).  If you aren't convinced, read the
book "Mindstorms" by Seymour Papert.  It doesn't matter how old your
students are.

This directory contains an interpreter for the Logo programming language.
The interpreter is written in C and YACC, and runs under Unix(TM) version 7.
It has been exported also to Vax 4BSD and to Idris on a PDP-11.  This program
is based on a Logo interpreter originally written at the Boston Children's
Museum; the present version is very much improved in its capabilities.  On
the other hand, the original version ran in a 64Kb address space; this version
requires split I/D on the PDP-11.  (It can be run on a smaller 11 by turning
on the definition of SMALL in logo.h, but with hardly any recursion allowed.
This configuration just barely works and is not recommended.  If someone with
such a system wants to tune it up and send me the results, please do.  SMALL
eliminates the pause feature (pause, continue, errpause, etc.) and the
property list feature (pprop, gprop, etc.) as well as using short ints and
floats instead of long ints and doubles.)

The file "logoman" in this directory is an nroff-format reference manual. It's
very terse; you should really learn Logo from some other manual and use this
one just to learn about idiosyncracies.  There are also two smaller
documentation files, "applediff" for people accustomed to Apple
Logo, and "olddiff" for people accustomed to the first LSRHS release.
If you are getting this file via Usenet comp.sources.unix, you will
have to do "cat logoman.[12] >logoman" first.

Users of the first release of LSRHS Logo (the one on the Usenix 82.1 tape)
will find the present version more robust and also more featureful.  Its
syntax is much like that of Apple Logo, which should be helpful to people
with Apples as well as real computers.  Line numbers have been flushed,
except for use with the go command.  The kludgy re-entrant use of the YACC
parser has been eliminated.

The enclosed makefile should manage to compile this Logo with no errors.
You will have to make some modifications for local conditions, most notably
in the area of turtle graphics.  Most installation dependencies have been
collected at the beginning of the file logo.h which is included in all
compilations.

TURTLE GRAPHICS.  You must #define symbols in logo.h for the kind(s) of
display hardware you support.  Also, if you have a graphics terminal which
is not one of the ones already supported in this release, you'll have to
add some code to turtle.c to support it.  The enclosed turtle.c
knows about six kinds of graphics hardware:
	1) Terrapin floor turtles, connected via DR11-K interfaces.
	2) Atari 800 personal computers, running a special terminal program.
	3) DEC GIGI graphics terminals.
	4) Retrographics boards (known to work with ADM-5 terminals,
		maybe also for other Retrographics products).
	5) Tektronix 4014 storage tube displays (with severe restrictions
		because of their inability to erase selectively).
	6) Sun Microsystems workstations.
The files ./*.i contain terminal-specific code which is #included in the
compilation of turtle.c if the corresponding terminal is #defined in logo.h.
The code for floor turtles is done very differently and is not separated into
a .i file because, alas, it's not so modular.  If you have neither graphics
terminals nor floor turtles, you should turn on the NOTURTLE definition in
logo.h to eliminate the turtle primitives.

DEFAULT EDITOR.  The "edit" command in Logo does not use an editor built
into Logo itself.  Instead, it forks and runs your favorite editor in a
new process.  If you have an EDITOR variable in your environment, it uses
that editor (it tries with /bin, /usr/bin, and nothing prepended).  If not,
it uses the editor specified in the EDT definition in logo.h.  This is
"jove" in the version as distributed.

INPUT WAITING TEST.  The "keyp" operation depends on a system call to
check for characters waiting to be read from the keyboard.  If you are
running a Berkeley-derived Unix, this will work correctly.  If not, but
you have your own such system call, edit procedure keyp() in logoaux.c
to use your own version.

FILENAME FORMAT.  Each Logo procedure is stored in a file called <name>.lg
in the current working directory.  Under version 7 Unix, this allows names
of procedures to be up to eleven letters long.  VMS filenames can only be
nine letters.  The parameter NAMELEN in logo.h should be adjusted.  (Note:
depending on when you got your version of Eunice, it may allow real Unix
filenames, in which case you needn't worry about this.)

THE PAUSE FEATURE.  You can pause on an error
inside a procedure, so you can examine the context interactively.  The
pause feature distinguishes SIGINT and SIGQUIT, which were treated identically
in earlier releases.  In the normal distribution, SIGQUIT returns to toplevel,
whereas SIGINT causes a pause.  The problem is with Eunice, which doesn't
provide SIGQUIT because VMS doesn't have enough interrupt characters.
Therefore, the standard distribution allows pausing but not quitting to
toplevel, although you can say "toplevel" while paused.  If you'd rather
have quitting be the default, as in previous releases, interchange the
definitions of PAUSESIG and OTHERSIG in logo.h; there are also commands
to allow the user to make this switch dynamically.

(Eunice users:  Until just recently, an obscure bug in Eunice had the effect
that when you type ^C you don't see a prompt until you hit return.  The switch
called EUNICE in logo.h enables a workaround for this bug.  Dave Kashtan has
now fixed the underlying problem, but not necessarily in the version you have.
If you get too few prompts, turn on the #define EUNICE; if too many prompts,
turn it off.)

-----
INSTALLATION etc.

Saying "make install" after you compile your Logo will install Logo in
/bin/logo and will also set up two directories:
	/usr/lib/logo	Library routines written in Logo for general use
				Also stuff for edit and pots commands.
	/usr/doc/logo	Excerpts from the manual for the "describe" command
The files in these directories are copied, not moved; you can delete the
originals if you prefer.  See the makefile.  These directories must have
the names shown here, although you can put logo itself somewhere other than
/bin if you prefer.

There are three C source files included here which are not part of the Logo
interpreter itself.  One, logohead.c, is used to compile the program
/usr/lib/logo/logohead which is used for the pots command.  Another,
splithelp.c, is part of the makehelp shell script which is used to generate
the online help messages from the manual.  The third C file,
dr11k.c, is a device driver for version 7 for a DEC DR11-K used to interface
Terrapin floor turtles (you get two per DR11-K) to the PDP-11.  The interface
costs much more than the turtles!

INCOMPATIBILITY WITH RELEASE 2.  (This release is VERY incompatible with
release 1; see the file olddiff for details.)  To be compatible
with VMS restricted filenames, to run under Eunice, the names of files used
to store Logo procedure definitions have been changed from foo.logo to
foo.lg (some installations have a version of release 2 in which the name
foo.log is used, but that looks too much like a log file from a batch job;
the new version seems more Unixy anyway).  If you prefer to keep the old
convention of .logo names, turn on the definition of EXTLOGO in logo.h.

Check your makefile to be sure it refers to "y.tab.c" and "y.tab.o" on
Unix, "ytab.c" and "ytab.o" on Eunice.  (Again, some versions of Eunice
use the real Unix filenames.)

If you have questions about this Logo, try
	Computer Department
	Lincoln-Sudbury Regional High School
	390 Lincoln Road
	Sudbury, MA  01776
	617 443-9961

