~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO file for Scid
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This file contains ideas for future improvements to Scid. Some are mine,
some were provided by users. Some are specific features, some are just
vague ideas which need a lot of refinement. Feedback is very welcome!

Note: "***" = highest priority, "*" = lowest priority.

Shane Hudson (shane@cosc.canterbury.ac.nz)
Last updated: November 2001.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MOVE ENTRY

*** Make suggested moves smarter for faster mouse move entry. Ideas:
      (a) add a fast small fixed-depth search to evaluate each move.
      (b) use the ECO file, preferring later codes (e.g. B58 over B57).
      (c) add a static exchange evaluator to evaluate captures so silly
          moves that clearly throw away material are not suggested.

**  Add undo/redo buttons, for when a user accidentally wipes out
    lots of moves or analysis by replacing a move.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GAME LIST WINDOW

**  If a game has no result ("*") and has an evaluation NAG after the
    final move (e.g. "+-" or "=+"), show that in the Result column
    instead of just "*". Note that this would require the NAG value to
    be stored in the index file, to avoid loading and decoding the game.

**  Allow multiple-game selection in the game list somehow, so a range of
    games can be deleted at once.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ANALYSIS AND CHESS ENGINES

*** Add ability to add the current analysis as a variation, not just as
    a comment.
    [ DONE FOR 3.0 ]

*   A lot of people seem to want the ability to play against a chess
    engine for training. Need to think about what features (e.g. time
    controls) would be required, and how it would complicate interaction
    with the chess engine.

*   Ability to have two (or even more) analysis windows open at once,
    to compare different chess engines.
    [ DONE FOR 2.5 ]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HELP PAGES

**  Help pages in other languages? Depends on volunteers to translate.

**  A help page (or separate printable file) listing key shortcuts.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TREE WINDOW

**  Add a "best games list" window from the tree window, showing the
    highest-rated games currently in the tree.
    [ DONE FOR 3.0 ]

**  Add a "next move" field to the game list window, which shows the next
    move of a game whenever a tree search has just been done (it will be
    empty after other searches). Also, the Sort function could allow this
    field as a sorting criteria whenever the tree window is open, so
    games can be sorted by their next move from the stem position.

**  It would be great to make the tree switch to a different opened
    database instead of the current database, so you could use one
    base but see the tree results of a reference database.
    [ DONE FOR 2.6 ]

*   Improve tree window to use proportional font. Could also use colors.
    Should still retain old format so the tree contents can be saved to
    a plain text file.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BOARD, MATERIAL, PATTERN SEARCHING

**  Current Board searches: add an "Ignore colors" option to also search
    for the current board flipped with colors reversed.
    [ DONE FOR 2.7 ]

**  Have a "symmetry" flag in material/pattern searches, so a search for
    a passed a-pawn also automatically finds a passed h-pawn, for example.

**  Ability to search in variations for material/pattern searches; this
    is currently only available for board searches.

**  Add to material search: a range of allowed difference between sum of
    material each side has, e.g. "+3" to "+99" would mean White is up by
    more than the exchange, or a whole minor piece or more.
    [ DONE FOR 3.2 ]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OTHER SEARCHING

*** Add ability to search the PGN representation of each game for text.
    [ DONE FOR 3.0 ]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VARIATIONS AND COMMENTS

*** Functions to strip all comments, and all variations, from a game.
    [ DONE FOR 3.0 ]

**  Add game navigation buttons to the comment editor.

**  Merge another game into the current game. For now, should only merge
    the game moves (no variations, but maybe allow NAG symbols) and only
    as a variation of the main line, rather than finding a deeper starting
    point in the existing variations of the current game.
    [ DONE FOR 3.2 ]

*   (Once merging another game into current game is done:) Hunt for games
    that contain current position, and add them as variations. Maybe only
    those since a certain year, and with both players over a certain
    rating, and to a limited number of moves. Also need to limit number
    of games to be added for practicality.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OPENING PREPARATION

*** Allow several repertoire editor windows to be open at the same time.

**  Opening report: add ability to specify excluded lines, e.g. a report
    for 1.d4 d5 2.c4 dxc4 3.e4 excluding 3...Nf6.
    [ DONE FOR 3.1 ]

**  When preparing to meet a particular player as white or black, it is
    useful to search for games by that player of the appropriate color,
    then copy the filter of found games to the clipboard, then switch
    to the clipboard to generate an opening report or browse the tree
    window, to see what opening lines the player uses. A single "Player
    Preparation" search that does all this in one step would help.

**  Find novelty: finds first position in the current game that occurs
    in no other games in the selected database.
    [ DONE FOR 2.7 ]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IMPORTING AND EXPORTING

*** Add "One line per move" export format option, for printing one move
    per side on each line (for game moves, not variations) as used in
    many chess books.
    [ DONE FOR 2.7 ]

**  Ability to sort exported games by the next move from the current
    position, when all the filter games match the current position (that
    is, when an exact board or tree search has just been done). Since the
    Opening Report sorts games by the next move anyway, a menu command in
    the Opening Report window to export the report games in this order
    (or to copy them to the clipboard in that order) would be useful.

**  Scid can already open Gzip-compressed PGN files; extend it to
    read a Zip file containing PGN files. This would be useful for
    the Zipped PGN files from the TWIC website.

**  Use the libbzip2 library so Scid can open BZip2-compressed PGN files.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CROSSTABLE

**  Add Sonneborn-Berger tie-breaking for All-play-all tournaments
    and Bucholz tie-breaking for Swiss tournaments, with an option
    to also show the tiebreak points in an extra column.
    [ DONE FOR 2.7 ]

**  Make the Crosstable window aware of matches (when there are only two
    players), and produce better output for them than it does at present.
    [ DONE FOR 3.1 ]

**  Crosstable can be saved in text or HTML format. Add LaTeX format.
    [ DONE FOR 2.6 ]

**  Add "Age" column, computing player ages at the start of the
    tournament from data in the spelling file.
    [ DONE FOR 2.7 ]

**  Add a window listing all tournaments in the database, or just those
    which meet certain criteria (date, average Elo rating, etc).
    [ DONE FOR 2.7 ]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INSTALLATION

**  Allow the user to specify in the Makefile (or configure script)
    whether to use the zlib code that comes with Scid, or just link
    in the zlib library if it is already installed and available.
    [ DONE FOR 2.5 ]

**  Upgrade the tablebase code in src/egtb, so it can use 6-men
    (3-vs-3 pawnless) tablebases for those who have them.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MISCELLANEOUS

*** Maintenance: add a multi-maintenance command with a dialog box
    for selecting which commands to do (spellcheck without checking
    the results, find twins with current settings, ECO-classify games,
    compact name file, compact game file) so Scid can clean up a
    database with no user interaction required.
    [ DONE FOR 2.6 ]

**  For opening databases: a "File Finder" for opening files that
    shows the number of games in each Scid database or PGN file, number
    of positions in each EPD file, and number of lines in each Repertoire
    file, and can find files in all subdirectories of the current
    directory.
    [ DONE FOR 2.7 ]

**  Quiz or training mode, for use with a database containing games
    starting at test positions. Should keep a score of the number of
    solved games, and maybe impose a time limit for each game. It
    could also work with an EPD file instead of a database or PGN file.

**  Some of the saved options should be automatically saved every time
    the user exits Scid: window sizes, directories, etc. Others should
    still only be saved when the user invokes "Save Options", which is
    the current behaviour.

**  Each database should have a user-settable default rating type, which
    is shown in the Save Game dialog box.

**  User-settable flags for each game: Opening (white); Opening (black);
    Middlegame; Endgame; Pawn structure; User-defined. Currently only one
    generic "mark" flag is available, which has no significance to Scid,
    only to the user.
    [ DONE (12 user-settable flags) FOR 3.0 ]

*   Multi-file search in scidt:  scidt -F<file.sso> -o<targetBase> bases...
    Searches multiple bases using the specified SearchOptions file, storing
    all matching games in the target base (creating if it does not exist).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
