VERSION HISTORY OF MATHOMATIC
-----------------------------

Changes made to Mathomatic V9.8:

Added "roots" command.

Added "set" command.

Deleted "debug" command.  Use "set debug" instead.

Deleted tutorial program.  I am sure it never impressed anyone and
it may have turned some people off.

Added "groupall" option to "set" command.  This option sets the
display mode to fraction format.

Set "groupall" on by default.

Changes made to Mathomatic V10.0:

Added variable "V_NULL" for future additions (like functions).
"V_NULL" signifies a dummy operand that is not displayed or used.

Added "code" command.

Changes made to Mathomatic V10.1:

Added warning message when raising 0 to the power of 0.

Changed maximum number of equation spaces from 10 to 20.

Added "SILENT" compile time define option.  When true, disables output
of most helpful messages.  Useful when using Mathomatic as a library.

Added "NO_COMPLEX_ROOTS" compile time define option.  You can leave
out "complex.c" if you set this to true.  "complex.c" is the only
module that requires trigonometric functions from the math library.

Split off expression list routines into "list.c" from "am.c".

Added "set columns" option.

Added Mathomatic "-h" option.  This option enables HTML color mode
for the entire session.  With this option, Mathomatic output may
be included in a web page.

Changes made to Mathomatic V10.2:

Changed "getstring()" to display a prompt before getting a line of input.
This is useful for people who want to use "readline()".

Added "IBM_PC" compile time define option.  This was necessary for
porting Mathomatic to systems other than the IBM-PC or UNIX.

Fixed handling of non-ascii characters in the parser.  Previously,
the result of using non-ascii characters was unpredictable.

Cleaned up some of the source code.

Rewrote and optimized super_factor().

Changes made to Mathomatic V10.3:

Added and implemented var_count() function.  This allows smart division
to do its thing more often.  Also changed "simplify" command to always
combine denominators.

Added "readline()" support.

Changes made to Mathomatic V10.4:

Added shell escape (start command line with "!").

Changed "replace" command to allow multiple variables on the command line.

Changes made to Mathomatic V10.5:

Added display of current option settings to "set" command.

Created "source.txt".

Added "SECURE" compile time define.  When defined, disables file reading
and writing and shell escape.

Added automatic setting of "screen_columns" and "screen_rows" in UNIX.

Changes made to Mathomatic V10.6:

Optimized a few commands for space.

Added "optimize" command.

Changes made to Mathomatic V10.6b:

Fixed bug in "optimize" command.

Improved output of "code" command.

Fixed possible endless loop when repeatedly increasing power in solve function.
Set the maximum number of times increasing power to 20.

Changes made to Mathomatic V10.6c:

Cleaned up some code.  "replace" and "eliminate" commands now simplify
correctly.

Swapped a few flags around in the "simplify" routine and made it work better.

Fixed spewing of "Equation too big!" messages.

Changes made to Mathomatic V10.7:

Tweaked "smart_div()".  Resulted in significant improvement of simplification.

Made "simplify quick" keep algebraic fractions simple.
Maximum simplification is needed usually, which often makes fractions complex.
Made "simplify quick" simplify complex numbers like "simplify".

Made increase power in solve isolate the root of the largest expression,
before raising both sides to the power of an integer.  This is necessary
because the larger expression may contain the root of a smaller expression.

Changes made to Mathomatic V10.7b:

Removed all occurrences of "<>" from help command.

Made "code" command generate C compatible variables, even if they
contain primes (').

Fixed screen attributes when shelling out to do a system command
in color mode.

Fixed endless loop in solve routine, which occurred when the infinity constant was used.

Changes made to Mathomatic V10.7c:

Changed license to GNU Lesser GPL.

Changes made to Mathomatic V10.7d:

Renamed the Mathomatic program to "am", to avoid conflicts with the UNIX "ac" system command.

Changes made to Mathomatic V10.8:

Replaced many strncmp() function calls with strncasecmp().

Added code to rationalize denominators.  Any binomial denominator with square roots in it is simplified.

Changes made to Mathomatic V10.8b:

Fixed minor bug where some things, like shelling out, the text was incorrectly converted to lower
case in case insensitive mode.

Increased power of denominator rationalizer by not only working with x^.5, but also x^1.5, x^2.5, etc.

Added option to "factor" command to factor integers.

Made output redirection (>filename) work in all commands.  Removed "print" command.

Changes made to Mathomatic V10.8c:

Removed requirement for "malloc.h" include file.

Removed most MS-DOS specific code.

Fixed denominator rationalizer to simplify any multinomial with a single square root in it.

Renamed "set groupall" option to "set display2d".

Changes made to Mathomatic V10.8d:

Added "set directory" option.  This option allows you to change the current working directory
while running Mathomatic.

Improved the Mathomatic manuals.

Removed "remark" command (use semicolon instead).

Fixed alphabetic case bug in "replace" command.

Fixed parse_var() to work with case_sensitive_flag.

Changes made to Mathomatic V10.8e:

Doubled the number of tests in "all.in".

Fixed "read file1 >file2" command.

Fixed "roots >file1" command.

Added how to do infinity limits in "limit.in".

Changes made to Mathomatic V10.9:

Added "sum" and "product" commands.

Patched for Solaris OS.

Changes made to Mathomatic V10.9b:

Removed more MS-DOS specific code; functionality improved.

Implemented what I call "fraction slack".  This perfects float to fraction conversion,
and now Mathomatic doesn't rely on perfect floating point routines.
"-O" option added to CFLAGS in file "makefile" (we can do this now).

Changed modf() to fmod() where possible.

Accuracy increased one more digit by reducing the "epsilon" variable.

Changes made to Mathomatic V10.9c:

Cleaned up "makefile".

Took a step towards internationalization with gettext(3) by calling _() for all English strings.
Everything ported except for the "help" command.

Commented out some unfactoring code that wasn't helpful and took out the "pause" command
from "all.in" for easier testing.

Rearranged "simplify" command to simplify better.

Changes made to Mathomatic V11.0:

Removed some more unfactoring code and made simplification much better.  Go figure.
Perfection has been achieved.

Added "unfactor fully" option.

Added "make test" to fully test Mathomatic after compilation.

Removed masking of 8th bit in all Mathomatic input.

Updated primes program with a nice user interface.

Changes made to Mathomatic V11.0b:

Fixed HTML mode "screen_rows" and "screen_columns" to be unlimited.

Allow square brackets ([]) as parentheses and optimized parser.

Simplification was improved.

Changes made to Mathomatic V11.0c:

Removed some simplification optimizations in favor of correctness
and simpler code.  Minor slowdown.

Doubled "MAX_COMPARE_TERMS".

Simplify order poly_div then smart_div reversed.
Kludge for size checking in poly_div removed.
Broke "am.in".  Edited.
Added "simplify poly" option to do poly_div first.

Changes made to Mathomatic V11.0d:

Changed unfactoring to improve simplification (again).
This was a bug fix (first one in a long time).

Restored "epsilon" to original value in version 10.9b.
Required for factoring large polynomials.

Changed factor_times() to preserve divides.
This improved the "unfactor" command.

Added polynomial factoring to the very beginning of "simplify" command.
This is necessary in case you "unfactor" a complicated equation, then "simplify".

Changes made to Mathomatic V11.0e:

Removed calc() fraction code for accuracy because of fraction slack
that was implemented in version 10.9c.

Solve increase power function wasn't working with odd number roots.
Fixed.  Appears to be another gcc optimizer bug.

Improved simplify command.

Tweaked factor_constants().

Some changes to "makefile" for "readline" support.
"GNU make" or "gmake" required now.

Fixed solving of "x^(1/99)=x".

Fixed readline bug.

Changes made to Mathomatic V11.0f:

Fixed "makefile" to be completely portable.
No longer requires GNU make.

Simplified some code.

Converted token_type.kind to enum type for better type checking.

Removed all "unsigned" variables and type casts.

Simplified "simplify" command code.  Some speed up.

Moved "*.in" and "fix*" to directory "tests".

Implemented long variable names (up to 40 characters).

Changes made to Mathomatic V11.1:

Added Java code generation (usage: "code java").

Added "list export" option, to display equations in exportable format.
They can be cut-and-pasted to another math program with this option.

Added a blank line after every equation listed with the "list" and "code" commands.
Looks better.

Made "MAX_VAR_LEN" completely flexible (can be set to any value; set to 80).

Improved factoring of polynomials with repeated factors by trying to differentiate
with respect to every variable.

Changes made to Mathomatic V11.1b:

Perfected factoring of constants in final stage of simplify command.

Changes made to Mathomatic V11.1c:

Moved notification of polynomial factoring success to debug level 1 or higher.

Removed "NO_COMPLEX_ROOTS" compile-time define option.
I am thinking of making this a run-time option.

Increased security of "SECURE" compile-time define.
Absolutely no file operations are allowed or linked in.

Added check for terminal with isatty().
This allows better piping into Mathomatic.

Split up change-log ("changes.txt" and "changes_old.txt").

Changed "x!" to mean gamma(x+1) for Laplace transforms.

Fixed parsing of things like "2e#", which failed before,
thinking it was scientific notation.

Changes made to Mathomatic V11.1d:

Wrote "primes/twin.c", to find twin primes.

Added "help usage" command.

Allow output of "help" command to be redirected to a file.

Fixed parsing of variable names (like "pig", which didn't work right).

Added "integrate" command.

Fixed "derivative" command.

Code cleanup.

Fixed "taylor" command.

Changes made to Mathomatic V11.2:

Doubled the default amount of memory consumption to 11 megabytes.
This allows equations twice as large.

Fixed bug factoring infinity.

Slight improvement to "integrate" command.

Trap window resize signal and set number of screen columns and rows.

Code cleanup.

Fixed factoring of constants in factor command.

Added "laplace" command.

Changes made to Mathomatic V11.2b:

Allow "#" as a comment, as long as it is not immediately followed by
a number.

Enabled shelling out for all versions with the "!" command.

Improvement and speedup for poly_gcd() and poly2_gcd().

Slight improvement in polynomial factoring made by deleting 1 line of code.

Use getopt(3) to parse command line options.

Made "-c" and "-h" options work together.  If both are specified,
work in HTML mono mode.

Changes made to Mathomatic V11.2c:

Slight improvement to integrate and laplace commands.
Integrate/laplace x on (a+x)/(b+c) works now.

Added more examples to the documentation (am.htm).

2 to 10 times speedup for simplify command by fixing polynomial factoring.

Changes made to Mathomatic V11.2d:

Renamed the Mathomatic executable to "mathomatic".

Add inverse Laplace transform.  Usage: laplace inverse x

Fixed bug in solving for zero, which occurred when there were no variables in the divisor.

Some improvement in solve routine.

Changes made to Mathomatic V11.2e:

Substantial change/improvement to simplify command.

Added some more code to fix floating point inaccuracies.

Improved solving.  y=(x+1/x)^3 solves both ways, now.

Full simplify after every loop in derivative command added.

Move derivative and taylor commands to "diff.c".

Added "-m" option to Mathomatic (memory size multiplier).
It sets the size of equation spaces at run time.

Changes made to Mathomatic V11.3:

Proper exit after error reading files on the command line.

Added code to preserve roots of integers, if the result is irrational.

Fixed "calculate >filename".

Made "+/-2^.5" work as expected.

Code cleanup.

Full simplify added for every loop of taylor command.

Removed "replace temp" option, so that the "temp" variable can be renamed.

Changes made to Mathomatic V11.3b:

"factor number" command now accepts more than one integer.

Added file "mathomatic.ico".

Added temporary fix for 64 bit longs.

Added file "VERSION" which contains the version number of Mathomatic.
"makefile" modified.

Renamed "lgpl.txt" to "LICENSE.txt".

"make install" now installs all HTML files in "/usr/local/doc/mathomatic".

Added compile-time define "TIMEOUT_SECONDS".
Useful for limiting the amount of time Mathomatic can run as a CGI.

Changes made to Mathomatic V11.3c:

Improved eliminate command error handling.

Added "eliminate all" command.

Code cleanup.

Man pages for the prime number tools were contributed
by David Moreno Garza.  Many thanks.

Changes made to Mathomatic V11.3d:

Renamed the Mathomatic directory in the source tarball to "mathomatic-`cat VERSION`".

Added several comments to the source code.

Renamed prime number tools to "matho-*".

Changes made to Mathomatic V11.3e:

Improvement to full simplification.

Tried something new with uf_simp() that fixed a problem with Mathomatic
solve complicating expressions.

Minor bugfix to eliminate command.

Changes made to Mathomatic V11.3f:

Changed sum and product commands to not create another equation if the
result is a constant.  If the result is a constant, it is just displayed.

Mathomatic now approximates -1^(2^.5) and the like.

Added modulus (%) operator.

Added simplification of univariate modulus expressions.

Changed univariate modulus simplification to multivariate, integer only simplification.

Changes made to Mathomatic V11.4:

Added "code integer" command, which outputs working C code with integer variables.

Changed makefile to use libncurses instead of libcurses.

Added more simplification rules for modulus.

Changes made to Mathomatic V11.4b:

Code cleanup.  Polynomial division routine is now very easy to use.

Renamed "WINDOWS" define to "CYGWIN".

Added "set preserve_roots" option.

Added modulus solving.

Changes made to Mathomatic V11.4c:

Removed obsolete short variable name code and bumped up "MAX_VARS" to 500.

Fixed problem with conflicting names and code for "cpow()" and "cexp()".
Renamed to "complex_pow()" and "complex_exp()".

Changes made to Mathomatic V11.4d:

Using "memmove()" instead of deprecated "bcopy()".

Added "tests/tutor.in", which is an incomplete Mathomatic tutor.
Many improvements to scripts in the tests directory.

Removed "calculate factor" option.

Code cleanup.

Added more modulus simplification.
Simplify ((a%n)*integer+b)%n to (a*integer+b)%n generally and completely.

real^complex and complex^complex are now approximated.
