07-13-97: Arasan 4.0
  1. The incremental attack update code has been removed. In its place,
     we now use piece bitmaps updated on each move and compute attack
     information as needed for pruning and evaluation.  The rotated
     bitmap techniques used are derived from Crafty (the algorithms are
     similar but the implementation differs).
  2. Draw by repetition is now handled in the Board class and has been
     speeded up considerably compared to version 3.5.
  3. The scoring module has been modified in several ways.
     The king safety code now gives bigger penalities for a king under
     attack or in an exposed position.  King safety is now asymmetrical.
     A higher bonus is given for rook position and mobility.  There is
     a better "trade-down" bonus. Bugs in passed pawn evaluation have
     been fixed.  A pawn hash table is used for faster evals.
  4. A better hash table replacement algorithm is used.  The hash table
     is no longer cleared after a search. 
  5. The opening book has been modified to store win/loss information
     for each position.  A PGN to opening book conversion program has
     been written.
  6. ICS (Internet Chess Server) support has been added to the
     "arasanx" console program.  Better Winboard support has also been
     added - for example, the program can now display its "thinking".
     The new version of winboard (3.6) is supported. 
  7. Incremental (Fischer-style) time controls are supported.  Internal
     time management is now in units of 1/100 second (like Crafty).
  8. Search statistics are now shown in the status bars at the bottom of
     the window.  The state of the bars (shown/hidden) is saved on exit.
  9. Thinking on the opponent's time (a.k.a pondering) is implemented
     differently (and better) in this version.
  10. PGN headers now use 4-digit dates, per the PGN standard.
  11. Arasan now uses the DLL version of MFC.
  
11-9-96: Arasan 3.5
  1. Some serious bugs were fixed in the code that uses the results of
     thinking on the opponent's time.  This caused occasional bad
     moves.
  2. The hash table used to store the depth of the search plus any
     extensions.  This could cause the search to encounter a hash hit
     in the next iteration and return a value from the hash table when
     it should have searched the node one ply deeper.  Fixing this
     has speeded up some searches.
  3. A small fix has been made in the hash table insertion code.  A
     node can now replace another node of the same depth.  This fixes
     some problems when a research occurs.
  4. The "auto size" hash table option was being set backwards - i.e.
     it was off when the box was checked, and on otherwise.  Also there
     were problems when a hash table size of 0 was set - this is fixed.
  5. The calculation of the hash size when the "auto size" option is
     on has been changed - it now allocates more memory.
  6. Some problems with the "uninstall" feature in Windows 95 have
     been fixed.
10-2-96: Arasan 3.4
  1. Better fix for opening move bug - book now stores full 64-bit
     hashcode.
9-25-96: Arasan 3.3
  1. Bugs in the Tournament and Game type of time control have been
     fixed.  A message box is now shown when one side loses on time.
  2. The high order 32 bits of the hashcode are now used to compute
     the hash bucket for an opening move.  A larger hashtable is used
     in the book to help avoid collisions.  Some compile warnings
     were fixed in makebook.cpp.
9-4-96: Arasan 3.2
  1. The Hint dialog could produce illegal moves - this is fixed.
  2. More forward pruning is now done in the quiescence search - this 
     generally results in faster searches.
  3. Hash codes are now 64 bits (used to be 32).
  4. Thinking on the opponent's time was broken - it is fixed now.
  5. Several enhancements have been made in the scoring function.
     There is now a bonus for connected passed pawns. The king safety
     score has been modified, to penalize more moving pawns around the
     king.  This penalty varies with the amount of material the
     opponent has.  Also, doubled and backward pawns are now penalized
     more heavily.  There is a new penalty for trapping a bishop on the
     edge of the board via a move like Bxh2.
  6. A bug prevented displays with 16- or 32-bits of color depth
     ("true color") from being recognized as color.  This is fixed.
  7. If the user has set up a non-standard color scheme, text in the
     program window is now drawn with the user's choice of window
     color as background, instead of always using white.
  8. A new program "arasanx.exe" has been added to the tools directory
     which allows Arasan to act as a WinBoard client.  Not all WinBoard
     features are supported yet.
7-18-96: Arasan 3.1
  This is a bug fix release.
  1. Bringing up a dialog during a search could cause the program to
     hang. This was caused by the message dispatcher in the Search class
     not processing dialog messages correctly.  There is no easy fix
     for this. It has been fixed by making the UI multithreaded, so
     we no longer need to do message handling in the Search class.
     This is the more kosher way to do things in Win32, anyway.
  2. Double-click on the system menu or hitting the "X" icon in Win 95
     could cause a hang - fixed.
  3. Scores for drawn positions might be calculated incorrectly,
     causing various problems.  These have been fixed in
     Search::draw_score, which is a new function called in draw
     situations.
  4. The program would sometimes output bogus "Mate in n" messages - fixed.
  5. A tweak has been put into the MakeMove routine which speeds up
     searches in endgames about 15%.
  6. Fixed some bugs in the Scoring module, and put in a workaround
     for a compiler bug in bitmap.h - this fixed serious problems
     with passed pawn scoring.
  7. The PGN parser now handles digits for castling, e.g. "0-0",
     which is pretty common in publically distributed PGN files.
7-8-96: Arasan 3.0
  1. This version of Arasan is a 32-bit only program.  Windows 3.1
     is no longer supported.
  2. The opening book code has been modified (again) to support
     larger books.  Arasan 3.0 stores the book in a binary data file
     (book.bin), instead of a DLL.  The opening book is substantially
     larger than version 2.2 (over 50,000 half-moves).  User-
     selectable opening "styles" are now supported.
  3. The search module has been re-written for faster speed.  Changes
     include:
     a. A more conventional alpha-beta routine with separate functions
        for regular and quiescence searches.
     b. The addition of the "internal iterative deepening" feature
        used in Hitech and Crafty.
     c. Capture extensions and check extensions are not limited to
        a small number of plies as in Arasan 2.2.
     Arasan 3.0 searches at least twice as fast (in terms of
     nodes/second) as Arasan 2.2.
  4. As part of the performance improvements, the "threat score"
     component of the scoring function has been removed.
  5. "Killer" moves are now saved only if they are non-captures. Two
     killer moves are kept and when a new one is set the previous
     one is retained.  Both changes reduce tree size.
  6. Arasan now uses the history heuristic.  After killer moves,
     Arasan tries the remaining moves in order of their history
     scores.
  7. The search module now calls PeekMessage less frequently.
     This speeds up operation under Windows 95 quite a bit.
  8. Several bugs in the scoring routine have been fixed.  Some
     more and better endgame scoring terms have been added.  Some
     errors in the "fine" and "ece3100" test files have been
     corrected.
  9. options.cpp has been recoded to use the Windows Registry, as per
     the Windows 95 setup guidelines. 
  10. "Advanced" search options can now be set via a new dialog.
  11. An installation and uninstall program is now provided.
12-5-95: Arasan 2.2
  1. The null-move search now takes the more aggressive approach of
     reducing search depth by 2 plies, instead of 1 ply as used in 
     Arasan 2.1.
  2. The "rook mobility" positional scoring term has been removed.  It
     seemed to cause more problems than it solved.
  3. Search::evalu8 now tries to avoid calculating the threat score
     (a component of the positional score), if cutoff can be achieved
     without calculating it.
  4. The search routine has some code added to skip the non-p.v. move search
     if the score is outside the alpha beta window, or if mate or 
     stalemate has been found.  The latter fix keeps the program from
     searching >1 ply when it is stalemated (a bug in Arasan 2.1).
  5. The arasan.log file is now written to the directory where
     arasan.exe is stored, instead of the current directory.
  6. Scoring::check_en_prise has been recoded.  This function is used
     both for positional scoring and move ordering.  When called from
     the move ordering routine, it assumed that the attacking side is
     board.Side() and the defending side is board.OppositeSide() -
     this was not always true.  Fixing this has improved move ordering
     substantially.
  7. When replaying a game, the game result is now displayed after
     the last move.
  8. More fixes were made to the EPD output.  Thanks to Steven Edwards
     for help in getting this right.
  9. Removed the "Change Sides" command.  This in effect allowed the
     user to make an illegal move (a double move by one side), which
     caused many problems.
  10. The "Randomize moves" option was not being saved on exit and
     restored on startup.  Also made a fix in the search module to
     avoid infinite loops when this option is on.
10-21-95: Arasan 2.1
  1. Several fixes and enhancements have been made in the search module,
     especially in the null move code.  As a result, Arasan 2.1 is
     about twice as fast in completing a search compared to version 2.0.
  2. Arasan is now more aggressive about allocating memory for the hash
     table.  Generally it will use about twice as much RAM as version 2.0.
  3. The opening book was changed to a more compact format, to allow
     somewhat more opening moves.  The book now contains over 20,000
     positions.
  4. The PGN parser now handles things like "0-O-O" for castling.  Also,
     a game may now end with the "*" symbol (meaning the game is incomplete).
  5. A fix was made in Move_Generator::Check_Evasions for check evasion
     moves that happen to be promotions.
  6. Fixed a bug in Bearing::Pinned.
  7. Fixed some bugs in EPD output.
  8. The window size and position are now saved on exit and restored on
     startup.
  9. The Preferences and Search Limits dialog boxes have been converted
     to property pages.  A bug was fixed where exiting the Search Limits
     dialog without changing the settings caused the search to
     terminate.
  10. A color selection property page has been added.
7-1-95: Arasan 2.0
  1. Possible crash bug in Log module fixed.  This occurred when there
     was no predicted move after a search (rare, but possible).
  2. A fix was put into the Notation module for handling "Informant-
     style" capture moves (no "x").  This is mostly important for the
     opening book program ("makebook").
  3. The PGN reader did not handle games that ended with the checkmate
     symbol ('#').  This has been fixed.
  4. The "Resume" command in the Clock menu was not working.  It has been
     replaced by a "Pause" command that toggles the clock state.
  5. The "Computer plays White" menu command now has a check mark to
     indicate the current state.
  6. English opening names were not being shown in some circumstances.  A
     fix was made for this in ECO.CPP.
  7. The computer failed to correctly announce check after making a book
     move, or in some cases would announce it when there was no check.
     This was fixed (in CArasanView::update_board).
  8. The PGN and EPD readers have been improved to more gracefully handle
     bad input (e.g. control characters).  Also, a bug that could cause
     the EPD reader to hang was fixed.  Empty PGN games (no move section)
     could also cause a hang - fixed.
  9. Fixed a crash when ^O was typed (16-bit version only).
6-1-95: Arasan 2.0 beta
  1. Converted to use MFC and Visual C++.  One code base for 16 and 32
     bit versions.
  2. ECO classification implemented.
  3. EPD file support added.
  4. Opening book is now stored in a DLL.
  5. On-line help implemented.
  6. The parameters in the Scoring module have been adjusted to give
     better play in the opening and early middlegame.  This hasn't helped
     performance on the test suite, but I still think it plays better.
  7. The positional scoring routine has been consolidated into one function,
     for efficiency reasons.
??-??-95: Arasan 1.5 (not released)
  1. Casting moves that give check (e.g. O-O-O+) were not being
     parsed by the PGN reader.  Also, the PGN writer now puts out
     the '#' symbol for checkmate.
  2. Implemented the "deep null" algorithm described by Chr.
     Donninger, ICCA Journal v. 16 no. 3, 1993.
11-1-94: Arasan 1.3
  1. Fixed the following bug: when replaying moves with ^F, after a
     promotion move, the piece being promoted to was invisible.  It
     was actually there and became visible after the next move.
  2. Made a small change to the hash insertion code.
  3. Increased MoveGen::MaxMoves to 200.  This fixed a crash in
     test 330 in the ECM test suite.
  4. Fixed a bug in Bearing::Pinned.
  5. Several fixes and extensions have been made in the Notation
     module.  It now accepts a wider range of input formats and
     produces more correct PGN output.
  6. The version # was not being shown in the About box - fixed.
  7. Fixed a bug in makebook.cpp that caused many weights in the
     opening book to be wrong.
  8. Fixed a possible crash when the side to move is stalemated and
     the time control is set to Time_Limit, Game, or Tournament.
  9. The principal variation is searched with a wide but not infinite
     window.  It is now re-searched with a wider window if the
     initial search value is outside the search bounds.  Also,
     the constant Inital_Search_Window has been changed to 180,
     which seems to give a bit better performance.
  10. More additions to the opening book.  Added WCSAC test suite.
8-16-94: Arasan 1.2a
  1. Fixed a bug in the Options module: caused assert failure if
     arasan.ini was not present on startup.
  2. Fixed two bugs in computation of attack info.  One could
     occur after an en-passant capture.  The other case in which
     attack info could be incorrect was following a castling move.
     Added some debug code (-DDEBUG_ATTACKS) to test attack updating.
     Also corrected a bug in Search::draw.
  3. Added some more test suites.
8-6-94: Arasan 1.2
  1. Fixed a time control bug in module Search.  This was causing
     the program to fail Bratko-Kopec test #12.
  2. Added a positional scoring term to penalize the program for
     placing pieces in front of unadvanced center pawns.  Also
     added a knight mobility score and made some changes to the
     computation of bishop mobility.  Center control scoring
     parameters have also been tweaked, for better performance in
     the opening.
  3. TESTSRC has been converted to accept a subset of the Extended
     Position Description (EPD) format.  All the test suites have
     been converted to this format, which allows storing the key
     move and position together in one file.
  4. Two new types of time control, "Tournament" and "Game", are
     now supported.  A secondary time control can be specified.
  5. Arasan now retrieves the predicted game continuation from the
     hash table.  The code used in earlier versions to keep track
     of the predicted continuation was unreliable.
  6. A couple of improvements have been made to the search extensions.
     The search is extended if a capture move is made and the capturing
     piece is "backed up" by another piece of the same color.  Also,
     the constant Check_Depth has been changed to 2.
  7. Since the whole point of trying the null move is to cause cutoff,
     Arasan no longer repeats a null move search with a wider window
     if cutoff fails, as it used to.
  8. The log was not being cleared before a "Load Game" command
     was executed, so if this command was executed twice, the second
     time the game would not load correctly.  This has been fixed.
  9. The opening book has been expanded to approx. 10,000 half-moves.
 10. The hash table stores the repetition count for a position.
 11. The Notation module had a bug.  A move might be incorrectly flagged as
     ambiguous if two pieces had possible moves to the destination square,
     but one of them happened to be pinned.  This is now handled.

4-27-94:  Arasan 1.1.
  This version has no user interface changes.  However, there are
  a number of bug fixes and internal improvements:

  1. In saving a board using FEN, the en passant square was not
     being written out when an en passant capture was possible.
  2. In reading in a board from a position file, the en passant
     square in the board class was set incorrectly.
  3. Arasan would prevent the user from escaping check by making
     an en passant capture.  This has been fixed.
  4. When saving a game, the month was being written incorrectly
     in the PGN date field.  This has been corrected.
  5. In the hash table used by the Search class, the ply was
     being stored instead of the depth (limit-ply).  This caused
     some nodes to be evaluated by table lookup when they should
     have been searched.  This a couple of other hash table
     bugs have been fixed.
  6. Castling and en passant status is now stored in the hash
     table and must match that of the current board for a
     position to be retrieved from the table.  To be 100% correct,
     the repetition count should be stored too, but that is
     still not done.
  7. The move ordering calculation in class Move_Ordering has
     been improved.  In most cases, this will make searching
     faster (however, this is partly masked by the hash table
     fix, which makes some searches slower).
  8. At each iterative deepening, the search used to try moves in
     the order of scores returned by the previous search.  Now it
     tries the highest-scoring move first, but calls Move_Ordering
     to sort the remaining moves.  This is another speed enhancement.
  9. The search module now always starts with a 1-ply search -
     it used to begin with a 2-ply search; this could cause
     the program to miss a one-move mate and play instead a
     mate in 2.
 10. A search now terminates when the side to move detects that
     its opponent has a forced mate in n, where n <= search
     depth.  Further searching will not change the score.
 11. In some cases, the search routine was not performing the
     forced move extension.
 12. Additions and improvements have been made to the endgame
     evaluation in module Scoring.  These changes significantly
     improve the program's play in simple king and pawn endgames.
     However, the program is still fairly dumb about endgames.
 13. The "TESTSRC" program (distributed with the source) has been
     extended so that it can read >1 position from a single file.
     The test suites distributed with version 1.0 have been
     consolidated into single files.  Also, a file has been added
     (WINATCHES.FEN) containing the 300 "Win at Chess" problems.
 14. Rebuilt .EXE with Borland C++ 4.0.

3-8-94:  Arasan 1.0 initial release

