/*	@(#)convert	2.1		*/
To convert two pass to 1 pass operation:
(I suggest that you use a subdirectory, since
it is hard to repair some of this damage once done)

I assume that you have new copies of the machine-independent
files.  The file cl is no longer used, and there is no
use of lex at all.  The file scan.c contains the new
lexical analyzer.  Moreover, the file comm2.c is no longer
used when the passes are loaded together.
These changes may affect local procedures for searching, printing,
diffing, etc. the compiler.

I suggest that you take the makefile in /usr/n as well, to help you
along.

The conversion process, as well as I understand it is as follows.

1.  Make a subdirectory, and put in it the old machine dependent files
macdefs, mac2defs, local.c, order.c, code.c, local2.c, and table.c.
Put in all the new machine independent stuff, including the new makefile

2.  Insert the line # define ONEPASS into macdefs
Change LABFMT by deleting the \n.

3.  In all the machine dependent source files local.c,
code.c, order.c, local2.c, and table.c, remove the includes of
manifest and macdefs; these are now included by mfile1 and mfile2.

4.  The main routine for pass 2 (probably on local2.c)
should be deleted; it probably only does a call to mainp2.
If it does anything else of interest,
let me know.

5.  On the file local.c, in the routine `ecode',
replace the lines
     printf( ".%d\t%s\n", lineno, ftitle );
     prtree( p );
by
     p2tree( p );
     p2compile( p );

6.  In code.c, in the function bccode, replace the line
     printf( "[\t%d\t%d\t%d\t\n", ftnno, XXXX, YYYY );
by
     p2bbeg( XXXX, YYYY );
Also, in efcode, replace the line which prints out the "]..."
with
     p2bend();

7.  In code.c and local.c, look at all remaining printfs.  Lines
which go onto the intermediate file all had ")" at the head.
All of these must be clobbered.  Thus, a line which read
     printf( ")    xxx yyy\n)   zzz  www\n" );
must be changed to read
     printf( "    xxx yyy\n   zzz  www\n" );
This is tedious, although a few cleverly chosen ed commands
will probably do the trick.

8.  Say make, and stand back.  The result is a
single program called comp.
You may experience loading errors as a result of having used the
same external names in the first and second pass.  Look at the
beginning of mfile2 to get a hint about one way to deal with
this problem (add stuff to mac2defs to change the names).
The other way to deal with it is just fix it...

9.  As a side-effect of other changes, the meaning of the arguments
to match has changed slightly; ASG OPANY, as it always
did, matches any assignment op except ++, --, and = itself.
OPANY, on the other hand, matches only ops which are not assignment
ops.  In table.c, there must be explicit rewriting rule entries for
++, --, and =.  In most cases with which I am familiar, this should
be true already, and no change is needed.

10. Usage is  /lib/cpp x.c | comp
which produces assembler output on the std. output.
research!/usr/bin/ncc gives the interdata compiler, with many
bells and whistles, as a Bourne shell script.
regression tests, and checks that this compiler
produces the same output as the earlier one, are
both wise.

Good Luck!
