-------------------------------------------------------------------------
-- ChangeLog
-------------------------------------------------------------------------

3.9.1 released December 21, 2010

- removed automake-1.4.patch from doc/Makefile.am
- visual studio project files and config.vc removed in favor of cmake build
- copyright notices updated for 2010
- remove reading_cache_clear() calls between silent_examine_position() and
  owl reading functions.
- remove assertion from influence_erase_territory() to avoid crashing
- view.pike updated from GTK 1 to GTK 2
- cross-compilation support added to uncompress_fuseki.c
- revised generation of hashvalues.
- give small bonus to attacking vital moves in owl_determine_life()
- allow tactically unstable owl lunches to be inessential
- new static function test_unstable_lunch_essentiality()
- break out new static function test_lunch_essentiality() from
  owl_find_lunches()
- capture big nakade to get out of atari in semeai even if tactical
  reading disagrees
- play common liberties in semeai with sufficient remaining liberties,
  even if tactical reading believes it is unsafe
- remove redundant function semeai_propose_eyespace_filling_move
- do not play common liberties after having already passed
- fall back to ordinary reading in attack_either and defend_both if the
  two strings are in fact the same
- never consider backfilling move for common liberty inside own eyespace
  as risk free.
- do_owl_analyze_semeai() can distinguish between outer liberties and
  eyefilling moves, also chooses the latter correctly
- recognize_eye() can optionally find out at which points eyefilling can
  safely be done
- new static function optical_graph_matcher() broken out of recognize_eye()
- do not make domains for second owl in owl_make_domains()
- do not consider also passing to get seki in semeai reading when stackp>0
- new helper function bent_four_helper()
- analyze_eyegraph improvements
- TODO completely rewritten
- revision of dragon_looks_inessential
- fix overflow in computation of node limits
- do not crash if gtp_aa_confirm_safety is fed an illegal move
- score seki eyes correctly in aftermath scoring with Chinese rules
- avoid overvaluation of eyespaces which are split by a single stone in atari
- avoid playing inside own eyespace to capture lunches in semeais
- do not crash on replacement moves conflicting with unconditional analysis
- guess_eye_space() revised
- major revision of eyes.db
- improve_lunch_attack() in owl.c revised
- filter out send-two-return-one moves in worm_reasons()
- owl tuning
- tuning
- new and revised tests

3.8 released February 17, 2009

- added Wietze Brandsma to THANKS
- revised config.vc
- revised NEWS
- restored missing mkmcpat.dsp, regress.cmd

3.8rc1 released February 6, 2009

- revisions to montecarlo.texi
- revised .dsp files
- Lee Fisher added to AUTHORS
- WINDOWS doc and install.texi revised per Lee Fisher's changes
- mkmcpat puts 16 items on a line instead of 8
- (unsigned char) and (unsigned short) explicit typings
- missing files added to EXTRA_DIST
- copyrights updated to 2009

3.7.13 released December 23, 2008

- restore cmake files that were missing from the 3.7.12 tarball
- bring copyright date to 2008
- doc revision
- be forgiving with replacement moves conflicting with unconditional analysis
- accept --enable-socket-support even if configure test fails
- add globals.c to mkmcpat for OS/X build

3.7.12 released April 7, 2008

- cmake configuration files for generating MSVC project files
- minor doc revision
- new options --mc-patterns, --mc-list-patterns, and --mc-load-patterns
- tunable local patterns for Monte Carlo simulations
- try harder to find the right move to make seki in find_moves_to_make_seki()
- better heuristics to avoid calling semeai reading in
  find_moves_to_make_seki() in hopeless cases
- never amalgamate dragons over three-liberty strings and sometimes not
  over two-liberty strings
- send_two_return_one() moved from utils.c to board.c and reimplemented
- new file engine/montecarlo.c
- new options --monte-carlo and --mc-games-per-level to use Monte Carlo UCT
  search on 9x9 and smaller boards
- call check_boardsize() from play_gmp.c to avoid crashing on bad board sizes
- new function check_boardsize()
- bugfix in handling of foreground color with ncurses
- orientation invariant board hashes added
- tuning
- add STS-RV semeai regression test suite
- new and revised tests

3.7.11 released November 1, 2007

- gtp-commands.texi is not built automatically
- updates texinfo.tex
- minor doc revision
- revised configure.in, aclocal.m4 and *Makefile.in for recent autotools
- removed acconfig.h
- don't play send-two-return-one in tactical reading attack moves
- bugfix in reevaluate_ko_threats() to avoid a crash
- more efficient aftermath moves
- version 3 of GPL and update copyright for 2007
- new static function remove_eye_filling_moves() in owl.c
- semeai reading revisions
- look more ambitiously for back-capturing moves in attack1()	
- generate cut move reasons for cutting moves found during find_connections()
- fix compilation with MAX_BOARD set to low boardsizes (>= 7 tested)
- performance tuning in do_owl_analyze_semeai()
- detect unconditionally meaningless moves
- get_lively_stones() revised to be valid also for stackp>0
- bugfix in compute_owl_escape_values()
- moves can be marked as known_safe_moves by patterns
- bugfix in compute_surroundings()
- owl tuning
- new and revised tests

3.7.10 released May 21, 2006

- gnugo.dsw and uncompress_fuseki.dsp revised
- configure.in revised to improve socket support detection on windows
- gameinfo_play_sgftree_rot() revised to fail gracefully
- new static really_do_trymove() and is_superko_violation()   in board.c 
- board hashes stored in the move history
- is_legal() no longer depends on allow_suicide
- new is_allowed_move() to determine legality for current suicide and ko rules 
- new global variables suicide_rule and ko_rule
- illegal moves replaced with passes near the end of do_genmove()
- reevaluate_ko_threats() revised
- under superko rules look for ko threats also if best move illegal
- new options --forbid-suicide (default) and --allow-all-suicide
- new options --simple-ko (default), --no-ko, --positional-superko, 
  and --situational-superko 
- is_allowed_move() used instead of is_legal() in play_gtp.c, play_ascii.c
  and play_solo.c  
- identify_thrashing_dragons() called earlier in make_dragons()
- do not play self-atari while splitting eyespaces in aftermath_genmove()
- in do_owl_attack(), don't consider send-two-return-one defender moves
- send-two-return-one moves not tried in find_more_attack_and_defense_moves() 
- send-two-return-one moves not tried in   find_worm_attacks_and_defenses()
- string connection bonus for ko captures reduced in move_connects_strings()
- maximum bonus from secondary move values limited to 0.4 points
- more legality checking in fill_liberty()
- detect_tactical_blunder() revised to avoid finding illegal defense moves
- semeai.tst reordered
- new option --limit-commands to regress.pike
- new testfile 13x13c.tst
- do not try to add an sgf circle for pass moves in replay_node()
- new enum same_dragon_value in owl.c
- new owl_defendpats.db classification "a" for connecting all friendly 
  stones to the goal
- owl tuning
- influence tuning
- tuning
- new and revised tests

3.7.9 released March 10, 2006

- new GTP command advance_random_seed <games>
- make update_random_seed() deterministic
- fix assertion failure in semeai()
- semeai attack and defense codes added to struct dragon_data2
- in estimate_territorial_value(), let stones have influence strength also
  when their safety depends on ko	
- unify internal handling of limit_search and restricted_genmove
- new function play_lib_n() in utils.c and autohelper functions
  oplay_lib/xplay_lib
- new static function modify_eyefilling_move() in owl.c
- do not reset permeability around dead stones
- do not consider moves playing into snapback in
  do_find_more_owl_attack_and_defense_moves()
- new function playing_into_snapback() in utils.c
- only call do_find_more_owl_attack_and_defense_moves() when stackp==0
- use .strategic_size in estimate_strategical_value()
- new field .strategic_size in dragon_data2, includes bonus for weak neighbors
- use gg_normalize_float2int() in valuate_combinable_pattern_chain() to
  address platform dependencies
- carefully select new owl goal origin
- allow excess strategical value for some single-worm dragons
- include played move in atari-atari blunder analysis
- score.c removed from sources
- owl tuning
- tuning
- new and revised tests

3.7.8 released January 30, 2006

- new global variable handicap
- chinese scoring adds the number of handicap stones in addition to the
  komi to white's score
- include handicap in sgf headers
- dead code removed from influence_evaluate_position() and the rest moved
  to game_status()
- metamachine enabled in ascii mode (as in GNU Go 3.6)
- configure option oracle renamed metamachine (as in GNU Go 3.6)
- new testfile gifu05.tst
- don't try large scale attack if original owl reading was expensive
- teach influence_score() about chinese rules
- copyright notices updated for 2006
- bugfix in unconditional status analysis
- let --capture-all-dead and --play-out-aftermath be effective also when
  playing out a game for scoring (e.g. --score finish)
- semeai analysis turned off when there are a huge number of dragons
- MAX_STRINGS value corrected
- new assertions that the next_string pointer hasn't overflowed
- hash flag bits and -H option removed
- default size of reading cache set to a fixed number of entries instead
  of a fixed amount of memory, improving platform independence
- update information about valid boardsizes in gnugo.pod
- bugfix for drawing 1x1 board in play_ascii.c
- regress.pike can run multiple engines in parallel (-j option)
- correction of color in order_moves() call in reading.c
- doc revision, updated instruction for setting up HTML regression views
- find_connection_moves() revised
- GTP command dragon_data fixed to give well-formed output also on empty
  board
- update regress.pl and regress.plx to count connection nodes instead of
  life nodes and expect reg_genmove instead of gg_genmove
- remove gnugo_play_sgftree(), gnugo_genmove(), gameinfo_load_sgfheader(),
  and gameinfo_play_move() from engine/interface.c
- 1D conversion of gnugo_play_move()
- new function get_sgfmove()
- let semeai code pass if no riskless move was found
- do not hardwire owl node limit for large scale attacks
- remove many unneeded configure tests
- READLINE compile (warning) fixes
- complete rework of clock.c, using level adaption logic from play_gtp.c
- use more tactical moves in do_owl_analyze_semeai()
- unused function transform2() removed
- report_worm() made static in worm.c
- hashdata_to_string() revised for consistency between 32 and 64 bit platforms 
- bugfixes in do_aftermath_genmove()
- adjust readconnect node limit when starting search at higher stackp
- new function get_depth_modification()
- removed functions set_temporary_depth_values()/restore_depth_values()
- always set dragon status to ALIVE if owl_status is UNCHECKED
- correct C-code footer in uncompress_fuseki.c for all values of
  NUM_HASHVALUES 
- play_replay() and replay_node() partially rewritten
- tuning
- new and revised tests
	
3.7.7 released October 9, 2005

- FSF address corrected in COPYING
- large scale improvements
- use signed char instead of char most of the time in the engine
- string_to_location(), debug_influence_move(), and report_worm()
  converted to 1D
- get_level() removed from genmove.c
- documentation update
- remove long deprecated command hurry from play_ascii
- use signed char in connected_components() in owl.c
- rotation support for --decide_* options removed
- remove trivial wrapper functions from engine/interface.c
- patterns/transpat.c, patterns/patlib.c, and patterns/patlib.h removed
- unused game records in regression/golois removed
- makevcdist.pl updated and re-run
- all Makefile.in regenerated
- debugboard traces from Makefile and configure removed
- endgame1.tst removed from distribution but not from CVS
- cutstone.tst, semeai2.tst, and *_rot.tst removed
- debugboard removed	
- support for pattern based reading (EXPERIMENTAL_READING) removed
- support for tree based pattern matching removed
- view.pike: support multiple tests as argument
- test revisions
- consistently initialize global variables in globals.c (not main.c)
- large scale code reorganized
- fullboard support (-f option) remove from mkpat
- atari_atari tuning
- endgame tuning
	
3.7.6 released September 21, 2005

- a few missing game records restored
- revised patterns.dsp and new uncompress_fuseki.dsp

3.7.5 released September 20, 2005

- revision to patterns.dsp (but more revision needed before VC will compile)
- send usage messages caused by bad input to stderr	
- new, larger fuseki database added as compressed files
- new files patterns/compress_fuseki.c and patterns/uncompress_fuseki.c
- use a fullboard hash for fuseki database patterns
- new array comulative_goal in local_owl_data
- don't count former owl goal dragon stones towards escape measure
- removed PROFILE_MATCHER
- handle CRLF newlines correctly in view.pike	
- new static function squeeze_moves() in reading.c
- fix komaster problem
- do not trust connection moves to be safe in
  estimate_territorial_value() 
- add random move value contributions also for pure ko threats
- new and revised tests

3.7.4 released June 12, 2005

- copyright notices updated for 2005 and new FSF address
- bugfix in find_backfilling_move in filllib.c
- make fast_defense() aware of under-the-stones tesuji
- make superstring_break_chain_moves() attack 3-liberty chains
- unused code to compute genus removed from make_dragons()
- owl tuning
- atari-atari tuning
- optics tuning
- tuning
- new and revised tests

3.7.3 released March 22, 2005

- special_rescue_moves() allows self atari moves which may set up a snapback
- increase depth after filling liberties in endgame_find_backfilling_dame()
- try harder to find safe backfilling moves in endgame_find_backfilling_dame()
- revised heuristics to find a font file in view.pike
- avoid crashing on bad engine paths when starting a new engine in view.pike
- move_connects_strings() revised
- outcommented patterns removed
- ignore off board vertices in openregion() in fuseki.c
- Revise diagonal value in topological_eye() to account for damezumari
- owl tuning	
- new and revised tests

3.7.2 released January 20, 2005

- gnugo.el: Grid display implemented
- gnugo.el: SGF handling improved
- gnugo.el: Undo and Redo related enhancements
- gnugo.el: Primitive edit mode
- gnugo.el: Regression view mode
- Doc revision (Emacs mode in using.texi)
- use print_numeric_influence() for printing escape influence
- take neighbouring half/false eyes into account when estimating lunch value
- do not trust strategic attack and defense moves to be safe when scoring
- thrash_around_helper() returns false if fuseki is disabled
- value_territory() revised to disable certain reductions of the territory
  value when scoring
- regress.pike revised so that previous output can be used as input
  with -f to rerun tests with unexpected results
- connection_value() revised
- use influence-based score estimate instead of Bouzy's algorithm
- new global variable white_score, black_score
- should_resign() now depends on optimistic_score instead of average_score
- added support for GTP over TCP/IP sockets on Windows
- new static function all_own_neighbors_inessential() in aftermath.c
- do_aftermath_genmove() revised
- breakage2tst.py now produces command line for regress.pike
- further revision of thrashing dragon heuristic
- try harder to find backfilling moves in fill_liberty()
- find_backfilling_move() in filllib.c revised
- test_attack_either() revised
- fixed anchor building of owl_attackpats.db repaired
- thrashing dragon heuristics revised
- readline support in ASCII mode
- liberties and neighbors list broken out of string_data array in board.c
  for speedup
- new functions remove_double_blocks(), check_double_block() to improve
  territorial evaluation at places where an intrusion is possible
- stop using worm data at stackp==0 in does_attack() and does_defend()
- concerns_noncritical_dragon() revised
- MIN_BOARD reduced to 1
- free memory allocated in a failed read of an sgf file
- extract_fuseki revisions: statistics on outcomes,
  popularity cutoffs based on unique players added to command line
  parameters, tweaks and bugfixes in game selection
- atari_atari moves considered blocking in estimate_territorial_value()
- MAX_LIBERTIES reduced to 8
- popgo() bugfix to repair sgf traces	
- do_owl_analyze_semeai() revised
- emacs variant of ascii interface removed
- give less bonus to connection moves when scoring
- influence tuning
- owl tuning
- tuning
- new testsuite tiny.tst
- new and revised tests
	
3.7.1 released November 23, 2004

- new function send_two_return_one() in utils.c
- don't consider send-two-return-one moves in
  do_find_more_owl_attack_and_defense_moves() 
- does_attack() made ko aware
- new GTP commands does_attack and does_defend
- sgfnode.c (readsgffile): Do not fclose stdin.
- gtp.texi (GTP command reference): Add @cindex.
- gtp-commands.sed: Use @verbatim. Tighten output. 
- gtp-commands.sed: Move `Function' field into @item line, sans field name.
- doc/ Makefile.am (gtp-commands.texi): Eliminate redundant use of cat(1).
- revision of gtp-commands.sed
- bugfix in main.c: remember to sgfFreeNode(gameinfo.game_record.root)
- allow PASS_MOVE in trymove() and tryko()
- do_trymove() and popgo() revised
- 'printfsgf -' supported from GTP	
- copyright notices added to xpm files
- gnugo.el brought up to Thi's gnugo.el-2.2.8
- new gtp_move_history() for use with gnugo.el
- minor doc revision
- capture_non_invincible_strings() and unconditional_life() moved from
  utils.c to unconditional.c
- resignation option reverted from GTP commands genmove_black and
  genmove_white
- new heuristic to reduce branching factor in connection reading.
- resign rather than pass when all own stones seem dead
- lively_dragon_exists() based on status rather than crude_status
- potential_moves[] array converted to 1D
- distance measures converted from floating to fixed point arithmetic
  in connection reading code.
- owl threats disabled as a command line option
- EXIT_SUCCESS and EXIT_FAILURE used in transpat.c and sgfgen.c
- revised interface to all genmove() type functions
- new global variable depth_offset
- only cache safe_move() results when reading depth is unmodified
- revision of interface/emacs.el
- new interface/xpms/*xpm, make-gnugo-xpms.el and gnugo-xpms.el
- break_chain2_moves() revised
- special_attack4_moves() revised
- defend_secondary_chain_moves() revised and split into two functions
- check_self_atari() in readconnect.c revised
- devalue tactical defenses of owl critical dragons when there are
  better owl defenses elsewhere 
- find_moves_to_make_seki() extended to examine the case of dead stones
  inside the eye of single-eyed dragons
- added support for GTP communication over TCP/IP socket;  GNU Go can
  both connect and listen
- bugfix in break_in_goal_from_str(): check pos+delta on board
- bugfix in sgfStartVariant
- constrain thrashing dragons more often
- hashing cleanups
- missing files added to EXTRADIST in Makefile.* in doc/ and regression/
- new file logo-36.pdf
- DFA micro optimizations
- Test results updated: cvs tag rel-3-7-1-pre-1
- use int arrays instead of char arrays to mark eyes in
  owl_determine_life() and dependent functions
- added .eps-version of new logo
- help string revised
- warnings fixed
- doc revisions
- TODO revised
- basic strategies to break mirror go implemented
- matcher_check verbosity refined
- new function are_neighbors()
- 9x9 opening moves tuned
- view.pike enhancement: switch to new test case
- debugging enhancement: owl goal marked in sgf trees
- new move reasons POTENTIAL_SEMEAI_ATTACK/DEFENSE to defer analysis of
  possible semeai winning moves until move valuation
- infrastructure to cut owl goal dragons
- new owl pattern class C: threaten to cut owl goal dragon
- view.pike enhancement: owl_does_defend/attack
- crash in owl_hotspots() fixed
- view.pike enhancement: directly start sgf viewer
- remove special case of CLASS_C in matchpat.c
- influence tuning
- owl tuning
- endgame tuning
- tuning
- implement persistent semeai caching
- don't crash on some .sgf-files from kgs
- NEWS updated
- refer to 3.6 instead of 3.4 in docs
- new and revised tests

3.5.10 released August 7, 2004

- move initalization of ..._vital_points to initialize_dragon_data()
- persistent caches reorganized to share common code

3.5.9 released July 18, 2004

- bugfix in read_eye()	
- bugfix in fast_defense()
- improved printing of hashvalues
- bugfix in atari_atari_blunder_size()	
- new static function dump_board_sgf() in printutils.c
- abortgo() no longer unwinds the stack but prints an sgf file
- new and revised tests
- doc revision

3.5.8 released June 8, 2004

- make `mkpat' detect duplicate pattern names
- duplicate pattern names renamed
- reduce DFA_MAX_MATCHED 20 times 
- calculate actual maximum dfa with new dfa_calculate_max_matched_patterns()
- remove unused configure option --experimental-semeai
- add missing output to --options
- new static function special_rescue4() called from defend2() in reading.c
- fast_defense() now heuristically looks for neighbors to capture
- don't restore random state in hash_init() and keyhash_init()
- major `view.pike' revision, added new "single window" mode
- break_chain2_moves() revised to generate more backfilling moves
- atari_atari_blunder_size() now returns multiple defenses, better verified
- remove %r support from gprintf, use result_to_string() instead
- double_atari_chain2() revised to generate more moves
- new argument recompute_dragons to owl_analyze_semeai_after_move()
- owl_mark_dragon() and init_owl() revised
- detect_tactical_blunder() revised
- value of tactical blunders doubled to twice the effective size of the string
- not a blunder if a string alive in seki is saved when outer liberties filled
- normalize apos, bpos in do_owl_analyze_semeai
- find_cuts() called from make_dragons() instead of make_domains()
- new compute_new_dragons() and new static join_new_dragons() in dragon.c
- new global array cutting_points[]
- cut field removed from struct eye_data
- INHIBIT_CONNECTION bit no longer used in the type field of struct eye_data
- find_cuts() no longer allowed to modify eyespaces
- bugfix in do_owl_analyze_semeai()
- tuning
- new and revised tests

3.5.7 released May 27, 2004

- minor revisions in score.c
- regress.pike measures uncertainty of moves
- global variable hashdata renamed to board_hash
- hashdata_compare() function removed
- fields in struct stats_data updated for new cache
- initialization of Zobrist random numbers in hash.c and cache.c unified
- new function hash_init_zobrist_array() in hash.c
- hashdata_remainder() never uses more than the 32 lowest bits of hash value
- hashdata_NULL, hashdata_clear(), and hashdata_init() macros removed
- any number of MIN_HASHBITS can now be used
- ROUTINE_COSTS revised
- find_connection_moves() revised
- always print copyright string on stdout
- do not include "Version" in the --version output
- old cache implementation removed
- ignore inessential critical dragons in in dilate_erode()
- TRACE_CACHED_RESULT* macros implemented for new caching scheme
- old cache implementation commented out
- new file engine/unconditional.c added
- break-in reading tuned
- safety checks improved for owl defense moves
- bugfix in find_neighbor_dragons()
- attribute "noreturn" for abortgo()
- don't add child to root node in sgffile_printboard()
- remove color parameter from examine_position(), compute_eyes_pessimistic()
- new arrays white_vital_points and black_vital_points
- read_eye() stores vital point in new arrays when add_moves == 1
- new functions find_lunches(), revise_inessentiality(), eye_computations()
  broken out of make_dragons()
- VITAL_EYE_MOVE almost retired
- fix bugs in recursive_break()
- owl tuning
- new and revised tests

3.5.6 released April 23, 2004

- new configure and runtime option large-scale
- new change_owl_nodes()
- gprintf supports %r
- cleanup of patterns/*.sgf
- revision of dragon_invincible()
- suppress copyright notice in ASCII playing mode or with --version
- copyright string shortened
- new GTP commands move_probabilities and move_uncertainty
- bugfix in unconditional_life()
- owl_update_goal() overrides same_dragon == 0 in obvious cases
- new and revised tests

3.5.5 released April 15, 2004

- moved TRACE_READ_RESULTS definition to hash.h
- initialize lunch data for single owl move
- bugfix in compute_eyes_pessimistic(): initialize chainlinks[]
- improved sgf trace in trymove: location of tried move noted
- complete conversion to new cache
- add priority to reading results in new cache
- kill unused hash_ng_init()
- minor statistics improvements
- enlarge owl goal when it has had lunch
- komaster and kom_pos made static variables in board.c
- edge_block_moves() proposes more moves
- don't try to undo when stackp is not zero (GTP mode)
- support for multiple engines in view.pike
- more info about semeais in dragon_data2
- double-check owl attack moves against dragons involved in semeai(s)
- be less optimistic about large, but bulky eyespaces
- support for 'make gnugo.pdf' and make 'gnugo.html' in doc/
- slowest move statistics from regress.pike
- update usages of time_report()
- `twogtp.pike' can now use third engine (arbiter) to score games
- breakin and readconnect fixes
- first implementation of owl threat combinator--intended for improving
  move ordering
- pattern attributes (shape, followup etc.) are now stored in lists, not
  in `pattern' structure
- there is now a possibility to define virtually unlimited number of new
  pattern attributes
- common code of shapes_callback() and joseki_callback() is broken into
  new static function handle_joseki_patterns()
- new function do_find_more_owl_attack_and_defense_moves() broken out
  of find_more_owl_attack_and_defense_moves()
- induce_secondary_move_reasons() tries to upgrade induced reasons to
  owl attacks/defenses with do_find_more_owl_attack_and_defense_moves()
- strategical attack move reason is induced for saving certain worms
  adjoining weak opponent dragons
- major improvement of analyze_eyegraph functionality in optics.c
- adjust min_level and max_level if --level is set outside their range
- do not malloc() 0 bytes in pattern_list_build_heap()
- aftermath_final_status() declaration moved from gnugo.h to liberty.h
- bugfix in find_connection_moves()
- bugfix in hashdata_init macro
- caching enabled for unbranched owl nodes
- comments added explaining heap in readconnect.c
- provide links to html regression views from regress.sh
- semeai analysis in make_dragons() postponed until after revision of
  inessentiality 
- identification of thrashing dragons in make_dragons() postponed
  until after semeai analysis 
- avoid overflow in reading_cache_init()
- converted owl to use new cache implementation
- owl tuning
- new game records and test cases

3.5.4 released January 23, 2004

- copyright 2004 added to copyright notices
- new static function capture_non_invincible_strings() broken out of 
  unconditional_life()
- unconditional_life() revised
- new semeai_propose_eyespace_filling_move() tries to play inside eyeshapes
- number_of_dragons initialized in initialize_dragon_data()
- new option --gtp-dump-commands to dump all incoming GTP commands to file
- new function and autohelper owl_lunch()
- lunches_are_current field no longer reset in owl_safe_move()
- don't claim levels higher than 10 are unsupported
- new GTP command unconditional_status
- estimate_lunch_eye_value() revised	
- avoid calling owl_substantial() when not needed in aa_compute_status()
- value_move_reasons() revised
- special_rescue6_moves() revised
- find_connection_moves() revised
- computation of NUM_HASHVALUES corrected in hash.h
- hashdata_to_string reimplemented
- defend4() and special_rescue_moves() revised
- avoid ko captures when filling outer liberties in semeai reading
- adjust breakin_depth in modify_depth_values()
- atari_atari tuning
- endgame tuning
- eye tuning
- fuseki tuning
- influence tuning
- owl tuning
- tuning
- new test suite unconditional.tst
- new game records and test cases

3.5.3 released January 7, 2004

- new GTP command kgs-genmove_cleanup
- compute_crude_status() revised to consider dragons with big
  territorial moyo value as alive
- semeai moves considered safe in mark_changed_dragon
- compare number of eyes when both colors pass in
  do_owl_analyze_semeai() instead of always consider it a seki
- do not use the attack point from owl if owl considers a dragon dead
  but semeai revises it to critical
- bugfix in break_through_helper() in reading.c
- new static function close_enough_for_proper_semeai() in semeai.c
- liberty_of_dragon() transformed into neighbor_of_dragon() in semeai.c
- in semeai(), be more careful when considering two dragons involved
  in a semeai
- new static function max_lunch_eye_value() in value_moves.c
- when restraining thrashing dragons, do not bother connecting
  inessential strings which cannot provide an eye (in
  estimate_strategical_value()) 
- new autohelper function adjacent_to_stone_in_atari
- new static bamboo_rescue_moves() in `reading.c'.
- computation of safety and status values in make_dragons() revised to
  more robustly handle invincible dragons
- dragon_invincible() revised
- detect_tactical_blunder() revised
- owl stack management reimplemented
- consider semeai worms adjacent to the outside as important in
  owl_analyze_semeai_after_move()
- additional semeai debug output
- let stdout be unbuffered instead of line buffered in play_gtp()
- if one dragon is considerably smaller than the other in a semeai,
  prefer to get ko over seki in do_owl_analyze_semeai()
- in a semeai, consider also the eyespaces including opponent semeai
  worms in order to detect a definite lack of eyespace and to find
  certain vital moves
- off-by-one error in loops over semeai_worms[] corrected
- don't allow "safe" common liberties to depend on ko in
  do_owl_analyze_semeai() 
- new static function find_moves_to_make_seki() in semeai.c
- do semeai analysis for all pairs of critical/dead dragons except
  when one is inessential, other exceptional cases removed from semeai()
- defend4() generates superstring moves
- semeai_move_reasons() revised
- induce_secondary_move_reasons() revised; do not allow owl attack moves
  to induce strategic defense of neighbors if involved in a semeai
- connection_value() revised to never give points for connection to
  inessential strings
- get_influence() revised
- list_move_reasons() revised and made global
- new functions print_all_move_values() and prepare_move_influence_debugging()
- delta_territory cache can be disabled in estimate_territorial_value()
- new GTP commands all_move_values, eye_data, half_eye_data, move_reasons
- GTP command influence replaced by initial_influence, move_influence, and
  followup_influence
- GTP command clear_cache now also clears the non-persistent cache
- bugfix in corner_add_pattern() (mkpat.c): labels must be rotated too
- spread_connection_distances() now delays expensive constraint evaluation,
  storing pending evaluation on a heap
- new function signed_mark_string()
- computation of active area revised in store_persistent_connection_cache(), 
  store_persistent_breakin_cache(), and store_persistent_owl_cache()
- move_is_marked_unsafe() in move_reasons.h revised
- modify_stupid_eye_vital_point() revised
- influence tuning
- fuseki tuning
- eye tuning
- endgame tuning
- owl tuning
- tuning
- new test suite seki.tst
- new game records and test cases

3.5.2 released November 5, 2003

- Cosmic GNU Go disabled by default.
- report_dragon() revised
- gtp_worm_data() revised
- pattern tagging
- regress.sh revised
- regress.pike revised
- attack2() revised
- defend4() revised
- slow sorting in get_next_move_from_list() is replaced with heap sorting
- new static functions pattern_list_build_heap() and
  pattern_list_get_next_pattern() in `engine/owl.c'
- new command line option --no-cosmic-gnugo
- remove global variables score, lower_bound, upper_bound
- remove (level >= 8) condition for estimate_score() call
- pass our_score instead of score to the move valuation functions
- tuning
- influence tuning
- owl tuning
- joseki tuning
- new game records and test cases

3.5.1 released September 4, 2003

- semeai() revised to better handle certain cases of multiple simultaneous
  semeais 
- find additional semeai moves in semeai_reasons()
- added more robust handling of .dtr files
- removed option to build pre-rotated DFAs
- unconditional_status in struct worm_data changed to enum dragon_status
- final_status in the aftermath code changed to use enum dragon_status
- enum dragon_status extended with BLACK_TERRITORY, WHITE_TERRITORY,
  and DAME
- new GTP command last_move
- threaten_to_capture_helper() and pattern `Sente12' retired
- no buffering on stdout in ascii mode
- roadmap to engine files in overview.texi updated
- move DEBUG_func to showbord.c
- pattern tuning: remove "t" classification from various patterns
- WHITE_BORDER, BLACK_BORDER, GRAY_BORDER retired 
- colors and komaster state, safety values and dragon status, cache routine
  ids are now "enum"
- board library: remove all stuff that is not directly related to board
  (and move it to the engine)
- board library: new file board.h as public interface, new file boardlib.c
  to collect global variable of the board library;
- board library documentation updated to reflect changes
- new function: hashdata_to_string()
- small_semeai() and small_semeai_analyzer() removed
- support for !experimental_semeai removed
- old semeai() removed and new_semeai() renamed to semeai()
- analyze_semeai(), add_appropriate_semeai_moves(), and liberty_of_dragon()
  removed
- old amalgamation (!experimental_connections) code and patterns removed
- dragon_eye() removed
- basic_cut_helper() and ugly_cutstone_helper() removed
- komaster schemes 1-4 removed
- komaster_is_empty() retired
- komaster_to_string() revised
- KOMASTER_TRACE functionality removed
- new GTP command combination_defend
- revised hash table scheme
- new COSMIC_GNUGO function choose_best_strategy() sets tuning parameters
- new global tuning parameters: minimum_value_weight, maximum_value_weight,
  invasion_malus_weight, strategical_weight, territorial_weight,
  attack_dragon_weight;
- remove unneeded configure stuff, add -Wundef to SOME_WARNINGS
- replace setlinebuf by setvbuf
- add safety_hash field to delta territory cache, reenable this cache
- cgi interface in interface/html directory removed
- owl tuning
- new game records and test cases

3.4 released July 31, 2003

- breakage2tst.py and gnugo-db.el added to EXTRA_DIST
- wariuchi fuseki: invade between shimaris
- new sgmp mode
- regress.pike added to EXTRA_DIST
- revision of copyright notices
- warnings fixed on some platforms
- doc revision

3.3.23 released July 15, 2003

- bugfix in show_dragons()
- redistribution consistency checking disabled for stable release
- gg_genmove replaced by reg_genmove almost everywhere in the regressions
- twogtp.py and twogtp.pike added to gtp_examples/README
- twogtp and twogtp-a made GTP version 2 compliant
- break-in code turned off below level 10; other level cutoffs revised
- support for ranges in sgf files
- time summaries reported with --showtime in gmp mode
- TODO revised.
- clock_init_autolevel() retired
- new global variables min_level and max_level
- new options --min-level and --max-level
- time handling implemented in play_gtp.c
- speedup: move some functionality of update_liberties() to do_remove_string()
- bugfix in do_play_move()
- doc: delete most lists of functions
- doc: remove move_generation.texi overview sections
- doc: reorder
- doc: Consistently use hierarchical structure instead of next/previous/up
- tuning
- owl tuning
- eye tuning
- doc: complete rewrite of first sections of overview.texi
- doc: subsection on 1D board array moved to board.texi
- doc: references to cavities in dragon amalgamation removed
- new game records and test cases

3.3.22 released June 28, 2003

- break-in code turned off below level 9
- VPATH modifications in regression/Makefile*
- new function thrash_around_helper()
- thrashing patterns in patterns.db
- configure --enable-cosmic-gnugo produces a center-oriented engine
- added cache for results of approxlib() and accuratelib()
- new static functions do_approxlib() and do_accuratelib() in board.c
- finish_sgftrace() will not free the trace tree if not written successfully
- remove tabs from twogtp.py
- twogtp.py checks that board is not empty before indexing it
- active area for persistent breakin cache shrinked
- new HIGH_LIBERTY_BIT2 in persistent caches, used by breakin cache
- new function break_chain4_moves()
- owl moves for non-critical dragons discarded
- do_owl_analyze_semeai() revised
- detect_owl_blunder() also looks for semeai defenses
- estimate_strategical_value() revised
- new function defend_secondary_chain_moves() in reading.c
- new parameter be_aggressive to break_chain2_moves(),
  break_chain2_defense_moves() and break_chain3_moves()
- new depth value: break_chain_depth
- defend2() no longer plays on self atari liberties
- superstring_breakchain_moves() renamed superstring_break_chain_moves()
- fix "no moves found" logic in various readconnect.c functions
- new debug flag DEBUG_BREAKIN
- "smaller goal" in breakin.c revised
- be more careful when erasing territory after successful break-in
- break-in move generation bug fix
- endgame_find_backfilling_dame() revised
- new global array forced_backfilling_moves[]
- find_backfilling_move in filllib.c revised
- disable revise_semeai() when doing_scoring
- no bonus for attack or defense of dead potential cutstones when doing_scoring
- reevaluate_ko_threats() revised to avoid playing losing ko threats
- RTRACE and VTRACE retired
- corrected format of AP property in sgf_write_header()
- tuning
- owl_tuning
- new game records and test cases

3.3.21 released June 3, 2003

- revision of owl_strong_dragon()
- extra care is now taken not to waste points on tiny ko threats
- ko threats with large followups always preferred to large reverse followups
- twogtp.py fixed to handle jigo in endgame contests
- made --enable-experimental-break-in the default
- compute_smaller_goal() makes the goal even smaller in the block_off case
- persistent caching for break_in()/block_off()
- inessential dragons handled differently in estimate_territorial_value()
- use smaller goal area when trying to break into territories
- semeai_trymove_and_recurse() propagetes back changes to &owla, &owlb
- copy over old eye_data in do_owl_defend() if escape > MAX_ESCAPE
- new configure option --experimental-break-in
- load_and_score_sgf_file() revised
- detect_tactical_blunder() revised
- ko result codes no longer discarded in owl_analyze_semeai()
- new_semeai() revised
- decide_semeai() in sgfdecide.c revised
- GTP command owl_analyze_semeai renamed to analyze_semeai
- new function owl_analyze_semeai_after_move() and corresponding GTP
  command analyze_semeai_after_move
- gtp_owl_analyze_semeai() revised
- new static function semeai_trymove_and_recurse() in owl.c
- all owl_analyze_semeai regression test cases changed to analyze_semeai
  and revised for new result format
- bugfixes in breakin.c and block_off()
- new helper functions goal_to_hashvalue(), xor_hashvalues()
- new function get_read_result_hash_modified to enable calling functions
  to use a modified hash value when storing/looking up results in cache
- results for recursive_break() and recursive_block() now get cached
- cast to avoid warnings
- documentation revisions

3.3.20 released June 3, 2003

- hoshi.sgf split into hoshi_keima.sgf and hoshi_other.sgf
- new functions recursive_break(), recursive_block() in readconnect.c:
  decide whether a string can be connected to an arbitrary goal area
- new functions break_in(), block_off(), frontends to the functions above
- corresponding GTP commands break_in, block_off
- new file breakin.c evaluates whether territories can be broken in
- new command line --experimental-break-in to evaluate territory break-ins
- retire move_safety check in value_moves.c for territorial move valuation
- read_eye() revised
- `num_defends' field of half_eye_data strtucture renamed `num_defenses'
- maximum 15 points of territorial_value will get shape bonus
- change of semantics for --seed option
- new GTP command printsgf
- debugboard repaired
- TODO revised
- new function partition_eyespaces()
- new function owl_find_relevant_eyespaces()
- cpu time support for regress.pike
- broke new spread_connection_distances() out of compute_connection_distances()
- new spread_connection_distances() tuned
- t moves devalued to value 16
- new function edge_distance() in board.c
- CPU time reported by twogtp.py
- new static function endgame_find_backfilling_dame() in endgame.c
- new static function endgame_find_liberties() broken out of
  endgame_analyze_worm_liberties()
- new owl_mineye() and owl_maxeye() and corresponding autohelper functions
- move_connects_strings revised not to try connecting invincible strings
- ALL_MOVE move reasons no longer considered to guarantee a safe move
- never give cutstone bonus for an inessential string
- new test suite joseki.tst
- do_push_owl() doesn't copy unnecessary fields of local_owl_data anymore
- retire special meaning of owl pattern values 99 and 100
- bugfix in revise_semeai()
- find_half_and_false_eyes() bugfixed
- improve_lunch_attack() revised
- D219 pattern retired
- new pattern action good_attack_threat overrides heuristics in value_moves.c
- new global known_good_attack_threats[][]
- new functions register_good_attack_threat(), is_known_good_attack_threat()
- make delta territory cache aware of base influence recomputation
- owl_find_lunches() revised
- owl_determine_life() bugfixed
- owl.c made completely 1D and other revisions
- new GTP command analyze_eyegraph
- new functions analyze_eyegraph(), evaluate_eyespace(), tactical_life(),
  tactical_life_attack(), and tactical_life_defend() in optics.c
- new functions set_/get_/update_/reuse_random_seed()
- save and restore random_seed where it is set to zero in deterministic
  GTP commands
- adjust conection and semeai depth parameters according to levels
- don't forget to switch exchange sgf_messages in order_moves()
- influence tuning
- tuning
- joseki tuning
- owl tuning
- major eye tuning
- atari_atari tuning
- new tests and test revisions

3.3.19 released April 28, 2003

- change USE_BDIST to 1 in owl.c
- who_wins() invokes silent_examine_position()
- bugfix in do_owl_analyze_semeai()
- global variable urgent retired
- num_stones pointer in do_corner_matchpat() replaced with macro
- joseki tuning
- new game records and test cases

3.3.18 released April 22, 2003

- don't even try 'wrong' liberties in simple_ladder_attack()
- major revision of do_owl_analyze_semeai()
- do_owl_analyze_semeai tracks ko results and result certainty
- semeai tactical phase deprecated
- semeai_trymove() eliminated
- semeai worms redefined
- new r format character supported by vgprintf
- uncertain semeais treated as critical
- new function sgf_trace_semeai() in cache.c used by SGFTRACE_SEMEAI() macro
- new dragon2 fields semeai_attack_certain and semeai_defense_certain
- owl_estimate_life() revised for use in semeai reading
- don't attack unconditionally dead stones, even if thrashing
- never play on vertices which are unconditional territory for either player
- bugfix in attack_either()
- back-capturing added in attack1() and code restructured
- new regression script regress.pike
- hashtable_clear() doesn't clear already clean parts of the table
- `stackp' pseudofield in Read_result renamed `remaining_depth'
- endgame1.sgf removed from the distribution
- play_move_no_history() revised to speed up undo
- modify_eye_spaces(), remove_lunch(), and not_lunch_helper() removed
- new function estimate_lunch_eye_value() broken out of sniff_lunch()
- obvious_false_eye() moved from owl.c to optics.c
- lunch invalidating patterns removed from conn.db together with
  corresponding code in connections.c
- semeai moves stored in dragon2 array
- new functions collect_move_reasons(), semeai_move_reasons()
- new prevent_attach_threat_helper() adds reverse followup value
- DEBUG_TERRITORY made less confusing
- handle suicides in do_commit_suicide(), not in do_play_move()
- fix prisoner accounting in do_commit_suicide()
- DEBUG_INFLUENCE made less noisy
- bugfix in gnugo_estimate_score()
- reevaluate_ko_threats() revised
- new helper backfill_replace
- revisions of twogtp.py
- bugfix in play_move()
- improved output files from scoring mode
- traces added to find_double_threats()
- semeai tracing improved
- fix arraybound violation in corner_matchpat()
- tuning
- influence tuning
- joseki tuning
- owl tuning
- atari_atari tuning
- eye tuning
- new and revised test cases

3.3.17 released March 2, 2003

- most superstring related move generation broken into new superstring_moves()
- try (a bit) harder in attack_either()
- semeai worms do not have to be adjacent but may instead share a liberty
- only claim win for attacking a semeai worm if the attack is unconditional
- moves to defend a semeai worm are marked as possibly connected to the dragon
- liberty_of_goal() shall consider goal vertices where stones were captured
- allow conditional ko capture in attack4()
- new function is_corner_vertex() in board.c
- mark_dragon() changed from static to global
- global variable time_to_die removed
- revision of new_semeai()
- endgame move generator beginnings implemented in endgame.c
- endgame() in ascii.c renamed ascii_endgame()
- dragon_weak() moved to dragon.c
- bugfix in owl_substantial()
- merge superstring related tactical move generators into superstring_moves()
- resigning of hopeless games implemented (over GTP and in replay mode)
- ascii interface revised to support resignation
- twogtp.py revised to support game resignations and endgame contests
- ascii_endgame() renamed ascii_count()
- new ascii_endgame() in play_ascii.c
- new command-line option --resign-allowed
- twogtp script updated to understand resignation
- owl_* fields moved from struct dragon_data to struct dragon_data2
- more trace output in do_atari_atari()
- update_aa_goal() revised
- new dfa builder implemented in dfa.c
- dfa size reduction algorithm implemented
- dfa transformation hints (.dtr) files added to repository
- speed optimizations in cache.c
- hashtable_unlink_closed_results() renamed hashnode_unlink_closed_results()
- check for snapback/oiotoshi reactivated in check_self_atari()
- joseki patterns are matched using corner matcher
- symmetrical joseki patterns no longer match twice
- antisuji joseki patterns are handled by callback now
- goal_elements and callback_data added to all relevant databases to
  drop unnecessary pattern elements
- add missing break in main.c
- do_owl_analyze_semeai doesn't crash on certain inconsistent eye results
- bugfix in adjacent_to_nondead_stone()
- unneeded fflush(stdout) flushed from patterns/connections.c
- new tests
- atari_atari tuning
- joseki tuning
- owl tuning
- tuning
- speed up scan_for_patterns()
- remove DFA_SORT

3.3.16 released January 29, 2003

- redundant patterns removed from hoshi.c
- killer move heuristic in reading.c
- bugfix in evaluate_diagonal_intersection
- do_owl_analyze_semeai doesn't crash on certain inconsistent eye results
- new static functions mark_dragon() and identify_thrashing_dragons()
  in dragon.c
- dead friendly neighbors of a thrashing dragon also considered thrashing
- new global array thrashing_stone[] to mark all thrashing dragons
- drop move reasons in add_move_reason() when the lists become full
- bugfix in value_move_reasons()
- MAX_REASONS increased to 120
- persistent connection cache implemented but disabled by default
- bugfix in estimate_score
- bugfix for unsigned char's concerning pessimistic_min
- bugfix: estimate_score was called many places with parameters switched
- don't crash reading a bogus sgf file
- more reading functions use candidate move mechanism
- new fast_defense() looks for fast ways to get liberties
- switch strings sometimes in defend_both
- atari_atari tuning
- influence tuning
- tuning
- new tests and regressions
- doc revision

3.3.15 released January 12, 2003

- evaluate_diagonal_intersection() tries additional moves to defend a diagonal
- does_secure() made global and moved to reading.c
- owl_add_move has a new parameter max_moves
- --allpats works with semeai
- defend_both() revised to require that both strings can be saved  without ko
- adjacent_to_nondead_stone() in value_moves.c generalized
- try harder in estimate_territorial_value() to detect when an
  ATTACK_THREAT should not yield a followup value
- do not use tactical defense threats as ko threats unless the move
  itself is strategically safe
- do not count strategical value for tactically critical dragons
- small bonus to dame moves which have a cut or connect move reason
- threaten_to_capture_helper() revised
- new autohelper adjacent_to_defendable_stone_in_atari
- new corner_point in owl.c
- revision of improve_lunch_attack
- surround code revised
- surround code moved up in in make_dragons() and used to correct escape route 
- new utility function square_dist() in board.c
- new alternate gnugo.el in interface/gtp_examples
- semeai nodes increased to 500
- owla life accepted on escape in do_owl_analyze_semeai only if stackp>2
- use status instead of owl_status in find_more_owl_attack_and_defense_moves
- speed optimizations in board.c, particularly fastlib()
- now possible to reduce MAX_BOARD and still get working GNU Go
- mkpat now has amechanism for dropping patterns
- corner database creation implemented
- corner database pattern matcher implemented but not activated
- bugfix in play_ascii.c: allow changing handicap/komi etc. in new games
- fixed broken indentation in play_ascii.c
- bugfix in gtp_known_command
- new visible_along_edge() and autohelpers
- influence tuning
- tuning
- eye tuning
- new game records and regression tests
- doc revision

3.3.14 released January 1, 2003

- life.c removed from the distribution
- semeai module made standard
- never decrement *eyemin to negative
- unnecessary patval elements removed from some pattern databases
- mkpat understands goal_elements and callback_data directives
- new autohelper : owl_eye_size()
- tuning
- owl tuning
- Copyright notices updated for 2003
- code maintenance

3.3.13 released December 22, 2002

- new aa_ pattern A16
- tactical move ordering tuned
- complete rewrite of interface to influence.c
- new macros INITIAL_INFLUENCE(color), OPPOSITE_INFLUENCE(color)
- new functions compute_worm_influence(), get_lively_stones(),
  compute_dragon_influence(), get_alive_stones(), set_dragon_strengths(),
  mark_inessential_stones(), set_strength_data(), mark_changed_string()
  to set up calls to compute_influence()
- new gtp command clear_cache
- new functions clear_persistent_owl_cache, clear_persistent_reading_cache
- joseki preparations: mkpat cleaning
- joseki preparations: some currently unused mkpat options changed
- joseki preparations: autohelpers no longer take `patt' argument
- set_value_helper() retired and replaced with inline code, generated by mkpat
- structures for the coming joseki pattern matcher defined in patterns.h
- use "territorial_influence" for pre-owl initial_influence
- safety values WEAKLY_ALIVE and WEAK removed
- use dragon2[].weakness or new field .weakness_pre_owl instead in most places
- use crude_dragon_weakness() to decide whether owl analysis is needed
- intersections with prisoners only contribute 1.0 to moyo_value
- arrays worms[], dragons[] removed in worms.c and value_moves.c
- new discard rule to enforce definiton of attack either/defend both reasons
- cleanups and improvements in board.c
- new function set_up_snapback_moves() in reading.c
- defend1() and restricted_defend1() revised
- TRACE macros and friends unified
- matchpat.c converted to 1D
- strategic bonus for connecting critical dragons out reintroduced
- strategic effect on critical dragon ignored unless move has owl move reason
- influence debug output enhanced
- defense functions in reading.c reorganized
- eye_vertex and eye_graph structures reorganized
- mkeyes.c rewritten to conform the changes in eyes.h
- adjacent() and buggy hadj() macros in optics.c retired
- recognize_eye(), first_map() and next_map() simplified and sped up
- new static reset_map() in optics.c
- new autohelpers omoyo_opposite and xmoyo_opposite
- CLASS_I added to CLASS_MOVE_REASONS in patterns.h
- compactify_att() removes duplicates from attribute list in DFA
- dfa_rt_t.next now stores offset to next state
- new fucntion dfa_shuffle() to minimize jump sizes between DFA states
- shorten generated pattern files to avoid too many lines warning
- new GTP command restricted_genmove
- new function genmove_restricted() in genmove.c
- new parameter allowed_moves[] to do_genmove(), review_move_reasons(),
  and find_best_move()
- always call init_board() when reaching a new_position()
- eyes.db revised
- bugfixes in cut_connect_callback() in connections.c
- tuning
- owl tuning
- influence tuning
- connection tuning
- new tests

3.3.12 released November 20, 2002

- optimization in do_play_move: don't check ko unnecessarily
- revision of critical worms to inessential in make_dragons() revised
- owl vital attack patterns now also used for owl defense
- major revision of connection_value(), using new function
  crude_dragon_weakness()
- reading.c: new move for defend1(): try to set up snap back
- reading.c: special_rescue4() generalized to hane_rescue_moves()
- a connection move where amalgamtion is inhibited by cut_possible() may
  induce further connection moves
- new oracle.c and oracle.db
- oracle is a second gnugo process communicating with the gtp by unix pipes
- experimental alternative move generation --metamachine using oracle
- demonstration pattern database using oracle
- bugfix: gnugo_get_komi() returns float as it should
- ..goal_list macros converted to functions in owl.c
- bugfix in owl_determine_life()
- new functions min_eye_threat() and max_eye_threat() in optics.c
- somewhere() revised
- new autohelper functions [ox]_alive_somewhere
- autohelper functions [ox]_somewhere revised
- major revision of find_connection_distances()
- other revisions and tuning in readconnect.c
- bugfix in find_defense: compare against fourlib_depth when appropriate
- compiler warnings fixed
- new struct dfa_rt_t allows different run-time DFA structure from build-time
- optional #define USE_BDIST in owl.c for better rotational independance
- new and revised tests
- new eat_lunch_escape_bonus() called by sniff_lunch()
- 'make all' does not cause build of extract_fuseki and debugboard
- owl_determine_life is careful if saving a lunch attacks an eye
- bugfix: typo in store_persistent_reading_cache()
- major cleanup in influence.[ch]
- pre-rotated pattern generation in mkpat. (-p option) implemented.
- %2m added as valid syntax for gprintf
- relabel rotation matrices in transform.c
- bugfix in atari_atari_blunder_size: don't crash on inconsistent defense
- autoharvesting of documentation from play_gtp.c
- tuning
- komoku and hoshi tuning
- eye tuning
- owl tuning

3.3.11 released October 29, 2002

- experimental connection code made default
- configure --help cleanup
- minor changes to twogtp*
- revision of CB20 in conn.db
- calls to accurate_approxlib() replaced by accuratelib()
- owl_find_lunches() revised
- owl tuning
- eye tuning
- new game records and regression tests

3.3.10 released October 20, 2002

- fastlib revised
- new accuratelib intended to replace accurate_approxlib
- incremental_self_atari merged into revised is_self_atari
- accurate_approxlib moved to board.c
- old sgftree is now freed on successful sgf loading
- sgftrees are freed when sgf tracing is finished
- sgffile_printsgf() revised
- gtp_fixed_handicap revised
- comments improved in play_gtp.c.
- play_ascii() revised
- combinations() revised
- atari_atari() generates lots of defense moves and validates them
- do_atari_atari() generates lots of potential defense moves
- decide_combination() revised
- YOUR_ATARI_ATARI_MOVE considered safe in examine_move_safety()
- atari_atari tuning
- new GTP commands attack_either and defend_both
- optimization in compute_connection_distances()
- owl code reorganization
- new clear_owl_move_data() set_single_owl_move(), 
- break out reading_limit_reached(), owl_estimate_life() 
  from do_owl_attack/defend 
- mode local_owl_node_counter global variable for owl.c
- made long "if (pass == ...)" statements "switch (pass)" in owl.c
- eliminated unnecessary variable "found_read_result" in owl.c
- new strategic_effective_size()
- computation of strategic effect is modified
- new static read_eye() tries to improve recognize_eye() results
- recognize_eye() sets vp->num_attacks/defenses to 0 when eye is found
- new file surround.c
- new is_surrounded(), does_surround() and surround_map()
- new gtp functions is_surrounded, does_surround and surround_map
- new autohelper macros is_surrounded, does_surround and surround_map
- new command line option --decide-surrounded
- new global variable gtp_version
- new option --gtp_version
- new function simple_showboard() in showbord.c
- new function get_last_player() in board.c
- gtp code revised for GTP version 2 and uses this by default
- new function delete_persistent_reading_entry()
- inconsistent results in attack_and_defend() resolved
- compilation errors for EXPERIMENTAL_READING fixed
- new experimental owl code is aware of tails getting captured
- new move reasons OWL_ATTACK_MOVE_GAIN and OWL_DEFEND_MOVE_LOSS
  with corresponding supporting code in value_moves.c and move_reasons.c
- new move reason INVASION_MOVE
- pattern class I (invasions) can now be used in patterns.db et al
  and not only in influence patterns
- remove EXPAND_TERRITORY_MOVE from strategic_penalty()
- new static function do_find_break_chain2_efficient_moves() split off
  from break_chain2_efficient_moves() and revised
- superstring_breakchain() revised
- speed optimization of compute_primary_domains()
- countlib() calls eliminated in count_common_libs(), find_common_libs(),
  and have_common_lib()
- escape_value arrays changed from int to char
- bugfix in code awarding strategical value for attacks/defenses of lunches
- bugfix in ATTACK_THREAT handling in estimate_territorial_value()
- bugfix in owl_substantial(); depth values modified correctly
- depth consistency assertion added in do_genmove()
- bugfix in mkpat.c
- new static functions analyze_false_eye_territory(),
  connected_to_eye(), and connected_to_eye_recurse() in dragon.c.
- new global array false_eye_territory[]
- critical dragons only consisting of inessential worms are revised
  to be inessential
- new function is_false_eye() in optics.c
- new autohelper functions o_captures_something(),
  x_captures_something(), false_eye_territory(), and false_eye()
- owl_tuning
- eye tuning
- influence tuning
- tuning
- new game records and regression tests

3.3.9 released September 29, 2002

- new configure option experimental-owl-ext
- code simplification in safe_move (use REVERSE_RESULT)
- new randomness_scaling field in struct move_data and new scale_randomness()
- moves matching Fj and Ft patterns get extra randomness
- fuseki pattern tuning for kakaris in high handicap games
- persistent cache code moved from reading.c and owl.c to new file persistent.c
- speed optimization in order_moves() in reading.c
- speed optimizations in fastlib(), count_common_libs(), find_common_libs()
- duplicate lines removed from safety_to_string()
- draw_active_area() functions in reading.c and owl.c unified
- new ascii command: freehandicap <num>.
- new function: ascii_free_handicap
- report_worm(): print all attack, defense, threat points/codes
- worm_data::defend_codes is now called defense_codes
- enhanced result_to_string() with new return codes.
- removed strategically_sound_defense()
- mingw build searches for mingwex
- pattern symmetry corrections in owl_defendpats.db and patterns2.db
- bugfix in topological_eye()
- don't spread any influence below INFLUENCE_CUTOFF
- mark_safe_stones() distinguishes between SAFE_STONE and OWL_SAVED_STONE
- detect_owl_blunder() calls owl_confirm_safety() if move may harm own eyes
- bugfix and speedups in accumulate_influence()
- bugfix in value_territory()
- comment play_connect_n()
- document play_connect_n() in the texinfo docs
- bugfix in play_connect_n (trace output)
- fix comment in find_double_threats()
- break_chain2_moves() revised	
- do_play_move() revised to improve performance
- corrects quoting of special characters in regress.plx
- sgffile_loadandprint() renamed to sgffile_printsgf() and revised
- use EOF rather than -1 the code to read sgf files in sgfnode.c
- major revision of code to write an sgf tree to file in sgfnode.c
- set_depth_values() reorganized
- new function find_half_and_false_eyes() in optics.c
- blunder_size() code reorganized
- new static detect_owl_blunder() and detect_tactical_blunder() in utils.c
- for walking across dragons new first_worm_in_dragon(), next_worm_in_dragon()
- new next_wormlist[]
- mark_changed_dragon() revised using dragon loop
- bugfix in fill_liberty()
- filllib_confirm_safety() revised
- make_dragon(): resolve inconsistent owl result by calling owl_does_defend()
- add assert on inconsistent do_genmove result() in genmove()
- life code completely disabled
- global variables life and life_eyesize removed
- options --life and --life-eyesize removed
- new eye value scheme; all code handling eye values revised
- new functions set_eyevalue(), min_eyes(), max_eyes(),
  add_eyevalues(), eye_move_urgency(), eyevalue_to_string()
- eyes.db revised for new eye value scheme and substantially extended
- configure test for alarm removed
- sigterm_handler() and volatile variable time_to_die removed
- functions special_rescue(), special_rescue2() converted to .._moves()
- break_chain2() removed; use new break_chain2_defense_moves() instead
- defend2() and defend3() simplified
- new reading codes GAIN/LOSS for later use in owl
- more consistent use of WIN and REVERSE_RESULT() macros
- new function sgffile_load_and_print()
- new call convention for sgftree* functions
- sgftreeCreateHeaderNode() revised
- sgffile_debuginfo() renamed to sgffile_add_debuginfo()
- new call convention for sgffile_output()
- --color option effective in scoring mode
- sgftree struct and functions consistently used in play_gmp(),
  play_solo(), load_and_analyze_sgf_file(), and load_and_score_sgf_file()
- new arrays close_worms[][], close_white_worms[][],
  close_black_worms[][], number_close_worms[],
  number_close_white_worms[], number_close_black_worms[]
- compute_surrounding_moyo_sizes() revised
- compute_surrounding_moyo_sizes() variant for experimental-connections option
- new function influence_get_moyo_data()
- tuning
- owl tuning
- new game records and regression tests

3.3.8 released September 5, 2002

- remove unneeded inclusion of stdlib.h in helpers.c
- bugfix in matcher_check
- URL's updated in documentation
- tests updated

3.3.7 released September 4, 2002

- better ko tracking searching for additional worm attacks and defenses 
  in find_more_attack_and_defense_moves() and make_worms()
- new option --output-flags <flags>
- output using sgf trees with -o option
- cleaning and minor bugfixes in play ascii
- sgf handling is disconnected from engine again
- moved sgfAddDebugInfo -> sgffile_debuginfo, outputsgf -> sgffile_output
- write "forced" as comment when this ascii mode command is used
- sgftree_readfile does not change root node to NULL
- new blunder_size(), atari_atari_blunder_size() compute the blunder size
- remove vital_string logic in atari_atari code
- remove allowed_blunder_size heuristic in review_move_reasons()
- instead use blunder size more exactly in new function find_best_move()
- bugfix in hashtable_partially_clear()
- bugfix in gameinfo_play_sgftree_rot()
- bugfix (reading uninitialized memory) in sniff_lunch()
- bugfix (EXPERIMENTAL_CONNECTIONS) in cut_connect_callback()
- bugfix (gameinfo_load_sgfheader) in play_ascii()
- man page revised
- new options --mirror and --mirror-limit
- new global variables play_mirror_go and mirror_stones_limit
- new static find_mirror_move(), test_symmetry_after_move() in genmove.c
- Apply "B" cutting pattern from shapes.db only if connection code confirms
- new function test_attack_either_move; gets invoked by patterns
  instead of directly adding the attack-either move reason
- new function mark_changed_dragon() in move_reasons.c
- only mark owl defended stones as safe if also sufficiently tactically safe
- matcher_check can analyze existing sgf files
- twogtp-a kills processes
- break_chain2_moves() revised
- placehand() renamed to place_fixed_handicap()
- new function place_free_handicap() in handicap.c with associated
- static find_free_handicap_pattern(), free_handicap_callback() in handicap.c
- new GTP command place_free_handicap
- new pattern database handicap.db
- new autohelper macros handicap_stones, total_handicap_stones for handicap.db
- mkpat.c revised to avoid compiler warnings for constraints using no labels
- new file engine/handicap.c
- placehand() moved from genmove.c to handicap.c
- bug fix in adjusted_worm_attack_value()
- FIXME added regarding several EITHER_MOVE reasons
- show_dragons() revised
- tuning
- influence tuning
- connection tuning
- owl tuning
- revised tests, many new tests, new game files
- added Evan Berggren Daniel to AUTHORS

3.3.6 released August 13, 2002

- extended_chainlinks() revised
- MAX_REASONS increased from 80 to 100
- modify_stupid_eye_vital_point() revised
- new functions improve_lunch_attack() and improve_lunch_defense()
- backfilling in do_owl_attack() when trying the defender's best move
- sniff_lunch() revised
- new experimental_connections contingent code in shapes_callback()
- induce_secondary_move_reasons() revised
- tuning
- endgame tuning
- owl tuning
- request id no longer passed to callbacks in play_gtp.c
- gtp_printid() renamed to gtp_start_response()
- new preprocessing of command lines in gtp_main_loop()
- GTP command dragon_status revised
- bug fix in estimate_strategical_value: EITHER_MOVE negative values
- j pattern value increased from 22.0 to 24.0
- new gtp experimental_score for metamachine
- new DEBUG_MISCELLANEOUS used only in find_eye_dragons
- connection tuning
- B patterns found by find_cuts inhibit C patterns by find_connections
- new connection tests
- strategic_penalty() adds negative strategical move value a bit more often
- revise_thrashing_dragons() revised
- tuning
- owl tuning
- new tests and game records

3.3.5 released July 5, 2002

- bugfix in break_through_helper()
- bugfix in combinations()
- reduced_init_owl() allocates bigger owl stack with --experimental-semeai
- bugfixes in pop_owl(): don't crash if owl stack has moved
- reduce reading depth by one in influence pattern matching
- new struct reading_moves in reading.c
- owl stack can now handle two local_owl_data structs
- semeai code now uses owl stack
- don't push owl data in owl_analyze_semeai below branch depth
- Don't change critical dragons to dead due to semeai results
- DEBUG_SEMEAI trace enhancements
- semeai refinements
- owl_phase now local variable in do_owl_analyze_semeai
- bugfix in do_owl_defend(): computation of escape parameter
- bugfix in play_ascii.c: don't crash on unusual boardsizes
- dead stones with no neighbors are captured territory
- improved debug traces in score.c
- decide-dragon clears cache between owl attack and defend
- influence pattern tuning
- new tests and regressions

3.3.4 released June 19, 2002

- segment_regions also computes territorial value of regions if available
- dragon2.moyo_size_pre_owl andmoyo_size_post_owl replace dragon2.moyo
- new dragon2.moyo_territorial_value, weakness
- strategic dragon evaluation rewritten, setting dragon2[].weakness
- moved interpolate to gg_interpolate in gg_utils.c
- new struct eyevalue
- moves to connect two dragons which are both adjacent to a thrashing
  dragon are appreciated by the move valuation
- experimental connections off by default in VC build
- tuning
- influence tuning
- connection tuning
- eye tuning
- joseki tuning
- owl tuning
- new tests and game records

3.3.3 released June 4, 2002

- new function owl_strong_dragon() and new autohelper with the same name
- vital_chain() returns the max number of eyes
- no amalgamation around eye spaces with experimental_connections enabled
- eye spaces no longer modified by INHIBIT_CONNECTION with
  experimental_connections enabled
- bugfix in find_connection_moves()
- pattern classes Y and W introduced in conn.db to identify patterns
  which only applies with or without experimental_connections
- patterns with class e in conn.db changed to class I to better
  reflect current usage
- connection tuning
- improves DFA compile time by doing fewest possible large syncs 
- experimental_influence command line and configure option removed
- new flags dragons_known and is_territorial_influence in influence_data
- struct local_owl_data for speedup only holds eye space of relevant color
- owl_eyespace() and allies use only one eyespace
- dfa doesn't report symmetric patterns multiple times
- escape patterns in owl_defendpats.db given E classification
- owl_determine_life() not called during escape attempt
- only print debug output for eyes during owl reading if owl debug is on
- better traces for unused owl patterns
- --decide-connection also reports ko results
- bugfix in load_and_score_sgf_file()
- new test cases
- edge_block and double_atari_chain2 renamed to *_moves
- do_attack uses simple_ladder_attack when stackp > depth+10
- give up simple_ladder_attack below 20 ply when we are komaster
- unused caching code removed from attack? and defend?
- macros used to make reading code readable
- dragon field in struct eye_data removed
- new function find_eye_dragons() in optics.c
- dragon_invincible() and genus computation in make_dragons() revised
- play_connect_n() uses string_connect() and disconnect()
  unconditionally, no longer contingent on experimental_connections
- default value for experimental_connections reset to 0
- new command line option --decide-dragon-data
- consistency checking of replacement patterns reenabled for unstable line
- tuning
- new tests and sgf files

3.3.2 released May 6, 2002

- Macro PATTERN_CHECK_ON_DEMAND retired
- allpats options for owl shape moves repaired
- new function extended_chainlinks() in board.c
- connection and cut move reasons are relative to worms, not dragons
- unused find_worm_pair() and related variables removed from move_reasons.c 
- MAX_REASONS increased from 40 to 80
- induce_secondary_move_reasons() reimplemented
- tuning
- new test case
- fix warnings generated by regress.plx
- doc revisions
- add_block_territory_move() removed
- BLOCK_TERRITORY_MOVE reason removed
- compute_shape_factor() and move_connects_strings() moved to value_moves.c
- move_reasons_confirm_safety() moved and renamed value_moves_confirm_safety()
- b patterns changed to e in endgame.db, fuseki.db, patterns.db, patterns2.db
- classification letters ordered consistently in pattern databases
- find_backfilling_move() in filllib.c revised
- new debug flag DEBUG_TOP_MOVES
- environment variables GG_OPTIONS and GNUGO when (make)ing tests
- top moves list maintained when moves are rejected
- bugfixes in metamachine
- regression revisions
	
3.2 released April 25, 2002

- revision of copyright statements and THANKS
- handtalk games moved to their own directory
- correct move number reported in influence for illegal move error

3.1.34 released April 20, 2002

- "choose best anchor"-platform dependency patch in mkpat.c
- bogus (int) conversion removed in get_next_move_from_list
- 3.0 replaced by 3.2 in WINDOWS

3.1.33 released April 19, 2002

- regression/READING, STRATEGY and NICKLAS removed
- makevcdist.pl, doc/gnugo-32.[jpg|eps]added to EXTRADIST
- eval3.sh and semeai2.tst added to automake control
- TODO list in texinfo updated
- class field in struct pattern and class_mask in made unsigned int
- input_FILE and output_FILE in mkpat.c explicitly initialized
- tree based reading not compiled by default
- consistency checking of replacement patterns disabled for the stable release
- more Handtalk games in CVS
- Jessie Annala THANKed
- new function gg_normalize_float2int to address optics.c-platform dependency 
- hash_init behaviour made independent of boardsize
- output cleanup: --statistics, and EITHER_MOVE-trace
- floats normalized in finish_pattern() in mkpat.c
- put GNU Go's passes in permanent move history
- assertion in compute_connection_distances corrected

3.1.32 released April 13, 2002	
	
- new update_random_seed()
- gtp_set_boardsize updates the random seed
- reset engine updates the random seed
- aftermath revisions
- combination of --score aftermath and -o options more useful
- dead function opponent_not_passing() removed from genmove.c
- init_influence() and new_value_territory() revised
- sgftree_printboard() made global
- bugfix in owl_hotspots()
- valuation of attack threats revised to allow more ko threats
- bugfix in estimate_strategical_value()
- solid string connection bonus revised to also favor cuts of opponent
- play_gtp() starts with boardsize of board loaded with -l instead of 19
- no warning by default for FF[1] sgf game records
- bugfix in push_owl
- corrected assertion in examine_cavity()
- shadowed variables fixed in dragon.c
- major aftermath code revisions
- doing_scoring contingent revisions in influence_callback(), shapes(),
  shapes_callback(), connection_value(), estimate_strategical_value(),
  high_handicap_helper(), and reinforce_helper()
- analyze_neighbor() in filllib.c revised
- size of persistent owl cache increased from 100 to 150 entires
- bugfix in owl_confirm_safety()
- territorial value computed for tactical attacks of dead or defenseless stones
- caching of recent compute_escape_influence() results
- reading cache stores depth-stackp instead of stackp
- infl_followup_value renamed influence_followup_value and initialized
- initialize_dragon_data broken out of make_dragons
- dragon_data initialized even on empty board
- owl reasons ignores empty board positions
- twogtp does not report duplicate scores unless they differ
- new gtp get_random_seed, set_random_seed
- tuning

3.1.31 released April 4, 2002

- boardsize field added to persistent caches in reading.c and owl.c
- break_chain_efficient_moves() revised
- new function reduced_init_owl() in owl.c
- mark_dragon_hotspot_values() revised
- revised handling of inessential stones in init_influence()
- bugfix in strategic_penalty()
- owl speedup: owl data immediately stored in owl_stack
- bugfix in do_owl_defense()
- attack() now always returns PASS as move if there is no attack
- some ASSERTs removed in board.c.
- revision in get_next_move_from_list
- bugfix in find_connection_moves()
- begin_sgftreedump() can take a NULL pointer parameter
- new gtp command ladder_attack
- unneeded include directories removed from sgf/Makefile.*
- seed field removed from Gameinfo struct
- new global variable random_seed
- joseki tuning
- Handtalk games in regression/games
- doc revision

3.1.30 released March 30, 2002

- target sgf_properties.h not built by default
- bugfixes in defend2(), special_rescue(), and special_rescue2()
- MAX_INTRUSIONS doubled in size
- intrusions beyond MAX_INTRUSION silently discarded
- new connect_and_cut_helper2 autohelper macro
- platform dependency resolved in store_persistent_reading_cache
- EXP_J_VALUE increased to 35 in shapes.c
- graph_ renamed to tree_ in mkpat.c & related files
- a few FIXMEs addressed
- tuning
- influence tuning
- new logo-32.jpg and logo-32.eps
- newlogo.eps made smaller using level 2 postscript
- doc revision

3.1.29 released March 26, 2002

- asymmetry in influence computation reduced
- case added in strategic_penalty
- simulation of ko threat + answer in sgf output reinstated in tryko()
- new function gg_normalize_float() in gg_utils.c
- platform dependency fixed in readconnect.c by using gg_normalize_float() 
- scoring tweaks and optimizations
- bugfix in gg_cputime()
- new function influence_initial_territory to export territory valuation
- negative strategic value added to invasion type moves
- keima shape bonus removed in CB204b
- tuning
- influence tuning
- code consistency cleanup
- new tests in nngs1.tst
- THANKS updated

3.1.28 released March 24, 2002

- hashing dependent on compiler switches, default 64 bit and no full position
- default cache size set to 8
- --stack option and showstack global variable removed
- cache.o removed from libboard.a
- unneeded include of dfa.h removed from patterns.h
- compiler warnings fixed: dragon2_func prototyped, etc.
- bugfix in confirm_safety() plus 1D conversion
- komaster scheme 5 implemented and made default
- update_aa_goal() in combination.c revised
- heuristics to estimate cost of pattern constraint introduced
- constraint cost used in owl callback for speedup
- twogtp and twogtp-a close the sgf file if an engine crashes
- twogtp-a had coordinates reversed
- global variable last_moves[] removed
- move history added to board state
- static function undo_move() in board.c renamed to undo_trymove()
- new global functions store_board(), restore_board(), undo_move(),
  get_last_opponent_move(), and get_last_move() in board.c 
- macros do_add_stone() and do_remove_stone() removed from board.c
- Position struct removed
- Gameinfo struct revised
- new board_state struct
- API functions gnugo_* work on an internal board state instead of on
  an externally provided board state
- board_size workaround in influence.c obsoleted and removed
- revised order of operations in main.c; in particular playing up the
  position specified by -l and -L options centralized
- revised modes for --score option
- all undo implementations in GTP, GMP, and ASCII interfaces replaced
  by the new undo_move() function in the board code
- Added several .h files to appropriate .dsp files
- corrected gcc warnings & other cleanup in mkpat.c
- komaster_to_string now takes 2 arguments
- new KOMASTER_TRACE; set to log all komaster_trymove calls
- dfa ise announced only as a debug message
- copyright notices updated
- DRAGON2 macro array bounds checking is not the default
- tuning
- test revision
- doc revision
- additional correct answers added to reading.tst

3.1.27 released March 1, 2002

- important bugfix in store_persistent_owl_cache()
- bugfix in semeai_find_backfilling_move()
- new command line option --debug-flags
- new DEBUG_OWL_PERSISTENT_CACHE
- owl.c:draw_active_area draws the owl point
- new printutils.c:routine_to_string()
- KOMASTER_SCHEME 4 introduced
- Tree-based pattern matching introduced.
- pattern-base reading code supports defense by pattern.
- new command-line switches "(attack|defend)-by-pattern"
- OPT enums re-based to 127, to avoid conflict w/ ASCII values.
- reformatted transform.c to look like matrices.
- DRAGON_WEAK implemented in a function and checks array bounds.
- improved fastlib().
- DRAGON2 macro checks array bounds.
- bugfix in readconnect.c:moves_to_connect_in_three_moves()
- for non-variadic, non-VC compilers, add trace_dummy assignment
- new function init_owl() in owl.c
- re-order conditions in revise_semeai to insure valid DRAGON2 data
- organize include file order to facilitate pre-compiled headers.
- use location_to_string in replay_node()
- improve assertion in sgftreeAddComment()
- removes a bogus "," from Pattern D305
- read_attack.db tuning
- new read_defend.db
- VC builds uses precompiled headers
- VC Release builds generate debug symbols
- new '-s' option to regress.pl to control creation of sgf files.
- instruct robots not to follow regress.plx links.
- unexpected results page orders results correctly
- defaults for config.vc(in) made same as 3.1.27 release.
- new semeai test
- doc revision

3.1.26 released February 24, 2002

- experimental influence, experimental and alternate connections are default
- caching code revised to once more work with TRACE_READ_RESULT enabled
- added EXPERIMENTAL_READING to config.vc(in)
- updated makevcdist.pl
- bugfix in owl.c:dump_pattern_list() 
- alternative reorganized owl callback structure for substantial speed-up:
- owl_shapes revised, new functions get_next_move_from_list() et al.
- new function dump_pattern_list(...) for debugging
- pattern cleanup
- spelling fixes
- verbosity revisions with alternate connections in readconnect.c
- bugfix in close_bubbles()
- bugfix in compute_owl_escape_values()
- revised "stepped on a bug" message
- bugfix in update_status in semeai.c
- bugfix in estimate_time_by_move
- replay added to debug helpstring
- revised nonvariadic versions of TRACE and allies
- increased MAXSTACK to MAX_BOARD*MAX_BOARD again
- experimental influence taken down for initial influence when dragons unknown
- doc revision

3.1.25 released February 14, 2002

- updated AUTHORS
- command line option --options reports configure options
- verbose reduced in readconnect.
- do_genmove tries harder to restrain thrashing dragons.
- DFA_SORT set to 0.
- new gtp tryko.
- new function fastlib() helper for approxlib family.
- a pattern can now force the anchor point.
- matchpat can be run forcing anchor to be in the goal.
- simplification of UPDATE_SAVED_KO_RESULT
- reduce overhead in non-variadic macro TRACE definitions
- reduce MAXSTACK
- EXPERIMENTAL_READING code much more interesting.
- moved most of EXPERIMENTAL_READING code out of do_attack.
- [ox]lib request only up to MAX_LIBERTIES liberties.
- bugfix in reevaluate_ko_threats
- floating point exceptions stopped in readconnect.c
- experimental influence: yet another new_value_territory revision
- experimental influence: fixed followup values really taken down (shapes.c)
- experimental influence: pattern tuning
- experimental influence: follow-up specific constraints for B patterns
- experimental influence: new_value_territory revised (center correction)
- experimental influence: most fixed follow-up values taken down
- experimental influence: tuning, joseki values increased, some bugs fixed
- experimental_influence ignored for escape influence
- influential doc revision
- edge_double_sente_helper is now autohelper
- owl threat loop broken out
- new global thrashing_dragon

3.1.24 released February 3, 2002

- cleanup of clock.c, filllib.c, fuseki.c, genmove.c, globals.c,
  gnugo.h, hash.h, printutils.c, reading.c, showbord.c, utils.c,
  worm.c
- New function gfprintf in printutils.c
- do_owl_analyze_semeai won't read below MAX_SEMEAI_DEPTH
- AFFINE_TRANSFORM() macro
- new (stub) function opponent_not_passing
- new function sgffile_write_circle_mark
- gg_cputime used for time statistics consistently.
- alternate connection reading algorithm appended to readconnect.c
- new option --alternate-connections toggles the connection reading algorithms
- Zobrist hashing implemented in owl_analyze_semeai
- do_owl_analyze_semeai no longer considers unsafe outside liberties
- small_semeai reimplemented
- make_worms takes the save_verbose parameter to allow a few traces
- traces improved in decide_tactical_semeai
- EXPERIMENTAL_READING code (pattern based) added.
- added "tried" parameter to special_rescue
- defend2-[CD] won't re-try moves (avoid cache check).
- faster implementation of accurate_approxlib.
- mkpat takes multiple -i parameters, outputs in binary
- Visual C now uses _vsnprintf
- revision of patterns/mkpat.dsp
- sgf output tweeking.
- bugfix in experimental influence: floating point exception cure
- bugfix in regress.plx: handling of gtp worm_stones
- tuning
- owl tuning
- connection tuning
- test revision

3.1.23 released January 28, 2002

- configure option: alternate-connections
- experimental influence: followup value computed in influence.c
- experimental influence: new_value_territory revised
- experimental influence: new handling for intrusion patterns
- experimental influence: support for standard/experimental specific patterns
- reevaluate_ko_threats now makes checks
- new get_biggest_owl_target()
- DEFEND_BOTH_MOVE reason taken down
- new gtp functions get_komi and get_handicap
- bugfix in gtp worm_stones: did not print newline if board empty
- support for two strings and two results in cache.[ch]
- simplified code to do cache lookup in reading.c and owl.c
- bugfix in estimate_territorial_value()
- bugfix in find_worm_threats()
- readconnect finds connections through ponnuki
- readconnect sgf improvements
- bugfix in estimate_strategical_value(): ALL_MOVE worms were overvalued
- VC build now DFA compliant
- semeai module sets matcher status to ALIVE instead of ALIVE_IN_SEKI
- regression html view enhancements
- fix arraybound violation in compute_aa_values
- constraint diagram checking moved to new check_constraint_diagram()
- Invoke check_constraint_diagram *before* incrementing patno
- atari_atari_find_defense_moves() revised
- ATTACK_EITHER_MOVE taken down
- new ALL_MOVE reason
- new static find_all_data(), all_move_redundant() in move_reasons.c
- new function add_all_move()
- add_defend_both autohelper macro revised
- tuning
- influence tuning
- owl tuning
- hoshi tuning
- new and revised tests 

3.1.22 released January 20, 2002

- find_backfilling_move() in filllib.c revised
- dfa made standard
- owl threat computation made optional (and not default)
- comments added, cleanup around discard_redundant_move_reasons
- new (unused) experimental influence configure and run time options
- unsafe tactical moves now taken care by discard_redundant_move_reasons
- FIXME added for reevaluate_ko_threats
- atari_atari_attack_patterns() uses a goal array to limit search area
- new functions compute_aa_values(), get_aa_value(), and update_aa_goal()
- ko contingent defenses excluded in get_saved_worms(), get_saved_dragons()
- valuation of atari_atari move reasons revised
- recognize_eye() revised
- spelling corrections
- fflush() added a few places
- owl tries tactical defense for small groups
- owl logs number of variations per sub-tree in SGF file
- [ox]play_(attack_either|defend_both) handles ko correctly.
- added [ox]play_connect and dis_connect helpers
- allow followup value if defense threat is contingent on ko.
- only allow territory move values if move is deemed safe.
- reduce cutstone values in case of ko.
- debug printing in influence.c slightly restructured
- new function influence_moyo_color_opposite()
- one trace output reenabled in confirm_safety()
- bugfix in sgftreeAddStone
- bugfix in komaster_trymove
- mascot in dragon.c
- tuning
- eye tuning
- atari_atari tuning
- connection tuning
- fuseki tuning
- owl tuning
- test revisions

3.1.21 released January 12, 2002

- revision of compute_surrounding_moyo_sizes()
- bugfix in pattern EE302
- value_moves.c split from move_reasons.c

3.1.20 released January 11, 2002

- ko return codes from owl_does_attack() and owl_does_defend() handled
  in analyze_semeai()
- special_rescue2() generalized and reimplemented
- bugfix in edge_clamp()
- mkpat does consistency checking between the diagram and constraint diagram
- new function connect_and_cut_helper() in helpers.c
- least significant bit of move reason now denotes a threat
- bugfix in add_attack_either_move
- new move reason: EITHER_MOVE
- disabled add_attack_either_move
- removed redundant EITHER_MOVEs
- minor cleanup in move_reasons.c
- some cleanup in move_reasons.c
- renamed some move reasons for name consistency
- new function special_rescue6() in reading.c
- defend3() revised
- don't run compute_eyes on eye spaces not attached to a dragon
- avoid giving followup values to non-sente threats in
  threaten_to_capture_helper() and in estimate_territorial_value()
- new test_gray_border() in board.c with assertions in genmove.c
- xplay_attack_either returns WIN not 1
- improved debugging and trace output
- checking of sgf GM and FF properties revised
- Makefile.in's converted using Automake 1.5
- html view enhancements
- tuning
- influence tuning
- owl tuning
- fuseki tuning
- performance tuning
- test revisions

3.1.19 released January 2, 2002

- bugfix in aftermath_genmove()
- bugfixes in the atari_atari code
- obsolete atari_atari code removed
- tuning
- owl tuning
- sgf2tst repair
- regress.plx improvements
	
3.1.18 released December 23, 2001

- 1D conversion of incremental.texi
- new function dragon_looks_inessential() in dragon.c
- adjusted_worm_attack_value() revised
- indented debug output of secondary move values
- new local struct aa_move in combinations.c
- new pattern class 'c' for conditional moves in aa_attackspats.db
- atari_atari() tries to attack smallest targets first
- combinations() finds multiple defenses when opponent has a combination attack
- new gtp commands owl_connection_defends and owl_substantial
- mkpat checks that main diagram and constraint diagram have the same size 
- mkpat stricter in parsing of classification field
- new function gg_sort() in gg_utils.c
- all calls to qsort() replaced by calls to gg_sort()
- linear_eye_space() removed
- make RTRACE and VTRACE variatic functions same as macros
- debug output and valuation of attack on defenseless stones corrected
- TODO revised
- fixed value of J patterns no longer scaled with board_size
- bugfix in owl_attackpats.db pattern D1137
- assertion added in owl_escape_value()
- bugfix in moves_to_connect_in_three_moves() in readconnect.c
- support for all tactical worm points in debugboard
- tuning
- owl tuning
- influence tuning
- atari_atari tuning
- test revisions

3.1.17 released December 16, 2001

- new configure and runtime options semeai-variations
- new function semeai_trymove()
- bugfix in catalog_goal
- semeai revisions
- warning avoided in dfa_avoid_string()
- code cleanup
- devalued attacking dead group bonus
- corrected value to final_value in review_move_reasons()
- value_territory() in influence.c revised
- common debug code moved from compute_eyes(), compute_eyes_pessimistic() 
  to print_eyes()
- inactive support to test against linear_eyes() in compute_eyes_pessimistic()
- MAXPATNO increased to 400 in mkeyes.c
- naive_ladder() replaced by simple_ladder()
- bugfixes in attack_threats()
- new gtp commands reset_connection_node_counter, get_connection_node_counter
- removed small valued lunch attacks and defenses in owl_determine_life()
- new gtp commands owl_threaten_attack, owl_threaten_defense
- better error reporting in mkpat.c
- improved error reporting in owl.c
- html regression view tweeks
- new function second_order_liberty_of_string() in board.c
- readconnect.c revised
- take into account followup values if reverse_followup >= 1
- try a little harder in attack_either
- break_through_helper improved
- tuning
- owl tuning
- eye tuning, adding many patterns with occupied margins
- test revisions

3.1.16 released December 9, 2001

- readconnect revised
- new board.c function breakchain3()
- dsp and config.vc updates
- new function influence_get_moyo_segmentation()
- new function add_influence_source()
- computations of moyo size surrounding a dragon changed
- confirm_safety() takes two new parameters to tell which stones were saved
- atari_atari_confirm_safety() revised
- compute_aa_status() revised
- new is_vital_string() in combinations.c tracks stones not to be sacrificed
- generation of attack moves in do_atari_atari uses patterns
- new pattern database pattern/aa_attackpats.db
- atari_atari_find_defense_moves() improved
- new functions get_saved_worms() and get_saved_dragons() in move_reasons.c
- new function move_reasons_confirm_safety()
- examine_move_safety() revised
- new function decide_combination() in sgfdecide.c
- new option --decide-combination
- new experimental-combination configure option, and command line options
- new gtp command aa_confirm_safety
- bugfix in trymove()
- 1D revisions and cleaning up
- new file: engine/movelist.c
- generalized handling of move lists and moved from worm.c
- attack_threats() enhanced
- AA_THREAT_DEPTH set to 3
- find_worm_threats() uses attack_threats more
- pessimistic_compute_eyes() tries harder to find a vital point
- new atari_atari_find_attack_moves() and atari_atari_find_defense_moves()
- do_atari_atari() restructured
- experimental-semeai configure option
- experimental_semeai command line option
- new function new_semeai()
- owl_analyze_semeai improvements
- split USAGE_DEBUG in half due to VC limitation
- removed final VC warning in dfa.c
- revised trace in value_move_reasons()
- regress.plx improvements
- speedup in gtp_same_dragon
- test revisions
- 13x13 tests

3.1.15 released November 30, 2001

- new field value in struct half_eye_data
- topological_eye(), evaluate_diagonal_intersection() take ko into account
- improved debug output in compute_eyes() and compute_eyes_pessimistic()
- add_half_eye() renamed add_false_eye
- make_proper_eye_space() and remove_eyepoint() removed
- owl_topological_eye() reimplemented to look up stored data
- new function special_rescue5() in reading.c
- defend2() and defend3() revised
- new GTP commands list_stones and tactical_analyze_semeai()
- new command line option --decide-tactical-semeai
- support for marginal eye points with opponent stones in eyes.db
- persistent caching added to owl_does_attack()
- owl_does_defend() and owl_does_attack() now understand ko
- owl_determine_life() revised
- owl_analyze_semeai() revised
- small_semeai() calls owl_analyze_semeai
- new function silent_examine_position()
- find_more_owl_attack_and_defense_moves() revised
- ko valuation revised
- cutting worms are never inessential
- 1D revision of print_eye() in optics.c
- compute_eyes_pessimistic() revised
- bugfixes in evaluate_diagonal_intersection()
- new gtp commands owl_analyze_semeai, owl_does_attack, and owl_does_defend
- revision of owl_analyze_semeai()
- new static catalog_goal in owl.c
- sgfdecide functions made 1D
- empty_corner_value adjusted to board size in fuseki()
- removed tactical reading move pass from owl.c
- contribution of (reverse) followup values revised in value_move_reasons
- comments made 1D in owl.c
- regress.pl now accepts "problem sets"
- regress.plx includes "unexpected result" list
- new gtp_example/sgf2tst.pl
- changed warning to error in mkpat.c
- minor change to regress.pl
- atari_atari now considers general threat the first moves
- new depth parameter aa_threat_depth
- new function: atari_atari_succeeded
- cleanup in atari_atari functions
- compute_escape_influence now 1D
- new function in reading.c: attack_threats
- handling of tactical moves in worm.c no longer static
- replaced abort() in mkeyes with fatal error messages
- patterns.dsp and gnugo.dsw revised
- tuning
- influence tuning
- connection_tuning
- owl tuning
- test revisions
- new trevora tests
- new semeai tests
- doc revision

3.1.14 released November 17, 2001

- recognize_eye() revised
- new function test_eyeshape() in optics.c
- new gtp command test_eyeshape
- vital and num_vital fields removed from struct eye_graph
- mkeyes.c revised
- non-territory patterns introduced in the influence code
- revised formula for addition of followup_value
- better trace output for followup_value and reverse_followup_value
- typo fixed (whose_moyo for whose_area) in value_territory()
- new debug flag DEBUG_TERRITORY
- delta computation of territory, moyo, and area in influence.c restructured 
- influence_value part of move valuation removed
- new function is_edge_vertex() in board.c
- guess_eye_space() revised
- compute_eyes_pessimistic revised
- do_owl_defend() revised
- move stupid vital marginals from first to second line in owl_determine_life()
- patterns.dsp doesn't reference invalid file
- regress.pl deals with threads better on Win32
- regress.plx supports view by category
- updated regress.pl
- add file & line numbers to more warnings in mkpat.c
- comments in reading.c made 1D
- DFA_ENABLE ifdefs removed
- remove *.dfa stuff from makefiles keeping only DFA_FLAGS for mkpat.
- configure --enable-dfa touches .db files.
- bugfix in find_double_threats()
- global_matchpat() renamed matchpat()
- regression view includes node counts, SGF link, and -t output.
- GTP echo_err added to allow echoing to STDERR.
- atari_atari moved to combination.c
- restricted_defend1 and restricted attack2 now public functions
- in find_double_threats, make threat reasons into attack_either reasons
- old disabled function remove_move_reason() now enabled
- some simple cleaning
- genmove now 1D
- out of bounds array violation in showbord.c fixed.
- regress.pl records sgf trace for owl_attack & owl_defend.
- regress.plx provides access to sgf trace files if present.
- tuning
- connection tuning
- eye tuning
- owl tuning
- influence tuning
- revision of rot tests
- ld_owl_life.tst removed
- new and revised regression tests
- Some tests in endgame.tst corrected.

3.1.13 released November 6, 2001

- new function are_neighbor_dragons()
- verbose value reduced while running owl_reasons
- influence code revised
- function find_stones_saved_by_move() in move_reasons.c removed
- find_more_owl_attack_and_defense_moves() revised
- owl attacks induce strategical defenses of friendly neighbors
- connection values revised
- territorial value of attacks, defenses, owl attacks, and owl
  defenses computed through influence function, not effective_size
- bugfix in computing effects of min and max territory values
- played stone not automatically in goal array in owl_does_defend(), 
  owl_confirm_safety(), and owl_connection_defends()
- gtp commands debug_influence, debug_move_influence, move_influence removed
- cleanup in mkpat.c
- malformed line warning turned into error in mkpat
- 1D documentation revisions.
- twogtp-a now give a (halfhearted) default to missing goprog.
- twogtp-a works for VC builds now.
- mkpat.c generates more useful errors.
- mkpat.c forces output to have compile error if input also had errors.
- comments in readconnect.c
- snapback only looks at one liberty in readconnect.c
- do_atari_atari confirms the *defense_point is safe before returning
- atari_atari_confirm_safety initializes defense_point
- trivial bugfix in move_reasons.c
- important bugfix in semeai.c, could cause a crash
- tuning
- owl tuning
- influence tuning
- gtp_set_boardsize resets the engine and stack
- new and revised regression tests
- new command-line option --orientation
- -l and decide-* options can be combined with --orientation
- tuning and regression revisions
- regress.plx revisions: total line, time display, command line hint

3.1.12 released October 28, 2001

- break_chain2_efficient_moves() and break_chain2_moves() revised
- add_array() in readconnect.c simplified
- bugfix in moves_to_connect_in_two_moves()
- sgf traces turned off in quiescence_capture()
- new fields owl_attack_code and owl_defense_code in struct dragon_data
- revised definition of WEAK and WEAKLY_ALIVE dragons in make_dragons()
- revised computation of size of surrounding moyo for a dragon
- 1D revisions
- add_attack_move() and relatives also take the result code as parameter 
- new move reasons ATTACK_MOVE_GOOD_KO, ATTACK_MOVE_BAD_KO, and so on
- move valuation distinguishes between attacks, defenses, owl attacks
  and owl defenses with or without ko
- connections tested as owl defenses when connecting out a critical dragon
- revised valuation of threats and strategical attacks
- compute_eyes_pessimistic() revised
- owl_determine_life() revised
- new static compute_aa_status() broken out of three atari_atari functions
- tuning
- connection tuning
- owl tuning
- joseki tuning
- new and revised regression tests
- new reorientation test suites
- remove rot* subdirs from EXTRA_DIST
- bugfix in score.c (typo from 1D conversion)
- revisions to extract_fuseki: make partial board patterns
- revised fuseki9.db
- Corrected VC build error converting unsigned 64-bit long to double
- regress.pl split into regress.pl & regress.plx
- added -all, to have regress.pl parse Makefile.in for tstfile list.
- html view has better marking of non gg_genmove positions.
- New move generator: combinations() in new file combinations.c
- double attack threats detected
- better valuation of attacks on worms
- general cleanups

3.1.11 released October 21, 2001

- tuning
- owl tuning
- eye tuning
- new function owl_proper_eye() and autohelper with the same name
- valuation of uncertain owl defense moves revised
- evaluate_diagonal_intersection() revised
- new pattern class b in owl_defendpats.db
- handling of same_dragon field in struct owl_data revised
- do_atari_atari() revised
- bugfixes in make_worms()
- 1D revisions all over the engine
- new debug flag DEBUG_READING_CACHE
- same_dragon() renamed is_same_dragon()
- new gtp commands start_sgftrace and finish_sgftrace
- new and revised regression tests
- new gtp command top_moves
- bugfix in draw_back
- Add ON_BOARD1 assertions in liberty_of_string and neighbour_of_string
- Use Win32 API to get CPU time usage for all Win32 builds, not just VC
- Added a few scattered regression comments
- Updated regress.pl to latest ever evolving version.
- Adds several test cases and SGF files to trevor.tst & games/trevor/
- reorientation code moved from gtp.c to play_gtp.c
- owl_rot.tst uses reorientation code
- fixed sscanf problem in (worm|dragon)_(stones|data)
- allow dragon_stones to take color parameter, as well as coord.
- revisions to capture.tst and vie.tst
- further 1D revision in dragon.c
- top_move functionality added to regress.pl
- filllib.c and semeai.c made 1-dimensional
- new gg_cputime in gg_utils.c
- improved configuration for ncurses/{term,curses}.h
- new and improved tests

3.1.10 released October 14, 2001

- portability fix for MINGW. Don't include crtdbg.h
- rename connect to string_connect.
- all move reason handling is 1D
- owl goal and other date are 1D
- new and revised test cases
- bugfix in random.c
- revision of readconnect.c
- bugfix for Cygwin: gtp_dragon_data misreports invalid coordinate
- revision of trevor.tst
- bugfix in inv_rotate: use bs-1 instead of bs
- new gtp function orientation
- new gtp function query_orientation
- in gtp_mprintf use gtp_print_vertex for the %m format specifier.
- revision of regress.pl, Stone.pm
- revision of engine/engine.dsp: remember readconnect.c
- make gtp_loadsgf reorient gamerecords
- make gtp_printvertices orient output points back
- new function count_common_libs() in board.c
- struct worm_data tracks all attack, defense, attack and defense threat points
- remove_attack_move() and remove_defense_move() removed
- attack_move_known(), defense_move_known(), attack_threat_move_known(),
  and defense_threat_move_known() moved from move_reasons.c to worm.c
- change_attack() and change_defense() moved from utils.c to worm.c
- new functions change_attack_threat() and change_defense_threat() in worm.c
- new function worm_reasons() in worm.c
- trace messages in worm.c changed to DEBUG_WORMS messages
- remove_opponent_attack_and_defense_moves() and
  do_remove_false_attack_and_defense_moves() removed from move_reasons.c
- NON_ATTACK_MOVE and NON_DEFEND_MOVE move reasons removed
- try a little harder to find attack threats
- attack.db and defense.db revised
- indirect_helper() removed from helpers.c
- tuning
- minor owl tuning
- new function have_common_lib() in board.c
- new option --decide-connection
- new function decideconnection() in sgfdecide.c
- bugfixes in board.c, sgfdecide.c, and main.c
- new IS_COLOR macro
- comments moved from regression/STRATEGY to strategy.tst
- time_report has a mintime parameter
- many new tests in strategy4.tst
- new regression/golois/*.sgf
- new connect.tst global.tst vie.tst wolf.tst
- new gtp function cputime

3.1.9 released October 7, 2001

- revised examine_move_safety heuristics
- owl_determine_life() revised
- new gtp functions connect and disconnect
- naive_ladder() made global
- warnings eliminated from readconnect.c
- most functions in readconnect.c made static
- add point reorientation functions
- add some comments to dfa.c
- bugfix and cleanup in naive_ladder()
- new interface/GoImage/Stone.pm
- struct eye_data arrays changed from 2D to 1D
- 9x9 case revised in fuseki()
- bugfix in goal detection in matchpat, don't accept empty goal vertices
- bugfix in gtp_genmove()
- new test cases in owl.tst
- further 1D revisions in worm.c
- find_lunch() moved from utils.c to worm.c
- is_same_worm() converted to 1D
- bugfix in list_move_reasons()
- revised test case in niki.tst
- tuning
- owl tuning
- connection tuning
- new implementation of compute_primary_domains()
- new eye pattern
- bugfix in fuseki.c
- cleanup and further 1D conversion in optics.c
- sgf_decideeye doesn't require owl computation
- 1D revisions in worm.c
- is_worm_origin(), propagate_worms(), does_attack(), does_defend() are 1D
- NNGS customization removed from ascii interface
- gtp_worm_stones can be run with stackp>0 and can take a color argument
- mkpat can take -i and -o options
- MIN_BOARD is 5

3.1.8 released October 1, 2001

- defend2() revised
- attack2() revised
- break_chain2_moves() revised
- connection_value() revised
- most parts of move_reasons.c converted to 1D
- domain calculation in optics.c now 1D
- hash.c is more 1D
- new function is_ko_point() in board.c
- computation of cavities removed from worm.c
- computation of caves removed from dragon.c
- computation of inessential worms moved from make_dragons() to make_worms()
- computation of ko points removed from make_worms()
- printing of cutting stones removed from genmove.c
- examine_cavity() simplified and made static
- cavity_recurse() simplified
- ko field removed from worm_data struct
- border field removed from dragon_data struct
- several fields moved from struct dragon_data to struct dragon_data2
- false_margin field eliminated from struct eye_data
- cleanup of sgf code
- extended functionality of gtp commands dragon_stones and worm_stones
- gtp_dragon_data returns a list of strings
- new gtp functions dragon_stones and worm_stones
- revision of extract_fuseki
- revision of fuseki.c
- bugfix in break_chain3
- bugfix in special_attack4
- warning fixed in mkpat
- formatting errors fixed in decidestring and other places: use %1m
- bugfix: trace in move_reasons.c
- gtp_dragon_data() revised
- new gtp functions dragon_stones and worm_stones
- twogtp-a writes html
- tuning
- owl tuning
- eye tuning
- one new test case in reading.tst
- new regression/games/trevor/* and unsorted tests mv'ed to trevor
- new tests xxlin.tst
- strategy4 target in regression/Makefile.am corrected
- rotated tests revised
- dsp files revised

3.1.7 released September 24, 2001

- heye[] is now stored as a 1-dimensional array
- halfeye() is now called is_halfeye()
- new macro for traversing all points: for_all_board()
- atari_atari and helper functions now 1D
- all goal functions in reading.c now 1D
- calls to the goal functions in reading.c converted to 1D calling standards.
- bufix in do_find_superstring()
- bugfix in aftermath_genmove()
- bugfix in hashdata_recalc()
- bugfix in store_persistent_owl_cache()
- assertions added to are_neighbor_strings()
- analyze_neighbor() in filllib.c revised
- alternative definition of ASSERT1 macro corrected
- revised valuation of vital eye moves
- colored legends with -T output
- make internals of worm[][] 1-dimensional
- make eye data 1-dimensional
- new macros: PASS_MOVE and NO_MOVE
- change_attack and change_defense are now 1-dimensional
- worm handling in move_reasons.c is now 1-dimensional
- dragon.c is now 1-dimensional
- prefix struct option in getopt.c with gg_
- prefix all occurences of optarg with gg_
- improved color support in cygwin and VC++
- brighter colors under VC++
- increase BOARDSIZE by one
- set MAX_BOARD to 19 for development versions
- new functions readsgffilefuseki, gametreefuseki in sgfnode()
- tuning
- owl tuning
- new strategy4.tst and unsorted.tst
- new game record and new and revised filllib regression tests

3.1.6 released September 15, 2001

- limited pushing of p[][] allows one level of recursion in global_matchpat
- bugfix in sgf_utils.c function get_moveX() and get_moveY()
- new functions find_common_libs() and are_neighbor_strings() in board.c

3.1.5 released September 15, 2001

- board changed from 2D to 1D array representation
- major revisions of board.c and reading.c
- smaller revisions more or less anywhere

3.1.4 released September 14, 2001

- do_atari_atari tries harder to find defenses
- confirm_atari_atari checks to see if tried move really causes the combination
- changing a group's status from CRITICAL to DEAD does not satisfy atari_atari
- bugfix in find_more_owl_attack_and_defense_moves()
- new function start_timer() and time_report() in utils.c
- showtime code cleaned up in dragon.c, genmove.c, and move_reasons.c
- move numbers printed correctly in ascii interface
- minor changes and cleanup in ascii interface
- prefix getopt_long and the options struct with gg_
- new functions sgfFreeNode and sgfFreeProperty
- tuning
- influence tuning

3.1.3 released September 6, 2001

- bugfix in the atari_atari code
- obsolete sgf_dump facilities removed
- remove_string removed from gnugo.h
- add_replacement_move() in move_reasons.c revised
- in value_move_reasons() ko threats are affected by shape values
- tuning
- don't call new_position for every stone when playing out an SGF tree.
- new gtp engine metamachine in interface/gtp_examples
- new gtp command query_boardsize

3.1.2 released September 4, 2001

- realloc space for owl stack if needed
- new static functions push_owl and pop_owl
- bugfix in move_reasons.c to avoid overcounting certain attacks
- move replacement mechanism implemented in move_reasons.c
- new autohelper action replace()
- new game record and regression test
- new tests and regressions

3.1.1 released August 31, 2001

- halfeyes valued slightly more guessing eye value for shapes not in eyes.db
- all owl data stored in do_owl_attack() and do_owl_defend()
- revised definition of inessential strings in owl_find_lunches()
- confirm_safety() revised
- owl tuning
- global_matchpat() to perform pattern matching on the whole board.
- removed scan loops from different files.
- matchpat() made static
- size test made one time for all the board.
- reverse spiral implemented to compute the move's row in the spiral path.
- bugfixes and improved trace output in atari_atari functions
- bugfix in dragon.c: broken format crashed printworms option
- bugfix in play_gtp.c: format needed extra newline
- configure --enable-profile implemented
- new game records and regressions
- new gtp_example vanilla.c
- missing subheadings added in doc/*texi
- BREAKAGE reset

3.0.0 released August 24, 2001

- komi can be set from CGoban using the command line
- play_gmp takes a Gameinfo * parameter
- corrected bounds in small_semeai
- simplified bounds check in double_atari
- explicit cast to avert warning in play_gtp.c
- doc revision

2.7.256 released August 23, 2001

- unused dragon.old_safety retired
- bugfix in owl_determine_life: signed char mx
- no long filenames in games/arb
- variations eliminated in dublin1.sgf
- one dublin1 test in connection.tst
- doc revision

2.7.255 released August 22, 2001

- two declarations moved in liberty.h
- dilate_erode, sgftree_printboard and resize_dfa are static
- doc revision

2.7.254 released August 21, 2001

- MAXSTACK expanded
- struct move_data renamed owl_move_data in owl.c
- superstring_breakchain made static
- bugfix in showboard: capture colors switched
- stray | removed from manyfaces.tst
- revised newlogo
- Trevor Morris and Stephan Somogyi THANKed
- initials cleaned and comments edited in patterns.db
- doc revision

2.7.253 released August 20, 2001

- gtp_loadsgf modified to work on Mac OS X
- DEFAULT_LEVEL 10 in config.vc and config.vcin
- newlogo.jpg restored in doc/
- gtp2_6 added to interface/gtp_examples/
- doc revision

2.7.252 released August 19, 2001

- moved interface/gtp/ to interface/gtp_examples/
- pragma disable 4244 4305 added to config.vc and config.vcin again
- placehand does not place a stone if handicap == 1
- gameinfo_play_sgftree default handicap is 0.5 if handicap != 0
- regress.awk strips carriage returns for DOS compatibility
- doc revision

2.7.251 released August 18, 2001

- moved the komi field from Gameinfo to Position
- change usages of komi in various places
- estimate_score no longer declared in gnugo.h
- use gnugo_estimate_score in play_gmp, play_solo, play_ascii, debugboard
- bugfix in gameinfo_load_sgfheader: initialize handicap
- abortgo.sgf reference taken out of abortgo
- gameinfo_play_sgftree does not place a stone if handicap 1
- twogtp default handicap 0, not 1
- twogtp declares file FF[4] not FF[3]
- doc revision
- win/ directory removed
- WINDOWS revised again

2.7.250 released August 17, 2001

- bugfix in main.c: stray hyphen broke compile
- bugfix in interface.c: reject weird handicaps
- bugfix in double_atari: reject off board locations
- bugfix in aftermath: reject off board locations
- new WINDOWS
- new logo
- do_play_move made static
- doc revision
- pragma disable 4244 4305 added to config.vc and config.vcin
- new command load <file name> in ascii mode.
- reference of --autolevel in help massege.
- fixed a bug in sgf file saving (to avoid strange handicap)

2.7.249 released August 16, 2001

- print_moyo color parameter eliminated
- All FIXME's classified post 3.0
- bugfix in owl_big_eyespace: check ON_BOARD(oi,oj)
- bugfix in fill_liberty: check ON_BOARD
- bugfix: initialize path in dfa matcher
- moved dfa scan function and others from dfa.c to matchpat.c
- moved dfa_fixup_for_size into dfa_compile_for_match.
- cleanup of dfa code
- removed heavy functions dfa_scan() and dfa_restart()
- new function scan_for_pattern()
- New warning in mkpat for DFA_MAX_MATCHED update.
- a warning fixed in dfa.c
- Any pattern db can use wired dfa's.
- removed load_dfa() and save_dfa() functions.
- removed -d option from mkpat.
- removed unused values from dfa_t struct
- sync_product uses a hash table instead of an huge array
- new stucture test_array_t and new static functions in dfa.c 
- DFA_MAX_BOARD set to 21
- revision of all .dsp files
- analyze.h removed from engine/Makefile.am
- unused function dump_data removed from score.c	
- bugfix in aftermath_genmove()
- code cleanup
- unchosen fuseki moves from fuseki database awarded a smaller value
- filllib and aftermath moves also recorded with move_considered()
- potential_moves array converted from int to float
- PROFILE_PATTERNS disabled by default
- computation of inessential strings in owl_find_lunches revised
- is_worm_origin() moved from utils.c to worm.c
- test mode option replaced by a replay option
- code in play_test.c heavily rewritten
- owl tuning
- new gtp function top_moves
- new game record and regression tests
- doc revision
- new tests tanguy.tst, dublin1.sgf and dublin2.sgf
	
2.7.248 released August 7, 2001

- undo implemented in play_gtp
- estimate_score renamed old_estimate_score
- new_estimate_score renamed estimate_score
- gtp commands new_score and prisoners renamed estimate_score and captures
- default level set to 10
- config.guess and config.sub removed from the distribution
- moyo.c and analyze.c removed from the distribution
- obsolete --moyo options retired
- count_territory, evaluate_territory and remove_string removed
- new function gnugo_estimate_score
- doc revision
- cleanup
- minor tuning
- Jens Yllman added to authors
- patterns.dsp replaced
- VC++ warnings addressed

2.7.247 released August 2, 2001

- aftermath_genmove() revised
- bugfix in do_genmove(), no reinforcing moves while scoring
- bugfix in estimate_territorial_value(), no reinforcing moves while scoring
- bugfix in score.c, 19 replaced by board_size
- bugfix in confirm_safety(), verbose not restored in two cases
- values used by worm[][].conditional_status made more consistent
- connection_value returns a higher value if we are ahead
- status INESSENTIAL distrusted by connection_value if we are ahead
- xcut autohelper macro rejects B pattern ! as well as *
- connection tuning
- score, upper_bound and lower_bound are made global variables
- estimate_strategical_value takes score parameter
- revision of score report in play_solo
- new --showscore option
- tuning
- owl tuning
- spelling mistake in regression/Makefile.am fixed
- new regression test and game record
- code cleanup in analyze.c
- assert() changed to gg_assert() in extract_fuseki.c
- mkpat and joseki add copyright notice to built files
- verbose prints the score
- bugfix in report_dragon: if dragon.id = -1 ignore dragon2
- VC++ compatibility changes
- DFAFLAGS is -D instead of -d
- autolevel target is level 10, not 11
- play_gmp uses new_score at game end
- doc revision
- revision of twogtp
- new game records and connection tests

2.7.246 released July 15, 2001

- if ahead, owl_prevent_threat move reasons given real value
- tuning
- owl tuning
- Chinese counting implemented
- ascii mode revised
- files gtp.c and gtp.h under X11 licensing
- autolevel option activated
- bugfix in matchpat.c
- new #define GNUGO_PATH in config.h.in
- fixed some problems with inclusion of dfa in pattern c files.
- mkpat is now called with option -D instead of -d => no more binary dfa files.
- in matchpat.c dfa_match_init do not try to load dfa's files anymore.
- load_dfa() adapted to enable wired dfas
- wired dfas
- new macro gg_assert
- change_dragon_status() replaced by change_matcher_status()
- minor cleanup
- atari_atari_try_combination turns down verbose
- hyphenation of some command line options
- project files *.dsp and *.dsw revised
- color support revised
- doc revision

2.7.245 released July 5, 2001

- aftermath code revised
- new options --allow-suicide, --play-out-aftermath, --capture-all-dead
- unused constant MAX_TRY removed from genmove.c
- option --noinhibit removed
- new function and autohelper max_eye_value()
- new global doing_scoring affecting valuations while scoring
- bugfix in valuation of attack_either and defend_both moves
- neither black nor white used in colored displays
- new gtp commands final_status, final_status_list, and protocol_version
- gtp_playblack and gtp_playwhite revised
- warning eliminated in debugboard/gui.c
- fuseki9.db regenerated from a bigger set of games
- new regression tests and game records
- regressions/niki.tst included (omitted by mistake from 2.7.244)
- new autohelper macro effective_size
- copyright notice added to twogtp
- depth values increased in owl_substantial
- followup contribution cap lowered to tot_value
- tuning
- owl tuning
- hyphens replace underscores in command line options
- doc revision

2.7.244 released July 1, 2001

- followup values are calculated more carefully
- attacks on uncertainly DEAD dragons are now called uncertain defense
- confirm_safety less verbose
- demotion of many fuseki patterns
- tuning
- owl tuning
- reduction of j and t classes
- new function atari_atari_try_combination and autohelper macros
- TRACE_ATARI_ATARI replaced with DEBUG_ATARI_ATARI
- Use double instead of timeval structs for clock time values
- Removed a lot of heavy timeval functions from clock.c
- new function clock_time_graph() for time/move/level stats
- added more traces to clock functions
- pushbutton does not complain when no initialisation is done
- removed a lot of non used memory check in mkpat:
- mkpat never rejects a pattern but complains if it makes the dfa big
- the -d and -D option of mkpat do not require arguments
- -m option is now alway used in Makefiles to save memory on owl pats
- -r option eradicated from mkpat.
- ignore trailing white space in input to mkeyes.c
- remove @SET_MAKE@ from Makefile.am.
- remove config.guess en config.sub from distribution
- revision of coloring part of configure.in
- play_ascii correctly marks the last stone played while GNU Go thinks
- doc revision
- new test nikki.tst

2.7.243 released June 22, 2001

- dragon.owl_status_certain split to owl_attack_certain, owl_defend_certain
- new_estimate_score is run every move if level >= 8
- if safely ahead, uncertain defensive moves are added
- revision of certain connection values
- WEAK safety value reduced
- doc/gtp.texi revised
- aftermath code revised
- warnings eliminated in clock.c
- on board assertions in same_dragon()
- liberty filling code revised
- value of empty corners reduced in fuseki.c
- tweek in influence_callback()
- more careful valuation of ko threats in value_move_reasons()
- confirm_safety() call in review_move_reasons() avoids bad ko threats
- more careful detection of disturbing moves in the persistent owl cache
- new function owl_confirm_safety()
- new function atari_atari_confirm_safety()
- confirm_safety() and double_atari() revised
- gtp_final_score() revised
- new gtp commands fixed_handicap, level, name, and version
- code cleanup
- tuning
- owl tuning
- eye tuning
- new helper backfill_helper() and autohelper function with same name
- new function interface/twogtp

2.7.242 released June 19, 2001

- bonus for uncertain defense/attacks reduced
- bugfix: defense threat move reasons not generated for illegal moves
- tuning
- owl tuning
- more careful to get dragon.owl_status_certain right
- dragon.owl_status_certain can affect dragon.safety
- corrections to -m option
- bugfix: OWL_DEFENSE_THREAT was reported incorrectly
- adjective ``reliable'' disassociated from semeai()
- bugfix in decidedragon: report uncertainty correctly
- revision of gtp_report_uncertainty
- ignore trailing whitespace in patterns
- add prototype in dfa.h for print_c_dfa
- some sgf files standardized

2.7.241 released June 12, 2001

- owl_attack and owl_defend return a certainty value
- new field dragon.owl_status certain
- new UNCERTAIN_OWL_ATTACK and UNCERTAIN_OWL_DEFEND move reasons
- revisions and corrections to some gtp functions
- tuning
- owl tuning
- reduced value of j patterns by one point
- merged new_matchpat.c into matchpat.c
- when no dfa file is found, use standard do_matchpat()
- fixed a reference to nonexistent merged_board[][].
- updated dfa matcher to merged_val optimization.
- removed check_pattern() function.
- dfa board preparation moved to dfa_match_init()
- new constant DFA_MAX_MATCHED
- assertion to check possible DFA_MAX_MATCHED overflows.
- added --clock,--byo_time and --byo_period in --help listing.
- new function print_c_dfa() in dfa.c
- new option -D <memory> in mkpat.c puts the dfa into the binary
- doc revision
- new tests and regressions
- corrections to old tests and regressions

2.7.240 released June 12, 2001

- new autohelper function macro owl_threatens
- CAN_THREATEN_ATTACK and CAN_THREATEN_DEFENSE renumbered
- status_to_string revised
- gtp declarations sorted alphabetically
- new gtp command "help" lists gtp commands
- gtp command dragon_data revised
- show_dragon revised
- new function safety_to_string
- tuning
- owl tuning
- game regression/games/pending ssstator.sgf added
- last two moves cached in global last_moves_i, last_moves_j array
- bugfix: sometimes owl_threat_status was wrongly UNCHECKED
- when reading a file even passes are given to gnugo_play_move
- OWL_PREVENT_THREAT reason valued more if opponent adds to a dead dragon
- new vital owl attack pattern VA17
- change ko_i and ko_j to board_ko_i and board_ko_j in new_matchpat.c
- bugfixes in captured_territory() from score.c
- new game records and regression tests
- aftermath code revised
- pure_threat_value increased from 0.0 to 0.4 in genmove()
- new flag worthwhile_threat in the move[][] array used in move_reasons.c
- new function add_worthwhile_threat_move() in move_reasons.c
- new pattern classification W for worthwhile threats
- bugfix in owl_does_defend()
- active area computation in store_persistent_owl_cache() revised
- bugfix in atari_atari code
- print_regions() in score.c reimplemented
- new game records and regression tests
- doc revision

2.7.239 released June 8, 2001

- use gg_gettimeofday routines in stead of gettimeofday
- make autoconf 2.50 script detect mingw32
- include config.h in gnugo.h
- new file score.c
- new function new_estimate_score()
- new gtp function gtp_new_score
- fixed --score last and --score [movenum]
- aftermath code revisions
- new function same_string() in board.c
- global variable threats_enabled renamed disable_threat_computation
- new global variable disable_endgame_patterns
- new function owl_hotspots() and reading_hotspots()
- revision of induce_secondary_move_reasons()
- connect_strings bonus revised
- new functions edge_clamp() and edge_block() in reading.c
- performance improvement in atari_atari() and do_atari_atari()
- improved traces from the atari_atari functions
- minor tweaking of move ordering parameters
- performance improvement in superstring_add_string() in utils.c
- tuning
- owl tuning
- new regression suites blunder.tst and newscore.tst
- new and revised regression tests
- new and revised game records
- missing parameters supplied to is_illegal_ko_capture in value_moves
- bugfix in fuseki
- incorrectly dimensioned arrays fixed in gtp_all_legal
- is_pass() moved to board.c
- A number of FIXMEs addressed
- minor cleanup

2.7.238 released May 28, 2001

- aftermath_genmove() revised
- new global threats_enabled to disable computing worm and dragon threats
- definition of WIN, KO_A, KO_B, LOSE, and CUT only in gnugo.h
- minor optimizations in filllib.c and owl.c
- better debug support for persistent owl cache
- move order tuning in reading.c
- neighbors of invincible worms excluded from active area in persistent cache
- owl tuning
- new game records and regression tests
- new option --autolevel (not activated by default).
- revision of clock.c and clock.h
- broken return codes corrected
- new gtp command worm_cutstone
- doc revision

2.7.237 released May 27, 2001

- revised reading and owl return codes
- incremental_board.c removed from engine/Makefile.am
- parameters to chainlinks() and chainlinks2() revised
- incremental_order_moves() counts stones in atari more accurately
- superstring functions reimplemented
- new function find_superstring_stones_and_liberties
- optimization in owl_does_defend()
- detection of insubstantial strings in owl_determine_life made more efficient
- persistent reading cache size doubled from 50 to 100 entries
- revisions in defend2() and defend3()
- order_moves() revised
- bugfix in break_through_helper
- order_moves doesn't sort singleton lists
- pure threat value in do_genmove set to zero
- more stats with -b option
- globals your_last_move_*, my_last_move_*, no_old_data_exists removed
- superceded dragon data caching scheme taken down
- new tests and regressions
- new gtp command worm_cutstone
- new testsuite cutstone.tst
- new game record wormflaw.sgf
- minor tuning
- doc revisions
- some FIXMEs addressed
- debugboard now shows all worm and most dragon data
- upgrade configure.in to work with autoconf version >= 2.50
- new files config.guess and config.sub

2.7.236 released May 17, 2001

- shadowing and persistent caching of reading functions implemented
- new function get_move_from_stack()
- new functions draw_reading_shadow() and purge_persistent_reading_cache()
- new function attack_and_defend()
- new tests and regressions
- fill_liberty() looks for ko back captures
- minor tuning
- bugfix in double_atari
- bugfix in komaster_trymove: i - j confusion
- new functions: gnugo_play_sgfnode and gnugo_play_sgftree
- new functions: gameinfo_load_sgfheader and gameinfo_play_sgftree
- renamed load_sgf_header, play_sgf_tree, sgfPlayNode and sgfPlayTree
- sgfutils.c removed
- removed incremental_board.c and sgfutils.c from engine/Makefile.am
- renamed neighbor_of to neighbor_of_string
- renamed liberty_of to liberty_of_string
- minor cleanup of gnugo.h
- doc revision
- print more debugging info in worm.c
- rewrite loop in worm.c with deltai and deltaj arrays
- revision of play_test

2.7.235 released May 5, 2001

- aftermath code revised
- owl reuse is off by default
- function komaster_trymove() replaces move_allowed()
- optimization in is_self_atari()
- new function owl_big_eyespace() and corresponding autohelper function
- new field unconditional_status in struct worm_data
- new static function edge_closing backfill in reading.c
- move ordering scores available outside order_moves()
- attack4() rewritten
- propose_edge_moves() revised
- relative_break_chain() obsoleted and removed
- move ordering scores written in sgf output file with variations
- sgf output file records komaster
- changed parameters to unconditional_life()
- unconditional_life() now finds unconditional dead stones and territory
- reinforce_helper() revised
- tuning, owl tuning
- tune_move_ordering() can write c code for inclusion
- new and revised regression tests and game records
- new global variable shadow[][]

2.7.234 released May 4, 2001

- komaster implementation corrected in owl.c
- sgf traces now show komaster in -o output
- bugfix: --no_owl_reuse was broke
- bugfix in sgfutils.c which could crash on some files with IL property
- IL property moved to the end of files reading16.sgf and reading20.sgf
- variable length value for SGFproperty
- numeric keypad can be used for cursor movement in debugboard
- debugboard needs slightly smaller screen
- debugboard shows data for both black and white eyes
- new movement buttons for debugboard: ctrl-a and ctrl-e

2.7.233 released April 29, 2001

- revision of the komaster scheme
- persistent owl caching
- owl_attack is more cautious if an attack can produce a ko
- parameters in acconfig.h sorted in order recommended by comments in file
- config.vcin is once again brought in sync with the current config.h
- bugfix in eyes.db
- SGF IL property can set (board_ko_i, board_ko_j)
- owl test 27 corrected
- new tests manyfaces.tst
- new directory regression/games/seki_exotics
- doc revision

2.7.232 released April 25, 2001

- break_chain2_efficient_moves() revised
- bugfixes in order_moves()
- new tuning parameter safe_atari_score in order_moves()
- bugfix in configure.in
- spelling correction in gnugo.texi
- same_dragon(), report_dragon() and ascii_report_dragon() moved to dragon.c 
- speed improvements in filllib.c
- corrected size of defend_not_adjacent_lib_score[] array in reading.c
- bugfix and minor reorganization in review_move_reasons()
- remove incremental_board.[ch] from engine/Makefile.am
- hashtable_unlink_closed_results() can now remove read results selectively
- remove incremental_board.[ch] from engine/Makefile.am
- hashtable_unlink_closed_results() can now remove read results selectively
- attack tuning
- new GTP command: echo
- attack tuning
- tuning
- endgame performance tuning
- minor cleanup
- commented some tests in NICKLAS test suite
- bugfix in nicklas2.tst
- SGF PL property handling in play_ascii.c corrected
- revised order of inclusion of header files in interface/main.c
- Chinese and Japanese rules were switched
- new files "clock.h" and "clock.c" 
- new global struct "clk" handeling the timers.
- new global variable "clock_enabled" (set to 1 by --clock XXX).
- new functions clock_isOver(), clock_isByoYomi(), clock_getTimeLeft()
- new options --clock, --byo_time and --byo_period
- compute the clock delta error
- cleanup clock initialisation in main.c
- new games and regressions in arb.tst
- new games mfgg*.sgf and nightmare.sgf in regression/games/pending
- macros abs, max and min renamed gg_abs, gg_max and gg_min

2.7.231 released April 20, 2001

- we do not reuse data unless 2 last moves are on the board
- last moves are set by play_solo
- extra level inserted between levels 6 and 7
- nominal depth variables by mandated depth variables
- revised handling of depth variables set at command line
- new function set_depth_values()
- get_location renamed string_to_location and moved
- review_move_reasons tries harder not to return illegal moves
- same_dragon() moved to board.c
- redundant lunch timing removed from dragon.c
- average move time computed by --showtime
- atari_atari uses restricted_defend1 to find second move
- tuning
- aftermath code revised
- new function aftermath_compute_score()
- new debug flag DEBUG_AFTERMATH
- new functions store_position(), restore_position() in engine/interface.c
- who_wins() moved from moyo.c to utils.c and revised
- superstring_breakchain() now considers ko
- score computations consistently use positive values for white wins
- gtp_loadsgf sets no_old_data_exists=1
- new gtp command final_score()
- scoring option --score aftermath now works properly
- new regression file score.tst
- add configure test for variadic #define
- fix bug in configure test for __FUNCTION__
- remove __ prefix from function prototypes in gg-getopt.h
- new option --chinese_rules
- new configure option --enable-chinese-rules
- new functions ascii_report_dragon and report_dragon for use in gdb
- new game records and test cases
- minor doc revision

2.7.230 released April 13, 2001

- default default level is 8
- default level can be set at configure or run time
- default cache can be set to arbitrary value at configure time
- revised ko handling
- kothreat_needed no longer needed
- aftermath uses genmove_conservative
- tuning
- owl tuning
- influence tuning
- systematic use of faster ON_BOARD macro
- new function is_illegal_ko_capture()
- does_capture_something() made public
- new function genmove_conservative
- improved --showtime information
- minor revision of confirm_safety
- print_top_moves() split out from review_move_reasons()
- configure tests for keypad
- malloc.h inclusions taken down
- help string revised
- new tests and regressions

2.7.229 released April 9, 2001

- caching of owl data implemented and reuse on later moves
- showtime option shows information about owl reading time
- new global variables my_last_move_i, my_last_move_j, no_old_data_exists
- last_move_i, last_move_j renamed your_last_move_i, your_last_move_j
- incremental_order_moves() revised
- order_moves() revised
- attack2() revised
- bugfix in linear_eyes()
- do_owl_attack() and do_owl_defend() revised and simplified
- more robust topological eye analysis in owl_determine_life()
- vital moves for multiple eyespaces recognized in owl_determine_life() 
- sniff_lunch() revised
- owl_eyespace() ignores eyespaces which do not yield a single eye
- joseki.c revised
- tuning, owl tuning, eye tuning
- new takamoku joseki
- new game record and test cases
- test results updated

2.7.228 released March 30, 2001

- parameters kom_i and kom_j complement komaster field in many functions
- routine_i_j_stackp renamed compressed_data
- komaster added to cached compressed_data field
- parameters ko_i and ko_j renamed board_ko_i and board_ko_j
- GRAY is a synonym for GRAY_BORDER
- incremental_board.* removed
- incremental board functionality merged into board.c
- revised komaster scheme in reading.c and owl.c
- trick to avoid sorting corners in matchpat.c
- mkpat -m now works in both dfa and non-dfa mode
- compile_for_match() no longer calculates merged values
- revised debug messages in influence.c and sgfnode.c
- tuning
- owl tuning
- influence tuning
- new game records and regression tests
- test results updated

2.7.227 released March 23, 2001

- new file engine/aftermath.c
- temporary option "--score aftermath"
- "connect strings" bonus in move_reasons.c revised
- bugfix in value_move_reasons
- all vital owl attack pattern matches counted
- bugfix in owl_determine_life(), a no longer valid shortcut disabled
- dead code removed from owl_reasons()
- break_chain2() revised
- various FIXMEs addressed
- try kos in play_break_through_n(), play_attack_defend_n(),
  and play_attack_defend2_n()
- bugfix in atari_atari
- worm threats on second order liberties.
- new transform.c
- endgame tuning
- tuning
- eye tuning
- owl tuning
- new regression test cases and game records
- more copyright messages updated
- minor doc revision

2.7.226 released March 21, 2001

- bugfix in atari_atari
- minor speedups in matchpat.c
- looks for tactical ko theats
- long USAGE string split in interface/main.c
- removed main.c.zheng and interface.dsp from distribution
- tuning
- owl tuning
- updated copyright messages

2.7.225 released March 15, 2001

- new move reasons: ATTACK_THREAT_MOVE and DEFEND_THREAT_MOVE
- new functions compute_effective_worm_sizes() and
  find_worm_attacks_and_defenses() split off from make_worms()
- new function find_worm_threats(), called from make_worms()
- redundant NULLs removed from attack.db, barriers.db, conn.db,
  defense.db, endgame.db, fuseki19.db, fuseki9.db, and patterns2.db
- extract_fuseki.c revised not to generate unnecessary NULL string
- owl tuning
- new and revised regression tests and game records

2.7.224 released March 8, 2001

- komaster status stored in reading cache
- several functions in cache.c made static
- new function incremental_order_moves() to support order_moves()
- cleanup in topological_eye() and evaluate_diagonal_intersection()
- improved traces in owl.c
- semeai detecting code in owl_reasons() taken down
- tuning
- eye tuning
- owl tuning
- endgame tuning
- new game record
- new and revised regression test cases
- endgame fix in move_reason.c
- cleanup in helpers.c
- tests for both sides in endgame.tst
- estimate_score only if DEBUG_SCORING
- revision of rotated tests and arb.tst
- vc project files revised
- Yin Zheng and Don Wagner added to acknowledgements

2.7.223 released February 28, 2001

- bugfix in play_move()
- make_domains() distinguishes strictly between owl calls and others
- bugfix in examine_position()
- inessential worms excluded in one time in estimate_strategical value
- false_margin() revised
- inessential strings added in the owl code
- MAXPATNO incresead in mkeyes.c
- tuning
- eye tuning
- owl tuning
- name collisions resolved in pattern databases
- regression/READING revised
- new and revised regression test cases
- bugfix in regressions/Makefile*
- revised nicklas* regressions

2.7.222 released February 26, 2001

- dead code removed from dfa.c, dfa.h, mkpat.c
- o_somewhere and x_somewhere only check matcher_status if stackp==0
- bugfix in atari_atari
- bugfix in analyze_semeai
- dragon.owl_status, status and matcher status initialized
- tactically critical nakade stones reclassified as inessential
- influence code revised
- no strategical attack value for strongly alive dragons
- hardwired values for J, j, and t patterns scaled with the board size
- maximum values for j and t patterns disabled for boards < 17x17
- tuning
- influence tuning
- owl tuning
- endgame tuning
- bugfix in mkpat.c, patterns of class c were unintentionally disabled
- new game records
- new and revised regression test cases
- nonstandard SGF records and missing handicap stones fixed
- Mathias Wagner thanked

2.7.221 released February 19, 2001

- restricted_attack2 and restricted_defend1 remember to set komaster
- matcher_status only initialized to CRITICAL if owl code says so
- bugfix in matchpat(), static variable properly reset
- new debug messages in semeai.c
- tuning
- rotated tests updated
- test results updated
- new test reading 141

2.7.220 released February 17, 2001

- TODO revised
- experimental influence based score estimation
- scoring option in ascii interface uses the influence score estimate
- test for tactically critical O worms restored from 2.7.218
- atari_atari tries harder to find refutations
- influence B patterns do not accept dead stones
- revised connection values
- bonus for moves which both owl defend/attack and connect/cut something
- new autohelper for owl patterns; owl_eyespace()
- defend_both() tries harder to find attackable splitting strings
- class_mask[CRITICAL][color]=CLASS_O in new_matchpat
- open dfa files in binary mode on MS-DOS and Windows
- fix dfa error messages.
- sgf code now understands PL[1] and PL[2]
- new pattern class c, weak connections
- tuning
- owl tuning
- influence tuning
- eye tuning
- new game records
- new and revised regression tests
- test results updated

2.7.219 released February 13, 2001

- redundant test for tactically critical O worms taken down in shapes_callback
- fix bug in glib configuring
- link dfa.c instead of include it.
- extra parens in influence
- add extra brackets to code1 macro in accumulate_influence
- tuning
- bugfix in mkpat.c: autohelper function halfeye() now works
- gnits automake option removed
- new test ego.sgf

2.7.218 released February 7, 2001

- O patterns reject CRITICAL friendly dragons
- in make_worms() if worm.defend==PASS move not tried
- in attack_callback() ignore strings with 5 liberties
- default memory increased to 32Mb
- configure supports 48MB and 64MB models
- minor tuning
- doc revision
- vsnprintf error gives warning, not fatal error
- duplicate owl test 186 renumbered

2.7.217 released February 1, 2001

- worm.c: only add defense move if worm.defend != PASS
- find_defense returns PASS if string is alive as stands
- defend1 pattern gets constraint
- caching scheme revised so that the cache can be cleared on the fly
- new debug flag DEBUG_READING_PERFORMANCE
- only make requested dfa files (currently owl*dfa)
- tuning
- owl tuning
- new game record dniwog.sgf

2.7.216 released January 29, 2001

- missing files generate_owl_dfa.sh and matchtest.sh in minipat2 restored
- local_owl_node_counter initialized in owl_substantial

2.7.215 released January 28, 2001

- bugfix in analyze_semeai()
- bugfix in find_attack_patterns()
- new gtp command combination_attack
- defend_against_atari_helper() revised
- new regression test suite atari_atari.tst
- STRATEGY revised
- new regression tests and game records
- reenable board printing on core dumps
- bugfix in attack_callback: attack patterns are matched again
- integrate rolled and unrolled versions of accumulate_influence
- move invariant code out of loop in accumulate_influence
- put patterns/minipat2 under automake control
- include unistd.h in patterns/dfa.c for sleep function prototype
- add pkgdata_DATA macro to patterns/Makefile.am
- add macro DFAFLAGS
- bugfix in dfa generation: borders constraints now always checked.
- modification in patterns.h to avoid a warning: struct dfa *pdfa
- add experimental check_pattern_light() function only checking
- DEBUG_OWL_PERFORMANCE reports CPU times
- vgprintf uses %.2f for %f
- tuning
- influence tuning
- owl tuning
- attack tuning
- minor cleaning

2.7.214 released January 21, 2001

- combo attack and defend_both/attack_either can't both add to move value
- bugfix in atari_atari()
- eye tuning
- owl tuning
- READING revised
- new and revised regression tests
- test results updated (except nicklas*.tst)
- doc revision

2.7.213 released January 20, 2001

- bigger moyo measure allowed for big dragons before owl code is disabled
- compute_eyes_pessimistic() no longer consults the life code
- cleanup of mkeyes.c
- now possible to specify edge and corner vertices in eyes.db
- mkeyes.c and recognize_eye() 
- owl_substantial() revised
- bugfix in special_rescue3()
- loop unrolled in order_moves
- revision of is_hoshi_point
- bugfix in analyze_semeai(): don't try PASS moves
- shape value in j or t pattern now modifies hard-wired value
- atari_atari makes atari even if a chain is already in atari
- environment variable $GNUGO_PATH used to load dfa files
- fixup a Sun portability bug with enable-dfa
- fixup for owl_vital_apats.db with enable-dfa
- tuning
- connection tuning
- eye tuning
- owl tuning
- READING revised
- new regression tests and game records

2.7.212 released January 18, 2001

- assertion added in is_ko()
- revision of compute_eyes_pessimistic()
- vital_apats consulted also by do_owl_defend
- vital_apats only consulted if level >= 9
- followup values reduced in two helpers
- eye tuning
- owl tuning
- two new helpers finish_ko_helper() and squeeze_ko_helper()
- portability patch for dfa in patterns.h
- portability patch for cygwin in mkpat.c
- test revisions

2.7.211 released January 16, 2001

- new file owl_vital_apats.db
- vital_apats are consulted by do_owl_attack regardless of genus
- new static variable match_found in owl.c
- estimate_territorial_value() limits overvaluation of half point kos
- changed order of min and max constraints in value_move_reasons()
- analyze_semeai() revised
- generic_walk made static in utils.c
- tuning
- owl tuning
- eye tuning
- READING and STRATEGY revised
- new and revised regression test cases
- new game records
- rotated tests corrected

2.7.210 released January 14, 2001

- bugfix in reading.c: superstring liberty arrays needed more space
- bugfix in owl_reasons which could cause a crash
- bugfix in owl_threaten_attack(): return value was always 0
- owl threatened groups are WEAKLY_ALIVE
- value of connecting WEAK and WEAKLY_ALIVE groups increased
- owl_threats not evaluated if level <= 7
- tactical reading move order tuned
- tuning
- owl tuning
- tuning of hoshi.sgf and sansan.sgf
- new regression suites endgame.tst, viking.tst and strategy28.sgf
- new tests in owl.tst and strategy2.tst
- new regression game records
- revision of rotated test suites

2.7.209 released January 10, 2001

- new parameter superstring_depth (default 7)
- minor tuning of hoshi.sgf
- tuning
- owl tuning
- connection tuning
- renumbering of owl patterns
- AB property added to handicap games in regression/games
- one new owl test
- doc revision

2.7.208 released January 7, 2001

- new reading function special_rescue3
- break_chain2 and break_chain3 calls removed from defend2 and defend3
- call edge reading function from attack2 and attack3
- superstring_breakchain depth in defend2 changed to backfill2_depth
- defend2 and defend3 try playing a liberty of the superstring
- special_rescue3 called from defend3
- break_chain2_moves tests for self atari
- move ordering adds bonus for saved moves
- doc revision
- basic worm building extracted from make_worms.
- new function: build_worms
- estimate_territorial_value requires owl reasons with VITAL_EYE_MOVE
- better reading at the edge
- some fixes in debugboard
- use same reading depths in debugboard as in gnugo
- minor tuning

2.7.207 released January 4, 2001

- new function break_chain2_efficient_moves
- revision of special_rescue()
- revision of attack2(), attack3(), superstring_breakchain()
- look harder for neighbors of attack moves in examine_move_safety()
- compute_eyes_pessimistic tracks margins adjacent to margins
- owl_find_lunches considers ko captures
- owl_escape_value checks empty before returning -10
- decision to handle tactically moved to semeai_analyzer
- semeai analyzer adds move reasons instead of moving defense
- tuning
- owl tuning
- influence tuning
- revision of rotated tests

2.7.206 released January 3, 2001

- revision of print_influence and print_numeric_influence
- value_move_reasons considers moves with min_territory>0
- reversed level inequality fixed in review_move_reasons
- is_legal replaced by safe_move call in semeai_analyzer
- revision of proper_superstring_chainlinks() and superstring_recurse()
- new patterns in barriers.db
- general cleanup
- tuning of seki patterns
- comments about regression tests
- doc revision
- manpage revision
- new file gnugo.pod

2.7.205 released January 1, 2001

- semeai analyzer looks for owl solution first
- semeai analyzer not invoked for inessential dragons
- owl patterns classified
- bugfix in superstring_breakchain
- minor tuning
- new regessions arion.tst
- revision of rotated tests
- minor doc revision

2.7.204 released December 26, 2000

- superstring technology used in attack2, defend2
- new static functions restricted_attack2, in_list in reading.c
- libi, libj arrays sized 2 (formerly 3) in attack2
- minimum standard joseki value raised to 27
- hurry replaced by level
- print_influence takes dragons_known parameter
- obsolete code removed from optics.c
- minor tuning
- doc revision
- doc/indigo2.sgf removed from distribution


2.7.203 released December 21, 2000

- owl status is checked also for dragons with high escape potential
- new safety value WEAKLY_ALIVE for dragons which are owl alive by escape
- fill_liberty() code revised
- new function filllib_confirm_safety()
- new debug flag DEBUG_FILLLIB and new debug traces in filllib.c
- move valuation slightly revised
- influence code revisions
- maximum move values for standard joseki removed in shapes_callback()
- tuning
- owl tuning
- influence tuning
- new regression test suite filllib.tst
- new tests and game records
- doc revision
- new superstring functions in utils.c
- find_superstring_recurse() renamed superstring_recurse() and generalized
- new superstring_breakchain() and restricted_defend1()
- Separated the SGF library totally from the engine
- integrated sgf_utils.h into sgftree.h
- The Gameinfo struct expanded
- movenum moved to the internals (from gnugo.h to liberty.h)
- Some FIXMEs addressed
- General minor cleanup

2.7.202 released December 17, 2000

- anisotropic attenuation removed from the influence function
- attenuation and strength split into black and white in influence.c
- new semantics for E class patterns in influence_callback()
- new macro ASSERT_ON_BOARD defined in liberty.h
- assertions added in optics.c, move_reasons.c, owl.c, and reading.c
- minor revisions of valuation of defense and connect moves
- bugfix in linear_eye_space()
- bugfix in attack1()
- warnings eliminated in main.c
- workaround in influence.c for bug in main.c
- bugfix in patterns/patterns.h
- bugfix in mkpat for dfa
- tuning
- owl tuning
- default owl_node_limit increased to 600
- revisions of golife.tst, ld_owl.tst, and ld_owl_rot.tst
- doc revisions

2.7.201 released December 8, 2000

- interface/interface.c removed from the distribution
- legal(), suicide() and self_atari() renamed is_legal() etc.
- New API function: gnugo_is_suicide.
- interface/interface.c removed
- playing options quiet is now a global variable
- A number of FIXMEs addressed
- bugfix in linear_eye_space
- minor revision of komoku.sgf and hoshi.sgf
- minor tuning
- unnecessary NULLs removed in patterns.db
- doc revision

2.7.200 released November 30, 2000

- serious bugfix in semeai()
- bugfix in owl.c
- bugfix in pattern ED58
- bugfix in fill_liberty()
- revision of rotated tests
- new file regression/games/me.tst and 3 new strategy2 tests
- test results updated

2.7.199 released November 29, 2000

- color support test restored to 2.7.193 condition in configure.in
- missing doc/api.texi replaced
- analyze_semeai is not called if an owl_substantial worm is en prise
- minor tuning

2.7.198 released November 28, 2000

- bugfixes in owl.c
- new patterns in eyes.db
- tuning
- owl tuning
- minor revisions in analyze_semeai
- revised and new regression tests
- bugfix in dfa.c: gpout was not cleanly reset before synchronization
- if DFA_SORT is set in new_matchpat then sort patterns before check_pattern
- new stat functions update_pattern_stats(), display_pattern_stats(), 
  reset_pattern_stat()
- dfa_add_pattern is now able to add all transformations into the dfa
- new functions for dfa_add_pattern: permut() and show_pattern_instance()
- fixed some bugs in matcher.c, and matchtest.sh
- removed some unused files.
- option -tm forces the anchor to be in the center and adds all transformations
- added little_owl.tst 
- test results updated

2.7.197 released November 27, 2000

- old code removed from moyo.c
- sgffile_decidestring() renamed decidestring() etc.
- owl data structs in owl_attack, etc. made static
- assertion changed in join_dragons
- config.h included in interface.c and main.c
- revisions to owl_analyze_semeai
- show_dragons() lists worm lunches
- assertion corrected in join_dragons()
- new function find_more_owl_attack_and_defense_moves() in move_reasons.c
- strategically_sound_defense() reimplemented
- tuning
- owl tuning
- new file regression/READING reviewing failed reading tests
- new tests in reading.tst and ld_owl.tst
- new game records
- test results updated

2.7.196 released November 23, 2000

- old definition of inessential worms restored
- minor revision of owl_analyze_semeai
- Small rearrangements in board.c
- init_board() renamed to clear_board()
- Some comments and rearrangements in gnugo.h
- major cleanup in hash.h and hash.c
- old definition of inessential worms restored
- #include <config.h> restored in play_ascii.c, play_gtp.c and hash.c
- new function owl_update_goal()
- revisions of owl_does_defend(), owl_does_attack(),
  owl_connection_defends(), and owl_threaten_defense()
- bugfix in owl_threaten_attack()
- doc revision

2.7.195 released November 19, 2000

- owl_analyze_semeai() complete (though still very buggy)
- struct local_owl_data now has a color field
- owl_find_lunches no longer has color parameter
- two missing sgf files restored
- config.h included again in matchpat.c and analyze.c

2.7.194 released November 18, 2000

- continued localization of owl
- new struct local_owl_data for passing goal, boundary and lunches
- new functions owl_update_boundary_marks() and owl_make_domains()
- new function owl_topological_eye()
- name restored in autohelper macro owl_topological_eye
- get_coordinate globalized and moved to printutils.c
- new --decidesemeai option
- new function owl_analyze_semeai()
- Removed all unnecessary inclusion of config.h
- cleanup of worm.c
- Error handing in main.c: get_coordinate()
- shuffling of main.c
- inclusion of cache.h removed from board.c
- definition of inessential worms changed
- dragons classified CRITICAL when owl_attack() and owl_defend() disagree
- join_dragons() revised to choose origin consistently within dragons
- dragon_ring() and dragon_eye() cleaned up and revised
- clear_move_reasons() moved from genmove() to reset_engine()
- revised and extended debug output from influence.c
- strategically_sound_defense() revised
- valuation of inessential dragons corrected
- the owl code doesn't consider escape on the first move
- filter out vital defense moves which are self ataris in owl_determine_eye()
- bugfix in owl_shapes
- bugfixes in owl_substantial()
- attack2() revised
- new function special_attack4() in reading.c
- move ordering retuned
- safe_move() again changed to return 3 for illegal ko captures
- bugfix in shapes_callback()
- gtp_loadsgf() now also calls reset_engine()
- cut_connect_callback revised to deal with join_dragons() changes
- tuning of barriers.db, influence.db, conn.db, and eyes.db
- tuning
- owl tuning
- revision of joseki values
- new game records and test cases
- regression/STRATEGY revised
- mkpat and mkeyes tolerate "\r" for Windows compatibility
- Mingw32 and VC++ compatibility changes in configure.in and debugboard

2.7.193 released November 14, 2000

- owl_topological_eye autohelper macro replaced by topological_eye
- owl goals and boundaries systematically localized
- global owl_goal_color removed
- now O patterns accept critical friendlies if * rescues tactically
- matcher_status used in print_ascii_area (moyo.c)
- new function matcher_status()
- ascii mode save command fixed
- fixme's addressed in play_ascii.c
- tuning
- two ld*sgf files had gotten overwritten by rotated versions--fixed
- revision of test results

2.7.192 released November 12, 2000

- new on board assertions in move_reasons.c
- increased safety value for strongly alive dragons
- territory changes are counted for owl attacks and defenses
- influence changes are counted for semeai moves
- reverse followup values can never more than double the move value
- bugfix in liberty_of_dragon(), check that vertex is empty
- somewhere() function and corresponding autohelpers require that
  found stone does not have status dead
- play_attack and play_defend autohelpers return ko results
- tuning of barriers.db, conn.db, endgame.db
- owl tuning
- tuning of patterns.db and patterns2.db
- double_does_break_helper and wide_break_helper replaced by constraints
- new helpers edge_double_sente_helper and defend_against_atari_helper
- new autohelper defend_against_atari
- new target all_batches in regression/Makefile.am
- revision of rotated testsuite
- updating of test results

2.7.191 released November 10, 2000

- bug fix in update_liberties: k<MAX_LIBERTIES
- bug fix in owl_mark_boundary: don't look for neighbors if dragon.id == -1
- bug fix in owl_does_attack: omit marking goal string
- bug fix in semeai.c: several bj's should have been bi's
- pattern ED70 taken down
- bugfix in sgfgen
- suppress owl traces during estimate_territorial_value()

2.7.190 released November 7, 2000

- effective_size reduced
- minor revision of connection value
- bug fixes in obvious_false_eye, do_owl_attack and do_owl_defend.
- bug fixes in find_superstring_recurse and find_superstring_recurse
- attack4 is more careful about ko
- removed the copy of dfa.c from new_matchpat.c
- new function dfa_add_pattern
- 2 new helpers for dfa_add_pattern: range_check_ok &  show_pattern_instance
- removed dead code from mkpat.c
- testsuite revisions
- tuning

2.7.189 released November 4, 2000 

- atari_atari tries to find irreducible combinations
- loop ununrolled in do_atari_atari()
- depths increased during atari_atari to avoid horizon effect
- improved traces during atari_atari
- joseki patterns do not have strategic attack bonus
- joseki patterns have cap on valuation
- dead code in influence.c removed
- backfill2_depth in modify_depth_values(), etc.
- autohelper functions revised to use matcher_status instead of status
- owl reasons consults matcher status, taking semeai() into account
- subtract one point from move value for a sacrifice play
- tuning 
- owl tuning
- 'A' comment field in joseki db no longer case sensitive
- new tests and game records

2.7.188 released November 1, 2000

- doc revisions
- include gg_utils.h rather than gg_utils.c in analyze.c
- new parameter stop_before_owl for make_dragons()
- new target EXAMINE_DRAGONS_WITHOUT_OWL for examine_position()
- matcher_status printed by show_dragons()
- dragon_escape() revised
- safe_move() calls in filllib.c reviewed
- unnecessary line removed from incremental_remove_string()
- temporary reduction of depth values during influence computation
  disabled
- obvious_false_eye() made public
- semeai threat move reasons listed by list_move_reasons()
- more move valuation details when using DEBUG_MOVE_REASONS debug bit
- bug fixes in move valuation to avoid points being counted multiple
  times for the same stones when they are defended or attacked
  according to multiple sources (tactical reading, owl, semeai)
- new function move_connects_strings() in move_reasons.c
- shape bonus added for moves which connect multiple strings
- revised set of function calls disabled by 'urgent' variable
- do_owl_attack and do_owl_defend also try tactical attack/defense
  moves
- code simplification in do_owl_attack
- DEBUG_OWL_PERFORMANCE traces added in owl_threaten_attack() and
  owl_threaten_defense()
- goal propagation in do_owl_defend() revised
- owl_determine_life() revised
- avoid unnecessary reading in owl_shapes_callback()
- owl_mark_boundary() revised
- FIXME added in owl_does_attack()
- new static function one_two_point() in owl.c
- sniff_lunch() revised
- bugfixes in owl_escape_value()
- atari_atari() revised
- new function find_superstring() in utils.c
- bugfix in examine_cavity() and examine_cavity_recurse()
- a number of stackp==0 assertions added in worm.c and semeai.c
- semantics of GTP command eval_eye changed
- three new patterns in conn.db
- new helper threaten_to_capture_helper()
- new autohelper functions threaten_to_capture, obvious_false_oeye,
  and obvious_false_xeye
- komoku joseki revisions
- tuning and owl tuning
- comment added in regressions/STRATEGY
- owl, ld_owl, strategy, and reading test suites revised and/or extended

2.7.187 released October 31, 2000

- bugfix in owl_reasons: do not pass PASS as a move reason
- bugfix in small_semeai: missing popgo()
- bugfix in pattern ED62: move could be off board
- bugfix in make_dragons: typo for second_defendj
- sethand.c removed
- recordhand() renamed to sgffile_recordboard
- sethand() removed.
- placehand() moved to genmove.c
- ON_BOARD assertions added in move_reasons.c
- FIXME in analyze.c removed
- initialize_engine() renamed reset_engine()
- Reset verbose to correct value in examine_position()
- description of change_dragon_status fixed.
- doc revision
- regress.awk tries to spot core dumps

2.7.186 released October 28, 2000

- tuning
- we try to add only legal owl threat move reasons
- bugfix: pattern 't' attribute was incompletely implemented
- doc revision
- fixed a compilation warning in new_matchpat.c
- added an option -t to mkpat

2.7.185 released October 28, 2000

- white/black_points parameters split in evaluate_territory()
- tuning
- owl tuning
- implementation supplied for owl_does_attack
- trace level reduced when atari_atari runs
- allpats overrides normal shortcuts when an urgent move is on the board
- missing files restored in minipat2/
- material added to and joice respelled in minipat2/README
- revision of rotated tests

2.7.184 released October 25, 2000

- bugfix in owl_substantial: remember that owl_goal_color is global
- but patterns/dfa.c is in EXTRADIST
- configure works with or without --enable-dfa to create alternative versions
- rotated patterns included for tests *
- updated test results

2.7.183 released October 24, 2000

- new module atari_atari with global variable aa_depth
- new atari_atari move reasons
- new autohelper function has_aji()
- value of move in empty corner reduced from 40 to 27
- new owl function owl_substantial
- owl_mark_boundary() split off from owl_mark_goal()
- new function neighbor_of(), a frontend for incremental_neighbor_of()
- tuning
- minor owl tuning
- safe_move() returns 0 in case of an illegal ko capture (as before 2.7.180)
- use AC_SEARCH_LIBS to add -lm only when needed
- curses test is moved outside the enable_color to accomodate debugboard
- adds test for KEY_UP to the curses configuration
- adjust interface/debugboard/main.c if KEY_UP unavailable
- use AC_SEARCH_LIBS for detection of curses and termcap library
- use AC_CACHE_CHECK macro for __function__ and KEY_UP detection
- dfa.c and dfa.h are now in patterns/ not patterns/minipat2/
- new_mkpat adds a dfa_t pointer when DFA_ENABLE is set to 1.
- load_dfa(file_name, NULL) can return pointers to dfa_t struct
- dfa compiles with less errors when -Wall
- made more dfa functions static
- new tests and game records

2.7.182 released October 19, 2000

- new move reason OWL_PREVENT_THREAT
- attacking a dragon that can threaten life gets a small value
- bugfix in recognize_eye
- bugfix in "threat" move valuations: max should be min
- init_gnugo() moved from board.c to interface.c
- new tests and game files

2.7.181 released October 18, 2000

- bugfix in owl_attack: ko dealt with if original goal stone captured
- matcher_status replaces dragon.status in examine_move_safety DEFEND case
- extra newlines eliminated in traces in find_more_attack_and_defense_moves()
- new tests

2.7.180 released October 16, 2000

- semeai_analyzer no longer called with tactically dead dragons
- semeai_analyzer now called with owl critical dragons
- new global variabls owl_distrust_depth and backfill2_depth
- new static owl functions owl_add_move() and obvious_false_eye()
- revision of sniff_lunch
- vital_chain() moved to owl.c
- separate move reasons for both dragons in semeai
- new function add_semeai_threat()
- semeais no longer enumerated for move reasons
- owl tuning
- eye tuning and revision of eyes.db
- bugfix in owl_defendpat D51
- revisions of most reading functions
- break_chain_new() renamed break_chain_moves()
- edge_attack() and edge_defend() unified in edge_attack_defend()
- break_chain() removed
- new function compute_eyes_pessimistic
- looks for positions where eye code
- evaluate_diagonal_intersections() takes new parameters (i,j)
- MAX_LUNCHES increased to 10
- option --enable-dfa sets DFA_ENABLED equal to 1
- minor tuning
- calls to TRACE made DEBUG in life.c
- revision of STRATEGY
- revision of minipat2/ (has own ChangeLog)
- changes to config.vcin
- changes to configure.in and gg_utils.in to make clean mingw build

2.7.179 released October 12, 2000

- node limits revised in initialize_engine()
- traces corrected for owl threat reasons
- bonus for owl threat move (not ko threat) reduced to 3 points
- revision of patterns/minipat2/ (has own ChangeLog)
- minor tuning
- regression/REVIEW renamed STRATEGY and completed
- new owl tests
- test results updated

2.7.178 released October 10, 2000

- new global variables urgent and kothreat_needed
- if a ko threat seems needed, GNU Go tries to make one
- moves that threatens to kill or live are tried near end of game
- if an urgent joseki move is found, some code is not executed
- new dragon fields owl_threat_status, owl_second_attack, owl_second_defend
- new functions owl_threaten_defense() and owl_threaten_attack()
- new function look_for_kos()
- tuning
- new file regression/REVIEW

2.7.177 released October 7, 2000

- experimental directory patterns/minipat2
- bugfixes and indentation fixups in owl.c
- one new eye pattern
- owl tuning
- cleaning of some regression game records
- new and revised regression tests
- release date for 2.7.172 corrected in ChangeLog
- Makefile.bump removed from distribution

2.7.176 released October 6, 2000

- modify_eye_spaces() replaces modify_eye_spaces1() and 2()
- minor cleanup in optics.c
- new eye pattern and cleanup in eyes.db
- tuning
- owl tuning

2.7.175 released October 6, 2000

- if configure --enable-dfa then new_matchpat.c replaces matchpat.c
- tuning
- owl tuning
- only count trymove when we do create a new position
- liberty_of() made incremental
- singleton() replaced by countstone() calls
- matchpat.c and new_matchpat.c: CRITICAL added to class masks
- reformatting in new_patchpat.c and semeai.c
- two new eye patterns
- preliminary garbage taken out of .sgf files
- ad hoc code in worm.c replaced by call to liberty_of()
- gtp can set komi
- new tests, including rotated versions of some old ones

2.7.174 released October 3, 2000

- tuning
- owl tuning
- new patterns and regressions
- in somewhere() move_num replaced by move_num-1
- bugfix in o_somewhere autohelper
- revised handling of labels in joseki.c
- strategy.tst split in two
- proposed replacement engine/new_matchpat.c for matchpat.c 
- in new_matchpat new function check_pattern() split from do_matchpat()
- in new_matchpat arrays and_mask,val_mask and class_mask moved
- new tests and game records
- doc revision
- fixme's updated and classified
- THANKS revised

2.7.173 released September 30, 2000

- bugfix in attack1()
- bugfix in semeai.c: dragon data updated correctly
- revision of whose_moyo_restricted()
- backfill depth increased to 12
- value_moves() visits moves in standard lexicographical order
- tuning
- owl tuning
- new game records and tests

2.7.172 released September 27, 2000

- new joseki classification t, some patterns downgraded
- new chainlinks2(), draw_back(), special_attack3() break_chain_new()
- calling convention for find_cap2() changed
- edge_defend() returns untested candidate moves
- break_chain() no longer returns which link was captured
- edge_attack() now takes ko results into account
- find_cap3() generalized
- chain breaking moves and liberties are ordered in defensive functions
- chain breaking moves, liberties and backfills ordered in attack2()
- defense functions made more uniform
- backfills tested in defend2()
- code reshuffled in attack3()
- order_moves() revised
- backfill_depth increased to 10
- reading_node_counter not incremented by break_chain() and relatives
- new GTP command tune_move_ordering can set order_moves() parameters
- new tests and game records
- doc revision
- typedef of row_of_eye_data moved to liberty.h

2.7.171 [NOT RELEASED]

2.7.170 released September 24, 2000

- minor doc revision
- bugfix in estimate_strategical_value()
- reading code revisions for improved performance
- do_find_defense() added to hash defaults
- a few double kakari variations added to hoshi.sgf
- tuning
- joseki values promoted somewhat
- new game record regression/games/reading10.sgf
- one new test case in reading.tst
- owl tests 122 and 123 include move number
- neurogo.tst extended

2.7.169 released September 22, 2000

- modification to whose_moyo_restricted made default (still overrideable)
- owl_attack tries defending lunch
- owl node limit cut from 1000 to 500
- new autohelper functions x_somewhere and o_somewhere
- new function somewhere()
- tuning
- owl tuning
- new test regression/neurogo.tst
- dragon_invincible modified for portability
- vgprintf calls replaced by fgprintf in printutils.c
- on board assertion in owl_lively
- colored dragon and owl display revamped
- option --statistics works again.
- cleanup of globals.c
- gnugo.h checked for unused declarations
- renumbering of hash bits
- doc revision

2.7.168 released September 20, 2000

- if file "hurry" found on disk, hurry is read from it each move
- new function get_hurry()
- bugfix in examine_move_safety()
- bugfix in compute_primary_domains()
- minor tuning
- new file regression/games/FSF-neurogo.sgf

2.7.167 released September 19, 2000

- reading code speedup
- modification to whose_moyo_restricted contingent on --inhibit option
- minor joseki variations (j classification) promoted to value 20
- reviewing move reasons contingent on -w
- trace format slightly more compact
- minor change in hoshi.sgf
- tuning
- revision of test strategy 51 and new strategy test 79
- UNUSED defined in utils/gg_utils.c

2.7.166 released September 18, 2000

- revised computation of size of moyo surrounding a dragon
- improved workaround in induce_secondary_move_reasons()
- examine_move_safety() made more accurate
- move valuation improvements
- owl_reasons() avoids adding owl attack reasons against nakade stones
- owl_reasons() defends before attacking when there's a semeai
- improved handling of ko attack codes in worm.c
- new anchoring option in mkpat.c
- bugfix in pattern matching of attack and defense patterns
- tuning
- new game record and regression tests
- doc revision

2.7.165 released September 14, 2000

- semeai() updates matcher_status for unfriendly dragons alive by semeai
- revised computation of size of moyo surrounding a dragon
- tuning
- owl tuning
- new files in regression/games (strategy18, 19, 20 and owl11)
- new and revised test cases in owl.tst and strategy.tst
- configure test for availability of usleep()
- select() replaces missing ment for usleep() in debugboard/main.c
- embedded newlines in patterns/transpat.c replaced by explicit \n
- explicit (int) casts to arguments of toupper and tolower

2.7.164 released September 11, 2000

- edge patterns in patterns.db and patterns2.db rotated to standard position
- bugfix in move_reasons.c: too many dragon connections
- dead code removed from dragon.c
- PL[W] added to regression/games/owl10.sgf
- location_set.* removed from engine/
- target transpat is now EXTRA
- doc revision

2.7.163 released September 6, 2000

- mouse code is renamed owl
- new target transpat in patterns/
- new files patlib.c, patlib.h and transpat.c
- default cache size reduced to 16 M
- owl_node_limit reduced from 10000 to 1000
- new configure options --enable-large-model and --enable-small-model
- Changelog entry for 2.7.162 added
- ko result macros moved from reading.c to cache.c
- ko handling in mouse.c simplified and made more strict
- portability fix in hash.c, ULL suffix removed from small constants
- doc revision
- THANKS revised

2.7.162 released September 5, 2000

- minor change to hoshi.sgf
- mouse code is somewhat ko aware
- tuning
- mouse tuning
- new tests
- new autohelper functions legal_xmove and legal_omove
- AUTHORS and THANKS revised

2.7.161 released September 1, 2000

- mouse tuning

2.7.160 released August 31, 2000

- one new pattern in mouse_defendpats.db
- hoshi.sgf revised
- improved ko awareness in reading.c
- loop ununrolled in attack2()
- SGFTRACE calls added to break_chain(), break_chain2(), break_chain3(),
  and relative_break_chain()
- reading functions consistently return an illegal ko capture rather than
  pass if it is the best way to win
- bugfix in gtp_genmove_black() and gtp_genmove_white()
- new files reading08.sgf and reading09.sgf in regression/games/
- new reading tests

2.7.159 released August 30, 2000

- mouse tuning
- tuning
- new files jahy.sgf and reading07.sgf in regression/games/
- new tests
- Wolfgang Manner's hoshi.sgf
- missing include added to cache.c
- fuseki database turned on by default; option --fusekidb replaced by
  option --nofusekidb
- new option --nojosekidb to turn off joseki database
- simplified code in defend1() and defend2()
- new macros UPDATE_SAVED_KO_RESULT() and
  UPDATE_SAVED_KO_RESULT_UNREVERSED() in reading.c to simplify keeping
  track of moves leading to ko
- better handling of ko results in various reading.c functions

2.7.158 released August 27, 2000

- tuning
- cleanup of patterns.db and patterns2.db
- mouse tuning
- new files regression/games/mouse08.sgf and mouse09.sgf
- new mouse tests

2.7.157 released August 25, 2000

- tuning
- minor mouse tuning
- revised awards for J and j patterns
- new files reading06.sgf, mouse07.sgf, strategy14.sgf, strategy15.sgf,
  and strategy16.sgf in regression/games/
- new test cases
- removed vitality report from debugboard gui
- minor doc revision
- keep track of lively dragons in dragon.c
- bugfix in influence_callback()
- bugfix in analyze_semeai()
- dead code removed from helpers.c
- new helper: reinforce_helper

2.7.156 released August 23, 2000

- bugfix in compute_primary_domains
- revision of corner handling in compute_primary_domains 
- minor deviation from documented algorithm fixed in compute_primary_domains 
- attack1 returns 2 in case of a legal ko capture
- cut_connect_callback accepts X stones safe by ko
- basic_cut_helper accepts X stone safe by ko
- followup_value and reverse_followup_value are no longer additive
- unused symbols removed from move_reasons.c
- tuning
- new files strategy13.sgf and semeai1.sgf in regression/games/
- new tests
- semeai() rewritten for new move valuation scheme
- semeai() called from make_dragons() rather than from genmove()
- unused vitality field removed from struct dragon_data
- attempt to identify inessential dragons
- gtp commands debug_influence and debug_move_influence give more information
- function liberty_of_dragon() made static to semeai.c
- bugfix in mouse_determine_life()
- strategically_sound_defense() revised
- bugfix in estimate_strategical_value()
- more careful handling of ko return codes in do_find_defense() and defend3()
- defend2() no longer insists in finding best defense
- regression/regress.awk revised
	
2.7.155 released August 21, 2000

- bugfix in init_influence()
- semicolon added after action lines in pattern database files
- mkpat no longer adds semicolon after antisuji
- induce_secondary_move_reasons() revised
- dragon_safety() rewritten
- review_move_reasons() lists top ten moves in trace outputs
- new format %M in vgprintf
- SGFTRACE calls added after edge_defend() and edge_attack() calls

2.7.154 released August 21, 2000

- new reading functions edge_defend and edge_attack
- reading code smarter about moves on the first line
- liberty_of renamed liberty_of_dragon
- new function liberty_of
- break_chain2 does not try filling liberties of attacked string
- revision of order_moves
- Joseki database turned back on
- mkpat adds semicolon and newline after antisuji
- substantial tuning of patterns.db
- mouse tuning
- new game regression/games/strategy12.sgf (no tests yet)

2.7.153 released August 13, 2000

- autohelper vitality() removed
- autohelper weak() revised
- struct dragon_data field safety renamed old_safety
- new field invincible in struct worm_data
- dragon_invincible() in dragon.c implemented
- worm invincibility and dragon safety printed in show_dragons()
- dragon safety values revised
- init_influence() revised
- connection_value2() in move_reasons.c reimplemented and renamed
  connection_value()
- dragon status used instead of dragon safety in showbord.c

2.7.152 released August 10, 2000

- bugfix in defend2()
- bugfix in tryko()
- new function sgf_trace() in cache.c and macro SGFTRACE() in cache.h
- all --decide* options now save sgf trees in memory
- SGFTRACE() calls in the reading and mouse code
- bugfix in mouse_determine_life()
- bugfix in interface/debugboard/main.c
- bugfix in main.c
- GTP command loadsgf now returns the color to play
- new GTP command same_dragon
- new test suite regression/connection.tst
- new test cases in reading.tst, mouse.tst, strategy.tst, and nicklas.tst
- five new game records in regression/games and regression/games/nicklas

2.7.151 released August 9, 2000

- regression framework revised, temporary .gtp and .res files no longer
  needed
- cleanup of patterns/patterns.db
- experimental code for doing sgf dumps of reading variations in memory
- cleanup of files in sgf/ directory
- bugfixes in writing of sgf trees to file
- global variable mouse removed, together with option --nomouse
- patterns/patterns.c split into patterns/patterns.c and
  patterns/josekidb.c so that the latter file contains the joseki database
  files derived from the joseki sgf files
- bugfix in mouse_defendpats.db
- one new game record regression/games/reading04.sgf
- one new test case in reading.tst

2.7.150 released August 7, 2000

- old escape route measure removed, together with option --old_escape
- new field safety in struct dragon_data2
- bugfix in influence code, tactically saved stones block influence
- more restrictive definitions of moyo and area in the influence code
- new function find_stones_saved_by_move() in move_reasons.c
- bugfix in make_dragons(), status propagated to all intersections before
  calling the mouse code
- tuning
- mouse tuning
- several new game records
- several new test cases in mouse.tst, strategy.tst, and nicklas.tst

2.7.149 released August 3, 2000

- revised handling of shape in move_reasons.c
- tuning of patterns.db, patterns2.db, barriers.db, conn.db,
  mouse_defendpats.db, komoku.sgf, mokuhazushi.sgf, and sansan.sgf
- doc revision
- goal dragon expanded with the whole string containing a new stone in
  do_mouse_defend() 
- new autohelper function mouse_goal_dragon and supporting code in mouse.c
  and mkpat.c

2.7.148 released August 2, 2000

- tuning
- influence values reduced
- friendly influence is valued greater than unfriendly in moyo
- bugfix in examine_move_safety() in move_reasons.c
- bugfix in estimate_territorial_value() in move_reasons.c
- unused sigterm_handler commented out from interface/main.c
- stricter matching of certain commands in the ascii interface
- new game records and tests

2.7.147 released July 31, 2000

- domains can no longer leak past a nikken tobi (2 space extension)
- value used for fuseki database moves increased
- new option --mouse_node_limit
- nominal values for mouse reading parameters introduced
- effects of --hurry option revised
- the mouse reading is now interrupted when too many nodes have been
  visited
- bugfix in territorial valuation of vital eye points
- bugfix in estimate_strategical_value(), avoid counting the same stones
  twice

2.7.146 released July 30, 2000

- new move reason: reverse_followup, intended for reverse sente
- reverse followup value added to a few patterns
- interface/main.h removed
- signal handlers made static
- new tests
- revised handling of -a option
- revision of pattern CB207
- parts of make_dragon() restructured
- dragon_status() revised
- escape influence computation revised
- new field in dragon[][] array, matcher_status
- matchpat() uses matcher_status
- revise_semeai() revised to modify matcher_status
- patterns/influence.db revised
- new mouse defense patterns
- tuning of patterns/patterns.db

2.7.145 released July 29, 2000

- TODO revised
- one pattern revised in patterns/conn.db
- one pattern revised in patterns/patterns.db
- 7 new game records in regression/games/
- 3 new mouse test cases
- 20 new strategy test cases

2.7.144 released July 28, 2000

- new counter for number of trymoves/trykos similar to
  reading_node_counter et al
- new GTP commands clear_trymove_counter and get_trymove_counter
- Tests for life and strategy enhanced with trymove_counter
- goal functions attack(), find_defense(), attack_either(), defend_both(),
  and break_through() collected together in reading.c
- reading_node_counter incremented also in the break chain functions
- doc/patterns.texi, doc/reading.texi, and doc/using.texi revised
- territorial valuation of vital moves revised
- bugfix in mkpat.c

2.7.143 released July 27, 2000

- regression/regress.awk and regression/eval.sh revised
- reordering of some code in attack2 and attack3
- fixmes addressed in reading.c
- new reading functions find_cap3 and break_chain3
- sgf variation count shifted in trymove
- new file regression/games/net3
- net3 regressions
- N1 accepted for reading test 29
- printing functions split off from utils.c to new file printutils.c
- sgffile_decide* functions split off from sgffile.c to new file sgfdecide.c
- new library libboard.a built in engine/
- patterns/joseki.c rewritten from scratch
- joseki database file patterns/*.sgf revised for new joseki compiler
- show_dragons() revised to also show moyo and neighbor info
- order_moves() revised
- new joseki pattern classes added in patterns/patterns.h
- shapes_callback() revised to deal with new joseki pattern classes

2.7.142 released July 26, 2000

- linker option -lm moved from various Makefile.am to configure.in
- new variable branch_depth, defaulting to 13
- default depth value increased from 14 to 16
- defend3(), defend4(), attack3(), and attack4() revised to use
  branch_depth
- new option --branch_depth
- one new pattern in patterns2.db
- new file regression/games/strategy3.sgf
- one new test case in regression/strategy.tst
- new test suite regression/nicklas.tst
- 7 new files regression/games/nicklas/nicklas*.sgf
- new GTP command gg_genmove
- contribution of randomness in move_reasons.c revised
- one new pattern in conn.db

2.7.141 released July 26, 2000

- hash.h and hash.c split into hash.h/cache.h and hash.c/cache.c
- common reading cache code in reading.c and mouse.c moved to
  cache.c/cache.h
- new functions reading_cache_init() and reading_cache_cleared() in
  cache.c 
- movehash variable no longer global
- configure option --disable-hashing removed together with HASHING
  preprocessor constant
- double_atari_chain2() made static to reading.c
- ATTACK() and DEFEND() macros in patterns/patterns.h renamed to avoid
  name collision
- pow() used to compute effect of shape value in move_reasons.c
- optics.c now includes eyes.h rather than eyes.c
- mkeyes.c revised to finish the graphs array with an all-zero entry
- changed order in top level Makefile.am; engine is now compiled before
  patterns
- extract_fuseki program bugfixed and once more compiled by default
- regress.awk and eval.sh in regression/ revised to deal with negated
  tests 
- new file regression/games/strategy2.sgf
- three new tests in regression/strategy.tst

2.7.140 released July 25, 2000

- sniff_lunch() made static to mouse.c
- private half_eye array for the mouse code
- several functions take half_eye data as a parameter
- regression/strategy.tst included for real

2.7.139 released July 25, 2000

- cleanup of reading.c
- minor tuning
- effective_size only looks to distance <= 3
- debugboard displays dragon.safety as a string
- new files regression/strategy.tst and regression/games/strategy1.sgf
- doc revision
- mouse code enabled by default
- --mouse option replaced by --nomouse option
- alternative escape route algorithm enabled by default
- --alternative_escape option replaced by --old_escape option
- obsolete option --style removed
- new field moyo in struct dragon_data2
- new function influence_get_moyo_size() in influence.c

2.7.138 released July 21, 2000

- bugfix in regression/regress.sh, VPATH build was broken
- new function special_attack2() containing code broken out of attack2()
- new function special_rescue2() containing code broken out of defend2()
- more functions use order_moves()
- all reading functions use the same parameter names (attacked/defended
  string is (si, sj)). 
- new debug bit DEBUG_MOUSE_PERFORMANCE
- new debug outputs in mouse.c
- bugfix in mouse_does_defend() and mouse_connection_defends()
- new struct dragon_data2 in liberty.h
- new static function compute_supplementary_dragon_data() in dragon.c

2.7.137 released July 19, 2000

- new file regression/regress.awk
- regression/regress.sh revised
- wrapper functions gg_vwprintw() and gg_wprintw() introduced in
  interface/debugboard/ files
- order_moves() in reading.c partially reimplemented
- new function gtp_decode_color() in interface/gtp.c
- new GTP commands boardsize, is_legal, all_legal, prisoners
- new function position_force_to_globals() in engine/interface.c
- gameinfo no longer used by the GTP functions
- movenum updated by board functions

2.7.136 released July 17, 2000

- enhancement in ladder reading in attack2()
- cleanup of half of reading.c
- do_find_defense() and do_attack() now static
- more logical numbering of the reading functions for hashing
- new function order_moves() in reading.c
- function order3() removed from reading.c
- dead code (old versions of special_rescue()) removed from reading.c
- defend2(), defend3(), and defend4() track break_chain save_codes
- mouse pattern D13 devalued

2.7.135 released July 17, 2000

- statistics functions reset_reading_node_counter() and
  get_reading_node_counter() in reading.c
- corresponding new GTP commands reset_reading_node_counter and
  get_reading_node_counter 
- all regression test files report the total number of nodes visited by
  the tactical reading 
- corrected answers to two test cases in regression/mouse.tst

2.7.134 released July 17, 2000

- debug bits renumbered
- doc/using.texi updated
- tweaking of influence function for escape value computation
- debug and trace outputs in mouse.c revised
- debug outputs revised in reading.c
- new pattern classification e in influence.db for patterns which get an
  increased value during computation of escape influence
- mouse tuning
- tuning of patterns2.db
- new files incident267.sgf, incident269.sgf, incident272.sgf,
  incident278.sgf, and incident287.sgf in regression/games/
- two new tests in regression/mouse.tst
- three new tests in regression/reading.tst
- bugfix in regression/eval.sh and regression/regress.sh

2.7.133 released July 13, 2000

- mouse tuning
- improved trace messages in do_mouse_attack() and do_mouse_defend()
- mouse_find_lunches() simplified
- -lm added to LDADD in interface/Makefile.am
- tuning of patterns.db
- new file regression/games/incident263.sgf
- five new test in regression/mouse.tst

2.7.132 released July 12, 2000

- interface/loadsgffile.c removed
- library interface/libinterface.a removed
- sgf/sgfkey.c and sgf/sgfkey.h removed
- globals sgf_root and lastnode removed
- new datatype: SGFTree
- many sgfXXX functions now have their sgftreeXXX counterpart
- sgf/ttsgf.h renamed to sgf/sgftree.h
- sgf/ttsgf.c renamed to sgf/sgfnode.c
- sgf/sgfana.h moved to engine/analyze.h
- sgf/sgfana.c moved to engine/analyze.c
- new file: sgf/sgftree.c
- new file: engine/sgfutils.c

2.7.131 released July 12, 2000

- references to the escape2 field of struct dragon_data removed from
  interface/debugboard/gui.c
- new variables mouse_branch_depth and mouse_reading_depth
- new options --mouse_branch and --mouse_reading
- mouse reads only one node when stackp>mouse_branch_depth
- reading terminates when stackp>mouse_reading_depth
- doc revision
- revised dragon_escape() to allow kosumi directly from dragon
- revised effect of I class influence patterns when computing escape
  influence 
- find_influence_patterns() add influence barriers "manually" when
  computing escape influence
- dragon under consideration is now allowed to contribute influence during
  computation of escape influence
- mouse_find_lunches() made static to mouse.c
- new autohelper function mouse_escape_value
- 7 new patterns in mouse_defendpats.db, aiming at escape
- new function mouse_connection_defends() in mouse.c
- code revised in do_mouse_attack(), do_mouse_defend(), and
  mouse_mark_dragon() 
- mouse_mark_dragon now can take either one or two dragons
- bugfix in do_mouse_attack(), two loop end conditions were off by one
- bugfix in do_mouse_attack() and do_mouse_defend(), the second most
  important move was removed when pattern of value 99 found, but not third
  most important one
- move_safety field of move_data struct initialized correctly in
  move_reasons.c
- examine_move_safety() revised
- order of examine_move_safety() and induce_secondary_move_reasons() calls
  reversed in review_move_reasons()
- same_dragon() in utils.c revised to be able to deal with the "no dragon"
  case, i.e. (-1, -1) coordinates
- effective_move measure revised to never include intersections further
  away than distance 4

2.7.130 released July 11, 2000

- escape2 field removed from dragon_data struct together with code to
  compute it
- patterns/escape.db removed
- mouse status and if applicable attack and defense points printed by
  show_dragons()
- bugfix in compute_escape_influence() in influence.c
- revised debug and trace messages in mouse.c
- new function examine_move_safety() in move_reasons.c
- strategically_sound_defense() revised
- more restrictions on which move reasons induce a block/expand move reason

2.7.129 released July 9, 2000

- redundant assignments removed from mouse.c
- reading cache cleared after examine_position() call in
  sgffile_decidedragon() and sgffile_decideposition()
- new file regression/games/incident262.sgf

2.7.128 released July 8, 2000

- obsolete declarations of black_domain and white_domain removed from
  liberty.h 
- dragon_escape() and compute_alternative_escape() in dragon.c revised
- new function compute_escape_influence() in influence.c
- new static functions compute_mouse_escape_values() and
  mouse_escape_route() in mouse.c
- if --alternative_escape option enabled, do_mouse_attack() and
  do_mouse_defend() cut off reading if mouse_escape_route() report a
  sufficiently high escape potential
- redundant file interface/debugboard/loadsgffile.c really removed
- removed remaining occurences of return code 2 in do_mouse_attack() and
  do_mouse_defend()
- new lunch pattern in patterns/conn.db

2.7.127 released July 6, 2000

- redundant file interface/debugboard/loadsgffile.c removed
- parts of interface/play_solo.c moved into new file
  interface/loadsgffile.c
- new library interface/libinterface.a for use by interface/debugboard
- new files sgf/sgfkey.c and sgf/sgfkey.h to handle new abstract type
  sgfkey 
- find_border() renamed to examine_cavity() in worm.c
- static functions propagate_worm_recursive() and libertiesrec() removed
  from worm.c
- code in worm.c simplified and cleaned up
- dragon genus initialized in make_dragons() instead of in make_worms()
- new static functions dragon_escape() and compute_alternative_escape()
  in dragon.c
- new option --alternative_escape to enable new escape route measure
- new file /regression/games/incident261.sgf
- one new test in regression/mouse.tst

2.7.126 released July 5, 2000

- change in definition to higher order liberties

2.7.125 released July 4, 2000

- statistics functions reset_mouse_node_counter() and
  get_mouse_node_counter() in mouse.c
- corresponding new GTP commands reset_mouse_node_counter and
  get_mouse_node_counter 
- mouse.tst, ld_mouse.tst, and ld_mouse_life.tst reports the total number of
  nodes visited by the mouse reading
- bugfix in mouse_determine_life(), attack and defense points for lunches
  were switched
- constraints in some mouse patterns reordered for better performance
- new files incident256.sgf and incident 258.sgf in regression/games
- four new tests in regression/mouse.tst

2.7.124 released July 1, 2000

- tuning of mouse_defendpats.db
- new files incident253.sgf and incident254.sgf in regression/games/
- two new tests in regression/mouse.tst
- restructured and corrected coordinate conversion code in play_ascii.c

2.7.123 released June 27, 2000

- one new pattern in mouse_attackpats.db
- new file regression/games/life_and_death/ld18.sgf
- two new test cases in regression/ld*.tst
- bugfixes in life.c
- new GTP commands debug_move_influence, influence, move_influence,
  worm_data, and dragon_data
- new function gtp_mprintf() in interface/gtp.c
- new functions in influence.c to export influence data

2.7.122 released June 22, 2000

- partial implementation of debugboard eyes tab
- black_domain[][] and white_domain[][] now static in optics.c
- make_domains() restructured
- xor() and unique_color() macros removed from showbord.c
- support for boards smaller than 19x19 in debugboard
- worm[][].attacki comparisons with -1 replaced everywhere with
  comparisons of worm[][].attack_code with 0
- likewise for worm[][].defendi and worm[][].defend_code
- doc/dragon.texi revised
- new GTP command debug_influence
- code for debug printing restructured in influence.c

2.7.121 released June 20, 2000

- mouse option automatically enabled with decidedragon and decideposition
  options 
- matchpat() uses mouse status if available
- new file regression/games/incident252.sgf
- one new reading test

2.7.120 released June 17, 2000

- mouse lunches must have attack code 1
- bugfix in tryko sgf output
- many reading functions take komaster argument
- many reading functions made static
- new functions do_attack and do_find_defense (with komaster)
- cleanup in reading.c
- doc revision
- pattern Eye1 in conn.db taken out

2.7.119 released June 16, 2000

- new function gg_vsnprintf in gg_utils.c
- check in configure.in for vwprintf
- gg_vsnprintf used as workaround if vwprintf unavailable
- fcntl/read stuff removed from debugboard
- display_board_cursor() call added at the end of display_refresh()
- leaveok() call removed from display_init()
- debugboard cursor can be controlled by arrow keys
- COLOR_* renamed to GG_COLOR_* to avoid name collision when using
  pdcurses
- new file regression/games/life_and_death/ld17.sgf and new ld* test cases
- non-options treated as filenames
- new format strings %H and %C to vgprintf() and relatives
- trymove() and tryko() write hash value together with node number to
  output sgf file
- new files incident248.sgf and incident251.sgf in regression/games
- decideeye() moved from utils.c to sgffile.c and renamed
  sgffile_decideeye() 
- decideeye option now can write variations to an sgf file
- life code revisions
- utils.texi revised
- bugfix in attack_callback() in worm.c

2.7.118 released June 13, 2000

- minor sniff_lunch revision
- new mouse_attack pattern
- new file regression/games/reading03.tst.
- one new reading test
- check for curses also in -lpdcurses
- check for term.h and curses.h in AC_CHECK_HEADERS
  instead of separate AC_CHECK_HEADER
- new #define TERMINFO in config.h for the color
  code in gg_utils.c, debugboard builds with pdcurses
  on DJGPP despite the absence of term.h
- workaround for the case when vwprintw is not available (as in pdcurses)
  in display_message() in interface/debugboard/display.c
- print the error message about too small screen after the screen has been
  cleared in display_message()
- use O_NONBLOCK as mask instead of FNDELAY since O_NONBLOCK
  is more widely available
- remove HAVE_STRING_H use
- include <winsock.h> instead of <windows32/sockets.h> for mingw
  included with new cygwin-1.1.1 release
- cleanup of regression/Makefile.am
- load_and_score_sgf_file() revised
- life code revisions
- default life eyesize increased from 8 to 10
- bugfix in mouse_attack() and mouse_defend()
- decideeye() in utils.c revised
- terse option removed
- function remove_string_and_mark() removed from board.c
- distance and strategic_distance code removed

2.7.117 released June 11, 2000

- bugfix in regression/Makefile.am
- countsize() renamed to countstones()
- new function findstones()
- life.c completely rewritten
- regression/games/marginal.sgf extended
- new life and optics tests
- depth values no longer reduced while running make_domains()
- revision of topological_eye()-calling code in dragon.c and mouse.c
- doc/utils.texi revised

2.7.116 released June 9, 2000

- goal now static to mouse.c
- mouse_attack() and mouse_defend() usage simplified
- mouse_effective_defense replaced by mouse_does_defend
- doc revision
- debugboard: strings renamed to worms
- debugboard now gives info about dragons
- debugboard now has a help screen
- color_to_string enhanced with eye colors also
- new function status_to_string in utils.c
- regression/Makefile.am revised so that make check also works with a
  VPATH build 
- STACK_SIZE revised and assertion added in incremental_board.c
- recognize_eyes2() now returns 0 if the eyespace is too large to evaluate
- assertion added in eyehash_index() in life.c
- size of hash table in life.c corrected
- new function location_set_get_size()
- bugfix in hadj() macro in optics.c
- gtp.c keeps track of the board size in a static variable
- one new reading test

2.7.115 released June 7, 2000

- regression/Makefile.am prepared for VPATH build
- compiling without curses works again, debugboard disabled in that case
- assert that color is BLACK or WHITE in do_trymove()
- pass move in minimize_eyes() scored and tested together with the other
  legal moves
- bugfix in maximize_eyes()
- new GTP commands genmove_black and genmove_white
- eyes1.sgf, eyes2.sgf, and eyes3.sgf in regression/games/ extended
- new tests in optics.tst and life.tst

2.7.114 released June 6, 2000

- sniff_lunch revised and moved to mouse.c
- mouse code classifies boundary strings
- bugfix: mouse code was unsafe when stackp>0
- new functions do_mouse_attack() and do_mouse_defend
- more careful includes in interface/debugboard/display.c
- bugfix in incremental_sloppy_self_atari()
- regression shell scripts revised
- global variable color_has_played eliminated
- new function stones_on_board() in board.c
- movenum no longer used in fuseki.c
- examine_position() avoids recomputing data that are up to date
- caching of mouse reading results is no longer using code 2 to indicate a
  successful result for pass
- new workaround for mangling of cached negative move coordinates
- statistics functions reset_life_node_counter() and
  get_life_node_counter() in life.c
- corresponding new GTP commands reset_life_node_counter and
  get_life_node_counter 
- life.tst, ld_life.tst, and ld_mouse_life.tst reports the total number of
  nodes visited by the life code
- make_worms no longer returns anything
- correct answer for mouse test 37 revised
- temporary workaround in recognize_eye2(), chimeras are reported as one
  and a half eye
- maximize_eyes() and minimize_eyes() score and sort the moves to test
- performance optimizations in maximize_eyes() and minimize_eyes(),
  shortcut loops where possible unless all attack or defense moves are
  asked for
- bugfix in maximize_eyes(), check for marginality when counting eyes

2.7.113 released June 5, 2000

- mouse lunches are sniffed
- sniff_lunch revised
- bugfix in mouse_find_lunches
- new global mouse_goal_color
- bugfix in mouse_topological_eye autohelper
- decidedragon messages corrected when tenuki wins
- mouse tuning
- new function location_to_string() in utils.c
- new function position_examine_position() in engine/interface.c
- new program debugboard located in interface/debugboard/
- warning fixed in utils/gg_utils.c
- comments about mapping of colors for linux console moved from showbord.c
  to utils/gg_utils.c 
- unused define -DBUILDING_GNUGO_ENGINE removed from engine/Makefile.am
- config.h no longer included by moyo.c or showbord.c
- new functions suicide() and self_atari() in board.c
- a few approxlib() calls in reading.c replaced by suicide() and
  self_atari()
- new files incident59.sgf, incident74.sgf, and reading02.sgf in
  regression/games 
- new mouse and reading test cases

2.7.112 released June 5, 2000

- optimizations of false_margin()
- safe_move() no longer called from make_domains() if mouse code enabled
- call to modify_eye_spaces1() from make_domains() disabled if mouse code
  enabled 
- bugfix in attack2()
- bugfix in break_chain2()
- duplicate comment block removed from reading.c
- new files incident169.sgf, incident246.sgf, incident91.sgf, and
  reading01.sgf in regression/games
- regression/games/life_and_death/ld11.sgf slightly revised
- new mouse and reading test cases

2.7.111 released June 4, 2000

- comment added in attack4
- mouse_attack and mouse_defend call make_domains when stackp==0
- new files mouse04.sgf, incident185.sgf, incident186.sgf,
  incident199.sgf, and incident225.sgf in regression/games/
- new mouse and reading tests

2.7.110 released June 3, 2000

- init_color() in utils/gg_utils.c renamed to gg_init_color() to avoid
  name collision with curses library function

2.7.109 released June 3, 2000

- HASH64 removed from configure.in and acconfig.h
- config.vcin brought in sync with config.h.in
- macro UCHAR_ALIAS replaced by char
- curses initialization and drawing code moved from moyo.c and showbord.c
  to utils/gg_utils.c
- argument source_root removed from sgf_write_header
- new files games/mouse02.sgf and games/mouse03.sgf
- new tests, revised results
- MAX_MOVES increased to 3 in mouse.c
- attack4 tries a little harder
- tuning of mouse patterns
- life and death test cases 52-64 completed

2.7.108 released June 1, 2000

- mouse functions use a return code of 2 if tenuki works
- Zobrist hashing extended to mouse_attack and mouse_defend
- new function new_position() in board.c
- warning fixed in life.c

2.7.107 released May 31, 2000

- random.c and random.h moved from engine/ to utils/
- gg_snprintf() and gg_gettimeofday() moved to new file utils/gg_utils.c
  and corresponding header file utils/gg_utils.h
- new function gg_version() in utils/gg_utils.c
- safe move cache implemented for mouse_shapes_callback
- topological_eye autohelper function (taken down in 2.7.104) is back for mice
- topological eye takes both eyespaces as parameters
- 32 new life and death test cases, 1 new mouse test

2.7.106 released May 30, 2000

- tuning of mouse patterns
- fuseki9.db rebuilt from a larger set of games
- new game records and test cases

2.7.105 released May 29, 2000

- config.h only included by files which need it
- one new mouse pattern
- new test suite ld.tst with variations for --mouse and --life options;
  added for real this time
- new dedicated fullboard pattern matcher for use with the fuseki
  databases
- first move patterns in fuseki9.db and fuseki19.db no longer commented
  out
- missing borders added in fuseki9.db and fuseki19.db
- number of preambles in mkpat.c reduced from three to one
- mkpat.c revised to also handle patterns for fullboard matcher
- bugfix in make_dragons(), lunches weren't propagated to the whole dragon
- one new pattern in eyes.db
- pattern Lunch2 in conn.db revised
- regression/games/marginal.sgf revised
- new optics and life regression test cases

2.7.104 released May 28, 2000

- topological_eye takes the eye_data as a parameter
- newgoal removed from mouse_attack
- mouse_attack wins if ALL strings of original dragon are taken
- topological_eye autohelper function temporarily taken down
- mouse apat A39 revised
- make_dragons does not add_lunch if lunch already eaten
- doc revision
- new function false_marginal_eye in life.c
- new eye pattern for 4 point linear eye with a false margin
- Tests for life and optics restructured
- New tests for false margins
- config.h only included by files which need it, plus still liberty.h
- new GTP command dragon_status
- new test suite ld.tst with variations for --mouse and --life options
- shell scripts in regression/ revised
- new game records ld1.sgf -- ld8.sgf in regression/games/life_and_death

2.7.103 released May 27, 2000

- new fields height and width added to the pattern struct
- bugfix in fixup_patterns_for_board_size() in matchpat.c; matching now
  works correctly also when the board size changes between calls to
  matchpat
- bugfixes in does_attack() and does_defend() in utils.c
- bugfix in false_margin() in optics.c

2.7.102 released May 26, 2000

- better documentation of life code in the source
- life.c handles false marginals
- new function: location_set_isempty() in location_set.c
- regression/games/marginal.sgf revised
- new optics and life tests

2.7.101 released May 25, 2000

- revised doc/gnugo-logo.jpg and doc/gnugo-logo.jpg
- new tests in reading.tst and mouse.tst
- bugfixes in test files

2.7.100 released May 24, 2000

- minimize_eyes and maximize_eyes simplified and bugfixed
- better documentation of the hash table in life.c
- some cleanup in life.c, optics.c
- new format character 'x' in vgprintf (utils.c)
- improved printing of pass moves when %m is used in vgprintf
- default life_eyesize increased to 8
- new eye tests

2.7.99 released May 23, 2000

- suffix rules for .gtp and .res in regression/Makefile
- new regression files regression/*.tst
- regression shell scripts revised
- regression/expected removed
- several new files in regression/games
- several new regression tests
- regression/ directory now under control of automake

2.7.98 released May 22, 2000

- false marginals are renamed false margins
- eyespace search revised in mouse_determine_life
- new file regression/expected
- new targets in regression/Makefile
- regression/games/false_marginal.sgf renamed regression/games/marginal.sgf
- mouse tuning
- several new files in regression/games
- several new tests in regression/mouse.gtp, regression/eyes.gtp, and
  regression/reading.gtp 
- new GTP commands trymove, popgo, dump_stack, increase_depths, and
  decrease_depths
- new function gtp_decode_move() in interface/gtp.c
- ko eyes assigned to a dragon so halfeye analysis is performed
- old regression files in regression/obsolete/ removed

2.7.97 released May 21, 2000

- false marginals are detected during make_domains
- new function false_marginal
- new file regression/games/false_marginal.sgf
- regression tests in regression/eyes reimplemented to use GTP
- regression shell scripts revised
- new targets in regression/Makefile to test optics and life code
- new global variable position_number which is increased any time a real
  move (not a trymove) is made or the board is permanently changed by some
  other means
- safe_move cache modified to use position_number instead of movenum
- caches in moyo.c modified likewise
- new function setup_board() in board.c
- the functions in engine/interface.c no longer modifies the global board
  on their own
- new function gtp_finish_response in interface/gtp.c
- new gtp command eval_eye

2.7.96 released May 20, 2000

- GTP documented
- new file doc/gtp.texi
- reading test suite extended
- regression shell scripts revised
- bugfix in gtp_loadsgf()
- output from gtp_attack(), gtp_defend(), gtp_mouse_attack(), and
  gtp_mouse_defend() revised

2.7.95 released May 19, 2000

- new interface: GTP, Go Text Protocol
- new files in interface/: gtp.c, gtp.h, and play_gtp.c
- old contents of regression/ moved to regression/obsolete/
- new regression scripts and suits in regression/
- doc/regression.texi revised

2.7.94 released May 18, 2000

- bugfixes in mouse.c

2.7.93 released May 16, 2000

- writesgf() split into sgf_write_header() and writesgf()

2.7.92 released May 14, 2000

- bugfix in utils.c, config.h included before using information from
  configure tests

2.7.91 released May 14, 2000

- all functions in sgffile.c are now prefixed with sgffile_ instead of
  sgf_ to separate them from functions which handle SGF trees
- some minor cleanup in dragon.c
- globals last_move_i, last_move_j made local to interface/play_ascii.c
- functions save_state() and restore_state() removed together with
  variables white_captured_backup and black_captured_backup.
- move reasons are now sorted
- inclusion of sys/time.h made contingent on HAVE_SYS_TIME_H in utils.c
- inclusion of time.h and/or sys/time.h removed from hash.c and
  interface/play_solo.c
- one new pattern in eyes.db

2.7.90 released May 12, 2000

- bugfixes in play_gmp.c, play_solo.c, and play_test.c; gameinfo correctly
  initialized
- cleanup of play_gmp.c

2.7.89 released May 10, 2000

- bugfixes in main.c; decidestring, decidedragon, and decideeye options
  work correctly again
- new function color_to_string() in utils.c

2.7.88 released May 9, 2000

- minor tuning of mouse_attackpats.db
- extended documentation of influence function
- new function unconditional_life() in utils.c
- MAX_STRINGS macro moved from incremental_board.h to liberty.h
- unused variable removed from do_pass() in play_ascii.c

2.7.87 released May 8, 2000

- guess_mode_from_sgf_comment() removed
- coordinates (-1, -1) are now always used for pass moves (rather than
  (board_size, board_size))
- obsolete and unused debug flags marked in gnugo.h
- inclusion of sys/types.h removed from gmp.c
- unused function str2short() removed from sgf_utils.c
- cleanup of play_solo.c, play_test.c, and sgf_utils.c
- bugfix: move number again passed from the interfaces to the engine

2.7.86 released May 7, 2000

- doc revision
- more comments in the code for multiple diagonals of a halfeye
- extended debug outputs in optics.c
- bugfix in hash.c
- new datataype Gameinfo
- Gameinfo used everywhere in interface/*.c
- Gameinfo used instead of Position in a few places otherwise
- new function: position_recordhand()
- board_size no longer public; moved from gnugo.h to liberty.h
- several small functions removed from interface/interface.c
- bugfix in regression/Makefile
- bugfix in mkpat.c

2.7.85 released May 5, 2000

- bugfix in recognize_eye()

2.7.84 released May 3, 2000

- multiple vital eye moves in conjunction with topological halfeyes
  supported in both optics and life code
- compiler warnings fixed in interface/play_ascii.c and engine/interface.c
- parameter names added to function prototypes in interface/interface.h

2.7.83 released May 1, 2000

- new functions in engine/interface.c
- p[][], ko_i, ko_j, black_captured, white_captured moved from gnugo.h
  to liberty.h, i.e. made local to the engine
- attack() and find_defense() also made local to the engine
- board handling functions removed from interface/interface.c
- all interface functions in interface/interface.c now use the Position
  datatype
- sgfAddMoveFromTree() and sgfPlayTree() moved from sgfana.c to ttsgf.c
- minor tuning of mouse_defendpats.db

2.7.82 released April 30, 2000

- new file engine/interface.c included for real this time
- removed types SGFNodeP and SGFPropertyP
- play_solo() and play_gmp() now plays on a Position.
- get_moveXY moved from play_solo.c to sgf_utils.c
- minor cleanup in a number of places
- main.h moved from engine/ to interface/

2.7.81 released April 28, 2000

- new function sniff_lunch (unused and untested)
- new function remove_string_and_mark
- originate_eye now public
- add_half_eye now takes half_eye array as an argument
- doc revision
- jump_out_helper() rewritten to use influence function rather than
  strategic distance
- matchpat_db() renamed to matchpat()
- redundant autohelper function singleton() removed

2.7.80 released April 27, 2000

- bugfix in hash_rand()
- obsolete -DBUILDING_GNUGO_ENGINE removed from patterns/Makefile.am
- countlib2(), findlib2(), and approxlib2() renamed to countlib(),
  findlib(), and approxlib() respectively
- minor tuning of influence.db

2.7.79 released April 26, 2000

- count of hash collisions added to the --statistics option
- new files random.c and random.h with an implementation of a twisted
  GFSR random number generator
- all calls to rand() or random() replaced by calls to the local random
  number generator
- test for random() removed from configure.in

2.7.78 released April 25, 2000

- sgf/sgf.c moved to the engine and renamed to sgffile.c
- sgf/sgf.h removed; declarations moved to gnugo.h and liberty.h
- removed a few declarations for non-existent functions from sgf_utils.h
- analyzerflag moved to globals.c
- new file: engine/interface.c
- some functions for handling positions.
- ttsgf_read.c and ttsgf_write.c integrated into ttsgf.c
- bugfix in sgfPlayTree()
- old approxlib() removed
- bugfix in life.c
- local random generator removed from hash.c
- cleanup of hash.c
- simplified typedefs in hash.h

2.7.77 released April 24, 2000

- doc of the colored influence displays added
- new function hashdata_diff_dump() for use in assertions
- local random generator in hash.c
- revised types in hashing code
- bugfix in semeai_analyzer()
- order of engine/ and pattern/ builds changed back
- extract_fuseki no longer built by default
- bugfixes in extract_fuseki.c
- tuning of influence.db
- bugfixes in patterns.db

2.7.76 released April 23, 2000

- revised assertions in add_stone() and remove_stone()
- declaration and initialization of color_has_played moved from interface/
  to engine/
- hashtable_clear no longer crashes if passed a NULL pointer
- warning if hashtable allocation fails
- new database matching step in the fuseki module
- new experimental option --fusekidb to enable fuseki database matching
- new program patterns/extract_fuseki.c which compiles a fuseki database
  in patterns.db format from a collection of game records
- new pattern databases fuseki9.db and fuseki19.db containing 9x9 and
  19x19 fuseki databases respectively
- bugfix in influence.c to stop a single stone from claiming the whole board
- libengine is now built before the patterns/ subdirectory is compiled

2.7.75 released April 20, 2000

- recognize_eye() and recognize_eye2() looks for all vital eye points and
  passes them to the move generation
- eyes.db format extended for multiple vital moves and database revised
- liberty counting functions in incremental_board.c restructured to agree
  with the new corresponding functions in board.c
- approxlib() and countlib() calls converted to countlib2(), findlib2(),
  and approxlib2() calls
- countlib() macro removed
- accurate_approxlib() revised and accurate_countlib() macro removed
- autohelper lib() can now be used for stackp>0
- TODO revised

2.7.74 released April 19, 2000

- obsolete code removed from genmove()
- board_t renamed to Intersection
- new Position struct added in gnugo.h
- print_influence() now prints everything to stderr

2.7.73 released April 18, 2000

- revised TODO
- renamed static function compile_for_match_new() back to 
  compile_for_match()
- removed all external calls to compile_for_match()
- minor cleanup in globals.c
- don't regard marginal eye points as real eyes in the life code
- neighbors to marginal eye points may be captured in the life code

2.7.72 released April 13, 2000

- old board code removed from board.c
- new functions countlib2(), findlib2(), and approxlib2(), intended to
  replace approxlib()

2.7.71 released April 12, 2000

- bugfixes in the hashing code, now CHECK_HASHING works again
- pattern database code restructured, explicit calls to compile_for_match()
  no longer needed
- apats.db renamed to mouse_attackpats.db and dpats.db renamed to
  mouse_defendpats.db 
- minor cleanup of dragon.c, life.c, optics.c, and patterns/patterns.h
- documentation of hashing added to doc/reading.texi
- cleanup of filllib.c

2.7.70 released April 10, 2000

- doc revision
- bug fix in fill_liberty
- compiler warning fix
- simplified implementation of double_threat()
- improved trace messages in confirm_safety()
- depth values increased during reading in confirm_safety()

2.7.69 released April 9, 2000

- bugfix in regression/eyes/test.sh
- revision of confirm_safety
- revision of review_move_reasons
- new function double_atari
- new function accurate_approxlib
- accurate_countlib takes *libi, *libj as parameters
- fill_liberty tries to avoid setting up double ataris
- doc revision
- load_and_analyze_sgf_file assumes color_has_played
- bugfix in mouse_determine_life

2.7.68 released April 7, 2000

- New switch --terse for test output
- Various minor cleanups
- life.c much commented
- regression tests for life code using --decideeye in regression/eyes

2.7.67 released April 5, 2000

- check for size of int and long in configure
- configure option --enable-hash64
- separate options --life and --life_eyesize <n>
- reformatting of help string to fit 80 columns
- bugfix in play_ascii.c
- minor tuning of patterns.db

2.7.66 released April 4, 2000

- point of attack and point of defense considered separately by
  compute_eyes(), recognize_eye(), topological_eye(), and half_eye_data
- make_dragons() now take color to play as parameter
- (defensei, defensej) renamed (defendi, defendj) in a number of places
- minor tuning of patterns2.db

2.7.65 released April 3, 2000

- removed trailing ',' symbols in enums in main.c and gmp.c
- extraneous declaration of deltai[] and deltaj[] removed from influence.c
- bugfixes in the CHECK_HASHING code
- bugfix in play_ascii.c, repeated save and load now works
- compile_for_match() added in two places
- keep track of attack and defense points of mouse_lunches
- revision of mouse_find_lunches() and mouse_lively()
- minor doc revision
- aesthetic reformatting in eyes.db
- declaration of incremental board functions moved from liberty.h to
  incremental_board.h 
- new function incremental_mark_string() in incremental_board.c
- replaced mouse_mark_strings() with a generic mark_string() in board.c

2.7.64 released April 2, 2000

- updated DJGPP info
- removed leading white space in windows.texi for more nicely formatted
  info files
- removed obsolete workaround for a texi2html missing feature.
- added members defendi and defendj to struct eye_data
- recognize_eye2 now returns point of defense as well as point
  of attack for an eye
- compute_eye now reports defense point as well as attack point
- recognize_eye2 now considers if the boundary of the eye is
  captured during eye reading
- speed optimizations in recognize_eye2
- 5 new functions in location_set.c
- small bugfix in showbord.c
- small bugfix(?) in main.c
- small cleanup in dragon.c
- new function mouse_effective_defense()
- if the mouse code is enabled, strategically_sound_defense() invokes
  mouse_effective_defense()
	
2.7.63 released April 2, 2000

- new function attack1() to determine whether a string in atari can be
  captured
- snapback() made obsolete and removed
	
2.7.62 released April 1, 2000

- bugfix in evaluate_diagonal_intersection()
- evaluate_diagonal_intersection moved to optics.c and made static
- new function topological_eye
- new autohelper option topological_eye
- doc revision
- mouse tuning
- hashvalue test whether matchpat is properly prepared for the board
  position being matched
- compile_for_match() added in a few places
- modify_eye_spaces1() and find_cuts() not used when make_domains() is
  called from the mouse code
- minor bugfixes in life.c and board.c
- minor tuning of patterns2.db
	
2.7.61 released March 31, 2000

- bugfix in recognize_eyes2() so it can be used for stackp>0
- reloading of files in ascii mode is documented
- mouse code tries tenuki if no move of value >40 found
- dpat revision
- eye pattern 524 removed
- obsolete fixme removed from patterns2.db
- new function move_in_stack() in board.c
- improved debug output in life.c
- decideeye() disables trace outputs during make_worms() and make_dragons()
	
2.7.60 released March 30, 2000

- doc revision
- new option --life to enable the life code
- new function initialize_engine() in genmove.c
- bugfixes in sgf_decidedragon(), sgf_decideposition(), and decideeye()
- modify_eye_spaces1() only called from make_domains() if stackp==0
- loop unrolling in accumulate_influence enabled

2.7.59 released March 29, 2000

- new file life.c with eye reading code
- new file location_set.c with a utility class that contains a set of
  locations on the go board
- bew file location_set.h with headers for location_set.c
- bugfix in board.c which makes the allocation of hash nodes correct
- separation of the examination step of genmove() into it's own
  function, examine_position(), and calls to this function in a number of
  places
- some comments added in mouse.c plus some cleanup
- new option --decideeye which tells the status of an eye
- new function get_coordinate() in main.c
- black_eye and white_eye passed as arguments to make_domains
- private black_eye and white_eye arrays for mouse.c
- eye pattern added to eyes.db
- bugfix in unrolled accumulate_influence()
- bugfix in move_reasons.c

2.7.58 released March 28, 2000

- loop unrolling in accumulate_influence(), initially disabled by default

2.7.57 released March 27, 2000

- doc revision
- compile_for_match() called again after running mouse code from genmove()
- mouse_genmove() removed from utils.c (was unused)
- doc/MOUSE and doc/INFLUENCE removed from distribution, all material is
  included in the Texinfo documentation
- matchpat aborts if color==EMPTY
- mouse_attack returns true if trymove captures
- unnecessary test eschewed in mouse_find_lunches
- corrected: debug flag set wrong in main.c with --mouse

2.7.56 released March 25, 2000

- optics.c: redefinition of lively for mousing
- new functions mouse_find_lunches and mouse_lively
- new DEBUG_MOUSE debug option
- does_attack and does_defend no longer require stackp==0
- new apats and dpats
- doc revision
- sethand.c: bugfix in placehand(), use add_stone() instead of
  manipulating p[][] directly

2.7.55 released March 25, 2000

- initialize dragon.mouse_attack and dragon.mouse_defend
- revaluation of joseki database
- hashing code revised for 64 bit architectures
- Makefile added to regression subdirectory and regress.sh revised
- minor tuning of patterns.db
- AUTHORS and doc/introduction.texi revised

2.7.54 released March 23, 2000

- revised eye patterns, prefer to play on marginal vital points
- doc revision
- introduction moved from incremental.c to texinfo
- special value 99 implemented for apats and dpats
- new apats and dpats
- AUTHORS and doc/introduction.texi revised
- accurate_countlib revised
- slow_findlib() added in incremental_board.c so that
  incremental_findlib() and incremental_countlib() can handle all cases

2.7.53 released March 21, 2000

- bugfixes and other revisions of the incremental board code
- incremental board code enabled by default
- new function accurate_countlib() in utils.c
- a few countlib() calls replaced by accurate_countlib()
- minor bugfix in connection_value2

2.7.52 released March 19, 2000

- bugfix: decidestring and decidedragons were getting depth 0
- new apats and dpats
- minor cleanup of join_dragon invocations
- mouse code reports findings (temporary measure)
- doc revision

2.7.51 released March 18, 2000

- doc revision
- hurry >= 3 turns off some features
- adjust configure.in, config.vc and sgf/ttsgf.c
  to test for vsnprintf instead of snprintf
- replace an embedded newline in a #defined
  string in main.c with an explicit \n
- remove trailing ',' characters in enum
  declarations
- include interface.h in sgf_utils.h so
  that enum testmode is defined when declaring
  guess_mode_from_sgf_comment.
- bugfix in break_through_helper()

2.7.50 released March 17, 2000

- new option --showtime makes genmove report its time
- new option --hurry decrements depth parameters
- hurry can be set during ascii play
- new global variables hurry and showtime
- gg_gettimeofday made global
- new global variables nominal_depth, nominal_backfill_depth,
  nominal_fourlib_depth, and nominal_ko_depth

2.7.49 released March 15, 2000

- bugfix in make_dragons (--mouse could cause crash)
- bugfix in mouse_determine_life
- bugfix in vgprintf
- new function vital_chain
- new autohelper functions singleton and vital_chain
- mouse tuning
- new eye pattern
- mouse code documented
- string.h included in incremental_board.c to stop warning
- sgf functions cleaned up by passing around a file handle instead of
  sharing a global one
- minor optimizations in break_chain() and relative_break_chain()
- minor changes and more comments in incremental_board.c
- stack implementation revised in incremental_board.h

2.7.48 released March 14, 2000

- new global variable mouse
- new functions mouse_reasons, add_mouse_attack_move, add_mouse_defend_move
- new option --mouse
- support for loading a position from file and continue playing with the
  ascii interface

2.7.47 released March 13, 2000

- singleton() moved from utils.c to board.c
- new files incremental_board.c and incremental_board.h, supplying an
  implementation of incremental board updates
- support for incremental board updates added to board.c but still disabled
- updateboard() made static to board.c
- return type of pushgo() and popgo() changed to void
- new function play_move() replaces updateboard() for use from interfaces

2.7.46 released March 10, 2000

- chainlinks() and chain() moved from reading.c to board.c
- find_origin() moved from utils.c to board.c
- count() made static to board.c

2.7.45 released March 9, 2000

- globals global_size, global_lib, global_libi, and global_libj eliminated
- new function countsize() in board.c
- tenuki (?) implemented for autohelpers
- two autohelpers in patterns.db and one in dpats.db use tenuki
- type omitted from findex entries
- decideposition takes a color option
- if (MOUSE) then showboard prints two diagrams
- new apats and dpats
- error messages in mkpat slightly revised
- Martijn van der Kooij and NNGS are thanked
- minor spelling corrections in Texinfo documentation
- windows.texi revised

2.7.44 released March 8, 2000

- globals size, lib, libi, libj renamed global_size, global_lib,
  global_libi, global_libj
- new parameters to count(), approxlib(), and countlib() for passing
  liberty locations
- bug fixed in mouse_determine_life which could cause crash
- new option --decideposition
- showboard can display mouse_status
- mouse_status computed in dragon.c
- a few new apats and dpats
- findex entries omit parameters
- windows installation instructions added to Texinfo documentation

2.7.43 released March 7, 2000

- connection_value2() revised
- type of potential_move array changed to int
- updated VC project files

2.7.42 released March 6, 2000

- mouse goal array changed from int to char
- C patterns implemented for mouse patterns
- bugfix in mouse_defense: misplaced popgo() popped
- new function goaldump for debugging
- new function mouse_mark (like count but does not mark liberties)
- new mouse patterns
- cleanup of interface.c
- pushgo() made static
- pattern profiling output now computes the total number of hits and
  reading nodes
- O symmetry introduced in barriers.db

2.7.41 released March 5, 2000

- documentation revision
- new file doc/influence.texi
- move generation functions are documented in Texinfo
- influence.c functions are documented in Texinfo
- short section on Migration removed from move_generation.texi
- new pattern profiling option --profile_patterns
- minor tuning
- new symmetry class 'O'
- joseki pattern values reduced to a third

2.7.40 released March 4, 2000

- doc revision
- tryko returns 0 if suicide is attempted
- now --printsgf works with -L
- implementation of trymove() and tryko() unified
- minor optimization in attack_either()
- cleanup of utils.c
- experimental pattern CB327 in patterns.db

2.7.39 released March 1, 2000

- revision of patterns/apats.db and patterns.dpats.db
- default depth values restored to 2.6 level
- new functions set_temporary_depth_values() and restore_depth_values()
  in utils.c
- depth values temporarily decreased while computing influence
- bugfix in tryko()

2.7.38 released February 29, 2000

- handle handicap stones in sgf files correctly
- bugfix in mouse.c
- trymove() replaced by tryko() in compute_move_influence

2.7.37 released February 28, 2000

- point to strings instead of copying them in mouse.c 
- more than two moves per position can now be handled by the mouse code by
  increasing the value of MAX_MOVES
- B class patterns in dpats.db inhibit addition of the stone to the dragon
- AUTHORS, THANKS, and doc/introduction.texi revised
- two eye patterns revised
- bugfix in sgfOverwritePropertyInt() in ttsgf.c
- sethand() split into two halves to make it more flexible
- play_ascii.c revised to deal correctly with handicap stones

2.7.36 released February 27, 2000

- dragon.c: serious bug fixed in topological eye evaluation
- substantial revision of mouse.c
- new patterns in apats.db and dpats.db
- sgf.c: revision of decidedragon
- doc expanded of certain autohelper functions
- Jamal Hannah's typing Gnu acknowledged as logo source
- documentation of influence function begun in doc/INFLUENCE

2.7.35 released February 26, 2000

- mouse_attack and mouse_defend avoid some duplicate eyespace evaluations
- missing eye pattern in eyes.db
- sgf_decidedragon correctly invoked from main.c
- close sgf file before reopening it
- do not close stdout in sgf_close_file
- print_eye revised to give nice output also when stackp>0

2.7.34 released February 25, 2000

- experimental mouse code
- gnugo.eps and gnugo.jpg renamed gnugo-logo.eps and gnugo-logo.jpg

2.7.33 released February 23, 2000

- VC project files and WINDOWS revised

2.7.32 released February 22, 2000

- reading cache cleared once it becomes full
- -M option now takes float argument
- -M 0 no longer causes a floating exception

2.7.31 released February 21, 2000

- VC project files adapted from 2.6
- win/ directory with makefile brought over from 2.6
- bugfix in main.c, optind replaced by gg_optind
- WINDOWS revised
- minor assorted cleanups

2.7.30 released February 19, 2000

- cleaned up code for debuginfluence option
- general cleanup of main.c
- minor tuning of patterns2.db
- AUTHORS, THANKS, and README brought up to date with 2.6
- TODO revised
- Added news for 2.6 in NEWS
- WINDOWS brought over from 2.6
- year 2000 added in copyright notices everywhere
- emacs interface added from 2.6
- gnugo.jpg added from 2.6
- gnugo.eps built by encapsulating gnugo.jpg into postscript level 2 using
  jpeg2ps
- Texinfo documentation merged with late changes from 2.6
- various other late changes from 2.6 merged

2.7.29 released February 11, 2000

- tuning of barriers.db, endgame.db, and patterns.db
- sprintf replaced by vsprintf in gg_snprintf
- spelling corrections
- TODO revised
- unreachable code in hashdata_init() commented out
- UNUSED and ON_BOARD macros moved to liberty.h
- special_rescue() made more general
- calls to special_rescue() also in defend3()

2.7.28 released February 8, 2000

- bugfix in break_through()
- tuning of conn.db, influence.db, patterns.db, and patterns2.db
- various minor fixes to eliminate warnings on certain platforms
- opterr, optind, and optopt prefixed with gg_ to allow building with
  profiling 
	
2.7.27 released February 6, 2000

- copying.texi added for real this time
- minor revision of patterns.texi
- various code revisions in influence.c
- new functions for segmenting connected regions of territory, moyo, and
  area added to influence.c
- -m option can take hexadecimal values
- tuning of barriers.db, influence.db, conn.db, patterns.db, and
  patterns2.db 
- conn.db reorganized
- retuning of joseki patterns
- corner moves in fuseki.c retuned
- minor revisions of move_reasons.c
- workaround to avoid black characters on black background in showbord.c
- we no longer add half eyes when eye.dragoni == -1
	
2.7.26 released January 31, 2000

- endgame patterns split off from patterns.db to endgame.db and matched
  separately
- influence_delta_territory results cached
- tuning of barriers.db, conn.db, patterns.db, and patterns2.db
- new eye pattern from 2.5.63
- new option --debuginfluence to help tuning influence function
- listing of worms includes origins of corresponding dragons
- bugfix in move_reasons.c; don't accept cuts or connections of one dragon
  and itself

2.7.25 released January 29, 2000

- AUTHORS, INSTALL, and THANKS revised
- GPL added to texinfo documentation
- small_semeai() documented in texinfo documentation
- autohelper call moved from matchpat() to callback
- possible to pass auxiliary data through matchpat() to callback
- DEPTH decreased from 14 to 12, BACKFILL_DEPTH from 8 to 6, and KO_DEPTH
  from 8 to 6
- new functions for drawing boards for debug output
- symbolic names for colors
- influence function implemented in influence.c and influence.h
- new patterns to assist influence function in patterns/barriers.db and
  patterns/influence.db
- terri renamed to territory in a number of places
- revised heuristics to decide when a tactical defense is strategically
  sound, using influence values
- territorial value estimated with influence_delta_territory() instead of
  delta_terri() from moyo module
- influence value estimated with influence module functions instead of
  delta_moyo() from moyo module
- secondary_value weighted down substantially in computation of total move
  value
- symbolic names for printmoyo values
- local optimizations in shapes_callback() to avoid unnecessary reading
- increased depth values when evaluating reading constraints disabled to
  improve speed
- new patterns in conn.db
- local optimization in connections.c, don't evaluate autohelper if there
  is nothing to amalgamate
- autohelper functions xarea, oarea, xmoyo, omoyo, xterri, and oterri
  changed to use functions from influence module
- separate flag to mkpat to decide anchoring policy
- tuning of patterns.db and patterns2.db

2.7.24 released January 27, 2000

- cleanup of the interface/ files
- minor revision to doc/using.texi
- doc/reading.texi updated from 2.5.62

2.7.23 released January 26, 2000

- removed inclusion of unistd.h where unnecessary
- include io.h on platforms where unistd.h not available
- remove unused files utils/long-options.[ch] utils/closeout.[ch], and
  utils/error.h 
- fixed getopt warnings by renaming the getopt in utils/ to gg-getopt
- TODO revised
- -M option repaired
- bugfix in init_gnugo() in board.c; don't do everything twice
- default size of reading cache increased from 8 MB to 32 MB
- docs/ directory replaced by doc/ with texinfo documentation from 2.5.60
- gnugo.6 man page moved from top directory to doc/
- /docs/WINDOWS updated from 2.5.60 and moved to top directory

2.7.22 released January 20, 2000

- always use strtok in play_ascii.c and skip strsep
- cleanup in configure.in
- bugfix in play_solo.c
- configure test for gettimeofday in interface/
- HAVE___FUNCTION__ moved to the right position in acconfig.h
- in configure.in, add -lwsock32 to $LIBS for the mingw32 environment
  for the select call in gmp.c
- include windows.h and windows32/sockets.h to get definitions for fd_set,
  select and FD_* macros in gmp.c
- incorrect "abort;" changed to "abort();" in several places
- TODO item about converting documentation into texinfo marked as done

2.7.21 released January 17, 2000

- confirm_safety() called from review_move_reasons() in order to avoid
  certain blunders
- the search for lunches moved to the end of make_worms()

2.7.20 released January 16, 2000

- removed unused file utils/getdate.c from distribution
- pattern Eye2 taken out from conn.db as workaround to a bug
- only victims with attack code 1 or 2 are considered lunch
- separation of interface into a public and a private part; liberty.h
  split into gnugo.h for external interface and liberty.h for internal
  interface
- dragon_status() renamed to compute_dragon_status()
- new function dragon_status() hiding dragon_data struct
- default cached function is only attack()
- new function is_worm_origin()
- new function confirm_safety()
- update the files getopt.c getopt1.c and getopt.h in utils/ to glibc-2.1.2
- add a file README in the utils directory explaining where the getopt
  files come from.
- make utils the first subdirectory to compile
- link in utils/libutils.a when linking mkpat.c

2.7.19 released January 13, 2000

- unsigned char changed into signed char in sgfana.c, ttsgf.c, and
  ttsgf_write.c to eliminate DEC-cc warnings.

2.7.18 released January 12, 2000

- src directory renamed to engine

2.7.17 released January 10, 2000

- cleanup in moyo.c, eliminating DEC-cc compiler warnings
- main.c moved from src/ to interface/
- dragon.weak renamed dragon.safety

2.7.16 released January 8, 2000

- cleanup in configure.in
- cleanup in make_proper_eye_space()
- autohelper functions for modifying eyespace
- more debug output for DEBUG_EYES
- tuning
- one new pattern in eyes.db

2.7.15 released January 6, 2000

- cleanup in configure.in
- configure tests for random and alarm
- embedded newline removed from a string in mkeyes.c
- extra pair of braces to avoid ambiguous else in optics.c
- compiler warning about snprintf eliminated from ttsgf.c
- documentation about dragon.status and dragon.weak revised in docs/DRAGON
- attack() is more cautious about snapbacks
- dragon_status() revised to consider a missing case
- docs/PATTERNS fully revised
- slight revision of the definition of higher order liberties, in an attempt
  to fix escape_route problem
- reading depths increased with the number of explicitly placed stones
  in autohelpers
- minor cleanup in utils.c
- patterns shuffled around in patterns.db and patterns2.db
- two extra matching pattern steps to modify eyespaces, patterns temporarily
  hosted in conn.db
- not_lunch patterns moved to conn.db and matched together with eye space
  modifying patterns
- autohelpers can now also be used in conn.db patterns with no '*'
- minor revision of escape.db
- dont_attack_helper removed since it was no longer in use
- remaining references to EXPERIMENTAL_MOVEGEN removed
- bugfix in add_half_eye()
- new function make_proper_eye_space() in optics.c for use from autohelpers
- tuning

2.7.14 released January 4, 2000

- four vgprintf calls in utils.c changed to vprintf calls
- variable sized arrays changed to fixed size in sgfana.c
- declaration of board_size in ttsgf.h made consistent with liberty.h
- removed embedded newlines in strings in mkeyes.c and main.c
- escape.db patterns revised
- bugfix in matchpat
- revised heuristics for non-matched eye shapes
- tuning

2.7.13 released January 3, 2000

- help debug prints default hash memory
- decidestring reports even if verbose=0
- print_eye() documented, prototype moved 
- documentation in docs/PATTERNS partially updated to reflect changes
  in pattern format
- bugfix in mkpat.c
- bugfix in getopt string
- bugfixes in trace messages in shapes.c
- new function dragon_status2() using new escape route measure in
  the escape2 field (not yet in actual use)
- new patterns in escape.db
- tuning

2.7.12 released January 2, 2000

- configure option to revert to sprintf if neither snprintf or g_snprintf
  found
- command line option -M (--memory) to specify hashtable size
- bugfixes in board.c

2.7.11 released January 2, 2000

- all remaining patterns in patterns.db adapted to new move generation scheme
- format of ":" lines in pattern databases changed
- joseki.c updated to produce new database format
- patterns in conn.db can have action lines
- three new autohelpers: dragonsize(), wormsize(), and potential_cutstone()
- patterns are no longer sorted in mkpat and min weight optimization
  removed from matchpat
- updated documentation of autohelpers in docs/PATTERNS
- value field in worm_data and dragon_data obsoleted and removed
- obsolete section removed from docs/PATTERNS
- obsolete pattern classes Q and q removed, remaining ones slightly reordered
- B, C, a, d patterns work on up to five dragons (previously max two or one)
- improved tunability of patterns, possible to specify min and max
  territorial and total values
- many helpers converted to constraints and removed
- join_dragons() no longer need to be called with origins of dragons
- wind assistance and moyo assistance functions obsoleted and removed
- connection_value() and compute_score() obsoleted and removed
- attack_either move reason rejected if one of the strings is defenseless
- old style move values no longer used in move generation
- shape value effect changed from additive to multiplicative
- random contribution to move value decreased
- tuning

2.7.10 released December 28, 1999

- changes from 2.5.47--2.5.52 merged into eyes.db
- tuning
- unused helpers and patterns removed
- many patterns in patterns.db adapted to new move generation scheme
- linear eyes of size 6 with one marginal eye fixed in eyes.db

2.7.9 released December 27, 1999

- bugfixes and cleanups in configure.in and various Makefile.am
- bugfix in move valuation
- bugfix in add_half_eye: remember to adjust marginal_neighbors
- bugfix in defend1: consider case of 4 liberties after extend
- breakchain2: try_harder to break chain
- bugfix in singleton()

2.7.8 released December 23, 1999

- break_chain2 considers a few extra possibilities
- stricter syntax checking in mkpat.c
- bugfixes in pattern databases
- caching of read results indexed also on stackp
- warning eliminated in dragon.c
- implementation of tracing of read results revised
- one new pattern in escape.db
- new escape route algorithm documented in docs/DRAGON

2.7.7 released December 21, 1999

- More verbose autoconf test for __FUNCTION__
- bugfix and cleanup in patterns/Makefile.am
- Split utils.c into board.c and utils.c
- Cleanup of both files.
- Fix a warning in fuseki.c
- minor tuning
- one new pattern in conn.db
- improved trace messages for read results, contingent on TRACE_READ_RESULTS
	
2.7.6 released December 19, 1999

- READ_RETURN0 macro redefined in reading.c
- makes consistent the inequalities in reading.c
- misspelling of "propagate" corrected
- experimental implementation of new escape route algorithm
- new file: patterns/escape.db
- DEBUG_HEY (obsolete) replaced by DEBUG_ESCAPE
- one new pattern in conn.db
- new autohelpers: same_dragon and same_worm
- minor tuning
- bugfix in rr_set_result_ri_rj() macro
- bugfix in compile_for_match()
- don't allocate hash table space in find_defense if more than four liberties
- bugfixes in defend3()
- two compiler warnings eliminated in semeai.c
- bugfixes in attack_callback() and defense_callback in worm.c

2.7.5 released December 18, 1999

- elimination of stackp<depth contingency in break_chain2 call from defend2
- reordering of the nodes in break_chain2 for minor speedup
- minor cleanup in reading.c (elimination of unnecessary braces)
- bugfix in attack2
- bugfix in moyo.c
- minor tuning
- cleanup and revised trace messages in shapes.c
- old style C and B patterns taken out from patterns.db
- debug messages converted to trace messages in move_reasons.c

2.7.4 released December 17, 1999

- caching of read results fully disabled when stackp>=depth
- dead code cleaned away from reading.c

2.7.3 released December 16, 1999

- minor tuning
- cleanup of patterns and helpers
- cleanup of matchpat()
- attack and defense patterns moved from patterns.db/patterns2.db to
  new files attack.db and defense.db
- attack and defense patterns matched during make_worms()
- error message instead of segmentation fault when using -L without -l
- testmode output modified
- cleanup of ttsgf.c, ttsgf_read.c, and ttsgf_write.c
- improved configure detection of snprintf
- cleanup in Makefile.am and patterns/Makefile.am
- configure tests for gcc specific macro __FUNCTION__
- bugfix in sgf/Makefile.am
- in break_chain, removed stackp<depth contingency
- bug fix in break_chain2
- two calls to naive_ladder removed
- fixed two uses of DEPTH where depth was intended in reading.c
- FIXME's in reading.c addressed

2.7.2 released December 12, 1999

- bugfixes in patterns/Makefile
- cleanup of sgf.c, sgfgen.c, sgf_utils.c, and sgfana.c
- bug fixed in small_semeai which could cause crash
- remember to close file in play_gmp.c
- Jago mentioned in README
- All worm_data and dragon_data fields documented in DRAGON
- code specific to old generation scheme cleaned away
- file attdef.c removed
- fuseki.c reverted to version 2.3.47 and slightly modified
- cleanup of genmove.c

2.7.1 released December 10, 1999

- minor tuning
- bugfix in defend4
- cleanup of Makefile.am
- minor tweak of move valuation

2.5.46 released December 6, 1999

- bugfix in autoconf test for glib-config
- minor tuning
- defend_both() tries a little harder to find an effective move
- find_lunch() now also looks diagonally for food

2.5.45 released December 2, 1999

- minor tuning
- bugfix in fill_liberty()
- changed semantics for strategical defense in shapes()
- reading.c: corrected a few places where the wrong return value was cached 

2.5.44 released December 1, 1999

- minor tuning
- small tweak in move valuation
- init_board() in joseki.c renamed to avoid collision
- added assertion in filllib.c
- removed assertions in vgprintf()
- simplified handling of read result cache in reading.c
- improved configuring for glib
- AC_EXEEXT macro added for clean install on DOS/Windows

2.5.43 released November 27, 1999

- one new eye pattern
- not_lunch_helper converted into an autohelper function
- minor revision of hoshi.sgf
- numerous old style patterns no longer considered by new move generation
- tuning of patterns2.db
- new reading function: naive_ladder()
- docs/DRAGON updated with information about worm.cutstone2
- further cleaning of liberty.h

2.5.42 released November 24, 1999

Makefile.am
- added a dist-hook rule (see automake documentation)
  to remove the built source from patterns.c from the
  distribution prior to tar-zipping it.
NEWS
- added line containing version number. with the --gnits
  option make dist checks for the presence of the version number
patterns/Makefile.am
- activated the BUILT_SOURCES macro for conn.c patterns.c eyes.c
sgf/Makefile.am
- removed $(srcdir) from BUILT_SOURCES macro. Otherwise
  automake won't run. This apparently doesn't break VPATH
  building.
- added sgf_properties.h to noinst_HEADERS. Otherwise it isn't
  added to the distribution.
src/Makefile.am
- added a noinst_HEADERS macro. Otherwise the headers don't go
  into the distribution.

2.5.41 released November 23, 1999

- bugfix in defend2
- cleanup of liberty.h
- one new pattern in conn.db
- move generation considers the strategical value of saving lunches
- joseki patterns retuned
- minor revisions of patterns.db
- tuning of patterns2.db
- ko stones considered dead
- tweaks in move generation code
- bugfix in make_worms()

2.5.40 released November 21, 1999

- empty SUBDIR macros removed
- file- and directory names assigned to the EXTRA_DIST macros

2.5.39 released November 21, 1999

- default backfill_depth reduced to 8
- bugfix in defend1
- prioritization of moves in attack3 and defend3
- bugfix in attack2
- one new eye pattern
- several new move reasons
- several new pattern classes
- maximum number of patterns increased to 3000 in mkpat.c
- minor tuning of patterns.db
- block/expand and fuseki patterns adapted to new move generation scheme
- bugfixes and tweaking of move generation

2.5.38 released November 14, 1999

- bugfixes in the move valuation debug output
- various tweaks to the move valuation
- new move reasons: attack_either and defend_both (e.g. double atari)
- minor tuning of patterns.db and patterns2.db
- revised heuristics for dragon vitality
- eliminated a compiler warning in reading.c
- safe_move() now accepts moves that can only be captured with ko
- patch to automake in docs/automake-1.4.patch

2.5.37 released November 13, 1999

- move valuation core rewritten
- missing reasons added to list_move_reasons()
- two new eye patterns
- improved debug output in recognize_eye()
- minor tuning
- change_attack and change_defense modify worm.attack and worm.defend
- attack2 and defend2 try a few extra possibilities
- revised small_semeai

2.5.36 released November 11, 1999

- minor revision of docs/MOVE_GENERATION
- "pass" ignored in nngs_endgame()
- two new patterns in conn.db
- minor tuning of patterns.db and patterns2.db
- bugfix in make_worms()
- minor code restructuring in move_reasons.c
- some test code in moyo.c disabled
- bugfixes and changes to --testmode

2.5.35 released November 7, 1999

- bugfix in break_through()
- cleanup in moyo.c
- cleanup in worm.c
- revisions to docs/READING
- bugfix in find_defense
- revision of ko code in attack2 and break_chain2
- two new find_lunch patterns

2.5.34 released November 6, 1999

- new function try_ko() based on trymove() takes an illegal ko
- optimization: defend2 tries the move that gives more liberties first
- ko modifications to break_chain, break_chain2, defend2 and attack3
- new field ko_depth and -K (--kodepth) options
- ko_depth and fourlib_depth set to 0 during make domains
- numerous minor changes to ko reading
- bugfix in updateboard
- break_through() fully implemented
- tuning of patterns2.db
- one new connections pattern

2.5.33 released November 5, 1999

- new pattern class Q for patterns which should not be used with the new
  move generation scheme
- bugfix in fuseki.c
- minor tuning of patterns.db and patterns2.db
- retuning of cutting and connecting moves
- shape value added also to old style moves
- list_move_reasons() contingent on verbose rather than debug flag

2.5.32 released November 3, 1999

- temporary modification of depth values restructured
- bugfix in fill_liberty()
- minor tuning
- one new connections pattern
- one new eye pattern
- new auxiliary reading function: break_through()
- corresponding autohelper functions
- sigterm_handler set in main() independently of any command line switches
- command "defend" in ascii mode now works on any node

2.5.31 released November 1, 1999

- two new eye patterns
- further revision of TODO
- new file: docs/MOVE_GENERATION
- the new move generation scheme has been made the default

2.5.30 released October 31, 1999

- defend1 and break_chain try harder to make a ko defense the last resort
- small_semeai_analyzer ignores strings with 2 liberties
- tweak in breakchain2 may yield a speedup
- bugfix in is_ko
- fourlib_depth++ in several places
- does_defend() slightly rewritten parallel to does_attack
- change_defense and change_attack adjust worm.codes
- minor changes to patterns.db (mostly comments)
- decidestring reports ko result
- show_dragons() tells about ko status
- README, TODO, INSTALL, and gnugo.6 revised
- bugfixes in the makefiles to allow compilation in a separate directory
- bugfix in conn.db to stop amalgamations over ko
- debug message removed from induce_secondary_move_reasons()
- retuned old style moves in the new move generation scheme

2.5.29 released October 29, 1999

- extended statistics collection
- revisions of hoshi.sgf, conn.db, patterns.db, and patterns2.db
- joseki.c changed to generate antisuji patterns for value 0 moves
- more new move generation code
- three helpers replaced by constraints
- bugfix in defend_both()

2.5.28 released October 26, 1999

- revised eye patterns
- revised connection patterns
- more new move generation code
- revision of patterns2.db continued
- bugfixes in change_defense() and change_attack()

2.5.27 released October 24, 1999

- reading code now considers ko relationship
- new worm fields attack_code and defend_code contain ko data
- attacker and defender consider ko relationship
- renaming and reordering of reading functions
- revised eye patterns
- bugfix in sgfana.c
- minor tuning
- more new move generation code

2.5.26 released October 23, 1999

- new connection pattern
- antisuji and shape value patterns in patterns2.db
- effective size measure implemented for worms and dragons
- more new move generation code
- support for %f in vgprintf()
	
2.5.25 released October 21, 1999

- basicnet4 attacks by defending a boundary string
- option -F enabled correctly
- more new move generation code
- partial revision of patterns2.db
- bugfix in recognize_eye()
- a few new patterns and major cleanup of eyes.db
- new functions attack_either(), defend_both(), and play_attack_defend2_n()
- new autohelper functions corresponding to attack_either and defend_both
- documentation updated accordingly
- one connection pattern taken out
- minor tuning
	
2.5.24 released October 18, 1999

- bugfix in caching of reading results
- improvement in small_semeai()
- minor tuning
- new file: patterns2.db; intended for new move generation scheme
- slight changes in shapes.c for new move generation

2.5.23 released October 17, 1999

- bugfixes in debug output
- bugfix in sgf territory output
- enhanced basicnet3()
- always use worm origin in caching of reading results
- revised eye patterns
- trivial bugfix in nngs_endgame()

2.5.22 released October 14, 1999

- new eye patterns

2.5.21 released October 12, 1999

- minor tuning
- cleanup of play_ascii.c
- NNGS customization option in play_ascii()
- one new eye pattern
- small change in 9x9 fuseki play
- more experimental move generation code
- instructions for playing from Cgoban moved from INSTALL to README

2.5.20 released October 10, 1999

- tuning
- 13 helpers replaced by constraints
- action lines introduced in the patterns database to complement the
  constraints
- zero-valued joseki moves now generate antisuji moves (only effective in
  the new move generation scheme)
- more experimental move generation code
- new file: src/move_reasons.c
- bugfix in load_sgf_file()
- many new eye patterns
- cleanup in liberty.h and optics.c
- new diagnostics in compute_eyes()
- in basicnet4 we only consider safe attacking moves
- speedup in basicnet4 for isolated stones and probably other strings	

2.5.19 released October 9, 1999

- new cutstone concept in the experimental move generation
- minor tuning
- bugfixes in fill_liberty()
- bugfix in the handling of lunches
- bugfix in the improvement of attack and defense points
- stray patterns in eyes.db relocated
- autoconf test for glib hopefully working properly
- some remaining references to hey.db removed

2.5.18 released October 7, 1999

- reduced V_OBA in fuseki.c
- minor tuning
- more experimental move generation code
- new patterns in eyes.db
- bugfix in fill_liberty()
- test legality and safety of move much earlier in shapes_callback()
- autoconf test for glib so snprintf() can be replaced by g_snprintf
  if unavailable
- minor change in endgame() output to work around bug in NNGS connecting
  program

2.5.17 released October 5, 1999

- cleanup of hash.h
- new function in utils.c: find_origin()
- attack() and find_defense() represent strings with their origins,
  improving the efficiency of the caching strategy.
- backfill depth decreased from 14 to 10
- optimization and a little cleanup in make_worms()
- bugfix in value_move_reasons()
- three initializing functions tidied away from global view

2.5.16 released October 4, 1999

- one new eye pattern
- more experimental move generation code
- cleanup of main.h, worm.c, and matchpat.c
- improved diagnostic error messages in moyo.c
- bugfix in moyo.c
- new numbering scheme for eyes.db
- bugfix in small_semeai()
- '*' can now be used as label in autohelper functions
- minor tuning
- backfill depth increased from 8 to 14.

2.5.15 released October 3, 1999

- new small_semeai() resolves semeais involving worms with 3 or 4 liberties
- bugfix in only_atari_helper
- no message in change_attack helper if both ti and worm[ai][aj].attacki==-1
- minor changes in patterns.db (mostly comments)

2.5.14 released October 1, 1999

- small changes and cleaning in ttsgf_read.c
- new experimental attacker/defender code
- minor revisions of hoshi.sgf and patterns.db
- removed unused function mark_defenses()

2.5.13 released September 29, 1999

- reading code tries to attack strings with 4 liberties
- new function savestone4
- help string: options --depth etc. are not debug options as they
  affect playing strength so these are in main help string now
- bugfix in dragon_status: dragons rescued by ko are not DEAD
- continued cleaning of moyo.c
- one new pattern in eyes.db
	
2.5.12 released September 28, 1999

- tuning
- bugfix in two_bird_helper
- the last few helpers updated to use change_attack() and change_defense()
- copyright messages in joseki sgf files replaced by a patterns/README
	
2.5.11 released September 26, 1999

- tuning
- revised "You stepped on a bug" message
- new pattern in eyes.db
- revised joseki in hoshi.db
- komi initialized in main.c

2.5.10 released September 22, 1999

- important bugfix in moyo.c, fixing an indexing out of bounds error.
- tuning

2.5.9 released September 21, 1999

- cleanup of showbord.c
- hashitem renamed hashdata
- tuning
- more debug info in moyo.c

2.5.8 released September 20, 1999

- bugfix in fuseki.c to avoid passing if opponent plays on first line
- tuning
- error messages in moyo.c redirected to stderr

2.5.7 released September 16, 1999

- added src/utils to patterns/ Makefile includes
- tuning
- remember to add center stone in sgf file in sethand()

2.5.6 released September 15, 1999

- minor changes for Windows support

2.5.5 released September 13, 1999

- more informative renaming of variables in moyo.c
- added #include "getopt.h" to mkpat.c
- check setlinebuf(), if not available use setbuf() in play_ascii.c
- check snprintf(), if not available redefine to g_snprintf() (glib)
- new file docs/WINDOWS

2.5.4 released September 12, 1999

- bugfix with --analyze --score: analyze the correct move
- make install now copies gnugo.6 to /usr/local/man/man6
- we do not install mkpat, joseki, mkeyes or sgfgen
- gnugo.6 moved to top directory
- revisions to documentation
- docs/structure.doc is eliminated
- docs/BOUZY renamed MOYO
- patterns/fuseki2.sgf is back in patterns/
- suppression of many messages when running --quiet
- bugfix in fuseki.c which could cause illegal moves
- bugfix in fuseki.c: do not set i,j then return 0

2.5.3 released September 10, 1999

- bugfix in make_worms: typo in adjacent worm code
- bugfix in trymove() and legal(): check ko color
- tuning and cleanup of patterns.db
- bugfix in filllib preventing rare illegal moves
- bugfix in hashing code
- MAX_HANDICAP set to 9

2.5.2 released September 7, 1999

- revision of --help
- revision of documentation
- separation of globals. New file src/globals.c
- further revision of moyo.c: dilation revised
- bugfix in filllib preventing rare illegal moves
- tuning

2.5.1 released September 3, 1999

- delta_moyo_simple() checks for isolated groups like delta_moyo()
- new function average_moyo_simple()
- docs/BOUZY updated
- reimplementation of erosion
- patch to sgfana.c using multiple character names

2.3.94 released September 3, 1999

- Tuning
- Renumbering and cleanup of patterns.db
- Bug fix in linear_eye_space().
- load_sgf_file() gets the right color to move at end of file
- Various small corrections.
- backfill_depth is now 8

2.3.93 released September 2, 1999

- bugfix in recognize_eye
- bugfix in readlad1: use null pointers in readlad2 call
- fill_liberty() rewritten recursively with backfilling
- atari_save_helper replaced by constraint.
- tuning
- Previous change to moyo_assistance reimplemented correctly
- sethand() places fixed handicap stones as traditional

2.3.92 released September 1, 1999

- Two new eye patterns
- Bug fix in filllib.c, avoiding a possible assertion failure
- Use delta_moyo_simple() in moyo assistance function
- Tuning
- gnugo complains about wrong boardsizes
- avoids some warnings in sgfana.c
- now -o in ascii mode works with handicap stones
- bugfix in readlad2
- bugfix in basicnet3
- docs/OVERVIEW updated

2.3.91 released August 27, 1999

- warnings when compiling with ncurses are hopefully fixed
- The connections code no longer amalgamates attackable worms
- Bug fix in the topological halfeye code. 
- uncovered a problem with halfeyes in the eyes code, documented in a FIXME
- Minor tuning.
- Bug fix in the linear eyes code.
- Random bonus taken into account in the TRACE prints in shapes.
- fill_liberty() completely rewritten
- destroyer taken down

2.3.90 released August 26, 1999

- hey.db removed from distribution
- we no longer give a point for a pass and compel white to pass last
- play_solo.c and genmove.c: calls to snprintf changed to sprintf
- revisions to documentation, and to NEWS, AUTHORS, README, INSTALL
- partial cleanup of main.c
- one new eye pattern
- worm.cut field moved to eye_data structure and initialized properly.
- Added endgame patterns to fix one non-finish bug
- Replaced movenum by move_number() in play_solo.c.
- Removed dead code from dragon.c and liberty.h
- Minor cleanup in worm.c
- One new cut pattern in conn.db
- sente_hane1_helper replaced by constraint
- Bugfix in computation of max weight in mkpat.c
- Tuning

2.3.89 released August 25, 1999

- bugfix in eye_finder
- one new eye pattern
- gaminfo.seed is set
- handicap stones added when not present. 
  (Doesn't work with "-l filename --mode ascii")
- revision to documentation
- message about unimplemented commands removed from ascii help
- One new connection pattern in conn.db.
- Revised connect_under_helper and 
- replaced safe_hane_helper by a constraint
- Revised some joseki values in hoshi.sgf
- Tuning of patterns.db.

2.3.88 released August 23, 1999

- board size bug fix in moyo.c
- fuseki.c: 3-3 invasion deprecated in 9 stone fuseki
- New joseki in hoshi.sgf (tsukenobi variation and one 3-3 invasion)
- tuning

2.3.87 released August 22, 1999

- eye.esize-eye.msize>7 is alive in recognize_eye
- several eye patterns added
- dragon_status: escape_route bound for CRITICAL upped to 6
- -o and --analyzerfile add handicap stones by AB,AW
- in nonfile modes the handicap stones are added in sethand() 
- sethand() checks for max handicap values and returns actually set stones 
- reduced MAX_HANDICAP to 19
- main.c checks for MAX_HANDICAP
- sgf_close_file is called only once, when ending ascii mode with "quit"
- GM property added in --analyzerfile
- HA property added in --analyzerfile (in sethand())
- defined MIN_BOARD 3 in liberty.h
- help output shows MIN_BOARD, MAX_BOARD and MAX_HANDICAP
- cleanup of shapes.c, optics.c and moyo.c

2.3.86 released August 21, 1999

- resolved: hashed functions shall be readlad2 and basicnet3
- connection code patch to reconcile amalgamation and cutstone
  classification (needs rewriting)
- tuning
- amalgamate over _dead_ ko positions
- bugfix in not_lunch_helper
- Changed semantics of play_attack_defend_n()
- unused color parameter removed from get_read_result
- no compiler warnings under GNU/Linux
- man page docs/gnugo.6 added
- convenient tcsh completion described in docs/MISC

2.3.85 released August 20, 1999

- configure option --disable-hashing now functional
- values are not hashed when stackp>depth
- cleanup of mkpat.c
- cleanup of eyes.h
- tuning
- now prints number of eyes in analyzerfile with --analyze eyeinfo

2.3.84 released August 18, 1999

- tuning
- cleanup of dragon.c
- halfeyes.c removed from the distribution
- configure option --disable-hashing sets HASHING to 0
- sgf.c: avoid trying to close output file twice
- eyes.db: code # has been changed to @ to avoid conflict with comments
- Revised compute_eyes() and split off linear eyes to an own function.
- Made return value from recognize_eye() more consistent.
- New autohelper functions to identify eye space points: eye(),
  proper_eye(), and marginal_eye()
- Major revisions of endgame patterns, taking eye space into account
- obsolete functions play_attack_defend2() to play_attack_defend8() removed

2.3.83 released August 15, 1999

- joseki.c upgraded to generate constraints in .db
- 3 new autohelpers in mkpat.c: diff_moyo, area_space, area_stone
- interface/play_test.c: bugfix when --testmode and --analyze are combined
- CHECK_HASHING turned off

2.3.82 released August 14, 1999

- hash codes are now computed incrementally
- bugfix in hash.c
- reading.c: sacrifice only if stackp<backfill_depth to avoid slow reads
- sgf.c and main.c: --decidestring works with small boards
- cleanup of src/attdef.c
- update: doc/MISC
- play_ascii: new commands HELPDEBUG, GOTO, DEFEND, SHOWMOYO, SHOWTERRI, 
  SHOWAREA, SHOWDRAGONS, SAVE, and LISTDRAGONS
- play_ascii: command COMMENT now only writes to analyzerfile
- analyze: new commands AREACOLOR, DEFENSE, MOYOVALUE, TERRICOLOR, TERRITORY, TERRIVALUE
- abortgo saves abortgo.sgf independent of any -o or --analyzerfile

2.3.81 released August 11, 1999

- new function number_weak returns the number of weak groups
- little tuning in hoshi.sgf
- major update of all fuseki.c
- change in --playstyle options, new fuseki become the default
- added stone color NONE in liberty.h for use with set_computer_player()
- new function capture in ascii mode 
- new function last in ascii mode
- bugfix: sethand does not set handicap stones to sgf tree any more
- bugfix: testmode game with --analyze skips variations 
- new sgfana.c with analyze functions and gnugo specific parts of ttsgf.c
- new function sgfTriangle()
- new function sgfMarkWorm()
- bugfix: analyze function recommended switched off as default
- new analyze function capture

2.3.80 released August 10, 1999

- Implement hashing for attack() and find_defense()
- option -H = --hash allows user to specify which functions use hashing
- cleanup of sethand.c
- cleanup of semeai.c
- option --playstyle <style>, replace old --fuseki and --fearless

2.3.79 released August 10, 1999

- hash.h: bugfix which caused reading errors in rr_set_result_ri_rj
- reading.c: savestone2 looks for double ataris to chain when stackp>depth
- updated docs/MISC: analyze functions
- option --analyze works again (was temporarily off by accident)
- option --analyze works in --testmode game, no variations tested
- new analyze functions: moyocolor, recommended, eyeinfo, worminfo
- bug fix in analyze function eyes
- option --score last --analzyerfile saves the potential territory with TW,TB
- option --statistics writes also to analyzerfile
- abortgo() saves analyzerfile 
- ttsgf.c: ttsgf_move_made() removed
- play_solo.c: timing added to benchmark mode

2.3.78 released August 7, 1999

- hashing in basicnet3 and savestone3
- bugfix in play_gmp.c: undo now seems to work!
- sgf/sgf_utils.c: bugfixes in get_moveX and get_moveY
- interface/play_solo.c: bugfix in get_moveXY

2.3.77 released August 5, 1999

- showbord.c: revised behavior of -E option
- minor change in moyo.c to have it reinitialized when a game is reloaded
- change in scoring system for compliancy with chinese & japanese style rules
- ascii mode: save territory points to analyzerfile 
- gmp mode: log game in sgf tree
- gmp mode: undo implemented by replaying sgf tree
- gmp mode: save result and territory points to analyzerfile
- ttsgf.c: new function sgfOverwritePropertyInt()
- ttsgf.c: new function sgfAddStone()
- sethand.c: sets handicap stones to sgf tree
- hash.diff removed from distribution

2.3.76 released August 4, 1999

- interface/html directory contains cgi interface
- bugfix in optics.c: initialization of domains
- bugfix in reading.c: some variations were being overlooked
- hashing implemented in savestone2

2.3.75 released August 2, 1999

- mark illegal moves in --printsgf with IL property
- Some new macros in hash.h
- Use hashing in readlad2 
- Some cleanup of worm.c
- option -f rewritten : opening tuning, including oba moves
- non fuseki part of old -f option became --fearless option

2.3.74 released August 1, 1999

- bugfixes in helpers.c. One of these could cause a crash
- two connection patterns increased substantially
- moved get_komi() and inc_movenumber() to liberty.h
- play_ascii(): new commands to navigate the game tree in ascii mode
- back command (undo) implemented in ascii mode! Newly placed
  stones appear as variations in the sgf
- play_ascii(): changed the compare length of some commands. Now q works
  for quit, b for back and f for forward.
- removed bug in play_ascii(): user pass after computer pass did not
  display result.
- fixed bug in helpanalyzer output
- utils.c: added function intialize board() and removed remove_stone()
- fixed the komi bug reported by Douglas in --analzyerfile

2.3.73 This version may be released later

2.3.72 released July 30, 1999

- bugfix in updateboard ko handling
- Moved obsolete documentation about reading.c to doc about utils.c
- Expanded documentation about reading with hashing
- minor tuning

2.3.71 released July 29, 1999

- bugfix in make_worms: moving point of defense
- fixes to handling of ko after a pass
- updatepassmove() removed
- updateboard now handles pass moves.
- KO handling by trymove is currently broke
- play_ascii.c, play_gmp.c, play_solo.c updated accordingly.
- revisions to ascii interface.
- legal() now reports a pass move to be legal.
- revision of one eye pattern
- tuning to increase attention to connections
- 2 new helpers
- mkpat: weak autohelper option needed ==CRITICAL
- modified worm values

2.3.70 released July 28, 1999

- Zobrist hashing implemented
- new files src/hash.h and src/hash.c
- readlad1 uses hashing
- readlad2 does consider 2 stone sacrifices if stackp<backfill_depth
- revised method of ko detection using
- New file docs/HALFEYES describing the topology of false eyes and half eyes.
- Halfeye detection rewritten from scratch according to docs/HALFEYES.
- Revisions to connection code.
- A small amount of tuning.
- Dragon values changed when worm values are.
- Designation of marginal eye spaces revised to consider if enemy has a safe move
- Bugfix in worm.c

2.3.69 released July 27, 1999

- bug fix in connections.c
- two false eye patterns added
- one pattern added
- readlad2 sorts liberties before plunging in to the read
- readlad2 rejects sacrifices of more than one stone
- bugfix in shapes.c
- in worm.c we sometimes try point of attack for defense
- removed the -b bug 
- removed some warnings
- ascii mode: new command comment writes one line comments to file
- ascii mode: new command score displays terri_eval
- ascii mode: new command dead  shows dead stones as lower letters
- ascii mode: at end shows dead dragons, lets user toggle their state
- ascii mode: REsult propterty is written to analyzerfile
- new command line option helpanalyze
- option --score end outputs territory points (TW,TB) to analyzerfile
- utils.c: new function remove_stone
- utils.c: new function change_dragon_status
- main.c:  added shortcut for --help to the help message
- ttsgf.c: reduced the memory consumption of the sgf structure
- liberty.h: made the dragon structure public

2.3.68 released July 26, 1999

- Tuning, seki patterns.
- New connection patterns.
- Revision of connections code.
- New helpers.
- eye_finder() now considers shape's move as defender() and attacker() do
- Cleaning up and bug fixes in attdef.c.
- More debug messages for the eyes code.
- Bug fixes in compute_eyes() and play_attack_defend_n().
- Bug fix in shapes.c: TRACE was missing an argument
- fixed testwind compiler warning

2.3.67 released July 25, 1999

- bugfix in attacker: depth was changing each move
- A class patterns, analogous to the D class, implemented but not tested
- B and C classes can now be used in the same pattern.
- The meta_connect bonus now specified with a new field
- doc/PATTERNS revised
- the oplay_attack() and similar autohelper functions documented
- meta_connect bonus removed from most patterns except block/expand
- Weakness bonuses are now applied at a later time than they were.
  Thus B and C patterns are treated the same as patterns using helpers
- A 5,5 weakness bonus added to all cut/connect patterns 
- diag_miai2 helper revised.
- Some tuning.
- shapes.c cleaned up.
- revisions in interface/play_ascii.c
- substantial revision in sgf/ttsgf.c
- new option --analyzerfile (see docs/MISC)
- docs/SCORING is renamed docs/MISC

2.3.66 released July 23, 1999

- make_worms: bugfix in resetting of worm.attack and worm.defend 
- bugfix in does_defend
- new autohelper macros
- play_attack_defend_n can take an arbitrary number of parameters
- function who_win renamed who_wins for grammatical reasons
- play_gmp.c: if there is a handicap we assume komi=0.5
- play_solo.c: captures not added a second time
- new patterns in eyes.db
- some tuning
- sgf.c: pass is [tt] unless board_size>19
- depth and backfill_depth are augmented in attacker() and defender()
- bugfix in printsgf mode
- sgf_printboard prints current board position to sgf file
- LOAD_AND_PRINT mode: read file, output final position

2.3.65 released July 21, 1999

- dragon_eye does not amalgamate across an ikken tobi
- play_ascii.c: change depth on the fly
- new option --statistics
- revision of various helpers and 2 new helpers
- mkpat rewritten so constraints can now be on several lines.
- New autohelper functions xplay_attack, oplay_attack, xplay_defend,
  and oplay_defend, which take variable number of arguments.
- New functions in utils.c to support the above.
- tuning
- bugfix in sethand.c
- increased DEPTH to 14 and BACKFILL_DEPTH to 7
- change_attack can sometimes reclassify dragons as DEAD
- command line resetting of depth

2.3.64 released July 20, 1999

- reformatting of reading.c
- bugfix in break_chain2
- revised basicnet3: try harder to rescue boundary chains
- revised basicnet3: remember moves tried to avoid redundant reading
- bugfix in find_lunch: pick juciest worm
- sgf property PL implemented in play_solo
- revisions in play_solo.c and fuseki.c for small boards

2.3.63 released July 19, 1999

- delta_moyo, delta_terri work with either color
- 2 new functions diff_terri and diff_moyo, 
- cleanup of moyo.c
- -f option revised
- docs/BOUZY revised
- new docs/SCORING
- New autohelper functions.
- New connection patterns and revisions of the connections matching code.
- Bugfix to an eye pattern.
- Much tuning.
- Revised criterion for when to defend or attack a worm.
- Extended the scope of destroyer().
- Experimental worm and cut revaluation in light of dragon formations
- Changed heuristics for eye values of non-matched eye shapes.
- reordered arguments to does_attack() and does_defend()
- bugfix in readlad2: backfill was turned off
- default backfill_depth is now 5
- -l and -o options can be - for stdin and stdout

2.3.62 released July 17, 1999

- New autohelper functions, xlib(), olib(), xcut(), and ocut().
- Revised documentation for autohelper functions.
- Connections database introduced. New files: connections.c and conn.db.
- find_dragon_pairs() disabled, replaced by connection patterns.
- Cutting patterns from the connection database can modify eye spaces.
- Amalgamation in dragon_eye() no longer done over marginal eyes.
- mkpat partially rewritten.
- Minor correction to eyes.db.
- Nakade helpers cleaned away.
- Minor tuning,
- two more nakade like patterns removed, EC63 again C   pattern.
- Bug fix in attacker(): discount bad captures, not good ones
- New function destroyer() to capture of strings that can't currently
  be defended, but which could be after opponent backfilling
- Some cleaning in genmove.c.
- Attack points of non-defendable strings not moved in make_worms
- defense points added for adjacent non-defendable strings so
  dragon amalgamation won't confuse semeai()
- new function read_sgf_header used by load_and_analyse_sgf_file
- new function load_and_score_sgf_file
- new option --score and new mode LOAD_AND_SCORE
- new function evaluate_territory

2.3.61 released July 15, 1999

- nakade patterns are gone
- only linear patterns are currently hand-coded
- many new eye patterns
- not_lunch_helper aids in hane/kill combinations
- undid a change in 2.3.59: amalgamation on first line

2.3.60 released July 15, 1999

- TODO revised
- copyright revised in interface/ files
- new pattern in eyes.db
- halfeyes: require O not dead
- revision of detect_trap_helper
- revision of one pattern in hey.db
- new ko patterns
- other minor changes
- new functions does_attack and does_defend in utils.c
- attacker and defender call these functions
- copyright notice slightly changed in main.c
- reformatting of worm.c
- unwanted handicap printf removed from play_gmp.c

2.3.59 released July 14, 1999

- revision of docs/DRAGON
- several new eye patterns
- fair amount of tuning. Particularly, changes to diag_miai patterns
- dragon.c: we don't amalgamate a dragon if it touches the eyeshape
  only on the first line
- COLOR_STACK_SIZE increased to 70
- DEBUG used in optics.c

2.3.58 released July 13, 1999

- mkpat revised. Autohelper functions now can take multiple parameters.
  First out is defend_against(a,b) which plays our own stone at a and
  then checks whether the opponent can safely play at b.
- some tuning of patterns.
- new function defend_against() in utils.c
- bugfix in compute_eyes(): missing returns
- two new eye patterns
- bugfix in add_half_eye
- more refined testing of att_X case in halfeyes.c
- halfeye: obsolete test that eye and halfeye are in distinct cavities omitted
- halfeye: we check that * is a safe move for X
- restored marginal test in throw_in_atari_helper (removed in 2.3.55)
- superceded docs/GRAPHS removed from distribution
- filllib.c reformatted

2.3.57 released July 12, 1999

- count and chain rewritten for speed
- more graceful error message if no in file specified in testmode
- eye pattern 10 needed a vital point
- find_lunch and make_worms: a ko is not lunch

2.3.56 released July 11, 1999

- add_half_eye: when a half eye's vital point is in another eyeshape 
  the eyeshapes are amalgamated. This is correct and stops some crashes
- computer tries to compute the score at end of game
- new function who_win in moyo.c
- one chimera pattern included in eyes.db
- bugfix in attdef.c: color in territory test
- bugfix in showbord.c: display of capture count

2.3.55 released July 9, 1999

- integration of half eye and eye code
- separate eye domains for black and white
- revision of docs/EYES to document the algorithm
- a couple of changes that will be undone in a later release:
  temporary oversimplification of treatment of att_X in hey_callback
  temporary oversimplification of throw_in_atari_helper
- removal of one half eye pattern
- experimental penalty for running inside enemy territory
- bug fix in semeai.c
- revision in showboard for -E option

2.3.53 released July 8, 1999

- reading.c: new function special_rescue finds certain saving moves
- revisions to savestone2 including use of special_rescue
- speedup in find_lunch
- minor revisions to hey.db and eyes.db
- bugfix in mkpat (this could cause compilation failure)
- bug fix in make_dragons (ignore eyes when not relevant)

2.3.52 released July 7, 1999

- bugfix in setup_double_atari_helper (could cause crash)
- minor tuning
- revision make_domains: influence can't creep under third line stone
- revision to find_lunch: if already eaten it's not lunch
- revision in halfeyes.c vis a vis Pattern 12

2.3.51 released July 6, 1999

- revision of mkeyes
- new function recognize_eye() for use by the reading code (unfinished)
- revision of the -f option (move generator based on territory)
- cleanup in helpers.c and replacement of helpers by constraints

2.3.50 released July 4, 1999

- gnugo -f implements search for big moves with delta_moyo>=12 
- and delta_terri >=14. Such a move gets value 80. 
- tuning
- some work on false eye code
- some work on the eye code
- bugfix in double_atari_helper

2.3.49 released July 2, 1999

- Correction to sgf output from ascii interface.
- Results of safe_move() are cached if stackp==0.
- Helpers and some other code rewritten to use safe_move() 
- Bugfixes in  block_attack_defend_helper and urgent_connect_helper
- Reading bug fixed in savestone2().
- tuning
- autohelper options safe_xmove,safe_omove,xmoyo,omoyo,xarea,oarea,xterri,oterri
- new function mkeyes to compile the eye database (unfinished)
- docs/GRAPHS explains the approach to the eye code
- revisions to eyes.db and eyes.h
- in halfeyes.c we make an exception to the rule that X can't be captured
- revisions to hey.db
- dragons with one eye and lunch are CRITICAL
- revisions to eye_finder to find such dragons
- eyespaces are not connected through adjacent marginal eyes
- various fields initialized in make_domains()
- bugfixes in make_domains
- bugfix in compute_eyes: sometimes found the wrong end of a linear space

2.3.48 released June 29, 1999

- experimental changes to fuseki.c
- revisions to helpers and patterns
- eye_finder() now calls sgf_move_considered()
- revisions to compute_eyes: eye shapes of size 4
- DEPTH is now 13, BACKFILL_DEPTH is 9
- gnugo --help now prints defaults of depth and backfill_depth
- bugfix in worm.c: some non-kos were incorrectly identified as ko

2.3.47 released June 29, 1999

- substantial speedup in chainlinks
- minor tuning

2.3.46 release June 28, 1999

- tuning, new helpers and patterns
- some half eye code restored to dragon.c
- some further linear patterns in compute_eyes()
- bugfix in savestone3
- speedup in find_lunch: if stackp==0, we used cached info
- in break_chain2 don't try certain foolish moves
- speedup in basicnet3 (avoid unnecessary readlad1)

2.3.45 released June 27, 1999

- 3 new functions delta_terri_color, delta_moyo_color, delta_area_color
- new board stack in moyo.c
- BOUZY updated
- bug fixes regarding half eyes in dragon.c and eyes.c
- new code for some linear patterns
- bugfix: dragons around a ko were getting amalgamated

2.3.44 released June 25, 1999

- bugfix in atari_save_helper (could cause crash)
- revision to CD68 (could cause GNU to play out a ladder)
- bugfix in dragon.c: incrementing msize wrongly
- minor revisions to make_domains()
- new functions int moyo_color(int m,int n) and int terri_color(int m,int n)
  returning the color of the intersection as seen by terri & moyo modules
- new function delta_moyo_simple() without meta_connect bonus, delta_moyo()
  is now a wrapper to this one (should be a transparent modification)
- diag_miai_helper uses the new moyo_color()

2.3.43 released June 24, 1999

- revisions to ascii interface
- gnugo can resume adjourned games
- gnugo plays through endgame phase of the ascii interface
- much tuning
- revisions to helpers and new helpers
- in this version a weak group has between 0 and 20 points space
- two half eye patterns are back. Half eyes still not working right
- (incomplete) revision of eye code to deal with half eyes
- bug fix in eyes.c regarding opponent stones within eyespace
- tinkering with hoshi.sgf


2.3.42 released June 23, 1999

- weak groups now have between 4 and 20 liberties
- diag_miai_helper won't recommend a move in opponent's territory
- revisions to patterns/hoshi.sgf
- mkpat.c: fields in NULL pattern at end of patterns.c corrected
- mkpat.c: weak option added to pattern compiler
- some tuning
- dragon.c: error eye.msize was preventing us from finding false eyes
- some code moved from eye.c to dragon.c to help finding false eyes
- compute_eyes and propogate_eyes are now public functions
- bugfix in shapes.c: obonus and xbonus should now work correctly
- revisions to documentation

2.3.41 released June 22, 1999

- compute_eyes is partially written (without using matchpat)
- revisions to computation of genus
- openeyes is expunged
- half eye database is invoked earlier
- half eye database used only to find false eyes
- bonus field split into obonus and xbonus
- obonus and xbonus are applied to patterns involving weak groups
- most EB patterns now have bonuses
- 5 point bonus for patterns involving weak groups (2.3.38) is gone
- some tuning
- some bugfixes in eyes.c, dragons.c and semeai.c

2.3.40 released June 21, 1999

- substantial revisions and new code in dragon.c and eye.c
- dragons around an eye shape are now amalgamated
- delta_moyo looks in meta_connect for the tested move
- Bug fixes for two helpers.
- Minor tuning.
- GNU now can read sgf files with missing final ")".
- defender and the attacker try the move suggested by shapes()
- The semeai player now prefers to play on mutual liberties if this
  improves the liberty balance.

2.3.39 released June 18, 1999

- some tuning, new helper block_attack_defend_helper
- eye code now fills out an array eye[][] with data
- revision to eye algorithm
- open eye spaces now have origins
- bugfix with -E option
- dead groups are now cyan in showboard (were white)

2.3.38 released June 17, 1999

- experimental bonus of 5 points to patterns involving a weak dragon
- revision of patterns/hoshi.sgf: attachment variations deprecated
- open eye shapes are now computed. Display these with gnugo -E
- some tuning

2.3.37 released June 16, 1999

- weak groups no longer classed dragon.status==CRITICAL. Instead ...
- new field dragon.weak
- old worm.weak and dragon.weak renamed worm.lunch and dragon.lunch
- weak groups (found by moyo) classed dragon.weak==CRITICAL
- dragon.weak field not used by genmove but displayed by showboard
- new helper wedge2_helper
- tuning and other revisions to pattern database
- src/eye.c code is now linked though not used by genmove
- revisions to showboard to display eye domains if xo=1
- int make_worms() (was void) returns 1 if board not empty
- find_weak() renamed find_lunch()

2.3.36 released June 15, 1999

- weak groups are classed CRITICAL so they scrounge eyes
- new function test_weak to find weak groups (in moyo.c)
- revision to print_txt_color
- bugfix in fill_liberties
- revised docs/BOUZY
- bugfix: find_defense no longer checks that strings can be attacked
  which required some modifications, slowing us down a little
- DEPTH reduced to 12

2.3.35 released June 15, 1999

- reading code is much faster now and hopefully also more accuracy. 
- new function relative_break_chain() used in revised readlad2()
- caching of moves eschewed in break_chain(), break_chain2() 
  if return pointer is NULL
- DEPTH increased from 10 to 13
- new docs/READING explains using --decidestring -o with gdb
- connect_under_helper() rewritten to use connection_value()
- housecleaning in patterns.db

2.3.34 released June 14, 1999

- test for pass in play_solo.c corrected
- tuning
- new pattern classification: Edge Expansion
- GNU tries in two ways to fill liberties (points in Chinese count)
- before passing, DEAD opponent stones in semeai are reclassed
  unknown, then shapes is rerun
- if that doesn't work, new function fill_liberty() tries again
- new field dragon.semeai, new function revise_semeai()
- static_eval() is gone (superceded by moyo())
- reading.c: new function savestone3()
- reading.c: savestone2 no longer tries to find the best move since
  we have ways to improve points of attack and defense
- some code taken out of find_defense()
- dump_stack() uses gprintf instead of TRACE and counts variation

2.3.33 released June 12, 1999

- new function meta_connect to test a move against area ownership 
  (returns true when the move connects/disconnects meta groups)
- area ownership now sees kosumi connections
- minor changes in moyo.c data structures
- in shape.c, added some bonus for meta_connect moves
- in mkpat.c, some bonus added to maxwt for meta_connect moves
- minor tuning
- in readlad2() we consider throwins
- Copyright updated (no longer says 2.0) in src/ and patterns/

2.3.32 released June 11, 1999

- substantial speedup of reading code
- in savestone2, we try to find an easy saving move before reading
- in savestone2, we don't try second move if first works
- in readlad2, we postpone break_chain2 but not break_chain
- option --decidestring -o now outputs variation numbers
- bugfix in extend_to_kill_helper
- embryonic src/eyes.c included in tar file

2.3.31 released June 10, 1999

- new globals last_move_i and last_move_j give the last move made. 
  This is used to improve(?) ascii output.
- fixed bug ascii play where the captured stones where added wrong
- play_ascii and play_test start with move 0 like play_gmp
- in ascii play the last move is now marked
- bug fixed in ascii play when a pass is made
	
2.3.30 released June 9, 1999

- reimplementation of of handicap in ascii without writing p[][]
- new functions for saving/restoring game state without using stack
- use inc_movenum instead of movenum++ in play_gmp and play_solo
- revision to ko_important_helper: ko values cut in half
- move_attack() and move_defense() renamed change_attack() and change_defense()
- new komoku pattern
- 2 new patterns

2.3.29 released June 7, 1999

- connection_value moved to src/util.c
- alive11_helper modified
- eschewing of kos by attacker() and defender(), dropped in 2.3.28 is back
- edge_ko_important helper added
- new sente_extend_helper, straight_connect_helper, block_to_kill_helper
  extend_to_kill_helper, revise_value_helper
- new half eye pattern
- several new patterns and changes to patterns.db
- moved some CC patterns from wrong section
- now --color should work with ascii interface

2.3.28 released June 6, 1999

- bugfix (worm.c, shapes.c, helpers.c): propogate_worm not used with stackp>0
- attacker() and defender() no longer eschew kos
- unused sgfAddPlay is commented out (fixing a warning)
- fixes to trace (indent is back, caves which are kos are reported correctly)
- default backfill_depth is 7 (arrived at by trial and error)
- option --decidestring no longer requires -o (useful with or without it)
- in make_worms() code to improve worm.attack, worm.defend we now read
  one step deeper in the stack to avoid horizon effect
- initialization in propogate_worm() uses memset

2.3.27 released June 5, 1999

- new option -B [depth] should now work
- default values of depth and backfill_depth are 10 and 5
- new function mprintf which is similar to gprintf but writes to stdout
- changed vgprintf to work with different outputs (i.e. stderr, stdout)
- the testmode now write its output to stdout only (never stderr)
- bugfix in backfire_helper

2.3.26 released June 4, 1999

- Backfill depth can now be set with -B [depth]
- very minor revisions to patterns.db
- reading.c: bc was not being initialized when stackp>0 (twice)

2.3.25 released June 1, 1999

- bug fix in new make_worm() code
- connection_value gives a bonus if the connecting move makes 2 eyes
- mystery pattern CB102 removed

2.3.24 released May 30, 1999

- tuning of joseki and patterns
- revised definition of inessential worms --- require worm.weak==-1
- new code in make_worms() to revise points of attack/defense
- BACKFILL_DEPTH reduced to 4 due to increased slowness
- basicnet4 included but turned off

2.3.23 released May 29, 1999

- asymmetry bug in moyo.c fixed: when init_moyo() is launched,
  boardsize is not known
- area computation and dilat algorithm bug
- distribution includes reading.c.alt for the experimentally inclined
- tuning and new helpers
- dragon.c split into dragon.c and worm.c

2.3.22 released May 27, 1999

- disabled long jumps into enemy area without a secure connection
- no center pattern can jump down to or along the second line
- revision to the endgame patterns according to docs/ENDGAME
- detect_trap_helper looks for moves attacking two groups at once
- some other tuning
- evaluate_game removed from the distribution
- semeai will not recommend a move which leads to an immediate loss
- bugfix in semeai: bestlib was not getting updated

2.3.21 released May 27, 1999

- Empty corner play moved to src/fuseki.c (new) and reimplemented
- Embryos for 3-4, 3-3, 5-3, and 5-4 joseki databases in patterns/*.sgf
- option -m [level] for debugging moyos
- docs/EYES revised
- bugfix in urgent_connect_helper
- pattern revisions

2.3.20 released May 26, 1999

- readlad2 now tries backfilling. readlad2 and attack return 2 if
  a backfill is found but no direct attacking move
- new patterns
- use of macros to simplify helpers
- trymove: sgf --decidestring now gives more information
- solves errors when MAX_DILAT != MOY_DILAT
- now the area ownership uses 4 dilation, which seems better.
- docs/ENDGAME added from Gunnar's email of May 18, 1999

2.3.19 released May 24, 1999

- edge block/expand patterns reordered
- tuning
- a new joseki
- a new helper
- Move evaluate_game functionality into play_test.c
- It is now main.c that loads the sgf file into a tree.
- If no playmode / testmode is supplied, look for a comment
  of the form  C[testmode=...] in the root node. If found,
  this sets the playmode / testmode.
- Other interface fns take the tree, rather than filename, as param.
- testmode is now a local variable, passed as param into play_test,
  rather than setting into global state via set_testmode / get_testmode
- Move the tests for acceptable sgf file (GM[1]FF[3/4]) into the
  sgf reader, rather than in the user of the tree.
- bugfix in hane_backfill_helper
- semeai now attacks dragons of low vitality
- semeai tries a little harder to choose a smart liberty

2.3.18 released May 23, 1999

- break_chain() and break_chain2() return 2 if saving move can be taken
- savestone2() and find_defense() try harder not to make self-atari
- find_defense() now considers tenuki
- forgot to initialize adjsize and adjlib in chainlinks()

2.3.17 released May 23, 1999

- Complete reordering and some tuning of the fuseki patterns.
- A little tuning elsewhere.
- Documentation of the new features in the patterns.db format.
- The -m option enhanced with another board with delta_moyo values.
- chainlinks test now in basicnet3
- delta_terri(int ti, int tj,int color) : the same as delta_moyo(),
  but against the 5/21 evaluation
- area ownership evaluation (using 5/0 algo), with wrapper functions :
  area_stone(int m,int n), area_space(int m,int n)
  area_color(int m,int n), area_tag(int m,int n)
  set_area_tag(int m,int n,int tag)
- the values are computed during make_moyo evaluation, use
  "gnugo -m" to see how area are evaluated.
- bugfix in play_test.c

2.3.16 released May 22, 1999

- Wind assistance complemented by moyo assistance.
- Move dependent randomness replaced by pattern dependent randomness.
- Format of patterns.db changed to accomodate new features mentioned above.
- One new joseki line.
- Jump out patterns retuned. They may still be somewhat out of tune
  but in a new and different way. Or maybe they even work quite well.
- Some tuning of fuseki patterns.
- Caching of upower and mypower values from testwind.
- Some functions moved from matchpat.c to shapes.c.

2.3.15 released May 22, 1999

- board-setup nodes were being ignored in test-mode
- fixes a bug where moves annotated as bad (MA[]) were reported as good.
- took ascii_showboard out of play_test.c.
- end_sgfdump() tries to pop the stack before closing the file
- DEPTH ramped all the way up to 10, the new reading code is so fast
- evaluation of moves is moved to break_chain and break_chain2
- simplification of readlad1, readlad2, savestone2, find_defense and basicnet3
- a few annotated games against David Fotland's XGO added to regression/

2.3.14 released May 21, 1999

- documentational changes to helpers.c
- minor changes in patterns.db
- all jump_out_helper patterns changed to weight 60 for moyo heuristics
- jump_out_helper() modified to use moyo heuristics
- new function delta_moyo() run quite fastly, using the cache as proposed.
  the result of this function go in global variables :
  moyo_test[WHITE],moyo_test[BLACK] and the difference from precedent
  moyo evaluation is in moyo_test[0]
  delta_moyo returns what is expected : the difference from point of view
  of "color" player, aka moyo_test[0]
  the same for moyo_eval[3] and terri_eval[3]
  so all the results are availables for later use. 
  (see sources for details)
- used #defines for the variables 5/21 and 5/10 (can be 4/10 too), see liberty.h


2.3.13 released May 20, 1999

- further revisions to ttsgf_read.c regarding file buffering
- tuning, new patterns, helpers, half eye patterns

2.3.12 released May 20, 1999

- tuning
- ttsgf_read.c: changed 

2.3.11 released May 19, 1999

- reading.c from 2.3.8 is restored
- MAX_FILE_BUFFER increased to 150000 in ttsgf_read.c
- tuning and a new joseki
- hide most of liberty.h from non-src/ code.
- src/ and patterns/ define BUILDING_GNUGO_ENGINE,
  and are therefore allowed to see all the internal
  symbols. Otherwise, code just sees a few functions,
  and sees 'const' versions of the variables.
- (liberty.h defines a macro PUBLIC_VARIABLE which expands
  to  extern  for engine source files, and extern const
  for others)
- *NOTE* : we get many warnings about const violations,
  where other modules write to these variables. In particular,
  ascii_showboard makes temporary changes to p[][].
  But it still compiles (with gcc at least). These interface 
  violations were always there. Now they are visible.
- Moved remove_string() and count_territory() from play_ascii
  into src/utils : these need to be part of the engine
  since they have intimate access to the state.
- Did a bit of gratuitous changes with play_test.c
  No functionality changes.
- lost get_*_a and put_*_a interface functions.
- make_dragons() is no longer predicated on movenum, but 
  on existence of worms.
- potential_moves[][] is now taken seriously : genmove()
  clears it at the start of the move cycle, rather than
  having sgf_move_made() clear it at some random time
  after genmove has returned.
- semeai criterion slightly changed: my dragon.vitality<0
  and your dragon.status==DEAD.

2.3.10 released May 18, 1999

- hane_backfill_helper deprecated
- semeai module now consults vitality field to initiate fighting
- test mode did not pass movenum to engine code: fixed.
  did away with the game_info entries for boardsize and move_number, 
  made the interface use the engine's global variables instead.
  Better solution is needed (see TODO)

2.3.9 released May 17, 1999

- play_solo.c: in load_sgf_file() we now use global movenum instead of mv
- play_solo.c: white stones were loading as black (fixed)
- new helpers, tuning, revisions to pattern database
- mkpat.c: maxwt now takes bonus into account
- reading.c: break_chain2 simplified

2.3.8 released May 17, 1999

- backfill.sgf added to regression/
- color added to moyo.c
- bugfix in moyo.c: captures were counted backwards
- BOUZY added to docs/
- bugfix in sente_hane_helper
- joseki patterns are now type 's'
- fix the board_size bug in test mode
- reimplement load_sgf_file() in terms of the sgf parser : gives us
  ability to read multiple AB[][]... for free
- move load_sgf_file and load_and_analyse_sgf_file from sgf/ into
  interface.  (Currently play_solo.c but that's temporary.)
  Justification is that these fns have more to do with the engine
  than with sgf files.
- put in the emacs variable blocks into some of the files
- remove some extern refs from .c files - according to David 
  this is a bad practise
- Remove a few remaining // comments, and disable // comments in 
   GNUGO_SOME_WARNINGS
- Reorganise the --help page, and add long options for most of the 
   short ones. The --help is modelled after gnu tar.
- Some files had #define _NO_PROTO to hide getopt() prototype, but 
   these files were not doing option parsing, so  assume this is redundant.
- interface game_info structure was used only in interface.c, so
   moved the structure defn out of a public header file
- The ttsgf_read.c code only offered to parse an sgf file which had 
   already been read into a buffer. Moved a code fragment which appeared 
   in two places to load the file then parse it into a readsgffile() 
   function.
- Prefixed all the symbols for long option names with OPT_, and mode 
   names with MODE_to avoid namespace clashes. (DECIDE_STRING was being 
   used as a mode and an option.)

2.3.7 released May 15, 1999

- Jerome's moyo mode (-m option)
- new patterns and helpers, including backfill patterns CD47 and CD48
- reading.c: trysafe in readlad2 has been removed
- reading.c: in savestone2 if stackp==0 we first try to capture
-  a surrounding string. This would lead to thrashing if we tried
-  it at deeper levels
- reading.c: bug fix in find_defense (Gunnar)
- reading.c: in break_chain2 we omit harder attacks if string has
-  3 liberties since this causes too many errors.
- reading.c: in basicnet3 we test a little more the attack really works

2.3.6 released May 15, 1999

- bug fixes in patterns/

2.3.5 released May 14, 1999

- tuning, new helper
- initialization in src/evaluate_game.c and interface/play_test.c

2.3.4 released May 13, 1999

- Nils' changes to main.c and src/Makefile.am
- tuning, joseki revisions, new helper wedge_helper

2.3.3 released May 12, 1999

- find_weak eschewed in find_defense
- change to allow build in a directory other than source
- braces to joseki.c to avoid a warning about dangling else
- added --testmode game to analyze games and see if it considered the moves
- added docs/structure.doc describing program structure and APIs

2.3.2 released May 12, 1999

- missing library files restored in utils/Makefile.am
- tuning, invasion under hoshi joseki
- and a cosmetic bug fix in shapes.c.
- patterns for endgame ko
- bugfix in double_attack patterns

2.3.1 released May 11, 1999

- Joseki compiler and beginnings of a Joseki database
- some tuning
- Tweak sgf/Makefile.am to write generated sgf_properties to $(srcdir)/
    note : this generates a warning at automake, but I think it is benign.
- remove the GCC_OPTS from the Makefile.am's, and replace with either
    @GNUGO_SOME_WARNINGS@ or @GNUGO_ALL_WARNINGS@.
    This means we can centralise the choice of which warnings we enable,
    rather than having to duplicate the list of warnings in each component.
- Add code to configure.in to generate the above.  ALL_WARNINGS switches off use
    of // comments  (via -Wp,-lang-c89 which runs preprocesser in ansi mode).
    SOME_WARNINGS will do the same once all components have been cleaned up.
    SOME_WARNINGS is intended for code over which we don't have full control (eg gmp.c)
    and so we have to be more liberal in the diagnostics.
- Removed from the build some of the stuff in utils/ which we do not (currently) use.
- fixed clear_board() bug that caused segfaults
- fixed game parameter handling in main() to use interface API
- updated other interfaces to partially use interface API (no more
   passing from main!)
- removed // comments where they were not needed
   They stil are in the tt* code, that needs to be revisited!!
- patched sgfgen to use stdin and stdout- makes things easier

2.1.25 released May 10, 1999

- added --decidestring option for sgf debugging reading code
- added regression directory: contains a few example test files
- added --quiet option
- added --testmode option: move, annotation, or both
   This allows some flexibility in handling differently annotated files
- added --infile and --outfile options
- wrote play_test to handle regression testing
- wrote sgfgen, a program to translate SGF definitions into a header file
- added Tommy Thorn's code for SGF parsing and implemented tree parsing
- updated ASCII interface to rely on interface routines- it works!
- updated interfaces to handle new 'pass' based on int returned from genmove
- made genmove return boardsize, boardsize coordinates for pass 
- added interface specification and code-- we now have engine independence!
- moved all SGF code into sgf directory

2.1.23 released May 7, 1999

- sgf debugging of reading code (from gdb only in this release)

2.1.22 released May 6, 1999

- renum target removed from pattern Makefile.am and Makefile.in
- strategic_distance was being calculated incorrectly
- revisions to pattern database
- chainlinks now tabulates the size of adjacent worms in preparation
     to trying to sorting them when stackp<depth
- split out play_solo() into play_solo.c
- moved interface routines (play*, gmp*, sgf*) into interfaces/ directory
- combined play*.h into interface.h
- renamed 'lib' directory to 'utils' to be consistent with other dir names
- moved AUTOMAKE.README into docs

2.1.21 released May 5, 1999

- minor revisions to pattern database
- adds tests for term.h and curses.h before defing CURSES
- fixes a typo in helpers.c
- fixes some hard-wired 18's in make_worms()
- fixes what I believe to be a bug in scoping in make_worms
- gratuitously moves some variable declarations around in make_worms
- moved pattern files to patterns directory
- pattern files and functions are now linked in as a library: libpatterns

2.1.20 released May 5, 1999

- configure options
- main.c: LOAD_AND_ANALYZE mode

2.1.19 released May 4, 1999

- removed #include "../lib/getopt.h" from play_ascii.c - not needed
- added some code to better handle config.h to main.c and play_ascii.c
- added ascii_showboard() before the counting starts, useful after 'play 999'
- added --mode option to main.c
- changed how different play modes are started: now using switch()
- removed -g option: use --mode instead
- changed MAX_BOARD to 25 in liberty.h: try some bigger games!
- changed sgf 'pass' to [tt] if boardsize>19, else [] (by SGF standard)
- changed 'pass' moves to send board_size, board_size to sgf routines

2.1.18 released May 3, 1999

- play_ascii: playblack and playwhite are recognized as valid commands.
- play_ascii: Correct use of strtok on Solaris (missing strsep)
- ascii display and showboard now work as stated in the help command
- ascii display doesn't draw the board twice if showboard is enabled.
- ascii force was broken, is no longer.
- added check for getopt.h to configure.in
- fixed PLAY in play_ascii: need to check for two passes!
- prettyfication in main.c: changed strcmp() usage
- fixed seed printing in sgf.c
- play_gmp: handicap was not being passed to sgf_write_game_info

2.1.17 released May 2, 1999

- added counting to ascii interface
- Gunnar's reshuffled patterns
- LDFLAGS = $(COLORLIB) in src/Makefile.am and src/Makefile.in

2.1.16 released May 1, 1999

- further revisions to ascii interface

2.1.15 released May 1, 1999

- further revisions to play_ascii and sgf.c
- Gunnar's pattern classification in patterns.db
- static evaluation of the board position

2.1.13 released April 30, 1999

- moved all sgf routines into sgf.c
- changed pass value: from 19, 19 --> board_size, board_size
- added sgf_open_file() sgf_close_file() and sgf_flush_file() to sgf.c
- also added sgf_write_line() and sgf_write_game_info()
- rewrote play_solo to use new sgf routines
- absolutely no more build errors! (at least on Linux...)
- renamed ascii.* play_ascii.*
- moved play_gmp into play_gmp.c and added header file
- added komi option (doesn't do anything yet, just parses it)

2.1.12 released April 29, 1999

- finished adding long options
- color also works now (--handicap and --boardsize have been working)
- needs a little cleanup with short options- some should become long
- finished ASCII interface
- can display any board size up to 25x25
- has command line options and help
- enhanced error messages
- added 'switch' command to switch colors in the middle of play

2.1.11 realeased April 29, 1999

- Minor changes to the syntax of patterns.db and hey.db as a preparation
  for restructuring of patterns.db. Documentation in PATTERNS updated.
- moved ascii play code into ascii.c
- copied showboard code for ascii play into ascii.c (ascii_showboard)
- updated Makefile.am's to reflect changes
- removed posix and error.c files from lib dir- not needed
- added long option parsing; still need to add this to help menu
- moved PATTERNS, DRAGON and OVERVIEW to /docs

2.1.10 released April 28, 1999

- incorporated more reorganizational patches

2.1.9 released April 28, 1999

- Automake-ized (NL)
- Made code which moves dragon[m][n].borders contingent on !worm[m][n].ko
- Set TRUST_GRID back to 1.

--------------------------------------------------------------

This is GNU Go, a Go program. Contact gnugo@gnu.org, or see    
http://www.gnu.org/software/gnugo/ for more information.       
                                                               
Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
and 2008 by the Free Software Foundation.
                                                               
This program is free software; you can redistribute it and/or  
modify it under the terms of the GNU General Public License as 
published by the Free Software Foundation - version 3 or
(at your option) any later version.          
                                                               
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
GNU General Public License in file COPYING for more details.   
                                                               
You should have received a copy of the GNU General Public      
License along with this program; if not, write to the Free     
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,    
Boston, MA 02111, USA.                                         
