=-=-=-=-=-=
 TODO List 
=-=-=-=-=-=

Note, this is a *very* incomplete list.  I'm continually making 
modifications not listed here.  Still this list does highlight a 
number of items that need to be worked on.

==============================================================================
[ ] Make the program accept/offer draws.
[ ] Add a debug mode that compares the time kept internal to the engine
    with the time under Xboard.
[ ] Add "learning" to the program.
[ ] Add the "annotate" and "annotate-html" commands.
[ ] Implement a better time-control algorithm
[ ] Add a "trapped/entombed-piece" evaluator.
[ ] Modify the PV saved when running a test-suite.

Done
----
[x] Add Knuth-Moore node typing during the search.
[x] Implement a "generate_check_replys()" function that returns check 
    replys that are TRUE legal moves (instead of psuedo-legal moves).  
    The advantage of this approach is that the move count returned by this 
    function could be used to directly to determine if we should do the 
    "one-move" extension.
[x] Determine the Hamming Distance for the random numbers used by
    the hash table.
[x] Add an .*rc options file.
[x] Add en'passant rights and castling rights to the hash key. 
[x] Make the program score a penalty to prevent it from capturing an edge pawn
    (defined as the a/h pawns) residing on its initial when the two adjacent
    pawns of the same color are also on their initial squares.  This should
    prevent the cases where a bishop or knight can get trapped by pushing
    the pawn next to the captured pawn thus eventually allowing the other
    side to snag the bishop or knight.
[x] Add a "PASSED/FAILED" statement to the log file for each test position
    when running a test suite.  
[x] Modify the perl script "tally-tests.pl" to take advantage of the 
    "PASSED/FAILED" statement in the log file so that it can report on the
    number of tests that were solved by the various versions of the program.
[x] Add endgame tablebases to the program.
[x] Make the program recognize all types of draws.
      1) Fifty-move rule.
      2) Three-fold repetition rule
      3) Insufficient material to win
[x] Make the program think on the opponent's time (pondering).    
[x] Sort the moves at the root.
[x] Add the "analyze" command.
[x] Get the program playing on ICS full-time (need a cable modem or DSL).
[x] Implement some form of "Oracle" function to be called once at the root.
    Most likely it would involve (at a minimum) dynamically set piece-
    square tables.
[x] Make the program recognize "insufficient-material" draws at the root.
[x] Implement internal iterative-deepening.
[x] Let MATE scores be stored as bounds in the hash table.
[x] Make the program resign when behind by a significant amount of material.
[x] Add the exclusive-OR trick for updating the chess board bitmaps when
    moving a piece.
