November 9, 1977

This directory contains the source necessary to make a new pi.
Many of the files in this directory were linked to files with the same
name in the directory ../pxp, but the links were broken by tp.
There is a binary of pi here that should work immediately.
If you have floating point or with the simple system change in
../READ_ME.  If you have to give a different number to the system
call, you can simply reassemble the floating point interpreter and
reload pi via
	load -i

To print a copy of pi:		printpi
To make a new pi:		makepi

Read the file ../SETUP before you bother with any of this.

The compiler made by makepi is suitable for running on an 11/45 or 11/70
which has hardware floating point.  If you don't have hardware floating
point, it is not possible to run separate I/D using the standard interpreter.
Standard version 6 UNIX does not have the needed system call to allow
it to fetch the floating point opcode from instruction space, and the
mfpi instruction doesn't work on 11/70's.  A simple system change to add
a "mfpi" system call is explained in ../SETUP;  the floating point interpreter
which uses this system call is in ../fpterp.

This tape does not contain a Pascal system which will run on
11/34's or 11/40's.  Chuck and I were misinformed that
11/34's would have sep I/D so we went to a one pass compiler scheme.
It should be possible to make a smaller "pi" or a two pass "pi" without
a great deal of effort.  Earlier versions of the translator
"pi" were small enough to run without separate I/D, and a still earlier "pc"
was two rather much smaller passes.

The following non-standard programs are needed to compile pi:

	rmtree		Remove a subtree of the directory system
	mvall		Move a named group of files to a specified directory
	cc		Version 7 C compiler
	lnall		Make links to a number of files in a specified
			target directory
	squash		reduce object file size for library
			not needed, just speeds loading and reduces
			library size
	mkstr		Program to process C source putting error messages
			into an error message file
	eyacc		Modified yacc

In addition, the scripts here run with a shell that has a "set" command
to enable automatic timing of commands.  You can comment out the lines
of the form
	set ...
without any harm, or make a null set shell script.
Other local shell features used here are the alias "cd" for chdir and
the syntax "$*" expanding to all the arguments, i.e. "$1 $2 $3 ...".

Note: it is normal for the grammar to have a number of shift/reduce
conflicts; a message of the form

	conflicts: 16 shift/reduce

(or worse) from yacc is to be expected.

Defining the variable DEBUG on the first line of the file 0.h allows
the following debugging options

	c		print generated code
	y		dump namelist
	E		trace basic syntactic error recovery
	F		full trace syn err rec
	A		super full trace ...
	U		prevent unique symbol insertion in error recovery

As this option makes a much larger compiler it is not normally recommended.

The syntactic error recovery relatively new code.
It has not been as thoroughly tested as the rest of the system.

Please let me know of any problems with Pascal, especially with the
error recovery.  I would be glad to hear of any problems, as well as
any local modifications which you find necessary or desirable.

					Bill Joy
					Computer Science Division
					EECS Department
					University of California, Berkeley
					Berkeley, California  94704

					Office:	(415) 642-4948
					Home:	(415) 524-4510
