This file describes the differences between this cpp and the Reiser
cpp.  Read README for more details.

Overview:
	- slower
	- ability to use @ signs anywhere on the line to introduce control
	   sequences (when enabled)
	- more control sequences (#elif and several more when using @s)
	- output cosmetics
	- /**/ stripping even when -C given

In particular:

	- slower

This cpp is substantially slower than /lib/cpp.  On the other hand,
this one is public domain, is much more modular (which isn't
difficult....), and has more features.

	- @ signs as control sequence introducers

When enabled, an @ sign anywhere on the line (except, of course, in a
quoted literal) introduces a control sequence the way a # at the
beginning of a line always does.  @ signs are enabled whenever the
preprocessor symbol at_sign_ctrls is defined.  You can define it with
#define, -D on the command line, or the special case -D@ on the command
line.  What it is defined as is of no importance.

To insert @ signs into a definition, you can either make the definition
with #define, in which case no special syntax is necessary, or you can
double the @ signs:

@define foo(x) @@ifdef x something @@endif @

For a full definition of the syntax of all the sequences available with
@ signs, read the file @-syntax.

	- more control sequences

This cpp has more control sequences available.  X3J11 #elif is
available (at least I think what I implemented is what X3J11 wants),
and when using @ signs, there are many more available.  See the file
@-syntax.  (Note that though #elif is implemented, this is *not* an
ANSI-compatible cpp.  The semantics are still basically the Reiser
semantics.)

	- output cosmetics

When processing lengthy stretches of #defines, or long comments,
/lib/cpp emits a huge number of blank lines.  These make life difficult
whenever a human wants to read the output, as when debugging
complicated macros.  This cpp will not do this; runs of more than one
blank line (ie, a line which contains either nothing or only some
spaces and/or tabs) are removed, and a line-number line is emitted
(except under -P) to keep the line number correct.

	- /**/ stripping

When expanding a macro, all comments are normally stripped from the
expansion text before it is re-read.  Many macros have been written
which depend on this feature to concatenate symbols:

	#define FXN(name,value) int fxn_/**/name(){return(value);}

However, if -P is in effect, as for example when lint is running the
preprocessor, /lib/cpp no longer strips comments.  This is the correct
thing to do, but it causes grief with macros such as the above.  This
cpp behaves like /lib/cpp except that a comment with no text (ie, the
four consecutive characters '/', '*', '*', '/') is stripped from a
macro expansion even when -P is in effect.  This is admittedly a hack,
but it is nice to have (rather like the way 4.3bsd make executes
commands even under -n when they contain the string "$(MAKE)").
