Done:
Write library:
	sine, cosine, exponential, log, arctangent, Bessel functions

Rewrite yytname so that += is += not ADDAB, etc.

gerror should cause the parser to enter the error state.

In the event of a syntax error (or any error in a definition for
that matter) someone should do a remloc on the parameters and autos.
As it is now, you can never use those variables as parameters again,
and whats more, if you refer to their global equivalents while in
a function, it uses the aborted local value instead.
One solution (gross) is to simply walk the dictionary on errors and
remove all local stuff.  Another is to have the error production
notice that a definition is going on because retfrom is non-null

Note that currently, literal number space is never recovered.  The result
is that if you give bc a large file with expressions to evaluate, it
will run out of space.  Strings are also lost.

Fix exponentiation so that negative powers are implemented or reported
as errors.  Also report sqrt(x<0) as bc error not mp fatal.

Change `foo' into "foo", damn terminal parochialists.

Recover literal storage in defunct function bodies when the function is
being redeclared.  Requires size field in function definition so literal
scanner can find end of function body.

Provide line numbers on syntax errors within files.

Note that currently a quit in a file simply goes to the next file.
Note also that quit is executed when parsed, even if it is in a
function definition or a conditional which is never true.
These are both certainly wrong.

The reservation of A-F for digits is stupid, the recognition of A-F as
digits in ibase==10 is doubly stupid, the local escapes to hex and octal
are trebly stupid.  Require numbers to begin with a digit or full stop.

ibase=16; 0.FFFF; /* does not compute */

Note that the output routine gets totally confused as to what column it is
on with tabs.  It should do it right.

Not done:
Ask Rico and Johann if there is any way for interp and yyparse to
work as coroutines rather than subroutines so that the interp stack
and the yyparse stack can share memory.
	I don't think so, except by accepting at each end of statement
	or define.

Eventually the asserts and bogus defaults should be removed, but
no need to do so until we have faith.
	If anyone knew which they were.

Should bc catch interrupts.
	Yes.

My random number spectral test blows up for n = 4.  The bug changes
depending on the strings entered in the program and the amount of
debugging code entered into bc.  Typically: sqrt of negative, bad
pointer in free, segmentation violation in free.  Number of iterations
of computation accomplished also varies as the contents of the program
changes.  Now: smult.c: 50: assert(0 <= carry && carry <= NEFL) failed.

#include "file" should be allowed.
#redirect "file" should be allowed.

Make more than one auto per define legal. Too hard?

Implement && and || and !. Too hard?

Fix realloc work around in bcmutil.c/select()

Merge changes from cef's msdos port.

Fix any conflicts with /usr/src/cmd/dc

Make cstream dynamically grow; must convert all the absolute loc pointers
into cstream offsets and fix the patches so they still work.  Also shrink
cstream after it has grown to encompass a function.

The stack should be cleaned up after bcmerr(), which should also catch
the mpalc() call to mperr();  people should understand that they can't
expect everything to be hunky-dory at this point, but they should be
allowed to salvage what information they can.

Type check argument lists for functions.
