Version 14
==========

-make Makefile work with Solaris Make. 


----- RELEASE ------

Website
-------

/feature/:  
 - Make images bigger and put them on the right.
 - remove "GUI" section.
 - write rules for screenshots 
 - new screenshots 

/art/:
 - Make images bigger: height == 100.


Version 15
==========

- Key shortcuts in menues. (see the gnome guidelines for keys). 
- Write GUI_MATCH.(and save the time for each move in comments). 
- Add `bool in_check' to Position.  Optimize some things using that. 
- sh/install-all:  add options for additional arguments to cook, eg
  -par=N.  
- Make GTK_MULTI_LIST_BOX flicker-less (by calling freeze on every
  change, sending a message, and calling thaw when the message is
  received. 
- Make BOARD flicker-less, by replacing with GnomeCanvas (?).  
- Make scripts is `sh' faster.  Maybe replace pipechains of sed with
  sed scripts. 
- Have an "insert file" into the game archive editor. 
- Have a "auto-apply" option in all owned editors. 
- Use background images in board.
- Alternative piece/background images. 
- Have a tutor mode where possible destination squares are highlighted
  when a piece is "touched". 
- Make the evaluator better. 
- Use international notations. (see the PGN docs for piece
  abbreviations). 
- Use descriptive english notation (PK4). 
- Translate messages using gettext(). 
- Make menu items disabled. 
- various editors:  Undo stack
    - Merge files in /doc with implementation, and remove the `doc'
directory.  
- Remove usage of document_editor as owned_editor, and use child
  processes. (will make executables smaller). 
- Ask before overwriting files. 
- notation:  make strings configurable:  EP text, the '=' of
  promotions... 
- date:  rewrite Date and Date_Val as classes. 
- game_info:  check that if loading a game with no date info, the date
  remains empty and is not replaced by the current date. 
- game_info:  store date as Date instead of String. (issues with
  localtime/gmtime) 
- game_editor:  don't refill game move list everytime it changes. 
- check whether XBoard has other interesting features that BabyChess
  doesn't have. 
- Insert characters for name of colors to Notation.  (eg "w" and
  "b").  Use these notations everywhere (eg in
  position_editor::castling_chooser, "wO-O-O").
- move:  try out make structure smaller by using "int8_t" for "from"
  etc...  
- game_editor:  don't refill game move list on each new move. 
- game_editor:  be able to edit NAG. 
- document_Editor: Write "modified" in the status bar. 
- evaluator_widget:  better layout. 
- document_editor:  only ask after "New" when editor is not owned.  
- game_editor:  add a tool-bar button for "edit position". 
- Use GDK's main loop also in non-GTK programs such as XBOARD_ENGINE.
  (requires Gdk >=2)
- Use assert(3) instead of Assert()., catch SIGABORT and make it do
  what Assert_Failed() does.  remove assert_failed().  
- MAIN:  don't block signals, only catch SIGABRT and make it call
  pause(). 
- game_editor:  variation_list:  use a popup menu or place buttons to
  the side. 
- notation_editor:  make piece chars editable. 
- notation::reset():  use local notation. 
- multi_list_widget::set_row_count(n):  if (N == 0), call clear(). 
- game_editor:  legal move list:  align move numbers to the right. 
- document_editor:  have better window title if window is owned.  eg
  "Game 16 - a.pgn"
- material:  change order of arguments to (CC, PT). 
- Use GTK+ 2.0. (and support 1.2 maybe) 
- when quitting a dialog window with 'cancel', restore old settings. 
- In general, "New" should open a another window.  Implement by
  starting another process. (according to GNOME guidelines).  If
  implemented, append "clear" command to the editors. 
- menues:  underline titles with "&". 
- should "Open" open the document in a new window?
- Should "Settings" or "Preferences" be used?  Probably "Preferences"
  only for persistent settings.  "Preferences" shouldn't have "...". 
- Put the "Preferences" command in "Edit" when necessary. 
- rename "persistent" to "preferences". 
- game_info:  save the date as 3 integers.
- game_info_editor:  Maybe use gtk_calendar (?)
- position_editor:  use pushed-down buttons instead of radio
  choosers. 
- implement STATUS_BAR by placing several GtkStatusBar in a an
  H_PACKER. 
- frame:  implement & use frame widget that don't display the frame,
  but display the title. 
- board:  pressing ESC should stop dragging. 
- export game to text:
   . replace PGN tags with a readable header.
   . Use local notation.
   . Don't put comments in braces.
- export game to HTML. 
- Replace the different Persistent <Notation> in game_editor,
  position_editor and ics_window by a static object in the new module
  PERSISTENT_NOTATION. 
- fix names "t" and "u" in CONTAINING. 
- rename GTK_COLOR_CHOOSER to COLOR_CHOOSER.
- board_settings_editor:  provide several predefined themes. 
- game_editor:  merge variation list and legal move list. 
- notation:  customize sign for promotion. 
- Use an image library instead of libPNG. Probably gdk-pixbuf (imlib
  is deprecated) 
- Icons in windows. 
- button_bar: use Gnome implementation. 
- choice_editor, inform_window:  use TEXT_WIDGET instead of
  MULTI_EDIT.  
- Use mmap/dump to save images.
- Mouse grabs (bug when releasing a piece in the same window but not
  over the board. 
- paint buffering?
- transient windows shouldn't have a task list item. (test also with
  KDE). 
- Use Gnome's about window. 
- text_widget:  should it have a style?  Implement Set_Style() or
  remove style-related functions.  Don't know how to do this in
  GTK+-1.2.  Try using GTK2/Gnome.
- Use Text_Widget::style in player name labels in ics window. 
- GTK:  images in tool bar. (use Gnomeui lib)
- ics:  keep track of game. 
- ICS_WINDOW:  game move list.
- ICS_WINDOW:  save game.
- generate_legal:  set size of vector once at the beginning. 
- "class Managed <Type>" for widgets, and make all widgets open/close
  in the ctor/dtor. 
- widget:  open():  don'r call gtk_widget_show(), use show_all() in
  GUI_Main. 
- multi_list_box:  implement the freeze/thaw thing like in
  multi_edit. 
- pgn output:  remove newlines from comments. 
- hash_table:  use GTK's hash function and string comparison
  function. 
- String:  deprecate Constant():  Make the pointer either a pointer on
  Head, or a normal C string.  The C string must never be "".  In
  Head, put DUMMY to the front and always set it to zero.  Check
  whether the pointer is to CONST or HEAD by checking (CONST[0] ==
  '\0'). 
- deprecate deref().
- catch signals SIGABORT, SIGSEGV, SIGILL, SIGBUS, SIGFPE... and make
  the handler call pause(). 
- make building menues faster. don't rebuild the menues.  
- convert menues to persistent.
- game_info_editor:  use a combo box for the game output selection.  
- dialog_window:  put spacing around content. 
- editor windows:  clicking "cancel" should restore old settings. 
- evaluator_settings_editor:  disable time INT_EDIT when the radio
  chooser is on "infinite". 
- game_editor:menu:view:  put both preferences commands one after the
  other. 
- displays < 32bit?
- replace Trl() with gettext(). 
- widget:  `gtk_window' should be of type `Dynamic <Window>' and not
  `Window'.  
- ics_window:  show FORMAT_LAST_MOVE() in status bar.  Need to know
  the move number and side to move. 
- ics_window:  filter out all messages, only show own messages. 
- Use fopen64() if present. define -DLARGEFILE or so. 
- ics_window:  seek dialog. 
- ics_window:  hide processed messages (eg board)
- ics_clock:  make better, with gray circle, full hour ticks etc,... 
- ics_window:  use a char matrix in interaction_window. 
- ics_window:  remove msg_input. 
	- write a check whether malloc(0) returns NULL, and use in MEM.
	- same for realloc(*, 0). 
	- Use Gnome's ABOUT dialog and remove GUI_ABOUT. 
	- chess_evaluator:  "score X" : pass only the integer, not
formatted.
	- CHESS_EVALUATOR:  don't use GENERATOR because it generates
move names.  (or create MOVE_NAME_GENERATOR). 
	- data:  don't catch exceptions.  There's an "exception table"
generated on Solaris?
	- string: make Free() inline. 
	- document_editor:  put most of it on .cc file. 
	- vector:  put some of the code in .cc file. 
	- rename ARG_GET_HELP to ARG_HELP. 
	- replace ARG_GET_HELP with extern const char *.
	- Idea:  implement "add-on" module eg:  src/string:parse.hh in
the following modules:  string, parser, stream, date, time, move.   (or move
into own module) 
	- write testing program that compiles and executes all test
programs. 
	- board_settings:  new option to not show last move.  Show
last move by default.
        - evaluator_widget:  remove the captions for obvious info, put
several things in one line. 
	- game_editor:  new mode:  always analyze. 
	- evaluator_widget:  try to use Gnome's web browser turning
thing. 
        - game_editor: when board is turned, and "set up position" is
clicked, POSITION_EDITOR should show the board turned also. 
	- display scores as "0.07" instead of "7". 
	- game_editor:  allow to take back a move by taking back the
rook submove. 
        - ics:  configure to use other program than "telnet".
	- ics:  provide list of servers. 
	- board:  save image of board to file. 
        - Add new compilation mode like release but with -Winline.
The goal is to test that all functions defined in header files are
really inlined. 
	- Add compiler mode profiling optimized versions.  Don't use
"-s".  Use it to profile optimized versions (without inline functions) 
	- Profile CHESS_EVALUATOR and GUI_GAME in optimize mode. 
	- Replace Exit() with exit(). 
	- consider using C++ libraries:  string, vector, io, ...
	- ics_editor:  remove msg_input. 
	- rename the `macro' directory `config'. 
	- game_editor:  option not to make "ding". (or use Gnome sound
system) 
	- board:  new option:  recenter pointer on piece when
beginning dragging.  Decide whether disabled or enabled by default. 
	- game_editor:  when playing a move when there is already a
next move, ask the user what to do.  Provide an option to always add
the move as a variation (or new main variation). 
        - append a String argument to MR_Receive().  Pipe standard
input to MR_Receive of the main window. 
        - rename `sh/print_%' to `sh/write_%'. 
- bug:  game_editor:  when opening a game with "Load...", the player
names are not displayed above the move list. 
- bug:  cannot open PGN files whose name doesn't end in `.pgn'. fix:
remove file name suffix recognition. 
- bug:  game_editor:  play some moves, open a PGN file.  Go around the
file but don't change anything.  Load another file.  Dialog "save?"
pops up but should not. 
- bug:  game_editor:  load several PGN files in a row:  the name that
is written on the title bar is always one file too late. 
- game_editor:  Busy in evaluator_widget should be visible if the side
bar is hidden.  (and also when only the evaluator_widget is hidden). 
- ics_window:  error messages from GTK when using the View menu. 
- reformulate dialog window buttons as verbs. (close, save, etc...)  
- multiline edit widget:  remove bug where " " is appended.  Don't use
it in message window in ICS program. 
- New option in notation:  show double chess with "++".
- sh/build-rpm:  generalize RPM-building process to more than just
i586. 


Version 16
==========

- Allow XBoard engines. 
- game_archive_editor:  display games sorted by different criteria.
- game_archive_editor:  sort games according to the collating sequence
  described in the PGN docs. 
- Support more ICS features.
- Use GConf. (?)
- use another color for the stock pieces. 



Version 17
==========

- Make searches in the archive editor. 
- Read opening books.
- Game editor:  replace game move list with text display.  
- game archive editor:  display statistics. 

- Use chess font in notation
  . part of unicode?	
- Make CHESS_EVALUATOR write the main variation.
- EVALUATOR_WIDGET:  Use the main variation. 

Version 18
==========

- Read endgame books.
- Parallel chess engine. 
- export/import to/from different database formats. 
- EPD (?):  yet another chess standard. 


Ideas
=====

- Make memory allocation errors fatal. 
  . advantages: - make everything faster.
                - make code smaller.
  . drawbacks: - fail badly on ENOMEM. 
- Display mate as best move when found on the board.  
  . too much info on the board.
- Allow generic evaluators.
  . not intended to become a portable standard.
- Highlight next move, evaluator best move, and possible legal moves
  on board. 
  . too much clutter.
- Game editor:  When a non-legal pseudo-legal move is played on the
  board multiple times in a row, display the reason why it's not
  legal. 
  . popup windows are annoying.
- notation:  optimize string-building by using auto-char-buffer. 
  . to complicated for little advantage. 
- What is the correct abbreviation for keys?  "C-f" or "Ctrl+f". 
