Chessbox_gnu4j 1.02

See http://www.chessbox.org/ for latest information.

See INSTALL for installation instructions. 

See COPYING for license (GPL). 

ABOUT

Chessbox_gnu4j is a simple port of GNU Chess 5.0.7 from C to Java. Being
a simple port, it has not been java-tized to be object-oriented. That
will be a derivative project...

Chessbox_gnu4j has been developed with Mac OS X 10.4 and Java 1.4.2, but
can probably run with Java 1.2 or later.

Chessbox_gnu4j runs but has not been thoroughly tested. It can play a
game, solve epd problems, read pgn files, and read book files. I have
not tested it at all as an XBoard client. Please report any problems to
chessbox_gnu4j@chessbox.org.

Being a direct port, chessbox_gnu4j might be used a benchmark comparing
Java and C performance on a particular machine. The commands "text
movegenspeed" and "test evalspeed" can be used for such purposes. On my
Mac 2x1GHz G5, I get the following speeds:

                   C        Java
movegenspeed      25M        15M      moves/sec
evalspeed        210K       120K      evals/sec

CODE NOTES

Generally there is one Java class for each C file, and the Java class is
just a collection of static members. The class Common holds the global
variables and every other class extends Common so they can reference the
globals without qualification.

Comments in the code are mostly from the C version. "fixc" comments mark
suspicious C code (though most of these have been removed as the
problems have been reported to the GNU Chess project). "fixjava"
comments mark incompletely translated code, such as Control-C
processing.

The class CommandLine is new to provide command line option processing,
which the C code uses the UNIX long_option struct and functions for.

The class LexPGN was translated from lexpgn.c, which is a generated
source file from a grammar. I suppose the right thing to do would be to
translate the grammar to antlr for Java use.

FUTURE POSSIBILITIES

- optimize existing code for Java
- java-tize code as a class implementing a "ChessEngine" interface
- port XBoard to Java (have it use plugin ChessEngines)
- add featutes (e.g., analyze position)
- make engine customizations (change some constants to variables)
- tinker with eval code, possibly spawning new variants

