#!/bin/sh

# Scid (Shane's Chess Information Database)
#
# Copyright (C) 1999-2004  Shane Hudson. All rights reserved.
#
# This is freely redistributable software; see the file named "COPYING"
# or "copying.txt" that came with this program.
#

# Scid's current version is an enhanced version of the original Scid, the author of which is
# Shane Hudson. His email is sgh@users.sourceforge.net
# To contact the current maintainer of Scid, email to the Scid users
# list at scid-users@lists.sourceforge.net

#
# The following few comments are only for Unix versions of Scid:
#

# The "\" at the end of the comment line below is necessary! It means
#   that the "exec" line is a comment to Tcl/Tk, but not to /bin/sh.
# The next line restarts using tkscid: \
exec `dirname $0`/tkscid "$0" "$@"
# exec tkscid "$0" "$@"

# The above launches tkscid from the same directory that this startup
# script was launched from (which feels as a suitable default scenario).
# Alternatively, you can change the top line of this startup script
# to start tkscid directly from a specific location, e.g.:

# For the above to work, tkscid must be in a directory in your PATH.
# Alternatively, you can set the first line to start tkscid directly
# by specifying the full name of tkscid, eg:
# #!/home/myname/bin/tkscid

############################################################

# Alter the version if any patches have been made to the Tcl code only:
set scidVersion "4.5.1"
set scidVersionDate "May 2013"

package require Tcl 8.5
package require Tk  8.5
package require Ttk

# Determine operating system platform: unix, windows or macos
#
set windowsOS 0
if {$tcl_platform(platform) == "windows"} { set windowsOS 1 }
set unixOS 0
if {$tcl_platform(platform) == "unix"} { set unixOS 1 }
set macOS 0
if {![catch {tk windowingsystem} wsystem] && $wsystem == "aqua"} { set macOS 1 }

# A lot of code assumes tcl_platform is either windows or unix, so
# lotsa stuff may break if this is not the case.
#
if {(! $windowsOS)  &&  (! $unixOS)} {
  # What to do here? Warn the user...?
}


# Check that on Unix, the version of tkscid matches the version of this
# script or on Windows, that the scid.exe and scid.gui versions are identical.
#
if {[string compare [sc_info version] $scidVersion]} {
  wm withdraw .
  if {$windowsOS} {
    set msg "This is Scid version [sc_info version], but the scid.gui data\n"
    append msg "file has the version number $scidVersion.\n"
  } else {
    set msg "This program,\n\"$argv0\",\nis version $scidVersion,\nbut the "
    append msg "tkscid program \nit uses is version [sc_info version].\n"
    append msg "Check that the path to tkscid is correct."
  }
  tk_messageBox -type ok -icon error -title "Scid: Version Error" -message $msg
  exit 1
}

#############################################################
#
# NAMESPACES
#
# The main Tcl/Tk namespaces used in the Scid application are
# initialized here, so that default values can be set up and
# altered when the user options file is loaded.
#
foreach ns {
  ::splash
  ::utils
  ::utils::date ::utils::font ::utils::history ::utils::pane ::utils::string
  ::utils::sound ::utils::validate ::utils::win
  ::file
  ::file::finder ::file::maint ::maint
  ::bookmarks
  ::edit
  ::game
  ::gbrowser
  ::search
  ::search::filter ::search::board ::search::header ::search::material
  ::windows
  ::windows::gamelist ::windows::stats ::tree ::tree::mask ::windows::tree
  ::windows::switcher ::windows::eco ::crosstab ::pgn ::book
  ::tools
  ::tools::analysis ::tools::email
  ::tools::graphs
  ::tools::graphs::filter ::tools::graphs::absfilter ::tools::graphs::rating ::tools::graphs::score
  ::tb ::optable
  ::board ::move
  ::tacgame ::sergame ::opening ::tactics ::calvar ::uci ::fics ::reviewgame ::novag
  ::config ::docking
  ::pinfo
  ::commenteditor
} {
  namespace eval $ns {}
}

proc ::splash::add {text} {
#TODO: decide if it's better to remove all the spash messages or to write them to a start.log file
}

# moveOldConfigFiles
#   Moves configuration files from the old (3.4 and earlier) names
#   to the new file names used since Scid 3.5.
#
proc moveOldConfigFiles {} {
  global scidUserDir scidConfigDir

  # Since the options file used to be ".scid", rename it:
  if {[file isfile $scidUserDir]} {
    file rename -force $scidUserDir "$scidUserDir.old"
  }

  # Rename old "~/.scid_sent_emails" if necessary:
  if {[file isfile [file nativename "~/.scid_sent_emails"]]} {
    catch {file rename [file nativename "~/.scid_sent_emails"] $email(logfile)}
  }

  foreach {oldname newname} {
    scidrc options.dat
    scid.opt options.dat
    scid.bkm bookmarks.dat
    scid.rfl recentfiles.dat
    engines.lis engines.dat
  } {
    set oldpath [file nativename [file join $scidUserDir $oldname]]
    set newpath [file nativename [file join $scidConfigDir $newname]]
    if {[file readable $oldpath]  &&  ![file readable $newpath]} {
      if {[catch {file rename $oldpath $newpath} err]} {
        ::splash::add "Error moving $oldpath to $newpath: $err"
      } else {
        ::splash::add "Moved old config file $oldname to $newpath"
      }
    }
  }
}

proc InitDirs {} {
  global scidExeDir scidUserDir scidConfigDir scidDataDir scidLogDir scidShareDir scidImgDir
  global scidBooksDir scidBasesDir ecoFile

  # scidExeDir: contains the directory of the Scid executable program.
  # Used to determine the location of various relative data directories.
  set scidExecutable [info nameofexecutable]
  if {[file type $scidExecutable] == "link"} {
    set scidExeDir [file dirname [file readlink $scidExecutable]]
    if {[file pathtype $scidExeDir] == "relative"} {
      set scidExeDir [file dirname [file join [file dirname $scidExecutable]\
        [file readlink $scidExecutable]]]
    }
  } else {
    set scidExeDir [file dirname $scidExecutable]
 }

  # scidUserDir: location of user-specific Scid files.
  # This is "~/.scid" on Unix, and the Scid exectuable dir on Windows.
  if {$::windowsOS} {
    set scidUserDir $scidExeDir
  } else {
    set scidUserDir [file nativename "~/.scid"]
  }

  # scidConfigDir, scidDataDir, scidLogDir:
  #   Location of Scid configuration, data and log files.
  set scidConfigDir [file nativename [file join $scidUserDir "config"]]
  set scidDataDir [file nativename [file join $scidUserDir "data"]]
  set scidLogDir [file nativename [file join $scidUserDir "log"]]

  # scidShareDir, scidImgDir, scidBooksDir, scidBasesDir, ecoFile:
  # Location of Scid resources
  set scidShareDir [file normalize [file join $scidExeDir "../share/scid"]]
  if {! [file isdirectory $::scidShareDir]} {
    set scidShareDir $::scidExeDir
  }
  set scidImgDir [file nativename [file join $scidShareDir "img"]]
  if {! [file isdirectory $scidImgDir]} {
    set scidImgDir [file join $scidExeDir "../img"]
  }
  #Default values, can be overwritten by file option
  set scidBooksDir [file nativename [file join $scidShareDir "books"]]
  set scidBasesDir [file nativename [file join $scidShareDir "bases"]]
  set ecoFile [file nativename [file join $scidShareDir "scid.eco"]]

  moveOldConfigFiles

  # Create the config, data and log directories if they do not exist:
  proc makeScidDir {dir} {
    if {! [file isdirectory $dir]} {
      file mkdir $dir
    }
  }
  makeScidDir $scidUserDir
  makeScidDir $scidConfigDir
  makeScidDir $scidDataDir
  makeScidDir $scidLogDir
}

# Toolbar configuration:
proc InitToolbar {} {
  global toolbar
  foreach {tbicon status}  {
    new 1 open 1 save 1 close 1
    finder 1 bkm 1 gprev 1 gnext 1
    cut 0 copy 0 paste 0
    rfilter 1 bsearch 1 hsearch 1 msearch 1
    switcher 1 glist 1 pgn 1 tmt 1 maint 1 eco 1 tree 1 crosst 1 engine 1
  } {
    set toolbar($tbicon) $status
  }
}

proc InitWinsDefaultGeometry {} {
  global winX winY winWidth winHeight
  global winX_docked winY_docked winWidth_docked winHeight_docked

  # Default window locations:
  foreach i {. .pgnWin .helpWin .crosstabWin .treeWin .commentWin .glist
    .playerInfoWin .baseWin .treeBest .treeGraph .tourney .finder
    .ecograph .statsWin .glistWin .maintWin .nedit} {
    set winX($i) -1
    set winY($i) -1
  }

  for {set b 1} {$b <= [sc_base count total]} {incr b} {
    foreach i { .treeWin .treeBest .treeGraph } {
        set winX($i$b) -1
        set winY($i$b) -1
    }
  }

  # Default window size:
  set winWidth(.) 1024
  set winHeight(.) 570

  # Default PGN window size:
  set winWidth(.pgnWin)  65
  set winHeight(.pgnWin) 20

  # Default help window size:
  set winWidth(.helpWin)  50
  set winHeight(.helpWin) 32

  # Default stats window size:
  set winWidth(.statsWin) 60
  set winHeight(.statsWin) 13

  # Default crosstable window size:
  set winWidth(.crosstabWin)  65
  set winHeight(.crosstabWin) 15

  # Default tree window size:
  set winWidth(.treeWin)  58
  set winHeight(.treeWin) 20

  # Default comment editor size:
  set winWidth(.commentWin)  40
  set winHeight(.commentWin)  6

  # Default spellcheck results window size:
  set winWidth(.spellcheckWin)  55
  set winHeight(.spellcheckWin) 25

  # Default player info window size:
  set winWidth(.playerInfoWin)  45
  set winHeight(.playerInfoWin) 20

  # Default switcher window size:
  set winWidth(.baseWin) 310
  set winHeight(.baseWin) 110

  # Default Correspondence Chess window size:
  set winWidth(.ccWindow) 10
  set winHeight(.ccWindow) 20

  # Default size for input engine console:
  ###---### needs adjustment!
  set winWidth(.inputengineconsole) 10
  set winHeight(.inputengineconsole) 20

  # In docked mode, use same default geometry values
  foreach elt {winX winY winWidth winHeight} {
    foreach name [array names $elt] {
      set ${elt}_docked($name) [set ${elt}($name)]
    }
  }

  # List of saved layouts : 3 slots available
  set ::docking::layout_list(1) {{MainWindowGeometry 1024x542+0+26 zoomed} {{.pw vertical {}} {TPanedwindow {{.pw.pw0 horizontal {}} {TPanedwindow {{.pw.pw0.pw2 vertical 373} {TPanedwindow {{.pw.pw0.pw2.pw6 horizontal 413} {TNotebook .nb .fdockmain} {TPanedwindow {{.pw.pw0.pw2.pw6.pw8 vertical 202} {TNotebook .tb7 .fdockpgnWin} {TNotebook .tb9 .fdockanalysisWin1}}}}} {TPanedwindow {{.pw.pw0.pw2.pw4 horizontal {}} {TNotebook .tb3 .fdockglistWin}}}}}}}}}
  set ::docking::layout_list(2) {{.pw vertical} {TPanedwindow {{.pw.pw0 horizontal} {TNotebook .nb .fdockmain} {TNotebook .tb1 .fdockpgnWin}}}}
  set ::docking::layout_list(3) {}

}

proc InitStats {} {
  # Default stats window lines:
  array set ::windows::stats::display {
    r2600 1
    r2500 1
    r2400 1
    r2300 1
    r2200 0
    r2100 0
    r2000 0
    y1900 0
    y1950 0
    y1960 0
    y1970 0
    y1980 0
    y1990 0
    y1995 0
    y2000 1
    y2002 1
    y2004 1
    y2006 1
    y2007 1
    y2008 1
  }

  # Enable stats for subsequent years
  for { set year [clock format [clock seconds] -format {%Y}] } \
    { $year>2008 && ![info exists ::windows::stats::display([subst {y$year}])] } \
    { incr year -1 } {
    set ::windows::stats::display([subst {y$year}]) 1
  }
}

InitDirs
InitWinsDefaultGeometry
InitToolbar
InitStats



set ::tacgame::threshold 0.9
set ::tacgame::blunderwarning false
set ::tacgame::blunderwarningvalue 0.0
set ::tacgame::levelMin 1200
set ::tacgame::levelMax 2200
set ::tacgame::levelFixed 1500
set ::tacgame::randomLevel 0
set ::tacgame::isLimitedAnalysisTime 1
set ::tacgame::showblunder 1
set ::tacgame::showblundervalue 1
set ::tacgame::showblunderfound 1
set ::tacgame::showmovevalue 1
set ::tacgame::showevaluation 1
set ::tacgame::isLimitedAnalysisTime 1
set ::tacgame::analysisTime 10
set ::tacgame::openingType new
set ::tacgame::chosenOpening 0

set comp(timecontrol) pergame
set comp(seconds) 180
set comp(minutes) 1
set comp(incr) 0
set comp(timeout) 0 ;# disabled by default
set comp(name) "Engine tournament"
set comp(rounds) 2
set comp(showclock) 0
set comp(debug) 1 ; # print info to console
set comp(animate) 1
set comp(firstonly) 0
set comp(ponder) 0
set comp(usebook) 0
set comp(book) {}


### Tree/mask options:
set ::tree::mask::recentMask {}


# boardSizes: a list of the available board sizes.
set boardSizes [list 25 30 35 40 45 50 55 60 65 70 80]
set boardSizesOLD [list 21 25 29 33 37 40 45 49 54 58 64 72]

#load textures for lite and dark squares
set boardfile_dark "emptySquare"
set boardfile_lite "emptySquare"

#[file join $scidExeDir "bitmaps" "empty.gif"] ;# wsquare.gif

# boardSize: Default board size. See the available board sizes above.
set boardSize 40

# boardStyle: Default board piece set.
set boardStyle Merida1

# language for help pages and messages:
set language E
set oldLang X

# boardCoords: 1 to show board Coordinates, 0 to hide them.
set boardCoords 0

# boardSTM: 1 to show side-to-move icon, 0 to hide it.
set boardSTM 1

# Default values for fonts:
proc createFont {name} {
  set opts $::fontOptions($name)
  font create font_$name \
      -family [lindex $opts 0] -size [lindex $opts 1] \
      -weight [lindex $opts 2] -slant [lindex $opts 3]
}

proc configureFont {name} {
  set opts $::fontOptions($name)
  font configure font_$name \
      -family [lindex $opts 0] -size [lindex $opts 1] \
      -weight [lindex $opts 2] -slant [lindex $opts 3]
}

if {$windowsOS} {
  set fontOptions(Regular) [list system          10 normal roman]
  set fontOptions(Menu)    [list system           9 normal roman]
  set fontOptions(Small)   [list system           9 normal roman]
  set fontOptions(Tiny)    [list system           8 normal roman]
  set fontOptions(Fixed)   [list courier          9 normal roman]
} elseif {$macOS} {
  set fontOptions(Regular) [list system    11 normal roman]
  set fontOptions(Menu)    [list menu      14 normal roman]
  set fontOptions(Small)   [list system    10 normal roman]
  set fontOptions(Tiny)    [list system     9 normal roman]
  set fontOptions(Fixed)   [list Monaco    10 normal roman]
} else {
  set fontOptions(Regular) [list {DejaVu Sans}       10 normal roman]
  set fontOptions(Menu)    [list {DejaVu Sans}       10 normal roman]
  set fontOptions(Small)   [list {DejaVu Sans}        9 normal roman]
  set fontOptions(Tiny)    [list {DejaVu Sans}        8 normal roman]
  set fontOptions(Fixed)   [list {DejaVu Sans Mono}  10 normal roman]
}

createFont Regular
createFont Menu
createFont Small
createFont Tiny
createFont Fixed

### TODO
### Sample for figurine fonts see also htext.tcl
### Not yet working properly
### font create font_Figurine_ML  -family {FigurineSymbol T1} -size 10
### font create font_Figurine_Var -family {FigurineSymbol T1} -size 6


# Analysis command: to start chess analysis engine.
set analysisCommand ""
if {$windowsOS} {
  set analysisChoices {wcrafty.exe}
} else {
  set analysisChoices {crafty}
}

# Colors: dark and lite are square colors
#     whitecolor/blackcolor are piece colors
#     highcolor is the color when something is selected.
#     bestcolor is used to indicate a suggested move square.
# set dark        "\#70a070"
# set lite        "\#e0d070"
set lite "\#f3f3f3"
set dark "\#7389b6"
set whitecolor  "\#ffffff"
set blackcolor  "\#000000"
set whiteborder "\#000000"
set blackborder "\#ffffff"
set highcolor   "\#b0d0e0"
set bestcolor   "\#bebebe"
set buttoncolor "\#b0c0d0"
set borderwidth 0

set ::tactics::analysisTime 3
set ::tactics::findBestMoveRunning 0
array set ::tactics::findBestMove_History {}
    
# Defaults for the PGN window:
# if ::pgn::showColor is 1, the PGN text will be colorized.
set ::pgn::showColor 1
set ::pgn::indentVars 1
set ::pgn::indentComments 1
set ::pgn::symbolicNags 1
set ::pgn::moveNumberSpaces 0
set ::pgn::shortHeader 1
set ::pgn::boldMainLine 1
set ::pgn::columnFormat 0
set ::pgn::stripMarks 0
set pgnColor(Header) "\#00008b"
set pgnColor(Main) "\#000000"
set pgnColor(Var) "\#0000ee"
set pgnColor(Nag) "\#ee0000"
set pgnColor(Comment) "\#008b00"
set pgnColor(Current) lightSteelBlue
set pgnColor(Background) "\#ffffff"

# Defaults for FICS
set ::fics::use_timeseal 1
set ::fics::timeseal_exec "timeseal"
set ::fics::port_fics 5000
set ::fics::port_timeseal 5001
set ::fics::login ""
set ::fics::password ""
set ::fics::usedefaultvars 1
set ::fics::findopponent(initTime) 15
set ::fics::findopponent(incTime) 20
set ::fics::findopponent(rated) "rated"
set ::fics::findopponent(color) ""
set ::fics::findopponent(limitrating) 1
set ::fics::findopponent(rating1) 1500
set ::fics::findopponent(rating2) 3000
set ::fics::findopponent(manual) "auto"
set ::fics::findopponent(formula) ""
set ::fics::consolebg     black
set ::fics::consolefg     LimeGreen
set ::fics::consoleheight 10
set ::fics::consolewidth  40
set ::fics::colseeking     coral
set ::fics::colgame        grey70
set ::fics::colgameresult  SlateBlue1
set ::fics::colficspercent khaki1
set ::fics::colficshelpnext blue
set ::fics::server_ip "0.0.0.0"
set ::fics::premoveEnabled 1
set ::fics::playing 0

set ::commenteditor::showboard 1

# default resolvers for player info
set ::pinfo::wikipAPI      "http://de.wikipedia.org/w/api.php?action=query&format=xml"
# Appers PND resolver
set ::pinfo::wikipurl      "http://toolserver.org/~apper/pd/person/pnd-redirect"
# SeeAlso resolver for PND -> WikiPedia
set ::pinfo::SeeAlsoPND2WP "http://ws.gbv.de/seealso/pnd2wikipedia/?format=seealso&id="
# Deutsche NationalBibliothek
set ::pinfo::dnburl        "http://d-nb.info/gnd"
# all other ID resolvers come from [scidConfigFile resolvers]

# Defaults for Novag Citrine
set ::novag::referee "OFF"

# Defaults for serious game training
set ::sergame::isOpening 0
set ::sergame::chosenOpening 0
set ::sergame::chosenEngine 0
set ::sergame::useBook 1
set ::sergame::bookToUse ""
set ::sergame::startFromCurrent 0
set ::sergame::coachIsWatching 0
set ::sergame::timeMode "timebonus"
set ::sergame::depth 3
set ::sergame::movetime 0
set ::sergame::nodes 10000
set ::sergame::ponder 0
set ::uci::uciInfo(wtime3) [expr 5 * 60 * 1000 ]
set ::uci::uciInfo(winc3) [expr 10 * 1000 ]
set ::uci::uciInfo(btime3) [expr 5 * 60 * 1000 ]
set ::uci::uciInfo(binc3) [expr 10 * 1000 ]

# Defaults for initial directories:
set initialDir(base) "."
set initialDir(pgn) "."
set initialDir(book) "."
set initialDir(epd) "."
set initialDir(html) "."
set initialDir(tex)  "."
set initialDir(stm)  "."
set initialDir(report) "."
set initialDir(tablebase1) ""
set initialDir(tablebase2) ""
set initialDir(tablebase3) ""
set initialDir(tablebase4) ""

# glistSize: Number of games displayed in the game list window
set glistSize 15

# glexport: Format for saving Game List to text file.
set glexportDefault "g6: w13 W4  b13 B4  r3:m2 y4 s11 o4"
set glexport $glexportDefault

# glistSelectPly: The number of moves to display in a game list entry
# when that entry is selected with button-2 to shoe the first moves
# of a game. E.g., a value of 4 might give: "1.e4 e5 2.Nf3 Nc6".
set glistSelectPly 80


# Default PGN display options:
set pgnStyle(Tags) 1
set pgnStyle(Comments) 1
set pgnStyle(Vars) 1


# Default Tree sort method:
set tree(order) frequency

# Auto-save tree cache when closing tree window:
set tree(autoSave) 0

# Auto-save options when exiting:
set optionsAutoSave 1

#  Numeric locale: first char is decimal, second is thousands.
#  Example: ".," for "1,234.5" format; ",." for "1.234,5" format.
set locale(numeric) ".,"

# Ask for piece translations (first letter)
set translatePieces 1

# Hightlight the last move played
set arrowLastMove 0
set highlightLastMove 1
set highlightLastMoveWidth 2
set highlightLastMoveColor "grey"
set highlightLastMovePattern {} ; # this option is not saved

# Ask before replacing existing moves: on by default
set askToReplaceMoves 1

# Show suggested moves: on by default
set suggestMoves 1

# Show variations popup window
set showVarPopup 0
set showVarArrows 1

# Keyboard Move entry options:
set moveEntry(On) 1
set moveEntry(AutoExpand) 0
set moveEntry(Coord) 1

# Autoplay and animation delays in milliseconds:
set autoplayDelay 5000
set animateDelay 200

# Blunder Threshold
set blunderThreshold 1.0

# Geometry of windows:
array set geometry {}

# Default theme
set ::lookTheme "default"

# startup:
#   Stores which windows should be opened on startup.
set startup(pgn) 0
set startup(switcher) 0
set startup(tip) 1
set startup(tree) 0
set startup(finder) 0
set startup(crosstable) 0
set startup(gamelist) 0
set startup(stats) 0
set startup(book) 0

# myPlayerNames:
#   List of player name patterns for which the chessboard should be
#   flipped each time a game is loaded to show the board from that
#   players perspective.
#
set myPlayerNames {}


# Game information area options:
set gameInfo(photos) 1
set gameInfo(hideNextMove) 0
set gameInfo(showMaterial) 0
set gameInfo(showFEN) 0
set gameInfo(showMarks) 1
set gameInfo(wrap) 0
set gameInfo(fullComment) 0
set gameInfo(showTB) 0
if {[sc_info tb]} { set gameInfo(showTB) 2 }

# Twin deletion options:

array set twinSettings {
  players No
  colors  No
  event   No
  site    Yes
  round   Yes
  year    Yes
  month   Yes
  day     No
  result  No
  eco     No
  moves   Yes
  skipshort  Yes
  setfilter  Yes
  undelete   Yes
  comments   Yes
  variations Yes
  usefilter  No
  delete     Shorter
}
array set twinSettingsDefaults [array get twinSettings]

# Opening report options:
array set optable {
  Stats 1
  Oldest 5
  Newest 5
  Popular 1
  MostFrequent 6
  MostFrequentWhite 1
  MostFrequentBlack 1
  AvgPerf 1
  HighRating 8
  Results 1
  Shortest 5
  ShortestWhite 1
  ShortestBlack 1
  MoveOrders 8
  MovesFrom 1
  Themes 1
  Endgames 1
  MaxGames 500
  ExtraMoves 1
}
array set optableDefaults [array get optable]

# Player report options
array set preport {
  Stats 1
  Oldest 5
  Newest 5
  MostFrequentOpponents 6
  AvgPerf 1
  HighRating 8
  Results 1
  MostFrequentEcoCodes 6
  Themes 1
  Endgames 1
  MaxGames 500
  ExtraMoves 1
}
array set preportDefaults [array get preport]

# Analysis options (Informant values)
# The different threshold values for !? ?? += etc
array set informant {}
set informant("!?") 0.5
set informant("?") 1.5
set informant("??") 3.0
set informant("?!") 0.5
set informant("+=") 0.5
set informant("+/-") 1.5
set informant("+-") 3.0
set informant("++-") 5.5

# Export file options:
set exportFlags(comments) 1
set exportFlags(indentc) 0
set exportFlags(vars) 1
set exportFlags(indentv) 1
set exportFlags(column) 0
set exportFlags(append) 0
set exportFlags(symbols) 1
set exportFlags(htmldiag) 0
set exportFlags(stripMarks) 0
set exportFlags(convertNullMoves) 1
set default_exportStartFile(PGN) {}
set default_exportEndFile(PGN) {}

set default_exportStartFile(LaTeX) {\documentclass[10pt,twocolumn]{article}
  % This is a LaTeX file generated by Scid.
  % You must have the "chess12" package installed to typeset this file.
  
  \usepackage{times}
  \usepackage{a4wide}
  \usepackage{chess}
  \usepackage[T1]{fontenc}
  
  \setlength{\columnsep}{7mm}
  \setlength{\parindent}{0pt}
  
  % Macros for variations and diagrams:
  \newenvironment{variation}{\begin{quote}}{\end{quote}}
  \newenvironment{diagram}{\begin{nochess}}{$$\showboard$$\end{nochess}}
  
  \begin{document}
}
set default_exportEndFile(LaTeX) {\end{document}
}


set default_exportStartFile(HTML) {<html>
  <head><title>Scid export</title></head>
  <body bgcolor="#ffffff">
}
set default_exportEndFile(HTML) {</body>
  </html>
}

foreach type {PGN HTML LaTeX} {
  set exportStartFile($type) $default_exportStartFile($type)
  set exportEndFile($type) $default_exportEndFile($type)
}


# ::windows::switcher::vertical
#
#   If 1, Switcher frames are arranged vertically.
#
set ::windows::switcher::vertical 0
set ::windows::switcher::icons 1

# autoRaise: defines whether the "raise" command should be used to raise
# certain windows (like progress bars) when they become obscured.
# Some Unix window managers (e.g. some versions of Enlightenment and sawfish,
# so I have heard) have a bug where the Tcl/Tk "raise" command times out
# and takes a few seconds. Setting autoRaise to 0 will help avoid this.

set autoRaise 1

proc raiseWin {w} {
  global autoRaise
  if {$autoRaise} { raise $w }
  return
}

# autoIconify:
#   Specified whether Scid should iconify all other Scid windows when
#   the main window is iconified. Most people like this behaviour but
#   some window managers send an "UnMap" event when the user switches
#   to another virtual window without iconifying the Scid window so
#   users of such managers will probably want to turn this off.

set autoIconify 1

# windowsDock:
# if true, most of toplevel windows are dockable and embedded in a main window
# windows can be moves among tabs (drag and drop) or undocked (right-clicking on tab)
set windowsDock 1

# showGameInfo:
# The game info panel below the main board
set showGameInfo 0

# autoLoadLayout :
# Automatic loading of layout # 1 at startup (docked windows mode only)
set autoLoadLayout 1

# autoResizeBoard:
# resize the board to fit the container
set autoResizeBoard 1

################################################################################
# In docked mode, resize board automatically
################################################################################
proc resizeMainBoard {} {
  # puts "resizeMainBoard [clock clicks -milliseconds]"
  if { ! $::docking::USE_DOCKING } { return }
  
  bind .main <Configure> {}
  
  set w [winfo width .main]
  set h [winfo height .main]
  set bd .main.board
  
  # calculate available height
  set height_used 0
  incr height_used [ lindex [grid bbox .main 0 0] 3]
  incr height_used [ lindex [grid bbox .main 0 1] 3] ;# buttons
  # coordinates
  if { $::board::_coords($bd) == 2 || $::board::_coords($bd) == 0} {
    incr height_used [ lindex [ grid bbox $bd 0 9 ] 3 ]
  }
  if { $::board::_coords($bd) == 0 } {
    incr height_used [ lindex [ grid bbox $bd 0 0 ] 3 ]
  }

  # game info
  set min_game_info_height 6
  set game_info_line_height 6
  set min_game_info_lines 1
  if {$::showGameInfo} {
    set min_game_info_lines 6
    set game_info_lines [.main.gameInfo count -displaylines 1.0 end]
    if { $game_info_lines > 0 } {
      # probably not very correct, do you know any better way to get this information?
      set game_info_line_height [expr 1.0 * [.main.gameInfo count -ypixels 1.0 end] / $game_info_lines]
    } else {
      # utter approximation
      set game_info_line_height [expr [font configure font_Regular -size] * 1.5]
    }
    set min_game_info_height [expr int($min_game_info_lines * $game_info_line_height + 6)]
  }
  incr height_used $min_game_info_height
  
  # status bar
  incr height_used [ lindex [grid bbox .main 0 5] 3]
  
  set availh [expr $h - $height_used -10]
  
  # calculate available width
  set width_used 0
  if { $::board::_coords($bd) == 2 || $::board::_coords($bd) == 0} {
    incr width_used [ lindex [ grid bbox $bd 0 1 ] 2 ]
  }
  if { $::board::_coords($bd) == 0 } {
    incr width_used [ lindex [ grid bbox $bd 9 1 ] 2 ]
  }
  if {$::board::_stm($bd)} {
    incr width_used [ lindex [ grid bbox $bd 10 1 ] 2 ]
    incr width_used [ lindex [ grid bbox $bd 11 2 ] 2 ]
  }
  if {$::board::_showmat($bd)} {
    incr width_used [ lindex [ grid bbox $bd 12 1 ] 2 ]
  }
  set availw [expr $w - $width_used ]
  
  if {$availh < $availw} {
    set min $availh
  } else  {
    set min $availw
  }

  if { $::autoResizeBoard } {
    # find the closest available size
    for {set i 0} {$i < [llength $::boardSizes]} {incr i} {
      set newSize [lindex $::boardSizes $i]
      if { $newSize > [ expr $min / 8 ] } {
        if {$i > 0} {
          set newSize [lindex $::boardSizes [expr $i -1] ]
        }
        break
      }
    }
    # resize the board
    ::board::resize2 .main.board $newSize
    set ::boardSize $newSize
  }

  # adjust game info height
  set new_game_info_lines [expr int(($min_game_info_height+($availh-$::boardSize*8))/$game_info_line_height)]
  if { $new_game_info_lines > $min_game_info_lines } {
    set new_game_info_lines [expr $new_game_info_lines - 1]
  }
  .main.gameInfo configure -height $new_game_info_lines
  
  update idletasks
  bind .main <Configure> { ::docking::handleConfigureEvent ::resizeMainBoard }
}
################################################################################
# sets visibility of gameInfo panel at the bottom of main board
proc toggleGameInfo {} {
  if {$::showGameInfo} {
    grid .main.gameInfoFrame -row 3 -column 0 -sticky nsew
  } else  {
    grid forget .main.gameInfoFrame
  }
  updateGameInfo
  update idletasks
  resizeMainBoard
}
################################################################################

# Email configuration:
set email(logfile) [file join $scidLogDir "scidmail.log"]
set email(oldlogfile) [file join $scidUserDir "scidmail.log"]
set email(smtp) 1
set email(smproc) "/usr/lib/sendmail"
set email(server) localhost
set email(from) ""
set email(bcc) ""
# Rename old email log file if necessary:
if {[file readable $email(oldlogfile)]  &&  ![file readable $email(logfile)]} {
  catch {file rename $email(oldlogfile) $email(logfile)}
}


### Audio move announcement options:

set ::utils::sound::soundFolder "/usr/share/scid/sounds"
set ::utils::sound::announceNew 0
set ::utils::sound::announceForward 0
set ::utils::sound::announceBack 0

# Spell-checking file: default is "spelling.ssp".
if {$windowsOS} {
  set spellCheckFile [file join $scidDataDir "spelling.ssp"]
} else {
  set spellCheckFile "/usr/share/scid/data/spelling.ssp"
}

# book configuration
set ::book::lastBook "" ; # book name without extension (.bin)

# Engines list file: -- OLD NAMES, NO LONGER USED
#set engines(file) [file join $scidUserDir "engines.lis"]
#set engines(backup) [file join $scidUserDir "engines.bak"]

# Engines data:
set engines(list) {}
set engines(sort) Time
set engineCoach1 {}
set engineCoach2 {}


# Reversed mouse buttons in mac (::MB2 and ::MB3 are middle and right mouse buttons respectively.):
if { $macOS } {
  set ::MB2 3
  set ::MB3 2
} else {
  set ::MB2 2
  set ::MB3 3
}


# Opening files by drag & drop on Scid icon on Mac
if { $macOS } {
  # Drag & Drop
  set dndisbusy 0
  set isopenBaseready 0
  set dndargs 0
  
  proc dragndrop {args} {
    global dndisbusy
    global isopenBaseready
    global dndargs
    
    # Un-nest arguments:
    set args [join $args]
    
    # Wait for openBase to be ready, if needed.
    if {$isopenBaseready == 0} {
      if {$dndargs != 0} {
        tk_messageBox -type ok -icon info -title "Scid" -message \
            "Please, wait until Scid finish starting up."
        return
      } else {
        # Save file names for later use:
        set dndargs $args
      }
      return
    }
    
    # Are we busy opening files? if so, display message and do nothing
    if {$dndisbusy != 0} {
      tk_messageBox -type ok -icon info -title "Scid" -message \
          "Please, wait until the previou(s) database(s) are opened and try again."
      return
    }
    
    # Un-nest argumens again if Scid opened on drag & drop
    if {$isopenBaseready == 2} {
      # Un-nest arguments:
      set args [join $args]
      set isopenBaseready 1
    }
    
    set dndisbusy 1
    set errmsg ""
    foreach file $args {
      # Check for available slots:
      if {[sc_base count free] == 0} {
        tk_messageBox -type ok -icon info -title "Scid" \
            -message "Too many databases are open; close at least one \n\
            before opening more databases"
        #::splash::add "No slot available."
        return
      }
      # Email File:
      if {[file extension $file] == ".sem"} {
        #::tools::email
        continue
      }
      # SearchOptions file:
      if {[file extension $file] == ".sso"} {
        set ::fName $file
        if {[catch {uplevel "#0" {source $::fName}} errmsg]} {
          tk_messageBox -title "Scid: Error reading file" -type ok -icon warning \
              -message "Unable to open or read SearchOptions file: $file"
        } else {
          switch -- $::searchType {
            "Material" { ::search::material }
            "Header"   { ::search::header }
            default    { continue }
          }
        }
        continue
      }
      
      # Scid doesn't handle well .sg4 and .sn4 files.
      if {([file extension $file] == ".sg4") || \
            ([file extension $file] == ".sn4")} {
        set eName ".si4"
        set fName [file rootname $file]
        set file "$fName$eName"
      }
      # Scid doesn't handle well .sg3 and .sn3 files.
      if {([file extension $file] == ".sg3") || \
            ([file extension $file] == ".sn3")} {
        set eName ".si3"
        set fName [file rootname $file]
        set file "$fName$eName"
      }
      
      # Check if base is already opened
      if {[sc_base slot $file] != 0} {
        tk_messageBox -type ok -icon info -title "Scid" -message \
            "$file is already opened."
      } else  {
        # All seems good, let's open those files:
        catch {::file::Open $file} errmsg
      }
    }
    set dndisbusy 0
    set dndargs 0
  }
  proc tkOpenDocument {args} {
    after idle [list dragndrop $args]
  }
  rename tkOpenDocument ::tk::mac::OpenDocument
}



# scidConfigFile:
#   Returns the full path and name of a Scid configuration file,
#   given its configuration type.
#
proc scidConfigFile {type} {
  global scidConfigDir

  foreach {cfgtype fname} {
    options "options.dat"
    engines "engines.dat"
    engines.bak "engines.dat"
    recentfiles "recent.dat"
    history "history.dat"
    bookmarks "bookmarks.dat"
    reports "reports.dat"
    optrainer "optrainer.dat"
    resolvers "resolvers.dat"
    xfccstate "xfccstate.dat"
    correspondence "correspondence.dat"
    ExtHardware "hardware.dat"
    treecache "treecache.dat"
  } {
    if { $type == $cfgtype } {
      return [file nativename [file join $scidConfigDir $fname]]
    }
  }

  return -code error "No such config file type: $type"
}

set optionsFile [scidConfigFile options]

################################################################################
#  Load options file. All default values should be set before this point or new saved values will be overwritten by default ones
################################################################################
if {[catch {source $optionsFile} ]} {
  #::splash::add "Unable to find the options file: [file tail $optionsFile]"
} else {
  ::splash::add "Your options file \"[file tail $optionsFile]\" was found and loaded."
}

set ::docking::USE_DOCKING $windowsDock

# depending on the docking mode, change the definition of window "." (ie main window)
if {$::docking::USE_DOCKING} {
  set dot_w "."
} else  {
  set dot_w ".main"
}

# Now, if the options file was written by Scid 3.5 or older, it has a lot of
# yucky variable names in the global namespace. So convert them to the new
# namespace variables:
#
proc ConvertOldOptionVariables {} {
  
  set oldNewNames {
    switcherVertical ::windows::switcher::vertical
    doColorPgn ::pgn::showColor
    pgnIndentVars ::pgn::indentVars
    pgnIndentComments ::pgn::indentComments
    pgnShortHeader ::pgn::shortHeader
    pgnMoveFont ::pgn::boldMainLine
    pgnMoveNumSpace ::pgn::moveNumberSpaces
    pgnStripMarks ::pgn::stripMarks
    pgnSymbolicNags ::pgn::symbolicNags
    pgnColumn ::pgn::columnFormat
  }
  
  foreach {old new} $oldNewNames {
    if {[info exists ::$old]} {
      set $new [set ::$old]
    }
  }
}

ConvertOldOptionVariables


# Reconfigure fonts if necessary:
foreach i {Regular Menu Small Tiny Fixed} {
    configureFont $i
}

# Check board size is valid:
set newSize [lindex $boardSizes 0]
foreach sz $boardSizes {
  if {$boardSize >= $sz} { set newSize $sz }
}
set boardSize $newSize

# Load theme
ttk::style theme use $::lookTheme

# Use default font everywhere
ttk::style configure TLabel -font font_Regular
ttk::style configure TButton -font font_Regular
ttk::style configure TRadiobutton -font font_Regular
ttk::style configure TCheckbutton -font font_Regular
ttk::style configure TMenubutton -font font_Regular
ttk::style configure TCombobox -font font_Regular
ttk::style configure TEntry -font font_Regular

# Style definitions
ttk::style configure Bold.TCheckbutton -font font_Bold
ttk::style configure Small.TCheckbutton -font font_Small

ttk::style configure Small.TButton -font font_Small
ttk::style configure Bold.TButton -font font_Bold
ttk::style configure Pad0.Small.TButton -padding 0

ttk::style configure Small.TRadiobutton -font font_Small
ttk::style configure Regular.TRadiobutton -font font_Regular
ttk::style configure Bold.TRadiobutton -font font_Bold
ttk::style configure SmallBold.TRadiobutton -font font_SmallBold

ttk::style configure pad0.TMenubutton -padding 0 -indicatorwidth 0 -indicatorheight 0  -font font_Small

# Check for old (single-directory) tablebase option:
if {[info exists initialDir(tablebase)]} {
  set initialDir(tablebase1) $initialDir(tablebase)
}

# font_Regular is the default font for widgets:
option add *Font font_Regular

# Use font_Menu for menu entries:
option add *Menu*Font font_Menu
# option add *Menubutton*Font font_Menu

if {$unixOS} {
  option add Scrollbar*borderWidth 1
}

# Set the radiobutton and checkbutton background color if desired.
# I find the maroon color on Unix ugly!
if {$unixOS} {
  option add *Radiobutton*selectColor $buttoncolor
  option add *Checkbutton*selectColor $buttoncolor
  option add *Menu*selectColor $buttoncolor
}

set fontsize [font configure font_Regular -size]
set font [font configure font_Regular -family]

font create font_Bold -family $font -size $fontsize -weight bold
font create font_BoldItalic -family $font -size $fontsize -weight bold \
    -slant italic
font create font_Italic -family $font -size $fontsize -slant italic
font create font_H1 -family $font -size [expr {$fontsize + 8} ] -weight bold
font create font_H2 -family $font -size [expr {$fontsize + 6} ] -weight bold
font create font_H3 -family $font -size [expr {$fontsize + 4} ] -weight bold
font create font_H4 -family $font -size [expr {$fontsize + 2} ] -weight bold
font create font_H5 -family $font -size [expr {$fontsize + 0} ] -weight bold

set fontsize [font configure font_Small -size]
set font [font configure font_Small -family]
font create font_SmallBold -family $font -size $fontsize -weight bold
font create font_SmallItalic -family $font -size $fontsize -slant italic

# Start in the clipbase, if no database is loaded at startup.
sc_base switch clipbase

###
### End of file: start.tcl
# bitmaps.tcl:
# Chess piece bitmaps used by Scid.

# The piece images used here were generated from freeware chess
# fonts available in TrueType format at the En Passant website
# "Chess Fonts" page, http://www.enpassant.dk/chess/fonteng.htm

### chess set Fantasy. Dark pieces are in brown
# original Fantasy: based by Maurizio Monge <maurizio.monge@gmail.com>
#http://linuz.sns.it/~monge/wiki/index.php/Chess_pieces





set png_image_support 1
if { [catch { package require img::png } ] } {
  set png_image_support 0
  ::splash::add "Img package not found (tkimg). Some piece sets are disabled."
}



##########
# Size 20 is only used in Material search window, not for boards.
# It has two special extra images, wm20 and bm20, which contain a
# bishop and knight, for indicating a minor piece.
#

image create photo wm20 -data {
  R0lGODlhFAAUAMIAAH9/f7+/vz8/PwAAAP///////////////yH5BAEKAAcALAAAAAAUABQA
  AANweLp8cCG02cSwNB8RSACctgBAR3iDqJDd5wlidBLCHGb1CQzzx+yPDYAWyJ1gixpSwOLM
  CClFESSRup7RImF42zxP0Vpg0EE6SGjSCqxTKYxHN4RJ6sYETHxVNa3vM2gDQyBoGkNbhIdq
  FHRBZyAaCQA7}

image create photo bm20 -data {
  R0lGODlhFAAUAMIAAH9/f7+/vwAAAD8/P////////////////yH5BAEKAAcALAAAAAAUABQA
  AANneLp8cCG02YQYgupj+5CbEgyYAAQCuJHlNYZo1wHDo7VyOjSAebQxS69R25UCvVlmMXIp
  TrmhSGgB4S5LzoVQegK+YJtWwLWEFjnzGVL7ftYQMoGQggerZ3CrLealoxomXxJIX1kNCQA7
}

image create photo p20 -data {
  R0lGODlh8AAUAMIAAH9/fz8/P7+/vwAAAP///////////////yH5BAEKAAcALAAAAADwABQA
  AAP+eLrc/jDKSau9OOvNu/8VAIBkJAhl2ohqe5xuCgTBGL/oQaMwJew30KwWhAkGA0Vv8gvk
  LALRUxJ9BTSAk40qFXWzkKZWCmQit5Uo2GdDW4ZuiFQ9koZ33mxZAjhjBidJFDNIRBgBhRQD
  Q4t9NH0NP3o1BEgEYjNTDix/SIITfQOIcROIooOFpouekV6PlQMEQ2qaK6QSsZUholGit5GA
  BJeAuMIixgDCnwrJAbKLsMPNsiY0VxeeyxGhnoZm2cTb4OMrP88C0X3NVWF+2CLaELnCUTRm
  6CfDtQuUwv7G1xb8iHUkmSV1lZy0GpErSZR9DbJVUOULCUQl3VRdPDL+rtsKRM8MxuqDjlcr
  FBIflkomK+CdLP8I2Ivg5NIOmxIe5RnygOSzhDKlLGqg01LCGjMhUHQpj1AhmfEYmHIy8JSJ
  jlZXAHIUDWRBojWcFnK1zZk/bw9oBLt09lcuMcpA7eS0CU8WVyIeMTBHD9ARdMjkjPt14BhF
  QEkddDuhSm7MqIUrrgJ0ZhSDvJIr+7o14x9dB3z9zTtCE3A+nHxiUpNXsFKgXj+mHPN3pKa/
  z5cH48LqJJwDVWoT8enYDis4W9k4cjzjliWk0p5ZBn5QcKdvOardXqqXN1nJVjFpxMTNgJw4
  4zypj3V6kRlxecYl7g0+mZtewcLQ/vYMjTb+U6lh5fXfJtmVNcpOj/xnGzL/kHaeO/AZ1xtN
  AaY3nHk9dZOHKnH0th43M1D4T2KXzebEbKKVFcoMhDEz1y8cvUjIPo3AU2MmNI0zYGEU2eiJ
  a3JUqF9PFT6nnnd5GHMdRrScQMeSC3Q23oCdxXaEapAdMI+Sisy1I0YyQslMgOi48iU34AzY
  yxlQJTfUA1hRoJMXYmJkHESOLIXIl1v+A5mAMgE2IkS9qLUGdDH9gIt0fprAaHQRxHeHeIfV
  eEc2CuV0Z6TrNVYcVrdEodp0ZY36WVVsPrPYb/HxmVFykfrYyJfLddTeCx15MZ8ovJlEVHx1
  zoNillrWICgh2zxpeluLfbZVnllK9pefNiiaSopPWLrVD0BZoqnbboOhBexxEQF7bXxuGfdg
  rlTEJxt9YDh1n0Dj7rOmjhtVmmmG6E2ArlRpapGmYsDa6+2qlwYcxAWHyrHwwxAX1h47EVds
  8cUYZ6xxBwkAADs=
}

image create photo e20 -height 20 -width 20
set x 0
foreach p {wp wn wb wr wq wk bp bn bb br bq bk} {
  image create photo ${p}20 -width 20 -height 20
  ${p}20 copy p20 -from $x 0 [expr $x + 19] 19
  incr x 20
}

# setPieceFont:
#   Given a piece font name, resets all piece images in all
#   available board sizes to that font.
#
proc setPieceFont {font} {
	foreach size $::boardSizes {
		image create photo e$size -height $size -width $size
		set fname [file join $::scidImgDir pieces $font]
		set fpng [file join $fname $font\_$size.png]
		set fgif [file join $fname $font\_$size.gif]
		if {[catch {image create photo tmpPieces -file "$fpng"}]} {
			image create photo tmpPieces -file "$fgif"
		}
		set x 0
		foreach p {wp wn wb wr wq wk bp bn bb br bq bk} {
			image create photo $p$size -width $size -height $size
			$p$size copy tmpPieces -from $x 0 [expr $x + $size - 1] [expr $size - 1]
			incr x $size
		}
		image delete tmpPieces
	}
}

proc InitImg {} {
	global scidImgDir boardStyle boardStyles

	#Search available piece sets
	set boardStyles {}
	set dname [file join $scidImgDir "pieces"]
	foreach {piecetype} [glob -directory $dname *] {
		if {[file isdirectory $piecetype] == 1} {
			lappend boardStyles [file tail $piecetype]
		}
	}
	# Ensure the board style is valid:
	if {[lsearch -exact $boardStyles $boardStyle] == -1} {
		set boardStyle [lindex $boardStyles 0]
	}
	setPieceFont $boardStyle

	#Load all img/buttons/_filename_.png
	set dname [file join $::scidImgDir buttons]
	foreach {fname} [glob -directory $dname *.png] {
		set iname [string range [file tail $fname] 0 end-4]
		catch { image create photo $iname -file $fname }
	}

	set pngimages [image names];

	#Load all img/boards/_filename_.gif
	set textureSquare {}
	set dname [file join $::scidImgDir boards]
	foreach {fname} [glob -directory $dname *.gif] {
		set iname [string range [file tail $fname] 0 end-4]
		image create photo $iname -file $fname
		if {[string range $iname end-1 end] == "-l"} {
			lappend textureSquare [string range $iname 0 end-2]
		}
	}

	#Load all img/buttons/_filename_.gif
	set dname [file join $::scidImgDir buttons]
	foreach {fname} [glob -directory $dname *.gif] {
		set iname [string range [file tail $fname] 0 end-4]
		if { [lsearch -exact $pngimages $iname] == -1} {
			image create photo $iname -file $fname
		}
	}

	#Load all img/flags/_filename_.gif
	set dname [file join $::scidImgDir flags]
	foreach {fname} [glob -directory $dname *.gif] {
		set iname [string range [file tail $fname] 0 end-4]
		image create photo $iname -file $fname
	}
}

# Set up Scid icon
proc InitIcon {}  {
  global scidImgDir
  set scidIconFile [file nativename [file join $scidImgDir "scid.gif"]]
  if {[file readable $scidIconFile]} {
    wm iconphoto . -default [image create photo -file "$scidIconFile"]
  }
}


#TODO: group the start-up code into Init* funcs and move all the Init* calls to the end of end.tcl
InitImg
InitIcon
### lang.tcl: Support for multiple-language menus, buttons, etc.
### Part of Scid, which is Copyright 2001-2003 Shane Hudson.

array set langEncoding {}
set languages {}

if {[catch {encoding names}]} {
  set hasEncoding 0
} else {
  set hasEncoding 1
}
################################################################################
#  Translation of pieces
#  Note to adopt also tkscid.cpp to allow for a new langauge as well
#  as add transPieces to langPieces[] in game.cpp
################################################################################
array set transPieces {}

set transPieces(F)   { P P K R Q D R T B F N C }
set untransPieces(F) { P P R K D Q T R F B C N }
set transPieces(S)   { P P K R Q D R T B A N C }
set untransPieces(S) { P P R K D Q T R A B C N }
set transPieces(D)   { P B K K Q D R T B L N S }
set untransPieces(D) { B P K K D Q T R L B S N }
set transPieces(I)   { P P K R Q D R T B A N C }
set untransPieces(I) { P P R K D Q T R A B C N }
set transPieces(N)   { P p K K Q D R T B L N P }
set untransPieces(N) { p P K K D Q T R L B P N }
set transPieces(C)   { P P K K Q D R V B S N J }
set untransPieces(C) { P P K K D Q V R S B J N }
## TODO Put in the right letters for greek
set transPieces(G)   { P B K K Q D R T B L N S }
set untransPieces(G) { B P K K D Q T R L B S N }
set transPieces(H)   { P G K K Q V R B B F N H }
set untransPieces(H) { G P K K V Q B R F B H N }
set transPieces(O)   { P B K K Q D R T B L N S }
set untransPieces(O) { B P K K D Q T R L B S N }
set transPieces(W)   { P B K K Q D R T B L N S }
set untransPieces(W) { B P K K D Q T R L B S N }
set transPieces(K)   { P P K R Q D R T B A N C }
set untransPieces(K) { P P R K D Q T R A B C N }
set transPieces(U)   { P S K K Q D R T B L N R }
set untransPieces(U) { S P K K D Q T R L B R N }

################################################################################
proc trans { msg } {
  if { $::language == "E" || ! $::translatePieces || $msg == "\[end\]"} {
    return $msg
  }
  if { [ catch { set t [string map $::transPieces($::language) $msg ]} ] } {
    return $msg
  }
  return $t
}
################################################################################
proc untrans { msg } {
  if { $::language == "E"  || ! $::translatePieces || $msg == "\[end\]"} {
    return $msg
  }
  if { [ catch { set t [string map $::untransPieces($::language) $msg ]} ] } {
    return $msg
  }
  return $t
}
################################################################################
#
################################################################################
proc addLanguage {letter name underline {encodingSystem ""}} {
  global langEncoding languages
  .menu.options.language add radiobutton -label $name \
      -underline $underline -variable language -value $letter \
      -command setLanguage
  set ::langEncoding($letter) $encodingSystem
  lappend languages $letter
}
################################################################################
# menuText:
#    Assigns the menu name and help message for a menu entry and language.
################################################################################
proc menuText {lang tag label underline {helpMsg ""}} {
  global hasEncoding langEncoding
  if {$hasEncoding  &&  $langEncoding($lang) != ""  &&  $::tcl_version <= 8.3} {
    catch {set label [encoding convertfrom $langEncoding($lang) $label]}
    catch {set helpMsg [encoding convertfrom $langEncoding($lang) $helpMsg]}
  }
  
  set ::menuLabel($lang,$tag) $label
  set ::menuUnder($lang,$tag) $underline
  if {$helpMsg != ""} {
    set ::helpMessage($lang,$tag) $helpMsg
  }
}
################################################################################
# helpMsg:
#    Assigns the help message for a particular language for a button.
# ################################################################################
proc helpMsg {lang button message} {
  global hasEncoding langEncoding
  if {$hasEncoding  &&  $langEncoding($lang) != ""  &&  $::tcl_version <= 8.3} {
    catch {set message [encoding convertfrom $langEncoding($lang) $message]}
  }
  set ::helpMessage($lang,$button) $message
}

array set tr {}
array set translations {}
################################################################################
# translate:
#    Assigns a translation for future reference.
################################################################################
proc translate {lang tag label} {
  global menuLabel hasEncoding langEncoding
  regsub {\\n} $label "\n" label
  if {$hasEncoding  &&  $langEncoding($lang) != ""  &&  $::tcl_version <= 8.3} {
    catch {set label [encoding convertfrom $langEncoding($lang) $label]}
  }
  set ::translations($lang,$tag) $label
  set ::tr($tag) $label
  foreach extra {":" "..."} {
    set newtag "${tag}${extra}"
    set newlabel "${label}${extra}"
    set ::translations($lang,$newtag) $newlabel
    set ::tr($newtag) $newlabel
  }
}
################################################################################
# translateECO:
#    Given a pair list of ECO opening name phrase translations,
#    assigns the translations for future reference.
################################################################################
proc translateECO {lang pairList} {
  global hasEncoding langEncoding
  foreach {from to} $pairList {
    if {$hasEncoding  &&  $langEncoding($lang) != ""  &&  $::tcl_version <= 8.3} {
      catch {set to [encoding convertfrom $langEncoding($lang) $to]}
    }
    sc_eco translate $lang $from $to
  }
}
################################################################################
# tr:
#    Given a tag and language, returns the stored text for that tag.
################################################################################
proc tr {tag {lang ""}} {
  global menuLabel tr
  if {$lang == ""} {set lang $::language}
  if {$lang == "X"} {return $tag}
  # First, look for a menu label
  if {[info exists menuLabel($lang,$tag)]} {
    return $menuLabel($lang,$tag)
  }
  if {[info exists menuLabel(E,$tag)]} {
    return $menuLabel(E,$tag)
  }
  # Now look for a regular button/message translation
  if {[info exists tr($tag)]} {
    return $tr($tag)
  }
  # Finally, just give up and return the original tag
  return $tag
}
################################################################################
#
################################################################################
proc setLanguage {{lang ""}} {
  global menuLabel menuUnder oldLang hasEncoding langEncoding
  
  if {$lang == ""} {set lang $::language}
  
  if { $::translatePieces } {
    switch $lang {
      C {sc_info language cz}
      D {sc_info language de}
      F {sc_info language fr}
      G {sc_info language gr}
      H {sc_info language hu}
      I {sc_info language it}
      K {sc_info language ca}
      N {sc_info language ne}
      O {sc_info language no}
      S {sc_info language es}
      U {sc_info language fi}
      W {sc_info language sw}
      default {sc_info language en}
    }
  } else {
    sc_info language en
  }
  
  if {[catch {setLanguage_$lang} err]} { puts "Error: $err" }
  # TODO: Check this:
  if {$hasEncoding  &&  $langEncoding($lang) != ""} {
    # encoding system $langEncoding($lang)
  }
  
  # If using Tk, translate all menus:
  if {! [catch {winfo exists .}]} { setLanguageMenus $lang }
  # update notation window
  if {[winfo exists .pgnWin]} { ::pgn::Refresh 1 }
  
  foreach i [array names ::tr] {
    if {[info exists ::translations($lang,$i)]} {
      set ::tr($i) $::translations($lang,$i)
    } elseif {[info exists ::translations(E,$i)]} {
      set ::tr($i) $::translations(E,$i)
    }
  }
  set oldLang $lang
}
################################################################################
# Will switch language only for Scid backoffice, no UI
# Used to make callbacks use english by default
################################################################################
proc setLanguageTemp { lang } {
  switch $lang {
    C {sc_info language cz}
    D {sc_info language de}
    F {sc_info language fr}
    G {sc_info language gr}
    H {sc_info language hu}
    I {sc_info language it}
    K {sc_info language ca}
    N {sc_info language ne}
    O {sc_info language no}
    S {sc_info language es}
    U {sc_info language fi}
    W {sc_info language sw}
    default {sc_info language en}
  }
}

### End of file: lang.tcl



# thousands, percentFormat:
#   Functions to format integer numbers.
#   thousands inserts the thousands separator (usually "," or ".") for
#   every three digits before the decimal separator in the number.
#   percentFormat does the same as thousands, but also adds a percentage.
#   If "kilo" is true, numbers >= 100,000 are divided by 1000 and have
#   the unit "K" appended while values over 1 million appear as "1.00M"
#
proc ::utils::thousands {n {kilo 0}} {
  global locale
  set commaChar [string index $locale(numeric) 1]
  set unit ""
  if {$kilo} {
    if {$n >= 1000000} {
      set decimalChar [string index $locale(numeric) 0]
      set decimalPart [format "%02d" [expr {(int($n / 10000)) % 100}]]
      set n [expr {int($n) / 1000000}]
      set unit "${decimalChar}${decimalPart}M"
    } elseif {$n >= 100000} {
      set unit "K"
      set n [expr {int($n / 1000)} ]
    }
  }
  if {$commaChar == ""} { return "$n$unit" }
  while {[regsub {^([-+]?[0-9]+)([0-9][0-9][0-9])} $n "\\1$commaChar\\2" n]} {}
  return "$n$unit"
}

proc ::utils::percentFormat {num denom} {
  # Ensure denominator is not zero:
  if {$denom == 0} {set denom 1}
  return "[::utils::thousands $num] ([expr $num * 100 / $denom]%)"
}


namespace eval ::utils::date {}

# ::utils::date::today:
#   Returns todays date, in "yyyy.mm.dd" format.
#   The optional parameter "year", "month" or "day" can be used to
#   limit the returned value to just the year, month or day.
#
proc ::utils::date::today {{type all}} {
  set timeNow [clock seconds]
  set year [clock format $timeNow -format "%Y"]
  set month [clock format $timeNow -format "%m"]
  set day [clock format $timeNow -format "%d"]
  switch -- $type {
    "all"   { return [format "%s.%s.%s" $year $month $day] }
    "year"  { return $year }
    "month" { return $month }
    "day"   { return $day }
    default { error "Unrecognised parameter: $type" }
  }
}

# ::utils::date::chooser
#
#   Produce a date-selection dialog box.
#   Originally based on code from Effective Tcl/Tk Programming by
#   Mark Harrison, but with lots of changes and improvements.
#
proc ::utils::date::chooser {{date "now"}} {
  set time [clock seconds]
  if {$date != "now"} {
    catch {set time [clock scan $date]}
  }
  set ::utils::date::_time $time
  set ::utils::date::_selected [clock format $time -format "%Y-%m-%d"]

  set win .dateChooser
  toplevel $win
  canvas $win.cal -width 300 -height 220
  pack [frame $win.b] -side bottom -fill x
  button $win.b.ok -text "OK" -command "destroy $win"
  button $win.b.cancel -text $::tr(Cancel) -command "
    set ::utils::date::_selected {}
    destroy $win"
  pack $win.b.cancel $win.b.ok -side right -padx 5 -pady 5
  pack $win.cal -side top -expand yes -fill both

  button $win.cal.prevY -image tb_start -command "::utils::date::_month $win -12"
  button $win.cal.prev -image tb_prev -command "::utils::date::_month $win -1"
  button $win.cal.next -image tb_next -command "::utils::date::_month $win +1"
  button $win.cal.nextY -image tb_end -command "::utils::date::_month $win +12"
  bind $win.cal <Configure> "::utils::date::_redraw $win"
  bind $win.cal <Double-Button-1> "destroy $win"
  bind $win <Escape> "$win.b.cancel invoke"
  bind $win <Return> "$win.b.ok invoke"
  bind $win <Prior> "$win.cal.prev invoke"
  bind $win <Next> "$win.cal.next invoke"
  bind $win <Shift-Prior> "$win.cal.prevY invoke"
  bind $win <Shift-Next> "$win.cal.nextY invoke"
  bind $win <Up> "::utils::date::_day $win -7"
  bind $win <Down> "::utils::date::_day $win +7"
  bind $win <Left> "::utils::date::_day $win -1"
  bind $win <Right> "::utils::date::_day $win +1"

  wm minsize $win 250 200
  wm title $win "Scid: Choose Date"
  focus $win
  grab $win
  tkwait window $win
  if {$::utils::date::_selected == ""} { return {} }
  set time [clock scan $::utils::date::_selected]
  return [list \
          [clock format $time -format "%Y"] \
          [clock format $time -format "%m"] \
          [clock format $time -format "%d"] \
         ]
}

proc ::utils::date::_day {win delta} {
  set unit "day"
  if {$delta < 0} {set unit "day ago"}
  set time [clock scan "[expr abs($delta)] $unit" -base $::utils::date::_time]
  set day [string trimleft [clock format $time -format "%d"] 0]
  set month [string trimleft [clock format $time -format "%m"] 0]
  set year [clock format $time -format "%Y"]
  ::utils::date::_select $win "$year-$month-$day"
}

proc ::utils::date::_month {win delta} {
  set dir [expr {($delta > 0) ? 1 : -1} ]
  set day [string trimleft [clock format $::utils::date::_time -format "%d"] 0]
  set month [string trimleft [clock format $::utils::date::_time -format "%m"] 0]
  set year [clock format $::utils::date::_time -format "%Y"]

  for {set i 0} {$i < abs($delta)} {incr i} {
    incr month $dir
    if {$month < 1} {
      set month 12
      incr year -1
    } elseif {$month > 12} {
      set month 1
      incr year 1
    }
  }
  if {[catch {::date::_select $win "$year-$month-$day"}]} {
    ::utils::date::_select $win "$year-$month-28"
  }
}

proc ::utils::date::_redraw {win} {
  $win.cal delete all
  set time $::utils::date::_time
  set wmax [winfo width $win.cal]
  set hmax [winfo height $win.cal]

  $win.cal create window 3 3 -anchor nw -window $win.cal.prevY
  $win.cal create window 40 3 -anchor nw -window $win.cal.prev
  $win.cal create window [expr {$wmax-43} ] 3 -anchor ne -window $win.cal.next
  $win.cal create window [expr {$wmax-3} ] 3 -anchor ne -window $win.cal.nextY
  set bottom [lindex [$win.cal bbox all] 3]

  set month [string trimleft [clock format $time -format "%m"] 0]
  set year [clock format $time -format "%Y"]
  $win.cal create text [expr {$wmax/2} ] $bottom -anchor s -font font_Bold \
    -text "[lindex $::tr(Months) [expr $month - 1]] $year"

  incr bottom 3
  $win.cal create line 0 $bottom $wmax $bottom -width 2
  incr bottom 25

  set current ""

  set layout [::utils::date::_layout $time]
  set weeks [expr {[lindex $layout end]+1} ]

  for {set day 0} {$day < 7} {incr day} {
    set x0 [expr {$day*($wmax-7)/7+3} ]
    set x1 [expr {($day+1)*($wmax-7)/7+3} ]
    $win.cal create text [expr {($x1+$x0)/2} ] $bottom -anchor s \
      -text [lindex $::tr(Days) $day] -font font_Small
  }
  incr bottom 3

  foreach {day date dcol wrow} $layout {
    set x0 [expr {$dcol*($wmax-7)/7+3} ]
    set y0 [expr {$wrow*($hmax-$bottom-4)/$weeks+$bottom} ]
    set x1 [expr {($dcol+1)*($wmax-7)/7+3} ]
    set y1 [expr {($wrow+1)*($hmax-$bottom-4)/$weeks+$bottom} ]

    if {$date == $::utils::date::_selected} {set current $date}

    $win.cal create rectangle $x0 $y0 $x1 $y1 -outline black -fill white

    $win.cal create text [expr {$x0+4} ] [expr {$y0+2} ] -anchor nw -text "$day" \
      -fill black -font font_Small -tags [list $date-text all-text]

    $win.cal create rectangle $x0 $y0 $x1 $y1 \
      -outline "" -fill "" -tags [list $date-sensor all-sensor]

    $win.cal bind $date-sensor <ButtonPress-1> "::utils::date::_select $win $date"
  }

  if {$current != ""} {
    $win.cal itemconfigure $current-sensor -outline red -width 3
    $win.cal raise $current-sensor
  } elseif {$::utils::date::_selected == ""} {
    set date [clock format $time -format "%Y-%m-%d"]
    ::utils::date::_select $win $date
  }
}

proc ::utils::date::_layout {time} {
  set month [string trimleft [clock format $time -format "%m"] 0]
  set year  [clock format $time -format "%Y"]

  foreach lastday {31 30 29 28} {
    if {[catch {clock scan "$year-$month-$lastday"}] == 0} { break }
  }
  set seconds [clock scan "$year-$month-1"]
  set firstday [clock format $seconds -format %w]
  set weeks [expr {ceil(double($lastday+$firstday)/7)} ]

  set rlist ""
  for {set day 1} {$day <= $lastday} {incr day} {
    set seconds [clock scan "$year-$month-$day"]
    set date [clock format $seconds -format "%Y-%m-%d"]
    set daycol [clock format $seconds -format %w]
    set weekrow [expr {($firstday+$day-1)/7} ]
    lappend rlist $day $date $daycol $weekrow
  }
  return $rlist
}

proc ::utils::date::_select {win date} {
  set time [clock scan $date]
  set date [clock format $time -format "%Y-%m-%d"]

  set currentMonth [clock format $::utils::date::_time -format "%m %Y"]
  set selectedMonth [clock format $time -format "%m %Y"]
  set ::utils::date::_time $time
  set ::utils::date::_selected $date

  if {$currentMonth == $selectedMonth} {
    $win.cal itemconfigure all-sensor -outline "" -width 1
    $win.cal itemconfigure $date-sensor -outline red -width 3
    $win.cal raise $date-sensor
  } else {
    ::utils::date::_redraw $win
  }
}
########################################
### utils/font.tcl: part of Scid.
#
# The following procs implement a font selection dialog. I found the code
# at codearchive.com (I dont think there was an author listed for it) and
# simplified it for use with Scid.

# FontDialog:
#   Creates a font dialog to select a font.
#   Returns 1 if user chose a font, 0 otherwise.
#
proc FontDialog {font_name {options ""} {fixedOnly 0}} {
  global fd_family fd_style fd_size fd_close
  global fd_strikeout fd_underline

  set fd_family {}; set fd_style {}; set fd_size {}
  set fd_close  -1

  set unsorted_fam [font families]
  set families [lsort $unsorted_fam]
  if {$fixedOnly} {
    set fams $families
    set families {}
    foreach f $fams {
      if {[font metrics [list $f] -fixed] == 1} { lappend families $f }
    }
  }

  # Get current font's family and so on.
  if {[llength $options] == 4} {
    # Use provided font settings:
    set family [lindex $options 0]
    set size [lindex $options 1]
    set weight [lindex $options 2]
    set slant [lindex $options 3]
  } else {
    # Get options using [font actual]:
    set family [font actual $font_name -family]
    set size   [font actual $font_name -size]
    set weight    [font actual $font_name -weight]
    set slant     [font actual $font_name -slant]
  }

  # Default style.
  set fd_style "Regular"
  if { $slant == "italic" } {
    if { $weight == "bold" } {
      set fd_style "Bold Italic"
    } else {
      set fd_style "Italic"
    }
  } else {
    if { $weight == "bold" } {
      set fd_style "Bold"
    }
  }

  set fd_family $family
  set fd_size   $size

  # Create font dialog.
  set tl .fontdialog
  toplevel $tl
  set dlg $tl.f
  pack [ttk::frame $tl.f] -expand 1 -fill both
  wm protocol $tl WM_DELETE_WINDOW "set fd_close 0"
  wm title $tl Font

  ttk::label $dlg.family_lbl -text "Font:" -anchor w
  ttk::entry $dlg.family_ent -textvariable fd_family -background white
  bind  $dlg.family_ent <Key-Return> "FontDialogRegen $font_name"
  grid config $dlg.family_lbl -column 0 -row 0 -sticky w
  grid config $dlg.family_ent -column 0 -row 1 -sticky snew

  ttk::label $dlg.style_lbl  -text "Font Style:" -anchor w
  ttk::entry $dlg.style_ent  -textvariable fd_style -width 11 -background white
  bind  $dlg.style_ent  <Key-Return>  "FontDialogRegen $font_name"
  grid config $dlg.style_lbl  -column 1 -row 0 -sticky w
  grid config $dlg.style_ent  -column 1 -row 1 -sticky snew

  ttk::label $dlg.size_lbl   -text "Size:" -anchor w
  ttk::entry $dlg.size_ent   -textvariable fd_size -width 4 -background white
  bind  $dlg.size_ent   <Key-Return> "FontDialogRegen $font_name"
  grid config $dlg.size_lbl   -column 2 -row 0 -sticky w
  grid config $dlg.size_ent   -column 2 -row 1 -sticky snew

  # Font family listbox.
  set fr $dlg.family_list
  ttk::frame $fr
  listbox $fr.list -height 6 -selectmode single -width 30 -background white -yscrollcommand "$fr.scroll set"
  ttk::scrollbar $fr.scroll -command "$fr.list yview"

  foreach f $families {
    $fr.list insert end $f
  }

  bind $fr.list <Double-Button-1> "FontDialogFamily $fr.list $font_name $dlg.family_ent"

  pack $fr.scroll -side right -fill y
  pack $fr.list -side left
  grid config $fr -column 0 -row 2 -rowspan 16

  # Font style listbox.
  set fr $dlg.style_list
  ttk::frame $fr
  listbox $fr.list -height 6 -selectmode single -width 11 -background white -yscrollcommand "$fr.scroll set"
  ttk::scrollbar $fr.scroll -command "$fr.list yview"

  $fr.list insert end "Regular"
  $fr.list insert end "Bold"
  $fr.list insert end "Italic"
  $fr.list insert end "Bold Italic"

  bind $fr.list <Double-Button-1> "FontDialogStyle $fr.list $font_name $dlg.style_ent"

  pack $fr.scroll -side right -fill y
  pack $fr.list -side left
  grid config $fr -column 1 -row 2 -rowspan 16

  # Font size listbox.
  set fr $dlg.size_list
  ttk::frame $fr
  listbox $fr.list -height 6 -selectmode single -width 4 -background white -yscrollcommand "$fr.scroll set"
  ttk::scrollbar $fr.scroll -command "$fr.list yview"

  for {set i 7} {$i <= 20} {incr i} {
    $fr.list insert end $i
  }

  bind $fr.list <Double-Button-1> "FontDialogSize $fr.list $font_name $dlg.size_ent"

  pack $fr.scroll -side right -fill y
  pack $fr.list -side left
  grid config $fr -column 2 -row 2 -rowspan 16

  # OK/Cancel
  set fr $dlg.ok_cancel
  ttk::frame $fr

  ttk::button $fr.ok -text "OK" -command "set fd_close 1"
  ttk::button $fr.cancel  -text "Cancel" -command "set fd_close 0"
  pack $fr.ok -side top -fill x
  pack $fr.cancel -side top -fill x -pady 2
  ttk::button $fr.help -text "Help" -command "helpWindow Options"
  pack $fr.help -side top -fill x -pady 10
  grid config $fr -column 4 -row 1 -rowspan 2 -sticky snew -padx 12

  # Sample text
  set fr $dlg.sample
  ttk::frame $fr -borderwidth 3 -relief groove
  ttk::label $fr.l_sample -text "Sample" -anchor w

  ttk::label $fr.sample -font $font_name -relief sunken -text "This is some sample text\nAaBbCcDdEeFfGgHhIiJjKkLlMm\n 0123456789. +=-"

  pack  $fr.l_sample -side top -fill x -pady 4
  pack  $fr.sample -side top -pady 4 -ipadx 10 -ipady 10

  grid config $fr -column 0 -columnspan 3 -row 20 -rowspan 2 -sticky snew -pady 10 -padx 2

  # Make this a modal dialog.
  tkwait variable fd_close

  # Get rid of dialog and return value.
  destroy $tl

  # Restore old font characteristics on a cancel:
  if { $fd_close == 0 } {
    font configure $font_name -family $family -size $size -slant $slant -weight $weight
    return ""
  }

  return [list $fd_family $fd_size [FontWeight $fd_style] [FontSlant $fd_style]]
}


proc FontDialogFamily { listname font_name entrywidget } {
  # Get selected text from list.
  catch {
    set item_num [$listname curselection]
    set item [$listname get $item_num]

    # Set selected list item into entry for font family.
    $entrywidget delete 0 end
    $entrywidget insert end $item

    # Use this family in the font and regenerate font.
    FontDialogRegen $font_name
  }
}


proc FontDialogStyle { listname font_name entrywidget } {
  # Get selected text from list.
  catch {
    set item_num [$listname curselection]
    set item [$listname get $item_num]

    # Set selected list item into entry for font family.
    $entrywidget delete 0 end
    $entrywidget insert end $item

    # Use this family in the font and regenerate font.
    FontDialogRegen $font_name
  }
}


proc FontDialogSize { listname font_name entrywidget } {
  # Get selected text from list.
  catch {
    set item_num [$listname curselection]
    set item [$listname get $item_num]

    # Set selected list item into entry for font family.
    $entrywidget delete 0 end
    $entrywidget insert end $item

    # Use this family in the font and regenerate font.
    FontDialogRegen $font_name
  }
}

proc FontWeight {style} {
  if { $style == "Bold Italic" || $style == "Bold" } {
    return "bold"
  }
  return "normal"
}

proc FontSlant {style} {
  if { $style == "Bold Italic" || $style == "Italic" } {
    return "italic"
  }
  return "roman"
}

# FontDialogRegen: Regenerates font from attributes.
proc FontDialogRegen { font_name } {
  global fd_family fd_style fd_size

  set weight "normal"
  if { $fd_style == "Bold Italic" || $fd_style == "Bold" } {
    set weight "bold"
  }

  set slant "roman"
  if { $fd_style == "Bold Italic" || $fd_style == "Italic" } {
    set slant "italic"
  }

  # Change font to have new characteristics.
  font configure $font_name -family $fd_family -size $fd_size -slant $slant -weight $weight
}

## End of file: fontsel.tcl
# utils/graph.tcl: Graph plotting package for Scid.
#

namespace eval ::utils::graph {}

# Configuration options, specific to each graph:
#
#  -width:     width of graph in canvas units.
#  -height:    height of graph in canvas units.
#  -xtop:      x-coord of top-left graph corner in canvas.
#  -ytop:      y-coord of top-left graph corner in canvas.
#  -background: background color in graph.
#  -font:      font of axis text.
#  -textcolor: color of axis text.
#  -ticksize:  length of ticks on axes, in canvas units.
#  -tickcolor: color to draw x-axis and y-axis ticks.
#  -textgap:   distance from graph border to text, in canvas units.
#  -xtick:     distance between x-axis ticks, in graph units.
#  -ytick:     distance between y-axis ticks, in graph units.
#  -xlabels, -ylabels: lists of {value,label} pairs to print on each axis.
#              If a list has no pairs, values are printed at each tick.
#  -xmin, -xmax, -ymin, -ymax:  miminum/maximum graph units to plot.
#  -canvas:    canvas to plot the graph in.
#  -vline, -hline: list of vertical/horizontal lines to plot. Each
#              element is a list of four items: {color width type value}
#              where color is the line color, width is its width in
#              pixels, type is "each" or "at", and value is the value.
#  -brect: list of background rectangles. Each element is a list of 5 items:
#              the graph coordinates of a rectangle, and its color.
#
set ::utils::graph::_options(graph) {
  width height xtop ytop background font ticksize textgap xtick ytick
  xmin xmax ymin ymax canvas vline hline textcolor tickcolor
  xlabels ylabels brect
}
set ::utils::graph::_defaults(graph) \
  { -width 400 -height 300 -xtop 50 -ytop 30 -ticksize 5 -textgap 2 \
    -xtick 5 -ytick 5 -tickcolor black -font fixed -background white \
      -canvas {} -hline {} -vline {} -textcolor black \
      -xlabels {} -ylabels {} -brect {} }

# Data options, specific to each data set within a graph:
#
#   -points:  1 to display data points.
#   -lines:   1 to display data line.
#   -bars:    1 to display vertical bars.
#   -color:   color to display points, lines and bars in.
#   -outline: color for outline of bars or points. Not used for lines.
#   -radius:  radius of points in canvas units.
#   -linewidth: width of line in canvas units.
#   -barwidth:  width of bars -- in GRAPH units, NOT canvas units.
#   -key:     key name to print by line.
#   -coords:  actual data to plot; should be a list containing an
#             EVEN number of numeric values.
#
set ::utils::graph::_options(data) {
  points lines bars color outline radius linewidth barwidth coords key
}
set ::utils::graph::_defaults(data) \
  { -points 0 -lines 1 -bars 0 -color red -outline black -radius 2 \
    -linewidth 1 -barwidth 1.0 -key {} -coords {} }

set ::utils::graph::_graphs {}
array set ::utils::graph::_data {}


# create:
#    Create a new graph. Sets up the graph configuration and creates a
#    new proc (in the global namespace) with the same name as the graph.
#
proc ::utils::graph::create args {
  set graph [lindex $args 0]
  lappend ::utils::graph::_graphs $graph
  
  # Remove any existing data for this graph name:
  foreach key [array names ::utils::graph::_data] {
    if {[string match "$graph,*" $key]} { unset ::utils::graph::_data($key) }
  }
  set ::utils::graph::_data($graph,sets) {}

  set args [concat graph $graph $::utils::graph::_defaults(graph) [lrange $args 1 end]]
  set extraArgs [eval "::utils::graph::_configure $args"]
  if {$extraArgs != ""} {
    error "Unrecognised arguments: $extraArgs"
  }
  return $graph
}


# delete:
#    Removes all privately stored information about a graph.
#
proc ::utils::graph::delete {graph} {
  # Remove from the list of available graphs:
  set index [lindex $::utils::graph::_graphs $graph]
  if {$index < 0} { return }
  set ::utils::graph::_graphs [lreplace $::utils::graph::_graphs $index $index]
  # Remove all configuration data for the graph:
  foreach key [array names ::utils::graph::_data] {
    if {[string match "$graph,*" $key]} {
      unset ::utils::graph::_data($key)
    }
  }
}


# isgraph:
#    Returns true if the named graph exists.
#
proc ::utils::graph::isgraph {graph} {
  if {[lsearch $::utils::graph::_graphs $graph] >= 0} { return 1 }
  return 0
}


# data:
#    Adds a new data set to the graph, or modifies an existing one.
#
proc ::utils::graph::data args {
  variable _data
  variable _defaults
  set graph [lindex $args 0]
  set dataset [lindex $args 1]

  set args [concat data $graph,$dataset $_defaults(data) \
              [lrange $args 2 end]]

  set extraArgs [eval "::utils::graph::_configure $args"]
  if {$extraArgs != ""} {
    error "Unrecognised graph data options: $extraArgs"
  }

  set marklist $_data($graph,sets)
  if {[lsearch -exact $marklist $dataset] < 0} {
    lappend _data($graph,sets) $dataset
  }

  set datalength 0
  set ncoords [llength $_data($graph,$dataset,coords)]
  if {$ncoords % 2 != 0} {
    error "Error: coordinates list must have an even length"
  }

  # Redraw graph: do we want to do this here?
  #::utils::graph::redraw $graph
}


# cget:
#    Return a stored attribute of a graph.
#
proc ::utils::graph::cget {graph opt} {
  variable _data
  # Remove initial "-" if necessary:
  if {[string index $opt 0] == "-"} { set opt [string range $opt 1 end] }

  # If asking for axmin/axmax/aymin/aymax, set ranges first:
  if {[string match "a?m??" $opt]} { ::utils::graph::set_range $graph }

  if {! [info exists _data($graph,$opt)]} {
    error "No such graph option: $opt"
  }
  return $_data($graph,$opt)
}

# configure:
#    Modify stored attributes for a graph.
#
proc ::utils::graph::configure args {
  set newargs [concat "graph" [lindex $args 0] [lrange $args 1 end]]
  eval "::utils::graph::_configure $newargs"
}


# _configure:
#    Handle configuration of both the graph, and individual data sets.
#    The first arg (type) should be "graph" or "data". The second should
#    be a graph name for graph configuration, or a "graph,set" pair
#    for dataset configuration.
#
proc ::utils::graph::_configure args {
  variable _data
  set type [lindex $args 0]
  set dataset [lindex $args 1]
  set args [lrange $args 2 end]

  set optionList $::utils::graph::_options($type)
  set option {}

  if {[llength $args] % 2} { error "Error: odd-length options list: $args" }

  for {set i 0} {$i < [llength $args]} {incr i 2} {
    set option [lindex $args $i]
    if {[string index $option 0] != "-"} { return [lrange $args $i end] }
    set option [string range $option 1 end]
    if {[lsearch $optionList $option] >= 0} {
      set _data($dataset,$option) [lindex $args [expr {$i + 1}]]
    }
  }
}

# redraw:
#    Redraw the entire graph, axes and data.
#
proc ::utils::graph::redraw {graph} {
  if {! [::utils::graph::isgraph $graph]} { error "$graph: no such graph" }
  if {! [info exists ::utils::graph::_data($graph,canvas)]} { return }
  $::utils::graph::_data($graph,canvas) delete -withtag g$graph
  ::utils::graph::plot_axes $graph
  ::utils::graph::plot_data $graph
}

# plot_axes:
#    Replot the graph axes.
#
proc ::utils::graph::plot_axes {graph} {
  variable _data
  # Set ranges and scaling factors:
  ::utils::graph::set_range $graph
  ::utils::graph::rescale $graph

  set xmin $_data($graph,axmin)
  set xmax $_data($graph,axmax)
  set ymin $_data($graph,aymin)
  set ymax $_data($graph,aymax)

  set xminc [xmap $graph $xmin]
  set xmaxc [xmap $graph $xmax]
  set yminc [ymap $graph $ymin]
  set ymaxc [ymap $graph $ymax]
  #Klimmek: additional space for 6.and 7.number
  set fontsize [font configure font_Small -size]
  if { $ymax > 99999 } { set xminc [expr {$xminc + $fontsize}] }
  if { $ymax > 999999 } { set xminc [expr {$xminc + $fontsize}] }

  set canvas $_data($graph,canvas)
  set tag g$graph

  # Extract the graph attributes we will need to use:
  foreach attr {ticksize font textcolor tickcolor textgap \
                  xtick ytick xlabels ylabels} {
    set $attr $_data($graph,$attr)
  }

  $canvas create rectangle $xminc $yminc $xmaxc $ymaxc -outline $tickcolor \
    -fill $_data($graph,background) -tag $tag

  set brect $_data($graph,brect)
  for {set i 0} {$i < [llength $brect]} {incr i} {
    set item [lindex $brect $i]
    set x1 [xmap $graph [lindex $item 0]]
    set y1 [ymap $graph [lindex $item 1]]
    set x2 [xmap $graph [lindex $item 2]]
    set y2 [ymap $graph [lindex $item 3]]
    if {$x1 < $xminc} { set x1 $xminc }
    if {$x1 > $xmaxc} { set x1 $xmaxc }
    if {$x2 < $xminc} { set x2 $xminc }
    if {$x2 > $xmaxc} { set x2 $xmaxc }
    if {$y1 > $yminc} { set y1 $yminc }
    if {$y1 < $ymaxc} { set y1 $ymaxc }
    if {$y2 > $yminc} { set y2 $yminc }
    if {$y2 < $ymaxc} { set y2 $ymaxc }
    $canvas create rectangle $x1 $y1 $x2 $y2 -fill [lindex $item 4] -width 0 \
      -tag $tag
  }

  # Plot vertical guide lines:
  foreach vline $_data($graph,vline) {
    set color [lindex $vline 0]
    set width [lindex $vline 1]
    set type [lindex $vline 2]
    set inc [lindex $vline 3]
    set xminvalue [xmap $graph $xmin]
    set xmaxvalue [xmap $graph $xmax]
    if {$type == "at"} {
      # Plot just one line:
      set xvalue [xmap $graph $inc]
      if {$xvalue != $xminvalue  &&  $xvalue != $xmaxvalue} {
        $canvas create line $xvalue $yminc $xvalue $ymaxc -width $width \
          -fill $color -tag $tag
      }
    } elseif {$inc > 0} {
      # Plot a line at each multiple of "inc" units:
      set x [expr {int($xmin/$inc) * $inc + $inc}]
      while {$x < $xmax} {
        set xvalue [xmap $graph $x]
        if {$xvalue != $xminvalue  &&  $xvalue != $xmaxvalue} {
          $canvas create line $xvalue $yminc $xvalue $ymaxc -width $width \
            -fill $color -tag $tag
        }
        set x [expr {$x + $inc}]
      }
    }
  }

  # Plot horizontal guide lines:
  foreach hline $_data($graph,hline) {
    set color [lindex $hline 0]
    set width [lindex $hline 1]
    set type [lindex $hline 2]
    set inc [lindex $hline 3]
    set yminvalue [ymap $graph $ymin]
    set ymaxvalue [ymap $graph $ymax]
    if {$type == "at"} {
      set yvalue [ymap $graph $inc]
      if {$yvalue != $yminvalue  &&  $yvalue != $ymaxvalue} {
        $canvas create line $xminc $yvalue $xmaxc $yvalue -width $width \
          -fill $color -tag $tag
      }
    } elseif {$inc > 0} {
      set y [expr {int($ymin/$inc) * $inc + $inc}]
      while {$y < $ymax} {
        set yvalue [ymap $graph $y]
        if {$yvalue != $yminvalue  &&  $yvalue != $ymaxvalue} {
          $canvas create line $xminc $yvalue $xmaxc $yvalue -width $width \
            -fill $color -tag $tag
        }
        set y [expr {$y + $inc}]
      }
    }
  }

  # Plot x ticks and y ticks:
  set nxlabels [llength $xlabels]
  set nylabels [llength $ylabels]

  if {$xtick > 0} {
    set x [expr {int($xmin/$xtick) * $xtick}]
    while {$x < $xmin} { set x [expr {$x + $xtick}] }
    while {$x <= $xmax} {
      set xc [xmap $graph $x]
      $canvas create line $xc $yminc $xc [expr {$yminc - $ticksize}] \
        -tag $tag -fill $tickcolor
      $canvas create line $xc $ymaxc $xc [expr {$ymaxc + $ticksize}] \
        -tag $tag -fill $tickcolor
      if {$nxlabels == 0} {
        $canvas create text $xc [expr {$yminc + $textgap}] -font $font \
          -text [::utils::graph::round $x] -anchor n -tag $tag -fill $textcolor
      }
      set x [expr {$x + $xtick}]
    }
  }
  for {set i 0} {$i < $nxlabels} {incr i} {
    set label [lindex $xlabels $i]
    set x [lindex $label 0]
    set text [lindex $label 1]
    set xc [xmap $graph $x]
    $canvas create text $xc [expr {$yminc + $textgap}] -font $font \
      -text $text -anchor n -tag $tag -fill $textcolor -justify center
  }

  if {$ytick > 0} {
    set y [expr {int($ymin/$ytick) * $ytick}]
    while {$y < $ymin} { set y [expr {$y + $ytick}] }
    while {$y <= $ymax} {
      set yc [ymap $graph $y]
      $canvas create line $xminc $yc [expr {$xminc + $ticksize}] $yc \
        -tag $tag -fill $tickcolor
      $canvas create line [expr {$xmaxc - $ticksize}] $yc $xmaxc $yc \
        -tag $tag -fill $tickcolor
      if {$nylabels == 0} {
        $canvas create text [expr {$xminc - $textgap}] $yc -font $font \
          -text [::utils::graph::round $y] -anchor e -tag $tag -fill $textcolor
      }
      set y [expr {$y + $ytick}]
    }
  }
  for {set i 0} {$i < $nylabels} {incr i} {
    set label [lindex $ylabels $i]
    set y [lindex $label 0]
    set text [lindex $label 1]
    set yc [ymap $graph $y]
    $canvas create text [expr {$xminc - $textgap}] $yc -font $font \
      -text $text -anchor e -tag $tag -fill $textcolor
  }
}

# plot_data:
#    Plot the lines/points/bars for each data set in the graph.
#
proc ::utils::graph::plot_data {graph} {
  variable _data
  set canvas $_data($graph,canvas)

  foreach dataset $_data($graph,sets) {
    set color $_data($graph,$dataset,color)
    set outline $_data($graph,$dataset,outline)
    set tag g$graph
    set coords [scale_data $graph $_data($graph,$dataset,coords)]
    set ncoords [expr {[llength $coords] - 1}]

    # Draw key:
    if {$_data($graph,$dataset,key) != ""} {
      set key $_data($graph,$dataset,key)
      if {$ncoords >= 1} {
        set dy 3
        set anchor nw
        set x [expr {[lindex $coords 0] + 3}]
        set y [lindex $coords 1]
        if {$ncoords >= 3} {
          set nexty [lindex $coords 3]
          if {$nexty > $y} { set dy -3; set anchor sw }
        }
        incr y $dy
        catch {$canvas create text $x $y -fill $color -tag $tag \
                 -text $_data($graph,$dataset,key) \
                 -font $_data($graph,font) -anchor $anchor}
      }
    }

    # Plot line:
    if {$_data($graph,$dataset,lines)} {
      # Catch errors drawing line in case the data set contains no data:
      catch {eval "$canvas create line $coords -fill $color \
                   -width $_data($graph,$dataset,linewidth) -tag $tag"}
    }

    # Plot points:
    if {$_data($graph,$dataset,points)} {
      for {set i 0} {$i < $ncoords} {incr i 2} {
        set x [lindex $coords $i]
        set y [lindex $coords [expr {$i + 1}]]
        set p $_data($graph,$dataset,radius)
        $canvas create oval [expr {$x-$p}] [expr {$y-$p}] \
          [expr {$x+$p}] [expr {$y+$p}] \
          -fill $color -outline $outline -width 1 -tag $tag
      }
    }

    # Plot bars:
    if {$_data($graph,$dataset,bars)} {
      set base [ymap $graph $_data($graph,aymin)]
      set hwidth [xmap $graph $_data($graph,$dataset,barwidth)]
      set hwidth [expr {$hwidth - [xmap $graph 0]}]
      set hwidth [expr {$hwidth / 2}]
      if {$hwidth < 1} { set hwidth 1 }

      for {set i 0} {$i < $ncoords} {incr i 2} {
        set x [lindex $coords $i]
        set y [lindex $coords [expr {$i + 1}]]
        $canvas create rectangle \
          [expr {$x-$hwidth}] $y [expr {$x+$hwidth}] $base \
          -fill $color -outline $outline -tag $tag
      }
    }
  }
}


# round
#
#    Returns a value n rounded to the nearest integer if it is
#    within 0.1 of n, or to one decimal place otherwise.
#    Used to print axis values to a sensible precision.
#
proc ::utils::graph::round {n} {
  set intn [expr {int($n)}]
  if {[expr {$n - $intn}] < 0.1  &&  [expr {$intn - $n}] < 0.1} {
    return [expr {round($n)}]
  }
  return [expr {double(round($n * 10.0)) / 10.0}]
}


# point_visible
#
#    Returns true if a point (in graph coordinates) is visible given
#    the current display boundaries.
#
proc ::utils::graph::point_visible {graph x y} {
  variable data
  set xmin $_data($graph,xtop)
  set ymin $_data($graph,ytop)
  set xmax [expr {$xmin + $_data($graph,width)}]
  set ymax [expr {$ymin + $_data($graph,height)}]

  if {$x >= $xmin && $x <= $xmax && $y >= $ymin && $y <= $ymax} { return 1 }
  return 0
}


# rescale:
#    Sets the scaling factors used for mapping graph to canvas coordinates.
#
proc ::utils::graph::rescale {graph} {
  variable _data
  set width $_data($graph,width)
  set height $_data($graph,height)
  set xdelta [expr {double($_data($graph,axmax) - $_data($graph,axmin))}]
  set ydelta [expr {double($_data($graph,aymax) - $_data($graph,aymin))}]
  # Ensure deltas are not zero or too close to it:
  if {$xdelta < 0.0001} { set xdelta 0.0001 }
  if {$ydelta < 0.0001} { set ydelta 0.0001 }

  set _data($graph,xfac) [expr {double($width)/$xdelta}]
  set _data($graph,yfac) [expr {double($height)/$ydelta}]
}


# xmap:
#    Map a graph X coordinate to its canvas unit equivalent.
#
proc ::utils::graph::xmap {graph x} {
  variable _data
  return [expr {int(($x - $_data($graph,axmin)) * \
            $_data($graph,xfac) + $_data($graph,xtop))}]
}

# ymap:
#    Map a graph Y coordinate to its canvas unit equivalent.
#
proc ::utils::graph::ymap {graph y} {
  variable _data
if {$y == ""} { error "y is empty" }
  return [expr {int(($_data($graph,aymax) - $y) * \
            $_data($graph,yfac) + $_data($graph,ytop))}]
}

# Xunmap:
#    Transform a canvas unit to its graph X coordinate equivalent.
#
proc ::utils::graph::xunmap {graph cx} {
  variable _data
  return [expr {$_data($graph,axmin) + \
            double($cx - $_data($graph,xtop)) / \
            double($_data($graph,xfac))}]
}

# Yunmap:
#    Transform a canvas unit to its graph Y coordinate equivalent.
#
proc ::utils::graph::yunmap {graph cy} {
  variable _data
  return [expr {$_data($graph,aymax) - \
            double($cy - $_data($graph,ytop)) / \
            double($_data($graph,yfac))}]
}

# scale_data:
#    Transforms an even-sized list of graph coordinates to canvas units.
#
proc ::utils::graph::scale_data {graph coords} {
  set result {}
  for {set i 0} {$i < [llength $coords] - 1} {incr i 2} {
    lappend result [xmap $graph [lindex $coords $i]]
    lappend result [ymap $graph [lindex $coords [expr {$i + 1}]]]
  }
  return $result
}

# set_range:
#    Sets any range boundaries that are not already set for a graph.
#
proc ::utils::graph::set_range {graph} {
  variable _data

  set xmin 1000000000; set xmax -100000000
  set ymin 1000000000; set ymax -100000000

  foreach dataset $_data($graph,sets) {
    set coords $_data($graph,$dataset,coords)
    for {set i 0} {$i < [llength $coords] - 1} {incr i 2} {
      set x [lindex $coords $i]
      set y [lindex $coords [expr {$i + 1}]]

      if {$x < $xmin} { set xmin $x }
      if {$x > $xmax} { set xmax $x }
      if {$y < $ymin} { set ymin $y }
      if {$y > $ymax} { set ymax $y }
    }
  }

  # Set sane values if no data coordinates exist at all:
  if {$xmax < $xmin} { set xmin 0; set xmax 1 }
  if {$ymax < $ymin} { set ymin 0; set ymax 1 }

  set xtick $_data($graph,xtick)
  set ytick $_data($graph,ytick)
  set _data($graph,axmin) [expr {floor($xmin/$xtick) * $xtick}]
  set _data($graph,axmax) [expr {floor($xmax/$xtick) * $xtick + $xtick}]
  set _data($graph,aymin) [expr {floor($ymin/$ytick) * $ytick}]
  set _data($graph,aymax) [expr {floor($ymax/$ytick) * $ytick + $ytick}]

  # Explicitly set boundaries override the detected ranges:
  foreach coord {xmin xmax ymin ymax} {
    if {[info exists _data($graph,$coord)]} {
      set _data($graph,a$coord) $_data($graph,$coord)
    }
  }
}

### history.tcl
### Text entry history functions for Scid.
### Copyright (C) 2004 Shane Hudson.

namespace eval ::utils::history {}


set ::utils::history::defaultListLength 10
array set ::utils::history::listLength {}
array set ::utils::history::comboboxWidget {}

if {! [info exists ::utils::history::listData]} {
  array set ::utils::history::listData {}
}

# Load any history lists that were saved in the last session:
catch {source [scidConfigFile history]}


proc ::utils::history::SetList {key list} {
  set ::utils::history::listData($key) $list
}


proc ::utils::history::GetList {key} {
  variable listData
  if {[info exists listData($key)]} {
    return $listData($key)
  }
  return {}
}


#  ::utils::history::AddEntry
#
#   Inserts an entry at the top of the list of the specified key and
#   ensures that only one copy of the entry exists in the list.
#   The list is then pruned to the limit size is necessary.
#
proc ::utils::history::AddEntry {key entry} {
  variable listData
  # We do not add the empty string to a history list:
  if {$entry == "" } {
    return
  }
  
  if {[info exists listData($key)]} {
    # Take out this entry if it exists, so it will not appear twice:
    set index [lsearch -exact $listData($key) $entry]
    if {$index == 0} {
      # The entry is already at the start of the list; nothing to do
      return
    } elseif {$index > 0} {
      set listData($key) [lreplace $listData($key) $index $index]
    }
    set listData($key) [linsert $listData($key) 0 $entry]
    ::utils::history::PruneList $key
  } else {
    set listData($key) [list $entry]
  }
  RefillCombobox $key
  
  if { [llength [GetList $key]] > 0 } {
    set cb [ GetCombobox $key ]
    if { $cb != "" && [winfo exists $cb]} {
      $cb current 0
    }
  }
  
}


proc ::utils::history::SetLimit {key length} {
  set ::utils::history::listLength($key) $length
  ::utils::history::PruneList $key
}


proc ::utils::history::GetLimit {key} {
  variable listLength
  variable defaultListLength
  if {[info exists ::utils::history::listLength($key)]} {
    return $::utils::history::listLength($key)
  }
  return $defaultListLength
}


proc ::utils::history::PruneList {key {length -1}} {
  variable listData
  if {! [info exists listData($key)]} { return }
  if {$length < 0} {
    set length [::utils::history::GetLimit $key]
  }
  set listData($key) [lrange $listData($key) 0 [expr {$length - 1}]]
}



# ::utils::history::SetCombobox
#
#   Returns the combobox widget associated with this history key.
#
proc ::utils::history::GetCombobox {key} {
  variable comboboxWidget
  if {[info exists comboboxWidget($key)]} {
    return $comboboxWidget($key)
  }
  return ""
}


# ::utils::history::SetCombobox
#
#   Associates the specified widget (which must be a megawidget created
#   with ::combobox::combobox, see contrib/combobox.tcl) with the specifiec
#   history key. Whenever the list for this history key is modified, the
#   combobox widget will be updated.
#
proc ::utils::history::SetCombobox {key cbWidget} {
  set ::utils::history::comboboxWidget($key) $cbWidget
  RefillCombobox $key
}


# ::utils::history::SetCombobox
#
#   Refills the history list of the combobox associated with the specified
#   history key, if there is one.
#
proc ::utils::history::RefillCombobox {key} {
  variable comboboxWidget
  
  set cbWidget [GetCombobox $key]
  if {$cbWidget == ""} { return }
  
  # If the combobox widget is part of a dialog which is generated as needed,
  # it may not exist right now:
  if {! [winfo exists $cbWidget]} { return }
  
  $cbWidget delete 0 end
  set entries [GetList $key]
  $cbWidget configure -values $entries
}


# ::utils::history::Save
#   Saves the combobox history file, reporting any error in a message box
#   if reportError is true.
#
proc ::utils::history::Save {{reportError 0}} {
  variable listData
  
  set f {}
  set filename [scidConfigFile history]
  
  if  {[catch {open $filename w} f]} {
    if {$reportError} {
      tk_messageBox -title "Scid" -type ok -icon warning \
          -message "Unable to write file: $filename\n$f"
    }
    return
  }
  
  puts $f "# Scid [sc_info version] combobox history lists"
  puts $f ""
  foreach i [lsort [array names listData]] {
    puts $f "set ::utils::history::listData($i) [list $listData($i)]"
  }
  close $f
}

# The following paned window code is loosely based on code from the book:
#
#  Effective Tcl/Tk Programming
#     Mark Harrison, DSC Communications Corp.
#     Michael McLennan, Bell Labs Innovations for Lucent Technologies
#     Addison-Wesley Professional Computing Series
#  Copyright (c) 1996-1997  Lucent Technologies Inc. and Mark Harrison
#
# Many modifications and improvements for use in Scid have been made,
# including namespacing the code.

namespace eval ::utils::pane {}

array set ::utils::pane::_data {}

# Create
#
#   Create a paned window.
#
proc ::utils::pane::Create {win pane1 pane2 width height {ratio 0.5} {orient vert}} {
  variable _data
  set _data($win,1) $pane1
  set _data($win,2) $pane2
  set _data($win,drag) 1
  set vertical 1
  if {[string index $orient 0] == "h"} { set vertical 0 }
  set _data($win,vertical) $vertical
  # Default minimum size of each frame is 10%:
  set _data($win,min) 0.1
  set _data($win,max) 0.9

  frame $win -width $width -height $height
  frame $win.$pane1
  frame $win.$pane2
  if {$vertical} {
    place $win.$pane1 -relx 0.5 -rely 0 -anchor n -relwidth 1.0 -relheight 0.5
    place $win.$pane2 -relx 0.5 -rely 1 -anchor s -relwidth 1.0 -relheight 0.5

    frame $win.pane_sash -height 2 -borderwidth 2 -relief groove \
      -cursor sb_v_double_arrow ;# -background black
    place $win.pane_sash -relx 0.5 -rely 0.5 -relwidth 1.0 -anchor c

    frame $win.pane_grip -width 20 -height 7 -borderwidth 1 -relief solid \
      -cursor sb_v_double_arrow -background gray
    place $win.pane_grip -relx 0.95 -rely 0.5 -anchor c
  } else {
    place $win.$pane1 -relx 0 -rely 0.5 -anchor w -relwidth 0.5 -relheight 1.0
    place $win.$pane2 -relx 1 -rely 0.5 -anchor e -relwidth 0.5 -relheight 1.0

    frame $win.pane_sash -width 1 -borderwidth 1 -relief flat \
      -cursor sb_h_double_arrow -background black
    place $win.pane_sash -relx 0.5 -rely 0.5 -relheight 1.0 -anchor c

    frame $win.pane_grip -height 20 -width 7 -borderwidth 1 -relief solid \
      -cursor sb_h_double_arrow -background gray
    place $win.pane_grip -relx 0.5 -rely 0.95 -anchor c
  }

  #bind $win.pane_grip <Enter>           "::utils::pane::Enter $win"
  #bind $win.pane_grip <Leave>           "::utils::pane::Leave $win"
  #bind $win.pane_sash <Enter>           "::utils::pane::Enter $win"
  #bind $win.pane_sash <Leave>           "::utils::pane::Leave $win"

  if {$vertical} { set c "%Y" } else { set c "%X" }
  bind $win.pane_grip <ButtonPress-1>   "::utils::pane::Grab $win"
  bind $win.pane_grip <B1-Motion>       "::utils::pane::Drag $win $c"
  bind $win.pane_grip <ButtonRelease-1> "::utils::pane::Drop $win $c"
  bind $win.pane_sash <ButtonPress-1>   "::utils::pane::Grab $win"
  bind $win.pane_sash <B1-Motion>       "::utils::pane::Drag $win $c"
  bind $win.pane_sash <ButtonRelease-1> "::utils::pane::Drop $win $c"

  ::utils::pane::Divide $win $ratio
  return $win
}

proc ::utils::pane::SetDrag {win bool} {
  set ::utils::pane::_data($win,drag) $bool
}

proc ::utils::pane::SetRange {win min max} {
  set ::utils::pane::_data($win,min) $min
  set ::utils::pane::_data($win,max) $max
}

proc ::utils::pane::Enter {win} {
  $win.pane_sash configure -background yellow
  $win.pane_grip configure -background yellow
}

proc ::utils::pane::Leave {win} {
  $win.pane_sash configure -background black
  $win.pane_grip configure -background black
}

proc ::utils::pane::Grab {win} {
  $win.pane_sash configure -background red
  $win.pane_grip configure -background red
}

proc ::utils::pane::Drag {win y} {
  variable _data
  set vertical $_data($win,vertical)
  if {$vertical} {
    set realY [expr {$y-[winfo rooty $win]}]
    set Ymax  [winfo height $win]
  } else {
    set realY [expr {$y-[winfo rootx $win]}]
    set Ymax  [winfo width $win]
  }
  set frac [expr {double($realY) / $Ymax}]
  if {$frac < $_data($win,min)} {set frac $_data($win,min)}
  if {$frac > $_data($win,max)} {set frac $_data($win,max)}

  if {$_data($win,drag)} {
    ::utils::pane::Divide $win $frac
  } else {
    if {$vertical} {
      place $win.pane_sash -rely $frac
      place $win.pane_grip -rely $frac
    } else {
      place $win.pane_sash -relx $frac
      place $win.pane_grip -relx $frac
    }
  }
  return $frac
}

proc ::utils::pane::Drop {win y} {
  set frac [::utils::pane::Drag $win $y]
  ::utils::pane::Divide $win $frac
  $win.pane_sash configure -background black
  $win.pane_grip configure -background gray
}

proc ::utils::pane::Divide {win frac} {
  if {$::utils::pane::_data($win,vertical)} {
    place $win.pane_sash -rely $frac
    place $win.pane_grip -rely $frac
    place $win.$::utils::pane::_data($win,1) -relheight $frac
    place $win.$::utils::pane::_data($win,2) -relheight [expr {1.0 - $frac}]
  } else {
    place $win.pane_sash -relx $frac
    place $win.pane_grip -relx $frac
    place $win.$::utils::pane::_data($win,1) -relwidth $frac
    place $win.$::utils::pane::_data($win,2) -relwidth [expr {1.0 - $frac}]
  }
}
### sound.tcl
### Functions for playing sound files to announce moves.
### Part of Scid. Copyright (C) Shane Hudson 2004.
###
### Uses the free Tcl/Tk sound package "Snack", which comes with
### most Tcl distributions. See http://www.speech.kth.se/snack/

### when an other application uses the audio device, no sound can be played. Forces a reset of pending sounds after 5 seconds
### which limits the maximum length of a playable sound

namespace eval ::utils::sound {}

set ::utils::sound::hasSnackPackage 0
set ::utils::sound::isPlayingSound 0
set ::utils::sound::soundQueue {}
set ::utils::sound::soundFiles [list \
    King Queen Rook Bishop Knight CastleQ CastleK Back Mate Promote Check \
    a b c d e f g h x 1 2 3 4 5 6 7 8 move alert]

# soundMap
#
#   Maps characters in a move to sounds.
#   Before this map is used, "O-O-O" is converted to "q" and "O-O" to "k"
#   Also note that "U" (undo) is used for taking back a move.
#
array set ::utils::sound::soundMap {
  K King Q Queen R Rook B Bishop N Knight k CastleK q CastleQ
  x x U Back # Mate = Promote  + Check alert alert
  a a b b c c d d e e f f g g h h
  1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8
} 


# ::utils::sound::Setup
#
#   Called once at startup to load the Snack package and set up sounds.
#
proc ::utils::sound::Setup {} {
  variable hasSnackPackage
  variable soundFiles
  variable soundFolder
  
  ::splash::add "Setting up audio move announcement..."
  if {[catch {package require snack 2.0}]} {
    set hasSnackPackage 0
    ::splash::add "    Move speech disabled - Snack sound package not found"
    return
  }
  
  ::splash::add "    Move speech enabled - Snack sound package found"
  set hasSnackPackage 1
  
  # Set up sounds. Each sound will be empty until a WAV file for it is found.
  foreach soundFile $soundFiles {
    ::snack::sound sound_$soundFile
  }
  
  set numSounds [::utils::sound::ReadFolder]
  set numSought [llength $soundFiles]
  ::splash::add "Searching sounds folder for move announcement sounds..."
  ::splash::add "   Found $numSounds of $numSought sound files in $soundFolder"
}


# ::utils::sound::ReadFolder
#
#   Reads sound files from the specified directory.
#   Returns the number of Scid sound files found in that directory.
#
proc ::utils::sound::ReadFolder {{newFolder ""}} {
  variable soundFiles
  variable soundFolder
  
  if {$newFolder != ""} { set soundFolder "" }
  
  set count 0
  foreach soundFile $soundFiles {
    set f [file join $soundFolder $soundFile.wav]
    if {[file readable $f]} {
      sound_$soundFile configure -file $f
      incr count
    }
  }
  return $count
}



proc ::utils::sound::AnnounceMove {move} {
  variable hasSnackPackage
  variable soundMap
  
  if {! $hasSnackPackage} { return }
  
  if {[string range $move 0 4] == "O-O-O"} { set move q }
  if {[string range $move 0 2] == "O-O"} { set move k }
  set move [::untrans $move]
  set parts [split $move ""]
  set soundList {}
  foreach part $parts {
    if {[info exists soundMap($part)]} {
      lappend soundList sound_$soundMap($part)
    }
  }
  if {[llength $soundList] > 0} {
    CancelSounds
    foreach s $soundList {
      PlaySound $s
    }
  }
}


proc ::utils::sound::AnnounceNewMove {move} {
  if {$::utils::sound::announceNew} { AnnounceMove $move }
}


proc ::utils::sound::AnnounceForward {move} {
  if {$::utils::sound::announceForward} { AnnounceMove $move }
}


proc ::utils::sound::AnnounceBack {} {
  if {$::utils::sound::announceBack} { AnnounceMove U }
}


proc ::utils::sound::SoundFinished {} {
  after cancel ::utils::sound::CancelSounds
  set ::utils::sound::isPlayingSound 0
  CheckSoundQueue
}


proc ::utils::sound::CancelSounds {} {
  if {! $::utils::sound::hasSnackPackage} { return }
  
  snack::audio stop
  set ::utils::sound::soundQueue {}
  set ::utils::sound::isPlayingSound 0
}

################################################################################
#
################################################################################
proc ::utils::sound::PlaySound {sound} {
  if {! $::utils::sound::hasSnackPackage} { return }
  lappend ::utils::sound::soundQueue $sound
  after idle ::utils::sound::CheckSoundQueue
}

# ::utils::sound::CheckSoundQueue
#
#   Starts playing the next available sound, if there is one waiting
#   and no sound is currently playing. Called whenever a sound is
#   added to the queue or a sound has finished playing.
#
proc ::utils::sound::CheckSoundQueue {} {
  variable soundQueue
  variable isPlayingSound
  if {$isPlayingSound} { return }
  if {[llength $soundQueue] == 0} { return }
  
  set next [lindex $soundQueue 0]
  set soundQueue [lrange $soundQueue 1 end]
  set isPlayingSound 1
  catch { $next play -blocking 0 -command ::utils::sound::SoundFinished }
  after 5000 ::utils::sound::CancelSounds
}


# ::utils::sound::OptionsDialog
#
#   Dialog window for configuring move sounds.
#
#   TODO: language translations for this dialog.
#
proc ::utils::sound::OptionsDialog {} {
  set w .soundOptions
  
  foreach v {soundFolder announceNew announceForward announceBack} {
    set ::utils::sound::${v}_temp [set ::utils::sound::$v]
  }
  
  toplevel $w
  wm title $w "Scid: Sound Options"
  # wm transient $w .
  
  
  label $w.status -text ""
  if {! $::utils::sound::hasSnackPackage} {
    $w.status configure -text "Scid could not find the Snack audio package at startup; Sound is disabled."
    pack $w.status -side bottom
  }
  pack [frame $w.b] -side bottom -fill x -pady 2
  pack [frame $w.f -relief groove -borderwidth 2] \
      -side top -fill x -padx 5 -pady 5 -ipadx 4 -ipady 4
  
  set f $w.f
  set r 0
  
  label $f.ftitle -text $::tr(SoundsFolder) -font font_Bold
  grid $f.ftitle -row $r -column 0 -columnspan 3 -pady 4
  incr r
  
  entry $f.folderEntry -width 40 -textvariable ::utils::sound::soundFolder_temp
  grid $f.folderEntry -row $r -column 0 -columnspan 2 -sticky we
  button $f.folderBrowse -text " $::tr(Browse)... " \
      -command ::utils::sound::OptionsDialogChooseFolder
  grid $f.folderBrowse -row $r -column 2
  incr r
  
  label $f.folderHelp -text $::tr(SoundsFolderHelp)
  grid $f.folderHelp -row $r -column 0 -columnspan 3
  incr r
  
  grid [frame $f.gap$r -height 5] -row $r -column -0; incr r
  
  label $f.title -text $::tr(SoundsAnnounceOptions) -font font_Bold
  grid $f.title -row $r -column 0 -columnspan 3 -pady 4
  incr r
  
  checkbutton $f.announceNew -text $::tr(SoundsAnnounceNew) \
      -variable ::utils::sound::announceNew_temp
  grid $f.announceNew -row $r -column 0 -columnspan 2 -sticky w
  incr r
  
  grid [frame $f.gap$r -height 5] -row $r -column -0; incr r
  
  checkbutton $f.announceForward -text $::tr(SoundsAnnounceForward) \
      -variable ::utils::sound::announceForward_temp
  grid $f.announceForward -row $r -column 0 -columnspan 2 -sticky w
  incr r
  
  grid [frame $f.gap$r -height 5] -row $r -column -0; incr r
  
  checkbutton $f.announceBack -text $::tr(SoundsAnnounceBack) \
      -variable ::utils::sound::announceBack_temp
  grid $f.announceBack -row $r -column 0 -columnspan 2 -sticky w
  incr r
  
  dialogbutton $w.b.ok -text OK -command ::utils::sound::OptionsDialogOK
  dialogbutton $w.b.cancel -text $::tr(Cancel) -command [list destroy $w]
  packbuttons right $w.b.cancel $w.b.ok
  bind $w <Return> [list $w.b.ok invoke]
  bind $w <Escape> [list $w.b.cancel invoke]
  ::utils::win::Centre $w
  wm resizable $w 0 0
  raiseWin $w
  grab $w
  focus $w.f.folderEntry
}

proc ::utils::sound::OptionsDialogChooseFolder {} {
  set newFolder [tk_chooseDirectory \
      -initialdir $::utils::sound::soundFolder_temp \
      -parent .soundOptions \
      -title "Scid: $::tr(SoundsFolder)"]
  if {$newFolder != ""} {
    set ::utils::sound::soundFolder_temp [file nativename $newFolder]
  }
}

proc ::utils::sound::OptionsDialogOK {} {
  variable soundFolder
  
  # Destroy the Sounds options dialog
  set w .soundOptions
  catch {grab release $w}
  destroy $w
  
  set isNewSoundFolder 0
  if {$soundFolder != $::utils::sound::soundFolder_temp} {
    set isNewSoundFolder 1
  }
  
  # Update the user-settable sound variables:
  foreach v {soundFolder announceNew announceForward announceBack} {
    set ::utils::sound::$v [set ::utils::sound::${v}_temp]
  }
  
  # If the user selected a different folder to look in, read it
  # and tell the user how many sound files were found there.
  
  if {$isNewSoundFolder  &&  $soundFolder != ""} {
    set numSoundFiles [::utils::sound::ReadFolder]
    tk_messageBox -title "Scid: Sound Files" -type ok -icon info \
        -message "Found $numSoundFiles of [llength $::utils::sound::soundFiles] sound files in $::utils::sound::soundFolder"
  }
}


# Read the sound files at startup:

::utils::sound::Setup

# ::utils::string::Surname
#
#   Returns the surname of a player name.
#
proc ::utils::string::Surname {name} {
  set idx [string first "," $name]
  if {$idx > 0} { set name [string range $name 0 [expr {$idx - 1} ]] }
  return $name
}


proc ::utils::string::CityName {siteName} {
  regsub { [A-Z][A-Z][A-Z]$} $siteName "" siteName
  return [string trim [::utils::string::Surname $siteName]]
}


# ::utils::string::Capital
#
#    Returns a string with the first character capitalised.
#
proc ::utils::string::Capital {str} {
  set s [string toupper [string index $str 0]]
  append s [string range $str 1 end]
  return $s
}

# PadLeft
#
#   Given a string and a length, pads the string with padChar to have
#   the required length.
#
proc ::utils::string::PadLeft {str length {padChar " "}} {
  set s $str
  for {set actual [string length $s]} {$actual < $length} {incr actual} {
    append s $padChar
  }
  return $s
}

# Pad
#
#   Same as PadLeft.
#
proc ::utils::string::Pad {str length {padChar " "}} {
  return [::utils::string::PadLeft $str $length $padChar]
}

# PadRight
#
#   Like PadLeft, but adds the padding characters to the start of the string.
#
proc ::utils::string::PadRight {str length {padChar " "}} {
  set s $str
  for {set actual [string length $s]} {$actual < $length} {incr actual} {
    set s "$padChar$s"
  }
  return $s
}

# PadCenter
#
#   Like PadLeft and PadRight, but centers the specified string.
#
proc ::utils::string::PadCenter {str length {padChar " "}} {
  set pre 1
  set s $str
  for {set actual [string length $s]} {$actual < $length} {incr actual} {
    if {$pre} {
      set s "$padChar$s"
      set pre 0
    } else {
      append s $padChar
      set pre 1
    }
  }
  return $s
}

###
#
# ToolTips
#

namespace eval ::utils::tooltip {}

set ::utils::tooltip::showToolTips 1
set ::utils::tooltip::time 0
set ::utils::tooltip::enteredWidget {}
set ::utils::tooltip::tooltipDelay 400
set ::utils::tooltip::tooltipWidth 30

array set ::utils::tooltip::message {}

# Construct tooltip window:
#
toplevel .tooltip
label .tooltip.text -relief solid -borderwidth 1 -justify left \
    -background #f5f5f5 -padx 3 -pady 1 -font font_Tiny
pack .tooltip.text -side left
wm overrideredirect .tooltip 1
if { $macOS }  {
  ::tk::unsupported::MacWindowStyle style .tooltip help none
}
bind .tooltip <Button-1> { wm withdraw .tooltip }
wm withdraw .tooltip


# ::utils::tooltip::Set
#
#   Set the tooltip message for <button> to be <msg>
#
proc ::utils::tooltip::Set { button msg } {
  variable message
  set msg [string trim $msg]
  if {$msg == ""} { return }
  regsub {\\n} $msg "\n" msg
  set msg [::utils::tooltip::trimWidth $msg]
  set message($button) $msg
  bind $button <Any-Enter> +[list ::utils::tooltip::Enter $button]
  bind $button <Any-Leave> +[list ::utils::tooltip::Leave $button]
}

# ::utils::tooltip::SetTag
#
#   remove a tooltip message for a given button
#
proc ::utils::tooltip::UnSet { button } {
  variable message
  if { [info exists ::utils::tooltip::message($button)] } {
	  unset message($button)
	  bind $button <Any-Enter> ""
	  bind $button <Any-Leave> ""
  }
}

# ::utils::tooltip::SetTag
#
#   Set the tooltip message for a text with tag <tag> to be <msg>
#
proc ::utils::tooltip::SetTag { text_widget msg tag } {
  variable message
  set msg [string trim $msg]
  if {$msg == ""} { return }
  regsub {\\n} $msg "\n" msg
  set msg [::utils::tooltip::trimWidth $msg]
  set message(${tag}_$text_widget) $msg
  $text_widget tag bind $tag <Any-Enter> +[list ::utils::tooltip::Enter ${tag}_$text_widget]
  $text_widget tag bind $tag <Any-Leave> +[list ::utils::tooltip::Leave ${tag}_$text_widget]
}

# ::utils::tooltip::Enter
#
#   Handles the mouse entering a button which has a tooltip.
#
proc ::utils::tooltip::Enter {button} {
  variable showToolTips
  variable enteredWidget
  variable tooltipDelay
  
  if {! $showToolTips} { return }
  set enteredWidget $button
  after $tooltipDelay [list ::utils::tooltip::Check $button]
}


# ::utils::tooltip::Check
#
#   Called a set time after the mouse has entered a button with a
#   tooltip, to check if it is still there. If so, the tooltip
#   message is displayed.
#
proc ::utils::tooltip::Check {button} {
  variable enteredWidget
  
  if {$enteredWidget != $button} {
    # The mouse cursor has moved somewhere else; display no tooltip
    return
  }
  
  if {! [info exists ::utils::tooltip::message($button)]} { return }
  
  .tooltip.text configure -text [tr $::utils::tooltip::message($button)]
  set x [winfo pointerx .]
  set y [winfo pointery .]
  incr x 10
  incr y 4
  catch {wm transient .tooltip [winfo toplevel $button]}
  
  # make the tooltip visible
  set maxw [ winfo vrootwidth .]
  set maxh [ winfo vrootheight .]
  set w [winfo reqwidth .tooltip]
  set h [winfo reqheight .tooltip]
  if { [expr $x + $w] > $maxw } {
    set x [expr $maxw - $w]
  }
  if { [expr $y + $h] > $maxh } {
    set y [expr $maxh - $h]
  }
  
  catch {wm geometry .tooltip +$x+$y}
  wm deiconify .tooltip
  raise .tooltip
  
  # Automatically erase tooltip after a short delay
  after 15000 [ list ::utils::tooltip::Leave $button ]
}


# ::utils::tooltip::Leave
#
#   Handles the mouse leaving a button which has a tooltip.
#
proc ::utils::tooltip::Leave {button} {
  after cancel [ list ::utils::tooltip::Leave $button ]
  variable showToolTips
  if {! $showToolTips} { return }
  wm withdraw .tooltip
  after cancel [list ::utils::tooltip::Check $button]
}

# ::utils::tooltip::ToWidth
#
#   Returns the arg with CR every tooltipWidth chars at most
#
proc ::utils::tooltip::trimWidth { msg } {
  set ret ""
  foreach line [split $msg "\n"] {
    
    if {[string length $line] < $::utils::tooltip::tooltipWidth} {
      append ret "$line\n"
      continue
    } else  {
      # must split the line
      set words [split $line " "]
      
      while {[llength $words] > 0} {
        set tmp [lindex $words 0]
        set words [lreplace $words 0 0]
        while {[string length "$tmp [lindex $words 0]"] < $::utils::tooltip::tooltipWidth && [llength $words] > 0} {
          append tmp " " [lindex $words 0]
          set words [lreplace $words 0 0]
        }
        append ret $tmp "\n"
      }
      
    }
  }
  return [string trim $ret]
}


# ::utils::validate::Integer
#
#   Used to check the size of integers in entry boxes.
#
proc ::utils::validate::Integer {maxValue allowQuestionMarks name el op} {
  global $name ${name}_old
  if {[string comp {} $el]} {
    set old  ${name}_old\($el\)
    set name $name\($el\)
  } else {
    set old ${name}_old
  }

  if {$allowQuestionMarks > 0} {
    if {[regexp {^\?*$} [set $name]]} {
      # Accept this value:
      set $old [set $name]
      return
    }
  }

  # Only non-negative integers up to maxValue are allowed, unless the
  # value is negative:
  set allowNegatives 0
  if {$maxValue < 0} {
    set allowNegatives 1
    set maxValue [expr {0 - $maxValue}]
  }

  if {$allowNegatives} {
    if {![regexp {^[-+]?[0-9]*$} [set $name]]} {
      set $name [set $old]
      bell
      return
    }
  } else {
    if {![regexp {^[+]?[0-9]*$} [set $name]]} {
      set $name [set $old]
      bell
      return
    }
  }
  if {[set $name] > $maxValue} {
    set $name [set $old]
    bell
    return
  }
  #if {[expr {0 - [set $name]}] < [expr {0 - $maxValue}]} {
  #  set $name [set $old]
  #  bell
  #  return
  #}
  set $old [set $name]
}



# ::utils::validate::Date
#
#    Used to check the validity of a date string as it is entered.
#
proc ::utils::validate::Date {name el op} {
  global $name ${name}_old
  set old ${name}_old
  if {![sc_info validDate [set $name]]} {
    set $name [set $old]
    bell
    return
  }
  set $old [set $name]
}

# ::utils::validate::Result
#
#    Used to check the validity of a result entrybox value.
#    Result can be empty, "1", "0", "=", or "*".
#
proc ::utils::validate::Result {name el op} {
  global $name ${name}_old
  set old ${name}_old
  if {![regexp {^[1|0|=|\*]?$} [set $name]]} {
    set $name [set $old]
    bell
    return
  }
  set $old [set $name]
}

# ::utils::validate::Alpha
#
#    Used to check that an entrybox contains only letters.
#
proc ::utils::validate::Alpha {name el op} {
  global $name ${name}_old
  set old ${name}_old
  if {![regexp {^[A-Za-z]*$} [set $name]]} {
    set $name [set $old]
    bell
    return
  }
  set $old [set $name]

}

# ::utils::validate::Regexp
#
#    Used to check the validity of an entrybox given a regular expression.
#    Used to verify a file is "a-h", for example.
#
proc ::utils::validate::Regexp {expression name el op} {
  global $name ${name}_old
  set old ${name}_old
  if {![regexp $expression [set $name]]} {
    set $name [set $old]
    bell
    return
  }
  set $old [set $name]
}

# ::utils::validate::roundScale
# will round var to the next integer which is a multiple of tickinterval
# given its current value
proc ::utils::validate::roundScale { var tickinterval value } {
  set $var [expr int($value/$tickinterval ) * $tickinterval]
}

# ::utils::validate::floatScale
# returns a float value with 1 decimal
proc ::utils::validate::floatScale { var tickinterval value } {
  set $var [format "%.1f" [expr ($value/$tickinterval ) * $tickinterval] ]
}

# ::utils::win::Centre
#
#   Centres a window on the screen.
#
proc ::utils::win::Centre {w} {
  if { $::docking::USE_DOCKING } { return }
  wm withdraw $w
  update idletasks
  set x [expr {[winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \
        - [winfo vrootx .]}]
  set y [expr {[winfo screenheight $w]/2 - [winfo reqheight $w]/2 \
        - [winfo vrooty .]}]
  wm geom $w +$x+$y
  wm deiconify $w
}

################################################################################
#
#     DockingFramework
#
#     Code is inspired by
#     http://wiki.tcl.tk/21846
#     which is published under BSD license
#
################################################################################

namespace eval docking {
  # associates notebook to paned window
  variable tbs
  
  # keep tracks of active tab for each notebook
  array set activeTab {}
  # associates notebook with a boolean value indicating the tab has changed
  array set changedTab {}
  
  variable tbcnt 0
  array set notebook_name {}
  
  # redraw takes some time : skip some events
  variable lastConfigureEvent 0
  variable deltaConfigureEvent 400
  
  # set to 1 to inhibit autostart of engines when restoring the default layout at startup
  set restore_running 0
}

################################################################################
proc ::docking::handleConfigureEvent { cmd } {
  variable lastConfigureEvent
  variable deltaConfigureEvent
  
  after cancel "eval $cmd"
  set t [clock clicks -milliseconds]
  
  if {  [expr $t - $lastConfigureEvent ] < $deltaConfigureEvent } {
    after [ expr $deltaConfigureEvent + $lastConfigureEvent -$t ] "eval $cmd"
  } else  {
    set lastConfigureEvent $t
    eval $cmd
    # Necessary on MacOs to refresh user interface
    # update idletasks
  }
}
################################################################################
# find notebook, corresponding to path
proc ::docking::find_tbn {path} {
  variable tbs
  
  if {$path==""} { return $path }
  # already a managed notebook?
  if {[info exists tbs($path)]} {
    return $path
  }
  # managed notebooks have the form .toplevel.tbn#
  # pages within notebooks should also have the path .toplevel.page#
  set spath [split $path "."]
  if {[winfo toplevel $path]=="."} {
    set path [join [lrange $path 0 1] "."]
  } else {
    set path [join [lrange $path 0 2] "."]
  }
  
  # is it a managed notebook?
  if {[info exists tbs($path)]} {
    return $path
  }
  
  # try to find notebook that manages this page
  foreach tb [array names tbs] {
    if {[get_class $tb] != "TNotebook"} {
      continue
    }
    if {[lsearch -exact [$tb tabs] $path]>=0} {
      return $tb
    }
  }
  
  return {}
}

################################################################################
# added paned window of other direction, move a notebook there and create a new notebook
proc ::docking::embed_tbn {tbn anchor} {
  variable tbcnt
  variable tbs
  set pw $tbs($tbn)
  if {$anchor=="w" || $anchor=="e"} {
    set orient "horizontal"
  } else {
    set orient "vertical"
  }
  # create new paned window
  set npw [ttk::panedwindow $pw.pw$tbcnt -orient $orient  ]
  incr tbcnt
  # move old notebook
  set i [lsearch -exact [$pw panes] $tbn]
  $pw forget $tbn
  if {$i>=[llength [$pw panes]]} {
    $pw add $npw -weight 1
  } else {
    $pw insert $i $npw -weight 1
  }
  # add new notebook
  set ntb [ttk::notebook [winfo toplevel $pw].tb$tbcnt]
  incr tbcnt
  set tbs($tbn) $npw
  set tbs($ntb) $npw
  # make sure correct order
  if {$anchor=="n" || $anchor=="w"} {
    $npw add $ntb -weight 1
    $npw add $tbn -weight 1
  } else {
    $npw add $tbn -weight 1
    $npw add $ntb -weight 1
  }
  return $ntb
}

################################################################################
# add a new notebook to the side anchor of the notebook tbn
proc ::docking::add_tbn {tbn anchor} {
  variable tbcnt
  variable tbs
  
  set pw $tbs($tbn)
  set orient [$pw cget -orient]
  
  # if orientation of the uplevel panedwindow is consistent with anchor, just add the pane
  if {$orient=="horizontal" && ($anchor=="w" || $anchor=="e")} {
    set i [lsearch -exact [$pw panes] $tbn]
    if {$anchor=="e"} { incr i }
    set tbn [ttk::notebook [winfo toplevel $pw].tb$tbcnt]
    incr tbcnt
    set tbs($tbn) $pw
    if {$i>=[llength [$pw panes]]} {
      $pw add $tbn -weight 1
    } else {
      $pw insert $i $tbn -weight 1
    }
  } elseif {$orient=="vertical" && ($anchor=="n" || $anchor=="s")} {
    set i [lsearch -exact [$pw panes] $tbn]
    if {$anchor=="s"} { incr i}
    set tbn [ttk::notebook [winfo toplevel $pw].tb$tbcnt]
    incr tbcnt
    set tbs($tbn) $pw
    if {$i>=[llength [$pw panes]]} {
      $pw add $tbn -weight 1
    } else {
      $pw insert $i $tbn -weight 1
    }
  } else {
    # orientation of the uplevel panedwindow is opposite to the anchor
    # need to add new panedwindow
    set tbn [embed_tbn $tbn $anchor]
  }
  return $tbn
}

################################################################################
proc ::docking::get_class {path} {
  if {![winfo exists $path]} {
    return ""
  }
  return [lindex [bindtags $path] 1]
}

################################################################################
# always keep .pw paned window
proc ::docking::_cleanup_tabs {srctab} {
  variable tbs
  
  # if srctab is empty, then remove it
  if {[llength [$srctab tabs]]==0} {
    destroy $srctab
    set pw $tbs($srctab)
    unset tbs($srctab)
    
    while {[llength [$pw panes]]==0} {
      set parent [winfo parent $pw]
      
      if {$pw == ".pw"} {
        break
      }
      destroy $pw
      set pw $parent
    }
    
  }
}
################################################################################
# cleans up a window when it was closed without calling the notebook menu
proc ::docking::cleanup { w { origin "" } } {
  variable tbs
  
  if { ! $::docking::USE_DOCKING } { return }

  # if the destroy event came from a sub-widget, do nothing. Necessary because if a widget is destroyed, it sends a destroy event to
  # its containing window
  if { [ string last "." $origin ] > 0 } {
    return
  }
  
  set dockw ".fdock[string range $w 1 end]"
  
  catch {
    bind $w <Destroy> {}
    bind $dockw <Destroy> {}
  }
  
  # Maybe during Scid closing, some race conditions lead to exceptions ? In case, catch this by default
  catch {
    foreach nb [array names tbs] {
      if { [lsearch  [$nb tabs] $dockw ] != -1 } {
        $nb forget $dockw
        destroy $dockw
        ::docking::_cleanup_tabs $nb
        return
      }
    }
  }
  
  # Make sure the frame is destroyed
  if { [winfo exists $dockw]} {
    destroy $dockw
  }
  
  array unset ::docking::notebook_name $dockw
  
}
################################################################################
proc ::docking::isUndocked { w } {
  set w ".fdock[string range $w 1 end]"
  return [info exists ::docking::notebook_name($w)]
}
################################################################################
proc ::docking::move_tab {srctab dsttab} {
  variable tbs
  # move tab
  set f [$srctab select]
  set o [$srctab tab $f]
  $srctab forget $f
  eval $dsttab add $f $o
  raise $f
  $dsttab select $f
  _cleanup_tabs $srctab
}

variable ::docking::c_path {}

################################################################################
proc ::docking::start_motion {path} {
  variable c_path
  if {[winfo exists .ctxtMenu]} {
    destroy .ctxtMenu
  }
  if {$path!=$c_path} {
    set c_path [find_tbn $path]
  }
}
################################################################################
proc ::docking::motion {path} {
  variable c_path
  if {$c_path==""} { return }
  
  $c_path configure -cursor exchange
}
################################################################################
proc ::docking::end_motion {w x y} {
  variable c_path
  
  bind TNotebook <ButtonRelease-1> [namespace code {::docking::show_menu %W %X %Y}]
  
  if {$c_path==""} { return }
  set path [winfo containing $x $y]
  if {$path == ""} {
    return
  }
  $path configure -cursor {}
  
  set t [find_tbn $path]
  if {$t!=""} {
    if {$t==$c_path} {
      # we stayed on the same notebook, so display the menu
      show_menu $w $x $y
      
      if {[$c_path identify [expr $x-[winfo rootx $c_path]] [expr $y-[winfo rooty $c_path]]]!=""} {
        set c_path {}
        return
      }
    }
    if {$t!=$c_path} {
      move_tab $c_path $t
    }
  }
  set c_path {}
  
  setTabStatus
  
}
################################################################################
proc ::docking::show_menu { path x y} {
  variable c_path
  
  if {[winfo exists .ctxtMenu]} {
    destroy .ctxtMenu
  }
  
  if {$path!=$c_path} {
    set c_path [find_tbn $path]
  }
  
  # HACK ! Because notebooks may also be used inside internal windows
  if {! [info exists ::docking::changedTab($c_path)] } {
    return
  }
  
  # display window's menu (workaround for windows where the menu
  # of embedded toplevels is not displayed. The menu must be of the form $w.menu
  
  # if the tab has changed, don't display the menu at once (wait a second click)
  if { $::docking::changedTab($c_path) == 1 } {
    set ::docking::changedTab($c_path) 0
  } else  {
    # the tab was already active, show the menu
    set f [$c_path select]
    set m [getMenu $f]
    if { [winfo exists $m] } {
      tk_popup $m [winfo pointerx .] [winfo pointery .]
    }
  }
  
}
################################################################################
# returns the menu name of a toplevel window (must be in the form $w.menu)
# f is the frame embedding the toplevel (.fdock$w)
proc  ::docking::getMenu  {f} {
  if { [scan $f ".fdock%s" tl] != 1 || $f == ".fdockmain"} {
    return ""
  }
  return ".$tl.menu"
}
################################################################################
# Toggles menu visibility
# f is the frame embedding the toplevel (.fdock$w)
proc ::docking::setMenuVisibility  { f show } {
  
  if { [scan $f ".fdock%s" tl] != 1 || $f == ".fdockmain"} {
    return
  }
  set tl ".$tl"
  
  if { $show == "true" || $show == "1" } {
    $tl configure -menu "$tl.menu"
  } else  {
    $tl configure -menu {}
  }
  
}

################################################################################
proc  ::docking::tabChanged  {path} {
  update
  
  # HACK ! Because notebooks may also be used inside internal windows
  if { ! [ info exists ::docking::activeTab($path)] } {
    return
  }
  if { [$path select] != $::docking::activeTab($path)} {
    set ::docking::activeTab($path) [$path select]
    set ::docking::changedTab($path) 1
  }
}

################################################################################

bind TNotebook <ButtonRelease-1> {::docking::show_menu %W %X %Y}

bind TNotebook <ButtonPress-1> +[ list ::docking::start_motion %W ]

bind TNotebook <B1-Motion> {
  ::docking::motion %W
  bind TNotebook <ButtonRelease-1> {::docking::end_motion %W %X %Y}
}

bind TNotebook <Escape> {
  if {[winfo exists .ctxtMenu]} {
    destroy .ctxtMenu
  }
}

bind TNotebook <ButtonPress-$::MB3> {::docking::ctx_menu %W}
bind TNotebook <<NotebookTabChanged>> {::docking::tabChanged %W}

################################################################################
#
################################################################################
proc ::docking::ctx_cmd {path anchor} {
  variable c_path
  
  if {$path!=$c_path} {
    set c_path [find_tbn $path]
  }
  
  if {$c_path==""} {
    puts "WARNING c_path null in ctx_cmd"
    return
  }
  
  set tbn [add_tbn $path $anchor]
  move_tab $c_path $tbn
  
  set c_path {}
  
  setTabStatus
}
################################################################################
proc ::docking::ctx_menu {w} {
  
  # HACK ! Because notebooks may also be used inside internal windows
  if {! [info exists ::docking::changedTab($w)] } {
    return
  }
  
  update idletasks
  set mctxt .ctxtMenu
  if { [winfo exists $mctxt] } {
    destroy $mctxt
  }
  
  menu $mctxt -tearoff 0
  set state "normal"
  if { [llength [$w tabs]] == "1"} {
    set state "disabled"
  }
  $mctxt add command -label [ ::tr DockTop ] -state $state -command "::docking::ctx_cmd $w n"
  $mctxt add command -label [ ::tr DockBottom ] -state $state -command "::docking::ctx_cmd $w s"
  $mctxt add command -label [ ::tr DockLeft ] -state $state -command "::docking::ctx_cmd $w w"
  $mctxt add command -label [ ::tr DockRight ] -state $state -command "::docking::ctx_cmd $w e"
  $mctxt add separator
  # Main board can not be closed or undocked
  if { [$w select] != ".fdockmain" } {
    $mctxt add command -label [ ::tr Undock ] -command "::docking::undock $w"
    $mctxt add command -label [ ::tr Close ] -command " ::docking::close $w"
  } else {
    $mctxt add checkbutton -label [::tr "showGameInfo"] -variable ::showGameInfo -command ::toggleGameInfo
    $mctxt add checkbutton -label [::tr "autoResizeBoard"] -variable ::autoResizeBoard -command ::docking::toggleAutoResizeBoard
  }
  tk_popup $mctxt [winfo pointerx .] [winfo pointery .]
}
################################################################################
proc ::docking::toggleAutoResizeBoard {} {
  ::resizeMainBoard
  set m .menu.options.board
  
  if {$::autoResizeBoard} {
    $m entryconfigure 0 -state disabled
  } else  {
    $m entryconfigure 0 -state normal
  }
}
################################################################################
proc ::docking::close {w} {
  set tabid [$w select]
  $w forget $tabid
  
  destroy $tabid
  _cleanup_tabs $w
  setTabStatus
}
################################################################################
proc ::docking::undock {srctab} {
  variable tbs
  if {[llength [$srctab tabs]]==1 && [llength [array names tbs]]==1} { return }
  
  set f [$srctab select]
  
  set name [$srctab tab $f -text]
  set o [$srctab tab $f]
  
  $srctab forget $f
  _cleanup_tabs $srctab
  
  wm manage $f
  
  setMenuVisibility $f true
  
  wm title $f $name
  
  # Uncomment this code to dock windows that have been previously undocked
  # wm protocol $f WM_DELETE_WINDOW [namespace code [list __dock $f]]
  
  wm deiconify $f
  set ::docking::notebook_name($f) [list $srctab $o]
  setTabStatus
}

################################################################################
proc ::docking::__dock {wnd} {
  variable tbs
  
  setMenuVisibility $wnd false
  
  set name [wm title $wnd]
  wm withdraw $wnd
  wm forget $wnd
  
  set d  $::docking::notebook_name($wnd)
  
  set dsttab [lindex $d 0]
  set o [lindex $d 1]
  
  if {![winfo exists $dsttab]} {
    set dsttab [lindex [array names tbs] 0]
  }
  eval $dsttab add $wnd $o
  raise $wnd
  $dsttab select $wnd
}

################################################################################
proc ::docking::add_tab {path anchor args} {
  variable tbs
  
  if { $::docking::layout_dest_notebook == ""} {
    # scan all tabs to find the most suitable
    set dsttab {}
    
    foreach tb [array names tbs] {
      set x [winfo rootx $tb]
      set y [winfo rooty $tb]
      set w [winfo width $tb]
      set h [winfo height $tb]
      switch $anchor {
        n { set rel {$y < $_y} }
        w { set rel {$x < $_x} }
        s { set rel {$y > $_y} }
        e { set rel {$x > $_x} }
      }
      if {$dsttab==""} {
        set dsttab $tb
        set _x $x
        set _y $y
      } elseif { [expr $rel] } {
        set dsttab $tb
        set _x $x
        set _y $y
      }
    }
  } else  {
    set dsttab $::docking::layout_dest_notebook
  }
  
  set title $path
  eval [list $dsttab add $path] $args -text "$title"
  setMenuMark $dsttab $path
  $dsttab select $path
}
################################################################################
# display a blue triangle showing the tab has a menu associated
proc ::docking::setMenuMark { nb tab} {
  if { $tab == ".fdockpgnWin" || [string match "\.fdocktreeWin*" $tab] || $tab == ".fdockccWindow" || \
        $tab == ".fdockoprepWin" } {
    $nb tab $tab -image tb_menu -compound left
  }
}
################################################################################
# Layout management
################################################################################

set ::docking::layout_tbcnt 0

# associates pw -> notebook list
array set ::docking::layout_notebook {}

# associates notebook -> list of tabs
array set ::docking::layout_tabs {}

# the notebook into which to create a new tab
set ::docking::layout_dest_notebook ""

################################################################################
# saves layout (bail out if some windows cannot be restored like FICS)
proc ::docking::layout_save { slot } {
  if {[winfo exists .fics]} {
    tk_messageBox -title Scid -icon question -type ok -message "Cannot save layout with FICS opened"
    return
  }
  if {[winfo exists .oprepWin]} {
    tk_messageBox -title Scid -icon question -type ok -message "Cannot save layout with opening report opened"
    return
  }
  
  # on Windows the geometry is false if the window was maximized (x and y offsets are the ones before the maximization)
  set geometry [wm geometry .]
  set ::docking::layout_list($slot) [list [list "MainWindowGeometry" $geometry] ]
  if {[wm state .] == "zoomed"} {
    if { [scan $geometry "%dx%d+%d+%d" w h x y] == 4 } {
      set geometry "${w}x${h}+0+0"
      set ::docking::layout_list($slot) [list [list "MainWindowGeometry" $geometry "zoomed"] ]
    }
  }

  lappend ::docking::layout_list($slot) [ layout_save_pw .pw ]
}
################################################################################
proc ::docking::layout_save_pw {pw} {
  set ret {}
  
  # record sash position for each panes
  set sashpos {}
  for {set i 0} {$i < [ expr [llength [$pw panes]] -1]} {incr i} {
    lappend sashpos [$pw sashpos $i]
  }
  lappend ret [list $pw [$pw cget -orient ] $sashpos ]
  
  foreach p [$pw panes] {
    if {[get_class $p] == "TNotebook"} {
      lappend ret [list "TNotebook" $p [$p tabs] ]
    }
    if {[get_class $p] == "TPanedwindow"} {
      lappend ret [ list "TPanedwindow" [layout_save_pw $p] ]
    }
  }
  return $ret
}

################################################################################
# restores paned windows and internal notebooks
proc ::docking::layout_restore_pw { data } {
  
  foreach elt $data {
    update idletasks
    
    set type [lindex $elt 0]
    
    if {$type == "MainWindowGeometry"} {
      wm geometry . [lindex $elt 1]
      layout_restore_pw [lindex $data 1]
      if {[lindex $elt 2]  == "zoomed"} {
          if { $::windowsOS || $::macOS } {
              wm state . zoomed
          } else {
              wm attributes . -zoomed
          }
      }
      break
    } elseif {$type == "TPanedwindow"} {
      layout_restore_pw [lindex $elt 1]
      
    } elseif {$type == "TNotebook"} {
      set name [lindex $elt 1]
      set tabs [lindex $elt 2]
      ::docking::layout_restore_nb $pw $name $tabs
      
    } else {
      
      set pw [lindex $elt 0]
      set orient [lindex $elt 1]
      # we have sash geometry
      if {[llength $elt] > 2} {
        lappend ::docking::sashpos [ list $pw [lindex $elt 2] ]
      }
      if { $pw == ".pw"} { continue }
      # build a new pw
      ttk::panedwindow $pw -orient $orient
      
      set parent [string range $pw 0 [expr [string last "." $pw ]-1 ] ]
      $parent add $pw -weight 1
    }
    
  }
  
}
################################################################################
# Sash position
################################################################################
proc ::docking::restoreGeometry {} {
  foreach elt $::docking::sashpos {
    update idletasks
    set pw [lindex $elt 0]
    set sash [lindex $elt 1]
    set i 0
    foreach pos $sash {
      $pw sashpos $i $pos
      incr i
    }
  }
}
################################################################################
# restores a notebook in a pre-existing panedwindow
# panewindow -> pw
# widget name -> name
# data to make tabs -> data (list of names wich can be used to trigger the correct windows)
proc ::docking::layout_restore_nb { pw name tabs} {
  variable tbcnt
  variable tbs
  
  set nb [ttk::notebook $name]
  incr tbcnt
  if {[scan $name ".tb%d" tmp] == 1} {
    if {$tmp >= $tbcnt} {
      set tbcnt [ expr $tmp +1]
    }
  }
  
  set tbs($nb) $pw
  
  $pw add $nb -weight 1
  
  set ::docking::tbs($nb) $pw
  
  set ::docking::layout_dest_notebook $nb
  
  foreach d $tabs {
    
    if { $d == ".fdockmain" } {
      $nb add $d -text $::tr(Board)
      raise $d
    }
    if { $d == ".fdockpgnWin" } { ::pgn::OpenClose ; ::pgn::Refresh 1 }
    if { $d == ".fdockanalysisWin1" } { ::makeAnalysisWin 1 0 }
    if { $d == ".fdockanalysisWin2" } { ::makeAnalysisWin 2 0 }
    if { $d == ".fdockbaseWin" } {  ::windows::switcher::Open }
    if { $d == ".fdockbookWin" } {  ::book::open }
    if { $d == ".fdockecograph" } {  ::windows::eco::OpenClose }
    if { $d == ".fdocktbWin" } { ::tb::Open }
    if { $d == ".fdockcommentWin" } {  ::commenteditor::Open }
    if { $d == ".fdockglistWin" } {::windows::gamelist::Open}
    if { $d == ".fdockccWindow" } {::CorrespondenceChess::CCWindow}
    if { [ scan $d ".fdocktreeWin%d" base ] == 1 } { ::tree::make $base}
  }
  
  # force the selection of first tab
  $nb select [ lindex [ $nb tabs] 0 ]
  
  set ::docking::layout_dest_notebook ""
}

################################################################################
proc ::docking::layout_restore { slot } {
  variable tbcnt
  variable tbs
  bind TNotebook <<NotebookTabChanged>> {}
  
  # if no layout recorded, return
  if { $::docking::layout_list($slot) == {} } {
    return
  }
  
  closeAll {.pw}
  set tbcnt 0
  array set ::docking::notebook_name {}
  array set ::docking::tbs {}
  set ::docking::sashpos {}
  
  layout_restore_pw $::docking::layout_list($slot)
  restoreGeometry
  
  array set ::docking::activeTab {}
  setTabStatus
  
  bind TNotebook <<NotebookTabChanged>> {::docking::tabChanged %W}
  
}
################################################################################
# for every notebook, keeps track of the last selected tab to see if the local menu can be popped up or not
proc ::docking::setTabStatus { } {
  variable tbs
  array set ::docking::activeTab {}
  array set ::docking::changedTab {}
  
  foreach nb [array names tbs] {
    set ::docking::activeTab($nb) [$nb select]
    set ::docking::changedTab($nb) 0
  }
  
}
################################################################################
# erase all mapped windows, except .main
proc ::docking::closeAll {pw} {
  
  foreach p [$pw panes] {
    
    if {[get_class $p] == "TPanedwindow"} {
      ::docking::closeAll $p
    }
    
    if {[get_class $p] == "TNotebook"} {
      foreach tabid [$p tabs] {
        $p forget $tabid
        if {$tabid != ".fdockmain"} {
          destroy $tabid
        }
        _cleanup_tabs $p
      }
    }
  }
  
}

################################################################################
if {$::docking::USE_DOCKING} {
  pack [ttk::panedwindow .pw -orient vertical] -fill both -expand true
  .pw add [ttk::notebook .nb] -weight 1
  
  set docking::tbs(.nb) .pw
  
}

###
### misc.tcl: part of Scid.
### Copyright (C) 2001  Shane Hudson.
### Copyright (C) 2007  Pascal Georges
###
### Miscellaneous routines called by other Tcl functions

################################################################################
# vwait but will timeout after a delay. Var must be fully qualified (::)
################################################################################
proc vwaitTimed { var {delay 0} {warn "warnuser"} } {
  
  proc trigger {var warn} {
    if {$warn == "warnuser"} {
      tk_messageBox -type ok -icon error -parent . -title "Protocol error" -message "vwait timeout for $var"
    }
    set $var 1
  }
  
  if { $delay != 0 } {
    set timerId [after $delay "trigger $var $warn"]
  }
  
  vwait $var
  
  if [info exists timerId] { after cancel $timerId }
  
}

################################################################################
# bindFocusColors:
#   Configures a text or entry widget so it turns lightYellow when it
#   gets the focus, and turns white again when it loses focus.
#
# THIS IS CURRENTLY DISABLED since it works fine with regular entry widgets
# but causes problems with our combobox widgets, not sure why!
#
proc bindFocusColors {w {inColor lightYellow} {outColor white}} {
  $w configure -background $outColor
  #bind $w <FocusIn> "+$w configure -background $inColor"
  #bind $w <FocusOut> "+$w configure -background $outColor"
}


## FROM TK 8.5.9
## ttk::bindMouseWheel $bindtag $command...
#	Adds basic mousewheel support to $bindtag.
#	$command will be passed one additional argument
#	specifying the mousewheel direction (-1: up, +1: down).
#

proc ttk_bindMouseWheel {bindtag callback} {
    switch -- [tk windowingsystem] {
	x11 {
	    bind $bindtag <ButtonPress-4> "$callback -1; break"
	    bind $bindtag <ButtonPress-5> "$callback +1; break"
	}
	win32 {
	    bind $bindtag <MouseWheel> "[append callback { [expr {-(%D/120)}]}]; break"
	}
	aqua {
	    bind $bindtag <MouseWheel> "[append callback { [expr {-(%D)}]} ]; break"
	}
    }
}


# bindMouseWheel:
#   Given a window and a text frame within that window, binds
#   the mouse wheel to scroll the text frame vertically.
#
proc bindMouseWheel {win text} {
  bind $win <MouseWheel> \
      "$text yview scroll \[expr -(%D / 120)\] units"
  if {! $::windowsOS} {
    bind $win <Button-4> [list $text yview scroll -1 units]
    bind $win <Button-5> [list $text yview scroll  1 units]
  }
}

# dialogbuttonframe:
#   Creates a frame that will be shown at the bottom of a
#   dialog window. It takes two parameters: the frame widget
#   name to create, and a list of button args. Each element
#   should contain a widget name, and button arguments.
#
proc dialogbuttonframe {frame buttonlist} {
  ttk::frame $frame
  set bnames {}
  set maxlength 0
  foreach buttonargs $buttonlist {
    set bname $frame.[lindex $buttonargs 0]
    set bargs [lrange $buttonargs 1 end]
    eval ttk::button $bname $bargs
    set bnames [linsert $bnames 0 $bname]
    set length [string length [$bname cget -text]]
    if {$length > $maxlength} { set length $maxlength}
  }
  if {$maxlength < 7} { set maxlength 7 }
  foreach b $bnames {
    $b configure -width $maxlength -padx 4
    pack $b -side right -padx 4 -pady 4
  }
}

# packbuttons
#   Packs a row of dialog buttons to the left/right of their frame
#   with a standard amount of padding.
#
proc packbuttons {side args} {
  eval pack $args -side $side -padx 5 -pady 3
}

# dialogbutton:
#   Creates a button that will be shown in a dialog box, so it
#   is given a minumin width.
#
proc dialogbutton {w args} {
  set retval [eval ttk::button $w $args] ;# -style TButton
  set length [string length [$w cget -text]]
  if {$length < 7} { set length 7 }
  $w configure -width $length
  return retval
}

proc dialogbuttonsmall {w args {style "Small.TButton"} } {
  set retval [eval ttk::button $w -style $style $args]
  set length [string length [$w cget -text]]
  if {$length < 7} { set length 7 }
  $w configure -width $length
  return retval
}

# autoscrollframe
#   Creates and returns a frame containing a widget which is gridded
#   with scrollbars that automatically hide themselves when they are
#   not needed.
#   The frame and widget may already exist; they are created if needed.
#   FBF 2011.03.05:
#     $frame and $w aspects are not changed if they already exists
#     scrollbars are created on time 0, otherwise they are not hidden
#
#   Usage:
#      autoscrollframe [-bars none|x|y|both] frame type w args
#
proc autoscrollframe {args} {
  global _autoscroll
  set bars both
  if {[lindex $args 0] == "-bars"} {
    set bars [lindex $args 1]
    if {$bars != "x" && $bars != "y" && $bars != "none" && $bars != "both"} {
      return -code error "Invalid parameter: -bars $bars"
    }
    set args [lrange $args 2 end]
  }
  if {[llength $args] < 3} {
    return -code error "Insufficient number of parameters"
  }
  set frame [lindex $args 0]
  set type [lindex $args 1]
  set w [lindex $args 2]
  set args [lrange $args 3 end]
  
  set retval $frame
  if {! [winfo exists $frame]} {
    frame $frame
    $frame configure -relief sunken -borderwidth 2
  }
  if {! [winfo exists $w]} {
    $type $w
    if {[llength $args] > 0} {
      eval $w configure $args
    }
    $w configure -relief flat -borderwidth 0
  }
  grid $w -in $frame -row 0 -column 0 -sticky news
  set setgrid 0
  catch {set setgrid [$w cget -setgrid]}
  
  if {$bars == "y"  ||  $bars == "both"} {
    ttk::scrollbar $frame.ybar -command [list $w yview] -takefocus 0
    $w configure -yscrollcommand [list _autoscroll $frame.ybar]
    grid $frame.ybar -row 0 -column 1 -sticky ns
    set _autoscroll($frame.ybar) 1
    set _autoscroll(time:$frame.ybar) 0
    if {! $setgrid} {
      # bind $frame.ybar <Map> [list _autoscrollMap $frame]
    }
  }
  if {$bars == "x"  ||  $bars == "both"} {
    ttk::scrollbar $frame.xbar -command [list $w xview] -takefocus 0 -orient horizontal
    $w configure -xscrollcommand [list _autoscroll $frame.xbar]
    grid $frame.xbar -row 1 -column 0 -sticky we
    set _autoscroll($frame.xbar) 1
    set _autoscroll(time:$frame.xbar) 0
    if {! $setgrid} {
      # bind $frame.xbar <Map> [list _autoscrollMap $frame]
    }
  }
  grid rowconfigure $frame 0 -weight 1
  grid columnconfigure $frame 0 -weight 1
  grid rowconfigure $frame 1 -weight 0
  grid columnconfigure $frame 1 -weight 0
  return $retval
}

array set _autoscroll {}

# _autoscroll
#   This is the "set" command called for auto-scrollbars.
#   If the bar is shown but should not be, it is hidden.
#   If the bar is hidden but should be shown, it is redrawn.
#   Note that once a bar is shown, it will not be removed again for
#   at least a few milliseconds; this is to overcome problematic
#   interactions between the x and y scrollbars where hiding one
#   causes the other to be shown etc. This usually happens because
#   the stupid Tcl/Tk text widget doesn't handle scrollbars well.
#
proc _autoscroll {bar args} {
  global _autoscroll
  if {[llength $args] == 2} {
    set min [lindex $args 0]
    set max [lindex $args 1]
    if {$min > 0.0  ||  $max < 1.0} {
      if {! $_autoscroll($bar)} {
        grid configure $bar
        set _autoscroll($bar) 1
        set _autoscroll(time:$bar) [clock clicks -milli]
      }
    } else {
      if {[clock clicks -milli] > [expr {$_autoscroll(time:$bar) + 100}]} {
        grid remove $bar
        set _autoscroll($bar) 0
      }
    }
    # update idletasks
  }
  eval $bar set $args
}

proc _autoscrollMap {frame} {
  # wm geometry [winfo toplevel $frame] [wm geometry [winfo toplevel $frame]]
}


# busyCursor, unbusyCursor:
#   Sets all cursors to watch (indicating busy) or back to their normal
#   setting again.

array set scid_busycursor {}
set scid_busycursorState 0

proc doBusyCursor {w flag} {
  global scid_busycursor
  if {! [winfo exists $w]} { return }
  # The comment editor window "flashes" when its cursor is changed,
  # no idea why but skip over it:
  if {$w == ".commentWin"} { return }
  if {[winfo class $w] == "Menu"} { return }
  
  if {$flag} {
    if { [ catch { set scid_busycursor($w) [$w cget -cursor] } ] } {
      return
    }
    catch {$w configure -cursor watch}
  } else {
    catch {$w configure -cursor $scid_busycursor($w)} err
  }
  foreach i [winfo children $w] { doBusyCursor $i $flag }
}

proc busyCursor {w {flag 1}} {
  global scid_busycursor scid_busycursorState
  if {$scid_busycursorState == $flag} { return }
  set scid_busycursorState $flag
  doBusyCursor $w $flag
}

proc unbusyCursor {w} {busyCursor $w 0}


# addHorizontalRule, addVerticalRule
#   Add a horizontal/vertical rule frame to a window.
#   The optional parameters [x/y]padding and sunken allow the spacing and
#   appearance of the rule to be specified.
#
set horizRuleCounter 0
set vertRuleCounter 0

proc addHorizontalRule {w {ypadding 5} {relief sunken} {height 2} } {
  global horizRuleCounter
  
  ttk::separator $w.line$horizRuleCounter -orient horizontal
  pack $w.line$horizRuleCounter -fill x ;# -pady $ypadding
  
  # set f [ ttk::frame $w.line$horizRuleCounter -height $height -borderwidth 2 -relief $relief ]
  # pack $f -fill x -pady $ypadding
  incr horizRuleCounter
}

proc addVerticalRule {w {xpadding 5} {relief sunken}} {
  global vertRuleCounter
  
  ttk::separator $w.line$vertRuleCounter -orient vertical
  pack $w.line$vertRuleCounter -fill y -side left ;# -padx $xpadding
  
  # set f [ ttk::frame $w.line$vertRuleCounter -width 2 -borderwidth 2 -relief $relief ]
  # pack $f -fill y -padx $xpadding -side left
  incr vertRuleCounter
}

# progressWindow:
#   Creates a window with a label, progress bar, and (if specified),
#   a cancel button and cancellation command.
#
proc progressWindow {args} {
  set w .progressWin
  if {[winfo exists $w]} { return }
  toplevel $w
  pack [ttk::frame $w.f] -expand 1
  
  wm withdraw $w
  wm resizable $w 0 0
  if {[llength $args] == 2} {
    set title [lindex $args 0]
    set text [lindex $args 1]
    set b 0
  } elseif {[llength $args] == 4} {
    set title [lindex $args 0]
    set text [lindex $args 1]
    set button [lindex $args 2]
    set command [lindex $args 3]
    set b 1
  } else { return }
  wm title $w $title
  ttk::label $w.f.t -text $text
  pack $w.f.t -side top -expand 1 -fill both
  canvas $w.f.c -width 400 -height 20 -bg white -relief solid -border 1
  $w.f.c create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.f.c create text 395 10 -anchor e -font font_Regular -tags time -fill black -text "0:00 / 0:00"
  pack $w.f.c -side top -pady 10
  if {$b} {
    pack [ttk::frame $w.f.b] -side bottom -fill x
    ttk::button $w.f.b.cancel -text $button -command $command
    pack $w.f.b.cancel -side right -padx 5 -pady 2
  }
  # Set up geometry for middle of screen:
  set x [winfo screenwidth $w]
  set x [expr {$x - 400} ]
  set x [expr {$x / 2} ]
  set y [winfo screenheight $w]
  set y [expr {$y - 20} ]
  set y [expr {$y / 2} ]
  wm geometry $w +$x+$y
  sc_progressBar $w.f.c bar 401 21 time
  update idletasks
  wm deiconify $w
  raiseWin $w
  if {$b} {
    catch { grab $w.f.b.cancel }
  } else {
    grab $w
  }
  bind $w <Visibility> "raiseWin $w"
  set ::progressWin_time [clock seconds]
}

proc leftJustifyProgressWindow {} {
  set w .progressWin
  if {! [winfo exists $w]} { return }
  pack configure $w.f.t -fill x
  $w.f.t configure -width 1 -anchor w
}

proc changeProgressWindow {newtext} {
  set w .progressWin
  if {[winfo exists $w]} {
    $w.f.t configure -text $newtext
    update idletasks
  }
}

proc resetProgressWindow {} {
  set w .progressWin
  set ::progressWin_time [clock seconds]
  if {[winfo exists $w]} {
    $w.f.c coords bar 0 0 0 0
    $w.f.c itemconfigure time -text "0:00 / 0:00"
    update idletasks
  }
}

proc updateProgressWindow {done total} {
  set w .progressWin
  if {! [winfo exists $w]} { return }
  set elapsed [expr {[clock seconds] - $::progressWin_time}]
  set width 401
  if {$total > 0} {
    set width [expr {int(double($width) * double($done) / double($total))}]
  }
  $w.f.c coords bar 0 0 $width 21
  set estimated $elapsed
  if {$done != 0} {
    set estimated [expr {int(double($elapsed) * double($total) / double($done))}]
  }
  set t [format "%d:%02d / %d:%02d" \
      [expr {$elapsed / 60}] [expr {$elapsed % 60}] \
      [expr {$estimated / 60}] [expr {$estimated % 60}]]
  $w.f.c itemconfigure time -text $t
  update
}

proc closeProgressWindow {} {
  set w .progressWin
  if {! [winfo exists $w]} {
    # puts stderr "Hmm, no progress window -- bug?"
    return
  }
  grab release $w
  destroy $w
}
################################################################################
# clock widget
################################################################################
namespace eval gameclock {
  array set data {}
  ################################################################################
  proc new { parent n { size 100 } {showfall 0} } {
    global ::gameclock::data
    set data(showfallen$n) $showfall
    set data(id$n) $parent.clock$n
    canvas $data(id$n) -height $size -width $size
    pack $data(id$n) -side top -anchor center
    for {set i 1} {$i<13} {incr i} {
      set a [expr {$i/6.*acos(-1)}]
      set x [expr { ($size/2 + (($size-15)/2)*sin($a) ) }]
      set y [expr { ($size/2 - (($size-15)/2)*cos($a) ) }]
      $data(id$n) create text $x $y -text $i -tag clock$n
    }
    set data(fg$n) "black"
    set data(running$n) 0
    set data(digital$n) 1
    ::gameclock::reset $n
    ::gameclock::draw $n
    bind $data(id$n) <Button-1> "::gameclock::toggleClock $n"
  }
  ################################################################################
  proc draw { n } {
    global ::gameclock::data
    if {! [winfo exists $data(id$n)]} { return }
    $data(id$n) delete aig$n
    
    set w [$data(id$n) cget -width ]
    set h [$data(id$n) cget -height ]
    set cx [ expr $w / 2 ]
    set cy [ expr $h / 2 ]
    if {$w < $h} {
      set size [ expr $w - 15 ]
    } else  {
      set size [ expr $h - 15 ]
    }
    
    set sec $data(counter$n)
    if { $sec > 0 && $data(showfallen$n) } {
      set color "red"
    } else  {
      set color $::gameclock::data(fg$n)
    }
    
    if {$color == "white"} {set fg "black"} else {set fg "white"}
    
    foreach divisor {30 1800 21600} length "[expr $size/2 * 0.8] [expr $size/2 * 0.7] [expr $size/2 * 0.4]" \
        width {1 2 3} {
          set angle [expr {$sec * acos(-1) / $divisor}]
          set x [expr {$cx + $length * sin($angle)}]
          set y [expr {$cy - $length * cos($angle)}]
          $data(id$n) create line $cx $cy $x $y -width $width -tags aig$n -fill $color
        }
    # draw a digital clock
    if {$data(digital$n)} {
      set m [format "%02d" [expr abs($sec) / 60] ]
      set s [format "%02d" [expr abs($sec) % 60] ]
      $data(id$n) create text $cx [expr $cy + $size/4 ] -text "$m:$s" -anchor center -fill $color -tag aig$n
    }
  }
  ################################################################################
  proc every {ms body n} {
    incr ::gameclock::data(counter$n)
    eval $body
    if {[winfo exists $::gameclock::data(id$n)]} {
      after $ms [info level 0]
    }
  }
  ################################################################################
  proc getSec { n } {
    return [expr 0 - $::gameclock::data(counter$n)]
  }
  ################################################################################
  proc setSec { n value } {
    set ::gameclock::data(counter$n) $value
    ::gameclock::draw $n
  }
  ################################################################################
  proc add { n value } {
    set ::gameclock::data(counter$n) [ expr $::gameclock::data(counter$n) - $value ]
    ::gameclock::draw $n
  }
  
  ################################################################################
  proc reset { n } {
    ::gameclock::stop $n
    set ::gameclock::data(counter$n) 0
  }
  ################################################################################
  proc start { n } {
    if {$::gameclock::data(running$n)} { return }
    set ::gameclock::data(running$n) 1
    ::gameclock::every 1000 "draw $n" $n
  }
  ################################################################################
  proc stop { n } {
    if {! $::gameclock::data(running$n)} { return }
    set ::gameclock::data(running$n) 0
    after cancel "::gameclock::every 1000 \{draw $n\} $n"
  }
  ################################################################################
  proc toggleClock { n } {
    if { $::gameclock::data(running$n) } {
      stop $n
    } else  {
      start $n
    }
  }
  ################################################################################
  proc setColor { n color } {
    if {$color == "white"} {
      set fg "black"
      set bg "white"
    } else {
      set fg "white"
      set bg "black"
    }
    set ::gameclock::data(fg$n) $fg
    $::gameclock::data(id$n) configure -background $bg
    $::gameclock::data(id$n) itemconfigure clock$n -fill $fg
    $::gameclock::data(id$n) itemconfigure aig$n -fill $fg
  }
}
################################################################################
# html generation
################################################################################
namespace eval html {
  set data {}
  set idx 0
  
  ################################################################################
  proc exportCurrentFilter {} {
    # Check that we have some games to export:
    if {![sc_base inUse]} {
      tk_messageBox -title "Scid: Empty database" -type ok -icon info \
          -message "This is an empty database, there are no games to export."
      return
    }
    if {[sc_filter count] == 0} {
      tk_messageBox -title "Scid: Filter empty" -type ok -icon info \
          -message "The filter contains no games."
      return
    }
    set ftype {
      { "HTML files" {".html" ".htm"} }
      { "All files" {"*"} }
    }
    set idir $::initialDir(html)
    set fName [tk_getSaveFile -initialdir $idir -filetypes $ftype -defaultextension ".html" -title "Create an HTML file"]
    if {$fName == ""} { return }
    if {[file extension $fName] != ".html" } {
      append fName ".html"
    }
    set prefix [file rootname [file tail $fName] ]
    set dirtarget [file dirname $fName]
    set sourcedir [file join $::scidExeDir html]
    catch {file copy -force [file join $sourcedir bitmaps] $dirtarget}
    catch {file copy -force [file join $sourcedir scid.js] $dirtarget}
    catch {file copy -force [file join $sourcedir scid.css] $dirtarget}
    # writeIndex "[file join $dirtarget $prefix].html" $prefix
    progressWindow "Scid" "Exporting games..." $::tr(Cancel) "sc_progressBar"
    busyCursor .
    set savedGameNum [sc_game number]
    set gn [sc_filter first]
    set players {}
    set ::html::cancelHTML 0
    set total [sc_filter count]
    
    # build the list of matches
    set idx 1
    while {$gn != 0 && ! $::html::cancelHTML} {
      updateProgressWindow $idx $total
      sc_game load $gn
      set pl "[sc_game tags get White] - [sc_game tags get Black]"
      lappend players $pl
      set gn [sc_filter next]
      incr idx
    }
    
    set idx 1
    set gn [sc_filter first]
    while {$gn != 0 && ! $::html::cancelHTML} {
      updateProgressWindow $idx $total
      sc_game load $gn
      fillData
      set pl "[sc_game tags get White] - [sc_game tags get Black]"
      toHtml $::html::data $idx $dirtarget $prefix $players $pl [sc_game tags get "Event"] [sc_game tags get "ECO"] [sc_game info result] [sc_game tags get "Date"]
      set gn [sc_filter next]
      incr idx
    }
    
    closeProgressWindow
    unbusyCursor .
    exportPGN "[file join $dirtarget $prefix].pgn" "filter"
    sc_game load $savedGameNum
  }
  ################################################################################
  proc sc_progressBar {} {
    set ::html::cancelHTML 1
  }
  ################################################################################
  proc exportCurrentGame {} {
    
    set ftype {
      { "HTML files" {".html" ".htm"} }
      { "All files" {"*"} }
    }
    set idir $::initialDir(html)
    set fName [tk_getSaveFile -initialdir $idir -filetypes $ftype -defaultextension ".html" -title "Create an HTML file"]
    if {[file extension $fName] != ".html" && [file extension $fName] != ".htm" } {
      append fName ".html"
    }
    if {$fName == ""} { return }
    set prefix [file rootname [file tail $fName] ]
    set dirtarget [file dirname $fName]
    set sourcedir [file join $::scidExeDir html]
    catch { file copy -force [file join $sourcedir bitmaps] $dirtarget }
    catch { file copy -force [file join $sourcedir scid.js] $dirtarget }
    catch { file copy -force [file join $sourcedir scid.css] $dirtarget }
    
    fillData
    set players [list "[sc_game tags get White] - [sc_game tags get Black]"]
    toHtml $::html::data -1 $dirtarget $prefix $players [lindex $players 0] \
        [sc_game tags get "Event"] [sc_game tags get "ECO"] \
        [sc_game info result] [sc_game tags get "Date"]
    exportPGN "[file join $dirtarget $prefix].pgn" "current"
  }
  ################################################################################
  # Dictionary mapping from special characters to their entities. (from tcllib)
  variable entities {
    \xa0 &nbsp; \xa1 &iexcl; \xa2 &cent; \xa3 &pound; \xa4 &curren;
    \xa5 &yen; \xa6 &brvbar; \xa7 &sect; \xa8 &uml; \xa9 &copy;
    \xaa &ordf; \xab &laquo; \xac &not; \xad &shy; \xae &reg;
    \xaf &macr; \xb0 &deg; \xb1 &plusmn; \xb2 &sup2; \xb3 &sup3;
    \xb4 &acute; \xb5 &micro; \xb6 &para; \xb7 &middot; \xb8 &cedil;
    \xb9 &sup1; \xba &ordm; \xbb &raquo; \xbc &frac14; \xbd &frac12;
    \xbe &frac34; \xbf &iquest; \xc0 &Agrave; \xc1 &Aacute; \xc2 &Acirc;
    \xc3 &Atilde; \xc4 &Auml; \xc5 &Aring; \xc6 &AElig; \xc7 &Ccedil;
    \xc8 &Egrave; \xc9 &Eacute; \xca &Ecirc; \xcb &Euml; \xcc &Igrave;
    \xcd &Iacute; \xce &Icirc; \xcf &Iuml; \xd0 &ETH; \xd1 &Ntilde;
    \xd2 &Ograve; \xd3 &Oacute; \xd4 &Ocirc; \xd5 &Otilde; \xd6 &Ouml;
    \xd7 &times; \xd8 &Oslash; \xd9 &Ugrave; \xda &Uacute; \xdb &Ucirc;
    \xdc &Uuml; \xdd &Yacute; \xde &THORN; \xdf &szlig; \xe0 &agrave;
    \xe1 &aacute; \xe2 &acirc; \xe3 &atilde; \xe4 &auml; \xe5 &aring;
    \xe6 &aelig; \xe7 &ccedil; \xe8 &egrave; \xe9 &eacute; \xea &ecirc;
    \xeb &euml; \xec &igrave; \xed &iacute; \xee &icirc; \xef &iuml;
    \xf0 &eth; \xf1 &ntilde; \xf2 &ograve; \xf3 &oacute; \xf4 &ocirc;
    \xf5 &otilde; \xf6 &ouml; \xf7 &divide; \xf8 &oslash; \xf9 &ugrave;
    \xfa &uacute; \xfb &ucirc; \xfc &uuml; \xfd &yacute; \xfe &thorn;
    \xff &yuml; \u192 &fnof; \u391 &Alpha; \u392 &Beta; \u393 &Gamma;
    \u394 &Delta; \u395 &Epsilon; \u396 &Zeta; \u397 &Eta; \u398 &Theta;
    \u399 &Iota; \u39A &Kappa; \u39B &Lambda; \u39C &Mu; \u39D &Nu;
    \u39E &Xi; \u39F &Omicron; \u3A0 &Pi; \u3A1 &Rho; \u3A3 &Sigma;
    \u3A4 &Tau; \u3A5 &Upsilon; \u3A6 &Phi; \u3A7 &Chi; \u3A8 &Psi;
    \u3A9 &Omega; \u3B1 &alpha; \u3B2 &beta; \u3B3 &gamma; \u3B4 &delta;
    \u3B5 &epsilon; \u3B6 &zeta; \u3B7 &eta; \u3B8 &theta; \u3B9 &iota;
    \u3BA &kappa; \u3BB &lambda; \u3BC &mu; \u3BD &nu; \u3BE &xi;
    \u3BF &omicron; \u3C0 &pi; \u3C1 &rho; \u3C2 &sigmaf; \u3C3 &sigma;
    \u3C4 &tau; \u3C5 &upsilon; \u3C6 &phi; \u3C7 &chi; \u3C8 &psi;
    \u3C9 &omega; \u3D1 &thetasym; \u3D2 &upsih; \u3D6 &piv;
    \u2022 &bull; \u2026 &hellip; \u2032 &prime; \u2033 &Prime;
    \u203E &oline; \u2044 &frasl; \u2118 &weierp; \u2111 &image;
    \u211C &real; \u2122 &trade; \u2135 &alefsym; \u2190 &larr;
    \u2191 &uarr; \u2192 &rarr; \u2193 &darr; \u2194 &harr; \u21B5 &crarr;
    \u21D0 &lArr; \u21D1 &uArr; \u21D2 &rArr; \u21D3 &dArr; \u21D4 &hArr;
    \u2200 &forall; \u2202 &part; \u2203 &exist; \u2205 &empty;
    \u2207 &nabla; \u2208 &isin; \u2209 &notin; \u220B &ni; \u220F &prod;
    \u2211 &sum; \u2212 &minus; \u2217 &lowast; \u221A &radic;
    \u221D &prop; \u221E &infin; \u2220 &ang; \u2227 &and; \u2228 &or;
    \u2229 &cap; \u222A &cup; \u222B &int; \u2234 &there4; \u223C &sim;
    \u2245 &cong; \u2248 &asymp; \u2260 &ne; \u2261 &equiv; \u2264 &le;
    \u2265 &ge; \u2282 &sub; \u2283 &sup; \u2284 &nsub; \u2286 &sube;
    \u2287 &supe; \u2295 &oplus; \u2297 &otimes; \u22A5 &perp;
    \u22C5 &sdot; \u2308 &lceil; \u2309 &rceil; \u230A &lfloor;
    \u230B &rfloor; \u2329 &lang; \u232A &rang; \u25CA &loz;
    \u2660 &spades; \u2663 &clubs; \u2665 &hearts; \u2666 &diams;
    \x22 &quot; \x26 &amp; \x3C &lt; \x3E &gt; \u152 &OElig;
    \u153 &oelig; \u160 &Scaron; \u161 &scaron; \u178 &Yuml;
    \u2C6 &circ; \u2DC &tilde; \u2002 &ensp; \u2003 &emsp; \u2009 &thinsp;
    \u200C &zwnj; \u200D &zwj; \u200E &lrm; \u200F &rlm; \u2013 &ndash;
    \u2014 &mdash; \u2018 &lsquo; \u2019 &rsquo; \u201A &sbquo;
    \u201C &ldquo; \u201D &rdquo; \u201E &bdquo; \u2020 &dagger;
    \u2021 &Dagger; \u2030 &permil; \u2039 &lsaquo; \u203A &rsaquo;
    \u20AC &euro;
  }
  proc html_entities {s} {
    variable entities
    return [string map $entities $s]
  }
  ################################################################################
  proc toHtml { dt game dirtarget prefix {players ""} {this_players ""} {event ""} {eco "ECO"} {result "*"} {date ""} } {
    
    if { $game != -1 } {
      set f [open "[file join $dirtarget $prefix]_${game}.html" w]
    } else  {
      set f [open "[file join $dirtarget $prefix].html" w]
    }
    # header
    puts $f "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
    puts $f "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">"
    puts $f "<head>"
    puts $f "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"
    puts $f "<link rel=\"stylesheet\" type=\"text/css\" href=\"scid.css\" />"
    puts $f "<script src=\"scid.js\" type=\"text/javascript\"></script>"
    puts $f "<script type=\"text/javascript\">"
    puts $f "// <!\[CDATA\["
    puts $f "movesArray = new Array("
    for {set i 0} {$i<[llength $dt]} {incr i} {
      array set elt [lindex $dt $i]
      puts -nonewline $f "\"$elt(fen) $elt(prev) $elt(next)\""
      if {$i < [expr [llength $dt] -1]} { puts $f "," }
    }
    puts $f ");"
    puts $f "var current = 0;"
    puts $f "var prefix = \"$prefix\";"
    puts $f "// \]\]>"
    puts $f "</script>"
    puts $f "<title>Scid</title>"
    puts $f "<meta content=\"Scid\" name=\"author\" />"
    puts $f "</head>"
    puts $f "<body onload=\"doinit()\" onkeydown=\"handlekey(event)\">"
    puts $f "<div id=\"framecontent\">"
    puts $f "<div class=\"innertube\">"
    # diagram
    puts $f "<div id=\"diagram\"><!-- diagram goes here --></div>"
    # navigation
    puts $f "<div id=\"nav\" style=\"text-align: center\"><!-- navigation goes here -->"
    puts $f "<form action=\"#\">"
    puts $f "<p>"
    puts $f "<input type='button' value=' &darr;&uarr; ' onclick='rotate()' /> <input type='button' value=' |&lt; ' onclick='jump(0)' /> <input type='button' value=' &lt; ' onclick='moveForward(0)' /> <input type='button' value=' &gt; ' onclick='moveForward(1)' /> <input type='button' value=' &gt;| ' onclick='jump(1)' /> "
    puts $f "</p><p>"
    # other games navigation
    puts $f "<select name=\"gameselect\" id=\"gameselect\" size=\"1\" onchange=\"gotogame()\">"
    set i 1
    foreach l $players {
      if { $game == $i } {
        puts $f "<option  selected=\"selected\">$i. [html_entities $l]</option>"
      } else  {
        puts $f "<option>$i. [html_entities $l]</option>"
      }
      incr i
    }
    puts $f "</select>"
    puts $f "</p><p>"
    puts $f "<input type=\"button\" value=\"&lt;--\" onclick=\"gotoprevgame()\" /> &nbsp; <input type=\"button\" value=\"--&gt;\" onclick=\"gotonextgame()\" />"
    puts $f "</p><p>"
    puts $f "<a href=\"${prefix}.pgn\">${prefix}.pgn</a>"
    puts $f "</p>"
    puts $f "</form>"
    puts $f "</div>"
    puts $f "</div>"
    puts $f "</div>"
    puts $f "<div id=\"maincontent\">"
    puts $f "<div class=\"innertube\">"
    puts $f "<div id=\"moves\"><!-- moves go here -->"
    # game header
    puts $f "<span class=\"hPlayers\"> [html_entities $this_players]</span>"
    puts $f "<span class=\"hEvent\"><br /> [html_entities $event]</span>"
    puts $f "<span class=\"hEvent\"><br />\[$date\]</span>"
    puts $f "<span class=\"hAnnot\"><br />\[$eco\]</span>"
    puts $f "<p>"
    # link moves
    set prevdepth 0
    set prevvarnumber 0
    for {set i 0} {$i<[llength $dt]} {incr i} {
      array set elt [lindex $dt $i]
      if {$elt(depth) == 0} {
        set class "V0"
      } elseif {$elt(depth) == 1} {
        set class "V1"
      } else {
        set class "V2"
      }
      if { $prevdepth == $elt(depth) && $prevvarnumber != $elt(var) } {
        puts $f "<span class=\"VC\">\]</span></div>"
        puts $f "<div class=\"var\"><span class=\"VC\">\[</span>"
      } else {
        while { $prevdepth > $elt(depth) } {
            puts $f "<span class=\"VC\">\]</span></div>"
            set prevdepth [expr $prevdepth - 1]
        }
        while { $prevdepth < $elt(depth) } {
            puts $f "<div class=\"var\"><span class=\"VC\">\[</span>"
            set prevdepth [expr $prevdepth + 1]
        }
      }
      set prevvarnumber $elt(var)
      # id = "mv1" not "id=1" now
      set nag [html_entities $elt(nag)]
      set comment [html_entities $elt(comment)]
      puts $f "<a href=\"javascript:gotoMove($elt(idx))\" id=\"mv$elt(idx)\" class=\"$class\">$elt(move)$nag</a>"
      if {$elt(diag)} {
        insertMiniDiag $elt(fen) $f
      }
      if {$comment != ""} {
        puts $f "<span class=\"VC\">$comment</span>"
      }
    }
    while { $prevdepth > 0 } {
        puts $f "<span class=\"VC\">\]</span></div>"
        set prevdepth [expr $prevdepth - 1]
    }

    puts $f "<br /><span class=\"VH\">$result</span>"
    puts $f "<p>"
    puts $f "<a href=\"http://scid.sourceforge.net/\" style=\"font-size: 0.8em\">Created with Scid</a>"
    puts $f "</div>"
    puts $f "</div>"
    puts $f "</div>"
    puts $f "</body>"
    puts $f "</html>"
    close $f
  }
  ################################################################################
  proc colorSq {sq} {
    if { [expr $sq % 2] == 1 && [expr int($sq / 8) %2 ] == 0 || [expr $sq % 2] == 0 && [expr int($sq / 8) %2 ] == 1 } {
      return "bs"
    } else {
      return "ws"
    }
  }
  ################################################################################
  proc piece2gif {piece} {
    if {$piece == "K"} { return "wk" }
    if {$piece == "k"} { return "bk" }
    if {$piece == "Q"} { return "wq" }
    if {$piece == "q"} { return "bq" }
    if {$piece == "R"} { return "wr" }
    if {$piece == "r"} { return "br" }
    if {$piece == "B"} { return "wb" }
    if {$piece == "b"} { return "bb" }
    if {$piece == "N"} { return "wn" }
    if {$piece == "n"} { return "bn" }
    if {$piece == "P"} { return "wp" }
    if {$piece == "p"} { return "bp" }
    if {$piece == " "} { return "sq" }
  }
  ################################################################################
  proc insertMiniDiag {fen f} {
    
    set square 0
    set space " "
    puts $f "<table Border=0 CellSpacing=0 CellPadding=0><tr>"
    
    for {set i 0} {$i < [string length $fen]} {incr i} {
      set l [string range $fen $i $i ]
      set res [scan $l "%d" c]
      if {$res == 1} {
        if  { $c >= 1 && $c <= 8 } {
          for { set j 0} {$j < $c} {incr j} {
            puts $f "<td class=\"[colorSq $square]\"><img border=0 align=\"left\" src=\"bitmaps/mini/[piece2gif $space].gif\"></td>"
            incr square
          }
        }
      } elseif {$l == "/"}  {
        puts $f "</tr><tr>"
      } else  {
        puts $f "<td class=\"[colorSq $square]\"><img border=0 align=\"left\" src=\"bitmaps/mini/[piece2gif $l].gif\"></td>"
        incr square
      }
    }
    
    puts $f "</tr></table>"
  }
  
  ################################################################################
  # fill data with { idx FEN prev next move nag comment depth }
  proc fillData {} {
    set ::html::data {}
    set ::html::idx -1
    sc_move start
    parseGame
  }
  
  ################################################################################
  proc parseGame { {prev -2} } {
    global ::html::data ::html::idx
    
    set already_written 0
    
    set dots 0
    
    while {1} {
      if { ! $already_written } {
        recordElt $dots $prev
        set dots 0
        set prev -2
      } else {
        set dots 1
      }
      set already_written 0
      
      # handle variants
      if {[sc_var count]>0} {
        # First write the move in the current line for which variations exist
        #
        if { ![sc_pos isAt vend]} {
          sc_move forward
          recordElt $dots $prev
          sc_move back
          set lastIdx $idx
          set already_written 1
        }
        for {set v 0} {$v<[sc_var count]} {incr v} {
          sc_var enter $v
          # in order to get the comment before first move
          sc_move back
          parseGame -1
          sc_var exit
        }
        #update the "next" token
        array set elt [lindex $data $lastIdx]
        set elt(next) [expr $idx + 1]
        lset data $lastIdx [array get elt]
        #update the "previous" token
        set prev $lastIdx
      }
      
      if {[sc_pos isAt vend]} { break }
      sc_move forward
    }
  }
  ################################################################################
  proc recordElt { dots {prev -2} } {
    global ::html::data ::html::idx
    
    array set elt {}
    
    incr idx
    set elt(idx) $idx
    set elt(fen) [lindex [split [sc_pos fen]] 0]
    if {$prev != -2} {
      set elt(prev) $prev
    } else  {
      set elt(prev) [expr $idx-1]
    }
    
    set nag [sc_pos getNags]
    if {$nag == "0"} { set nag "" }
    if {[string match "*D *" $nag] || [string match "*# *" $nag]} {
      set elt(diag) 1
    } else  {
      set elt(diag) 0
    }
    set nag [regsub -all "D " $nag "" ]
    set nag [regsub -all "# " $nag "" ]
    set elt(nag) $nag
    set comment [sc_pos getComment]
    set comment [regsub -all "\[\x5B\]%draw (.)+\[\x5D\]" $comment ""]
    set elt(comment) $comment
    set elt(depth) [sc_var level]
    set elt(var) [sc_var number]
    if {![sc_pos isAt vend]} {
      set elt(next) [expr $idx +1 ]
    } else  {
      set elt(next) -1
    }
    
    set m [sc_game info previousMove]
    set mn [sc_pos moveNumber]
    
    set elt(move) ""
    if {[sc_pos side] == "black" && $m != ""} {
      set elt(move) "$mn.$m"
    } else {
      
      if {! [sc_pos isAt vstart] } {
        sc_move back
        set pnag [sc_pos getNags]
        if {$pnag == "0"} { set pnag "" }
        if {[string match "*D *" $pnag] || [string match "*# *" $pnag]} {
          set pdiag 1
        } else  {
          set pdiag 0
        }
        if {  [sc_pos isAt vstart] ||  [sc_pos getComment] != "" || $pdiag > 0 } {
          set dots 1
        }
        sc_move forward
      }
      
      if {$dots && $m != ""} {
        set elt(move) "[expr $mn -1]. ... $m"
      } else  {
        set elt(move) $m
      }
      
    }
    
    lappend ::html::data [array get elt]
    
  }
  
  ################################################################################
  # proc writeIndex {fn prefix} {
  # set f [open $fn w]
  # puts $f "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
  # puts $f "<html>"
  # puts $f "<head>"
  # puts $f "<meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">"
  # puts $f "<title>Scid</title>"
  # puts $f "<meta content=\"Scid\" name=\"author\">"
  # puts $f "</head>"
  # puts $f "<frameset BORDER=\"0\" FRAMEBORDER=\"0\" FRAMESPACING=\"0\" COLS=\"380,*\">"
  # puts $f "<frameset BORDER=\"0\" FRAMEBORDER=\"0\" FRAMESPACING=\"0\" ROWS=\"380,*\">"
  # puts $f "<frame NAME=\"diagram\" SCROLLING=\"Auto\">"
  # puts $f "<frame NAME=\"nav\" SRC=\"${prefix}_nav.html\" SCROLLING=\"Auto\">"
  # puts $f "</frameset>"
  # puts $f "<frame NAME=\"moves\" SRC=\"${prefix}_1.html\" SCROLLING=\"Auto\">"
  # puts $f "</frameset>"
  # puts $f "</html>"
  # close $f
  # }
  ################################################################################
  proc exportPGN { fName selection } {
    if {$selection == "filter"} {
      progressWindow "Scid" "Exporting games..." $::tr(Cancel) "sc_progressBar"
    }
    busyCursor .
    sc_base export $selection "PGN" $fName -append 0 -starttext "" -endtext "" -comments 1 -variations 1 \
        -space 1 -symbols 1 -indentC 0 -indentV 0 -column 0 -noMarkCodes 1 -convertNullMoves 1
    unbusyCursor .
    if {$selection == "filter"} {
      closeProgressWindow
    }
  }
  
}
################################################################################
#
################################################################################

# end of misc.tcl
###################
# htext.tcl: Online help/hypertext display module for Scid
#
# The htext module implements html-like display in a text widget.
# It is used in Scid for the help and crosstable windows, and for
# the game information area.

namespace eval ::htext {}

set helpWin(Stack) {}
set helpWin(yStack) {}
set helpWin(Indent) 0

# help_PushStack and help_PopStack:
#   Implements the stack of help windows for the "Back" button.
#
proc help_PushStack {name {heading ""}} {
  global helpWin
  lappend helpWin(Stack) $name
  if {[llength $helpWin(Stack)] > 10} {
    set helpWin(Stack) [lrange $helpWin(Stack) 1 end]
  }
  if {[winfo exists .helpWin]} {
    set helpWin(yStack) [linsert $helpWin(yStack) 0 \
        [lindex [.helpWin.text yview] 0]]
    if {[llength $helpWin(yStack)] > 10} {
      set helpWin(yStack) [lrange $helpWin(yStack) 0 9]
    }
  }
}

set ::htext::headingColor "\#990000"
array set ::htext:updates {}

proc help_PopStack {} {
  global helpWin helpText
  set len [llength $helpWin(Stack)]
  if {$len < 1} { return }
  incr len -2
  set name [lindex $helpWin(Stack) $len]
  set helpWin(Stack) [lrange $helpWin(Stack) 0 $len]
  
  set ylen [llength $helpWin(yStack)]
  set yview 0.0
  if {$ylen >= 1} {
    set yview [lindex $helpWin(yStack) 0]
    set helpWin(yStack) [lrange $helpWin(yStack) 1 end]
  }
  updateHelpWindow $name
  .helpWin.text yview moveto $yview
}

proc helpWindow {name {heading ""}} {
  help_PushStack $name
  updateHelpWindow $name $heading
}

proc updateHelpWindow {name {heading ""}} {
  global helpWin helpText helpTitle windowsOS language
  set w .helpWin
  
  set slist [split $name " "]
  if {[llength $slist] > 1} {
    set name [lindex $slist 0]
    set heading [lindex $slist 1]
  }
  
  if {[info exists helpText($language,$name)] && [info exists helpTitle($language,$name)]} {
    set title $helpTitle($language,$name)
    set helptext $helpText($language,$name)
  } elseif {[info exists helpText($name)] && [info exists helpTitle($name)]} {
    set title $helpTitle($name)
    set helptext $helpText($name)
  } else {
    return
  }
  
  if {![winfo exists $w]} {
    toplevel $w
    # wm geometry $w -10+0
    setWinLocation $w
    setWinSize $w
    
    wm minsize $w 20 5
    text $w.text -setgrid yes -wrap word -width $::winWidth($w) -height $::winHeight($w) -relief sunken -border 0 -yscroll "$w.scroll set"
    ttk::scrollbar $w.scroll -command "$w.text yview"
    
    ttk::frame $w.b -relief raised -border 2
    pack $w.b -side bottom -fill x
    ttk::button $w.b.contents -textvar ::tr(Contents) -command { helpWindow Contents }
    ttk::button $w.b.index -textvar ::tr(Index) -command { helpWindow Index }
    ttk::button $w.b.back -textvar ::tr(Back) -command { help_PopStack }
    ttk::button $w.b.close -textvar ::tr(Close) -command {
      set ::helpWin(Stack) {}
      set ::helpWin(yStack) {}
      destroy .helpWin
    }
    
    pack $w.b.contents $w.b.index $w.b.back -side left -padx 1 -pady 2
    pack $w.b.close -side right -padx 5 -pady 2
    pack $w.scroll -side right -fill y -padx 2 -pady 2
    pack $w.text -fill both -expand 1 -padx 1
    
    $w.text configure -font font_Regular -foreground black -background white
    ::htext::init $w.text
    bind $w <Configure> "recordWinSize $w"
  }
  
  $w.text configure -cursor top_left_arrow
  $w.text configure -state normal
  $w.text delete 0.0 end
  
  $w.b.index configure -state normal
  if {$name == "Index"} { $w.b.index configure -state disabled }
  $w.b.contents configure -state normal
  if {$name == "Contents"} { $w.b.contents configure -state disabled }
  $w.b.back configure -state disabled
  if {[llength $helpWin(Stack)] >= 2} {
    $w.b.back configure -state normal
  }
  
  wm title $w "Scid Help: $title"
  wm iconname $w "Scid help"
  
  $w.text delete 0.0 end
  bind $w <Up> "$w.text yview scroll -1 units"
  bind $w <Down> "$w.text yview scroll 1 units"
  bind $w <Prior> "$w.text yview scroll -1 pages"
  bind $w <Next> "$w.text yview scroll 1 pages"
  bind $w <Key-Home> "$w.text yview moveto 0"
  bind $w <Key-End> "$w.text yview moveto 0.99"
  bind $w <Escape> "$w.b.close invoke"
  bind $w <Key-b> "$w.b.back invoke"
  bind $w <Left> "$w.b.back invoke"
  bind $w <Key-i> "$w.b.index invoke"
  
  ::htext::display $w.text $helptext $heading 0
  focus $w
}

proc ::htext::updateRate {w rate} {
  set ::htext::updates($w) $rate
}

proc ::htext::init {w} {
  set cyan "\#007000"
  set maroon "\#990000"
  set green "darkgreen"
  
  set ::htext::updates($w) 100
  $w tag configure black -foreground black
  $w tag configure white -foreground white
  $w tag configure red -foreground red
  $w tag configure blue -foreground blue
  $w tag configure darkblue -foreground darkBlue
  $w tag configure green -foreground $green
  $w tag configure cyan -foreground $cyan
  $w tag configure yellow -foreground yellow
  $w tag configure maroon -foreground $maroon
  $w tag configure gray -foreground gray20
  
  $w tag configure bgBlack -background black
  $w tag configure bgWhite -background white
  $w tag configure bgRed -background red
  $w tag configure bgBlue -background blue
  $w tag configure bgLightBlue -background lightBlue
  $w tag configure bgGreen -background $green
  $w tag configure bgCyan -background $cyan
  $w tag configure bgYellow -background yellow
  
  $w tag configure tab -lmargin2 50
  $w tag configure li -lmargin2 50
  $w tag configure center -justify center
  
  if {[$w cget -font] == "font_Small"} {
    $w tag configure b -font font_SmallBold
    $w tag configure i -font font_SmallItalic
  } else {
    $w tag configure b -font font_Bold
    $w tag configure i -font font_Italic
  }
  $w tag configure bi -font font_BoldItalic
  $w tag configure tt -font font_Fixed
  $w tag configure u -underline 1
  $w tag configure h1 -font font_H1 -foreground $::htext::headingColor \
      -justify center
  $w tag configure h2 -font font_H2 -foreground $::htext::headingColor
  $w tag configure h3 -font font_H3 -foreground $::htext::headingColor
  $w tag configure h4 -font font_H4 -foreground $::htext::headingColor
  $w tag configure h5 -font font_H5 -foreground $::htext::headingColor
  $w tag configure footer -font font_Small -justify center
  
  $w tag configure term -font font_BoldItalic -foreground $::htext::headingColor
  $w tag configure menu -font font_Bold -foreground $cyan
  
  # PGN-window-specific tags:
  $w tag configure tag -foreground $::pgnColor(Header)
  if { $::::pgn::boldMainLine } {
    $w tag configure nag -foreground $::pgnColor(Nag) -font font_Regular
    $w tag configure var -foreground $::pgnColor(Var) -font font_Regular
  } else {
    $w tag configure nag -foreground $::pgnColor(Nag)
    $w tag configure var -foreground $::pgnColor(Var)
	 ### TODO
    ### $w tag configure var -foreground $::pgnColor(Var) -font font_Figurine_Var

  }
  $w tag configure ip1 -lmargin1 25 -lmargin2 25
  $w tag configure ip2 -lmargin1 50 -lmargin2 50
  $w tag configure ip3 -lmargin1 75 -lmargin2 75
  $w tag configure ip4 -lmargin1 100 -lmargin2 100
}

proc ::htext::isStartTag {tagName} {
  return [expr {![strIsPrefix "/" $tagName]} ]
}

proc ::htext::isEndTag {tagName} {
  return [strIsPrefix "/" $tagName]
}

proc ::htext::isLinkTag {tagName} {
  return [strIsPrefix "a " $tagName]
}

proc ::htext::extractLinkName {tagName} {
  if {[::htext::isLinkTag $tagName]} {
    return [lindex [split [string range $tagName 2 end] " "] 0]
  }
  return ""
}

proc ::htext::extractSectionName {tagName} {
  if {[::htext::isLinkTag $tagName]} {
    return [lindex [split [string range $tagName 2 end] " "] 1]
  }
  return ""
}

set ::htext::interrupt 0

proc ::htext::display {w helptext {section ""} {fixed 1}} {
  global helpWin
  # set start [clock clicks -milli]
  set helpWin(Indent) 0
  set ::htext::interrupt 0
  $w mark set insert 0.0
  $w configure -state normal
  set linkName ""
  
  set count 0
  set str $helptext
  if {$fixed} {
    regsub -all "\n\n" $str "<p>" str
    regsub -all "\n" $str " " str
  } else {
    regsub -all "\[ \n\]+" $str " " str
    regsub -all ">\[ \n\]+" $str "> " str
    regsub -all "\[ \n\]+<" $str " <" str
  }
  set tagType ""
  set seePoint ""
  
  if {! [info exists ::htext::updates($w)]} {
    set ::htext::updates($w) 100
  }
  
  # Loop through the text finding the next formatting tag:
  
  while {1} {
    set startPos [string first "<" $str]
    if {$startPos < 0} { break }
    set endPos [string first ">" $str]
    if {$endPos < 1} { break }
    
    set tagName [string range $str [expr {$startPos + 1}] [expr {$endPos - 1}]]
    
    # Check if it is a starting tag (no "/" at the start):
    
    if {![strIsPrefix "/" $tagName]} {
      
      # Check if it is a link tag:
      if {[strIsPrefix "a " $tagName]} {
        set linkName [::htext::extractLinkName $tagName]
        set sectionName [::htext::extractSectionName $tagName]
        set linkTag "link ${linkName} ${sectionName}"
        set tagName "a"
        $w tag configure "$linkTag" -foreground blue -underline 1
        $w tag bind "$linkTag" <ButtonRelease-1> \
            "helpWindow $linkName $sectionName"
        $w tag bind $linkTag <Any-Enter> \
            "$w tag configure \"$linkTag\" -background yellow
        $w configure -cursor hand2"
        $w tag bind $linkTag <Any-Leave> \
            "$w tag configure \"$linkTag\" -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "url " $tagName]} {
        # Check if it is a URL tag:
        set urlName [string range $tagName 4 end]
        set urlTag "url $urlName"
        set tagName "url"
        $w tag configure "$urlTag" -foreground red -underline 1
        $w tag bind "$urlTag" <ButtonRelease-1> "openURL {$urlName}"
        $w tag bind $urlTag <Any-Enter> \
            "$w tag configure \"$urlTag\" -background yellow
        $w configure -cursor hand2"
        $w tag bind $urlTag <Any-Leave> \
            "$w tag configure \"$urlTag\" -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "run " $tagName]} {
        # Check if it is a Tcl command tag:
        set runName [string range $tagName 4 end]
        set runTag "run $runName"
        set tagName "run"
        $w tag bind "$runTag" <ButtonRelease-1> "catch {$runName}"
        $w tag bind $runTag <Any-Enter> \
            "$w tag configure \"$runTag\" -foreground yellow
        $w tag configure \"$runTag\" -background darkBlue
        $w configure -cursor hand2"
        $w tag bind $runTag <Any-Leave> \
            "$w tag configure \"$runTag\" -foreground {}
        $w tag configure \"$runTag\" -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "go " $tagName]} {
        # Check if it is a goto tag:
        set goName [string range $tagName 3 end]
        set goTag "go $goName"
        set tagName "go"
        $w tag bind "$goTag" <ButtonRelease-1> \
            "catch {$w see \[lindex \[$w tag nextrange $goName 1.0\] 0\]}"
        $w tag bind $goTag <Any-Enter> \
            "$w tag configure \"$goTag\" -foreground yellow
        $w tag configure \"$goTag\" -background maroon
        $w configure -cursor hand2"
        $w tag bind $goTag <Any-Leave> \
            "$w tag configure \"$goTag\" -foreground {}
        $w tag configure \"$goTag\" -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "pi " $tagName]} {
        # Check if it is a player info tag:
        set playerTag $tagName
        set playerName [string range $playerTag 3 end]
        set tagName "pi"
        $w tag configure "$playerTag" -foreground darkBlue
        $w tag bind "$playerTag" <ButtonRelease-1> "::pinfo::playerInfo \"$playerName\""
        $w tag bind $playerTag <Any-Enter> \
            "$w tag configure \"$playerTag\" -foreground yellow
        $w tag configure \"$playerTag\" -background darkBlue
        $w configure -cursor hand2"
        $w tag bind $playerTag <Any-Leave> \
            "$w tag configure \"$playerTag\" -foreground darkBlue
        $w tag configure \"$playerTag\" -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "g_" $tagName]} {
        # Check if it is a game-load tag:
        set gameTag $tagName
        set tagName "g"
        set gnum [string range $gameTag 2 end]
        set glCommand "::game::LoadMenu $w [sc_base current] $gnum %X %Y"
        $w tag bind $gameTag <ButtonPress-1> $glCommand
        $w tag bind $gameTag <ButtonPress-$::MB3> \
            "::gbrowser::new [sc_base current] $gnum"
        $w tag bind $gameTag <Any-Enter> \
            "$w tag configure $gameTag -foreground yellow
        $w tag configure $gameTag -background darkBlue
        $w configure -cursor hand2"
        $w tag bind $gameTag <Any-Leave> \
            "$w tag configure $gameTag -foreground {}
        $w tag configure $gameTag -background {}
        $w configure -cursor {}"
      } elseif {[strIsPrefix "m_" $tagName]} {
        # Check if it is a move tag:
        set moveTag $tagName
        set tagName "m"
		  ### TODO
		  ### Does not work for variations as the var-Tag appears before
		  ### the <m_ tags, therefore this overwrites font sizes
        ### $w tag configure $moveTag -font font_Figurine_ML
        $w tag bind $moveTag <ButtonRelease-1> "sc_move pgn [string range $moveTag 2 end]; updateBoard"
        # Bind middle button to popup a PGN board:
        $w tag bind $moveTag <ButtonPress-$::MB2> "::pgn::ShowBoard .pgnWin.text $moveTag %X %Y"
        # invoking contextual menu in PGN window
        $w tag bind $moveTag <ButtonPress-$::MB3> "sc_move pgn [string range $moveTag 2 end]; updateBoard"
        $w tag bind $moveTag <Any-Enter> "$w tag configure $moveTag -underline 1
        $w configure -cursor hand2"
        $w tag bind $moveTag <Any-Leave> "$w tag configure $moveTag -underline 0
        $w configure -cursor {}"
      } elseif {[strIsPrefix "c_" $tagName]} {
        # Check if it is a comment tag:
        set commentTag $tagName
        set tagName "c"
        if { $::pgn::boldMainLine } {
          $w tag configure $commentTag -foreground $::pgnColor(Comment) -font font_Regular
        } else {
          $w tag configure $commentTag -foreground $::pgnColor(Comment)
        }
        $w tag bind $commentTag <ButtonRelease-1> "sc_move pgn [string range $commentTag 2 end]; updateBoard; ::commenteditor::Open"
        $w tag bind $commentTag <Any-Enter> "$w tag configure $commentTag -underline 1
        $w configure -cursor hand2"
        $w tag bind $commentTag <Any-Leave> "$w tag configure $commentTag -underline 0
        $w configure -cursor {}"
      }
      
      if {$tagName == "h1"} {$w insert end "\n"}
      
    }
    
    # Now insert the text up to the formatting tag:
    $w insert end [string range $str 0 [expr {$startPos - 1}]]
    
    # Check if it is a name tag matching the section we want:
    if {$section != ""  &&  [strIsPrefix "name " $tagName]} {
      set sect [string range $tagName 5 end]
      if {$section == $sect} { set seePoint [$w index insert] }
    }
    
    if {[string index $tagName 0] == "/"} {
      # Get rid of initial "/" character:
      set tagName [string range $tagName 1 end]
      switch -- $tagName {
        h1 - h2 - h3 - h4 - h5  {$w insert end "\n"}
      }
      if {$tagName == "p"} {$w insert end "\n"}
      #if {$tagName == "h1"} {$w insert end "\n"}
      if {$tagName == "menu"} {$w insert end "\]"}
      if {$tagName == "ul"} {
        incr helpWin(Indent) -4
        $w insert end "\n"
      }
      if {[info exists startIndex($tagName)]} {
        switch -- $tagName {
          a {$w tag add $linkTag $startIndex($tagName) [$w index insert]}
          g  {$w tag add $gameTag $startIndex($tagName) [$w index insert]}
          c  {$w tag add $commentTag $startIndex($tagName) [$w index insert]}
          m  {$w tag add $moveTag $startIndex($tagName) [$w index insert]}
          pi {$w tag add $playerTag $startIndex($tagName) [$w index insert]}
          url {$w tag add $urlTag $startIndex($tagName) [$w index insert]}
          run {$w tag add $runTag $startIndex($tagName) [$w index insert]}
          go {$w tag add $goTag $startIndex($tagName) [$w index insert]}
          default {$w tag add $tagName $startIndex($tagName) [$w index insert]}
        }
        unset startIndex($tagName)
      }
    } else {
      switch -- $tagName {
        ul {incr helpWin(Indent) 4}
        li {
          $w insert end "\n"
          for {set space 0} {$space < $helpWin(Indent)} {incr space} {
            $w insert end " "
          }
        }
        p  {$w insert end "\n"}
        br {$w insert end "\n"}
        q  {$w insert end "\""}
        lt {$w insert end "<"}
        gt {$w insert end ">"}
        h2 - h3 - h4 - h5  {$w insert end "\n"}
      }
      #Set the start index for this type of tag:
      set startIndex($tagName) [$w index insert]
      if {$tagName == "menu"} {$w insert end "\["}
    }
    
    # Check if it is an image or button tag:
    if {[strIsPrefix "img " $tagName]} {
      set imgName [string range $tagName 4 end]
      set winName $w.$imgName
      while {[winfo exists $winName]} { append winName a }
      label $winName -image $imgName -relief flat -borderwidth 0 -background white
      $w window create end -window $winName
    }
    if {[strIsPrefix "button " $tagName]} {
      set idx [ string first "-command" $tagName]
      set cmd ""
      if {$idx == -1} {
        set imgName [string range $tagName 7 end]
      } else  {
        set imgName [string trim [string range $tagName 7 [expr $idx -1]]]
        set cmd [ string range $tagName [expr $idx +9] end ]
      }
      set winName $w.$imgName
      while {[winfo exists $winName]} { append winName a }
      button $winName -image $imgName -command $cmd
      $w window create end -window $winName
    }
    if {[strIsPrefix "window " $tagName]} {
      set winName [string range $tagName 7 end]
      $w window create end -window $winName
    }
    
    # Now eliminate the processed text from the string:
    set str [string range $str [expr {$endPos + 1}] end]
    incr count
    if {$count == $::htext::updates($w)} { update idletasks; set count 1 }
    if {$::htext::interrupt} {
      $w configure -state disabled
      return
    }
  }
  
  # Now add any remaining text:
  if {! $::htext::interrupt} { $w insert end $str }
  
  if {$seePoint != ""} { $w yview $seePoint }
  $w configure -state disabled
  # set elapsed [expr {[clock clicks -milli] - $start}]
}


# openURL:
#    Sends a command to the user's web browser to view a webpage given
#    its URL.
#
proc openURL {url} {
  global windowsOS
  busyCursor .
  if {$windowsOS} {
    # On Windows, use the "start" command:
    regsub -all " " $url "%20" url
    if {[string match $::tcl_platform(os) "Windows NT"]} {
      catch {exec $::env(COMSPEC) /c start $url &}
    } else {
      catch {exec start $url &}
    }
  } elseif {$::macOS} {
    # On Mac OS X use the "open" command:
    catch {exec open $url &}
  } else {
    # On Unix systems, there is no standard for invoking favorite
    # web browser, so just try starting Mozilla or Netscape.
    
    # First, check if Mozilla seems to be available:
    if {[file executable [auto_execok firefox]]} {
      # First, try -remote mode:
      if {[catch {exec /bin/sh -c "$::auto_execs(firefox) -remote 'openURL($url)'"}]} {
        # Now try a new Mozilla process:
        catch {exec /bin/sh -c "$::auto_execs(firefox) '$url'" &}
      }
    } elseif {[file executable [auto_execok iceweasel]]} {
      # First, try -remote mode:
      if {[catch {exec /bin/sh -c "$::auto_execs(iceweasel) -remote 'openURL($url)'"}]} {
        # Now try a new Mozilla process:
        catch {exec /bin/sh -c "$::auto_execs(iceweasel) '$url'" &}
      }
    } elseif {[file executable [auto_execok mozilla]]} {
      # First, try -remote mode:
      if {[catch {exec /bin/sh -c "$::auto_execs(mozilla) -remote 'openURL($url)'"}]} {
        # Now try a new Mozilla process:
        catch {exec /bin/sh -c "$::auto_execs(mozilla) '$url'" &}
      }
    } elseif {[file executable [auto_execok www-browser]]} {
      # Now try a new Mozilla process:
      catch {exec /bin/sh -c "$::auto_execs(www-browser) '$url'" &}
    } elseif {[file executable [auto_execok netscape]]} {
      # OK, no Mozilla (poor user) so try Netscape (yuck):
      # First, try -remote mode to avoid starting a new netscape process:
      if {[catch {exec /bin/sh -c "$::auto_execs(netscape) -raise -remote 'openURL($url)'"}]} {
        # Now just try starting a new netscape process:
        catch {exec /bin/sh -c "$::auto_execs(netscape) '$url'" &}
      }
    } else {
      foreach executable {iexplorer opera lynx w3m links epiphan galeon
        konqueror mosaic amaya browsex elinks} {
        set executable [auto_execok $executable]
        if [string length $executable] {
          # Is there any need to give options to these browsers? how?
          set command [list $executable $url &]
          catch {exec /bin/sh -c "$executable '$url'" &}
          break
        }
      }
    }
  }
  unbusyCursor .
}
# adds a checkbox to show hidden files
catch {tk_getOpenFile -with-invalid-argument}
namespace eval ::tk::dialog::file {
  variable showHiddenBtn 1
  variable showHiddenVar 0
}

# ::file::Exit
#
#    Prompt for confirmation then exit.
#
proc ::file::Exit {}  {
  # Check for altered game in all bases except the clipbase:
  set unsavedCount 0
  set savedBase [sc_base current]
  set msg ""
  set nbases [sc_base count total]
  for {set i 1} {$i < [sc_base count total]} {incr i} {
    sc_base switch $i
    if {[sc_base inUse] && [sc_game altered] && ![sc_base isReadOnly]} {
      if {$unsavedCount == 0} {
        append msg $::tr(ExitUnsaved)
        append msg "\n\n"
      }
      incr unsavedCount
      set fname [file tail [sc_base filename]]
      set g [sc_game number]
      append msg "   Base $i: $fname "
      append msg "($::tr(game) $g)"
      append msg "\n"
    }
  }
  # Switch back to original database:
  sc_base switch $savedBase
  
  # Check if a mask is opened and dirty
  ::tree::mask::close
  
  if {$msg != ""} {
    append msg "\n"
  }
  append msg $::tr(ExitDialog)
  
  # Only ask before exiting if there are unsaved changes:
  if {$unsavedCount > 0} {
    set answer [tk_messageBox -title "Scid: [tr FileExit]" \
        -message $msg -type yesno -icon question]
    if {$answer != "yes"} { return }
  }
  if {$::optionsAutoSave} {
    # restore askToReplaceMoves if necessary
    if {[winfo exists .tacticsWin]} {
      ::tactics::restoreAskToReplaceMoves
    }
    # restore options if findBestMove in progress
    ::tactics::findBestMoveExit
    .menu.options invoke [tr OptionsSave]
  }
  ::recentFiles::save
  ::utils::history::Save
  destroy .
}

proc ::file::ExitFast {} {
  if {$::optionsAutoSave} {
    # restore askToReplaceMoves if necessary
    if {[winfo exists .tacticsWin]} {
      ::tactics::restoreAskToReplaceMoves
    }
    .menu.options invoke [tr OptionsSave]
  }
  ::recentFiles::save
  destroy .
}

# ::file::New
#
#   Opens file-save dialog and creates a new database.
#
proc ::file::New {} {
  if {[sc_base count free] == 0} {
    tk_messageBox -title "Scid" -type ok -icon info \
        -message "Too many databases open; close one first"
    return
  }
  set ftype {
    { "Scid databases, EPD files" {".si4" ".epd"} }
    { "Scid databases" {".si4"} }
    { "EPD files" {".epd"} }
  }
  
  if { [ file exists $::initialDir(base) ] } {
    set fName [tk_getSaveFile -initialdir $::initialDir(base) -filetypes $ftype -title "Create a Scid database"]
  } else  {
    set fName [tk_getSaveFile -filetypes $ftype -title "Create a Scid database"]
  }
  
  if {$fName == ""} {
    # do nothing
  } elseif {[file extension $fName] == ".epd"} {
    newEpdWin create $fName
    return
  } else {
    set fName [file rootname $fName]
    if {[catch {sc_base create $fName} result]} {
      tk_messageBox -icon warning -type ok -parent . \
          -title "Scid: Unable to create base" -message $result
    }
  }
  set ::initialDir(base) [file dirname $fName]
  ::recentFiles::add "$fName.si4"
  ::notify::DatabaseChanged
  updateBoard -pgn
}

# ::file::Open
#
#    Opens file-open dialog and opens the selected Scid database.
#
proc ::file::Open {{fName ""}} {
  if {[sc_base count free] == 0} {
    tk_messageBox -type ok -icon info -title "Scid" \
        -message "Too many databases are open; close one first"
    return
  }
  
  if {[sc_info gzip]} {
    set ftype {
      { "All Scid files" {".si4" ".si3" ".pgn" ".pgn.gz" ".epd" ".epd.gz" ".sor"} }
      { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN" ".pgn.gz"} }
      { "Scid databases" {".si4" ".si3"} }
      { "PGN files" {".pgn" ".PGN" ".pgn.gz"} }
      { "EPD files" {".epd" ".EPD" ".epd.gz"} }
      { "Repertoire files" {".sor"} }
    }
  } else {
    set ftype {
      { "All Scid files" {".si4" ".si3" ".pgn" ".epd" ".sor"} }
      { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN"} }
      { "Scid databases" {".si4" ".si3"} }
      { "PGN files" {".pgn" ".PGN"} }
      { "EPD files" {".epd" ".EPD"} }
      { "Repertoire files" {".sor"} }
    }
  }
  
  if {$fName == ""} {
    set fName [tk_getOpenFile -initialdir $::initialDir(base) -filetypes $ftype -title "Open a Scid file"]
    if {$fName == ""} { return }
  }
  
  if {[file extension $fName] == ""} {
    set fName "$fName.si4"
  }
  
  if {[file extension $fName] == ".sor"} {
    if {[catch {::rep::OpenWithFile $fName} err]} {
      tk_messageBox -parent . -type ok -icon info -title "Scid" \
          -message "Unable to open \"$fName\": $err"
    }
    return
  }
  
  if {[file extension $fName] == ".si3"} {
    ::file::Upgrade [file rootname $fName]
    return
  }
  
  set err 0
  busyCursor .
  if {[file extension $fName] == ".si4"} {
    set fName [file rootname $fName]
    if {[catch {openBase $fName} result]} {
      set err 1
      tk_messageBox -icon warning -type ok -parent . \
          -title "Scid: Error opening file" -message $result
    } else {
      set ::initialDir(base) [file dirname $fName]
      ::recentFiles::add "$fName.si4"
    }
  } elseif {[string match "*.epd*" [string tolower $fName]]} {
    # EPD file:
    newEpdWin open $fName
  } else {
    # PGN file:
    set result "This file is not readable."
    if {(![file readable $fName])  || \
          [catch {sc_base create $fName true} result]} {
      set err 1
      tk_messageBox -icon warning -type ok -parent . \
          -title "Scid: Error opening file" -message $result
    } else {
      doPgnFileImport $fName "Opening [file tail $fName] read-only...\n"
      sc_base type [sc_base current] 3
      ::recentFiles::add $fName
    }
  }
  
  if {$err == 0} {
    catch {sc_game load auto}
    flipBoardForPlayerNames $::myPlayerNames
  }
  unbusyCursor .
  updateBoard -pgn
  updateGameInfoMenu
  ::notify::DatabaseChanged
}

# ::file::Upgrade
#
#   Upgrades an old (version 3) Scid database to version 4.
#
proc ::file::Upgrade {name} {
  if {[file readable "$name.si4"]} {
    set msg [string trim $::tr(ConfirmOpenNew)]
    set res [tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
    if {$res == "no"} { return }
    ::file::Open "$name.si4"
    return
  }
  
  set msg [string trim $::tr(ConfirmUpgrade)]
  set res [tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
  if {$res == "no"} { return }
  progressWindow "Scid" "$::tr(Upgrading): [file tail $name]..."\
      $::tr(Cancel) "sc_progressBar"
  busyCursor .
  update
  set err [catch {sc_base upgrade $name} res]
  unbusyCursor .
  closeProgressWindow
  if {$err} {
    tk_messageBox -title "Scid" -type ok -icon warning \
        -message "Unable to upgrade the database:\n$res"
    return
  } else  {
    # rename game and name files, delete old .si3
    file rename "$name.sg3"  "$name.sg4"
    file rename "$name.sn3"  "$name.sn4"
    file delete "$name.si3"
  }
  ::file::Open "$name.si4"
}

# openBase:
#    Opens a Scid database, showing a progress bar in a separate window
#    if the database is around 1 Mb or larger in size.
#   ::file::Open should be used if the base is not already in si4 format
proc openBase {name} {
  set bsize 0
  set gfile "[file rootname $name].sg4"
  if {! [catch {file size $gfile} err]} { set bsize $err }
  set showProgress 0
  if {$bsize > 1000000} { set showProgress 1 }
  if {$showProgress} {
    progressWindow "Scid" "$::tr(OpeningTheDatabase): [file tail $name]..."
  }
  set err [catch {sc_base open $name} result]
  if {$showProgress} { closeProgressWindow }
  if {$err} { return -code error $result }
  return $result
}


# ::file::Close:
#   Closes the active base.
#
proc ::file::Close {{base -1}} {
  # Remember the current base:
  set current [sc_base current]
  if {$base < 0} { set base $current }
  if {![sc_base inUse $base]} { return }
  # Switch to the base which will be closed, and check for changes:
  sc_base switch $base
  if {![::game::ConfirmDiscard]} {
    sc_base switch $current
    return
  }
  sc_base close
  ::game::HistoryRemoveDB $base
    
  # If base to close was the current one, reset to clipbase
  if { $current == $base } {
    setTrialMode 0
    set current 9
  }

  # Close Tree window whenever a base is closed/switched:
  if {[winfo exists .treeWin$base]} { destroy .treeWin$base }
  # Now switch back to the original base
  ::file::SwitchToBase $current
  updateBoard -pgn
  ::notify::DatabaseChanged
}


proc ::file::SwitchToBase {{b} {saveHistory 1}} {
  if {[sc_base current] == $b} { return }
  sc_base switch $b
  if {$saveHistory == 1} { ::game::HistoryDatabaseSwitch }
  # Close email window when a base is switched:
  if {[winfo exists .emailWin]} { destroy .emailWin }
  updateBoard -pgn
  ::notify::DatabaseChanged
}

################################################################################
proc ::file::openBaseAsTree { { fName "" } } {
  set current [sc_base current]
  
  if {[sc_base count free] == 0} {
    tk_messageBox -type ok -icon info -title "Scid" \
        -message "Too many databases are open; close one first"
    return
  }
  
  if {$fName == ""} {
    if {[sc_info gzip]} {
      set ftype {
        { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN" ".pgn.gz"} }
        { "Scid databases" {".si4" ".si3"} }
        { "PGN files" {".pgn" ".PGN" ".pgn.gz"} }
      }
    } else {
      set ftype {
        { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN"} }
        { "Scid databases" {".si4" ".si3"} }
        { "PGN files" {".pgn" ".PGN"} }
      }
    }
    set fName [tk_getOpenFile -initialdir $::initialDir(base) -filetypes $ftype -title "Open a Scid file"]
    if {$fName == ""} { return }
  }
  
  if {[file extension $fName] == ""} {
    set fName "$fName.si3"
  }
  
  if {[file extension $fName] == ".sor"} {
    if {[catch {::rep::OpenWithFile $fName} err]} {
      tk_messageBox -parent . -type ok -icon info -title "Scid" \
          -message "Unable to open \"$fName\": $err"
    }
    return
  }
  
  if {[file extension $fName] == ".si3"} {
    ::file::Upgrade [file rootname $fName]
    return
  }
  
  set err 0
  busyCursor .
  if {[file extension $fName] == ".si4"} {
    set fName [file rootname $fName]
    if {[catch {openBase $fName} result]} {
      unbusyCursor .
      set err 1
      tk_messageBox -icon warning -type ok -parent . -title "Scid: Error opening file" -message $result
      return
    } else {
      set ::initialDir(base) [file dirname $fName]
      ::recentFiles::add "$fName.si4"
    }
  } else {
    # PGN file:
    set result "This file is not readable."
    if {(![file readable $fName])  || \
          [catch {sc_base create $fName true} result]} {
      unbusyCursor .
      set err 1
      tk_messageBox -icon warning -type ok -parent . -title "Scid: Error opening file" -message $result
      return
    } else {
      doPgnFileImport $fName "Opening [file tail $fName] read-only...\n"
      sc_base type [sc_base current] 3
      ::recentFiles::add $fName
    }
  }
  
  unbusyCursor .
  set new_base [sc_base current]
  sc_base switch $current
  ::tree::make $new_base 1
}


####################
# File finder window

set ::file::finder::data(dir) [pwd]
set ::file::finder::data(sort) name
set ::file::finder::data(recurse) 0
set ::file::finder::data(stop) 0
set ::file::finder::data(Scid) 1
set ::file::finder::data(PGN) 1
set ::file::finder::data(Rep) 1
set ::file::finder::data(EPD) 1
set ::file::finder::data(Old) 1

proc ::file::finder::Open {} {
  set w .finder
  if {[winfo exists $w]} { return }
  
  toplevel $w
  wm title $w "Scid: $::tr(FileFinder)"
  bind $w <F1> {helpWindow Finder}
  setWinLocation $w
  bind $w <Configure> "recordWinSize $w"
  
  menu $w.menu
  $w configure -menu $w.menu
  
  $w.menu add cascade -label FinderFile -menu $w.menu.file
  menu $w.menu.file
  $w.menu.file add checkbutton -label FinderFileSubdirs \
      -variable ::file::finder::data(recurse) -onvalue 1 -offvalue 0 \
      -command ::file::finder::Refresh
  $w.menu.file add separator
  $w.menu.file add command -label FinderFileClose -command "destroy $w"
  
  $w.menu add cascade -label FinderSort -menu $w.menu.sort
  menu $w.menu.sort
  foreach {name value} {Type type Size size Mod mod Filename name Path path} {
    $w.menu.sort add radiobutton -label FinderSort$name \
        -variable ::file::finder::data(sort) -value $value \
        -command {::file::finder::Refresh -fast}
  }
  
  $w.menu add cascade -label FinderTypes -menu $w.menu.types
  menu $w.menu.types
  foreach type {Scid Old PGN Rep EPD} {
    $w.menu.types add checkbutton -label FinderTypes$type \
        -variable ::file::finder::data($type) -onvalue 1 -offvalue 0 \
        -command ::file::finder::Refresh
  }
  
  $w.menu add cascade -label FinderHelp -menu $w.menu.helpmenu
  menu $w.menu.helpmenu
  $w.menu.helpmenu add command -label FinderHelpFinder \
      -accelerator F1 -command {helpWindow Finder}
  $w.menu.helpmenu add command -label FinderHelpIndex -command {helpWindow Index}
  
  pack [frame $w.d] -side top -fill x
  label $w.d.label -text "$::tr(FinderDir):" -font font_Small
  set ::file::finder::data(menu) [tk_optionMenu $w.d.mb ::file::finder::data(dir) ""]
  $w.d.mb configure -font font_Small -width 1 -anchor e
  $::file::finder::data(menu) configure -font font_Small
  button $w.d.up -image tb_updir -command {::file::finder::Refresh ..}
  pack $w.d.label -side left -padx 5
  pack $w.d.up -side right -padx 5
  pack $w.d.mb -side left -fill x -expand yes
  
  frame $w.t
  frame $w.b
  text $w.t.text -width 65 -height 25 -font font_Small -wrap none \
      -fg black -bg white -yscrollcommand "$w.t.ybar set" -setgrid 1 \
      -cursor top_left_arrow
  scrollbar $w.t.ybar -command "$w.t.text yview" -width 12
  $w.t.text tag configure Dir -foreground brown
  $w.t.text tag configure Vol -foreground gray25
  $w.t.text tag configure PGN -foreground blue
  $w.t.text tag configure Scid -foreground red
  $w.t.text tag configure Old -foreground black
  $w.t.text tag configure Rep -foreground darkGreen
  $w.t.text tag configure EPD -foreground orange
  $w.t.text tag configure bold -font font_SmallBold
  $w.t.text tag configure center -justify center
  set xwidth [font measure [$w.t.text cget -font] "x"]
  set tablist {}
  foreach {tab justify} {15 r 30 r 32 l 50 l} {
    set tabwidth [expr {$xwidth * $tab} ]
    lappend tablist $tabwidth $justify
  }
  $w.t.text configure -tabs $tablist
  bindMouseWheel $w $w.t.text
  
  checkbutton $w.b.sub -text [tr FinderFileSubdirs] \
      -variable ::file::finder::data(recurse) -onvalue 1 -offvalue 0 \
      -command ::file::finder::Refresh
  dialogbutton $w.b.stop -textvar ::tr(Stop) -command {set finder(stop) 1 }
  dialogbutton $w.b.help -textvar ::tr(Help) -command {helpWindow Finder}
  dialogbutton $w.b.close -textvar ::tr(Close) -command "destroy $w"
  bind $w <Escape> {
    if {[winfo exists .finder.t.text.ctxtMenu]} {
      destroy .finder.t.text.ctxtMenu
      focus .finder
    } else {
      .finder.b.stop invoke
    }
  }
  # Bind left button to close ctxt menu:
  bind $w <ButtonPress-1> {
    if {[winfo exists .finder.t.text.ctxtMenu]} {
      destroy .finder.t.text.ctxtMenu
      focus .finder
    }
  }
  pack $w.b -side bottom -fill x
  packbuttons right $w.b.close $w.b.help $w.b.stop
  packbuttons left $w.b.sub
  pack $w.t -side top -fill both -expand yes
  pack $w.t.ybar -side right -fill y
  pack $w.t.text -side left -fill both -expand yes
  ::file::finder::ConfigMenus
  ::file::finder::Refresh
}

proc ::file::finder::Refresh {{newdir ""}} {
  variable data
  set w .finder
  if {! [winfo exists $w]} { return }
  set t $w.t.text
  
  # When parameter is "-fast", just re-sort the existing data:
  set fastmode 0
  if {$newdir == "-fast"} {
    set fastmode 1
    set newdir ""
  }
  if {$newdir == ".."} { set newdir [file dirname $data(dir)] }
  if {$newdir != ""} { set data(dir) $newdir }
  
  busyCursor .
  set data(stop) 0
  $w.b.close configure -state disabled
  $w.b.help configure -state disabled
  $w.b.sub configure -state disabled
  $w.b.stop configure -state normal
  catch {grab $w.b.stop}
  $t configure -state normal
  update
  
  if {$fastmode} {
    set flist $data(flist)
  } else {
    set flist [::file::finder::GetFiles $data(dir)]
    set data(flist) $flist
  }
  
  switch $data(sort) {
    "none" {}
    "type" { set flist [lsort -decreasing -index 1 $flist] }
    "size" { set flist [lsort -integer -decreasing -index 0 $flist] }
    "name" { set flist [lsort -dict -index 2 $flist] }
    "path" { set flist [lsort -dict -index 3 $flist] }
    "mod"  { set flist [lsort -integer -decreasing -index 4 $flist] }
  }
  
  set hc yellow
  $t delete 1.0 end
  set dcount 0
  $t insert end "$::tr(FinderDirs)\n" {center bold}
  set dlist {}
  
  # Insert drive letters, on Windows:
  if {$::windowsOS} {
    foreach drive [lsort -dictionary [file volume]] {
      $t insert end " $drive " [list Vol v$drive]
      $t insert end "    "
      $t tag bind v$drive <1> [list ::file::finder::Refresh $drive]
      $t tag bind v$drive <Any-Enter> \
          "$t tag configure [list v$drive] -background $hc"
      $t tag bind v$drive <Any-Leave> \
          "$t tag configure [list v$drive] -background {}"
    }
    $t insert end "\n"
  }
  
  # Insert parent directory entry:
  lappend dlist ..
  
  # Generate other directory entries:
  set dirlist [lsort -dictionary [glob -nocomplain [file join $data(dir) *]]]
  foreach dir $dirlist {
    if {[file isdir $dir]} {
      lappend dlist $dir
    }
  }
  foreach dir $dlist {
    if {$dcount != 0} {
      set sep "\n"
      if {$dcount % 2 != 0} { set sep "\t\t\t" }
      $t insert end $sep
    }
    incr dcount
    if {$dir == ".."} {
      set d ..
      $t insert end " .. ($::tr(FinderUpDir)) " [list Dir d..]
    } else {
      set d [file tail $dir]
      $t insert end " $d " [list Dir d$d]
    }
    $t tag bind d$d <1> [list ::file::finder::Refresh $dir]
    $t tag bind d$d <Any-Enter> \
        "$t tag configure [list d$d] -background $hc"
    $t tag bind d$d <Any-Leave> \
        "$t tag configure [list d$d] -background {}"
  }
  
  # Add File section headings:
  $t insert end "\n\n"
  if {[llength $flist] != 0} {
    foreach i {Type Size Mod Name Path} v {type size mod name path} {
      $t tag configure s$i -font font_SmallBold
      $t tag bind s$i <1> "set ::file::finder::data(sort) $v; ::file::finder::Refresh -fast"
      $t tag bind s$i <Any-Enter> "$t tag config s$i -foreground red"
      $t tag bind s$i <Any-Leave> "$t tag config s$i -foreground {}"
    }
    $t insert end "$::tr(FinderFiles)\n" {center bold}
    $t insert end " "
    $t insert end "[tr FinderSortType]" sType
    $t insert end "\t"
    $t insert end "[tr FinderSortSize]" sSize
    $t insert end "\t"
    $t insert end "[tr FinderSortMod]" sMod
    $t insert end "\t"
    $t insert end "[tr FinderSortName]" sName
    $t insert end "\t"
    $t insert end "[tr FinderSortPath]" sPath
    $t insert end "\n"
  }
  
  # Add each file:
  foreach i $flist {
    set size [lindex $i 0]
    set type [lindex $i 1]
    set fname [lindex $i 2]
    set path [lindex $i 3]
    set mtime [lindex $i 4]
    set est [lindex $i 5]
    $t insert end "\n "
    $t insert end $type [list $type f$path]
    set esize ""
    if {$est} { set esize "~" }
    append esize [::utils::thousands $size]
    $t insert end "\t$esize" f$path
    $t insert end "\t[clock format $mtime -format {%b %d %Y}]" f$path
    $t insert end "\t$fname\t" f$path
    set dir [file dirname $path]
    set tail [file tail $path]
    if {$dir == "."} {
      set fullpath $data(dir)/$tail
    } else  {
      set fullpath $data(dir)/$dir/$tail
    }
    
    $t tag bind f$path <ButtonPress-1> "::file::Open [list $fullpath]"
    # Bind right button to popup a contextual menu:
    $t tag bind f$path <ButtonPress-$::MB3> "::file::finder::contextMenu .finder.t.text [list $fullpath] %x %y %X %Y"
    
    $t tag bind f$path <Any-Enter> \
        "$t tag configure [list f$path] -background $hc"
    $t tag bind f$path <Any-Leave> \
        "$t tag configure [list f$path] -background {}"
    if {$dir == "."} {
      set fullpath "$data(dir)/$tail"
    } else {
      $t tag configure p$path -foreground darkblue
      $t insert end "$dir/" [list p$path f$path]
    }
    $t tag configure t$path -foreground blue
    $t insert end $tail [list t$path f$path]
  }
  $t configure -state disabled
  
  # Update directory menubutton:
  $data(menu) delete 0 end
  set mlist {}
  set d {}
  foreach subdir [file split $data(dir)] {
    set d [file join $d $subdir]
    lappend mlist $d
  }
  foreach m $mlist {
    $data(menu) add command -label $m -command "::file::finder::Refresh [list $m]"
  }
  
  catch {grab release $w.b.stop}
  $w.b.stop configure -state disabled
  $w.b.help configure -state normal
  $w.b.close configure -state normal
  $w.b.sub configure -state normal
  unbusyCursor .
  
}
################################################################################
#
################################################################################
proc ::file::finder::contextMenu {win fullPath x y xc yc} {
  
  update idletasks
  
  set mctxt $win.ctxtMenu
  
  if { [winfo exists $mctxt] } { destroy $mctxt }
  
  menu $mctxt
  $mctxt add command -label [tr FinderCtxOpen ] -command "::file::Open [list $fullPath]"
  $mctxt add command -label [tr FinderCtxBackup ] -command "::file::finder::backup [list $fullPath]"
  $mctxt add command -label [tr FinderCtxCopy ] -command "::file::finder::copy [list $fullPath]"
  $mctxt add command -label [tr FinderCtxMove ] -command "::file::finder::move [list $fullPath]"
  $mctxt add separator
  $mctxt add command -label [tr FinderCtxDelete ] -command "::file::finder::delete $fullPath"
  
  $mctxt post [winfo pointerx .] [winfo pointery .]
  
}
################################################################################
# will backup a base in the form name-date.ext
################################################################################
proc ::file::finder::backup { f } {
  set r [file rootname $f]
  set d [clock format [clock seconds] -format "-%Y.%m.%d-%H%M" ]
  set ext [string tolower [file extension $f]]
  if { $ext == ".si4" } {
    if { [catch { file copy "$r.sg4" "$r$d.sg4" ; file copy "$r.sn4" "$r$d.sn4" } err ] } {
      tk_messageBox -title Scid -icon error -type ok -message "File copy error $err"
      return
    }
    catch { file copy "$r.stc" "$r$d.stc" }
  }
  
  if { [catch { file copy "$r[file extension $f]" "$r$d[file extension $f]" } err ] } {
    tk_messageBox -title Scid -icon error -type ok -message "File copy error $err"
    return
  }
  
  ::file::finder::Refresh
}
################################################################################
#
################################################################################
proc ::file::finder::copy { f } {
  if {[sc_base slot $f] != 0} {
    tk_messageBox -title Scid -icon error -type ok -message "Close base first"
    return
  }
  set dir [tk_chooseDirectory -initialdir [file dirname $f] ]
  if {$dir != ""} {
    if { [string tolower [file extension $f]] == ".si4" } {
      if { [catch { file copy "[file rootname $f].sg4" "[file rootname $f].sn4" $dir } err ] } {
        tk_messageBox -title Scid -icon error -type ok -message "File copy error $err"
        return
      }
      
      catch { file copy "[file rootname $f].stc" $dir }
    }
    
    if { [catch { file copy $f $dir } err ] } {
      tk_messageBox -title Scid -icon error -type ok -message "File copy error $err"
      return
    }
    
  }
}
################################################################################
#
################################################################################
proc ::file::finder::move { f } {
  if {[sc_base slot $f] != 0} {
    tk_messageBox -title Scid -icon error -type ok -message "Close base first"
    return
  }
  set dir [tk_chooseDirectory -initialdir [file dirname $f] ]
  if {$dir != ""} {
    if { [string tolower [file extension $f]] == ".si4" } {
      
      if { [catch { file rename "[file rootname $f].sg4" "[file rootname $f].sn4" $dir } err ] } {
        tk_messageBox -title Scid -icon error -type ok -message "File rename error $err"
        return
      }
      catch { file rename "[file rootname $f].stc" $dir }
    }
    
    if { [catch { file rename $f $dir } err ] } {
      tk_messageBox -title Scid -icon error -type ok -message "File rename error $err"
      return
    }
  }
  ::file::finder::Refresh
}
################################################################################
#
################################################################################
proc ::file::finder::delete { f } {
  if {[sc_base slot $f] != 0} {
    tk_messageBox -title Scid -icon error -type ok -message "Close base first"
    return
  }
  set answer [tk_messageBox -title Scid -icon warning -type yesno -message "Are you sure you want to permanently delete $f ?"]
  if {$answer == "yes"} {
    if { [string tolower [file extension $f]] == ".si4" } {
      file delete "[file rootname $f].sg4" "[file rootname $f].sn4" "[file rootname $f].stc"
    }
    file delete $f
  }
  ::file::finder::Refresh
}
################################################################################
#
################################################################################
proc ::file::finder::ConfigMenus {{lang ""}} {
  if {! [winfo exists .finder]} { return }
  if {$lang == ""} { set lang $::language }
  set m .finder.menu
  foreach idx {0 1 2 3} tag {File Sort Types Help} {
    configMenuText $m $idx Finder$tag $lang
  }
  foreach idx {0 2} tag {Subdirs Close} {
    configMenuText $m.file $idx FinderFile$tag $lang
  }
  foreach idx {0 1 2 3 4} tag {Type Size Mod Name Path} {
    configMenuText $m.sort $idx FinderSort$tag $lang
  }
  foreach idx {0 1 2 3 4} tag {Scid Old PGN Rep EPD} {
    configMenuText $m.types $idx FinderTypes$tag $lang
  }
  foreach idx {0 1} tag {Finder Index} {
    configMenuText $m.helpmenu $idx FinderHelp$tag $lang
  }
}

proc ::file::finder::GetFiles {dir {len -1}} {
  variable data
  set dlist {}
  set flist {}
  if {$len < 0} {
    set len [expr {[string length $dir] + 1} ]
  }
  
  foreach f [glob -nocomplain [file join $dir *]] {
    if {[file isdir $f]} {
      lappend dlist $f
    } elseif {[file isfile $f]} {
      set ext [string tolower [file extension $f]]
      if {[catch {set mtime [file mtime $f]}]} { set mtime 0 }
      set showFile 0
      set rootname [file rootname $f]
      set type PGN
      if {$ext == ".si4"} {
        set showFile 1
        set type Scid
      } elseif {$ext == ".si3"} {
        set showFile 1
        set type Old
      } elseif {$ext == ".sor"} {
        set showFile 1
        set type Rep
      } elseif {$ext == ".epd"} {
        set type EPD
        set showFile 1
      } elseif {$ext == ".pgn"} {
        set showFile 1
      } elseif {$ext == ".gz"} {
        set rootname [file rootname $rootname]
        if {[regexp {\.epd\.gz} $f]} { set showFile 1; set type EPD }
        if {[regexp {\.pgn\.gz} $f]} { set showFile 1 }
      }
      if {$showFile  &&  [info exists data($type)]  &&  $data($type)} {
        set path [string range $f $len end]
        set est 0
        if {[catch {set size [sc_info fsize $f]}]} {
          # Could not determine file size, probably a PGN or EPD file
          # that the user does not have permission to read.
          set est 1
          set size 0
        }
        if {$size < 0} {
          set est 1
          set size [expr {0 - $size}]
        }
        if {[file dirname $path] == "."} { set path "./$path" }
        lappend flist [list $size $type [file tail $rootname] $path $mtime $est]
      }
    }
    update
    if {$data(stop)} { break }
  }
  if {$data(recurse)} {
    foreach f $dlist {
      foreach i [::file::finder::GetFiles $f $len] {
        lappend flist $i
        update
        if {$data(stop)} { break }
      }
    }
  }
  return $flist
}

# bookmark.tcl:
# Bookmarks list and Recently-used files list in Scid.

set bookmarks(data) {}
set bookmarks(subMenus) 0

# Read the bookmarks file if it exists:
catch {source [scidConfigFile bookmarks]}


namespace eval ::bookmarks {}

# ::bookmarks::PostMenu:
#   Posts the bookmarks toolbar menu.
#
proc ::bookmarks::PostMenu {} {
  .main.tb.bkm.menu post [winfo pointerx .] [winfo pointery .]
  if {[::bookmarks::CanAdd]} {
    .main.tb.bkm.menu activate 0
  } else {
    .main.tb.bkm.menu activate 2
  }
}

# ::bookmarks::Refresh:
#   Updates all bookmarks submenus.
#
proc ::bookmarks::Refresh {} {
  foreach menu {.menu.file.bookmarks .main.tb.bkm.menu} {
    ::bookmarks::RefreshMenu $menu
  }
}

proc ::bookmarks::RefreshMenu {menu} {
  global bookmarks helpMessage

  ::bookmarks::DeleteChildren $menu
  $menu delete 0 end
  # $menu configure -disabledforeground [$menu cget -foreground]
  set numBookmarkEntries [llength $bookmarks(data)]
  $menu add command -label FileBookmarksAdd -command ::bookmarks::AddCurrent
  set helpMessage($menu,0) FileBookmarksAdd
  $menu add cascade -label FileBookmarksFile -menu $menu.file
  menu $menu.file
  set helpMessage($menu,1) FileBookmarksFile
  if {! [::bookmarks::CanAdd]} {
    $menu entryconfigure 0 -state disabled
    $menu entryconfigure 1 -state disabled
  }
  $menu add command -label FileBookmarksEdit -command ::bookmarks::Edit
  set helpMessage($menu,2) FileBookmarksEdit
  if {$bookmarks(subMenus)} {
    set display List
    set newval 0
  } else {
    set display Sub
    set newval 1
  }
  $menu add command -label FileBookmarks$display \
    -command "set bookmarks(subMenus) $newval; ::bookmarks::Refresh"
  set helpMessage($menu,3) FileBookmarks$display
  foreach tag [list Add File Edit $display] {
    configMenuText $menu FileBookmarks$tag FileBookmarks$tag $::language
  }
  if {$numBookmarkEntries == 0} { return }
  $menu add separator

  # Add each bookmark entry:
  set current $menu
  set inSubMenu 0
  set nfolders 0
  foreach entry $bookmarks(data) {
    if {$entry == ""} { continue }
    set isfolder [::bookmarks::isfolder $entry]

    if {$isfolder} {
      incr nfolders
      $menu.file add command -label [::bookmarks::Text $entry] \
        -command "::bookmarks::AddCurrent $nfolders"
    }

    if {! $bookmarks(subMenus)} {
      if {$isfolder} {
        $current add command -label [::bookmarks::IndexText $entry]
      } elseif {!$isfolder} {
        $current add command -label [::bookmarks::IndexText $entry] \
          -command [list ::bookmarks::Go $entry]
      }
      continue
    }

    # Move out of submenu where necessary:
    if {$isfolder  &&  $inSubMenu} {
      set current [winfo parent $current]
    }

    if {$isfolder} {
      # Menu (folder) entry:
      set current [::bookmarks::NewSubMenu $current $entry]
      set inSubMenu 1
    } else {
      # Bookmark entry:
      $current add command -label [::bookmarks::Text $entry] \
        -command [list ::bookmarks::Go $entry]
    }
  }
}

# ::bookmarks::CanAdd:
#   Returns 1 if the current game can be added as a bookmark.
#   It must be in an open database, not a PGN file, and not game number 0.
#
proc ::bookmarks::CanAdd {} {
  if {! [sc_base inUse]} { return 0 }
  if {[sc_game number] == 0} { return 0 }
  if {[sc_base current] == [sc_info clipbase]} { return 0 }
  if {[file pathtype [sc_base filename]] != "absolute"} { return 0 }
  foreach suffix {.pgn .PGN .pgn.gz} {
    if {[string match "*$suffix" [sc_base filename]]} { return 0 }
  }
  return 1
}

# ::bookmarks::AddCurrent:
#   Adds the current game to the bookmarks list.
#
proc ::bookmarks::AddCurrent {{folder 0}} {
  global bookmarks
  if {! [sc_base inUse]} {
    return
  }
  set text [::bookmarks::New game]
  set len [llength $bookmarks(data)]
  set fcount 0
  for {set i 0} {$i < $len} {incr i} {
    if {[::bookmarks::isfolder [lindex $bookmarks(data) $i]]} {
      if {$fcount == $folder} { break }
      incr fcount
    }
  }
  set bookmarks(data) [linsert $bookmarks(data) $i $text]
  ::bookmarks::Save
  ::bookmarks::Refresh
}

# ::bookmarks::New:
#   Returns a bookmarks list entry for the current game or a new folder.
#
proc ::bookmarks::New {type} {
  if {$type == "folder"} { return [list "f" ""] }
  set text "[file tail [sc_base filename]]: [sc_game info result], "
  append text "[::utils::string::Surname [sc_game info white]] - "
  append text "[::utils::string::Surname [sc_game info black]], "
  append text "[::utils::string::CityName [sc_game info site]] "
  set round [sc_game info round]
  if {$round != ""  &&  $round != "?"} { append text "($round) " }
  append text "[sc_game info year]"
  set list [list "g" $text]
  sc_game pgn
  lappend list [sc_base filename] [sc_game number] [sc_pos pgnOffset]
  lappend list [sc_game info white] [sc_game info black]
  lappend list [sc_game info year] [sc_game info site]
  lappend list [sc_game info round] [sc_game info result]
  return $list
}

# ::bookmarks::Go
#
#   Jumps to a selected bookmark.
#
proc ::bookmarks::Go {entry} {
  if {[::bookmarks::isfolder $entry]} { return }
  set fname [lindex $entry 2]
  set gnum [lindex $entry 3]
  set ply [lindex $entry 4]
  set slot [sc_base slot $fname]
  if {$slot != 0} {
    sc_base switch $slot
  } else {
    busyCursor .
    if {[catch { ::file::Open $fname} result]} {
      unbusyCursor .
      tk_messageBox -icon warning -type ok -parent . \
        -title "Scid" -message "Unable to load the database:\n$fname\n\n$result"
      return
    }
    unbusyCursor .
    set ::glist 1
    ::recentFiles::add "[file rootname $fname].si4"
  }
  # Find and load the best database game matching the bookmark:
  set white [lindex $entry 5]
  set black [lindex $entry 6]
  set year  [lindex $entry 7]
  set site  [lindex $entry 8]
  set round [lindex $entry 9]
  set result [lindex $entry 10]

  set best [sc_game find $gnum $white $black $site $round $year $result]
  if {[catch {::game::Load $best}]} {
    tk_messageBox -icon warning -type ok -parent . \
      -title "Scid" -message "Unable to load game number: $best"
  } else {
    sc_move pgn $ply
    flipBoardForPlayerNames $::myPlayerNames
  }
  updateBoard -pgn
  ::notify::DatabaseChanged
}

# ::bookmarks::DeleteChildren
#
#   Deletes all submenus of a bookmark menu.
#
proc ::bookmarks::DeleteChildren {w} {
  foreach child [winfo children $w] {
    ::bookmarks::DeleteChildren $child
    destroy $child
  }
}

# ::bookmarks::NewSubMenu
#
#   Creates a new bookmark submenu.
#
proc ::bookmarks::NewSubMenu {w entry} {
  set i 1
  while {[winfo exists $w.m$i]} { incr i }
  $w add cascade -label [::bookmarks::Text $entry] -menu $w.m$i
  menu $w.m$i -tearoff 0
  return $w.m$i
}

# Globals used for bookmark editing:
#
set bookmarks(edit) ""
set bookmarks(ismenu) 0


# ::bookmarks::Edit
#
#   Creates the bookmark editing window.
#
proc ::bookmarks::Edit {} {
  global bookmarks
  set w .bmedit
  if {[winfo exists $w]} { return }
  set bookmarks(old) $bookmarks(data)
  toplevel $w
  wm title $w "Scid: [tr FileBookmarksEdit]"
  # wm transient $w .
  bind $w <F1> {helpWindow Bookmarks}
  entry $w.e -width 40 -foreground black -background white \
    -textvariable bookmarks(edit) -font font_Small -exportselection 0
  bind $w.e <FocusIn>  {.bmedit.e configure -background lightYellow}
  bind $w.e <FocusOut> {.bmedit.e configure -background white}

  trace variable bookmarks(edit) w ::bookmarks::EditRefresh
  pack $w.e -side top -fill x
  pack [frame $w.b2] -side bottom -fill x
  pack [frame $w.b1] -side bottom -fill x
  pack [frame $w.f] -side top -fill both -expand 1
  listbox $w.f.list -width 50 -height 10 -yscrollcommand "$w.f.ybar set" \
    -fg black -bg white -exportselection 0 -font font_Small -setgrid 1
  scrollbar $w.f.ybar -takefocus 0 -command "$w.f.list yview"
  bind $w.f.list <<ListboxSelect>>  ::bookmarks::EditSelect
  pack $w.f.ybar -side right -fill y
  pack $w.f.list -side left -fill x -expand 1
  foreach entry $bookmarks(data) {
    $w.f.list insert end [::bookmarks::IndexText $entry]
  }
  dialogbutton $w.b1.newFolder -text $::tr(NewSubmenu) \
    -command {::bookmarks::EditNew folder}
  dialogbutton $w.b1.newGame -text [tr FileBookmarksAdd] \
    -command {::bookmarks::EditNew game}
  if {! [::bookmarks::CanAdd]} { $w.b1.newGame configure -state disabled }
  dialogbutton $w.b1.delete -text $::tr(Delete)  -command ::bookmarks::EditDelete
  button $w.b2.up -image tb_up -command {::bookmarks::EditMove up}
  button $w.b2.down -image tb_down -command {::bookmarks::EditMove down}
  foreach i [list $w.b2.up $w.b2.down] {
    $i configure -padx 0 -pady 0 -borderwidth 1
  }
  dialogbutton $w.b2.ok -text "OK" -command ::bookmarks::EditDone
  dialogbutton $w.b2.cancel -text $::tr(Cancel) -command {
    set bookmarks(data) $bookmarks(old)
    catch {grab release .bmedit}
    destroy .bmedit
  }
  pack $w.b1.newFolder $w.b1.newGame $w.b1.delete -side left -padx 2 -pady 2
  pack $w.b2.up $w.b2.down -side left -padx 2 -pady 2
  pack $w.b2.cancel $w.b2.ok -side right -padx 2 -pady 2
  set bookmarks(edit) ""

  wm withdraw $w
  update idletasks
  set x [expr {[winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \
                 - [winfo vrootx .]}]
  set y [expr {[winfo screenheight $w]/2 - [winfo reqheight $w]/2 \
                 - [winfo vrooty .]}]
  wm geom $w +$x+$y
  wm deiconify $w
  update
  catch {grab .bmedit}
}

# ::bookmarks::EditDone
#
#    Updates the bookmarks and closes the bookmark editing window.
#
proc ::bookmarks::EditDone {} {
  catch {grab release .bmedit}
  destroy .bmedit
  ::bookmarks::Save
  ::bookmarks::Refresh
}

# ::bookmarks::EditRefresh
#
#   Updates the bookmarks whenever the contents of the bookmark
#   editing entry box are changed.
#
proc ::bookmarks::EditRefresh {args} {
  global bookmarks
  set list .bmedit.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set text $bookmarks(edit)
  set e [lindex $bookmarks(data) $sel]
  set e [::bookmarks::SetText $e $text]
  set text [::bookmarks::IndexText $e]
  set bookmarks(data) [lreplace $bookmarks(data) $sel $sel $e]
  $list insert $sel $text
  $list delete [expr {$sel + 1} ]
  $list selection clear 0 end
  $list selection set $sel
}

# ::bookmarks::EditSelect
#
#   Sets the bookmark editing entry box when a bookmark is selected.
#
proc ::bookmarks::EditSelect {{sel ""}} {
  global bookmarks
  set list .bmedit.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} {
    .bmedit.e delete 0 end
    return
  }
  if {$sel >= [llength $bookmarks(data)]} {
    $list selection clear 0 end
    set bookmarks(edit) ""
    return
  }
  set e [lindex $bookmarks(data) $sel]
  set bookmarks(ismenu) [::bookmarks::isfolder $e]
  set bookmarks(edit) [::bookmarks::Text $e]
}

# ::bookmarks::isfolder:
#   Returns 1 if this bookmark entry is a folder (submenu).
#
proc ::bookmarks::isfolder {entry} {
  if {[lindex $entry 0] == "f"} { return 1 }
  return 0
}

# ::bookmarks::Text:
#   Returns the entry text of a bookmark.
#
proc ::bookmarks::Text {entry} {
  return [lindex $entry 1]
}

proc ::bookmarks::IndexText {entry} {
  set text ""
  if {[lindex $entry 0] == "f"} {
    append text "\[[lindex $entry 1]\]"
  } else {
    append text "    [lindex $entry 1]"
  }
  return $text
}

proc ::bookmarks::SetText {entry text} {
  return [lreplace $entry 1 1 $text]
}

# ::bookmarks::EditMove
#
#   Moves the selected bookmark "up" or "down" one place.
#
proc ::bookmarks::EditMove {{dir "up"}} {
  global bookmarks
  set w .bmedit
  set list $w.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set e [lindex $bookmarks(data) $sel]
  set text [::bookmarks::IndexText $e]
  set newsel $sel
  if {$dir == "up"} {
    incr newsel -1
    if {$newsel < 0} { return }
  } else {
    incr newsel
    if {$newsel >= [$list index end]} { return }
  }
  set bookmarks(data) [lreplace $bookmarks(data) $sel $sel]
  set bookmarks(data) [linsert $bookmarks(data) $newsel $e]
  $list selection clear 0 end
  $list delete $sel
  $list insert $newsel $text
  $list selection set $newsel
}

# ::bookmarks::EditDelete
#
#   Deletes the selected bookmark.
#
proc ::bookmarks::EditDelete {} {
  global bookmarks
  set w .bmedit
  set list $w.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set bookmarks(data) [lreplace $bookmarks(data) $sel $sel]
  $list selection clear 0 end
  $list delete $sel
  set bookmarks(edit) ""
}

# ::bookmarks::EditNew
#
#   Inserts a new entry ("folder" for a submenu or "game" for the
#   current game) after the selected bookmark.
#
proc ::bookmarks::EditNew {{type "folder"}} {
  global bookmarks
  set w .bmedit
  set list $w.f.list
  set folder 0
  if {[string index $type 0] == "f"} {
    set folder 1
    set entry [::bookmarks::New folder]
  } else {
    set entry [::bookmarks::New game]
  }
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} {
    lappend bookmarks(data) $entry
    set sel [$list index end]
    $list insert end [::bookmarks::IndexText $entry]
    $list selection clear 0 end
    $list selection set $sel
    $list see $sel
    ::bookmarks::EditSelect
    return
  }
  incr sel
  set bookmarks(data) [linsert $bookmarks(data) $sel $entry]
  $list insert $sel [::bookmarks::IndexText $entry]
  $list selection clear 0 end
  $list selection set $sel
  $list see $sel
  ::bookmarks::EditSelect
}

# ::bookmarks::Save
#
#   Saves the bookmarks file, reporting any error in a message box if
#   reportError is true.
#
proc ::bookmarks::Save {{reportError 0}} {
  global bookmarks
  set f {}
  set filename [scidConfigFile bookmarks]
  if  {[catch {open $filename w} f]} {
    if {$reportError} {
      tk_messageBox -title "Scid" -type ok -icon warning \
        -message "Unable to write bookmarks file: $filename\n$f"
    }
    return
  }
  puts $f "# Scid [sc_info version] bookmarks file\n"
  foreach i {subMenus data} {
    puts $f "set bookmarks($i) [list [set bookmarks($i)]]"
    puts $f ""
  }
  close $f
}


# End of file: bookmark.tcl

####################
# Recent files list:

set recentFiles(limit) 10   ;# Maximum number of recent files to remember.
set recentFiles(menu)   5   ;# Maximum number of files to show in File menu.
set recentFiles(extra)  5   ;# Maximum number of files to show in extra menu.
set recentFiles(data)  {}   ;# List of recently used files.

catch {source [scidConfigFile recentfiles]}

namespace eval ::recentFiles {}

# ::recentFiles::save
#   Saves the recent-file-list file, reporting any error in a message box
#   if reportError is true.
#
proc ::recentFiles::save {{reportError 0}} {
  global recentFiles
  set f {}
  set filename [scidConfigFile recentfiles]
  if  {[catch {open $filename w} f]} {
    if {$reportError} {
      tk_messageBox -title "Scid" -type ok -icon warning \
          -message "Unable to write file: $filename\n$f"
    }
    return
  }
  puts $f "# Scid [sc_info version] recent files list"
  puts $f ""
  foreach i {limit menu extra data} {
    puts $f "set recentFiles($i) [list [set recentFiles($i)]]"
    puts $f ""
  }
  close $f
}

# ::recentFiles::add
#   Adds a file to the recent files list, or moves it to the front
#   if that file is already in the list.
#
proc ::recentFiles::add {fname} {
  global recentFiles
  
  if {$fname == "" } { return }
  
  set rlist $recentFiles(data)
  
  # Remove file ot be added from its current place in the
  # list, if it is there:
  while {1} {
    set idx [lsearch -exact $rlist $fname]
    if {$idx < 0} { break }
    set rlist [lreplace $rlist $idx $idx]
  }
  
  # Insert the current file at the start of the list:
  set rlist [linsert $rlist 0 $fname]
  
  # Trim the list if necessary:
  if {[llength $rlist] < $recentFiles(limit)} {
    set rlist [lrange $rlist 0 [expr {$recentFiles(limit) - 1} ]]
  }
  
  set recentFiles(data) $rlist
  # ::recentFiles::save
}

# ::recentFiles::load
#   Loads the selected recent file, or swtches to its database slot
#   if it is already open.
#
proc ::recentFiles::load {fname} {
  set rname $fname
  if {[file extension $rname] == ".si4"} {
    set rname [file rootname $rname]
  }
  for {set i 1} {$i <= [sc_base count total]} {incr i} {
    if {$rname == [sc_base filename $i]} {
      sc_base switch $i
      ::recentFiles::add $fname
      ::notify::DatabaseChanged
      updateBoard -pgn
      return
    }
  }
  ::file::Open $fname
}

#################################################################################
proc ::recentFiles::treeshow {menu} {
  global recentFiles
  set rlist $recentFiles(data)
  $menu delete 0 end
  set nfiles [llength $rlist]
  if {$nfiles > $recentFiles(limit)} { set nfiles $recentFiles(limit) }
  
  for {set i 0} {$i<$nfiles} {incr i} {
    set name [lindex $rlist $i]
    $menu add command -label "$name" -command [list ::file::openBaseAsTree $name]
  }
}

#################################################################################
# ::recentFiles::show
#   Adds the recent files to the end of the specified menu.
#   Returns the number of menu entries added.
#
proc ::recentFiles::show {menu} {
  global recentFiles
  set idx [$menu index end]
  incr idx
  set rlist $recentFiles(data)
  set nfiles [llength $rlist]
  set nExtraFiles [expr {$nfiles - $recentFiles(menu)} ]
  if {$nfiles > $recentFiles(menu)} { set nfiles $recentFiles(menu) }
  if {$nExtraFiles > $recentFiles(extra)} {
    set nExtraFiles $recentFiles(extra)
  }
  if {$nExtraFiles < 0} { set nExtraFiles 0 }
  
  # Add menu commands for the most recent files:
  
  for {set i 0} {$i < $nfiles} {incr i} {
    set fname [lindex $rlist $i]
    set mname [::recentFiles::menuname $fname]
    set text [file tail $fname]
    set num [expr {$i + 1} ]
    set underline -1
    if {$num <= 9} { set underline 0 }
    if {$num == 10} { set underline 1 }
    $menu add command -label "$num: $mname" -underline $underline \
        -command [list ::recentFiles::load $fname]
    set ::helpMessage($menu,$idx) "  [file nativename $fname]"
    incr idx
  }
  
  # If no extra submenu of recent files is needed, return now:
  if {$nExtraFiles <= 0} { return $nfiles }
  
  # Now add the extra submenu of files:
  catch {destroy $menu.recentFiles}
  menu $menu.recentFiles
  $menu add cascade -label "..." -underline 0 -menu $menu.recentFiles
  set i $nfiles
  for {set extra 0} {$extra < $nExtraFiles} {incr extra} {
    set fname [lindex $rlist $i]
    incr i
    set mname [::recentFiles::menuname $fname]
    set text [file tail $fname]
    set num [expr {$extra + 1} ]
    set underline -1
    if {$num <= 9} { set underline 0 }
    if {$num == 10} { set underline 1 }
    $menu.recentFiles add command -label "$num: $mname" -underline $underline \
        -command [list ::recentFiles::load $fname]
    set ::helpMessage($menu.recentFiles,$extra) "  $fname"
  }
  return [expr {$nfiles + 1} ]
}

# ::recentFiles::menuname
#   Given a full-path filename, returns a possibly shortened
#   version suitable for displaying in a menu, such as
#   "..../my/files/abc.pgn" instead of "/long/path/to/my/files/abc.pgn"
#
proc ::recentFiles::menuname {fname} {
  set mname $fname
  set mname [file nativename $mname]
  if {[file extension $mname] == [sc_info suffix index]} {
    set mname [file rootname $mname]
  }
  if {[string length $mname] < 25} { return $mname }
  
  # Generate a menu name " ..../path/filename" for the file:
  set dir [file dirname $fname]
  while {1} {
    set tail [file join [file tail $dir] $mname]
    set dir [file dirname $dir]
    if {[string length $tail] > 20} { break }
    set mname $tail
  }
  set mname [file join .... $mname]
  set mname [file nativename $mname]
  return $mname
}

# ::recentFiles::configure
#   Produces a dialog box for configuring the number of recent files
#   to display in the File menu and in a submenu.
#
proc ::recentFiles::configure {} {
  global recentFiles
  set recentFiles(temp_menu) $recentFiles(menu)
  set recentFiles(temp_extra) $recentFiles(extra)
  set w .recentFilesDlg
  toplevel $w
  wm title $w "Scid: [tr OptionsRecent]"
  label $w.lmenu -text $::tr(RecentFilesMenu)
  scale $w.menu -variable recentFiles(temp_menu) -from 0 -to 10 -length 250 \
      -orient horizontal -showvalue 0 -tickinterval 1 -font font_Small
  frame $w.sep -height 4
  label $w.lextra -text $::tr(RecentFilesExtra)
  scale $w.extra -variable recentFiles(temp_extra) -from 0 -to 10 -length 250 \
      -orient horizontal -showvalue 0 -tickinterval 1 -font font_Small
  pack $w.lmenu $w.menu $w.sep $w.lextra $w.extra -side top -padx 10
  addHorizontalRule $w
  pack [frame $w.b] -side bottom
  button $w.b.ok -text "OK" -command {
    set recentFiles(menu) $recentFiles(temp_menu)
    set recentFiles(extra) $recentFiles(temp_extra)
    catch {grab release .recentFilesDlg}
    destroy .recentFilesDlg
    ::recentFiles::save
    updateMenuStates
  }
  button $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
  catch {grab $w}
}

# epd.tcl: EPD editing windows for Scid.
# Copyright (C) 2000  Shane Hudson
# Copyright (C) 2007  Pascal Georges

set maxEpd [sc_info limit epd]
set delayEpd 5
array set epdTimer {}

################################################################################
#
################################################################################
proc storeEpdText {id} {
  sc_epd set $id [.epd$id.text get 1.0 "end-1c"]
}
################################################################################
#
################################################################################
proc updateEpdWin {id} {
  set w .epd$id
  $w.text delete 1.0 end
  $w.text insert end [sc_epd get $id]
  
  # Update the EPD window status bar:
  set str "  --  "
  if {[sc_epd readonly $id]} {
    set str "  %%  "
  } elseif {[sc_epd altered $id]} {
    set str "  XX  "
  }
  append str "[file tail [sc_epd name $id]]  [sc_epd size $id] positions"
  set moves [lsort -ascii [sc_epd moves $id]]
  set len [llength $moves]
  if {$len} {
    append str "  \[[llength $moves]: [join $moves " "]\]"
  } else {
    append str {  [No moves from this position]}
  }
  $w.status configure -text $str
  unset str
}
################################################################################
#
################################################################################
proc updateEpdWins {} {
  global maxEpd
  for {set i 1} {$i <= $maxEpd} {incr i} {
    if {[winfo exists .epd$i]} { updateEpdWin $i }
  }
}
################################################################################
#
################################################################################
proc closeEpdWin {id} {
  catch {sc_epd close $id}
}
################################################################################
#
################################################################################
proc confirmCloseEpd {id} {
  if {! [winfo exists .epd$id]} { return }
  storeEpdText $id
  if {[sc_epd altered $id]  &&  ! [sc_epd readonly $id]} {
    set result [tk_dialog .dialog "Save changes?" \
        "This file has been altered; do you want to save it?" \
        "" 0 "Save changes" "Close without saving" "Cancel"]
    if {$result == 2} { return }
    if {$result == 0} { sc_epd write $id }
  }
  sc_epd close $id
  focus .
  destroy .epd$id
  return
}
################################################################################
#
################################################################################
proc saveEpdWin {id} {
  set w .epd$id
  busyCursor . 1
  set temp_oldcursor [$w.text cget -cursor]
  $w.text configure -cursor watch
  update idletasks
  storeEpdText $id
  sc_epd write $id
  updateEpdWin $id
  $w.text configure -cursor $temp_oldcursor
  busyCursor . 0
}
################################################################################
#
################################################################################
proc epd_MoveToDeepestMatch {id} {
  if {! [winfo exists .epd$id]} { return }
  sc_move ply [sc_epd deepest $id]
  updateBoard
  return
}
################################################################################
#
################################################################################
proc newEpdWin {cmd {fname ""}} {
  global maxEpd
  set showErrors 1
  if {$cmd == "openSilent"} { set showErrors 0 }
  if {$fname == ""} { set showErrors 1 }
  if {[sc_epd available] < 1} {
    if {$showErrors} {
      tk_messageBox -type ok -icon info -title "Too many EPD files open" \
          -message "You already have $maxEpd EPD files open; close one first."
    }
    return 0
  }
  set new_types { {"EPD files" {".epd"} } }
  set open_types $new_types
  if {[sc_info gzip]} {
    set open_types { {"EPD files" {".epd" ".epd.gz"} } }
  }
  if {$fname == ""} {
    if {$cmd == "create"} {
      set fname [tk_getSaveFile -initialdir $::initialDir(epd) -filetypes $new_types -title "Create an EPD file"]
      if {[string compare [file extension $fname] ".epd"] != 0} {
        append fname ".epd"
      }
    } elseif {$cmd == "open"} {
      set fname [tk_getOpenFile -initialdir $::initialDir(epd) -filetypes $open_types -title "Open an EPD file"]
    } else { return 0 }
  }
  if {$fname == ""} { return 0 }
  
  busyCursor . 1
  if {[catch {sc_epd $cmd $fname} result]} {
    if {$showErrors} {
      busyCursor . 0
      tk_messageBox -type ok -icon error -title "Scid: EPD file error" \
          -message $result
    }
    return 0
  }
  busyCursor . 0
  set id $result
  set w .epd$id
  toplevel $w
  wm title $w "Scid EPD: [file tail $fname]"
  wm minsize $w 40 1
  bind $w <Destroy> "closeEpdWin $id"
  bind $w <F1> { helpWindow EPD }
  
  frame $w.grid
  text $w.text -background white -font font_Regular -width 60 -height 7 \
      -wrap none -setgrid 1 -yscrollcommand "$w.ybar set" \
      -xscrollcommand "$w.xbar set"
  bind $w.text <KeyRelease> "storeEpdText $id"
  scrollbar $w.ybar -takefocus 0 -command "$w.text yview"
  scrollbar $w.xbar -orient horizontal -takefocus 0 -command "$w.text xview"
  label $w.status -width 1 -anchor w -font font_Small -relief sunken
  listbox $w.lb -background white -font font_Regular -width 60 -height 7 -setgrid 1 -yscrollcommand "$w.ybar2 set" \
      -xscrollcommand "$w.xbar2 set" -selectmode single
  scrollbar $w.ybar2 -takefocus 0 -command "$w.lb yview"
  scrollbar $w.xbar2 -orient horizontal -takefocus 0 -command "$w.lb xview"
  
  frame $w.menu -borderwidth 3 -relief raised
  pack $w.menu  -side top -fill x
  menubutton $w.menu.file -text File -menu $w.menu.file.m -underline 0
  menubutton $w.menu.edit -text Edit -menu $w.menu.edit.m -underline 0
  menubutton $w.menu.tools -text Tools -menu $w.menu.tools.m -underline 0
  menubutton $w.menu.help -text Help -menu $w.menu.help.m -underline 0
  
  foreach i {file edit tools help} {
    menu $w.menu.$i.m -tearoff 0
    pack $w.menu.$i -side left
  }
  
  set m $w.menu.file.m
  $m add command -label "New" -acc "Ctrl+N" -underline 0 \
      -command {newEpdWin create}
  bind $w <Control-n> {newEpdWin create}
  $m add command -label "Open" -acc "Ctrl+O" -underline 0 \
      -command {newEpdWin open}
  bind $w <Control-o> {newEpdWin open}
  $m add command -label "Save" -acc "Ctrl+S" -underline 0 \
      -command "saveEpdWin $id"
  if {[sc_epd readonly $id]} {
    $m entryconfig "Save" -state disabled
  } else {
    bind $w <Control-s> "saveEpdWin $id; break"
  }
  $m add command -label "Close" -acc "Ctrl+Q" -underline 0 \
      -command "confirmCloseEpd $id"
  bind $w <Control-q> "confirmCloseEpd $id"
  
  set m $w.menu.edit.m
  $m add command -label "Cut" -acc "Ctrl+X" -underline 2 -command "tk_textCut $w.text"
  $m add command -label "Copy" -acc "Ctrl+C" -underline 0 -command "tk_textCopy $w.text"
  $m add command -label "Paste" -acc "Ctrl+V" -underline 0 -command "tk_textPaste $w.text"
  $m add command -label "Select All" -acc "Ctrl+A" -underline 7 \
      -command "$w.text tag add sel 1.0 end"
  bind $w <Control-a> "$w.text tag add sel 1.0 end; break"
  $m add separator
  $m add command -label "Revert" -acc "Ctrl+R" -underline 0 \
      -command "updateEpdWin $id"
  bind $w <Control-r> "updateEpdWin $id; break"
  $m add command -label "Sort lines" -accel "Ctrl+Shift+S" \
      -underline 0 -command "epd_sortLines $w.text"
  bind $w <Control-S> "epd_sortLines $w.text; break"
  
  set m $w.menu.tools.m
  $m add command -label "Find Deepest game position" \
      -underline 5 -command "epd_MoveToDeepestMatch $id"
  $m add separator
  $m add command -label "Next position in file" \
      -accelerator "Ctrl+DownArrow" -underline 0 \
      -command "sc_epd next $id; updateBoard -pgn"
  bind $w <Control-Down> "sc_epd next $id; updateBoard -pgn; break"
  $m add command -label "Previous position in file" \
      -accelerator "Ctrl+UpArrow" -underline 0 \
      -command "sc_epd prev $id; updateBoard -pgn"
  bind $w <Control-Up> "sc_epd prev $id; updateBoard -pgn; break"
  $m add separator
  $m add command -label "Paste analysis" -accelerator "Ctrl+Shift+A" \
      -underline 6 -command "epd_pasteAnalysis $w.text"
  bind $w <Control-A> "epd_pasteAnalysis $w.text; break"
  $m add command -label "Annotate positions" -command "epd_Analyse $w.text $id"
  $m add separator
  $m add command -label "Strip out EPD field" -underline 0 \
      -command "epd_chooseStripField $id"
  
  $w.menu.help.m add command -label "EPD files help" -underline 0 \
      -acc "F1" -command "helpWindow EPD"
  $w.menu.help.m add command -label "General index" -underline 0 \
      -command "helpWindow Index"
  
  pack $w.status -side bottom -fill x
  pack $w.grid -fill both -expand yes
  grid $w.text -in $w.grid -row 0 -column 0 -sticky news
  grid $w.ybar -in $w.grid -row 0 -column 1 -sticky news
  grid $w.xbar -in $w.grid -row 1 -column 0 -sticky news
  grid $w.lb -in $w.grid -row 2 -column 0 -sticky news
  grid $w.ybar2 -in $w.grid -row 2 -column 1 -sticky news
  grid $w.xbar2 -in $w.grid -row 3 -column 0 -sticky news
  
  grid rowconfig $w.grid 0 -weight 1 -minsize 0
  grid columnconfig $w.grid 0 -weight 1 -minsize 0
  
  # Right-mouse button cut/copy/paste menu:
  menu $w.text.edit -tearoff 0
  $w.text.edit add command -label "Cut"  -command "tk_textCut $w.text"
  $w.text.edit add command -label "Copy" -command "tk_textCopy $w.text"
  $w.text.edit add command -label "Paste" -command "tk_textPaste $w.text"
  bind $w.text <ButtonPress-$::MB3> "tk_popup $w.text.edit %X %Y"
  
  updateEpdWin $id
  
  loadEpdLines $id
  
  bind $w.lb <<ListboxSelect>> "refreshEpd $id"
  
  return 1
}
################################################################################
#
################################################################################
proc refreshEpd { id } {
  set w .epd$id
  set idx [ expr [$w.lb curselection] +1 ]
  sc_epd load $id $::selection($id) $idx
  set ::selection($id) $idx
  updateBoard -pgn
}
################################################################################
#
################################################################################
proc loadEpdLines { id } {
  set w .epd$id
  set size [sc_epd size $id ]
  for { set i 1 } { $i <= $size } { incr i } {
    sc_epd next $id
    set line [sc_epd get $id]
    set line [string map {"\n" "; "} $line]
    set fen [string range [sc_pos fen] 0 end-4]
    $w.lb insert end "$i $fen $line"
  }
  $w.lb selection set 0
  if {! [catch {sc_epd load $id $size 1} ]} {
    set ::selection($id) 1
    updateBoard -pgn
  }
}
################################################################################
#
################################################################################
proc epd_sortLines {textwidget} {
  if {! [winfo exists $textwidget]} { return }
  set text [$textwidget get 1.0 "end-1c"]
  set fieldlist [split $text "\n"]
  set sortedlist [lsort $fieldlist]
  while {[lindex $sortedlist 0] == ""} {
    set sortedlist [lrange $sortedlist 1 end]
  }
  set newtext [join $sortedlist "\n"]
  append newtext "\n"
  if {! [string compare $text $newtext]} { return }
  $textwidget delete 1.0 end
  $textwidget insert end "$newtext"
}
################################################################################
# epd_Analyse:
#    Pastes current chess engine analysis into this EPD file position.
################################################################################
proc epd_Analyse { textwidget id } {
  global analysis
  
  if {! [winfo exists $textwidget]} { return }
  
  # choose analysis time
  set y .epdDelay
  toplevel $y
  wm title $y "Scid EPD"
  label $y.label -text $::tr(AnnotateTime:)
  pack $y.label -side top -pady 5 -padx 5
  spinbox $y.spDelay -background white -width 8 -textvariable ::delayEpd -from 1 -to 300 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
  pack $y.spDelay -side top -pady 5
  button $y.ok -text "OK" -command "destroy $y ; epd_LaunchAnalysis $id $textwidget"
  pack $y.ok -side right -padx 5 -pady 5
  focus $y.spDelay
  update ; # or grab will fail
  grab $y
  
}
################################################################################
# strips all fields that will be pasted from analysis window
################################################################################
proc epd_clearEpdFields {id} {
  foreach field { "acd" "acn" "ce" "pv" } {
    set result [sc_epd strip $id $field]
    updateEpdWin $id
  }
}
################################################################################
#
################################################################################
proc epd_LaunchAnalysis {id textwidget} {
  if {! [winfo exists .analysisWin1]} {
    makeAnalysisWin
  }
  epd_clearEpdFields $id
  set w .epd$id
  set size [sc_epd size $id ]
  set ::epdTimer($id) 0
  for { set i 1 } { $i <= $size } { incr i } {
    $w.lb selection clear [expr $::selection($id) - 1]
    $w.lb selection set [expr $i -1]
    $w.lb see [expr $i -1]
    refreshEpd $id
    after [expr $::delayEpd * 1000 ] "set ::epdTimer($id) 1"
    vwait ::epdTimer($id)
    epd_pasteAnalysis $textwidget
    saveEpdWin $id
    if {! [winfo exists .analysisWin1]} {
      break
    }
  }
}

################################################################################
# epd_pasteAnalysis:
#    Pastes current chess engine analysis into this EPD file position.
################################################################################
proc epd_pasteAnalysis {textwidget} {
  global analysis
  if {! [winfo exists $textwidget]} { return }
  if {! [winfo exists .analysisWin1]} { return }
  $textwidget insert insert "acd $analysis(depth1)\n"
  $textwidget insert insert "acn $analysis(nodes1)\n"
  $textwidget insert insert "acs $analysis(time1)\n"
  set ce [expr {int($analysis(score1) * 100)} ]
  if {[sc_pos side] == "black"} { set ce [expr {0 - $ce} ] }
  $textwidget insert insert "ce $ce\n"
  if { $analysis(uci1) } {
      $textwidget insert insert "pv "
      set moves [::uci::formatPv $analysis(moves1) $analysis(fen1)]
      $textwidget insert insert [addMoveNumbers [::trans $moves]]
      $textwidget insert insert "\n"
  } else {
      $textwidget insert insert "pv $analysis(moves1)\n"
  }
}

set epd_stripField ""
################################################################################
#
################################################################################
proc epd_chooseStripField {id} {
  global epd_stripField
  if {! [winfo exists .epd$id]} { return }
  set w [toplevel .epdStrip]
  wm title $w "Scid: Strip EPD field"
  wm resizable $w false false
  label $w.label -text "Enter the name of the EPD field you want\n\
      removed from all positions in this file:"
  entry $w.e -width 10 -background white -textvariable epd_stripField
  pack $w.label $w.e -side top -pady 5 -padx 5
  addHorizontalRule $w
  set b [frame $w.buttons]
  pack $b -side bottom -pady 5
  button $b.ok -text "Strip EPD field" \
      -command "epd_stripEpdField $id \$epd_stripField"
  button $b.cancel -text "Cancel" -command "focus .epd$id; destroy $w"
  pack $b.ok $b.cancel -side left -padx 5
  bind $w <Return> "$b.ok invoke"
  bind $w <Escape> "$b.cancel invoke"
  focus .epdStrip.e
  grab .epdStrip
}
################################################################################
#
################################################################################
proc epd_stripEpdField {id field} {
  if {! [winfo exists .epdStrip]} { return }
  if {! [string compare $field ""]} { beep; return }
  set result [sc_epd strip $id $field]
  updateEpdWin $id
  tk_messageBox -type ok -icon info -title "Scid: EPD field stripped" \
      -message "Scid found and stripped an EPD field named \"$field\" from\
      $result positions."
  focus .epd$id
  destroy .epdStrip
}
################################################################################
#
################################################################################
### spellchk.tcl
### Part of Scid.
### Copyright (C) 2000-2003 Shane Hudson.

set spellcheckType Player

# Maximum nr of corrections to be scanned
# Set to zero to find them all
# Set to some positive number to limit
#
set spell_maxCorrections 0

set spellcheckSurnames 0
set spellcheckAmbiguous 1

# Remember what we are doing, being
# - "idle"       - nothing special
# - "scanning"   - finding corrections
# - "correcting" - making corrections
#
set spellstate idle

# readSpellCheckFile:
#    Presents a File Open dialog box for a Scid spellcheck file,
#    then tries to read the file. If the parameter "message" is true
#    (which is the default), a message box indicating the results
#    is displayed.
#
proc readSpellCheckFile {{message 1}} {
  global spellCheckFile
  set ftype { { "Scid Spellcheck files" {".ssp" ".ssp.gz"} } }
  set fullname [tk_getOpenFile -initialdir [pwd] -filetypes $ftype -title "Open Spellcheck file"]
  if {![string compare $fullname ""]} { return 0 }

  if {[catch {sc_name read $fullname} result]} {
      if {$message} {
        tk_messageBox -title "ERROR: Unable to read file" -type ok \
          -icon error -message "Scid could not correctly read the spellcheck file you selected:\n\n$result"
      }
    return 0
  }
  set spellCheckFile $fullname
  if {$message} {
    tk_messageBox -title "Spellcheck file loaded." -type ok -icon info \
      -message "Spellcheck file [file tail $fullname] loaded:\n[lindex $result 0] players, [lindex $result 1] events, [lindex $result 2] sites, [lindex $result 3] rounds.\n\nTo have this file automatically loaded every time you start Scid, select the \"Save Options\" from the Options menu before exiting."
  }
  return 1
}

# Set the environment when the correction scan starts
#
proc startScanning {} {
    global spellstate
    global spellcheckType
    
    # Remember that we are scanning
    #
    set spellstate scanning
    
    # Disable all buttons except the cancel button that we
    # transfer into a stop button
    #
    .spellcheckWin.buttons.ambig  configure -state disabled
    .spellcheckWin.buttons.ok     configure -state disabled
    .spellcheckWin.buttons.cancel configure -text "Stop"
    bind .spellcheckWin <Alt-s> ".spellcheckWin.buttons.cancel invoke; break"
    if {$spellcheckType == "Player"} {
        .spellcheckWin.buttons.surnames configure -state disabled
    }
}

# Set the environment when the correction scan stops
#
proc stopScanning {} {
    global spellstate
    global spellcheckType
    
    # Remember that we are not scanning
    #
    set spellstate idle
    
    # Enable all buttons and set the cancel button back
    #
    .spellcheckWin.buttons.ambig  configure -state enabled
    .spellcheckWin.buttons.ok     configure -state enabled
    .spellcheckWin.buttons.cancel configure -text "Cancel"
    bind .spellcheckWin <Alt-c> ".spellcheckWin.buttons.cancel invoke; break"
    if {$spellcheckType == "Player"} {
        .spellcheckWin.buttons.surnames configure -state enabled
    }
}


# Set the environment when correction starts
#
proc startCorrecting {} {
    global spellstate
    global spellcheckType
    
    # Remember that we are correcting
    #
    set spellstate correcting
    
    # Disable all buttons
    #
    .spellcheckWin.buttons.ambig  configure -state disabled
    .spellcheckWin.buttons.ok     configure -state disabled
    .spellcheckWin.buttons.cancel configure -state disabled

    if {$spellcheckType == "Player"} {
        .spellcheckWin.buttons.surnames configure -state disabled
    }
}


# Start the correction scan and dump the results into the
# text window. After this the user may edit the correction
# 'script' and actually make the corrections.
#
# While the scan is running, all buttons except a stop button
# are disabled.
#
proc updateSpellCheckWin {type} {
    global spellcheckType spell_maxCorrections spellcheckSurnames
    global spellcheckAmbiguous

    busyCursor .
    .spellcheckWin.text.text delete 1.0 end
    .spellcheckWin.text.text insert end "Scid is finding spelling corrections.\nPlease wait..."

    # Enable the progress bar
    #
    sc_progressBar .spellcheckWin.progress bar 451 21 time

    startScanning

    update idletasks
    if {[catch {sc_name spellcheck -max $spell_maxCorrections \
                                   -surnames $spellcheckSurnames \
                                   -ambiguous $spellcheckAmbiguous $type} result]} {
        stopScanning
        unbusyCursor .
        tk_messageBox -type ok -icon info -title "Scid: Spellcheck results" \
                      -parent $parent -message $result
        return
    }
    stopScanning

    .spellcheckWin.text.text delete 1.0 end
    .spellcheckWin.text.text insert end $result
    unbusyCursor .
}


# Create the spell checking window with its event handlers
# and start the initial correction scan
#
proc openSpellCheckWin {type {parent .}} {
    global spellcheckType spellcheckSurnames
    global spellcheckAmbiguous
    global spellstate

    set w .spellcheckWin

    if {[winfo exists $w]} {
        tk_messageBox -type ok -icon info -title "Scid: Spellcheck error" \
                      -parent $parent \
                      -message "The spellcheck window is already open; close it first."
        return
    }

    if {[lindex [sc_name read] 0] == 0} {
        # No spellcheck file loaded, so try to open one:
        if {![readSpellCheckFile]} {
            return
        }
    }
    set spellcheckType $type

    toplevel $w
    wm title $w "Scid: Spellcheck Results"
    wm minsize $w 50 10

    bind $w <F1> { helpWindow Maintenance }
    bind $w <Configure> "recordWinSize $w"

    # Create the button pad at the bottom of the window
    #
    set f [ttk::frame $w.buttons]
    pack $f -side bottom -ipady 1 -fill x
  
    # Draw a canvas ("progress") to hold the progress bar
    # and put it above the buttons at the bottom of the window
    #
    canvas $w.progress -width 450 -height 20 -bg white -relief solid -border 1
    $w.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
    $w.progress create text 445 10 -anchor e -font font_Regular -tags time \
                                   -fill black -text "0:00 / 0:00"
    pack $w.progress -side bottom

    # The ambiguous check mark
    # Hitting it starts a new correction scan
    ttk::checkbutton $f.ambig -variable spellcheckAmbiguous \
                              -text "Ambiguous" -command "updateSpellCheckWin $type"
    pack $f.ambig -side left -padx 2 -ipady 2 -ipadx 3

    # When correcting player names, we add a surnames option
    #
    if {$type == "Player"} {
        # The surnames check mark
        # Hitting it starts a new correction scan
        #
        ttk::checkbutton $f.surnames -variable spellcheckSurnames \
                                     -text "Surnames" -command "updateSpellCheckWin Player"
        pack $f.surnames -side left -padx 2 -ipady 2 -ipadx 3
    }

    # The button to start the correction making...
    #
    ttk::button $f.ok -text "Make Corrections" -underline 0 -command {
        busyCursor .
        set spelltext ""
        catch {set spelltext [.spellcheckWin.text.text get 1.0 end-1c]}
        .spellcheckWin.text.text delete 1.0 end
        .spellcheckWin.text.text insert end \
            "Scid is making the spelling corrections.\nPlease wait..."

        # Enable the progress bar
        #
        sc_progressBar .spellcheckWin.progress bar 451 21 time

        update idletasks
        set spell_result ""
        startCorrecting
        set result [catch {sc_name correct $spellcheckType $spelltext} spell_result]
        set messageIcon info
        if {$result} { set messageIcon error }
        tk_messageBox -type ok -parent .spellcheckWin -icon $messageIcon \
            -title "Scid: Spellcheck results" -message $spell_result
        unbusyCursor .
        focus .
        destroy .spellcheckWin
        sc_game tags reload
        updateBoard -pgn
        ::windows::gamelist::Refresh
    }
    bind $w <Alt-m> "$f.ok invoke; break"

    # The cancel button operates in an either/or context
    # While some process is running, it simply stops it
    # In other cases, spell checking is left
    #
    ttk::button $f.cancel -text "Cancel" -underline 0 -command {
        if {$spellstate == "scanning" || $spellstate == "correcting"} {
            sc_progressBar
        } else {
            focus .
            destroy .spellcheckWin
        }
    }
    bind $w <Alt-c> "$f.cancel invoke; break"
    pack $f.cancel $f.ok -side right -padx 5

    # Prepare the text pad
    #
    set f [ttk::frame $w.text]
    pack $w.text -expand yes -fill both
    ttk::scrollbar $f.ybar -command "$f.text yview"
    ttk::scrollbar $f.xbar -orient horizontal -command "$f.text xview"
    text $f.text -yscrollcommand "$f.ybar set" -xscrollcommand "$f.xbar set" \
                 -setgrid 1 -width $::winWidth($w) -height $::winHeight($w) \
                 -background white -wrap none
    $f.text configure -tabs \
        [font measure font_Regular  "xxxxxxxxxxxxxxxxxxxxxxxxx"]

    grid $f.text -row 0 -column 0 -sticky news
    grid $f.ybar -row 0 -column 1 -sticky news
    grid $f.xbar -row 1 -column 0 -sticky news

    grid rowconfig $w.text 0 -weight 1 -minsize 0
    grid columnconfig $w.text 0 -weight 1 -minsize 0
  
    focus $f.text

    # Start the initial search for spelling corrections
    #
    updateSpellCheckWin $type
}


# maint.tcl:   Maintenance-related functions
# Part of Scid.
# Copyright (C) 2000-2004 Shane Hudson.

namespace eval ::maint {}

### TODO: Move procedures and variables into the maint namespace.
### TODO: Make sub-namespaces (sort, compact, cleaner, etc)

################################################################################
# Equivalent to running scidt -N
################################################################################
proc ::maint::fixCorruptedBase {} {
  set ftype {
    { "Scid databases" {".si4"} }
  }
  set fName [tk_getOpenFile -initialdir $::initialDir(base) -filetypes $ftype -title "Open a Scid file"]
  if {$fName == ""} { return }
  set fName [file rootname $fName]
  
  if {[sc_base slot $fName] != 0} {
    tk_messageBox -type ok -icon info -title "Scid" -message "$fName is already opened.\nClose it first"
    return
  }
  
  progressWindow "Scid" [concat $::tr(CompactNames) "..."]
  busyCursor .
  set err [catch {sc_base fixCorrupted $fName} result]
  unbusyCursor .
  closeProgressWindow
  if {$err} {
    tk_messageBox -type ok -icon warning -title "Scid: Error compacting file" -message $result
  } else {
    tk_messageBox -type ok -icon info -title "Scid" -message "Base $fName was repaired"
  }
  
}

################################################################################
# ::maint::SetGameFlags
#
#   Updates a flag for the current game, all filtered games, or all games.
#   <type> should be "current", "filter" or "all".
#   <flag> should be "delete", "user", "endgame", etc.
#   <value> should be 0 or 1
#
proc ::maint::SetGameFlags {flag type value} {
  if {$flag == "mark"} { set flag $::maintFlag }
  switch -- $type {
    "current" {
      busyCursor .
      catch {sc_game flag $flag [sc_game number] $value}
      unbusyCursor .
    }
    "filter" -
    "all" {
      busyCursor .
      catch {sc_game flag $flag $type $value}
      unbusyCursor .
    }
    default { return }
  }
  updateBoard
  ::windows::gamelist::Refresh
  ::maint::Refresh
  ::windows::stats::Refresh
}

set maintFlag W
set maintFlaglist {W B M E N P T Q K ! ? U 1 2 3 4 5 6}
array set maintFlags {
  W WhiteOpFlag
  B BlackOpFlag
  M MiddlegameFlag
  E EndgameFlag
  N NoveltyFlag
  P PawnFlag
  T TacticsFlag
  Q QsideFlag
  K KsideFlag
  ! BrilliancyFlag
  ? BlunderFlag
  U UserFlag
  1 CustomFlag1
  2 CustomFlag2
  3 CustomFlag3
  4 CustomFlag4
  5 CustomFlag5
  6 CustomFlag6
}


set maintWin 0

# ::maint::OpenClose
#
#   Creates the database maintenance window.
#
proc ::maint::OpenClose {} {
  global maintWin maintFlag maintFlags maintFlaglist
  set w .maintWin
  if {[winfo exists $w]} {
    destroy $w
    set maintWin 0
    return
  }
  set maintWin 1
  set font font_Small
  set bold font_SmallBold
  toplevel $w
  wm title $w "Scid: [tr FileMaint]"
  wm resizable $w 0 0
  bind $w <F1> {helpWindow Maintenance}
  bind $w <Escape> "destroy $w; break"
  bind $w <Destroy> {set maintWin 0}
  foreach f {title delete mark spell db buttons} {
    ttk::frame $w.$f
  }
  foreach f {title delete mark spell db} {
    pack $w.$f -side top -fill x
    addHorizontalRule $w
  }
  pack $w.buttons -side top -fill x
  
  ttk::label $w.title.name -textvar ::tr(DatabaseName) -font font_Bold
  ttk::label $w.title.games -textvar ::tr(NumOfGames) -font font_SmallBold
  ttk::label $w.title.icon -textvar ::tr(TypeIcon)
  ttk::label $w.title.delete -textvar ::tr(NumDeletedGames) -font $font
  ttk::label $w.title.mark -font $font
  ttk::label $w.title.filter -textvar ::tr(NumFilterGames) -font $font
  ttk::label $w.title.dates -textvar ::tr(YearRange) -font $font
  ttk::label $w.title.ratings -textvar ::tr(RatingRange) -font $font
  ttk::button $w.title.vicon -command {changeBaseType [sc_base current]}
  
  ttk::frame $w.title.desc
  ttk::label $w.title.desc.lab -text $::tr(Description:) -font font_SmallBold
  ttk::label $w.title.desc.text -width 1 -font $font -relief sunken -anchor w
  ttk::button $w.title.desc.edit -text "[tr Edit]..." -style Small.TButton -command ::maint::ChangeBaseDescription
  pack $w.title.desc.lab -side left
  pack $w.title.desc.edit -side right -padx 2
  pack $w.title.desc.text -side left -fill x -expand yes
  
  # Custom flags
  ttk::frame $w.title.cust
  ttk::label $w.title.cust.lab -text "[::tr CustomFlags]:" -font font_SmallBold
  for {set i 1} { $i < 7} { incr i} {
    set desc [sc_game flag $i description]
    ttk::label $w.title.cust.text$i -width 8 -font $font -relief sunken -anchor w -text $desc
  }
  
  ttk::button $w.title.cust.edit -text "[tr Edit]..." -style Small.TButton -command ::maint::ChangeCustomDescription
  pack $w.title.cust.lab -side left
  pack $w.title.cust.edit -side right -padx 2
  for {set i 1} { $i < 7} { incr i} {
    pack $w.title.cust.text$i -side left -fill x -expand yes
  }
  foreach name {name games delete mark filter dates ratings} {
    ttk::label $w.title.v$name -text "0" -font $font
  }
  
  set row 0
  set col 0
  foreach name {name icon games filter delete mark dates ratings} {
    grid $w.title.$name -row $row -column $col -sticky w
    incr col
    grid $w.title.v$name -row $row -column $col -sticky e
    incr col
    if {$col == 2} { incr col }
    if {$col >= 5} { set col 0; incr row }
  }
  grid [ttk::label $w.title.space -text "   "] -row 0 -column 2
  $w.title.vname configure -font font_Bold
  $w.title.vgames configure -font font_SmallBold
  grid $w.title.desc -row $row -column 0 -columnspan 5 -sticky we
  incr row
  grid $w.title.cust -row $row -column 0 -columnspan 5 -sticky we
  
  foreach grid {title delete mark spell db} cols {5 3 3 4 3} {
    for {set i 0} {$i < $cols} {incr i} {
      grid columnconfigure $w.$grid $i -weight 1
    }
  }
  
  ttk::label $w.delete.title -textvar ::tr(DeleteFlag) -font $bold
  ttk::menubutton $w.mark.title -menu $w.mark.title.m ;# -indicatoron 1 -relief raised -font $bold
  menu $w.mark.title.m -font $font
  
  set i 0
  foreach flag $maintFlaglist  {
    if {$i < 12} {
      $w.mark.title.m add command -label "$::tr($maintFlags($flag)) ($flag)" -command "set maintFlag $flag; ::maint::Refresh"
    } else  {
      set tmp [sc_game flag $flag description]
      if {$tmp == "" } { set tmp $maintFlags($flag) }
      $w.mark.title.m add command -label "$tmp ($flag)" -command "set maintFlag $flag; ::maint::Refresh"
    }
    incr i
  }
  
  foreach flag {delete mark} on {Delete Mark} off {Undelete Unmark} {
    foreach b {Current Filter All} {
      ttk::button $w.$flag.on$b -textvar "::tr($on$b)" -style Small.TButton -command "::maint::SetGameFlags $flag [string tolower $b] 1"
      ttk::button $w.$flag.off$b -textvar "::tr($off$b)" -style Small.TButton -command "::maint::SetGameFlags $flag [string tolower $b] 0"
    }
    
    grid $w.$flag.title -columnspan 3 -row 0 -column 0 -sticky n
    grid $w.$flag.onCurrent -row 1 -column 0 -sticky we
    grid $w.$flag.offCurrent -row 2 -column 0 -sticky we
    grid $w.$flag.onFilter -row 1 -column 1 -sticky we
    grid $w.$flag.offFilter -row 2 -column 1 -sticky we
    grid $w.$flag.onAll -row 1 -column 2 -sticky we
    grid $w.$flag.offAll -row 2 -column 2 -sticky we
  }
  
  ttk::label $w.spell.title -textvar ::tr(Spellchecking) -font $bold
  grid $w.spell.title -columnspan 4 -row 0 -column 0 -sticky n
  ttk::button $w.spell.player -textvar ::tr(Players...) -style Small.TButton \
      -command "openSpellCheckWin Player $w"
  ttk::button $w.spell.event -textvar ::tr(Events...) -style Small.TButton \
      -command "openSpellCheckWin Event $w"
  ttk::button $w.spell.site -textvar ::tr(Sites...) -style Small.TButton \
      -command "openSpellCheckWin Site $w"
  ttk::button $w.spell.round -textvar ::tr(Rounds...) -style Small.TButton \
      -command "openSpellCheckWin Round $w"
  grid $w.spell.player -row 1 -column 0 -sticky we
  grid $w.spell.event -row 1 -column 1 -sticky we
  grid $w.spell.site -row 1 -column 2 -sticky we
  grid $w.spell.round -row 1 -column 3 -sticky we
  
  bind $w <Alt-p> "$w.spell.player invoke"
  bind $w <Alt-e> "$w.spell.event invoke"
  bind $w <Alt-s> "$w.spell.site invoke"
  bind $w <Alt-r> "$w.spell.round invoke"
  
  ttk::label $w.db.title -textvar ::tr(DatabaseOps) -font $bold
  grid $w.db.title -columnspan 3 -row 0 -column 0 -sticky n
  
  ttk::button $w.db.check -style Small.TButton -textvar ::tr(CheckGames...) -command checkAllGames
  ttk::button $w.db.eco -style Small.TButton -textvar ::tr(ReclassifyGames...) -command classifyAllGames
  ttk::button $w.db.compact -style Small.TButton -textvar ::tr(CompactDatabase...) -command makeCompactWin
  ttk::button $w.db.sort -style Small.TButton -textvar ::tr(SortDatabase...) -command makeSortWin
  ttk::button $w.db.elo -style Small.TButton -textvar ::tr(AddEloRatings...) -command allocateRatings
  ttk::button $w.db.dups -style Small.TButton -textvar ::tr(DeleteTwins...) -command "markTwins $w"
  ttk::button $w.db.cleaner -style Small.TButton -textvar ::tr(Cleaner...) -command cleanerWin
  ttk::button $w.db.autoload -style Small.TButton -textvar ::tr(AutoloadGame...) -command ::maint::SetAutoloadGame
  ttk::button $w.db.strip -style Small.TButton -textvar ::tr(StripTags...) -command stripTags
  
  foreach i {eco compact sort elo dups cleaner autoload strip} {
    $w.db.$i configure -style Small.TButton
  }
  bind $w <Alt-d> "$w.db.dups invoke"
  
  grid $w.db.eco -row 1 -column 0 -sticky we
  grid $w.db.compact -row 1 -column 1 -sticky we
  grid $w.db.sort -row 1 -column 2 -sticky we
  grid $w.db.elo -row 2 -column 0 -sticky we
  grid $w.db.dups -row 2 -column 1 -sticky we
  grid $w.db.cleaner -row 2 -column 2 -sticky we
  grid $w.db.autoload -row 3 -column 0 -sticky we
  grid $w.db.strip -row 3 -column 1 -sticky we
  grid $w.db.check -row 3 -column 2 -sticky we
  
  dialogbutton $w.buttons.help -textvar ::tr(Help) -command {helpWindow Maintenance}
  dialogbutton $w.buttons.close -textvar ::tr(Close) -command "destroy $w"
  packbuttons right $w.buttons.close $w.buttons.help
  
  bind $w <Alt-h> "$w.buttons.help invoke"
  bind $w <Alt-c> "destroy $w; break"
  standardShortcuts $w
  ::maint::Refresh
}

proc ::maint::ChangeBaseDescription {} {
  set w .bdesc
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: $::tr(Description): [file tail [sc_base filename]]"
  set font font_Small
  ttk::entry $w.entry -width 50 ;# -relief sunken -background white
  $w.entry insert end [sc_base description]
  pack $w.entry -side top -pady 4
  ttk::frame $w.b
  ttk::button $w.b.ok -text OK -command {
    catch {sc_base description [.bdesc.entry get]}
    grab release .bdesc
    destroy .bdesc
    ::maint::Refresh
  }
  ttk::button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
  pack $w.b -side bottom -fill x
  pack $w.b.cancel $w.b.ok -side right -padx 2 -pady 2
  wm resizable $w 0 0
  catch {grab $w}
}
################################################################################
#  Change custom flags description
################################################################################
proc ::maint::ChangeCustomDescription {} {
  set w .bcustom
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: $::tr(CustomFlags): [file tail [sc_base filename]]"
  ttk::frame $w.a
  ttk::label $w.a.lb -text [::tr CustomFlags]
  grid $w.a.lb -column 0 -row 0 -columnspan 12
  set col 0
  for {set i 1} {$i <7} {incr i} {
    ttk::label $w.a.lab$i -text "$i:"
    ttk::entry $w.a.e$i -width 8
    set desc [sc_game flag $i description]
    $w.a.e$i insert end $desc
    grid $w.a.lab$i -column $col -row 1
    incr col
    grid $w.a.e$i -column $col -row 1
    incr col
  }
  ttk::frame $w.b
  ttk::button $w.b.ok -text OK -command {
    for {set i 1} {$i <7} {incr i} {
      set desc [.bcustom.a.e$i get]
      sc_game flag $i setdescription $desc
    }
    grab release .bcustom
    destroy .bcustom
    
    # update the drop down menu of maint window and the menu of GameInfo window
    for {set idx 12} {$idx < 18} {incr idx} {
      set flag [ lindex $::maintFlaglist $idx]
      set tmp [sc_game flag $flag description]
      if {$tmp == "" } { set tmp $::maintFlags($flag) }
      .maintWin.mark.title.m entryconfigure $idx -label "$tmp ($flag)"
    }
    
    updateGameInfoMenu
    
    # update the custom flags labels
    for {set i 1} { $i < 7} { incr i} {
      set desc [sc_game flag $i description]
      .maintWin.title.cust.text$i configure -text $desc
    }
    # ::maint::Refresh
  }
  ttk::button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
  pack $w.a -side top -fill x
  pack $w.b -side bottom -fill x
  pack $w.b.cancel $w.b.ok -side right -padx 2 -pady 2
  wm resizable $w 0 0
  catch {grab $w}
}

proc ::maint::Refresh {} {
  global maintFlag maintFlags
  updateSortWin
  updateClassifyWin
  
  set w .maintWin
  if {![winfo exists $w]} { return }
  set ng [sc_base numGames]
  set deleted [sc_base stats flag:D]
  set marked [sc_base stats "flag:$maintFlag"]
  set flags [sc_base stats flags]
  set dates [sc_base stats date]
  set ratings [sc_base stats ratings]
  $w.title.vgames configure -text [::utils::thousands $ng]
  $w.title.vicon configure -image dbt[sc_base type [sc_base current]]
  $w.title.vname configure -text [file tail [sc_base filename]]
  $w.title.vdelete configure -text [::utils::percentFormat $deleted $ng]
  $w.title.vmark configure -text [::utils::percentFormat $marked $ng]
  $w.title.vfilter configure -text [::utils::percentFormat [sc_filter count] $ng]
  $w.title.vdates configure \
      -text "[lindex $dates 0]-[lindex $dates 1] ([lindex $dates 2])"
  $w.title.vratings configure \
      -text "[lindex $ratings 0]-[lindex $ratings 1] ([lindex $ratings 2])"
  
  if { [lsearch -exact { 1 2 3 4 5 6 } $maintFlag ] != -1 } {
    set tmp [sc_game flag $maintFlag description]
    if {$tmp == "" } { set tmp $maintFlags($maintFlag) }
  } else  {
    set tmp $::tr($maintFlags($maintFlag))
  }
  
  set flagname "$::tr(Flag): $tmp ($maintFlag)"
  
  $w.mark.title configure -text $flagname
  $w.title.mark configure -text $flagname
  $w.title.desc.text configure -text [sc_base description]
  
  # Disable buttons if current base is closed or read-only:
  set state disabled
  if {[sc_base inUse]  &&  ![sc_base isReadOnly]} {
    set state normal
  }
  foreach spell {player event site round} {
    $w.spell.$spell configure -state $state
  }
  foreach button {onCurrent offCurrent onAll offAll onFilter offFilter} {
    $w.delete.$button configure -state $state
    $w.mark.$button configure -state $state
  }
  $w.db.dups configure -state $state
  $w.title.vicon configure -state $state
  $w.title.desc.edit configure -state $state
  $w.db.elo configure -state $state
  $w.db.autoload configure -state $state
  
  set state disabled
  if {[sc_base inUse]} { set state normal }
  $w.db.eco configure -state $state
  $w.db.sort configure -state $state
  $w.db.strip configure -state $state
  
  set state disabled
  if {[baseIsCompactable]} {
    set state normal
  }
  $w.db.compact configure -state $state
  $w.db.cleaner configure -state $state
}


set autoloadGame 0
trace variable autoloadGame w {::utils::validate::Integer 9999999 0}

# ::maint::SetAutoloadGame
#
#   Creates a dialog for setting the autoload game number of the
#   current database.
#
proc ::maint::SetAutoloadGame {} {
  global autoloadGame
  set w .autoload
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid"
  set autoloadGame [sc_base autoload]
  
  pack [ttk::frame $w.f] -side top -fill x -expand 1
  ttk::label $w.f.label -text $::tr(AutoloadGame:)
  ttk::entry $w.f.entry -textvar autoloadGame -justify right -width 10 ;# -foreground black -background white
  pack $w.f.label $w.f.entry -side left
  
  pack [ttk::frame $w.set] -side top -fill x
  ttk::button $w.set.none -text $::tr(None) -command {set autoloadGame 0}
  ttk::button $w.set.first -text $::tr(First) -command {set autoloadGame 1}
  ttk::button $w.set.current -text $::tr(Current) \
      -command {set autoloadGame [sc_game number]}
  ttk::button $w.set.last -text $::tr(Last) -command {set autoloadGame 9999999}
  foreach i {none first current last} {$w.set.$i configure -style Small.TButton}
  pack $w.set.none $w.set.first $w.set.current $w.set.last \
      -side left -padx 1 -pady 2
  
  addHorizontalRule $w
  
  pack [ttk::frame $w.b] -side top -fill x
  ttk::button $w.b.ok -text OK -command \
      "sc_base autoload \$autoloadGame; catch {grab release $w}; destroy $w"
  ttk::button $w.b.cancel -text $::tr(Cancel) -command \
      "catch {grab release $w}; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 2
  
  bind $w.f.entry <Return> "$w.b.ok invoke"
  bind $w.f.entry <Escape> "$w.b.cancel invoke"
  wm resizable $w 0 0
  ::utils::win::Centre $w
  focus $w.f.entry
  grab $w
}

# markTwins:
#   Finds twin games and marks them for deletion.
#   Takes parent window as parameter since it can be the main window,
#   or the maintenance window.
#
proc markTwins {{parent .}} {
  global twinSettings
  if {! [sc_base inUse]} { return }
  if {[sc_base numGames] == 0} {
    tk_messageBox -type ok -icon info -title [concat "Scid: " $::tr(noGames)] \
        -message $::tr(TwinCheckNoDelete)
    return
  }
  
  set w .twinSettings
  if {! [winfo exists $w]} {
    toplevel $w
    wm resizable $w 0 0
    wm title $w "Scid: $::tr(DeleteTwins)"
    pack [ttk::frame $w.f]
    set small font_Small
    
    ttk::label $w.f.note -text $::tr(TwinsNote) -justify left -wraplength 500 -font $small
    pack $w.f.note -side top -anchor w -ipady 0 -pady 0
    addHorizontalRule $w.f
    ttk::label $w.f.tc -text $::tr(TwinsCriteria) -font font_Bold
    pack $w.f.tc -side top
    
    ttk::frame $w.f.g
    pack $w.f.g -side top
    set row 0
    set col 0
    foreach name {Colors Event Site Round Year Month Day Result ECO Moves} {
      set n [string tolower $name]
      ttk::checkbutton $w.f.g.b$n -text $::tr(Twins$name) \
          -variable twinSettings($n) -onvalue Yes -offvalue No
      grid $w.f.g.b$n -row $row -column $col -sticky w
      incr col
      if {$col >= 4} {
        incr row; set col 0
      } else {
        grid [ttk::label $w.f.g.space$n -text "   "] -row $row -column $col
        incr col
      }
    }
    ttk::frame $w.f.players
    ttk::label $w.f.players.label -text $::tr(TwinsPlayers) -font $small
    ttk::radiobutton $w.f.players.yes -variable twinSettings(players) -value Yes \
        -text $::tr(TwinsPlayersExact) -style Small.TRadiobutton
    ttk::radiobutton $w.f.players.no -variable twinSettings(players) -value No \
        -text $::tr(TwinsPlayersPrefix) -style Small.TRadiobutton
    
    pack $w.f.players -side top
    pack $w.f.players.label $w.f.players.yes $w.f.players.no -side left
  }
  
  
  addHorizontalRule $w.f
  ttk::label $w.f.twhich -text $::tr(TwinsWhich:) -font font_Bold
  pack $w.f.twhich -side top
  pack [ttk::frame $w.f.g2] -side top -fill x
  ttk::radiobutton $w.f.g2.exall -text $::tr(SelectAllGames) -style Small.TRadiobutton \
      -variable twinSettings(usefilter) -value No
  ttk::label $w.f.g2.space -text "    " -font $small
  ttk::radiobutton $w.f.g2.exfil -text $::tr(SelectFilterGames) -style Small.TRadiobutton \
      -variable twinSettings(usefilter) -value Yes
  grid $w.f.g2.exall -row 0 -column 0 -sticky e
  grid $w.f.g2.space -row 0 -column 1
  grid $w.f.g2.exfil -row 0 -column 2 -sticky w
  grid columnconfigure $w.f.g2 0 -weight 1
  grid columnconfigure $w.f.g2 2 -weight 1
  
  addHorizontalRule $w.f
  ttk::label $w.f.twhen -text $::tr(TwinsWhen:) -font font_Bold
  pack $w.f.twhen -side top
  pack [ttk::frame $w.f.g3] -side top
  set row 0
  set col 0
  foreach n {skipshort undelete setfilter comments variations} \
      name {SkipShort Undelete SetFilter Comments Vars} {
        ttk::checkbutton $w.f.g3.b$n -text $::tr(Twins$name) -variable twinSettings($n) -onvalue Yes -offvalue No
        grid $w.f.g3.b$n -row $row -column $col -sticky w
        incr col
        if {$col >= 2} {
          incr row; set col 0
        } else {
          grid [ttk::label $w.f.g3.space$n -text "   "] -row $row -column $col
          incr col
        }
      }
  incr row
  #$w.f.g3.lskipshort configure -text $::tr(TwinsSkipShort)
  #$w.f.g3.lundelete configure -text $::tr(TwinsUndelete)
  #$w.f.g3.lsetfilter configure -text $::tr(TwinsSetFilter)
  #$w.f.g3.lcomments configure -text $::tr(TwinsComments)
  #$w.f.g3.lvariations configure -text $::tr(TwinsVars)
  ttk::label $w.f.g3.ldelete -text $::tr(TwinsDeleteWhich) -font font_Bold
  grid $w.f.g3.ldelete -row $row -column 0 -sticky we -columnspan 3
  incr row
  ttk::frame $w.f.g3.vdelete
  foreach v {Shorter Older Newer} {
    ttk::radiobutton $w.f.g3.vdelete.v$v -text $::tr(TwinsDelete$v) \
        -variable twinSettings(delete) -value $v -style Small.TRadiobutton
    pack $w.f.g3.vdelete.v$v -side left -padx 5
  }
  grid $w.f.g3.vdelete -row $row -column 0 -columnspan 3
  
  #foreach g {g2 g3} {
  #  grid columnconfigure $w.f.$g 0 -weight 1
  #}
  
  addHorizontalRule $w.f
  ttk::frame $w.f.b
  dialogbutton $w.f.b.defaults -textvar ::tr(Defaults) -command {
    array set twinSettings [array get twinSettingsDefaults]
  }
  dialogbuttonsmall $w.f.b.help [ list -text $::tr(Help) -command "helpWindow Maintenance Twins; focus $w" ]
  dialogbuttonsmall $w.f.b.go [ list -text $::tr(TwinsDelete) -command {
    if {[twinCriteriaOK .twinSettings]} {
      grab release .twinSettings
      sc_progressBar .twinSettings.progress bar 301 21 time
      set result [doMarkDups .twinSettings]
      focus .
      destroy .twinSettings
      if {$result > 0} {
        set gn [sc_filter first]
        ::game::Load $gn
        updateTwinChecker
      }
    }
  } ]
  
  dialogbuttonsmall $w.f.b.cancel [ list -text $::tr(Cancel) -command "grab release $w; focus .; destroy $w" ]
  
  canvas $w.f.progress -width 300 -height 20 -bg white -relief solid -border 1
  $w.f.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.f.progress create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  
  pack $w.f.progress -side bottom -padx 2 -pady 2
  pack $w.f.b -side bottom -fill x
  packbuttons right  $w.f.b.cancel $w.f.b.go
  packbuttons left $w.f.b.defaults $w.f.b.help
  bind $w <F1> "$w.f.b.help invoke"
  bind $w <Escape> "$w.f.b.cancel invoke"
  bind $w <Return> "$w.f.b.go invoke"
  grab $w
  update idletasks
  $w.f.note configure -wraplength [winfo width $w]
  return
}

# twinCriteriaOK:
#   Check that the user specified at least three of the the same site,
#   same round, and same year settings, since otherwise it is quite
#   likely that actual games with simlar moves will be marked as twins:
#
proc twinCriteriaOK {{parent .}} {
  global twinSettings
  
  set msg $::tr(TwinCriteria1)
  
  # First, check that if same moves is off, then the same colors, event,
  # site, round, year and month flags should all be set:
  if {$twinSettings(moves) == "No"} {
    if {$twinSettings(colors) == "No"  ||  $twinSettings(event) == "No"  || \
          $twinSettings(site) == "No"  ||  $twinSettings(year) == "No"  || \
          $twinSettings(month) == "No"} {
      append msg $::tr(TwinCriteria2)
      set result [tk_messageBox -type yesno -parent $parent -icon warning \
          -title $::tr(TwinCriteriaConfirm) \
          -message $msg]
      if {$result == "no"} { return 0 } else { return 1 }
    }
  }
  
  # Now check that at least two of site, round, and year are set:
  set count 0
  if {$twinSettings(site) == "Yes"} { incr count }
  if {$twinSettings(round) == "Yes"} { incr count }
  if {$twinSettings(year) == "Yes"} { incr count }
  if {$count < 2} {
    append msg $::tr(TwinCriteria3)
    set result [tk_messageBox -type yesno -parent $parent -icon warning \
        -title $::tr(TwinCriteriaConfirm) \
        -message $msg]
    if {$result == "no"} { return 0 } else { return 1 }
  }
  return 1
}


proc doMarkDups {{parent .}} {
  global twinSettings
  
  busyCursor .
  if {$twinSettings(undelete) == "Yes"} {
    catch {sc_game flag delete all 0}
  }
  
  if {[catch {sc_base duplicates -colors $twinSettings(colors) \
          -event $twinSettings(event) -site $twinSettings(site) \
          -round $twinSettings(round) -year $twinSettings(year) \
          -month $twinSettings(month) -day $twinSettings(day) \
          -result $twinSettings(result) -eco $twinSettings(eco) \
          -moves $twinSettings(moves) -players $twinSettings(players) \
          -skipshort $twinSettings(skipshort) \
          -setfilter $twinSettings(setfilter) \
          -usefilter $twinSettings(usefilter) \
          -comments $twinSettings(comments) \
          -variations $twinSettings(variations) \
          -delete $twinSettings(delete)} result]} {
    unbusyCursor .
    tk_messageBox -type ok -parent $parent -icon info \
        -title "Scid" -message $result
    set result 0
  } else {
    unbusyCursor .
    set message [subst $::tr(TwinCheckFound1)]
    if {$result > 0} {append message $::tr(TwinCheckFound2)}
    append message "."
    tk_messageBox -type ok -parent $parent -icon info -title [concat "Scid: " $::tr(Result)] \
        -message $message
  }
  ::maint::Refresh
  return $result
}


set checkOption(AllGames) all

# CheckAllGames
#  Decodes all games and tries to find errors
proc checkAllGames {} {
  set w .checkGames
  if {[winfo exists $w]} {
    raiseWin $w
    return
  }
  toplevel $w
  wm title $w "Scid: [tr FileMaintClass]"
  
  pack [ttk::frame $w.f] -expand 1
  
  ttk::label $w.f.label -font font_Bold -textvar ::tr(CheckGamesWhich)
  ttk::frame $w.f.g
  ttk::radiobutton $w.f.g.all -textvar ::tr(CheckAll) -variable checkOption(AllGames) -value all
  ttk::radiobutton $w.f.g.filter -textvar ::tr(CheckSelectFilterGames) -variable checkOption(AllGames) -value filter
  set row 0
  foreach f {all filter} {
    grid $w.f.g.$f -row $row -column 0 -sticky w
    incr row
  }
  
  ttk::frame $w.f.b
  ttk::button $w.f.b.go -textvar ::tr(CheckGames) -command {
    busyCursor .
    .checkGames.f.b.cancel configure -command "sc_progressBar"
    .checkGames.f.b.cancel configure -textvar ::tr(Stop)
    sc_progressBar .checkGames.f.progress bar 301 21 time
    grab .checkGames.f.b.cancel
    if {[catch  {sc_base check $checkOption(AllGames)} result]} {
      grab release .checkGames.f.b.cancel
      unbusyCursor .
      tk_messageBox -parent .checkGames -type ok -icon info -title "Scid" -message $result
    } else {
      grab release .checkGames.f.b.cancel
      unbusyCursor .
    }
    .checkGames.f.b.cancel configure -command {focus .; destroy .checkGames}
    .checkGames.f.b.cancel configure -textvar ::tr(Close)
    ::windows::gamelist::Refresh
  }
  ttk::button $w.f.b.cancel -textvar ::tr(Close) -command "focus .; destroy $w"
  canvas $w.f.progress -width 300 -height 20 -bg white -relief solid -border 1
  $w.f.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.f.progress create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  
  pack $w.f.label $w.f.g -side top -pady 5
  addHorizontalRule $w.f
  pack $w.f.b -side top -pady 5 -fill x
  pack $w.f.progress -side bottom -padx 2 -pady 2
  pack $w.f.b.cancel $w.f.b.go -side right -pady 10 -padx 10
  wm resizable $w 0 0
  bind $w <F1> {helpWindow ECO}
  bind $w <Escape> "$w.b.cancel invoke"
  updateClassifyWin
}


set classifyOption(AllGames) all
set classifyOption(ExtendedCodes) 1

# ClassifyAllGames:
#   Reclassifies all games (recomputes the ECO code of each game).
#   User can choose to reclassify all games, or only those games that
#   currently have no ECO code assigned.
#
proc classifyAllGames {} {
  makeClassifyWin
}

proc makeClassifyWin {} {
  global classifyOption
  set w .classify
  if {[winfo exists $w]} {
    raiseWin $w
    return
  }
  toplevel $w
  wm title $w "Scid: [tr FileMaintClass]"
  
  pack [ttk::frame $w.f] -expand 1
  
  ttk::label $w.f.label -font font_Bold -textvar ::tr(ClassifyWhich)
  ttk::frame $w.f.g
  ttk::radiobutton $w.f.g.all -textvar ::tr(ClassifyAll) -variable classifyOption(AllGames) -value all
  ttk::radiobutton $w.f.g.filter -textvar ::tr(SelectFilterGames) -variable classifyOption(AllGames) -value filter
  set year [::utils::date::today year]
  set month [::utils::date::today month]
  set day [::utils::date::today day]
  ttk::radiobutton $w.f.g.year -textvar ::tr(ClassifyYear) -variable classifyOption(AllGames) \
      -value "date:[expr $year - 1].$month.$day"
  if {$month == "01"} {
    incr year -1
    set month 12
  } else {
    scan $month "%02u" month
    incr month -1
    set month [format "%02u" $month]
  }
  ttk::radiobutton $w.f.g.month -textvar ::tr(ClassifyMonth) -variable classifyOption(AllGames) \
      -value "date:$year.$month.$day"
  ttk::radiobutton $w.f.g.new -textvar ::tr(ClassifyNew) -variable classifyOption(AllGames) -value nocode
  set row 0
  foreach f {all filter year month new} {
    grid $w.f.g.$f -row $row -column 0 -sticky w
    incr row
  }
  ttk::label $w.f.codes -font font_Bold -textvar ::tr(ClassifyCodes:)
  ttk::radiobutton $w.f.extended -textvar ::tr(ClassifyBasic) -variable classifyOption(ExtendedCodes) -value 0
  ttk::radiobutton $w.f.basic -textvar ::tr(ClassifyExtended) -variable classifyOption(ExtendedCodes) -value 1
  
  ttk::frame $w.f.b
  ttk::button $w.f.b.go -textvar ::tr(Classify) -command {
    busyCursor .
    .classify.f.b.cancel configure -command "sc_progressBar"
    .classify.f.b.cancel configure -textvar ::tr(Stop)
    sc_progressBar .classify.f.progress bar 301 21 time
    grab .classify.f.b.cancel
    if {[catch  {sc_eco base $classifyOption(AllGames) $classifyOption(ExtendedCodes)} result]} {
      grab release .classify.f.b.cancel
      unbusyCursor .
      tk_messageBox -parent .classify -type ok -icon info -title "Scid" -message $result
    } else {
      grab release .classify.f.b.cancel
      unbusyCursor .
    }
    .classify.f.b.cancel configure -command {focus .; destroy .classify}
    .classify.f.b.cancel configure -textvar ::tr(Close)
    ::windows::gamelist::Refresh
  }
  ttk::button $w.f.b.cancel -textvar ::tr(Close) -command "focus .; destroy $w"
  canvas $w.f.progress -width 300 -height 20 -bg white -relief solid -border 1
  $w.f.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.f.progress create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  
  pack $w.f.label $w.f.g -side top -pady 5
  addHorizontalRule $w.f
  pack $w.f.codes $w.f.extended $w.f.basic -side top -pady 5
  addHorizontalRule $w.f
  pack $w.f.b -side top -pady 5 -fill x
  pack $w.f.progress -side bottom -padx 2 -pady 2
  pack $w.f.b.cancel $w.f.b.go -side right -pady 10 -padx 10
  wm resizable $w 0 0
  bind $w <F1> {helpWindow ECO}
  bind $w <Escape> "$w.b.cancel invoke"
  updateClassifyWin
}

proc updateClassifyWin {} {
  set w .classify
  if {! [winfo exists $w]} { return }
  set state disabled
  if {[sc_base inUse]} { set state normal }
  $w.f.b.go configure -state $state
}

# Twin checker window:
# Shows PGN of current game, and its twin.

set twincheck(left) 0
set twincheck(right) 0

proc updateTwinChecker {} {
  global twincheck
  set w .twinchecker
  if {![winfo exists $w]} {
    toplevel $w
    pack [ttk::frame $w.b] -side bottom -fill x
    pack [ttk::frame $w.f] -side top -fill both -expand yes
    ttk::frame $w.f.left
    pack $w.f.left -side left -fill y -expand yes
    ttk::frame $w.f.split -width 2 -borderwidth 2 -relief sunken
    pack $w.f.split -side left -fill y -padx 5
    ttk::frame $w.f.right
    pack $w.f.right -side left -fill y -expand yes
    foreach i {left right} {
      set f $w.f.$i
      pack [ttk::frame $f.title] -side top -fill x
      ttk::label $f.title.label -font font_Bold -text [concat $::tr(game) " 0: "]
      ttk::checkbutton $f.title.d -text $::tr(Deleted) -variable twincheck($i) -style Small.TCheckbutton
      ttk::label $f.title.note -font font_Small
      pack $f.title.label $f.title.d $f.title.note -side left
      ttk::label $f.tmt -font font_Small -text "" -anchor w -width 1 -relief sunken
      pack $f.tmt -side bottom -fill x
      autoscrollframe $f.t text $f.t.text \
          -height 16 -width 40 -background white \
          -takefocus 0 -wrap word
      $f.t.text tag configure h -background lightSteelBlue
      pack $f.t -side top -fill both -expand yes
    }
    $w.f.left.title.note configure -text [concat "(\"1\"" $::tr(TwinCheckUndelete)]
    $w.f.right.title.note configure -text  [concat "(\"2\"" $::tr(TwinCheckUndelete)]
    ttk::button $w.b.prev -text $::tr(TwinCheckprevPair) \
        -command {::game::LoadNextPrev previous}
    ttk::button $w.b.next -text $::tr(TwinChecknextPair) -underline 0 \
        -command {::game::LoadNextPrev next}
    ttk::button $w.b.share -text $::tr(TwinCheckTag) -underline 0
    ttk::button $w.b.delete -text $::tr(DeleteTwins) -underline 0 \
        -command "markTwins $w"
    ttk::button $w.b.help -text $::tr(Help) -command {helpWindow Maintenance Twins}
    ttk::button $w.b.close -text $::tr(Close) -command "focus .; destroy $w"
    pack $w.b.close $w.b.help $w.b.delete -side right -padx 5 -pady 2
    pack $w.b.prev $w.b.next $w.b.share -side left -padx 5 -pady 2
    bind $w <F1> "$w.b.help invoke"
    bind $w <Escape> "focus .; destroy $w"
    bind $w <Alt-p> {::game::LoadNextPrev previous}
    bind $w <KeyPress-p> {::game::LoadNextPrev previous}
    bind $w <Alt-n> {::game::LoadNextPrev next}
    bind $w <KeyPress-n> {::game::LoadNextPrev next}
    bind $w <Alt-d> "markTwins $w"
    bind $w <KeyPress-d> "markTwins $w"
    bind $w <KeyPress-1> "$w.f.left.title.d invoke"
    bind $w <KeyPress-$::MB2> "$w.f.right.title.d invoke"
    bind $w <KeyPress-s> "$w.b.share invoke"
    bind $w <KeyPress-u> {
      if {$twincheck(left)} {.twinchecker.f.left.title.d invoke}
      if {$twincheck(right)} {.twinchecker.f.right.title.d invoke}
    }
    bind $w <Alt-u> {
      if {$twincheck(left)} {.twinchecker.f.left.title.d invoke}
      if {$twincheck(right)} {.twinchecker.f.right.title.d invoke}
    }
    wm resizable $w 0 1
    wm title $w $::tr(TwinChecker)
  }
  
  set gn [sc_game number]
  set dup 0
  if {$gn > 0} {
    set dup [sc_game info duplicate]
  }
  set twincheck(left) 0
  set twincheck(right) 0
  
  $w.f.left.title.label configure -text [concat $::tr(game) " $gn:  "]
  
  if {$gn > 0} {
    set twincheck(left) [sc_game flag delete $gn]
    $w.f.left.title.d configure -command "sc_game flag delete $gn invert; updateBoard"
    $w.f.left.title.d configure -state normal
    set tmt [sc_game crosstable count +deleted]
    $w.f.left.tmt configure -text [concat $::tr(TwinCheckTournament) $tmt]
  } else {
    $w.f.left.title.d configure -state disabled
    $w.f.left.tmt configure -text ""
  }
  if {$dup > 0} {
    set twincheck(right) [sc_game flag delete $dup]
    $w.f.right.title.label configure -text [concat $::tr(game) " $dup:  "]
    $w.f.right.title.d configure -command "sc_game flag delete $dup invert; updateBoard"
    $w.f.right.title.d configure -state normal
    set tmt [sc_game crosstable count -game $dup +deleted]
    $w.f.right.tmt configure -text [concat $::tr(TwinCheckTournament) $tmt]
  } else {
    $w.f.right.title.label configure -text $::tr(TwinCheckNoTwin)
    $w.f.right.title.d configure -state disabled
    $w.f.right.tmt configure -text ""
  }
  
  $w.b.share configure -state disabled -command {}
  if {$gn > 0  &&  $dup > 0} {
    if {[llength [sc_game tags share check $gn $dup]] > 0} {
      $w.b.share configure -state normal -command "shareTwinTags $gn $dup $w"
    }
  }
  set t $w.f.left.t.text
  $t configure -state normal
  $t delete 1.0 end
  $t insert end [sc_game pgn]
  
  set t $w.f.right.t.text
  $t configure -state normal
  $t delete 1.0 end
  if {$dup > 0} {
    $t insert end [sc_game pgn -gameNumber $dup]
  } else {
    $t insert end $::tr(TwinCheckNoTwinfound)
  }
  
  # Now color the differences if appropriate:
  if {$dup > 0} {
    set rlen [$w.f.right.t.text index end-1c]
    set llen [$w.f.left.t.text index end-1c]
    
    for {set i 0} {$i < $rlen} {incr i} {
      set line [$w.f.right.t.text get $i.0 "$i.0 lineend"]
      set length [string length $line]
      set max 0
      for {set j 0} {$j < $llen} {incr j} {
        set otherLine [$w.f.left.t.text get $j.0 "$j.0 lineend"]
        set plen [strPrefixLen $line $otherLine]
        if {$plen > $max} { set max $plen }
      }
      if {$max < $length} {
        if {![string compare [string index $line 0] "\["]} { set max 0 }
        $w.f.right.t.text tag add h $i.$max "$i.0 lineend"
      }
    }
    
    for {set i 0} {$i < $llen} {incr i} {
      set line [$w.f.left.t.text get $i.0 "$i.0 lineend"]
      set length [string length $line]
      set max 0
      for {set j 0} {$j < $rlen} {incr j} {
        set otherLine [$w.f.right.t.text get $j.0 "$j.0 lineend"]
        set plen [strPrefixLen $line $otherLine]
        if {$plen > $max} { set max $plen }
      }
      if {$max < $length} {
        if {![string compare [string index $line 0] "\["]} { set max 0 }
        $w.f.left.t.text tag add h $i.$max "$i.0 lineend"
      }
    }
  }
  
  if {[sc_base inUse]} {
    $w.b.delete configure -state normal
  } else {
    $w.b.delete configure -state disabled
  }
  
  foreach side {left right} {
    $w.f.$side.t.text configure -state disabled
  }
  
}

# shareTwinTags:
#   Updates the tags of two twin games by sharing information,
#   filling in the date, round or ratings of each game based on
#   the other where possible.
#
proc shareTwinTags {g1 g2 {parent .}} {
  set sharelist [sc_game tags share check $g1 $g2]
  if {[llength $sharelist] == 0} { return }
  
  set msg $::tr(TwinChangeTag)
  foreach {gn tag old new} $sharelist {
    append msg [concat $::tr(game) " $gn: $tag: \"$old\" -> \"$new\""]
    append msg "\n"
  }
  set answer [tk_messageBox -parent $parent -title "Scid" \
      -type okcancel -default ok -icon question -message $msg]
  if {$answer != "ok"} { return }
  sc_game tags share update $g1 $g2
  sc_game tags reload
  updateBoard -pgn
  ::windows::gamelist::Refresh
}

# baseIsCompactable:
#   Returns true only if the current base is compactable.
#
proc baseIsCompactable {} {
  # Only a database that is in use, not read-only, and not the
  # clipbase, can be compacted:
  if {! [sc_base inUse]} { return 0 }
  if {[sc_base isReadOnly]} { return 0 }
  if {[sc_base current] == [sc_info clipbase]} { return 0 }
  return 1
}

# makeCompactWin:
# Opens the database compaction dialog box.
#
proc makeCompactWin {} {
  if {! [baseIsCompactable]} { return }
  set w .compactWin
  toplevel $w
  wm title $w "Scid: $::tr(CompactDatabase)"
  wm resizable $w 0 0
  foreach f {top names games buttons} { ttk::frame $w.$f }
  pack $w.top -side top -expand 1 -fill both
  pack $w.names -in $w.top -side left -fill x -anchor n
  addVerticalRule $w.top 12
  pack $w.games -in $w.top -side left -fill x -anchor n
  addHorizontalRule $w
  pack $w.buttons -side top -fill x
  
  for {set i 0} {$i < 3} {incr i} {
    grid columnconfigure $w.names $i -weight 1
    grid columnconfigure $w.games $i -weight 1
  }
  ttk::label $w.names.title -text $::tr(NameFile) -font font_Bold
  grid $w.names.title -columnspan 3 -row 0 -column 0 -sticky n
  ttk::label $w.names.nt -text "  $::tr(Names)"
  grid $w.names.nt -row 1 -column 1 -sticky e
  ttk::label $w.names.ut -text "  $::tr(Unused)"
  grid $w.names.ut -row 1 -column 2 -sticky e
  ttk::frame $w.names.h -height 1 -relief solid ;# -bg black
  grid $w.names.h -columnspan 3 -row 2 -column 0 -sticky we
  set row 3
  set ndata [sc_compact stats names]
  set idx 0
  foreach n {p e s r} name {Players Events Sites Rounds} {
    ttk::label $w.names.t$n -text "$::tr($name)  "
    ttk::label $w.names.n$n -text "  [::utils::thousands [lindex $ndata $idx]]"
    incr idx
    ttk::label $w.names.u$n -text "  [::utils::thousands [lindex $ndata $idx]]"
    incr idx
    grid $w.names.t$n -row $row -column 0 -sticky w
    grid $w.names.n$n -row $row -column 1 -sticky e
    grid $w.names.u$n -row $row -column 2 -sticky e
    incr row
  }
  
  ttk::label $w.games.title -text $::tr(GameFile) -font font_Bold
  grid $w.games.title -columnspan 3 -row 0 -column 0 -sticky n
  ttk::label $w.games.gt -text "  [::utils::string::Capital $::tr(games)]"
  grid $w.games.gt -row 1 -column 1 -sticky e
  ttk::label $w.games.st -text "  $::tr(SizeKb)"
  grid $w.games.st -row 1 -column 2 -sticky e
  ttk::frame $w.games.h -height 1 -relief solid ;# -bg black
  grid $w.games.h -columnspan 3 -row 2 -column 0 -sticky we
  set row 3
  set ndata [sc_compact stats games]
  set idx 0
  foreach g {current compact} name {CurrentState AfterCompaction} {
    ttk::label $w.games.t$g -text "$::tr($name)  "
    ttk::label $w.games.g$g -text "  [::utils::thousands [lindex $ndata $idx]]"
    incr idx
    set kbytes [expr {int(([lindex $ndata $idx] + 512) / 1024)} ]
    ttk::label $w.games.s$g -text "  [::utils::thousands $kbytes]"
    incr idx
    grid $w.games.t$g -row $row -column 0 -sticky w
    grid $w.games.g$g -row $row -column 1 -sticky e
    grid $w.games.s$g -row $row -column 2 -sticky e
    incr row
  }
  
  ttk::button $w.buttons.n -text $::tr(CompactNames) -command "compactNames; destroy $w"
  ttk::button $w.buttons.g -text $::tr(CompactGames) -command "compactGames; destroy $w"
  ttk::button $w.buttons.help -text $::tr(Help) -command {helpWindow Compact}
  ttk::button $w.buttons.cancel -text $::tr(Cancel) -command "focus .; grab release $w; destroy $w"
  pack $w.buttons.cancel $w.buttons.help -side right -padx 5 -pady 2
  pack $w.buttons.n $w.buttons.g -side left -padx 5 -pady 2
  grab $w
}

proc compactNames {{base -1}} {
  if {$base < 0} { set base [sc_base current] }
  set stats [sc_base compact $base stats names]
  if {[lindex $stats 1] == 0  &&  [lindex $stats 3] == 0  && \
        [lindex $stats 5] == 0  &&  [lindex $stats 7] == 0} {
    tk_messageBox -type ok -icon info -parent . -title [concat "Scid: " $::tr(CompactNames)] -message $::tr(NoUnusedNames)
    return
  }
  progressWindow "Scid" [concat $::tr(CompactNames) "..."]
  busyCursor .
  set err [catch {sc_base compact $base names} result]
  unbusyCursor .
  closeProgressWindow
  if {$err} {
    tk_messageBox -type ok -icon warning -parent . -title "Scid: Error compacting file" -message $result
  } else {
    tk_messageBox -type ok -icon info -parent . -title [concat "Scid: " $::tr(CompactNames)] -message [subst $::tr(NameFileCompacted)]
  }
  updateBoard -pgn
  ::notify::DatabaseChanged
}

proc compactGames {{base -1}} {
  if {$base < 0} { set base [sc_base current] }
  set stats [sc_base compact $base stats games]
  if {[lindex $stats 1] == [lindex $stats 3]  && \
        [lindex $stats 0] == [lindex $stats 2]} {
    tk_messageBox -type ok -icon info -parent . -title [concat "Scid: " $::tr(CompactGames)] -message $::tr(NoUnusedGames)
    return
  }
  progressWindow "Scid" [concat $::tr(CompactGames) "..."] \
      $::tr(Cancel) "sc_progressBar"
  busyCursor .
  set err [catch {sc_base compact $base games} result]
  unbusyCursor .
  closeProgressWindow
  if {$err} {
    tk_messageBox -type ok -icon warning -parent . \
        -title "Scid: Error compacting file" -message $result
  } else {
    tk_messageBox -type ok -icon info -parent . \
        -title [concat "Scid: " $::tr(CompactGames)] \
        -message [subst $::tr(GameFileCompacted)]
  }
  updateBoard -pgn
  ::notify::DatabaseChanged
}

set sortCriteria(real) ""
set sortCriteria(translated) ""

proc clearSortCriteria {} {
  set ::sortCriteria(real) ""
  set ::sortCriteria(translated) ""
  updateSortWin
}

proc addSortCriteria {args} {
  global sortCriteria
  foreach x $args {
    if {$sortCriteria(real) == ""} {
      set sortCriteria(real) $x
      set sortCriteria(translated) $::tr($x)
    } else {
      append sortCriteria(real) ", $x"
      append sortCriteria(translated) ", $::tr($x)"
    }
  }
  updateSortWin
}

proc makeSortWin {} {
  global sortCriteria
  set w .sortWin
  if {[winfo exists $w]} {
    raiseWin $w
    return
  }
  toplevel $w
  wm title $w "Scid: [tr FileMaintSort]"
  wm resizable $w 0 0
  pack [ttk::frame $w.f]
  
  ttk::label $w.f.torder -textvar ::tr(SortCriteria:) -font font_Bold
  pack $w.f.torder -side top
  ttk::label $w.f.order -textvar sortCriteria(translated) -width 40 -background white \
      -relief solid -anchor w
  pack $w.f.order -side top -fill x -pady 2 -padx 2
  addHorizontalRule $w.f
  ttk::label $w.f.tadd -textvar ::tr(AddCriteria:) -font font_Bold
  pack $w.f.tadd -side top
  pack [ttk::frame $w.f.add] -side top -fill x
  foreach b {Date Year Month Event Site Country Round Result Length
    White Black Rating ECO Deleted EventDate} {
    set n [string tolower $b]
    ttk::button $w.f.add.$n -textvar ::tr($b) -command "addSortCriteria $b"
  }
  grid $w.f.add.date -row 0 -column 0 -sticky we
  grid $w.f.add.year -row 0 -column 1 -sticky we
  grid $w.f.add.month -row 0 -column 2 -sticky we
  grid $w.f.add.event -row 1 -column 0 -sticky we
  grid $w.f.add.site -row 1 -column 1 -sticky we
  grid $w.f.add.country -row 1 -column 2 -sticky we
  grid $w.f.add.round -row 2 -column 0 -sticky we
  grid $w.f.add.result -row 2 -column 1 -sticky we
  grid $w.f.add.length -row 2 -column 2 -sticky we
  grid $w.f.add.white -row 3 -column 0 -sticky we
  grid $w.f.add.black -row 3 -column 1 -sticky we
  grid $w.f.add.rating -row 3 -column 2 -sticky we
  grid $w.f.add.eco -row 4 -column 0 -sticky we
  grid $w.f.add.deleted -row 4 -column 1 -sticky we
  grid $w.f.add.eventdate -row 4 -column 2 -sticky we
  
  for {set i 0} {$i < 3} {incr i} {
    grid columnconfigure $w.f.add $i -weight 1
  }
  
  addHorizontalRule $w.f
  
  ttk::label $w.f.tcommon -textvar ::tr(CommonSorts:) -font font_Bold
  pack $w.f.tcommon -side top
  pack [ttk::frame $w.f.tc] -side top -fill x
  ttk::button $w.f.tc.ymsedr -text "$::tr(Year), $::tr(Month), $::tr(Site), $::tr(Event), $::tr(Date), $::tr(Round)" -command {
    clearSortCriteria
    addSortCriteria Year Month Site Event Date Round
  }
  ttk::button $w.f.tc.yedr -text "$::tr(Year), $::tr(Event), $::tr(Date), $::tr(Round)" -command {
    clearSortCriteria
    addSortCriteria Year Event Date Round
  }
  ttk::button $w.f.tc.er -text "$::tr(ECO), $::tr(Rating)" -command {
    clearSortCriteria
    addSortCriteria ECO Rating
  }
  grid $w.f.tc.ymsedr -row 0 -column 0 -sticky we
  grid $w.f.tc.yedr -row 1 -column 0 -sticky we
  grid $w.f.tc.er -row 2 -column 0 -sticky we
  grid columnconfigure $w.f.tc 0 -weight 1
  addHorizontalRule $w.f
  pack [ttk::frame $w.f.b] -side bottom -fill x
  ttk::button $w.f.b.clear -textvar ::tr(Clear) -command clearSortCriteria
  ttk::button $w.f.b.help -textvar ::tr(Help) -command {helpWindow Sorting}
  ttk::button $w.f.b.sort -textvar ::tr(Sort) -command sortDatabase
  ttk::button $w.f.b.close -textvar ::tr(Close) \
      -command "focus .; destroy $w"
  pack $w.f.b.close $w.f.b.sort -side right -padx 5 -pady 2
  pack $w.f.b.clear $w.f.b.help -side left -padx 5 -pady 2
  bind $w <F1> {helpWindow Sorting}
  bind $w <Escape> "$w.f.b.close invoke"
  standardShortcuts $w
  updateSortWin
}

proc updateSortWin {} {
  global sortCriteria
  set w .sortWin
  if {! [winfo exists $w]} { return }
  set state disabled
  if {[sc_base inUse]  &&  $sortCriteria(real) != ""} { set state normal }
  $w.f.b.sort configure -state $state
}

proc sortDatabase {} {
  global sortCriteria
  set w .sortWin
  if {! [sc_base inUse]} {
    tk_messageBox -type ok -icon info -parent $w -title "Scid: Sort results" \
        -message "This is not an open database; there are no games to sort."
    return
  }
  progressWindow "Scid" "Sorting the database..."
  busyCursor .
  set err [catch {sc_base sort $sortCriteria(real) \
        {changeProgressWindow "Storing results..."} \
      } result]
  unbusyCursor .
  closeProgressWindow
  if {$err} {
    tk_messageBox -type ok -icon warning -parent $w \
        -title "Scid: Sort results" -message $result
  } else {
    tk_messageBox -type ok -icon info -parent $w \
        -title "Scid: Sort results" \
        -message "The database was successfully sorted."
  }
  updateBoard
  ::windows::gamelist::Refresh
  ::maint::Refresh
}

proc makeBaseReadOnly {} {
  if {! [sc_base inUse]} { return }
  if {[sc_base isReadOnly]} { return }
  set result [tk_dialog .roDialog "Scid: [tr FileReadOnly]" \
      $::tr(ReadOnlyDialog) "" 1 $::tr(Yes) $::tr(No)]
  if {$result == 0} {
    sc_base isReadOnly set
    updateMenuStates
  }
}


# allocateRatings:
#   Allocate player ratings to games based on the spellcheck file.
#
set addRatings(overwrite) 0
set addRatings(filter) 0

proc allocateRatings {} {
  if {[catch {sc_name ratings -test 1} result]} {
    tk_messageBox -type ok -icon info -parent . -title "Scid" -message $result
    return
  }
  set w .ardialog
  toplevel $w
  wm title $w "Scid"
  ttk::label $w.lab -wraplength 3i -justify center -text $::tr(AllocRatingDescription)
  pack $w.lab -side top -expand 1 -fill x -anchor center
  addHorizontalRule $w
  pack [ttk::frame $w.r] -side top
  ttk::label $w.r.lab -text $::tr(RatingOverride)
  ttk::radiobutton $w.r.yes -variable addRatings(overwrite) \
      -value 1 -text $::tr(Yes)
  ttk::radiobutton $w.r.no -variable addRatings(overwrite) \
      -value 0 -text $::tr(No)
  pack $w.r.lab $w.r.yes $w.r.no -side left
  addHorizontalRule $w
  pack [ttk::frame $w.g] -side top -expand 1 -fill x
  ttk::label $w.g.lab -text $::tr(AddRatings)
  ttk::radiobutton $w.g.all -variable addRatings(filter) \
      -value 0 -text $::tr(SelectAllGames)
  ttk::radiobutton $w.g.filter -variable addRatings(filter) \
      -value 1 -text $::tr(SelectFilterGames)
  pack $w.g.lab $w.g.all $w.g.filter -side top
  addHorizontalRule $w
  pack [ttk::frame $w.b] -side top -fill x
  ttk::button $w.b.ok -text "OK" \
      -command "catch {grab release $w}; destroy $w; doAllocateRatings"
  ttk::button $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 3 -pady 3
  catch {grab $w}
  focus $w.b.ok
}

proc doAllocateRatings {} {
  global addRatings
  if {[catch {sc_name ratings -test 1} result]} {
    tk_messageBox -type ok -icon info -parent . -title "Scid" -message $result
    return
  }
  progressWindow "Scid" "Adding Elo ratings..."
  busyCursor .
  if {[catch {sc_name ratings -change $addRatings(overwrite) -filter $addRatings(filter)} result]} {
    closeProgressWindow
    tk_messageBox -type ok -icon warning -parent . \
        -title "Scid" -message $result
  } else {
    closeProgressWindow
    set r [::utils::thousands [lindex $result 0]]
    set g [::utils::thousands [lindex $result 1]]
    tk_messageBox -type ok -icon info -parent . \
        -title "Scid" -message [subst $::tr(AddedRatings)]
  }
  unbusyCursor .
}


# stripTags:
#   Strip unwanted PGN tags from the current database.

array set stripTagCount {}

proc stripTags {} {
  global stripTagChoice stripTagCount
  set w .striptags
  if {[winfo exists $w]} {
    raise $w
    return
  }
  set stripTagList {}
  
  # Find extra PGN tags:
  set ::interrupt 0
  progressWindow "Scid" "Searching for extra PGN tags..." \
      $::tr(Cancel) "set ::interrupt 1; sc_progressBar"
  busyCursor .
  set err [catch {sc_base tag list} result]
  unbusyCursor .
  closeProgressWindow
  if {$::interrupt} { return }
  if {$err} {
    tk_messageBox -title "Scid" -icon warning -type ok -message $result
    return
  }
  
  # Make list of extra tags and their frequency:
  array unset stripTagCount
  set nTags 0
  foreach {tag count} $result {
    set stripTagCount($tag) $count
    incr nTags
  }
  
  if {$nTags == 0} {
    tk_messageBox -title "Scid" -icon info -type ok \
        -message "No extra tags were found."
    return
  }
  
  toplevel $w
  wm title $w "Scid: $::tr(StripTags)"
  ttk::label $w.title -text "Extra PGN tags:" -font font_Bold -anchor center
  pack $w.title -side top -fill x -anchor center
  pack [ttk::frame $w.f] -side top -fill x
  addHorizontalRule $w
  pack [ttk::frame $w.b] -side bottom -fill x
  
  set row 0
  foreach tag [lsort [array names stripTagCount]] {
    set count $stripTagCount($tag)
    ttk::radiobutton $w.f.t$tag -text "$tag  " -variable stripTagChoice -value $tag
    ttk::label $w.f.c$tag -text [::utils::thousands $count]
    if {$row == 0} { set stripTagChoice $tag }
    grid $w.f.t$tag -row $row -column 0 -sticky w
    grid $w.f.c$tag -row $row -column 1 -sticky e
    incr row
  }
  ttk::button $w.b.find -text $::tr(SetFilter) -command findStripTags
  ttk::button $w.b.strip -text $::tr(StripTag...) -command {
    set removed [doStripTags .striptags]
    set stripTagCount($stripTagChoice) \
        [expr {$stripTagCount($stripTagChoice) - $removed} ]
    .striptags.f.c$stripTagChoice configure -text \
        [::utils::thousands $stripTagCount($stripTagChoice)]
  }
  ttk::button $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  pack $w.b.cancel $w.b.strip $w.b.find -side right -padx 2 -pady 2
  wm resizable $w 0 0
  update
  catch {grab $w}
}

proc doStripTags {{parent .}} {
  global stripTagChoice
  set msg "Do you really want to remove all occurences of the PGN tag"
  append msg " \"$stripTagChoice\" from this database?"
  set result [tk_messageBox -title "Scid" -parent $parent \
      -icon question -type yesno -message $msg]
  if {$result == "no"} { return 0 }
  progressWindow "Scid" "Removing the PGN tag $stripTagChoice..." \
      $::tr(Cancel) "sc_progressBar"
  busyCursor .
  set err [catch {sc_base tag strip $stripTagChoice} result]
  unbusyCursor .
  closeProgressWindow
  set count 0
  if {! $err} {
    set count $result
    set result "Removed $result instances of \"$stripTagChoice\"."
    append result "\n\n"
    append result "To save space and maintain database efficiency, it is a "
    append result "good idea to compact the game file after removing tags."
  }
  tk_messageBox -title "Scid" -parent $parent -type ok -icon info \
      -message $result
  return $count
}

proc findStripTags {} {
  global stripTagChoice
  progressWindow "Scid" "Finding games with the PGN tag $stripTagChoice..." \
      $::tr(Cancel) "sc_progressBar"
  busyCursor .
  set err [catch {sc_base tag find $stripTagChoice} result]
  unbusyCursor .
  closeProgressWindow
  ::windows::stats::Refresh
}


# cleanerWin:
#   Open a dialog so the user can choose several maintenance tasks
#   in one action.

set cleaner(players) 1
set cleaner(events) 1
set cleaner(sites) 1
set cleaner(rounds) 1
set cleaner(eco) 1
set cleaner(elo) 1
set cleaner(twins) 1
set cleaner(cnames) 0
set cleaner(cgames) 0
set cleaner(tree) 0

proc cleanerWin {} {
  set w .mtoolWin
  if {[winfo exists $w]} { return }
  
  toplevel $w
  wm title $w "Scid: $::tr(Cleaner)"
  bind $w <F1> {helpWindow Maintenance Cleaner}
  pack [ttk::frame $w.f]
  
  pack [ttk::frame $w.f.help] -side top -fill x
  text $w.f.help.text -width 1 -height 8 -wrap word \
      -relief ridge -cursor top_left_arrow -yscrollcommand "$w.f.help.ybar set"
  ttk::scrollbar $w.f.help.ybar -orient vertical -command "$w.f.help.text yview" \
      -takefocus 0
  pack $w.f.help.ybar -side right -fill y
  pack $w.f.help.text -side left -fill x -expand yes
  $w.f.help.text insert end [string trim $::tr(CleanerHelp)]
  $w.f.help.text configure -state disabled
  
  pack [ttk::frame $w.f.f] -side top -padx 20
  foreach i {players events sites rounds} j {Players Events Sites Rounds} {
    ttk::label $w.f.f.$i -text "$::tr(Spellchecking): $::tr($j)"
  }
  ttk::label $w.f.f.eco -text $::tr(ReclassifyGames)
  ttk::label $w.f.f.elo -text $::tr(AddEloRatings)
  ttk::label $w.f.f.twins -text $::tr(DeleteTwins)
  ttk::label $w.f.f.cnames -text $::tr(CompactNames)
  ttk::label $w.f.f.cgames -text $::tr(CompactGames)
  ttk::label $w.f.f.tree -text [tr TreeFileFill]
  
  foreach i {players events sites rounds eco elo twins cnames cgames tree} {
    ttk::radiobutton $w.f.f.y$i -variable cleaner($i) -value 1 -text $::tr(Yes)
    ttk::radiobutton $w.f.f.n$i -variable cleaner($i) -value 0 -text $::tr(No)
  }
  set row 0
  foreach i {players events sites rounds eco elo twins cnames cgames tree} {
    grid $w.f.f.$i -row $row -column 0 -sticky w
    grid $w.f.f.y$i -row $row -column 1 -sticky w
    grid $w.f.f.n$i -row $row -column 2 -sticky w
    incr row
  }
  
  addHorizontalRule $w.f
  pack [ttk::frame $w.f.b] -side bottom -fill x
  ttk::button $w.f.b.ok -text "OK" -command "catch {grab release $w}; destroy $w; doCleaner"
  ttk::button $w.f.b.cancel -text $::tr(Cancel) -command "catch {grab release $w}; destroy $w"
  pack $w.f.b.cancel $w.f.b.ok -side right -padx 2 -pady 2
  wm resizable $w 0 0
  # Remove the scrollbar if it is not needed:
  update
  set yview [$w.f.help.text yview]
  if {[lindex $yview 0] <= 0.01  &&  [lindex $yview 1] >= 0.99} {
    pack forget $w.f.help.ybar
  }
  catch {grab $w}
}

# Maximum nr of corrections to be scanned
# Set to zero to find them all
# Set to some positive number to limit
#
set cleaner_maxSpellCorrections 0


proc doCleaner {} {
  global cleaner twinSettings
  global cleaner_maxSpellCorrections
  
  set answer [tk_dialog .mtoolDialog "Scid" \
      [string trim $::tr(CleanerConfirm)] "" \
      0 $::tr(Yes) $::tr(No)]
  if {$answer != 0} { return }
  
  set w .mtoolStatus
  if {! [winfo exists $w]} {
    toplevel $w
    wm title $w "Scid: $::tr(Cleaner)"
    pack [ttk::frame $w.f]
    pack [ttk::frame $w.f.b] -side bottom -fill x -expand yes
    pack [ttk::frame $w.f.t] -side top -fill both -expand yes
    text $w.f.t.text -width 60 -height 10 -wrap none -setgrid 1 \
        -cursor top_left_arrow -yscrollcommand "$w.f.t.ybar set"
    ttk::scrollbar $w.f.t.ybar -orient vertical -command "$w.f.t.text yview" -takefocus 0
    pack $w.f.t.ybar -side right -fill y
    pack $w.f.t.text -side left -fill both -expand yes
    ttk::button $w.f.b.close -text $::tr(Close) -command "catch {grab release $w}; destroy $w"
    pack $w.f.b.close -side right -padx 2 -pady 2
    wm minsize $w 20 5
  }
  
  busyCursor .
  catch {grab $w}
  set t $w.f.t.text
  $t delete 1.0 end
  $t insert end "$::tr(Cleaner)."
  $t insert end "  $::tr(Database): [file tail [sc_base filename]]\n"
  
  $w.f.b.close configure -state disabled
  
  set count 1
  
  foreach nameType {Player Event Site Round} {
    set names $nameType
    append names "s"
    set tag [string tolower $names]
    if {$cleaner($tag)} {
      mtoolAdd $t "$count: $::tr(Spellchecking): $::tr($names)..."
      incr count
      set result "0 $nameType names were corrected."
      if {! [catch {sc_name spellcheck -max $cleaner_maxSpellCorrections $nameType} corrections]} {
        update
        catch {sc_name correct $nameType $corrections} result
      }
      $t insert end "   $result\n"
      $t see end
    }
  }
  
  if {$cleaner(eco)} {
    mtoolAdd $t "$count: $::tr(ReclassifyGames)..."
    incr count
    catch {sc_eco base $::classifyOption(AllGames) \
          $::classifyOption(ExtendedCodes)} result
    $t insert end "   $result\n"
    $t see end
  }
  
  if {$cleaner(elo)} {
    mtoolAdd $t "$count: $::tr(AddEloRatings)..."
    incr count
    if {[catch {sc_name ratings} result]} {
      $t insert end "   $result\n"
    } else {
      set r [::utils::thousands [lindex $result 0]]
      set g [::utils::thousands [lindex $result 1]]
      $t insert end "   Scid added $r Elo ratings in $g games.\n"
    }
  }
  
  if {$cleaner(twins)} {
    mtoolAdd $t "$count: $::tr(DeleteTwins)..."
    incr count
    if {$twinSettings(undelete) == "Yes"} {
      catch {sc_game flag delete all 0}
      update
    }
    if {[catch {sc_base duplicates -colors $twinSettings(colors) \
            -event $twinSettings(event) -site $twinSettings(site) \
            -round $twinSettings(round) -year $twinSettings(year) \
            -month $twinSettings(month) -day $twinSettings(day) \
            -result $twinSettings(result) -eco $twinSettings(eco) \
            -moves $twinSettings(moves) -players $twinSettings(players) \
            -setfilter $twinSettings(setfilter) \
            -usefilter $twinSettings(usefilter) \
            -comments $twinSettings(comments) \
            -variations $twinSettings(variations) \
            -delete $twinSettings(delete)} result]} {
      set message $result
    } else {
      set message "Scid found $result twin games"
      if {$result > 0} {append message " and set their delete flags"}
    }
    $t insert end "   $message.\n"
  }
  
  if {$cleaner(cnames)} {
    mtoolAdd $t "$count: $::tr(CompactNames)..."
    incr count
    set stats [sc_compact stats names]
    if {[lindex $stats 1] == 0  &&  [lindex $stats 3] == 0  && \
          [lindex $stats 5] == 0  &&  [lindex $stats 7] == 0} {
      $t insert end "   Name file already compacted.\n"
    } else {
      set err [catch {sc_compact names} result]
      if {$err} {
        $t insert end "   $result\n"
      } else {
        $t insert end "   Done.\n"
      }
    }
    $t see end
  }
  
  if {$cleaner(cgames)} {
    mtoolAdd $t "$count: $::tr(CompactGames)..."
    incr count
    set stats [sc_compact stats games]
    if {[lindex $stats 1] == [lindex $stats 3]  && \
          [lindex $stats 0] == [lindex $stats 2]} {
      $t insert end "   Game file already compacted.\n"
    } else {
      set err [catch {sc_compact games} result]
      if {$err} {
        $t insert end "   $result\n"
      } else {
        $t insert end "   Done.\n"
      }
    }
    $t see end
  }
  
  if {$cleaner(tree)} {
    mtoolAdd $t "$count: [tr TreeFileFill]..."
    incr count
    sc_game push
    set base [sc_base current]
    set len [llength $::tree(standardLines)]
    foreach line $::tree(standardLines) {
      sc_game new
      if {[llength $line] > 0}  {
        foreach move $line {sc_move addSan $move}
      }
      sc_tree search -base $base
      update
    }
    catch {sc_tree write $base} result
    sc_game pop
    $t insert end "   Done.\n"
  }
  
  mtoolAdd $t "Done."
  updateBoard
  ::windows::gamelist::Refresh
  ::maint::Refresh
  $w.f.b.close configure -state normal
  catch {grab release $w}
  unbusyCursor .
}

proc mtoolAdd {tw title} {
  set time [clock format [clock seconds] -format "%H:%M:%S"]
  $tw insert end "\n\[$time\]\n"
  if {$title != ""} { $tw insert end "$title\n" }
  $tw see end
  update
}

proc fenErrorDialog {{msg {}}} {
  
  if {[winfo exists .setup]} {
    tk_messageBox -icon info -type ok -title "Scid: Invalid FEN" -message $msg -parent .setup
  } else {
    tk_messageBox -icon info -type ok -title "Scid: Invalid FEN" -message $msg
  }
  
}

# copyFEN
#
#   Copies the FEN of the current position to the text clipboard.
#
proc copyFEN {} {
  set fen [sc_pos fen]
  # Create a text widget to hold the fen so it can be the owner
  # of the current text selection:
  set w .tempFEN
  if {! [winfo exists $w]} { text $w }
  $w delete 1.0 end
  $w insert end $fen sel
  clipboard clear
  clipboard append $fen
  selection own $w
  selection get
}

# pasteFEN
#
#   Bypasses the board setup window and tries to paste the current
#   text selection as the setup position, producing a message box
#   if the selection does not appear to be a valid FEN string.
#
proc pasteFEN {} {
  set fenStr ""
  if {[catch {set fenStr [selection get -selection CLIPBOARD]} ]} {
    catch {set fenStr [selection get -selection PRIMARY]}
  }
  set fenStr [string trim $fenStr]
  
  set fenExplanation {FEN is the standard text representation of a chess position. As an example, the FEN representation of the standard starting position is:
    "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"}
  
  if {$fenStr == ""} {
    set msg "The current text selection is empty. To paste the start board, select some text that contains a position in FEN notation.\n\n$fenExplanation"
    fenErrorDialog $msg
    return
  }
  if {[catch {sc_game startBoard $fenStr}]} {
    if {[string length $fenStr] > 80} {
      set fenStr [string range $fenStr 0 80]
      append fenStr "..."
    }
    set msg "\"$fenStr\" is not a valid chess position in FEN notation.\n\n $fenExplanation"
    
    fenErrorDialog $msg
    return
  }
  updateBoard -pgn
}

proc setSetupBoardToFen {w setupFen} {
  # Called from ".setup.status" FEN combo S.A
  global setupboardSize setupBd toMove castling epFile moveNum
  
  sc_game push
  if {[catch {sc_game startBoard $setupFen} err]} {
    fenErrorDialog $err
  } else {
    set setupBd [sc_pos board]
    setBoard .setup.l.bd $setupBd $setupboardSize
    set toMove [lindex {White Black} [string equal [lindex $setupFen 1] b]]
    set castling [lindex $setupFen 2]
    set epFile [string index [lindex $setupFen 3] 0]
    set moveNum [lindex $setupFen 5]
  }
  sc_game pop
}

############################################################
### Board setup window:

set setupBd {}
set setupFen {}

# makeSetupFen:
#    Reconstructs the FEN string from the current settings in the
#    setupBoard dialog. Check to see if the position is
#    acceptable (a position can be unacceptable by not having exactly
#    one King per side, or by having more than 16 pieces per side).
#

proc makeSetupFen {} {
  global setupFen setupBd moveNum toMove castling epFile
  set fenStr ""
  set errorStr [validateSetup]
  if {$errorStr != ""} {
    set fenStr "Invalid board: "
    append fenStr $errorStr
    return $fenStr
  }
  for {set bRow 56} {$bRow >= 0} {incr bRow -8} {
    if {$bRow < 56} { append fenStr "/" }
    set emptyRun 0
    for {set bCol 0} {$bCol < 8} {incr bCol} {
      set sq [expr {$bRow + $bCol} ]
      set piece [string index $setupBd $sq]
      if {$piece == "."} {
        incr emptyRun
      } else {
        if {$emptyRun > 0} {
          append fenStr $emptyRun
          set emptyRun 0
        }
        append fenStr $piece
      }
    }
    if {$emptyRun > 0} { append fenStr $emptyRun }
  }
  append fenStr " " [string tolower [string index $toMove 0]] " "
  if {$castling == ""} {
    append fenStr "- "
  } else {
    append fenStr $castling " "
  }
  if {$epFile == ""  ||  $epFile == "-"} {
    append fenStr "-"
  } else {
    append fenStr $epFile
    if {$toMove == "White"} {
      append fenStr "6"
    } else {
      append fenStr "3"
    }
  }
  # We assume a halfmove clock of zero:
  append fenStr " 0 " $moveNum
  set setupFen $fenStr
  return $fenStr
}

# validateSetup:
#   Called by makeSetupFen to check that the board is sensible: that is,
#   that there is one king per side and there are at most 16 pieces per
#   side.
#
proc validateSetup {} {
  global setupBd
  set wkCount 0; set bkCount 0; set wCount 0; set bCount 0
  set wpCount 0; set bpCount 0
  for {set i 0} {$i < 64} {incr i} {
    set p [string index $setupBd $i]
    if {$p == "."} {
    } elseif {$p == "P"} { incr wCount; incr wpCount
    } elseif {$p == "p"} { incr bCount; incr bpCount
    } elseif {$p == "N" || $p == "B" || $p == "R" || $p == "Q"} {
      incr wCount
    } elseif {$p == "n" || $p == "b" || $p == "r" || $p == "q"} {
      incr bCount
    } elseif {$p == "K"} { incr wCount; incr wkCount
    } elseif {$p == "k"} { incr bCount; incr bkCount
    } else { return "Invalid piece: $p" }
  }
  if {$wkCount != 1} { return "There must be one white king"
  } elseif {$bkCount != 1} { return "There must be one black king"
  } elseif {$wCount > 16} { return "Too many white pieces"
  } elseif {$bCount > 16} { return "Too many black pieces"
  } elseif {$wpCount > 8} { return "Too many white pawns"
  } elseif {$bpCount > 8} { return "Too many black pawns" }
  return ""
}

# setupBoardPiece:
#    Called by setupBoard to set or clear a square when it is clicked on.
#    Sets that square to containing the active piece (stored in pastePiece)
#    unless it already contains that piece, in which case the square is
#    cleared to be empty.
#
proc setupBoardPiece { square } {
  global setupBd pastePiece setupboardSize setupFen
  set oldState $setupBd
  set setupBd {}
  set piece $pastePiece
  if {[string index $oldState $square] == $pastePiece} {
    set piece "."
  }
  if {$piece == "P"  ||  $piece == "p"} {
    if {$square < 8  ||  $square >= 56} {
      set setupBd $oldState
      unset oldState
      return
    }
  }
  append setupBd \
      [string range $oldState 0 [expr {$square - 1} ]] \
      $piece \
      [string range $oldState [expr {$square + 1} ] 63]
  unset oldState
  setBoard .setup.l.bd $setupBd $setupboardSize
  set setupFen [makeSetupFen]
}

# switchPastePiece:
#   Changes the active piece selection in the board setup dialog to the
#   next or previous piece in order.
#
proc switchPastePiece { switchType } {
  global pastePiece
  array set nextPiece { K Q Q R R B B N N P P k k q q r r b b n n p p K}
  array set prevPiece { K p Q K R Q B R N B P N k P q k r q b r n b p n}
  if {$switchType == "next"} {
    set pastePiece $nextPiece($pastePiece)
  } else {
    set pastePiece $prevPiece($pastePiece)
  }
}

proc exitSetupBoard {} {
  
  # called when "OK" button hit
  
  global setupFen
  
  # unbind cancel binding
  bind .setup <Destroy> {}
  
  undoFeature save
  if {[catch {sc_game startBoard $setupFen} err]} {
    fenErrorDialog $err
    bind .setup <Destroy> cancelSetupBoard
    
    # Ideally, "$err" should be more specific than "Invalid FEN", but
    # procedural flow is a little complicated S.A.
  } else {
    ::utils::history::AddEntry setupFen $setupFen
    destroy .setup
    updateBoard -pgn
  }
}

proc cancelSetupBoard {} {
  bind .setup <Destroy> {}
  destroy .setup
}

# Global variables for entry of the start position:
set epFile {}          ;# legal values are empty, or "a"-"h".
set moveNum 1          ;# legal values are 1-999.
set setupStatus {}     ;# stores the FEN string.
set castling KQkq      ;# will be empty or some combination of KQkq letters.
set toMove White       ;# side to move, "White" or "Black".
set pastePiece K       ;# Piece being pasted, "K", "k", "Q", "q", etc.

# Traces to keep entry values sensible:

trace variable moveNum w {::utils::validate::Integer 999 0}
trace variable epFile w {::utils::validate::Regexp {^(-|[a-h])?$}}
trace variable castling w {::utils::validate::Regexp {^(-|[KQkq]*)$}}


# setupBoard:
#   The main procedure for creating the dialog for setting the start board.
#   Calls switchPastePiece and makeSetupFen.
#   On "Setup" button press, calls sc_pos startBoard to try to set the
#   starting board.

#   todo: perhaps ensure all engines have stopped before doing this S.A.

proc setupBoard {} {
  global boardSizes boardSize setupboardSize lite dark setupBd pastePiece toMove epFile moveNum
  global origFen
  global setupStatus castling setupFen highcolor
  if {[winfo exists .setup]} { return }
  set setupBd [sc_pos board]
  set origFen [sc_pos fen]
  toplevel .setup
  wm title .setup "Scid: Setup Board"
  
  ### Status entrybox contains the current FEN string.
  
  ttk::frame .setup.statusbar
  pack .setup.statusbar -side bottom -expand yes -fill x
  
  ### The actual board is created here. Bindings: left mouse sets/clears
  ### a square, middle mouse selects previous piece, right mouse selects
  ### next piece.  I should also set shortcut keys, e.g. "Q" for Queen.
  
  # todo: drag and drop of pieces would be nice :>
  
  ttk::frame .setup.l
  ttk::frame .setup.r
  ttk::frame .setup.l.bd
  
  set sl .setup.l
  set sr .setup.r
  set sbd .setup.l.bd
  
  pack $sl -side left -expand yes -fill y
  pack $sr -side right -expand yes -fill y
  
  # make the setup board a couple of sizes smaller
  set index [lsearch -exact $boardSizes $boardSize]
  # incr index 0
  # incr index -2
  incr index -3
  if {$index < 0} {
    set index 0
  }
  set setupboardSize [lindex $boardSizes $index]
  
  for {set i 0} {$i < 64} {incr i} {
    ttk::label $sbd.$i -image e$setupboardSize
    set rank [expr {7 - int ($i / 8)} ]
    set fyle [expr {$i % 8} ]
    grid $sbd.$i -row $rank -column $fyle -sticky nesw
    if {[expr {($fyle % 2) == ($rank % 2)} ]} {
      $sbd.$i configure -background $lite
    } else {
      $sbd.$i configure -background $dark
    }
    bind $sbd.$i <ButtonPress-1> "setupBoardPiece $i"
    bind $sbd.$i <ButtonPress-$::MB2> "switchPastePiece prev"
    bind $sbd.$i <ButtonPress-$::MB3> "switchPastePiece next"
  }
  
  pack $sbd -padx 10 -pady 10 -expand 1
  pack [ttk::frame $sl.b] -side top -padx 8 -pady 8 ;# -expand yes -fill x
  # rearrange above two lines for different setup
  pack [ttk::frame $sl.w] -side bottom -padx 8 -pady 8 ;# -expand yes -fill x
  
  setBoard $sbd $setupBd $setupboardSize
  
  ### Piece Buttons
  
  # set pastePiece P
  
  foreach i {p n b r q k} {
    foreach color {w b} value "[string toupper $i] $i" {
      radiobutton $sl.$color.$i -image $color$i$setupboardSize -indicatoron 0 -variable pastePiece -value $value -activebackground $highcolor    
      # ttk::radiobutton $sl.$color.$i -image $color$i$setupboardSize -variable pastePiece -value $value
      pack $sl.$color.$i -side left ;# -expand yes -fill x -padx 5
    }
  }
  
  ### Side to move frame.
  
  set toMove [lindex {White Black} [string equal [lindex $origFen 1] b]]
  ttk::frame $sr.tomove
  ttk::label $sr.tomove.label -textvar ::tr(SideToMove:)
  ttk::frame $sr.tomove.buttons
  ttk::radiobutton $sr.tomove.buttons.w -text $::tr(White) -variable toMove -value White \
      -command {set setupFen [makeSetupFen]}
  ttk::radiobutton $sr.tomove.buttons.b -text $::tr(Black) -variable toMove -value Black \
      -command {set setupFen [makeSetupFen]}
  
  pack $sr.tomove -pady 7
  pack $sr.tomove.label -side top -pady 2
  pack $sr.tomove.buttons -side top
  pack $sr.tomove.buttons.w $sr.tomove.buttons.b -side left
  
  ### Entry boxes: Move number, Castling and En Passant file.
  
  pack [ttk::frame $sr.mid] -padx 5 -pady 5
  
  set moveNum [lindex $origFen 5]
  ttk::frame $sr.mid.movenum
  ttk::label $sr.mid.movenum.label -textvar ::tr(MoveNumber:)
  ttk::entry $sr.mid.movenum.e -width 3 -background white -textvariable moveNum
  
  pack $sr.mid.movenum -pady 10 -expand yes -fill x
  pack $sr.mid.movenum.label $sr.mid.movenum.e -side left -anchor w -expand yes -fill x
  
  set castling [lindex $origFen 2]
  ttk::frame $sr.mid.castle
  ttk::label $sr.mid.castle.label -textvar ::tr(Castling:)
  ttk::combobox $sr.mid.castle.e -width 5 -textvariable castling -values {KQkq K Q k q - KQ kq Kk Kq Kkq Qk Qq Qkq KQk KQq}

  pack $sr.mid.castle -pady 10 -expand yes -fill x
  pack $sr.mid.castle.label $sr.mid.castle.e -side left -anchor w -expand yes -fill x
  
  set epFile [string index [lindex $origFen 3] 0]
  ttk::frame $sr.mid.ep
  ttk::label $sr.mid.ep.label -textvar ::tr(EnPassantFile:)
  ttk::combobox $sr.mid.ep.e -width 2 -textvariable epFile -values {- a b c d e f g h}
  
  pack $sr.mid.ep -pady 10 -expand yes -fill x
  pack $sr.mid.ep.label $sr.mid.ep.e -side left -anchor w -expand yes -fill x
  
  # Set bindings so the Fen string is updated at any change. The "after idle"
  # is needed to ensure any keypress which causes a text edit is processed
  # before we regenerate the FEN text.
  
  foreach i "$sr.mid.ep.e $sr.mid.castle.e $sr.mid.movenum.e" {
    bind $i <Any-KeyPress> {after idle {set setupFen [makeSetupFen]}}
    bind $i <FocusOut> {
      after idle {set setupFen [makeSetupFen]}}
  }
  
  ### Buttons: Clear Board and Initial Board.
  
  ttk::frame $sr.b
  ttk::button $sr.b.clear -textvar ::tr(EmptyBoard) -command {
    set setupBd \
        "................................................................"
    setBoard .setup.l.bd $setupBd $setupboardSize
    set castling {}
    set setupFen [makeSetupFen]
  }
  ttk::button $sr.b.initial -textvar ::tr(InitialBoard) -command {
    set setupBd \
        "RNBQKBNRPPPPPPPP................................pppppppprnbqkbnr"
    setBoard .setup.l.bd $setupBd $setupboardSize
    set castling KQkq
    set setupFen [makeSetupFen]
  }
  pack $sr.b -side top -pady 15
  pack $sr.b.clear -side top -padx 5 -pady 10 -fill x
  pack $sr.b.initial -side bottom -padx 5 -pady 10 -fill x
  
  ### Buttons: Setup and Cancel.
  
  ttk::frame $sr.b2
  ttk::button $sr.b2.ok -text "OK" -width 7 -command exitSetupBoard
  ttk::button $sr.b2.cancel -textvar ::tr(Cancel) -width 7 -command cancelSetupBoard
  
  pack $sr.b2 -side bottom -pady 20 -anchor s
  pack $sr.b2.ok -side left -padx 5
  pack $sr.b2.cancel -side right -padx 5
  
  ttk::button .setup.paste -textvar ::tr(PasteFen) -command {
    if {[catch {set setupFen [selection get -selection CLIPBOARD]} ]} {
      catch {set setupFen [selection get -selection PRIMARY]}
      # PRIMARY is the X selection, unsure about CLIPBOARD
    }
  }
  ttk::button .setup.clear -textvar ::tr(ClearFen) -command {set setupFen ""}
  
  ttk::combobox .setup.status -textvariable setupFen -height 10
  bind .setup.status <<ComboboxSelected>> {setSetupBoardToFen %W $setupFen}
  ::utils::history::SetCombobox setupFen .setup.status
  ::utils::history::SetLimit setupFen 20
  
  update ; # necessary in case of quick-draw user interactions
  
  pack .setup.paste .setup.clear -in .setup.statusbar -side left
  pack .setup.status -in .setup.statusbar -side right -expand yes -fill x -anchor w
  #bind .setup.status <FocusIn>  { %W configure -background lightYellow }
  #bind .setup.status <FocusOut> { %W configure -background white }
  bind .setup <Escape> cancelSetupBoard
  bind .setup <Destroy> cancelSetupBoard
  
  set setupFen [makeSetupFen]
}


# ::game::ConfirmDiscard
#
#   Prompts the user if they want to discard the changes to the
#   current game. Returns 1 if they selected yes, 0 otherwise.
#
proc ::game::ConfirmDiscard {} {
  if {$::trialMode} { return 1 }
  if {[sc_base isReadOnly]} { return 1 }
  if {! [sc_game altered]} { return 1 }
  set answer [ tk_dialog .cgDialog "Scid: [tr GameNew]" \
      $::tr(ClearGameDialog) "" 0 $::tr(Yes) $::tr(No) ]
  if {$answer == 1} { return  0 }
  return 1
}

# ::game::ConfirmDiscard2
# Clearer buttons than ConfirmDiscard
#   Prompts the user if they want to discard the changes to the
#   current game. Returns :
# 0 -> saves then continue
# 1 -> discard changes and continue
# 2 -> cancel action
#
proc ::game::ConfirmDiscard2 {} {
  if {$::trialMode} { return 1 }
  if {[sc_base isReadOnly]} { return 1 }
  if {! [sc_game altered]} { return 1 }
  # set answer [ tk_dialog .cgDialog "Scid: [tr GameNew]" $::tr(ClearGameDialog) "" 2 \
  # $::tr(SaveAndContinue) $::tr(DiscardChangesAndContinue) $::tr(GoBack) ]
  
  set w .confirmDiscard
  toplevel $w
  wm title $w "Scid: [tr GameNew]"
  set ::game::answer 2
  frame $w.top
  frame $w.bottom
  label $w.top.txt -text $::tr(ClearGameDialog)
  pack $w.top.txt -expand 1 -fill both
  
  button $w.bottom.b1 -text $::tr(SaveAndContinue) -command {destroy .confirmDiscard ; set ::game::answer 0}
  button $w.bottom.b2 -text $::tr(DiscardChangesAndContinue) -command {destroy .confirmDiscard ; set ::game::answer 1}
  button $w.bottom.b3 -text $::tr(GoBack) -command {destroy .confirmDiscard ; set ::game::answer 2}
  pack $w.bottom.b1 $w.bottom.b2 $w.bottom.b3 -side left -expand 1 -fill both
  
  pack $w.top $w.bottom -expand 1 -fill both
  
  bind $w <Destroy> {set ::game::answer 2}
  
  # ceinture et bretelle pour le grab !
  update
  catch { grab $w }
  
  focus $w.bottom.b3
  vwait ::game::answer
  return $::game::answer
}

# ::game::Clear
#
#   Clears the active game, checking first if it is altered.
#   Updates any affected windows.
#
proc ::game::Clear {} {
  set confirm [::game::ConfirmDiscard2]
  if {$confirm == 2} { return }
  if {$confirm == 0} {
    sc_game save [sc_game number]
    # ::gameReplace
  }
  
  setTrialMode 0
  sc_game new
  updateBoard -pgn
  updateTitle
  updateMenuStates
}

# ::game::Strip
#
#   Strips all comments or variations from a game
#
proc ::game::Strip {type} {
  undoFeature save
  if {[catch {sc_game strip $type} result]} {
    tk_messageBox -parent . -type ok -icon info -title "Scid" -message $result
    return
  }
  updateBoard -pgn
  updateTitle
}

# ::game::TruncateBegin
#
proc ::game::TruncateBegin {} {
  undoFeature save
  if {[catch {sc_game truncate -start} result]} {
    tk_messageBox -parent . -type ok -icon info -title "Scid" -message $result
    return
  }
  updateBoard -pgn
  updateTitle
}

# ::game::Truncate
#
proc ::game::Truncate {} {
  undoFeature save
  if {[catch {sc_game truncate} result]} {
    tk_messageBox -parent . -type ok -icon info -title "Scid" -message $result
    return
  }
  updateBoard -pgn
  updateTitle
}

# game::LoadNextPrev
#
#   Loads the next or previous filtered game in the database.
#   The parameter <action> should be "previous" or "next".
#
proc ::game::LoadNextPrev {action} {
  global pgnWin statusBar
  if {![sc_base inUse]} {
    set statusBar "  There is no $action game: this is an empty database."
    return
  }
  set number [sc_filter $action]
  if {$number == 0} {
    set statusBar "  There is no $action game in the current filter."
    return
  }
  ::game::Load $number
}

# ::game::Reload
#
#   Reloads the current game.
#
proc ::game::Reload {} {
  if {![sc_base inUse]} { return }
  if {[sc_game number] < 1} { return }
  ::game::Load [sc_game number]
}

# ::game::LoadRandom
#
#   Loads a random game from the database.
#
proc ::game::LoadRandom {} {
  set ngames [sc_filter size]
  if {$ngames == 0} { return }
  set r [expr {(int (rand() * $ngames)) + 1} ]
  set gnumber [sc_filter index $r]
  ::game::Load $gnumber
}


# ::game::LoadNumber
#
#    Prompts for the number of the game to load.
#
set ::game::entryLoadNumber ""
trace variable ::game::entryLoadNumber w {::utils::validate::Regexp {^[0-9]*$}}

proc ::game::LoadNumber {} {
  set ::game::entryLoadNumber ""
  if {![sc_base inUse]} { return }
  
  set confirm [::game::ConfirmDiscard2]
  if {$confirm == 2} { return }
  if {$confirm == 0} {
    # ::gameReplace
    sc_game save [sc_game number]
  }
  
  if {[sc_base numGames] < 1} { return }
  set w [toplevel .glnumDialog]
  wm title $w "Scid: [tr GameNumber]"
  grab $w
  
  label $w.label -text $::tr(LoadGameNumber)
  pack $w.label -side top -pady 5 -padx 5
  
  entry $w.entry -background white -width 10 -textvariable ::game::entryLoadNumber
  bind $w.entry <Escape> { .glnumDialog.buttons.cancel invoke }
  bind $w.entry <Return> { .glnumDialog.buttons.load invoke }
  pack $w.entry -side top -pady 5
  
  set b [frame $w.buttons]
  pack $b -side top -fill x
  dialogbutton $b.load -text "OK" -command {
    grab release .glnumDialog
    if {[catch {sc_game load $::game::entryLoadNumber} result]} {
      tk_messageBox -type ok -icon info -title "Scid" -message $result
    }
    focus .
    destroy .glnumDialog
    flipBoardForPlayerNames $::myPlayerNames
    updateBoard -pgn
    ::windows::gamelist::Refresh
    updateTitle
  }
  dialogbutton $b.cancel -text $::tr(Cancel) -command {
    focus .
    grab release .glnumDialog
    destroy .glnumDialog
    focus .
  }
  packbuttons right $b.cancel $b.load
  
  set x [ expr {[winfo width .] / 4 + [winfo rootx .] }]
  set y [ expr {[winfo height .] / 4 + [winfo rooty .] }]
  wm geometry $w "+$x+$y"
  
  focus $w.entry
}


# History of viewed games
set hgame_i 0

proc ::game::HistoryRemoveDB {db} {
  set i 0
  while {[info exist ::hgame_game($i)]} {
    if {$::hgame_db($i) == $db} {
      set a $i; set b [expr $i +1]
      while {[info exist ::hgame_game($b)]} {
        set ::hgame_db($a) $::hgame_db($b)
        set ::hgame_game($a) $::hgame_game($b)
        set ::hgame_ply($a) $::hgame_ply($b)
        incr a; incr b
      }
      unset ::hgame_game($a)
      if {$i < $::hgame_i} { incr ::hgame_i -1 }
    } else {
      incr i
    }
  }
}

proc ::game::HistoryDatabaseSwitch {} {
  ::game::HistorySavePos_
  ::game::HistoryAdd_
}

proc ::game::Hprev_btnstate {} {
  if {$::hgame_i > 0} { return "normal" }
  return "disabled"
}

proc ::game::Hnext_btnstate {} {
  set i [expr "$::hgame_i + 1"]
  if {[info exist ::hgame_game($i)]} {return "normal"}
  return "disabled"
}

proc ::game::HistorySavePos_ {} {
  if {[info exist ::hgame_game($::hgame_i)]} {
    set cur_db [sc_base current]
    if {$cur_db != $::hgame_db($::hgame_i)} {
      sc_base switch $::hgame_db($::hgame_i)
      set ::hgame_ply($::hgame_i) [sc_pos location]
      sc_base switch $cur_db
    } else {
      set ::hgame_ply($::hgame_i) [sc_pos location]
    }
  }
}

proc ::game::HistoryAdd_ {} {
  if {[info exist ::hgame_game($::hgame_i)]} {
    if {$::hgame_db($::hgame_i) == [sc_base current] && \
        $::hgame_game($::hgame_i) == [sc_game number]} {
      return
    } else {
      incr ::hgame_i
    }
  }
  set i $::hgame_i
  while {[info exist ::hgame_game($i)]} {
    unset ::hgame_game($i)
    incr i
  }
  set ::hgame_db($::hgame_i) [sc_base current]
  set ::hgame_game($::hgame_i) [sc_game number]
  set ::hgame_ply($::hgame_i) [sc_pos location]
}

# ::game::Load
#
#   Loads a specified game from the active database.
#
proc ::game::Load { selection {ply ""} } {
  ::game::HistorySavePos_
  if {[::game::Load_ $selection $ply]} {
    ::game::HistoryAdd_
    ::notify::GameChanged
  }
}

proc ::game::LoadHistory {dir} {
  set check [expr $::hgame_i + $dir]
  if {$check < 0 || ![info exist ::hgame_game($check)]} {return}

  ::game::HistorySavePos_
  incr ::hgame_i $dir
  ::file::SwitchToBase $::hgame_db($::hgame_i) 0
  #If the game is still in memory avoid the ::game::ConfirmDiscard2 call
  if {$::hgame_game($::hgame_i) != [sc_game number]} {
    ::game::Load_ $::hgame_game($::hgame_i) $::hgame_ply($::hgame_i)
  }
  ::notify::GameChanged
}

proc ::game::Load_ { selection {ply ""} } {
  # If an invalid game number, just return:
  if {$selection < 1} { return 0}
  if {$selection > [sc_base numGames]} { return 0}
  set confirm [::game::ConfirmDiscard2]
  if {$confirm == 2} { return 0}
  if {$confirm == 0} {
    sc_game save [sc_game number]
    # ::gameReplace
  }
  setTrialMode 0
  sc_game load $selection
  if {$ply != ""} { sc_move ply $ply }
  return 1
}

# ::game::LoadMenu
#
#   Produces a popup dialog for loading a game or other actions
#   such as merging it into the current game.
#
proc ::game::LoadMenu {w base gnum x y} {
  set m $w.gLoadMenu
  if {! [winfo exists $m]} {
    menu $m
    $m add command -label $::tr(BrowseGame)
    $m add command -label $::tr(LoadGame)
    $m add command -label $::tr(MergeGame)
  }
  $m entryconfigure 0 -command "::gbrowser::new $base $gnum"
  $m entryconfigure 1 -command "::file::SwitchToBase $base 0; ::game::Load $gnum"
  $m entryconfigure 2 -command "mergeGame $base $gnum"
  event generate $w <ButtonRelease-1>
  $m post $x $y
  event generate $m <ButtonPress-1>
}


# ::game::moveEntryNumber
#
#   Entry variable for GotoMoveNumber dialog.
#
set ::game::moveEntryNumber ""
trace variable ::game::moveEntryNumber w {::utils::validate::Regexp {^[0-9]*$}}

# ::game::GotoMoveNumber
#
#    Prompts for the move number to go to in the current game.
#
proc ::game::GotoMoveNumber {} {
  set ::game::moveEntryNumber ""
  set w [toplevel .mnumDialog]
  wm title $w "Scid: [tr GameGotoMove]"
  grab $w
  
  label $w.label -text $::tr(GotoMoveNumber)
  pack $w.label -side top -pady 5 -padx 5
  
  entry $w.entry -background white -width 10 -textvariable ::game::moveEntryNumber
  bind $w.entry <Escape> { .mnumDialog.buttons.cancel invoke }
  bind $w.entry <Return> { .mnumDialog.buttons.load invoke }
  pack $w.entry -side top -pady 5
  
  set b [frame $w.buttons]
  pack $b -side top -fill x
  dialogbutton $b.load -text "OK" -command {
    grab release .mnumDialog
    if {$::game::moveEntryNumber > 0} {
      catch {sc_move ply [expr {($::game::moveEntryNumber - 1) * 2}]}
    }
    focus .
    destroy .mnumDialog
    updateBoard -pgn
  }
  dialogbutton $b.cancel -text $::tr(Cancel) -command {
    focus .
    grab release .mnumDialog
    destroy .mnumDialog
    focus .
  }
  packbuttons right $b.cancel $b.load
  
  set x [ expr {[winfo width .] / 4 + [winfo rootx .] } ]
  set y [ expr {[winfo height .] / 4 + [winfo rooty .] } ]
  wm geometry $w "+$x+$y"
  
  focus $w.entry
}

################################################################################
# merge game gnum in base srcBase in current game in base destBase
# then switch to destbase
# If game number is not provided, take current glNumber
################################################################################
proc ::game::mergeInBase { srcBase destBase { gnum -1 }} {
  if {$gnum == -1} {
    set gnum $::glNumber
  }
  ::file::SwitchToBase $destBase
  mergeGame $srcBase $gnum
}


# FBF: 2012/03/08
# Grouping intercommunication between windows
# When complete this should be moved to a new notify.tcl file
namespace eval ::notify {
  proc GameChanged {} {
    flipBoardForPlayerNames $::myPlayerNames
    updateBoard -pgn
    updateTitle
    ::windows::gamelist::Refresh 0
  }

  proc PosChanged {} {
    if {![sc_base inUse]  ||  $::trialMode  ||  [sc_base isReadOnly]} {
        .main.tb.save configure -state disabled
    } else {
        .main.tb.save configure -state normal
    }

    if {$::showGameInfo} { updateGameInfo }
    updateAnalysis 1
    updateAnalysis 2
    updateEpdWins
    ::commenteditor::Refresh
    ::tb::results
    updateMenuStates
    moveEntry_Clear
    updateStatusBar
    if {[winfo exists .twinchecker]} { updateTwinChecker }
    ::pgn::Refresh
    if {[winfo exists .bookWin]} { ::book::refresh }
    if {[winfo exists .bookTuningWin]} { ::book::refreshTuning }
    updateNoveltyWin
    ::tree::refresh
    ::windows::gamelist::PosChanged
  }

  proc DatabaseChanged {{moveUp 1}} {
    ::windows::gamelist::Refresh $moveUp
    ::windows::switcher::Refresh
    ::windows::stats::Refresh
    updateTitle
    updateStatusBar
    updateMenuStates
    set curr_base [sc_base current]
    set ::treeWin [winfo exists .treeWin$curr_base]
  }
}

####################
# Game Browser window

namespace eval ::gbrowser {}

proc ::gbrowser::new {base gnum {ply -1}} {
  if {! [info exists ::gbrowser::size] } { set ::gbrowser::size 65 }
  options.save ::gbrowser::size

  set n 0
  while {[winfo exists .gb$n]} { incr n }
  set w .gb$n
  toplevel $w
  if {$base < 1} { set base [sc_base current] }
  if {$gnum < 1} { set game [sc_game number] }
  set filename [file tail [sc_base filename $base]]
  wm title $w "Scid: $::tr(BrowseGame) ($filename: $gnum)"
  set header [sc_game summary -base $base -game $gnum header]
  set ::gbrowser::boards($n) [sc_game summary -base $base -game $gnum boards]
  set moves [sc_game summary -base $base -game $gnum moves]
  
  pack [frame $w.b] -side bottom -fill x
  ::board::new $w.bd $::gbrowser::size
  $w.bd configure -relief solid -borderwidth 1
  pack $w.bd -side left -padx 4 -pady 4
  
  #pack [frame $w.t] -side right -fill both -expand yes
  #text $w.t.text -foreground black -background white -wrap word \
  #  -width 45 -height 12 -font font_Small -yscrollcommand "$w.t.ybar set" \
  #  -setgrid 1
  #scrollbar $w.t.ybar -command "$w.t.text yview" -takefocus 0
  #pack $w.t.ybar -side right -fill y
  #pack $w.t.text -side left -fill both -expand yes
  autoscrollframe $w.t text $w.t.text \
      -foreground black -background white -wrap word \
      -width 45 -height 12 -font font_Small -setgrid 1
  pack $w.t -side right -fill both -expand yes
  
  set t $w.t.text
  event generate $t <ButtonRelease-1>
  $t tag configure header -foreground darkBlue
  $t tag configure next -foreground yellow -background darkBlue
  $t insert end "$header" header
  $t insert end "\n\n"
  set m 0
  
  foreach i $moves {
    set moveTag m$m
    $t insert end [::trans $i] $moveTag
    $t insert end " "
    $t tag bind $moveTag <ButtonRelease-1> "::gbrowser::update $n $m"
    $t tag bind $moveTag <Any-Enter> \
        "$t tag configure $moveTag -foreground red
    $t configure -cursor hand2"
    $t tag bind $moveTag <Any-Leave> \
        "$t tag configure $moveTag -foreground {}
    $t configure -cursor {}"
    incr m
  }
  bind $w <F1> {helpWindow GameList Browsing}
  bind $w <Escape> "destroy $w"
  bind $w <Home> "::gbrowser::update $n start"
  bind $w <End> "::gbrowser::update $n end"
  bind $w <Left> "::gbrowser::update $n -1"
  bind $w <Right> "::gbrowser::update $n +1"
  bind $w <Up> "::gbrowser::update $n -10"
  bind $w <Down> "::gbrowser::update $n +10"
  bind $w <minus> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
  bind $w <Control-Shift-Left> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
  bind $w <Control-Button-4> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
  bind $w <plus> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
  bind $w <Control-Shift-Right> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
  bind $w <Control-Button-5> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
  bind $w <Button-4> "::gbrowser::update $n -1"
  bind $w <Button-5> "::gbrowser::update $n +1"
  
  button $w.b.start -image tb_start -command "::gbrowser::update $n start"
  button $w.b.back -image tb_prev -command "::gbrowser::update $n -1"
  button $w.b.forward -image tb_next -command "::gbrowser::update $n +1"
  button $w.b.end -image tb_end -command "::gbrowser::update $n end"
  frame $w.b.gap -width 3
  button $w.b.autoplay -image tb_play -command "::gbrowser::autoplay $n"
  frame $w.b.gap2 -width 3
  button $w.b.flip -image tb_flip -command "::gbrowser::flip $n"
  
  pack $w.b.start $w.b.back $w.b.forward $w.b.end $w.b.gap \
      $w.b.autoplay $w.b.gap2 $w.b.flip -side left -padx 3 -pady 1
  
  set ::gbrowser::autoplay($n) 0
  
  if {$gnum > 0} {
    button $w.b.load -textvar ::tr(LoadGame) -command "sc_base switch $base; ::game::Load $gnum"
    button $w.b.merge -textvar ::tr(MergeGame) -command "mergeGame $base $gnum"
  }
  button $w.b.close -textvar ::tr(Close) -command "destroy $w"
  pack $w.b.close -side right -padx 1 -pady 1
  if {$gnum > 0} {
    pack $w.b.merge $w.b.load -side right -padx 1 -pady 1
  }
  
  wm resizable $w 1 0
  if {$ply < 0} {
    set ply 0
    #TODO: search if game gnum match the current board pos
  }
  ::gbrowser::update $n $ply
  
  if { [::board::isFlipped .main.board] } {
    ::gbrowser::flip $n
  }
}

proc ::gbrowser::flip {n} {
  ::board::flip .gb$n.bd
}

proc ::gbrowser::update {n ply} {
  set w .gb$n
  if {! [winfo exists $w]} { return }
  set oldply 0
  if {[info exists ::gbrowser::ply($n)]} { set oldply $::gbrowser::ply($n) }
  if {$ply == "forward"} { set ply [expr {$oldply + 1} ] }
  if {$ply == "back"} { set ply [expr {$oldply - 1} ] }
  if {$ply == "start"} { set ply 0 }
  if {$ply == "end"} { set ply 9999 }
  if {[string index $ply 0] == "-"  ||  [string index $ply 0] == "+"} {
    set ply [expr {$oldply + $ply} ]
  }
  if {$ply < 0} { set ply 0 }
  set max [expr {[llength $::gbrowser::boards($n)] - 1} ]
  if {$ply > $max} { set ply $max }
  set ::gbrowser::ply($n) $ply
  ::board::update $w.bd [lindex $::gbrowser::boards($n) $ply] 1
  
  set t $w.t.text
  $t configure -state normal
  set moveRange [$t tag nextrange m$ply 1.0]
  $t tag remove next 1.0 end
  set moveRange [$t tag nextrange m$ply 1.0]
  if {[llength $moveRange] == 2} {
    $t tag add next [lindex $moveRange 0] [lindex $moveRange 1]
    $t see [lindex $moveRange 0]
  }
  $t configure -state disabled
  
  if {$::gbrowser::autoplay($n)} {
    if {$ply >= $max} {
      ::gbrowser::autoplay $n
    } else {
      after cancel "::gbrowser::update $n +1"
      after $::autoplayDelay "::gbrowser::update $n +1"
    }
  }
}

proc ::gbrowser::autoplay {n} {
  if {$::gbrowser::autoplay($n)} {
    set ::gbrowser::autoplay($n) 0
    .gb$n.b.autoplay configure -image tb_play
    return
  } else {
    set ::gbrowser::autoplay($n) 1
    .gb$n.b.autoplay configure -image tb_stop
    ::gbrowser::update $n +1
  }
}
###
### windows.tcl: part of Scid.
### Copyright (C) 1999-2003  Shane Hudson.
###


namespace eval ::windows {
  
  # TODO
}

########################################################################
###  Optional windows: all off initially.

set treeWin 0
set pgnWin 0
set commentWin 0
set filterGraph 0

################################################################################
# Creates a toplevel window depending of the docking option
################################################################################
proc createToplevel { w } {
  set name [string range $w 1 end]
  set f .fdock$name

  # Raise window if already exist
  if { [winfo exists $w] } {
    if {! $::docking::USE_DOCKING } {
      tk::PlaceWindow $w
    } else {
      if { [::docking::isUndocked $w] } {
        tk::PlaceWindow $f
      } else {
        [::docking::find_tbn $f] select $f
      }
    }
    return "already_exists"
  }

  if { $::docking::USE_DOCKING && ! [ ::docking::isUndocked $w ] } {
    frame $f  -container 1
    toplevel .$name -use [ winfo id $f ]
    docking::add_tab $f e

    # auto focus exchange between docked windows
    bind .$name <Enter> {
      set atTop [lindex [wm stackorder . ] end]
      if { $atTop == "." && [focus] != ""} {
        set tl [winfo toplevel %W]
        if {! [ ::docking::isUndocked $tl ] } { focus -force $tl }
      }
    }

  } else  {
    toplevel $w
  }
}

################################################################################
# In the case of a window closed without the context menu in docked mode, arrange for the tabs to be cleaned up
# Alternative way : directly call ::docking::cleanup $w when closing window
################################################################################
proc createToplevelFinalize {w} {
  if { $::docking::USE_DOCKING } {
    bind $w <Destroy> +[ namespace code "::docking::cleanup $w %W"]
  }
}

################################################################################
# if undocked window : sets the title of the toplevel window
# if docked : sets the name of the tab
# w : name of the toplevel window
proc setTitle { w title } {
  if { $::docking::USE_DOCKING && ! [ ::docking::isUndocked $w ]} {
    set f .fdock[ string range $w 1 end ]
    if { [catch {set nb [ ::docking::find_tbn $f ]} ]} {
      set nb ""
    }

    if { $nb == "" } {
      wm title $w $title
    } else  {
      # in docked mode trim down title to spare space
      if { [ string range $title 0 5 ] == "Scid: " &&  [ string length $title ] > 6 } {
        set title [string range $title 6 end]
      }
      $nb tab $f -text $title
    }
  } else  {
    set wdock ".fdock[string range $w 1 end]"
    if { [winfo exists $wdock ] } { set w $wdock }
    wm title $w $title
  }

}

################################################################################
# Sets the menu for a new window : in docked mode the menu is displayed by clicking on the tab of the notebook
################################################################################
proc setMenu { w m} {
  if { ! $::docking::USE_DOCKING } {
    $w configure -menu $m
  }
}


# recordWinSize:
#   Records window width and height, for saving in options file.
#
proc recordWinSize {win} {
  global winWidth winHeight winX winY winX_docked winY_docked winWidth_docked winHeight_docked
  if {![winfo exists $win]} { return }
  set temp [wm geometry $win]
  
  if { $::docking::USE_DOCKING } {
    set suffix "_docked"
  } else  {
    set suffix ""
  }
  
  set n [scan $temp "%dx%d+%d+%d" width height x y]
  if {$n == 4} {
    set winWidth${suffix}($win) $width
    set winHeight${suffix}($win) $height
    set winX${suffix}($win) $x
    set winY${suffix}($win) $y
  }
}

proc setWinLocation {win} {
  global winX winY winX_docked winY_docked

if { $::docking::USE_DOCKING } {
    set suffix "_docked"
  } else  {
    set suffix ""
  }
  
  if {[info exists winX${suffix}($win)]  &&  [info exists winY${suffix}($win)]  && \
        [set winX${suffix}($win)] >= 0  &&  [set winY${suffix}($win)] >= 0} {
    catch [list wm geometry $win "+[set winX${suffix}($win)]+[set winY${suffix}($win)]"]
  }
}

proc setWinSize {win} {
  global winWidth winHeight winWidth_docked winHeight_docked
  
  if { $::docking::USE_DOCKING } {
    set suffix "_docked"
  } else  {
    set suffix ""
  }
  
  if {[info exists winWidth${suffix}($win)]  &&  [info exists winHeight${suffix}($win)]  &&  \
        [set winWidth${suffix}($win) ] > 0  &&  [set winHeight${suffix}($win) ] > 0 } {
    catch [list wm geometry $win "[set winWidth${suffix}($win) ]x[set winHeight${suffix}($win) ]"]
  }
}

createToplevel .main

###
### End of file: windows.tcl
###
########################################################################
### Games list window
# Copyright (C) 2011-2013 Fulvio Benini
#
# This file is part of Scid (Shane's Chess Information Database).
# Scid 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.

proc ::windows::gamelist::Open {{w .glistWin} {title ""} {layout ""} {base 0} {filter "dbfilter"}} {
	if {[::createToplevel $w] == "already_exists"} {
		focus .
		destroy $w
		return
	}

	if {$title == ""} {
		set ::gamelistTitle($w) "[tr WindowsGList]:"
	} else {
		set ::gamelistTitle($w) $title
	}
	if {$layout != ""} { set ::glistLayout($w) $layout }
	set ::gamelistBase($w) $base
	set ::gamelistFilter($w) $filter
	set ::gamelistPosMask($w) 0
	set ::gamelistMenu($w) ""
	standardShortcuts $w
	if {$w == ".glistWin"} { ::windows::gamelist::createMenu_ $w }
	::windows::gamelist::createGList_ $w
	grid rowconfigure $w 0 -weight 1
	grid columnconfigure $w 0 -weight 0
	grid columnconfigure $w 1 -weight 0
	grid columnconfigure $w 2 -weight 1
	bind $w <Destroy> {
		set idx [lsearch $::windows::gamelist::wins %W]
		set ::windows::gamelist::wins [lreplace $::windows::gamelist::wins $idx $idx]
	}
	lappend ::windows::gamelist::wins $w
	createToplevelFinalize $w
	::windows::gamelist::Refresh
}

proc ::windows::gamelist::Refresh {{moveup 1} {wlist ""}} {
	if {$wlist == ""} { set wlist $::windows::gamelist::wins }
	foreach w $wlist {
		if {[winfo exists $w]} {
			if {$w == ".glistWin"} { #TODO: write better code for this
				catch {sc_filter posmask $::gamelistBase($w) dbfilter}
				set ::gamelistBase($w) [sc_base current]
				if {$::gamelistPosMask($w) == 0} {
					sc_filter posmask $::gamelistBase($w) dbfilter
				} else {
					sc_filter posmask $::gamelistBase($w) dbfilter FEN
				}
			}
			::windows::gamelist::update_ $w $moveup
		}
	}
}

proc ::windows::gamelist::PosChanged {{wlist ""}} {
	if {$wlist == ""} { set wlist $::windows::gamelist::wins }
	foreach w $wlist {
		#TODO: Write better code for this
		if {![winfo exists $w]} { continue }
		if {[winfo exists .treeWin$::gamelistBase($w)]} {
			::windows::gamelist::update_ $w 1
			continue
		}
		if { $::gamelistPosMask($w) != 0 } {
			catch { destroy $w.tmp }
			canvas $w.tmp
			sc_progressBar $w.tmp "..." 0 0
			$w.games.glist tag configure fsmall -foreground #ededed
			sc_tree search -base $::gamelistBase($w)
			$w.games.glist tag configure fsmall -foreground ""
			::notify::DatabaseChanged
		}
		#################
	}
}


#Private:
set ::windows::gamelist::wins {}

proc ::windows::gamelist::createMenu_ {w} {
	ttk::frame $w.buttons -padding {5 5 2 5}
	ttk::button $w.buttons.database -image tb_CC_book -command "::windows::gamelist::menu_ $w database"
	ttk::button $w.buttons.filter -image tb_search_on -command "::windows::gamelist::menu_ $w filter"
	ttk::button $w.buttons.layout -image tb_Layout -command "::windows::gamelist::menu_ $w layout"
	ttk::button $w.buttons.boardFilter -image tb_BoardMask -command "::windows::gamelist::searchpos_ $w"
	#TODO:
	#ttk::button $w.buttons.stats -image b_bargraph
	#TODO: translate
	::utils::tooltip::Set $w.buttons.database "Show/Hide databases"
	::utils::tooltip::Set $w.buttons.filter "Change filter"
	::utils::tooltip::Set $w.buttons.layout "Load/Save/Change sorting criteria and column layout"
	::utils::tooltip::Set $w.buttons.boardFilter "Show only games that matches the current board position"
	grid $w.buttons.database -row 0
	grid $w.buttons.filter  -row 1
	grid $w.buttons.layout  -row 2
	grid $w.buttons.boardFilter  -row 3
	#grid $w.buttons.stats -row 4
	grid $w.buttons -row 0 -column 0 -sticky news

	ttk::frame $w.database -padding {0 5 6 2}
	::windows::switcher::Create $w.database

	ttk::frame $w.filter -padding {0 5 6 2}
	ttk::frame $w.filter.b -borderwidth 2 -relief groove
	grid $w.filter.b -sticky news
	grid rowconfigure $w.filter 0 -weight 1
	grid columnconfigure $w.filter 0 -weight 1
	button $w.filter.b.rfilter -image tb_rfilter -command ::search::filter::reset -width 24 -height 24
	button $w.filter.b.bsearch -image tb_bsearch -command ::search::board -width 24 -height 24
	button $w.filter.b.hsearch -image tb_hsearch -command ::search::header -width 24 -height 24
	button $w.filter.b.msearch -image tb_msearch -command ::search::material -width 24 -height 24
	button $w.filter.b.tmt -image tb_tmt -command ::tourney::toggle -width 40 -height 24
	button $w.filter.b.crosst -image tb_crosst -command toggleCrosstabWin -width 40 -height 24
	grid $w.filter.b.rfilter $w.filter.b.bsearch $w.filter.b.hsearch $w.filter.b.msearch \
		$w.filter.b.tmt $w.filter.b.crosst
	#TODO: translate labels
	ttk::labelframe $w.filter.b.click -text "Double-click"
	set bgcolor [ttk::style lookup Button.label -background]
	radiobutton $w.filter.b.click.l -text $::tr(LoadGame) -font font_Tiny -background $bgcolor -variable ::glistClickOp($w.games.glist) -value 0
	radiobutton $w.filter.b.click.d -text "(Un)Delete Game" -font font_Tiny -background $bgcolor -variable ::glistClickOp($w.games.glist) -value 1
	radiobutton $w.filter.b.click.r -text "Remove from filter" -font font_Tiny -background $bgcolor -variable ::glistClickOp($w.games.glist) -value 2
	grid $w.filter.b.click.l -sticky w
	grid $w.filter.b.click.d -sticky w
	grid $w.filter.b.click.r -sticky w
	grid $w.filter.b.click -columnspan 6 -sticky news

	ttk::frame $w.layout -padding {0 5 6 2}
	ttk::frame $w.layout.b -borderwidth 2 -relief groove
	grid $w.layout.b -sticky news
	grid rowconfigure $w.layout 0 -weight 1
	grid columnconfigure $w.layout 0 -weight 1
	::glist_Ly::Create $w
}

proc ::windows::gamelist::createGList_ {{w}} {
	if {[winfo exists $w.games]} { destroy $w.games }
	ttk::frame $w.games -borderwidth 0 -padding {8 5 5 2}
	glist.create $w.games $::glistLayout($w)
	grid $w.games -row 0 -column 2 -sticky news
}

proc ::windows::gamelist::update_ {{w} {moveUp}} {
	set gameCount [sc_base numGames $::gamelistBase($w)]
	if {$gameCount == 0} {
		set fr $::tr(noGames)
	} else {
		set filterCount [sc_filter count $::gamelistBase($w) $::gamelistFilter($w)]
		set tmp [::utils::thousands $gameCount 100000]
		if {$gameCount == $filterCount} {
			set fr "$::tr(all) / $tmp"
		} else {
			set fr "[::utils::thousands $filterCount 100000] / $tmp"
		}
	}
	set fn [file tail [sc_base filename $::gamelistBase($w)]]
	::setTitle $w "$::gamelistTitle($w) $fn ($fr)"
	if {$moveUp} {
		#Reset double-click behavior
		set ::glistClickOp($w.games.glist) 0
	}
	glist.update $w.games $::gamelistBase($w) $::gamelistFilter($w) $moveUp
}

proc ::windows::gamelist::menu_ {{w} {button}} {
	if {$::gamelistMenu($w) != ""} {
		$w.buttons.$::gamelistMenu($w) state !pressed
		grid forget $w.$::gamelistMenu($w)
	}
	if {$::gamelistMenu($w) != $button} {
		$w.buttons.$button state pressed
		set ::gamelistMenu($w) $button
		grid $w.$button -row 0 -column 1 -sticky news
	} else {
		set ::gamelistMenu($w) ""
	}
}

proc ::windows::gamelist::searchpos_ {{w}} {
	if {$::gamelistPosMask($w) == 0} {
		set ::gamelistPosMask($w) 1
		$w.buttons.boardFilter state pressed
		sc_filter posmask $::gamelistBase($w) dbfilter FEN
		::windows::gamelist::PosChanged $w
	} else {
		set ::gamelistPosMask($w) 0
		$w.buttons.boardFilter state !pressed
		sc_filter posmask $::gamelistBase($w) dbfilter
		::notify::DatabaseChanged
	}
}

namespace eval ::glist_Ly {
	proc Create {w} {
		if {! [info exists ::glist_Layouts]} { set ::glist_Layouts [::glist_Ly::createName_] }

		if {! [info exists ::glistLayout($w)] || [lsearch -exact $::glist_Layouts $::glistLayout($w)] == -1 } {
			set ::glistLayout($w) [lindex $::glist_Layouts 0]
		}
		options.save ::glist_Layouts
		options.save ::glistLayout($w)
		set ::gamelistNewLayout($w) [::glist_Ly::createName_]

		set bgcolor [ttk::style lookup Button.label -background]
		autoscrollframe -bars y $w.layout.b canvas $w.layout.b.c -highlightthickness 0 -background $bgcolor
		bind $w.layout.b.c <Configure>  { ::glist_Ly::AdjScrollbar_ %W }
		::glist_Ly::Update_ $w
	}
	proc UpdateAll_ {} {
		foreach w $::windows::gamelist::wins {
		    if {[winfo exists $w]} { Update_ $w }
		}
	}
	proc Update_ {w} {
		if {[winfo exists $w.layout.b.c.f]} { destroy $w.layout.b.c.f}
		ttk::frame $w.layout.b.c.f -padding 5
		$w.layout.b.c create window 0 0 -window $w.layout.b.c.f -anchor nw
		tk::entry $w.layout.b.c.f.text_new -textvariable ::gamelistNewLayout($w) -font font_Small
		tk::button $w.layout.b.c.f.new -image tb_new -command "::glist_Ly::New_ $w"
		grid $w.layout.b.c.f.text_new $w.layout.b.c.f.new
		ttk::frame $w.layout.b.c.f.sep -padding { 0 4 0 4 }
		ttk::separator $w.layout.b.c.f.sep.line
		grid rowconfigure $w.layout.b.c.f.sep 0 -weight 1
		grid columnconfigure $w.layout.b.c.f.sep 0 -weight 1
		grid $w.layout.b.c.f.sep.line -sticky news
		grid $w.layout.b.c.f.sep -columnspan 2 -sticky we
		for {set i 0} {$i < [llength $::glist_Layouts]} {incr i} {
			set name [lindex $::glist_Layouts $i]
			tk::button $w.layout.b.c.f.layout$i -text $name -font font_Small -width 20 -command "::glist_Ly::Change_ $w $i"
			if {$name == $::glistLayout($w)} { $w.layout.b.c.f.layout$i configure -bg lightSteelBlue }
			tk::button $w.layout.b.c.f.layoutDel$i -image tb_CC_delete -command "::glist_Ly::Del_ $w $i"
			grid $w.layout.b.c.f.layout$i $w.layout.b.c.f.layoutDel$i -sticky we
		}
		after idle "::glist_Ly::AdjScrollbar_ $w.layout.b.c"
	}
	proc New_ {w} {
		#TODO: no nomi uguali
		set old_layout $::glistLayout($w)
		set ::glistLayout($w) $::gamelistNewLayout($w)
		lappend ::glist_Layouts $::gamelistNewLayout($w)
		set ::gamelistNewLayout($w) [::glist_Ly::createName_]
		set ::glist_ColOrder($::glistLayout($w)) $::glist_ColOrder($old_layout)
		set ::glist_ColWidth($::glistLayout($w)) $::glist_ColWidth($old_layout)
		set ::glist_ColAnchor($::glistLayout($w)) $::glist_ColAnchor($old_layout)
		set ::glist_Sort($::glistLayout($w)) $::glist_Sort($old_layout)
		set ::glist_FindBar($::glistLayout($w)) $::glist_FindBar($old_layout)
		::glist_Ly::UpdateAll_
		::windows::gamelist::createGList_ $w
		::windows::gamelist::update_ $w 1
	}
	proc Del_ {w idx} {
		set old_layout [lindex $::glist_Layouts $idx]
		options.save_cancel ::glist_ColOrder($old_layout)
		options.save_cancel ::glist_ColWidth($old_layout)
		options.save_cancel ::glist_ColAnchor($old_layout)
		options.save_cancel ::glist_Sort($old_layout)
		options.save_cancel ::glist_FindBar($old_layout)
  		set ::glist_Layouts [lreplace $::glist_Layouts $idx $idx]
		::glist_Ly::UpdateAll_
	}
	proc Change_ {w idx} {
		set ::glistLayout($w) [lindex $::glist_Layouts $idx]
		::glist_Ly::Update_ $w
		::windows::gamelist::createGList_ $w
		::windows::gamelist::update_ $w 1
	}
	proc createName_ {} {
		set i 1
		set prefix "Layout"
		if {! [info exists ::glist_Layouts] } { return "$prefix$i" }
		while {[lsearch $::glist_Layouts "$prefix$i"] != -1} { incr i }
		return "$prefix$i"
	}
	proc AdjScrollbar_ {w} {
		set l [winfo reqwidth $w.f]
		set h [winfo reqheight $w.f]
		$w configure -scrollregion [list 0 0 $l $h] -width $l
	}
}





##########################################################################
# June 2011: A new reusable and simplified gamelist widget
# glist.create
#   Create a gamelist widget
#   w: parent window of the gamelist widget
#   layout: a string name that will be assigned to columns layout.
#           layout will be saved and restored in successive glist.create calls.
proc glist.create {{w} {layout}} {
  # Default values
  if {! [info exists ::glist_ColOrder($layout)] } {
    set ::glist_ColOrder($layout) {{7} {1} {2} {3} {4} {5} {6} {23} {22} {8} {9} {10} {11} {12} {13} {14} {15} {16} {0}}
  }
  if {! [info exists ::glist_ColWidth($layout)] } {
    set ::glist_ColWidth($layout) {{50} {50} {50} {120} {40} {120} {40} {80} {200} {30} \
        {200} {30} {20} {20} {20} {20} {35} {50} {30} {100} {40} {40} {50} {140}}
  }
  if {! [info exists ::glist_ColAnchor($layout)] } {
    set ::glist_ColAnchor($layout) {{e} {c} {c} {w} {c} {w} {c} {w} {w} {e} \
        {w} {c} {c} {c} {c} {c} {c} {c} {c} {c} {c} {c} {c} {w}}
  }
  if {! [info exists ::glist_Sort($layout)] } {
    set ::glist_Sort($layout) { {22} {-} {7} {-} }
  }
  if {! [info exists ::glist_FindBar($layout)] } {
    set ::glist_FindBar($layout) 1
  }

  ttk::treeview $w.glist -columns $::glist_Headers -show headings -selectmode browse
  $w.glist tag configure current -background lightSteelBlue
  $w.glist tag configure fsmall -font font_Small
  $w.glist tag configure deleted -foreground #a5a2ac
  menu $w.glist.header_menu
  menu $w.glist.header_menu.addcol
  menu $w.glist.game_menu
  bind $w.glist <Configure> {
    after cancel glist.chkVisibleLn_ %W
    after 100 glist.chkVisibleLn_ %W
  }
  bind $w.glist <2> "glist.popupmenu_ %W %x %y %X %Y $layout"
  bind $w.glist <3> "glist.popupmenu_ %W %x %y %X %Y $layout"
  bind $w.glist <ButtonRelease-1> "glist.release_ %W %x %y $layout"
  bind $w.glist <Double-ButtonRelease-1> "glist.doubleclick_ %W %x %y $layout"
  bind $w.glist <KeyPress-Up> {glist.movesel_ %W prev -1 0; break}
  bind $w.glist <KeyPress-Down> {glist.movesel_ %W next +1 end; break}
  bind $w.glist <KeyPress-Right> {continue}
  bind $w.glist <KeyPress-Left> {continue}
  bind $w.glist <KeyPress-Prior> {glist.ybar_ %W scroll -1 pages; break}
  bind $w.glist <KeyPress-Next> {glist.ybar_ %W scroll 1 pages; break}
  bind $w.glist <KeyPress-Return> {
    foreach {idx ply} [split [%W selection] "_"] {}
    if {[info exist idx]} {
      ::file::SwitchToBase $::glistBase(%W) 0
      ::game::Load $idx $ply
    }
    break
  }
  bind $w.glist <Delete> {
    foreach {idx ply} [split [%W selection] "_"] {}
    if {[info exist idx]} {
      glist.delflag_ %W $idx
      glist.movesel_ %W next +1 end
    }
    break
  }
  bind $w.glist <Control-Delete> {
    foreach {idx ply} [split [%W selection] "_"] {}
    if {[info exist idx]} {
      glist.movesel_ %W next +1 end;
      sc_filter set $::glistBase(%W) $::glistFilter(%W) 0 $idx
      ::notify::DatabaseChanged 0
    }
    break
  }
  bind $w.glist <Destroy> "glist.destroy_ $w.glist"

  set i 0
  foreach col $::glist_Headers {
    $w.glist heading $col -text $::tr($col)
    $w.glist column $col -stretch 0 \
             -width [lindex $::glist_ColWidth($layout) $i]\
             -anchor [lindex $::glist_ColAnchor($layout) $i]
    incr i
  }
  $w.glist configure -displaycolumns $::glist_ColOrder($layout)

  autoscrollframe -bars both $w "" $w.glist
  set ::glistYScroll($w.glist) [$w.glist cget -yscrollcommand]
  $w.glist configure -yscrollcommand "glist.yscroll_ $w.glist"
  $w.ybar configure -command "glist.ybar_ $w.glist"
  bind $w.ybar <ButtonRelease-1> "+glist.ybar_ $w.glist buttonrelease"
  ttk_bindMouseWheel $w.glist "glist.ybar_ $w.glist"

  # Find widget
  ttk::frame $w.find
  ttk::button $w.find.hide -image tb_close
  bind $w.find.hide <ButtonPress-1> "set ::glist_FindBar($layout) 0; grid forget $w.find"
  ttk::frame $w.find.n
  ttk::label $w.find.t_gnum -text $::tr(GlistGameNumber:)
  entry $w.find.gnum -width 8 -bg white
  ttk::button $w.find.b_gnum -image tb_next -command "glist.findgame_ $w"
  bind $w.find.gnum <Return> "$w.find.b_gnum invoke"
  grid $w.find.t_gnum $w.find.gnum $w.find.b_gnum -in $w.find.n -padx 2
  ttk::frame $w.find.t
  ttk::label $w.find.t_text -text $::tr(GlistFindText:)
  entry $w.find.text -width 20 -bg white
  ttk::button $w.find.b1_text -image tb_next -command \
    "after cancel glist.findgame_ $w 1; after idle glist.findgame_ $w 1"
  bind $w.find.text <Return> "$w.find.b1_text invoke"
  ttk::button $w.find.b2_text -image tb_prev -command \
    "after cancel glist.findgame_ $w 0; after idle glist.findgame_ $w 0"
  #TODO: -from 0 -to 100
  #TODO: set scale position when normal ybar is used
  ttk::scale $w.find.scale -command "glist.ybar_ $w.glist moveto"
  grid $w.find.t_text $w.find.text $w.find.b2_text $w.find.b1_text -in $w.find.t -padx 2
  grid $w.find.hide
  grid $w.find.n -row 0 -column 1 -padx 10
  grid $w.find.t -row 0 -column 2 -padx 6
  grid $w.find.scale -row 0 -column 3 -sticky ew
  grid columnconfigure $w.find 3 -weight 1
  set ::glistFindBar($w.glist) $w.find
  glist.showfindbar_ $w.glist $layout

  # On exit save layout in options.dat
  options.save ::glist_ColOrder($layout)
  options.save ::glist_ColWidth($layout)
  options.save ::glist_ColAnchor($layout)
  options.save ::glist_Sort($layout)
  options.save ::glist_FindBar($layout)

  set ::glistLoaded($w.glist) 0.0
  set ::glistTotal($w.glist) 0.0
  set ::glistVisibleLn($w.glist) 20
  glist.sortInit_ $w.glist $layout
}

# glist.update
#   Retrieve values from database and update the widget
#   w: the parent windows of the widget that was passed to glist.create
#   base: the database from which retrieve values
#   filter: returns only values in the specified filter
#         - "dbfilter": only values that matches the user defined filters
#         - "tree": only games from which are calculated the stats in the tree window
#   moveUp: reset glist to show the first results
proc glist.update {{w} {base} {filter} {moveUp 1}} {
  set w $w.glist
  if {! [winfo exists $w]} { return }

  set ::glistFilter($w) $filter
  set ::glistTotal($w) [sc_filter count $base $filter]
  if {$moveUp == 1} { set ::glistFirst($w) 0.0 }

  glist.update_ $w $base
}


##########################################################################
#private:

set glist_Headers {"GlistNumber" "GlistResult" "GlistLength" "GlistWhite" "GlistWElo"
                   "GlistBlack" "GlistBElo"  "GlistDate" "GlistEvent" "GlistRound"
                   "GlistSite" "GlistAnnos" "GlistComments" "GlistVars" "GlistDeleted"
                   "GlistFlags" "GlistECO" "GlistEndMaterial" "GlistStart" "GlistEDate"
                   "GlistYear" "GlistAverageElo" "GlistRating" "GlistMoveField" }

set glist_SortShortcuts { "N" "r" "m" "w" "W"
                    "b" "B" "d" "e" "n"
                    "s" "A" "C" "V" "D"
                    "???" "o" "???" "???" "E"
                    "y" "R" "i" "???" }

proc glist.destroy_ {{w}} {
  if {[info exists ::glistSortCache($w)]} {
    catch { sc_base sortcache $::glistBase($w) release $::glistSortCache($w) }
    unset ::glistSortCache($w)
  }
  unset ::glistSortStr($w)
  if {[info exists ::glistBase($w)]} { unset ::glistBase($w) }
  if {[info exists ::glistFilter($w)]} { unset ::glistFilter($w) }
  if {[info exists ::glistFirst($w)]} { unset ::glistFirst($w) }
  if {[info exists ::glistClickOp($w)]} { unset ::glistClickOp($w) }
  unset ::glistVisibleLn($w)
  unset ::glistLoaded($w)
  unset ::glistTotal($w)
  unset ::glistYScroll($w)
  unset ::glistFindBar($w)
}

proc glist.update_ {{w} {base}} {
  if {! [info exists ::glistBase($w)] } {
    #Create a sortcache to speed up sorting
    sc_base sortcache $base create $::glistSortStr($w)
    set ::glistFirst($w) 0.0
  } elseif {$::glistBase($w) != $base || $::glistSortCache($w) != $::glistSortStr($w)} {
    #Create a new sortcache
    catch { sc_base sortcache $::glistBase($w) release $::glistSortCache($w) }
    sc_base sortcache $base create $::glistSortStr($w)
    set ::glistFirst($w) 0.0
  }
  set ::glistSortCache($w) $::glistSortStr($w)
  set ::glistBase($w) $base
  glist.loadvalues_ $w
  after cancel glist.chkVisibleLn_ $w
  after idle glist.chkVisibleLn_ $w
}

proc glist.loadvalues_ {{w}} {
  set sel [$w selection]
  $w delete [$w children {}]
  set base $::glistBase($w)
  if {$base == [sc_base current]} {
    set current_game [sc_game number]
  } else {
    set current_game -1
  }
  set i 0
  foreach {idx line} [sc_base gameslist $base $::glistFirst($w) [expr 1 + $::glistVisibleLn($w)]\
                                        $::glistFilter($w) $::glistSortStr($w)] {
    $w insert {} end -id $idx -values $line -tag fsmall
    foreach {n ply} [split $idx "_"] {
      if {[sc_base gameflag $base $n get del]} { $w item $idx -tag {fsmall deleted} }
      if {$n == $current_game} { $w item $idx -tag "[$w item $idx -tag] current" }
    }
    incr i
  }
  set ::glistLoaded($w) $i
  catch {$w selection set $sel}
}

proc glist.chkVisibleLn_ {w} {
  set i 0
  set nvisible 0
  foreach {idx} [$w children {}] {
    if {[$w bbox $idx] != ""} { incr nvisible }
	incr i
  }
  if {$nvisible != $i} {
    set ::glistVisibleLn($w) $nvisible
  } elseif {$::glistLoaded($w) != $::glistTotal($w)} {
    if {[expr $::glistFirst($w) + $::glistLoaded($w)] == $::glistTotal($w)} {
      #TODO: update ::glistVisibleLn windows when at the bottom of the list
      #set ::glistFirst($w) [expr $::glistFirst($w) -1.0]
      return
    }
    set ::glistVisibleLn($w) [expr 2* $i]
    glist.loadvalues_ $w
    after cancel glist.chkVisibleLn_ $w
    after idle glist.chkVisibleLn_ $w
  }
  after cancel glist.ybarupdate_ $w
  after idle glist.ybarupdate_ $w
}

proc glist.showfindbar_ {{w} {layout}} {
  if {$::glist_FindBar($layout) == 0} {
    grid forget $::glistFindBar($w)
  } else {
    grid $::glistFindBar($w) -row 2 -columnspan 2 -sticky news
  }
}

proc glist.findcurrentgame_ {{w} {gnum}} {
  set r [sc_base gamelocation $::glistBase($w) $::glistFilter($w) $::glistSortStr($w) $gnum]
  if {$r != ""} {
    set ::glistFirst($w) [expr $r -1]
    glist.ybar_ $w scroll
  }
}

proc glist.findgame_ {{w_parent} {dir ""}} {
  set w $w_parent.glist
  set w_entryN $w_parent.find.gnum
  set gnum [$w_entryN get]
  set w_entryT $w_parent.find.text
  set txt [$w_entryT get]
  $w_entryN configure -bg white
  $w_entryT configure -bg white
  if {($dir == "" && $gnum == "") || ($dir != "" && $txt == "")} { return }
  busyCursor .
  update idletasks

  if {$dir == ""} {
    set r [sc_base gamelocation $::glistBase($w) $::glistFilter($w) $::glistSortStr($w) $gnum]
  } else {
    set gstart [expr int($::glistFirst($w))]
    foreach {n ply} [split [$w selection] "_"] {
      if {$n != ""} {
        set n [sc_base gamelocation $::glistBase($w) $::glistFilter($w) $::glistSortStr($w) $n]
        set gstart [expr $n -1]
      }
    }
    if {$dir == "1"} { incr gstart }
    set r [sc_base gamelocation $::glistBase($w) $::glistFilter($w) $::glistSortStr($w) 0\
            $txt $gstart $dir]
  }
  if {$r == ""} {
    if {$dir == ""} {
      $w_entryN configure -bg red
    } else {
      $w_entryT configure -bg red
    }
  } else {
    if {[expr $::glistFirst($w) + $::glistVisibleLn($w)] <= $r} {
      set ::glistFirst($w) [expr $r -1]
      glist.ybar_ $w scroll
    }
    after idle glist.select_ $w $r
  }
  unbusyCursor .
}

proc glist.select_ {w {idx 0}} {
  if {$idx != "end" && $idx > 0} {
    set idx [expr int($idx - $::glistFirst($w) -1)]
  }
  $w selection set [lindex [$w children {}] $idx]
}

proc glist.movesel_ {{w} {cmd} {scroll} {select}} {
  set sel [$w selection]
  if {$sel == ""} { glist.select_ $w; return }
  set newsel [$w $cmd $sel]
  if {$newsel == "" || [$w bbox $newsel] == ""} {
    glist.ybar_ $w scroll $scroll
  }
  if {$newsel == ""} {
    after idle glist.select_ $w $select
  } else {
    $w selection set $newsel
  }
}

proc glist.delflag_ {{w} {idx}} {
  if {[sc_base gameflag $::glistBase($w) $idx get del]} {
    sc_base gameflag $::glistBase($w) $idx unset del
  } else {
    sc_base gameflag $::glistBase($w) $idx set del
  }
  ::notify::DatabaseChanged 0
}

proc glist.doubleclick_ {{w} {x} {y} {layout}} {
  lassign [$w identify $x $y] what
  if {$what == "heading"} {
    glist.sortClickHandle_ $w $x $y $layout 1
  } else {
    foreach {idx ply} [split [$w identify item $x $y] "_"] {}
    if {[info exists idx]} {
      if {[info exists ::glistClickOp($w)]} {
        if {$::glistClickOp($w) == 1} {
          glist.delflag_ $w $idx;
          $w selection set {};
          return
        }
        if {$::glistClickOp($w) == 2} {
          glist.removeFromFilter_ $w $idx
          return
        }
      }
      ::file::SwitchToBase $::glistBase($w) 0
      ::game::Load $idx $ply
    }
  }
}

proc glist.removeFromFilter_ {{w} {idx} {dir ""}} {
  if {$dir == ""} {
    sc_filter set $::glistBase($w) $::glistFilter($w) 0 $idx
    ::notify::DatabaseChanged 0
    return
  }
  set fc [sc_filter count $::glistBase($w) $::glistFilter($w)]
  sc_filter set $::glistBase($w) $::glistFilter($w) 0 $idx $dir$fc $::glistSortStr($w)
  ::notify::DatabaseChanged 1
  if {$dir == "+"} { glist.ybar_ $w moveto 1 }
}

proc glist.popupmenu_ {{w} {x} {y} {abs_x} {abs_y} {layout}} {
# identify region requires at least tk 8.5.9
# identify row have scrollbar problems
  if { 0 != [catch {set region [$w identify region $x $y] }] } {
    if {[$w identify row $x $y] == "" } {
      set region "heading"
    } else {
      set region ""
    }
  }
  if { $region != "heading" } {
# if {[$w identify region $x $y] != "heading" }
    event generate $w <ButtonPress-1> -x $x -y $y
    foreach {idx ply} [split [$w selection] "_"] {}
    if {[info exist idx]} {
      if { [winfo exist $w.game_menu.merge] } { destroy $w.game_menu.merge }
      if { [winfo exist $w.game_menu.copy] } { destroy $w.game_menu.copy }
      $w.game_menu delete 0 end
      #LOAD/BROWSE/MERGE GAME
      $w.game_menu add command -label $::tr(LoadGame) \
         -command "::file::SwitchToBase $::glistBase($w) 0; ::game::Load $idx $ply"
      $w.game_menu add command -label $::tr(BrowseGame) \
         -command "::gbrowser::new $::glistBase($w) $idx $ply"
      $w.game_menu add command -label $::tr(MergeGame) \
         -command "mergeGame $::glistBase($w) $idx"
      menu $w.game_menu.merge
      menu $w.game_menu.copy
      for {set i 1} {$i <= [sc_base count total]} {incr i} {
        if { $i == $::glistBase($w) || [sc_base isReadOnly] } { continue }
        if {[sc_base inUse $i]} {
          set fname [file tail [sc_base filename $i]]
          $w.game_menu.merge add command -label "$i $fname" -command "::game::mergeInBase $::glistBase($w) $i $idx"
          $w.game_menu.copy add command -label "$i $fname" \
              -command "sc_base copygames $::glistBase($w) $idx $i; ::notify::DatabaseChanged 0"
        }
      }
      $w.game_menu add cascade -label $::tr(GlistMergeGameInBase) -menu $w.game_menu.merge
      #TODO: translate label
      $w.game_menu add cascade -label "Copy Game to" -menu $w.game_menu.copy

      #GOTO GAME
      $w.game_menu add separator
      #TODO: translate label
      $w.game_menu add checkbutton -variable ::glist_FindBar($layout) \
                   -label "Find Bar" -command "glist.showfindbar_ $w $layout"
      if {$::glistBase($w) == [sc_base current] && [sc_game number] != 0} {
        #TODO: translate label
        $w.game_menu add command -label "Find current game" -command "glist.findcurrentgame_ $w [sc_game number]"
      } else {
        #TODO: translate label
        $w.game_menu add command -label "Find current game" -state disabled
      }
      $w.game_menu add separator
      $w.game_menu add command -label $::tr(GlistRemoveGameAndAboveFromFilter) \
        -command "glist.removeFromFilter_ $w $idx -"
      $w.game_menu add command -label $::tr(GlistRemoveThisGameFromFilter) \
        -command "glist.removeFromFilter_ $w $idx"
      $w.game_menu add command -label $::tr(GlistRemoveGameAndBelowFromFilter) \
        -command "glist.removeFromFilter_ $w $idx +"
      $w.game_menu add separator
      #TODO: translate labels
      set dellabel "Delete game"
      if {[sc_base gameflag $::glistBase($w) $idx get del]} { set dellabel "Undelete game" }
      $w.game_menu add command -label $dellabel -command "glist.delflag_ $w $idx; $w selection set {};"
      tk_popup $w.game_menu $abs_x $abs_y
    }
  } else {
    set col [$w identify column $x $y]
    set col_idx [lsearch -exact $::glist_Headers [$w column $col -id] ]
    $w.header_menu delete 0 end

    #CHANGE ALIGNMENT
    set cur_a [lindex $::glist_ColAnchor($layout) $col_idx]
    if {$cur_a != "w"} {
      $w.header_menu add command -label $::tr(GlistAlignL) \
                     -command "$w column $col -anchor w; lset ::glist_ColAnchor($layout) $col_idx w"
    }
    if {$cur_a != "e"} {
      $w.header_menu add command -label $::tr(GlistAlignR) \
                     -command "$w column $col -anchor e; lset ::glist_ColAnchor($layout) $col_idx e"
    }
    if {$cur_a != "c"} {
      $w.header_menu add command -label $::tr(GlistAlignC) \
                     -command "$w column $col -anchor c; lset ::glist_ColAnchor($layout) $col_idx c"
    }

    #ADD/REMOVE COLUMN
    $w.header_menu add separator
    $w.header_menu.addcol delete 0 end
    set empty disabled
    set i 0
    foreach h $::glist_Headers {
      if {[lsearch -exact $::glist_ColOrder($layout) $i] == -1} {
        set empty normal
        $w.header_menu.addcol add command -label $::tr($h) -command "glist.insertcol_ $w $layout $i $col"
      }
      incr i
    }
    $w.header_menu add cascade -label $::tr(GlistAddField) -menu $w.header_menu.addcol -state $empty
    $w.header_menu add command -label $::tr(GlistDeleteField) -command "glist.removecol_ $w $layout $col"

    #BARS
    $w.header_menu add separator
    #TODO: translate label
    $w.header_menu add checkbutton -variable ::glist_FindBar($layout) \
                   -label "Find Bar" -command "glist.showfindbar_ $w $layout"

    tk_popup $w.header_menu $abs_x $abs_y
  }
}

# Sorting
proc glist.sortInit_ {w {layout}} {
  set ::glistSortStr($w) ""
  set i 0
  foreach {c dir} $::glist_Sort($layout) {
    set arrow_idx [expr $i *2]
    if {$dir == "-"} { incr arrow_idx }
    $w heading $c -image ::glist_Arrows($arrow_idx)
    append ::glistSortStr($w) [lindex $::glist_SortShortcuts $c] $dir
    incr i
  }
}

proc glist.sortClickHandle_ {{w} {x} {y} {layout} {clear 0}} {
  set col [$w identify column $x $y]
  set col_idx [lsearch -exact $::glist_Headers [$w column $col -id] ]
  if {"???" == [lindex $::glist_SortShortcuts $col_idx]} {
    # TODO: notify the user that the column cannot be used for sorting
    return
  }
  if {$clear} {
    foreach {c dir} $::glist_Sort($layout) { $w heading $c -image "" }
    set ::glist_Sort($layout) {}
  }

  set exists [lsearch -exact $::glist_Sort($layout) $col_idx ]
  if {$exists == -1} {
    lappend ::glist_Sort($layout) $col_idx -
  } else {
    incr exists
    if {[lindex $::glist_Sort($layout) $exists ] == "+"} {
      lset ::glist_Sort($layout) $exists {-}
    } else {
      lset ::glist_Sort($layout) $exists {+}
    }
  }

  glist.sortInit_ $w $layout
  if {[info exist ::glistBase($w)]} { glist.update_ $w $::glistBase($w) }
}

# Scrollbar
proc glist.ybar_ {w cmd {n 0} {units ""}} {
  if { $cmd == "-1" || $cmd == "+1" } {
    #MouseWheel
    set n [expr $cmd * $::glistVisibleLn($w) * 0.25]
    set units "units"
    set cmd scroll
  }
  if { $cmd == "scroll" || $cmd == "moveto"} {
    if {$cmd == "moveto"} {
      set ::glistFirst($w) [expr ceil($n * $::glistTotal($w))]
    } else {
      if {$units == "pages"} {
        set ::glistFirst($w) [expr $::glistFirst($w) + $n * ($::glistVisibleLn($w) -1)]
      } else {
        set ::glistFirst($w) [expr $::glistFirst($w) + $n]
      }
    }

    set d [expr $::glistTotal($w) - $::glistVisibleLn($w) +1]
    if {$::glistFirst($w) > $d } { set ::glistFirst($w) $d }
    if { $::glistFirst($w) < 0.0 } { set ::glistFirst($w) 0.0 }

    after cancel glist.loadvalues_ $w
    after idle glist.loadvalues_ $w
    glist.ybarupdate_ $w
  }
}

proc glist.ybarupdate_ {w} {
  if { $::glistLoaded($w) != $::glistTotal($w) } {
    set first [expr double($::glistFirst($w)) / $::glistTotal($w)]
    set last [expr double($::glistFirst($w) + $::glistVisibleLn($w)) / $::glistTotal($w)]
    eval $::glistYScroll($w) $first $last
  }
}

proc glist.yscroll_ {w first last} {
  if { $::glistLoaded($w) == $::glistTotal($w) } {
    eval $::glistYScroll($w) $first $last
  }
}

#Drag and drop and changes in column's layout
proc glist.insertcol_ {{w} {layout} {col} {after}} {
  set b [expr [string trimleft $after {#}]]
  set ::glist_ColOrder($layout) [linsert $::glist_ColOrder($layout) $b $col]
  $w configure -displaycolumns $::glist_ColOrder($layout)
}

proc glist.removecol_ {{w} {layout} {col}} {
  set d [expr [string trimleft $col {#}] -1]
  set ::glist_ColOrder($layout) [lreplace $::glist_ColOrder($layout) $d $d]
  $w configure -displaycolumns $::glist_ColOrder($layout)
}

proc glist.release_ {{w} {x} {y} {layout}} {
  switch $::ttk::treeview::State(pressMode) {
    resize {
      set col_id [$w column $::ttk::treeview::State(resizeColumn) -id]
      set i [lsearch -exact $::glist_Headers $col_id]
      if {$i != -1} {
        lset ::glist_ColWidth($layout) $i [$w column $::ttk::treeview::State(resizeColumn) -width]
      }
    }
    heading {
      lassign [$w identify $x $y] what
      if {$what == "heading"} {
        set new_col [$w identify column $x $y]
        set from [expr [string trimleft $::ttk::treeview::State(heading) {#}] -1]
        set to [expr [string trimleft $new_col {#}] -1]
        set val [lindex $::glist_ColOrder($layout) $from]
        if {$from != $to} {
          set ::glist_ColOrder($layout) [lreplace $::glist_ColOrder($layout) $from $from]
          set ::glist_ColOrder($layout) [linsert $::glist_ColOrder($layout) $to $val]
          $w configure -displaycolumns $::glist_ColOrder($layout)
        } else {
          glist.sortClickHandle_ $w $x $y $layout
        }
      }
    }
  }
  ttk::treeview::Release $w $x $y
}

image create bitmap ::glist_Arrows(0) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x10, 0x02,
       0x38, 0x07, 0x7c, 0x00, 0xfe, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(1) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xfe, 0x02,
       0x7c, 0x07, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(2) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x08, 0x01,
       0x9c, 0x07, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(3) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x7f, 0x01,
       0xbe, 0x07, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(4) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x08, 0x04,
       0x9c, 0x07, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(5) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0x7f, 0x04,
       0xbe, 0x03, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(6) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x80, 0x02, 0x88, 0x07,
       0x1c, 0x02, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(7) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x80, 0x02, 0xff, 0x07,
       0x3e, 0x02, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(8) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x07, 0x80, 0x00, 0x80, 0x03, 0x00, 0x04, 0x08, 0x04,
       0x9c, 0x03, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(9) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x07, 0x80, 0x00, 0x80, 0x03, 0x00, 0x04, 0x7f, 0x04,
       0xbe, 0x03, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(10) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x80, 0x00, 0x80, 0x03, 0x88, 0x04,
       0x1c, 0x07, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(11) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0x80, 0x00, 0x80, 0x07, 0xff, 0x04,
       0x3e, 0x03, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(12) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x07, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x08, 0x02,
       0x1c, 0x01, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(13) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x80, 0x07, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x7f, 0x02,
       0x3e, 0x01, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(14) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x80, 0x04, 0x00, 0x03, 0x88, 0x04,
       0x9c, 0x07, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(15) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x80, 0x04, 0x00, 0x03, 0xff, 0x04,
       0xbe, 0x07, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(16) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x80, 0x07, 0x00, 0x04, 0x08, 0x06,
       0x9c, 0x03, 0x3e, 0x00, 0x7f, 0x00, 0x00, 0x00 };
}
image create bitmap ::glist_Arrows(17) -foreground blue -data {
    #define arrows_width 12
    #define arrows_height 10
    static unsigned char arrows_bits[] = {
       0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x80, 0x07, 0x00, 0x04, 0x7f, 0x06,
       0xbe, 0x03, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 };
}

##########################################################################
############################################################
### PGN window

namespace eval pgn {
  ################################################################################
  #
  ################################################################################
  proc ChooseColor {type name} {
    global pgnColor
    set x [tk_chooseColor -initialcolor $pgnColor($type) -title "PGN $name color"]
    if {$x != ""} { set pgnColor($type) $x; ::pgn::ResetColors }
  }
  ################################################################################
  #
  ################################################################################
  proc ConfigMenus {{lang ""}} {
    if {! [winfo exists .pgnWin]} { return }
    if {$lang == ""} { set lang $::language }
    set m .pgnWin.menu
    foreach idx {0 1 2 3} tag {File Opt Color Help} {
      configMenuText $m $idx Pgn$tag $lang
    }
    foreach idx {0 1 3} tag {Copy Print Close} {
      configMenuText $m.file $idx PgnFile$tag $lang
    }
    foreach idx {0 1 2 3 4 5 6 7 8} tag {
      Color Short Symbols IndentC IndentV Space Column StripMarks BoldMainLine
    } {
      configMenuText $m.opt $idx PgnOpt$tag $lang
    }
    foreach idx {0 1 2 3 4 5} tag {Header Anno Comments Vars Background Current} {
      configMenuText $m.color $idx PgnColor$tag $lang
    }
    foreach idx {0 1} tag {Pgn Index} {
      configMenuText $m.helpmenu $idx PgnHelp$tag $lang
    }
  }

  proc PgnClipboardCopy {} {
      setLanguageTemp E
      set pgnStr [sc_game pgn -width 75 -indentComments $::pgn::indentComments \
          -indentVariations $::pgn::indentVars -space $::pgn::moveNumberSpaces]
      setLanguageTemp $::language
      
      set wt .tempFEN
      
      if {! [winfo exists $wt]} { text $wt }
      $wt delete 1.0 end
      $wt insert end $pgnStr sel
      clipboard clear
      clipboard append $pgnStr
      selection own $wt
      selection get
  }

  ################################################################################
  #
  ################################################################################
  proc OpenClose {} {
    global pgnWin pgnHeight pgnWidth pgnColor
    if {[winfo exists .pgnWin]} {
      focus .
      destroy .pgnWin
      set pgnWin 0
      return
    }
    
    set w .pgnWin
    
    ::createToplevel $w
    
    setWinLocation $w
    setWinSize $w
    bind $w <Configure> "recordWinSize $w"
    
    menu $w.menu
    ::setMenu $w $w.menu
    
    $w.menu add cascade -label PgnFile -menu $w.menu.file -underline 0
    $w.menu add cascade -label PgnOpt -menu $w.menu.opt -underline 0
    $w.menu add cascade -label PgnColor -menu $w.menu.color -underline 0
    $w.menu add cascade -label PgnHelp -menu $w.menu.helpmenu -underline 0
    foreach i {file opt color helpmenu} {
      menu $w.menu.$i -tearoff 0
    }
    
    $w.menu.file add command -label PgnFileCopy -accelerator "Ctrl+C" -command {::pgn::PgnClipboardCopy }
    bind $w <Control-c> {::pgn::PgnClipboardCopy}
    bind $w <Control-Insert> {::pgn::PgnClipboardCopy}
    
    $w.menu.file add command -label PgnFilePrint -command {
      set ftype {
        { "PGN files"  {".pgn"} }
        { "Text files" {".txt"} }
        { "All files"  {"*"}    }
      }
      set fname [tk_getSaveFile -initialdir [pwd] -filetypes $ftype -title "Save PGN file"]
      if {$fname != ""} {
        if {[file extension $fname] != ".txt" && [file extension $fname] != ".pgn" } {
          append fname ".pgn"
        }
        if {[catch {set tempfile [open $fname w]}]} {
          tk_messageBox -title "Scid: Error saving file" -type ok -icon warning \
              -message "Unable to save the file: $fname\n\n"
        } else {
          puts $tempfile \
              [sc_game pgn -width 75 -symbols $::pgn::symbolicNags \
              -indentVar $::pgn::indentVars -indentCom $::pgn::indentComments \
              -space $::pgn::moveNumberSpaces -format plain -column $::pgn::columnFormat \
              -markCodes $::pgn::stripMarks]
          close $tempfile
        }
      }
    }
    $w.menu.file add separator
    $w.menu.file add command -label PgnFileClose -accelerator Esc \
        -command "focus .; destroy $w"
    
    $w.menu.opt add checkbutton -label PgnOptColor \
        -variable ::pgn::showColor -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptShort \
        -variable ::pgn::shortHeader -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptSymbols \
        -variable ::pgn::symbolicNags -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptIndentC \
        -variable ::pgn::indentComments -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptIndentV \
        -variable ::pgn::indentVars -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptSpace \
        -variable ::pgn::moveNumberSpaces -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptColumn \
        -variable ::pgn::columnFormat -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptStripMarks \
        -variable ::pgn::stripMarks -command {updateBoard -pgn}
    $w.menu.opt add checkbutton -label PgnOptBoldMainLine \
        -variable ::pgn::boldMainLine -command {updateBoard -pgn}
    
    $w.menu.color add command -label PgnColorHeader \
        -command {::pgn::ChooseColor Header "header text"}
    $w.menu.color add command -label PgnColorAnno \
        -command {::pgn::ChooseColor Nag annotation}
    $w.menu.color add command -label PgnColorComments \
        -command {::pgn::ChooseColor Comment comment}
    $w.menu.color add command -label PgnColorVars \
        -command {::pgn::ChooseColor Var variation}
    $w.menu.color add command -label PgnColorBackground \
        -command {::pgn::ChooseColor Background background}
    $w.menu.color add command -label PgnColorCurrent -command {::pgn::ChooseColor Current current}

    $w.menu.helpmenu add command -label PgnHelpPgn \
        -accelerator F1 -command {helpWindow PGN}
    $w.menu.helpmenu add command -label PgnHelpIndex -command {helpWindow Index}
    
    ::pgn::ConfigMenus
    
    text $w.text -width $::winWidth($w) -height $::winHeight($w) -wrap word \
        -background $pgnColor(Background) -cursor crosshair \
        -yscrollcommand "$w.scroll set" -setgrid 1 -tabs {1c right 2c 4c}
    if { $::pgn::boldMainLine } {
      $w.text configure -font font_Bold
    }
    
    ttk::scrollbar $w.scroll -command "$w.text yview" -takefocus 0
    pack [ttk::frame $w.buttons] -side bottom -fill x
    pack $w.scroll -side right -fill y
    pack $w.text -fill both -expand yes
    ttk::button $w.buttons.help -textvar ::tr(Help) -command { helpWindow PGN }
    ttk::button $w.buttons.close -textvar ::tr(Close) -command { focus .; destroy .pgnWin }
    #pack $w.buttons.close $w.buttons.help -side right -padx 5 -pady 2
    set pgnWin 1
    bind $w <Destroy> { set pgnWin 0 }
    
    # Bind left button to close ctxt menu:
    bind $w <ButtonPress-1> {
      if {[winfo exists .pgnWin.text.ctxtMenu]} { destroy .pgnWin.text.ctxtMenu; focus .pgnWin }
    }
    
    bind $w <ButtonRelease-$::MB2> ::pgn::HideBoard

    # Bind right button to popup a contextual menu:
    bind $w <ButtonPress-$::MB3> "::pgn::contextMenu .pgnWin.text 5 %x %y %X %Y"
    
    # set the same arrow key, etc bindings that the main window has:
    bind $w <F1> { helpWindow PGN }
    bind $w <Home>  ::move::Start
    bind $w <Up>    {::move::Back 10}
    bind $w <Left>  ::move::Back
    bind $w <Down>  {::move::Forward 10}
    bind $w <Right> ::move::Forward
    bind $w <End>   ::move::End
    bind $w <Escape> {
      if {[winfo exists .pgnWin.text.ctxtMenu]} {
        destroy .pgnWin.text.ctxtMenu
        focus .pgnWin
      } else {
        focus .
        destroy .pgnWin
      }
    }
    standardShortcuts $w
    bindMouseWheel $w $w.text
    
    # Add variation navigation bindings:
    bind $w <KeyPress-v> [bind $::dot_w <KeyPress-v>]
    bind $w <KeyPress-z> [bind $::dot_w <KeyPress-z>]
    
    $w.text tag add Current 0.0 0.0
    ::pgn::ResetColors
    
    ::createToplevelFinalize $w
  }
  
  ################################################################################
  #
  ################################################################################
  proc contextMenu {win startLine x y xc yc} {
    
    update idletasks
    
    set mctxt $win.ctxtMenu
    if { [winfo exists $mctxt] } { destroy $mctxt }
    if {[sc_var level] == 0} {
      set state disabled
    } else  {
      set state normal
    }
	
    menu $mctxt

    menu $mctxt.evals1
    $mctxt.evals1 add command -label "Clear" -command {sc_pos addNag X; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "!" -command {sc_pos addNag ! ; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "?" -command {sc_pos addNag ? ; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "!?" -command {sc_pos addNag !? ; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "?!" -command {sc_pos addNag ?! ; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "!!" -command {sc_pos addNag !! ; ::pgn::Refresh 1}
    $mctxt.evals1 add command -label "??" -command {sc_pos addNag ?? ; ::pgn::Refresh 1}

    menu $mctxt.evals2
    $mctxt.evals2 add command -label "Clear" -command {sc_pos addNag Y ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "=" -command {sc_pos addNag = ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "~" -command {sc_pos addNag ~ ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "+=" -command {sc_pos addNag += ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "=+" -command {sc_pos addNag =+ ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "+/-" -command {sc_pos addNag +/- ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "-/+" -command {sc_pos addNag -/+ ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "+-" -command {sc_pos addNag +- ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "-+" -command {sc_pos addNag -+ ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "+--" -command {sc_pos addNag +-- ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "--+" -command {sc_pos addNag --+ ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "N" -command {sc_pos addNag N ; ::pgn::Refresh 1}
    $mctxt.evals2 add command -label "D" -command {sc_pos addNag D ; ::pgn::Refresh 1}
	
    $mctxt add command -label [tr EditDelete] -state $state -command "::pgn::deleteVar [sc_var number]"
    $mctxt add command -label [tr EditFirst] -state $state -command "::pgn::firstVar [sc_var number]"
    $mctxt add command -label [tr EditMain] -state $state -command "::pgn::mainVar [sc_var number]"
    $mctxt add separator
    $mctxt add command -label "[tr EditStrip]:[tr EditStripBegin]" -command {::game::TruncateBegin}
    $mctxt add command -label "[tr EditStrip]:[tr EditStripEnd]" -command {::game::Truncate}
    $mctxt add separator
    $mctxt add command -label "[tr EditStrip]:[tr EditStripComments]" -command {::game::Strip comments}
    $mctxt add command -label "[tr EditStrip]:[tr EditStripVars]" -command {::game::Strip variations}
    $mctxt add separator
    $mctxt add cascade -label "!  ?  ..." -menu $mctxt.evals1
    $mctxt add cascade -label "+-  +/-  ..." -menu $mctxt.evals2
    $mctxt add command -label "[tr WindowsComment]" -command {makeCommentWin}
    
    $mctxt post [winfo pointerx .] [winfo pointery .]
    
  }

  proc deleteVar { var } {
    sc_var exit
    sc_var delete $var
    updateBoard -pgn
  }
  
  proc firstVar { var } {
    sc_var exit
    sc_var first $var
    updateBoard -pgn
  }
  
  proc mainVar { var } {
    sc_var exit
    sc_var promote $var
    updateBoard -pgn
  }
  ################################################################################
  # ::pgn::ShowBoard:
  #    Produces a popup window showing the board position in the
  #    game at the current mouse location in the PGN window.
  #
  ################################################################################
  proc ShowBoard {win moveTag xc yc} {
    set offSet [sc_pos pgnOffset]
    sc_move pgn [string range $moveTag 2 end]
    set bd [sc_pos board]
    if {[::board::isFlipped .main.board]} {set bd [string reverse [lindex $bd 0]]}
    sc_move pgn $offSet

    set w .pgnPopup
    set psize 30
    if {$psize > $::boardSize} { set psize $::boardSize }
    
    if {! [winfo exists $w]} {
      toplevel $w -relief solid -borderwidth 2
      wm withdraw $w
      wm overrideredirect $w 1
      ::board::new $w.bd $psize
      pack $w.bd -side top -padx 2 -pady 2
      wm withdraw $w
    }
    
    ::board::update $w.bd $bd
    
    # Make sure the popup window can fit on the screen:
    incr xc 5
    incr yc 5
    update idletasks
    set dx [winfo width $w]
    set dy [winfo height $w]
    if {($xc+$dx) > [winfo screenwidth $w]} {
      set xc [expr {[winfo screenwidth $w] - $dx}]
    }
    if {($yc+$dy) > [winfo screenheight $w]} {
      set yc [expr {[winfo screenheight $w] - $dy}]
    }
    wm geometry $w "+$xc+$yc"
    wm deiconify $w
    raiseWin $w
  }
  
  ################################################################################
  # ::pgn::HideBoard
  #
  #    Hides the window produced by ::pgn::ShowBoard.
  #
  ################################################################################
  proc HideBoard {} {
    if {[winfo exists .pgnPopup]} {wm withdraw .pgnPopup}
  }
  
  ################################################################################
  # # ::pgn::ResetColors
  #
  #    Reconfigures the pgn Colors, after a color is changed by the user
  #
  ################################################################################
  proc ResetColors {} {
    global pgnColor
    if {![winfo exists .pgnWin]} { return }
    .pgnWin.text configure -background $pgnColor(Background)
    .pgnWin.text tag configure Current -background $pgnColor(Current)
    ::htext::init .pgnWin.text
    ::htext::updateRate .pgnWin.text 0
    ::pgn::Refresh 1
  }
  ################################################################################
  # ::pgn::Refresh
  #
  #    Updates the PGN window. If $pgnNeedsUpdate == 0, then the
  #    window text is not regenerated; only the current and next move
  #    tags will be updated.
  ################################################################################
  proc Refresh { {pgnNeedsUpdate 0} } {
    if {![winfo exists .pgnWin]} { return }

    if {$pgnNeedsUpdate} {
      busyCursor .
      set format plain
      if {$::pgn::showColor} {set format color}
      set pgnStr [sc_game pgn -symbols $::pgn::symbolicNags \
          -indentVar $::pgn::indentVars -indentCom $::pgn::indentComments \
          -space $::pgn::moveNumberSpaces -format $format -column $::pgn::columnFormat \
          -short $::pgn::shortHeader -markCodes $::pgn::stripMarks]

      set windowTitle [format $::tr(PgnWindowTitle) [sc_game number]]
      ::setTitle .pgnWin "$windowTitle"
      .pgnWin.text configure -state normal
      .pgnWin.text delete 1.0 end
      
      # Hide all information after the first **** encountered in order to hide tactics to user
      # This has the drawback to also hide the first moves when there is several markers ****
      if { $::tactics::findBestMoveRunning } {
        set idx [ string first "****"  $pgnStr ]
        if { $idx != -1 } {
          set pgnStr "[ string range $pgnStr 0 [expr $idx + 3] ]</c>\n"
        }
      }

      if {$::pgn::showColor} {
        ::htext::display .pgnWin.text $pgnStr
      } else {
        .pgnWin.text insert 1.0 $pgnStr
      }
      .pgnWin.text configure -state disabled
      unbusyCursor .
    }

    if {$::pgn::showColor} {
      set offset [sc_pos pgnOffset]
      .pgnWin.text tag remove Current 1.0 end
      set moveRange [.pgnWin.text tag nextrange "m_$offset" 1.0]
      if {[llength $moveRange] == 2} {
        .pgnWin.text tag add Current [lindex $moveRange 0] [lindex $moveRange 1]
        .pgnWin.text see [lindex $moveRange 1]
      } else {
        .pgnWin.text yview moveto 0
      }
    }
  }
  ################################################################################
  #
  ################################################################################
  
}
###
### book.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
######################################################################
### Book window

namespace eval book {
  set isOpen 0
  set isReadonly 0
  set bookList ""
  set bookPath ""
  set currentBook "" ; # book in form abc.bin
  set currentTuningBook ""
  set bookMoves ""
  set cancelBookExport 0
  set exportCount 0
  set exportMax 3000
  set hashList ""
  set bookSlot 0
  set bookTuningSlot 2
  set oppMovesVisible 0
  
  
  ################################################################################
  # open a book, closing any previously opened one (called by annotation analysis)
  # arg name : gm2600.bin for example
  ################################################################################
  proc scBookOpen { name slot } {
    if {$slot == $::book::bookSlot} {
      if {$::book::currentBook != ""} {
        sc_book close $::book::bookSlot
      }
      set ::book::currentBook $name
    }
    if {$slot == $::book::bookTuningSlot} {
      if {$::book::currentTuningBook != ""} {
        sc_book close $::book::bookTuningSlot
      }
      set ::book::currentTuningBook $name
    }
    
    set bn [ file join $::scidBooksDir $name ]
    set ::book::isReadonly [sc_book load $bn $slot]
  }
  
  ################################################################################
  # Return a move in book for position fen. If there is no move in book, returns ""
  # Is used by engines, not book windows
  ################################################################################
  proc getMove { book fen slot} {
    set tprob 0
    ::book::scBookOpen $book $slot
    set bookmoves [sc_book moves $slot]
    if {[llength $bookmoves] == 0} {
      return ""
    }
    set r [expr {(int (rand() * 100))} ]
    for {set i 0} {$i<[llength $bookmoves]} {incr i 2} {
      set m [lindex $bookmoves $i]
      set prob [string range [lindex $bookmoves [expr $i + 1] ] 0 end-1 ]
      incr tprob $prob
      if { $tprob >= $r } {
        break
      }
    }
    sc_book close $slot
    return $m
  }
  
  ################################################################################
  #  Show moves leading to book positions
  ################################################################################
  proc togglePositionsDisplay {} {
    global ::book::oppMovesVisible
    if { $::book::oppMovesVisible == 0} {
      set ::book::oppMovesVisible 1
      pack .bookWin.f.text1 -expand yes -fill both
    } else {
      set ::book::oppMovesVisible 0
      pack forget .bookWin.f.text1
    }
  }
  
  ################################################################################
  #  Open a window to select book and display book moves
  # arg name : gm2600.bin for example
  ################################################################################
  proc open { {name ""} } {
    global ::book::bookList ::book::bookPath ::book::currentBook ::book::isOpen ::book::lastBook
    
    set w .bookWin
    
    if {[winfo exists $w]} { return }
    
    set ::book::isOpen 1
    
    ::createToplevel $w
    ::setTitle $w $::tr(Book)
    wm resizable $w 0 1
    
    setWinLocation $w
    bind $w <Configure> "recordWinSize $w"
    bind $w <F1> { helpWindow Book }
    
    ttk::frame $w.f
    
    # load book names
    if { $name == "" && $lastBook != "" } {
      set name $lastBook
    }
    set bookPath $::scidBooksDir
    set bookList [  lsort -dictionary [ glob -nocomplain -directory $bookPath *.bin ] ]
    
    # No book found
    if { [llength $bookList] == 0 } {
      tk_messageBox -title "Scid" -type ok -icon error -message "No books found. Check books directory"
      set ::book::isOpen 0
      set ::book::currentBook ""
      destroy $w
      ::docking::cleanup $w
      return
    }
    
    set i 0
    set idx 0
    set tmp {}
    foreach file  $bookList {
      set f [ file tail $file ]
      lappend tmp $f
      if {$name == $f} {
        set idx $i
      }
      incr i
    }
    ttk::combobox $w.f.combo -width 12 -values $tmp
    
    catch { $w.f.combo current $idx }
    pack $w.f.combo
    
    # text displaying book moves
    frame $w.f.fscroll
    autoscrollframe -bars y $w.f.fscroll text $w.f.text -wrap word -state disabled -width 12
    
    ttk::button $w.f.b -text $::tr(OtherBookMoves)  -command { ::book::togglePositionsDisplay }
    ::utils::tooltip::Set $w.f.b $::tr(OtherBookMovesTooltip)
    
    text $w.f.text1 -wrap word -state disabled -width 12
    
    pack $w.f.fscroll -expand yes -fill both
    pack $w.f.b
    pack $w.f.text1 -expand yes -fill both
    
    pack $w.f -expand 1 -fill both
    
    bind $w.f.combo <<ComboboxSelected>> ::book::bookSelect
    bind $w <Destroy> "::book::closeMainBook ; ::docking::cleanup $w"
    bind $w <Escape> { destroy  .bookWin }
    # we make a redundant check here, another one is done a few line above
    if { [catch {bookSelect} ] } {
      tk_messageBox -title "Scid" -type ok -icon error -message "No books found. Check books directory"
      set ::book::isOpen 0
      set ::book::currentBook ""
      destroy  .bookWin
    }
  }
  ################################################################################
  #
  ################################################################################
  proc closeMainBook {} {
    if { $::book::currentBook == "" } { return }
    focus .
    sc_book close $::book::bookSlot
    set ::book::isOpen 0
    set ::book::currentBook ""
  }
  ################################################################################
  #   updates book display when board changes
  ################################################################################
  proc refresh {} {
    global ::book::bookMoves
    
    foreach t [.bookWin.f.text tag names] {
      if { [string match "bookMove*" $t] } {
        .bookWin.f.text tag delete $t
      }
    }
    foreach t [.bookWin.f.text1 tag names] {
      if { [string match "bookMove*" $t] } {
        .bookWin.f.text1 tag delete $t
      }
    }
    set bookMoves [sc_book moves $::book::bookSlot]
    .bookWin.f.text configure -state normal
    .bookWin.f.text delete 1.0 end
    for {set i 0} {$i<[llength $bookMoves]} {incr i 2} {
      set line [expr $i /2 +1]
      set m ""
      append m [::trans [lindex $bookMoves $i]] "\t" [lindex $bookMoves [expr $i + 1] ] "\n"
      .bookWin.f.text insert end $m
      .bookWin.f.text tag add bookMove$line $line.0 $line.end
      .bookWin.f.text tag bind bookMove$line <ButtonPress-1> "::book::makeBookMove [lindex $bookMoves $i]"
    }
    .bookWin.f.text configure -state disabled -height [expr [llength $bookMoves] / 2 ]
    
    
    set oppBookMoves [sc_book positions $::book::bookSlot]
    .bookWin.f.text1 configure -state normal
    .bookWin.f.text1 delete 1.0 end
    for {set i 0} {$i<[llength $oppBookMoves]} {incr i 1} {
      set line [expr $i +1]
      set m ""
      append m [::trans [lindex $oppBookMoves $i]]  "\n"
      .bookWin.f.text1 insert end $m
      .bookWin.f.text1 tag add bookMove$line $line.0 $line.end
      .bookWin.f.text1 tag bind bookMove$line <ButtonPress-1> "::book::makeBookMove [lindex $oppBookMoves $i]"
    }
    .bookWin.f.text1 configure -state disabled -height [llength $oppBookMoves]
    if { $::book::oppMovesVisible == 0 } {
      pack forget .bookWin.f.text1
    }
  }
  ################################################################################
  #
  ################################################################################
  proc makeBookMove { move } {
    set action "replace"
    if {![sc_pos isAt vend]} { set action [confirmReplaceMove] }
    if {$action == "replace"} {
      sc_move addSan $move
    } elseif {$action == "var"} {
      sc_var create
      sc_move addSan $move
    } elseif {$action == "mainline"} {
      sc_var create
      sc_move addSan $move
      sc_var exit
      sc_var promote [expr {[sc_var count] - 1}]
      sc_move forward 1
    }
    updateBoard -pgn -animate
    ::utils::sound::AnnounceNewMove $move
    if {$action == "replace"} { ::tree::doTraining }
  }
  ################################################################################
  #
  ################################################################################
  proc bookSelect { { n "" }  { v  0} } {
    set ::book::lastBook [.bookWin.f.combo get]
    scBookOpen [.bookWin.f.combo get] $::book::bookSlot
    refresh
  }
  ################################################################################
  #
  ################################################################################
  proc tuning { {name ""} } {
    global ::book::bookList ::book::bookPath ::book::currentBook ::book::isOpen
    
    set w .bookTuningWin
    
    if {[winfo exists $w]} {
      return
    }
    
    ::createToplevel $w
    ::setTitle $w $::tr(Book)
    # wm resizable $w 0 0
    
    bind $w <F1> { helpWindow BookTuningWindow }
    setWinLocation $w
    
    ttk::frame $w.fcombo
    ttk::frame $w.f
    # load book names
    set bookPath $::scidBooksDir
    set bookList [  lsort -dictionary [ glob -nocomplain -directory $bookPath *.bin ] ]
    
    # No book found
    if { [llength $bookList] == 0 } {
      tk_messageBox -title "Scid" -type ok -icon error -message "No books found. Check books directory"
      set ::book::isOpen 0
      set ::book::currentBook ""
      destroy $w
      ::docking::cleanup $w
      return
    }
    
    set i 0
    set idx 0
    set tmp {}
    foreach file  $bookList {
      set f [ file tail $file ]
      lappend tmp $f
      if {$name == $f} {
        set idx $i
      }
      incr i
    }
    
    ttk::combobox $w.fcombo.combo -width 12 -values $tmp
    catch { $w.fcombo.combo current $idx }
    pack $w.fcombo.combo -expand yes -fill x
    
    ttk::frame $w.fbutton
    
    
    menubutton $w.fbutton.mbAdd -text $::tr(AddMove) -menu $w.fbutton.mbAdd.otherMoves
    menu $w.fbutton.mbAdd.otherMoves
    
    
    ttk::button $w.fbutton.bExport -text $::tr(Export) -command ::book::export
    ttk::button $w.fbutton.bSave -text $::tr(Save) -command ::book::save
    
    pack $w.fbutton.mbAdd $w.fbutton.bExport $w.fbutton.bSave -side top -fill x -expand yes
    
    
    pack $w.fcombo $w.f $w.fbutton -side top
    
    bind $w.fcombo.combo <<ComboboxSelected>> ::book::bookTuningSelect
    
    bind $w <Destroy> "::book::closeTuningBook  ; ::docking::cleanup $w"
    bind $w <Escape> { destroy  .bookTuningWin }
    bind $w <F1> { helpWindow BookTuning }
    
    bookTuningSelect
    
  }
  ################################################################################
  #
  ################################################################################
  proc closeTuningBook {} {
    if { $::book::currentTuningBook == "" } { return }
    focus .
    sc_book close $::book::bookTuningSlot
    set ::book::currentTuningBook ""
  }
  ################################################################################
  #
  ################################################################################
  proc bookTuningSelect { { n "" }  { v  0} } {
    set w .bookTuningWin
    scBookOpen [.bookTuningWin.fcombo.combo get] $::book::bookTuningSlot
    if { $::book::isReadonly > 0 } {
      $w.fbutton.bSave configure -state disabled
    } else {
      $w.fbutton.bSave configure -state normal
    }
    refreshTuning
  }
  ################################################################################
  #   add a move to displayed bookmoves
  ################################################################################
  proc addBookMove { move } {
    global ::book::bookTuningMoves
    
    if { $::book::isReadonly > 0 } { return }
    
    set w .bookTuningWin
    set children [winfo children $w.f]
    set count [expr [llength $children] / 2]
    ttk::label $w.f.m$count -text [::trans $move]
    bind $w.f.m$count <ButtonPress-1> " ::book::makeBookMove $move"
    spinbox $w.f.sp$count -from 0 -to 100 -width 3
    $w.f.sp$count set 0
    grid $w.f.m$count -row $count -column 0 -sticky w
    grid $w.f.sp$count -row $count -column 1 -sticky w
    $w.fbutton.mbAdd.otherMoves delete [::trans $move]
    lappend ::book::bookTuningMoves $move
  }
  ################################################################################
  #   updates book display when board changes
  ################################################################################
  proc refreshTuning {} {
    
    if { $::book::isReadonly > 0 } { return }
    
    #unfortunately we need this as the moves on the widgets are translated
    #and widgets have no clientdata in tcl/tk
    global ::book::bookTuningMoves
    set ::book::bookTuningMoves {}
    set moves [sc_book moves $::book::bookTuningSlot]
    
    set w .bookTuningWin
    bind $w <Destroy> "" ;# avoid the closing of the book
    # erase previous children
    set children [winfo children $w.f]
    foreach c $children {
      destroy $c
    }
    
    set row 0
    for {set i 0} {$i<[llength $moves]} {incr i 2} {
      lappend ::book::bookTuningMoves [lindex $moves $i]
      label $w.f.m$row -text [::trans [lindex $moves $i]]
      bind $w.f.m$row <ButtonPress-1> " ::book::makeBookMove [lindex $moves $i] "
      spinbox $w.f.sp$row -from 0 -to 100 -width 3
      set pct [lindex $moves [expr $i+1] ]
      set value [string replace $pct end end ""]
      $w.f.sp$row set $value
      grid $w.f.m$row -row $row -column 0 -sticky w
      grid $w.f.sp$row -row $row -column 1 -sticky w
      incr row
    }
    # load legal moves
    $w.fbutton.mbAdd.otherMoves delete 0 end
    $w.fbutton.mbAdd.otherMoves add command -label $::tr(None)
    set moveList [ sc_pos moves ]
    foreach move $moveList {
      if { [ lsearch  $moves $move ] == -1 } {
        $w.fbutton.mbAdd.otherMoves add command -label [::trans $move] -command "::book::addBookMove $move"
      }
    }
    bind $w <Destroy> "::book::closeTuningBook  ; ::docking::cleanup $w"
  }
  ################################################################################
  # sends to book the list of moves and probabilities.
  ################################################################################
  proc save {} {
    global ::book::bookTuningMoves
    if { $::book::isReadonly > 0 } { return }
    
    set prob {}
    set w .bookTuningWin
    set children [winfo children $w.f]
    set count [expr [llength $children] / 2]
    for {set row 0} {$row < $count} {incr row} {
      lappend prob [$w.f.sp$row get]
    }
    set tempfile [file join $::scidUserDir tempfile.[pid]]
    sc_book movesupdate $::book::bookTuningMoves $prob $::book::bookTuningSlot $tempfile
    file delete $tempfile
    if {  [ winfo exists .bookWin ] } {
      ::book::refresh
    }
  }
  ################################################################################
  #
  ################################################################################
  proc export {} {
    ::windows::gamelist::Refresh
    updateTitle
    progressWindow "Scid" "ExportingBook..." $::tr(Cancel) "::book::sc_progressBar"
    set ::book::cancelBookExport 0
    set ::book::exportCount 0
    ::book::book2pgn
    set ::book::hashList ""
    closeProgressWindow
    if { $::book::exportCount >= $::book::exportMax } {
      tk_messageBox -title "Scid" -type ok -icon info \
          -message "$::tr(Movesloaded)  $::book::exportCount\n$::tr(BookPartiallyLoaded)"
    } else  {
      tk_messageBox -title "Scid" -type ok -icon info -message "$::tr(Movesloaded)  $::book::exportCount"
    }
    updateBoard -pgn
  }
  
  ################################################################################
  #
  ################################################################################
  proc book2pgn { } {
    global ::book::hashList
    
    if {$::book::cancelBookExport} { return  }
    if { $::book::exportCount >= $::book::exportMax } {
      return
    }
    set hash [sc_pos hash]
    if {[lsearch -sorted -integer -exact $hashList $hash] != -1} {
      return
    } else  {
      lappend hashList $hash
      set hashList [lsort -integer -unique $hashList]
    }
    
    updateBoard -pgn
    
    set bookMoves [sc_book moves $::book::bookTuningSlot]
    incr ::book::exportCount
    if {[expr $::book::exportCount % 50] == 0} {
      updateProgressWindow $::book::exportCount $::book::exportMax
      update
    }
    if {[llength $bookMoves] == 0} { return }
    
    for {set i 0} {$i<[llength $bookMoves]} {incr i 2} {
      set move [lindex $bookMoves $i]
      if {$i == 0} {
        sc_move addSan $move
        book2pgn
        sc_move back
      } else  {
        sc_var create
        sc_move addSan $move
        book2pgn
        sc_var exit
      }
    }
    
  }
  ################################################################################
  # cancel book export
  ################################################################################
  proc sc_progressBar {} {
    set ::book::cancelBookExport 1
  }
}
###
### End of file: book.tcl
###
############################################################
### Comment Editor window

namespace eval ::commenteditor {
  
  namespace export open close update storeComment addNag
  
  # List of colors and types used to mark a square
  
  variable  colorList {}  markTypeList {}
  lappend   colorList red orange yellow   \
      green blue darkBlue \
      purple white black
  # Each list is a set of buttons in the dialog menu:
  lappend   markTypeList [list full circle disk x + - = ? !]
  lappend   markTypeList [list 1 2 3 4 5 6 7 8 9]
  
  # IO state of the comment editor
  variable  State
  array set State [list isOpen 0 \
      markColor red  markType full  text "" \
      pending ""]
  
  proc addMark {args} {eval ::board::mark::add $args}
  proc delMark {args} {eval ::board::mark::remove $args}
}

proc ::commenteditor::addNag {nag} {
  if {![winfo exists .commentWin]} { return }
  .commentWin.nf.tf.text insert end "$nag  "
  ::commenteditor::storeComment
  ::pgn::Refresh 1
}

proc makeCommentWin {} {
  if {[winfo exists .commentWin]} {
    # ::commenteditor::close
    focus .
    destroy .commentWin
  } else {
    ::commenteditor::Open
  }
}

proc ::commenteditor::toggleboard { } {
  if {$::commenteditor::showboard == 1} {
     pack forget .commentWin.markFrame 
	  set ::commenteditor::showboard 0
  } else { 
	  pack .commentWin.markFrame -fill both -expand 1 -padx 1 -anchor n -before .commentWin.nf -side left
	  set ::commenteditor::showboard 1
  }
}

# ::commenteditor::Open --
#
proc ::commenteditor::Open {} {
  global commentWin highcolor helpMessage
  variable colorList
  variable markTypeList
  variable State
  
  set commentWin 1
  set State(isOpen) 1
  if {[winfo exists .commentWin]} {
    focus .commentWin.cf.text
    return
  }
  set w .commentWin
  ::createToplevel $w
  setWinLocation $w
  
  set mark [ttk::frame $w.markFrame]
  if {$::commenteditor::showboard == 1} { pack $mark -side left -fill both -expand 1 -padx 1 -anchor n }
  
  # Comment frame:
  ttk::frame $w.cf
  text $w.cf.text -width $::winWidth($w) -height $::winHeight($w) -background white -wrap word -font font_Regular \
      -yscrollcommand ".commentWin.cf.scroll set" -setgrid 1
  ttk::scrollbar $w.cf.scroll -command ".commentWin.cf.text yview"
  ttk::label $w.cf.label -font font_Bold -textvar ::tr(Comment)
  bindFocusColors $w.cf.text
  bind $w.cf.text <Alt-KeyRelease-c> { .commentWin.b.close invoke }
  bind $w.cf.text <Alt-KeyRelease-s> { .commentWin.b.store invoke }

  bind $w.cf.text <FocusOut> { ::commenteditor::storeComment }
  bind $w <Control-a> {::commenteditor::storeComment; sc_var create; updateBoard -pgn}
  bind $w.cf.text <Alt-Left>  {::commenteditor::storeComment; ::move::Back}
  bind $w.cf.text <Alt-Right> {::commenteditor::storeComment; ::move::Forward}
  # switch to the NAG entry
  bind $w.cf.text <Alt-n> { focus .commentWin.nf.tf.text }

  bind $w.cf.text <Alt-b> { ::commenteditor::toggleboard }
  
  # NAG frame:
  ttk::frame $w.nf -width 100
  ttk::frame $w.nf.tf
  ttk::entry $w.nf.tf.text -width 20 -background white
  bindFocusColors $w.nf.tf.text
  bind $w.nf.tf.text <Alt-KeyRelease-c> { .commentWin.b.close invoke }
  # switch to the edit frame
  bind $w.nf.tf.text <Alt-n> { focus .commentWin.cf.text }
  
  set nagbox $w.nf.tf.text
  set nagbuttons $w.nf.b
  ttk::frame $w.nf.b
  set i 0
  set row 0
  set column 0
  foreach {nag description} {
    ! GoodMove
    ? PoorMove
    !! ExcellentMove
    ?? Blunder
    !? InterestingMove
    ?! DubiousMove
    +-- WhiteCrushing
    --+ BlackCrushing
    +- WhiteDecisiveAdvantage
    -+ BlackDecisiveAdvantage
    +/- WhiteClearAdvantage
    -/+ BlackClearAdvantage
    += WhiteSlightAdvantage
    =+ BlackSlightAdvantage
    = Equality
    ~ Unclear
    N Novelty
    D Diagram
  } {
    ttk::button $nagbuttons.b$i -takefocus 0 -text "$nag" -width 2 -command [namespace code [list addNag "$nag"]]
    # set helpMessage(E,$nagbuttons.b$i) $description
    ::utils::tooltip::Set $nagbuttons.b$i $description
    grid $nagbuttons.b$i -row [expr {$i % 2}] -column [expr {int($i / 2)}] -padx 2 -pady 2
    incr i
  }
  
  ttk::label $w.nf.label -font font_Bold -textvar ::tr(AnnotationSymbols)
  pack $w.nf -side top -pady 1 -expand 0 
  #addHorizontalRule $w
  
  ttk::button $w.nf.tf.clear -textvar ::tr(Clear) -command {
    .commentWin.nf.tf.text delete 0 end
    ::commenteditor::storeComment
    ::pgn::Refresh 1
    updateBoard
  }
  set helpMessage(E,$w.nf.tf.clear) {Clear all symbols for this move}
  pack $w.nf.label -side top -expand 0
  pack $w.nf.tf -side top
  pack $w.nf.tf.text -side left
  pack $w.nf.tf.clear -side right -padx 20 -pady 5
  pack $w.nf.b -side top
  
  ttk::frame $w.b
  pack $w.b -side bottom -ipady 4 -expand 0 -padx 1
  
  pack $w.cf -side top -expand 1 -fill both 
  pack $w.cf.label -side top -pady 2
  pack $w.cf.scroll -side right -fill y
  pack $w.cf.text -side right -expand 1 -fill both
  
  # Main buttons:

  ttk::button $w.b.showboard -image tb_coords -command { ::commenteditor::toggleboard }
  
  dialogbutton $w.b.clear -textvar ::tr(Clear) -command [namespace code [list ClearComments .commentWin]]
  set helpMessage(E,$w.b.clear) {Clear this comment}
  dialogbutton $w.b.revert -textvar ::tr(Revert) -command ::commenteditor::Refresh
  set helpMessage(E,$w.b.revert) {Revert to the stored comment}
  dialogbutton $w.b.store -textvar ::tr(Store) -command [namespace code {storeComment; ::pgn::Refresh 1; updateBoard}]
  set helpMessage(E,$w.b.store) {Store this comment in the game}
  ttk::frame $w.b.space -width 10
  dialogbutton $w.b.close -textvar ::tr(Close) -command { focus .; destroy .commentWin}
  set helpMessage(E,$w.b.close) {Close the comment editor window}
  
  pack $w.b.close $w.b.space $w.b.store $w.b.revert $w.b.clear $w.b.showboard -side right -padx 1
  
  ### Insert-mark frame
  
  ttk::label $mark.header -font font_Bold -text $::tr(InsertMark:)
  pack $mark.header -side top -ipady 1 -fill x -padx 1
  
  # pack [ttk::frame $mark.usage] -side bottom -pady 1 -expand true
  # pack [ttk::label $mark.usage.text -text [string trim $::tr(InsertMarkHelp)] -justify left]
  ::utils::tooltip::Set $mark.header [string trim $::tr(InsertMarkHelp)]
  
  # Subframes for insert board and two button rows:

  pack [ttk::frame [set colorButtons $mark.colorButtons]] -side top -pady 1 -anchor n
  pack [ttk::frame [set insertBoard $mark.insertBoard]] -side top -pady 1
  pack [ttk::frame [set typeButtons $mark.typeButtons]] -side top -pady 1 -anchor s

  # Left subframe: color (radio)buttons
  foreach color $colorList {
    image create photo markColor_$color -width 18 -height 18
    markColor_$color put $color -to 1 1 16 16
    radiobutton $colorButtons.c$color -image markColor_$color -variable [namespace current]::State(markColor) \
        -value $color -takefocus 0 -command [namespace code [list SetMarkColor $color]] -indicatoron 0
    pack $colorButtons.c$color -side left -padx 0 -pady 3
  }
  
  # Central subframe: a small board
  set board [::board::new $insertBoard.board 25]
  ::board::showMarks $board 1
  set ::board::_mark($board) $::board::_mark(.main.board)
  ::board::update $board
  pack $board -side top
  for {set square 0} {$square < 64} {incr square} {
    ::board::bind $board $square <ButtonPress-1> [namespace code [list InsertMark $board $square]]
    ::board::bind $board $square <ButtonRelease-1> [namespace code [list ButtonReleased $board %b %X %Y]]
    ::board::bind $board $square <ButtonPress-$::MB3> [namespace code [list InsertMark $board [expr {$square + 64}]]]
  }
  
  # Right subframe: type/shape (pseudo-radio)buttons
  set size 20	;# button/rectangle size
  pack [set types [ttk::frame $typeButtons.all]] -side left -padx 10
  set row 0
  foreach buttons $markTypeList {
    set column 0
    foreach shape $buttons {
      set color [::board::defaultColor [expr {($column + $row) % 2}]]
      # Create and draw a button:
      set button [ttk::frame $types.button_${shape} -class PseudoButton]
      grid $button -row $row -column $column -padx 1 -pady 1
      # The "board" is a 1x1 board, containing one single square.
      set board1x1 [canvas $button.bd -height $size -width $size -highlightthickness 0 -borderwidth 1 -relief raised]
      $board1x1 create rectangle 0 0 $size $size -fill $color -outline "" -tag [list sq0 button${shape}]
      ::board::mark::add $types.button_${shape} $shape 0 $State(markColor) "false"
      pack $board1x1
      bind $board1x1 <Button-1> [namespace code [list SetMarkType $board $shape]]
      incr column
    } ;# foreach shape
    incr row
  } ;# foreach button_line
  # "Press" button:
  SetMarkType $board $State(markType)

  # Add bindings at the end, especially <Configure>
  bind $w <F1> {helpWindow Comment}
  bind $w <Control-n> {helpWindow NAGs}
  bind $w <Destroy> [namespace code {set commentWin 0; set State(isOpen) 0}]
  bind $w <Configure> "recordWinSize $w"

  ### Start editing
  ::setTitle $w "Scid: [tr {Comment editor}]"
  wm iconname $w "Scid: [tr {Comment editor}]"
  ::commenteditor::Refresh
  focus $w.cf.text
  ::createToplevelFinalize $w
}

# ::commenteditor::SetMarkColor --
#
#	Called when a color is selected.
#
# Arguments:
#	color	The selected color.
# Results:
#	TODO
#
proc ::commenteditor::SetMarkColor {color} {
  variable   markTypeList
  variable   State
  set path   .commentWin.markFrame.typeButtons.all
  set square 0	;# square number of a 1x1-board
  foreach buttons $markTypeList {
    foreach shape $buttons {
      set button $path.button_${shape}
      if {$shape == "square"} {
        $button.bd itemconfigure sq$square \
            -fill $color -outline $color
      } else {
        $button.bd delete mark
        addMark $button $shape $square $color "false"
      }
    }
  }
  set State(markColor) $color
}

# ::commenteditor::SetMarkType --
#
# Arguments:
#	board	The frame variable of the board.
#	type	The selected type/shape, e.g. "circle", "1", etc.
# Results:
#	TODO
#
proc ::commenteditor::SetMarkType {board type} {
  variable State
  set cur_type $State(markType)
  set path .commentWin.markFrame.typeButtons.all
  $path.button_${cur_type}.bd configure -relief raised
  $path.button_${type}.bd configure -relief sunken
  set State(markType) $type
}

# ::commenteditor::InsertMark --
#
#	Called when a square is selected on the insert board.
#
# Arguments:
#	board	The frame variable of the board.
#	from	Number (0-63) of the selected square
#		(+64 if right mouse button used).
#	to	Number of destination square (0-63) if an
#		arrow is to be drawn (+64 if right mouse button).
# Results:
#	TODO
#
proc ::commenteditor::InsertMark {board square} {
  variable State
  set textwin .commentWin.cf.text
  if {![string length $State(pending)]} {
    set State(pending) $square
    return
  }
  # Right mouse click results in square-no + 64:
  set from [expr {$State(pending) % 64}]
  set to   [expr {$square         % 64}]
  
  set key $::board::mark::Command
  array set tag [list remove 0 value {}]
  if {$square == $State(pending)} {
    if {$square >= 64} { return }
    if {[lsearch [$textwin tag names] $square] >= 0} {
      array set tag [list remove 1 value $square]
      delMark $board $square
    } else {
      set tag(value) $square
      addMark $board $State(markType) $square $State(markColor)
      set to [::board::san $square]
      set State(text) "\[%$key $State(markType),$to,$State(markColor)\]"
    }
  } else {
    if {($square & 64) != ($State(pending) & 64)} {
      if {$square < 64} { set State(pending) $square }
      return
    }
    if {[lsearch [$textwin tag names] ${from}:${to}] >= 0} {
      set tag(remove) 1
      set tag(value)  [list ${from}:${to} ${to}:${from}]
      delMark $board $from $to
    } else {
      set tag(value) [list ${from}:${to} ${to}:${from}]
      addMark $board arrow $from $to $State(markColor)
      set from [::board::san $from]
      set to   [::board::san $to]
      set State(text) "\[%$key arrow,$from,$to,$State(markColor)\]"
    }
  }
  set State(pending) ""
  
  if {$tag(remove)} {
    set remove [lindex $tag(value) 0]
    if [llength [$textwin tag range $remove]] {
      $textwin delete $remove.first $remove.last
    }
    eval $textwin tag delete $tag(value)
  } else {
    $textwin insert insert $State(text) $tag(value)
  }
}

# ::commenteditor::ClearComments --
#
#	Called when the 'Clear' button is pressed.
#
# Arguments:
#	win	The window variable.
# Results:
#	Clears text area and chess board of the comment editor.
#
proc ::commenteditor::ClearComments {win} {
  ${win}.cf.text delete 0.0 end
  set board ${win}.markFrame.insertBoard.board
  ::board::setmarks $board ""
  ::board::update $board
}

# ::commenteditor::ButtonReleased --
#
#	Auxiliary routine:
#	Called when a button is released over a square.
#
# Arguments:
#	board	The frame variable of the board.
#	button	The number (%b) of the button that was released.
#	x_root	The x-coodinate (%X) from the event.
#	y_root	The y-coodinate (%Y) from the event.
# Results:
#
proc ::commenteditor::ButtonReleased {board button x_root y_root} {
  set square [::board::getSquare $board $x_root $y_root]
  if {$square < 0}  {
    set $State(pending) ""
    return
  }
  if {$button != 1} {set square [expr {$square + 64}]}
  InsertMark $board $square
}

# ::commenteditor::storeComment --
#
#	Set the comment of the current position to
#	the text of the commenteditor.
#
proc ::commenteditor::storeComment {} {
  if {![winfo exists .commentWin]} { return }
  set nag [sc_pos getNags]
  if {$nag == "0"} { set nag "" }
  if { $nag != [.commentWin.nf.tf.text get] } {
    sc_pos clearNags
    foreach i [split [.commentWin.nf.tf.text get] " "] {
      sc_pos addNag $i
    }
  }
  
  # The "end-1c" below is because Tk adds a newline to text contents:
  set newComment [.commentWin.cf.text get 1.0 end-1c]
  set oldComment [sc_pos getComment]
  if {[string compare $oldComment $newComment]} {
    sc_pos setComment $newComment
    updateStatusBar
    ::pgn::Refresh 1
    updateBoard
  }
}

# ::commenteditor::Refresh --
#
#	(Re)builds textwindow and board of the comment editor.
#
proc ::commenteditor::Refresh {} {
  if {![winfo exists .commentWin]} { return }
  
  set nag [sc_pos getNags]
  .commentWin.nf.tf.text configure -state normal
  .commentWin.nf.tf.text delete 0 end
  if {$nag != "0"} {
    .commentWin.nf.tf.text insert end $nag
  }
  
  # if at vstart, disable NAG codes
  if {[sc_pos isAt vstart]} {
    set state "disabled"
  } else  {
    set state "normal"
  }
  foreach c [winfo children .commentWin.nf.tf] {
    $c configure -state $state 
  }
  foreach c [winfo children .commentWin.nf.b] {
    $c configure -state $state
  }
  
  # Rewrite text window, tag embedded commands,
  # and draw marks according to text window commands.
  set text  .commentWin.cf.text
  set board .commentWin.markFrame.insertBoard.board
  set comment [sc_pos getComment]
  set offset  0
  ::board::setmarks $board $comment
  $text delete 1.0 end
  foreach {mark pos} [::board::mark::getEmbeddedCmds $comment] {
    foreach {type square arg color} $mark {begin end} $pos {break}  ;# set
    set square [::board::sq $square]
    regsub -all -- {[^[:alnum:]]} $color {_} _color
    switch -- $type {
      arrow   { set arg  [::board::sq $arg]
        set tags [list ${square}:${arg} ${arg}:${square} \
            ${square}:${arg}:$_color]
      }
      default { set tags [list $square ${square}:$type:$_color] }
    }
    $text insert insert [string range $comment $offset [expr {$begin-1}]]
    $text insert insert [string range $comment $begin $end] $tags
    set offset [expr {$end + 1}]
  }
  $text insert insert [string range $comment $offset end]
  ::board::update $board [sc_pos board]
}

### End of namespace ::commenteditor

####################
# ECO Browser window

set ::windows::eco::code ""
set ::windows::eco::count 0
set ::windows::eco::isOpen 0

proc ::windows::eco::OpenClose {} {
  if {[winfo exists .ecograph]} {
    destroy .ecograph
  } else {
    ::windows::eco::Refresh
  }
}

# ::windows::eco::Refresh
#
#    Updates the ECO Browser window, opening it if necessary.
#    If the ECO code "code" is "x", then the value of the
#    variable ::windows::eco::code is used instead.
#
proc ::windows::eco::Refresh {{code "x"}} {
  set w .ecograph
  set graph $w.pane.graph
  set text $w.pane.text
  if {$code != "x"} { set ::windows::eco::code $code }
  if {! [winfo exists $w]} {
    set ::windows::eco::isOpen 1
    ::createToplevel $w
    wm minsize $w 200 100
    setWinLocation $w
    bind $w <Escape> "destroy $w"
    bind $w <F1> {helpWindow ECO}
    bind $w <Destroy> {set ::windows::eco::isOpen 0}
    text $w.title -relief flat -height 1 -width 1 -wrap word -font font_Bold
    $w.title tag configure center -justify center
    $w.title configure -cursor top_left_arrow
    pack $w.title -side top -fill x
    ttk::frame $w.b
    pack $w.b -side bottom -fill x
    ttk::button $w.b.classify -textvar ::tr(ReclassifyGames) -command classifyAllGames
    dialogbutton $w.b.help -textvar ::tr(Help) -command {helpWindow ECO}
    dialogbutton $w.b.close -textvar ::tr(Close) -command "destroy $w"
    pack $w.b.classify -side left -padx 5 -pady 5
    packbuttons right $w.b.close $w.b.help
    set pane [::utils::pane::Create $w.pane graph text 500 400 0.5]
    ::utils::pane::SetRange $w.pane 0.3 0.7
    ::utils::pane::SetDrag $w.pane 0
    pack $pane -side top -expand true -fill both

    canvas $graph.c -width 500 -height 250
    pack $graph.c -side top -fill both -expand yes
    text $text.text -height 12 -width 75 -wrap word -font font_Regular \
      -background white -selectbackground lightBlue \
      -yscroll "$text.ybar set" -xscroll "$text.xbar set"
    $text.text tag configure bold -font font_Bold
    $text.text tag configure indent -lmargin2 20
    $text.text configure -cursor top_left_arrow
    ::htext::init $text.text
    ttk::scrollbar $text.ybar -command "$text.text yview"
    ttk::scrollbar $text.xbar -orient horizontal -command "$text.text xview"
    grid $text.text -row 0 -column 0 -sticky nesw
    grid $text.ybar -row 0 -column 1 -sticky nesw
    #grid $text.xbar -row 1 -column 0 -sticky nesw
    grid rowconfig $text 0 -weight 1 -minsize 0
    grid columnconfig $text 0 -weight 1 -minsize 0

    foreach i {0 1 2 3 4 5 6 7 8 9 A B C D E a b c d e f g h i j k l m n o p
               q r s t u v w x y z} {
      bind $w <KeyPress-$i> "::windows::eco::KeyPress $i"
    }

    foreach i {Left Delete less BackSpace} {
      bind $w <KeyPress-$i> {::windows::eco::KeyPress "<"}
    }

    bind $w <Home>  {.ecograph.pane.text.text yview moveto 0}
    bind $w <End>   {.ecograph.pane.text.text yview moveto 1.0}
    bind $w <Up>    {.ecograph.pane.text.text yview scroll -1 units}
    bind $w <Down>  {.ecograph.pane.text.text yview scroll 1 units}
    bind $w <Prior> {.ecograph.pane.text.text yview scroll -1 pages}
    bind $w <Next>  {.ecograph.pane.text.text yview scroll 1 pages}
    standardShortcuts $w
    bindMouseWheel $w $w.pane.text.text

    bind $graph.c <1> { ::windows::eco::Select %x }
    bind $graph.c <$::MB3> { ::windows::eco::KeyPress "<" }

    bind $graph <Configure> {
      ::utils::graph::configure eco -height [expr {[winfo height .ecograph.pane.graph.c] - 50} ]
      ::utils::graph::configure eco -width [expr {[winfo width .ecograph.pane.graph.c] - 60} ]
      ::utils::graph::redraw eco
    }
    bind $w <Configure> {
      ::utils::graph::configure eco -height [expr {[winfo height .ecograph.pane.graph.c] - 50} ]
      ::utils::graph::configure eco -width [expr {[winfo width .ecograph.pane.graph.c] - 60} ]
      ::utils::graph::redraw eco
    }
    ::setTitle $w "Scid: [tr WindowsECO]"
    ::utils::graph::create eco -width 1 -height 1 -xtop 50 -ytop 20 \
      -xmin 0.5 -xtick 1 -ytick 5 -font font_Small -canvas $graph.c
    update
    ::createToplevelFinalize $w
  }

  set height [expr {[winfo height $graph.c] - 50} ]
  set width [expr {[winfo width $graph.c] - 60} ]

  set code $::windows::eco::code
  # Collect data:
  set len [string length $code]
  set subcodes {}
  if {$len == 0} {
    set subcodes {A B C D E}
  } elseif {$len == 1  ||  $len == 2} {
    set subcodes {0 1 2 3 4 5 6 7 8 9}
  } elseif {$len == 3} {
    set subcodes {a b c d e f g h i j k l m n o p q r s t u v w x y z}
  }

  set xlabels {}
  set count 0
  set data {}
  set maxfreq 1
  set wins {}
  set draws {}

  foreach i $subcodes {
    set subcode "$code$i"
    set stats [sc_base ecoStats $subcode]
    set freq [lindex $stats 0]
    incr count
    lappend data $count
    lappend data $freq
    lappend wins $count
    lappend wins [lindex $stats 1]
    lappend draws $count
    lappend draws [expr {[lindex $stats 1] + [lindex $stats 2] + [lindex $stats 4]} ]
    if {$freq > $maxfreq} {set maxfreq $freq}
    if {$len == 3} {
      set subcode $i
    }
    lappend xlabels [list $count $subcode]
  }
  set hline 5
  if {$maxfreq >    20} { set hline    10 }
  if {$maxfreq >    50} { set hline    25 }
  if {$maxfreq >   100} { set hline    50 }
  if {$maxfreq >   200} { set hline   100 }
  if {$maxfreq >   500} { set hline   250 }
  if {$maxfreq >  1000} { set hline   500 }
  if {$maxfreq >  2000} { set hline  1000 }
  if {$maxfreq >  5000} { set hline  2500 }
  if {$maxfreq > 10000} { set hline  5000 }
  if {$maxfreq > 20000} { set hline 10000 }
  if {$maxfreq > 50000} { set hline 25000 }
  if {$maxfreq > 100000} { set hline 50000 }

  ::utils::graph::create eco -width $width -height $height -xtop 50 -ytop 20 \
    -xmin 0.5 -xtick 1 -ytick $hline -font font_Small -canvas $graph.c
  ::utils::graph::data eco data -color SteelBlue4 -points 0 -lines 0 -bars 1 \
    -barwidth 0.8 -outline black -coords $data
  ::utils::graph::data eco draws -color SteelBlue3 -points 0 -lines 0 -bars 1 \
    -barwidth 0.8 -outline black -coords $draws
  ::utils::graph::data eco wins -color SteelBlue1 -points 0 -lines 0 -bars 1 \
    -barwidth 0.8 -outline black -coords $wins
  ::utils::graph::data eco bounds -points 0 -lines 0 -bars 0 -coords {1 0 1 1}
  ::utils::graph::configure eco -ymin 0 -xmin 0.4 -xmax [expr {$count + 0.6} ] \
    -xlabels $xlabels -hline [list [list gray80 1 each $hline]]
  ::utils::graph::redraw eco
  $text.text configure -state normal
  $text.text delete 1.0 end
  set stats [sc_base eco $code]
  if {$len == 0} {
    set section $::tr(ECOAllSections)
  } elseif {$len < 3} {
    set section "$::tr(ECOSection) \"$code\""
  } else {
    set section "$::tr(ECOCode) \"$code\""
  }
  set header "<center><b>$::tr(ECOSummary) $section</b><br>"
  append header "[lindex $stats 0] $::tr(games): +[lindex $stats 1] =[lindex $stats 2] -[lindex $stats 3]  ([lindex $stats 5]%)</center>\n\n"
  ::htext::display $text.text "$header[sc_eco summary $code 1]"
  $text.text configure -state disabled
  $w.title configure -state normal
  $w.title delete 1.0 end
  $w.title insert end "$::tr(ECOFrequency) $section" center
  $w.title configure -state disabled
  set ::windows::eco::count $count
}

proc ::windows::eco::Select {xc} {
  variable count
  variable code

  set x [::utils::graph::xunmap eco $xc]
  set selection 0
  for {set i 1} {$i <= $count} {incr i} {
    if {$x >= [expr {$i - 0.4} ]  &&  $x <= [expr {$i + 0.4} ]} {
      set selection $i
    }
  }
  if {$selection == 0} { return }
  incr selection -1
  set len [string length $code]
  if {$len == 0} {
    set code [lindex {A B C D E} $selection]
  } elseif {$len == 1  ||  $len == 2} {
    append code $selection
  } elseif {$len == 3} {
    append code [lindex {a b c d e f g h i j k l m n o p q r s t u v w x y z} $selection]
  } else {
    return
  }
  ::windows::eco::Refresh
}

# ::windows::eco::KeyPress
#
#    Handles keyboard events in ECO browser window
#
proc ::windows::eco::KeyPress {key} {
  set code $::windows::eco::code
  set len [string length $code]
  if {$key == "<"} {
    set ::windows::eco::code [string range $code 0 [expr {$len - 2} ]]
    ::windows::eco::Refresh
    return
  }
  if {$key == "top"} {
    set ::windows::eco::code ""
    ::windows::eco::Refresh
    return
  }

  if {$len == 0} {
    set key [string toupper $key]
    switch $key {
      A - B - C - D - E {
        # nothing
      }
      default { set key "" }
    }
  } elseif {$len == 1 || $len == 2} {
    switch $key {
      0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 {
        # nothing
      }
      default { set key "" }
    }
  } elseif {$len == 3} {
    set key [string tolower $key]
    switch $key {
      a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - q - r -
      s - t - u - v - w - x - y - z {
        # nothing
      }
      default { set key "" }
    }
  }

  if {$key != ""} {
    set ::windows::eco::code "$code$key"
    ::windows::eco::Refresh
  }
}

###
### windows/stats.tcl: Filter Statistics window for Scid
###

set ::windows::stats::isOpen 0

proc ::windows::stats::Open {} {
  set w .statsWin
  if {[winfo exists $w]} {
    focus .
    destroy $w
    set ::windows::stats::isOpen 0
    return
  }
  toplevel $w
  wm title $w "Scid: Filter Statistics"
  setWinLocation $w
  bind $w <Configure> "recordWinSize $w"

  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label StatsFile -menu $w.menu.file
  $w.menu add cascade -label StatsOpt -menu $w.menu.opt
  menu $w.menu.file
  $w.menu.file add command -label StatsFilePrint -command {
    set ftype {
      { "Text files" {".txt"} }
      { "All files"  {"*"}    }
    }
    set fname [tk_getSaveFile -initialdir [pwd] -filetypes $ftype -title "Save text file"]
    if {$fname != ""} {
      if {[catch {set tempfile [open $fname w]}]} {
        tk_messageBox -title "Scid: Error saving file" -type ok -icon warning \
          -message "Unable to save the file: $fname\n\n"
      } else {
        puts $tempfile [.statsWin.stats get 1.0 end-1c]
        close $tempfile
      }
    }
  }
  $w.menu.file add separator
  $w.menu.file add command -label StatsFileClose -accelerator Esc \
      -command "destroy $w"

  menu $w.menu.opt
  $w.menu.opt add cascade -label $::tr(OprepStatBoth) -menu $w.menu.opt.elo
  menu $w.menu.opt.elo
  foreach i [lsort -decreasing [array names ::windows::stats::display r*]] {
    set elo [string range $i 1 end]
    $w.menu.opt.elo add checkbutton -label "$::tr(OprepStatBoth) $elo+" \
      -variable ::windows::stats::display($i) -command ::windows::stats::Refresh
  }
  $w.menu.opt add separator
  $w.menu.opt add cascade -label $::tr(OprepStatSince) \
    -menu $w.menu.opt.year
  menu $w.menu.opt.year
  foreach i [lsort [array names ::windows::stats::display y*]] {
    set year [string range $i 1 end]
    $w.menu.opt.year add checkbutton \
      -label "$::tr(OprepStatSince) $year.01.01" \
      -variable ::windows::stats::display($i) -command ::windows::stats::Refresh
  }

#  text $w.stats -borderwidth 0 \
    -width $::winWidth($w) -height $::winHeight($w) -font font_Fixed \
    -foreground black -background white -cursor top_left_arrow -wrap none \
      -setgrid 1 -yscrollcommand {.statsWin.sb set } 
  autoscrollframe $w.statsasb text $w.stats -width 80 -height 40\
      -foreground black -background white -font font_Fixed\
       -wrap none 

  pack $w.statsasb -side top -fill both -expand yes
  set ::windows::stats::isOpen 1
  bind $w <Control-q> "destroy $w"
  bind $w <Escape> "destroy $w"
  bind $w <F1> { helpWindow Index }
  bind $w <Destroy> {
    set ::windows::stats::isOpen 0
  }
  standardShortcuts $w
#Klimmek: enable Resize vertical
  wm resizable $w 0 1
  ::windows::stats::ConfigMenus
  ::windows::stats::Refresh
}

proc ::windows::stats::Refresh {} {
  variable display
  if {[winfo exists .playerInfoWin]} { ::pinfo::playerInfo }
  ::maint::Refresh
  updateStatusBar
  ::tools::graphs::filter::Refresh
  #Klimmek. Update Absfilter window
  ::tools::graphs::absfilter::Refresh
  if {! [winfo exists .statsWin]} { return }

  # Set up variables for translated phrases:
  set all [::utils::string::Capital $::tr(allGames)]
  set both $::tr(OprepStatBoth)
  set since $::tr(OprepStatSince)
  set games [::utils::string::Capital $::tr(games)]
  set score [::utils::string::Capital $::tr(score)]

  # Find length of longest left-hand column:
  set alen [expr {[string length $all] + 1}]
  set blen [expr {[string length $both] + 7}]
  set slen [expr {[string length $since] + 14}]
  set len $alen
  if {$len < $blen} { set len $blen }
  if {$len < $slen} { set len $slen }

  set height 4
  set ratings 0
  set years 0
  set rlist [lsort -decreasing [array names display r*]]
  set ylist [lsort [array names display y*]]

  foreach i $rlist {
    if {$display($i)} { set ratings 1 }
  }
  foreach i $ylist {
    if {$display($i)} { set years 1 }
  }

  if {$ratings} { incr height }
  if {$years} { incr height }

  set s ""
  set sm "\n"  
  set stat ""
  append s " [::utils::string::Pad $stat [expr $len - 4]] [::utils::string::PadRight $games 10]"
  append s "     1-0     =-=     0-1 [::utils::string::PadRight $score 8]\n"
  append s "------------------------------------------------------------------------"
  append s "\n [::utils::string::Pad $all $len]" [sc_filter stats all]
#Klimmek: New Statistic: Count the games in intervalls "start elo  - end elo"
#         if elo is deselected in option menu, then enlarge the intervall to next selectet elo.
#Klimmek: New Statistic: Count the games in intervalls
  if {$ratings} {
    append s "\n"
    set j 0
    set k [lindex $rlist $j]
    while { $k!= "" && ! $display($k) } {
	incr j
	set k [lindex $ylist $j]
	if { $k == "" } { break }
    }
    set nelo [string range [lindex $rlist $j] 1 end]
    incr height
#first line searches all games greater 2600 Elo
    set stat "min. Elo $nelo-3500"
    append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $nelo 9999]
    set stat "max. Elo $nelo-3500"
    append sm "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $nelo -9999]
    set j 0
    foreach i $rlist {
      incr j  
      if {$display($i)} {
        incr height
        set elo [string range $i 1 end]
	set l $j
	set k [lindex $rlist $l]
        while { $k!= "" && ! $display($k) } {
	    incr l
	    set k [lindex $rlist $l]
	    if { $k == "" } { break }
	}
	set nelo [string range [lindex $rlist $l] 1 end]
	if { $nelo == "" } { set nelo 0 }  
#count all games where player whith lowest Elo is in the specific range      
        set stat "min. Elo $nelo-$elo"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $nelo $elo]
        set stat "max. Elo $nelo-$elo"
#count all games where player whith highest Elo is in the specific range      
# +10000 workaround to trigger max elo in filter function
	append sm "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $nelo [expr {$elo + 10000}]]
      }
    }
  }
  append s $sm
#Klimmek: New Statistic: Count the games in intervalls "from year - to year"
#         if year is deselected in option menu, then enlarge the intervall to next selectet year.
  if {$years} {
    append s "\n"
    set j 0  
    foreach i $ylist {
      incr j  
      if {$display($i)} {
        incr height
        set year [string range $i 1 end]
	set l $j
	set k [lindex $ylist $l]
        while { $k!= "" && ! $display($k) } {
	    incr l
	    set k [lindex $ylist $l]
	    if { $k == "" } { break }
	}
	set nyear [string range $k 1 end]
	if { $nyear == "" } { set nyear 2099 }  
        set stat "$year - $nyear"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats year $year $nyear]
      } 
    }
  }
#Old statistic: count the games from specific value to maximum value 
  set stat ""
  append s "\n\n"
  append s " [::utils::string::Pad $stat [expr $len - 4]] [::utils::string::PadRight $games 10]"
  append s "     1-0     =-=     0-1 [::utils::string::PadRight $score 8]\n"
  append s "------------------------------------------------------------------------"
  append s "\n [::utils::string::Pad $all $len]" [sc_filter stats all]

  if {$ratings} {
    append s "\n"
    foreach i $rlist {
      if {$display($i)} {
        incr height
        set elo [string range $i 1 end]
        set stat "$both $elo+"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $elo 0]
      }
    }
  }

  if {$years} {
    append s "\n"
    foreach i $ylist {
      if {$display($i)} {
        incr height
        set year [string range $i 1 end]
        set stat "$since $year.01.01"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats year $year 0]
      }
    }
  }
  append s "\n"

  set w .statsWin.stats
  if { $height > 50  } { set height 50 }  
  $w configure -state normal
  $w delete 1.0 end
  $w insert end $s
  $w tag configure bgGray -background gray95
  # Shade every second line to help readability:
  set lastLineNum [expr {int([$w index end])}]
  for {set i 2} {$i <= $lastLineNum} {incr i 2} {
    $w tag add bgGray $i.0 "$i.0 lineend +1c"
  }
  $w tag configure blue -foreground darkBlue
  $w tag configure red -foreground red
  $w tag add blue 1.0 2.0
  $w tag add red 2.0 3.0
  $w configure -height $height
  $w configure -state disabled
}

proc ::windows::stats::ConfigMenus {{lang ""}} {
  if {! [winfo exists .statsWin]} { return }
  if {$lang == ""} { set lang $::language }
  set m .statsWin.menu
  foreach idx {0 1} tag {File Opt} {
    configMenuText $m $idx Stats$tag $lang
  }
  foreach idx {0 2} tag {Print Close} {
    configMenuText $m.file $idx StatsFile$tag $lang
  }
}

############################################################
### TREE window
### (C) 2007 Pascal Georges : multiple Tree windows support

namespace eval ::tree {
  set trainingBase 0
  array set cachesize {}
  set scoreHighlight_MinGames 15
  set scoreHighlight_WhiteExpectedScoreBonus 3.8 ; # on average white achieves a score of 53.8
  set scoreHighlight_Margin 3.0 ; # if +/- this value, something special happened
}
# ################################################################################
proc ::tree::doConfigMenus { baseNumber  { lang "" } } {
  if {! [winfo exists .treeWin$baseNumber]} { return }
  if {$lang == ""} { set lang $::language }
  set m .treeWin$baseNumber.menu
  foreach idx {0 1 2 3 4} tag {File Mask Sort Opt Help} {
    configMenuText $m $idx Tree$tag $lang
  }
  foreach idx {0 1 2 3 4 5 7 9 11} tag {Save Fill FillWithBase FillWithGame SetCacheSize CacheInfo Graph Copy Close} {
    configMenuText $m.file $idx TreeFile$tag $lang
  }
  foreach idx {0 1 2 3 4 5 6 7 8 9} tag {New Open OpenRecent Save Close FillWithGame FillWithBase Search Info Display} {
    configMenuText $m.mask $idx TreeMask$tag $lang
  }
  foreach idx {0 1 2 3} tag {Alpha ECO Freq Score } {
    configMenuText $m.sort $idx TreeSort$tag $lang
  }
  foreach idx {0 1 3} tag {Lock Training Autosave } {
    configMenuText $m.opt $idx TreeOpt$tag $lang
  }
  foreach idx {0 1} tag {Tree Index} {
    configMenuText $m.helpmenu $idx TreeHelp$tag $lang
  }
}

# ################################################################################
proc ::tree::ConfigMenus { { lang "" } } {
  for {set i 1 } {$i <= [sc_base count total]} {incr i} {
    ::tree::doConfigMenus $i $lang
  }
}
################################################################################
proc ::tree::menuCopyToSelection { baseNumber } {
  clipboard clear
  clipboard append [ .treeWin$baseNumber.f.tl get 1.0 end ]
}
################################################################################
proc ::tree::treeFileSave {base} {
  busyCursor .
  update
  if {[catch {sc_tree write $base} result]} {
    tk_messageBox -type ok -icon warning -title "Scid: Error writing file" -message $result
  }
  unbusyCursor .
}
################################################################################
proc ::tree::make { { baseNumber -1 } {locked 0} } {
  global tree highcolor geometry helpMessage
  
  if {$baseNumber == -1} {set baseNumber [sc_base current]}
  
  if {[winfo exists .treeWin$baseNumber]} {
    ::tree::closeTree $baseNumber
    return
  }

  if {$baseNumber == [sc_base current]} { set ::treeWin 1 }
  set w .treeWin$baseNumber
  
  ::createToplevel .treeWin$baseNumber
  setWinLocation $w
  setWinSize $w
  
  # Set the tree window title now:
  ::setTitle $w "Scid: [tr WindowsTree] $baseNumber [file tail [sc_base filename $baseNumber] ]"
  set ::treeWin$baseNumber 1
  set tree(training$baseNumber) 0
  set tree(autorefresh$baseNumber) 1
  set tree(locked$baseNumber) $locked
  set tree(base$baseNumber) $baseNumber
  set tree(status$baseNumber) ""
  set tree(order$baseNumber) "frequency"
  set tree(allgames$baseNumber) 1
  
  bind $w <Destroy> "::tree::closeTree $baseNumber"
  bind $w <F1> { helpWindow Tree } 
  bind $w <Escape> "::tree::hideCtxtMenu $baseNumber ; .treeWin$baseNumber.buttons.stop invoke "
  
  # Bind left button to close ctxt menu:
  bind $w <ButtonPress-1> "::tree::hideCtxtMenu $baseNumber"
  
  standardShortcuts $w
  
  menu $w.menu
  ::setMenu $w $w.menu
  $w.menu add cascade -label TreeFile -menu $w.menu.file
  $w.menu add cascade -label TreeMask -menu $w.menu.mask
  $w.menu add cascade -label TreeSort -menu $w.menu.sort
  $w.menu add cascade -label TreeOpt  -menu $w.menu.opt
  $w.menu add cascade -label TreeHelp -menu $w.menu.helpmenu
  foreach i {file mask sort opt helpmenu} {
    menu $w.menu.$i -tearoff 0
  }
  
  $w.menu.file add command -label TreeFileSave -command "::tree::treeFileSave $baseNumber"
  set helpMessage($w.menu.file,0) TreeFileSave
  $w.menu.file add command -label TreeFileFill -command "::tree::prime $baseNumber"
  set helpMessage($w.menu.file,1) TreeFileFill
  $w.menu.file add command -label TreeFileFillWithBase -command "::tree::primeWithBase"
  set helpMessage($w.menu.file,2) TreeFileFillWithBase
  $w.menu.file add command -label TreeFileFillWithGame -command "::tree::primeWithGame"
  set helpMessage($w.menu.file,3) TreeFileFillWithGame
  
  menu $w.menu.file.size
  foreach i { 250 500 1000 2000 5000 10000 } {
    $w.menu.file.size add radiobutton -label "$i" -value $i -variable ::tree::cachesize($baseNumber) -command "::tree::setCacheSize $baseNumber $i"
  }
  
  $w.menu.file add cascade -menu $w.menu.file.size -label TreeFileSetCacheSize
  set helpMessage($w.menu.file,4) TreeFileSetCacheSize
  
  $w.menu.file add command -label TreeFileCacheInfo -command "::tree::getCacheInfo $baseNumber"
  set helpMessage($w.menu.file,5) TreeFileCacheInfo
  
  $w.menu.file add separator
  $w.menu.file add command -label TreeFileGraph -command "::tree::graph $baseNumber 1"
  set helpMessage($w.menu.file,7) TreeFileGraph
  $w.menu.file add separator
  $w.menu.file add command -label TreeFileCopy -command "::tree::menuCopyToSelection $baseNumber"
  set helpMessage($w.menu.file,9) TreeFileCopy
  $w.menu.file add separator
  $w.menu.file add command -label TreeFileClose -command ".treeWin$baseNumber.buttons.close invoke"
  set helpMessage($w.menu.file,11) TreeFileClose
  
  $w.menu.mask add command -label TreeMaskNew -command "::tree::mask::new"
  set helpMessage($w.menu.mask,0) TreeMaskNew
  $w.menu.mask add command -label TreeMaskOpen -command "::tree::mask::open"
  set helpMessage($w.menu.mask,1) TreeMaskOpen
  
  menu $w.menu.mask.recent
  foreach f $::tree::mask::recentMask {
    $w.menu.mask.recent add command -label $f -command "::tree::mask::open $f"
  }
  $w.menu.mask add cascade -label TreeMaskOpenRecent -menu $w.menu.mask.recent
  set helpMessage($w.menu.mask,2) TreeMaskOpenRecent
  
  $w.menu.mask add command -label TreeMaskSave -command "::tree::mask::save"
  set helpMessage($w.menu.mask,3) TreeMaskSave
  $w.menu.mask add command -label TreeMaskClose -command "::tree::mask::close"
  set helpMessage($w.menu.mask,4) TreeMaskClose
  $w.menu.mask add command -label TreeMaskFillWithGame -command "::tree::mask::fillWithGame"
  set helpMessage($w.menu.mask,5) TreeMaskFillWithGame
  $w.menu.mask add command -label TreeMaskFillWithBase -command "::tree::mask::fillWithBase"
  set helpMessage($w.menu.mask,6) TreeMaskFillWithBase
  $w.menu.mask add command -label TreeMaskSearch -command "::tree::mask::searchMask $baseNumber"
  set helpMessage($w.menu.mask,7) TreeMaskSearch
  $w.menu.mask add command -label TreeMaskInfo -command "::tree::mask::infoMask"
  set helpMessage($w.menu.mask,8) TreeMaskInfo
  $w.menu.mask add command -label TreeMaskDisplay -command "::tree::mask::displayMask"
  set helpMessage($w.menu.mask,9) TreeMaskDisplay
  
  foreach label {Alpha ECO Freq Score} value {alpha eco frequency score} {
    $w.menu.sort add radiobutton -label TreeSort$label \
        -variable tree(order$baseNumber) -value $value -command " ::tree::refresh $baseNumber "
  }
  
  $w.menu.opt add checkbutton -label TreeOptLock -variable tree(locked$baseNumber) -command "::tree::toggleLock $baseNumber"
  set helpMessage($w.menu.opt,0) TreeOptLock
  
  $w.menu.opt add checkbutton -label TreeOptTraining -variable tree(training$baseNumber) -command "::tree::toggleTraining $baseNumber"
  set helpMessage($w.menu.opt,1) TreeOptTraining
  
  $w.menu.opt add separator
  $w.menu.opt add checkbutton -label TreeOptAutosave -variable tree(autoSave$baseNumber)
  set helpMessage($w.menu.opt,3) TreeOptAutosave

  $w.menu.helpmenu add command -label TreeHelpTree -accelerator F1 -command {helpWindow Tree}
  $w.menu.helpmenu add command -label TreeHelpIndex -command {helpWindow Index}
  
  ::tree::doConfigMenus $baseNumber
  
  autoscrollframe $w.f text $w.f.tl \
      -width $::winWidth(.treeWin) -height $::winHeight(.treeWin) -wrap none -selectbackground lightgrey -selectforeground black \
      -font font_Fixed -foreground black -background white -setgrid 1 -exportselection 1
  #define default tags
  $w.f.tl tag configure greybg -background gray95
  $w.f.tl tag configure whitebg -background white
  $w.f.tl tag configure bluefg -foreground blue
  $w.f.tl tag configure greenfg -foreground SeaGreen
  $w.f.tl tag configure redfg -foreground red
  
  selection handle $w.f.tl "::tree::copyToSelection $baseNumber"
  bindMouseWheel $w $w.f.tl

  bind $w <Configure> "recordWinSize $w"

  ttk::frame $w.statusframe
  pack $w.statusframe -side bottom -fill x
  grid rowconfigure $w.statusframe 0 -weight 1
  grid columnconfigure $w.statusframe 0 -weight 1
  ttk::label $w.status -anchor w -font font_Small \
      -relief sunken -textvar tree(status$baseNumber)
  grid $w.status -in $w.statusframe -column 0 -row 0 -sticky nsew
  canvas $w.progress -height 0 -bg white -relief solid -border 1
  $w.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar

  pack [ttk::frame $w.buttons -relief sunken] -side bottom -fill x
  pack $w.f -side top -expand 1 -fill both
  
  ttk::button $w.buttons.best -image tb_list -style Pad0.Small.TButton -command "::tree::best $baseNumber"
  ttk::button $w.buttons.graph -image tb_bargraph -style Pad0.Small.TButton -command "::tree::graph $baseNumber 1"
  # add a button to start/stop tree refresh
  ttk::button $w.buttons.bStartStop -image tb_search_on -style Pad0.Small.TButton -command "::tree::toggleRefresh $baseNumber" ;# -relief flat
  
  ttk::checkbutton $w.buttons.allgames -textvar ::tr(allGames) -variable tree(allgames$baseNumber) -command "::tree::refresh $baseNumber"
  ttk::checkbutton $w.buttons.training -textvar ::tr(Training) -variable tree(training$baseNumber) -command "::tree::toggleTraining $baseNumber"
  
  foreach {b t} { best TreeFileBest graph TreeFileGraph allgames TreeOptLock  training TreeOptTraining bStartStop TreeOptStartStop } {
    set helpMessage($w.buttons.$b) $t
  }
  
  dialogbutton $w.buttons.stop -textvar ::tr(Stop) -command { sc_progressBar }
  dialogbutton $w.buttons.close -textvar ::tr(Close) -command "::tree::closeTree $baseNumber"
  
  pack $w.buttons.best $w.buttons.graph $w.buttons.bStartStop $w.buttons.allgames $w.buttons.training \
      -side left -padx 3 -pady 2
  packbuttons right $w.buttons.close $w.buttons.stop
  $w.buttons.stop configure -state disabled
  
  wm minsize $w 40 5
  
  wm protocol $w WM_DELETE_WINDOW " .treeWin$baseNumber.buttons.close invoke "
  ::tree::refresh $baseNumber
  set ::tree::cachesize($baseNumber) [lindex [sc_tree cacheinfo $baseNumber] 1]
}
################################################################################
proc ::tree::hideCtxtMenu { baseNumber } {
  set w .treeWin$baseNumber.f.tl.ctxtMenu
  if {[winfo exists $w]} {
    destroy $w
    focus .treeWin$baseNumber
  }
}
################################################################################
proc ::tree::selectCallback { baseNumber move } {
  
  if { $::tree(refresh) } {
    return
  }
  
  if {$::tree(autorefresh$baseNumber)} {
    tree::select $move $baseNumber
  }
}

################################################################################
# close the corresponding base if it is flagged as locked
proc ::tree::closeTree {baseNumber} {
  global tree
  ::tree::mask::close
  
  ::tree::hideCtxtMenu $baseNumber
    #  .treeWin$baseNumber.buttons.stop invoke

  set ::geometry(treeWin$baseNumber) [wm geometry .treeWin$baseNumber]
  focus .
  
  if {$tree(autoSave$baseNumber)} {
    busyCursor .
    sc_tree write $tree(base$baseNumber)
    unbusyCursor .
  }
  
  if {[winfo exists .treeGraph$baseNumber]} { destroy .treeGraph$baseNumber }
  destroy .treeBest$baseNumber
  ::docking::cleanup .treeWin$baseNumber
  destroy .treeWin$baseNumber
  sc_tree clean $baseNumber
  if {$::tree(locked$baseNumber)} { ::file::Close $baseNumber }
  ::windows::stats::Refresh;
  set curr_base [sc_base current]
  set ::treeWin [winfo exists .treeWin$curr_base]
}
################################################################################
proc ::tree::toggleTraining { baseNumber } {
  global tree
  
  for {set i 1 } {$i <= [sc_base count total]} {incr i} {
    if {! [winfo exists .treeWin$baseNumber] || $i == $baseNumber } { continue }
    set tree(training$i) 0
  }
  
  if {$tree(training$baseNumber)} {
    set ::tree::trainingBase $baseNumber
    ::tree::doTraining
  } else {
    set ::tree::trainingBase 0
    ::tree::refresh $baseNumber
  }
}

################################################################################
proc ::tree::doTraining { { n 0 } } {
  global tree
  if {$n != 1  &&  [winfo exists .analysisWin1]  &&  $::analysis(automove1)} {
    automove 1
    return
  }
  if {$n != 2  &&  [winfo exists .analysisWin2]  &&  $::analysis(automove2)} {
    automove 2
    return
  }
  if {[::tb::isopen]  &&  $::tbTraining} {
    ::tb::move
    return
  }
  if {! [winfo exists .treeWin$::tree::trainingBase]} { return }
  if { $::tree::trainingBase == 0 } { return }
  
  # Before issuing a training move, annotate player's move
  if { $::tree::mask::maskFile != ""  } {
    set move_done [sc_game info previousMoveNT]
    if {$move_done != ""} {
      sc_move back
      set fen [ ::tree::mask::toShortFen [sc_pos fen] ]
      sc_move forward
      if { [info exists ::tree::mask::mask($fen)] } {
        set moves [ lindex $::tree::mask::mask($fen) 0 ]
        
        # if move out of Mask, and there exists moves in Mask, set a warning
        if { ! [ ::tree::mask::moveExists $move_done $fen ] } {
          if {[llength $moves] != 0} {
            set txt ""
            foreach elt $moves {
              append txt "[::trans [lindex $elt 0]][lindex $elt 1] "
            }
            sc_pos setComment "[sc_pos getComment] Mask : $txt"
          }
        }
        
        # if move was bad, set a warning
        set nag_played [::tree::mask::getNag $move_done $fen]
        set nag_order { "??" " ?" "?!" $::tree::mask::emptyNag "!?" " !" "!!"}
        set txt ""
        foreach elt $moves {
          set n [lindex $elt 1]
          if { [lsearch $nag_order $nag_played] < [lsearch $nag_order $n]} {
            append txt "[::trans [lindex $elt 0]][lindex $elt 1] "
          }
        }
        if {$txt != ""} {
          sc_pos addNag [string trim $nag_played]
          sc_pos setComment "[sc_pos getComment] Mask : $txt"
        }
        
        # if move was on an exclude line, set a warning (img = tb_cross)
        if { [::tree::mask::getImage $move_done 0] ==  "tb_cross" || \
              [::tree::mask::getImage $move_done 1] == "tb_cross"} {
          sc_pos setComment "[sc_pos getComment] Mask : excluded line"
        }
      }
    }
  }
  
  set move [sc_tree move $::tree::trainingBase random]
  addSanMove $move -animate -notraining
  updateBoard -pgn
}

################################################################################
proc ::tree::toggleLock { baseNumber } {
  ::tree::refresh $baseNumber
}

################################################################################
proc ::tree::select { move baseNumber } {
  global tree
  
  if {! [winfo exists .treeWin$baseNumber]} { return }
  
  catch { addSanMove $move -animate }
}

set tree(refresh) 0

################################################################################
proc ::tree::refresh { { baseNumber "" }} {
  set tree(refresh) 1
  if {$baseNumber == "" } {
    sc_tree search -cancel all
    for {set i [sc_base count total] } {$i > 0} {incr i -1} {
      if { [::tree::dorefresh $i] == "canceled" } { break }
    }
  } else {
    ::tree::dorefresh $baseNumber
  }
  set tree(refresh) 0
}

################################################################################
proc ::tree::dorefresh { baseNumber } {
  global tree treeWin
  set w .treeWin$baseNumber
  
  if {![winfo exists $w]} { return }
  if { ! $tree(autorefresh$baseNumber) } { return }

  grid $w.progress -in $w.statusframe -column 0 -row 0 -sticky nsew
  
  sc_progressBar $w.progress bar [$w.progress cget -width] 100
  foreach button {best graph training allgames close} {
    $w.buttons.$button configure -state disabled
  }
  $w.buttons.stop configure -state normal
  
  set base $baseNumber

  set filtered 0
  if { $tree(allgames$baseNumber) == 0 } {
    set filtered 1
  }
  
  set moves [sc_tree search -hide $tree(training$baseNumber) -sort $tree(order$baseNumber) -base $base -filtered $filtered]
  catch {$w.f.tl itemconfigure 0 -foreground darkBlue}

  foreach button {best graph training allgames close} {
    $w.buttons.$button configure -state normal
  }
  $w.buttons.stop configure -state disabled

  ::tree::status "" $baseNumber
  ::windows::stats::Refresh
  if {[winfo exists .treeGraph$baseNumber]} { ::tree::graph $baseNumber }
  updateTitle
  
  if { $moves == "canceled" } { return "canceled"}
  displayLines $baseNumber $moves  

  grid forget $w.progress
}

################################################################################
#
################################################################################
proc ::tree::displayLines { baseNumber moves } {
  global ::tree::mask::maskFile
  
  ::tree::mask::setCacheFenIndex
  
  set lMoves {}
  set w .treeWin$baseNumber
  
  $w.f.tl configure -state normal
  
  set moves [split $moves "\n"]
  
  # for the graph display
  set ::tree::treeData$baseNumber $moves
  
  set len [llength $moves]
  $w.f.tl delete 1.0 end
  
  foreach t [$w.f.tl tag names] {
    if { [ string match "tagclick*" $t ] || [ string match "tagtooltip*" $t ] } {
      $w.f.tl tag delete $t
    }
  }
  
  # Position comment
  set hasPositionComment 0
  if { $maskFile != "" } {
    set posComment [::tree::mask::getPositionComment]
    if {$posComment != ""} {
      set hasPositionComment 1
      set firstLine [ lindex [split $posComment "\n"] 0 ]
      $w.f.tl insert end "$firstLine\n" [ list bluefg tagtooltip_poscomment ]
      ::utils::tooltip::SetTag $w.f.tl $posComment tagtooltip_poscomment
      $w.f.tl tag bind tagtooltip_poscomment <Double-Button-1> "::tree::mask::addComment"
    }
  }
  
  # Display the first line
  if { $maskFile != "" } {
    $w.f.tl image create end -image tb_empty -align center
    $w.f.tl image create end -image tb_empty -align center
    $w.f.tl insert end "    "
    $w.f.tl tag bind tagclick0 <ButtonPress-$::MB3> "::tree::mask::contextMenu $w.f.tl dummy %x %y %X %Y ; break"
  }
  $w.f.tl insert end "[lindex $moves 0]\n" tagclick0
  
  for { set i 1 } { $i < [expr $len - 3 ] } { incr i } {
    set line [lindex $moves $i]
    if {$line == ""} { continue }
    set move [lindex $line 1]
    set move [::untrans $move]
    lappend lMoves $move
    set colorScore [::tree::getColorScore $line]
    if { $move == "\[end\]" } { set colorScore "" }
    
    set tagfg ""
    
    if { $maskFile != "" && $i > 0 && $i < [expr $len - 3] } {
      if { [::tree::mask::moveExists $move] } {
        set tagfg "bluefg"
      }
    }
    if { $maskFile != "" } {
      if { $i > 0 && $i < [expr $len - 3] && $move != "\[end\]" } {
        # images
        foreach j { 0 1 } {
          set img [::tree::mask::getImage $move $j]
          $w.f.tl image create end -image $img -align center
        }
        # color tag
        $w.f.tl tag configure color$i -background [::tree::mask::getColor $move]
        $w.f.tl insert end "  " color$i
        # NAG tag
        $w.f.tl insert end [::tree::mask::getNag $move]
      } else  {
        $w.f.tl image create end -image tb_empty -align center
        $w.f.tl image create end -image tb_empty -align center
        $w.f.tl insert end "    "
      }
    }
    
    # Move and stats
    if {[expr $i % 2] && $i < [expr $len -3] } {
      $w.f.tl insert end "$line" [list greybg $tagfg tagtooltip$i]
    } else  {
      $w.f.tl insert end "$line" [list whitebg $tagfg tagtooltip$i]
    }
    if {$colorScore != ""} {
      $w.f.tl tag add $colorScore end-30c end-26c
    }
    if {$move != "" && $move != "---" && $move != "\[end\]" && $i != [expr $len -2] && $i != 0} {
      $w.f.tl tag bind tagclick$i <Button-1> "[list ::tree::selectCallback $baseNumber $move ] ; break"
    }
    
    if { $maskFile != "" } {
      # Move comment
      set comment [::tree::mask::getComment $move]
      if {$comment != ""} {
        set firstLine [ lindex [split $comment "\n"] 0 ]
        $w.f.tl insert end " $firstLine" tagtooltip$i
        ::utils::tooltip::SetTag $w.f.tl $comment tagtooltip$i
        $w.f.tl tag bind tagtooltip$i <Double-Button-1> "::tree::mask::addComment $move"
      }
    }
    
    if { $maskFile != "" } {
      # Bind right button to popup a contextual menu:
      $w.f.tl tag bind tagclick$i <ButtonPress-$::MB3> "::tree::mask::contextMenu $w.f.tl $move %x %y %X %Y ; break"
    }
    $w.f.tl tag add tagclick$i [expr $i +1 + $hasPositionComment].0 [expr $i + 1 + $hasPositionComment].end
    
    $w.f.tl insert end "\n"
    
  } ;# end for loop
  
  # Display the last lines (total)
  for { set i [expr $len - 3 ] } { $i < [expr $len - 1 ] } { incr i } {
    if { $maskFile != "" } {
      $w.f.tl image create end -image tb_empty -align center
      $w.f.tl image create end -image tb_empty -align center
      $w.f.tl insert end "    "
    }
    $w.f.tl insert end "[lindex $moves $i]\n"
  }
  
  # Add moves present in Mask and not in Tree
  set idx $len
  if { $maskFile != "" } {
    set movesMask [::tree::mask::getAllMoves]
    foreach m $movesMask {
      if {  [ scan [$w.f.tl index end] "%d.%d" currentLine dummy] != 2 } {
        puts "ERROR scan index end [$w.f.tl index end]"
      }
      # move nag color move_anno
      if {[lsearch $lMoves [lindex $m 0]] != -1 || [lindex $m 0] == "null"} {
        continue
      }
      
      $w.f.tl tag bind tagclick$idx <Button-1> "[list ::tree::selectCallback $baseNumber [lindex $m 0] ] ; break"
      # images
      foreach j {4 5} {
        if {[lindex $m $j] == ""} {
          $w.f.tl image create end -image tb_empty -align center
        } else  {
          $w.f.tl image create end -image [lindex $m $j] -align center
        }
      }
      
      # color tag
      $w.f.tl tag configure color$idx -background [lindex $m 2]
      $w.f.tl insert end "  " color$idx
      # NAG tag
      $w.f.tl insert end [::tree::mask::getNag [lindex $m 0]]
      # move
      $w.f.tl insert end "[::trans [lindex $m 0] ]" bluefg
      # comment
      set comment [lindex $m 3]
      set firstLine [ lindex [split $comment "\n"] 0 ]
      $w.f.tl insert end " $firstLine\n" tagtooltip$idx
      ::utils::tooltip::SetTag $w.f.tl $comment tagtooltip$idx
      
      # Bind right button to popup a contextual menu:
      $w.f.tl tag bind tagclick$idx <ButtonPress-$::MB3> "::tree::mask::contextMenu $w.f.tl  [lindex $m 0] %x %y %X %Y ; break"
      $w.f.tl tag add tagclick$idx [ expr $currentLine -1].0 [ expr $currentLine -1].end
      incr idx
    }
  }
  
  $w.f.tl configure -state disabled
}
################################################################################
# returns a list with (ngames freq success eloavg perf) or
# {} if there was a problem during parsing
# 1: e4     B00     37752: 47.1%   54.7%  2474  2513  2002   37%
################################################################################
proc ::tree::getLineValues { l } {
  set ret {}
  if {[scan [string range $l 14 24] "%d:" ngames] != 1} {
    return {}
  } else  {
    lappend ret $ngames
  }
  
  if {[scan [string range $l 25 29] "%f%%" freq] != 1} {
    return {}
  } else  {
    lappend ret $freq
  }
  
  if {[scan [string range $l 33 37] "%f%%" success] != 1} {
    return {}
  } else  {
    lappend ret $success
  }
  
  if {[scan [string range $l 40 44] "%d" eloavg] != 1} {
    return {}
  } else  {
    lappend ret $eloavg
  }
  
  if {[scan [string range $l 46 50] "%d" perf] != 1} {
    return {}
  } else  {
    lappend ret $perf
  }
  
  return $ret
}
################################################################################
# returns the color to use for score (red, green) or ""
################################################################################
proc ::tree::getColorScore { line } {
  set data [::tree::getLineValues $line]
  if { $data == {} } { return "" }
  set ngames [lindex $data 0]
  set freq [lindex $data 1]
  set success [lindex $data 2]
  set eloavg [lindex $data 3]
  set perf [lindex $data 4]
  if { $ngames < $::tree::scoreHighlight_MinGames } {
    return ""
  }
  set wavg [ expr 50 + $::tree::scoreHighlight_WhiteExpectedScoreBonus ]
  set bavg [ expr 50 - $::tree::scoreHighlight_WhiteExpectedScoreBonus ]
  if { [sc_pos side] == "white" && $success > [ expr $wavg + $::tree::scoreHighlight_Margin ] || \
        [sc_pos side] == "black" && $success < [ expr $wavg - $::tree::scoreHighlight_Margin ] } {
    return greenfg
  }
  if { [sc_pos side] == "white" && $success < [ expr $wavg - $::tree::scoreHighlight_Margin ] || \
        [sc_pos side] == "black" && $success > [ expr $wavg + $::tree::scoreHighlight_Margin ] } {
    return redfg
  }
  return ""
}
################################################################################
proc ::tree::status { msg baseNumber } {
  
  global tree
  if {$msg != ""} {
    set tree(status$baseNumber) $msg
    return
  }
  set s "  $::tr(Database)"
  # set base [sc_base current]
  # if {$tree(locked$baseNumber)} { set base $tree(base$baseNumber) }
  set base $baseNumber
  set status "  $::tr(Database) $base: [file tail [sc_base filename $base]]"
  if {$tree(locked$baseNumber)} { append status " ($::tr(TreeLocked))" }
  if {! $tree(allgames$baseNumber)} {
    append status "   $::tr(Filter)"
    append status ": [filterText $base]"
  }
  set tree(status$baseNumber) $status
}

################################################################################
set tree(standardLines) {
  {}
  {1.c4}
  {1.c4 c5}
  {1.c4 c5 2.Nf3}
  {1.c4 e5}
  {1.c4 Nf6}
  {1.c4 Nf6 2.Nc3}
  {1.d4}
  {1.d4 d5}
  {1.d4 d5 2.c4}
  {1.d4 d5 2.c4 c6}
  {1.d4 d5 2.c4 c6 3.Nf3}
  {1.d4 d5 2.c4 c6 3.Nf3 Nf6}
  {1.d4 d5 2.c4 c6 3.Nf3 Nf6 4.Nc3}
  {1.d4 d5 2.c4 c6 3.Nf3 Nf6 4.Nc3 dxc4}
  {1.d4 d5 2.c4 c6 3.Nf3 Nf6 4.Nc3 e6}
  {1.d4 d5 2.c4 c6 3.Nf3 Nf6 4.Nc3 e6 5.e3}
  {1.d4 d5 2.c4 e6}
  {1.d4 d5 2.c4 e6 3.Nc3}
  {1.d4 d5 2.c4 e6 3.Nc3 Nf6}
  {1.d4 d5 2.c4 e6 3.Nf3}
  {1.d4 d5 2.c4 dxc4}
  {1.d4 d5 2.c4 dxc4 3.Nf3}
  {1.d4 d5 2.c4 dxc4 3.Nf3 Nf6}
  {1.d4 d5 2.Nf3}
  {1.d4 d5 2.Nf3 Nf6}
  {1.d4 d5 2.Nf3 Nf6 3.c4}
  {1.d4 d6}
  {1.d4 d6 2.c4}
  {1.d4 Nf6}
  {1.d4 Nf6 2.c4}
  {1.d4 Nf6 2.c4 c5}
  {1.d4 Nf6 2.c4 d6}
  {1.d4 Nf6 2.c4 e6}
  {1.d4 Nf6 2.c4 e6 3.Nc3}
  {1.d4 Nf6 2.c4 e6 3.Nc3 Bb4}
  {1.d4 Nf6 2.c4 e6 3.Nf3}
  {1.d4 Nf6 2.c4 g6}
  {1.d4 Nf6 2.c4 g6 3.Nc3}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 O-O}
  {1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 O-O 6.Be2}
  {1.d4 Nf6 2.c4 g6 3.Nf3}
  {1.d4 Nf6 2.Bg5}
  {1.d4 Nf6 2.Bg5 Ne4}
  {1.d4 Nf6 2.Nf3}
  {1.d4 Nf6 2.Nf3 e6}
  {1.d4 Nf6 2.Nf3 g6}
  {1.e4}
  {1.e4 c5}
  {1.e4 c5 2.c3}
  {1.e4 c5 2.c3 d5}
  {1.e4 c5 2.c3 Nf6}
  {1.e4 c5 2.Nc3}
  {1.e4 c5 2.Nc3 Nc6}
  {1.e4 c5 2.Nf3}
  {1.e4 c5 2.Nf3 d6}
  {1.e4 c5 2.Nf3 d6 3.d4}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 a6}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 e6}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 g6}
  {1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 Nc6}
  {1.e4 c5 2.Nf3 d6 3.Bb5+}
  {1.e4 c5 2.Nf3 e6}
  {1.e4 c5 2.Nf3 Nc6}
  {1.e4 c5 2.Nf3 Nc6 3.d4}
  {1.e4 c5 2.Nf3 Nc6 3.Bb5}
  {1.e4 c6}
  {1.e4 c6 2.d4}
  {1.e4 c6 2.d4 d5}
  {1.e4 c6 2.d4 d5 3.e5}
  {1.e4 c6 2.d4 d5 3.Nc3}
  {1.e4 c6 2.d4 d5 3.Nd2}
  {1.e4 d5}
  {1.e4 d6}
  {1.e4 d6 2.d4}
  {1.e4 d6 2.d4 Nf6}
  {1.e4 d6 2.d4 Nf6 3.Nc3}
  {1.e4 e5}
  {1.e4 e5 2.Nf3}
  {1.e4 e5 2.Nf3 Nc6}
  {1.e4 e5 2.Nf3 Nc6 3.d4}
  {1.e4 e5 2.Nf3 Nc6 3.Bb5}
  {1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}
  {1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4}
  {1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6}
  {1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O}
  {1.e4 e5 2.Nf3 Nc6 3.Bc4}
  {1.e4 e5 2.Nf3 Nf6}
  {1.e4 e6}
  {1.e4 e6 2.d4}
  {1.e4 e6 2.d4 d5}
  {1.e4 e6 2.d4 d5 3.Nc3}
  {1.e4 e6 2.d4 d5 3.Nc3 Bb4}
  {1.e4 e6 2.d4 d5 3.Nc3 Nf6}
  {1.e4 e6 2.d4 d5 3.Nd2}
  {1.e4 e6 2.d4 d5 3.Nd2 c5}
  {1.e4 e6 2.d4 d5 3.Nd2 Nf6}
  {1.e4 Nf6}
  {1.e4 Nf6 2.e5}
  {1.e4 Nf6 2.e5 Nd5}
  {1.Nf3}
  {1.Nf3 Nf6}
}
# if there is a treecache file source it, otherwise use hard coded
# values above
catch {source [scidConfigFile treecache]}

################################################################################
# ::tree::prime
#   Primes the tree for this database, filling it with a number of
#   common opening positions.
#
proc ::tree::prime { baseNumber } {
  global tree
  if {! [winfo exists .treeWin$baseNumber]} { return }
  
  set base $baseNumber
  if {$tree(locked$baseNumber)} { set base $tree(base$baseNumber) }
  if {! [sc_base inUse]} { return }
  set fname [sc_base filename $base]
  if {[string index $fname 0] == "\["  ||  [file extension $fname] == ".pgn"} {
    tk_messageBox -parent .treeWin$baseNumber -icon info -type ok -title "Scid" \
        -message "Sorry, only Scid-format database files can have a tree cache file."
    return
  }
  
  set ::interrupt 0
  progressWindow "Scid: [tr TreeFileFill]" "" $::tr(Cancel) {set ::interrupt 1}
  resetProgressWindow
  leftJustifyProgressWindow
  busyCursor .
  sc_game push
  set i 1
  set len [llength $tree(standardLines)]
  foreach line $tree(standardLines) {
    sc_game new
    set text [format "%3d/\%3d" $i $len]
    if {[llength $line] > 0}  {
      sc_move addSan $line
      changeProgressWindow "$text: $line"
    } else {
      changeProgressWindow "$text: start position"
    }
    sc_tree search -base $base
    updateProgressWindow $i $len
    incr i
    if {$::interrupt} {
      closeProgressWindow
      set ::interrupt 0
      sc_game pop
      unbusyCursor .
      ::tree::refresh $baseNumber
      return
    }
  }
  closeProgressWindow
  if {[catch {sc_tree write $base} result]} {
    #tk_messageBox -type ok -icon warning -title "Scid: Error writing file" -message $result
  } else {
    #set a "$fname.stc: [sc_tree positions] positions, "
    #append a "$result bytes: "
    #set pergame [expr double($result) / double([sc_base numGames])]
    #append a [format "%.2f" $pergame]
    #append a " bytes per game"
    #tk_messageBox -type ok -parent .treeWin -title "Scid" -message $a
  }
  sc_game pop
  unbusyCursor .
  ::tree::refresh $baseNumber
}

################################################################################
# ::tree::best
#   Open/Close the window of best (highest-rated) tree games.
#
proc ::tree::best { baseNumber } {
  set w .treeBest$baseNumber
  if {[winfo exists $w]} {
    destroy $w
  } else {
    .treeWin$baseNumber.buttons.best state pressed
    ::windows::gamelist::Open $w "$::tr(TreeBestGames):" "best" $::tree(base$baseNumber) tree
    bind $w <Destroy> "+.treeWin$baseNumber.buttons.best state !pressed"
  }
}

################################################################################
# ::tree::graphRedraw
#   Redraws the tree graph window.
#
proc ::tree::graphRedraw { baseNumber } {
  .treeGraph$baseNumber.c itemconfigure text -width [expr {[winfo width .treeGraph$baseNumber.c] - 50}]
  .treeGraph$baseNumber.c coords text [expr {[winfo width .treeGraph$baseNumber.c] / 2}] 10
  ::utils::graph::configure tree$baseNumber -height [expr {[winfo height .treeGraph$baseNumber.c] - 100}]
  ::utils::graph::configure tree$baseNumber -width [expr {[winfo width .treeGraph$baseNumber.c] - 50}]
  ::utils::graph::redraw tree$baseNumber
}

################################################################################
# ::tree::graph
#   Updates the tree graph window, creating it if necessary.
#   bpress: the button/menu was selected => bring window to front
#
proc ::tree::graph { baseNumber {bpress 0}} {
  set w .treeGraph$baseNumber
  if {! [winfo exists .treeWin$baseNumber]} { return }
  if {! [winfo exists $w]} {
    toplevel $w
    setWinLocation $w
    bind $w <Escape> "destroy $w"
    bind $w <F1> {helpWindow Tree Graph}
    
    menu $w.menu
    $w configure -menu $w.menu
    $w.menu add cascade -label GraphFile -menu $w.menu.file
    menu $w.menu.file
    $w.menu.file add command -label GraphFileColor -command "::tools::graphs::Save color $w.c"
    $w.menu.file add command -label GraphFileGrey -command "::tools::graphs::Save gray $w.c"
    $w.menu.file add separator
    $w.menu.file add command -label GraphFileClose -command "destroy $w"
    
    canvas $w.c -width 500 -height 300
    pack $w.c -side top -fill both -expand yes
    $w.c create text 25 10 -tag text -justify center -width 1 -font font_Regular -anchor n
    update
    bind $w <Configure> "::tree::graphRedraw $baseNumber"
    bind $w.c <Button-1> "::tree::graph $baseNumber"
    ::setTitle $w "Scid: Tree Graph $baseNumber: [file tail [sc_base filename $baseNumber]]"
    # wm minsize $w 300 200
    standardShortcuts $w
    ::tree::configGraphMenus "" $baseNumber
  } elseif {$bpress == 1} {
    focus $w
    raise $w
  }

  $w.c itemconfigure text -width [expr {[winfo width $w.c] - 50}]
  $w.c coords text [expr {[winfo width $w.c] / 2}] 10
  set height [expr {[winfo height $w.c] - 100}]
  set width [expr {[winfo width $w.c] - 50}]
  ::utils::graph::create tree$baseNumber -width $width -height $height -xtop 25 -ytop 60 \
      -xmin 0.5 -xtick 1 -ytick 5 -font font_Small -canvas $w.c
  
  set data {}
  set xlabels {}
  set othersCount 0
  set numOthers 0
  set othersName "..."
  set count 0
  set othersScore 0.0
  set mean 50.0
  set totalGames 0
  set treeData [subst $[subst {::tree::treeData$baseNumber} ] ]
  # [.treeWin$baseNumber.f.tl get 0 end]
  
  set numTreeLines [llength $treeData]
  set totalLineIndex [expr $numTreeLines - 2]
  
  for {set i 0} {$i < [llength $treeData]} {incr i} {
    # Extract info from each line of the tree window:
    # Note we convert "," decimal char back to "." where necessary.
    set line [lindex $treeData $i]
    set mNum [string trim [string range $line  0  1]]
    set freq [string trim [string range $line 17 23]]
    set fpct [string trim [string range $line 25 29]]
    regsub -all {,} $fpct . fpct
    set move [string trim [string range $line  4 9]]
    set score [string trim [string range $line 33 37]]
    regsub -all {,} $score . score
    if {$score > 99.9} { set score 99.9 }
    # Check if this line is "TOTAL:" line:
    if {$i == $totalLineIndex} {
      set mean $score
      set totalGames $freq
    }
    # Add info for this move to the graph if necessary:
    if {[string index $line 2] == ":"  &&  [string compare "<end>" $move]} {
      if {$fpct < 1.0  ||  $freq < 5  ||  $i > 5} {
        incr othersCount $freq
        incr numOthers
        set othersScore [expr {$othersScore + (double($freq) * $score)}]
        set m $move
        if {$numOthers > 1} { set m "..." }
      } else {
        incr count
        lappend data $count
        lappend data $score
        lappend xlabels [list $count "$move ([expr round($score)]%)\n$freq: [expr round($fpct)]%"]
      }
    }
  }
  
  # Add extra bar for other moves if necessary:
  if {$numOthers > 0  &&  $totalGames > 0} {
    incr count
    set fpct [expr {double($othersCount) * 100.0 / double($totalGames)}]
    set sc [expr {round($othersScore / double($othersCount))}]
    set othersName "$m ($sc%)\n$othersCount: [expr round($fpct)]%"
    lappend data $count
    lappend data [expr {$othersScore / double($othersCount)}]
    lappend xlabels [list $count $othersName]
  }
  
  # Plot fake bounds data so graph at least shows range 40-65:
  ::utils::graph::data tree$baseNumber bounds -points 0 -lines 0 -bars 0 -coords {1 41 1 64}
  
  # Replot the graph:
  ::utils::graph::data tree$baseNumber data -color red -points 0 -lines 0 -bars 1 \
      -barwidth 0.75 -outline black -coords $data
  ::utils::graph::configure tree$baseNumber -xlabels $xlabels -xmax [expr {$count + 0.5}] \
      -hline [list {gray80 1 each 5} {gray50 1 each 10} {black 2 at 50} \
      {black 1 at 55} [list red 2 at $mean]] \
      -brect [list [list 0.5 55 [expr {$count + 0.5}] 50 LightSkyBlue1]]
  
  ::utils::graph::redraw tree$baseNumber
  set moves ""
  catch {set moves [sc_game firstMoves 0 -1]}
  if {[string length $moves] == 0} { set moves $::tr(StartPos) }
  set title "$moves ([::utils::thousands $totalGames] $::tr(games))"
  $w.c itemconfigure text -text $title
}

################################################################################
proc ::tree::configGraphMenus { lang baseNumber } {
  if {! [winfo exists .treeGraph$baseNumber]} { return }
  if {$lang == ""} { set lang $::language }
  set m .treeGraph$baseNumber.menu
  foreach idx {0} tag {File} {
    configMenuText $m $idx Graph$tag $lang
  }
  foreach idx {0 1 3} tag {Color Grey Close} {
    configMenuText $m.file $idx GraphFile$tag $lang
  }
}

# ################################################################################
proc ::tree::toggleRefresh { baseNumber } {
  global tree
  set b .treeWin$baseNumber.buttons.bStartStop
  
  if {$tree(autorefresh$baseNumber)} {
    $b configure -image tb_search_off
    set tree(autorefresh$baseNumber) 0
  } else  {
    $b configure -image tb_search_on
    set tree(autorefresh$baseNumber) 1
    ::tree::refresh $baseNumber
  }
}
################################################################################
#
################################################################################
proc ::tree::setCacheSize { base size } {
  sc_tree cachesize $base $size
}
################################################################################
#
################################################################################
proc ::tree::getCacheInfo { base } {
  set ci [sc_tree cacheinfo $base]
  tk_messageBox -title "Scid" -type ok -icon info \
      -message "Cache used : [lindex $ci 0] / [lindex $ci 1]"
  
}
################################################################################
# will go through all moves of all games of current base
################################################################################
set ::tree::cancelPrime 0

proc ::tree::primeWithBase {{ fillMask 0 }} {
  set ::tree::cancelPrime 0
  for {set g 1} { $g <= [sc_base numGames]} { incr g} {
    sc_game load $g
    ::tree::primeWithGame $fillMask
    if {$::tree::cancelPrime } { return }
  }
}
################################################################################
#
################################################################################
proc ::tree::primeWithGame { { fillMask 0 } } {
  set ::tree::totalMoves [countBaseMoves "singleGame" ]
  sc_move start
  if {$fillMask} { ::tree::mask::feedMask [ sc_pos fen ] }
  
  set ::tree::parsedMoves 0
  set ::tree::cancelPrime 0
  progressWindow "Scid: [tr TreeFileFill]" "$::tree::totalMoves moves" $::tr(Cancel) {
    set ::tree::cancelPrime 1
    for {set i 1 } {$i <= [sc_base count total]} {incr i} {
      catch { .treeWin$i.buttons.stop invoke }
    }
  }
  resetProgressWindow
  leftJustifyProgressWindow
  ::tree::parseGame $fillMask
  closeProgressWindow
  updateBoard -pgn
}

################################################################################
# parse one game and fill the list
################################################################################
proc ::tree::parseGame {{ fillMask 0 }} {
  if {$::tree::cancelPrime } { return  }
  ::tree::refresh
  if {$::tree::cancelPrime } { return }
  while {![sc_pos isAt vend]} {
    updateProgressWindow $::tree::parsedMoves $::tree::totalMoves
    
    # Go through all variants
    for {set v 0} {$v<[sc_var count]} {incr v} {
      # enter each var (beware the first move is played)
      set fen [ sc_pos fen ]
      sc_var enter $v
      if {$fillMask} { ::tree::mask::feedMask $fen }
      if {$::tree::cancelPrime } { return }
      if {$::tree::cancelPrime } { return }
      ::tree::parseVar $fillMask
      if {$::tree::cancelPrime } { return }
    }
    # now treat the main line
    set fen [ sc_pos fen ]
    sc_move forward
    if {$fillMask} { ::tree::mask::feedMask $fen }
    incr ::tree::parsedMoves
    if {$::tree::cancelPrime } { return }
    if {$::tree::cancelPrime } { return }
  }
}
################################################################################
# parse recursively variants.
################################################################################
proc ::tree::parseVar {{ fillMask 0 }} {
  while {![sc_pos isAt vend]} {
    # Go through all variants
    for {set v 0} {$v<[sc_var count]} {incr v} {
      set fen [ sc_pos fen ]
      sc_var enter $v
      if {$fillMask} { ::tree::mask::feedMask $fen }
      if {$::tree::cancelPrime } { return }
      if {$::tree::cancelPrime } { return }
      # we are at the start of a var, before the first move : start recursive calls
      parseVar $fillMask
      if {$::tree::cancelPrime } { return }
    }
    
    set fen [ sc_pos fen ]
    sc_move forward
    if {$fillMask} { ::tree::mask::feedMask $fen }
    incr ::tree::parsedMoves
    updateProgressWindow $::tree::parsedMoves $::tree::totalMoves
    if {$::tree::cancelPrime } { return }
    if {$::tree::cancelPrime } { return }
  }
  
  sc_var exit
}
################################################################################
# count moves that will fill the cache
################################################################################
proc ::tree::countBaseMoves { {args ""} } {
  set ::tree::total 0
  
  ################################################################################
  proc countParseGame {} {
    sc_move start
    
    while {![sc_pos isAt vend]} {
      for {set v 0} {$v<[sc_var count]} {incr v} {
        sc_var enter $v
        countParseVar
      }
      sc_move forward
      incr ::tree::total
    }
  }
  ################################################################################
  proc countParseVar {} {
    while {![sc_pos isAt vend]} {
      for {set v 0} {$v<[sc_var count]} {incr v} {
        sc_var enter $v
        countParseVar
        incr ::tree::total
      }
      sc_move forward
      incr ::tree::total
    }
    sc_var exit
  }
  
  if {$args == "singleGame"} {
    countParseGame
  } else {
    for {set g 1} { $g <= [sc_base numGames]} { incr g} {
      sc_game load $g
      countParseGame
    }
  }
  return $::tree::total
}

################################################################################
#
#                                 Mask namespace
#
#  All function calls with move in english
#  Images are 17x17
################################################################################
namespace eval ::tree::mask {
  
  # mask(fen) contains data for a position <fen> : ( moves, comment )
  # where moves is ( move nag color move_anno img1 img2 )
  array set mask {}
  set maskSerialized {}
  set maskFile ""
  set defaultColor white
  set emptyNag "  "
  set textComment ""
  set cacheFenIndex -1
  set dirty 0 ; # if Mask data has changed
  # Mask Search
  set searchMask_usenag 0
  set searchMask_usemarker0 0
  set searchMask_usemarker1 0
  set searchMask_usecolor 0
  set searchMask_usemovecomment 0
  set searchMask_useposcomment 0
  set displayMask_showNag 1
  set displayMask_showComment 1
  
  array set marker2image { Include tb_tick Exclude tb_cross MainLine tb_mainline Bookmark tb_bkm \
        White tb_white Black tb_black \
        NewLine tb_new ToBeVerified tb_rfilter ToTrain tb_msearch Dubious tb_help ToRemove tb_cut }
  set maxRecent 10
}
################################################################################
#
################################################################################
proc ::tree::mask::open { {filename ""} } {
  global ::tree::mask::maskSerialized ::tree::mask::mask ::tree::mask::recentMask
  
  if {$filename == ""} {
    set types {
      {{Tree Mask Files}       {.stm}        }
    }
    set filename [tk_getOpenFile -initialdir $::initialDir(stm) -filetypes $types -defaultextension ".stm"]
	 set ::initialDir(stm) [file dirname $filename]
  }
  
  if {$filename != ""} {
    ::tree::mask::askForSave
    array unset ::tree::mask::mask
    array set ::tree::mask::mask {}
    source $filename
    array set mask $maskSerialized
    set maskSerialized {}
    set ::tree::mask::maskFile $filename
    set ::tree::mask::dirty 0
    ::tree::refresh
    
    if { [lsearch $recentMask $filename ] == -1 } {
      set recentMask [ linsert $recentMask 0 $filename]
      if {[llength $recentMask] > $::tree::mask::maxRecent } {
        set recentMask [ lreplace $recentMask  [ expr $::tree::mask::maxRecent -1 ] end ]
      }
      
      # update recent masks menu entry
      for {set i 1} {$i <= [sc_base count total]} {incr i} {
        set w .treeWin$i
        if { [winfo exists $w] } {
          $w.menu.mask.recent delete 0 end
          foreach f $::tree::mask::recentMask {
            $w.menu.mask.recent add command -label $f -command "::tree::mask::open $f"
          }
        }
      }
      
    }
  }
  
}
################################################################################
#
################################################################################
proc ::tree::mask::askForSave {} {
  if {$::tree::mask::dirty} {
    set answer [tk_messageBox -title Scid -icon warning -type yesno \
        -message "[ tr DoYouWantToSaveFirst ]\n$::tree::mask::maskFile ?"]
    if {$answer == "yes"} {
      ::tree::mask::save
    }
  }
}
################################################################################
#
################################################################################
proc ::tree::mask::new {} {
  
  set types {
    {{Tree Mask Files}       {.stm}        }
  }
  set filename [tk_getSaveFile -filetypes $types -defaultextension ".stm"]
  
  if {$filename != ""} {
    if {[file extension $filename] != ".stm" } {
      append filename ".stm"
    }
    ::tree::mask::askForSave
    set ::tree::mask::dirty 0
    set ::tree::mask::maskFile $filename
    array unset ::tree::mask::mask
    array set ::tree::mask::mask {}
    ::tree::refresh
  }
}
################################################################################
#
################################################################################
proc ::tree::mask::close {} {
  if { $::tree::mask::maskFile == "" } {
    return
  }
  ::tree::mask::askForSave
  set ::tree::mask::dirty 0
  array unset ::tree::mask::mask
  array set ::tree::mask::mask {}
  set ::tree::mask::maskFile ""
  ::tree::refresh
}
################################################################################
#
################################################################################
proc ::tree::mask::save {} {
  set f [ ::open $::tree::mask::maskFile w ]
  puts $f "set ::tree::mask::maskSerialized [list [array get ::tree::mask::mask]]"
  ::close $f
  set ::tree::mask::dirty 0
}
################################################################################
#
################################################################################
proc ::tree::mask::contextMenu {win move x y xc yc} {
  update idletasks
  
  set mctxt $win.ctxtMenu
  if { [winfo exists $mctxt] } {
    destroy $mctxt
  }
  
  if {$move == "dummy"} {
    set state "disabled"
  } else  {
    set state "normal"
  }
  menu $mctxt
  $mctxt add command -label [tr AddToMask] -command "::tree::mask::addToMask $move" -state $state
  $mctxt add command -label [tr RemoveFromMask] -command "::tree::mask::removeFromMask $move" -state $state
  $mctxt add separator
  
  menu $mctxt.nag
  $mctxt add cascade -label [tr Nag] -menu $mctxt.nag -state $state
  
  foreach nag [ list "!!" " !" "!?" "?!" " ?" "??" " ~" [::tr "None"]  ] {
    $mctxt.nag add command -label $nag -command "::tree::mask::setNag [list $move $nag]" -state $state
  }
  
  foreach j { 0 1 } {
    menu $mctxt.image$j
    $mctxt add cascade -label "[tr Marker] [expr $j +1]" -menu $mctxt.image$j -state $state
    foreach e { Include Exclude MainLine Bookmark White Black NewLine ToBeVerified ToTrain Dubious ToRemove } {
      set i  $::tree::mask::marker2image($e)
      $mctxt.image$j add command -label [ tr $e ] -image $i -compound left -command "::tree::mask::setImage $move $i $j"
    }
    $mctxt.image$j add command -label [tr NoMarker] -command "::tree::mask::setImage $move {} $j"
  }
  menu $mctxt.color
  $mctxt add cascade -label [tr ColorMarker] -menu $mctxt.color  -state $state
  foreach c { "White" "Green" "Yellow" "Blue" "Red"} {
    $mctxt.color add command -label [ tr "${c}Mark" ] -background $c -command "::tree::mask::setColor $move $c"
  }
  
  $mctxt add separator
  $mctxt add command -label [ tr CommentMove] -command "::tree::mask::addComment $move" -state $state
  $mctxt add command -label [ tr CommentPosition] -command "::tree::mask::addComment"
  
  $mctxt add separator
  set lMatchMoves [sc_pos matchMoves ""]
  if {[llength $lMatchMoves ] > 16} {
    # split the moves in several menus
    for {set idxMenu 0} { $idxMenu <= [expr int([llength $lMatchMoves ] / 16) ]} {incr idxMenu} {
      menu $mctxt.matchmoves$idxMenu
      $mctxt add cascade -label "[ tr AddThisMoveToMask ] ([expr $idxMenu + 1 ])" -menu $mctxt.matchmoves$idxMenu
      for {set i 0} {$i < 16} {incr i} {
        if {[expr $i + $idxMenu * 16 +1] > [llength $lMatchMoves ] } {
          break
        }
        set m [lindex $lMatchMoves [expr $i + $idxMenu * 16]]
        if {$m == "OK"} { set m "O-O" }
        if {$m == "OQ"} { set m "O-O-O" }
        $mctxt.matchmoves$idxMenu add command -label [::trans $m] -command "::tree::mask::addToMask $m"
      }
    }
  } else  {
    menu $mctxt.matchmoves
    $mctxt add cascade -label [ tr AddThisMoveToMask ] -menu $mctxt.matchmoves
    foreach m [sc_pos matchMoves ""] {
      if {$m == "OK"} { set m "O-O" }
      if {$m == "OQ"} { set m "O-O-O" }
      $mctxt.matchmoves add command -label [::trans $m] -command "::tree::mask::addToMask $m"
    }
  }
  
  $mctxt post [winfo pointerx .] [winfo pointery .]
}
################################################################################
#
################################################################################
proc ::tree::mask::addToMask { move {fen ""} } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    set mask($fen) { {} {} }
  }
  set ::tree::mask::dirty 1
  set moves [ lindex $mask($fen) 0 ]
  if {[lsearch $moves $move] == -1} {
    lappend moves [list $move {} $::tree::mask::defaultColor {} {} {}]
    set newpos [lreplace $mask($fen) 0 0 $moves]
    set mask($fen) $newpos
    ::tree::refresh
  }
}
################################################################################
#
################################################################################
proc ::tree::mask::removeFromMask { move {fen ""} } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    return
  }
  set ::tree::mask::dirty 1
  
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm != -1} {
    set moves [lreplace $moves $idxm $idxm]
    lset mask($fen) 0 $moves
    ::tree::refresh
  }
  
  # if the position has no move left and no comment, unset it
  if { [llength [lindex $mask($fen) 0] ] == 0 && [lindex $mask($fen) 1] == "" } {
    array unset mask $fen
  }
}
################################################################################
# returns 1 if the move is already in mask
################################################################################
proc ::tree::mask::moveExists { move {fen ""} } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)] || $move == "\[end\]" } {
    return 0
  }
  set moves [ lindex $mask($fen) 0 ]
  if {[lsearch -regexp $moves "^$move *"] == -1} {
    return 0
  }
  return 1
}
################################################################################
# return the list of moves with their data
################################################################################
proc ::tree::mask::getAllMoves {} {
  global ::tree::mask::mask
  if {![info exists mask($::tree::mask::cacheFenIndex)]} {
    return ""
  }
  set moves [ lindex $mask($::tree::mask::cacheFenIndex) 0 ]
  return $moves
}
################################################################################
#
################################################################################
proc ::tree::mask::getColor { move {fen ""}} {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    return $::tree::mask::defaultColor
  }
  
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    return $::tree::mask::defaultColor
  }
  set col [ lindex $moves $idxm 2 ]
  
  return $col
}
################################################################################
#
################################################################################
proc ::tree::mask::setColor { move color {fen ""}} {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set ::tree::mask::dirty 1
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set newmove [lreplace [lindex $moves $idxm] 2 2 $color ]
  set moves [lreplace $moves $idxm $idxm $newmove ]
  set mask($fen) [ lreplace $mask($fen) 0 0 $moves ]
  ::tree::refresh
}
################################################################################
# defaults to "  " (2 spaces)
################################################################################
proc ::tree::mask::getNag { move { fen "" }} {
  global ::tree::mask::mask ::tree::mask::emptyNag
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    return $emptyNag
  }
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    return $emptyNag
  }
  set nag [ lindex $moves $idxm 1 ]
  if {$nag == ""} {
    set nag $emptyNag
  }
  if { [string length $nag] == 1} { set nag " $nag" }
  return $nag
}
################################################################################
#
################################################################################
proc ::tree::mask::setNag { move nag {fen ""} } {
  global ::tree::mask::mask
  
  if { $nag == [::tr "None"] } {
    set nag ""
  }
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)]} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set ::tree::mask::dirty 1
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set newmove [lreplace [lindex $moves $idxm] 1 1 $nag ]
  set moves [lreplace $moves $idxm $idxm $newmove ]
  set mask($fen) [ lreplace $mask($fen) 0 0 $moves ]
  ::tree::refresh
}
################################################################################
#
################################################################################
proc ::tree::mask::getComment { move { fen "" } } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if {![info exists mask($fen)] || $move == "" || $move == "\[end\]" } {
    return ""
  }
  
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    return ""
  }
  set comment [ lindex $moves $idxm 3 ]
  if {$comment == ""} {
    set comment "  "
  }
  return $comment
}
################################################################################
#
################################################################################
proc ::tree::mask::setComment { move comment { fen "" } } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  set comment [string trim $comment]
  
  if {![info exists mask($fen)]} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set ::tree::mask::dirty 1
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set newmove [lreplace [lindex $moves $idxm] 3 3 $comment ]
  set moves [lreplace $moves $idxm $idxm $newmove ]
  set mask($fen) [ lreplace $mask($fen) 0 0 $moves ]
  ::tree::refresh
}
################################################################################
#
################################################################################
proc ::tree::mask::getPositionComment {{fen ""}} {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  
  if { ! [ info exists mask($fen) ] } {
    return ""
  }
  
  set comment [ lindex $mask($fen) 1 ]
  set comment [ string trim $comment ]
  
  return $comment
}
################################################################################
#
################################################################################
proc ::tree::mask::setPositionComment { comment {fen ""} } {
  global ::tree::mask::mask
  
  if {$fen == ""} { set fen $::tree::mask::cacheFenIndex }
  set comment [ string trim $comment ]
  set ::tree::mask::dirty 1
  # add position automatically
  if {![info exists mask($fen)]} {
    set mask($fen) { {} {} }
  }
  
  set newpos [ lreplace $mask($fen) 1 1 $comment ]
  set mask($fen) $newpos
  ::tree::refresh
}
################################################################################
#
################################################################################
proc ::tree::mask::setImage { move img nmr } {
  global ::tree::mask::mask
  set fen $::tree::mask::cacheFenIndex
  if {![info exists mask($fen)]} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set ::tree::mask::dirty 1
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
    return
  }
  set loc [expr 4 + $nmr]
  set newmove [lreplace [lindex $moves $idxm] $loc $loc $img ]
  set moves [lreplace $moves $idxm $idxm $newmove ]
  set mask($fen) [ lreplace $mask($fen) 0 0 $moves ]
  
  ::tree::refresh
}
################################################################################
# nmr = 0 or 1 (two images per line)
################################################################################
proc ::tree::mask::getImage { move nmr } {
  global ::tree::mask::mask
  
  set fen $::tree::mask::cacheFenIndex
  if {![info exists mask($fen)]} {
    return tb_empty
  }
  set moves [ lindex $mask($fen) 0 ]
  set idxm [lsearch -regexp $moves "^$move *"]
  if { $idxm == -1} {
    return tb_empty
  }
  set loc [expr 4 + $nmr]
  set img [lindex $moves $idxm $loc]
  if {$img == ""} { set img tb_empty }
  return $img
}

################################################################################
# if move is null, this is a position comment
################################################################################
proc ::tree::mask::addComment { { move "" } } {
  
  # first check the move is present in Mask
  if { $move != "" } {
    if { ![::tree::mask::moveExists $move] } {
      tk_messageBox -title "Scid" -type ok -icon warning -message [ tr AddMoveToMaskFirst ]
      return
    }
  }
  set w .treeMaskAddComment
  toplevel .treeMaskAddComment
  if {$move == ""} {
    set oldComment [::tree::mask::getPositionComment]
    ::setTitle $w [::tr CommentPosition]
  } else  {
    set oldComment [::tree::mask::getComment $move ]
    ::setTitle $w [::tr CommentMove]
  }
  set oldComment [ string trim $oldComment ]
  autoscrollframe $w.f text $w.f.e -width 40 -height 5 -wrap word -setgrid 1
  $w.f.e insert end $oldComment
  ttk::button $w.ok -text OK -command "::tree::mask::updateComment $move ; destroy $w ; ::tree::refresh"
  pack  $w.f  -side top -expand 1 -fill both
  pack  $w.ok -side bottom
  focus $w.f.e
}
################################################################################
#
################################################################################
proc ::tree::mask::updateComment { { move "" } } {
  set e .treeMaskAddComment.f.e
  set newComment [$e get 1.0 end]
  set newComment [ string trim $newComment ]
  set ::tree::mask::dirty 1
  if {$move == ""} {
    ::tree::mask::setPositionComment $newComment
  } else  {
    ::tree::mask::setComment $move $newComment
  }
}

################################################################################
#
################################################################################
proc ::tree::mask::fillWithGame {} {
  if {$::tree::mask::maskFile == ""} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr OpenAMaskFileFirst]
    return
  }
  ::tree::primeWithGame 1
  set ::tree::mask::dirty 1
}
################################################################################
#
################################################################################
proc ::tree::mask::fillWithBase {} {
  if {$::tree::mask::maskFile == ""} {
    tk_messageBox -title "Scid" -type ok -icon warning -message [ tr OpenAMaskFileFirst]
    return
  }
  ::tree::primeWithBase 1
  set ::tree::mask::dirty 1
}
################################################################################
# Take current position information and fill the mask (move, nag, comments, etc)
################################################################################
proc ::tree::mask::feedMask { fen } {
  set stdNags { "!!" "!" "!?" "?!" "??" "~"}
  set fen [toShortFen $fen]
  set move [sc_game info previousMoveNT]
  set comment [sc_pos getComment $fen ]
  
  if {$move == ""} {
    set move "null"
  }
  
  # add move if not in mask
  if { ![moveExists $move $fen]} {
    addToMask $move $fen
  }
  
  if {$move == "null"} {
    set comment "$comment [getPositionComment]"
    setPositionComment $comment $fen
    return
  }
  
  # NAG
  set nag [string trim [sc_pos getNags]]
  if {$nag == 0} { set nag "" }
  if {$nag != ""} {
    # append the NAGs to comment if not standard
    if {[lsearch $stdNags $nag ] == -1 } {
      set comment "$nag $comment"
      set nag ""
    } else  {
      set oldNag [getNag $move]
      if {$oldNag != $::tree::mask::emptyNag && $oldNag != $nag} {
        set comment "<$oldNag>(?!?) $comment"
      }
      setNag $move $nag $fen
    }
  }
  
  # append comment
  set oldComment [getComment $move $fen]
  if { $oldComment != "" && $oldComment != $comment } {
    set comment "$oldComment\n$comment"
  }
  setComment $move $comment $fen
  
}
################################################################################
#  trim the fen to keep position data only
################################################################################
proc ::tree::mask::toShortFen {fen} {
  set ret [lreplace $fen end-1 end]
  return $ret
}
################################################################################
#
################################################################################
proc ::tree::mask::setCacheFenIndex {} {
  set ::tree::mask::cacheFenIndex [ toShortFen [sc_pos fen] ]
}
################################################################################
#
################################################################################
proc ::tree::mask::infoMask {} {
  global ::tree::mask::mask
  
  set npos [array size mask]
  # set nmoves 0
  set nmoves [lindex [ split [array statistics mask] "\n" ] end ]
  # foreach pos $mask {
  # incr nmoves [llength [lindex $pos 1]]
  # }
  tk_messageBox -title "Mask info" -type ok -icon info -message "Mask : $::tree::mask::maskFile\n[tr Positions] : $npos\n[tr Moves] : $nmoves"
}
################################################################################
# Dumps mask content in a tree view widget
# The current position is the reference base
################################################################################
proc ::tree::mask::displayMask {} {
  global ::tree::mask::mask
  
  set w .displaymask
  if { [winfo exists $w] } {
    focus $w
    return
  }
  toplevel $w
  wm title $w [::tr DisplayMask]
  setWinLocation $w
  setWinSize $w
  
  ttk::button $w.bupdate -text [::tr "Update"] -command ::tree::mask::updateDisplayMask
  ttk::frame $w.f
  
  
  ttk::frame $w.fcb
  pack $w.fcb -fill x
  ttk::checkbutton $w.fcb.nag -text [::tr "Nag"] -variable ::tree::mask::displayMask_showNag -command ::tree::mask::updateDisplayMask
  ttk::checkbutton $w.fcb.comment -text [::tr "Comments"] -variable ::tree::mask::displayMask_showComment -command ::tree::mask::updateDisplayMask
  pack $w.fcb.nag $w.fcb.comment -side left
  
  pack $w.bupdate -fill x
  pack $w.f -fill both -expand 1
  
  ttk::treeview $w.f.tree -yscrollcommand "$w.f.ybar set" -xscrollcommand "$w.f.xbar set" -show tree -selectmode browse
  # workaround for a bug in treeview (xscrollbar does not get view size)
  $w.f.tree column #0 -minwidth 1200
  ttk::scrollbar $w.f.xbar -command "$w.f.tree xview" -orient horizontal
  ttk::scrollbar $w.f.ybar -command "$w.f.tree yview"
  
  pack $w.f.xbar -side bottom -fill x
  pack $w.f.ybar -side right -fill y
  pack $w.f.tree -side left -expand 1 -fill both
  
  updateDisplayMask
  
  bind $w <Escape> { destroy  .displaymask }
  bind $w <Configure>  {
    recordWinSize .displaymask
  }
  
  $w.f.tree tag bind dblClickTree <Double-Button-1> {::tree::mask::maskTreeUnfold }
}
################################################################################
#
################################################################################
proc ::tree::mask::updateDisplayMask {} {
  global ::tree::mask::mask
  
  set tree  .displaymask.f.tree
  $tree delete [ $tree children {} ]
  set fen [toShortFen [sc_pos fen] ]
  # use clipbase to enter a dummy game
  set currentbase [sc_base current]
  sc_base switch clipbase
  sc_game push copyfast
  
  if {[catch {sc_game startBoard $fen} err]} {
    puts "sc_game startBoard $fen => $err"
  }
  if { [info exists mask($fen) ] } {
    set moves [lindex $mask($fen) 0]
    ::tree::mask::populateDisplayMask $moves {} $fen {} [lindex $mask($fen) 1]
  }
  sc_game pop
  sc_base switch $currentbase
}
################################################################################
# creates a new image whose name is name1_name2, and concatenates two images.
# parameters are the markers, not the images names
################################################################################
proc ::tree::mask::createImage {marker1 marker2} {
  
  if {[lsearch [image names] "$marker1$marker2" ] != -1} {
    return
  }
  set img1 $::tree::mask::marker2image($marker1)
  set img2 $::tree::mask::marker2image($marker2)
  set w1 [image width $img1]
  set w2 [image width $img2]
  set h1 [image height $img1]
  set h2 [image height $img2]
  set margin 2
  image create photo $marker1$marker2 -height $h1 -width [expr $w1 + $w2 + $margin]
  $marker1$marker2 copy $img1 -from 0 0 -to 0 0
  $marker1$marker2 copy $img2 -from 0 0 -to [expr $w1 +$margin] 0
}
################################################################################
#
################################################################################
proc  ::tree::mask::maskTreeUnfold {} {
  set t .displaymask.f.tree
  
  proc unfold {id} {
    set t .displaymask.f.tree
    foreach c [$t children $id] {
      $t item $c -open true
      unfold $c
    }
  }
  
  set id [$t selection]
  unfold $id
}
################################################################################
# returns the first line of multi-line string (separated with \n)
################################################################################
proc ::tree::mask::trimToFirstLine {s} {
  set s [ lindex [ split $s "\n" ] 0 ]
  return $s
}
################################################################################
#
################################################################################
proc ::tree::mask::populateDisplayMask { moves parent fen fenSeen posComment} {
  global ::tree::mask::mask
  
  set posComment [ trimToFirstLine $posComment ]
  
  if { $posComment != ""} {
    set posComment "\[$posComment\] "
  }
  
  set tree .displaymask.f.tree
  
  foreach m $moves {
    set move [lindex $m 0]
    if {$move == "null"} { continue }
    set img ""
    if {[lindex $m 4] != "" && [lindex $m 5] == ""} {
      set img [lindex $m 4]
    }
    if {[lindex $m 4] == "" && [lindex $m 5] != ""} {
      set img [lindex $m 5]
    }
    if {[lindex $m 4] != "" && [lindex $m 5] != ""} {
      set l [array get ::tree::mask::marker2image]
      set idx [ lsearch $l [lindex $m 4] ]
      set mark1 [lindex $l [expr $idx -1 ] ]
      set idx [ lsearch $l [lindex $m 5] ]
      set mark2 [lindex $l [expr $idx -1 ] ]
      createImage $mark1 $mark2
      set img $mark1$mark2
    }
    
    set nag ""
    if { $::tree::mask::displayMask_showNag } {
      set nag [lindex $m 1]
    }
    
    if {[lindex $m 3] != "" && $::tree::mask::displayMask_showComment} {
      set move_comment " [lindex $m 3]"
      set move_comment [ trimToFirstLine $move_comment ]
    } else  {
      set move_comment ""
    }
    if { ! $::tree::mask::displayMask_showComment} {
      set posComment ""
    }
    set id [ $tree insert $parent end -text "$posComment[::trans $move][set nag]$move_comment" -image $img -tags dblClickTree ]
    if {[catch {sc_game startBoard $fen} err]} {
      puts "ERROR sc_game startBoard $fen => $err"
    }
    sc_move addSan $move
    
    set newfen [toShortFen [sc_pos fen] ]
    if {[lsearch $fenSeen $newfen] != -1} { return }
    if { [info exists mask($newfen) ] } {
      set newmoves [lindex $mask($newfen) 0]
      
      while { [llength $newmoves] == 1 } {
        lappend fenSeen $newfen
        sc_move addSan [ lindex $newmoves { 0 0 } ]
        set newfen [toShortFen [sc_pos fen] ]
        if {[lsearch $fenSeen $newfen] != -1} { return }
        lappend fenSeen $newfen
        if {[lindex $newmoves 0 3] != "" && $::tree::mask::displayMask_showComment } {
          set move_comment " [lindex $newmoves 0 3]"
          set move_comment [ trimToFirstLine $move_comment ]
        } else  {
          set move_comment ""
        }
        
        if {[lindex $newmoves 1] != "" && $::tree::mask::displayMask_showComment } {
          set pos_comment " \[[lindex $newmoves 1]\]"
          set pos_comment [ trimToFirstLine $pos_comment ]
        } else  {
          set pos_comment ""
        }
        set nag ""
        if { $::tree::mask::displayMask_showNag } {
          set nag [ lindex $newmoves { 0 1 }  ]
        }
        $tree item $id -text "[ $tree item $id -text ] $pos_comment[::trans [ lindex $newmoves { 0 0 }  ] ][ set nag  ]$move_comment"
        if { ! [info exists mask($newfen) ] } {
          break
        }
        set newmoves [lindex $mask($newfen) 0]
      }
      
      if { [info exists mask($newfen) ] } {
        set newmoves [lindex $mask($newfen) 0]
        ::tree::mask::populateDisplayMask $newmoves $id $newfen $fenSeen [lindex $mask($newfen) 1]
      }
    }
  }
  
}
################################################################################
#
################################################################################
proc ::tree::mask::searchMask { baseNumber } {
  
  set w .searchmask
  if { [winfo exists $w] } {
    focus $w
    return
  }
  toplevel $w
  wm title $w [::tr SearchMask]
  ttk::frame $w.f1
  ttk::frame $w.f2
  pack $w.f1 -side top -fill both -expand 1
  pack $w.f2 -side top -fill both -expand 1
  
  # NAG selection
  ttk::checkbutton $w.f1.nagl -text [tr Nag] -variable ::tree::mask::searchMask_usenag
  menu $w.f1.nagmenu
  ttk::menubutton $w.f1.nag -textvariable ::tree::mask::searchMask_nag -menu $w.f1.nagmenu -style pad0.TMenubutton
  set ::tree::mask::searchMask_nag  [::tr "None"]
  foreach nag [ list "!!" " !" "!?" "?!" " ?" "??" " ~" [::tr "None"]  ] {
    $w.f1.nagmenu add command -label $nag -command "set ::tree::mask::searchMask_nag $nag"
  }
  grid $w.f1.nagl -column 0 -row 0
  grid $w.f1.nag -column 0 -row 1
  
  # Markers 1 & 2
  foreach j { 0 1 } {
    ttk::checkbutton $w.f1.ml$j -text "[tr Marker] [expr $j +1]" -variable ::tree::mask::searchMask_usemarker$j
    menu $w.f1.menum$j
    ttk::menubutton $w.f1.m$j -textvariable ::tree::mask::searchMask_trm$j -menu $w.f1.menum$j -style pad0.TMenubutton
    set ::tree::mask::searchMask_trm$j [tr "Include"]
    set ::tree::mask::searchMask_m$j $::tree::mask::marker2image(Include)
    foreach e { Include Exclude MainLine Bookmark White Black NewLine ToBeVerified ToTrain Dubious ToRemove } {
      set i $::tree::mask::marker2image($e)
      $w.f1.menum$j add command -label [ tr $e ] -image $i -compound left \
          -command "set ::tree::mask::searchMask_trm$j \"[tr $e ]\" ; set ::tree::mask::searchMask_m$j $i"
    }
    grid $w.f1.ml$j -column [expr 1 + $j] -row 0
    grid $w.f1.m$j -column [expr 1 + $j] -row 1
  }
  
  # Color
  ttk::checkbutton $w.f1.colorl -text [tr ColorMarker] -variable ::tree::mask::searchMask_usecolor
  menu $w.f1.colormenu
  ttk::menubutton $w.f1.color -textvariable ::tree::mask::searchMask_trcolor -menu $w.f1.colormenu  -style pad0.TMenubutton
  set ::tree::mask::searchMask_trcolor  [::tr "White"]
  set ::tree::mask::searchMask_color "White"
  foreach c { "White" "Green" "Yellow" "Blue" "Red"} {
    $w.f1.colormenu add command -label [ tr "${c}Mark" ] \
        -command "set ::tree::mask::searchMask_trcolor [ tr ${c}Mark ] ; set ::tree::mask::searchMask_color $c"
  }
  grid $w.f1.colorl -column 3 -row 0
  grid $w.f1.color -column 3 -row 1
  
  # Move annotation
  ttk::checkbutton $w.f1.movecommentl -text "Move comment" -variable ::tree::mask::searchMask_usemovecomment
  ttk::entry $w.f1.movecomment -textvariable ::tree::mask::searchMask_movecomment -width 12
  grid $w.f1.movecommentl -column 4 -row 0
  grid $w.f1.movecomment -column 4 -row 1
  
  # Position annotation
  ttk::checkbutton $w.f1.poscommentl -text "Position comment" -variable ::tree::mask::searchMask_useposcomment
  ttk::entry $w.f1.poscomment -textvariable ::tree::mask::searchMask_poscomment -width 12
  grid $w.f1.poscommentl -column 5 -row 0
  grid $w.f1.poscomment -column 5 -row 1
  
  ttk::button $w.f1.search -text [tr "Search"] -command " ::tree::mask::perfomSearch $baseNumber "
  grid $w.f1.search -column 6 -row 0 -rowspan 2
  
  # display search result
  text $w.f2.text -yscrollcommand "$w.f2.ybar set" -height 50
  ttk::scrollbar $w.f2.ybar -command "$w.f2.text yview"
  pack $w.f2.ybar -side left -fill y
  pack $w.f2.text -side left -fill both -expand yes
  
  setWinLocation $w
  setWinSize $w
  
  bind $w.f2.text <ButtonPress-1> " ::tree::mask::searchClick %x %y %W $baseNumber "
  bind $w <Escape> { destroy  .searchmask }
  bind $w <Configure> "recordWinSize $w"
  
}
################################################################################
#
################################################################################
proc  ::tree::mask::perfomSearch  { baseNumber } {
  global ::tree::mask::mask
  set t .searchmask.f2.text
  # contains the search result (FEN)
  set res {}
  
  set pos_count 0
  set move_count 0
  set pos_total 0
  set move_total 0
  
  $t delete 1.0 end
  
  # Display FEN + moves and comments. Clicking on a line starts filtering current base
  foreach fen [array names mask] {
    incr pos_total
    
    # Position comment
    set poscomment [ lindex $mask($fen) 1 ]
    if { $::tree::mask::searchMask_useposcomment  } {
      if { [string match -nocase "*$::tree::mask::searchMask_poscomment*"  $poscomment] } {
        lappend res "$fen $poscomment"
        incr pos_count
      } else  {
        continue
      }
    }
    
    set moves [ lindex $mask($fen) 0 ]
    foreach m $moves {
      incr move_total
      
      # NAG
      if { $::tree::mask::searchMask_usenag } {
        set nag $::tree::mask::searchMask_nag
        if { $nag == [::tr "None"] } {  set nag ""  }
        if { [ string trim [lindex $m 1] ] != $nag } {
          continue
        }
      }
      
      # Markers 1 & 2
      if { $::tree::mask::searchMask_usemarker0 } {
        if { $::tree::mask::searchMask_m0 != [lindex $m 4] } {
          continue
        }
      }
      if { $::tree::mask::searchMask_usemarker1 } {
        if { $::tree::mask::searchMask_m1 != [lindex $m 5] } {
          continue
        }
      }
      
      # Color
      if { $::tree::mask::searchMask_usecolor } {
        if { [ string compare -nocase $::tree::mask::searchMask_color [lindex $m 2] ] != 0 } {
          continue
        }
      }
      
      # Move annotation
      set movecomment [lindex $m 3]
      if { $::tree::mask::searchMask_usemovecomment } {
        if {  ! [string match -nocase "*$::tree::mask::searchMask_movecomment*"  $movecomment]  } {
          continue
        }
      }
      
      lappend res "$fen [::trans [lindex $m 0]] $movecomment"
      incr move_count
    }
  }
  
  # output the result
  foreach l $res {
    $t insert end "$l\n"
  }
  wm title .searchmask "[::tr SearchMask] [::tr Positions] $pos_count / $pos_total - [::tr moves] $move_count / $move_total"
}
################################################################################
#
################################################################################
proc  ::tree::mask::searchClick {x y win baseNumber} {
  set idx [ $win index @$x,$y ]
  if { [ scan $idx "%d.%d" l c ] != 2 } {
    # should never happen
    return
  }
  set elt [$win get $l.0 $l.end]
  
  if {[llength $elt] < 4} {
    return
  }
  
  set fen [ lrange $elt 0 3 ]
  
  # load the position in a temporary game (in clipbase), update the Trees then switch to Tree's base
  sc_base switch clipbase
  sc_game push copyfast
  
  if {[catch {sc_game startBoard $fen} err]} {
    puts "sc_game startBoard $fen => $err"
  } else  {
    # TODO : call sc_search board maybe wiser ?
    ::tree::refresh
    # updateBoard -pgn
  }
  
  sc_game pop

  sc_base switch $baseNumber
  # ::file::SwitchToBase $baseNumber
  if {[sc_filter first != 0]} {
    ::game::Load [sc_filter first]
  } else  {
    updateBoard -pgn
  }
  
  # updateBoard -pgn
  
}
################################################################################
#
################################################################################

######################################################################
### Crosstable window

namespace eval ::crosstab {}

set crosstab(sort) score
set crosstab(type) auto
set crosstab(ages) "+ages"
set crosstab(colors) "+colors"
set crosstab(ratings) "+ratings"
set crosstab(countries) "+countries"
set crosstab(titles) "+titles"
set crosstab(groups) "-groups"
set crosstab(breaks) "-breaks"
set crosstab(deleted) "-deleted"
set crosstab(cnumbers) "-numcolumns"
set crosstab(text) hypertext

proc ::crosstab::ConfigMenus {{lang ""}} {
  if {! [winfo exists .crosstabWin]} { return }
  if {$lang == ""} { set lang $::language }
  set m .crosstabWin.menu
  foreach idx {0 1 2 3 4 5} tag {File Edit Opt Sort Color Help} {
    configMenuText $m $idx Crosstab$tag $lang
  }
  foreach idx {0 1 2 4} tag {Text Html LaTeX Close} {
    configMenuText $m.file $idx CrosstabFile$tag $lang
  }
  foreach idx {0 1 2} tag {Event Site Date} {
    configMenuText $m.edit $idx CrosstabEdit$tag $lang
  }
  foreach idx {0 1 2 3 5 6 7 8 9 10 12 13 15} tag {All Swiss Knockout Auto Ages Nats Ratings Titles Breaks Deleted Colors ColumnNumbers Group} {
    configMenuText $m.opt $idx CrosstabOpt$tag $lang
  }
  foreach idx {0 1 2} tag {Name Rating Score} {
    configMenuText $m.sort $idx CrosstabSort$tag $lang
  }
  foreach idx {0 1} tag {Plain Hyper} {
    configMenuText $m.color $idx CrosstabColor$tag $lang
  }
  foreach idx {0 1} tag {Cross Index} {
    configMenuText $m.helpmenu $idx CrosstabHelp$tag $lang
  }
}

proc toggleCrosstabWin {} {
  set w .crosstabWin
  if {[winfo exists $w]} {
    destroy $w
  } else {
    crosstabWin
  }
}

proc ::crosstab::RefreshIfOpen {} {
  set w .crosstabWin
  if {[winfo exists $w]} { crosstabWin }
}

proc ::crosstab::Open {} {
  global crosstab
  set w .crosstabWin
  if {[::createToplevel $w] == "already_exists"} {
    ::crosstab::Refresh
    return
  }

  ::setTitle $w "Scid: [tr ToolsCross]"
  wm minsize $w 50 5
  setWinLocation $w
  
  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label CrosstabFile -menu $w.menu.file
  $w.menu add cascade -label CrosstabEdit -menu $w.menu.edit
  $w.menu add cascade -label CrosstabOpt -menu $w.menu.opt
  $w.menu add cascade -label CrosstabSort -menu $w.menu.sort
  $w.menu add cascade -label CrosstabText -menu $w.menu.color
  $w.menu add cascade -label CrosstabHelp -menu $w.menu.helpmenu
  foreach i {file edit opt sort color helpmenu} {
    menu $w.menu.$i -tearoff 0
  }
  
  $w.menu.file add command -label CrosstabFileText -command {
    set ftype {
      { "Text files" {".txt"} }
      { "All files"  {"*"}    }
    }
    set fname [tk_getSaveFile -initialdir [pwd] -filetypes $ftype  -title "Save Crosstable"]
    if {$fname != ""} {
      if {[catch {set tempfile [open $fname w]}]} {
        tk_messageBox -title "Scid: Error saving file" -type ok -icon warning -message "Unable to save the file: $fname\n\n"
      } else {
        puts -nonewline $tempfile [.crosstabWin.f.text get 1.0 end]
        close $tempfile
      }
    }
  }
  $w.menu.file add command -label CrosstabFileHtml -command {
    set ftype {
      { "HTML files" {".html" ".htm"} }
      { "All files"  {"*"}    }
    }
    set fname [tk_getSaveFile -initialdir $::initialDir(html) -filetypes $ftype  -title "Save Crosstable as HTML"]
    if {$fname != ""} {
      if {[file extension $fname] != ".html" && [file extension $fname] != ".htm" } {
        append fname ".html"
      }
      if {[catch {set tempfile [open $fname w]}]} {
        tk_messageBox -title "Scid: Error saving file" -type ok -icon warning -message "Unable to save the file: $fname\n\n"
      } else {
        catch {sc_game crosstable html $crosstab(sort) $crosstab(type) \
              $crosstab(ratings) $crosstab(countries) $crosstab(titles) \
              $crosstab(colors) $crosstab(groups) $crosstab(ages) \
              $crosstab(breaks) $crosstab(cnumbers) $crosstab(deleted)} \
            result
        puts $tempfile $result
        close $tempfile
      }
    }
  }
  $w.menu.file add command -label CrosstabFileLaTeX -command {
    set ftype {
      { "LaTeX files" {".tex" ".ltx"} }
      { "All files"  {"*"}    }
    }
    set fname [tk_getSaveFile -initialdir $::initialDir(tex) -filetypes $ftype  -title "Save Crosstable as LaTeX"]
    if {$fname != ""} {
      if {[file extension $fname] != ".tex" && [file extension $fname] != ".ltx" } {
        append fname ".tex"
      }
      if {[catch {set tempfile [open $fname w]}]} {
        tk_messageBox -title "Scid: Error saving file" \
            -type ok -icon warning \
            -message "Unable to save the file: $fname\n\n"
      } else {
        catch {sc_game crosstable latex $crosstab(sort) $crosstab(type) \
              $crosstab(ratings) $crosstab(countries) $crosstab(titles) \
              $crosstab(colors) $crosstab(groups) $crosstab(ages) \
              $crosstab(breaks) $crosstab(cnumbers) $crosstab(deleted)} \
            result
        puts $tempfile $result
        close $tempfile
      }
    }
  }
  $w.menu.file add separator
  $w.menu.file add command -label CrosstabFileClose \
      -command { .crosstabWin.b.cancel invoke } -accelerator Esc
  
  $w.menu.edit add command -label CrosstabEditEvent -command {
    makeNameEditor
    setNameEditorType event
    set editName [sc_game info event]
    set editNameNew ""
    set editNameSelect crosstable
  }
  $w.menu.edit add command -label CrosstabEditSite -command {
    makeNameEditor
    setNameEditorType site
    set editName [sc_game info site]
    set editNameNew ""
    set editNameSelect crosstable
  }
  $w.menu.edit add command -label CrosstabEditDate -command {
    makeNameEditor
    setNameEditorType date
    set editNameNew " "
    set editDate [sc_game info date]
    set editDateNew [sc_game info date]
    set editNameSelect crosstable
  }
  
  $w.menu.opt add radiobutton -label CrosstabOptAll \
      -variable crosstab(type) -value allplay -command crosstabWin
  $w.menu.opt add radiobutton -label CrosstabOptSwiss \
      -variable crosstab(type) -value swiss -command crosstabWin
  $w.menu.opt add radiobutton -label CrosstabOptKnockout \
      -variable crosstab(type) -value knockout -command crosstabWin
  $w.menu.opt add radiobutton -label CrosstabOptAuto \
      -variable crosstab(type) -value auto -command crosstabWin
  $w.menu.opt add separator
  $w.menu.opt add checkbutton -label CrosstabOptAges \
      -variable crosstab(ages) -onvalue "+ages" \
      -offvalue "-ages" -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptNats \
      -variable crosstab(countries) -onvalue "+countries" \
      -offvalue "-countries" -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptRatings \
      -variable crosstab(ratings) -onvalue "+ratings" -offvalue "-ratings" \
      -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptTitles \
      -variable crosstab(titles) -onvalue "+titles" -offvalue "-titles" \
      -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptBreaks \
      -variable crosstab(breaks) -onvalue "+breaks" \
      -offvalue "-breaks" -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptDeleted \
      -variable crosstab(deleted) -onvalue "+deleted" \
      -offvalue "-deleted" -command crosstabWin
  $w.menu.opt add separator
  $w.menu.opt add checkbutton -label CrosstabOptColors \
      -underline 0 -variable crosstab(colors) \
      -onvalue "+colors" -offvalue "-colors" -command crosstabWin
  $w.menu.opt add checkbutton -label CrosstabOptColumnNumbers \
      -underline 0 -variable crosstab(cnumbers) \
      -onvalue "+numcolumns" -offvalue "-numcolumns" -command crosstabWin
  $w.menu.opt add separator
  $w.menu.opt add checkbutton -label CrosstabOptGroup \
      -underline 0 -variable crosstab(groups) \
      -onvalue "+groups" -offvalue "-groups" -command crosstabWin
  
  $w.menu.sort add radiobutton -label CrosstabSortName \
      -variable crosstab(sort) -value name -command crosstabWin
  $w.menu.sort add radiobutton -label CrosstabSortRating \
      -variable crosstab(sort) -value rating -command crosstabWin
  $w.menu.sort add radiobutton -label CrosstabSortScore \
      -variable crosstab(sort) -value score -command crosstabWin
  
  $w.menu.color add radiobutton -label CrosstabColorPlain \
      -variable crosstab(text) -value plain -command crosstabWin
  $w.menu.color add radiobutton -label CrosstabColorHyper \
      -variable crosstab(text) -value hypertext -command crosstabWin
  
  $w.menu.helpmenu add command -label CrosstabHelpCross \
      -accelerator F1 -command {helpWindow Crosstable}
  $w.menu.helpmenu add command -label CrosstabHelpIndex \
      -command {helpWindow Index}
  
  ::crosstab::ConfigMenus
  
  frame $w.b
  pack $w.b -side bottom -fill x
  frame $w.f
  pack $w.f -side top -fill both -expand true
  text $w.f.text -width $::winWidth($w) -height $::winHeight($w) \
      -wrap none -font font_Fixed \
      -background white -yscroll "$w.f.ybar set" \
      -xscroll "$w.f.xbar set" -setgrid 1 -cursor top_left_arrow
  ::htext::init $w.f.text
  $w.f.text tag configure bgGray -background gray95
  scrollbar $w.f.ybar -command "$w.f.text yview"
  scrollbar $w.f.xbar -orient horizontal -command "$w.f.text xview"
  grid $w.f.text -row 0 -column 0 -sticky nesw
  grid $w.f.ybar -row 0 -column 1 -sticky nesw
  grid $w.f.xbar -row 1 -column 0 -sticky nesw
  grid rowconfig $w.f 0 -weight 1 -minsize 0
  grid columnconfig $w.f 0 -weight 1 -minsize 0
  button $w.b.stop -textvar ::tr(Stop) -state disabled \
      -command { set ::htext::interrupt 1 }
  menubutton $w.b.type -text "" -menu $w.b.type.menu \
      -relief raised -bd 2 -indicatoron 1
  menu $w.b.type.menu
  $w.b.type.menu add radiobutton -label [tr CrosstabOptAll] \
      -variable crosstab(type) -value allplay -command crosstabWin
  $w.b.type.menu add radiobutton -label [tr CrosstabOptSwiss] \
      -variable crosstab(type) -value swiss -command crosstabWin
  $w.b.type.menu add radiobutton -label [tr CrosstabOptKnockout] \
      -variable crosstab(type) -value knockout -command crosstabWin
  $w.b.type.menu add radiobutton -label [tr CrosstabOptAuto] \
      -variable crosstab(type) -value auto -command crosstabWin
  button $w.b.update -textvar ::tr(Update) -command crosstabWin
  button $w.b.cancel -textvar ::tr(Close) -command {
    focus .
    destroy .crosstabWin
  }
  button $w.b.setfilter -textvar ::tr(SetFilter) -command {
    sc_filter reset
    sc_filter negate
    sc_game crosstable filter
    ::notify::DatabaseChanged
  }
  button $w.b.addfilter -textvar ::tr(AddToFilter) -command {
    sc_game crosstable filter
    ::notify::DatabaseChanged
  }
  pack $w.b.cancel $w.b.update $w.b.type \
      -side right -pady 3 -padx 5
  pack $w.b.setfilter $w.b.addfilter -side left -pady 3 -padx 5
  
  bind $w <Configure> "recordWinSize $w"
  bind $w <F1> { helpWindow Crosstable }
  bind $w <Return> { .crosstabWin.b.update invoke }
  bind $w <Escape> { .crosstabWin.b.cancel invoke }
  bind $w <Up> { .crosstabWin.f.text yview scroll -1 units }
  bind $w <Down> { .crosstabWin.f.text yview scroll 1 units }
  bind $w <Prior> { .crosstabWin.f.text yview scroll -1 pages }
  bind $w <Next> { .crosstabWin.f.text yview scroll 1 pages }
  bind $w <Left> { .crosstabWin.f.text xview scroll -1 units }
  bind $w <Right> { .crosstabWin.f.text xview scroll 1 units }
  bind $w <Key-Home> {
    .crosstabWin.f.text xview moveto 0
  }
  bind $w <Key-End> {
    .crosstabWin.f.text xview moveto 0.99
  }
  standardShortcuts $w
  
  # MouseWheel Bindings:
  bind $w <MouseWheel> { .crosstabWin.f.text yview scroll [expr {- (%D / 120)}] units}
  if {! $::windowsOS} {
    bind $w <Button-4> { .crosstabWin.f.text yview scroll -1 units }
    bind $w <Button-5> { .crosstabWin.f.text yview scroll  1 units }
  }
  
  ::createToplevelFinalize $w
  ::crosstab::Refresh
}

proc crosstabWin {} {
  ::crosstab::Open
}

proc ::crosstab::Refresh {} {
  global crosstab
  set w .crosstabWin
  if {! [winfo exists $w]} { return }
  
  switch $crosstab(type) {
    allplay  { $w.b.type configure -text [tr CrosstabOptAll] }
    swiss    { $w.b.type configure -text [tr CrosstabOptSwiss] }
    knockout { $w.b.type configure -text [tr CrosstabOptKnockout] }
    auto     { $w.b.type configure -text [tr CrosstabOptAuto] }
  }
  $w.f.text configure -state normal
  $w.f.text delete 1.0 end
  busyCursor .
  $w.f.text configure -state disabled
  update idle
  $w.b.stop configure -state normal
  foreach button {update cancel setfilter addfilter type} {
    $w.b.$button configure -state disabled
  }
  pack $w.b.stop -side right -padx 5 -pady 3
  catch {grab $w.b.stop}
  update
  catch {sc_game crosstable $crosstab(text) $crosstab(sort) $crosstab(type) \
        $crosstab(ratings) $crosstab(countries) $crosstab(titles) \
        $crosstab(colors) $crosstab(groups) $crosstab(ages) \
        $crosstab(breaks) $crosstab(cnumbers) $crosstab(deleted)} result
  $w.f.text configure -state normal
  if {$crosstab(text) == "plain"} {
    $w.f.text insert end $result
  } else {
    ::htext::display $w.f.text $result
  }
  # Shade every second line to help readability:
  set lastLineNum [expr {int([$w.f.text index end])}]
  for {set i 2} {$i <= $lastLineNum} {incr i 2} {
    $w.f.text tag add bgGray $i.0 "$i.0 lineend +1c"
  }
  unbusyCursor .
  catch {grab release $w.b.stop}
  $w.b.stop configure -state disabled
  pack forget $w.b.stop
  foreach button {update cancel setfilter addfilter type} {
    $w.b.$button configure -state normal
  }
  $w.f.text configure -state disabled
  raiseWin $w
}

### file pfinder.tcl: part of Scid.

####################
# Player List window

namespace eval ::plist {}

set plistWin 0

set ::plist::sort Name

proc ::plist::defaults {} {
  set ::plist::name ""
  set ::plist::minGames 0
  set ::plist::maxGames 9999
  set ::plist::minElo 0
  set ::plist::maxElo [sc_info limit elo]
  set ::plist::size 50
}

::plist::defaults

trace variable ::plist::minElo w [list ::utils::validate::Integer [sc_info limit elo] 0]
trace variable ::plist::maxElo w [list ::utils::validate::Integer [sc_info limit elo] 0]
trace variable ::plist::minGames w [list ::utils::validate::Integer 9999 0]
trace variable ::plist::maxGames w [list ::utils::validate::Integer 9999 0]

proc ::plist::toggle {} {
  set w .plist
  if {[winfo exists $w]} {
    destroy $w
  } else {
    ::plist::Open
  }
}

proc ::plist::Open {} {
  global plistWin
  set w .plist
  if {[winfo exists .plist]} { return }
  set plistWin 1

  toplevel $w
  wm title $w "Scid: [tr WindowsPList]"
  setWinLocation $w
  bind $w <Configure> "recordWinSize $w"

  bind $w <F1> {helpWindow PList}
  bind $w <Escape> "$w.b.close invoke"
  bind $w <Return> ::plist::refresh
  bind $w <Destroy> { set plistWin 0 }
  standardShortcuts $w
  bind $w <Up> "$w.t.text yview scroll -1 units"
  bind $w <Down> "$w.t.text yview scroll 1 units"
  bind $w <Prior> "$w.t.text yview scroll -1 pages"
  bind $w <Next> "$w.t.text yview scroll 1 pages"
  bind $w <Key-Home> "$w.t.text yview moveto 0"
  bind $w <Key-End> "$w.t.text yview moveto 0.99"
  #bindMouseWheel $w $w.t.text

  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label PListFile -menu $w.menu.file
  menu $w.menu.file
  $w.menu.file add command -label Update -command ::plist::refresh
  $w.menu.file add command -label Close -command "destroy $w"
  $w.menu add cascade -label PListSort -menu $w.menu.sort
  menu $w.menu.sort
  foreach name {Name Elo Games Oldest Newest} {
    $w.menu.sort add radiobutton -label $name -variable ::plist::sort \
      -value $name -command ::plist::refresh
  }

  foreach i {t o1 o2 o3 b} {frame $w.$i}
  $w.t configure -relief sunken -borderwidth 1
  text $w.t.text -width 55 -height 25 -font font_Small -wrap none \
    -fg black -bg white -yscrollcommand "$w.t.ybar set" -setgrid 1 \
    -cursor top_left_arrow -xscrollcommand "$w.t.xbar set" -borderwidth 0
  scrollbar $w.t.ybar -command "$w.t.text yview" -takefocus 0
  scrollbar $w.t.xbar -orient horiz -command "$w.t.text xview" -takefocus 0
  set xwidth [font measure [$w.t.text cget -font] "0"]
  set tablist {}
  foreach {tab justify} {4 r 10 r 18 r 24 r 32 r 35 l} {
    set tabwidth [expr {$xwidth * $tab} ]
    lappend tablist $tabwidth $justify
  }
  $w.t.text configure -tabs $tablist
  $w.t.text tag configure ng -foreground darkBlue
  $w.t.text tag configure date -foreground darkRed
  $w.t.text tag configure elo -foreground darkGreen
  $w.t.text tag configure name -foreground black
  $w.t.text tag configure title -background lightSteelBlue; #-font font_SmallBold

  set font font_Small
  set fbold font_SmallBold

  set f $w.o1
  label $f.nlabel -text $::tr(Player:) -font $fbold
  ttk::combobox $f.name -textvariable ::plist::name -width 20
  ::utils::history::SetCombobox ::plist::name $f.name
  bindFocusColors $f.name
  focus $f.name
  label $f.size -text $::tr(TmtLimit:) -font $fbold
  ttk::combobox $f.esize -width 4 -justify right -textvar ::plist::size -values {50 100 200 500 1000}
  trace variable ::plist::size w {::utils::validate::Integer 1000 0}
  bindFocusColors $f.esize
  # foreach n {50 100 200 500 1000} {
    # $f.esize list insert end $n
  # }
  pack $f.esize $f.size -side right
  pack $f.nlabel $f.name -side left

  set f $w.o2
  label $f.elo -text "[tr PListSortElo]:" -font $fbold
  entry $f.emin -textvariable ::plist::minElo
  label $f.eto -text "-"
  entry $f.emax -textvariable ::plist::maxElo
  label $f.games -text "[tr PListSortGames]:" -font $fbold
  entry $f.gmin -textvariable ::plist::minGames
  label $f.gto -text "-"
  entry $f.gmax -textvariable ::plist::maxGames

  foreach entry {emin emax} {
    $f.$entry configure -width 4 -justify right -font $font
    bindFocusColors $f.$entry
    bind $f.$entry <FocusOut> +::plist::check
  }

  foreach entry {gmin gmax} {
    $f.$entry configure -width 6 -justify right -font $font
    bindFocusColors $f.$entry
    bind $f.$entry <FocusOut> +::plist::check
  }
  
  pack $f.elo $f.emin $f.eto $f.emax -side left
  pack $f.gmax $f.gto $f.gmin $f.games -side right

  dialogbutton $w.b.defaults -text $::tr(Defaults) -command ::plist::defaults
  dialogbutton $w.b.update -text $::tr(Update) -command ::plist::refresh
  dialogbutton $w.b.close -text $::tr(Close) -command "destroy $w"
  packbuttons left $w.b.defaults
  packbuttons right $w.b.close $w.b.update

  pack $w.b -side bottom -fill x
  pack $w.o3 -side bottom -fill x -padx 2 -pady 2
  pack $w.o2 -side bottom -fill x -padx 2 -pady 2
  pack $w.o1 -side bottom -fill x -padx 2 -pady 2

  pack $w.t -side top -fill both -expand yes
  grid $w.t.text -row 0 -column 0 -sticky news
  grid $w.t.ybar -row 0 -column 1 -sticky news
  grid $w.t.xbar -row 1 -column 0 -sticky news
  grid rowconfig $w.t 0 -weight 1 -minsize 0
  grid columnconfig $w.t 0 -weight 1 -minsize 0

  ::plist::ConfigMenus
  ::plist::refresh
}

proc ::plist::ConfigMenus {{lang ""}} {
  set w .plist
  if {! [winfo exists $w]} { return }
  if {$lang == ""} { set lang $::language }
  set m $w.menu
  foreach idx {0 1} tag {File Sort} {
    configMenuText $m $idx PList$tag $lang
  }
  foreach idx {0 2} tag {Update Close} {
    configMenuText $m.file $idx PListFile$tag $lang
  }
  foreach idx {0 1 2 3 4} tag {Name Elo Games Oldest Newest } {
    configMenuText $m.sort $idx PListSort$tag $lang
  }
}

proc ::plist::refresh {} {
  set w .plist
  if {! [winfo exists $w]} { return }

  busyCursor .
  ::utils::history::AddEntry ::plist::name $::plist::name
  set t $w.t.text
  $t configure -state normal
  $t delete 1.0 end

  $t insert end "\t" title
  foreach i {Games Oldest Newest Elo Name} {
    $t tag configure s$i -font font_SmallBold
    $t tag bind s$i <1> "set ::plist::sort $i; ::plist::refresh"
    $t tag bind s$i <Any-Enter> "$t tag config s$i -foreground red"
    $t tag bind s$i <Any-Leave> "$t tag config s$i -foreground {}"
    $t insert end "\t" title
    $t insert end [tr PListSort$i] [list title s$i]
  }
  $t insert end "\n" title

  update
  set err [catch {sc_name plist -name $::plist::name -size $::plist::size \
            -minGames $::plist::minGames -maxGames $::plist::maxGames \
            -minElo $::plist::minElo -maxElo $::plist::maxElo \
                -sort [string tolower $::plist::sort]} pdata]
  if {$err} {
    $t insert end "\n$pdata\n"
    unbusyCursor .
    return
  }

  set hc yellow
  set count 0
  foreach player $pdata {
    incr count
    set ng [lindex $player 0]
    set oldest [lindex $player 1]
    set newest [lindex $player 2]
    set elo [lindex $player 3]
    set name [lindex $player 4]

    $t tag bind p$count <ButtonPress-1> [list ::pinfo::playerInfo $name]
    #$t tag bind p$count <ButtonPress-$::MB3> [list playerInfo $name]
    $t tag bind p$count <Any-Enter> \
      "$t tag configure p$count -background $hc"
    $t tag bind p$count <Any-Leave> \
      "$t tag configure p$count -background {}"
    $t insert end "\n"
    $t insert end "\t$count\t" p$count
    $t insert end $ng [list ng p$count]
    $t insert end "\t" p$count
    $t insert end $oldest [list date p$count]
    $t insert end "\t" p$count
    $t insert end "- $newest" [list date p$count]
    $t insert end "\t" p$count
    $t insert end $elo [list elo p$count]
    $t insert end "\t" p$count
    $t insert end $name [list name p$count]
  }
  $t insert end "\n"
  $t configure -state disabled
  unbusyCursor .
}

proc ::plist::check {} {
  if {$::plist::minGames > $::plist::maxGames} {
    set ::plist::maxGames $::plist::minGames
  }
  if {$::plist::minElo > $::plist::maxElo} {
    set ::plist::maxElo $::plist::minElo
  }
}
### End of file pfinder.tcl: part of Scid.

####################
# Tournament window

namespace eval ::tourney {}

foreach {n v} {start 0000.00.00 end 2047.12.31 minPlayers 2 maxPlayers 999 \
                 minGames 1 maxGames 9999 minElo 0 maxElo 4000 sort Date \
                 country "" site "" event "" player "" size 50} {
  set ::tourney::$n $v
}

trace variable ::tourney::start w ::utils::validate::Date
trace variable ::tourney::end w ::utils::validate::Date
foreach {n v} {minPlayers 999 maxPlayers 999 minGames 9999 maxGames 9999 \
                 minElo [sc_info limit elo] maxElo [sc_info limit elo]} {
  trace variable ::tourney::$n w [list ::utils::validate::Integer $v 0]
}

set tourneyWin 0

proc ::tourney::toggle {} {
  set w .tourney
  if {[winfo exists $w]} {
    destroy $w
  } else {
    ::tourney::Open
  }
}

proc ::tourney::Open {} {
  global tourneyWin
  set w .tourney
  if {[winfo exists $w]} { return }
  set tourneyWin 1

  if {! [info exists ::tourney::_defaults]} { ::tourney::defaults }

  toplevel $w
  wm title $w "Scid: [tr WindowsTmt]"
  setWinLocation $w
  bind $w <Configure> "recordWinSize $w"

  bind $w <F1> {helpWindow Tmt}
  bind $w <Escape> "$w.b.close invoke"
  bind $w <Return> ::tourney::refresh
  bind $w <Destroy> { set tourneyWin 0 }
  standardShortcuts $w
  bind $w <Up> "$w.t.text yview scroll -1 units"
  bind $w <Down> "$w.t.text yview scroll 1 units"
  bind $w <Prior> "$w.t.text yview scroll -1 pages"
  bind $w <Next> "$w.t.text yview scroll 1 pages"
  bind $w <Key-Home> "$w.t.text yview moveto 0"
  bind $w <Key-End> "$w.t.text yview moveto 0.99"
  bindMouseWheel $w $w.t.text

  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label TmtFile -menu $w.menu.file
  menu $w.menu.file
  $w.menu.file add command -label TmtFileUpdate -command ::tourney::refresh
  $w.menu.file add command -label TmtFileClose -command "destroy $w"
  $w.menu add cascade -label TmtSort -menu $w.menu.sort
  menu $w.menu.sort
  foreach name {Date Players Games Elo Site Event Winner} {
    $w.menu.sort add radiobutton -label TmtSor$name \
      -variable ::tourney::sort -value $name -command {::tourney::refresh -fast}
  }

  foreach i {t o1 o2 o3 b} {frame $w.$i}
  text $w.t.text -width 75 -height 22 -font font_Small -wrap none \
    -fg black -bg white -yscrollcommand "$w.t.ybar set" -setgrid 1 \
    -cursor top_left_arrow -xscrollcommand "$w.t.xbar set"
  scrollbar $w.t.ybar -command "$w.t.text yview" -width 12 -takefocus 0
  scrollbar $w.t.xbar -orient horiz -command "$w.t.text xview" -width 12 \
    -takefocus 0
  set xwidth [font measure [$w.t.text cget -font] "0"]
  set tablist {}
  foreach {tab justify} {3 r 4 l 18 r 23 r 30 r 32 l 55 l} {
    set tabwidth [expr {$xwidth * $tab} ]
    lappend tablist $tabwidth $justify
  }
  $w.t.text configure -tabs $tablist
  $w.t.text tag configure date -foreground darkRed
  $w.t.text tag configure np -foreground darkBlue
  $w.t.text tag configure elo -foreground darkGreen
  $w.t.text tag configure best -foreground steelBlue
  $w.t.text tag configure event -foreground darkRed
  $w.t.text tag configure title -font font_SmallBold

  set font font_Small
  set fbold font_SmallBold
  set f $w.o1
  label $f.from -text "[tr TmtSortDate]:" -font $fbold
  entry $f.efrom -textvariable ::tourney::start -width 10 -font $font
  bindFocusColors $f.efrom
  bind $f.efrom <FocusOut> +::tourney::check
  label $f.to -text "-" -font $font
  entry $f.eto -textvariable ::tourney::end -width 10 -font $font
  bindFocusColors $f.eto
  bind $f.eto <FocusOut> +::tourney::check
  pack $f.from $f.efrom $f.to $f.eto -side left

  label $f.cn -text "  $::tr(Country):" -font $fbold
  ttk::combobox $f.ecn -width 4 -textvar ::tourney::country -values {{} AUT CZE DEN ENG ESP FRA GER GRE HUN ITA NED POL RUS \
        SCG SUI SWE USA YUG}
  
  bindFocusColors $f.ecn
  bind $f.ecn <FocusOut> +::tourney::check
  pack $f.cn $f.ecn -side left

  label $f.size -text $::tr(TmtLimit:) -font $fbold
  ttk::combobox $f.esize -width 4 -justify right -textvar ::tourney::size -values {10 20 50 100 200 500 1000}
  trace variable ::tourney::size w {::utils::validate::Integer 1000 0}
  bindFocusColors $f.esize

  pack $f.esize $f.size -side right

  set f $w.o2
  label $f.players -text "[tr TmtSortPlayers]:" -font $fbold
  entry $f.pmin -textvariable ::tourney::minPlayers \
    -width 3 -justify right -font $font
  bindFocusColors $f.pmin
  bind $f.pmin <FocusOut> +::tourney::check
  label $f.pto -text "-"
  entry $f.pmax -textvariable ::tourney::maxPlayers \
    -width 3 -justify right -font $font
  bindFocusColors $f.pmax
  bind $f.pmax <FocusOut> +::tourney::check
  pack $f.players $f.pmin $f.pto $f.pmax -side left

  label $f.games -text "   [tr TmtSortGames]:" -font $fbold
  entry $f.gmin -textvariable ::tourney::minGames \
    -width 4 -justify right -font $font
  bindFocusColors $f.gmin
  bind $f.gmin <FocusOut> +::tourney::check
  label $f.gto -text "-" -font $font
  entry $f.gmax -textvariable ::tourney::maxGames \
    -width 4 -justify right -font $font
  bindFocusColors $f.gmax
  bind $f.gmax <FocusOut> +::tourney::check
  pack $f.games $f.gmin $f.gto $f.gmax -side left
  label $f.elolab -text "$::tr(TmtMeanElo):" -font $fbold
  entry $f.elomin -textvariable ::tourney::minElo \
    -width 5 -justify right -font $font
  bindFocusColors $f.elomin
  label $f.eto -text "-" -font $font
  entry $f.elomax -textvariable ::tourney::maxElo \
    -width 5 -justify right -font $font
  bindFocusColors $f.elomax
  pack $f.elomax $f.eto $f.elomin $f.elolab -side right

  set f $w.o3
  label $f.sitelab -text "$::tr(Site):" -font $fbold
  ttk::combobox $f.site -textvariable ::tourney::site -width 12
  ::utils::history::SetCombobox ::tourney::site $f.site
  bindFocusColors $f.site
  pack $f.sitelab $f.site -side left

  label $f.eventlab -text "   $::tr(Event):" -font $fbold
  ttk::combobox $f.event -textvariable ::tourney::event -width 12
  ::utils::history::SetCombobox ::tourney::event $f.event
  bindFocusColors $f.event
  pack $f.eventlab $f.event -side left

  label $f.playerlab -text "$::tr(Player):" -font $fbold
  ttk::combobox $f.player -textvariable ::tourney::player -width 12
  ::utils::history::SetCombobox ::tourney::player $f.player
  bindFocusColors $f.player
  pack $f.player $f.playerlab -side right
  focus $f.site

  dialogbutton $w.b.defaults -textvar ::tr(Defaults) -command ::tourney::defaults
  dialogbutton $w.b.help -textvar ::tr(Help) -command {helpWindow Tmt}
  dialogbutton $w.b.update -textvar ::tr(Update) -command ::tourney::refresh
  dialogbutton $w.b.close -textvar ::tr(Close) -command "destroy $w"
  pack $w.b -side bottom -fill x
  packbuttons right $w.b.close $w.b.update $w.b.help
  packbuttons left $w.b.defaults
  pack $w.o3 -side bottom -fill x -padx 2 -pady 2
  pack $w.o2 -side bottom -fill x -padx 2 -pady 2
  pack $w.o1 -side bottom -fill x -padx 2 -pady 2
  pack $w.t -side top -fill both -expand yes
  grid $w.t.text -row 0 -column 0 -sticky news
  grid $w.t.ybar -row 0 -column 1 -sticky news
  grid $w.t.xbar -row 1 -column 0 -sticky news
  grid rowconfig $w.t 0 -weight 1 -minsize 0
  grid columnconfig $w.t 0 -weight 1 -minsize 0

  ::tourney::ConfigMenus
  ::tourney::refresh
}

proc ::tourney::ConfigMenus {{lang ""}} {
  set w .tourney
  if {! [winfo exists $w]} { return }
  if {$lang == ""} { set lang $::language }
  set m $w.menu
  foreach idx {0 1} tag {File Sort} {
    configMenuText $m $idx Tmt$tag $lang
  }
  foreach idx {0 2} tag {Update Close} {
    configMenuText $m.file $idx TmtFile$tag $lang
  }
  foreach idx {0 1 2 3 4 5 6} tag {Date Players Games Elo Site Event Winner} {
    configMenuText $m.sort $idx TmtSort$tag $lang
  }
}

proc ::tourney::defaults {} {
  set ::tourney::_defaults 1
  set year [::utils::date::today year]
  #set ::tourney::start "$year.??.??"
  set ::tourney::start "1800.??.??"
  set ::tourney::end "$year.12.31"
  set ::tourney::size 50
  set ::tourney::minPlayers 2
  set ::tourney::maxPlayers 999
  set ::tourney::minGames 1
  set ::tourney::maxGames 9999
  set ::tourney::minElo 0
  set ::tourney::maxElo 4000
  set ::tourney::country ""
  set ::tourney::site ""
  set ::tourney::event ""
  set ::tourney::player ""
}

proc ::tourney::refresh {{option ""}} {
  set w .tourney
  if {! [winfo exists $w]} { return }

  busyCursor $w
  ::utils::history::AddEntry ::tourney::site $::tourney::site
  ::utils::history::AddEntry ::tourney::event $::tourney::event
  ::utils::history::AddEntry ::tourney::player $::tourney::player

  set t $w.t.text
  $t configure -state normal
  $t delete 1.0 end
  update
  set fastmode 0
  if {$option == "-fast"} { set fastmode 1 }

  if {$fastmode  &&  $::tourney::list != ""} {
    set tlist $::tourney::list
  } else {
    if {[catch {sc_base tournaments \
                  -start $::tourney::start \
                  -end $::tourney::end \
                  -size 2500 \
                  -minPlayers $::tourney::minPlayers \
                  -maxPlayers $::tourney::maxPlayers \
                  -minGames $::tourney::minGames \
                  -maxGames $::tourney::maxGames \
                  -minElo $::tourney::minElo \
                  -maxElo $::tourney::maxElo \
                  -country [string toupper $::tourney::country] \
                  -site $::tourney::site \
                  -event $::tourney::event \
                  -player $::tourney::player \
                } tlist]} {
      $t insert end $tlist
      $t configure -state disabled
      unbusyCursor .
      return
    }
    set ::tourney::list $tlist
  }
  switch $::tourney::sort {
    "None" {}
    "Date" { set tlist [lsort -decreasing -index 0 $tlist] }
    "Players" { set tlist [lsort -integer -decreasing -index 3 $tlist] }
    "Games" { set tlist [lsort -integer -decreasing -index 4 $tlist] }
    "Elo" { set tlist [lsort -integer -decreasing -index 5 $tlist] }
    "Site" { set tlist [lsort -dict -index 1 $tlist] }
    "Event" { set tlist [lsort -dict -index 2 $tlist] }
    "Winner" { set tlist [lsort -dict -index 7 $tlist] }
  }

  if {[llength $tlist] > 0} {
    foreach i {Date Players Games Elo Site Event Winner} {
      $t tag configure s$i -font font_SmallBold
      $t tag bind s$i <1> "set ::tourney::sort $i; ::tourney::refresh -fast"
      $t tag bind s$i <Any-Enter> "$t tag config s$i -foreground red"
      $t tag bind s$i <Any-Leave> "$t tag config s$i -foreground {}"
    }
    $t insert end "\t\t"
    $t insert end [tr TmtSortDate] sDate
    $t insert end "\t"
    $t insert end [tr TmtSortPlayers] sPlayers
    $t insert end "\t"
    $t insert end [tr TmtSortGames] sGames
    $t insert end "\t"
    $t insert end [tr TmtSortElo] sElo
    $t insert end "\t"
    $t insert end [tr TmtSortSite] sSite
    $t insert end ": "
    $t insert end [tr TmtSortEvent] sEvent
    $t insert end "\t"
    $t insert end [tr TmtSortWinner] sWinner
    $t insert end "\n"
  } else {
    $t insert end $::tr(TmtNone)
  }

  set hc yellow
  set count 0
  foreach tmt $tlist {
    incr count
    if {$count > $::tourney::size} { break }
    set date [lindex $tmt 0]
    set site [lindex $tmt 1]
    set event [lindex $tmt 2]
    set np [lindex $tmt 3]
    set ng [lindex $tmt 4]
    set elo [lindex $tmt 5]
    set g [lindex $tmt 6]
    set white [::utils::string::Surname [lindex $tmt 7]]
    set welo [lindex $tmt 8]
    set wscore [lindex $tmt 9]
    set black [::utils::string::Surname [lindex $tmt 10]]
    set belo [lindex $tmt 11]
    set bscore [lindex $tmt 12]
    if {$welo > 0} { append white "($welo)" }
    if {$belo > 0} { append black "($belo)" }
    append white " $wscore"
    append black " $bscore"
    set one "1."
    set two "2."
    if {$wscore == $bscore} {
      set one "1="; set two "1="
    }
    set best "$one $white, $two $black, ..."
    if {$np == 2} { set best "$one $white, $two $black" }

    $t tag bind g$count <ButtonPress-1> [list ::tourney::select $g]
    $t tag bind g$count <ButtonPress-$::MB3> [list ::tourney::select $g]
    $t tag bind g$count <Any-Enter> \
      "$t tag configure g$count -background $hc"
    $t tag bind g$count <Any-Leave> \
      "$t tag configure g$count -background {}"
    $t insert end "\n"
    $t insert end "\t$count\t" g$count
    $t insert end $date [list date g$count]
    $t insert end "\t" g$count
    $t insert end $np [list np g$count]
    $t insert end "\t" g$count
    $t insert end $ng [list ng g$count]
    $t insert end "\t" g$count
    $t insert end $elo [list elo g$count]
    $t insert end "\t" g$count
    $t insert end "$site: " [list site g$count]
    $t insert end "$event" [list event g$count]
    $t insert end "\t$best" [list best g$count]
  }
  $t insert end "\n"
  $t configure -state disabled
  unbusyCursor .
}

proc ::tourney::check {} {
  set start $::tourney::start
  set end $::tourney::end
  if {[string length $start] == 0} { set start "0000" }
  if {[string length $end] == 0} { set end [sc_info limit year]}
  if {[string length $start] == 4} { append start ".??.??" }
  if {[string length $end] == 4} { append end ".12.31" }
  if {[string length $start] == 7} { append start ".??" }
  if {[string length $end] == 7} { append end ".31" }
  set ::tourney::start $start
  set ::tourney::end $end
  if {$::tourney::minPlayers < 2} {set ::tourney::minPlayers 2}
  if {$::tourney::minPlayers > $::tourney::maxPlayers} {
    set ::tourney::maxPlayers $::tourney::minPlayers
  }
  set s $::tourney::country
  set s [string toupper [string trim $s]]
  if {[string length $s] > 3} { set s [string range $s 0 2] }
  set ::tourney::country $s
  if {$::tourney::country == "---"} {
    set ::tourney::country ""
  }
}

proc ::tourney::select {gnum} {
  if {[catch {::game::Load $gnum} result]} {
    tk_messageBox -type ok -icon info -title "Scid" -message $result
    return
  }
  flipBoardForPlayerNames $::myPlayerNames
  updateBoard -pgn
  updateTitle
  ::crosstab::Open
}

###
### windows/switcher.tcl: part of Scid
### Copyright (C) 2000-2004  Shane Hudson.

set icons {
{Unknown}
{
R0lGODlhIAAgAIQQACYjYUooEzUsWUU5T3JAHWlJGFtPS3FgQ4VwPJR3LZ9/
KbKUL7ueK9SvGOrAE/rLAP//////////////////////////////////////
/////////////////////////yH5BAEKABAALAAAAAAgACAAAAX+ICSOZGme
aKquKtE8MMzMtAOzpBvL9Gw/OBFh8YM5erNYkJCYGWgPxsPRqDYcDhwhsJgt
DIuXwvCK0rSK7mwgKCsE0x6LUFB72dLH4tCQrwJXVFUzAgJ5AAN2LApFRgwI
AAJhCYhqKwSNPAsClQwOnAhAKXQ7MTMHAAAHYQ+cBlmjZaVfqWCeCqkIsCd0
DFVYNg2cAqszkABkoiZbCkgJBpEHvsapfDe8dV4IA6kDV1ML3AMIvle8XMac
iAk2DgnqiXYMy+jvqmoPDbWecUglBEwYbLo3ow8ndjH6+CMRIABAdQkWdBEG
AKEpJPMYNgyQCkBDgNwAeMLCY+GIjepLPG7s+JGOggRpJM4osZJlw5AqN+oE
SMdEAJwCUNrUSbThiY6pRiAtyvRoRxJIaTY1EVUEUgAsAlCtCuFqkBJerXL9
2nXsWLJoWYQAADs=
}
  {Temporary database}
  {
  R0lGODlhIAAgAMYaACEhISQkJC0tLTExMTU1NTk5OTo6Oj09PT4+PkJCQkND
  Q0REREZGRklJSUtLS0xMTE1NTU5OTlFRUVJSUlNTU1RUVFVVVVdXV1hYWFlZ
  WVpaWltbW1xcXF5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWhoaGlpaWpqamtr
  a2xsbG1tbW5ubm9vb3BwcHJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7
  e3x8fH19fX5+fn9/f4GBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouL
  i4yMjI2NjY6OjpGRkZKSkpOTk5SUlJaWlpeXl5iYmJmZmZqamp2dnaKioqam
  pqmpqaqqqre3t7m5ubq6uru7u729vVpaWlpaWlpaWlpaWlpaWlpaWlpaWlpa
  WlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpa
  WlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWiH5BAEKAH8A
  LAAAAAAgACAAAAf+gH+Cg4SFhoeIiYqLhVtZVlhYjJOCV1VTUlmJT4JJg02K
  XFpUjok2Nzc1pzZHilFQSlFUiky1tVGIPSq7vLsuiENLQkdHUog5GMnKySeI
  KEMnNTVBiRIP19gPrYcjIUQhITyJMgnl5hOJKjU7Ly9DihAE8gQGSIkULxbg
  MYo0HP8cSiSK0sCBiwYNVihqkaFhBg+JiGjIwKKhQkQ4HCjYuHHEoSYaOSpg
  cNFQAgQoUyKAYoiESpWUYsqcSbOmTZtJfkzioUMnoxsuXOhgFBQGIx8lSvBj
  JMTEu0UdNnQQ5EEcrUkVJFTg4UGCjURAVIhYYTXRhwVoFzgANS5FDkZDRgzI
  NQBi0QEDESY5YMB3iaImAgQMKMKoBovDi4JcWFz2UBQLBSIXWAAE0QzJkV8k
  EgCgs2cATgw5+dw5wLabqFEHAgA7
  }
  {Clipbase}
{
R0lGODlhIAAgAOekAGBBE2lGFHBLFnFMFXFMFnJMFXFNFnJNFXJNFnVNFndP
FlxcXF1dXF5eXl9fX2BgXolgH4thH41iH45jH5BlIJJmIJNnIJVoIJdpIJhq
IZprIZxsIZ1tIZ9uIaFvIqJxIqNxIqRyIqZzIqh0I6l1I6t2I39/ca13I654
I4CAfbB5JIGDfrJ7JIGDf7N8JIKEgIKFgLV9JLd+Jbh/JYyGeLqAJYeJhIaK
hIeKhIeKhYqKfbyBJYiKhIiKhYeLhYeLhpCJeb2CJb2CJpGKeb+DJsGEJouO
icKFJoyPipaNeo6Oi8SHJsWHJ42Ri46RjMaIJ5GRjZeXipmZjZiYl5ubjqGh
laOjoKSkmaOjoqSkmqionaqqoKqqoauroKuroqmrqaysoaysoq2toq6uo7a2
rLa2rbe3rbe3rri4rri4r7m5r7m5sLq6sby8s8PDw8TEw8TExMTFxMXFxMXF
xcbGvsbGxcbGxsfHxsjIx8nJwtDQz9DQ0NTU1NXV1dXW1NbW1tjY2Nnb2dzc
297e3uPj4ubm5ejo6Onp6Onp6erq6erq6uvr6uvr6+zs6+zs7O3t7O3t7e7u
7e7u7u/v7u/v7/Dw7/Dw8PHx8fLy8vPz8/T09Pb29vf39/j4+Pn5+Pn5+fr6
+vv7+/39/f7+/v//////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
/////////////////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQB
CgD/ACwAAAAAIAAgAAAI/gD/CRxIUOCCgwgPFlzIcOECKVQiUpGyoKFFgg8Q
6jDB0YQOhA8u/lNwgIBJkwyqXFkZpWWUlVeqMBBwkkCBBAQRMHnCk+cCNl3A
CAUjpqiYMW0WBOn5pAgCggR4JulBdUGeNWrSoEFzxkwZMmToLFhBdUiIJwSg
8uxBqq0DLWHCeJnLpe6WLVkcYGrb4wNatU/YVqqEpUHCwwsaTClUiVQPD38H
Rl0ieDAhQJgzawYkKFLjHh0iC4x6pPLg06hTT5rkmIPof1GLmE5Ne/WkSI43
vI5KpDKe38CD3xleJxIkxxp2Pwkym3al1ZGiP3rkOIPyHc1Rr5YUHdIjR40c
/mNQXsO3cOJ15siRM6gRI8cXlM/IDt34dPCMGC1ybEG5jNn1RXKfe/opoohj
FSgXQ2XD2VFHenLA8cYbbrhhYCKIiNIDBcq5wJZt3Q1YoCIYImJIKD1MoBwL
H4b4HYGLkIiIiYYY8kkPEiinAlvRrSdhhRXuMeMhNSLiyI0RKIcCW96B516M
MtJoCCOSXAJKDxAod0IPo7w4Yok1GqIIJJZoYkkgOGSZlmRPlNCDKDBGSaQh
iEByw503IHGDD2qqRUIPoYw4ZJGOUIKJD3388YceTmCp3Ag9eHLhjGFSeYkm
nNygaBxIvODomqM9IUIPm4BZ45hlcgKKJk3w8cUPUy0oYUOfbIbQgyaZYHLJ
rphoskknoIgiih83GAFDClBYMatyIABB1bPQQpsDDjxQZYMNNNAqkAFFMOXt
t+DyJIQBBAUwQE3opquuSQMAINK7IgUEADs=
}
  {PGN format file}
 {
R0lGODlhIAAgAOeiADMzM0tLS0xMTE5OTk9PT1BQUFFRUVJSUlNTU1RUVFVV
VVZWVldXV1hYWFlZWVpaWltbW1xcXH5YHV1dXX9ZH4BaIGBgYIFbIoJdJINe
JWNjY4RfJ2RkZIRgKGZmZoZiK4ZjLGhoaIhlL2pqamtra21tbW9vb41rN3Bw
cI1sOHJyco9uPHNzc5BvPI9wP5FwPpFxP3Z2dnd3d5R0Q5J1R3p6epV2RpZ4
SX19fZh6S5l8TYCAgJp9T4GBgZt+UYODg4SEhJ2BVJ6CVoaGhqCEWYiIiImJ
iYuLi6OIXoyMjKOJX6SKYY6Ojo+Pj6aNZJCQkKeNZZKSkpOTk6qQapaWlpmZ
mZycnLGadp6enrijg7qlhrunibGxscW0mse3nsm6ob6+vr+/v8DAwM2+qMHB
wc7AqcLCws/Bq8PDw8TExMbGxsfHx8jIyNXItd3TxN/Vx9/WyODXydva19va
2Nzc3N/f3+Dg4OHh4eLi4uji2OPj4+Tk5OXl5ebm5ufn5+jo6Ovo5Onp6erq
6u/q4+vr6+zs7PDs5e3t7e7u7vLu6O/v7/Dw8PPw6/Hx8fLy8vPy8PPz8/T0
9PX19ff18vb29vj39Pf39/n39fj4+Pn5+fr59/r6+vv6+Pv7+/z7+vz8/P39
/f7+/v//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
/////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
CBMqXCjQisOHVqhIaZKkCJAeOGrEUGGCRAgOHBQgtAIKVKhNoUqW/MSyk8tN
MDPJxCTyIEk6onLq3MlTJx6aI0PRkCABg4gyob6suNBihRdROYi+QSLhRk2D
VkLNkdCiEogPYyRc4TQICg9RmooKSfvoakGSdSS8MNRBhA8JiXJ6cpNTQhYJ
cSQAtQkqLtEUbWZI8CQqCFEdoiQwykBEsFuCJO1IgKFzioQ8oiaJwBtZlBai
mB4gHAJKjoQUoXK+kbDkEhwKEtBK0ARog2AHCH+AckG0i84zJyrYcJI7qhJR
WwQ3QLjjE56e2HUWEkUIEwOEOD7+6clOXlShwQZriN9zh5AfMmDAhJk/X4x9
MWgOHcKUAKGMTnvwcUchfwQSiCCEFFKIfog06CAimByAEAsACkggGfTdJwYZ
HJKRhiKKYFIAQih0wkcfeBxyYIIMgrjIizAuYskACJVgIooqIrggIoq82MiP
QMooAEIjbNKHH3ocIogZYdjXoRlQmoGGGo40YkkACHlgJBd8KMkij4s04ggk
kEQSCZmOXImQBkYKkiQhaDhJBpRo1FnnGmeqeZAFmRy5ByJf9ihmmZJQQokk
kkSip0ET9PnHn3A6SWedaVTKRqKLFuRAJn48CuiCgo4ZSaGWYGLJoZkStAAm
nUIaJ4dKk65RqqmoYnkQApj04emXYYpK6qmY2moQAbnuumOPvhZqaLAIGXAq
JZCYasm01FZrrSUGIKTAttwu4O234Ia7AAMAMGTuueieGxAAOw==
}
  {My games}
  {
  R0lGODlhIAAgAOeOACAgICUlJSoqKi4uLjMzMzY2Njg4ODo6Ojw8PD09PT49
  PT8+Pj8/P0BAQEJCQkREREVFRUZGRklISEpKSk1LS05OTk9PT1FRUVVSUlNT
  U1RUVFZWVllVVVhYWFtYWFxaWltbW1xcXF5cXF9cXF1dXWJfX2BgYGFhYWVi
  YmVjY2RkZGhlZWZmZmllZWhoaGtnZ2xoaGxpaWpqam9sbG9vb3Jvb3FxcXVy
  cnR0dHZ2dnl2dnd3d3h4eH13d3p6en55eXt7e4B6enx8fIB8fIN9fX9/f4CA
  gIR/f4GBgYKCgomDg4WFhYaGhoqFhYyGhoqKiouLi5CQkJWOjpaOjpGRkZKS
  kpeQkJSUlJWVlZuUlJ6Wlp6Xl5qampycnKKamp2dnaKbm56enqScnKCgoKef
  n6KioqmgoKqhoaWlpa2kpKioqLCmpqurq6ysrLGxsbKysrOzs7S0tLyysra2
  tr6zs7+1tbq6usO4uLy8vMO5ub29vcW7u8e8vMDAwMi9vcfHx8nJyczMzM7O
  zs/Pz9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
  CBMqXMiwocOHECMqtEOxokU7Ev+p+cKxo8eObSLC0YMHz5iTbkrGOVlGop1G
  MHnI7ANzkEweSSLOYcQTh089PAP5xHElitGjSJFyEfhmkVMaUO04BQSVxpMu
  WLNq1YpGIBMfYA2J7QKWilhDPGSoXcuWrRGBQljIVUQXi9wldBXlkMu3r18c
  AnmcGJyoMJXBSAonsjG4sePHNARCCUO5suXKKkJo3syZswyBYxCJ7kCajZ/T
  TUh3SHHaj44OrWOfFtjlkO0MuNW0JoM7w5DWNzKcFiOlePEsAqv8WW6i+ZjT
  e/JcqFBhS53TNSpgp86dhEATE8L9ny1yGoyfGOHpiDk9YwL78PA7CAQBoX6h
  +0BOE/HjBIIIP0ecBgMEAtZnoAYCbdDAgoQ0uMNpLcixRgM/+PHBaSs0cJoW
  TnTYoQUCAdHGiM2BdxoKU/ghgRd0JHAiArK1NoFXgtRowI0GnFbCC368cIcV
  OfpRQpBD4mhABAIlEciSBDRJwGkjLMCHGX7A8KQfI1yZpZMEOCCQC0cNIOYA
  p3kwwBmnKUCmH2aWOaaYCQjEgAB01inAaRwI0IMfadCJ551+WEHEoIMqIdAB
  ASSqaACnYRAABX4EkWijjMY42z8TAKDpppx26umnBQz0gIGklmrqqfVlpOqq
  rEIUEAA7
  }
  {Large database}
  {
  R0lGODdhIAAgAKEAAP8AAP///wAA/wAAACwAAAAAIAAgAAACiYSPqcvtH6KctFpks544iA9+
  WRhGHQmOqGAeUblR8AnH3uzeNxunYkB7/VS8X1DIq6SELQNTspxEdcCcZTqldIjIzZaYrXzB
  tvE1LLaChxmz9IeWuLtQtjbHDmN5xx33eRRHZ4THIlhnyFd4+LZEY9fjuEiyJum0Q3mG0gRg
  4ymn9un1QFpqeloAADs=
  }
  {Correspondence chess}
  {
  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
  ////Vf///ywAAAAAIAAgAAAEuPDJ+YC1NOs97fkfxo0UcDxgKpIcgL5p6LLZPJ24atM7leu8
  1waHAo5MMM4PtKoliRniwTPdmFLJ4ZWpuVI/2U6sWgsxvk/UltrzMs5f6TpEFk/fF/RpLivf
  zzJUaipqbTKATBd0XFNta1uJi5E9EnFjTJd1XZCXnFwkliqZlJueU52kNQYGlpxNoKusX480
  JbEeuI21qqsmvhe7Xbe/wS23p6nBAMO6xcK9yM7Pss3SGdAuydKvNBEAOw==
  }
  {Computer chess}
  {
  R0lGODlhIAAgAOezABVBgRtFhRFKiSBHiBNLihVMjCVMhzpmokNpmj9qpzhuqkFsqUxrl0FupE1s
  mEpspDpwrERurE5tmTtxrUNwpj1yrkRxp0VyqD90sEt3rkV5tUx4r055sVB7s1F8tFJ9tVN+tlV/
  t0yCuHx6flt/slaAuX17f1yAs1eBuk+Eu12BtFiCu1CFvFaEtVyDsF6CtVmDvFGGvV2EsV+DtlqE
  vVKHvoF/g2CEt1uFvlOIv1mHuGaEsmGFuFSJwIOBhVqIuVuJulaKwWOHulyKvF2LvViMw1mNxF+M
  vmWLuGCNv2GOwGeNulyQyGKPwWOQwmmPvGSRw2qQvWWSxGaTxWyTwGeUxm2UwWiVx26VwmmWyZKQ
  lG+Ww2qXyo6SlZORlXWWvnCXxGyYy5SSlnaXv3GYxW2ZzHeYwHKZxpaUmHOax3mZwpeVmWeez3Sb
  yJKXmXqaw3Ccz5iWmnubxJmXm3edynydxX6fx56coIChyZ+doaGeoqKfo6Wip6ekqamnq7K0sbO1
  srS2s7a4tby+u72/vL7BvcDCvsHDv8XHxLvK3rzL38jKx73M4MnLyMrMycvOys3Py87QzM/RztLU
  0dPV0tTW09XX1MzY5tLY2tbY1c7a6NXa3Nja1s/b6tbb3dnb19rc2dvd2tne4d3f3N7g3eDi39rj
  6+Hk4OPl4eTm4+Xn5Obo5efp5ujq5+nr6PL08fn7+Pr8+f7//P//////////////////////////
  ////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
  SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGDCBMqXDjQi5iHECNKlNhFYSNZGDNq3LgR
  kkJHlwAMECCAAIECBQyoXLkyAKNIHzVZeHFDCJIlUaiAGTMGzJctQLfISAQzoSNND0io4AEEp5Ut
  ZM6oIQMGKBYXRGM2IFEzyRMqW8CkkUP2jZozZHZkNaqJQosfQJREwSL2jRw7dtpsiQJkw1qERynM
  AJIEihUwZ9rQwQNmRYcNGCocUFQUsKYIN4A0kYKFjOI0OT6I7qAhQwLKMS/8OOLkcJo2TXrkqMEC
  xQcPHBagZquadZUsUo4YUZKkSBAcLEp4gLDbMoQUNXoQbgJlyhQpTZIEyZEiBPPKB4/+KhABo8eR
  JlOyhFlfxYmRHskvNA+vSUEJFkGUMKkShg2cMldAoUQQNKBQwV/hmYKABA40yMCDED7YYIMIdAKe
  QY7IEsuGHHboIYeyeJTQIY2UaKIjKKaoYoqPIKKQKJHEGCMkNNL4yI2OmLjIIo14kpAenPwByJCA
  BGLkkUgi+QcndxxkgiiDJCnllEYOwskIBsUByypcouLlKad88gknZHJCyplokjLKK2sYtIkrrHC5
  ipeonFKIIHgKQgiYfPKJCiYFudEKnX2eMoohhxiC6CGkFMonK2gQFMcnMlYa4ySUZErJJJZW+kkc
  BM0xSiWklkoqJXpooaoWe1hiqqkio8xBkA98+GHrrbj2oWsfuPbqBx82MCTssMQWa+yxyBoUEAA7
  }
  {Sorted Index of games}
  {
  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
  ////Vf///ywAAAAAIAAgAAAEovDJSau9OOvNu/9gKALkE5wPqa5A10pJHGtvxrImqkrAcWC1
  i2zGS/kut1wglUwZf5UgbIh09qCT0ml5w1mflNcwsWmZwbyuuvQ1H52hs/z9WkvbVvoIfy0y
  11F8enFtCQGDgBZyKYeDIHKGPo4fco1vW5iZmDVmkZI8Y6FjAEtWllh2ajqebxSir2OnGJq0
  mpJYF7e6u7scvL+3IsLDxMUUEQA7
  }
  {Player collection}
  {
  R0lGODlhIAAgAOfIAABO/gBQ/AJU8QBU/gNV8QBW/QBb/gFb/gBc/QBg/gBh
  /Qxe7wFh/gBl/gFm/gBn/QBr/gBs/RRk9gNt/hJo9wBy/gBz/gB3/gB4/gB9
  /gt4/gB+/gJ+/gCC/gt9/gCD/gCJ/gCK/gGK/hKD+wCP/g6J/gGQ/hKI/CV/
  /gWR/gCU/jV97wGV/jZ8/hCQ/gCZ/hyL/h2L/gGa/i6F/g+V/huP/hCV/i+G
  /hyQ/gCg/iSP/gGh/gud/gai/iSV/B2b/gCr/gGr/iea/hCm/gCw/ham/gGx
  /kiQ+A+v/hCv/hCw/jad/iml/i+i/huu/hSy/RC1/RC1/kiZ/liR/gq6/lmS
  /gu7/kid/iO0/hW9/Ra+/jqs/l2d9Ce3/k6k/lyf9Su3+iy4+T6u/jmx/i65
  +Se8/j2x/lyj9ju1/lym9yXC/lyp+Hmh3GWl/ki1/lys+XCk/lyw+mWs+km6
  /nCn/lW2/lyz+zbH/TfH/TjI/V22/DDN/l25/Wq1/kbI/E/E/kjI/F69/V/A
  /lvE/lzE/my8/lvF/lzF/mDD/nC7/kvQ/WHG/oG3+XK+/UvS/W/A/oG5+VfQ
  /WPK/oe4/lvP/FnQ/oC9/om5/lrS/XfE/lzS/X3G/n7G/nvI/nDP/pC//nDR
  /m3T/pDC/oPK/n7S7m/b/pXJ/nvY/JrK/pvK/pDR/o3T/pvM/p3M/oTc/p/S
  /oze/rbO/qfW/qnW/qLa/rbQ/rjP/q3W/rjR/qfa/rbU/rjU/rbW/rjW/rba
  /rjb/rDg/q3i/rLg/rbf/q3k/rjg/rjm/rjn/q6urq6urq6urq6urq6urq6u
  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
  rq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6u
  rq6urq6urq6urq6urq6uriH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
  CBMqXMiwocOHECMmJIUpksWLGDVJ/KcIz52PIEPmcSSxVLFilaxQUeMKFiwt
  VKzskXjnJCgjRMoQO3YsChEiWfwAGkq06FBKBGsW8xQESJdgxowpAQIECpgw
  WLNqxUrm1MA/gwgNOkSWkFlDZLEgScK2rVu2T0INdNKjxxxgwlYNqUtLmDA0
  OQILHix4h6SBRV68cDOsmCoeinOdNKO4smXLMhYNHLNlS51NnB6J6ZyJEycm
  KlKrXq2aBaKBnWTNKmSDRpNXs2b9oEEjBYnfwIMDNyFo4ChfvxKJACHk1q9f
  LkBIn069OogQgQY2YtWqD44aS0zPtWpVooP58+jTd/jAZ6APGDG8oEplSUeM
  GBwy6N/Pv3+GDXoMdMIFF1zBSy+ieEDgggw22CAGdgw0QgUVSKHLLp9oQOGG
  HHbYoQVxDCTHJJe0ccMMKEwAwYostuhiixG8MRAkteBChwMN5Kjjjjz22MAD
  awzESCy2wMFAAkgmqeSSTCagQBoDHTFFFS0cYMCVWGap5ZYGIHDGQBQMIOaY
  ZJZpZpkFfDGQBAC06eabcMYJZwBcDLQCAQLkqeeefPa55wJsbCTooIQWauih
  BwUEADs=
  }
  {Tournament: All-play-all}
  {
  R0lGODdhIAAgAKEAAP///wAAAAAA//8AACwAAAAAIAAgAAACZoSPqcvtH6KMYM6HM7RVdq+F
  4kg2gnEC6YqW7usIsmwExnDnAL7rmA1rAF0zWq+i4yl9mmFQ4QwVU0vkscojRZ+HbayY1AGx
  QS/XnJiGr7X1E13+ztZka5ZrxSO8ara/CqcnOJhQAAA7
  }
  {Tournament: Swiss}
  {
  R0lGODdhIAAgAIAAAP8AAP///ywAAAAAIAAgAAACRYSPqcvtD6OctFoQss437d0hnxYeI1di
  Z6qO7BlU8Pw59B03OG3vcO9z6YJCBrG4ONYov1Sz9AxFO9NL1XJlabfcrldRAAA7
  }
  {Grandmaster games}
  {
  R0lGODlhIAAgAOevACAgICUlJSoqKi4uLjEwMDMzMzY2Njg4ODo6Ojw8PD09
  PT49PT8+Pj8/P0BAQEREREZEREVFRUlHR0lISEpKSk1KSk1LS0xMTE5OTlFR
  UVVSUlNTU1ZWVllVVVhYWFtYWFxaWltbW1xcXF1cXF5cXF9cXF5dXWJfX2Bg
  YGFhYWViYmVjY2RkZGZmZmllZWplZWhoaGtnZ2xoaGxpaWpqam1qam9ra3Ft
  bW9vb3FxcXR0dHhzc3Z2dnd3d3p2dnh4eH13d3x4eHp6en15eX55eXt7e4B6
  enx8fIB8fIN9fX9/f4CAgIR/f4GBgYZ/f4KCgomCgomDg4WFhYaGhoqFhYyG
  ho6Hh4qKio+IiIuLi5CJiZCLi5KMjJCQkJaOjpGRkZKSkpeQkJeRkZSUlJWV
  lZqTk5uUlJ6Xl5qampycnKGamqKamp2dnaKbm6Sbm56enqScnKWdnaCgoKef
  n6KioqmgoKqhoaWlpayjo62kpKioqK+lpbCmpqurq6ysrLOpqbOqqrasrLet
  rbeurrGxsbKysrmvr7Ozs7S0tLyysra2tr2zs76zs7+1tbq6usK4uMO4uLy8
  vMO5ucS5ub68vL29vcS6usW6usW7u8a7u8e8vMDAwMe9vci9vcfExMfHx8nJ
  yczMzM7OztLNzc/Pz9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
  CBMqXMiwocOHECMqdESxokVHEv/pYcOxo8eOfiIeqhQpkpyThEoiOklHoiNX
  MH/I3ASTlMwfTyIqasVTh89KPEP51DGmi9GjSJGiEViIlVMcUB05BQUVx5U0
  WLNq1XpH4BQhYE+JTQP2i9hTP2ioXcuW7RKBR1rIXUWXjFwpdFfxkMu3r18d
  An+kGKyq8JfBTQqryjG4sePHOARmeUO5suXKLERo3syZMw2BclKJ9kC6j2hK
  ahJhkgRoiwnSnWJTIe1hRexO/9Kg2r2htx5UozR1wiMmTqZOg0ZsuD2n9wYk
  t/+B+UQdhXU5njh18oGhe43jXDD+xF4kKUP3M41i/0NBof1ZJWU6wWlPf8iN
  CxRit+k0oz0jOOqFEMGAphRYhCCdBDHgggzGlkQnVURAQidMqMeBAxiWomEP
  k3QSA4YghhibC4nw4QARnYCgXhF+tGgde5B04kICNN4WWwKxqeBFJxOswYgC
  6k0hypAHFHnAH53sYGQUUZgR2wGxnRCDh5CEASVuT4SiZQFcFmBFJ250yWUJ
  sRUQWwkMaFJHJzKYiRsMRw0g5wASXNKJDXMS8GAnA8T2wQB2xLZAn7g1IMCh
  iB76gnBwOKGFIbF5IUBsHQgARCd5HKoeAgF06qmnEGARiCWP7AFFBZ3GpkEA
  FnRiRKoduFEAwKy01mrrrbgaMNADDPbq66+9ZiTssMRCFBAAOw==
  }
  {International Master games}
  {
  R0lGODlhIAAgAOeNACAgICUlJSoqKi4uLjMzMzQ0NDY2Njg4ODo6Ojw8PD09
  PT49PT8+Pj8/P0BAQEJCQkREREVFRUZGRklISEpKSk1LS05OTk9PT1FRUVVS
  UlNTU1RUVFZWVllVVVhYWFtYWFxaWltbW1xcXF5cXF9cXF1dXWJfX2BgYGFh
  YWViYmVjY2RkZGhlZWZmZmllZWhoaGtnZ2xoaGxpaWpqam9sbG9vb3Jvb3Fx
  cXVycnR0dHZ2dnl2dnd3d3h4eH13d3p6en55eXt7e4B6enx8fIB8fIN9fX9/
  f4CAgIR/f4GBgYKCgoWFhYaGhoqFhYyGhoqKiouLi5CQkJaOjpGRkZKSkpeQ
  kJSUlJWVlZ6Xl5qampycnKKamp2dnaKbm56enqScnKCgoKefn6KioqmgoKqh
  oaWlpa2kpKioqKmpqbCmpqurq6ysrLGxsbKysrOzs7S0tLyysra2tr2zs76z
  s7i4uL+1tbq6usO4uLy8vMO5ub29vce8vMDAwMi9vcfHx8nJyczMzM7Ozs/P
  z9LS0tTU1NbW1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
  CBMqXMiwocOHECMqtEOxokU7Ev+d4cKxo8eOayK60YMHD5iTbEq+OSlGoh1G
  MHvI5ANTkMweSiLGWcQzh089PAH5zGElitGjSJFmEdhGkdMaUO04/QO1xhMt
  WLNq1VpGIJMfYAuJ1QJ2ithCPWaoXcuW7RGBQ1rITUT3itwldBPpkMu3r98c
  AnugGIyo8JTBSQojujG4sePHNQRC8UK5suXKK0Ro3syZ8wyBYA6J9kBajWg8
  Hvr02ZFadRPSHlSoXu2hhUAthnJr2H0mNx0NqnEAVx1mtwYis4WjEEjFj/MT
  0ME4R2NBtY3qfeTkwWDBApY61i3+lBB4goL5s0bMm1dNg4LqLn1kmJ/zhT0F
  DwJDRNhPqH+Q/fupFkMEqhXRhxMRjNAHEgJGsIFAHDgg4SAU8iChhKqx4IBq
  LsCRhgNA9AFChg5cIFAQa6QIXXkJtJiAaim82EcKUvQxwRZzKABjAhR4FciP
  BwQpZJCqmXBAkTD0AcMdVRzZh5ESCKQEIFQSYOWVVqpGAgFaMrDHGH3EwGUf
  Wz4g0AtHDaDmmmqq9sEAbg5AhmoLwNnHmwoI1IAAfPbppwCqdQBoH4L60IcZ
  fAYqwAECIRDAo5BGGoBqGUzaR6UV9CHEo5QGUIBAFAAg6qiklmrqqQYMBAGA
  rLbq6qsJ+2Uk66y0QhQQADs=
  }
  {Blitz (fast) games}
  {
  R0lGODlhIAAgAOfxACEhISUlJSoqKisqKS4uLjQyLDMzMzQ0NDY2Njg4ODk5OTs7O0I8Hjw8Ozw8
  PD8+Oj4+Pj8/P0FBQUdCLEJCQk5FG0REREhGPUZGRkdHR0pKSk1LQktLS09PT1BQUFpSK1RUVFtV
  O2FXKFdXV1pYT1hYV1hYWFlZWVxcXGNdQl1dXWBgYGNhWHNjFmFhYWJiYmljRXBmM2VlZWZmZmlp
  aX1sGmtra3ptL3NuWW9vb3BwcIRzHnJycnR0dIB2R3x2WHZ2dnh4eHl5eXp6epJ+HIp9P3x8fH19
  fX9/f5uDDoKBfIKCgpaFMIODg4aGhoeHh6CLJoqKiqmOCqeOE4yMjJCQkJGRkZKSkpOTk7CXGreZ
  B5WVlbqdEb+fAr6gCcOhBZ2dnb+hFL6hF56enp+fn8OkDKCgoMWlA8elAaGhoaKiosunAMioBMup
  AsypAsupBsypBsuqBc2qAs6qAMyrAqampsysBM6rC9CsANGsANGtANKtAM6uCKmpqaqqqtCvCtSx
  BKysrNOyBdSxD9GzBdW0DtW0G7Kyste6A9m4E7S0tNm5Gtm5Idq8AbW1tdq6Jre3t7i4uNq8Lbm5
  udu9Lt7BCrq6utzAG7u7u9vBJtrAOLy8vL29vb6+vsDAwMHBwcPDw+PLKODIU+nPEsjIyOzTCMrK
  ys3NzezVLe/YDe3VNO/YFM/Pz/DZEPDYHNDQ0PLbFvLbF9PT0/PdG/PdHPTdHdbW1vLeP9fX1/Xg
  KPXgLNjY2OvcgvThP/biMffiNfXiPffkOPXjSfbjSPbjSdzc3PPjV97e3vjnTPXmZ/noTPnoTvfn
  XuLi4vrpXPrqYOTk5Pjqc/vrYfTolPvrYvvraPrscPnsfPrtdPntfvvucejo6PzucvfsmvzvdPnu
  kf7wfuvr6/3xhPrwnP3yi+3t7f3ymPjyxPv0sP32tv33wP351P/60f364P/84v797v/+8///////
  /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
  SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGDCBMqXMiwocOHCj95mkixoidQEAUeGsOx
  o8eOkTJO6sSJk5mTh0o6OqkGU0ZM5WIKmfkp5quZQtJkhBSuZ4+fnXqe+tlji5WjSJMmrSNQ0ban
  OaJiemoqao4oYLJq3bqV6b8nQ8LiGgsmrJWxuILYWGvjxyBKkh4xWpQIUBglAo/M2Aut75a9TvpC
  A7J3r5hz8NyxS/fN2B8cPQQGeUG5meUrlJdYbsaD8osiot6REwfOWrJCPl7oEEiFjGuPrzvKUKGC
  xZ125rxx0xbtEhPaNgSmOUbchPFAxDcZX24CCi91z6hJwxYqSwnjMwSCKcYdhPc+3C3+eR8Pw9A6
  Z8qWVVNVhsT4FwKxkJq/on6a+X466NfPZVq2X8Egc0scKezXgQoCraDBgrs0iMSCEC54gybo6JKL
  L70IMoccbrTxRQwnCIQCBiTaYqIRJKaIwQZvdDPONcwAk8swxAiTiRchYACCQCNI4KMsQAbh45AS
  ELGHHnnggcostNTiCh9TXOCjBwIZEciVLmSpgQNcdtnlA3CsAksso7CxQwNdciCQE6y0mcCbcMYJ
  5wd2pNJKJWeIIGcGAjVxyp8GBCrooILWgEgphGgxAaEGUCAQDVVESsCklFZKqRSN0JFEAZZOCoFA
  EQgg6qikljoAGmu0UCqpCgi0QAAtsMYq66wMdFHBrLMeIJAFAPTq66/ABissAgOhQNuxyCar7LIZ
  Nevss9BG21BAADs=
  }
  {Tactics}
  {
  R0lGODlhIAAgAOeKACAgICUlJSoqKi4uLjMzMzQ0NDY2Njg4ODo6Ojw8PD09
  PT8/P0A/P0BAQEJCQkREREZEREVFRUZGRkpKSkxLS05OTk9PT1VSUlNTU1RU
  VFZWVllVVVhYWF1aWltbW1xcXF1dXV9eXmBfX2JfX2BgYGFhYWNhYWRiYmVi
  YmVjY2RkZGhlZWZmZmllZWhnZ2hoaGtnZ2toaGxoaGpqam1qam9ra29sbHJt
  bW9vb3Jvb3Rvb3FxcXZxcXVycnR0dHdzc3Z2dnl2dnd3d3h4eH14eHp6ent7
  e3x8fH9/f4CAgIGBgYKCgoWFhYaGhoqKiouLi5KMjJCQkJGRkZKSkpiSkpSU
  lJmTk5WVlZqampycnJ2dnaObm56enqCgoKKioqWlpayjo6ykpKioqK+mpqmp
  qaurq7KpqaysrLGxsbKysrOzs7S0tLuxsbyzs7a2tri4uL+1tcG2trq6ury8
  vMO5ub29vcS6usa7u8e8vMDAwMi9vcfHx8nJyczMzM7Ozs/Pz9LS0tTU1NbW
  1tra2t3d3eLi4uTk5Ojo6Orq6uzs7P//////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////
  /////////////////////yH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGD
  CBMqXMiwocOHECMqlEOxokU5Ev+J0cKxo8eOZyKqqTNnTpeTaEquOelFopxE
  MIfIzAPzj8whSyK6QcTTh886PPv49FElitGjSJFiEZjmkFMcUOU45QMVh5Ms
  WLNq1fpFYJMiYAWJzQJWilhBQ2aoXcuWbRKBR1jINUT3ilwmdA0Bkcu3r18f
  AoeUGFyosJTBSgoX2jG4sePHOAQ+4UK5suXKKj5o3syZ8wyBXQiJ5kC6jOg5
  pFPr0ROEg4stcO6woRKCNAuBWQbpxsBbjO43vIOv7iECjp4xVtroCcO7hMAp
  e6KTmN4lOpkK2LGvzgFFDxjsJ1bYp6gAQiCJCejPIkHPnv1qGzWImEBfYXWM
  CRwEeojAP5B/I/wFGOBqMggYwQ96xEFBBBkIpEEDEAIioRAQVljhaitYSAMd
  dsAAoQUCGXHGiNOdl8CJKJ64GgootoBHHB2gOIFXftR4wI045njjaiPgaIYe
  POQogUBL9GEkAUgmqSSSOugAQZI36MCAkg4I9MJRA2Sp5ZZcdrmlAgItIMCY
  ZJZp5mobkIlmmQcIhEAAcMYp55yrXRBnnXIWINAEAPTp55+ABiqoAQM9YOCh
  iCYaQUaMNuooRAEBADs=
  }
  {Endgames}
  {
  R0lGODdhIAAgAKEAAP///wAAAP/73wAAACwAAAAAIAAgAAAChYSPqcsZDWOYsa5ns5lYXwoE
  AsZ54TQ+orqCFToK6RynVsulONpBO6/L9Ro/Hkd4Kx6FQ2JLBpUZPbBltfmyWjeg0ql3jAY3
  wTJYuySLxec1tIs+OuJD0RpLRZsUdvbe4Yan0RclmEH49oeAKKV4wDjiyKUlCcNm6EPnMghZ
  iMmn6SXJUAAAOw==
  }
  {Openings for White}
  {
  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
  ////Vf///ywAAAAAIAAgAAAErvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZJvXQLHWs22jec6
  Ca/3+gWCjyExZUQqURLf4XCkPE2UWtPaSmWL0+rkWvrCws6u9yGlpmnQiRbNhWMrYHd9bVbR
  x2plF2d6gHYDGIRiQoGIg0x/jIdLN5FJjZQDW4aZfoWSnSeboKGVn5eTlKOopaaLSRqtmpY/
  H7YetD9Tu7y9vpawv8LCr0IbAcjJysvMSFa30BwSEQA7
  }
  {Openings for Black}
  {
  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
  ////Vf///ywAAAAAIAAgAAAErvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZJvXQLHWs22jec6
  Ca/3+gWCjyExZUQqVaJak/I0caSHw5HaYm6wWmcXqgFvJ1VrtJg9C8enKzvMpcU7c3cSfsPD
  2mJ2fR5/dGh8H2txgHVkfiqMh4JLVpFvk5QDU5KZkIaXnYufe5iUm6ChN5akqaqjX62nSVmJ
  tRyrGlm6u7y9u3pJP77DvcDBGgHJysvMzUhUttExEQA7
  }
  {Openings for either color}
  {
  R0lGODdhIAAgANMAAAAAAAAAqgCqAACqqqoAAKoAqqpVAKqqqlVVVVVV/1X/VVX///9VVf9V
  ////Vf///ywAAAAAIAAgAAAEuvDJSau9F+jNu9cYMBxDaZ4oCoRj6rqgJZKq+JrAsVZzrd2l
  nG4n6Z04wIEwQHwYcZvksvmEJpWHA5NSVUaBU24LiryFJ1UPOLtFj73q17n4/tgkKja1/hlQ
  jnpiNEB/OIFugzeFQYd0iYoPeVp7jy6LWJOCSRaGmYibFZ1tjoQXjJ6kkJyYo05vlqaslFdy
  ja6VtLJcP7mSrUJ2wRy2GlnGx8jJx61OQsrPyczNGgHV1tfY2U27wt07EQA7
  }
  {Theory: 1.c4}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACfYRvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSqTSCYKB8lwWCQ3Wy1
  PCzZyU15wRdmerX+ZpHvCPY+H7fRZ2h9VvUX2CclaGTI4kc4uKfYWLh4GJkI+cgo5jZZo1EA
  ADs=  
  }
  {Theory: 1.d4}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACf4RvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSq8aEQCKRYJlYwGGyv
  E2VXyy17y2Bxtet8tMNbFlSuzZMva35cPXMHKOhHuGE2mFaoeNjX+Lf4ligZufdoiASHiVip
  UQAAOw==
  }
  {Theory: 1.d4 d5}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN3UggIwlTepa67pHzDoLBFbAF3m57jswzinqPobvpwZocaKneL9Opi
  yZdPMBgIaGWyeM32hrNodRxsftbTa1b+YWUj98fzVThDeJTYZKjohvd4uIglGel4V4l5KQip
  yTiXyRnqZwlQAAA7
  }
  {Theory: QGD: 1.d4 d5 2.c4 e6}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACmYRvoauIzNyB6wgxaZBJm3t1
  FAdo24eJEGmiYelxLQjCo+zRYYvfksn7xYS+l23VQ9JUkWQTYAw6eMvjc5rTWSvOig4jfQyx
  PhIZSURHFRduuikYDFJsuaDRxUNTtrb+DGfXETf3JzZCKBiQWMiStbSoc/LmBlh5CHSFqZlR
  tnnZiWZpGMrJBHpKmjo5yvqpugUbVooa63pQAAA7
  }
  {Theory: Slav: 1.d4 d5 2.c4 c6}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACmIRvoauIzI4QBy5XbTBzJo19
  lkSJUAhoG9CVKvq23hvGcgrWOUbz6u7oBXceU0Q3YnWMF+SJU8IlfckWs+GMyCjCB2grfVLF
  wymqTPZOi9JJc3wUDAaugJyOhb/ZC3ceHTdXdyfwp3ZyJ5iSiAfzdWMns6JnmGF2+PMGqInJ
  aZn2eUQ5uVl5RdppGiZaihrqeep4+aradVAAADs=	  
  }
  {Theory: 1.d4 Nf6}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACioRvoauIKqJoLrFVrYwhg4tl
  wcZ5IFWNZCeeJiexqdtCZX29q0lXZNxznGTC4MN4GPJAyxyO0YQ+QzPmFFW0Vp1baZfqyXLF
  3iwHe9QWBYPBhJgep8/wJFLTfkfBD3bbXWeh1rdzFfhxhzg0aMcoKNcI+VgWRxlpOcl3qZmJ
  tunZeahkuAeqKAlQAAA7	  
  }
  {Theory: 1.e4}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACfYRvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN3UniXebq3/fuLBWlDmwN31CV5S18T+BRqokSq8aETCCZKbEowGGw3
  XS5Pa3Z6W2DxhbmOtMNbZLyizdfLb3V6JnVXJXj1F2g4iFjYB0XI0qj4eMg4SQYXWSOZaFAA
  ADs=
  }
  {Theory: Sicilian: 1.e4 c5}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAAChYRvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN30iII8V3yeU7jpYTAoCPk+xkfveNPyXrdnsDo7thkDjXYrbYlBOcm
  WXJKMBgILl6zeM0Gd1todVw6j9TTa2S+QtVXdnf1NVPohmeISLiUyLgxGNnWaPPnWGmFOSm3
  uOnnaRmqUQAAOw==
  }
  {Theory: Sicilian: 1.e4 c5 2.Nf3 d6 3.d4}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACo4RvoauIzNxZQiyZYMOq1i1p
  oENZ4yNiQOedU8p5rSoGtPzRcLiTdY/S6AIfV0bIIbZsSSRPeWlCdDLjCjjBWYbTGI757IYj
  UrJqHEVbS+nKy+kTDAYmg5x+FPugIHfeHDdXB3An8JdGcidoo4hXc/NFiHMFF6Rn+YOIGSVz
  uJbSaPhYRjFnKorlSURXSHn5BuFB6JjqatY6qsaoiFoJy6BVUQAAOw==
  }
  {Theory: Caro-Kann: 1.e4 c6}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzI4QBy5XbTBzJo19
  lkSJUAhoG9CVKvq23hvGcgrWOUbz6u7oBYEPYmakQ/qUQ2bReTwlpUtq0/rERiNTLqrqvYaz
  Xo9pvL2wBgOX8axmlXBQeGPdtq/AFwGbTSFE1ncjmHbH97MnFseI6Lg4+CgZeVipB/NGp4XZ
  1UiZWbeJ1olRAAA7
  }
  {Theory: French: 1.e4 e6}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACiIRvoauIzNyB6wgxaZBJm3t1
  FAdo24eJEGmiYelxLQjCo+zRYYvfksn7xYQ+R9A4RBYfSeYy81RFeivqlFjFXpVZ7pbk7Ia/
  0OzLJi5PBYNB6jiuoNRyrZztlta9FXwbA0fXoAPYJHhiB4TI12C1F9eYuAg5echiqBfJWJnJ
  iUbWeRn1+WjJUQAAOw==
  }
  {Theory: Open Games: 1.e4 e5}
  {
  R0lGODdhIAAgAKEAAP/739jGpgAAAP///ywAAAAAIAAgAAACh4RvoauIzNyBSyYaLMDZcv15
  GDiKFHmaELqqkVvBXCN3UngrghDnab7b0Xwtn3DowCUDQZ5t+Us2hazXbcqr9qBFDdf63T5K
  gN2EHKYJBgPBJTr+md/deGvdpoPtETzbrcRXgbWBJoh0OKOFeAbXWPe4Fyk2yahHeWlZ6Jj5
  lLjoWRnaCapRAAA7
  }
}

variable ::windows::switcher::base_types {}

# Initialise icons nicely

set i 0
foreach {icon data} $icons {
  lappend ::windows::switcher::base_types $icon
  image create photo dbt$i -format gif -data $data
  incr i
}

set numBaseTypeIcons [llength $::windows::switcher::base_types]

set temp_dbtype 0

proc selectBaseType {type} {
  global temp_dbtype
  set w .btypeWin
  if {![winfo exists $w]} { return }
  $w.t configure -state normal
  set temp_dbtype $type
  set linenum [expr $type + 1]
  $w.t tag remove sel 1.0 end
  $w.t tag remove selected 1.0 end
  $w.t tag add selected "${linenum}.2 linestart" "$linenum.2 lineend"
  $w.t see $linenum.2
  $w.t configure -state disabled
}

proc clickBaseType {x y} {
  set type [.btypeWin.t index "@$x,$y linestart"]
  set type [expr int($type) - 1]
  selectBaseType $type
}

proc changeBaseType {baseNum} {
  global temp_dbtype ::windows::switcher::base_types numBaseTypeIcons
  if {$baseNum > [sc_base count total]} { return }
  set temp_dbtype [sc_base type $baseNum]
  if {$temp_dbtype >= $numBaseTypeIcons} { set temp_dbtype 0 }
  toplevel .btypeWin
  set w .btypeWin
  wm title $w "Scid: Choose database icon"

  text $w.t -yscrollcommand "$w.yscroll set" -font font_Regular \
    -height 25 -width 40 -background white -wrap none \
    -cursor top_left_arrow
  $w.t tag configure selected -background lightSteelBlue

  scrollbar $w.yscroll -command "$w.t yview" -takefocus 0
  pack [frame $w.b] -side bottom -pady 5
  pack $w.yscroll -side right -fill y
  pack $w.t -side left -fill both -expand yes

  dialogbutton $w.b.set -text "OK" -command \
    "catch {sc_base type $baseNum \$temp_dbtype}; ::windows::switcher::Refresh; ::maint::Refresh;
     focus .; destroy $w"

  dialogbutton $w.b.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
  pack $w.b.set $w.b.cancel -side left -padx 5

  set numtypes [llength $base_types]
  for {set i  0} {$i < $numtypes} {incr i} {
    if {$i > 0} { $w.t insert end "\n" }
    $w.t image create end -image dbt$i -pady 3 -padx 3
    $w.t insert end "   [lindex $base_types $i]  "
  } 

  bind $w.t <Double-ButtonRelease-1> "clickBaseType %x %y; $w.b.set invoke"
  bind $w.t <ButtonRelease-1> "clickBaseType %x %y"
  bind $w.t <Button1-Motion> "clickBaseType %x %y; break"

  bind $w <Up> {
    if {$temp_dbtype != 0} { selectBaseType [expr $temp_dbtype - 1] }
    break
  }

  bind $w <Down> {
    if {$temp_dbtype < [expr [llength $base_types] - 1]} {
      selectBaseType [expr $temp_dbtype + 1]
    }
    break
  }

  bind $w <Home> { selectBaseType 0 }
  bind $w <End> { selectBaseType [expr [llength $base_types] - 1] }
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <Return> "$w.b.set invoke"

  focus $w.t
  grab $w
  update
  selectBaseType $temp_dbtype
}



proc ::windows::switcher::pressMouseEvent {i {w .baseWin}} {
  if {! [winfo exists $w]} {return}
  foreach win {"" .img .name .ngames} {
    $w.c.f$i$win configure -cursor exchange
  }
}

proc ::windows::switcher::releaseMouseEvent {fromBase x y {w .baseWin}} {
  if {! [winfo exists $w]} {return}
  foreach win {"" .img .name .ngames} {
    $w.c.f$fromBase$win configure -cursor {}
  }
  set dropPoint [winfo containing $x $y]
  if {! [string match "$w.c.f*" $dropPoint]} {return}
  regexp -all {[0-9]} $dropPoint toBase
  if {$toBase == $fromBase} {
    ::file::SwitchToBase $toBase
  } else {
    copyFilter $fromBase $toBase
  }
}

set baseWin 0
set sw_nBases_ [sc_base count total]
set ::windows::switcher::wins {}

proc ::windows::switcher::Open {{w .baseWin}} {
  global baseWin
  if {[::createToplevel $w] == "already_exists"} {
    focus .
    destroy $w
    set baseWin 0
    return
  }
  
  setWinLocation $w
  ::setTitle $w "Scid: [tr WindowsSwitcher]"
  bind $w <Escape> "focus .; destroy $w"
  bind $w <Destroy> "+set baseWin 0"
  bind $w <F1> { helpWindow Switcher }
  standardShortcuts $w
  ::windows::switcher::Create $w
  label $w.status -width 1 -anchor w -relief sunken -borderwidth 1
  grid $w.status -columnspan 2 -sticky we
  bind $w <Configure> "+recordWinSize $w"
  setWinSize $w
  ::windows::switcher::Refresh
  ::createToplevelFinalize $w
}

proc ::windows::switcher::Create {{w}} {
  ttk::frame $w.border -borderwidth 2 -relief groove
  grid $w.border -sticky news
  grid rowconfigure $w 0 -weight 1
  grid columnconfigure $w 0 -weight 1
  autoscrollframe -bars y $w.border canvas $w.c -highlightthickness 0

  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
    set f [frame $w.c.f$i -background white -borderwidth 1 -relief raised]
    $w.c create window 0 0 -window $w.c.f$i -anchor nw -tag tag$i

    set f $w.c.f$i
    label $f.img -image dbt0
    label $f.name -width 12 -anchor w -font font_Small
    label $f.ngames -text "0" -width 12 -anchor e -font font_Tiny
    grid $f.img -row 0 -column 0 -rowspan 2
    grid $f.name -row 0 -column 1 -sticky we
    grid $f.ngames -row 1 -column 1 -sticky we

    foreach win {"" .img .name .ngames} {
      bind $f$win <ButtonPress-1> [list ::windows::switcher::pressMouseEvent $i $w]
      bind $f$win <ButtonRelease-1> [list ::windows::switcher::releaseMouseEvent $i %X %Y $w]
    }

    menu $f.menu -tearoff 0
    $f.menu add command -label [tr SearchReset] \
      -command "::search::filter::reset $i"
    $f.menu add command -label [tr ChangeIcon] -command "changeBaseType $i"
    $f.menu add separator
    $f.menu add command -label [tr FileOpen] -command ::file::Open
    set closeLabel [tr FileClose]
    if {$i == [sc_info clipbase]} { set closeLabel [tr EditReset] }
    $f.menu add command -label $closeLabel \
      -command [list ::file::Close $i]
    #TODO: write a better dialog and remove [sc_base filename] from GameFileCompacted
    $f.menu add command -label $::tr(CompactDatabase) -command "compactGames $i; compactNames $i"
    $f.menu add separator
    $f.menu add checkbutton -label "Icons" -variable ::windows::switcher::icons \
      -command ::windows::switcher::Refresh
    foreach win {"" .img .name .ngames} {
      #TODO: disable CompactDatabase for clipbase, read-only bases, and bases already fully compacted
      #set err [catch {set stats [sc_base compact $base stats names]} msg]
      bind $f$win <ButtonPress-$::MB3> "tk_popup $f.menu %X %Y"
    }
  }
  bind $w <Configure> "+::windows::switcher::Update_ $w"
  bind $w <Destroy> { set idx [lsearch $::windows::switcher::wins %W]; set ::windows::switcher::wins [lreplace $::windows::switcher::wins $idx $idx] }
  lappend ::windows::switcher::wins $w

  after idle "::windows::switcher::Update_ $w"
}

proc ::windows::switcher::calcSpace {{w} {selected}} {
  global numBaseTypeIcons
  variable icons
  if {! [winfo exists $w]} { return }

  set n_bases 0
  set clipbase [sc_info clipbase]
  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
    if {[sc_base inUse $i]} {
      incr n_bases
      set color white
      if {$i == $selected} { set color lightSteelBlue }

      $w.c.f$i configure -background $color
      if {$icons} {
        set dbtype [sc_base type $i]
        if {$dbtype >= $numBaseTypeIcons} { set dbtype 0 }
        $w.c.f$i.img configure -image dbt$dbtype -background $color
		grid $w.c.f$i.img -row 0 -column 0 -rowspan 2
      } else {
        grid forget $w.c.f$i.img
      }
      if {$i == $clipbase} {
        set name [sc_base filename $i]
      } else {
        set name "[file tail [sc_base filename $i]]"
      }
      $w.c.f$i.name configure -background $color -text $name
      $w.c.f$i.ngames configure -background $color -text "[filterText $i 100000]"
      $w.c itemconfigure tag$i -state normal
    } else {
      $w.c itemconfigure tag$i -state hidden
    }
  }

  set iconWidth [winfo width $w.c.f$clipbase]
  incr iconWidth 5
  set iconHeight [winfo height $w.c.f$clipbase]
  incr iconHeight 5

  return [list $n_bases $iconWidth $iconHeight]
}

proc ::windows::switcher::Draw {{w} {numColumns} {iconWidth} {iconHeight} } {
  set numRows 0
  set column 0
  set x 0
  set y 0
  for {set i 1} {$i <= $::sw_nBases_} {incr i} {
    if {[sc_base inUse $i]} {
      $w.c coords tag$i [expr $x + 2] [expr $y + 2]
      incr column
      if { $x == 0} { incr numRows }
      if {$column == $numColumns} {
        set column 0
        set x 0
        incr y $iconHeight
      } else {
        incr x $iconWidth
      }
    }
  }

  if {$numRows < 1} { set numRows 1 }
  set right [expr {$numColumns * $iconWidth}]
  set bottom [expr {$numRows * $iconHeight}]
  set bgcolor [ttk::style lookup Button.label -background]
  $w.c configure -scrollregion [list 0 0 $right $bottom] -borderwidth 4 -relief flat -background $bgcolor
}

proc ::windows::switcher::Refresh {} {
  foreach w $::windows::switcher::wins {
    if {[winfo exists $w]} { ::windows::switcher::Update_ $w }
  }
}

proc ::windows::switcher::Update_ {w} {
  set base [sc_base current]
  set space [::windows::switcher::calcSpace $w $base]
  set n_bases [lindex $space 0]
  set iconWidth [lindex $space 1]
  set iconHeight [lindex $space 2]

  #TODO: write better code to detect if this is the Switcher Window
  if {[winfo exists $w.status]} {
    set canvasWidth [winfo width $w.c]
    set numColumns [expr {int($canvasWidth / $iconWidth)}]
    if {$numColumns < 1} { set numColumns 1 }
    ::windows::switcher::Draw $w $numColumns $iconWidth $iconHeight
    set status [file nativename [sc_base filename [sc_base current] ] ]
    if {[sc_base isReadOnly]} { append status " ($::tr(readonly))" }
    $w.status configure -text $status
  } else {
    #TODO: if $w parent is too small do not use 2 columns
    if {[winfo height $w.c] < [expr $iconHeight * ($n_bases)]} {
      $w.c configure -width [expr $iconWidth * 2]
      ::windows::switcher::Draw $w 2 $iconWidth $iconHeight
    } else {
      $w.c configure -width $iconWidth
	  ::windows::switcher::Draw $w 1 $iconWidth $iconHeight
    }
  }
}
###
### search.tcl: Search routines for Scid.
###

namespace eval ::search {}

# searchType: set to Header or Material in a SearchOptions file
set searchType 0

set ::search::filter::operation 2


# TODO: Rename to ::search::filter::text
# filterText: returns text describing state of filter for specified
#   database, e.g. "no games" or "all / 400" or "1,043 / 2,057"
#
proc filterText {{base 0} {kilo 0}} {
  # Default to current base if no base specified:
  if {$base == 0} { set base [sc_base current] }
  set filterCount [sc_filter count $base]
  set gameCount [sc_base numGames $base]
  if {$gameCount == 0} { return $::tr(noGames) }
  if {$gameCount == $filterCount} {
    return "$::tr(all) / [::utils::thousands $gameCount $kilo]"
  }
  return "[::utils::thousands $filterCount $kilo] / [::utils::thousands $gameCount $kilo]"
}


# search::filter::reset
#   Resets the filter to contain all games. Calls sc_filter reset and
#   updates relevant windows.
#
proc ::search::filter::reset {{base 0}} {
  if {$base == 0} { set base [sc_base current] }
  sc_filter reset $base
  ::windows::gamelist::Refresh
  ::tree::refresh
  ::windows::stats::Refresh
  updateMenuStates
}

# ::search::filter::negate
#
#   Negates the filter, to include only excluded games.
#
proc ::search::filter::negate {} {
  sc_filter negate
  ::windows::gamelist::Refresh
  ::tree::refresh
  ::windows::stats::Refresh
  updateMenuStates
}



# ::search::addFilterOpFrame
#
#   Adds a search filter operation selection frame to the window.
#   Adds a frame of radiobuttons allowing the filter operation
#   (AND with current filter, OR with current filter, or RESET filter)
#   to be chosen.
#   The default value for the first search is RESET:
proc ::search::addFilterOpFrame {w {small 0}} {
  ttk::frame $w.filterop
  set f $w.filterop
  pack $f -side top -fill x
  
  set regular Regular.TRadiobutton
  set bold Bold.TRadiobutton
  if {$small} {
    set regular Small.TRadiobutton
    set bold SmallBold.TRadiobutton
  }
  
  ttk::label $f.title -font $bold -textvar ::tr(FilterOperation) -anchor center
  ttk::frame $f.b
  ttk::radiobutton $f.b.and -textvar ::tr(FilterAnd) -variable ::search::filter::operation -value 0 -style $regular 
  ttk::radiobutton $f.b.or -textvar ::tr(FilterOr) -variable ::search::filter::operation -value 1 -style $regular
  ttk::radiobutton $f.b.ignore -textvar ::tr(FilterIgnore) -variable ::search::filter::operation -value 2 -style $regular
  ## ttk::radiobutton $f.b.search -textvar ::tr(FilterIgnore) -variable ::search::filter::operation -value 3 -style $regular
  pack $f.title -side top
  pack $f.b -anchor center -side top
  pack $f.b.and $f.b.or $f.b.ignore -side left -pady 5 -padx 5
  ### pack $f.b.and $f.b.or $f.b.ignore $f.b.search -side left -pady 5 -padx 5
}


# ::search::Config
#
#   Sets state of Search button in Header, Board and Material windows
#
proc ::search::Config {{state ""}} {
  if {$state == ""} {
    set state disabled
    if {[sc_base inUse]} { set state normal }
  }
  catch {.sh.b.search configure -state $state }
  catch {.sb.b.search configure -state $state }
  catch {.sm.b3.search configure -state $state }
  catch {.spprep.b.search configure -state $state }
}


proc ::search::usefile {} {
  set ftype { { "Scid SearchOption files" {".sso"} } }
  set ::fName [tk_getOpenFile -initialdir $::initialDir(base) \
      -filetypes $ftype -title "Select a SearchOptions file"]
  if {$::fName == ""} { return }
  
  if {[catch {uplevel "#0" {source $::fName} } ]} {
    tk_messageBox -title "Scid: Error reading file" -type ok -icon warning \
        -message "Unable to open or read SearchOptions file: $fName"
  } else {
    switch -- $::searchType {
      "Material" { ::search::material }
      "Header"   { ::search::header }
      default    { return }
    }
  }
}

# will go to the first game found, except if the Tree of current base is opened (of there will be filter collision)
proc ::search::loadFirstGame {} {
  set w ".treeWin[sc_base current]"
  if {[winfo exists $w]} { return }
  ::game::Load [sc_filter first]
}
###
### search/board.tcl: Board Search routines for Scid.
###

set searchInVars 0
set sBoardIgnoreCols 0
set sBoardSearchType Exact
set sBoardSearchRefBase 0

# ::search::board
#   Opens the search window for the current board position.
#
proc ::search::board {} {
  global searchInVars sBoardType sBoardIgnoreCols
  
  set w .sb
  if {[winfo exists $w]} {
    wm deiconify $w
    raiseWin $w
    return
  }
  
  toplevel $w
  wm title $w "Scid: $::tr(BoardSearch)"
  
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <Return> "$w.b.search invoke"
  bind $w <F1> { helpWindow Searches Board }
  
  ttk::label $w.type -textvar ::tr(SearchType) -font font_Bold -anchor center
  pack $w.type -side top -expand 1 -fill x
  pack [ttk::frame $w.g] -side top -fill x
  ttk::radiobutton $w.g.exact -textvar ::tr(SearchBoardExact) -variable sBoardSearchType -value Exact
  ttk::radiobutton $w.g.pawns -textvar ::tr(SearchBoardPawns) -variable sBoardSearchType -value Pawns
  ttk::radiobutton $w.g.files -textvar ::tr(SearchBoardFiles) -variable sBoardSearchType -value Fyles
  ttk::radiobutton $w.g.material -textvar ::tr(SearchBoardAny) -variable sBoardSearchType -value Material
  set row 0
  foreach i {exact pawns files material} {
    grid $w.g.$i -row $row -column 0 -sticky w
    incr row
  }
  addHorizontalRule $w
  
  pack [ttk::frame $w.refdb] -side top -fill x
  ttk::checkbutton $w.refdb.cb -textvar ::tr(SearchInRefDatabase) -variable sBoardSearchRefBase
  set listbases {}
  # populate the combobox
  for {set i 1} {$i <= [sc_base count total]} {incr i} {
    if {[sc_base inUse $i]} {
      set fname [file tail [sc_base filename $i]]
      lappend listbases "$i $fname"
    }
  }
  ttk::combobox $w.refdb.lb -textvariable refDatabase -values $listbases
  $w.refdb.lb current 0
  
  pack $w.refdb.cb $w.refdb.lb -side left
  addHorizontalRule $w
  
  ::search::addFilterOpFrame $w
  addHorizontalRule $w
  
  ### Progress bar:
  
  ttk::frame $w.fprogress
  canvas $w.fprogress.progress -height 20 -width 300 -bg white -relief solid -border 1
  $w.fprogress.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.fprogress.progress create text 295 10 -anchor e -font font_Regular -tags time -fill black -text "0:00 / 0:00"
  pack $w.fprogress.progress -side top -anchor center -expand 1 -pady 2
  
  ttk::frame $w.b2
  pack $w.b2 -side top -fill x
  ttk::frame $w.b
  pack $w.b -side top -fill x
  ttk::checkbutton $w.b2.vars -textvar ::tr(LookInVars) -onvalue 1 -offvalue 0 -variable searchInVars
  ttk::checkbutton $w.b2.flip -textvar ::tr(IgnoreColors) -onvalue 1 -offvalue 0 -variable sBoardIgnoreCols
  
  dialogbutton $w.b.stop -textvar ::tr(Stop) -command sc_progressBar
  $w.b.stop configure -state disabled
  
  dialogbutton $w.b.search -textvar ::tr(Search) -command {
    busyCursor .
    .sb.b.stop configure -state normal
    grab .sb.b.stop
    sc_progressBar .sb.fprogress.progress bar 301 21 time
    
    set base ""
    if { $sBoardSearchRefBase } {
      set base [lindex $refDatabase 0]
      set str [sc_search board $::search::filter::operation $sBoardSearchType $searchInVars $sBoardIgnoreCols $base]
    } else  {
      set str [sc_search board $::search::filter::operation $sBoardSearchType $searchInVars $sBoardIgnoreCols ]
    }
    unbusyCursor .
    grab release .sb.b.stop
    .sb.b.stop configure -state disabled
    #tk_messageBox -type ok -title $::tr(SearchResults) -message $str
    .sb.status configure -text $str
    set gamesFound [lindex $str 0]
    if { $sBoardSearchRefBase && $gamesFound != 0} {
      ::file::SwitchToBase $base 0
      #TODO: "sc_filter first" result is unsorted (the lowest gamenumber)
      ::game::Load [sc_filter first]
    } else {
      ::notify::DatabaseChanged
    }
  }
  dialogbutton $w.b.cancel -textvar ::tr(Close) -command "focus .; destroy $w"
  pack $w.b2.vars $w.b2.flip -side left -pady 2 -padx 5
  packbuttons right $w.b.cancel .sb.b.search .sb.b.stop
  pack $w.fprogress -side top -fill x
  ttk::label $w.status -text "" -width 1 -font font_Small -relief sunken -anchor w
  pack $w.status -side bottom -fill x
  wm resizable $w 0 0
  # standardShortcuts $w
  ::search::Config
  focus $w.b.search
}
###
### search/header.tcl: Header Search routines for Scid.
###

namespace eval ::search::header {}

set sWhite "";  set sBlack "";  set sEvent ""; set sSite "";  set sRound ""; set sAnnotator ""; set sAnnotated 0;
set sWhiteEloMin 0; set sWhiteEloMax [sc_info limit elo]
set sBlackEloMin 0; set sBlackEloMax [sc_info limit elo]
set sEloDiffMin "-[sc_info limit elo]"; set sEloDiffMax "+[sc_info limit elo]"
set sTitleList [list gm im fm none wgm wim wfm w]
foreach i $sTitleList {
  set sTitles(w:$i) 1
  set sTitles(b:$i) 1
}
set sGlMin 0; set sGlMax 999
set sEcoMin "A00";  set sEcoMax "E99"; set sEco Yes
set sDateMin "0000.00.00"; set sDateMax "[sc_info limit year].12.31"
set sResWin 1; set sResLoss 1; set sResDraw 1; set sResOther 1
set sGnumMin 1; set sGnumMax -1
set sIgnoreCol No
set sSideToMove wb
set sHeaderFlagList {StdStart Promotions Comments Variations Annotations \
      DeleteFlag WhiteOpFlag BlackOpFlag MiddlegameFlag EndgameFlag \
      NoveltyFlag PawnFlag TacticsFlag KsideFlag QsideFlag \
      BrilliancyFlag BlunderFlag UserFlag }

set sHeaderCustomFlagList {  CustomFlag1 CustomFlag2 CustomFlag3 CustomFlag4 CustomFlag5 CustomFlag6 }

foreach i [ concat $sHeaderFlagList $sHeaderCustomFlagList ] {
  set sHeaderFlags($i) both
}
set sPgntext(1) ""
set sPgntext(2) ""
set sPgntext(3) ""

trace variable sDateMin w ::utils::validate::Date
trace variable sDateMax w ::utils::validate::Date

foreach i {sWhiteEloMin sWhiteEloMax sBlackEloMin sBlackEloMax} {
  trace variable $i w [list ::utils::validate::Integer [sc_info limit elo] 0]
}
trace variable sEloDiffMin w [list ::utils::validate::Integer "-[sc_info limit elo]" 0]
trace variable sEloDiffMax w [list ::utils::validate::Integer "-[sc_info limit elo]" 0]

trace variable sGlMin w {::utils::validate::Integer 9999 0}
trace variable sGlMax w {::utils::validate::Integer 9999 0}

trace variable sGnumMin w {::utils::validate::Integer -9999999 0}
trace variable sGnumMax w {::utils::validate::Integer -9999999 0}

# Forcing ECO entry to be valid ECO codes:
foreach i {sEcoMin sEcoMax} {
  trace variable $i w {::utils::validate::Regexp {^$|^[A-Ea-e]$|^[A-Ea-e][0-9]$|^[A-Ea-e][0-9][0-9]$|^[A-Ea-e][0-9][0-9][a-z]$|^[A-Ea-e][0-9][0-9][a-z][1-4]$}}
}

# checkDates:
#    Checks minimum/maximum search dates in header search window and
#    extends them if necessary.
proc checkDates {} {
  global sDateMin sDateMax
  if {[string length $sDateMin] == 0} { set sDateMin "0000" }
  if {[string length $sDateMax] == 0} { set sDateMax [sc_info limit year]}
  if {[string length $sDateMin] == 4} { append sDateMin ".??.??" }
  if {[string length $sDateMax] == 4} { append sDateMax ".12.31" }
  if {[string length $sDateMin] == 7} { append sDateMin ".??" }
  if {[string length $sDateMax] == 7} { append sDateMax ".31" }
}

proc ::search::header::defaults {} {
  global sWhite sBlack sEvent sSite sRound sAnnotator sAnnotated sDateMin sDateMax sIgnoreCol sSideToMove
  global sWhiteEloMin sWhiteEloMax sBlackEloMin sBlackEloMax
  global sEloDiffMin sEloDiffMax
  global sEco sEcoMin sEcoMax sHeaderFlags sGlMin sGlMax
  global sGnumMin sGnumMax
  global sResWin sResLoss sResDraw sResOther
  global sPgntext sTitles
  
  set sWhite "";  set sBlack ""
  set sEvent ""; set sSite "";  set sRound ""; set sAnnotator ""; set sAnnotated 0
  set sWhiteEloMin 0; set sWhiteEloMax [sc_info limit elo]
  set sBlackEloMin 0; set sBlackEloMax [sc_info limit elo]
  set sEloDiffMin "-[sc_info limit elo]"
  set sEloDiffMax "+[sc_info limit elo]"
  set sGlMin 0; set sGlMax 999
  set sEcoMin "A00";  set sEcoMax "E99"; set sEco Yes
  set sGnumMin 1; set sGnumMax -1
  set sDateMin "0000.00.00"; set sDateMax "[sc_info limit year].12.31"
  set sResWin 1; set sResLoss 1; set sResDraw 1; set sResOther 1
  set sIgnoreCol No
  set sSideToMove wb
  foreach flag  [ concat $::sHeaderFlagList $::sHeaderCustomFlagList ] { set sHeaderFlags($flag) both }
  foreach i [array names sPgntext] { set sPgntext($i) "" }
  foreach i $::sTitleList {
    set sTitles(w:$i) 1
    set sTitles(b:$i) 1
  }
}

::search::header::defaults

set sHeaderFlagFrame 0

# ::search::header
#
#   Opens the window for searching by header information.
#
proc search::header {} {
  global sWhite sBlack sEvent sSite sRound sAnnotator sAnnotated sDateMin sDateMax sIgnoreCol
  global sWhiteEloMin sWhiteEloMax sBlackEloMin sBlackEloMax
  global sEloDiffMin sEloDiffMax sSideToMove
  global sEco sEcoMin sEcoMax sHeaderFlags sGlMin sGlMax sTitleList sTitles
  global sResWin sResLoss sResDraw sResOther sPgntext
    
  set w .sh
  if {[winfo exists $w]} {
    wm deiconify $w
    raiseWin $w
    return
  }
  
  toplevel $w
  wm title $w "Scid: $::tr(HeaderSearch)"
  foreach frame {cWhite cBlack ignore tw tb eventsite dateround res ano gl ends eco} {
    ttk::frame $w.$frame
  }
  
  raise $w
  
  bind $w <F1> { helpWindow Searches Header }
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <Return> "$w.b.search invoke"
  
  set regular font_Small
  set bold font_SmallBold
  
  foreach color {White Black} {
    pack $w.c$color -side top -fill x
    ttk::label $w.c$color.lab -textvar ::tr($color:) -font $bold -width 9 -anchor w
    ttk::combobox $w.c$color.e -textvariable "s$color" -width 40
    ::utils::history::SetCombobox HeaderSearch$color $w.c$color.e
    bind $w.c$color.e <Return> { .sh.b.search invoke; break }
    
    ttk::label $w.c$color.space
    ttk::label $w.c$color.elo1 -textvar ::tr(Rating:) -font $bold
    ttk::entry $w.c$color.elomin -textvar s${color}EloMin -width 6 -justify right \
        -font $regular
    ttk::label $w.c$color.elo2 -text "-" -font $regular
    ttk::entry $w.c$color.elomax -textvar s${color}EloMax -width 6 -justify right \
        -font $regular
    bindFocusColors $w.c$color.e
    bindFocusColors $w.c$color.elomin
    bindFocusColors $w.c$color.elomax
    pack $w.c$color.lab $w.c$color.e $w.c$color.space -side left
    pack $w.c$color.elomax $w.c$color.elo2 $w.c$color.elomin $w.c$color.elo1 \
        -side right
  }
  
  pack $w.ignore -side top -fill x
  ttk::label $w.ignore.l -textvar ::tr(IgnoreColors:) -font $bold
  ttk::radiobutton $w.ignore.yes -variable sIgnoreCol -value Yes -textvar ::tr(Yes) -style Small.TRadiobutton
  ttk::radiobutton $w.ignore.no  -variable sIgnoreCol -value No -textvar ::tr(No) -style Small.TRadiobutton
  pack $w.ignore.l $w.ignore.yes $w.ignore.no -side left
  ttk::label $w.ignore.rdiff -textvar ::tr(RatingDiff:) -font $bold
  ttk::entry $w.ignore.rdmin -width 6 -textvar sEloDiffMin -justify right -font $regular
  ttk::label $w.ignore.rdto -text "-" -font $regular
  ttk::entry $w.ignore.rdmax -width 6 -textvar sEloDiffMax -justify right -font $regular
  bindFocusColors $w.ignore.rdmin
  bindFocusColors $w.ignore.rdmax
  pack $w.ignore.rdmax $w.ignore.rdto $w.ignore.rdmin $w.ignore.rdiff \
      -side right
  
  set spellstate normal
  if {[lindex [sc_name read] 0] == 0} { set spellstate disabled }
  foreach c {w b} name {White Black} {
    pack $w.t$c -side top -fill x
    ttk::label $w.t$c.label -text "$::tr($name) FIDE:" -font $bold -width 14 -anchor w
    pack $w.t$c.label -side left
    foreach i $sTitleList {
      set name [string toupper $i]
      if {$i == "none"} { set name "-" }
      ttk::checkbutton $w.t$c.b$i -text $name -width 5 -variable sTitles($c:$i) -offvalue 0 -onvalue 1 -state $spellstate
      pack $w.t$c.b$i -side left -padx 1
    }
  }
  
  addHorizontalRule $w
  
  set f $w.eventsite
  pack $f -side top -fill x
  foreach i {Event Site} {
    ttk::label $f.l$i -textvar ::tr(${i}:) -font $bold
    ttk::combobox $f.e$i -textvariable s$i -width 30
    bind $f.e$i <Return> { .sh.b.search invoke ; break }
    ::utils::history::SetCombobox HeaderSearch$i $f.e$i
    bindFocusColors $f.e$i
  }
  pack $f.lEvent $f.eEvent -side left
  pack $f.eSite $f.lSite -side right
  
  set f $w.dateround
  pack $f -side top -fill x
  ttk::label $f.l1 -textvar ::tr(Date:) -font $bold
  ttk::label $f.l2 -text "-" -font $regular
  ttk::label $f.l3 -text " " -font $regular
  ttk::entry $f.emin -textvariable sDateMin -width 10 -font $regular
  button $f.eminCal -image tb_calendar -padx 0 -pady 0 -command {
    regsub -all {[.]} $sDateMin "-" newdate
    set ndate [::utils::date::chooser $newdate]
    if {[llength $ndate] == 3} {
      set sDateMin "[lindex $ndate 0].[lindex $ndate 1].[lindex $ndate 2]"
    }
  }
  ttk::entry $f.emax -textvariable sDateMax -width 10 -font $regular
  button $f.emaxCal -image tb_calendar -padx 0 -pady 0 -command {
    regsub -all {[.]} $sDateMax "-" newdate
    set ndate [::utils::date::chooser $newdate]
    if {[llength $ndate] == 3} {
      set sDateMax "[lindex $ndate 0].[lindex $ndate 1].[lindex $ndate 2]"
    }
  }
  bindFocusColors $f.emin
  bindFocusColors $f.emax
  bind $f.emin <FocusOut> +checkDates
  bind $f.emax <FocusOut> +checkDates
  ttk::button $f.lyear -textvar ::tr(YearToToday) -style Pad0.Small.TButton -command {
    set sDateMin "[expr [::utils::date::today year]-1].[::utils::date::today month].[::utils::date::today day]"
    set sDateMax [::utils::date::today]
  }
  
  pack $f.l1 $f.emin $f.eminCal $f.l2 $f.emax $f.emaxCal $f.l3 $f.lyear -side left
  
  ttk::label $f.lRound -textvar ::tr(Round:) -font $bold
  ttk::entry $f.eRound -textvariable sRound -width 10 -font $regular
  bindFocusColors $f.eRound
  pack $f.eRound $f.lRound -side right
  
  addHorizontalRule $w
  
  pack .sh.res -side top -fill x
  ttk::label $w.res.l1 -textvar ::tr(Result:) -font $bold
  pack $w.res.l1 -side left
  foreach i {win draw loss other} \
      v {sResWin sResDraw sResLoss sResOther} \
      text {"1-0 "  "1/2-1/2 "  "0-1 "  "* "} {
        ttk::checkbutton $w.res.e$i -text $text -variable $v -offvalue 0 -onvalue 1
        pack $w.res.e$i -side left
      }
  
  ttk::label $w.gl.l1 -textvar ::tr(GameLength:) -font $bold
  ttk::label $w.gl.l2 -text "-" -font $regular
  ttk::label $w.gl.l3 -textvar ::tr(HalfMoves) -font $regular
  ttk::entry $w.gl.emin -textvariable sGlMin -justify right -width 4 -font $regular
  ttk::entry $w.gl.emax -textvariable sGlMax -justify right -width 4 -font $regular
  bindFocusColors $w.gl.emin
  bindFocusColors $w.gl.emax
  pack $w.gl -in $w.res -side right -fill x
  pack $w.gl.l1 $w.gl.emin $w.gl.l2 $w.gl.emax $w.gl.l3 -side left
  
  ttk::label $w.ends.label -textvar ::tr(EndSideToMove:) -font $bold
  ttk::frame $w.ends.sep1 -width 5
  ttk::frame $w.ends.sep2 -width 5
  ttk::radiobutton $w.ends.white -textvar ::tr(White) -variable sSideToMove -value w
  ttk::radiobutton $w.ends.black -textvar ::tr(Black) -variable sSideToMove -value b
  ttk::radiobutton $w.ends.both -textvar ::tr(Both) -variable sSideToMove -value wb
  pack $w.ends.label $w.ends.white $w.ends.sep1 $w.ends.black $w.ends.sep2 $w.ends.both -side left
  pack $w.ends -side top -fill x
  
  addHorizontalRule $w
  
  pack .sh.ano -side top -fill x
  ttk::label $w.ano.a1 -textvar ::tr(Annotations:) -font $bold
  ttk::label $w.ano.a2 -textvar ::tr(Annotator:) -font $bold
  ttk::checkbutton $w.ano.an -textvar ::tr(Cmnts:) -variable sAnnotated -offvalue 0 -onvalue 1
  ttk::entry $w.ano.aname -textvariable sAnnotator -width 20 -font $regular
  pack $w.ano.a1 $w.ano.an -side left
  pack $w.ano.aname $w.ano.a2 -side right

  addHorizontalRule $w
  
  ttk::label $w.eco.l1 -textvar ::tr(ECOCode:) -font $bold
  ttk::label $w.eco.l2 -text "-" -font $regular
  ttk::label $w.eco.l3 -text " " -font $regular
  ttk::label $w.eco.l4 -textvar ::tr(GamesWithNoECO:) -font $bold
  ttk::entry $w.eco.emin -textvariable sEcoMin -width 5 -font $regular
  ttk::entry $w.eco.emax -textvariable sEcoMax -width 5 -font $regular
  bindFocusColors $w.eco.emin
  bindFocusColors $w.eco.emax
  ttk::button $w.eco.range -text "..." -style  Pad0.Small.TButton -width 0 -command {
    set tempResult [chooseEcoRange]
    if {[scan $tempResult "%\[A-E0-9a-z\]-%\[A-E0-9a-z\]" sEcoMin_tmp sEcoMax_tmp] == 2} {
      set sEcoMin $sEcoMin_tmp
      set sEcoMax $sEcoMax_tmp
    }
    unset tempResult
  }
  ttk::radiobutton $w.eco.yes -variable sEco -value Yes -textvar ::tr(Yes) -style Small.TRadiobutton
  ttk::radiobutton $w.eco.no -variable sEco -value No -textvar ::tr(No) -style Small.TRadiobutton
  pack $w.eco -side top -fill x
  pack $w.eco.l1 $w.eco.emin $w.eco.l2 $w.eco.emax $w.eco.range $w.eco.l3 $w.eco.l4 $w.eco.yes $w.eco.no -side left
  
  set f [ttk::frame $w.gnum]
  pack $f -side top -fill x
  ttk::label $f.l1 -textvar ::tr(GlistGameNumber:) -font $bold
  ttk::entry $f.emin -textvariable sGnumMin -width 8 -justify right -font $regular
  ttk::label $f.l2 -text "-" -font $regular
  ttk::entry $f.emax -textvariable sGnumMax -width 8 -justify right -font $regular
  pack $f.l1 $f.emin $f.l2 $f.emax -side left
  bindFocusColors $f.emin
  bindFocusColors $f.emax
  ttk::label $f.l3 -text " " -font $regular
  ttk::button $f.all -text [::utils::string::Capital $::tr(all)] -style Pad0.Small.TButton -command {set sGnumMin 1; set sGnumMax -1}
  ttk::menubutton $f.first -style pad0.TMenubutton -textvar ::tr(First...) -menu $f.first.m
  ttk::menubutton $f.last -style pad0.TMenubutton -textvar ::tr(Last...) -menu $f.last.m
  menu $f.first.m -font $regular
  menu $f.last.m -font $regular
  foreach x {10 50 100 500 1000 5000 10000} {
    $f.first.m add command -label $x \
        -command "set sGnumMin 1; set sGnumMax $x"
    $f.last.m add command -label $x \
        -command "set sGnumMin -$x; set sGnumMax -1"
  }
  pack $f.l3 $f.all $f.first $f.last -side left -padx 2
  
  set f [ttk::frame $w.pgntext]
  pack $f -side top -fill x
  ttk::label $f.l1 -textvar ::tr(PgnContains:) -font $bold
  ttk::entry $f.e1 -textvariable sPgntext(1) -width 15 -font $regular
  ttk::label $f.l2 -text "+" -font $regular
  ttk::entry $f.e2 -textvariable sPgntext(2) -width 15 -font $regular
  ttk::label $f.l3 -text "+" -font $regular
  ttk::entry $f.e3 -textvariable sPgntext(3) -width 15 -font $regular
  bindFocusColors $f.e1
  bindFocusColors $f.e2
  bindFocusColors $f.e3
  pack $f.l1 $f.e1 $f.l2 $f.e2 $f.l3 $f.e3 -side left
  
  addHorizontalRule $w
  
  ttk::button $w.flagslabel -textvar ::tr(FindGamesWith:) -style Pad0.Small.TButton -image tb_menu -compound left -command {
    if {$sHeaderFlagFrame} {
      set sHeaderFlagFrame 0
      pack forget .sh.flags
    } else {
      set sHeaderFlagFrame 1
      pack .sh.flags -side top -after .sh.flagslabel
    }
  }
  pack $w.flagslabel -side top -fill x
  
  ttk::frame $w.flags
  if {$::sHeaderFlagFrame} {
    pack $w.flags -side top
  }
  
  set count 0
  set row 0
  set col 0
  foreach var $::sHeaderFlagList {   
    set lab [ttk::label $w.flags.l$var -text  [ ::tr $var ] -font font_Small]
    grid $lab -row $row -column $col -sticky e
    incr col
    grid [ttk::radiobutton $w.flags.yes$var -variable sHeaderFlags($var) -value yes -text $::tr(Yes)] -row $row -column $col
    incr col
    grid [ttk::radiobutton $w.flags.no$var -variable sHeaderFlags($var) -value no -text $::tr(No)] -row $row -column $col
    incr col
    grid [ttk::radiobutton $w.flags.both$var -variable sHeaderFlags($var) -value both -text $::tr(Both)] -row $row -column $col
    incr count
    incr col -3
    incr row
    if {$count == 6} { set col 5; set row 0 }
    if {$count == 12} { set col 10; set row 0 }
  }
  
  set count 1
  set col 0
  set row 7
  foreach var $::sHeaderCustomFlagList {
    
    set lb [sc_game flag $count description]
    if { $lb == ""  } {  set lb $var  }
    
    set lab [ttk::label $w.flags.l$var -text $lb -font font_Small]
    grid $lab -row $row -column $col -sticky e
    incr col
    grid [ttk::radiobutton $w.flags.yes$var -variable sHeaderFlags($var) -value yes -text $::tr(Yes)] -row $row -column $col
    incr col
    grid [ttk::radiobutton $w.flags.no$var -variable sHeaderFlags($var) -value no -text $::tr(No)] -row $row -column $col
    incr col
    grid [ttk::radiobutton $w.flags.both$var -variable sHeaderFlags($var) -value both -text $::tr(Both)] -row $row -column $col
    incr col 2
    incr count
    if {$count == 4} { set col 0; set row 8 }
  }
  
  grid [ttk::label $w.flags.space -text "" -font $regular] -row 0 -column 4
  grid [ttk::label $w.flags.space2 -text "" -font $regular] -row 0 -column 9
  
  addHorizontalRule $w
  ::search::addFilterOpFrame $w 1
  addHorizontalRule $w
  
  ### Header search: search/cancel buttons
  
  ttk::frame $w.b
  pack $w.b -side top -fill both
  ttk::button $w.b.defaults -textvar ::tr(Defaults) -command ::search::header::defaults ;# -padx 20
  ttk::button $w.b.save -textvar ::tr(Save...) -command ::search::header::save ;# -padx 20
  ttk::button $w.b.stop -textvar ::tr(Stop) -command sc_progressBar
  ttk::button $w.b.search -textvar ::tr(Search) -command {
    ::utils::history::AddEntry HeaderSearchWhite $sWhite
    ::utils::history::AddEntry HeaderSearchBlack $sBlack
    ::utils::history::AddEntry HeaderSearchEvent $sEvent
    ::utils::history::AddEntry HeaderSearchSite $sSite
    
    set sPgnlist {}
    foreach i {1 2 3} {
      set temp [string trim $sPgntext($i)]
      if {$temp != ""} { lappend sPgnlist $temp }
    }
    busyCursor .
    pack .sh.b.stop -side right -padx 5
    grab .sh.b.stop
    sc_progressBar .sh.fprogress.progress bar 301 21 time
    set wtitles {}
    set btitles {}
    foreach i $sTitleList {
      if $sTitles(w:$i) { lappend wtitles $i }
      if $sTitles(b:$i) { lappend btitles $i }
    }
    
    if {($sWhite == "!me") || ($sBlack == "!me")} {
      set i 0
      foreach name $::myPlayerNames {
        
        set filter 0
        
        if {$i == 0} {
          set filter 2
        } else {
          set filter 1
        }
        set i [expr {$i+1}]
        set wname $sWhite
        set bname $sBlack
        
        if {$sWhite == "!me"} {
          set wname $name
        }
        if {$sBlack == "!me"} {
          set bname $name
        }
        set str [sc_search header  \
            -white $wname           \
            -black $bname           \
            -toMove $sSideToMove \
            -results [list $sResWin $sResDraw $sResLoss $sResOther] \
            -event $sEvent -site $sSite -round $sRound \
            -date [list $sDateMin $sDateMax] \
            -welo [list $sWhiteEloMin $sWhiteEloMax] \
            -belo [list $sBlackEloMin $sBlackEloMax] \
            -delo [list $sEloDiffMin $sEloDiffMax] \
            -eco [list $sEcoMin $sEcoMax $sEco] \
            -length [list $sGlMin $sGlMax] \
            -gameNumber [list $sGnumMin $sGnumMax] \
            -flip $sIgnoreCol -filter $filter \
            -annotated $sAnnotated \
            -annotator $sAnnotator \
            -fStdStart $sHeaderFlags(StdStart) \
            -fPromotions $sHeaderFlags(Promotions) \
            -fComments $sHeaderFlags(Comments) \
            -fVariations $sHeaderFlags(Variations) \
            -fAnnotations $sHeaderFlags(Annotations) \
            -fDelete $sHeaderFlags(DeleteFlag) \
            -fWhiteOp $sHeaderFlags(WhiteOpFlag) \
            -fBlackOp $sHeaderFlags(BlackOpFlag) \
            -fMiddlegame $sHeaderFlags(MiddlegameFlag) \
            -fEndgame $sHeaderFlags(EndgameFlag) \
            -fNovelty $sHeaderFlags(NoveltyFlag) \
            -fPawnStruct $sHeaderFlags(PawnFlag) \
            -fTactics $sHeaderFlags(TacticsFlag) \
            -fKingside $sHeaderFlags(KsideFlag) \
            -fQueenside $sHeaderFlags(QsideFlag) \
            -fBrilliancy $sHeaderFlags(BrilliancyFlag) \
            -fBlunder $sHeaderFlags(BlunderFlag) \
            -fUser $sHeaderFlags(UserFlag) \
            -fCustom1 $sHeaderFlags(CustomFlag1) \
            -fCustom2 $sHeaderFlags(CustomFlag2) \
            -fCustom3 $sHeaderFlags(CustomFlag3) \
            -fCustom4 $sHeaderFlags(CustomFlag4) \
            -fCustom5 $sHeaderFlags(CustomFlag5) \
            -fCustom6 $sHeaderFlags(CustomFlag6) \
            -pgn $sPgnlist -wtitles $wtitles -btitles $btitles \
            ]
      }
    } elseif {($sWhite == "!mymove") || ($sBlack == "!mymove")} {
      set i 0
      foreach name $::myPlayerNames {
        
        set filter 0
        
        if {$i == 0} {
          set filter 2
        } else {
          set filter 1
        }
        
        set str [sc_search header  \
            -white $name            \
            -toMove w               \
            -results [list 0 0 0 1] \
            -event $sEvent -site $sSite -round $sRound \
            -date [list $sDateMin $sDateMax] \
            -welo [list $sWhiteEloMin $sWhiteEloMax] \
            -belo [list $sBlackEloMin $sBlackEloMax] \
            -delo [list $sEloDiffMin $sEloDiffMax] \
            -eco [list $sEcoMin $sEcoMax $sEco] \
            -length [list $sGlMin $sGlMax] \
            -gameNumber [list $sGnumMin $sGnumMax] \
            -flip $sIgnoreCol -filter $filter \
            -annotated $sAnnotated \
            -annotator $sAnnotator \
            -fStdStart $sHeaderFlags(StdStart) \
            -fPromotions $sHeaderFlags(Promotions) \
            -fComments $sHeaderFlags(Comments) \
            -fVariations $sHeaderFlags(Variations) \
            -fAnnotations $sHeaderFlags(Annotations) \
            -fDelete $sHeaderFlags(DeleteFlag) \
            -fWhiteOp $sHeaderFlags(WhiteOpFlag) \
            -fBlackOp $sHeaderFlags(BlackOpFlag) \
            -fMiddlegame $sHeaderFlags(MiddlegameFlag) \
            -fEndgame $sHeaderFlags(EndgameFlag) \
            -fNovelty $sHeaderFlags(NoveltyFlag) \
            -fPawnStruct $sHeaderFlags(PawnFlag) \
            -fTactics $sHeaderFlags(TacticsFlag) \
            -fKingside $sHeaderFlags(KsideFlag) \
            -fQueenside $sHeaderFlags(QsideFlag) \
            -fBrilliancy $sHeaderFlags(BrilliancyFlag) \
            -fBlunder $sHeaderFlags(BlunderFlag) \
            -fUser $sHeaderFlags(UserFlag) \
            -fCustom1 $sHeaderFlags(CustomFlag1) \
            -fCustom2 $sHeaderFlags(CustomFlag2) \
            -fCustom3 $sHeaderFlags(CustomFlag3) \
            -fCustom4 $sHeaderFlags(CustomFlag4) \
            -fCustom5 $sHeaderFlags(CustomFlag5) \
            -fCustom6 $sHeaderFlags(CustomFlag6) \
            -pgn $sPgnlist -wtitles $wtitles -btitles $btitles \
            ]
        
        set str [sc_search header  \
            -black $name            \
            -toMove b               \
            -results [list 0 0 0 1] \
            -event $sEvent -site $sSite -round $sRound \
            -date [list $sDateMin $sDateMax] \
            -welo [list $sWhiteEloMin $sWhiteEloMax] \
            -belo [list $sBlackEloMin $sBlackEloMax] \
            -delo [list $sEloDiffMin $sEloDiffMax] \
            -eco [list $sEcoMin $sEcoMax $sEco] \
            -length [list $sGlMin $sGlMax] \
            -gameNumber [list $sGnumMin $sGnumMax] \
            -flip $sIgnoreCol -filter $filter \
            -annotated $sAnnotated \
            -annotator $sAnnotator \
            -fStdStart $sHeaderFlags(StdStart) \
            -fPromotions $sHeaderFlags(Promotions) \
            -fComments $sHeaderFlags(Comments) \
            -fVariations $sHeaderFlags(Variations) \
            -fAnnotations $sHeaderFlags(Annotations) \
            -fDelete $sHeaderFlags(DeleteFlag) \
            -fWhiteOp $sHeaderFlags(WhiteOpFlag) \
            -fBlackOp $sHeaderFlags(BlackOpFlag) \
            -fMiddlegame $sHeaderFlags(MiddlegameFlag) \
            -fEndgame $sHeaderFlags(EndgameFlag) \
            -fNovelty $sHeaderFlags(NoveltyFlag) \
            -fPawnStruct $sHeaderFlags(PawnFlag) \
            -fTactics $sHeaderFlags(TacticsFlag) \
            -fKingside $sHeaderFlags(KsideFlag) \
            -fQueenside $sHeaderFlags(QsideFlag) \
            -fBrilliancy $sHeaderFlags(BrilliancyFlag) \
            -fBlunder $sHeaderFlags(BlunderFlag) \
            -fUser $sHeaderFlags(UserFlag) \
            -fCustom1 $sHeaderFlags(CustomFlag1) \
            -fCustom2 $sHeaderFlags(CustomFlag2) \
            -fCustom3 $sHeaderFlags(CustomFlag3) \
            -fCustom4 $sHeaderFlags(CustomFlag4) \
            -fCustom5 $sHeaderFlags(CustomFlag5) \
            -fCustom6 $sHeaderFlags(CustomFlag6) \
            -pgn $sPgnlist -wtitles $wtitles -btitles $btitles \
            ]
        
        set i [expr {$i+1}]
      }
    } else {
      set str [sc_search header -white $sWhite -black $sBlack \
          -event $sEvent -site $sSite -round $sRound \
          -date [list $sDateMin $sDateMax] \
          -results [list $sResWin $sResDraw $sResLoss $sResOther] \
          -welo [list $sWhiteEloMin $sWhiteEloMax] \
          -belo [list $sBlackEloMin $sBlackEloMax] \
          -delo [list $sEloDiffMin $sEloDiffMax] \
          -eco [list $sEcoMin $sEcoMax $sEco] \
          -length [list $sGlMin $sGlMax] \
          -toMove $sSideToMove \
          -gameNumber [list $sGnumMin $sGnumMax] \
          -flip $sIgnoreCol -filter $::search::filter::operation \
          -annotated $sAnnotated \
          -annotator $sAnnotator \
          -fStdStart $sHeaderFlags(StdStart) \
          -fPromotions $sHeaderFlags(Promotions) \
          -fComments $sHeaderFlags(Comments) \
          -fVariations $sHeaderFlags(Variations) \
          -fAnnotations $sHeaderFlags(Annotations) \
          -fDelete $sHeaderFlags(DeleteFlag) \
          -fWhiteOp $sHeaderFlags(WhiteOpFlag) \
          -fBlackOp $sHeaderFlags(BlackOpFlag) \
          -fMiddlegame $sHeaderFlags(MiddlegameFlag) \
          -fEndgame $sHeaderFlags(EndgameFlag) \
          -fNovelty $sHeaderFlags(NoveltyFlag) \
          -fPawnStruct $sHeaderFlags(PawnFlag) \
          -fTactics $sHeaderFlags(TacticsFlag) \
          -fKingside $sHeaderFlags(KsideFlag) \
          -fQueenside $sHeaderFlags(QsideFlag) \
          -fBrilliancy $sHeaderFlags(BrilliancyFlag) \
          -fBlunder $sHeaderFlags(BlunderFlag) \
          -fUser $sHeaderFlags(UserFlag) \
          -fCustom1 $sHeaderFlags(CustomFlag1) \
          -fCustom2 $sHeaderFlags(CustomFlag2) \
          -fCustom3 $sHeaderFlags(CustomFlag3) \
          -fCustom4 $sHeaderFlags(CustomFlag4) \
          -fCustom5 $sHeaderFlags(CustomFlag5) \
          -fCustom6 $sHeaderFlags(CustomFlag6) \
          -pgn $sPgnlist -wtitles $wtitles -btitles $btitles \
          ]
    }
    
    grab release .sh.b.stop
    pack forget .sh.b.stop
    unbusyCursor .
    
    .sh.status configure -text $str
    ::windows::gamelist::Refresh
    ::search::loadFirstGame
    
	 # refresh the tree window, this includes Best Games
	 ::tree::refresh
    ::windows::stats::Refresh
  }
  
  ttk::button $w.b.cancel -textvar ::tr(Close) -command {focus .; destroy .sh} ;# -padx 20
  
  foreach i {defaults save cancel search stop} {
    $w.b.$i configure -style Small.TButton
    
    pack $w.b.defaults $w.b.save -side left -padx 5
    pack $w.b.cancel $w.b.search -side right -padx 5
  }
  
  pack [ ttk::frame $w.fprogress ] -fill both
  canvas $w.fprogress.progress -height 20 -width 300 -bg white -relief solid -border 1
  $w.fprogress.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.fprogress.progress create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  pack $w.fprogress.progress -side top -pady 2
  ttk::label $w.status -text "" -width 1 -font font_Small -relief sunken -anchor w
  pack $w.status -side bottom -fill x
  # update
  wm resizable $w 0 0
  # standardShortcuts $w
  ::search::Config
  focus $w.cWhite.e
}

proc ::search::header::save {} {
  global sWhite sBlack sEvent sSite sRound sAnnotator sAnnotated sDateMin sDateMax sIgnoreCol
  global sWhiteEloMin sWhiteEloMax sBlackEloMin sBlackEloMax
  global sEloDiffMin sEloDiffMax sGlMin sGlMax
  global sEco sEcoMin sEcoMax sHeaderFlags sSideToMove
  global sResWin sResLoss sResDraw sResOther sPgntext
  
  set ftype { { "Scid SearchOptions files" {".sso"} } }
  set fName [tk_getSaveFile -initialdir [pwd] -filetypes $ftype -title "Create a SearchOptions file"]
  if {$fName == ""} { return }
  
  if {[string compare [file extension $fName] ".sso"] != 0} {
    append fName ".sso"
  }
  
  if {[catch {set searchF [open [file nativename $fName] w]} ]} {
    tk_messageBox -title "Error: Unable to open file" -type ok -icon error \
        -message "Unable to create SearchOptions file: $fName"
    return
  }
  puts $searchF "\# SearchOptions File created by Scid [sc_info version]"
  puts $searchF "set searchType Header"
  
  # First write the regular variables:
  foreach i {sWhite sBlack sEvent sSite sRound sAnnotator sAnnotated sDateMin sDateMax sResWin
    sResLoss sResDraw sResOther sWhiteEloMin sWhiteEloMax sBlackEloMin
    sBlackEloMax sEcoMin sEcoMax sEloDiffMin sEloDiffMax
    sIgnoreCol sSideToMove sGlMin sGlMax ::search::filter::operation} {
    puts $searchF "set $i [list [set $i]]"
  }
  # Now write the array values:
  foreach i [array names sHeaderFlags] {
    puts $searchF "set sHeaderFlags($i) [list $sHeaderFlags($i)]"
  }
  foreach i [array names sPgntext] {
    puts $searchF "set sPgntext($i) [list $sPgntext($i)]"
  }
  
  tk_messageBox -type ok -icon info -title "Search Options saved" \
      -message "Header search options saved to: $fName"
  close $searchF
}

##############################
### Selecting common ECO ranges

set scid_ecoRangeChosen ""
set ecoCommonRanges {}
proc chooseEcoRange {} {
  global ecoCommonRanges scid_ecoRangeChosen
  set ecoCommonRanges [ list \
      "A04-A09  [tr Reti]: [trans 1.Nf3]" \
      "A10-A39  [tr English]: 1.c4" \
      "A40-A49  1.d4, [tr d4Nf6Miscellaneous]" \
      "A45l-A45z  [tr Trompowsky]: [trans [list 1.d4 Nf6 2.Bg5]]" \
      "A51-A52  [tr Budapest]: [trans [list 1.d4 Nf6 2.c4 e5]]" \
      "A53-A55  [tr OldIndian]: [trans [list 1.d4 Nf6 2.c4 d6]]" \
      "A57-A59  [tr BenkoGambit]: [trans [list 1.d4 Nf6 2.c4 c5 3.d5 b5]]" \
      "A60-A79  [tr ModernBenoni]: [trans [list 1.d4 Nf6 2.c4 c5 3.d5 e6]]" \
      "A80-A99  [tr DutchDefence]: 1.d4 f5" \
      "____________________________________________________________" \
      "B00-C99  1.e4" \
      "B01-B01     [tr Scandinavian]: 1.e4 d5" \
      "B02-B05     [tr AlekhineDefence]: [trans [list 1.e4 Nf6]]" \
      "B07-B09     [tr Pirc]: 1.e4 d6" \
      "B10-B19     [tr CaroKann]: 1.e4 c6" \
      "B12i-B12z      [tr CaroKannAdvance]: 1.e4 c6 2.d4 d5 3.e5" \
      "B20-B99  [tr Sicilian]: 1.e4 c5" \
      "B22-B22     [tr SicilianAlapin]: 1.e4 c5 2.c3" \
      "B23-B26     [tr SicilianClosed]: [trans [list 1.e4 c5 2.Nc3]]" \
      "B30-B39     [tr Sicilian]: [trans [list 1.e4 c5 2.Nf3 Nc6]]" \
      "B40-B49     [tr Sicilian]: [trans [list 1.e4 c5 2.Nf3 e6]]" \
      "B50-B59     [tr SicilianRauzer]: [trans [list 1.e4 c5 2.Nf3 d6 ... 5.Nc3 Nc6]]" \
      "B70-B79     [tr SicilianDragon]: [trans [list 1.e4 c5 2.Nf3 d6 ... 5.Nc3 g6]]" \
      "B80-B89     [tr SicilianScheveningen]: [trans [list 1.e4 c5 2.Nf3 d6 ... 5.Nc3 e6]]" \
      "B90-B99     [tr SicilianNajdorf]: [trans [list 1.e4 c5 2.Nf3 d6 ... 5.Nc3 a6]]" \
      "____________________________________________________________" \
      "C00-C19  [tr FrenchDefence]: 1.e4 e6" \
      "C02-C02     [tr FrenchAdvance]: 1.e4 e6 2.d4 d5 3.e5" \
      "C03-C09     [tr FrenchTarrasch]: [trans [list 1.e4 e6 2.d4 d5 3.Nd2]]" \
      "C15-C19     [tr FrenchWinawer]: [trans [list 1.e4 e6 2.d4 d5 3.Nc3 Bb4]]" \
      "C20-C99  [tr OpenGame]: 1.e4 e5" \
      "C25-C29     [tr Vienna]: [trans [list 1.e4 e5 2.Nc3]]" \
      "C30-C39     [tr KingsGambit]: 1.e4 e5 2.f4" \
      "C42-C43     [tr RussianGame]: [trans [list 1.e4 e5 2.Nf3 Nf6]]" \
      "C44-C49     [tr OpenGame]: [trans [list 1.e4 e5 2.Nf3 Nc6]]" \
      "C50-C59     [tr ItalianTwoKnights]: 1.e4 e5 2.Nf3 Nc6 3.Bc4]]" \
      "C60-C99  [tr Spanish]: [trans [list 1.e4 e5 2.Nf3 Nc6 3.Bb5]]" \
      "C68-C69      [tr SpanishExchange]: [trans [list 3.Bb5 a6 4.Bxc6]]" \
      "C80-C83      [tr SpanishOpen]: [trans [list 3.Bb5 a6 4.Ba4 Nf6 5.O-O Nxe4]]" \
      "C84-C99      [tr SpanishClosed]: [trans [list 3.Bb5 a6 4.Ba4 Nf6 5.O-O Be7]]" \
      "____________________________________________________________" \
      "D00-D99  [tr Queen's Pawn]: 1.d4 d5" \
      "D10-D19  [tr Slav]: 1.d4 d5 2.c4 c6" \
      "D20-D29  [tr QGA]: 1.d4 d5 2.c4 dxc4" \
      "D30-D69  [tr QGD]: 1.d4 d5 2.c4 e6" \
      "D35-D36     [tr QGDExchange]: 1.d4 d5 2.c4 e6 3.cxd5 exd5" \
      "D43-D49     [tr SemiSlav]: [trans [list 3.Nc3 Nf6 4.Nf3 c6]]" \
      "D50-D69     [tr QGDwithBg5]: [trans [list 1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Bg5]]" \
      "D60-D69     [tr QGDOrthodox]: [trans [list 4.Bg5 Be7 5.e3 O-O 6.Nf3 Nbd7]]" \
      "D70-D99  [tr Grunfeld]: [trans [list 1.d4 Nf6 2.c4 g6 with 3...d5]]" \
      "D85-D89     [tr GrunfeldExchange]: [trans [list 3.Nc3 d5 4.e4 Nxc3 5.bxc3]]" \
      "D96-D99     [tr GrunfeldRussian]: [trans [list 3.Nc3 d5 4.Nf3 Bg7 5.Qb3]]" \
      "____________________________________________________________" \
      "E00-E09  [tr Catalan]: [trans [list 1.d4 Nf6 2.c4 e6 3.g3/...]]" \
      "E02-E05     [tr CatalanOpen]: [trans [list 3.g3 d5 4.Bg2 dxc4]]" \
      "E06-E09     [tr CatalanClosed]: [trans [list 3.g3 d5 4.Bg2 Be7]]" \
      "E12-E19  [tr QueensIndian]: [trans [list 1.d4 Nf6 2.c4 e6 3.Nf3 b6]]" \
      "E20-E59  [tr NimzoIndian]: [trans [list 1.d4 Nf6 2.c4 e6 3.Nc3 Bb4]]" \
      "E32-E39     [tr NimzoIndianClassical]: [trans [list 4.Qc2]]" \
      "E40-E59     [tr NimzoIndianRubinstein]: 4.e3" \
      "E60-E99  [tr KingsIndian]: [trans [list 1.d4 Nf6 2.c4 g6]]" \
      "E80-E89     [tr KingsIndianSamisch]: 4.e4 d6 5.f3" \
      "E90-E99     [tr KingsIndianMainLine]: [trans [list 4.e4 d6 5.Nf3]]" \
      ]
  
  if {[winfo exists .ecoRangeWin]} { return }
  set w .ecoRangeWin
  toplevel $w
  wm title $w "Scid: Choose ECO Range"
  wm minsize $w 30 5
  
  listbox $w.list -yscrollcommand "$w.ybar set" -height 20 -width 60 -background white -setgrid 1
  foreach i $ecoCommonRanges { $w.list insert end $i }
  ttk::scrollbar $w.ybar -command "$w.list yview" -takefocus 0
  pack [ttk::frame $w.b] -side bottom -fill x
  pack $w.ybar -side right -fill y
  pack $w.list -side left -fill both -expand yes
  
  ttk::button $w.b.ok -text "OK" -command {
    set sel [.ecoRangeWin.list curselection]
    if {[llength $sel] > 0} {
      set scid_ecoRangeChosen [lindex $ecoCommonRanges [lindex $sel 0]]
      set ::sEco No
    }
    focus .sh
    destroy .ecoRangeWin
  }
  ttk::button $w.b.cancel -text $::tr(Cancel) -command "focus .sh; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 2
  bind $w <Escape> "
  set scid_ecoRangeChosen {}
  grab release $w
  focus .
  destroy $w
  break"
  bind $w <Return> "$w.b.ok invoke; break"
  bind $w.list <Double-ButtonRelease-1> "$w.b.ok invoke; break"
  focus $w.list
  grab $w
  tkwait window $w
  return $scid_ecoRangeChosen
}


###
### End of file: search.tcl

###
### search/material.tcl: Material Search routine for Scid.
###

namespace eval ::search::material {}

set ignoreColors 0
set minMoveNum 1
set maxMoveNum 999
set minHalfMoves 1
set oppBishops "Either"
set minMatDiff -40
set maxMatDiff +40

trace variable minMoveNum w {::utils::validate::Integer 999 0}
trace variable maxMoveNum w {::utils::validate::Integer 999 0}
trace variable minHalfMoves w {::utils::validate::Integer 99 0}
trace variable minMatDiff w {::utils::validate::Integer -99 0}
trace variable maxMatDiff w {::utils::validate::Integer -99 0}

set nPatterns 10

array set pMin [list wq 0 bq 0 wr 0 br 0 wb 0 bb 0 wn 0 bn 0 wm 0 bm 0 wp 0 bp 0]
array set pMax [list wq 2 bq 2 wr 2 br 2 wb 2 bb 2 wn 2 bn 2 wm 4 bm 4 wp 8 bp 8]
for { set i 1 } { $i <= $nPatterns } { incr i } {
  set pattPiece($i) "?";  set pattFyle($i) "?";  set pattRank($i) "?"
}

proc checkPieceCounts {name el op} {
  global pMin pMax
  ::utils::validate::Integer 9 0 $name $el $op
  # Now make sure minor piece counts fit with bishop/knight counts:
  set wmMin [expr {$pMin(wn) + $pMin(wb)} ]
  set wmMax [expr {$pMax(wn) + $pMax(wb)} ]
  set bmMin [expr {$pMin(bn) + $pMin(bb)} ]
  set bmMax [expr {$pMax(bn) + $pMax(bb)} ]
  if {$pMin(wm) < $wmMin} { set pMin(wm) $wmMin }
  if {$pMax(wm) > $wmMax} { set pMax(wm) $wmMax }
  if {$pMin(bm) < $bmMin} { set pMin(bm) $bmMin }
  if {$pMax(bm) > $bmMax} { set pMax(bm) $bmMax }
  foreach p {wq wr wb wn wm wp bq br bb bn bm bp} {
    if {$pMax($p) != ""  &&  $pMax($p) < $pMin($p)} { set pMax($p) $pMin($p) }
  }
}

trace variable pMin w checkPieceCounts
trace variable pMax w checkPieceCounts


proc makeBoolMenu {w varName} {
  upvar #0 $varName var
  if {![info exists var]} { set var "Yes" }
  # ttk::menubutton $w -textvariable $varName -menu $w.menu -image "" -style pad0.TMenubutton ;# -relief raised -bd 2 -highlightthickness 2 -indicatoron 0 -anchor w
  menubutton $w -textvariable $varName -indicatoron 0 -menu $w.menu \
      -relief raised -bd 2 -highlightthickness 0 -anchor w -image ""
  
  menu $w.menu -tearoff 0
  $w.menu add radiobutton -label Yes -image tb_tick -variable $varName -value Yes \
      -command "$w configure -image tb_tick"  ;# -hidemargin 1
  $w.menu add radiobutton -label No -image tb_cross -variable $varName -value No \
      -command "$w configure -image tb_cross" ;# -hidemargin 1
  return $w.menu
}

proc makePieceMenu {w varName} {
  global dark
  upvar #0 $varName var
  if {![info exists var]} { set var "?" }
  # ttk::menubutton $w -textvariable $varName -menu $w.menu -image "" -style pad0.TMenubutton ;# -indicatoron 0 -relief raised -bd 2 -highlightthickness 2 -anchor w
  menubutton $w -textvariable $varName -indicatoron 0 -menu $w.menu \
      -relief raised -bd 2 -highlightthickness 0 -anchor w -image ""
  menu $w.menu -tearoff 0
  $w.menu add radiobutton -label " ? " -variable $varName -value "?" \
      -command "$w configure -image e20"  -hidemargin 1
  foreach i {wk wq wr wb wn wp bk bq br bb bn bp} {
    $w.menu add radiobutton -label $i -image ${i}20 -value $i \
        -variable $varName \
        -command "$w configure -image ${i}20"  -hidemargin 1
  }
  foreach i {" ? " wk bk} {
    $w.menu entryconfigure $i -columnbreak 1
  }
  return $w.menu
}

proc updatePatternImages {} {
  global pattPiece nPatterns pattBool
  if {! [winfo exists .sm]} { return }
  for {set i 1} {$i <= $nPatterns} {incr i} {
    if {$pattBool($i) == "Yes"} {
      .sm.mp.patt.grid.b$i configure -image tb_tick
    } else {
      .sm.mp.patt.grid.b$i configure -image tb_cross
    }
    if {$pattPiece($i) == "?"} {
      .sm.mp.patt.grid.p$i configure -image e20
    } else {
      .sm.mp.patt.grid.p$i configure -image "$pattPiece($i)20"
    }
  }
}

# ::search::material::zero
#
#   Called to clear all material minumum/maximum values to zero.
#
proc ::search::material::zero {} {
  global pMin pMax
  array set pMin {wq 0 bq 0 wr 0 br 0 wb 0 bb 0 wn 0 bn 0 wm 0 bm 0 wp 0 bp 0}
  array set pMax {wq 0 bq 0 wr 0 br 0 wb 0 bb 0 wn 0 bn 0 wm 0 bm 0 wp 0 bp 0}
}

proc ::search::material::any {} {
  global pMin pMax
  array set pMin {wq 0 bq 0 wr 0 br 0 wb 0 bb 0 wn 0 bn 0 wm 0 bm 0 wp 0 bp 0}
  array set pMax {wq 2 bq 2 wr 2 br 2 wb 2 bb 2 wn 2 bn 2 wm 4 bm 4 wp 8 bp 8}
  set ::minMatDiff -40
  set maxMatDiff +40
}

proc clearPatterns {} {
  global pattPiece pattFyle pattRank pattBool nPatterns
  
  for { set i 1 } { $i <= $nPatterns } { incr i } {
    set pattPiece($i) "?";  set pattFyle($i) "?";  set pattRank($i) "?"
    set pattBool($i) "Yes"
  }
  updatePatternImages
}

proc setPatterns {pattlist} {
  global pattPiece pattFyle pattRank pattBool nPatterns
  
  clearPatterns
  set count 1
  foreach patt $pattlist {
    if {$count <= $nPatterns  &&  [llength $patt] == 4} {
      set pattPiece($count) [lindex $patt 0]
      set pattFyle($count) [lindex $patt 1]
      set pattRank($count) [lindex $patt 2]
      set pattBool($count) [lindex $patt 3]
      incr count
    }
  }
  updatePatternImages
}

set smDisplayed(Material) 1
set smDisplayed(Patterns) 0


# ::search::material
#
#   Opens the window for searching by material or patterns.
#
proc ::search::material {} {
  global dark pMin pMax ignoreColors minMoveNum maxMoveNum
  global pattPiece pattFyle pattRank pattBool oppBishops nPatterns
  global minHalfMoves smDisplayed
  
  set w .sm
  if {[winfo exists $w]} {
    wm deiconify $w
    raiseWin $w
    return
  }
  set small font_Small
  
  toplevel $w
  wm title $w "Scid: $::tr(MaterialSearch)"
  #  button $w.piecelabel -font font_Bold -textvar ::tr(Material:) -command {
  #    if {$smDisplayed(Material)} {
  #      set smDisplayed(Material) 0
  #      pack forget .sm.q .sm.r .sm.b .sm.n .sm.m .sm.p .sm.b1 .sm.mdiff
  #    } else {
  #      set smDisplayed(Material) 1
  #      pack .sm.q .sm.r .sm.b .sm.n .sm.m .sm.p .sm.b1 .sm.mdiff \
  #        -after .sm.piecelabel
  #    }
  #  }
  
  bind $w <F1> { helpWindow Searches Material }
  bind $w <Escape> "$w.b3.cancel invoke"
  bind $w <Return> "$w.b3.search invoke"
  
  pack [ttk::frame $w.mp] -side top
  pack [ttk::frame $w.mp.material] -side left
  
  ttk::label $w.mp.material.title -font font_Bold -textvar ::tr(Material:)
  pack $w.mp.material.title -side top -pady 3
  
  foreach piece {q r b n m p} {
    ttk::frame $w.mp.material.$piece
    pack $w.mp.material.$piece -side top
  }
  
  foreach i {q r b n m p} {
    set f $w.mp.material.$i
    ttk::button $f.w0 -text "0" -command "set pMin(w$i) 0; set pMax(w$i) 0"
    ttk::button $f.w1 -text "1" -command "set pMin(w$i) 1; set pMax(w$i) 1"
    ttk::button $f.w2 -text "2" -command "set pMin(w$i) 2; set pMax(w$i) 2"
    ttk::button $f.wa -text "0+" -command "set pMin(w$i) 0; set pMax(w$i) 2"
    ttk::button $f.w1p -text "1+" -command "set pMin(w$i) 1; set pMax(w$i) 2"
    ttk::label $f.wi -image w${i}20 -font font_Small
    ttk::label $f.wto -text "-" -font font_Small -padding 0
    ttk::entry $f.wmin -width 2 -textvar pMin(w$i) -font font_Small -justify right ;#-relief sunken
    ttk::entry $f.wmax -width 2 -textvar pMax(w$i) -font font_Small -justify right ;#-relief sunken
    pack $f.w0 $f.w1 $f.w2 $f.wa $f.w1p $f.wi $f.wmin $f.wto $f.wmax -side left -pady 1
    
    pack [ttk::frame $f.space -width 20] -side left
    ttk::button $f.b0 -text "0" -command "set pMin(b$i) 0; set pMax(b$i) 0"
    ttk::button $f.b1 -text "1" -command "set pMin(b$i) 1; set pMax(b$i) 1"
    ttk::button $f.b2 -text "2" -command "set pMin(b$i) 2; set pMax(b$i) 2"
    ttk::button $f.ba -text "0+" -command "set pMin(b$i) 0; set pMax(b$i) 2"
    ttk::button $f.b1p -text "1+" -command "set pMin(b$i) 1; set pMax(b$i) 2"
    ttk::label $f.bi -image b${i}20 -font font_Small
    ttk::label $f.bto -text "-" -font font_Small
    ttk::entry $f.bmin -width 2 -textvar pMin(b$i) -font font_Small -justify right ;#-relief sunken
    ttk::entry $f.bmax -width 2 -textvar pMax(b$i) -font font_Small -justify right ;#-relief sunken
    pack $f.b0 $f.b1 $f.b2 $f.ba $f.b1p $f.bi $f.bmin $f.bto $f.bmax -side left -pady 1
    
    foreach b {0 1 2 a 1p} {
      $f.w$b configure -width 2 -takefocus 0 -style Pad0.Small.TButton ;# -font $small -pady 0 -padx 1
      $f.b$b configure -width 2 -takefocus 0 -style Pad0.Small.TButton ;# -font $small -pady 0 -padx 1
    }
    foreach widget {wmin wmax bmin bmax} {
      bindFocusColors $f.$widget
    }
    if {$i == "p"} {
      $f.w1p configure -command "set pMin(wp) 1; set pMax(wp) 8"
      $f.wa configure -command "set pMin(wp) 0; set pMax(wp) 8"
      $f.b1p configure -command "set pMin(bp) 1; set pMax(bp) 8"
      $f.ba configure -command "set pMin(bp) 0; set pMax(bp) 8"
    }
    if {$i == "m"} {
      $f.w1p configure -command "set pMin(wm) 1; set pMax(wm) 4"
      $f.wa configure -command "set pMin(wm) 0; set pMax(wm) 4"
      $f.b1p configure -command "set pMin(bm) 1; set pMax(bm) 4"
      $f.ba configure -command "set pMin(bm) 0; set pMax(bm) 4"
    }
  }
  
  # Buttons that manipulate material settings:
  set f $w.mp.material.b1
  pack [ttk::frame $f] -side top -ipady 2
  
  dialogbuttonsmall $f.zero [ list -textvar ::tr(Zero) -command ::search::material::zero] Pad0.Small.TButton
  dialogbuttonsmall $f.reset [ list -textvar ::tr(Any) -command ::search::material::any ] Pad0.Small.TButton
  dialogbuttonsmall $f.current [ list -textvar ::tr(CurrentBoard) -command {
    ::search::material::zero
    set bd [sc_pos board]
    for {set i 0} {$i < 64} {incr i} {
      set piece $::board::letterToPiece([ string index $bd $i ])
      if {$piece != "e"  &&  $piece != "wk"  &&  $piece != "bk"} {
        incr pMin($piece); set pMax($piece) $pMin($piece)
      }
    }
  } ] Pad0.Small.TButton
  
  ttk::menubutton $f.common -textvar ::tr(CommonEndings...) -menu $f.common.m -style pad0.TMenubutton ;# -font $small -relief raised
  menu $f.common.m -font $small
  set m $f.common.m
  $m add command -label [tr EndingPawns] -command {
    ::search::material::zero
    array set pMin {wp 1 bp 1}
    array set pMax {wp 8 bp 8}
  }
  $m add command -label [tr EndingRookVsPawns] -command {
    ::search::material::zero
    array set pMin {wr 1 bp 1}
    array set pMax {wr 1 bp 8}
  }
  $m add command -label [tr EndingRookPawnVsRook] -command {
    ::search::material::zero
    array set pMin {wr 1 br 1 wp 1}
    array set pMax {wr 1 br 1 wp 1}
  }
  $m add command -label [tr EndingRookPawnsVsRook] -command {
    ::search::material::zero
    array set pMin {wr 1 br 1 wp 1}
    array set pMax {wr 1 br 1 wp 8}
  }
  $m add command -label [tr EndingRooks] -command {
    ::search::material::zero
    array set pMin {wr 1 br 1}
    array set pMax {wr 1 br 1 wp 8 bp 8}
    set pMin(wr) 1; set pMax(wr) 1; set pMin(wp) 0; set mPax(wp) 8
    set pMin(br) 1; set pMax(br) 1; set pMin(bp) 0; set mPax(bp) 8
  }
  $m add command -label [tr EndingRooksPassedA] -command {
    ::search::material::zero
    array set pMin {wr 1 br 1 wp 1}
    array set pMax {wr 1 br 1 wp 8 bp 8}
    setPatterns {{wp a ? Yes} {bp a ? No} {bp b ? No}}
    set ignoreColors 1
  }
  $m add command -label [tr EndingRooksDouble] -command {
    ::search::material::zero
    array set pMin {wr 2 br 2}
    array set pMax {wr 2 br 2 wp 8 bp 8}
  }
  $m add command -label [tr EndingBishops] -command {
    ::search::material::zero
    array set pMin {wb 1 bb 1 wm 1 bm 1}
    array set pMax {wb 1 bb 1 wm 1 bm 1 wp 8 bp 8}
  }
  $m add command -label [tr EndingBishopVsKnight] -command {
    ::search::material::zero
    array set pMin {wb 1 bn 1 wm 1 bm 1}
    array set pMax {wb 1 bn 1 wm 1 bm 1 wp 8 bp 8}
  }
  $m add command -label [tr EndingKnights] -command {
    ::search::material::zero
    array set pMin {wn 1 bn 1 wm 1 bm 1}
    array set pMax {wn 1 bn 1 wm 1 bm 1 wp 8 bp 8}
  }
  $m add command -label [tr EndingQueens] -command {
    ::search::material::zero
    array set pMin {wq 1 bq 1}
    array set pMax {wq 1 bq 1 wp 8 bp 8}
  }
  $m add command -label [tr EndingQueenPawnVsQueen] -command {
    ::search::material::zero
    array set pMin {wq 1 bq 1 wp 1}
    array set pMax {wq 1 bq 1 wp 1}
  }
  $m add command -label [tr BishopPairVsKnightPair] -command {
    ::search::material::zero
    array set pMin {wb 2 bn 2 wm 2 bm 2}
    array set pMax {wq 1 bq 1 wr 2 br 2 wb 2 bn 2 wm 2 bm 2 wp 8 bp 8}
  }
  
  pack $f.zero $f.reset $f.current $f.common -side left -pady 5 -padx 10
  #if {! $smDisplayed(Material)} {
  #  pack forget .sm.q .sm.r .sm.b .sm.n .sm.m .sm.p .sm.b1 .sm.mdiff
  #}
  
  set f $w.mp.material.mdiff
  pack [ttk::frame $f] -side top
  ttk::label $f.label -font font_SmallBold -textvar ::tr(MaterialDiff:)
  ttk::entry $f.min -width 3 -textvar minMatDiff -font $small -justify right ;#-relief sunken
  bindFocusColors $f.min
  ttk::label $f.sep -text "-" -font $small
  ttk::entry $f.max -width 3 -textvar maxMatDiff -font $small -justify right ;#-relief sunken
  bindFocusColors $f.max
  ttk::label $f.sep2 -text " " -font $small
  ttk::button $f.any -textvar ::tr(Any) -style Pad0.Small.TButton -command {set minMatDiff -40; set maxMatDiff +40} -width 0
  ttk::button $f.w1 -text " + " -style Pad0.Small.TButton -command {set minMatDiff +1; set maxMatDiff +40}  -width 0
  ttk::button $f.equal -text " = " -style Pad0.Small.TButton -command {set minMatDiff 0; set maxMatDiff 0}  -width 0
  ttk::button $f.b1 -text " - " -style Pad0.Small.TButton -command {set minMatDiff -40; set maxMatDiff -1}  -width 0
  pack $f.label $f.min $f.sep $f.max -side left
  pack $f.sep2 $f.any $f.w1 $f.equal $f.b1 -side left -padx 1 -pady 1
  set f [ttk::frame $w.mp.material.mdiff2]
  pack $f -side top
  ttk::label $f.explan -font $small -text "($::tr(MaterialDiff) = $::tr(White) - $::tr(Black); Q=9 R=5 B=3 N=3 P=1)"
  pack $f.explan -side top
  
  addVerticalRule $w.mp
  
  set f [ttk::frame $w.mp.patt]
  pack $f -side top
  
  #dialogbutton $w.pattl -font font_Bold -textvar ::tr(Patterns:) -command {
  #  if {$smDisplayed(Patterns)} {
  #    set smDisplayed(Patterns) 0
  #    pack forget .sm.patt .sm.b2
  #  } else {
  #    set smDisplayed(Patterns) 1
  #    pack .sm.patt .sm.b2 -after .sm.pattl
  #  }
  #}
  ttk::label $w.mp.patt.title -textvar ::tr(Patterns:) -font font_Bold
  pack $w.mp.patt.title -side top -pady 3
  
  pack [ttk::frame $f.grid] -side top -fill both -expand 1
  for { set i 1 } { $i <= $nPatterns } { incr i } {
    makeBoolMenu $f.grid.b$i pattBool($i)
    set menuPiece1 [ makePieceMenu $f.grid.p$i pattPiece($i) ]
    tk_optionMenu $f.grid.f$i pattFyle($i) "?" a b c d e f g h
    tk_optionMenu $f.grid.r$i pattRank($i) "?" 1 2 3 4 5 6 7 8
    # $f.grid.b$i configure -style pad0.TMenubutton
    $f.grid.b$i configure -indicatoron 0 ;# -width 4
    
    $f.grid.f$i configure -width 1 -indicatoron 0 -pady 0
    $f.grid.r$i configure -width 1 -indicatoron 0 -pady 0
    set column [expr {5 * (($i - 1) / 5)} ]
    set row [expr {($i - 1) % 5} ]
    grid $f.grid.b$i -row $row -column $column -padx 0 -pady 0 ; incr column
    grid $f.grid.p$i -row $row -column $column -padx 0 -pady 0 ; incr column
    grid $f.grid.f$i -row $row -column $column -padx 0 -pady 0 ; incr column
    grid $f.grid.r$i -row $row -column $column -padx 0 -pady 0; incr column
    if {$column == 4  ||  $column == 9} {
      ttk::label $f.grid.sp_$i -text "  "
      grid $f.grid.sp_$i -row $row -column $column
    }
  }
  
  updatePatternImages
  
  ### Buttons that manipulate patterns:
  set f .sm.mp.patt.b2
  ttk::frame $f
  dialogbutton $f.clearPat -textvar ::tr(Clear) -command clearPatterns
  ttk::menubutton $f.common -textvar ::tr(CommonPatterns...) -menu $f.common.m
  menu $f.common.m -font $small
  $f.common.m add command -label [tr PatternWhiteIQP] -command {
    if {$pMin(wp) < 1} { set pMin(wp) 1 }
    setPatterns {{wp d ? Yes} {wp c ? No} {wp e ? No}}
  }
  $f.common.m add command -label [tr PatternWhiteIQPBreakE6] -command {
    if {$pMin(wp) < 1} { set pMin(wp) 1 }
    if {$pMin(bp) < 1} { set pMin(bp) 1 }
    setPatterns {{wp d 5 Yes} {wp c ? No} {wp e ? No} {wp d 4 No} \
          {bp e 6 Yes} {bp c ? No} {bp d ? No}}
  }
  $f.common.m add command -label [tr PatternWhiteIQPBreakC6] -command {
    if {$pMin(wp) < 1} { set pMin(wp) 1 }
    if {$pMin(bp) < 1} { set pMin(bp) 1 }
    setPatterns {{wp d 5 Yes} {wp c ? No} {wp e ? No} {wp d 4 No} \
          {bp c 6 Yes} {bp e ? No} {bp d ? No}}
  }
  $f.common.m add command -label [tr PatternBlackIQP] -command {
    if {$pMin(bp) < 1} { set pMin(bp) 1 }
    setPatterns {{bp d ? Yes} {bp c ? No} {bp e ? No}}
  }
  $f.common.m add command -label [tr PatternWhiteBlackIQP] -command {
    if {$pMin(wp) < 1} { set pMin(wp) 1 }
    if {$pMin(bp) < 1} { set pMin(bp) 1 }
    setPatterns {{wp d ? Yes} {wp c ? No} {wp e ? No} \
          {bp d ? Yes} {bp c ? No} {bp e ? No}}
  }
  $f.common.m add command -label [tr PatternCoupleC3D4] -command {
    set pMin(wp) 4; set pMax(wp) 6
    set pMin(bp) 4; set pMax(bp) 6
    setPatterns {{wp c 3 Yes} {wp d 4 Yes} {wp b ? No} {wp e ? No}
      {bp c ? No} {bp d ? No}}
  }
  $f.common.m add command -label [tr PatternHangingC5D5] -command {
    set pMin(bp) 4; set pMax(bp) 6
    set pMin(wp) 4; set pMax(wp) 6
    setPatterns {{bp c 5 Yes} {bp d 5 Yes} {bp b ? No} {bp e ? No}
      {wp c ? No} {wp d ? No}}
  }
  $f.common.m add command -label [tr PatternMaroczy] -command {
    if {$pMin(bp) < 1} { set pMin(bp) 1 }
    if {$pMax(bp) > 7} { set pMax(bp) 7 }
    if {$pMin(wp) < 2} { set pMin(wp) 2 }
    if {$pMax(wp) > 7} { set pMax(wp) 7 }
    setPatterns {{wp c 4 Yes} {wp e 4 Yes} {bp d ? Yes} {wp d ? No}
      {bp c ? No} {bp d 5 No}}
  }
  $f.common.m add command -label [tr PatternRookSacC3] -command {
    set pMin(br) 2; set pMax(br) 2
    set pMin(wr) 2; set pMax(wr) 2
    setPatterns { {br c 3 Yes} {wp b 2 Yes} }
  }
  $f.common.m add command -label [tr PatternKc1Kg8] -command {
    setPatterns { {wk c 1 Yes} {bk g 8 Yes} }
  }
  $f.common.m add command -label [tr PatternKg1Kc8] -command {
    setPatterns { {wk g 1 Yes} {bk c 8 Yes} }
  }
  $f.common.m add command -label [tr PatternLightFian] -command {
    set pMin(wb) 1; set pMin(bb) 1
    setPatterns { {wb g 2 Yes} {bb b 7 Yes} }
  }
  $f.common.m add command -label [tr PatternDarkFian] -command {
    set pMin(wb) 1; set pMin(bb) 1
    setPatterns { {wb b 2 Yes} {bb g 7 Yes} }
  }
  $f.common.m add command -label [tr PatternFourFian] -command {
    set pMin(wb) 2; set pMin(bb) 2
    setPatterns { {wb b 2 Yes} {wb g 2 Yes} {bb b 7 Yes} {bb g 7 Yes} }
  }
  
  pack $f -side top
  pack $f.clearPat $f.common -side left -pady 5 -padx 10
  #if {! $smDisplayed(Patterns)} {
  #  pack forget $w.patt $w.b2
  #}
  updatePatternImages
  
  addHorizontalRule $w
  
  ### Now the move counter:
  pack [ ttk::frame $w.fmc ] -side top -expand 1 -fill both
  
  set f $w.fmc.bishops
  pack [ttk::frame $f] -side top ;#-expand 1 -fill both
  ttk::label $f.t1 -text "1" -font font_Small
  ttk::label $f.t2 -image wb20
  ttk::label $f.t3 -text "- 1" -font font_Small -font font_Small
  ttk::label $f.t4 -image bb20
  ttk::label $f.t5 -textvar ::tr(squares:) -font font_Small
  ttk::radiobutton $f.same -textvar ::tr(SameColor) -variable oppBishops -value "Same" -style Small.TRadiobutton ;# -padx 5 -pady 4
  ttk::radiobutton $f.opp -textvar ::tr(OppColor) -variable oppBishops -value "Opposite" -style Small.TRadiobutton ;# -padx 5 -pady 4
  ttk::radiobutton $f.either -textvar ::tr(Either) -variable oppBishops -value "Either" -style Small.TRadiobutton ;# -padx 5 -pady 4
  foreach i {t1 t2 t3 t4 t5 same opp either} { pack $f.$i -side left }
  
  set f $w.fmc.move
  pack [ttk::frame $f] -side top -ipady 5 ;# -expand 1 -fill both
  ttk::label $f.fromlab -textvar ::tr(MoveNumberRange:) -font font_Small
  ttk::entry $f.from -width 4 -textvar minMoveNum -justify right -font font_Small
  ttk::label $f.tolab -text "-" -font font_Small
  ttk::entry $f.to -width 4 -textvar maxMoveNum -justify right -font font_Small
  ttk::label $f.space -text "  "
  ttk::label $f.label1 -textvar ::tr(MatchForAtLeast) -font font_Small
  ttk::entry $f.hmoves -width 3 -textvar minHalfMoves -justify right -font font_Small
  ttk::label $f.label2 -textvar ::tr(HalfMoves) -font font_Small
  bindFocusColors $f.from
  bindFocusColors $f.to
  bindFocusColors $f.hmoves
  pack $f.fromlab $f.from $f.tolab $f.to $f.space $f.label1 $f.hmoves $f.label2 -side left
  
  addHorizontalRule $w
  ::search::addFilterOpFrame $w 1
  addHorizontalRule $w
  
  ### Progress bar:
  ttk::frame $w.fprogress
  canvas $w.fprogress.progress -height 20 -width 300 -bg white -relief solid -border 1
  $w.fprogress.progress create rectangle 0 0 0 0 -outline blue -fill blue -tags bar
  $w.fprogress.progress create text 295 10 -anchor e -font font_Regular -tags time -fill black -text "0:00 / 0:00"
  
  ### Last of all, the buttons frame:
  
  set f $w.b3
  pack [ttk::frame $f] -side top -ipady 5 -fill x
  ttk::checkbutton $f.ignorecol -textvar ::tr(IgnoreColors) -variable ignoreColors ;# -padx 4
  
  dialogbutton $f.save -textvar ::tr(Save...) -command ::search::material::save
  
  dialogbutton $f.stop -textvar ::tr(Stop) -command sc_progressBar
  $f.stop configure -state disabled
  
  dialogbutton $f.search -textvar ::tr(Search) -command {
    busyCursor .
    .sm.b3.stop configure -state normal
    grab .sm.b3.stop
    sc_progressBar .sm.fprogress.progress bar 301 21 time
    set str [sc_search material \
        -wq [list $pMin(wq) $pMax(wq)] -bq [list $pMin(bq) $pMax(bq)] \
        -wr [list $pMin(wr) $pMax(wr)] -br [list $pMin(br) $pMax(br)] \
        -wb [list $pMin(wb) $pMax(wb)] -bb [list $pMin(bb) $pMax(bb)] \
        -wn [list $pMin(wn) $pMax(wn)] -bn [list $pMin(bn) $pMax(bn)] \
        -wm [list $pMin(wm) $pMax(wm)] -bm [list $pMin(bm) $pMax(bm)] \
        -wp [list $pMin(wp) $pMax(wp)] -bp [list $pMin(bp) $pMax(bp)] \
        -flip $ignoreColors -filter $::search::filter::operation \
        -range [list $minMoveNum $maxMoveNum] \
        -length $minHalfMoves -bishops $oppBishops \
        -diff [list $minMatDiff $maxMatDiff] \
        -patt "$pattBool(1) $pattPiece(1) $pattFyle(1) $pattRank(1)" \
        -patt "$pattBool(2) $pattPiece(2) $pattFyle(2) $pattRank(2)" \
        -patt "$pattBool(3) $pattPiece(3) $pattFyle(3) $pattRank(3)" \
        -patt "$pattBool(4) $pattPiece(4) $pattFyle(4) $pattRank(4)" \
        -patt "$pattBool(5) $pattPiece(5) $pattFyle(5) $pattRank(5)" \
        -patt "$pattBool(6) $pattPiece(6) $pattFyle(6) $pattRank(6)" \
        -patt "$pattBool(7) $pattPiece(7) $pattFyle(7) $pattRank(7)" \
        -patt "$pattBool(8) $pattPiece(8) $pattFyle(8) $pattRank(8)" \
        -patt "$pattBool(9) $pattPiece(9) $pattFyle(9) $pattRank(9)" \
        -patt "$pattBool(10) $pattPiece(10) $pattFyle(10) $pattRank(10)" ]
    grab release .sm.b3.stop
    .sm.b3.stop configure -state disabled
    unbusyCursor .
    #tk_messageBox -type ok -title $::tr(SearchResults) -message $str
    .sm.status configure -text $str
	 ::tree::refresh
    ::windows::gamelist::Refresh
    
    ::search::loadFirstGame
    
    ::windows::stats::Refresh
  }
  
  dialogbutton $f.cancel -textvar ::tr(Close) \
      -command { focus .; destroy .sm }
  
  pack $f.ignorecol $w.b3.save -side left -pady 5 -padx 5
  pack $w.b3.cancel $w.b3.search $w.b3.stop -side right -pady 5 -padx 5
  pack $w.fprogress.progress -side top -pady 2
  pack $w.fprogress -expand 1 -fill both
  
  label $w.status -text "" -width 1 -font font_Small -relief sunken -anchor w
  pack $w.status -side bottom -fill x
  
  # update
  wm resizable $w 0 0
  # standardShortcuts $w
  ::search::Config
  focus $f.search
}

proc ::search::material::save {} {
  global pMin pMax ignoreColors minMoveNum maxMoveNum minHalfMoves
  global pattPiece pattFyle pattRank pattBool oppBishops nPatterns
  
  set ftype { { "Scid SearchOptions files" {".sso"} } }
  set fName [tk_getSaveFile -initialdir [pwd] -filetypes $ftype -title "Create a SearchOptions file"]
  if {$fName == ""} { return }
  
  if {[string compare [file extension $fName] ".sso"] != 0} {
    append fName ".sso"
  }
  
  if {[catch {set searchF [open $fName w]}]} {
    tk_messageBox -title "Error: Unable to open file" -type ok -icon error \
        -message "Unable to create SearchOptions file: $fName"
    return
  }
  puts $searchF "\# SearchOptions File created by Scid [sc_info version]"
  puts $searchF "set searchType Material"
  # First write the material counts:
  foreach i {wq bq wr br wb bb wn bn wp bp} {
    puts $searchF "set pMin($i) $pMin($i)"
    puts $searchF "set pMax($i) $pMax($i)"
  }
  # Now write other numeric values:
  foreach i {
    ignoreColors minMoveNum maxMoveNum minHalfMoves oppBishops
    ::search::filter::operation
  } {
    puts $searchF "set $i [set $i]"
  }
  # Last, write the patterns:
  for {set i 1} {$i <= $nPatterns} {incr i} {
    puts $searchF "set pattPiece($i) $pattPiece($i)"
    puts $searchF "set pattFyle($i) $pattFyle($i)"
    puts $searchF "set pattRank($i) $pattRank($i)"
    puts $searchF "set pattBool($i) $pattBool($i)"
  }
  tk_messageBox -type ok -icon info -title "Search Options saved" \
      -message "Material/pattern search options saved to: $fName"
  close $searchF
}

# ezsmtp.tcl --
#
#	"Easy" SMTP-base mail sending library.  See the ezsmtp.html
#	file for documentation on using this package.
#
# Copyright (c) 1999-2000 by D. J. Hagberg and other parties
#
# See the file "license.txt" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.

package provide ezsmtp 1.0.0

namespace eval ::ezsmtp {
    global env tcl_platform
    variable mail

    # Make CVS version ID accessible.
    set mail(cvsid) \
            {$Id: ezsmtp.tcl,v 4.3 2011/02/13 18:12:01 arwagner Exp $}

    # Global variables that may be altered through ezsmtp::config.
    set mail(vars) [list verbose mailhost port from batchsize \
                         logproc strictaddr]
    set mail(verbose) 0                 ;# No logging output
    set mail(mailhost) localhost        ;# Host with smtp daemon
    set mail(port) 25                   ;# port for smtp daemon
    set mail(batchsize) 0               ;# no batching of RCPT TO's.
    set mail(logproc) {}		;# empty means log to stdout.
    set mail(strictaddr) 0		;# should we enforce RFC821 addresses?

    # Try to figure out a reasonable default FROM.
    # Tcl8.1 already has figured out the username for us.
    # Older versions are not so nice-- need to look in the environment
    if {[info exists tcl_platform(user)]} {set mail(from) $tcl_platform(user)}\
    elseif {[info exists env(LOGNAME)]}   {set mail(from) $env(LOGNAME)} \
    elseif {[info exists env(USERNAME)]}  {set mail(from) $env(USERNAME)} \
    elseif {[info exists env(USER)]}      {set mail(from) $env(USER)} \
    else   {set mail(from) {}}
    
    # Trim any leading/trailing spaces and add @ current host name
    set mail(from) [string trim $mail(from)]
    if {[string length $mail(from)] > 0} {
        append mail(from) @ [info hostname]
    }

    # Regular-expression for validating email addresses.
    set mail(hostre) {[A-Za-z]([A-Za-z0-9-]*[A-Za-z0-9])*|\#[0-9]+|}
    append mail(hostre) {\[[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\]}
    set mail(hostre) "($mail(hostre))(\\.($mail(hostre)))*"
    set mail(strictre) "^\[^\x01-\x20\x7F-\xFF<>@\]+@"
    append mail(strictre) $mail(hostre) {$}
    set mail(!strictre) {^[^@]+|[^@]+@[^@]+$}

    # Default character set/encoding settings
    set mail(tclcharset) ascii
    set mail(mimecharset) us-ascii

    # Package-wide header settings to be sent in the DATA section of the email.
    # Note each header variable is a list -- one element per line.
    set mail(x-mailer) "Tcl ezsmtp Mailer Package"
    if {[llength $mail(cvsid)] > 2} {
        append mail(x-mailer) " (build " [lindex $mail(cvsid) 3] ")"
    }
    set mail(x-mailer:)     [list $mail(x-mailer)]
    set mail(mime-version:) [list "1.0"]
}


#############################################################################
##
## PUBLICALLY-DOCUMENTED PROCS
##
#############################################################################


# ezsmtp::config --
#
#	See documentation for details.
#
# Arguments:
#	args		Options parsed by the procedure.
# Results:
#	See documentation
#
proc ::ezsmtp::config {args} {
    variable mail

    if {[llength $args] == 0} {
        set resl {}
        foreach v $mail(vars) {lappend resl "-$v" [set mail($v)]}
        return $resl
    }

    # Build up a list of valid switches.
    set swl {}
    foreach sw $mail(vars) {lappend swl "-$sw"}

    # If we got a single arg, return its associated variable value
    if {[llength $args] == 1} {
        set v [lindex $args 0]
        if {[lsearch $swl $v] == -1} {
            error "invalid config option, must be one of: $swl"
	}
        return $mail([string trimleft $v -])
    }

    # If we got multiple args, make sure we got an even number.
    set argc [llength $args]
    if {$argc % 2} {
        error "must have an even number of config -option value's."
    }

    # Try each -option/value
    foreach {sw v} $args {
        if {[lsearch $swl $sw] == -1} {
            error "invalid config option, must be one of $swl"
	}

        # Verify numeric & other config values.
        switch -regexp -- $sw {
            {^-(verbose|batchsize)} { 
                set v [expr {int($v)}]
                if {$v < 0} {
                    error "config value for $sw must be a number >= 0"
		}
	    }
            {^-strictaddr$} {
                set v [expr {$v ? 1 : 0}]
	    }
            {^-from$} {
                set v [private_valid_address $v -from]
	    }
            default { }
        }
        set mail([string trimleft $sw -]) $v
    }

    return 1
}


# ezsmtp::send --
#
#	See documentation for details.
#
# Arguments:
#	args		Options parsed by the procedure.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::send {args} {
    global errorInfo errorCode
    variable mail

    # Set defaults for the current send based on global variables
    foreach v [list mailhost port from batchsize tclcharset mimecharset] {
        set cur($v) [set mail($v)]
    }

    # Start with an empty recipient list and return-receipt disabled
    set cur(rcpt) {}
    set cur(receipt) 0

    # process arguments to smtp::send.
    set validopts [list -subject -from -mailhost -port -channel -body \
            -batchsize]
    set argc [llength $args]
    for {set i 0} {$i < $argc} {incr i} {
        set arg [lindex $args $i]
        switch -regexp -- $arg {
            {^-headers$} {
                incr i; set arg [lindex $args $i]
                if {[llength $arg] % 2} {
                    error "Invalid -headers.  Must be a well-formatted list\
                            of even length with alternating keys/values."
                }
                foreach {k v} $arg { private_add_header cur $k $v }
            }
            {^-(to|cc|bcc|tolist|cclist|bcclist|replyto|replytolist)$} {
                incr i
                set recip [lindex $args $i]
                private_add_recip cur [string trimleft $arg -] $recip
            }
            {^-receipt$} {
                incr i
                private_return_receipt cur [lindex $args $i]
            }
            {^-charset$} {
                incr i
                private_set_charset cur [lindex $args $i]
            }
	    {^-} {
                if {[lsearch $validopts $arg] == -1} {
                    error "Unknown option: $arg.  Must be one of: -headers\
                            -to -cc -bcc -tolist -cclist -bcclist -replyto\
                            -replytolist $validopts"
		}
                incr i
                set cur([string trimleft $arg -]) [lindex $args $i]
            }
            default {
                break
            }
        }
    }

    # Throw an error on any remaining arguments.  Older versions (< 1.0)
    # allowed addresses to be specified after the last arg...
    if {$i < [llength $args]} {
        error "Unknown argument(s): [lrange $args $i [expr\
                {[llength $args]-1}]].  Please read the docs about\
                ezsmtp::send -to/-cc/-bcc/-tolist/-cclist/-bcclist."
    }

    # Make sure we have at least one recipient.
    if {[llength $cur(rcpt)] < 1} {
        error "Missing RECIPIENTs.  Must be: ...send ?options?\
                ?RECIPIENT? ?RECIPIENT...?"
    }

    # Make sure we have a from address and header configured
    set cur(from) [string trim $cur(from)]
    if {![string length $cur(from)]} {
        error "no from address has been specified (length=0)"
    }
    if {![info exists cur(from:)]} {private_add_header cur from $cur(from)}
    set cur(from) [private_valid_address $cur(from) -from]

    # Make sure we have either -channel or -body specified.
    if {[info exists cur(channel)] && [info exists cur(body)]} {
        error "Cannot specify both -channel and -body options."
    } elseif {!([info exists cur(channel)] || [info exists cur(body)])} {
        error "Must specify either -channel or -body option."
    }

    # Open a socket to the SMTP server and send the message, catching any
    # errors to ensure the socket gets closed.  Rethrow error after close.
    set s [socket $cur(mailhost) $cur(port)]
    if {[catch [list private_smtp_begin $s cur] msg]} {
        set tmp_EI $::errorInfo; set tmp_EC $::errorCode
        private_log 9 "errorCode=$tmp_EC errorInfo=$tmp_EI"
        catch [list close $s]
        error $msg $tmp_EI $tmp_EC
    }
    catch [list close $s]
    return $msg
}



#############################################################################
##
## PRIVATE PROCS - SUBJECT TO RADICAL CHANGE ON THE SLIGHTEST WHIM.
##
#############################################################################


# ezsmtp::private_add_header --
#
#	Validate and add a single header to the list of email headers to be 
#	sent before the message.
#
# Arguments:
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
#	key		An RFC822-compliant header name without the trailing
#			colon.  Example: Reply-To
#	value		Value to be sent for the above header name.  Multi-line
#			headers may be specified using newline (\n) separators.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_add_header {var key value} {
    upvar 1 $var cur
    variable mail

    # Force the header name to lower case and ensure RFC compliance.
    set key [string tolower $key]
    if {[regexp "\[\x01-\x20\x7F-\xFF:\]" $key]} {
        error "Invalid header name ($key).  RFC 822 stipulates ASCII\
                Characters excluding CTRL characters, space, and `:'"
    }

    # split value into lines, trimming leading and trailing space.
    set vall {}
    foreach ln [split $value \n] {
        set ln [string trim $ln]
        if {[string length $ln] > 65} {
            private_log 2 "Header $key contains line longer than 65\
                    chars:\n$ln"
        }
        lappend vall $ln
    }
    
    # set in the current send session's array by appending colon to key.
    private_log 6 "Header $key=[join $vall "\n\t"]"
    set cur([set key]:) $vall
}


# ezsmtp::private_set_charset --
#
#	Validate and set the Tcl socket encoding and default MIME charset 
#	for this send.
#
# Arguments:
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
#	value		A Tcl list with either 1 or 2 elements, per the
#			docs for ezsmtp::send -charset
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_set_charset {var value} {
    upvar 1 $var cur
    global tcl_version

    if {$tcl_version < 8.1} {
        error "Cannot specify -charset running in Tcl versions < 8.1"
    }

    if {[llength $value] == 1} {
        set cstcl [string tolower [lindex $value 0]]
        if {[string compare $cstcl ascii] == 0} {
            set csmime us-ascii
	} else {
            set csmime $cstcl
	}
    } elseif {[llength $value] == 2} {
        set cstcl [string tolower [lindex $value 0]]
        set csmime [string tolower [lindex $value 1]]
    } else {
        error "-charset value must be a Tcl list with either one or two\
                elements"
    }
    if {[lsearch -exact [encoding names] $cstcl] == -1} {
        error "charset $cstcl is not a valid Tcl encoding"
    }
    set cur(mimecharset) $csmime
    set cur(tclcharset) $cstcl
}


# ezsmtp::private_add_recip --
#
#	Add a single or list of recipients/respondants as either `To:', 
#	`Cc:', Bcc, or `Reply-To:' addresses.
#
# Arguments:
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
#	type		One of to, cc, bcc, replyto, tolist, cclist, bcclist,
#			or replytolist.
#	value		If the `type' specified is one of tolist, cclist, 
#			bcclist, or replytolist this must be a well-formed Tcl
#			list of addresses.  If the `type' specified is one of
#			to, cc, bcc, or replyto this must be a single email 
#			address to add.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_add_recip {var type value} {
    upvar 1 $var cur
    variable mail
    set rcpt_added 0
    set is_replyto 0
    set is_bcc 0

    # decide whether "value" is a list or a single-element address 
    # based on whether the type ends in "list".  If it ends in "list", 
    # strip that off the end.  If no recipients, return immediately.
    if {[string match *list $type]} {
        set reciplist $value
        regsub {list$} $type {} type
    } else {
        set reciplist [list $value]
    }
    if {[llength $reciplist] < 1} {
        return $rcpt_added
    }

    # At this point $type will be "bcc", "to", "cc", or "replyto".
    # Determine which header variable we will be affecting and make
    # sure it exists, skipping bcc.  "replyto" should be "reply-to" in
    # the headers, so we switch it here.
    if {[string compare $type bcc] == 0} {
        set is_bcc 1
    } elseif {[string compare $type replyto] == 0} {
        set is_replyto 1
        set type reply-to
    }
    if {!$is_bcc} {
        set headvar "cur([set type]:)"
        if {[info exists $headvar]} {
            set curlist [set $headvar]
        } else {
            set curlist {}
        }

        # If current stuff in header and we need to add more to the header,
        # make sure the last element ends with a comma (,).
        if {([llength $curlist] > 0) && ([llength $reciplist] > 0)} {
            set idxend [expr {[llength $curlist]-1}]
            set lastelem [lindex $curlist $idxend]
            append lastelem ","
            set curlist [lreplace $curlist $idxend $idxend $lastelem]
        }
    }

    # Loop through all the addresses passed to this proc
    foreach addr $reciplist {
        set addr [string trim $addr]
        if {![string length $addr]} {
            private_log 1 "WARNING: empty address ignored"
            continue
        }

        # Add the address to `To:', `Cc:', and `Reply-To:' headers verbatim.
        if {!$is_bcc} { lappend curlist "$addr," }

        # Do fussy-validation on the recipient address before adding to rcpt's
        set addr [private_valid_address $addr -$type]

        # Add all but Reply-To addresses to the recipient list
        if {!$is_replyto} {
            lappend cur(rcpt) $addr
	}

        incr rcpt_added
    }

    # Nuke any trailing comma in To:/Cc:/Reply-To: header var's, 
    # then and set header var.
    if {!$is_bcc} {
        if {[llength $curlist] > 0} {
            set idxend [expr {[llength $curlist]-1}]
            set lastelem [string trimright [lindex $curlist $idxend] ,]
            set curlist [lreplace $curlist $idxend $idxend $lastelem]
        }
        set $headvar $curlist
    }

    # Return number of addresses added
    set rcpt_added
}


# ezsmtp::private_return_receipt --
#
#	Sets the return-receipt behavior of this send.  See the docs
#	for ezsmtp::send -receipt to describe the arglist argument.
#
# Arguments:
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
#	arglist		May be either a single boolean element or a key/value
#			list of return-receipt settings, per the docs.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_return_receipt {var arglist} {
    upvar 1 $var cur

    # List of valid keys for -receipt list options
    set validopts [list delivery delay nsmail returnfull envelopeid]

    # Set receipt off and array values to default settings.
    array set cur [list receipt 0 receipt,delivery 1 receipt,delay 1 \
            receipt,nsmail 0 receipt,returnfull 0 receipt,envelopeid {}]

    # Single-argument to -receipt should be a boolean on/off for defaults.
    if {[llength $arglist] == 1} {
        set cur(receipt) [expr {[lindex $arglist 0] ? 1 : 0}]
        return
    }

    # Otherwise, we have a list of arguments that must be validated & set.
    # First, make sure the argument list has a valid length...
    if {([llength $arglist] < 2) || ([llength $arglist] % 2)} {
        error "ERROR: keyvaluelist passed to ezsmtp::send -receipt must have\
                an even number of elements and a length of at least 2 elements"
    }

    # And validate each setting, setting appropriate current-send variable.
    foreach {k v} $arglist {
        switch -exact -- $k {
            envelopeid {
                if {[string length [set v [private_xtext $v]]] > 38} {
                    error "ERROR: encoded envelope ID ($v) is too long.  Must\
                            be < 38 chars encoded."
		}
                set cur(receipt,$k) $v
	    }
            default {
                if {[lsearch -exact $validopts $k] == -1} {
                    error "ERROR: bad setting for -receipt key.  Must be 1 of:\
                             [join $validopts { }]"
		}
                set cur(receipt,$k) [expr {$v ? 1 : 0}]
	    }
	}
    }
    set cur(receipt) 1
}


# ezsmtp::private_smtp_begin --
#
#	Start the send by trying EHLO/HELO greeting followed by one or more
#	SMTP conversations, optionally batching some number of recipients.
#
# Arguments:
#	s		Open socket to SMTP server.
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_smtp_begin {s var} {
    upvar 1 $var cur
    global tcl_version
    variable mail

    # Set up the socket for line-buffering/translation.  Only set encoding
    # if we're running in Tcl 8.1 or newer that supports encodings.
    if {$tcl_version < 8.1} {
        fconfigure $s -buffering line -blocking 1 -eofchar {} \
                -translation {auto crlf}
    } else {
        fconfigure $s -buffering line -blocking 1 -eofchar {} \
                -translation {auto crlf} -encoding $cur(tclcharset)
    }
    private_log 2 "Opened connection to SMTP server $cur(mailhost)"
    private_read_all $s 3 220

    # Try to set up for ESMTP conversation
    set cur(esmtp) 0
    private_send_line $s 3 "EHLO [info hostname]"
    set buf [private_read_all $s 3 {[0-9][0-9][0-9]}]
    if {[string match "250*" $buf]} {
        set cur(esmtp) 1
        set buf [split $buf \n]
        foreach ln [lrange $buf 1 [expr {[llength $buf]-1}]] {
            if {[regexp -nocase \
		    "^250\[ -\](\[A-Z0-9\]\[A-Z0-9-\]*) (\[^\x01-\x20\x7F\])"\
                    $ln nil ehlo_keyword ehlo_param]} {
                set ehlo_keyword [string tolower $ehlo_keyword]
                set ehlo_param [string tolower $ehlo_param]
                set cur(esmtp,$ehlo_keyword) $ehlo_param
	    } elseif {[regexp -nocase "^250\[ -\](\[A-Z0-9\]\[A-Z0-9-\]*)" \
                    $ln nil ehlo_keyword]} {
                set ehlo_keyword [string tolower $ehlo_keyword]
                set cur(esmtp,$ehlo_keyword) 1
	    }
	}
    } else {
        # Otherwise, set up for normal RFC-821 SMTP conversation.
        private_send_line $s 3 "HELO [info hostname]"
        private_read_all $s 3 250
    }

    # If user requested return-receipt but not supported by server, bail.
    if {$cur(receipt) && ![info exists cur(esmtp,dsn)]} {
        error "ERROR: Server does not support DSN for return receipt"
    }

    # If user requested 8bit charset but not supported by server, bail.
    if {([string compare $cur(tclcharset) ascii] != 0) && \
            ![info exists cur(esmtp,8bitmime)]} {
        error "Server does not support 8-bit characters"
    }

    # If we are not doing any batching, do a straightforward send
    set sentcnt 0
    set rcptlen [llength $cur(rcpt)]
    if {($cur(batchsize) <= 0) || ($rcptlen <= $cur(batchsize))} {
        private_log 1 "Starting mail send to [join $cur(rcpt) {, }]"
        private_smtp_batch $s cur 0 [expr {$rcptlen-1}]
        incr sentcnt $rcptlen
        private_log 1 "Mail sent OK"
        return $sentcnt
    }

    # If we are batching sends and reading message body from a channel,
    # find out what position we are in the channel if we are sending to
    # more addr's than our batch size, to allow multiple send batches.
    if {[info exists cur(channel)] && [info exists cur(batchsize)]} {
        set cur(channelpos) [tell $cur(channel)]
        if {($cur(channelpos) == -1) && ($cur(batchsize) > 0)} {
            error "Channel must be seek-able when a batch size has been\
                    specified."
	}
    }

    # Loop through the batches of recipients
    set i 0
    while {$i < $rcptlen} {
        set e [expr {$i+$cur(batchsize)-1}]
        if {$e >= $rcptlen} {
            set e [expr {$rcptlen-1}] 
        }
        private_log 1 "Starting mail send for recipients $i to $e:\n \
                [join [lrange $cur(rcpt) $i $e] "\n  "]"
        private_smtp_batch $s cur $i $e
        incr sentcnt [expr {$e-$i+1}]
        private_log 1 "Mail sent OK"

        # If we need to, send server a reset and rewind the channel position.
        if {($e < ($rcptlen-1)) && [info exists cur(channelpos)]} {
            seek $cur(channelpos)
        }

        set i [expr {$e + 1}]
    }

    # Return the count of unique recipients
    set sentcnt
}


# ezsmtp::private_smtp_batch --
#
#	Implement the SMTP conversation necessary to send the message
#	to a batch of recipients.  This proc works off a subset of the
#	cur(rcpt) array of recipient email addresses specified by the
#	rcptstart and rcptend arguments.
#
# Arguments:
#	s		Open socket to SMTP server.
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
#	rcptstart	index in the cur(rcpt) array to start
#	rcptend		index in the cur(rcpt) array to end
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_smtp_batch {s var rcptstart rcptend} {
    upvar 1 $var cur
    variable mail

    # Reset the SMTP server's state to begin a new conversation
    private_send_line $s 3 "RSET"
    private_read_all $s 3

    # Try to build a valid "MAIL FROM:" command, including return-receipt info
    set cmd "MAIL FROM:<$cur(from)>"
    if {$cur(receipt)} {
        if {$cur(receipt,returnfull)} {append cmd " RET=FULL"} \
        else {append cmd " RET=HDRS"}
        if {[string length $cur(receipt,envelopeid)]} {
            append cmd " ENVID=" $cur(receipt,envelopeid)
	}
    }
    private_send_line $s 3 $cmd
    private_read_all $s 3

    # Build up our `NOTIFY=' extension if necessary
    set notifystr {}
    if {$cur(receipt)} {
        set notifyl [list FAILURE]
        if {$cur(receipt,delivery)} { lappend notifyl SUCCESS }
        if {$cur(receipt,delay)}    { lappend notifyl DELAY }
        append notifystr " NOTIFY=" [join $notifyl ,]
    }

    # Each recipent may be specified as "emailaddr" or "Full Name <emailaddr>"
    set rcptlist [lrange $cur(rcpt) $rcptstart $rcptend]
    foreach r $rcptlist {
        if {$cur(receipt)} {
            set orcptstr " ORCPT=rfc822;[private_xtext $r]"
            private_send_line $s 3 "RCPT TO:<$r>${notifystr}${orcptstr}"
	} else {
            private_send_line $s 3 "RCPT TO:<$r>"
	}
        private_read_all $s 3 {25[01]}
    }

    private_send_line $s 3 "DATA"
    private_read_all $s 3 354

    # Send all the mail headers followed by a blank line
    private_send_mail_headers $s cur

    private_log 4 ">>\[message body\]"
    # If we were given a -body in the send command, split into lines and send,
    # ensuring that we strip any stray CR's.
    if {[info exists cur(body)]} {
        set linenum 0
        regsub -all "\r" $cur(body) {} cur(body)
        foreach line [split $cur(body) \n] {
            incr linenum

            # Force breaks at 998 chars to comply with RFC 821 limit.
            while {[string length $line] > 998} {
                private_log 1 "WARNING: >998 chars split at line $linenum"
                set first998 [string range $line 0 997]
                set line [string range 998 [expr \
                        {[string length $line]-1}]]
                if {[string match ".*" $first998]} {
                    set first998 ".$first998"
                }
                private_send_line $s 5 $first998
	    }

            # Send remainder <= 998 chars.
            if {[string match ".*" $line]} {          ;# Double up leading '.'
                set line ".$line"
            }
            private_send_line $s 5 $line
	}
    }

    # If we were given a -channel in the send command, read from the channel
    # one line at a time and send.  Assuming channel configured to strip CRs.
    if {[info exists cur(channel)]} {
        set linenum 0
        while {[gets $cur(channel) line] != -1} {
            incr linenum

            # Force breaks at 998 chars to comply with RFC 821 limit.
            while {[string length $line] > 998} {
                private_log 1 "WARNING: >998 chars split at line $linenum"
                set first998 [string range $line 0 997]
                set line [string range 998 [expr \
                        {[string length $line]-1}]]
                if {[string match ".*" $first998]} {
                    set first998 ".$first998"
                }
                private_send_line $s 5 $first998
	    }

            # Send remainder <= 998 chars.
            if {[string match ".*" $line]} {          ;# Double up leading '.'
                set line ".$line"
            }
            private_send_line $s 5 $line
        }
    }

    # Finally, send the message terminator and read any result.
    private_send_line $s 4 "."
    private_read_all $s 3
}


# ezsmtp::private_send_mail_headers --
#
#	Output all the available email headers at the beginning of the 
#	message, followed by a single empty line.
#
# Arguments:
#	s		Open socket to SMTP server.
#	var		Variable name for associative array in the calling 
#			proc containing the specification for this send.
# Results:
#	Throws an error if anything goes wrong.
#
proc ::ezsmtp::private_send_mail_headers {s var} {
    upvar 1 $var cur
    variable mail

    set doNotSend [list date: subject: from: bcc: content-type: \
            content-transfer-encoding:]

    # If user didn't force a custom date, use the current time in GMT.
    set frm "%a, %d %b %Y %H:%M:%S +0000"
    if {[info exists cur(date:)]} {
        private_send_header $s date: $cur(date:)
    } else {
        private_send_line $s 4 "Date: [clock format [clock seconds] -gmt 1 \
                -format $frm]"
    }

    # If user didn't specify a custom "From:" header, use the one specified
    # by -from parameter or system default.
    if {[info exists cur(from:)]} {
        private_send_header $s from: $cur(from:)
    } else {
        private_send_line $s 4 "From: $cur(from)"
    }

    # Send -subject parameter if specified, or from Subject: custom header.
    if {[info exists cur(subject)]} {
        private_send_line $s 4 "Subject: $cur(subject)"
    } elseif {[info exists cur(subject:)]} {
        private_send_header $s subject: $cur(subject:)
    }

    # Send the required MIME content-type and content-transfer-encoding.
    if {[info exists cur(content-type:)]} {
        private_send_header $s content-type: $cur(content-type:)
    } else {
        private_send_line $s 4 "Content-Type: text/plain;\
                charset=$cur(mimecharset)"
    }
    if {[info exists cur(content-transfer-encoding:)]} {
        private_send_header $s content-transfer-encoding: \
                $cur(content-transfer-encoding:)
    } elseif {[string compare $cur(tclcharset) ascii] == 0} {
        private_send_line $s 4 "Content-Transfer-Encoding: 7bit"
    } else {
        private_send_line $s 4 "Content-Transfer-Encoding: 8bit"
    }

    # Send the custom headers for this current session.
    foreach h [array names cur *:] {
        if {[lsearch $doNotSend $h] != -1} continue
        private_send_header $s $h $cur($h)
    }

    # Send our global headers IFF they are not excluded or custom to 
    # the current sending session.
    foreach h [array names mail *:] {
        if {[lsearch $doNotSend $h] != -1} continue
        if {[info exists cur($h)]} continue
        private_send_header $s $h $mail($h)
    }

    # Check to see if the user requested netscape-style return-receipt on open
    if {$cur(receipt)} {
        if {$cur(receipt,nsmail) && \
                ![info exists cur(disposition-notification-to:)]} {
            private_send_line $s 4 "Disposition-Notification-To: $cur(from)"
	}
    }

    private_send_line $s 4 ""
}


# ezsmtp::private_send_header --
#
#	Sends a header (possibly multi-line) to the SMTP server socket, 
#	formatting the header in proper-text and indenting subsequent
#	lines with a single tab.
#
# Arguments:
#	s		Open socket to SMTP server.
#	name		Name of the header being sent w/trailing colon,
#			like reply-to:
#	valuel		value of header as a list -- one line per list
#			element.
# Results:
#	Header is formatted and output.  Returns number of lines output.
#
proc ::ezsmtp::private_send_header {s name valuel} {
    set lines 0
    set first [lindex $valuel 0]
    set remain [lrange $valuel 1 [expr {[llength $valuel]-1}]]
    private_send_line $s 4 "[private_proper_header $name] $first"
    incr lines
    foreach ln $remain {
        private_send_line $s 4 "\t$ln"
        incr lines
    }
    set lines
}
       

# ezsmtp::private_send_line --
#
#	Sends a line of text to the SMTP server socket, logging at the
#	specified level.
#
# Arguments:
#	s		Open socket to SMTP server.
#	level		Log level between 0 and 9, where 0 is always,
#			1 is whenever -verbose is on, and 9 is the highest
#			debug level available.  Suggested: 4
#	line		Line of text to be sent to the SMTP server, minus
#			any trailing newline or carriage-return characters.
# Results:
#	Closes socket $s and un-sets buffer and status variables.
#
proc ::ezsmtp::private_send_line {s level line} {
    private_log $level "S: $line"
    puts $s $line
    flush $s
}


# ezsmtp::private_read_all --
#
#	Read all available data from the SMTP server socket, handling
#	multi-line responses if necessary, and checking  for a response 
#	code.
#
# Arguments:
#	s		Open socket to SMTP server.
#	level		log level for data read from the socket.
#	resp		glob-style expression to match against the start of
#			data received from the SMTP server.  If left un-
#			specified, the standard 250 (OK) is expected.
# Results:
#	Throws an error if anything goes wrong or an unexpected response 
#	is seen.  Otherwise, returns the data read from the server, with
#	multi-line responses separated by newline (\n) characters.
#
proc ::ezsmtp::private_read_all {s level {resp 250}} {
    variable mail

    # Read response from SMTP server.  Single line or last line of multi-line
    # response will have three digits followed by a space.  Other multi-line
    # responses will have three digits followed by a dash (RFC 821 appendix E).
    # Anything else, including eof, is an error.
    set buf {}
    while {1} {
        if {[eof $s]} {
            error "ERROR: unexpected EOF waiting for output from SMTP server"
        }
        set ln [gets $s]
        append buf $ln \n
        private_log $level "R: $ln"
        if {[string match {[0-9][0-9][0-9] *} $ln]} {
            break
	}
        if {![string match {[0-9][0-9][0-9]-*} $ln]} {
            error "ERROR: unexpected response from SMTP server.  Expected\
                    three digits followed by either a space or a dash (-)"
	}
    }

    # Validate the start of the response
    if {![string match "$resp*" $buf]} {
        error "ERROR: bad response `$buf', wanted: `$resp'"
    }

    # and return the contents of all lines read, separated by newlines.
    set buf
}


# ezsmtp::private_proper_header --
#
#	Proper-cases an RFC 822-style email header name.
#
# Arguments:
#	h		header name like reply-to
# Results:
#	Returns the header name capitalized as most email users 
#	expect: the first letter of each dash-separated word is 
#	capitalized and the remainder is lower-cased, thus the
#	result from above would be Reply-To
#
proc ::ezsmtp::private_proper_header {h} {
    set h [string tolower $h]
    set resl {}

    # RFC 1521 clearly specifies the exact case, verbatim, for mime-version.
    if {[regexp -nocase mime-version: $h]} {
        return "MIME-Version:"
    }

    # For other headers, we capitalize the leading letter of each dash-
    # separated word.
    foreach elem [split $h -] {
        set str [string toupper [string index $elem 0]]
        append str [string range $elem 1 [expr {[string length $elem]-1}]]
        lappend resl $str
    }
    join $resl -
}


# ezsmtp::private_xtext --
#
#	Encode a string as an RFC 1891-compliant xtext value.  Characters 
#	outside the range ! (33) to ~ (126) or the plus (+ (43)) or 
#	equals (= (61)) characters are coded as the plus sign (+) followed
#	by two upper-case hexadecimal digits representing the character code.
#
# Arguments:
#	str		string to be encoded
# Results:
#	xtext-encoded value of str, per the above spec.
#
proc ::ezsmtp::private_xtext {str} {
    set result {}
    foreach c [split $str {}] {
        scan $c %c x
        if {($x < 33) || ($x > 126) || ($x == 43) || ($x == 61)} {
            append result + [format %02X $x]
        } else {
            append result $c
	}
    }
    set result
}


# ezsmtp::private_valid_address --
#
#	Validate and return the essential part of an email address,
#	using the contents of <addr> inside a `Full Name <addr>' spec.
#
# Arguments:
#	addrspec	address spec like `user@a.com' or
#			`Full Name <user@b.com>'
#	setting		setting to be output in an error message, like
#			-from, -to, ...
# Results:
#	stripped-down email address, if valid.  If invalid, an error is 
#	thrown.
#
proc ::ezsmtp::private_valid_address {addrspec setting} {
    variable mail

    set addrspec [string trim $addrspec]
    if {[regexp {<([^>]*)>$} $addrspec nil inneraddr]} {
        set addrspec [string trim $inneraddr]
    }
    if {$mail(strictaddr)} {set re $mail(strictre)} \
    else {set re $mail(!strictre)}
    if {![regexp $re $addrspec]} {
        error "ERROR: $setting address specified ($addrspec) is not compliant.\
                Must be in a form like `user@a.domain' or `Full Name\
                <user@b.domain>'"
    }
    set addrspec
}


# ezsmtp::private_log --
#
#	Log a progress/debug message to stdout or to a user-customized 
#	procedure.
#
# Arguments:
#	level		numeric level at which to log, usu. between 0 (always)
#			and 9 (low-level full debug).
#	msg		message text to log
# Results:
#	xtext-encoded value of str, per the above spec.
#
proc ::ezsmtp::private_log {level msg} {
    variable mail

    if {$mail(verbose) >= $level} {
        if {[string length $mail(logproc)]} {
            uplevel #0 $mail(logproc) $msg
	} else {
            puts stdout "$msg"
            flush stdout
	}
    }
}
###
### tools/email.tcl: part of Scid.
### Copyright (C) 1999-2003  Shane Hudson.
###

# Email manager window: closed by default
set emailWin 0


# ::tools::email
#
#   Opens the email chess manager window, for sending moves to opponents.
#
proc ::tools::email {} {
  global emailWin emailData
  set w .emailWin
  if {[winfo exists $w]} {
    destroy .emailWin
    set emailWin 0
    return
  }
  set emailWin 1
  toplevel $w
  wm title $w "Scid: Email Manager"
  wm minsize $w 25 10

  bind $w <Destroy> { set .emailWin 0 }
  bind $w <F1> { helpWindow Email }

  frame $w.f
  frame $w.b
  pack $w.f -side left -fill y
  addVerticalRule $w
  pack $w.b -side right -fill y

  set f $w.f
  label $f.title -text "Opponent list" -font font_Bold
  listbox $f.list -height 16 -width 40 -exportselection false \
    -selectmode browse -selectbackground lightBlue -font font_Fixed \
    -yscrollcommand "$f.scroll set" -background white -setgrid 1
  scrollbar $f.scroll -command "$w.list yview" -takefocus 0
  pack $f -side left -expand true -fill both
  pack $f.title -side top
  pack $f.scroll -side right -fill y
  pack $f.list -side right -expand true -fill both

  bind $f.list <ButtonRelease-1> ::tools::email::refreshButtons
  bind $f.list <Enter> ::tools::email::refreshButtons
  bind $f.list <Key-Up> ::tools::email::refreshButtons
  bind $f.list <Key-Down> ::tools::email::refreshButtons

  bind $f.list <Key-a> {.emailWin.b.add invoke}
  bind $f.list <Key-e> {.emailWin.b.edit invoke}
  bind $f.list <Key-d> {.emailWin.b.delete invoke}
  bind $f.list <Key-l> {.emailWin.b.load invoke}
  bind $f.list <Key-s> {.emailWin.b.send invoke}
  bind $f.list <Key-t> {.emailWin.b.time.m post [winfo pointerx .] [winfo pointery .]}

  set b .emailWin.b

  button $b.add -text "Add..." -underline 0 -command {
    set idx [llength $emailData]
    lappend emailData [list "" "" "" "" ""]
    modifyEmailDetails $idx
    ::tools::email::refresh
  }

  button $b.edit -text "Edit..." -underline 0 -command ::tools::email::EditButton
  button $b.delete -text "Delete..." -underline 0 -command ::tools::email::DeleteButton
  button $b.load -text "Load game" -underline 0 -command ::tools::email::LoadButton
  button $b.send -text "Send email..." -underline 0 -command ::tools::email::SendButton
  menubutton $b.time -text "Time" -underline 0 -indicatoron 1 \
    -menu $b.time.m -relief raised
  menu $b.time.m
  $b.time.m add command -label "Received today" -underline 0 \
    -command {::tools::email::TimesButton r}
  $b.time.m add command -label "Sent today" -underline 0 \
    -command {::tools::email::TimesButton s}
  $b.time.m add command -label "Edit..." -underline 0 \
    -command {::tools::email::TimesButton e}

  button $b.config -text "Settings..." -command ::tools::email::config
  button $b.help -text $::tr(Help) -command { helpWindow Email }
  button $b.close -text $::tr(Close) -command { destroy .emailWin }

  foreach i {add edit delete load send time config help close} {
    $b.$i configure -font font_Small
  }
  pack $b.add $b.edit $b.delete $b.load $b.send $b.time \
    -side top -pady 1 -padx 5 -fill x
  pack $b.close $b.help $b.config -side bottom -pady 1 -padx 5  -fill x

  bind $w <Destroy> { set emailWin 0 }
  set emailData [::tools::email::readOpponentFile]
  focus $w.f.list
  ::tools::email::refresh
}

proc ::tools::email::config {} {
  global email
  set w .emailConfig
  toplevel $w
  wm title $w "Scid"
  label $w.use -text "Send email using:" -font font_Bold
  frame $w.smtp
  radiobutton $w.smtp.b -text "SMTP server:" -variable email(smtp) -value 1
  entry $w.smtp.s -width 30 -textvar email(server) -bg white
  frame $w.sm
  radiobutton $w.sm.b -text "sendmail process:" -variable email(smtp) -value 0
  entry $w.sm.s -width 30 -textvar email(smproc) -bg white
  pack $w.use -side top
  pack $w.smtp $w.sm -side top -fill x
  pack $w.smtp.s $w.smtp.b -side right
  pack $w.sm.s $w.sm.b -side right
  addHorizontalRule $w
  label $w.addr -text "Email address fields:" -font font_Bold
  frame $w.from
  label $w.from.lab -text "From:"
  entry $w.from.e -textvar email(from) -width 30 -bg white
  frame $w.bcc
  label $w.bcc.lab -text "Bcc:"
  entry $w.bcc.e -textvar email(bcc) -width 30 -bg white
  pack $w.addr $w.from $w.bcc -side top -fill x
  pack $w.from.e $w.from.lab -side right
  pack $w.bcc.e $w.bcc.lab -side right
  addHorizontalRule $w
  pack [frame $w.b] -side top -fill x
  button $w.b.ok -text [tr OptionsSave] -command {
    .menu.options invoke [tr OptionsSave]
    catch {grab release .emailConfig}
    destroy .emailConfig
  }
  button $w.b.cancel -text $::tr(Cancel) \
    -command "catch {grab release $w}; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 2 -pady 2
  wm resizable $w 1 0
  catch {grab $w}
}

proc ::tools::email::EditButton {} {
  global emailData
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] == 1} {
    set idx [lindex $sel 0]
    if {[llength $emailData] > $idx} {
      modifyEmailDetails $idx
    }
  }
  ::tools::email::refresh
}

proc ::tools::email::DeleteButton {} {
  global emailData
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] != 1} { return }
  set idx [lindex $sel 0]
  if {[llength $emailData] <= $idx} { return }
  set confirm [tk_messageBox -icon question -type yesno -default yes \
                 -parent .emailWin -title "Really delete opponent?" \
                 -message "Do you really want to delete this opponent?"]
  if {$confirm == "yes"} {
      set emailData [lreplace $emailData $idx $idx]
    ::tools::email::writeOpponentFile $emailData
    ::tools::email::refresh
  }
}

proc ::tools::email::LoadButton {} {
  global emailData
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] != 1} { return }
  set idx [lindex $sel 0]
  if {[llength $emailData] <= $idx} { return }
  set details [lindex $emailData $idx]
  if {[llength [lindex $details 3]] > 0} {
    if {[catch {::game::Load [lindex [lindex $details 3] 0]} result]} {
      tk_messageBox -type ok -icon warning -title "Scid" -message $result
    } else {
      sc_move end
    }
  }
}

proc ::tools::email::SendButton {} {
  global emailData
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] != 1} { return }
  set idx [lindex $sel 0]
  if {[llength $emailData] <= $idx} { return }
  set details [lindex $emailData $idx]
  emailMessageEditor $idx [lindex $details 0] [lindex $details 1] \
    [lindex $details 2] [lindex $details 3] [lindex $details 4]
}

set emailTimesIdx 0

proc ::tools::email::TimesButton {type} {
  global emailData emailTimesIdx
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] != 1} { return }
  set idx [lindex $sel 0]
  if {[llength $emailData] <= $idx} { return }
  set details [lindex $emailData $idx]
  while {[llength $details] < 6} { lappend details {} }
  set timeList [lindex $details 5]
  set last [lindex $timeList end]

  if {$type == "r"  || $type == "s"} {
    ::tools::email::addSentReceived $idx $type
    return
  }

  set emailTimesIdx $idx
  set w .emailTimesWin
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: Email Times"
  label $w.title -text "Email Times for [lindex $details 0]"
  frame $w.t
  text $w.t.text -height 15 -width 30 -font font_Fixed -setgrid 1 \
    -yscrollcommand "$w.t.ybar set" -bg white -fg black
  scrollbar $w.t.ybar -command "$w.t.text yview"
  frame $w.b
  button $w.b.ok -text "OK" -command {
    set details [lindex $emailData $emailTimesIdx]
    set timeList [split [string trim [.emailTimesWin.t.text get 1.0 end]] "\n"]
    set details [lreplace $details 5 5 $timeList]
    set emailData [lreplace $emailData $emailTimesIdx $emailTimesIdx $details]
    ::tools::email::writeOpponentFile $emailData
    grab release .emailTimesWin
    ::tools::email::refresh 0
    catch {focus .emailWin}
    destroy .emailTimesWin
  }
  button $w.b.cancel -text $::tr(Cancel) \
    -command "grab release $w; catch {focus .emailWin}; destroy $w"
  pack $w.title -side top -fill x
  pack $w.t -side top -fill both
  pack $w.t.ybar -side right -fill y
  pack $w.t.text -side left -fill both -expand yes
  pack $w.b -side bottom -fill x
  pack $w.b.cancel $w.b.ok -side right -padx 2 -pady 2
  foreach i $timeList {
    $w.t.text insert end "$i\n"
  }
  grab $w
}

proc ::tools::email::addSentReceived {idx type} {
  global emailData
  if {[llength $emailData] <= $idx} { return }
  set details [lindex $emailData $idx]
  while {[llength $details] < 6} { lappend details {} }
  set timeList [lindex $details 5]
  set last [lindex $timeList end]

  set new ""
  if {$type == "r"} { append new "Received " } else { append new "Sent     " }

  set oppGList [lindex $details 3]
  if {[llength $oppGList] > 0} {
    set oppGNum [lindex $oppGList 0]
    sc_game push
    set mnum "     "
    if {[catch {::game::Load $oppGNum}]} {
    } else {
      sc_move end
      set m [llength [split [sc_game moves coord list]]]
      if {$m > 0} {
        set m [expr int(($m+1)/2)]
        set mnum [format "%3d  " $m]
      }
    }
    sc_game pop
    append new $mnum
  }
  append new [::utils::date::today]
  if {! [string compare $last $new]} { return }
  lappend timeList $new
  set details [lreplace $details 5 5 $timeList]
  set emailData [lreplace $emailData $idx $idx $details]
  ::tools::email::writeOpponentFile $emailData
  ::tools::email::refresh 0
}

proc ::tools::email::refreshButtons {} {
  set sel [.emailWin.f.list curselection]
  if {[llength $sel] > 0} {
    .emailWin.b.edit configure -state normal
    .emailWin.b.delete configure -state normal
    .emailWin.b.load configure -state normal
    .emailWin.b.send configure -state normal
  } else {
    .emailWin.b.edit configure -state disabled
    .emailWin.b.delete configure -state disabled
    .emailWin.b.load configure -state disabled
    .emailWin.b.send configure -state disabled
  }
}

proc ::tools::email::refresh {{clearSelection 1}} {
  global emailWin emailData
  if {! [winfo exists .emailWin]} { return }
  if {$clearSelection} {
    set sel ""
    .emailWin.f.list selection clear 0 end
  } else {
    set sel [lindex [.emailWin.f.list curselection] 0]
  }
  .emailWin.f.list delete 0 end
  # set emailData [lsort -dictionary -index 0 $emailData]
  foreach i $emailData {
    set name [lindex $i 0]
    set time ""
    if {[llength $i] == 6} {
      set timeList [lindex $i 5]
      set time [lindex $timeList end]
    }
    .emailWin.f.list insert end [format "%-14s %s" $name $time]
  }
  if {$sel != ""} {
    .emailWin.f.list selection set $sel
  }
  ::tools::email::refreshButtons
}

#Initial values for globals:
set emailData {}
set emailData_index 0
set emailData_name ""
set emailData_addr ""
set emailData_subj ""
set emailData_glist ""
set emailData_dates ""
set emailData_helpBar {}
array set ::tools::email::helpBar ""

# Force the game numbers list to be digits and spaces only:
trace variable emailData_glist w {::utils::validate::Regexp {^[0-9\ ]*$}}


# emailCount: counter to give each email window a unique name.
set emailCount 0

# emailMessageEditor:
#    Contsructs the email message to the opponent and
#    creates the editor window for editing and sending the message.
#
proc emailMessageEditor {idx name addr subj gamelist sig} {
  global emailCount emailData email
  incr emailCount
  if {$emailCount >= 10000} { set emailCount 1 }

  set w ".emailMessageWin$emailCount"
  toplevel $w
  wm title $w "Send email to $name"
  set f [frame $w.fields]

  label $f.fromlab -text "From: "
  entry $f.from -background white
  $f.from insert end $email(from)

  label $f.tolab -text "To: "
  entry $f.to -background white
  $f.to insert end $addr

  label $f.subjlab -text "Subject: "
  entry $f.subj -background white
  $f.subj insert end $subj

  label $f.bcclab -text "Bcc: "
  entry $f.bcc -background white
  $f.bcc insert end $email(bcc)

  button $f.send -text "Send" -command "::tools::email::processMessage $w $idx"
  button $f.cancel -text "Cancel" -command "destroy $w"

  grid $f.send -row 0 -column 3 -rowspan 2 -sticky nesw
  grid $f.cancel -row 2 -column 3 -rowspan 2 -sticky nesw
  grid $f.fromlab -row 0 -column 0 -sticky e
  grid $f.from -row 0 -column 1 -sticky ew
  grid $f.tolab -row 1 -column 0 -sticky e
  grid $f.to -row 1 -column 1 -sticky ew
  grid $f.subjlab -row 2 -column 0 -sticky e
  grid $f.subj -row 2 -column 1 -sticky ew
  grid $f.bcclab -row 3 -column 0 -sticky e
  grid $f.bcc -row 3 -column 1 -sticky ew
  grid columnconfigure $f 1 -weight 1

  set f [frame $w.message]
  pack $w.fields -fill x -padx 4 -pady 4
  pack $w.message -expand yes -fill both -padx 4 -pady 4

  scrollbar $f.ybar -command "$f.text yview"
  scrollbar $f.xbar -orient horizontal -command "$f.text xview"
  text $f.text -yscrollcommand "$f.ybar set" -xscrollcommand "$f.xbar set" \
    -setgrid 1 -width 72 -height 20 -background white -wrap none

  grid $f.text -row 0 -column 0 -sticky news
  grid $f.ybar -row 0 -column 1 -sticky news
  grid $f.xbar -row 1 -column 0 -sticky news

  grid rowconfig $w.message 0 -weight 1 -minsize 0
  grid columnconfig $w.message 0 -weight 1 -minsize 0

  # Right-mouse button cut/copy/paste menu:
  menu $f.text.edit -tearoff 0
  $f.text.edit add command -label "Cut" -command "tk_textCut $f.text"
  $f.text.edit add command -label "Copy" -command "tk_textCopy $f.text"
  $f.text.edit add command -label "Paste" -command "tk_textPaste $f.text"
  bind $f.text <ButtonPress-$::MB3> "tk_popup $f.text.edit %X %Y"

  set text $w.message.text
  # $text insert end "Hi $name,\n\n"
  $text insert end "\n"
  foreach i $gamelist {
    catch {set gamePgn [sc_game pgn -gameNumber $i -width 70 -tags 0 \
                          -variations 0 -comments 0]}
    $text insert end "$gamePgn\n"
  }
  $text insert end $sig
  return
}

proc ::tools::email::processMessage {w idx} {
  global emailData
  set from [$w.fields.from get]
  set to [$w.fields.to get]
  set subj [$w.fields.subj get]
  set bcc [$w.fields.bcc get]
  set message [$w.message.text get 1.0 end]
  if {[string trim $to] == ""} {
    tk_messageBox -icon error -type ok -title "Empty email address" \
      -message "You must specify an email address."
    return
  }
  set cmd {::tools::email::sendMessage $from $to $subj $bcc $message}
  if {[catch $cmd result] != 0} {
    tk_messageBox -icon error -type ok -title "Error sending email" \
      -message "Error sending email: $result"
  } else {
    ::tools::email::addSentReceived $idx s
    tk_messageBox -icon info -type ok -title "Scid" -message $result
    destroy $w
  }
}

proc ::tools::email::sendMessage {from to subject bcc message} {
  global email

  ### Uncomment following line for testing, to avoid sending email:
  # return "Testing, no email was actually sent"

  set copy_id ""
  catch {set copy_id [open [file nativename $email(logfile)] "a+"]}
  if {$copy_id == ""} {
    return -code error "Unable to open $email(logfile)"
  }
  if {$email(smtp)} {
    set cmdargs "-to {$to} -subject {$subject} "
    if {$email(server) != ""} { ::ezsmtp::config -mailhost $email(server) }
    if {$email(from) != ""} {
      if {[catch {::ezsmtp::config -from $from} result]} {
        close $copy_id
        return -code error "Error configuring SMTP: $result"
      }
      append cmdargs "-from {$from} "
    }
    if {$email(bcc) != ""} {
      append cmdargs "-bcc {$bcc} "
    }
    if {[catch {eval "::ezsmtp::send $cmdargs -body {$message}"} result]} {
      close $copy_id
      return -code error "Error sending mail with SMTP: $result"
    }
  } else {
    if {[catch {open "| $email(smproc) -oi -t" "w"} ::tools::email::id]} {
      close $copy_id
      return -code error "Scid could not find the sendmail program: $email(smproc)"
    }
    if {[string trim $from] != ""} {
      puts $::tools::email::id "From: $from"
    }
    puts $::tools::email::id "To: $to"
    puts $::tools::email::id "Subject: $subject"
    if {[string trim $bcc] != ""} {
      puts $::tools::email::id "Bcc: $bcc"
    }
    puts $::tools::email::id ""
    puts $::tools::email::id $message
    close $::tools::email::id
  }
  puts $copy_id  "To: $to"
  puts $copy_id  "Subject: $subject"
  puts $copy_id  ""
  puts $copy_id $message
  close $copy_id
  return "The email message was sent; a copy was appended to $email(logfile)"
}

proc modifyEmailDetails {i} {
  global emailData emailData_name emailData_addr emailData_glist emailData_subj
  global emailData_sig emailData_index emailData_helpBar ::tools::email::helpBar

  toplevel .emailEditor
  set w .emailEditor
  bind $w <F1> { helpWindow Email }
  set emailData_index $i
  if {[lindex [lindex $emailData $i] 0] == ""} {
    wm title $w "Add opponent details"
  } else {
    wm title $w "Edit opponent details"
  }
  set f [frame $w.name]
  label $f.label -text "Name: "
  entry $f.entry -width 30 -background white -textvariable emailData_name
  set ::tools::email::helpBar(name) "Enter the opponent's name"

  set f [frame $w.addr]
  label $f.label -text "Email address: "
  entry $f.entry -width 30 -background white -textvariable emailData_addr
  set ::tools::email::helpBar(addr) "Enter the opponent's email address"

  set f [frame $w.subj]
  label $f.label -text "Subject: "
  entry $f.entry -width 30 -background white -textvariable emailData_subj
  set ::tools::email::helpBar(subj) "Enter the subject for each message"

  set f [frame $w.glist]
  label $f.label -text "Game Numbers: "
  entry $f.entry -width 30 -background white -textvariable emailData_glist
  set ::tools::email::helpBar(glist) \
    "Enter opponent's game numbers, separated by spaces"

  foreach f {name addr subj glist} {
    pack $w.$f -side top -fill x
    pack $w.$f.entry $w.$f.label -side right -anchor e
    set e $w.$f.entry
    bind $e <FocusIn> "$e configure -background lightYellow;
      set emailData_helpBar \$::tools::email::helpBar($f)"
    bind $e <FocusOut> "$e configure -background white"
  }

  addHorizontalRule $w

  set f [frame $w.sig]
  label $f.label -text "Signature: " -anchor n
  text $f.entry -width 30 -height 5 -background white
  bind $f.entry <FocusIn> "$f.entry configure -background lightYellow
    set emailData_helpBar {Enter the closing text for each message}"
  bind $f.entry <FocusOut> "$f.entry configure -background white"

  pack $f -side top -fill x
  pack $f.entry $f.label -side right -anchor n

  addHorizontalRule $w

  set f [frame $w.buttons]
  button $w.buttons.save -text "Save" -command {
    set gNumberErr [::tools::email::validGameNumbers $emailData_glist]
    if {$gNumberErr != -1} {
      tk_messageBox -icon error -type ok -title "Invalid data" \
        -message "The games list contains an invalid game number: $gNumberErr; there are only [sc_base numGames] games in this database."
    } else {
      set emailData [lreplace $emailData $emailData_index \
                       $emailData_index \
                       [list $emailData_name $emailData_addr $emailData_subj \
                          $emailData_glist \
                          [.emailEditor.sig.entry get 1.0 end-1c]]]
      ::tools::email::writeOpponentFile $emailData
      destroy .emailEditor
      ::tools::email::refresh
    }
  }
  button $f.cancel -text "Cancel" -command {
    set emailData [::tools::email::readOpponentFile]
    destroy .emailEditor
    ::tools::email::refresh
  }
  pack $f -side top
  pack $f.save $f.cancel -side left -padx 20 -pady 10

  label $w.helpBar -width 1 -textvariable emailData_helpBar -relief sunken \
    -font font_Small -anchor w
  pack $w.helpBar -side bottom -fill x

  # Set up the initial values in the entry boxes:
  set details [lindex $emailData $emailData_index]
  set emailData_name [lindex $details 0]
  set emailData_addr [lindex $details 1]
  set emailData_subj [lindex $details 2]
  set emailData_glist [lindex $details 3]
  $w.sig.entry insert 1.0 [lindex $details 4]
  grab .emailEditor
}

proc ::tools::email::validGameNumbers {numberList} {
  foreach i $numberList {
    if {$i < 1  ||  $i > [sc_base numGames]} { return $i }
  }
  return -1
}

proc ::tools::email::opponentFilename {} {
  set filename [sc_base filename]
  append filename ".sem"
  return $filename
}

proc ::tools::email::readOpponentFile {} {
  set filename [::tools::email::opponentFilename]
  if {[catch {set f [open $filename "r"]} ]} {
    # puts "Unable to open opponent file"
    return {}
  }
  set data [read -nonewline $f]
  close $f
  return $data
}

proc ::tools::email::writeOpponentFile {data} {
  set filename [::tools::email::opponentFilename]
  if {[catch {set f [open $filename "w"]} ]} {
    # puts "Unable to write opponent file"
    return {}
  }
  puts $f $data
  close $f
}

###
### import.tcl: part of Scid.
### Copyright (C) 2000  Shane Hudson.
###

### Import game window

proc importPgnGame {} {
  if {[winfo exists .importWin]} { return }
  set w [toplevel .importWin]
  wm title $w "Scid: Import PGN game"
  wm minsize $w 50 5
  frame $w.b
  pack $w.b -side bottom
  set pane [::utils::pane::Create $w.pane edit err 650 300 0.8]
  pack $pane -side top -expand true -fill both
  set edit $w.pane.edit
  text $edit.text -height 12 -width 80 -wrap none -background white \
      -yscroll "$edit.ybar set" -xscroll "$edit.xbar set"  -setgrid 1
  # Override tab-binding for this widget:
  bind $edit.text <Key-Tab> "[bind all <Key-Tab>]; break"
  scrollbar $edit.ybar -command "$edit.text yview" -takefocus 0
  scrollbar $edit.xbar -orient horizontal -command "$edit.text xview" -takefocus 0
  grid $edit.text -row 0 -column 0 -sticky nesw
  grid $edit.ybar -row 0 -column 1 -sticky nesw
  grid $edit.xbar -row 1 -column 0 -sticky nesw
  grid rowconfig $edit 0 -weight 1 -minsize 0
  grid columnconfig $edit 0 -weight 1 -minsize 0
  
  # Right-mouse button cut/copy/paste menu:
  menu $edit.text.rmenu -tearoff 0
  $edit.text.rmenu add command -label "Cut" -command "tk_textCut $edit.text"
  $edit.text.rmenu add command -label "Copy" -command "tk_textCopy $edit.text"
  $edit.text.rmenu add command -label "Paste" -command "tk_textPaste $edit.text"
  $edit.text.rmenu add command -label "Select all" -command "$edit.text tag add sel 1.0 end"
  bind $edit.text <ButtonPress-$::MB3> "tk_popup $edit.text.rmenu %X %Y"
  
  text $pane.err.text -height 4 -width 75 -wrap word -yscroll "$pane.err.scroll set"
  $pane.err.text insert end $::tr(ImportHelp1)
  $pane.err.text insert end "\n"
  $pane.err.text insert end $::tr(ImportHelp2)
  $pane.err.text configure -state disabled
  scrollbar $pane.err.scroll -command "$pane.err.text yview" -takefocus 0
  pack $pane.err.scroll -side right -fill y
  pack $pane.err.text -side left -expand true -fill both
  
  button $w.b.paste -text "$::tr(PasteCurrentGame) (Alt-P)" -command {
    .importWin.pane.edit.text delete 1.0 end
    .importWin.pane.edit.text insert end [sc_game pgn -width 70]
    .importWin.pane.err.text configure -state normal
    .importWin.pane.err.text delete 1.0 end
    .importWin.pane.err.text configure -state disabled
  }
  button $w.b.clear -text "$::tr(Clear) (Alt-C)" -command {
    .importWin.pane.edit.text delete 1.0 end
    .importWin.pane.err.text configure -state normal
    .importWin.pane.err.text delete 1.0 end
    .importWin.pane.err.text configure -state disabled
  }
  button $w.b.ok -text "$::tr(Import) (Alt-I)" -command {
    set err [catch {sc_game import \
          [.importWin.pane.edit.text get 1.0 end]} result]
    .importWin.pane.err.text configure -state normal
    .importWin.pane.err.text delete 1.0 end
    .importWin.pane.err.text insert end $result
    .importWin.pane.err.text configure -state disabled
    if {! $err} {
      updateBoard -pgn
      updateTitle
      ::windows::gamelist::Refresh
    }
  }
  button $w.b.cancel -textvar ::tr(Close) -command {
    destroy .importWin; focus .
  }
  frame $w.b.space -width 20
  pack $w.b.paste $w.b.clear $w.b.space -side left -padx 2 -pady 2
  pack $w.b.cancel $w.b.ok -side right -padx 10 -pady 5
  # Paste the current selected text automatically:
  # if {[catch {$w.pane.edit.text insert end [selection get]}]} {
  # ?
  # }
  # Select all of the pasted text:
  $w.pane.edit.text tag add sel 1.0 end
  
  bind $w <F1> { helpWindow Import }
  bind $w <Alt-i> { .importWin.b.ok invoke }
  bind $w <Alt-p> { .importWin.b.paste invoke }
  bind $w <Alt-c> { .importWin.b.clear invoke }
  bind $w <Escape> { .importWin.b.cancel invoke }
  # bind $w.pane.edit.text <Any-KeyRelease> { .importWin.b.ok invoke }
  focus $w.pane.edit.text
}


proc importClipboardGame {} {
  importPgnGame
  catch {event generate .importWin.pane.edit.text <<Paste>>}
  # Paste the current selected text automatically if no data was pasted from clipboard:
  if { [ .importWin.pane.edit.text get 1.0 end ] == "\n" } {
    catch { .importWin.pane.edit.text insert end [selection get] }
  }
}

proc importPgnLine {line} {
  importPgnGame
  set w .importWin.pane.edit.text
  $w delete 1.0 end
  $w insert end $line
  $w tag add sel 1.0 end
  focus $w
}

################################################################################
#
################################################################################
proc importMoveList {line} {
  sc_move start
  sc_move addSan $line
  updateBoard -pgn
}
################################################################################
#
################################################################################
proc importMoveListTrans {line} {
  
  set doImport 0
  
  if { $::askToReplaceMoves } {
    if {[llength [sc_game firstMoves 0 1]] == 0} {
      set doImport 1
    } elseif {[tk_messageBox -message [::tr "OverwriteExistingMoves"] -type yesno -icon question ] == yes} {
      set doImport 1
    }
  } else  {
    set doImport 1
  }
  if {$doImport} {
    set line [untrans $line]
    sc_move start
    sc_move addSan $line
    updateBoard -pgn
  }
  
}

set importPgnErrors ""

### Import file of Pgn games:

proc importPgnFile {} {
  global importPgnErrors
  
  set err ""
  if {[sc_base isReadOnly]} { set err "This database is read-only." }
  if {![sc_base inUse]} { set err "This is not an open database." }
  if {$err != ""} {
    tk_messageBox -type ok -icon error -title "Scid: Error" -message $err
    return
  }
  if {[sc_info gzip]} {
    set ftypes {
      { "Portable Game Notation files" {".pgn" ".PGN" ".pgn.gz"} }
      { "Text files" {".txt" ".TXT"} }
      { "All files" {"*"} }
    }
  } else {
    set ftypes {
      { "Portable Game Notation files" {".pgn" ".PGN"} }
      { "Text files" {".txt" ".TXT"} }
      { "All files" {"*"} }
    }
  }
  set fnames [tk_getOpenFile -multiple 1 -initialdir $::initialDir(pgn) -filetypes $ftypes -title "Import from PGN files" ]
  if {$fnames == ""} { return }
  
  set ::initialDir(pgn) [file dirname [lindex $fnames 0]]
  foreach fname $fnames {
    doPgnFileImport $fname "" 1
  }
  ::windows::gamelist::Refresh
}

proc doPgnFileImport {fname text {multiple 0} } {
  set w .ipgnWin
  if {[winfo exists $w] && ! $multiple } { destroy $w }
  if {! [winfo exists $w]} {
    toplevel $w
    wm title $w "Scid: Importing PGN file"
    canvas $w.progress -width 400 -height 20 -bg white -relief solid -border 1
    $w.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
    $w.progress create text 395 10 -anchor e -font font_Regular -tags time \
        -fill black -text "0:00 / 0:00"
    
    pack $w.progress -side bottom
    
    frame $w.buttons
    pack $w.buttons -side bottom -fill x
    button $w.buttons.stop -textvar ::tr(Stop) -command {sc_progressBar}
    button $w.buttons.close -textvar ::tr(Close) -command "focus .; destroy $w"
    pack $w.buttons.close $w.buttons.stop -side right -ipadx 5 -padx 5 -pady 2
    
    pack [frame $w.tf] -side top -expand yes -fill both
    text $w.text -height 8 -width 60 -background gray90 \
        -wrap none -cursor watch -setgrid 1 -yscrollcommand "$w.ybar set"
    scrollbar $w.ybar -command "$w.text yview"
    pack $w.ybar -in $w.tf -side right -fill y
    pack $w.text -in $w.tf -side left -fill both -expand yes
  }
  
  sc_progressBar $w.progress bar 401 21 time
  update
  busyCursor .
  catch {grab $w.buttons.stop}
  bind $w <Escape> "$w.buttons.stop invoke"
  $w.buttons.close configure -state disabled
  $w.text configure -state normal
  $w.text insert end $text
  $w.text insert end "Importing PGN games from [file tail $fname]...\n"
  $w.text configure -state disabled
  
  set importPgnErrors ""
  set err [catch {sc_base import file $fname} result]
  unbusyCursor .
  
  set warnings ""
  $w.text configure -state normal
  $w.text configure -cursor top_left_arrow
  if {$err} {
    $w.text insert end $result
  } else {
    set nImported [lindex $result 0]
    set warnings [lindex $result 1]
    set str "Imported $nImported "
    if {$nImported == 1} { append str "game" } else { append str "games" }
    if {$warnings == ""} {
      append str " with no PGN errors or warnings."
    } else {
      append str ".\nPGN errors/warnings:\n$warnings"
    }
    $w.text insert end "$str\n\n"
  }
  
  $w.text configure -state disabled
  $w.buttons.close configure -state normal
  $w.buttons.stop configure -state disabled
  catch {grab release $w.buttons.stop}
  bind $w <Escape> "$w.buttons.close invoke; break"
  
  # Auto-close import progress window if there were no errors/warnings?
  if {!$err  &&  $warnings == "" && ! $multiple} { destroy $w }
  updateTitle
  updateMenuStates
  ::windows::switcher::Refresh
  ::maint::Refresh
  update
}

###
### End of file: import.tcl
###

### optable.tcl: Opening report and theory table generation.
### Part of Scid. Copyright 2001-2003 Shane Hudson.

namespace eval ::optable {}
array set ::optable::_data {}

set ::optable::_data(exclude) "---"
set ::optable::_docStart(text) {}
set ::optable::_docEnd(text) {}
set ::optable::_docStart(ctext) {}
set ::optable::_docEnd(ctext) {}
set ::optable::_flip 0

set ::optable::_docStart(html) {<html>
  <head>
  <title>[OprepTitle]</title>
  <style type="text/css">
  <!--
  h1 { color:#990000 }
  h2 { color:#990000 }
  h3 { color:#990000 }
  .player {
    color:darkblue
  }
  .elo {
    color:green
    font-style:italic
  }
  sup {
    color:red
  }
  -->
  </style>
  </head>
  <body bgcolor="#ffffff">
}
set ::optable::_docEnd(html) {</body>
  </html>
}

set ::optable::_docStart(latex) {\documentclass[10pt,a4paper]{article}
  % This is a LaTeX file generated by Scid.
  % You must have the "chess12" package installed to typeset this file.
  
  \usepackage{times}
  \usepackage{a4wide}
  \usepackage{chess}
  \usepackage[T1]{fontenc}
  
  \setlength{\columnsep}{1cm}
  \setlength{\parindent}{0pt}
  \setlength{\parskip}{3pt}
  
  \font\F=chessf10
  \newcommand{\B}{{\F B}}
  \newcommand{\N}{{\F N}}
  \newcommand{\R}{{\F R}}
  \newcommand{\Q}{{\F Q}}
  \newcommand{\K}{{\F K}}
  \newcommand{\tspace}{{\vspace{0.08cm}}}
  \newcommand{\draw}{{\small$\frac{1}{2}$:$\frac{1}{2}$}}
  \newcommand{\loss}{\mbox{0:1}}
  \newcommand{\win}{\mbox{1:0}}
  \newcommand{\notenum}[1]{\hspace{-0.7cm}\makebox[0.55cm][r]{$^{ #1 }$ }\makebox[0.05cm]{}}
  
  %\font\Chess=chess10
  \begin{document}
  \raggedright
  \nochess
}
set ::optable::_docEnd(latex) {
  \end{document}
}

proc ::optable::ConfigMenus {{lang ""}} {
  if {! [winfo exists .oprepWin]} { return }
  if {$lang == ""} { set lang $::language }
  set m .oprepWin.menu
  foreach idx {0 1 2} tag {File Favorites Help} {
    configMenuText $m $idx Oprep$tag $lang
  }
  foreach idx {0 1 2 4 6} tag {Text Html LaTeX Options Close} {
    configMenuText $m.file $idx OprepFile$tag $lang
  }
  foreach idx {0 1 2} tag {Add Edit Generate} {
    configMenuText $m.favorites $idx OprepFavorites$tag $lang
  }
  foreach idx {0 1} tag {Report Index} {
    configMenuText $m.helpmenu $idx OprepHelp$tag $lang
  }
}

proc ::optable::makeReportWin {args} {
  if {! [sc_base inUse]} { return }
  set ::optable::opReportBase [sc_base current]
  set showProgress 1
  set args [linsert $args 0 "args"]
  if {[lsearch -exact $args "-noprogress"] >= 0} { set showProgress 0 }
  if {$showProgress} {
    set w .progress
    toplevel $w
    wm withdraw $w
    wm title $w "Scid: Generating Report"
    bind $w <Visibility> "raiseWin $w"
    
    pack [frame $w.b] -side bottom -fill x
    set ::optable::_interrupt 0
    button $w.b.cancel -text $::tr(Cancel) -command {
      set ::optable::_interrupt 1
      sc_progressBar
    }
    pack $w.b.cancel -side right -pady 5 -padx 2
    
    foreach i {1 2} name { "Searching database for report games" "Generating report information" } {
      label $w.text$i -text "$i. $name"
      pack $w.text$i -side top
      canvas $w.c$i -width 400 -height 20 -bg white -relief solid -border 1
      $w.c$i create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
      $w.c$i create text 395 10 -anchor e -font font_Regular -tags time \
          -fill black -text "0:00 / 0:00"
      pack $w.c$i -side top -pady 10
    }
    wm resizable $w 0 0
    # Set up geometry for middle of screen:
    set x [winfo screenwidth $w]; set x [expr $x - 400]; set x [expr $x / 2]
    set y [winfo screenheight $w]; set y [expr $y - 20]; set y [expr $y / 2]
    wm geometry $w +$x+$y
    wm deiconify $w
    grab $w.b.cancel
    sc_progressBar $w.c1 bar 401 21 time
    busyCursor .
  }
  set newTreeData [sc_tree search -time 0 -epd 0]
  if {$showProgress} {
    if {$::optable::_interrupt} {
      unbusyCursor .
      grab release $w.b.cancel
      destroy $w
      return
    }
    sc_progressBar $w.c2 bar 401 21 time
  }
  sc_report opening create $::optable(ExtraMoves) $::optable(MaxGames) $::optable::_data(exclude)
  if {$showProgress} {
    unbusyCursor .
    grab release $w.b.cancel
    destroy $w
    if {$::optable::_interrupt} { return }
  }
  
  set ::optable::_data(tree) $newTreeData
  ::optable::latexifyTree
  set ::optable::_data(bdLaTeX) [sc_pos tex]
  set ::optable::_data(bdHTML) [sc_pos html]
  set ::optable::_data(bdLaTeX_flip) [sc_pos tex flip]
  set ::optable::_data(bdHTML_flip) [sc_pos html -flip 1]
  
  ::optable::setupRatios
  
  set report [::optable::report ctext 1]
  
  if {[lsearch -exact $args "-nodisplay"] >= 0} { return }
  
  set w .oprepWin
  if {![winfo exists $w]} {
    ::createToplevel $w
    ::setTitle $w "[tr ToolsOpReport]"
    menu $w.menu
    ::setMenu $w $w.menu
    
    $w.menu add cascade -label OprepFile -menu $w.menu.file
    $w.menu add cascade -label OprepFavorites -menu $w.menu.favorites
    $w.menu add cascade -label OprepHelp -menu $w.menu.helpmenu
    foreach i {file favorites helpmenu} {
      menu $w.menu.$i -tearoff 0
    }
    
    $w.menu.file add command -label OprepFileText \
        -command {::optable::saveReport text}
    $w.menu.file add command -label OprepFileHtml \
        -command {::optable::saveReport html}
    $w.menu.file add command -label OprepFileLaTeX \
        -command {::optable::saveReport latex}
    $w.menu.file add separator
    $w.menu.file add command -label OprepFileOptions \
        -command ::optable::setOptions
    $w.menu.file add separator
    $w.menu.file add command -label OprepFileClose \
        -command "$w.b.close invoke"
    $w.menu.favorites add command -label OprepFavoritesAdd \
        -command ::optable::addFavoriteDlg
    $w.menu.favorites add command -label OprepFavoritesEdit \
        -command ::optable::editFavoritesDlg
    $w.menu.favorites add command -label OprepFavoritesGenerate \
        -command ::optable::generateFavoriteReports
    $w.menu.favorites add separator
    $w.menu.helpmenu add command -label OprepHelpReport \
        -accelerator F1 -command {helpWindow Reports Opening}
    $w.menu.helpmenu add command -label OprepHelpIndex \
        -command {helpWindow Index}
    
    ::optable::updateFavoritesMenu
    
    bind $w <F1> {helpWindow Reports Opening}
    bind $w <Escape> "$w.b.close invoke"
    bind $w <Up> "$w.text yview scroll -1 units"
    bind $w <Down> "$w.text yview scroll 1 units"
    bind $w <Prior> "$w.text yview scroll -1 pages"
    bind $w <Next> "$w.text yview scroll 1 pages"
    bind $w <Key-Home> "$w.text yview moveto 0"
    bind $w <Key-End> "$w.text yview moveto 0.99"
    bindMouseWheel $w $w.text
    
    text $w.text -height 30 -width 85 -font font_Small -setgrid 1 \
        -wrap word -bg white -foreground black -yscrollcommand "$w.ybar set" \
        -cursor top_left_arrow
    ::htext::init $w.text
    scrollbar $w.ybar -command "$w.text yview"
    frame $w.b
    button $w.b.previewLaTeX -textvar ::tr(OprepViewLaTeX) \
        -command ::optable::previewLaTeX
    button $w.b.previewHTML -textvar ::tr(OprepViewHTML) \
        -command ::optable::previewHTML
    button $w.b.opts -text [tr OprepFileOptions] -command ::optable::setOptions
    label $w.b.lexclude -text "Exclude:"
    menubutton $w.b.exclude -textvar ::optable::_data(exclude) \
        -indicatoron 1 -relief raised -bd 2 -menu $w.b.exclude.m -padx 1
    menu $w.b.exclude.m -tearoff 0
    button $w.b.update -textvar ::tr(Update) -command {
      set ::optable::_data(yview) [lindex [.oprepWin.text yview] 0]
      ::optable::makeReportWin
      .oprepWin.text yview moveto $::optable::_data(yview)
    }
    
    button $w.b.mergeGames -textvar ::tr(MergeGames) -command ::optable::mergeGames
    button $w.b.help -textvar ::tr(Help) -command {helpWindow Reports Opening}
    button $w.b.close -textvar ::tr(Close) -command "focus .; destroy $w"
    pack $w.b -side bottom -fill x
    pack $w.ybar -side right -fill y
    pack $w.text -side left -fill both -expand yes
    pack $w.b.close $w.b.update -side right -padx 1 -pady 2
    if {! $::windowsOS} {
      pack $w.b.previewLaTeX -side left -padx 1 -pady 2
    } else {
      pack $w.b.previewHTML -side left -padx 1 -pady 2
    }
    pack $w.b.opts $w.b.lexclude $w.b.exclude $w.b.mergeGames -side left -padx 1 -pady 2
    ::optable::ConfigMenus
    ::utils::win::Centre $w
    ::createToplevelFinalize $w
  }
  
  catch {destroy $w.text.bd}
  
  set old_showMaterial $::gameInfo(showMaterial)
  set ::gameInfo(showMaterial) 0
  ::board::new $w.text.bd 30
  
  if {$::optable::_flip} { ::board::flip $w.text.bd }
  $w.text.bd configure -relief solid -borderwidth 1
  for {set i 0} {$i < 63} {incr i} {
    ::board::bind $w.text.bd $i <ButtonPress-1> ::optable::flipBoard
    #::board::bind $w.text.bd $i <ButtonPress-$::MB3> ::optable::resizeBoard
  }
  ::board::update $w.text.bd [sc_pos board]
  $w.b.exclude.m delete 0 end
  $w.b.exclude.m add radiobutton -label "---" -variable ::optable::_data(exclude) -command "$w.b.update invoke"
  foreach move $::optable::_data(moves) {
    $w.b.exclude.m add radiobutton -label $move -variable ::optable::_data(exclude) -command "$w.b.update invoke"
  }
  if {[lsearch $::optable::_data(moves) $::optable::_data(exclude)] < 0} {
    set ::optable::_data(exclude) "---"
  }
  busyCursor .
  $w.text configure -state normal
  $w.text delete 1.0 end
  regsub -all "\n" $report "<br>" report
  ::htext::display $w.text $report
  $w.text configure -state disabled
  unbusyCursor .
  ::windows::gamelist::Refresh
  ::windows::stats::Refresh
  set ::gameInfo(showMaterial) $old_showMaterial
  
}
################################################################################
# merges the N best games up to P plies to current game
################################################################################
proc ::optable::mergeGames { {game_count 50} {ply 999} } {
  set base  $::optable::opReportBase
  set games [split [sc_report opening best a $game_count] "\n"]
  foreach g $games {
    if {$g == "" } { continue }
    set res [scan $g "%d:  <g_%d>" d1 game_number]
    if {$res != 2} {
      if {[info exists game_number]} {
        tk_messageBox -title "Scid: Error writing report" -type ok -icon warning -message "Error merging game $game_number"
      } else  {
        tk_messageBox -title "Scid: Error writing report" -type ok -icon warning -message "Error merging game"
      }
      break
    }
    set err [ catch { sc_game merge $base $game_number $ply } result ]
    if {$err} {
      tk_messageBox -title "Scid" -type ok -icon info -message "Unable to merge the selected game:\n$result"
      break
    }
  }
  updateBoard -pgn
}
################################################################################
#
################################################################################

proc ::optable::flipBoard {} {
  set old_showMaterial $::gameInfo(showMaterial)
  set ::gameInfo(showMaterial) 0
  ::board::flip .oprepWin.text.bd
  set ::optable::_flip [::board::isFlipped .oprepWin.text.bd]
  set ::gameInfo(showMaterial) $old_showMaterial
}

proc ::optable::resizeBoard {} {
  set bd .oprepWin.text.bd
  set size [::board::size $bd]
  if {$size >= 40} { set size 25 } else { incr size 5 }
  ::board::resize $bd $size
}

proc ::optable::setOptions {} {
  set w .oprepOptions
  if {[winfo exists $w]} { return }
  toplevel $w
  pack [frame $w.f] -side top -fill x -padx 5 -pady 5
  set row 0
  foreach i {Stats Popular AvgPerf Results MovesFrom Themes Endgames} {
    set yesno($i) 1
  }
  set left 0
  set right 1
  foreach i {Stats Oldest Newest Popular MostFrequent sep \
        AvgPerf HighRating sep \
        Results Shortest col \
        MoveOrders MovesFrom Themes Endgames gap sep \
        MaxGames ExtraMoves sep} {
    set from 0; set to 10; set tick 1; set res 1
    
    if {$i == "col"} {
      incr left 4
      frame $w.f.colsep$left -width 8
      grid $w.f.colsep$left -row 0 -column $left
      incr left
      set right [expr {$left + 1}]
      set row 0
    } elseif {$i == "gap"} {
      # nothing
    } elseif {$i == "sep"} {
      frame $w.f.fsep$row$left -height 2 -borderwidth 2 -relief sunken -bg white
      frame $w.f.tsep$row$left -height 2 -borderwidth 2 -relief sunken -bg white
      grid $w.f.fsep$row$left -row $row -column $left -sticky we -columnspan 4
    } elseif {[info exists yesno($i)]} {
      checkbutton $w.f.f$i -variable ::optable($i) -onvalue 1 -offvalue 0
      label $w.f.t$i -textvar ::tr(Oprep$i) -font font_Small
      grid $w.f.f$i -row $row -column $left -sticky n
      grid $w.f.t$i -row $row -column $right -sticky w -columnspan 3
    } else {
      
      # Pascal Georges : changed combobox to spinbox to widen choices
      if {$i == "MaxGames"} {
        spinbox $w.f.s$i -textvariable ::optable($i) -from 0 -to 5000 -increment 50 \
            -state readonly -width 5 -justify right -font font_Small
      } else  {
        set tmpcombo {}
        for {set x $from} {$x <= $to} {incr x $res} {
          lappend tmpcombo $x
        }
        ttk::combobox $w.f.s$i -textvariable ::optable($i) -width 2 -height 11 -values $tmpcombo
      }
      
      label $w.f.t$i -textvar ::tr(Oprep$i) -font font_Small
      grid $w.f.s$i -row $row -column $left ;# -sticky e
      if {$i == "MostFrequent"  ||  $i == "Shortest"} {
        checkbutton $w.f.w$i -text $::tr(White) -font font_Small \
            -variable ::optable(${i}White)
        checkbutton $w.f.b$i -text $::tr(Black) -font font_Small \
            -variable ::optable(${i}Black)
        grid $w.f.t$i -row $row -column $right -sticky w
        grid $w.f.w$i -row $row -column 2
        grid $w.f.b$i -row $row -column 3
      } else {
        grid $w.f.t$i -row $row -column $right -sticky w -columnspan 3
      }
    }
    grid rowconfigure $w.f $row -pad 2
    if {$i != "col"} { incr row }
  }
  addHorizontalRule $w
  pack [frame $w.b] -side bottom -fill x
  dialogbutton $w.b.defaults -textvar ::tr(Defaults) -command {
    array set ::optable [array get ::optableDefaults]
  }
  dialogbutton $w.b.ok -text "OK" -command {
    destroy .oprepOptions
    catch {set ::optable::_data(yview) [lindex [.oprepWin.text yview] 0]}
    ::optable::makeReportWin
    catch {.oprepWin.text yview moveto $::optable::_data(yview)}
  }
  dialogbutton $w.b.cancel -textvar ::tr(Cancel) -command {
    array set ::optable [array get ::optable::backup]
    destroy .oprepOptions
  }
  packbuttons left $w.b.defaults
  packbuttons right $w.b.cancel $w.b.ok
  array set ::optable::backup [array get ::optable]
  wm resizable $w 0 0
  wm title $w  "Scid: [tr ToolsOpReport]: [tr OprepFileOptions]"
  bind $w <Escape> "$w.b.cancel invoke"
}

# previewLaTeX:
#   Saves the report to a temporary file, runs latex on it, then
#   "dvips" to produce PostScript, and "ghostview" to display it.
#
proc ::optable::previewLaTeX {} {
  busyCursor .
  set tmpdir $::scidLogDir
  set tmpfile "TempOpeningReport"
  set fname [file join $tmpdir $tmpfile]
  catch {exec /bin/sh -c "rm $fname.*" }
  if {[catch {set tempfile [open $fname.tex w]}]} {
    tk_messageBox -title "Scid: Error writing report" -type ok -icon warning \
        -message "Unable to write the file: $fname.tex"
  }
  # Add the "batchmode" command to the top of the file to prevent latex
  # pausing for input on errors:
  puts $tempfile "\\batchmode"
  puts $tempfile [::optable::report latex 1 $::optable::_flip]
  close $tempfile
  if {! [catch {exec /bin/sh -c "cd $tmpdir; latex '$tmpfile.tex'" >& /dev/null}]} {
    if {[catch {exec /bin/sh -c "cd $tmpdir; dvips '$tmpfile.dvi'" >& /dev/null}]} {
      tk_messageBox -title "Scid" -icon warning -type ok \
          -message "Unable to run \"dvips\" to convert the report to PostScript."
    } else {
      if {[catch {exec /bin/sh -c "ghostview '$fname.ps'" >& /dev/null &}]} {
        tk_messageBox -title "Scid" -icon warning -type ok \
            -message "Unable to run \"xdvi\" to view the report."
      }
    }
  } else {
    tk_messageBox -title "Scid: Errors producing report" -type ok \
        -icon warning \
        -message "Errors running latex on the file: $fname.tex\n\nSee $fname.log for details."
  }
  unbusyCursor .
}

# previewHTML:
#   Saves the report to a temporary file, and invokes the user's web
#   browser to display it.
#
proc ::optable::previewHTML {} {
  busyCursor .
  set tmpdir $::scidLogDir
  set tmpfile "TempOpeningReport"
  set fname [file join $tmpdir $tmpfile]
  if {[catch {set tempfile [open $fname.html w]}]} {
    tk_messageBox -title "Scid: Error writing report" -type ok -icon warning \
        -message "Unable to write the file: $fname.html"
  }
  puts $tempfile [::optable::report html 1 $::optable::_flip]
  close $tempfile
  if {[string match $::tcl_platform(os) "Windows NT"]} {
    catch {exec $::env(COMSPEC) /c start $fname.html &}
  } else {
    catch {exec start $fname.html &}
  }
  unbusyCursor .
}

# saveReport:
#   Saves the current opening report to a file.
#   "fmt" is the format: text, html or latex.
#   "type" is the report type: report, table, or both.
#
proc ::optable::saveReport {fmt} {
  set t [tk_dialog .dialog "Scid: Select report type" \
      "Select the report type. You may save a full report (which includes the theory table), a compact report (with no theory table), or just the theory table by itself." \
      "" 0 "Full report" "Compact report" \
      "Theory table" "Cancel"]
  if {$t == 3} { return }
  set default ".txt"
  set ftype {
    { "Text files" {".txt"} }
    { "All files"  {"*"}    }
  }
  if {$fmt == "latex"} {
    set default ".tex"
    set ftype {
      { "LaTeX files" {".tex" ".ltx"} }
      { "All files"  {"*"}    }
    }
  } elseif {$fmt == "html"} {
    set default ".html"
    set ftype {
      { "HTML files" {".html" ".htm"} }
      { "All files"  {"*"}    }
    }
  }
  
  set fname [tk_getSaveFile -initialdir [pwd] -filetypes $ftype \
      -defaultextension $default -title "Scid: Save opening report"]
  if {$fname == ""} { return }
  
  busyCursor .
  if {[catch {set tempfile [open $fname w]}]} {
    tk_messageBox -title "Scid: Error writing report" -type ok -icon warning \
        -message "Unable to write the file: $fname\n\n"
  } else {
    if {$t == 2} {
      set report [::optable::table $fmt]
    } elseif {$t == 1} {
      set report [::optable::report $fmt 0 $::optable::_flip]
    } else {
      set report [::optable::report $fmt 1 $::optable::_flip]
    }
    if {$::hasEncoding  &&  $::langEncoding($::language) != ""} {
      catch {set report [encoding convertto $::langEncoding($::language) $report]}
    }
    puts $tempfile $report
    close $tempfile
  }
  unbusyCursor .
}

proc ::optable::create {} {
  set ::optable::_data(tree) [sc_tree search -time 0 -epd 0]
  ::optable::latexifyTree
  set ::optable::_data(bdLaTeX) [sc_pos tex]
  set ::optable::_data(bdHTML) [sc_pos html]
  set ::optable::_data(bdLaTeX_flip) [sc_pos tex flip]
  set ::optable::_data(bdHTML_flip) [sc_pos html -flip 1]
  sc_report opening create $::optable(ExtraMoves) $::optable(MaxGames)
  ::optable::setupRatios
}

# latexifyTree
#   Convert the plain text tree output used for text/html reports
#   to a table for LaTeX output.
#
proc ::optable::latexifyTree {} {
  set ::optable::_data(moves) {}
  if {! [info exists ::optable::_data(tree)]} { return }
  set tree [split $::optable::_data(tree) "\n"]
  set ltree "\\begin{tabular}{rllr@{:}rrrrrr}\n\\hline\n"
  append ltree " & Move & ECO & \\multicolumn{2}{c}{Frequency}"
  append ltree " & Score & \$\\mu\$Elo & Perf & \$\\mu\$Year & \\% Draws \\\\ \n"
  append ltree "\\hline\n"
  set len [llength $tree]
  set done 0
  for {set i 1} {$i < $len} {incr i} {
    set line [lindex $tree $i]
    if {[string index $line 0] == "_"} {
      append ltree "\\hline\n"
      continue
    }
    if {[string length $line] == 0} { continue }
    set num    [string range $line  0  1]
    set move   [string range $line  4  9]
    set eco    [string range $line 11 15]
    set freq   [string range $line 17 23]
    set fpct   [string range $line 25 29]
    set score  [string range $line 33 37]
    set avElo  [string range $line 41 44]
    set perf   [string range $line 47 50]
    set avYear [string range $line 53 56]
    set pctDraw [string range $line 59 61]
    set mv [string trim $move]
    regsub K $move {{\\K}} move
    regsub Q $move {{\\Q}} move
    regsub R $move {{\\R}} move
    regsub B $move {{\\B}} move
    regsub N $move {{\\N}} move
    if {[string index $line 0] == "T"} {
      append ltree "\\multicolumn{2}{l}{Total}"
    } else {
      append ltree " $num & $move "
      lappend ::optable::_data(moves) $mv
    }
    append ltree " & $eco & $freq & $fpct\\% & $score\\%"
    append ltree " & $avElo & $perf & $avYear & $pctDraw\\% \\\\ \n"
  }
  append ltree "\\hline\n"
  append ltree "\\end{tabular}\n"
  set ::optable::_data(latexTree) $ltree
}

proc ::optable::setupRatios {} {
  set r [sc_filter freq [sc_base current] tree date 0000.00.00]
  if {[lindex $r 0] == 0} {
    set ::optable::_data(ratioAll) 0
  } else {
    set ::optable::_data(ratioAll) \
        [expr {int(double([lindex $r 1]) / double([lindex $r 0]))} ]
  }
  foreach {start end} {1800 1899  1900 1949  1950 1969  1970 1979
    1980 1989 1990 1999 2000 2009} {
    set r [sc_filter freq [sc_base current] tree date $start.00.00 $end.12.31]
    set filter [lindex $r 0]
    set all [lindex $r 1]
    if {$filter == 0} {
      set ::optable::_data(range$start) "---"
    } else {
      set ::optable::_data(range$start) \
          [expr {int(double($all) / double($filter))} ]
    }
  }
  foreach y {1 5 10} {
    set year "[expr [::utils::date::today year]-$y]"
    append year ".[::utils::date::today month].[::utils::date::today day]"
    set r [sc_filter freq [sc_base current] tree date $year]
    set filter [lindex $r 0]
    set all [lindex $r 1]
    if {$filter == 0} {
      set ::optable::_data(ratio$y) 0
    } else {
      set ::optable::_data(ratio$y) \
          [expr {int(double($all) / double($filter))} ]
    }
    if {$::optable::_data(ratio$y) == 0} {
      set r 1.0
    } else {
      set r [expr {double($::optable::_data(ratioAll))} ]
      set r [expr {$r / double($::optable::_data(ratio$y))} ]
    }
    set ::optable::_data(delta$y) [expr {int(($r - 1.0) * 100.0 + 0.5)} ]
  }
}

proc ::optable::_percent {x fmt} {
  set p "%"
  if {$fmt == "latex"} { set p "\\%" }
  return "[expr $x / 10][sc_info decimal][expr $x % 10]$p"
}

proc ::optable::results {reportType fmt} {
  set s {}
  set n "\n"; set next " "; set p "%"
  set white "1-0"; set draw "=-="; set black "0-1"
  
  if {$fmt == "latex"} {
    set next " & "; set n "\\\\\n"; set p "\\%"
    set white "\\win"; set draw "\\draw"; set black "\\loss"
    append s "\\begin{tabular}{lccccccc}\n"
  }
  
  if {$fmt == "html"} { append s "<pre>\n" }
  if {$fmt == "ctext"} { append s "<tt>" }
  if {$fmt == "latex"} { append s "\\hline\n" }
  
  set lenReport [string length $::tr(OprepReportGames)]
  set lenAll [string length $::tr(OprepAllGames)]
  set len [expr {($lenReport > $lenAll) ? $lenReport : $lenAll} ]
  set score [::utils::string::Capital $::tr(score)]
  set slen [string length $score]
  if {$slen < 7} { set slen 7 }
  
  append s " [::utils::string::Pad {} $len] $next"
  append s "[::utils::string::PadRight $score $slen] $next"
  if {$fmt == "latex"} {
    append s "\\multicolumn{3}{c}{$::tr(OprepLength)} & "
    append s "\\multicolumn{3}{c}{$::tr(OprepFrequency)} $n "
  } else {
    append s "[::utils::string::PadCenter $::tr(OprepLength) 19] $next"
    append s "[::utils::string::PadCenter $::tr(OprepFrequency) 22] $n"
  }
  
  append s " [::utils::string::Pad {} $len] $next"
  append s "[::utils::string::PadRight {} $slen] $next"
  append s "[::utils::string::PadRight $white 5] $next"
  append s "[::utils::string::PadRight $draw  5] $next"
  append s "[::utils::string::PadRight $black 5] $next"
  append s "[::utils::string::PadRight $white 5]  $next"
  append s "[::utils::string::PadRight $draw  5]  $next"
  append s "[::utils::string::PadRight $black 5]  $n"
  if {$fmt == "latex"} { append s "\\hline\n" }
  
  set sc [sc_report $reportType score]
  set wlen [sc_report $reportType avgLength 1]
  set dlen [sc_report $reportType avgLength =]
  set blen [sc_report $reportType avgLength 0]
  set wf [sc_report $reportType freq 1]
  set df [sc_report $reportType freq =]
  set bf [sc_report $reportType freq 0]
  
  append s " [::utils::string::Pad $::tr(OprepReportGames) $len] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $sc 0] $fmt] $slen] $next"
  append s "[::utils::string::PadRight [lindex $wlen 0] 5] $next"
  append s "[::utils::string::PadRight [lindex $dlen 0] 5] $next"
  append s "[::utils::string::PadRight [lindex $blen 0] 5] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $wf 0] $fmt] 6] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $df 0] $fmt] 6] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $bf 0] $fmt] 6] $n"
  
  append s " [::utils::string::Pad $::tr(OprepAllGames) $len] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $sc 1] $fmt] $slen] $next"
  append s "[::utils::string::PadRight [lindex $wlen 1] 5] $next"
  append s "[::utils::string::PadRight [lindex $dlen 1] 5] $next"
  append s "[::utils::string::PadRight [lindex $blen 1] 5] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $wf 1] $fmt] 6] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $df 1] $fmt] 6] $next"
  append s "[::utils::string::PadRight [::optable::_percent [lindex $bf 1] $fmt] 6] $n"
  
  if {$fmt == "latex"} { append s "\\hline\n\\end{tabular}\n" }
  if {$fmt == "html"} { append s "</pre>\n" }
  if {$fmt == "ctext"} { append s "</tt>" }
  
  return $s
}

proc ::optable::stats {fmt} {
  global stats
  set s {}
  set all $::tr(OprepStatAll)
  set both $::tr(OprepStatBoth)
  set since $::tr(OprepStatSince)
  set games [::utils::string::Capital $::tr(games)]
  set score [::utils::string::Capital $::tr(score)]
  
  set alen [string length $all]
  set blen [expr {[string length $both] + 6} ]
  set slen [expr {[string length $since] + 11} ]
  set len $alen
  if {$len < $blen} { set len $blen }
  if {$len < $slen} { set len $slen }
  
  set ratings 0
  set years 0
  set rlist [lsort -decreasing [array names stats r*]]
  set ylist [lsort [array names stats y*]]
  foreach i $rlist { if {$stats($i)} { set ratings 1 } }
  foreach i $ylist { if {$stats($i)} { set years 1 } }
  
  if {$fmt == "latex"} {
    append s "\\begin{tabular}{l r r r r r @{.} l}\n\\hline\n"
    append s "       & $games & \\win & \\draw & \\loss & "
    append s "\\multicolumn{2}{c}{$score} \\tspace \\\\ \\hline \n"
    scan [sc_filter stats all] "%u%u%u%u%u%\[.,\]%u" g w d l p c x
    append s "$all & $g & $w & $d & $l & $p&$x\\% \\\\\n"
    
    if {$ratings} {
      append s "\\hline\n"
      foreach i $rlist {
        if {$stats($i)} {
          set elo [string range $i 1 end]
          scan [sc_filter stats elo $elo] "%u%u%u%u%u%\[.,\]%u" g w d l p c x
          append s "$both $elo+ & $g & $w & $d & $l & $p&$x\\% \\\\\n"
        }
      }
    }
    if {$years} {
      append s "\\hline\n"
      foreach i $ylist {
        if {$stats($i)} {
          set year [string range $i 1 end]
          scan [sc_filter stats year $year] "%u%u%u%u%u%\[.,\]%u" g w d l p c x
          append s "$since $year.01.01 & $g & $w & $d & $l & $p&$x\\% \\\\\n"
        }
      }
    }
    append s "\\hline\n\\end{tabular}\n"
    return $s
  }
  
  # For non-LaTeX format, just display in plain text:
  if {$fmt == "html"} { append s "<pre>\n" }
  if {$fmt == "ctext"} { append s "<tt>" }
  set stat ""
  append s " [::utils::string::Pad $stat [expr $len - 4]] [::utils::string::PadRight $games 10]"
  append s "     1-0     =-=     0-1 [::utils::string::PadRight $score 8]\n"
  append s "-----------------------------------------------------------"
  append s "\n [::utils::string::Pad $all $len]"     [sc_filter stats all]
  
  if {$ratings} {
    append s "\n"
    foreach i $rlist {
      if {$stats($i)} {
        set elo [string range $i 1 end]
        set stat "$both $elo+"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats elo $elo]
      }
    }
  }
  if {$years} {
    append s "\n"
    foreach i $ylist {
      if {$stats($i)} {
        set year [string range $i 1 end]
        set stat "$since $year.01.01"
        append s "\n [::utils::string::Pad $stat $len]"   [sc_filter stats year $year]
      }
    }
  }
  append s "\n-----------------------------------------------------------\n"
  if {$fmt == "html"} { append s "</pre>\n" }
  if {$fmt == "ctext"} { append s "</tt>" }
  return $s
}

proc ::optable::_reset {} {
  set ::optable::_data(sec) 0
  set ::optable::_data(subsec) 0
}

proc ::optable::_title {} {
  set fmt $::optable::_data(fmt)
  set title $::tr(OprepTitle)
  if {$fmt == "latex"} {
    return "\\begin{center}{\\LARGE \\bf $title}\\end{center}\n\n"
  } elseif {$fmt == "html"} {
    return "<h1><center>$title</center></h1>\n\n"
  } elseif {$fmt == "ctext"} {
    return "<h1><center>$title</center></h1>\n\n"
  }
  set r    "--------------------------------------------------------------"
  append r "\n                        [string toupper $title]\n"
  append r "--------------------------------------------------------------"
  append r "\n\n"
  return $r
}

proc ::optable::_sec {text} {
  set fmt $::optable::_data(fmt)
  incr ::optable::_data(sec)
  set ::optable::_data(subsec) 0
  if {$fmt == "latex"} {
    return "\n\n\\section{$text}\n"
  } elseif {$fmt == "html"} {
    return "\n<h2>$::optable::_data(sec). $text</h2>\n"
  } elseif {$fmt == "ctext"} {
    return "<h4>$::optable::_data(sec). $text</h4>"
  }
  set line "$::optable::_data(sec). [string toupper $text]"
  set underline "-----------------------------------------------------"
  return "\n\n$line\n[string range $underline 1 [string length $line]]\n"
}

proc ::optable::_subsec {text} {
  set fmt $::optable::_data(fmt)
  incr ::optable::_data(subsec)
  if {$fmt == "latex"} {
    return "\n\\subsection{$text}\n\n"
  } elseif {$fmt == "html"} {
    return "\n<h3>$::optable::_data(sec).$::optable::_data(subsec) $text</h3>\n\n"
  } elseif {$fmt == "ctext"} {
    return "\n<maroon><b>$::optable::_data(sec).$::optable::_data(subsec) $text</b></maroon>\n\n"
  }
  return "\n$::optable::_data(sec).$::optable::_data(subsec)  $text\n\n"
}
################################################################################
# report:
#   Produces a report in the appropriate format. If "withTable" is true,
#   the theory table is also included.
################################################################################
proc ::optable::report {fmt withTable {flipPos 0}} {
  global tr
  sc_report opening format $fmt
  set fmt [string tolower $fmt]
  set ::optable::_data(fmt) $fmt
  ::optable::_reset
  
  # numRows: the number of rows to show in the theory table.
  # If it is zero, the number of rows if decided according to the
  # number of games in the report.
  set numRows 0
  
  # Specify whether a theory table is to be printed, so note numbers
  # can be generated and displayed if necessary:
  sc_report opening notes $withTable $numRows
  
  set n "\n"; set p "\n\n"; set preText ""; set postText ""
  set percent "%"; set bullet "  * "
  if {$fmt == "latex"} {
    set n "\\\\\n"; set p "\n\n"
    #set preText "{\\samepage\\begin{verbatim}\n"
    #set postText "\\end{verbatim}\n}\n"
    set percent "\\%"; set bullet "\\hspace{0.5cm}\$\\bullet\$"
  } elseif {$fmt == "html"} {
    set n "<br>\n"; set p "<p>\n\n"
    set preText "<pre>\n"; set postText "</pre>\n"
  } elseif {$fmt == "ctext"} {
    set preText "<tt>"; set postText "</tt>"
  }
  
  # Generate the report:
  set games $tr(games)
  set moves $tr(moves)
  set counts [sc_report opening count]
  set rgames [lindex $counts 0]
  set tgames [lindex $counts 1]
  
  set r {}
  append r $::optable::_docStart($fmt)
  set title $::tr(OprepTitle)
  set r [string map [list "\[OprepTitle\]" $title] $r]
  append r [::optable::_title]
  append r "$tr(Database): [file tail [sc_base filename]] "
  append r "([::utils::thousands [sc_base numGames]] $games)$n"
  append r "$tr(OprepReport): [::trans [sc_report opening line]] ("
  if {$fmt == "ctext"} {
    append r "<darkblue><run sc_report opening select all 0; ::windows::stats::Refresh>"
  }
  append r "$rgames"
  if {$fmt == "ctext"} { append r "</run></darkblue>"; }
  append r " $games)$n"
  set eco [sc_report opening eco]
  if {$eco != ""} {
    append r "$tr(ECO): $eco$n"
  }
  
  append r "$::tr(OprepGenerated) Scid [sc_info version], [::utils::date::today]\n"
  if {$fmt == "latex"} {
    if {$flipPos} {
      append r $::optable::_data(bdLaTeX_flip)
    } else {
      append r $::optable::_data(bdLaTeX)
    }
    append r {$$\showboard$$}
  } elseif {$fmt == "html"} {
    if {$flipPos} {
      append r $::optable::_data(bdHTML_flip)
    } else {
      append r $::optable::_data(bdHTML)
    }
  } elseif {$fmt == "ctext"} {
    append r "\n<center><window .oprepWin.text.bd></center>\n"
  }
  if {$rgames == 0} {
    append r $::optable::_docEnd($fmt)
    return $r
  }
  
  if {$::optable(Stats) > 0  ||
    $::optable(Oldest) > 0  ||
    $::optable(Newest) > 0  ||
    $::optable(Popular) > 0  ||
    ($::optable(MostFrequent) > 0 &&
    ($::optable(MostFrequentWhite) || $::optable(MostFrequentBlack)))} {
    append r [::optable::_sec $tr(OprepStatsHist)]
  }
  if {$::optable(Stats)} {
    append r [::optable::_subsec $tr(OprepStats)]
    append r [::optable::stats $fmt]
  }
  if {$::optable(Oldest) > 0} {
    append r [::optable::_subsec $tr(OprepOldest)]
    append r [sc_report opening best o $::optable(Oldest)]
  }
  if {$::optable(Newest) > 0} {
    append r [::optable::_subsec $tr(OprepNewest)]
    append r [sc_report opening best n $::optable(Newest)]
  }
  
  if {$::optable(Popular) > 0} {
    append r [::optable::_subsec $tr(OprepPopular)]
    set next ""
    if {$fmt == "latex"} { set next " & " }
    
    # A table showing popularity by year ranges:
    if {$fmt == "latex"} {
      append r "\\begin{tabular}{lccccccc}\n\\hline\n"
    } else {
      append r $preText
    }
    
    set sYear $tr(Year)
    set sEvery [::utils::string::Capital $tr(OprepEvery)]
    regsub "%u" $sEvery X sEvery
    set len [string length $sYear]
    if {[string length $sEvery] > $len} { set len [string length $sEvery] }
    append r [::utils::string::Pad $tr(Year) $len]
    foreach range {1800-99 1900-49 1950-69 1970-79 1980-89 1990-99 2000-09} {
      append r $next
      append r [::utils::string::PadCenter $range 8]
    }
    
    append r $n
    append r [::utils::string::Pad $sEvery $len]
    foreach y {1800 1900 1950 1970 1980 1990 2000} {
      append r $next
      append r [::utils::string::PadCenter $::optable::_data(range$y) 8]
    }
    append r $n
    if {$fmt == "latex"} {
      append r "\\hline\n\\end{tabular}\n"
    } else {
      append r $postText
    }
    
    append r "\n"
    
    # A table showing popularity in the last 1/5/10 years:
    if {$fmt == "latex"} {
      append r "\\begin{tabular}{lrr}\n"
    }
    
    foreach y {All 10 5 1} {
      if {$fmt == "ctext"} { append r "<tt>" }
      append r $tr(OprepFreq$y)
      if {$fmt == "ctext"} { append r "</tt>" }
      append r $next
      append r [format $tr(OprepEvery) $::optable::_data(ratio$y)]
      if {$y != "All"} {
        append r $next
        set d $::optable::_data(delta$y)
        if {$d > 0} {
          append r " ([format $tr(OprepUp) $d $percent])"
        } elseif {$d < 0} {
          append r " ([format $tr(OprepDown) [expr 0- $d] $percent])"
        } else {
          append r " ($tr(OprepSame))"
        }
      }
      append r "$n"
    }
    if {$fmt == "latex"} {
      append r "\\end{tabular}\n"
    }
  }
  
  if {$::optable(MostFrequent) > 0  &&  $::optable(MostFrequentWhite)} {
    append r [::optable::_subsec "$tr(OprepMostFrequent) ($tr(White))"]
    append r [sc_report opening players white $::optable(MostFrequent)]
  }
  if {$::optable(MostFrequent) > 0  &&  $::optable(MostFrequentBlack)} {
    append r [::optable::_subsec "$tr(OprepMostFrequent) ($tr(Black))"]
    append r [sc_report opening players black $::optable(MostFrequent)]
  }
  
  if {$::optable(AvgPerf)  ||  $::optable(HighRating)} {
    append r [::optable::_sec $tr(OprepRatingsPerf)]
  }
  if {$::optable(AvgPerf)} {
    append r [::optable::_subsec $tr(OprepAvgPerf)]
    set e [sc_report opening elo white]
    set welo [lindex $e 0]; set wng [lindex $e 1]
    set bpct [lindex $e 2]; set bperf [lindex $e 3]
    set e [sc_report opening elo black]
    set belo [lindex $e 0]; set bng [lindex $e 1]
    set wpct [lindex $e 2]; set wperf [lindex $e 3]
    append r "$tr(OprepWRating): $welo ($wng $games);  "
    append r "$tr(OprepWPerf): $wperf ($wpct$percent vs $belo)$n"
    append r "$tr(OprepBRating): $belo ($bng $games);  "
    append r "$tr(OprepBPerf): $bperf ($bpct$percent vs $welo)$n"
  }
  
  if {$::optable(HighRating) > 0} {
    append r [::optable::_subsec $tr(OprepHighRating)]
    append r [sc_report opening best a $::optable(HighRating)]
  }
  
  if {$::optable(Results)  ||
    ($::optable(Shortest) > 0  &&
    ($::optable(ShortestBlack) || $::optable(ShortestBlack)))} {
    append r [::optable::_sec $tr(OprepTrends)]
  }
  
  if {$::optable(Results)} {
    append r [::optable::_subsec $::tr(OprepResults)]
    append r [::optable::results opening $fmt]
  }
  
  if {$::optable(Shortest) > 0  &&  $::optable(ShortestWhite)} {
    append r [::optable::_subsec "$tr(OprepShortest) ($tr(White))"]
    append r [sc_report opening best w $::optable(Shortest)]
  }
  if {$::optable(Shortest) > 0  &&  $::optable(ShortestBlack)} {
    append r [::optable::_subsec "$tr(OprepShortest) ($tr(Black))"]
    append r [sc_report opening best b $::optable(Shortest)]
  }
  
  if {$::optable(MoveOrders) > 0  ||
    $::optable(MovesFrom) > 0  ||
    $::optable(Themes) > 0  ||
    $::optable(Endgames) > 0} {
    append r [::optable::_sec $tr(OprepMovesThemes)]
  }
  if {$::optable(MoveOrders) > 0} {
    append r [::optable::_subsec $tr(OprepMoveOrders)]
    set nOrders [sc_report opening moveOrders 0]
    set maxOrders $::optable(MoveOrders)
    if {$nOrders == 1} {
      append r $tr(OprepMoveOrdersOne)
    } elseif {$nOrders <= $maxOrders} {
      append r [format $tr(OprepMoveOrdersAll) $nOrders]
    } else {
      append r [format $tr(OprepMoveOrdersMany) $nOrders $maxOrders]
    }
    append r $n
    append r [::trans [sc_report opening moveOrders $maxOrders]]
  }
  if {$::optable(MovesFrom)} {
    append r [::optable::_subsec $tr(OprepMovesFrom)]
    if {$fmt == "latex"} {
      append r $::optable::_data(latexTree)
    } else {
      append r $preText
      append r $::optable::_data(tree)
      append r $postText
    }
  }
  
  if {$::optable(Themes) > 0} {
    append r [::optable::_subsec $tr(OprepThemes)]
    append r [sc_report opening themes $tr(OprepThemeDescription:) \
        $tr(OprepThemeSameCastling:) $tr(OprepThemeOppCastling:) \
        $tr(OprepThemeKPawnStorm:) $tr(OprepThemeQueenswap:) \
        $tr(OprepTheme1BishopPair:) \
        $tr(OprepThemeWIQP:) $tr(OprepThemeBIQP:) \
        $tr(OprepThemeWP567:) $tr(OprepThemeBP234:) \
        $tr(OprepThemeOpenCDE:) ]
  }
  
  if {$::optable(Endgames) > 0} {
    append r [::optable::_subsec $tr(OprepEndgames)]
    append r "$tr(OprepEndClass:)$n"
    append r [sc_report opening endmat]
  }
  
  if {$withTable  &&  $::optable(MaxGames) > 0} {
    set sec [::optable::_sec $tr(OprepTheoryTable)]
    set comment ""
    if {$tgames > $::optable(MaxGames)} {
      set comment [format $tr(OprepTableComment) $::optable(MaxGames)]
    }
    append r [sc_report opening print $numRows $sec $comment]
    # puts [sc_report opening print $numRows $sec $comment]
  }
  
  append r $::optable::_docEnd($fmt)
  
  # Eszet (ss) characters seem to be mishandled by LaTeX, even with
  # the font encoding package, so convert them explicitly:
  if {$fmt == "latex"} { regsub -all ß $r {{\\ss}} r }
  
  return $r
}

# table:
#   Produces only the ECO table, not any other part of the report.
#
proc ::optable::table {fmt} {
  sc_report opening format $fmt
  set ::optable::_data(fmt) $fmt
  set r {}
  append r $::optable::_docStart($fmt)
  set r [string map [list "\[OprepTitle\]" $::tr(OprepTitle)] $r]
  append r [sc_report opening print]
  append r $::optable::_docEnd($fmt)
  return $r
}


set reportFavorites {}

# updateFavoritesMenu
#   Update the Favorites menu in the report window, adding a
#   command for each favorite report position.
#
proc ::optable::updateFavoritesMenu {} {
  set m .oprepWin.menu.favorites
  $m delete 3 end
  $m add separator
  foreach entry $::reportFavorites {
    set name [lindex $entry 0]
    set moves [lindex $entry 1]
    $m add command -label $name \
        -command "importMoveList [list $moves]; ::optable::makeReportWin"
  }
  if {[llength $::reportFavorites] == 0} {
    $m entryconfigure 1 -state disabled
    $m entryconfigure 2 -state disabled
  } else {
    $m entryconfigure 1 -state normal
    $m entryconfigure 2 -state normal
  }
}

# favoriteReportNames
#   Return a list of the favorite report names.
#
proc ::optable::favoriteReportNames {} {
  set reportNames {}
  foreach entry $::reportFavorites {
    lappend reportNames [lindex $entry 0]
  }
  return $reportNames
}

# addFavoriteDlg
#   Adds the current position to the opening report favorites list.
#
proc ::optable::addFavoriteDlg {} {
  set w .addFavoriteDlg
  toplevel $w
  wm title $w "Scid: Add Opening Report Favorite"
  label $w.name -text "Enter a name for the opening report of this position:"
  pack $w.name -side top
  # label $w.name2 -text "(Use letters, digits, spaces and undercores only)"
  # pack $w.name2 -side top
  entry $w.e -width 40
  pack $w.e -side top -fill x -padx 2
  addHorizontalRule $w
  label $w.old -text "Existing favorite report names:"
  pack $w.old -side top
  pack [frame $w.existing] -side top -fill x -padx 2
  text $w.existing.list -width 30 -height 10 -background gray90 \
      -yscrollcommand [list $w.existing.ybar set]
  scrollbar $w.existing.ybar -command [list $w.existing.list yview]
  pack $w.existing.ybar -side right -fill y
  pack $w.existing.list -side left -fill both -expand yes
  foreach entry $::reportFavorites {
    $w.existing.list insert end "[lindex $entry 0]\n"
  }
  $w.existing.list configure -state disabled
  addHorizontalRule $w
  frame $w.b
  pack $w.b -side bottom -fill x
  button $w.b.ok -text OK -command ::optable::addFavoriteOK
  button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
  focus $w.e
  grab $w
}

proc ::optable::addFavoriteOK {} {
  global reportFavorites
  set w .addFavoriteDlg
  set reportName [$w.e get]
  set err ""
  if {$reportName == ""} {
    set err "The report name must not be empty."
  } elseif {[lsearch -exact [::optable::favoriteReportNames] $reportName] >= 0} {
    set err "That name is already used for another favorite report position."
  } else {
    lappend reportFavorites [list $reportName [sc_game moves]]
    ::optable::saveFavorites
    ::optable::updateFavoritesMenu
    grab release $w
    destroy $w
    return
  }
  tk_messageBox -title Scid -icon info -type ok -message $err
}

set reportFavoritesName ""

# editFavoritesDlg
#   Open the dialog box for editing the list of opening report
#   favorite positions.
#
proc ::optable::editFavoritesDlg {} {
  global reportFavorites reportFavoritesTemp reportFavoritesName
  set w .editFavoritesDlg
  if {[winfo exists $w]} { return }
  
  set ::reportFavoritesTemp $::reportFavorites
  toplevel $w
  wm title $w "Scid: [tr OprepFavoritesEdit]"
  # wm transient $w .
  bind $w <F1> {helpWindow Reports Opening}
  entry $w.e -width 60 -foreground black -background white \
      -textvariable reportFavoritesName -font font_Small -exportselection 0
  bind $w.e <FocusIn>  "$w.e configure -background lightYellow"
  bind $w.e <FocusOut> "$w.e configure -background white"
  
  trace variable reportFavoritesName w ::optable::editFavoritesRefresh
  pack $w.e -side top -fill x
  pack [frame $w.b] -side bottom -fill x
  autoscrollframe $w.f listbox $w.f.list -width 50 -height 10 \
      -fg black -bg white -exportselection 0 -font font_Small -setgrid 1
  pack $w.f -side top -fill both -expand yes
  bind $w.f.list <<ListboxSelect>>  ::optable::editFavoritesSelect
  foreach entry $::reportFavoritesTemp {
    set name [lindex $entry 0]
    set moves [lindex $entry 1]
    $w.f.list insert end "$name \[$moves\]"
  }
  button $w.b.delete -text $::tr(Delete)  -command ::optable::editFavoritesDelete
  button $w.b.up -image tb_up -command {::optable::editFavoritesMove up}
  button $w.b.down -image tb_down -command {::optable::editFavoritesMove down}
  foreach i [list $w.b.up $w.b.down] {
    $i configure -padx 0 -pady 0 -borderwidth 1
  }
  button $w.b.ok -text "OK" -command ::optable::editFavoritesOK
  button $w.b.cancel -text "Cancel" -command {
    catch {grab release .editFavoritesDlg}
    destroy .editFavoritesDlg
  }
  pack $w.b.delete $w.b.up $w.b.down -side left -padx 2 -pady 2
  pack $w.b.cancel $w.b.ok -side right -padx 2 -pady 2
  set editFavoritesName ""
  
  wm withdraw $w
  update idletasks
  set x [expr {[winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \
        - [winfo vrootx .]}]
  set y [expr {[winfo screenheight $w]/2 - [winfo reqheight $w]/2 \
        - [winfo vrooty .]}]
  wm geom $w +$x+$y
  wm protocol $w WM_DELETE_WINDOW [list $w.b.cancel invoke]
  wm deiconify $w
  update
  catch {grab $w}
}

proc ::optable::editFavoritesRefresh {args} {
  global reportFavoritesTemp reportFavoritesName
  set list .editFavoritesDlg.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set name $reportFavoritesName
  set e [lindex $reportFavoritesTemp $sel]
  set moves [lindex $e 1]
  set e [lreplace $e 0 0 $name]
  set reportFavoritesTemp [lreplace $reportFavoritesTemp $sel $sel $e]
  $list insert $sel "$name \[$moves\]"
  $list delete [expr $sel + 1]
  $list selection clear 0 end
  $list selection set $sel
}

proc ::optable::editFavoritesSelect {} {
  set list .editFavoritesDlg.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} {
    set ::reportFavoritesName ""
    return
  }
  if {$sel >= [llength $::reportFavoritesTemp]} {
    $list selection clear 0 end
    set ::reportFavoritesName ""
    return
  }
  set e [lindex $::reportFavoritesTemp $sel]
  set ::reportFavoritesName [lindex $e 0]
}

proc ::optable::editFavoritesDelete {} {
  global reportFavoritesTemp
  set w .editFavoritesDlg
  set list $w.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set reportFavoritesTemp [lreplace $reportFavoritesTemp $sel $sel]
  $list selection clear 0 end
  $list delete $sel
  set ::reportFavoritesName ""
  
}

proc ::optable::editFavoritesMove {dir} {
  global reportFavoritesTemp
  set w .editFavoritesDlg
  set list $w.f.list
  set sel [lindex [$list curselection] 0]
  if {$sel == ""} { return }
  set e [lindex $reportFavoritesTemp $sel]
  set name [lindex $e 0]
  set moves [lindex $e 1]
  set text "$name \[$moves\]"
  
  set newsel $sel
  if {$dir == "up"} {
    incr newsel -1
    if {$newsel < 0} { return }
  } else {
    incr newsel
    if {$newsel >= [$list index end]} { return }
  }
  set reportFavoritesTemp [lreplace $reportFavoritesTemp $sel $sel]
  set reportFavoritesTemp [linsert $reportFavoritesTemp $newsel $e]
  $list selection clear 0 end
  $list delete $sel
  $list insert $newsel $text
  $list selection set $newsel
}

proc ::optable::editFavoritesOK {} {
  set w .editFavoritesDlg
  catch {grab release $w}
  destroy $w
  set ::reportFavorites $::reportFavoritesTemp
  ::optable::saveFavorites
  ::optable::updateFavoritesMenu
}

proc ::optable::favoritesFilename {} {
  return [scidConfigFile reports]
}

proc ::optable::saveFavorites {} {
  set fname [::optable::favoritesFilename]
  if {[catch {open $fname w} f]} {
    # tk_messageBox ...
    return
  }
  puts $f "# Scid opening report favorites file"
  puts $f ""
  puts $f "set reportFavorites [list $::reportFavorites]"
  close $f
}

proc ::optable::loadFavorites {} {
  global reportFavorites
  set fname [::optable::favoritesFilename]
  catch {source $fname}
}

::optable::loadFavorites

set reportFormat html
set reportType full

proc ::optable::generateFavoriteReports {} {
  global reportFavorites
  if {[llength $reportFavorites] == 0} {
    tk_messageBox -title "Scid" -type ok -icon info \
        -message "You have no favorite report positions."
    return
  }
  set ::reportDir $::initialDir(report)
  
  set w .reportFavoritesDlg
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: Generate Reports..."
  pack [label $w.typelabel -text "Select the report type:" -font font_Bold] -side top
  pack [frame $w.type] -side top -padx 2
  radiobutton $w.type.full -text "Full" -variable reportType -value full
  radiobutton $w.type.compact -text "Compact (no theory table)" -variable reportType -value compact
  radiobutton $w.type.theory -text "Theory table only" -variable reportType -value theory
  pack $w.type.full $w.type.compact $w.type.theory -side left -padx 4
  addHorizontalRule $w
  pack [label $w.fmtlabel -text "Select the report file format:" -font font_Bold] -side top
  pack [frame $w.fmt] -side top -padx 2
  radiobutton $w.fmt.text -text "Plain text (.txt)" -variable reportFormat -value text
  radiobutton $w.fmt.html -text "HTML" -variable reportFormat -value html
  radiobutton $w.fmt.latex -text "LaTeX" -variable reportFormat -value latex
  pack $w.fmt.text $w.fmt.html $w.fmt.latex -side left -padx 4
  addHorizontalRule $w
  pack [frame $w.dir] -side top -padx 2 -pady 2
  label $w.dir.label -text "Save reports in the folder: " -font font_Bold
  entry $w.dir.entry -background white -textvariable ::reportDir
  button $w.dir.choose -text $::tr(Browse...) -command {
    set tmpdir [tk_chooseDirectory -parent .reportFavoritesDlg \
        -title "Scid: Choose Report Folder"]
    if {$tmpdir != ""} {
      set ::reportDir [file nativename $tmpdir]
    }
  }
  pack $w.dir.label -side left
  pack $w.dir.choose -side right
  pack $w.dir.entry -side left -fill x
  addHorizontalRule $w
  pack [frame $w.b] -side bottom -fill x
  button $w.b.ok -text "OK"\
      -command "::optable::reportFavoritesOK; grab release $w; destroy $w; ::optable::makeReportWin"
  button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
  pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
  grab $w
}

proc ::optable::reportFavoritesOK {} {
  global reportDir reportFormat reportType
  set ::initialDir(report) $reportDir
  set fmt $reportFormat
  switch $reportFormat {
    "html" { set suffix ".html" }
    "text" { set suffix ".txt" }
    "latex" { set suffix "tex" }
  }
  
  set w .reportsProgress
  toplevel $w
  wm withdraw $w
  wm title $w "Scid: Generating Reports"
  bind $w <Visibility> "raiseWin $w"
  pack [label $w.t -width 40 -text "Generating reports. Please wait..." -font font_Bold] -side top -pady 5
  pack [label $w.report] -side top -pady 5
  ::utils::win::Centre $w
  wm deiconify $w
  grab $w
  update
  
  set count 0
  set total [llength $::reportFavorites]
  foreach entry $::reportFavorites {
    set name [lindex $entry 0]
    set moves [lindex $entry 1]
    set fname [file join $reportDir "$name$suffix"]
    if {[catch {open $fname w} f]} {
      tk_messageBox -title "Scid" -icon warning -type ok \
          -message "Unable to write file: $fname\n$f"
      grab release $w
      destroy $w
      return
    }
    incr count
    $w.report configure -text "$count / $total: $name$suffix"
    update
    sc_game push
    sc_move addSan $moves
    ::optable::makeReportWin -nodisplay -noprogress
    if {$reportType == "theory"} {
      set report [::optable::table $fmt]
    } elseif {$reportType == "compact"} {
      set report [::optable::report $fmt 0 $::optable::_flip]
    } else {
      set report [::optable::report $fmt 1 $::optable::_flip]
    }
    if {$::hasEncoding  &&  $::langEncoding($::language) != ""} {
      catch {set report [encoding convertto $::langEncoding($::language) $report]}
    }
    sc_game pop
    puts $f $report
    close $f
  }
  grab release $w
  destroy $w
}

# end of optable.tcl
# preport.tcl: Player reports.
# Part of Scid. Copyright 2003 Shane Hudson

namespace eval ::preport {}
array set ::preport::_data {}

set preport(MaxGames) 400

set ::preport::_player ""
set ::preport::_color white
set ::preport::_pos start
set ::preport::_clipbase 0

# preportDlg
#   Present a dialog allowing the user to select the
#   player and color for which to generate a player report.
#
proc ::preport::preportDlg {args} {
  if {[sc_base numGames] == 0} {
    tk_messageBox -title "Scid" -type ok -icon warning -message "No games in current base"
    return
  }
  # Set default player and color if parameters are provided
  if {[llength $args] >= 1} {
    set ::preport::_player [lindex $args 0]
    if {$::preport::_player == [sc_game info white]} {
      set ::preport::_color white
    } elseif {$::preport::_player == [sc_game info black]} {
      set ::preport::_color black
    }
  }
  if {[llength $args] >= 2} {
    set ::preport::_color [lindex $args 1]
  }
  
  set w .preportDlg
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: [tr ToolsPlayerReport]"
  wm resizable $w 0 0
  pack [label $w.plabel -text "Generate Player Report"]
  pack [frame $w.g] -side top -fill x -expand yes -padx 2
  label $w.g.where -text "Player:"
  grid $w.g.where -row 0 -column 0 -sticky w
  ttk::combobox $w.g.player -width 40 -textvariable ::preport::_player
  ::utils::history::SetCombobox ::preport::_player $w.g.player
  grid $w.g.player -row 0 -column 1 -sticky we
  label $w.g.has -text "Color:"
  grid $w.g.has -row 1 -column 0 -sticky w
  frame $w.g.color
  radiobutton $w.g.color.white -text $::tr(White) \
      -variable ::preport::_color -value white
  frame $w.g.color.gap -width 5
  radiobutton $w.g.color.black -text $::tr(Black) \
      -variable ::preport::_color -value black
  pack $w.g.color.white $w.g.color.gap $w.g.color.black -side left
  grid $w.g.color -row 1 -column 1 -sticky w
  label $w.g.pos -text "Start position:"
  grid $w.g.pos -row 2 -column 0
  frame $w.g.pselect
  radiobutton $w.g.pselect.start -text "Standard start position" \
      -variable ::preport::_pos -value start
  radiobutton $w.g.pselect.current -text "Current board position" \
      -variable ::preport::_pos -value current
  pack $w.g.pselect.start $w.g.pselect.current -side left
  grid $w.g.pselect -row 2 -column 1 -sticky w
  checkbutton $w.g.clipbase -text $::tr(PReportClipbase) \
      -variable ::preport::_clipbase
  grid $w.g.clipbase -row 3 -column 1 -sticky w
  addHorizontalRule $w
  pack [frame $w.b] -side bottom -fill x
  pack [frame $w.b2] -side bottom -fill x
  set whiteName [sc_game info white]
  set blackName [sc_game info black]
  dialogbutton $w.b2.white -text "$::tr(White) ($whiteName)" -command {
    set ::preport::_player [sc_game info white]
    set ::preport::_color white
  }
  dialogbutton $w.b2.black -text "$::tr(Black) ($blackName)" -command {
    set ::preport::_player [sc_game info black]
    set ::preport::_color black
  }
  if {$whiteName == ""  ||  $whiteName == "?"} {
    $w.b2.white configure -state disabled
  }
  if {$blackName == ""  ||  $blackName == "?"} {
    $w.b2.black configure -state disabled
  }
  
  dialogbutton $w.b.help -text $::tr(Help) \
      -command {helpWindow Reports Player}
  dialogbutton $w.b.ok -text OK \
      -command "catch {grab release $w}; destroy $w; ::preport::makeReportWin"
  dialogbutton $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  # foreach button {help ok cancel} {
  # $w.b.$button configure -font font_Small
  # }
  if {$whiteName != ""  &&  $whiteName != "?"} {
    packbuttons left $w.b2.white
  }
  if {$blackName != ""  &&  $blackName != "?"} {
    packbuttons right $w.b2.black
  }
  packbuttons right $w.b.cancel $w.b.ok
  packbuttons left $w.b.help
  if {[sc_base current] == [sc_info clipbase]} {
    $w.g.clipbase configure -state disabled
  }
  bind $w <Return> [list $w.b.ok invoke]
  bind $w <Escape> [list $w.b.cancel invoke]
  ::utils::win::Centre $w
  grab $w
  focus $w.g.player
}

proc ::preport::ConfigMenus {{lang ""}} {
  if {! [winfo exists .preportWin]} { return }
  if {$lang == ""} { set lang $::language }
  set m .preportWin.menu
  foreach idx {0 1} tag {File Help} {
    configMenuText $m $idx Oprep$tag $lang
  }
  foreach idx {0 1 2 4 6} tag {Text Html LaTeX Options Close} {
    configMenuText $m.file $idx OprepFile$tag $lang
  }
  foreach idx {0 1} tag {Report Index} {
    configMenuText $m.helpmenu $idx OprepHelp$tag $lang
  }
  
}

proc ::preport::makeReportWin {args} {
  if {! [sc_base inUse]} { return }
  set showProgress 1
  set args [linsert $args 0 "args"]
  if {[lsearch -exact $args "-noprogress"] >= 0} { set showProgress 0 }
  if {$showProgress} {
    set w .progress
    toplevel $w
    wm withdraw $w
    wm title $w "Scid: [tr ToolsPlayerReport]"
    bind $w <Visibility> "raiseWin $w"
    
    pack [frame $w.b] -side bottom -fill x
    set ::preport::_interrupt 0
    button $w.b.cancel -text $::tr(Cancel) -command {
      set ::preport::_interrupt 1
      sc_progressBar
    }
    pack $w.b.cancel -side right -pady 5 -padx 2
    
    foreach i {1 2} name {"Searching database for report games"
      "Generating report information"} {
      label $w.text$i -text "$i. $name"
      pack $w.text$i -side top
      canvas $w.c$i -width 400 -height 20 -bg white -relief solid -border 1
      $w.c$i create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
      $w.c$i create text 395 10 -anchor e -font font_Regular -tags time \
          -fill black -text "0:00 / 0:00"
      pack $w.c$i -side top -pady 10
    }
    wm resizable $w 0 0
    # Set up geometry for middle of screen:
    set x [winfo screenwidth $w]; set x [expr $x - 400]; set x [expr $x / 2]
    set y [winfo screenheight $w]; set y [expr $y - 20]; set y [expr $y / 2]
    wm geometry $w +$x+$y
    wm deiconify $w
    grab $w.b.cancel
    sc_progressBar $w.c1 bar 401 21 time
    busyCursor .
  }

  # if the report is to be done from the starting position, a full
  # search of the base has to be ensured. Remove all filters including
  # tree filters:
  if {$::preport::_pos == "start"} { sc_filter clear }

  set searchArgs {}
  lappend searchArgs -filter RESET
  lappend searchArgs "-$::preport::_color"
  lappend searchArgs "\"$::preport::_player\""
  eval sc_search header $searchArgs
  if {$showProgress} {
    if {$::preport::_interrupt} {
      unbusyCursor .
      catch {grab release $w.b.cancel}
      destroy $w
      return
    }
    sc_progressBar $w.c2 bar 401 21 time
  }
  
  ::utils::history::AddEntry ::preport::_player $::preport::_player
  
  if {$::preport::_pos == "start"} { sc_game push }
  sc_search board AND Exact false 0
  sc_report player create $::preport(ExtraMoves) $::preport(MaxGames)
  if {$::preport::_pos == "start"} { sc_game pop }
  if {$::preport::_clipbase} {
    if {[sc_base current] != [sc_info clipbase]} {
      sc_clipbase clear
      sc_filter copy [sc_base current] [sc_info clipbase]
    }
  }
  if {$showProgress} {
    unbusyCursor .
    catch {grab release $w.b.cancel}
    destroy $w
    if {$::preport::_interrupt} { return }
  }
  set report [::preport::report ctext 1]
  
  if {[lsearch -exact $args "-nodisplay"] >= 0} { return }
  
  set w .preportWin
  if {![winfo exists $w]} {
    toplevel $w
    wm title $w "Scid: $::tr(PReportTitle)"
    menu $w.menu
    $w configure -menu $w.menu
    $w.menu add cascade -label OprepFile -menu $w.menu.file
    $w.menu add cascade -label OprepHelp -menu $w.menu.helpmenu
    foreach i {file helpmenu} {
      menu $w.menu.$i -tearoff 0
    }
    $w.menu.file add command -label OprepFileText \
        -command {::preport::saveReport text}
    $w.menu.file add command -label OprepFileHtml \
        -command {::preport::saveReport html}
    $w.menu.file add command -label OprepFileLaTeX \
        -command {::preport::saveReport latex}
    $w.menu.file add separator
    $w.menu.file add command -label OprepFileOptions \
        -command ::preport::setOptions
    $w.menu.file add separator
    $w.menu.file add command -label Close \
        -command "$w.b.close invoke"
    $w.menu.helpmenu add command -label "Player Report Help" \
        -accelerator F1 -command {helpWindow Reports Player}
    $w.menu.helpmenu add command -label "Index" \
        -command {helpWindow Index}
    
    bind $w <F1> {helpWindow Reports Player}
    bind $w <Escape> "$w.b.close invoke"
    bind $w <Up> "$w.text yview scroll -1 units"
    bind $w <Down> "$w.text yview scroll 1 units"
    bind $w <Prior> "$w.text yview scroll -1 pages"
    bind $w <Next> "$w.text yview scroll 1 pages"
    bind $w <Key-Home> "$w.text yview moveto 0"
    bind $w <Key-End> "$w.text yview moveto 0.99"
    bindMouseWheel $w $w.text
    
    autoscrollframe -bars y $w.scroll text $w.text \
        -height 30 -width 85 -font font_Small -setgrid 1 -wrap word \
        -background white -foreground black -cursor top_left_arrow
    ::htext::init $w.text
    frame $w.b
    button $w.b.opts -text [tr OprepFileOptions] -command ::preport::setOptions
    button $w.b.help -textvar ::tr(Help) -command {helpWindow Reports Player}
    button $w.b.viewHTML -text $::tr(OprepViewHTML) \
        -command ::preport::previewHTML
    button $w.b.update -textvar ::tr(Update...) -command {
      ::preport::preportDlg
    }
    button $w.b.close -textvar ::tr(Close) -command "focus .; destroy $w"
    pack $w.b -side bottom -fill x
    pack $w.scroll -side top -fill both -expand yes
    pack $w.b.close $w.b.update -side right -padx 2 -pady 2
    if {$::windowsOS} {
      pack $w.b.viewHTML -side left -padx 2 -pady 2
    }
    pack $w.b.opts -side left -padx 2 -pady 2
    ::preport::ConfigMenus
    ::utils::win::Centre $w
  }
  
  busyCursor .
  $w.text configure -state normal
  $w.text delete 1.0 end
  regsub -all "\n" $report "<br>" report
  ::htext::display $w.text $report
  $w.text configure -state disabled
  unbusyCursor .
  ::windows::gamelist::Refresh
  ::windows::stats::Refresh
}


proc ::preport::setOptions {} {
  set w .preportOptions
  if {[winfo exists $w]} { return }
  toplevel $w
  pack [frame $w.f] -side top -fill x -padx 5 -pady 5
  set row 0
  foreach i {Stats AvgPerf Results MovesFrom Themes Endgames} {
    set yesno($i) 1
  }
  foreach i {Stats Oldest Newest MostFrequentOpponents Results sep \
        AvgPerf HighRating sep \
        MostFrequentEcoCodes Themes Endgames sep \
        MaxGames ExtraMoves} {
    set from 0; set to 10; set tick 1; set res 1
    if {$i == "MaxGames"} {
      set from 0; set to 500; set tick 100; set res 50
    }
    if {$i == "sep"} {
      frame $w.f.fsep$row -height 2 -borderwidth 2 -relief sunken -bg white
      frame $w.f.tsep$row -height 2 -borderwidth 2 -relief sunken -bg white
      grid $w.f.fsep$row -row $row -column 0 -sticky we -columnspan 4
      #grid $w.f.tsep$row -row $row -column 1 -sticky we -columnspan 2
    } elseif {[info exists yesno($i)]} {
      frame $w.f.f$i
      radiobutton $w.f.f$i.yes -variable ::preport($i) -value 1 \
          -text "$::tr(Yes)   " -font font_Small
      radiobutton $w.f.f$i.no -variable ::preport($i) -value 0 \
          -text "$::tr(No)   "  -font font_Small
      pack $w.f.f$i.yes -side left
      pack $w.f.f$i.no -side right
      label $w.f.t$i -textvar ::tr(Oprep$i) -font font_Small
      grid $w.f.f$i -row $row -column 0 -sticky n
      grid $w.f.t$i -row $row -column 1 -sticky w -columnspan 3
    } else {
      scale $w.f.s$i -variable ::preport($i) -from $from -to $to \
          -width 8 -length 200 -tickinterval $tick -orient horizontal \
          -font font_Small -resolution $res -showvalue 0
      label $w.f.t$i -textvar ::tr(Oprep$i) -font font_Small
      grid $w.f.s$i -row $row -column 0 -sticky we
      grid $w.f.t$i -row $row -column 1 -sticky w -columnspan 3
    }
    grid rowconfigure $w.f $row -pad 2
    incr row
  }
  addHorizontalRule $w
  pack [frame $w.b] -side bottom -fill x
  button $w.b.defaults -textvar ::tr(Defaults) -command {
    array set ::preport [array get ::preportDefaults]
  }
  button $w.b.ok -text "OK" -command {
    destroy .preportOptions
    catch {set ::preport::_data(yview) [lindex [.preportWin.text yview] 0]}
    ::preport::makeReportWin
    catch {.preportWin.text yview moveto $::preport::_data(yview)}
  }
  button $w.b.cancel -textvar ::tr(Cancel) -command {
    array set ::preport [array get ::preport::backup]
    destroy .preportOptions
  }
  pack $w.b.defaults -side left -padx 5 -pady 5
  pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
  array set ::preport::backup [array get ::preport]
  wm resizable $w 0 0
  wm title $w  "Scid: [tr ToolsPlayerReport]: [tr OprepFileOptions]"
  bind $w <Escape> "$w.b.cancel invoke"
}


# previewHTML:
#   Saves the report to a temporary file, and invokes the user's web
#   browser to display it.
#
proc ::preport::previewHTML {} {
  busyCursor .
  set tmpdir $::scidLogDir
  set tmpfile "TempPlayerReport"
  set fname [file join $tmpdir $tmpfile]
  if {[catch {set tempfile [open $fname.html w]}]} {
    tk_messageBox -title "Scid: Error writing report" -type ok -icon warning \
        -message "Unable to write the file: $fname.html"
  }
  puts $tempfile [::preport::report html 1]
  close $tempfile
  if {[string match $::tcl_platform(os) "Windows NT"]} {
    catch {exec $::env(COMSPEC) /c start $fname.html &}
  } else {
    catch {exec start $fname.html &}
  }
  unbusyCursor .
}

proc ::preport::saveReport {fmt} {
  set default ".txt"
  set ftype {
    { "Text files" {".txt"} }
    { "All files"  {"*"}    }
  }
  if {$fmt == "latex"} {
    set default ".tex"
    set ftype {
      { "LaTeX files" {".tex" ".ltx"} }
      { "All files"  {"*"}    }
    }
  } elseif {$fmt == "html"} {
    set default ".html"
    set ftype {
      { "HTML files" {".html" ".htm"} }
      { "All files"  {"*"}    }
    }
  }
  
  set fname [tk_getSaveFile -initialdir [pwd] -filetypes $ftype \
      -defaultextension $default -title "Scid: Save opening report"]
  if {$fname == ""} { return }
  
  busyCursor .
  if {[catch {set tempfile [open $fname w]}]} {
    tk_messageBox -title "Scid: Error writing report" -type ok -icon warning \
        -message "Unable to write the file: $fname\n\n"
  } else {
    set report [::preport::report $fmt 1]
    if {$::hasEncoding  &&  $::langEncoding($::language) != ""} {
      catch {set report [encoding convertto $::langEncoding($::language) $report]}
    }
    puts $tempfile $report
    close $tempfile
  }
  unbusyCursor .
}

proc ::preport::_reset {} {
  set ::preport::_data(sec) 0
  set ::preport::_data(subsec) 0
}

proc ::preport::_title {} {
  set fmt $::preport::_data(fmt)
  set title $::tr(PReportTitle)
  if {$fmt == "latex"} {
    return "\\begin{center}{\\LARGE \\bf $title}\\end{center}\n\n"
  } elseif {$fmt == "html"} {
    return "<h1><center>$title</center></h1>\n\n"
  } elseif {$fmt == "ctext"} {
    return "<h1><center>$title</center></h1>\n\n"
  }
  set r    "--------------------------------------------------------------"
  append r "\n                        [string toupper $title]\n"
  append r "--------------------------------------------------------------"
  append r "\n\n"
  return $r
}

proc ::preport::_sec {text} {
  set fmt $::preport::_data(fmt)
  incr ::preport::_data(sec)
  set ::preport::_data(subsec) 0
  if {$fmt == "latex"} {
    return "\n\n\\section{$text}\n"
  } elseif {$fmt == "html"} {
    return "\n<h2>$::preport::_data(sec). $text</h2>\n"
  } elseif {$fmt == "ctext"} {
    return "<h4>$::preport::_data(sec). $text</h4>"
  }
  set line "$::preport::_data(sec). [string toupper $text]"
  set underline "-----------------------------------------------------"
  return "\n\n$line\n[string range $underline 1 [string length $line]]\n"
}

proc ::preport::_subsec {text} {
  set fmt $::preport::_data(fmt)
  incr ::preport::_data(subsec)
  if {$fmt == "latex"} {
    return "\n\\subsection{$text}\n\n"
  } elseif {$fmt == "html"} {
    return "\n<h3>$::preport::_data(sec).$::preport::_data(subsec) $text</h3>\n\n"
  } elseif {$fmt == "ctext"} {
    return "\n<maroon><b>$::preport::_data(sec).$::preport::_data(subsec) $text</b></maroon>\n\n"
  }
  return "\n$::preport::_data(sec).$::preport::_data(subsec)  $text\n\n"
}


proc ::preport::report {fmt {withTable 1}} {
  global tr preport
  sc_report player format $fmt
  set fmt [string tolower $fmt]
  set ::preport::_data(fmt) $fmt
  ::preport::_reset
  
  # numRows: the number of rows to show in the theory table.
  # If it is zero, the number of rows if decided according to the
  # number of games in the report.
  set numRows 0
  
  # Specify whether a theory table is to be printed, so note numbers
  # can be generated and displayed if necessary:
  sc_report player notes $withTable $numRows
  
  set n "\n"; set p "\n\n"; set preText ""; set postText ""
  set percent "%"; set bullet "  * "
  if {$fmt == "latex"} {
    set n "\\\\\n"; set p "\n\n"
    #set preText "{\\samepage\\begin{verbatim}\n"
    #set postText "\\end{verbatim}\n}\n"
    set percent "\\%"; set bullet "\\hspace{0.5cm}\$\\bullet\$"
  } elseif {$fmt == "html"} {
    set n "<br>\n"; set p "<p>\n\n"
    set preText "<pre>\n"; set postText "</pre>\n"
  } elseif {$fmt == "ctext"} {
    set preText "<tt>"; set postText "</tt>"
  }
  
  # Generate the report:
  set games $tr(games)
  set moves $tr(moves)
  set counts [sc_report player count]
  set rgames [lindex $counts 0]
  set tgames [lindex $counts 1]
  
  set r {}
  append r $::optable::_docStart($fmt)
  set r [string map [list "\[OprepTitle\]" $tr(PReportTitle)] $r]
  append r [::preport::_title]
  append r "$tr(Player): \"$::preport::_player\""
  if {$::preport::_color == "white"} {
    append r " $tr(PReportColorWhite)"
  } else {
    append r " $tr(PReportColorBlack)"
  }
  set eco ""
  if {$::preport::_pos == "current"  &&  ![sc_pos isAt start]} {
    append r " [format $tr(PReportMoves) [sc_report player line]]"
    set eco [sc_report player eco]
  }
  append r " ("
  if {$fmt == "ctext"} {
    append r "<darkblue><run sc_report player select all 0; ::windows::stats::Refresh>"
  }
  append r "$rgames"
  if {$fmt == "ctext"} { append r "</run></darkblue>"; }
  append r " $games)$n"
  append r "$tr(Database): [file tail [sc_base filename]] "
  append r "([::utils::thousands [sc_base numGames]] $games)$n"
  if {$eco != ""} {
    append r "$tr(ECO): $eco$n"
  }
  append r "$::tr(OprepGenerated) Scid [sc_info version], [::utils::date::today]$n"
  
  if {$preport(Stats)  ||  $preport(Oldest) > 0  ||  $preport(Newest) > 0  ||
    $preport(MostFrequentOpponents) > 0  ||  $preport(Results)} {
    append r [::preport::_sec $tr(OprepStatsHist)]
  }
  if {$preport(Stats)} {
    append r [::preport::_subsec $tr(OprepStats)]
    append r [::optable::stats $fmt]
  }
  if {$preport(Oldest) > 0} {
    append r [::preport::_subsec $tr(OprepOldest)]
    append r [sc_report player best o $preport(Oldest)]
  }
  if {$preport(Newest) > 0} {
    append r [::preport::_subsec $tr(OprepNewest)]
    append r [sc_report player best n $preport(Newest)]
  }
  if {$preport(MostFrequentOpponents) > 0} {
    append r [::preport::_subsec "$tr(OprepMostFrequentOpponents)"]
    if {$::preport::_color == "white"} {
      append r [sc_report player players black $preport(MostFrequentOpponents)]
    } else {
      append r [sc_report player players white $preport(MostFrequentOpponents)]
    }
  }
  if {$preport(Results)} {
    append r [::preport::_subsec $::tr(OprepResults)]
    append r [::optable::results player $fmt]
  }
  
  if {$preport(AvgPerf)  ||  $preport(HighRating)} {
    append r [::preport::_sec $tr(OprepRatingsPerf)]
  }
  if {$preport(AvgPerf)} {
    append r [::preport::_subsec $tr(OprepAvgPerf)]
    set e [sc_report player elo white]
    set welo [lindex $e 0]; set wng [lindex $e 1]
    set bpct [lindex $e 2]; set bperf [lindex $e 3]
    set e [sc_report player elo black]
    set belo [lindex $e 0]; set bng [lindex $e 1]
    set wpct [lindex $e 2]; set wperf [lindex $e 3]
    append r "$tr(OprepWRating): $welo ($wng $games);  "
    append r "$tr(OprepWPerf): $wperf ($wpct$percent vs $belo)$n"
    append r "$tr(OprepBRating): $belo ($bng $games);  "
    append r "$tr(OprepBPerf): $bperf ($bpct$percent vs $welo)$n"
  }
  if {$preport(HighRating) > 0} {
    append r [::preport::_subsec $tr(OprepHighRating)]
    append r [sc_report player best a $preport(HighRating)]
  }
  
  if {$preport(Themes)  ||  $preport(MostFrequentEcoCodes) > 0  ||
    $preport(Endgames)} {
    append r [::preport::_sec $tr(OprepMovesThemes)]
  }
  if {$preport(MostFrequentEcoCodes) > 0} {
    append r [::preport::_subsec $tr(PReportOpenings)]
    append r [sc_report player eco $preport(MostFrequentEcoCodes)]
  }
  if {$preport(Themes)} {
    append r [::preport::_subsec $tr(OprepThemes)]
    append r [sc_report player themes $tr(OprepThemeDescription:) \
        $tr(OprepThemeSameCastling:) $tr(OprepThemeOppCastling:) \
        $tr(OprepThemeKPawnStorm:) $tr(OprepThemeQueenswap:) \
        $tr(OprepTheme1BishopPair:) \
        $tr(OprepThemeWIQP:) $tr(OprepThemeBIQP:) \
        $tr(OprepThemeWP567:) $tr(OprepThemeBP234:) \
        $tr(OprepThemeOpenCDE:) ]
  }
  if {$preport(Endgames)} {
    append r [::preport::_subsec $tr(OprepEndgames)]
    append r "$tr(OprepEndClass:)$n"
    append r [sc_report player endmat]
  }
  
  if {$withTable  &&  $::preport(MaxGames) > 0} {
    set sec [::preport::_sec $tr(OprepTheoryTable)]
    set comment ""
    if {$tgames > $::preport(MaxGames)} {
      set comment [format $tr(OprepTableComment) $::preport(MaxGames)]
    }
    append r [sc_report player print $numRows $sec $comment]
  }
  append r $::optable::_docEnd($fmt)
  
  # Eszet (ss) characters seem to be mishandled by LaTeX, even with
  # the font encoding package, so convert them explicitly:
  if {$fmt == "latex"} { regsub -all ß $r {{\\ss}} r }
  
  return $r
}

####################
# Player Info window

namespace eval pinfo {
set playerInfoName ""

# the following icons are used as buttons with PND as input, this has
# to be handled specially and they involve some technicallities. All
# other icons and link resolvers come from the config file
image create photo wikiplnk -data {
   R0lGODlhEAAQAIQQAAQCBBkYGSgoKDw6PEhHSFdYV2lqaXp7eoSDhJiYmKmoqbm6ucjHyNjZ2Ono
   6fz9/P///////////////////////////////////////////////////////////////yH+EUNy
   ZWF0ZWQgd2l0aCBHSU1QACH5BAEKABAALAAAAAAQABAAAAV24COOZGmeaDouBbE8CnE0z1E0jVE8
   iPA+BEHDgUg8HAZjI2BwPBIBBcMgQo4KAcajEUQoRIsvOIAQJQC7I+InIhBojQFB1DiUEIBv3Pc0
   lgQFDgoGA1QITncDBwp1AgllJgoCAl8Lk1onbjQPBgIpC5hbbConIQA7
}
image create photo dnblnk -data {
   R0lGODlhFAAUALMAAAAAAGZmZld/u8zMzP8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   AAAAACH5BAEAAAQALAAAAAAUABQAAARkkMg5BaA4SxHs1RknjB5YdSQJfCGapismvjRLzDTM4vkI
   BB9e7ze4CHPEIsDT8wUGUAsHuKw9o8YAIUCFXQeWzbNQ4K4s37BkOSCTzWkb4dx2x0F0N9a0ZhfA
   ciZnanwYMSARAAA7
}
image create photo seealsolnk -data {
   R0lGODlhFQAVAMZ5AAAAAAEBAAICAQQGAhEXCSEtECMwESouJjw8PDJFGEJcH0xpJGFhYVRuMVV1
   KF6CLH2IbmuVM4+Pj5SUlHysO4imYYGwQYK0PaKiooa6QIe7QKioqIi8Qoq9RIq9RYu9R4y+SI2+
   SY2+SqysrI/ATZDAT62urK6urpHBUJLBUa+vr7GxsZXDVrKyspXEV5bEWJfEWrOzs7W1tZrGX7a2
   tre3t57IZbm5ubq6uru7u6TLbry8vL29vajOdanOdsDAwMHBwavQecLCwqzQe63QfMPDw8TExLDS
   gbDSgsXFxbHTg8bGxsfHx7LUhbTUh8jIyLXVicnJycrKyrfWjcvLy8zMzM3Nzc7OztDQ0L/bmdHR
   0dLS0sbfpNbW1s/ks9bovdbovtrqxNrqxdvqxd3syN3syeLv0ePv0ubx1+jy2urz3fL46vP47Pf3
   9/T57vb68Pn89vv7+/r8+Pz9+v3++/3+/P7+/f7+/v///v///////////////////////////yH+
   EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAFQAVAAAH/oAjKi00Nzs/QEJFi4tAPzw3NC0qJy01O0BJ
   T1RWV55XVlVRS0A7NS0rNDt5rK15LxqxsrE7NDE3QHlsRCIcJTaws7JCODI8S3k+GmJzaEMvIXJ5
   cB+ySzw1P1J5HhpsrS9NrUeyUkA3RVZ5KRooUF5sL2R5aXljsldFOUtYeWHssTq4qENnhh06JGJp
   WbKDiRZWdc5wgaEBhD0NZfJMibWFScMtrvKs0eAhDxINSvKY4fjkYx4dYNyYOKAhCKs4NfLgYaFh
   S0uHeXq8sDCAgJM3XzQ4CAAhT5aeTPb1Y9UFAAMqVCpEiGAAwAQ1GhaiU8fqDgIAaNOmvaDhipFs
   TdtatcEgocGCuwUAJMigwZwxZCFfxXogYG+sa7dyBQ5GQQHfWMRSrVosTFatSqoyReH0CZQoUqZa
   CCJkCJEiRkUcQZKkYoPr17Bjyw4EADs=
}

proc setupDefaultResolvers { } {
   set optionF ""
   if {[catch {open [scidConfigFile resolvers] w} optionF]} {
      tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
         -message "Unable to write options file: [scidConfigFile resolvers]\n$optionF"
   } else {
      puts $optionF "# Scid resolver configuration"
      puts $optionF "# Version: $::scidVersion, $::scidVersionDate"
      puts $optionF "# This file contains commands in the Tcl language format."
      puts $optionF "# If you edit this file, you must preserve valid Tcl"
      puts $optionF "# format or it will not set your Scid options properly."
      puts $optionF "#"
      puts $optionF "# Define how to interpret IDs stored in ssp files. Each ID has to"
      puts $optionF "# have a unique page to link to. It is currently not possible to link"
      puts $optionF "# to more than one page by means of a single ID, or to get more"
      puts $optionF "# than one button by any ID. Therefore, PND is handled specially"
      puts $optionF "# and within pinfo.tcl"
      puts $optionF "#"
      puts $optionF "# Syntax of the following array's list entries:"
      puts $optionF "#"
      puts $optionF "# IDName: the tag to search for e.g. VIAF searches for"
      puts $optionF "#         %Bio VIAF-lines and so on"
      puts $optionF "# link target url: %ID% is replaced by the ID"
      puts $optionF "# icon name: the icons are specified below as base64 encoded images"
      puts $optionF "#            They must not live in ::pinfo-namespace!"
      puts $optionF "# Link text: what to display in pinfo window"
      puts $optionF "set ::pinfo::idlink(0) {{VIAF} {http://viaf.org/%ID%} {viaflnk} {VIAF}}"
      puts $optionF "set ::pinfo::idlink(1) {{FIDEID} {http://ratings.fide.com/card.phtml?event=%ID%} {fidelnk} {FIDE}}"
      puts $optionF "set ::pinfo::idlink(2) {{ICCFID} {http://www.iccf-webchess.com/PlayerDetails.aspx?id=%ID%} {iccflnk} {ICCF}}"
      puts $optionF "set ::pinfo::idlink(3) {{DSB} {http://www.schachbund.de/dwz/db/spieler.html?zps=%ID%} {dsblnk} {DSB}}"
      puts $optionF "set ::pinfo::idlink(4) {{BCF} {http://grading.bcfservices.org.uk/getref.php?ref=%ID%} {bcflnk} {BCF}}"
      puts $optionF "set ::pinfo::idlink(5) {{SchemingMind} {http://www.schemingmind.com/plyrprofile.aspx?profile_id=%ID%} {smlnk} {SchemingMind}}"
      puts $optionF "#"
      puts $optionF "# Icons for the icons defined here MUST NOT live in ::pinfo namespace"
      puts $optionF "#"
      puts $optionF "image create photo fidelnk -data {"
      puts $optionF "   R0lGODlhEAAQAOecACIxWSY0XSc2XSg2YCc3Xig3Xik3Xyk4Xyo4Xyo4YCo5Xyo5YCs5Xyo6Xys6"
      puts $optionF "   YCs6YSw6YCw6YSw7YSw7Yi07Yi48Yi48Yy88Yi89YzA+ZDE/ZDE/ZTI/ZTJAZTJBZjNBZTNBZjRB"
      puts $optionF "   ZjNCZTRCZjZEaDdEaThEaThGaTlGaTpIazxKbT1KbT9MbkBNb0NQc0VRc0ZScUZUdEhUdEdVdkhV"
      puts $optionF "   dElVdEpXdk1ZeE5ZeFRef1NgfVRgf1dgf1hhf11nhGFsh2JsiGFtiGJtiGNtiGZyi2lzjWt3kHB4"
      puts $optionF "   kHN+lnqEm36GnYCJnYmSo4qTpZWbrpWcq5eerZeer5qgrp6ltaGns6asuKesuqetvK60wrC1wLa6"
      puts $optionF "   xra8x7i9xLu/x7vAyb3CyMvO1MzP09DS2tDT2dHU2dHV2tLV2dPV29PX29fZ3tna3dna3tra3tzd"
      puts $optionF "   4d3d4dze4Nze4d3e4d3e4tzf4d3f4d3f497f4d7f5N/g4d7h497h5t/h5ODi5OHi5eHj5eLj5eLk"
      puts $optionF "   5uPl6OTm6efn6eXo6ejq6+rq6+rq7Orr7Ors6+vs7ezt7+3u7+/w8vDw8O/x8fDx8vHx8vHy9PHz"
      puts $optionF "   9PX19fb29vf39/j4+fr6+/v6+/z9/f39/v//////////////////////////////////////////"
      puts $optionF "   ////////////////////////////////////////////////////////////////////////////"
      puts $optionF "   ////////////////////////////////////////////////////////////////////////////"
      puts $optionF "   ////////////////////////////////////////////////////////////////////////////"
      puts $optionF "   ////////////////////////////////////////////////////////////////////////////"
      puts $optionF "   /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH"
      puts $optionF "   SU1QACH5BAEKAP8ALAAAAAAQABAAAAjbAEEIHEiwoMGDBz1IGGDhhIkKBhx0IBhiAgUjWMSYiXRH"
      puts $optionF "   C5IPC0YIfLBji51KV1wESWPpT5chCUBggDGH06UsACYE0DFIEqdGPSBsKIMojxwgRFg84MGmzh5B"
      puts $optionF "   elbccATp0SNGVjgIWBKpUCJFjH7gcPOGDh8yFzAISGLID6A+f4SQCMQIzhovJVqouDFGTZtDk15Q"
      puts $optionF "   8EEI0yZKVGrIgCJJU6ZFRxiAQFAEDR4wVXLYkBImzhklCgY2ENEkChMuX55McYLiQMEOBSCkiEFj"
      puts $optionF "   RgQCGhCC6JCht+7fAwMCADs="
      puts $optionF "}"
      puts $optionF "image create photo iccflnk -data {"
      puts $optionF "   R0lGODlhEAAQAMZqAAAA/wEB/wMD/wQE/wUF/wYG/wcH/wgI/woK/wsL/wwM/xAQ/xER/xIS/xMT"
      puts $optionF "   /xQU/xYW/xcX/xgY/xkZ/xoa/xsb/x4e/yEh/yIi/yUl/yYm/ycn/ykp/zIy/zQ0/zY2/zc3/zo6"
      puts $optionF "   /zs7/zw8/z09/0ZG/0lJ/01N/1hY/1lZ/1pa/1tb/1xc/2Nj/2Vl/2lp/2pq/3R0/3V1/3Z2/3d3"
      puts $optionF "   /3h4/3t7/3x8/39//4SE/4WF/4uL/42N/4+P/5CQ/5KS/5OT/5SU/5WV/5aW/5eX/5iY/5ub/5+f"
      puts $optionF "   /6Cg/6Gh/6en/6mp/6qq/66u/6+v/7S0/7i4/7u7/729/7+//8DA/8LC/8PD/8rK/8zM/83N/87O"
      puts $optionF "   /9PT/9fX/9jY/+Pj/+Tk/+bm/+jo/+vr/+zs//Hx//Ly//T0//b2//j4//z8////////////////"
      puts $optionF "   /////////////////////////////////////////////////////////////////////////yH+"
      puts $optionF "   EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAH8ALAAAAAAQABAAAAfjgFJTaF86R2dpXjlIZ2JQUFIV"
      puts $optionF "   GGMnAAVFaCaWRlQKCRULE1cGBwIgWwQIASFSAAAMDBJKAC4XEEwALRcWTwAUKAwTQwA0GQs9ADIZ"
      puts $optionF "   Dk0ALGmhw8ULPAAzGgvNK2nBQtYjHNUxJBxOABw/3dZcW0YANl1bUa4eod40aWlHADf5rQAegkmT"
      puts $optionF "   8QIIgBozXvQqoUWgNWM7kmVg0EwFtAlFiE30kWxDA23cJiwBAAODBFwvdvXaFsvKgAcGQGQJEGGA"
      puts $optionF "   iFYsJYT5ACBAEDMdAAggMi9FGiVMzmhhcYNMGiwrcJQBk6RKmkAAOw=="
      puts $optionF "}"
      puts $optionF "image create photo viaflnk -data {"
      puts $optionF "   R0lGODlhEAAQAIQaAP8AAP8ICP8QEP8YGP8hIf8pKf8xMf85Of9CQv9SUv9aWv9jY/9zc/97e/+E"
      puts $optionF "   hP+MjP+UlP+cnP+lpf+trf+1tf/Gxv/Ozv/W1v/e3v/v7////////////////////////yH+EUNy"
      puts $optionF "   ZWF0ZWQgd2l0aCBHSU1QACH5BAEKAB8ALAAAAAAQABAAAAWDoCZm1lVp1ZVhqSWOSnBpEJNlynC+"
      puts $optionF "   tCA2LwODJ4IENI+M6AKYESWACuXlIBBFFADwVdgSK9bRBCC5ajBOTYYiNWumIguFPSdmledA42JJ"
      puts $optionF "   8DIHABhYghoqPAxZTgsEEQwTPBILDFEiAhBIeIYOhgBTd0QZCEpZEBcJA2lLFyolKayqGiEAOw=="
      puts $optionF "}"
      puts $optionF ""
      puts $optionF "image create photo smlnk -data {"
      puts $optionF "   R0lGODlhEAAQAOMNAAAAABgYITE5OVJSUmNja3Nzc4SEjJycpbW1tcbOztbW3ufn5+/39///////"
      puts $optionF "   /////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAEl7AVZEprawCSmkJLQy2HwCiFJgzK"
      puts $optionF "   1RyAUBBKMhjBEAgGchSFWOGAahACh8GNsEDkBhaPStA6SAA7gytRMHQ8GQFCYcWEMK4DsoNwoS+L"
      puts $optionF "   hIAwUnxA8Iv6N0gYBDkdDC5KCF0JCAQEgw0MIQxiBD0GTQRdUSETfQcHCAgCADEIjJwgY2N/VIw1"
      puts $optionF "   lJ0vnTEKISEGRAOeuAhfLhEAOw=="
      puts $optionF "}"
      puts $optionF ""
      puts $optionF "image create photo bcflnk -data {"
      puts $optionF "   R0lGODlhEAAQAIQRAAAAAAAAIAAAQAAgYCAgIDAwMABAgEBAQGBgYDBvbwCAgD9/fzCQkH9/f2Cg"
      puts $optionF "   oDCvr4/Pz////////////////////////////////////////////////////////////yH+EUNy"
      puts $optionF "   ZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAFWmCBjGRZEgixFE3kqqwbHUjCGK1r4zJdGINc5Bfs"
      puts $optionF "   IRrIpFJJkzUAUCcU0HQ9o9ZpNXIFSKE0mFBs3AnNRqJQbVy6k9uuE/IIxKdOh0Jwx3IDAlQEB4SF"
      puts $optionF "   hoYEIQA7"
      puts $optionF "}"
      puts $optionF ""
      puts $optionF "image create photo dsblnk -data {"
      puts $optionF "   R0lGODlhEAAQAMZMABIRERYVFDsQDUoTDyMiInUfGWclIDQzM3QmF4QiG0A3G0A3HU47OU49O0VE"
      puts $optionF "   RE9FI1BNTFFNTFFOTVFOTlJOTlJQT1JRUVJSUVNSUlRTU1VUVFZVVds5LMw+Mto7Kds7L80/NF1d"
      puts $optionF "   XNs9Mdo/K9s+Mts+M9pAK9xAM9xANNtBNW9iNtxDN9xDONpGLNxFOdlIK9lILH5tN9xQRXh3d458"
      puts $optionF "   P4iIiK2XTJmZmb2lU6qqqru7u9zAYszMzOzNZuzNZ+zOZ+zOaOzOae3Qbe3Qbu7Rce3Sc93d3e7u"
      puts $optionF "   7vn39/v5+fz6+v37+///////////////////////////////////////////////////////////"
      puts $optionF "   ////////////////////////////////////////////////////////////////////////////"
      puts $optionF "   /////////////////////////////////////////////////////////////////////////yH+"
      puts $optionF "   EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAHs4BMghAUIi5CPT2Ci4sVEgwpJkGJjI0SDSgv"
      puts $optionF "   lJWLExUiIj49RZyCGBMyJCk9Q6WCS0sCBSM7Kg41gg66OUxIIScGNDG4NTdMDkxHB0xKFxwgCjYb"
      puts $optionF "   N0aCBDUzM0xJEyIfCz1GNw7GBzo6DkZIqAkID9VHyMhMMzqwAQMdOAsOBzxMAHRp0xBhAosTQBS5"
      puts $optionF "   YmIhQoYTHn4odBUhgowSLSQuzDABwooTMIAAIeKKYzcUMnokZBQIADs="
      puts $optionF "}"
      close $optionF
   }
}

# Resolve Wikipedias language sites by means of the Wikipedia API
proc WikipNLS { LinkList } {

   # set WikiPediaAPI "http://de.wikipedia.org/w/api.php?action=query"

   set WikiPLL  "&prop=langlinks"
   set WikiPTI  "&titles="
   set lang     $::language
   set langlink [lindex $LinkList 3]

   # translate Scids internal single letter language representation by
   # a more common two letter one; the same is used by WP
   switch $lang {
      B {set wplanguage pt}
      C {set wplanguage cs}
      D {set wplanguage de}
      F {set wplanguage fr}
      G {set wplanguage gr}
      H {set wplanguage hu}
      I {set wplanguage it}
      K {set wplanguage ca}
      N {set wplanguage nl}
      O {set wplanguage no}
      P {set wplanguage pl}
      R {set wplanguage ru}
      S {set wplanguage es}
      W {set wplanguage sv}
      Y {set wplanguage sr}
      default {set wplanguage en}
   }

   set Title    [lindex $LinkList 3]
   regsub -all {.*/} $Title "" Title

   # Spaces etc in URLs are bad, especially for TCL.
   # Use poor mans urlencoding:
   regsub -all { } $Title "%20" Title

   # collect all languages in $fullresult, each page contains a
   # llcontinue item linking to the following languages
   set fullresult ""
   set llcontinue ""

   # start out here:
   set WPfetchURL "$::pinfo::wikipAPI$WikiPLL$WikiPTI$Title"

   set token     [::http::geturl $WPfetchURL]
   set xmlresult [::http::data $token]
   ::http::cleanup $token

   # avoid requirement of tDOM and use simple regexping here as the
   # XML structure returned is simple enough

   # for more than 10 translations, a continue url is returned.
   # Extract it
   regsub -all {.*<langlinks llcontinue=} $xmlresult  "" llcontinue
   regsub -all {/>.*}                     $llcontinue "" llcontinue
   regsub -all {\|} $llcontinue "%7C" llcontinue
   regsub -all {\"} $llcontinue "" llcontinue

   # check if more langlinks exist, if so set the watermark, otherwise
   # it has to be emptied.
   if {[string match "*llcontinue*" $xmlresult]} {
      # keep only the langlinks-section of the XML
      regsub -all {.*<langlinks>} $xmlresult "" xmlresult
      regsub -all {</langlinks>.*} $xmlresult "" xmlresult
      regsub -all {</ll>} $xmlresult "</ll>\n" xmlresult
   } else {
      set llcontinue ""
   }
   set fullresult $xmlresult

   while { $llcontinue != "" } {

      set WPfetchURL "$::pinfo::wikipAPI$WikiPLL$WikiPTI$Title&llcontinue=$llcontinue"
      regsub -all { } $WPfetchURL "" WPfetchURL

      set token     [::http::geturl $WPfetchURL]
      set xmlresult [::http::data $token]
      ::http::cleanup $token

      if {[string match "*llcontinue*" $xmlresult]} {
         regsub -all {.*<langlinks llcontinue=} $xmlresult  "" llcontinue
         regsub -all {/>.*}                     $llcontinue "" llcontinue
         regsub -all {\|} $llcontinue "%7C" llcontinue
         regsub -all {\"} $llcontinue "" llcontinue
      } else {
         set llcontinue ""
      }

      regsub -all {.*<langlinks>} $xmlresult "" xmlresult
      regsub -all {</langlinks>.*} $xmlresult "" xmlresult
      regsub -all {</ll>} $xmlresult "</ll>\n" xmlresult
      set fullresult "$fullresult$xmlresult"
   }

   set langlist [split $fullresult "\n"]

   foreach ll $langlist {
      # construct the NLS-enabled link to WP
      if { [string match "*lang=\"$wplanguage\"*" $ll] } {
         set baselink "http://$wplanguage.wikipedia.org/wiki/"
         regsub -all {.*preserve">} $ll       "" pagename
         regsub -all {<.*} $pagename "" pagename
         set langlink "$baselink$pagename"
      }
   }
   openURL $langlink
}

# Use the SeeAlso service hosted at Gemeinsamer Bibliotheks Verbund
# (Goettingen) to resolve the PND to german Wikipedia. SeeAlso might
# proove useful later for other services as they appear on SeeAlso
proc saPND2WP { pnd } {

   set SeeAlso "$::pinfo::SeeAlsoPND2WP$pnd"

   set token [::http::geturl $SeeAlso]

   set LinkList [::http::data $token]
   regsub -all {\[} $LinkList "" LinkList
   regsub -all {\]} $LinkList "" LinkList
   regsub -all {\"} $LinkList "" LinkList
   set LinkList [split $LinkList ,]

   WikipNLS $LinkList
}

# Replace the ID-Tags by proper links
proc ReplaceIDTags { pinfo } {
  # replace certain BIO lines by links to external media
  regsub -all ".*PND "    $pinfo "" pnd
  regsub -all {<br>.*}    $pnd  "" pnd

  set pnd   [string trim $pnd]

  switch $::language {
     B {set wplanguage pt}
     C {set wplanguage cs}
     D {set wplanguage de}
     F {set wplanguage fr}
     H {set wplanguage hu}
     I {set wplanguage it}
     K {set wplanguage ca}
     N {set wplanguage nl}
     O {set wplanguage no}
     P {set wplanguage pl}
     R {set wplanguage ru}
     S {set wplanguage es}
     W {set wplanguage sv}
     Y {set wplanguage sr}
     default {set wplanguage en}
  }


  # the following three resolvers hook up with PND and need special
  # treatment as additional functions need to be called
  set wikiplink  "<run openURL $::pinfo::wikipurl/$wplanguage/$pnd; ::windows::stats::Refresh><button wikiplnk -command openURL $::pinfo::wikipurl/$wplanguage/$pnd;><blue>WP</blue></run>"

  # As we have direct linkage to WikiPedia SeeAlso is currently
  # obsolete. It might become of interest again if it offerse other
  # services to connect to.
  ### set seealsolink  "<run ::pinfo::saPND2WP $pnd; ::windows::stats::Refresh><button seealsolnk -command ::pinfo::saPND2WP $pnd><blue>SeeAlso</blue></run>"
  set seealsolink ""

  set dnblink    "<run openURL $::pinfo::dnburl/$pnd; ::windows::stats::Refresh><button dnblnk -command openURL $::pinfo::dnburl/$pnd><blue>DNB</blue></run>"

  # Handle all id definitions and link resolvers from the config file
  foreach index [array names ::pinfo::idlink] {
     set federation $::pinfo::idlink($index)
     set searchterm [lindex $federation 0]
     set link       [lindex $federation 1]
     set icon       [lindex $federation 2]
     set str        [lindex $federation 3]

     # extract the ID
     regsub -all ".*$searchterm " $pinfo "" id
     regsub -all {<br>.*} $id "" id
     set id [string trim $id]

     if {$id != ""} {
        regsub -all "%ID%" $link $id link
        set btn "<run openURL $link; ::windows::stats::Refresh><button $icon -command openURL $link><blue>$str</blue></run>"
        regsub -all "$searchterm $id<br>" $pinfo $btn pinfo
     }
  }

  # Replace PND by all services linked to that ID
  regsub -all "PND $pnd<br>" $pinfo "$seealsolink $wikiplink $dnblink" pinfo
  regsub -all "</run>  <run" $pinfo "</run> <run" pinfo

  return $pinfo
}


proc playerInfo {{player ""}} {
  global playerInfoName
  global spffile
  if {$player == ""} { set player $playerInfoName }
  if {[catch {sc_name info -htext $player} pinfo]} { return }
  set playerInfoName $player
  set ::rgraph(player) $player
  set w .playerInfoWin
  if {! [winfo exists $w]} {
    toplevel $w
    setWinLocation $w
    wm title $w "Scid: [tr ToolsPInfo]"
    wm minsize $w 40 5
    pack [frame $w.b2] -side bottom -fill x
    pack [frame $w.b] -side bottom -fill x
    button $w.b.graph -text [tr ToolsRating] \
      -command {::tools::graphs::rating::Refresh player $playerInfoName}
    button $w.b.edit -text $::tr(PInfoEditRatings) -command {
      makeNameEditor
      setNameEditorType rating
      set editName $playerInfoName
      set editNameSelect crosstable
    }
    button $w.b2.report -text [tr ToolsPlayerReport] \
      -command {::preport::preportDlg $playerInfoName}
    dialogbutton $w.b2.help -textvar ::tr(Help) -command {helpWindow PInfo}
    dialogbutton $w.b2.update -textvar ::tr(Update) -command {::pinfo::playerInfo $playerInfoName}
    dialogbutton $w.b2.close -textvar ::tr(Close) -command "focus .; destroy $w"
    packbuttons right $w.b2.close $w.b2.update $w.b2.help
    packbuttons left $w.b.graph $w.b.edit
    packbuttons left $w.b2.report

    autoscrollframe $w.frame text $w.text -font font_Regular -background white \
      -width $::winWidth($w) -height $::winHeight($w) -setgrid 1 -wrap none
    #scrollbar $w.ybar -command "$w.text yview"
    #pack $w.ybar -side right -fill y
    #text $w.text -font font_Regular -background white \
    #  -width $::winWidth($w) -height $::winHeight($w) \
    #  -setgrid 1 -wrap none -yscrollcommand "$w.ybar set"
    label $w.photo -background white
    #pack $w.text -side top -fill both -expand yes
    pack $w.frame -side top -fill both -expand yes
    bind $w <Escape> "focus .; destroy $w"
    ::htext::init $w.text
    ::htext::updateRate $w.text 0
    bind $w <Escape> "focus .; destroy $w"
    bind $w <F1> {helpWindow PInfo}
    bind $w <Configure> "recordWinSize $w"
    standardShortcuts $w
  }
  set player [trimEngineName $player]
  if {[info exists spffile($player)]} {
    image create photo photoPInfo -data [getphoto $player]
    $w.photo configure -image photoPInfo -anchor ne
    place $w.photo -in $w.text -relx 1.0 -x -1 -rely 0.0 -y 1 -anchor ne
  } else {
    place forget $w.photo
  }
  $w.text configure -state normal
  $w.text delete 1.0 end

  set pinfo [::pinfo::ReplaceIDTags $pinfo]

  # Display the player info
  ::htext::display $w.text $pinfo

  $w.text configure -state disabled
  ::windows::gamelist::Refresh
  ::maint::Refresh
  #raiseWin $w
}

# Call in the idlink config file.
   if {[catch {source [scidConfigFile resolvers]} ]} {
     ::splash::add "No configuration for link resolvers found. Creating default..."
     ::pinfo::setupDefaultResolvers
      if {[catch {source [scidConfigFile resolvers]} ]} {
         ::splash::add "Oops there is something wrong with the resolvers file..."
      } else {
         ::splash::add "Default resolvers created and loaded."
      }
   } else {
     ::splash::add "ID resolvers found, extended player info available."
   }
}
###
### analysis.tcl: part of Scid.
### Copyright (C) 1999-2003  Shane Hudson.
### Copyright (C) 2007  Pascal Georges

######################################################################
### Analysis window: uses a chess engine to analyze the board.

# analysis(logMax):
#   The maximum number of log message lines to be saved in a log file.
set analysis(logMax) 5000

# analysis(log_stdout):
#   Set this to 1 if you want Scid-Engine communication log messages
#   to be echoed to stdout.
#
set analysis(log_stdout) 0

set useAnalysisBook 1
set analysisBookSlot 1
set useAnalysisBookName ""
set wentOutOfBook 0
# State variable: 1 <=> engine is making an initial
# assessment of the current position, before progressing
# into the game
set initialAnalysis 0

# State variable: 1 <=> We will not add a variation to
# this move, since this cannot be different from the
# (engine variation to the) main line
set atStartOfLine 0

set isBatch 0
set batchEnd 1
set isBatchOpening 0
set isBatchOpeningMoves 12
set stack ""

set markTacticalExercises 1

set isAnnotateVar 0
set isShortAnnotation 0
set addScoreToShortAnnotations 0
set addAnnotatorTag 0

################################################################################
#
################################################################################
# resetEngine:
#   Resets all engine-specific data.
#
proc resetEngine {n} {
    global analysis
    set analysis(pipe$n) ""             ;# Communication pipe file channel
    set analysis(seen$n) 0              ;# Seen any output from engine yet?
    set analysis(seenEval$n) 0          ;# Seen evaluation line yet?
    set analysis(score$n) 0             ;# Current score in centipawns
    set analysis(prevscore$n) 0         ;# Immediately previous score in centipawns
    set analysis(scoremate$n) 0         ;# Current mating distance (0 if infinite)
    set analysis(prevscoremate$n) 0     ;# Previous mating distance
    set analysis(prevmoves$n) ""        ;# Immediately previous best line out from engine
    set analysis(nodes$n) 0             ;# Number of (kilo)nodes searched
    set analysis(depth$n) 0             ;# Depth in ply
    set analysis(prev_depth$n) 0        ;# Previous depth
    set analysis(time$n) 0              ;# Time in centisec (or sec; see below)
    set analysis(moves$n) ""            ;# PV (best line) output from engine
    set analysis(seldepth$n) 0
    set analysis(currmove$n) ""         ;# current move output from engine
    set analysis(currmovenumber$n) 0    ;# current move number output from engine
    set analysis(hashfull$n) 0
    set analysis(nps$n) 0
    set analysis(tbhits$n) 0
    set analysis(sbhits$n) 0
    set analysis(cpuload$n) 0
    set analysis(movelist$n) {}         ;# Moves to reach current position
    set analysis(nonStdStart$n) 0       ;# Game has non-standard start
    set analysis(has_analyze$n) 0       ;# Engine has analyze command
    set analysis(has_setboard$n) 0      ;# Engine has setboard command
    set analysis(send_sigint$n) 0       ;# Engine wants INT signal
    set analysis(wants_usermove$n) 0    ;# Engine wants "usermove" before moves
    set analysis(isCrafty$n) 0          ;# Engine appears to be Crafty
    set analysis(wholeSeconds$n) 0      ;# Engine times in seconds not centisec
    set analysis(analyzeMode$n) 0       ;# Scid has started analyze mode
    set analysis(invertScore$n) 1       ;# Score is for side to move, not white
    set analysis(automove$n) 0
    set analysis(automoveThinking$n) 0
    set analysis(automoveTime$n) 4000
    set analysis(lastClicks$n) 0
    set analysis(after$n) ""
    set analysis(log$n) ""              ;# Log file channel
    set analysis(logCount$n) 0          ;# Number of lines sent to log file
    set analysis(wbEngineDetected$n) 0  ;# Is this a special Winboard engine?
    set analysis(priority$n) normal     ;# CPU priority: idle/normal
    set analysis(multiPV$n) {}          ;# multiPV list sorted : depth score moves
    set analysis(multiPVraw$n) {}       ;# same thing but with raw UCI moves
    set analysis(uci$n) 0               ;# UCI engine
    # UCI engine options in format ( name min max ). This is not engine config but its capabilities
    set analysis(uciOptions$n) {}
    # the number of lines in multiPV. If =1 then act the traditional way
    set analysis(multiPVCount$n) 4      ;# number of N-best lines
    set analysis(index$n) 0             ;# the index of engine in engine list
    set analysis(uciok$n) 0             ;# uciok sent by engine in response to uci command
    set analysis(name$n) ""             ;# engine name
    set analysis(processInput$n) 0      ;# the time of the last processed event
    set analysis(waitForBestMove$n) 0
    set analysis(waitForReadyOk$n) 0
    set analysis(waitForUciOk$n) 0
    set analysis(movesDisplay$n) 1      ;# if false, hide engine lines, only display scores
    set analysis(lastHistory$n) {}      ;# last best line
    set analysis(maxmovenumber$n) 0     ;# the number of moves in this position
    set analysis(lockEngine$n) 0        ;# the engine is locked to current position
    set analysis(fen$n) {}              ;# the position that engine is analyzing
}

resetEngine 1
resetEngine 2

set annotateMode 0
set annotateModeButtonValue 0 ; # feedback of annotate mode

set annotateMoves all
set annotateBlunders blundersonly
set scoreAllMoves 0

################################################################################
# calculateNodes:
#   Divides string-represented node count by 1000
################################################################################
proc calculateNodes {{n}} {
    set len [string length $n]
    if { $len < 4 } {
        return 0
    } else {
        set shortn [string range $n 0 [expr {$len - 4}]]
        scan $shortn "%d" nd
        return $nd
    }
}


# resetAnalysis:
#   Resets the analysis statistics: score, depth, etc.
#
proc resetAnalysis {{n 1}} {
    global analysis
    set analysis(score$n) 0
    set analysis(scoremate$n) 0
    set analysis(nodes$n) 0
    set analysis(prev_depth$n) 0
    set analysis(depth$n) 0
    set analysis(time$n) 0
    set analysis(moves$n) ""
    set analysis(multiPV$n) {}
    set analysis(multiPVraw$n) {}
    set analysis(lastHistory$n) {}
    set analysis(maxmovenumber$n) 0
}

namespace eval enginelist {}

set engines(list) {}

# engine:
#   Adds an engine to the engine list.
#   Calls to this function will be found in the user engines.lis
#   file, which is sourced below.
#
proc engine {arglist} {
    global engines
    array set newEngine {}
    foreach {attr value} $arglist {
        set newEngine($attr) $value
    }
    # Check that required attributes exist:
    if {! [info exists newEngine(Name)]} { return  0 }
    if {! [info exists newEngine(Cmd)]} { return  0 }
    if {! [info exists newEngine(Dir)]} { return  0 }
    # Fill in optional attributes:
    if {! [info exists newEngine(Args)]} { set newEngine(Args) "" }
    if {! [info exists newEngine(Elo)]} { set newEngine(Elo) 0 }
    if {! [info exists newEngine(Time)]} { set newEngine(Time) 0 }
    if {! [info exists newEngine(URL)]} { set newEngine(URL) "" }
    # puts this option here for compatibility with previous file format (?!)
    if {! [info exists newEngine(UCI)]} { set newEngine(UCI) 0 }
    if {! [info exists newEngine(UCIoptions)]} { set newEngine(UCIoptions) "" }
    
    lappend engines(list) [list $newEngine(Name) $newEngine(Cmd) \
            $newEngine(Args) $newEngine(Dir) \
            $newEngine(Elo) $newEngine(Time) \
            $newEngine(URL) $newEngine(UCI) $newEngine(UCIoptions)]
    return 1
}

# ::enginelist::read
#   Reads the user Engine list file.
#
proc ::enginelist::read {} {
    catch {source [scidConfigFile engines]}
}

# ::enginelist::write:
#   Writes the user Engine list file.
#
proc ::enginelist::write {} {
    global engines ::uci::newOptions
    
    set enginesFile [scidConfigFile engines]
    set enginesBackupFile [scidConfigFile engines.bak]
    # Try to rename old file to backup file and open new file:
    catch {file rename -force $enginesFile $enginesBackupFile}
    if {[catch {open $enginesFile w} f]} {
        catch {file rename $enginesBackupFile $enginesFile}
        return 0
    }
    
    puts $f "\# Analysis engines list file for Scid [sc_info version] with UCI support"
    puts $f ""
    foreach e $engines(list) {
        set name [lindex $e 0]
        set cmd [lindex $e 1]
        set args [lindex $e 2]
        set dir [lindex $e 3]
        set elo [lindex $e 4]
        set time [lindex $e 5]
        set url [lindex $e 6]
        set uci [lindex $e 7]
        set opt [lindex $e 8]
        puts $f "engine {"
            puts $f "  Name [list $name]"
            puts $f "  Cmd  [list $cmd]"
            puts $f "  Args [list $args]"
            puts $f "  Dir  [list $dir]"
            puts $f "  Elo  [list $elo]"
            puts $f "  Time [list $time]"
            puts $f "  URL  [list $url]"
            puts $f "  UCI [list $uci]"
            puts $f "  UCIoptions [list $opt]"
            puts $f "}"
        puts $f ""
    }
    close $f
    return 1
}

# Read the user Engine List file now:
#
catch { ::enginelist::read }
if {[llength $engines(list)] == 0} {
    # No engines, so set up a default engine list:
    set scidlet "scidlet"
    set phalanx "phalanx-scid"
    set togaII "togaII"
    if { $::windowsOS } {
        set scidlet "scidlet.exe"
        set phalanx "phalanx-scid.exe"
        set togaII "TogaII.exe"
    }
    set scidEngPaths [list $::scidExeDir [file join $::scidExeDir "engines" ] [file join $::scidShareDir "engines" ] \
            [ file join $::scidUserDir "engines" ]  [ file join usr local share scid engines ] \
            [ file join usr local bin ] [ file join  usr bin ] [ file join usr local games ] [ file join usr games ] \
            [file join $::scidExeDir "engines" "phalanx-scid" ] [file join $::scidExeDir "engines" "togaII1.2.1a" "src" ] ]
    
    # The next four lists should have the same length!
    set scidEngCmds [list $phalanx $togaII $scidlet ]
    set scidEngNames [list "Phalanx-Scid" "Toga II" "Scidlet" ]
    array set parentDirs "
    $phalanx { phalanx-scid Phalanx-XXII }
    $togaII  { togaII1.2.1a toga togaII [ file join togaII1.2.1a src ] }
    $scidlet { . }
    "
    
    set isUCI [list 0 1 0 ]
    
    # Let's search the engines:
    foreach cmd $scidEngCmds name $scidEngNames uci $isUCI {
        set leave 0
        foreach path $scidEngPaths {
            set c [ file join $path $cmd]
            if { [file executable $c ] && ! [ file isdirectory $c ] } {
                engine [list \
                        Name $name \
                        Cmd  $c \
                        Dir  . \
                        UCI  $uci \
                        UCIoptions {} \
                        ]
                set leave 1
            } else {
                foreach parent $parentDirs($cmd) {
                    set c [ file join $path $parent $cmd ]
                    if { [file executable $c] && ! [ file isdirectory $c ] } {
                        engine [list \
                                Name $name \
                                Cmd  $c \
                                Dir  . \
                                UCI  $uci \
                                UCIoptions {} \
                                ]
                        set leave 1
                        break
                    }
                }
            }
            if { $leave } { break }
        }
    }
}

# ::enginelist::date
#   Given a time in seconds since 1970, returns a
#   formatted date string.
proc ::enginelist::date {time} {
    return [clock format $time -format "%a %b %d %Y %H:%M"]
}

# ::enginelist::sort
#   Sort the engine list.
#   If the engine-open dialog is open, its list is updated.
#   The type defaults to the current engines(sort) value.
#
proc ::enginelist::sort {{type ""}} {
    global engines
    
    if {$type == ""} {
        set type $engines(sort)
    } else {
        set engines(sort) $type
    }
    switch $type {
        Name {
            set engines(list) [lsort -dictionary -index 0 $engines(list)]
        }
        Elo {
            set engines(list) [lsort -integer -decreasing -index 4 $engines(list)]
        }
        Time {
            set engines(list) [lsort -integer -decreasing -index 5 $engines(list)]
        }
    }
    
    # If the Engine-open dialog is open, update it:
    #
    set w .enginelist
    if {! [winfo exists $w]} { return }
    set f $w.list.list
    $f delete 0 end
    set count 0
    foreach engine $engines(list) {
        incr count
        set name [lindex $engine 0]
        set elo [lindex $engine 4]
        set time [lindex $engine 5]
        set uci [lindex $engine 7]
        set date [::enginelist::date $time]
        set text [format "%2u. %-21s " $count $name]
        set eloText "    "
        if {$elo > 0} { set eloText [format "%4u" $elo] }
        append text $eloText
        set timeText "  "
        if {$time > 0} { set timeText "   $date" }
        append text $timeText
        $f insert end $text
    }
    $f selection set 0
    
    # Show the sorted column heading in red text:
    $w.title configure -state normal
    foreach i {Name Elo Time} {
        $w.title tag configure $i -foreground {}
    }
    $w.title tag configure $engines(sort) -foreground red
    $w.title configure -state disabled
}
################################################################################
# ::enginelist::choose
#   Select an engine from the Engine List.
#   Returns an integer index into the engines(list) list variable.
#   If no engine is selected, returns the empty string.
################################################################################
proc ::enginelist::choose {} {
    global engines
    set w .enginelist
    if {[winfo exists $w]} {
        raise .enginelist
        return }
    toplevel $w
    ::setTitle $w "Scid: [tr ToolsAnalysis]"
    ttk::label $w.flabel -text $::tr(EngineList:) -font font_Bold -anchor center
    pack $w.flabel -side top -expand 1 -fill both
    
    pack [ttk::frame $w.buttons] -side bottom -fill x
    ttk::frame $w.rule -height 2 -borderwidth 2 -relief sunken
    pack $w.rule -side bottom -fill x
    
    # Set up title frame for sorting the list:
    text $w.title -width 55 -height 1 -font font_Fixed -relief flat \
            -cursor top_left_arrow
    $w.title insert end "    "
    $w.title insert end $::tr(EngineName) Name
    for {set i [string length $::tr(EngineName)]} {$i < 21} { incr i } {
        $w.title insert end " "
    }
    $w.title insert end "  "
    $w.title insert end $::tr(EngineElo) Elo
    for {set i [string length $::tr(EngineElo)]} {$i < 4} { incr i } {
        $w.title insert end " "
    }
    $w.title insert end "  "
    $w.title insert end $::tr(EngineTime) Time
    foreach i {Name Elo Time} {
        $w.title tag bind $i <Any-Enter> \
                "$w.title tag configure $i -background yellow"
        $w.title tag bind $i <Any-Leave> \
                "$w.title tag configure $i -background {}"
        $w.title tag bind $i <1> [list ::enginelist::sort $i]
    }
    $w.title configure -state disabled
    pack $w.title -side top -fill x
    
    # The list of choices:
    set f $w.list
    pack [ttk::frame $f] -side top -expand yes -fill both
    listbox $f.list -height 10 -width 55  -selectmode browse \
            -background white -setgrid 1 \
            -yscrollcommand "$f.ybar set" -font font_Fixed -exportselection 0
    bind $f.list <Double-ButtonRelease-1> "$w.buttons.ok invoke; break"
    ttk::scrollbar $f.ybar -command "$f.list yview"
    pack $f.ybar -side right -fill y
    pack $f.list -side top -fill both -expand yes
    $f.list selection set 0
    
    set f $w.buttons
    dialogbutton $f.add -text $::tr(EngineNew...) -command {::enginelist::edit -1}
    dialogbutton $f.edit -text $::tr(EngineEdit...) -command {
        ::enginelist::edit [lindex [.enginelist.list.list curselection] 0]
    }
    dialogbutton $f.delete -text $::tr(Delete...) -command {
        ::enginelist::delete [lindex [.enginelist.list.list curselection] 0]
    }
    ttk::label $f.sep -text "   "
    dialogbutton $f.ok -text "OK" -command {
        set engines(selection) [lindex [.enginelist.list.list curselection] 0]
        destroy .enginelist
    }
    dialogbutton $f.cancel -text $::tr(Cancel) -command {
        set engines(selection) ""
        destroy .enginelist
    }
    packbuttons right $f.cancel $f.ok
    pack $f.add $f.edit $f.delete -side left -padx 1
    
    ::enginelist::sort
    ::utils::win::Centre $w
    focus $w.list.list
    wm protocol $w WM_DELETE_WINDOW "destroy $w"
    bind $w <F1> { helpWindow Analysis List }
    bind $w <Escape> "destroy $w"
    bind $w.list.list <Return> "$w.buttons.ok invoke; break"
    set engines(selection) ""
    catch {grab $w}
    tkwait window $w
    return $engines(selection)
}

# ::enginelist::setTime
#   Sets the last-opened time of the engine specified by its
#   index in the engines(list) list variable.
#   The time should be in standard format (seconds since 1970)
#   and defaults to the current time.
#
proc ::enginelist::setTime {index {time -1}} {
    global engines
    set e [lindex $engines(list) $index]
    if {$time < 0} { set time [clock seconds] }
    set e [lreplace $e 5 5 $time]
    set engines(list) [lreplace $engines(list) $index $index $e]
}

trace variable engines(newElo) w [list ::utils::validate::Integer [sc_info limit elo] 0]

# ::enginelist::delete
#   Removes an engine from the list.
#
proc ::enginelist::delete {index} {
    global engines
    if {$index == ""  ||  $index < 0} { return }
    set e [lindex $engines(list) $index]
    set msg "Name: [lindex $e 0]\n"
    append msg "Command: [lindex $e 1]\n\n"
    append msg "Do you really want to remove this engine from the list?"
    set answer [tk_messageBox -title Scid -icon question -type yesno \
            -message $msg]
    if {$answer == "yes"} {
        set engines(list) [lreplace $engines(list) $index $index]
        ::enginelist::sort
        ::enginelist::write
    }
}

# ::enginelist::edit
#   Opens a dialog for editing an existing engine list entry (if
#   index >= 0), or adding a new entry (if index is -1).
#
proc ::enginelist::edit {index} {
    global engines
    if {$index == ""} { return }
    
    if {$index >= 0  ||  $index >= [llength $engines(list)]} {
        set e [lindex $engines(list) $index]
    } else {
        set e [list "" "" "" . 0 0 "" 1]
    }
    
    set engines(newIndex) $index
    set engines(newName) [lindex $e 0]
    set engines(newCmd) [lindex $e 1]
    set engines(newArgs) [lindex $e 2]
    set engines(newDir) [lindex $e 3]
    set engines(newElo) [lindex $e 4]
    set engines(newTime) [lindex $e 5]
    set engines(newURL) [lindex $e 6]
    set engines(newUCI) [lindex $e 7]
    set engines(newUCIoptions) [lindex $e 8]
    
    set engines(newDate) $::tr(None)
    if {$engines(newTime) > 0 } {
        set engines(newDate) [::enginelist::date $engines(newTime)]
    }
    
    set w .engineEdit
    toplevel $w
    ::setTitle $w Scid
    
    set f [ttk::frame $w.f]
    pack $f -side top -fill x -expand yes
    set row 0
    foreach i {Name Cmd Args Dir URL} {
        ttk::label $f.l$i -text $i
        if {[info exists ::tr(Engine$i)]} {
            $f.l$i configure -text $::tr(Engine$i)
        }
        ttk::entry $f.e$i -textvariable engines(new$i) -width 40
        bindFocusColors $f.e$i
        grid $f.l$i -row $row -column 0 -sticky w
        grid $f.e$i -row $row -column 1 -sticky we
        
        # Browse button for choosing an executable file:
        if {$i == "Cmd"} {
            ttk::button $f.b$i -text "..." -command {
                if {$::windowsOS} {
                    set scid_temp(filetype) {
                        {"Applications" {".bat" ".exe"} }
                        {"All files" {"*"} }
                    }
                } else {
                    set scid_temp(filetype) {
                        {"All files" {"*"} }
                    }
                }
                set scid_temp(cmd) [tk_getOpenFile -initialdir $engines(newDir) \
                        -title "Scid: [tr ToolsAnalysis]" -filetypes $scid_temp(filetype)]
                if {$scid_temp(cmd) != ""} {
                    set engines(newCmd) $scid_temp(cmd)
                    # if {[string first " " $scid_temp(cmd)] >= 0} {
                    # The command contains spaces, so put it in quotes:
                    # set engines(newCmd) "\"$scid_temp(cmd)\""
                    # }
                    # Set the directory from the executable path if possible:
                    set engines(newDir) [file dirname $scid_temp(cmd)]
                    if {$engines(newDir) == ""} [ set engines(newDir) .]
                }
            }
            grid $f.b$i -row $row -column 2 -sticky we
        }
        
        if {$i == "Dir"} {
            ttk::button $f.current -text " . " -command {
                set engines(newDir) .
            }
            ttk::button $f.user -text "~/.scid" -command {
                set engines(newDir) $scidUserDir
            }
            if {$::windowsOS} {
                $f.user configure -text "scid.exe dir"
            }
            grid $f.current -row $row -column 2 -sticky we
            grid $f.user -row $row -column 3 -sticky we
        }
        
        if {$i == "URL"} {
            ttk::button $f.bURL -text [tr FileOpen] -command {
                if {$engines(newURL) != ""} { openURL $engines(newURL) }
            }
            grid $f.bURL -row $row -column 2 -sticky we
        }
        
        incr row
    }
    
    grid columnconfigure $f 1 -weight 1
    
    ttk::checkbutton $f.cbUci -text UCI -variable engines(newUCI) -style Bold.TCheckbutton
    ttk::button $f.bConfigUCI -text $::tr(ConfigureUCIengine) -command {
        ::uci::uciConfig 2 [ toAbsPath $engines(newCmd) ] $engines(newArgs) \
                [ toAbsPath $engines(newDir) ] $engines(newUCIoptions)
    }
    # Mark required fields:
    $f.lName configure -font font_Bold
    $f.lCmd configure -font font_Bold
    $f.lDir configure -font font_Bold
    # $f.cbUci configure -font font_Bold
    
    ttk::label $f.lElo -text $::tr(EngineElo)
    ttk::entry $f.eElo -textvariable engines(newElo) -justify right -width 5
    bindFocusColors $f.eElo
    grid $f.lElo -row $row -column 0 -sticky w
    grid $f.eElo -row $row -column 1 -sticky w
    incr row
    grid $f.cbUci -row $row -column 0 -sticky w
    grid $f.bConfigUCI -row $row -column 1 -sticky w
    incr row
    
    ttk::label $f.lTime -text $::tr(EngineTime)
    ttk::label $f.eTime -textvariable engines(newDate) -anchor w -width 1
    grid $f.lTime -row $row -column 0 -sticky w
    grid $f.eTime -row $row -column 1 -sticky we
    ttk::button $f.clearTime -text $::tr(Clear) -command {
        set engines(newTime) 0
        set engines(newDate) $::tr(None)
    }
    ttk::button $f.nowTime -text $::tr(Update) -command {
        set engines(newTime) [clock seconds]
        set engines(newDate) [::enginelist::date $engines(newTime)]
    }
    grid $f.clearTime -row $row -column 2 -sticky we
    grid $f.nowTime -row $row -column 3 -sticky we
    
    addHorizontalRule $w
    
    set f [ttk::frame $w.buttons]
    ttk::button $f.ok -text OK -command {
        if {[string trim $engines(newName)] == ""  ||
            [string trim $engines(newCmd)] == ""  ||
            [string trim $engines(newDir)] == ""} {
            tk_messageBox -title Scid -icon info \
                    -message "The Name, Command and Directory fields must not be empty."
        } else {
            set newEntry [list $engines(newName) $engines(newCmd) \
                    $engines(newArgs) $engines(newDir) \
                    $engines(newElo) $engines(newTime) \
                    $engines(newURL) $engines(newUCI) $::uci::newOptions ]
            if {$engines(newIndex) < 0} {
                lappend engines(list) $newEntry
            } else {
                set engines(list) [lreplace $engines(list) \
                        $engines(newIndex) $engines(newIndex) $newEntry]
            }
            destroy .engineEdit
            ::enginelist::sort
            ::enginelist::write
            focus .enginelist
        }
    }
    ttk::button $f.cancel -text $::tr(Cancel) -command "destroy $w ; focus .enginelist"
    pack $f -side bottom -fill x
    pack $f.cancel $f.ok -side right -padx 2 -pady 2
    ttk::label $f.required -font font_Small -text $::tr(EngineRequired)
    pack $f.required -side left
    
    bind $w <Return> "$f.ok invoke"
    bind $w <Escape> "destroy $w ; focus .enginelist "
    bind $w <F1> { helpWindow Analysis List }
    focus $w.f.eName
    wm resizable $w 1 0
    catch {grab $w}
}
# ################################################################################
#
################################################################################
proc configAnnotation {} {
    global autoplayDelay tempdelay blunderThreshold annotateModeButtonValue
    
    set w .configAnnotation
    # Do not do anyting if the window exists
    #
    if { [winfo exists $w] } {
        raise $w
        focus $w
        return
    }
    
    # If the annotation button is pressed while annotation is
    # running, stop the annotation
    #
    if { ! $annotateModeButtonValue } {
        toggleAutoplay
        return
    }
    
    trace variable blunderThreshold w {::utils::validate::Regexp {^[0-9]*\.?[0-9]*$}}
    
    set tempdelay [expr {$autoplayDelay / 1000.0}]
    toplevel $w
    ::setTitle $w "Scid"
    wm resizable $w 0 0
    set f [ttk::frame $w.f]
    pack $f -expand 1
    ttk::label $f.label -text $::tr(AnnotateTime:)
    pack $f.label -side top
    spinbox $f.spDelay -background white -width 4 -textvariable tempdelay -from 1 -to 999 -increment 1
    pack $f.spDelay -side top -pady 5
    bind $w <Escape> { .configAnnotation.f.buttons.cancel invoke }
    bind $w <Return> { .configAnnotation.f.buttons.ok invoke }
    
    addHorizontalRule $f
    ttk::label        $f.avlabel -text $::tr(AnnotateWhich:)
    ttk::radiobutton  $f.all     -text $::tr(AnnotateAll)   -variable annotateMoves -value all
    ttk::radiobutton  $f.white   -text $::tr(AnnotateWhite) -variable annotateMoves -value white
    ttk::radiobutton  $f.black   -text $::tr(AnnotateBlack) -variable annotateMoves -value black
    pack $f.avlabel -side top
    pack $f.all $f.white $f.black -side top -fill x -anchor w

    addHorizontalRule $f
    
    ttk::radiobutton  $f.allmoves     -text $::tr(AnnotateAllMoves)     -variable annotateBlunders -value allmoves
    ttk::radiobutton  $f.blundersonly -text $::tr(AnnotateBlundersOnly) -variable annotateBlunders -value blundersonly
    pack $f.allmoves $f.blundersonly -side top -fill x -anchor w
    
    ttk::frame $f.blunderbox
    pack $f.blunderbox -side top -padx 5 -pady 5
    
    ttk::label $f.blunderbox.label -text $::tr(BlundersThreshold:)
    spinbox $f.blunderbox.spBlunder -background white -width 4 -textvariable blunderThreshold \
            -from 0.1 -to 3.0 -increment 0.1
    pack $f.blunderbox.label $f.blunderbox.spBlunder -side left -padx 5 -pady 5
    
    addHorizontalRule $f
    ttk::checkbutton  $f.cbAnnotateVar      -text $::tr(AnnotateVariations)         -variable ::isAnnotateVar
    ttk::checkbutton  $f.cbShortAnnotation  -text $::tr(ShortAnnotations)           -variable ::isShortAnnotation
    ttk::checkbutton  $f.cbAddScore         -text $::tr(AddScoreToShortAnnotations) -variable ::addScoreToShortAnnotations
    ttk::checkbutton  $f.cbAddAnnotatorTag  -text $::tr(addAnnotatorTag)            -variable ::addAnnotatorTag
    pack $f.cbAnnotateVar $f.cbShortAnnotation $f.cbAddScore $f.cbAddAnnotatorTag -fill x -anchor w

    addHorizontalRule $f

    # Checkmark to enable all-move-scoring
    #
    ttk::checkbutton  $f.scoreAll -text $::tr(ScoreAllMoves) -variable scoreAllMoves
    pack $f.scoreAll -fill x -anchor w
    
    # choose a book for analysis
    addHorizontalRule $f
    ttk::checkbutton $f.cbBook  -text $::tr(UseBook) -variable ::useAnalysisBook
    # load book names
    set bookPath $::scidBooksDir
    set bookList [  lsort -dictionary [ glob -nocomplain -directory $bookPath *.bin ] ]
    
    # No book found
    if { [llength $bookList] == 0 } {
        set ::useAnalysisBook 0
        $f.cbBook configure -state disabled
    }
    
    set tmp {}
    set idx 0
    set i 0
    foreach file  $bookList {
        lappend tmp [ file tail $file ]
        if {$::book::lastBook == [ file tail $file ] } {
            set idx $i
        }
        incr i
    }
    ttk::combobox $f.comboBooks -width 12 -values $tmp
    catch { $f.comboBooks current $idx }
    pack $f.cbBook $f.comboBooks -side top
    
    addHorizontalRule $f
    
    # batch annotation of consecutive games, and optional opening errors finder
    ttk::frame $f.batch
    pack $f.batch -side top -fill x
    set to [sc_base numGames]
    if {$to <1} { set to 1}
    ttk::checkbutton $f.batch.cbBatch -text $::tr(AnnotateSeveralGames) -variable ::isBatch
    spinbox $f.batch.spBatchEnd -background white -width 8 -textvariable ::batchEnd \
            -from 1 -to $to -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    ttk::checkbutton $f.batch.cbBatchOpening -text $::tr(FindOpeningErrors) -variable ::isBatchOpening
    spinbox $f.batch.spBatchOpening -background white -width 2 -textvariable ::isBatchOpeningMoves \
            -from 10 -to 20 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    ttk::label $f.batch.lBatchOpening -text $::tr(moves)
    # pack $w.batch.cbBatch $w.batch.spBatchEnd -side top -fill x
    # pack $w.batch.cbBatchOpening $w.batch.spBatchOpening $w.batch.lBatchOpening  -side left -fill x
    grid $f.batch.cbBatch -column 0 -row 0 -sticky w
    grid $f.batch.spBatchEnd -column 1 -row 0 -sticky w
    grid $f.batch.cbBatchOpening -column 0 -row 1 -sticky w
    grid $f.batch.spBatchOpening -column 1 -row 1 -sticky e
    grid $f.batch.lBatchOpening -column 2 -row 1 -sticky w
    set ::batchEnd $to
    
    ttk::checkbutton $f.batch.cbMarkTactics -text $::tr(MarkTacticalExercises) -variable ::markTacticalExercises
    grid $f.batch.cbMarkTactics -column 0 -row 2 -sticky w
    if {! $::analysis(uci1)} {
        set ::markTacticalExercises 0
        $f.batch.cbMarkTactics configure -state disabled
    }
    
    addHorizontalRule $f
    ttk::frame $f.buttons
    pack $f.buttons -side top -fill x
    ttk::button $f.buttons.cancel -text $::tr(Cancel) -command {
        destroy .configAnnotation
        set annotateModeButtonValue 0
    }
    ttk::button $f.buttons.ok -text "OK" -command {
        set ::useAnalysisBookName [.configAnnotation.f.comboBooks get]
        set ::book::lastBook $::useAnalysisBookName
        
        # tactical positions is selected, must be in multipv mode
        if {$::markTacticalExercises} {
            if { $::analysis(multiPVCount1) < 2} {
                # TODO: Why not put it at the (apparent) minimum of 2?
                #
                set ::analysis(multiPVCount1) 4
                changePVSize 1
            }
        }
        
        if {$tempdelay < 0.1} { set tempdelay 0.1 }
        set autoplayDelay [expr {int($tempdelay * 1000)}]
        destroy .configAnnotation
        cancelAutoplay
        set annotateModeButtonValue 1
        # Tell the analysis mode that we want an initial assessment of the
        # position. So: no comments yet, please!
        set ::initialAnalysis 1
        # And start the time slicer
        toggleAutoplay
    }
    pack $f.buttons.cancel $f.buttons.ok -side right -padx 5 -pady 5
    focus $f.spDelay
    bind $w <Destroy> { focus . }
}
################################################################################
# Part of annotation process : will check the moves if they are in te book, and add a comment
# when going out of it
################################################################################
proc bookAnnotation { {n 1} } {
    global analysis
    
    if {$::annotateMode && $::useAnalysisBook} {
        
        set prevbookmoves ""
        set bn [ file join $::scidBooksDir $::useAnalysisBookName ]
        sc_book load $bn $::analysisBookSlot
        
        set bookmoves [sc_book moves $::analysisBookSlot]
        while {[string length $bookmoves] != 0 && ![sc_pos isAt vend]} {
            # we are in book, so move immediately forward
            ::move::Forward
            set prevbookmoves $bookmoves
            set bookmoves [sc_book moves $::analysisBookSlot]
        }
        sc_book close $::analysisBookSlot
        set ::wentOutOfBook 1
        
        set verboseMoveOutOfBook " $::tr(MoveOutOfBook)"
        set verboseLastBookMove " $::tr(LastBookMove)"
        
        set theCatch 0
        if { [ string match -nocase "*[sc_game info previousMoveNT]*" $prevbookmoves ] != 1 } {
            if {$prevbookmoves != ""} {
                sc_pos setComment "[sc_pos getComment]$verboseMoveOutOfBook [::trans $prevbookmoves]"
            } else  {
                sc_pos setComment "[sc_pos getComment]$verboseMoveOutOfBook"
            }
            # last move was out of book: it needs to be analyzed, so take back
            #
            set theCatch [catch {sc_move back 1}]
        } else  {
            sc_pos setComment "[sc_pos getComment]$verboseLastBookMove"
        }
        
        if { ! $theCatch } {
            resetAnalysis
            updateBoard -pgn
        }
        set analysis(prevscore$n)     $analysis(score$n)
        set analysis(prevmoves$n)     $analysis(moves$n)
        set analysis(prevscoremate$n) $analysis(scoremate$n)
        set analysis(prevdepth$n)     $analysis(depth$n)
    }
}
################################################################################
# Will add **** to any position considered as a tactical shot
# returns 1 if an exercise was marked, 0 if for some reason it was not (obvious move for example)
################################################################################
proc markExercise { prevscore score nag} {
    
    sc_pos addNag $nag
    
    if {!$::markTacticalExercises} { return 0 }
    
    # check at which depth the tactical shot is found
    # this assumes analysis by an UCI engine
    if {! $::analysis(uci1)} { return 0 }
    
    set deltamove [expr {$score - $prevscore}]
    # filter tactics so only those with high gains are kept
    if { [expr abs($deltamove)] < $::informant("+/-") } { return 0 }
    # dismiss games where the result is already clear (high score,and we continue in the same way)
    if { [expr $prevscore * $score] >= 0} {
        if { [expr abs($prevscore) ] > $::informant("++-") } { return 0 }
        if { [expr abs($prevscore)] > $::informant("+-") && [expr abs($score) ] < [expr 2 * abs($prevscore)]} { return 0 }
    }
    
    # The best move is much better than others.
    if { [llength $::analysis(multiPV1)] < 2 } {
        puts "error, not enough PV"
        return 0
    }
    set sc2 [lindex [ lindex $::analysis(multiPV1) 1 ] 1]
    if { [expr abs( $score - $sc2 )] < 1.5 } { return 0 }
    
    # There is no other winning moves (the best move may not win, of course, but
    # I reject exercises when there are e.g. moves leading to +9, +7 and +5 scores)
    if { [expr $score * $sc2] > 0.0 && [expr abs($score)] > $::informant("+-") && [expr abs($sc2)] > $::informant("+-") } {
        return 0
    }
    
    # The best move does not lose position.
    if {[sc_pos side] == "white" && $score < [expr 0.0 - $::informant("+/-")] } { return 0 }
    if {[sc_pos side] == "black" && $score > $::informant("+/-") } { return 0}
    
    # Move is not obvious: check that it is not the first move guessed at low depths
    set pv [ lindex [ lindex $::analysis(multiPV1) 0 ] 2 ]
    set bm0 [lindex $pv 0]
    foreach depth {1 2 3} {
        set res [ sc_pos analyze -time 1000 -hashkb 32 -pawnkb 1 -searchdepth $depth ]
        set bm$depth [lindex $res 1]
    }
    if { $bm0 == $bm1 && $bm0 == $bm2 && $bm0 == $bm3 } {
        puts "obvious move"
        return 0
    }
    
    # find what time is needed to get the solution (use internal analyze function)
    set timer {1 2 5 10 50 100 200 1000}
    set movelist {}
    for {set t 0} {$t < [llength $timer]} { incr t} {
        set res [sc_pos analyze -time [lindex $timer $t] -hashkb 1 -pawnkb 1 -mindepth 0]
        set move_analyze [lindex $res 1]
        lappend movelist $move_analyze
    }
    
    # find at what timing the right move was reliably found
    # only the move is checked, not if the score is close to the expected one
    for {set t [expr [llength $timer] -1]} {$t >= 0} { incr t -1} {
        if { [lindex $movelist $t] != $bm0 } {
            break
        }
    }
    
    set difficulty [expr $t +2]
    
    puts "flag T pour [sc_game number] difficulty $difficulty"
    # If the base opened is read only, like a PGN file, avoids an exception
    catch { sc_game flag T [sc_game number] 1 }
    sc_pos setComment "****D${difficulty} [format %.1f $prevscore]->[format %.1f $score] [sc_pos getComment]"
    updateBoard
    
    return 1
}
################################################################################
#
################################################################################
proc addAnnotation { {n 1} } {
    global analysis annotateMoves annotateBlunders annotateMode blunderThreshold scoreAllMoves autoplayDelay
    
    # Check if we only need to register an initial
    # assessment of the position
    # If so, we do not generate any annotation yet
    #
    if { $::initialAnalysis } {
        set ::initialAnalysis 0
        
        if { $::isBatchOpening && ([sc_pos moveNumber] < $::isBatchOpeningMoves ) } {
            appendAnnotator "opBlunder [sc_pos moveNumber] ([sc_pos side])"
        }
        if { $::addAnnotatorTag } {
            appendAnnotator "$analysis(name1) ([expr {$autoplayDelay / 1000}] sec)"
        }
        
        set analysis(prevscore$n)     $analysis(score$n)
        set analysis(prevmoves$n)     $analysis(moves$n)
        set analysis(prevscoremate$n) $analysis(scoremate$n)
        set analysis(prevdepth$n)     $analysis(depth$n)
        
        return
    }
    
    # Check if we are at the start of a subline
    # If so, we will not include the engine line as a variation.
    # Rationale: this line cannot be different from the line for the
    # main move, that we will include anyway.
    #
    set skipEngineLine $::atStartOfLine
    set ::atStartOfLine 0
            
    # First look in the book selected
    # TODO: Is this dead code by now?
    # TODO: Seek for an opportunity to do book analysis on a move by
    #       move basis, thus allowing variations to be included
    #
    if { ! $::wentOutOfBook && $::useAnalysisBook } {
        bookAnnotation
        return
    }
    
    # Let's try to assess the situation:
    # We are here, now that the engine has analyzed the position reached by
    # our last move. Currently it is the opponent to move:
    #
    set tomove [sc_pos side]

    # And this is his best line:
    #
    set moves $analysis(moves$n)
    # For non-uci lines, trim space characters in <moveno>.[ *][...]<move> 
    set moves [regsub -all {\. *} $moves {.}]
    
    # The best line we could have followed, and the game move we just played instead, are here:
    #
    set prevmoves $analysis(prevmoves$n)
    # For non-uci lines, trim space characters in <moveno>.[ *][...]<move> 
    set prevmoves [regsub -all {\. *} $prevmoves {.}]

    set gamemove  [sc_game info previousMoveNT]
    
    # Bail out if we have a mate
    #
    if { [expr { [string index $gamemove end] == "#" }] } {
        set analysis(prevscore$n)     $analysis(score$n)
        set analysis(prevmoves$n)     $analysis(moves$n)
        set analysis(prevscoremate$n) $analysis(scoremate$n)
        set analysis(prevdepth$n)     $analysis(depth$n)
        return
    }
    
    # We will add a closing line at the end of variation or game
    #
    set addClosingLine 0
    if {  [sc_pos isAt vend] } {
        set addClosingLine 1
    }

    # We do not want to insert a best-line variation into the game
    # if we did play along that line. Even not when annotating all moves.
    # It simply makes no sense to do so (unless we are debugging the engine!)
    # Sooner or later the game will deviate anyway; a variation at that point will
    # do nicely and is probably more accurate as well.
    #
    set bestMovePlayed 0
    set bestMoveIsMate 0
    if { $prevmoves != "" } {
        # Following lines of code have only one goal:
        # Transform an engine move (e.g. "g1f3") into the short notation that we use
        # for moves in our games ("Nf3"), such that they can be (string) compared.
        # We create a scratch copy of the game, add the engine move and then ask
        # the game about the most recent move that was played.
        # This might not be the most subtle solution...
        sc_game push copyfast
        set bestmove [lindex $prevmoves 0]
        sc_move back 1
        sc_move_add $bestmove $n
        set bestmove [sc_game info previousMoveNT]
        sc_game pop
        
        if { $bestmove == $gamemove } {
            set bestMovePlayed 1
        }
        
        # Did we miss a mate in one?
        #
        set bestMoveIsMate [expr { [string index $bestmove end] == "#" }]
    }
    
    
    # As said, another reason not to include the engine line
    #
    set skipEngineLine [expr {$skipEngineLine + $bestMovePlayed}]

    # As to the engine evaluations
    # This is score the opponent will have if he plays his best move next
    #
    set score $analysis(score$n)
    
    # This is the score we could have had if we had played our best move
    #
    set prevscore $analysis(prevscore$n)
    
    # Let's help the engine a bit...
    # It makes no sense to criticise the players for moving insights at
    # engine end. So we upgrade the old score to the new score if the lines
    # start with the same move.
    #
    if { $bestMovePlayed } {
        set prevscore $score
    }
    
    # Note that the engine's judgement is in absolute terms, a negative score
    # being favorable to black, a positive score favorable to white
    # Looking primarily for blunders, we are interested in the score decay,
    # which, for white, is (previous-current)
    #
    set deltamove [expr {$prevscore - $score}]
    # and whether the game was already lost for us
    #
    set gameIsLost [expr {$prevscore < (0.0 - $::informant("++-"))}]
    
    # Invert this logic for black
    #
    if { $tomove == "white" } {
        set deltamove [expr {0.0 - $deltamove}]
        set gameIsLost [expr {$prevscore > $::informant("++-")}] 
    }
    
    # Note btw that if the score decay is - unexpectedly - negative, we played
    # a better move than the engine's best line!
    
    # Set an "isBlunder" filter.
    # Let's mark moves with a decay greater than the threshold.
    #
    set isBlunder 0
    if { $deltamove > $blunderThreshold } {
        set isBlunder 2
    } elseif { $deltamove > 0 } {
        set isBlunder 1
    }
    
    set absdeltamove [expr { abs($deltamove) } ]
    
    set exerciseMarked 0
    
    # to parse scores if the engine's name contains - or + chars (see sc_game_scores)
    #
    set engine_name  [string map {"-" " " "+" " "} $analysis(name$n)]
    
    # Prepare score strings for the opponent
    #
    if { $analysis(scoremate$n) != 0 } {
        set text [format "%d:M%d" $analysis(depth$n) $analysis(scoremate$n)]
    } else {
        set text [format "%d:%+.2f" $analysis(depth$n) $score]
    }
    # And for the my (missed?) chance
    #
    if { $analysis(prevscoremate$n) != 0 } {
        set prevtext [format "%d:M%d" $analysis(prevdepth$n) $analysis(prevscoremate$n)]
    } else {
        set prevtext [format "%d:%+.2f" $analysis(prevdepth$n) $prevscore]
    }
    
    # Must we annotate our own moves? If no, we bail out unless
    # - we must add a closing line
    #
    if { ( $annotateMoves == "white"  &&  $tomove == "white" ||
           $annotateMoves == "black"  &&  $tomove == "black"   ) && ! $addClosingLine } {
        set analysis(prevscore$n)     $analysis(score$n)
        set analysis(prevmoves$n)     $analysis(moves$n)
        set analysis(prevscoremate$n) $analysis(scoremate$n)
        set analysis(prevdepth$n)     $analysis(depth$n)
        
        # Add score for this position anyway if this is configured
        #
        if { $scoreAllMoves } {
            sc_pos setComment "[sc_pos getComment] $text"
        }

        # Update the board
        #
        updateBoard -pgn
    
        # Update score graph if it is open
        #
        if {[winfo exists .sgraph]} { ::tools::graphs::score::Refresh }
        return
    }
    

    # See if we have the threshold filter activated.
    # If so, take only bad moves and missed mates until the position is lost anyway
    #
    # Or that we must annotate all moves
    #
    if {  (  $annotateBlunders == "blundersonly"
          && ($isBlunder > 1 || ($isBlunder > 0 && [expr abs($score)] >= 327.0))
          && ! $gameIsLost)
       || ($annotateBlunders == "allmoves") } {
        if { $isBlunder > 0 } {
            # Add move score nag, and possibly an exercise
            #
            if {       $absdeltamove > $::informant("??") } {
                set exerciseMarked [ markExercise $prevscore $score "??" ]
            } elseif { $absdeltamove > $::informant("?")  } {
                set exerciseMarked [ markExercise $prevscore $score "?" ]
            } elseif { $absdeltamove > $::informant("?!") } {
                sc_pos addNag "?!"
            }
        } elseif { $absdeltamove > $::informant("!?") } {
            sc_pos addNag "!?"
        }
            
        # Add score comment and engine name if needed
        #
        if { ! $::isShortAnnotation } {
            sc_pos setComment "[sc_pos getComment] $engine_name: $text"
        } elseif { $::addScoreToShortAnnotations || $scoreAllMoves } {
            sc_pos setComment "[sc_pos getComment] $text"
        }
            
        # Add position score nag
        #
        sc_pos addNag [scoreToNag $score]
            
        # Add the variation
        #
        if { $skipEngineLine == 0 } {
            sc_move back
            if { $annotateBlunders == "blundersonly" } {
                # Add a diagram tag, but avoid doubles
                #
                if { [string first "D" "[sc_pos getNags]"] == -1 } {
                    sc_pos addNag "D"
                }
            }
            if { $prevmoves != ""} {
                sc_var create
                # Add the starting move
                sc_move_add [lrange $prevmoves 0 0] $n
                # Add its score
                if { ! $bestMoveIsMate } {
                    if { ! $::isShortAnnotation || $::addScoreToShortAnnotations } {
                        sc_pos setComment "$prevtext"
                    }
                }
                # Add remaining moves
                sc_move_add [lrange $prevmoves 1 end] $n
                # Add position NAG, unless the line ends in mate
                if { $analysis(prevscoremate$n) == 0 } {
                    sc_pos addNag [scoreToNag $prevscore]
                }
                sc_var exit
            }
            sc_move forward
        }
    } else {
        if { $isBlunder == 0 && $absdeltamove > $::informant("!?") } {
            sc_pos addNag "!?"
        }
        if { $scoreAllMoves } { 
            # Add a score mark anyway
            #
            sc_pos setComment "[sc_pos getComment] $text"
        }
    }
        
    if { $addClosingLine } {
        sc_move back
        sc_var create
        sc_move addSan $gamemove
        if { $analysis(scoremate$n) == 0 } {
            if { ! $::isShortAnnotation || $::addScoreToShortAnnotations } {
                sc_pos setComment "$text"
            }
        }
        sc_move_add $moves 1
        if { $analysis(scoremate$n) == 0 } {
            sc_pos addNag [scoreToNag $score]
        }
        sc_var exit
        # Now up to the end of the game
        ::move::Forward
    }
    
    set analysis(prevscore$n)     $analysis(score$n)
    set analysis(prevmoves$n)     $analysis(moves$n)
    set analysis(prevscoremate$n) $analysis(scoremate$n)
    set analysis(prevdepth$n)     $analysis(depth$n)

    # Update the board
    #
    updateBoard -pgn
    
    # Update score graph if it is open
    #
    if {[winfo exists .sgraph]} { ::tools::graphs::score::Refresh }
}

# Informant index strings
array set ana_informantList { 0 "+=" 1 "+/-" 2 "+-" 3 "++-" }
# Nags. Note the slight inconsistency for the "crushing" symbol (see game.cpp)
array set ana_nagList  { 0 "=" 1 "+=" 2 "+/-" 3 "+-" 4 "+--" 5 "=" 6 "=+" 7 "-/+" 8 "-+" 9 "--+" }
################################################################################
#
################################################################################
proc scoreToNag {score} {
    global ana_informantList ana_nagList
    # Find the score in the informant map
    set tmp [expr { abs( $score ) }]
    for { set i 0 } { $i < 4 } { incr i } {
        if { $tmp < $::informant("$ana_informantList($i)") } {
            break
        }
    }
    # Jump into negative counterpart
    if { $score < 0.0 } {
        set i [expr {$i + 5}]
    }
    return $ana_nagList($i)
}
################################################################################
# will append arg to current game Annotator tag
################################################################################
proc appendAnnotator { s } {
    # Get the current collection of extra tags
    set extra [sc_game tags get "Extra"]

    set annot 0
    set other ""
    set nExtra {}
    # Walk through the extra tags, just copying the crap we do not need
    # If we meet the existing annotator tag, add our name to the list
    foreach line $extra {
        if { $annot == 1 } {
            lappend nExtra "Annotator \"$line, $s\"\n"
            set annot 2
        } elseif { $other != "" } {
            lappend nExtra "$other \"$line\"\n"
            set other ""
        } elseif {[string match "Annotator" $line]} {
            set annot 1
        } else {
            set other $line
        }
    }
    
    # First annotator: Create a tag
    if { $annot == 0 } {
        lappend nExtra "Annotator \"$s\"\n"
    }
    # Put the extra tags back to the game
    sc_game tags set -extra $nExtra
}
################################################################################
#
################################################################################
proc pushAnalysisData { { lastVar } { n 1 } } {
    global analysis
    lappend ::stack [list $analysis(prevscore$n) $analysis(prevscoremate$n) $analysis(prevdepth$n) \
                          $analysis(score$n)     $analysis(scoremate$n)     $analysis(depth$n) \
                          $analysis(prevmoves$n) $analysis(moves$n) $lastVar ]
}
################################################################################
#
################################################################################
proc popAnalysisData { { n 1 } } {
    global analysis
    # the start of analysis is in the middle of a variation
    if {[llength $::stack] == 0} {
        set analysis(prevscore$n) 0
        set analysis(prevscoremate$n) 0
        set analysis(prevdepth$n) 0
        set analysis(score$n) 0
        set analysis(scoremate$n) 0
        set analysis(depth$n) 0
        set analysis(prevmoves$n) ""
        set analysis(moves$n) ""
        set lastVar 0
        return
    }
    set tmp [lindex $::stack end]
    set analysis(prevscore$n) [lindex $tmp 0]
    set analysis(prevscoremate$n) [lindex $tmp 1]
    set analysis(prevdepth$n) [lindex $tmp 2]
    set analysis(score$n) [lindex $tmp 3]
    set analysis(scoremate$n) [lindex $tmp 4]
    set analysis(depth$n) [lindex $tmp 5]
    set analysis(prevmoves$n) [lindex $tmp 6]
    set analysis(moves$n) [lindex $tmp 7]
    set lastVar [lindex $tmp 8]
    set ::stack [lreplace $::stack end end]
    return $lastVar
}

################################################################################
#
################################################################################
proc addAnalysisVariation {{n 1}} {
    global analysis
    
    if {! [winfo exists .analysisWin$n]} { return }
    
    # Cannot add a variation to an empty variation:
    if {[sc_pos isAt vstart]  &&  [sc_pos isAt vend]} { return }
    
    # if we are at the end of the game, we cannot add variation
    # so we add the analysis one move before and append the last game move at the beginning of the analysis
    set addAtEnd [sc_pos isAt vend]

    set moves $analysis(moves$n)
    if {$analysis(uci$n)} {
        set tmp_moves [ lindex [ lindex $analysis(multiPV$n) 0 ] 2 ]
        set text [format "\[%s\] %d:%s" $analysis(name$n) $analysis(depth$n) [scoreToMate $analysis(score$n) $tmp_moves $n]]
    } else  {
        set text [format "\[%s\] %d:%+.2f" $analysis(name$n) $analysis(depth$n) $analysis(score$n)]
    }
    
    if {$addAtEnd} {
        # get the last move of the game
        set lastMove [sc_game info previousMoveUCI]
        #back one move
        sc_move back
    }
    
    # Add the variation:
    sc_var create
    # Add the comment at the start of the variation:
    sc_pos setComment "[sc_pos getComment] $text"
    if {$addAtEnd} {
        # Add the last move of the game at the beginning of the analysis
        sc_move_add $lastMove $n
    }
    # Add as many moves as possible from the engine analysis:
    sc_move_add $moves $n
    sc_var exit
    
    if {$addAtEnd} {
        #forward to the last move
        sc_move forward
    }

    if {[winfo exists .pgnWin]} { ::pgn::Refresh 1 }
    
    # Update score graph if it is open:
    if {[winfo exists .sgraph]} { ::tools::graphs::score::Refresh }
}
################################################################################
#
################################################################################
proc addAllVariations {{n 1}} {
    global analysis
    
    if {! [winfo exists .analysisWin$n]} { return }
    
    # Cannot add a variation to an empty variation:
    if {[sc_pos isAt vstart]  &&  [sc_pos isAt vend]} { return }
    
    # if we are at the end of the game, we cannot add variation
    # so we add the analysis one move before and append the last game move at the beginning of the analysis
    set addAtEnd [sc_pos isAt vend]

    foreach i $analysis(multiPVraw$n) j $analysis(multiPV$n) {
        set moves [lindex $i 2]
        
        set tmp_moves [ lindex $j 2 ]
        set text [format "\[%s\] %d:%s" $analysis(name$n) [lindex $i 0] [scoreToMate [lindex $i 1] $tmp_moves $n]]
        
        if {$addAtEnd} {
            # get the last move of the game
            set lastMove [sc_game info previousMoveUCI]
            sc_move back
        }
        
        # Add the variation:
        sc_var create
        # Add the comment at the start of the variation:
        sc_pos setComment "[sc_pos getComment] $text"
        if {$addAtEnd} {
            # Add the last move of the game at the beginning of the analysis
            sc_move_add $lastMove $n
        }
        # Add as many moves as possible from the engine analysis:
        sc_move_add $moves $n
        sc_var exit
        
        if {$addAtEnd} {
            #forward to the last move
            sc_move forward
        }
        
    }

    if {[winfo exists .pgnWin]} { ::pgn::Refresh 1 }
    # Update score graph if it is open:
    if {[winfo exists .sgraph]} { ::tools::graphs::score::Refresh }
}
################################################################################
#
################################################################################
proc makeAnalysisMove {{n 1} {comment ""}} {
    set s $::analysis(moves$n)
    set res 1
    while {1} {
        if {[string length $s] == 0} { return 0 }
        set c [string index $s 0]
        switch -- $c {
            a - b - c - d - e - f - g - h -
            K - Q - R - B - N - O {
                break
            }
        }
        set s [string range $s 1 end]
    }
    if {[scan $s "%s" move] != 1} { set res 0 }
    set action "replace"
    if {! [sc_pos isAt vend]} {
        set action [confirmReplaceMove]
    }
    if {$action == "cancel"} { return }
    set ::analysis(automoveThinking$n) 0
    if {$action == "var"} { sc_var create }
    if { [sc_move_add $move $n] } { 
    	set res 0 
    } else {
    	sc_pos setComment $comment
    }
    
    updateBoard -pgn -animate
    ::utils::sound::AnnounceNewMove $move
    return $res
}
################################################################################
#
################################################################################

# destroyAnalysisWin:
#   Closes an engine, because its analysis window is being destroyed.
#
proc destroyAnalysisWin {{n 1}} {
    
    global windowsOS analysis annotateMode
    
    if {$::finishGameMode} { toggleFinishGame }
    
    if { $n == 1 && $annotateMode } {
        toggleAutoplay
    }

    # Cancel scheduled commands
    if {$analysis(after$n) != ""} {
        after cancel $analysis(after$n)
    }
    
    # Check the pipe is not already closed:
    if {$analysis(pipe$n) == ""} {
        set ::analysisWin$n 0
        return
    }
    
    # Send interrupt signal if the engine wants it:
    if {(!$windowsOS)  &&  $analysis(send_sigint$n)} {
        catch {exec -- kill -s INT [pid $analysis(pipe$n)]}
    }
    
    # Some engines in analyze mode may not react as expected to "quit"
    # so ensure the engine exits analyze mode first:
    if {$analysis(uci$n)} {
        sendToEngine $n "stop"
        sendToEngine $n "quit"
    } else  {
        sendToEngine $n "exit"
        sendToEngine $n "quit"
    }
    catch { flush $analysis(pipe$n) }
    
    # Uncomment the following line to turn on blocking mode before
    # closing the engine (but probably not a good idea!)
    #   fconfigure $analysis(pipe$n) -blocking 1
    
    # Close the engine, ignoring any errors since nothing can really
    # be done about them anyway -- maybe should alert the user with
    # a message box?
    catch {close $analysis(pipe$n)}
    
    if {$analysis(log$n) != ""} {
        catch {close $analysis(log$n)}
        set analysis(log$n) ""
    }
    resetEngine $n
    set ::analysisWin$n 0
}

# sendToEngine:
#   Send a command to a running analysis engine.
#
proc sendToEngine {n text} {
    # puts " -------- Scid>> $text"
    logEngine $n "Scid  : $text"
    catch {puts $::analysis(pipe$n) $text}
}

# sendMoveToEngine:
#   Sends a move to a running analysis engine, using sendToEngine.
#   If the engine has indicated (with "usermove=1" on a "feature" line)
#   that it wants it, send with "usermove " before the move.
#
proc sendMoveToEngine {n move} {
    # Convert "e7e8Q" into "e7e8q" since that is the XBoard/WinBoard
    # standard for sending moves in coordinate notation:
    set move [string tolower $move]
    if {$::analysis(uci$n)} {
        # should be position fen [sc_pos fen] moves ?
        sendToEngine $n "position fen [sc_pos fen] moves $move"
    } else  {
        if {$::analysis(wants_usermove$n)} {
            sendToEngine $n "usermove $move"
        } else {
            sendToEngine $n $move
        }
    }
}

# logEngine:
#   Log Scid-Engine communication.
#
proc logEngine {n text} {
    global analysis
    
    # Print the log message to stdout if applicable:
    if {$::analysis(log_stdout)} {
        puts stdout $text
    }
    
    if { [ info exists ::analysis(log$n)] && $::analysis(log$n) != ""} {
        puts $::analysis(log$n) $text
        catch { flush $::analysis(log$n) }
        
        # Close the log file if the limit is reached:
        incr analysis(logCount$n)
        if {$analysis(logCount$n) >= $analysis(logMax)} {
            puts $::analysis(log$n) \
                    "NOTE  : Log file size limit reached; closing log file."
            catch {close $analysis(log$n)}
            set analysis(log$n) ""
        }
    }
}

# logEngineNote:
#   Add a note to the engine comminucation log file.
#
proc logEngineNote {n text} {
    logEngine $n "NOTE  : $text"
}

################################################################################
#
# makeAnalysisWin:
#   Produces the engine list dialog box for choosing an engine,
#   then opens an analysis window and starts the engine.
################################################################################
proc makeAnalysisWin { {n 1} {index -1} } {
    global analysisWin$n font_Analysis analysisCommand analysis annotateModeButtonValue
    set w ".analysisWin$n"
    if {[winfo exists $w]} {
        focus .
        destroy $w
        return
    }

    resetEngine $n

    # Only update engine's time when it was chosen in the engines dialog box
    if { $index < 0 } {
        set index [::enginelist::choose]
        catch {
            ::enginelist::setTime $index
        }

        if {$index == "" ||  $index < 0} { return }
    } else {
        set index [expr {$n - 1}]
    }

    # Set the button in non-annotation state
    #
    if { $n == 1 } {
        set annotateModeButtonValue 0
    }


    ::createToplevel $w
    ::setTitle $w "Analysis: No engine"
    setWinLocation $w
    setWinSize $w
    ttk::frame $w.b1
    pack $w.b1 -side bottom -fill x
    ::createToplevelFinalize $w
    set analysisWin$n 1

    if {$index >= [llength $::engines(list)]} {
        button $w.b1.bStartStop -image tb_pause -command ""
        return
    }
    
    set analysis(index$n) $index
    set engineData [lindex $::engines(list) $index]
    set analysisName [lindex $engineData 0]
    set analysisCommand [ toAbsPath [lindex $engineData 1] ]
    set analysisArgs [lindex $engineData 2]
    set analysisDir [ toAbsPath [lindex $engineData 3] ]
    set analysis(uci$n) [ lindex $engineData 7 ]
    
    # If the analysis directory is not current dir, cd to it:
    set oldpwd ""
    if {$analysisDir != "."} {
        set oldpwd [pwd]
        catch {cd $analysisDir}
    }
    
    if {! $analysis(uci$n) } {
        set analysis(multiPVCount$n) 1
    }
    
    # Try to execute the analysis program:
    set open_err [catch {set analysis(pipe$n) [open "| [list $analysisCommand] $analysisArgs" "r+"]}]

    # Return to original dir if necessary:
    if {$oldpwd != ""} { catch {cd $oldpwd} }

    if {$open_err} {
        tk_messageBox -title "Scid: error starting analysis" \
                -icon warning -type ok \
                -message "Unable to start the program:\n$analysisCommand"
        resetEngine $n
        return
    }
    
    # Open log file if applicable:
    set analysis(log$n) ""
    if {$analysis(logMax) > 0} {
        if {! [catch {open [file join $::scidLogDir "engine$n.log"] w} log]} {
            set analysis(log$n) $log
            logEngine $n "Scid-Engine communication log file"
            logEngine $n "Engine: $analysisName"
            logEngine $n "Command: $analysisCommand"
            logEngine $n "Date: [clock format [clock seconds]]"
            logEngine $n ""
            logEngine $n "This file was automatically generated by Scid."
            logEngine $n "It is rewritten every time an engine is started in Scid."
            logEngine $n ""
        }
    }
    
    set analysis(name$n) $analysisName
    
    # Configure pipe for line buffering and non-blocking mode:
    fconfigure $analysis(pipe$n) -buffering line -blocking 0
    
    #
    # Set up the  analysis window:
    #

    if {$n == 1} {
        ::setTitle $w "Analysis: $analysisName"
    } else {
        ::setTitle $w "Analysis $n: $analysisName"
    }
    bind $w <F1> { helpWindow Analysis }
    standardShortcuts $w
    
    ::board::new $w.bd 25
    $w.bd configure -relief solid -borderwidth 1
    set analysis(showBoard$n) 0
    set analysis(showEngineInfo$n) 0
    
    
    checkbutton $w.b1.automove -image tb_training  -indicatoron false -height 24 -relief raised -command "toggleAutomove $n" -variable analysis(automove$n)
    ::utils::tooltip::Set $w.b1.automove $::tr(Training)
    
    checkbutton $w.b1.lockengine -image tb_lockengine -indicatoron false -height 24 -width 24 -variable analysis(lockEngine$n) -command "toggleLockEngine $n"
    ::utils::tooltip::Set $w.b1.lockengine $::tr(LockEngine)
    
    button $w.b1.line -image tb_addvar -height 24 -width 24 -command "addAnalysisVariation $n"
    ::utils::tooltip::Set $w.b1.line $::tr(AddVariation)
    
    button $w.b1.alllines -image tb_addallvars -height 24 -width 24 -command "addAllVariations $n"
    ::utils::tooltip::Set $w.b1.alllines $::tr(AddAllVariations)
    
    button $w.b1.move -image tb_addmove -command "makeAnalysisMove $n"
    ::utils::tooltip::Set $w.b1.move $::tr(AddMove)
    
    if {$analysis(uci$n)} {
        set state readonly
    } else  {
        set state disabled
    }
    
    spinbox $w.b1.multipv -from 1 -to 8 -increment 1 -textvariable analysis(multiPVCount$n) -state $state -width 2 \
            -command "changePVSize $n"
    ::utils::tooltip::Set $w.b1.multipv $::tr(Lines)
    
    # add a button to start/stop engine analysis
    button $w.b1.bStartStop -image tb_pause -command "toggleEngineAnalysis $n"
    ::utils::tooltip::Set $w.b1.bStartStop "$::tr(StopEngine) (F[expr 3 + $n])"
    
    if {$n == 1} {
        set ::finishGameMode 0
        button $w.b1.bFinishGame -image tb_finish_off -command "toggleFinishGame $n" -relief flat
        ::utils::tooltip::Set $w.b1.bFinishGame $::tr(FinishGame)
    }
    button $w.b1.showboard -image tb_coords -height 24 -width 24 -command "toggleAnalysisBoard $n"
    ::utils::tooltip::Set $w.b1.showboard $::tr(ShowAnalysisBoard)
    
    checkbutton $w.b1.showinfo -image tb_engineinfo -indicatoron false -height 24 -width 24 -variable analysis(showEngineInfo$n) -command "toggleEngineInfo $n"
    ::utils::tooltip::Set $w.b1.showinfo $::tr(ShowInfo)
    if {!$analysis(uci$n)} {
        $w.b1.showinfo configure -state disabled
        $w.b1.alllines configure -state disabled
    }
    
    if {$n == 1} {
        checkbutton $w.b1.annotate -image tb_annotate -indicatoron false -height 24 -variable annotateModeButtonValue -relief raised -command { configAnnotation }
        ::utils::tooltip::Set $w.b1.annotate $::tr(Annotate...)
    }
    checkbutton $w.b1.priority -image tb_cpu -indicatoron false -relief raised -variable analysis(priority$n) -onvalue idle -offvalue normal \
            -command "setAnalysisPriority $n"
    ::utils::tooltip::Set $w.b1.priority $::tr(LowPriority)
    
    if {$analysis(uci$n)} {
        set state disabled
    } else  {
        set state normal
    }
    
    button $w.b1.update -image tb_update -state $state -command "if {$analysis(uci$n)} {sendToEngine $n .}" ;# UCI does not support . command
    ::utils::tooltip::Set $w.b1.update $::tr(Update)
    
    button $w.b1.help -image tb_help -height 24 -width 24 -command { helpWindow Analysis }
    ::utils::tooltip::Set $w.b1.help $::tr(Help)
    
    if {$n ==1} {
        pack $w.b1.bStartStop $w.b1.lockengine $w.b1.move $w.b1.line $w.b1.alllines $w.b1.multipv $w.b1.annotate $w.b1.automove $w.b1.bFinishGame -side left
    } else  {
        pack $w.b1.bStartStop $w.b1.lockengine $w.b1.move $w.b1.line $w.b1.alllines $w.b1.multipv $w.b1.automove -side left
    }
    pack $w.b1.help $w.b1.priority $w.b1.update $w.b1.showboard $w.b1.showinfo -side right
    if {$analysis(uci$n)} {
        text $w.text -width 60 -height 1 -fg black -bg white -font font_Bold -wrap word -setgrid 1 ;# -spacing3 2
    } else {
        text $w.text -width 60 -height 4 -fg black -bg white -font font_Fixed -wrap word -setgrid 1
    }
    ttk::frame $w.hist
    text $w.hist.text -width 60 -height 8 -fg black -bg white -font font_Fixed \
            -wrap word -setgrid 1 -yscrollcommand "$w.hist.ybar set"
    $w.hist.text tag configure indent -lmargin2 [font measure font_Fixed "xxxxxxxxxxxx"]
    ttk::scrollbar $w.hist.ybar -command "$w.hist.text yview" -takefocus 0
    pack $w.text -side top -fill both
    pack $w.hist -side top -expand 1 -fill both
    pack $w.hist.ybar -side right -fill y
    pack $w.hist.text -side left -expand 1 -fill both
    
    bind $w.hist.text <ButtonPress-$::MB3> "toggleMovesDisplay $n"
    $w.text tag configure blue -foreground blue
    $w.text tag configure bold -font font_Bold
    $w.text tag configure small -font font_Small
    $w.hist.text tag configure blue -foreground blue -lmargin2 [font measure font_Fixed "xxxxxxxxxxxx"]
    $w.hist.text tag configure gray -foreground gray
    $w.text insert end "Please wait a few seconds for engine initialisation (with some engines, you will not see any analysis \
            until the board changes. So if you see this message, try changing the board \
            by moving backward or forward or making a new move.)" small
    $w.text configure -state disabled
    bind $w <Destroy> "destroyAnalysisWin $n"
    bind $w <Configure> "recordWinSize $w"
    bind $w <Escape> "focus .; destroy $w"
    bind $w <Key-a> "$w.b1.bStartStop invoke"
    wm minsize $w 25 0
    bindMouseWheel $w $w.hist.text
    
    if {$analysis(uci$n)} {
        fileevent $analysis(pipe$n) readable "::uci::processAnalysisInput $n"
    } else  {
        fileevent $analysis(pipe$n) readable "processAnalysisInput $n"
    }
    after 1000 "checkAnalysisStarted $n"
    
    # finish MultiPV spinbox configuration
    if {$analysis(uci$n)} {
        # find UCI engine MultiPV capability
        while { ! $analysis(uciok$n) } { ;# done after uciok
            update
            after 200
        }
        set hasMultiPV 0
        foreach opt $analysis(uciOptions$n) {
            if { [lindex $opt 0] == "MultiPV" } {
                set hasMultiPV 1
                set min [lindex $opt 1]
                set max [lindex $opt 2]
                if {$min == ""} { set min 1}
                if {$max == ""} { set max 8}
                break
            }
        }
        set current -1
        set options  [ lindex $engineData 8 ]
        foreach opt $options {
            if {[lindex $opt 0] == "MultiPV"} { set current [lindex $opt 1] ; break }
        }
        if {$current == -1} { set current 1 }
        set analysis(multiPVCount$n) $current
        #    changePVSize $n
        catch {
            if { $hasMultiPV } {
                $w.b1.multipv configure -from $min -to $max -state readonly
            } else  {
                $w.b1.multipv configure -from 1 -to 1 -state disabled
            }
        }
    } ;# end of MultiPV spinbox configuration
    
    # We hope the engine is correctly started at that point, so we can send the first analyze command
    # this problem only happens with winboard engine, as we don't know when they are ready
    if { !$analysis(uci$n) } {
        initialAnalysisStart $n
    }
    # necessary on windows because the UI sometimes starves, also keep latest priority setting
    if {$::windowsOS || $analysis(priority$n) == "idle"} {
        set analysis(priority$n) idle
        setAnalysisPriority $n
    }
    
    catch {
        ::enginelist::sort
        ::enginelist::write
    }
    
}
################################################################################
#
################################################################################
proc toggleMovesDisplay { {n 1} } {
    set ::analysis(movesDisplay$n) [expr 1 - $::analysis(movesDisplay$n)]
    set h .analysisWin$n.hist.text
    $h configure -state normal
    $h delete 1.0 end
    $h configure -state disabled
    updateAnalysisText $n
}

################################################################################
# will truncate PV list if necessary and tell the engine to send N best lines
################################################################################
proc changePVSize { n } {
    global analysis
    if { $analysis(multiPVCount$n) < [llength $analysis(multiPV$n)] } {
        set analysis(multiPV$n) {}
        set analysis(multiPVraw$n) {}
    }
    if {$analysis(multiPVCount$n) == 1} {
        set h .analysisWin$n.hist.text
        $h configure -state normal
        $h delete 0.0 end
        $h configure -state disabled
        set analysis(lastHistory$n) {}
    }
    if { ! $analysis(uci$n) } { return }

    # if the UCI engine was analysing, stop and restart
    if {$analysis(analyzeMode$n)} {
        stopAnalyzeMode $n
        set analysis(waitForReadyOk$n) 1
        sendToEngine $n "isready"
        set dont_stuck [ after 60000 "set ::analysis(waitForReadyOk$n) 0" ]
        vwait analysis(waitForReadyOk$n)
        after cancel $dont_stuck
        sendToEngine $n "setoption name MultiPV value $analysis(multiPVCount$n)"
        startAnalyzeMode $n
    } else {
        sendToEngine $n "setoption name MultiPV value $analysis(multiPVCount$n)"
    }
}
################################################################################
# setAnalysisPriority
#   Sets the priority class (in Windows) or nice level (in Unix)
#   of a running analysis engine.
################################################################################
proc setAnalysisPriority {n} {
    global analysis
    
    # Get the process ID of the analysis engine:
    if {$analysis(pipe$n) == ""} { return }
    set pidlist [pid $analysis(pipe$n)]
    if {[llength $pidlist] < 1} { return }
    set pid [lindex $pidlist 0]
    
    # Set the priority class (idle or normal):
    if {$::windowsOS} {
        catch {sc_info priority $pid $analysis(priority$n)}
    } else {
        set priority 0
        if {$analysis(priority$n) == "idle"} { set priority 15 }
        catch {sc_info priority $pid $priority}
    }
    
    # Re-read the priority class for confirmation:
    if {[catch {sc_info priority $pid} newpriority]} { return }
    if {$::windowsOS} {
        if {$newpriority == "idle"  ||  $newpriority == "normal"} {
            set analysis(priority$n) $newpriority
        }
    } else {
        set priority normal
        if {$newpriority > 0} { set priority idle }
        set analysis(priority$n) $priority
    }
}
################################################################################
# checkAnalysisStarted
#   Called a short time after an analysis engine was started
#   to send it commands if Scid has not seen any output from
#   it yet.
################################################################################
proc checkAnalysisStarted {n} {
    global analysis
    if {$analysis(seen$n)} { return }
    # Some Winboard engines do not issue any output when
    # they start up, so the fileevent above is never triggered.
    # Most, but not all, of these engines will respond in some
    # way once they have received input of some type.  This
    # proc will issue the same initialization commands as
    # those in processAnalysisInput below, but without the need
    # for a triggering fileevent to occur.
    
    logEngineNote $n {Quiet engine (still no output); sending it initial commands.}
    
    if {$analysis(uci$n)} {
        # in order to get options
        sendToEngine $n "uci"
        # egine should respond uciok
        sendToEngine $n "isready"
        set analysis(seen$n) 1
    } else  {
        sendToEngine $n "xboard"
        sendToEngine $n "protover 2"
        sendToEngine $n "ponder off"
        sendToEngine $n "post"
        # Prevent some engines from making an immediate "book"
        # reply move as black when position is sent later:
        sendToEngine $n "force"
    }
}
################################################################################
# with wb engines, we don't know when the startup phase is over and when the
# engine is ready : so wait for the end of initial output and take some margin
# to issue an analyze command
################################################################################
proc initialAnalysisStart {n} {
    global analysis
    
    update
    
    if { $analysis(processInput$n) == 0 } {
        after 500 initialAnalysisStart $n
        return
    }
    set cl [clock clicks -milliseconds]
    if {[expr $cl - $analysis(processInput$n)] < 1000} {
        after 200 initialAnalysisStart $n
        return
    }
    after 200 startAnalyzeMode $n 1
}
################################################################################
# processAnalysisInput (only for win/xboard engines)
#   Called from a fileevent whenever there is a line of input
#   from an analysis engine waiting to be processed.
################################################################################
proc processAnalysisInput {{n 1}} {
    global analysis
    
    # Get one line from the engine:
    set line [gets $analysis(pipe$n)]
    
    # this is only useful at startup but costs less than 10 microseconds
    set analysis(processInput$n) [clock clicks -milliseconds]
    
    logEngine $n "Engine: $line"
    
    if { ! [ checkEngineIsAlive $n ] } { return }
    
    if {! $analysis(seen$n)} {
        set analysis(seen$n) 1
        # First line of output from the program, so send initial commands:
        logEngineNote $n {First line from engine seen; sending it initial commands now.}
        sendToEngine $n "xboard"
        sendToEngine $n "protover 2"
        sendToEngine $n "ponder off"
        sendToEngine $n "post"
    }
    
    # Check for "feature" commands so we can determine if the engine
    # has the setboard and analyze commands:
    #
    if {! [string compare [string range $line 0 6] "feature"]} {
        if {[string match "*analyze=1*" $line]} { set analysis(has_analyze$n) 1 }
        if {[string match "*setboard=1*" $line]} { set analysis(has_setboard$n) 1 }
        if {[string match "*usermove=1*" $line]} { set analysis(wants_usermove$n) 1 }
        if {[string match "*sigint=1*" $line]} { set analysis(send_sigint$n) 1 }
        if {[string match "*myname=*" $line] } {
            if { !$analysis(wbEngineDetected$n) } { detectWBEngine $n $line  }
            if { [regexp "myname=\"(\[^\"\]*)\"" $line dummy name]} {
                if {$n == 1} {
                    catch {::setTitle .analysisWin$n "Analysis: $name"}
                } else {
                    catch {::setTitle .analysisWin$n "Analysis $n: $name"}
                }
            }
        }
        return
    }
    
    # Check for a line starting with "Crafty", so Scid can work well
    # with older Crafty versions that do not recognize "protover":
    #
    if {! [string compare [string range $line 0 5] "Crafty"]} {
        logEngineNote $n {Seen "Crafty"; assuming analyze and setboard commands.}
        set major 0
        if {[scan $line "Crafty v%d.%d" major minor] == 2  &&  $major >= 18} {
            logEngineNote $n {Crafty version is >= 18.0; assuming scores are from White perspective.}
            set analysis(invertScore$n) 0
        }
        # Turn off crafty logging, to reduce number of junk files:
        sendToEngine $n "log off"
        # Set a fairly low noise value so Crafty is responsive to board changes,
        # but not so low that we get lots of short-ply search data:
        sendToEngine $n "noise 1000"
        set analysis(isCrafty$n) 1
        set analysis(has_setboard$n) 1
        set analysis(has_analyze$n) 1
        return
    }
    
    # Scan the line from the engine for the analysis data:
    #
    set res [scan $line "%d%c %d %d %s %\[^\n\]\n" \
            temp_depth dummy temp_score \
            temp_time temp_nodes temp_moves]
    if {$res == 6} {
        if {$analysis(invertScore$n)  && (![string compare [sc_pos side] "black"])} {
            set temp_score [expr { 0.0 - $temp_score } ]
        }
        set analysis(depth$n) $temp_depth
        set analysis(score$n) $temp_score
        # Convert score to pawns from centipawns:
        set analysis(score$n) [expr {double($analysis(score$n)) / 100.0} ]
        set analysis(moves$n) [formatAnalysisMoves $temp_moves]
        set analysis(time$n) $temp_time
        set analysis(nodes$n) [calculateNodes $temp_nodes]
        
        # Convert time to seconds from centiseconds:
        if {! $analysis(wholeSeconds$n)} {
            set analysis(time$n) [expr {double($analysis(time$n)) / 100.0} ]
        }
        
        updateAnalysisText $n
        
        if {! $analysis(seenEval$n)} {
            # This is the first evaluation line seen, so send the current
            # position details to the engine:
            set analysis(seenEval$n) 1
        }
        
        return
    }
    
    # Check for a "stat01:" line, the reply to the "." command:
    #
    if {! [string compare [string range $line 0 6] "stat01:"]} {
        if {[scan $line "%s %d %s %d" \
                    dummy temp_time temp_nodes temp_depth] == 4} {
            set analysis(depth$n) $temp_depth
            set analysis(time$n) $temp_time
            set analysis(nodes$n) [calculateNodes $temp_nodes]
            # Convert time to seconds from centiseconds:
            if {! $analysis(wholeSeconds$n)} {
                set analysis(time$n) [expr {double($analysis(time$n)) / 100.0} ]
            }
            updateAnalysisText $n
        }
        return
    }
    
    # Check for other engine-specific lines:
    # The following checks are intended to make Scid work with
    # various WinBoard engines that are not properly configured
    # by the "feature" line checking code above.
    #
    # Many thanks to Allen Lake for testing Scid with many
    # WinBoard engines and providing this code and the detection
    # code in wbdetect.tcl
    if { !$analysis(wbEngineDetected$n) } {
        detectWBEngine $n $line
    }
    
}
################################################################################
# returns 0 if engine died abruptly or 1 otherwise
################################################################################
proc checkEngineIsAlive { {n 1} } {
    global analysis

    if {$analysis(pipe$n) == ""} { return 0 }
    
    if {[eof $analysis(pipe$n)]} {
        fileevent $analysis(pipe$n) readable {}
        set exit_status 0
        if {[catch {close $analysis(pipe$n)} standard_error] != 0} {
            global errorCode
            if {"CHILDSTATUS" == [lindex $errorCode 0]} {
                set exit_status [lindex $errorCode 2]
            }
        }
        set analysis(pipe$n) ""
        if { $exit_status != 0 } {
            logEngineNote $n {Engine terminated with exit code $exit_status: "\"$standard_error\""}
            tk_messageBox -type ok -icon info -parent . -title "Scid" \
                          -message "The analysis engine terminated with exit code $exit_status: \"$standard_error\""
        } else {
            logEngineNote $n {Engine terminated without exit code: "\"$standard_error\""}
            tk_messageBox -type ok -icon info -parent . -title "Scid" \
                          -message "The analysis engine terminated without exit code: \"$standard_error\""
        }
        catch {destroy .analysisWin$n}
        return 0
    }
    return 1
}
################################################################################
# formatAnalysisMoves:
#   Given the text at the end of a line of analysis data from an engine,
#   this proc tries to strip out some extra stuff engines add to make
#   the text more compatible for adding as a variation.
################################################################################
proc formatAnalysisMoves {text} {
    # Yace puts ".", "t", "t-" or "t+" at the start of its moves text,
    # unless directed not to in its .ini file. Get rid of it:
    if {[strIsPrefix ". " $text]} { set text [string range $text 2 end]}
    if {[strIsPrefix "t " $text]} { set text [string range $text 2 end]}
    if {[strIsPrefix "t- " $text]} { set text [string range $text 3 end]}
    if {[strIsPrefix "t+ " $text]} { set text [string range $text 3 end]}
    
    # Trim any initial or final whitespace:
    set text [string trim $text]
    
    # Yace often adds "H" after a move, e.g. "Bc4H". Remove them:
    regsub -all "H " $text " " text
    
    # Crafty adds "<HT>" for a hash table comment. Change it to "{HT}":
    regsub "<HT>" $text "{HT}" text
    
    return $text
}

set finishGameMode 0

################################################################################
# will ask engine(s) to play the game till the end
################################################################################
proc toggleFinishGame { { n 1 } } {
    global analysis
    set b ".analysisWin$n.b1.bFinishGame"
    if { $::annotateModeButtonValue || $::autoplayMode } { return }
    if { ! $analysis(uci$n) } {    
        if { !$analysis(analyzeMode$n) || ! [sc_pos isAt vend] } { return }
    
        if {!$::finishGameMode} {
    	    set ::finishGameMode 1
            $b configure -image tb_finish_on -relief flat
            after $::autoplayDelay autoplayFinishGame
    	} else  {
        	set ::finishGameMode 0
            $b configure -image tb_finish_off -relief flat
            after cancel autoplayFinishGame
    	}
    	return
    }

    # UCI engines
    # Default values
    if {! [info exists ::finishGameEng1] } { set ::finishGameEng1 1 }
    if {! [info exists ::finishGameEng2] } { set ::finishGameEng2 1 }
    if {! [info exists ::finishGameCmd1] } { set ::finishGameCmd1 "movetime" }
    if {! [info exists ::finishGameCmdVal1] } { set ::finishGameCmdVal1 5 }
    if {! [info exists ::finishGameCmd2] } { set ::finishGameCmd2 "movetime" }
    if {! [info exists ::finishGameCmdVal2] } { set ::finishGameCmdVal2 5 }
    if {! [info exists ::finishGameAnnotate] } { set ::finishGameAnnotate 1 }
    # On exit save values in options.dat
    options.save ::finishGameEng1
    options.save ::finishGameEng2
    options.save ::finishGameCmd1
    options.save ::finishGameCmdVal1
    options.save ::finishGameCmd2
    options.save ::finishGameCmdVal2
    options.save ::finishGameAnnotate
	
    if {$::finishGameMode} {
        set ::finishGameMode 0
        sendToEngine 1 "stop"
        set analysis(waitForReadyOk1) 0
        set analysis(waitForBestMove1) 0
        sendToEngine 2 "stop"
   		set analysis(waitForReadyOk2) 0
        set analysis(waitForBestMove2) 0   		
        $b configure -image tb_finish_off -relief flat
   		grab release .analysisWin$n
   		.analysisWin$n.b1.bStartStop configure -state normal
        .analysisWin$n.b1.move configure -state normal
        .analysisWin$n.b1.line configure -state normal
        .analysisWin$n.b1.alllines configure -state normal
        .analysisWin$n.b1.annotate configure -state normal
        .analysisWin$n.b1.automove configure -state normal
   		return
	}
		
	set w .configFinishGame			
	toplevel $w -class Dialog -bg [ttk::style lookup . -background]
	wm resizable $w 0 0
	::setTitle $w "Scid: $::tr(FinishGame)"
	    
	ttk::labelframe $w.wh_f -text "$::tr(White)" -padding 5
	grid $w.wh_f -column 0 -row 0 -columnspan 2 -sticky we -pady 8
	label $w.wh_f.p -image wk$::board::_size(.main.board)
    grid $w.wh_f.p -column 0 -row 0 -rowspan 3	
	ttk::radiobutton $w.wh_f.e1 -text $analysis(name1) -variable ::finishGameEng1 -value 1 
	if {[winfo exists .analysisWin2] } {
		ttk::radiobutton $w.wh_f.e2 -text $analysis(name2) -variable ::finishGameEng1 -value 2 	
	} else {
		set ::finishGameEng1 1
		ttk::radiobutton $w.wh_f.e2 -text $::tr(StartEngine) -variable ::finishGameEng1 -value 2 -state disabled
	}
	grid $w.wh_f.e1 -column 1 -row 0 -columnspan 3 -sticky w
	grid $w.wh_f.e2 -column 1 -row 1 -columnspan 3 -sticky w
	spinbox $w.wh_f.cv -width 4 -textvariable ::finishGameCmdVal1 -from 1 -to 999
	ttk::radiobutton $w.wh_f.c1 -text $::tr(seconds) -variable ::finishGameCmd1 -value "movetime"
	ttk::radiobutton $w.wh_f.c2 -text $::tr(FixedDepth) -variable ::finishGameCmd1 -value "depth"
	grid $w.wh_f.cv -column 1 -row 2 -sticky w
	grid $w.wh_f.c1 -column 2 -row 2 -sticky w
	grid $w.wh_f.c2 -column 3 -row 2 -sticky w 
	grid columnconfigure $w.wh_f 2 -weight 1	
		
	ttk::labelframe $w.bk_f -text "$::tr(Black)" -padding 5
	grid $w.bk_f -column 0 -row 1 -columnspan 2 -sticky we -pady 8
	label $w.bk_f.p -image bk$::board::_size(.main.board)
    grid $w.bk_f.p -column 0 -row 0 -rowspan 3	
	ttk::radiobutton $w.bk_f.e1 -text $analysis(name1) -variable ::finishGameEng2 -value 1 
	if {[winfo exists .analysisWin2] } {
		ttk::radiobutton $w.bk_f.e2 -text $analysis(name2) -variable ::finishGameEng2 -value 2 	
	} else {
		set ::finishGameEng2 1
		ttk::radiobutton $w.bk_f.e2 -text $::tr(StartEngine) -variable ::finishGameEng2 -value 2 -state disabled
	}
	grid $w.bk_f.e1 -column 1 -row 0 -columnspan 3 -sticky w
	grid $w.bk_f.e2 -column 1 -row 1 -columnspan 3 -sticky w
	spinbox $w.bk_f.cv -width 4 -textvariable ::finishGameCmdVal2 -from 1 -to 999
	ttk::radiobutton $w.bk_f.c1 -text $::tr(seconds) -variable ::finishGameCmd2 -value "movetime"
	ttk::radiobutton $w.bk_f.c2 -text $::tr(FixedDepth) -variable ::finishGameCmd2 -value "depth"
	grid $w.bk_f.cv -column 1 -row 2 -sticky w
	grid $w.bk_f.c1 -column 2 -row 2 -sticky w
	grid $w.bk_f.c2 -column 3 -row 2 -sticky w 
	grid columnconfigure $w.bk_f 2 -weight 1		

	ttk::checkbutton $w.annotate -text $::tr(Annotate) -variable ::finishGameAnnotate
	grid $w.annotate -column 0 -row 2 -columnspan 2 -sticky w -padx 5 -pady 8

	ttk::button $w.cancel -text $::tr(Cancel) -command { destroy .configFinishGame }
    grid $w.cancel -column 0 -row 3
    ttk::button $w.ok -text "OK" -command {
    	if {$::finishGameEng1 == $::finishGameEng2} {
   			set ::finishGameMode 1
   		} else {
   			set ::finishGameMode 2
   		}		      
	    destroy .configFinishGame		      	
    }
    grid $w.ok -column 1 -row 3
	focus $w.ok		
	bind $w <Escape> { .configFinishGame.cancel invoke }
    bind $w <Return> { .configFinishGame.ok invoke }
	bind $w <Destroy> { focus .analysisWin1 }
	::tk::PlaceWindow $w widget .analysisWin1
	grab $w
	bind $w <ButtonPress> { 
		set w .configFinishGame
		wm deiconify $w
		if {%x < 0 || %x > [winfo width $w] || %y < 0 || %y > [winfo height $w] } { ::tk::PlaceWindow $w pointer }
	}
	tkwait window $w
	if {!$::finishGameMode} { return }

	set gocmd(1) "go $::finishGameCmd1 $::finishGameCmdVal1"
	set gocmd(2) "go $::finishGameCmd2 $::finishGameCmdVal2"
	if {$::finishGameCmd1 == "movetime" } { append gocmd(1) "000" }
	if {$::finishGameCmd2 == "movetime" } { append gocmd(2) "000" }
	if {[sc_pos side] == "white"} {
		set current_cmd 1
		set current_engine $::finishGameEng1
	} else {
		set current_cmd 2
		set current_engine $::finishGameEng2
	}

    stopEngineAnalysis 1
    stopEngineAnalysis 2
	$b configure -image tb_finish_on -relief flat
	.analysisWin$n.b1.bStartStop configure -state disabled
	.analysisWin$n.b1.move configure -state disabled
	.analysisWin$n.b1.line configure -state disabled
	.analysisWin$n.b1.alllines configure -state disabled
	.analysisWin$n.b1.annotate configure -state disabled
	.analysisWin$n.b1.automove configure -state disabled
	grab .analysisWin$n
   	
	while { [string index [sc_game info previousMove] end] != "#"} {
		set analysis(waitForReadyOk$current_engine) 1
		sendToEngine $current_engine "isready"
		vwait analysis(waitForReadyOk$current_engine)
		if {!$::finishGameMode} { break }
		sendToEngine $current_engine "position fen [sc_pos fen]"
		sendToEngine $current_engine $gocmd($current_cmd)
		set analysis(fen$current_engine) [sc_pos fen]
		set analysis(maxmovenumber$current_engine) 0
		set analysis(waitForBestMove$current_engine) 1
		vwait analysis(waitForBestMove$current_engine)
		if {!$::finishGameMode} { break }

        if { ! [sc_pos isAt vend] } { sc_var create }
		if {$::finishGameAnnotate} {
			set moves [ lindex [ lindex $analysis(multiPV$current_engine) 0 ] 2 ]
			set text [format "%+.2f %s - %s  Depth: %d  Time:%6.2f s" \
    			$analysis(score$current_engine) \
    			[addMoveNumbers $current_engine [::trans $moves]] \
    			$analysis(name$current_engine) \
    			$analysis(depth$current_engine) \
    			$analysis(time$current_engine) ]
    		makeAnalysisMove $current_engine $text
    	} else {
            makeAnalysisMove $current_engine
        }		
 
 		incr current_cmd
 		if {$current_cmd > 2} { set current_cmd 1 } 
		if {$::finishGameMode == 2} { 
			incr current_engine 
   			if {$current_engine > 2 } { set current_engine 1 }
   		}
	}
	if {$::finishGameMode} { toggleFinishGame }
}
################################################################################
#
################################################################################
proc autoplayFinishGame { {n 1} } {
    if {!$::finishGameMode || ![winfo exists .analysisWin$n]} {return}
    .analysisWin$n.b1.move invoke
    if { [string index [sc_game info previousMove] end] == "#"} {
        toggleFinishGame $n
        return
    }
    after $::autoplayDelay autoplayFinishGame
}

################################################################################
#
################################################################################
proc startEngineAnalysis { {n 1} {force 0} } {
    global analysis
    
    if { !$analysis(analyzeMode$n) } {
        set b ".analysisWin$n.b1.bStartStop"
        
        startAnalyzeMode $n $force
        $b configure -image tb_pause
        ::utils::tooltip::Set $b "$::tr(StopEngine)(a)"
        # enable lock button
        .analysisWin$n.b1.lockengine configure -state normal
    }
}

################################################################################
#
################################################################################
proc stopEngineAnalysis { {n 1} } {
    global analysis
    
    if { $analysis(analyzeMode$n) } {
        set b ".analysisWin$n.b1.bStartStop"

        stopAnalyzeMode $n
        $b configure -image tb_play
        ::utils::tooltip::Set $b "$::tr(StartEngine)"
        # reset lock mode and disable lock button
        set analysis(lockEngine$n) 0
        toggleLockEngine $n
        .analysisWin$n.b1.lockengine configure -relief raised
        .analysisWin$n.b1.lockengine configure -state disabled
    }
}

################################################################################
#
################################################################################
proc toggleEngineAnalysis { { n 1 } { force 0 } } {
    global analysis
    
    if { $n == 1} {
        if { ($::annotateMode || $::finishGameMode) && ! $force } {
            return
        }
    }
    
    if {$analysis(analyzeMode$n)} {
        stopEngineAnalysis $n
    } else  {
        startEngineAnalysis $n $force
    }
}
################################################################################
# startAnalyzeMode:
#   Put the engine in analyze mode.
################################################################################
proc startAnalyzeMode {{n 1} {force 0}} {
    global analysis
    
    # don't start analysis mode when restoring the default layout in docked mode
    if { $::docking::USE_DOCKING && $::docking::restore_running } {
        set b ".analysisWin$n.b1.bStartStop"
        $b configure -image tb_play
        ::utils::tooltip::Set $b "$::tr(StartEngine)"
        # reset lock mode and disable lock button
        set analysis(lockEngine$n) 0
        toggleLockEngine $n
        .analysisWin$n.b1.lockengine configure -relief raised
        .analysisWin$n.b1.lockengine configure -state disabled
        set t .analysisWin$n.text
        $t configure -state normal
        $t delete 0.0 end
        return
    }
    
    # Check that the engine has not already had analyze mode started:
    if {$analysis(analyzeMode$n) && ! $force } { return }
    set analysis(analyzeMode$n) 1
    if { $analysis(uci$n) } {
        updateAnalysis $n
    } else  {
        if {$analysis(has_setboard$n)} {
            sendToEngine $n "setboard [sc_pos fen]"
        }
        if { $analysis(has_analyze$n) } {
            sendToEngine $n "analyze"
        } else  {
            updateAnalysis $n ;# in order to handle special cases (engines without setboard and analyse commands)
        }
    }
}
################################################################################
# stopAnalyzeMode
################################################################################
proc stopAnalyzeMode { {n 1} } {
    global analysis
    if {! $analysis(analyzeMode$n)} { return }
    set analysis(analyzeMode$n) 0
    if { $analysis(uci$n) } {
        if {$analysis(after$n) != ""} {
            after cancel $analysis(after$n)
            set analysis(after$n) ""
        }
        sendToEngine $n "stop"
        set analysis(waitForReadyOk$n) 1
        sendToEngine $n "isready"
    } else  {
        sendToEngine $n "exit"
    }
    set analysis(fen$n) {}
}
################################################################################
# toggleLockEngine
#   Toggle whether engine is locked to current position.
################################################################################
proc toggleLockEngine {n} {
    global analysis
    if { $analysis(lockEngine$n) } {
        set state disabled
        set analysis(lockN$n) [sc_pos moveNumber]
        set analysis(lockSide$n) [sc_pos side]
    } else {
        set state normal
    }
    set w ".analysisWin$n"
    $w.b1.move configure -state $state
    $w.b1.line configure -state $state
    if {$analysis(uci$n)} {
        $w.b1.multipv configure -state $state
    }
    $w.b1.alllines configure -state $state
    $w.b1.automove configure -state $state
    if { $n == 1 } {
        $w.b1.annotate configure -state $state
        $w.b1.bFinishGame configure -state $state
    }
    updateAnalysis $n
}
################################################################################
# updateAnalysisText
#   Update the text in an analysis window.
################################################################################
proc updateAnalysisText {{n 1}} {
    global analysis
    
    set nps 0
    if {$analysis(currmovenumber$n) > $analysis(maxmovenumber$n) } {
        set analysis(maxmovenumber$n) $analysis(currmovenumber$n)
    }
    if {$analysis(time$n) > 0.0} {
        set nps [expr {round($analysis(nodes$n) / $analysis(time$n))} ]
    }
    set score $analysis(score$n)
    
    set t .analysisWin$n.text
    set h .analysisWin$n.hist.text
    
    $t configure -state normal
    $t delete 0.0 end
    
    if { $analysis(uci$n) } {
        if { [expr abs($score)] >= 327.0 } {
            if { [catch { set tmp [format "M%d " $analysis(scoremate$n)]} ] } {
                set tmp [format "%+.1f " $score]
            }
        } else {
            set tmp [format "%+.1f " $score]
        }
        $t insert end $tmp
        
        $t insert end "[tr Depth]: "
        if {$analysis(showEngineInfo$n) && $analysis(seldepth$n) != 0} {
            $t insert end [ format "%2u/%u " $analysis(depth$n) $analysis(seldepth$n)] small
        } else {
            $t insert end [ format "%2u " $analysis(depth$n) ] small
        }
        $t insert end "[tr Nodes]: "
        $t insert end [ format "%6uK (%u kn/s) " $analysis(nodes$n) $nps ] small
        $t insert end "[tr Time]: "
        $t insert end [ format "%6.2f s" $analysis(time$n) ] small
        if {$analysis(showEngineInfo$n)} {
            $t insert end "\n" small
            $t insert end "[tr Current]: "
            $t insert end [ format "%s (%s/%s) " [::trans $analysis(currmove$n)] $analysis(currmovenumber$n) $analysis(maxmovenumber$n)] small
            $t insert end "TB Hits: "
            $t insert end [ format "%u " $analysis(tbhits$n)] small
            $t insert end "Nps: "
            $t insert end [ format "%u n/s " $analysis(nps$n)] small
            $t insert end "Hash Full: "
            set hashfull [expr {round($analysis(hashfull$n) / 10)}]
            $t insert end [ format "%u%% " $hashfull ] small
            $t insert end "CPU Load: "
            set cpuload [expr {round($analysis(cpuload$n) / 10)}]
            $t insert end [ format "%u%% " $cpuload ] small
            
            #$t insert end [ format "\nCurrent: %s (%s) - Hashfull: %u - nps: %u - TBhits: %u - CPUload: %u" $analysis(currmove$n) $analysis(currmovenumber$n) $analysis(hashfull$n) $analysis(nps$n) $analysis(tbhits$n) $analysis(cpuload$n) ]
        }
    } else {
        set newStr [format "Depth:   %6u      Nodes: %6uK (%u kn/s)\n" $analysis(depth$n) $analysis(nodes$n) $nps]
        append newStr [format "Score: %+8.2f      Time: %9.2f seconds\n" $score $analysis(time$n)]
        $t insert 1.0 $newStr small
    }
    
    
    if {$analysis(automove$n)} {
        if {$analysis(automoveThinking$n)} {
            set moves "   Thinking..... "
        } else {
            set moves "   Your move..... "
        }
        
        if { ! $analysis(uci$n) } {
            $t insert end $moves blue
        }
        $t configure -state disabled
        updateAnalysisBoard $n ""
        return
    }
    
    if {! $::analysis(movesDisplay$n)}  {
        $h configure -state normal
        $h delete 0.0 end
        $h insert end "     $::tr(ClickHereToSeeMoves)\n" blue
        updateAnalysisBoard $n ""
        $h configure -state disabled
        return
    }
    
    if { $analysis(uci$n) } {
        set moves [ lindex [ lindex $analysis(multiPV$n) 0 ] 2 ]
    } else  {
        set moves $analysis(moves$n)
    }
    
    $h configure -state normal
    set cleared 0
    if { $analysis(depth$n) < $analysis(prev_depth$n)  || $analysis(prev_depth$n) == 0 } {
        $h delete 1.0 end
        set cleared 1
    }
    
    ################################################################################
    if { $analysis(uci$n) } {
        if {$cleared} { set analysis(multiPV$n) {} ; set analysis(multiPVraw$n) {} }
        if {$analysis(multiPVCount$n) == 1} {
            set newhst [format "%2d %s %s" $analysis(depth$n) [scoreToMate $score $moves $n] [addMoveNumbers $n [::trans $moves]]]
            if {$newhst != $analysis(lastHistory$n) && $moves != ""} {
                $h insert end [format "%s (%.2f)\n" $newhst $analysis(time$n)] indent
                $h see end-1c
                set analysis(lastHistory$n) $newhst
            }
        } else {
            $h delete 1.0 end
            # First line
            set pv [lindex $analysis(multiPV$n) 0]
            if { $pv != "" } {
                catch { set newStr [format "%2d %s " [lindex $pv 0] [scoreToMate $score [lindex $pv 2] $n] ] }
            
                $h insert end "1 " gray
                append newStr "[addMoveNumbers $n [::trans [lindex $pv 2]]] [format (%.2f)\n [lindex $pv 4]]"
                $h insert end $newStr blue
            
                set lineNumber 1
                foreach pv $analysis(multiPV$n) {
                    if {$lineNumber == 1} { incr lineNumber ; continue }
                    $h insert end "$lineNumber " gray
                    set score [scoreToMate [lindex $pv 1] [lindex $pv 2] $n]
                    $h insert end [format "%2d %s %s (%.2f)\n" [lindex $pv 0] $score [addMoveNumbers $n [::trans [lindex $pv 2]]] [lindex $pv 4]] indent
                    incr lineNumber
                }
            }
        }
        ################################################################################
    } else  {
        # original Scid analysis display
        $h insert end [format "%2d %+5.2f %s (%.2f)\n" $analysis(depth$n) $score [::trans $moves] $analysis(time$n)] indent
        $h see end-1c
    }
    
    $h configure -state disabled
    set analysis(prev_depth$n) $analysis(depth$n)
    if { ! $analysis(uci$n) } {
        $t insert end [::trans $moves] blue
    }
    # $t tag add score 2.0 2.13
    $t configure -state disabled
    
    updateAnalysisBoard $n $analysis(moves$n)
}
################################################################################
# args = score, pv
# returns M X if mate detected (# or ++) or original score
################################################################################
proc scoreToMate { score pv n } {
    
    if {$::analysis(lockEngine$n)} {
        return [format "%+5.2f" $score]
    }
    
    if { [string index $pv end] == "#" || [string index $pv end] == "+" && [string index $pv end-1] == "+"} {
        set plies [llength $pv]
        
        set mate [expr $plies / 2 + 1 ]
        
        set sign ""
        if {[expr $plies % 2] == 0 && [sc_pos side] == "white" || [expr $plies % 2] == 1 && [sc_pos side] == "black"} {
            set sign "-"
        }
        if {[sc_pos side] == "white" } {
            if { $sign == "" } {
                set mate [expr $plies / 2 + 1 ]
            } else  {
                set mate [expr $plies / 2 ]
            }
        } else  {
            if { $sign == "" } {
                set mate [expr $plies / 2 ]
            } else  {
                set mate [expr $plies / 2 + 1 ]
            }
        }
        
        set ret "M$sign$mate"
    } else  {
        set ret [format "%+5.2f" $score]
    }
    
    return $ret
}
################################################################################
# returns the pv with move numbers added
# ::pgn::moveNumberSpaces controls space between number and move
################################################################################
proc addMoveNumbers { e pv } {
    global analysis

    if { $analysis(lockEngine$e) } {
      set n $analysis(lockN$e)
      set turn $analysis(lockSide$e)
    } else {
      set n [sc_pos moveNumber]
      set turn [sc_pos side]
    }

    if {$::pgn::moveNumberSpaces} {
      set spc { }
    } else {
      set spc {}
    }

    set ret ""
    set start 0
    if {$turn == "black"} {
        set ret "$n.$spc... [lindex $pv 0] "
        incr start
        incr n
    }
    for {set i $start} {$i < [llength $pv]} {incr i} {
        set m [lindex $pv $i]
        if { [expr $i % 2] == 0 && $start == 0 || [expr $i % 2] == 1 && $start == 1 } {
            append ret "$n.$spc$m "
        } else  {
            append ret "$m "
            incr n
        }
    }
    return $ret
}
################################################################################
# toggleAnalysisBoard
#   Toggle whether the small analysis board is shown.
################################################################################
proc toggleAnalysisBoard {n} {
    global analysis
    if { $analysis(showBoard$n) } {
        set analysis(showBoard$n) 0
        pack forget .analysisWin$n.bd
        setWinSize .analysisWin$n
        bind .analysisWin$n <Configure> "recordWinSize .analysisWin$n"
    } else {
        bind .analysisWin$n <Configure> ""
        set analysis(showBoard$n) 1
        pack .analysisWin$n.bd -side right -before .analysisWin$n.b1 -padx 4 -pady 4 -anchor n
        update
        .analysisWin$n.hist.text configure -setgrid 0
        .analysisWin$n.text configure -setgrid 0
        set x [winfo reqwidth .analysisWin$n]
        set y [winfo reqheight .analysisWin$n]
        wm geometry .analysisWin$n ${x}x${y}
        .analysisWin$n.hist.text configure -setgrid 1
        .analysisWin$n.text configure -setgrid 1
    }
}
################################################################################
# toggleEngineInfo
#   Toggle whether engine info are shown.
################################################################################
proc toggleEngineInfo {n} {
    global analysis
    if { $analysis(showEngineInfo$n) } {
        .analysisWin$n.text configure -height 2
    } else {
        .analysisWin$n.text configure -height 1
    }
    updateAnalysisText $n
}
################################################################################
#
################################################################################
# updateAnalysisBoard
#   Update the small analysis board in the analysis window,
#   showing the position after making the specified moves
#   from the current main board position.
#
proc updateAnalysisBoard {n moves} {
    global analysis
    # PG : this should not be commented
    if {! $analysis(showBoard$n)} { return }
    
    set bd .analysisWin$n.bd
    # Push a temporary copy of the current game:
    sc_game push copyfast
    
    # Make the engine moves and update the board:
    sc_move_add $moves $n
    ::board::update $bd [sc_pos board]
    
    # Pop the temporary game:
    sc_game pop
}

################################################################################
# sendFENtoEngineUCI
#   Wait for the engine to be ready then send position and go infinite
#   engine_n: number of the engine that will receive the commands
#   delay: delay the commands - INTERNAL - DON'T USE OUTSIDE sendFENtoEngineUCI
################################################################################
proc sendFENtoEngineUCI {engine_n  {delay 0}} {
    global analysis
    set analysis(after$engine_n) ""

    if {$analysis(waitForReadyOk$engine_n) } {
        #If too slow something is wrong: give up
        if {$delay > 250} { return }

        # Engine is not ready: process events, idle tasks and then call me back
        incr delay
        set cmd "set ::analysis(after$engine_n) "
        append cmd { [ } " after $delay sendFENtoEngineUCI $engine_n $delay " { ] }
        set analysis(after$engine_n) [eval [list after idle $cmd]]
    } else {
        sendToEngine $engine_n "position fen $analysis(fen$engine_n)"
        sendToEngine $engine_n "go infinite"
    }
}

################################################################################
# updateAnalysis
#   Update an analysis window by sending the current board
#   to the engine.
################################################################################
proc updateAnalysis {{n 1}} {
    global analysis
    if {$analysis(pipe$n) == ""} { return }
    # Just return if no output has been seen from the analysis program yet:
    if {! $analysis(seen$n)} { return }
    # No need to update if no analysis is running
    if { ! $analysis(analyzeMode$n) } { return }
    # No need to send current board if engine is locked
    if { $analysis(lockEngine$n) } { return }

    if { $analysis(uci$n) } {
        if {$analysis(after$n) == "" } {
            if { $analysis(fen$n) != "" } { sendToEngine $n "stop" }
            set analysis(waitForReadyOk$n) 1
            sendToEngine $n "isready"
            set analysis(after$n) [after idle "sendFENtoEngineUCI $n"]
        }
        set analysis(fen$n) [sc_pos fen]
        set analysis(maxmovenumber$n) 0
        set analysis(movelist$n) [sc_game moves coord list]
        set analysis(nonStdStart$n) [sc_game startBoard]
    } else {
        #TODO: remove 0.3s delay even for other engines

        global analysisWin windowsOS

        # If too close to the previous update, and no other future update is
        # pending, reschedule this update to occur in another 0.3 seconds:
        #
        if {[catch {set clicks [clock clicks -milliseconds]}]} {
            set clicks [clock clicks]
        }
        set diff [expr {$clicks - $analysis(lastClicks$n)} ]
        if {$diff < 300  &&  $diff >= 0} {
            if {$analysis(after$n) == ""} {
                set analysis(after$n) [after 300 updateAnalysis $n]
            }
            return
        }
        set analysis(lastClicks$n) $clicks
        set analysis(after$n) ""
        after cancel updateAnalysis $n

        set old_movelist $analysis(movelist$n)
        set movelist [sc_game moves coord list]
        set analysis(movelist$n) $movelist
        set nonStdStart [sc_game startBoard]
        set old_nonStdStart $analysis(nonStdStart$n)
        set analysis(nonStdStart$n) $nonStdStart

        # This section is for engines that support "analyze":
        if {$analysis(has_analyze$n)} {
            sendToEngine $n "exit"   ;# Get out of analyze mode, to send moves.
            
            # On Crafty, "force" command has different meaning when not in
            # XBoard mode, and some users have noticed Crafty not being in
            # that mode at this point -- although I cannot reproduce this.
            # So just re-send "xboard" to Crafty to make sure:
            if {$analysis(isCrafty$n)} { sendToEngine $n "xboard" }
            
            sendToEngine $n "force"  ;# Stop engine replying to moves.
            # Check if the setboard command must be used -- that is, if the
            # previous or current position arose from a non-standard start.
            
            #if {$analysis(has_setboard$n)  &&  ($old_nonStdStart  || $nonStdStart)}
            # We skip all code below if the engine has setboard capability : this is provides less error prone behavior
            if {$analysis(has_setboard$n)} {
                sendToEngine $n "setboard [sc_pos fen]"
                # Most engines with setboard do not recognize the crafty "mn"
                # command (it is not in the XBoard/WinBoard protocol), so only send it to crafty:
                if {$analysis(isCrafty$n)} { sendToEngine $n "mn [sc_pos moveNumber]" }
                sendToEngine $n "analyze"
                return
            }
            
            # If we need a non-standard start and the engine does not have
            # setboard, the user is out of luck:
            if {$nonStdStart} {
                set analysis(moves$n) "  Sorry, this game has a non-standard start position."
                updateAnalysisText $n
                return
            }
            
            # Here, the engine has the analyze command (and no setboard) but this game does
            # not have a non-standard start position.
            
            set oldlen [llength $old_movelist]
            set newlen [llength $movelist]
            
            # Check for optimization to minimize the commands to be sent:
            # Scid sends "undo" to backup wherever possible, and avoid "new" as
            # on many engines this would clear hash tables, causing poor
            # hash table performance.
            
            # Send just the new move if possible (if the new move list is exactly
            # the same as the previous move list, with one extra move):
            if {($newlen == $oldlen + 1) && ($old_movelist == [lrange $movelist 0 [expr {$oldlen - 1} ]])} {
                sendMoveToEngine $n [lindex $movelist $oldlen]
                
            } elseif {($newlen + 1 == $oldlen) && ($movelist == [lrange $old_movelist 0 [expr {$newlen - 1} ]])} {
                # Here the new move list is the same as the old list but with one
                # less move, just send one "undo":
                sendToEngine $n "undo"
                
            } elseif {$newlen == $oldlen  &&  $old_movelist == $movelist} {
                
                # Here the board has not changed, so send nothing
                
            } else {
                
                # Otherwise, undo and re-send all moves:
                for {set i 0} {$i < $oldlen} {incr i} {
                    sendToEngine $n "undo"
                }
                foreach m $movelist {
                    sendMoveToEngine $n $m
                }
                
            }
            
            sendToEngine $n "analyze"
            
        } else {
            
            # This section is for engines without the analyze command:
            # In this case, Scid just sends "new", "force" and a bunch
            # of moves, then sets a very long search time/depth and
            # sends "go". This is not ideal but it works OK for engines
            # without "analyze" that I have tried.
            
            # If Unix OS and engine wants it, send an INT signal:
            if {(!$windowsOS)  &&  $analysis(send_sigint$n)} {
                catch {exec -- kill -s INT [pid $analysis(pipe$n)]}
            }
            sendToEngine $n "new"
            sendToEngine $n "force"
            if { $nonStdStart && ! $analysis(has_setboard$n) } {
                set analysis(moves$n) "  Sorry, this game has a non-standard start position."
                updateAnalysisText $n
                return
            }
            if {$analysis(has_setboard$n)} {
                sendToEngine $n "setboard [sc_pos fen]"
            } else  {
                foreach m $movelist {
                    sendMoveToEngine $n $m
                }
            }
            # Set engine to be white or black:
            sendToEngine $n [sc_pos side]
            # Set search time and depth to something very large and start search:
            sendToEngine $n "st 120000"
            sendToEngine $n "sd 50"
            sendToEngine $n "post"
            sendToEngine $n "go"
        }
    }
}
################################################################################
#
################################################################################

set temptime 0
trace variable temptime w {::utils::validate::Regexp {^[0-9]*\.?[0-9]*$}}

proc setAutomoveTime {{n 1}} {
    global analysis temptime dialogResult
    set ::tempn $n
    set temptime [expr {$analysis(automoveTime$n) / 1000.0} ]
    set w .apdialog
    toplevel $w
    #wm transient $w .analysisWin
    ::setTitle $w "Scid: Engine thinking time"
    wm resizable $w 0 0
    ttk::label $w.label -text "Set the engine thinking time per move in seconds:"
    pack $w.label -side top -pady 5 -padx 5
    ttk::entry $w.entry -background white -width 10 -textvariable temptime
    pack $w.entry -side top -pady 5
    bind $w.entry <Escape> { .apdialog.buttons.cancel invoke }
    bind $w.entry <Return> { .apdialog.buttons.ok invoke }
    
    addHorizontalRule $w
    
    set dialogResult ""
    set b [ttk::frame $w.buttons]
    pack $b -side top -fill x
    ttk::button $b.cancel -text $::tr(Cancel) -command {
        focus .
        catch {grab release .apdialog}
        destroy .apdialog
        focus .
        set dialogResult Cancel
    }
    ttk::button $b.ok -text "OK" -command {
        catch {grab release .apdialog}
        if {$temptime < 0.1} { set temptime 0.1 }
        set analysis(automoveTime$tempn) [expr {int($temptime * 1000)} ]
        focus .
        catch {grab release .apdialog}
        destroy .apdialog
        focus .
        set dialogResult OK
    }
    pack $b.cancel $b.ok -side right -padx 5 -pady 5
    focus $w.entry
    update
    catch {grab .apdialog}
    tkwait window .apdialog
    if {$dialogResult != "OK"} {
        return 0
    }
    return 1
}

proc toggleAutomove {{n 1}} {
    global analysis
    if {! $analysis(automove$n)} {
        cancelAutomove $n
    } else {
        set analysis(automove$n) 0
        if {! [setAutomoveTime $n]} {
            return
        }
        set analysis(automove$n) 1
        automove $n
    }
}

proc cancelAutomove {{n 1}} {
    global analysis
    set analysis(automove$n) 0
    after cancel "automove $n"
    after cancel "automove_go $n"
}

proc automove {{n 1}} {
    global analysis autoplayDelay
    if {! $analysis(automove$n)} { return }
    after cancel "automove $n"
    set analysis(automoveThinking$n) 1
    after $analysis(automoveTime$n) "automove_go $n"
}

proc automove_go {{n 1}} {
    global analysis
    if {$analysis(automove$n)} {
        if {[makeAnalysisMove $n]} {
            set analysis(autoMoveThinking$n) 0
            updateBoard -pgn
            after cancel "automove $n"
            ::tree::doTraining $n
        } else {
            after 1000 "automove $n"
        }
    }
}
################################################################################
# If UCI engine, add move through a dedicated function in uci namespace
# returns the error caught by catch
################################################################################
proc sc_move_add { moves n } {
    if { $::analysis(uci$n) } {
        return [::uci::sc_move_add $moves]
    } else  {
        return [ catch { sc_move addSan $moves } ]
    }
}
################################################################################
# append scid directory if path starts with .
################################################################################
proc toAbsPath { path } {
    set new $path
    if {[string index $new 0] == "." } {
        set scidInstallDir [file dirname [info nameofexecutable] ]
        set new [ string replace $new 0 0  $scidInstallDir ]
    }
    return $new
}
################################################################################
#
################################################################################

###
### End of file: analysis.tcl
###
###
### Computer Tournament 
###
### comp.tcl: part of Scid.
### Copyright (C) 2010- Steven Atkinson

# Credit to Fulvio for a few lines of UCI code that enabled me
# to make this run nicely (without constantly reseting analysis),
# and gave me impetus for a decent control structure using
# semaphores/vwait instead of the often abused dig-deeper procedural flow 
# sometimes evident in tcl programs.

# Opening books are disabled for UCI engines... which makes doing a computer
# tournament Xboard openings will work if configured individually.

set comp(playing) 0
set comp(current) 0
set comp(games) {}
set comp(count) 2 ; # number of computer players
set comp(start) 0 ; # "Start at position" radiobutton
set comp(delta) 2000; # 2 seconds is the time
set comp(permoveleeway) 1.75 ;# 175% is the max allowed

### Non-transient options are set in start.tcl

proc compInit {} {
  global analysis comp engines

  set w .comp

  if {[winfo exists $w]} {
    raiseWin $w
    return
  }
  toplevel $w
  wm state $w withdrawn
  wm title $w "Configure Tournament"
  setWinLocation $w

  pack [frame $w.engines] -side top
  addHorizontalRule $w
  pack [frame $w.config] -fill x -expand 1
  addHorizontalRule $w
  pack [frame $w.buttons] -side bottom -pady 5 -padx 5

  ### Engines

  pack [frame $w.engines.top] -side top -expand 1 -fill x -pady 5
  grid [label $w.engines.top.label -text "Number of Engines"] -row 0 -column 0 -sticky w
  grid [spinbox $w.engines.top.count -textvariable comp(count) -from 2 -to [llength $engines(list)] -width 4 -highlightthickness 0] -row 0 -column 1  -padx 15
  dialogbutton $w.engines.top.update -text $::tr(Update) -command drawCombos
  grid $w.engines.top.update -row 0 -column 2 -sticky e

  set comp(countcombos) $comp(count)
  drawCombos

  ### Config widgets

  set row 0

  label $w.config.eventlabel -text {Event Name}
  entry $w.config.evententry -width 17 -textvariable comp(name) -borderwidth 1

  # 17 is magic number to pad the widget out to match the width
  # after the three adjudication buttons have been packed

  grid $w.config.eventlabel -row $row -column 0 -sticky w -padx 5 -pady 2
  grid $w.config.evententry -row $row -column 1 -sticky ew -padx 5 -pady 2

  incr row
  label $w.config.roundslabel -text {Number of Rounds}
  spinbox $w.config.roundsvalue -textvariable comp(rounds) -from 1 -to 10 -width 9

  grid $w.config.roundslabel -row $row -column 0 -sticky w -padx 5 -pady 2
  grid $w.config.roundsvalue -row $row -column 1 -sticky ew -padx 5 -pady 2

  incr row
  frame $w.config.control
  label $w.config.control.0 -text {Time Control is per}
  radiobutton $w.config.control.1 -variable comp(timecontrol) -value pergame -text Game -command checkTimeControl
  radiobutton $w.config.control.2 -variable comp(timecontrol) -value permove -text Move -command checkTimeControl

  pack $w.config.control.0 $w.config.control.1 $w.config.control.2 -side left -expand 1 -fill x
  grid $w.config.control  -row $row -column 0 -columnspan 2 -sticky ew -pady 2

  incr row
  frame $w.config.timesecs 
  label $w.config.timesecs.label -text {Time per Move}
  set tmp $comp(seconds)
  spinbox $w.config.timesecs.value -textvariable comp(seconds) -from 1 -to 3600 -width 4
  set comp(seconds) $tmp
  label $w.config.timesecs.label2 -text secs

  pack $w.config.timesecs.label -side left
  pack $w.config.timesecs.label2 $w.config.timesecs.value -side right
  grid $w.config.timesecs -row $row -column 0 -columnspan 2 -sticky ew -pady 2 -padx 5

  incr row
  frame $w.config.timegame 
    # hack to stop the spinbox from zeroing floating point values for minutes time
  set temp $comp(minutes)
  label $w.config.timegame.label -text {Time per game (base/incr)}
  spinbox $w.config.timegame.mins -textvariable comp(minutes) -from 0 -to 40 -width 4
  set comp(minutes) $temp

  set temp $comp(incr)
  label $w.config.timegame.label2 -text mins
  spinbox $w.config.timegame.incr -textvariable comp(incr) -from 0 -to 60 -width 4
  label $w.config.timegame.label3 -text secs
  set comp(incr) $temp

  pack $w.config.timegame.label -side left
  pack $w.config.timegame.label3 $w.config.timegame.incr $w.config.timegame.label2 $w.config.timegame.mins -side right
  grid $w.config.timegame -row $row -column 0 -columnspan 2 -sticky ew -pady 2 -padx 5

  incr row
  label $w.config.showclocklabel -text {Show Clocks}
  checkbutton $w.config.showclockvalue -variable comp(showclock) 

  grid $w.config.showclocklabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.showclockvalue -row $row -column 1 -padx 5 

  checkTimeControl

  incr row
  label $w.config.ponderlabel -text {Permanent Thinking}
  checkbutton $w.config.pondervalue -variable comp(ponder) 

  grid $w.config.ponderlabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.pondervalue -row $row -column 1 -padx 5 

  incr row
  label $w.config.animatelabel -text {Animate Moves}
  checkbutton $w.config.animatevalue -variable comp(animate) 

  grid $w.config.animatelabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.animatevalue -row $row -column 1 -padx 5 

  incr row
  label $w.config.verboselabel -text {Print info to Console}
  checkbutton $w.config.verbosevalue -variable comp(debug) 

  grid $w.config.verboselabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.verbosevalue -row $row -column 1 -padx 5 

  incr row
  label $w.config.loglabel -text {Log Engines}
  checkbutton $w.config.logvalue -variable analysis(logEngines)

  grid $w.config.loglabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.logvalue -row $row -column 1 -padx 5 

  incr row
  label $w.config.firstonlylabel -text {First engine plays others}
  checkbutton $w.config.firstonlyvalue -variable comp(firstonly) 

  grid $w.config.firstonlylabel -row $row -column 0 -sticky w -padx 5 
  grid $w.config.firstonlyvalue -row $row -column 1 -padx 5 

  incr row
  label $w.config.start1label -text {All games from start position}
  radiobutton $w.config.start1button -variable comp(start) -value 0
  grid $w.config.start1label -row $row -column 0 -sticky w -padx 5 
  grid $w.config.start1button -row $row -column 1 -padx 5 

  incr row
  label $w.config.start2label -text {First game from current position}
  radiobutton $w.config.start2button -variable comp(start) -value 1
  grid $w.config.start2label -row $row -column 0 -sticky w -padx 5 
  grid $w.config.start2button -row $row -column 1 -padx 5 

  incr row
  label $w.config.start3label -text {All games from current position}
  radiobutton $w.config.start3button -variable comp(start) -value 2
  grid $w.config.start3label -row $row -column 0 -sticky w -padx 5 
  grid $w.config.start3button -row $row -column 1 -padx 5 

  incr row
  frame $w.config.book
  label $w.config.book.label -textvar ::tr(UseBook) 
  checkbutton $w.config.book.value -variable comp(usebook)
  set bookPath $::scidBooksDir
  set bookList [ lsort -dictionary [ glob -nocomplain -directory $bookPath *.bin ] ]
  set tmp {}
  ttk::combobox $w.config.book.combo -width 12
  if { [llength $bookList] == 0 } {
    $w.config.book.value configure -state disabled
    set comp(usebook) 0
  } else {
    set i 0
    set idx 0
    foreach file  $bookList {
      lappend tmp [file tail $file]
      if { $comp(book) == [file tail $file]} {
	set idx $i
      }
      incr i
    }
    $w.config.book.combo configure -values $tmp
    $w.config.book.combo current $idx
  }
  grid $w.config.book -row $row -column 0 -columnspan 2 -sticky ew
  pack $w.config.book.label -side left -padx 10
  pack $w.config.book.combo $w.config.book.value -side right -padx 10

  ### OK, Cancel Buttons

  if {$::windowsOS} {
    # fixed width dialogbutton cuts text in winxp
    set button button
  } else {
    set button dialogbutton
  }

  $button $w.buttons.cancel -text $::tr(Cancel) -command compClose
  $button $w.buttons.ok -text Ok -command compOk
  $button $w.buttons.help -text $::tr(Help) -command {helpWindow Tourney}

  focus $w.buttons.ok
  pack $w.buttons.ok $w.buttons.help -side left -padx 5
  pack $w.buttons.cancel -side right -padx 5

  bind $w <Configure> "recordWinSize $w"
  wm protocol $w WM_DELETE_WINDOW compClose
  bind $w <Escape> compClose
  bind $w <F1> {helpWindow Tourney}
  update
  wm state $w normal
}

proc checkTimeControl {} {
  set w .comp
  if {$::comp(timecontrol) == "permove" } {
    foreach i [winfo children $w.config.timesecs] {
      $i configure -state normal
    }
    foreach i "[winfo children $w.config.timegame] $w.config.showclocklabel $w.config.showclockvalue" {
      $i configure -state disabled
    }
  } else {
    foreach i [winfo children $w.config.timesecs] {
      $i configure -state disabled
    }
    foreach i "[winfo children $w.config.timegame] $w.config.showclocklabel $w.config.showclockvalue" {
      $i configure -state normal
    }
  }
  update
}

proc compOk {} {
  global analysis comp engines

  set w .comp

  set comp(startfen) [sc_pos fen]

  # make sure decimals have a leading 0
  catch {
    set comp(incr) [expr $comp(incr)]
    set comp(minutes) [expr $comp(minutes)]
    set comp(seconds) [expr $comp(seconds)]
  }

  if {$comp(count) != $comp(countcombos)} {
    drawCombos
    return
  }

  if {[sc_base isReadOnly]} {
    set answer [tk_messageBox -title Tournanment -icon question -type okcancel \
	-message {Database is read only. Continue ?} -parent $w]
    if {$answer != "ok"} {return}
  }
  if {![sc_pos isAt end] && $comp(start) > 0} {
    set answer [tk_messageBox -title Tournanment -icon question -type okcancel \
	-message {Current game is not at end of game. Continue ?} -parent $w]
    if {$answer != "ok"} {return}
  }
    
  set players {}
  set comp(players) {} ;# to remember which engines are selected between widget restarts
  set names {}
  set comp(games) {}
  set comp(current) 0
  set comp(book) [.comp.config.book.combo get]

  if {$comp(timecontrol) == "permove"} {
    set comp(time) [expr {int($comp(seconds) * 1000)}]
    puts "Move delay is $comp(time) milliseconds"
  } 

  for {set i 0} {$i < $comp(count)} {incr i} {
    set j [$w.engines.list.$i.combo current]
    lappend comp(players) $j
    lappend players $j
    lappend names   [lindex [lindex $engines(list) $j] 0]
  }

  ### Check players are unique
  if {[llength [lsort -unique $players]] != $comp(count)} {
    tk_messageBox -type ok -parent $w -title {Scid: error} \
      -message {Duplicate engines not supported}
    return
  }
  foreach i $players j $names {
    puts "player $i is $j"
  }

  ### Reconfigure init widget for pausing

  for {set i 0} {$i < $comp(count)} {incr i} {
    $w.engines.list.$i.combo configure -state disabled ; # disable widgets too
    $w.engines.list.$i.configure configure -state disabled 
  }
  foreach j {.comp.config .comp.engines .comp.engines.top .comp.config.control .comp.config.timesecs .comp.config.timegame .comp.config.book} {
    foreach i [winfo children $j] {
      catch {$i configure -state disabled}
    }
  }
  $w.buttons.ok configure -text Pause -command compPause -state normal
  pack forget $w.buttons.help
  $w.buttons.cancel configure -text {End Comp} -command compAbort -state normal
  wm title $w "Engine Tournament"
  focus $w.buttons.ok

  ### Clocks

  if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
    frame $w.clocks
    pack $w.clocks -side top -expand yes -fill x -padx 20

    ::gameclock::new $w.clocks 1 80 1
    ::gameclock::new $w.clocks 2 80 1
    ::gameclock::setColor 1 white
    ::gameclock::setColor 2 black

  }

  ### Extra decision buttons

  frame $w.say
  pack $w.say -side bottom -pady 5 -padx 5

  if {$::windowsOS} {
    # fixed width dialogbutton cuts text in winxp
    set button button
  } else {
    set button dialogbutton
  }

  $button $w.say.white -text "$::tr(White) wins" -command {compGameEnd 1}
  $button $w.say.draw  -text "$::tr(Draw)" -command {compGameEnd =}
  $button $w.say.black -text "$::tr(Black) wins" -command {compGameEnd 0}

  pack $w.say.white $w.say.draw -side left -padx 5
  pack $w.say.black -side right -padx 5
  
  ### Place games in cue

  for {set i 0} {$i < $comp(count)} {incr i} {
    for {set j 0} {$j <= $i} {incr j} {
      if {$i != $j} {
	for {set k 1} {$k <= $comp(rounds)} {incr k} {
	  compCueGame [lindex $players $j] [lindex $players $i] [lindex $names $j] [lindex $names $i] $k
	  incr k
	  if {$k <= $comp(rounds)} {
	    compCueGame [lindex $players $i] [lindex $players $j] [lindex $names $i] [lindex $names $j] $k
	  }
	}
      }
      if {$comp(firstonly)} {break}
    }
  }

  # This is no longer reliable because of comp(firstonly) option
  # set num_games [expr {$comp(count) * ($comp(count)-1) * $comp(rounds) / 2}]
  set num_games [llength $comp(games)]
  puts "$num_games GAMES total: $comp(games)"

  ttk::progressbar $w.progress -mode determinate \
    -maximum $num_games -variable comp(current)
  pack $w.progress -side bottom -fill x -padx 10 -pady 5

  ### Play games

  set thisgame [lindex $comp(games) $comp(current)]

  while {$thisgame != {} } {
    puts_ "thisgame is \"$thisgame\", games are \"$comp(games)\""
    set n     [lindex $thisgame 0]
    set m     [lindex $thisgame 1]
    set name1 [lindex $thisgame 2]
    set name2 [lindex $thisgame 3]
    set k     [lindex $thisgame 4]
    if {$n != {} && $m != {}} {
      puts "Game [expr $comp(current) + 1]: $name1 vs. $name2"
      incr comp(current)
      compNM $n $m $k
    }
    set thisgame [lindex $comp(games) $comp(current)]
  } 

  ### Comp over

  puts {Comp finished}
  if {[winfo exists .comp]} {
    # voodoo that you do
    wm geometry .comp [wm geometry .comp]
    pack forget .comp.buttons.help

    # Hmm - if we leave this window open , and run F2 (say) the engines can sometimes stop working 
    # So better make sure this window gets closed

    .comp.buttons.ok configure -text [tr Restart] -command {
       compDestroy
       update
       compInit
    }
    .comp.buttons.cancel configure -text [tr Close] -command {
       compDestroy
    }
    foreach i [winfo children $w.say] {
      catch {$i configure -state disabled}
    }
    raiseWin .comp
  }
}

proc compNM {n m k} {
  global analysis comp ::uci::uciInfo

  set comp(result) {}

  if {$comp(timecontrol) == "pergame"} {
    # minutes does not have to be an integer
    set comp(wtime) [expr int($comp(minutes)*60*1000)]
    set comp(btime) [expr int($comp(minutes)*60*1000)]
    set total [expr int($comp(minutes) * 60)]
    set mins [expr $total/60]
    set secs [expr $total%60]
    if {$secs == 0} {
      set timecontrol $mins
    } else {
      if {$secs < 10} {
	set secs "0$secs"
      }
      set timecontrol $mins:$secs
    }

    if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
      ::gameclock::setSec 1 [ expr -int($comp(minutes)*60) ]
      ::gameclock::setSec 2 [ expr -int($comp(minutes)*60) ]
    }
  }

  sc_game new

  if {($comp(start) == 1 && $comp(current) == 1) || $comp(start) == 2} {
    sc_game startBoard $comp(startfen)
    set comp(startpos) "fen $comp(startfen)"
  } else {
    set comp(startpos) startpos 
  }

  set comp(playing) 1
  set comp(paused) 0
  set comp(white) $n
  set comp(fen) {}
  set incr [expr int($comp(incr) * 1000)]
  set comp(inbook) $comp(usebook)

  if {[winfo exists .analysisWin$n]} "destroy .analysisWin$n"
  if {[winfo exists .analysisWin$m]} "destroy .analysisWin$m"

  ### makeAnalysisWin creates a toplevel widget to run an engine but we don't really need a toplevel %<
  # The problem is that only UCI has a procedure for running an engine without a toplevel (uci::startEngine).
  # There is currently no equivalent for xboard engines

  makeAnalysisWin $n $n

  if {![winfo exists .analysisWin$n]} {
    puts_ ".analysisWin$n dead, exitting Tournament"
    set comp(games) {}
    return
  }
  toggleMovesDisplay $n

  makeAnalysisWin $m $m
  if {![winfo exists .analysisWin$m]} {
    puts_ ".analysisWin$m dead, exitting Tournament"
    set comp(games) {}
    return
  }
  toggleMovesDisplay $m

  # Stop all engines
  # (Is this necessary ? We are sending a "stop" straight away. &&&)
  if {$analysis(analyzeMode$n)} { toggleEngineAnalysis $n 1 }
  if {$analysis(analyzeMode$m)} { toggleEngineAnalysis $m 1 }
  
  puts_ "compNM : setting white $analysis(name$n) , black $analysis(name$m), round $k"
  sc_game tags set -white $analysis(name$n)
  sc_game tags set -black $analysis(name$m)
  sc_game tags set -event $comp(name)
  if {$comp(timecontrol) == "permove"} {
    sc_game tags set -date [::utils::date::today] -round $k -extra "{Movetime \"$comp(seconds)\"}"
  } else {
    sc_game tags set -date [::utils::date::today] -round $k -extra "{TimeControl \"$timecontrol/$comp(incr)\"}"
  }
  update idletasks
  updateBoard -pgn

  updateTitle
  update

  ### Thanks to HGM and Talkchess for help with UCI/Xboard protocols

  ### Initialisation

  puts_ "COMP Engine initialisation"
  foreach current_engine "$n $m" {
    ### don't display engine output
    set analysis(movesDisplay$current_engine) 2
    toggleMovesDisplay $current_engine

    if {$::analysis(uci$current_engine)} {
        ### UCI initialisation

        # fulvio issues isready every move ??
	set analysis(waitForReadyOk$current_engine) 1
	sendToEngine $current_engine ucinewgame
        if {$comp(ponder)} {
	  sendToEngine $current_engine "setoption name Ponder value true"
        } else {
	  sendToEngine $current_engine "setoption name Ponder value false"
        } 
	sendToEngine $current_engine "isready"
	vwait analysis(waitForReadyOk$current_engine)
	# if {!$comp(playing)} {break}
	# sendToEngine $current_engine {debug off}
    } else {
        ### xboard initialisation

	sendToEngine $current_engine xboard

        if {!$analysis(seen$current_engine)} {
          vwait analysis(seen$current_engine)
        }

	sendToEngine $current_engine "protover 2"
        if {$comp(ponder)} {
	  sendToEngine $current_engine "hard"
        } else {
	  sendToEngine $current_engine "easy"
        }
	sendToEngine $current_engine "bk off"

	# done later
	# sendToEngine $current_engine "st $comp(seconds)"

	### Hacks

	if {0} {
	  # Sjeng or Chen run too fast unless "hard" is issued
	  if {[regexp -nocase arasan $analysis(name$current_engine)]} {
	    puts_ {Hack: Arasan detected. Issuing "hard"}
	    sendToEngine $current_engine hard
	  }
	  if {[regexp -nocase sjeng $analysis(name$current_engine)]} {
	    puts_ {Hack: Sjeng detected. Issuing "hard"}
	    sendToEngine $current_engine hard
	  }
	  if {[regexp -nocase xchen $analysis(name$current_engine)] || \
	      [regexp -nocase chenard $analysis(name$current_engine)] } {
	    puts_ {Hack: Chenard detected. Issuing "hard"}
	    sendToEngine $current_engine hard
	  }
	}

        ### Setup initial position

	if {$comp(startpos) == "startpos"} {
	  if {$current_engine == $m} {
            # "new" command means "play black"
            sendToEngine $current_engine "new"
          }
        } else {
	  ## Don't test for setboard as Phalanx doest report this working feature
	  # if {$analysis(has_setboard$current_engine)}
	  sendToEngine $current_engine "setboard $comp(startfen)"
          # Without force, some engines try to play both side !?
	  sendToEngine $current_engine "force"
        }

        ### Send initial time control

        if {$comp(timecontrol) == "permove"} {
          sendToEngine $current_engine "st $comp(seconds)"
        } else {
          set secs [expr $comp(wtime)/1000]
          set seconds [expr $secs%60]
          if {$seconds < 10} {
            set seconds 0$seconds
          }
          set mins [expr $secs/60]:$seconds
          sendToEngine $current_engine "level 0 $mins $comp(incr)"
          ### set search depth.
          # "sd" is meant to be orthogonal to the "time" command, but the first engine i tested (zct) never came back
          # While spike needs it set to something reasonable, otherwise it never plays a move
          # but spike is uci too... hmmm
          # sendToEngine $current_engine "sd 12"
	}
    }
  }

  if {[sc_pos side] == "white"} {
    set current_engine $n
    set other_engine $m
  } else {
    set current_engine $m
    set other_engine $n
  }
  
  # Automatically set a timeout value &&&
  if {$comp(timecontrol) == "permove"} {
    # Automatically time-out comp in $movetime + 2 secs
    after [expr {$comp(time) + $comp(delta)}] compTimeout
  } else {
    after [expr {$comp(wtime) + $comp(delta)}] compTimeout
  }

  ### Main control loop
  # Thanks to Fulvio for inspiration to rewrite this properly :>

  while {$comp(playing)} {

    # hmm... promo pieces are shown in uppercase, but this crashes some engines
    # todo: make command "sc_game move uci"
    set movehistory [sc_game moves coord]

    if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
      if {$current_engine == $n} {
	::gameclock::start 1
      } else {
	::gameclock::start 2
      }
    }

    set comp(lasttime) [clock clicks -milli]
    set comp(move) $current_engine
    set comp(nextmove) $other_engine
    set lastmove [lindex $movehistory end]
    set comp(bookmove) {}

    if {$::analysis(uci$current_engine)} {
      ### UCI main loop
      if {$comp(inbook) && $comp(book) != ""} {
	set comp(bookmove) [::book::getMove $comp(book) [sc_pos fen] $::sergame::bookSlot]
        if {$comp(bookmove) == ""} {
          set comp(inbook) 0
        }
      }

      if {$comp(bookmove) == ""} {

	### position

	set hit 0

	if {$movehistory == {}} {
	  sendToEngine $current_engine "position $comp(startpos)"
	} elseif {!$comp(ponder)} {
	  sendToEngine $current_engine "position $comp(startpos) moves $movehistory"
	} else {
	  if {$uciInfo(ponder$current_engine) == $lastmove && $lastmove != {}} {
	    sendToEngine $current_engine "ponderhit"
	    set hit 1
	  } else {
	    if {[llength $movehistory] > 1 && $uciInfo(ponder$current_engine) != {}} {
	      sendToEngine $current_engine "stop"
	      set uciInfo(bestmove$current_engine) stop
	    }
	    sendToEngine $current_engine "position $comp(startpos) moves $movehistory"
	  }
	}

	### go

	if {$comp(timecontrol) == "permove"} {
	  if {!$hit} {
	    sendToEngine $current_engine "go movetime $comp(time)"
	  }
	} else {
	  if {!$hit} {
	    sendToEngine $current_engine "go wtime $comp(wtime) btime $comp(btime) winc $incr binc $incr"
	  }
	}

	# set analysis(fen$current_engine) [sc_pos fen]
	set analysis(maxmovenumber$current_engine) 0

	set analysis(waitForBestMove$current_engine) 1
	vwait analysis(waitForBestMove$current_engine)
      }

      if {!$comp(playing)} {break}

    } else {
      ### Xboard main loop
      # Setup times

      if {$comp(timecontrol) != "permove"} {
	# Should we only send time, otim if has "time" as a feature &&&
	if {$comp(white) == $current_engine} {
	  sendToEngine $current_engine "time [expr $comp(wtime)/10]"
	  sendToEngine $current_engine "otim [expr $comp(btime)/10]"
	} else {
	  sendToEngine $current_engine "time [expr $comp(btime)/10]"
	  sendToEngine $current_engine "otim [expr $comp(wtime)/10]"
	}
      } else {
	### permove time control doesn't need reissuing ?
	# sendToEngine $current_engine "st $comp(seconds)"
      }

      # Setup move

      set nummoves [llength $comp(fen)]
      if {$nummoves == 0 } {
        sendToEngine $current_engine "go"
      } elseif {$nummoves == 1 && $comp(startpos) != "startpos"} {
	sendToEngine $current_engine "setboard [sc_pos fen]"
	sendToEngine $current_engine "go"
      } else {
	### Send the previous move to engine
	# (protocol 2 can also use "usermove MOVE")
	if {$lastmove != {}} {
	  sendToEngine $current_engine $lastmove
	} ; # else "go" ?
      }

      vwait analysis(waitForBestMove$current_engine)

      if {!$comp(playing)} {break}
    }

    set expired [expr [clock clicks -milli] - $comp(lasttime)]
    puts_ "Time expired $expired"

    if {$::analysis(uci$other_engine) && $comp(ponder) && ($uciInfo(ponder$other_engine) != "")} {
      ### UCI other engine

      # position
      if {$movehistory != {}} {
        ### todo - does ponder work with non-standard starts ? S.A
	sendToEngine $other_engine "position startpos moves $movehistory $uciInfo(ponder$other_engine)"
      }

      # go
      if {$comp(timecontrol) == "permove"} {
	sendToEngine $other_engine "go ponder movetime $comp(time)"
      } else {
	sendToEngine $other_engine "go ponder wtime $comp(wtime) btime $comp(btime) winc $incr binc $incr"
      }

    }

    if {[makeCompMove $current_engine]} {
      ### Move success

      after cancel compTimeout

      if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
	if {$current_engine == $n} {
	  ::gameclock::stop 1
	} else {
	  ::gameclock::stop 2
	}
      } 
      # Note - No time slice enforcement for permove time control

      while {$comp(paused)} {
	puts_ "  PAUSED at [clock format [clock seconds]]"
	vwait comp(paused)
	puts_ "UNPAUSED at [clock format [clock seconds]]"
      }

      ### Check if game is over

      set score [sc_pos analyze -time 50]
      if { $score == {0 {}}} {
	### stalemate
	sc_game tags set -result =
	sc_pos setComment Stalemate
	puts_ Stalemate
	break
      } elseif { $score == {-32000 {}}} {
	### checkmate
	if {[sc_pos side] == {black}} {
	  sc_game tags set -result 1
	} else {
	  sc_game tags set -result 0
	}
	puts_ Checkmate
	break
      } else {
	set fen [sc_pos fen]
	set f [lindex $fen 0]
	lappend comp(fen) $f
	if {[llength [lsearch -all $comp(fen) $f]] > 2 || [lindex $fen 4] > 99} {
          if {[lindex $fen 4] > 99} {
	    sc_pos setComment "50 move rule"
          } else {
	    sc_pos setComment "3 fold repetition"
          }
	  sc_game tags set -result =
	  ### draw
	  puts_ Draw
	  break
	} 
      }

      ### Swap players

      if {$current_engine != $n} {
	if {$comp(timecontrol) == "pergame"} {
	  set comp(btime) [expr $comp(btime) - $expired]
          if {$comp(btime) < 0} {
            sc_game tags set -result 1
            puts_ {Black loses on time}
	    sc_pos setComment {Black loses on time}
            break
          }
          # add time increment
          incr comp(btime) $incr
	  if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
	    ::gameclock::setSec 2 [ expr -int($comp(btime)/1000) ]
	  }
          # In case white hangs, automatically time-out comp in $wtime + 2 secs
          after [expr {$comp(wtime) + $comp(delta)}] compTimeout
        } else {
          if {$expired > $comp(permoveleeway)*$comp(time)} {
            sc_game tags set -result 1
            puts_ "Black move takes $expired secs"
	    sc_pos setComment "Blacks move takes $expired secs"
            break
          }
          # Automatically time-out comp in $movetime + 2 secs
	  after [expr {$comp(time) + $comp(delta)}] compTimeout
        }
        # Now its whites turn
	set current_engine $n
	set other_engine $m
      } else {
	if {$comp(timecontrol) == "pergame"} {
	  set comp(wtime) [expr $comp(wtime) - $expired]
          if {$comp(wtime) < 0} {
            sc_game tags set -result 0
            puts_ {White loses on time}
	    sc_pos setComment {White loses on time}
            break
          }
          # add time increment
          incr comp(wtime) $incr
	  if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
	    ::gameclock::setSec 1 [ expr -int($comp(wtime)/1000) ]
	  }
          # In case black hangs, automatically time-out comp in $wtime + 2 secs
	  after [expr {$comp(btime) + $comp(delta)}] compTimeout
        } else {
          if {$expired > $comp(permoveleeway)*$comp(time)} {
            sc_game tags set -result 0
            puts_ "Whites move takes $expired secs"
	    sc_pos setComment "Whites move takes $expired secs"
            break
          }
          # Automatically time-out comp in $movetime + 2 secs
	  after [expr {$comp(time) + $comp(delta)}] compTimeout
        }
        # Now its blacks turn
	set current_engine $m
	set other_engine $n
      }

    } else {
      ### Move failed... don't swap players
      puts_ {Move FAIL}

      ### Unlikely, but could happen
      while {$comp(paused)} {
	after cancel compTimeout

	puts_ "  PAUSED at [clock format [clock seconds]]"
	vwait comp(paused)
	puts_ "UNPAUSED at [clock format [clock seconds]]"

	# todo - handle wtime/btime
	if {$comp(timecontrol) == "pergame"} {
	  after [expr {$comp(time) + $comp(delta)}] compTimeout
        }
      }
    }

  } ; # end main control loop

  ### This game is over

  after cancel compTimeout

  if {$comp(showclock) && $comp(timecontrol) == "pergame"} {
    ::gameclock::stop 1
    ::gameclock::stop 2
  }

  ### Save game

  # Perhaps game has been adjudicated by user ?
  if {$comp(result) != {}} {
    sc_game tags set -result $comp(result)
  }

  puts "Game $n - $m is over. Result [sc_game tags get Result]"

  if {$comp(timecontrol) == "pergame"} {
    set comment [sc_pos getComment]
    if {$comment == {}} {
      sc_pos setComment "wtime $comp(wtime), btime $comp(btime)"
    } else {
      sc_pos setComment "$comment.\nwtime $comp(wtime), btime $comp(btime)"
    }
  }

  if {![sc_base isReadOnly]} {
    sc_game save [sc_game number]
    ::windows::gamelist::Refresh
    ::crosstab::Refresh
  }
  # ::pgn::Refresh 1
  updateBoard -pgn

  catch {destroy .analysisWin$n}
  catch {destroy .analysisWin$m}
  set comp(playing) 0
}

proc makeCompMove {current_engine} {
  if {$::comp(bookmove) != {}} {
    sc_move addSan $::comp(bookmove)

    if {$::comp(animate)} {
      updateBoard -pgn -animate
    } else {
      updateBoard -pgn 
    }
    return 1
  } else {
    return [makeAnalysisMove $current_engine]
  }
}

proc compPause {} {
  global analysis comp engines
  set w .comp

  after cancel compTimeout
  $w.buttons.ok configure -text Resume -command compResume
  set comp(paused) 1
}

proc compResume {} {
  global analysis comp engines
  set w .comp

  $w.buttons.ok configure -text Pause -command compPause
  set comp(paused) 0
}

proc puts_ {message} {
  if {$::comp(debug) && $::comp(playing)} {
    puts "$message"
  }
}

proc drawCombos {} {
  global analysis comp engines

  # Check number of engines is sane
  if {![string is integer -strict $comp(count)]} {
    set comp(count) 2
    update
  }
  if {$comp(count) > [llength $engines(list)]} {
    set comp(count) [llength $engines(list)]
    update
  }

  set w .comp
  set l $w.engines.list

  if {[winfo exists $l]} {destroy $l}

  pack [frame $l] -side top -padx 5 -pady 2

  set values {}

  foreach e $engines(list) {
    lappend values [lindex $e 0]
  }

  for {set i 0} {$i < $comp(count)} {incr i} {

    frame $l.$i
    # Only pack so many
    if {$i < 10} {
      pack $l.$i -side top
    }

    ttk::combobox  $l.$i.combo -width 20 -state readonly -values $values

    button $l.$i.configure -image tb_uciEngine -command "
      ::uci::uciConfigN \[ $l.$i.combo current \] .comp
    "
    button $l.$i.log -image tb_annotate -command "
      engineShowLog  \[ $l.$i.combo current \]
    "

    pack $l.$i.log $l.$i.configure $l.$i.combo -side left -padx 7

    if {[info exists comp(players)]} {
      # Set the combo boxes to the previous players if we can
      set prev_player [lindex $comp(players) $i]
      if {[catch {$l.$i.combo current $prev_player}]} {
	$l.$i.combo current $i
      }
    } else {
      $l.$i.combo current $i
    }

  }
  set comp(countcombos) $comp(count)
  update
}

proc compCueGame {n m name1 name2 k} {
  global analysis comp
  lappend comp(games) [list $n $m $name1 $name2 $k]
}


proc compTimeout {} {
    global analysis comp

    puts "Timed out"

    set expired [expr [clock clicks -milli] - $comp(lasttime)]
    if {[sc_pos side] == "white"} {
      if {$comp(timecontrol) == "pergame"} {
	set comp(wtime) [expr $comp(wtime) - $expired]
        set comment {Timed out}
      } else {
        set comment "White movetime [expr $expired / 1000.0] secs"
      }
      set result 0
    } else {
      if {$comp(timecontrol) == "pergame"} {
	set comp(btime) [expr $comp(btime) - $expired]
        set comment {Timed out}
      } else {
        set comment "Black movetime [expr $expired / 1000.0] secs"
      }
      set result 1
    }

    compGameEnd $result $comment
}

proc compGameEnd {result {comment {Manual adjudication}}} {
    global analysis comp
 
    puts_ compGameEnd

    if {$comp(paused)} {
      compResume
    }
    set comp(playing) 0
    set comp(result) $result
    sc_pos setComment $comment

    set analysis(waitForReadyOk$comp(move)) 1
    set analysis(waitForBestMove$comp(move)) 1
}

proc compAbort {} {
    # Close all games, called when game is active
    global analysis comp

    puts_ compAbort

    if {$comp(paused)} {
      compResume
    }
    set comp(playing) 0
    set comp(games) {}

    catch {
      set analysis(waitForReadyOk$comp(move)) 1
      set analysis(waitForBestMove$comp(move)) 1
    }
}

proc compClose {} {
    global analysis comp
    if {[.comp.buttons.cancel cget -text] == {End Comp}} {
      # comp is running. Double check before exitting
      set msg {A Computer Tournament is running.}

      set answer [tk_dialog .unsaved "Scid: Confirm Quit" $msg question {} "   [tr FileExit]   " [tr Cancel]]
      if {$answer != 0} {
	return
      }
    }
    compDestroy
}

proc compDestroy {} {
    global comp

    ### there's some ttk bug when destroying widget, but havent found it yet
    # ttk::combobox seems to need destroying
    # for {set i 0} {$i < $comp(countcombos)} {incr i} {
    # must unbind .comp Destroy
    # destroy  .comp.engines.list.$i
    # }

    set comp(games) {}
    set comp(playing) 0
    update idletasks
    destroy .comp
}

###
### End of file: comp.tcl
###
###
### wbdetect.tcl: part of Scid.
### Copyright (C) 1999-2002  Shane Hudson.
#      Copyright (C) 2006-2007  Pascal Georges.
###

######################################################################
#
# Code to detect various Winboard engines being used as analysis
# engines in Scid.
#
# Thanks to Allen Lake for testing many WinBoard engines
# with Scid in Windows and providing this code.
#
# Most cases below are for engines that have analyze mode but
# do not let Scid know about it by sending a "feature" line
# with "analyze=1" in response to the "protover 2" command.
# Some cases also cover engines that report times in seconds
# instead of centiseconds.

proc detectWBEngine { {n 1} engineOutput } {
  
  global analysis
  
  # Check for a line containing "Amy version" to detect use of
  # the Amy 0.7 Winboard engine, which doesn't support the
  # "setboard" command, but does support the "analyze" command.
  if {[string match "*Amy version*" $engineOutput] } {
    logEngineNote $n {Seen "Amy"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Baron" to detect use of the
  # Baron 0.26, 0.26a, 0.27, or 0.28a Winboard engines.  These
  # engines display analysis time in whole seconds, rather than
  # in centiseconds, so I have added code to detect this.
  if {[string match "*Baron*" $engineOutput] } {
    logEngineNote $n {Seen "Baron"; assuming analyze, setboard, times in seconds.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wholeSeconds$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "D U K E" to detect use of
  # the Duke 1.0 or 1.1 Winboard engines, which don't support the
  # "setboard" command, but do support the "analyze" command.
  if {[string match "*D U K E*" $engineOutput] } {
    logEngineNote $n {Seen "Duke"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "ESCbook.bin" to detect use of
  # the Esc 1.09 Winboard engine, which doesn't support the
  # "setboard" command, but does support the "analyze" command.
  if {[string match "*ESCbook.bin*" $engineOutput] } {
    logEngineNote $n {Seen "ESC"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "FORTRESS" to detect use of
  # the Fortress 1.62 Winboard engine, which doesn't support the
  # "setboard" command, but does support the "analyze" command.
  if {[string match "*FORTRESS*" $engineOutput] } {
    logEngineNote $n {Seen "Fortress"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing only "Chess", to detect the use of
  # GNU Chess 4, which issues time in whole seconds rather than in
  # centiseconds.
  #if {! [string compare $engineOutput "Chess"]} {
  #  logEngineNote $n {Seen "GNU Chess 4"; assuming times in seconds.}
  #  set analysis(wholeSeconds$n) 1
  #  set analysis(wbEngineDetected$n) 1
  #  return
  #}
  
  # Check for a line containing "GNU Chess v5" to detect use of
  # the GNU Chess 5.02 or 5.03 Winboard engine, which don't support the
  # "analyze" command, but do support the "setboard" command.
  if {[string match "*GNU Chess v5*" $engineOutput] } {
    logEngineNote $n {Seen "GNU Chess 5"; assuming setboard command.}
    set analysis(has_setboard$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Gromit3" to detect use of the
  # Gromit 3.00 or Gromit 3.8.2 Winboard engine, which don't
  # support the "setboard" command, but do support the
  # "analyze" command.
  if {[string match "*Gromit3*" $engineOutput]  ||  [string match "GROMIT" $engineOutput]} {
    logEngineNote $n {Seen "Gromit"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Jester" to detect use of the
  # Jester 0.82 Winboard engine.  This engine supports "analyze"
  # but does not support "setboard" or "protover".
  if {[string match "*Jester*" $engineOutput] } {
    logEngineNote $n {Seen "Jester"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Calzerano" to detect use of the
  # Leila 0.36 or Leila 0.41i Winboard engine, which don't
  # support the "setboard" command, but do support the
  # "analyze" command.
  if {[string match "*Calzerano*" $engineOutput] } {
    logEngineNote $n {Seen "Calzerano" (Leila); assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "LordKing" to detect use of the
  # LordKing 3.0, 3.1, or 3.2 Winboard engines.  These engines
  # have "analyze", but do not support "setboard" or "protover".
  if {[string match "*LordKing*" $engineOutput] } {
    logEngineNote $n {Seen "LordKing"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "NEJMET" to detect use of the
  # Nejmet 2.6.0 Winboard engine, which supports "setboard"
  # and "analyze", but not "protover".
  if {[string match "*NEJMET*" $engineOutput] } {
    logEngineNote $n {Seen "Nejmet"; assuming analyze and setboard commands.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Nejmet" to detect use of the
  # Nejmet 3.0.1 and 3.0.2 Winboard engines, which send
  # "feature analyse=1" instead of "feature analyze=1".
  if {[string match "*Nejmet*" $engineOutput] } {
    logEngineNote $n {Seen "Nejmet"; assuming analyze and setboard commands.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Pharaon" to detect use of the
  # Pharaon 2.50 or Pharaon 2.61 Winboard engines.  These
  # engines display analysis time in whole seconds, rather than
  # in centiseconds, so I have added code to detect this.
  # Performance of these engines has been somewhat uneven, with
  # occasional crashes of the engine, but more stable and
  # predictable with this code in place.
  if {[string match "*Pharaon*" $engineOutput] } {
    logEngineNote $n {Seen "Pharaon"; assuming analyze, setboard, times in seconds.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wholeSeconds$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "Skaki" to detect use of the
  # Skaki 1.19 Winboard engine.  This engine has "analyze",
  # but does not support "setboard" or "protover".
  if {[string match "*Skaki*" $engineOutput] } {
    logEngineNote $n {Seen "Skaki"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "EngineControl-TCB" to detect use of the
  # TCB 0045 Winboard engine.  This engine has "analyze",
  # but does not support "setboard" or "protover".
  if {[string match "*EngineControl-TCB*" $engineOutput] } {
    logEngineNote $n {Seen "TCB"; assuming analyze and setboard commands.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "ZChess" to detect use of the
  # ZChess 2.22 Winboard engine.  ZChess is the predecessor
  # of the Pharaon series of Winboard engines and, as such,
  # displays analysis time in whole seconds, rather than
  # in centiseconds.
  if {[string match "*ZChess*" $engineOutput] } {
    logEngineNote $n {Seen "ZChess"; assuming analyze, setboard, times in seconds.}
    set analysis(has_analyze$n) 1
    set analysis(wholeSeconds$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "King of Kings" to detect use
  # of the King of Kings 2.02 Winboard engine.  KofK uses the
  # "protover" command, but seems to confuse previous code on
  # Win98SE. Setting analysis(has_setboard$n) and
  # analysis(has_analyze$n) explicitly seems to help.
  if {[string match "*King of Kings*" $engineOutput] } {
    logEngineNote $n {Seen "King of Kings"; assuming analyze and setboard commands.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "EXchess" to detect use of the
  # EXchess 4.02 or 4.03 Winboard engine, which supports "setboard"
  # and "analyze", but not "protover".
  if {[string match "*EXchess*" $engineOutput] } {
    logEngineNote $n {Seen "EXchess"; assuming analyze and setboard commands.}
    set analysis(has_setboard$n) 1
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  # Check for a line containing "WildCat version 2.61" to detect use of the
  # WildCat 2.61 Winboard engine, which supports "analyze"
  # but not "setboard" or "protover".
  if {[string match "*WildCat version 2.61*" $engineOutput] } {
    logEngineNote $n {Seen "WildCat 2.61"; assuming analyze and setboard commands.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
  
  # Check for a line containing "Phalanx" to detect use of the
  # Phalanx Winboard engine, which supports "analyze"
  # but not "setboard" or "protover".
  if {[string match "*Phalanx*" $engineOutput] } {
    logEngineNote $n {Seen "Phalanx"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    set analysis(has_setboard$n) 1
    return
  }
  
  # Check for a line containing "Scorpio" , which supports "analyze"
  # and "setboard".
  if {[string match -nocase "*Scorpio*" $engineOutput] } {
    logEngineNote $n {Seen "Scorpio"; assuming analyze command.}
    set analysis(has_analyze$n) 1
    set analysis(wbEngineDetected$n) 1
    return
  }
  
}

###
### End of file: wbdetect.tcl
###
### reper.tcl:
### Repertoire editor functions for Scid.
### Copyright (C) 2001-2002 Shane Hudson.

# The heirarchical view used to display a repertoire in Scid was
# originally based on the  public domain Tcl/Tk tree widget written by
# D. Richard Hipp (available at: http://www.hwaci.com/sw/tk/tree.html)
# but the Scid code is completely rewritten and significantly improved.

namespace eval ::rep {}
array set ::rep::_data {}
set ::rep::Win 0

# ::rep::create
#   Create a new repertoire widget.  $args become the configuration
#   arguments to the canvas widget that is created.
#
proc ::rep::create {w args} {
  eval canvas $w -bg white -width 1 $args
  bind $w <Destroy> "catch {::rep::clear $w}"
  ::rep::_defaults $w /
  ::rep::_drawWhenIdle $w
  set ::rep::_data($w:selection) {}
  set ::rep::_data($w:selidx) {}
  set ::rep::_data($w:altered) 0
  set ::rep::_data($w:nlines) 0
  set ::rep::_data($w:ngroups) 0
  set ::rep::_data($w:filename) ""
  #set ::rep::_data($w:readonly) 0
}

# ::rep::_defaults
#   Used to initialize a new element of the tree.
#
proc ::rep::_defaults {w v} {
  set ::rep::_data($w:$v:children) {}
  set ::rep::_data($w:$v:shown) 1
  set ::rep::_data($w:$v:tags) {}
  set ::rep::_data($w:$v:comment) {}
  set ::rep::_data($w:$v:text) {}
  set ::rep::_data($w:$v:group) 0
  set ::rep::_data($w:$v:include) 1
}

# ::rep::_findGroup
#   Finds the parent group of a line or group that will be added.
#
proc ::rep::_findGroup {w v parent} {
  set p $parent
  if {$parent == ""} { set p "/" }
  foreach g $::rep::_data($w:$p:children) {
    set len [string length $g]
    set v2 [string range $v 0 [expr {$len - 1} ]]
    
    # If the next character in the line is a "-", it means we have a
    # situation with both the castling moves "O-O" and "O-O-O".
    # To avoid "O-O-O" looking like a child line of "O-O", we need to
    # deliberately ignore this possibility.
    if {[string length $v] > $len  &&  [string index $v $len] == "-"} { continue }
    
    regsub -all " " $v2 "," v2
    if {! [string compare $v2 $g]} {
      set v [string trim [string range $v $len end]]
      return [::rep::_findGroup $w $v $parent/$g]
    }
  }
  set v [string trim $v]
  regsub -all " " $v "," v
  return $parent/$v
}

# ::rep::AddCurrentBoard
#   Adds the line representing the current board position as a
#   group, included line or excluded line.
#
proc ::rep::AddCurrentBoard {w type} {
  switch -exact -- $type {
    group   { set grp 1; set inc 0; set cmd ::rep::newGroup }
    include { set grp 0; set inc 1; set cmd ::rep::newLine  }
    exclude { set grp 0; set inc 0; set cmd ::rep::newLine  }
    default { return }
  }
  # Verify that the current game began at the standard starting position:
  if {[sc_game startBoard]} {
    tk_messageBox -parent $w -type ok -icon info -title "Scid" \
        -message "The current game does not have the standard starting position, so its positions cannot be added to the repertoire."
    return
  }
  set moves [string trim [sc_game moves]]
  set err [catch {$cmd $w $moves -group $grp -include $inc} res]
  if {$err} {
    tk_messageBox -parent $w -type ok -icon info -title "Scid" -message $res
    return
  }
  ::rep::regroup $w
  ::rep::singleClick $w $res
}

# ::rep::newGroup
#   Adds a new group to the repertoire.
#
proc ::rep::newGroup {w v args} {
  if {$v == ""} {
    return -code error "The starting chess position cannot be a group."
  }
  set s [::rep::_findGroup $w $v ""]
  lappend args -group 1
  return [::rep::_newItem $w $s $args]
}

# ::rep::newLine
#   Adds a new group to the repertoire.
#
proc ::rep::newLine {w v args} {
  set s [::rep::_findGroup $w $v ""]
  lappend args -group 0
  return [::rep::_newItem $w "${s} ,LINE" $args]
}

# ::rep::_decode
#   Decodes a group or line path back to standard chess notation,
#   e.g. "/1.e4_c5/2.Nf3_d6" -> "1.e4 c5 2.Nf3 d6"
#
proc ::rep::_decode {m} {
  regsub -all "," $m " " moves
  regsub -all "/" $moves " " moves
  regsub "LINE" $moves "" moves
  set moves [string trim $moves]
  return $moves
}

# ::rep::_newItem
#   Called from newGroup or newLine to add a new element to the repertoire.
#
proc ::rep::_newItem {w v args} {
  regsub -all " " $v "," v
  set dir [file dirname $v]
  set n [file tail $v]
  if {[llength $args] == 1} {
    set args [lindex $args 0]
  }
  set image {}
  set tags {}
  set text {}
  set comment {}
  set group 0
  set include 1
  set shown 1
  
  foreach {op arg} $args {
    switch -exact -- $op {
      -image {set image $arg}
      -tags {set tags $arg}
      -text {set text $arg}
      -comment {set comment $arg}
      -group {set group $arg}
      -include {set include $arg}
      -shown {set shown $arg}
    }
  }
  if {![info exists ::rep::_data($w:$dir:shown)]} {
    return -code error "parent item \"$dir\" is missing"
  }
  set i [lsearch -exact $::rep::_data($w:$dir:children) $n]
  if {$i >= 0} {
    # Group or line already exists.
    if {! $group} {
      set ::rep::_data($w:$v:include) $include
      ::rep::updateStatus $w
    }
    return $v
    #set  type "line"
    #if {$group} { set type "group" }
    #return -code error "The $type \"[::rep::_decode $v]\" already exists in this repertoire."
  }
  if {$group} {
    incr ::rep::_data($w:ngroups)
  } else {
    incr ::rep::_data($w:nlines)
  }
  
  lappend ::rep::_data($w:$dir:children) $n
  set ::rep::_data($w:$dir:children) [lsort $::rep::_data($w:$dir:children)]
  ::rep::_defaults $w $v
  set ::rep::_data($w:$v:comment) $comment
  set ::rep::_data($w:$v:image) $image
  set ::rep::_data($w:$v:tags) $tags
  set ::rep::_data($w:$v:text) $text
  set ::rep::_data($w:$v:group) $group
  set ::rep::_data($w:$v:include) $include
  set ::rep::_data($w:$v:shown) $shown
  set ::rep::_data($w:altered) 1
  ::rep::updateStatus $w
  # ::rep::_drawWhenIdle $w
  return $v
}

# ::rep::updateStatus
#   Updates the status bar message for the repertoire window.
#
proc ::rep::updateStatus {w} {
  set s "  "
  if {$::rep::_data($w:altered)} { append s "XX" } else { append s "--" }
  append s "  "
  set f $::rep::_data($w:filename)
  if {$f == ""} {
    set f "(Untitled)"
  } else {
    set f [file tail $f]
  }
  append s "$f: $::rep::_data($w:nlines) lines"
  append s " in $::rep::_data($w:ngroups) groups"
  set ::rep::_data($w:status) $s
}

# ::rep::updateWinTitle
#   Updates the repertoire window title.
#
proc ::rep::updateWinTitle {w} {
  set f $::rep::_data($w:filename)
  if {$f == ""} {
    set f "(Untitled)"
  } else {
    set f [file tail $f]
  }
  wm title [winfo toplevel $w] "Scid: [tr WindowsRepertoire]: $f"
}

# ::rep::regroup
#   Calls ::rep::_extract to produce a set of commands for rebuilding
#   the repertoire heirarchy, then clears and rebuilds it.
#   Used to reorganise the repertoire whenever a group is added or
#   removed.
proc ::rep::regroup {w} {
  set list [::rep::_extract $w / {}]
  ::rep::clear $w
  foreach i $list {eval $i}
  ::rep::_drawWhenIdle $w
}

# ::rep::newFile
#   Clears the repertoire and reset the filename to be untitled.
#
proc ::rep::newFile {w} {
  ::rep::clear $w
  set ::rep::_data($w:filename) ""
  #set ::rep::_data($w:readonly) 0
  ::rep::updateWinTitle $w
  ::rep::_drawWhenIdle $w
}

# ::rep::clear
#   Clears the repertoire, but keeps its filename.
#
proc ::rep::clear {w} {
  set fname ""
  set fname $::rep::_data($w:filename)
  foreach t [array names ::rep::_data $w:*] {
    unset ::rep::_data($t)
  }
  set ::rep::_data($w:filename) $fname
  set ::rep::_data($w:selection) {}
  set ::rep::_data($w:selidx) {}
  set ::rep::_data($w:altered) 0
  set ::rep::_data($w:nlines) 0
  set ::rep::_data($w:ngroups) 0
  ::rep::_defaults $w /
}

# ::rep::deleteGroup
#   After verification from the user, this deletes the specified
#   group but keeps all subgroups and lines.
#
proc ::rep::deleteGroup {w v} {
  if {! [info exists ::rep::_data($w:$v:group)]} { return }
  if {! $::rep::_data($w:$v:group)} { return }
  set v2 [::rep::_decode $v]
  set msg "The group \"$v2\" contains [::rep::_numChildLines $w $v] lines "
  append msg "in [expr [::rep::_numChildGroups $w $v] - 1] subgroups.\n\n"
  append msg "Are you sure you want to delete this group, keeping all the groups and lines under it?"
  set answer [tk_messageBox -parent $w -title "Scid: Delete group?" \
      -type yesno -icon question -message $msg]
  if {$answer != "yes"} { return }
  set ::rep::_data($w:$v:delete) 1
  ::rep::regroup $w
}

# ::rep::pruneGroup
#   After verification from the user, this deletes the specified
#   group AND all its subgroups and lines.
#
proc ::rep::pruneGroup {w v} {
  if {! [info exists ::rep::_data($w:$v:group)]} { return }
  if {! $::rep::_data($w:$v:group)} { return }
  set v2 [::rep::_decode $v]
  set msg "The group \"$v2\" contains [::rep::_numChildLines $w $v] lines "
  append msg "in [expr [::rep::_numChildGroups $w $v] - 1] subgroups.\n\n"
  append msg "Are you sure you want to delete this group AND ALL the groups and lines under it?"
  set answer [tk_messageBox -parent $w -title "Scid: Delete group?" \
      -type yesno -icon question -message $msg]
  if {$answer != "yes"} { return }
  set ::rep::_data($w:$v:delete) 1
  set ::rep::_data($w:$v:prune) 1
  ::rep::regroup $w
}

# ::rep::deleteGroup
#   After verification from the user, this deletes the specified line.
#
proc ::rep::deleteLine {w v} {
  if {! [info exists ::rep::_data($w:$v:group)]} { return }
  if {$::rep::_data($w:$v:group)} { return }
  set v2 [::rep::_decode $v]
  set msg "Delete: $v2\n\n"
  append msg "Are you sure you want to delete this line?"
  set answer [tk_messageBox -parent $w -title "Scid: Delete line?" \
      -type yesno -icon question -message $msg]
  if {$answer != "yes"} { return }
  set ::rep::_data($w:$v:delete) 1
  ::rep::regroup $w
}

# ::rep::showAll
#   Expands the specified group and all its subgroups.
#
proc ::rep::showAll {w {v ""}} {
  foreach i [array names ::rep::_data $w:$v*:shown] {
    set ::rep::_data($i) 1
  }
  ::rep::_drawWhenIdle $w
}

# ::rep::hideAll
#   Collapses the specified group and all its subgroups.
#
proc ::rep::hideAll {w {v ""}} {
  foreach i [array names ::rep::_data $w:$v*:shown] {
    set ::rep::_data($i) 0
  }
  ::rep::_drawWhenIdle $w
}

# ::rep::setSelection
#   Changes the selection to the specified group or line.
#
proc ::rep::setSelection {w v} {
  set ::rep::_data($w:selection) $v
  ::rep::_drawSelection $w
  ::rep::updateStatus $w
}

# ::rep::getSelection
#   Retrieves the current selection.
#
proc ::rep::getSelection {w} {
  return $::rep::_data($w:selection)
}

# ::rep::_numChildGroups
#   Returns the number of (direct and indirect) subgroups of a group.
#
proc ::rep::_numChildGroups {w v} {
  if {! $::rep::_data($w:$v:group)} { return 0 }
  set count 1
  if {[info exists ::rep::_data($w:$v:children)]} {
    foreach child $::rep::_data($w:$v:children) {
      incr count [::rep::_numChildGroups $w $v/$child]
    }
  }
  return $count
}


# ::rep::_numChildLines
#   Returns the number of (direct and indirect) child lines of a group.
#
proc ::rep::_numChildLines {w v} {
  if {! $::rep::_data($w:$v:group)} { return 1 }
  set count 0
  if {[info exists ::rep::_data($w:$v:children)]} {
    foreach child $::rep::_data($w:$v:children) {
      incr count [::rep::_numChildLines $w $v/$child]
    }
  }
  return $count
}

# ::rep::_draw
#   Draws the repertoire heirarchy.
#
proc ::rep::_draw {w} {
  catch {unset ::rep::_data($w:drawPending)}
  $w delete all
  set ::rep::_data($w:y) 30
  ::rep::_drawLevel $w "/" 10
  $w config -scrollregion [$w bbox all]
  ::rep::_drawSelection $w
  ::rep::updateStatus $w
  $w xview moveto 0.0
}

# ::rep::_drawLevel
#   Draws a single level of the heirarchy, indented by $in pixels.
#
proc ::rep::_drawLevel {w v in} {
  set p $v
  if {$v == "/"} { set p "" }
  set start [expr {$::rep::_data($w:y)-10} ]
  set y 0
  if {[llength $::rep::_data($w:$v:children)] == 0} {
    set y $::rep::_data($w:y)
    incr ::rep::_data($w:y) 17
    $w create line $in $y [expr {$in+10} ] $y -fill gray50
    incr in 12
    $w create text $in $y -font font_Small -anchor w -text "(empty)"
    return
  }
  
  foreach c $::rep::_data($w:$v:children) {
    set y $::rep::_data($w:y)
    incr ::rep::_data($w:y) 17
    $w create line $in $y [expr {$in + 10} ] $y -fill gray50
    set group $::rep::_data($w:$p/$c:group)
    set icon $::rep::_data($w:$p/$c:image)
    set taglist x
    foreach tag $::rep::_data($w:$p/$c:tags) { lappend taglist $tag }
    if {$group} {
      set icon tb_closedgroup
      if {$::rep::_data($w:$p/$c:shown)} { set icon tb_opengroup }
    } else {
      set icon tb_cross
      if {$::rep::_data($w:$p/$c:include)} { set icon tb_tick }
    }
    set x [expr {$in + 12} ]
    
    if {$icon != ""} {
      set tag [$w create image $x $y -image $icon -anchor w -tags $taglist]
      incr x 20
      set ::rep::_data($w:tag:$tag) $p/$c
      if {$group} {
        set s [expr {1 - $::rep::_data($w:$p/$c:shown)} ]
        $w bind $tag <1> "set ::rep::_data($w:$p/$c:shown) $s; ::rep::_draw $w"
      }
      $w bind $tag <$::MB3> "::rep::_popupMenu $w $p/$c %X %Y"
    }
    set moves [::rep::_decode $c]
    if {$moves == ""} { set moves "..." }
    if {$group} {
      append moves " ([::rep::_numChildLines $w $p/$c])"
    }
    set tag [$w create text $x $y -text $moves -font font_Small \
        -anchor w -tags $taglist]
    set ::rep::_data($w:tag:$tag) $p/$c
    set ::rep::_data($w:$p/$c:tag) $tag
    $w bind $tag <$::MB3> "::rep::_popupMenu $w $p/$c %X %Y"
    set comment ""
    if {[string length $::rep::_data($w:$p/$c:text)] > 0} {
      set comment "** "
    }
    if {[string length $::rep::_data($w:$p/$c:comment)] > 0} {
      append comment "$::rep::_data($w:$p/$c:comment)"
    }
    if {$comment != ""} {
      incr x [expr {3 + [lindex [$w bbox $tag] 2] - [lindex [$w bbox $tag] 0]} ]
      set tag [$w create text $x $y -text $comment -font font_Small \
          -fill red3 -anchor w -tags $taglist]
      $w bind $tag <$::MB3> "::rep::_popupMenu $w $p/$c %X %Y"
      set ::rep::_data($w:tag:$tag) $p/$c
    }
    
    if {[llength $::rep::_data($w:$p/$c:children)] > 0} {
      if {$::rep::_data($w:$p/$c:shown)} {
        set tag [$w create image $in $y -image ::rep::_shown]
        $w bind $tag <1> "set ::rep::_data($w:$p/$c:shown) 0; ::rep::_draw $w"
        ::rep::_drawLevel $w $p/$c [expr {$in + 18} ]
      } else {
        set tag [$w create image $in $y -image ::rep::_hidden]
        $w bind $tag <1> "set ::rep::_data($w:$p/$c:shown) 1; ::rep::_draw $w"
      }
      $w bind $tag <$::MB3> "::rep::_popupMenu $w $p/$c %X %Y"
    }
  }
  set tag [$w create line $in $start $in [expr {$y+1} ] -fill gray50 ]
  $w lower $tag
}

# ::rep::showGroup
#   Expand a single group.
#
proc ::rep::showGroup {w v} {
  if {[info exists ::rep::_data($w:$v:shown)]
    &&  $::rep::_data($w:$v:shown) == 0
    &&  [info exists ::rep::_data($w:$v:children)]
    &&  [llength $::rep::_data($w:$v:children)] > 0} {
    set ::rep::_data($w:$v:shown) 1
    ::rep::_draw $w
  }
}

# ::rep::showGroup
#   Collapse a single group.
#
proc ::rep::hideGroup {w v} {
  if {[info exists ::rep::_data($w:$v:shown)]
    &&  $::rep::_data($w:$v:shown) == 1} {
    set ::rep::_data($w:$v:shown) 0
    ::rep::_draw $w
  }
}

# ::rep::toggleLineState
#   Change the state of a line (included vs excluded).
#
proc ::rep::toggleLineState {w v} {
  if {[info exists ::rep::_data($w:$v:group)]
    &&  $::rep::_data($w:$v:group) == 0} {
    set state $::rep::_data($w:$v:include)
    set state [expr {1 - $state} ]
    set ::rep::_data($w:$v:include) $state
    set ::rep::_data($w:altered) 1
    ::rep::_draw $w
  }
}

# ::rep::_drawSelection
#   Highlight the selected goupr or line.
#
proc ::rep::_drawSelection w {
  if {[string length $::rep::_data($w:selidx)]} {
    $w delete $::rep::_data($w:selidx)
  }
  set v $::rep::_data($w:selection)
  if {[string length $v]==0} { return }
  if {![info exists ::rep::_data($w:$v:tag)]} { return }
  set bbox [$w bbox $::rep::_data($w:$v:tag)]
  if {[llength $bbox]==4} {
    set i [eval $w create rectangle $bbox -fill yellow2 -outline {{}}]
    set ::rep::_data($w:selidx) $i
    $w lower $i
  } else {
    set ::rep::_data($w:selidx) {}
  }
}

# ::rep::_drawWhenIdle
#   Schedule a redraw event of the repertoire heirarchy.
#
proc ::rep::_drawWhenIdle w {
  if {![info exists ::rep::_data($w:drawPending)]} {
    set ::rep::_data($w:drawPending) 1
    after idle "::rep::_draw $w"
  }
}

# ::rep::labelAtXY
#   Return the group or line in the repertoire located at the
#   real coordinates ($x,$y).
#
proc ::rep::labelAtXY {w x y} {
  set x [$w canvasx $x]
  set y [$w canvasy $y]
  foreach m [$w find overlapping $x $y $x $y] {
    if {[info exists ::rep::_data($w:tag:$m)]} {
      return $::rep::_data($w:tag:$m)
    }
  }
  return ""
}

# ::rep::OpenCloseWindow
#   Open/close the repertoire editor.
#
proc ::rep::OpenCloseWindow {} {
  set w .repWin

  set DeprecatedTxt "The repertoir editor is deprecated and may be removed in a future version of Scid.\n\nWe feel, that Tree Masks offer much better functionality and versality and strongly encourage transition to them.\nIf you feel Masks can not cover all functions of the repertoir editor and you would like to have it kept, please subscribe to\n\nscid-users@lists.sourceforge.net\n\nfor an open discussion.\n\nDo you want to learn more about Masks?"


  if {[winfo exists $w]} {
    destroy $w
    return
  }
  set result [tk_dialog .roDialog "Scid: Function Deprecated" \
				$DeprecatedTxt "" 1 $::tr(No) $::tr(Yes)]

  if {$result ==0} {
     ::rep::makeWindow
  } else {
	  helpWindow TreeMasks
  }
}

# ::rep::closeWindow
#   Close the repertoire editor.
#
proc ::rep::closeWindow {} {
  set w .repWin
  if {! [winfo exists $w]} { return }
  if {$::rep::_data($w.f.w.rep:altered)} {
    set answer [tk_messageBox -parent .repWin \
        -type yesno -icon question \
        -title "Scid: [tr RepFileClose]" \
        -message $::tr(RepCloseDialog)]
    if {$answer != "yes"} { return }
  }
  destroy $w
  set ::rep::Win 0
}

# ::rep::OpenWithFile
#   Open the repertoire editor and losd the specified file.
#
proc ::rep::OpenWithFile {fname} {
  ::rep::makeWindow
  ::rep::readFile .repWin.f.w.rep $fname
}

# ::rep::ConfigMenus
#   Called to set the window menus to a specified language.
proc ::rep::ConfigMenus {w {lang ""}} {
  if {! [winfo exists $w]} { return }
  if {$lang == ""} { set lang $::language }
  set m $w.menu
  foreach idx {0 1 2 3 4} tag {File Edit View Search Help} {
    configMenuText $m $idx Rep$tag $lang
  }
  foreach idx {0 1 3 4 6} tag {New Open Save SaveAs Close} {
    configMenuText $m.file $idx RepFile$tag $lang
  }
  foreach idx {0 1 2} tag {Group Include Exclude} {
    configMenuText $m.edit $idx RepEdit$tag $lang
  }
  foreach idx {0 1} tag {Expand Collapse} {
    configMenuText $m.view $idx RepView$tag $lang
  }
  foreach idx {0 1} tag {All Displayed} {
    configMenuText $m.search $idx RepSearch$tag $lang
  }
  foreach idx {0 1} tag {Rep Index} {
    configMenuText $m.helpmenu $idx RepHelp$tag $lang
  }
}

# ::rep::makeWindow
#   Create the repertoire editor window.
#
proc ::rep::makeWindow {} {
  set w .repWin
  if {[winfo exists $w]} { return }
  set ::rep::Win 1
  toplevel $w
  
  standardShortcuts $w
  wm protocol $w WM_DELETE_WINDOW ::rep::closeWindow
  
  frame $w.m -bd 1 -relief raised
  pack $w.m -side top -fill x
  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label RepFile -menu $w.menu.file
  menu $w.menu.file
  $w.menu.file add command -label RepFileNew -accelerator "Ctrl+N" \
      -command "::rep::newFile $w.f.w.rep"
  bind $w <Control-n> "$w.menu.file invoke 0"
  $w.menu.file add command -label RepFileOpen -accelerator "Ctrl+O" \
      -command "::rep::OpenFile $w.f.w.rep"
  bind $w <Control-o> "$w.menu.file invoke 1"
  $w.menu.file add separator
  $w.menu.file add command -label RepFileSave -accelerator "Ctrl+S" \
      -command "::rep::saveFile $w.f.w.rep"
  bind $w <Control-s> "$w.menu.file invoke 3"
  $w.menu.file add command -label RepFileSaveAs \
      -command "::rep::saveFile $w.f.w.rep new"
  $w.menu.file add separator
  $w.menu.file add command -label RepFileClose -accelerator "Ctrl+Q" \
      -command "destroy $w"
  bind $w <Control-q> "destroy $w"
  
  $w.menu add cascade -label RepEdit -menu $w.menu.edit
  menu $w.menu.edit
  $w.menu.edit add command -label RepEditGroup -accelerator "Ctrl+G" \
      -command "::rep::AddCurrentBoard $w.f.w.rep group"
  bind $w <Control-g> "$w.menu.edit invoke 0"
  $w.menu.edit add command -label RepEditInclude -accelerator "Ctrl+I" \
      -command "::rep::AddCurrentBoard $w.f.w.rep include"
  bind $w <Control-i> "$w.menu.edit invoke 1"
  $w.menu.edit add command -label RepEditExclude -accelerator "Ctrl+X" \
      -command "::rep::AddCurrentBoard $w.f.w.rep exclude"
  bind $w <Control-x> "$w.menu.edit invoke 2"
  
  $w.menu add cascade -label RepView -menu $w.menu.view
  menu $w.menu.view
  $w.menu.view add command -label RepViewExpand \
      -command "::rep::showAll $w.f.w.rep"
  $w.menu.view add command -label RepViewCollapse \
      -command "::rep::hideAll $w.f.w.rep"
  
  $w.menu add cascade -label RepSearch -menu $w.menu.search
  menu $w.menu.search
  $w.menu.search add command -label RepSearchAll \
      -command "::rep::search $w.f.w.rep all"
  $w.menu.search add command -label RepSearchDisplayed \
      -command "::rep::search $w.f.w.rep displayed"
  
  $w.menu add cascade -label RepHelp -menu $w.menu.helpmenu
  menu $w.menu.helpmenu
  $w.menu.helpmenu add command -label RepHelpRep -command {helpWindow Repertoire}
  $w.menu.helpmenu add command -label RepHelpIndex -command {helpWindow Index}
  
  
  # Toolbar:
  set f [frame $w.toolbar -relief raised -border 1]
  pack $f -side top -fill x
  button $f.new -image tb_new -command "::rep::newFile $w.f.w.rep"
  button $f.open -image tb_open -command "::rep::OpenFile $w.f.w.rep"
  button $f.save -image tb_save -command "::rep::saveFile $w.f.w.rep"
  button $f.close -image tb_close -command "destroy $w"
  frame $f.space1 -width 12
  button $f.group -image tb_closedgroup \
      -command "::rep::AddCurrentBoard $w.f.w.rep group"
  button $f.include -image tb_tick \
      -command "::rep::AddCurrentBoard $w.f.w.rep include"
  button $f.exclude -image tb_cross \
      -command "::rep::AddCurrentBoard $w.f.w.rep exclude"
  
  foreach i {new open save close group include exclude} {
    $f.$i configure -relief flat -border 1 -highlightthickness 0 -anchor n \
        -takefocus 0
    bind $f.$i <Any-Enter> "+$f.$i configure -relief groove"
    bind $f.$i <Any-Leave> "+$f.$i configure -relief flat"
  }
  foreach {b m} {
    new RepFileNew open RepFileOpen save RepFileSave
    group RepEditGroup include RepEditInclude exclude RepEditExclude
  } {
    set ::helpMessage($f.$b) [tr $m]
  }
  pack $f.new $f.open $f.save $f.close $f.space1 \
      $f.group $f.include $f.exclude \
      -side left -padx 0 -ipadx 0 -pady 0 -ipady 0 -expand yes
  
  label $w.status -relief sunken -width 1 -anchor w -font font_Small
  pack $w.status -side bottom -anchor w -fill x -expand yes
  
  set pane [::utils::pane::Create $w.f w text 600 600 0.5 h] ;# 600 300
  ::utils::pane::SetRange $w.f 0.2 0.8
  #::pane::SetDrag $w.f 0
  pack $w.f -fill both -expand 1
  
  ::rep::create $w.f.w.rep -yscrollcommand "$w.f.w.sb set"
  scrollbar $w.f.w.sb -orient vertical -command "$w.f.w.rep yview"
  pack $w.f.w.sb -side right -fill y
  pack $w.f.w.rep -side left -fill both -expand 1 -padx 5 -pady 5
  text $w.f.text.moves -height 3 -fg darkBlue -bg white -font font_Small -state disabled -cursor top_left_arrow -wrap word
  entry $w.f.text.entry -width 1 -fg black -bg white -font font_Small
  text $w.f.text.note -width 40 -height 10 -fg black -bg white -font font_Small
  pack $w.f.text.moves -side top -fill x
  pack $w.f.text.entry -side top -fill x
  pack $w.f.text.note -side top -expand 1 -fill both
  $w.status configure -textvar ::rep::_data($w.f.w.rep:status)
  
  bind $w <F1> {helpWindow Repertoire}
  bind $w <Down> "$w.f.w.rep yview scroll +1 units"
  bind $w <Up> "$w.f.w.rep yview scroll -1 units"
  bind $w <Prior> "$w.f.w.rep yview scroll -1 pages"
  bind $w <Next> "$w.f.w.rep yview scroll +1 pages"
  bind $w <Home> "$w.f.w.rep yview moveto 0.0"
  bind $w <End> "$w.f.w.rep yview moveto 0.99"
  $w.f.w.rep xview moveto 0.0
  $w.f.w.rep yview moveto 0.0
  
  $w.f.w.rep bind x <1> \
      "::rep::singleClick $w.f.w.rep \[::rep::labelAtXY %W %x %y\]"
  $w.f.w.rep bind x <Double-Button-1> \
      "::rep::doubleClick $w.f.w.rep \[::rep::labelAtXY %W %x %y\]"
  
  bind $w.f.text.moves <1> "if {\[string length \[$w.f.text.moves get 1.0 end\]\] > 1} { importMoveList \[$w.f.text.moves get 1.0 end\] }"
  
  bind $w.f.text.entry <KeyPress> {
    after idle {
      set label [::rep::getSelection .repWin.f.w.rep]
      if {$label != ""} {
        set ::rep::_data(.repWin.f.w.rep:$label:comment) \
            [string trim [.repWin.f.text.entry get]]
        ::rep::_draw .repWin.f.w.rep
      }
    }
  }
  
  bind $w.f.text.note <KeyPress> {
    after idle {
      set label [::rep::getSelection .repWin.f.w.rep]
      if {$label != ""} {
        set ::rep::_data(.repWin.f.w.rep:$label:text) \
            [string trim [.repWin.f.text.note get 1.0 end]]
      }
    }
  }
  
  ::rep::ConfigMenus $w
  ::rep::updateWinTitle $w.f.w.rep
  wm geometry $w =500x400
}

# ::rep::singleClick
#   Updates the move list label, single-line comment entry widget
#   and multi-line comment text widget in the repertoire editor.
#   Called whenever the left mouse button is clicked on a group or
#   line in the repertoire.
#
proc ::rep::singleClick {w label} {
  ::rep::setSelection $w $label
  if {$label == ""} { return }
  set moves [::rep::_decode $label]
  set win [winfo toplevel $w]
  $win.f.text.moves configure -state normal
  $win.f.text.moves delete 1.0 end
  $win.f.text.moves insert end $moves
  $win.f.text.moves configure -state disabled
  set comment ""
  catch {set comment $::rep::_data($w:$label:comment)}
  $win.f.text.entry delete 0 end
  $win.f.text.entry insert end $comment
  set temptext ""
  catch {set temptext $::rep::_data($w:$label:text)}
  set temptext [string trim $temptext]
  $win.f.text.note delete 1.0 end
  $win.f.text.note insert end $temptext
}

# ::rep::doubleClick
#   Called whenever the left mouse button is double-clicked on a group or
#   line in the repertoire.
#
proc ::rep::doubleClick {w label} {
  ::rep::setSelection $w $label
  if {$label == ""} { return }
  set moves [::rep::_decode $label]
  catch {sc_game import $moves}
  updateBoard -pgn
}

# ::rep::_extract
#   Traverses the repertoire heirarchy, producing a list of
#   commands needed to reconstruct the entire repertoire.
#   If a line or group is marked deleted, it is not included in
#   the list. If a group is marked pruned, its children are not
#   included either.
#
proc ::rep::_extract {w v returnList} {
  set p $v
  if {$v == "/"} { set p "" }
  foreach c $::rep::_data($w:$v:children) {
    set text [string trim $::rep::_data($w:$p/$c:text)]
    set comment [string trim $::rep::_data($w:$p/$c:comment)]
    set moves [::rep::_decode $p/$c]
    
    set recurse 0
    if {$::rep::_data($w:$p/$c:group)} {
      if {! [info exists ::rep::_data($w:$p/$c:prune)]} { set recurse 1 }
      set cmd "::rep::newGroup $w [list $moves]"
      append cmd " -shown $::rep::_data($w:$p/$c:shown)"
    } else {
      set cmd "::rep::newLine $w [list $moves]"
      append cmd " -include $::rep::_data($w:$p/$c:include)"
    }
    append cmd " -comment [list $comment] -text [list $text]"
    if {! [info exists ::rep::_data($w:$p/$c:delete)]} {
      lappend returnList $cmd
    }
    
    if {$recurse  &&  [llength $::rep::_data($w:$p/$c:children)] > 0} {
      set returnList [::rep::_extract $w $p/$c $returnList]
    }
  }
  return $returnList
}

# ::rep::_searchLines
#   Traverses the repertoire heirarchy, producing a list of
#   lines to be searched. If type is "all", all lines in the
#   repertoire will appear. Otherwise, type should be "displayed"
#   and only currently displayed lines will appear.
#   Each include-line returned has "1 " prepended to its moves, and
#   each exclude-line returned has "0 " prepended to its moves.
#
proc ::rep::_searchLines {w type v returnList} {
  set p $v
  if {$v == "/"} { set p "" }
  foreach c $::rep::_data($w:$v:children) {
    set text [string trim $::rep::_data($w:$p/$c:text)]
    set comment [string trim $::rep::_data($w:$p/$c:comment)]
    set moves [::rep::_decode $p/$c]
    
    set recurse 0
    if {$::rep::_data($w:$p/$c:group)} {
      if {$type == "all"  ||  $::rep::_data($w:$p/$c:shown)} {
        set recurse 1
      }
    } else {
      lappend returnList "$::rep::_data($w:$p/$c:include) $moves"
    }
    
    if {$recurse  &&  [llength $::rep::_data($w:$p/$c:children)] > 0} {
      set returnList [::rep::_searchLines $w $type $p/$c $returnList]
    }
  }
  return $returnList
}

# ::rep::readFile
#   Reads the specified repertoire file.
#
proc ::rep::readFile {w fname} {
  #set readonly 0
  #if {[catch {open $fname r+} f]} {
  #  set readonly 1
  #} else {
  #  close $f
  #}
  
  if {[catch {open $fname r} f]} {
    return -code error "Unable to open the file: $fname"
  }
  ::rep::clear $w
  set ::rep::_data($w:altered) 1
  #set ::rep::_data($w:readonly) 1
  set text ""
  set count 0
  set groups {}
  while {1} {
    set line [string trim [gets $f]]
    if {[eof $f]} { break }
    incr count
    set sep [string first ";" $line]
    if {$sep < 0} {
      set moves $line
      set comment ""
    } else {
      set moves [string trim [string range $line 0 [expr {$sep - 1} ]]]
      set comment [string trim [string range $line [expr {$sep + 1} ] end]]
    }
    set c [string index $line 0]
    
    switch -exact -- $c {
      "\#" {
        set line [string trim [string range $line 1 end]]
        append text "$line\n"
      }
      "\[" {
        set group [string trim [string range $moves 1 end]]
        set m [join $groups]
        append m " $group"
        if {[catch {::rep::newGroup $w $m -comment $comment -text $text} err]} {
          return -code error "Error: $fname: line $count: $err"
        }
        lappend groups $group
        set text ""
      }
      "\]" {
        set len [llength $groups]
        if {$len == 0} {
          return -code error "Error: $fname: line $count: extra \"\]\" symbol."
        } elseif {$len == 1} {
          set groups {}
        } else {
          set groups [lrange $groups 0 [expr {$len - 2} ]]
        }
      }
      "-" {
        set m [join $groups]
        append m " "
        append m [string trim [string range $moves 1 end]]
        if {[catch {::rep::newLine $w $m -include 0 -comment $comment -text $text} err]} {
          return -code error "Error: $fname: line $count: $err"
        }
        set text ""
      }
      "+" {
        set m [join $groups]
        append m " "
        append m [string trim [string range $moves 1 end]]
        if {[catch {::rep::newLine $w $m -include 1 -comment $comment -text $text} err]} {
          return -code error "Error: $fname: line $count: $err"
        }
        set text ""
      }
      "" -
      "@" {
        # do nothing
      }
      default {
        return -code error "Error in $fname at line $count: unexpected character: \"$c\""
      }
    }
  }
  close $f
  set ::rep::_data($w:altered) 0
  set ::rep::_data($w:filename) $fname
  ::rep::_drawWhenIdle $w
  ::rep::updateWinTitle $w
  return
}

# ::rep::writeFile
#   Writes the repertoire to the specified file.
#
proc ::rep::writeFile {w fname} {
  if {[catch {open $fname w} f]} {
    return -code error "Unable to open the file \"$fname\""
  }
  puts $f "@ Scid opening repertoire file.  Updated: [::utils::date::today]."
  if {[catch {::rep::_writeFileLevel $w $f "/" 0} err]} {
    return -code error "Error writing the file \"$fname\": $err"
  }
  close $f
  set ::rep::_data($w:altered) 0
  set ::rep::_data($w:filename) $fname
  ::rep::updateStatus $w
  ::rep::updateWinTitle $w
  return
}

# ::rep::_writeFileLevel
#   Writes a single level of the repertoire to the open
#   file channel "f", indented "in" spaces.
#
proc ::rep::_writeFileLevel {w f v in} {
  set p $v
  if {$v == "/"} { set p "" }
  if {[llength $::rep::_data($w:$v:children)] == 0} { return }
  
  foreach c $::rep::_data($w:$v:children) {
    if {$in == 0} { puts $f "" }
    set text [split [string trim $::rep::_data($w:$p/$c:text)] "\n"]
    foreach line $text {
      for {set i 0} {$i < $in} {incr i} { puts -nonewline $f " " }
      puts -nonewline $f "\# "
      puts $f [string trim $line]
    }
    
    for {set i 0} {$i < $in} {incr i} { puts -nonewline $f " " }
    if {$::rep::_data($w:$p/$c:group)} {
      puts -nonewline $f "\[ "
    } else {
      if {$::rep::_data($w:$p/$c:include)} {
        puts -nonewline $f "+ "
      } else {
        puts -nonewline $f "- "
      }
    }
    set moves [::rep::_decode $c]
    if {[string length $::rep::_data($w:$p/$c:comment)] > 0} {
      append moves " ; $::rep::_data($w:$p/$c:comment)"
    }
    puts $f $moves
    if {[llength $::rep::_data($w:$p/$c:children)] > 0} {
      ::rep::_writeFileLevel $w $f $p/$c [expr {$in + 4} ]
    }
    if {$::rep::_data($w:$p/$c:group)} {
      for {set i 0} {$i < $in} {incr i} { puts -nonewline $f " " }
      puts $f "\]"
    }
  }
}

# ::rep::OpenFile
#   Prompts the user to select a repertoire file, and reads it.
#
proc ::rep::OpenFile {w} {
  set ftype { {"Scid repertoire files" {".sor"}} }
  set fname [tk_getOpenFile -filetypes $ftype -title "Open a repertoire file"]
  if {$fname == ""} { return }
  ::rep::readFile $w $fname
}

# ::rep::saveFile
#   Prompts the user to select a repertoire file name if the file is
#   untitled or if the user type is "new", and then writes the file.
#
proc ::rep::saveFile {w {type current}} {
  set fname $::rep::_data($w:filename)
  if {$type == "new"  ||  $fname == ""} {
    set ftype { {"Scid repertoire files" {".sor"}} }
    set fname [tk_getSaveFile -filetypes $ftype -defaultextension ".sor" -title "Create a repertoire file"]
  }
  if {$fname == ""} { return }
  if {[file extension $fname] != ".sor" } {
    append fname ".sor"
  }
  ::rep::writeFile $w $fname
}

# ::rep::_popupMenu
#   Creates and presents a right-mouse-button popup menu for a
#   group or line at the real coordinates ($x,$y).
#
proc ::rep::_popupMenu {w v x y} {
  if {! [info exists ::rep::_data($w:$v:group)]} { return }
  catch {destroy $w.popup}
  set group $::rep::_data($w:$v:group)
  menu $w.popup
  $w.popup add command -label "Paste moves as current game" \
      -command "catch {sc_game import \"[::rep::_decode $v]\"};
  updateBoard -pgn"
  $w.popup add separator
  if {$group} {
    $w.popup add command -label "Expand group and all subgroups" \
        -command "::rep::showAll $w $v"
    $w.popup add command -label "Collapse group and all subgroups" \
        -command "::rep::hideAll $w $v"
    $w.popup add separator
    $w.popup add command -label "Delete group, keeping subgroups..." \
        -command "::rep::deleteGroup $w $v"
    $w.popup add command -label "Delete group and subgroups..." \
        -command "::rep::pruneGroup $w $v"
  } else {
    $w.popup add command -label "Toggle included/excluded state" \
        -command "::rep::toggleLineState $w $v"
    $w.popup add separator
    $w.popup add command -label "Delete line..." \
        -command "::rep::deleteLine $w $v"
  }
  tk_popup $w.popup $x $y
}

# ::rep::search
#   Opens the repertoire search window. The parameter "type" should be
#   "all" or "displayed", indicating which lines to use in the search.
#
proc ::rep::search {repwin {type all}} {
  sc_search repertoire clear
  set lines [::rep::_searchLines $repwin $type / {}]
  set numIncluded 0
  set numExcluded 0
  foreach i $lines {
    set include [string index $i 0]
    set moves [string range $i 2 end]
    sc_game push
    if {[catch {eval "sc_move addSan $moves"} result]} {
      sc_game pop
      tk_messageBox -parent $repwin -type ok -icon warning -title "Scid" \
          -message "Error in line \"$moves\": $result"
      sc_search repertoire clear
      return
    }
    sc_search repertoire add $include
    sc_game pop
    if {$include} { incr numIncluded } else { incr numExcluded }
  }
  if {$numIncluded == 0} {
    tk_messageBox -parent $repwin -type ok -icon info -title "Scid" \
        -message "The repertoire you want to search for has no included lines, so it cannot possibly match any games."
    return
  }
  
  set w .searchRep
  toplevel $w
  wm title $w "Scid: $::tr(RepSearch)"
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <Return> "$w.b.search invoke"
  bind $w <F1> {helpWindow Repertoire Search}
  
  pack [label $w.l -anchor w] -side top -fill x
  set t "$::tr(RepSearch): $numIncluded $::tr(RepIncludedLines), "
  append t "$numExcluded $::tr(RepExcludedLines)"
  $w.l configure -text $t
  
  ::search::addFilterOpFrame $w
  addHorizontalRule $w
  
  canvas $w.progress -height 20 -width 300 -bg white -relief solid -border 1
  $w.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.progress create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  
  frame $w.b
  pack $w.b -side top -ipady 5 -fill x
  
  set ::_searchRep $repwin
  button $w.b.search -textvar ::tr(Search) -command {
    busyCursor .
    grab .searchRep.b.cancel
    sc_progressBar .searchRep.progress bar 301 21 time
    .searchRep.b.cancel configure -command sc_progressBar
    set err [catch {sc_search repertoire go $::search::filter::operation} result]
    sc_search repertoire clear
    unbusyCursor .
    grab release .searchRep.b.cancel
    grab release .searchRep
    focus .repWin
    destroy .searchRep
    if {$err} {
      tk_messageBox -parent $::_searchRep -type ok -icon info -title "Scid" \
          -message $result
    } else {
      set ::rep::_data($::_searchRep:status) "  $::tr(RepSearch): $result"
    }
    ::windows::gamelist::Refresh
    ::windows::stats::Refresh
  }
  button $w.b.cancel -textvar ::tr(Cancel) \
      -command "grab release $w; focus $repwin; destroy $w"
  pack $w.b.cancel $w.b.search -side right -pady 5 -padx 5
  pack $w.progress -side bottom
  wm resizable $w 0 0
  grab $w
}

set maskdata "#define solid_width 9\n#define solid_height 9"
append maskdata {
  static unsigned char solid_bits[] = {
    0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01,
    0xff, 0x01, 0xff, 0x01, 0xff, 0x01
  };
}

set data "#define open_width 9\n#define open_height 9"
append data {
  static unsigned char open_bits[] = {
    0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7d, 0x01, 0x01, 0x01,
    0x01, 0x01, 0x01, 0x01, 0xff, 0x01
  };
}

image create bitmap ::rep::_shown -data $data -maskdata $maskdata \
    -foreground black -background white

set data "#define closed_width 9\n#define closed_height 9"
append data {
  static unsigned char closed_bits[] = {
    0xff, 0x01, 0x01, 0x01, 0x11, 0x01, 0x11, 0x01, 0x7d, 0x01, 0x11, 0x01,
    0x11, 0x01, 0x01, 0x01, 0xff, 0x01
  };
}

image create bitmap ::rep::_hidden -data $data -maskdata $maskdata \
    -foreground black -background white

###
### End of file: reper.tcl
###
### graph.tcl: part of Scid.

# ::tools::graphs::Save
#
#   Saves a graph (e.g. tree graph, filter graph, rating graph) to a
#   color or greyscale Postscript file.
#
#   The mode should be "color" or "gray".
#
proc ::tools::graphs::Save {mode w} {
  if {! [winfo exists $w]} { return }
  set ftypes {{"PostScript files" {.eps .ps}} {"All files" *}}
  set fname [tk_getSaveFile -filetypes $ftypes -parent $w -defaultextension ".eps" -title "Scid: Save Graph"]
  if {$fname == ""} { return }
  
  if {[file extension $fname] != ".eps" && [file extension $fname] != ".ps" } {
    append fname ".eps"
  }
  
  if {[catch {$w postscript -file $fname -colormode $mode} result]} {
    tk_messageBox -icon info -parent $w -title "Scid" -message $result
  }
}

########################################
# Configure Filter graph window

if { ! [info exists FilterMinElo] } {
  set FilterMinElo 2100
  set FilterMaxElo 2800
  set FilterStepElo 100
  set FilterGuessELO 1
  set FilterMaxYear [clock format [clock seconds] -format {%Y}]
  set FilterMinYear [expr {$FilterMaxYear - 12}]
  set FilterStepYear 1
  set FilterMinMoves 5
  set FilterMaxMoves 80
  set FilterStepMoves 1
}

#Check for illegal Values and set to default values
proc checkConfigFilterGraph {} {
  global FilterMaxMoves FilterMinMoves FilterStepMoves FilterMaxElo FilterMinElo FilterStepElo FilterMaxYear FilterMinYear FilterStepYear
  if { $FilterStepMoves < 1 } { set FilterStepMoves 1 }
  if { $FilterStepElo < 1 } { set FilterStepElo 100 }
  if { $FilterStepYear < 1 } { set FilterStepYear 1 }
  if { $FilterMinMoves < 1 } { set FilterMinMoves 5 }
  if { $FilterMinElo < 0 } { set FilterMinElo 2100 }
  if { $FilterMinYear < 1 } { set FilterMinYear [expr {$FilterMaxYear - 12}] }
  if { $FilterMaxMoves < 1 } { set FilterMaxMoves 80 }
  if { $FilterMaxElo < 1 } { set FilterMaxElo 2800 }
  if { $FilterMaxYear < 1 } { set FilterMaxYear [clock format [clock seconds] -format {%Y}] }
}

proc configureFilterGraph {} {
  global FilterMaxMoves FilterMinMoves FilterStepMoves FilterMaxElo FilterMinElo FilterStepElo FilterMaxYear FilterMinYear FilterStepYear FilterGuessELO
  
  set w .configFilterGraph
  if {[winfo exists $w]} {
    destroy $w
  }
  
  toplevel $w
  wm title $w $::tr(ConfigureFilter)
  setWinLocation $w
  bind $w <F1> {helpWindow Graphs Filter}
  frame $w.filter
  set col 0
  set row 0
  #Create input for each configurationvalue
  foreach { i n } { Year Year Elo Rating Moves moves} {
    label $w.filter.label$i -text $::tr($n): -font font_Bold
    grid $w.filter.label$i -row $row -column $col -sticky w
    incr col
    foreach {j k} { FilterMin "  " FilterMax " - " FilterStep "  Intervall:"} {
      label $w.filter.label$j$i -text $k
      entry $w.filter.i$j$i -textvariable $j$i -justify right -width 5 -validate all -vcmd { regexp {^[0-9]{0,4}$} %P }
      grid $w.filter.label$j$i -row $row -column $col -sticky w
      incr col
      grid $w.filter.i$j$i -row $row -column $col -sticky w
      incr col
    }
    if { $i == "Elo" } {
      checkbutton $w.filter.iEloGuess -text $::tr(FilterEstimate) -onvalue 1 -offvalue 0 -variable FilterGuessELO
      grid $w.filter.iEloGuess -row $row -column $col -sticky w
      #	  incr col
    }
    incr row
    set col 0
  }
  
  button $w.close -textvar ::tr(Close) -command {
    checkConfigFilterGraph; ::tools::graphs::filter::Refresh
    ::tools::graphs::absfilter::Refresh; destroy .configFilterGraph  }
  button $w.standard -textvar ::tr(Defaults) -command {
    set FilterMinElo 2100
    set FilterMaxElo 2800
    set FilterStepElo 100
    set FilterMaxYear [clock format [clock seconds] -format {%Y}]
    set FilterMinYear [expr {$FilterMaxYear - 12}]
    set FilterStepYear 1
    set FilterMinMoves 5
    set FilterMaxMoves 80
    set FilterStepMoves 1
    set FilterGuessELO 1
  }
  button $w.update -textvar ::tr(Update) -command { checkConfigFilterGraph
    ::tools::graphs::absfilter::Refresh;
    ::tools::graphs::filter::Refresh
  }
  
  pack $w.filter
  pack $w.close $w.update $w.standard -side right -padx 2 -pady 2
  focus $w.filter.iFilterMinYear
  bind $w <Configure> "recordWinSize $w"
}

#####################
# Filter graph window

# ::tools::graphs::filter::type
#   can be "decade", "year" or "elo" , "move"
#
set ::tools::graphs::filter::type year

proc tools::graphs::filter::Open {} {
  global filterGraph
  set w .fgraph
  if {[winfo exists $w]} {
    focus .
    destroy $w
    set filterGraph 0
    return
  }
  toplevel $w
  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label GraphFile -menu $w.menu.file
  configMenuText $w.menu 0 GraphFile $::language
  menu $w.menu.file
  $w.menu.file add command -label GraphFileColor -command "::tools::graphs::Save color $w.c"
  configMenuText $w.menu.file 0 GraphFileColor $::language
  $w.menu.file add command -label GraphFileGrey -command "::tools::graphs::Save gray $w.c"
  configMenuText $w.menu.file 1 GraphFileGrey $::language
  $w.menu.file add separator
  $w.menu.file add command -label GraphFileClose -command "destroy $w"
  configMenuText $w.menu.file 3 GraphFileClose $::language
  wm title $w $::tr(TitleFilterGraph)
  set filterGraph 1
  bind $w <Destroy> {set filterGraph 0}
  
  frame $w.b
  pack $w.b -side bottom -fill x
  label $w.b.status -width 1 -font font_Small -anchor w
  frame $w.sep -height 2 -borderwidth 2 -relief sunken -background white
  pack $w.sep -side bottom -fill x -pady 4
  
  canvas $w.c -width 600 -height 400
  $w.c create text 25 5 -tag title -justify center -width 1 \
      -font font_Small -anchor n
  $w.c create text 250 295 -tag type -justify center -width 1 \
      -font font_Small -anchor s
  pack $w.c -side top -expand yes -fill both
  ::utils::graph::create filter
  
  bind $w <F1> {helpWindow Graphs Filter}
  bind $w <Configure> {
    .fgraph.c itemconfigure title -width [expr {[winfo width .fgraph.c] - 50}]
    .fgraph.c coords title [expr {[winfo width .fgraph.c] / 2}] 10
    .fgraph.c itemconfigure type -width [expr {[winfo width .fgraph.c] - 50}]
    .fgraph.c coords type [expr {[winfo width .fgraph.c] / 2}] \
        [expr {[winfo height .fgraph.c] - 10}]
    ::utils::graph::configure filter -height [expr {[winfo height .fgraph.c] - 80}]
    ::utils::graph::configure filter -width [expr {[winfo width .fgraph.c] - 60}]
    ::utils::graph::redraw filter
  }
  bind $w.c <1> tools::graphs::filter::Switch
  bind $w.c <$::MB3> ::tools::graphs::filter::Refresh
  
  foreach {name text} {decade Decade year Year elo Rating move moves} {
    radiobutton $w.b.$name -padx 4 -pady 3 -text $::tr($text) \
        -variable ::tools::graphs::filter::type -value $name \
        -command ::tools::graphs::filter::Refresh
    pack $w.b.$name -side left -padx 1 -pady 2
  }
  button $w.b.setup -image tb_graph -command configureFilterGraph
  dialogbutton $w.b.close -text $::tr(Close) -command "destroy $w"
  pack $w.b.decade $w.b.elo -side left -padx 1 -pady 2
  pack $w.b.close $w.b.setup -side right -padx 2 -pady 2
  pack $w.b.status -side left -padx 2 -pady 2 -fill x -expand yes
  
  ::tools::graphs::filter::Refresh
}

proc tools::graphs::filter::Switch {} {
  variable type
  switch $type {
    "decade" { set type "year" }
    "year" { set type "elo" }
    "elo" { set type "move" }
    "move" { set type "decade" }
  }
  ::tools::graphs::filter::Refresh
}

proc ::tools::graphs::filter::Refresh {} {
  global FilterMaxMoves FilterMinMoves FilterStepMoves FilterMaxElo FilterMinElo FilterStepElo FilterMaxYear FilterMinYear FilterStepYear FilterGuessELO
  
  set w .fgraph
  if {! [winfo exists $w]} { return }
  
  $w.c itemconfigure title -width [expr {[winfo width $w.c] - 50}]
  $w.c coords title [expr {[winfo width $w.c] / 2}] 10
  $w.c itemconfigure type -width [expr {[winfo width $w.c] - 50}]
  $w.c coords type [expr {[winfo width $w.c] / 2}] \
      [expr {[winfo height $w.c] - 10}]
  set height [expr {[winfo height $w.c] - 80}]
  set width [expr {[winfo width $w.c] - 60}]
  set vlines {}
  if {$::tools::graphs::filter::type == "elo"} {
    # Vertical lines for Elo-range graph:
    for {set i 1} {$i <=  $FilterMaxElo- $FilterMinElo} { incr i } {
      lappend vlines [list gray80 1 at $i.5]
    }
  } elseif {$::tools::graphs::filter::type == "year"} {
    # Vertical lines for Year-range graph:
    for {set i 1} {$i <= $FilterMaxYear- $FilterMinYear} {incr i } {
      lappend vlines [list gray80 1 at $i.5]
    }
  } elseif {$::tools::graphs::filter::type == "decade"} {
    # Vertical lines for Decade graph: most are gray, but those
    # just before 1950s and 2000s are blue to make them stand out.
    for {set i 1} {$i < 10} {incr i} {
      set vlineColor gray80
      if {$i == 4  ||  $i == 9} { set vlineColor steelBlue }
      lappend vlines [list $vlineColor 1 at $i.5]
    }
  }
  
  ::utils::graph::create filter -width $width -height $height -xtop 40 -ytop 35 \
      -ytick 1 -xtick 1 -font font_Small -canvas $w.c -textcolor black \
      -vline $vlines -background lightYellow -tickcolor black -xmin 0 -xmax 1
  ::utils::graph::redraw filter
  busyCursor .
  update
  
  set count 0
  set dlist {}
  set xlabels {}
  set max 0.0
  
  # Generate plot values and labels:
  if {$::tools::graphs::filter::type == "decade"} {
    set ftype date
    set typeName $::tr(Decade)
    set rlist [list 0000 1919 -1919  1920 1929 20-29 \
        1930 1939 30-39  1940 1949 40-49  1950 1959 50-59 \
        1960 1969 60-69  1970 1979 70-79  1980 1989 80-89 \
        1990 1999 90-99  2000 2009 2000+]
  } elseif {$::tools::graphs::filter::type == "year"} {
    set ftype date
    set typeName $::tr(Year)
    set endYear $FilterMaxYear
    set startYear $FilterMinYear
    set rlist {}
    for {set i $startYear} {$i <= $endYear} {set i [expr {$i + $FilterStepYear}]} {
      lappend rlist $i
      lappend rlist [expr {$i+$FilterStepYear-1}]
      lappend rlist [expr {$i+$FilterStepYear/2}]
    }
  } elseif {$::tools::graphs::filter::type == "elo"} {
    set ftype elo
    set typeName $::tr(Rating)
    #    set rlist [list 0 1999 0-1999  2000 2099 20xx  2100 2199 21xx  \
    2200 2299 22xx  2300 2399 23xx  2400 2499 24xx  \
        2500 2599 25xx  2600 2699 26xx  2700 3999 2700+]
    set endElo $FilterMaxElo
    set startElo $FilterMinElo
    set rlist {}
    for {set i $startElo} {$i <= $endElo} {set i [expr {$i + $FilterStepElo}]} {
      lappend rlist $i
      lappend rlist [expr {$i+$FilterStepElo-1}]
      # shorten gap between 0 and "useful" ratings 1800
      set j $i
      if { $i < 100 } { set i [expr { 1800 - $FilterStepElo}] }
      lappend rlist [concat $j-[expr {$i+$FilterStepElo-1}]]
    }
  } else {
    set ftype move
    set typeName $::tr(moves)
    set startMove $FilterMinMoves
    set endMove  $FilterMaxMoves
    set rlist {}
    for {set i $startMove} {$i <= $endMove} {set i [expr {$i + $FilterStepMoves}]} {
      lappend rlist [expr {2*$i}]
      lappend rlist [expr {2*($i+$FilterStepMoves)-1}]
      if { $i % 5 == 0 } {
        lappend rlist $i
      } else {
        lappend rlist ""
      }
    }
  }
  
  foreach {start end label} $rlist {
    if {$ftype == "date"} { append end ".12.31" }
    set r [sc_filter freq [sc_base current] dbfilter $ftype $start $end $FilterGuessELO]
    set filter [lindex $r 0]
    set all [lindex $r 1]
    if {$all == 0} {
      set freq 0.0
    } else {
      set freq [expr {double($filter) * 1000.0 / double($all)}]
    }
    if {$freq >= 1000.0} { set freq 999.9 }
    incr count
    lappend dlist $count
    lappend dlist $freq
    if {$freq > $max} { set max $freq }
    lappend xlabels [list $count $label]
  }
  
  # Find a suitable spacing of y-axis labels:
  set ytick 0.1
  if {$max > 1.0} { set ytick 0.2 }
  if {$max > 2.5} { set ytick 0.5 }
  if {$max >   5} { set ytick   1 }
  if {$max >  10} { set ytick   2 }
  if {$max >  25} { set ytick   5 }
  if {$max >  50} { set ytick  10 }
  if {$max > 100} { set ytick  20 }
  if {$max > 250} { set ytick  50 }
  if {$max > 500} { set ytick 100 }
  set hlines [list [list gray80 1 each $ytick]]
  # Add mean horizontal line:
  set filter [sc_filter count]
  set all [sc_base numGames]
  if {$all > 0} {
    set mean [expr {double($filter) * 1000.0 / double($all)}]
    if {$mean >= 1000.0} { set mean 999.9 }
    lappend hlines [list red 1 at $mean]
  }
  
  # Create fake dataset with bounds so we see 0.0::
  #::utils::graph::data decade bounds -points 0 -lines 0 -bars 0 -coords {1 0.0 1 0.0}
  
  ::utils::graph::data filter data -color darkBlue -points 1 -lines 1 -bars 0 \
      -linewidth 2 -radius 4 -outline darkBlue -coords $dlist
  ::utils::graph::configure filter -xlabels $xlabels -ytick $ytick \
      -hline $hlines -ymin 0 -xmin 0.5 -xmax [expr {$count + 0.5}]
  ::utils::graph::redraw filter
  $w.c itemconfigure title -text $::tr(GraphFilterTitle)
  $w.c itemconfigure type -text $typeName
  $w.b.status configure -text "  $::tr(Filter): [filterText]"
  unbusyCursor .
  update
}

#Klimmek: Invert white/black Score in Score graph
set ::tools::graphs::score::White 0
set ::tools::graphs::score::Black 0

####################
# Game score graph

proc ::tools::graphs::score::Refresh {} {
  set linecolor red
  set linewidth 2
  set psize 2
  
  set w .sgraph
  
  if {! [winfo exists $w]} {
    toplevel $w
    menu $w.menu
    $w configure -menu $w.menu
    $w.menu add cascade -label GraphFile -menu $w.menu.file
    menu $w.menu.file
    $w.menu.file add command -label GraphFileColor \
        -command "::tools::graphs::Save color $w.c"
    $w.menu.file add command -label GraphFileGrey \
        -command "::tools::graphs::Save gray $w.c"
    $w.menu.file add separator
    $w.menu.file add command -label GraphFileClose -command "destroy $w"
    $w.menu add cascade -label GraphOptions -menu $w.menu.options
    #Checkbuttons for Invert white/black Score in Score graph
    menu $w.menu.options
    foreach i {White Black} {
      $w.menu.options add checkbutton -label GraphOptions$i \
          -variable ::tools::graphs::score::$i -offvalue "0" -onvalue "1" \
          -command "::tools::graphs::score::Refresh"
    }
    
    canvas $w.c -width 500 -height 300
    $w.c create text 25 5 -tag text -justify center -width 1 \
        -font font_Regular -anchor n
    pack $w.c -side top -expand yes -fill both
    bind $w <F1> {helpWindow Graphs Score}
    bind $w <Configure> {
      .sgraph.c itemconfigure text -width [expr {[winfo width .sgraph.c] - 50}]
      .sgraph.c coords text [expr {[winfo width .sgraph.c] / 2}] 10
      ::utils::graph::configure score -height [expr {[winfo height .sgraph.c] - 90}]
      ::utils::graph::configure score -width [expr {[winfo width .sgraph.c] - 100}]
      ::utils::graph::redraw score
    }
    bind $w.c <$::MB3> ::tools::graphs::score::Refresh
    bind $w.c <1> {::tools::graphs::score::Move %x}
    bind $w <Control-Z> ::tools::graphs::score::Refresh
    wm title $w "Scid: [tr ToolsScore]"
    ::tools::graphs::score::ConfigMenus
  }
  
  $w.c itemconfigure text -width [expr {[winfo width $w.c] - 50}]
  $w.c coords text [expr {[winfo width $w.c] / 2}] 10
  set height [expr {[winfo height $w.c] - 90} ]
  set width [expr {[winfo width $w.c] - 100} ]
  ::utils::graph::create score -width $width -height $height -xtop 50 -ytop 45 \
      -ytick 1 -xtick 5 -font font_Small -canvas $w.c -textcolor black \
      -hline {{gray80 1 each 1} {black 1 at 0}} \
      -vline {{gray80 1 each 1} {steelBlue 1 each 5}}
  
  # Create fake dataset with bounds so we see at least -1.0 to 1.0:
  ::utils::graph::data score bounds -points 0 -lines 0 -bars 0 -coords {1 -0.9 1 0.9}
  
  # Update the graph:
  set whiteelo [sc_game tag get WhiteElo]
  set blackelo [sc_game tag get BlackElo]
  if {$whiteelo == 0} {set whiteelo ""} else {set whiteelo "($whiteelo)"}
  if {$blackelo == 0} {set blackelo ""} else {set blackelo "($blackelo)"}
  $w.c itemconfigure text -text "[sc_game info white]$whiteelo - [sc_game info black]$blackelo\n[sc_game info site]  [sc_game info date]"
  busyCursor $w
  update
  #Klimmek: Invert white/black Score in Score graph
  catch {::utils::graph::data score data -color $linecolor -points 1 -lines 1 \
        -linewidth $linewidth -radius $psize -outline $linecolor \
        -coords [sc_game scores $::tools::graphs::score::White $::tools::graphs::score::Black]}
  ::utils::graph::redraw score
  unbusyCursor $w
  update
}

proc ::tools::graphs::score::ConfigMenus {{lang ""}} {
  if {! [winfo exists .sgraph]} { return }
  if {$lang == ""} { set lang $::language }
  set m .sgraph.menu
  foreach idx {0 1} tag {File Options} {
    configMenuText $m $idx Graph$tag $lang
  }
  foreach idx {0 1 3} tag {Color Grey Close} {
    configMenuText $m.file $idx GraphFile$tag $lang
  }
  #Klimmek: translate optionsmenu
  foreach idx {0 1} tag {White Black} {
    configMenuText $m.options $idx GraphOptions$tag $lang
  }
}

proc ::tools::graphs::score::Move {xc} {
  set x [expr {round([::utils::graph::xunmap score $xc] * 2)} ]
  sc_move start
  sc_move forward $x
  updateBoard
}


####################
# Rating graph

set ::tools::graphs::rating::year 1900
set ::tools::graphs::rating::type both
set ::tools::graphs::rating::player ""

proc ::tools::graphs::rating::Refresh {{type ""} {player ""}} {
  set white [sc_game info white]
  set black [sc_game info black]
  set whiteColor red
  set blackColor blue
  set lwidth 2
  set psize 2
  
  if {$type == ""} { set type $::tools::graphs::rating::type }
  if {$player == ""} { set player $::tools::graphs::rating::player }
  set ::tools::graphs::rating::type $type
  set ::tools::graphs::rating::player $player
  
  set w .rgraph
  
  if {! [winfo exists $w]} {
    toplevel $w
    menu $w.menu
    $w configure -menu $w.menu
    $w.menu add cascade -label GraphFile -menu $w.menu.file
    menu $w.menu.file
    $w.menu.file add command -label GraphFileColor \
        -command "::tools::graphs::Save color $w.c"
    $w.menu.file add command -label GraphFileGrey \
        -command "::tools::graphs::Save gray $w.c"
    $w.menu.file add separator
    $w.menu.file add command -label GraphFileClose -command "destroy $w"
    $w.menu add cascade -label GraphOptions -menu $w.menu.options
    menu $w.menu.options
    foreach i {White Black Both PInfo} j {white black both player} {
      $w.menu.options add radiobutton -label GraphOptions$i \
          -variable ::tools::graphs::rating::type -value $j \
          -command "::tools::graphs::rating::Refresh"
    }
    $w.menu.options add separator
    foreach i {1900 1980 1985 1990 1995 2000 2005 2010 2015 } {
      $w.menu.options add radiobutton -label "Since $i" \
          -variable ::tools::graphs::rating::year -value $i \
          -command "::tools::graphs::rating::Refresh"
    }
    
    canvas $w.c -width 500 -height 300
    $w.c create text 25 10 -tag text -justify center -width 1 \
        -font font_Regular -anchor n
    pack $w.c -side top -expand yes -fill both
    bind $w <F1> {helpWindow Graphs Rating}
    bind $w <Configure> {
      .rgraph.c itemconfigure text -width [expr {[winfo width .rgraph.c] - 50} ]
      .rgraph.c coords text [expr {[winfo width .rgraph.c] / 2} ] 10
      ::utils::graph::configure ratings -height [expr {[winfo height .rgraph.c] - 70} ]
      ::utils::graph::configure ratings -width [expr {[winfo width .rgraph.c] - 100} ]
      ::utils::graph::configure ratings -logy 10
      ::utils::graph::redraw ratings
    }
    bind $w.c <Button-1> "::tools::graphs::rating::Refresh"
    bind $w.c <Button-$::MB3> "::tools::graphs::rating::Refresh"
    wm title $w "Scid: [tr ToolsRating]"
    ::tools::graphs::rating::ConfigMenus
  }
  
  $w.c itemconfigure text -width [expr {[winfo width $w.c] - 50} ]
  $w.c coords text [expr {[winfo width $w.c] / 2} ] 10
  set height [expr {[winfo height $w.c] - 70} ]
  set width [expr {[winfo width $w.c] - 100} ]
  ::utils::graph::create ratings -width $width -height $height -xtop 50 -ytop 35 \
      -ytick 50 -xtick 1 -font font_Small -canvas $w.c -textcolor black \
      -hline {{gray80 1 each 25} {steelBlue 1 each 100}} \
      -vline {{gray80 1 each 1} {steelBlue 1 each 5}}
  ::utils::graph::redraw ratings
  busyCursor $w
  update
  
  set title "[tr ToolsRating]: "
  set year $::tools::graphs::rating::year
  if {$type == "player"} {
    append title $player
    catch {::utils::graph::data ratings d -color $whiteColor -points 1 -lines 1 \
          -linewidth $lwidth -radius $psize -outline $whiteColor \
          -coords [sc_name info -ratings:$year $player]}
  }
  if {$type == "white"  ||  $type == "both"} {
    set key ""
    if {$type == "both"} { set key [::utils::string::Surname $white] }
    append title $white
    catch {::utils::graph::data ratings d -color $whiteColor -points 1 -lines 1 \
          -linewidth $lwidth -radius $psize -outline $whiteColor \
          -key $key -coords [sc_name info -ratings:$year $white]}
  }
  if {$type == "both"} { append title " - " }
  if {$type == "black"  ||  $type == "both"} {
    set key ""
    if {$type == "both"} { set key [::utils::string::Surname $black] }
    append title $black
    catch {::utils::graph::data ratings d2 -color $blackColor -points 1 -lines 1 \
          -linewidth $lwidth -radius $psize -outline $blackColor \
          -key $key -coords [sc_name info -ratings:$year $black]}
  }
  set minYear [expr {int([::utils::graph::cget ratings axmin])} ]
  set maxYear [expr {int([::utils::graph::cget ratings axmax])} ]
  ::utils::graph::configure ratings -xtick 1
  if {[expr {$maxYear - $minYear} ] > 10} {::utils::graph::configure ratings -xtick 5}
  ::utils::graph::redraw ratings
  $w.c itemconfigure text -text $title
  unbusyCursor $w
}

proc ::tools::graphs::rating::ConfigMenus {{lang ""}} {
  if {! [winfo exists .rgraph]} { return }
  if {$lang == ""} { set lang $::language }
  set m .rgraph.menu
  foreach idx {0 1} tag {File Options} {
    configMenuText $m $idx Graph$tag $lang
  }
  foreach idx {0 1 3} tag {Color Grey Close} {
    configMenuText $m.file $idx GraphFile$tag $lang
  }
  foreach idx {0 1 2 3} tag {White Black Both PInfo} {
    configMenuText $m.options $idx GraphOptions$tag $lang
  }
}


########################################
# Filter graph window for absolut values

# ::tools::graphs::absfilter::type
#   can be "decade", "year" or "elo", "move"
#
set ::tools::graphs::absfilter::type year

proc tools::graphs::absfilter::Open {} {
  global absfilterGraph
  set w .afgraph
  if {[winfo exists $w]} {
    focus .
    destroy $w
    set absfilterGraph 0
    return
  }
  toplevel $w
  menu $w.menu
  $w configure -menu $w.menu
  $w.menu add cascade -label GraphFile -menu $w.menu.file
  configMenuText $w.menu 0 GraphFile $::language
  menu $w.menu.file
  $w.menu.file add command -label GraphFileColor -command "::tools::graphs::Save color $w.c"
  configMenuText $w.menu.file 0 GraphFileColor $::language
  $w.menu.file add command -label GraphFileGrey -command "::tools::graphs::Save gray $w.c"
  configMenuText $w.menu.file 1 GraphFileGrey $::language
  $w.menu.file add separator
  $w.menu.file add command -label GraphFileClose -command "destroy $w"
  configMenuText $w.menu.file 3 GraphFileClose $::language  
  wm title $w $::tr(TitleFilterGraph)
  set absfilterGraph 1
  bind $w <Destroy> {set absfilterGraph 0}
  
  frame $w.b
  pack $w.b -side bottom -fill x
  label $w.b.status -width 1 -font font_Small -anchor w
  frame $w.sep -height 2 -borderwidth 2 -relief sunken -background white
  pack $w.sep -side bottom -fill x -pady 4
  
  canvas $w.c -width 600 -height 400
  $w.c create text 25 5 -tag title -justify center -width 1 \
      -font font_Small -anchor n
  $w.c create text 250 295 -tag type -justify center -width 1 \
      -font font_Small -anchor s
  pack $w.c -side top -expand yes -fill both
  ::utils::graph::create absfilter
  
  bind $w <F1> {helpWindow Graphs Filter}
  bind $w <Configure> {
    .afgraph.c itemconfigure title -width [expr {[winfo width .afgraph.c] - 50}]
    .afgraph.c coords title [expr {[winfo width .afgraph.c] / 2}] 10
    .afgraph.c itemconfigure type -width [expr {[winfo width .afgraph.c] - 50}]
    .afgraph.c coords type [expr {[winfo width .afgraph.c] / 2}] \
        [expr {[winfo height .afgraph.c] - 10}]
    ::utils::graph::configure absfilter -height [expr {[winfo height .afgraph.c] - 80}]
    ::utils::graph::configure absfilter -width [expr {[winfo width .afgraph.c] - 60}]
    ::utils::graph::redraw absfilter
  }
  bind $w.c <1> tools::graphs::absfilter::Switch
  bind $w.c <$::MB3> ::tools::graphs::absfilter::Refresh
  foreach {name text} {decade Decade year Year elo Rating move moves} {
    radiobutton $w.b.$name -padx 4 -pady 3 -text $::tr($text) \
        -variable ::tools::graphs::absfilter::type -value $name \
        -command ::tools::graphs::absfilter::Refresh
    pack $w.b.$name -side left -padx 1 -pady 2
  }
  button $w.b.setup -image tb_graph -command configureFilterGraph
  dialogbutton $w.b.close -text $::tr(Close) -command "destroy $w"
  pack $w.b.decade $w.b.elo -side left -padx 1 -pady 2
  pack $w.b.close $w.b.setup -side right -padx 2 -pady 2
  pack $w.b.status -side left -padx 2 -pady 2 -fill x -expand yes
  
  ::tools::graphs::absfilter::Refresh
}

proc tools::graphs::absfilter::Switch {} {
  variable type
  switch $type {
    "decade" { set type "year" }
    "year" { set type "elo" }
    "elo" { set type "move" }
    "move" { set type "decade" }
  }
  ::tools::graphs::absfilter::Refresh
}

proc ::tools::graphs::absfilter::Refresh {} {
  global FilterMaxMoves FilterMinMoves FilterStepMoves FilterMaxElo FilterMinElo FilterStepElo FilterMaxYear FilterMinYear FilterStepYear FilterGuessELO
  
  set w .afgraph
  if {! [winfo exists $w]} { return }
  
  $w.c itemconfigure title -width [expr {[winfo width $w.c] - 50}]
  $w.c coords title [expr {[winfo width $w.c] / 2}] 10
  $w.c itemconfigure type -width [expr {[winfo width $w.c] - 50}]
  $w.c coords type [expr {[winfo width $w.c] / 2}] \
      [expr {[winfo height $w.c] - 10}]
  set height [expr {[winfo height $w.c] - 80}]
  set width [expr {[winfo width $w.c] - 60}]
  set vlines {}
  if {$::tools::graphs::absfilter::type == "elo"} {
    # Vertical lines for Elo-range graph:
    for {set i 1} {$i <=  $FilterMaxElo- $FilterMinElo} { incr i } {
      lappend vlines [list gray80 1 at $i.5]
    }
  } elseif {$::tools::graphs::absfilter::type == "year"} {
    # Vertical lines for Year-range graph:
    for {set i 1} {$i <= $FilterMaxYear- $FilterMinYear} {incr i } {
      lappend vlines [list gray80 1 at $i.5]
    }
  } elseif {$::tools::graphs::absfilter::type == "decade"} {
    # Vertical lines for Decade graph: most are gray, but those
    # just before 1950s and 2000s are blue to make them stand out.
    for {set i 1} {$i < 10} {incr i} {
      set vlineColor gray80
      if {$i == 4  ||  $i == 9} { set vlineColor steelBlue }
      lappend vlines [list $vlineColor 1 at $i.5]
    }
  }
  
  ::utils::graph::create absfilter -width $width -height $height -xtop 40 -ytop 35 \
      -ytick 1 -xtick 1 -font font_Small -canvas $w.c -textcolor black \
      -vline $vlines -background lightYellow -tickcolor black -xmin 0 -xmax 1
  ::utils::graph::redraw absfilter
  busyCursor .
  update
  
  set count 0
  set dlist {}
  set xlabels {}
  set max 0.0
  
  # Generate plot values and labels:
  if {$::tools::graphs::absfilter::type == "decade"} {
    set ftype date
    set typeName $::tr(Decade)
    set rlist [list 0000 1919 -1919  1920 1929 20-29 \
        1930 1939 30-39  1940 1949 40-49  1950 1959 50-59 \
        1960 1969 60-69  1970 1979 70-79  1980 1989 80-89 \
        1990 1999 90-99  2000 2009 2000+]
  } elseif {$::tools::graphs::absfilter::type == "year"} {
    set ftype date
    set typeName $::tr(Year)
    set endYear $FilterMaxYear
    set startYear $FilterMinYear
    set rlist {}
    for {set i $startYear} {$i <= $endYear} {set i [expr {$i + $FilterStepYear}]} {
      lappend rlist $i
      lappend rlist [expr {$i+$FilterStepYear-1}]
      lappend rlist [expr {$i+$FilterStepYear/2}]
    }
  } elseif {$::tools::graphs::absfilter::type == "elo"} {
    set ftype elo
    set typeName $::tr(Rating)
    #    set rlist [list 0 1999 0-1999  2000 2099 20xx  2100 2199 21xx  \
    2200 2299 22xx  2300 2399 23xx  2400 2499 24xx  \
        2500 2599 25xx  2600 2699 26xx  2700 3999 2700+]
    set endElo $FilterMaxElo
    set startElo $FilterMinElo
    set rlist {}
    for {set i $startElo} {$i <= $endElo} {set i [expr {$i + $FilterStepElo}]} {
      lappend rlist $i
      lappend rlist [expr {$i+$FilterStepElo-1}]
      # shorten gap between 0 and "useful" ratings 1800
      set j $i
      if { $i < 100 } { set i [expr { 1800 - $FilterStepElo}] }
      lappend rlist [concat $j-[expr {$i+$FilterStepElo-1}]]
    }
  } else {
    set ftype move
    set typeName $::tr(moves)
    set startMove $FilterMinMoves
    set endMove  $FilterMaxMoves
    set rlist {}
    for {set i $startMove} {$i <= $endMove} {set i [expr {$i + $FilterStepMoves}]} {
      lappend rlist [expr {2*$i}]
      lappend rlist [expr {2*($i+$FilterStepMoves)-1}]
      if { $i % 5 == 0 } {
        lappend rlist $i
      } else {
        lappend rlist ""
      }
    }
  }
  
  set mean 0
  foreach {start end label} $rlist {
    if {$ftype == "date"} { append end ".12.31" }
    set r [sc_filter freq [sc_base current] dbfilter $ftype $start $end $FilterGuessELO]
    set absfilter [lindex $r 0]
    set all [lindex $r 1]
    set freq $absfilter
    incr count
    set mean [expr { $mean + $absfilter }]
    lappend dlist $count
    lappend dlist $freq
    if {$freq > $max} { set max $freq }
    lappend xlabels [list $count $label]
  }
  
  # Find a suitable spacing of y-axis labels:
  set ytick 1
  if {$max >=  10} { set ytick   1 }
  if {$max >=  25} { set ytick   5 }
  #  if {$max >=  50} { set ytick   5 }
  if {$max >= 100} { set ytick  10 }
  if {$max >= 250} { set ytick  25 }
  if {$max >= 500} { set ytick  50 }
  if {$max >= 1000} { set ytick 100 }
  if {$max >= 2500} { set ytick 250 }
  if {$max >= 5000} { set ytick 500 }
  if {$max >= 10000} { set ytick  1000 }
  if {$max >= 25000} { set ytick  2500 }
  if {$max >= 50000} { set ytick  5000 }
  if {$max >= 100000} { set ytick 10000 }
  if {$max >= 250000} { set ytick 25000 }
  if {$max >= 500000} { set ytick 50000 }
  if {$max >= 1000000} { set ytick 100000 }
  set hlines [list [list gray80 1 each $ytick]]
  # Add mean horizontal line:
  set absfilter [sc_filter count]
  set all [sc_base numGames]
  if { $count != 0 } {set mean [expr { $mean / $count }] }
  if {$all > 0} {
    if {$mean > $max} { set max $mean }
    lappend hlines [list red 1 at $mean]
  }
  
  # Create fake dataset with bounds so we see 0.0::
  #::utils::graph::data decade bounds -points 0 -lines 0 -bars 0 -coords {1 0.0 1 0.0}
  
  ::utils::graph::data absfilter data -color darkBlue -points 1 -lines 1 -bars 0 \
      -linewidth 2 -radius 4 -outline darkBlue -coords $dlist
  ::utils::graph::configure absfilter -xlabels $xlabels -ytick $ytick \
      -hline $hlines -ymin 0 -xmin 0.5 -xmax [expr {$count + 0.5}]
  ::utils::graph::redraw absfilter
  $w.c itemconfigure title -text $::tr(GraphAbsFilterTitle)
  $w.c itemconfigure type -text $typeName
  $w.b.status configure -text "  $::tr(Filter): [filterText]"
  unbusyCursor .
  update
}
### End of file: graph.tcl
### tools/tablebase.tcl:
###   Tablebase display routines for Scid.

set ::tb::isOpen 0
set tbTraining 0
set tbBoard 0
set tbStatus ""

if { [catch {package require http} ] } {
  set ::tb::online_available 0
} else  {
  set ::tb::online_available 1
}

namespace eval ::tb {
  set url "http://k4it.de/egtb/fetch.php"
  # proxy configuration
  set proxyhost "127.0.0.1"
  set proxyport 3128
}

set tbInfo(section) 21
set tbInfo(material) "kpk"
set tbInfo(sections) [list 21 22 31 32 41]
foreach i $tbInfo(sections) { set tbInfo($i) [list] }

set tbInfo(21) [list kqk krk kbk knk kpk]

set tbInfo(22) [list \
    kqkq kqkr kqkb kqkn kqkp \
    -    krkr krkb krkn krkp \
    -    -    kbkb kbkn kbkp \
    -    -    -    knkn knkp \
    -    -    -    -    kpkp ]

set tbInfo(31) [list \
    kqqk kqrk kqbk kqnk kqpk \
    -    krrk krbk krnk krpk \
    -    -    kbbk kbnk kbpk \
    -    -    -    knnk knpk \
    -    -    -    -    kppk ]

set tbInfo(32) [list \
    kqqkq kqqkr kqqkb kqqkn kqqkp \
    kqrkq kqrkr kqrkb kqrkn kqrkp \
    kqbkq kqbkr kqbkb kqbkn kqbkp \
    kqnkq kqnkr kqnkb kqnkn kqnkp \
    kqpkq kqpkr kqpkb kqpkn kqpkp \
    -     -     -     -     -     \
    krrkq krrkr krrkb krrkn krrkp \
    krbkq krbkr krbkb krbkn krbkp \
    krnkq krnkr krnkb krnkn krnkp \
    krpkq krpkr krpkb krpkn krpkp \
    -     -     -     -     -     \
    kbbkq kbbkr kbbkb kbbkn kbbkp \
    kbnkq kbnkr kbnkb kbnkn kbnkp \
    kbpkq kbpkr kbpkb kbpkn kbpkp \
    -     -     -     -     -     \
    knnkq knnkr knnkb knnkn knnkp \
    knpkq knpkr knpkb knpkn knpkp \
    kppkq kppkr kppkb kppkn kppkp ]

set tbInfo(41) [list \
    kqqqk kqqrk kqqbk kqqnk kqqpk \
    -     kqrrk kqrbk kqrnk kqrpk \
    -     -     kqbbk kqbnk kqbpk \
    -     -     -     kqnnk kqnpk \
    -     -     -     -     kqppk \
    -     krrrk krrbk krrnk krrpk \
    -     -     krbbk krbnk krbpk \
    -     -     -     krnnk krnpk \
    -     -     -     -     krppk \
    -     -     kbbbk kbbnk kbbpk \
    -     -     -     kbnnk kbnpk \
    -     -     -     -     kbppk \
    -     -     -     knnnk knnpk \
    -     -     -     -     knppk \
    -     -     -     -     kpppk ]

set tbInfo(42) [list \
    kqqqkq kqqqkr kqqqkb kqqqkn kqqqkp \
    kqqrkq kqqrkr kqqrkb kqqrkn kqqrkp \
    kqqbkq kqqbkr kqqbkb kqqbkn kqqbkp \
    kqqnkq kqqnkr kqqnkb kqqnkn kqqnkp \
    kqqpkq kqqpkr kqqpkb kqqpkn kqqpkp \
    kqrrkq kqrrkr kqrrkb kqrrkn kqrrkp \
    kqrbkq kqrbkr kqrbkb kqrbkn kqrbkp \
    kqrnkq kqrnkr kqrnkb kqrnkn kqrnkp \
    kqrpkq kqrpkr kqrpkb kqrpkn kqrpkp \
    kqbbkq kqbbkr kqbbkb kqbbkn kqbbkp \
    kqbnkq kqbnkr kqbnkb kqbnkn kqbnkp \
    kqbpkq kqbpkr kqbpkb kqbpkn kqbpkp \
    kqnnkq kqnnkr kqnnkb kqnnkn kqnnkp \
    kqnpkq kqnpkr kqnpkb kqnpkn kqnpkp \
    kqppkq kqppkr kqppkb kqppkn kqppkp \
    krrrkq krrrkr krrrkb krrrkn krrrkp \
    krrbkq krrbkr krrbkb krrbkn krrbkp \
    krrnkq krrnkr krrnkb krrnkn krrnkp \
    krrpkq krrpkr krrpkb krrpkn krrpkp \
    krbbkq krbbkr krbbkb krbbkn krbbkp \
    krbnkq krbnkr krbnkb krbnkn krbnkp \
    krbpkq krbpkr krbpkb krbpkn krbpkp \
    krnnkq krnnkr krnnkb krnnkn krnnkp \
    krnpkq krnpkr krnpkb krnpkn krnpkp \
    krppkq krppkr krppkb krppkn krppkp \
    kbbbkq kbbbkr kbbbkb kbbbkn kbbbkp \
    kbbnkq kbbnkr kbbnkb kbbnkn kbbnkp \
    kbbpkq kbbpkr kbbpkb kbbpkn kbbpkp \
    kbnnkq kbnnkr kbnnkb kbnnkn kbnnkp \
    kbnpkq kbnpkr kbnpkb kbnpkn kbnpkp \
    kbppkq kbppkr kbppkb kbppkn kbppkp \
    knnnkq knnnkr knnnkb knnnkn knnnkp \
    knnpkq knnpkr knnpkb knnpkn knnpkp \
    knppkq knppkr knppkb knppkn knppkp \
    kpppkq kpppkr kpppkb kpppkn kpppkp ]

# ::tb::isopen
#   Returns boolean value of whether the tablebase window is open.
#
proc ::tb::isopen {} {
  return [winfo exists .tbWin]
}

# ::tb::Open
#   Open the tablebase window.
#
proc ::tb::Open {} {
  global tbInfo
  set w .tbWin
  if {[winfo exists $w]} { return }
  ::createToplevel $w
  setWinLocation $w
  ::setTitle $w "Scid: [tr WindowsTB]"
  pack [ttk::frame $w.b] -side bottom -fill x
  pack [ttk::frame $w.info] -side left -fill y
  addVerticalRule $w
  pack [ttk::frame $w.pos] -side right -fill both -expand yes
  
  # Left frame: tablebase browser and summary info
  
  set f $w.info
  pack [ttk::frame $f.sec] -side top -fill x
  foreach i $tbInfo(sections) {
    set name "[string index $i 0]-[string index $i 1]"
    ttk::radiobutton $f.sec.b$i -text " $name " -variable tbInfo(section) -value $i -command "::tb::section $i" ;# -indicatoron 0
    pack $f.sec.b$i -side left -pady 1 -padx 1
  }
  autoscrollframe $f.list text $f.list.text \
      -width 35 -height 7 -font font_Fixed -wrap none \
      -foreground black -background white -cursor top_left_arrow
  pack $f.list -side top
  pack [ttk::frame $f.separator -height 2]
  # addHorizontalRule $f
  
  autoscrollframe $f.data text $f.data.text \
      -width 35 -height 0 -font font_Fixed -wrap none \
      -foreground black -background white -cursor top_left_arrow
  pack $f.data -side top -fill y -expand yes
  
  $f.list.text tag configure avail -foreground blue
  $f.list.text tag configure unavail -foreground gray40
  $f.data.text tag configure fen -foreground blue
  
  # Right frame: tablebase results for current position
  
  set f $w.pos
  autoscrollframe $f text $f.text -width 30 -height 20 -font font_Small \
      -wrap word -foreground black -background white -setgrid 1
  $f.text tag configure indent -lmargin2 [font measure font_Fixed  "        "]
  
  ::board::new $f.board 25
  $f.board configure -relief solid -borderwidth 1
  for {set i 0} {$i < 64} {incr i} {
    ::board::bind $f.board $i <Button-1> [list ::tb::resultsBoard $i]
  }
  if {$::tbBoard} {
    grid $f.board -row 0 -column 2 -rowspan 2
  }
  
  ttk::checkbutton $w.b.training -text $::tr(Training) -variable tbTraining -command ::tb::training ;# -padx 4 -pady 5
  # button $w.b.online -text Online -command ::tb::updateOnline -relief raised -padx 4 -pady 5
  if { !$::tb::online_available } {
    catch { $w.b.online configure -state disabled }
  }
  ttk::button $w.b.random -text "Random" -command ::tb::random
  ttk::button $w.b.showboard -image tb_coords -command ::tb::showBoard
  dialogbutton $w.b.help -text $::tr(Help) -command { helpWindow TB }
  dialogbutton $w.b.close -text $::tr(Close) -command "destroy $w"
  ttk::label $w.b.status -width 1 -textvar tbStatus -font font_Small -relief flat -anchor w ;# -height 0
  packbuttons right $w.b.close $w.b.help
  pack $w.b.training -side left -padx 2 -pady 2
  catch { pack $w.b.online -side left -padx 2 -pady 2 }
  pack $w.b.random $w.b.showboard -side left -padx 2 -pady 2
  pack $w.b.status -side left -fill x -expand yes
  bind $w <Destroy> { set ::tb::isOpen 0; set tbTraining 0 }
  bind $w <F1> { helpWindow TB }
  bind $w <Configure> "recordWinSize $w"
  wm minsize $w 15 20
  ::createToplevelFinalize $w
  set ::tbTraining 0
  ::tb::section
  ::tb::summary
  ::tb::results
}

# ::tb::showBoard
#   Toggles the results board.
#
proc ::tb::showBoard {} {
  global tbBoard
  set f .tbWin.pos
  if {$tbBoard} {
    set tbBoard 0
    grid forget $f.board
  } else {
    set tbBoard 1
    grid $f.board -row 0 -column 2 -rowspan 2
  }
}

# ::tb::resultsBoard
#   Updates theresultsBoard board for a particular square.
#
proc ::tb::resultsBoard {sq} {
  set f .tbWin.pos
  set board [sc_pos board]
  # If selected square is empty, take no action:
  if {[string index $board $sq] == "."} { return }
  # Clear any previous results:
  ::board::clearText $f.board
  # Highlight the selected square:
  ::board::colorSquare $f.board $sq $::highcolor
  # Retrieve tablebase scores:
  busyCursor .
  set scores [sc_pos probe board $sq]
  set text(X) X; set color(X) red; set shadow(X) white
  set text(=) =; set color(=) blue; set shadow(=) white
  set text(?) "?"; set color(?) red; set shadow(?) white
  set text(+) "#"; set text(-) "#"
  if {[sc_pos side] == "white"} {
    set color(+) white; set color(-) black
    set shadow(+) black; set shadow(-) white
  } else {
    set color(+) black; set color(-) white
    set shadow(+) white; set shadow(-) black
  }
  for {set i 0} {$i < 64} {incr i} {
    # Skip squares that have a piece.
    if {[string index $board $i] != "."} { continue }
    # Draw the score on this square:
    set score [string index $scores $i]
    catch {::board::drawText $f.board $i $text($score) $color($score) 0 $shadow($score)}
  }
  unbusyCursor .
}

# ::tb::name
#   Converts a material string like "kqkr" or "KQKR" to "KQ-KR".
#
proc ::tb::name {s} {
  set s [string toupper $s]
  set idx [string last "K" $s]
  set new [string range $s 0 [expr $idx - 1]]
  append new "-"
  append new [string range $s $idx end]
  return $new
}

# ::tb::section
#   Updates the tablebase list for the specified section.
#
proc ::tb::section {{sec 0}} {
  global tbInfo
  set w .tbWin
  if {! [winfo exists $w]} { return }
  if {$sec == 0} { set sec $tbInfo(section)}
  set tbInfo(section) $sec
  if {! [info exists tbInfo($sec)]} { return }
  set t $w.info.list.text
  $t configure -state normal
  $t delete 1.0 end
  $t configure -height 10
  set count 0
  set linecount 1
  foreach tb $tbInfo($sec) {
    if {$tb == "-"} {
      $t insert end [format "%-7s" ""]
    } else {
      set avail [sc_info tb available $tb]
      if {$avail} {
        set taglist [list avail $tb]
      } else {
        set taglist [list unavail $tb]
      }
      $t insert end [format "%-6s" [::tb::name $tb]] $taglist
      $t insert end " "
      # Bind tags for enter/leave/buttonpress on this tb:
      $t tag bind $tb <Any-Enter> \
          [list $t tag configure $tb -foreground yellow -background darkBlue]
      $t tag bind $tb <Any-Leave> \
          [list $t tag configure $tb -foreground {} -background {}]
      $t tag bind $tb <ButtonPress-1> [list ::tb::summary $tb]
    }
    incr count
    if {$count == 5} { set count 0; incr linecount; $t insert end "\n" }
  }
  if {$linecount > 10} { set linecount 10 }
  $t configure -height $linecount
  $t configure -state disabled
}

# ::tb::summary
#   Shows the tablebase information for the specified tablebase.
#
proc ::tb::summary {{material ""}} {
  global tbInfo tbs
  set w .tbWin
  if {! [winfo exists $w]} { return }
  
  if {$material == ""} { set material $tbInfo(material) }
  set tbInfo(material) $material
  set t $w.info.data.text
  $t configure -state normal
  $t delete 1.0 end
  $t insert end [format "%-6s" [::tb::name $material]]
  if {! [info exists tbs($material)]} {
    $t insert end "\nNo summary for this tablebase."
    $t configure -state disabled
    return
  }
  set data $tbs($material)
  
  $t insert end [format "    %5u games per million\n\n" [lindex $data 0]]
  
  # Longest-mate and result-percentage stats:
  
  $t insert end "Side    Longest    %     %     %\n"
  $t insert end "to move   mate    Win  Draw  Loss\n"
  $t insert end "---------------------------------\n"
  
  # Stats for White:
  $t insert end "White     "
  set len [lindex $data 1]
  set fen [lindex $data 2]
  if {$len == "0"} { set len "-" }
  if {[string length $fen] > 2} {
    append fen " w"
    $t insert end [format "%3s" $len] [list fen $fen]
    $t tag bind $fen <Any-Enter> \
        [list $t tag configure $fen -foreground yellow -background darkBlue]
    $t tag bind $fen <Any-Leave> \
        [list $t tag configure $fen -foreground {} -background {}]
    $t tag bind $fen <ButtonPress-1> [list ::tb::setFEN $fen]
  } else {
    $t insert end [format "%3s" $len]
  }
  $t insert end "  "
  $t insert end [format " %5s" [lindex $data 5]]
  $t insert end [format " %5s" [lindex $data 6]]
  $t insert end [format " %5s" [lindex $data 7]]
  $t insert end "\n"
  
  # Stats for Black:
  $t insert end "Black     "
  set len [lindex $data 3]
  set fen [lindex $data 4]
  if {$len == "0"} { set len "-" }
  if {[string length $fen] > 2} {
    append fen " b"
    $t insert end [format "%3s" $len] [list fen $fen]
    $t tag bind $fen <Any-Enter> \
        [list $t tag configure $fen -foreground yellow -background darkBlue]
    $t tag bind $fen <Any-Leave> \
        [list $t tag configure $fen -foreground {} -background {}]
    $t tag bind $fen <ButtonPress-1> [list ::tb::setFEN $fen]
  } else {
    $t insert end [format "%3s" $len]
  }
  $t insert end "  "
  $t insert end [format " %5s" [lindex $data 8]]
  $t insert end [format " %5s" [lindex $data 9]]
  $t insert end [format " %5s" [lindex $data 10]]
  $t insert end "\n\n"
  
  set mzugs [lindex $data 11]
  $t insert end "Mutual zugzwangs: "
  if {$mzugs >= 0} { $t insert end "$mzugs\n" } else { $t insert end "?\n" }
  if {$mzugs <= 0} {
    $t configure -state disabled
    return
  }
  
  # Extra Zugzwang info:
  set nBtmLoses [lindex $data 12]
  set nWtmLoses [lindex $data 14]
  set nBothLose [lindex $data 16]
  set zugnames [list " White draws, Black loses: " \
      " Black draws, White loses: " \
      " Whoever moves loses:      "]
  if {$nBtmLoses > 0} {
    $t insert end [lindex $zugnames 0]
    $t insert end [format "%5d\n" $nBtmLoses]
  }
  if {$nWtmLoses > 0} {
    $t insert end [lindex $zugnames 1]
    $t insert end [format "%5d\n" $nWtmLoses]
  }
  if {$nBothLose > 0} {
    $t insert end [lindex $zugnames 2]
    $t insert end [format "%5d\n" $nBothLose]
  }
  
  # Selected zugzwang positions:
  set btmFens [lindex $data 13]
  set wtmFens [lindex $data 15]
  set bothFens [lindex $data 17]
  set nBtmFens [llength $btmFens]
  set nWtmFens [llength $wtmFens]
  set nBothFens [llength $bothFens]
  set nTotalFens [expr $nBtmFens + $nWtmFens + $nBothFens]
  if {$nTotalFens == 0} {
    $t configure -state disabled
    return
  }
  
  # Print the lists of selected zugzwang positions:
  $t insert end "\nSelected zugzwang positions:"
  foreach n [list $nBtmFens $nWtmFens $nBothFens] \
      fenlist [list $btmFens $wtmFens $bothFens] \
      name $zugnames tomove [list b w w] {
        if {$n == 0} { continue }
        $t insert end "\n [string trim $name]"
        set count 0
        for {set count 0} {$count < $n} {incr count} {
          set fen [lindex $fenlist $count]
          if {[expr $count % 10] == 0} {
            $t insert end "\n  "
          }
          $t insert end " "
          append fen " $tomove"
          $t insert end [format "%2d" [expr $count + 1]] [list fen $fen]
          $t tag bind $fen <Any-Enter> \
          [list $t tag configure $fen -foreground yellow -background darkBlue]
          $t tag bind $fen <Any-Leave> \
          [list $t tag configure $fen -foreground {} -background {}]
          $t tag bind $fen <ButtonPress-1> [list ::tb::setFEN $fen]
        }
      }
  
  $t configure -state disabled
}

# ::tb::results
#   Called when the main window board changes, to display tablebase
#   results for all moves from the current position.
#
proc ::tb::results {} {
  global tbTraining
  set w .tbWin
  if {! [winfo exists $w]} { return }
  
  # Reset results board:
  ::board::clearText $w.pos.board
  ::board::update $w.pos.board [sc_pos board]
  
  # Update results panel:
  set t $w.pos.text
  $t delete 1.0 end
  if {$tbTraining} {
    $t insert end "\n (Training mode; results are hidden)"
  } else {
    $t insert end [sc_pos probe report] indent
  }
}

################################################################################
#
################################################################################
proc ::tb::updateOnline {} {
  global tbTraining
  set w .tbWin
  if {! [winfo exists $w]} { return }
  
  # proxy configuration - needs UI
  # ::http::config -proxyhost $::tb::proxyhost -proxyport $::tb::proxyport
  
  set t $w.pos.text
  if { ! $tbTraining } {
    set query [ ::http::formatQuery hook null action egtb fen [sc_pos fen] ]
    ::http::geturl $::tb::url -timeout 5000 -query $query -command { ::tb::httpCallback }
  }
}
################################################################################
#
################################################################################
proc ::tb::httpCallback { token } {
  
  upvar #0 $token state
  
  set w .tbWin
  if {! [winfo exists $w]} { return }
  set t $w.pos.text
  
  # delete previous online output
  foreach tag {tagonline} {
    while {1} {
      set del [$t tag nextrange $tag 1.0]
      if {$del == ""} {break}
      catch {$t delete [lindex $del 0] [lindex $del 1]}
    }
  }
  
  if {$state(status) != "ok"} {
    $t insert end $state(status) tagonline
    return
  }
  
  set b $state(body)
  set result ""
  
  if {[sc_pos side] == "black"} {
    set tmp ""
    set found 0
    foreach line [split $b "\n" ] {
      if {$line == "NEXTCOLOR"} {
        set found 1
        continue
      }
      if {$found} {
        append tmp "$line\n"
      }
    }
    set b $tmp
  }
  
  foreach line [split $b "\n" ] {
    if {$line == "NEXTCOLOR"} {
      break
    }
    if { $line == "No information available" } {
      append result "$line\n"
    }
    if {[string match "hook|null|value|*" $line]} {
      append result "Online : [string range $line 16 end ]\n"
      continue
    }
    if {[scan $line "%d-%d:%s" sq1 sq2 tmp] == 3} {
      set p1 [ string toupper [string index [sc_pos board] $sq1 ] ]
      set p2 [string index [sc_pos board] $sq2 ]
      set take ""
      if {$p2 != "."} {
        set take "x"
      }
      append result "$p1[::board::san $sq1]$take[::board::san $sq2] [string range $line [string first : $line] end]\n"
    }
  }
  ::http::cleanup state
  $t insert end $result tagonline
}
################################################################################
#
################################################################################

# ::tb::random
#   Sets up a random position with the material of the tablebase
#   currently displayed in the info frame.
#
proc ::tb::random {} {
  global tbInfo
  if {[catch {sc_game startBoard "random:$tbInfo(material)"} err]} {
    tk_messageBox -title "Scid" -icon warning -type ok -message $err
    return
  }
  # The material is valid, so clear the game and regenerate a
  # random starting position:
  sc_game new
  sc_game startBoard "random:$tbInfo(material)"
  updateBoard -pgn
}

# ::tb::setFEN
#   Called when an item in the Tablebase info browser with an
#   associated FEN position is selected with the left mouse button,
#   causing the position to be set in the main window.
#
proc ::tb::setFEN {fen} {
  if {[catch {sc_game startBoard $fen} err]} {
    tk_messageBox -title "Scid" -icon info -type ok -message $err
    return
  }
  # The FEN is valid, so clear the game and reset the FEN:
  sc_game new
  sc_game startBoard $fen
  updateBoard -pgn
}

# ::tb::training
#   Toggle tablebase training mode.
#
proc ::tb::training {} {
  global tbTraining tbStatus gameInfo
  set w .tbWin
  set tbStatus ""
  if {$tbTraining} {
    set gameInfo(showTB_old) $gameInfo(showTB)
    set gameInfo(showTB) 0
  } else {
    if {$gameInfo(showTB) == 0} { set gameInfo(showTB) $gameInfo(showTB_old) }
  }
  updateBoard -pgn
  ::tb::results
}

# ::tb::move
#   Finds and executes the best move in the current position,
#   if one can be determined from the tablebases.
#
proc ::tb::move {} {
  global tbTraining tbStatus
  if {! $tbTraining} { return }
  set moves [split [sc_pos probe optimal]]
  set len [llength $moves]
  if {$len == 0} {
    set tbStatus "No optimal move was found."
    return
  }
  set i [expr int(rand() * $len)]
  set move [lindex $moves $i]
  if {[catch {sc_move addSan $move}]} {
    set tbStatus "Error playing $move."
  } else {
    set tbStatus "Played $move."
  }
  updateBoard -pgn
}


# tbs:
#   Summary data about tablebases.
#   Each list has the following elements:
#     (0) Frequency (per million games),
#     (1) Longest-wtm-mate length, (2) Longest-wtm-mate FEN,
#     (3) Longest-btm-mate length, (4) Longest-btm-mate FEN,
#     (5) wtm-win-%, (6) wtm-draw-%, (7) wtm-loss-%,
#     (8) btm-win-%, (9) btm-draw-%, (10) btm-loss-%,
#     (11) number of mutual zugzwangs (-1 if unknown).
#  The longest-mate FENs have a board field only; no side to move, etc.
#
#   There are three types of mutual zugzwang:
#     wtm draws / btm loses, wtm loses / btm draws, wtm loses / btm loses.
#   The first two are "half-point" zugzwangs, the last is "full-point".
#
#   If the number of mutual zugzwangs is known and nonzero,
#   six more items should follow in the list:
#     (12) number of wtm-draws-btm-loses zugzwangs,
#     (13) list of selected wtm-draws-btm-loses zugzwang FENs,
#     (14) number of wtm-loses-btm-draws zugzwangs,
#     (15) list of selected wtm-loses-btm-draws zugzwang FENs,
#     (16) number of whoever-moves-loses (full-point) zugzwangs,
#     (17) list of selected whoever-moves-loses zugzwang FENs.
#   These zugzwang FENs board field only; no side to move, etc.

set tbs(kqk) {
  257 10 {7K/6Q1/8/8/2k5/8/8/8} 0 -
  100.0 0.0 0.0 0.0 10.3 89.7
  0
}

set tbs(krk) {
  542 16 {8/8/2R5/3k4/8/8/8/1K6} 0 -
  100.0 0.0 0.0 0.0 9.9 90.1
  0
}

set tbs(kbk) {
  194 0 - 0 -
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(knk) {
  224 0 - 0 -
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(kpk) {
  2352 28 {8/8/8/1k6/8/8/K5P1/8} 0 -
  76.5 23.5 0.0 0.0 41.9 58.1
  80 80 {} 0 {} 0 {}
}

set tbs(kqkq) {
  222 13 {8/8/8/8/8/8/8/qk1K2Q1} 13 {8/8/8/8/8/8/8/QK1k2q1}
  41.7 57.8 0.5 41.7 57.8 0.5
  0
}

set tbs(kqkr) {
  400 35 {K3r3/8/5k2/Q7/8/8/8/8} 19 {k7/5r2/K7/8/8/8/1Q6/8}
  99.0 0.8 0.2 28.7 5.8 65.5
  0
}

set tbs(kqkb) {
  25 17 {K7/8/8/3k4/4b3/8/8/7Q} 0 -
  99.7 0.3 0.0 0.0 23.1 76.9
  0
}

set tbs(kqkn) {
  74 21 {8/KQ6/2n5/2k5/8/8/8/8} 0 -
  99.3 0.7 0.0 0.0 19.5 80.5
  0
}

set tbs(kqkp) {
  937 28 {3KQ3/8/8/8/8/8/3kp3/8} 29 {8/1p4k1/7Q/8/7K/8/8/8}
  99.4 0.6 0.0 7.7 12.1 80.2
  0
}

set tbs(krkr) {
  423 19 {8/3R4/8/8/5k2/6r1/7K/8} 19 {1k6/2R5/3K4/8/8/8/6r1/8}
  29.1 70.2 0.7 29.1 70.2 0.7
  0
}

set tbs(krkb) {
  322 29 {k7/8/b7/8/K7/R7/8/8} 0 -
  35.2 64.8 0.0 0.0 96.8 3.2
  5  5 {
    4R3/8/8/8/8/b1K5/8/3k4 8/5R2/7b/8/8/2K5/8/1k6 8/8/1b6/5R2/8/3K4/8/2k5
    8/8/8/8/8/1k6/b7/R1K5 8/8/8/8/8/2K5/4k3/R2b4
  } 0 {} 0 {}
}

set tbs(krkn) {
  397 40 {8/8/6R1/2K5/n7/8/8/3k4} 1 {8/8/8/8/1n6/k7/8/KR6}
  48.4 51.6 0.0 0.0 89.0 11.0
  18 18 {
    8/2n5/8/4R3/3K1k2/8/8/8 8/8/5k2/4R3/3K4/2n5/8/8 8/8/8/1k6/2R5/3K4/4n3/8
    8/8/8/2n5/3K4/4R3/5k2/8 8/8/8/3k4/2R5/3K4/n7/8 8/8/8/3k4/4R3/3K4/6n1/8
    8/8/8/4k3/3R4/2K5/1n6/8 8/8/8/5k2/4R3/3K4/2n5/8 8/8/8/6n1/3K4/4R3/3k4/8
    8/8/8/8/2R5/1k1K4/4n3/8 8/8/8/8/3K1k2/4R3/8/2n5 8/8/8/8/3R4/2K1k3/1n6/8
    8/8/8/8/4R3/3K1k2/2n5/8 8/8/8/8/6n1/3K4/4R3/3k4 8/8/8/8/8/2KR4/8/2k2n2
    8/8/8/8/8/2RK4/8/n2k4 8/8/8/8/8/3KR3/8/3k2n1 8/8/8/n7/3K4/2R5/3k4/8
  } 0 {} 0 {}
}

set tbs(krkp) {
  2146 26 {2K5/8/7p/6k1/8/8/R7/8} 43 {8/8/8/8/5R2/2pk4/5K2/8}
  91.4 8.4 0.2 16.4 17.5 66.1
  12 12 {
    8/8/8/8/8/1k6/p7/R1K5   8/8/8/8/8/2k5/1p6/1R1K4 8/8/8/8/8/4k3/5p2/3K1R2
    8/3K4/8/3k4/3p4/8/8/3R4 8/1K6/8/1k6/1p6/8/8/1R6 8/2K5/8/2k5/2p5/8/8/2R5
    8/2K5/8/2k5/3p4/8/8/3R4 8/3K4/8/3k4/4p3/8/8/4R3 8/1K6/8/1k6/2p5/8/8/2R5
    8/2K5/8/2k5/1p6/8/8/1R6 8/3K4/8/3k4/2p5/8/8/2R5 8/K7/8/k7/1p6/8/8/1R6
  } 0 {} 0 {}
}

set tbs(kbkb) {
  49 1 {8/8/8/8/8/K7/7B/kb6} 1 {6BK/8/6k1/8/8/b7/8/8}
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(kbkn) {
  87 1 {knB5/8/1K6/8/8/8/8/8} 1 {K1k1n3/B7/8/8/8/8/8/8}
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(kbkp) {
  387 1 {7k/7p/5K2/8/8/8/1B6/8} 29 {8/1p4k1/7B/8/8/7K/8/8}
  0.0 94.8 5.2 23.6 76.4 0.0
  1 0 {} 1 {8/8/8/8/8/8/1pK5/kB6} 0 {}
}

set tbs(knkn) {
  68 1 {k7/n1K5/8/3N4/8/8/8/8} 1 {8/8/8/8/1n6/1k6/8/KN6}
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(knkp) {
  497 7 {8/8/8/8/pN6/8/2K5/k7} 29 {8/1p6/6kN/8/8/7K/8/8}
  0.0 87.1 12.9 32.6 67.4 0.0
  29 22 {} 7 {} 0 {}
}

set tbs(kpkp) {
  2810 33 {2K5/k7/7p/8/8/8/6P1/8} 33 {8/2p1K3/8/8/8/4P3/8/3k4}
  43.4 33.3 23.2 43.4 33.3 23.2
  121 106 {} 106 {} 15 {
    8/8/8/1Kp5/2Pk4/8/8/8 8/8/8/2Kp4/3Pk3/8/8/8 8/8/8/8/1Kp5/2Pk4/8/8
    8/8/8/8/1pK5/kP6/8/8  8/8/8/8/2Kp4/3Pk3/8/8 8/8/8/8/2pK4/1kP5/8/8
    8/8/8/8/3Kp3/4Pk2/8/8 8/8/8/8/8/1Kp5/2Pk4/8 8/8/8/8/8/1pK5/kP6/8
    8/8/8/8/8/2Kp4/3Pk3/8 8/8/8/8/8/2pK4/1kP5/8 8/8/8/8/8/3Kp3/4Pk2/8
    8/8/8/8/8/Kp6/1Pk5/8  8/8/8/8/Kp6/1Pk5/8/8  8/8/8/Kp6/1Pk5/8/8/8
  }
}

set tbs(kqqk) {
  13 4 {8/8/8/4k3/8/8/1K6/QQ6} 0 -
  100.0 0.0 0.0 0.0 2.1 97.9
  0
}

set tbs(kqrk) {
  18 6 {7Q/8/8/8/4k3/8/8/1R5K} 0 -
  100.0 0.0 0.0 0.0 1.1 98.9
  0
}

set tbs(kqbk) {
  36 8 {8/Q4B2/5k2/8/8/8/8/K7} 0 -
  100.0 0.0 0.0 0.0 9.4 90.6
  0
}

set tbs(kqnk) {
  41 9 {K7/N7/8/8/8/5k2/Q7/8} 0 -
  100.0 0.0 0.0 0.0 9.7 90.3
  0
}

set tbs(kqpk) {
  156 10 {8/8/8/2k5/8/8/4P1Q1/7K} 0 -
  100.0 0.0 0.0 0.0 2.8 97.2
  0
}

set tbs(krrk) {
  8 7 {4R3/3k4/8/8/5R1K/8/8/8} 0 -
  100.0 0.0 0.0 0.0 0.3 99.7
  0
}

set tbs(krbk) {
  46 16 {8/8/3R4/4k3/4B3/8/8/K7} 0 -
  100.0 0.0 0.0 0.0 8.8 91.2
  0
}

set tbs(krnk) {
  15 16 {K7/2R5/3k4/3N4/8/8/8/8} 0 -
  100.0 0.0 0.0 0.0 9.2 90.8
  0
}

set tbs(krpk) {
  333 16 {K7/8/3R4/4kP2/8/8/8/8} 0 -
  100.0 0.0 0.0 0.0 2.5 97.5
  0
}

set tbs(kbbk) {
  31 19 {K7/8/3B4/3k4/8/8/4B3/8} 0 -
  49.3 50.7 0.0 0.0 58.8 41.2
  0
}

set tbs(kbnk) {
  206 33 {7K/4B3/4k3/8/8/8/8/2N5} 0 -
  99.5 0.5 0.0 0.0 18.1 81.9
  0
}

set tbs(kbpk) {
  453 31 {8/3P4/KBk5/8/8/8/8/8} 0 -
  96.0 4.0 0.0 0.0 16.8 83.2
  6 6 {
    1B1K4/8/8/k7/8/P7/8/8 1B6/3K4/8/1k6/8/P7/8/8 1BK5/8/1k6/8/8/P7/8/8
    8/B1k5/K7/P7/8/8/8/8 kB6/8/1PK5/8/8/8/8/8 kB6/8/KP6/8/8/8/8/8
  } 0 {} 0 {}
}

set tbs(knnk) {
  20 1 {k7/3N4/K1N5/8/8/8/8/8} 0 -
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(knpk) {
  426 27 {1N6/8/8/8/8/2k3P1/8/2K5} 0 -
  96.3 3.7 0.0 0.0 18.5 81.5
  75 75 {} 0 {} 0 {}
}

set tbs(kppk) {
  563 32 {8/8/8/8/2k5/6P1/K5P1/8} 0 -
  98.4 1.6 0.0 0.0 7.9 92.1
  43 43 {} 0 {} 0 {}
}

set tbs(kqqkq) {
  51 30 {2K5/8/1k6/5q2/8/8/6Q1/7Q} 13 {7Q/7K/8/6Qk/8/8/7q/8}
  99.1 0.8 0.1 0.6 32.8 66.6
  0
}

set tbs(kqqkr) {
  0 35 {Kr6/8/8/8/8/3Q4/4Q3/2k5} 19 {6Q1/8/8/8/8/7K/2r4Q/7k}
  100.0 0.0 0.0 0.1 0.2 99.7
  0
}

set tbs(kqqkb) {
  0 15 {8/8/7Q/5k1K/7Q/5b2/8/8} 0 -
  100.0 0.0 0.0 0.0 0.1 99.9
  0
}

set tbs(kqqkn) {
  0 19 {5K2/3n4/4k3/2Q5/8/8/8/1Q6} 0 -
  100.0 0.0 0.0 0.0 0.1 99.9
  0
}

set tbs(kqqkp) {
  7 22 {8/8/8/3Q4/7Q/2k5/1p6/K7} 13 ?
  100.0 0.0 0.0 0.0 0.7 99.3
  0
}

set tbs(kqrkq) {
  36 67 {8/8/8/8/q7/6k1/8/KR5Q} 38 {8/8/q7/8/8/6R1/2K4Q/k7}
  97.0 2.8 0.2 24.4 21.2 54.4
  1 1 {8/8/8/8/1R6/k4q2/8/1K2Q3} 0 {} 0 {}
}

set tbs(kqrkr) {
  132 34 {1K2Q3/8/3k4/1r2R3/8/8/8/8} 20 {6rQ/8/8/8/8/7K/5R2/6k1}
  99.8 0.1 0.0 0.3 17.1 82.1
  0
}

set tbs(kqrkb) {
  12 29 {2k5/5b2/8/8/2K5/8/Q7/6R1} 0 -
  100.0 0.0 0.0 0.0 11.6 88.4
  0
}

set tbs(kqrkn) {
  2 40 ? 1 {8/8/8/8/1n6/k7/8/KR5Q}
  99.9 0.1 0.0 0.0 7.7 92.3
  0
}

set tbs(kqrkp) {
  25 40 ? 43 ?
  100.0 0.0 0.0 0.3 1.4 98.3
  0
}

set tbs(kqbkq) {
  28 33 {5q2/8/8/5B2/k1K4Q/8/8/8} 24 {6KQ/8/1B6/6k1/8/6q1/8/8}
  55.7 44.0 0.3 30.5 62.3 7.2
  25 25 {} 0 {} 0 {}
}

set tbs(kqbkr) {
  21 40 ? 30 ?
  99.3 0.6 0.0 0.7 27.5 71.8
  0
}

set tbs(kqbkb) {
  2 17 ? 2 ?
  99.7 0.3 0.0 0.0 19.8 80.2
  0
}

set tbs(kqbkn) {
  2 21 ? 1 ?
  99.5 0.5 0.0 0.0 16.7 83.3
  0
}

set tbs(kqbkp) {
  25 32 ? 24 ?
  100.0 0.0 0.0 1.0 14.1 84.9
  0
}

set tbs(kqnkq) {
  74 41 {8/7q/8/k7/2K5/2N5/8/4Q3} 24 {7K/8/1N6/Q5k1/8/8/6q1/8}
  50.1 49.6 0.3 33.5 62.2 4.3
  38 38 {} 0 {} 0 {}
}

set tbs(kqnkr) {
  12 38 ? 41 ?
  99.2 0.7 0.0 3.0 27.2 69.8
  0
}

set tbs(kqnkb) {
  7 17 ? 1 ?
  99.8 0.2 0.0 0.0 20.9 79.1
  0
}

set tbs(kqnkn) {
  13 21 ? 1 ?
  99.4 0.6 0.0 0.0 17.8 82.2
  0
}

set tbs(kqnkp) {
  46 30 ? 29 ?
  99.9 0.1 0.0 1.9 15.0 83.1
  0
}

set tbs(kqpkq) {
  1179 124 {4q3/K7/8/8/8/4P3/6Q1/k7} 29 {8/7q/3PK3/8/8/8/Q7/3k4}
  68.4 31.2 0.4 35.2 51.2 13.6
  640 640 {} 0 {} 0 {}
}

set tbs(kqpkr) {
  216 38 ? 33 ?
  99.6 0.3 0.1 19.7 6.1 74.1
  1 1 {k7/8/KQ1r4/P7/8/8/8/8} 0 {} 0 {}
}

set tbs(kqpkb) {
  16 28 ? 2 ?
  99.9 0.1 0.0 0.0 16.7 83.3
  0
}

set tbs(kqpkn) {
  41 30 ? 8 ?
  99.7 0.3 0.0 0.0 12.5 87.5
  0
}

set tbs(kqpkp) {
  622 105 {8/8/8/8/3P2Q1/8/1p6/K1k5} 34 ?
  100.0 0.0 0.0 3.3 7.3 89.4
  0
}

set tbs(krrkq) {
  8 29 {3R4/1R6/8/8/q7/7K/8/k7} 49 {7R/1q6/3K4/8/k7/8/2R5/8}
  58.2 36.8 5.1 52.0 37.0 11.0
  10 10 {
    6R1/8/8/8/6R1/7q/1K5k/8 6R1/8/8/8/8/6R1/7q/K6k  8/6R1/8/8/8/3K2R1/7q/7k
    8/6R1/8/8/8/6R1/7q/1K5k 8/8/1R6/8/8/1R1K4/q7/k7 8/8/6R1/8/8/6R1/7q/2K4k
    8/8/8/3R4/8/k7/2KR4/4q3 8/8/8/6R1/8/6R1/7q/3K3k 8/8/8/8/1R6/1R6/q7/k2K4
    8/8/8/8/8/2K5/2R1R3/kq6
  } 0 {} 0 {}
}

set tbs(krrkr) {
  38 31 {8/1R6/8/8/8/5r1K/4R3/k7} 20 {1k6/2R5/7r/3K3R/8/8/8/8}
  99.2 0.7 0.0 0.4 33.4 66.2
  0
}

set tbs(krrkb) {
  8 29 {8/8/8/2b5/8/4KR2/1k6/6R1} 0 -
  99.3 0.7 0.0 0.0 22.4 77.6
  1 1 {8/8/8/8/8/b1k5/1R6/1RK5} 0 {} 0 {}
}

set tbs(krrkn) {
  8 40 {4k3/6R1/8/7n/5K2/1R6/8/8} 1 {8/8/8/8/1n6/k7/8/KR1R4}
  99.7 0.3 0.0 0.0 15.0 85.0
  0
}

set tbs(krrkp) {
  3 33 ? 50 ?
  100.0 0.0 0.0 1.0 5.7 93.3
  0
}

set tbs(krbkq) {
  23 21 ? 70 ?
  38.7 48.0 13.4 71.2 25.6 3.2
  372 0 {} 372 {3Kn3/8/8/8/8/4r3/7Q/3k4} 0 {}
}

set tbs(krbkr) {
  649 65 {k7/7r/3K4/8/6B1/8/4R3/8} 30 {8/4R2K/8/5k2/8/8/7B/4r3}
  41.3 58.7 0.0 0.8 94.1 5.1
  17 17 {
    8/8/8/8/8/1R1K4/2B5/r1k5 8/8/8/8/8/2KB4/2R5/kr6   8/8/8/8/7B/4r3/5R2/2K1k3
    8/8/8/8/rB6/8/1R6/1K1k4  7k/6R1/7r/8/8/8/1B6/1K6  8/8/8/8/8/2K4B/6R1/3r1k2
    8/8/8/8/4R3/k7/2K1B3/4r3 8/8/8/8/8/2R3Br/k1K5/8   8/8/8/3B1r2/3K4/8/6R1/3k4
    8/8/8/8/8/R2K4/5B2/1r1k4 8/8/8/8/8/3K2R1/8/4k1Br  8/8/8/2B5/8/6r1/k1K4R/8
    8/5r2/8/8/1R4B1/8/3K4/k7 8/8/3B4/1r6/8/2K5/4R3/1k6 8/8/8/8/3KB2r/8/5R2/k7
    8/8/3B4/8/8/5r2/k1K1R3/8 5R2/8/8/8/8/3K4/5Br1/2k5
  } 0 {} 0 {}
}

set tbs(krbkb) {
  20 30 ? 2 ?
  98.2 1.8 0.0 0.0 31.1 68.9
  0
}

set tbs(krbkn) {
  5 40 ? 1 ?
  98.9 1.1 0.0 0.0 24.0 76.0
  0
}

set tbs(krbkp) {
  33 28 ? 70 ?
  99.1 0.9 0.0 2.4 17.1 80.5
  1 1 {1k1K4/7R/8/8/8/8/6p1/7B} 0 {} 0 {}
}

set tbs(krnkq) {
  15 20 ? 69 ?
  35.4 41.1 23.4 78.2 19.7 2.1
  455 0 {} 455 {} 0 {}
}

set tbs(krnkr) {
  430 37 {2k1r3/8/R7/N2K4/8/8/8/8} 41 {4K3/8/1r6/8/5k2/1R4N1/8/8}
  36.7 63.3 0.1 3.2 93.6 3.2
  10 10 {
    2R5/8/8/8/8/k2K4/8/r1N5  8/8/8/8/3N4/1R1K4/8/r1k5 8/8/8/8/3N4/2KR4/8/2k1r3
    8/8/8/8/4N3/7R/k1K5/5r2  8/8/8/8/8/2KRN3/8/2k1r3  8/8/8/8/8/3KN3/3R4/2k1r3
    8/8/8/8/8/5RN1/8/2K1k1r1 8/8/8/8/8/6RN/8/3K1k1r   8/8/8/8/8/NR1K4/8/r1k5
    8/8/8/8/r1N5/2R5/k1K5/8
  } 0 {} 0 {}
}

set tbs(krnkb) {
  7 31 ? 1 ?
  97.7 2.3 0.0 0.0 32.4 67.6
  0
}

set tbs(krnkn) {
  12 37 ? 1 ?
  99.0 1.0 0.0 0.0 24.6 75.4
  3 3 {
    8/8/8/8/4n3/1k6/N7/R1K5 8/8/8/8/8/3n4/N2k4/RK6 8/8/8/8/8/n7/1k6/N1RK4
  } 0 {} 0 {}
}

set tbs(krnkp) {
  32 29 ? 68 ?
  98.5 1.5 0.0 4.5 17.1 78.4
  0
}

set tbs(krpkq) {
  367 68 ? 104 ?
  37.7 11.8 50.5 91.0 7.1 1.8
  243 2 {} 241 {} 0 {}
}

set tbs(krpkr) {
  9184 74 {8/1k6/4R3/8/8/8/6Pr/4K3} 33 {8/1P6/2k5/8/K7/8/8/1r5R}
  66.6 33.0 0.4 20.1 54.4 25.5
  209 209 {} 0 {} 0 {}
}

set tbs(krpkb) {
  626 73 ? 2 ?
  96.4 3.6 0.0 0.0 32.6 67.4
  225 225 {} 0 {} 0 {}
}

set tbs(krpkn) {
  397 54 ? 8 ?
  97.5 2.5 0.0 0.0 24.7 75.3
  413 413 {} 0 {} 0 {} 0 {}
}

set tbs(krpkp) {
  1092 56 ? 103 ?
  99.4 0.4 0.3 10.0 6.6 83.5
  3 0 {} 2 {
    8/8/8/8/8/1p6/kP6/1RK5 8/8/8/8/8/k7/Pp6/RK6
  } 1 {8/8/8/8/8/2p5/1kP5/2RK4}
}

set tbs(kbbkq) {
  3 21 ? 81 ?
  15.3 20.2 64.5 96.5 2.9 0.6
  1 0 {} 1 {8/8/8/8/q7/2BB4/1K6/3k4} 0 {}
}

set tbs(kbbkr) {
  13 23 {4r3/8/8/8/8/4B3/8/k1K4B} 31 {1K4B1/8/3k4/8/B5r1/8/8/8}
  16.5 83.4 0.1 1.3 97.2 1.5
  3 3 {
    8/8/8/8/8/3K1k2/6r1/4B2B 8/8/8/8/8/5k2/6r1/3KB2B 8/8/8/B7/8/3k4/2r5/KB6
  } 0 {} 0 {}
}

set tbs(kbbkb) {
  35 22 {6B1/8/7B/8/b7/2K5/8/k7} 2 {1B5K/5k1B/8/8/8/4b3/8/8}
  15.6 84.3 0.0 0.0 98.6 1.4
  0
}

set tbs(kbbkn) {
  28 78 {8/K7/8/8/8/5k2/6n1/2B4B} 1 ?
  48.2 51.8 0.0 0.0 66.1 33.9
  1 1 {8/8/8/8/8/6n1/2K4B/kB6} 0 {} 0 {}
}

set tbs(kbbkp) {
  23 74 ? 83 ?
  48.0 50.2 1.8 11.4 54.1 34.5
  1 1 {B1k5/1pB5/3K4/8/8/8/8/8} 0 {} 0 {}
}

set tbs(kbnkq) {
  13 36 ? 53 ?
  25.0 6.4 68.6 97.6 1.7 0.7
  1 0 {} 1 {8/8/q7/8/3K4/2N5/8/k1B5} 0 {}
}

set tbs(kbnkr) {
  64 36 {8/8/8/2N5/8/8/B6K/5kr1} 41 {8/8/1B4N1/5k2/8/1r6/8/4K3}
  26.0 73.8 0.2 3.8 94.6 1.6
  8 6 {
    3r4/8/2B5/8/1N6/8/8/k1K5 8/8/8/8/8/2k5/1r6/B1NK4  8/8/8/8/8/2k5/3r4/1KN1B3
    8/8/8/8/8/3k4/4r3/2KN1B2 8/8/8/8/8/4k3/5r2/3KN1B1 8/8/8/8/B7/1r6/N1k5/K7
  } 2 {8/8/8/8/8/1k3r2/8/1KB4N 8/r7/8/B7/8/8/N1k5/K7} 0 {}
}

set tbs(kbnkb) {
  54 39 {8/7B/8/8/6N1/8/3k4/1Kb5} 2 {KB6/8/k4N2/8/6b1/8/8/8}
  25.5 74.5 0.0 0.0 98.8 1.2
  45 45 {} 0 {} 0 {}
}

set tbs(kbnkn) {
  36 107 {6Bk/8/8/7N/8/7K/6n1/8} 1 {8/8/3N4/8/3n4/8/B7/K1k5}
  32.2 67.8 0.0 0.0 96.1 3.9
  922 922 {} 0 {} 0 {}
}

set tbs(kbnkp) {
  165 104 ? 55 ?
  91.4 5.5 3.2 14.7 23.0 62.4
  62 61 {} 1 {8/8/8/1N6/3K4/B7/5p2/k7} 0 {}
}

set tbs(kbpkq) {
  117 35 ? 50 ?
  21.3 11.5 67.2 96.8 2.8 0.4
  16 0 {} 16 {
    3K4/2P5/B3qk2/8/8/8/8/8   8/1KP1q3/1B1k4/8/8/8/8/8 8/qPK5/8/3k4/1B6/8/8/8
    2q5/2B2P2/3K4/1k6/8/8/8/8 8/2P5/4q3/KB6/8/k7/8/8   8/3P4/5q2/1KB5/8/1k6/8/8
    8/1KP1q3/4k3/B7/8/8/8/8   3K4/q1P5/B4k2/8/8/8/8/8  8/5P2/3K4/8/4k2B/7q/8/8
    8/4P3/6q1/k1K5/2B5/8/8/8  3k4/KP1q4/3B4/8/8/8/8/8  8/3K1P2/1k2Bq2/8/8/8/8/8
    3K4/2P5/2B2k2/8/1q6/8/8/8 8/1P1K4/1qB2k2/8/8/8/8/8 1k6/3K1P2/4Bq2/8/8/8/8/8
    5k2/1P1K4/1qB5/8/8/8/8/8
  } 0 {}
}

set tbs(kbpkr) {
  451 45 ? 39 ?
  30.9 67.3 1.8 23.4 73.1 3.5
  306 4 {} 302 {} 0 {}
}

set tbs(kbpkb) {
  570 51 ? 3 ?
  41.3 58.7 0.0 0.0 86.9 13.1
  160 160 {} 0 {} 0 {}
}

set tbs(kbpkn) {
  497 105 ? 8 ?
  53.7 46.3 0.0 0.0 76.4 23.6
  2125 2112 {} 13 {} 0 {}
}

set tbs(kbpkp) {
  1443 67 ? 51 ?
  86.4 9.5 4.1 16.7 24.1 59.2
  406 403 {} 2 {} 1 {8/8/8/8/8/k1p5/2P5/1BK5}
}

set tbs(knnkq) {
  5 1 {k1N5/2K5/8/3N4/8/5q2/8/8} 72 ?
  0.0 42.8 57.1 94.0 6.0 0.0
  229 0 {} 229 {} 0 {}
}

set tbs(knnkr) {
  15 3 {5r1k/8/7K/4N3/5N2/8/8/8} 41 {8/8/1r4N1/4kN2/8/8/8/4K3}
  0.0 99.6 0.4 6.3 93.7 0.0
  25 0 {} 25 {} 0 {}
}

set tbs(knnkb) {
  2 4 {7k/5K2/8/8/5NN1/8/8/2b5} 1 {8/8/8/8/8/8/N1k5/K1b4N}
  0.0 100.0 0.0 0.0 100.0 0.0
  0
}

set tbs(knnkn) {
  8 7 {7n/8/8/8/1N1KN3/8/8/k7} 1 {K7/N1k5/8/3n4/3N4/8/8/8}
  0.1 99.9 0.0 0.0 100.0 0.0
  362 362 {} 0 {} 0 {}
}

set tbs(knnkp) {
  71 115 ? 74 ?
  31.3 66.4 2.3 12.8 73.6 13.6
  3143 3124 {} 19 {} 0 {}
}

set tbs(knpkq) {
  130 41 ? 55 ?
  17.9 11.9 70.2 97.2 2.3 0.5
  52 0 {} 52 {} 0 {}
}

set tbs(knpkr) {
  433 44 ? 67 ?
  26.7 69.3 4.0 29.3 68.5 2.2
  1181 23 {} 1158 {} 0 {}
}

set tbs(knpkb) {
  728 43 ? 9 ?
  38.8 61.2 0.0 0.0 88.1 11.9
  642 640 {} 2 {} 0 {}
}

set tbs(knpkn) {
  781 97 ? 7 ?
  49.2 50.8 0.0 0.0 77.2 22.8
  4191 4128 {} 63 {} 0 {}
}

set tbs(knpkp) {
  1410 57 ? 58 ?
  78.3 13.6 8.1 21.8 27.6 50.6
  2303 2281 {} 14 {} 8 {
    8/8/8/8/3K4/NkpP4/8/8   8/8/8/8/3K4/3PpkN1/8/8 8/8/8/8/8/1k2p3/4P3/KN6
    8/8/8/8/8/2K5/2PpkN2/8  8/8/8/8/8/3K4/3PpkN1/8 8/8/8/8/8/3K4/NkpP4/8
    8/8/8/8/1p6/1P6/K7/N1k5 8/8/8/8/8/1K6/1PpkN3/8
  }
}

set tbs(kppkq) {
  726 124 {8/5P2/8/8/3K4/3P3q/7k/8} 41 {8/2KP2q1/8/2P5/5k2/8/8/8}
  16.0 12.6 71.4 98.4 1.5 0.1
  2 0 {} 2 {8/2KP3q/2P2k2/8/8/8/8/8 8/2KP3q/8/2P3k1/8/8/8/8} 0 {}
}

set tbs(kppkr) {
  1652 54 {3K4/8/8/4P3/8/2r5/5P2/2k5} 40 {8/8/8/7K/5P2/3Pr3/8/2k5}
  35.4 20.1 44.5 75.2 18.2 6.6
  119 18 {} 99 {} 2 {1r1k4/1P6/1PK5/8/8/8/8/8 8/8/8/8/k7/r1P5/1KP5/8}
}

set tbs(kppkb) {
  519 43 {8/6P1/7k/8/6P1/1K6/8/1b6} 4 {K5b1/P7/1k6/8/8/8/2P5/8}
  54.4 45.6 0.0 0.0 75.4 24.6
  212 211 {} 1 {8/8/8/8/8/b2k4/P2P4/1K6} 0 {}
}

set tbs(kppkn) {
  705 50 {3n4/5P2/8/8/3K2P1/8/k7/8} 17 {7K/8/4k2P/8/8/8/5P2/5n2}
  64.7 35.3 0.0 0.0 62.4 37.6
  1077 920 {} 157 {} 0 {}
}

set tbs(kppkp) {
  5080 127 {8/8/8/8/1p2P3/1k1KP3/8/8} 43 {7K/8/4P3/5P2/3k4/7p/8/8}
  77.1 10.3 12.6 27.7 19.1 53.2
  4237 4179 {} 52 {} 6 {
    8/8/8/8/2k5/K1p5/P3P3/8   8/8/8/8/3k4/1K1p4/1P3P2/8
    8/8/8/8/4k3/2K1p3/2P3P1/8 8/8/8/2k5/K1p5/P3P3/8/8
    8/8/8/8/5k2/3K1p2/3P3P/8  8/8/8/k7/p1K5/2P5/2P5/8
  }
}

set tbs(kqqqk) {
  0 3 ? 0 -
  100.0 0.0 0.0 0.0 4.0 96.0
  0
}

set tbs(kqqrk) {
  0 4 ? 0 -
  100.0 0.0 0.0 0.0 3.1 96.9
  0
}

set tbs(kqqbk) {
  3 4 ? 0 -
  100.0 0.0 0.0 0.0 2.7 97.3
  0
}

set tbs(kqqnk) {
  2 4 ? 0 -
  100.0 0.0 0.0 0.0 2.4 97.6
  0
}

set tbs(kqqpk) {
  12 4 ? 0 -
  100.0 0.0 0.0 0.0 2.1 97.9
  0
}

set tbs(kqrrk) {
  0 4 ? 0 -
  100.0 0.0 0.0 0.0 2.0 98.0
  0
}

set tbs(kqrbk) {
  3 5 ? 0 -
  100.0 0.0 0.0 0.0 1.7 98.3
  0
}

set tbs(kqrnk) {
  3 5 ? 0 -
  100.0 0.0 0.0 0.0 1.4 98.6
  0
}

set tbs(kqrpk) {
  26 7 ? 0 -
  100.0 0.0 0.0 0.0 1.1 98.9
  0
}

set tbs(kqbbk) {
  3 6 ? 0 -
  100.0 0.0 0.0 0.0 5.0 95.0
  0
}

set tbs(kqbnk) {
  5 7 ? 0 -
  100.0 0.0 0.0 0.0 1.1 98.9
  0
}

set tbs(kqbpk) {
  31 9 ? 0 -
  100.0 0.0 0.0 0.0 1.2 98.8
  0
}

set tbs(kqnnk) {
  0 8 ? 0 -
  100.0 0.0 0.0 0.0 9.1 90.9
  0
}

set tbs(kqnpk) {
  10 9 ? 0 -
  100.0 0.0 0.0 0.0 1.0 99.0
  0
}

set tbs(kqppk) {
  64 9 ? 0 -
  100.0 0.0 0.0 0.0 0.7 99.3
}

set tbs(krrrk) {
  2 5 ? 0 -
  100.0 0.0 0.0 0.0 0.9 99.1
  0
}

set tbs(krrbk) {
  0 10 ? 0 -
  100.0 0.0 0.0 0.0 0.8 99.2
  0
}

set tbs(krrnk) {
  0 10 ? 0 -
  100.0 0.0 0.0 0.0 0.6 99.4
  0
}

set tbs(krrpk) {
  7 14 ? 0 -
  100.0 0.0 0.0 0.0 0.3 99.7
  0
}

set tbs(krbbk) {
  0 12 ? 0 -
  100.0 0.0 0.0 0.0 4.3 95.7
  0
}

set tbs(krbnk) {
  3 29 ? 0 -
  100.0 0.0 0.0 0.0 0.5 99.5
  0
}

set tbs(krbpk) {
  23 16 ? 0 -
  100.0 0.0 0.0 0.0 0.6 99.4
  0
}

set tbs(krnnk) {
  0 15 ? 0 -
  100.0 0.0 0.0 0.0 8.5 91.5
  0
}

set tbs(krnpk) {
  16 17 ? 0 -
  100.0 0.0 0.0 0.0 0.5 99.5
  0
}

set tbs(krppk) {
  119 15 {8/8/4k3/8/8/3P4/3P4/5R1K} 0 -
  100.0 0.0 0.0 0.0 0.2 98.8
  0
}

set tbs(kbbbk) {
  0 16 ? 0 -
  74.0 26.0 0.0 0.0 31.6 68.4
  0
}

set tbs(kbbnk) {
  3 33 ? 0 -
  100.0 0.0 0.0 0.0 4.1 95.9
  0
}

set tbs(kbbpk) {
  5 30 ? 0 -
  98.3 1.7 0.0 0.0 6.8 93.2
  0
}

set tbs(kbnnk) {
  0 34 ? 0 -
  100.0 0.0 0.0 0.0 8.4 91.6
  0
}

set tbs(kbnpk) {
  26 33 ? 0 -
  100.0 0.0 0.0 0.0 0.8 99.2
  0
}

set tbs(kbppk) {
  100 25 ? 0 -
  99.8 0.2 0.0 0.0 1.3 98.7
  6 6 {
    8/B1k5/K7/P7/P7/8/8/8 K7/8/1k6/1P6/BP6/8/8/8 K7/8/Bk6/1P6/1P6/8/8/8
    KBk5/P1P5/8/8/8/8/8/8 kB6/8/1PK5/1P6/8/8/8/8 kB6/8/KP6/1P6/8/8/8/8
  } 0 {} 0 {}
}

set tbs(knnnk) {
  0 21 ? 0 -
  98.7 1.3 0.0 0.0 25.0 75.0
  0
}

set tbs(knnpk) {
  7 28 ? 0 -
  98.4 1.6 0.0 0.0 12.0 88.0
  0
}

set tbs(knppk) {
  96 32 ? 0 -
  100.0 0.0 0.0 0.0 1.0 99.0
  93 93 {} 0 {} 0 {}
}

set tbs(kpppk) {
  97 33 {7K/5k2/8/8/1P6/1P6/1P6/8} 0 -
  99.9 0.1 0.0 0.0 0.6 99.4
  11 11 {
    1k6/1P6/K7/P7/P7/8/8/8  1k6/1P6/K7/PP6/8/8/8/8  2k5/2P5/3K4/P7/P7/8/8/8
    8/1k6/1P6/KP6/1P6/8/8/8 8/8/1k6/1P6/KP6/1P6/8/8 8/8/8/1k1P4/8/PK6/P7/8
    8/8/8/1k6/1P6/KP6/1P6/8 8/K1k5/P1P5/P7/8/8/8/8  K1k5/2P5/P1P5/8/8/8/8/8
    K1k5/8/P1P5/P7/8/8/8/8  k7/8/KP6/PP6/8/8/8/8
  } 0 {} 0 {}
}

# End of file: tb.tcl


####################
# Piece tracker window

namespace eval ::ptrack {}

set ::ptrack::psize 35
set ::ptrack::select d1
set ::ptrack::moves(start) 1
set ::ptrack::moves(end) 20
set ::ptrack::mode "-games"
set ::ptrack::color blue
set ::ptrack::colors [list black red yellow cyan blue xblack xred xyellow xcyan xblue]

trace variable ::ptrack::moves(start) w {::utils::validate::Integer 999 0}
trace variable ::ptrack::moves(end) w {::utils::validate::Integer 999 0}

# ::ptrack::sq
#   Given a square number (0=a1 to 63=h8), returns the square name.
#
proc ::ptrack::sq {n} {
  set sq [lindex [list a b c d e f g h] [expr {$n % 8} ]]
  append sq [expr {int($n/8) + 1} ]
  return $sq
}

# ::ptrack::unselect
#   Unselects all pieces in the Piece Tracker window.
#
proc ::ptrack::unselect {} {
  set w .ptracker
  set ::ptrack::select {}
  foreach i {a1 c1 e1 g1 b2 d2 f2 h2 a7 c7 e7 g7 b8 d8 f8 h8} {
    $w.bd.p$i configure -background $::dark
  }
  foreach i {b1 d1 f1 h1 a2 c2 e2 g2 b7 d7 f7 h7 a8 c8 e8 g8} {
    $w.bd.p$i configure -background $::lite
  }
}

# ::ptrack::select
#   Selects all the listed pieces the Piece Tracker window.
#
proc ::ptrack::select {plist} {
  ::ptrack::unselect
  foreach p $plist {
    lappend ::ptrack::select $p
    .ptracker.bd.p$p configure -background $::highcolor
  }
}

# ::ptrack::status
#   Sets the Piece Tracker window status bar.
#
proc ::ptrack::status {{text ""}} {
  set t .ptracker.status
  if {$text == ""} {
    $t configure -text "$::tr(Filter): [filterText]"
  } else {
    $t configure -text $text
  }
}

# ::ptrack::recolor
#   Changes the color scheme for track values.
#
proc ::ptrack::recolor {color} {
  set ::ptrack::color $color
  .ptracker.t.color.b configure -image ptrack_$::ptrack::color
  ::ptrack::refresh color
}

# ::ptrack::color
#   Given a real value between 0.0 and 100.0, returns
#   the corresponding Piece Tracker color value.
#
proc ::ptrack::color {pct {col ""}} {
  if {$col == ""} {
    set col $::ptrack::color
  }
  set x $pct
  if {$x > 100.0} { set x 100.0}
  if {$x < 0.01} { set x 0.01 }
  set y [expr {255 - round($x * 0.5 + 10 * log($x))} ]
  set yb [expr {255 - round($x * 2.0 + 10 * log($x))} ]
  if {$y > 255} { set y 255}
  if {$yb > 255} { set yb 255}
  if {$yb < 0} { set yb 0}
  if {$y < 0} { set y 0}
  if {$pct > 0.0  &&  $y == 0} { set y 1 }
  if {$pct > 0.0  &&  $yb == 0} { set yb 1 }
  set xy [expr {255 - $y} ]
  set xyb [expr {255 - $yb} ]
  switch $col {
    black   { set color [format "\#%02X%02X%02X" $yb $yb $yb] }
    red     { set color [format "\#%02X%02X%02X" $y $yb $yb] }
    yellow  { set color [format "\#%02X%02X%02X" $y $y $yb] }
    cyan    { set color [format "\#%02X%02X%02X" $yb $y $y] }
    blue    { set color [format "\#%02X%02X%02X" $yb $yb $y] }
    xblack  { set color [format "\#%02X%02X%02X" $xyb $xyb $xyb] }
    xred    { set color [format "\#%02X%02X%02X" $xyb $xy $xy] }
    xyellow { set color [format "\#%02X%02X%02X" $xyb $xyb $xy] }
    xcyan   { set color [format "\#%02X%02X%02X" $xy $xyb $xyb] }
    xblue   { set color [format "\#%02X%02X%02X" $xy $xy $xyb] }
  }
  return $color
}

# ::ptrack::make
#   Creates the Piece Tracker window
#
proc ::ptrack::make {} {
  set w .ptracker
  if {[winfo exists $w]} { return }

  toplevel $w
  wm title $w "Scid: [tr ToolsTracker]"
  setWinLocation $w
  bind $w <Escape> "destroy $w"
  bind $w <F1> {helpWindow PTracker}
  image create photo ptrack -width $::ptrack::psize -height $::ptrack::psize
  label $w.status -width 1 -anchor w -relief sunken -font font_Small
  pack $w.status -side bottom -fill x

  canvas $w.progress -height 20 -width 400 -bg white -relief solid -border 1
  $w.progress create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.progress create text 395 10 -anchor e -font font_Regular -tags time \
    -fill black -text "0:00 / 0:00"
  pack $w.progress -side bottom -pady 2

  frame $w.bd
  pack $w.bd -side left -padx 2 -pady 4

  frame $w.t
  pack $w.t -side right -fill y -expand yes
  pack [frame $w.gap -width 5] -side left

  frame $w.t.color
  frame $w.t.mode
  frame $w.t.moves
  frame $w.t.buttons
  pack $w.t.buttons -side bottom -fill x
  pack $w.t.moves -side bottom
  pack $w.t.mode -side bottom
  pack $w.t.color -side bottom

  set ::ptrack::shade {}
  for {set i 0} {$i < 64} {incr i} {
    label $w.bd.sq$i -image ptrack -background white -border 1 -relief raised
    set rank [expr {$i / 8}]
    set file [expr {$i % 8} ]
    grid $w.bd.sq$i -row [expr {7 - $rank} ] -column [expr {$file + 1} ]
    lappend ::ptrack::shade 0.0
  }

  foreach rank {1 2 3 4 5 6 7 8} {
    label $w.bd.r$rank -text $rank -width 2
    grid $w.bd.r$rank -column 0 -row [expr {8 - $rank} ]
  }

  foreach column {1 2 3 4 5 6 7 8} file {a b c d e f g h} {
    label $w.bd.f$file -text $file
    grid $w.bd.f$file -row 8 -column $column
  }

  grid [frame $w.bd.gap1 -height 5] -row 9 -column 0

  foreach file {a b c d e f g h} c {1 2 3 4 5 6 7 8} p {r n b q k b n r} {
    set sq ${file}8
    set b $w.bd.p$sq
    label $b -image b$p$::ptrack::psize -border 1 -relief raised
    grid $b -row 10 -column $c
    bind $b <1> "::ptrack::select $sq"
  }
  foreach file {a b c d e f g h} c {1 2 3 4 5 6 7 8} p {p p p p p p p p} {
    set sq ${file}7
    set b $w.bd.p$sq
    label $b -image b$p$::ptrack::psize -border 1 -relief raised
    grid $b -row 11 -column $c
    bind $b <1> "::ptrack::select $sq"
    bind $b <$::MB3> "::ptrack::select {a7 b7 c7 d7 e7 f7 g7 h7}"
  }
  grid [frame $w.bd.gap2 -height 5] -row 12 -column 0
  foreach file {a b c d e f g h} c {1 2 3 4 5 6 7 8} p {p p p p p p p p} {
    set sq ${file}2
    set b $w.bd.p$sq
    label $b -image w$p$::ptrack::psize -border 1 -relief raised
    grid $b -row 13 -column $c
    bind $b <ButtonPress-1> "::ptrack::select $sq"
    bind $b <$::MB3> "::ptrack::select {a2 b2 c2 d2 e2 f2 g2 h2}"
  }
  foreach file {a b c d e f g h} c {1 2 3 4 5 6 7 8} p {r n b q k b n r} {
    set sq ${file}1
    set b $w.bd.p$sq
    label $b -image w$p$::ptrack::psize -border 1 -relief raised
    grid $b -row 14 -column $c
    bind $b <Button-1> "::ptrack::select $sq"
  }

  # Both-piece bindings:
  foreach sq {d1 e1 d8 e8} {
    bind $w.bd.p$sq <$::MB3> [list ::ptrack::select $sq]
  }
  foreach left {a b c} right {h g f} {
    set cmd [list ::ptrack::select [list ${left}1 ${right}1]]
    bind $w.bd.p${left}1 <ButtonPress-$::MB3> $cmd
    bind $w.bd.p${right}1 <ButtonPress-$::MB3> $cmd
    set cmd [list ::ptrack::select [list ${left}8 ${right}8]]
    bind $w.bd.p${left}8 <ButtonPress-$::MB3> $cmd
    bind $w.bd.p${right}8 <ButtonPress-$::MB3> $cmd
  }

  # Status-bar help:
  foreach sq {d1 e1 d8 e8} {
    bind $w.bd.p$sq <Any-Enter> {
      ::ptrack::status $::tr(TrackerSelectSingle)
    }
    bind $w.bd.p$sq <Any-Leave> ::ptrack::status
  }

  foreach sq {a1 b1 c1 f1 g1 h1 a8 b8 c8 f8 g8 h8} {
    bind $w.bd.p$sq <Any-Enter> {
      ::ptrack::status $::tr(TrackerSelectPair)
    }
    bind $w.bd.p$sq <Any-Leave> ::ptrack::status
  }
  foreach sq {a2 b2 c2 d2 e2 f2 g2 h2 a7 b7 c7 d7 e7 f7 g7 h7} {
    bind $w.bd.p$sq <Any-Enter> {
      ::ptrack::status $::tr(TrackerSelectPawn)
    }
    bind $w.bd.p$sq <Any-Leave> ::ptrack::status
  }
  set plist $::ptrack::select
  ::ptrack::unselect
  ::ptrack::select $plist

  set f $w.t.text
  pack [frame $f] -side top -fill both -expand yes -padx 2 -pady 2
  text $f.text -width 28 -height 1 -foreground black -background white \
    -yscrollcommand "$f.ybar set" -relief sunken -takefocus 0 \
    -wrap none -font font_Small
  set xwidth [font measure [$f.text cget -font] "x"]
  foreach {tab justify} {3 r 5 l 19 r 29 r} {
    set tabwidth [expr {$xwidth * $tab} ]
    lappend tablist $tabwidth $justify
  }
  $f.text configure -tabs $tablist
  scrollbar $f.ybar -takefocus 0 -command "$f.text yview"
  pack $f.ybar -side right -fill y
  pack $f.text -side left -fill y -expand yes

  set f $w.t.color

  menubutton $f.b -menu $f.b.menu -indicatoron 0 -relief raised
  menu $f.b.menu
  foreach col $::ptrack::colors {
    image create photo ptrack_$col -width 101 -height 20
    for {set i 0} {$i <= 100} {incr i} {
      set color [::ptrack::color $i $col]
      ptrack_$col put $color -to $i 0 [expr {$i+1} ] 19
    }
    $f.b.menu add command -image ptrack_$col \
      -command "::ptrack::recolor $col"
  }
  $f.b configure -image ptrack_$::ptrack::color
  label $f.label -text $::tr(GlistColor:) -font font_Bold
  pack $f.label $f.b -side left -pady 5

  set f $w.t.mode
  label $f.mode -text $::tr(TrackerStat:) -font font_Bold
  grid $f.mode -row 0 -column 0
  radiobutton $f.games -text $::tr(TrackerGames) -anchor w \
    -variable ::ptrack::mode -value "-games"
  radiobutton $f.time -text $::tr(TrackerTime) -anchor w \
    -variable ::ptrack::mode -value "-time"
  grid $f.games -row 1 -column 0 -sticky we
  grid $f.time -row 2 -column 0 -sticky we

  set f $w.t.moves
  label $f.lfrom -text $::tr(TrackerMoves:) -font font_Bold
  entry $f.from -width 3 -justify right -textvariable ::ptrack::moves(start)
  label $f.lto -text "-"
  entry $f.to -width 3 -justify right -textvariable ::ptrack::moves(end)
  pack $f.lfrom $f.from $f.lto $f.to -side left -pady 5
  bindFocusColors $f.from
  bindFocusColors $f.to
  bind $f.from <FocusIn> [list +::ptrack::status $::tr(TrackerMovesStart)]
  bind $f.from <FocusOut> +::ptrack::status
  bind $f.to <FocusIn> [list +::ptrack::status $::tr(TrackerMovesStop)]
  bind $f.to <FocusOut> +::ptrack::status

  set f $w.t.buttons
  button $f.stop -text $::tr(Stop) -command sc_progressBar -state disabled
  button $f.update -text $::tr(Update) -command ::ptrack::refresh
  button $f.close -text $::tr(Close) -command "destroy $w"
  pack $f.close $f.update $f.stop -side right -padx 3 -pady 5
  ::ptrack::status
  bind $w <Configure> "recordWinSize $w"
  wm resizable $w 0 0
  focus $w.t.buttons.update
}

# ::ptrack::refresh
#   Regenerates Piece Tracker statistics and updates the window
#
proc ::ptrack::refresh {{type "all"}} {
  set w .ptracker
  if {! [winfo exists $w]} { return }

  # Check if only the color needs refreshing:
  if {$type == "color"} {
    for {set i 0} {$i < 64} {incr i} {
      set x [lindex $::ptrack::shade $i]
      $w.bd.sq$i configure -background [::ptrack::color $x]
    }
    return
  }

  busyCursor .
  $w.t.buttons.update configure -state disabled
  $w.t.buttons.close configure -state disabled
  $w.t.buttons.stop configure -state normal
  catch {grab $w.t.buttons.stop}

  if {$::ptrack::moves(end) < $::ptrack::moves(start)} {
    set ::ptrack::moves(end) $::ptrack::moves(start)
  }

  set timeMode 0
  if {$::ptrack::mode == "-time"} { set timeMode 1 }

  sc_progressBar $w.progress bar 401 21 time
  set data [eval sc_base piecetrack $::ptrack::mode \
              $::ptrack::moves(start) $::ptrack::moves(end) \
              $::ptrack::select]
  set ::ptrack::data $data

  catch {grab release $w.t.buttons.stop}
  $w.t.buttons.stop configure -state disabled
  $w.t.buttons.update configure -state normal
  $w.t.buttons.close configure -state normal
  unbusyCursor .

  set dfilter [sc_filter count]
  if {$timeMode} {
    set nmoves [expr {$::ptrack::moves(end) + 1 - $::ptrack::moves(start)} ]
    set dfilter [expr {$dfilter * $nmoves} ]
  }
  if {$dfilter == 0} { set dfilter 1 } ;# to avoid divide-by-zero

  set max 1
  for {set i 0} {$i < 64} {incr i} {
    set freq [lindex $data $i]
    if {$freq > $max} {set max $freq}
  }

  set ::ptrack::shade {}
  for {set i 0} {$i < 64} {incr i} {
    set freq [lindex $data $i]
    set x [expr {$freq * 100.0 / $max} ]
    set color [::ptrack::color $x]
    lappend ::ptrack::shade $x
    $w.bd.sq$i configure -background $color
  }

  # Update text frame:
  set text $w.t.text.text
  $text delete 1.0 end
  array set printed {}
  for {set top 1} {$top <= 64} {incr top} {
    set best -1
    set idx -1
    for {set i 0} {$i < 64} {incr i} {
      set n [lindex $data $i]
      if {$n > $best  &&  ![info exists printed($i)]} {
        set idx $i
        set best $n
      }
    }

    set printed($idx) 1
    set pct [expr {round(double($best) * 10000.0 / double($dfilter)) / 100.0} ]
    set line [format "\t%2d.\t%s\t%7s\t%6.2f %%" $top \
                [::ptrack::sq $idx] [::utils::thousands $best] $pct]
    $text insert end "$line\n"
    set status "  [::ptrack::sq $idx]: [::utils::thousands $best] ($pct%%)  $top/64"
    bind $w.bd.sq$idx <Any-Enter> [list ::ptrack::status $status]
    bind $w.bd.sq$idx <Any-Leave> ::ptrack::status
  }
}
### help.tcl: Help pages for Scid.
### This file uses UTF-8
#################################################

set helpTitle(Contents) "Contents"
set helpText(Contents) {<h1>Scid Help Contents</h1>
  
  <h4>Starting out and general help</h4>
  <ul>
  <li><a Guide><b>Quick Guide</b> to using Scid</a> <red>(Read this first)</red></li>
  <li><a Hints><b>Hints</b> for getting more out of Scid</a></li>
  <li><a MainWindow>The Scid <b>main window</b></a></li>
  <li><a Menus>Scid <b>menus</b></a></li>
  <li><a Moves>Entering <b>chess moves</b></a></li>
  <li><a Searches><b>Searches</b> in Scid</a></li>
  <li><a Clipbase>Using the <b>Clipbase</b> database</a></li>
  <li><a Annotating><b>Annotating games</b></a></li>
  </ul>
  
  <h4>Other Scid windows</h4>
  <ul>
  <li><a Analysis><b>Analysis</b> window</a></li>
  <li><a Book><b>Book</b> window</a></li>
  <li><a CalVar><b>Calculation of variations</b> window</a></li>
  <li><a Comment><b>Comment editor</b> window</a></li>
  <li><a Crosstable><b>Crosstable</b> window</a></li>
  <li><a Switcher><b>Database Switcher</b> window</a></li>
  <li><a Email><b>Email</b> chess manager window</a></li>
  <li><a Finder><b>File Finder</b> window</a></li>
  <li><a GameList><b>Game List</b> window</a></li>
  <li><a Import><b>Import game</b> window</a></li>
  <li><a OpeningTrainer><b>Opening Trainer</b> window </a></li>
  <li><a Reports><b>Reports</b></a> <red>(updated!)</red></li>
  <li><a PGN><b>PGN</b> (game text) window</a></li>
  <li><a PTracker><b>Piece Tracker</b></a></li>
  <li><a PList><b>Player Finder</b> window</a></li>
  <li><a PInfo><b>Player Info</b> window</a></li>
  <li><a Repertoire><b>Repertoire editor</b> window</a></li>
  <li><a TacticalGame><b>Tactical game</b> window</a></li>
  <li><a Tmt><b>Tournament Finder</b> window</a></li>
  <li><a Tree><b>Tree</b> window</a></li>
  <li><a Graphs><b>Graph</b> windows</a></li>
  <li><a TB>Using <b>Tablebases</b> in Scid</a></li>
  </ul>
  
  <h4>Other utilities and information</h4>
  <ul>
  <li><a Bookmarks><b>Bookmarks</b></a></li>
  <li><a Cmdline>Command-line options</a></li>
  <li><a Compact><b>Compacting</b> a database</a></li>
  <li><a Correspondence>Correspondence Chess</a></li>
  <li><a Maintenance><b>Database maintenance</b> tools</a></li>
  <li><a ECO><b>ECO</b> openings classification</a></li>
  <li><a EPD><b>EPD</b> files</a></li>
  <li><a Export><b>Exporting</b> games to text files</a></li>
  <li><a Flags>Game <b>Flags</b></a></li>
  <li><a LaTeX>Using <b>LaTeX</b> with Scid</a></li>
  <li><a Options><b>Options</b> and preferences</a></li>
  <li><a Sorting><b>Sorting</b> a database</a></li>
  <li><a Pgnscid><b>Pgnscid</b>: converting <a PGN>PGN</a> files</a></li>
  <li><a NAGs>Standard <b>NAG</b> annotation values</a></li>
  <li><a Formats>Scid database <b>file formats</b></a></li>
  <li><a Author>Contact information</a></li>
  </ul>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}

###############
### Topic Index

set helpTitle(Index) "Scid Help Topic Index"
set helpText(Index) {<h1>Scid Help Topic Index</h1>
  
  <h3>A</h3>
  <ul>
  <li><a Analysis>Analysis</a> window</li>
  <li><a Annotating>Annotating games</a></li>
  <li><a NAGs>Annotation symbols</a></li>
  <li><a Author>Author, contacting</a></li>
  <li><a MainWindow Autoplay>Autoplay mode</a></li>
  </ul>
  
  <h3>B</h3>
  <ul>
  <li><a Tree Best>Best games</a> window</li>
  <li><a Searches Board>Board searches</a></li>
  <li><a Book>Book</a> window</li>
  <li><a BookTuning>Book</a> tuning</li>
  <li><a Bookmarks>Bookmarks</a></li>
  <li><a GameList Browsing>Browsing games</a></li>
  </ul>
  
  <h3>C</h3>
  <ul>
  <li><a Maintenance Cleaner>Cleaner</a></li>
  <li><a Clipbase>Clipbase</a></li>
  <li><a Cmdline>Command-line options</a></li>
  <li><a Comment>Comment editor</a></li>
  <li><a Compact>Compacting a database</a></li>
  <li><a Correspondence>Correspondence Chess</a></li>
  <li><a CCIcons>Correspondence Chess Icons</a></li>
  <li><a Author>Contact information</a></li>
  <li><a Contents>Contents</a></li>
  <li><a Crosstable>Crosstable</a> window</li>
  </ul>
  
  <h3>D</h3>
  <ul>
  <li><a Compact>Database compaction</a></li>
  <li><a Formats>Database file formats</a></li>
  <li><a Metadata>Database information (Metadata)</a></li>
  <li><a Maintenance>Database maintenance</a></li>
  <li><a Sorting>Database sorting</a></li>
  <li><a Switcher>Database switcher</a> window</li>
  <li><a Maintenance Twins>Deleting twin games</a></li>
  <li><a HardwareConfig>DGT Electronic Chess Board</a></li>
  <li><a InputEngine>DGT usage</a></li>
  <li><a Metadata>Dublin Core Metadata</a></li>
  </ul>
  
  <h3>E</h3>
  <ul>
  <li><a ECO Browser>ECO Browser</a> window</li>
  <li><a ECO Codes>ECO code system</a></li>
  <li><a ECO>ECO openings classification</a></li>
  <li><a Menus Edit>Edit menu</a></li>
  <li><a Email>Email manager</a> window</li>
  <li><a CCeMailChess>Email Chess</a></li>
  <li><a Analysis List>Engines list</a></li>
  <li><a Moves>Entering chess moves</a></li>
  <li><a EPD>EPD files</a></li>
  <li><a Export>Exporting games to text files</a></li>
  <li><a HardwareConfig>External Hardware (Novag, DGT...)</a></li>
  </ul>
  
  <h3>F</h3>
  <ul>
  <li><a FICSLogin>FICS Login</a></li>
  <li><a FICSfindOpp>FICS Find opponent</a></li>
  <li><a FICS>Play on the Internet (FICS)</a></li>
  <li><a FICS Training>FICS lectures</a></li>
  <li><a Finder>File Finder</a></li>
  <li><a FindBestMove>Training: Find best move</a></li>
  <li><a Formats>File formats</a></li>
  <li><a Menus File>File menu</a></li>
  <li><a Searches Filter>Filter</a></li>
  <li><a Export>Filter, exporting</a></li>
  <li><a Graphs Filter>Filter graph</a></li>
  <li><a Flags>Flags</a></li>
  <li><a Options Fonts>Fonts</a></li>
  </ul>
  
  <h3>G</h3>
  <ul>
  <li><a Flags>Game flags</a></li>
  <li><a GameList>Game List</a> window</li>
  <li><a Menus Game>Game menu</a></li>
  <li><a Graphs>Graph windows</a></li>
  </ul>
  
  <h3>H</h3>
  <ul>
  <li><a Searches Header>Header searches</a></li>
  <li><a Menus Help>Help menu</a></li>
  <li><a Hints>Hints</a></li>
  <li><a HardwareConfig>Using Hardware (Novag, DGT)</a></li>
  </ul>
  
  <h3>I</h3>
  <ul>
  <li><a CCIcons>Icons for Correspondence Chess</a></li>
  <li><a Import>Import</a> window</li>
  <li><a Moves Informant>Informant Symbols</a></li>
  <li><a InputEngine>Input Engine drivers</a></li>
  </ul>
  
  <h3>L</h3>
  <ul>
  <li><a LaTeX>LaTeX</a> output format</li>
  </ul>
  
  <h3>M</h3>
  <ul>
  <li><a MainWindow>Main Window</a></li>
  <li><a Maintenance>Maintenance tools</a></li>
  <li><a TreeMasks>Masks for Trees</a></li>
  <li><a Searches Material>Material/pattern searches</a></li>
  <li><a Menus>Menus</a></li>
  <li><a GameList Browsing>Merging games</a></li>
  <li><a Metadata>Metadata</a></li>
  <li><a Moves>Move entry</a></li>
  </ul>
  
  <h3>N</h3>
  <ul>
  <li><a Maintenance Editing>Names, editing</a></li>
  <li><a Maintenance Spellcheck>Names, spellchecking</a></li>
  <li><a NAGs>NAG annotation values</a></li>
  <li><a Annotating Null>Null moves</a></li>
  <li><a HardwareConfig>Novag Citrine Electronic Chess Board</a></li>
  <li><a Novag>Novag Citrine usage</a></li>
  </ul>
  
  <h3>O</h3>
  <ul>
  <li><a ECO>Opening classification (ECO)</a></li>
  <li><a Repertoire>Opening repertoires</a></li>
  <li><a Reports Opening>Opening report</a> window</li>
  <li><a OpeningTrainer>Training: Openings</a></li>
  <li><a Options>Options</a></li>
  </ul>
  
  <h3>P</h3>
  <ul>
  <li><a PGN>PGN</a> window</li>
  <li><a Pgnscid>Pgnscid</a></li>
  <li><a FICS>Play on the Internet (FICS)</a></li>
  <li><a PTracker>Piece Tracker</a> window</li>
  <li><a PList>Player Finder</a> window</li>
  <li><a PInfo>Player Info</a> window</li>
  <li><a Reports Player>Player report</a> window</li>
  <li><a TacticalGame>Play tactical game</a></li>
  <li><a SeriousGame>Play serious game</a></li>
  </ul>
  
  <h3>Q</h3>
  <ul>
  <li><a Guide>Quick guide to using Scid</a></li>
  </ul>
  
  <h3>R</h3>
  <ul>
  <li><a Graphs Rating>Rating graph</a></li>
  <li><a Repertoire>Repertoire editor</a></li>
  </ul>
  
  <h3>S</h3>
  <ul>
  <li><a Searches Filter>Search filter</a></li>
  <li><a Menus Search>Search menu</a></li>
  <li><a Searches>Searches</a></li>
  <li><a SeriousGame>Play serious game</a></li>
  <li><a Sorting>Sorting a database</a></li>
  <li><a Maintenance Spellcheck>Spellchecking names</a></li>
  <li><a Switcher>Switcher</a> window</li>
  </ul>
  
  <h3>T</h3>
  <ul>
  <li><a TB>Tablebases</a></li>
  <li><a TacticalGame>Tactical game</a></li>
  <li><a Menus Tools>Tools menu</a></li>
  <li><a Tmt>Tournament finder</a></li>
  <li><a FindBestMove>Training: Find best move</a></li>
  <li><a OpeningTrainer>Training: Openings</a></li>
  <li><a TacticsTrainer>Training: Tactics</a></li>
  <li><a FICS Training>Training: FICS lectures</a></li>
  <li><a Tree>Tree window</a></li>
  <li><a TreeMasks>Masks for Trees</a></li>
  <li><a Moves Trial>Trial mode</a></li>
  <li><a Maintenance Twins>Twin (duplicate) games</a></li>
  </ul>
  
  <h3>V</h3>
  <ul>
  <li><a Annotating Vars>Variations</a></li>
  </ul>
  
  <h3>W</h3>
  <ul>
  <li><a Menus Windows>Windows menu</a></li>
  </ul>

  <h3>X</h3>
  <ul>
  <li><a CCXfcc>Xfcc support</a></li>
  </ul>

  <p><footer>(Updated: Scid 3.6.23, March 2008)</footer></p>
}


####################
### Quick Guide help:

set helpTitle(Guide) "Quick Guide to using Scid"
set helpText(Guide) {<h1>Quick Guide to using Scid</h1>
  <p>
  Scid is a chess database application; with it you can browse
  databases of chess games, edit games and <a Searches>search</a>
  for games by various criteria.
  </p>
  <p>
  Scid uses its own special three-file <a Formats>database format</a>
  which is very compact and fast, but it can convert to and from
  the standard <a PGN>PGN</a> (Portable Game Notation) format.
  Scids <a PGN>PGN window</a> displays the text of the current game in
  <a PGN>PGN</a> format.
  </p>
  <p>
  You can use Scid to add chess games to a database, using the keyboard or
  mouse to enter moves. See the help page on <a Moves>entering chess moves</a>
  for more details.
  </p>
  <p>
  You can also use Scid as a <a PGN>PGN</a> file browser, by pasting
  <a PGN>PGN</a> text into Scids <a Import>Import</a> window or by
  opening a <a PGN>PGN</a> file in Scid.  However, <a PGN>PGN</a>
  files cannot be edited by Scid (it opens them read-only) and they
  use more memory and are slower to load, so for large <a PGN>PGN</a>
  files it is recommended that you create a Scid database from them
  first with the <a Pgnscid>pgnscid</a> utility.
  </p>
  <p>
  Windows can be used in docked mode or as independant windows (see
  flag in the options menu).  In docked mode, the most important
  windows are embedded into a main one. The windows can be reordered
  by right-clicking on the tab (where the title of the window is) and
  by dragging tabs from one notebook to another. The menu for each
  window that has one (marked with a triangle at the left of the tab)
  is opened by left cliking on the tab.
  </p>
  <p>
  The <a MainWindow>main window</a>
  of Scid (with the graphical chess board) shows details of
  the active game and database. At any time, you can have up to nine
  databases open (five including the <a Clipbase>clipbase</a>),
  and each will have its own active game.
  (A game numbered 0 indicates a scratch game that is not part of the
  actual database).
  You can switch between the open databases with the
  <a Menus File>File menu</a>.
  </p>
  <p>
  For more information, please read the other help pages listed in the
  <a Index>Help Index</a>.
  </p>
  <p>
  See the <a Author>contact information</a> page if you need to contact the
  author of Scid.
  </p>
  
  <p><footer>(Updated: Scid 3.6.7, December 2008)</footer></p>
}


####################
### Hints page:
set helpTitle(Hints) "Scid Hints"
set helpText(Hints) {<h1>Scid Hints</h1>
  <p>
  This page contains useful hints in question and answer format to
  help you use Scid better. If you are new to Scid, please read the <a
  Guide>quick guide</a> first.  Most of the information on this page
  is available in more detail on the other help pages listed in the <a
  Index>index</a>.  If you think of a useful hint to add to this page,
  please send it to the <a Author>author of Scid</a>.
  </p>
  
  <h4>Can I get Scid to load a database when it starts?</h4>
  <p>
  Yes, you can add databases, <a PGN>PGN</a> files or <a EPD>EPD files</a>
  to the command line. For example:
  <ul>
  <li> <b>scid  mybase  games.pgn.gz</b> </li>
  </ul>
  will load the Scid database <b>mybase</b> and also load the
  Gzip-compressed <a PGN>PGN</a> file <b>games.pgn.gz</b>.
  </p>
  
  <h4>Is there an easier way to change the board size than using the
  options menu?</h4>
  <p>
  Yes, you can use the shortcut keys <b>Control+Shift+LeftArrow</b> and
  <b>Control+Shift+RightArrow</b> to decrease or increase the board size.
  </p>
  
  <h4>I am training by playing through a game, so I do not want Scid to
  print the next move in the game information area below the chessboard.
  Can I hide it?</h4>
  <p>
  You can hide the next move by pressing the <b>right</b> mouse button in the
  game information area, and selecting <b>Hide next move</b> from the
  menu that appears.
  </p>
  
  <h4>How can I see the ECO opening code for the current position?</h4>
  <p>
  The ECO code is displayed on the bottom line of the game
  information box, below the chessboard in the <a MainWindow>main window</a>,
  if you have the ECO classification file (<b>scid.eco</b>) loaded. <br>
  The <a ECO>ECO codes</a> help page explains how to load the ECO classification
  file and save options so it will be loaded every time you start Scid.
  </p>
  
  <h4>I am entering a game, and I am up to move 30, but just saw that move
  10 was wrong. How can I correct it and keep all the moves after it?</h4>
  <p>
  You can use the <a Import>Import</a> window; see the
  <a Moves Mistakes>entering moves</a> help page for more information.
  </p>
  
  <h4>How do I copy games from one database to another?</h4>
  <p>
  Use the <a Switcher>database switcher window</a>: drag from the source
  database to the target database to copy all games in the source database
  <a Searches Filter>filter</a>.
  </p>
  
  <h4>Every time I enter a move where one already exists, I get a
  "Replace move?" dialog box. How do I avoid that?</h4>
  <p>
  Turn it off with the <b>Ask before replacing moves</b> option in the
  <menu>Options: Moves</menu> menu.
  Or, get into the habit of taking back moves using the right-mouse button,
  which actually removes the move from the game if you are at the last move of
  the game.
  </p>
  
  <h4>How do I change column widths in the Game List window?</h4>
  <p>
  Click the left or right mouse button on each column title.
  </p>
  
  <h4>How can I use the tree window on a selection of games, not my whole
  database?</h4>
  <p>
  Use the <a Clipbase>clipbase</a>. Set your database filter to contain the
  games you want to use the tree on, then copy them to the clipbase using the
  <a Switcher>database switcher</a>. Then, just open the tree window in the
  clipbase.
  </p>
  
  <h4>The Tree is slow for large databases. How do I speed it up?</h4>
  <p>
  Save the Tree cache often, to save tree results for future use.
  See the caching section of the <a Tree>Tree</a> help page for details.
  </p>
  
  <h4>How can I edit the <a PGN>PGN</a> representation of the game directly?</h4>
  <p>
  You cannot use the <a PGN>PGN</a> window to edit the current game, but you can
  still edit its <a PGN>PGN</a> representation using the <a Import>Import game</a> window.
  Just open it (shortcut key: <b>Control+Shift+I</b>) and then press the
  <b>Paste current game</b> button, then edit the game, then press <b>Import</b>.
  </p>
  
  <h4>My database has several spellings for some player names. How do I
  correct them all?</h4>
  <p>
  You can edit individual names or spellcheck all the names in a database
  with the commands in the <menu>File: Maintenance</menu> menu.
  See the <a Maintenance Editing>maintenance</a> page.
  </p>
  
  <h4>I have two databases open: one with my own games, and a large database of
  grandmaster games. How do I compare one of my games to those in the large
  database?</h4>
  <p>
  Just open the <a Tree>Tree</a> window for the reference database and
  switch back to the game to compare by means of the database
  switcher. Alternatively, a base can directly be opened as tree via
  the <term>File</term> menu.
  </p>
  
  <p><footer>(Updated: Scid 3.6.28, December 2008)</footer></p>
}


####################
### Main window help:

set helpTitle(MainWindow) "Scid main window"
set helpText(MainWindow) {<h1>Scid main window</h1>
  <p>
  The main window in Scid displays the current board position of the
  active game and information about the current game and database.
  Separate help pages describe the <a Menus>menus</a> and ways to
  <a Moves>enter chess moves</a>.
  </p>
  
  <h3>Game navigation buttons</h3>
  <p>
  The navigation buttons above the board have the following meanings, from
  left to right:
  <ul>
  <li> <button tb_start> Move to the start of the game. [Home] </li>
  <li> <button tb_prev> Move back one move. [Left] </li>
  <li> <button tb_next> Move forward one move. [Right] </li>
  <li> <button tb_end> Move to the end of the game. [End] </li>
  <li> <button tb_invar> Move into a variation. [v] </li>
  <li> <button tb_outvar> Move out of the current variation. [z] </li>
  <li> <button tb_addvar> Add a new variation. [Ctrl-A]</li>
  <li> <button tb_comment_avail> Signifies that the current move has a
  textual comment attached. This comment is displayed in a tooltip
  upon mouse hovering on the button. Pressing the button also opens up
  the <a Comment>Comment editor</a></li>
  <li> <button tb_play> Start/stop autoplay mode (see below).  [Ctrl-Z] </li>
  <li> <button tb_trial> Start/stop <a Moves Trial>trial mode</a>.
  [Ctrl-Space] </li>
  <li> <button tb_flip> Rotate the board 180 degrees. [.]</li>
  <li> <button tb_coords> Show/hide board coordinates. [0]</li>
  </ul>
  Keyboard shortcuts are given in square brackets.
  
  <h4><name Autoplay>Autoplay mode</name></h4>
  <p>
  In autoplay mode, Scid automatically plays the moves in the current game,
  moving forward until the end of the game. The time delay between moves can
  be set from the <menu>Options: Moves</menu> menu, and is saved to your
  options file when you save options.
  </p>
  <p>
  The shortcut key <b>Control+Z</b> starts or stops autoplay mode, and
  you can also exit autoplay mode by pressing the <b>Escape</b> key.
  </p>
  <p>
  If you start autoplay mode when the <a Analysis>analysis window</a> is open,
  the game is <term>annotated</term>: the score and analysis for each position
  are added to the game as a new variation just before each move is made.
  See the <a Analysis>analysis window</a> help page for details.
  </p>
  
  <h3>The game information area</h3>
  <p>
  The area below the chessboard showing information about the game is
  called the <term>game information area</term>.  Its first three
  lines show information such as the players, their country, result,
  date, and site.  This information is drawn from the games PGN
  header. To show country information the fields
  WhiteCountry/BlackCountry need to be available. The fourth line
  indicates the current position in the game, and what the next move
  is.
  </p>
  <p>
  Additionally, flags set for a given game are shown. Here, custom
  flags only show up by their respecitve number while the standard
  flags also show their textual meaning.
  </p>
  <p>
  Next to the flags a link called <term>Bib</term> may show up in case the
  PGN header contains a bibliographic link, ie. a link to the chess
  literature. This link is to be placed in a special header field
  called <term>Bib</term> and links the game to a BibTeX database containing
  the bibliographic information. This linking is done by almost
  standard LaTeX structure, that is the <term>Bib</term> field
  contains first the BibTeX key. Additinal information (e.g. page,
  game number...) may be added by <b>, addinfo</b>. To give more than
  one bibliogrpahic link several of this entries may be separated by
  <b> ; </b> (ie. space semicolon space). To resolve the bibliographic
  reference, Scid first searches a .bib-file named like the database
  in the database directory. If it can not find such a file it resorts
  to <b>~/.scid/data/Bookshelf.bib</b>.
  </p>
  <p>
  The fifth line shows the <a ECO>ECO</a> (Encyclopedia of Chess
  Openings) code for the current position, if the position appears in
  the ECO file being used.
  </p>
  <p>
  If Scid can find a suitable photo file (either in ~/.scid or Scids
  share directory within the photos folder) and photos for the players
  exist, also these photos show up in the information area. (Suitable
  photo files can be downloaded from the <url
  http://scid.sourceforge.net/>Scid website</url>; a documentation of
  their format is contained within these files.) However, the player
  photos tend to hide some text in the information area.  Therefore,
  they can be minimised temporarily by clicking on them.
  </p>
  <p>
  The game information area has a menu activated with the right mouse button,
  with options to hide the next move (useful if you are training using a game
  and want to guess each move) and to delete or undelete the current game.
  You can also activate this menu without using the mouse, by pressing the
  <b>[F9]</b> function key.
  </p>
  <p>
  On the right hand side of the board the material balance can be
  displayed by small piece symbols. E.g. if white has captured a
  bishop while black has captured a knight, a white bishop and a black
  knight show up.
  </p>
  
  <h4>Tablebases</h4>
  <p>
  The game information area also displays tablebase results whenever the
  displayed position reaches a material configuration found in a
  tablebase file. See the <a TB>tablebases</a> help page for details.
  </p>
  
  <h3>The status bar</h3>
  <p>
  The status bar shows information about the current database.
  The first field indicates the game status: <b>XX</b> means it has been
  altered and not yet saved, while <b>--</b> means it is unchanged,
  and <b>%%</b> indicates the database is read-only (not alterable).
  </p>
  <p>
  If you want a database to be opened read-only, just set the permissions
  of its Scid files, or at least its index file, for example:
  <b>chmod a-w myfile.si3</b>
  as a shell command, and it will be opened read-only by Scid.
  </p>
  <p>
  The status bar also shows how many games are currently in the
  <a Searches Filter>filter</a>.
  </p>
  
  <p><footer>(Updated: Scid 4.3, October 2011)</footer></p>
}


####################
### Menus help screen:

set helpTitle(Menus) "Menus"
set helpText(Menus) {<h1>Scid menus</h1>
  
  <h3><name File>File</name></h3>
  <ul>
  <li><menu>New</menu>: Creates a new empty Scid database.</li>
  <li><menu>Open</menu>: Opens an existing Scid database.</li>
  <li><menu>Close</menu>: Closes the current Scid database.</li>
  <li><menu>Finder</menu>: Opens the <a Finder>File Finder</a>.</li>
  <li><menu>Bookmarks</menu>: <a Bookmarks>Bookmarks</a> and bookmark
  functions.</li>
  <br>
  <li><menu>Open base as tree</menu>: Opens the tree window for a
  selected database</li>
  <li><menu>Open recent base as tree</menu>: Offers a list of recently
  opened bases to get their tree window.</li>
  <br>
  <li><menu>Maintenance</menu>: Database <a Maintenance>maintenance</a>
  functions.</li>
  <ul>
  <li><menu>Maintenance window</menu>: Opens/closes the database maintenance
  window.</li>
  <li><menu>Delete twin games</menu>: Finds <a Maintenance Twins>twin</a>
  games in the database.</li>
  <li><menu>ECO-Classify games</menu>: Recomputes the
  <a ECO>ECO code</a> for all games in the database. </li>
  <li><menu>Name editor</menu>: Replaces all occurrences of a player,
  event site or round name.</li>
  </ul>
  <li><menu>Read-Only</menu>: Makes the current database read-only.</li>
  <br>
  <li><menu>Switch to Database</menu>: These commands let you switch between
  the 8 available database slots and the <a Clipbase>clipbase</a>
  database.</li>
  <li>1/2/3/4/5/...</li> Offers a list of recently used databases for
  easy recall.</li>
  <li><menu>Exit</menu>: Exits Scid. </li>
  </ul>
  
  <h3><name Edit>Edit</name></h3>
  <ul>
  <li><menu>Add Variation</menu>: Adds a new empty variation for the
  next move, or for the previous move if there is no next move yet.</li>
  <li><menu>Delete Variation</menu>: Provides a submenu of variations for
  the current move, so one can be deleted.</li>
  <li><menu>Make First Variation</menu>: Promotes a variation to be the
  first variation of the current move.</li>
  <li><menu>Promote Variation to Main line</menu>: Promotes a variation
  to be the main line, swapping it with its parent.</li>
  <li><menu>Try Variation</menu>: Enters <a Moves Trial>trial mode</a> for
  testing a temporary variation without altering the current game.</li>
  <li><menu>Strip</menu>: Strips all comments or variations from the current
  game.</li>
  <li><menu>Undo</menu>: Allows to undo up to 10 recent changes.</li>
  <br>
  <li><menu>Empty Clipbase</menu>: Empties the <a Clipbase>clipbase</a>
  so it contains no games.</li>
  <li><menu>Copy this game to clipbase</menu>: Copies the current game
  to the <a Clipbase>clipbase</a> database. Additionally, the games
  curent <term>PGN notation</term> is added to the system clipboard.</li>
  <li><menu>Paste last clipbase game</menu>: Pastes the active game of
  the <a Clipbase>clipbase</a> to be the active game of the current
  database.</li>
  <br>
  <li><menu>Setup start board</menu>: Sets the starting position for the
  current game.</li>
  <li><menu>Copy position</menu>: Copies the current position as
  <term>FEN notation</term> to the system clipboard.</li>
  <li><menu>Paste start board</menu>: Sets the start board from the current
  text selection (clipboard). This selection has to be a valid
  <term>FEN</term> notation.</li>
  </ul>
  
  <h3><name Game>Game</name></h3>
  <ul>
  <li><menu>New Game</menu>: Resets the active game to an empty state,
  discarding any unsaved changes.</li>
  <li><menu>Load First/Previous/Next/Last Game</menu>: These load the first,
  previous, next or last game in the <a Searches Filter>filter</a>.</li>
  <li><menu>Reload this game</menu>: Reloads the current game, discarding
  any changes made.</li>
  <li><menu>Load Game Number</menu>: Loads the game given its game number
  in the current database.</li>
  <br>
  <li><menu>Save: Replace game</menu>: Saves the current game, replacing
  its original version in the database.</li>
  <li><menu>Save: Add new game</menu>: Saves the current game as a new
  game, appending to the end of the database.</li>
  <br>
  <li><menu>Identify opening</menu>: Finds the deepest
  position in the current game that is in the ECO file.</li>
  <li><menu>Goto move number</menu>: Goes to the specified move number in
  the current game.</li>
  <li><menu>Find novelty</menu>: Finds the first move of the current game
  that has not been played before in the current base.</li>
  </ul>
  
  <h3><name Search>Search</name></h3>
  <ul>
  <li><menu>Reset Filter</menu>: Resets the <a Searches Filter>filter</a>
  so all games are included. This does not affect a filter created by
  an eventually opened <a Tree>tree window</a>.</li>
  <li><menu>Negate filter</menu>: Inverts the filter criteria that are
  not set by an eventually opened <a Tree>tree window</a>.</li>
  <br>
  <li><menu>Current board</menu>: Searches for the
  <a Searches Board>current board</a> position.</li>
  <li><menu>Header</menu>: Searches by <a Searches Header>header</a>
  information such as player names. This filter is cummulative to
  an fiter eventually set by an open <a Tree>tree window</a>.</li>
  <li><menu>Material/Pattern</menu>: Searches by
  <a Searches Material>material</a> or chessboard patterns</a>. This
  filter is cummulative to an fiter eventually set by an open <a
  Tree>tree window</a>.</li>
  <br>
  <li><menu>Using search file</menu>: Searches using
  <a Searches Settings>settings</a> from a SearchOptions file. This
  filter is cummulative to an fiter eventually set by an open <a
  Tree>tree window</a>.</li>
  </ul>
  
  <h3><name Windows>Windows</name></h3>
  <ul>
  <li><menu>Comment Editor</menu>: Opens/closes the
  <a Comment>Comment Editor</a> window.</li>
  <li><menu>Game List window</menu>: Opens/closes the
  <a GameList>Game List window</a>.</li>
  <li><menu>PGN window</menu>: Opens/closes the
  <a PGN>PGN window</a>.</li>
  <li><menu>Tournament Finder</menu>: Opens/closes the
  <a Tmt>Tournament Finder</a> window.</li>
  <br>
  <li><menu>Database switcher</menu>: Opens/closes the
  <a Switcher>Database Switcher</a> window, which lets you switch to
  another database or copy games between databases easily.</li>
  <li><menu>Maintenance window</menu>: Opens/closes the database
  <a Maintenance>maintenance</a> window.</li>
  <br>
  <li><menu>ECO Browser</menu>: Opens/closes the
  <a ECO browser>ECO Browser</a> window.</li>
  <li><menu>Repertoire editor</menu>: Opens/closes the
  <a Repertoire>repertoire editor</a>. Note: since Scid 4.3 this
  function is deprecated in favour for <a TreeMasks>Tree Masks</a>.
  </li>
  <li><menu>Statistics window</menu>: Opens/closes the
  <term>Filter statistics window</term> which gives a win/loss summary
  of the games in the <a Searches Filter>filter.</a></li>
  <li><menu>Tree window</menu>: Opens/closes the <a Tree>tree window</a>.</li>
  <li><menu>Endgame Tablebase window</menu>: Opens/closes the window that
  displays <a TB>tablebase</a> information.</li>
  <li><menu>Correspondence window</menu>: Opens/closes the window for
  for handling correspondence chess games.</li>
  </ul>

  <h3><name Play>Play</name></h3>
  <ul>
  <li><menu>Serious game</menu>: Allows to play an installed
  <term>UCI</term> chess engine in a serious game, ie. in tournament
  conditions.</li>
  <li><menu>Tactical game</menu>: Allows to play the Phalanx chess
  engine at an adjustable level.</li>
  <li><menu>Play on FICS</menu>: Gives access to the Free Internet
  Chess Server (FICS) to play games of chess against human opponents
  or chess engines, observe games, or take part in trainings
  sessions.</li>
  <li><menu>Training</menu>: access various trainings modes available
  in Scid.</li>
  <li><menu>Correspondence Chess</menu>: access the functions for
  <a CCSetupDialog>correspondence chess configuration</a> and <a
  Correspondence>game play</a></li>
  <ul>
	  <li><menu>Configure</menu>: allows <a
	  CCSetupDialog>configuration</a> of the <a
	  Correspondence>correspondence chess</a> subsystem.
	  </li>
	  <li><menu>Observe games</menu>: allows to observe games by
	  fetching them from a website.
	  </li>
	  <li><menu>Open database</menu>: opens the default correspondence
	  chess database (cf. <a CCSetupDialog>configuration</a>)
	  </li>
	  <li><menu>Retrieve games</menu>: Fetch games form a server using
	  the <a CCXfcc>Xfcc</a> protocol.
	  </li>
	  <li><menu>Process inbox</menu>: Processes the correspondence
	  chess <a CCWorkflow>inbox to work in new games and moves</a> into
	  the current database. 
	  </li>
	  <li><menu>Send move</menu>: Transmitts to a server a move using
	  the <a CCXfcc>Xfcc</a> protocol.
	  </li>
	  <li><menu>Resign</menu>: resigns the current game (requires <a
	  CCXfcc>Xfcc</a>.)
	  </li>
	  <li><menu>Claim draw</menu>: claim a draw in the current game (requires <a
	  CCXfcc>Xfcc</a>.)
	  </li>
	  <li><menu>Offer draw</menu>: offer a draw in the current game
	  (requires <a CCXfcc>Xfcc</a>.)
	  </li>
	  <li><menu>Accept draw</menu>: accept the draw offer from the
	  opponent (requires <a CCXfcc>Xfcc</a>.)
	  </li>
	  <li><menu>Game page</menu>: opens the web page associated with a
	  <a CCXfcc>Xfcc</a> game.
	  </li>
	  <li><menu>New eMail Game</menu>: starts a new eMail based game.
	  </li>
	  <li><menu>Mail move</menu>: mails the move to the oponent in an
	  email based game.
	  </li>
  </ul>
  </ul>
  
  <h3><name Tools>Tools</name></h3>
  <ul>
  <li><menu>Analysis engine</menu>: Displays a list of all installed
  chess engines available for analysis to select and start one of
  them as analysis engine 1.</li>
  <li><menu>Analysis engine #2</menu>: Displays a list of all installed
  chess engines available for analysis to select and start one of
  them as analysis engine 2.
  </li>
  <li><menu>Start engine 1</menu>: Starts/stops the chess analysis
  engine, displaying the evaluation of the current position
  in the <a Analysis>analysis window</a>.</li>
  <li><menu>Start engine #2</menu>: Starts/stops a second analysis
  engine.</li>
  <li><menu>Crosstable</menu>: Constructs a tournament
  <a Crosstable>crosstable</a> for the current game. </li>
  <li><menu>Email manager</menu>: Opens/closes the <a Email>email manager</a>
  window, for managing email correspondence games.</li>
  <br>
  <li><menu>Rel. filter graph</menu>: Generates a <a
  FilterGraph>relative filter graph</a> e.g. to investigate popularity
  of the current opening by comparison of the current position against
  the whole database.
  </li>
  <li><menu>Abs. filter graph</menu>:  Generates a <a
  FilterGraph>absolute filter graph</a>
  </li>
  <li><menu>Opening report</menu>: Generates an
  <a Reports Opening>opening report</a> for the current position.</li>
  <li><menu>Piece Tracker</menu>: Opens the <a PTracker>piece tracker</a>
  window.</li>
  <li><menu>Book tuning</menu>: allows to adjust the probability
  values of a moved played in a selectable <a Book>opening book</a>).
  </li>
  <li><menu>Connect hardware</menu>: Allows external hardware to be
  used to enter moves. (E.g.  DGT electronic chessboard, Novag
  Citrine) 
  <ul>
		<li><menu>Configure</menu>: allows  <a HardwareConfig>basic
		parameters</a> to be set for usage of external hardware
		</li>
		<li><menu>Connect Input Engine</menu>: hooks up with hardware
		that supplies an Input Engine compatible driver (e.g. <url
		http://dgtdrv.sourceforge.net>dgtdrv website</url>.)
		</li>
		<li><menu>Connect Novag Citrine</menu>: hooks up with a Novag
		Citrine board.
		</li>
  </ul>
  </li>
  <br>
  <li><menu>Player information</menu>: Displays <a PInfo>player information</a>
  for one of the two players of the current game.</li>
  <ul>
	<li><menu>White</menu>: use the White player of the current game.</li>
	<li><menu>Black</menu>: use the Black player of the current game.</li>
  </ul>
  <li><menu>Player report</menu>: generates a <a Reports Player>player
  report</a>
  <li><menu>Rating graph</menu>: Displays the
  <a Graphs Rating>rating graph</a>.</li>
  <li><menu>Score graph</menu>: Displays the
  <a Graphs Score>score graph</a>.</li>
  <br>
  <li><menu>Export current game</menu>: Saves the current game to a text
  file in PGN, HTML or LaTeX format. See the <a Export>export</a> help
  page.</li>
  <li><menu>Export all filter games</menu>: Saves all games in the
  search <a Searches Filter>filter</a> to a text file in PGN, HTML or
  LaTeX format. See the <a Export>export</a> help page.</li>
  <br>
  <li><menu>Import <a PGN>PGN</a> game</menu>: Opens the <a Import>Import window</a>
  for entering a game by typing or pasting its text in
  <a PGN>PGN format</a>.</li>
  <li><menu>Import file of <a PGN>PGN</a> games</menu>: Imports a whole file containing
  games in <a PGN>PGN</a> format to the current database. Note, that several PGN
  files can be selected in this dialogue at once.</li>
  </ul>
  
  <h3><name Options>Options</name></h3>
  <p>
  This menu provides entries for setting most of Scid's configurable
  options.
  The <menu>Save options</menu> entry saves the current options to the
  file "<b>~/.scid/config/options.dat</b>" (or "<b>options.dat</b>" in the
  sub directory "<b>config</b>" of the Scid executable programs for Windows
  users); this file is loaded each time you start up Scid.
  </p>
  
  <h3><name Help>Help</name></h3>
  <p>
  This menu contains help functions, and access to the tip of the day
  window or the startup window which provides information about the
  files Scid loaded when it started.
  </p>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}


####################
### Entering moves help:

set helpTitle(Moves) "Entering moves"
set helpText(Moves) {<h1>Entering chess moves</h1>
  <p>
  In Scid, you can enter the moves for a game using the
  mouse or the keyboard. As you move the mouse over a square,
  it and one other square will change color if there is a legal
  move to or from that square. This is the <term>suggested move</term>.
  To make this move simply click the <term>left</term> mouse button.
  You can turn off move suggestion using the Options menu if it annoys you.
  </p>
  <p>
  To make any move other than the suggested move, you can use
  the <term>left</term> mouse button: just press the button over one square,
  and release it over the other square.
  </p>
  <p>
  If you want to enter a variation without being asked for a
  confirmation, use the middle mouse button of the mouse to enter the
  move.
  </p>
  <p>
  Depending on <menu>Options / Moves / Highlight last moves</menu> and
  the settings made there, Scid will mark the last move by a coloured
  frame around the involved fields.
  </p>
  
  <h4>Retracting a move</h4>
  <p>
  To take back a move, press the right mouse button, Control + Delete
  or Control + Backspace. This goes back one move, and deletes the
  move if it is the last in the game or variation.
  </p>
  
  <h4>Replacing old moves</h4>
  <p>
  When you enter a move at a point in the game where a move already exists,
  Scid will present a dialog box asking if you really want to replace the
  old move (the old move and all moves after it will be lost), or want
  to add the new move as a variation instead. Some people may find this
  dialog box annoying and always want to replace old moves, so it can be
  turned off with the <menu>Options: Moves</menu> menu option
  "<i>Ask before replacing moves</i>".
  </p>

  <h4>Marking fields and directions</h4>
  <p>
  colored squares and arrows can be entered directly on the board
  without the use of the <a Comment>Comment editor</a> by using the mouse
  buttons. For colored squares one can Shift-click on the square in
  question. Shift-Left button markes the square in green, the middle
  button in yellow, the right button in red. To draw arrows one can
  Ctrl-click on the source and target squares. The left mouse button
  again results in a green, the middle in a yellow and the right mouse
  button in a red arrow.
  </p>
  
  <h4><name Trial>Trial mode</name></h4>
  <p>
  If you are studying a game and reach a position where you want to try
  an alternative variation on the board without altering the game, select
  <b>Try variation</b> from the <menu>Edit</menu> menu to enter trial
  mode. In this mode, you can make temporary moves and changes to the
  game, then return to the original position when you exit trial mode.
  </p>
  
  <h3><name Mistakes>Correcting mistakes</name></h3>
  <p>
  If you are entering a game and suddenly see an incorrect move several
  moves earlier, it is possible to correct it without losing the extra
  moves you have added. The only way is to edit the <a PGN>PGN</a> representation
  of the game: open the <a Import>Import</a> window, select "Paste current
  game", correct the incorrect move, then select "Import".
  </p>
  
  <h3>Keyboard move entry</h3>
  <p>
  To enter moves at the keyboard, simply press letter and digit
  keys. Note that accepted moves should be in <term>SAN notation</term>,
  <i>without</i> the capture symbol (x) or the promotion symbol (=).
  Moves are matched case-insensitively, so you can type
  [n][f][3] instead of Nf3, for example -- but see the note below
  about conflicts with pawn moves.
  </p>
  <p>
  To ensure that no move is a prefix of any other move, the notation
  for kingside and queenside castling is [O][K] and
  [O][Q] respectively, instead of the usual O-O and O-O-O.
  </p>
  <p>
  As you enter a move, the status bar will show the list of matching moves.
  You can press the [space] bar at any time to choose the first
  matching move in the list and add it to the game.
  To delete a character, press [Backspace] or [Delete].
  </p>
  <p>
  <b>Note</b> that a lower-case letter matches to a pawn first, so a
  [b] can match to a pawn or Bishop, but if there is a conflict
  you must use a capital [B] for the Bishop move.
  </p>
  
  <h4>Auto-Completion</h4>
  <p>
  In the Options menu, you can turn on or off <term>Auto-Completion</term>
  of moves.
  With auto-completion, a move is made as soon as you have typed enough
  to distinguish it from any other legal move. For example, with
  auto-completion, you would only need to type [n][f] instead
  of [n][f][3] for <b>Nf3</b> in the starting position.
  </p>
  
  <h3><name Null>Entering null moves</name></h3>
  <p>
  <a Annotating Null>Null</a> (empty) moves can be useful in variations, where
  you want to skip a move for one side. You can enter a null move with the
  mouse by capturing one king with the other king, or with the keyboard by
  typing "<b>--</b>" (that is, pressing the minus key twice).
  </p>
  
  <h3><name Informant>Entering common annotation symbols</h3>
  <p>
  You can also add common <a NAGs>annotation symbols</a> using the keyboard
  in the main window, without needing to use the <a Comment>comment editor</a>
  window. The following list shows which symbols you can add, and their
  keyboard shortcuts:
  <ul>
  <li> !  : [!][Return] </li>
  <li> ?  : [?][Return] </li>
  <li> !? : [!][?][Return] </li>
  <li> ?! : [?][!][Return] </li>
  <li> !! : [!][!][Return] </li>
  <li> ?? : [?][?][Return] </li>
  <li> </li>
  <li> +- : [+][-] </li>
  <li> +/-: [+][/] </li>
  <li> += : [+][=] </li>
  <li> =  : [=][Return] </li>
  <li> -+ : [-][+] </li>
  <li> -/+: [-][/] </li>
  <li> =+ : [=][+] </li>
  </ul>
  <b>Note</b> Scid uses some of these symbols for automatic
  annotations, also. To this end, these symbols have to be associated
  with a certain pawn value. These pawn values can be set via Options
  / Game information / Configure Informant values. Note that since
  Scid 4.0 many NAGs can be displayed symbolically if your system
  suports UTF-8 properly. The connection between a NAGs numeric value
  and its symbolic representation within Scid is given on the page <a
  NAGs>Standard NAG values</a> which can be accessed e.g. by Ctrl-N
  from the <a Comment>Comment editor</a>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}


########################################
### Searches help screen:

set helpTitle(Searches) "Searches"
set helpText(Searches) {<h1>Searches in Scid</h1>
  <p>
  Scid can perform many different types of search on a database.
  The three main types of search are:
  <ul>
  <li><b>1)</b> for the current board, </li>
  <li><b>2)</b> for specified material and piece patterns, and </li>
  <li><b>3)</b> by header information such as players, result, date. </li>
  </ul>
  <p>
  In addition to these, there is also an automatic search mode called the
  <a Tree>Tree window</a> which is explained separately.
  </p>
  
  <h3><name Filter>The Search Filter</name></h3>
  <p>
  Searches in Scid are based on the concept of a <term>filter</term>.
  The filter represents a subset of the current database; at any time,
  each game is either included in or excluded from the filter.
  </p>
  <p>
  With each type of search, you can choose to restrict the existing
  filter, add to it, or ignore it and search the whole database.
  This choice permits complex searches to be built up incrementally.
  </p>
  <p>
  You can also copy all games in the filter of one database to another,
  using the <a Switcher>database switcher</a> window.
  </p>
  <p>
  With exact position, <a Tree>tree</a> or material/pattern searches, the
  move number of the first matching position of each matching game is
  remembered, so when you load each game it will show the matching position
  automatically.
  </p>
  <p>
  <b>Note</b> that searches only apply to the main line moves of a game,
  not to any moves in variations.
  </p>
  
  <h3><name Board>Search: Current Board</name></h3>
  <p>
  This search finds games that contain the current displayed position,
  ignoring castling and <i>en passant</i> rights.
  </p>
  <p>
  There are four board search types available. All four require a position
  to have the same exact material and side to move for a match.
  The types are:
  <ul>
  <li> [1] exact (the two positions must match on every square), </li>
  <li> [2] pawns (the pawn structure must match exactly, but other pieces
  can be anywhere), </li>
  <li> [3] files (the number of white and black pawns on each file must match
  exactly, but other pieces can be anywhere), and </li>
  <li> [4] material (pawns and pieces can be anywhere). </li>
  </ul>
  <p>
  The pawns search is useful for studying openings by pawn structure, and
  the files and material searches are useful for finding similar positions
  in an endgame.
  </p>
  <p>
  To search for an arbitrary position, you can set the position first
  (from the <menu>Edit: Setup Start Board</menu> menu) and then
  start the search.
  </p>
  <p>
  You can request that the search look in variations (instead of only
  examining actual game moves) by selecting the <b>Look in variations</b>
  checkbox, but this may make the search much slower if your database
  is large and has many games with variations.
  </p>
  
  <h3><name Material>Search: Material/Pattern</name></h3>
  <p>
  This search is useful for finding endgame or middlegame themes.
  You can specify minimum and maximum amounts of each type of material,
  and find patterns such as a Bishop on f7, or a pawn on the f-file.
  </p>
  <p>
  A number of common material and pattern settings are provided, such
  as Rook vs. Pawn endings, or isolated Queens pawns.
  </p>
  <p>
  <b>Hints:</b><br>
  The speed of pattern searches can vary widely. You can reduce the time
  needed for a search by setting restrictions intelligently. For example,
  if you set the minimum move number to 20 for an ending, all games that
  end in under 20 moves can be skipped.
  </p>
  
  <h3><name Header>Search: Header</name></h3>
  <p>
  This search can be used to find aspects of the game that are stored
  in the header (such as date, result, names, flags and ratings), so
  it does not require any moves to be decoded.
  </p>
  <p>
  For a game to match a Header search, <b>all</b> fields that you
  specify must match.
  </p>
  <p>
  The name fields (White, Black, Event, Site and Round) match on any text
  inside the name, case-insensitive and ignoring spaces.
  </p>
  <p>
  You can do case-sensitive wildcard searches for the White, Black, Event,
  Site and Round fields (with <b>?</b> representing one character and
  <b>*</b> representing zero or more characters) by putting the
  search text in double quotes. For example a search for the site <b>USA</b>
  will find American cities and also <b>Lausanne SUI</b>, which is probably
  not what you wanted! A search for the site <b>"*USA"</b> (remember to
  use the double-quotes) will only match cities in the United States.
  </p>
  <p>
  If you are searching for a particular player (or pair of opponents) as White
  or Black and it does not matter what color they played, select the
  <b>Ignore Colors</b> option.
  </p>
  <p>
  Additionally, an Annotator may be searched case insensitively. Note
  that this function requires the <b>Annotator</b> header field to be
  set properly. The checkbox <menu>annotated games only</menu> acts as
  a logical OR filter for the flags <b>Comments, Variations,
  Anotations</b>, that is can be used to select only those games that
  got any type of annotations.
  </p>
  <p>
  Finally, the Header search can be used to find any text
  (case-sensitive and without wildcards) in the <a PGN>PGN</a> representation of
  each game.  You may enter up to three text phrases, and they must
  all appear in a game for it to be a match.  This search is very
  useful for searching in the comments or extra tags of a game (such
  as <b>lost on time</b> or <b>Annotator</b>), or for a move sequence
  like <b>Bxh7+</b> and <b>Kxh7</b> for a bishop sacrifice on h7 that
  was accepted.  However, this type of search can be <i>very</i> slow
  since all the games that match other criteria must be decoded and
  scanned for the text phrases.  So it is a good idea to limit these
  searches as much as possible.  Here are some examples.  To find
  games with under-promotions to a rook, search for <b>=R</b> and also
  set the <b>Promotions</b> flag to Yes.  When searching for text that
  would appear in comments, set the <b>Comments</b> flag to Yes.  If
  you are searching for the moves <b>Bxh7+</b> and <b>Kxh7</b>, you
  may want to restrict the search to games with a 1-0 result and at
  least 40 half-moves, for example, or do a material/pattern search
  first to find games where a white bishop moves to h7.
  </p>
  <p>
  <b>Note</b> If a search by <a ECO>ECO</a> code is performed, games
  that have no ECO code attached are ignored.
  </p>
  
  <h3><name Settings>Saving search settings</name></h3>
  <p>
  The Material/Pattern and Header search windows provide a
  <term>Save settings</term> button. This lets you save the current
  search settings for later use, to a <term>SearchOptions</term> file
  (suffix .sso).
  To search using a previously saved SearchOptions (.sso) file, select
  <menu>Open</menu> from the <menu>Search</menu> menu.
  </p>
  
  <h3>Search times and skipped games</h3>
  <p>
  Most searches produce a message indicating the time taken and the number
  of games that were <term>skipped</term>. A skipped game is one that can
  be excluded from the search without decoding any of its moves, based on
  information stored in the index. See the help page on
  <a Formats>file formats</a> for more information.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


#################
### Clipbase help:

set helpTitle(Clipbase) "The Clipbase"
set helpText(Clipbase) {<h1>The Clipbase database</h1>
  <p>
  In addition to the databases you have open, Scid provides
  a <term>clipbase</term> database, which is just like any other database
  except that it exists in memory only and has no files for permanent storage.
  </p>
  <p>
  The clipbase is useful as a temporary database, for merging
  the results of searches on more than one database or for treating the
  results of a search as a separate database.
  </p>
  <p>
  For example, assume you want to prepare for an opponent and have searched
  a database so the <a Searches Filter>filter</a> contains only games where
  the opponent played White.
  You can copy these games to the clipbase (by dragging from their database
  to the clipbase in the <a Switcher>database switcher</a> window),
  switch to the clipbase database, and then open
  the <a Tree>Tree window</a> to examine that players repertoire.
  </p>
  <p>
  Note that you can copy games in the filter of one database directly to another
  opened database (without needing the clipbase as an intermediary
  location) using the <a Switcher>database switcher</a> window.
  </p>
  <p>
  Note that the clipbase <i>cannot</i> be closed; selecting the
  <menu>File: Close</menu> command while in the clipbase is equivalent
  to <menu>Edit: Reset Clipbase</menu> which empties the clipbase.
  </p>
  <p>
  The clipbase has a limit of 100,000 games at any time, since it exists in
  memory only.
  </p>
  
  <p><footer>(Updated: Scid 3.6.8,March  2007)</footer></p>
}

#################################
### Variations and comments help:

set helpTitle(Annotating) "Annotating games"
set helpText(Annotating) {<h1>Annotating games</h1>
  <p>
  Scid lets you add notes to games. There are three types of
  annotation you can add after a move: symbols, a comment, and
  variations. This section describes manual annotations, see the <a
  Analysis Annotating>Analyis</a> for engine supported analysis.
  </p>
  
  <h3>Symbols and comments</h3>
  <p>
  Symbols are used to indicate an evaluation of the position (such as
  "+-" or "=") or point out good ("!") and bad ("?") moves, while
  comments can be any text. To add symbols and comments to a game, use
  the <a Comment>Comment editor</a> window.
  There is also a help page listing <a NAGs>standard symbol values</a>.
  </p>
  <p>
  Note that each move can have more than one annotation symbol, but only
  one comment. A comment before the first move of the game is printed as text
  before the start of the game.
  </p>
  
  <h3><name Vars>Variations</name></h3>
  <p>
  A <term>variation</term> of a move is an alternative sequence of
  moves at a particular point in a game. Variations can contain
  comments and even recursively have sub-variations. The buttons
  above the board with a "<b>V</b>" symbol, and commands in the
  <menu>Edit</menu> menu, can be used to create, navigate and edit
  variations.
  </p>
  
  <h4>Keyboard shortcuts</h4>
  <p>
  When a move has variations, they are shown in the game information
  area. The first will be named <b>v1</b>, the second <b>v2</b>, etc.
  You can click on a variation to enter it, or press "<b>v</b>". In
  the latter case the <term>Variation</term> window will pop up
  allowing to select a variation using the cursor keys. Setting
  Options / Moves / Show variation window will pop up this window
  automatically every time a move with a variation is found while
  navigating through the game using the cursor keys. In the variation
  window one can enter the variation by selecting it with the up/down
  cursor keys and hitting enter or clicking on it with the mouse. This
  allows for navigation through the game with the cursor keys only.
  To leave a variation, you can use the "<b>z</b>" shortcut key. At
  the beginning of the variation, the up arrow can be used
  alternatively.
  </p>
  <p>
  Note that in case a game has variations you can also enter the
  variation by just playing the move of the variation in question. To
  explicitly add a new variation starting with the same move (e.g. to
  simplify deeply nested variation trees) press Ctrl-A to explicitly
  add a variation and only then play the move.
  </p>
  <p>
  Setting Options / Moves / Show arrows for variations may be set to
  display the existing variations on the main board. This can be
  especially helpful on computers with small displays (Netbooks)
  and/or in conjuction with disabling both PGN window and game
  informaion area (Options / Windows / Show game information).
  </p>
  
  <h3><name Null>Null moves</name></h3>
  <p>
  Sometimes, you may find it useful in a variation to skip over a move
  for one side. For example, you may want to add the move 14.Bd3 to
  a variation and point out that it threatens 15.Bxh7+ Kxh7 16.Ng5+
  with an attack. You can do this by making a <term>null move</term>
  between 14.Bd3 and 15.Bxh7+, in the above example. A null move is
  displayed as "<b>--</b>" and can be inserted using the mouse by making
  an illegal move of capturing one king with the other, or from the
  keyboard by typing "<b>--</b>" (two minus signs).
  </p>
  <p>
  Note that null moves are not a part of the <a PGN>PGN</a> standard, so if you
  export games with null moves to a <a PGN>PGN</a> file, Scid will provide (among
  other export options) an option to preserve null moves or convert them
  to comments for compatibility with other software.
  See the <a Export>Exporting</a> help page for more details.
  </p>
  <p>
  Also note, that Scid is capable of handling the move <term>Z0</term>
  as a null move, a notation that is common in some commercial chess
  applications.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

###############################
### Comment editor window help:

set helpTitle(Comment) "Comment Editor window"
set helpText(Comment) {<h1>The Comment Editor window</h1>
  <p>
  The Comment Editor window lets you add or edit comments and symbolic
  annotation symbols for moves in the active chess game.
  </p>
  
  <h3>Annotation symbols</h3>
  <p>
  Scid uses the <a Author Related>PGN standard</a> for annotation
  symbols, accepting <a NAGs>NAG (numeric annotation glyph)</a> values
  for annotations.  Some of the most common symbols (such as "!" or
  "+-") are displayed as symbols, and have a button in the comment
  editor window for fast entry. For other symbols, you can enter the
  appropriate numeric NAG value which is a number from 1 to 255.  For
  example, the NAG value 36 means "White has the initiative" and will
  be displayed as "$36" in the <a PGN>PGN text</a> of the game. If
  your system properly supports UTF-8 character sets many of the NAG
  symbols can be displayed by their <a NAGs>glphys</a>. 
  </p>
  <p>
  See the help page of <a NAGs>NAG values</a> for NAG values defined
  by the <a PGN>PGN</a> standard. This page can be accessed from the
  Comment editor by pressing Ctrl-N.
  </p>
  <p>
  <b>Hint:</b> You can add the common move evaluation symbols (!, ?,
  !!, ??, !? and ?!) while in the main window, without needing to use
  the comment editor window, by typing the symbol followed by the
  [Return] key.  This is especially useful if you are <a
  Moves>entering chess moves</a> using the keyboard. Also note that
  the <a PGN>PGN window's</a> context menu offers many of the most
  common symbols for direct annotation.
  </p>
  
  <h3>Comments</h3>
  <p>
  You can edit comments by typing in the text area provided and using
  the Clear, Revert and Store buttons. You do not need to press the
  Store button to update a comment; it is automatically updated
  whenever you leave the comment editor window e.g. by activating
  another window or tab.
  </p>
  <p>
  You can move through the moves of a game directly from within the
  comment editor by pressing Alt and the left/right cursor keys. To
  jump from the NAG entry and the free text entry Alt-N may be used
  for speedy navigation.
  </p>
  <p>
  <b>Hint:</b> To add a comment before the first move in a variation,
  go to the first move and hit the left arrow key once and then insert
  the comment. Also note that by pressing Ctrl-A a variation can be
  added right from within the comment editor. This eases creation
  of a pre move comment for the first move of a variation.
  </p>
  
  <h3>Coloring squares</h3>
  <p>
  Colored markers may be added to the chess board by drawing them on
  the little helper board that can be exapanded left of the comment
  window. The display of this board is toggled by <button tb_coords>.
  Scid will remember the state of this board if options are saved.
  Once the little helper board is expanded, select the marker to use
  from the buttons below the board, and the color from the color
  palette above and just click on the square to mark.
  </p>
  <p>
  A square may also be colored by using a special embedded command
  which can appear anywhere in a comment. The command format is:
  </p>
  <ul>
  <li><b>[%draw marker,square,color]</b><li>
  </ul>
  <p>
  where <b>square</b> is a square name like d4 and <b>color</b> is any
  recognized color name (such as red, blue4, darkGreen, lightSteelBlue, etc)
  or RGB code (a <b>#</b> followed by six hexadecimal digits, such as #a0b0c8).
  If the color is omitted, it defaults to <red>red</red>.
  <b>marker</b< may be full,circle,disk,x,+,-,?,!,= or the numbers
  1..9.
  </p>
  <p>
  A comment may contain any number of color commands, but each must have
  in its own <b>[%draw...]</b> tag.
  For example, the comment text</p>
  <p>
  Now d6 [%draw full,d6,red] is weak and the knight can attack it
  from b5. [%draw circle,b5,#000070]
  </p>
  <p>
  will color d6 <red>red</red> and b5 with the dark-blue color
  <darkblue>#000070</darkblue>.
  </p>
  
  <h3>Drawing arrows</h3>
  <p>
  You can draw an arrow from one square to another using a special
  comment command similar to the for coloring squares described above.
  The format is:
  </p>
  <ul>
  <li><b>[%arrow fromSquare toSquare color]</b><li>
  </ul>
  <p>
  where <b>fromSquare</b> and <b>toSquare</b> are square names like d4
  and <b>color</b> is any recognized color name (such as red, blue4, etc)
  or RGB code (like #a0b0c0).
  If the color is omitted, it defaults to <red>red</red>.
  </p>
  <p>
  For example, the comment text
  </p>
  <p>
  The c3-knight and c4-bishop control the weak d5 square.
  [%arrow c3 d5 red] [%arrow c4 d5 blue]
  </p>
  <p>
  will draw a red arrow from c3 to d5 and a blue one from c4 to d5.
  </p>

  <p>
  <b>Note</b>
  Colored squares and arrows can be entered directly on the board
  without the use of the Comment editor by using the mouse
  buttons. For colored squares one can Shift-click on the square in
  question. Shift-Left button markes the square in green, the middle
  button in yellow, the right button in red. To draw arrows one can
  Ctrl-click on the source and target squares. The left mouse button
  again results in a green, the middle in a yellow and the right mouse
  button in a red arrow.
  </p>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}

####################
### Crosstable window help:

set helpTitle(Crosstable) "Crosstable window"
set helpText(Crosstable) {<h1>The Crosstable window</h1>
  <p>
  The crosstable window shows the tournament crosstable for the
  current game. Each time you refresh the crosstable window (by
  pressing its Refresh button, by pressing the <b>Return</b> key in the
  crosstable window, or by typing <b>Control+Shift+X</b> in the
  <a MainWindow>main</a> or <a GameList>game list</a> windows), Scid
  searches for all games in the same tournament as the current game.
  </p>
  <p>
  Any game played up to <b>twelve months before or after</b> the current game,
  with the <b>exact same Event and Site tags</b>, is considered to be in
  the tournament.
  </p>
  <p>
  A single left-mouse button click on any result in the crosstable
  loads the corresponding game.
  You can add all the games in the tournament to the
  <a Searches Filter>filter</a>
  with the <b>Add to filter</b> button in the crosstable window.
  </p>
  
  <h4>Crosstable window menus</h4>
  <p>
  The <menu>File</menu> menu lets you print the current table to a file
  in plain text, LaTeX or HTML table format.
  </p>
  <p>
  The <menu>Display</menu> menu allows you to choose the table format:
  <b>All-play-all</b>, <b>Swiss</b> or <b>Knockout</b> or <b>Auto</b>.
  </p>
  <p>
  The all-play-all format (for round-robin-type events) has a limit of 30
  players, but the Swiss format (for tournaments with many players) can
  display up to 200 players and up to 20 rounds. <b>Auto</b>, which chooses
  the best format automatically for each tournament, is the default.
  </p>
  <p>
  Note that Scid uses the <b>Round</b> tag of each game to produce a Swiss
  crosstable, so you will not see any games in the Swiss table for a tournament
  if its games do not have numeric round values: 1, 2, 3, etc.
  </p>
  <p>
  The Display menu also lets you customize the data presented to
  include or exclude ratings, countries and player titles. You can also
  choose whether color allocations in Swiss tables are displayed.
  </p>
  <p>
  The <b>Separate score groups</b> option only affects the layout of the table
  when the players are sorted by score: it causes a blank line to be inserted
  between each group of players with the same score.
  </p>
  <p>
  The <menu>Sort</menu> menu allows you to sort the players by name, rating
  or score; by score is the default.
  </p>
  <p>
  The <menu>Color</menu> menu lets you turn color (hypertext) display on or off.
  Since it can take a long time to format and display large crosstables in
  hypertext, selecting <b>Plain text</b> for large events will save a
  lot of time.
  However, in plain text mode you cannot click on players or games.
  </p>
  
  <h4>Duplicate games in crosstables</h4>
  <p>
  To get good results with the crosstable, you should mark duplicate games
  for deletion and your games should have consistent spelling of player,
  site and event names.
  See the <a Maintenance>database maintenance</a> page for help on
  deleting duplicate games and editing (or spellchecking)
  player/event/site names.
  </p>
  
  <p><footer>(Updated: Scid 3.6.15, May 2007)</footer></p>
}


####################
### Database switcher help:

set helpTitle(Switcher) "Database Switcher"
set helpText(Switcher) {<h1>The Database Switcher window</h1>
  <p>
  The Database Switcher window provides a view which makes it easy to
  switch between databases or copy games between databases.
  The name, <a Searches Filter>filter</a> state and graphic type icon
  of each database is displayed, and the active database is highlighted
  with a yellow background.
  </p>
  <p>
  You can open the database switcher window from the <menu>Windows</menu> menu,
  or by its shortcut key: <b>Control+D</b>.
  </p>
  <p>
  To copy all the filtered games in one database to another, drag with the
  left mouse button from the source base to the target base. You will then
  see a confirmation dialog (if the target database is not the
  <a Clipbase>clipbase</a>) if the games can be copied, or an error message
  if the games cannot be copied (for example, if a selected database is not
  open).
  </p>
  <p>
  Pressing right mouse button over a database produces a popup menu applying
  to that database, from which you can change the database type icon or
  reset its <a Searches Filter>filter</a>. You can also use this menu to
  change the orientation of the window (to arrange the database slots
  vertically or horizontally) which is useful for smaller screens.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


####################
### File Finder window help:

set helpTitle(Finder) "File Finder window"
set helpText(Finder) {<h1>The File Finder window</h1>
  <p>
  The <term>File Finder</term> helps you find files of any type you can
  use in Scid: databases, <a PGN>PGN</a> files, <a EPD>EPD</a> files,
  and <a Repertoire>repertoire</a> files.
  </p>
  <p>
  The Finder shows useful information about each file, such as its size
  (see below) and date of last modification. You can open any displayed
  file by selecting it with a single left mouse button click.
  </p>
  
  <h3>Looking in subdirectories</h3>
  <p>
  When you want to find all files in all subdirectories of the current
  directory, turn on the <b>Look in subdirectories</b> checkbox. This
  will make Scid recursively examine every subdirectory for files that
  can be opened in Scid. This can take a long time if there are many
  subdirectories, so you may not want to do it for a directory near the
  root of the file system. You can interrupt the file search by pressing
  the <b>Stop</b> button.
  </p>
  
  <h3>File sizes</h3>
  <p>
  The meaning of a file size displayed by the Finder depends on the file
  type. For Scid databases and <a PGN>PGN</a> files, it is the number of games. For
  EPD files, it is the number of positions. For repertoire files, it is
  the number of (include or exclude) lines.
  </p>
  <p>
  For all file types except Scid databases, the file size is an estimate
  taken by examining only the first 64 kilobytes of the file, so the size
  may not be correct for files larger than 64 kb. Estimate sizes are shown
  with a tilde (~) to show they are not exact.
  </p>

  <p>
  For easy manipulation of Scid databases, the Finder offers a context
  menu. From this menu, accessible by a right mouse click as usual,
  the following functions can be performed
  <ul>
      <li><term>Open</term> will open the file in question, this is
      the same as just clicking on the file with the left mouse
      button.</li>
      <li><term>Backup</term> copies the file to its original name
      appended by the current date and time.</li>
      <li><term>Copy</term> copies the selected database to a new
      location.</li>
      <li><term>Move</term> moves the selected database to a new
      location.</li>
      <li><term>Delete</term> deletes the selected database.</li>
   </ul>
   These functions are especially helpful for Scid databases as these
   consist of several files.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Tournament Finder window help:

set helpTitle(Tmt) "Tournament Finder window"
set helpText(Tmt) {<h1>The Tournament Finder window</h1>
  <p>
  The <term>Tournament Finder</term> lets you find tournaments in the
  current database. It scans all the database games and collates data
  about the tournaments found. Note that two games are considered to
  be in the same tournament if they have the same Event tag, same Site
  tag and were played within three months of each other.
  </p>
  <p>
  You can limit the list of tournaments by the number of players and
  games, date, mean Elo rating and country, by editing the fields below
  the tournament list and then pressing the <b>Update</b> button.
  </p>
  <p>
  The displayed list can be sorted by date, number of players, number
  of games, mean Elo rating, site, event or the surname of the winner.
  Select the category from the <menu>Sort</menu> menu or click on a
  column title to change the sort field.
  </p>
  <p>
  To load the first game of any displayed tournament, just click the
  left mouse button when its line is highlighted. This will also
  update the <a Crosstable>Crosstable</a> window if it is open.
  If you press the right mouse button instead, the game will be loaded
  and the Crosstable window will be opened even if it is closed.
  </p>
  <p>
  To speed up the tournament searching process, it is a good idea to
  set a fairly small date range (like a few years at most) or select
  a particular country (by its three-letter standard code). Doing
  these will greatly reduce the number of games Scid has to consider
  when trying to form tournaments out of the games in the database.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### GameList window help:

set helpTitle(GameList) "Game List window"
set helpText(GameList) {<h1>The Game List window</h1>
  <p>
  The Game List window displays a one-line summary for each game included
  in the current <term>filter</term>.
  </p>
  
  <h3>Navigating the game list</h3>
  <p>
  You can scroll the game list using the slider bar or the four
  buttons under the list.
  You can also use the [Home], [End],
  [Page Up], [Page Down] and arrow keys to scroll
  using the keyboard.
  </p>
  <p>
  You can find the next game in the list which has certain text in its
  White, Black, Event or Site field, using the <b>Find text</b> box.
  </p>
  
  <h3>Actions on games in the list</h3>
  <p>
  To load a game from the game list, double-click the left mouse button
  on the game.
  Clicking the middle mouse button shows the initial moves of a game;
  this can be useful for checking a games opening before loading it.
  </p>
  <p>
  The right mouse button produces a menu for the selected game, in which
  you can browse or merge the game (see below), delete (or undelete) the
  game, or exclude it from the filter.
  Note that deleting a game only turns on its delete flag; it will remain in
  the database until you <a Compact>compact</a> it.
  </p>
  
  <h3>Configuring the game list</h3>
  <p>
  Click the left or right mouse button on a column title to configure the
  game list. You can alter widths, add or remove columns, and change
  the color for each column.
  </p>
  <p>
  If you only want to change the width of a column, there is a shortcut:
  while pressing the <b>Control</b> (or <b>Shift</b>) key, pressing
  the left mouse button on the column title will make it narrower
  and pressing the right mouse button will make it wider.
  </p>
  
  <h3>Altering the size of the game list</h3>
  <p>
  The size of the game list window is stored in the options file
  whenever you save options.
  So if you want the game list to show 10 games by default, just resize
  the game list window and then select <menu>Save options</menu>
  from the <menu>Options</menu> menu.
  </p>
  
  <h3><name Browsing>Browsing and merging games</name></h3>
  <p>
  The game list right-mouse menu (and some other windows, such as the
  <a Reports Opening>opening report</a> window and the
  <a Tree Best>best games list</a> of the <a Tree>tree</a> window)
  provide the choice of loading, browsing or merging a game.
  </p>
  <p>
  When <term>Browse game</term> is selected, the moves of the selected
  game (without comments or variations) will be displayed in a separate
  window. This is a useful way of previewing another game without
  affecting the currently loaded game. The size of this window may be
  changes by +/- keys or Ctrl-Mousewheel.
  </p>
  <p>
  The <term>Merge game</term> feature provides a way to include the
  selected game as a variation of the current game. Scid finds the
  deepest point where the selected game differs from the current
  game (taking transpositions into account) and adds a variation
  for the selected game at that position. The selected game can also be merged
  with the current game of another opened base (this base must not be set read only).
  You can change the number
  of moves of the selected game to be shown, depending on whether you
  are interested in adding the whole game or just its opening phase.
  </p>
  
  <p><footer>(Updated: Scid 3.7.2, april 2009)</footer></p>
}


####################
### Import window help:

set helpTitle(Import) "Import window"
set helpText(Import) {<h1>The Import window</h1>
  <p>
  Scids Import window provides an easy way for you to paste a game
  in <a PGN>PGN format</a> into Scid from some other application or window.
  </p>
  <p>
  The large white frame in the window is where you type or paste
  the text of the game in <a PGN>PGN</a> format, and the gray frame below it
  provides feedback of any errors or warnings.
  </p>
  
  <h3>Editing the current game with the Import window</h3>
  <p>
  The Import window also doubles as a convenient way to make a few changes
  to the current game: you can paste the current game into the
  Import window (with the <b>Paste current game</b> button), edit the
  text, and click <b>Import</b> when done.
  </p>
  
  <h3>PGN tags in the Import window</h3>
  <p>
  Scid expects to see <a PGN>PGN</a> header tags such as
  <ul>
  <li> <b>[Result "*"]</b> </li>
  </ul>
  before any moves, but you can just paste in a game fragment like
  <ul>
  <li> <b>1.e4 e5 2.Bc4 Bc5 3.Qh5?! Nf6?? 4.Qxf7# 1-0</b> </li>
  </ul>
  without any header tags and Scid will import it.
  </p>
  
  <h3>Using <a PGN>PGN</a> files in Scid</h3>
  <p>
  If you want to use a <a PGN>PGN</a> format file in Scid but do not
  want to convert it with <a Pgnscid>pgnscid</a> first, there are two
  possible ways.
  </p>
  <p>
  First, you can import the games in the file to an existing database
  with the <menu>Tools: Import file of <a PGN>PGN</a> games...</menu> menu command.
  </p>
  <p>
  The alternative is to open the <a PGN>PGN</a> file directly in Scid. However, PGN
  format files are opened read-only and consume more memory than a
  comparable Scid database, so this is only recommended for relatively
  small <a PGN>PGN</a> files.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Exporting help:

set helpTitle(Export) "Exporting games"
set helpText(Export) {<h1>Exporting games</h1>
  <p>
  You can use commands under the <menu>Tools</menu> menu to export the
  current game or all games in the current filter to a text file.
  </p>
  <p>
  Four text file formats are available: <a PGN>PGN</a> (portable game
  notation), HTML (for web pages), HTML and JavaScript (for
  interactive web pages) and LaTeX (a popular typesetting system).
  </p>
  <p>
  When exporting, you can choose to create a new file, or add the
  games to an existing file of games exported by Scid.
  </p>
  
  <h3>Diagrams</h3>
  <p>
  When exporting in HTML or LaTeX format, Scid will automatically add
  a diagram wherever a diagram <a NAGs>nag</a> ("D") or a <a
  Comment>comment</a> that starts with the character "#" appears in
  the game.
  </p>
  
  <h3><name Null>Null moves in <a PGN>PGN</a> Export</name></h3>
  <p>
  Scid allows <a Annotating Null>null (empty) moves</a> to be stored
  in games, as they can be helpful when annotating games using
  variations.  However, the <a PGN>PGN</a> standard has no null move concept. So
  if you export Scid games with null moves to a <a PGN>PGN</a> file, other
  PGN-reading software will not be able to read the null moves.
  </p>
  <p>
  To solve this problem, Scid provides an extra option,
  <b>Convert null moves to comments</b>, when exporting games in <a PGN>PGN</a> format.
  If you want to create a <a PGN>PGN</a> file that other software can use, turn this
  option on and variations containing null moves will be converted to
  comments. However, if you want to create a <a PGN>PGN</a> file that can be imported
  back into Scid later with null moves preserved, leave the option off.
  </p>
  
  <h3>HTML Export</h3>
  <p>
  Scid can export games to an HTML file. For diagrams to appear, you
  will need the diagram images (distributed with Scid in the directory
  "<b>bitmaps/</b>") to be in a subdirectory <b>bitmaps/</b> under the
  directory the HTML file is in.
  </p>

  <h3>HTML with JavaScript Export</h3>
  <p>
  While the HTML export generates a static file that may contain
  static board diagrams, this format offers dynamic HTML, that allows
  to move through the game interactively with the mouse.
  </p>
  <p>
  This format consists of several files that need to be stored in a
  specific structure. Therefore, it is advisable to first generate a
  empty folder that will contain these files. The name of the main
  file can be specified and it will get the extension html (e.g.
  mygame.html). This file should be loaded by the web browser. The
  other files are required to exist in exactly the position the export
  filter places them. However, the whole folder can easily be uploaded
  to some web server.
  </p>
  
  <h3>LaTeX Export</h3>
  <p>
  Scid can export games to a LaTeX file.  Games be printed two columns
  to a page and moves are in figurine algebraic notation with proper
  translation of the NAG symbols. Diagrams are added whenever a
  <term>D</term> comment is found.
  </p>
  <p>
  See the <a LaTeX>Using LaTeX with Scid</a> help page for more information.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### LaTeX help:

set helpTitle(LaTeX) "Scid and LaTeX"
set helpText(LaTeX) {<h1>Using LaTeX with Scid</h1>
  <p>
  Scid can save games and opening reports to files in LaTeX format.
  LaTeX is an extension to TeX, a popular typesetting system.
  </p>
  <p>
  To typeset the LaTeX files produced by Scid, you must have
  LaTeX (of course) and have the "chess12" chess font package installed.
  This font package is usually not part of standard LaTeX installations,
  so even if you have LaTeX, you may not have the chess font.
  </p>
  <p>
  For information about downloading and installing the LaTeX chess font,
  visit the
  <url http://scid.sourceforge.net/latex.html>Using LaTeX with Scid</url>
  page at the <url http://scid.sourceforge.net/>Scid website</url>.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### <a PGN>PGN</a> window help:

set helpTitle(PGN) "PGN window"
set helpText(PGN) {<h1>The <a PGN>PGN</a> window</h1>
  <p>
  Scids <a PGN>PGN</a> window displays the contents of the current game in
  standard <a PGN>PGN</a> representation. In the move text, comments appear {in
     braces} and variations appear (in parentheses).
  </p>
  
  <h3>PGN format</h3>
  <p>
  <a PGN>PGN</a> (Portable Game Notation) is a common standard for transferring
  chess games between computer programs.  A <a PGN>PGN</a> game consists of two
  sections. The first is the header, which contains tags such as
  <b>[White "Kasparov, Gary"]</b>
  and
  <b>[Result "1/2-1/2"]</b>.
  </p>
  <p>
  The second section contains the actual moves of the game, in
  standard algebraic notation (SAN) along with any variations,
  <a NAGs>annotation symbols</a> and <a Comment>comments</a>.
  </p>
  
  <h3>Actions in the <a PGN>PGN</a> window</h3>
  <p>
  You can use the <a PGN>PGN</a> window to navigate around the game: clicking the
  left mouse button on a move will jump to that move. Click the left
  mouse button on a comment will edit it.  The arrow keys and
  (<b>v</b> and <b>z</b> keys for entering or leaving variations) work
  for game navigation just as in the main window.  As in the main
  window, hitting v will cause the <term>Variation</term> window to
  pop up allowing to select a variation using the cursor keys. Setting
  Options / Moves / Show variation window will pop up this window
  automatically every time a move with a variation is found while
  navigating through the game using the cursor keys. In the variation
  window one can enter the variation by selecting it with the up/down
  cursor keys and hitting enter or clicking on it with the mouse. This
  allows for navigation through the game with the cursor keys only.
  Clicking on a move with middle mouse button will display a small
  board. Clicking on right mouse button will popup a contextual menu.
  </p>
  <p>
  From the context menu the following functions are available
  <ul>
     <li><term>Delete Variation:</term>
     Deletes the current variation
     </li>
     <li><term>Make First Variation:</term>
     Moves the current variation to the first position of all
     variations on that level
     </li>
     <li><term>Promote Variation to Mainline</term>
     Promotes the current variation to the mainline and demotes the
     current mainline to a variation.
     </li>
     <li><term>Strip:Moves from the beginning</term>
     </li>
     <li><term>Strip:Moves to the End</term>
     </li>
     <li><term>Strip:Comments</term>
     Removes all comments
     </li>
     <li><term>Strip:Variations</term>
     Removes all variations
     </li>
  </ul>
  </p>

  <h3>PGN display options</h3>
  <p>
  The <a PGN>PGN</a> window menus contain options that affect the <a PGN>PGN</a> window display.
  Scid can display the game in color or plain text -- see the
  <menu>Display</menu> menu in the <a PGN>PGN</a> window.
  The color display is easier to read, and allows you to select moves and
  comments using the mouse, but it is much slower to update. For very long
  games, you may want to select plain text display.
  </p>
  <p>
  You can also alter the format of comments and variations, choosing
  to display them indented on a separate line for greater visibility.
  </p>
  <p>
  The <a PGN>PGN</a> display options, and the size of the <a PGN>PGN</a> window, are saved to the
  options file whenever you <b>Save Options</b> from the <menu>Options</menu>
  menu of the main window.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}


####################
### Piece Tracker help:

set helpTitle(PTracker) "Piece tracker"
set helpText(PTracker) {<h1>The Piece Tracker window</h1>
  <p>
  The <term>Piece Tracker</term> is a tool that tracks the movements
  of a particular piece in all games in the current filter, and
  generates a "footprint" showing how often each square has been
  visited by the piece.
  </p>
  <p>
  To use the Piece Tracker, first make sure the filter contains the
  games you are interested in, such as games reaching a particular
  opening position or all games where a certain player had the white pieces.
  Then, select the piece to track and set other tracking options; these are
  explained below. Then press the <b>Update</b> button.
  </p>
  <p>
  The tracked piece movement information is displayed in two ways: a
  graphical "footprint", and a text list with one line of data per square.
  </p>
  
  <h3>Selecting the tracked piece</h3>
  <p>
  The chess pieces are displayed as in the standard chess starting position
  below the footprint chart. A single piece (such as the White b1 knight or
  the Black d7 pawn) can be selected with the left mouse button, and all
  pieces of the same type and color (such as all White pawns or both Black
  rooks) can be selected using the right mouse button.
  </p>
  
  <h3>Other piece tracker settings</h3>
  <p>
  The move number range controls when tracking should start and stop in
  each game. The default range of 1-20 (meaning tracking should stop after
  Black's 20th move) is appropriate for examining opening themes, but (for
  example) a range like 15-35 would be better when looking for middlegame
  trends.
  </p>
  <p>
  There are two types of statistic the tracker can generate:
  <ul>
  <li> <b>% games with move to square</b>: shows what proportion of filter
  games contain a move by the tracked piece to each square. This is
  the default setting and usually the most suitable choice.
  <li> <b>% time in each square</b>: shows the proportion of time the
  tracked piece has spent on each square.
  </ul>
  </p>
  
  <h3>Hints</h3>
  <p>
  There are (at least) three good uses for the Piece Tracker: opening
  preparation, middlegame themes, and player preparation.
  </p>
  <p>
  For opening preparation, use the piece tracker with the <a Tree>Tree</a>
  opened. By tracking pieces you can see trends in the current opening
  such as common pawn pushes, knight outposts, and where the bishops are
  most often placed. You may find it useful to set the move number range
  to start after the current move in the game, so the moves made to reach
  the current position are not included in the statistics.
  </p>
  <p>
  For middlegame themes, the piece tracker can be useful when the filter
  has been set to contain a certain ECO range (using a
  <a Searches Header>Header search</a>) or perhaps a pattern such as a
  White IQP (using a <a Searches Material>Material/pattern search</a>).
  Set the move range to something suitable (such as 20-40), and track
  pieces to see pawn pushes in the late middlegame or early endgame,
  for example.
  </p>
  <p>
  For player preparation, use a <a Searches Header>Header search</a> or
  the <a PInfo>Player information</a> window to find all games by a
  certain player with one color. The Piece Tracker can then be used to
  discover how likely the player is to fianchetto bishops, castle
  queenside, or set up a d5 or e5 pawn wedge, for example.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


####################
### Repertoire editor help:

set helpTitle(Repertoire) "Repertoire editor"
set helpText(Repertoire) {<h1>The Repertoire editor window</h1>
  <p>
  The Repertoire editor lets you create, view, edit and <term>repertoire</term>
  files. A repertoire (.sor) file is a list of the opening positions you want to
  reach or try to avoid, and you can use it to manage your chess opening
  preferences and also to search databases in Scid.
  </p>
  
  <h3>Repertoire groups and lines</h3>
  <p>
  A repertoire contains two types of elements: <term>groups</term> and
  <term>lines</term>. Groups are not actually part of your repertoire; they
  are only used to structure it the same way directories give structure to the
  files on a computer disk.
  </p>
  <p>
  Lines in a repertoire come in two types: <term>include</term> lines which
  represent opening positions you are interested in and try to reach,
  and <term>exclude</term> lines which are those you have no interest in
  playing and try to avoid.
  For example, if you play the QGA (1.d4 d5 2.c4 dxc4) as Black and you play
  all moves after 3.e4 <i>except</i> 3...Nf6, you would have
  1.d4 d5 2.c4 dxc4 3.e4 as an include line and 1.d4 d5 2.c4 dxc4 3.e4 Nf6 as
  an exclude line.
  </p>
  
  <h3>Comments and notes</h3>
  <p>
  Each group or line can have comments attached to it. There are two types:
  short (single-line) comments appear (in red) in the repertoire hierarchy
  next to the moves of a group or line, while a long (multiple-line) comment
  is only shown when the group or line is selected.
  </p>
  
  <h3>Using the repertoire editor window</h3>
  <p>
  The <b>left</b> side of the window shows the repertoire hierarchy. You can
  click on folder icons to expand and collapse groups, and click on the
  moves of a group or line to select it and see its comments.
  Include lines are shown with a blue tick icon, and exclude lines have
  a red cross.
  </p>
  <p>
  If a line or group has a short comment, it is shown after the moves. If it
  has a long comment, this is indicated with <b><red>**</red></b> after the
  moves. Groups have a number in parentheses after their moves showing the
  number of (include and exclude) lines they contain.
  </p>
  <p>
  Clicking the right mouse button on a group or line produces a menu
  of functions for it, such as deleting it or changing its state.
  </p>
  <p>
  The <b>right</b> side of the window contains three frames. The first frame
  is a list of the moves in the currently selected line or group. You can click
  the left mouse button on this to paste the moves in the
  <a Import>Import</a> window, which is useful for setting the current game
  to start with a line in the repertoire.
  The second frame contains the short comment for the line or group, and
  the third frame contains its long comment.
  </p>
  
  <h3>Adding groups and lines to the repertoire</h3>
  <p>
  To add a line or group to the window, just make its moves on the
  chessboard in the main window, then use the <menu>Edit</menu> menu
  in the repertoire editor to add it as a group, include line or exclude line.
  </p>
  <p>
  To delete a group or line, click the right mouse button on it and select
  the appropriate command from the menu that appears.
  </p>
  
  <h3><name Search>Searching databases using repertoire files</name></h3>
  <p>
  The repertoire editor <menu>Search</menu> menu lets you search the
  current database using the repertoire. Each game will be searched for
  the positions in the repertoire and will only match the search if
  the <i>deepest</i> repertoire position found is for an <i>include</i> line.
  </p>
  <p>
  You can choose to search using the whole repertoire, or just the displayed
  lines. Searching by displayed lines only is useful when you only want to
  use some of the repertoire. For example, a repertoire might have two main
  groups at the top level, one for 1.e4 and one for 1.d4. If you are only
  interested in the 1.e4 lines, simply collapse the 1.d4 group and then
  search by displayed lines only.
  </p>
  
  <h3>Extra hints</h3>
  <p>
  A repertoire file is great for finding new games in your opening systems.
  For example, each time you get a new <a PGN>PGN</a> file to add to your main database
  (such as the excellent weekly <a PGN>PGN</a> file from
  <url http://www.chesscenter.com/twic/>The Week In Chess</url>),
  just open the <a PGN>PGN</a> file in Scid and do a repertoire search. Then you
  can browse the filtered games to see all the games played that are
  in your repertoire.
  </p>
  <p>
  You may want to keep two repertoire files: one for Black and one for
  White, so you can search with each file separately.
  </p>
  <p>
  A repertoire file can be opened from the command line, for example: <br>
  <b>scid mybase white.sor</b>
  </p>
  <p>
  You can edit a repertoire (.sor) file in any text editor, but be careful
  to preserve its format or it may not be loadable or searchable in Scid.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Tree window help:

set helpTitle(Tree) "Tree window"
set helpText(Tree) {<h1>The Tree window</h1>
  <p>
  The <term>Tree</term> window displays information on all the
  moves made from the current position in games in the database.
  In tree mode, the tree window is updated automatically whenever the
  main windows board changes. This can be slow for large databases and
  can therefore be disabled using the <button tb_search_on>. To visualise
  that a tree is not automatically refreshed this button changes to
  <button tb_search_off>.
  </p>
  <p>To open the <term>Tree</term> window one can either first open a
  database and then choose Windows / Tree Window (Ctrl-T) from the
  menu, or open the base as tree right from the file menu.
  <p>
  Note that whenever the tree window is updated, the <a Searches
  Filter>filter</a> is reset and only the games that contain the
  current position will be included. This is also the case if e.g. a
  header search was done: once the next move is entered, the tree
  window updates and the filter is set to the games matching the tree
  window.
  </p>
  <p>
  Clicking the left mouse button on a move in the tree window adds
  that move to the game.
  </p>
  <h3>Tree window contents</h3>
  <p>
  The tree window shows the <a ECO>ECO code</a> (if any), frequency
  (both as number of games, and a percentage) and score of each move.
  The <term>score</term> is always computed from the <b>White</b>
  perspective, so 100% means all White wins and 0% means all Black
  wins. Scores are highlighted for moves that have good (green) or bad
  (red) results. On average a move should score 53.8% for white,
  highlighting appears if a move scores more than 3% better or worse
  than this average and if at least 15 games are contained in the
  database. The <term>AvElo</term> (average Elo) corresponds to the
  player's on move and <term>Perf</term> (performance) represents the
  opponent's strength. Additionally, <term>AvYear</term> shows the
  average year of games played in this move and <term>%Draws</term>
  gives the percentage of draws for the line displayed. All these
  values are calculated for the database displayed in the tree, and
  therefore depend of course on the games in this database.
  </p>
  <p>
  Additional information is displayed if a <term>Mask</term> has been
  opened. For the use of <term>Masks</term> see below.
  <p>
  The moves in the tree window can be sorted by move (alphabetically),
  ECO code, frequency, or score. You can change the sort method using
  the <menu>Sort</menu> menu.
  </p>

  <h3><name Best>Best games window</name></h3>
  <p>
  The tree window has a File menu command and button for opening the
  <term>Best games</term> window, which shows a list of the
  highest-rated games in the currently displayed tree branch.
  (Equivalently, one can use the <button tb_list> button).  The games
  are listed in order of average rating, and you can restrict the list
  to show games with a particular result and also limit the number of
  games shown in this list. Additionally, up to 4 flags of the games
  in the list show up in the best games list. The special flag
  <b>A</b> marks a game as <b>Annotated</a>, ie. these games contain
  either comments, variations or NAGs (or any combination of those).
  Note that if a header search was ran against the database, the best
  games list is restricted to the results of this header search.
  </p>
  
  <h3><name Graph>Tree graph window</name></h3>
  <p>
  The tree window buttons include a button marked <term>Graph</term>
  (<button tb_bargraph>) which produces a graphical display of the
  relative performance of each move from the current position.  All
  moves that have been played at least 1% of the time, and at least 5
  times, are displayed.  Percentage scores are always from White's
  perspective even when it is Black to move. The graphs can be saved
  in PostScript format via the file menu.
  </p>
  <p>
  In the tree graph, a red line is plotted showing the mean over all games
  from the current position, and the area between 50 and 55% (where most
  standard openings are expected to score) is colored blue
  to assist comparison of moves. Note that white usually scores around 55%
  in master level chess.
  </p>
  
  <h3><name Lock>Locking the tree window</name></h3>
  <p>
  Each tree window is associated with a specific base, that is, if
  several bases are opened simultaneously, several tree windows may
  exist. If the <term>Lock</term> button in the tree window is
  enabled, closing the tree window will also close the database
  associated with this specific tree. Additionally, this also closes
  associated graph or best games windows. If the <term>Lock</term>
  button is not checked closing the tree will leave all these windows
  opened and just close the tree view of the base.
  </p>
  <p>
  Note that opening a base as tree from the file menu will
  automatically lock the database by default.
  </p>
  
  <h3><name Training>Training</name></h3>
  <p>
  When the <term>Training</term> checkbox in the tree window is selected,
  Scid will randomly make a move every time you add a move to the game.
  The move Scid chooses depends on database statistics, so a move played
  in 80% of database games will be chosen by Scid with 80% probability.
  Turning on this feature, then hiding (or iconifying) the Tree window and
  playing openings against a large database, is a great way to test your
  knowledge of your opening repertoire. Another option to train an
  opening offers <a OpeningTrainer>Training / Openings</a>.
  </p>

  
  <h3>Caching for faster results</h3>
  <p>
  Scid maintains a cache of tree search results for the positions with the
  most matching games. If you move forward and back in a game in tree mode,
  you will see the tree window update almost instantly when the position
  being searched for is in the cache.
  </p>
  <p>
  The tree window has a file menu command named <term>Save Cache</term>.
  When you select this, the current contents of the tree cache in memory
  are written to a file (with the suffix <b>.stc</b>) to speed up future
  use of Tree mode with this database.
  </p>
  <p>
  The <term>Fill cache file</term> command in the file menu of the tree
  window fills the cache file with data for many opening positions.
  It does a tree search for about 100 of the most common opening positions,
  then saves the cache file.
  </p>
  <p>
  The maximum number of lines in the Cache can be configured by File /
  Cache size. The default are up to 1000 lines.
  </p>
  <p>
  Alternatively, one can fill the cache also with the content of a
  base or a game by choosing File / Fill Cache with base and File /
  Fill Cache with game, respectively. The cache will be filled with
  the contents of these including all variations. This is most helpful
  if one has one or more repertoire bases that can serve as input. (See
  also <a OpeningTrainer> about this type of bases.)
  <p>
  Tree refresh can be dramatically enhanced if the database is sorted
  by ECO code then compacted (see the <a Maintenance>maintenance</a>
  window). Once this is achieved (the whole process can last several
  hours), turn on the option <term>Fast mode</term>. The refresh of
  the Tree window will be 20 times faster in average at the cost of
  some inaccuracies (games not in current filter will not be taken
  into account). By turning off the <term>Fast mode</term> option you
  will see the difference in the number of games when all the
  transpositions are taken into account.  If you want to get a preview
  of statistics then get a precise Tree, use the option <term>Fast and
  slow mode</term> 
  </p>
  <p>
  Note that a tree cache (.stc) file is completely redundant; you can remove
  it without affecting the database, and in fact it is removed by Scid
  whenever an action occurs that could leave it out of date -- for example,
  adding or replacing a game, or sorting the database.
  </p>
  
  <p><footer>(Updated: Scid 4.3, November 2010)</footer></p>
}

set helpTitle(TreeMasks) "Masks for Trees"
set helpText(TreeMasks) {<h1>Masks for Trees</h1>
  <h3>Basics</h3>
  <p>
  The <term>Tree</term> window displays information on all the moves
  made from the current position in games in the database. See also <a
  Tree>The Tree window</a>  for more details.
  </p>
  <p>
  To add additional informations beyond pure statistical data a
  <term>Mask</term> can be defined. One can imagine a
  <term>Mask</term> as a transparet layer above the current tree, that
  holds additional data e.g. commentaries for moves or positions, own
  evaluations and ones own opening repertoir. <term>Masks</term> are
  stored in a Mask file (.stm) and thus are independent of the
  databases to be used with. That is, one can define a
  <term>Mask</term> once and use it with various databases by just
  loading it from the <term>Tree</term> windows menu.
  </p>
  <p>
  As soon as a <term>Mask</term> file is opened, the displays of
  the <term>Tree</term> window change. First of all, all moves from
  the current position that are present in the mask are highlighted.
  Additionally, NAGs and markers may show up in front of a move or
  commentaries concerning the move will show up at the end of its
  line. Finally, the current postition may also hold a comment.
  </p>
  <p>
  <b>Note</b>: The indepencence of <term>Masks</term> from a database
  make them a very powerfull tool to handle opening repertoirs.
  Contrary to the traditional way of opening lines, <term>Masks</term>
  have the advantage to handle transpositions transparently, simply
  cause they are based on the current positions instead of a line
  leading to it.
  </p>
  <h3>Using a Masks</h3>
  <p>
  As <term>Masks</term> operate on the tree view of a given database,
  first of all the tree view has to be opened either by <menu>Window /
  Tree window</menu> or the shortcut <b>ctrl-t</b>. For starting out
  it makes sense to open a larger reference database as this
  simplifies the addition of moves to a <term>Mask</term>. However,
  Masks work with every database, even the <term>Clipbase</term>, that
  is one could also import a collection of games from a <a PGN>PGN</a> file to
  the Clipbase to set up a <term>Mask</term>.
  </p>
  <p>
  Now, a mask file has to be created or loaded. These files use the
  extension .stm. To create a new mask file select <menu>Mask /
  New</menu> from the <term>Tree</term> windows menu. Similarly, an
  existing mask can be opened using <menu>Mask / Open</menu>. Finally,
  <menu>Mask / Open recent</menu> is a shortcut to the recently used
  <term>Mask</term> files. 
  </p>
  <p>
  Once a Mask file is opened new commentary can be added to this
  specific mask. Note again, that the Mask is independent of database
  used for its creation. It can later applied to any database of ones
  liking. For an opening repertoir it might thus make sense to
  generate two masks, one for the White and one for the Black
  openings.
  </p>
  <p>
  To add markers or comments to moves, first add the move
  to the mask by choosing <term>Add to mask</term> from the context
  menu available by clicking on the line with the right mouse button.
  After a line was added, it is highlighted in <blue>blue</blue>
  within the tree window. Similarly, a move can be removed from the
  mask by <menu>Remove from mask</menu> from the context menu.
  </p>
  <p>
  <b>Note</b>: If the move to be added is not displayed in the tree
  window Scid offers a list of all possible moves by means of the
  context menu. As this might be quite a bunch of moves, they are
  split into several context menu items at the end of the available
  choices. All are labled by <menu>Add this move to mask</menu> and in
  case necessary numbered. Just select a move from one of those lists
  if it does not show up in the tree anyway.
  <p>
  After a move was added to the <term>Mask</term> and one can select
  the following markers from the context menu. These markers will show
  up left to the move annotated:
  <ul>
  <li><term>NAG</term> symbols are the simplest annotation symbol. The
  menu displays only those nags sensible for a move (not a position)
  which results in the following symbols possible <term>!!, !, !?, ?!,
  ?, ??, ~</term>
  </li>
  <li>By selecting <menu>Marker 1</menu> and <menu>Marker 2</menu> up
  to two additional graphical markers can be attached to a move. They
  are mainly meant to handle opening repertoirs. The available options
  are:
     <ul>
     <li> <img tb_tick> Include line in repertoire</li>
     <li> <img tb_cross> Exclude line from repertoire</li>
     <li> <img tb_mainline> Main Line</li>
     <li> <img tb_bkm> Bookmark</li>
     <li> <img tb_white> White</li>
     <li> <img tb_black> Black</li>
     <li> <img tb_new> New line</li>
     <li> <img tb_rfilter> To be verified by further analysis</li>
     <li> <img tb_msearch> To train</li>
     <li> <img tb_help> Dubious line</li>
     <li> <img tb_cut> To remove</li>
     </ul>
	  To remove a marker just select the item <menu>No marker</menu>.
  </li>
  <li><term>Color</term> Allows to add a little colored square in
  front of the move for ones own highlighting. To remove it again
  select <menu>White</menu></li>
  <li><term>Comment move</term> allows to add a textual comment for
  the line. This comment is shown  right to the line it is
  associated. Note that only a part of the first line shows up there
  to give some visual feedback that commentary exists. The whole
  comment shows up in a tooltip once the mouse is moved over the line
  in question.
  </li>
  <li><term>Comment position</term> can be used to add a comment for the
  current position. This comment is shown on top of <term>Tree</term>
  window once the commented position is reached. Note that Scid
  displays only the first line of the comment to save space in the
  <term>Tree</term> window. However, if the mouse is moved over that
  line the whole commentary shows up in a tooltip.
  </li>
  </ul>
  Don't forget to save the Mask! You will be prompted to do it
  if you close a Mask that has been modified or if a <term>Tree</term>
  window is closed.
  </p>
  <p>
  To search for commentary, symbols etc. use <menu>Masks /
  Search</menu>. Here one can select various check boxes that use the
  selected search option as criterion. After selecting
  <button>Search</button> a list of all positions found is displayed
  in <term>FEN</term> notation followed by the move in question and
  the commentary if any.
  </p>
  <p>
  <menu>Display mask</menu> will display the current Mask in a line
  style. Stating at the current position all subsequent moves are
  sorted into some unfoldable tree to give an overview of the current
  lines of play similar to what is found in many repertoir books.
  Note that not all information are displayed (e.g. comments are
  shorted to fit the display). Additionally, as <term>Masks</term>
  work on positions rather than move sequences they may contain loops
  (ie. transpositions) which can not be unfolded in a line wise
  display perfectly. That is, this display may be cut at a certain
  point.
  </p>
  <h3>Conversion to Masks</h3>
  <p>
  Setting up a mask can be a tendious taks especially for complex
  opening repertoirs. However, if such a repertoir is available as a
  Scid database or a number of <a PGN>PGN</a> games, or lines stored in usual
  chess games, Scid can use that information to set up suitable
  <term>Masks</term> automatically.
  </p>
  <p>
  First of all one has to load the information into a Scid database.
  In case the information is already available as a Scid database this
  is as easy as opening it. In case a <a PGN>PGN</a> file is use it should be
  either imported into a Scid database or one can use the
  <term>Clipbase</term> to import it temporarily. In that case one
  should make sure that the <term>Clipbase</term> is empty before
  importing. (<menu>Edit / Empty Clipbase</menu>).
  </p>
  <p>
  The next step is to open the tree for the just opened Scid database.
  Then a new <term>Mask</term> should be created or an existing one
  opened. <b>Note</b> that this function may be used to consolidate
  serveral bases into a single <term>Mask</term>.
  </p>
  <p>
  Now, the <term>Mask</term> can be filled automatically with the game
  content of the database. In this process, comments within the games
  will be converted to move comments (appending to those existing
  eventually) in the <term>Mask</term>. <term>NAG</term> symbols will
  be added as well. To initiate this process one can chose either
  <menu>Masks / Fill with game</menu> to fill the <term>Mask</term>
  with the contents of a single game, or <menu>Fill with
  Database</menu> to loop over all games in the database.
  </p>
  <p>
  <b>Note</b>: especially filling a <term>Mask</term> with an entire
  base can be quite time consuming.
  </p>
  <p>
  <b>Note</b>: The <term>mask</term> is filled with all moves till the
  end of the game including all variations within a game. Therefore,
  it is sensible to use only bases for this procedure that end the
  games as soon as the middle game is reached.
  </p>

  <p><footer>(Updated: Scid 4.3, November 2010)</footer></p>
}

####################
### Compaction help:

set helpTitle(Compact) "Database compaction"
set helpText(Compact) {<h1>Database compaction</h1>
  <p>
  Database <term>compaction</term> is a specific type of
  <a Maintenance>maintenance</a> that keeps a database as small and
  efficient as possible.
  Compacting a database means removing any unused space in its files.
  There are two types: name file and game file compaction.
  </p>
  
  <h3>Name file compaction</h3>
  <p>
  Over time, you may find a database starts to contain a number of player,
  event, site or round names that are no longer used in any game. This will
  often happen after you spellcheck names. The unused names waste space in
  the name file, and can slow down name searches.
  Name file compaction removes all names that are not used in any games.
  </p>
  
  <h3>Game file compaction</h3>
  <p>
  Whenever a game is replaced or deleted, wasted space is left in the game
  file (the largest of the three files in a Scid database). Game file
  compaction removes all wasted space, leaving no deleted games in the
  database. Note that this operation is irreversible: after compaction,
  the deleted games are gone forever!
  </p>
  <p>
  Game file compaction is also recommended after <a Sorting>sorting</a> a
  database, to keep the order of the game file consistent with the sorted
  index file.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


####################
### Database maintenance tools help:

set helpTitle(Maintenance) "Database maintenance"
set helpText(Maintenance) {<h1>Database maintenance</h1>
  <p>
  Scid provides a number of tools for maintaining databases,
  available from the Scid <a Menus File>File</a> menu. The
  database <a Compact>compaction</a> and <a Sorting>sorting</a>
  functions are explained in separate help pages.
  </p>
  
  <h3>Maintenance window</h3>
  <p>
  Most Scid database maintenance can be done from the Maintenance
  window, which can be opened from the <menu>File: Maintenance</menu>
  or <menu>Windows</menu> menus or the shortcut key <b>Ctrl+M</b>.
  </p>
  <p>
  You can use this window to maintain <a Flags>game flags</a>,
  spellcheck names, <a Compact>compact</a> or <a Sorting>sort</a>
  a database. Note that any operations that are not available
  for the current database (for example, because it may be read-only
  or a <a PGN>PGN</a> file) will be grayed out.
  </p>
  
  <h3><name Twins>Deleting twin games</name></h3>
  <p>
  The <menu>File: Maintenance</menu> menu has a command
  <menu>Delete twin games...</menu> for detecting extra copies
  (twins) of games in the database.
  This command finds all pairs of games that are twins and, for each pair,
  flags the shorter game deleted leaving the longer game undeleted.
  Two games are considered to be twins if their players
  (and any other tags that you can optionally specify) match exactly.
  </p>
  <p>
  If you specify the "same moves" option, each pair of games must have the
  same actual moves up to the length of the shorter game (or up to move 60,
  whichever comes first) to be twins.
  </p>
  <p>
  When you have deleted twins, it is a good idea to check that each
  game deleted really is a copy of another game.
  You can do this easily if you selected the
  "<b>Set filter to all deleted games</b>" option in the
  delete twins dialog box. The filter will now contain all deleted games.
  You can browse through them (using the <b>p</b> and <b>n</b> keys) with
  the <term>twins checker</term> window (available from the maintenance
  menu, or the shortcut key <b>Ctrl+Shift+T</b>) to verify that each game is
  deleted because it actually is a twin of another game.
  </p>
  
  <h3><name Editing>Editing player, event, site and round names</name></h3>
  <p>
  You may find mis-spelt names in your databases and want to correct them.
  You can do this in Scid with the <term>Name editor</term> window
  (shortcut key: <b>Control+Shift+N</b>),
  available from the <menu>File: Maintenance</menu> submenu.
  </p>
  <p>
  Each unique name is only stored once in the name file, so changing a name
  actually changes all occurrences of it.
  </p>
  
  <h3><name Spellcheck>Spellchecking names</name></h3>
  <p>
  Scid comes with a <term>spellcheck</term> file named <b>spelling.ssp</b>,
  for correction of player, event, site and round names.
  Scid will try to load the spellcheck file whenever it starts up; if it
  does not load, you can load it from the <menu>Options</menu> menu.
  </p>
  <p>
  Once the spellcheck file is loaded, you can use it on a
  a Scid database using the spellcheck commands in the
  <menu>File: Maintenance</menu> menu, or from the maintenance window.
  </p>
  <p>
  When you spellcheck a database, Scid produces a list of corrections that you
  can edit before actually making any corrections, so you can remove any
  corrections you do not want to make.
  </p>
  <p>
  Spellchecking is especially useful for standardizing a database so all
  instances of a particular player are spelt the same way.
  For example, with the standard spellcheck file, the names "Kramnik,V.",
  "Vladimir Kramnik", and "V. Kramnik" would all be corrected
  to "Kramnik, Vladimir".
  </p>
  <p>
  The spellcheck file has one
  additional use: when it is loaded, its player data is
  used to enhance the <a PInfo>player information</a> window and the
  <a Crosstable>crosstable</a> window:
  you will see FIDE master title
  (<b>gm</b> = International Grandmaster, <b>im</b> = International Master, etc)
  and country information for any player that is
  listed in the spellcheck file. Over 6500 strong players of the past and
  present are listed in the <b>spelling.ssp</b> file that comes with Scid.
  </p>
  
  <h3><name Ratings>Adding Elo ratings to games</name></h3>
  <p>
  The "Add Elo ratings..." button in the Maintenance window causes Scid
  to search the current database for games where a player does not have
  a rating, but the spellcheck file has an Elo rating listed for that
  player at the date of the game. Scid will add all such ratings
  automatically. This is very useful for a database of master-level games
  which has few ratings.
  </p>
  <p>
  The spellcheck file "spelling.ssp" that comes with Scid does not contain
  the Elo rating information needed for this function, but a larger version
  of it called "ratings.ssp" is available from the <url
  http://scid.sourceforge.net/>Scid website</url>.
  </p>
  
  <h3><name Cleaner>The Cleaner</name></h3>
  <p>
  The Scid <term>Cleaner</term> (available from the Maintenance window) is
  a tool for doing a number of maintenance tasks on a database in one
  action. You can choose which tasks you want to do, and Scid will
  perform them on the current database without requiring user interaction.
  This is especially useful for maintenance of large databases.
  </p>
  
  <h3>Setting the database autoload game</h3>
  <p>
  The <term>autoload</term> game of a database is the game automatically
  loaded whenever that database is opened. To change the autoload game of
  a database, use the "Autoload game number..." button. If you always want
  the last game of a database to be opened (regardless of the actual number
  of games in the database), just set it to a very high number such as
  9999999.
  </p>
  
  <h3>Repair a base</h3>
  <p>
  In the rare cases that a Scid database is corrupted one might try to
  repair it using File / Maintanance / Repair base. For this to work,
  the base in question must not be opened (which is not possible in
  most cases anyway). Scid will then try its best to get the database
  back in a consistent and usable state.
  </p>

  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Sorting help:

set helpTitle(Sorting) "Sorting a database"
set helpText(Sorting) {<h1>Sorting a database</h1>
  <p>
  The <term>sorting</term> function sorts all games in a database.
  You can select a number of sort criteria.
  When two games are equal according to the the first criteria, they
  are sorted using the second criteria, and so on.
  </p>
  
  <h3>Sort criteria</h3>
  <p>
  The available sorting criteria are:
  </p>
  <ul>
  <li> Date (oldest games first)
  <li> Year (same as date, but using the year only)
  <li> Event name
  <li> Site name
  <li> Country (last 3 letters of Site name)
  <li> Round name
  <li> White name
  <li> Rating (average of White and Black ratings, highest first)
  <li> Black name
  <li> Result (White wins, then draws, then Black wins)
  <li> Length (number of full moves in the game)
  <li> ECO (the <a ECO>Encyclopedia of Chess Openings code</a>)
  </ul>
  
  <h3>Sort results</h3>
  <p>
  When you sort a Scid database that is not read-only, the sort
  results are saved so the order of games in the database is
  permanently changed.  If you want to the sort results to be
  temporary, make the database read-only first using the <b>File:
  Read-only</b> menu command.
  </p>
  <p>
  When you sort a database that is read-only or is actually a PGN
  file, the sort results cannot be saved so the sorted order of games
  will be lost when the file is closed.
  </p>
  <p>
  Note that sorting a database resets the <a Searches Filter>search
  filter</a> to contain all games.
  </p>
  
  <h3>Important note about sorting databases:</h3>
  <p>
  When a database is sorted, the index file is altered but the game file
  is not changed. This means sorting a database will leave the game file
  records in a scrambled order relative to the index file. This can
  really <b>slow down</b> <a Tree>tree</a>, position and material/pattern
  <a Searches>searches</a>, so you should reorder the game file by
  <a Compact>compacting</a> it after sorting the database to maintain
  good search performance.
  </p>
  <p>
  Note that only a database sorted by <a ECO>ECO</a> codes can use the fast
  tree search modes. This however, also requires to compact the
  database after the sort procedure!
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Flags help:

set helpTitle(Flags) "Game Flags"
set helpText(Flags) {<h1>Game Flags</h1>
  
  <p>
  A <term>flag</term> is an indicator of some chess characteristic
  that can be turned on or off for each game in the database.
  There are 13 user-settable flags that you can directly set for
  each game. Of these, only the Delete flag has any special
  significance: games with the Delete flag turned on are marked
  for deletion and will removed when the database is
  <a Compact>compacted</a>.
  </p>
  <p>
  The other 12 user-settable flags and their symbols are:
  </p>
  
  <ul>
  <li>White opening (W)</li>
  <li>Black opening (B)</li>
  <li>Middlegame (M)</li>
  <li>Endgame (E)</li>
  <li>Novelty (N)</li>
  <li>Pawn structure (P)</li>
  <li>Tactics (T)</li>
  <li>Queenside play (Q)</li>
  <li>Kingside play (K)</li>
  <li>Brilliancy (!)</li>
  <li>Blunder (?)</li>
  <li>User-defined (U)</li>
  </ul>

  <p>
  Since Scid 4.0 additional 6 custom flags are available for
  individual use.  These flags are specific for each base and their
  textual descriptoin can be set via the <a Maintenance>maintenance
  window</a>. In the games list, game info area and so on they display
  as the numbers (1) .. (6). For <a Searches Header>header
  searches</a> they behave exactly like the predefined flags above.
  </p>
  
  <p>
  A flag can be set for the current game, all filter games, or all
  database games using the <a Maintenance>maintenance</a> window.
  </p>
  <p>
  You can use a <a Searches Header>header search</a> to find all
  games in a database that have a particular flag turned on or off,
  or use flags as part of more complex searches.
  </p>
  <p>
  Since all the user-settable flags (except the Delete flag) have
  no significance to Scid, you can use them for any purpose that
  suits your needs. For example, you could use the Kingside (K)
  flag for kingside pawn storms, or kingside heavy piece attacks,
  or even for endgames with all pawns on the kingside. Depending on
  usage, however a custom flag might be more suitable.
  </p>
  <p>
  Note, that sensible handling of flags can speed up searches
  significantly!
  </p>
  <p>
  The following functions of Scid set or require flags:
  <ul>
     <li><a OpeningTrainer>Opening Trainer</a>: can evaluate the (B) and (W) flags
     <li><a Analysis Annotate>Find best move</a>: evaluates the (T) flag
     <li><a Analysis Annotate>Find tactical exercise</a>: sets the (T) flag
  </ul>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}

####################
### Analysis window help:

set helpTitle(Analysis) "Analysis window"
set helpText(Analysis) {<h1>The Analysis window</h1>
  <p>
  The Scid analysis window shows the analysis by a chess program
  (known as an <term>engine</term>) of the current board position.
  Whenever the board changes, Scid sends the new position to the
  engine and it shows its assessment of that position.
  Currently, up to two engines can be run simultaneously. To start the
  first analysis engine, the short cut <term>F2</term> can be used,
  for the second engine <term>F3</term>. To quickly close the engine
  window just hit <term>ESC</term>.
  </p>
  <p>
  The principle informations of the current analysis are shown on
  top of the window. The first number signifies the evaluation value
  in pawn units.  The score shown in the analysis window is always
  from the perspective of White, so a negative score indicates Black
  is better. <b>Depth:</b> shows the search depth already reached by
  the engines calculations in half moves. The number after
  <b>Nodes:</b> gives the number of positions analysed for the current
  result while the number of positions per second (kn/s) is shown in
  brackets.  <b>Time:</b> finally shows the amount of time spent for
  the current analysis.
  </p>
  <p>
  Additional information can be accessed using the <button
  tb_engineinfo> button. A new line will be added to the status area
  showing the current move analysed, the number of tablebase hits, a
  more exact number of nodes analysed per second, the watermark of the
  engines hash and the current cpu load. Usually, this information is
  hidden to save space for the analysis.
  </p>
  <p>
  If the engine only analyses the line it considers the main
  continuation, the lower frame in the window (with the scrollbar)
  shows the history of evaluations produced by the engine for the
  current position, so you can see how the assessment has changed.
  </p>
  <p>
  Many recent <term>UCI</term> engines however allow to analyse
  several lines at once. Using this <term>Multi-PV</term> feature, the
  user can also see what the engine thinks is the second or third best
  continuation.  The best line is always on top and highlighted to
  ease reading.  If an engine allows for <term>Multi-PV
  analysis</term>, the spin box below the analysis lines can be used
  to set the number of principal variations that should be calculated
  and shown. In this case, instead of the calculation history, only
  the resulting principal lines are shown. However, if the number of
  principal lines is set to 1, one can again observe the evaluation
  history. The spin box is disabled, if an engine does offer this
  feature.
  </p>
  <p>
  <b>Note</b> the output of the current analysis can be hidden/shown
  by clicking with the right mouse button into the analysis window. In
  this mode only the current evaluation is shown in the status line.
  <p>
  To add the best move chosen by the engine as a new move in the current
  game, press the <b>Add move</b> button <button tb_addmove>. If the
  whole main line of the engine should be added just use the <b>Add
  Variation</b> button <button tb_addvar>. In case an engine offers
  the <term>Multi-PV</term> mode, using the <b>Add all Variations</b>
  button (<button tb_addallvars>) can be used to add all principal
  variations to the game. The insertion of variations from the
  analysis window will also add the name of the engine as a comment to
  the game.
  </p>
  <p>
  To temporarily interrupt the calculation process one can use the
  stop engine button (<button tb_pause>). Once pressed, this button
  changes to the start engine button (<button tb_play>) which will
  restart the engines analysis. Note, however, that most engines will
  restart the whole analysis again, forgetting all results that where
  achieved in an earlier run. Only few engines are able to reuse the
  results they have calculated till the analysis was stopped. For the
  first analysis engine toggeling start/stop engine is mapped to the
  hotkey <term>F4</term> while for the second engine <term>F5</term>
  can be used.
  </p>
  <p>
  To set an engine to analyse a position in the background while
  other functions of Scid are used one can <term>lock the
  position</term> using the <button tb_lockengine> button. Scid now
  stops to send any changes of the main board to the engine, and the
  engine stays calculating the position.
  </p>
  <p>
  To finish the current game by the engine ("shoot out" or "demo" mode)
  one can use the finish game button <button tb_finish_off>. To indicate
  the shootout mode this button turns to <button tb_finish_on>. This
  function is only available for the first analysis engine.
  </p>

  <h3><name List>The Analysis Engines List</name></h3>
  <p>
  Scid maintains a list of the engines you have used, along with an
  estimated Elo rating (if you guess one; additionally some pages on
  the Internet offer these values as results from large engine-engine
  tournaments) and the date when each engine was last used. You can
  sort the engine list by name, Elo rating, or date.
  Select the <b>New</b> or <b>Edit</b> buttons to add a new engine to
  the list or edit the details for an existing entry.
  </p>
  <h3><name Start>Engine commands and directories</name></h3>
  <p>
  For each engine, you must specify the executable file to run and
  which directory Scid should run it in.
  </p>
  <p>
  The most likely cause of engine starting problems is the choice of
  which directory the engine should run in. Some engines require an
  initialization or opening book file in their start directory to run
  properly.  Other engines (like Crafty) write log files to the
  directory they start in, so you will need to run them in a directory
  where you have write access.  If the directory setting for an engine
  is ".", Scid will just start the engine in the current directory.
  </p>
  <p>
  So if an engine that should work fine in Scid does not start, try
  changing its directory setting. To avoid engines creating log files
  in many different directories, I recommend starting engines in
  the directory of the Scid User files (this is where the <b>scid.exe</b>
  file is located on Windows, or <b>~/.scid/</b> on Unix); there is a
  button in the dialog box for editing engine details marked
  <b>scid.exe dir</b> on Windows or <b>~/.scid</b> on Unix that lets
  you set the engine to start in this directory.
  </p>
  <p>
  If an engine needs additional parameters for startup (e.g. a
  specific opening book) they can be specified in the
  <term>Parameters</term> field. Please refer to the engines
  documentation about the parameters required, if any.
  </p>
  <p><term>URL</term> allows you to set the engines homepage. This
  comes in handy to check for updates e.g. or to have a look at recent
  developments. Pressing the <term>Open...</term> button will open
  this page in the web browser.
  </p>
  <p>
  If the engine uses the <term>UCI</term> protocol please mark the
  associated checkbox. Generally, there are two major engine protocols
  available today: xboard sometimes referred to as winboard (UCI must
  not be checked) which many, especially older engines use, and the
  UCI protocol that can be found in most of the modern chess engines.
  The main advantage of an <term>UCI</term> engine is, that this
  protocol allows the user to configure the engines parameters from
  within his preferred chess GUI like Scid, while for the other
  engines usually configuration files are used that have to be edited.
  Therefore, if the engine is an <term>UCI</term> engine, pressing the
  <term>Configure UCI engine</term> button offers a graphical dialogue
  where all engine parameters can be tuned to the users liking. This
  dialogue will look different for each engine as each engine has
  other parameters that can be set. Most of them will influence the
  playing style of the engine. Please refer to the engines
  documentation.
  </p>

  
  <h3>Training</h3>
  <p>
  With the <b>Training</b> button, you can play moves against the analysis
  engine. The time for each move is fixed, and the analysis results are
  not shown when training mode is on.
  </p>
  
  <h3><a Annotate>Annotating a game</h3>
  <p>
  The <b>Add variation</b> button (<button tb_addvar> or <button
  tb_addallvars>)in the analysis window adds the current score and
  best line of play as a new variation in the game.
  </p>
  <p>
  You can do this automatically for a number of moves (annotating the
  game) by pressing the <b>Annotate</b> button, <button tb_annotate>.
  Besides, the engines best lines also <a Moves Informant>Informant</a>
  style evaluation symbols are added in this process.  First, the
  parameters for automatic annotations have to be set:
  <ul>
     <li><term>Set the time between moves in seconds:</term> this
     gives the time, the engine can spend on analysis before moving on
     to the next move.</li>
     <li><term>Add variations</term>: here, one has the choice if
     moves for both sides or only one color should be added, if all
     moves should get an annotation or only if the game move is not
     the best move according to the engines evaluation. Additionally,
     one can add an annotation only if the game move is a blunder. The
     threshold defines the drop of the evaluation necessary to signify
     a blunder, the number is given in units of pawns (i.e. 0.2 means
     that if the evaluation drops by more than 2 centi pawns, the game
     move is a blunder).
     </li>
     <li><term>Annotate variations</term> will include variations
     within the game in the analysis by the engine.</li>
     <li><term>Short annotations<term> will only add minimal
     annotations, that is the pure lines and NAG codes without the
     engines names and usually without the current scores.</li>
     <li><term>Add score to annotations</term> will add the engines
     evaluation in pawn units to the annotations. This information can
     be used later on to draw a <a Score>Score Graph</a> of the game
     as a visualisation of the positions reached.
     </li>
     <li><term>Add annotator tag</term> will add an "Annotator" tag to
     the game header. This is meant for the <term>Short
     annotations</term> mode which does not signify which engine was
     used to gain the current evaluations and lines.
     </li>
     <li><term>Use book</term> allows the specification of an opening
     book. Moves that are contained in this opening book are skipped
     in the annotation process, that is the annotation starts
     automatically in the middle game.</li>
     <li><term>Annotate several games</term>  Scid will first annotate
     the current game with the settings specified, store the results,
     then automatically load the next game and annotate that as well.
     This is repeated till the game loaded reaches the number given in
     the spin box. By this procedure, many games can be annotated
     automatically without any user intervention.
     </li>
     <li><term>Find opening errors</term> will check the opening phase
     up to the move specified for blunders. Additionally, the
     Annotator-tag gets an entry "opBlunder X" where X is the move the
     blunder occurred.
     </li>
     <li><term>Mark tactical exercises</term> This can be used to
     generate exercises for the training function <a FindBestMove>Find
     best move</a>. This option is only available for <term>UCI</term>
     engines.
     </li>
  </ul>
  After pressing the Ok button,  autoplay mode is enabled and the
  engine starts to analyse the game.  When autoplay mode is used and
  the analysis window is open, a variation containing the score and
  best line of play is automatically added for each position as
  autoplay mode moves through the game.  Only positions from the
  current position until the end of the game (or until you exit
  autoplay mode) are annotated, so you can skip annotation of opening
  moves by moving to a middlegame position before starting autoplay.
  </p>
  <p>
  To cancel annotation at any time, just turn off autoplay mode, for example by
  pressing the <b>Escape</b> key in the main window.
  </p>
  <p>
  Note that for simplicity, the <b>Annotate</b> button is only available
  in the window opened as analysis engine 1. If you open an engine as
  analysis engine 2, you cannot use it to annotate the game.
  </p>
  
  <h3>Analysis board</h3>
  <p>
  Pressing the button <button tb_coords> in an analysis window will
  show or hide the analysis board, which shows the position at the end
  of the current best line of play found by the engine. This works for
  most Scid-compatible engines but may not work for all; it depends on
  the move notation an engine uses.
  </p>
  
  <h3>Engine priority</h3>
  <p>
  If an engine is using too much CPU time and affecting the use of Scid
  or other applications, turning on the <b>Low CPU priority</b> button
  <button tb_cpu> may help; it gives the engine a low priority for CPU
  scheduling. On Windows, engines are run on low priority by default.
  </p>
  <p>
  <b>Note</b> that on Unix systems the engines priority can not be set
  back to normal.
  </p>

  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Calvar window help:

set helpTitle(CalVar) "Calculation of variation"
set helpText(CalVar) {<h1>The calculation of variation window</h1>
  <p>
   This training exercise is also known as the Stoyko exercise.  Its
   purpose is to analyse a complex position and evaluate as many sound
   lines as possible, and give a correct evaluation for each of them.
  </p> 
  <h3>Configuration</h3></p>
  <p>
  Three parameters are set :
  <ul>
     <li>The UCI engine that will analyse various lines</li>
     <li>The time, in seconds, the engine will use to analyse the position</li>
     <li>The time, in seconds, the engine will use to analyse each line entered by the user</li>
  </ul>
  </p>

  <h3>Entering lines</h3></p>
  <p>
  Moves are entered as usual with mouse clicks on the board but they
  will not be displayed. At the end of a line the user needs to provide
  an evaluation by clicking on one of the buttons with NAG codes.
  </p>

  <h3>Evaluation verification</h3>
  <p>
  Each time an evaluation is given to a line the engine calculates its
  value and append the line and score just below the user ones.
  </p>

  <h3>Done with position</h3>
  <p>
   When  the user thinks he found all best lines, pressing <term>Done with
   position</term> will append to the game (with the comment <term>Missed
   line</term>), the lines that have a score higher than the best line
   entered by the user.
  </p>

  <p><footer>(Updated: Scid 3.6.21, December 2007)</footer></p>
}


####################
### EPD files help:

set helpTitle(EPD) "EPD files"
set helpText(EPD) {<h1>EPD files</h1>
  <p>
  An EPD (extended position description) file is a collection of positions,
  where each position has some associated text. Like <a PGN>PGN</a>, it
  is a common standard for chess information.
  </p>
  <p>
  An EPD file has a number of defined <term>opcodes</term> (fields)
  which are stored separated by semicolons (<b>;</b>) in the file
  but are shown on separate lines in a Scid EPD window to make editing easier.
  A semicolon within an EPD field is stored as "<b>\s</b>" by Scid to
  distinguish it from an end-of-field marker.
  Each position and its associated opcodes are stored on one single line
  in the EPD file.
  </p>
  <p>
  Standard EPD opcodes include:
  <ul>
  <li> <b>acd</b> Analysis count: depth searched.</li>
  <li> <b>acn</b> Analysis count: number of nodes searched.</li>
  <li> <b>acs</b> Analysis count: search time in seconds.</li>
  <li> <b>bm</b> Best moves: move(s) judged best for some reason.</li>
  <li> <b>ce</b> Centipawn evaluation: evaluation in hundredths of a
  pawn from the perspective of the <b>side to move</b> -- note this
  differs from the Analysis window which shows evaluations in pawns from
  Whites perspective. </li>
  <li> <b>cX</b> Comment (where <b>X</b> is a digit, 0-9).</li>
  <li> <b>eco</b> <a ECO>ECO</a> system opening code.</li>
  <li> <b>id</b> Unique Identification for this position.</li>
  <li> <b>nic</b> <i>New In Chess</i> system opening code.</li>
  <li> <b>pm</b> Predicted move: the first move of the PV.</li>
  <li> <b>pv</b> Predicted variation: the line of best play.</li>
  </ul>
  
  <p>
  EPD files have a number of uses: Scid uses an EPD file to classify
  games according to the <a ECO>Encyclopedia of Chess Openings</a> (ECO)
  system, and you can create an EPD file for your opening repertoire,
  adding comments for positions you regularly reach in games.
  </p>
  <p>
  You can create a new EPD file or open an existing one, from the
  <menu>New</menu> and <menu>Open</menu> commands of the
  <menu>File</menu> menu. At most four EPD files can be open at any time.
  </p>
  
  <h3>EPD windows</h3>
  <p>
  For each open EPD file, you will see a window which shows the text for
  the current position. You do not have to press the Store button to store
  any changes you make to a positions text; the text will be stored whenever
  you move to a different position in the game.
  </p>
  
  <h3>Navigating EPD files</h3>
  <p>
  To browse through the positions in a EPD file, use the
  <menu>Next position</menu> and <menu>Previous position</menu> commands
  from the EPD window <menu>Tools</menu> menu, or use the shortcut
  keys <b>Ctrl+DownArrow</b> and <b>Ctrl+UpArrow</b>.
  These commands move to the next/previous position in the file, clearing
  the current game and setting its start position.
  </p>

  <h3>Annotating</h3>
  <p>
  EPD-files can be automatically annotated by selecting Tools /
  Annotate position. The upcoming dialogue asks for the time that
  should be used for the analysis, then the <a Analysis List>engine
  list</a> is opened for selection of an engine to be used. <b>Note</b> If an
  analysis window is already opened, the analysis is done using this
  engine without asking the user beforehand. Then the engine is
  started and the result added to the EPD. The EPD tags used are :
  acd, acn, ce and pv.
  </p>
  <p>

  <h3>Stripping out EPD fields</h3>
  <p>
  EPD files you find on the Internet may contain fields that do not
  interest you, and they can waste a lot of space in the file.
  For example, an EPD file of computer evaluations might have ce, acd,
  acn, pm, pv and id fields but you may only need the ce and pv fields.
  </p>
  <p>
  You can strip out an EPD opcode from all positions in the EPD file using
  the <menu>Strip out EPD field</menu> from the EPD window <menu>Tools</menu>
  menu.
  </p>

  <h3>The EPD window status bar</h3>
  <p>
  The status bar of each EPD window shows:
  <ul>
  <li>- the file status (<b>--</b> means unchanged, <b>XX</b> means
  changed, and <b>%%</b> means read-only); </li>
  <li>- the file name; </li>
  <li>- the number of positions in the file; </li>
  <li>- legal moves from the current position reach another position
  in this EPD file.</li>
  </ul>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Email window help:

set helpTitle(Email) "Email window"
set helpText(Email) {<h1>The Email window</h1>
  <p>
  Scids email manager window provides a way for you to manage correspondence
  chess games played by email.
  If you do not play email chess, this will be of no interest to you.
  But if you play correspondence chess by email, you can send your email
  messages directly from Scid!
  </p>
  <p>
  To use the email manager:
  <ul>
  <li><b>1)</b> Create the game(s) for your opponent in the
  database. </li>
  <li><b>2)</b> In the email manager window, select <b>Add</b> and enter
  your opponents details: name, email address, and the game numbers in the
  database. </li>
  <li><b>3)</b> Select <b>Send email</b> in the email window each time you
  have added moves to the game(s) and want to send a message. </li>
  </ul>
  
  <p>
  When you send an email message, Scid generates the message with the games
  in <a PGN>PGN</a> format <b>without</b> any comments, annotations or variations, since
  you would not usually want your opponent to see your analysis.
  You can edit the message before sending it to add conditional moves or
  other text.
  </p>
  <p>
  For each opponent, you may have any number of games; one or two is most
  common. Note that Scid does not check if game numbers change, so after
  setting up the details of your opponents, be careful to avoid deleting games
  or sorting your database of email games, since this will rearrange games
  and the game numbers for each opponent will be incorrect.
  </p>
  
  <h3>Limitations</h3>
  <p>
  Scid does not have any capability to check your email folder yet, so you
  still need to add your opponents moves to the games manually.
  </p>
  
  <h3>Configuration</h3>
  <p>
  A copy of each email message sent by Scid is stored in the file
  <b>~/.scid/scidmail.log</b>. If you want them to be stored
  in a different file, you will need to edit the file <b>tcl/start.tcl</b>
  and recompile Scid.
  </p>
  <p>
  Scid can send email messages using an SMTP server or sendmail.
  User the <b>Settings</b> button in the Email Manager to specify which
  you want to use.
  </p>
  <p>
  Scid stores the opponent details for a database in a file
  with the same name as the database and the suffix "<b>.sem</b>".
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Reports help:

set helpTitle(Reports) "Reports"
set helpText(Reports) {<h1>Reports</h1>
  <p>
  A <term>Report</term> in Scid is a document containing information about
  a particular position and/or player. There are two types of report Scid can
  generate: Opening Reports and Player Reports.
  </p>
  
  <h3><name Opening>Opening Reports</name></h3>
  <p>
  Scid can produce an <term>opening report</term> that displays interesting
  facts about an opening position. To generate an opening report, first make
  sure the displayed position is the one you want a report for, then select
  <b>Opening Report</b> from the <b>Tools</b> menu.
  </p>
  <p>
  The <term>Opening Report</term> window displays the results of the report
  Scid generated. The <b>File</b> menu has commands to save the report
  to a file in plain text, HTML or <a LaTeX>LaTeX</a> format.
  </p>
  <p>
  The first sections of the report present information on the games that
  reach the report position, and moves played from the position. You can
  see if the opening is becoming more popular, if it has many short draws,
  and what move orders (transpositions) are used to reach it.
  </p>
  <p>
  The Positional Themes section reports the frequency of certain common
  positional themes in the report games. For this, the first 20 moves of
  each game (hence the first 40 positions of each game after the starting
  position) are examined. To be counted as containing a theme, a game must
  contain that particular theme in at least 4 positions of its first 20
  moves. This avoids the brief occurrence of a theme (such as an isolated
  Queen pawn which is quickly captured) distorting results.
  </p>
  <p>
  The final and largest part of the report is the theory table. When saving
  the report to a file, you can choose to save just the theory table, a compact
  report without the theory table, or the whole report.
  </p>
  <p>
  Almost all the report sections can be turned on or off or adjusted in
  the opening report options, so you can customize a report to only show
  the information that interests you.
  </p>
  <p>
  Most items of information in the report window that are shown in color,
  invoke some action when selected with the left mouse button. For example,
  you can click on a game reference to load that game, or click on a
  positional theme to set the filter to contain only the report games where
  that theme occurred.
  </p>
  <p>
  Choosing <term>Merge Games</term> will merge the games from the
  opening report into the currently displayed game. This merges in
  the whole games as variations to the game, including the full
  reference.
  </p>
  
  <h4>Favorites</h4>
  <p>
  The <menu>Favorites</menu> menu in the report window lets you maintain a
  collection of favorite opening report positions and generate the opening
  reports for all those positions easily. Selecting "Add Report..." from
  the Favorites menu will add the current position as a favorite report
  position; you will be prompted to enter a name that will be used as
  the filename when favorite reports are generated.
  </p>
  <p>
  Select "Generate Reports..." from the Favorites menu to generate a report
  for each of your favorite reports using the current database. A dialog
  box will appear allowing you to specify the report type and format, and
  a directory where report files will be saved. A suitable suffix for the
  format you selected (e.g. ".html" for HTML format) will be added to each
  report file name.
  </p>
  
  <h3><name Player>Player Reports</name></h3>
  <p>
  A <term>Player Report</term> is very similar to an opening report, but it
  contains information about the games of a single player with the white or
  black pieces. You can generate a player report from the Tools menu, or from
  the <a PInfo>Player Info</a> window.
  </p>
  <p>
  A player report can be generated either for all games by the specified player
  with the specified pieces, or for only the subset of those games which reach
  the current position on the main window chessboard.
  </p>
  
  <h3>Limits</h3>
  <p>
  There is a limit of 2000 games for most data generated by reports, so
  if the report position occurs in more than 2000 games, some results may
  be slightly incorrect.
  </p>
  <p>
  Also, there is a limit of 500 games for the theory table. If the report
  position occurs in more than 500 games, only the 500 games with the highest
  average Elo rating are used to generate the theory table. You can adjust the
  number of games used to generate the theory table in the Report options.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}


####################
### Player List help:

set helpTitle(PList) "Player Finder window"
set helpText(PList) {<h1>The Player Finder window</h1>
  <p>
  The <term>Player Finder</term> window displays a list of names of
  players in the current database. Selecting a player will open the
  <a PInfo>Player Info</a> window to display more detailed information
  about that player.
  </p>
  <p>
  Five columns are displayed showing each player's name, peak Elo
  rating, number of games played and the year of their oldest and
  newest game.
  Click on any column title at the top of the list to sort the
  list by that column.
  </p>
  <p>
  The controls below the list allow you to filter the list contents.
  You can alter the maximum list size, enter a case-insensitive player
  name prefix (such as "ada" to search for "Adams"), and restrict the
  ranges of Elo rating and number of games played.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Player Info help:

set helpTitle(PInfo) "Player Info window"
set helpText(PInfo) {<h1>The Player Info window</h1>
  <p>
  
  The <term>Player Information</term> window is produced or updated whenever
  you click the left mouse button on a player name in the game information
  area (below the chessboard) or in the <a Crosstable>crosstable</a> window.
  </p>
  <p>
  It displays (hopefully) useful information about the player, including their
  success with White and Black, favorite openings (by <a ECO>ECO code</a>),
  and rating history.
  </p>
  <p>
  All percentages displayed are an expected score (success rate), from the
  player's perspective -- so higher is always better for the player, whether they
  are White or Black.
  </p>
  <p>
  You can see the player's rating history in a graph by pressing the
  <a Graphs Rating>Rating graph</a> button.
  </p>
  <p>
  Any number printed in red can be clicked with the left mouse button to set
  the <a Searches Filter>filter</a> to the games it represents.
  </p>
  <p>
  If a current verison of the ratings file (cf. <url
  http://scid.sourceforge.net/>Scid website</url>) is online links to
  additional ressources may be present that will be accessible by the
  users web browser provided Internet access is available. These infos
  can be accessed by the following symbols in the player information
  window (note that not all symbols may be present!):
  <ul>
  <li><button fidelnk> Go to the players FIDE profile page</li>
  <li><button iccflnk> Go to the players ICCF profile page</li>
  <li><button dsblnk> Go to the players profile at the Deutscher
  Schachbund.</li>
  <li><button bcflnk> Go to the players profile at the British Chess
  Federation.</li>
  <li><button smlnk> Go to te players profile at SchemingMind.</li>
  <li><button wikiplnk> Call up the players Wikipedia profile page.
  Scid will try to use the language set for Scid itself. If no page is
  available, it will resort to German (for pure technical reasons).</li>
  <li><button dnblnk> Call up the German national library for books by
  or about the player.</li>
  <li><button seealsolnk> An alternative way to access Wikipedia.</li>
  <li><button viaflnk> Call up player information at the Virtual
  Autority File (VIAF). This could be used to call up books of/by this
  player in the contributing national libraries.</li>
  </ul>
  
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}

####################
### Graphs help:

set helpTitle(Graphs) "Graph windows"
set helpText(Graphs) {<h1>Graph windows</h1>
  <p>
  Scid has a number of windows which display information graphically.
  They are explained below.
  </p>
  
  <h3><name FilterGraph>Relative and absolute Filter Graph windows</name></h3>
  <p>
  The <term>relative Filter Graph</term> window shows trends by date or by
  Elo rating for the games in the current filter, compared to the
  entire database. For example, it is useful when the <a Tree>tree</a>
  is open as a tool showing how the current opening position has changed
  in popularity in recent years or decades, or whether it is especially
  popular among higher-rated players such as grandmasters.
  Each point on the graph represents the number of games in the filter
  per 1000 games in the entire database, for a particular date or Elo
  rating range.
  </p>
  <p>
  The second Filter graph window is the <term>absolute Filter
  Graph</term> window. This graph shows the absolute quantity of games
  in the filter according the selecte criteria. It is possible to select
  the criteria: Decade, Year, Rating and Moves.<br>
  The small button near the Close-Button opens the dialog to configure
  the graph. You can select the range (from, to) and the size of
  intervall for the x-axes. The "decade"-criteria can't be configured,
  use Year insteed. If "Estimate" selected a missing rating will be
  estimate like described below. In other case no estimation is done
  and missing ratings are count as zero. This matches the Min. Elo
  evaluation in the statistic-window. Use "Update" to start a new
  evaluation with the actual value without closing the dialog.
  </p>
  <p>
  Please note: The calculation can be need some time on large ranges and
  small intervalls, in addition the readability degreases. 
  </p>
  <p>
  When plotting the Filter graph by rating, Scid uses the average (mean)
  rating for each game. Estimate ratings (such as those in the spelling file)
  are not used. If one player in a game has a rating but the opponent
  does not, the opponent is presumed to have the same up to a limit of 2200.
  For example, if one player is rated 2500 and the opponent has no rating,
  the mean rating is (2500+2200)/2=2350.
  </p>
  
  <h3><name Rating>Rating Graph window</name></h3>
  <p>
  The <term>Rating Graph</term> window shows the rating history of one
  player or the two players of the current game.
  You can produce the graph for a single player by pressing the
  <b>Rating graph</b> button in the <a PInfo>player information</a>
  window, or produce it for the two players of the current game by
  selecting <b>Rating graph</b> from the <menu>Tools</menu> menu.
  </p>
  
  <h3><name Score>Score Graph window</name></h3>
  <p>
  The <term>Score Graph</term> window shows the numeric evaluations (scores)
  stored in the comments of the current game as a graph.
  You can click the left mouse button anywhere in the score graph to go to the
  corresponding position in the game.
  </p>
  <p>
  Two types of evaluation comment are recognized: those produced by
  the Scid <a Analysis>analysis</a> window (which have the format
  <ul>
  <li><b>1.e4 {"+0.25 ...."}</b></li>
  </ul>
  and are always scores from White's perspective) and those produced
  by the Crafty annotate command (which have the format
  <ul>
  <li><b>1.e4 ({9:+0.25} ....)</b></li>
  </ul>
  and are also scores from White's perspective).
  </p>
  <p>
  In case the scores are not given from whites perspective, one can
  choose the perspective to use from the options menu to correct for
  this.
  ###--- Checking both ??? ---###
  </p>
  
  <h3><name Tree>Tree Graph window</name></h3>
  <p>
  The <term>Tree Graph</term> window is available from the tree
  window. It shows the performance of the most popular moves from the
  current position. More information is available from the
  <a Tree Graph>Tree</a> help page.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Tablebases help:

set helpTitle(TB) "Tablebases"
set helpText(TB) {<h1>Tablebases</h1>
  
  <p>
  A <term>tablebase</term> is a file containing the perfect result
  information about all positions of a particular material setup,
  such as King and Rook versus King and Pawn. Tablebases for all
  material situations up to five men (including the Kings) have been
  generated, and some simple 6-men tablebases are also available.
  </p>
  <p>
  Scid can use Nalimov-format tablebases that are used by many modern
  chess engines. These often end with the file suffix <b>.nbw.emd</b>
  or <b>.nbb.emd</b>. All 3-, 4- and 5-men Nalimov tablebases can be
  used in Scid.
  </p>
  
  <h3>Using tablebases in Scid</h3>
  <p>
  To use tablebase files in Scid, simply set their directories by
  selecting <b>Tablebase directory...</b> from the <menu>Options</menu> menu.
  You can select up to 4 directories where your tablebase files are stored.
  You can press a <b>...</b> button to the right of an entry to choose a
  file, to specify that the directory of that file should be used.
  </p>
  <p>
  When a position found in a tablebase file is reached, the game information
  area (below the chessboard) will show tablebase information. You can
  configure the amount of information shown by clicking the right-mouse
  button in that area or selecting <b>Game information</b> from the
  <menu>Options</menu> menu. Selecting the "result and best moves" option
  gives the most useful information, but is much often slower than
  the "result only" option.
  </p>
  
  <h3>The Tablebase window</h3>
  <p>
  You can get even more tablebase information about the current position
  by opening the <term>Tablebase window</term> (<menu>Windows</menu> menu,
  shortcut: Ctrl+Shift+=). This window shows the result with perfect play
  of all legal moves from the current position.
  </p>
  <p>
  The window has two main parts. The summary frame (on the left) shows
  which tablebases Scid found on your computer and a summary for each
  tablebase. The results frame (on the right) shows optimal results for
  all moves from the current position displayed in the main window.
  </p>
  
  <h4>The summary frame</h4>
  <p>
  The top part of the summary frame lets you select a particular
  tablebase. Those you have available are shown in blue and unavailable
  tablebases are shown in gray, but you can select any tablebase.
  The lower part of the summary frame shows summary information for the
  selected tablebase. (Not all tablebases have a summary recorded in
  Scid yet.)
  </p>
  <p>
  The summary includes the frequency (how many games per million reach a
  position with this material, computed from a database of more than
  600,000 master-level games), a longest mate for either side, and the
  number of mutual (or "reciprocal") zugzwangs. A mutual zugwang is a
  position where white to move draws and black to move loses, or where
  white to move loses and black to move draws, or where whoever moves
  loses.
  </p>
  <p>
  For some tablebases with mutual zugzwangs, the summary also includes
  a list of all of the zugwang positions or a selection of them. A full
  list for every tablebase is not feasible since some tablebases have
  thousands of mutual zugzwangs.
  </p>
  <p>
  You can set up a random position from the selected tablebase by pressing
  the <b>Random</b> button.
  </p>
  
  <h4>The results frame</h4>
  <p>
  The results frame is updated whenever the chessboard in the main window
  changes. The first line shows how many moves win (+), draw (=), lose (-),
  or have an unknown result (?). The rest of the frame gives a more detailed
  list of results, ranking them from shortest to longest mates, then draws,
  then longest to shortest losses. All distances are to checkmate.
  </p>
  
  <h4>The results board</h4>
  <p>
  In a tablebase position, it is often useful what the tablebase results
  would be if all the pieces in the current position were on their
  current squares but one particular piece was moved somewhere else.
  For example, you may want to determine how close a king has to be to
  a passed pawn to win or draw a particular position. In endgame books
  this information is often called the <i>winning zone</i> or
  <i>drawing zone</i> of a piece in a position.
  </p>
  <p>
  You can find this information in Scid by pressing the button with an
  image of a chessboard, to show the <term>results board</term> in the
  tablebase window.
  When you press the left mouse button on any piece in this board, a
  symbol is drawn in each empty square showing what the tablebase result
  would be (with the same side to move as the current main window position)
  if the selected piece was on that square.
  </p>
  <p>
  There are five different symbols a square can have:
  a white <b>#</b> means White wins;
  a black <b>#</b> means Black wins;
  a blue <b>=</b> means the position is drawn;
  a red <b>X</b> means the position is illegal (because the kings are
  adjacent or the side to move is giving check); and
  a red <b>?</b> means the result is unknown because the necessary
  tablebase file is not available.
  </p>
  
  <h3>Obtaining Tablebase files</h3>
  <p>
  See the <a Author Related>related links</a> section for help on finding
  tablebase files on the Internet.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Bookmarks help:

set helpTitle(Bookmarks) "Bookmarks"
set helpText(Bookmarks) {<h1>Bookmarks</h1>
  <p>
  Scid allows you to <term>bookmark</term> important games for easy
  future reference. The bookmarks menu is available from the
  <menu>File</menu> menu, the toolbar, or the <B>Ctrl+B</b> shortcut key.
  </p>
  <p>
  When you select a bookmarked game from the Bookmarks menu, Scid will
  open its database if necessary, find that game, and move to the game
  position at which it was bookmarked.
  </p>
  <p>
  Only games in a Scid format database (not a <a PGN>PGN</a> file or the clipbase)
  can be bookmarked.
  </p>
  <p>
  If the database of a bookmarked game is sorted or compacted, the bookmark
  details may become out of date. When that happens, Scid will search the
  database for the best matching game (comparing player names, site, etc)
  when the bookmark is selected, so the bookmarked game should still be
  loaded. However, if details of the bookmarked game change, it is possible
  that a different game will match the bookmark details better and be
  loaded instead. So it is a good idea to re-bookmark a game if you edit
  its players, site, result, round or year.
  </p>
  
  <h3>Editing bookmarks</h3>
  <p>
  With the bookmark editor, you can change the menu text displayed for
  each bookmarked game and add folders to categorize bookmarks.
  </p>
  
  <h3>Hints</h3>
  <p>
  You can use bookmarks for fast access to databases you use often
  by bookmarking a game from each database. Another good use for
  bookmarks is to add important games you find when studying a
  particular chess opening.
  </p>
  <p>
  The bookmarks menu contains an entry for controlling the display of
  bookmark folders: they can be shown as submenus (useful when there are
  many bookmarks), or as a single list.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Command-line options help:

set helpTitle(Cmdline) "Command-line options"
set helpText(Cmdline) {<h1>Command-line options</h1>
  <p>
  When you start Scid from a shell or console, there are command-line
  options you can specify. Scid-format databases (with or without a
  file suffix such as ".si3") and <a PGN>PGN</a> files to be opened can be given,
  for example:
  <ul>
  <li>scid mybase newgames.pgn</li>
  </ul>
  will start Scid and open the Scid database called mybase and the
  <a PGN>PGN</a> file named newgames.pgn.
  </p>
  <p>
  There are also optional arguments to control which files Scid should
  search for and use when it starts. You can turn off the use of
  <a TB>tablebases</a> with the <b>-xtb</b> (or <b>-xt</b>) option,
  avoid loading the <a ECO>ECO openings classification</a> file with
  <b>-xeco</b> or <b>-xe</b>, and avoid loading the
  <a Maintenance Spellcheck>spelling</a> file
  with <b>-xspell</b> or <b>-xs</b>. Also, the option <b>-fast</b>
  or <b>-f</b> does all three, so <b>scid -f</b> is equivalent
  to <b>scid -xeco -xspell -xtb</b>.
  </p>

  <p>
  Additionally, a filter file (.sso) can be used on the command line.
  <ul>
  <li>scid mybase myfilter</li>
  </ul>
  will open mybase and run myfilter immediately against it to select a
  set of games. This can e.g. be used to select a list of unfinished
  games in a pgn file.
  </p>
  
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Pgnscid help:

set helpTitle(Pgnscid) "Pgnscid"
set helpText(Pgnscid) {<h1>Pgnscid</h1>
  <p>
  <term>Pgnscid</term> is the separate program that you need to use to
  convert <a PGN>PGN</a> (portable game notation) files into Scid databases.
  </p>
  <p>
  To convert a file named <i>myfile.pgn</i>, simply type:
  <ul>
  <li> <b>pgnscid myfile.pgn</b> </li>
  </ul>
  and the scid database (consisting of <i>myfile.si3</i>, <i>myfile.sg3</i>
  and <i>myfile.sn3</i>) will be created.
  Any errors or warnings will be written to the file <i>myfile.err</i>.
  </p>
  <p>
  If you want the database to be created in a different directory or have
  a different name, you can add the database name to the command line,
  for example:
  <ul>
  <li> <b>pgnscid myfile.pgn mybase</b> </li>
  </ul>
  will create a database consisting of the files <i>mybase.si3</i>,
  <i>mybase.sg3</i> and <i>mybase.sn3</i>.
  </p>
  <p>
  Note that pgnscid (and scid) can read Gzipped <a PGN>PGN</a> files
  (e.g. <b>mybase.pgn.gz</b>)
  directly, so if you have a large <a PGN>PGN</a> file compressed with Gzip to save
  disk space, you do not have to un-gzip it first.
  </p>
  
  <h3>Options</h3>
  <p>
  There are two optional arguments pgnscid can accept before the filename:
  <b>-f</b> and <b>-x</b>.
  </p>
  <p>
  The <b>-f</b> option forces overwriting of an existing database; by
  default, pgnscid will not convert to a database that already exists.
  </p>
  <p>
  The <b>-x</b> option causes pgnscid to ignore all text between games.
  By default, text between games is stored as a pre-game comment of the
  game that follows. This option only affects text between games; standard
  comments inside each game are still converted and stored.
  </p>
  
  <h3>Formatting player names</h3>
  <p>
  To reduce the number of multiple spellings of names that refer to the
  same player, some basic formatting of player names is done by pgnscid.
  For example, the number of spaces after each comma is standardized to one,
  any spaces at the start and end of a name are removed, and a dot at the
  end of a name is removed.
  Dutch prefixes such as "van den" and "Van Der" are also normalized to have
  a capital V and small d.
  </p>
  <p>
  You can edit (and even spellcheck) player, event, site and round names in
  Scid; see the <a Maintenance Editing>Maintenance</a> help page for details.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


####################
### File formats help:

set helpTitle(Formats) "File Formats"
set helpText(Formats) {<h1>Scid File Formats</h1>
  <p>
  Scid databases consist of three essential files: an Index file, a Name
  file and a Game file. All have a three-letter suffix starting with "s":
  ".si3" for index files, ".sn3" for name files, and ".sg3" for game files.
  </p>
  
  <h3>The Index (.si3) file</h3>
  <p>
  This file contains a description for the database and a small fixed-size
  entry for each game. The current size is 41 bytes per game.
  Of this, about 28 bytes is essential information such as the result,
  date, player/event/site name ID numbers (the actual names are in the
  Name file), etc.
  </p>
  <p>
  The remaining 13 bytes contain redundant but useful information about the
  game that is used to speed up position, material and pattern searches.
  See the section <a Formats Fast>Fast searches</a> below for more information.
  </p>
  
  <h3>The Name (.sn3) file</h3>
  <p>
  This file contains all player, event, site and round names used in the
  database. Each name is stored only once even if it occurs in many games.
  The name file is usually the smallest of the three essential files in a
  database.
  </p>

  <h3>The Game (.sg3) file</h3>
  <p>
  This file contains the actual moves, variations and comments of each game.
  The move encoding format is very compact: most moves take only one byte
  of storage.
  </p>
  <p>
  When a game is replaced, its new version is saved to the <i>end</i> of
  the game file, so wasted space can accumulate over time. You can restore
  a database to its minimal size by <a Compact>compacting</a> it.
  </p>
  
  <h3>Other Scid files</h3>
  <p>
  An <a EPD>EPD</a> file (suffix: ".epd")
  contains a number of chess positions, each with a text comment.
  The EPD file format is described in the <a Author Related>PGN standard</a>.
  </p>
  <p>
  An email (suffix: ".sem") file for a database stores details of the opponents
  you send email messages to.
  </p>
  <p>
  A SearchOptions (suffix: ".sso") file contains Scid
  <a Searches Header>header</a> or
  <a Searches Material>material/pattern</a> search settings.
  </p>
  
  <h3><name Fast>Fast searches in Scid</name></h3>
  <p>
  As mentioned above, the index file stores some redundant but useful
  information about each game to speed up position or material searches.
  </p>
  <p>
  For example, the material of the final position is stored. If you search
  for rook and pawn endings, then all games that end with a queen, bishop
  or knight on the board (and have no pawn promotions) will be quickly
  skipped over.
  </p>
  <p>
  Another useful piece of information stored is the order in which pawns
  leave their home squares (by moving, or by being captured). This is used
  to speed up tree or exact position searches, especially for opening
  positions. For example, when searching for the starting position of the
  French defence (1.e4 e6), every game starts with 1.e4 c5, or 1.d4, etc, will
  be skipped, but games starting with 1.e4 e5 will still need to be searched.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### Options and Fonts help:

set helpTitle(Options) "Options"
set helpText(Options) {<h1>Options and preferences</h1>
  <p>
  Many Scid options and preferences (such as the board size, colors, fonts,
  and default settings) are adjustable from the <menu>Options</menu> menu.
  All these (and more, such as the last directory you loaded a database from
  and the sizes of some windows) are saved to an options file when
  you select <b>Save Options</b> from the Options menu.
  The options file is loaded whenever you start Scid.
  </p>
  <p>
  If you use Windows, the options file is <b>scid.opt</b> in the directory
  where the Scid program file <b>scid.exe</b> is located. For users of Unix
  operating systems (such as Solaris or Linux) the file
  is <b>~/.scid/scidrc</b>.
  </p>
  
  <h3><name MyPlayerNames>Setting your player names</name></h3>
  <p>
  There may be a player name (or several names) for whom, whenever a game
  is loaded, you would like the main window chessboard to be displayed from
  the perspective of that player. You can configure a list of such names
  using <b>My Player Names...</b> from the <menu>Options/Chessboard</menu>
  menu. In the dialog box that appears, enter one player name on each line.
  Wildcard characters ("<b>?</b>" for exactly one character and "<b>*</b>"
  for a sequence of zero or more characters) can be used.
  </p>
  
  <h3><name Fonts>Setting Fonts</name></h3>
  <p>
  Scid has three basic fonts it uses in most of its windows, and you can
  customize all of them. They are called <b>regular</b>, <b>small</b> and
  <b>fixed</b>.
  </p>
  <p>
  The fixed font should be a fixed-width (not proportional) font. It is used
  for the <a Tree>tree</a> and <a Crosstable>crosstable</a> windows.
  </p>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

####################
### NAG values help:

set helpTitle(NAGs) "NAG values"
set helpText(NAGs) {<h1>Standard NAG values</h1>
  <p>
  Standard NAG (Numeric Annotation Symbol) values defined in the
  <a Author Related>PGN standard</a> are:
  </p>
  <cyan>
  <ul>
  <li>  1     Good move                                                      : !       </li>
  <li>  2     Poor move                                                      : ?       </li>
  <li>  3     Excellent move                                                 : !!      </li>
  <li>  4     Blunder                                                        : ??      </li>
  <li>  5     Interesting move                                               : !?      </li>
  <li>  6     Dubious move                                                   : ?!      </li>
  <li>  7     Forced move                                                    : forced  </li>
  <li>  8     Singular move; no reasonable alternatives                      : □       </li>
  <li>  9     Worst move                                                     : worst   </li>
  <li> 10     Drawish position                                               : =       </li>
  <li> 11     Equal chances, quiet position                                  : =, quiet</li>
  <li> 12     Equal chances, active position                                 : ↹       </li>
  <li> 13     Unclear position                                               : ~       </li>
  <li> 14     White has a slight advantage                                   : +=      </li>
  <li> 15     Black has a slight advantage                                   : =+      </li>
  <li> 16     White has a moderate advantage                                 : +/-     </li>
  <li> 17     Black has a moderate advantage                                 : -/+     </li>
  <li> 18     White has a decisive advantage                                 : +-      </li>
  <li> 19     Black has a decisive advantage                                 : -+      </li>
  <li> 20     White has a crushing advantage                                 : +--     </li>
  <li> 21     Black has a crushing advantage                                 : --+     </li>
  <li> 22     White is in zugzwang                                           :  ⊙      </li>
  <li> 23     Black is in zugzwang                                           :  ⊙      </li>
  <li> 24     White has a slight space advantage                             :  ◯      </li>
  <li> 25     Black has a slight space advantage                             :  ◯      </li>
  <li> 26     White has a moderate space advantage                           :  ◯◯     </li>
  <li> 27     Black has a moderate space advantage                           :  ◯◯     </li>
  <li> 28     White has a decisive space advantage                           :  ◯◯◯    </li>
  <li> 29     Black has a decisive space advantage                           :  ◯◯◯    </li>
  <li> 30     White has a slight time (development) advantage                :  ↻      </li>
  <li> 31     Black has a slight time (development) advantage                :  ↺      </li>
  <li> 32     White has a moderate time (development) advantage              :  ↻↻     </li>
  <li> 33     Black has a moderate time (development) advantage              :  ↺↺     </li>
  <li> 34     White has a decisive time (development) advantage              :  ↻↻↻    </li>
  <li> 35     Black has a decisive time (development) advantage              :  ↺↺↺    </li>
  <li> 36     White has the initiative                                       :  ↑      </li>
  <li> 37     Black has the initiative                                       :  ↓      </li>
  <li> 38     White has a lasting initiative                                 :  ⇑      </li>
  <li> 39     Black has a lasting initiative                                 :  ⇓      </li>
  <li> 40     White has the attack                                           :  →      </li>
  <li> 41     Black has the attack                                           :  ←      </li>
  <li> 42     White has insufficient compensation for material deficit       :  &/-    </li>
  <li> 43     Black has insufficient compensation for material deficit       :  &/+    </li>
  <li> 44     White has sufficient compensation for material deficit         :  =/&    </li>
  <li> 45     Black has sufficient compensation for material deficit         :  =/&    </li>
  <li> 46     White has more than adequate compensation for material deficit :  +/&    </li>
  <li> 47     Black has more than adequate compensation for material deficit :  -/&    </li>
  <li> 48     White has a slight center control advantage                    :  ⊞      </li>
  <li> 49     Black has a slight center control advantage                    :  ⊞      </li>
  <li> 50     White has a moderate center control advantage                  :  ⊞⊞     </li>
  <li> 51     Black has a moderate center control advantage                  :  ⊞⊞     </li>
  <li> 52     White has a decisive center control advantage                  :  ⊞⊞⊞    </li>
  <li> 53     Black has a decisive center control advantage                  :  ⊞⊞⊞    </li>
  <li> 54     White has a slight kingside control advantage                  :  ⟩      </li>
  <li> 55     Black has a slight kingside control advantage                  :  ⟩      </li>
  <li> 56     White has a moderate kingside control advantage                :  ⟫      </li>
  <li> 57     Black has a moderate kingside control advantage                :  ⟫      </li>
  <li> 58     White has a decisive kingside control advantage                :  ⋙      </li>
  <li> 59     Black has a decisive kingside control advantage                :  ⋙      </li>
  <li> 60     White has a slight queenside control advantage                 :  ⟨      </li>
  <li> 61     Black has a slight queenside control advantage                 :  ⟨      </li>
  <li> 62     White has a moderate queenside control advantage               :  ⟪      </li>
  <li> 63     Black has a moderate queenside control advantage               :  ⟪      </li>
  <li> 64     White has a decisive queenside control advantage               :  ⋘      </li>
  <li> 65     Black has a decisive queenside control advantage               :  ⋘      </li>
  <li> 66     White has a vulnerable first rank                              :         </li>
  <li> 67     Black has a vulnerable first rank                              :         </li>
  <li> 68     White has a well protected first rank                          :         </li>
  <li> 69     Black has a well protected first rank                          :         </li>
  <li> 70     White has a poorly protected king                              :         </li>
  <li> 71     Black has a poorly protected king                              :         </li>
  <li> 72     White has a well protected king                                :         </li>
  <li> 73     Black has a well protected king                                :         </li>
  <li> 74     White has a poorly placed king                                 :         </li>
  <li> 75     Black has a poorly placed king                                 :         </li>
  <li> 76     White has a well placed king                                   :         </li>
  <li> 77     Black has a well placed king                                   :         </li>
  <li> 78     White has a very weak pawn structure                           :         </li>
  <li> 79     Black has a very weak pawn structure                           :         </li>
  <li> 80     White has a moderately weak pawn structure                     :         </li>
  <li> 81     Black has a moderately weak pawn structure                     :         </li>
  <li> 82     White has a moderately strong pawn structure                   :         </li>
  <li> 83     Black has a moderately strong pawn structure                   :         </li>
  <li> 84     White has a very strong pawn structure                         :         </li>
  <li> 85     Black has a very strong pawn structure                         :         </li>
  <li> 86     White has poor knight placement                                :         </li>
  <li> 87     Black has poor knight placement                                :         </li>
  <li> 88     White has good knight placement                                :         </li>
  <li> 89     Black has good knight placement                                :         </li>
  <li> 90     White has poor bishop placement                                :         </li>
  <li> 91     Black has poor bishop placement                                :         </li>
  <li> 92     White has good bishop placement                                :  ↗      </li>
  <li> 93     Black has good bishop placement                                :  ↖      </li>
  <li> 94     White has poor rook placement                                  :         </li>
  <li> 95     Black has poor rook placement                                  :         </li>
  <li> 96     White has good rook placement                                  :  ⇈      </li>
  <li> 97     Black has good rook placement                                  :  ⇊      </li>
  <li> 98     White has poor queen placement                                 :         </li>
  <li> 99     Black has poor queen placement                                 :         </li>
  <li>100     White has good queen placement                                 :         </li>
  <li>101     Black has good queen placement                                 :         </li>
  <li>102     White has poor piece coordination                              :         </li>
  <li>103     Black has poor piece coordination                              :         </li>
  <li>104     White has good piece coordination                              :         </li>
  <li>105     Black has good piece coordination                              :         </li>
  <li>106     White has played the opening very poorly                       :         </li>
  <li>107     Black has played the opening very poorly                       :         </li>
  <li>108     White has played the opening poorly                            :         </li>
  <li>109     Black has played the opening poorly                            :         </li>
  <li>110     White has played the opening well                              :         </li>
  <li>111     Black has played the opening well                              :         </li>
  <li>112     White has played the opening very well                         :         </li>
  <li>113     Black has played the opening very well                         :         </li>
  <li>114     White has played the middlegame very poorly                    :         </li>
  <li>115     Black has played the middlegame very poorly                    :         </li>
  <li>116     White has played the middlegame poorly                         :         </li>
  <li>117     Black has played the middlegame poorly                         :         </li>
  <li>118     White has played the middlegame well                           :         </li>
  <li>119     Black has played the middlegame well                           :         </li>
  <li>120     White has played the middlegame very well                      :         </li>
  <li>121     Black has played the middlegame very well                      :         </li>
  <li>122     White has played the ending very poorly                        :         </li>
  <li>123     Black has played the ending very poorly                        :         </li>
  <li>124     White has played the ending poorly                             :         </li>
  <li>125     Black has played the ending poorly                             :         </li>
  <li>126     White has played the ending well                               :         </li>
  <li>127     Black has played the ending well                               :         </li>
  <li>128     White has played the ending very well                          :         </li>
  <li>129     Black has played the ending very well                          :         </li>
  <li>130     White has slight counterplay                                   :  ⇄      </li>
  <li>131     Black has slight counterplay                                   :  ⇆      </li>
  <li>132     White has moderate counterplay                                 :  ⇄⇄     </li>
  <li>133     Black has moderate counterplay                                 :  ⇆⇆     </li>
  <li>134     White has decisive counterplay                                 :  ⇄⇄⇄    </li>
  <li>135     Black has decisive counterplay                                 :  ⇆⇆⇆    </li>
  <li>136     White has moderate time control pressure                       :  ⊕      </li>
  <li>137     Black has moderate time control pressure                       :  ⊖      </li>
  <li>138     White has severe time control pressure                         :  ⊕⊕     </li>
  <li>139     Black has severe time control pressure                         :  ⊖⊖     </li>
  </ul>
  </cyan>
  
  <p>
  Other proposed NAG values for Chess Informant publication symbols include:
  </p>
  <cyan>
  <ul>
  <li>140     With the idea ...           : △  </li>
  <li>141     Aimed against ...           :    </li>
  <li>142     Better move                 : ⌓  </li>
  <li>143     Worse move                  :    </li>
  <li>144     Equivalent move             : R  </li>
  <li>145     Editor's Remark             : RR </li>
  <li>146     Novelty                     : N  </li>
  <li>147     Weak point                  : ×  </li>
  <li>148     Endgame                     : ⊥  </li>
  <li>149     Line                        : ⟺  </li>
  <li>150     Diagonal                    : ⇗  </li>
  <li>151     White has a pair of Bishops : ◫  </li>
  <li>152     Black has a pair of Bishops :    </li>
  <li>153     Bishops of opposite color   : ◨  </li>
  <li>154     Bishops of same color       : ⊶  </li>
  </ul>
  </cyan>
  
  <p>
  Other suggested values are:
  </p>
  <cyan>
  <ul>
  <li>190     Etc.            : ǁ </li>
  <li>191     Doubled pawns   : ⡁ </li>
  <li>192     Isolated pawn   : ⚯ </li>
  <li>193     Connected pawns : ⚮ </li>
  <li>194     Hanging pawns   :   </li>
  <li>195     Backwards pawn  :   </li>
  </ul>
  </cyan>
  
  <p>
  Symbols defined by Scid for its own use are:
  </p>
  <cyan>
  <ul>
  <li>201   Diagram        : D or #</li>
  <li>210   see            : —     </li>
  <li>211   mate           : #     </li>
  <li>212   passed pawn    : ⚨     </li>
  <li>213   more pawns     :       </li>
  <li>214   with           : ⌊     </li>
  <li>215   without        : ⌋     </li>
  </ul>
  </cyan>
  
  <p><footer>(Updated: Scid 4.2.2, January 2010)</footer></p>
}


set helpTitle(ECO) "ECO guide"
set helpText(ECO) {<h1>ECO openings classification</h1>
  <p>
  Scid can classify chess games according to the <b>ECO</b>
  (Encyclopedia of Chess Openings) chess openings classification.
  An standard ECO code consists of a letter (A..E) followed by two
  digits, so there are 500 distinct standard ECO codes.
  </p>
  
  <h3>Scid extensions to the ECO system</h3>
  <p>
  The ECO system is very limited and not sufficient for modern games:
  some of the 500 codes are almost never seen any more, while some
  are seen very often. To improve this situation, Scid allows an optional
  extension to the basic ECO codes: each code can be extended with a
  letter (a..z), with a further extension (another digit, 1..4) being
  possible but not used in the standard Scid ECO file yet.
  So an extended Scid ECO code looks like "<b>A41e</b>" or "<b>E99b2</b>".
  Many of the most common ECO codes found in modern master-level games have
  extensions defined in the Scid ECO file.
  </p>
  
  <h3><name Browser>The ECO Browser window</name></h3>
  <p>
  The <term>ECO Browser</term> window shows you the positions that are
  used to classify each ECO code, and the frequency and performance of
  ECO codes in the current database.
  </p>
  <p>
  The upper pane shows the frequency of each ECO code in the current
  database. The bars in the graph have three sections: the lowest
  (lightest color) is the number of White wins, the middle is the
  number of draws, and the highest (darkest) is the number of Black wins.
  This lets you see at a glance the characteristics of an opening: for
  example, if White is scoring very well, or if draws are very common.
  </p>
  <p>
  To go to a deeper ECO level, click the left mouse button
  on a bar in the graph (or type the
  letter or digit it corresponds to). To go back to the higher level,
  click the right mouse button anywhere in the graph, or press the left
  arrow (or delete or backspace) key.
  </p>
  <p>
  The lower pane shows the positions that comprise a particular ECO code,
  according to the ECO file you have loaded.
  </p>
  
  <h3>Loading the Scid ECO file</h3>
  <p>
  The ECO file that comes with Scid is called <b>scid.eco</b>,
  and Scid tries to load this when it starts up.
  If Scid cannot find it, you will need to do the following to enable ECO
  classification:
  <ul>
  <li>(a) In Scid, use the menu command
  <menu>Options: Load ECO file</menu>
  and select the file <b>scid.eco</b>. </li>
  <li>(b) Save options (from the <menu>Options</menu> menu). </li>
  </ul>
  After you do this, the ECO file will be loaded every time you start Scid.
  </p>
  
  <h3><name Codes>ECO code system</name></h3>
  <p>
  The basic structure of the ECO system is:
  </p>
  <p>
  <b><blue><run ::windows::eco::Refresh A>A</run></blue></b>
  1.d4 Nf6 2...;  1.d4 ...;  1.c4;  1.various
  <ul>
  <li>  <b>A0</b>  1.<i>various</i>
  (<b>A02-A03</b> 1.f4: <i>Bird's Opening</i>,
  <b>A04-A09</b>  1.Nf3: <i>Reti, King's Indian Attack</i>) </li>
  <li>  <b>A1</b>  1.c4 ...: <i>English</i> </li>
  <li>  <b>A2</b>  1.c4 e5: <i>King's English</i> </li>
  <li>  <b>A3</b>  1.c4 c5: <i>English, Symmetrical </i> </li>
  <li>  <b>A4</b>  1.d4 ...: <i>Queen's Pawn</i> </li>
  <li>  <b>A5</b>  1.d4 Nf6 2.c4 ..: <i>Indian Defence </i> </li>
  <li>  <b>A6</b>  1.d4 Nf6 2.c4 c5 3.d5 e6: <i>Modern Benoni</i> </li>
  <li>  <b>A7</b>  A6 + 4.Nc3 exd5 5.cxd5 d6 6.e4 g6 7.Nf3 </li>
  <li>  <b>A8</b>  1.d4 f5: <i>Dutch Defence</i> </li>
  <li>  <b>A9</b>  1.d4 f5 2.c4 e6: <i>Dutch Defence</i> </li>
  </ul>
  
  <p>
  <b><blue><run ::windows::eco::Refresh B>B</run></blue></b>
  1.e4 c5;  1.e4 c6;  1.e4 d6;  1.e4 <i>various</i>
  <ul>
  <li>  <b>B0</b>  1.e4 ...
  (<b>B02-B05</b>  1.e4 Nf6: <i>Alekhine Defence</i>;
  <b>B07-B09</b>  1.e4 d6: <i>Pirc</i>) </li>
  <li>  <b>B1</b>  1.e4 c6: <i>Caro-Kann</i> </li>
  <li>  <b>B2</b>  1.e4 c5: <i>Sicilian Defence </i> </li>
  <li>  <b>B3</b>  1.e4 c5 2.Nf3 Nc6: <i>Sicilian</i> </li>
  <li>  <b>B4</b>  1.e4 c5 2.Nf3 e6: <i>Sicilian</i> </li>
  <li>  <b>B5</b>  1.e4 c5 2.Nf3 d6: <i>Sicilian</i> </li>
  <li>  <b>B6</b>  B5 + 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 Nc6 </li>
  <li>  <b>B7</b>  B5 + 4.Nxd4 Nf6 5.Nc3 g6: <i>Sicilian Dragon</i> </li>
  <li>  <b>B8</b>  B5 + 4.Nxd4 Nf6 5.Nc3 e6: <i>Sicilian Scheveningen</i> </li>
  <li>  <b>B9</b>  B5 + 4.Nxd4 Nf6 5.Nc3 a6: <i>Sicilian Najdorf</i> </li>
  </ul>
  
  <p>
  <b><blue><run ::windows::eco::Refresh C>C</run></blue></b>
  1.e4 e5;  1.e4 e6
  <ul>
  <li>  <b>C0</b>  1.e4 e6: <i>French Defence</i> </li>
  <li>  <b>C1</b>  1.e4 e6 2.d4 d5 3.Nc3: <i>French, Winawer/Classical</i> </li>
  <li>  <b>C2</b>  1.e4 e5: <i>Open Game</i> </li>
  <li>  <b>C3</b>  1.e4 e5 2.f4: <i>King's Gambit</i> </li>
  <li>  <b>C4</b>  1.e4 e5 2.Nf3: <i>Open Game</i> </li>
  <li>  <b>C5</b>  1.e4 e5 2.Nf3 Nc6 3.Bc4: <i>Italian; Two Knights</i> </li>
  <li>  <b>C6</b>  1.e4 e5 2.Nf3 Nc6 3.Bb5: <i>Spanish (Ruy Lopez)</i> </li>
  <li>  <b>C7</b>  1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4: <i>Spanish</i> </li>
  <li>  <b>C8</b>  C7 + 4...Nf6 5.O-O: <i>Spanish, Closed and Open</i>
  (<b>C80-C83</b>  5.O-O Nxe4: <i>Spanish, Open System</i>;
  <b>C84-C89</b>  5.O-O Be7: <i>Spanish, Closed System</i>) </li>
  <li>  <b>C9</b>  C8 + 5...Be7 6.Re1 b5 7.Bb3 d6: <i>Spanish, Closed</i> </li>
  </ul>
  
  <p>
  <b><blue><run ::windows::eco::Refresh D>D</run></blue></b>
  1.d4 d5; 1.d4 Nf6 2.c4 g6 with 3...d5
  <ul>
  <li>  <b>D0</b>   1.d4 d5: <i>Queen's Pawn</i> </li>
  <li>  <b>D1</b>   1.d4 d5 2.c4 c6: <i>Slav Defence</i> </li>
  <li>  <b>D2</b>  1.d4 d5 2.c4 dxc4: <i>Queen's Gambit Accepted (QGA)</i> </li>
  <li>  <b>D3</b>  1.d4 d5 2.c4 e6: <i>Queen's Gambit Declined (QGD)</i> </li>
  <li>  <b>D4</b>  D3 + 3.Nc3 Nf6 4.Nf3 c5/c6: <i>Semi-Tarrasch; Semi-Slav</i> </li>
  <li>  <b>D5</b>  D3 + 3.Nc3 Nf6 4.Bg5: <i>QGD Classical</i> </li>
  <li>  <b>D6</b>  D5 + 4...Be7 5.e3 O-O 6.Nf3 Nbd7: <i>QGD Orthodox</i> </li>
  <li>  <b>D7</b>  1.d4 Nf6 2.c4 g6 with 3...d5: <i>Grunfeld</i> </li>
  <li>  <b>D8</b>  1.d4 Nf6 2.c4 g6 3.Nc3 d5: <i>Grunfeld</i> </li>
  <li>  <b>D9</b>  1.d4 Nf6 2.c4 g6 3.Nc3 d5 4.Nf3: <i>Grunfeld</i> </li>
  </ul>
  
  <p>
  <b><blue><run ::windows::eco::Refresh E>E</run></blue></b>
  1.d4 Nf6 2.c4 e6; 1.d4 Nf6 2.c4 g6 </li>
  <ul>
  <li>  <b>E0</b>  1.d4 Nf6 2.c4 e6: <i>Catalan, etc</i> </li>
  <li>  <b>E1</b>  1.d4 Nf6 2.c4 e6 3.Nf3 (b6): <i>Queen's Indian, etc</i> </li>
  <li>  <b>E2</b>  1.d4 Nf6 2.c4 e6 3.Nc3 (Bb4): <i>Nimzo-Indian, etc</i> </li>
  <li>  <b>E3</b>  E2 + 4.Bg5 or 4.Qc2: <i>Nimzo-Indian</i> </li>
  <li>  <b>E4</b>  E2 + 4.e3: <i>Nimzo-Indian, Rubinstein</i> </li>
  <li>  <b>E5</b>  E4 + 4...O-O 5.Nf3: <i>Nimzo-Indian, main line</i> </li>
  <li>  <b>E6</b>  1.d4 Nf6 2.c4 g6: <i>King's Indian</i> </li>
  <li>  <b>E7</b>  1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4: <i>King's Indian</i> </li>
  <li>  <b>E8</b>  E7 + 4...d6 5.f3: <i>King's Indian, Samisch</i> </li>
  <li>  <b>E9</b>  E7 + 4...d6 5.Nf3: <i>King's Indian, main lines</i> </li>
  </ul>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}


set helpTitle(Author) "Contact information"
set helpText(Author) {<h1>Contact Information</h1>
  <p>
  The Scid web page is located at: <br>
  <b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>
  </p>
  <p>
  It has downloads of the latest version of Scid and any extra
  files that are available.
  </p>
  <p>
  Please send any comments, questions, suggestions or bug reports to
  the Scid mailinglist <b>scid-users@lists.sourceforge.net</b>.
  </p>
  
  <h3><name Related>Related Links</name></h3>
  <p>
  If you enjoy using Scid, you may find the following websites interesting:
  </p>
  <ul>
  <li><url http://scid.sourceforge.net/>http://scid.sourceforge.net</url>--
  The program upon which Scid is heavily based. Scid was written by
  Shane Hudson, with help from others.</li>
  <li><url http://www.tim-mann.org/chess.html>http://www.tim_mann.org/chess.html</url> --
  Home page of Tim Mann's <b>xboard & winboard</b> program which is a PGN
  reader and an interface for Internet chess servers. His site also has
  good information on Crafty, GNUchess and other free chess programs.</li>
  
  <li><url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url> --
  the strong chess-playing program Crafty.
  The subdirectory there named <b>TB</b> has many Nalimov-format tablebase
  files that you can use in several chess programs and in Scid.</li>
  
  <li><url http://www.chesscenter.com/twic/>http://www.chesscenter.com/twic/</url> --
  TWIC (the week in chess), an excellent weekly bulletin of international
  chess games in available in <a PGN>PGN</a> format.</li>
  
  <li><url http://scid.sourceforge.net/doc/standard.txt>http://scid.sourceforge.net/doc/standard.txt</url> --
  the <b>PGN Standard</b>, created by Steven J. Edwards in 1994.
  This text file explains the <a PGN>PGN</a> and EPD formats in detail.</li>
  </ul>
  
  <p><footer>(Updated: Scid 3.6.2, December 2006)</footer></p>
}

# Book window help
set helpTitle(Book) "Book Window"
set helpText(Book) {<h1>Book window</h1>
  <p>
  A list of all book files present in Scid's books directory is
  presented in the drop down list on top of the window. To specify the
  directory where Scid should search for opening books select Options /
  Books directory from the menu. The active book can be selected
  easily from that list.
  </p>
  <p>
  The format of books is the one used by Polyglot and the engines like
  Fruit and Toga, their usual extension is .bin. Currently, to build
  new books one has to use <term>polyglot</term> on the command line.
  Please refer to polyglots documentation about how to create a book.
  </p>
  <p>
  For each position, the book window displays all possible moves it
  contains and their relative weights in percent. When a move is
  entered, the book window is updated. Clicking on a move in the book
  window will play that move in current position.
  </p>
  <p>
  At the bottom of the book window, the button <i>Other moves</i> displays the moves
  that are not present in the book but part of lines that are present later on in the book.
  This allows an engine to play the best moves, and to have book replies available in the 
  book if the opponent chooses moves that are not in the book. The display of those <i>Other moves</i>
  shows where there are holes in a book.
  </p>
  <p>
  The book in use can be selected from the drop down list in the
  book window.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Tactical game window help
set helpTitle(TacticalGame) "Tactical Game Window"
set helpText(TacticalGame) {<h1>Tactical game window</h1>
  <p>
  Play a tactical game against an engine simulating an opponent with a
  given ELO rating.  The opponent is played by Phalanx and the coach
  by Toga II. The right engines are automatically selected by their
  names, and should be correctly configured (this is the default when
  Scid is installed).
  </p>
  <p>
  <b>Note</b> that a special version of the Phalanx engine is
  required. This special version comes with the Scid package.
  </p>
  <p>
  The following parameters must be configured :
  <ul>
  <li><term>Fixed level</term>: sets a fixed ELO rating for the opponent</li>
  <li><term>Random level</term>: chooses a random level between the
  minimum and maximum level specified by the left and right slider
  respectively.
  </li>
  <li><term>Opening:</term>
  <ul>
     <li><term>Start new game</term>: starts a new game choosing a
     random opening.</li>
     <li><term>Start from current position</term>: let the game begin
     with the current board position.</li>
     <li><term>Specific opening</term>: the opponent will play a
     specific opening, that can be chosen from the list below. This is
     useful for opening training.</li>
  </ul>
  <li><term>Limit engine analysis time</term> allows to limit the time used by the
  coach to check the players moves for errors. If this time is not
  limited the coach is allowed to think in the background.</li>
  </ul>
  <p>To start a tactical game press <term>Play</term></p> 

  <p><b>Note</b> a similar function can be achieved by playing a
  <a SeriousGame>serious game</a> against any UCI engine that allows
  for limiting its strength.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Opening Trainer window help
set helpTitle(OpeningTrainer) "Opening Trainer"
set helpText(OpeningTrainer) {<h1>Opening Trainer</h1>
  <p>
  A Scid database can be used as a repertoire, each game representing
  an opening line. The games can contain variations and may also
  contain NAG values to specify values for each line, and thus
  allowing to mark preferred or dubious lines. To be a valid database
  for the opening trainer it is also required to be of proper type.
  That is, if openings for white are to be trained, the database has
  to be of type <term>Openings for White</term> (similar for Black and
  both colors). The type can be set via the <a Maintenance>Maintenance
  window</a> by selecting the icon or via the database switchers
  context menu.
  </p>
  <p>
  <h2>Creating a repertoir base</h2>
  Before running the opening trainer, please be aware that the entire
  repertoire database will be loaded into the trainer. For this
  reason, it is good to use a smaller database. It is a good idea to
  first assemble a large database of quality games, then filter the
  database for a specific opening (e.g. the Ruy Lopez). These filtered
  games could then be copied to a new database for that specific
  opening you had in mind (please name it intelligently, so you can
  easily understand which opening it is for). Then instead of an
  entire 2 million or so game database, you have a much smaller
  repertoire database that will be loaded quickly into the opening
  trainer.
  </p>
  <p>
  You could also buy or download special databases that cover
  particular openings, although we cannot point you in the direction
  of any possible sources in this help file.
  </p>
  <p>
  Once you have a smaller database aimed at just the opening you
  require, set the type as mentioned using the <a
  Maintenance>Maintenance window</a>.  You will need to restart Scid
  to use the opening trainer with this new repertoire database.
  </p>
  <p>
  If you choose, for the opening trainer to work better, you may flag
  certain games as "White opening" or "Black opening". An exhaustive
  way of doing this would be to go through the entire database 'by
  hand' and assign the flags individually. A quicker way, may be to
  filter your database for white openings, then set the flag for all
  those filtered games, and similarly for black openings. Remember you
  can have a repertoire for both white and black in the same database.
  You can set the flags in this way via the <a Maintenance>Maintenance
  window</a>. How you choose to filter the games for flagging is
  entirely up to the user. One possible way is to filter 1-0 games for
  white openings, and 0-1 for black openings. This way is not the best
  however, and it is left to the user to find the system they feel
  most comfortable with.
  </p>
  <p>
  Finally, to work best, the Opening Trainer can use NAG values to understand 
  how a move in the opening is to be rated. Please refer to the <a NAGs>NAG 
  annotation help</a> for more information.
  </p>
  <p>
  <h2>Using the opening trainer</h2>
  To use the opening trainer first of all open the repertoire database you
  created, or one of the proper type. Then choose Play / Training / Opening Trainer.
  The upcoming dialogue offers some choices about the next training
  session
  <ul>
      <li><term>white</term>/<term>black</term>/<term>both</term> is
      used to select the side of the opening to train
      </li>
      <li><term>Allow only best moves</term> will treat lower rated moves
      as error. The rating of a line is given by NAG values.</li>
      <li><term>Opponent plays best moves</term> Scid will always play
      the best continuation according to the repertoire database. If
      unchecked Scid is allowed to choose also lower rated
      continuations. This is helpful to learn the refutations as well.
      </li>
      <li><term>Only flagged lines</term> Scid will only play lines
      from games flagged as <term>Opening for White</term> or
      <term>Opening for Black</term>.
      </li>
      <li><term>Reset statistics</term> will reset the statistics
      before the training session.</li>
  </ul>
  Press the <term>Continue</term> button to proceed with the training.
  </p>
  <p>
  The actual opening trainer will show up. Here one can display
  possible candidate moves (hidden by default) and also display their
  values by just enabling these functions. If <term>Show
  statistics</term> is enabled, the current statistics is shown in the
  color coded fields below the checkbox. Otherwise the overall
  statistics can be accessed by the button <term>Show report</term>
  
  <h3>Opening trainer statistics</h3>
  <p>
  Four numbers are displayed showing statistics for current position:
  <ul>
  <li><term>Green</term> the number of moves played by the user that
  are good moves</li>
  <li><term>Yellow</term> the number of dubious moves played that are
  in the repertoire</li>
  <li><term>Red</term> the number of moves played that are not in the
  repertoire</li>
  <li><term>White</term> the number of times the position was
  encountered</li>
  </ul>
  </p>
  
  <h3>The report</h3>
  <p>
  The report shows statistics for the whole repertoire and gives
  information about user's knowledge :
  <ul>
  <li><term>Positions in repertoire</term> the total number of
  positions in the repertoire (all lines in database)</li>
  <li><term>Positions not played</term> the positions that were never
  encountered</li>
  <li><term>Positions played</term> the positions that were played and
  the sum of the number of times they were encountered. Note that this
  figure represents the sum of occurrences of a position in all
  opening lines: this number can quickly become big for positions
  that are close to the start position</li>
  <li><term>Success</term> the number of good moves made by the player</li>
  <li><term>Dubious moves</term> the number of weak moves made by the
  player</li>
  <li><term>Out of repertoire</term> the number of moves made by the
  player that were not in repertoire</li>
  </ul>
  </p> 
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

####################
### Correspondence Chess help:
set helpTitle(Correspondence) "Correspondence Chess"
set helpText(Correspondence) {<h1>Correspondence Chess</h1>

<p>
Scid offers currently two main functionalities for correspondence
chess.
</p>
<ul>
   <li><b>eMail Chess</b> proceeds by sending the current game via eMail
   to your opponet once you made your move. To this end an eMail message
   is created in your prefered email program with the current game
   attached to it in <a PGN>PGN</a> format. Of course all comments and
   variations are stripped off before.
   </li>
   <li><b>Correspondence Chess Servers</b> are supported by means of the
   Xfcc protocol. Here external tools are used to fetch the games from
   your account(s) and deliver them to Scid for synchronisation. After
   you made your move this move is sent to your opponent also by means of
   Xfcc. The fetch and send tool are implemented as external tools for
   easy extension if other protocols arise.
   </li>
   <li><b>Postal play</b>: Scid allos support for postal play by
	adding a PGN file with the proper header information to it's Inbox
	directory. If the addtionaly header field <b>Mode</b> is set to
	<b>Postal</b> those games get their proper icon displayed. Note
	that also the header fields <b>CmailGamename</b> and <b>Gameid</b>
	should be present. 
	---TODO---: Printing of postcards is on the todo, this function
	will require the additional header fields WhiteAddress/BlackAddress
	to contain the postal adress of both players.
   </li>
   <li><b>Observation of games</b> is supported by just adding the URL
   for the <a PGN>PGN</a> file to the list offered by <menu>Play / Correspondence
   Chess / Observe Game</menu>. For this fucntion to work a connector
	for the site in question is required. (See below)
   </li>
</ul>
<p>
If any of the correspondence chess functions are accessed from the
menu a new window opens up. It can be opened manually from the window
menu or one can use the keyboard shortcut F12. There are two
additional shortcuts:
</p>
<ul>
   <li><b>Ctrl-F12</b>
      This will open the correspondence chess window and the default
      database. It will also process your current Inbox.
   </li>
   <li><b>Alt-F12</b>
      This will open the correspondence chess window, the default
      database and also initiate the fetch of Xfcc games in one go.
   </li
</ul>
<p>
Please see below for further details.
</p>

<p>
This window contains the neccessary buttons to navigate through
ongoing games, shortcut keys to fetch games by means of the Xfcc
protocol and sync in eMail based games as well as a console stating
which messages where sent or retrieved. Additionally this window
conatins a list of ongoing games retrieved from your Inbox directory.
</p>

<p>
To use the correspondence chess features a database of the type
"Correspondence chess" has to be opened before calling any
correspondence chess functions. If you do not have such a database
yet, just create a new database and set its type to "Correspondence
chess" by means of the <a Maintenance>Maintenance</a> function.
Setting the type is important as Scid will recognise the database for
synchronisation by this type. As this database is empty after the
creation Scid will treat all correspondence chess games it receives at
first synchronisation as new games and append them to this database.
</p>

<p>
If no database of the type "Correspondence chess" is currently opened
Scid will remid you of doing so. However, do not open more than one
database of this type as Scid then can not recognise the one to use.
</p>

<h3><name CCWorkflow>Basic functionality</name></h3>

<p>
If everything is set up correctly the usage of the correspondence
chess functions can easily accessed by the following buttons:
<ul>
   <li><button tb_CC_Retrieve> Retrieve the correspondence chess games.
   To this end the external fetch tool is called and all games retrieved
   via that way as well as all other games that are stored in Scids Inbox
   (see below) are synchronised into the current correspondence chess
   database.
   </li>
   <li><button tb_CC_Send> Sends your move to the opponent by either
   creating a new eMail message in your prefered mail program or by
   sending the move to a chess server in case of Xfcc.
   </li>
   <li><button tb_CC_delete> empties your In- and Outbox directories.
   </li>
   <li><img tb_CC_online> is shown if the game list was refreshed
   from the server within the current Scid session. The tool tip for
   this icon shows date and time of the last refresh.
   </li>
   <li><img tb_CC_offline> indicates, that Xfcc status icons are
   restored from saved results. No update has taken place in the
   current Scid session. The tool tip for this icon shows date and
   time of the last refresh.
   </li>
   <li><img tb_CC_pluginactive> indicates, that Correpsondence Chess
   plugin(s) were loaded and activated upon startup.
   </li>
</ul>
</p>
<p>
See also the list of <a CCIcons>Icons and Status Indicators</a>.
</p>

<h3>Configuration</h3>

<p>
Correspondence Chess within Scid is based upon a normal Scid
database that holds the games and some helpers external to Scid that
handle the "non-chess-parts". These tools and parameters must be set
up once, and are stored afterwards for future use.
</p>

<p>
To access the configuration dialog choose <menu>Play</menu>
<menu>Correspondence Chess</menu><menu>Configure</menu> from the
menu. The details are described in <a CCSetupDialog>Correspondence
Chess Setup</a>. Quitting this dialog by the <b>[Ok]</b> button will
automatically store your options.
</p>

<h3>Retrieving the games</h3>
<p>
Depending wether you play correspondence chess via eMail or via a
chess server the actual retrieval process differs slightly. Generally
it results in a set of games in <a PGN>PGN</a> format located in Scids Inbox
directory. This offers also the possibility of automatic retrieval via
external software.
</p>
<p>
Once the games are in Scids Inbox invoking <menu>Process Inbox</menu>
from the menu will work though the Inbox and add new moves to the
games already in the database. Additionally it will add games not
found in the current correspondence chess database as new games.
</p>

<p><a CCeMailChess>Correspondence Chess via eMail</a> describes the
details for the usage of eMail, while in <a CCXfcc>Correspondence
Chess via Chess Servers</a> describes the same for correspondence
chess servers.
</p>

<h3>Stepping through games</h3>
<p>
After games are retrieved they are loaded to Scids clipboard database
and new moves are added and stored in the correspondence chess
database opened. The difference to
the functions from the <menu>Games</menu> menu is, that these two
buttons scroll only between the games in Scids Inbox which are
supposed to be your actually ongoing games. Of course the
Correspondence Chess database might contain much more games, but
normally you do not want to go through all these to find out what your
opponent moved in a current game.
</p>
<p>
Note that a header search is required incorporating some fields that
are not indexed by Scid. Hence, storing your correspondence chess
games in a huge reference database might not be advisable as the
search times may be quite long. If you play a lot and your own
database gets quite large, search times can be reduced by moving
finished games to an archive database, or by just createing a new
database for the ongoing games. Scid will treat all games not existing
in the correspondence chess database already as new games and add them
automatically. Hence, it is sufficient to open an empty database of
type "Correspondence chess" and call <menu>Process Inbox</menu> to
import all currently ongoing games.
</p>
<p>
Equivalent to the two buttons mentinoned are the items <menu>Previous
Game</menu> and <menu>Next Game</menu> from the <menu>Correpondence
Chess</menu> menu.
</p>
<p>
An alternate way to jump to a specific game is by double clicking on
it within the game list.
</p>
<p>
Note that if you set up your player names correctly (by means of
<menu>My Player Names</menu>) Scid will rotate the board for you to
play always upwards. You can have multiple player names. See also <a
Options MyPlayerNames>My Player Names</a> for details.
</p>

<h3>Analyse and make a move</h3>
<p>
All analysis features can be used for correspondence chess games.
Variations, annotations etc. can be added just like in normal game
analysis. Once finished, Scid will take the last half move added to
the game and treat it as the current move to send. No checking wether
only one half a move was added or which side to move is done here,
hence, only one half move to the mainline must be added!  In case a
chess server is used Scid also sends the last comment added to the
server which might be usefull for communication with the opponent. In
eMail chess this can be done by the normal mail message, so there all
commments are stripped off.
</p>
<p>
Pressing the Send button <button tb_CC_Send> will have Scid to
determine the type of the correspondence chess game displayed (eMail or
a server game) and call either your eMail program or the external send
tool to submit your move. Calling <menu>Send move</menu> is equivalent
to this button. Alternatively, <menu>Mail move</menu> can be used to
send the current game via eMail. In case of an eMail game this
function is equivalent to <menu>Send move</menu>. In case of a server
based game an eMail message is generated. Note however, that it will
not necessarily contain a proper recipient as eMail addresses are not
exchanged in server based correspondence chess.
</p>

<h3>Observing Correspondence Games</h3>
Observing a game of correspondence chess is technically done by
retrieving the games <a PGN>PGN</a> notation from the webserver.
These games are then fead into the usual workflow of the
Correspondence Chess funtions and show up thre as usual games. For
this function to work a file named "connector.xml" has to be available
in ~/.scid/data. If this file does not exist Scid will try to generate
one suitable for observation of games from ICCF Webchess. Additional
servers can be added to this file by apending additional
server-blocks.	

To observe a game on ICCF Webchess point your web browser to the page
where the notation an the chess board gets displayed. Copy the URL of
that page to the clipboard and add it to the list displayed by
choosing <menu>Play / Correspondence Chess / Observe Game</menu>. Use
a new line for each game to be observed.

Close the dialogue by selecting Ok and refetch the correspondence
chess games. Now the newly added observed games should show up in the
Correspondence Chess games list.

<h3>Additional features of the Correspondence Chess Window</h3>
<p>
The Correspondence Chess window offers additional functions by means
of its own menu, which is identical to Play / Correspondence Chess. It
is also possible to use the usual scrolling features of Scid, like
jumping to the next (previous) game by Ctrl-Down (Ctrl-Up). Hovering
with the mouse over certain fields in the game list will also give
additional informations as far as they are provided by the server. If
you want to copy the current game list to the clipboard one can use
the usual shortcuts Ctrl-Ins (or Ctrl-C).
</p>

<p><footer>(Updated: Scid 4.3, Jan 2011)</footer></p>
}

set helpTitle(CCIcons) "Correspondence Chess Icons and Status Indicators"
set helpText(CCIcons) {
<h1>Icons and Status Indicators</h1>
<p>
To shorten the display, a set of icons is used in the game list. Some
of them are only present in certain circumstances, some are only valid
for Xfcc based games, some for eMail based games. These indicators are
stored internally and are restored to the last update from the server
if no interet connection is available.
</p>
<ul>
   <li><img tb_CC_online> is shown if the game list was refreshed
   from the server within the current Scid session. The tool tip for
   this icon shows date and time of the last refresh.
   </li>
   <li><img tb_CC_offline> indicates, that Xfcc status icons are
   restored from saved results. No update has taken place in the
   current Scid session. The tool tip for this icon shows date and
   time of the last refresh.
   </li>
   <li><img tb_CC_pluginactive> indicates, that Correpsondence Chess
   plugin(s) were loaded and activated upon startup.
   </li>
   <li><img tb_CC_envelope> This is an eMail based game. In those
   games many of the status flags used in Xfcc-based games are not
   available due to the limitation of the medium.
   </li>
   <li><img tb_CC_relay> This is a observed game, ie. you're just
   fetching it and you will not make any move in those games.
   </li>
   <li><img tb_CC_postal> The mode of this game is set to
   <i>postal</i> (ie. real classical correspondence play via postal
   service). Scid will show those games but ignore them in the update
   process as no <a PGN>PGN</a> game file will exist in postal play.
   </li>
   <li><img tb_CC_yourmove>
   Its your move.<br>
   <b>Note 1:</b> this status is only updated if you
   synchronise your games with the server, that is, it always refers
   to the servers status at last syncronisation.
   <br>
   <b>Note 2:</b>Hovering over this icon with the mouse will display
   the opponents last move.
   </li>
   <li><img tb_CC_oppmove>
   Its the opponents move. Note: this status is only updated if you
   synchronise your games with the server, that is, it always refers
   to the servers status at last syncronisation.
   </li>
   <li><img tb_CC_draw>
   Peace was agreed by a draw.
   </li>
   <li><img tb_CC_book>
   The use of opening books is allowed for this game.
   </li>
   <li><img tb_CC_database>
   The use of databases is allowed for this game.
   </li>
   <li><img tb_CC_tablebase>
   The use of endgame tablebases (e.g. Nalimov tablebases etc.) is
   allowed for this game.
   </li>
   <li><img tb_CC_engine>
   Chess Engines are allowed for this game. Sometimes these games are
   also refered to as "Advanced Chess".
   </li>
   <li><img tb_CC_outoftime>
   Your opponent ran out of time. You may claim a win on time.
   </li>
   <li><img tb_CC_message>
   Your oppenent sent a message along with his last move. Check the
   game notation.
   </li>
</ul>
<p>
<b>Note 1:</b> If an event (e.g. a tournament) has not yet started, but
the setup was already retrieved via Xfcc the id, event and site
columns text show up in <gray><b>dark gray</b></gray>.
</p>
<p>
<b>Note 2:</b> Hovering over the site comlumn will show the whole site
tag, hovering over the event column will show the whole event tag and
the time control if it was sent along with the game. If no time
control was sent, Scid will denote it as <i>10 / 50d (?)</i>, that is,
guessing ICCFs official default timing of 10 moves in 50 days. (The
ICCF server itself never sends any timings.)
</p>

<p>
In Xfcc games, each opponents country may be displayed by the
associated flag, if the server provides that information. For eMail
based games this can be achieved by adding additional <a PGN>PGN</a> tags for
<i>whiteCountry</i> and <i>blackCountry</i>, each followed by the
international three letter country code according to ISO 3166-1
(e.g. "EUR" <img flag_eur>, "USA" <img flag_usa>, "GBR" <img
flag_gbr>, "FRA" <img flag_fra>, "RUS" <img flag_rus>, "CHN"
<img flag_chn>...).
</p>
<p>
To show country flags for other types of games (postal, observed) just
add WhiteCountry/BlackCountry headers ot the games in your database.
Note that the header values in the Scid database overwrite the values
supplied in the games of Scids Inbox. That is even for Xfcc games that
one can add country flags or overwrite the games mode. (The latter is
required e.g. for mixed games on ICCF where ICCFs Xfcc interface
also supplies games even if they are played by post.)
</p>

<p>
See also the chapter <a Correspondence>Correspondence Chess</a> for
general information.
</p>


<p><footer>(Updated: Scid 4.3, Jun 2010)</footer></p>
}



set helpTitle(CCXfcc) "Correspondence Chess Servers"
set helpText(CCXfcc) {<h1>Correspondence Chess Servers</h1>

<p>
There exist several correspondence chess servers throughout the
internet. Generally, they are used by means of a web browser, so no
specific software is required. However many of them also offer an
interface to specialised chess software via a protocoll called Xfcc.
The integration of Xfcc is done in Scid via external helper tools set
in the <a CCSetupDialog>Configuration</a> dialog for correspondence
chess.
</p>

<h3>Start a new game</h3>
<p>
Xfcc does not allow to start a new game itself. Searching for an
opponent and starting a game is instead handled by the chess server
on their web site. Once the game is started however, Scid can be used to
retrieve the moves of the opponent, add them to the internal database,
analyse them and so on. All features of Scid are to the users disposal
though certain modes of play may not allow them (e.g.  normal games
usually do not permit the usage of chess engines for analysis).
</p>

<h3>Retrieve games</h3>
<p>
Open a database that holds correspondence chess games. This database
has to be of type "Correspondence chess". 
</p>

Notes: 
<ul>
   <li>If Scid does not find a correspondence chess database it will
   inform you to open one.
   </li>
   <li>If the database does not hold the games that are fetchted from
   the server they are treated as new games and added to the database
   automatically.
   </li>
   <li>Scid will use the first database of type "Correspondence Chess"
   that is currently open. For this reason only one such DB should be
   opened at a time.
   </li>
</ul>
<p>
Xfcc always retrieves all games hosted on a specified server for your
user ID at once. To retrieve the games just press the <button
tb_CC_Retrieve> icon or select <menu>Retrieve Games</menu> from the
<menu>Correspondence Chess</menu> menu. As a server connection is
required to fetch new games be sure that the system has network
access. Scid will call the fetch tool configured in the <a
CCSetupDialog>Configuration</a> dialog which will place the games in
PGN format in Scids inbox. It may take some time to retrieve the
answer, so be patient. After the games are retrieved the
correspondence chess database is updated accordingly.
</p>

<p>
<b>Note</b>By using the <button tb_CC_delete> you can empty your whole
In- and Outbox directories.
</p>

<p>
Once the games are retrieved their counterpart is searched within the
correspondence chess db and new moves are added accordingly. As Xfcc
servers may offer various ways to insert moves (via web or mobile or
other programs...) it might well be that Scid will have to add half of
the game to the db. This poses no problem. Scid will add all moves
returned in the game from the server. Scid will however not replace
the game from the beginning as then all your analysis may be lost.
Hence it is <b>important to note</b> that you must not insert moves to
the main line beyond your own last move! To add continuations please
use variations!
</p>
<p>
Xfcc base games offer extensive status display within the games list.
This information, however, is only available if Scids internal Xfcc
support is used.  The following icon are for visual display:
<ul>
   <li><img tb_CC_draw> A draw was agreed with the last move.
   </li>
   <li><img tb_CC_yourmove> You're on the move.
   </li>
   <li><img tb_CC_oppmove> Your opponent is on the move.
   </li>
   <li><img tb_CC_book> This game allows the use of opening books.
   </li>
   <li><img tb_CC_database> This game allows the use of databases.
   </li>
   <li><img tb_CC_tablebase> This game allows the use of tablebases.
   </li>
   <li><img tb_CC_engine> This game allows the use of chess engines.
   </li>
</ul>
<p>
Additonally Scid will display the clock for both parties <b>at the
time of sync</b> as well as the chess variant played. Note however
that Scid currently only supports standard chess.
</p>
<p>
Note: only if the proper icon (book, database, tablebase, engine)
is dispalyed, the useage of these tools is allowed. It is forbidden
otherwise. Be fair and respect these rules.
</p>
<p>
Note: if other sources have placed games in your inbox (e.g. from
your eMail correspondence chess) they are also synchronised in the
retrieval step into the database as the whole Inbox is worked through.
This allows for adding eMail games to the Inbox, then switch to Scid,
hit <button tb_CC_Retrieve> and all games are up to date.  Games that are not
yet found in the database are treated as new games and appended to the
database.
</p>
<p>
<b>Note</b>By using the <button tb_CC_delete> you can empty your whole
In- and Outbox directories.
</p>
<p>
<b>Note for programmers</b>: the fetch tool is called with the Inbox path as
parameter. It is thought to work through all server accounts and place
properly formatted <a PGN>PGN</a> files in the path passed to it. These files
should contain additional header fields as they are known by the cmail
tool. (See <a CCeMailChess>Correspondence Chess via eMail</a> for
information about the fields required.)
</p>

<p><footer>(Updated: Scid 3.6.23, March 2008)</footer></p>
}

#############
# eMail Chess:
set helpTitle(CCeMailChess) "Correspondence Chess via eMail"
set helpText(CCeMailChess) {<h1>Correspondence Chess via eMail</h1>

<p>
eMail offers a very convenient way ot play correspondence chess. The
standard application in the Un*x world for this till today is xboard
together with its cmail helper. As it allows for almost automatic
handling of correspondence chess eMails and additonally does not add
anything not conforming to <a PGN>PGN</a> it is also the model for Scid to handle
eMail chess. By just preserving the whole <a PGN>PGN</a> header such games can be
played with any opponent who has a tool to handle PGN.
</p>

<h3>eMail Chess</h3>
<p>
Scid can handle eMail correspondence chess games almost automatically.
The way how this is done is kept compatible to the cmail utility that
comes with xboard on Un*x systems. (Having said this implies that you
can play against an opponent using cmail/xboard.) It works by sending
the games as whole <a PGN>PGN</a> files too and fro as mail attachements, while
the header contains certain tags that allows them to be recognised and
sorted together. For this reason the user has to be careful with
editing of the header fields.  Note that fields with explicit values have
to be set to exactly this value for eMail chess. Starting a game with
Scid will do this automatically, but you <b>must not</b> overwrite
or delete them!
</p>
<p>
Essential header fields are:
</p>
<ul>
   <li><term>Event</term>: by default "Email correspondence game"
   </li>
   <li><term>Site</term>: has to be "NET"
   </li>
   <li><term>Mode</term>: has to be "EM"
   </li>
   <li><term>WhiteNA</term>: contains the eMail address of the white player. Note
   that only the bare address is stored there in the form
   <term>user@host.org</term>.
   </li>
   <li><term>BlackNA</term>: contains the eMail address of the black player
   similar to WhiteNA.
   </li>
   <li><term>CmailGameName</term>: Contains a <b>unique</b> identifier for
   the game. This is used to sort the games together.
   <p>
   While Scid could use some database index this is not possible for
   non-DB-based tools like cmail. For this reason the
   <term>CmailGameName</term> parameter is user suppied. It must be
   unique! The easiest way is something of the form
   <term>xx-yy-yyyymmdd</term> where xx is a shortcut for the white
   player, yy one for the black player, and yyyymmdd the current date.
   </p>
   <p>For Xfcc-based games this field has also to be set to a unique
   identifier but there the server name and the unique game number on
   this server can be used, that is this identifier is of the form
   <term>MyXfccServer-12345</term>.
   </p>
   </li>
</ul>
<p>
eMail based chess does not contain that extended status codes as Xfcc.
These games show the <img tb_CC_envelope> icon to notify them as
eMail based. The same applies to observed games, denoted by <img
tb_CC_relay> and postal games which show the <img tb_CC_postal> icon.
</p>

<h3>Start a new game</h3>
<p>
This opens a dialog for the input of the own and the opponents name as
they should appear in the header as well as the eMail addresses of
both parties. Additionally a <b>unique</b> game ID has to be inserted.
The easiest way for this ID is something of the form
<term>xx-yy-yyyymmdd</term> where xx is a shortcut for the white
player, yy one for the black player, and yyyymmdd the current date.
This id is a text and it is important to identify the games uniquely.
Users of cmail will also know this ID as <i>game name</i>. It must
only contain letters and numbers, the minus sign and the underscore.
Please avoid other characters.
</p>
<p>
After the dialog is quit by pressing the <b>[Ok]</b> button a new
game is appended to the currently loaded correspondence chess database
and the <a PGN>PGN</a> header is set properly. Just make your move and send it as
mentioned below.
</p>

<h3>Retrieve games</h3>

<p>
Scid does not handle your mailbox automatically. This would,
considering the wide range of possible mail setups these days, involve
a huge amount of code. For this reason Scid relies on your normal
eMail program which is far more suitable for this purpose than Scid
can ever be. To get a game into Scid just save the attached <a PGN>PGN</a> file
to Scid's inbox and process the inbox by either <menu>Retrieve
Games</menu> or the <button tb_CC_Retrieve> button or
<menu>Process Inbox</menu>. The difference between the two is that
the first one will also fetch and populate the Inbox additionally with
games from another source (say Xfcc) by either the internal Xfcc
support or an external fetch tool called. Hence <button
tb_CC_Retrieve> is the most convenient way if you use both types of
correspondence chess games.
</p>
<p>
<b>Note</b> The <menu>Retrieve Games</menu> menu or the <button
tb_CC_Retrieve> button do <b>not</b> fetch your eMail messages! You
have to save your <a PGN>PGN</a> files to Scids Inbox by hand. Probably this can
be automatised by your eMail program (on Un*x systems setting up a
mime handler is easy enough by means of <term>.mailcap</term>).
</p>
<p>
<b>Note</b>By using the <button tb_CC_delete> you can empty your whole
In- and Outbox directories.
</p>

<h3>Send the response</h3>

<p>
After making your move send it by either the <menu>Mail Move</menu>
item from the menu via <menu>Send move</menu> which is equivalent to
<button tb_CC_Send>. The latter will Scid have to recognise the game
as eMail correspondence and send it by mail while the former method
will force Scid to generate an eMail message.
</p>
<p>
Of course Scid strips the the game bare of any comments and variations
before attaching it to the outgoing eMail as you probably do not want to send
your analysis along.
</p>
<p>
If a GUI-mailer is used, its usual compose window is opened. The
address of your opponent is filled in as well as a generic subject
containing the game id for easy filtering and the bcc address if
specified in the <a CCSetupDialog>Configuration</a> dialog. The mail
body is set to contain the <term>FEN</term> of the final position and
the list of moves made so far. This way the opponent can quickly look
up your move. Finally, Scid attaches the current game including your
move in <a PGN>PGN</a> format to the mail message.
</p>
<p>
When using a mailx compatible tool no window is opened and the mail is
sent invisibly by invoking the tool specified in the background. In
this case the generated mail contains the <a PGN>PGN</a> also in the mail body.
</p>
<p>
Note that as eMail chess works by sending the whole <a PGN>PGN</a> file you must
not add more than your half move. Scid does not check here wether
more than one half move was added to the mainline, simply as Scid does
not know which move it was, when you sent yours.
</p>
<p><footer>(Updated: Scid 3.6.23, March 2008)</footer></p>
}

#############
# Correspondence Chess setup dialog help:
set helpTitle(CCSetupDialog) "Correspondence Chess Setup"
set helpText(CCSetupDialog) {<h1>Correspondence Chess Setup</h1>

<p>
The entries in the configuration dialog are preset to some default
parameters but those must not match the reality on your system, so
adoption will surely be necessary. All parameters are stored in the
configuration file automatically once the dialog is closed via the
<b>[Ok]</b> button. The parameters are effective immediately.
</p>

<p><b>Note</b> that Scid will use the defaults until this setup dialog
is called and quit by selecting the <term>OK</term> button. The
default values are never stored in Scids internal config file until
then. Additionally, if Scid can not find a valid config, it will try
to set up the correspondence chess functions automatically. By default
it will store all data in the <term>data</term> subdir of Scids
configuration. Here also a valid DB as well as the necessary
In/Outboxes are created.
</p>

<p>
<b>Default Database</b>:
This defines the default database for
correspondence chess games. It can be accessed easily via
<menu>Open Database</menu> in the <menu>Correspondence Chess</menu>
menu. The advantage of this method is, that this database does not
show up in the <i>recent databases</i> lists and that you can have a
specific file for this. This database <b>has to be</b> of type
"Correspondence chess". Opening a database of this type by any other
means is also ok, so probably you may want to ignore this setting
(e.g. if you call Scid with your correspondence chess database on
startup.)
</p>

<p>
<b>Inbox (path)</b>:
In this directory Scid will look for correspondence chess games stored
in <a PGN>PGN</a> format. These games are used for the synchronisation of the
correspondence chess database. Generally, Scid does not care how the
games come to this directory. It will just work through all <a PGN>PGN</a> files
located there. This offers the possibility to use some external tools
to fetch games to this location. Additionally, in eMail chess one
should just save the <a PGN>PGN</a> files received from the opponent in this
directory.
</p>
<p>
Scid will not read a mailbox of whatever sort, it just handles
all <a PGN>PGN</a> files placed in that directory. Also note, that it will
synchronise games with the current database. However, if a game
from this directory does not yet exist in the database it is
treated as new game and appended to the database.
</p>
<p>
For the synchronisation process to work the <a PGN>PGN</a> files must contain
some additional header information that are in perfect agreement with
the <a PGN>PGN</a> standard. Please have a look at <a CCeMailChess>Correspondence
Chess via eMail</a> if you want to create your own tool or if you are
migrating data from some other system.
</p>

<p>
<b>Outbox (path)</b>:
The inverse of the <i>Inbox</i>. Scid places here <a PGN>PGN</a> files of the
outgoing games. For eMail chess this is essential as the <a PGN>PGN</a> files have
to be attached to an eMail message.  For Xfcc, where only the move is
sent, this would not be necessary, however the Outbox directory offers
a convenient way to link up to your PDA or for any other usage as the
PGN files contained in the Outbox will also contain your last move.
</p>

<p>
<b>Use internal Xfcc support</b>:
If checked Scid will not use the external tools specified as external
protocol handlers but use its internal Xfcc support to fetch games and
send moves. This will be the most convenient way to access an Xfcc
server and should be used as default.
</p>
<p>
This feature requires http and tDOM support for TCL to be installed.
Usually, these modules are distributed with your TCL installation,
however, on some systems they have to be installed explicitly. If
either one is not found this function is disabled.
</p>
<p>
<b>Xfcc Configuration</b>:
Give the path and filename of the config file for the xfcc protocol
handler. This path is also passed on to the external protocol handlers
to be used by them.
</p>

<p>
<b>Fetch Tool</b>:
This program is called to retrieve correspondence chess
games from a correspondence chess server. This helper just has to
fetch the games from whatever source it likes, generate a proper PGN
file containing the necessary <a PGN>PGN</a> header. Tools for fetching games
from Xfcc-servers exist as external programs and these are the natural
tools to set up here. For future protocols one could easily generate
an external fetch tool that handles this protocol. Also automatisation
is possible if this functionality is done externally.
</p>
<p>
Note: This tool is <b>not</b> called for retrieval of eMail chess
messages!
</p>

<p>
<b>Send Tool</b>: 
This is the inverse of the fetch tool, primarily also ment for Xfcc
support or any future protocol that might come up. The send tool,
however, is called from Scid with several parameters where the call
looks like:
<term>
SendTool Outbox Name GameID MoveCount Move "Comment" resign claimDraw offerDraw acceptDraw
</term>
</p>

<p>
<b>Confirm moves</b>: Opens a confirmation dialogue after pressing the
send button for each move that is send to the server.
</p>

<p>
<b>Only games I have the move</b>: Checking this setting will shorten
the games listed in the Correspondence Chess window to only those
games where the player is to move.
</p>

<p>
<b>Sorting</b>: Allows to sort games by various criteria. This sorting
takes effect upon the next update of the games list, e.g. by reopening
the Correspondence Chess window, fetching games or processing the
Inbox.
</p>

<p>
The meaning of the parameters is as follows:
   <ul>
      <li><term>Outbox</term>: The Outbox path set in this dialog. The
      send tool is meant to generate a correctly formatted <a PGN>PGN</a> file
      there.
      </li>
      <li><term>Name</term>: The name of the player to move as stated
      in the <a PGN>PGN</a> header. For Xfcc this would be the login name. It is
      identical to the player name in the <a PGN>PGN</a> header.
      </li>
      <li><term>MoveCount</term>: The move number to send.
      </li>
      <li><term>Move</term>: The actual move in SAN.
      </li>
      <li><term>"Comment"</term>: A comment sent to the opponent. Scid
      inserts the last comment of the game. That is these comments are
      treated as comments to the opponent. Note that the comment is
      quoted, so multiline comments should be possible.
      </li>
      <li><term>resign</term>: 0 or 1, specifying wether the user
      wants to resign. Set to 1 if the user invokes
      <menu>Resign</menu> from the <menu>Correspondence Chess</menu>
      menu.
      </li>
      <li><term>claimDraw</term>: 0 or 1, specifying wether the user
      wants to claim a draw. Set to 1 if the user invokes
      <menu>Claim Draw</menu> from the <menu>Correspondence Chess</menu>
      menu.
      </li>
      <li><term>offerDraw</term>: 0 or 1, specifying wether the user
      wants to offer a draw. Set to 1 if the user invokes <menu>Offer
      Draw</menu> from the <menu>Correspondence Chess</menu> menu.
      </li>
      <li><term>acceptDraw</term>: 0 or 1, specifying wether the user
      wants to accept a draw offered by the opponent. Set to 1 if the
      user invokes <menu>Accept Draw</menu> from the
      <menu>Correspondence Chess</menu>
      menu.
      </li>
   </ul>
</p>
<p>
Note: This tool is <b>not</b> called for eMail chess!
</p>

<p>
<b>Mail program</b>:
This gives the path to your prefered eMail program. This program is
called for eMail chess to compose the message to the opponent.
</p>

<p>
<b>(B)CC Address</b>:
A copy of the outgoing message is sent to this address as blind copy.
Note however, that if a GUI mailer is used it has normally its own
outgoing mail handling. Hence, setting this address might duplicate
messages. It can be used to transfer a game to another address though.
</p>

<p>
<b>Mode</b>:
Unfortunately there exists a wide range of mail clients and they use
very different calling conventions. Some common conventions, and
examples of programs that use them, are listed here. The mailprogram
will be called with the convention selected. In case it is not known
which convention is used one of those offered might match and do the
trick. Note however that quite a number of mail programs are not
capable of sending attachements when called from another program. In
this case you will have to either change your mail client or add the
attachement placed in Scids Outbox by hand.
</p>
<p>Hint: mailx or one of its many clones should be available as a
command line application on almost any platform as an easy to set up
tool. In case none of the conventions work with your preferred
client or this client can not handle mails with attachements by calls
from the command line, installing mailx would be an option.
</p>
<p>Hint: mutt uses the systems mail transport (aka
sendmail/exim/postfix). To hook up with those (arguably) not easy to
set up tools mutt is a perfect option. On a decent Un*x with a proper
setup it should be the most painless way to handle eMail chess.
(Though not many properly set up systems exist, especially in the
Linux world.)
</p>
<p>
<b>Attachement parameter</b>: 
This parameter is used to specify an attachement. It is <b>only</b>
used in <term>mailx</term> mode.
</p>
<p>
<b>Subject parameter</b>:
This parameter is used to specify the subject of the mail message. It
is <b>only</b> used in <term>mailx</term> mode.
</p>
<p><footer>(Updated: Scid 3.6.24, March 2008)</footer></p>
}

#############
# Correspondence Chess setup dialog help:
set helpTitle(CCXfccSetupDialog) "Xfcc Server Setup"
set helpText(CCXfccSetupDialog) {<h1>Xfcc Server Setup</h1>
<p>
The Xfcc Server Setup dialog reads in the currently specified xfcc
configuration and displays all servers specified in the config file.
The dialog is separated in two parts: the upper half lists all server
names defined, while the lower part lists all currently set
configuration values for these files.
</p>
<h2>Necessary entries</h2>
<ul>
<li><term>Server name</term>: This specifies the name used for this specific
server and to generate unique game IDs. The name should consist of a
single word containing only characters (a-z and A-Z), numbers and the
characters "-" and "_". It is treated case sensitive.
</li>
<li><term>Login name</term>: specifies the name used to log into a
specific server. It is a wise custom to use only characters, numbers
and "-" as well as "_" in this name.
</li>
<li><term>Password</term>: defines the password used for login. The
same rules apply as for the Login name. <b>Note</b> Scid currently
stores your passwords on the hardisc in unencrypted form. For this
reason keep the directory safe.
</li>
<li><term>URL</term>: This is the base URL for the Xfcc interface of the
correspondence chess server. It can be found at the servers homepage.
Some examples for common servers are:
<ul>
	<li>SchemingMind: <url
	http://www.schemingmind.com/xfcc/xfccbasic.asmx>
	http://www.schemingmind.com/xfcc/xfccbasic.asmx</url>
	</li>
	<li>ICCF: 
	<url http://www.iccf-webchess.com/XfccBasic.asmx>
	http://www.iccf-webchess.com/XfccBasic.asmx</url>
	</li>
	<li>MeinSchach.de / MyChess.de:
	<url http://www.myChess.de/xfcc/xfccbasic.php4>
	http://www.myChess.de/xfcc/xfccbasic.php4</url>
	</li>
</ul>
</li>
</ul>
<p>
To switch between the individual server settings just select the
server to change from the upper listbox. Its current values will then
be displayed in the entry fields and can be adopted. Clicking on
another server in the list will activate the new settings.
</p>
<p>
To add a new server, just hit the <term>Add</term> button. A new entry
will be created that is prefilled with some text to replace. Please
keep in mind that the server name has to be unique in your setup.
</p>
<p>
To delete a server select it from the list and press the
<term>Delete</term> button. All values for this specific server will
be prepended by a hash mark (#) marking this entry as deleted.
Therefore, if a server was deleted by accident, just remove the hash
marks in front of the entries.
</p>
<p>
Hitting <term>OK</term> will Scid have to store your current setup. At
this point all servers marked as deleted are deleted, all new servers
are added to the setup. By pressing <term>Cancel</term> all changes
are lost, the old setup stays in place.
</p>

<p><footer>(Updated: Scid 3.6.24, May 2008)</footer></p>
}

# Serious game window help
set helpTitle(SeriousGame) "Serious Game Window"
set helpText(SeriousGame) {<h1>Serious game window</h1>
  <p>
  Serious games can be played against any <term>UCI</term> engine set
  up for the usage with Scid. A list of all possible opponents is
  given on top of the <term>Game configuration</term> window. The
  button <term>Configure UCI engine</term> additionally gives access
  to the engines parameters. By default, they are set such as in the
  <a Analysis List>engine configuration</a>.
  </p>
  <p>
  Next, the book that should be used can be chosen from those opening
  books available to Scid. Unchecking the <term>Use book</term> box
  will disable the use of an opening book and the engine will start
  calculating moves right from the beginning.
  </p>
  <p>
  The section <term>Time mode</term> allows to set the timing used for
  the engine. Various settings are possible here:
  <ul>
     <li><term>Time + bonus</term> specifies the time for the whole
     game and a possible increment per move (Fisher clock). The
     default is set to 5 minutes per game and 10 seconds increment per
     move which is a usual setting for Blitz games. Note, that the
     times for Black and White can be set independently. This allows
     to set a short amount of time for the engine and give a longer
     time of thinking to the player, and thus strengthening the
     players analysing possibilities while weakening the engines
     abilities in case of <term>Permanent thinking</term> is off (see
     below).
     </li>

     <li><term>Fixed depth</term> does not set the time per game but
     the depth the engine will calculate in half moves. As this
     disables the ability to calculate deeper if necessary, the
     computer will not see certain mates and combinations, the engine
     may play weaker and thus offer a better partner for training
     purposes.
     <p>
     <b>Note</b>: some, especially commercial, engines also offer to
     weaken their strength in ELO units. Most likely this will offer a
     more suitable algorithm than limiting the search depth. In Scid,
     such games are also offered as <a TacticalGame>Tactical games</a>
     against the free Phalanx engine.
     </p>
     </li>

     <li><term>Nodes</term> is similar to limiting the search depth,
     but here the engine has to move after the evaluation of a certain
     number of positions. (The default is 10,000.)
     </li>

     <li><term>Seconds per move</term> allows the engine to spend a
     certain amount of time at maximum for a given position. Some
     engines will move faster in certain circumstances, but they will
     not exceed the time limit set here. As <term>Fixed depth</term>
     and <term>Nodes</term> this also limits the engines playing
     strength, but also gives a pretty responsive game play.
     </li>
  </ul>
  </p>
  <p>
  Serious games can start from the current board position if the box
  <term>Start from current position</term> is checked. This allows
  e.g. to play out defined middle game positions that arise from an
  opening.
  </p>
  <p>
  <term>Permanent thinking</term> (sometimes also called ponder)
  allows the engine to calculate on the players time. If unchecked, the
  engine will stop analysing the position if the player has the move.
  If the game is set for a fixed time per move, this will weaken the
  engine. On the other hand, the engine might move immediately, if the
  player made the move it was analysing on the players time.
  </p>
  <p>
  <term>Coach is watching</term> will open a dialogue offering to take
  back a move if the player made a blunder (due to the engines
  evaluation of his last move).
  </p>
  <p>
  For training of openings <term>Specific opening</term> can be
  checked. In the list below one can choose the opening to play. The
  player then should follow the line chosen, otherwise Scid will ask
  if the move should be taken back.
  </p>

  <p>
  After setting all parameters of the game and hitting the Play
  button, Scid will set up the opponent engine show the clocks and
  start the game. The player must not make a move till the clocks
  appear. Note that it might take some time for the chess engine to
  start up and initialise properly.
  </p>

  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Tactics Trainer
set helpTitle(TacticsTrainer) "Training: Tactics"
set helpText(TacticsTrainer) {<h1>Training: Tactics</h1>
  <p>
  Scid offers the possibility to solve chess puzzles. For this feature
  special databases containing the puzzles are required. These
  databases are searched in the <term>Bases</term> directory, that can
  be specified via the menu Options / Bases directory. Unlike other
  bases these bases usually do not contain full games but just a
  starting position as is well known from the usual tactics puzzle
  books. In fact, every puzzle book can easily be converted to such a
  training base by just setting up the positions and storing them in
  the <term>Bases</term> directory. Additionally, one has to set the
  type of the base to <term>Tactics</term> by means of the <a
  Maintenance>Maintenance</a> window.
  </p>
  <p>
  After choosing Play / Training / Tactics a dialogue pops up that
  allows to choose a training base. There, the name of the base is
  displayed, followed by the number of solved puzzles and the total
  number of puzzles in the base in brackets. That is, Scid stores the
  puzzles the user already solved with the base. Choosing a base an
  clicking the <term>Reset scores</term> button will reset this
  information marking all puzzles as unsolved.
  </p>
  <p>
  <b>Note</b> it is advisable to close the <a PGN>PGN</a> window and check
  <term>hide next move</term> in the context menu of the information
  area of Scids main window. Otherwise cheating is pretty simple.
  <p>
  To get a solution for the puzzles in a base the positions are
  analysed by the Toga chess engine (included with Scid). The
  <term>Limit engine analysis time</term> slider allows to limit the
  time the engine has to solve the position. Several seconds should be
  enough for most cases as usually tactical puzzles contain a
  forced continuation which will be found very quickly by almost all
  chess engines.
  </p>
  <p>
  Clicking the <term>Continue</term> button will start the exercise,
  displaying the first unsolved puzzle. That is, it is possible to
  continue to work through a base. Also if some puzzle was skipped in
  the first session or unsolved, it will be redisplayed. A new window
  will pop up containing a clock and several buttons. The clock is
  only for the user to check how long he thought about the position at
  hand. No evaluation is done on the time required to solve a problem.
  </p>
  <p>
  Some tactical exercises do not end in a mate, but the correct
  solution gives a clear advantage. If one wants to play out these
  scenarios and only count the exercise solved in case of a win, just
  check the <term>Win won game</term> option. (This option has no
  meaning in case of a clear mate solution.)
  </p>
  <p>
  If a problem can not be solved, one can check the 
  <term>Show solution</term> checkbox. The solution is then displayed
  underneath in the dark gray field.
  </p>
  <p>
  Clicking the <term>Next</term> button allows the user to skip a
  puzzle and move on, the <term>Abort</term> button will end tactical
  training and close the database. Besides the <term>Next</term>
  button, the user can choose an exercise by whatever means one can
  select a game within a database in Scid, e.g. by choosing a random
  game via Ctrl-? or jumping to some bookmark or simply by the <a
  GameList>game list</a>.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Find best move 
set helpTitle(FindBestMove) "Training: Find best move"
set helpText(FindBestMove) {<h1>Training: Find best move</h1>
  <p>
  When annotating games with a chess engine, the engine can search for
  tactical opportunities within a game. This can be achieve by setting
  <term>Mark Tactical Exercise</term> in the <a
  Analysis>Annotation</a> window accessible from analysis. In case a
  tactical opportunity is found, Scid will then flag the game with the
  <term>T</term> flag (Tactics) and add a special comment that is
  evaluated in this exercise.
  </p>
  <p>
  To use this training method, a properly prepared database is
  required. This can be achieved by batch annotating a set of games or
  one can just download them from the <url
  http://scid.sourceforge.net/>Scid website</url>.
  After opening a properly prepared database, just select Play /
  Training / Find best move. Scid will then jump to the next location
  of a tactical blow from the current game position. If necessary a
  suitable new game will be loaded and Scid will display the critical
  position. The user is now required to find the best continuation.
  To jump to the next tactical position one can just right click on
  the goto end of game button.
  </p>
  <p>
  For this exercise it is advisable to close the <a PGN>PGN</a> window and set
  <term>Hide next move</term> from the status areas context menu.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# FICS Login
set helpTitle(FICSLogin) "FICS Login"
set helpText(FICSLogin) {<h1>FICS Login</h1>
  <p>
  The Free Internet Chess Server (FICS) is a good place to play chess
  online with people all over the world at various playing strengths.
  One of the great advantages is, that one can play human opponents.
  Additionally, FICS offers a rating system that allows to test the
  own strength and monitor the own progress. Furthermore, FICS relays
  international tournaments which can be observed and discussed life
  on the server and there exist several training options. For a
  detailed description of the services offered, on how to become a
  member of FICS etc. please refer to the FICS homepage at
  http://www.freechess.org.
  </p>
  <p>
  Though in principle FICS can be used with a plain telnet program
  playing with a real chess program offers several advantages.
  Therefore, Scid offers an interface to this server. To establish a
  connection to the server one has to log in first and several
  parameters are required:
  <ul>
      <li><term>Login:</term> This is your login name on the FICS
      server. Its value is stored in Scids configuration for later
      reuse.</li>
      <li><term>Password:</term> specifies your password for login.
      <b>Note</b> that this password is displayed when you type,
      allowing everybody to read it. Additionally, this password is
      stored in plain text within Scids configuration. If you are
      using a publicly accessible system please make sure to assign
      proper rights to Scids config directory.
      </li>
      <li><term>Time seal</term> if checked, all connections to the
      FICS server are routed through the <term>timeseal</term>
      program. The purpose of <term>timeseal</term> is to cope with
      network lags and keeping the clocks in correct order, that means
      that you should not loose a game on time simply cause you are on
      a very slow network connection. The suitable
      <term>timeseal</term> program for your operating system has to
      be selected in the next input line. It is available for free,
      but required to be downloaded separately from
      http://www.freechess.org.
      </li>
      <li><term>Server port</term> specifies the port on the server.
      The default is 5000 and should be ok for almost all needs.</li>
      <li><term>Timeseal port</term> specifies the port where the
      <term>timeseal</term> program is listening. The default is 5001
      and should be ok for almost all needs.</li>
   </ul>
   All these settings are stored with Scids configuration and
   therefore have to be entered only once.
   </p>
  <p>
  After checking the settings you can connect to the FICS server by
  clicking the <term>Connect</term> button. Alternatively, Sicd offers
  an anonymous login by choosing <term>Login as guest</term>. In this
  mode you can try all functions of FICS play there anonymously, but
  you will not be able to play rated games or obtain a rating
  yourself. For the difference between Guest account and usual account
  please refer to the documentation at the FICS homepage.
  </p>
  <p>
  <b>Note</b> Besides standard chess FICS also offers a bunch of chess
  variants like bughouse or crazyhouse etc. Scid does not support any
  of these variations, so you can not play them using Scid. If you
  want to play variations you may wish to check out other interfaces.
  FICS offers a bunch of graphical interfaces for download on its
  homepage.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# FICS Find Opponent
set helpTitle(FICSfindOpp) "FICS Find Opponent"
set helpText(FICSfindOpp) {<h1>FICS Find Opponent</h1>
  <p>
  This dialogue offers a convenient way to challenge other players for
  a game, in FICS speak to <term>place a seek</term>. For this several
  parameters have to be set:
  <ul>
      <li><term>Initial time (min)</term> sets the initial time for
      the game in minutes.</li>
      <li><term>Increment (sec)</term> sets the increment per move,
      this is equivalent to a <term>Fisher Clock</term>. Setting it to
      0 will cause the game to last <term>Initial time</term> minutes.
      </li>
      <li><term>Rated game</term> If checked, the game will be rated,
      uncheck it to play a leisure game.</li>
      <li><term>color</term> If set to automatic, its up to the
      opponent to choose the color he wants to play, you will accept
      either he choses. If you want to play black or white explicitly,
      mark either of those choices.
      </li>
      <li><term>Limit rating between</term> allows you to offer a game
      to players in the given rating interval. Using this option can
      assure you to play opponents in your rating range and thus
      having a good game.
      </li>
      <li><term>Confirm manually</term> allows you to confirm or deny
      the game, once another player accepted your challenge.</li>
      <li><term>Filter with formula</term> On FICS every player can
      set a formula that describes what challenges will be denied
      automatically. This formula can be enabled by checking this box.
      </li>
   </ul>
   Clicking the <term>Issue seek</term> button will place your
   offer on the server.
  </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# FICS
set helpTitle(FICS) "FICS: Play on the Internet"
set helpText(FICS) {<h1>FICS: Play on the Internet</h1>
  <p>
  The window is split horizontally in tow main parts. On top the
  console window is shown. Here all messages sent to the server or
  retrieved from the server show up. Normal messages are written in
  green, game offers form other players show up in red, commands sent
  to the server are prepended by a prompt.
  </p>
  <p>
  Interaction with FICS is command driven. Therefore, below the
  console window is the command line. Here the user can enter commands
  sent to the server by either hitting enter or the <term>send</term>
  button. Describing all commands of FICS is beyond the scope of this
  document, however FICS offers an extensive online help system. To
  see a list of possible commands one can issue <term>help
  commands</term>. To see the detailed documentation of a specific
  command just prepend its name by <term>help</term>. Note, that a
  command may have several help pages. To scroll down issue the
  <term>next</term> command.
  </p>
  <p>
  Below the command line, the dialogue is split in two parts. On the
  left hand side the clocks show up, one for white and one for black.
  Clicking into a clock will halt it, inside the analogue clocks a
  digital representation is shown.
  </p>
  <p>
  On the right hand side of the clocks appear the command buttons:
  <ul>
    <li><term>Silence</term> will filter out most of the messages on
    FICS that are not explicitly directed to the user. It is
    equivalent to sending the FICS commands 
    <ul>
    <li>set gin 0</li>
    <li>set seek 0</li>
    <li>set silence 0</li>
    <li>set chanoff 1</li>
    </ul>
    </li>
    <li><term>Offers</term> will show a graphical display of the
    current game offers. The y-axis shows the ELO rating of the
    opponent (the higher his level, the further up the offer appears),
    while x-axis of the graph shows the timing of of the games (the
    further to the right, the slower the game). The first red line
    marks standard <term>Blitz</term> timing (5 min., no increment)
    while the second red line marks the standard <term>Rapid</term>
    timing (15 min., no increment). Additionally, the offers use the
    following coding:
    <ul>
       <li><green>Green</green>: offers from human opponents</li>
       <li><blue>Blue</blue>: offers from computer opponents</li>
       <li><red>Red</red>: games with a total time of more than 1 hour</li>
       <li><gray>Gray</gray>: anonymous offers, i.e. offers from guest logins</li>
       <li>Boxes: unrated games</li>
       <li>Circles: rated games</li>
    </ul>
    Hovering the mouse over a specific offer shows the full details in
    a textual form:
    <ul>
       <li>the game number</li>
       <li>the players login handle</li>
       <li>the rating of the player in brackets</li>
       <li>the initial time / the time increment</li>
       <li>the word "rated" or "unrated" depending on the offer</li>
       <li>the word "[white]" or "[black]" if the opponent wants to
       play the specified color only</li>
    </ul>
    To accept an offer just click on the symbol.
  <li><term>Find opponent</term> opens a  <a FICSfindOpp>dialogue</a>
  that allows to place an offer.</li>
  <li><term>Draw</term> offers a draw in the ongoing game</li>
  <li><term>Abort</term> aborts the ongoing game</li>
  <li>term>Resign</term> resigns the ongoing game</li>
  <li><term>Takeback</term> takes back a half move, useful in
  analysis</li>
  <li><term>Takback 2</term> takes back a full move, useful in
  analysis</li>
  <li><term>Games</li> gives a list of ongoing games on the server.
  Note that FICS console is considered to be 80 chars wide, therefore,
  to get a nice table it would be necessary to resize the FICS window.
  </li>
  <li>
  <li><term>Close</term> closes the connection to FICS</li>
  </ul>
  </p>

  <h3><name Training>FICS Lectures</h3>
  <p>
  FICS offers several options for chess training. One of the more
  prominent once are the lecture bots <term>LectureBot</term> and
  <term>WesBot</term>. They run all the time on FICS and offer various
  training sessions that can be visited using Scid. The start of each
  session is announced on <term>Channel 67</term> of FICS. Therefore,
  to see these announcements one should first add this channel to the
  personal observation list. This can be done by <term>+channel
  67</term> (it can be removed again by <term>-channel 67</term>).
  Once e.g. LectureBot announces a training session, one can take part
  by issuing <term>observe lecturebot</term>. Please refer to the
  online documentation of FICS for additional features of the Bots and
  also other bots available.
  </p>

  <h3><name Observe>Observe games on FICS</h3>
  <p>
  From time to time FICS <term>relays</term> major events in
  international chess. In these cases one can observe the games life
  on the server and discuss them with other users on FICS. To find out
  what games are currently relayed (if any) one can ask the relay for
  a list by <term>relay listgames</term>. As FICS expects the terminal
  to have 80 chars width it might be necessary to resize Scids FICS
  window to get a nice table. The entries in the table are, first the
  game number, colon, than the opponents, the result of the game (*
  signifying an ongoing game as usual) and the <a ECO>ECO code</a> of
  the opening. To observe a specific game one can just <term>observe
  gamenumber</term>. Scid will then display the current board
  position, the clocks will display the proper values sent by the
  relay and it will fetch all moves of the game so far plus the usual
  <a PGN>PGN</a> header fields. If a player moves this move is performed in Scid
  as usual. For discussing the game with other observers,
  <term>whisper</term> and <term>kibitz</term> can be used. Please
  refer to the online help of these commands. All these conversations
  can be read in the console.
  </p>
  <p>
  Note that only one game can be observed within Scid.
  </p>

  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Book tuning
set helpTitle(BookTuning) "Book tuning"
set helpText(BookTuning) {<h1>Book tuning</h1>
   <p>
   For each book move a percentage is given stating the probability
   that Scid will use this move. Using <term>Book tuning</term> one
   can adjust these values. First, the position where the lines should
   be adopted has to be set up. After calling Tools / Book tuning one
   gets a small window stating the moves in book and their percentage
   in a spin box. Note, that only integer values are shown, therefore
   a 0 may appear signifying that this move has a probability of "less
   than 1%". (Most likely this happens in automatically generated
   books from game collections.) All numbers add up to 100% of course.
   </p>
   <p>
   To navigate through the branches of the book one can just click on
   the line in the book tuning window or move around the game as usual
   in Scid.
   </p>
   <p>
   To adjust the probability, e.g. rise the probability of a certain
   variation, one can just increase its value. Though the other values
   stay the same, Scid will recalculate once <term>Save</term> is
   pressed.
   </p>
   <p>
   Choosing <term>Export</term> will export a branch of the book from
   the current position onwards into a single game. The continuation
   with the highest probability will make up the main line while all
   others are stored in variations. This allows for semi manually
   selecting lines to be included in a new book to be created. Note,
   that Scid can handle 3000 moves in a single game, therefore it will
   most likely not be possible (nor will it be very sensible) to
   export a whole opening book into one game. Also note that export
   can be done incrementally. That is, new lines are added to already
   existing ones. This also allows to merge several books.
   </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

# Novag Citrine
set helpTitle(Novag) "Connecting the Novag Citrine Chess board"
set helpText(Novag) {<h1>Connecting the Novag Citrine Chess board</h1>
   <p>
   The Novag Citrine is a wooden chess board that can be interfaced
   from a PC by means of a serial connection. It can be used with Scid
   to enter games, play against a computer opponent or on FICS
   offering a "natural" chess interface.
   </p>
   <p>
   <b>Note</b>: Before the board can be used, one has to <a
   HardwareConfig>configure the port to use.</a>
   </p>
   <p>
   Once the proper port is set, choose Tools / Connect Hardware /
   Connect Novag Citrine to hook up the board, or just click the
   hardware connection button <button tb_eng_disconnected>. This
   button also shows the <a HardwareStatus> status of the
   connection.</a>

   ###--- Detailed description needed ---###
   </p>
  <p><footer>(Updated: Scid 3.6.26, October 2008)</footer></p>
}

set helpTitle(HardwareConfig) "Connecting External Hardware"
set helpText(HardwareConfig) {<h1>Connecting External Hardware</h1>
  There are two types of hardware that can be used with Scid to play
  or input games. Select from the <term>Hardware</term> list the one
  you wish to use:
  <ul>
    <li><term>Novag Citrine</term> (and compatible boards) use an
    internal driver that was developed specifically for the Novag
    Citrine board, however there may exist other boards that support
    this protocol.  This driver allows to enter moves, but the boards
    logic does not recognise the position set up on the board nor the
    pieces as such.
    </li>
    <li><term>Input Engine</term> drivers are meant to be a free,
    open interface to hook up any hardware to some GUI like Scid. It
    is modeled after the usual style of a chess engine. The
    specifications of the protocol as well as a driver suitable for
    the DGT Electronic Chess boards can be found at the <url
    http://dgtdrv.sourceforge.net>dgtdrv website</url>.  Depending on
    the hardware the board may know the positions set up and the
    pieces by their move. This is e.g. the case for the DGT boards.
    </li>
  </ul>
  <p>
  <b>Note</b> Scid does not include any input engine by default. Input
  engines are meant to be independent programs that can be used with a
  variety of GUIs.
  </p>
  <p>
  After selecting the hardware to use at least the port, this hardware
  is connected to, has to be specified. Depending on the operating
  system and the board to use this port varies. However, usually
  external hardware is hooked up by a serial, USB or BlueTooth
  connection, where the latter two are just derivatives of serial
  connections. Depending on the platform usual names for the port in
  question are:
  </p>
  <ul>
    <li><term>Unix</term> (incl. <term>Linux</term>): usually a file
    in the <term>/dev</term> directory is used. For serial ports the
    common naming is <term>/dev/ttyS0</term>, for the first serial
    port, <term>/dev/ttyS1</term>, for the second and so on. For
    serial USB devices common names include <term>/dev/ttyUSB0</term>
    for the first, <term>/dev/ttyUSB1</term> for the second and so on.
    Other less common names are <term>/dev/usb/tts/*</term> or
    <term>/dev/usbdev*</term> (where the asterisk * stands for some
    additional name). BlueTooth devices commonly show up as
    <term>/dev/rfcomm0</term> for the first, <term>/dev/rfcomm1</term>
    for the second and so on.
    </li>
    <li><term>MacOS</term>:
    ###--- details for naming on Mac OS X required ---###
    </li>
    <li><term>Windows</term> follows the usual DOS convention, where
    the serial ports are labeled <term>COM1:</term>,
    <term>COM2:</term> and so on. This naming also applies to
    converters, however they sometimes get numbers beyond 4.
    </li>
    <li><term>Show button</term> will enable the <a
    HardwareStatus>hardware connect button</a> in the toolbar if
    checked. If unchecked the button will not show up to save space.
    Removal of the button needs to restart Scid.
    </li>
  </ul>
  <p>
  <b>Note</b>: if a board is connected by means of an USB to serial or
  BlueTooth to serial converter, these adaptors usually show up in the
  above scheme as well.
  </p>
  <p>
  If an Input Engine compatible driver should be used, the following
  fields need to be filled in (for the Novag driver they are
  disabled):
  </p>
  <ul>
     <li><term>Engine command</term>: The name of the program that is
     to be used as a driver engine. A fully qualified name may be
     required, like in the configuration of a <name Analysis
     List>chess engine</a>. (E.g. the DGT driver engine on a Linux
     system is usually called <term>dgtdrv2.i686</term>.)
     </li>
     <li><term>Engine parameter</term>: The text given in this field
     is passed along as parameters to the driver engine. The values
     required here depend on the driver and should be given in its
     documentation. (E.g. the DGT driver engine needs a two letter
     code specifying the board orientation and the moves that should
     be send to the GUI. The first letter may be <term>l</term> or
     <term>r</term> depending on the clock sitting to Whites left or
     right, the second letter may be <term>a</term>, <term>b</term> or
     <term>w</term> depending whether all, only black or only whites
     moves should be sent.)
     </li>
  </ul>
  <p>
  Hitting <term>OK</term> will store the setup in Scids configuration
  and immediately start the driver selected.
  </p>
  <p>
  The status of the external board can be monitored by the <a
  HardwareStatus>Hardware status</a> button. This button can also be
  used to hook up already configured hardware immediately without
  calling the <term>Configuration</term> dialogue.
  </p>


  <p><footer>(Updated: Scid 3.6.27, October 2008)</footer></p>
}

set helpTitle(HardwareStatus) "Status of External Hardware"
set helpText(HardwareStatus) {<h1>Status of External Hardware</h1>
   <p>
   This button is located on the right of Scids toolbar. Depending on
   the status of the external hardware it shows different icons:
   </p>
   <ul>
   <li><button tb_eng_disconnected>
   This is the normal state after program startup and shows that no
   external hardware is active at the moment. Pressing the button will
   hook up the configured hardware.
   </li>
   <li><button tb_eng_connecting>
   Scid started the communication with the external hardware,
   initialisation is in progress. Depending on the driver and hardware
   connected, it may take some seconds for things to settle.
   </li>
   <li><button tb_eng_error>
   While communicating withe the external hardware some error
   occurred. Usual sources of problems are e.g. another program
   accessing the external hardware, the hardware is not connected to
   the PC or simply is not switched on. In rare cases an external
   hardware may also behave unexpected. Trying to connect again might
   cure the problem as the hardware is usually reset upon disconnect.
   Also unplugging and/or switching off the device is an option in
   this case. Pressing the button will try again to hook up the
   configured hardware.
   </li>
   <li><button tb_eng_ok>
   The communication is established, the device is ready and can be
   used for move input. Pressing the button will disconnect the
   external hardware.
   </li>
   <li><button tb_eng_dgt>
   In case a DGT Electronic Chess board is connected and ready, this
   button shows up. Pressing the button will disconnect the
   external hardware.
   </li>
   <li><button tb_eng_query>
   The <a HardwareConfig</a> dialogue is open. Finish configuration
   before hooking up the hardware.
   </li>
   </ul>

  <p><footer>(Updated: Scid 3.6.27, October 2008)</footer></p>
}

set helpTitle(InputEngine) "Input Engine driver console"
set helpText(InputEngine) {<h1>Input Engine driver console</h1>
   <p>
   On top of this window, a console shows up that monitors the
   communication between Scid and the driver engine. Usually, this is
   of no interest to the user, but it may provide helpful hints in
   case of malfunction. All commands sent by Scid are prepended by an
   arrow to the right, all answers retrieved from the driver engine by
   an arrow to the left.  Below the console, the actual invokation of
   the driver by Scid shows up for information.
   </p>
   <p>
   <term>Moves sent for</term> allows to limit the moves sent by the
   external hardware. For game input the board should of course send
   the moves for both sides. For actually playing a game however, the
   moves made by the opponent should be ingnored, as Scid would
   otherwise notify them as "illegal moves".
   </p>
   <p>
   The small board on the right shows the current position.
   </p>
   <p>
   If a move is made, in the area between the buttons and the small
   board the move performed (<term>move area</term>) on the external
   board is shown in figurine long algebraic notation. Valid moves
   show up on a <green>green</green> background while illegal moves
   show up on a <red>red</red> background. Additionally, illegal moves
   are announced by the alert sound, if Scid has sound enabled.
   Depending on the settings, the moves are additionally announced.
   </p>
   <p>
   The <term>Info</term> button calls up information from the driver
   engine. The extend of this information depends on the engine, but
   it should usually give as much as is available about the external
   hardware and the driver itself. Additionally, the external driver
   will return the current position on the external board as <term>FEN</term> which
   is then compared to Scids internal representation. Discrepancies
   show up in the console and issue an alert.
   </p>
   <p>
   In case Scid and the external board got out of sync, the
   <term>Synchronise</term> button can be used. A new game is set up
   and the start position is set to the position on the external
   board.  </p>
   <p>
   The <term>Close</term> button finally disconnects the external
   hardware and closes the console.
   </p>

   <h2>Special Features</h2>
   <p>
   The following features depend on the driver engine and hardware
   that is used. Their description is based on the functions available
   with the <url http://www.dgt-projects.com>DGT Electronic Chess
   Board</url> and specified in the
   <url http://dgtdrv.sourceforge.net>Input Engine Protocol</url>
   description. Some of these functions however rely on the fact that
   the hardware is able to recognise the pieces on the board and their
   current placement.
   </p>

   <h3>Position setup</h3>
   <p>
   The position setup mode is invoked by removing both kings from the
   board. In this mode the <term>move area</term> is colored yellow
   and shows the White king and the string <b>Setup</b>.
   </p>
   <p>
   In setup mode any valid position can be set up on the external
   board, however Scids internal representation is not updated till
   finished.
   </p>
   <p>
   To end the setup mode both kings are set back to the board. Note,
   that the king of the side to move is set back <b>last</b>, that is
   if white should be on the move first set back the black king, then
   the white king. Now, the <term>move area</term> shows the black
   Queen and the string <b>OK</b>.
   </p>

   <h3>End a game</h3>
   <p>
   In game input or game play one can end the current game by setting
   both kings into the center squares of the board. The result is
   given as follows:
   </p>
   <ul>
      <li><term>1-0</term> (White win): Set both kings to the squares
      e4 and d5 in any order, ie. to the white centre squares.
      The move area is colored in white, showing the white king and
      the result.
      </li>
      <li><term>0-1</term> (Black win): Set both kings to the squares
      e5 and d4 in any order, ie. to the black centre squares.
      The move area is colored in gray, showing the black king and
      the result.
      </li>
      <li><term>1/2-1/2</term> (Draw): Set one king on a white and one
      on a black centre square in any order.
      The move area is colored in black and white, showing the result.
      </li>
   </ul>
   <p>
   In either case the <term>Save / Add game</term> dialogue shows up
   to allow filling in the game tags and to store the game in the
   current database.
   </p>

   <h3>Start a new game</h3>
   <p>
   A new game can be stared by entering setup mode (ie. removing both
   kings) and setting up the start position. To notify, that Scid has
   recognised the call for a new game the <term>move area</term> is
   colored in blue showing the white king and the string
   <term>OK</term>.
   </p>


  <p><footer>(Updated: Scid 3.6.27, October 2008)</footer></p>
}

set helpTitle(ReviewGame) "Game Review"
set helpText(ReviewGame) {<h1>Reviewing a game</h1>
   <p>
	This feature is designed to study a game, which means you should
	try to guess the moves played during the match. So you first open a
	game from any Scid's base, and enter this function with the command
	<b>Review game</b> in the <b>Play</b> menu.  As usually, to play
	with Black, flip board first (you always play from the bottom of
	the board).
   </p>
	<p>
	For an effective training the following settings should be
	disabled:
	<ul>
		<li>Show last move (Options / Moves / Hightlight last move)</li>
		<li>Show next move (Options / Game information / Hide next move)</li>
		<li>PGN window</li>
	</p>
The process is the following :
<ul>
<li>- engines ponders on the move played during the game</li>
<li>- engine ponders on the position and finds the best move</li>
<li>- user is then allowed to enter his move</li>
<li>- engine ponders on the move played by the user</li>
</ul>
If the move played by the user is either the move actually played
during the game or the move chosen by the engine or a move whose score
is close to the best move found by the engine (using the margin error
defined by the user), then the move is considered as a good one. If
the user disagrees with the engine he can use the <b>extended time</b>
button to get a confirmation of engine's analysis.
<p>
<b>Notes:</b> 
<ul>
<li>- The side must be chosen before game reviewing </li>
<li>- The user always plays from the bottom of the board</li>
</ul>
</p>
  <p><footer>(Updated: Scid 4.3, January 2011)</footer></p>
}

set helpTitle(Metadata) "Dublin Core Metadata"
set helpText(Metadata) {<h1>Dublin Core Metadata</h1>
   <p>
   The <url "http://dublincore.org">Dublin Core</a> metadata element
   defines a standardised and widelay used way to exchange
   informations about electronic ressources (metadata, ie. data about
   data). Dublin Core was defined in 2003 by ISO Standard 15836, and
   NISO Standard Z39.85-2007.
   </p>
   <p>
   Some databases that are used with Scid may contain additional
   metadata information. Such information may refer to the License of
   a database, the source of the database (in case it is published on
   the Web), the date of a database and so on.
   </p>
   <p>
   These informations can be viewed or appended to a database by
   choosing <term>Database information</term>. A new window will open
   up that shows the individual Dublin Core items and allows to edit
   them.
   </p>
   <p>
   Internally, metadata are stored in <term>sme</term> files that may
   come with a database. In case no <term>sme</term> file exists
   opening the <term>Database information</term> dialogue  will set
   default values based on the current database. This is signified by
   the labels showing up in <blue>blue</blue>.
   </p>
   <p>
   After choosing <term>OK</term> Scid stores the metadata to the
   <term>sme</term> file for usage with Scid. Additionally, an
   <term>XML</term> file is genereated containing exactly the same
   metadata, but in XML format for easy data exchange.
   </p>
   <p>
   <b>Note</b>: Scid does not care about the XML file itself. It uses
   only the <term>sme</term> file for its internal procedures.
   However, other applications may well prefer the XML structure.
   </p>

  <p><footer>(Updated: Scid 3.6.27, October 2008)</footer></p>
}


namespace eval ::tip {}

proc ::tip::show {{n -1}} {
  global tips language
  set w .tipsWin

  if {! [winfo exists .tipsWin]} {
    toplevel $w
    wm title $w "Scid: [tr HelpTip]"
    pack [ttk::frame $w.b] -side bottom -fill x
    text $w.text -background gray95 -foreground black \
      -cursor top_left_arrow -width 40 -height 8 -setgrid 1 \
      -yscrollcommand "$w.ybar set" -wrap word
    ::htext::init $w.text
    ttk::scrollbar $w.ybar -command "$w.text yview"
    pack $w.ybar -side right -fill y
    pack $w.text -side left -fill both -expand 1
    ttk::checkbutton $w.b.start -textvar ::tr(TipAtStartup) -variable startup(tip) -style Small.TCheckbutton
    dialogbuttonsmall $w.b.prev [list -text "<" ]
    dialogbuttonsmall $w.b.next [list -text ">" ]
    dialogbuttonsmall $w.b.close [list -textvar ::tr(Close) -command "destroy $w" ]
    pack $w.b.start -side left -padx 2
    packbuttons right $w.b.close $w.b.next $w.b.prev

    bind $w <Up> "$w.text yview scroll -1 units"
    bind $w <Down> "$w.text yview scroll 1 units"
    bind $w <Prior> "$w.text yview scroll -1 pages"
    bind $w <Next> "$w.text yview scroll 1 pages"
    bind $w <Key-Home> "$w.text yview moveto 0"
    bind $w <Key-End> "$w.text yview moveto 0.99"
    bind $w <Escape> "$w.b.close invoke"
    ::utils::win::Centre $w
    raiseWin $w
    focus $w
  }
  $w.text configure -state normal
  $w.text delete 1.0 end
  if {[info exists tips($language)]} {
    set tiplist $tips($language)
  } else {
    set tiplist $tips(E)
  }

  set ntips [llength $tiplist]
  if {$n < 0} {
    set n [expr int(double($ntips) * rand())]
  }
  set prev [expr $n - 1]
  if {$prev < 0} {set prev [expr $ntips - 1]}
  set next [expr ($n + 1) % $ntips]
  $w.b.prev configure -command "::tip::show $prev"
  $w.b.next configure -command "::tip::show $next"
  set tip "<center><b>$::tr(Tip) [expr $n + 1]:</b></center><br><br>"
  append tip [string trim [lindex $tiplist $n]]
  ::htext::display $w.text $tip "" 0
}

set tips(E) {
  {
    Scid has over 30 <a Index>help pages</a>, and in most Scid windows
    pressing the <b>F1</b> key will produce the help page about that
    window.
  }
  {
    Some Scid windows (e.g. the game information area, database
    <a Switcher>switcher</a>) have a right-mouse button menu. Try
    pressing the right mouse button in each window to see if it has
    one and what functions are available.
  }
  {
    Scid offers you more than one way to enter chess moves, letting
    you choose which suits you best. You can use the mouse
    (with or without move suggestion) or the keyboard
    (with or without move completion). Read the
    <a Moves>entering chess moves</a> help page for details.
  }
  {
    If you have a few databases that you open often, add a
    <a Bookmarks>bookmark</a> for each one, and then you will be able
    to open them faster using the bookmarks menu.
  }
  {
    You can see all the moves of the current game
    (with any variations and comments) using the <a PGN>PGN window</a>.
    In the PGN window, you can go to any move by clicking
    the left mouse button on it, or use the middle or right mouse button
    to see a preview of that position.
  }
  {
    You can copy games from one database to another using drag and drop
    with the left mouse button in the <a Switcher>database switcher</a> window.
  }
  {
    Scid can open PGN files, even if they are compressed with Gzip
    (with a .gz filename suffix). PGN files are opened read-only, so
    if you want to edit a PGN file in Scid, create a new Scid database
    and copy the PGN file games to it using the
    <a Switcher>database switcher</a>.
  }
  {
    If you have a large database you use with the <a Tree>tree</a> window
    often, it is worth selecting <b>Fill cache file</b> from the tree
    window File menu. This will remember tree statistics for many common
    opening positions, making tree access faster for the database.
  }
  {
    The <a Tree>tree</a> window can show you all moves played from the
    current position, but if you also want to see all the move orders
    that reached this position, you can find them by generating
    an <a OpReport>opening report</a>.
  }
  {
    In the <a GameList>game list</a> window, press the left or right mouse
    button on the heading of each column to adjust its width.
  }
  {
    With the <a PInfo>player information</a> window (just click on either
    player name in the game info area below the main window chessboard
    to open it), you can easily set the <a Searches Filter>filter</a> to
    contain all games by a certain player with a certain result by
    clicking on any value that is displayed <red>in red text</red>.
  }
  {
    When studying an opening, it can be very useful to do a
    <a Searches Board>board search</a> with the <b>Pawns</b> or
    <b>Files</b> option on an important opening position, as this may
    reveal other openings that reach the same pawn structure.
  }
  {
    In the game information area (below the chessboard), you can press
    the right mouse button to produce a menu for customising it. For
    example, you can make Scid hide the next move which is useful for
    training by playing though a game guessing the moves.
  }
  {
    If you often do a lot of database <a Maintenance>maintenance</a> on
    a large database, you can do several maintenance jobs at once using
    the <a Maintenance Cleaner>cleaner</a>.
  }
  {
    If you have a large database where most games have an EventDate and
    you want the games in date order, consider <a Sorting>sorting</a> it
    by EventDate then Event instead of Date then Event, as this will
    help to keep games in the same tournament with different dates
    together (assuming they all have the same EventDate, of course).
  }
  {
    Before <a Maintenance Twins>deleting twin games</a>, it is a good idea
    to <a Maintenance Spellcheck>spellcheck</a> your database since this
    will enable to Scid find more twins and mark them for deletion.
  }
  {
    <a Flags>Flags</a> are useful for marking database games with
    characteristics you may want to search for at a later time, such
    as pawn structure, tactics, etc. You can search by flags with a
    <a Searches Header>header search</a>.
  }
  {
    If you are playing through a game and want to try out some moves
    without altering the game, simply turn on Trial mode (with the
    <b>Ctrl+space</b> shortcut or from the toolbar icon), then turn it off
    again to return to the original game when you are done.
  }
  {
    To find the most prominent games (with high-rated opponents)
    reaching a particular position, open the <a Tree>tree</a> window
    and from there, open the best games list. You can even restrict
    the best games list to show only games with a particular result.
  }
  {
    A great way to study an opening using a large database of games is
    to turn on training mode in the <a Tree>tree</a> window, then play
    against the database to see which lines occur often.
  }
  {
    If you have two databases open, and want to see <a Tree>tree</a>
    statistics of the first database while examining a game from the
    second database, just press the <b>Lock</b> button in the tree
    window to lock it to the first database and then switch to the
    second base.
  }
  {
    The <a Tmt>tournament finder</a> is not only useful for finding
    a particular tournament, but can also be used to see what tournaments
    a certain player has competed in recently or browse the top
    tournaments played in a particular country.
  }
  {
    There are a number of common patterns defined in the
    <a Searches Material>Material/Pattern</a> search window that you
    may find useful for openings or middlegame study.
  }
  {
    When searching for a particular material situation in the
    <a Searches Material>Material/Pattern</a> search window, it is
    often useful to restrict the search to games that match for at
    least a few half-moves to eliminate games where the searched-for
    situation only occurred briefly.
  }
  {
    If you have an important database you do not want to accidentally
    alter, select <b>Read-only...</b> from the <b>File</b> menu after
    opening it, or change its file permissions to be read-only.
  }
  {
    If you use XBoard or WinBoard (or some other chess program that
    can copy a chess position in standard FEN notation to the clipboard)
    and want to copy its current chess position to Scid, the fastest and
    easiest way is to select <b>Copy Position</b> from the File menu in
    XBoard/WinBoard, then <b>Paste start board</b> from the Edit menu
    in Scid.
  }
  {
    In a <a Searches Header>header search</a>, player/event/site/round
    names are case-insensitive and match anywhere in a name. You can choose
    to do a case-sensitive wildcard search instead
    (where "?" = any single character and "*" = zero or more characters)
    by entering the search text "in quotes". For example, type "*BEL"
    (with the quote characters) in the site field to find all games played
    in Belgium but not Belgrade.
  }
  {
    If you want to correct a move in a game without losing all the moves
    played after it, open the <a Import>Import</a> window, press the
    <b>Paste current game</b> button, edit the incorrect move and then
    press <b>Import</b>.
  }
  {
    If you have an ECO classification file loaded, you can go to the
    deepest classified position in the current game with
    <b>Identify opening</b> in the <b>Game</b> menu
    (shortcut: Ctrl+Shift+D).
  }
  {
    If you want to check the size of a file or its date of last modification
    before opening it, use the <a Finder>file finder</a> to open it.
  }
  {
    A <a Repertoire>repertoire</a> file is a great way to keep track of
    your favourite opening lines, and also find games where those lines
    were played. Once you have your openings stored in a repertoire file,
    you can do a repertoire search every time you get a new file of
    games and browse the games that feature your favourite openings.
  }
  {
    An <a OpReport>opening report</a> is great for learning more about
    a particular position. You can see how well it scores, whether it
    leads to frequent short draws, and common positional themes.
  }
  {
    You can add the most common annotation symbols (!, !?, +=, etc) to the
    current move or position with keyboard shortcuts without needing to
    use the <a Comment>comment editor<a> -- for example, type "!" then
    the Return key to add a "!" annotation symbol. See the
    <a Moves>Entering chess moves</a> help page for details.
  }
  {
    If you are browsing openings in a database with the <a Tree>tree</a>,
    you can see a useful overview of how well the current opening is
    scoring recently and between high-rated players by opening the
    Statistics window (shortcut: Ctrl+I).
  }
  {
    You can change the main window board size by holding down the <b>Ctrl</b>
    and <b>Shift</b> keys, and pressing the <b>Left</b> or <b>Right</b>
    arrow key.
  }
  {
    After a <a Searches>search</a>, you can easily browse through all
    the matching games by holding down <b>Ctrl</b> and pressing the
    <b>Up</b> or <b>Down</b> key to load the previous or next
    <a Searches Filter>filter</a> game.
  }
  {
    Windows can be docked by checking the relevant entry in the option menu.
    Tabs can be dragged and dropped from one notebook to another and layed out
    by right clicking on the tab widget.
  }
}

### Menus.tcl: part of Scid.
### Copyright (C) 2001-2003 Shane Hudson.

############################################################
###  Status bar help for menu items, buttons, etc:

array set helpMessage {}
set showHelp 1
set oldStatus ""

# statusBarHelp:
#   Called when a button or menu entry is entered to display
#   a status bar help message if applicable.
#
proc statusBarHelp {window {item {}}} {
  global showHelp helpMessage statusBar language
  
  set status ""
  if {! $showHelp} { return }
  
  # Tcl/Tk seems to generate strange window names for menus that
  # are configured to be a toplevel window main menu, e.g.
  # .menu.file get reported as ".#menu.#menu#file" and
  # .menu.file.utils is ".#menu.#menu#file.#menu#file#utils"
  # I have no idea why it does this, but to avoid it we
  # convert a window paths with hashes to its true value:
  
  if {[string first {.#} $window] != -1} {
    set idx [string last . $window]
    set window [string range $window [expr {$idx+1} ] end]
    regsub -all "\#" $window . window
  }
  
  # Look for a status bar help message for the current button
  # or menu entry, in the current language or English:
  
  if {$item == ""} { set index $window } else { set index "$window,$item" }
  if {[info exists helpMessage($language,$index)]} {
    set status "  $helpMessage($language,$index)"
  } elseif {[info exists helpMessage(E,$index)]} {
    set status "  $helpMessage(E,$index)"
  } elseif {[info exists helpMessage($index)]} {
    set tag $helpMessage($index)
    if {[info exists helpMessage($language,$tag)]} {
      set status "  $helpMessage($language,$tag)"
    } elseif {[info exists helpMessage(E,$tag)]} {
      set status "  $helpMessage(E,$tag)"
    } else { set status $tag }
  }
  
  if {$status == ""} { statusBarRestore $window; return }
  
  if {[string range $window 0 7] == ".treeWin"} {
    set bn ""
    catch { scan $window .treeWin%d.%s bn dummy}
    ::tree::status $status $bn
  } else {
    set statusBar $status
  }
}

# statusBarRestore:
#   Updates a status bar that was displaying a help message.
#
proc statusBarRestore {window} {
  global showHelp statusBar
  
  if {! $showHelp} { return }
  if {[string range $window 0 7] == ".treeWin"} {
    set bn ""
    catch { scan $window .treeWin%d.%s bn dummy}
    ::tree::status "" $bn
  } else {
    updateStatusBar
  }
}

# bind Menu <Any-Enter> "+statusBarHelp %W \[%W index @%y \]"
# bind Menu <Any-Motion> "+statusBarHelp %W \[%W index @%y \]"
# bind Menu <Any-Leave> "+statusBarRestore %W"

bind Menu <<MenuSelect>> {+
  if {[catch {%W index active} tempMenuIndex]} {
    statusBarRestore %W
  } else {
    statusBarHelp %W $tempMenuIndex
  }
}

bind Menubutton <Any-Enter> "+statusBarHelp %W"
bind Menubutton <Any-Leave> "+statusBarRestore %W"
bind Button <Any-Enter> "+statusBarHelp %W"
bind Button <Any-Leave> "+statusBarRestore %W"
bind Label <Any-Enter> "+statusBarHelp %W"
bind Label <Any-Leave> "+statusBarRestore %W"

bind TMenubutton <Any-Enter> "+statusBarHelp %W"
bind TMenubutton <Any-Leave> "+statusBarRestore %W"
bind TButton <Any-Enter> "+statusBarHelp %W"
bind TButton <Any-Leave> "+statusBarRestore %W"
bind TLabel <Any-Enter> "+statusBarHelp %W"
bind TLabel <Any-Leave> "+statusBarRestore %W"

############################################################
### Main window menus:

option add *Menu*TearOff 0

menu .menu

## Mac Application menu has to be before any call to configure.
if { $macOS } {
  # Application menu:
  .menu add cascade -label Scid -menu .menu.apple
  menu .menu.apple
  
  set menuindex -1
  set m .menu.apple
  
  $m add command -label HelpAbout -command helpAbout
  set helpMessage($m,[incr menuindex]) HelpAbout
  
  $m add separator
  incr menuindex
  
  # To Quit
  bind all <Command-q> "exit"
  bind all <Command-Q> "exit"
  
  ## To get Help
  bind all <Command-?> {helpWindow Contents}
  bind all <Help> {helpWindow Contents}

  # Fix Quitting on MacOS X, now it will save options on quit:
  proc exit {}  {
    ::file::Exit
  }

}

if { $::docking::USE_DOCKING } {
  . configure -menu .menu
} else  {
  .main configure -menu .menu
}

.menu add cascade -label File -menu .menu.file
.menu add cascade -label Edit -menu .menu.edit
.menu add cascade -label Game -menu .menu.game
.menu add cascade -label Search -menu .menu.search
.menu add cascade -label Windows -menu .menu.windows
.menu add cascade -label Play -menu .menu.play
.menu add cascade -label Tools -menu .menu.tools
.menu add cascade -label Options -menu .menu.options
.menu add cascade -label Help -menu .menu.helpmenu

foreach menuname { file edit game search windows play tools options helpmenu } {
  menu .menu.$menuname
}

### File menu:

set menuindex -1
set m .menu.file
$m add command -label FileNew -acc "Ctrl+N" -command ::file::New
bind $dot_w <Control-n> ::file::New
set helpMessage($m,[incr menuindex]) FileNew

$m add command -label FileOpen -acc "Ctrl+O" -command ::file::Open
bind $dot_w <Control-o> ::file::Open
set helpMessage($m,[incr menuindex]) FileOpen

$m add command -label FileClose -acc "Ctrl+W" -command ::file::Close
bind $dot_w <Control-w> ::file::Close
set helpMessage($m,[incr menuindex]) FileClose

$m add command -label FileFinder -acc "Ctrl+/" -command ::file::finder::Open
bind $dot_w <Control-slash> ::file::finder::Open
set helpMessage($m,[incr menuindex]) FileFinder

$m add cascade -label FileBookmarks -accelerator "Ctrl+B" -menu $m.bookmarks
set helpMessage($m,[incr menuindex]) FileBookmarks
menu $m.bookmarks

$m add separator
incr menuindex

# naming is weird because the menus are moved from Tools to File menus

$m add command -label ToolsOpenBaseAsTree -command ::file::openBaseAsTree
set helpMessage($m,[incr menuindex]) ToolsOpenBaseAsTree

menu $m.recenttrees
$m add cascade -label ToolsOpenRecentBaseAsTree -menu $m.recenttrees
set helpMessage($m,[incr menuindex]) ToolsOpenRecentBaseAsTree

$m add separator
incr menuindex

menu $m.utils
$m add cascade -label FileMaint -menu .menu.file.utils
set helpMessage($m,[incr menuindex]) FileMaint

$m.utils add checkbutton -label FileMaintWin -accelerator "Ctrl+M" -variable maintWin -command ::maint::OpenClose
bind $dot_w <Control-m> ::maint::OpenClose
set helpMessage($m.utils,0) FileMaintWin

$m.utils add command -label FileMaintCompact -command makeCompactWin
set helpMessage($m.utils,1) FileMaintCompact

$m.utils add command -label FileMaintClass -command classifyAllGames
set helpMessage($m.utils,2) FileMaintClass

$m.utils add command -label FileMaintSort -command makeSortWin
set helpMessage($m.utils,3) FileMaintSort

$m.utils add separator

$m.utils add command -label FileMaintDelete -state disabled -command markTwins
set helpMessage($m.utils,5) FileMaintDelete

$m.utils add command -label FileMaintTwin -command updateTwinChecker
set helpMessage($m.utils,6) FileMaintTwin

$m.utils add separator

menu $m.utils.name
$m.utils add cascade -label FileMaintName -menu .menu.file.utils.name
set helpMessage($m.utils,8) FileMaintName

$m.utils.name add checkbutton -label FileMaintNameEditor -command nameEditor -variable nameEditorWin -accelerator "Ctrl+Shift+N"
bind $dot_w <Control-N> nameEditor
set helpMessage($m.utils.name,0) FileMaintNameEditor

$m.utils.name add command -label FileMaintNamePlayer -command {openSpellCheckWin Player}
set helpMessage($m.utils.name,1) FileMaintNamePlayer

$m.utils.name add command -label FileMaintNameEvent -command {openSpellCheckWin Event}
set helpMessage($m.utils.name,2) FileMaintNameEvent

$m.utils.name add command -label FileMaintNameSite -command {openSpellCheckWin Site}
set helpMessage($m.utils.name,3) FileMaintNameSite

$m.utils.name add command -label FileMaintNameRound -command {openSpellCheckWin Round}
set helpMessage($m.utils.name,4) FileMaintNameRound

$m.utils add separator
$m.utils add command -label FileMaintFixBase -command ::maint::fixCorruptedBase
set helpMessage($m.utils,10) FileMaintFixBase

bind $dot_w <Control-d> ::windows::switcher::Open

$m add command -label FileReadOnly -command makeBaseReadOnly
set helpMessage($m,[incr menuindex]) FileReadOnly

$m add cascade -label FileSwitch -menu $m.switch
set helpMessage($m,[incr menuindex]) FileSwitch
menu $m.switch

set totalBaseSlots [sc_base count total]
set clipbaseSlot [sc_info clipbase]
set currentSlot [sc_base current]

for {set i 1} { $i <= $totalBaseSlots} {incr i} {
  $m.switch add radiobutton -variable currentSlot -value $i \
      -label "Base $i: <none>" \
      -underline 5 -accelerator "Ctrl+$i" -command [list ::file::SwitchToBase $i]
  set helpMessage($m.switch,[expr {$i - 1} ]) "Switch to base slot $i"
  if {$i == $clipbaseSlot} {
    set helpMessage($m.switch,[expr {$i - 1} ]) "Switch to the clipbase database"
  }
  bind $dot_w "<Control-Key-$i>" [list ::file::SwitchToBase $i]
}

$m add separator
incr menuindex

$m add command -label FileExit -accelerator "Ctrl+Q" -command ::file::Exit
bind $dot_w <Control-q> ::file::Exit
set helpMessage($m,[incr menuindex]) FileExit


### Edit menu:
set menuindex -1
set m .menu.edit
$m add command -label EditAdd -accel "Ctrl+A" -command {sc_var create; updateBoard -pgn}
set helpMessage($m,[incr menuindex]) EditAdd

menu $m.del
$m add cascade -label EditDelete -menu $m.del
set helpMessage($m,[incr menuindex]) EditDelete

menu $m.first
$m add cascade -label EditFirst -menu $m.first
set helpMessage($m,[incr menuindex]) EditFirst

menu $m.main
$m add cascade -label EditMain -menu $m.main
set helpMessage($m,[incr menuindex]) EditMain

$m add checkbutton -label EditTrial -variable trialMode -accelerator "Ctrl+space" -command {setTrialMode update}
bind $dot_w <Control-space> { setTrialMode toggle }
set helpMessage($m,[incr menuindex]) EditTrial

$m add cascade -label EditStrip -menu $m.strip
set helpMessage($m,[incr menuindex]) EditStrip

$m add command -label EditUndo -accelerator "Ctrl+z" -command { undoFeature undo }
set helpMessage($m,[incr menuindex]) EditUndo

$m add command -label EditRedo -accelerator "Ctrl+y" -command { undoFeature redo }
set helpMessage($m,[incr menuindex]) EditRedo

menu $m.strip
$m.strip add command -label EditStripComments -command {::game::Strip comments}
set helpMessage($m.strip,0) EditStripComments
$m.strip add command -label EditStripVars -command {::game::Strip variations}
set helpMessage($m.strip,1) EditStripVars
$m.strip add command -label EditStripBegin -command {::game::TruncateBegin}
set helpMessage($m.strip,2) EditStripBegin
$m.strip add command -label EditStripEnd -command {::game::Truncate}
set helpMessage($m.strip,3) EditStripEnd

$m add separator
incr menuindex

$m add command -label EditReset -command {
  sc_clipbase clear
  updateBoard -pgn
  ::windows::gamelist::Refresh
  updateTitle
}
set helpMessage($m,[incr menuindex]) EditReset

$m add command -label EditCopy -accelerator "Ctrl+C" -command {
  catch {sc_clipbase copy}
  updateBoard
 ::pgn::PgnClipboardCopy
}
bind $dot_w <Control-c> {catch {sc_clipbase copy}; updateBoard; ::pgn::PgnClipboardCopy}
bind $dot_w <Control-Insert> {catch {sc_clipbase copy}; updateBoard; ::pgn::PgnClipboardCopy}
set helpMessage($m,[incr menuindex]) EditCopy

$m add command -label EditPaste -accelerator "Ctrl+V" -command {
  sc_clipbase paste
  updateBoard -pgn
}
bind $dot_w <Control-v> {catch {sc_clipbase paste}; updateBoard -pgn}
bind $dot_w <Shift-Insert> {catch {sc_clipbase paste}; updateBoard -pgn}
set helpMessage($m,[incr menuindex]) EditPaste

$m add command -label EditPastePGN -command importClipboardGame
set helpMessage($m,[incr menuindex]) EditPastePGN

$m add separator
incr menuindex

$m add command -label EditSetup -accelerator "Ctrl+Shift+S" -command setupBoard
bind $dot_w <Control-S> setupBoard
set helpMessage($m,[incr menuindex]) EditSetup

$m add command -label EditCopyBoard -accelerator "Ctrl+Shift+C" -command copyFEN
bind $dot_w <Control-C> copyFEN
set helpMessage($m,[incr menuindex]) EditCopyBoard

$m add command -label EditPasteBoard -accelerator "Ctrl+Shift+V" -command pasteFEN
bind $dot_w <Control-V> pasteFEN
set helpMessage($m,[incr menuindex]) EditPasteBoard


### Game menu:
set menuindex -1
set m .menu.game
$m add command -label GameNew -accelerator "Ctrl+X" -command ::game::Clear
bind $dot_w <Control-x> ::game::Clear
set helpMessage($m,[incr menuindex]) GameNew

$m add command -label GameFirst -accelerator "Ctrl+Shift+Up" -command {::game::LoadNextPrev first}
bind $dot_w <Control-Shift-Up> {::game::LoadNextPrev first}
set helpMessage($m,[incr menuindex]) GameFirst

$m add command -label GamePrev -accelerator "Ctrl+Up" -command {::game::LoadNextPrev previous}
bind $dot_w <Control-Up> {::game::LoadNextPrev previous}
set helpMessage($m,[incr menuindex]) GamePrev

$m add command -label GameReload -command ::game::Reload -accelerator "Ctrl+Shift+L"
bind $dot_w <Control-L> ::game::Reload
set helpMessage($m,[incr menuindex]) GameReload

$m add command -label GameNext -accelerator "Ctrl+Down" -command {::game::LoadNextPrev next}
bind $dot_w <Control-Down> {::game::LoadNextPrev next}
set helpMessage($m,[incr menuindex]) GameNext

$m add command -label GameLast -accelerator "Ctrl+Shift+Down" -command {::game::LoadNextPrev last}
bind $dot_w <Control-Shift-Down> {::game::LoadNextPrev last}
set helpMessage($m,[incr menuindex]) GameLast

$m add command -label GameRandom -command ::game::LoadRandom -accelerator "Ctrl+?"
bind $dot_w <Control-question> ::game::LoadRandom
set helpMessage($m,[incr menuindex]) GameRandom

$m add command -label GameNumber -command ::game::LoadNumber -accelerator "Ctrl+G"
bind $dot_w <Control-g> ::game::LoadNumber
set helpMessage($m,[incr menuindex]) GameNumber

$m add separator
incr menuindex

$m add command -label GameReplace -command gameReplace -accelerator "Ctrl+R"
bind $dot_w <Control-r> { .menu.game invoke [tr GameReplace] }
set helpMessage($m,[incr menuindex]) GameReplace

$m  add command -label GameAdd -command gameAdd  -accelerator "Ctrl+S"
bind $dot_w <Control-s> gameAdd
set helpMessage($m,[incr menuindex]) GameAdd

$m add separator
incr menuindex

$m add command -label GameDeepest -accelerator "Ctrl+Shift+D" -command {
  sc_move ply [sc_eco game ply]
  updateBoard
}
bind $dot_w <Control-D> {sc_move ply [sc_eco game ply]; updateBoard}
set helpMessage($m,[incr menuindex]) GameDeepest

$m add command -label GameGotoMove -accelerator "Ctrl+U" -command ::game::GotoMoveNumber
set helpMessage($m,[incr menuindex]) GameGotoMove
bind $dot_w <Control-u> ::game::GotoMoveNumber

$m add command -label GameNovelty -accelerator "Ctrl+Shift+Y" -command findNovelty
bind $dot_w <Control-Y> findNovelty
set helpMessage($m,[incr menuindex]) GameNovelty


### Search menu:
set menuindex -1
set m .menu.search
$m  add command -label SearchReset -acc "Ctrl+F" -command ::search::filter::reset
bind $dot_w <Control-f> search::filter::reset
set helpMessage($m,[incr menuindex]) SearchReset

$m  add command -label SearchNegate -acc "Ctrl+Shift+F" -command ::search::filter::negate
bind $dot_w <Control-F> ::search::filter::negate
set helpMessage($m,[incr menuindex]) SearchNegate

$m  add separator
incr menuindex

$m  add command -label SearchCurrent -command ::search::board -accelerator "Ctrl+Shift+B"
bind $dot_w <Control-B> ::search::board
set helpMessage($m,[incr menuindex]) SearchCurrent

$m  add command -label SearchHeader -command ::search::header -accelerator "Ctrl+Shift+H"
bind $dot_w <Control-H> ::search::header
set helpMessage($m,[incr menuindex]) SearchHeader

$m  add command -label SearchMaterial -command ::search::material -accelerator "Ctrl+Shift+M"
bind $dot_w <Control-M> ::search::material
set helpMessage($m,[incr menuindex]) SearchMaterial

$m  add separator
incr menuindex

$m add command -label SearchUsing -accel "Ctrl+Shift+U" -command ::search::usefile
bind $dot_w <Control-KeyPress-U> ::search::usefile
set helpMessage($m,[incr menuindex]) SearchUsing

### Play menu:
set menuindex -1
set m .menu.play

$m add command -label ToolsSeriousGame -command ::sergame::config
set helpMessage($m,[incr menuindex]) ToolsSeriousGame
$m add command -label ToolsTacticalGame -command ::tacgame::config
set helpMessage($m,[incr menuindex]) ToolsTacticalGame
$m add command -label ToolsTrainFics -command ::fics::config
set helpMessage($m,[incr menuindex]) ToolsTrainFics
$m add command -label ToolsEngineTournament -command ::compInit
set helpMessage($m,[incr menuindex]) ToolsEngineTournament
$m add separator
incr menuindex

# sub-menu for training
menu $m.training
$m add cascade -label ToolsTraining -menu $m.training
set helpMessage($m,[incr menuindex]) ToolsTraining
$m.training add command -label ToolsTrainOpenings -command ::opening::config
set helpMessage($m.training,0) ToolsTrainOpenings
$m.training add command -label ToolsTrainTactics -command ::tactics::config
set helpMessage($m.training,1) ToolsTrainTactics
$m.training add command -label ToolsTrainReviewGame -command ::reviewgame::start
set helpMessage($m.training,2) ToolsTrainReviewGame
$m.training add command -label ToolsTrainCalvar -command ::calvar::config
set helpMessage($m.training,3) ToolsTrainCalvar
$m.training add checkbutton -label ToolsTrainFindBestMove -variable ::tactics::findBestMoveRunning -command ::tactics::findBestMoveStart
set helpMessage($m.training,4) ToolsTrainFindBestMove

$m add separator
incr menuindex

# Add support for Correspondence Chess by means of Xfcc and cmail
menu $m.correspondence
$m add cascade -label CorrespondenceChess -menu $m.correspondence
set helpMessage($m,[incr menuindex]) CorrespondenceChess

$m.correspondence add command -label CCConfigure   -command {::CorrespondenceChess::config}
set helpMessage($m.correspondence,0) CCConfigure
$m.correspondence add command -label CCConfigRelay   -command {::CorrespondenceChess::ConfigureRelay}
set helpMessage($m.correspondence,1) CCConfigRelay

$m.correspondence add separator
$m.correspondence add command -label CCOpenDB      -command {::CorrespondenceChess::OpenCorrespondenceDB; ::CorrespondenceChess::ReadInbox} \
    -accelerator "Ctrl+F12"
bind $dot_w <Control-F12> {::CorrespondenceChess::OpenCorrespondenceDB; ::CorrespondenceChess::ReadInbox}
set helpMessage($m.correspondence,3) CCOpenDB

$m.correspondence add separator
$m.correspondence add command -label CCRetrieve    -command { ::CorrespondenceChess::FetchGames }
set helpMessage($m.correspondence,5) CCRetrieve

$m.correspondence add command -label CCInbox       -command { ::CorrespondenceChess::ReadInbox }
set helpMessage($m.correspondence,6) CCInbox

$m.correspondence add separator
$m.correspondence add command -label CCSend        -command {::CorrespondenceChess::SendMove 0 0 0 0}
set helpMessage($m.correspondence,8) CCSend
$m.correspondence add command -label CCResign      -command {::CorrespondenceChess::SendMove 1 0 0 0}
set helpMessage($m.correspondence,9) CCResign
$m.correspondence add command -label CCClaimDraw   -command {::CorrespondenceChess::SendMove 0 1 0 0}
set helpMessage($m.correspondence,10) CCClaimDraw
$m.correspondence add command -label CCOfferDraw   -command {::CorrespondenceChess::SendMove 0 0 1 0}
set helpMessage($m.correspondence,11) CCOfferDraw
$m.correspondence add command -label CCAcceptDraw  -command {::CorrespondenceChess::SendMove 0 0 0 1}
set helpMessage($m.correspondence,12) CCAcceptDraw
$m.correspondence add command -label CCGamePage    -command {::CorrespondenceChess::CallWWWGame}
set helpMessage($m.correspondence,13) CCGamePage
$m.correspondence add separator
$m.correspondence add command -label CCNewMailGame -command {::CorrespondenceChess::newEMailGame}
set helpMessage($m.correspondence,15) CCNewMailGame
$m.correspondence add command -label CCMailMove    -command {::CorrespondenceChess::eMailMove}
set helpMessage($m.correspondence,16) CCMailMove


### Windows menu:
set menuindex -1
set m .menu.windows
$m  add checkbutton -label WindowsComment -var commentWin -command makeCommentWin -accelerator "Ctrl+E"

bind $dot_w <Control-e> makeCommentWin
set helpMessage($m,[incr menuindex]) WindowsComment

$m  add checkbutton -label WindowsGList \
    -variable ::windows::gamelist::isOpen -command ::windows::gamelist::Open  -accelerator "Ctrl+L"
bind $dot_w <Control-l> ::windows::gamelist::Open
set helpMessage($m,[incr menuindex]) WindowsGList

$m  add checkbutton -label WindowsPGN -variable pgnWin -command ::pgn::OpenClose  -accelerator "Ctrl+P"
bind $dot_w <Control-p> ::pgn::OpenClose
set helpMessage($m,[incr menuindex]) WindowsPGN

$m add checkbutton -label WindowsPList -variable plistWin -command ::plist::toggle -accelerator "Ctrl+Shift+P"
bind $dot_w <Control-P> ::plist::toggle
set helpMessage($m,[incr menuindex]) WindowsPList

$m add checkbutton -label WindowsTmt -variable tourneyWin -command ::tourney::toggle -accelerator "Ctrl+Shift+T"
bind $dot_w <Control-T> ::tourney::toggle
set helpMessage($m,[incr menuindex]) WindowsTmt

$m add separator
incr menuindex

$m add checkbutton -label WindowsSwitcher -variable baseWin -accelerator "Ctrl+D" -command ::windows::switcher::Open
set helpMessage($m,[incr menuindex]) WindowsSwitcher

$m add checkbutton -label WindowsMaint -accelerator "Ctrl+M" -variable maintWin -command ::maint::OpenClose
bind $dot_w <Control-m> ::maint::OpenClose
set helpMessage($m,[incr menuindex]) WindowsMaint

$m add separator
incr menuindex

$m add checkbutton -label WindowsECO -accelerator "Ctrl+Y" -variable ::windows::eco::isOpen -command {::windows::eco::OpenClose}
bind $dot_w <Control-y> ::windows::eco::OpenClose
set helpMessage($m,[incr menuindex]) WindowsECO

$m add checkbutton -label WindowsRepertoire -variable ::rep::Win -accelerator "Ctrl+Shift+R" -command ::rep::OpenCloseWindow
bind $dot_w <Control-R> ::rep::OpenCloseWindow
set helpMessage($m,[incr menuindex]) WindowsRepertoire

$m add checkbutton -label WindowsStats -variable ::windows::stats::isOpen -accelerator "Ctrl+I" -command ::windows::stats::Open
bind $dot_w <Control-i> ::windows::stats::Open
set helpMessage($m,[incr menuindex]) WindowsStats

$m add checkbutton -label WindowsTree -variable treeWin -command ::tree::make -accelerator "Ctrl+T"
bind $dot_w <Control-t> { .menu.windows invoke [tr WindowsTree] }
set helpMessage($m,[incr menuindex]) WindowsTree

$m add checkbutton -label WindowsTB -variable ::tb::isOpen -command ::tb::Open -accelerator "Ctrl+="
bind $dot_w <Control-equal> ::tb::Open
set helpMessage($m,[incr menuindex]) WindowsTB

$m add checkbutton -label WindowsBook -variable ::book::isOpen -command ::book::open -accelerator "F6"
set helpMessage($m,[incr menuindex]) WindowsBook
bind $dot_w <F6>  ::book::open

$m add checkbutton -label WindowsCorrChess -variable ::CorrespondenceChess::isOpen \
    -command ::CorrespondenceChess::CCWindow -accelerator "F12"
set helpMessage($m,[incr menuindex]) WindowsCorrChess
bind $dot_w <F12> ::CorrespondenceChess::CCWindow

### Tools menu:

set menuindex -1
set m .menu.tools
$m  add command -label ToolsAnalysis \
    -command makeAnalysisWin -accelerator "Ctrl+Shift+A"
bind $dot_w <Control-A> makeAnalysisWin
set helpMessage($m,[incr menuindex]) ToolsAnalysis

$m  add command -label ToolsAnalysis2 \
    -command "makeAnalysisWin 2" -accelerator "Ctrl+Shift+2"
bind $dot_w <Control-at> "makeAnalysisWin 2"
set helpMessage($m,[incr menuindex]) ToolsAnalysis2

#Add Menu for Start Engine 1 and Engine 2
$m  add checkbutton -label ToolsStartEngine1 -variable analysisWin1 \
    -command "makeAnalysisWin 1 0" -accelerator "F2"
bind $dot_w <F2> "makeAnalysisWin 1 0"
set helpMessage($m,[incr menuindex]) ToolsStartEngine1

$m  add checkbutton -label ToolsStartEngine2 -variable analysisWin2 \
    -command "makeAnalysisWin 2 0" -accelerator "F3"
bind $dot_w <F3> "makeAnalysisWin 2 0"
set helpMessage($m,[incr menuindex]) ToolsStartEngine2

$m add separator
incr menuindex

$m add command -label ToolsCross \
    -accelerator "Ctrl+Shift+X" -command crosstabWin
bind $dot_w <Control-X> crosstabWin
set helpMessage($m,[incr menuindex]) ToolsCross

$m add checkbutton -label ToolsEmail \
    -accelerator "Ctrl+Shift+E" -variable emailWin -command ::tools::email
bind $dot_w <Control-E> ::tools::email
set helpMessage($m,[incr menuindex]) ToolsEmail

$m add checkbutton -label ToolsFilterGraph \
    -accelerator "Ctrl+Shift+G" -variable filterGraph -command tools::graphs::filter::Open
bind $dot_w <Control-G> tools::graphs::filter::Open
set helpMessage($m,[incr menuindex]) ToolsFilterGraph

$m add checkbutton -label ToolsAbsFilterGraph \
    -accelerator "Ctrl+Shift+J" -variable absfilterGraph -command tools::graphs::absfilter::Open
bind $dot_w <Control-J> tools::graphs::absfilter::Open
set helpMessage($m,[incr menuindex]) ToolsAbsFilterGraph

$m add command -label ToolsOpReport \
    -accelerator "Ctrl+Shift+O" -command ::optable::makeReportWin
bind $dot_w <Control-O> ::optable::makeReportWin
set helpMessage($m,[incr menuindex]) ToolsOpReport

$m add command -label ToolsTracker \
    -accelerator "Ctrl+Shift+K" -command ::ptrack::make
bind $dot_w <Control-K> ::ptrack::make
set helpMessage($m,[incr menuindex]) ToolsTracker

# book tuning
$m add command -label ToolsBookTuning -command ::book::tuning
set helpMessage($m,[incr menuindex]) ToolsBookTuning

# Connect Hardware
menu $m.hardware
$m add cascade -label ToolsConnectHardware -menu $m.hardware
set helpMessage($m,[incr menuindex]) ToolsConnectHardware
$m.hardware add command -label ToolsConnectHardwareConfigure -command ::ExtHardware::config
set helpMessage($m.hardware,0) ToolsConnectHardwareConfigure
$m.hardware add command -label ToolsConnectHardwareInputEngineConnect -command ::inputengine::connectdisconnect
set helpMessage($m.hardware,1) ToolsConnectHardwareInputEngineConnect
$m.hardware add command -label ToolsConnectHardwareNovagCitrineConnect -command ::novag::connect
set helpMessage($m.hardware,2) ToolsConnectHardwareNovagCitrineConnect

$m add separator
incr menuindex

menu $m.pinfo
$m add cascade -label ToolsPInfo -menu $m.pinfo
set helpMessage($m,[incr menuindex]) ToolsPInfo
$m.pinfo add command -label White -underline 0 -command {
  ::pinfo::playerInfo [sc_game info white]
}
$m.pinfo add command -label Black -underline 0 -command {
  ::pinfo::playerInfo [sc_game info black]
}

$m add command -label ToolsPlayerReport -command ::preport::preportDlg -state disabled
set helpMessage($m,[incr menuindex]) ToolsPlayerReport

$m add command -label ToolsRating -command {::tools::graphs::rating::Refresh both}
# bind $dot_w <Control-R> {::tools::graphs::rating::Refresh both}
set helpMessage($m,[incr menuindex]) ToolsRating

$m add command -label ToolsScore -command ::tools::graphs::score::Refresh ;# -accelerator "Ctrl+Shift+Z"
# bind $dot_w <Control-Z> ::tools::graphs::score::Refresh
set helpMessage($m,[incr menuindex]) ToolsScore

$m add separator
incr menuindex

menu $m.exportcurrent

$m add cascade -label ToolsExpCurrent -menu $m.exportcurrent
set helpMessage($m,[incr menuindex]) ToolsExpCurrent

$m.exportcurrent add command -label ToolsExpCurrentPGN \
    -command {exportGames current PGN}
set helpMessage($m.exportcurrent,0) ToolsExpCurrentPGN

$m.exportcurrent add command -label ToolsExpCurrentHTML \
    -command {exportGames current HTML}
set helpMessage($m.exportcurrent,1) ToolsExpCurrentHTML

$m.exportcurrent add command -label ToolsExpCurrentHTMLJS \
    -command {::html::exportCurrentGame}
set helpMessage($m.exportcurrent,2) ToolsExpCurrentHTMLJS

$m.exportcurrent add command -label ToolsExpCurrentLaTeX \
    -command {exportGames current LaTeX}
set helpMessage($m.exportcurrent,3) ToolsExpCurrentLaTeX

menu $m.exportfilter

$m add cascade -label ToolsExpFilter -menu $m.exportfilter
set helpMessage($m,[incr menuindex]) ToolsExpFilter

$m.exportfilter add command -label ToolsExpFilterPGN \
    -command {exportGames filter PGN}
set helpMessage($m.exportfilter,0) ToolsExpFilterPGN

$m.exportfilter add command -label ToolsExpFilterHTML \
    -command {exportGames filter HTML}
set helpMessage($m.exportfilter,1) ToolsExpFilterHTML

$m.exportfilter add command -label ToolsExpFilterHTMLJS \
    -command {::html::exportCurrentFilter}
set helpMessage($m.exportfilter,2) ToolsExpFilterHTMLJS

$m.exportfilter add command -label ToolsExpFilterLaTeX \
    -command {exportGames filter LaTeX}
set helpMessage($m.exportfilter,3) ToolsExpFilterLaTeX

$m add separator
incr menuindex

$m add command -label ToolsImportOne \
    -accelerator "Ctrl+Shift+I" -command importPgnGame
bind $dot_w <Control-I> importPgnGame
set helpMessage($m,[incr menuindex]) ToolsImportOne

$m add command -label ToolsImportFile -command importPgnFile
set helpMessage($m,[incr menuindex]) ToolsImportFile

$m add separator
incr menuindex

#### needs to be fixed (at least for Linux)
$m add command -label ToolsCaptureBoard \
     -command { boardToFile "" "" }
set helpMessage($m,[incr menuindex]) ToolsCaptureBoard

### Options menu:

set m .menu.options
set optMenus {board export fonts ginfo language entry numbers startup windows theme}
set optLabels {Board Export Fonts GInfo Language Moves Numbers Startup Windows Theme}
set menuindex -1
foreach menu $optMenus label $optLabels {
  $m add cascade -label Options$label -menu $m.$menu
  set helpMessage($m,[incr menuindex]) Options$label
}

$m add command -label OptionsSounds -command ::utils::sound::OptionsDialog
set helpMessage($m,[incr menuindex]) OptionsSounds

$m add command -label OptionsToolbar -command configToolbar
set helpMessage($m,[incr menuindex]) OptionsToolbar

$m add separator
incr menuindex

$m add command -label OptionsECO -command {
  set ftype { { "Scid ECO files" {".eco"} } }
  if {[sc_info gzip]} {
    set ftype { { "Scid ECO files" {".eco" ".eco.gz"} } }
  }
  set fullname [tk_getOpenFile -initialdir [pwd] -filetypes $ftype -title "Load ECO file"]
  if {[string compare $fullname ""]} {
    if {[catch {sc_eco read $fullname} result]} {
      tk_messageBox -title "Scid" -type ok \
          -icon warning -message $result
    } else {
      set ecoFile $fullname
      tk_messageBox -title "Scid: ECO file loaded." -type ok -icon info \
          -message "ECO file $fullname loaded: $result positions.\n\nTo have this file automatically loaded when you start Scid, select \"Save Options\" from the Options menu before exiting."
    }
  }
}
set helpMessage($m,[incr menuindex]) OptionsECO

$m add command -label OptionsSpell -command readSpellCheckFile
set helpMessage($m,[incr menuindex]) OptionsSpell

$m add command -label OptionsTable -command setTableBaseDir
set helpMessage($m,[incr menuindex]) OptionsTable
if {![sc_info tb]} { $m entryconfigure 15 -state disabled }

# setTableBaseDir:
#    Prompt user to select a tablebase file; all the files in its
#    directory will be used.
#
proc setTableBaseDir {} {
  global initialDir tempDir
  set ftype { { "Tablebase files" {".emd" ".nbw" ".nbb"} } }
  
  set w .tbDialog
  toplevel $w
  ::setTitle $w Scid
  label $w.title -text "Select up to 4 table base directories:"
  pack $w.title -side top
  foreach i {1 2 3 4} {
    set tempDir(tablebase$i) $initialDir(tablebase$i)
    pack [frame $w.f$i] -side top -pady 3 -fill x -expand yes
    entry $w.f$i.e -width 30 -textvariable tempDir(tablebase$i)
    bindFocusColors $w.f$i.e
    button $w.f$i.b -text "..." -pady 2 -command [list chooseTableBaseDir $i]
    pack $w.f$i.b -side right -padx 2
    pack $w.f$i.e -side left -padx 2 -fill x -expand yes
  }
  addHorizontalRule $w
  pack [frame $w.b] -side top -fill x
  button $w.b.ok -text "OK" \
      -command "catch {grab release $w; destroy $w}; openTableBaseDirs"
  button $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w; destroy $w}"
  pack $w.b.cancel $w.b.ok -side right -padx 2
  bind $w <Escape> "$w.b.cancel invoke"
  wm resizable $w 1 0
  grab $w
}

proc openTableBaseDirs {} {
  global initialDir tempDir
  set tableBaseDirs ""
  foreach i {1 2 3 4} {
    set tbDir [string trim $tempDir(tablebase$i)]
    if {$tbDir != ""} {
      if {$tableBaseDirs != ""} { append tableBaseDirs ";" }
      append tableBaseDirs [file nativename $tbDir]
    }
  }
  
  set npieces [sc_info tb $tableBaseDirs]
  foreach i {1 2 3 4} {
    set initialDir(tablebase$i) $tempDir(tablebase$i)
  }
  if {$npieces == 0} {
    set msg "No tablebases were found."
  } else {
    set msg "Tablebases with up to $npieces pieces were found.\n\n"
    append msg "If you want these tablebases be used whenever\n"
    append msg "you start Scid, select \"Save Options\" from the\n"
    append msg "Options menu before you exit Scid."
  }
  tk_messageBox -type ok -icon info -title "Scid: Tablebase results" \
      -message $msg
  
}
proc chooseTableBaseDir {i} {
  global tempDir

  set idir $tempDir(tablebase$i)
  if {$idir == ""} { set idir [pwd] }
  
  set fullname [tk_chooseDirectory -initialdir $idir -mustexist 1 \
      -title "Scid: Select a Tablebase directory"]
  if {$fullname == ""} { return }
  
  set tempDir(tablebase$i) $fullname
}

$m add command -label OptionsRecent -command ::recentFiles::configure
set helpMessage($m,[incr menuindex]) OptionsRecent

$m add command -label OptionsBooksDir -command setBooksDir
set helpMessage($m,[incr menuindex]) OptionsBooksDir

$m add command -label OptionsTacticsBasesDir -command setTacticsBasesDir
set helpMessage($m,[incr menuindex]) OptionsTacticsBasesDir

proc setBooksDir {} {
  global scidBooksDir
  set dir [tk_chooseDirectory -initialdir $scidBooksDir -mustexist 1]
  if {$dir == ""} {
    return
  } else {
    set scidBooksDir $dir
  }
}

proc setTacticsBasesDir {} {
  global scidBasesDir
  set dir [tk_chooseDirectory -initialdir $scidBasesDir -mustexist 1]
  if {$dir == ""} {
    return
  } else {
    set scidBasesDir $dir
  }
}

proc options.save {varname} {
  if {![info exist ::autosave_opt] || [lsearch -exact $::autosave_opt $varname] == -1} {
    lappend ::autosave_opt $varname
  }
}

proc options.save_cancel {varname} {
  set idx [lsearch -exact $::autosave_opt $varname]
  if {$idx != -1} {
    set ::autosave_opt [lreplace $::autosave_opt $idx $idx]
  }
}

$m add separator
incr menuindex

$m add command -label OptionsSave -command {
  set optionF ""
  if {[catch {open [scidConfigFile options] w} optionF]} {
    tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
        -message "Unable to write options file: [scidConfigFile options]\n$optionF"
  } else {
    puts $optionF "# Scid options file"
    puts $optionF "# Version: $scidVersion"
    puts $optionF "# This file contains commands in the Tcl language format."
    puts $optionF "# If you edit this file, you must preserve valid its Tcl"
    puts $optionF "# format or it will not set your Scid options properly."
    puts $optionF ""
    foreach i {boardSize boardStyle language ::pgn::showColor \
          ::pgn::indentVars ::pgn::indentComments \
          ::pgn::shortHeader ::pgn::boldMainLine ::pgn::stripMarks \
          ::pgn::symbolicNags ::pgn::moveNumberSpaces ::pgn::columnFormat myPlayerNames \
          tree(order) tree(autoSave) optionsAutoSave ::tree::mask::recentMask \
          ecoFile suggestMoves showVarPopup showVarArrows glistSize glexport \
          blunderThreshold autoplayDelay animateDelay boardCoords boardSTM \
          moveEntry(AutoExpand) moveEntry(Coord) \
          translatePieces arrowLastMove highlightLastMove highlightLastMoveWidth highlightLastMoveColor \
          askToReplaceMoves ::windows::switcher::vertical locale(numeric) \
          spellCheckFile autoRaise autoIconify windowsDock showGameInfo autoLoadLayout \
          exportFlags(comments) exportFlags(vars) \
          exportFlags(indentc) exportFlags(indentv) \
          exportFlags(column) exportFlags(symbols) \
          exportFlags(htmldiag) exportFlags(convertNullMoves) \
          email(smtp) email(smproc) email(server) \
          email(from) email(bcc) \
          gameInfo(photos) gameInfo(hideNextMove) gameInfo(wrap) \
          gameInfo(fullComment) gameInfo(showMarks) \
          gameInfo(showMaterial) gameInfo(showFEN) gameInfo(showTB) \
          engineCoach1 engineCoach2 scidBooksDir scidBasesDir ::book::lastBook \
          ::utils::sound::soundFolder ::utils::sound::announceNew \
          ::utils::sound::announceForward ::utils::sound::announceBack \
          ::tacgame::threshold ::tacgame::blunderwarning ::tacgame::blunderwarningvalue \
          ::tacgame::levelMin  ::tacgame::levelMax  ::tacgame::levelFixed ::tacgame::randomLevel \
          ::tacgame::isLimitedAnalysisTime ::tacgame::showblunder ::tacgame::showblundervalue \
          ::tacgame::showblunderfound ::tacgame::showmovevalue ::tacgame::showevaluation \
          ::tacgame::isLimitedAnalysisTime ::tacgame::analysisTime ::tacgame::openingType ::tacgame::chosenOpening \
          ::sergame::chosenOpening ::sergame::chosenEngine ::sergame::useBook ::sergame::bookToUse \
          ::sergame::startFromCurrent ::sergame::coachIsWatching ::sergame::timeMode \
          ::sergame::depth ::sergame::movetime ::sergame::nodes ::sergame::ponder ::sergame::isOpening \
          ::uci::uciInfo(wtime3) ::uci::uciInfo(winc3) ::uci::uciInfo(btime3) ::uci::uciInfo(binc3) \
			 ::commenteditor::showboard \
          boardfile_lite boardfile_dark \
          FilterMaxMoves FilterMinMoves FilterStepMoves FilterMaxElo FilterMinElo FilterStepElo \
          FilterMaxYear FilterMinYear FilterStepYear FilterGuessELO lookTheme autoResizeBoard } {
      puts $optionF "set $i [list [set $i]]"
    }
    
    puts $optionF ""
    foreach i [lsort [array names winWidth]] {
      puts $optionF "set winWidth($i)  [expr $winWidth($i)]"
      puts $optionF "set winHeight($i) [expr $winHeight($i)]"
    }
    puts $optionF ""
    foreach i [lsort [array names winX]] {
      puts $optionF "set winX($i)  [expr $winX($i)]"
      puts $optionF "set winY($i)  [expr $winY($i)]"
    }
    puts $optionF ""
    foreach i [lsort [array names winWidth_docked]] {
      puts $optionF "set winWidth_docked($i)  [expr $winWidth_docked($i)]"
      puts $optionF "set winHeight_docked($i) [expr $winHeight_docked($i)]"
    }
    puts $optionF ""
    foreach i [lsort [array names winX_docked]] {
      puts $optionF "set winX_docked($i)  [expr $winX_docked($i)]"
      puts $optionF "set winY_docked($i)  [expr $winY_docked($i)]"
    }
    puts $optionF ""
    puts $optionF "set analysisCommand [list $analysisCommand]"
    puts $optionF "set analysisChoices [list $analysisChoices]"
    puts $optionF ""
    foreach i {lite dark whitecolor blackcolor highcolor bestcolor \
          whiteborder blackborder borderwidth \
          pgnColor(Header) pgnColor(Main) pgnColor(Var) \
          pgnColor(Nag) pgnColor(Comment) pgnColor(Background) \
          pgnColor(Current) } {
      puts $optionF "set $i [list [set $i]]"
    }
    puts $optionF ""
    foreach i [lsort [array names optable]] {
      puts $optionF "set optable($i) [list $optable($i)]"
    }
    foreach i [lsort [array names ::windows::stats::display]] {
      puts $optionF "set ::windows::stats::display($i) [list $::windows::stats::display($i)]"
    }
    foreach i [lsort [array names startup]] {
      puts $optionF "set startup($i) [list $startup($i)]"
    }
    foreach i [lsort [array names toolbar]] {
      puts $optionF "set toolbar($i) [list $toolbar($i)]"
    }
    foreach i [lsort [array names twinSettings]] {
      puts $optionF "set twinSettings($i) [list $twinSettings($i)]"
    }
    puts $optionF ""
    foreach i {Regular Menu Small Tiny Fixed} {
      puts $optionF "set fontOptions($i) [list $fontOptions($i)]"
    }
    puts $optionF ""
    foreach type {base book html tex epd stm pgn report tablebase1 tablebase2 tablebase3 tablebase4} {
      puts $optionF "set initialDir($type) [list $initialDir($type)]"
    }
    puts $optionF ""
    foreach type {PGN HTML LaTeX} {
      puts $optionF "set exportStartFile($type) [list $exportStartFile($type)]"
      puts $optionF "set exportEndFile($type) [list $exportEndFile($type)]"
    }
    puts $optionF ""
    foreach i [lsort [array names informant]] {
      puts $optionF "set informant($i) [list $informant($i)]"
    }
    puts $optionF ""
    
    # save FICS config
    foreach i { use_timeseal timeseal_exec port_fics port_timeseal login password usedefaultvars premoveEnabled \
          consolebg consolefg consoleheight consolewidth colseeking colgame colgameresult colficspercent server_ip } {
      puts $optionF "set ::fics::$i [list [set ::fics::$i]]"
    }
    foreach i [lsort [array names ::fics::profileVars]] {
      puts $optionF "set ::fics::profileVars($i) [list $::fics::profileVars($i)]"
    }

    # save pinfo config
    foreach i { wikipurl dnburl SeeAlsoPND2WP wikipAPI} {
      puts $optionF "set ::pinfo::$i [list [set ::pinfo::$i]]"
    }
    
    # save NOVAG config
    foreach i { referee } {
      puts $optionF "set ::novag::$i [list [set ::novag::$i]]"
    }
    
    # Save layouts
    foreach slot {1 2 3} {
      puts $optionF "set ::docking::layout_list($slot) [list $::docking::layout_list($slot)]"
    }
    
    # Save tactics (find best move history)
    foreach i [lsort [array names ::tactics::findBestMove_History]] {
        puts $optionF "set ::tactics::findBestMove_History($i) [list $::tactics::findBestMove_History($i)]"
    }

    # Save var that was added with options.save()
    if {[info exist ::autosave_opt]} {
      puts $optionF ""
      puts $optionF "set ::autosave_opt [list $::autosave_opt]"
      foreach {var} $::autosave_opt {
        upvar #0 $var a
        puts $optionF "set $var [list $a]"
      }
    }
    
    close $optionF
    set ::statusBar "Options were saved to: [scidConfigFile options]"
  }
}
set helpMessage($m,[incr menuindex]) OptionsSave

$m add checkbutton -label OptionsAutoSave -variable optionsAutoSave
set helpMessage($m,[incr menuindex]) OptionsAutoSave

menu $m.ginfo
$m.ginfo add checkbutton -label GInfoHideNext \
    -variable gameInfo(hideNextMove) -offvalue 0 -onvalue 1 -command updateBoard
$m.ginfo add checkbutton -label GInfoMaterial \
    -variable gameInfo(showMaterial) -offvalue 0 -onvalue 1 -command toggleShowMaterial
$m.ginfo add checkbutton -label GInfoFEN \
    -variable gameInfo(showFEN) -offvalue 0 -onvalue 1 -command updateBoard
$m.ginfo add checkbutton -label GInfoMarks \
    -variable gameInfo(showMarks) -offvalue 0 -onvalue 1 -command updateBoard
$m.ginfo add checkbutton -label GInfoWrap \
    -variable gameInfo(wrap) -offvalue 0 -onvalue 1 -command updateBoard
$m.ginfo add checkbutton -label GInfoFullComment \
    -variable gameInfo(fullComment) -offvalue 0 -onvalue 1 -command updateBoard
$m.ginfo add checkbutton -label GInfoPhotos \
    -variable gameInfo(photos) -offvalue 0 -onvalue 1 \
    -command {updatePlayerPhotos -force}
$m.ginfo add separator
$m.ginfo add radiobutton -label GInfoTBNothing \
    -variable gameInfo(showTB) -value 0 -command updateBoard
$m.ginfo add radiobutton -label GInfoTBResult \
    -variable gameInfo(showTB) -value 1 -command updateBoard
$m.ginfo add radiobutton -label GInfoTBAll \
    -variable gameInfo(showTB) -value 2 -command updateBoard
$m.ginfo add separator
$m.ginfo add command -label GInfoInformant -command configInformant

menu $m.entry
$m.entry add checkbutton -label OptionsMovesAsk \
    -variable askToReplaceMoves -offvalue 0 -onvalue 1
set helpMessage($m.entry,0) OptionsMovesAsk \
    
$m.entry add cascade -label OptionsMovesAnimate -menu $m.entry.animate
menu $m.entry.animate
foreach i {0 100 150 200 250 300 400 500 600 800 1000} {
  $m.entry.animate add radiobutton -label "$i ms" \
      -variable animateDelay -value $i
}
set helpMessage($m.entry,1) OptionsMovesAnimate

$m.entry add command -label OptionsMovesDelay -command setAutoplayDelay
set helpMessage($m.entry,2) OptionsMovesDelay

$m.entry add checkbutton -label OptionsMovesCoord \
    -variable moveEntry(Coord) -offvalue 0 -onvalue 1
set helpMessage($m.entry,3) OptionsMovesCoord

$m.entry add checkbutton -label OptionsMovesKey \
    -variable moveEntry(AutoExpand) -offvalue 0 -onvalue 1
set helpMessage($m.entry,4) OptionsMovesKey

$m.entry add checkbutton -label OptionsMovesSuggest \
    -variable suggestMoves -offvalue 0 -onvalue 1
set helpMessage($m.entry,5) OptionsMovesSuggest

$m.entry add checkbutton -label OptionsShowVarPopup \
    -variable showVarPopup -offvalue 0 -onvalue 1
set helpMessage($m.entry,6) OptionsShowVarPopup

$m.entry add checkbutton -label OptionsMovesSpace \
    -variable ::pgn::moveNumberSpaces -offvalue 0 -onvalue 1
set helpMessage($m.entry,7) OptionsMovesSpace

$m.entry add checkbutton -label OptionsMovesTranslatePieces \
    -variable ::translatePieces -offvalue 0 -onvalue 1 -command setLanguage
set helpMessage($m.entry,8) OptionsMovesTranslatePieces

menu $m.entry.highlightlastmove
$m.entry add cascade -label OptionsMovesHighlightLastMove -menu  $m.entry.highlightlastmove
$m.entry.highlightlastmove add checkbutton -label OptionsMovesHighlightLastMoveDisplay -variable ::highlightLastMove -command updateBoard
set helpMessage($m.entry.highlightlastmove,0) OptionsMovesHighlightLastMoveDisplay
menu $m.entry.highlightlastmove.width
$m.entry.highlightlastmove add cascade -label OptionsMovesHighlightLastMoveWidth -menu $m.entry.highlightlastmove.width
set helpMessage($m.entry.highlightlastmove,1) OptionsMovesHighlightLastMoveWidth
foreach i {1 2 3 4 5} {
  $m.entry.highlightlastmove.width add radiobutton -label $i -value $i -variable ::highlightLastMoveWidth -command updateBoard
}
# menu $m.entry.highlightlastmove.pattern
# $m.entry.highlightlastmove add cascade -label OptionsMovesHighlightLastMovePattern -menu $m.entry.highlightlastmove.pattern
# foreach i {"plain" "." "-" "-." "-.." ". " "," ".  "} j { "" "." "-" "-." "-.." ". " "," ".  "} {
# $m.entry.highlightlastmove.pattern add radiobutton -label $i -value $j -variable ::highlightLastMovePattern -command updateBoard
# }
$m.entry.highlightlastmove add command -label OptionsMovesHighlightLastMoveColor -command {
  set col [ tk_chooseColor -initialcolor $::highlightLastMoveColor -title "Scid"]
  if { $col != "" } {
    set ::highlightLastMoveColor $col
    updateBoard
  }
}
set helpMessage($m.entry.highlightlastmove,2) OptionsMovesHighlightLastMoveColor
$m.entry.highlightlastmove add checkbutton -label OptionsMovesHighlightLastMoveArrow -variable ::arrowLastMove -command updateBoard
set helpMessage($m.entry.highlightlastmove,3) OptionsMovesHighlightLastMoveArrow
set helpMessage($m.entry,9) OptionsMovesHighlightLastMove

$m.entry add checkbutton -label OptionsMovesShowVarArrows \
    -variable showVarArrows -offvalue 0 -onvalue 1
set helpMessage($m.entry,10) OptionsMovesShowVarArrows

proc updateLocale {} {
  global locale
  sc_info decimal $locale(numeric)
  ::windows::gamelist::Refresh
  updateTitle
}

set m .menu.options.numbers
menu $m
foreach numeric {".,"   ". "   "."   ",."   ", "   ","} \
    underline {  0     1      2     4      5      6} {
      set decimal [string index $numeric 0]
      set thousands [string index $numeric 1]
      $m add radiobutton -label "12${thousands}345${decimal}67" \
      -underline $underline \
      -variable locale(numeric) -value $numeric -command updateLocale
    }

set m .menu.options.export
menu $m
foreach format {PGN HTML LaTeX} {
  $m add command -label "$format file text" -underline 0 \
      -command "setExportText $format"
}

set m .menu.options.windows
menu $m
$m add checkbutton -label OptionsWindowsIconify -variable autoIconify
set helpMessage($m,0) OptionsWindowsIconify
$m add checkbutton -label OptionsWindowsRaise -variable autoRaise
set helpMessage($m,1) OptionsWindowsRaise
$m add checkbutton -label OptionsWindowsDock -variable windowsDock
set helpMessage($m,2) OptionsWindowsDock
$m add checkbutton -label OptionsWindowsShowGameInfo -variable showGameInfo -command ::toggleGameInfo
set helpMessage($m,3) OptionsShowGameInfo

if { $::docking::USE_DOCKING } {
  set state "normal"
} else  {
  set state "disabled"
}
$m add checkbutton -label OptionsWindowsAutoLoadLayout -variable autoLoadLayout -state $state
set helpMessage($m,4) OptionsWindowsAutoLoadLayout

if {$::docking::USE_DOCKING} {
  menu $m.savelayout
  menu $m.restorelayout
  foreach i {"1 (default)" "2" "3"} slot {1 2 3} {
    $m.savelayout add command -label $i -command "::docking::layout_save $slot"
    $m.restorelayout add command -label $i -command "::docking::layout_restore $slot"
  }
  $m add cascade -label OptionsWindowsSaveLayout -menu $m.savelayout
  set helpMessage($m,5) OptionsWindowsSaveLayout
  $m add cascade -label OptionsWindowsRestoreLayout -menu $m.restorelayout
  set helpMessage($m,6) OptionsWindowsRestoreLayout
}

set m .menu.options.theme
menu $m
foreach i [ttk::style theme names] {
  $m add radiobutton -label "$i" -value $i -variable ::lookTheme -command {ttk::style theme use $::lookTheme}
}

menu .menu.options.language

set m .menu.options.fonts
menu $m

$m add command -label OptionsFontsRegular -underline 0 -command {
  set fontOptions(temp) [FontDialog font_Regular $fontOptions(Regular)]
  if {$fontOptions(temp) != ""} { set fontOptions(Regular) $fontOptions(temp) }
  set font [font configure font_Regular -family]
  set fontsize [font configure font_Regular -size]
  font configure font_Bold -family $font -size $fontsize
  font configure font_Italic -family $font -size $fontsize
  font configure font_BoldItalic -family $font -size $fontsize
  font configure font_H1 -family $font -size [expr {$fontsize + 8} ]
  font configure font_H2 -family $font -size [expr {$fontsize + 6} ]
  font configure font_H3 -family $font -size [expr {$fontsize + 4} ]
  font configure font_H4 -family $font -size [expr {$fontsize + 2} ]
  font configure font_H5 -family $font -size [expr {$fontsize + 0} ]
}
set helpMessage($m,0) OptionsFontsRegular

$m add command -label OptionsFontsMenu -underline 0 -command {
  set fontOptions(temp) [FontDialog font_Menu $fontOptions(Menu)]
  if {$fontOptions(temp) != ""} { set fontOptions(Menu) $fontOptions(temp) }
}
set helpMessage($m,1) OptionsFontsMenu

$m add command -label OptionsFontsSmall -underline 0 -command {
  set fontOptions(temp) [FontDialog font_Small $fontOptions(Small)]
  if {$fontOptions(temp) != ""} { set fontOptions(Small) $fontOptions(temp) }
  set font [font configure font_Small -family]
  set fontsize [font configure font_Small -size]
  font configure font_SmallBold -family $font -size $fontsize
  font configure font_SmallItalic -family $font -size $fontsize
}
set helpMessage($m,2) OptionsFontsSmall

$m add command -label OptionsFontsTiny -underline 0 -command {
  set fontOptions(temp) [FontDialog font_Tiny $fontOptions(Tiny) 1]
  if {$fontOptions(temp) != ""} { set fontOptions(Tiny) $fontOptions(temp) }
}
set helpMessage($m,3) OptionsFontsTiny

$m add command -label OptionsFontsFixed -underline 0 -command {
  set fontOptions(temp) [FontDialog font_Fixed $fontOptions(Fixed) 1]
  if {$fontOptions(temp) != ""} { set fontOptions(Fixed) $fontOptions(temp) }
}
set helpMessage($m,4) OptionsFontsFixed

# The windows that are not dockable are always configurable for auto start
set m .menu.options.startup
menu $m
if { $::docking::USE_DOCKING } {
  set state "disabled"
} else  {
  set state "normal"
}
$m add checkbutton -label HelpTip -variable startup(tip)
$m add checkbutton -label ToolsCross -variable startup(crosstable)
$m add checkbutton -label WindowsSwitcher -variable startup(switcher) -state $state
$m add checkbutton -label FileFinder -variable startup(finder)
$m add checkbutton -label WindowsGList -variable startup(gamelist) -state $state
$m add checkbutton -label WindowsPGN -variable startup(pgn) -state $state
$m add checkbutton -label WindowsStats -variable startup(stats)
$m add checkbutton -label WindowsTree -variable startup(tree) -state $state
$m add checkbutton -label WindowsBook -variable startup(book) -state $state

set m .menu.options.board
menu $m

# Menu for changing board size:
$m add cascade -label OptionsBoardSize -menu $m.bdsize
set helpMessage($m,0) OptionsBoardSize

$m add cascade -label OptionsBoardPieces -menu $m.pieces
set helpMessage($m,1) OptionsBoardPieces

$m add command -label OptionsBoardColors -command chooseBoardColors
set helpMessage($m,2) OptionsBoardColors

#Klimmek: Menu for selecting chessboard textures
# $m add command -label OptionsBoardGraphics -command chooseBoardTextures
# set helpMessage($m,3) OptionsBoardGraphics

$m add separator

$m add command -label OptionsBoardNames -command editMyPlayerNames
set helpMessage($m,4) OptionsBoardNames

menu $m.bdsize
set count 0

foreach i $boardSizes {
  incr count
  set underline -1
  if {$count < 10} {set underline 0}
  if {$count == 10} {set underline 1}
  # PG : dirty workaround !
  $m.bdsize add radio -label $count -variable boardSize -value $i -underline $underline -command "::board::resize2 .main.board $i "
  unset underline
}

# Shortcut keys for changing board size:

bind $dot_w <Control-Shift-Left>  decreaseBoardSize
bind $dot_w <Control-Shift-Right> increaseBoardSize

proc decreaseBoardSize {} {
  global boardSize
  set boardSize [::board::resize2 .main.board -1]
}

proc increaseBoardSize {} {
  global boardSize
  set boardSize [::board::resize2 .main.board +1]
}

# Menu for changing Piece set:
menu $m.pieces -tearoff 1
foreach i $boardStyles {
  $m.pieces add radio -label $i \
      -variable boardStyle -value $i \
      -underline 0 -command "setPieceFont $i"
}

### Help menu:
set menuindex -1
set m .menu.helpmenu
# On Mac use accelerator "Command-?" for Help:
if { $macOS } {
  $m add command -label HelpContents -command {helpWindow Contents} -accelerator "Command-?"
  
} else {
  $m add command -label HelpContents -command {helpWindow Contents} -accelerator "F1"
}
set helpMessage($m,[incr menuindex]) HelpContents
$m add command -label HelpIndex -command {helpWindow Index}
set helpMessage($m,[incr menuindex]) HelpIndex
$m add command -label HelpGuide -command {helpWindow Guide}
set helpMessage($m,[incr menuindex]) HelpGuide
$m add command -label HelpHints -command {helpWindow Hints}
set helpMessage($m,[incr menuindex]) HelpHints
$m add command -label HelpContact -command {helpWindow Author}
set helpMessage($m,[incr menuindex]) HelpContact
$m add separator
incr menuindex
$m add command -label HelpTip -command ::tip::show
set helpMessage($m,[incr menuindex]) HelpTip

$m add separator
incr menuindex

$m  add command -label HelpAbout -command helpAbout
set helpMessage($m,[incr menuindex]) HelpAbout

bind $dot_w <F1> {helpWindow Contents}

##################################################

# updateMenuStates:
#   Update all the menus, rechecking which state each item should be in.
#
proc updateMenuStates {} {
  global totalBaseSlots windowsOS
  set ::currentSlot [sc_base current]
  set lang $::language
  set m .menu
  for {set i 1} { $i <= $totalBaseSlots } { incr i } {
    set fname [file tail [sc_base filename $i]]
    $m.file.switch entryconfig [expr {$i - 1} ] -label "Base $i: $fname"
  }
  foreach i {Compact Delete} {
    $m.file.utils entryconfig [tr FileMaint$i] -state disabled
  }
  foreach i {Player Event Site Round} {
    $m.file.utils.name entryconfig [tr FileMaintName$i] -state disabled
  }
  
  $m.file entryconfig [tr FileReadOnly] -state disabled
  
  # update recent Tree list (open base as Tree)
  set ntreerecent [::recentFiles::treeshow .menu.file.recenttrees]
  
  # Remove and reinsert the Recent files list and Exit command:
  set idx 13
  $m.file delete $idx end
  set nrecent [::recentFiles::show $m.file]
  if {$nrecent > 0} {
    $m.file add separator
  }
  set idx [$m.file index end]
  incr idx
  $m.file add command -label [tr FileExit] -accelerator "Ctrl+Q" \
      -command ::file::Exit
  set helpMessage($m.file,$idx) FileExit
  
  # Configure File menu entry states::
  if {[sc_base inUse]} {
    set isReadOnly [sc_base isReadOnly]
    $m.file entryconfig [tr FileClose] -state normal
    if {! $isReadOnly} {
      $m.file.utils entryconfig [tr FileMaintDelete] -state normal
      $m.file.utils entryconfig [tr FileMaintName] -state normal
      foreach i {Player Event Site Round} {
        $m.file.utils.name entryconfig [tr FileMaintName$i] -state normal
      }
      $m.file entryconfig [tr FileReadOnly] -state normal
    }
    
    # Load first/last/random/game number buttons:
    set filtercount [sc_filter count]
    if {$filtercount == 0} {set state disabled} else {set state normal}
    $m.game entryconfig [tr GameFirst] -state $state
    $m.game entryconfig [tr GameLast] -state $state
    $m.game entryconfig [tr GameRandom] -state $state
    $m.game entryconfig [tr GameNumber] -state $state
    
    # Load previous button:
    if {[sc_filter previous]} {set state normal} else {set state disabled}
    $m.game entryconfig [tr GamePrev] -state $state
    .main.tb.gprev configure -state $state
    
    # Reload button:
    if {[sc_game number]} {set state normal} else {set state disabled}
    $m.game entryconfig [tr GameReload] -state $state
    
    # Load next button:
    if {[sc_filter next]} {set state normal} else {set state disabled}
    $m.game entryconfig [tr GameNext] -state $state
    .main.tb.gnext configure -state $state
    
    # Save add button:
    set state normal
    if {$isReadOnly  ||  $::trialMode} {set state disabled}
    $m.game entryconfig [tr GameAdd] -state $state
    
    # Save replace button:
    set state normal
    if {[sc_game number] == 0  ||  $isReadOnly  ||  $::trialMode} {
      set state disabled
    }
    $m.game entryconfig [tr GameReplace] -state $state
    
    # Searching:
    foreach i {Reset Negate} {
      $m.search entryconfig [tr Search$i] -state normal
    }
    #$m.windows entryconfig [tr WindowsTree] -state normal
    
    # Tools:
    $m.tools entryconfig [tr ToolsEmail] -state normal
    $m.tools entryconfig [tr ToolsOpReport] -state normal
    $m.tools entryconfig [tr ToolsPlayerReport] -state normal
    
  } else {
    # Base is not in use:
    $m.file entryconfig [tr FileClose] -state disabled
    
    foreach i {First Prev Reload Next Last Random Number Replace Add} {
      $m.game entryconfig [tr Game$i] -state disabled
    }
    .main.tb.gprev configure -state disabled
    .main.tb.gnext configure -state disabled
    
    # search:
    foreach i {Reset Negate} {
      $m.search entryconfig [tr Search$i] -state disabled
    }
    #$m.windows entryconfig [tr WindowsTree] -state disabled
    
    # tools:
    $m.tools entryconfig [tr ToolsEmail] -state disabled
    $m.tools entryconfig [tr ToolsOpReport] -state disabled
    $m.tools entryconfig [tr ToolsPlayerReport] -state disabled
  }
  
  if {[sc_base numGames] == 0} {
    $m.tools entryconfig [tr ToolsExpFilter] -state disabled
  } else {
    $m.tools entryconfig [tr ToolsExpFilter] -state normal
  }
  
  set state disabled
  if {[baseIsCompactable]} { set state normal }
  $m.file.utils entryconfig [tr FileMaintCompact] -state $state
  
  ::search::Config
  ::windows::switcher::Refresh
  ::maint::Refresh
  ::bookmarks::Refresh
}


##############################
#
# Multiple-language menu support functions.

# configMenuText:
#    Reconfigures the main window menus. Called when the language is changed.
#
proc configMenuText {menu entry tag lang} {
  global menuLabel menuUnder
  if {[info exists menuLabel($lang,$tag)] && [info exists menuUnder($lang,$tag)]} {
    $menu entryconfig $entry -label $menuLabel($lang,$tag) -underline $menuUnder($lang,$tag)
  } else {
    $menu entryconfig $entry -label $menuLabel(E,$tag) -underline $menuUnder(E,$tag)
  }
}

proc setLanguageMenus {{lang ""}} {
  global menuLabel menuUnder oldLang
  
  if {$lang == ""} {set lang $::language}
  
  foreach tag { ToolsSeriousGame CorrespondenceChess ToolsTraining ToolsTacticalGame ToolsTrainFics ToolsEngineTournament} {
    configMenuText .menu.play [tr $tag $oldLang] $tag $lang
  }
  
  foreach tag {TrainOpenings TrainTactics TrainCalvar TrainFindBestMove TrainReviewGame } {
    configMenuText .menu.play.training [tr Tools$tag $oldLang] Tools$tag $lang
  }
  
  foreach tag { CCConfigure CCConfigRelay CCOpenDB CCRetrieve CCInbox \
        CCSend CCResign CCClaimDraw CCOfferDraw CCAcceptDraw   \
        CCNewMailGame CCMailMove CCGamePage } {
    configMenuText .menu.play.correspondence [tr $tag $oldLang] $tag $lang
  }
  
  foreach tag {File Edit Game Search Play Windows Tools Options Help} {
    configMenuText .menu [tr $tag $oldLang] $tag $lang
  }
  
  foreach tag {New Open Close Finder Bookmarks Maint ReadOnly Switch Exit} {
    configMenuText .menu.file [tr File$tag $oldLang] File$tag $lang
  }
  
  # open base as tree was moved from tools to file menus
  foreach tag { ToolsOpenBaseAsTree ToolsOpenRecentBaseAsTree } {
    configMenuText .menu.file [tr $tag $oldLang] $tag $lang
  }
  
  foreach tag {Win Compact Delete Twin Class Sort Name FixBase} {
    configMenuText .menu.file.utils [tr FileMaint$tag $oldLang] \
        FileMaint$tag $lang
  }
  foreach tag {Editor Player Event Site Round} {
    configMenuText .menu.file.utils.name [tr FileMaintName$tag $oldLang] \
        FileMaintName$tag $lang
  }
  foreach tag {Add Delete First Main Trial Strip Reset Copy Paste PastePGN Setup Undo
    Redo CopyBoard PasteBoard} {
    configMenuText .menu.edit [tr Edit$tag $oldLang] Edit$tag $lang
  }
  foreach tag {Comments Vars Begin End} {
    configMenuText .menu.edit.strip [tr EditStrip$tag $oldLang] \
        EditStrip$tag $lang
  }
  foreach tag {New First Prev Reload Next Last Random Number
    Replace Add Deepest GotoMove Novelty} {
    configMenuText .menu.game [tr Game$tag $oldLang] Game$tag $lang
  }
  foreach tag {Reset Negate Material Current Header Using} {
    configMenuText .menu.search [tr Search$tag $oldLang] Search$tag $lang
  }
  
  foreach tag {Comment GList PGN PList Tmt Switcher Maint ECO Repertoire Stats Tree TB Book CorrChess } {
    configMenuText .menu.windows [tr Windows$tag $oldLang] Windows$tag $lang
  }
  
  foreach tag {Analysis Analysis2 Cross Email FilterGraph AbsFilterGraph OpReport Tracker
    Rating Score ExpCurrent ExpFilter ImportOne ImportFile StartEngine1 StartEngine2 BookTuning
    PInfo PlayerReport ConnectHardware CaptureBoard} {
    configMenuText .menu.tools [tr Tools$tag $oldLang] Tools$tag $lang
  }
  
  .menu.tools.pinfo entryconfigure 0 -label $::tr(White)
  .menu.tools.pinfo entryconfigure 1 -label $::tr(Black)
  foreach tag {ToolsExpCurrentPGN ToolsExpCurrentHTML ToolsExpCurrentHTMLJS ToolsExpCurrentLaTeX} {
    configMenuText .menu.tools.exportcurrent [tr $tag $oldLang] $tag $lang
  }
  foreach tag {ToolsExpFilterPGN ToolsExpFilterHTML ToolsExpFilterHTMLJS ToolsExpFilterLaTeX} {
    configMenuText .menu.tools.exportfilter [tr $tag $oldLang] $tag $lang
  }
  foreach tag {Board Export Fonts GInfo Language Moves Numbers
    Startup Sounds Toolbar Windows Theme ECO Spell Table BooksDir TacticsBasesDir Recent Save AutoSave} {
    configMenuText .menu.options [tr Options$tag $oldLang] Options$tag $lang
  }
  
  foreach tag { Configure NovagCitrineConnect InputEngineConnect  } {
    configMenuText .menu.tools.hardware [tr ToolsConnectHardware$tag $oldLang] ToolsConnectHardware$tag $lang
  }
  
  foreach tag {Regular Menu Small Tiny Fixed} {
    configMenuText .menu.options.fonts [tr OptionsFonts$tag $oldLang] \
        OptionsFonts$tag $lang
  }
  foreach tag {Size Pieces Colors Names} {
    configMenuText .menu.options.board [tr OptionsBoard$tag $oldLang] \
        OptionsBoard$tag $lang
  }
  foreach tag {HideNext Material FEN Marks Wrap FullComment Photos \
        TBNothing TBResult TBAll Informant} {
    configMenuText .menu.options.ginfo [tr GInfo$tag $oldLang] \
        GInfo$tag $lang
  }
  configMenuText .menu.options.entry [tr OptionsShowVarPopup $oldLang] OptionsShowVarPopup $lang
  foreach tag {Ask Animate Delay Suggest Key Coord Space TranslatePieces HighlightLastMove ShowVarArrows } {
    configMenuText .menu.options.entry [tr OptionsMoves$tag $oldLang] \
        OptionsMoves$tag $lang
  }
  
  foreach tag { Color Width Display Arrow } {
    configMenuText .menu.options.entry.highlightlastmove [tr OptionsMovesHighlightLastMove$tag $oldLang] OptionsMovesHighlightLastMove$tag $lang
  }
  
  foreach tag {HelpTip WindowsSwitcher WindowsPGN WindowsTree FileFinder \
        ToolsCross WindowsGList WindowsStats WindowsBook} {
    configMenuText .menu.options.startup [tr $tag $oldLang] $tag $lang
  }
  
  foreach tag {Iconify Raise Dock ShowGameInfo AutoLoadLayout} {
    configMenuText .menu.options.windows [tr OptionsWindows$tag $oldLang] \
        OptionsWindows$tag $lang
  }
  if {$::docking::USE_DOCKING} {
    foreach tag {SaveLayout RestoreLayout} {
      configMenuText .menu.options.windows [tr OptionsWindows$tag $oldLang] \
          OptionsWindows$tag $lang
    }
  }
  foreach tag {Contents Index Guide Hints Contact Tip About} {
    configMenuText .menu.helpmenu [tr Help$tag $oldLang] Help$tag $lang
  }
  
  if { $::macOS } {
    foreach tag {About} {
      configMenuText .menu.apple [tr Help$tag $oldLang] Help$tag $lang
    }
  }
  
  
  foreach tag {HideNext Material FEN Marks Wrap FullComment Photos \
        TBNothing TBResult TBAll Delete Mark} {
    configMenuText .main.gameInfo.menu [tr GInfo$tag $oldLang] GInfo$tag $lang
  }
  
  updateGameInfoMenu
  
  ::pgn::ConfigMenus
  ::windows::stats::ConfigMenus
  ::tree::ConfigMenus
  ::crosstab::ConfigMenus
  ::optable::ConfigMenus
  ::preport::ConfigMenus
  ::tourney::ConfigMenus
  
  # Check for duplicate menu underline characters in this language:
  # set ::verifyMenus 1
  if {[info exists ::verifyMenus] && $::verifyMenus} {
    foreach m {file edit game search windows tools options help} {
      set list [checkMenuUnderline .menu.$m]
      if {[llength $list] > 0} {
        puts stderr "Menu $m has duplicate underline letters: $list"
      }
    }
  }
}
################################################################################
# updates the contextual game info menu.
# used when custom flags description change
################################################################################
proc updateGameInfoMenu {} {
  set i 0
  foreach flag $::maintFlaglist {
    if {$i < 12} {
      .main.gameInfo.menu.mark entryconfigure $i -label "$::tr($::maintFlags($flag)) ($flag)"
    } else  {
      set tmp [sc_game flag $flag description]
      if {$tmp == "" } { set tmp $::maintFlags($flag) }
      .main.gameInfo.menu.mark entryconfigure $i -label "$tmp ($flag)"
    }
    incr i
  }
}
################################################################################
# checkMenuUnderline:
#  Given a menu widget, returns a list of all the underline
#  characters that appear more than once.
################################################################################
proc checkMenuUnderline {menu} {
  array set found {}
  set duplicates {}
  set last [$menu index last]
  for {set i [$menu cget -tearoff]} {$i <= $last} {incr i} {
    if {[string equal [$menu type $i] "separator"]} {
      continue
    }
    set char [string index [$menu entrycget $i -label] \
        [$menu entrycget $i -underline]]
    set char [string tolower $char]
    if {$char == ""} {
      continue
    }
    if {[info exists found($char)]} {
      lappend duplicates $char
    }
    set found($char) 1
  }
  return $duplicates
}

# standardShortcuts:
#    Sets up a number of standard shortcut keys for the specified window.
#
proc standardShortcuts {w} {
  if {! [winfo exists $w]} { return }
  
  # Global shortcuts for docked mode
  if { $::docking::USE_DOCKING } {
    bind $w <F1> {helpWindow Contents}
    bind $w <period> {if {!$tree(refresh)} {toggleRotateBoard}}
    bind $w <Control-N> nameEditor
    bind $w <Control-a> {sc_var create; updateBoard -pgn}
    bind $w <Control-space> { setTrialMode toggle }
    bind $w <Control-D> {sc_move ply [sc_eco game ply]; updateBoard}
    bind $w <Control-u> ::game::GotoMoveNumber
    bind $w <Control-Y> findNovelty
    bind $w <Control-F> ::search::filter::negate
    bind $w <Control-p> ::pgn::OpenClose
    bind $w <Control-P> ::plist::toggle
    bind $w <Control-T> ::tourney::toggle
    bind $w <Control-y> ::windows::eco::OpenClose
    bind $w <Control-equal> ::tb::Open
    bind $w <Control-G> tools::graphs::filter::Open
    bind $w <Control-J> tools::graphs::absfilter::Open
    bind $w <Control-O> ::optable::makeReportWin
    bind $w <Control-K> ::ptrack::make
    bind $w <F11> { if {[wm attributes . -fullscreen]} { wm attributes . -fullscreen 0} else { wm attributes . -fullscreen 1} }
  }

  bind $w <Control-z> { undoFeature undo }
  bind $w <Control-y> { undoFeature redo }
  bind $w <exclam><Return> "sc_pos addNag !; updateBoard -pgn"
  bind $w <exclam><exclam><Return> "sc_pos addNag !!; updateBoard -pgn"
  bind $w <exclam><question><Return> "sc_pos addNag !?; updateBoard -pgn"
  bind $w <question><Return> "sc_pos addNag ?; updateBoard -pgn"
  bind $w <question><question><Return> "sc_pos addNag ??; updateBoard -pgn"
  bind $w <question><exclam><Return> "sc_pos addNag ?!; updateBoard -pgn"
  
  bind $w <plus><minus> "sc_pos addNag +-; updateBoard -pgn"
  bind $w <plus><slash> "sc_pos addNag +/-; updateBoard -pgn"
  bind $w <plus><equal> "sc_pos addNag +=; updateBoard -pgn"
  bind $w <equal><Return> "sc_pos addNag =; updateBoard -pgn"
  bind $w <minus><plus> "sc_pos addNag -+; updateBoard -pgn"
  bind $w <minus><slash> "sc_pos addNag -/+; updateBoard -pgn"
  bind $w <equal><plus> "sc_pos addNag =+; updateBoard -pgn"
  bind $w <asciitilde><Return> "sc_pos addNag ~; updateBoard -pgn"
  bind $w <asciitilde><equal><Return> "sc_pos addNag ~=; updateBoard -pgn"
  bind $w <minus><minus> "addMove null null"

  bind $w <Control-c> {catch {sc_clipbase copy}; ::updateBoard}
  bind $w <Control-d> ::windows::switcher::Open
  bind $w <Control-e> makeCommentWin
  bind $w <Control-f> ::search::filter::reset
  bind $w <Control-g> ::game::LoadNumber
  bind $w <Control-i> ::windows::stats::Open
  bind $w <Control-l> ::windows::gamelist::Open
  bind $w <Control-m> ::maint::OpenClose
  bind $w <Control-n> ::file::New
  bind $w <Control-o> ::file::Open
  bind $w <Control-p> ::pgn::OpenClose
  bind $w <Control-q> ::file::Exit
  bind $w <Control-r> ::gameReplace
  bind $w <Control-s> ::gameAdd
  bind $w <Control-t> ::tree::make
  bind $w <Control-v> {catch {sc_clipbase paste}; ::updateBoard -pgn}
  bind $w <Control-w> ::file::Close
  bind $w <Control-x> ::game::Clear
  
  bind $w <Control-A> makeAnalysisWin
  bind $w <Control-Shift-2>  "makeAnalysisWin 2"
  bind $w <Control-B> ::search::board
  bind $w <Control-C> ::copyFEN
  bind $w <Control-E> ::tools::email
  bind $w <Control-H> ::search::header
  bind $w <Control-I> importPgnGame
  bind $w <Control-L> ::game::Reload
  bind $w <Control-M> ::search::material
  bind $w <Control-O> ::optable::makeReportWin
  bind $w <Control-R> ::rep::OpenCloseWindow
  bind $w <Control-S> ::setupBoard
  bind $w <Control-T> ::tourney::toggle
  bind $w <Control-V> ::pasteFEN
  bind $w <Control-KeyPress-U> ::search:::usefile
  bind $w <Control-X> crosstabWin
  bind $w <Control-Z> ::toggleAutoplay ;#::tools::graphs::score::Refresh
  
  bind $w <Control-slash> ::file::finder::Open
  bind $w <Control-Shift-Up> {::game::LoadNextPrev first}
  bind $w <Control-Shift-Down> {::game::LoadNextPrev last}
  bind $w <Control-Up> {::game::LoadNextPrev previous}
  bind $w <Control-Down> {::game::LoadNextPrev next}
  bind $w <Control-question> ::game::LoadRandom
  
  bind $w <KeyPress-v> { ::showVars }
  bind $w <KeyPress-z> {.main.fbutton.button.exitVar invoke}
  
  for {set i 1} { $i <= $::totalBaseSlots} {incr i} {
    bind $w "<Control-Key-$i>" "::file::SwitchToBase $i"
  }
  
  bind $w <Home>  ::move::Start
  bind $w <Up> {
    if {[sc_pos isAt vstart]} {
      .main.fbutton.button.exitVar invoke
    } else  {
      ::move::Back 10
    }
  }
  bind $w <Left>  { ::move::Back }
  bind $w <Down>  {::move::Forward 10}
  bind $w <Right> ::move::Forward
  bind $w <End>   ::move::End
  bind $w <F2> "::makeAnalysisWin 1 0"
  bind $w <F3> "::makeAnalysisWin 2 0"
  bind $w <F4> { if {[winfo exists .analysisWin1]} { .analysisWin1.b1.bStartStop invoke } }
  bind $w <F5> { if {[winfo exists .analysisWin2]} { .analysisWin2.b1.bStartStop invoke } }
  bind $w <F6>  ::book::open
  bind $w <F12> ::CorrespondenceChess::CCWindow
  bind $w <Control-F12> {::CorrespondenceChess::OpenCorrespondenceDB; ::CorrespondenceChess::ReadInbox}
  bind $w <Alt-F12> {::CorrespondenceChess::OpenCorrespondenceDB;  ::CorrespondenceChess::FetchGames}
}
################################################################################
#
################################################################################
proc configInformant {} {
  global informant
  
  set w .configInformant
  if {[winfo exists $w]} {
    destroy $w
  }
  
  toplevel $w
  ::setTitle $w $::tr(ConfigureInformant)
  setWinLocation $w
  frame $w.spinF
  set idx 0
  set row 0
  
  foreach i [lsort [array names informant]] {
    label $w.spinF.labelExpl$idx -text [ ::tr "Informant[ string trim $i "\""]" ]
    label $w.spinF.label$idx -text $i
	 # Allow the configuration of "won game" up to "Mate found"
	 if {$i == "\"++-\""} {
		 spinbox $w.spinF.sp$idx -textvariable informant($i) -width 5 -from 0.0 -to 328.0 -increment 1.0 -validate all -vcmd { regexp {^[0-9]\.[0-9]$} %P }
	 } else {
		 puts stderr 9
		 spinbox $w.spinF.sp$idx -textvariable informant($i) -width 5 -from 0.0 -to 9.9 -increment 0.1 -validate all -vcmd { regexp {^[0-9]\.[0-9]$} %P }
	 }
    grid $w.spinF.labelExpl$idx -row $row -column 0 -sticky w
    incr row
    grid $w.spinF.label$idx -row $row -column 0 -sticky w
    grid $w.spinF.sp$idx -row $row -column 1 -sticky w
    incr row
    incr idx
  }
  
  button $w.close -textvar ::tr(Close) -command "destroy $w"
  pack $w.spinF $w.close
  bind $w <Configure> "recordWinSize $w"
}

### End of file: menus.tcl

# board.tcl: part of Scid
# Copyright (C) 2001-2003 Shane Hudson. All rights reserved.

# letterToPiece
#    Array that maps piece letters to their two-character value.
#
array set ::board::letterToPiece [list \
    "R" wr "r" br "N" wn "n" bn "B" wb "b" bb \
    "Q" wq "q" bq "K" wk "k" bk "P" wp "p" bp "." e \
    ]

# List of color schemes: each sublist contains a reference name (not used),
# then lite, dark, highcolor, bestcolor, white, black, w border, b border.
#
set colorSchemes {
  { "Blue-white" "#f3f3f3" "#7389b6" "#f3f484" "#b8cbf8" "#ffffff" "#000000" "#000000" "#ffffff" }
  { "Green-Yellow" "#e0d070" "#70a070" "#b0d0e0" "#bebebe" }
  { "Brown" "#d0c0a0" "#a08050" "#b0d0e0" "#bebebe" }
  { "Blue-ish" "#d0e0d0" "#80a0a0" "#b0d0e0" "#f0f0a0" }
  { "M. Thomas" "#e0d8b8" "#047c24" "#1c80e0" "#fe0000" }
  { "KM. Skontorp" "#ffdb86" "#ffa200" "#b0d0e0" "#bebebe" }
}
array set newColors {}

proc SetBoardTextures {} {
  global boardfile_dark boardfile_lite
  # handle cases of old configuration files
  image create photo bgl20 -height 20 -width 20
  image create photo bgd20 -height 20 -width 20
  if { [ catch { bgl20 copy $boardfile_lite -from 0 0 20 20 ; bgd20 copy $boardfile_dark -from 0 0 20 20 } ] } {
    set boardfile_dark emptySquare
    set boardfile_lite emptySquare
    bgl20 copy $boardfile_lite -from 0 0 20 20
    bgd20 copy $boardfile_dark -from 0 0 20 20
  }
  
  foreach size $::boardSizes {
    # create lite and dark squares
    image create photo bgl$size -width $size -height $size
    image create photo bgd$size -width $size -height $size
    bgl$size copy $boardfile_lite -from 0 0 $size $size
    bgd$size copy $boardfile_dark -from 0 0 $size $size
  }
}

SetBoardTextures

# chooseBoardTextures:
#   Dialog for selecting board textures.
#
proc chooseBoardTextures {i} {
  global boardfile_dark boardfile_lite
  
  set prefix [lindex $::textureSquare $i]
  set boardfile_dark ${prefix}-d
  set boardfile_lite ${prefix}-l
  SetBoardTextures
  
}

# chooseBoardColors:
#   Dialog for selecting board colors.
#
proc chooseBoardColors {{choice -1}} {
  global lite dark highcolor bestcolor
  global colorSchemes newColors
  
  set colors {lite dark highcolor bestcolor}
  
  set w .boardColorDialog
  
  if {[winfo exists $w]} {
    # Just update the dialog box colors and return:
    if {$choice >= 0} {
      set list [lindex $colorSchemes $choice]
      set newColors(lite) [lindex $list 1]
      set newColors(dark) [lindex $list 2]
      set newColors(highcolor) [lindex $list 3]
      set newColors(bestcolor) [lindex $list 4]
    }
    set nlite $newColors(lite)
    set ndark $newColors(dark)
    
    foreach i {wr bn wb bq wk bp} {
      $w.bd.$i configure -background $ndark
    }
    foreach i {br wn bb wq bk wp} {
      $w.bd.$i configure -background $nlite
    }
    $w.bd.bb configure -background $newColors(highcolor)
    $w.bd.wk configure -background $newColors(bestcolor)
    foreach i $colors {
      $w.select.b$i configure -background $newColors($i)
    }
    
    foreach i {0 1 2 3} {
      set c $w.border.c$i
      $c itemconfigure dark -fill $dark -outline $dark
      $c itemconfigure lite -fill $lite -outline $lite
    }
    
    return
  }
  
  toplevel $w
  wm title $w "Scid: [tr OptionsBoardColors]"
  
  foreach i $colors { set newColors($i) [set $i] }
  set bd $w.bd
  pack [ttk::frame $bd] -side top -expand 1
  addHorizontalRule $w
  pack [ttk::frame $w.select] -side top -fill x
  addHorizontalRule $w
  pack [ttk::frame $w.preset] -side top -fill x
  pack [ttk::frame $w.texture] -side top -fill x
  addHorizontalRule $w
  pack [ttk::frame $w.border] -side top
  addHorizontalRule $w
  pack [ttk::frame $w.buttons] -side top -fill x
  
  set column 0
  foreach j {r n b q k p} {
    ttk::label $bd.w$j -image w${j}40
    ttk::label $bd.b$j -image b${j}40
    grid $bd.b$j -row 0 -column $column
    grid $bd.w$j -row 1 -column $column
    incr column
  }
  
  set f $w.select
  foreach row {0 1 0 1} column {0 0 2 2} c {
    lite dark highcolor bestcolor
  } n {
    LightSquares DarkSquares SelectedSquares SuggestedSquares
  } {
    button $f.b$c -image e20 -background [set $c] -command "
    set x \[ tk_chooseColor -initialcolor \$newColors($c) -title Scid \]
    if {\$x != \"\"} { set newColors($c) \$x; chooseBoardColors }
    "
    ttk::label $f.l$c -text "$::tr($n)  "
    grid $f.b$c -row $row -column $column
    grid $f.l$c -row $row -column [expr {$column + 1} ] -sticky w
  }
  
  # Border width option:
  set f $w.border
  foreach i {0 1 2 3} {
    if {$i != 0} { pack [ttk::frame $f.gap$i -width 20] -side left -padx 1 }
    set b $f.b$i
    ttk::radiobutton $b -text "$i:" -variable newborderwidth -value $i
    set c $f.c$i
    canvas $c -height 40 -width 40 -background black
    $c create rectangle 0 0 [expr {20 - $i}] [expr {20 - $i}] -tag dark
    $c create rectangle [expr {20 + $i}] [expr {20 + $i}] 40 40 -tag dark
    $c create rectangle 0 [expr {20 + $i}] [expr 20 - $i] 40 -tag lite
    $c create rectangle [expr {20 + $i}] 0 40 [expr {20 - $i}] -tag lite
    pack $b $c -side left -padx 1
    bind $c <Button-1> "set newborderwidth $i"
  }
  set ::newborderwidth $::borderwidth
  
  set count 0
  set psize 40
  foreach list $colorSchemes {
    set f $w.preset.p$count
    pack [ttk::frame $f] -side left -padx 5
    ttk::label $f.blite -image bp40 -background [lindex $list 1]
    ttk::label $f.bdark -image bp40 -background [lindex $list 2]
    ttk::label $f.wlite -image wp40 -background [lindex $list 1]
    ttk::label $f.wdark -image wp40 -background [lindex $list 2]
    ttk::button $f.select -text [expr {$count + 1}] -command "chooseBoardColors $count ; \
        set ::boardfile_dark emptySquare ; \
        set ::boardfile_lite emptySquare ; \
        ::SetBoardTextures "
    foreach i {blite bdark wlite wdark} {
      bind $f.$i <1> "chooseBoardColors $count ; \
          set ::boardfile_dark emptySquare ; \
          set ::boardfile_lite emptySquare ; \
          ::SetBoardTextures "
    }
    grid $f.blite -row 0 -column 0 -sticky e
    grid $f.bdark -row 0 -column 1 -sticky w
    grid $f.wlite -row 1 -column 1 -sticky w
    grid $f.wdark -row 1 -column 0 -sticky e
    grid $f.select -row 2 -column 0 -columnspan 2 ; # -sticky we
    incr count
  }
  
  #########################################################
  set f $w.texture
  set count 0
  set row 0
  set col 0
  set psize 40
  foreach tex $::textureSquare {
    set f $w.texture.p$count
    grid [ ttk::frame $f ] -row $row -column $col -padx 5
    canvas $f.c -width [expr $psize*2] -height [expr $psize*2] -background red
    $f.c create image 0 0 -image ${tex}-l -anchor nw
    $f.c create image $psize 0 -image ${tex}-d -anchor nw
    $f.c create image 0 $psize -image ${tex}-d -anchor nw
    $f.c create image $psize $psize -image ${tex}-l -anchor nw
    
    $f.c create image 0 0 -image bp40 -anchor nw
    $f.c create image $psize 0 -image wp40 -anchor nw
    $f.c create image 0 $psize -image wp40 -anchor nw
    $f.c create image $psize $psize -image bp40 -anchor nw
    ttk::button $f.select -text [expr {$count + 1}] -command "chooseBoardTextures $count"
    bind $f.c <1> "chooseBoardTextures $count"
    pack $f.c $f.select -side top
    
    incr count
    incr col
    if {$col > 4} { set col 0 ; incr row }
  }
  
  dialogbutton $w.buttons.ok -text "OK" -command "
  foreach i {lite dark highcolor bestcolor} {
    set \$i \$newColors(\$i)
  }
  set borderwidth \$newborderwidth
  ::board::border .main.board \$borderwidth
  grab release $w
  destroy $w
  "
  dialogbutton $w.buttons.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  bind $w <Escape> "catch {grab release $w}; destroy $w"
  packbuttons right $w.buttons.cancel $w.buttons.ok
  chooseBoardColors
  wm resizable $w 0 0
  catch {grab $w}
}

set tb .main.tb
ttk::frame $tb -relief raised -border 1
button $tb.new -image tb_new -command ::file::New
button .main.tb.open -image tb_open -command ::file::Open
button .main.tb.save -image tb_save -command {
  if {[sc_game number] != 0} {
    #busyCursor .
    gameReplace
    # catch {.save.buttons.save invoke}
    #unbusyCursor .
  } else {
    gameAdd
  }
}
button .main.tb.close -image tb_close -command ::file::Close
button .main.tb.finder -image tb_finder -command ::file::finder::Open
menubutton .main.tb.bkm -image tb_bkm -menu .main.tb.bkm.menu
menu .main.tb.bkm.menu
bind $dot_w <Control-b> ::bookmarks::PostMenu
bind .main.tb.bkm <ButtonPress-1> "+.main.tb.bkm configure -relief flat"


ttk::frame .main.tb.space1 -width 12
button .main.tb.cut -image tb_cut -command ::game::Clear
button .main.tb.copy -image tb_copy \
    -command {catch {sc_clipbase copy}; updateBoard}
button .main.tb.paste -image tb_paste \
    -command {catch {sc_clipbase paste}; updateBoard -pgn}
ttk::frame .main.tb.space2 -width 12
button .main.tb.gprev -image tb_gprev -command {::game::LoadNextPrev previous}
button .main.tb.gnext -image tb_gnext -command {::game::LoadNextPrev next}
ttk::frame .main.tb.space3 -width 12
button .main.tb.rfilter -image tb_rfilter -command ::search::filter::reset
button .main.tb.bsearch -image tb_bsearch -command ::search::board
button .main.tb.hsearch -image tb_hsearch -command ::search::header
button .main.tb.msearch -image tb_msearch -command ::search::material
ttk::frame .main.tb.space4 -width 12
button .main.tb.switcher -image tb_switcher -command ::windows::switcher::Open
button .main.tb.glist -image tb_glist -command ::windows::gamelist::Open
button .main.tb.pgn -image tb_pgn -command ::pgn::OpenClose
button .main.tb.tmt -image tb_tmt -command ::tourney::toggle
button .main.tb.maint -image tb_maint -command ::maint::OpenClose
button .main.tb.eco -image tb_eco -command ::windows::eco::OpenClose
button .main.tb.tree -image tb_tree -command ::tree::make
button .main.tb.crosst -image tb_crosst -command toggleCrosstabWin
button .main.tb.engine -image tb_engine -command makeAnalysisWin
button .main.tb.help -image tb_help -command {helpWindow Index}

foreach i {new open save close finder bkm cut copy paste gprev gnext \
      rfilter bsearch hsearch msearch \
      switcher glist pgn tmt maint eco tree crosst engine help} {
  .main.tb.$i configure -takefocus 0 -relief flat -border 1 -anchor n -highlightthickness 0
  bind .main.tb.$i <Any-Enter> "+.main.tb.$i configure -relief groove"
  bind .main.tb.$i <Any-Leave> "+.main.tb.$i configure -relief flat; statusBarRestore %W; break"
}

#pack .main.tb -side top -fill x -before .button

proc configToolbar {} {
  set w .tbconfig
  toplevel $w
  wm title $w "Scid: [tr OptionsToolbar]"
  
  array set ::toolbar_temp [array get ::toolbar]
  pack [ttk::frame $w.f1] -side top -fill x
  foreach i {new open save close finder bkm} {
    checkbutton $w.f1.$i -indicatoron 1 -image tb_$i -height 20 -width 22 \
        -variable toolbar_temp($i) -relief solid -borderwidth 1
    pack $w.f1.$i -side left -ipadx 2 -ipady 2
  }
  pack [ttk::frame $w.f2] -side top -fill x
  foreach i {gprev gnext} {
    checkbutton $w.f2.$i -indicatoron 1 -image tb_$i -height 20 -width 22 \
        -variable toolbar_temp($i) -relief solid -borderwidth 1
    pack $w.f2.$i -side left -ipadx 1 -ipady 1
  }
  pack [ttk::frame $w.f3] -side top -fill x
  foreach i {cut copy paste} {
    checkbutton $w.f3.$i -indicatoron 1 -image tb_$i -height 20 -width 22 \
        -variable toolbar_temp($i) -relief solid -borderwidth 1
    pack $w.f3.$i -side left -ipadx 1 -ipady 1
  }
  pack [ttk::frame $w.f4] -side top -fill x
  foreach i {rfilter bsearch hsearch msearch} {
    checkbutton $w.f4.$i -indicatoron 1 -image tb_$i -height 20 -width 22 \
        -variable toolbar_temp($i) -relief solid -borderwidth 1
    pack $w.f4.$i -side left -ipadx 1 -ipady 1
  }
  pack [ttk::frame $w.f5] -side top -fill x
  foreach i {switcher glist pgn tmt maint eco tree crosst engine} {
    checkbutton $w.f5.$i -indicatoron 1 -image tb_$i -height 20 -width 22 \
        -variable toolbar_temp($i) -relief solid -borderwidth 1
    pack $w.f5.$i -side left -ipadx 1 -ipady 1
  }
  
  addHorizontalRule $w
  pack [ttk::frame $w.b] -side bottom -fill x
  button $w.on -text "+ [::utils::string::Capital $::tr(all)]" -command {
    foreach i [array names toolbar_temp] { set toolbar_temp($i) 1 }
  }
  button $w.off -text "- [::utils::string::Capital $::tr(all)]" -command {
    foreach i [array names toolbar_temp] { set toolbar_temp($i) 0 }
  }
  ttk::button $w.ok -text "OK" -command {
    array set toolbar [array get toolbar_temp]
    catch {grab release .tbconfig}
    destroy .tbconfig
    redrawToolbar
  }
  ttk::button $w.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  pack $w.cancel $w.ok -side right -padx 2
  pack $w.on $w.off -side left -padx 2
  catch {grab $w}
}

proc redrawToolbar {} {
  global toolbar
  foreach i [winfo children .main.tb] { pack forget $i }
  set seenAny 0
  set seen 0
  foreach i {new open save close finder bkm} {
    if {$toolbar($i)} {
      set seen 1; set seenAny 1
      pack .main.tb.$i -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
    }
  }
  if {$seen} { pack .main.tb.space1 -side left }
  set seen 0
  foreach i {gprev gnext} {
    if {$toolbar($i)} {
      set seen 1; set seenAny 1
      pack .main.tb.$i -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
    }
  }
  if {$seen} { pack .main.tb.space2 -side left }
  set seen 0
  foreach i {cut copy paste} {
    if {$toolbar($i)} {
      set seen 1; set seenAny 1
      pack .main.tb.$i -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
    }
  }
  if {$seen} { pack .main.tb.space3 -side left }
  set seen 0
  foreach i {rfilter bsearch hsearch msearch} {
    if {$toolbar($i)} {
      set seen 1; set seenAny 1
      pack .main.tb.$i -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
    }
  }
  if {$seen} { pack .main.tb.space4 -side left }
  set seen 0
  foreach i {switcher glist pgn tmt maint eco tree crosst engine} {
    if {$toolbar($i)} {
      set seen 1; set seenAny 1
      pack .main.tb.$i -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
    }
  }
  if {$seenAny} {
    grid .main.tb -row 0 -column 0 -columnspan 3 -sticky we
  } else {
    grid forget .main.tb
  }
}

proc setToolbar {x} {
  if {$x} {
    grid .main.tb -row 0 -column 0 -columnspan 3 -sticky we
  } else {
    grid forget .main.tb
  }
}

# Set toolbar help status messages:
foreach {b m} {
  new FileNew open FileOpen finder FileFinder
  save GameReplace close FileClose bkm FileBookmarks
  gprev GamePrev gnext GameNext
  cut GameNew copy EditCopy paste EditPaste
  rfilter SearchReset bsearch SearchCurrent
  hsearch SearchHeader msearch SearchMaterial
  switcher WindowsSwitcher glist WindowsGList pgn WindowsPGN tmt WindowsTmt
  maint WindowsMaint eco WindowsECO tree WindowsTree crosst ToolsCross
  engine ToolsAnalysis
} {
  set helpMessage(.main.tb.$b) $m
  # ::utils::tooltip::Set $tb.$b $m
}
set helpMessage(.main.fbutton.button.addVar) EditAdd
set helpMessage(.main.fbutton.button.trial) EditTrial

ttk::frame .main.fbutton
ttk::frame .main.fbutton.button -relief raised -border 1
button .main.fbutton.button.start -image tb_start -command ::move::Start
button .main.fbutton.button.back -image tb_prev -command ::move::Back
button .main.fbutton.button.forward -image tb_next -command ::move::Forward
button .main.fbutton.button.end -image tb_end -command ::move::End
bind .main.fbutton.button.end <Button-$::MB3> ::tactics::findBestMove
ttk::frame .main.fbutton.button.space -width 15

# The go-into-variation button is a menubutton:
menubutton .main.fbutton.button.intoVar -image tb_invar -menu .main.fbutton.button.intoVar.menu -relief raised
menu .main.fbutton.button.intoVar.menu -tearoff 0 -font font_Regular

button .main.fbutton.button.exitVar -image tb_outvar \
    -command {::move::ExitVar }
button .main.fbutton.button.addVar -image tb_addvar \
    -command {sc_var create; updateBoard -pgn -animate}
ttk::frame .main.fbutton.button.space2 -width 15


##############################

namespace eval ::board {
  
  namespace export sq
  
  # List of square names in order; used by sq procedure.
  variable squareIndex [list a1 b1 c1 d1 e1 f1 g1 h1 a2 b2 c2 d2 e2 f2 g2 h2 \
      a3 b3 c3 d3 e3 f3 g3 h3 a4 b4 c4 d4 e4 f4 g4 h4 \
      a5 b5 c5 d5 e5 f5 g5 h5 a6 b6 c6 d6 e6 f6 g6 h6 \
      a7 b7 c7 d7 e7 f7 g7 h7 a8 b8 c8 d8 e8 f8 g8 h8]
}

# ::board::sq:
#    Given a square name, returns its index as used in board
#    representations, or -1 if the square name is invalid.
#    Examples: [sq h8] == 63; [sq a1] = 0; [sq notASquare] = -1.
#
proc ::board::sq {sqname} {
  variable squareIndex
  return [lsearch -exact $squareIndex $sqname]
}

# ::board::san --
#
#	Convert a square number (0-63) used in board representations
#	to the SAN square name (a1, a2, ..., h8).
#
# Arguments:
#	sqno	square number 0-63.
# Results:
#	Returns square name "a1"-"h8".
#
proc ::board::san {sqno} {
  if {($sqno < 0) || ($sqno > 63)} { return }
  return [format %c%c \
      [expr {($sqno % 8) + [scan a %c]}] \
      [expr {($sqno / 8) + [scan 1 %c]}]]
  
}

# ::board::new
#   Creates a new board in the specified frame.
#   The psize option should be a piece bitmap size supported
#   in Scid (see the boardSizes variable in start.tcl).
#   The showmat parameter adds a frame to display material balance
#
proc ::board::new {w {psize 40} {showmat "nomat"} } {
  if {[winfo exists $w]} { return }
  
  set ::board::_size($w) $psize
  set ::board::_border($w) $::borderwidth
  set ::board::_coords($w) 0
  set ::board::_flip($w) 0
  set ::board::_data($w) [sc_pos board]
  set ::board::_stm($w) 1
  set ::board::_showMarks($w) 0
  set ::board::_mark($w) {}
  set ::board::_drag($w) -1
  set ::board::_showmat($w) 0
  
  if { $showmat != "nomat"} { set ::board::_showmat($w) 1 }
  
  set border $::board::_border($w)
  set bsize [expr {$psize * 8 + $border * 9} ]
  
  
  ttk::frame $w -class Board
  canvas $w.bd -width $bsize -height $bsize -cursor crosshair -background black -borderwidth 0 -highlightthickness 0
  if {[info tclversion] == 8.5} {
    grid anchor $w center
  }
  
  grid $w.bd -row 1 -column 3 -rowspan 8 -columnspan 8
  set bd $w.bd
  
  
  # Create empty board:
  for {set i 0} {$i < 64} {incr i} {
    set xi [expr {$i % 8} ]
    set yi [expr {int($i/8)} ]
    set x1 [expr {$xi * ($psize + $border) + $border +1 } ]
    set y1 [expr {(7 - $yi) * ($psize + $border) + $border +1 } ]
    set x2 [expr {$x1 + $psize }]
    set y2 [expr {$y1 + $psize }]
    
    $bd create rectangle $x1 $y1 $x2 $y2 -tag sq$i -outline ""
  }
  
  # Set up coordinate labels:
  for {set i 1} {$i <= 8} {incr i} {
    ttk::label $w.lrank$i -text [expr {9 - $i}]
    grid $w.lrank$i -row $i -column 2 -sticky e
    ttk::label $w.rrank$i -text [expr {9 - $i}]
    grid $w.rrank$i -row $i -column 11 -sticky w
  }
  foreach i {1 2 3 4 5 6 7 8} file {a b c d e f g h} {
    ttk::label $w.tfile$file -text $file
    grid $w.tfile$file -row 0 -column [expr $i + 2] -sticky s
    ttk::label $w.bfile$file -text $file
    grid $w.bfile$file -row 9 -column [expr $i + 2] -sticky n
  }
  
  # Set up side-to-move icons:
  ttk::frame $w.stmgap -width 3
  ttk::frame $w.stm
  frame $w.wtm -relief solid -borderwidth 1 -background white
  frame $w.btm -relief solid -borderwidth 1 -background black
  grid $w.stmgap -row 1 -column 1
  grid $w.stm -row 2 -column 0 -rowspan 5 -padx 2
  if {$::board::_showmat($w)} {
    canvas $w.mat -width 20 -highlightthickness 0
  }
  
  grid $w.wtm -row 8 -column 0
  grid $w.btm -row 1 -column 0
  if {$::board::_showmat($w)} {
    grid $w.mat -row 1 -column 12 -rowspan 8 -pady 5
  }
  
  ::board::stm $w
  ::board::coords $w
  ::board::resize $w redraw
  if {$::board::_showmat($w)} {
    ::board::material $w
  }
  ::board::update $w
  return $w
}

# ::board::defaultColor
#   Returns the color (the value of the global
#   variable "lite" or "dark") depending on whether the
#   specified square number (0=a1, 1=b1, ..., 63=h8) is
#   a light or dark square.
#
proc ::board::defaultColor {sq} {
  return [expr {($sq + ($sq / 8)) % 2 ? "$::lite" : "$::dark"}]
}

# ::board::size
#   Returns the current board size.
#
proc ::board::size {w} {
  return $::board::_size($w)
}

################################################################################
# Pascal Georges :
# an alias resize function to handle the bug (flip + resize) : when the board was flipped, and the board resized
# its state was incoherent. As this did not occur when the board is not flipped, unflip the board before the
# resizing : should be fixed !
################################################################################
proc ::board::resize2 {w psize} {
  if {$psize == $::board::_size($w)} { return $psize }
  if { ! [ ::board::isFlipped $w ] } {
    ::board::resize $w $psize
  }  else {
    ::board::flip $w
    ::board::resize $w $psize
    ::board::flip $w
  }
}

# ::board::resize
#   Resizes the board. Takes a numeric piece size (which should
#   be in the global boardSizes list variable), or "-1" or "+1".
#   If the size argument is "redraw", the board is redrawn.
#   Returns the new size of the board.
#
proc ::board::resize {w psize} {
  global boardSizes
  
  set oldsize $::board::_size($w)
  if {$psize == $oldsize} { return $oldsize }
  if {$psize == "redraw"} { set psize $oldsize }
  if {$psize == "-1"} {
    set index [lsearch -exact $boardSizes $oldsize]
    if {$index == 0} { return $oldsize }
    incr index -1
    set psize [lindex $boardSizes $index]
  } elseif {$psize == "+1"} {
    set index [lsearch -exact $boardSizes $oldsize]
    incr index
    if {$index == [llength $boardSizes]} { return $oldsize }
    set psize [lindex $boardSizes $index]
  }
  
  # Verify that we have a valid size:
  if {[lsearch -exact $boardSizes $psize] < 0} { return $oldsize }
  
  set border $::board::_border($w)
  set bsize [expr {$psize * 8 + $border * 9} ]
  
  $w.bd configure -width $bsize -height $bsize
  set ::board::_size($w) $psize
  
  # Resize each square:
  for {set i 0} {$i < 64} {incr i} {
    set xi [expr {$i % 8}]
    set yi [expr {int($i/8)}]
    set x1 [expr {$xi * ($psize + $border) + $border }]
    set y1 [expr {(7 - $yi) * ($psize + $border) + $border }]
    set x2 [expr {$x1 + $psize }]
    set y2 [expr {$y1 + $psize }]
    $w.bd coords sq$i $x1 $y1 $x2 $y2
  }
  
  # Resize the side-to-move icons:
  set stmsize [expr {round($psize / 4) + 5}]
  $w.stm configure -width $stmsize
  $w.wtm configure -height $stmsize -width $stmsize
  $w.btm configure -height $stmsize -width $stmsize
  
  # resize the material canvas
  if {$::board::_showmat($w)} {
    $w.mat configure -height [expr $psize * 8]
    $w.mat configure -width 20
    ::board::material $w
  }
  
  ::board::update $w
  
  return $psize
}

# ::board::border
#   Get or set the border width.
#   If the optional argument is missing or the empty string, returns
#   the width of the board.
#   Otherwise, the board sqyare borders are set to the specified width.
#
proc ::board::border {w {border ""}} {
  if {$border == ""} {
    return $::board::_border($w)
  } else {
    set ::board::_border($w) $border
    ::board::resize2 $w redraw
  }
}

# ::board::getSquare
#   Given a board frame and root-window X and Y screen coordinates,
#   returns the square number (0-63) containing that screen location,
#   or -1 if the location is outside the board.
#
proc ::board::getSquare {w x y} {
  if {[winfo containing $x $y] != "$w.bd"} {
    return -1
  }
  set x [expr {$x - [winfo rootx $w.bd]}]
  set y [expr {$y - [winfo rooty $w.bd]}]
  set psize $::board::_size($w)
  set border $::board::_border($w)
  set x [expr {int($x / ($psize+$border))}]
  set y [expr {int($y / ($psize+$border))}]
  
  if {$x < 0  ||  $y < 0  ||  $x > 7  ||  $y > 7} {
    set sq -1
  } else {
    set sq [expr {(7-$y)*8 + $x}]
    if {$::board::_flip($w)} { set sq [expr {63 - $sq}] }
  }
  return $sq
}

# ::board::showMarks
#   Turns on/off the showing of marks (colored squares).
#
proc ::board::showMarks {w value} {
  set ::board::_showMarks($w) $value
}

# ::board::colorSquare
#   Colors the specified square (0-63) of the board.
#   If the color is the empty string, the appropriate
#   color for the square (light or dark) is used.
#
proc ::board::colorSquare {w i {color ""}} {
  if {$i < 0  ||  $i > 63} { return }
  if {$color != ""} {
    $w.bd itemconfigure br$i -state hidden
  } else {
    set color [::board::defaultColor $i]
    set brstate "normal"
    foreach mark $::board::_mark($w) {
      if {[lindex $mark 1] == $i && [lindex $mark 0] == "full"} {
        set color [lindex $mark 3]
        set brstate "hidden"        
      }
    }
    $w.bd itemconfigure br$i -state $brstate
  }
  $w.bd itemconfigure sq$i -fill $color -outline ""  
}

# ::board::midSquare
#   Given a board and square number, returns the canvas X/Y
#   coordinates of the midpoint of that square.
#
proc ::board::midSquare {w sq} {
  set c [$w.bd coords sq$sq]
  #Klimmek: calculation change, because some sizes are odd and then some squares are shifted by 1 pixel
  # set x [expr {([lindex $c 0] + [lindex $c 2]) / 2} ]
  # set y [expr {([lindex $c 1] + [lindex $c 3]) / 2} ]
  set psize $::board::_size($w)
  if { $psize % 2 } { set psize [expr {$psize - 1}] }
  set x [expr {[lindex $c 0] + $psize/2} ]
  set y [expr {[lindex $c 1] + $psize/2} ]
  return [list $x $y]
}


# ::board::setmarks --
#
#	Set the marks for the board:
#	colored squares, arrows, circles, etc.
#
# Arguments:
#	w	A frame containing a board '$win.bd'.
#       cmds    Commands to draw the marks
# Results:
#	Sets ::board::_mark($w) with all the right formatted commands.
#       Marks will be drawn by ::board::update
#	Returns nothing.
#
proc ::board::setmarks {w cmds} {
  set ::board::_mark($w) {}
  foreach {cmd discard} [mark::getEmbeddedCmds $cmds] {
    lset cmd 1 [::board::sq [lindex $cmd 1]]
    set dest [::board::sq [lindex $cmd 2]]
    if {$dest != -1} {lset cmd 2 $dest}
    lappend ::board::_mark($w) $cmd
  }
}

### Namespace ::board::mark

namespace eval ::board::mark {
  namespace import [namespace parent]::sq
  
  # Regular expression constants for
  # matching Scid's embedded commands in PGN files.
  
  variable StartTag {\[%}
  variable ScidKey  {mark|arrow}
  variable Command  {draw}
  variable Type     {full|square|arrow|circle|disk|tux}
  variable Text     {[-+=?!A-Za-z0-9]}
  variable Square   {[a-h][1-8]\M}
  variable Color    {[\w#][^]]*\M}	;# FIXME: too lax for #nnnnnn!
  variable EndTag   {\]}
  
  # Current (non-standard) version:
  variable ScidCmdRegex \
      "$StartTag              # leading tag
  ($ScidKey)\\\ +        # (old) command name + space chars
  ($Square)              # mandatory square (e.g. 'a4')
  (?:\\ +($Square))?     # optional: another (destination) square
  (?:\\ *($Color))?      # optional: color name
  $EndTag                # closing tag
  "
  # Proposed new version, according to the
  # PGN Specification and Implementation Guide (Supplement):
  variable StdCmdRegex \
      "${StartTag}            # leading tag
  ${Command}             # command name
  \\                     # a space character
  (?:(${Type}|$Text),)?  # keyword, e.g. 'arrow' (may be omitted)
  # or single char (indicating type 'text')
  ($Square)              # mandatory square (e.g. 'a4')
  (?:,($Square))?        # optional: (destination) square
  (?:,($Color))?         # optional: color name
  $EndTag                # closing tag
  "

  # ChessBase' syntax for markers and arrows
  variable CBSquare    {csl}
  variable CBarrow     {cal}
  variable CBColor     {[GRY]}
  variable Square      {[a-h][1-8]\M}
  variable sqintern    {[a-h][1-8]}

  variable CBSquareRegex \
     "$StartTag
     ($CBSquare)\\\ +
     ($CBColor)
     ($Square)
     (?:,($CBColor)($Square))?
     $EndTag
     "

  variable CBArrowRegex \
     "$StartTag
     ($CBarrow)\\\ +
     ($CBColor)
     ($sqintern)
     ($sqintern)
     $EndTag
     "
}

# ::board::mark::getEmbeddedCmds --
#
#	Scans a game comment string and extracts embedded commands
#	used by Scid to mark squares or draw arrows.
#
# Arguments:
#	comment     The game comment string, containing
#	            embedded commands, e.g.:
#	            	[%mark e4 green],
#	            	[%arrow c4 f7],
#	            	[%draw e4],
#	            	[%draw circle,f7,blue].
# Results:
#	Returns a list of embedded Scid commands,
#		{command indices ?command indices...?},
#	where 'command' is a list representing the embedded command:
#		'{type square ?arg? color}',
#		e.g. '{circle f7 red}' or '{arrow c4 f7 green}',
#	and 'indices' is a list containing start and end position
#	of the command string within the comment.
#
proc ::board::mark::getEmbeddedCmds {comment} {
  if {$comment == ""} {return}
  variable ScidCmdRegex
  variable StdCmdRegex
  variable CBSquareRegex
  variable CBArrowRegex
  set result {}
  
  # Build regex and search script for embedded commands:
  set regex  ""
  foreach r [list $ScidCmdRegex $StdCmdRegex $CBSquareRegex $CBArrowRegex] {
    if {[string equal $regex ""]} {set regex $r} else {append regex "|$r"}
  }
  set locateScript  {regexp -expanded -indices -start $start \
        $regex $comment indices}
  
  # Loop over all embedded commands contained in comment string:
  
  for {set start 0} {[eval $locateScript]} {incr start} {
    foreach {first last} $indices {}	;# just a multi-assign
    foreach re [list $ScidCmdRegex $StdCmdRegex $CBSquareRegex $CBArrowRegex] {
      # Assing matching subexpressions to variables:
      if {![regexp -expanded $re [string range $comment $first $last] \
            match type arg1 arg2 color]} {
        continue
      }
      # CB uses rotated arguments. Bring them in order
      if {[string equal $type "csl"] || [string equal $type "cal"]} {
         set dummy1 $arg1
         set dummy2 $arg2
         set dummy3 $color
         set color $dummy1
         set arg1  $dummy2
         set arg2  $dummy3
         if {[string equal $type "csl"]} {set type  "full"  }
         if {[string equal $type "cal"]} {set type  "arrow" }
         if {[string equal $color "R"]}  {set color "red"   }
         if {[string equal $color "G"]}  {set color "green" }
         if {[string equal $color "Y"]}  {set color "yellow"}
      }
      # Settings of (default) type and arguments:
      if {[string equal $color ""]}   { set color "red" }
      switch -glob -- $type {
        ""   {set type [expr {[string length $arg2] ? "arrow" : "full"}]}
        mark {set type "fu"	;# new syntax}
        ?    {if {[string length $arg2]} break else {
            set arg2 $type; set type "text"}
        }
      }
      # Construct result list:
      lappend result [list $type $arg1 $arg2 $color]
      lappend result $indices
      set start $last	;# +1 by for-loop
    }
  }
  return $result
}

# ::board::mark::remove --
#
#	Removes a specified mark.
#
# Arguments:
#	win	A frame containing a board '$win.bd'.
#	args	List of one or two squares.
# Results:
#	Appends a dummy mark to the bord's list of marks
#	which causes the add routine to delete all marks for
#	the specified square(s).
#
proc ::board::mark::remove {win args} {
  if {[llength $args] == 2} {
    eval add $win arrow $args nocolor 1
  } else {
    add $win DEL [lindex $args 0] "" nocolor 1
  }
}

# ::board::mark::add --
#
#	Draws arrow or mark on the specified square(s).
#
# Arguments:
#	win		A frame containing a board 'win.bd'.
#	args		What kind of mark:
#	  type  	  Either type id (e.g., square, circle) or
#			    a single character, which is of type 'text'.
#	  square	  Square number 0-63 (0=a1, 1=a2, ...).
#	  ?arg2?	  Optional: additional type-specific parameter.
#	  color 	  Color to use for marking the square (mandatory).
#	  ?new? 	  Optional: whether or not this mark should be
#			    added to the list of marks; defaults to 'true'.
# Results:
#	For a given square, mark type, color, and optional (type-specific)
#	destination arguments, creates the proper canvas object.
#
proc ::board::mark::add {win args} {
  # Rearrange list if "type" is simple character:
  if {[string length [lindex $args 0]] == 1} {
    # ... e.g.,  {c e4 red} --> {text e4 c red}
    set args [linsert $args 1 "text"]
    set args [linsert [lrange $args 1 end] 2 [lindex $args 0]]
  }
  # Add default arguments:
  if {![regexp true|false|1|0 [lindex $args end]]} {
    lappend args "true"
  }
  if {[llength $args] == 4} { set args [linsert $args 2 ""]}
  
  # Here we (should) have: args == <type> <square> ?<arg>? <color> <new>
  foreach {type square dest color new} $args {break}	;# assign
  if {[llength $args] != 5 } { return }
  
  set board $win.bd
  set type  [lindex $args 0]
  
  # Remove existing marks:
  if {$type == "arrow"} {
    $board delete "mark${square}:${dest}" "mark${dest}:${square}"
    if {[string equal $color "nocolor"]} { set type DEL }
  } else {
    $board delete "mark${square}"
    #not needed anymore
    #    ::board::colorSquare $win $square [::board::defaultColor $square]
  }
  
  switch -- $type {
    full    { ::board::colorSquare $win $square $color }
    DEL     { set new 1 }
    default {
      # Find a subroutine to draw the canvas object:
      set drawingScript "Draw[string totitle $type]"
      if {![llength [info procs $drawingScript]]} { return }
      
      # ... and try it:
      if {[catch {eval $drawingScript $board $square $dest $color}]} {
        return
      }
    }
  }
  if {$new} { lappend ::board::_mark($win) [lrange $args 0 end-1] }
}

# ::board::mark::DrawXxxxx --
#
#	Draws specified canvas object,
#	where "Xxxxx" is some required type, e.g. "Circle".
#
# Arguments:
#	pathName	Name of the canvas widget.
#	args		Type-specific arguments, e.g.
#				<square> <color>,
#				<square> <square> <color>,
#				<square> <char> <color>.
# Results:
#	Constructs and evaluates the proper canvas command
#	    "pathName create type coordinates options"
#	for the specified object.
#

# ::board::mark::DrawCircle --
#
proc ::board::mark::DrawCircle {pathName square color} {
  # Some "constants":
  set size 0.6	;# inner (enclosing) box size, 0.0 <  $size < 1.0
  set width 0.1	;# outline around circle, 0.0 < $width < 1.0
  
  set box [GetBox $pathName $square $size]
  lappend pathName create oval [lrange $box 0 3] \
      -tag [list mark circle mark$square p$square]
  if {$width > 0.5} {
    ;# too thick, draw a disk instead
    lappend pathName -fill $color
  } else {
    set width [expr {[lindex $box 4] * $width}]
    if {$width <= 0.0} {set width 1.0}
    lappend pathName -fill "" -outline $color -width $width
  }
  eval $pathName
}

# ::board::mark::DrawDisk --
#
proc ::board::mark::DrawDisk {pathName square color} {
  # Size of the inner (enclosing) box within the square:
  set size 0.6	;# 0.0 <  $size < 1.0 = size of rectangle

  set box [GetBox $pathName $square $size]
  eval $pathName \
      {create oval [lrange $box 0 3]} \
      -fill $color \
      {-tag [list mark disk mark$square p$square]}
}

# ::board::mark::DrawText --
# Pascal Georges : if shadow!="", try to make the text visible even if fg and bg colors are close
proc ::board::mark::DrawText {pathName square char color {size 0} {shadowColor ""}} {
  set box [GetBox $pathName $square 0.8]
  set len [expr {($size > 0) ? $size : int([lindex $box 4])}]
  set x   [lindex $box 5]
  set y   [lindex $box 6]
  $pathName delete text$square mark$square
  if {$shadowColor!=""} {
    eval $pathName \
        create text [expr $x+1] [expr $y+1] -fill $shadowColor \
        {-font [list helvetica $len bold]} \
        {-text [string index $char 0]}     \
        {-anchor c} \
        {-tag  [list mark text text$square mark$square p$square]}
    
  }
  eval $pathName \
      create text $x $y -fill $color     \
      {-font [list helvetica $len bold]} \
      {-text [string index $char 0]}     \
      {-anchor c} \
      {-tag  [list mark text text$square mark$square p$square]}
}

# ::board::mark::DrawArrow --
#
proc ::board::mark::DrawArrow {pathName from to color} {
  if {$from < 0  ||  $from > 63} { return }
  if {$to   < 0  ||  $to   > 63} { return }
  set coord [GetArrowCoords $pathName $from $to]
  eval $pathName \
      {create line $coord} \
      -fill $color -arrow last -width 2 \
      {-tag [list mark arrows "mark${from}:${to}"]}
}

# ::board::mark::DrawRectangle --
# Draws a rectangle surrounding the square
proc ::board::mark::DrawRectangle { pathName square color pattern } {
  if {$square < 0  ||  $square > 63} { puts "error square = $square" ; return }
  set box [::board::mark::GetBox $pathName $square]
  $pathName create rectangle [lindex $box 0] [lindex $box 1] [lindex $box 2] [lindex $box 3] \
      -outline $color -width $::highlightLastMoveWidth -dash $pattern -tag highlightLastMove
}

# ::board::mark::DrawTux --
#
image create photo tux16x16 -data \
    {R0lGODlhEAAQAPUyAAAAABQVFiIcBi0tLTc0Kj4+PkQ3CU9ADVVFD1hJFV1X
      P2pXFWJUKHttLnttOERERVVWWWRjYWlqcYNsGJR5GrSUIK6fXsKdGMCdI8er
      ItCuNtm2KuS6KebAKufBOvjJIfnNM/3TLP/aMP/lM+/We//lQ//jfoGAgJaU
      jpiYmqKipczBmv/wk97e3v//3Ojo6f/96P7+/v///wAAAAAAAAAAAAAAAAAA
      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEBADIALAAAAAAQABAAAAbm
      QJlMJpMBAAAAQCaTyWQymUwmAwQAAQAAIJPJZDKZTCYDQCInCQAgk8lkMplM
      JgMwOBoHACCTyYAymUwmkwEao5IFAADIZDKZTCaTAVQu2GsAAMhkMplMJgMU
      YrFY7AQAAGQymUwmA6RisVjsFQAAATKZTCYDBF6xWCwWewAAAJlMJjMoYrFY
      LBaDAAAAmUwW+oBWsVgsxlokFgCZTBYChS6oWCxmAn5CHYNMJhOJQiFS7JXS
      iEQjCkAmw3BCow0hAMiMNggAQCYDAAyTAwAASEwEAABAJpPJAAAAAACUAQAA
      gEwmCwIAOw==}
set ::board::mark::tux16x16 tux16x16

image create photo tux32x32 -data \
    {R0lGODlhIAAgAPU0AAAAABANAxERESAaBiwkCDAnCSQkJEM2DEA3GVBBDllJ
      EFNKLG5aFHBbFHpkFnZoMkBAQFBQUGBgYHBwcIBpF4xyGZ+DHZ+GKqmKHq+T
      Lb+hNsynJNSuJtu0J9+6NeW8Kc+wQPnMLPTJMP7QLv/UO//aVf/dYv/ifIiI
      hp+fn6+vr7+/v//lif/ol//rpM/Pz9/f3//22O/u6v/55f///////wAAAAAA
      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEBADUALAAAAAAgACAAAAb+
      wFqtVqvVarVarQYAAAAAAABQq9VqtVqtVqvVarVarVar1Wq1Wg0AAAAAAAAA
      AKjVarVarVar1YC1Wq1Wq9VqtVqtBgAAAAAAAAAAAGq1Wq1Wq9VqtVqtVqvV
      arVaDQAAAAAAAAAAAABqtVqtVqsBa7VarVar1Wq1Wq0GMMgighdtAgAAALVa
      rVar1Wq1Wq1Wq9VqtVqtBphEUpCUQQUAAAC1Wq1WA9ZqtVqtVqvVarVarVYD
      RBYejwahAgAAgFqtVqvVarVarVar1Wq1Wq1WAxRIIdFolAEAAABArQas1Wq1
      Wq1Wq9VqtVqtVqvVGqPRaDTSAAAAAKBWq9VqtVr+rVar1Wq1Wq1Wq9UMp9Fo
      xJIJAAAAAFir1Wq1Wq1Wq9VqtVqtVqvVABGaqzWj0SYAAAAAqNVqtVqtVqvV
      arVarVarAQQyGo1Go9FgAAAQAAAAarVarVar1Wq1Wq1WqwEAExqNRqPRaDSD
      AAAAAGq1Wq1Wq9VqtVqtVqsBAC8ajUaj0Wg0oAoAAAAAgFqtVqvVarVarVar
      AQACGo1Go9FoNBpNAAAAAIBarVar1Wq1Wq1WqwEAKhqNRqPRaEAajYYCAAAA
      AKBWq9VqtVqtVqvVAAIajUaj0Wg0Go22AgAAAACgVqvVarVarVarAQARGo1G
      o9GANBqNRpMBAAAAAAD+qNVqtVqtVqvVAAAUjUaj0Wg0Go1GowkAAAAAAKjV
      arVarVar1QgUFI1GowFpNBqNRqPRDAZDAAAA1Gq1Wq1Wq9VGo1HpRaPRaDQa
      jUY7iQAAwUMBANRqtVqtVhuFRqPR6LIC0mg0Go1Go5lGiYBlVAEAarVarVar
      jUaj0Wg0KqRoNBqNRqOZRqPRaPQBAGq1Wq1Wq41Go9FoBBxtADIajUaj0Uyj
      0Wg0Gn0YgFqtVqvVRqPRaDQajVw0Go1Go6VGo9FoNBqNOABArVar1Uaj0Qg4
      Go1GoxiNRntFBqPRaDQajT4KAKBWq9Vqo9FoNBqNRiOHASIAAAqj0Wg0CmGW
      AAAAoFar1WoYDlAUGo1Go1FFAAAAAInRaDT6EAAAAABQq9VqNQAAAHB0QqNO
      AQAAAACA0Gi0AQAAAECtVqvVajUgAAAAAAAAAAAAAAAAAAAAAAAAAIBarVar
      1Wq1Wq1WqwEAAAAAAKjVarUaAAAAAAC1Wq1Wq9VqwFqtVqvVarVarVar1Wq1
      Wq1Wq9VqtVqtVqvVarUgADs=
    }
set ::board::mark::tux32x32 tux32x32

proc ::board::mark::DrawTux {pathName square discard} {
  variable tux16x16
  variable tux32x32
  set box [::board::mark::GetBox $pathName $square]
  for {set len [expr {int([lindex $box 4])}]} {$len > 0} {incr len -1} {
    if {[info exists tux${len}x${len}]} break
  }
  if {!$len} return
  $pathName create image [lrange $box 5 6] \
      -image tux${len}x${len} \
      -tag [list mark "mark$square" tux]
}

# ::board::mark::GetArrowCoords --
#
#	Auxiliary function:
#	Similar to '::board::midSquare', but this function returns
#	coordinates of two (optional adjusted) squares.
#
# Arguments:
#	board	A board canvas ('win.bd' for a frame 'win').
#	from	Source square number (0-63).
#	to	Destination square number (0-63).
#	shrink	Optional shrink factor (0.0 - 1.0):
#		  0.0 = no shrink, i.e. just return midpoint coordinates,
#		  1.0 = start and end at edge (unless adjacent squares).
# Results:
#	Returns a list of coodinates {x1 y1 x2 y2} for drawing
#	an arrow "from" --> "to".
#
proc ::board::mark::GetArrowCoords {board from to {shrink 0.6}} {
  if {$shrink < 0.0} {set shrink 0.0}
  if {$shrink > 1.0} {set shrink 1.0}
  
  # Get left, top, right, bottom, length, midpoint_x, midpoint_y:
  set fromXY [GetBox $board $from]
  set toXY   [GetBox $board $to]
  # Get vector (dX,dY) = to(x,y) - from(x,y)
  # (yes, misusing the foreach multiple features)
  foreach {x0 y0} [lrange $fromXY 5 6] {x1 y1} [lrange $toXY 5 6] {break}
  set dX [expr {$x1 - $x0}]
  set dY [expr {$y1 - $y0}]
  
  # Check if we have good coordinates and shrink factor:
  if {($shrink == 0.0) || ($dX == 0.0 && $dY == 0.0)} {
    return [list $x0 $y0 $x1 $y1]
  }
  
  # Solve equation: "midpoint + (lamda * vector) = edge point":
  if {abs($dX) > abs($dY)} {
    set edge [expr {($dX > 0) ? [lindex $fromXY 2] : [lindex $fromXY 0]}]
    set lambda [expr {($edge - $x0) / $dX}]
  } else {
    set edge [expr {($dY > 0) ? [lindex $fromXY 3] : [lindex $fromXY 1]}]
    set lambda [expr {($edge - $y0) / $dY}]
  }
  
  # Check and adjust shrink factor for adjacent squares
  # (i.e. don't make arrows too short):
  set maxShrinkForAdjacent 0.667
  if {$shrink > $maxShrinkForAdjacent} {
    set dFile [expr {($to % 8) - ($from % 8)}]
    set dRank [expr {($from / 8) - ($to / 8)}]
    if {(abs($dFile) <= 1) && (abs($dRank) <= 1)} {
      set shrink $maxShrinkForAdjacent
    }
  }
  
  # Return shrinked line coordinates {x0', y0', x1', y1'}:
  set shrink [expr {$shrink * $lambda}]
  return [list [expr {$x0 + $shrink * $dX}] [expr {$y0 + $shrink * $dY}]\
      [expr {$x1 - $shrink * $dX}] [expr {$y1 - $shrink * $dY}]]
}

# ::board::mark::GetBox --
#
#	Auxiliary function:
#	Get coordinates of an inner box for a specified square.
#
# Arguments:
#	pathName	Name of a canvas widget containing squares.
#	square		Square number (0..63).
#	portion		Portion (length inner box) / (length square)
#			(1.0 means: box == square).
# Results:
#	Returns a list whose elements are upper left and lower right
#	corners, length, and midpoint (x,y) of the inner box.
#
proc ::board::mark::GetBox {pathName square {portion 1.0}} {
  set coord [$pathName coords sq$square]
  set len [expr {[lindex $coord 2] - [lindex $coord 0]}]
  if {$portion < 1.0} {
    set dif [expr {$len * (1.0 -$portion) * 0.5}]
    foreach i {0 1} { lappend box [expr {[lindex $coord $i] + $dif}] }
    foreach i {2 3} { lappend box [expr {[lindex $coord $i] - $dif}] }
  } else {
    set box $coord
  }
  lappend box [expr { [lindex $box 2] - [lindex $box 0]     }]
  lappend box [expr {([lindex $box 0] + [lindex $box 2]) / 2}]
  lappend box [expr {([lindex $box 1] + [lindex $box 3]) / 2}]
  return $box
}

### End of namespace ::board::mark

# ::board::piece {w sq}
#   Given a board and square number, returns the piece type
#   (e for empty, wp for White Pawn, etc) of the square.
proc ::board::piece {w sq} {
  set p [string index $::board::_data($w) $sq]
  return $::board::letterToPiece($p)
}

# ::board::setDragSquare
#   Sets the square from whose piece should be dragged.
#   To drag nothing, the square value should be -1.
#   If the previous value is a valid square (0-63), the
#   piece being dragged is returned to its home square first.
#
proc ::board::setDragSquare {w sq} {
  set oldSq $::board::_drag($w)
  if {$oldSq >= 0  &&  $oldSq <= 63} {
    ::board::drawPiece $w $oldSq [string index $::board::_data($w) $oldSq]
    $w.bd raise arrows
  }
  set ::board::_drag($w) $sq
}

# ::board::dragPiece
#   Drags the piece of the drag-square (as set above) to
#   the specified global (root-window) screen cooordinates.
#
proc ::board::dragPiece {w x y} {
  set sq $::board::_drag($w)
  if {$sq < 0} { return }
  set x [expr {$x - [winfo rootx $w.bd]} ]
  set y [expr {$y - [winfo rooty $w.bd]} ]
  $w.bd coords p$sq $x $y
  $w.bd raise p$sq
}

# ::board::bind
#   Binds the given event on the given square number to
#   the specified action.
#
proc ::board::bind {w sq event action} {
  if {$sq == "all"} {
    for {set i 0} {$i < 64} {incr i} {
      $w.bd bind p$i $event $action
    }
  } else {
    $w.bd bind p$sq $event $action
  }
}

# ::board::drawPiece
#   Draws a piece on a specified square.
#
proc ::board::drawPiece {w sq piece} {
  set psize $::board::_size($w)
  set flip $::board::_flip($w)
  # Compute the XY coordinates for the centre of the square:
  set midpoint [::board::midSquare $w $sq]
  set xc [lindex $midpoint 0]
  set yc [lindex $midpoint 1]
  # Delete any old image for this square, and add the new one:
  $w.bd delete p$sq
  $w.bd create image $xc $yc -image $::board::letterToPiece($piece)$psize -tag p$sq
}

# ::board::clearText
#   Remove all text annotations from the board.
#
proc ::board::clearText {w} {
  $w.bd delete texts
}

# ::board::drawText
#   Draws the specified text on the specified square.
#   Additional arguments are treated as canvas text parameters.
#
proc ::board::drawText {w sq text color args {shadow ""} } {
  mark::DrawText ${w}.bd $sq $text $color \
      [expr {[catch {font actual font_Bold -size} size] ? 11 : $size}] \
      $shadow
  #if {[llength $args] > 0} {
  #  catch {eval $w.bd itemconfigure text$sq $args}
  #}
}

# Highlight last move played by drawing a red rectangle around the two squares
proc  ::board::lastMoveHighlight {w} {
  $w.bd delete highlightLastMove
  if { ! $::highlightLastMove } {return}
  set moveuci [ sc_game info previousMoveUCI ]
  if {[string length $moveuci] >= 4} {
    set moveuci [ string range $moveuci 0 3 ]
    set square1 [ ::board::sq [string range $moveuci 0 1 ] ]
    set square2 [ ::board::sq [string range $moveuci 2 3 ] ]
    ::board::mark::DrawRectangle $w.bd $square1 $::highlightLastMoveColor $::highlightLastMovePattern
    ::board::mark::DrawRectangle $w.bd $square2 $::highlightLastMoveColor $::highlightLastMovePattern
    if { ! $::arrowLastMove } {return} 
    ::board::mark::DrawArrow $w.bd $square1 $square2 $::highlightLastMoveColor
  }
}

# ::board::update
#   Update the board given a 64-character board string as returned
#   by the "sc_pos board" command. If the board string is empty, it
#   defaults to the previous value for this board.
#   If the optional paramater "animate" is 1 and the changes from
#   the previous board state appear to be a valid chess move, the
#   move is animated.
#
proc ::board::update {w {board ""} {animate 0}} {  
  set oldboard $::board::_data($w)
  if {$board == ""} {
    set board $::board::_data($w)
  } else {
    set ::board::_data($w) $board
  }
  set psize $::board::_size($w)
  set flip $::board::_flip($w)
  
  # Cancel any current animation:
  after cancel "::board::_animate $w"
  
  # Remove all marks (incl. arrows) from the board:
  $w.bd delete mark
  
  # Draw each square:
  for {set sq 0} { $sq < 64 } { incr sq } {
    set piece [string index $board $sq]
    # Compute the XY coordinates for the centre of the square:
    set midpoint [::board::midSquare $w $sq]
    set xc [lindex $midpoint 0]
    set yc [lindex $midpoint 1]
    #update every square with color and texture
    set color [::board::defaultColor $sq]
    $w.bd itemconfigure sq$sq -fill $color -outline "" ; #-outline $color
    
    set boc bgd$psize
    if { ($sq + ($sq / 8)) % 2 } { set boc bgl$psize }
    $w.bd delete br$sq
    $w.bd create image $xc $yc -image $boc -tag br$sq
    
    # Delete any old image for this square, and add the new one:
    $w.bd delete p$sq
    $w.bd create image $xc $yc -image $::board::letterToPiece($piece)$psize -tag p$sq
  }
  
  # Update side-to-move icon:
  grid remove $w.wtm $w.btm
  if {$::board::_stm($w)} {
    set side [string index $::board::_data($w) 65]
    if {$side == "w"} { grid configure $w.wtm }
    if {$side == "b"} { grid configure $w.btm }
  }
  
  # Redraw marks and arrows if required:
  if {$::board::_showMarks($w)} {
    foreach mark $::board::_mark($w) {
      set type  [lindex $mark 0]
      if {$type == "full"}    { 
        ::board::colorSquare $w [lindex $mark 1] [lindex $mark 3]
      } else {
        # Find a subroutine to draw the canvas object:
        set drawingScript "mark::Draw[string totitle $type]"
        if {[llength [info procs $drawingScript]]} {
          catch {eval $drawingScript $w.bd [join [lrange $mark 1 3]]}  
        }
      }
    } 
  }
  
  # Redraw last move highlight if mainboard
  if { $w == ".main.board"} {
    ::board::lastMoveHighlight $w
  }
  
  # Redraw material values
  if {$::board::_showmat($w)} {
    # grid remove $w.mat
    if {$::gameInfo(showMaterial)} {
      # grid configure $w.mat
      ::board::material $w
    }
  }
  
  # Animate board changes if requested:
  if {$animate  &&  $board != $oldboard} {
    ::board::animate $w $oldboard $board
  }
}

proc ::board::isFlipped {w} {
  return $::board::_flip($w)
}

# ::board::flip
#   Rotate the board 180 degrees.
#
proc ::board::flip {w {newstate -1}} {
  if {! [info exists ::board::_flip($w)]} { return }
  if {$newstate == $::board::_flip($w)} { return }
  set flip [expr {1 - $::board::_flip($w)} ]
  set ::board::_flip($w) $flip
  
  # Swap squares:
  for {set i 0} {$i < 32} {incr i} {
    set swap [expr {63 - $i}]
    set coords(South) [$w.bd coords sq$i]
    set coords(North) [$w.bd coords sq$swap]
    $w.bd coords sq$i    $coords(North)
    $w.bd coords sq$swap $coords(South)
  }
  
  # Change coordinate labels:
  for {set i 1} {$i <= 8} {incr i} {
    set value [expr {9 - [$w.lrank$i cget -text]} ]
    $w.lrank$i configure -text $value
    $w.rrank$i configure -text $value
  }
  if {$flip} {
    foreach file {a b c d e f g h} newvalue {h g f e d c b a} {
      $w.tfile$file configure -text $newvalue
      $w.bfile$file configure -text $newvalue
      grid configure $w.wtm -row 1
      grid configure $w.btm -row 8
    }
  } else {
    foreach file {a b c d e f g h} {
      $w.tfile$file configure -text $file
      $w.bfile$file configure -text $file
      grid configure $w.wtm -row 8
      grid configure $w.btm -row 1
    }
  }
  ::board::update $w
  return $w
}
################################################################################
# ::board::material
# displays material balance
################################################################################
proc ::board::material {w} {
  set f $w.mat
  
  $f delete material
  
  if {! $::gameInfo(showMaterial)} { return }
  set fen [lindex [sc_pos fen] 0]
  set p 0
  set n 0
  set b 0
  set r 0
  set q 0
  for {set i 0} {$i < [string length $fen]} {incr i} {
    set ch [string index $fen $i]
    switch -- $ch {
      p {incr p -1}
      P {incr p}
      n {incr n -1}
      N {incr n}
      b {incr b -1}
      B {incr b}
      r {incr r -1}
      R {incr r}
      q {incr q -1}
      Q {incr q}
    }
  }
  set sum [expr abs($p) + abs($n) +abs($b) +abs($r) +abs($q) ]
  set rank 0
  addMaterial $q "q" $f $rank $sum
  incr rank [expr abs($q) ]
  addMaterial $r "r" $f $rank $sum
  incr rank [expr abs($r) ]
  addMaterial $b "b" $f $rank $sum
  incr rank [expr abs($b) ]
  addMaterial $n "n" $f $rank $sum
  incr rank [expr abs($n) ]
  addMaterial $p "p" $f $rank $sum
}
################################################################################
#
################################################################################
proc ::board::addMaterial {count piece parent rank sum} {
  if {$count == 0} {return}
  if {$count <0} {
    set col "b"
    set count [expr 0 - $count ]
  } else  {
    set col "w"
  }
  set w [$parent cget -width]
  set h [$parent cget -height]
  set offset [expr ($h - ($sum * 20)) / 2]
  if {$offset <0} { set offset 0 }
  set x [expr $w / 2]
  for {set i 0} {$i<$count} {incr i} {
    set y [expr $rank * 20 +10 + $offset + $i * 20]
    $parent create image $x $y -image $col${piece}20 -tag material
  }
}

################################################################################
#
################################################################################

# ::board::stm
#   Add or remove the side-to-move icon.
#
proc ::board::stm {w} {
  set stm [expr {1 - $::board::_stm($w)} ]
  set ::board::_stm($w) $stm
  if {$stm} {
    grid configure $w.stmgap
    grid configure $w.stm
  } else {
    grid remove $w.stmgap $w.stm $w.wtm $w.btm
  }
  ::board::update $w
}

# ::board::coords
#   Add or remove coordinates around the edge of the board.
# Toggle between 0,1,2.
proc ::board::coords {w} {
  set coords [expr {1 + $::board::_coords($w)} ]
  if { $coords > 2 } { set coords 0 }
  set ::board::_coords($w) $coords
  
  if {$coords == 0 } {
    for {set i 1} {$i <= 8} {incr i} {
      grid configure $w.lrank$i
      grid configure $w.rrank$i
    }
    foreach i {a b c d e f g h} {
      grid configure $w.tfile$i
      grid configure $w.bfile$i
    }
  } elseif {$coords == 1 } {
    for {set i 1} {$i <= 8} {incr i} {
      grid remove $w.lrank$i
      grid remove $w.rrank$i
    }
    foreach i {a b c d e f g h} {
      grid remove $w.tfile$i
      grid remove $w.bfile$i
    }
  } else { #Klimmek: coords == 2 then show left and bottom
    for {set i 1} {$i <= 8} {incr i} {
      grid configure $w.lrank$i
      grid remove $w.rrank$i
    }
    foreach i {a b c d e f g h} {
      grid remove $w.tfile$i
      grid configure $w.bfile$i
    }
  }
}

# ::board::animate
#   Check for board changes that appear to be a valid chess move,
#   and start animating the move if applicable.
#
proc ::board::animate {w oldboard newboard} {
  global animateDelay
  if {$animateDelay <= 0} { return }
  
  # Find which squares differ between the old and new boards:
  set diffcount 0
  set difflist [list]
  for {set i 0} {$i < 64} {incr i} {
    if {[string index $oldboard $i] != [string index $newboard $i]} {
      incr diffcount
      lappend difflist $i
    }
  }
  
  # Check the number of differences could mean a valid move:
  if {$diffcount < 2  ||  $diffcount > 4} { return }
  
  for {set i 0} {$i < $diffcount} {incr i} {
    set sq($i) [lindex $difflist $i]
    set old($i) [string index $oldboard $sq($i)]
    set new($i) [string index $newboard $sq($i)]
  }
  
  set from -1
  set to -1
  set captured -1
  set capturedPiece "."
  
  if {$diffcount == 4} {
    # Check for making/unmaking a castling move:
    set castlingList [list [sq e1] [sq g1] [sq h1] [sq f1] \
        [sq e8] [sq g8] [sq h8] [sq f8] \
        [sq e1] [sq c1] [sq a1] [sq d1] \
        [sq e8] [sq c8] [sq a8] [sq d8]]
    
    foreach {kfrom kto rfrom rto} $castlingList {
      if {[lsort $difflist] == [lsort [list $kfrom $kto $rfrom $rto]]} {
        if {[string tolower [string index $oldboard $kfrom]] == "k"  &&
          [string tolower [string index $oldboard $rfrom]] == "r"  &&
          [string tolower [string index $newboard $kto]] == "k"  &&
          [string tolower [string index $newboard $rto]] == "r"} {
          # A castling move animation.
          # Move the rook back to initial square until animation is complete:
          # TODO: It may look nicer if the rook was animated as well...
          eval $w.bd coords p$rto [::board::midSquare $w $rfrom]
          set from $kfrom
          set to $kto
        } elseif {[string tolower [string index $newboard $kfrom]] == "k"  &&
          [string tolower [string index $newboard $rfrom]] == "r"  &&
          [string tolower [string index $oldboard $kto]] == "k"  &&
          [string tolower [string index $oldboard $rto]] == "r"} {
          # An undo-castling animation. No need to move the rook.
          set from $kto
          set to $kfrom
        }
      }
    }
  }
  
  if {$diffcount == 3} {
    # Three squares are different, so check for an En Passant capture:
    foreach i {0 1 2} {
      foreach j {0 1 2} {
        foreach k {0 1 2} {
          if {$i == $j  ||  $i == $k  ||  $j == $k} { continue }
          # Check for an en passant capture from i to j with the enemy
          # pawn on k:
          if {$old($i) == $new($j) && $old($j) == "." && $new($k) == "."  &&
            (($old($i) == "p" && $old($k) == "P") ||
            ($old($i) == "P" && $old($k) == "p"))} {
            set from $sq($i)
            set to $sq($j)
          }
          # Check for undoing an en-passant capture from j to i with
          # the enemy pawn on k:
          if {$old($i) == $new($j) && $old($k) == "." && $new($i) == "."  &&
            (($old($i) == "p" && $new($k) == "P") ||
            ($old($i) == "P" && $new($k) == "p"))} {
            set from $sq($i)
            set to $sq($j)
            set captured $sq($k)
            set capturedPiece $new($k)
          }
        }
      }
    }
  }
  
  if {$diffcount == 2} {
    # Check for a regular move or capture: one old square should have the
    # same (non-empty) piece as the other new square, and at least one
    # of the old or new squares should be empty.
    
    if {$old(0) != "." && $old(1) != "." && $new(0) != "." && $new(1) != "."} {
      return
    }
    
    foreach i {0 1} {
      foreach j {0 1} {
        if {$i == $j} { continue }
        if {$old($i) == $new($j)  &&  $old($i) != "."} {
          set from $sq($i)
          set to $sq($j)
          set captured $sq($j)
          set capturedPiece $old($j)
        }
        
        # Check for a (white or black) pawn promotion from i to j:
        if {($old($i) == "P"  &&  [string is upper $new($j)]  &&
          $sq($j) >= [sq a8]  &&  $sq($j) <= [sq h8])  ||
          ($old($i) == "p"  &&  [string is lower $new($j)]  &&
          $sq($j) >= [sq a1]  &&  $sq($j) <= [sq h1])} {
          set from $sq($i)
          set to $sq($j)
        }
        
        # Check for undoing a pawn promotion from j to i:
        if {($new($j) == "P"  &&  [string is upper $old($i)]  &&
          $sq($i) >= [sq a8]  &&  $sq($i) <= [sq h8])  ||
          ($new($j) == "p"  &&  [string is lower $old($i)]  &&
          $sq($i) >= [sq a1]  &&  $sq($i) <= [sq h1])} {
          set from $sq($i)
          set to $sq($j)
          set captured $sq($j)
          set capturedPiece $old($j)
        }
      }
    }
  }
  
  # Check that we found a valid-looking move to animate:
  if {$from < 0  ||  $to < 0} { return }
  
  # Redraw the captured piece during the animation if necessary:
  if {$capturedPiece != "."  &&  $captured >= 0} {
    ::board::drawPiece $w $from $capturedPiece
    eval $w.bd coords p$from [::board::midSquare $w $captured]
  }
  
  # Move the animated piece back to its starting point:
  eval $w.bd coords p$to [::board::midSquare $w $from]
  $w.bd raise p$to
  
  # Remove side-to-move icon while animating:
  grid remove $w.wtm $w.btm
  
  # Start the animation:
  set start [clock clicks -milli]
  set ::board::_animate($w,start) $start
  set ::board::_animate($w,end) [expr {$start + $::animateDelay} ]
  set ::board::_animate($w,from) $from
  set ::board::_animate($w,to) $to
  ::board::_animate $w
}

# ::board::_animate
#   Internal procedure for updating a board move animation.
#
proc ::board::_animate {w} {
  if {! [winfo exists $w]} { return }
  set from $::board::_animate($w,from)
  set to $::board::_animate($w,to)
  set start $::board::_animate($w,start)
  set end $::board::_animate($w,end)
  set now [clock clicks -milli]
  if {$now > $end} {
    ::board::update $w
    return
  }
  
  # Compute where the moving piece should be displayed and move it:
  set ratio [expr {double($now - $start) / double($end - $start)} ]
  set fromMid [::board::midSquare $w $from]
  set toMid [::board::midSquare $w $to]
  set fromX [lindex $fromMid 0]
  set fromY [lindex $fromMid 1]
  set toX [lindex $toMid 0]
  set toY [lindex $toMid 1]
  set x [expr {$fromX + round(($toX - $fromX) * $ratio)} ]
  set y [expr {$fromY + round(($toY - $fromY) * $ratio)} ]
  $w.bd coords p$to $x $y
  $w.bd raise p$to
  
  # Schedule another animation update in a few milliseconds:
  after 5 "::board::_animate $w"
}

# Capture board screenshot.
# Based on code from David Easton:
# http://wiki.tcl.tk/9127

set window_image_support 1
if { [catch {package require img::window}] } {
  set window_image_support 0
}

if {!$png_image_support || !$window_image_support} {
  .menu.tools entryconfig [tr ToolsCaptureBoard] -state disabled
  ::splash::add "Capture Current Board is disabled."
}

proc captureWidget { widget image px py } {

  if {![winfo ismapped $widget]} {
    return
  }

  regexp {([0-9]*)x([0-9]*)\+([0-9]*)\+([0-9]*)} [winfo geometry $widget] - w h x y

  incr px $x
  incr py $y

  # Make an image from this widget
  set tempImage [image create photo -format window -data $widget]

  # Copy this image into place on the main image
  $image copy $tempImage -to $px $py
  image delete $tempImage

  foreach child [winfo children $widget] {
    captureWidget $child $image $px $py
  }
}

proc boardToFile { format filepath } {

  set w .main.board
  set board $w.bd

  if { $format == "" } {
    set format png
  }
  set filename $filepath

  # Make the base image based on the board
  ::board::update $w
  update idletask
  set image [image create photo -format window -data $board]

  if { $filename == "" } {
    # set types {{"Image Files" {.$format}}}
    set types {{"All Files" {*}}}
    set filename [tk_getSaveFile -filetypes $types \
                                 -initialfile current_board.$format \
                                 -defaultextension .$format \
                                 -title "Scid: Save Current Board:"]
  }

  if {[llength $filename]} {
    if {[catch {$image write -format $format $filename} result ]} {
      tk_messageBox -type ok -icon error -title "Scid" -message $result
    }
  }
  image delete $image
}


###
### End of file: board.tcl
###
# This file is part of Scid (Shane's Chess Information Database).
#
# Scid 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.
#
# Scid 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 for more details.
#
# You should have received a copy of the GNU General Public License
# along with Scid.  If not, see <http://www.gnu.org/licenses/>.

### move.tcl
### Functions for moving within a game.

namespace eval ::move {}

proc ::move::drawVarArrows {} {
  if {! $::showVarArrows || $::autoplayMode} { return 0 }
	if {[winfo exists .coachWin]} { return 0 }
	if {[winfo exists .serGameWin]} { return 0 }
	
	set bDrawArrow 0
  set varList [sc_var list UCI]

	if {$varList != ""} {		
		set move [sc_game info nextMoveUCI]
		if {$move != ""} { set varList [linsert $varList 0 $move] }		
		foreach { move } $varList {
			set bDrawn 0			
			set sq_start [ ::board::sq [ string range $move 0 1 ] ]
			set sq_end [ ::board::sq [ string range $move 2 3 ] ]
		    foreach mark $::board::_mark(.main.board) {
		    	if { [lindex $mark 0] == "arrow" } {
					if {[lindex $mark 1] == $sq_start && [lindex $mark 2] == $sq_end} { 
						set bDrawn 1
						break
					}
				}
			}
			if {! $bDrawn } { set bDrawArrow 1; break }
		}
  }
  
	return $bDrawArrow
}

proc ::move::showVarArrows {} {
   	set move [sc_game info nextMoveUCI]
  	if {$move != ""} {
  		set sq_start [ ::board::sq [ string range $move 0 1 ] ]
		set sq_end [ ::board::sq [ string range $move 2 3 ] ]
	    ::board::mark::add ".main.board" "arrow" $sq_start $sq_end "green"  		
	}
	set varList [sc_var list UCI]  
	foreach { move } $varList {
		set sq_start [ ::board::sq [ string range $move 0 1 ] ]
		set sq_end [ ::board::sq [ string range $move 2 3 ] ]
	    ::board::mark::add ".main.board" "arrow" $sq_start $sq_end "blue"
	}
}

proc ::move::Start {} {
  if {[winfo exists .coachWin]} {
    set ::tacgame::analysisCoach(paused) 1
    .coachWin.fbuttons.resume configure -state normal
  }
  
  sc_move start
  updateBoard
  if {[::move::drawVarArrows]} { ::move::showVarArrows }
}

proc ::move::End {} { 
  sc_move end
  updateBoard
  if {[::move::drawVarArrows]} { ::move::showVarArrows }
}

proc ::move::ExitVar {} {
  sc_var exit; 
  updateBoard -animate; 
  if {[::move::drawVarArrows]} { ::move::showVarArrows }
}

proc ::move::Back {{count 1}} {
  if {[sc_pos isAt start]} { return } 
  if {[sc_pos isAt vstart]} { ::move::ExitVar; return }
  
  ### todo: if playing, remove this move from hash array S.A ??
  
  if {[winfo exists .coachWin]} {
    set ::tacgame::analysisCoach(paused) 1
    .coachWin.fbuttons.resume configure -state normal
    # mess with game clocks ???
  }
  
  sc_move back $count
  
  if {$count == 1} {
    # Do animation and speech:
    updateBoard -animate
    ::utils::sound::AnnounceBack
  } else {
    updateBoard
  }

  if {[::move::drawVarArrows]} { ::move::showVarArrows }
}
################################################################################
# 
################################################################################
proc ::move::Forward {{count 1}} {
  global autoplayMode
  
  if {[sc_pos isAt end]  ||  [sc_pos isAt vend]} { return }
  
  set bArrows [::move::drawVarArrows]
  
  set move [sc_game info next]
  if {$count == 1} {
    if {[sc_var count] != 0 && ! $autoplayMode && $::showVarPopup} {
      ::commenteditor::storeComment
      showVars
      set bArrows $::showVarArrows 
    } else {    
      if {! $bArrows} { sc_move forward }
    }    
    
    # Animate and speak this move:
    updateBoard -animate
    ::utils::sound::AnnounceForward $move
  } else {
    if {! $bArrows} { sc_move forward $count }
    updateBoard
  }
  if {$bArrows} { ::move::showVarArrows }
}

###
###
### main.tcl: Routines for creating and updating the main window.
###

############################################################
# Keyboard move entry:
#   Handles letters, digits and BackSpace/Delete keys.
#   Note that king- and queen-side castling moves are denoted
#   "OK" and "OQ" respectively.
#   The letters n, r, q, k, o and l are promoted to uppercase
#   automatically. A "b" can match to a b-pawn or Bishop move,
#   so in some rare cases, a capital B may be needed for the
#   Bishop move to distinguish it from the pawn move.

set moveEntry(Text) ""
set moveEntry(List) {}

# Bind Alt+letter key to nothing, to stop Alt+letter from
# matching the move entry bindings, so Alt+letter ONLY invokes
# the menus:
foreach key {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
    bind $dot_w <Alt-$key> {
        # nothing
    }
}

proc moveEntry_Clear {} {
    global moveEntry
    set moveEntry(Text) ""
    set moveEntry(List) {}
}

proc moveEntry_Complete {} {
    global moveEntry
    
    if { ! [::fics::playerCanMove] || ! [::reviewgame::playerCanMove] } { ;# not player's turn
        moveEntry_Clear
        return
    }
    
    set len [llength $moveEntry(List)]
    if {$len > 0} {
        if {$moveEntry(AutoExpand)} {
            # Play a bell sound to let the user know the move was accepted already,
            # but only if move announcement is off?
            # bell
        }
        set move [lindex $moveEntry(List) 0]
        if {$move == "OK"} { set move "O-O" }
        if {$move == "OQ"} { set move "O-O-O" }
        set action "replace"
        if {![sc_pos isAt vend]} { set action [confirmReplaceMove] }
        if {$action == "replace"} {
            undoFeature save
            sc_move addSan $move
        } elseif {$action == "var"} {
            undoFeature save
            sc_var create
            sc_move addSan $move
        } elseif {$action == "mainline"} {
            undoFeature save
            sc_var create
            sc_move addSan $move
            sc_var exit
            sc_var promote [expr {[sc_var count] - 1}]
            sc_move forward 1
        }
        
        # Now send the move done to FICS and NOVAG Citrine
        set promoletter ""
        set moveuci [sc_game info previousMoveUCI]
        if { [ string length $moveuci ] == 5 } {
            set promoletter [ string tolower [ string index $moveuci end ] ]
        }
        if { [winfo exists .fics] } {
            if { [::fics::playerCanMove] } {
                if { $promoletter != "" } {
                    ::fics::writechan "promote $promoLetter"
                }
                ::fics::writechan [ string range $moveuci 0 3 ]
            }
        }
        
        if {$::novag::connected} {
            ::novag::addMove "[ string range $moveuci 0 3 ]$promoLetter"
        }
        
        moveEntry_Clear
        updateBoard -pgn -animate
        ::utils::sound::AnnounceNewMove $move
        if {$action == "replace"} { ::tree::doTraining }
    }
}

proc moveEntry_Backspace {} {
    global moveEntry
    set moveEntry(Text) [string range $moveEntry(Text) 0 \
            [expr {[string length $moveEntry(Text)] - 2}]]
    set moveEntry(List) [sc_pos matchMoves $moveEntry(Text) $moveEntry(Coord)]
    updateStatusBar
}

proc moveEntry_Char {ch} {
    global moveEntry
    set oldMoveText $moveEntry(Text)
    set oldMoveList $moveEntry(List)
    append moveEntry(Text) $ch
    set moveEntry(List) [sc_pos matchMoves $moveEntry(Text) $moveEntry(Coord)]
    set len [llength $moveEntry(List)]
    if {$len == 0} {
        # No matching moves, so do not accept this character as input:
        set moveEntry(Text) $oldMoveText
        set moveEntry(List) $oldMoveList
    } elseif {$len == 1} {
        # Exactly one matching move, so make it if AutoExpand is on,
        # or if it equals the move entered. Note the comparison is
        # case insensitive to allow for 'b' to match both pawn and
        # Bishop moves.
        set move [string tolower [lindex $moveEntry(List) 0]]
        
        if {$moveEntry(AutoExpand) > 0  ||
            ![string compare [string tolower $moveEntry(Text)] $move]} {
            moveEntry_Complete
        }
    } elseif {$len == 2} {
        # Check for the special case where the user has entered a b-pawn
        # capture that clashes with a Bishop move (e.g. bxc4 and Bxc4):
        set first [string tolower [lindex $moveEntry(List) 0]]
        set second [string tolower [lindex $moveEntry(List) 1]]
        if {[string equal $first $second]} {
            set moveEntry(List) [list $moveEntry(Text)]
            moveEntry_Complete
        }
    }
    updateStatusBar
}

# updateTitle:
#   Updates the main Scid window title.
#
proc updateTitle {} {
    set title "Scid - "
    set fname [sc_base filename]
    set fname [file tail $fname]
    append title "$fname ($::tr(game) "
    append title "[::utils::thousands [sc_game number]] / "
    append title "[::utils::thousands [sc_base numGames]])"
    ::setTitle . $title
    set white [sc_game info white]
    set black [sc_game info black]
    if {[string length $white] > 2 &&  [string length $black] > 2} {
        if {$fname == {[clipbase]} } { set fname clipbase }
        ::setTitle .main "($fname): $white -- $black"
    } else {
        ::setTitle .main $title
    }
}

# updateStatusBar:
#   Updates the main Scid window status bar.
#
proc updateStatusBar {} {
    global statusBar moveEntry
    set statusBar "  "
    
    if {$moveEntry(Text) != ""} {
        append statusBar "Enter move: \[" $moveEntry(Text) "\]  "
        foreach thisMove $moveEntry(List) {
            append statusBar $thisMove " "
        }
        return
    }
    
    # Check if translations have not been set up yet:
    if {! [info exists ::tr(Database)]} { return }
    
    # Show "%%" if base is read-only, "XX" if game altered, "--" otherwise:
    if {[sc_base isReadOnly]} {
        append statusBar "%%"
    } elseif {[sc_game altered]} {
        append statusBar "XX"
    } else {
        append statusBar "--"
    }
    
    set current [sc_base current]
    append statusBar "  $::tr(Database)"
    if {$current != [sc_info clipbase]} {
        append statusBar " $current"
    }
    append statusBar ": "
    set fname [sc_base filename]
    set fname [file tail $fname]
    if {$fname == ""} { set fname "<none>" }
    append statusBar $fname
}


proc toggleRotateBoard {} {
    ::board::flip .main.board
}

proc toggleCoords {} {
    global boardCoords
    set coords [expr {1 + $boardCoords} ]
    if { $coords > 2 } { set coords 0 }
    set boardCoords $coords
    ::board::coords .main.board
}

ttk::frame .main.fbutton.button.space3 -width 15
button .main.fbutton.button.flip -image tb_flip -takefocus 0 \
        -command "::board::flip .main.board"

button .main.fbutton.button.coords -image tb_coords -takefocus 0 -command toggleCoords
bind $dot_w <KeyPress-0> toggleCoords

button .main.fbutton.button.stm -image tb_stm -takefocus 0 -command toggleSTM

proc toggleSTM {} {
    global boardSTM
    set boardSTM [expr {1 - $boardSTM} ]
    ::board::stm .main.board
}

button .main.fbutton.button.comment -image tb_comment_unavail -command {makeCommentWin}
button .main.fbutton.button.autoplay -image tb_play -command toggleAutoplay
button .main.fbutton.button.trial -image tb_trial -command {setTrialMode toggle}
button .main.fbutton.button.hgame_prev -image tb_hgame_prev -command {::game::LoadHistory -1}
button .main.fbutton.button.hgame_next -image tb_hgame_next -command {::game::LoadHistory 1}

foreach i {start back forward end exitVar addVar comment autoplay flip coords stm trial intoVar hgame_prev hgame_next} {
    .main.fbutton.button.$i configure -takefocus 0 -relief flat -border 1 -highlightthickness 0 -anchor n
    bind .main.fbutton.button.$i <Any-Enter> "+.main.fbutton.button.$i configure -relief groove"
    bind .main.fbutton.button.$i <Any-Leave> "+.main.fbutton.button.$i configure -relief flat; statusBarRestore %W; break"
}

pack .main.fbutton.button.start .main.fbutton.button.back .main.fbutton.button.forward .main.fbutton.button.end \
        .main.fbutton.button.space .main.fbutton.button.intoVar .main.fbutton.button.exitVar .main.fbutton.button.addVar .main.fbutton.button.comment .main.fbutton.button.space2 \
        .main.fbutton.button.autoplay .main.fbutton.button.trial .main.fbutton.button.space3 .main.fbutton.button.flip .main.fbutton.button.coords \
        .main.fbutton.button.stm .main.fbutton.button.hgame_prev .main.fbutton.button.hgame_next -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0


############################################################
### The board:

proc toggleShowMaterial {} {
    if { $::gameInfo(showMaterial) } {
        grid configure .main.board.mat
    } else  {
        grid remove .main.board.mat
    }
    updateBoard
}

::board::new .main.board $boardSize "showmat"

#.main.board.bd configure -relief solid -border 2
::board::showMarks .main.board 1
if {$boardCoords} {
    ::board::coords .main.board
}
if {$boardSTM} {
    ::board::stm .main.board
}

if { ! $::gameInfo(showMaterial) } {
    grid remove .main.board.mat
}

# .gameInfo is the game information widget:
#
autoscrollframe .main.gameInfoFrame text .main.gameInfo
.main.gameInfo configure -width 20 -height 6 -fg black -bg white -wrap none -state disabled -cursor top_left_arrow -setgrid 1
::htext::init .main.gameInfo

# Right-mouse button menu for gameInfo frame:
menu .main.gameInfo.menu -tearoff 0

.main.gameInfo.menu add checkbutton -label GInfoHideNext \
        -variable gameInfo(hideNextMove) -offvalue 0 -onvalue 1 -command updateBoard

.main.gameInfo.menu add checkbutton -label GInfoMaterial -variable gameInfo(showMaterial) -offvalue 0 -onvalue 1 \
        -command { toggleShowMaterial }

.main.gameInfo.menu add checkbutton -label GInfoFEN \
        -variable gameInfo(showFEN) -offvalue 0 -onvalue 1 -command updateBoard

.main.gameInfo.menu add checkbutton -label GInfoMarks \
        -variable gameInfo(showMarks) -offvalue 0 -onvalue 1 -command updateBoard

.main.gameInfo.menu add checkbutton -label GInfoWrap \
        -variable gameInfo(wrap) -offvalue 0 -onvalue 1 -command updateBoard

.main.gameInfo.menu add checkbutton -label GInfoFullComment \
        -variable gameInfo(fullComment) -offvalue 0 -onvalue 1 -command updateBoard

.main.gameInfo.menu add checkbutton -label GInfoPhotos \
        -variable gameInfo(photos) -offvalue 0 -onvalue 1 \
        -command {updatePlayerPhotos -force}

.main.gameInfo.menu add separator

.main.gameInfo.menu add radiobutton -label GInfoTBNothing \
        -variable gameInfo(showTB) -value 0 -command updateBoard

.main.gameInfo.menu add radiobutton -label GInfoTBResult \
        -variable gameInfo(showTB) -value 1 -command updateBoard

.main.gameInfo.menu add radiobutton -label GInfoTBAll \
        -variable gameInfo(showTB) -value 2 -command updateBoard

.main.gameInfo.menu add separator

.main.gameInfo.menu add command -label GInfoDelete -command {
    catch {sc_game flag delete [sc_game number] invert}
    updateBoard
    ::windows::gamelist::Refresh
}

.main.gameInfo.menu add cascade -label GInfoMark -menu .main.gameInfo.menu.mark
menu .main.gameInfo.menu.mark
foreach flag $maintFlaglist {
    .main.gameInfo.menu.mark add command -label "" -command "
    catch {sc_game flag $flag \[sc_game number\] invert}
    updateBoard
    ::windows::gamelist::Refresh
    "
}

bind .main.gameInfo <ButtonPress-$::MB3> "tk_popup .main.gameInfo.menu %X %Y"
# alternate code that may work better on MacOS ?
# bind .main.gameInfo <ButtonPress-$::MB3> ".main.gameInfo.menu post %X %Y"
bind $dot_w <F9> "tk_popup .main.gameInfo.menu %X %Y"


# setBoard:
#   Resets the squares of the board according to the board string
#   "boardStr" and the piece bitmap size "psize".
#
proc setBoard {board boardStr psize {rotated 0}} {
    for {set i 0} { $i < 64 } { incr i } {
        if {$rotated > 0} {
            set piece [string index $boardStr [expr {63 - $i}]]
        } else {
            set piece [ string index $boardStr $i ]
        }
        $board.$i configure -image $::board::letterToPiece($piece)$psize
    }
}

# updateVarMenus:
#   Updates the menus for moving into or deleting an existing variation.
#   Calls sc_var list and sc_var count to get the list of variations.
#
proc updateVarMenus {} {
    set varList [sc_var list]
    set numVars [sc_var count]
    .main.fbutton.button.intoVar.menu delete 0 end
    .menu.edit.del delete 0 end
    .menu.edit.first delete 0 end
    .menu.edit.main delete 0 end
    # PG: add the move of main line
    if {$numVars > 0} {
        set move [sc_game info nextMove]
        if {$move == ""} { set move "($::tr(empty))" }
        .main.fbutton.button.intoVar.menu add command -label "0: $move" -command "sc_move forward; updateBoard" -underline 0
    }
    for {set i 0} {$i < $numVars} {incr i} {
        set move [lindex $varList $i]
        set state normal
        if {$move == ""} {
            set move "($::tr(empty))"
            set state disabled
        }
        set str "[expr {$i + 1}]: $move"
        set commandStr "sc_var moveInto $i; updateBoard"
        if {$i < 9} {
            .main.fbutton.button.intoVar.menu add command -label $str -command $commandStr \
                    -underline 0
        } else {
            .main.fbutton.button.intoVar.menu add command -label $str -command $commandStr
        }
        set commandStr "sc_var delete $i; updateBoard -pgn"
        .menu.edit.del add command -label $str -command $commandStr
        set commandStr "sc_var first $i; updateBoard -pgn"
        .menu.edit.first add command -label $str -command $commandStr
        set commandStr "sc_var promote $i; updateBoard -pgn"
        .menu.edit.main add command -label $str -command $commandStr \
                -state $state
    }
}
################################################################################
# added by Pascal Georges
# returns a list of num moves from main line following current position
################################################################################
proc getNextMoves { {num 4} } {
    set tmp ""
    set count 0
    while { [sc_game info nextMove] != "" && $count < $num} {
        append tmp " [sc_game info nextMove]"
        sc_move forward
        incr count
    }
    sc_move back $count
    return $tmp
}
################################################################################
# displays a box with main line and variations for easy selection with keyboard
################################################################################
proc showVars {} {
    if {$::autoplayMode == 1} { return }
    
    # No need to display an empty menu
    if {[sc_var count] == 0} {
        return
    }
    
    if {[sc_var count] == 1 &&  [sc_game info nextMove] == ""} {
        # There is only one variation and no main line, so enter it
        sc_var moveInto 0
        updateBoard
        return
    }

    set w .variations
    if {[winfo exists $w]} { return }
    
    set varList [sc_var list]
    set numVars [sc_var count]
    
    # Present a menu of the possible variations
    toplevel $w
    ::setTitle $w $::tr(Variations)
    setWinLocation $w
    set h [expr $numVars + 1]
    if { $h> 19} { set h 19 }
    listbox $w.lbVar -selectmode browse -height $h -width 20
    pack $w.lbVar -expand yes -fill both -side top
    
    #insert main line
    set move [sc_game info nextMove]
    if {$move == ""} {
        set move "($::tr(empty))"
    } else  {
        $w.lbVar insert end "0: [getNextMoves 5]"
    }
    
    # insert variations
    for {set i 0} {$i < $numVars} {incr i} {
        set move [::trans [lindex $varList $i]]
        if {$move == ""} {
            set move "($::tr(empty))"
        } else  {
            sc_var moveInto $i
            append move [getNextMoves 5]
            sc_var exit
        }
        set str "[expr {$i + 1}]: $move"
        $w.lbVar insert end $str
    }
    $w.lbVar selection set 0
    # bindings
    bind $w <Configure> "recordWinSize $w"
    bind .variations <Return> {catch { event generate .variations <Right> } }
    bind .variations <ButtonRelease-1> {catch { event generate .variations <Right> } }
    bind .variations <Right> {
        set cur [.variations.lbVar curselection]
        destroy .variations
        if {$cur == 0} {
            sc_move forward; updateBoard -animate
        } else  {
            sc_var moveInto [expr $cur - 1]; updateBoard -animate
        }
    }
    bind .variations <Up> { set cur [.variations.lbVar curselection] ; .variations.lbVar selection clear $cur
        set sel [expr $cur - 1]
        if {$sel < 0} { set sel 0 }
        .variations.lbVar selection set $sel ; .variations.lbVar see $sel}
    bind .variations <Down> { set cur [.variations.lbVar curselection] ; .variations.lbVar selection clear $cur
        set sel [expr $cur + 1]
        if {$sel >= [.variations.lbVar index end]} { set sel end }
        .variations.lbVar selection set $sel ; .variations.lbVar see $sel}
    bind .variations <Left> { destroy .variations }
    bind .variations <Escape> { catch { event generate .variations <Destroy> } }
    # in order to have the window always on top : this does not really work ...
    bind .variations <Visibility> {
        if { "%s" != "VisibilityUnobscured" } {
            focus .variations
            raise .variations
        }
    }
    bind .variations <FocusOut> {
        focus .variations
        raise .variations
    }
    
    # Needed or the main window loses the focus
    if { $::docking::USE_DOCKING } {
        bind .variations <Destroy> { focus -force .main }
    }

    catch { focus .variations }
    catch { grab $w }
    update
}
################################################################################
#
################################################################################
# V and Z key bindings: move into/out of a variation.
#
bind $dot_w <KeyPress-v> { showVars }
bind $dot_w <KeyPress-z> {.main.fbutton.button.exitVar invoke}

# editMyPlayerNames
#   Present the dialog box for editing the list of player
#   names from whose perspective the board should be shown
#   whenever a game is loaded.
#
proc editMyPlayerNames {} {
    global myPlayerNames
    set w .editMyPlayerNames
    if {[winfo exists $w]} { return }
    toplevel $w
    ::setTitle $w "Scid: [tr OptionsBoardNames]"
    pack [frame $w.b] -side bottom -fill x
    
    autoscrollframe $w.desc text $w.desc.text \
            -foreground black -background gray90 \
            -width 50 -height 8 -wrap word -cursor top_left_arrow
    $w.desc.text insert end [string trim $::tr(MyPlayerNamesDescription)]
    $w.desc.text configure -state disabled
    pack $w.desc -side top -fill x
    autoscrollframe $w.f text $w.f.text \
            -background white -width 50 -height 10 -wrap none
    foreach name $myPlayerNames {
        $w.f.text insert end "\n\"$name\""
    }
    pack $w.f -side top -fill both -expand yes
    button $w.b.white -text $::tr(White) -command {
        .editMyPlayerNames.f.text insert end "\"[sc_game info white]\"\n"
    }
    button $w.b.black -text $::tr(Black) -command {
        .editMyPlayerNames.f.text insert end "\"[sc_game info black]\"\n"
    }
    button $w.b.help -text $::tr(Help) \
            -command {helpWindow Options MyPlayerNames}
    button $w.b.ok -text OK -command editMyPlayerNamesOK
    button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
    pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
    pack $w.b.white $w.b.black $w.b.help -side left -padx 5 -pady 5
    grab $w
}

proc editMyPlayerNamesOK {} {
    global myPlayerNames
    set w .editMyPlayerNames
    set text [string trim [$w.f.text get 1.0 end]]
    set myPlayerNames {}
    foreach name [split $text "\n"] {
        set name [string trim $name]
        if {[string match "\"*\"" $name]} {
            set name [string trim $name "\""]
        }
        if {$name != ""} { lappend myPlayerNames $name }
    }
    grab release $w
    destroy $w
}

# flipBoardForPlayerNames
#   Check if either player in the current game has a name that matches
#   a pattern in the specified list and if so, flip the board if
#   necessary to show from that players perspective.
#
proc flipBoardForPlayerNames {namelist {board .main.board}} {
    set white [sc_game info white]
    set black [sc_game info black]
    foreach pattern $namelist {
        if {[string match $pattern $white]} {
            ::board::flip $board 0
            return
        }
        if {[string match $pattern $black]} {
            ::board::flip $board 1
            return
        }
    }
}

# updateBoard:
#    Updates the main board. Also updates the navigation buttons, disabling
#    those that have no effect at this point in the game.
#    Also ensure all menu settings are up to date.
#    If a parameter "-pgn" is specified, the PGN text is also regenerated.
#    If a parameter "-animate" is specified, board changes are animated.
#
proc updateBoard {args} {
    set pgnNeedsUpdate 0
    set animate 0
    foreach arg $args {
        if {! [string compare $arg "-pgn"]} { set pgnNeedsUpdate 1 }
        if {! [string compare $arg "-animate"]} { set animate 1 }
    }

    if {$pgnNeedsUpdate} { ::pgn::Refresh $pgnNeedsUpdate }

    ::board::resize .main.board $::boardSize
    ::board::setmarks .main.board [sc_pos getComment]
    ::board::update .main.board [sc_pos board] $animate

    after cancel updateNavButtons
    after cancel ::notify::PosChanged

    update idletasks

    after idle updateNavButtons
    after idle ::notify::PosChanged
}

# updateNavButtons:
#    Update the status of each navigation button
#
proc updateNavButtons {} {
    global trialMode
    if {[sc_pos isAt start]} {
        .main.fbutton.button.start configure -state disabled
    } else { .main.fbutton.button.start configure -state normal }
    if {[sc_pos isAt end]} {
        .main.fbutton.button.end configure -state disabled
    } else { .main.fbutton.button.end configure -state normal }
    if {[sc_pos isAt vstart]} {
        .main.fbutton.button.back configure -state disabled
    } else { .main.fbutton.button.back configure -state normal }
    if {[sc_pos isAt vend]} {
        .main.fbutton.button.forward configure -state disabled
    } else { .main.fbutton.button.forward configure -state normal }
    # Cannot add a variation to an empty line:
    if {[sc_pos isAt vstart]  &&  [sc_pos isAt vend]} {
        .menu.edit entryconfig [tr EditAdd] -state disabled
        .main.fbutton.button.addVar configure -state disabled
        bind $::dot_w <Control-a> {}
    } else {
        .menu.edit entryconfig [tr EditAdd] -state normal
        .main.fbutton.button.addVar configure -state normal
        bind $::dot_w <Control-a> {sc_var create; updateBoard -pgn}
    }
    if {[sc_var count] == 0} {
        .main.fbutton.button.intoVar configure -state disabled
        .menu.edit entryconfig [tr EditDelete] -state disabled
        .menu.edit entryconfig [tr EditFirst] -state disabled
        .menu.edit entryconfig [tr EditMain] -state disabled
    } else {
        .main.fbutton.button.intoVar configure -state normal
        .menu.edit entryconfig [tr EditDelete] -state normal
        .menu.edit entryconfig [tr EditFirst] -state normal
        .menu.edit entryconfig [tr EditMain] -state normal
    }
    if {$trialMode} {
        .menu.edit entryconfig [tr EditUndo] -state disabled
        .menu.edit entryconfig [tr EditRedo] -state disabled
    } else {
        .menu.edit entryconfig [tr EditUndo] -state normal
        .menu.edit entryconfig [tr EditRedo] -state normal
    }
    updateVarMenus
    if {[sc_var level] == 0} {
        .main.fbutton.button.exitVar configure -state disabled
    } else {
        .main.fbutton.button.exitVar configure -state normal
    }

    wm withdraw .tooltip
    set comment [sc_pos getComment]
    # remove technical comments, notify only human readable ones
    regsub -all {\[%.*\]} $comment {} comment
    if {$comment != ""} {
         .main.fbutton.button.comment configure -image tb_comment_avail -relief flat
         ::utils::tooltip::Set .main.fbutton.button.comment $comment
    } else {
         .main.fbutton.button.comment configure -image tb_comment_unavail -relief flat
         ::utils::tooltip::UnSet .main.fbutton.button.comment
    }
   .main.fbutton.button.hgame_prev configure -state [::game::Hprev_btnstate]
   .main.fbutton.button.hgame_next configure -state [::game::Hnext_btnstate]
}

# updateGameInfo:
#    Update the game status window .main.gameInfo
#
proc updateGameInfo {} {
    global gameInfo

    .main.gameInfo configure -state normal
    .main.gameInfo delete 0.0 end
    ::htext::display .main.gameInfo [sc_game info -hide $gameInfo(hideNextMove) \
            -material $gameInfo(showMaterial) \
            -cfull $gameInfo(fullComment) \
            -fen $gameInfo(showFEN) -tb $gameInfo(showTB)]
    if {$gameInfo(wrap)} {
        .main.gameInfo configure -wrap word
        .main.gameInfo tag configure wrap -lmargin2 10
        .main.gameInfo tag add wrap 1.0 end
    } else {
        .main.gameInfo configure -wrap none
    }
    .main.gameInfo configure -state disabled
    updatePlayerPhotos
}

# Set up player photos:

image create photo photoW
image create photo photoB
label .main.photoW -background white -image photoW -anchor ne
label .main.photoB -background white -image photoB -anchor ne

# readPhotoFile executed once at startup for each SPF file. Loads SPI file if it exists.
# Otherwise it generates index information and tries to write SPI file to disk (if it can be done)
proc readPhotoFile {fname} {
    global photobegin
    global photosize
    global spffile
    set count 0
    set writespi 0
    
    if {! [regsub {\.spf$} $fname {.spi} spi]} {
        # How does it happend?
        return
    }
    
    # If SPI file was found then just source it and exit
    if { [file readable $spi]} {
        set count [array size spffile]
        source $spi
        set newcount [array size spffile]
        if {[expr $newcount - $count] > 0} {
            ::splash::add "Found [expr $newcount - $count] player photos in [file tail $fname]"
            ::splash::add "Loading information from index file [file tail $spi]"
            return
        }
    }
    
    # Check for the absence of the SPI file and check for the write permissions
    if { ![file exists $spi] && ![catch {open $spi w} fd_spi]} {
        # SPI file will be written to disk by scid
        set writespi 1
    }
    
    if {! [file readable $fname]} { return }
    
    set fd [open $fname]
    while {[gets $fd line] >= 0} {
        # search for the string      photo "Player Name"
        if { [regexp {^photo \"(.*)\" \{$} $line -> name] } {
            set count [expr $count + 1 ]
            set begin [tell $fd]
            # skip data block
            while {1} {
                set end [tell $fd]
                gets $fd line
                if {[regexp {.*\}.*} $line ]} {break}
            }
            set trimname [trimString $name]
            set size [expr $end - $begin ]
            set photobegin($trimname) $begin
            set photosize($trimname) $size
            set spffile($trimname) $fname
            if { $writespi } {
                # writing SPI file to disk
                puts $fd_spi "set \"photobegin($trimname)\" $begin"
                puts $fd_spi "set \"photosize($trimname)\" $size"
                puts $fd_spi "set \"spffile($trimname)\" \"\$fname\""
            }
        }
    }
    if {$count > 0 && $writespi} {
        ::splash::add "Found $count player photos in [file tail $fname]"
        ::splash::add "Index file [file tail $spi] was generated succesfully"
    }
    if {$count > 0 && !$writespi} {
        ::splash::add "Found $count player photos in [file tail $fname]"
        ::splash::add "Could not generate index file [file tail $spi]"
        ::splash::add "Use spf2spi script to generate [file tail $spi] file "
    }
    
    if { $writespi } { close $fd_spi }
    close $fd
}


#convert $data string tolower case and strip the first two blanks.
proc trimString {data} {
    set data [string tolower $data]
    set strindex [string first "\ " $data]
    set data [string replace $data $strindex $strindex]
    set strindex [string first "\ " $data]
    set data [string replace $data $strindex $strindex]
    return $data
}


# retrieve photo from the SPF file using index information
proc getphoto {name} {
    global photobegin
    global photosize
    global spffile
    set data ""
    if {[info exists spffile($name)]} {
        set fd [open $spffile($name)]
        seek $fd $photobegin($name) start
        set data [read $fd $photosize($name) ]
        close $fd
    }
    return $data
}

proc addPhotoAlias {aliasname name} {
    global photobegin
    global photosize
    global spffile
    global droppedaliases
    if {[info exists spffile([trimString $name])]} {
        set photobegin([trimString $aliasname]) $photobegin([trimString $name])
        set photosize([trimString $aliasname]) $photosize([trimString $name])
        set spffile([trimString $aliasname]) $spffile([trimString $name])
    } else {
        set droppedaliases [expr $droppedaliases + 1 ]
    }
}

# photobegin($name) - file offset of the photo for the player $name
# photobegin($name) - size (in bytes) of the photo for the player $name
# spffile($name) - location of the SPF file where photo for the player $name is stored
array set photobegin {}
array set photosize {}
array set spffile {}

# variable droppedaliases counts the number of the dropped aliases.
# Alias is dropped if the player hasn't photo.
set droppedaliases 0

# Directories where Scid searches for the photo files
set photodirs [list $scidDataDir $scidUserDir $scidConfigDir [file join $scidShareDir "photos"]]

# Read all Scid photo (*.spf) files in the Scid data/user/config directories:
foreach dir $photodirs {
    foreach photofile [glob -nocomplain -directory $dir "*.spf"] {
        readPhotoFile $photofile
    }
}

# Read all Scid photo aliases (*.spa)
foreach dir $photodirs {
    foreach spa [glob -nocomplain -directory $dir "*.spa"] {
        if {! [file readable $spa]} { return }
        set count [array size spffile]
        set droppedcount $droppedaliases
        source $spa
        set newcount [array size spffile]
        set newdroppedcount $droppedaliases
        if {[expr $newcount - $count] > 0} {
            ::splash::add "Found [expr $newcount - $count] player aliases in [file tail $spa]"
        }
        if {[expr $newdroppedcount - $droppedcount] > 0} {
            ::splash::add "Dropped [expr $newdroppedcount - $droppedcount] player aliases in [file tail $spa]"
        }
    }
}


set photo(oldWhite) {}
set photo(oldBlack) {}

# Try to change the engine name: ignore version number, try to ignore blanks
proc trimEngineName { engine } {
    global spffile
    set engine [sc_name retrievename $engine]
    
    set engine [string tolower $engine]
    
    if { [string first "deep " $engine] == 0 } {
        # strip "deep "
        set engine [string range $engine 5 end]
    }
    # delete two first blank to make "The King" same as "TheKing"
    # or "Green Light Chess" as "Greenlightchess"
    set strindex [string first "\ " $engine]
    set engine [string replace $engine $strindex $strindex]
    set strindex [string first "\ " $engine]
    set engine [string replace $engine $strindex $strindex]
    set strindex [string first "," $engine]
    set slen [string len $engine]
    if { $strindex == -1 && $slen > 2 } {
        #seems to be a engine name:
        # search until longest name matches an engine name
        set slen [string len $engine]
        for { set strindex $slen} {![info exists spffile([string range $engine 0 $strindex])]\
                    && $strindex > 2 } {set strindex [expr {$strindex - 1}] } { }
        set engine [string range $engine 0 $strindex]
    }
    return $engine
}

# updatePlayerPhotos
#   Updates the player photos in the game information area
#   for the two players of the current game.
#
proc updatePlayerPhotos {{force ""}} {
    global photo
    global spffile
    if {$force == "-force"} {
        # Force update even if it seems unnecessary. This is done
        # when the user selects to show or hide the photos.
        set photo(oldWhite) {}
        set photo(oldBlack) {}
        place forget .main.photoW
        place forget .main.photoB
    }
    if {! $::gameInfo(photos)} { return }
    #get photo from player
    set white [sc_game info white]
    set black [sc_game info black]
    
    catch { set white [trimEngineName $white] }
    catch { set black [trimEngineName $black] }
    
    if {$black != $photo(oldBlack)} {
        set photo(oldBlack) $black
        place forget .main.photoB
        if {[info exists spffile($black)]} {
            image create photo photoB -data [getphoto $black ]
            .main.photoB configure -image photoB -anchor ne
            place .main.photoB -in .main.gameInfo -x -1 -relx 1.0 -anchor ne
            # force to update white, black size could be changed
            set photo(oldWhite) {}
        }
    }
    set distance [expr {[image width photoB] + 2}]
    if { $distance < 10 } { set distance 82 }
    if {$white != $photo(oldWhite)} {
        set photo(oldWhite) $white
        place forget .main.photoW
        if {[info exists spffile($white)]} {
            image create photo photoW -data [getphoto $white ]
            .main.photoW configure -image photoW -anchor ne
            place .main.photoW -in .main.gameInfo -x -$distance -relx 1.0 -anchor ne
        }
    }
    bind .main.photoW <ButtonPress-1> "togglePhotosSize"
    bind .main.photoB <ButtonPress-1> "togglePhotosSize"
    set ::photosMinimized 0
}
################################################################################
# Toggles photo sizes
################################################################################
set photosMinimized 0
proc togglePhotosSize {} {
    set distance [expr {[image width photoB] + 2}]
    if { $distance < 10 } { set distance 82 }
    
    if {$::photosMinimized} {
        set ::photosMinimized 0
        if { [winfo ismapped .main.photoW] } {
            place .main.photoW -in .main.gameInfo -x -$distance -relx 1.0 -relheight 1 -width [image width photoW] -anchor ne
        }
        if { [winfo ismapped .main.photoB] } {
            place .main.photoB -in .main.gameInfo -x -1 -relx 1.0 -relheight 1 -width [image width photoB] -anchor ne
        }
    } else  {
        set ::photosMinimized 1
        if { [winfo ismapped .main.photoW] } {
            place .main.photoW -in .main.gameInfo -x -17 -relx 1.0 -relheight 0.15 -width 15 -anchor ne
        }
        if { [winfo ismapped .main.photoB] } {
            place .main.photoB -in .main.gameInfo -x -1 -relx 1.0  -relheight 0.15 -width 15 -anchor ne
        }
    }
    
}
#########################################################
### Chess move input

# Globals for mouse-based move input:

set selectedSq -1
set bestSq -1

set EMPTY 0
set KING 1
set QUEEN 2
set ROOK 3
set BISHOP 4
set KNIGHT 5
set PAWN 6

################################################################################
#
################################################################################
proc getPromoPiece {} {
    set w .promoWin
    set ::result 2
    toplevel $w
    # wm transient $w .main
    ::setTitle $w "Scid"
    wm resizable $w 0 0
    set col "w"
    if { [sc_pos side] == "black" } { set col "b" }
    ttk::button $w.bq -image ${col}q45 -command "set ::result 2 ; destroy $w"
    ttk::button $w.br -image ${col}r45 -command "set ::result 3 ; destroy $w"
    ttk::button $w.bb -image ${col}b45 -command "set ::result 4 ; destroy $w"
    ttk::button $w.bn -image ${col}n45 -command "set ::result 5 ; destroy $w"
    pack $w.bq $w.br $w.bb $w.bn -side left
    bind $w <Escape> "set ::result 2 ; destroy $w"
    bind $w <Return> "set ::result 2 ; destroy $w"
    update
    catch { grab $w }
    tkwait window $w
    return $::result
}

# confirmReplaceMove:
#   Asks the user what to do when adding a move when a move already
#   exists.
#   Returns a string value:
#      "replace" to replace the move, truncating the game.
#      "var" to add the move as a new variation.
#      "cancel" to do nothing.
#
set addVariationWithoutAsking 0

proc confirmReplaceMove {} {
    global askToReplaceMoves trialMode
    
    # If reviewing a game, enter a var automatically
    if {[winfo exists $::reviewgame::window]} {
        return "var"
    }
    
    if {$::addVariationWithoutAsking} { return "var" }
    
    if {! $askToReplaceMoves} { return "replace" }
    if {$trialMode} { return "replace" }
    
    option add *Dialog.msg.wrapLength 4i interactive
    catch {tk_dialog .dialog "Scid: $::tr(ReplaceMove)?" \
                $::tr(ReplaceMoveMessage) "" 0 \
                $::tr(ReplaceMove) $::tr(NewMainLine) \
                $::tr(AddNewVar) [tr EditTrial] \
                $::tr(Cancel)} answer
    option add *Dialog.msg.wrapLength 3i interactive
    if {$answer == 0} { return "replace" }
    if {$answer == 1} { return "mainline" }
    if {$answer == 2} { return "var" }
    if {$answer == 3} { setTrialMode 1; return "replace" }
    return "cancel"
}

proc addNullMove {} {
    addMove null null
}

# addMove:
#   Adds the move indicated by sq1 and sq2 if it is legal. If the move
#   is a promotion, getPromoPiece will be called to get the promotion
#   piece from the user.
#   If the optional parameter is "-animate", the move will be animated.
#
proc addMove { sq1 sq2 {animate ""}} {
    if { [::fics::setPremove $sq1 $sq2] || ! [::fics::playerCanMove] || ! [::reviewgame::playerCanMove]} { return } ;# not player's turn
    
    global EMPTY
    set nullmove 0
    if {$sq1 == "null"  &&  $sq2 == "null"} { set nullmove 1 }
    if {!$nullmove  &&  [sc_pos isLegal $sq1 $sq2] == 0} {
        # Illegal move, but if it is King takes king then treat it as
        # entering a null move:
        set board [sc_pos board]
        set k1 [string tolower [string index $board $sq1]]
        set k2 [string tolower [string index $board $sq2]]
        if {$k1 == "k"  &&  $k2 == "k"} { set nullmove 1 } else { return }
    }
    set promo $EMPTY
    if {[sc_pos isPromotion $sq1 $sq2] == 1} {
        # sometimes, addMove is triggered twice
        if { [winfo exists .promoWin] } { return }
        set promo [getPromoPiece]
    }
    
    set promoLetter ""
    switch -- $promo {
        2 { set promoLetter "q"}
        3 { set promoLetter "r"}
        4 { set promoLetter "b"}
        5 { set promoLetter "n"}
        default {set promoLetter ""}
    }
    
    # Autmatically follow the main line if the next move is the same or enter the relevant variation if it exists
    if {! $::annotateMode} {
        set moveUCI [::board::san $sq2][::board::san $sq1]$promoLetter
        set move [sc_game info nextMoveUCI]
        if { [ string compare -nocase $moveUCI $move] == 0 } {
            sc_move forward
            updateBoard
            return
        }
        set varList [sc_var list UCI]
        set i 0
        foreach { move } $varList {
            if { [ string compare -nocase $moveUCI $move] == 0 } {
                sc_var moveInto $i
                updateBoard
                return
            }
            incr i
        }
    }
    
    undoFeature save
    
    set action "replace"
    if {![sc_pos isAt vend]} {
        set action [confirmReplaceMove]
    }
    if {$action == "replace"} {
        # nothing
    } elseif {$action == "mainline" || $action == "var"} {
        if {[winfo exists .commentWin]} {
            ::commenteditor::storeComment
            .commentWin.cf.text delete 0.0 end
        }
        sc_var create
    } else {
        # Do not add the move at all:
        return
    }
    
    if {$nullmove} {
        sc_move addSan null
    } else {
        set ::sergame::lastPlayerMoveUci ""
        if {[winfo exists ".serGameWin"]} {
            set ::sergame::lastPlayerMoveUci "[::board::san $sq2][::board::san $sq1]$promoLetter"
        }
        sc_move add $sq1 $sq2 $promo
        set san [sc_game info previous]
        if {$action == "mainline"} {
            sc_var exit
            sc_var promote [expr {[sc_var count] - 1}]
            sc_move forward 1
        }
        after idle [list ::utils::sound::AnnounceNewMove $san]
        
        if {[winfo exists .commentWin]} { .commentWin.cf.text delete 0.0 end }
    }
    
    if {[winfo exists .fics]} {
        
        if { [::fics::playerCanMove] } {
            if { $promo != $EMPTY } {
                ::fics::writechan "promote $promoLetter"
            }
            ::fics::writechan [ string range [sc_game info previousMoveUCI] 0 3 ]
        }
    }
    
    if {$::novag::connected} {
        ::novag::addMove "[::board::san $sq2][::board::san $sq1]$promoLetter"
    }
    
    moveEntry_Clear
    updateBoard -pgn $animate
    
    ::tree::doTraining
    
}

# addSanMove
#   Like addMove above, but takes the move in SAN notation instead of
#   a pair of squares.
#
proc addSanMove {san {animate ""} {noTraining ""}} {
    
    if {! $::annotateMode} {
        set move [sc_game info nextMoveNT]
        if { [ string compare -nocase $san $move] == 0 } {
            sc_move forward
            updateBoard
            return
        }
        set varList [sc_var list]
        set i 0
        foreach { move } $varList {
            if { [ string compare -nocase $san $move] == 0 } {
                sc_var moveInto $i
                updateBoard
                return
            }
            incr i
        }
    }
    
    set action "replace"
    if {![sc_pos isAt vend]} {
        set action [confirmReplaceMove]
    }
    if {$action == "replace"} {
        # nothing
    } elseif {$action == "var" || $action == "mainline"} {
        sc_var create
    } else {
        # Do not add the move at all:
        return
    }
    # if {[winfo exists .commentWin]} { .commentWin.cf.text delete 0.0 end }
    undoFeature save
    sc_move addSan $san
    if {$action == "mainline"} {
        sc_var exit
        sc_var promote [expr {[sc_var count] - 1}]
    }
    moveEntry_Clear
    updateBoard -pgn $animate
    ::utils::sound::AnnounceNewMove $san
    if {$noTraining != "-notraining"} {
        ::tree::doTraining
    }
}

# enterSquare:
#   Called when the mouse pointer enters a board square.
#   Finds the best matching square for a move (if there is a
#   legal move to or from this square), and colors the squares
#   to indicate the suggested move.
#
proc enterSquare { square } {	
    global bestSq bestcolor selectedSq suggestMoves
    if {$selectedSq == -1} {
        set bestSq -1
        if {$suggestMoves && [expr {abs($::fics::playing) != 1}]} {
            set bestSq [sc_pos bestSquare $square]
            if {$bestSq != -1} {
                ::board::colorSquare .main.board $square $bestcolor
                ::board::colorSquare .main.board $bestSq $bestcolor        
            }
        }
    }
}

# leaveSquare:
#    Called when the mouse pointer leaves a board square.
#    Recolors squares to normal (lite/dark) color.
#
proc leaveSquare { square } {
    global selectedSq bestSq
    if {$selectedSq == -1} {
        ::board::colorSquare .main.board $bestSq
        ::board::colorSquare .main.board $square  
    }
}

# pressSquare:
#    Called when the left mouse button is pressed on a square. Sets
#    that square to be the selected square.
#
proc pressSquare { square } {
    global selectedSq highcolor
    
    if { ![::fics::playerCanMove] || ![::reviewgame::playerCanMove] } { return } ;# not player's turn
    
    # if training with calculations of var is on, just log the event
    if { [winfo exists .calvarWin] } {
        ::calvar::pressSquare $square
        return
    }
    
    if {$selectedSq == -1} {
        set selectedSq $square
        ::board::colorSquare .main.board $square $highcolor
        # Drag this piece if it is the same color as the side to move:
        set c [string index [sc_pos side] 0]  ;# will be "w" or "b"
        set p [string index [::board::piece .main.board $square] 0] ;# "w", "b" or "e"
        if {$c == $p} {
            ::board::setDragSquare .main.board $square
        }
    } else {
        ::board::setDragSquare .main.board -1
        ::board::colorSquare .main.board $selectedSq
        ::board::colorSquare .main.board $square
        if {$square != $selectedSq} {
            addMove $square $selectedSq -animate
        }
        set selectedSq -1
        enterSquare $square
    }
}

# releaseSquare:
#   Called when the left mouse button is released over a square.
#   If the square is different to that the button was pressed on, it
#   is a dragged move; otherwise it is just selecting this square as
#   part of a move.
#
proc releaseSquare { w x y } {
    
    if { [winfo exists .calvarWin] } { return }
    
    global selectedSq bestSq
    
    ::board::setDragSquare $w -1
    set square [::board::getSquare $w $x $y]
    if {$square < 0} {
        set selectedSq -1
        return
    }
    
    if {$square == $selectedSq} {
        if {$::suggestMoves} {
            # User pressed and released on same square, so make the
            # suggested move if there is one:
            set selectedSq -1
            ::board::colorSquare $w $bestSq
            ::board::colorSquare $w $square
            addMove $square $bestSq -animate
            enterSquare $square
        } else {
            # Current square is the square user pressed the button on,
            # so we do nothing.
        }
    } else {
        # User has dragged to another square, so try to add this as a move:
        addMove $square $selectedSq
        ::board::colorSquare $w $selectedSq
        set selectedSq -1
        ::board::colorSquare $w $square
    }
}


# backSquare:
#    Handles the retracting of a move (when the right mouse button is
#    clicked on a square). Recolors squares to normal color also.
#    If the move is the last in the game or variation, is is removed
#    by truncating the game after retracting the move.
#
proc backSquare {} {
    global selectedSq bestSq
    set lastMoveInLine 0
    if {[sc_pos isAt vend]} {
        set lastMoveInLine 1
    }
    sc_move back
    
    # RMB used to delete the move if it was the last in a line. Removed it as there is no undo.
    # if {[sc_pos isAt vstart] && [sc_var level] != 0} {
    # ::pgn::deleteVar [sc_var number]
    # } elseif {$lastMoveInLine} {
    # sc_game truncate
    # }
    
    set selectedSq -1
    set bestSq -1
    # update the board without -pgn option because of poor performance with long games
    updateBoard -animate
    ::utils::sound::AnnounceBack
}


##
## Auto-playing of moves:
##
set autoplayMode 0

set tempdelay 0
trace variable tempdelay w {::utils::validate::Regexp {^[0-9]*\.?[0-9]*$}}
# ################################################################################
# Set the delay between moves in options menu
################################################################################
proc setAutoplayDelay {} {
    global autoplayDelay tempdelay
    set tempdelay [expr {$autoplayDelay / 1000.0}]
    set w .apdialog
    if { [winfo exists $w] } { focus $w ; return }
    toplevel $w
    ::setTitle $w "Scid"
    wm resizable $w 0 0
    ttk::label $w.label -text $::tr(AnnotateTime:)
    pack $w.label -side top -pady 5 -padx 5
    spinbox $w.spDelay -background white -width 4 -textvariable tempdelay -from 1 -to 300 -increment 1
    pack $w.spDelay -side top -pady 5
    
    set b [ttk::frame $w.buttons]
    pack $b -side top -fill x
    ttk::button $b.cancel -text $::tr(Cancel) -command {
        destroy .apdialog
        focus .
    }
    ttk::button $b.ok -text "OK" -command {
        if {$tempdelay < 0.1} { set tempdelay 0.1 }
        set autoplayDelay [expr {int($tempdelay * 1000)}]
        destroy .apdialog
        focus .
    }
    pack $b.cancel $b.ok -side right -padx 5 -pady 5
    bind $w <Escape> { .apdialog.buttons.cancel invoke }
    bind $w <Return> { .apdialog.buttons.ok invoke }
    focus $w.spDelay
}
################################################################################
#
################################################################################
proc toggleAutoplay { } {
    global autoplayMode autoplayDelay
    if {$autoplayMode == 0} {
        set autoplayMode 1
        # Change the autoplay icon in the main window
        #
        .main.fbutton.button.autoplay configure -image tb_stop -relief sunken
        # Start with some delay
        # Only to spawn the autoplay on a new thread
        #
        after 500 autoplay
    } else {
        cancelAutoplay
    }
}

################################################################################
#
################################################################################
proc autoplay {} {
    global autoplayDelay autoplayMode annotateMode analysis
    
    # Was autoplay stopped by the user since the last time the timer ran out?
    # If so, silently exit this handler
    #
    if { $autoplayMode == 0 } {
        return
    }
    
    # Add annotation if needed
    #
    if { $annotateMode } {
        addAnnotation
    }
    
    if { $::initialAnalysis } {
        # Stop analyis if it is running
        # We do not want initial super-accuracy
        #
        stopEngineAnalysis 1
        set annotateMode 1
        # First do the book analysis (if this is configured)
        # The latter condition is handled by the operation itself
        set ::wentOutOfBook 0
        bookAnnotation 1
        # Start the engine
        startEngineAnalysis 1 1
    
    # Autoplay comes in two flavours:
    # + It can run through a game, with or witout annotation
    # + It can be annotating just opening sections of games
    # See if such streak ends here and now
    #
    } elseif { [sc_pos isAt end] || ($annotateMode && $::isBatchOpening && ([sc_pos moveNumber] > $::isBatchOpeningMoves)) } {
        
        # Stop the engine
        #
        stopEngineAnalysis 1
        
        # Are we running a batch analysis?
        #
        if { $annotateMode && $::isBatch } {
            # First replace the game we just finished
            #
            set gameNo [sc_game number]
            if { $gameNo != 0 } {
                sc_game save $gameNo
            }
            
            # See if we must advance to the next game
            #
            if { $gameNo < $::batchEnd } {
                incr gameNo
                sc_game load $gameNo
                updateMenuStates
                updateStatusBar
                updateTitle
                updateBoard -pgn
                # First do book analysis
                #
                set ::wentOutOfBook 0
                bookAnnotation 1
                # Start with initial assessment of the position
                #
                set ::initialAnalysis 1
                # Start the engine
                #
                startEngineAnalysis 1 1
            } else {
                # End of batch, stop
                #
                cancelAutoplay
                return
            }
        } else {
            # Not in a batch, just stop
            #
            cancelAutoplay
            return
        }
    } elseif { $annotateMode && $::isAnnotateVar } {
        # A construction to prune empty variations here and now
        # It makes no sense to discover only after some engine
        # time that we entered a dead end.
        #
        set emptyVar 1
        while { $emptyVar } {
            set emptyVar 0
            # Are we at the end of a variation?
            # If so, pop back into the parent
            #
            if { [sc_pos isAt vend] } {
                sc_var exit
                set lastVar [::popAnalysisData]
            } else {
                set lastVar [sc_var count]
            }
            # Is there a subvariation here?
            # If so, enter it after pushing where we are
            #
            if { $lastVar > 0 } {
                incr lastVar -1
                sc_var enter $lastVar
                ::pushAnalysisData $lastVar
                # Check if this line is empty
                # If so, we will pop back immediately in the next run
                #
                if { [sc_pos isAt vstart] && [sc_pos isAt vend] } {
                    set emptyVar 1
                } else {
                    # We are in a new line!
                    # Tell the annotator (he might be interested)
                    #
                    updateBoard -pgn
                    set ::atStartOfLine 1
                }
            } else {
                # Just move ahead following the current line
                #
                ::move::Forward
            }
        }
    } else {
        # Just move ahead following the main line
        #
        ::move::Forward
    }
    
    # Respawn
    #
    after $autoplayDelay autoplay
}
################################################################################
#
################################################################################
proc cancelAutoplay {} {
    global autoplayMode annotateMode annotateModeButtonValue
    set autoplayMode 0
    set annotateMode 0
    set annotateModeButtonValue 0
    after cancel autoplay
    .main.fbutton.button.autoplay configure -image tb_play -relief flat
}
################################################################################
#
################################################################################

bind $dot_w <Return> {
    if {[winfo exists .analysisWin1] && $analysis(analyzeMode1)} {
        .analysisWin1.b1.move invoke
    }
}

bind $dot_w <Escape> cancelAutoplay

set trialMode 0

proc setTrialMode {mode} {
    global trialMode
    if {$mode == "toggle"} {
        set mode [expr {1 - $trialMode}]
    }
    if {$mode == $trialMode} { return }
    if {$mode == "update"} { set mode $trialMode }
    
    if {$mode == 1} {
        set trialMode 1
        sc_game push copy
        .main.fbutton.button.trial configure -image tb_trial_on
    } else {
        set trialMode 0
        sc_game pop
        .main.fbutton.button.trial configure -image tb_trial
    }
    updateBoard -pgn
}

proc undoFeature {action} {
    global trialMode
    if {! $trialMode} {
        if {$action == "save"} {
            sc_game undoPoint
        } elseif {$action == "undo"} {
            sc_game undo
            updateBoard -pgn
        } elseif {$action == "redo"} {
            sc_game redo
            updateBoard -pgn
        }
    }
}
###
### Correspondence.tcl: part of Scid.
### Copyright (C) 2008 Alexander Wagner
###
### $Id: correspondence.tcl,v 4.3 2011/02/13 18:12:02 arwagner Exp $
###
### Last change: <Sat, 2012/05/19 18:39:49 arwagner agamemnon>
###
### Add correspondence chess via eMail or external protocol to scid
###
#======================================================================

# http and tdom are required for the Xfcc protocol

#======================================================================
#
# Xfcc interface for scid
#
#======================================================================
namespace eval Xfcc {

	#----------------------------------------------------------------------
	# Header and footer of the SOAP-messages. Linebreaking is imporant
	#
	set SOAPstart {<?xml version="1.0" encoding="utf-8"?>
	<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
	}

	set SOAPend {</soap:Body>
	</soap:Envelope>}
	#
	#----------------------------------------------------------------------

	set xfccrc     ""
	set xfccstate  {}

	# list of server names for config dialog
	set lsrvname   {}

	# when was the last update was retrieved online?
	set lastupdate 0
	set update     0

	array unset xfccsrv
	# entry values for config dialog
	set Oldnum     0
	set Server     ""
	set Username   ""
	set Password   ""
	set URI        ""

	# To pass on directories on windows with a backslash
	set xfccrcfile ""

	# Set up a proper user agent
	# Something like 
	#    Scid/3.7 (x11; Linux i686; rv:Devel 2009) Tcl/Tk 8.5.2
	set useragent "Scid/$::scidVersion ([tk windowingsystem]; $::tcl_platform(os) $::tcl_platform(machine); rv:$scidVersionDate) Tcl/Tk [info patchlevel]"
	
	#----------------------------------------------------------------------
	# Replace XML entities by their normal characters
	#----------------------------------------------------------------------
	proc xmldecrypt {chdata} {

		foreach from {{\&amp;} {\&lt;} {\&gt;} {\&quot;} {\&apos;}}   \
			to {{\&} < > {"} {'}} {                                     ;# '"
				regsub -all $from $chdata $to chdata
		 }   
		 return $chdata
	}

	#----------------------------------------------------------------------
	# Replace normal characters by their XML entities
	#----------------------------------------------------------------------
	proc xmlencrypt {chdata} {

		foreach from {{\&} < > {"} {'}} \
				to {{\&amp;} {\&lt;} {\&gt;} {\&quot;} {\&apos;}} {    ;# '"
				regsub -all $from $chdata $to chdata
		 }   
		 return $chdata
	}


	#----------------------------------------------------------------------
	# Configure Xfcc by means of rewriting the .xfccrc in xml
	#----------------------------------------------------------------------
	proc SaveXfcc {} {
		global ::Xfcc::xfccrc ::Xfcc::xfccrcfile
		# file delete $xfccrcfile
		if {[catch {open $xfccrcfile w} optionF]} {
			puts stderr "$xfccrcfile can not be created"
		} else {
			# devide by 4 as the size function returns all subarray entries
			set size [expr [ array size ::Xfcc::xfccsrv ] / 4]

			puts $optionF "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
			puts $optionF "<xfcc>"
			for {set i 0} {$i < $size } {incr i} {
				if { [regexp {^# } $::Xfcc::xfccsrv($i,0)] && \
					  [regexp {^# } $::Xfcc::xfccsrv($i,1)] && \
					  [regexp {^# } $::Xfcc::xfccsrv($i,2)] && \
					  [regexp {^# } $::Xfcc::xfccsrv($i,3)] } {
					if {$size == 1} {
						puts $optionF "\t<server>"
						puts $optionF "\t\t<name>Server</name>"
						puts $optionF "\t\t<uri>http://</uri>"
						puts $optionF "\t\t<user>User_Name</user>"
						puts $optionF "\t\t<pass>Password</pass>"
						puts $optionF "\t\t<rating>Rating</rating>"
						puts $optionF "\t</server>"
					}
				} else {
					set ::Xfcc::xfccsrv($i,0) [::Xfcc::xmlencrypt $::Xfcc::xfccsrv($i,0) ]
					set ::Xfcc::xfccsrv($i,1) [::Xfcc::xmlencrypt $::Xfcc::xfccsrv($i,1) ]
					set ::Xfcc::xfccsrv($i,2) [::Xfcc::xmlencrypt $::Xfcc::xfccsrv($i,2) ]
					set ::Xfcc::xfccsrv($i,3) [::Xfcc::xmlencrypt $::Xfcc::xfccsrv($i,3) ]
					set ::Xfcc::xfccsrv($i,4) [::Xfcc::xmlencrypt $::Xfcc::xfccsrv($i,4) ]
					puts $optionF "\t<server>"
					puts $optionF "\t\t<name>$::Xfcc::xfccsrv($i,0)</name>"
					puts $optionF "\t\t<uri>$::Xfcc::xfccsrv($i,1)</uri>"
					puts $optionF "\t\t<user>$::Xfcc::xfccsrv($i,2)</user>"
					puts $optionF "\t\t<pass>$::Xfcc::xfccsrv($i,3)</pass>"
					puts $optionF "\t\t<rating>$::Xfcc::xfccsrv($i,4)</rating>"
					puts $optionF "\t</server>"
				}
			}
			puts $optionF "</xfcc>"
			close $optionF
			::Xfcc::ReadConfig $xfccrcfile
		}
	}
	
	#----------------------------------------------------------------------
	# Delete the currently selected server entry
	#----------------------------------------------------------------------
	proc DeleteServer {} {
		# mark a deleted server by # allows the user to manually
		# undelete by removing the # again before hitting ok.
		set ::Xfcc::Server   "# $::Xfcc::xfccsrv($::Xfcc::Oldnum,0)"
		set ::Xfcc::Username "# $::Xfcc::xfccsrv($::Xfcc::Oldnum,2)"
		set ::Xfcc::Password "# $::Xfcc::xfccsrv($::Xfcc::Oldnum,3)"
		set ::Xfcc::Rating   "# $::Xfcc::xfccsrv($::Xfcc::Oldnum,4)"
		set ::Xfcc::URI      "# $::Xfcc::xfccsrv($::Xfcc::Oldnum,1)"
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum) $::Xfcc::Server
		}

	#----------------------------------------------------------------------
	# Add a new, empty server entry to xfccsrv array
	#----------------------------------------------------------------------
	proc AddServer {} {

		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,0) $::Xfcc::Server
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,2) $::Xfcc::Username
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,3) $::Xfcc::Password
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,1) $::Xfcc::URI
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,4) $::Xfcc::Rating

 		set size [expr [ array size ::Xfcc::xfccsrv ] / 4]

		# increement the list box with a new server entry
		.configXfccSrv.xfccSrvList configure -height [expr $size+2]

 		set ::Xfcc::xfccsrv($size,0) "Unique_ServerName"
 		set ::Xfcc::xfccsrv($size,2) "Your_Login"
 		set ::Xfcc::xfccsrv($size,3) "SeCrEt!"
 		set ::Xfcc::xfccsrv($size,4) "Rating"
 		set ::Xfcc::xfccsrv($size,1) "http://"
 
 		set ::Xfcc::Server    $::Xfcc::xfccsrv($size,0)
 		set ::Xfcc::Username  $::Xfcc::xfccsrv($size,2)
 		set ::Xfcc::Password  $::Xfcc::xfccsrv($size,3)
 		set ::Xfcc::Rating    $::Xfcc::xfccsrv($size,4)
 		set ::Xfcc::URI       $::Xfcc::xfccsrv($size,1)
 
 		lappend ::Xfcc::lsrvname [list $::Xfcc::xfccsrv($size,0)]
 
 		set ::Xfcc::Oldnum    $size
	}

	#----------------------------------------------------------------------
	# Store the current values to the xfccsrv-array
	#----------------------------------------------------------------------
	proc xfccsrvstore {} {

		set number [ .configXfccSrv.xfccSrvList curselection ]
		if {!($number > 0)} {
			set number 0
		}
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,0) $::Xfcc::Server
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,2) $::Xfcc::Username
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,3) $::Xfcc::Password
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,4) $::Xfcc::Rating
		set ::Xfcc::xfccsrv($::Xfcc::Oldnum,1) $::Xfcc::URI

		set ::Xfcc::Server    $::Xfcc::xfccsrv($number,0)
		set ::Xfcc::Username  $::Xfcc::xfccsrv($number,2)
		set ::Xfcc::Password  $::Xfcc::xfccsrv($number,3)
		set ::Xfcc::Rating    $::Xfcc::xfccsrv($number,4)
		set ::Xfcc::URI       $::Xfcc::xfccsrv($number,1)

		set ::Xfcc::Oldnum    $number
		.configXfccSrv.xfccSrvList selection set $number
	}

	#----------------------------------------------------------------------
	# Configure Xfcc by means of rewriting the .xfccrc in xml
	#----------------------------------------------------------------------
	proc config {configfile} {
		global ::Xfcc::xfccrc ::Xfcc::xfccrcfile

		set xfccrcfile $configfile

		::Xfcc::ReadConfig $xfccrcfile
		set size [expr [array size ::Xfcc::xfccsrv ] / 4]

		set w ".configXfccSrv"
		if {[winfo exists $w]} {
			focus $w
			return
		}

		set number            1
		set ::Xfcc::Oldnum    0
		set ::Xfcc::Server    $::Xfcc::xfccsrv($::Xfcc::Oldnum,0)
		set ::Xfcc::Username  $::Xfcc::xfccsrv($::Xfcc::Oldnum,2)
		set ::Xfcc::Password  $::Xfcc::xfccsrv($::Xfcc::Oldnum,3)
		set ::Xfcc::Rating    $::Xfcc::xfccsrv($::Xfcc::Oldnum,4)
		set ::Xfcc::URI       $::Xfcc::xfccsrv($::Xfcc::Oldnum,1)

		# create the window and buttons
		toplevel $w
		wm title $w "\[$xfccrcfile\]"
		ttk::button $w.bOk     -text OK -command "::Xfcc::xfccsrvstore; ::Xfcc::SaveXfcc; destroy .configXfccSrv"
		ttk::button $w.bAdd    -text  [::tr "GlistAddField"] -command {
			::Xfcc::AddServer
		}

		ttk::button $w.bDelete -text [::tr "GlistDeleteField"] -command {
			::Xfcc::DeleteServer
		}
		ttk::button $w.bCancel -text [::tr "Cancel"] -command "destroy $w"

		listbox $w.xfccSrvList -height [expr [ array size ::Xfcc::xfccsrv ] / 4 + 1] -width 60 -selectmode single -list ::Xfcc::lsrvname
		# select the first entry
		$w.xfccSrvList selection set $::Xfcc::Oldnum

		ttk::label  $w.lxfccSrv   -text [::tr CCDlgServerName]
		ttk::label  $w.lxfccUid   -text [::tr CCDlgLoginName]
		ttk::label  $w.lxfccPas   -text [::tr CCDlgPassword]
		ttk::label  $w.lxfccURI   -text [::tr CCDlgURL]
		ttk::label  $w.lxfccrtype -text [::tr CCDlgRatingType]

		ttk::entry  .configXfccSrv.xfccSrv  -width 60 -textvariable ::Xfcc::Server
		ttk::entry  .configXfccSrv.xfccUid  -width 60 -textvariable ::Xfcc::Username
		ttk::entry  .configXfccSrv.xfccPas  -width 60 -textvariable ::Xfcc::Password
		ttk::entry  .configXfccSrv.xfccURI  -width 60 -textvariable ::Xfcc::URI

		if {$::tcl_version >= 8.5} {
			ttk::combobox .configXfccSrv.xfccrtype -values [sc_info ratings] -width 7 -textvariable ::Xfcc::Rating
		} else {
			eval tk_optionMenu .configXfccSrv.xfccrtype ::Xfcc::Rating [sc_info ratings]
			.configXfccSrv.xfccrtype configure -indicatoron 0 -width 7 -takefocus 1
		}

		# Bind the change of selection to a proper update of variables
		# and internal representation
		bind .configXfccSrv.xfccSrvList <<ListboxSelect>> {
			::Xfcc::xfccsrvstore
		}

		grid $w.xfccSrvList  -sticky e -columnspan 6 -column  0 -row 0 -rowspan $number

		grid $w.lxfccSrv     -sticky e -columnspan 2 -column  0 -row [expr {$number + 1}]
		grid $w.lxfccUid     -sticky e -columnspan 2 -column  0 -row [expr {$number + 2}]
		grid $w.lxfccPas     -sticky e -columnspan 2 -column  0 -row [expr {$number + 3}]
		grid $w.lxfccURI     -sticky e -columnspan 2 -column  0 -row [expr {$number + 4}]
		grid $w.lxfccrtype   -sticky e -columnspan 2 -column  0 -row [expr {$number + 5}]

		grid $w.xfccSrv      -sticky w -columnspan 4 -column  2 -row [expr {$number + 1}]
		grid $w.xfccUid      -sticky w -columnspan 4 -column  2 -row [expr {$number + 2}]
		grid $w.xfccPas      -sticky w -columnspan 4 -column  2 -row [expr {$number + 3}]
		grid $w.xfccURI      -sticky w -columnspan 4 -column  2 -row [expr {$number + 4}]
		grid $w.xfccrtype    -sticky w -columnspan 4 -column  2 -row [expr {$number + 5}]

		# Add the buttons to the window
		grid $w.bOk     -column 2 -row [expr {$number + 6}]
		grid $w.bAdd    -column 3 -row [expr {$number + 6}]
		grid $w.bDelete -column 4 -row [expr {$number + 6}]
		grid $w.bCancel -column 5 -row [expr {$number + 6}]

		bind $w <Escape> "$w.bCancel invoke"
		bind $w <F1> { helpWindow CCXfccSetupDialog}
	}

	#----------------------------------------------------------------------
	# Read xfccrcfile (xml) config file and stores the xml structure as
	# is to the global $xfccrc
	#----------------------------------------------------------------------
	proc ReadConfig {xfccrcfile} {
		global xfccrc

		::CorrespondenceChess::updateConsole "info This is Scids internal Xfcc-interface"
		::CorrespondenceChess::updateConsole "info Using $xfccrcfile..."
		if {[catch {open $xfccrcfile r} optionF]} {
			::CorrespondenceChess::updateConsole "info ERROR: Unable ot open config file $xfccrcfile";
		} else {
			set xfccrc [read $optionF]

			set dom [dom parse $xfccrc]
			set doc [$dom documentElement]
			set aNodes [$doc selectNodes {/xfcc/server}]
			set number   0

			# reset the servernames before reading them in again
			set ::Xfcc::lsrvname {}

			foreach srv $aNodes {
				set name     [$srv selectNodes {string(name)}]
				set uri      [$srv selectNodes {string(uri)}]
				set username [$srv selectNodes {string(user)}]
				set password [$srv selectNodes {string(pass)}]
				set rating   [$srv selectNodes {string(rating)}]

				set ::Xfcc::xfccsrv($number,0) $name
				set ::Xfcc::xfccsrv($number,1) $uri
				set ::Xfcc::xfccsrv($number,2) $username
				set ::Xfcc::xfccsrv($number,3) $password
				set ::Xfcc::xfccsrv($number,4) $rating

				lappend ::Xfcc::lsrvname [list $name ]

				incr number
			}
			close $optionF
		}
	}

	#----------------------------------------------------------------------
	# SOAPError: parses $xml and searches for error messages from the
	# server to report them to the user.
	#----------------------------------------------------------------------
	proc SOAPError {server xml} {
		# Remove the SOAP-Envelope and make all server responses to a
		# common XML format as they use the same error messages anyway.
		regsub -all {.*<soap:Fault>} $xml {<error>} xml
		regsub -all {</soap:Fault>.*} $xml {</error>} xml

		regsub -all {.*<MakeAMoveResponse.*\">} $xml {<error>} xml
		regsub -all {</MakeAMoveResponse>.*} $xml {</error>} xml
		regsub -all {<MakeAMoveResult>} $xml {<faultstring>} xml
		regsub -all {</MakeAMoveResult>} $xml {</faultstring>} xml

		set dom [dom parse $xml]
		set doc [$dom documentElement]

		set aNodes [$doc selectNodes //error]
		foreach game $aNodes {
			set fcode   [$game selectNodes {string(faultcode)}]
			set fstring [$game selectNodes {string(faultstring)}]
			switch -regexp -- $fstring \
			"Success" {
				::CorrespondenceChess::updateConsole "info Processing successfull!"
			} \
			"ServerError" {
				::CorrespondenceChess::updateConsole "info Server Error!"
				set Title "Scid Error"
				set Error "$server reported an unknown error."
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
			} \
			"FeatureUnavailable" {
				::CorrespondenceChess::updateConsole "info Feature unavailable!"
			} \
			"AuthenticationFailed" {
				::CorrespondenceChess::updateConsole "info Authentication failed!"
				set Title "Scid Authentication Failure!"
				set Error "Could not authenticate to the Xfcc-Server.\nPlease check Username and Password for $server."
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
			} \
			"InvalidGameID" {
				::CorrespondenceChess::updateConsole "info Invalid Game-ID!"
			} \
			"NotYourGame" {
				::CorrespondenceChess::updateConsole "info Not your game!"
			} \
			"NotYourTurn" {
				::CorrespondenceChess::updateConsole "info Not your turn!"
			} \
			"InvalidMove" {
				::CorrespondenceChess::updateConsole "info Invalid move!"
			} \
			"InvalidMoveNumber" {
				::CorrespondenceChess::updateConsole "info Invalid move number!"
			} \
			"NoDrawWasOffered" {
				::CorrespondenceChess::updateConsole "info No draw was offered!"
			} \
			"LostOnTime" {
				::CorrespondenceChess::updateConsole "info Lost on time!"
			} \
			"YouAreOnLeave" {
				::CorrespondenceChess::updateConsole "info You are on leave!"
			} \
			"MoveIsAmbigous" {
				::CorrespondenceChess::updateConsole "info Move is ambigous!"
			}
		}
	}

	#----------------------------------------------------------------------
	# Process all servers found in the global xfccrc and store the
	# games in path/.
	#----------------------------------------------------------------------
	proc ProcessAll {path} {
		global xfccrc

		# empty the state array
		set ::Xfcc::xfccstate {}

		set dom [dom parse $xfccrc]
		set doc [$dom documentElement]

		set aNodes [$doc selectNodes {/xfcc/server}]

		foreach srv $aNodes {
			set name     [::Xfcc::xmlencrypt [$srv selectNodes {string(name)}]]
			set uri      [::Xfcc::xmlencrypt [$srv selectNodes {string(uri)} ]]
			set username [::Xfcc::xmlencrypt [$srv selectNodes {string(user)}]]
			set password [::Xfcc::xmlencrypt [$srv selectNodes {string(pass)}]]
			set rating   [$srv selectNodes {string(rating)}]

			if {$rating == ""} {
				set rating "ICCF"
			}

			::CorrespondenceChess::updateConsole "info Processing $username\@$name..."
			set xml [::Xfcc::Receive $uri $username $password]
			::Xfcc::SOAPError $name $xml
			::Xfcc::WritePGN $path $name $rating $xml
			::Xfcc::PrintStatus $path $name $xml
		}
	}

	#----------------------------------------------------------------------
	# Recieve games via XFCC from the web service at uri using username
	# and password provided
	#----------------------------------------------------------------------
	proc Receive {uri username password} {
		# construct the SOAP-message for Xfcc Webservice
		set xmlmessage $::Xfcc::SOAPstart
			# generate the "Get my Games" call
			append xmlmessage {<GetMyGames xmlns="http://www.bennedik.com/webservices/XfccBasic">}
			append xmlmessage "<username>$username</username>"
			append xmlmessage "<password>$password</password>"
			append xmlmessage "</GetMyGames>"
		append xmlmessage $::Xfcc::SOAPend

		# send it to the web service note the space before the charset
		set token [::http::geturl $uri \
						-type "text/xml; charset=\"utf-8\"" \
						-query $xmlmessage]

		# retrieve result
		set xmlresult [::http::data $token]
		::http::cleanup $token

		###---###
		# if {[catch {open "/tmp/xfcc.xml" w} dbg]} {
		# 	::CorrespondenceChess::updateConsole "info ERROR: Unable ot open debug file";
		# } else {
		# 	puts $dbg $xmlresult
		# }
		# close $dbg
		###---###

		return $xmlresult
	}

	#----------------------------------------------------------------------
	# Send move via XFCC to the web service at uri using username
	# and password provided. Gameid is the unique id on the server,
	# move count the current move number, move the move to send in SAN,
	# comment the comment sent to the opponent. The other variables are
	# flags that might be true/false.
	#----------------------------------------------------------------------
	proc SendMove {uri username password gameid movecount move comment \
						resign acceptdraw offerdraw claimdraw} {

		# Encrypt textual entities to conform to XML
		set uri      [::Xfcc::xmlencrypt $uri]
		set username [::Xfcc::xmlencrypt $username]
		set password [::Xfcc::xmlencrypt $password]
		set comment  [::Xfcc::xmlencrypt $comment]

		set xmlmessage $::Xfcc::SOAPstart
			append xmlmessage {<MakeAMove xmlns="http://www.bennedik.com/webservices/XfccBasic">}
			append xmlmessage "<username>$username</username>"
			append xmlmessage "<password>$password</password>"
			append xmlmessage "<gameId>$gameid</gameId>"
			append xmlmessage "<resign>$resign</resign>"
			append xmlmessage "<acceptDraw>$acceptdraw</acceptDraw>"
			append xmlmessage "<movecount>$movecount</movecount>"
			append xmlmessage "<myMove>$move</myMove>"
			append xmlmessage "<offerDraw>$offerdraw</offerDraw>"
			append xmlmessage "<claimDraw>$claimdraw</claimDraw>"
			append xmlmessage "<myMessage>$comment</myMessage>"
			append xmlmessage "</MakeAMove>"
		append xmlmessage $::Xfcc::SOAPend

		# if {[catch {open "/tmp/send.xml" w} debug]} {
		# 	::CorrespondenceChess::updateConsole "info unable to open debug file..."
		# } else {
		# 	puts $debug $xmlmessage
		# }
		# close $debug

		# send it to the web service note the space before the charset
		set token [::http::geturl $uri \
						-type "text/xml; charset=\"utf-8\"" \
						-query $xmlmessage]

		# retrieve result
		set xmlresult [::http::data $token]
		::http::cleanup $token
		return $xmlresult
	}

	#----------------------------------------------------------------------
	# Send move to server, extracting login data first from config file
	#----------------------------------------------------------------------
	proc Send {name gameid movecount move comment \
				  resign acceptdraw offerdraw claimdraw} {
		global xfccrc

		set dom [dom parse $xfccrc]
		set doc [$dom documentElement]

		set aNodes [$doc selectNodes {/xfcc/server}]

		foreach srv $aNodes {
			set server   [$srv selectNodes {string(name)}]
			set uri      [$srv selectNodes {string(uri)}] 
			set username [$srv selectNodes {string(user)}]
			set password [$srv selectNodes {string(pass)}]
			
			if {$name == $server} {
				::CorrespondenceChess::updateConsole "info Processing $gameid for $username\@$name..."
				::CorrespondenceChess::updateConsole "info Sending $movecount\. $move \{$comment\}"

				if {$resign == "true"} {
					::CorrespondenceChess::updateConsole "info Resigning..."
				}
				if {$acceptdraw == "true"} {
					::CorrespondenceChess::updateConsole "info Accepting draw..."
				}
				if {$claimdraw == "true"} {
					::CorrespondenceChess::updateConsole "info Claiming draw..."
				}
				if {$offerdraw == "true"} {
					::CorrespondenceChess::updateConsole "info Offering draw..."
				}

				set xml [::Xfcc::SendMove $uri $username $password \
							$gameid $movecount $move $comment \
							$resign $acceptdraw $offerdraw $claimdraw]
				::Xfcc::SOAPError $name $xml

				# if {[catch {open "/tmp/answer.xml" w} debug]} {
				# 	::CorrespondenceChess::updateConsole "info unable to open debug file..."
				# } else {
				# 	puts $debug $xml
				# }
				# close $debug
			}
		}
	}

	#----------------------------------------------------------------------
	# Given the name of the Xfcc-Server and the XML-result from the web
	# server a PGN file with a single game is written. name is the name
	# of the server used for generation of the CmailGameID, xml is the
	# result from the web service. rating contains the string that
	# should be used to specify the rating system. It could be
	# something like Rating, Elo, ICCF, USCF, BCF etc. like usual in
	# Scid
	#----------------------------------------------------------------------
	proc WritePGN {path name rating xml} {

		# The following removes the SOAP-Envelope. tDOM does not seem to
		# like it for whatever reason, but it's not needed anyway.
		regsub -all {.*<GetMyGamesResult>} $xml {<GetMyGamesResult>} xml
		regsub -all {</GetMyGamesResult>.*} $xml {</GetMyGamesResult>} xml

		set dom [dom parse $xml]
		set doc [$dom documentElement]

		set aNodes [$doc selectNodes //XfccGame]
		foreach game $aNodes {

			set id           [::Xfcc::xmldecrypt [$game selectNodes {string(id)}]]
			set Event        [::Xfcc::xmldecrypt [$game selectNodes {string(event)}]]
			set Site         [::Xfcc::xmldecrypt [$game selectNodes {string(site)}]]
			set Date         [::Xfcc::xmldecrypt [$game selectNodes {string(eventDate)}]]
			set White        [::Xfcc::xmldecrypt [$game selectNodes {string(white)}]]
			set Black        [::Xfcc::xmldecrypt [$game selectNodes {string(black)}]]
			set WhiteElo     [::Xfcc::xmldecrypt [$game selectNodes {string(whiteElo)}]]
			set BlackElo     [::Xfcc::xmldecrypt [$game selectNodes {string(blackElo)}]]
			set TimeControl  [::Xfcc::xmldecrypt [$game selectNodes {string(timeControl)}]]
			set GameId       [::Xfcc::xmldecrypt [$game selectNodes {string(id)}]]
			set Source       [::Xfcc::xmldecrypt [$game selectNodes {string(gameLink)}]]
			set Round        [::Xfcc::xmldecrypt [$game selectNodes {string(round)}]]
			set Result       [::Xfcc::xmldecrypt [$game selectNodes {string(result)}]]
			set drawOffered  [::Xfcc::xmldecrypt [$game selectNodes {string(drawOffered)}]]
			set setup        [::Xfcc::xmldecrypt [$game selectNodes {string(setup)}]]
			set fen          [::Xfcc::xmldecrypt [$game selectNodes {string(fen)}]]
			set myTurn       [$game selectNodes {string(myTurn)}]
			set moves        [::Xfcc::xmldecrypt [$game selectNodes {string(moves)}]]
			set mess         [::Xfcc::xmldecrypt [$game selectNodes {string(message)}]]

			# These values may not be set, they were first introduced by
			# SchemingMind as extension to Xfcc.  If uppercase settings
			# (usual default) exist: use them and they should take
			# precedence. Note that the PNG header should use upper case
			# by convention
			set whiteCountry [::Xfcc::xmldecrypt [$game selectNodes {string(WhiteCountry)}]]
			set blackCountry [::Xfcc::xmldecrypt [$game selectNodes {string(BlackCountry)}]]
			set whiteIccfID  [::Xfcc::xmldecrypt [$game selectNodes {string(WhiteIccfID)}]]
			set blackIccfID  [::Xfcc::xmldecrypt [$game selectNodes {string(BlackIccfID)}]]
			set whiteFideID  [::Xfcc::xmldecrypt [$game selectNodes {string(WhiteFideID)}]]
			set blackFideID  [::Xfcc::xmldecrypt [$game selectNodes {string(BlackFideID)}]]
			set WhiteNA      [::Xfcc::xmldecrypt [$game selectNodes {string(WhiteNA)}]]
			set BlackNA      [::Xfcc::xmldecrypt [$game selectNodes {string(BlackNA)}]]

			if {$whiteCountry == ""} {
				set whiteCountry [::Xfcc::xmldecrypt [$game selectNodes {string(whiteCountry)}]]
			}
			if {$whiteIccfID == ""} {
				set whiteIccfID  [::Xfcc::xmldecrypt [$game selectNodes {string(whiteIccfID)}]]
			}
			if {$whiteFideID == ""} {
				set whiteFideID  [::Xfcc::xmldecrypt [$game selectNodes {string(whiteFideID)}]]
			}
			if {$blackCountry == ""} {
				set blackCountry [::Xfcc::xmldecrypt [$game selectNodes {string(blackCountry)}]]
			}
			if {$blackIccfID == ""} {
				set blackIccfID  [::Xfcc::xmldecrypt [$game selectNodes {string(blackIccfID)}]]
			}
			if {$blackFideID == ""} {
				set blackFideID  [::Xfcc::xmldecrypt [$game selectNodes {string(blackFideID)}]]
			}
			# White/BlackNA are normally left blank but if the user
			# allwos contain the mail addresses of the player
			if {$WhiteNA == ""} {
				set WhiteNA      [::Xfcc::xmldecrypt [$game selectNodes {string(whiteNA)}]]
			}
			if {$BlackNA == ""} {
				set BlackNA      [::Xfcc::xmldecrypt [$game selectNodes {string(blackNA)}]]
			}
			if {$WhiteNA == ""} {
				set WhiteNA "white@unknown.org"
			}
			if {$BlackNA == ""} {
				set BlackNA "black@unknown.org"
			}


			# get the variant as scid can not handle many of them.
			# a list of all possible tags can be found here:
			# http://wiki.schemingmind.com/PGNVariantValues
			# http://wiki.schemingmind.com/Variants
			set variant         [$game selectNodes {string(variant)}]

			set filename [file nativename [file join $path "$name-$id.pgn"]]
			file delete $filename

			# Drop games that are not "normal" chess as scid can not
			# handle variants. Note that the ICCF does not set the
			# variant flag. Additionally, it is enough to drop variant
			# games from the inbox to get proper playlists.
			if { ($Result == "Cancelled") } {
					::CorrespondenceChess::updateConsole "info $name-$id was cancelled...";
			} elseif {($variant == "chess") || ($variant == "") || ($variant == "randompieces") || ($variant == "upsidedown") || ($variant == "loosers") ||  ($variant == "nocastle")} {
				### --- Istvan --- ###
				### Racing Kings is not possible due to unambigious moves
				### that are ambigious if check is allowed
				### ($variant == "racingkings") ||
				### --- Istvan --- ###

				if {[catch {open $filename w} pgnF]} {
					::CorrespondenceChess::updateConsole "info ERROR: Unable to open config file $filename";
				} else {
					::CorrespondenceChess::updateConsole "info $name-$id..."
					puts $pgnF "\[Event \"$Event\"\]";
					puts $pgnF "\[Site \"$Site\"\]";
					puts $pgnF "\[Date \"$Date\"\]";
					puts $pgnF "\[Round \"$Round\"\]";
					puts $pgnF "\[White \"$White\"\]";
					puts $pgnF "\[Black \"$Black\"\]";
					puts $pgnF "\[White$rating \"$WhiteElo\"\]";
					puts $pgnF "\[Black$rating \"$BlackElo\"\]";
					puts $pgnF "\[TimeControl \"$TimeControl\"\]";
					puts $pgnF "\[GameId \"$GameId\"\]";
					puts $pgnF "\[Source \"$Source\"\]";
					puts $pgnF "\[WhiteNA \"$WhiteNA\"]";
					puts $pgnF "\[BlackNA \"$BlackNA\"]";
					puts $pgnF "\[Mode \"XFCC\"\]";
					puts $pgnF "\[CmailGameName \"$name-$id\"\]";

					if {$whiteCountry != ""} {
						puts $pgnF "\[WhiteCountry \"$whiteCountry\"\]";
					}
					if {$blackCountry != ""} {
						puts $pgnF "\[BlackCountry \"$blackCountry\"\]";
					}
					if {$whiteIccfID > 0} {
						puts $pgnF "\[WhiteIccfID \"$whiteIccfID\"\]";
					}
					if {$blackIccfID > 0} {
						puts $pgnF "\[BlackIccfID \"$blackIccfID\"\]";
					}
					if {$whiteFideID  > 0} {
						puts $pgnF "\[WhiteFideID \"$whiteFideID\"\]";
					}
					if {$blackFideID > 0} {
						puts $pgnF "\[BlackFideID \"$blackFideID\"\]";
					}
					if {$setup == "true"} {
						puts $pgnF "\[FEN \"$fen\"\]";
					}

					# add result to the header
					# Adjudication is handled like normal game results, that
					# is WhiteWins == WhiteWinAdjudicated etc.
					switch -regexp -- $Result \
					"Ongoing" {
						puts $pgnF "\[Result \"*\"\]\n";
					} \
					"AdjudicationPending" {
						puts $pgnF "\[Result \"*\"\]\n";
					} \
					"WhiteWin*" {
						puts $pgnF "\[Result \"1-0\"\]\n";
					} \
					"BlackWin*" {
						puts $pgnF "\[Result \"0-1\"\]\n";
					} \
					"Draw*" {
						puts $pgnF "\[Result \"1/2-1/2\"\]\n";
					} \
					"WhiteDefaulted" {
						puts $pgnF "\[Result \"0-1\"\]\n";
					} \
					"BlackDefaulted" {
						puts $pgnF "\[Result \"1-0\"\]\n";
					} \
					"BothDefaulted" {
						puts $pgnF "\[Result \"1/2-1/2\"\]\n";
					} \
					default {
						puts $pgnF "\[Result \"$Result\"\]\n";
					}

					# Add the game-id as comment before starting the game.
					# This might be helpfull on certain mobile devices, that
					# can not deal with extensive header information, e.g.
					# OpenChess on PalmOS.
					puts $pgnF "{$name-$id}"
					puts $pgnF $moves

					# If the PGN already ends with a comment, do not place
					# the message string afterwards as scid will then
					# discard the comment in the movelist.
					if {[string range $moves end end] != "\}"} {
						if {($myTurn == "true") && ($mess != "")} {
							puts -nonewline $pgnF "\{"
							puts -nonewline $pgnF $mess
							puts $pgnF "\}"
						}
					}
					# If a game has finished and a message is sent allways
					# add it here.
					if {($Result != "Ongoing") && ($mess != "")} {
						puts -nonewline $pgnF "\{"
						puts -nonewline $pgnF $mess
						puts $pgnF "\}"
					}

					# add result at the end
					switch -regexp -- $Result \
					"Ongoing" {
						puts $pgnF "*";
					} \
					"AdjudicationPending" {
						puts $pgnF "*";
					} \
					"WhiteWin*" {
						puts $pgnF "1-0\n";
					}\
					"BlackWin*" {
						puts $pgnF "0-1\n";
					}\
					"Draw*" {
						puts $pgnF "1/2-1/2\n";
					} \
					"WhiteDefaulted" {
						puts $pgnF "\{White Defaultet\} 0-1\n";
					}\
					"BlackDefaulted" {
						puts $pgnF "\{Black Defaultet\} 1-0\n";
					}\
					"BothDefaulted" {
						puts $pgnF "\{Both Defaultet\} 1/2-1/2\n";
					}
					close $pgnF
				}
			}
		}
	}

	#----------------------------------------------------------------------
	# Prints all status flags of the games in xml for server name.
	#----------------------------------------------------------------------
	proc PrintStatus {path name xml} {
		regsub -all {.*<GetMyGamesResult>} $xml {<GetMyGamesResult>} xml
		regsub -all {</GetMyGamesResult>.*} $xml {</GetMyGamesResult>} xml

		set dom [dom parse $xml]
		set doc [$dom documentElement]

		set aNodes [$doc selectNodes //XfccGame]
		foreach game $aNodes {
			set id              [$game selectNodes {string(id)}]
			set myTurn          [$game selectNodes {string(myTurn)}]
			set daysPlayer      [$game selectNodes {string(daysPlayer)}]
			set hoursPlayer     [$game selectNodes {string(hoursPlayer)}]
			set minutesPlayer   [$game selectNodes {string(minutesPlayer)}]
			set daysOpponent    [$game selectNodes {string(daysOpponent)}]
			set hoursOpponent   [$game selectNodes {string(hoursOpponent)}]
			set minutesOpponent [$game selectNodes {string(minutesOpponent)}]
			set drawOffered     [$game selectNodes {string(drawOffered)}]
			set setup           [$game selectNodes {string(setup)}]
			set fen             [$game selectNodes {string(fen)}]
			set variant         [$game selectNodes {string(variant)}]
			set noOpeningBooks  [$game selectNodes {string(noOpeningBooks)}]
			set noDatabases     [$game selectNodes {string(noDatabases)}]
			set noTablebases    [$game selectNodes {string(noTablebases)}]
			set noEngines       [$game selectNodes {string(noEngines)}]
			set Result          [$game selectNodes {string(result)}]
			set TimeControl     [$game selectNodes {string(timeControl)}]
			set mess            [::Xfcc::xmldecrypt [$game selectNodes {string(message)}]]
			set serverinfo      [::Xfcc::xmldecrypt [$game selectNodes {string(serverInfo)}]]

			# Set to official ICCF timing by default
			# as ICCF does not send TimeControl
			set TC "10/50d (?)"
			if { [regexp {\+} $TimeControl] } {
				set TC [split $TimeControl "+"]
				set gametime  [ expr {[lindex $TC 0] / 86400} ]
				set increment [ expr {[lindex $TC 1] / 86400} ]

				set TC $gametime
				append TC "d + "
				append TC $increment
				append TC "d (Fischer)"
			} elseif { [regexp {\/} $TimeControl] } {
				set TC [split $TimeControl "/"]
				set moves   [ expr {[lindex $TC 0]} ]
				set days    [ expr {[lindex $TC 1] / 86400 }]
				set TC $moves
				append TC " / "
				append TC $days
				append TC "d"
				# 10/50 is the official timing for ICCF
				if { ($moves == 10) && ($days == 50) } {
					set TC "$TC (ICCF)"
				}
			}

			set mytime  [expr $daysPlayer*24*60+$hoursPlayer*60+$minutesPlayer]
			set opptime [expr $daysOpponent*24*60+$hoursOpponent*60+$minutesOpponent]

			if {[$game selectNodes {string(hasWhite)}] == "true"} {
				set clockW [format "%2ud %2u:%2u" $daysPlayer $hoursPlayer $minutesPlayer]
				set clockB [format "%2ud %2u:%2u" $daysOpponent $hoursOpponent $minutesOpponent]
			} else {
				set clockB [format "%2ud %2u:%2u" $daysPlayer $hoursPlayer $minutesPlayer]
				set clockW [format "%2ud %2u:%2u" $daysOpponent $hoursOpponent $minutesOpponent]
			}
			lappend ::Xfcc::xfccstate [list \
				"$name-$id" \
				[list "myTurn" $myTurn] \
				[list "clockW" $clockW] \
				[list "clockB" $clockB] \
				[list "drawOffered"  $drawOffered ]\
				[list "setup" $setup] \
				[list "fen" $fen] \
				[list "variant" $variant] \
				[list "noOpeningBooks" $noOpeningBooks] \
				[list "noTablebases" $noTablebases] \
				[list "noDatabases" $noDatabases] \
				[list "noEngines" $noEngines] \
				[list "result" $Result] \
				[list "TimeControl" $TC] \
				[list "message" $mess] \
				[list "mytime" $mytime] \
				[list "opptime" $opptime] \
				[list "serverInfo" $serverinfo] ]
		}

		set filename [scidConfigFile xfccstate]
		file delete $filename

		if {[catch {open $filename w} stateF]} {
			::CorrespondenceChess::updateConsole "info ERROR: Unable to open state file $filename";
		} else {
			puts $stateF "# Scid options file"
			puts $stateF "# State file for correspondence chess"
			puts $stateF "# Version: $::scidVersion, $::scidVersionDate"
			puts $stateF "# This file is generated automatically. Do NOT edit."

			set ::Xfcc::update 1
			set ::Xfcc::lastupdate [clock seconds]
			set curtime [clock format $::Xfcc::lastupdate]
			puts $stateF "#"
			puts $stateF "# Last Update: $curtime"
			puts $stateF "#"
			foreach i { ::Xfcc::lastupdate     \
							::Xfcc::xfccstate } {
				puts $stateF "set $i [list [set $i]]"
			}
		}
		close $stateF

	}

	#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	# source the options file to overwrite the above setup
	if {[catch {source [scidConfigFile xfccstate]} ]} {
	} else {
	  ::splash::add "Xfcc state found and restored."
	}

}

#======================================================================
#
# Correspondence chess menues, dialogs and functions
#
#======================================================================






















#----------------------------------------------------------------------
# Correspnodence Chess functions
namespace eval CorrespondenceChess {

	# wether the console is already open or not
	set isOpen   0
	
	# default Database
	set CorrBase        [file nativename [file join $scidDataDir "Correspondence.si4"]]

	# incoming PGN files
	set Inbox           [file nativename [file join $scidDataDir "Inbox"]]
	# outgoing PGN files
	set Outbox          [file nativename [file join $scidDataDir "Outbox"]]

	# Connector config for game relay
	set Connector       [file nativename [file join $scidDataDir "connector.xml"]]

	# use internal xfcc-support
	set XfccInternal     1
	set xfccrcfile      [file nativename [file join $scidConfigDir "xfccrc"]]

	# Path for additional functions that should be available in the CC
	# window only. All files from here are sourced once the CC window
	# starts up.
	set PluginPath      [file nativename [file join $scidDataDir "Plugins/Correspondence"]]

	# external fetch  tool (eg. Xfcc)
	set XfccFetchcmd     "./Xfcc-Receive.pl"
	# external send tool (eg. Xfcc)
	set XfccSendcmd      "./Xfcc-Send.pl"

	# confirm before sending moves?
	set XfccConfirm          1

	# Relay games from ICCF: this list contains all MakeAMove-URLs for
	# the games to be relayed
	set RelayGames           {}

	# Show only games where the player has the move?
	set ListOnlyOwnMove      0
	# set sortoptlist        [list "Site, Event, Round, Result, White, Black" "My Time" "Time per Move" "Opponent Time"]
	
	# Sort criteria to use
	set CCOrderClassic       0
	set CCOrderMyTime        1
	set CCOrderTimePerMove   2
	set CCOrderStartDate     3
	set CCOrderOppTime       4

	# Which to use
	set ListOrder          $CCOrderClassic

	# email-programm capable of SMTP auth and attachements
	set mailer           "/usr/bin/nail"
	# mail a bcc of the outgoing mails to this address
	set bccaddr          ""
	# mailermode might be: mailx, mozilla, claws or mailurl
	set mailermode       "mailx"
	# parameter for attaching a file
	set attache          "-a"
	# parameter for the subject line
	set subject          "-s"

	set CorrSlot         -1

	# current number in game list
	set num              0

	# Content of CC windows games list
	set clipboardText    ""

	set glccstart        1
	set glgames          0


	#----------------------------------------------------------------------
	# Fetch a file via http
	#----------------------------------------------------------------------
	proc getPage { url } {
		set token [::http::geturl $url]
		set data [::http::data $token]
		::http::cleanup $token
		return $data
	}

	#----------------------------------------------------------------------
	# Open a File select dialog and returns the file selected
	# $i: title text after "Scid Correspondence Chess: Select "
	# $filespecs: the specs of the file (currently ignored)
	#----------------------------------------------------------------------
	proc chooseFile {i filespecs} {
		set idir [pwd]

		set fullname [tk_getOpenFile -initialdir $idir -title "Scid Correspondence Chess: Select $i"]
		if {$fullname == ""} { return }
	  
		return $fullname
	}

	#----------------------------------------------------------------------
	# Set the default correspondence base to the file selected.
	# Open Database works on that file, but in principle every other
	# DB of the type "Correspondence" can be used by just loading by
	# hand before using the CC features.
	#----------------------------------------------------------------------
	proc chooseCorrBase {} {
		global ::CorrespondenceChess::CorrBase

		set filetype { "Scid databases" {".si4" ".si"} }
		set CorrBase [chooseFile "default correspondence chess DB..." $filetype]
	}

	#----------------------------------------------------------------------
	# Choose the path where to fetch Xfcc-games to. All pgn-files in
	# this path are used as input so this offers a way to incorporate
	# cmail games as well.
	#----------------------------------------------------------------------
	proc chooseInbox    {} {
		global ::CorrespondenceChess::Inbox

		set filetype { "All files" {".*"} }
		set Inbox [file dirname [chooseFile "default correspondence chess Inbox..." $filetype]]
	}

	#----------------------------------------------------------------------
	# In Outbox a pgn-version of the game after the users move is
	# stored. This includes all variations and comments! For
	# incorporation of cmail they need to be stripped.
	#----------------------------------------------------------------------
	proc chooseOutbox   {} {
		global ::CorrespondenceChess::Outbox               \

		set filetype { "All files" {".*"} }
		set Outbox [file dirname [chooseFile "default correspondence chess Outbox..." $filetype]]
	}

	#----------------------------------------------------------------------
	# Xfcc fetching is done by an external utility, currently perl as
	# this eases up XML parsing a lot. Having it natively would be
	# desireable though. On the other hand an external utility could
	# also fetch cmail games or whatever other source as it will be
	# transparent to scid. It just has to write the CmailGameName extra
	# tag within the header to a unique ID.
	#----------------------------------------------------------------------
	proc chooseFetch    {} {
		global ::CorrespondenceChess::XfccFetchcmd

		set filetype { "All files" {".*"} }
		set XfccFetchcmd [chooseFile "default correspondence chess Fetch Tool..." $filetype]
	}

	#----------------------------------------------------------------------
	# Xfcc send utility. Similar to fetch but just the other way round
	# ;)
	#----------------------------------------------------------------------
	proc chooseSend     {} {
		global ::CorrespondenceChess::XfccSendcmd

		set filetype { "All files" {".*"} }
		set XfccSendcmd [chooseFile "default correspondence chess Send Tool..." $filetype]
	}

	#----------------------------------------------------------------------
	# Check for xfccrc
	#----------------------------------------------------------------------
	proc checkXfccrc {} {
		global ::CorrespondenceChess::xfccrcfile

		if {![file exists $xfccrcfile]} {
			if {[catch {open $xfccrcfile w} optionF]} {
				tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
					-message "Unable to write options file: $xfccrcfile\n$optionF"
			} else {
				puts $optionF "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
				puts $optionF "<xfcc>"
				puts $optionF "<server>"
				puts $optionF "   <name>ServerName</name>"
				puts $optionF "   <uri>http://</uri>"
				puts $optionF "   <user>UserName</user>"
				puts $optionF "   <pass>PassWord</pass>"
				puts $optionF "</server>"
				puts $optionF "</xfcc>"
				close $optionF
			}
		}
	}
	
	#----------------------------------------------------------------------
	# Check for the default DB, create it if it does not exist.
	#----------------------------------------------------------------------
	proc checkCorrBase {} {
		global ::CorrespondenceChess::CorrBase

		if {![file exists $CorrBase]} {
			set currbase [sc_base current]
			set fName [file rootname $CorrBase]
			if {[catch {sc_base create $fName} result]} {
					tk_messageBox -icon warning -type ok -parent . \
						-title "Scid: Unable to create base" -message $result
			}
			# Type 6 == Correspondence chess
			sc_base type [sc_base current] 6
			sc_base close
			sc_base switch $currbase
		}
	}

	#----------------------------------------------------------------------
	# Check for In-/Outbox directories and create them if not avaiable
	#----------------------------------------------------------------------
	proc checkInOutbox {} {
		global scidDataDir ::CorrespondenceChess::Inbox ::CorrespondenceChess::Outbox

		if {[file exists $Inbox]} {
			if {[file isfile $Inbox]} {
				file rename -force $Inbox "$Inbox.bak"
				file mkdir $Inbox
			}
		} else {
			if {[catch { file mkdir "$Inbox" } result]} {
				set ::CorrespondenceChess::Inbox [file nativename [file join $scidDataDir "Inbox"]]
				file mkdir $Inbox
			}
		}

		if {[file exists $Outbox]} {
			if {[file isfile $Outbox]} {
				file rename -force $Outbox "$Outbox.bak"
				file mkdir $Outbox
			}
		} else {
			if {[catch { file mkdir "$Outbox" } result]} {
				set ::CorrespondenceChess::Inbox [file nativename [file join $scidDataDir "Outbox"]]
				file mkdir $Outbox
			}
		}
	}

	#----------------------------------------------------------------------
	# Save the Correspondence Chess options
	#----------------------------------------------------------------------
	proc saveCCoptions {} {
		set optionF ""
		if {[catch {open [scidConfigFile correspondence] w} optionF]} {
			tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
				-message "Unable to write options file: [scidConfigFile correspondence]\n$optionF"
		} else {
			# Check all paths etc. exist and contain valid data
			::CorrespondenceChess::checkInOutbox
			::CorrespondenceChess::checkXfccrc
			::CorrespondenceChess::checkCorrBase

			puts $optionF "# Scid options file"
			puts $optionF "# Version: $::scidVersion, $::scidVersionDate"
			puts $optionF "# This file contains commands in the Tcl language format."
			puts $optionF "# If you edit this file, you must preserve valid Tcl"
			puts $optionF "# format or it will not set your Scid options properly."
			puts $optionF ""

			foreach i { ::CorrespondenceChess::CorrBase       \
							::CorrespondenceChess::Inbox          \
							::CorrespondenceChess::Outbox         \
							::CorrespondenceChess::XfccFetchcmd   \
							::CorrespondenceChess::XfccSendcmd    \
							::CorrespondenceChess::mailer         \
							::CorrespondenceChess::bccaddr        \
							::CorrespondenceChess::mailermode     \
							::CorrespondenceChess::attache        \
							::CorrespondenceChess::subject        \
							::CorrespondenceChess::PluginPath     \
							::CorrespondenceChess::Connector      \
							::CorrespondenceChess::RelayGames     \
							::CorrespondenceChess::ListOrder  } {
				set path [set $i]

				puts $optionF "set $i [list [set $i]]"

				# If possible replace absolute path by a relative one to
				# $scidDataDir

				# first get rid of windows path separators as they get
				# interpreted by TCL
				# regsub -all {\\} $::scidDataDir "/" sdd
				# regsub -all {\\}  $path "/" pd

				# if { [regexp $sdd $pd] } {
				#	regsub -all $sdd $pd "scidDataDir" path
				#	# now convert back to nativename
				#	set path [file nativename $path]
				#	puts $optionF "set $i \$$path"
				#} else {
				#	puts $optionF "set $i [list [set $i]]"
				#}

			}
			foreach i { ::CorrespondenceChess::xfccrcfile     \
			} {
				puts $optionF "set $i [list [set $i]]"

				# set path [set $i]
				# regsub -all {\\} $::scidConfigDir "/" sdd
				# regsub -all {\\} $path "/" pd
				# if { [regexp $sdd $pd] } {
				#	regsub -all $sdd $pd "scidDataDir" path
				#	set path [file nativename $path]
				#	puts $optionF "set $i \$$path"
				#} else {
				#	puts $optionF "set $i [list [set $i]]"
				#}

			}
			if {$::CorrespondenceChess::XfccInternal < 0}  {
				puts $optionF {set ::CorrespondenceChess::XfccInternal 0}
			} else {
				puts $optionF "set ::CorrespondenceChess::XfccInternal $::CorrespondenceChess::XfccInternal"
			}
			if {$::CorrespondenceChess::XfccConfirm < 0}  {
				puts $optionF {set ::CorrespondenceChess::XfccConfirm 0}
			} else {
				puts $optionF "set ::CorrespondenceChess::XfccConfirm $::CorrespondenceChess::XfccConfirm"
			}
			if {$::CorrespondenceChess::ListOnlyOwnMove < 0}  {
				puts $optionF {set ::CorrespondenceChess::ListOnlyOwnMove 0}
			} else {
				puts $optionF "set ::CorrespondenceChess::ListOnlyOwnMove $::CorrespondenceChess::ListOnlyOwnMove"
			}

		}
		close $optionF
		set ::statusBar "Correspondence chess options were saved to: [scidConfigFile correspondence]"
	}

	#----------------------------------------------------------------------
	# yset / yview: enable synchronous scrolling of the CC game list, ie.
	# all text widgets involved scroll simultaneously by the same ammount
	# in the vertial direction.
	#----------------------------------------------------------------------
	proc yset {args} {
		set w .ccWindow
		eval [linsert $args 0 $w.bottom.ysc set]
		yview moveto [lindex [$w.bottom.ysc get] 0]
	}

	proc yview {args} {
		set w .ccWindow
		eval [linsert $args 0 $w.bottom.id      yview]
		eval [linsert $args 0 $w.bottom.toMove  yview]
		eval [linsert $args 0 $w.bottom.event   yview]
		eval [linsert $args 0 $w.bottom.site    yview]
		eval [linsert $args 0 $w.bottom.white   yview]
		eval [linsert $args 0 $w.bottom.black   yview]
		eval [linsert $args 0 $w.bottom.clockW  yview]
		eval [linsert $args 0 $w.bottom.clockB  yview]
		eval [linsert $args 0 $w.bottom.var     yview]
		eval [linsert $args 0 $w.bottom.feature yview]
	}

	#----------------------------------------------------------------------
	# Translate the local menu
	#----------------------------------------------------------------------
	proc doConfigMenus { } {
		set lang $::language

		if {! [winfo exists .ccWindow]} { 
			raiseWin .ccWindow
			return
		}

		set m .ccWindow.menu

		foreach idx {0 1} tag {CorrespondenceChess Edit} {
			configMenuText $m $idx $tag $lang
		}
		foreach idx {0 1 3 4 6 7 8 9 10 11 13 14} tag {CCConfigure CCConfigRelay CCRetrieve  CCInbox  CCSend  CCResign  CCClaimDraw CCOfferDraw CCAcceptDraw CCGamePage  CCNewMailGame CCMailMove } {
			configMenuText $m.correspondence $idx $tag $lang
		}
		foreach idx {0 } tag { CCEditCopy } {
			configMenuText $m.edit $idx $tag $lang
		}
	}

	#----------------------------------------------------------------------
	# Call the web page of the game. The URL is extracted from the
	# Source tag that is stored with each game.
	#----------------------------------------------------------------------
	proc CallWWWGame {} {
		::CorrespondenceChess::updateConsole "Calling web page..."
		set Extra  [sc_game tags get Extra]
		set extraTagsList [split $Extra "\n"]
		set source ""
		foreach i $extraTagsList {
			if { [string equal -nocase [lindex $i 0] "Source" ] } {
				set source [string range $i 8 end-1]
				openURL $source
			}
		}
	}

	#----------------------------------------------------------------------
	# Store the relays list, but only those URLs that match
	# iccf-webchess' games page.
	#----------------------------------------------------------------------
	proc RelaysOK { } {
		global ::CorrespondenceChess::RelayGames

		set w .editCCRelays

		if {[catch {open $::CorrespondenceChess::Connector r} connectF]} {
				set Title "Error"
				append Error "$::CorrespondenceChess::Connector\n"
				append Error [::tr CCErrDirNotUsable]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
				return
		} else {
			set connectxml [read $connectF]

			set dom [dom parse $connectxml]
			set doc [$dom documentElement]
			set aNodes [$doc selectNodes {/connector/server}]
			set number   0
			foreach srv $aNodes {
				set stripforid   [$srv selectNodes {string(stripforid)}]

				set text [string trim [$w.f.text get 1.0 end]]
				set ::CorrespondenceChess::RelayGames {}
				foreach game [split $text "\n"] {
					set game [string trim $game]
					if {[string match "*$stripforid*" $game]} {
						lappend ::CorrespondenceChess::RelayGames $game
					}
				} 
			}
			close $connectF
		}

		::CorrespondenceChess::saveCCoptions
		destroy .editCCRelays
	}

	#----------------------------------------------------------------------
	# Configure the games to be relayed from ICCF Webchess
	#----------------------------------------------------------------------
	proc ConfigureRelay { } {
		global ::CorrespondenceChess::RelayGames

		puts stderr $::CorrespondenceChess::Connector
		if {![file exists $::CorrespondenceChess::Connector]} {
				if {[catch {open $::CorrespondenceChess::Connector w} connectF]} {

				} else {
					puts $connectF "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
					puts $connectF "<connector>";
					puts $connectF "\t<server>";
					puts $connectF "\t\t<name>ICCF</name>";
					puts $connectF "\t\t<stripforid>http://www.iccf-webchess.com/MakeAMove.aspx\?id=</stripforid>";
					puts $connectF "\t\t<pgnbaseurl>http://www.iccf-webchess.com/GetPGN.aspx?id=</pgnbaseurl>";
					puts $connectF "\t\t<cmailprefix>game</cmailprefix>";
					puts $connectF "\t</server>";
					puts $connectF "</connector>";
					close $connectF
				}
		}

		if {[catch {open $::CorrespondenceChess::Connector r} connectF]} {
				set Title "Error"
				append Error "$::CorrespondenceChess::Connector\n"
				append Error [::tr CCErrDirNotUsable]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
				return
		} else {
			close $connectF
			set w .editCCRelays
			set oldRelays $::CorrespondenceChess::RelayGames

			if {[winfo exists $w]} { return }
			toplevel $w
			::setTitle $w [::tr "CCDlgConfigRelay"]

			autoscrollframe $w.desc text $w.desc.text \
					-background gray90 -foreground black \
					-width 60 -height 7 -wrap word -cursor top_left_arrow
			$w.desc.text insert end [::tr "CCDlgConfigRelayHelp"]
			$w.desc.text configure -state disabled
			pack $w.desc -side top -fill x

			pack [ttk::frame $w.b] -side bottom -fill x
			autoscrollframe $w.f text $w.f.text -width 60 -height 10 -wrap none

			foreach g $::CorrespondenceChess::RelayGames {
				$w.f.text insert end "$g\n"
			}
			pack $w.f -side top -fill both -expand yes

			ttk::button $w.b.ok -text OK -command {
					::CorrespondenceChess::RelaysOK
			}
			ttk::button $w.b.cancel -text $::tr(Cancel) -command "grab release $w; destroy $w"
			pack $w.b.cancel $w.b.ok -side right -padx 5 -pady 5
		}
	}

	#----------------------------------------------------------------------
	# Fetch PGN file of games to be relayed and put them with the
	# proper header tags into Scids inbox for display
	# As parameter use the MakeAMove-URL from ICCF.
	# Currently only relaying from ICCF is supported.
	#----------------------------------------------------------------------
	proc RelayGames { gameurl } {
		global ::CorrespondenceChess::Inbox

		if {[catch {open $::CorrespondenceChess::Connector r} connectF]} {
			::CorrespondenceChess::updateConsole "info ERROR: Unable ot open connector $::CorrespondenceChess::Connector";
		} else {

			set connectxml [read $connectF]

			set dom [dom parse $connectxml]
			set doc [$dom documentElement]
			set aNodes [$doc selectNodes {/connector/server}]
			set number   0
			foreach srv $aNodes {
				set name         [$srv selectNodes {string(name)}]
				set stripforid   [$srv selectNodes {string(stripforid)}]
				set pgnbaseurl   [$srv selectNodes {string(pgnbaseurl)}]
				set cmailprefix  [$srv selectNodes {string(cmailprefix)}]

				if {[regexp "$stripforid" $gameurl]} {

					regsub -all "$stripforid" $gameurl {} gameid

					::CorrespondenceChess::updateConsole "info Fetching $gameid from $name";
					set cmailgamename   "$cmailprefix$gameid"
					set pgnurl          "$pgnbaseurl$gameid"

					# convert from latin-1 to utf-8
					set pgn [encoding convertfrom iso8859-1 [::CorrespondenceChess::getPage $pgnurl ]]

					# split by line endings for insertion of necessary header tags
					set gamelist [split $pgn {
}]

					set filename [file nativename [file join $::CorrespondenceChess::Inbox "$cmailgamename.pgn"]]

					if {[catch {open $filename w} pgnF]} {
						::CorrespondenceChess::updateConsole "info ERROR: Unable to open $filename";
					} else {
						foreach line $gamelist {
							if {[string match "*Result *" $line]} {
								puts $pgnF $line
								puts $pgnF "\[CmailGameName \"$cmailgamename\"\]"
								puts $pgnF "\[Source \"$gameurl\"\]"
								puts $pgnF "\[Mode \"Relay\"\]"
							} else {
								puts $pgnF $line
							}
						}
						close $pgnF
					}
				}

			}
		}
		close $connectF
	}

	#----------------------------------------------------------------------
	# Resize the console window
	#----------------------------------------------------------------------
	proc ConsoleResize {} {
		set w .ccWindow

		# unbind configure event
		bind $w <Configure> {}

		# get old window width and height
		set oldheight $::winHeight($w)
		set oldwidth  $::winWidth($w)

		# get the new window width and height
		set temp [wm geometry $w]
		set n [scan $temp "%dx%d+%d+%d" width height x y]

		if {$height > 0 && $width > 0} {
			if {$height != $oldheight} {
				# resize the table of games
				foreach col {id toMove event site white black clockW clockB var feature} {
					$w.bottom.$col  configure -height $height
				}
				# record the new size
				recordWinSize $w
				# set the windows size to this new size explicitly to
				# avoid flicker
				setWinSize $w
			}
		}
		recordWinSize $w
		# rebind the configure event
		bind $w <Configure> { ::CorrespondenceChess::ConsoleResize }
	}

	#----------------------------------------------------------------------
	# Allow to disable engine analysis in case engines are not allowed
	# for the ongoing game.
	#----------------------------------------------------------------------
	proc EnableEngineAnalysis {on} {
	
		if {$on == 0} {
			set m .menu.tools
			$m entryconfigure 0 -state disabled
			$m entryconfigure 1 -state disabled
			$m entryconfigure 2 -state disabled
			$m entryconfigure 3 -state disabled

			# disable hotkeys, needs to be done for each window
			foreach w { .maintWin .sortWin .playerInfoWin .repWin \
							.fics .metadataWindow .crosstabWin .ecograph \
							.glistWin .plist .statsWin .baseWin .tourney \
							.pgnWin .main .nedit .ccWindow } {
			
				if {[winfo exists $w]} {
					bind $w <Control-A> {}
					bind $w <Control-Shift-2> {}
					bind $w <F2> {}
					bind $w <F3> {}
				}
			}
		} else {
			set m .menu.tools
			$m entryconfigure 0 -state normal
			$m entryconfigure 1 -state normal
			$m entryconfigure 2 -state normal
			$m entryconfigure 3 -state normal

			# disable hotkeys, needs to be done for each window
			foreach w { .maintWin .sortWin .playerInfoWin .repWin \
							.fics .metadataWindow .crosstabWin .ecograph \
							.glistWin .plist .statsWin .baseWin .tourney \
							.pgnWin .main .nedit .ccWindow } {
			
				if {[winfo exists $w]} {
					bind $w <Control-A> makeAnalysisWin
					bind $w <Control-Shift-2> "makeAnalysisWin 2"
					bind $w <F2> "::makeAnalysisWin 1 0"
					bind $w <F3> "::makeAnalysisWin 2 0"
				}
			}
		}
	}

	#----------------------------------------------------------------------
	# Copy the games list as CSV (tab separated) to the clipboard
	#----------------------------------------------------------------------
	proc List2Clipboard {} {
		clipboard clear
		clipboard append $::CorrespondenceChess::clipboardText
	}

	#----------------------------------------------------------------------
	# Generate the Correspondence Chess Window. This Window offers a
	# console displaying whats going on and which game is displayed
	# plus a gmae list containing current games synced in and their
	# status. Xfcc offers quite some information here whereas eMail
	# relies mostly on the user.
	# Additionally this window contains the buttons for easy navigation
	# and in case of Xfcc the special moves availabe (resign etc.)
	#----------------------------------------------------------------------
	proc CCWindow {} {
		global scidDataDir helpMessage

		set w .ccWindow
		if {[winfo exists .ccWindow]} {
			focus .
			destroy .ccWindow
			set ::CorrespondenceChess::isOpen 0
			return
		}
		set ::CorrespondenceChess::isOpen 1

		::createToplevel $w
		::setTitle $w [::tr "CorrespondenceChess"]

		# hook up with scids geometry manager
		setWinLocation $w
		setWinSize $w

		# enable the standard shortcuts
		standardShortcuts $w

		::CorrespondenceChess::EnableEngineAnalysis 0

		# create the menu and add default CC menu items here as well
		menu $w.menu
		::setMenu $w $w.menu
		set m $w.menu
		$w.menu add cascade -label CorrespondenceChess -menu $w.menu.correspondence
		$w.menu add cascade -label Edit                -menu $w.menu.edit
		foreach i {correspondence edit} {
			menu $w.menu.$i -tearoff 0
		}

		$m.correspondence add command -label CCConfigure   -command {::CorrespondenceChess::config}
		set helpMessage($m.correspondence,0) CCConfigure
		$m.correspondence add command -label CCConfigRelay -command {::CorrespondenceChess::ConfigureRelay}
		set helpMessage($m.correspondence,1) CCConfigRelay

		$m.correspondence add separator
		$m.correspondence add command -label CCRetrieve    -command { ::CorrespondenceChess::FetchGames }
		set helpMessage($m.correspondence,3) CCRetrieve

		$m.correspondence add command -label CCInbox       -command { ::CorrespondenceChess::ReadInbox }
		set helpMessage($m.correspondence,4) CCInbox

		$m.correspondence add separator
		$m.correspondence add command -label CCSend        -command {::CorrespondenceChess::SendMove 0 0 0 0}
		set helpMessage($m.correspondence,6) CCSend
		$m.correspondence add command -label CCResign      -command {::CorrespondenceChess::SendMove 1 0 0 0}
		set helpMessage($m.correspondence,7) CCResign
		$m.correspondence add command -label CCClaimDraw   -command {::CorrespondenceChess::SendMove 0 1 0 0}
		set helpMessage($m.correspondence,8) CCClaimDraw
		$m.correspondence add command -label CCOfferDraw   -command {::CorrespondenceChess::SendMove 0 0 1 0}
		set helpMessage($m.correspondence,9) CCOfferDraw
		$m.correspondence add command -label CCAcceptDraw  -command {::CorrespondenceChess::SendMove 0 0 0 1}
		set helpMessage($m.correspondence,10) CCAcceptDraw
		$m.correspondence add command -label CCGamePage    -command {::CorrespondenceChess::CallWWWGame}
		set helpMessage($m.correspondence,11) CCGamePage
		$m.correspondence add separator
		$m.correspondence add command -label CCNewMailGame -command {::CorrespondenceChess::newEMailGame}
		set helpMessage($m.correspondence,13) CCNewMailGame
		$m.correspondence add command -label CCMailMove    -command {::CorrespondenceChess::eMailMove}
		set helpMessage($m.correspondence,14) CCMailMove

		$m.edit add command -label CCEditCopy -accelerator "Ctrl+C" -command { ::CorrespondenceChess::List2Clipboard }

		# Translate the menu
		::CorrespondenceChess::doConfigMenus

		ttk::frame $w.top
		ttk::frame $w.bottom

		pack $w.top -anchor w -expand no
		pack $w.bottom -fill both -expand yes

		ttk::scrollbar $w.top.ysc        -command { .ccWindow.top.console yview }
		text      $w.top.console    -height 3 -width 80 -wrap word -yscrollcommand "$w.top.ysc set"
		ttk::button    $w.top.retrieveCC -image tb_CC_Retrieve        -command {::CorrespondenceChess::FetchGames}
		ttk::button    $w.top.sendCC     -image tb_CC_Send            -command {::CorrespondenceChess::SendMove 0 0 0 0}
		ttk::button    $w.top.delinbox   -image tb_CC_delete          -command {::CorrespondenceChess::EmptyInOutbox}

		ttk::button    $w.top.openDB     -text  [::tr "CCOpenDB"]     -command {::CorrespondenceChess::OpenCorrespondenceDB}
		ttk::button    $w.top.inbox      -text  [::tr "CCInbox"]      -command {::CorrespondenceChess::ReadInbox}

		ttk::button    $w.top.resign     -text  [::tr "CCResign"]     -state disabled -command {::CorrespondenceChess::SendMove 1 0 0 0}
		ttk::button    $w.top.claimDraw  -text  [::tr "CCClaimDraw"]  -state disabled -command {::CorrespondenceChess::SendMove 0 1 0 0}
		ttk::button    $w.top.offerDraw  -text  [::tr "CCOfferDraw"]  -state disabled -command {::CorrespondenceChess::SendMove 0 0 1 0}
		ttk::button    $w.top.acceptDraw -text  [::tr "CCAcceptDraw"] -state disabled -command {::CorrespondenceChess::SendMove 0 0 0 1}

		ttk::button    $w.top.help       -image tb_help -width 24 -command { helpWindow CCIcons }

		ttk::label $w.top.plugins    -image tb_CC_spacer  -takefocus 0
		ttk::label $w.top.onoffline  -image tb_CC_offline -takefocus 0


		::utils::tooltip::Set $w.top.retrieveCC [::tr "CCFetchBtn"]
		::utils::tooltip::Set $w.top.sendCC     [::tr "CCSendBtn"]
		::utils::tooltip::Set $w.top.delinbox   [::tr "CCEmptyBtn"]
		::utils::tooltip::Set $w.top.help       [::tr "CCHelpBtn"]
		::utils::tooltip::Set $w.top.onoffline  [clock format $::Xfcc::lastupdate]

 		grid $w.top.retrieveCC  -stick ewns  -column  0 -row 0
 		grid $w.top.openDB      -stick ew    -column  0 -row 1 -columnspan 2
 		grid $w.top.inbox       -stick ew    -column  0 -row 2 -columnspan 2
 
 		grid $w.top.sendCC      -stick ewns  -column  1 -row 0

		grid $w.top.console                  -column  4 -row 0 -columnspan 8
		grid $w.top.ysc         -stick ns    -column 13 -row 0 
		grid $w.top.help        -stick nsew  -column 14 -row 0 -columnspan 2

		grid $w.top.delinbox    -stick ewns  -column  5 -row 1 -rowspan 2
		grid $w.top.onoffline                -column  6 -row 1
		grid $w.top.plugins                  -column  6 -row 2

		grid $w.top.resign      -stick ew    -column  7 -row 1

		grid $w.top.claimDraw   -stick ew    -column  7 -row 2
		grid $w.top.offerDraw   -stick ew    -column  8 -row 2
		grid $w.top.acceptDraw  -stick ew    -column  9 -row 2

		# build the table in the bottom frame. This table of text widgets has to
		# scroll syncronously!
		ttk::scrollbar $w.bottom.ysc      -command ::CorrespondenceChess::yview

		set height $::winHeight($w)
		set width  $::winWidth($w)

		text $w.bottom.id       -cursor top_left_arrow -font font_Small -height $height -width 15 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.toMove   -cursor top_left_arrow -font font_Small -height $height -width 4  -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.event    -cursor top_left_arrow -font font_Small -height $height -width 10 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.site     -cursor top_left_arrow -font font_Small -height $height -width 10 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.white    -cursor top_left_arrow -font font_Small -height $height -width 15 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.black    -cursor top_left_arrow -font font_Small -height $height -width 15 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.clockW   -cursor top_left_arrow -font font_Small -height $height -width 10 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.clockB   -cursor top_left_arrow -font font_Small -height $height -width 10 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.var      -cursor top_left_arrow -font font_Small -height $height -width 3  -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset
		text $w.bottom.feature  -cursor top_left_arrow -font font_Small -height $height -width 16 -setgrid 1 -relief flat -wrap none -yscrollcommand ::CorrespondenceChess::yset

		grid $w.bottom.id       -column  0 -row 1
		grid $w.bottom.toMove   -column  1 -row 1
		grid $w.bottom.event    -column  2 -row 1
		grid $w.bottom.site     -column  3 -row 1
		grid $w.bottom.white    -column  4 -row 1
		grid $w.bottom.black    -column  5 -row 1
		grid $w.bottom.clockW   -column 15 -row 1
		grid $w.bottom.clockB   -column 16 -row 1
		grid $w.bottom.var      -column 17 -row 1
		grid $w.bottom.feature  -column 18 -row 1
		grid $w.bottom.ysc      -column 19 -row 1 -stick ns

		# Copy games list to clipboard
		bind $w <Control-Insert> { ::CorrespondenceChess::List2Clipboard }
		bind $w <Control-c>      { ::CorrespondenceChess::List2Clipboard }

		# Handle scrolling in the games list by keyboard
		bind $w <Control-Up>     { ::CorrespondenceChess::PrevGame}
		bind $w <Control-Down>   { ::CorrespondenceChess::NextGame}
		bind $w <Up>         { ::CorrespondenceChess::yview scroll -1 units}
		bind $w <Down>       { ::CorrespondenceChess::yview scroll  1 units}
		bind $w <Prior>      { ::CorrespondenceChess::yview scroll -1 pages}
		bind $w <Next>       { ::CorrespondenceChess::yview scroll  1 pages}
		bind $w <MouseWheel> { ::CorrespondenceChess::yview scroll [expr {- (%D / 120)}] units}

		# Help
		bind $w <F1>        { helpWindow Correspondence}
		bind $w "?"         { helpWindow CCIcons}

		bind $w <Configure> { ::CorrespondenceChess::ConsoleResize }
		bind $w <Destroy>   { ::CorrespondenceChess::EnableEngineAnalysis 1
			set ::CorrespondenceChess::isOpen 0 }

		foreach f [glob -nocomplain [file join "$CorrespondenceChess::PluginPath" *]] {
			$w.top.plugins    configure -image tb_CC_pluginactive
			source $f
		}

		::createToplevelFinalize $w
	}

	#--------------------------------------------------------------------------
	# Updates the game list with another event and all data available.
	# This just adds another line at the end of the current list, hence
	# the list has to be emptied if all games are resynced in.
	#--------------------------------------------------------------------------
	proc updateGamelist {id toMove event site date white black clockW \
								clockB var db books tb engines wc bc mess TC \
								lastmove drawoffer } {
		global ::CorrespondenceChess::num
		global ::CorrespondenceChess::clipboardText

		set w .ccWindow

		#----------------------------------------------------------------------
		# Layout for the gamelist: Xfcc offers more information about
		# the ongoing game then eMail, hence more is presented to the
		# user. ToMove and featrues use icons for easy reading.
		# Xfcc:
		# ID | ToMove? | White | Black | Event | Site | ClockW | ClockB # | Var | features
		# eMail:
		# ID |         | White | Black | Event | Site |        |         |     |

		foreach tag {id toMove event site white black clockW clockB var feature} {
			# enable additions
			$w.bottom.$tag      configure -state normal
			# make each line high enough for the icons to be placed
			$w.bottom.$tag      image create end -align center -image tb_CC_spacer
		}

		# Calculate the TimeDiff between the event date and the current
		# date. This diff is used to mark event that have not yet
		# started.
		set TimeDiff [expr [clock seconds] - [clock scan $date -format "%Y.%m.%d"] ]

		if { $::Xfcc::update > 0 } {
			$w.top.onoffline  configure -image tb_CC_online
			::utils::tooltip::Set $w.top.onoffline  [clock format $::Xfcc::lastupdate]
		}

		if {$mess != ""} {
			set curpos [$w.bottom.id index insert]
			$w.bottom.id image create end -align center -image tb_CC_message
			set endpos [$w.bottom.id index insert]

			$w.bottom.id tag add idmsg$id $curpos $endpos
			::utils::tooltip::SetTag $w.bottom.id "$mess" idmsg$id
		}
		# add the game id. Note the \n at the end is necessary!
		set curpos [$w.bottom.id index insert]
		$w.bottom.id      insert end "$id\n"
		set endpos [$w.bottom.id index insert]
		$w.bottom.id tag add id$id $curpos $endpos
		::utils::tooltip::SetTag $w.bottom.id "$id" id$id

		# ToMove may contain a mixture of text for game results plus
		# several icons displayin the current game status.
		if { (($clockW == " 0d  0: 0") || ($clockB == " 0d  0: 0")) && (($toMove == "yes") || ($toMove == "no")) } {
				$w.bottom.toMove image create end -align center -image tb_CC_outoftime
		}

		set text ""
		switch -regexp -- $toMove \
		"1-0" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image $::board::letterToPiece(K)25
			$w.bottom.toMove  insert end " $toMove"
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove ($toMove)"
		} \
		"0-1" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image $::board::letterToPiece(k)25
			$w.bottom.toMove  insert end " $toMove"
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove ($toMove)"
		} \
		" = " {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_draw
			$w.bottom.toMove  insert end "$toMove"
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove ($toMove)"
		} \
		"yes" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_yourmove
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		} \
		"no"  {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_oppmove
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		} \
		" ? " {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove  insert end "$toMove"
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		} \
		"POS" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_postal
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		} \
		"EML" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_envelope
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		} \
		"REL" {
			set curpos [$w.bottom.toMove index insert]
			$w.bottom.toMove image create end -align center -image tb_CC_relay
			set endpos [$w.bottom.toMove index insert]
			set text "$lastmove"
		}
		$w.bottom.toMove tag add toMove$id $curpos $endpos
		::utils::tooltip::SetTag $w.bottom.toMove "$text" toMove$id
		$w.bottom.toMove insert end "\n"


		# Add textual information to the edit fields
		set curpos [$w.bottom.event index insert]
		$w.bottom.event   insert end "$event\n"
		set endpos [$w.bottom.event index insert]
		$w.bottom.event tag add event$id $curpos $endpos


		set curpos [$w.bottom.site index insert]
		$w.bottom.site    insert end "$site\n"
		set endpos [$w.bottom.site index insert]
		$w.bottom.site tag add site$id $curpos $endpos
		::utils::tooltip::SetTag $w.bottom.site "$site" site$id

		if {$wc != ""} {
			if {[lsearch [image names] $wc] > -1} {
				$w.bottom.white   image create end -align center -image $wc
				$w.bottom.white   insert end " "
			} else {
				puts stderr "$wc does not exist"
			}
		}
		$w.bottom.white   insert end "$white\n"

		if {$bc != ""} {
			if {[lsearch [image names] $bc] > -1} {
				$w.bottom.black   image create end -align center -image $bc
				$w.bottom.black   insert end " "
			} else {
				puts stderr "$bc does not exist"
			}
		}
		$w.bottom.black   insert end "$black\n"

		$w.bottom.clockW  insert end "$clockW\n"
		$w.bottom.clockB  insert end "$clockB\n"
		$w.bottom.var     insert end "$var\n"

		# Xfcc defines noDB, noTablebase no etc.pp. Hence check for
		# false to display the icons for allowed features.
		if {$db == "false"} {
			$w.bottom.feature image create end -align center -image tb_CC_database
		}
		if {$books == "false"} {
			$w.bottom.feature image create end -align center -image tb_CC_book
		}
		if {$tb == "false"} {
			$w.bottom.feature image create end -align center -image tb_CC_tablebase
		}
		if {!($engines == "true")} {
			$w.bottom.feature image create end -align center -image tb_CC_engine
		}

		$w.bottom.feature insert end "\n"

		# Link the click on each field to jump to this specific game
		# easily, then lock the entry field from changes by the user.
		# SetSelection just sets the global $num to the actual row the
		# user clicked. This has to be a global variable and it has to
		# be passed to the ProcessServerResult mascaraded to prevent
		# from interpretation. See also Scids gamelist.
		foreach tag {id toMove event site white black clockW clockB var feature} {
			bind $w.bottom.$tag <Button-1> {
				::CorrespondenceChess::SetSelection %x %y
				::CorrespondenceChess::ProcessServerResult $::CorrespondenceChess::num
				break }
			# lock the area from changes
			$w.bottom.$tag configure -state disable
		}

		if {$TimeDiff < -1} {
			foreach col {id toMove event site} {
				$w.bottom.$col tag configure $col$id -foreground DarkGray -font font_Bold
			}
			::utils::tooltip::SetTag $w.bottom.event "$event\nTime: $TC\n\nStart: $date" event$id
		} else {
			::utils::tooltip::SetTag $w.bottom.event "$event\nTime: $TC" event$id
		}

		regsub -all "flag_"  $wc "" wc1
		regsub -all "flag_"  $bc "" bc1

		set wc1 [string toupper $wc1]
		set bc1 [string toupper $bc1]

		set ::CorrespondenceChess::clipboardText "$::CorrespondenceChess::clipboardText\n$id\t $event\t$site\t$date\t$white\t$black\t$wc1\t$bc1\t$clockW\t$clockB\t$toMove\t$mess\t$lastmove\t$var\t$db\t$books\t$tb\t$engines\t$TC"
	}

	#----------------------------------------------------------------------
	# Visually highlight line $::CorrespondenceChess::num
	#----------------------------------------------------------------------
	proc SetHighlightedLine {} {
		global ::CorrespondenceChess::num 
		set gamecount $::CorrespondenceChess::glgames

		# remove old highlighting
		foreach col {id toMove event site white black clockW clockB var feature} {
			.ccWindow.bottom.$col tag remove highlight 1.0 end
		}

		# highlight current games line
		foreach col {id toMove event site white black clockW clockB var feature} {
			.ccWindow.bottom.$col tag add highlight $num.0 [expr {$num+1}].0 
			.ccWindow.bottom.$col tag configure highlight -background lightYellow2 -font font_Bold
		}
		updateConsole "info: switched to game $num/$gamecount"
	}

	#----------------------------------------------------------------------
	# Set the global $num to the row the user clicked upon
	#----------------------------------------------------------------------
	proc SetSelection {xcoord ycoord} {
		global ::CorrespondenceChess::num 
		set gamecount $::CorrespondenceChess::glgames

		set num [expr {int([.ccWindow.bottom.id index @$xcoord,$ycoord]) + $::CorrespondenceChess::glccstart - 1 }]

		# Prevent clicking beyond the last game
		if { $num > $gamecount } {
				set num $gamecount
		}

		SetHighlightedLine
	}

	#----------------------------------------------------------------------
	# Empties the gamelist and reset global $num. This should be done
	# once the games are (re)synchronised.
	#----------------------------------------------------------------------
	proc emptyGamelist {} {
		set w .ccWindow
		foreach tag {id toMove event site white black clockW clockB var feature} {
			# unlock the list
			$w.bottom.$tag      configure -state normal
			# delete it
			$w.bottom.$tag      delete 1.0 end
		}
		# reset the number of processed games
		set ::CorrespondenceChess::num 0
		set ::CorrespondenceChess::clipboardText ""

	}

	#----------------------------------------------------------------------
	# Add a line to the status console
	#----------------------------------------------------------------------
	proc updateConsole {line} {
		set t .ccWindow.top.console
		if { [winfo exists $t] } {
			$t insert end "$line\n"
			$t yview moveto 1
		}
	}

	#----------------------------------------------------------------------
	# Opens a config dialog to set the default parameters. Currently
	# they are not stored to scids setup though.
	#----------------------------------------------------------------------
	proc config {} {
		set w .correspondenceChessConfig
		if { [winfo exists $w]} { 
			raiseWin $w
			return
		}
		toplevel $w
		wm title $w [::tr "CCDlgConfigureWindowTitle"]

		set ::CorrespondenceChess::sortoptlist [list \
			[::tr "CCOrderClassicTxt"] \
			[::tr "CCOrderMyTimeTxt"] \
			[::tr "CCOrderTimePerMoveTxt"] \
			[::tr "CCOrderStartDate"] \
			[::tr "CCOrderOppTimeTxt"] \
		]


		ttk::button $w.bOk     -text OK -command {
				::CorrespondenceChess::saveCCoptions
				destroy .correspondenceChessConfig
		}
		ttk::button $w.bCancel -text [::tr "Cancel"] -command "destroy $w"

		ttk::label  $w.lgeneral -text [::tr "CCDlgCGeneraloptions"]
		ttk::label  $w.ldb      -text [::tr "CCDlgDefaultDB"]
		ttk::label  $w.linbox   -text [::tr "CCDlgInbox"]
		ttk::label  $w.loutbox  -text [::tr "CCDlgOutbox"]

		ttk::label  $w.lxfccrc  -text [::tr "CCDlgXfcc"]

		ttk::label  $w.lxfcc    -text [::tr "CCDlgExternalProtocol"]
		ttk::label  $w.lfetch   -text [::tr "CCDlgFetchTool"]
		ttk::label  $w.lsend    -text [::tr "CCDlgSendTool"]
		ttk::label  $w.lsortopt -text [::tr "CCDlgSortOption"]

		ttk::label  $w.lemail   -text [::tr "CCDlgEmailCommunication"]
		ttk::label  $w.lmailx   -text [::tr "CCDlgMailPrg"]
		ttk::label  $w.lbccaddr -text [::tr "CCDlgBCCAddr"]

		ttk::label  $w.lmoderb  -text [::tr "CCDlgMailerMode"]
		ttk::label  $w.lmoderb1 -text [::tr "CCDlgThunderbirdEg"]
		ttk::label  $w.lmoderb2 -text [::tr "CCDlgMailUrlEg"]
		ttk::label  $w.lmoderb3 -text [::tr "CCDlgClawsEg"]
		ttk::label  $w.lmoderb4 -text [::tr "CCDlgmailxEg"]

		ttk::label  $w.lattache -text [::tr "CCDlgAttachementPar"]
		ttk::label  $w.lsubject -text [::tr "CCDlgSubjectPar"]

		ttk::checkbutton $w.internalXfcc -text [::tr "CCDlgInternalXfcc"] \
			-variable ::CorrespondenceChess::XfccInternal

		ttk::checkbutton $w.confirmXfcc -text [::tr "CCDlgConfirmXfcc"] \
			-variable ::CorrespondenceChess::XfccConfirm

		ttk::checkbutton $w.onlyOwnMove -text [::tr "CCDlgListOnlyOwnMove"] \
			-variable ::CorrespondenceChess::ListOnlyOwnMove

		ttk::scrollbar $w.ysc    -command { .correspondenceChessConfig.sortopt yview }
		listbox   $w.sortopt -height 3 -width 60 -exportselection 0 -selectmode single -list ::CorrespondenceChess::sortoptlist -yscrollcommand "$w.ysc set"
		$w.sortopt selection set $::CorrespondenceChess::ListOrder
		bind .correspondenceChessConfig.sortopt <<ListboxSelect>> {
			set ::CorrespondenceChess::ListOrder [ .correspondenceChessConfig.sortopt curselection ]
		}

		ttk::button $w.xfconf  -text [::tr CCConfigure] -command { ::CorrespondenceChess::checkXfccrc
			::Xfcc::config $::CorrespondenceChess::xfccrcfile}

		if {$::CorrespondenceChess::XfccInternal < 0} {
			$w.internalXfcc configure -state disabled
			$w.xfconf       configure -state disabled
		}

		ttk::entry  $w.db      -width 60 -textvariable ::CorrespondenceChess::CorrBase
		ttk::entry  $w.inbox   -width 60 -textvariable ::CorrespondenceChess::Inbox
		ttk::entry  $w.outbox  -width 60 -textvariable ::CorrespondenceChess::Outbox

		ttk::entry  $w.xfccrc  -width 60 -textvariable ::CorrespondenceChess::xfccrcfile
		ttk::entry  $w.fetch   -width 60 -textvariable ::CorrespondenceChess::XfccFetchcmd
		ttk::entry  $w.send    -width 60 -textvariable ::CorrespondenceChess::XfccSendcmd

		ttk::entry  $w.mailx   -width 60 -textvariable ::CorrespondenceChess::mailer
		ttk::entry  $w.bccaddr -width 60 -textvariable ::CorrespondenceChess::bccaddr
		ttk::entry  $w.attache -width 30 -textvariable ::CorrespondenceChess::attache
		ttk::entry  $w.subject -width 30 -textvariable ::CorrespondenceChess::subject

		ttk::radiobutton $w.moderb1 -text "Mozilla"  -value "mozilla" -variable ::CorrespondenceChess::mailermode
		ttk::radiobutton $w.moderb2 -text "Mail-URL" -value "mailurl" -variable ::CorrespondenceChess::mailermode
		ttk::radiobutton $w.moderb3 -text "Claws"    -value "claws"   -variable ::CorrespondenceChess::mailermode
		ttk::radiobutton $w.moderb4 -text "mailx"    -value "mailx"   -variable ::CorrespondenceChess::mailermode

		ttk::button $w.bdb     -text "..." -command {::CorrespondenceChess::chooseCorrBase }
		ttk::button $w.binbox  -text "..." -command {::CorrespondenceChess::chooseInbox    }
		ttk::button $w.boutbox -text "..." -command {::CorrespondenceChess::chooseOutbox   }
		ttk::button $w.bfetch  -text "..." -command {::CorrespondenceChess::chooseFetch    }
		ttk::button $w.bsend   -text "..." -command {::CorrespondenceChess::chooseSend     }

		grid $w.lgeneral                  -column 0 -row  0 -columnspan 3 -pady 10

		grid $w.ldb          -sticky e    -column 0 -row  1
		grid $w.db           -sticky w    -column 1 -row  1 -columnspan 2
		grid $w.bdb          -sticky w    -column 3 -row  1
		grid $w.linbox       -sticky e    -column 0 -row  2
		grid $w.inbox        -sticky w    -column 1 -row  2 -columnspan 2
		grid $w.binbox       -sticky w    -column 3 -row  2
		grid $w.loutbox      -sticky e    -column 0 -row  3
		grid $w.outbox       -sticky w    -column 1 -row  3 -columnspan 2
		grid $w.boutbox      -sticky w    -column 3 -row  3

		grid $w.internalXfcc -sticky w    -column 1 -row  4 -pady 10
		grid $w.xfconf                    -column 2 -row  4 -columnspan 2
		grid $w.lxfccrc      -sticky e    -column 0 -row  4
		grid $w.lxfcc                     -column 0 -row  5 -columnspan 3 -pady 10
		grid $w.xfccrc       -sticky w    -column 1 -row  5 -columnspan 2

		grid $w.lfetch       -sticky e    -column 0 -row  6
		grid $w.fetch        -sticky w    -column 1 -row  6 -columnspan 2
		grid $w.bfetch       -sticky w    -column 3 -row  6
		grid $w.lsend        -sticky e    -column 0 -row  7
		grid $w.send         -sticky w    -column 1 -row  7 -columnspan 2
		grid $w.bsend        -sticky w    -column 3 -row  7


		grid $w.confirmXfcc  -sticky w    -column 1 -row  8
		grid $w.onlyOwnMove  -sticky w    -column 2 -row  8
		grid $w.lsortopt     -sticky e    -column 0 -row  9
		grid $w.sortopt      -sticky w    -column 1 -row  9 -columnspan 2
		grid $w.ysc          -sticky wns  -column 3 -row 9

		grid $w.lemail                    -column 0 -row 10 -columnspan 3 -pady 10

		grid $w.lmailx       -sticky e    -column 0 -row 11
		grid $w.mailx        -sticky w    -column 1 -row 11 -columnspan 2
		grid $w.lbccaddr     -sticky e    -column 0 -row 12
		grid $w.bccaddr      -sticky w    -column 1 -row 12 -columnspan 2

		grid $w.lmoderb      -sticky e    -column 0 -row 13
		grid $w.lmoderb1     -sticky w    -column 2 -row 13 -columnspan 2
		grid $w.lmoderb2     -sticky w    -column 2 -row 14 -columnspan 2
		grid $w.lmoderb3     -sticky w    -column 2 -row 15 -columnspan 2
		grid $w.lmoderb4     -sticky w    -column 2 -row 16 -columnspan 2
		grid $w.moderb1      -sticky w    -column 1 -row 13
		grid $w.moderb2      -sticky w    -column 1 -row 14
		grid $w.moderb3      -sticky w    -column 1 -row 15
		grid $w.moderb4      -sticky w    -column 1 -row 16

		grid $w.lattache     -sticky e    -column 0 -row 18
		grid $w.attache      -sticky w    -column 1 -row 18 -columnspan 2

		grid $w.lsubject     -sticky e    -column 0 -row 19
		grid $w.subject      -sticky w    -column 1 -row 19 -columnspan 2


		# Buttons and ESC-key
		grid $w.bOk          -column 0    -row 20 -pady 10 -columnspan 2
		grid $w.bCancel      -column 1    -row 20 -pady 10
		bind $w <Escape> "$w.bCancel invoke"

		bind $w <F1> { helpWindow CCSetupDialog}
	}

	#----------------------------------------------------------------------
	# startEmailGame: create an empty new game and set the header for
	# to a cmail compatible format with the parameters entered by the
	# user (own and opponent names and mail addresses and unique id)
	#----------------------------------------------------------------------
	proc startEmailGame {ownname ownmail oppname oppmail gameid} {
		global ::CorrespondenceChess::Inbox

		# the following header tags have to be in this form for cmail to
		# recognise the mail as an eMail correspondence game.
		# Additonally scid searched for some of them to retrieve mail
		# addresses automagically and also to recognise this game as
		# eMail and not Xfcc.
		set Event         "Email correspondence game"
		set Site          "NET"
		set Round         "-"
		set CmailGameName "CmailGameName \"$gameid\""
		set WhiteNA       "WhiteNA \"$ownmail\""
		set BlackNA       "BlackNA \"$oppmail\""
		set whiteCountry  "WhiteCountry \"EUR\""
		set blackCountry  "BlackCountry \"EUR\""

		set Mode          "Mode \"EM\""

		set year          [::utils::date::today year]
		set month         [::utils::date::today month]
		set day           [::utils::date::today day]
		set today         "$year.$month.$day"

		# add a new game
		::game::Clear

		# set the header tags
		sc_game tags set -event     $Event
		sc_game tags set -site      $Site
		sc_game tags set -round     $Round
		sc_game tags set -white     $ownname
		sc_game tags set -black     $oppname
		sc_game tags set -date      $today
		sc_game tags set -eventdate $today

		# add cmails extra header tags
		sc_game tags set -extra [list $CmailGameName $WhiteNA $BlackNA $whiteCountry $blackCountry $Mode]

		updateBoard -pgn
		updateTitle
		updateMenuStates

		# Call gameSave with argument 0 to append to the current
		# database. This also gives the Save-dialog for additional user
		# values.
		gameSave 0

		# construct a PGN in Inbox for CC gamelist to work
		set pgnfile "[file join $Inbox $gameid].pgn"
		sc_base export "current" "PGN" $pgnfile -append 0 -comments 0 -variations 0 \
					-space 1 -symbols 0 -indentC 0 -indentV 0 -column 0 -noMarkCodes 0 -convertNullMoves 1

		::CorrespondenceChess::ReadInbox
	}

	#----------------------------------------------------------------------
	# Generate a new email correspondence game in the style of cmail,
	# but with a friendly dialog presented to the user instead of
	# somewhat cryptic command line parameters.
	# This procedure adds a new game to the Correspondence DB and fills
	# in the header appropriately.
	#----------------------------------------------------------------------
	proc newEMailGame {} {
		global ::CorrespondenceChess::CorrSlot

		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB
		# Only proceed if a correspondence DB is already loaded
		if {$CorrSlot > -1} {
			set w .wnewEMailGame
			if { [winfo exists $w]} { return }
			toplevel $w
			wm title $w [::tr "CCDlgStartEmail"]

			set ownemail   ::CorrespondenceChess::bccaddr
			set ownname    ""
			set oppemail   ""
			set oppname    ""
			set gameid     ""

			ttk::label  $w.lownname -text [::tr CCDlgYourName]
			ttk::label  $w.lownmail -text [::tr CCDlgYourMail]
			ttk::label  $w.loppname -text [::tr CCDlgOpponentName]
			ttk::label  $w.loppmail -text [::tr CCDlgOpponentMail]
			ttk::label  $w.lgameid  -text [::tr CCDlgGameID]

			ttk::entry  $w.ownname -width 40 -textvariable ownname
			ttk::entry  $w.ownmail -width 40 -textvariable $ownemail
			ttk::entry  $w.oppname -width 40 -textvariable oppname
			ttk::entry  $w.oppmail -width 40 -textvariable oppemail
			ttk::entry  $w.gameid  -width 40 -textvariable gameid

			ttk::button $w.bOk     -text OK -command {
				::CorrespondenceChess::startEmailGame \
						[.wnewEMailGame.ownname get] \
						[.wnewEMailGame.ownmail get] \
						[.wnewEMailGame.oppname get] \
						[.wnewEMailGame.oppmail get] \
						[.wnewEMailGame.gameid  get]
				destroy .wnewEMailGame
			}
			ttk::button $w.bCancel -text [::tr "Cancel"] -command "destroy $w"

			grid $w.lownname   -sticky e -column 0 -row 0
			grid $w.lownmail   -sticky e -column 0 -row 1
			grid $w.loppname   -sticky e -column 0 -row 2
			grid $w.loppmail   -sticky e -column 0 -row 3
			grid $w.lgameid    -sticky e -column 0 -row 4

			grid $w.ownname    -sticky w -column 1 -row 0 -columnspan 2
			grid $w.ownmail    -sticky w -column 1 -row 1 -columnspan 2
			grid $w.oppname    -sticky w -column 1 -row 2 -columnspan 2
			grid $w.oppmail    -sticky w -column 1 -row 3 -columnspan 2
			grid $w.gameid     -sticky w -column 1 -row 4 -columnspan 2

			# Buttons and ESC-key
			grid $w.bOk       -column 1 -row  5 -pady 10
			grid $w.bCancel   -column 2 -row  5 -pady 10
			bind $w <Escape> "$w.bCancel invoke"
			bind $w <F1> { helpWindow CCeMailChess}
		}
	}

	#----------------------------------------------------------------------
	# Call an external program via a proper shell
	# open and exec call the external without a shell environment
	# For Windows make sure that the executable uses its short name
	#     catch {set mailer [file attributes $mailer -shortname]}
	# or it resides in a path without spaces
	# For Windows quoting is not possible as usual, < and > are not allowed
	# as textual arguments even if quoted properly.
	#----------------------------------------------------------------------
	proc CallExternal {callstring {param ""}} {
		global windowsOS

		if {$windowsOS} {
			# On Windows, use the "start" command:
			if {[string match $::tcl_platform(os) "Windows NT"]} {
				catch {exec $::env(COMSPEC) /c "$callstring $param" &}
			} else {
				catch {exec start "$callstring $param" &}
			}
		} else {
			# On Unix just call the shell with the converter tool
			catch {exec /bin/sh -c "$callstring $param" &}
		}
	}

	#----------------------------------------------------------------------
	# Check wether a Correspondence Database is loaded. Note that the
	# first one found is used as reference DB for game processing.
	#----------------------------------------------------------------------
	proc CheckForCorrDB {} {
		global ::windows::switcher::base_types
		global ::CorrespondenceChess::Inbox ::CorrespondenceChess::Outbox
		global ::CorrespondenceChess::CorrSlot

		set CorrSlot -1
		if {$CorrSlot < 0} {
			# check for the status window to exist, if not open it
			if {![winfo exists .ccWindow]} {
				::CorrespondenceChess::CCWindow
			}

			# check for In/Outbox to exist and be accessible
			if { [file exists $Inbox] == 0  && ([file isdirectory $Inbox] == 0) } {
				set Title [::tr CCDlgTitNoInbox]
				set Error [::tr CCErrInboxDir]
				append Error "\n   $Inbox\n"
				append Error [::tr CCErrDirNotUsable]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
				return
			}
			if { ([file exists $Outbox] == 0) && ([file isdirectory $Outbox] == 0) } {
				set Title [::tr CCDlgTitNoOutbox]
				set Error [::tr CCErrOutboxDir]
				append Error "\n   $Outbox\n"
				append Error [::tr CCErrDirNotUsable]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
				return
			}

			set typeCorr [lsearch $base_types {Correspondence chess} ]
			for {set x 1} {$x <= [ expr [sc_base count]-1 ]} {incr x} {
					set type [sc_base type $x]
					if {$type == $typeCorr} {
						.ccWindow.top.openDB configure -state disabled
						set CorrSlot $x
						break
					}
			}
			if {$CorrSlot < 0} {
				set Title [::tr CCDlgTitNoCCDB]
				set Error [::tr CCErrNoCCDB]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
			}
		}
	}

	#----------------------------------------------------------------------
	# Opens the DB holding the correspondence games
	#----------------------------------------------------------------------
	proc OpenCorrespondenceDB {} {
		global ::CorrespondenceChess::CorrBase

		## set fName [file rootname $CorrBase]
		set fName $CorrBase

		if {[catch {::file::Open $fName} result]} {
			set err 1
			tk_messageBox -icon warning -type ok -parent . \
				-title "Scid: Error opening file" -message $result
		} else {
			if {[file extension $fName] == ".si3"} {
				# file has been converted to si4
				set CorrBase "[file rootname $CorrBase].si4"
				::CorrespondenceChess::saveCCoptions
			}
			set ::initialDir(base) [file dirname $fName]
		}
		::windows::gamelist::Refresh
		::tree::refresh
		::windows::stats::Refresh
		updateMenuStates
		updateBoard -pgn
		updateTitle
		updateStatusBar

		::CorrespondenceChess::CheckForCorrDB
	}

	#----------------------------------------------------------------------
	# Search for a game by Event, Site, White, Black and CmailGameName
	# This has to result in only one game matching the criteria. 
	# No problem with cmail and Xfcc as GameIDs are unique.
	#----------------------------------------------------------------------
	proc SearchGame {Event Site White Black CmailGameName result refresh} {
		global ::CorrespondenceChess::CorrSlot

		# switch to the Correspondence Games DB
		sc_base switch $CorrSlot
		set move ""

		set sPgnlist {}
		lappend sPgnlist [string trim $CmailGameName]


		# Clear really all filters including potential Tree filters
		# based on current position.  It is imperative to search the
		# whole DB regardless of context to find the game that needs to
		# be updated. Otherwise dupes and unpredictable behaviour will
		# result.
		sc_filter clear

		# Search the header for the game retrieved. Use as much info as
		# possible to get a unique result. In principle $sPgnList should
		# be enough. However searching indexed fields speeds up things
		# a lot in case of large DBs. Also: disregard deleted games,
		# this avoids the necessity to compact a db in case of
		# accidential duplication of a game.
		# -filter 2: Ignore previous searches
		set str [sc_search header \
					-event $Event    \
					-site $Site      \
					-white $White    \
					-black $Black    \
					-pgn $sPgnlist   \
					-fDelete no      \
					-filter 2        \
					-gameNumber [list 1 -1] \
					]

		CorrespondenceChess::updateConsole "info: search [sc_filter count]"

		# There should be only one result. If so, load it and place the
		# game pointer to the end of the game ::game::Load also handles
		# board rotation if Player Names are set up correctly.
		if {[sc_filter count] == 1} {
			set filternum [sc_filter first]

			# Refresh windows only if necessary
			if {$refresh == 1} {
				# ::game::Load  also checks the dirty flag and asks to
				# save the game in case necessary.
				::game::Load $filternum
			} else {
				sc_game load $filternum
			}

			set Mode [::CorrespondenceChess::CheckMode]

			sc_move end
			# Number of moves in the current DB game
			set mnCorr [expr {[sc_pos moveNumber]-1}]
			set side   [sc_pos side]

			# Number of moves in the new game in Clipbase
			sc_base switch "clipbase"
			sc_move end
			set mnClip [sc_pos moveNumber]

			if {$side == "white"} {
				set plyStart [expr {$mnCorr*2-1}]
			} else {
				set plyStart [expr {$mnCorr*2}]
			}

			set side   [sc_pos side]
			if {$side == "white"} {
				set plyEnd [expr {$mnClip*2-1}]
			} else {
				set plyEnd [expr {$mnClip*2}]
			}

			# Check if the games mainline in DB contains more ply than
			# the game in the clipbase. If so inform the user.
			if {($plyEnd-$plyStart < 2) && ($Mode == "XFCC") && ($result == "*")} {
				set Title [::tr CCDlgDBGameToLong]
				set Error [::tr CCDlgDBGameToLongError]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message "$Error $mnClip (= ply $plyEnd)"
			}

			# Add moves from the relayed games if the mode is not Postal.
			# On mixed ICCF Events also the ICCF server deliveres an
			# empty game via Xfcc, therefore this check is required
			if {$Mode != "Postal"} {

				# Add moves from clipbase to the DB game. This keeps
				# comments, but requires that tries are inserted as variants
				# as it is always appended to the end of the game
				for {set x $plyStart} {$x < $plyEnd} {incr x} {
					set basecomment  ""
					set comment      ""

					sc_base switch "clipbase"

					# move to the beginning of the new part
					sc_move start
					sc_move forward [expr {$x+1}]

					# Get the move in _untranslated_ form...
					set move [sc_game info nextMoveNT]
					# ... move on one ply ...
					sc_move forward
					# ... and get the comment
					set comment [sc_pos getComment]

					# switch to Correspondence DB and add the move and comment
					sc_base switch     $CorrSlot
					sc_move addSan     $move

					# Get the comment stored in the base for comparison
					set basecomment [sc_pos getComment]

					# Some servers keep old comments within the game
					# (SchemingMind) some don't (ICCF). Try to preserve
					# comments inserted by the user as well as add new
					# responses properly.
					set sbasecomment ""
					set scomment     ""

					# Strip of [%ccsnt...] like comments (SchemingMind time stamps)
					regsub -all {\[.*\]} $basecomment   "" sbasecomment
					regsub -all {^\s*}   $sbasecomment  "" sbasecomment
					# Strip of "Name: " to compare original text entered by
					# the user only.
					regsub -all "$White:" $sbasecomment "" sbasecomment
					regsub -all "$Black:" $sbasecomment "" sbasecomment

					# Same for the game delivered by Xfcc
					regsub -all {\[.*\]}  $comment      "" scomment
					regsub -all {^\s*}    $scomment     "" scomment
					regsub -all "$White:" $scomment     "" scomment
					regsub -all "$Black:" $scomment     "" scomment

					# Check what to preserve and which comment to set.
					if { [string length $sbasecomment] == 0} {
						sc_pos setComment "$comment"
					} elseif { [string length $scomment] < [string length $sbasecomment ]} {
						# base contains more text than the one retrieved
						if { [string first $scomment $sbasecomment] < 0 } {
							sc_pos  setComment "$basecomment $comment"
						}
					} else {
						# retrieved game contains more text than the stored
						if { [string first $sbasecomment $scomment] < 0 } {
							sc_pos setComment "$basecomment $comment"
						} else {
							sc_pos setComment "$comment"
						}
					}
				}
				sc_game tags set -result $result
				sc_base switch $CorrSlot
				sc_game save $filternum

				# Only refresh when SearchGame was triggered by the user,
				# otherwise just reload the game but leave the window in
				# state to save considerable amount of time
				if {$refresh == 1} {
					::game::Load $filternum
				} else {
					sc_game load $filternum
				}
			} else {
				# only switch to base for postal games
				sc_base switch $CorrSlot
			}
		} elseif {[sc_filter count] == 0} {
			# No matching game found, add it as a new one
			# Clear the current game first, then just paste the clipboard
			# game as it is. No need to do something as complex as for
			# already existing games above.
			game::Clear
			sc_clipbase paste
			# append the current game without asking and the header
			# supplied
			# gameAdd gets confused here with with an altered game opeing
			# another dialogue besides the save game
			sc_game save 0

			CorrespondenceChess::updateConsole "info: new game added"
		} else {
			if {[winfo exists .glistWin]} {
				raise .glistWin
			} else {
				::windows::gamelist::Open
			}
			set Title [::tr CCDlgDuplicateGame]
			set Error [::tr CCDlgDuplicateGameError]
			tk_messageBox -icon warning -type ok -parent . \
				-title $Title -message $Error
		}
		::notify::DatabaseChanged
	}

	#----------------------------------------------------------------------
	# If a Correspondence DB is loaded, switch to the clipbase and
	# use the game with the given id to find headers. 
	# PGN file and jump to the game number given. Then extract the
	# header tags and call "SearchGame" to display the game in question
	# to the user.
	#----------------------------------------------------------------------
	proc ProcessServerResult {game} {
		global ::CorrespondenceChess::CorrSlot
		global emailData

		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB
		# Only proceed if a correspondence DB is already loaded
		if {$CorrSlot > -1} {
			sc_base switch "clipbase"
			sc_game load $game

			# get the header
			set Event  [sc_game tags get Event]
			set Site   [sc_game tags get Site ]
			set White  [sc_game tags get White]
			set Black  [sc_game tags get Black]
			set Extra  [sc_game tags get Extra]
			set result [sc_game tags get Result]
			# CmailGameName is an extra header :(
			set extraTagsList [split $Extra "\n"]

			# ... extract it as it contains the unique ID
			foreach i $extraTagsList {
				if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
					set CmailGameName [string range $i 15 end-1]
				}
			}

			# set these variables for email games where they get no
			# values otherwise
			set noENG     "false"
			set drawoffer "false"
			# Search the game in the correspondence DB and display it
			foreach xfccextra $::Xfcc::xfccstate {
				if { [string equal -nocase [lindex $xfccextra 0] "$CmailGameName" ] } {
					foreach i $xfccextra {
						if { [string equal -nocase [lindex $i 0] "noEngines" ] } {
							set noENG [string range $i 10 end]
						}
						if { [string equal -nocase [lindex $i 0] "drawOffered" ] } {
							set drawoffer [string range $i 12 end]
						}
					}
				}
			}
			if {$noENG == "true"} {
				::CorrespondenceChess::EnableEngineAnalysis 0
			} else {
				::CorrespondenceChess::EnableEngineAnalysis 1
			}

			# After this search the windows need to be refreshed to show
			# the current state
			SearchGame $Event $Site $White $Black $CmailGameName $result 1

			set Mode [::CorrespondenceChess::CheckMode]

			# hook up with the old email manager: this implements the
			# manual timestamping required
			if {($Mode == "EM") || ($Mode == "Relay") || ($Mode == "Postal")} {
				set emailData [::tools::email::readOpponentFile]
				set done 0
				set idx  0
				# search through the whole list and check if the current
				# game was already defined to be an email game.
				foreach dataset $emailData {
					if { [lindex $dataset 0] == $CmailGameName} {
						set done 1
						# add the received flag and date
						::tools::email::addSentReceived $idx r
					}
					incr idx
				}
				if {$done < 1} {
					set idx [llength $emailData]
					lappend emailData [list "" "" "" "" ""]
					set emailData [lreplace $emailData $idx $idx \
									  [list "$CmailGameName" "somewhere@somehost.org" "scid game" [sc_filter first] "-- " ]]
					::tools::email::writeOpponentFile $emailData
					::tools::email::refresh
					# add the received flag and date
					::tools::email::addSentReceived $idx r
				}
			}
			# Jump to the end of the game and update the display
			::move::End
			if {$drawoffer == "true"} {
				.ccWindow.top.acceptDraw configure -state normal
				set comment   [sc_pos getComment]
				set drwstr    "- [::tr Draw] -"
				if { [regexp "$drwstr" $comment] } {
				} else {
					sc_pos setComment "$comment $drwstr"
					updateBoard -pgn
				}
			} else {
				.ccWindow.top.acceptDraw configure -state disabled
			}


			# Set some basic info also to the button tooltips
			::utils::tooltip::Set .ccWindow.top.resign     "$CmailGameName: $Event\n$Site\n\n$White - $Black"
			::utils::tooltip::Set .ccWindow.top.claimDraw  "$CmailGameName: $Event\n$Site\n\n$White - $Black"
			::utils::tooltip::Set .ccWindow.top.acceptDraw "$CmailGameName: $Event\n$Site\n\n$White - $Black"
			::utils::tooltip::Set .ccWindow.top.offerDraw  "$CmailGameName: $Event\n$Site\n\n$White - $Black"
		}
	}

	#----------------------------------------------------------------------
	# Checks the mode of the current game and return it (EM or XFCC).
	# Additionally update the button status in the Console window
	# accordingly and update the console itself with $Event, Mode and
	# $Site.
	#----------------------------------------------------------------------
	proc CheckMode {} {
		set Event [sc_game tags get Event]
		set Site  [sc_game tags get Site]
		set Extra [sc_game tags get Extra]
		# CmailGameName is an extra header :(
		set extraTagsList [split $Extra "\n"]

		# ... extract it as it contains the unique ID
		foreach i $extraTagsList {
			if { [string equal -nocase [lindex $i 0] "Mode" ] } {
				set Mode [string range $i 6 end-1]
			}
		}

		set m .menu.play.correspondence

		# do not set state of top.acceptDraw as this is set dynamically
		if {($Mode == "EM") || ($Mode == "Relay") || ($Mode == "Postal")} {
			if {$Mode == "EM"} {
				::CorrespondenceChess::updateConsole "info Event: $Event (eMail-based)"
			} elseif {$Mode == "Relay"} {
				::CorrespondenceChess::updateConsole "info Event: $Event (observed)"
			} elseif {$Mode == "Postal"} {
				::CorrespondenceChess::updateConsole "info Event: $Event (postal)"
			}

			# eMail/postal games: manual handling for resign and draw is
			# needed, no standard way/protocol exists => disable the
			# buttons and menue entries accordingly
			.ccWindow.top.resign     configure -state disabled
			.ccWindow.top.claimDraw  configure -state disabled
			.ccWindow.top.offerDraw  configure -state disabled
			# .ccWindow.top.acceptDraw configure -state disabled

			$m entryconfigure 8 -state disabled
			$m entryconfigure 9 -state disabled
			$m entryconfigure 10 -state disabled
			$m entryconfigure 11 -state disabled
		} else {
			.ccWindow.top.resign     configure -state normal
			.ccWindow.top.claimDraw  configure -state normal
			.ccWindow.top.offerDraw  configure -state normal
			# .ccWindow.top.acceptDraw configure -state normal
			::CorrespondenceChess::updateConsole "info Event: $Event (Xfcc-based)"

			$m entryconfigure 8 -state normal
			$m entryconfigure 9 -state normal
			$m entryconfigure 10 -state normal
			$m entryconfigure 11 -state normal
		}
		::CorrespondenceChess::updateConsole "info Site: $Site"

		return $Mode
	}

	#----------------------------------------------------------------------
	# Search the previous game from the input file in the correspondence DB
	# If at last game already nothing happens
	#----------------------------------------------------------------------
	proc PrevGame {} {
		global ::CorrespondenceChess::CorrSlot ::CorrespondenceChess::num
		set gamecount $::CorrespondenceChess::glgames

		busyCursor .
		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB
		if {$CorrSlot > -1} {
			if {$num > 1} {
				set num [expr {$num - 1}]
				SetHighlightedLine
				::CorrespondenceChess::ProcessServerResult $::CorrespondenceChess::num
			}
		}
		unbusyCursor .
	}

	#----------------------------------------------------------------------
	# Search the next game from the input file in the correspondence DB
	# If at last game already nothing happens
	#----------------------------------------------------------------------
	proc NextGame {} {
		global ::CorrespondenceChess::CorrSlot ::CorrespondenceChess::num
		set gamecount $::CorrespondenceChess::glgames

		busyCursor .
		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB
		if {$CorrSlot > -1} {
			if {$num < $gamecount} {
				set num [expr {$num + 1}]
				SetHighlightedLine
				::CorrespondenceChess::ProcessServerResult $::CorrespondenceChess::num
			}
		}
		unbusyCursor .
	}

	#----------------------------------------------------------------------
	# FetchGames: retrieve games via Xfcc
	#----------------------------------------------------------------------
	proc FetchGames {} {
		global ::CorrespondenceChess::Inbox ::CorrespondenceChess::XfccFetchcmd ::CorrespondenceChess::CorrSlot
		busyCursor .

		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB
		# Only proceed if a correspondence DB is already loaded
		if {$CorrSlot > -1} {
			if {$::CorrespondenceChess::XfccInternal == 1} {
				# use internal Xfcc-handling
				::Xfcc::ReadConfig $::CorrespondenceChess::xfccrcfile
				::Xfcc::ProcessAll $::CorrespondenceChess::Inbox
			} else {
				# call external protocol handler
				if {[file executable "$XfccFetchcmd"]} {
					::CorrespondenceChess::updateConsole "info Calling external fetch tool $XfccFetchcmd..."
					CallExternal "$XfccFetchcmd $Inbox"
				}
			}
			# Fetch games that should be relayed from the ICCF Server
			::CorrespondenceChess::updateConsole "info Fetching relayed games from ICCF..."
			foreach g $::CorrespondenceChess::RelayGames {
				::CorrespondenceChess::RelayGames $g
			}
			# process what was just retrieved
			::CorrespondenceChess::ReadInbox 
		}
		unbusyCursor .
	}

	#----------------------------------------------------------------------
	# EmptyInOutbox: remove all pgn files currently stored in in- and
	# outbox directories to get a fresh fetch
	#----------------------------------------------------------------------
	proc EmptyInOutbox {} {
		global ::CorrespondenceChess::Inbox ::CorrespondenceChess::Outbox
		global windowsOS

		if {$windowsOS} {
			set inpath  "$Inbox\\"
			set outpath "$Outbox\\"
		} else {
			set inpath  "$Inbox/"
			set outpath "$Outbox/"
		}
		set result [tk_dialog .roDialog "Scid: [tr CCDlgDeleteBoxes]" \
				$::tr(CCDlgDeleteBoxesText) "" 1 $::tr(Yes) $::tr(No)]
		if {$result == 0} {
			foreach f [glob -nocomplain [file join $inpath *]] {
				file delete $f
			}
			foreach f [glob -nocomplain [file join $outpath *]] {
				file delete $f
			}
			set filename [scidConfigFile xfccstate]
			file delete $filename

			# clean also status information as they're now invalid!
			set ::Xfcc::xfccstate {}

			::CorrespondenceChess::emptyGamelist
		}

	}

	#----------------------------------------------------------------------
	# ReadInbox: process the inbox game per game by adding them one by
	# one to the clipboard.
	#----------------------------------------------------------------------
	proc ReadInbox {} {
		global ::CorrespondenceChess::Inbox ::CorrespondenceChess::CorrSlot
		global ::CorrespondenceChess::glccstart ::CorrespondenceChess::glgames windowsOS
		global ::Xfcc::lastupdate ::Xfcc::xfccstate

		set pgnopen 0

		busyCursor .

		if {$windowsOS} {
			set inpath  "$Inbox\\"
		} else {
			set inpath  "$Inbox/"
		}

		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB

		set games 0
		if {$CorrSlot > -1} {

			# extract the number of the last move using Scids internal
			# PGN parser as comments etc. might appear, and this number
			# is not given via Xfcc. Similar for the event date.
			sc_clipbase clear
			sc_base switch "clipbase"
			set game 0
			set gamemoves {}
			foreach f [glob -nocomplain [file join $inpath *]] {
				catch {sc_base import file $f}
				set game [expr {$game + 1}]
				sc_game load $game
				sc_move end
				set number [sc_pos moveNumber]
				set Date   [sc_game tags get Date ]
				set Extra  [sc_game tags get Extra]
				set extraTagsList [split $Extra "\n"]
				foreach i $extraTagsList {
					if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
						set CmailGameName [string range $i 15 end-1]
					}
				}
				lappend gamemoves [list $CmailGameName $number $Date]
			}

			# generate a list of games retrieved by Xfcc. Add game-ID and
			# timing to two lists: one holds all games and one holds
			# those the user does not have the move (they may be skipped
			# in display)
			set xfcclist {}
			set filelist {}
			set skiplist {}
			set sortmode "-ascii"

			foreach xfccextra $::Xfcc::xfccstate {
				set CmailGameName [lindex $xfccextra 0]
				set criterion     0
				set timepermove   0
				set mytime        0
				set opptime       0
				set movestoTC     1
				set tincrement    0
				set moves         0
				set myTurn        "false"
				set TimeControl   "10/50"
				set idx           [lsearch -exact -index 0 $gamemoves $CmailGameName]
				set number        [lindex [lindex $gamemoves $idx] 1]
				set Date          [lindex [lindex $gamemoves $idx] 2]
				regsub -all {\.} $Date "" Date

				foreach i $xfccextra {
					if { [string equal -nocase [lindex $i 0] "myTurn" ] } {
						set myTurn [string range $i 7 end]
					}
					if { [string equal -nocase [lindex $i 0] "mytime" ] } {
						set mytime [string range $i 7 end]
					}
					if { [string equal -nocase [lindex $i 0] "opptime" ] } {
						set opptime [string range $i 8 end]
					}
					if { [string equal -nocase [lindex $i 0] "TimeControl" ] } {
						set TCstr [string range $i 13 end]
						# Calculate the moves to the next time control.
						# Makes sense only if no Fischer Clock is used.
						if { [regexp {/} $TCstr ]} {
							set TC [split $TCstr "/"]
							set moves      [ lindex $TC 0]
							set tincrement [ lindex $TC 1]
							regsub -all "d.*" $tincrement "" tincrement
							set movestoTC [ expr {$moves - ($number % $moves)}]
						} else {
							# Fischer Clock
							set moves 1
						}
					}
				}
				set mytime  [expr {int($mytime / 60.0 / 24.0)}]

				# Calculate the time per move till next TC: include also
				# the next time control periode in this calculation
				set timepermove1 [expr {($mytime+$tincrement) / ($movestoTC+$moves)}]
				set timepermove2 [expr {$mytime / $movestoTC}]

				# Time per move is the minimum of the two above
				set timepermove [expr min($timepermove1, $timepermove2)]

				# Define criteria to be added to the list to sort. Classic
				# mode is handled below by resorting the clipbase
				switch -regexp -- $::CorrespondenceChess::ListOrder \
					"$::CorrespondenceChess::CCOrderMyTime" {
						set criterion $mytime
						set sortmode "-integer"
					} \
					"$::CorrespondenceChess::CCOrderOppTime" {
						set criterion $opptime
						set sortmode "-integer"
					} \
					"$::CorrespondenceChess::CCOrderTimePerMove" {
						set criterion $timepermove
						set sortmode "-real"
					} \
					"$::CorrespondenceChess::CCOrderStartDate" {
						set criterion $Date
						set sortmode "-integer"
					}

				if {($myTurn == "false") && ($::CorrespondenceChess::ListOnlyOwnMove == 1) } {
					lappend skiplist [list $CmailGameName $criterion]
				} else {
					lappend filelist [list $CmailGameName $criterion]
				}
					lappend xfcclist [list $CmailGameName]
			}

			# sort file list by mytime, ascending
			set filelist [lsort -index 1 "$sortmode" $filelist]
			set skiplist [lsort -index 1 "$sortmode" $skiplist]

			::CorrespondenceChess::emptyGamelist
			sc_clipbase clear
			sc_base switch "clipbase"

			# Loop over all files and add all game files that are not
			# Xfcc (ie. eMail chess)
			foreach f [glob -nocomplain [file join $inpath *]] {
				set id [file tail $f]
				regsub -all ".pgn" $id "" id
				if { [lsearch $xfcclist "$id"] < 0 } {
					set filelist [concat $id $filelist]
				}
			}

			# import the games on basis of the sorted list created above
			foreach f $filelist {
				set filename "[file join $inpath [lindex $f 0]].pgn"
				if {[catch {sc_base import file $filename} result]} {
					::CorrespondenceChess::updateConsole "info Error retrieving server response from $filename"
				} else {
					# count the games processed successfully
					set games [expr {$games+1}]
				}
			}

			set glgames $games

			# For Classic sorting: sort the clipbase, this is easier
			# to implement than individual sorting upon import.
			if {$::CorrespondenceChess::ListOrder == $::CorrespondenceChess::CCOrderClassic} {
				set sortCriteria "Site, Event, Round, Result, White, Black"
				progressWindow "Scid" "Sorting the database..."
				set err [catch {sc_base sort $sortCriteria \
										{changeProgressWindow "Sorting..."} \
									 } result]
				closeProgressWindow
			}


			if {$glgames > 0} {
				# work through all games processed and fill in the gamelist 
				# in the console window

				for {set game $glccstart} {$game < [expr {$games+1}]} {incr game} {

					set clockW "no update"; set clockB "no update";
					set var "";             set noDB "";
					set noBK "";            set noTB ""; 
					set noENG "";           set mess ""
					set TC "";              set drawoffer "false";
					set wc "";              set bc "";
					set YM " ? ";

					sc_base switch "clipbase"
					sc_game load $game
					# get the header
					set Event  [sc_game tags get Event]
					set Site   [sc_game tags get Site ]
					set Date   [sc_game tags get Date ]
					set White  [sc_game tags get White]
					set Black  [sc_game tags get Black]
					set Result [sc_game tags get Result]
					set Extra  [sc_game tags get Extra]
					# CmailGameName is an extra header :(
					set extraTagsList [split $Extra "\n"]
					foreach i $extraTagsList {
						if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
							set CmailGameName [string range $i 15 end-1]
						}
					}
					#
					# Switch to the real database to retrieve locally
					# stored additions like addresses, countries etc.
					# Disable refresh for SearchGame to speed up the list
					# building considerably
					SearchGame $Event $Site $White $Black $CmailGameName $result 0
					sc_base switch $CorrSlot
					set Extra  [sc_game tags get Extra]
					set extraTagsList [split $Extra "\n"]

					# ... extract it as it contains the unique ID
					foreach i $extraTagsList {
						if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
							set CmailGameName [string range $i 15 end-1]
						}
						if { [string equal -nocase [lindex $i 0] "Mode" ] } {
							set Mode [string range $i 6 end-1]
						}
						if { [string equal -nocase [lindex $i 0] "whiteCountry" ] } {
							set wc [string range $i 14 end-1]
							set wc [string tolower $wc]
							set wc "flag_$wc"
						}
						if { [string equal -nocase [lindex $i 0] "blackCountry" ] } {
							set bc [string range $i 14 end-1]
							set bc [string tolower $bc]
							set bc "flag_$bc"
						}
						if { [string equal -nocase [lindex $i 0] "WhiteCountry" ] } {
							set wc [string range $i 14 end-1]
							set wc [string tolower $wc]
							set wc "flag_$wc"
						}
						if { [string equal -nocase [lindex $i 0] "BlackCountry" ] } {
							set bc [string range $i 14 end-1]
							set bc [string tolower $bc]
							set bc "flag_$bc"
						}
						if { [string equal -nocase [lindex $i 0] "TimeControl" ] } {
							set TC [string range $i 13 end-1]
						}
					}
					sc_move end
					set number [sc_pos moveNumber]
					set move   [sc_game info previousMoveNT]
					set side   [sc_pos side]

					if {$side == "white"} {
						set number [expr {$number-1}]
						set lastmove "$number...$move"
					} else {
						set lastmove "$number. $move"
					}
					::CorrespondenceChess::updateConsole "info TC (base): $TC..."

					if {$Mode == "EM"} {
						::CorrespondenceChess::updateGamelist $CmailGameName "EML" \
								$Event $Site $Date $White $Black "" "" "" "" $TC "" "" \
								$wc $bc "" "" $lastmove "false"
					} elseif {$Mode == "Relay"} {
						::CorrespondenceChess::updateGamelist $CmailGameName "REL" \
								$Event $Site $Date $White $Black "" "" "" "" $TC "" "" \
								$wc $bc "" "" $lastmove "false"
					} elseif {$Mode == "Postal"} {
						::CorrespondenceChess::updateGamelist $CmailGameName "POS" \
								$Event $Site $Date $White $Black "" "" "" "" $TC "" "" \
								$wc $bc "" "" $lastmove "false"
					} else {
						# actually check the $xfccstate list for the current
						# values. If it is not set (e.g. only inbox processed
						# buy no current retrieval) set some default values.
							foreach xfccextra $::Xfcc::xfccstate {
							if { [string equal -nocase [lindex $xfccextra 0] "$CmailGameName" ] } {
								foreach i $xfccextra {
									if { [string equal -nocase [lindex $i 0] "myTurn" ] } {
										if {[string range $i 7 end] == "true"} {
											set YM "yes"
										} else {
											set YM "no"
										}
									}
									if { [string equal -nocase [lindex $i 0] "clockW" ] } {
										set clockW [string range $i 7 end]
										regsub -all "\{" $clockW "" clockW
										regsub -all "\}" $clockW "" clockW
									}
									if { [string equal -nocase [lindex $i 0] "clockB" ] } {
										set clockB [string range $i 7 end]
										regsub -all "\{" $clockB "" clockB
										regsub -all "\}" $clockB "" clockB
									}
									if { [string equal -nocase [lindex $i 0] "drawOffered" ] } {
										set drawoffer [string range $i 12 end]
									}
									if { [string equal -nocase [lindex $i 0] "variant" ] } {
										set var [string range $i 8 end]
									}
									if { [string equal -nocase [lindex $i 0] "noDatabases" ] } {
										set noDB [string range $i 12 end]
									}
									if { [string equal -nocase [lindex $i 0] "noOpeningBooks" ] } {
										set noBK [string range $i 15 end]
									}
									if { [string equal -nocase [lindex $i 0] "noTablebases" ] } {
										set noTB [string range $i 13 end]
									}
									if { [string equal -nocase [lindex $i 0] "noEngines" ] } {
										set noENG [string range $i 10 end]
									}
									if { [string equal -nocase [lindex $i 0] "TimeControl" ] } {
										set TC [string range $i 13 end-1]
									}
									if { [string equal -nocase [lindex $i 0] "message" ] } {
										set mess [string range $i 9 end-1]
									}
								}
							}
						}
						if {$Result == "1"} {
							set YM "1-0"
						} elseif {$Result == "0"} {
							set YM "0-1"
						} elseif {$Result == "="} {
							set YM " = "
						}
						::CorrespondenceChess::updateConsole "info TC (xfcc): $TC..."
						::CorrespondenceChess::updateGamelist $CmailGameName $YM \
								$Event $Site $Date $White $Black $clockW $clockB $var \
								$noDB $noBK $noTB $noENG $wc $bc $mess $TC $lastmove $drawoffer
					}
				}
				# ::CorrespondenceChess::num is the game currently shown
				set ::CorrespondenceChess::num 0
				# current game is game 0 -> go to game 1 in the list
				::CorrespondenceChess::NextGame
			} else {
				set Title [::tr CCDlgTitNoGames]
				set Error [::tr CCErrInboxDir]
				append Error "\n   $Inbox\n"
				append Error [::tr CCErrNoGames]
				tk_messageBox -icon warning -type ok -parent . \
					-title $Title -message $Error
			}
		}
		unbusyCursor .
	}

	#----------------------------------------------------------------------
	# Send the move to the opponent via eMail
	# This requires an external MTA that is capable of sending a pgn file
	# as attachement (content-type: application/x-chess-pgn). This can be
	# accomplished by nail with proper /etc/mime.types (default on debian).
	# Additionally the program has to handle SMTP-Auth in all its flavours
	# to be of any use in present days.
	# A stripped version of the game is placed in outbox and sent to the
	# opponent. As nail does not handle empty bodies it is sent as text
	# within the body and once attached for easy extraction with mail
	# programs that do not know a thing about piping.
	# After the mail is sent a full featured version of the pgn is placed
	#----------------------------------------------------------------------
	proc eMailMove { } {
		global ::CorrespondenceChess::Outbox \
			::CorrespondenceChess::mailer  ::CorrespondenceChess::mailermode \
			::CorrespondenceChess::attache ::CorrespondenceChess::subject \
			::CorrespondenceChess::bccaddr ::CorrespondenceChess::CorrSlot
		global emailData
		global windowsOS

		busyCursor .

		# Regardless how the user opend this DB, find it! ;)
		::CorrespondenceChess::CheckForCorrDB

		if {$CorrSlot > -1} {
			# move to end to show the location to send AND to get the right
			# side to move, ie. for the extraction of the correct To: address
			::move::End
			set Event  [sc_game tags get Event]
			set Site   [sc_game tags get Site ]
			set Date   [sc_game tags get Date]
			set Round  [sc_game tags get Round]
			set Result [sc_game tags get Result]
			set White  [sc_game tags get White]
			set Black  [sc_game tags get Black]
			set Extra  [sc_game tags get Extra]
			set Extra  [sc_game tags get Extra]
			set extraTagsList [split $Extra "\n"]

			foreach i $extraTagsList {
				if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
					set CmailGameName [string range $i 15 end-1]
				}
				if { [string equal -nocase [lindex $i 0] "WhiteNA" ] } {
					set WhiteNA [string range $i 9 end-1]
				}
				if { [string equal -nocase [lindex $i 0] "BlackNA" ] } {
					set BlackNA [string range $i 9 end-1]
				}
			}

			# construct a PGN in Outbox, stripped bare of comments and variations
			set pgnfile "[file join $Outbox $CmailGameName].pgn"

			sc_base export "current" "PGN" $pgnfile -append 0 -comments 0 -variations 0 \
						-space 1 -symbols 0 -indentC 0 -indentV 0 -column 0 -noMarkCodes 0 -convertNullMoves 1

			# sc_game pgn -gameNumber $i -width 70 -tags 0 -variations 0 -comments 0]

			# try to handle some obscure problem that the file is not
			# existent yet when calling the mailer
			while {! [file exists $pgnfile]} {
				after 1500 puts "waiting..."
			}
			# send the game to the side to move
			set toMove  [sc_pos side]

			if {$toMove == "white"} {
				set to   $WhiteNA
				set from $BlackNA
			} else {
				set from $WhiteNA
				set to   $BlackNA
			}

			# get rid of spaces in names by using Windows internal real names
			if {$windowsOS} {
				catch {set mailer [file attributes $mailer -shortname]}
			}

			set title   "scid mail 1 game ($CmailGameName)"
			set body    "Final FEN: "
			append body [sc_pos fen]
			append body "\n\n"
			append body "Move List: "
			append body [sc_game moves]
			append body "\n\n"

			# Check what calling convention to use:
			# - mailx  : something like mailx, mutt, nail or whatever via
			#            commandline. This sends the mail without further
			#            intervention by the user
			# - mozilla: call a mozilla or descendent like icedove or
			#            thunderbird. This syntax is found somewhere in the
			#            developers docs and almost entirely undocumented
			# - mailurl: the same syntax as for mailto:-links in webpages
			#            (rfc 2368). This calling convention is supported by
			#            evolution
			# -claws   : Claws mailer, seems to be almost mailurl, but needs
			#            a parameter for attachements
			switch -regexp -- $::CorrespondenceChess::mailermode \
			"mailx" {
				set callstring "$mailer $subject \"$title\" -b $bccaddr $attache \"$pgnfile\" $to <\"$pgnfile\""
			} \
			"mozilla" {
				if {$windowsOS} {
					set callstring "$mailer -compose subject='$title',bcc=$bccaddr,attachment='file:///$pgnfile',to=$to,body=$body"
				} else {
					set callstring "$mailer -compose subject='$title',bcc=$bccaddr,attachment='file://$pgnfile',to='$to',body='$body'"
				}
			} \
			"mailurl" {
				set callstring "$mailer \'mailto:\<$to\>?bcc=$bccaddr\&subject=$title\&attach=$pgnfile\&body=$body\'"
			} \
			"claws" {
				set callstring "$mailer --compose \'mailto:$to?subject=$title&cc=$bccaddr&body=$body\' --attach \"$pgnfile\""
			}
			::CorrespondenceChess::updateConsole "info Calling eMail program: $mailer..."
			CallExternal $callstring

			# Save the game once the move is sent
			set num [sc_game number]
			sc_game save $num

			# Hook up with email manager: search the game in its internal
			# list and add the send flag automatically.
			set done 0
			set idx  0
			foreach dataset $emailData {
				if { [lindex $dataset 0] == $CmailGameName} {
					set done 1
					# add the sent flag and date
					::tools::email::addSentReceived $idx s
				}
				incr idx
			}
		}

		unbusyCursor .
	}

	#----------------------------------------------------------------------
	# Send the move to the opponent via XFCC or eMail
	#----------------------------------------------------------------------
	proc SendMove {resign claimDraw offerDraw acceptDraw } {
		global ::CorrespondenceChess::Outbox
		global ::CorrespondenceChess::XfccSendcmd
		global ::CorrespondenceChess::CorrSlot
		global ::CorrespondenceChess::XfccConfirm 
		global ::CorrespondenceChess::num

		busyCursor .

		::CorrespondenceChess::CheckForCorrDB
		if {$CorrSlot > -1} {
			sc_move end

			set Extra [sc_game tags get Extra]
			set extraTagsList [split $Extra "\n"]

			# ... extract it as it contains the unique ID
			foreach i $extraTagsList {
				if { [string equal -nocase [lindex $i 0] "CmailGameName" ] } {
					set CmailGameName [string range $i 15 end-1]
				}
				if { [string equal -nocase [lindex $i 0] "WhiteAddress" ] } {
					set WhiteAdr [split [string range $i 14 end-1] ";"]
					set WhiteAdr [split [string range $i 14 end-1] ";"]
				}
				if { [string equal -nocase [lindex $i 0] "BlackAddress" ] } {
					set BlackAdr [string range $i 14 end-1]
					set BlackAdr [split [string range $i 14 end-1] ";"]
				}
			}

			set pgnfile "[file join $Outbox $CmailGameName].pgn"

			set IdList    [split $CmailGameName "-"]
			set name      [lindex $IdList 0]
			set gameid    [lindex $IdList 1]
			set movecount [sc_pos moveNumber]
			set ply       [sc_pos location]
			set move      [sc_game info previousMoveNT]
			set comment   [sc_pos getComment]
			set Event     [sc_game tags get Event]

			# Throw away everything in [] as often as it exists
			# This matches [%ccsnt] as well as scid marker codes
			regsub -all {\[[^\]]*\]} $comment {} comment

			# moveNumber gives the number of the next full move. This is
			# one to high in case of playing black. Note that for this
			# ply it is _white_ to move!
			if {[sc_pos side] == "white"} {
					set movecount [expr {$movecount-1}]
			}

			# Mark the ID background:
			# yellow while sending in progress,
			# green if the move was sent in the
			# current session (ie. without update)
			.ccWindow.bottom.id tag add hlsent$CmailGameName $num.0 [expr {$num+1}].0 
			.ccWindow.bottom.id tag configure hlsent$CmailGameName -background yellow -font font_Bold

			set DlgBoxText "[::tr CCDlgConfirmMoveText]\n\n$name-$gameid:\n\t$movecount. $move\n\t{$comment}"
			if {$resign == 1} {
				set DlgBoxText "$DlgBoxText\n\n[::tr CCResign]"
				# When resigning usually no move is made before.
				# Therefore, we have to increase the ply by one (faking a
				# move) and recalculate the resulting move number if White
				# is to move.
				# This gives:
				# 1. e4 <resign> => ply 2 => no ply increment => move
				# number = 1, move number to send = 1
				# 1. e4 e5 <resign> => increment ply => ply = 3 => move
				# number = 1, move number to send = 2
				if {[sc_pos side] == "white"} {
					set movecount [expr {$ply / 2 + 1}]	
					::CorrespondenceChess::updateConsole "info Increment ply $movecount"
				}
			} elseif {$acceptDraw == 1} {
				set DlgBoxText "$DlgBoxText\n\n[::tr CCAcceptDraw]"
			} elseif {$offerDraw  == 1} {
				set DlgBoxText "$DlgBoxText\n\n[::tr CCofferDraw]"
			} elseif {$claimDraw  == 1} {
				set DlgBoxText "$DlgBoxText\n\n[::tr CCClaimDraw]"
			}

			set result 0
			if {$::CorrespondenceChess::XfccConfirm == 1} {
				set result [tk_dialog .roDialog "Scid: [tr CCDlgConfirmMove]" \
						$DlgBoxText "" 1 $::tr(Yes) $::tr(No)]
			}
			if {$result == 0} {
				# Go to the last move is important to send the comment for
				# the last move only not the comment for the current game
				# position!

				# If Event = "Email correspondence game"
				# treat it as cmail game that is send by mail, otherwise it is
				# Xfcc and sent accordingly
				set Mode [::CorrespondenceChess::CheckMode]
				if {$Mode == "EM"} {
					eMailMove
				} elseif {$Mode == "XFCC"} {

					if {$::CorrespondenceChess::XfccInternal == 1} {
						# use internal Xfcc-handling
						::Xfcc::ReadConfig $::CorrespondenceChess::xfccrcfile
						::Xfcc::Send $name $gameid $movecount $move $comment \
								$resign $acceptDraw $offerDraw $claimDraw
					} else {
						if {[file executable "$XfccSendcmd"]} {
							set callstring "$XfccSendcmd $Outbox $name $gameid $movecount $move \"$comment\" $resign $claimDraw $offerDraw $acceptDraw &"

							::CorrespondenceChess::updateConsole "info Spawning external send tool $XfccSendcmd..."
							CallExternal $callstring
						}
					}
				} elseif {$Mode == "Postal"} {
					# produce a postcard
				}

				# Save the game once the move is sent
				sc_game save [sc_game number]

				# setting "noMarkCodes" to 1 would drop the timing comments
				# inserted e.g. by SchemingMind. Do not overwrite eMail based
				# games as the mailer might not have sent them and most
				# mailers load the file right before transmission.
				if {!(($Mode == "EM") || ($Mode == "Relay"))} {
					sc_base export "current" "PGN" $pgnfile -append 0 -comments 1 -variations 1 \
								-space 1 -symbols 1 -indentC 0 -indentV 0 -column 0 -noMarkCodes 0 -convertNullMoves 1
				}

				# Everything done, set background to green
				.ccWindow.bottom.id tag configure hlsent$CmailGameName -background green -font font_Bold
			} else {
				# mark games with unconfirmed moves in gray:
				.ccWindow.bottom.id tag configure hlsent$CmailGameName -background gray -font font_Small
			}
		}
		unbusyCursor .
	}

	#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	# source the options file to overwrite the above setup
	if {[catch {source [scidConfigFile correspondence]} ]} {
	  #::splash::add "Unable to find the options file: [file tail $optionsFile]"
	} else {
	  ::splash::add "Correspondence Chess configuration was found and loaded."
	}

	if {[catch { package require http }]} {
	  ::splash::add "http package not found, disabling internal Xfcc support"
		set XfccInternal -1
	} else {
		::http::config -useragent $::Xfcc::useragent
	}

	if {[catch {package require tdom}]} {
		::splash::add "tDOM package not found, disabling internal Xfcc support"
		set XfccInternal -1
	}

	::CorrespondenceChess::checkInOutbox
	::CorrespondenceChess::checkXfccrc
	::CorrespondenceChess::checkCorrBase
	#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
}


###
### End of file: Correspondence.tcl
###

# Text for menu names and status bar help messages in English.
# Part of Scid (Shane's Chess Information Database).
#
# Instructions for adding a new language:
#
# (1) Choose a letter code for the language. Currently assigned codes are:
#      E=English, D=Deutsch, F=Francais, S=Spanish, B=Brasil Portuguese,
#      P=Polish, N=Nederlands, W=Swedish, O=Norsk, C=Czech, H=Hungarian,
#      Y=Serbian.
#
# (2) Edit the code below that has the lines "addLanguage ..." and add your
#     new language. The final digit in each line is the index of the
#     letter to underline in the menu, counting from 0 as the first letter.
#
# (3) Copy the section of English menu and help message details below (all
#     the commands that start "menuText E ..." or "helpMsg E ..." or
#     "translate E ...") and change all the "E" letters to the letter you
#     assigned for the new language.
#
# (4) Write the translations. This involves changing anything "in quotes"
#     or {in braces} for the menuText, helpMsg and translate commands.
#
#     A menu command has the format:
#         menuText L tag "Name..." underline {HelpMessage...}
#
#     A status bar help message for a button has the format:
#         helpMsg L tag {HelpMessage...}
#
#     A general word or message translation has the format:
#         translate L tag {message...}
#
#     where "L" is the language letter, "tag" is the name of the menu entry
#     or the button widget name, and "underline" is the index of the letter
#     to underline, counting from zero as the first letter. Two menu entries
#     that appear in the same menu should have a different underlined letter.
#     If in doubt, just make them all "0" and I'll assign sensible underlined
#     letters when your translations are incorporated into Scid.
#
# Additions, corrections? Email: sgh@users.sourceforge.net


addLanguage E English 0

proc setLanguage_E {} {

# File menu:
menuText E File "File" 0
menuText E FileNew "New..." 0 {Create a new Scid database}
menuText E FileOpen "Open..." 0 {Open an existing Scid database}
menuText E FileClose "Close" 0 {Close the active Scid database}
menuText E FileFinder "Finder" 0 {Open the File Finder window}
menuText E FileBookmarks "Bookmarks" 0 {Bookmarks menu (shortcut: Ctrl+B)}
menuText E FileBookmarksAdd "Add Bookmark" 0 \
  {Bookmark the current database game and position}
menuText E FileBookmarksFile "File Bookmark" 0 \
  {File a bookmark for the current game and position}
menuText E FileBookmarksEdit "Edit Bookmarks..." 0 \
  {Edit the bookmarks menus}
menuText E FileBookmarksList "Display Folders as Single List" 0 \
  {Display bookmark folders as a single list, not submenus}
menuText E FileBookmarksSub "Display Folders as Submenus" 0 \
  {Display bookmark folders as submenus, not a single list}
menuText E FileMaint "Maintenance" 0 {Scid database maintenance tools}
menuText E FileMaintWin "Maintenance Window" 0 \
  {Open/close the Scid database maintenance window}
menuText E FileMaintCompact "Compact Database..." 0 \
  {Compact database files, removing deleted games and unused names}
menuText E FileMaintClass "ECO-Classify Games..." 2 \
  {Recompute the ECO code of all games}
menuText E FileMaintSort "Sort Database..." 0 \
  {Sort all games in the database}
menuText E FileMaintDelete "Delete Twin Games..." 0 \
  {Find twin games and set them to be deleted}
menuText E FileMaintTwin "Twin Checker Window" 0 \
  {Open/update the Twin checker window}
menuText E FileMaintName "Name Spelling" 0 {Name editing and spelling tools}
menuText E FileMaintNameEditor "Name Editor" 0 \
  {Open/close the name editor window}
menuText E FileMaintNamePlayer "Spellcheck Player Names..." 11 \
  {Spellcheck player names using the spellcheck file}
menuText E FileMaintNameEvent "Spellcheck Event Names..." 11 \
  {Spellcheck event names using the spellcheck file}
menuText E FileMaintNameSite "Spellcheck Site Names..." 11 \
  {Spellcheck site names using the spellcheck file}
menuText E FileMaintNameRound "Spellcheck Round Names..." 11 \
  {Spellcheck round names using the spellcheck file}
menuText E FileReadOnly "Read-only..." 0 \
  {Treat the current database as read-only, preventing changes}
menuText E FileSwitch "Switch to Database" 0 \
  {Switch to a different opened database}
menuText E FileExit "Exit" 1 {Exit Scid}
menuText E FileMaintFixBase "Repair base" 0 {Try to repair a corrupted base}
  
# Edit menu:
menuText E Edit "Edit" 0
menuText E EditAdd "Add Variation" 0 {Add a variation at this move in the game}
menuText E EditDelete "Delete Variation" 0 {Delete a variation for this move}
menuText E EditFirst "Make First Variation" 5 \
  {Promote a variation to be first in the list}
menuText E EditMain "Promote Variation to Main Line" 21 \
  {Promote a variation to be the main line}
menuText E EditTrial "Try Variation" 0 \
  {Start/stop trial mode, for testing an idea on the board}
menuText E EditStrip "Strip" 2 {Strip comments or variations from this game}
menuText E EditUndo "Undo" 0 {Undo last game change}
menuText E EditRedo "Redo" 0 {Redo last game change}
menuText E EditStripComments "Comments" 0 \
  {Strip all comments and annotations from this game}
menuText E EditStripVars "Variations" 0 {Strip all variations from this game}
menuText E EditStripBegin "Moves from the beginning" 1 \
  {Strip moves from the beginning of the game}
menuText E EditStripEnd "Moves to the end" 0 \
  {Strip moves to the end of the game}
menuText E EditReset "Empty Clipbase" 0 \
  {Reset the clipbase to be completely empty}
menuText E EditCopy "Copy This Game to Clipbase" 0 \
  {Copy this game to the Clipbase database}
menuText E EditPaste "Paste Last Clipbase Game" 0 \
  {Paste the active Clipbase game here}
menuText E EditPastePGN "Paste Clipboard text as PGN game..." 18 \
  {Interpret the clipboard text as a game in PGN notation and paste it here}
menuText E EditSetup "Setup Start Board..." 0 \
  {Set the start position for this game}
menuText E EditCopyBoard "Copy Position" 6 \
  {Copy the current board in FEN notation to the text selection (clipboard)}
menuText E EditPasteBoard "Paste Start Board" 12 \
  {Set the start board from the current text selection (clipboard)}

# Game menu:
menuText E Game "Game" 0
menuText E GameNew "New Game" 0 \
  {Reset to an empty game, discarding any changes}
menuText E GameFirst "Load First Game" 5 {Load the first filtered game}
menuText E GamePrev "Load Previous Game" 5 {Load the previous filtered game}
menuText E GameReload "Re-Load Current Game" 3 \
  {Reload this game, discarding any changes made}
menuText E GameNext "Load Next Game" 7 {Load the next filtered game}
menuText E GameLast "Load Last Game" 8 {Load the last filtered game}
menuText E GameRandom "Load Random Game" 8 {Load a random filtered game}
menuText E GameNumber "Load Game Number..." 5 \
  {Load a game by entering its number}
menuText E GameReplace "Save: Replace game..." 6 \
  {Save this game, replacing the old version}
menuText E GameAdd "Save: Add New Game..." 6 \
  {Save this game as a new game in the database}
menuText E GameDeepest "Identify Opening" 0 \
  {Goto the deepest game position listed in the ECO book}
menuText E GameGotoMove "Goto Move Number..." 5 \
  {Go to a specified move number in the current game}
menuText E GameNovelty "Find Novelty..." 7 \
  {Find the first move of this game that has not played before}

# Search Menu:
menuText E Search "Search" 0
menuText E SearchReset "Reset Filter" 0 {Reset the filter so all games are included}
menuText E SearchNegate "Negate Filter" 0 {Negate the filter to only include excluded games}
menuText E SearchCurrent "Current Board..." 0 {Search for the current board position}
menuText E SearchHeader "Header..." 0 {Search by Header (player, event, etc) information}
menuText E SearchMaterial "Material/Pattern..." 0 {Search for material or board patterns}
menuText E SearchUsing "Using Search File..." 0 {Search using a SearchOptions file}

# Windows menu:
menuText E Windows "Windows" 0
menuText E WindowsComment "Comment Editor" 0 {Open/close the comment editor}
menuText E WindowsGList "Game List" 0 {Open/close the game list window}
menuText E WindowsPGN "PGN Window" 0 \
  {Open/close the PGN (game notation) window}
menuText E WindowsPList "Player Finder" 2 {Open/close the player finder}
menuText E WindowsTmt "Tournament Finder" 2 {Open/close the tournament finder}
menuText E WindowsSwitcher "Database switcher" 0 \
  {Open/close the Database Switcher window}
menuText E WindowsMaint "Maintenance Window" 0 \
  {Open/close the Maintenance window}
menuText E WindowsECO "ECO Browser" 0 {Open/close the ECO Browser window}
menuText E WindowsRepertoire "Repertoire Editor" 0 \
  {Open/close the opening repertoire editor}
menuText E WindowsStats "Statistics Window" 0 \
  {Open/close the filter statistics window}
menuText E WindowsTree "Tree Window" 0 {Open/close the Tree window}
menuText E WindowsTB "Endgame Tablebase Window" 1 {Open/close the Tablebase window}
menuText E WindowsBook "Book Window" 0 {Open/close the Book window}
menuText E WindowsCorrChess "Correspondence Window" 0 {Open/close the Correspondence window}

# Tools menu:
menuText E Tools "Tools" 0
menuText E ToolsAnalysis "Analysis Engine..." 0 \
  {Start/stop a chess analysis engine}
menuText E ToolsAnalysis2 "Analysis Engine #2..." 17 \
  {Start/stop the 2nd chess analysis engine}
menuText E ToolsCross "Crosstable" 0 {Show tournament crosstable for this game}
menuText E ToolsEmail "Email Manager" 0 {Open/close the email chess manager window}
menuText E ToolsFilterGraph "Rel. Filter Graph" 12 {Open/close the filter graph window for relative values}
menuText E ToolsAbsFilterGraph "Abs. Filter Graph" 7 {Open/close the filter graph window for absolute values}
menuText E ToolsOpReport "Opening Report" 0 {Generate an opening report for the current position}
menuText E ToolsOpenBaseAsTree "Open base as tree..." 0   {Open a base and use it in Tree window}
menuText E ToolsOpenRecentBaseAsTree "Open recent base as tree" 0   {Open a recent base and use it in Tree window}
menuText E ToolsTracker "Piece Tracker"  6 {Open the Piece Tracker window}
menuText E ToolsTraining "Training"  0 {Training tools (tactics, openings,...) }
menuText E ToolsTacticalGame "Tactical game"  0 {Play a game with tactics}
menuText E ToolsSeriousGame "Serious game"  0 {Play a serious game}
menuText E ToolsTrainOpenings "Openings"  0 {Train with a repertoire}
menuText E ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
menuText E ToolsTrainTactics "Tactics"  0 {Solve tactics}
menuText E ToolsTrainCalvar "Calculation of variations"  0 {Calculation of variations training}
menuText E ToolsTrainFindBestMove "Find best move"  0 {Find best move}
menuText E ToolsTrainFics "Play on FICS"  0 {Play on freechess.org}
menuText E ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText E ToolsBookTuning "Book tuning" 0 {Book tuning}
menuText E ToolsConnectHardware "Connect Hardware" 8 {Connect external hardware}
menuText E ToolsConnectHardwareConfigure "Configure..." 0 {Configure external hardware and connection}
menuText E ToolsConnectHardwareNovagCitrineConnect "Connect Novag Citrine" 8 {Connect Novag Citrine with Scid}
menuText E ToolsConnectHardwareInputEngineConnect "Connect Input Engine" 8 {Connect Input Engine (e.g. DGT board) with Scid}

menuText E ToolsPInfo "Player Information"  0 \
  {Open/update the Player Information window}
menuText E ToolsPlayerReport "Player Report..." 3 \
  {Generate a player report}
menuText E ToolsRating "Rating Graph" 0 \
  {Graph the rating history of the current game players}
menuText E ToolsScore "Score Graph" 0 {Show the score graph window}
menuText E ToolsExpCurrent "Export Current Game" 8 \
  {Write current game to a text file}
menuText E ToolsExpCurrentPGN "Export Game to PGN File..." 15 \
  {Write current game to a PGN file}
menuText E ToolsExpCurrentHTML "Export Game to HTML File..." 15 \
  {Write current game to a HTML file}
menuText E ToolsExpCurrentHTMLJS "Export Game to HTML and JavaScript File..." 15 {Write current game to a HTML and JavaScript file}  
menuText E ToolsExpCurrentLaTeX "Export Game to LaTeX File..." 15 \
  {Write current game to a LaTeX file}
menuText E ToolsExpFilter "Export All Filter Games" 1 \
  {Write all filtered games to a text file}
menuText E ToolsExpFilterPGN "Export Filter to PGN File..." 17 \
  {Write all filtered games to a PGN file}
menuText E ToolsExpFilterHTML "Export Filter to HTML File..." 17 \
  {Write all filtered games to a HTML file}
menuText E ToolsExpFilterHTMLJS "Export Filter to HTML and JavaScript File..." 17 {Write all filtered games to a HTML and JavaScript file}  
menuText E ToolsExpFilterLaTeX "Export Filter to LaTeX File..." 17 \
  {Write all filtered games to a LaTeX file}
menuText E ToolsImportOne "Import One PGN Game..." 0 \
  {Import a game from PGN text}
menuText E ToolsImportFile "Import File(s) of PGN Games..." 7 {Import games from PGN file(s)}
menuText E ToolsStartEngine1 "Start engine 1" 13  {Start engine 1}
menuText E ToolsStartEngine2 "Start engine 2" 13  {Start engine 2}
menuText E ToolsCaptureBoard "Capture Current Board..." 5  {Save the current board as an image.}

# Play menue
menuText E Play "Play" 0

# --- Correspondence Chess
menuText E CorrespondenceChess "Correspondence Chess" 0 {Functions for eMail and Xfcc based correspondence chess}
menuText E CCConfigure "Configure..." 0 {Configure external tools and general setup}
menuText E CCConfigRelay "Observe games..." 10 {Configure games to be observed}
menuText E CCOpenDB "Open Database..." 0 {Open the default Correspondence database}
menuText E CCRetrieve "Retrieve Games" 0 {Retrieve games via external (Xfcc-)helper}
menuText E CCInbox "Process Inbox" 8 {Process all files in scids Inbox}
menuText E CCSend "Send Move" 0 {Send your move via eMail or external (Xfcc-)helper}

menuText E CCResign "Resign" 1 {Resign (not via eMail)}
menuText E CCClaimDraw "Claim Draw" 6 {Send move and claim a draw (not via eMail)}
menuText E CCOfferDraw "Offer Draw" 1 {Send move and offer a draw (not via eMail)}
menuText E CCAcceptDraw "Accept Draw" 0 {Accept a draw offer (not via eMail)}

menuText E CCNewMailGame "New eMail Game..." 2 {Start a new eMail game}
menuText E CCMailMove "Mail Move..." 0 {Send the move via eMail to the opponent}
menuText E CCGamePage "Game Page..." 0 {Call up the game via the web browser}

# menu in cc window:
menuText E CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

#  B    GHiJKL    Q  TUV XYZ

# Options menu:
menuText E Options "Options" 0
menuText E OptionsBoard "Chessboard" 0 {Chess board appearance options}
menuText E OptionsBoardSize "Size" 0 {Change the board size}
menuText E OptionsBoardPieces "Piece Style" 6 {Change the board piece style}
menuText E OptionsBoardColors "Colors..." 0 {Change board colors}
#Klimmek
menuText E OptionsBoardGraphics "Squares..." 0 {Select textures for squares}
translate E OptionsBGW {Select texture for squares}
translate E OptionsBoardGraphicsText {Select graphic files for white and black squares:}
menuText E OptionsBoardNames "My Player Names..." 0 {Edit my player names}
menuText E OptionsExport "Exporting" 0 {Change text export options}
menuText E OptionsFonts "Fonts" 0 {Change fonts}
menuText E OptionsFontsRegular "Regular" 0 {Change the regular font}
menuText E OptionsFontsMenu "Menu" 0 {Change the menu font}
menuText E OptionsFontsSmall "Small" 0 {Change the small font}
menuText E OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText E OptionsFontsFixed "Fixed" 0 {Change the fixed-width font}
menuText E OptionsGInfo "Game Information" 0 {Game information options}
menuText E OptionsLanguage "Language" 0 {Select menu language}
menuText E OptionsMovesTranslatePieces "Translate pieces" 0 {Translate first letter of pieces}
menuText E OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
menuText E OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
menuText E OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
menuText E OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
menuText E OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText E OptionsMoves "Moves" 0 {Move entry options}
menuText E OptionsMovesAsk "Ask Before Replacing Moves" 0 \
  {Ask before overwriting any existing moves}
menuText E OptionsMovesAnimate "Animation Time" 1 \
  {Set the amount of time used to animate moves}
menuText E OptionsMovesDelay "Autoplay Time Delay..." 1 \
  {Set the time delay for autoplay mode}
menuText E OptionsMovesCoord "Coordinate Move Entry" 0 \
  {Accept coordinate-style move entry (e.g. "g1f3")}
menuText E OptionsMovesSuggest "Show Suggested Moves" 0 \
  {Turn on/off move suggestion}
menuText E OptionsShowVarPopup "Show variations window" 0 {Turn on/off the display of a variations window}  
menuText E OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}  
menuText E OptionsMovesKey "Keyboard Completion" 0 \
  {Turn on/off keyboard move auto-completion}
menuText E OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText E OptionsNumbers "Number Format" 0 {Select the number format}
menuText E OptionsStartup "Startup" 3 {Select windows to open at startup}
menuText E OptionsTheme "Theme" 0 {Change look of interface}
menuText E OptionsWindows "Windows" 0 {Window options}
menuText E OptionsWindowsIconify "Auto-Iconify" 5 \
  {Iconify all windows when the main window is iconified}
menuText E OptionsWindowsRaise "Auto-Raise" 5 \
  {Raise certain windows (e.g. progress bars) whenever they are obscured}
menuText E OptionsSounds "Sounds..." 2 {Configure move announcement sounds}
menuText E OptionsWindowsDock "Dock windows" 0 {Dock windows (needs restart)}
menuText E OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
menuText E OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
menuText E OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
menuText E OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText E OptionsToolbar "Toolbar..." 0 {Configure the main window toolbar}
menuText E OptionsECO "Load ECO File..." 7 {Load the ECO classification file}
menuText E OptionsSpell "Load Spellcheck File..." 11 \
  {Load the Scid spellcheck file}
menuText E OptionsTable "Tablebase Directory..." 10 \
  {Select a tablebase file; all tablebases in its directory will be used}
menuText E OptionsRecent "Recent Files..." 0 {Change the number of recent files displayed in the File menu}
menuText E OptionsBooksDir "Books directory..." 0 {Sets the opening books directory}
menuText E OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText E OptionsSave "Save Options" 0 "Save all settable options to the file $::optionsFile"
menuText E OptionsAutoSave "Auto-Save Options on Exit" 0 \
  {Auto-save all options when exiting Scid}

# Help menu:
menuText E Help "Help" 0
menuText E HelpContents "Contents" 0 {Show the help contents page}
menuText E HelpIndex "Index" 0 {Show the help index page}
menuText E HelpGuide "Quick Guide" 0 {Show the quick guide help page}
menuText E HelpHints "Hints" 0 {Show the hints help page}
menuText E HelpContact "Contact Info" 1 {Show the contact information help page}
menuText E HelpTip "Tip of the Day" 0 {Show a useful Scid tip}
menuText E HelpStartup "Startup Window" 0 {Show the startup window}
menuText E HelpAbout "About Scid" 0 {Information about Scid}

# Game info box popup menu:
menuText E GInfoHideNext "Hide Next Move" 0
menuText E GInfoMaterial "Show Material Values" 0
menuText E GInfoFEN "Show FEN" 5
menuText E GInfoMarks "Show Colored Squares and Arrows" 5
menuText E GInfoWrap "Wrap Long Lines" 0
menuText E GInfoFullComment "Show Full Comment" 10
menuText E GInfoPhotos "Show Photos" 5
menuText E GInfoTBNothing "Tablebases: Nothing" 12
menuText E GInfoTBResult "Tablebases: Result Only" 12
menuText E GInfoTBAll "Tablebases: Result and Best Moves" 19
menuText E GInfoDelete "(Un)Delete This Game" 4
menuText E GInfoMark "(Un)Mark This Game" 4
menuText E GInfoInformant "Configure informant values" 0

# Main window buttons:
helpMsg E .main.fbutton.button.start {Go to start of game  (key: Home)}
helpMsg E .main.fbutton.button.end {Go to end of game  (key: End)}
helpMsg E .main.fbutton.button.back {Go back one move  (key: LeftArrow)}
helpMsg E .main.fbutton.button.forward {Go forward one move  (key: RightArrow)}
helpMsg E .main.fbutton.button.intoVar {Move into a variation  (key: v)}
helpMsg E .main.fbutton.button.exitVar {Leave the current variation  (key: z)}
helpMsg E .main.fbutton.button.flip {Rotate board  (key: .)}
helpMsg E .main.fbutton.button.coords {Turn board coordinates on or off  (key: 0)}
helpMsg E .main.fbutton.button.stm {Turn the side-to-move icon on or off}
helpMsg E .main.fbutton.button.autoplay {Autoplay moves  (key: Ctrl+Z)}
helpMsg E .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
helpMsg E .main.fbutton.button.hgame_prev {Go back to previous viewed game}
helpMsg E .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate E Back {Back}
translate E Browse {Browse}
translate E Cancel {Cancel}
translate E Continue {Continue}
translate E Clear {Clear}
translate E Close {Close}
translate E Contents {Contents}
translate E Defaults {Defaults}
translate E Delete {Delete}
translate E Graph {Graph}
translate E Help {Help}
translate E Import {Import}
translate E Index {Index}
translate E LoadGame {Load Game}
translate E BrowseGame {Browse Game}
translate E MergeGame {Merge Game}
translate E MergeGames {Merge Games}
translate E Preview {Preview}
translate E Revert {Revert}
translate E Save {Save}
translate E Search {Search}
translate E Stop {Stop}
translate E Store {Store}
translate E Update {Update}
translate E ChangeOrient {Change window orientation}
translate E ShowIcons {Show Icons}
translate E None {None}
translate E First {First}
translate E Current {Current}
translate E Last {Last}

# General messages:
translate E game {game}
translate E games {games}
translate E move {move}
translate E moves {moves}
translate E all {all}
translate E Yes {Yes}
translate E No {No}
translate E Both {Both}
translate E King {King}
translate E Queen {Queen}
translate E Rook {Rook}
translate E Bishop {Bishop}
translate E Knight {Knight}
translate E Pawn {Pawn}
translate E White {White}
translate E Black {Black}
translate E Player {Player}
translate E Rating {Rating}
translate E RatingDiff {Rating difference (White - Black)}
translate E AverageRating {Average Rating}
translate E Event {Event}
translate E Site {Site}
translate E Country {Country}
translate E IgnoreColors {Ignore colors}
translate E Date {Date}
translate E EventDate {Event date}
translate E Decade {Decade}
translate E Year {Year}
translate E Month {Month}
translate E Months {January February March April May June July August September October November December}
translate E Days {Sun Mon Tue Wed Thu Fri Sat}
translate E YearToToday {Year to today}
translate E Result {Result}
translate E Round {Round}
translate E Length {Length}
translate E ECOCode {ECO code}
translate E ECO {ECO}
translate E Deleted {Deleted}
translate E SearchResults {Search Results}
translate E OpeningTheDatabase {Opening database}
translate E Database {Database}
translate E Filter {Filter}
translate E noGames {no games}
translate E allGames {all games}
translate E empty {empty}
translate E clipbase {clipbase}
translate E score {score}
translate E StartPos {Start position}
translate E Total {Total}
translate E readonly {read-only}

# Standard error messages:
translate E ErrNotOpen {This is not an open database.}
translate E ErrReadOnly {This database is read-only; it cannot be altered.}
translate E ErrSearchInterrupted {Search was interrupted; results are incomplete.}

# Game information:
translate E twin {twin}
translate E deleted {deleted}
translate E comment {comment}
translate E hidden {hidden}
translate E LastMove {Last move}
translate E NextMove {Next}
translate E GameStart {Start of game}
translate E LineStart {Start of line}
translate E GameEnd {End of game}
translate E LineEnd {End of line}

# Player information:
translate E PInfoAll {Results for <b>all</b> games}
translate E PInfoFilter {Results for <b>filter</b> games}
translate E PInfoAgainst {Results against}
translate E PInfoMostWhite {Most common openings as White}
translate E PInfoMostBlack {Most common openings as Black}
translate E PInfoRating {Rating history}
translate E PInfoBio {Biography}
translate E PInfoEditRatings {Edit Ratings}

# Tablebase information:
translate E Draw {Draw}
translate E stalemate {stalemate}
translate E withAllMoves {with all moves}
translate E withAllButOneMove {with all but one move}
translate E with {with}
translate E only {only}
translate E lose {lose}
translate E loses {loses}
translate E allOthersLose {all others lose}
translate E matesIn {mates in}
translate E hasCheckmated {has checkmated}
translate E longest {longest}
translate E WinningMoves {Winning moves}
translate E DrawingMoves {Drawing moves}
translate E LosingMoves {Losing moves}
translate E UnknownMoves {Unknown-result moves}

# Tip of the day:
translate E Tip {Tip}
translate E TipAtStartup {Tip at startup}

# Tree window menus:
menuText E TreeFile "File" 0
menuText E TreeFileFillWithBase "Fill Cache with base" 0 {Fill the cache file with all games in current base}
menuText E TreeFileFillWithGame "Fill Cache with game" 0 {Fill the cache file with current game in current base}
menuText E TreeFileSetCacheSize "Cache size" 0 {Set the cache size}
menuText E TreeFileCacheInfo "Cache info" 0 {Get info on cache usage}
menuText E TreeFileSave "Save Cache File" 0 {Save the tree cache (.stc) file}
menuText E TreeFileFill "Fill Cache File" 0 \
  {Fill the cache file with common opening positions}
menuText E TreeFileBest "Best Games List" 0 {Show the best tree games list}
menuText E TreeFileGraph "Graph Window" 0 {Show the graph for this tree branch}
menuText E TreeFileCopy "Copy Tree Text to Clipboard" 1 \
  {Copy the tree statisctics to the clipboard}
menuText E TreeFileClose "Close Tree Window" 0 {Close the tree window}
menuText E TreeMask "Mask" 0
menuText E TreeMaskNew "New" 0 {New mask}
menuText E TreeMaskOpen "Open" 0 {Open mask}
menuText E TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
menuText E TreeMaskSave "Save" 0 {Save mask}
menuText E TreeMaskClose "Close" 0 {Close mask}
menuText E TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
menuText E TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
menuText E TreeMaskInfo "Info" 0 {Show statistics for current mask}
menuText E TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
menuText E TreeMaskSearch "Search" 0 {Search in current mask}
menuText E TreeSort "Sort" 0
menuText E TreeSortAlpha "Alphabetical" 0
menuText E TreeSortECO "ECO Code" 0
menuText E TreeSortFreq "Frequency" 0
menuText E TreeSortScore "Score" 0
menuText E TreeOpt "Options" 0
menuText E TreeOptSlowmode "slow mode" 0 {Slow mode for updates (high accuracy)}
menuText E TreeOptFastmode "Fast mode" 0 {Fast mode for updates (no move transposition)}
menuText E TreeOptFastAndSlowmode "Fast and slow mode" 0 {Fast mode then slow mode for updates}
menuText E TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText E TreeOptLock "Lock" 0 {Lock/unlock the tree to the current database}
menuText E TreeOptTraining "Training" 0 {Turn on/off tree training mode}
menuText E TreeOptAutosave "Auto-Save Cache File" 0 \
  {Auto-save the cache file when closing the tree window}
menuText E TreeHelp "Help" 0
menuText E TreeHelpTree "Tree Help" 0
menuText E TreeHelpIndex "Help Index" 0
translate E SaveCache {Save Cache}
translate E Training {Training}
translate E LockTree {Lock}
translate E TreeLocked {locked}
translate E TreeBest {Best}
translate E TreeBestGames {Best Tree Games}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate E TreeTitleRow \
  {    Move   ECO       Frequency    Score  AvElo Perf AvYear %Draws}
translate E TreeTotal {TOTAL}
translate E DoYouWantToSaveFirst {Do you want to save first}
translate E AddToMask {Add to Mask}
translate E RemoveFromMask {Remove from Mask}
translate E AddThisMoveToMask {Add this move to Mask}
translate E SearchMask {Search in Mask}
translate E DisplayMask {Display Mask}
translate E Nag {Nag code}
translate E Marker {Marker}
translate E Include {Include}
translate E Exclude {Exclude}
translate E MainLine {Main line}
translate E Bookmark {Bookmark}
translate E NewLine {New line}
translate E ToBeVerified {To be verified}
translate E ToTrain {To train}
translate E Dubious {Dubious}
translate E ToRemove {To remove}
translate E NoMarker {No marker}
translate E ColorMarker {Color}
translate E WhiteMark {White}
translate E GreenMark {Green}
translate E YellowMark {Yellow}
translate E BlueMark {Blue}
translate E RedMark {Red}
translate E CommentMove {Comment move}
translate E CommentPosition {Comment position}
translate E AddMoveToMaskFirst {Add move to mask first}
translate E OpenAMaskFileFirst {Open a mask file first}
translate E Positions {Positions}
translate E Moves {Moves}

# Finder window:
menuText E FinderFile "File" 0
menuText E FinderFileSubdirs "Look in Subdirectories" 0
menuText E FinderFileClose "Close File Finder" 0
menuText E FinderSort "Sort" 0
menuText E FinderSortType "Type" 0
menuText E FinderSortSize "Size" 0
menuText E FinderSortMod "Modified" 0
menuText E FinderSortName "Name" 0
menuText E FinderSortPath "Path" 0
menuText E FinderTypes "Types" 0
menuText E FinderTypesScid "Scid Databases" 0
menuText E FinderTypesOld "Old-Format Scid Databases" 0
menuText E FinderTypesPGN "PGN Files" 0
menuText E FinderTypesEPD "EPD Files" 0
menuText E FinderTypesRep "Repertoire Files" 0
menuText E FinderHelp "Help" 0
menuText E FinderHelpFinder "File Finder Help" 0
menuText E FinderHelpIndex "Help Index" 0
translate E FileFinder {File Finder}
translate E FinderDir {Directory}
translate E FinderDirs {Directories}
translate E FinderFiles {Files}
translate E FinderUpDir {up}
translate E FinderCtxOpen {Open}
translate E FinderCtxBackup {Backup}
translate E FinderCtxCopy {Copy}
translate E FinderCtxMove {Move}
translate E FinderCtxDelete {Delete}
 
# Player finder:
menuText E PListFile "File" 0
menuText E PListFileUpdate "Update" 0
menuText E PListFileClose "Close Player Finder" 0
menuText E PListSort "Sort" 0
menuText E PListSortName "Name" 0
menuText E PListSortElo "Elo" 0
menuText E PListSortGames "Games" 0
menuText E PListSortOldest "Oldest" 0
menuText E PListSortNewest "Newest" 2

# Tournament finder:
menuText E TmtFile "File" 0
menuText E TmtFileUpdate "Update" 0
menuText E TmtFileClose "Close Tournament Finder" 0
menuText E TmtSort "Sort" 0
menuText E TmtSortDate "Date" 0
menuText E TmtSortPlayers "Players" 0
menuText E TmtSortGames "Games" 0
menuText E TmtSortElo "Elo" 0
menuText E TmtSortSite "Site" 0
menuText E TmtSortEvent "Event" 1
menuText E TmtSortWinner "Winner" 0
translate E TmtLimit "List Limit"
translate E TmtMeanElo "Mean Elo"
translate E TmtNone "No matching tournaments were found."

# Graph windows:
menuText E GraphFile "File" 0
menuText E GraphFileColor "Save as Color PostScript..." 8
menuText E GraphFileGrey "Save as Greyscale PostScript..." 8
menuText E GraphFileClose "Close Window" 6
menuText E GraphOptions "Options" 0
menuText E GraphOptionsWhite "White" 0
menuText E GraphOptionsBlack "Black" 0
menuText E GraphOptionsBoth "Both" 1
menuText E GraphOptionsPInfo "Player Info player" 0
translate E GraphFilterTitle "Filter Graph: frequency per 1000 games"
translate E GraphAbsFilterTitle "Filter Graph: frequency of the games"
translate E ConfigureFilter "Configure X-Axes for Year, Rating and Moves"
translate E FilterEstimate "Estimate"
translate E TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate E AddVariation {Add Variation}
translate E AddAllVariations {Add All Variations}
translate E AddMove {Add Move}
translate E Annotate {Annotate}
translate E ShowAnalysisBoard {Show analysis board}
translate E ShowInfo {Show engine info}
translate E FinishGame {Finish game}
translate E StopEngine {Stop engine}
translate E StartEngine {Start engine}
translate E LockEngine {Lock engine to current position}
translate E AnalysisCommand {Analysis Command}
translate E PreviousChoices {Previous Choices}
translate E AnnotateTime {Set the time between moves in seconds}
translate E AnnotateWhich {Add variations}
translate E AnnotateAll {For moves by both sides}
translate E AnnotateAllMoves {Annotate all moves}
translate E AnnotateWhite {For White moves only}
translate E AnnotateBlack {For Black moves only}
translate E AnnotateBlundersOnly {When game move is a blunder}
translate E AnnotateBlundersOnlyScoreChange {Analysis reports blunder, with score change from/to: }
translate E BlundersThreshold {Threshold}
translate E ScoreAllMoves {Score all moves}
translate E LowPriority {Low CPU Priority}
translate E ClickHereToSeeMoves {Click here to see moves}
translate E ConfigureInformant {Configure Informant}
translate E Informant!? {Interesting move}
translate E Informant? {Poor move}
translate E Informant?? {Blunder}
translate E Informant?! {Dubious move}
translate E Informant+= {White has a slight advantage}
translate E Informant+/- {White has a moderate advantage}
translate E Informant+- {White has a decisive advantage}
translate E Informant++- {The game is considered won}
  
# Book window
translate E Book {Book}
translate E OtherBookMoves {Opponent's book}
translate E OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate E EngineList {Analysis Engine List}
translate E EngineName {Name}
translate E EngineCmd {Command}
translate E EngineArgs {Parameters}
translate E EngineDir {Directory}
translate E EngineElo {Elo}
translate E EngineTime {Date}
translate E EngineNew {New}
translate E EngineEdit {Edit}
translate E EngineRequired {Fields in bold are required; others are optional}

# Stats window menus:
menuText E StatsFile "File" 0
menuText E StatsFilePrint "Print to File..." 0
menuText E StatsFileClose "Close Window" 0
menuText E StatsOpt "Options" 0

# PGN window menus:
menuText E PgnFile "File" 0
menuText E PgnFileCopy "Copy Game to Clipboard" 0
menuText E PgnFilePrint "Print to File..." 0
menuText E PgnFileClose "Close PGN Window" 10
menuText E PgnOpt "Display" 0
menuText E PgnOptColor "Color Display" 0
menuText E PgnOptShort "Short (3-line) Header" 0
menuText E PgnOptSymbols "Symbolic Annotations" 1
menuText E PgnOptIndentC "Indent Comments" 0
menuText E PgnOptIndentV "Indent Variations" 7
menuText E PgnOptColumn "Column Style (one move per line)" 1
menuText E PgnOptSpace "Space after Move Numbers" 1
menuText E PgnOptStripMarks "Strip out Colored Square/Arrow Codes" 1
menuText E PgnOptBoldMainLine "Use Bold Text for Main Line Moves" 4
menuText E PgnColor "Colors" 0
menuText E PgnColorHeader "Header..." 0
menuText E PgnColorAnno "Annotations..." 0
menuText E PgnColorComments "Comments..." 0
menuText E PgnColorVars "Variations..." 0
menuText E PgnColorBackground "Background..." 0
menuText E PgnColorMain "Main line..." 0
menuText E PgnColorCurrent "Current move background..." 1
menuText E PgnHelp "Help" 0
menuText E PgnHelpPgn "PGN Help" 0
menuText E PgnHelpIndex "Index" 0
translate E PgnWindowTitle {Notation - game %u}

# Crosstable window menus:
menuText E CrosstabFile "File" 0
menuText E CrosstabFileText "Print to Text File..." 9
menuText E CrosstabFileHtml "Print to HTML File..." 9
menuText E CrosstabFileLaTeX "Print to LaTeX File..." 9
menuText E CrosstabFileClose "Close Crosstable Window" 0
menuText E CrosstabEdit "Edit" 0
menuText E CrosstabEditEvent "Event" 0
menuText E CrosstabEditSite "Site" 0
menuText E CrosstabEditDate "Date" 0
menuText E CrosstabOpt "Display" 0
menuText E CrosstabOptAll "All-play-all" 0
menuText E CrosstabOptSwiss "Swiss" 0
menuText E CrosstabOptKnockout "Knockout" 0
menuText E CrosstabOptAuto "Auto" 1
menuText E CrosstabOptAges "Ages in Years" 8
menuText E CrosstabOptNats "Nationalities" 0
menuText E CrosstabOptRatings "Ratings" 0
menuText E CrosstabOptTitles "Titles" 0
menuText E CrosstabOptBreaks "Tie-Break Scores" 4
menuText E CrosstabOptDeleted "Include Deleted Games" 8
menuText E CrosstabOptColors "Colors (Swiss table only)" 0
menuText E CrosstabOptColumnNumbers "Numbered Columns (All-play-all table only)" 2
menuText E CrosstabOptGroup "Group Scores" 0
menuText E CrosstabSort "Sort" 0
menuText E CrosstabSortName "Name" 0
menuText E CrosstabSortRating "Rating" 0
menuText E CrosstabSortScore "Score" 0
menuText E CrosstabColor "Color" 0
menuText E CrosstabColorPlain "Plain Text" 0
menuText E CrosstabColorHyper "Hypertext" 0
menuText E CrosstabHelp "Help" 0
menuText E CrosstabHelpCross "Crosstable Help" 0
menuText E CrosstabHelpIndex "Help Index" 0
translate E SetFilter {Set Filter}
translate E AddToFilter {Add to Filter}
translate E Swiss {Swiss}
translate E Category {Category}

# Opening report window menus:
menuText E OprepFile "File" 0
menuText E OprepFileText "Print to Text File..." 9
menuText E OprepFileHtml "Print to HTML File..." 9
menuText E OprepFileLaTeX "Print to LaTeX File..." 9
menuText E OprepFileOptions "Options..." 0
menuText E OprepFileClose "Close Report Window" 0
menuText E OprepFavorites "Favorites" 1
menuText E OprepFavoritesAdd "Add Report..." 0
menuText E OprepFavoritesEdit "Edit Report Favorites..." 0
menuText E OprepFavoritesGenerate "Generate Reports..." 0
menuText E OprepHelp "Help" 0
menuText E OprepHelpReport "Opening Report Help" 0
menuText E OprepHelpIndex "Help Index" 0

# Repertoire editor:
menuText E RepFile "File" 0
menuText E RepFileNew "New" 0
menuText E RepFileOpen "Open..." 0
menuText E RepFileSave "Save..." 0
menuText E RepFileSaveAs "Save As..." 5
menuText E RepFileClose "Close Window" 0
menuText E RepEdit "Edit" 0
menuText E RepEditGroup "Add Group" 4
menuText E RepEditInclude "Add Include Line" 4
menuText E RepEditExclude "Add Exclude Line" 4
menuText E RepView "View" 0
menuText E RepViewExpand "Expand All Groups" 0
menuText E RepViewCollapse "Collapse All Groups" 0
menuText E RepSearch "Search" 0
menuText E RepSearchAll "All of Repertoire..." 0
menuText E RepSearchDisplayed "Displayed Lines Only..." 0
menuText E RepHelp "Help" 0
menuText E RepHelpRep "Repertoire Help" 0
menuText E RepHelpIndex "Help Index" 0
translate E RepSearch "Repertoire Search"
translate E RepIncludedLines "included lines"
translate E RepExcludedLines "excluded lines"
translate E RepCloseDialog {This repertoire has unsaved changes.

Do you really want to continue and discard the changes you have made?
}

# Header search:
translate E HeaderSearch {Header Search}
translate E EndSideToMove {Side to move at end of game}
translate E GamesWithNoECO {Games with no ECO?}
translate E GameLength {Game length}
translate E FindGamesWith {Find games with flags}
translate E StdStart {Non-standard start}
translate E Promotions {Promotions}
translate E Comments {Comments}
translate E Variations {Variations}
translate E Annotations {Annotations}
translate E DeleteFlag {Delete flag}
translate E WhiteOpFlag {White opening}
translate E BlackOpFlag {Black opening}
translate E MiddlegameFlag {Middlegame}
translate E EndgameFlag {Endgame}
translate E NoveltyFlag {Novelty}
translate E PawnFlag {Pawn structure}
translate E TacticsFlag {Tactics}
translate E QsideFlag {Queenside play}
translate E KsideFlag {Kingside play}
translate E BrilliancyFlag {Brilliancy}
translate E BlunderFlag {Blunder}
translate E UserFlag {User}
translate E PgnContains {PGN contains text}
translate E Annotator {Annotator}
translate E Cmnts {Annotated games only}

# Game list window:
translate E GlistNumber {Number}
translate E GlistWhite {White}
translate E GlistBlack {Black}
translate E GlistWElo {W-Elo}
translate E GlistBElo {B-Elo}
translate E GlistEvent {Event}
translate E GlistSite {Site}
translate E GlistRound {Round}
translate E GlistDate {Date}
translate E GlistYear {Year}
translate E GlistEDate {EventDate}
translate E GlistResult {Result}
translate E GlistLength {Length}
translate E GlistCountry {Country}
translate E GlistECO {ECO}
translate E GlistOpening {Opening}
translate E GlistEndMaterial {End-Material}
translate E GlistDeleted {Deleted}
translate E GlistFlags {Flags}
translate E GlistVars {Variations}
translate E GlistComments {Comments}
translate E GlistAnnos {Annotations}
translate E GlistStart {Start}
translate E GlistGameNumber {Game number}
translate E GlistAverageElo {Average Elo}
translate E GlistRating {Rating}
translate E GlistFindText {Find text}
translate E GlistMoveField {Move}
translate E GlistEditField {Configure}
translate E GlistAddField {Add}
translate E GlistDeleteField {Remove}
translate E GlistWidth {Width}
translate E GlistAlign {Align}
translate E GlistAlignL {Align: left}
translate E GlistAlignR {Align: right}
translate E GlistAlignC {Align: center}
translate E GlistColor {Color}
translate E GlistSep {Separator}
translate E GlistCurrentSep {-- Current --}
translate E GlistNewSort {New}
translate E GlistAddToSort {Add}


# base sorting
translate E GsortSort {Sort...}
translate E GsortDate {Date}
translate E GsortYear {Year}
translate E GsortEvent {Event}
translate E GsortSite {Site}
translate E GsortRound {Round}
translate E GsortWhiteName {White Name}
translate E GsortBlackName {Black Name}
translate E GsortECO {ECO}
translate E GsortResult {Result}
translate E GsortMoveCount {Move Count}
translate E GsortAverageElo {Average Elo}
translate E GsortCountry {Country}
translate E GsortDeleted {Deleted}
translate E GsortEventDate {Event Date}
translate E GsortWhiteElo {White Elo}
translate E GsortBlackElo {Black Elo}
translate E GsortComments {Comments}
translate E GsortVariations {Variations}
translate E GsortNAGs {NAGs}
translate E GsortAscending {Ascending}
translate E GsortDescending {Descending}
translate E GsortAdd {Add}
translate E GsortStore {Store}
translate E GsortLoad {Load}

# menu shown with right mouse button down on game list. 
translate E GlistRemoveThisGameFromFilter  {Remove this game from Filter}
translate E GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
translate E GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
translate E GlistDeleteGame {(Un)Delete this game} 
translate E GlistDeleteAllGames {Delete all games in filter} 
translate E GlistUndeleteAllGames {Undelete all games in filter}  
translate E GlistMergeGameInBase {Merge Game in other database}

# Maintenance window:
translate E DatabaseName {Database Name:}
translate E TypeIcon {Type Icon:}
translate E NumOfGames {Games:}
translate E NumDeletedGames {Deleted games:}
translate E NumFilterGames {Games in filter:}
translate E YearRange {Year range:}
translate E RatingRange {Rating range:}
translate E Description {Description}
translate E Flag {Flag}
translate E CustomFlags {Custom flags}
translate E DeleteCurrent {Delete current game}
translate E DeleteFilter {Delete filter games}
translate E DeleteAll {Delete all games}
translate E UndeleteCurrent {Undelete current game}
translate E UndeleteFilter {Undelete filter games}
translate E UndeleteAll {Undelete all games}
translate E DeleteTwins {Delete twin games}
translate E MarkCurrent {Mark current game}
translate E MarkFilter {Mark filter games}
translate E MarkAll {Mark all games}
translate E UnmarkCurrent {Unmark current game}
translate E UnmarkFilter {Unmark filter games}
translate E UnmarkAll {Unmark all games}
translate E Spellchecking {Spell-checking}
translate E Players {Players}
translate E Events {Events}
translate E Sites {Sites}
translate E Rounds {Rounds}
translate E DatabaseOps {Database operations}
translate E ReclassifyGames {ECO-classify games}
translate E CompactDatabase {Compact database}
translate E SortDatabase {Sort database}
translate E AddEloRatings {Add Elo ratings}
translate E AutoloadGame {Autoload game number}
translate E StripTags {Strip PGN tags}
translate E StripTag {Strip tag}
translate E Cleaner {Cleaner}
translate E CleanerHelp {
The Scid Cleaner will perform all the maintenance actions you select from the list below, on the current database.

Current settings in the ECO classification and twin deletion dialogs will apply if you select those functions.
}
translate E CleanerConfirm {
Once Cleaner maintenance is started, it cannot be interrupted!

This may take a long time on a large database, depending on the functions you have selected and their current settings.

Are you sure you want to commence the maintenance functions you selected?
}
# Twinchecker
translate E TwinCheckUndelete {to flip; "u" undeletes both)}
translate E TwinCheckprevPair {Previous pair}
translate E TwinChecknextPair {Next pair}
translate E TwinChecker {Scid: Twin game checker}
translate E TwinCheckTournament {Games in tournament:}
translate E TwinCheckNoTwin {No twin  }
translate E TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
translate E TwinCheckTag {Share tags...}
translate E TwinCheckFound1 {Scid found $result twin games}
translate E TwinCheckFound2 { and set their delete flags}
translate E TwinCheckNoDelete {There are no games in this database to delete.}
translate E TwinCriteria1 { Your settings for finding twin games are potentially likely to\ncause non-twin games with similar moves to be marked as twins.}
translate E TwinCriteria2 {It is recommended that if you select "No" for "same moves", you should select "Yes" for the colors, event, site, round, year and month settings.\nDo you want to continue and delete twins anyway? }
translate E TwinCriteria3 {It is recommended that you specify "Yes" for at least two of the "same site", "same round" and "same year" settings.\nDo you want to continue and delete twins anyway?}
translate E TwinCriteriaConfirm {Scid: Confirm twin settings}
translate E TwinChangeTag "Change the following game tags:\n\n"
translate E AllocRatingDescription "This command will use the current spellcheck file to add Elo ratings to games in this database. Wherever a player has no current rating but his/her rating at the time of the game is listed in the spellcheck file, that rating will be added."
translate E RatingOverride "Overwrite existing non-zero ratings?"
translate E AddRatings "Add ratings to:"
translate E AddedRatings {Scid added $r Elo ratings in $g games.}

#Bookmark editor
translate E NewSubmenu "New submenu"

# Comment editor:
translate E AnnotationSymbols  {Annotation Symbols:}
translate E Comment {Comment:}
translate E InsertMark {Insert mark}
translate E InsertMarkHelp {
Insert/remove mark: Select color, type, square.
Insert/remove arrow: Right-click two squares.
}

# Nag buttons in comment editor:
translate E GoodMove {Good move}
translate E PoorMove {Poor move}
translate E ExcellentMove {Excellent move}
translate E Blunder {Blunder}
translate E InterestingMove {Interesting move}
translate E DubiousMove {Dubious move}
translate E WhiteDecisiveAdvantage {White has a decisive advantage}
translate E BlackDecisiveAdvantage {Black has a decisive advantage}
translate E WhiteClearAdvantage {White has a clear advantage}
translate E BlackClearAdvantage {Black has a clear advantage}
translate E WhiteSlightAdvantage {White has a slight advantage}
translate E BlackSlightAdvantage {Black has a slight advantage}
translate E Equality {Equality}
translate E Unclear {Unclear}
translate E Diagram {Diagram}

# Board search:
translate E BoardSearch {Board Search}
translate E FilterOperation {Operation on current filter:}
translate E FilterAnd {AND (Restrict filter)}
translate E FilterOr {OR (Add to filter)}
translate E FilterIgnore {IGNORE (Reset filter)}
translate E SearchType {Search type:}
translate E SearchBoardExact {Exact position (all pieces on same squares)}
translate E SearchBoardPawns {Pawns (same material, all pawns on same squares)}
translate E SearchBoardFiles {Files (same material, all pawns on same files)}
translate E SearchBoardAny {Any (same material, pawns and pieces anywhere)}
translate E SearchInRefDatabase { Search in reference database }
translate E LookInVars {Look in variations}

# Material search:
translate E MaterialSearch {Material Search}
translate E Material {Material}
translate E Patterns {Patterns}
translate E Zero {Zero}
translate E Any {Any}
translate E CurrentBoard {Current Board}
translate E CommonEndings {Common Endings}
translate E CommonPatterns {Common Patterns}
translate E MaterialDiff {Material difference}
translate E squares {squares}
translate E SameColor {Same color}
translate E OppColor {Opposite color}
translate E Either {Either}
translate E MoveNumberRange {Move number range}
translate E MatchForAtLeast {Match for at least}
translate E HalfMoves {half-moves}

# Common endings in material search:
translate E EndingPawns {Pawn endings}
translate E EndingRookVsPawns {Rook vs. Pawn(s)}
translate E EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook}
translate E EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook}
translate E EndingRooks {Rook vs. Rook endings}
translate E EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn}
translate E EndingRooksDouble {Double Rook endings}
translate E EndingBishops {Bishop vs. Bishop endings}
translate E EndingBishopVsKnight {Bishop vs. Knight endings}
translate E EndingKnights {Knight vs. Knight endings}
translate E EndingQueens {Queen vs. Queen endings}
translate E EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen}
translate E BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame}

# Common patterns in material search:
translate E PatternWhiteIQP {White IQP}
translate E PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6}
translate E PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6}
translate E PatternBlackIQP {Black IQP}
translate E PatternWhiteBlackIQP {White IQP vs. Black IQP}
translate E PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple}
translate E PatternHangingC5D5 {Black Hanging Pawns on c5 and d5}
translate E PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)}
translate E PatternRookSacC3 {Rook Sacrifice on c3}
translate E PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)}
translate E PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)}
translate E PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)}
translate E PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)}
translate E PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)}

# Game saving:
translate E Today {Today}
translate E ClassifyGame {Classify game}

# Setup position:
translate E EmptyBoard {Empty board}
translate E InitialBoard {Initial board}
translate E SideToMove {Side to move}
translate E MoveNumber {Move number}
translate E Castling {Castling}
translate E EnPassantFile {En Passant file}
translate E ClearFen {Clear FEN}
translate E PasteFen {Paste FEN}

translate E SaveAndContinue {Save and continue}
translate E DiscardChangesAndContinue {Discard changes\nand continue}
translate E GoBack {Go back}

# Replace move dialog:
translate E ReplaceMove {Replace move}
translate E AddNewVar {Add new variation}
translate E NewMainLine {New Main Line}
translate E ReplaceMoveMessage {A move already exists here.

You can replace it, discarding all moves after it, or add your move as a new variation.

(You can avoid seeing this message in future by turning off the "Ask before replacing moves" option in the Options:Moves menu.)}

# Make database read-only dialog:
translate E ReadOnlyDialog {If you make this database read-only, no changes will be permitted.
No games can be saved or replaced, and no delete flags can be altered.
Any sorting or ECO-classification results will be temporary.

You can easily make the database writable again, by closing and reopening it.

Do you really want to make this database read-only?}

# Clear game dialog:
translate E ClearGameDialog {This game has been altered.

Do you really want to continue and discard the changes made to it?
}

# Exit dialog:
translate E ExitDialog {Do you really want to exit Scid?}
translate E ExitUnsaved {The following databases have unsaved game changes. If you exit now, these changes will be lost.}

# Import window:
translate E PasteCurrentGame {Paste current game}
translate E ImportHelp1 {Enter or paste a PGN-format game in the frame above.}
translate E ImportHelp2 {Any errors importing the game will be displayed here.}
translate E OverwriteExistingMoves {Overwrite existing moves ?}

# ECO Browser:
translate E ECOAllSections {all ECO sections}
translate E ECOSection {ECO section}
translate E ECOSummary {Summary for}
translate E ECOFrequency {Frequency of subcodes for}

# Opening Report:
translate E OprepTitle {Opening Report}
translate E OprepReport {Report}
translate E OprepGenerated {Generated by}
translate E OprepStatsHist {Statistics and History}
translate E OprepStats {Statistics}
translate E OprepStatAll {All report games}
translate E OprepStatBoth {Both rated}
translate E OprepStatSince {Since}
translate E OprepOldest {Oldest games}
translate E OprepNewest {Newest games}
translate E OprepPopular {Current popularity}
translate E OprepFreqAll {Frequency in all years:   }
translate E OprepFreq1   {In the  1 year  to today: }
translate E OprepFreq5   {In the  5 years to today: }
translate E OprepFreq10  {In the 10 years to today: }
translate E OprepEvery {once every %u games}
translate E OprepUp {up %u%s from all years}
translate E OprepDown {down %u%s from all years}
translate E OprepSame {no change from all years}
translate E OprepMostFrequent {Most frequent players}
translate E OprepMostFrequentOpponents {Most frequent opponents}
translate E OprepRatingsPerf {Ratings and Performance}
translate E OprepAvgPerf {Average ratings and performance}
translate E OprepWRating {White rating}
translate E OprepBRating {Black rating}
translate E OprepWPerf {White performance}
translate E OprepBPerf {Black performance}
translate E OprepHighRating {Games with highest average rating}
translate E OprepTrends {Result Trends}
translate E OprepResults {Result lengths and frequencies}
translate E OprepLength {Game length}
translate E OprepFrequency {Frequency}
translate E OprepWWins {White wins: }
translate E OprepBWins {Black wins: }
translate E OprepDraws {Draws:      }
translate E OprepWholeDB {whole database}
translate E OprepShortest {Shortest wins}
translate E OprepMovesThemes {Moves and Themes}
translate E OprepMoveOrders {Move orders reaching the report position}
translate E OprepMoveOrdersOne \
  {There was only one move order reaching this position:}
translate E OprepMoveOrdersAll \
  {There were %u move orders reaching this position:}
translate E OprepMoveOrdersMany \
  {There were %u move orders reaching this position. The top %u are:}
translate E OprepMovesFrom {Moves from the report position}
translate E OprepMostFrequentEcoCodes {Most frequent ECO codes}
translate E OprepThemes {Positional Themes}
translate E OprepThemeDescription {Frequency of themes in the first %u moves of each game}
translate E OprepThemeSameCastling {Same-side castling}
translate E OprepThemeOppCastling {Opposite castling}
translate E OprepThemeNoCastling {Both Kings uncastled}
translate E OprepThemeKPawnStorm {Kingside pawn storm}
translate E OprepThemeQueenswap {Queens exchanged}
translate E OprepThemeWIQP {White Isolated Queen Pawn}
translate E OprepThemeBIQP {Black Isolated Queen Pawn}
translate E OprepThemeWP567 {White Pawn on 5/6/7th rank}
translate E OprepThemeBP234 {Black Pawn on 2/3/4th rank}
translate E OprepThemeOpenCDE {Open c/d/e file}
translate E OprepTheme1BishopPair {Only one side has Bishop pair}
translate E OprepEndgames {Endgames}
translate E OprepReportGames {Report games}
translate E OprepAllGames    {All games}
translate E OprepEndClass {Material at the end of each game}
translate E OprepTheoryTable {Theory Table}
translate E OprepTableComment {Generated from the %u highest-rated games.}
translate E OprepExtraMoves {Extra note moves in theory table}
translate E OprepMaxGames {Maximum games in theory table}
translate E OprepViewHTML {View HTML}
translate E OprepViewLaTeX {View LaTeX}

# Player Report:
translate E PReportTitle {Player Report}
translate E PReportColorWhite {with the White pieces}
translate E PReportColorBlack {with the Black pieces}
translate E PReportMoves {after %s}
translate E PReportOpenings {Openings}
translate E PReportClipbase {Empty clipbase and copy matching games to it}

# Piece Tracker window:
translate E TrackerSelectSingle {Left mouse button selects this piece.}
translate E TrackerSelectPair {Left mouse button selects this piece; right button also selects its sibling.}
translate E TrackerSelectPawn {Left mouse button selects this pawn; right button selects all 8 pawns.}
translate E TrackerStat {Statistic}
translate E TrackerGames {% games with move to square}
translate E TrackerTime {% time on each square}
translate E TrackerMoves {Moves}
translate E TrackerMovesStart {Enter the move number where tracking should begin.}
translate E TrackerMovesStop {Enter the move number where tracking should stop.}

# Game selection dialogs:
translate E SelectAllGames {All games in the database}
translate E SelectFilterGames {Only games in the filter}
translate E SelectTournamentGames {Only games in the current tournament}
translate E SelectOlderGames {Only older games}

# Delete Twins window:
translate E TwinsNote {To be twins, two games must at least have the same two players, and criteria you can set below. When a pair of twins is found, the shorter game is deleted. Hint: it is best to spellcheck the database before deleting twins, since it improves twin detection. }
translate E TwinsCriteria {Criteria: Twin games must have...}
translate E TwinsWhich {Examine which games}
translate E TwinsColors {Same player colors?}
translate E TwinsEvent {Same event?}
translate E TwinsSite {Same site?}
translate E TwinsRound {Same round?}
translate E TwinsYear {Same year?}
translate E TwinsMonth {Same month?}
translate E TwinsDay {Same day?}
translate E TwinsResult {Same result?}
translate E TwinsECO {Same ECO code?}
translate E TwinsMoves {Same moves?}
translate E TwinsPlayers {Comparing player names:}
translate E TwinsPlayersExact {Exact match}
translate E TwinsPlayersPrefix {First 4 letters only}
translate E TwinsWhen {When deleting twin games}
translate E TwinsSkipShort {Ignore all games under 5 moves long?}
translate E TwinsUndelete {Undelete all games first?}
translate E TwinsSetFilter {Set filter to all deleted twin games?}
translate E TwinsComments {Always keep games with comments?}
translate E TwinsVars {Always keep games with variations?}
translate E TwinsDeleteWhich {Delete which game:}
translate E TwinsDeleteShorter {Shorter game}
translate E TwinsDeleteOlder {Smaller game number}
translate E TwinsDeleteNewer {Larger game number}
translate E TwinsDelete {Delete games}

# Name editor window:
translate E NameEditType {Type of name to edit}
translate E NameEditSelect {Games to edit}
translate E NameEditReplace {Replace}
translate E NameEditWith {with}
translate E NameEditMatches {Matches: Press Ctrl+1 to Ctrl+9 to select}

# Check games window:
translate E CheckGames {Check games}
translate E CheckGamesWhich {Check games}
translate E CheckAll {All games}
translate E CheckSelectFilterGames {Only games in filter}

# Classify window:
translate E Classify {Classify}
translate E ClassifyWhich {ECO-Classify which games}
translate E ClassifyAll {All games (overwrite old ECO codes)}
translate E ClassifyYear {All games played in the last year}
translate E ClassifyMonth {All games played in the last month}
translate E ClassifyNew {Only games with no ECO code yet}
translate E ClassifyCodes {ECO Codes to use}
translate E ClassifyBasic {Basic codes only ("B12", ...)}
translate E ClassifyExtended {Scid extensions ("B12j", ...)}

# Compaction:
translate E NameFile {Name file}
translate E GameFile {Game file}
translate E Names {Names}
translate E Unused {Unused}
translate E SizeKb {Size (kb)}
translate E CurrentState {Current State}
translate E AfterCompaction {After compaction}
translate E CompactNames {Compact name file}
translate E CompactGames {Compact game file}
translate E NoUnusedNames "There are no unused names, so the name file is already fully compacted."
translate E NoUnusedGames "The game file is already fully compacted."
translate E NameFileCompacted {The name file for the database "[file tail [sc_base filename]]" was compacted.}
translate E GameFileCompacted {The game file for the database "[file tail [sc_base filename]]" was compacted.}

# Sorting:
translate E SortCriteria {Criteria}
translate E AddCriteria {Add criteria}
translate E CommonSorts {Common sorts}
translate E Sort {Sort}

# Exporting:
translate E AddToExistingFile {Add games to an existing file?}
translate E ExportComments {Export comments?}
translate E ExportVariations {Export variations?}
translate E IndentComments {Indent comments?}
translate E IndentVariations {Indent variations?}
translate E ExportColumnStyle {Column style (one move per line)?}
translate E ExportSymbolStyle {Symbolic annotation style:}
translate E ExportStripMarks {Strip square/arrow mark codes from comments?}

# Goto game/move dialogs:
translate E LoadGameNumber {Enter the game number to load:}
translate E GotoMoveNumber {Goto move number:}

# Copy games dialog:
translate E CopyGames {Copy games}
translate E CopyConfirm {
 Do you really want to copy
 the [::utils::thousands $nGamesToCopy] filtered games
 in the database "$fromName"
 to the database "$targetName"?
}
translate E CopyErr {Cannot copy games}
translate E CopyErrSource {the source database}
translate E CopyErrTarget {the target database}
translate E CopyErrNoGames {has no games in its filter}
translate E CopyErrReadOnly {is read-only}
translate E CopyErrNotOpen {is not open}

# Colors:
translate E LightSquares {Light squares}
translate E DarkSquares {Dark squares}
translate E SelectedSquares {Selected squares}
translate E SuggestedSquares {Suggested move squares}
translate E WhitePieces {White pieces}
translate E BlackPieces {Black pieces}
translate E WhiteBorder {White border}
translate E BlackBorder {Black border}

# Novelty window:
translate E FindNovelty {Find Novelty}
translate E Novelty {Novelty}
translate E NoveltyInterrupt {Novelty search interrupted}
translate E NoveltyNone {No novelty was found for this game}
translate E NoveltyHelp {
Scid will find the first move of the current game that reaches a position not found in the selected database or in the ECO openings book.
}

# Sounds configuration:
translate E SoundsFolder {Sound Files Folder}
translate E SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc}
translate E SoundsAnnounceOptions {Move Announcement Options}
translate E SoundsAnnounceNew {Announce new moves as they are made}
translate E SoundsAnnounceForward {Announce moves when moving forward one move}
translate E SoundsAnnounceBack {Announce when retracting or moving back one move}

# Upgrading databases:
translate E Upgrading {Upgrading}
translate E ConfirmOpenNew {
This is an old-format (Scid 3) database that cannot be opened in Scid 4, but a new-format (Scid 4) version has already been created.

Do you want to open the new-format version of the database?
}
translate E ConfirmUpgrade {
This is an old-format (Scid 3) database. A new-format version of the database must be created before it can be used in Scid 4.

Upgrading will create a new version of the database and after that remove the original files.

This may take a while, but it only needs to be done one time. You can cancel if it takes too long.

Do you want to upgrade this database now?
}

# Recent files options:
translate E RecentFilesMenu {Number of recent files in File menu}
translate E RecentFilesExtra {Number of recent files in extra submenu}

# My Player Names options:
translate E MyPlayerNamesDescription {
Enter a list of preferred player names below, one name per line. Wildcards (e.g. "?" for any single character, "*" for any sequence of characters) are permitted.

Every time a game with a player in the list is loaded, the main window chessboard will be rotated if necessary to show the game from that players perspective.
}

#Coach
translate E showblunderexists {show blunder exists}
translate E showblundervalue {show blunder value}
translate E showscore {show score}
translate E coachgame {coach game}
translate E configurecoachgame {Configure tactical game}
translate E configuregame {Game configuration}
translate E Phalanxengine {Phalanx engine}
translate E Coachengine {Coach engine}
translate E difficulty {difficulty}
translate E hard {hard}
translate E easy {easy}
translate E Playwith {Play with}
translate E white {white}
translate E black {black}
translate E both {both}
translate E Play {Play}
translate E Noblunder {No blunder}
translate E blunder {blunder}
translate E Noinfo {-- No info --}
translate E PhalanxOrTogaMissing {Phalanx or Toga not found}
translate E moveblunderthreshold {move is a blunder if loss is greater than}
translate E limitanalysis {limit engine analysis time}
translate E seconds {seconds}
translate E Abort {Abort}
translate E Resume {Resume}
translate E OutOfOpening {Out of opening}
translate E NotFollowedLine {You did not follow the line}
translate E DoYouWantContinue {Do you want yo continue ?}
translate E CoachIsWatching {Coach is watching}
translate E Ponder {Permanent thinking}
translate E LimitELO {Limit ELO strength}
translate E DubiousMovePlayedTakeBack {Dubious move played, do you want to take back ?}
translate E WeakMovePlayedTakeBack {Weak move played, do you want to take back ?}
translate E BadMovePlayedTakeBack {Bad move played, do you want to take back ?}
translate E Iresign {I resign}
translate E yourmoveisnotgood {your move is not good}
translate E EndOfVar {End of variation}
translate E Openingtrainer {Opening trainer}
translate E DisplayCM {Display candidate moves}
translate E DisplayCMValue {Display candidate moves value}
translate E DisplayOpeningStats {Show statistics}
translate E ShowReport {Show report}
translate E NumberOfGoodMovesPlayed {good moves played}
translate E NumberOfDubiousMovesPlayed {dubious moves played}
translate E NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
translate E NumberOfTimesPositionEncountered {times position encountered}
translate E PlayerBestMove  {Allow only best moves}
translate E OpponentBestMove {Opponent plays best moves}
translate E OnlyFlaggedLines {Only flagged lines}
translate E resetStats {Reset statistics}
translate E Repertoiretrainingconfiguration {Repertoire training configuration}
translate E Loadingrepertoire {Loading repertoire}
translate E Movesloaded {Moves loaded}
translate E Repertoirenotfound {Repertoire not found}
translate E Openfirstrepertoirewithtype {Open first a repertoire database with icon/type set to the right side}
translate E Movenotinrepertoire {Move not in repertoire}
translate E PositionsInRepertoire {Positions in repertoire}
translate E PositionsNotPlayed {Positions not played}
translate E PositionsPlayed {Positions played}
translate E Success {Success}
translate E DubiousMoves {Dubious moves}
translate E OutOfRepertoire {OutOfRepertoire}
translate E ConfigureTactics {Configure tactics}
translate E ResetScores {Reset scores}
translate E LoadingBase {Loading base}
translate E Tactics {Tactics}
translate E ShowSolution {Show solution}
translate E NextExercise {Next exercise}
translate E PrevExercise {Previous exercise}
translate E StopTraining {Stop training}
translate E Next {Next}
translate E ResettingScore {Resetting score}
translate E LoadingGame {Loading game}
translate E MateFound {Mate found}
translate E BestSolutionNotFound {Best solution NOT found !}
translate E MateNotFound {Mate not found}
translate E ShorterMateExists {Shorter mate exists}
translate E ScorePlayed {Score played}
translate E Expected {expected}
translate E ChooseTrainingBase {Choose training base}
translate E Thinking {Thinking}
translate E AnalyzeDone {Analyze done}
translate E WinWonGame {Win won game}
translate E Lines {Lines}
translate E ConfigureUCIengine {Configure UCI engine}
translate E SpecificOpening {Specific opening}
translate E StartNewGame {Start new game}
translate E FixedLevel {Fixed level}
translate E Opening {Opening}
translate E RandomLevel {Random level}
translate E StartFromCurrentPosition {Start from current position}
translate E FixedDepth {Fixed depth}
translate E Nodes {Nodes}
translate E Depth {Depth}
translate E Time {Time} 
translate E SecondsPerMove {Seconds per move}
translate E Engine {Engine}
translate E TimeMode {Time mode}
translate E TimeBonus {Time + bonus}
translate E TimeMin {min}
translate E TimeSec {sec}
translate E AllExercisesDone {All exercises done}
translate E MoveOutOfBook {Move out of book}
translate E LastBookMove {Last book move}
translate E AnnotateSeveralGames {Annotate several games\nfrom current to :}
translate E FindOpeningErrors {Find opening errors}
translate E MarkTacticalExercises {Mark tactical exercises}
translate E UseBook {Use book}
translate E MultiPV {Multiple variations}
translate E Hash {Hash memory}
translate E OwnBook {Use engine book}
translate E BookFile {Opening book}
translate E AnnotateVariations {Annotate variations}
translate E ShortAnnotations {Short annotations}
translate E addAnnotatorTag {Add annotator tag}
translate E AddScoreToShortAnnotations {Add score to annotations}
translate E Export {Export}
translate E BookPartiallyLoaded {Book partially loaded}
translate E Calvar {Calculation of variations}
translate E ConfigureCalvar {Configuration}
# Opening names used in tacgame.tcl
translate E Reti {Reti}
translate E English {English}
translate E d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
translate E Trompowsky {Trompowsky}
translate E Budapest {Budapest}
translate E OldIndian {Old Indian}
translate E BenkoGambit {Benko Gambit}
translate E ModernBenoni {Modern Benoni}
translate E DutchDefence {Dutch Defence}
translate E Scandinavian {Scandinavian}
translate E AlekhineDefence {Alekhine Defence}
translate E Pirc {Pirc}
translate E CaroKann {Caro-Kann}
translate E CaroKannAdvance {Caro-Kann Advance}
translate E Sicilian {Sicilian}
translate E SicilianAlapin {Sicilian Alapin}
translate E SicilianClosed {Sicilian Closed}
translate E SicilianRauzer {Sicilian Rauzer}
translate E SicilianDragon {Sicilian Dragon}
translate E SicilianScheveningen {Sicilian Scheveningen}
translate E SicilianNajdorf {Sicilian Najdorf}
translate E OpenGame {Open Game}
translate E Vienna {Vienna}
translate E KingsGambit {King's Gambit}
translate E RussianGame {Russian Game}
translate E ItalianTwoKnights {Italian/Two Knights}
translate E Spanish {Spanish}
translate E SpanishExchange {Spanish Exchange}
translate E SpanishOpen {Spanish Open}
translate E SpanishClosed {Spanish Closed}
translate E FrenchDefence {French Defence}
translate E FrenchAdvance {French Advance}
translate E FrenchTarrasch {French Tarrasch}
translate E FrenchWinawer {French Winawer}
translate E FrenchExchange {French Exchange}
translate E QueensPawn {Queen's Pawn}
translate E Slav {Slav}
translate E QGA {QGA}
translate E QGD {QGD}
translate E QGDExchange {QGD Exchange}
translate E SemiSlav {Semi-Slav}
translate E QGDwithBg5 {QGD with Bg5}
translate E QGDOrthodox {QGD Orthodox}
translate E Grunfeld {Grünfeld}
translate E GrunfeldExchange {Grünfeld Exchange}
translate E GrunfeldRussian {Grünfeld Russian}
translate E Catalan {Catalan}
translate E CatalanOpen {Catalan Open}
translate E CatalanClosed {Catalan Closed}
translate E QueensIndian {Queen's Indian}
translate E NimzoIndian {Nimzo-Indian}
translate E NimzoIndianClassical {Nimzo-Indian Classical}
translate E NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
translate E KingsIndian {King's Indian}
translate E KingsIndianSamisch {King's Indian Sämisch}
translate E KingsIndianMainLine {King's Indian Main Line}

# FICS
translate E ConfigureFics {Configure FICS}
translate E FICSGuest {Login as Guest}
translate E FICSServerPort {Server port}
translate E FICSServerAddress {IP Address}
translate E FICSRefresh {Refresh}
translate E FICSTimesealPort {Timeseal port}
translate E FICSSilence {Console filter}
translate E FICSOffers {Offers}
translate E FICSConsole {Console}
translate E FICSGames {Games}
translate E FICSUnobserve {Stop observing game}
translate E FICSProfile {Display your history and profile}
translate E FICSRelayedGames {Relayed games}
translate E FICSFindOpponent {Find opponent}
translate E FICSTakeback {Takeback}
translate E FICSTakeback2 {Takeback 2}
translate E FICSInitTime {Initial time (min)}
translate E FICSIncrement {Increment (sec)}
translate E FICSRatedGame {Rated Game}
translate E FICSAutoColour {automatic}
translate E FICSManualConfirm {confirm manually}
translate E FICSFilterFormula {Filter with formula}
translate E FICSIssueSeek {Issue seek}
translate E FICSChallenge {Challenge}
translate E FICSAccept {accept}
translate E FICSDecline {decline}
translate E FICSColour {Colour}
translate E FICSSend {send}
translate E FICSConnect {Connect}
translate E FICSdefaultuservars {Use default variables}
translate E FICSObserveconfirm {Do you want to observe game}
translate E FICSpremove {Enable premove}

# Game review
translate E GameReview {Game review}
translate E GameReviewTimeExtended {Time extended}
translate E GameReviewMargin {Error margin}
translate E GameReviewAutoContinue {Auto continue when move is correct}
translate E GameReviewReCalculate {Use extended time}
translate E GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
translate E GameReviewAnalyzingThePosition {Analyzing the position}
translate E GameReviewEnterYourMove {Enter your move}
translate E GameReviewCheckingYourMove {Checking your move}
translate E GameReviewYourMoveWasAnalyzed {Your move was analyzed}
translate E GameReviewYouPlayedSameMove {You played the same move as in match}
translate E GameReviewScoreOfYourMove {Score of your move}
translate E GameReviewGameMoveScore {Game move's score}
translate E GameReviewEngineScore {Engine's score}
translate E GameReviewYouPlayedLikeTheEngine {You played as good as engine's}
translate E GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
translate E GameReviewMoveNotGood {This move is not good, score is}
translate E GameReviewMovesPlayedLike {Moves played like}
translate E GameReviewMovesPlayedEngine {Moves played like engine}

# Correspondence Chess Dialogs:
translate E CCDlgConfigureWindowTitle {Configure Correspondence Chess}
translate E CCDlgCGeneraloptions {General Options}
translate E CCDlgDefaultDB {Default Database:}
translate E CCDlgInbox {Inbox (path):}
translate E CCDlgOutbox {Outbox (path):}
translate E CCDlgXfcc {Xfcc Configuration:}
translate E CCDlgExternalProtocol {External Protocol Handler (e.g. Xfcc)}
translate E CCDlgFetchTool {Fetch Tool:}
translate E CCDlgSendTool {Send Tool:}
translate E CCDlgEmailCommunication {eMail Communication}
translate E CCDlgMailPrg {Mail program:}
translate E CCDlgBCCAddr {(B)CC Address:}
translate E CCDlgMailerMode {Mode:}
translate E CCDlgThunderbirdEg {e.g. Thunderbird, Mozilla Mail, Icedove...}
translate E CCDlgMailUrlEg {e.g. Evolution}
translate E CCDlgClawsEg {e.g Sylpheed Claws}
translate E CCDlgmailxEg {e.g. mailx, mutt, nail...}
translate E CCDlgAttachementPar {Attachment parameter:}
translate E CCDlgInternalXfcc {Use internal Xfcc support}
translate E CCDlgConfirmXfcc {Confirm moves}
translate E CCDlgSubjectPar {Subject parameter:}
translate E CCDlgDeleteBoxes {Empty In-/Outbox}
translate E CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess?\nThis requires a new sync to show the last state of your games.}
translate E CCDlgConfirmMove {Confirm move}
translate E CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
translate E CCDlgDBGameToLong {Inconsistent Mainline}
translate E CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.

In this case please shorten the mainline to (at max) move
}


translate E CCDlgStartEmail {Start new eMail game}
translate E CCDlgYourName {Your Name:}
translate E CCDlgYourMail {Your eMail Address:}
translate E CCDlgOpponentName {Opponents Name:}
translate E CCDlgOpponentMail {Opponents eMail Address:}
translate E CCDlgGameID {Game ID (unique):}

translate E CCDlgTitNoOutbox {Scid: Correspondence Chess Outbox}
translate E CCDlgTitNoInbox {Scid: Correspondence Chess Inbox}
translate E CCDlgTitNoGames {Scid: No Correspondence Chess Games}
translate E CCErrInboxDir {Correspondence Chess inbox directory:}
translate E CCErrOutboxDir {Correspondence Chess outbox directory:}
translate E CCErrDirNotUsable {does not exist or is not accessible!\nPlease check and correct the settings.}
translate E CCErrNoGames {does not contain any games!\nPlease fetch them first.}

translate E CCDlgTitNoCCDB {Scid: No Correspondence Database}
translate E CCErrNoCCDB {No Database of type 'Correspondence' is opened. Please open one before using correspondence chess functions.}

translate E CCFetchBtn {Fetch games from the server and process the Inbox}
translate E CCPrevBtn {Goto previous game}
translate E CCNextBtn {Goto next game}
translate E CCSendBtn {Send move}
translate E CCEmptyBtn {Empty In- and Outbox}
translate E CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}

translate E CCDlgServerName {Server Name:}
translate E CCDlgLoginName  {Login Name:}
translate E CCDlgPassword   {Password:}
translate E CCDlgURL        {Xfcc-URL:}
translate E CCDlgRatingType {Rating Type:}

translate E CCDlgDuplicateGame {Non-unique game ID}
translate E CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}

translate E CCDlgSortOption {Sorting:}
translate E CCDlgListOnlyOwnMove {Only games I have the move}
translate E CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
translate E CCOrderMyTimeTxt {My Clock}
translate E CCOrderTimePerMoveTxt {Time per move till next time control}
translate E CCOrderStartDate {Start date}
translate E CCOrderOppTimeTxt {Opponents Clock}

translate E CCDlgConfigRelay {Observe games}
translate E CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}

# Connect Hardware dialogs
translate E ExtHWConfigConnection {Configure external hardware}
translate E ExtHWPort {Port}
translate E ExtHWEngineCmd {Engine command}
translate E ExtHWEngineParam {Engine parameter}
translate E ExtHWShowButton {Show button}
translate E ExtHWHardware {Hardware}
translate E ExtHWNovag {Novag Citrine}
translate E ExtHWInputEngine {Input Engine}
translate E ExtHWNoBoard {No board}
translate E NovagReferee {Referee}

# Input Engine dialogs
translate E IEConsole {Input Engine Console}
translate E IESending {Moves sent for}
translate E IESynchronise {Synchronise}
translate E IERotate  {Rotate}
translate E IEUnableToStart {Unable to start Input Engine:}


# Calculation of Variations
translate E DoneWithPosition {Done with position}

translate E Board {Board}
translate E showGameInfo {Show game info}
translate E autoResizeBoard {Automatic resize of board}
translate E DockTop {Move to top}
translate E DockBottom {Move to bottom}
translate E DockLeft {Move to left}
translate E DockRight {Move to right}
translate E Undock {Undock}

# Switcher window
translate E ChangeIcon {Change icon...}

}
# end of english.tcl
# catalan.tcl:
# Catalan translation for Scid
# Contributed by Natalia Pares Vives (natalia%paresvives.net)
# Date: 2009-04-07
# Version: 1


addLanguage K Catal 2 

proc setLanguage_K {} {

# File menu:
menuText K File "Arxiu" 0
menuText K FileNew "Nova..." 0 {Crea una nova base de dades Scid buida}
menuText K FileOpen "Obrir..." 1 {Obre una base de dades Scid existent}
menuText K FileClose "Tancar" 0 {Tanca la base de dades Scid activa}
menuText K FileFinder "Visor..." 0 {Obre la finestra del visor d'arxius}
menuText K FileBookmarks "Partides preferides" 0 {Seleccionar partides preferides (Ctrl+B)}
menuText K FileBookmarksAdd "Afegir" 0 \
  {Marca la partida i posici actual de la base de dades}
menuText K FileBookmarksFile "Arxivar" 8 \
  {Arxiva un marcador de la partida i posici actuals}
menuText K FileBookmarksEdit "Editar partides preferides..." 0 \
  {Edita els mens de les partides preferides}
menuText K FileBookmarksList "Mostrar partides preferides" 0 \
  {Mostra les carpetes preferides a una sola llista, sense submens}
menuText K FileBookmarksSub "Mostrar partides marcades amb submens" 0 \
  {Mostrar les carpetes preferides com submens, no a una sola llista}
menuText K FileMaint "Manteniment" 0 \
  {Eines de manteniment de bases de dades Scid}
menuText K FileMaintWin "Finestra de manteniment" 0 \
  {Obre/tanca la finestra de manteniment de bases de dades Scid}
menuText K FileMaintCompact "Compactar base de dades..." 0 \
  {Compacta els arxius de la base de dades, treient-hi partides esborrades i noms sense utilitzar}
menuText K FileMaintClass "Classificar partides per ECO..." 24 \
  {Recalcula el codi ECO de totes les partides}
menuText K FileMaintSort "Ordenar base de dades..." 0 \
  {Ordena totes les partides de la base de dades}
menuText K FileMaintDelete "Esborrar partides duplicades..." 0 \
  {Cerca partides duplicades i les marca per ser esborrades}
menuText K FileMaintTwin "Finestra d'inspecci de duplicades" 11 \
  {Obre/actualiza la finestra d'inspecci de duplicades}
menuText K FileMaintName "Ortografia de noms" 0 {Eines d'ortografia i edici de noms}
menuText K FileMaintNameEditor "Finestra d'edici de noms" 22 \
  {Obre/tanca la finestra d'edici de noms}
menuText K FileMaintNamePlayer "Comprovaci ortogrfica de noms de jugadors..." 39 \
  {Comprovaci ortogrfica de jugadors fent servir un arxiu de comprovaci ortogrfica}
menuText K FileMaintNameEvent "Comprovaci ortogrfica de noms de torneigs..." 39 \
  {Comprovaci ortogrfica de torneigs fent servir l'arxiu de comprovaci ortogrfica}
menuText K FileMaintNameSite "Comprovaci ortogrfica de noms de llocs..." 39 \
  {Comprovaci ortogrfica de llocs fent servir l'arxiu de comprovaci ortogrfica}
menuText K FileMaintNameRound "Comprovaci ortogrfica de rondes..." 28 \
  {Comprovaci ortogrfica de rondes fent servir l'arxiu de comprovaci ortogrfica}
menuText K FileReadOnly "Noms de lectura..." 5 \
  {Tracta la actual base de dades com noms de lectura, prevenint canvis}
menuText K FileSwitch "Canviar de base de dades" 0 \
  {Canvia a una base de dades oberta diferent}
menuText K FileExit "Sortir" 0 {Sortir de Scid}
menuText K FileMaintFixBase "Arreglar base corrupta" 0 {Intenta arreglar una base corrupta}

# Edit menu:
menuText K Edit "Editar" 0
menuText K EditAdd "Afegir variant" 0 \
  {Afegeix una variant amb aquesta jugada a la partida}
menuText K EditDelete "Esborrar variant" 0 {Esborra la variant d'aquesta jugada}
menuText K EditFirst "Convertir a primera variant" 0 \
  {Fa que una variant sigui la primera a la llista}
menuText K EditMain "Variant a lnia principal" 0 \
   {Promou una variant per a que sigui la lnia principal}
menuText K EditTrial "Provar variant" 1 \
  {Inicia/Atura el mode de prova, per a verificar una idea a l'escaquer}
menuText K EditStrip "Eliminar" 2 \
  {Eliminar comentaris o variants d'aquesta partida}
# ====== TODO To be translated ======
menuText K EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText K EditRedo "Redo" 0 {Redo last game change}
menuText K EditStripComments "Comentaris" 0 \
  {Treu tots els comentaris i variants d'aquesta partida}
menuText K EditStripVars "Variants" 0 {Treu totes les variants d'aquesta partida}
menuText K EditStripBegin "Jugades des del comenament" 1 \
  {Treu els moviments des del comenament de la partida}
menuText K EditStripEnd "Jugades fins el final" 0 \
  {Treu els moviments fins el final de la partida}
menuText K EditReset "Posa a zero la base de treball" 0 \
  {Posa a zero la base de treball (clipbase) per deixar-la completament buda}
menuText K EditCopy "Copiar aquesta partida a la base de treball" 1 \
  {Copia aquesta partida a la base de treball (clipbase)}
menuText K EditPaste "Pegar l'ltima partida de la base de treball" 2 \
  {Pega al final de la base actual la partida activa de la base de treball (clipbase)}
menuText K EditPastePGN "Pega el text del Clipboard com una partida PGN..." 10 \
  {Interpreta el text de la base de treball (clipbase) com una partida en notaci PGN i la pega}
menuText K EditSetup "Iniciar posici a l'escaquer..." 26 \
  {Inicia una posici a l'escaquer amb la posici de la partida}
menuText K EditCopyBoard "Copiar posici" 8 \
  {Copia l'escaquer actual en notaci FEN a la selecci de text (clipboard)}
menuText K EditPasteBoard "Pegar escaquer inicial" 6 \
  {Posa l'escaquer inicial des de la selecci de text actual (clipboard)}

# Game menu:
menuText K Game "Partida" 0
menuText K GameNew "Nova partida" 0 \
  {Nova partida, descarta canvis de la partida actual}
menuText K GameFirst "Cargar primera partida" 7 {Carga la primera partida filtrada}
menuText K GamePrev "Cargar partida anterior" 16 {Carga la anterior partida filtrada}
menuText K GameReload "Recargar partida actual" 0 \
  {Torna a carregar aquesta partida, descartant qualsevol canvi introdut}
menuText K GameNext "Carga seguent partida " 7 {Carga la seguent partida filtrada}
menuText K GameLast "Cargar ltima partida" 9 {Carga la ltima partida filtrada}
menuText K GameRandom "Cargar partida aleatria" 16 {Carga aleatriamente una partida filtrada}
menuText K GameNumber "Cargar partida nmero..." 3 \
  {Carga una partida possant el seu nmero}
menuText K GameReplace "Salvar: Reemplaa la partida..." 10 \
  {Salva aquesta partida, reemplaant la versi anterior}
menuText K GameAdd "Salvar: Afegir nova partida..." 9 \
  {Enregistra aquesta partida com una nova partida a la base de dades}
menuText K GameDeepest "Identificar obertura" 1 \
  {Va a la posici ms avanada de la partida d'acord amb el llibre ECO}
menuText K GameGotoMove "Anar a la jugada nmero..." 6 \
  {Anar al nmero de jugada especificat dins la partida actual}
menuText K GameNovelty "Trovar Novetat..." 12 \
  {Cerca la primera jugada d'aquesta partida que no s'ha jugat abans}

# Search Menu:
menuText K Search "Cercar" 0
menuText K SearchReset "Posar a zero el filtre" 0 \
  {Posa a zero el filtre per incloure-hi totes les partides}
menuText K SearchNegate "Invertir filtre" 0 \
  {Inverteix el filtre per incloure noms les partides prviament excloses}
menuText K SearchCurrent "Escaquer actual..." 0 \
  {Cerca per la posici actual de l'escaquer}
menuText K SearchHeader "Encapalament..." 0 \
  {Cerca per la informaci de l'encapalament (jugador, torneig, etc)}
menuText K SearchMaterial "Material/Patr..." 0 \
  {Cerca a l'escaquer per material o patr}
menuText K SearchUsing "Fer servir arxiu de recerca..." 0 \
  {Cerca fent servir un arxiu d'opcions de recerca}

# Windows menu:
menuText K Windows "Finestres" 0
menuText K WindowsComment "Editor de comentaris" 0 \
  {Obre/tanca l'editor de comentaris}
menuText K WindowsGList "Llistat de partides" 0 \
  {Obre/tanca la  finestra de llistat de partides}
menuText K WindowsPGN "Finestra PGN" 8 \
  {Obre/tanca la finestra PGN (notaci de partida)}
menuText K WindowsPList "Cercador de jugadors" 2 {Obre/tanca el cercador de jugadors}
menuText K WindowsTmt "Visor de Torneigs" 9 {Obre/tanca el visor de torneigs}
menuText K WindowsSwitcher "Bescanviador de bases de dades" 0 \
  {Obre/tanca la finestra del bescanviador de bases de dades}
menuText K WindowsMaint "Finestra de manteniment" 11 \
  {Obre/tanca la finestra de manteniment}
menuText K WindowsECO "Cercador ECO" 0 {Obre/tanca la finestra del cercador ECO}
menuText K WindowsRepertoire "Editor del repertori" 10 \
  {Obrir/tancar l'editor del repertori d'obertures}
menuText K WindowsStats "Finestra d'estadstiques" 12 \
  {Obre/tanca la finestra d'estadstiques del filtre}
menuText K WindowsTree "Finestra de l'rbre d'Obertures" 6 {Obre/tanca la finestra de l'rbre d'Obertures (Book)}
menuText K WindowsTB "Finestra de Taules de Finals (TBs)" 8 \
  {Obre/tanca la finestra de TBs}
menuText K WindowsBook "Finestra de Llibres d'Obertures" 0 {Obrir/Tancar la finestra de Llibres d'Obertures (Book)}
menuText K WindowsCorrChess "Finestra d'Escacs Postal" 0 {Obrir/Tancar la Finestra d'Escacs Postal}

# Tools menu:
menuText K Tools "Eines" 0
menuText K ToolsAnalysis "Motor d'anlisi..." 0 \
  {Inicia/Atura un motor d'anlisi d'escacs}
menuText K ToolsAnalysis2 "Motor d'anlisi #2..." 18 \
  {Inicia/Atura el segon motor d'anlisi d'escacs}
menuText K ToolsCross "Quadre" 0 {Mostra el Quadre del torneig per aquesta partida}
menuText K ToolsEmail "Gestor d'Emails" 0 \
  {Obre/tanca la finestra del Gestor d'Emails}
menuText K ToolsFilterGraph "Filtre Grfic Rel." 7 \
  {Obre/tanca la finestra del filtre grfic per valors relatius}
menuText K ToolsAbsFilterGraph "Filtre grfic Abs." 7 {Obrir/Tancar la finestra de filtre grfic per valors absoluts}
menuText K ToolsOpReport "Informe d'obertura" 1 \
  {Crea un informe de l'obertura per la posici actual}
menuText K ToolsOpenBaseAsTree "Obrir base com arbre" 0   {Obrir una base i utilitzar-la a la Finestre Arbre (Tree)}
menuText K ToolsOpenRecentBaseAsTree "Obrir base recent com arbre" 0   {Obre una base recent i la utilitza a la Finestra Arbre (Tree)} 
menuText K ToolsTracker "Rastrejadorr de peces"  14 {Obre la finestra del rastrejador de peces}
menuText K ToolsTraining "Entrenament"  0 {Entrenament (tctica, obertures,...}
menuText K ToolsTacticalGame "Partida Tctica"  0 {Jugar una partida tctica}
menuText K ToolsSeriousGame "Partida seriosa"  0 {Jugar una partida seriosa}
menuText K ToolsTrainOpenings "Obertures"  0 {Entrenament amb un repertori}
# ====== TODO To be translated ======
menuText K ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
menuText K ToolsTrainTactics "Tctica"  0 {Resoldre problemes de tctica}
menuText K ToolsTrainCalvar "Clcul de variants"  0 {Clcul de variants}
menuText K ToolsTrainFindBestMove "Trobar la millor jugada"  0 {Cerca la millor jugada}
menuText K ToolsTrainFics "Jugar a Internet"  0 {Jugar a freechess.org}
# ====== TODO To be translated ======
menuText K ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText K ToolsBookTuning "Ajustar Llibre d'obertures" 0 {Ajustar Llibre (Book)}
menuText K ToolsConnectHardware "Connectar maquinari" 0 {Connectar maquinari extern}
menuText K ToolsConnectHardwareConfigure "Configuraci" 1 {Configuraci}
menuText K ToolsConnectHardwareNovagCitrineConnect "Connectar Novag" 0 {Connectar Novag}
menuText K ToolsConnectHardwareInputEngineConnect "Connectar dispositiu d'entrada" 0 {Connectar dispositiu d'entrada (com el de DGT) a Scid}
menuText K ToolsPInfo "Informaci del Jugador" 16 \
  {Obrir/actualitzar la finestra d'Informaci del Jugador}
menuText K ToolsPlayerReport "Informe del jugador..." 3 \
  {Crea un informe sobre un jugador}
menuText K ToolsRating "Grfic de l'Elo" 0 \
  {Grfic del historial Elo dels jugadors de la partida actual}
menuText K ToolsScore "Grfic de puntuaci" 1 \
  {Mostra la finestra del grfic de puntuaci}
menuText K ToolsExpCurrent "Exportar la partida actual" 0 \
  {Escriu la partida actual a un arxiu de text}
menuText K ToolsExpCurrentPGN "Exportar la partida a un arxiu PGN..." 33 \
  {Escriu la partida actual a un arxiu PGN}
menuText K ToolsExpCurrentHTML "Exportar la partida a un arxiu HTML..." 33 \
  {Escriu la partida actual a un arxiu HTML}
menuText K ToolsExpCurrentHTMLJS "Exportar la partida a un arxiu HTML i JavaScript..." 15 {Escriu la partida actual a un arxiu HTML i JavaScript} 
menuText K ToolsExpCurrentLaTeX "Exportar la partida a un arxiu LaTeX..." 33 \
  {Escriu la partida actual a un arxiu LaTeX}
menuText K ToolsExpFilter "Exportar totes les partides filtrades" 1 \
  {Escriu totes les partides filtrades a un arxiu de text}
menuText K ToolsExpFilterPGN "Exportar filtre a un arxiu PGN..." 29 \
  {Escriu totes les partides filtrades a un arxiu PGN}
menuText K ToolsExpFilterHTML "Exportar filtre a un arxiu HTML..." 29 \
  {Escriu totes les partides filtrades a un arxiu HTML}
menuText K ToolsExpFilterHTMLJS "Exportar filtre a un arxiu HTML i JavaScript..." 17 {Escriu totes les partides filtrades a un arxiu HTML i JavaScript}  
menuText K ToolsExpFilterLaTeX "Exportar filtre a un arxiu LaTeX..." 29 \
  {Escriu totes les partides filtrades a un arxiu LaTeX}
menuText K ToolsImportOne "Importar una partida PGN..." 0 \
  {Importa una partida de un text PGN}
menuText K ToolsImportFile "Importar un arxiu de partides PGN..." 2 \
  {Importa partides de un arxiu PGN}
menuText K ToolsStartEngine1 "Iniciar motor 1" 0  {Iniciar motor 1}
menuText K ToolsStartEngine2 "Iniciar motor 2" 0  {Iniciar Motor 2}
# ====== TODO To be translated ======
menuText K ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
menuText K Play "Jugar" 0
menuText K CorrespondenceChess "Escacs Postal" 0 {Funcions d'Escacs Postal per a eMail i Xfcc}
menuText K CCConfigure "Configurar..." 0 {Configurar eines externes i Parmetres Generals}
# ====== TODO To be translated ======
menuText K CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
menuText K CCOpenDB "Obrir base de dades..." 0 {Obrir la base per defecte d'Escac Postal}
menuText K CCRetrieve "Recuperar partides" 0 {Recuperar partides via programari extern (Xfcc)}
menuText K CCInbox "Processa Bstia D'Entrada" 0 {Processar tots els registres de la bstia d'entrada (Inbox) d'Scid }
menuText K CCSend "Enviar jugada" 0 {Envia la teva jugada via EMail o amb programari extern (Xfcc)}
menuText K CCResign "Abandonar" 0 {Abandonar}
menuText K CCClaimDraw "Reclamar taules" 0 {Enviar un jugada i reclamar taules}
menuText K CCOfferDraw "Oferir taules" 0 {Enviar un jugada i oferir taules}
menuText K CCAcceptDraw "Acceptar taules" 0 {Acceptar un oferiment de taules}
menuText K CCNewMailGame "Nova partida per email..." 0 {Iniciar una nova partida eMail}
menuText K CCMailMove "Enviar jugada via email..." 0 {Envia la jugada via EMail al contrari}
menuText K CCGamePage "Pgina de la partida..." 0 {Obrir la partida al navegador}
# ====== TODO To be translated ======
menuText K CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText K Options "Opcions" 0
menuText K OptionsBoard "Escaquer" 0 {Opcions sobre l'aspecte de l'escaquer}
menuText K OptionsBoardSize "Tamany de l'escaquer" 0 {Canvia el tamany de l'escaquer}
menuText K OptionsBoardPieces "Estil de peces" 10 \
  {Canvia l'estil de les peces de l'escaquer}
menuText K OptionsBoardColors "Colors..." 0 {Canvia els colors de l'escaquer}
menuText K OptionsBoardGraphics "Casselles..." 0 {Escollir textures per les casselles}
translate K OptionsBGW {Escollir textura per les casselles}
translate K OptionsBoardGraphicsText {Escollir arxiu grfic per casselles blanques i negres}
menuText K OptionsBoardNames "Els meus noms..." 0 {Edita els noms en que pot aparixer un jugador}
menuText K OptionsExport "Exportaci" 0 {Canvia les opciones d'exportaci de text}
menuText K OptionsFonts "Fonts" 0 {Canvia les fonts}
menuText K OptionsFontsRegular "Habitual" 0 {Canvia la font habitual}
menuText K OptionsFontsMenu "Men" 0 {Canvia la font del men}
menuText K OptionsFontsSmall "Petita" 0 {Canvia la font petita}
# ====== TODO To be translated ======
menuText K OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText K OptionsFontsFixed "Fixa" 0 {Canvia la amplada de la font a fixa}
menuText K OptionsGInfo "Informaci de la partida" 0 {Informaci de la partida}
menuText K OptionsLanguage "Llenguatge" 0 {Selecciona el llenguatge del programa}
menuText K OptionsMovesTranslatePieces "Tradueix peces" 0 {Tradueix la primera lletra de les peces}
# ====== TODO To be translated ======
menuText K OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText K OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText K OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText K OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText K OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText K OptionsMoves "Jugades" 0 {Opcions d'entrada de jugades}
menuText K OptionsMovesAsk "Preguntar abans de substituir jugades" 0 \
  {Pregunta abans de sobreescriure qualsevol jugada existent}
menuText K OptionsMovesAnimate "Velocitat d'animaci" 1 \
  {Posa el temps d'animaci entre jugades}
menuText K OptionsMovesDelay "Retard de la jugada automtica..." 0 \
  {Posa el temps de retard per la modalitat de autojugada}
menuText K OptionsMovesCoord "Entrada de jugades per coordenades" 0 \
  {Accepta entrada de jugades pel sistema de "coordenades" ("g1f3")}
menuText K OptionsMovesSuggest "Mostrar suggeriments" 20 \
  {Activa/desactiva el suggeriment de jugades}
menuText K OptionsShowVarPopup "Mostrar finestra de variants" 0 {Activar/Desactivar la finestra de variants}
menuText K OptionsMovesSpace "Afegir espai desprs del nmero de jugada" 0 {Afegir espai desprs del nmero de jugada}  
menuText K OptionsMovesKey "Teclat Intelligent" 0 \
{Activa/desactiva la funci d'autocompletat intelligent de jugades amb teclat}
# ====== TODO To be translated ======
menuText K OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText K OptionsNumbers "Format de nmeros" 11 {Selecciona el format de nmeros}
menuText K OptionsStartup "Inici" 3 {Seleccionar les finestres que s'obren al comenar}
menuText K OptionsTheme "Tema" 0 {Canviar l'aspecte del programari}
menuText K OptionsWindows "Finestres" 0 {Opcions de finestra}
menuText K OptionsWindowsIconify "Autominimitzar" 4 \
  {Minimitza totes les finestres quan la finestra principal es minimitzada}
menuText K OptionsWindowsRaise "Posar automticamente en primer pla" 0 \
  {Fa visibles algunes finestres (ex. barres de progrs) quan estiguin cobertes}
menuText K OptionsSounds "Sons..." 2 {Configura el so d'anunci de les jugades}
menuText K OptionsWindowsDock "Bloqueja finestres" 0 {Bloqueja i agrupa finestres}
menuText K OptionsWindowsSaveLayout "Salvar disposici" 0 {Salvar disposici}
menuText K OptionsWindowsRestoreLayout "Restaurar disposici" 0 {Restaurar disposici}
menuText K OptionsWindowsShowGameInfo "Mostrar informaci de la partida" 0 {Mostrar informaci de la partida}
menuText K OptionsWindowsAutoLoadLayout "Auto cargar primera disposici" 0 {Autocargar primera disposici en comenar}
menuText K OptionsToolbar "Barra d'eines de la finestra principal" 9 \
  {Mostra/amaga la barra d'eines de la finestra principal}
menuText K OptionsECO "Cargar arxiu ECO..." 7 \
  {Cargar l'arxiu de clasificaci ECO}
menuText K OptionsSpell "Cargar arxiu de comprovaci ortogrfica..." 2 \
  {Carga l'arxiu de comprovaci ortogrfica Scid}
menuText K OptionsTable "Directori de les TB...(Taules de finals)" 19 \
  {Selecciona el directori de finals; s'utilitzaran totes les TB d'aquest directori}
menuText K OptionsRecent "Arxius recents..." 9 \
  {Canvia el nombre d'arxius recentes que es mostren al men Arxiu}
menuText K OptionsBooksDir "Carpeta de llibres d'obertures..." 0 {Fixa la carpeta d'els llibres d'obertures (Books)}
menuText K OptionsTacticsBasesDir "Carpeta de bases de dades..." 0 {Fixa la carpeta de la base d'entrenament tctic}
menuText K OptionsSave "Salvar opcions" 0 \
  {Salva totes les opcions a l'arxiu $::optionsFile}
menuText K OptionsAutoSave "Autoguardar opcions en sortir" 0 \
  {Guarda automticament totes les opcions quan es surt de Scid}

# Help menu:
menuText K Help "Ajut" 1
menuText K HelpContents "Continguts" 0 {Mostra la pgina de continguts de l'ajut}
menuText K HelpIndex "Index" 0 {Mostra la pgina ndex de l'ajut}
menuText K HelpGuide "Guia rpida" 0 {Mostra la pgina guia rpida de l'ajut}
menuText K HelpHints "Suggeriments" 1 {Mostra la pgina de suggeriments de l'ajut}
menuText K HelpContact "Informaci de contacte" 15 \
  {Mostra la pgina d'informaci de contacte de l'ajut}
menuText K HelpTip "Suggeriment del dia" 0 {Mostra un prctic suggerimentent de Scid}
menuText K HelpStartup "Finestra d'inici" 0 {Mostra la finestra d'inici}
menuText K HelpAbout "Al voltant de Scid" 10 {Informaci al voltant de Scid}

# Game info box popup menu:
menuText K GInfoHideNext "Ocultar segent jugada" 0
menuText K GInfoMaterial "Mostrar valor del material" 0
menuText K GInfoFEN "Mostrar FEN" 8
menuText K GInfoMarks "Mostrar casselles i fletxes de colors" 29
menuText K GInfoWrap "Dividir lnies llargues" 0
menuText K GInfoFullComment "Mostrar comentaris complets" 8
menuText K GInfoPhotos "Mostrar fotografies" 5
menuText K GInfoTBNothing "TBs: res" 5
menuText K GInfoTBResult  "TBs: noms resultat" 10
menuText K GInfoTBAll "TBs: resultat i millor jugada" 23
menuText K GInfoDelete "(No)Esborrar aquesta partida" 4
menuText K GInfoMark "(No)Marcar aquesta partida" 4
menuText K GInfoInformant "Configurar valors d'informaci" 0

# Main window buttons:
helpMsg K .main.fbutton.button.start {Anar al comenament de la partida  (Tecla: Inici)}
helpMsg K .main.fbutton.button.end {Anar al final de la partida  (Tecla: Fi)}
helpMsg K .main.fbutton.button.back {Anar enrera una jugada  (Tecla: Fletxa esquerra)}
helpMsg K .main.fbutton.button.forward {Anar endavant una jugada  (Tecla: Fletxa dreta)}
helpMsg K .main.fbutton.button.intoVar {Moure's a dins d'una variant  (Tecla rpida: v)}
helpMsg K .main.fbutton.button.exitVar {Sortir de la variant actual  (Tecla rpida: z)}
helpMsg K .main.fbutton.button.flip {Girar escaquer  (Tecla rpida: .)}
helpMsg K .main.fbutton.button.coords {Posar/treure les coordenades de l'escaquer  (Tecla rpida: 0)}
helpMsg K .main.fbutton.button.stm {Activa/Desactiva la icona de Torn de Joc}
helpMsg K .main.fbutton.button.autoplay {Autojugada dels moviments  (Tecla: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg K .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg K .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg K .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate K Back {Enrera}
translate K Browse {Mirar}
translate K Cancel {Cancellar}
translate K Continue {Continuar}
translate K Clear {Netejar}
translate K Close {Tancar}
translate K Contents {Continguts}
translate K Defaults {Per defecte}
translate K Delete {Esborrar}
translate K Graph {Grfic}
translate K Help {Ajut}
translate K Import {Importar}
translate K Index {ndex}
translate K LoadGame {Cargar partida}
translate K BrowseGame {Mirar partida}
translate K MergeGame {Incorporar partida}
translate K MergeGames {Barrejar o fusionar partides}
translate K Preview {Vista prvia}
translate K Revert {Retrocedir}
translate K Save {Salvar}
translate K Search {Cercar}
translate K Stop {Aturar}
translate K Store {Enregistrar}
translate K Update {Actualitzar}
translate K ChangeOrient {Canviar l'orientaci de la finestra}
translate K ShowIcons {Mostra Icones} 
translate K None {Cap}
translate K First {Primera}
translate K Current {Actual}
translate K Last {ltima}

# General messages:
translate K game {partida}
translate K games {partides}
translate K move {jugada}
translate K moves {jugades}
translate K all {tod}
translate K Yes {S}
translate K No {No}
translate K Both {Ambdos}
translate K King {Rei}
translate K Queen {Dama}
translate K Rook {Torre}
translate K Bishop {Alfil}
translate K Knight {Cavall}
translate K Pawn {Pe}
translate K White {Blanques}
translate K Black {Negres}
translate K Player {Jugador}
translate K Rating {Elo}
translate K RatingDiff {Diferncia d'Elo (Blanques - Negres)}
translate K AverageRating {Elo promig}
translate K Event {Torneig}
translate K Site {Lloc}
translate K Country {Pais}
translate K IgnoreColors {Ignorar colors}
translate K Date {Data}
translate K EventDate {Data del torneig}
translate K Decade {Dcada}
translate K Year {Any}
translate K Month {Mes}
translate K Months {gener febrer mar abril maig juny juliol agost setembre octubre novembre desembre}
translate K Days {diu dil dim dic dij div dis}
translate K YearToToday {Any fins avui}
translate K Result {Resultat}
translate K Round {Ronda}
translate K Length {Longitut}
translate K ECOCode {Codi ECO}
translate K ECO {ECO}
translate K Deleted {Esborrar}
translate K SearchResults {Cercar resultats}
translate K OpeningTheDatabase {Obrint base de dades}
translate K Database {Base de dades}
translate K Filter {Filtre}
translate K noGames {no hi ha partides}
translate K allGames {totes les partides}
translate K empty {buida}
translate K clipbase {clipbase}
translate K score {puntuaci}
translate K StartPos {Posici inicial}
translate K Total {Total}
translate K readonly {noms de lectura}

# Standard error messages:
translate K ErrNotOpen {La base de dades no est oberta.}
translate K ErrReadOnly {Aquesta base de dades es noms de lectura; no pot ser modificada.}
translate K ErrSearchInterrupted {Recerca aturada; els resultats den ser incomplets.}

# Game information:
translate K twin {doble}
translate K deleted {esborrades}
translate K comment {comentari}
translate K hidden {ocult}
translate K LastMove {ltima jugada}
translate K NextMove {Seguent}
translate K GameStart {Inici de partida}
translate K LineStart {Inici de lnia}
translate K GameEnd {Final de partida}
translate K LineEnd {Final de lnia}

# Player information:
translate K PInfoAll {Resultats per <b>totes</b> les partides}
translate K PInfoFilter {Resultats per les partides <b>filtrades</b>}
translate K PInfoAgainst {Resultats en contra}
translate K PInfoMostWhite {Obertures ms comuns amb Blanques}
translate K PInfoMostBlack {Obertures ms comuns amb Negres}
translate K PInfoRating {Historial de classificaci}
translate K PInfoBio {Biografia}
translate K PInfoEditRatings {Editar elos}

# Tablebase information:
translate K Draw {Taules}
translate K stalemate {Ofegat}
translate K withAllMoves {amb totes les jugades}
translate K withAllButOneMove {amb totes les jugades menys una}
translate K with {amb}
translate K only {noms}
translate K lose {maneres de perdre}
translate K loses {fa perdre}
translate K allOthersLose {tots les dems perden}
translate K matesIn {mat a}
translate K hasCheckmated {escac i mat}
translate K longest {el mat ms llarg}
translate K WinningMoves {Jugades guanyadores}
translate K DrawingMoves {Jugades per taules}
translate K LosingMoves {Jugades perdedores}
translate K UnknownMoves {Jugades de resultat desconegut}

# Tip of the day:
translate K Tip {Suggeriment}
translate K TipAtStartup {Suggeriment en comenar}

# Tree window mens:
menuText K TreeFile "Arxiu" 0
menuText K TreeFileFillWithBase "Omplir memria cau amb base" 0 {Omplir la memria cau amb totes les partides de la base actual}
menuText K TreeFileFillWithGame "Omplir memria cau amb partida" 0 {Omple la memria cau amb la partida actual de la base actual}
menuText K TreeFileSetCacheSize "Tamany de memria cau" 0 {Estableix el tamany del memria cau}
menuText K TreeFileCacheInfo "Informaci de memria cau" 0 {Informaci i s de la memria cau}
menuText K TreeFileSave "Salvar arxiu memria cau" 0 \
  {Salva l'arxiu memria cau de l'arbre (.stc)}
menuText K TreeFileFill "Construir arbre a la memria cau" 2 \
  {Construir arxiu memria cau amb posiciones d'obertura comunes}
menuText K TreeFileBest "Llista de millors partides" 9 {Mostra la llista de l'arbre amb les millors partides}
menuText K TreeFileGraph "Finestra grfica de l'arbre" 0 \
  {Mostra un grfic per aquesta branca de l'arbre}
menuText K TreeFileCopy "Copiar text de l'arbre al clipboard" 1 \
  {Copiar text de l'arbre al clipboard}
menuText K TreeFileClose "Tancar finestra de l'arbre" 0 \
  {Tancar finestra de l'arbre}
menuText K TreeMask "Mscara" 0
menuText K TreeMaskNew "Nova" 0 {Nova mscara}
menuText K TreeMaskOpen "Obrir" 0 {Obrir mscara}
# ====== TODO To be translated ======
menuText K TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
menuText K TreeMaskSave "Salvar" 0 {Salvar mscara}
menuText K TreeMaskClose "Tancar" 0 {Tancar mscara}
menuText K TreeMaskFillWithGame "Omplir amb partida" 0 {Omple la mscara amb la partida}
menuText K TreeMaskFillWithBase "Omplir amb base" 0 {Omple la mscara amb totes les partides de la base}
menuText K TreeMaskInfo "Info" 0 {Mostra estadstiques per la mscara actual}
# ====== TODO To be translated ======
menuText K TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText K TreeMaskSearch "Search" 0 {Search in current mask}
menuText K TreeSort "Ordenar" 0
menuText K TreeSortAlpha "Alfabticament" 0
menuText K TreeSortECO "Per codi ECO" 11
menuText K TreeSortFreq "Per freqencia" 4
menuText K TreeSortScore "Per puntuaci" 4
menuText K TreeOpt "Opcions" 1
menuText K TreeOptSlowmode "Mode Lent" 0 {Jugada lenta per actualitzacions (Alta qualitat)}
menuText K TreeOptFastmode "Mode Rpid" 0 {Jugada rpida per actualitzacions (no trasllada jugades)}
menuText K TreeOptFastAndSlowmode "Mode Rpid i Lent" 0 {Jugada rpida i mode lent per actualitzacions}
menuText K TreeOptStartStop "Auto actualitzat" 0 {Actualizat automtic de la finestra de l'arbre}
menuText K TreeOptLock "Bloquejar" 1 {Bloqueja/desbloqueja l'arbre de la base de dades actual}
menuText K TreeOptTraining "Entrenament" 2 {Activa/desactiva el mode d'entrenament de l'arbre}
menuText K TreeOptAutosave "Autoguardar arxiu memria cau" 0 \
  {Salvar automticamente l'arxiu memria cau quan es tanca la finestra de l'arbre}
menuText K TreeHelp "Ajut" 1
menuText K TreeHelpTree "Ajut de l'arbre" 4
menuText K TreeHelpIndex "ndex de l'ajut" 0
translate K SaveCache {Salvar memria cau}
translate K Training {Entrenament}
translate K LockTree {Bloquejar}
translate K TreeLocked {Bloquejat}
translate K TreeBest {Millor}
translate K TreeBestGames {Millors partides de l'arbre}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate K TreeTitleRow \
  {    Movim. ECO       Freqencia   Puntu. EloPm Perf AnyPm %Taules}
translate K TreeTotal {TOTAL}
translate K DoYouWantToSaveFirst {Vols salvar-ho abans}
translate K AddToMask {Afegir a mscara}
translate K RemoveFromMask {Elimina des de la mscara}
translate K AddThisMoveToMask {Afegir aquesta jugada a la Mscara}
# ====== TODO To be translated ======
translate K SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate K DisplayMask {Display Mask}
translate K Nag {Codi Nag}
translate K Marker {Marcador}
translate K Include {Incloure}
translate K Exclude {Excloure}
translate K MainLine {Lnia principal}
translate K Bookmark {Preferida}
translate K NewLine {Lnia nova}
translate K ToBeVerified {Per a verificar}
translate K ToTrain {Per a entrenar}
translate K Dubious {Dubts}
translate K ToRemove {Per a treure}
translate K NoMarker {Sense marcador}
translate K ColorMarker {Color}
translate K WhiteMark {Blanc}
translate K GreenMark {Verd}
translate K YellowMark {Groc}
translate K BlueMark {Blau}
translate K RedMark {Vermell}
translate K CommentMove {Comentar jugada}
translate K CommentPosition {Comentar posici}
translate K AddMoveToMaskFirst {Afegir primer la jugada a la mscara}
translate K OpenAMaskFileFirst {Obrir primer un arxiu de mscara}
translate K Positions {Posicions}
translate K Moves {Jugades}

# Finder window:
menuText K FinderFile "Arxiu" 0
menuText K FinderFileSubdirs "Mirar als subdirectoris" 0
menuText K FinderFileClose "Tanca el visor d'Arxius" 0
menuText K FinderSort "Ordenar" 0
menuText K FinderSortType "Tipus" 0
menuText K FinderSortSize "Tamany" 0
menuText K FinderSortMod "Modificat" 0
menuText K FinderSortName "Nom" 0
menuText K FinderSortPath "Cam" 0
menuText K FinderTypes "Tipus" 0
menuText K FinderTypesScid "Bases de dades Scid" 0
menuText K FinderTypesOld "Bases de dades Scid en format antic" 12
menuText K FinderTypesPGN "Arxius PGN" 9
menuText K FinderTypesEPD "Arxius EPD (llibre)" 0
menuText K FinderTypesRep "Arxius de Repertori" 12
menuText K FinderHelp "Ajut" 1
menuText K FinderHelpFinder "Ajut del visor d'Arxius" 0
menuText K FinderHelpIndex "ndex de l'ajut" 0
translate K FileFinder {Visor d'Arxius}
translate K FinderDir {Directori}
translate K FinderDirs {Directoris}
translate K FinderFiles {Arxius}
translate K FinderUpDir {amunt}
translate K FinderCtxOpen {Obrir}
translate K FinderCtxBackup {Cpia de seguretat (Backup)}
translate K FinderCtxCopy {Cpia}
translate K FinderCtxMove {Jugada}
translate K FinderCtxDelete {Esborrar}

# Player finder:
menuText K PListFile "Arxiu" 0
menuText K PListFileUpdate "Actualitzar" 0
menuText K PListFileClose "Tanca el Cercador de Jugadors" 0
menuText K PListSort "Ordenar" 0
menuText K PListSortName "Nom" 0
menuText K PListSortElo "Elo" 0
menuText K PListSortGames "Partides" 0
menuText K PListSortOldest "Ms antiga" 10
menuText K PListSortNewest "Ms nova" 4

# Tournament finder:
menuText K TmtFile "Arxiu" 0
menuText K TmtFileUpdate "Actualitzar" 0
menuText K TmtFileClose "Tanca el Visor de Torneigs" 0
menuText K TmtSort "Ordenar" 0
menuText K TmtSortDate "Data" 0
menuText K TmtSortPlayers "Jugadors" 0
menuText K TmtSortGames "Partides" 0
menuText K TmtSortElo "Elo" 0
menuText K TmtSortSite "Lloc" 0
menuText K TmtSortEvent "Torneig" 1
menuText K TmtSortWinner "Guanyador" 0
translate K TmtLimit "Lmit de llista"
translate K TmtMeanElo "Promig d'Elo inferior"
translate K TmtNone "No s'han trovat torneig que coincideixin."

# Graph windows:
menuText K GraphFile "Arxiu" 0
menuText K GraphFileColor "Guardar com Postscript Color..." 24
menuText K GraphFileGrey "Guardar com Postscript escala de grisos..." 34
menuText K GraphFileClose "Tancar finestra" 7
menuText K GraphOptions "Opcions" 0
menuText K GraphOptionsWhite "Blanques" 0
menuText K GraphOptionsBlack "Negres" 0
menuText K GraphOptionsBoth "Ambdos" 0
menuText K GraphOptionsPInfo "Opcions informaci jugador" 0
translate K GraphFilterTitle "Filtre grfic: freqencia per 1000 partides"
translate K GraphAbsFilterTitle "Filtre grfic: freqencia de les partides"
translate K ConfigureFilter {Configurar Eix-X per Any, Rating i Jugades}
translate K FilterEstimate "Estimar"
translate K TitleFilterGraph "Scid: Filtre Grfic"

# Analysis window:
translate K AddVariation {Afegir variant}
translate K AddAllVariations {Afegir totes les variants}
translate K AddMove {Afegir jugada}
translate K Annotate {Anotar}
translate K ShowAnalysisBoard {Mostrar escaquer d'anlisi}
translate K ShowInfo {Mostra info del motor}
translate K FinishGame {Finalitzar partida}
translate K StopEngine {Parar motor}
translate K StartEngine {Iniciar motor}
translate K LockEngine {Bloqueja motor en la posici actual}
translate K AnalysisCommand {Direcci d'anlisi}
translate K PreviousChoices {Eleccions prvies}
translate K AnnotateTime {Posar el temps entre jugades a segons}
translate K AnnotateWhich {Afegir variants}
translate K AnnotateAll {Per a jugades dels dos bndols}
translate K AnnotateAllMoves {Anotar totes les jugades}
translate K AnnotateWhite {Noms per jugades de les Blanques}
translate K AnnotateBlack {Noms per jugades de les Negres}
translate K AnnotateBlundersOnly {Quan la jugada de la partida es un error}
translate K AnnotateBlundersOnlyScoreChange {Anlisi informant d'errors, amb canvi de puntuaci des de: }
translate K BlundersThreshold {Marge d'error }
# TODO: Translate
translate K ScoreAllMoves {Score all moves}
translate K LowPriority {Baixa prioritat del processador}
translate K ClickHereToSeeMoves {Clic aqu per veure les jugades}
translate K ConfigureInformant {Configurar informacions}
translate K Informant!? {Jugada interesant}
translate K Informant? {Jugada dolenta}
translate K Informant?? {Desastrosa}
translate K Informant?! {Jugada dubtosa}
translate K Informant+= {Les Blanques tenen un lleuger avantatge}
translate K Informant+/- {Les Blanques tenen avantatge}
translate K Informant+- {Les Blanques tenen un avantatge decisiu}
translate K Informant++- {La partida es considerada com guanyada}
translate K Book {Llibre}
translate K OtherBookMoves {Altres jugades del llibre}
translate K OtherBookMovesTooltip {Jugades a les que el contrari te una respuesta}

# Analysis Engine open dialog:
translate K EngineList {Llista de Motors d'Anlisi}
translate K EngineName {Nom}
translate K EngineCmd {Ordre}
translate K EngineArgs {Parmetres}
translate K EngineDir {Directori}
translate K EngineElo {Elo}
translate K EngineTime {Data}
translate K EngineNew {Nova}
translate K EngineEdit {Editar}
translate K EngineRequired {Els camps en negreta son obligatoris; la resta opcionals}

# Stats window mens:
menuText K StatsFile "Arxiu" 0
menuText K StatsFilePrint "Imprimir a arxiu..." 0
menuText K StatsFileClose "Tancar finestra" 0
menuText K StatsOpt "Opcions" 0

# PGN window mens:
menuText K PgnFile "Arxiu" 0
menuText K PgnFileCopy "Copiar partida al portapapers" 0
menuText K PgnFilePrint "Imprimir a arxiu..." 0
menuText K PgnFileClose "Tancar finestra PGN" 0
menuText K PgnOpt "Presentaci" 0
menuText K PgnOptColor "Color de la presentaci" 0
menuText K PgnOptShort "Encapalament petit (3 lnies)" 13
menuText K PgnOptSymbols "Anotacions simbliques" 0
menuText K PgnOptIndentC "Sangria a comentaris" 0
menuText K PgnOptIndentV "Sangria a variants" 11
menuText K PgnOptColumn "Estil de columna (un jugada per lnia)" 1
menuText K PgnOptSpace "Espai desprs del nmero del jugada" 0
menuText K PgnOptStripMarks "Treure codis de color a cassella/fletxa" 3
menuText K PgnOptBoldMainLine "Utilitzar text en negreta per les jugades principals" 4
menuText K PgnColor "Colors" 1
menuText K PgnColorHeader "Encapalament..." 0
menuText K PgnColorAnno "Annotacions..." 0
menuText K PgnColorComments "Comentaris..." 0
menuText K PgnColorVars "Variants..." 0
menuText K PgnColorBackground "Fons..." 0
menuText K PgnColorMain "Lnia principal..." 0
menuText K PgnColorCurrent "Color de fons de l'ltima jugada..." 1
menuText K PgnHelp "Ajut" 1
menuText K PgnHelpPgn "Ajut de PGN" 9
menuText K PgnHelpIndex "ndex de l'ajut" 0
translate K PgnWindowTitle {Planilla - partida %u}

# Crosstable window mens:
menuText K CrosstabFile "Arxiu" 0
menuText K CrosstabFileText "Imprimir a arxiu text..." 20
menuText K CrosstabFileHtml "Imprimir a arxiu HTML..." 20
menuText K CrosstabFileLaTeX "Imprimir a arxiu LaTeX..." 20
menuText K CrosstabFileClose "Tancar finestra de graella" 0
menuText K CrosstabEdit "Editar" 0
menuText K CrosstabEditEvent "Torneig" 0
menuText K CrosstabEditSite "Lloc" 0
menuText K CrosstabEditDate "Data" 0
menuText K CrosstabOpt "Presentaci" 0
menuText K CrosstabOptAll "Tots contra tots" 0
menuText K CrosstabOptSwiss "Sus" 0
menuText K CrosstabOptKnockout "Eliminatria directa" 0
menuText K CrosstabOptAuto "Auto" 0
menuText K CrosstabOptAges "Edat en anys" 1
menuText K CrosstabOptNats "Nacionalitats" 0
menuText K CrosstabOptRatings "Elo" 0
menuText K CrosstabOptTitles "Ttols" 0
menuText K CrosstabOptBreaks "Puntuacions de desempat" 0
menuText K CrosstabOptDeleted "Incluore partides esborrades" 17
menuText K CrosstabOptColors "Colors (noms a la taula d'un Sus)" 0
menuText K CrosstabOptColumnNumbers "Columnes numerades (Noms en la taula tots contra tots)" 11
menuText K CrosstabOptGroup "Grups de classificaci" 0
menuText K CrosstabSort "Ordenar" 0
menuText K CrosstabSortName "Per nom" 4
menuText K CrosstabSortRating "Per Elo" 4
menuText K CrosstabSortScore "Per puntuaci" 4
menuText K CrosstabColor "Color" 2
menuText K CrosstabColorPlain "Text simple" 0
menuText K CrosstabColorHyper "Hipertext" 0
menuText K CrosstabHelp "Ajut" 1
menuText K CrosstabHelpCross "Ajut de Classificaci" 9
menuText K CrosstabHelpIndex "ndex de l'ajut" 0
translate K SetFilter {Posar filtre}
translate K AddToFilter {Afegir al filtre}
translate K Swiss {Sus}
translate K Category {Categora}

# Opening report window mens:
menuText K OprepFile "Arxiu" 0
menuText K OprepFileText "Imprimir a arxiu text..." 20
menuText K OprepFileHtml "Imprimir a arxiu HTML..." 20
menuText K OprepFileLaTeX "Imprimir a arxiu LaTeX..." 20
menuText K OprepFileOptions "Opcions..." 0
menuText K OprepFileClose "Tancar finestra de l'informe d'obertura" 0
menuText K OprepFavorites "Preferits" 1
menuText K OprepFavoritesAdd "Afegir informe..." 0
menuText K OprepFavoritesEdit "Editar informe preferit..." 0
menuText K OprepFavoritesGenerate "Generar informe..." 0
menuText K OprepHelp "Ajut" 1
menuText K OprepHelpReport "Ajut de l'informe de l'obertura" 11
menuText K OprepHelpIndex "ndex de l'ajut" 0

# Repertoire editor:
menuText K RepFile "Arxiu" 0
menuText K RepFileNew "Nova" 0
menuText K RepFileOpen "Obrir..." 0
menuText K RepFileSave "Salvar..." 0
menuText K RepFileSaveAs "Salvar com..." 1
menuText K RepFileClose "Tancar finestra" 0
menuText K RepEdit "Editar" 0
menuText K RepEditGroup "Afegir grup" 7
menuText K RepEditInclude "Afegir lnia inclossa" 13
menuText K RepEditExclude "Afegir lnia exclossa" 13
menuText K RepView "Veure" 0
menuText K RepViewExpand "Expandir tots els grups" 0
menuText K RepViewCollapse "Collapsar tots els grups" 0
menuText K RepSearch "Cercar" 0
menuText K RepSearchAll "Tot el repertori..." 0
menuText K RepSearchDisplayed "Noms les lnies mostrades..." 16
menuText K RepHelp "Ajut" 1
menuText K RepHelpRep "Ajut del repertori" 10
menuText K RepHelpIndex "ndex de l'ajut" 0
translate K RepSearch "Recerca del repertori"
translate K RepIncludedLines "Lnies inclosses"
translate K RepExcludedLines "Lnies exclosses"
translate K RepCloseDialog {Aquest repertori te canvis no enregistrats.

Realment vols continuar i descartar els canvis que has fet?
}

# Header search:
translate K HeaderSearch {Recerca per encapalament}
translate K EndSideToMove {Bndol a moure ver al final de la partida}
translate K GamesWithNoECO {Partides sense ECO?}
translate K GameLength {Duraci:}
translate K FindGamesWith {Trobar partides amb}
translate K StdStart {Inici estandar}
translate K Promotions {Promocions}
translate K Comments {Comentaris}
translate K Variations {Variants}
translate K Annotations {Annotacions}
translate K DeleteFlag {Marques d'esborrat}
translate K WhiteOpFlag {Obertura de les blanques}
translate K BlackOpFlag {Obertura de les negres}
translate K MiddlegameFlag {Mig joc}
translate K EndgameFlag {Finals}
translate K NoveltyFlag {Novetat}
translate K PawnFlag {Estructura de peons}
translate K TacticsFlag {Tctiques}
translate K QsideFlag {Joc de flanc de dama}
translate K KsideFlag {Joc de flanc de rei}
translate K BrilliancyFlag {Genialitat}
translate K BlunderFlag {Error}
translate K UserFlag {Usuari}
translate K PgnContains {PGN cont text}
# ====== TODO To be translated ======
translate K Annotator {Annotator}
# ====== TODO To be translated ======
translate K Cmnts {Annotated games only}

# Game list window:
translate K GlistNumber {Nmero}
translate K GlistWhite {Blanques}
translate K GlistBlack {Negres}
translate K GlistWElo {Elo-B}
translate K GlistBElo {Elo-N}
translate K GlistEvent {Torneig}
translate K GlistSite {Lloc}
translate K GlistRound {Ronda}
translate K GlistDate {Data}
translate K GlistYear {Any}
translate K GlistEDate {Torneig-Data}
translate K GlistResult {Resultat}
translate K GlistLength {Longitud}
translate K GlistCountry {Pais}
translate K GlistECO {ECO}
translate K GlistOpening {Obertura}
translate K GlistEndMaterial {Material final}
translate K GlistDeleted {Esborrat}
translate K GlistFlags {Senyal}
translate K GlistVars {Variants}
translate K GlistComments {Comentaris}
translate K GlistAnnos {Annotacions}
translate K GlistStart {Inici}
translate K GlistGameNumber {Nmero de partida}
# ====== TODO To be translated ======
translate K GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate K GlistRating {Rating}
translate K GlistFindText {Trovar text}
translate K GlistMoveField {Jugada}
translate K GlistEditField {Configurar}
translate K GlistAddField {Afegir}
translate K GlistDeleteField {Treure}
translate K GlistWidth {Amplada}
translate K GlistAlign {Alinear}
# ====== TODO To be translated ======
translate K GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate K GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate K GlistAlignC {Align: center}
translate K GlistColor {Color}
translate K GlistSep {Separador}
# ====== TODO To be translated ======
translate K GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate K GlistNewSort {New}
# ====== TODO To be translated ======
translate K GlistAddToSort {Add}
# ====== TODO To be translated ======
translate K GsortSort {Sort...}
# ====== TODO To be translated ======
translate K GsortDate {Date}
# ====== TODO To be translated ======
translate K GsortYear {Year}
# ====== TODO To be translated ======
translate K GsortEvent {Event}
# ====== TODO To be translated ======
translate K GsortSite {Site}
# ====== TODO To be translated ======
translate K GsortRound {Round}
# ====== TODO To be translated ======
translate K GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate K GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate K GsortECO {ECO}
# ====== TODO To be translated ======
translate K GsortResult {Result}
# ====== TODO To be translated ======
translate K GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate K GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate K GsortCountry {Country}
# ====== TODO To be translated ======
translate K GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate K GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate K GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate K GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate K GsortComments {Comments}
# ====== TODO To be translated ======
translate K GsortVariations {Variations}
# ====== TODO To be translated ======
translate K GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate K GsortAscending {Ascending}
# ====== TODO To be translated ======
translate K GsortDescending {Descending}
# ====== TODO To be translated ======
translate K GsortAdd {Add}
# ====== TODO To be translated ======
translate K GsortStore {Store}
# ====== TODO To be translated ======
translate K GsortLoad {Load}
translate K GlistRemoveThisGameFromFilter  {Treu aquesta partida del Filtre}
translate K GlistRemoveGameAndAboveFromFilter  {Treu aquesta partida i totes les de sobre del Filtre}
translate K GlistRemoveGameAndBelowFromFilter  {Treu aquesta partida i totes les de sota del Filtre}
translate K GlistDeleteGame {Elimina/Recupera aquesta partida de la base} 
translate K GlistDeleteAllGames {Elimina totes les partides de la base que hi son al Filtre} 
translate K GlistUndeleteAllGames {Recupera totes les partides esborrades de la base que hi son al filtre} 
translate K GlistMergeGameInBase {Barreja la partida a una altra base} 

# Maintenance window:
translate K DatabaseName {Nom de la base:}
translate K TypeIcon {Tipus d'icona:}
translate K NumOfGames {Partides:}
translate K NumDeletedGames {Partides esborrades:}
translate K NumFilterGames {Partides al filtre:}
translate K YearRange {Rang d'anys:}
translate K RatingRange {Rang d'Elo:}
translate K Description {Descripci}
translate K Flag {Marca}
# ====== TODO To be translated ======
translate K CustomFlags {Custom flags}
translate K DeleteCurrent {Esborrar partida actual}
translate K DeleteFilter {Esborrar partides filtrades}
translate K DeleteAll {Esborrar totes les partides}
translate K UndeleteCurrent {No esborrar partida actual}
translate K UndeleteFilter {No esborrar partides filtrades}
translate K UndeleteAll {No esborrar totes les partides}
translate K DeleteTwins {Esborrar partides duplicades}
translate K MarkCurrent {Marcar partida actual}
translate K MarkFilter {Marcar partides filtrades}
translate K MarkAll {Marcar totes les partides}
translate K UnmarkCurrent {No marcar partida actual}
translate K UnmarkFilter {No marcar partides filtrades}
translate K UnmarkAll {No marcar totes les partides}
translate K Spellchecking {Revisi ortogrfica}
translate K Players {Jugadors}
translate K Events {Torneigs}
translate K Sites {Llocs}
translate K Rounds {Rondes}
translate K DatabaseOps {Operacions amb la base de dades}
translate K ReclassifyGames {Reclassificar partides per ECO...}
translate K CompactDatabase {Compactar base de dades}
translate K SortDatabase {Ordenar base de dades}
translate K AddEloRatings {Afegir classificaci Elo}
translate K AutoloadGame {Autocargar nmero de partida}
translate K StripTags {Treure etiquetes PGN}
translate K StripTag {Treure etiquetes}
translate K Cleaner {MultiEines}
translate K CleanerHelp {
Scid executar, a l'actual base de dades, totes les accions de manteniment
que seleccionis de la segent llista.

S'aplicar l'estat actual a la classificaci ECO i al dileg d'esborrat de
duplicades si selecciones aquestes funcions.
}
translate K CleanerConfirm {
Un cop la MultiEina de manteniment comena no pot ser aturada!

En una base de dades gran pot trigar molt de temps, depenent de les funcions que s'hagi seleccionat i el seu estat actual.

N'ests segur/a de voler comenar les funcions de manteniment que has escollit?
}
translate K TwinCheckUndelete {Prem "u" per no esborrar-ne cap (undelete)}
translate K TwinCheckprevPair {Parella previa}
translate K TwinChecknextPair {Prxima Parella}
translate K TwinChecker {Scid: Verificar partides duplicades}
translate K TwinCheckTournament {Partides d'un torneig:}
translate K TwinCheckNoTwin {No duplicada  }
translate K TwinCheckNoTwinfound {No s'han trovat duplicades per aquesta partida.\nper mostrar duplicades amb aquesta finestra fes servir la funci "Esborrar partides duplicades..." }
translate K TwinCheckTag {Compartir etiquetes...}
translate K TwinCheckFound1 {Scid ha trobat $result partides duplicades}
translate K TwinCheckFound2 {i les marca com esborrades}
translate K TwinCheckNoDelete {No hi ha partides en aquesta base per esborrar.}
translate K TwinCriteria1 {Els teus parmetres per cercar duplicades potencialment poden fer que partides diferents amb jugades similars siguin marcades com a duplicades.}
translate K TwinCriteria2 {Es recomenable que escolleixis "No" per "algunes jugades", hauries d'escollir "S"  pels parmetres colors, torneigs, lloc, ronda, any i mes.\nVols continuar, malgrat aix, i esborrar les partides duplicades?}
translate K TwinCriteria3 {Es recomenable que especifiquis "S" per al menys dos parmetres de "mateix lloc", "mateixa ronda" i "mateix any".\nVols continuar, malgrat aix, i esborrar duplicades?}
translate K TwinCriteriaConfirm {Scid: Confirmar parmetres per partides duplicades}
translate K TwinChangeTag "Canviar les sigents etiquetes de les:\n\n partides"
translate K AllocRatingDescription "Aquesta ordre far servir l'arxiu actual SpellCheck per afegir puntuacions ELO i partides a la base. On un jugador no tingui Elo per si el tingui al llistat d'Spellcheck, se li afegir l'Elo."
translate K RatingOverride "Sobre-escriure Elos existents no buits?"
translate K AddRatings "Afegir Elos a:"
translate K AddedRatings {Scid ha afegit $r ratings Elo a $g partides.}
translate K NewSubmenu "Nou submen"

# Comment editor:
translate K AnnotationSymbols  {Smbols d'annotaci:}
translate K Comment {Comentari:}
translate K InsertMark {Insertar marca}
translate K InsertMarkHelp {
Insertar/treure marca: Selecciona color, tipus, cassella.
Insertar/treure fletxa: Bot dret sobre dos casselles.
}

# Nag buttons in comment editor:
translate K GoodMove {Bona jugada}
translate K PoorMove {Mala jugada}
translate K ExcellentMove {Jugada excelent}
translate K Blunder {Error}
translate K InterestingMove {Jugada interessant}
translate K DubiousMove {Jugada dubtosa}
translate K WhiteDecisiveAdvantage {Les blanque tenen avantatge decisiu}
translate K BlackDecisiveAdvantage {Les negres tenen avantatge decisiu}
translate K WhiteClearAdvantage {Les blanques tenen clar avantatge}
translate K BlackClearAdvantage {Les negres tenen clar avantatge}
translate K WhiteSlightAdvantage {Les blanques tenen lleuger avantatge}
translate K BlackSlightAdvantage {Les negres tenen lleuger avantatge}
translate K Equality {Igualtat}
translate K Unclear {Poc clar}
translate K Diagram {Diagrama}

# Board search:
translate K BoardSearch {Escaquer de recerca}
translate K FilterOperation {Operaci al filtre actual:}
translate K FilterAnd {Y (Restringir filtre)}
translate K FilterOr {O (Afegir al filtre)}
translate K FilterIgnore {IGNORAR (Posar a zero el filtre)}
translate K SearchType {Tipus de recerca:}
translate K SearchBoardExact {Posici exacta (totes les peces a les mateixes casselles)}
translate K SearchBoardPawns {Peons (igual material, tots els peons a les mateixes casselles)}
translate K SearchBoardFiles {Columnes (igual material, tots els peons a les mateixes columnes)}
translate K SearchBoardAny {Qualsevol (igual material, peons i peces a qualsevol lloc)}
translate K SearchInRefDatabase { Cerca a la base }
translate K LookInVars {Mirar a les variants}

# Material search:
translate K MaterialSearch {Cerca per Material}
translate K Material {Material}
translate K Patterns {Patrons}
translate K Zero {Zero}
translate K Any {Qualsevol}
translate K CurrentBoard {Escaquer Actual}
translate K CommonEndings {Finals comuns}
translate K CommonPatterns {Patrons comuns}
translate K MaterialDiff {Diferencia de material}
translate K squares {casselles}
translate K SameColor {Igual color}
translate K OppColor {Color contrari}
translate K Either {Qualsevol}
translate K MoveNumberRange {Rang de nombre de jugades}
translate K MatchForAtLeast {Coincideix quan menys}
translate K HalfMoves {mitges jugades}

# Common endings in material search:
translate K EndingPawns {Finals de peons}
translate K EndingRookVsPawns {Torre vs. pe(ns)}
translate K EndingRookPawnVsRook {Torre i 1 pe vs. torre}
translate K EndingRookPawnsVsRook {Torre i pe(ns) vs. torre}
translate K EndingRooks {Finals de torre vs. torre}
translate K EndingRooksPassedA {Finals de torre vs. torre amb pe passat}
translate K EndingRooksDouble {Finals de dues torres}
translate K EndingBishops {Finals d'alfil vs. alfil}
translate K EndingBishopVsKnight {Finals d'alfil vs. cavall}
translate K EndingKnights {Finals de cavall vs. cavall}
translate K EndingQueens {Finals de dama vs. dama}
translate K EndingQueenPawnVsQueen {Dama i 1 pe vs. dama}
translate K BishopPairVsKnightPair {Mig joc de dos alfils vs. dos cavalls}

# Common patterns in material search:
translate K PatternWhiteIQP {PDA blanc}
translate K PatternWhiteIQPBreakE6 {PDA blanc: d4-d5 ruptura vs. e6}
translate K PatternWhiteIQPBreakC6 {PDA blanc: d4-d5 ruptura vs. c6}
translate K PatternBlackIQP {PDA negre}
translate K PatternWhiteBlackIQP {PDA blanc vs. PDA negre}
translate K PatternCoupleC3D4 {Parella de peons allats blancs c3+d4}
translate K PatternHangingC5D5 {Peons suspessos negres a c5 i d5}
translate K PatternMaroczy {Centre Maroczy (amb peons a c4 i e4)}
translate K PatternRookSacC3 {Sacrifici de torre a c3}
translate K PatternKc1Kg8 {O-O-O vs. O-O (Rc1 vs. Rg8)}
translate K PatternKg1Kc8 {O-O vs. O-O-O (Rg1 vs. Rc8)}
translate K PatternLightFian {Fianchettos de casselles blanques (Alfil-g2 vs. Alfil-b7)}
translate K PatternDarkFian {Fianchettos de casselles negres (Alfil-b2 vs. Alfil-g7)}
translate K PatternFourFian {Quatre Fianchettos (Alfils a b2,g2,b7,g7)}

# Game saving:
translate K Today {Avui}
translate K ClassifyGame {Classificar partida}

# Setup position:
translate K EmptyBoard {Escaquer buit}
translate K InitialBoard {Escaquer inicial}
translate K SideToMove {Bndol que mou}
translate K MoveNumber {Jugada nmero}
translate K Castling {Enroc}
translate K EnPassantFile {Columna al pas}
translate K ClearFen {Treure FEN}
translate K PasteFen {Pegar FEN}
translate K SaveAndContinue {Salvar (enregistrar) i continuar}
translate K DiscardChangesAndContinue {Descartar \n canvis i continuar}
translate K GoBack {Tornar enrera}

# Replace move dialog:
translate K ReplaceMove {Substituir jugada}
translate K AddNewVar {Afegir nova variant}
translate K NewMainLine {Nova Lnia Principal}
translate K ReplaceMoveMessage {Ja existeix una jugada.

Pots substituir-la, descartant totes les jugades posteriors, o afegir-la com una nova variant.

(Pots evitar seguir veient aquest missatge en el futur desactivant l'opci "Preguntar abans de substituir moviments" al men Opcions: Jugades.)}

# Make database read-only dialog:
translate K ReadOnlyDialog {Si fas que aquesta base de dades sigui noms de lectura no es permetran fer canvis. No es podran salvar o substituir partides, i no es podra alterar les senyals d'esborrat. Qualsevol ordenaci o classificaci per ECO ser temporal.

Pots altra cop fer de forma fcil la base de dades d'escriptura tancant-la i obrint-la.

Realment vols fer que aquesta base de dades sigui noms de lectura?}

# Clear game dialog:
translate K ClearGameDialog {Aquesta partida ha estat modificada.

Realment vols continuar i eliminar els canvis fets?
}

# Exit dialog:
translate K ExitDialog {Vols sortir d'Scid?}
translate K ExitUnsaved {La seguent base de dades te canvis a partides no salvades. Si surts ara es perdran aquests canvis.}

# Import window:
translate K PasteCurrentGame {Pegar partida actual}
translate K ImportHelp1 \
  {Introduir o pegar una partida en format PGN al marc superior.}
translate K ImportHelp2 \
  {Qualsevol error important la partida es mostrar aqu.}
translate K OverwriteExistingMoves {SobreEscriure jugades existents?}

# ECO Browser:
translate K ECOAllSections {totes les divisions ECO}
translate K ECOSection {divisi ECO}
translate K ECOSummary {Resum de}
translate K ECOFrequency {Freqencia dels subcodis per}

# Opening Report:
translate K OprepTitle {Informe de l'obertura}
translate K OprepReport {Informe}
translate K OprepGenerated {Generat per}
translate K OprepStatsHist {Estadstiques e Historia}
translate K OprepStats {Estadstiques}
translate K OprepStatAll {Totes les partides referides}
translate K OprepStatBoth {Ambdues amb Elo}
translate K OprepStatSince {Des de}
translate K OprepOldest {Partides ms antigues}
translate K OprepNewest {Partides ms noves}
translate K OprepPopular {Popularitat actual}
translate K OprepFreqAll {Freqencia a tots els anys: }
translate K OprepFreq1   {Des de l'ltim any fins avui:     }
translate K OprepFreq5   {En els ltims 5 anys fins avui:   }
translate K OprepFreq10  {En els ltimos 10 anys fins avui:  }
translate K OprepEvery {un cop cada %u partides}
translate K OprepUp {puja un %u%s respecte al total d'anys}
translate K OprepDown {baixa un %u%s respecte al total d'anys}
translate K OprepSame {no hi han canvis respecte al total d'anys}
translate K OprepMostFrequent {Jugadors ms freqents}
translate K OprepMostFrequentOpponents {Rivals ms freqentes}
translate K OprepRatingsPerf {Elo i Rendiment}
translate K OprepAvgPerf {Promig Elo i rendiment}
translate K OprepWRating {Elo de les blanques}
translate K OprepBRating {Elo de les negres}
translate K OprepWPerf {Rendiment de les blanques}
translate K OprepBPerf {Rendiment de les negres}
translate K OprepHighRating {Partida amb el promig d'Elo ms gran}
translate K OprepTrends {Tendencies de Resultats}
translate K OprepResults {Resultat de duracions i freqencies}
translate K OprepLength {Duraci de la partida}
translate K OprepFrequency {Freqencia}
translate K OprepWWins {Blanques guanyen: }
translate K OprepBWins {Negres guanyen:  }
translate K OprepDraws {Taules:        }
translate K OprepWholeDB {al conjunt de la base de dades}
translate K OprepShortest {Victries ms curtes}
translate K OprepMovesThemes {Jugades i temes}
translate K OprepMoveOrders {Lnies de jugades que arriben a la posici de l'informe}
translate K OprepMoveOrdersOne \
  {Noms hi ha una lnia de jugades que arriba fins aquesta posici:}
translate K OprepMoveOrdersAll \
  {Hi han %u lnies que arriben a aquesta posici:}
translate K OprepMoveOrdersMany \
  {Hi han %u lnies que arriben a aquesta posici. Les %u ms comuns son:}
translate K OprepMovesFrom {Jugades des de la posici de l'informe}
translate K OprepMostFrequentEcoCodes {Obertures ms freqents}
translate K OprepThemes {Temes Posicionals}
translate K OprepThemeDescription {Freqencia dels temes a les primeres %u jugades de cada partida}
translate K OprepThemeSameCastling {Enroc al mateix flanc}
translate K OprepThemeOppCastling {Enrocs a flancs diferents}
translate K OprepThemeNoCastling {El dos Reis sense enrocar}
translate K OprepThemeKPawnStorm {Avalantxa dels peons del Rei}
translate K OprepThemeQueenswap {Canvi de Dames}
translate K OprepThemeWIQP {Pe de dama allat de les blanques}
translate K OprepThemeBIQP {Pen de dama allat de les negres}
translate K OprepThemeWP567 {Peons blancs a 5/6/7 fila}
translate K OprepThemeBP234 {Peons negres a 2/3/4 fila}
translate K OprepThemeOpenCDE {Columnes c/d/e obertes}
translate K OprepTheme1BishopPair {Un bndol te parella d'alfils}
translate K OprepEndgames {Finals}
translate K OprepReportGames {Informe de partides}
translate K OprepAllGames {Totes les partides}
translate K OprepEndClass {Tipus de finales d'acord a l'ltima posici de les partides}
translate K OprepTheoryTable {Taula de Teoria}
translate K OprepTableComment {Generada a partir de les %u partides amb millor Elo.}
translate K OprepExtraMoves {Annotaci extra de moviments a la taula de teoria}
translate K OprepMaxGames {Mxim de partides a la taula de teoria}
translate K OprepViewHTML {Veure HTML}
translate K OprepViewLaTeX {Veure LaTeX}

# Player Report:
translate K PReportTitle {Informe del jugador}
translate K PReportColorWhite {amb les peces blanques}
translate K PReportColorBlack {amb les peces negres}
translate K PReportMoves {%s desprs}
translate K PReportOpenings {Obertures}
translate K PReportClipbase {Buidar el portapapers i copiar les partides}

# Piece Tracker window:
translate K TrackerSelectSingle {El bot esquerra selecciona la pea.}
translate K TrackerSelectPair {El bot esquerra selecciona la pea; el botn dret tamb selecciona la germana.}
translate K TrackerSelectPawn {El bot esquerra selecciona el pe; el bot dret selecciona els 8 peons.}
translate K TrackerStat {Estadstica}
translate K TrackerGames {% de partides amb jugada a aquesta cassella}
translate K TrackerTime {% de temps cap aquesta cassella}
translate K TrackerMoves {Jugades}
translate K TrackerMovesStart {Escriu el nmero de la jugada des d'on comenar la recerca.}
translate K TrackerMovesStop {Escriu el nmero de la jugada on s'ha d'aturar la recerca.}

# Game selection dialogs:
translate K SelectAllGames {Totes les partides de la base de dades}
translate K SelectFilterGames {Noms les partides filtrades}
translate K SelectTournamentGames {Noms les partides de l'actual torneig}
translate K SelectOlderGames {Noms partides antigues}

# Delete Twins window:
translate K TwinsNote {Per a ser duplicades, dos partides han de tenir quan menys els mateixos dos jugadors i els criteris que fixis a sota. Quan es troba un parell de duplicades, es borra la partida ms curta. Suggeriment: es millor fer la correcci ortogrfica de la base de dades abans d'iniciar l'esborrat de duplicades, per que millora la seva detecci.}
translate K TwinsCriteria {Criteris: Les partides duplicades han de tenir...}
translate K TwinsWhich {Partides a examinar}
translate K TwinsColors {Jugadors amb igual color?}
translate K TwinsEvent {Mateix torneig?}
translate K TwinsSite {Mateix lloc?}
translate K TwinsRound {Mateixa ronda?}
translate K TwinsYear {Mateix any?}
translate K TwinsMonth {Mateix mes?}
translate K TwinsDay {Mateix da?}
translate K TwinsResult {Mateix resultat?}
translate K TwinsECO {Mateix codi ECO?}
translate K TwinsMoves {Mateixes jugades?}
translate K TwinsPlayers {Comparant noms de jugadors:}
translate K TwinsPlayersExact {Trobo exactes}
translate K TwinsPlayersPrefix {Noms les primeres 4 lletres}
translate K TwinsWhen {Quan es borren partides duplicades}
translate K TwinsSkipShort {Ignorar totes les partides amb menys de 5 jugades?}
translate K TwinsUndelete {Treure en primer lloc marques d'esborrat?}
translate K TwinsSetFilter {Posar al filtre totes les partides esborrades?}
translate K TwinsComments {Saltar sempre partides amb comentaris?}
translate K TwinsVars {Saltar sempre partides amb variants?}
translate K TwinsDeleteWhich {Quina partida esborrar:}
translate K TwinsDeleteShorter {Partida ms curta}
translate K TwinsDeleteOlder {Nmero de partida ms petit}
translate K TwinsDeleteNewer {Nmero de partida ms gran}
translate K TwinsDelete {Esborrar partides}

# Name editor window:
translate K NameEditType {Tipus de dada a editar}
translate K NameEditSelect {Partides a editar}
translate K NameEditReplace {Reemplaar}
translate K NameEditWith {amb}
translate K NameEditMatches {Ja hi son: Presionar Ctrl+1 a Ctrl+9 per seleccionar-ne}
# ====== TODO To be translated ======
translate K CheckGames {Check games}
# ====== TODO To be translated ======
translate K CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate K CheckAll {All games}
# ====== TODO To be translated ======
translate K CheckSelectFilterGames {Only games in filter}

# Classify window:
translate K Classify {Classificar}
translate K ClassifyWhich {Classificar per codi ECO}
translate K ClassifyAll {Totes les partides (sobreescriure codi ECO)}
translate K ClassifyYear {Totes les partides jugades a l'ltim any}
translate K ClassifyMonth {Totes les partides jugades a l'ltim mes}
translate K ClassifyNew {Noms les partides sense codi ECO}
translate K ClassifyCodes {Codi ECO a utilitzar}
translate K ClassifyBasic {Noms codi bsic ("B12", ...)}
translate K ClassifyExtended {Extensions Scid ("B12j", ...)}

# Compaction:
translate K NameFile {Arxiu de noms}
translate K GameFile {Arxiu de partides}
translate K Names {Noms}
translate K Unused {No utilitzat}
translate K SizeKb {Tamany (kb)}
translate K CurrentState {Estat actual}
translate K AfterCompaction {Desprs de la compactaci}
translate K CompactNames {Compactar arxiu de noms}
translate K CompactGames {Compactar arxiu de partides}
translate K NoUnusedNames "No hi han noms sense utilitzar, per tant l'arxiu de noms ja est compactat."
translate K NoUnusedGames "L'arxiu ja est totalment compactat."
translate K NameFileCompacted {L'arxiu de noms per la base de dades "[file tail [sc_base filename]]" ha estat compactat.}
translate K GameFileCompacted {L'arxiu de partides de la base de dades "[file tail [sc_base filename]]" ha estat compactada.}

# Sorting:
translate K SortCriteria {Criteri}
translate K AddCriteria {Afegir criteri}
translate K CommonSorts {Ordenacions habituals}
translate K Sort {Ordenar}

# Exporting:
translate K AddToExistingFile {Afegir partides a un arxiu existent?}
translate K ExportComments {Exportar comentaris?}
translate K ExportVariations {Exportar variants?}
translate K IndentComments {Sangrar comentaris?}
translate K IndentVariations {Sangrar variants?}
translate K ExportColumnStyle {Estil de columna (una jugada per lnia)?}
translate K ExportSymbolStyle {Estil d'anotaci simblica:}
translate K ExportStripMarks {Treure marca de codis de cassella/fletxa dels comentaris?}

# Goto game/move dialogs:
translate K LoadGameNumber {Entra el nmero de la partida a carregar:}
translate K GotoMoveNumber {Anar a la jugada nmero:}

# Copy games dialog:
translate K CopyGames {Copiar partides}
translate K CopyConfirm {
 Realment vols copiar les [::utils::thousands $nGamesToCopy] partides fitrades
 de la base de dades "$fromName"
 a la base de dades "$targetName"?
}
translate K CopyErr {No es poden copiar les partides}
translate K CopyErrSource {la base de dades font}
translate K CopyErrTarget {la base de dades de desti}
translate K CopyErrNoGames {no te partides al filtre}
translate K CopyErrReadOnly {es de noms lectura}
translate K CopyErrNotOpen {no est oberta}

# Colors:
translate K LightSquares {Casselles blanques}
translate K DarkSquares {Casselles negres}
translate K SelectedSquares {Casselles seleccionades}
translate K SuggestedSquares {Casselles de jugada suggerida}
translate K WhitePieces {Peces blanques}
translate K BlackPieces {Peces negres}
translate K WhiteBorder {Vora blanques}
translate K BlackBorder {Vora negres}

# Novelty window:
translate K FindNovelty {Trobar Novetat}
translate K Novelty {Novetat}
translate K NoveltyInterrupt {Recerca de novetat interrompuda}
translate K NoveltyNone {Cap novetat trobada en aquesta partida}
translate K NoveltyHelp {
Scid trobar la primera jugada de l'actual partida que representi una posici no existent a la base de dades seleccionada o al llibre d'obertures ECO.
}

# Sounds configuration:
translate K SoundsFolder {Directori d'arxius de so}
translate K SoundsFolderHelp {El directori ha de tenir els arxius King.wav, a.wav, 1.wav, etc}
translate K SoundsAnnounceOptions {Opcions d'anunci de jugades}
translate K SoundsAnnounceNew {Anunciar noves jugades quan estiguin fetes}
translate K SoundsAnnounceForward {Anunciar jugades quan avancem una jugada}
translate K SoundsAnnounceBack {Anunciar jugada quan rectifiquem o retrocedim una jugada}

# Upgrading databases:
translate K Upgrading {Actualitzaci}
translate K ConfirmOpenNew {
Aquest es un format de base de dades antico (Scid 3) que no es pot obrir amb Scid 4, pero ja s'ha creat una versin en el format nou (Scid 4).

Vols abrir la versi de format nou de la base de dades?
}
translate K ConfirmUpgrade {
Aquesta es una base de dades en un format antic (Scid 3). S'ha de crear una versi amb el nou format abans de poder utilitzar-la a Scid 4.

L'actualitzaci crear una nova versi de la base de dades.

Pot trigar temps, pero noms cal fer-ho un cop. Pots cancelar si triga massa temps.

Vols actualitzar aquesta base de dades ara?
}

# Recent files options:
translate K RecentFilesMenu {Nombre d'arxius recents al men Arxiu}
translate K RecentFilesExtra {Nombre d'arxius recents al submen extra}

# My Player Names options:
translate K MyPlayerNamesDescription {
Escriu una llista de noms alternatius per jugador, un nom per cada lnia. Es permeten comodins (per exemple "?" per un caracter, "*" per varis caracters).

Cada cop que es carregui una partida amb un jugador de la llista es girar l'escaquer, si fos necessari, per veure la partida des de la perspectiva del jugador.
}
translate K showblunderexists {Mostrar ficada de pota}
translate K showblundervalue {Mostrar valor de la ficada de pota}
translate K showscore {Mostrar marcador}
translate K coachgame {Entrenador}
translate K configurecoachgame {Configurar entrenador}
translate K configuregame {Configuraci de partida}
translate K Phalanxengine {Motor Phalanx}
translate K Coachengine {Motor entrenador}
translate K difficulty {Dificultat}
translate K hard {Dur}
translate K easy {Fcil}
translate K Playwith {Juga amb}
translate K white {blanques}
translate K black {negres}
translate K both {ambdos}
translate K Play {Jugar}
translate K Noblunder {Sense errors}
translate K blunder {Ficades de pota}
translate K Noinfo {-- Sense informaci --}
translate K PhalanxOrTogaMissing {No es troben ni Phalanx ni Toga}
translate K moveblunderthreshold {La jugada es un error si la prdua de puntuaci es ms gran que }
translate K limitanalysis {Temps lmit per l'anlisi del motor}
translate K seconds {segons}
translate K Abort {Abortar}
translate K Resume {Reanudar}
translate K OutOfOpening {Fora de l'obertura}
translate K NotFollowedLine {No segueixes la lnia}
translate K DoYouWantContinue {Vols continuar?}
translate K CoachIsWatching {Entrenador}
translate K Ponder {Pensar sempre (motor)}
translate K LimitELO {Limitar fora ELO}
translate K DubiousMovePlayedTakeBack {Jugada dubtosa, vols rectificar?}
translate K WeakMovePlayedTakeBack {Jugada fluixa, vols rectificar?}
translate K BadMovePlayedTakeBack {Jugada dolenta, vols rectificar?}
translate K Iresign {Abandono}
translate K yourmoveisnotgood {la teva jugada es dolenta}
translate K EndOfVar {Fi de la variant}
translate K Openingtrainer {Entrenador d'obertures}
translate K DisplayCM {Mostra jugades possibles}
translate K DisplayCMValue {Mostra valor de les jugades possibles}
translate K DisplayOpeningStats {Mostra estadstiques}
translate K ShowReport {Mostra informe}
translate K NumberOfGoodMovesPlayed {jugades bones fetes}
translate K NumberOfDubiousMovesPlayed {jugades dubtoses fetes}
translate K NumberOfMovesPlayedNotInRepertoire {jugades fetes fora del repertori}
translate K NumberOfTimesPositionEncountered {vegades trobada la posici}
translate K PlayerBestMove  {Permet nicament les millors jugades}
translate K OpponentBestMove {El contrari juga les millors jugades}
translate K OnlyFlaggedLines {Noms lnies marcades}
translate K resetStats {Reinicia estadstiques}
translate K Repertoiretrainingconfiguration {Configuraci del repertori d'entrenament}
translate K Loadingrepertoire {Carregant repertori}
translate K Movesloaded {Jugades carregades}
translate K Repertoirenotfound {Repertori no trobat}
translate K Openfirstrepertoirewithtype {Obrir primer una base amb una icona/tipus de repertori al costat dret}
translate K Movenotinrepertoire {La jugada no est al repertori}
translate K PositionsInRepertoire {Posicions al repertori}
translate K PositionsNotPlayed {Posicions no jugades}
translate K PositionsPlayed {Posicions jugades}
translate K Success {Exits}
translate K DubiousMoves {Jugades dubtoses}
translate K OutOfRepertoire {Fora de repertori}
translate K ConfigureTactics {Configurar tctica}
translate K ResetScores {Reiniciar marcadors (puntuacions)}
translate K LoadingBase {Cargant base}
translate K Tactics {Tctica}
translate K ShowSolution {Mostrar resposta}
# ====== TODO To be translated ======
translate K NextExercise {Next exercise}
# ====== TODO To be translated ======
translate K PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate K StopTraining {Stop training}
translate K Next {Segent}
translate K ResettingScore {Reiniciant marcador}
translate K LoadingGame {Cargant partida}
translate K MateFound {Trobat mat}
translate K BestSolutionNotFound { NO s'ha trobat la millor resposta!}
translate K MateNotFound {Mat no trobat}
translate K ShorterMateExists {Existeix un mat ms curt}
translate K ScorePlayed {Marcador jugat}
translate K Expected {Esperat}
translate K ChooseTrainingBase {Escollir base d'entrenament}
translate K Thinking {Pensant}
translate K AnalyzeDone {Anlisi fet}
translate K WinWonGame {Guanya la partida guanyada}
translate K Lines {Lnies}
translate K ConfigureUCIengine {Configurar motor UCI}
translate K SpecificOpening {Obertura especfica}
translate K StartNewGame {Iniciar nova partida}
translate K FixedLevel {Nivell fix}
translate K Opening {Obrint}
translate K RandomLevel {Nivell aleatori}
translate K StartFromCurrentPosition {Iniciar des de la posici actual}
translate K FixedDepth {Profunditat fixe}
translate K Nodes {Nodes} 
translate K Depth {Profunditat}
translate K Time {Temps} 
translate K SecondsPerMove {Segons per jugada}
translate K Engine {Motor}
translate K TimeMode {Mode de temps}
translate K TimeBonus {Temps + bonus}
translate K TimeMin {min}
translate K TimeSec {seg}
translate K AllExercisesDone {Tots els exercicis fets}
translate K MoveOutOfBook {Jugada fora del llibre}
translate K LastBookMove {ltima jugada del llibre}
translate K AnnotateSeveralGames {Anotar les partides\ndes de l'actual fins la partida: }
translate K FindOpeningErrors {Trobar errors als primers }
translate K MarkTacticalExercises {Marca exercicis tctics}
translate K UseBook {Utilitzar llibre d'obertures}
translate K MultiPV {Mltiples Variants}
translate K Hash {Memria Hash}
translate K OwnBook {Utilitzar el llibre del motor}
translate K BookFile {Llibre d'obertures}
translate K AnnotateVariations {Anotar variants}
translate K ShortAnnotations {Anotacions curtes}
translate K addAnnotatorTag {Afegir etiqueta d'anotador}
translate K AddScoreToShortAnnotations {Afegir puntuaci per anotaciones curtes}
translate K Export {Exportar}
translate K BookPartiallyLoaded {Llibre carregat parcialment}
translate K Calvar {Clcul de variants}
translate K ConfigureCalvar {Configuraci}
translate K Reti {Obertura Reti}
translate K English {Obertura anglesa}
translate K d4Nf6Miscellaneous {1.d4 Cf6 varis}
translate K Trompowsky {Obertura Trompowsky}
translate K Budapest {Gambit Budapest}
translate K OldIndian {Defensa India Antiga}
translate K BenkoGambit {Gambit Benko}
translate K ModernBenoni {Defensa Benoni Moderna}
translate K DutchDefence {Defensa Holandesa}
translate K Scandinavian {Defensa Escandinava}
translate K AlekhineDefence {Defensa Alekhine}
translate K Pirc {Defensa Pirc}
translate K CaroKann {Defensa Caro-Kann}
translate K CaroKannAdvance {Defensa Caro-Kann, Variant de l'avanament}
translate K Sicilian {Defensa Siciliana}
translate K SicilianAlapin {Defensa Siciliana, Variant Alapin}
translate K SicilianClosed {Defensa Siciliana, Variant Tancada}
translate K SicilianRauzer {Defensa Siciliana, Variant Rauzer}
translate K SicilianDragon {Defensa Siciliana, Variant del Drag}
translate K SicilianScheveningen {Defensa Siciliana, Variant Scheveningen}
translate K SicilianNajdorf {Defensa Siciliana, Variant Najdorf}
translate K OpenGame {Obertura Oberta}
translate K Vienna {Obertura Vienesa}
translate K KingsGambit {Gambit de Rei}
translate K RussianGame {Partida Rusa}
translate K ItalianTwoKnights {Obertura Italiana, Variant dels Dos Cavalls}
translate K Spanish {Obertura Espanyola}
translate K SpanishExchange {Obertura Espanyola, Variant del canvi}
translate K SpanishOpen {Obertura Espanyola}
translate K SpanishClosed {Obertura Espanyola, Variant tancada}
translate K FrenchDefence {Defensa Francesa}
translate K FrenchAdvance {Defensa Francesa, Variant de l'Avanament}
translate K FrenchTarrasch {Defensa Francesa, Variant Tarrasch}
translate K FrenchWinawer {Defensa Francesa, Variant Winawer}
translate K FrenchExchange {Defensa Francesa, Variant del canvi}
translate K QueensPawn {Obertura de Pe de Dama}
translate K Slav {Defensa Eslava}
translate K QGA {Gambit de Dama Acceptat}
translate K QGD {Gambit de Dama Declinat}
translate K QGDExchange {Gambit de Dama Declinat, Variant del Canvi}
translate K SemiSlav {Defensa Semi-Eslava del Gambit de Dama Declinat}
translate K QGDwithBg5 {Gambit de Dama Declinat amb Ag5}
translate K QGDOrthodox {Gambit de Dama Declinat,  Defensa Ortodoxa}
translate K Grunfeld {Defensa Grnfeld}
translate K GrunfeldExchange {Variant del canvi de la Defensa Grnfeld }
translate K GrunfeldRussian {Variant Rusa de la Defensa Grnfeld}
translate K Catalan {Catalana}
translate K CatalanOpen {Obertura Catalana}
translate K CatalanClosed {Obertura Catalana, Variant Tancada}
translate K QueensIndian {Defensa India de Dama}
translate K NimzoIndian {Obertura Nimzo-India}
translate K NimzoIndianClassical {Obertura Nimzo-India Clssica}
translate K NimzoIndianRubinstein {Variante Rubinstein de la Nimzo-India}
translate K KingsIndian {India de Rei}
translate K KingsIndianSamisch {Atac Smish de la India de Reiy}
translate K KingsIndianMainLine {Linia Principal India de Rei}
translate K ConfigureFics {Configurar FICS}
translate K FICSGuest {Autentificaci com convidat}
translate K FICSServerPort {Port del servidor}
# ====== TODO To be translated ======
translate K FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate K FICSRefresh {Refresh}
translate K FICSTimesealPort {Port Timeseal}
translate K FICSSilence {Silenci}
translate K FICSOffers {Ofertes}
translate K FICSConsole {Consola}
translate K FICSGames {Partides}
translate K FICSUnobserve {Atura l'observaci d'una partida}
translate K FICSProfile {Mostra la teva histria i perfil}
translate K FICSRelayedGames {Partides ajornades}
translate K FICSFindOpponent {Cercar contrari}
translate K FICSTakeback {Retrocedeix}
translate K FICSTakeback2 {Retrocedeix 2}
translate K FICSInitTime {Temps inicial (min)}
translate K FICSIncrement {Increment (seg)}
translate K FICSRatedGame {Partida amb rating}
translate K FICSAutoColour {automtic}
translate K FICSManualConfirm {confirma manualment}
translate K FICSFilterFormula {Filtrar amb frmula}
translate K FICSIssueSeek {Panell de desafiaments}
translate K FICSChallenge {Desafiar}
translate K FICSAccept {acceptar}
translate K FICSDecline {refusar}
translate K FICSColour {Color}
translate K FICSSend {enviar}
translate K FICSConnect {Connectar}
translate K FICSdefaultuservars {Utilitza valors per defecte}
translate K FICSObserveconfirm {Vols observar la partida}
# ====== TODO To be translated ======
translate K FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate K GameReview {Game review}
# ====== TODO To be translated ======
translate K GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate K GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate K GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate K GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate K GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate K GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate K GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate K GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate K GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate K GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate K GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate K GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate K GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate K GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate K GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate K GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate K GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate K GameReviewMovesPlayedEngine {Moves played like engine}
translate K CCDlgConfigureWindowTitle {Configurar Escacs Postals}
translate K CCDlgCGeneraloptions {Opcions Generals}
translate K CCDlgDefaultDB {Base per defecte:}
translate K CCDlgInbox {Entrant (Carpeta):}
translate K CCDlgOutbox {Sortint (carpeta):}
translate K CCDlgXfcc {Configuraci Xfcc:}
translate K CCDlgExternalProtocol {Protocol Extern de procs (ex. Xfcc)}
translate K CCDlgFetchTool {Eina de recuperaci:}
translate K CCDlgSendTool {Eina de tramessa:}
translate K CCDlgEmailCommunication {Comunicaci Email}
translate K CCDlgMailPrg {Programa de correu:}
translate K CCDlgBCCAddr {(B)CC Adrea:}
translate K CCDlgMailerMode {Mode:}
translate K CCDlgThunderbirdEg {p.ex. Thunderbird, Mozilla Mail, Icedove...}
translate K CCDlgMailUrlEg {p.ex. Evolution}
translate K CCDlgClawsEg {p.ex. Sylpheed Claws}
translate K CCDlgmailxEg {p.ex. mailx, mutt, nail...}
translate K CCDlgAttachementPar {Adjunt:}
translate K CCDlgInternalXfcc {Utilitzar suport intern Xfcc}
# ====== TODO To be translated ======
translate K CCDlgConfirmXfcc {Confirma jugades}
translate K CCDlgSubjectPar {Assumpte:}
# ====== TODO To be translated ======
translate K CCDlgDeleteBoxes {Buida Entrant/Sortint}
# ====== TODO To be translated ======
translate K CCDlgDeleteBoxesText {Realment vols buidar les teves carpetes d'Entrada i Sortida d'Escacs per Correspondncia? Aix requereix una nova sincronitzaci per mostrar l'estat actual de les teves partides}
# ====== TODO To be translated ======
translate K CCDlgConfirmMove {Confirma jugada}
# ====== TODO To be translated ======
translate K CCDlgConfirmMoveText {Si ho confirmes, la propera jugada i comentari ser enviada al servidor:}
# ====== TODO To be translated ======
translate K CCDlgDBGameToLong {Lnia principal inconsistent}
# ====== TODO To be translated ======
translate K CCDlgDBGameToLongError {la lnia principal a la teva base es ms llarga que la de la partida de la Bstia d'Entrada. Si la Btia d'Entrada cont partides actuals, p.ex. desprs d'una sincronitzaci, vol dir que s'han afegit jugades a la base errniament.\nEn aquest cas escura la lnia principal fins a (max) jugada\n}
translate K CCDlgStartEmail {Iniciar nova partida Email}
translate K CCDlgYourName {El teu nom:}
translate K CCDlgYourMail {La teva adrea Email:}
translate K CCDlgOpponentName {Nom del Contrari:}
translate K CCDlgOpponentMail {Direcci Email del Contrari:}
translate K CCDlgGameID {Partida ID (nica):}
translate K CCDlgTitNoOutbox {Scid: Sortida del Correu d'Escacs}
translate K CCDlgTitNoInbox {Scid: Entrada del Correu d'Escacs}
translate K CCDlgTitNoGames {Scid: No hi han Partides d'Escacs Postal}
translate K CCErrInboxDir {Carpeta d'entrada del Correu d'Escacs (Entrant):}
translate K CCErrOutboxDir {Carpeta de sortida del Correu d'Escacs (Sortint):}
translate K CCErrDirNotUsable {No existeix o no es accessible!\nSi-us-plau, verifica els parmetres.}
translate K CCErrNoGames {No cont cap partida!\nSi-us-plau, posa'n primer.}
translate K CCDlgTitNoCCDB {Scid: No es una Base d'Escacs Postals}
translate K CCErrNoCCDB {No hi ha una Base de tipus 'Correu' oberta. Si-us-plau, obre'n una abans d'utilitzar funcions d'escacs postals.}
translate K CCFetchBtn {Baixar partides des del servidor i processar correu entrant}
translate K CCPrevBtn {Anar a partida anterior}
translate K CCNextBtn {Anar a partida segent }
translate K CCSendBtn {Enviar jugada}
translate K CCEmptyBtn {Correus entrants i sortints buits}
translate K CCHelpBtn {Ajut a icones e indicadors d'estatus. \n Per ajut general prmer F1!}
translate K CCDlgServerName {Nom del servidor:}
translate K CCDlgLoginName  {Nom de registre:}
translate K CCDlgPassword   {Contrasenya:}
translate K CCDlgURL        {Xfcc-URL:}
translate K CCDlgRatingType {Tipus de puntuaci (Rating):}
translate K CCDlgDuplicateGame {ID de partida no nic}
translate K CCDlgDuplicateGameError {Aquesta partida existeix ms d'un cop a la base. Si-us-plau esborra totes les duplicades i compacta el fitxer de partides (Arxiu/Manteniment/Compactar Base).}
# ====== TODO To be translated ======
translate K CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate K CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate K CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate K CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate K CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate K CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate K CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate K CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate K CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate K ExtHWConfigConnection {Configurar maquinari extern}
translate K ExtHWPort {Port}
translate K ExtHWEngineCmd {Lnia d'ordres del motor}
translate K ExtHWEngineParam {Parmetre del motor}
translate K ExtHWShowButton {Mostrar bot}
translate K ExtHWHardware {Maquinari}
translate K ExtHWNovag {Novag Citrine}
translate K ExtHWInputEngine {Motor d'entrada}
translate K ExtHWNoBoard {Sense escaquer}
translate K NovagReferee {rbitre}

# Input Engine dialogs
translate K IEConsole {Consola d'entrada del motor}
translate K IESending {Jugades enviades per}
translate K IESynchronise {Sincronitzar}
translate K IERotate  {Rotar}
translate K IEUnableToStart {Impossible comenar amb el motor d'entrada:}
translate K DoneWithPosition {Fet amb la posici}
translate K Board {Escaquer}
translate K showGameInfo {Mostrar informaci de la partida}
translate K autoResizeBoard {Tamany automtic de l'escaquer}
translate K DockTop {Moure amunt}
translate K DockBottom {Moure abaix}
translate K DockLeft {Moure a l'esquerra}
translate K DockRight {Moure a la dreta}
translate K Undock {Finestra flotant}
# ====== TODO To be translated ======
translate K ChangeIcon {Change icon...}

}
# end of catalan.tcl
# czech.tcl: Czech menus and help for Scid.
# Contributed by Pavel Hank, Vlastimil Babula and Milan Zamazal.
# Untranslated messages are marked with a "***" comment.

addLanguage C Czech 0 iso-8859-2

proc setLanguage_C {} {

# File menu:
menuText C File "Soubor" 0
menuText C FileNew "Nov..." 0 {Vytvoit novou Scid databzi}
menuText C FileOpen "Otevt..." 0 {Otevt existujc Scid databzi}
menuText C FileClose "Zavt" 0 {Zavt aktivn Scid databzi}
menuText C FileFinder "Vyhledva" 2 {Otevt okno vyhledvae soubor}
menuText C FileBookmarks "Zloky" 2 {Menu zloek (klvesa: Ctrl+B)}
menuText C FileBookmarksAdd "Pidat zloku" 0 \
  {Zloka aktuln pozice a partie z databze}
menuText C FileBookmarksFile "Zaadit zloku" 0 \
  {Zaadit zloku pro aktuln partii a pozici}
menuText C FileBookmarksEdit "Editovat zloky..." 0 \
  {Editovat menu zloek}
menuText C FileBookmarksList "Zobrazit sloky jako jedin seznam" 0 \
  {Zobrazit sloky se zlokami jako jedin seznam, bez podnabdek}
menuText C FileBookmarksSub "Zobrazit sloky jako podnabdky" 9 \
  {Zobrazit zlokov sloky jako podnabdky, ne jako jedin seznam}
menuText C FileMaint "drba" 2 {Nstroje pro drbu databze Scidu}
menuText C FileMaintWin "Okno drby" 0 \
  {Otevt/zavt okno pro drbu Scid databze}
menuText C FileMaintCompact "Zhutnn databze..." 13 \
  {Zhutnn databzovch soubor, odstrann vymazanch parti a nepouvanch jmen}
menuText C FileMaintClass "ECO klasifikace parti..." 0 \
  {Pepotn ECO kd vech parti}
menuText C FileMaintSort "Setdit databzi..." 0 \
  {Setdit vechny partie v databzi}
menuText C FileMaintDelete "Vymazn zdvojench parti..." 0 \
  {Hledat zdvojen partie a oznait je pro vymazn}
menuText C FileMaintTwin "Kontrola zdvojench parti" 0 \
  {Otevt/aktualizovat okno pro kontrolu zdvojench parti}
menuText C FileMaintName "Jmna" 0 {Editace jmen a kontrola pravopisu}
menuText C FileMaintNameEditor "Editor jmen" 0 \
  {Otevt/zavt editor jmen}
menuText C FileMaintNamePlayer "Kontrola pravopisu hr..." 19 \
  {Kontrola pravopisu jmen hr s vyuitm souboru pro kontrolu pravopisu}
menuText C FileMaintNameEvent "Kontrola pravopisu turnaj..." 19 \
  {Kontrola pravopisu nzv turnaj s vyuitm souboru pro kontrolu pravopisu}
menuText C FileMaintNameSite "Kontrola pravopisu mst..." 19 \
  {Kontrola pravopisu mst turnaj s vyuitm souboru pro kontrolu pravopisu}
menuText C FileMaintNameRound "Kontrola pravopisu kol..." 19 \
  {Kontrola pravopisu kol s vyuitm souboru pro kontrolu pravopisu}
menuText C FileReadOnly "Pouze pro ten..." 0 \
  {Nastavit aktuln databzi jako jen ke ten, a zabrnit tak zmnm}
menuText C FileSwitch "Pepnout se do databze" 15 \
  {Pepnout se do jin oteven databze}
menuText C FileExit "Ukonit" 0 {Ukonit Scid}
menuText C FileMaintFixBase "Opravit pokozenou databzi" 0 {Pokusit se opravit pokozenou databzi}

# Edit menu:
menuText C Edit "Editace" 0
menuText C EditAdd "Pidat variantu" 0 {Pidat variantu k tomuto tahu v partii}
menuText C EditDelete "Vymazat variantu" 0 {Vymazat variantu k tomuto tahu}
menuText C EditFirst "Zaadit jako prvn variantu" 0 \
  {Zaadit variantu na prvn msto v seznamu variant}
menuText C EditMain "Povit stvajc variantu na hlavn" 30 \
  {Povit stvajc variantu na hlavn variantu}
menuText C EditTrial "Zkusit variantu" 1 \
    {Spustit/Ukonit zkuebn md pro testovn mylenky na achovnici}
menuText C EditStrip "Odstranit" 0 {Odstranit komente nebo varianty z tto partie}
menuText C EditUndo "Vzt zpt" 0 {Vzt zpt posledn zmnu v partii}
# ====== TODO To be translated ======
menuText C EditRedo "Redo" 0 {Redo last game change}
menuText C EditStripComments "Komente" 0 \
  {Odstranit vechny poznmky a anotace z tto partie}
menuText C EditStripVars "Varianty" 0 {Odstranit vechny varianty z tto partie}
menuText C EditStripBegin "Tahy ze zatku" 5 \
  {Odstranit tahy ze zatku partie}
menuText C EditStripEnd "Tahy do konce" 5 \
  {Odstranit tahy do konce partie}
menuText C EditReset "Vyprzdnit schrnku" 11 \
  {Kompletn vyprzdnn databze schrnka}
menuText C EditCopy "Zkoprovat tuto partii do schrnky" 23 \
  {Zkoprovat tuto parti do databze schrnka}
menuText C EditPaste "Vloit posledn partii ze schrnky" 24 \
  {Vloit aktivn partii z databze schrnka}
menuText C EditPastePGN "Vloit text ze schrnky jako PGN..." 10 \
  {Interpretovat text schrnky jako partii v PGN notaci a vloit ji sem}
menuText C EditSetup "Nastavit vchoz pozici..." 0 \
  {Nastavit vchoz pozici pro tuto partii}
menuText C EditCopyBoard "Koprovat pozici" 4 \
  {Koprovat aktuln pozici ve FEN notaci do textovho vbru (do clipboardu)}
menuText C EditPasteBoard "Vloit poten pozici" 1 \
  {Nastavit poten pozici z aktulnho textovho vbru (z clipboardu)}

# Game menu:
menuText C Game "Partie" 0
menuText C GameNew "Nov partie" 0 \
  {Nastavit novou partii, vechny proveden zmny budou ztraceny}
menuText C GameFirst "Nathnout prvn partii" 10 {Nathnout prvn partii z filtrovanch parti}
menuText C GamePrev "Nathnout pedchoz partii" 13 {Nathnout pedchoz partii z filtrovanch parti}
menuText C GameReload "Znovunathnout aktuln partii" 0 \
  {Znovunataen aktuln partie, vechny doposud proveden zmny budou ztraceny}
menuText C GameNext "Nathnout nsledujc partii" 14 {Nathnout nsledujc partii z filtrovanch parti}
menuText C GameLast "Nathnout posledn partii" 11 {Nathnout posledn partii z filtrovanch parti}
menuText C GameRandom "Nathnout partii nhodn" 1 {Nathnout nhodn vybranou partii z filtru}
menuText C GameNumber "Nathnout partii slo..." 19 \
  {Nathnout partii slo...}
menuText C GameReplace "Uloit: pepsn partie..." 0 \
  {Uloit tuto partii - pepe pvodn verzi}
menuText C GameAdd "Uloit: pidn nov partie..." 1 \
  {Uloit tuto partii jako novou partii v databzi}
menuText C GameDeepest "Identifikace zahjen" 0 \
  {Pejt na koncovou pozici z ECO knihovny, kter odpovd zvolenmu zahjen}
menuText C GameGotoMove "Pejt na tah slo..." 10 \
  {Pejt v aktuln partii do pozice udan slem tahu}
menuText C GameNovelty "Hledat novinku..." 0 \
  {Hledat prvn tah tto partie, kter doposud nebyl hrn}

# Search Menu:
menuText C Search "Hledat" 0
menuText C SearchReset "Vyistit filtr" 0 {Vyistit filtr - vybrny budou vechny partie}
menuText C SearchNegate "Negace filtru" 0 {Negace filtru -  vybrny budou pouze partie vyat pedchzejcm filtrem}
menuText C SearchCurrent "Aktuln pozice..." 0 {Hledat aktuln pozici}
menuText C SearchHeader "Hlavika..." 0 {Hledat podle hlaviky partie (hr, turnaj apod.)}
menuText C SearchMaterial "Materil/Vzor..." 0 {Hledat podle materilu nebo podle vzoru}
menuText C SearchUsing "Hledat pomoc souboru voleb..." 14 {Hledat s pouitm voleb zapsanch v souboru}

# Windows menu:
menuText C Windows "Okna" 0
menuText C WindowsComment "Editor koment" 0 {Otevt/zavt editor koment}
menuText C WindowsGList "Seznam parti" 2 {Otevt/zavt okno se seznamem parti}
menuText C WindowsPGN "Okno PGN" 5 {Otevt/zavt okno PGN}
menuText C WindowsPList "Vyhledva hr" 11 {Otevt/zavt okno vyhledvae hr}
menuText C WindowsTmt "Vyhledva turnaj" 11 {Otevt/zavt okno vyhledvae turnaj}
menuText C WindowsSwitcher "Vbr databze" 0 {Otevt/zavt okno pro vbr databz}
menuText C WindowsMaint "Okno drby" 6 {Otevt/zavt okno drby}
menuText C WindowsECO "ECO prohle" 1 {Otevt/zavt okno ECO prohlee}
menuText C WindowsRepertoire "Editor repertoru" 7 {Otevt/zavt editor repertoru zahjen}
menuText C WindowsStats "Statistick okno" 0 {Otevt/zavt statistick okno filtru}
menuText C WindowsTree "Stromov okno" 4 {Otevt/zavt stromov okno}
menuText C WindowsTB "Okno tabulky koncovek" 13 {Otevt/zavt okno tabulek koncovek}
menuText C WindowsBook "Okno knihovny zahjen" 0 {Otevt/zavt okno knihovny zahjen}
menuText C WindowsCorrChess "Korespondenn okno" 0 {Otevt/zavt okno knihovny zahjen}

# Tools menu:
menuText C Tools "Nstroje" 3
menuText C ToolsAnalysis "Program pro analzu..." 0 \
  {Spustit/zastavit achov program pro analzu pozice}
menuText C ToolsAnalysis2 "Program pro analzu #2..." 20 \
  {Spustit/zastavit druh achov program pro analzu pozice}
menuText C ToolsCross "Turnajov tabulka" 0 {Ukzat turnajovou tabulku pro tuto partii}
menuText C ToolsEmail "Email manaer" 1 \
  {Otevt/zavt okno emailovho manaera}
menuText C ToolsFilterGraph "Graf filtru" 0 \
  {Otevt/zavt okno grafu filtru}
menuText C ToolsAbsFilterGraph "Abs. graf filtru" 7 {Otevt/zavt okno grafu filtru s absolutnmi hodnotami}
menuText C ToolsOpReport "Profil zahjen" 7 \
  {Generovat profil zahjen pro aktuln pozic}
menuText C ToolsOpenBaseAsTree "Otevt databzi jako strom" 0   {Otevt databzi a pout ji ve stromovm okn}
menuText C ToolsOpenRecentBaseAsTree "Otevt nedvnou databzi jako strom" 0   {Otevt nedvnou databzi a pout ji ve stromovm okn}
menuText C ToolsTracker "Stopa figur"  0 {Otevt okno stopae figur}
menuText C ToolsTraining "Trnink"  0 {Trninkov nstroje (taktika, zahjen,...) }
menuText C ToolsTacticalGame "Taktick partie"  0 {Hrt partii s taktickm zamenm}
menuText C ToolsSeriousGame "Vn partie"  0 {Hrt vnou partii}
menuText C ToolsTrainOpenings "Zahjen"  0 {Trnovat s repertorem zahjen}
menuText C ToolsTrainReviewGame "Projt partii"  0 {Hdat tahy sehran v partii}
menuText C ToolsTrainTactics "Taktika"  0 {eit taktick koly}
menuText C ToolsTrainCalvar "Propoet variant"  0 {Trnink propotu variant}
menuText C ToolsTrainFindBestMove "Nalzt nejlep tah"  0 {Nalzt nejlep tah}
menuText C ToolsTrainFics "Hrt na internetu"  0 {Hrt na freechess.org}
# ====== TODO To be translated ======
menuText C ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText C ToolsBookTuning "Ladn knihovny zahjen" 0 {Ladn knihovny zahjen}
menuText C ToolsConnectHardware "Pipojit hardware" 0 {Pipojit extern hardware}
menuText C ToolsConnectHardwareConfigure "Konfigurovat..." 0 {Konfigurovat extern hardware a pipojen}
menuText C ToolsConnectHardwareNovagCitrineConnect "Pipojit Novag Citrine" 0 {Pipojit Novag Citrine}
menuText C ToolsConnectHardwareInputEngineConnect "Pipojit vstupn pstroj" 0 {Pipojit vstupn pstroj (nap. DGT)}
menuText C ToolsPInfo "Informace o hrch"  0 \
  {Otevt/aktualizovat okno s informacemi o hrch}
menuText C ToolsPlayerReport "Profil hre..." 7 \
  {Generovat profil hre}
menuText C ToolsRating "Graf ratingu" 5 \
  {Zobrazit graf vvoje ratingu hr aktuln partie}
menuText C ToolsScore "Graf skre" 6  {Zobrazit okno grafu skre}
menuText C ToolsExpCurrent "Export aktuln partie" 7 \
  {Zapsat aktuln partii do textovho souboru}
menuText C ToolsExpCurrentPGN "Export partie do PGN souboru..." 17 \
  {Zapsat aktuln partii do PGN souboru}
menuText C ToolsExpCurrentHTML "Export partie do HTML souboru..." 17 \
  {Zapsat aktuln partii do HTML souboru}
menuText C ToolsExpCurrentHTMLJS "Exportovat partii do souboru HTML s JavaScriptem..." 15 {Uloit aktuln partii do souboru s HTML a JavaScriptem}  
menuText C ToolsExpCurrentLaTeX "Export partie do LaTeX souboru..." 17 \
  {Zapsat aktuln partii do LaTeX souboru}
menuText C ToolsExpFilter "Export filtrovanch parti" 7 \
  {Zapsat vechny filtrovan partie do textovho souboru}
menuText C ToolsExpFilterPGN "Export filtrovanch parti do PGN souboru..." 30 \
  {Zapsat vechny filtrovan partie do PGN souboru}
menuText C ToolsExpFilterHTML "Export filtrovanch parti do HTML souboru..." 30 \
  {Zapsat vechny filtrovan partie do HTML souboru}
menuText C ToolsExpFilterHTMLJS "Exportovat filtr do souboru HTML s JavaScriptem..." 17 {Uloit vechny vyfiltrovan partie do souboru HTML s JavaScriptem}  
menuText C ToolsExpFilterLaTeX "Export filtrovanch parti do LaTeX souboru..." 30 \
  {Zapsat vechny filtrovan partie do LaTeX souboru}
menuText C ToolsImportOne "Import jedn PGN partie..." 7 \
  {Importovat partii z PGN zpisu}
menuText C ToolsImportFile "Import souboru PGN parti..." 10 \
  {Importovat partie z PGN souboru}
menuText C ToolsStartEngine1 "Spustit hern program 1" 0  {Spustit hern program 1}
menuText C ToolsStartEngine2 "Spustit hern program 2" 0  {Spustit hern program 2}
menuText C ToolsCaptureBoard "Uloit aktuln achovnici..." 0  {Uloit aktuln achovnici jako obrzek.}
menuText C Play "Hra" 0
menuText C CorrespondenceChess "Korespondenn ach" 0 {Funkce pro korespondenn ach zaloen na e-mailu a Xfcc}
menuText C CCConfigure "Konfigurovat..." 0 {Konfigurovat extern nstroje a obecn nastaven}
menuText C CCConfigRelay "Konfigurovat sledovn..." 10 {Konfigurovat partie ke sledovn}
menuText C CCOpenDB "Otevt databzi..." 0 {Otevt vchoz korespondenn databzi}
menuText C CCRetrieve "Sthnout partie" 0 {Sthnout partie s pomoc externho (Xfcc-)nstroje}
menuText C CCInbox "Zpracovat pchoz schrnku" 0 {Zpracovat vechny soubory v pchoz schrnce scidu}
menuText C CCSend "Poslat tah" 0 {Poslat tah prostednictvm e-mailu nebo externho (Xfcc-)nstroje}
menuText C CCResign "Vzdt" 0 {Vzdt (nikoliv prostednictvm e-mailu)}
menuText C CCClaimDraw "Reklamovat remzu" 0 {Poslat tah a reklamovat remzu (nikoliv prostednictvm e-mailu)}
menuText C CCOfferDraw "Nabdnout remzu" 0 {Odeslat tah a nabdnout remzu (nikoliv prostednictvm e-mailu)}
menuText C CCAcceptDraw "Pijmout remzu" 0 {Pijmout nabdku remzy (nikoliv prostednictvm e-mailu)}
menuText C CCNewMailGame "Nov e-mailov partie..." 0 {Zat novou e-mailovou partii}
menuText C CCMailMove "Mailovat tah..." 0 {Odeslat tah soupei prostednictvm e-mailu}
menuText C CCGamePage "Strnka partie..." 0 {Vyvolat partii pomoc webovho prohlee}
menuText C CCEditCopy "Zkoprovat seznam parti do schrnky" 0 {Zkoprovat partie jako CVS seznam do schrnky}

# Options menu:
menuText C Options "Volby" 0
menuText C OptionsBoard "achovnice" 1 {Volby zobrazen achovnice}
menuText C OptionsBoardSize "Velikost achovnice" 0 {Zmnit velikost achovnice}
menuText C OptionsBoardPieces "Styl figur" 0 \
  {Zmnit styl zobrazen figur}
menuText C OptionsBoardColors "Barvy..." 0 {Zmnit barvy achovnice}
menuText C OptionsBoardGraphics "Pole..." 0 {Vybrat vzorek pro pole}
translate C OptionsBGW {Vybrat vzorek pro pole}
translate C OptionsBoardGraphicsText {Vybrat grafick soubory pro bl a ern pole:}
menuText C OptionsBoardNames "Jmna mch hr..." 0 {Editovat jmna mch hr}
menuText C OptionsExport "Volby exportu" 7 {Zmnit volby pro textov export}
menuText C OptionsFonts "Fonty" 2 {Zmnit fonty}
menuText C OptionsFontsRegular "Zkladn" 0 {Zmnit zkladn font}
menuText C OptionsFontsMenu "Menu" 1 {Zmnit font pro menu}
menuText C OptionsFontsSmall "Mal" 0 {Zmnit mal font}
# ====== TODO To be translated ======
menuText C OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText C OptionsFontsFixed "Fixn" 0 {Zmnit font fixn ky}
menuText C OptionsGInfo "Informace o partii" 0 {Volby pro informace o partii}
menuText C OptionsLanguage "Jazyk" 0 {Vybrat jazyk menu}
menuText C OptionsMovesTranslatePieces "Pekldat figury" 0 {Pekldat prvn psmena figur}
menuText C OptionsMovesHighlightLastMove "Zvrazovat posledn tah" 0 {Zvrazovat posledn tah}
menuText C OptionsMovesHighlightLastMoveDisplay "Ukzat" 0 {Zobrazit zvraznn posledn tah}
menuText C OptionsMovesHighlightLastMoveWidth "ka" 0 {Tlouka ry}
menuText C OptionsMovesHighlightLastMoveColor "Barva" 0 {Barva ry}
# ====== TODO To be translated ======
menuText C OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText C OptionsMoves "Tahy" 0 {Volby pro zadvn tah}
menuText C OptionsMovesAsk "Ptt se ped nahrazenm tah" 0 \
  {Ptt se vdy ped pepsnm existujcho tahu}
menuText C OptionsMovesAnimate "as animace" 4 \
  {Nastavit as pouit na animaci tah}
menuText C OptionsMovesDelay "Prodleva pi automatickm pehrvn..." 1 \
  {Nastavit asovou prodlevu pi automatickm pehrvn}
menuText C OptionsMovesCoord "Souadnicov zadvn tah" 0 \
  {Povolit zadvn tah pomoc souadnic (nap. "g1f3")}
menuText C OptionsMovesSuggest "Ukzat navrhovan tahy" 0 \
  {Zapnout/vypnout zobrazovn navrhovanch tah}
menuText C OptionsShowVarPopup "Zobrazit okno variant" 0 {Zapnout/vypnout zobrazen okna variant}  
menuText C OptionsMovesSpace "Pidat mezeru za slo tahu" 0 {Pidat mezeru za slo tahu}  
menuText C OptionsMovesKey "Klvesnicov doplovn" 13 \
  {Zapnout/vypnout automatick doplovn tah zadvanch klvesnic}
menuText C OptionsMovesShowVarArrows "Zobrazit ipky pro varianty" 0 {Zapnout/vypnout zobrazovn ipek ukazujcch tahy variant}
menuText C OptionsNumbers "Formt sel" 0 {Zvolit formt sel}
menuText C OptionsStartup "Pi sputn" 4 {Zvolit okna, kter se otevou pi sputn}
menuText C OptionsTheme "Tma" 0 {Zmnit vzhled uivatelskho rozhran}
menuText C OptionsWindows "Okna" 0 {Volby oken}
menuText C OptionsWindowsIconify "Automatick minimalizace" 12 \
   {Minimalizovat vechna okna pi minimalizovn hlavnho okna}
menuText C OptionsWindowsRaise "Automaticky do poped" 15 \
  {Dt do poped jist okna, jsou-li zakryt}
menuText C OptionsSounds "Zvuky..." 2 {Konfigurovat zvuky oznamujc tah}
menuText C OptionsWindowsDock "Zaparkovat okna" 0 {Zaparkovat okna}
menuText C OptionsWindowsSaveLayout "Uloit rozloen" 0 {Uloit rozloen}
menuText C OptionsWindowsRestoreLayout "Obnovit rozloen" 0 {Obnovit rozloen}
menuText C OptionsWindowsShowGameInfo "Ukzat informace o partii" 0 {Ukzat informace o partii}
menuText C OptionsWindowsAutoLoadLayout "Automaticky nathnout prvn rozloen" 0 {Automaticky na zatku nathnout prvn rozloen}
menuText C OptionsToolbar "Nstrojov lita..." 11 \
  {Konfigurovat nstrojovou litu hlavnho okna}
menuText C OptionsECO "Nathnout ECO soubor..." 10 {Nathnout soubor s klasifikac ECO}
menuText C OptionsSpell "Nathnout soubor pro kontrolu pravopisu..." 21 \
  {Nathnout soubor Scidu pro kontrolu pravopisu}
menuText C OptionsTable "Adres pro tabulky koncovek..." 14 \
  {Vybrat soubor s tabulkami koncovek; vechny tabulky koncovek v jeho adresi budou pouity}
menuText C OptionsRecent "Nedvn soubory..." 0 \
  {Zmnit poet nedvnch soubor zobrazovanch v menu Soubor}
menuText C OptionsBooksDir "Adres knihoven zahjen..." 0 {Nastaven adrese knihoven zahjen}
menuText C OptionsTacticsBasesDir "Adres databz..." 0 {Nastaven adres taktickch (trninkovch) databz}
menuText C OptionsSave "Uloit volby" 0 \
  "Uloit vechny nastaviteln volby do souboru $::optionsFile"
menuText C OptionsAutoSave "Automaticky ukldat volby pi ukonen" 20 \
  {Automaticky ukldat vechny volby pi ukonen Scidu}

# Help menu:
menuText C Help "Npovda" 0
menuText C HelpContents "Obsah" 0 {Zobrazit strnku npovdy s obsahem}
menuText C HelpIndex "Index" 0 {Zobrazit strnku npovdy s indexem}
menuText C HelpGuide "Rychl prvodce" 7 {Zobrazit strnku npovdy s rychlm prvodcem}
menuText C HelpHints "Rady" 0 {Zobrazit strnku npovdy s radami}
menuText C HelpContact "Kontakt" 0 {Zobrazit strnku npovdy s kontaktnmi informacemi}
menuText C HelpTip "Tip dne" 4 {Zobrazit uiten tip Scidu}
menuText C HelpStartup "Startovac okno" 0 {Zobrazit startovac okno}
menuText C HelpAbout "O aplikaci Scid" 2 {Informace o aplikaci Scid}

# Game info box popup menu:
menuText C GInfoHideNext "Skrt nsledujc tah" 0
menuText C GInfoMaterial "Ukzat hodnoty materilu" 15
menuText C GInfoFEN "Ukzat FEN" 7
menuText C GInfoMarks "Zobrazovat barevn pole a ipky" 11
menuText C GInfoWrap "Zalamovat dlouh dky" 0
menuText C GInfoFullComment "Zobrazit pln koment" 15
menuText C GInfoPhotos "Zobrazit fotky" 10
menuText C GInfoTBNothing "Tabulky koncovek: nic" 19
menuText C GInfoTBResult "Tabulky koncovek: jen vsledek" 23
menuText C GInfoTBAll "Tabulky koncovek: vsledek a nejlep tahy" 39
menuText C GInfoDelete "Vymazat/Nemazat tuto partii" 0
menuText C GInfoMark "Oznait/Odznait tuto partii" 0
menuText C GInfoInformant "Konfigurovat informtorov hodnoty" 0

# Main window buttons:
helpMsg C .main.fbutton.button.start {Jdi na zatek partie  (klvesa: Home)}
helpMsg C .main.fbutton.button.end {Jdi na konec partie  (klvesa: End)}
helpMsg C .main.fbutton.button.back {Jdi o jeden tah nazpt  (klvesa: ipkaVlevo)}
helpMsg C .main.fbutton.button.forward {Jdi o jeden tah dopedu  (klvesa: ipkaVpravo)}
helpMsg C .main.fbutton.button.intoVar {Sko do varianty  (klvesov zkratka: v)}
helpMsg C .main.fbutton.button.exitVar {Opus aktuln variantu  (klvesov zkratka: z)}
helpMsg C .main.fbutton.button.flip {Oto achovnici  (klvesov zkratka: .)}
helpMsg C .main.fbutton.button.coords {Zapnout/Vypnout zobrazovn souadnic achovnice  (klvesov zkratka: 0)}
helpMsg C .main.fbutton.button.stm {Zapnout/Vypnout zobrazovn ikony strany, kter je na tahu}
helpMsg C .main.fbutton.button.autoplay {Automatick pehrvn tah  (klvesa: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg C .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg C .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg C .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate C Back {Zpt}
translate C Browse {Prohlet}
translate C Cancel {Zruit}
translate C Continue {Pokraovat}
translate C Clear {Vyistit}
translate C Close {Zavt}
translate C Contents {Obsah}
translate C Defaults {Pedvolen}
translate C Delete {Vymazat}
translate C Graph {Graf}
translate C Help {Npovda}
translate C Import {Import}
translate C Index {Index}
translate C LoadGame {Nathnout partii}
translate C BrowseGame {Prohldnout partii}
translate C MergeGame {Pipojit partii}
translate C MergeGames {Pipojit partie}
translate C Preview {Nhled}
translate C Revert {Vrtit se}
translate C Save {Uloit}
translate C Search {Hledat}
translate C Stop {Stop}
translate C Store {Uschovat}
translate C Update {Aktualizovat}
translate C ChangeOrient {Zmnit orientaci okna}
translate C ShowIcons {Zobrazit ikony}
translate C None {Nic}
translate C First {Prvn}
translate C Current {Aktuln}
translate C Last {Posledn}

# General messages:
translate C game {partie}
translate C games {partie}
translate C move {tah}
translate C moves {tahy}
translate C all {ve}
translate C Yes {Ano}
translate C No {Ne}
translate C Both {Oba}
translate C King {Krl}
translate C Queen {Dma}
translate C Rook {V}
translate C Bishop {Stelec}
translate C Knight {Jezdec}
translate C Pawn {Pec}
translate C White {Bl}
translate C Black {ern}
translate C Player {Hr}
translate C Rating {Rating}
translate C RatingDiff {Rozdl v ratingu (Bl - ern)}
translate C AverageRating {Prmrn rating}
translate C Event {Turnaj}
translate C Site {Msto}
translate C Country {Zem}
translate C IgnoreColors {Ignorovat barvy}
translate C Date {Datum}
translate C EventDate {Datum turnaje}
translate C Decade {Dekda}
translate C Year {Rok}
translate C Month {Msc}
translate C Months {Leden nor Bezen Duben Kvten erven ervenec Srpen Z jen Listopad Prosinec}
translate C Days {Ned Pon te St tv Pt Sob}
translate C YearToToday {Rok zpt}
translate C Result {Vsledek}
translate C Round {Kolo}
translate C Length {Dlka}
translate C ECOCode {ECO kd}
translate C ECO {ECO}
translate C Deleted {Vymazn(a)}
translate C SearchResults {Hledat vsledky}
translate C OpeningTheDatabase {Databze zahjen}
translate C Database {Databze}
translate C Filter {Filtr}
translate C noGames {dn partie}
translate C allGames {vechny partie}
translate C empty {przdn}
translate C clipbase {schrnka}
translate C score {skre}
translate C StartPos {Poten pozice}
translate C Total {Celkem}
translate C readonly {jen ke ten}

# Standard error messages:
translate C ErrNotOpen {To nen oteven databze.}
translate C ErrReadOnly {Tato databze je jen ke ten; neme bt zmnna.}
translate C ErrSearchInterrupted {Hledn bylo perueno; vsledky nejsou kompletn.}

# Game information:
translate C twin {zdvojen}
translate C deleted {vymazan}
translate C comment {koment}
translate C hidden {skryt}
translate C LastMove {Posledn tah}
translate C NextMove {Nsledujc tah}
translate C GameStart {Zatek partie}
translate C LineStart {Zatek srie tah}
translate C GameEnd {Konec partie}
translate C LineEnd {Konec srie tah}

# Player information:
translate C PInfoAll {Vsledky <b>vech</b> parti}
translate C PInfoFilter {Vsledky <b>filtrovanch</b> parti}
translate C PInfoAgainst {Vsledky proti}
translate C PInfoMostWhite {Nejastj zahjen za bl}
translate C PInfoMostBlack {Nejastj zahjen za ern}
translate C PInfoRating {Historie ratingu}
translate C PInfoBio {Biografie}
translate C PInfoEditRatings {Editovat ratingy}

# Tablebase information:
translate C Draw {Remza}
translate C stalemate {pat}
translate C withAllMoves {se vemi tahy}
translate C withAllButOneMove {se vemi tahy krom poslednho}
translate C with {s}
translate C only {jen}
translate C lose {prohrt}
translate C loses {prohrv}
translate C allOthersLose {vechny ostatn prohrvaj}
translate C matesIn {matuje bhem}
translate C hasCheckmated {zmatoval}
translate C longest {nejdel}
translate C WinningMoves {vyhrvajc tahy}
translate C DrawingMoves {remizujc tahy}
translate C LosingMoves {prohrvajc tahy}
translate C UnknownMoves {tahy s neznmm vsledkem}

# Tip of the day:
translate C Tip {Tip}
translate C TipAtStartup {Tip pi sputn}

# Tree window menus:
menuText C TreeFile "Soubor" 0
menuText C TreeFileFillWithBase "Naplnit cache z databze" 0 {Naplnit cachovac soubor vemi partiemi z aktuln databze}
menuText C TreeFileFillWithGame "Naplnit cache parti" 0 {Naplnit cachovac soubor aktuln parti z aktuln databze}
menuText C TreeFileSetCacheSize "Velikost cache" 0 {Nastavit velikost cache}
menuText C TreeFileCacheInfo "Informace o cache" 0 {Zskat informaci o vyuit cache}
menuText C TreeFileSave "Uloit cache soubor" 0 \
  {Uloit stromov cache (.stc) soubor}
menuText C TreeFileFill "Naplnit cache soubor" 0 \
  {Naplnit cache soubor nejbnjmi pozicemi zahjen}
menuText C TreeFileBest "Seznam nejlepch parti" 0 {Zobrazit seznam nejlepch parti  stromu}
menuText C TreeFileGraph "Okno grafu" 0 {Zobrazit graf pro tuto vtev stromu}
menuText C TreeFileCopy "Koprovat text stromu do clipboardu" 0 \
  {Koprovat stromov statistiky do textovho vbru}
menuText C TreeFileClose "Zavt stromov okno" 0 {Zavt stromov okno}
menuText C TreeMask "Maska" 0
menuText C TreeMaskNew "Nov" 0 {Nov maska}
menuText C TreeMaskOpen "Otevt" 0 {Otevt masku}
menuText C TreeMaskOpenRecent "Otevt nedvnou" 0 {Otevt nedvnou masku}
menuText C TreeMaskSave "Uloit" 0 {Uloit masku}
menuText C TreeMaskClose "Zavt" 0 {Uzavt masku}
menuText C TreeMaskFillWithGame "Naplnit parti" 0 {Naplnit masku parti}
menuText C TreeMaskFillWithBase "Naplnit databz" 0 {Naplnit masku vemi partiemi z databze}
menuText C TreeMaskInfo "Informace" 0 {Ukzat statistiku aktuln masky}
menuText C TreeMaskDisplay "Ukzat mapu masky" 0 {Ukzat data masky ve form stromu}
menuText C TreeMaskSearch "Hledat" 0 {Hledat v aktuln masce}
menuText C TreeSort "adit" 2
menuText C TreeSortAlpha "Abecedn" 0
menuText C TreeSortECO "ECO kd" 0
menuText C TreeSortFreq "Frekvence" 0
menuText C TreeSortScore "Skre" 0
menuText C TreeOpt "Volby" 0
menuText C TreeOptSlowmode "Pomal reim" 0 {Pomal reim aktualizace (vysok pesnost)}
menuText C TreeOptFastmode "Rychl reim" 0 {Rychl reim aktualizace (beze zmny poad tah)}
menuText C TreeOptFastAndSlowmode "Rychl a pomal reim" 0 {Rychl reim a potom pomal reim aktualizace}
menuText C TreeOptStartStop "Automatick aktualizace" 0 {Pepnout automatick aktualizace stromovho okna}
menuText C TreeOptLock "Zamknout" 0 {Zamknout/Odemknout strom k aktuln databzi}
menuText C TreeOptTraining "Trnink" 0 {Zapnout/Vypnout stromov trninkov md}
menuText C TreeOptAutosave "Automatick ukldn cache souboru" 0 \
  {Automatick ukldn cache souboru pi uzaven stromovho okna}
menuText C TreeHelp "Npovda" 0
menuText C TreeHelpTree "Npovda - Strom" 11
menuText C TreeHelpIndex "Index npovdy" 0
translate C SaveCache {Uloit cache}
translate C Training {Trnink}
translate C LockTree {Zamknout}
translate C TreeLocked {Zamknuto}
translate C TreeBest {Nejlep}
translate C TreeBestGames {Nejlep partie stromu}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate C TreeTitleRow \
  {    Tah    ECO       Frekvence    Skre  PrElo Perf  PrRok %remz}
translate C TreeTotal {CELKEM}
translate C DoYouWantToSaveFirst {Chcete nejprve uloit}
translate C AddToMask {Pidat do masky}
translate C RemoveFromMask {Odstranit z masky}
translate C AddThisMoveToMask {Pidat tento tah do masky}
translate C SearchMask {Hledat v masce}
translate C DisplayMask {Zobrazit masku}
translate C Nag {Nag kd}
translate C Marker {Znaka}
translate C Include {Zahrnout}
translate C Exclude {Vylouit}
translate C MainLine {Hlavn varianta}
translate C Bookmark {Zloka}
translate C NewLine {Nov varianta}
translate C ToBeVerified {K proven}
translate C ToTrain {Trnovat}
translate C Dubious {Pochybn}
translate C ToRemove {Odstranit}
translate C NoMarker {dn znaka}
translate C ColorMarker {Barva}
translate C WhiteMark {Bl}
translate C GreenMark {Zelen}
translate C YellowMark {lut}
translate C BlueMark {Modr}
translate C RedMark {erven}
translate C CommentMove {Okomentovat tah}
translate C CommentPosition {Okomentovat pozici}
translate C AddMoveToMaskFirst {Nejprve pidejte tah do masky}
translate C OpenAMaskFileFirst {Nejprve otevete soubor masky}
translate C Positions {Pozice}
translate C Moves {Tahy}

# Finder window:
menuText C FinderFile "Soubor" 0
menuText C FinderFileSubdirs "Hledat v podadresch" 0
menuText C FinderFileClose "Zavt vyhledva soubor" 0
menuText C FinderSort "adit" 2
menuText C FinderSortType "Typ" 0
menuText C FinderSortSize "Velikost" 0
menuText C FinderSortMod "Zmnno" 0
menuText C FinderSortName "Jmno" 0
menuText C FinderSortPath "Cesta" 0
menuText C FinderTypes "Typy" 0
menuText C FinderTypesScid "Databze Scidu" 0
menuText C FinderTypesOld "Databze Scidu starho formtu" 15
menuText C FinderTypesPGN "PGN soubory" 0
menuText C FinderTypesEPD "EPD soubory" 0
menuText C FinderTypesRep "Repertorov soubory" 0
menuText C FinderHelp "Npovda" 0
menuText C FinderHelpFinder "Npovda - Vyhledva soubor" 11
menuText C FinderHelpIndex "Index npovdy" 0
translate C FileFinder {Vyhledva soubor}
translate C FinderDir {Adres}
translate C FinderDirs {Adrese}
translate C FinderFiles {Soubory}
translate C FinderUpDir {nahoru}
translate C FinderCtxOpen {Otevt}
translate C FinderCtxBackup {Zlohovat}
translate C FinderCtxCopy {Koprovat}
translate C FinderCtxMove {Pesunout}
translate C FinderCtxDelete {Smazat}

# Player finder:
menuText C PListFile "Soubor" 0
menuText C PListFileUpdate "Aktualizovat" 0
menuText C PListFileClose "Zavt vyhledva hr" 0
menuText C PListSort "adit" 2
menuText C PListSortName "Jmno" 0
menuText C PListSortElo "ELO" 0
menuText C PListSortGames "Partie" 0
menuText C PListSortOldest "Nejstar" 3
menuText C PListSortNewest "Nejnovj" 3

# Tournament finder:
menuText C TmtFile "Soubor" 0
menuText C TmtFileUpdate "Aktualizovat" 0
menuText C TmtFileClose "Zavt vyhledva soubor" 0
menuText C TmtSort "adit" 2
menuText C TmtSortDate "Datum" 0
menuText C TmtSortPlayers "Hri" 0
menuText C TmtSortGames "Partie" 0
menuText C TmtSortElo "ELO" 0
menuText C TmtSortSite "Msto" 0
menuText C TmtSortEvent "Turnaj" 0
menuText C TmtSortWinner "Vtz" 0
translate C TmtLimit "Limit seznamu"
translate C TmtMeanElo "Prmrn ELO"
translate C TmtNone "dn odpovdajc turnaje nebyly nalezeny."

# Graph windows:
menuText C GraphFile "Soubor" 0
menuText C GraphFileColor "Uloit jako barevn Postscript..." 12
menuText C GraphFileGrey "Uloit jako ernobl Postscript..." 13
menuText C GraphFileClose "Zavt okno" 0
menuText C GraphOptions "Volby" 0
menuText C GraphOptionsWhite "Bl" 0
menuText C GraphOptionsBlack "ern" 1
menuText C GraphOptionsBoth "Oba" 0
menuText C GraphOptionsPInfo "Informace o hri" 0
translate C GraphFilterTitle "Graf filtru: etnost na 1000 parti"
translate C GraphAbsFilterTitle "Graf filtru: etnost parti"
translate C ConfigureFilter {Konfigurovat x-souadnici pro rok, rating a tahy}
translate C FilterEstimate "Odhadnout"
translate C TitleFilterGraph "Scid: Graf filtru"

# Analysis window:
translate C AddVariation {Pidat variantu}
translate C AddAllVariations {Pidat vechny varianty}
translate C AddMove {Pidat tah}
translate C Annotate {Anotace}
translate C ShowAnalysisBoard {Ukzat achovnici analzy}
translate C ShowInfo {Ukzat informaci o hernm programu}
translate C FinishGame {Ukonit partii}
translate C StopEngine {Zastavit hern program}
translate C StartEngine {Spustit hern program}
translate C LockEngine {Uzamt hern program v aktuln pozici}
translate C AnalysisCommand {Program pro analzu}
translate C PreviousChoices {Pedchoz vybran programy}
translate C AnnotateTime {Nastavit as mezi tahy v sekundch}
translate C AnnotateWhich {Pidat varianty}
translate C AnnotateAll {Pro tahy obou stran}
translate C AnnotateAllMoves {Anotovat vechny tahy}
translate C AnnotateWhite {Pouze pro tahy blho}
translate C AnnotateBlack {Pouze pro tahy ernho}
translate C AnnotateBlundersOnly {Jestlie tah v partii je evidentn hrub chyba}
translate C AnnotateBlundersOnlyScoreChange {Analza ukazuje hrubou chybu, jestlie se skre zmn z/na: }
translate C BlundersThreshold {Hranice}
# TODO: Translate
translate C ScoreAllMoves {Score all moves}
translate C LowPriority {Nzk priorita procesoru}
translate C ClickHereToSeeMoves {Kliknte sem pro zobrazen tah}
translate C ConfigureInformant {Konfigurovat informtor}
translate C Informant!? {Zajmav tah}
translate C Informant? {Slab tah}
translate C Informant?? {Hrub chyba}
translate C Informant?! {Pochybn tah}
translate C Informant+= {Bl m malou vhodu}
translate C Informant+/- {Bl m stedn vhodu}
translate C Informant+- {Bl m rozhodujc vhodu}
translate C Informant++- {Partie je povaovna za vyhranou}
translate C Book {Knihovna zahjen}
translate C OtherBookMoves {Soupeova knihovna zahjen}
translate C OtherBookMovesTooltip {Tahy, na kter m soupe odpov}
# Analysis Engine open dialog:
translate C EngineList {Seznam hernch program pro analzu}
translate C EngineName {Jmno}
translate C EngineCmd {Pkaz}
translate C EngineArgs {Parametry}
translate C EngineDir {Adres}
translate C EngineElo {ELO}
translate C EngineTime {Datum}
translate C EngineNew {Nov}
translate C EngineEdit {Editace}
translate C EngineRequired {Tun vyznaen poloky jsou povinn; ostatn jsou voliteln}

# Stats window menus:
menuText C StatsFile "Soubor" 0
menuText C StatsFilePrint "Vytisknout do souboru..." 0
menuText C StatsFileClose "Zavt okno" 0
menuText C StatsOpt "Volby" 0

# PGN window menus:
menuText C PgnFile "Soubor" 0
menuText C PgnFileCopy "Koprovat partii do clipboardu" 0
menuText C PgnFilePrint "Vytisknout do souboru..." 0
menuText C PgnFileClose "Zavt okno PGN" 0
menuText C PgnOpt "Zobrazit" 0
menuText C PgnOptColor "Barevn zobrazen" 0
menuText C PgnOptShort "Krtk (tdkov) hlavika" 20
menuText C PgnOptSymbols "Symbolick anotace" 0
menuText C PgnOptIndentC "Odsazovat komente" 10
menuText C PgnOptIndentV "Odsazovat varianty" 10
menuText C PgnOptColumn "Sloupcov styl (jeden tah na dek)" 1
menuText C PgnOptSpace "Mezera za slem tahu" 0
menuText C PgnOptStripMarks "Odstranit kdy barevnch pol a ipek" 0
menuText C PgnOptBoldMainLine "Pout tun text pro tahy hlavn varianty" 4
menuText C PgnColor "Barvy" 0
menuText C PgnColorHeader "Hlavika..." 0
menuText C PgnColorAnno "Anotace..." 0
menuText C PgnColorComments "Komente..." 0
menuText C PgnColorVars "Varianty..." 0
menuText C PgnColorBackground "Pozad..." 0
menuText C PgnColorMain "Hlavn varianta..." 0
menuText C PgnColorCurrent "Pozad aktulnho tahu..." 1
menuText C PgnHelp "Npovda" 0
menuText C PgnHelpPgn "Npovda - Okno PGN " 16
menuText C PgnHelpIndex "Index npovdy" 0
translate C PgnWindowTitle {Zpis partie - partie %u}

# Crosstable window menus:
menuText C CrosstabFile "Soubor" 0
menuText C CrosstabFileText "Vytisknout do textovho souboru..." 14
menuText C CrosstabFileHtml "Vytisknout do HTML souboru..." 14
menuText C CrosstabFileLaTeX "Vytisknout do LaTeX souboru..." 14
menuText C CrosstabFileClose "Zavt okno turnajov tabulky" 0
menuText C CrosstabEdit "Editovat" 0
menuText C CrosstabEditEvent "Turnaj" 0
menuText C CrosstabEditSite "Msto" 0
menuText C CrosstabEditDate "Datum" 0
menuText C CrosstabOpt "Zobrazit" 0
menuText C CrosstabOptAll "Kad s kadm" 0
menuText C CrosstabOptSwiss "vcarsk systm" 3
menuText C CrosstabOptKnockout "Vyazovac" 4
menuText C CrosstabOptAuto "Auto" 0
menuText C CrosstabOptAges "Vk" 0
menuText C CrosstabOptNats "Nrodnost" 0
menuText C CrosstabOptRatings "Rating" 0
menuText C CrosstabOptTitles "Titul" 0
menuText C CrosstabOptBreaks "Vsledky tie-breaku" 10
menuText C CrosstabOptDeleted "Vetn vymazanch parti" 9
menuText C CrosstabOptColors "Barvy (jen pro vcarsk systm)" 0
menuText C CrosstabOptColumnNumbers "slovan sloupce (jen v tabulkch 'kad s kadm')" 3
menuText C CrosstabOptGroup "Skupiny podle skre" 0
menuText C CrosstabSort "adit" 2
menuText C CrosstabSortName "Jmno" 0
menuText C CrosstabSortRating "Rating" 0
menuText C CrosstabSortScore "Skre" 0
menuText C CrosstabColor "Barvy" 0
menuText C CrosstabColorPlain "Prost text" 0
menuText C CrosstabColorHyper "Hypertext" 0
menuText C CrosstabHelp "Npovda" 0
menuText C CrosstabHelpCross "Npovda - Turnajovou tabulku" 11
menuText C CrosstabHelpIndex "Index npovdy" 0
translate C SetFilter {Nastavit filtr}
translate C AddToFilter {Pidat do filtru}
translate C Swiss {vcarsk systm}
translate C Category {Kategorie}

# Opening report window menus:
menuText C OprepFile "Soubor" 0
menuText C OprepFileText "Vytisknout do textovho souboru..." 14
menuText C OprepFileHtml "Vytisknout do HTML souboru..." 14
menuText C OprepFileLaTeX "Vytisknout do LaTeX souboru..." 14
menuText C OprepFileOptions "Volby" 0
menuText C OprepFileClose "Zavt okno s profilem" 0
menuText C OprepFavorites "Oblben" 0
menuText C OprepFavoritesAdd "Pidat profil..." 0
menuText C OprepFavoritesEdit "Editovat oblben profily..." 0
menuText C OprepFavoritesGenerate "Generovat profil..." 0
menuText C OprepHelp "Npovda" 0
menuText C OprepHelpReport "Npovda - Profil zahjen" 11
menuText C OprepHelpIndex "Index npovdy" 11

# Repertoire editor:
menuText C RepFile "Soubor" 0
menuText C RepFileNew "Nov" 0
menuText C RepFileOpen "Otevt..." 0
menuText C RepFileSave "Uloit..." 0
menuText C RepFileSaveAs "Uloit jako..." 7
menuText C RepFileClose "Zavt okno" 0
menuText C RepEdit "Editace" 0
menuText C RepEditGroup "Pidat skupinu" 0
menuText C RepEditInclude "Zahrnout variantu" 0
menuText C RepEditExclude "Vylouit variantu" 0
menuText C RepView "Zobrazit" 0
menuText C RepViewExpand "Rozbalit vechny skupiny" 0
menuText C RepViewCollapse "Sbalit vechny skupiny" 0
menuText C RepSearch "Hledat" 0
menuText C RepSearchAll "Veker repertor..." 0
menuText C RepSearchDisplayed "Pouze zobrazen varianty..." 0
menuText C RepHelp "Npovda" 0
menuText C RepHelpRep "Npovda - Repertor" 11
menuText C RepHelpIndex "Index npovdy" 0
translate C RepSearch "Repertorov vyhledvn"
translate C RepIncludedLines "zahrnut varianty"
translate C RepExcludedLines "vylouen varianty"
translate C RepCloseDialog {Tento repertor obsahuje neuloen zmny.

Opravdu chcete pokraovat a zruit vechny zmny, kter jste uinili?
}

# Header search:
translate C HeaderSearch {Hledat podle hlaviky}
translate C EndSideToMove {Strana na tahu na konci hry}
translate C GamesWithNoECO {Partie bez ECO?}
translate C GameLength {Dlka Partie}
translate C FindGamesWith {Najt partie s pznaky}
translate C StdStart {Nestandardn start}
translate C Promotions {Promny}
translate C Comments {Komente}
translate C Variations {Varianty}
translate C Annotations {Anotace}
translate C DeleteFlag {Mazac pznak}
translate C WhiteOpFlag {Zahjen blho}
translate C BlackOpFlag {Zahjen ernho}
translate C MiddlegameFlag {Stedn hra}
translate C EndgameFlag {Koncovka}
translate C NoveltyFlag {Novinka}
translate C PawnFlag {Pcov struktura}
translate C TacticsFlag {Taktika}
translate C QsideFlag {Hra na dmskm kdle}
translate C KsideFlag {Hra na krlovskm kdle}
translate C BrilliancyFlag {Velmi siln tah}
translate C BlunderFlag {Hrub chyba}
translate C UserFlag {Uivatel}
translate C PgnContains {PGN obsahuje text}
# ====== TODO To be translated ======
translate C Annotator {Annotator}
# ====== TODO To be translated ======
translate C Cmnts {Annotated games only}

# Game list window:
translate C GlistNumber {slo}
translate C GlistWhite {Bl}
translate C GlistBlack {ern}
translate C GlistWElo {B-ELO}
translate C GlistBElo {-ELO}
translate C GlistEvent {Turnaj}
translate C GlistSite {Msto}
translate C GlistRound {Kolo}
translate C GlistDate {Datum}
translate C GlistYear {Rok}
translate C GlistEDate {Datum turnaje}
translate C GlistResult {Vsledek}
translate C GlistLength {Dlka}
translate C GlistCountry {Zem}
translate C GlistECO {ECO}
translate C GlistOpening {Zahjen}
translate C GlistEndMaterial {Materil na konci}
translate C GlistDeleted {Vymazn(a)}
translate C GlistFlags {Pznak}
translate C GlistVars {Varianty}
translate C GlistComments {Komente}
translate C GlistAnnos {Anotace}
translate C GlistStart {Poten pozice}
translate C GlistGameNumber {slo partie}
# ====== TODO To be translated ======
translate C GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate C GlistRating {Rating}
translate C GlistFindText {Hledat text}
translate C GlistMoveField {Pesunout}
translate C GlistEditField {Konfigurovat}
translate C GlistAddField {Pidat}
translate C GlistDeleteField {Odebrat}
translate C GlistWidth {ka}
translate C GlistAlign {Zarovnat}
# ====== TODO To be translated ======
translate C GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate C GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate C GlistAlignC {Align: center}
translate C GlistColor {Barva}
translate C GlistSep {Oddlova}
# ====== TODO To be translated ======
translate C GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate C GlistNewSort {New}
# ====== TODO To be translated ======
translate C GlistAddToSort {Add}
# ====== TODO To be translated ======
translate C GsortSort {Sort...}
# ====== TODO To be translated ======
translate C GsortDate {Date}
# ====== TODO To be translated ======
translate C GsortYear {Year}
# ====== TODO To be translated ======
translate C GsortEvent {Event}
# ====== TODO To be translated ======
translate C GsortSite {Site}
# ====== TODO To be translated ======
translate C GsortRound {Round}
# ====== TODO To be translated ======
translate C GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate C GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate C GsortECO {ECO}
# ====== TODO To be translated ======
translate C GsortResult {Result}
# ====== TODO To be translated ======
translate C GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate C GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate C GsortCountry {Country}
# ====== TODO To be translated ======
translate C GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate C GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate C GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate C GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate C GsortComments {Comments}
# ====== TODO To be translated ======
translate C GsortVariations {Variations}
# ====== TODO To be translated ======
translate C GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate C GsortAscending {Ascending}
# ====== TODO To be translated ======
translate C GsortDescending {Descending}
# ====== TODO To be translated ======
translate C GsortAdd {Add}
# ====== TODO To be translated ======
translate C GsortStore {Store}
# ====== TODO To be translated ======
translate C GsortLoad {Load}
translate C GlistRemoveThisGameFromFilter  {Odstranit tuto partii z filtru}
translate C GlistRemoveGameAndAboveFromFilter  {Odstranit partii (a vechny nad n) z filtru}
translate C GlistRemoveGameAndBelowFromFilter  {Odstranit partii (a vechny pod n) z filtru}
translate C GlistDeleteGame {Smazat/obnovit tuto partii} 
translate C GlistDeleteAllGames {Smazat vechny partii obsaen ve filtru} 
translate C GlistUndeleteAllGames {Obnovit vechny smazan partie obsaen ve filtru} 
translate C GlistMergeGameInBase {Pipojit partii z jin databze} 

# Maintenance window:
translate C DatabaseName {Jmno databze:}
translate C TypeIcon {Symbol:}
translate C NumOfGames {Partie:}
translate C NumDeletedGames {Vymazan partie:}
translate C NumFilterGames {Partie ve filtru:}
translate C YearRange {Rozsah rok:}
translate C RatingRange {Rozsah ratingu:}
translate C Description {Popis}
translate C Flag {Pznak}
translate C CustomFlags {Uivatelsk pznaky}
translate C DeleteCurrent {Vymazat aktuln partii}
translate C DeleteFilter {Vymazat filtrovan partie}
translate C DeleteAll {Vymazat vechny partie}
translate C UndeleteCurrent {Obnovit aktuln partie po vymazn}
translate C UndeleteFilter {Obnovit filtrovan partie po vymazn}
translate C UndeleteAll {Obnovit vechny partie po vymazn}
translate C DeleteTwins {Vymazat zdvojen partie}
translate C MarkCurrent {Oznait aktivn partii}
translate C MarkFilter {Oznait filtrovan partie}
translate C MarkAll {Oznait vechny partie}
translate C UnmarkCurrent {Odznait aktuln partii}
translate C UnmarkFilter {Odznait filtrovan partie}
translate C UnmarkAll {Odznait vechny partie}
translate C Spellchecking {Kontrola pravopisu}
translate C Players {Hri}
translate C Events {Turnaje}
translate C Sites {Msta}
translate C Rounds {Kola}
translate C DatabaseOps {Databzov operace}
translate C ReclassifyGames {ECO klasifikace parti}
translate C CompactDatabase {Zhutnit databzi}
translate C SortDatabase {adit databzi}
translate C AddEloRatings {Pidat ELO rating}
translate C AutoloadGame {Automaticky otevrat partii .}
translate C StripTags {Odstranit PGN znaky}
translate C StripTag {Odstranit znaku}
translate C Cleaner {itn databze}
translate C CleanerHelp {
    itnm databze Scid provede u aktuln databze vechny drbsk akce, kter zvolte v seznamu.

    Pokud zvolte ECO klasifikaci a mazn zdvojench parti pouij se aktuln nastaven z pslunch dialog.
}
translate C CleanerConfirm {
Jakmile je itn jednou sputno, neme ji bt perueno!

Tato akce me pro velk databze trvat dlouhou dobu v zvislosti na funkcch, kter jste zvolili, a v zvislosti na jejich stvajcm nastaven.

Jste si jisti, e chcete zat s drbskmi funkcemi, kter jste zvolili?
}
# ====== TODO To be translated ======
translate C TwinCheckUndelete {to flip; "u" undeletes both)}
translate C TwinCheckprevPair {Pedchoz dvojice}
translate C TwinChecknextPair {Nsledujc dvojice}
translate C TwinChecker {Scid: Kontrola zdvojench parti}
translate C TwinCheckTournament {Partie turnaje:}
translate C TwinCheckNoTwin {dn duplicita  }
translate C TwinCheckNoTwinfound {Pro tuto partii nebyla nalezena dn zdvojen partie.\nPro zobrazen zdvojench parti v tomto okn muste nejprve pout funkci "Smazat zdvojen partie...". }
translate C TwinCheckTag {Sdlet znaky...}
translate C TwinCheckFound1 {Scid nael $result zdvojench parti}
translate C TwinCheckFound2 { a nastavil jim pznak smazn}
translate C TwinCheckNoDelete {V tto databzi nejsou dn partie ke smazn.}
translate C TwinCriteria1 { Vae nastaven pro hledn zdvojench parti mohou zpsobit oznaen\nnezdvojench parti s podobnmi tahy jako zdvojen partie.}
translate C TwinCriteria2 {Pokud pro "stejn tahy" uvedete "Ne", doporuuje se uvst "Ano" pro barvu, udlost, msto, kolo, rok a msc.\Chcete pesto pokraovat a smazat zdvojen partie? }
translate C TwinCriteria3 {Doporuuje se uvst "Ano" pro alespo dv z nastaven "stejn msto", "stejn kolo" a "stejn rok".\nChcete pesto pokraovat a smazat zdvojen partie?}
translate C TwinCriteriaConfirm {Scid: Potvrdit nastaven dvojic}
translate C TwinChangeTag "Zmnit nsledujc tagy partie:\n\n"
translate C AllocRatingDescription "Tento pkaz pouije aktuln soubor kontroly peklep pro pidn Elo rating do parti v tto databzi. Pokud njak hr nem aktuln rating, ale jeho rating z doby sehrn partie je uveden v souboru kontroly peklep, bude tento jeho rating pidn."
translate C RatingOverride "Pepsat stvajc nenulov ratingy?"
translate C AddRatings "Pidat ratingy do:"
translate C AddedRatings {Scid pidal $r Elo rating v $g partich.}
translate C NewSubmenu "Nov podmenu"

# Comment editor:
translate C AnnotationSymbols  {Anotan symboly:}
translate C Comment {Koment:}
translate C InsertMark {Vloit znaku}
translate C InsertMarkHelp {
Vloit/odstranit znaky: Vyberte barvu, typ, pole.
Vloit/odstranit ipku: Kliknte pravm tlatkem na dv pole.
}

# Nag buttons in comment editor:
translate C GoodMove {Dobr tah}
translate C PoorMove {Slab tah}
translate C ExcellentMove {Vborn tah}
translate C Blunder {Hrub chyba}
translate C InterestingMove {Zajmav tah}
translate C DubiousMove {Pochybn tah}
translate C WhiteDecisiveAdvantage {Bl m rozhodujc vhodu}
translate C BlackDecisiveAdvantage {ern m rozhodujc vhodu}
translate C WhiteClearAdvantage {Bl m jasnou vhodu}
translate C BlackClearAdvantage {ern m jasnou vhodu}
translate C WhiteSlightAdvantage {Bl m malou vhodu}
translate C BlackSlightAdvantage {ern m malou vhodu}
translate C Equality {Rovn ance}
translate C Unclear {Nejasn pozice}
translate C Diagram {Diagram}

# Board search:
translate C BoardSearch {Hledat pozici}
translate C FilterOperation {Operace s aktulnm filtrem:}
translate C FilterAnd {A (Omezit filtr)}
translate C FilterOr {NEBO (Pidat k filtru)}
translate C FilterIgnore {IGNOROVAT (Ignoruj filtr)}
translate C SearchType {Typ hledn:}
translate C SearchBoardExact {Pesn pozice (vechny figury na stejnch polch)}
translate C SearchBoardPawns {Pci (tent materil, vichni pci na stejnch polch)}
translate C SearchBoardFiles {Sloupce (tent materil, vichni pci na stejnch sloupcch)}
translate C SearchBoardAny {Jakkoliv (tent materil, pci a figury kdekoliv)}
translate C SearchInRefDatabase { Hledat v databzi }
translate C LookInVars {Dvat se do variant}

# Material search:
translate C MaterialSearch {Hledat materil}
translate C Material {Materil}
translate C Patterns {Vzory}
translate C Zero {Nic}
translate C Any {Cokoliv}
translate C CurrentBoard {Aktuln pozice}
translate C CommonEndings {Typick koncovky}
translate C CommonPatterns {Typick vzory}
translate C MaterialDiff {Rozdl v materilu}
translate C squares {pole}
translate C SameColor {Stejnobarevn}
translate C OppColor {Nestejnobarevn}
translate C Either {Oboj}
translate C MoveNumberRange {Rozsah tah}
translate C MatchForAtLeast {Shoda pro minimln}
translate C HalfMoves {pltah}

# Common endings in material search:
translate C EndingPawns {Pcov koncovky}
translate C EndingRookVsPawns {V proti pcm}
translate C EndingRookPawnVsRook {V a 1 pec proti vi}
translate C EndingRookPawnsVsRook {V a pci proti vi}
translate C EndingRooks {Vov koncovky}
translate C EndingRooksPassedA {Vov koncovky s volnm a-pcem}
translate C EndingRooksDouble {tyvov koncovky}
translate C EndingBishops {Stelcov koncovky}
translate C EndingBishopVsKnight {Koncovky stelce proti jezdci}
translate C EndingKnights {Jezdcov koncovky}
translate C EndingQueens {Dmsk koncovky}
translate C EndingQueenPawnVsQueen {Dma a 1 pec proti dm}
translate C BishopPairVsKnightPair {Dvojice stelc proti dvojici jezdc ve stedn he}

# Common patterns in material search:
translate C PatternWhiteIQP {Bl dmsk izolovan pec}
translate C PatternWhiteIQPBreakE6 {Bl dmsk izolovan pec: prlom d4-d5 proti e6}
translate C PatternWhiteIQPBreakC6 {Bl dmsk izolovan pec: prlom d4-d5 proti c6}
translate C PatternBlackIQP {ern dmsk izolovan pec}
translate C PatternWhiteBlackIQP {Bl dmsk izolovan pec proti ernmu dmskmu izolovanmu pci}
translate C PatternCoupleC3D4 {Pr blch izolovanch pc c3+d4}
translate C PatternHangingC5D5 {ern visc pci na c5 a d5}
translate C PatternMaroczy {Maroczyho centrum (s pci na c4 a e4)}
translate C PatternRookSacC3 {Ob ve na c3}
translate C PatternKc1Kg8 {O-O-O proti O-O (Kc1 proti Kg8)}
translate C PatternKg1Kc8 {O-O proti O-O-O (Kg1 proti Kc8)}
translate C PatternLightFian {Fianchetta na blch polch (stelec g2 proti stelci b7)}
translate C PatternDarkFian {Fianchetta na ernch polch (stelec b2 proti stelci g7)}
translate C PatternFourFian {tyi fianchetta (stelci na b2,g2,b7,g7)}

# Game saving:
translate C Today {Dnes}
translate C ClassifyGame {Klasifikovat partii}

# Setup position:
translate C EmptyBoard {Vyprzdnit achovnici}
translate C InitialBoard {Vchoz pozice}
translate C SideToMove {Na tahu je}
translate C MoveNumber {slo tahu}
translate C Castling {Roda}
translate C EnPassantFile {En Passant sloupec}
translate C ClearFen {Vyistit FEN}
translate C PasteFen {Vloit FEN}
translate C SaveAndContinue {Uloit a pokraovat}
translate C DiscardChangesAndContinue {Zruit zmny\na pokraovat}
translate C GoBack {Jt zpt}

# Replace move dialog:
translate C ReplaceMove {Nahradit tah}
translate C AddNewVar {Pidat novou variantu}
translate C NewMainLine {Nov hlavn varianta}
translate C ReplaceMoveMessage {Zde ji existuje tah.

Mete ho nahradit, a zruit tak i vechny nsledujc tahy, nebo mete v tah pidat jako novou variantu.

(Zobrazen tto zprvy mete v budoucnu potlait pepnutm volby "Ptt se ped nahrazenm tah" v menu Volby:Tahy.)}

# Make database read-only dialog:
translate C ReadOnlyDialog {Pokud databzi nastavte jako jen ke ten, nebudou povoleny dn zmny.
dn partie nebude mono uloit ani pepsat a dn mazac pznak nebude mono zmnit.
Vechny vsledky operace azen i ECO klasifikace budou pouze doasn.

Databzi mete uinit opt zapisovatelnou pomoc jejho zaven a optovnho oteven.

Pejete si skuten nastavit tuto databzi jako jen ke ten?}

# Clear game dialog:
translate C ClearGameDialog {Tato partie byla zmnna.

Skuten chcete pokraovat a zruit zmny, kter jste v n uinili?
}

# Exit dialog:
translate C ExitDialog {Opravdu si pejete ukonit Scid?}
translate C ExitUnsaved {Nsledujc databze obsahuj partie s neuloenmi zmnami. Pokud nyn skonte, budou tyto zmny ztraceny.}

# Import window:
translate C PasteCurrentGame {Vloit aktuln partii}
translate C ImportHelp1 {Zapsat nebo vloit partii ve formtu PGN do rmce nahoe.}
translate C ImportHelp2 {Jakkoli chyby pi importu partie budou zobrazeny zde.}
translate C OverwriteExistingMoves {Pepsat stvajc tahy?}

# ECO Browser:
translate C ECOAllSections {vechny ECO sekce}
translate C ECOSection {ECO sekce}
translate C ECOSummary {Souhrn pro}
translate C ECOFrequency {Frekvence subkd pro}

# Opening Report:
translate C OprepTitle {Profil zahjen}
translate C OprepReport {Profil}
translate C OprepGenerated {Generovn}
translate C OprepStatsHist {Statistika a historie}
translate C OprepStats {Statistika}
translate C OprepStatAll {Vechny partie profilu}
translate C OprepStatBoth {Oba ratingovan}
translate C OprepStatSince {Od}
translate C OprepOldest {Nejstar partie}
translate C OprepNewest {Nejnovj partie}
translate C OprepPopular {Stvajc popularita}
translate C OprepFreqAll {Frekvence za vechny roky: }
translate C OprepFreq1   {Bhem poslednho roku:     }
translate C OprepFreq5   {Bhem poslednch 5 let:    }
translate C OprepFreq10  {Bhem poslednch 10 let:   }
translate C OprepEvery {jednou z %u parti}
translate C OprepUp {vce o %u%s v porovnn se vemi roky}
translate C OprepDown {mn o %u%s v porovnn se vemi roky}
translate C OprepSame {dn zmna pi porovnn se vemi roky}
translate C OprepMostFrequent {Nejastj hri}
translate C OprepMostFrequentOpponents {Nejastj soupei}
translate C OprepRatingsPerf {Ratingy a performance}
translate C OprepAvgPerf {Prmrn ratingy a performance}
translate C OprepWRating {Rating bl}
translate C OprepBRating {Rating ern}
translate C OprepWPerf {Performance bl}
translate C OprepBPerf {Performance ern}
translate C OprepHighRating {Partie s nejvym prmrnm ratingem}
translate C OprepTrends {Vsledkov trend}
translate C OprepResults {Dlka parti a frekvence}
translate C OprepLength {Dlka parti}
translate C OprepFrequency {Frekvence}
translate C OprepWWins {Vhry bl: }
translate C OprepBWins {Vhry ern: }
translate C OprepDraws {Remzy:      }
translate C OprepWholeDB {cel databze}
translate C OprepShortest {Nejkrat vhry}
translate C OprepMovesThemes {Tahy a tmata}
translate C OprepMoveOrders {Posloupnosti tah vedouc k profilovan pozici}
translate C OprepMoveOrdersOne \
  {Nalezena pouze jedna posloupnost tah vedoucch k tto pozici:}
translate C OprepMoveOrdersAll \
  {Nalezeno %u posloupnost tah vedoucch k tto pozici:}
translate C OprepMoveOrdersMany \
  {Nalezeno %u posloupnost tah vedoucch k tto pozici. Prvnch %u jsou:}
translate C OprepMovesFrom {Tahy z profilovan pozice}
translate C OprepMostFrequentEcoCodes {Nejastj ECO kdy}
translate C OprepThemes {Pozin tmata}
translate C OprepThemeDescription {Frekvence tmat v prvnch %u tazch kad partie}
translate C OprepThemeSameCastling {Rody na stejnou stranu}
translate C OprepThemeOppCastling {Rody na rzn strany}
translate C OprepThemeNoCastling {Ob strany bez rody}
translate C OprepThemeKPawnStorm {Pcov tok na krlovskm kdle}
translate C OprepThemeQueenswap {Vymnn dmy}
translate C OprepThemeWIQP {Bl izolovan dmsk pec}
translate C OprepThemeBIQP {ern izolovan dmsk pec}
translate C OprepThemeWP567 {Bl pec na 5., 6. nebo 7. ad}
translate C OprepThemeBP234 {ern pec na 2., 3. nebo 4. ad}
translate C OprepThemeOpenCDE {Oteven sloupec C, D nebo E}
translate C OprepTheme1BishopPair {Jedna strana m dvojici stelc}
translate C OprepEndgames {Koncovky}
translate C OprepReportGames {Profilovan partie}
translate C OprepAllGames {Vechny partie}
translate C OprepEndClass {Materilu na konci kad partie}
translate C OprepTheoryTable {Tabulka teorie}
translate C OprepTableComment {Generovno z %u parti s nejvym prmrnm ratingem.}
translate C OprepExtraMoves {Extra poznmkov tahy v tabulce teorie}
translate C OprepMaxGames {Maximum tah v tabulce teorie}
translate C OprepViewHTML {Zobrazit HTML}
translate C OprepViewLaTeX {Zobrazit LaTeX}

# Player Report:
translate C PReportTitle {Profil hre}
translate C PReportColorWhite {blmi figurami}
translate C PReportColorBlack {ernmi figurami}
translate C PReportMoves {po %s}
translate C PReportOpenings {Zahjen}
translate C PReportClipbase {Vyprzdnit schrnku a zkoprovat do n odpovdajc partie}

# Piece Tracker window:
translate C TrackerSelectSingle {Levm tlatkem myi se tato figura vybere.}
translate C TrackerSelectPair {Levm tlatkem se tato figura vybere; pravm se vyberou ob stejn figury.}
translate C TrackerSelectPawn {Levm tlatkem se vybere tento pec; pravm se vybere vech 8 pc.}
translate C TrackerStat {Statistika}
translate C TrackerGames {% parti s tahem na pole}
translate C TrackerTime {% asu na kadm poli}
translate C TrackerMoves {Tahy}
translate C TrackerMovesStart {Vlote slo tahu, kterm m stopovn zat.}
translate C TrackerMovesStop {Vlote slo tahu, kterm m stopovn skonit.}

# Game selection dialogs:
translate C SelectAllGames {Vechny partie v databzi}
translate C SelectFilterGames {Jen filtrovan partie}
translate C SelectTournamentGames {Jen partie z aktulnho turnaje}
translate C SelectOlderGames {Jen star partie}

# Delete Twins window:
translate C TwinsNote {Aby byly dv partie vyhodnoceny jako zdvojen, mus bt hrny tmi dvma hri a dle mus splovat kritria, kter nastavte ne. Pokud jsou nalezeny zdvojen partie, pak je krat z nich vymazna. Rada: je vhodn provst ped vymaznm zdvojench parti kontrolu pravopisu, nebo to zdokonal detekci zdvojench parti.}
translate C TwinsCriteria {Kritria: Zdvojen partie mus mt...}
translate C TwinsWhich {Jak partie prozkoumat}
translate C TwinsColors {Tyt barvy u hr?}
translate C TwinsEvent {Tent turnaj?}
translate C TwinsSite {Tot msto?}
translate C TwinsRound {Tot kolo?}
translate C TwinsYear {Tent rok?}
translate C TwinsMonth {Tent msc?}
translate C TwinsDay {Tent den?}
translate C TwinsResult {Tent vsledek?}
translate C TwinsECO {Tent ECO kd?}
translate C TwinsMoves {Tyt tahy?}
translate C TwinsPlayers {Porovnn jmen:}
translate C TwinsPlayersExact {Pesn shoda}
translate C TwinsPlayersPrefix {Jen prvn 4 znaky}
translate C TwinsWhen {Pokud se budou mazat zdvojen partie}
translate C TwinsSkipShort {Ignorovat vechny partie krat ne 5 tah?}
translate C TwinsUndelete {Obnovit nejprve vechny partie?}
translate C TwinsSetFilter {Nastavit filtr na vechny vymazan zdvojen partie?}
translate C TwinsComments {Vdy zachovat partie s komenti?}
translate C TwinsVars {Vdy zachovat partie s variantami?}
translate C TwinsDeleteWhich {Kterou partii vymazat:}
translate C TwinsDeleteShorter {Krat partii}
translate C TwinsDeleteOlder {Partii s nim slem}
translate C TwinsDeleteNewer {Partii s vym slem}
translate C TwinsDelete {Vymazat partie}

# Name editor window:
translate C NameEditType {Typ jmna pro editaci}
translate C NameEditSelect {Partie k editaci}
translate C NameEditReplace {Nahradit}
translate C NameEditWith {}
translate C NameEditMatches {Shoduje se: Stiskni Ctrl+1 a Ctrl+9 pro vbr}
# ====== TODO To be translated ======
translate C CheckGames {Check games}
# ====== TODO To be translated ======
translate C CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate C CheckAll {All games}
# ====== TODO To be translated ======
translate C CheckSelectFilterGames {Only games in filter}

# Classify window:
translate C Classify {Klasifikace}
translate C ClassifyWhich {ECO klasifikace kterch parti}
translate C ClassifyAll {Vechny partie (pepsat star ECO kdy)}
translate C ClassifyYear {Vechny partie hran za posledn rok}
translate C ClassifyMonth {Vechny partie hran za posledn msc}
translate C ClassifyNew {Jen partie, kter jsou zatm bez ECO kdu}
translate C ClassifyCodes {Pout tyto ECO kdy}
translate C ClassifyBasic {Jen zkladn kdy ("B12", ...)}
translate C ClassifyExtended {Rozen Scidu  ("B12j", ...)}

# Compaction:
translate C NameFile {Jmenn soubor}
translate C GameFile {Partiov soubor}
translate C Names {Jmna}
translate C Unused {Nepouito}
translate C SizeKb {Velikost (kb)}
translate C CurrentState {Aktuln stav}
translate C AfterCompaction {Po zhutn}
translate C CompactNames {Zhustit jmenn soubor}
translate C CompactGames {Zhustit partiov soubor}
translate C NoUnusedNames "Nejsou dn nevyuit jmna, take jmenn soubor je ji pln zhutn."
translate C NoUnusedGames "Partiov soubor je ji pln zhutn."
translate C NameFileCompacted {Jmenn soubor pro databzi "[file tail [sc_base filename]]" byl zhutn.}
translate C GameFileCompacted {Partiov soubor pro databzi "[file tail [sc_base filename]]" byl zhutn.}

# Sorting:
translate C SortCriteria {Kritria}
translate C AddCriteria {Pidat kritria}
translate C CommonSorts {Bn azen}
translate C Sort {Setdit}

# Exporting:
translate C AddToExistingFile {Pidat partie do existujcho souboru?}
translate C ExportComments {Exportovat komente?}
translate C ExportVariations {Exportovat varianty?}
translate C IndentComments {Odsazovat komente?}
translate C IndentVariations {Odsazovat varianty?}
translate C ExportColumnStyle {Sloupcov styl (jeden tah na dek)?}
translate C ExportSymbolStyle {Styl pro symbolick anotace:}
translate C ExportStripMarks {Odstranit kdov znaky pol/ipek z koment?}

# Goto game/move dialogs:
translate C LoadGameNumber {Vlote slo partie:}
translate C GotoMoveNumber {Pejt na tah slo:}

# Copy games dialog:
translate C CopyGames {Koprovat partie}
translate C CopyConfirm {
 Skuten chcete koprovat
 [::utils::thousands $nGamesToCopy] filtrovanch parti
 z databze "$fromName"
 do databze "$targetName"?
}
translate C CopyErr {Nelze zkoprovat partie}
translate C CopyErrSource {zdrojov databze}
translate C CopyErrTarget {clov databze}
translate C CopyErrNoGames {nem dn partie ve filtru}
translate C CopyErrReadOnly {je pouze ke ten}
translate C CopyErrNotOpen {nen otevena}

# Colors:
translate C LightSquares {Bl pole}
translate C DarkSquares {ern pole}
translate C SelectedSquares {Vybran pole}
translate C SuggestedSquares {Pole navrhovanch tah}
translate C WhitePieces {Bl figury}
translate C BlackPieces {ern figury}
translate C WhiteBorder {Obrys blch figur}
translate C BlackBorder {Obrys ernch figur}

# Novelty window:
translate C FindNovelty {Hledat novinku}
translate C Novelty {Novinka}
translate C NoveltyInterrupt {Hledn novinky perueno}
translate C NoveltyNone {V tto partii nebyla nalezena dn novinka}
translate C NoveltyHelp {
Scid bude hledat prvn tah aktuln partie, kter doshne pozice, kter se nevyskytla ve vybran databzi ani v knihovn zahjen ECO.
}

# Sounds configuration:
translate C SoundsFolder {Adres se zvukovmi soubory}
translate C SoundsFolderHelp {Adres by ml obsahovat soubory King.wav, a.wav, 1.wav, atd.}
translate C SoundsAnnounceOptions {Volby oznamovn tahu}
translate C SoundsAnnounceNew {Oznamovat tahy pi jejich proveden}
translate C SoundsAnnounceForward {Oznamovat tahy pi posunu o tah vped}
translate C SoundsAnnounceBack {Oznamovat pi vzet tahu zpt nebo posunu o tah zpt}

# Upgrading databases:
translate C Upgrading {Upgrade}
translate C ConfirmOpenNew {
Toto je star formt (Scid 3) databze, jen nen mono otevt ve Scidu 4. Verze s novm formtem (Scid 4) pitom ji byla vytvoena.

Chcete otevt verzi s novm formtem datbze?
}
translate C ConfirmUpgrade {
Toto je star formt (Scid 3) databze. K oteven ve Scidu 4 je nutno databzi nejprve zkonvertovat do novho formtu.

Upgrade vytvo novou verzi databze.

Tento kon me zabrat trochu asu, ale je teba jej provst pouze jednou. Mete ho peruit, pokud bude trvat pli dlouho.

Chcete tuto databzi upgradovat nyn?
}

# Recent files options:
translate C RecentFilesMenu {Poet nedvnch soubor v menu Soubor}
translate C RecentFilesExtra {Poet nedvnch soubor v extra podmenu}

# My Player Names options:
translate C MyPlayerNamesDescription {
Oteve seznam se jmny preferovanch hr, kad jmno na jeden dek. Zstupn znaky (tj. "?" pro jakkoliv jeden znak, "*" pro jakoukoliv sekvenci znak) jsou povoleny.

Vdy, kdy se nathne partie hre uvedenho v seznamu, achovnice v hlavnm okn se oto, jestlie je to nutn k zobrazen partie z perspektivy tohoto hre.
}
translate C showblunderexists {ukzat ptomnost hrub chyby}
translate C showblundervalue {ukzat hodnotu hrub chyby}
translate C showscore {ukzat skre}
translate C coachgame {kouovac partie}
translate C configurecoachgame {konfigurovat kouovac partii}
translate C configuregame {Konfigurace partie}
translate C Phalanxengine {Hern program phalanx}
translate C Coachengine {Kouovac hern program}
translate C difficulty {obtnost}
translate C hard {nron}
translate C easy {snadn}
translate C Playwith {Hrt s}
translate C white {bl}
translate C black {ern}
translate C both {oba}
translate C Play {Hrt}
translate C Noblunder {dn hrub chyba}
translate C blunder {hrub chyba}
translate C Noinfo {-- dn informace --}
translate C PhalanxOrTogaMissing {Phalanx nebo Toga nenalezen}
translate C moveblunderthreshold {chyba je hrub, jestlie ztrta je vt ne}
translate C limitanalysis {omezit as analzy hernho programu}
translate C seconds {sekund}
translate C Abort {Peruit}
translate C Resume {Pokraovat}
# ====== TODO To be translated ======
translate C OutOfOpening {Out of opening}
translate C NotFollowedLine {Nensledoval jste variantu}
translate C DoYouWantContinue {Chcete pokraovat?}
translate C CoachIsWatching {Kou sleduje}
translate C Ponder {Neustl pemlen}
translate C LimitELO {Omezit slu ELO}
translate C DubiousMovePlayedTakeBack {Byl zahrn pochybn tah, chcete ho vrtit?}
translate C WeakMovePlayedTakeBack {Byl zahrn slab tah, chcete ho vrtit?}
translate C BadMovePlayedTakeBack {Byl zahrn patn tah, chcete ho vrtit?}
translate C Iresign {Vzdvm}
translate C yourmoveisnotgood {v tah nen dobr}
translate C EndOfVar {Konec varianty}
translate C Openingtrainer {Trenr zahjen}
translate C DisplayCM {Zobrazit mon vhodn tahy}
translate C DisplayCMValue {Zobrazit hodnut monch vhodnch tah}
translate C DisplayOpeningStats {Ukzat statistiku}
translate C ShowReport {Ukzat report}
translate C NumberOfGoodMovesPlayed {dobrch odehranch tah}
translate C NumberOfDubiousMovesPlayed {pochybnch odehranch tah}
translate C NumberOfMovesPlayedNotInRepertoire {odehranch tah, kter nejsou v repertoru}
translate C NumberOfTimesPositionEncountered {vskyt pozice}
translate C PlayerBestMove  {Dovolit pouze nejlep tahy}
translate C OpponentBestMove {Soupe hraje nejlep tahy}
translate C OnlyFlaggedLines {Pouze oznaen varianty}
translate C resetStats {Smazat statistiku}
translate C Repertoiretrainingconfiguration {Konfigurace trninku repertoru}
translate C Loadingrepertoire {Natahuji repertor}
translate C Movesloaded {Tahy nataeny}
translate C Repertoirenotfound {Repertor nenalezen}
translate C Openfirstrepertoirewithtype {Otevt prvn databzi repertoru s ikonou/typem nastavenou pro sprvnou stranu}
translate C Movenotinrepertoire {Tah nen v repertoru}
translate C PositionsInRepertoire {Pozice v repertoru}
translate C PositionsNotPlayed {Nehran pozice}
translate C PositionsPlayed {Hran pozice}
translate C Success {spch}
translate C DubiousMoves {Pochybn tahy}
translate C OutOfRepertoire {Mimo repertor}
translate C ConfigureTactics {Konfigurovat taktiku}
translate C ResetScores {Smazat skre}
translate C LoadingBase {Natahuji databzi}
translate C Tactics {Taktika}
translate C ShowSolution {Ukzat een}
translate C NextExercise {Dal cvien}
translate C PrevExercise {pedchoz cvien}
translate C StopTraining {Ukonit trnink}
translate C Next {Dal}
translate C ResettingScore {Mau skre}
translate C LoadingGame {Natahuji partii}
translate C MateFound {Mat nalezen}
translate C BestSolutionNotFound {Nejlep een nenalezeno!}
translate C MateNotFound {Mat nenalezen}
translate C ShorterMateExists {Existuje rychlej mat}
translate C ScorePlayed {Odehran skre}
# ====== TODO To be translated ======
translate C Expected {expected}
translate C ChooseTrainingBase {Vybrat trninkovou databzi}
translate C Thinking {Pemlm}
translate C AnalyzeDone {Analza hotova}
translate C WinWonGame {Vyhrt vyhranou partii}
translate C Lines {Varianty}
translate C ConfigureUCIengine {Konfigurovat nstroj UCI}
translate C SpecificOpening {Vybran zahjen}
translate C StartNewGame {Zat novou hru}
translate C FixedLevel {Pevn rove}
translate C Opening {Zahjen}
translate C RandomLevel {Nhodn rove}
translate C StartFromCurrentPosition {Zat z aktuln pozice}
translate C FixedDepth {Pevn hloubka}
translate C Nodes {Uzly} 
translate C Depth {Hloubka}
translate C Time {as} 
translate C SecondsPerMove {Sekund na tah}
translate C Engine {Hern program}
translate C TimeMode {Reim asu}
translate C TimeBonus {as + bonus}
translate C TimeMin {min}
translate C TimeSec {s}
translate C AllExercisesDone {Vechna cvien hotova}
translate C MoveOutOfBook {Tah mimo knihovnu zahjen}
translate C LastBookMove {Posledn tah z knihovny zahjen}
translate C AnnotateSeveralGames {Anotovat nkolik parti\od aktuln do:}
translate C FindOpeningErrors {Najt chyby v zahjen}
translate C MarkTacticalExercises {Oznait taktick cvien}
translate C UseBook {Pouvat knihovnu zahjen}
translate C MultiPV {Nkolik variant}
translate C Hash {Hashovac pam}
translate C OwnBook {Pout knihovnu zahjen hernho programu}
translate C BookFile {Knihovna zahjen}
translate C AnnotateVariations {Anotovat varianty}
translate C ShortAnnotations {Krtk anotace}
translate C addAnnotatorTag {Pidat znaku anottora}
translate C AddScoreToShortAnnotations {Pidat skre ke krtkm anotacm}
translate C Export {Export}
translate C BookPartiallyLoaded {Knihovna zahjen sten nataena}
translate C Calvar {Propoet variant}
translate C ConfigureCalvar {Konfigurace}
translate C Reti {Rtiho}
translate C English {Anglick}
translate C d4Nf6Miscellaneous {1.d4 Nf6 rzn}
translate C Trompowsky {Opoenskho hra}
translate C Budapest {Budapesk gambit}
translate C OldIndian {Staroindick}
translate C BenkoGambit {Volsk gambit}
translate C ModernBenoni {Modern Benoni}
translate C DutchDefence {Holandsk}
translate C Scandinavian {Skandinvsk}
translate C AlekhineDefence {Aljechinova}
translate C Pirc {Pircova}
translate C CaroKann {Caro-Kann}
translate C CaroKannAdvance {Caro-Kann, zaven systm}
translate C Sicilian {Sicilsk}
translate C SicilianAlapin {Sicilsk, Alapinova varianta}
translate C SicilianClosed {Zaven sicilsk}
translate C SicilianRauzer {Sicilsk, Rauzerv tok}
translate C SicilianDragon {Sicilsk, dra varianta}
translate C SicilianScheveningen {Sicilsk, scheveningsk varianta}
translate C SicilianNajdorf {Sicilsk, Najdorfova varianta}
translate C OpenGame {Oteven hra}
translate C Vienna {Vdesk}
translate C KingsGambit {Krlovsk gambit}
translate C RussianGame {Rusk}
translate C ItalianTwoKnights {Italsk/Hra dvou jezdc v obran}
translate C Spanish {panlsk}
translate C SpanishExchange {Vmnn panlsk}
translate C SpanishOpen {Oteven panlsk}
translate C SpanishClosed {Zaven panlsk}
translate C FrenchDefence {Francouzsk}
translate C FrenchAdvance {Francouzsk, Steinitzv systm}
translate C FrenchTarrasch {Francouzsk, Tarraschv systm}
translate C FrenchWinawer {Francouzsk, Nimcoviv systm}
translate C FrenchExchange {Francouzsk, vmnn varianta}
translate C QueensPawn {Dmskm pcem}
translate C Slav {Slovansk}
translate C QGA {Pijat dmsk gambit}
translate C QGD {Odmtnut dmsk gambit}
translate C QGDExchange {Vmnn dmsk gambit}
translate C SemiSlav {Poloslovansk}
translate C QGDwithBg5 {Dmsk gambit se Sg5}
translate C QGDOrthodox {Ortodoxn dmsk gambit}
translate C Grunfeld {Grnfeldova indick}
# ====== TODO To be translated ======
translate C GrunfeldExchange {Grnfeld Exchange}
# ====== TODO To be translated ======
translate C GrunfeldRussian {Grnfeld Russian}
translate C Catalan {Katalnsk}
# ====== TODO To be translated ======
translate C CatalanOpen {Catalan Open}
# ====== TODO To be translated ======
translate C CatalanClosed {Catalan Closed}
translate C QueensIndian {Dmsk indick}
translate C NimzoIndian {Nimcoviova indick}
translate C NimzoIndianClassical {Nimcoviova indick, klasick systm}
translate C NimzoIndianRubinstein {Nimcoviova indick, Rubinsteinv systm}
translate C KingsIndian {Krlovsk indick}
translate C KingsIndianSamisch {Krlovsk indick, Smischv tok}
translate C KingsIndianMainLine {Krlovsk indick, hlavn varianta}
translate C ConfigureFics {Konfigurovat FICS}
translate C FICSGuest {Pihlsit jako host}
translate C FICSServerPort {Port serveru}
translate C FICSServerAddress {IP adresa}
translate C FICSRefresh {Obnovit}
translate C FICSTimesealPort {Port timesealu}
translate C FICSSilence {Ticho}
translate C FICSOffers {Nabdky}
translate C FICSConsole {Konzola}
translate C FICSGames {Hry}
translate C FICSUnobserve {Ukonit sledovn partie}
translate C FICSProfile {Zobrazit vai historii a profil}
# ====== TODO To be translated ======
translate C FICSRelayedGames {Relayed games}
translate C FICSFindOpponent {Najt soupee}
translate C FICSTakeback {Vrtit tah}
translate C FICSTakeback2 {Vrtit tah 2}
translate C FICSInitTime {Poten as (min)}
translate C FICSIncrement {Inkrement (s)}
translate C FICSRatedGame {Partie zapotan do ratingu}
translate C FICSAutoColour {automatick}
translate C FICSManualConfirm {potvrdit run}
translate C FICSFilterFormula {Filtrovat formul}
# ====== TODO To be translated ======
translate C FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate C FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate C FICSAccept {accept}
# ====== TODO To be translated ======
translate C FICSDecline {decline}
translate C FICSColour {Barva}
# ====== TODO To be translated ======
translate C FICSSend {send}
translate C FICSConnect {Pipojit}
translate C FICSdefaultuservars {Pout vchoz promnn}
translate C FICSObserveconfirm {Chcete sledovat partii}
# ====== TODO To be translated ======
translate C FICSpremove {Enable premove}
translate C GameReview {Prohlen partie}
translate C GameReviewTimeExtended {as prodlouen}
# ====== TODO To be translated ======
translate C GameReviewMargin {Error margin}
translate C GameReviewAutoContinue {Automaticky pokraovat, je-li tah sprvn}
# ====== TODO To be translated ======
translate C GameReviewReCalculate {Use extended time}
translate C GameReviewAnalyzingMovePlayedDuringTheGame {Analyzuji tahy sehran v partii}
translate C GameReviewAnalyzingThePosition {Analyzuji pozici}
translate C GameReviewEnterYourMove {Zadejte v tah}
translate C GameReviewCheckingYourMove {Kontroluji v tah}
translate C GameReviewYourMoveWasAnalyzed {V tah by zanalyzovn}
translate C GameReviewYouPlayedSameMove {Hrl jste ten sam tah jako v partii}
translate C GameReviewScoreOfYourMove {Skre vaho tahu}
translate C GameReviewGameMoveScore {Skre tahu v partii}
translate C GameReviewEngineScore {Skre hernho programu}
translate C GameReviewYouPlayedLikeTheEngine {Hrl jste jako hern program}
translate C GameReviewNotEngineMoveButGoodMove {Nen to tah hernho programu, ale je to tak dobr tah}
translate C GameReviewMoveNotGood {Tento tah nen dobr, skre je}
translate C GameReviewMovesPlayedLike {Tahy hran jako}
translate C GameReviewMovesPlayedEngine {Tahy hran jako hernm programem}
translate C CCDlgConfigureWindowTitle {Konfigurovat korespondenn ach}
translate C CCDlgCGeneraloptions {Obecn nastaven}
translate C CCDlgDefaultDB {Vchoz databze:}
translate C CCDlgInbox {Pchoz schrnka (cesta):}
translate C CCDlgOutbox {Odchoz schrnka (cesta):}
translate C CCDlgXfcc {Konfigurace Xfcc:}
translate C CCDlgExternalProtocol {Extern nstroj pro protokoly (nap. Xfcc)}
translate C CCDlgFetchTool {Stahovac nstroj:}
translate C CCDlgSendTool {Odeslac nstroj:}
translate C CCDlgEmailCommunication {E-mailov komunikace}
translate C CCDlgMailPrg {E-mailov program:}
translate C CCDlgBCCAddr {(B)CC adresa:}
translate C CCDlgMailerMode {Reim:}
translate C CCDlgThunderbirdEg {nap. Thunderbird, Mozilla Mail, Icedove...}
translate C CCDlgMailUrlEg {nap. Evolution}
translate C CCDlgClawsEg {nap. Sylpheed Claws}
translate C CCDlgmailxEg {nap. mailx, mutt, nail...}
translate C CCDlgAttachementPar {Parametr plohy:}
translate C CCDlgInternalXfcc {Pout vystavnou podporu Xfcc}
translate C CCDlgConfirmXfcc {Potvrdit tahy}
translate C CCDlgSubjectPar {Pedmt:}
translate C CCDlgDeleteBoxes {Przdn pchoz/odchoz schrnka}
translate C CCDlgDeleteBoxesText {Opravdu chcete vyprzdnit pchoz a odchoz schrnky pro koresponden ach? To vyaduje novou synchronizaci, aby mohl bt zobrazen posledn stav vaich parti.}
translate C CCDlgConfirmMove {Potvrdit tah}
translate C CCDlgConfirmMoveText {Pokud potvrdte, nsledujc tah a koment bude zasln na server:}
translate C CCDlgDBGameToLong {Nekonzistentn hlavn varianta}
translate C CCDlgDBGameToLongError {Hlavn varianta v databzi je del ne partie v pchoz schrnce. Jestlie pchoz schrnka obsahuje aktuln partie, tj. erstv po synchronizaci, nkter tahy byly do hlavn varianty v databzi pidny chybn.\nV takovm ppad prosm zkrate hlavn variantu do (max.) tahu\n}
translate C CCDlgStartEmail {Zat novou e-mailovou partii}
translate C CCDlgYourName {Vae jmna:}
translate C CCDlgYourMail {Vae e-mailov adresa:}
translate C CCDlgOpponentName {Jmno soupee:}
translate C CCDlgOpponentMail {E-mailov adresa soupee:}
translate C CCDlgGameID {Identifiktor partie (jednoznan):}
translate C CCDlgTitNoOutbox {Scid: Odchoz schrnka korespondennho achu}
translate C CCDlgTitNoInbox {Scid: Pchoz schrnka korespondennho achu}
translate C CCDlgTitNoGames {Scid: dn korespondenn partie}
translate C CCErrInboxDir {Adres pchoz schrnky korespondennho achu:}
translate C CCErrOutboxDir {Adres odchoz schrnky korespondennho achu:}
translate C CCErrDirNotUsable {neexistuje nebo nen pstupn!\nProsm zkontrolujte a opravte nastaven.}
translate C CCErrNoGames {neobsahuje dn partie!\nNejprve je prosm sthnte.}
translate C CCDlgTitNoCCDB {Scid: dn korespondenn databze.}
translate C CCErrNoCCDB {dn korespondenn databze nen otevena. Prosm otevete njakou ne budete pouvat funkce korespondennho achu.}
translate C CCFetchBtn {Sthnout partie ze serveru a zpracovat pchoz schrnku}
translate C CCPrevBtn {Jt na pedchoz partii}
translate C CCNextBtn {Jt na nsledujc partii}
translate C CCSendBtn {Poslat tah}
translate C CCEmptyBtn {Vyprzdnit pchoz a odchoz schrnku}
translate C CCHelpBtn {Npovda k ikonm a stavovm indiktorm.\nPro obecnou npovdu stisknte F1!}
translate C CCDlgServerName {Jmno serveru:}
translate C CCDlgLoginName  {Pihlaovac jmno:}
translate C CCDlgPassword   {Heslo:}
translate C CCDlgURL        {URL Xfcc:}
translate C CCDlgRatingType {Typ ratingu:}
translate C CCDlgDuplicateGame {Nejednoznan identifiktor partie}
translate C CCDlgDuplicateGameError {Tato partie se v databzi vyskytuje vce ne jednou. Prosm smate vechny duplikty a soubor parti zhutnte (Soubor/drba/Zhutnit databzi).}
translate C CCDlgSortOption {Tdn:}
# ====== TODO To be translated ======
translate C CCDlgListOnlyOwnMove {Only games I have the move}
translate C CCOrderClassicTxt {Msto, udlost, kolo, vsledek, bl, ern}
translate C CCOrderMyTimeTxt {M hodiny}
translate C CCOrderTimePerMoveTxt {as na kad tah do pt asov kontroly}
translate C CCOrderStartDate {Poten datum}
translate C CCOrderOppTimeTxt {Soupeovy hodiny}
translate C CCDlgConfigRelay {Konfigurovat sledovn ICCF}
translate C CCDlgConfigRelayHelp {Bte na strnku parti na http://www.iccf-webchess.com a zobrazte partii, kter m bt sledovna. Pokud vidte achovnici, zkoprujte URL z prohlee do seznamu ne. Pouze jedin URL na kadm dku!\nPklad: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate C ExtHWConfigConnection {Konfigurovat extern hardware}
translate C ExtHWPort {Port}
translate C ExtHWEngineCmd {Pkaz hernho programu}
translate C ExtHWEngineParam {Parametr hernho programu}
translate C ExtHWShowButton {Ukzat tlatko}
translate C ExtHWHardware {Hardware}
translate C ExtHWNovag {Novag Citrine}
translate C ExtHWInputEngine {Vstupn pstroj}
translate C ExtHWNoBoard {dn achovnice}
# ====== TODO To be translated ======
translate C NovagReferee {Referee}
translate C IEConsole {Konzola vstupnho pstroje}
# ====== TODO To be translated ======
translate C IESending {Moves sent for}
translate C IESynchronise {Synchronizovat}
translate C IERotate  {Otoit}
translate C IEUnableToStart {Nemohu spustit vstupn pstroj:}
# ====== TODO To be translated ======
translate C DoneWithPosition {Done with position}
translate C Board {achovnice}
translate C showGameInfo {Ukzat informace o partii}
translate C autoResizeBoard {Automatick zmna velikosti achovnice}
translate C DockTop {Pesunout nahoru}
translate C DockBottom {Pesunout dol}
translate C DockLeft {Pesunout doleva}
translate C DockRight {Pesunout doprava}
# ====== TODO To be translated ======
translate C Undock {Undock}
translate C ChangeIcon {Zmnit ikonu...}
}


############################################################
#
# Czech help pages:


#############
### Contents:

set helpTitle(C,Contents) "Obsah"
set helpText(C,Contents) {<h1>Obsah npovdy Scidu</h1>

<h4>Start a veobecn npovda</h4>
<ul>
<li><a Guide><b>Rychl prvodce</b> pouvnm Scidu</a> <red>(tte
 nejprve)</red></li>
<li><a Hints><b>Rady</b> na zefektivnn prce se Scidem</a></li>
<li><a MainWindow><b>Hlavn okno</b> Scidu</a></li>
<li><a Menus><b>Menu</b> Scidu</a> <red>(aktualizovno!)</red></li>
<li><a Moves>Zadvn <b>tah</b></a></li>
<li><a Searches><b>Vyhledvn</b> Scidem</a></li>
<li><a Clipbase>Pouit databze <b>schrnka</b></a></li>
<li><a Annotating><b>Anotace parti</b></a></li>
</ul>

<h4>Ostatn okna Scidu</h4>
<ul>
<li><a Analysis><b>Analytick</b> okno</a></li>
<li><a Comment>Okno <b>editoru koment</b></a></li>
<li><a Crosstable>Okno <b>turnajov tabulky</b></a></li>
<li><a Switcher>Okno <b>vbru databze</b></a></li>
<li><a Email>Okno <b>emailovho</b> manaera</a></li>
<li><a Finder>Okno <b>vyhledvae soubor</b></a></li>
<li><a GameList>Okno <b>seznamu parti</b></a></li>
<li><a Import>Okno <b>importu parti</b></a></li>
<li><a Reports><b>Profily</b></a> <red>(aktualizovno!)</red></li>
<li><a PGN>Okno <b>PGN</b> (text partie)</a></li>
<li><a PTracker><b>Stopa figur</b></a></li>
<li><a PList>Okno <b>vyhledvae hr</b></a></li>
<li><a PInfo>Okno <b>informac o hri</b></a></li>
<li><a Repertoire>Okno <b>editoru repertoru</b></a></li>
<li><a Tmt>Okno <b>vyhledvae turnaj</b></a></li>
<li><a Tree><b>Stromov</b> okno</a></li>
<li><a Graphs>Okno <b>graf</b></a></li>
<li><a TB>Pouit <b>tabulek koncovek</b></a>
 <red>(aktualizovno!)</red></li>
</ul>

<h4>Ostatn pomocn programy a informace</h4>
<ul>
<li><a Bookmarks><b>Zloky</b></a></li>
<li><a Cmdline>Volby z pkazovho dku</a></li>
<li><a Compact><b>Zhutnn</b> databze</a></li>
<li><a Maintenance>Nstroje <b>drby databze</b></a></li>
<li><a ECO>Klasifikace zahjen <b>ECO</b></a></li>
<li><a EPD>Soubory <b>EPD</b></a></li>
<li><a Export><b>Export</b> parti do textovch soubor</a>
 <red>(aktualizovno!)</red></li>
<li><a Flags><b>Pznaky</b> u parti</a></li>
<li><a LaTeX>Pouit <b>LaTeXu</b> se Scidem</a></li>
<li><a Options><b>Volby</b> a preference</a> <red>(aktualizovno!)</red></li>
<li><a Sorting><b>Tdn</b> databze</a></li>
<li><a Pgnscid><b>Pgnscid</b>: konverze soubor PGN</a></li>
<li><a NAGs>Standardn <b>NAG</b> numerick hodnocen</a></li>
<li><a Formats><b>Formt soubor</b> Scidu</a></li>
<li><a Author>Kontaktn informace</a></li>
</ul>

<p><footer>(Aktualizovno: Scid 3.5, Prosinec 2003)</footer></p>
}


###############
### Topic Index

set helpTitle(C,Index) "Index npovdy Scidu"
set helpText(C,Index) {<h1>Index npovdy Scidu</h1>

<h3>A</h3>
<ul>
<li><a Analysis>Analytick</a> okno</li>
<li><a Annotating>Anotace parti</a></li>
<li><a NAGs>Anotan symboly</a></li>
<li><a MainWindow Autoplay>Automatick pehrvn</a></li>
<li><a Author>Autor, kontaktovn</a></li>
</ul>

<h3></h3>
<ul>
<li><a Maintenance Cleaner>itn</a></li>
</ul>

<h3>D</h3>
<ul>
<li><a Compact>Databze, zhutnn</a></li>
<li><a Formats>Databze, formty soubor</a></li>
<li><a Maintenance>Databze, drba</a></li>
<li><a Sorting>Databze, tdn</a></li>
<li><a Switcher>Databze</a>, okno vbru</li>
</ul>

<h3>E</h3>
<ul>
<li><a ECO Browser>ECO prohle</a>, okno</li>
<li><a ECO Codes>ECO, systm kd </a></li>
<li><a ECO>ECO, klasifikace zahjen </a></li>
<li><a Menus Edit>Editace, menu</a></li>
<li><a Email>Emailov manaer</a>, okno</li>
<li><a EPD>EPD soubory</a></li>
<li><a Export>Export parti do textovch soubor</a></li>
</ul>

<h3>F</h3>
<ul>
<li><a Searches Filtr>Filtr</a></li>
<li><a Export>Filtr, exportovn</a></li>
<li><a Graphs Filtr>Filtr, graf</a></li>
<li><a Options Fonts>Fonty</a></li>
</ul>

<h3>G</h3>
<ul>
<li><a Graphs>Graf, okna</a></li>
</ul>

<h3>H</h3>
<ul>
<li><a Searches Header>Hlavika, vyhledvn</a></li>
<li><a MainWindow>Hlavn okno</a></li>
<li><a Menus Search>Hledat, menu</a></li>
<li><a PList>Hr</a>, okno vyhledvae</li>
<li><a PInfo>Hr</a>, okno informac</li>
<li><a Reports Player>Hr</a>, okno profilu</li>
</ul>

<h3>I</h3>
<ul>
<li><a Import>Import</a>, okno</li>
</ul>

<h3>J</h3>
<ul>
<li><a Maintenance Editing>Jmna, editace</a></li>
<li><a Maintenance Spellcheck>Jmna, kontrola pravopisu</a></li>
</ul>

<h3>K</h3>
<ul>
<li><a Comment>Koment</a>, okno editoru</li>
<li><a Compact>Zhutnn databze</a></li>
<li><a Author>Kontaktn informace</a></li>
</ul>

<h3>L</h3>
<ul>
<li><a LaTeX>LaTeX</a>, vstupn formt</li>
</ul>

<h3>M</h3>
<ul>
<li><a Maintenance Twins>Mazn zdvojench parti</a></li>
<li><a Analysis List>Motory</a>, seznam</li>
<li><a Searches Material>Materil/vzor, vyhledvn</a></li>
<li><a Menus>Menu</a></li>
</ul>

<h3>N</h3>
<ul>
<li><a Menus Help>Npovda, menu</a></li>
<li><a Menus Tools>Nstroje, menu</a></li>
<li><a Tree Best>Nejlep partie</a>, okno</li>
<li><a NAGs>NAG anotan hodnoty</a></li>
<li><a Annotating Null>Nulov tahy</a></li>
</ul>

<h3>O</h3>
<ul>
<li><a Contents>Obsah</a></li>
<li><a Menus Windows>Okna, menu</a></li>
</ul>

<h3>P</h3>
<ul>
<li><a Menus Game>Partie, menu</a></li>
<li><a GameList>Partie</a>, okno seznamu</li>
<li><a Flags>Partie, pznaky</a></li>
<li><a Searches Board>Pozice, vyhledvn</a></li>
<li><a Maintenance Spellcheck>Pravopis jmen, kontrola</a></li>
<li><a GameList Browsing>Prohlen parti</a></li>
<li><a Cmdline>Pkazov dek, volby</a></li>
<li><a GameList Browsing>Pipojovn parti</a></li>
<li><a Flags>Pznaky</a></li>
<li><a PGN>PGN</a>, okno</li>
<li><a Pgnscid>Pgnscid</a></li>
</ul>

<h3>R</h3>
<ul>
<li><a Hints>Rady</a></li>
<li><a Guide>Rychl prvodce pouvnm Scidu</a></li>
<li><a Graphs Rating>Rating, graf</a></li>
<li><a Repertoire>Repertor, editor</a></li>
</ul>

<h3>S</h3>
<ul>
<li><a Clipbase>Schrnka</a></li>
<li><a Formats>Soubor, formty</a></li>
<li><a Menus File>Soubor, menu</a></li>
<li><a Finder>Soubor, vyhledva</a></li>
<li><a PTracker>Stopa figur</a>, okno</li>
<li><a Tree>Stromov okno</a></li>
</ul>

<h3>T</h3>
<ul>
<li><a TB>Tabulky koncovek</a></li>
<li><a Moves>Tahy, zadvn</a></li>
<li><a Sorting>Tdn databze</a></li>
<li><a Crosstable>Turnajov tabulka</a>, okno</li>
<li><a Tmt>Turnaj, vyhledva</a></li>
</ul>

<h3>U</h3>
<ul>
<li><a Maintenance>drba, nstroje</a></li>
</ul>

<h3>V</h3>
<ul>
<li><a Options>Volby</a></li>
<li><a Switcher>Vbr databze</a>, okno</li>
<li><a Searches Filter>Vyhledvac filtr</a></li>
<li><a Searches>Vyhledvn</a></li>
<li><a Annotating Vars>Varianty</a></li>
</ul>

<h3>Z</h3>
<ul>
<li><a Moves>Zadvn tah</a></li>
<li><a ECO>Zahjen, klasifikace (ECO)</a></li>
<li><a Reports Opening>Zahjen</a>, okno profilu</a>
<li><a Repertoire>Zahjen, repertory</a></li>
<li><a Bookmarks>Zloky</a></li>
<li><a Maintenance Twins>Zdvojen (duplicitn) partie</a></li>
<li><a Moves Trial>Zkuebn md</a></li>
</ul>

<p><footer>(Aktualizovno: Scid 3.5, nor 2003)</footer></p>
}


################
### Quick guide:

set helpTitle(C,Guide) "Rychl prvodce pouvnm Scidu"
set helpText(C,Guide) {<h1>Rychl prvodce pouvnm Scidu</h1>
<p>
Scid je achov databzov aplikace; mete s n prohlet databze achovch
parti, partie editovat a pouitm rznch kritri partie <a Searches>vyhledvat</a>.
</p>
<p>
Scid pouv svj vlastn <a Formats>formt dat</a>, sestvajc ze t soubor,
kter je velmi kompaktn a rychl, ale me bt obousmrn konvertovn mezi
standardnm PGN (Portable Game Notation) formtem.
<a PGN>Okno PGN</a> Scidu zobrazuje zpis aktuln partie v PGN formtu.
</p>
<p>
Scid mete pout k pidn partie do databze, tahy lze zadvat klvesnic i
my. Pro dal informace se podvejte na strnky npovdy o
<a Moves>zadvn tah</a>.
</p>
<p>
Scid mete tak pout jako prohle <a PGN>PGN</a> soubor, bu vloenm PGN
notace do okna <a Import>Importu</a> Scidu nebo otevenm PGN souboru ve Scidu.
Avak PGN soubory nemohou bt ve Scidu editovny (jsou oteveny jen ke ten),
jsou nron na pam a pomaleji se otevraj. Z tchto dvod se doporuuje
velk PGN soubory nejprve zkonvertovat do formtu Scidu pouitm pomocnho
programu <a Pgnscid>pgnscid</a>.
</p>
<p>
<a MainWindow>Hlavn okno</a> Scidu (s grafickou achovnic) zobrazuje detaily
aktuln partie a databze. Kdykoliv mete mt oteveny a tyi databze
souasn (s <a Clipbase>databz schrnka</a> pt) a kad z nich bude mt svou
aktuln partii.
(Partie slo 0 indikuje zadvn partie, kter nen soust
aktuln databze).
Mezi otevenmi databzemi lze pepnat v
<a Menus File>menu Soubor</a>.
</p>
<p>
Pro vce informac si prosm pette ostatn strnky npovdy v 
<a Index>indexu npovdy</a>.
</p>
<p>
Jestlie chcete kontaktovat autora Scidu, jdte na strnku s
<a Author>kontaktnmi informacemi</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}


###############
### Hints page:

set helpTitle(C,Hints) "Rady k pouvn"
set helpText(C,Hints) {<h1>Rady k pouvn</h1>
<p>
Tato strnka obsahuje ve form otzek a odpovd uiten rady, kter vm
pomohou Scid lpe pouvat. Jestlie s programem Scid teprve zante, pette
si prosm nejdve <a Guide>rychlho prvodce</a>.
Vtina informac na tto strnce je probrna detailn na dalch strnkch
npovdy, viz <a Index>index</a>.
Jestlie chcete pispt na tuto stnku njakou svoj uitenou radou, polete ji
<a  Author>autorovi Scidu</a>. </p>

<h4>Mohu spustit Scid pmo se zvolenou databz?</h4>
<p>
Ano, na pkazov dek sta pidat databze, PGN soubory nebo
<a EPD>EPD soubory</a>. Nap.
<ul>
<li> <b>scid  mybase  games.pgn.gz</b> </li>
</ul>
oteve databzi ve formtu Scidu <b>mybase</b> a rovn PGN soubor komprimovan
Gzipem <b>games.pgn.gz</b>.
</p>

<h4>Existuje jednodu monost jak zmnit velikost achovnice ne pouitm menu
Volby?</h4>
<p>
Ano, pouijte klvesovou zkratku <b>Control+Shift+ipkaVlevo</b> pro zmenen achovnice
a <b>Control+Shift+ipkaVpravo</b> pro zvten.
</p>

<h4>Pi trninku si pehrvm partii, a tm pdem nechci, aby Scid zobrazoval
nsledujc tah v informan zn partie pod achovnic. Je mon ho
skrt?</h4>
<p>
Nsledujc tah lze skrt tak, e v informan zn partie stisknte
<b>prav</b> tlatko myi a z menu, kter se objev, vyberete
<b>Skrt nsledujc tah</b>.
</p>

<h4>Jak mohu vidt ECO kd zahjen pro aktuln pozici?</h4>
<p>
Jestlie byl nahrn klasifikan soubor ECO (<b>scid.eco</b>), ECO kd je
zobrazen na poslednm dku informan zny, pod achovnic v
<a MainWindow>hlavnm okn</a>. <br>
Strnka npovdy <a ECO>ECO kdu</a> vysvtluje, jak nahrt
klasifikan soubor ECO a uloit nastaven tak, aby se nahrl  pi kadm
sputn Scidu. </p>

<h4>Zadvm partii a jsem okolo 30. tahu, ale najednou zjistm, e 10. tah jsem
zadal patn. Jak ho mohu opravit, abych neztratil nsledujc tahy?</h4>
<p>
Mete pout okno <a Import>importu</a>; pro dal informace se podvejte na
strnku npovdy o <a Moves Mistakes>zadvn tah</a>.
</p>

<h4>Jak zkopruji partie z jedn databze do druh?</h4>
<p>
Pouijte <a Switcher>okno vbru databze</a>; petaenm ze zdrojov databze
do clov databze zkoprujete vechny partie z <a Searches Filter>filtru</a>
zdrojov databze.
</p>

<h4>Kdykoliv kdy zadvm tah, kde u njak existuje, objev se dialogov okno
"Nahradit tah?". Jak tomu mohu zabrnit?</h4>
<p>
Vypnte volbu <b>Ptt se ped nahrazenm tah</b> v menu
<menu>Volby: Tahy</menu>. Nebo si zvyknte na vrcen tahu zptky pouvat
prav tlatko myi, tak vlastn dojde k odstrann tahu z partie, je-li to jej
posledn tah.
</p>

<h4>Jak zmnm v Okn seznamu parti ku sloupc?</h4>
<p>
Kliknte levm nebo pravm tlatkem myi na kad titulek sloupce.
</p>

<h4>Jak mohu pout okno stromu s vbrem parti, ne s celou databz?</h4>
<p>
Pouijte <a Clipbase>databzi schrnka</a>. Nastavte filtr databze tak, aby
obsahoval partie, kter chcete pout pro strom, a zkoprujte je pomoc okna
<a Switcher>vbru databze</a> do databze schrnka.  Pak v databzi schrnka
otevete okno stromu.
</p>

<h4>Pro velk databze je strom pomal. Jak ho urychlm?</h4>
<p>
Pro pro dal pouit daj stromu asto ukldejte cache stromu. Dal
detaily najdete na strnkch npovdy <a Tree>stromu</a>, v sekci o cache.
</p>

<h4>Jak mohu pmo editovat PGN zpis partie?</h4>
<p>
K editaci aktuln partie nemete pout okno <a PGN>PGN</a>, ale mete
editovat jej PGN zpis pouitm okna <a Import>importu partie</a>.  Otevete ho
(klvesov zkratka <b>Control+Shift+I</b>) a zvolte
<b>Vloit aktuln partii</b>, pak mete partii editovat a nakonec zvolte
<b>Import</b>.
</p>

<h4>Moje databze obsahuje rzn tvary jmen nkterch hr. Jak je mohu vechny
opravit?</h4>
<p>
Pouitm pkaz v menu <menu>Soubor: drba</menu> mete editovat
individuln jmna hr nebo opravit vechna jmna v databzi. tte strnku
<a Maintenance Editing>drba</a>.
</p>

<h4>Mm oteveny dv databze: prvn s mmi vlastnmi partiemi a druhou velkou s
velmistrovskmi partiemi. Jak porovnm jednu z mch parti s tmi ve velk
databzi?</h4>
<p>
Ve velk databzi si otevete <a Tree>okno stromu</a> a zvolte
<term>Zamknout</term>, aby jste zamknuli strom k tto databzi. Potom se
pepnte do druh databze a strom bude dle pokraovat v zobrazovn daj pro
velkou databzi.
</p>

<p><footer>(Aktualizovno: Scid 2.6, Srpen 2001)</footer></p>
}


################
### Main window:

set helpTitle(C,MainWindow) "Hlavn okno Scidu"
set helpText(C,MainWindow) {<h1>Hlavn okno Scidu</h1>
<p>
Hlavn okno Scidu zobrazuje achovnici s aktuln pozic aktivn partie a
informace o tto partii a o oteven databzi. Jednotliv strnky npovdy
popisuj <a Menus>menu</a> hlavnho okna a <a Moves>zpsoby zadvn tah</a>.
</p>

<h3>Tlatka navigace v partii</h3>
<p>
Navigan tlatka nad achovnic maj tyto vznamy, zleva doprava:
<ul>
<li> <button tb_start> Jdi na zatek partie. </li>
<li> <button tb_prev> Jdi o jeden tah nazpt. </li>
<li> <button tb_next> Jdi o jeden tah dopedu. </li>
<li> <button tb_end> Jdi na konec partie. </li>
<li> <button tb_invar> Sko do varianty. </li>
<li> <button tb_outvar> Opus aktuln variantu. </li>
<li> <button tb_addvar> Pidej variantu k tomuto tahu v partii. </li>
<li> <button tb_play> Spus/Ukoni automatick pehrvn tah (viz
 ne). </li>
<li> <button tb_trial> Spus/Ukoni <a Moves Trial>zkuebn md</a>. </li>
<li> <button tb_flip> Oto achovnici. </li>
<li> <button tb_coords>  Zapni/Vypni zobrazovn souadnic achovnice. </li>
</ul>

<h4><name Autoplay>Automatick pehrvn</name></h4>
<p>
V reimu automatickho pehrvn Scid automaticky pehrv smrem dopedu
aktuln partii, dokud nedojde na jej konec. asov interval mezi tahy lze
nastavit z menu <menu>Volby: Tahy</menu>, pi uloen voleb je uloen do
vaeho souboru voleb.
</p>
<p>
Reim automatickho pehrvn spout nebo ukonuje klvesov zkratka
<b>Control+Z</b>, ukonit ho lze rovn klvesou <b>Escape</b>.
</p>
<p>
Jestlie spustte reim automatickho pehrvn pi otevenm
<a Analysis>analytickm okn</a>, partie se bude
<term>komentovat</term>: ped provedenm kadho tahu bude jako nov varianta
pidna analza programu a jeho hodnocen. Podrobnosti se dotete na strnce
npovdy o <a Analysis>analytickm okn</a>.
</p>

<h3>Informan zna partie</h3>
<p>
Oblast pod achovnic zobrazujc informace o partii se nazv
<term>informan zna partie</term>.
Jej prvn ti dky zobrazuj jmna hr,
vsledek, datum a msto.
tvrt dek indikuje souasnou pozici partie a
nsledujc tah.
</p>
<p>
Pt dek zobrazuje <a ECO>ECO</a> (Encyclopedia of Chess Openings, tj.
Encyklopedie achovch zahjen) kd aktuln pozice, jestlie se tato pozice
nalz v pouvanm ECO souboru.
</p>
<p>
Pravm tlatkem mete v informan zn partie aktivovat menu, kde lze nap.
skrt nsledujc tah (uiten pi trninku, kdy hdte jednotliv tahy
partie) a smazat nebo obnovit aktuln partii. Toto menu lze aktivovat i bez
myi stisknutm funkn klvesy <b>[F9]</b>.
</p>

<h4>Tabulky koncovek (tablebases)</h4>
<p>
Kdykoliv aktuln pozice doshne materiln konfiguraci nalezenou v databzovm
souboru tabulek koncovek, informan zna partie rovn zobrazuje jej
hodnocen podle tto tabulky. Detaily hledejte na strnce npovdy o
<a TB>tabulkch koncovek</a>.
</p>

<h3>Stavov lita</h3>
<p>
Stavov lita zobrazuje informace o aktuln databzi. Prvn pole indikuje stav
partie: <b>XX</b> znamen, e partie byla zmnna, ale jet neuloena, zatmco
<b>--</b> znamen, e zmnna nebyla, a <b>%%</b> indikuje, e databze je jen
ke ten (ned se zmnit).
</p>
<p>
Jestlie chcete, aby databze byla otevena jen ke ten, nastavte
adekvtn pstupov prva k jejm souborm, minimln aspo k jejmu indexovmu
souboru, nap. na pkazovm dku zadejte
<b>chmod a-w myfile.si3</b>
a tato databze pak bude Scidem otevena jen ke ten.
</p>
<p>
Stavov lita rovn zobrazuje, kolik parti je aktuln ve
<a Searches Filter>filtru</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}


######################
### Menus help screen:

set helpTitle(C,Menus) "Menu"
set helpText(C,Menus) {<h1>Menu Scidu</h1>

<h3><name File>Soubor</name></h3>
<ul>
<li><menu>Nov</menu>: Vytvo novou databzi.</li>
<li><menu>Otevt</menu>: Oteve existujc databzi.</li>
<li><menu>Zavt</menu>: Zave aktuln databzi.</li>
<li><menu>Vyhledva</menu>: Oteve <a Finder>Vyhledva soubor</a>.</li>
<li><menu>Zloky</menu>: <a Bookmarks>Zloky</a> a jejich funkce.</li>
<li><menu>drba</menu>: Funkce <a Maintenance>drby</a> databze.</li>
<ul>
  <li><menu>Okno drby</menu>: Otevr/Zavr okno drby databze.</li>
  <li><menu>Vymazn zdvojench parti</menu>: Nalezne v databzi
      <a Maintenance Twins>zdvojen</a> partie.</li>
  <li><menu>ECO klasifikace partie</menu>: Pepot
      <a ECO>ECO kdy</a> vech parti v databzi.</li>
  <li><menu>Editor jmen</menu>: Nahrad vechny vskyty jmna hre, msta
      turnaje a kola.</li>
</ul>
<li><menu>Pouze pro ten</menu>: Nastav aktuln databzi jen ke ten.</li>
<li><menu>Base 1/2/3/4/5</menu>: Tmito pkazy lze pepnat a mezi tymi
    aktivnmi databzemi a <a Clipbase>databz schrnka</a>.</li>
<li><menu>Ukonit</menu>: Ukon program Scid.</li>
</ul>

<h3><name Edit>Editace</name></h3>
<ul>
<li><menu>Pidat variantu</menu>: Pid novou przdnou variantu k nsledujcmu
    tahu nebo k poslednmu, jestlie za nm u dn jin tah nensleduje.</li>
<li><menu>Vymazat variantu</menu>: Zobraz submenu variant k aktulnmu (tj.
    nsledujcmu) tahu, kter lze vymazat.</li>
<li><menu>Zaadit jako prvn variantu</menu>: Zaad vybranou variantu k
    aktulnmu tahu na prvn msto.</li>
<li><menu>Povit stvajc variantu na hlavn</menu>: Pov vybranou variantu
    na hlavn vmnou se souasnou hlavn variantou.</li>
<li><menu>Zkusit variantu</menu>: Spust <a Moves Trial>zkuebn md</a> pro
    testovn varianty bez zsahu do aktuln partie.</li>
<li><menu>Odstranit</menu>: Odstran z aktuln partie vechny komente nebo
    varianty.</li>
<br>
<li><menu>Vyprzdnit schrnku</menu>: Vyprzdn
    <a Clipbase>databzi schrnka</a>, take neobsahuje dn partie.</li>
<li><menu>Zkoprovat tuto partii do schrnky</menu>: Zkopruje aktuln partii
    do <a Clipbase>databze schrnka</a>.</li>
<li><menu>Vloit posledn partii ze schrnky</menu>: Vlo aktivn partii z
    <a Clipbase>databze schrnka</a> do aktuln databze.</li>
<br>
<li><menu>Nastavit vchoz pozici</menu>: Nastav vchoz pozici aktuln
    partie.</li>
<li><menu>Vloit poten pozici</menu>: Vlo poten pozici z
    aktulnho vybranho textu (v clipboardu).</li>
</ul>

<h3><name Game>Partie</name></h3>
<ul>
<li><menu>Nov partie</menu>: Nastav aktuln partii do poten pozice a
    zru vechny jej neuloen zmny.</li>
<li><menu>Nathnout prvn/pedchoz/nsledujc/posledn partii</menu>: Nathne
    prvn/pedchoz/nsledujc/posledn partii do
    <a Searches Filter>filtru</a>.</li>
<li><menu>Znovunathnout aktuln partii</menu>: Znovunathne aktuln partii a
    zru vechny jej neuloen zmny.</li>
<li><menu>Nathnout partii slo</menu>: Nathne z aktuln databze partii
    danho sla.</li>
<br>
<li><menu>Uloit: pepsn partie</menu>: Ulo aktuln partii pepsnm jej
    originln verze v databzi</li>
<li><menu>Uloit: pidn nov partie</menu>: Ulo aktuln partii jako novou
    partii pidnm na konec databze.</li>
<br>
<li><menu>Identifikace zahjen</menu>: Najde nejhlub pozici z aktuln
    partie, kter se jet nachz v ECO souboru.</li>
<li><menu>Pejt na tah slo</menu>: Pejde na specifikovan tah aktuln
    partie.</li>
<li><menu>Hledat novinku</menu>: Najde prvn tah aktuln partie, kter se jet
    pedtm nehrl. </li>
</ul>

<h3><name Search>Hledat</name></h3>
<ul>
<li><menu>Vyistit filter</menu>: Vyist <a Searches Filter>filter</a>,
    take obsahuje vechny partie.</li>
<li><menu>Negace filtru</menu>: Invertuje filtr tak, e obsahuje jen partie,
    kter neobsahoval.</li>
<br>
<li><menu>Aktuln pozice</menu>: Vyhledv
    <a Searches Board>aktuln pozici</a> na achovnici.</li>
<li><menu>Hlavika: Vyhledv podle informac v
    <a Searches Header>hlavice</a>, nap. podle jmen hr.</li>
<li><menu>Materil/Vzor</menu>: Vyhledv podle
    <a Searches Material>materilu</a> nebo vzor.</li>
<br>
<li><menu>Hledat pomoc souboru voleb</menu>: Vyhledv pouitm
    <a Searches Settings>nastaven</a> ze souboru vyhledvacch voleb.</li>
</ul>

<h3><name Windows>Okna</name></h3>
<ul>
<li><menu>Editor koment</menu>: Otevr/Zavr okno
    <a Comment>editoru koment</a>.</li>
<li><menu>Seznam parti</menu>: Otevr/Zavr
    <a GameList>okno seznamu parti</a>.</li>
<li><menu>Okno PGN</menu>: Otevr/Zavr
    <a PGN>okno PGN</a>.</li>
<li><menu>Vyhledva turnaj</menu>: Otevr/Zavr okno
    <a Tmt>vyhledvae turnaj</a>.</li>
<br>
<li><menu>Vbr databze</menu>: Otevr/Zavr okno
    <a Switcher>vbru databze</a>, kde se lze pepnout do jin databze nebo
    jednodue koprovat partie mezi databzemi.</li>
<li><menu>Okno drby</menu>: Otevr/Zavr okno
    <a Maintenance>drby</a> databze.</li>
<br>
<li><menu>ECO prohle</menu>: Otevr/Zavr okno
    <a ECO browser>ECO prohlee</a>.</li>
<li><menu>Editor repertoru</menu>: Otevr/Zavr
    <a Repertoire>editor repertoru</a>.</li>
<li><menu>Statistick okno</menu>: Otevr/Zavr
    <term>Statistick okno filtru</term>, kter zobrazuje pehled vher/proher
    parti ve <a Searches Filter>filtru</a>.</li>
<li><menu>Stromov okno</menu>: Otevr/Zavr
    <a Tree>stromov okno</a>.</li>
<li><menu>Okno tabulky koncovek</menu>: Otevr/Zavr okno, kter zobrazuje
    informace z <a TB>tabulek koncovek</a>.</li>
</ul>

<h3><name Tools>Nstroje</name></h3>
<ul>
<li><menu>Program pro analzu</menu>: Spout/Zastavuje achov program pro
    analzu pozice, kter zobrazuje v
    <a Analysis>analytickm okn</a> hodnocen souasn pozice.</li>
<li><menu>Program pro analzu #2</menu>: Spout/Zastavuje druh achov program
    pro analzu pozice.</li>
<li><menu>Turnajov tabulka</menu>: Zkonstruuje a zobraz
    <a Crosstable>turnajovou tabulku</a> pro aktuln partii.</li>
<li><menu>Email manaer</menu>: Otevr/Zavr okno
    <a Email>emailovho manaera</a> pro sprvu korespondennch parti hranch
    emailem.</li>
<br>
<li><menu>Profil zahjen</menu>: Generuje
    <a Reports Opening>profil zahjen</a> pro aktuln pozic.</li>
<li><menu>Stopa figur</menu>: Otevr okno
    <a PTracker>stopae figur</a>.</li>
<br>
<li><menu>Informace o hrch</menu>: Zobraz
    <a PInfo>informace o hrch</a> aktuln partie.</li>
<li><menu>Graf ratingu </menu>: Zobraz
    <a Graphs Rating>graf ratingu</a>.</li>
<li><menu>Graf skre</menu>: Zobraz
    <a Graphs Score>graf skre</a>.</li>
<br>
<li><menu>Export aktuln partie</menu>: Zape aktuln partii do textovho
    souboru ve formtu PGN, HTML nebo LaTeX. tte strnku npovdy o
    <a Export>exportu</a>.</li>
<li><menu>Export filtrovanch parti</menu>: Zape vechny partie ve
    vyhledvacm <a Searches Filter>filtru</a> do textovho souboru ve formtu
    PGN, HTML nebo LaTeX. tte strnku npovdy o <a Export>exportu</a>.</li>
<br>
<li><menu>Import jedn PGN partie</menu>: Oteve <a Import>okno Importu</a> pro
    zadvn partie nebo jej vloen v <a PGN>PGN formtu</a>.</li>
<li><menu>Import souboru PGN parti</menu>: Importuje cel soubor parti
    v PGN formtu do aktuln databze.</li>
</ul>

<h3><name Options>Volby</name></h3>
<p>
Toto menu poskytuje pkazy pro nastaven takka vech konfigurovatelnch voleb
Scidu. Pkaz <menu>Uloit volby</menu> ulo aktuln nastaven voleb do
souboru "<b>~/.scid/scidrc</b>" (nebo <b>scid.opt</b> v adresi Scidu pro
uivatele Windows); tento soubor se nat pi kadm startu Scidu.
</p>

<h3><name Help>Npovda</name></h3>
<p>
Toto menu obsahuje funkce npovdy a pstup k oknu tip dne nebo k startovacmu
oknu, kter poskytuje informace o souborech, kter Scid naetl pi startu.
</p>

<p><footer>(Aktualizovno: Scid 3.5, nor 2003)</footer></p>
}


########################
### Entering moves help:

set helpTitle(C,Moves) "Zadvn tah"
set helpText(C,Moves) {<h1>Zadvn tah</h1>
<p>
Ve Scidu mete zadvat tahy partie pouitm myi nebo klvesnice. Kdy pohnete
my na njak pole achovnice, toto pole spolu s dalm zmn barvu, jestlie
existuje z tohoto nebo na toto pole mon tah. Jedn se o
<term>navrhovan tah</term>. Chcete-li zadat tento tah, jednodue kliknte
<term>levm</term> tlatkem myi. Jestlie vs navrhovn tah ru, mete ho
vypnout v menu Volby.
</p>
<p>
Jestlie chcete zadat jin tah ne navrhovan, mete pout <term>lev</term>
tlatko myi; stisknte tlatko na jednom poli a uvolnte na druhm.
</p>
<p>
Jestlie upednostujete zadvat tahy dvma kliknutm myi ped jejm taenm
se stisknutm tlatkem, mete pout <term>prostedn</term> tlatko;
kliknte na jedno pole a pak na druh.
</p>

<h4>Vrcen tahu zpt</h4>
<p>
Chcete-li vrtit posledn tah zpt, kliknte pravm tlatkem myi. Vrtte se
tak jeden tah nazpt a tah se smae, jestlie byl posledn v partii nebo ve
variant.
</p>

<h4>Nhrada pvodnch tah</h4>
<p>
Kdy zadte tah v takovm mst partie, kde u njak tah existuje, Scid zobraz
dialogov okno, zda opravdu chcete nahradit pvodn tah (pvodn tah a vechny
tahy za nm budou ztraceny) nebo chcete pidat nov tah jako variantu. Nkterm
lidem me toto dialogov okno vadit, protoe vdy chtj nahradit pvodn tahy,
z tohoto dvodu to lze v menu <menu>Volby: Tahy</menu> volbou
"<i>Ptt se ped nahrazenm tah</i>" vypnout.
</p>

<h4><name Trial>Zkuebn md</name></h4>
<p>
Jestlie studujete partii a dojdete do pozice, kde chcete zkusit alternativn
variantu beze zmny partie, vyberte z menu <menu>Editace</menu> pkaz
<b>Zkusit variantu</b> pro sputn zkuebnho mdu. V tomto mdu mete zadvat
tahy a jinak doasn mnit partii, po ukonen zkuebnho mdu se pak vrtte do
pozice, kde jste tento md spustili.</p>

<h3><name Mistakes>Oprava chyb</name></h3>
<p>
Kdy zadvte partii a najednou uvidte chybn tah nkolik tah dv, je mon
chybu opravit bez ztrty nsledujcch, ji zadanch tah. Jedinm zpsobem je
editace PGN reprezentace partie: otevete okno <a Import>Importu</a>, zadejte
"Vloit aktuln partii", opravte chybn tah a zadejte "Import".
</p>

<h3>Zadvn tah z klvesnice</h3>
<p>
Pro zadvn tah z klvesnice jednodue stisknte odpovdajc klvesy psmene
a slice. Vimnte si, e akceptovateln tahy mus bt v
<term>SAN notaci</term>, <i>bez</i> symbol bran (x) a promny (=). Pi zadvn
se nerozliuje velikost psmen, take nap. msto Nf3 mete zadat [n][f][3] --
pette si ale poznmku ne o konfliktech u pcovch tah.
</p>
<p>
Aby nedochzelo k problmm, notace pro krtkou a dlouhou rodu je [O][K] resp.
[O][Q] msto bnch oznaen O-O a O-O-O.
</p>
<p>
Pi zadvn tah stavov lita ukazuje adekvtn mon tahy. Kdykoliv mete
stiskem [space] vybrat ze seznamu prvn tah a pidat ho tak do partie. Chcete-li
smazat njak znak, stisknte [Backspace] nebo [Delete].
</p>
<p>
<b>Vimnte si</b>, e pi malch psmenech se nejprve navrhuj tahy pci,
take [b] me odpovdat pci nebo stelci (Bishop), ale v ppad konfliktu
muste pro tah stelcem pout velk psmeno [B].</p>

<h4>Doplovn tah</h4>
<p>
V menu Volby mete zapnout nebo vypnout automatick
<term>doplovn tah</term>. Pi zapnutm doplovn tah je tah zahrn,
jakmile jste zadali dostatek informac pro jeho rozeznn mezi ostatnmi monmi
tahmi. Nap. pi zapnutm doplovn sta pro tah <b>Jf3</b> v poten pozici
zadat [n][f] msto [n][f][3].</p>

<h3><name Null>Zadvn nulovch tah</name></h3>
<p>
<a Annotating Null>Nulov</a> (przdn) tahy mohou bt uiten ve variantch,
 kde
chcete peskoit tah jedn strany. Nulov tah mete zadat my vzetm jednoho
krle druhm krlem nebo klvesnic zadnm "<b>--</b>" (tj. dvakrt stisknout
tlatko mnus).</p>

<h3>Zadvn bnch anotanch symbol</h3>
<p>
Rovn mete v hlavnm okn s pomoc klvesnice zadvat bn
<a NAGs>anotan symboly</a>, bez nutnosti pout okno
<a Comment>editoru koment</a>. Nsledujc seznam ukazuje,kter symboly mete
zadat a jejich klvesov zkratky:
<ul>
<li> !  : [!][Return]</li>
<li> ?  : [?][Return] </li>
<li> !? : [!][?][Return] </li>
<li> ?! : [?][!][Return] </li>
<li> !! : [!][!][Return] </li>
<li> ?? : [?][?][Return] </li>
<li> </li>
<li> +- : [+][-] </li>
<li> +/-: [+][/] </li>
<li> += : [+][=] </li>
<li> =  : [=][Return] </li>
<li> -+ : [-][+] </li>
<li> -/+: [-][/] </li>
<li> =+ : [=][+] </li>
</ul>

<p><footer>(Aktualizovno: Scid 3.4, ervenec 2002)</footer></p>
}


#########################
### Searches help screen:

set helpTitle(C,Searches) "Vyhledvn"
set helpText(C,Searches) {<h1>Vyhledvn Scidem</h1>
<p>
Scid me v databzi vyhledvat podle rznch typ. Ti hlavn typy vyhledvn
 jsou:
<ul>
<li><b>1)</b> podle aktuln pozice na achovnici, </li>
<li><b>2)</b> podle specifikovanch vzor materilu nebo figur, a </li>
<li><b>3)</b> podle informac v hlavice jako nap. hri, vsledek, datum.
 </li>
</ul>
<p>
K tmto tem typm vyhledvn navc existuje automatick vyhledvac md zvan
<a Tree>Okno stromu</a>, kter je objasnn zvlṻ.
</p>

<h3><name Filter>Vyhledvac filtr</name></h3>
<p>
Vyhledvn ve Scidu jsou zaloeny na pojmu <term>filtr</term>. Filtr
reprezentuje podmnoinu aktuln databze: v kadm okamiku je kad partie bu
ve filtru obsaena nebo z filtru vyata.
</p>
<p>
U kadho typu vyhledvn mete vyhledvn omezit na existujc filtr, pidat
k existujcmu filtru nebo filtr ignorovat a prohledat tak celou databzi.
</p>
<p>
Mete rovn vechny partie jedn databze obsaen ve filtru zkoprovat do
jin databze pouitm okna <a Switcher>vbru databze</a>.
</p>
<p>
Pi vyhledvn podle pozice, podle materilu/vzoru nebo pi
<a Tree>stromovch</a> vyhledvnch se slo tahu prvn odpovdajc pozice
kad odpovdajc partie zapamatuje, take pi nahrn kad partie bude
automaticky zobrazena odpovdajc pozice.
</p>
<p>
<b>Vimnte si</b>, e vyhledvn probh jen v hlavn variant kad partie, ne
v ostatnch variantch. </p>

<h3><name Board>Vyhledvn podle aktuln pozice</name></h3>
<p>
Tento zpsob vyhledvn nalezne partie, kter obsahuj aktuln zobrazenou
pozici, pi ignorovn prv rody a bran mimochodem (<i>en passant</i>).
</p>
<p>
Existuj tyi typy vyhledvn podle pozice. Vechny tyi vyaduj tent
materil a shodu u strany, kter m bt na tahu. Tyto typy jsou:
<ul>
<li> [1] pesn pozice (vechny figury na stejnch polch), </li>
<li> [2] pci (vichni pci na stejnch polch, figury mohou bt kdekoliv),
     </li>
<li> [3] sloupce (vichni pci na stejnch sloupcch, figury mohou bt
     kdekoliv), a </li>
<li> [4] materil (pci a figury mohou bt kdekoliv). </li>
</ul>
<p>
Vyhledvn podle pc je uiten pi studiu zahjen podle pcov struktury,
vyhledvn podle ad a materilu je zase uiten pro nalezen podobnch pozic
v koncovce.
</p>
<p>
Chcete-li hledat libovolnou pozici, mete si pozici nejprve nastavit na
achovnici (z menu <menu>Editace: Nastavit vchoz pozici</menu>) a potom
spustit jej vyhledvn. </p>
<p>
Vbrem <b>Dvat se do variant</b> mete poadovat vyhledvn i ve variantch
(msto jen v hlavn variant partie), ale to me vyhledvn znan zpomalit,
je-li databze velk a obsahuje mnoho parti s variantami.
</p>

<h3><name Material>Vyhledvn podle materilu/vzoru</name></h3>
<p>
Tento zpsob vyhledvn je vhodn pro hledn tmat z koncovek a stedn hry.
Mete specifikovat minimln a maximln poet jednotlivch kamen a hledat
vzory jako nap. stelec na f7 nebo pec na f sloupci.
</p>
<p>
Je peddefinovno mnostv bnch materilnch sestav a vzor, jako nap.
koncovky v proti pci nebo dmsk izolovan pec.
</p>
<p>
<b>Rada:</b><br>
Rychlost vyhledvn podle vzoru se me iroce liit. Nastavenm inteligentnch
omezen mete vyhledvac as redukovat. Nap. jestlie pi hledn koncovky
nastavte minimln slo tahu na 20, vechny partie konc pod 20 tah mohou
bt peskoeny.
</p>

<h3><name Header>Vyhledvn podle hlaviky</name></h3>
<p>
Tento zpsob vyhledvn me bt pouit na hledn takovch aspekt partie,
kter jsou uloeny v jej hlavice (jako datum, vsledek, jmna, pznaky a
ratingy), take nevyaduje dn dekdovn tah.
</p>
<p>
Aby partie vyhovovala vyhledvn podle hlaviky, mus vyhovovat <b>vechna</b>
pole, kter jste specifikovali.
</p>
<p>
Pi vyhledvn podle pol jmen (Bl, ern, Turnaj, Msto a Kolo) vyhovuje
jakkoliv text obsahujc zadan jmno, pitom se nerozliuje velikost psmen a
ignoruj se mezery. </p>
<p>
Pro tato pole jmen mete pouvat bn zstupn znaky (<b>?</b> reprezentujc
jeden jakkoliv znak a <b>*</b> reprezentujc nulu nebo vce znak) a provdt
vyhledvn s rozliovnm velikosti psmen uzavenm hledanho textu do
uvozovek.  Nap. vyhledvn Msto <b>USA</b> najde americk msta a tak
<b>Lausanne SUI</b>, co pravdpodobn nen to, eho jste chtli doshnout! Ale
vyhledvn Msto <b>"*USA"</b> (nezapomete pout uvozovky) opravdu najde jen
msta ve Spojench Sttech. </p>
<p>
Jestlie hledte jednotlivho hre (nebo dvojici soupe) jako Bl nebo ern
a nezle na tom, jakmi barvami hrli, zvolte <b>Ignorovat barvy</b>.
</p>
<p>
Konen, vyhledvn podle hlaviky me bt pouito na nalezen jakhokoliv
textu (pi rozliovn velikosti psmen a bez pouit zstupnch znak)v PGN
reprezentaci kad partie. Mete zadat a ti textov etzce, kter se vechny
mus objevit v partii, aby partie vyhovovala.
Tento zpsob vyhledvn je velmi uiten pro hledn v komentch nebo
zvltnch poznmek (jako nap. <b>prohra na as</b> nebo <b>Komenttor</b>),
nebo pro sekvenci tah jako <b>Sxh7+</b> a <b>Kxh7</b> pro pijatou ob stelce
na h7.
Avak tento typ vyhledvn me bt <i>velmi</i> pomal, protoe vechny
partie, vyhovujc ostatnm kritrium, mus bt dekdovny a prohledny na
vskyt tchto textovch etzc.
Proto je dobrou ideou tato vyhledvn co nejvc omezit.
Zde jsou njak pklady.
Hledte-li partie s promnou pce na v, zadejte <b>=V</b> a rovn nastavte
pznak <b>Promny</b> na Ano. Hledte-li text, kter by se mohl objevit v
komentch, nastavte pznak <b>Komente</b> na Ano.
Hledte-li tahy <b>Sxh7+</b> a <b>Kxh7</b>, budete mon nap. chtt vyhledvn
omezit na partie s vsledkem 1-0 a nejmn s 40 pltahy, nebo nejprve provst
vyhledvn podle materilu/vzoru, kde bl stelec thnul na h7.
</p>

<h3><name Settings>Uloen vyhledvacch nastaven</name></h3>
<p>
Okna vyhledvn podle materilu/vzoru a podle hlaviky poskytuj tlatko
<term>Uloit</term>. To vm dovoluje uloit svoje aktuln nastaven vyhledvn
pro pozdj pouit, kter se ulo do <term>souboru vyhledvacch voleb</term>
(SearchOption, ppona .sso).
Chcete-li provdt vyhledvn pouitm dve uloenho souboru vyhledvacch
voleb (.sso), z menu <menu>Hledat</menu> vyberte <menu>Hledat pomoc souboru
voleb</menu>.
</p>

<h3>Vyhledvac asy a peskoen partie</h3>
<p>
Vtina vyhledvn produkuje zprvu indikujc spotebovan as a poet parti,
kter byly <term>peskoeny</term>. Peskoen partie je takov partie, kter
me bt z vyhledvn vyata na zklad informac uloench v indexu, bez
dekdovn jakhokoliv jejho tahu. Pro vce informac se podvejte na strnku
npovdy o <a Formats>formtech soubor</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.0, Listopad 2001)</footer></p>
}


##################
### Clipbase help:

set helpTitle(C,Clipbase) "Schrnka"
set helpText(C,Clipbase) {<h1>Databze schrnka</h1>
<p>
K databzm, kter mte oteven, Scid navc poskytuje databzi
<term>schrnka</term>, kter je stejn jako ostatn databze krom toho, e
existuje jen v pamti a nem dn soubory pro trval uloen.
</p>
<p>
Tato schrnka je uiten jako doasn databze, pro sjednocovn vsledk
vyhledvn ve vce ne jedn databzi nebo jako samostatn databze pro
zpracovn vsledk vyhledvn.
</p>
<p>
Pedpokldejme nap., e se chcete pipravit na soupee a prohledali jste
databzi, take <a Searches Filter>filtr</a> obsahuje jen partie, kde soupe
hrl blma.
Tyto partie mete zkoprovat do schrnky (taenm z jejich databze do schrnky
v okn <a Switcher>vbru databze</a>), pepnout se do databze schrnka a
otevenm <a Tree>okna stromu</a> prozkoumat repertor tohoto hre. </p>
<p>
Vimnte si, e partie ve filtru z jedn databze mete pmo zkoprovat do
jin oteven databze (bez pouit schrnky jako zprostedkujcho msta)
pouitm okna <a Switcher>vbru databze</a>.
</p>
<p>
Vimnte si, e schrnka <i>neme</i> bt zavena; nachzte-li se ve schrnce,
pkaz <menu>Soubor: Zavt</menu> je ekvivalentn pkazu
<menu>Editace: Vyprzdnit schrnku</menu>, kter vyprzdn schrnku.
</p>
<p>
Velikost schrnky je trvale omezena 20,000 partiemi, protoe existuje jen v
pamti.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

#################################
### Variations and comments help:

set helpTitle(C,Annotating) "Anotace parti"
set helpText(C,Annotating) {<h1>Anotace parti</h1>
<p>
Scid vm umouje k partii pidat poznmky. Jsou ti typy anotac, kter mete
pidat za tah: symboly, koment a varianty.
</p>

<h3>Symboly a komente</h3>
<p>
Symboly se pouvaj pro indikaci hodnocen pozice (jako nap. "+-" nebo "=")
nebo k oznaen dobrch ("!") a patnch ("?") tah, zatmco koment me bt
libovoln text. Chcete-li k partii pidat symboly, pouijte okno
<a Comment>Editoru koment</a>.
Je zde tak strnka npovdy se seznamem
<a NAGs>standardnch symbolickch hodnot</a>. </p>
<p>
Uvdomte si, e kad tah me mt vce ne jeden anotan symbol, ale pouze
jeden koment. Koment ped prvnm tahem partie je zobrazen jako text ped
zatkem partie.
</p>

<h3><name Vars>Varianty</name></h3>
<p>
<term>Varianta</term> tahu je alternativn posloupnost tah v uritm mst
partie. Varianty mohou obsahovat komente a dokonce rekurzivn mohou mt
podvarianty. Pro vytvoen, navigaci a editaci variant lze pout tlatka nad
achovnic se symbolem "<b>V</b>" a pkazy v menu <menu>Edit</menu>.
</p>

<h4>Klvesov zkratky</h4>
<p>
Kdy m tah varianty, jsou zobrazeny v informan zn partie. Prvn bude
oznaena <b>v1</b>, druh <b>v2</b> atd.
Kliknutm na variantu mete do n skoit nebo stisknte "<b>v</b>" nsledovan
slem varianty. (Jestlie k tahu existuje jen jedna varianta, jednoduch stisk
<b>v</b> do n sko.)
Chcete-li variantu opustit, mete pout klvesovou zkratku "<b>z</b>".
</p>

<h3><name Null>Nulov tahy</name></h3>
<p>
Nkdy mete shledat uitenm ve variant peskoit tah jedn strany. Nap.
mete chtt pidat do varianty tah 14.Sd3 a poukzat, e hroz 15.Sxh7+ Kxh7
16.Jg5+ s tokem. To mete udlat provedenm <term>nulovho tahu</term>, v
pkladu ve mezi 14.Sd3 a 15.Sxh7+. Nulov tah je zobrazen jako  "<b>--</b>"
a me bt zadn pouitm myi provedenm nemonho tahu vzet jednoho krle
druhm nebo z klvesnice zadnm "<b>--</b>" (dv znamnka mnus).
</p>
<p>
Uvdomte si, e nulov tahy nejsou soust PGN standardu, take jestlie
exportujete partie s nulovmi tahy do PGN souboru, Scid poskytne (krom jinch
voleb exportu) volbu uchovat nulov tahy nebo je zkonvertovat na komente pro
kompatibilitu s jinm softwarem.
Pro vce detail tte strnku npovdy o <a Export>exportovn</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.4, ervenec 2002)</footer></p>
}

###############################
### Comment editor window help:

set helpTitle(C,Comment) "Okno editoru koment"
set helpText(C,Comment) {<h1>Okno editoru koment</h1>
<p>
Okno editoru koment umouje pidvat nebo editovat komente a symbolick
anotan znaky k tahm aktivn partie.
</p>

<h3>Anotan symboly</h3>
<p>
Scid pouv pro anotan symboly <a Author Related>PGN standard</a> spolu s
<a NAGs>NAG (numeric annotation glyph)</a> anotanmi hodnotami. Nkter z vtiny
bnch znak (jako "!" nebo "+-") jsou zobrazeny jako znaky a pro rychl pouit
je pro n v okn editoru koment tlatko. Pro ostatn symboly mete zadat
odpovdajc  numerickou NAG hodnotu, kter je slo od 1 do 255.
Nap. NAG hodnota 36 znamen  "Bl m iniciativu" a bude v
<a PGN>PGN zpisu</a> partie zobrazena jako "$36".
</p>
<p>
Pette si strnku npovdy o <a NAGs>NAG hodnotch</a> definovanch
PGN standardem.
</p>
<p>
<b>Rada:</b> Bn hodnotc symboly k tahm (!, ?, !!, ??, !? and ?!)
mete zadat v hlavnm okn, bez pouit okna editoru koment, stiskem
odpovdajcho znaku nsledovanho klvesou [Return].
To je velmi uiten, zvlt pi <a Moves>zadvn tah</a> z klvesnice.
</p>

<h3>Komente</h3>
<p>
Komente mete editovat zpisem v poskytovan textov oblasti a pouitm
tlatek Vyistit, Vrtit se a Uschovat.
K schov komente nen poteba neustle pouvat tlatko Uschovat; koment
je automaticky uschovn, kdykoliv pejdete k jin pozici partie.</p>

<h3>Barevn znaen pol</h3>
<p>
Pouitm specilnho vloenho pkazu, kter se me objevit kdekoliv v
komenti, mete libovolnou barvou barevn oznait libovoln pole achovnice.
Formt tohoto pkazu je:
</p>
<ul>
<li><b>[%mark square color]</b><li>
</ul>
<p>
kde <b>square</b> (tj. pole) je oznaen pole jako nap. d4 a <b>color</b> (tj.
barva) je libovoln znm jmno barvy (jako nap. red, blue4, darkGreen,
lightSteelBlue atd.) nebo RGB kd (znak <b>#</b> nsledovan estic
hexadecimlnch slic, jako nap. #a0b0c8). Jestlie color je vynechno,
pouije se implicitn <red>red</red>.
</p>
<p>
Koment me obsahovat libovoln poet tchto pkaz, ale kad mus mt sv
vlastn <b>[%mark ...]</b> oznaen. Nap. text komente
</p>
<p>
  Nyn je d6 [%mark d6] slab a me bt napadeno jezdcem z b5.
  [%mark b5 #000070]
</p>
<p>
ozna d6 <red>erven</red> a b5 tmavomodrou barvou
<darkblue>#000070</darkblue>.
</p>

<h3>Kreslen ipek</h3>
<p>
Pouitm specilnho komentovacho pkazu podobnmu pedchozmu mete
nakreslit ipku z jednoho pole k druhmu. Formt tohoto pkazu je:
</p>
<ul>
<li><b>[%arrow fromSquare toSquare color]</b><li>
</ul>
<p>
kde <b>fromSquare</b> (tj. z pole) a <b>toSquare</b> (tj. na pole) jsou oznaen
pol jako nap. d4 a <b>color</b> (tj. barva) je libovoln znm jmno barvy
(nap. red, blue4 atd.) nebo RGB kd (nap. #a0b0c8). Jestlie color je
vynechno, pouije se implicitn <red>red</red>.
</p>
<p>
Nap. text komente
</p>
<p>
  Jezdec c3 a stelec c4 kontroluj slab pole d5.
  [%arrow c3 d5 red] [%arrow c4 d5 blue]
</p>
<p>
nakresl ervenou ipku z c3 na d5 a modrou z c4 na d5.
</p>

<p><footer>(Aktualizovno: Scid 3.2, nor 2002)</footer></p>
}

###########################
### Crosstable window help:

set helpTitle(C,Crosstable) "Okno turnajov tabulky"
set helpText(C,Crosstable) {<h1>Okno turnajov tabulky</h1>
<p>
Okno turnajov tabulky zobrazuje turnajovou tabulku pro aktuln partii.
Kdykoliv zvolte aktualizaci tohoto okna (stiskem tlatka Aktualizovat nebo
stiskem klvesy <b>Return</b> v okn turnajov tabulky nebo klvesovou zkratkou
<b>Control+Shift+X</b> v <a MainWindow>hlavnm okn</a> nebo v
<a GameList>okn seznamu parti</a>), Scid vyhled vechny partie toho turnaje,
z kterho je aktuln partie.
</p>
<p>
Partie se povauje ze stejnho turnaje jako je aktuln partie, jestlie se
hrla v <b>asovm intervalu maximln t msc</b> od aktuln partie a m
<b>pesn stejn speciln oznaen Event</b> (turnaj) a <b>Site</b> (msto).
</p>
<p>
Kliknutm levm tlatkem myi na kterkoliv vsledek v tabulce lze nathnout
odpovdajc partii.
Pomoc tlatka <b>Pidat do filtru</b> v okn turnajov tabulky mete vechny
partie turnaje pidat do <a Searches Filter>filtru</a>.
</p>

<h4>Menu okna turnajov tabulky</h4>
<p>
Menu <menu>Soubor</menu> umouje tisk aktuln tabulky do textovho, LaTeX
nebo HTML souboru.
</p>
<p>
Menu <menu>Zobrazit</menu> umouje vybrat formt tabulky:
<b>Kad s kadm</b>, <b>vcarsk systm</b> nebo <b>Vyazovac</b> nebo
<b>Auto</b>.
</p>
<p>
Formt kad s kadm (pro kruhov turnaje) je omezen potem 30 hr, ale
vcarsk systm (pro turnaje s mnoha hri) me zobrazit a 200 hr a a 20
kol. Formt <b>auto</b>, kter pro kad turnaj automaticky vybere nejlep
formt, je nastaven implicitn.
</p>
<p>
Uvdomte si, e Scid pouv k pprav tabulky vcarskho systmu speciln
oznaen <b>Round</b> (Kolo) kad partie, take v turnajov tabulce vcarskho
systmu neuvidte dn partie, jestlie jeho partie nebudou mt numerick
oznaen kol: 1, 2, 3, atd.
</p>
<p>
Menu Zobrazit vm rovn umouje pizpsobit si prezentovan daje pidnm
nebo odebrnm rating, zem a titul hr. Mete rovn zvolit, zda maj bt
v tabulce indikovny barvy (jen pro vcarsk systm).
</p>
<p>
Volba <b>Skupiny podle skre</b> ovlivuje zobrazen tabulky jen tehdy, kdy
jsou hri seazeni podle bod: mezi skupiny hr se stejnm potem bod je pro
lep pehlednost vloen przdn dek.
</p>
<p>
Menu <menu>adit</menu> umouje seadit hre podle jmna, ratingu nebo podle
skre; implicitn jsou azeni podle skre.
</p>
<p>
Menu <menu>Barvy</menu> umouje zapnout nebo vypnout barevn (hypertextov)
zobrazovn. Protoe vak formtovn a zobrazen velk tabulky v hypertextu
me trvat velmi dlouho, volbou <b>Prost text</b> pro velk turnaje uette
spoustu asu.
Avak v textovm mdu nelze klikat na hre i partie.
</p>

<h4>Duplicitn partie v tabulce</h4>
<p>
Abyste dostali v turnajov tabulce sprvn vsledky, je poteba oznait k
vmazu duplicitn partie a partie mus mt shodn tvary jmen hr, turnaj a
mst.
Pro dal npovdu o mazn duplicitnch parti a editaci (nebo kontrole
pravopisu) jmen hr, turnaj, mst tte strnku
<a Maintenance>drby databze</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}


###########################
### Database switcher help:

set helpTitle(C,Switcher) "Vbr databze"
set helpText(C,Switcher) {<h1>Okno vbru databze</h1>
<p>
Okno vbru databze poskytuje pohled, kter umouje jednodue se pepnat a
koprovat partie mezi databzemi.
Je zobrazeno jmno, stav <a Searches Filter>filtru</a> a graficky typ ikony
kad databze, aktivn databze je zvraznna lutm pozadm.
</p>
<p>
Okno vbru databze mete otevt z menu <menu>Okna</menu> nebo jeho
klvesovou zkratkou: <b>Control+D</b>.
</p>
<p>
Chcete-li zkoprovat vechny filtrovan partie jedn databze do druh,
thnte stisknutm levm tlatkem myi od zdrojov databze do clov. Jestlie
partie mohou bt zkoprovny, uvidte potvrzovac dialog (jestlie clov
databze nen <a Clipbase>schrnka</a>), jestlie partie nemohou bt
zkoprovny, uvidte chybovou zprvu.
</p>
<p>
Stisk pravho tlatka myi nad databz vyvol vyskakovac menu
tkajc se tto databze, z kterho lze zmnit typ ikony databze nebo
resetovat jej <a Searches Filter>filtr</a>. Toto menu lze rovn pout ke
zmn orientace okna (vertikln nebo horizontln), co je uiten pro
men obrazovky.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}


############################
### File Finder window help:

set helpTitle(C,Finder) "Okno vyhledvae soubor"
set helpText(C,Finder) {<h1>Okno vyhledvae soubor</h1>
<p>
<term>Vyhledva soubor</term> vm pomh pi hledn soubor vech typ, kter
lze ve Scidu pout: databz, <a PGN>PGN</a> soubor, <a EPD>EPD</a> soubor a
<a Repertoire>repertorovch</a> soubor.
</p>
<p>
Vyhledva zobrazuje o kadm souboru uiten informace jako jeho velikost
(tte ne) a datum posledn modifikace. Kterkoliv zobrazen soubor lze
otevt jeho vybrnm jednoduchm kliknutm levm tlatkem myi.
</p>

<h3>Hledn v podadresch</h3>
<p>
Jestlie chcete nalzt vechny soubory ve vech podadresch souasnho
adrese, zapnte volbu <b>Hledat v podadresch</b>. Takto bude Scid
rekurzivn hledat ve vech podadresch soubory, kter lze ve Scidu otevt.
Pro mnoho podadres to me trvat velmi dlouho, take nen vhodn to provdt
pro adres blzko koenovho adrese souborovho systmu. Vyhledvn soubor
lze zastavit tlatkem <b>Stop</b>.
</p>

<h3>Velikost souboru</h3>
<p>
Vznam velikosti souboru zobrazen vyhledvaem zvis na typu souboru. Pro
databze Scidu a PGN soubory znamen poet parti. Pro EPD soubory znamen poet
pozic. Pro repertorov soubory znamen poet (zahrnutm nebo vylouench)
variant.
</p>
<p>
Pro vechny typy soubor krom databzi Scidu je velikost souboru
odhad vytvoen prohldnutm jen prvnch 64 kilobyt souboru, take velikost
soubor vtch ne 64 kb nemus bt sprvn. Odhadnut velikosti jsou zobrazeny
se znakem tilda (~), indikujc tak, e nejsou pesn.
</p>

<p><footer>(Aktualizovno: Scid 2.7, Z 2001)</footer></p>
}

##################################
### Tournament Finder window help:

set helpTitle(C,Tmt) "Okno vyhledvae turnaj"
set helpText(C,Tmt) {<h1>Okno vyhledvae turnaj</h1>
<p>
<term>Vyhledva turnaj</term> vm umouje najt turnaje v aktuln databzi.
Prochz vechny partie databze a ovuje daje o nalezench turnajch.
Vimnte si, e dv partie se povauj za partie ze stejnho turnaje, jestlie
maj stejn speciln oznaen Event (Turnaj), stejn speciln oznaen Site
(Msto) a hrly se v asovm intervalu maximln t msc od sebe.
</p>
<p>
Editac pol pod seznamem turnaj a nslednm stiskem tlatka
<b>Aktualizovat</b> mete seznam omezit potem hr a parti, datumem,
prmrnm Elo ratingem a zem.
</p>
<p>
Zobrazen seznam me bt setdn podle data, potem hr, potem parti,
prmrnm Elo ratingem, mstem, turnajem nebo pjmenm vtze. Kategorii
vyberte z menu <menu>adit</menu> nebo kliknte na titulek poadovanho sloupce.
</p>
<p>
Chcete-li nathnout prvn partii libovolnho zobrazenho turnaje, sta kliknout
levm tlatkem myi, kdy je dek poadovanho turnaje zvraznn. Tak dojde
rovn k aktualizaci okna <a Crosstable>turnajov tabulky</a>, je-li oteveno.
Jestlie msto toho kliknete pravm tlatkem myi, partie se nathne a okno
turnajov tabulky se oteve, i kdy bylo zaveno.
</p>
<p>
Pro urychlen procesu vyhledvn turnaj je dobrou ideou nastavit docela mal
asov rozsah (jako nanejve nkolik let) nebo vybrat uritou zemi (jejm
tznakovm standardnm kdem). To znan zredukuje poet parti, kter Scid
mus vzt do vahy pi zformovn turnaj z parti v databzi.
</p>

<p><footer>(Aktualizovno: Scid 3.3, Duben 2002)</footer></p>
}

#########################
### GameList window help:

set helpTitle(C,GameList) "Okno seznamu parti"
set helpText(C,GameList) {<h1>Okno seznamu parti</h1>
<p>
Okno seznamu parti zobrazuje jednodkov souhrn informac pro kadou partii
obsaenou v aktulnm <term>filtru</term>.
</p>

<h3>Navigace v seznamu parti</h3>
<p>
V seznamu parti se mete pohybovat pomoc posuvn lity nebo pouitm ty
tlatek pod seznamem. V seznamu se lze pohybovat rovn pomoc klvesnice, a to
klvesami [Home], [End], [Page Up], [Page Down] a ipkami.
</p>
<p>
Pouitm oknka <b>Hledat text</b> lze vyhledvat nsledujc partii v seznamu,
kter obsahuje v poli Bl, ern, Turnaj nebo Msto jist text.
</p>

<h3>Akce s partiemi v seznamu</h3>
<p>
Nathnout partii ze seznamu lze dvojklikem levho tlatka na partii.
Kliknutm prostednho tlatka myi se zobraz poten tahy partie; to me
bt uiten na kontrolu zahjen partie ped jejm nataenm.
</p>
<p>
Prav tlatko myi vyvol pro vybranou partii menu, v kterm mete prohldnout
nebo pipojit partii (viz ne), smazat (nebo obnovit) partii nebo ji vyjmout z
filtru.
Uvdomte si, e smazan partie jen zapne jej mazac pznak; partie zstane a
do <a Compact>zhutnn</a> v databzi.
</p>

<h3>Konfigurace seznamu parti</h3>
<p>
Ke konfiguraci seznamu parti kliknte levm nebo pravm tlatkem myi na
titulku sloupce. Mete tak zmnit ku sloupce, pidat nebo odebrat sloupce a
zmnit bravu pro kad sloupec.
</p>
<p>
Chcete-li jen zmnit velikost sloupce, lze pout klvesovou zkratku; pidrenm
klvesy <b>Control</b> (nebo <b>Shift</b>) a souasnm stiskem levho tlatka
myi na titulku sloupce ho zte a stiskem pravho tlatka rozte.
</p>

<h3>Zmna velikosti seznamu parti</h3>
<p>
Velikost okna seznamu parti se zape do souboru voleb pi kadm uloen
voleb.
Take chcete-li, aby seznam parti zobrazoval implicitn 10 parti, zmte
velikost okna seznamu parti a zadejte pkaz <menu>Uloit volby</menu> z menu
<menu>Volby</menu>.
</p>

<h3><name Browsing>Prohlen a pipojovn parti</name></h3>
<p>
Menu vyvolan pravm tlatkem myi v seznamu parti (a tak jin okna jako
okno <a Reports Opening>profilu zahjen</a> a
<a Tree Best>seznam nejlepch parti</a> v okn <a Tree>stromu</a>) poskytuje
vbr nataen, prohldnut a pipojen partie.
</p>
<p>
Pi volb <term>Prohldnout partii</term> jsou tahy vybran partie (bez
koment nebo variant) zobrazovny v samostatnm okn. To je uiten cesta k
prohldnut jin partie bez ovlivnn aktuln nataen partie.
</p>
<p>
Volba <term>Pipojit partii</term> poskytuje zpsob k pipojen vybran partie
jako varianty k aktuln partii. Scid nalezne nejhlub msto, kde se vybran
partie li od aktuln partie (pehozen tah se berou v vahu), a v tto
pozici pid vybranou partii jako variantu. Mete rovn zmnit poet pidanch
tah vybran partie podle toho, jestli chcete pipojit celou partii nebo jen
jej zahjen.
</p>

<p><footer>(Aktualizovno: Scid 3.2, nor 2002)</footer></p>
}


#######################
### Import window help:

set helpTitle(C,Import) "Okno importu parti"
set helpText(C,Import) {<h1>Okno importu parti</h1>
<p>
Okno importu Scidu vm poskytuje jednoduch zpsob ke vkldn partie v
<a PGN>PGN formtu</a> z jin aplikace nebo okna do Scidu.
</p>
<p>
Velk bl rmec v okn je msto, kam zapete nebo vlote text partie v PGN
formtu, ed rmec pod poskytuje zptnou vazbu vech chyb a varovn.
</p>

<h3>Editace aktuln partie prostednictvm okna importu</h3>
<p>
Okno importu lze rovn pout jako ikovn prostedek k proveden nkolika mlo
zmn v aktuln partii: mete vloit aktuln partii do okna importu (pouitm
tlatka <b>Vloit aktuln partii</b>), editovat jej text a po skonen
kliknout <b>Import</b>.
</p>

<h3>Speciln oznaen PGN v okn importu</h3>
<p>
Scid oekv ped vemi tahmi speciln hlavikov oznaen PGN jako nap.
<ul>
<li> <b>[Result "*"]</b>, </li>
</ul>
ale klidn mete vloit partii jako
<ul>
<li> <b>1.e4 e5 2.Sc4 Sc5 3.Dh5?! Jf6?? 4.Dxf7# 1-0</b> </li>
</ul>
bez vech specilnch hlavikovch oznaen a Scid ji importuje.
</p>

<h3>Pouvn PGN soubor ve Scidu</h3>
<p>
Jestlie chcete ve Scidu pouvat formt soubor PGN, ale nechcete ho nejprve
zkonvertovat pouitm <a Pgnscid>pgnscid</a>, existuj zde dv cesty.
</p>
<p>
Za prv mete importovat partie v souboru do existujc databze pouitm
pkazu menu <menu>Nstroje: Import souboru PGN parti...</menu>.
</p>
<p>
Alternativou je oteven PGN souboru pmo ve Scidu. Avak soubory formtu PGN
jsou oteveny pouze ke ten a spotebovvaj vce pamti ne porovnateln
databze Scidu, take to lze doporuit jen pro relativn mal PGN soubory.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

###################
### Exporting help:

set helpTitle(C,Export) "Export parti"
set helpText(C,Export) {<h1>Export parti</h1>
<p>
K exportu aktuln partie nebo vech parti v aktulnm filtru do textovho
souboru mete pout pkazy v menu <menu>Nstroje</menu>.
</p>
<p>
Textov soubor je k dispozici ve tech formtech: <a PGN>PGN</a> (portable game
notation), HTML (pro webov strnky) a LaTeX (populrn szec systm).
</p>
<p>
Pi exportovn si mete vybrat, zda-li chcete vytvoit nov soubor nebo pidat
partie k existujcmu souboru parti exportovanch Scidem.
</p>

<h3>Diagramy</h3>
<p>
Pi exportu v HTML nebo LaTeX formtu Scid automaticky pid diagram, kdykoliv
se v partii objev diagramov <a NAGs>nag</a> ("D") nebo <a Comment>koment</a>
zanajc znakem "#".
</p>

<h3><name Null>Nulov tahy v PGN exportu</name></h3>
<p>
Scid umouje ukldat do partie <a Annotating Null>nulov (przdn) tahy</a>,
protoe mohou bt uiten pi anotaci parti variantami.
Avak  PGN standard pojem nulov tah neobsahuje. Take exportujete-li partie
Scidu s nulovmi tahy do PGN souboru, ostatn PGN tec software nebude schopen
nulov tahy pest.
</p>
<p>
K een tohoto problmu Scid poskytuje pi exportu parti do PGN formtu navc
volbu <b>Convert null moves to comments</b>.
Chcete-li vytvoit PGN soubor, kter me pout jin software, tuto volbu
zapnte a varianty obsahujc nulov tah budou konvertovny na komente. Avak
chcete-li vytvoit PGN soubor, kter me bt pozdji importovn zpt do Scidu
se zachovanmi nulovmi tahmi, ponechte tuto volbu vypnutou.
</p>

<h3>HTML export</h3>
<p>
Scid me exportovat partie do HTML souboru. Aby se zobrazily diagramy, je
potebovat, aby obrzky diagram (distribuovan spolen se Scidem v adresi
"<b>bitmaps/</b>") byly v podadresi <b>bitmaps/</b> pod adresem, kde se
nachz HTML soubor.
</p>

<h3>LaTeX export</h3>
<p>
Scid me exportovat partie do LaTeX souboru.
Partie jsou szeny ve dvou sloupcch na stranu a tahy jsou v symbolick
algebraick notaci.
</p>
<p>
Pro vce informac tte strnku npovdy <a LaTeX>Pouit LaTeXu se Scidem</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.4, ervenec 2002)</footer></p>
}

###############
### LaTeX help:

set helpTitle(C,LaTeX) "Scid a LaTeX"
set helpText(C,LaTeX) {<h1>Pouit LaTeXu se Scidem</h1>
<p>
Scid me partie a profily zahjen ukldat do soubor v LaTeX formtu. LaTeX
je rozen TeXu, populrnho szecho systmu.
</p>
<p>
Chcete-li szet LaTeX soubory vytvoen Scidem, muste mt (samozejm) LaTeX a
muste mt nainstalovan balk achovch font "chess12". Tento balk font
obvykle nen soust standardn instalace LaTeXu, take klidn mete mt LaTeX
a nemuste mt achov fonty.
</p>
<p>
Pro informace o staen a instalaci achovch font navtivte strnku
<url http://scid.sourceforge.net/latex.html>Pouit LaTeXu se Scidem</url>
na <url http://scid.sourceforge.net/>webov strnce Scidu</url>.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

####################
### PGN window help:

set helpTitle(C,PGN) "Okno PGN"
set helpText(C,PGN) {<h1>Okno PGN</h1>
<p>
Okno PGN Scidu zobrazuje obsah aktuln partie ve standardn PGN reprezentaci. V
zpisu tah jsou komente {ve sloench zvorkch} a varianty (v zvorkch).
</p>

<h3>PGN formt</h3>
<p>
PGN (Portable Game Notation) je obecn standard pro penos achovch parti mezi
potaovmi programy.
PGN partie se skld ze dvou sekc. Prvn je hlavika, kter obsahuje speciln
oznaen jako nap.
<b>[White "Kasparov, Gary"]</b>
a
<b>[Result "1/2-1/2"]</b>.
</p>
<p>
Druh sekce obsahuje skuten tahy partie ve standardn algebraick notaci
(standard algebraic notation, SAN) spolen se vemi variantami,
<a NAGs>anotanmi symboly</a> a <a Comment>komenti</a>.
</p>

<h3>Akce v okn PGN</h3>
<p>
Okno PGN mete pout k navigaci v partii: kliknutm levm tlatkem myi na
tah skote do pozice po tomto tahu. Kliknutm levm tlatkem myi na koment
spustte jeho editaci.
Navigan klvesy (tj. ipky) (a klvesy <b>v</b> a <b>z</b> pro skok do a z
varianty) umouj navigaci v partii jako v hlavnm okn.
</p>

<h3>Volby zobrazen PGN</h3>
<p>
Menu okna PGN obsahuj volby, kter ovlivuj vzhled okna PGN. Scid me
zobrazit partii barevn nebo jako obyejn text -- viz menu
<menu>Zobrazit</menu> v okn PGN.
Barevn zobrazen se snadnji te a dovoluje vm vbr tah a koment pouitm
myi, ale je mnohem pomalej na aktualizaci. Pro velmi dlouh partie budete
mon chtt zvolit zobrazen jako obyejn text.
</p>
<p>
Pro vt itelnost mete rovn zmnit formt koment a
variant volbou jejich odsazovn na nov dek.
</p>
<p>
Volby zobrazen PGN a velikost okna PGN se ulo do souboru voleb vdy, kdy
zadte pkaz <b>Uloit volby</b> z menu <menu>Volby</menu> v hlavnm okn.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}


#######################
### Piece Tracker help:

set helpTitle(C,PTracker) "Stopa figur"
set helpText(C,PTracker) {<h1>Okno stopae figur</h1>
<p>
<term>Stopa figur</term> je nstroj, kter zaznamenv pohyb jednotliv figury
ve vech partich v aktulnm filtru a generuje "stopu", kter zobrazuje, jak
asto bylo kad pole figurou navtveno.
</p>
<p>
Chcete-li pout stopae figur, nejprve se ujistte, e filtr obsahuje ty
partie, o kter mte zjem, jako nap. partie, ve kterch se vyskytla urit
pozice zahjen, nebo vechny partie jistho hre blmi figurami. Potom
vyberte figuru, kterou chcete stopovat a nastavte dal stopovac volby; jsou
vysvtleny ne. Pak stisknte tlatko <b>Aktualizovat</b>.
</p>
<p>
Informace o pohybu stopovan figury jsou zobrazeny dvma zpsoby: grafickou
"stopou" a textovm seznamem s jednm dkem daj pro jednotliv pole.
</p>

<h3>Vbr stopovan figury</h3>
<p>
achov figury jsou zobrazeny pod grafem stopy na svch potenm pozicch.
Jednotlivou figuru (jako nap. blho jezdce b1 nebo ernho pce d7) lze
vybrat levm tlatkem myi a vechny figury stejnho typu a barvy (jako nap.
vechny bl pce nebo ob ern ve) lze vybrat pravm tlatkem myi.
</p>

<h3>Ostatn volby stopae figur</h3>
<p>
Rozsah tah uruje, odkud m zat a kde m skonit stopovn v kad partii.
Implicitn rozsah 1-20 (znamenajc konec stopovn po 20. tahu ernho) je
vhodn pro studium motiv zahjen, ale (nap.) rozsah jako 15-35 bude lep pro
sledovn trend stedn hry.
</p>
<p>
Stopaem lze generovat dva typy statistik:
<ul>
<li> <b>% games with move to square</b>: zobrazuje podl parti ve filtru, kter
 obsahuj
     tah stopovan figury na kad pole. To je implicitn a vtinou
     nejvhodnj volba.
<li> <b>% time in each square</b>: zobrazuje podl asu, kter stopovan
     figura strvila na kadm poli.
</ul>
</p>

<h3>Rady</h3>
<p>
Existuj (aspo) ti dobr pouit pro stopae figur: pprava zahjen, motivy
stedn hry a pprava na hre.
</p>
<p>
Pro ppravu zahjen pouvejte stopae figur spolen s otevenm
<a Tree>stromem</a>. Stopovnm figur mete zjistit trendy v aktulnm zahjen
jako nap. obvykl postupy pc, pedsunut jezdcov posty a kam se nejastji
rozmisuj stelci. Mete shledat uitenm nastavit rozsah tah tak, aby
zanal aktulnm tahem partie, take tahy k dosaen aktuln pozice nebudou ve
statistice zahrnuty.
</p>
<p>
Pro motivy stedn hry me bt stopa figur uiten tehdy, kdy filtr byl
nastaven tak, e obsahuje urit rozsah ECO (pouitm
<a Searches Header>Vyhledvn podle hlaviky</a>) nebo i vzor jako nap. bl
izolovan dmsk pec (White IQP) (pouitm
<a Searches Material>Vyhledvn podle materilu/vzoru</a>). Nastavte njak
vhodn (nap. 20-40) rozsah tah a ze "stopy" figur mete vidt nap. postupy
pc v pozdn stedn he nebo ran koncovce.
</p>
<p>
Pro ppravu na hre pouijte <a Searches Header>Vyhledvn podle hlaviky</a>
nebo <a PInfo>Okno informac o hri</a>, abyste nali vechny partie jistho
hre jednou barvou. Pak me bt stopa figur uiten k vyptrn nap. toho,
jak pravdpodobn soupe fianchetuje stelce, rouje nadlouho nebo stav pcov
kln d5 nebo e5.
</p>

<p><footer>(Aktualizovno: Scid 3.3, Duben 2002)</footer></p>
}


###########################
### Repertoire editor help:

set helpTitle(C,Repertoire) "Editor repertoru"
set helpText(C,Repertoire) {<h1>Okno editoru repertoru</h1>
<p>
Editor repertoru vm umouje vytvoit, prohlet a editovat
<term>repertorov</term> soubory. Repertorov soubor (.sor) je seznam pozic
zahjen, kterch chcete doshnout nebo kterm se chcete vyhnout, a lze ho
pout ke sprv vaich preferovanch pozic zahjen a tak k vyhledvn v
databzch ve Scidu.
</p>

<h3>Repertorov skupiny a varianty</h3>
<p>
Repertor obsahuje dva typy element: <term>skupiny</term> a
<term>varianty</term>. Skupiny vlastn nejsou st vaeho repertoru; pouvaj
se jen k jeho uspodn stejn jako adrese k uspodn soubor na disku
potae.
</p>
<p>
Varianty v repertoru jsou dvou typ: <term>zahrnut</term> varianty, kter
reprezentuj pozice zahjen, kter vs zajmaj a kterch chcete doshnout, a
<term>vylouen</term> varianty, kter nemte zjem hrt a chcete se jim
vyhnout.
Nap. hrajete-li ernma pijat dmsk gambit (1.d4 d5 2.c4 dxc4) a po 3.e4
hrajete vechny tahy krom 3...Jf6, budete mt 1.d4 d5 2.c4 dxc4 3.e4 jako
zahrnutou variantu a 1.d4 d5 2.c4 dxc4 3.e4 Nf6 jako vylouenou variantu.
</p>

<h3>Komente a poznmky</h3>
<p>
Kad skupina nebo varianta me mt k sob pipojen koment. Existuj dva
typy: krtk (jednodkov) komente jsou zobrazeny (erven) v hierarchii
repertoru vedle tah skupiny nebo varianty, zatmco dlouh (vcedkov)
koment se zobraz, jen kdy je skupina nebo varianta vybrna.
</p>

<h3>Pouit okna editoru repertoru</h3>
<p>
<b>Lev</b> strana okna zobrazuje hierarchii repertoru. Kliknutm na ikonu
sloky mete rozbalit nebo sbalit skupinu a kliknutm na tahy skupiny nebo
varianty ji vybrat a prohldnout si jej koment.
Zahrnut varianty jsou oznaeny modrou zakrtvac ikonou a vylouen varianty
maj erven kek.
</p>
<p>
Jestlie m varianta nebo skupina krtk koment, je zobrazen za tahmi.
Jestlie m dlouh koment, je indikovn <b><red>**</red></b> za tahmi. Skupiny
maj za svmi tahmi v zvorkch slo, kter uruje poet variant (zahrnutch
nebo vylouench), kter skupiny obsahuj.
</p>
<p>
Kliknut pravm tlatkem myi na skupinu nebo variantu vyvol pro ni menu
funkc, jako nap. jej vmaz nebo zmnu jejho stavu (zahrnut/vylouen).
</p>
<p>
<b>Prav</b> strana okna obsahuje ti rmce. Prvn rmec je seznam tah aktuln
vybran varianty nebo skupiny. Kliknutm levho tlatka myi na nj mete
vloit tyto tahy do okna <a Import>importu</a>, co je uiten k nastaven
aktuln partie tak, aby zanala touto variantou repertoru.
Druh rmec obsahuje krtk koment k variant nebo skupin a tet rmec
obsahuje jej dlouh koment.
</p>

<h3>Pidvn skupin a variant do repertoru</h3>
<p>
Chcete-li do okna pidat variantu nebo skupinu, udlejte na achovnici v hlavnm
okn jej tahy a pak pouitm menu <menu>Editace</menu> v editoru repertoru ji
pidejte jako skupinu, zahrnutou variantu nebo vylouenou variantu.
</p>
<p>
Chcete-li smazat skupinu nebo variantu, kliknte na ni pravm tlatkem myi a z
menu, kter se objev, vyberte poadovan pkaz.
</p>

<h3><name Search>Vyhledvn v databzch pouitm repertorovch
 soubor</name></h3>
<p>
Menu <menu>Hledat</menu> v editoru repertoru vm umouje vyhledvat v aktuln
databzi pouitm repertoru. V kad partii se budou vyhledvat pozice z
repertoru a partie bude vyhovovat, jen kdy nalezen <i>nejhlub</i>
repertorov pozice je v <i>zahrnut</i> variant.
</p>
<p>
Mete si zvolit mezi vyhledvnm pouitm celho repertoru nebo pouze
pouitm zobrazench variant. Vyhledvn pouitm pouze zobrazench variant je
uiten, kdy chcete pout jen st repertoru. Nap. repertor me mt na
nejvy rovni dv hlavn skupiny, jednu pro 1.e4 a druhou pro 1.d4. Jestlie
vs zajmaj jen varianty po 1.e4, jednodue sbalte vtev 1.d4 a potom
vyhledvejte pouze pouitm zobrazench variant.
</p>

<h3>Rady navc</h3>
<p>
Repertorov soubor je skvl pro nalezen novch parti pro v systm
zahjen. Nap. kdykoliv zskte nov PGN soubor pro pipojen k va hlavn
databzi (jako nap. vynikajc tdenn PGN soubor z
<url http://www.chesscenter.com/twic/>The Week In Chess</url>),
otevete tento PGN soubor ve Scidu a provete repertorov vyhledvn.
Prohldnutm filtrovanch parti pak zjistte vechny nov partie, kter jsou ve
vaem repertoru.
</p>
<p>
Mon budete chtt mt dva repertorov soubory: jeden pro ern a
druh pro bl, take budete moct vyhledvat pouitm kadho souboru zvlṻ.
</p>
<p>
Repertorov soubor lze otevt z pkazov dky, nap.: <br>
<b>scid mybase white.sor</b>
</p>
<p>
Repertorov soubor(.sor) mete editovat v libovolnm textovm editoru, bute
vak opatrn, abyste zachovali jeho formt nebo jinak ho nebude mon nathnout
nebo pout k vyhledvn.
</p>

<p><footer>(Aktualizovno: Scid 2.6, Srpen 2001)</footer></p>
}

#####################
### Tree window help:

set helpTitle(C,Tree) "Stromov okno"
set helpText(C,Tree) {<h1>Stromov okno</h1>
<p>
<term>Stromov</term> okno zobrazuje informace o vech tazch zahranch v
aktuln pozici v partich databze. Ve stromovm mdu je okno stromu
aktualizovno automaticky, kdykoliv se v hlavnm okn zmn pozice na
achovnici. Pro velk databze to me bt pomal.
</p>
<p>
Vimnte si, e kdykoliv je stromov okno aktualizovno,
<a Searches Filter>filtr</a> je znovu nastaven tak, e zahrnuje jen partie,
kter obsahuj aktuln pozici.
</p>
<p>
Kliknut levm tlatkem myi na tah ve stromovm okn pid tento tah do
partie.
</p>

<h3>Obsah stromovho okna</h3>
<p>
Stromov okno zobrazuje <a ECO>ECO kd</a> (je-li njak), frekvenci (jednak
 jako poet
parti, jednak procento) a skre kadho tahu.
<term>Skre</term> je vdy potno z perspektivy <b>blho</b>, take 100%
znamen sam vhry blho a 0% znamen sam vhry ernho.
</p>
<p>
Tahy v okn stromu mohou bt azeny podle tahu (abecedn), ECO kdu, frekvence
nebo skre. Pouitm menu <menu>adit</menu> mete metodu azen zmnit.
</p>

<h3><name Best>Okno nejlepch parti</name></h3>
<p>
Stromov okno m tlatko a v souborovm menu pkaz pro oteven okna
<term>nejlepch parti</term>, kter zobrazuje seznam nejcennjch parti v
aktuln zobrazen vtvi stromu.
Partie jsou azeny podle prmrnho ratingu a tento seznam mete omezit tak,
aby zobrazoval jen partie s uritm vsledkem.
</p>

<h3><name Graph>Okno grafu stromu</name></h3>
<p>
Tlatka stromovho okna zahrnuj tlatko oznaen <term>Graf</term>, kter
vyvolv grafick zobrazen relativn spnosti kadho tahu hranho v aktuln
pozici.
Zobrazeny jsou vechny tahy, kter se hrly nejmn v 1% parti a
nejmn 5 krt.
Procentn skre jsou vdy z perspektivy blho, i kdy je na
tahu ern.
</p>
<p>
V grafu stromu je nakreslena erven ra zobrazujc prmrnou spnost ze
vech parti obsahujc aktuln pozici a oblast mezi 50 a 55% (kde le
oekvan spnost standardnch zahjen) je kvli snadnjmu porovnn tah
zobrazena mode. Vimnte si, e na mistrovsk rovni bl obyejn dosahuj
spnosti okolo 55%.
</p>

<h3><name Lock>Zamknut okna stromu</name></h3>
<p>
Tlatko <term>Zamknout</term> ve stromovm okn me bt pouito k zamknut
stromu k aktuln databzi. To znamen, e strom bude nadle pouvat tuto
databzi, i kdy se pepnete do jin oteven databze. To je uiten, kdy
chcete pout velkou databzi jako referenn pi pehrvn partie z jin
databze: jednodue otevete strom pro referenn databzi, zamknte ho a potom
se pepnte do druh databze.
</p>

<h3><name Training>Trnink</name></h3>
<p>
Kdy aktivujete tlatko <term>Trnink</term>, vdy, kdy zahrajete svj
tah, Scid nhodn provede tah.
Tah, kter Scid zvol, zvis na databzov statistice tak, e tah zahran v 80%
parti databze bude Scidem zvolen s 80% pravdpodobnost.
Dobrm zpsobem, jak si otestovat znalosti svho repertoru zahjen, je zapnout
tuto funkci, potom skrt (nebo minimalizovat) stromov okno a hrt zahjen
proti velk databzi.
</p>

<h3>Pouit stromu s otevenmi EPD soubory</h3>
<p>
Pro kad oteven <a EPD>EPD soubor</a> stromov okno obsahuje jeden sloupec
 navc, kter
zobrazuje krtk (ptiznakov) souhrn obsahu EPD souboru pro kadou pozici,
dosaenou tahy v seznamu.
</p>
<p>
Souhrn me bt hodnocen, kd zahjen nebo navren tah; bude to obsah prvnho
EPD pole nalezenho v nsledujcm seznamu: <b>ce, eco, nic, pv, pm, bm, id</b>
nebo jen prvn EPD pole, jestlie vechny z uvedench chyb.
</p>
<p>
Pro popis EPD pol si pette strnku npovdy o <a EPD>EPD souborech</a>.
Vimnte si, e jestlie je souhrn z <b>ce</b> pole, je zobrazen z dvodu lep 
itelnosti jako hodnocen v pcch z perspektivy blho (radji ne skre 
v setinch pc z perspektivy strany, kter je na tahu, jako je jeho vlastn 
formt uloen v EPD souboru).
</p>

<h3>Pouvn cache pro rychlej vsledky</h3>
<p>
Scid pouv cache pro stromov vyhledvac vsledky pro pozice, kterm odpovd
nejvce parti. Jestlie se ve stromovm mdu posunete v partii o tah dopedu a
zpt, aktualizace okna stromu se provede tm okamit, jestlie vyhledvan
pozice je v cache.
</p>
<p>
Okno stromu obsahuje v souborovm menu pkaz <term>Uloit cache soubor</term>.
Kdy ho zadte, aktuln obsah stromov cache v pamti se zape do souboru (s
pponou <b>.stc</b>) a dojde tak ke zrychlen budoucho pouit tto databze
ve stromovm mdu.
</p>
<p>
Pkaz <term>Naplnit cache soubor</term> v souborovm menu okna
stromu napln cache soubor daji pro mnoho pozic zahjen.
Provede se stromov vyhledvn pro asi 100 nejbnjch pozic zahjen a pot
se ulo cache soubor.
</p>
<p>
Uvdomte si, e stromov cache (.stc) soubor je cel nadbyten; mete
ho smazat bez toho, aby jste ovlivnili danou databzi, a ve skutenosti je
Scidem smazn vdy, kdy se objev operace, po kter by zstal neaktuln --
nap. pidn nebo nahrazen partie nebo tdn databze.
</p>

<p><footer>(Aktualizovno: Scid 3.0, Listopad 2001)</footer></p>
}



####################
### Compaction help:

set helpTitle(C,Compact) "Zhutnn databze"
set helpText(C,Compact) {<h1>Zhutnn databze</h1>
<p>
<term>Zhutnn</term> databze je specifick typ <a Maintenance>drby</a>,
kterm se databze uchovv co mon nejmen a nejvkonnj.
Zhutnn databze znamen odstrann vechno nevyuitho prostoru v jejch
souborech.
Existuj dva druhy zhutnn: jmennho souboru a partiovho
souboru.
</p>

<h3>Zhutnn jmennho souboru</h3>
<p>
asem mon zjistte, e databze zan obsahovat mnostv jmen hr, turnaj,
mst a kol, kter u nejsou v dn partii pouita. To se asto stane po
kontrole pravopisu jmen. Nepouit jmna v jmennm souboru zbyten zabraj
msto a mohou zpomalit vyhledvn podle jmen.
Zhutnn jmennho souboru odstran vechny jmna, kter nejsou pouita v
dn partii.
</p>

<h3>Zhutnn partiovho souboru</h3>
<p>
Kdykoliv je partie nahrazena nebo smazna, zstane v partiovm souboru
(nejvt ze t soubor tvoc databzi Scidu) zbyten voln msto.
Zhutnn partiovho souboru odstran vechno zbyten voln msto, nesmazan
partie ponech v databzi. Uvdomte si, e tato operace je nevratn: po
zhutnn jsou smazan partie navdy pry!
</p>
<p>
Zhutnn partiovho souboru se doporuuje tak po <a Sorting>tdn</a>
databze, aby se udrel stav partiovho souboru konzistentn se setdnm
indexovm souborem.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}


####################################
### Database maintenance tools help:

set helpTitle(C,Maintenance) "drba databze"
set helpText(C,Maintenance) {<h1>drba databze</h1>
<p>
Scid poskytuje mnostv nstroj pro drbu databze, jsou dostupn z menu Scidu
<a Menus File>Soubor</a>. <a Compact>Zhutnn</a> databze a
<a Sorting>tdc</a> funkce jsou vysvtleny na samostatnch strnkch
npovdy.
</p>

<h3>Okno drby</h3>
<p>
Vtinu drby databze ve formtu Scidu lze provst z okna drby, kter mete
otevt z menu <menu>Soubor: drba</menu> nebo z menu <menu>Okna</menu> nebo
pouitm klvesov zkratky <b>Ctrl+M</b>.
</p>
<p>
Toto okno mete pout k drb <a Flags>pznak parti</a>, kontrole
pravopisu jmen, <a Compact>zhutnn</a> nebo <a Sorting>tdn</a>
databze. Vimnte si, e vechny operace, kter nejsou pro aktuln databzi
dostupn (nap. protoe je jen ke ten nebo je PGN soubor), budou zobrazeny
edou barvou.
</p>

<h3><name Twins>Mazn zdvojench parti</name></h3>
<p>
Menu <menu>Soubor: drba</menu> obsahuje pkaz
<menu>Vymazn zdvojench parti...</menu> pro detekci dalch kopi (dvojnk)
parti v databzi.
Tento pkaz nalezne vechny pry parti, kter jsou dvojnky, a pro kad pr
nastav pznak krat partie na smazan a pznak del partie ponech na
nesmazan.
Dv partie jsou pokldny za dvojnky, jestlie se jejich hri (a libovoln
jin speciln oznaen, kter mete voliteln specifikovat) pesn shoduj.
</p>
<p>
Jestlie specifikujete volbu "tyt tahy", kad pr parti mus mt stejn
aktuln tahy a do dlky krat partie (nebo do 60. tahu kterkoliv), aby byli
partie pokldny za dvojnky.
</p>
<p>
Jestlie jste provedli mazn dvojnk, je dobrou mylenkou ovit si, jestlie
kad smazan partie je opravdu kopi druh partie.
To mete jednodue provst, jestlie v dialogovm okn mazn zdvojench parti
vyberete volbu "<b>Nastavit filtr na vechny vymazan zdvojen partie</b>".
Filtr budu potom obsahovat vechny smazan partie.
Mete si je prohldnout (pouitm klves <b>p</b> a <b>n</b>) pouitm okna
<term>kontroly zdvojench parti</term> (dostupn z menu drby nebo pouitm
klvesov zkratky <b>Ctrl+Shift+T</b>) a ovit si, e partie jsou smazan,
protoe jsou skuten dvojnky jin partie.
</p>

<h3><name Editing>Editace jmen hr, turnaj, mst a kol</name></h3>
<p>
Ve va databzi mete najt patn napsan jmna a chcete je opravit.
To mete provst ve Scidu pouitm okna <term>editoru jmen</term> (klvesov
zkratka: <b>Control+Shift+N</b>), dostupnho z podmenu
<menu>Soubor: drba</menu>.
</p>
<p>
Kad jedinen jmno je uloeno v jmennm souboru jen jednou,
take jeho zmna vlastn zmn vechny jeho vskyty.
</p>

<h3><name Spellcheck>Kontrola pravopisu jmen</name></h3>
<p>
Scid se distribuuje spolen se souborem <term>pro kontrolu pravopisu</term>
pojmenovanm <b>spelling.ssp</b>, pouvanm pro opravu jmen hr, turnaj,
mst a kol.
Scid se pokou nahrt soubor pro kontrolu pravopisu pi kadm startu; jestlie
se nenathne, mete ho nathnout z menu <menu>Volby</menu>.
</p>
<p>
Kdy u je soubor pro kontrolu pravopisu nataen, mete ho pout pro databze
ve formtu Scidu prostednictvm pkaz pro kontrolu pravopisu v menu
<menu>Soubor: drba</menu> nebo z okna drby.
</p>
<p>
Kdy kontrolujete pravopis jmen databze, Scid produkuje seznam korekc, kter
mete ped jejich vlastnm provedenm editovat, take mete odstranit vechny
korekce, kter provst nechcete.
</p>
<p>
Kontrola pravopisu je zvlṻ uiten pro standardizaci databze, aby vechny
pklady jednotlivho jmna mli stejn tvar.
Nap. se standardnm souborem pro kontrolu pravopisu by byla jmna "Kramnik,V.",
"Vladimir Kramnik", and "V. Kramnik" opravena na "Kramnik, Vladimir".
</p>
<p>
Soubor pro kontrolu pravopisu m jedno pouit navc: kdy je nataen, jeho
daje o hrch jsou pouity k rozen okna <a PInfo>informac o hri</a> a
 okna
<a Crosstable>turnajov tabulky</a>: pro kadho hre obsaenho v souboru pro
kontrolu pravopisu uvidte jeho mistrovsk titul FIDE (<b>gm</b> = mezinrodn
velmistr, <b>im</b> = mezinrodn mistr atd.) a jeho zemi. Soubor
<b>spelling.ssp</b>, distribuovan spolen se Scidem, obsahuje pes 6500
silnch hr minulosti a ptomnosti.
</p>

<h3><name Ratings>Pidn Elo rating do parti</name></h3>
<p>
Tlatko "Pidat Elo ratingy..." v okn drby zpsob, e Scid vyhled v
aktuln databzi partie, v kterch hr nem rating, ale soubor pro kontrolu
pravopisu jeho rating k datu partie obsahuje. Scid vechny takov ratingy
automaticky pid. To je velmi uiten pro databze mistrovskch parti, kter
maj mlo rating.
</p>
<p>
Soubor pro kontrolu pravopisu "spelling.ssp", dodvan spolen se Scidem,
neobsahuje informace o Elo ratingch potebnch pro tuto funkci, ale jeho vt
verze s nzvem "ratings.ssp" je dostupn na <a Author>webov strnce Scidu</a>.
</p>

<h3><name Cleaner>itn databze</name></h3>
<p>
<term>itn databze</term> (dostupn z okna drby) je nstroj pro vykonvn
vce operac drby databze narz. Mete si vybrat, kter operace chcete
provst, a Scid je s aktuln databz provede bez nutnosti uivatelskho
zsahu. To je zvlṻ uiten pro drbu velkch databz.
</p>

<h3>Vbr automaticky otevran partie</h3>
<p>
<term>Automaticky otevran</term> partie databze je partie, kter se
automaticky nathne pi kadm oteven databze. Chcete-li zmnit automaticky
otevranou partii databze, pouijte tlatko  "Automaticky otevrat partii
slo...". Jestlie chcete, aby se nathla vdy posledn partie databze (bez
ohledu na skuten poet parti v databzi), nastavte ji na velmi vysok slo
nap. 9999999.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Prosinec 2001)</footer></p>
}

#################
### Sorting help:

set helpTitle(C,Sorting) "Tdn databze"
set helpText(C,Sorting) {<h1>Tdn databze</h1>
<p>
<term>Tdc</term> funkce td vechny partie v databzi. Mete si vybrat
mnostv tdcch kritri.
Kdy jsou dv partie rovnocenn podle prvnho kritria, jsou setdny podle
druhho kritria atd. </p>

<h3>Tdc kritria</h3>
<p>
Dostupn tdc kritria jsou:
</p>
<ul>
<li> Datum (nejstar partie prvn)
<li> Rok (stejn jako datum, ale pouije se jen rok)
<li> Jmno turnaje
<li> Jmno msta
<li> Zem (posledn 3 psmena jmna msta)
<li> Jmno kola
<li> Jmno blho
<li> Rating (prmr ratingu blho a ernho, nejvy prvn)
<li> Jmno ernho
<li> Vsledek (vhry blho, remzy a pak vhry ernho)
<li> Dlka (poet kompletnch tah v partii)
<li> ECO (<a ECO>kd Encyklopedie achovch zahjen</a>)
</ul>

<h3>Vsledky tdn</h3>
<p>
Kdy tdte databzi Scidu, kter nen jen ke ten, vsledky tdn jsou
uloeny, take poad parti v databzi je trvale zmnno. Jestlie chcete, aby
setdn bylo jen doasn, pouitm pkazu menu <b>Soubor: Pouze pro ten</b>
nastavte nejprve databzi jen ke ten.
</p>
<p>
Kdy tdte databzi, kter je jen ke ten nebo je skuten PGN soubor,
vsledky tdn nemohou bt uloeny, take po zaven souboru bude setdn
poad parti ztraceno.
</p>
<p>
Vimnte si, e tdn databze znovu nastav
<a Searches Filter>vyhledvac filtr</a> tak, e obsahuje vechny partie.
</p>

<h3>Dleit poznmka k tdn databz:</h3>
<p>
Pi tdn databze je zmnn indexov soubor, ale partiov soubor nikoliv. To
znamen, e tdn databze zanech zznamy v partiovm souboru pomchan
vzhledem k indexovmu souboru. To me vznamn <b>zpomalit</b> <a
 Tree>stromov</a>
vyhledvn, <a Searches>vyhledvn</a> podle pozice a podle materilu/vzoru,
 take abyste
udreli dobr vyhledvac vsledky, mli byste po setdn databze
reorganizovat partiov soubor jeho <a Compact>zhutnnm</a>.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

###############
### Flags help:

set helpTitle(C,Flags) "Pznaky partie"
set helpText(C,Flags) {<h1>Pznaky partie</h1>
<p>
<term>Pznak</term> je indiktor njakch achovch charakteristik, kter me
bt zapnut nebo vypnut pro kadou partii v databzi.
Ve Scidu existuje 13 uivatel nastavitelnch pznak, kter mete pmo
nastavit pro kadou partii. Z nich jen mazac pznak m speciln vznam:
partie se zapnutm mazacm pznakem jsou oznaeny k vmazu a pi
<a Compact>zhutnn</a> databze budou odstranny.
</p>
<p>
12 ostatnch uivatelem nastavitelnch pznak a jejich symboly jsou:
</p>

<ul>
<li>Zahjen blho (W)</li>
<li>Zahjen ernho (B)</li>
<li>Stedn hra (M)</li>
<li>Koncovka (E)</li>
<li>Novinka (N)</li>
<li>Pcov struktura (P)</li>
<li>Taktika (T)</li>
<li>Hra na dmskm kdle (Q)</li>
<li>Hra na krlovsk kdle (K)</li>
<li>Velmi siln tah (!)</li>
<li>Hrub chyba (?)</li>
<li>Uivatel (U)</li>
</ul>

<p>
Pznak me bt nastaven pro aktuln partii, pro vechny partie filtru nebo
pro vechny partie databze pouitm okna <a Maintenance>drby</a>.
</p>
<p>
Mete pout <a Searches Header>vyhledvn podle hlaviky</a> pro nalezen
vech parti v databzi, kter maj konkrtn pznak zapnut nebo vypnut, nebo
pout pznaky jako st komplexnjch vyhledvn.
</p>
<p>
Protoe vechny uivatelem nastaviteln pznaky (krom mazacho pznaku)
nemaj pro Scid dn vznam, mete je pouvat pro jakkoliv el, vhodn pro
vae poteby. Nap. mete pout pznak hry na krlovskm kdle (K) pro
pcov toky na krlovsk kdle nebo pro tok na krlovskm kdle tkmi
figurami nebo dokonce pro koncovky se vemi pci na krlovskm kdle.
</p>

<p><footer>(Aktualizovno: Scid 3.0, Listopad 2001)</footer></p>
}

#########################
### Analysis window help:

set helpTitle(C,Analysis) "Analytick okno"
set helpText(C,Analysis) {<h1>Analytick okno</h1>
<p>
Analytick okno ve Scidu zobrazuje analzu achovho programu
(oznaovanho jako <term>motor</term>) souasn pozice na achovnici. Pi kad
zmn na achovnici posl Scid motoru novou pozici a zobrazuje jeho hodnocen
tto pozice.
</p>
<p>
Skre zobrazen v tomto analytickm okn je vdy z perspektivy
blho, take negativn skre indikuje lep pozici ernho.
Spodn rmec v tomto okn (s posuvnkem) zobrazuje historii hodnocen tto
pozice produkovan motorem, take si mete prohldnout, jak se hodnocen
mnila.
</p>
<p>
Chcete-li pidat nejlep tah vybran motorem jako nov tah aktuln partie,
stisknte tlatko <b>Pidat tah</b>.
</p>

<h3><name List>Seznam analytickch motor</name></h3>
<p>
Scid si udruje seznam pouvanch motor, spolu s odhadem jejich Elo ratingu
(jestli njak mte) a datem jejich poslednho pouit. Seznam motor lze
setdit podle jmna, Elo ratingu nebo data.
Chcete-li do seznamu pidat nov motor nebo editovat detaily existujcho
motoru, stisknte tlatko <b>Nov</b> nebo <b>Editace</b>.
</p>

<h3><name Start>Pkazy a adrese motor</name></h3>
<p>
Pro kad motor muste specifikovat jeho spustiteln soubor a adres, kde m
bt Scidem sputn.
</p>
<p>
Dvodem vtiny problm se startem motor je vbr adrese, v kterm m bt
motor sputn. Nkter motory vyaduj ke svmu dnmu startu ve svm
startovacm adresi existenci inicializanho souboru nebo souboru knihoven
zahjen.
Jin motory (jako Crafty) zapisuj do adrese, kde byly sputny, tzv. logovac
soubory, take je nutn je spustit v takovch adresch, kde mte pstupov
prvo zpisu.
Jestlie nastaven adrese pro motor je ".", Scid nastartuje tento motor v
aktulnm adresi.
</p>
<p>
Take jestlie njak motor, kter by ml ve Scidu skvle pracovat, nelze
nastartovat, zkuste zmnit nastaven jeho adrese. Chcete-li zabrnit vzniku
logovacch soubor v mnoha rznch adresch, doporuuji vm spoutt motory v
adresi uivatelskch soubor Scidu (tj. tam, kde se nachz soubor
<b>scid.exe</b> pro Windows nebo v adresi <b>~/.scid/</b> pro Unix); v
dialogovm okn pro editaci detail motoru je tlatko oznaen
<b>scid.exe dir</b> pro Windows nebo <b>~/.scid</b> pro Unix, kterm mete
nastavit spoutn motoru v tomto adresi.
</p>

<h3>Trnink</h3>
<p>
Tlatkem <b>Trnink</b> mete proti analytickmu motoru hrt. as na kad tah
je pevn dan a v trninkovm mdu nejsou zobrazeny vsledky analzy.
</p>

<h3>Anotace partie</h3>
<p>
Tlatko <b>Pidat variantu</b> v analytickm okn pid do partie aktuln
skre a nejlep pokraovn za ob strany jako novou variantu.
</p>
<p>
Anotaci srie tah (i cel partie) mete provst automaticky stiskem tlatka
<b>Anotace</b>. Budete dotzni na urit nastaven anotace a potom se spust
reim automatickho pehrvn.
V reimu automatickho pehrvn pi otevenm analytickm okn je pro kadou
pozici (pehranou v automatickm reimu) samoinn pidna varianta obsahujc
skre a nejlep pokraovn za ob strany.
Anotovny jsou pouze pozice od aktuln pozice do konce partie (nebo dokud
neukonte reim automatickho pehrvn), take pesunem do pozice ze stedn
hry ped sputnm reimu automatickho pehrvn mete peskoit anotaci
zahjen.
</p>
<p>
Chcete-li kdykoliv anotaci ukonit, sta jen ukonit reim automatickho
pehrvn, nap. stiskem klvesy <b>Escape</b> v hlavnm okn.
</p>
<p>
Vimnte si, e pro zjednoduen je tlatko <b>Anotace</b> pstupn jen v okn
analytickho motoru 1. Jestlie spustte motor jako analytick motor 2, nebudete
ho moci pout k anotaci partie.
</p>

<h3>Analytick achovnice</h3>
<p>
Stisk tlatka ikony achovnice v analytickm okn zobraz nebo skryje
analytickou achovnici, kter zobrazuje pozici na konci aktuln nejlep
varianty hry nalezenou motorem. Funguje to pro vtinu motor kompatibilnch se
Scidem, ale nemus pro vechny; zle to na tom, jakou notaci tah motor
pouv.
</p>

<h3>Priorita motoru</h3>
<p>
Jestlie motor vyuv pli mnoho asu CPU (tj. procesoru) a negativn
tak ovlivuje pouvn Scidu nebo jinch aplikac, me pomoct zapnut
tlatka <b>Nzk CPU priorita</b>; tm dte motoru nzkou prioritu pi
plnovn CPU. </p>

<h3>Detaily rozhran</h3>
<p>
Abyste mohli pouvat analytick okno, budete potebovat achov program, kter
podporuje <term>WinBoard/Xboard</term> protokol.
</p>
<p>
Scid posl motoru pi jeho startu pkazy <b>xboard</b>, <b>post</b> a
<b>protover 2</b> a jestlie motor svou odpovd indikuje, e je podporuje, Scid
pouije pro efektivnj komunikaci s motorem pkazy <b>setboard</b> a
<b>analyze</b>.
Jestlie motor nepodporuje pkaz <b>setboard</b>, nebude schopen poskytovat
analzu dn partie, kter zan s nestandardn poten pozic.
</p>
<p>
Programm, kter nepodporuj pkaz <b>analyze</b>, Scid pi kad zmn pozice
posl nsledujc pkazy: <b>new</b> a <b>force</b>, tm se pesune do partie
do aktuln pozice a pak <b>go</b>.
</p>
<p>
J pouvm a doporuuji pro analytick okno Scidu znamenit achov freeware
program <term>Crafty</term> od Boba Hyatta, ale se Scidem bylo spn pouito
mnoho dalch WinBoard nebo XBoard kompatibilnch program. Ne je seznam
webovch strnek pro staen nkolika motor.
</p>
<p>
Crafty:
<url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url>
</p>
<p>
Yace:
<url http://home1.stofanet.dk/moq/>http://home1.stofanet.dk/moq/</url>
</p>
<p>
Phalanx:
<url
 ftp://ftp.math.muni.cz/pub/math/people/Dobes/>ftp://ftp.math.muni.cz/pub/math/people/Dobes/</url>
</p>
<p>
Comet:
<url
 http://members.aol.com/utuerke/comet/>http://members.aol.com/utuerke/comet/</url>
</p>
<p>
Gnuchess:
<url
 http://www.gnu.org/software/chess/chess.html>http://www.gnu.org/software/chess/chess.html</url>
</p>
<p>
The Crazy Bishop:
<url http://remi.coulom.free.fr/>http://remi.coulom.free.fr/</url>
</p>

<p><footer>(Aktualizovno: Scid 3.4, Z 2002)</footer></p>
}

###################
### EPD files help:

set helpTitle(C,EPD) "EPD soubory"
set helpText(C,EPD) {<h1>EPD soubory</h1>
<p>
EPD (extended position description, tj. rozen popisova pozice) soubor je
kolekce pozic, kde kad pozice m njak doprovodn text. Jako <a PGN>PGN</a>,
je to obecn standard pro achov informace.
</p>
<p>
EPD soubor m poet definovanch <term>opkd (opcodes)</term> (pol), kter
jsou uloeny v souboru oddleny stednkem(<b>;</b>), ale v okn EPD Scidu jsou
kvli jednodu editaci zobrazeny na samostatnch dcch.
Stednk uvnit EPD pole je uloen Scidem jako "<b>\s</b>", aby byl odlien od
znaku konce pole.
Kad pozice a k n asociovan opkdy jsou uloeny na jedn dce v EPD
souboru.
</p>
<p>
Standardn EPD opkdy zahrnuj:
<ul>
<li> <b>acd</b> analytick poet: hloubka vyhledvn.</li>
<li> <b>acn</b> analytick poet: poet uzl (nodes) vyhledvn.</li>
<li> <b>acs</b> analytick poet: doba vyhledvn v sekundch.</li>
<li> <b>bm</b> nejlep tahy: tah(y) ocenn() nejlpe z njakho dvodu.</li>
<li> <b>ce</b> setinopcov hodnocen: hodnocen v setinch pc z perspektivy
     <b>strany, kter je na tahu</b> -- vimnte si rozdlu proti oknu analzy,
     kter zobrazuje hodnocen v pcch z perspektivy blho.</li>
<li> <b>cX</b> koment (kde <b>X</b> je slo, 0-9).</li>
<li> <b>eco</b> kd zahjen podle <a ECO>ECO</a> systmu.</li>
<li> <b>id</b> jedinen identifikace pro tuto pozici.</li>
<li> <b>nic</b> kd zahjen podle <i>New In Chess</i> systmu.</li>
<li> <b>pm</b> pedpokldan tah: prvn tah PV.</li>
<li> <b>pv</b> pedpokldan varianta: varianta nejlep hry.</li>
</ul>

<p>
EPD soubory maj mnoho pouit: Scid pouv EPD soubor ke klasifikaci parti
podle systmu <a ECO>Encyklopedie achovch zahjen</a> (Encyclopedia of Chess
Openings, ECO) a vy sami si mete vytvoit EPD soubor pro v repertor
zahjen pidnm koment k pozicm, kter se ve vaich partich pravideln
vyskytuj.
</p>
<p>
Vytvoit nov EPD soubor nebo otevt u existujc mete pkazy
<menu>Nov</menu> a <menu>Otevt</menu> z menu <menu>Soubor</menu>. Kdykoliv
me bt oteveno nejve tyi EPD soubory.
</p>

<h3>EPD okna</h3>
<p>
Pro kad oteven EPD soubor uvidte jedno okno, kter zobrazuje text k
aktuln pozici. Chcete-li uloit zmny v textu k pozici, nen poteba
stisknout tlatko Uloit; text bude uloen vdy, kdy se pesunete k jin
pozici v partii.
</p>

<h3>Navigace v EPD souborech</h3>
<p>
Chcete-li si prohldnout pozice v EPD souboru, pouijte pkazy
<menu>Next position</menu> a <menu>Previous position</menu> z menu
<menu>Tools</menu> v EPD okn nebo pouijte klvesov zkratky
<b>Ctrl+ipkaDol</b> a <b>Ctrl+ipkaNahoru</b>.
Tyto pkazy zpsob pesun na nsledujc/pedchzejc pozici v souboru spolu
s odstrannm aktuln partie a nastavenm jej poten pozice.
</p>

<h3>Odstrann EPD pol</h3>
<p>
EPD soubory, kter naleznete na Internetu, mohou obsahovat pole, kter vs
nezajmaj a mohou tak zbyten zabrat mnoho msta v souboru.
Nap. EPD soubor hodnocen achovho programu me mt pole ce, acd, acn, pm, pv
a id, ale mon budete potebovat jen pole ce a pv.
</p>
<p>
EPD opkd mete odstranit ze vech pozic v EPD souboru pouitm pkazu
<menu>Strip out EPD field</menu> z menu <menu>Tools</menu> v EPD okn.
</p>

<h3>Stavov lita EPD okna</h3>
<p>
Stavov lita kadho EPD okna ukazuje:
<ul>
<li>- status souboru (<b>--</b> znamen nezmnn, <b>XX</b> znamen zmnn
      a <b>%%</b> znamen jen ke ten); </li>
<li>- jmno souboru; </li>
<li>- poet pozic v souboru; </li>
<li>- legln tahy z aktuln pozici vedouc do jin pozice v tomto EPD
      souboru.</li>
</ul>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

######################
### Email window help:

set helpTitle(C,Email) "Emailov okno"
set helpText(C,Email) {<h1>Emailov okno</h1>
<p>
Okno emailovho manaera Scidu vm poskytuje prostedky ke sprv
korespondennch parti hranch emailem.
Jestlie nehrajete achy pes email, nebude vs to zajmat.
Ale jestlie hrajete korespondenn partie pes email, mete emailov zprvy
poslat pmo ze Scidu!
</p>
<p>
Pouit emailovho manaera:
<ul>
<li><b>1)</b> Vytvote v databzi partii(e) pro vaeho soupee. </li>
<li><b>2)</b> V okn emailovho manaera zvolte <b>Add</b> a zadejte daje o
vaem soupei: jmno, emailov adresa a sla parti v databzi. </li>
<li><b>3)</b> V emailovm okn zvolte <b>Send email</b> vdy, kdy jste pidali
tahy do partie() a chcete odeslat zprvu. </li>
</ul>

<p>
Pi odesln emailov zprvy Scid vygeneruje zprvu s parti v PGN formtu
<b>bez</b> jakchkoliv koment, anotac a variant, protoe obvykle nebudete
chtt, aby soupe vidl vae analzy.
Ped odeslnm mete zprvu editovat pidnm podmnnch tah nebo jinho
textu.
</p>
<p>
Pro kadho soupee mete mt libovoln poet parti; nejastji jednu nebo
dv. Uvdomte si, e Scid nekontroluje zmny sel parti, take po zadan daj
o vaem soupei dvejte pozor, abyste databzi vaich emailovch parti
netdili ani v n nemazali dn partie, protoe tak by dolo k peuspodn
parti a sla parti pro kadho soupee by byla patn.
</p>

<h3>Omezen</h3>
<p>
Scid dosud nedisponuje dnou funkc kontroly vaich emailovch poada, take
je stle nutn pidvat tahy vaeho soupee do partie manuln.</p>

<h3>Konfigurace</h3>
<p>
Kopie vech emailovch zprv odeslanch Scidem je uloena v souboru
<b>~/.scid/scidmail.log</b>. Jestlie chcete, aby byly uloeny v jinm souboru,
budete muset editovat soubor <b>tcl/start.tcl</b> a rekompilovat Scid.
</p>
<p>
Scid me poslat zprvy pouitm SMTP serveru nebo pkazu sendmail. Ke
specifikaci va volby pouijte tlatko <b>Settings</b> v okn emailovho
manaera.
</p>
<p>
Scid ukld daje o soupech z databze vaich emailovch parti v
souboru se stejnm jmnem jako tato databze a pponou "<b>.sem</b>".
</p>

<p><footer>(Aktualizovno: Scid 3.0, Listopad 2001)</footer></p>
}

########################
### Reports help:

set helpTitle(C,Reports) "Profily"
set helpText(C,Reports) {<h1>Profily</h1>
<p>
<term>Profil</term> ve Scidu je dokument obsahujc informace o urit pozici nebo uritm hri. Existuj dva typy profil, kter me Scid generovat: profil zahjen a profil hre.
</p>

<h3><name Opening>Profily zahjen</name></h3>
<p>
Scid me vytvoit <term>profil zahjen</term>, kter zobrazuje zajmav
informace o pozici zahjen. Chcete-li vytvoit profil zahjen, nejprve se
ujistte, e zobrazen pozice je ta, pro kterou profil chcete, a potom zvolte
<b>Profil zahjen</b> z menu <b>Nstroje</b>.
</p>
<p>
Okno <term>profilu zahjen</term> zobrazuje vsledek profilu vygenerovanho
Scidem. Menu <b>Soubor</b> obsahuje pkazy pro uloen (vytitn) profilu do
textovho souboru, do HTML souboru nebo <a LaTeX>LaTeX</a> souboru.
</p>
<p>
Prvn sekce profilu prezentuj informace na partich, kter doshly pozice
profilu, a na tazch hranch od tto pozice. Lze zde vidt, jestli se zahjen
stv vce populrnm, jestli m mnoho krtkch remz a jak poad tah
(transpozice) se pouvaj k jej dosaen.
</p>
<p>
Sekce pozinch tmat zobrazuje  frekvenci uritch bnch pozinch tmat v profilovanch partich. K tomu se pouije prvnch 20 tah kad partie (tedy prvnch 40 pozic kad partie po poten pozici). Partie se zapote jako partie obsahujc urit tma, jestlie obsahuje dan tma alespo ve 4 pozicch v prvnch 20 tazch partie. Tak se zabrn ovlivnn vsledku krtkm vskytem tmat (jako nap. izolovan dmsk pec, kter je okamit vzat).
</p>
<p>
Posledn a nejvt st profilu je tabulka teorie. Pi ukldn profilu do
souboru si mete vybrat mezi uloenm jen tabulky teorie, kompaktnm profilem
bez tabulky teorie nebo celm profilem.
</p>
<p>
Skoro vechny sekce profilu mohou bt zapnuty nebo vypnuty nebo upraveny
prostednictvm voleb profilu zahjen, take si mete profil pizpsobit
tak, aby zobrazoval jen informace, kter vs zajmaj.
</p>
<p>
Vtina informac v profilu zahjen, kter jsou zobrazeny barevn, vyvolaj
pi vbru levm tlatkem myi njakou akci. Napklad pi kliknut na
referenci partie dojde k jej nataen, pi kliknut na pozin motiv dojde k
nastaven filtru tak, e bude obsahovat jen partie profilu, ve kterch se tento
motiv vyskytl.
</p>

<h4>Oblben</h4>
<p>
Menu <menu>Oblben</menu> v okn profilu umouje udrovat sbrku oblbench pozic profilu zahjen a jednodue generovat profil zahjen pro vechny tyto pozice. Vbrem "Add Report..." z menu Oblben pidte aktuln pozici jako oblbenou profilovanou pozici; budete vyzvni k zadn jmna, kter bude pouito jako jmno souboru pi generovn oblbench profil.
</p>
<p>
Chcete-li generovat profil pro kad oblben profil pi pouit aktuln databze, zvolte z menu Oblben "Generovat profil...". Objev se dialogov okno, kter Vm umon specifikovat typ a formt profilu a adres, kde budou uloeny soubory profil. Podle formtu, kter jste zvolili, bude ke kadmu souboru profilu pidna vhodn ppona (nap. ".html" pro HTML formt).
</p>

<h3><name Player>Profily hr</name></h3>
<p>
<term>Profil hre</term> je velmi podobn profilu zahjen, ale obsahuje informace o partich jednoho hre blmi nebo ernmi figurami. Profil hre mete generovat z menu Nstroje nebo z okna <a PInfo>Informac o hri</a>.
</p>
<p>
Profil hre me bt generovn bu pro vechny partie danho hre danmi figurami nebo jen pro podmnoinu tch parti, kter doshly aktuln pozici na achovnici v hlavnm okn.
</p>


<h3>Omezen</h3>
<p>
Pro vtinu dat generovanch profilem existuje limit 2000 parti, take
jestlie se pozice profilu vyskytuje ve vce ne 2000 partich, njak vsledky
mohou bt trochu nesprvn.
</p>
<p>
Rovn pro tabulku teorie existuje limit 500 parti. Jestlie se pozice profilu
vyskytuje ve vce ne 500 partich, jen 500 parti s nejvym prmrnm Elo
ratingem se pouije ke generovn tabulky teorie. Poet parti pouitch ke
generovn tabulky teorie mete upravit ve volbch Profilu zahjen.
</p>

<p><footer>(Aktualizovno: Scid 3.5, nor 2003)</footer></p>
}


#####################
### Player List help:

set helpTitle(C,PList) "Okno vyhledvae hr"
set helpText(C,PList) {<h1>Okno vyhledvae hr</h1>
<p>
Okno <term> vyhledvae hr</term> zobrazuje seznam jmen
hr v aktuln databzi. Vbrem hre se oteve okno
<a PInfo>informac o hri</a> s podrobnjmi informacemi o tomto hri.
</p>
<p>
Zobrazuje se pt sloupc, kter zobrazuj jmno kadho hre, jeho nejvy
rating, poet jeho parti a rok jeho nejstar a nejnovj partie.
Chcete-li setdit seznam podle nkterho sloupce, kliknte na jeho titulek
nahoe v seznamu.
</p>
<p>
Obsah seznamu mete filtrovat pomoc ovldn dole pod seznamem. Mete zmnit
limit seznamu, zadat bez ohledu na velikost psmen pedponu jmna hre (jako
teba "ada" pro vyhledn "Adams") a omezit rozsah Elo ratingu a potu parti.
</p>

<p><footer>(Aktualizovno: Scid 3.4, ervenec 2002)</footer></p>
}

#####################
### Player Info help:

set helpTitle(C,PInfo) "Okno informac o hri"
set helpText(C,PInfo) {<h1>Okno informac o hri</h1>
<p>
Okno <term>informac o hri</term> se oteve nebo aktualizuje vdy, kdy
kliknete levm tlatkem myi na jmno hre v informan zn partie (pod
achovnic) nebo v okn <a Crosstable>turnajov tabulky</a>.
</p>
<p>
Okno zobrazuje (doufm) uiten informace o hri, zejmna jejich spnost
blma a ernma, oblben zahjen (podle <a ECO>kdu ECO</a>) a historii
ratingu.
</p>
<p>
Vechna zobrazen procenta jsou oekvan vsledek (mra spnosti) z
perspektivy hre -- take vy procento je vdy lep pro hre, nezvisle na
tom, je-li bl i ern.
</p>
<p>
Stiskem tlatka <a Graphs Rating>Graf ratingu</a> mete vidt graf historie
ratingu hre.
</p>
<p>
Kliknutm levm tlatkem myi na libovoln erven slo nastavte
<a Searches Filter>filtr</a> na ty partie, kter dan slo reprezentuje.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

################
### Graphs help:

set helpTitle(C,Graphs) "Okna graf"
set helpText(C,Graphs) {<h1>Okna graf</h1>
<p>
Scid m nkolik oken, kter zobrazuj informace graficky.
Jsou vysvtleny ne.
</p>

<h3><name Filter>Okno grafu filtru</name></h3>
<p>
Okno <term>grafu filtru</term> zobrazuje trendy parti v aktulnm filtru ve
srovnn s celou databz, a to podle podle data nebo podle Elo ratingu. Nap.
kdy mte oteven <a Tree>strom</a>, okno grafu je uiten jako nstroj
zobrazujc, jak se mnila popularita aktuln pozice zahjen v poslednch
letech nebo dekdch nebo jestli je zvlt oblben mezi hri s vtm
ratingem jako velmistry.
Kad bod grafu reprezentuje pro jednotliv rozsah data nebo Elo ratingu poet
parti ve filtru na 1000 parti v cel databzi.
</p>
<p>
Pi kreslen grafu filtru podle ratingu, Scid pouv pro kadou partii prmrn
(stedn) rating. Odhady rating (jako nap. ty z pravopisnho souboru) se
nepouij. Jestlie jeden hr partie rating m, ale jeho soupe nikoliv, pak se
a do hranice 2200 Elo pedpokld, e soupe m stejn rating.
Nap. jestlie jeden hr m 2500 Elo a soupe nem dn rating, stedn rating
je (2500+2200)/2=2350.
</p>

<h3><name Rating>Okno grafu ratingu</name></h3>
<p>
Okno <term>grafu ratingu</term> zobrazuje historii ratingu jednoho nebo obou
hr aktuln partie.
Pro jednoho hre mete graf vyvolat stiskem tlatka <b>Graf ratingu</b> v
okn <a PInfo>informac o hri</a> nebo pro oba hre aktuln partie vbrem
<b>Graf ratingu</b> z menu <menu>Nstroje</menu>.
</p>

<h3><name Score>Okno grafu skre</name></h3>
<p>
Okno <term>grafu skre</term> zobrazuje numerick hodnocen (skre) uloen v
komentch aktuln partie jako graf.
Kliknutm levm tlatkem myi kdekoliv v grafu skre se mete dostat do
korespondujc pozice partie.
</p>
<p>
Jsou rozeznvny dva druhy hodnotcch koment: ty, kter produkuje
<a Analysis>analytick</a> okno Scidu (kter maj formt
<ul>
<li><b>1.e4 {"+0.25 ...."}</b></li>
</ul>
a jsou brny vdy z perspektivy blho) a ty, kter jsou produkovny Craftyho
anotanm pkazem (kter maj formt
<ul>
<li><b>1.e4 ({9:+0.25} ....)</b></li>
</ul>
a jsou rovn brny vdy z perspektivy blho).
</p>

<h3><name Tree>Okno grafu stromu</name></h3>
<p>
Okno <term>grafu stromu</term> je dostupn ze stromovho okna. Zobrazuje
spnost nejpopulrnjch tah v aktuln pozici. Vce informac naleznete na
strnce npovdy <a Tree Graph>stromu</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.3, Duben 2002)</footer></p>
}

####################
### Tablebases help:

set helpTitle(C,TB) "Tabulky koncovek"
set helpText(C,TB) {<h1>Tabulky koncovek</h1>

<p>
<term>Tabulka koncovek</term> (tablebase) je soubor obsahujc  pesn informace
o vsledku vech pozic s uritm materilem, jako nap. krl a v proti krli a
pci. Byly generovny tabulky vech koncovek s materilem a do pti kamen
(brno i s krli) a jsou rovn k dispozici i nkter estikamenov tabulky
koncovek.
</p>
<p>
Scid me pouvat tabulky koncovek v Nalimovov formtu, kter vyuvaj mnoh
modernch achov motory. Tyto tabulky vtinou kon pponou <b>.nbw.emd</b>
nebo <b>.nbb.emd</b>. Ve Scidu mohou bt pouity vechny 3, 4 a 5 kamenov
Nalimovovy tabulky koncovek.
</p>

<h3>Pouit tabulek koncovek ve Scidu</h3>
<p>
Chcete-li pouvat ve Scidu tabulky koncovek, sta nastavit jejich adres
vbrem <b>Adres pro tabulky koncovek ...</b> z menu <menu>Volby</menu>.
Mete vybrat a 4 adrese, kde jsou vae tabulky koncovek uloeny.
Stiskem tlatka <b>...</b> napravo mete vybrat soubor a tm urit, e m bt
pouit adres tohoto souboru.
</p>
<p>
Kdy doshnete pozice, kter je nalezen v souboru tabulky koncovek, informan
zna partie (pod achovnic) zobraz informace z tabulky. Mnostv zobrazench
informac mete konfigurovat kliknutm pravho tlatka myi v tto zn nebo
vbrem <b>Informace o partii</b> z menu <menu>Volby</menu>. Volba "vsledek a
nejlep tahy" dv nejuitenj informace, ale je velmi asto pomalej ne
volba "jen vsledek".
</p>

<h3>Okno tabulky koncovek</h3>
<p>
Z tabulky koncovek mete zskat jet vce informac o aktuln pozici
otevenm <term>okna tabulky koncovek</term> (menu <menu>Okna</menu>, klvesov
zkratka: Ctrl+=). Toto okno zobrazuje vsledek s precizn hrou na vechny mon
tahy v aktuln pozici.
</p>
<p>
Toto okno m dv hlavn sti. Souhrnn rmec (nalevo) zobrazuje, kter tabulky
koncovek Scid nalezl na vaem potai a pehled pro kadou tabulku. Vsledkov
rmec (napravo) zobrazuje optimln vsledky pro vechny tahy v aktuln pozici
v hlavnm okn.
</p>

<h4>Souhrnn rmec</h4>
<p>
Horn st souhrnnho rmce vm umouje vbr konkrtn tabulky koncovek.
Tabulky, kter mte k dispozici, jsou zobrazeny mode a ty, kter jsou
nedostupn, jsou zobrazeny ed, ale mete vybrat libovolnou tabulku.
Doln st souhrnnho rmce zobrazuje pehled informac pro zvolenou tabulku
koncovek. (Jet ne vechny tabulky maj ve Scidu uloen pehled).
</p>
<p>
Pehled zahrnuje frekvenci (poet parti na milin, kter doshly pozice s tmto
materilem, spoteno z databze tm 600,000 mistrovskch parti), nejdel mat
za ob strany a poet vzjemnch (nebo "recipronch") zugzwang. Vzjemn
zugwang je takov pozice, kde bl pi svm tahu remizuje a ern pi svm tahu
prohraje nebo kde ta strana, kter je na tahu, prohrv.
</p>
<p>
Pro nkter tabulky koncovek se vzjemnmi zugzwangy pehled zahrnuje tak vet
vech zugzwangovch pozic nebo jejich vbr. pln vet pro kadou tabulku
koncovek nen provediteln, protoe nkter tabulky maj tisce vzjemnch
zugzwang.
</p>
<p>
Stiskem tlatka <b>Random</b> mete nastavit nhodnou pozici ze zvolen
tabulky koncovek.
</p>

<h4>Vsledkov rmec</h4>
<p>
Vsledkov rmec je aktualizovn kdykoliv se zmn pozice na achovnici v
hlavnm okn. Prvn dek ukazuje kolik tah vyhrv (+), remizuje (=), prohrv
(-) nebo m neznm vsledek(?). Zbytek rmce udv podrobnj seznam vsledk,
v poad od nejkratch k nejdelm vhrm, potom remzy a  nakonec od
nejdelch k nejkratm prohrm. Vechny vzdlenosti jsou potny k matu.
</p>

<h4>Vsledkov achovnice</h4>
<p>
V pozici obsaen v tabulkch koncovek je asto uiten, jak by byl vsledek,
kdyby vechny kameny v aktuln pozici byly na svch souasnch mstech, ale
pozice jedn urit figury by byla jin.
Nap. mete chtt rozhodnout, jak blzko mus bt krl k volnmu pci, aby
urit pozice byla vyhran nebo remzov. V knihch koncovek je tato informace
asto nazvna jako <i>vtzn zna</i> nebo <i>remzov zna</i> figury v
pozici.
</p>
<p>
Tuto informaci mete zjistit ve Scidu stiskem tlatka s obrzkem
achovnice, v okn tabulky koncovek se pot zobraz
<term>vsledkov achovnice</term>.
Stisknete-li lev tlatko myi na kterkoliv figue na tto achovnici, na
kadm przdnm poli se nakresl symbol urujc jak by byl vsledek (pi tahu
stejn strany jako v pozici v hlavnm okn), kdyby vybran figura byla na
takovm poli.
</p>
<p>
Je pt druh symbol, kter pole me mt:
bl <b>#</b> znamen vhru blho;
ern <b>#</b> znamen vhru ernho;
modr <b>=</b> znamen, e pozice je remzov;
erven <b>X</b> znamen, e pozice je ilegln (kvli sousedcm krlm nebo
protoe strana na tahu dv ach); a
erven <b>?</b> znamen, e vsledek nen znm, protoe potebn soubor tabulek
koncovek nen k dispozici.
</p>

<h3>Obstarn soubor tabulek koncovek</h3>
<p>
Pro pomoc ohledn vyhledn soubor tabulek koncovek na internetu tte
<a Author Related>pbuzn odkazy</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.4, Z 2002)</footer></p>
}

###################
### Bookmarks help:

set helpTitle(C,Bookmarks) "Zloky"
set helpText(C,Bookmarks) {<h1>Zloky</h1>
<p>
Scid vm umouje pro snadn budouc pstup pout pro dleit partie
<term>zloky</term>. Menu zloek je dostupn z menu <menu>Soubor</menu>, z
nstrojov lity nebo prostednictvm klvesov zkratky <B>Ctrl+B</b>.
</p>
<p>
Kdy z menu Zloky vyberete zaloenou partii, Scid, jestlie je to nutn,
oteve jej databzi, nalezne tuto partii a pesune se do t pozice v partii, v
kter byla zaloena.
</p>
<p>
Zloky mohou bt pouity jen pro databze ve formtu Scidu (ne pro PGN soubory
nebo pro databzi schrnka).
</p>
<p>
Pi tdn nebo zhutnn databze obsahujc zaloenou partii se detaily
zloky mohou stt zastaralmi. Kdy se tak stane, pi vbru takov zloky
Scid vyhled v databzi nejlpe odpovdajc partii (srovnnm jmen hr,
msta, atd.), take zaloen partie by mla i tak bt nataena. Avak jestlie
se zmn detaily zaloen partie, je mon, e detailm zloky bude lpe
odpovdat jin partie a bude nataena msto n. Take je dobrou mylenkou znovu
zaloit partii, jestlie edituje jej hre, msto, vsledek, kolo nebo rok.
</p>

<h3>Editace zloek</h3>
<p>
Pomoc editoru zloek mete zmnit text menu zobrazen pro kadou zaloenou
partii a pidat sloku ke kategorizaci zloek.
</p>

<h3>Rady</h3>
<p>
Zloky mete pouvat pro rychl pstup k databzm, kter asto pouvte, a
to tak, e z kad databze si zalote partii. Dalm dobrm pouitm zloek
je pidvn dleitch parti pi studiu jednotlivch achovch zahjen.
</p>
<p>
Menu zloek obsahuje poloku pro kontrolu zobrazovn sloek zloek: mohou bt
zobrazovny jako podmenu (uiten pi velkm potu zloek) nebo jako jedin
seznam.
</p>

<p><footer>(Aktualizovno: Scid 3.0, Listopad 2001)</footer></p>
}

##############################
### Command-line options help:

set helpTitle(C,Cmdline) "Volby pkazovho dku"
set helpText(C,Cmdline) {<h1>Volby pkazovho dku</h1>
<p>
Kdy spoutte Scid z shellu nebo z konsole, mete specifikovat rzn volby
pkazovho dku. Mete zadat databzi ve formtu Scidu (s nebo bez ppony
souboru jako nap. ".si3") a PGN soubor, kter se maj otevt, nap. pkaz:
<ul>
<li>scid mybase newgames.pgn</li>
</ul>
spust Scid a oteve databzi Scidu pojmenovanou mybase a PGN soubor pojmenovan
newgames.pgn.
</p>
<p>
Jsou zde tak voliteln argumenty slouc ke kontrole soubor, kter m Scid
prohledat a pout pi svm startu. Volbou <b>-xtb</b> (nebo <b>-xt</b>) mete
vypnout pouvn <a TB>tabulek koncovek</a>, volbou <b>-xeco</b> nebo
<b>-xe</b> mete zruit natahovn souboru
<a ECO>klasifikace zahjen ECO</a> a volbou <b>-xspell</b> nebo <b>-xs</b>
mete zruit natahovn <a Maintenance Spellcheck>pravopisnho souboru</a>.
Zrove existuje volba <b>-fast</b> nebo <b>-f</b>, kter dl vechno, co ti
pedchoz volby dohromady, take pkaz <b>scid -f</b> je ekvivalentn pkazu
<b>scid -xeco -xspell -xtb</b>.
</p>

<p><footer>(Aktualizovno: Scid 3.1, Listopad 2001)</footer></p>
}

#################
### Pgnscid help:

set helpTitle(C,Pgnscid) "Pgnscid"
set helpText(C,Pgnscid) {<h1>Pgnscid</h1>
<p>
<term>Pgnscid</term> je separtn program, kter je poteba ke konverzi PGN
(portable game notation) soubor na databze Scidu.
</p>
<p>
Chcete-li zkonvertovat soubor pojmenovan <i>myfile.pgn</i>, jednodue zadejte:
<ul>
<li> <b>pgnscid myfile.pgn</b> </li>
</ul>
a databze Scidu (skldajc se z <i>myfile.si3</i>, <i>myfile.sg3</i>
a <i>myfile.sn3</i>) bude vytvoena.
Veker chyby a varovn budou zapsny do souboru <i>myfile.err</i>.
</p>
<p>
Chcete-li, aby databze byla vytvoena v jinm adresi nebo mla jin jmno,
mete jmno databze pidat do pkazovho dku, nap.:
<ul>
<li> <b>pgnscid myfile.pgn mybase</b> </li>
</ul>
vytvo databzi skldajc se ze soubor <i>mybase.si3</i>,
<i>mybase.sg3</i> a <i>mybase.sn3</i>.
</p>
<p>
Vimnte si, e pgnscid (a scid) me st PGN soubory komprimovan Gzipem
(t.j. <b>mybase.pgn.gz</b>) pmo, take mte-li velk PGN soubor k ueten
msta komprimovan Gzipem, nen poteba ho nejprve dekomprimovat.
</p>

<h3>Volby</h3>
<p>
Pgnscid akceptuje ped jmnem souboru dva voliteln parametry: <b>-f</b> a
<b>-x</b>.
</p>
<p>
Pouitm parametru <b>-f</b> dojde k nsilnmu pepsan existujc databze;
implicitn pgnscid neprovede konverzi na databzi, kter u existuje.
</p>
<p>
Parametr <b>-x</b> zpsob, e pgnscid bude ignorovat vechen text mezi
partiemi.
Implicitn je text mezi partiemi uloen jako pedpartiov koment k partii,
kter nsleduje. Tato volba ovlivuje jen text mezi partiemi; standardn
komente uvnit kad partie jsou i tak zkonvertovny a uloeny.
</p>

<h3>Formtovn jmen hr</h3>
<p>
Aby se zredukoval poet vcensobnho pravopisu jmen, kter odkazuj na stejnho
hre, pgnscid provd nkter zkladn formtovn jmen hr. Nap. poet
mezer za kadou rkou je standardizovn na jednu, vechny mezery na zatku a
na konci jmna jsou odstranny a teka na konci jmna je odstranna.
Holandsk pedpony jako "van den" a "Van Der" jsou rovn normalizovny tak, e
maj velk psmeno V a mal d.
</p>
<p>
Jmna hr, turnaj, mst a kol lze ve Scidu editovat (a dokonce kontrolovat
jejich pravopis); detaily najdete na strnce npovdy
<a Maintenance Editing>drba</a>.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}


######################
### File formats help:

set helpTitle(C,Formats) "Formty soubor"
set helpText(C,Formats) {<h1>Formty soubor Scidu</h1>
<p>
Databze Scidu se skldaj ze t zkladnch soubor: Indexov soubor, Jmenn
soubor a Partiov soubor. Vechny maj dvoupsmennou pponu zanajc na "s":
".si" pro indexov (index) soubory, ".sn" pro jmenn (name) soubory a ".sg" pro
partiov (game) soubory.
</p>

<h3>Indexov (.si) soubor</h3>
<p>
Tento soubor obsahuje popis databze a mal zznam pevn velikosti pro kadou
partii. Souasn velikost je 41 byt na partii. 28 byt z tto velikosti jsou
zkladn informace jako nap. vsledek, datum, identifikan sla jmen hr,
turnaje, msta (skuten jmna jsou v Jmennm souboru), atd.
</p>
<p>
Zbvajcch 13 byt obsahuje nadbyten, ale uiten informace o partii, kter
se pouvaj k urychlen vyhledvn podle pozice, materilu a vzoru. Pro vce
informac tte ne sekci <a Formats Fast>Rychl vyhledvn</a>.
</p>

<h3>Jmenn (.sn) soubor</h3>
<p>
Tento soubor obsahuje vechny jmna hr, turnaj, mst a kol pouitch v
databzi. Kad jmno je uloeno jen jednou, i kdy se vyskytuje ve vce
partich. Jmenn soubor je obvykle nejmen ze t zkladnch soubor v
databzi.
</p>

<h3>Partiov (.sg) soubor</h3>
<p>
Tento soubor obsahuje skuten tahy, varianty a komente kad partie.
Formt kdovn tah je velmi sporn: vtina tah zabr pouze jeden byte
msta.
</p>
<p>
Kdy je partie nahrazena, je jej nov verze uloena na <i>konec</i> partiovho
souboru, take asem me dojt k nahromadn zbyten nepouitho msta.
Databzi mete navrtit do jej minimln velikosti jejm
<a Compact>zhutnnm</a>.
</p>

<h3>Ostatn soubory Scidu</h3>
<p>
<a EPD>EPD</a> soubor (ppona: ".epd") obsahuje mnostv achovch pozic,
kadou s textovm komentem.
Formt EPD souboru je popsn v <a Author Related>PGN standardu</a>.
</p>
<p>
V emailovm (ppona: ".sem") souboru pro databzi jsou uloeny detaily
oponent, kterm poslte emailov zprvy.
</p>
<p>
Soubor vyhledvacch voleb (ppona: ".sso") obsahuje nastaven pro vyhledvn
podle <a Searches Header>hlaviky</a> nebo podle
<a Searches Material>materilu/vzoru</a>.
</p>

<h3><name Fast>Rychl vyhledvn ve Scidu</name></h3>
<p>
Jak bylo eeno ve, indexov soubor uchovv nkter nadbyten, ale uiten
informace o kad partii za elem urychlen vyhledvn podle pozice nebo podle
materilu.
</p>
<p>
Nap. je uloen materil konen pozice. Jestlie hledte vov a pcov
koncovky, pak vechny partie, kter kon s dmou, stelcem nebo jezdcem na
achovnici (a nemaj dn promny pc) budou rychle peskoeny.
</p>
<p>
Dal uiten informace, kter je uloena, je poad, s jakou pci opoutj
sv poten postaven (bu svm tahem nebo vzetm). To se pouije k urychlen
stromovch vyhledvn nebo vyhledvn podle pesn pozice, zvlt pak pro
pozice zahjen. Nap. hledte-li poten pozici francouzsk obrany (1.e4 e6),
kad partie zanajc 1.e4 c5 nebo 1.d4 atd. bude peskoena, ale partie
zanajc 1.e4 e5 bude teba jet prohledat.
</p>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

###########################
### Options and Fonts help:

set helpTitle(C,Options) "Volby"
set helpText(C,Options) {<h1>Volby a preference</h1>
<p>
Mnoho voleb a preferenc Scidu (jako nap. velikost achovnice, barvy, fonty a
implicitn nastaven) mete nastavit v menu <menu>Volby</menu>.
Kdy z menu Volby zvolte <b>Uloit volby</b>, tato nastaven (a jet dal,
jako nap. posledn adres, z kterho se nathla databze a velikosti nkterch
oken) jsou uloeny do souboru voleb.
Tento soubor voleb se nate pi kadm sputn Scidu.
</p>
<p>
Jestlie pouvte Windows, soubor voleb je <b>scid.opt</b> v adresi, kde se
nachz spustiteln soubor Scidu <b>scid.exe</b>. Pro uivatele unixovch
operanch  systm (jako nap. Solaris nebo Linux) je soubor voleb
<b>~/.scid/scidrc</b>.
</p>

<h3><name MyPlayerNames>Nastaven jmen vaich hr</name></h3>
<p>
Me bt takov jmno hre (nebo nkolik jmen), pro kter byste chtli, aby kdykoliv se nathne jeho partie, achovnice v hlavnm okn byla zobrazena z perspektivy tohoto hre. Pouitm <b>Jmna mch hr...</b> z menu <menu>Volby/achovnice</menu> mete konfigurovat seznam takovch jmen. V dialogovm okn, kter se objev, zadejte na kad dek jedno jmno hre. Zstupn znaky ("<b>?</b>" pro pesn jeden znak a "<b>*</b>" pro sekvenci nula nebo vce znak) mohou bt pouity.
</p>

<h3><name Fonts>Nastaven font</name></h3>
<p>
Scid m ti zkladn fonty, kter pouv ve vtin svch oken, a vechny z
nich si mete pizpsobit. Nazvaj se <b>zkladn</b>, <b>mal</b> a
<b>fixn</b>.
</p>
<p>
Fixn font mus mt pevnou ku fontu (neproporcionln). Pouv se pro okna
<a Tree>stromu</a> a <a Crosstable>turnajov tabulky</a>.
</p>

<p><footer>(Aktualizovno: Scid 3.5, nor 2003)</footer></p>
}

####################
### NAG values help:

set helpTitle(C,NAGs) "NAG hodnoty"
set helpText(C,NAGs) {<h1>Standardn NAG hodnoty</h1>
<p>
Standardn NAG (Numeric Annotation Glyph, tj. numerick anotan piktograf)
hodnoty definovan v <a Author Related>PGN standardu</a> jsou:
</p>
<cyan>
<ul>
<li>  1   siln tah (!) </li>
<li>  2   patn tah (?) </li>
<li>  3   velmi siln tah (!!) </li>
<li>  4   hrub chyba (??) </li>
<li>  5   zajmav tah (!?) </li>
<li>  6   pochybn tah (?!) </li>
<li>  7   vynucen tah </li>
<li>  8   jedin tah; dn rozumn alternativy </li>
<li>  9   nejhor tah </li>
<li> 10   remzov pozice (=) </li>
<li> 11   vyrovnan ance, klidn pozice (=) </li>
<li> 12   vyrovnan ance, iv pozice (=) </li>
<li> 13   nejasn pozice (~) </li>
<li> 14   bl m malou vhodu (+=) </li>
<li> 15   ern m malou vhodu (=+) </li>
<li> 16   bl m vhodu (+/-) </li>
<li> 17   ern m vhodu (-/+) </li>
<li> 18   bl m rozhodujc vhodu (+-) </li>
<li> 19   ern m rozhodujc vhodu (-+) </li>
<li> 20   bl m drtivou vhodu (+-) </li>
<li> 21   ern m drtivou vhodu (-+) </li>
<li> 22   bl je v nevhod tahu (zugzwang) </li>
<li> 23   ern je v nevhod tahu (zugzwang) </li>
<li> 24   bl m malou prostorovou pevahu </li>
<li> 25   ern m malou prostorovou pevahu </li>
<li> 26   bl m prostorovou pevahu </li>
<li> 27   ern m prostorovou pevahu </li>
<li> 28   bl m rozhodujc prostorovou pevahu </li>
<li> 29   ern m rozhodujc prostorovou pevahu </li>
<li> 30   bl m mal nskok ve vvinu </li>
<li> 31   ern m mal nskok ve vvinu </li>
<li> 32   bl m nskok ve vvinu </li>
<li> 33   ern m nskok ve vvinu </li>
<li> 34   bl m rozhodujc nskok ve vvinu </li>
<li> 35   ern m rozhodujc nskok ve vvinu </li>
<li> 36   bl m iniciativu </li>
<li> 37   ern m iniciativu </li>
<li> 38   bl m trvalou iniciativu </li>
<li> 39   ern m trvalou iniciativu </li>
<li> 40   bl m tok </li>
<li> 41   ern m tok </li>
<li> 42   bl m nedostatenou kompenzaci za materiln jmu </li>
<li> 43   ern m nedostatenou kompenzaci za materiln jmu </li>
<li> 44   bl m dostatenou kompenzaci za materiln jmu </li>
<li> 45   ern m dostatenou kompenzaci za materiln jmu </li>
<li> 46   bl m vce ne adekvtn kompenzaci za materiln jmu </li>
<li> 47   ern m vce ne adekvtn kompenzaci za materiln jmu </li>
<li> 48   bl s malou vhodou kontroluje centrum </li>
<li> 49   ern s malou vhodou kontroluje centrum </li>
<li> 50   bl s vhodou kontroluje centrum </li>
<li> 51   ern s vhodou kontroluje centrum </li>
<li> 52   bl s rozhodujc vhodou kontroluje centrum </li>
<li> 53   ern s rozhodujc vhodou kontroluje centrum </li>
<li> 54   bl s malou vhodou kontroluje krlovsk kdlo </li>
<li> 55   ern s malou vhodou kontroluje krlovsk kdlo </li>
<li> 56   bl s vhodou kontroluje krlovsk kdlo </li>
<li> 57   ern s vhodou kontroluje krlovsk kdlo </li>
<li> 58   bl s rozhodujc vhodou kontroluje krlovsk kdlo </li>
<li> 59   ern s rozhodujc vhodou kontroluje krlovsk kdlo </li>
<li> 60   bl s malou vhodou kontroluje dmsk kdlo </li>
<li> 61   ern s malou vhodou kontroluje dmsk kdlo </li>
<li> 62   bl s vhodou kontroluje dmsk kdlo </li>
<li> 63   ern s vhodou kontroluje dmsk kdlo </li>
<li> 64   bl s rozhodujc vhodou kontroluje dmsk kdlo </li>
<li> 65   ern s rozhodujc vhodou kontroluje dmsk kdlo </li>
<li> 66   bl m slabou prvn adu </li>
<li> 67   ern m slabou prvn adu </li>
<li> 68   bl m dobe chrnnou prvn adu </li>
<li> 69   ern m dobe chrnnou prvn adu </li>
<li> 70   bl m patn chrnnho krle </li>
<li> 71   ern m patn chrnnho krle </li>
<li> 72   bl m dobe chrnnho krle </li>
<li> 73   ern m dobe chrnnho krle </li>
<li> 74   bl m patn postavenho krle </li>
<li> 75   ern m slab postavenho krle </li>
<li> 76   bl m dobe postavenho krle </li>
<li> 77   ern m dobe postavenho krle </li>
<li> 78   bl m velmi patnou pcovou strukturu </li>
<li> 79   ern m velmi patnou pcovou strukturu </li>
<li> 80   bl m patnou pcovou strukturu </li>
<li> 81   ern m patnou pcovou strukturu </li>
<li> 82   bl m dobrou pcovou strukturu </li>
<li> 83   ern m dobrou pcovou strukturu </li>
<li> 84   bl m velmi dobrou pcovou strukturu </li>
<li> 85   ern m velmi dobrou pcovou strukturu </li>
<li> 86   bl m patn postavenho jezdce </li>
<li> 87   ern m patn postavenho jezdce </li>
<li> 88   bl m dobe postavenho jezdce </li>
<li> 89   ern m dobe postavenho jezdce </li>
<li> 90   bl m patn postavenho stelce </li>
<li> 91   ern m patn postavenho stelce </li>
<li> 92   bl m dobe postavenho stelce </li>
<li> 93   ern m dobe postavenho stelce </li>
<li> 94   bl m patn postavenou v </li>
<li> 95   ern m patn postavenou v </li>
<li> 96   bl m dobe postavenou v </li>
<li> 97   ern m dobe postavenou v </li>
<li> 98   bl m patn postavenou dmu </li>
<li> 99   ern m patn postavenou dmu </li>
<li>100   bl m dobe postavenou dmu </li>
<li>101   ern m dobe postavenou dmu </li>
<li>102   bl m patnou souhru figur </li>
<li>103   ern m patnou souhru figur </li>
<li>104   bl m dobrou souhru figur </li>
<li>105   ern m dobrou souhru figur </li>
<li>106   bl sehrl zahjen velmi slab </li>
<li>107   ern sehrl zahjen velmi slab </li>
<li>108   bl sehrl zahjen slab </li>
<li>109   ern sehrl zahjen slab </li>
<li>110   bl sehrl zahjen dobe </li>
<li>111   ern sehrl zahjen dobe </li>
<li>112   bl sehrl zahjen velmi dobe </li>
<li>113   ern sehrl zahjen velmi dobe </li>
<li>114   bl sehrl stedn hru velmi slab </li>
<li>115   ern sehrl stedn hru velmi slab </li>
<li>116   bl sehrl stedn hru slab </li>
<li>117   ern sehrl stedn hru slab </li>
<li>118   bl sehrl stedn hru dobe </li>
<li>119   ern sehrl stedn hru dobe </li>
<li>120   bl sehrl stedn hru velmi dobe </li>
<li>121   ern sehrl stedn hru velmi dobe </li>
<li>122   bl sehrl koncovku velmi slab </li>
<li>123   ern sehrl koncovku velmi slab </li>
<li>124   bl sehrl koncovku slab </li>
<li>125   ern sehrl koncovku slab </li>
<li>126   bl sehrl koncovku dobe </li>
<li>127   ern sehrl koncovku dobe </li>
<li>128   bl sehrl koncovku velmi dobe </li>
<li>129   ern sehrl koncovku velmi dobe </li>
<li>130   bl m mrnou protihru </li>
<li>131   ern m mrnou protihru </li>
<li>132   bl m protihru </li>
<li>133   ern m protihru </li>
<li>134   bl m rozhodujc protihru </li>
<li>135   ern m rozhodujc protihru </li>
<li>136   bl m asovou tse </li>
<li>137   ern m asovou tse </li>
<li>138   bl m obrovskou asovou tse </li>
<li>139   ern m obrovskou asovou tse </li>
</ul>
</cyan>

<p>
Ostatn pedloen NAG hodnoty pro symboly publikac achovho Informtoru
(Chess Informant) obsahuj:
</p>
<cyan>
<ul>
<li>140   s mylenkou ... </li>
<li>141   nameno proti ... </li>
<li>142   lep tah </li>
<li>143   hor tah </li>
<li>144   rovnocenn tah </li>
<li>145   poznmka redakce ("RR") </li>
<li>146   novinka ("N") </li>
<li>147   slab bod </li>
<li>148   koncovka </li>
<li>149   sloupec; ada </li>
<li>150   diagonla </li>
<li>151   bl m dvojici stelc </li>
<li>152   ern m dvojici stelc </li>
<li>153   rznobarevn stelci </li>
<li>154   stejnobarevn stelci </li>
</ul>
</cyan>

<p>
Ostatn navren hodnoty jsou:
</p>
<cyan>
<ul>
<li>190   atd. </li>
<li>191   zdvojen pci </li>
<li>192   izolovan pci </li>
<li>193   spojen pci </li>
<li>194   visc pci </li>
<li>195   opodn pec </li>
</ul>
</cyan>

<p>
Symboly definovan Scidem pro jeho vlastn pouit jsou:
</p>
<cyan>
<ul>
<li>201   Diagram ("D", nkdy oznaovan "#") </li>
</ul>
</cyan>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

##############
### ECO guide:

set helpTitle(C,ECO) "ECO prvodce"
set helpText(C,ECO) {<h1>Klasifikace zahjen ECO</h1>
<p>
Scid me klasifikovat achov partie podle klasifikace achovch zahjen
<b>ECO</b> (Encyclopedia of Chess Openings, tj. Encyklopedie achovch
zahjen).
Standardn ECO kd se skld z psmene (A..E) nsledovanho dvma slicemi,
take existuje 500 rozdlnch standardnch ECO kd.
</p>

<h3>Rozen ECO systmu podporovan Scidem</h3>
<p>
ECO systm je velmi omezen a nedostaten pro modern partie: nkter z 500
kd se skoro vbec nevyskytuj, zatmco nkter se vyskytuj velmi asto. Pro
zlepen tto situace Scid umouje voliteln rozen zkladnch ECO kd:
kad kd me bt rozen psmenem (a..z), dal rozen (slic, 1..4)
jsou mon, ale jet nejsou pouity ve standardnm ECO souboru Scidu.
Take rozen ECO kd Scidu vypad asi jako "<b>A41e</b>" nebo "<b>E99b2</b>".
Mnoho nejbnjch ECO kd z modernch mistrovskch parti maj rozen
definovan v ECO souboru Scidu.
</p>

<h3><name Browser>Okno ECO prohlee</name></h3>
<p>
Okno <term>ECO prohlee</term> vm zobrazuje pozice, kter jsou pouvny ke
klasifikaci kadho ECO kdu a etnost a spnost ECO kd v aktuln databzi.
</p>
<p>
Horn pole zobrazuje etnost kadho ECO kdu v aktuln databzi. Lita v grafu
m ti seky: nejni (nejsvtlej barva) je poet vher blho, prostedn je
poet remz a nejvy (nejtmav) je poet vher ernho. To vm umouje
rychle zjistit charakteristiky zahjen: nap. jestli bl skruj velmi dobe
nebo jestli jsou velmi ast remzy.
</p>
<p>
Chcete-li jt do hlub ECO rovn, kliknte levm tlatkem myi na litu v
grafu (nebo zadejte korespondujc psmeno nebo slici). Chcete-li jt zpt do
vy rovn, kliknte pravm tlatkem myi kamkoliv v grafu nebo stisknte
klvesu lev ipky (nebo Delete nebo Backspace).
</p>
<p>
Doln pole zobrazuje pozice, kter obsahuje jednotliv ECO kd, podle ECO
souboru, kter jste nathli.
</p>

<h3>Nataen ECO souboru Scidu</h3>
<p>
ECO soubor distribuovan spolen se Scidem se jmenuje <b>scid.eco</b> a Scid se
ho pokou pi svm startu nathnout.
Jestlie ho Scid neme najt, bude poteba, aby byla mon ECO klasifikace,
udlat nsledujc:
<ul>
<li>(a) Ve Scidu, pouijte pkaz menu
        <menu>Volby: Nathnout ECO
        soubor...</menu> a vyberte soubor <b>scid.eco</b>. </li>
<li>(b) Ulote volby (z menu <menu>Volby</menu>). </li>
</ul>
Pot, co to provedete, ECO soubor bude nataen pi kadm sputn Scidu.
</p>

<h3><name Codes>Systm kd ECO</name></h3>
<p>
Zkladn struktura ECO systmu je:
</p>
<p>
<b><blue><run updateEcoWin A>A</run></blue></b>
   1.d4 Jf6 2...;  1.d4 ...;  1.c4;  1.rzn
<ul>
<li>  <b>A0</b>  1.<i>rzn</i>
      (<b>A02-A03</b> 1.f4: <i>Birdovo zahjen</i>,
      <b>A04-A09</b>  1.Jf3: <i>Rtiho, Krlovsk indick tok</i>) </li>
<li>  <b>A1</b>  1.c4 ...: <i>Anglick</i> </li>
<li>  <b>A2</b>  1.c4 e5: <i>Anglick krlovsk</i> </li>
<li>  <b>A3</b>  1.c4 c5: <i>Anglick symetrick</i> </li>
<li>  <b>A4</b>  1.d4 ...: <i>Dmskm pcem</i> </li>
<li>  <b>A5</b>  1.d4 Jf6 2.c4 ..: <i>Indick obrana</i> </li>
<li>  <b>A6</b>  1.d4 Nf6 2.c4 c5 3.d5 e6: <i>Modern Benoni</i> </li>
<li>  <b>A7</b>  A6 + 4.Jc3 exd5 5.cxd5 d6 6.e4 g6 7.Jf3 </li>
<li>  <b>A8</b>  1.d4 f5: <i>Holandsk obrana</i> </li>
<li>  <b>A9</b>  1.d4 f5 2.c4 e6: <i>Holandsk obrana</i> </li>
</ul>

<p>
<b><blue><run updateEcoWin B>B</run></blue></b>
   1.e4 c5;  1.e4 c6;  1.e4 d6;  1.e4 <i>rzn</i>
<ul>
<li>  <b>B0</b>  1.e4 ...
      (<b>B02-B05</b>  1.e4 Jf6: <i>Alechinova obrana</i>;
      <b>B07-B09</b>  1.e4 d6: <i>Pircova</i>) </li>
<li>  <b>B1</b>  1.e4 c6: <i>Caro-Kann</i> </li>
<li>  <b>B2</b>  1.e4 c5: <i>Sicilsk obrana</i> </li>
<li>  <b>B3</b>  1.e4 c5 2.Jf3 Jc6: <i>Sicilsk</i> </li>
<li>  <b>B4</b>  1.e4 c5 2.Jf3 e6: <i>Sicilsk</i> </li>
<li>  <b>B5</b>  1.e4 c5 2.Jf3 d6: <i>Sicilsk</i> </li>
<li>  <b>B6</b>  B5 + 3.d4 cxd4 4.Jxd4 Jf6 5.Jc3 Jc6 </li>
<li>  <b>B7</b>  B5 + 4.Jxd4 Jf6 5.Jc3 g6: <i>Sicilsk dra</i> </li>
<li>  <b>B8</b>  B5 + 4.Nxd4 Nf6 5.Nc3 e6: <i>Sicilsk Scheveningen</i> </li>
<li>  <b>B9</b>  B5 + 4.Nxd4 Nf6 5.Nc3 a6: <i>Sicilsk Najdorf</i> </li>
</ul>

<p>
<b><blue><run updateEcoWin C>C</run></blue></b>
   1.e4 e5;  1.e4 e6
<ul>
<li>  <b>C0</b>  1.e4 e6: <i>Francouzsk obrana</i> </li>
<li>  <b>C1</b>  1.e4 e6 2.d4 d5 3.Jc3: <i>Francouzsk, Winawer/klasick</i>
  </li>
<li>  <b>C2</b>  1.e4 e5: <i>Oteven hra</i> </li>
<li>  <b>C3</b>  1.e4 e5 2.f4: <i>Krlovsk gambit</i> </li>
<li>  <b>C4</b>  1.e4 e5 2.Jf3: <i>Oteven hra</i> </li>
<li>  <b>C5</b>  1.e4 e5 2.Jf3 Jc6 3.Sc4: <i>Italsk; Hra dvou jezdc</i> </li>
<li>  <b>C6</b>  1.e4 e5 2.Jf3 Jc6 3.Sb5: <i>panlsk</i> </li>
<li>  <b>C7</b>  1.e4 e5 2.Jf3 Jc6 3.Sb5 a6 4.Sa4: <i>panlsk</i> </li>
<li>  <b>C8</b>  C7 + 4...Jf6 5.O-O: <i>panlsk, zaven a oteven</i>
      (<b>C80-C83</b>  5.O-O Jxe4: <i>panlsk, oteven systm</i>;
      <b>C84-C89</b>  5.O-O Se7: <i>panlsk, zaven systm</i>) </li>
<li>  <b>C9</b>  C8 + 5...Se7 6.Ve1 b5 7.Sb3 d6: <i>panlsk, zaven</i> </li>
</ul>

<p>
<b><blue><run updateEcoWin D>D</run></blue></b>
   1.d4 d5; 1.d4 Jf6 2.c4 g6 s 3...d5
<ul>
<li>  <b>D0</b>  1.d4 d5: <i>Dmskm pcem</i> </li>
<li>  <b>D1</b>  1.d4 d5 2.c4 c6: <i>Slovansk obrana</i> </li>
<li>  <b>D2</b>  1.d4 d5 2.c4 dxc4: <i>Dmsk gambit pijat</i> </li>
<li>  <b>D3</b>  1.d4 d5 2.c4 e6: <i>Dmsk gambit odmtnut</i> </li>
<li>  <b>D4</b>  D3 + 3.Jc3 Jf6 4.Jf3 c5/c6: <i>Semi-Tarraschova;
  Poloslovansk</i>  </li>
<li>  <b>D5</b>  D3 + 3.Jc3 Jf6 4.Sg5: <i>Dmsk gambit odmtnut klasick</i>
 </li>
<li>  <b>D6</b>  D5 + 4...Se7 5.e3 O-O 6.Jf3 Jbd7: <i>Dmsk gambit
 odmtnut  ortodoxn</i> </li>
<li>  <b>D7</b>  1.d4 Jf6 2.c4 g6 s 3...d5: <i>Grunfeldova obrana</i> </li>
<li>  <b>D8</b>  1.d4 Jf6 2.c4 g6 3.Jc3 d5: <i>Grunfeldova</i> </li>
<li>  <b>D9</b>  1.d4 Jf6 2.c4 g6 3.Jc3 d5 4.Jf3: <i>Grunfeldova</i> </li>
</ul>

<p>
<b><blue><run updateEcoWin E>E</run></blue></b>
   1.d4 Jf6 2.c4 e6; 1.d4 Jf6 2.c4 g6 </li>
<ul>
<li>  <b>E0</b>  1.d4 Jf6 2.c4 e6: <i>Katalnsk, atd.</i> </li>
<li>  <b>E1</b>  1.d4 Jf6 2.c4 e6 3.Jf3 (b6): <i>Dmsk indick, atd.</i> </li>
<li>  <b>E2</b>  1.d4 Jf6 2.c4 e6 3.Jc3 (Sb4): <i>Nimcoviova indick, atd.</i>
 </li>
<li>  <b>E3</b>  E2 + 4.Sg5 nebo 4.Dc2: <i>Nimcoviova indick</i> </li>
<li>  <b>E4</b>  E2 + 4.e3: <i>Nimcoviova indick, Rubinstein</i> </li>
<li>  <b>E5</b>  E4 + 4...O-O 5.Jf3: <i>Nimcoviova indick, hlavn varianta</i>
 </li>
<li>  <b>E6</b>  1.d4 Jf6 2.c4 g6: <i>Krlovsk indick</i> </li>
<li>  <b>E7</b>  1.d4 Jf6 2.c4 g6 3.Jc3 Sg7 4.e4: <i>Krlovsk indick</i> </li>
<li>  <b>E8</b>  E7 + 4...d6 5.f3: <i>Krlovsk indick, Samisch</i> </li>
<li>  <b>E9</b>  E7 + 4...d6 5.Jf3: <i>Krlovsk indick, hlavn
 varianty</i> </li>
</ul>

<p><footer>(Aktualizovno: Scid 2.5, erven 2001)</footer></p>
}

#################
### Contact info:


set helpTitle(C,Author) "Kontaktn informace"
set helpText(C,Author) {<h1>Kontaktn informace</h1>
<p>
Webov strnka Scidu je: <br>
<b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>
</p>
<p>
Mete si tam sthnout posledn verzi Scidu a k dispozici jsou i jin soubory.
</p>
<p>
Veker komente, dotazy, nvrhy a informace o chybch poslejte prosm autorovi
Scidu, Shaneovi Hudsonovi, na emailovou adresu:<br>
<b>sgh@users.sourceforge.net</b>
</p>

<h3><name Related>Pbuzn odkazy</name></h3>
<p>
Jestlie se vm Scid lb, mon vs budou zajmat nsledujc webov strnky:
</p>
<ul>
<li><url http://www.tim-mann.org/chess.html>http://www.tim_mann.org/chess.html</url> --
Domovsk strnka programu Tima Manna <b>xboard & winboard</b>, kter lze pout ke
ten PGN a jako rozhran pro internetov achov servery. Jeho strnka obsahuje
rovn dobr informace o Crafty, GNUchess a dalch voln iitelnch achovch
programech. </li>

<li><url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url> --
siln achy hrajc program Crafty. Podadres pojmenovan <b>TB</b> obsahuje mnoho
soubor tabulek koncovek (tablebase) v Nalimovov formtu, kter lze pout v
nkolika achovch programech a rovn ve Scidu.</li>

<li><url http://www.chesscenter.com/twic/>http://www.chesscenter.com/twic/</url> --
TWIC (the week in chess), znamenit tdenn zpravodaj mezinrodnch achovch
parti dostupn v PGN formtu.</li>

<li><url http://scid.sourceforge.net/doc/standard.txt>http://scid.sourceforge.net/doc/standard.txt</url> --
<b>PGN Standard</b>, vytvoen Stevenem J. Edwardsem v roce 1994. Tento text
vysvtluje detailn formty PGN a EPD.</li> </ul>

<p><footer>(Aktualizovno: Scid 2.6, Srpen 2001)</footer></p>
}

# end of czech.tcl
### deutsch.tcl:
#  German language support for Scid.
#  Contributors: Bernhard Bialas, Jrgen Clos et al.
#  Untranslated messages are marked with a "***" comment.
#
#  Hinweis (aus tcl/lang/english.tcl):
#
# (4) [...]
#
#     A menu command has the format:
#         menuText L tag "Name..." underline {HelpMessage...}
#
#     [...]
#
#     where "L" is the language letter, "tag" is the name of the menu entry
#     or the button widget name, and "underline" is the index of the letter
#     to underline, counting from zero as the first letter. Two menu entries
#     that appear in the same menu should have a different underlined letter.

addLanguage D Deutsch 0 iso8859-1

proc setLanguage_D {} {

# File menu:
menuText D File "Datei" 0
menuText D FileNew "Neu..." 0 {Neue Scid-Datenbank anlegen}
menuText D FileOpen "ffnen..." 0 {Existierende Scid-Datenbank ffnen}
menuText D FileClose "Schlieen" 0 {Aktive Scid-Datenbank schlieen}
menuText D FileFinder "Finder" 0 {Dateifinderfenster ffnen}
menuText D FileBookmarks "Lesezeichen" 0 {Lesezeichenmen (Tasten: Strg+B)}
menuText D FileBookmarksAdd "Lesezeichen zur Liste hinzufgen" 0 \
  {Lesezeichen fr die aktuelle Partie und Datenbank}
menuText D FileBookmarksFile "Lesezeichen hinzufgen in Verzeichnis" 26 \
  {Lesezeichen fr die aktuelle Stellung und Partie zum Verzeichnis hinzufgen}
menuText D FileBookmarksEdit "Lesezeichen editieren..." 12 \
  {Lesezeichen bearbeiten}
menuText D FileBookmarksList "Listenansicht" 1 \
  {Lesezeichen als Liste zeigen, ohne Unterverzeichnisse}
menuText D FileBookmarksSub "Verzeichnisansicht" 3 \
  {Lesezeichen in Verzeichnissen zeigen, nicht als Gesamtliste}
menuText D FileMaint "Wartung" 0 {Das Scid-Datenbankwartungsfenster}
menuText D FileMaintWin "Wartungfenster" 0 \
  {Datenbank-Wartungsfenster ffnen/schlieen}
menuText D FileMaintCompact "Datenbank komprimieren..." 10 \
  {Datenbank komprimieren, gelschte Spiele und unbenutzte Namen entfernen}
menuText D FileMaintClass "Partien ECO-klassifizieren..." 8 \
{Neuklassifizierung aller Partien nach dem ECO-Code}
menuText D FileMaintSort "Sortieren..." 0 \
  {Alle Partien in der aktuellen Datenbank sortieren}
menuText D FileMaintDelete "Dubletten lschen..." 0 \
  {Dubletten finden und Lschkennzeichen setzen}
menuText D FileMaintTwin "Dubletten prfen" 10 \
  {Dublettenfenster ffnen/erneuern}
menuText D FileMaintName "Namen" 0 \
  {Namenseditor und Rechtschreibprfung}
menuText D FileMaintNameEditor "Namenseditor" 0 \
  {Namenseditorfenster ffnen/schlieen}
menuText D FileMaintNamePlayer "Schreibkorrektur Spieler..." 17 \
  {Schreibkorrektur der Spielernamen mit Hilfe der .ssp-Datei}
menuText D FileMaintNameEvent "Schreibkorrektur Ereignis..." 17 \
  {Schreibkorrektur der Ereignisse mit Hilfe der .ssp-Datei}
menuText D FileMaintNameSite "Schreibkorrektur Ort..." 17 \
  {Schreibkorrektur der Orte mit Hilfe der .ssp-Datei}
menuText D FileMaintNameRound "Schreibkorrektur Runde..." 17 \
  {Schreibkorrektur der Runden mit Hilfe der .ssp-Datei}
menuText D FileReadOnly "Schreibschutz..." 3 \
  {Datenbank als schreibgeschtzt behandeln, nderungen verhindern}
menuText D FileSwitch "Datenbank wechseln" 0 \
  {Zu einer anderen geffneten Datenbank umschalten}
menuText D FileExit "Ende" 0 {Scid beenden}
menuText D FileMaintFixBase "Inkonsistenzen beseitigen" 0 {Versuche eine inkonsistente Datenbank zu reparieren}

# Edit menu:
menuText D Edit "Bearbeiten" 0
menuText D EditAdd "Variante hinzufgen" 0 \
  {Fge zu diesem Zug eine Variante hinzu}
menuText D EditDelete "Variante lschen" 9 \
  {Lsche eine Variante zu diesen Zug}
menuText D EditFirst "Als erste Variante setzen" 4 \
  {Variante an erste Stelle in der Liste setzten}
menuText D EditMain "Variante als Partiefortsetzung" 13 \
  {Variante zur Partiefolge machen (und umgekehrt)}
menuText D EditTrial "Variante testen" 9 \
  {Testmodus starten/stoppen, um eine Idee am Brett auszuprobieren}
menuText D EditStrip "Entfernen" 1 \
   {Kommentare oder Varianten aus der Partie entfernen}
menuText D EditUndo "Rckgngig" 0 {Macht die letzte nderung rckgngig}
# ====== TODO To be translated ======
menuText D EditRedo "Redo" 0 {Redo last game change}
menuText D EditStripComments "Kommentare" 0 \
  {Alle Kommentare und Kommentarzeichen aus dieser Partie entfernen}
menuText D EditStripVars "Varianten" 0 \
  {Alle Varianten aus der Partie entfernen}
menuText D EditStripBegin "Zge ab Anfang" 8 \
  {Entferne Zge ab Partieanfang}
menuText D EditStripEnd "Zge bis Ende" 9 \
  {Entferne Zge bis Partieende}
menuText D EditReset "Ablage leeren" 0 \
   {Inhalt der Ablage-Datenbank lschen}
menuText D EditCopy "Partie in Ablage kopieren" 17 \
  {Diese Partie in die Ablage-Datenbank kopieren}
menuText D EditPaste "Partie aus Ablage einfgen" 19 \
  {Aktive Partie aus der Ablage hier einfgen}
menuText D EditPastePGN "PGN-Partie aus Ablage einfgen..." 1 \
  {Interpretiere den Inhalt der Zwischenablage als PGN-Notation und fge ihn hier ein}
menuText D EditSetup "Stellungseingabe..." 0 \
  {Neue Stellung eingeben (FEN oder manuell)}
menuText D EditCopyBoard "Stellung kopieren" 10 \
  {Aktuelle Brettposition in die Zwischenablage kopieren (im FEN-Format)}
menuText D EditPasteBoard "Stellung einfgen" 12 \
  {Stellung aus der Zwischenablage (im FEN-Format) einfgen}

# Game menu:
menuText D Game "Partie" 0
menuText D GameNew "Neue Partie" 5 \
  {Neue Partie beginnen, dabei alle nderungen verwerfen}
menuText D GameFirst "Erste Partie laden" 0 {Erste Partie im Filter laden}
menuText D GamePrev "Vorherige Partie laden" 0 \
  {Vorherige Partie im Filter laden}
menuText D GameReload "Partie wiederladen" 7 \
  {Diese Partie erneut laden, dabei alle nderungen verwerfen}
menuText D GameNext "Nchste Partie laden" 0 {Nchste Partie im Filter laden}
menuText D GameLast "Letzte Partie laden" 0 {Letzte Partie im Filter laden}
menuText D GameRandom "Zufllige Partie laden" 1 \
  {Zufllig ausgewhlte Partie im Filter laden}
menuText D GameNumber "Lade Partie Nummer..." 14 \
  {Partie durch Angabe der Nummer laden}
menuText D GameReplace "Partie ersetzen..." 8 \
  {Diese Partie sichern, dabei alte Version berschreiben}
menuText D GameAdd "Partie speichern..." 7 \
  {Diese Partie als neue Partie in der Datenbank sichern}
menuText D GameDeepest "Erffnung identifizieren" 10 \
  {Zur Position der lngstmglichen Zugfolge nach ECO-Klassifikation gehen}
menuText D GameGotoMove "Zugnummer..." 0 \
  {Zur angegebenen Zugnummer in der aktuellen Partie gehen}
menuText D GameNovelty "Finde Neuerung..." 0 \
  {Ersten Zug dieser Partie finden, der vorher noch nie gespielt wurde}

# Search menu:
menuText D Search "Suchen" 0
menuText D SearchReset "Filter zurcksetzen" 0 \
  {Alle Partien in den Filter einschlieen}
menuText D SearchNegate "Filter invertieren" 7 \
  {Alle ausgeschlossenen Partien in den Filter nehmen}
menuText D SearchCurrent "Brett..." 0 \
  {Aktuelle Brettposition suchen}
menuText D SearchHeader "Partiedaten..." 0 \
  {Partiedaten (Spieler, Turnier etc.) suchen}
menuText D SearchMaterial "Material/Muster..." 0 \
  {Nach Material- oder Stellungsmustern suchen}
menuText D SearchUsing "Mit Suchoptionsdatei..." 4 \
  {Mit Suchoptionsdatei suchen}

# Windows menu:
menuText D Windows "Fenster" 0
menuText D WindowsComment "Kommentareditor" 0 {Kommentareditor ffnen/schlieen}
menuText D WindowsGList "Partieliste" 6 {Partieliste ffnen/schlieen}
menuText D WindowsPGN "PGN-Fenster" 0 {PGN-Fenster (Partienotation) ffnen/schlieen}
menuText D WindowsPList "Spielersuche" 0 {Spielerfinder ffnen/schlieen}
menuText D WindowsTmt "Turniersuche" 0 {Turnierfinder ffnen/schlieen}
menuText D WindowsSwitcher "Datenbank-Umschalter" 0 \
  {Datenbank-Umschalter ffnen/schlieen}
menuText D WindowsMaint "Wartungsfenster" 0 {(Datenbank-)Wartungsfenster ffnen/schlieen}
menuText D WindowsECO "ECO-Auswertung" 0 {ECO-Auswertung ffnen/schlieen}
menuText D WindowsRepertoire "Repertoire-Editor" 0 {Erffnungsrepertoire-Editor ffnen/schlieen}
menuText D WindowsStats "Statistik" 4 {Filterstatistik ffnen/schlieen}
menuText D WindowsTree "Zugbaum" 0 {Zugbaum ffnen/schlieen}
menuText D WindowsTB "Endspieltabellen..." 1 {Endspieltabellen ffnen/schlieen}
menuText D WindowsBook "Buchfenster" 0 {Buchfenster ffnen/schlieen}
menuText D WindowsCorrChess "Fernschachfenster" 0 {ffnet/schliet das Fernschachfenster}

# Tools menu:
menuText D Tools "Werkzeuge" 0
menuText D ToolsAnalysis "Analyse-Engine..." 0 \
  {Schachanalyse-Programm starten/beenden}
menuText D ToolsAnalysis2 "Analyse-Engine #2..." 16 \
  {Schachanalyse-Programm Nr.2 starten/beenden}
menuText D ToolsCross "Kreuztabelle" 0 {Kreuztabelle fr diese Partie anzeigen}
menuText D ToolsEmail "E-Mail-Manager" 7 \
  {E-Mail-Manager ffnen/schlieen}
menuText D ToolsFilterGraph "Rel. Filtergrafik" 0 \
  {Filtergrafik mit relativen Werten ffnen/schlieen}
menuText D ToolsAbsFilterGraph "Abs. Filtergrafik" 11 \
  {Filtergrafik mit absoluten Werten ffnen/schlieen}
menuText D ToolsOpReport "Erffnungsbericht" 0 \
  {Ausfhrliche Erffnungsbersicht fr die aktuelle Position erstellen}
menuText D ToolsOpenBaseAsTree "ffne DB als Baum" 0   {ffne DB und verwende sie im Zugbaum-Fenster}
menuText D ToolsOpenRecentBaseAsTree "Letzte DB als Baum" 0   {ffne zuletzt verwendete DB im Zugbaum-Fenster}
menuText D ToolsTracker "Figurenverteilung"  7 \
  {Figurenverteilungsfenster ffnen}
menuText D ToolsTraining "Training"  0 {Trainingswerkzeuge (Taktik, Erffnungen,...) }
menuText D ToolsTacticalGame "Trainingspartie"  0 {Trainingspartie spielen}
menuText D ToolsSeriousGame "Ernste Partie"  0 {Ernste Partie spielen}
menuText D ToolsTrainOpenings "Erffnungen"  0 {Erffnungsrepertoire trainieren}
menuText D ToolsTrainReviewGame "Partie nachspielen"  0 {Finden von Zgen wie in vorgegebener Partie}
menuText D ToolsTrainTactics "Taktik"  0 {Taktische Stellungen lsen}
menuText D ToolsTrainCalvar "Varianten berechnen"  0 {Training zum Berechnen von Varianten}
menuText D ToolsTrainFindBestMove "Besten Zug finden"  0 {Find best move}
menuText D ToolsTrainFics "Internetpartie (FICS)"  0 {Internetpartie auf freechess.org}
# ====== TODO To be translated ======
menuText D ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText D ToolsBookTuning "Buch abstimmen" 0 {Buch abstimmen}
menuText D ToolsConnectHardware "Hardware verbinden" 0 {Externe Hardware mit Scid verbinden}
menuText D ToolsConnectHardwareConfigure "Konfigurieren..." 0 {Hardware und Verbindung konfigurieren}
menuText D ToolsConnectHardwareNovagCitrineConnect "Novag Citrine verbinden" 0 {Novag Citrine mit Scid verbinden}
menuText D ToolsConnectHardwareInputEngineConnect "Input Engine verbinden" 0 {Input Engine (z.B. DGT Brett) mit Scid verbinden}
menuText D ToolsPInfo "Spielerinformation"  0 \
  {Spielerinformation ffnen/schlieen}
menuText D ToolsPlayerReport "Spielerbericht..." 7 \
  {Erzeuge einen Spielerbericht}
menuText D ToolsRating "ELO-Zahl-Verlauf" 4 \
  {Wertungsverlauf beider Spieler grafisch darstellen}
menuText D ToolsScore "Partiebewertungsgraph" 0 {Partie-Bewertungsgraph zeigen}
menuText D ToolsExpCurrent "Partie exportieren" 8 \
  {Aktuelle Partie in eine Textdatei schreiben}
menuText D ToolsExpCurrentPGN "Partie in PGN-Datei exportieren..." 10 \
  {Aktuelle Partie in eine PGN-Datei schreiben}
menuText D ToolsExpCurrentHTML "Partie in HTML-Datei exportieren..." 10 \
  {Aktuelle Partie in eine HTML-Datei schreiben}
menuText D ToolsExpCurrentHTMLJS "Partie in HTML/JavaScript-Datei exportieren..." 15 {Aktuelle Partie wird in eine HTML und JavaScript Datei exportiert.}  
menuText D ToolsExpCurrentLaTeX "Partie in LaTeX-Datei exportieren..." 10 \
  {Aktuelle Partie in eine LaTeX-Datei schreiben}
menuText D ToolsExpFilter "Alles im Filter exportieren" 16 \
  {Alle Partien im Filter in eine Textdatei schreiben}
menuText D ToolsExpFilterPGN "Filter in PGN-Datei exportieren..." 10 \
  {Alle Partien im Filter in eine PGN-Datei schreiben}
menuText D ToolsExpFilterHTML "Filter in HTML-Datei exportieren..." 10 \
  {Alle Partien im Filter in eine HTML-Datei schreiben}
menuText D ToolsExpFilterHTMLJS "Filter in HTML/JavaScript exportieren..." 17 {Alle Partien im Filter werden in eine HTML und JavaScript Datei exportiert.}  
menuText D ToolsExpFilterLaTeX "Filter in LaTeX-Datei exportieren..." 10 \
  {Alle Partien im Filter in eine LaTeX-Datei schreiben}
menuText D ToolsImportOne "Eine PGN-Partie importieren..." 16 \
  {Eine Partie im PGN-Format eingeben oder einfgen}
menuText D ToolsImportFile "PGN-Partien importieren..." 0 \
  {Partien aus einer PGN-Datei lesen}
menuText D ToolsStartEngine1 "Starte Engine1" 0  {Starte Analyse von Analyse-Engine1}
menuText D ToolsStartEngine2 "Starte Engine2" 0  {Starte Analyse von Analyse-Engine2}
menuText D ToolsCaptureBoard "Brettfoto..." 0  {Aktuelles Brett als Bild speichern.}
#-----AW------
###  BC   GHIJKL  O Q  TUV XY 
menuText D Play "Spielen" 0 {Partien spielen}
menuText D CorrespondenceChess "Fernschach" 0 {Funktionen fr eMail und Xfcc basiertes Fernschach}
menuText D CCConfigure "Einstellungen..." 0 {Generelle Einstellungen und externe Werkzeuge}
menuText D CCConfigRelay "Beobachtete Partien..." 10 {Configure games to be observed}
menuText D CCOpenDB "Datenbank ffnen..." 0 {ffnet die Standarddatenbank fr Fernschachpartien}
menuText D CCRetrieve "Partien synchronisieren" 0 {Synchronisiert Partien mit dem Posteingang und mittels (Xfcc-)Hilfsprogramm}
menuText D CCInbox "Posteingang synchronisieren" 12 {Synchronisiert alle Partien im Posteingang}
menuText D CCSend "Zug senden" 0 {Verschickt den letzten Zug via eMail oder exterem (Xfcc-)Hilfsprogramm}
menuText D CCResign "Aufgeben" 0 {Partie aufgeben (funktioniert nicht via eMail)}
menuText D CCClaimDraw "Remis erklren" 1 {Zug senden und Partie Remis erklren (funktioniert nicht via eMail)}
menuText D CCOfferDraw "Remis anbieten" 0 {Zug senden und Remis anbieten (funktioniert nicht via eMail)}
menuText D CCAcceptDraw "Remis annehmen" 10 {Remis annehmen (funktioniert nicht via eMail)}
menuText D CCNewMailGame "Neue eMail Partie..." 0 {Beginnt eine neue Partie via eMail}
menuText D CCMailMove "Zug per eMail senden..." 9 {Verschickt den letzten Zug per eMail}
menuText D CCGamePage "Partieseite (WWW)..." 13 {Ruft die Webseite der Partie auf}
menuText D CCEditCopy "Partieliste in Ablage" 0 {Kopiert die Parieliste als CSV in die Zwischenablage}
#-----AW------

# Options menu:
menuText D Options "Optionen" 0
menuText D OptionsBoard "Schachbrett" 6 {Schachbrettoptionen}
menuText D OptionsBoardSize "Brettgre" 0 {Brettgre ndern}
menuText D OptionsBoardPieces "Figurensatz" 2 {Figurensatz wechseln}
menuText D OptionsBoardColors "Farben..." 0 {Brettfarben ndern}
#Klimmek
menuText D OptionsBoardGraphics "Brettfelder..." 3 {Grafik fr Brettfelder auswhlen}
translate D OptionsBGW {Grafikdatei fr Felder auswhlen}
translate D OptionsBoardGraphicsText {Grafikdateien fr helle und dunkle Felder auswhlen:}
menuText D OptionsBoardNames "Meine Spielernamen..." 0 {Editiere meine Spielernamen}
menuText D OptionsExport "Export" 1 {Textausgabeoptionen ndern}
menuText D OptionsFonts "Schriftarten" 3 {Schriftart wechseln}
menuText D OptionsFontsRegular "Normal" 0 {Standardzeichensatz}
menuText D OptionsFontsMenu "Men" 0 {Schriftart fr Mens}
menuText D OptionsFontsSmall "Klein" 0 {Kleine Zeichen}
menuText D OptionsFontsTiny "Winzig" 0 {Kleinster Font}
menuText D OptionsFontsFixed "Fest" 0 {Schriftart mit fester Breite (nicht-proportional)}
menuText D OptionsGInfo "Partieinformation" 0 {Optionen fr Informationsbereich}
menuText D OptionsLanguage "Sprache" 0 {Sprache whlen}
menuText D OptionsMovesTranslatePieces "Figurennamen bersetzen" 0 {bersetze den ersten Buchstaben der Figurenbezeichnung}
menuText D OptionsMovesHighlightLastMove "Letzen Zug hervorheben" 0 {Rahmt Start- und Zielfeld des letzten Zuges farbig ein}
menuText D OptionsMovesHighlightLastMoveDisplay "Anzeigen" 0 {Hervorhebung des letzen Zuges anzeigen}
menuText D OptionsMovesHighlightLastMoveWidth "Dicke" 0 {Dicke der Linie}
menuText D OptionsMovesHighlightLastMoveColor "Farbe" 0 {Farbe der Linie}
# ====== TODO To be translated ======
menuText D OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText D OptionsMoves "Zge" 0 {Zugeingabeoptionen}
menuText D OptionsMovesAsk "Fragen vor Ersetzen" 0 \
  {Vor berschreiben existierender Zge nachfragen}
menuText D OptionsMovesAnimate "Animation" 0 \
  {Zeit fr Zuganimation einstellen}
menuText D OptionsMovesDelay "Autom. Vorspielen..." 7 \
  {Zeit fr automatisches Vorspielen einstellen}
menuText D OptionsMovesCoord "Tastatureingabe" 0 \
  {Zugeingabe ber Koordinaten ("g1f3") akzeptieren}
menuText D OptionsMovesSuggest "Zugvorschlag zeigen" 0 \
  {Zugvorschlag ein-/ausschalten}
menuText D OptionsShowVarPopup "Variantenfenster zeigen" 0 { Anzeige des Variantenauswahlfensters ein/ausschalten}  
menuText D OptionsMovesSpace "Leerzeichen nach Zugnummer einfgen" 0 {Leerzeichen nach Zugnummer einfgen}  
menuText D OptionsMovesKey "Autom. Zugergnzung" 10 \
  {Automatische Zugergnzung ein-/ausschalten}
menuText D OptionsMovesShowVarArrows "Pfeile fr Varianten anzeigen" 0 {Zeige Pfeile in Varianten an: ja/nein}
menuText D OptionsNumbers "Zahlenformat" 5 {Zahlenformat whlen}
menuText D OptionsStartup "Autostart" 1 {Fenster zum ffnen bei Start auswhlen}
menuText D OptionsTheme "Design" 0 {Verndert das Aussehen der Oberflche}
menuText D OptionsWindows "Fenster" 6 {Fenster-Optionen}
menuText D OptionsWindowsIconify "Autom. minimieren" 7 \
  {Alle Fenster mit dem Hauptfenster minimieren}
menuText D OptionsWindowsRaise "Autom. Verwaltung" 7 \
  {Bestimmte Fenster (z.B. Zustandsleiste) bei Bedarf ffnen}
menuText D OptionsSounds "Tne..." 0 {Tne fr Zugankndigung einstellen} ;# *** Hmm, :-|
menuText D OptionsWindowsDock "Fenster docken" 0 {Fenster docken}
menuText D OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
menuText D OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
menuText D OptionsWindowsShowGameInfo "Partieinformationen" 0 {Partieinformation anzeigen}
menuText D OptionsWindowsAutoLoadLayout "Automatisch laden: 1. Layout" 0 {Ldt das erste definierte Layout automatisch beim Programmstart}
menuText D OptionsToolbar "Werkzeugleiste" 0 {Werkzeug- bzw. Symbolleiste Ein/Aus}
menuText D OptionsECO "ECO-Datei laden..." 0 {ECO-Klassifikationsdatei laden}
menuText D OptionsSpell "Schreibkorrekturdatei laden..." 7 \
  {Datei fr Scid-Rechtschreibprfung laden}
menuText D OptionsTable "Endspieltabellenverzeichnis..." 16 \
  {Eine Endspieltabellendatei whlen (und damit alle Tabellen in diesem Verzeichnis)}
menuText D OptionsRecent "Aktuelle Dateien..." 9 \
  {Anzahl der aktuellen Dateien im Dateimen ndern}
menuText D OptionsBooksDir "Buchverzeichnis..." 0 {Erffnungsbuchverzeichnis einstellen}
menuText D OptionsTacticsBasesDir "Bases Verzeichnis..." 0 {Verzeichnis fr taktische Trainingsdatenbanken einstellen}
menuText D OptionsSave "Optionen speichern" 0 \
  "Alle einstellbaren Optionen in der Datei $::optionsFile sichern"
menuText D OptionsAutoSave "Autom. speichern bei Beenden" 0 \
  {Alle Optionen beim Beenden von Scid automatisch speichern}

# Help menu:
menuText D Help "Hilfe" 0
menuText D HelpContents "Inhalt" 0 {Gehe zum Inhaltsverzeichnis}
menuText D HelpIndex "Index" 4 {Gehe zum Hilfeindex}
menuText D HelpGuide "Kurzanleitung" 4 {Ein Scid-Schnelldurchgang}
menuText D HelpHints "Hinweise" 0 {Die Scid-Kurztips}
menuText D HelpContact "Kontaktinformation" 0 {Hilfe zur Kontaktinformation}
menuText D HelpTip "Tagestip" 0 {Zeigt einen ntzlichen Tip an}
menuText D HelpStartup "Startfenster" 0 {Startfenster zeigen}
menuText D HelpAbout "ber Scid" 0 {Informationen zu Scid}

# Game info box popup menu:
menuText D GInfoHideNext "Nchsten Zug verstecken" 13
menuText D GInfoMaterial "Materialwerte zeigen" 0
menuText D GInfoFEN "FEN zeigen" 0
menuText D GInfoMarks "Gefrbte Felder und Pfeile zeigen" 0
menuText D GInfoWrap "Umbruch bei langen Zeilen" 0
menuText D GInfoFullComment "Vollstndigen Kommentar zeigen" 14
menuText D GInfoPhotos "Fotos zeigen" 1
menuText D GInfoTBNothing "Endspieltabellen: nichts" 18
menuText D GInfoTBResult "Endspieltabellen: nur Ergebnis" 22
menuText D GInfoTBAll "Endspieltabellen: Ergebnis und bester Zug" 31
menuText D GInfoDelete "(Ent)Lsche diese Partie" 5
menuText D GInfoMark "(Un)Markiere diese Partie" 4
menuText D GInfoInformant "Informatorwerte konfigurieren" 0

# Main window buttons:
helpMsg D .main.fbutton.button.start {Gehe zum Partieanfang  (Taste: Pos 1)}
helpMsg D .main.fbutton.button.end {Gehe zum Partieende  (Taste: Ende)}
helpMsg D .main.fbutton.button.back {Gehe einen Zug zurck  (Taste: LinksPfeil)}
helpMsg D .main.fbutton.button.forward {Gehe einen Zug vor  (Taste: RechtsPfeil)}
helpMsg D .main.fbutton.button.intoVar {Gehe in Variante  (Taste: v)}
helpMsg D .main.fbutton.button.exitVar {Verlasse Variante  (Taste: z)}
helpMsg D .main.fbutton.button.flip {Brett drehen  (Taste: .)}
helpMsg D .main.fbutton.button.coords {Brettkoordinaten AN oder AUS  (Taste: 0)}
helpMsg D .main.fbutton.button.stm {Anzeige "Wer ist am Zug" an oder aus}
helpMsg D .main.fbutton.button.autoplay {Automatisches Vorspielen  (Taste: Strg+Z)}
# ====== TODO To be translated ======
helpMsg D .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg D .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg D .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate D Back {Zurck}
translate D Browse {Blttern}
translate D Cancel {Abbrechen}
translate D Continue {Weiter}
translate D Clear {Leeren}
translate D Close {Schlieen}
translate D Contents {Inhalt}
translate D Defaults {Standard}
translate D Delete {Lsche}
translate D Graph {Grafik}
translate D Help {Hilfe}
translate D Import {Importieren}
translate D Index {Index}
translate D LoadGame {Partie laden}
translate D BrowseGame {Partie betrachten}
translate D MergeGame {Partie zusammenfgen}
translate D MergeGames {Partien kombinieren}
translate D Preview {Vorschau} ;# Voransicht!? (KDE)
translate D Revert {Umkehren}
translate D Save {Speichern}
translate D Search {Suchen}
translate D Stop {Halt}
translate D Store {Speichern}
translate D Update {Aktualisieren}
translate D ChangeOrient {Fensterausrichtung ndern}
translate D ShowIcons {Symbole anzeigen}
translate D None {Keine}
translate D First {Erste}
translate D Current {Aktuelle}
translate D Last {Letzte}

# General messages:
translate D game {Partie}
translate D games {Partien}
translate D move {Zug}
translate D moves {Zge}
translate D all {Alle}
translate D Yes {Ja}
translate D No {Nein}
translate D Both {Beide}
translate D King {Knig}
translate D Queen {Dame}
translate D Rook {Turm}
translate D Bishop {Lufer}
translate D Knight {Springer}
translate D Pawn {Bauer}
translate D White {Wei}
translate D Black {Schwarz}
translate D Player {Spieler}
translate D Rating {Elo}
translate D RatingDiff {Elo-Differenz (Wei - Schwarz)}
translate D AverageRating {Elo-Durchschnitt}
translate D Event {Turnier}
translate D Site {Ort}
translate D Country {Land}
translate D IgnoreColors {Farben ignorieren}
translate D Date {Datum}
translate D EventDate {Turnierdatum}
translate D Decade {Dekade}
translate D Year {Jahr}
translate D Month {Monat}
translate D Months {Januar Februar Mrz April Mai Juni Juli August September Oktober November Dezember}
translate D Days {Son Mon Die Mit Don Fre Sam}
translate D YearToToday {Ein Jahr zurck}
translate D Result {Ergebnis}
translate D Round {Runde}
translate D Length {Lnge}
translate D ECOCode {ECO-Code}
translate D ECO {ECO}
translate D Deleted {Gelscht}
translate D SearchResults {Suchergebnisse}
translate D OpeningTheDatabase {Datenbank ffnen}
translate D Database {Datenbank}
translate D Filter {Filter}
translate D noGames {keine Partien}
translate D allGames {alle Partien}
translate D empty {leer}
translate D clipbase {Ablage}
translate D score {Punkte}
translate D StartPos {Stellung}
translate D Total {Summe}
translate D readonly {schreibgeschtzt}

# Standard error messages:
translate D ErrNotOpen {Dies ist keine geffnete Datenbank.}
translate D ErrReadOnly \
  {Diese Datenbank ist schreibgeschtzt; sie kann nicht gendert werden.}
translate D ErrSearchInterrupted \
  {Suche wurde unterbrochen; Ergebnisse sind unvollstndig.}

# Game information:
translate D twin {Dublette}
translate D deleted {gelscht}
translate D comment {Kommentar}
translate D hidden {versteckt}
translate D LastMove {letzter Zug}
translate D NextMove {nchster Zug}
translate D GameStart {Partieanfang}
translate D LineStart {Beginn der Zugfolge}
translate D GameEnd {Partieende}
translate D LineEnd {Ende der Zugfolge}

# Player information:
translate D PInfoAll {Ergebnisse fr <b>alle</b> Spiele}
translate D PInfoFilter {Ergebnisse fr <b>Filter</b>-Spiele}
translate D PInfoAgainst {Ergebnisse gegen}
translate D PInfoMostWhite {Hufigste Erffnungen als Weier}
translate D PInfoMostBlack {Hufigste Erffnungen als Schwarzer}
translate D PInfoRating {ELO-Historie}
translate D PInfoBio {Biographie}
translate D PInfoEditRatings {Editiere Ratings}

# Tablebase information:
translate D Draw {Remis}
translate D stalemate {Patt}
translate D withAllMoves {mit allen Zgen}
translate D withAllButOneMove {mit allen auer einem Zug}
translate D with {mit}
translate D only {nur}
translate D lose {verlieren}
translate D loses {verliert}
translate D allOthersLose {alle anderen verlieren}
translate D matesIn {setzt Matt in}
translate D hasCheckmated {hat Matt gesetzt}
translate D longest {lngste}
translate D WinningMoves {Gewinnzge}
translate D DrawingMoves {Remiszge}
translate D LosingMoves {Verlustzge}
translate D UnknownMoves {Zge mit unbekanntem Resultat}

# Tip of the day:
translate D Tip {Tip}
translate D TipAtStartup {Tip beim Starten}

# Tree window menus:
menuText D TreeFile "Datei" 0
menuText D TreeFileFillWithBase "Cache mit Datenbank fllen" 0 {Die Cache-Datei wird mit allen Partien der aktuellen Datenbank befllt.}
menuText D TreeFileFillWithGame "Cache mit Partie fllen" 0 {Die Cache-Datei wird mit der aktuellen Partien befllt.}
menuText D TreeFileSetCacheSize "Cache Gre" 0 {Cachegre auswhlen.}
menuText D TreeFileCacheInfo "Cache info" 0 {Info ber Cachenutzung anzeigen.}
menuText D TreeFileSave "Cache-Datei sichern" 12 \
  {Speichere die Zugbaum-Cache-Datei (.stc)}
menuText D TreeFileFill "Cache-Datei fllen" 12 \
  {Flle die Cache-Datei mit hufigen Erffnungspositionen}
menuText D TreeFileBest "Beste Partien" 0 \
  {Zeige die Liste bester Partien im Baum}
menuText D TreeFileGraph "Grafikfenster" 0 \
  {Zeige die Grafik fr diesen Ast}
menuText D TreeFileCopy "Kopiere Baumfenster in Zwischenablage" 0 \
  {Kopiere die Zugbaum-Statistik in die Zwischenablage}
menuText D TreeFileClose "Baumfenster schlieen" 12 {Schliee Zugbaum}
menuText D TreeMask "Maskieren" 0
menuText D TreeMaskNew "Neu" 0 {Neue Maske anlegen}
menuText D TreeMaskOpen "ffnen" 0 {Maske ffnen}
menuText D TreeMaskOpenRecent "Aktuelle Masken" 0 {Zuletzt geffnete Masken erneut laden}
menuText D TreeMaskSave "Speichern" 0 {Maske speichern}
menuText D TreeMaskClose "Schlieen" 0 {Maske schlieen}
menuText D TreeMaskFillWithGame "Mit aktueller Partie fllen" 0 {Maske mit der aktuellen Partie fllen}
menuText D TreeMaskFillWithBase "Mit Datenbank fllen" 0 {Maske mit Datenbankpartien fllen}
menuText D TreeMaskInfo "Info" 0 {Statistik fr die aktuelle Maske anzeigen}
menuText D TreeMaskDisplay "Maske als Baum" 0 {Zeigt den Inhalt der aktuellen Maske als Zugbaum}
menuText D TreeMaskSearch "Suchen" 0 {Suchen innerhalb der aktuellen Maske}
menuText D TreeSort "Sortieren" 0
menuText D TreeSortAlpha "Alphabetisch" 0
menuText D TreeSortECO "ECO-Code" 0
menuText D TreeSortFreq "Hufigkeit" 0
menuText D TreeSortScore "Punkte" 0
menuText D TreeOpt "Optionen" 0
menuText D TreeOptSlowmode "Grndliche Suche" 0 {Update mit hoher Genauigkeit, langsamer}
menuText D TreeOptFastmode "Schneller Modus" 0 {Schnelles Update (ignoriert Zugumstellungen)}
menuText D TreeOptFastAndSlowmode "Grndlicher und Schneller Modus" 0 {Zunchst schneller Updatemodus, dann nacharbeit im grndlichen Modus}
menuText D TreeOptStartStop "Automatisch aktualisieren" 0 {Schaltet das automatische aktualisieren ein/aus}
menuText D TreeOptLock "Anbinden" 0 \
  {Zugbaum an aktive Datenbank anbinden(/lsen)}
menuText D TreeOptTraining "Training" 0 {Trainingsmodus ein-/ausschalten}
menuText D TreeOptAutosave "Autom. Cache-Datei sichern" 4 \
  {Beim Schlieen des Zugbaums automatisch Cache-Datei sichern}
menuText D TreeHelp "Hilfe" 0
menuText D TreeHelpTree "Zugbaumhilfe" 0
menuText D TreeHelpIndex "Index" 0
translate D SaveCache {Cache sichern}
translate D Training {Training}
translate D LockTree {Anbinden}
translate D TreeLocked {angebunden}
translate D TreeBest {Beste}
translate D TreeBestGames {Beste Zugbaumpartien}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate D TreeTitleRow \
  {    Zug    ECO       Hufigkeit    Pkte   Elo  Erflg Jahr %Remis}
translate D TreeTotal {SUMME}
translate D DoYouWantToSaveFirst {Soll zuerst gespeichert werden}
translate D AddToMask {Zur Maske hinzufgen}
translate D RemoveFromMask {Entferne von Maske}
translate D AddThisMoveToMask {Diesen Zug zur Maske hinzufgen}
translate D SearchMask {Suche in einer Maske}
translate D DisplayMask {Maske als Zugbaum}
translate D Nag {NAG Code}
translate D Marker {Marker}
translate D Include {Einbezogene Variante}
translate D Exclude {Ausgeschlossene Variante}
translate D MainLine {Hauptvariante}
translate D Bookmark {Lesezeichen}
translate D NewLine {Neue Variante}
translate D ToBeVerified {berprfen}
translate D ToTrain {Trainieren}
translate D Dubious {Zweifelhaft}
translate D ToRemove {Entfernen}
translate D NoMarker {Keine Markierung}
translate D ColorMarker {Farbe}
translate D WhiteMark {Wei}
translate D GreenMark {Grn}
translate D YellowMark {Gelb}
translate D BlueMark {Blau}
translate D RedMark {Rot}
translate D CommentMove {Zug kommentieren}
translate D CommentPosition {Position kommentieren}
translate D AddMoveToMaskFirst {Zug zuerst zur Maske hinzufngen}
translate D OpenAMaskFileFirst {Zunchst Maske ffnen}
translate D Positions {Positionen}
translate D Moves {Zge}

# Finder window:
menuText D FinderFile "Datei" 0
menuText D FinderFileSubdirs "Unterverzeichnisse beachten" 0
menuText D FinderFileClose "Dateifinder schlieen" 0
menuText D FinderSort "Sortieren" 0
menuText D FinderSortType "Typ" 0
menuText D FinderSortSize "Gre" 0
menuText D FinderSortMod "Modifiziert" 0
menuText D FinderSortName "Namen" 0
menuText D FinderSortPath "Pfad" 0
menuText D FinderTypes "Typen" 0
menuText D FinderTypesScid "Scid-Datenbanken" 0
menuText D FinderTypesOld "Datenbanken im alten Format" 0
menuText D FinderTypesPGN "PGN-Dateien" 0
menuText D FinderTypesEPD "EPD-Dateien" 0
menuText D FinderTypesRep "Repertoiredateien" 0
menuText D FinderHelp "Hilfe" 0
menuText D FinderHelpFinder "Dateifinderhilfe" 0
menuText D FinderHelpIndex "Index" 0
translate D FileFinder {Dateifinder}
translate D FinderDir {Verzeichnis}
translate D FinderDirs {Verzeichnisse}
translate D FinderFiles {Dateien}
translate D FinderUpDir {hoch}
translate D FinderCtxOpen {ffnen}
translate D FinderCtxBackup {Sicherungskopie}
translate D FinderCtxCopy {Kopieren}
translate D FinderCtxMove {Verschieben}
translate D FinderCtxDelete {Lschen}

# Player finder:
menuText D PListFile "Datei" 0
menuText D PListFileUpdate "Aktualisieren" 0
menuText D PListFileClose "Spielerfinder schlieen" 7
menuText D PListSort "Sortieren" 0
menuText D PListSortName "Name" 0
menuText D PListSortElo "Elo" 0
menuText D PListSortGames "Partien" 0
menuText D PListSortOldest "lteste" 0
menuText D PListSortNewest "Neueste" 0

# Tournament finder:
menuText D TmtFile "Datei" 0
menuText D TmtFileUpdate "Aktualisieren" 0
menuText D TmtFileClose "Turnierfinder schlieen" 0
menuText D TmtSort "Sortieren" 0
menuText D TmtSortDate "Datum" 0
menuText D TmtSortPlayers "Spieler" 0
menuText D TmtSortGames "Partien" 0
menuText D TmtSortElo "Elo" 0
menuText D TmtSortSite "Ort" 0
menuText D TmtSortEvent "Turnier" 1
menuText D TmtSortWinner "Gewinner" 0
translate D TmtLimit "Listengrenze"
translate D TmtMeanElo "Unterster Elo-Durchschnitt"
translate D TmtNone "Keine zutreffenden Turniere gefunden."

# Graph windows:
menuText D GraphFile "Datei" 0
menuText D GraphFileColor "Als Farb-Postscript speichern..." 4
menuText D GraphFileGrey "Als Graustufen-Postscript speichern..." 4
menuText D GraphFileClose "Fenster schlieen" 0
menuText D GraphOptions "Optionen" 0
menuText D GraphOptionsWhite "Wei" 0
menuText D GraphOptionsBlack "Schwarz" 0
menuText D GraphOptionsBoth "Beide" 0
menuText D GraphOptionsPInfo "Spielerinfo Spieler" 1
translate D GraphFilterTitle "Filtergrafik: Hufigkeit pro 1000 Partien"
translate D GraphAbsFilterTitle "Filtergrafik: Hufigkeit der Partien"
translate D ConfigureFilter "X-Achse fr Jahr, Elo und Zge konfigurieren"
translate D FilterEstimate "Schtzen"
translate D TitleFilterGraph "Scid: Filtergrafik"

# Analysis window:
translate D AddVariation {Variante hinzufgen}
translate D AddAllVariations {Alle Varianten hinzufgen}
translate D AddMove {Zug hinzufgen}
translate D Annotate {Autom. kommentieren}
translate D ShowAnalysisBoard {Analysebrett anzeigen}
translate D ShowInfo {Engine-Information anzeigen}
translate D FinishGame {Partie beenden}
translate D StopEngine {Engine anhalten}
translate D StartEngine {Engine starten}
translate D LockEngine {Anbinden an aktuelle Position}
translate D AnalysisCommand {Analysebefehl}
translate D PreviousChoices {Vorherige Wahl}
translate D AnnotateTime {Zeit zwischen den Zgen (in Sek.) einstellen}
translate D AnnotateWhich {Varianten hinzufgen}
translate D AnnotateAll {Fr Zge beider Seiten}
translate D AnnotateAllMoves {Alle Zge kommentieren}
translate D AnnotateWhite {Nur fr Zge von Wei}
translate D AnnotateBlack {Nur fr Zge von Schwarz}
translate D AnnotateBlundersOnly {Wenn der Partiezug ein offensichtlicher Fehler ist}
translate D AnnotateBlundersOnlyScoreChange {Analyse berichtet Fehler, Bewertungsnderung von/nach: }
translate D BlundersThreshold {Grenze}
translate D ScoreAllMoves {Alle Zge validieren}
translate D LowPriority {Niedrige CPU-Prioritt}
translate D ClickHereToSeeMoves {Hier klicken um Zge anzuzeigen}
translate D ConfigureInformant {Informator konfigurieren}
translate D Informant!? {Interessanter Zug}
translate D Informant? {Schwacher Zug}
translate D Informant?? {Fehler}
translate D Informant?! {Zweifelhafter Zug}
translate D Informant+= {Wei hat leichten Vorteil}
translate D Informant+/- {Wei hat migen Vorteil}
translate D Informant+- {Wei hat groen Vorteil}
translate D Informant++- {Partie wird gewonnen}
translate D Book {Buch}
translate D OtherBookMoves {Erffnungsbuch des Gegners}
translate D OtherBookMovesTooltip {Zge, fr die der Gegner eine Antwort kennt}

# Analysis Engine open dialog:
translate D EngineList {Analyse-Engines}
translate D EngineName {Name}
translate D EngineCmd {Befehl}
translate D EngineArgs {Parameter}
translate D EngineDir {Verzeichnis}
translate D EngineElo {Elo}
translate D EngineTime {Datum}
translate D EngineNew {Neu}
translate D EngineEdit {Bearbeiten}
translate D EngineRequired {Fettgedruckte Parameter obligatorisch, andere optional}


# Stats window menus:
menuText D StatsFile "Datei" 0
menuText D StatsFilePrint "Drucken in Datei..." 0
menuText D StatsFileClose "Fenster schlieen" 0
menuText D StatsOpt "Optionen" 0

# PGN window menus:
menuText D PgnFile "Datei" 0
menuText D PgnFileCopy "Kopiere Spiel in Zwischenablage" 0
menuText D PgnFilePrint "Drucken in Datei..." 0
menuText D PgnFileClose "PGN-Fenster schlieen" 0
menuText D PgnOpt "Ausgabe" 0
menuText D PgnOptColor "Farbige Darstellung" 0
menuText D PgnOptShort "Kurzer (3-Zeilen) Vorspann (Header)" 8
menuText D PgnOptSymbols "Symbolische Darstellung" 0
menuText D PgnOptIndentC "Kommentare einrcken" 0
menuText D PgnOptIndentV "Varianten einrcken" 0
menuText D PgnOptColumn "Tabellarisch (ein Zug pro Zeile)" 0
menuText D PgnOptSpace "Leerzeichen nach Zugnummer" 0
menuText D PgnOptStripMarks "Farbfelder-/Pfeile-Zeichen entfernen" 27
menuText D PgnOptBoldMainLine "Partiezge in Fettdruck" 0
menuText D PgnColor "Farben" 0
menuText D PgnColorHeader "Vorspann..." 0
menuText D PgnColorAnno "Anmerkungen..." 0
menuText D PgnColorComments "Kommentare..." 0
menuText D PgnColorVars "Varianten..." 0
menuText D PgnColorBackground "Hintergrund..." 0
menuText D PgnColorMain "Partieverlauf..." 0
menuText D PgnColorCurrent "Hintergrund aktueller Zug..." 1
menuText D PgnHelp "Hilfe" 0
menuText D PgnHelpPgn "PGN-Hilfe" 0
menuText D PgnHelpIndex "Index" 0
translate D PgnWindowTitle {Partienotation - Partie %u}

# Crosstable window menus:
menuText D CrosstabFile "Datei" 0
menuText D CrosstabFileText "Ausgabe in Textdatei..." 11
menuText D CrosstabFileHtml "Ausgabe in HTML-Datei..." 11
menuText D CrosstabFileLaTeX "Ausgabe in LaTeX-Datei..." 11
menuText D CrosstabFileClose "Kreuztabelle schlieen" 0
menuText D CrosstabEdit "Bearbeiten" 0
menuText D CrosstabEditEvent "Ereignis" 0
menuText D CrosstabEditSite "Ort" 0
menuText D CrosstabEditDate "Datum" 0
menuText D CrosstabOpt "Ausgabe" 0
menuText D CrosstabOptAll "Jeder gegen jeden" 0
menuText D CrosstabOptSwiss "Schweizer System" 0
menuText D CrosstabOptKnockout "K.o.-System" 0
menuText D CrosstabOptAuto "Automatisch" 1
menuText D CrosstabOptAges "Alter in Jahren" 0
menuText D CrosstabOptNats "Nationalitt" 0
menuText D CrosstabOptRatings "Elo" 0
menuText D CrosstabOptTitles "Titel" 0
menuText D CrosstabOptBreaks "Stichkampfpunkte" 10
menuText D CrosstabOptDeleted "Inklusive gelschte Partien" 10
menuText D CrosstabOptColors "Farben (nur Schweizer System)" 0
menuText D CrosstabOptColumnNumbers "Numerierte Spalten (Nur jeder-gegen-jeden-Tabelle)" 2
menuText D CrosstabOptGroup "Punktgruppen" 5
menuText D CrosstabSort "Sortieren" 0
menuText D CrosstabSortName "Name" 0
menuText D CrosstabSortRating "Elo" 0
menuText D CrosstabSortScore "Punkte" 0
menuText D CrosstabColor "Farben" 0
menuText D CrosstabColorPlain "Text" 0
menuText D CrosstabColorHyper "Hypertext" 0
menuText D CrosstabHelp "Hilfe" 0
menuText D CrosstabHelpCross "Kreuztabelle-Hilfe" 0
menuText D CrosstabHelpIndex "Index" 0
translate D SetFilter {Filter setzen}
translate D AddToFilter {Zum Filter hinzufgen}
translate D Swiss {Schweizer}
translate D Category {Kategorie}

# Opening report window menus:
menuText D OprepFile "Datei" 0
menuText D OprepFileText "Ausgabe in Textdatei..." 11
menuText D OprepFileHtml "Ausgabe in HTML-Datei..." 11
menuText D OprepFileLaTeX "Ausgabe in LaTeX-Datei..." 11
menuText D OprepFileOptions "Optionen..." 0
menuText D OprepFileClose "Berichtsfenster schlieen" 0
menuText D OprepFavorites "Favoriten" 0
menuText D OprepFavoritesAdd "Bericht hinzufgen..." 8
menuText D OprepFavoritesEdit "Favoritenbericht editieren..." 0
menuText D OprepFavoritesGenerate "Berichte erzeugen..." 9

menuText D OprepHelp "Hilfe" 0
menuText D OprepHelpReport "Erffnungsbericht-Hilfe" 0
menuText D OprepHelpIndex "Index" 0

# Repertoire editor:
menuText D RepFile "Datei" 0
menuText D RepFileNew "Neu" 0
menuText D RepFileOpen "ffnen..." 0
menuText D RepFileSave "Speichern..." 0
menuText D RepFileSaveAs "Speichern unter..." 10
menuText D RepFileClose "Schlieen" 1
menuText D RepEdit "Bearbeiten" 0
menuText D RepEditGroup "Gruppe hinzufgen" 0
menuText D RepEditInclude "Variante einschlieen" 9
menuText D RepEditExclude "Variante ausschlieen" 9
menuText D RepView "Ansicht" 0
menuText D RepViewExpand "Alle Gruppen aufklappen" 13
menuText D RepViewCollapse "Alle Gruppen zuklappen" 13
menuText D RepSearch "Suchen" 0
menuText D RepSearchAll "Im gesamten Repertoire..." 0
menuText D RepSearchDisplayed "Nur in der aktuellen Variante..." 0
menuText D RepHelp "Hilfe" 0
menuText D RepHelpRep "Repertoire Hilfe" 0
menuText D RepHelpIndex "Index" 0
translate D RepSearch "Repertoire Suche"
translate D RepIncludedLines "Eingeschlossene Varianten"
translate D RepExcludedLines "Ausgeschlossene Varianten"
translate D RepCloseDialog {Dieses Repertoire hat ungesicherte nderungen.

Wollen Sie wirklich fortfahren und die nderungen verwerfen?
}

# Header search:
translate D HeaderSearch {Partiedatensuche}
translate D EndSideToMove {Wer ist beim Partieende am Zug?}
translate D GamesWithNoECO {Partien ohne ECO?}
translate D GameLength {Partielnge}
translate D FindGamesWith {Finde Partien mit den Markierungen (Flags)}
translate D StdStart {Standardausgangsposition}
translate D Promotions {Umwandlung}
translate D Comments {Kommentare}
translate D Variations {Varianten}
translate D Annotations {Anmerkungen}
translate D DeleteFlag {Lschkennzeichen}
translate D WhiteOpFlag {Erffnung Wei}
translate D BlackOpFlag {Erffnung Schwarz}
translate D MiddlegameFlag {Mittelspiel}
translate D EndgameFlag {Endspiel}
translate D NoveltyFlag {Neuerung}
translate D PawnFlag {Bauernstruktur}
translate D TacticsFlag {Taktik}
translate D QsideFlag {Damenflgel}
translate D KsideFlag {Knigsflgel}
translate D BrilliancyFlag {Glnzend}
translate D BlunderFlag {Grober Fehler}
translate D UserFlag {Benutzer}
translate D PgnContains {PGN enthlt Text}
translate D Annotator {Kommentator}
translate D Cmnts {Kommentare}

# Game list window:
translate D GlistNumber {Nummer}
translate D GlistWhite {Wei}
translate D GlistBlack {Schwarz}
translate D GlistWElo {W-Elo}
translate D GlistBElo {S-Elo}
translate D GlistEvent {Turnier}
translate D GlistSite {Ort}
translate D GlistRound {Runde}
translate D GlistDate {Datum}
translate D GlistYear {Jahr}
translate D GlistEDate {Turnierdatum}
translate D GlistResult {Ergebnis}
translate D GlistLength {Lnge}
translate D GlistCountry {Land}
translate D GlistECO {ECO}
translate D GlistOpening {Erffnung}
translate D GlistEndMaterial {Endmaterial}
translate D GlistDeleted {Gelscht}
translate D GlistFlags {Markierungen}
translate D GlistVars {Varianten}
translate D GlistComments {Kommentare}
translate D GlistAnnos {Anmerkungen}
translate D GlistStart {Stellung}
translate D GlistGameNumber {Partie Nummer:}
translate D GlistAverageElo {ELO Durchschnitt}
translate D GlistRating {Wertungszahl}
translate D GlistFindText {Text finden}
translate D GlistMoveField {Verschieben}
translate D GlistEditField {Konfigurieren}
translate D GlistAddField {Hinzufgen}
translate D GlistDeleteField {Lschen}
translate D GlistWidth {Breite}
translate D GlistAlign {Ausrichtung}
translate D GlistAlignL {Ausrichtung: links}
translate D GlistAlignR {Ausrichtung: rechts}
translate D GlistAlignC {Ausrichtung: zentriert}
translate D GlistColor {Farbe}
translate D GlistSep {Trennlinie}
translate D GlistCurrentSep {-- Aktuell --}
translate D GlistNewSort {Neu}
translate D GlistAddToSort {Hinzufgen}

# base sorting
translate D GsortSort {Sortieren...}
translate D GsortDate {Datum}
translate D GsortYear {Jahr}
translate D GsortEvent {Event}
translate D GsortSite {Ort}
translate D GsortRound {Runde}
translate D GsortWhiteName {Name Wei}
translate D GsortBlackName {Name Schwarz}
translate D GsortECO {ECO}
translate D GsortResult {Ergebnis}
translate D GsortMoveCount {Zahl der Zge}
translate D GsortAverageElo {Eloschnitt}
translate D GsortCountry {Land}
translate D GsortDeleted {Gelscht}
translate D GsortEventDate {Event Datum}
translate D GsortWhiteElo {ELO Wei}
translate D GsortBlackElo {ELO Schwarz}
translate D GsortComments {Kommentare}
translate D GsortVariations {Varianten}
translate D GsortNAGs {NAGs}
translate D GsortAscending {Aufsteigend}
translate D GsortDescending {Fallend}
translate D GsortAdd {Hinzufgen}
translate D GsortStore {Speichern}
translate D GsortLoad {Laden}

# menu shown with right mouse button down on game list.
translate D GlistRemoveThisGameFromFilter  {Partie aus Filter entfernen}
translate D GlistRemoveGameAndAboveFromFilter  {Partie (und alle oberhalb) aus Filter entfernen}
translate D GlistRemoveGameAndBelowFromFilter  {Partie (und alle darunter) aus Filter entfernen}
translate D GlistDeleteGame {(Ent)Loesche Partie}
translate D GlistDeleteAllGames {Lsche alle Partien im Filter} 
translate D GlistUndeleteAllGames {Entlsche alle Partien im Filter} 
translate D GlistMergeGameInBase {Mit Partie in anderer Datebank zusammenfhren} 

# Maintenance window:
translate D DatabaseName {Datenbankname:}
translate D TypeIcon {Symbol:}
translate D NumOfGames {Partien:}
translate D NumDeletedGames {Gelschte Partien:}
translate D NumFilterGames {Partien im Filter:}
translate D YearRange {Jahr-Spanne:}
translate D RatingRange {Elo-Spanne:}
translate D Description {Beschreibung}
translate D Flag {Markierung}
translate D CustomFlags {Benutzerdefinierte Markierungen}
translate D DeleteCurrent {Lsche aktuelle Partie}
translate D DeleteFilter {Lsche Partien im Filter}
translate D DeleteAll {Lsche alle Partien}
translate D UndeleteCurrent {Aktuelle Partie wiederherstellen}
translate D UndeleteFilter {Partien im Filter wiederherstellen}
translate D UndeleteAll {Alle Partien wiederherstellen}
translate D DeleteTwins {Lsche Dubletten}
translate D MarkCurrent {Markiere aktuelle Partie}
translate D MarkFilter {Markiere Partien im Filter}
translate D MarkAll {Markiere alle Partien}
translate D UnmarkCurrent {Entmarkiere aktuelle Partie}
translate D UnmarkFilter {Entmarkiere Partien im Filter}
translate D UnmarkAll {Entmarkiere alle Partien}
translate D Spellchecking {Schreibkorrektur}
translate D Players {Spieler}
translate D Events {Ereignis}
translate D Sites {Ort}
translate D Rounds {Runde}
translate D DatabaseOps {Datenbankoperationen}
translate D ReclassifyGames {Partien ECO-klassifizieren}
translate D CompactDatabase {Datenbank komprimieren}
translate D SortDatabase {Datenbank sortieren}
translate D AddEloRatings {ELO-Zahlen hinzufgen}
translate D AutoloadGame {Automatisch Partie Nr. laden}
translate D StripTags {PGN-Markierungen entfernen}
translate D StripTag {Markierung entfernen}
translate D Cleaner {Bereiniger}
translate D CleanerHelp {
Der Scid-Bereiniger wird fr die aktuelle Datenbank alle
Wartungsarbeiten ausfhren, welche aus der unten stehenden
Liste ausgewhlt werden.

Aktuelle Einstellungen in den Mens "ECO-Klassifikation" und "Dubletten lschen"
werden angewendet, falls diese Funktionen ausgewhlt sind.}
translate D CleanerConfirm {
Ist der Bereiniger einmal gestartet, kann er nicht mehr unterbrochen werden!

Dies kann lange dauern, speziell bei groen Datenbanken, abhngig von den
ausgewhlten Funktionen und deren Einstellungen.

Sind Sie sicher, da Sie die ausgewhlten Wartungsarbeiten starten mchten?
}
# Twinchecker
translate D TwinCheckUndelete { umdrehen; "u" beide entlschen)}
translate D TwinCheckprevPair {Vorheriges Paar}
translate D TwinChecknextPair {Nchstes Paar}
translate D TwinChecker {Scid: Dublettenprfer}
translate D TwinCheckTournament {Partien im Turnier:}
translate D TwinCheckNoTwin {Keine Dublette}
translate D TwinCheckNoTwinfound {Kein Dublette fr diese Partie gefunden.

Um Dubletten anzuzeigen, bitte zuerst die Funktion "Lsche Dubletten" benutzen.}
translate D TwinCheckTag {Nutze Tag...}
translate D TwinCheckFound1 {Scid hat $result Dubletten gefunden}
translate D TwinCheckFound2 { und das Gelscht-Flag gesetzt}
translate D TwinCheckNoDelete {In dieser Datenbank sind keine Partien zu lschen.}
translate D TwinCriteria1 {Ihre Auswahlkriterien der Dublettensuche haben eine hohe Wahrscheinlichkeit auch Partien mit hnlichen Zgen als Dubletten zu erkennen.
}
translate D TwinCriteria2 {Es wird empfohlen, dass bei der Auswahl "Nein" fr "gleiche Zge" die Auswahl "Ja" fr Farbe, Ereignis, Ort, Runde, Jahr und Monat ausgewhlt wird.

Wollen Sie fortsetzen und mit dieser Auswahl die Dubletten lschen? }
translate D TwinCriteria3 {Es wird empfohlen, dass bei der Auswahl "Ja" fr mindestens 2 der Parameter "gleicher Ort", "gleiche Runde" und "gleiches Jahr" gesetzt werden.
    
Wollen Sie fortsetzen und mit dieser Auswahl die Dubletten lschen?}
translate D TwinCriteriaConfirm {Scid: Besttigen der Dublettensuchparameter}
translate D TwinChangeTag "ndern der folgenden Partie-Tags:\n\n"
translate D AllocRatingDescription "Mit dieser Funktion werden die ELO-Werte aus der Schreibkorrekturdatei den Partien hinzugefgt. Der Wert wird hinzugefgt, wenn ein/e Spieler/in keinen aktuellen Wert in der Partie besitzt, aber in der Korrekturdatei ein Wert fr den Zeitraum der Partie vorhanden ist."
translate D RatingOverride "Existierende ELO-Werte berschreiben?"
translate D AddRatings "Elo-Werte hinzufgen:"
translate D AddedRatings {Scid hat $r Elo-Werte in $g Partien hinzugefgt.}

#Bookmark editor
translate D NewSubmenu "Neues Untermen"

# Comment editor:
translate D AnnotationSymbols  {Kommentarzeichen:}
translate D Comment {Kommentar:}
translate D InsertMark {Markierung einfgen}
translate D InsertMarkHelp {
Markierung einfgen/lschen: Farbe, Typ, Feld whlen.
Pfeil einfgen/lschen: Rechtsklick auf zwei Felder.
}

# Nag buttons in comment editor:
translate D GoodMove {Guter Zug}
translate D PoorMove {Schwacher Zug}
translate D ExcellentMove {Ausgezeichneter Zug}
translate D Blunder {Grober Fehler}
translate D InterestingMove {Interessanter Zug}
translate D DubiousMove {Zweifelhafter Zug}
translate D WhiteDecisiveAdvantage {Wei hat Vorteil}
translate D BlackDecisiveAdvantage {Schwarz hat Vorteil}
translate D WhiteClearAdvantage {Wei hat klaren Vorteil}
translate D BlackClearAdvantage {Schwarz hat klaren Vorteil}
translate D WhiteSlightAdvantage {Wei hat leichten Vorteil}
translate D BlackSlightAdvantage {Schwarz hat leichten Vorteil}
translate D Equality {Gleiche Chancen}
translate D Unclear {Unklar}
translate D Diagram {Diagramm}

# Board search:
translate D BoardSearch {Brettsuchen}
translate D FilterOperation {Durchfhrung am aktuellen Filter:}
translate D FilterAnd {UND (Beschrnke Filter)}
translate D FilterOr {ODER (Zum Filter hinzufgen)}
translate D FilterIgnore {IGNORIERE (Filter zurcksetzen)}
translate D SearchType {Suche nach Typ:}
translate D SearchBoardExact {Exakte Position (alle Steine auf gleichen Feldern)}
translate D SearchBoardPawns {Bauern (gleiche Figuren, alle Bauern auf gleichen Feldern)}
translate D SearchBoardFiles {Linien (gleiches Material, alle Bauern auf gleichen Linien)}
translate D SearchBoardAny {Material (gleiches Material, Bauern und Figuren beliebig)}
translate D SearchInRefDatabase { In folgender Datenbank suchen }
translate D LookInVars {Schaue in Varianten}

# Material search:
translate D MaterialSearch {Materialsuchen}
translate D Material {Material}
translate D Patterns {Muster}
translate D Zero {Null}
translate D Any {Irgendeine}
translate D CurrentBoard {Aktuelle Stellung}
translate D CommonEndings {Endspiele}
translate D CommonPatterns {Gleiche Muster}
translate D MaterialDiff {Materialdifferenz}
translate D squares {Felder}
translate D SameColor {Gleichfarbige}
translate D OppColor {Ungleichfarbige}
translate D Either {Beides}
translate D MoveNumberRange {Zugnummernbereich}
translate D MatchForAtLeast {Zutreffend fr mindestens}
translate D HalfMoves {Halbzge}

# Common endings in material search:
translate D EndingPawns {Bauernendspiele}
translate D EndingRookVsPawns {Turm gegen Bauer(n)}
translate D EndingRookPawnVsRook {Turm und 1 Bauer gegen Turm}
translate D EndingRookPawnsVsRook {Turm und Bauer(n) gegen Turm}
translate D EndingRooks {Turm gegen Turm}
translate D EndingRooksPassedA {Turm gegen Turm mit Freibauer}
translate D EndingRooksDouble {Doppelturm-Endspiele}
translate D EndingBishops {Lufer gegen Lufer}
translate D EndingBishopVsKnight {Lufer gegen Springer}
translate D EndingKnights {Springer gegen Springer}
translate D EndingQueens {Dame gegen Dame} ;# *** Damenendspiele !?
translate D EndingQueenPawnVsQueen {Dame und 1 Bauer gegen Dame}
translate D BishopPairVsKnightPair {Zwei Lufer gegen zwei Springer im Mittelspiel}

# Common patterns in material search:
translate D PatternWhiteIQP {Weier isolierter Damenbauer}
translate D PatternWhiteIQPBreakE6 {Weier Isolani: Durchbruch d4-d5 gegen e6}
translate D PatternWhiteIQPBreakC6 {Weier Isolani: Durchbruch d4-d5 gegen c6}
translate D PatternBlackIQP {Schwarzer isolierter Damenbauer}
translate D PatternWhiteBlackIQP {Weier gegen schwarzer Damenbauerisolani}
translate D PatternCoupleC3D4 {Isoliertes Bauernpaar c3+d4}
translate D PatternHangingC5D5 {Hngende Bauern c5 und d5 von Schwarz}
translate D PatternMaroczy {Maroczy-Zentrum (mit Bauern auf c4 und e4)}
translate D PatternRookSacC3 {Turmopfer auf c3}
translate D PatternKc1Kg8 {0-0-0 gegen 0-0 (Kc1 gegen Kg8)}
translate D PatternKg1Kc8 {0-0 gegen 0-0-0 (Kg1 gegen Kc8)}
translate D PatternLightFian {Weifeldrige Fianchettos (Lufer g2 gegen Lufer b7)}
translate D PatternDarkFian {Schwarzfeldrige Fianchettos (Lufer b2 gegen Lufer g7)}
translate D PatternFourFian {Beiderseitiges Doppelfianchetto (Lufer auf b2,g2,b7,g7)}

# Game saving:
translate D Today {Heute}
translate D ClassifyGame {Partie klassifizieren}

# Setup position:
translate D EmptyBoard {Brett leeren}
translate D InitialBoard {Initialisiere Brett}
translate D SideToMove {Zugrecht}
translate D MoveNumber {Zugnummer}
translate D Castling {Rochade}
translate D EnPassantFile {EnPassant-Linie}
translate D ClearFen {FEN lschen}
translate D PasteFen {FEN einfgen}
translate D SaveAndContinue {Speichern und Weiter}
translate D DiscardChangesAndContinue {Verwerfen und weiter}
translate D GoBack {Zurck}

# Replace move dialog:
translate D ReplaceMove {Zug ersetzen}
translate D AddNewVar {Neue Variante}
translate D NewMainLine {Neue Hauptvariante}
translate D ReplaceMoveMessage {Hier existiert bereits ein Zug.

Sie knnen diesen Zug ersetzen - unter Verlust aller nachfolgender Zge - oder mit dem Zug eine neue Variante hinzufgen.

(Sie knnen diese Anzeige vermeiden, indem Sie die Option "Fragen vor Ersetzen" im Men Optionen:Zge deaktivieren)}

# Make database read-only dialog:
translate D ReadOnlyDialog {Wenn Sie diese Datenbank mit Schreibschutz
versehen, sind keine nderungen mglich. Es knnen keine Partien gespeichert
oder ersetzt und keine Lschkennzeichen gendert werden. Alle Sortierungen oder
ECO-Klassifikationsergebnisse sind nur temporr.

Sie knnen den Schreibschutz einfach entfernen, indem Sie die Datenbank
schlieen und wieder ffnen.
Wollen Sie diese Datenbank wirklich schreibschtzen?}

# Clear game dialog:
translate D ClearGameDialog {Diese Partie wurde gendert.

Wollen Sie wirklich fortsetzen und die nderungen verwerfen?
}

# Exit dialog:
translate D ExitDialog {Mchten Sie Scid beenden?}
translate D ExitUnsaved {Die folgenden Datenbanken haben ungesicherte Partienderungen. Wenn Sie jetzt beenden, gehen diese nderungen verloren.}

# Import window:
translate D PasteCurrentGame {Aktuelle Partie einfgen}
translate D ImportHelp1 {Eingeben oder Einfgen einer Partie im PGN-Format in den oberen Rahmen.}
translate D ImportHelp2 {Hier werden Fehler beim Importieren angezeigt.}
translate D OverwriteExistingMoves {Bestehende Zge berschreiben?}

# ECO Browser:
translate D ECOAllSections {alle ECO-Gruppen}
translate D ECOSection {ECO-Gruppe}
translate D ECOSummary {Zusammenfassung fr}
translate D ECOFrequency {Hufigkeit der Untercodes fr}

# Opening Report:
translate D OprepTitle {Erffnungsbericht}
translate D OprepReport {Bericht}
translate D OprepGenerated {Erzeugt durch}
translate D OprepStatsHist {Statistiken und Geschichte}
translate D OprepStats {Statistiken}
translate D OprepStatAll {Alle Berichtspartien}
translate D OprepStatBoth {Beide Spieler}
translate D OprepStatSince {Nach}
translate D OprepOldest {lteste Partien}
translate D OprepNewest {Neueste Partien}
translate D OprepPopular {Popularitt}
translate D OprepFreqAll {Hufigkeit in allen Jahren: }
translate D OprepFreq1   {im letzten Jahr:            }
translate D OprepFreq5   {der letzten  5 Jahre:       }
translate D OprepFreq10  {der letzten 10 Jahre:       }
translate D OprepEvery {Eine pro %u Partien}
translate D OprepUp {mehr als %u%s von allen Jahren}
translate D OprepDown {weniger als %u%s von allen Jahren}
translate D OprepSame {keine nderung in allen Jahren}
translate D OprepMostFrequent {Hufigste Spieler}
translate D OprepMostFrequentOpponents {Hufigste Gegner}
translate D OprepRatingsPerf {ELO und Performance}
translate D OprepAvgPerf {Durchschnitts-ELO und Performance}
translate D OprepWRating {ELO Wei}
translate D OprepBRating {ELO Schwarz}
translate D OprepWPerf {Performance Wei}
translate D OprepBPerf {Performance Schwarz}
translate D OprepHighRating {Spiele mit dem hchsten ELO-Durchschnitt}
translate D OprepTrends {Ergebnistrend}
translate D OprepResults {Ergebnis nach Lngen und Hufigkeiten}
translate D OprepLength {Partielnge}
translate D OprepFrequency {Hufigkeit}
translate D OprepWWins {Weisiege:    }
translate D OprepBWins {Schwarzsiege: }
translate D OprepDraws {Remis:        }
translate D OprepWholeDB {ganze Datenbank}
translate D OprepShortest {Krzester Sieg}
translate D OprepMovesThemes {Zge und Themen}
translate D OprepMoveOrders {Zugfolgen zum Erreichen der Berichtsposition}
translate D OprepMoveOrdersOne \
  {Es gab nur eine Zugfolge zur erreichten Position:}
translate D OprepMoveOrdersAll \
  {Es gab %u Zugfolgen zur erreichten Position:}
translate D OprepMoveOrdersMany \
  {Es gab  %u Zugfolgen zur erreichten Position. Die ersten %u sind:}
translate D OprepMovesFrom {Zge ab der Berichtsposition}
translate D OprepMostFrequentEcoCodes {Hufigste ECO-Codes}
translate D OprepThemes {Themen}
translate D OprepThemeDescription {Hufigkeit der Themen in den ersten %u Zgen jeder Partie}
translate D OprepThemeSameCastling {Gleichseitige Rochaden}
translate D OprepThemeOppCastling {Verschiedenseitige Rochaden}
translate D OprepThemeNoCastling {Beide Seiten unrochiert}
translate D OprepThemeKPawnStorm {Bauernsturm auf Knig}
translate D OprepThemeQueenswap {Damen getauscht}
translate D OprepThemeWIQP {Weier isolierter Damenbauer}
translate D OprepThemeBIQP {Schwarzer isolierter Damenbauer}
translate D OprepThemeWP567 {Weier Bauer auf Reihe 5/6/7}
translate D OprepThemeBP234 {Schwarzer Bauer auf Reihe 2/3/4}
translate D OprepThemeOpenCDE {Offene c/d/e-Linie}
translate D OprepTheme1BishopPair {Eine Seite hat Luferpaar}
translate D OprepEndgames {Endspiele}
translate D OprepReportGames {Berichtspartien}
translate D OprepAllGames {Alle Partien}
translate D OprepEndClass {Materialklassifikation von Endspielstellungen}
translate D OprepTheoryTable {Theorietabelle}
translate D OprepTableComment {Erzeugt aus %u Partien mit hchster ELO-Zahl.}
translate D OprepExtraMoves {Zustzliche Zge in Anmerkungen zur Theorietabelle}
translate D OprepMaxGames {Maximum an Partien in Theorietabelle}
translate D OprepViewHTML {Zeige HTML}
translate D OprepViewLaTeX {Zeige LaTeX}

# Player Report:
translate D PReportTitle {Spielerbericht}
translate D PReportColorWhite {mit den weien Steinen}
translate D PReportColorBlack {mit den schwarzen Steinen}
translate D PReportMoves {nach %s}
translate D PReportOpenings {Erffnungen}
translate D PReportClipbase {Leere Zwischenablage und kopiere gefundene Spiele}

# Piece Tracker window:
translate D TrackerSelectSingle {Linke Maustaste whlt diese Figur.}
translate D TrackerSelectPair \
  {Linke Maustaste whlt diese Figur; rechte Maustaste whlt das Figurenpaar.}
translate D TrackerSelectPawn \
  {Linke Maustaste whlt diesen Bauern; rechte Maustaste whlt alle 8 Bauern.}
translate D TrackerStat {Statistik}
translate D TrackerGames {% der Partien mit Zug auf das Feld}
translate D TrackerTime {% der Zeit auf jedem Feld}
translate D TrackerMoves {Zge}
translate D TrackerMovesStart \
  {Zugnummer, ab der die Verteilungsberechnung beginnen soll.}
translate D TrackerMovesStop \
  {Zugnummer, wo die Verteilungsberechnung enden soll.}

# Game selection dialogs:
translate D SelectAllGames {Alle Spiele in der Datenbank}
translate D SelectFilterGames {Nur Spiele im Filter}
translate D SelectTournamentGames {Nur Spiele des aktuellen Turniers}
translate D SelectOlderGames {Nur ltere Spiele}

# Delete Twins window:
translate D TwinsNote {Damit zwei Spiele Dubletten sind, mssen diese mindestens die beiden selben Spieler haben und die folgenden Kriterien, die Sie auswhlen knnen, erfllen. Wenn zwei Dubletten gefunden werden, so wird die krzere der beiden Spiele gelscht. Tip: am besten fhrt man erst eine Schreibkorrektur durch, da dadurch das Finden von Dubletten verbessert wird.}
translate D TwinsCriteria {Kriterium: Dubletten mssen haben ...}
translate D TwinsWhich {berprfe, welche Spiele}
translate D TwinsColors {die gleichen Spielerfarben?}
translate D TwinsEvent {das gleich Ereignis?}
translate D TwinsSite {den gleichen Ort?}
translate D TwinsRound {die gleiche Runde?}
translate D TwinsYear {das gleiche Jahr?}
translate D TwinsMonth {den gleichen Monat?}
translate D TwinsDay {den gleichen Tag?}
translate D TwinsResult {das gleiche Ergebnis?}
translate D TwinsECO {den gleichen ECO-Code?}
translate D TwinsMoves {die gleichen Zge?}
translate D TwinsPlayers {Vergleich Spielernamen}
translate D TwinsPlayersExact {Exakte Treffer}
translate D TwinsPlayersPrefix {Nur erste 4 Buchstaben}
translate D TwinsWhen {Beim Lschen der Dubletten}
translate D TwinsSkipShort {Partien unter 5 Zgen ignorieren?}
translate D TwinsUndelete {Zuerst alle Partien entlschen?}
translate D TwinsSetFilter {Filter auf Dubletten setzen?}
translate D TwinsComments {Spiele mit Kommentar immer behalten?}
translate D TwinsVars {Spiele mit Varianten immer behalten?}
translate D TwinsDeleteWhich {Welche Partie lschen:}
translate D TwinsDeleteShorter {Krzere Partie}
translate D TwinsDeleteOlder {Kleinere Partienummer}
translate D TwinsDeleteNewer {Grere Partienummer}
translate D TwinsDelete {Lsche Spiele}

# Name editor window:
translate D NameEditType {Namen ndern von}
translate D NameEditSelect {Welche Spiele sollen gendert werden?}
translate D NameEditReplace {Ersetze}
translate D NameEditWith {durch}
translate D NameEditMatches {Entsprechungen: Drcke Strg+1 bis Strg+9 zum Auswhlen}
translate D CheckGames {Konsistenzprfung}
translate D CheckGamesWhich {Konsistenzprfung}
translate D CheckAll {Alle Partien}
translate D CheckSelectFilterGames {Partien im Filter}

# Classify window:
translate D Classify {Klassifiziere}
translate D ClassifyWhich {ECO-klassifizieren}
translate D ClassifyAll {Alle Spiele (berschreibe alte ECO-Codes)}
translate D ClassifyYear {Alle Spiele  aus dem letzten Jahr}
translate D ClassifyMonth {Alle Spiele aus dem letzten Monat}
translate D ClassifyNew {Nur Spiele ohne ECO-Code}
translate D ClassifyCodes {Verwende}
translate D ClassifyBasic {Normale ECO-Codes ("B12", ...)}
translate D ClassifyExtended {ECO-Codes mit Scid-Erweiterung ("B12j", ...)}

# Compaction:
translate D NameFile {Namendatenbank}
translate D GameFile {Partiendatenbank}
translate D Names {Namen}
translate D Unused {Unbenutzt}
translate D SizeKb {Gre (kB)}
translate D CurrentState {Momentaner Stand}
translate D AfterCompaction {nach Kompression}
translate D CompactNames {Komprimiere Namen}
translate D CompactGames {Komprimiere Partien}
translate D NoUnusedNames "Es gibt keine unbenutzen Namen, die Namensdatei ist vollstndig komprimiert."
translate D NoUnusedGames "Die Partiedatei ist vollstndig komprimiert."
translate D NameFileCompacted {Die Namesdatei der Datenbank "[file tail [sc_base filename]]" wurde komprimiert.}
translate D GameFileCompacted {Die Partiedatei der Datenbank "[file tail [sc_base filename]]" wurde komprimiert.}

# Sorting:
translate D SortCriteria {Kriterium}
translate D AddCriteria {Fge Sortierkriterium hinzu}
translate D CommonSorts {bliche Sortierkriterien}
translate D Sort {Sortiere}

# Exporting:
translate D AddToExistingFile {Anhngen an eine bestehende Datei?}
translate D ExportComments {Kommentare exportieren?}
translate D ExportVariations {Varianten exportieren?}
translate D IndentComments {Kommentare einrcken?}
translate D IndentVariations {Varianten einrcken?}
translate D ExportColumnStyle {Tabellarisch (ein Zug pro Zeile)?}
translate D ExportSymbolStyle {Symbolische Notation:}
translate D ExportStripMarks \
  {Felder-/Pfeilemarkierzeichen aus den Kommentaren entfernen?}

# Goto game/move dialogs:
translate D LoadGameNumber {Geben Sie die zu ladende Spielnr. ein:}
translate D GotoMoveNumber {Gehe zu Zugnr.:}

# Copy games dialog:
translate D CopyGames {Kopiere Spiele}
translate D CopyConfirm {
 Mchten sie wirklich die [::utils::thousands $nGamesToCopy]
 Spiele aus dem Filter
 in der Datenbank "$fromName"
 in die Datenbank "$targetName"
 kopieren?
}
translate D CopyErr {Kann Spiele nicht kopieren}
translate D CopyErrSource {Die Quelldatenbank}
translate D CopyErrTarget {Die Zieldatenbank}
translate D CopyErrNoGames {hat keine Spiele im Filter}
translate D CopyErrReadOnly {ist schreibgeschtzt}
translate D CopyErrNotOpen {ist nicht geffnet}

# Colors:
translate D LightSquares {Helle Felder}
translate D DarkSquares {Dunkle Felder}
translate D SelectedSquares {Ausgewhlte Felder}
translate D SuggestedSquares {Zugvorschlagsfelder}
translate D WhitePieces {Weie Steine}
translate D BlackPieces {Schwarze Steine}
translate D WhiteBorder {Weie Umrandung}
translate D BlackBorder {Schwarze Umrandung}

# Novelty window:
translate D FindNovelty {Finde Neuerung}
translate D Novelty {Neuerung}
translate D NoveltyInterrupt {Neuerungensuche abgebrochen}
translate D NoveltyNone {In dieser Partie wurde keine Neuerung gefunden}
translate D NoveltyHelp {
Scid wird den ersten Zug aus der aktuellen Partie finden, welcher zu einer Position fhrt, die nicht in der gewhlten Datenbank oder in dem ECO-Erffnungsbuch enthalten ist.
}

# Sounds configuration:
translate D SoundsFolder {Sounddateien-Verzeichnis}
translate D SoundsFolderHelp {Das Verzeichnis sollte enthalten: King.wav, a.wav, 1.wav etc.}
translate D SoundsAnnounceOptions {Optionen fr Zugankndigung}
	# *** Ist das so gemeint? Ich kann's nicht ausprobieren (keine Soundkarte...).
translate D SoundsAnnounceNew {Kndige neue Zge an, wenn sie ausgefhrt werden}
translate D SoundsAnnounceForward {Knde Zug an beim Vorwrtspielen}
translate D SoundsAnnounceBack {Kndige Zug an beim Zurckgehen}

# Upgrading databases:
translate D Upgrading {Upgrading}
translate D ConfirmOpenNew {
Dies ist eine Datenbank im alten (Scid 3.x) Format, die nicht in Scid 4.x
geffnet werden kann. Aber eine Version im neuen Format wurde schon erstellt.

Wollen Sie die Version der Datenbank im neuen Format ffnen?
}
translate D ConfirmUpgrade {
Dies ist eine Datenbank im alten (Scid 3.x) Format. Vor der Verwendung in
Scid 4 mu eine Version im neuen Format der Datenbank erstellt werden.

Beim Erstellen der neuen Version der Datenbank bleiben die Dateien der alten Version erhalten.

Dieser Vorgang kann eine Zeitlang dauern, mu aber nur einmal durchgefhrt
werden. Sie knnen jederzeit abbrechen, wenn es Ihnen zu lange dauert.

Soll das Erstellen der Datenbank im neuen Format jetzt durchgefhrt werden?
}

# Recent files options:
translate D RecentFilesMenu {Anzahl der aktuellen Dateien im Dateimen}
translate D RecentFilesExtra {Anzahl der aktuellen Dateien im zustzlichen Untermen}

# My Player Names options:
translate D MyPlayerNamesDescription {
Geben Sie unten eine Liste der bevorzugten Spielernamen ein, ein Name pro Zeile. Platzhalterzeichen (z.B. "?" fr ein beliebiges einzelnes Zeichen, "*" fr jede beliebige Folge von Zeichen) sind erlaubt.

Jedesmal, wenn ein Spiel mit einem aufgelisteten Spielernamen geladen wird, wird das Schachbrett im Hauptfenster erforderlichenfalls gedreht, um das Spiel aus der Sicht des betreffenden Spielers zu zeigen.
}
translate D showblunderexists {Enginefehler anzeigen}
translate D showblundervalue {Fehlerwert anzeigen}
translate D showscore {Wert anzeigen}
translate D coachgame {Coach Partie}
translate D configurecoachgame {Trainingspartie konfigurieren}
translate D configuregame {Spiel konfigurieren}
translate D Phalanxengine {Phalanx engine}
translate D Coachengine {Coach Engine}
translate D difficulty {Schwierigkeit}
translate D hard {schwer}
translate D easy {leicht}
translate D Playwith {Spiel mit}
translate D white {Wei}
translate D black {Schwarz}
translate D both {beide}
translate D Play {Spielen}
translate D Noblunder {Kein Fehler}
translate D blunder {Fehler}
translate D Noinfo {-- Keine Info --}
translate D PhalanxOrTogaMissing {Phalanx oder Toga nicht gefunden!}
translate D moveblunderthreshold {fehlerhafter Zug, wenn Verlust grer als}
translate D limitanalysis {Analysezeit der Engine begrenzen}
translate D seconds {Sekunden}
translate D Abort {Abbrechen}
translate D Resume {Fortfahren}
translate D OutOfOpening {Ende der Erffnung}
translate D NotFollowedLine {You did not follow the line}
translate D DoYouWantContinue {Mchten sie fortfahren?}
translate D CoachIsWatching {Coach schaut zu}
translate D Ponder {Berechnen im Hintergrund}
translate D LimitELO {Strke begrenzen (ELO)}
translate D DubiousMovePlayedTakeBack {Zweifelhafter Zug gespielt, wollen Sie ihn zurcknehmen?}
translate D WeakMovePlayedTakeBack {Schacher Zug gespielt, wollen Sie ihn zurcknehmen?}
translate D BadMovePlayedTakeBack {Schlechter Zug gespielt, wollen Sie ihn zurcknehmen?}
translate D Iresign {Ich gebe auf}
translate D yourmoveisnotgood {Ihr Zug ist nicht gut}
translate D EndOfVar {Variantenende}
translate D Openingtrainer {Erffnungstrainer}
translate D DisplayCM {Kandidatenzge anzeigen}
translate D DisplayCMValue {Wert der Kandidatenzge anzeigen}
translate D DisplayOpeningStats {Statistik anzeigen}
translate D ShowReport {Bericht anzeigen}
translate D NumberOfGoodMovesPlayed {gute Zge gespielt}
translate D NumberOfDubiousMovesPlayed {zweischneidige Zge gespielt}
translate D NumberOfMovesPlayedNotInRepertoire {Zge auerhalb des Repertoirs gespielt}
translate D NumberOfTimesPositionEncountered {Wiederholungen der Position}
translate D PlayerBestMove  {Nur beste Zge erlauben}
translate D OpponentBestMove {Gegner spielt besten Zug}
translate D OnlyFlaggedLines {Nur markierte Linien}
translate D resetStats {Statistik zurcksetzen}
translate D Repertoiretrainingconfiguration {Konfiguration Trainingsrepertoire}
translate D Loadingrepertoire {Lade Repertoire}
translate D Movesloaded {Zge geladen}
translate D Repertoirenotfound {Repertoire nicht gefunden}
translate D Openfirstrepertoirewithtype {Zuerst eine Erffnungsdatenbank mit entsprechendem Type/Icon ffnen.}
translate D Movenotinrepertoire {Zug nicht im Repertoire}
translate D PositionsInRepertoire {Positionen im Repertoire}
translate D PositionsNotPlayed {nicht gespielte Positionen}
translate D PositionsPlayed {gespielte Positionen}
translate D Success {Erfolgreich}
translate D DubiousMoves {Zweifelhafte Zge}
translate D OutOfRepertoire {Nicht im Repertoire}
translate D ConfigureTactics {Taktik konfigurieren}
translate D ResetScores {Punkte zurcksetzten}
translate D LoadingBase {Lade Datenbank}
translate D Tactics {Taktik}
translate D ShowSolution {Lsung zeigen}
translate D NextExercise {Nchste Aufgabe}
translate D PrevExercise {Vorherige Aufgabe}
translate D StopTraining {Training beenden}
translate D Next {Nchste}
translate D ResettingScore {Punkte zurcksetzen}
translate D LoadingGame {Lade Partie}
translate D MateFound {Matt gefunden}
translate D BestSolutionNotFound {Beste Lsung NICHT gefunden!}
translate D MateNotFound {Matt nicht gefunden}
translate D ShorterMateExists {Krzeres Matt existiert}
translate D ScorePlayed {Bewertung gepielt}
translate D Expected {erwarted}
translate D ChooseTrainingBase {Trainingsdatenbank auswhlen}
translate D Thinking {Denke...}
translate D AnalyzeDone {Analyse beendet}
translate D WinWonGame {Gewinne gewonnene Partie}
translate D Lines {Variantenzahl}
translate D ConfigureUCIengine {UCI Engine konfigurieren}
translate D SpecificOpening {Ausgewhlte Erffnung}
translate D StartNewGame {Neue Partie}
translate D FixedLevel {Festgelegte Strke}
translate D Opening {Erffnung}
translate D RandomLevel {Zufallsniveau}
translate D StartFromCurrentPosition {Von aktueller Position starten}
translate D FixedDepth {Feste Tiefe}
translate D Nodes {Knoten} 
translate D Depth {Tiefe}
translate D Time {Zeit} 
translate D SecondsPerMove {Sekunden pro Zug}
translate D Engine {Engine}
translate D TimeMode {Zeitmodus}
translate D TimeBonus {Zeit + Bonus}
translate D TimeMin {min}
translate D TimeSec {s}
translate D AllExercisesDone {Alle bungen gemacht}
translate D MoveOutOfBook {Zug nicht mehr im Buch}
translate D LastBookMove {Letzter Buchzug}
translate D AnnotateSeveralGames {Kommentiere mehrere Partien\nvon aktueller bis:}
translate D FindOpeningErrors {Erffnungsfehler finden}
translate D MarkTacticalExercises {Taktische bungen markieren}
translate D UseBook {Buch benutzen}
translate D MultiPV {Multivariantenmodus}
translate D Hash {Hash Speicher}
translate D OwnBook {Engine Buch verwenden}
translate D BookFile {Erffnungsbuch}
translate D AnnotateVariations {Varianten kommentieren}
translate D ShortAnnotations {Kurze Kommentare}
translate D addAnnotatorTag {Kommentar Tag hinzufgen}
translate D AddScoreToShortAnnotations {Bewertung hinzufgen}
translate D Export {Export}
translate D BookPartiallyLoaded {Buch teilweise geladen}
translate D Calvar {Training: Variantenberechnung}
translate D ConfigureCalvar {Konfiguration}
translate D Reti {Reti}
translate D English {Englische Erffnung}
translate D d4Nf6Miscellaneous {1.d4 Nf6 Verschiedene}
translate D Trompowsky {Trompowsky}
translate D Budapest {Budapest}
translate D OldIndian {Altindische Verteidigung}
translate D BenkoGambit {Benko Gambit}
translate D ModernBenoni {Moderne/Benoni-Verteidigung}
translate D DutchDefence {Hollndische Verteidigung}
translate D Scandinavian {Skandinavische Verteidigung}
translate D AlekhineDefence {Aljechin Verteidigung}
translate D Pirc {Pirc-Verteidigung}
translate D CaroKann {Caro-Kann}
translate D CaroKannAdvance {Caro-Kann Vorstovariante}
translate D Sicilian {Sizilianisch}
translate D SicilianAlapin {Sizilianisch, Alapin Variante}
translate D SicilianClosed {Geschlossene Sizilianische Verteidigung}
translate D SicilianRauzer {Sizilianisch, Rauzer Angriff}
translate D SicilianDragon {Sizilianisch, Drachenvariante}
translate D SicilianScheveningen {Sizilianisch, Scheveningen}
translate D SicilianNajdorf {Sizilianisch, Najdorf}
translate D OpenGame {Offene Spiele}
translate D Vienna {Wiener Verteidigung}
translate D KingsGambit {Knigsgambit}
translate D RussianGame {Russische Verteidigung}
translate D ItalianTwoKnights {Italienische Erffnung}
translate D Spanish {Spanisch Partie}
translate D SpanishExchange {Spanisch, Abtauschvariante}
translate D SpanishOpen {Spanisch, offene Systeme}
translate D SpanishClosed {Spanisch, geschlossene Systeme}
translate D FrenchDefence {Franzsische Verteidigung}
translate D FrenchAdvance {Franzsisch, Vorstovariante}
translate D FrenchTarrasch {Franzsisch, Tarrasch}
translate D FrenchWinawer {Franzsisch, Winawer}
translate D FrenchExchange {Franzsisch, Abtauschvariante}
translate D QueensPawn {Damenbauernspiel}
translate D Slav {Slavisch}
translate D QGA {Angenommenes Damengambit}
translate D QGD {Abgelehntes Damengambit}
translate D QGDExchange {Abgelehntes Damengambit, Abtauschvariante}
translate D SemiSlav {Semi-Slawisch}
translate D QGDwithBg5 {Abgelehntes Damengambit mit Lg5}
translate D QGDOrthodox {Abgelehntes Damengambit, Orthodoxe Variante}
translate D Grunfeld {Grnfeld-Verteidigung}
translate D GrunfeldExchange {Grnfeld, Abtauschvariante}
translate D GrunfeldRussian {Grnfeld-Verteidigung, Russische Variante}
translate D Catalan {Katalanische Verteidigung}
translate D CatalanOpen {Katalanisch, offen}
translate D CatalanClosed {Katalanisch, geschlossen}
translate D QueensIndian {Dameninsche Verteidigung}
translate D NimzoIndian {Nimzoindische Verteidigung}
translate D NimzoIndianClassical {Nimzoindisch, Klassische Variante}
translate D NimzoIndianRubinstein {Nimzoinsisch, Rubinstein}
translate D KingsIndian {Knigsindische Verteidigung}
translate D KingsIndianSamisch {Knigsinsisch, Smisch}
translate D KingsIndianMainLine {Knigsinsisch, Hauptvariante}
translate D ConfigureFics {FICS Konfigurieren}
translate D FICSGuest {Gastlogin}
translate D FICSServerPort {Serverport}
translate D FICSServerAddress {IP Adresse}
translate D FICSRefresh {Aktualisieren}
translate D FICSTimesealPort {Timeseal Port}
translate D FICSSilence {Konsolenfilter}
translate D FICSOffers {Herausforderungen}
translate D FICSConsole {Konsole}
translate D FICSGames {laufende Partien}
translate D FICSUnobserve {Beobachtung abbrechen}
translate D FICSProfile {Eigenes Profil ausgeben}
translate D FICSRelayedGames {bertragene Partien}
translate D FICSFindOpponent {Gegner suchen}
translate D FICSTakeback {Zurcknehmen}
translate D FICSTakeback2 {2 zurcknehmen}
translate D FICSInitTime {Zeit (min)}
translate D FICSIncrement {Inkrement (s)}
translate D FICSRatedGame {Wertungspartie}
translate D FICSAutoColour {automatisch}
translate D FICSManualConfirm {manuell besttigen}
translate D FICSFilterFormula {Filterformel anwenden}
translate D FICSIssueSeek {Partie anbieten}
translate D FICSChallenge {Herausfordern}
translate D FICSAccept {Annehmen}
translate D FICSDecline {Ablehnen}
translate D FICSColour {Seite whlen:}
translate D FICSSend {senden}
translate D FICSConnect {Verbinden}
translate D FICSdefaultuservars {Standardvariablen verwenden}
translate D FICSObserveconfirm {Besttige Beobachtung der Partie}
# ====== TODO To be translated ======
translate D FICSpremove {Enable premove}
translate D GameReview {Partieanalyse}
translate D GameReviewTimeExtended {Lange Bedenkzeit}
translate D GameReviewMargin {Fehlergrenze}
translate D GameReviewAutoContinue {Bei korrektem Zug Automatisch weiter}
translate D GameReviewReCalculate {Verwende lange Bedenkzeit}
translate D GameReviewAnalyzingMovePlayedDuringTheGame {Analysiere den Partiezug}
translate D GameReviewAnalyzingThePosition {Analysiere Stellung}
translate D GameReviewEnterYourMove {Zug eingeben}
translate D GameReviewCheckingYourMove {berprfe Antwort}
translate D GameReviewYourMoveWasAnalyzed {Antwort wurde analysiert}
translate D GameReviewYouPlayedSameMove {Identischer Zug zur Partie}
translate D GameReviewScoreOfYourMove {Wertung des Antwortzuges}
translate D GameReviewGameMoveScore {Wertung des Partiezuges}
translate D GameReviewEngineScore {Bewertung der Engine}
translate D GameReviewYouPlayedLikeTheEngine {Antworzug wie Engine}
translate D GameReviewNotEngineMoveButGoodMove {Nicht der Computerzug, aber ebenfalls ein guter Zug!}
translate D GameReviewMoveNotGood {Dieser Zug ist nicht gut. Bewertung:}
translate D GameReviewMovesPlayedLike {Zge gespielt wie Partie}
translate D GameReviewMovesPlayedEngine {Zge wie Computer gespielt}

# Correspondence Chess Dialogs:
translate D CCDlgConfigureWindowTitle {Einstellungen fr Fernschach}
translate D CCDlgCGeneraloptions {Allgemeine Einstellungen}
translate D CCDlgDefaultDB {Standarddatenbank:}
translate D CCDlgInbox {Posteingang (Pfad):}
translate D CCDlgOutbox {Postausgang (Pfad):}
translate D CCDlgXfcc {Xfcc Einstellungen:}
translate D CCDlgExternalProtocol {Externe Protokolle (Xfcc)}
translate D CCDlgFetchTool {Hilfsprogramm zum Abholen:}
translate D CCDlgSendTool {Hilfsprogramm zum Senden:}
translate D CCDlgEmailCommunication {eMail Kommunikation}
translate D CCDlgMailPrg {eMail Programm:}
translate D CCDlgBCCAddr {Adresse fr Ausgangskopie:}
translate D CCDlgMailerMode {Modus:}
translate D CCDlgThunderbirdEg {z. B. Thunderbird, Mozilla Mail, Icedove...}
translate D CCDlgMailUrlEg {z. B. Evolution}
translate D CCDlgClawsEg {z. B. Sylpheed Claws}
translate D CCDlgmailxEg {z. B. mailx, mutt, nail...}
translate D CCDlgAttachementPar {Parameter fr Anhang:}
translate D CCDlgInternalXfcc {Interne Xfcc-Untersttzung verwenden}
translate D CCDlgConfirmXfcc {Zge besttigen}
translate D CCDlgSubjectPar {Parameter fr Betreff:}
translate D CCDlgDeleteBoxes {Leeren des Postein- und Ausgangs}
translate D CCDlgDeleteBoxesText {Wollen Sie wirklich Ihren Postein- und Ausgang leeren?\nDies erfordert ein erneutes Synchronisieren zum den aktuellen Zustand Ihrer Partien anzuzeigen.}
translate D CCDlgConfirmMove {Zug besttigen}
translate D CCDlgConfirmMoveText {Durch besttigen wird folgender Zug und Kommentar an den Server bertragen:}
translate D CCDlgDBGameToLong {Inkonsistente Hauptvariante}
translate D CCDlgDBGameToLongError {Die Hauptvariante dieser Partie in der Datenbank enthlt mehr Zge als in der Partie tatschlich gespielt. Sofern die Partie im Posteingang vollstndig und aktuell ist (z. B. direkt nach einer Synchronisation) mu die Hauptvariante in der Datenbank ensprechend gekrzt werden. Der letzte Zug in der Partie ist Nr. \n}
translate D CCDlgStartEmail {Neue eMail Partie}
translate D CCDlgYourName {Ihr Name:}
translate D CCDlgYourMail {Ihre eMail Adresse:}
translate D CCDlgOpponentName {Name des Gegners:}
translate D CCDlgOpponentMail {eMail Adresse des Gegners:}
translate D CCDlgGameID {Partiekennung (eineindeutig):}
translate D CCDlgTitNoOutbox {Scid: Fernschach Postausgang}
translate D CCDlgTitNoInbox {Scid: Fernschach Posteingang}
translate D CCDlgTitNoGames {Scid: Keine Fernschachpartien}
translate D CCErrInboxDir {Der Posteingang fr Fernschachpartien unter:}
translate D CCErrOutboxDir {Der Postausgang fr Fernschachpartien unter:}
translate D CCErrDirNotUsable {existiert nicht oder ist nicht benutzbar!\nBitte berprfen und die Einstellungen korrigieren.}
translate D CCErrNoGames {enthlt keine Partien!\nBitte sychronisieren Sie zunchst.}

translate D CCDlgTitNoCCDB {Scid: Keine Fernschach-Datenbank}
translate D CCErrNoCCDB {Es wurde keine Datenbank vom Typ 'Fernschach' geffnet. Bitte ffen Sie eine solche bevor Sie Funktionen des Fernschachmoduls benutzen.}
translate D CCFetchBtn {Partien vom Server abholen\nund Inbox bearbeiten}
translate D CCPrevBtn {Vorhergehende Partie}
translate D CCNextBtn {Nchste Partie}
translate D CCSendBtn {Zug versenden}
translate D CCEmptyBtn {Postein- und ausgang leeren}
translate D CCHelpBtn {Hilfe zu den Icons und Statusindikatoren\nFr allgemeine Hilfe bitte F1!}
translate D CCDlgServerName {Server Name:}
translate D CCDlgLoginName  {Login Name:}
translate D CCDlgPassword   {Pawort:}
translate D CCDlgURL        {Xfcc-URL:}
translate D CCDlgRatingType {Wertungszahl:}
translate D CCDlgDuplicateGame {Nichteindeutige Partie}
translate D CCDlgDuplicateGameError {Diese Partie existiert mehr als einmal in der Datenbank. Bitte lschen Sie alle Doubletten und komprimieren Sie die Datenbank (Datei/Wartung/Datenbank komprimieren).}
translate D CCDlgSortOption {Sortierung:}
translate D CCDlgListOnlyOwnMove {Partien mit anhngigen Zgen}
translate D CCOrderClassicTxt {Ort, Turnier, Runde, Ergebnis, Wei, Schwarz}
translate D CCOrderMyTimeTxt {Eigene Bedenkzeit}
translate D CCOrderTimePerMoveTxt {Zeit pro Zug bis zur nchsten Zeitkontrolle}
translate D CCOrderStartDate {Startdatum}
translate D CCOrderOppTimeTxt {Gegnerische Bedenkzeit}
translate D CCDlgConfigRelay {Partien auf iccf-webchess beobachten}
translate D CCDlgConfigRelayHelp {Besuchen Sie http://www.iccf-webchess.com und lassen Sie die Partie anzeigen, die Sie beobachten wollen. Wenn das Brett sichtbar ist bitte die Adresse aus dem Browser in untenstehende Liste kopieren. Nur eine URL pro Zeile!\nBeispiel: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate D ExtHWConfigConnection {Hardware Konfigurieren}
translate D ExtHWPort {Schnittstelle}
translate D ExtHWEngineCmd {Engine Kommando}
translate D ExtHWEngineParam {Engine Parameter}
translate D ExtHWShowButton {Knopf in Werzeugleiste anzeigen}
translate D ExtHWHardware {Hardware}
translate D ExtHWNovag {Novag Citrine}
translate D ExtHWInputEngine {Input Engine}
translate D ExtHWNoBoard {Kein Brett verbunden}
translate D NovagReferee {Nur Zge aufzeichnen}
translate D IEConsole {Input Engine Konsole}
translate D IESending {Sende Zge fr}
translate D IESynchronise {Synchronisieren}
translate D IERotate  {Brett drehen}
translate D IEUnableToStart {Input Engine konnte nicht gestartet werden:}
translate D DoneWithPosition {Positionsbearbeitung beendet}
translate D Board {Brett}
translate D showGameInfo {Partieinformation anzeigen}
translate D autoResizeBoard {Brettgre automatisch berechnen}
translate D DockTop {Nach oben}
translate D DockBottom {Nach unten}
translate D DockLeft {Nach links}
translate D DockRight {Nach rechts}
translate D Undock {Fenster befreien}
translate D ChangeIcon {Symbol ndern...}
}

##########
#
# ECO Opening name translations:

translateECO D {
  Accelerated {, Beschleunigt}
  {: Accelerated} Beschleunigt
  Accepted {, Angenommen}
  {: Accepted} Angenommen
  Advance Vorsto
  {as Black} {mit Schwarz}
  Attack Angriff
  Bishop Lufer
  Bishop's Lufer
  Classical Klassisch
  Closed Geschlossen
  {Closed System} {Geschlossenes System}
  Counterattack Gegenangriff
  Countergambit Gegengambit
  Declined {, Abgelehnt}
  Defence Verteidigung
  deferred verzgert
  Deferred {, verzgert}
  Early Frhe
  Exchange Abtausch
  Game Partie
  Improved verbessert
  King's Knigs
  Knight Springer
  Line Variante
  {Main Line} Hauptvariante
  Open Offen
  Opening Erffnung
  Queen's Damen
  Queenswap Damentausch
  Symmetrical Symmetrisch
  Variation Variante
  Wing Flgel
  with mit
  without ohne

  Alekhine Aljechin
  Averbakh Awerbach
  Botvinnik Botwinnik
  Chigorin Tschigorin
  Polugaevsky Polugajewski
  Rauzer Rauser
  Sveshnikov Sweschnikow

  Austrian sterreichisch
  Berlin Berliner
  Bremen Bremer
  Catalan Katalanisch
  Czech Tschechisch
  Dutch Hollndisch
  English Englisch
  French Franzsisch
  Hungarian Ungarisch
  Indian Indisch
  Italian Italienisch
  Latvian Lettisch
  Meran Meraner
  Moscow Moskau
  Polish Polnisch
  Prague Prager
  Russian Russisch
  Scandinavian Skandinavisch
  Scheveningen Scheveninger
  Scotch Schottisch
  Sicilian Sizilianisch
  Slav Slawisch
  Spanish Spanisch
  Swedish Schwedisch
  Swiss Schweizer
  Vienna Wiener
  Yugoslav Jugoslawisch

  {Accelerated Fianchetto} {Beschleunigtes Fianchetto}
  {Accelerated Pterodactyl} {Beschleunigter Pterodactylus}
  {Alekhine Defence} Aljechin-Verteidigung
  {Alekhine Variation} Aljechin-Variante
  {Alekhine: Smisch Attack} {Aljechin: Wiener System (Smisch-Angriff)}
  {Anderssen Opening} Anderssen-Erffnung
  {Anti-King's Indian} Anti-Knigsindisch
  {Austrian Attack} {sterreichischer Angriff}
  {Benko Gambit} Wolga-Gambit
  {Benko Opening} Benk-Erffnung
  {Berlin Defence} {Berliner Verteidigung}
  Chameleon Chamleon
  Chelyabinsk Tscheljabinsk
  {Classical Defence} {Klassische Verteidigung}
  {Spanish: Classical Defence} {Spanisch: Klassische (Cordel-) Verteidigung}
  {Classical Exchange} {Klassischer Abtausch}
  {Classical Variation} {Klassische Variante}
  {Closed Berlin} {Geschlossener Berliner}
  {Open Berlin} {Offener Berliner}
  {Bird's,} {Bird,}
  {Bird's Defence} Bird-Verteidigung
  {Bird's Deferred} {Verzgerte Bird}
  {Bishop's Opening} Luferspiel
  {Botvinnik System} Botwinnik-System
  {Central Variation} Zentralvariante
  {Centre Attack} Zentrumsangriff
  {Centre Game} Mittelgambit
  {Danish Gambit} {Nordisches Gambit}
  Dragon Drachen
  {Dutch Variation} {Hollndische Variante}
  {Early Exchange} {Frher Abtausch}
  {Early Queenswap} {Frher Damentausch}
  {English Attack} {Englischer Angriff}
  {English: King's} {Englisch: Knigsbauer}
  {English Variation} {Englische Variante}
  {Englund Gambit} Englund-Gambit
  {Exchange Variation} Abtauschvariante
  {Fianchetto Variation} Fianchettovariante
  {Flohr Variation} Flohr-Variante
  {Four Knights} Vierspringer
  {Four Knights Game} Vierspringerspiel
  {Four Pawns} Vierbauern
  {Four Pawns Attack} Vierbauernangriff
  {French Variation} {Franzsische Variante}
  {From Gambit} {Froms Gambit}
  {Goring Gambit} {Gring-Gambit}
  {Grob Gambit} {Grobs Gambit}
  {Hungarian Defence} {Ungarische Verteidigung}
  {Indian Variation} {Indische Variante}
  {Italian Game} {Italienische Partie}
  KGD {Abgel. Knigsgambit}
  {Classical KGD} {Klassisches abgelehntes Knigsgambit}
  {Keres Variation} Keres-Variante
  KGA {Angen. Knigsgambit}
  {KGA: Bishop's Gambit} Knigslufergambit
  {KGA: King's Knight Gambit} Knigsspringergambit
  {King's Gambit} Knigsgambit
  {King's Gambit Accepted} {Angen. Knigsgambit}
  {King's Gambit Accepted (KGA)} {Angen. Knigsgambit}
  {King's Indian} Knigsindisch
  KIA {Knigsindischer Angriff}
  {King's Knight Gambit} Knigsspringergambit
  {King's Pawn} Knigsbauer
  {Lasker Variation} {Lasker-Variante}
  {Latvian Gambit} {Lettisches Gambit}
  {Maroczy Bind} {Maroczy-Aufbau}
  {Marshall Variation} Marshall-Variante
  {Modern Attack} {Moderner Angriff}
  {Modern Steinitz} {Moderne Steinitz}
  {Modern Variation} {Moderne Variante}
  {Moscow Variation} {Moskauer Variante}
  Nimzo-Indian Nimzoindisch
  {Old Benoni} {Klassisches Benoni}
  {Old Indian} Altindisch
  {Old Indian Attack} {Altindisch i.A.}
  {Old Steinitz} Steinitz-Verteidigung
  {Open Game} {Offene Partie}
  {Poisoned Pawn} {Vergifteter Bauer}
  {Polish Variation} {Polnische Variante}
  {Polugaevsky Variation} {Polugajewski-Variante}
  {Queen's Gambit} Damengambit
  {Queen's Gambit Accepted} {Angen. Damengambit}
  QGA {Angen. Damengambit}
  {Queen's Gambit Accepted (QGA)} {Angenommenes Damengambit}
  {Reversed QGA} {Angen. Damengambit i.A.}
  QGD {Abgel. Damengambit}
  {Queen's Gambit Declined (QGD)} {Abgelehntes Damengambit}
  {Reversed QGD} {Abgel. Damengambit i.A.}
  {Queen's Indian} Damenindisch
  {Queen's Pawn} Damenbauer
  {Queen's Pawn Game} Damenbauerspiel
  {Reversed Slav} {Slawisch i.A.}
  {Rubinstein Variation} Rubinstein-Variante
  {Russian Game} {Russische Partie}
  {Russian Game (Petroff Defence)} {Russische Partie}
  {Russian-Three Knights Game} {Russisches Dreispringerspiel}
  {Scandinavian (Centre Counter)} Skandinavisch
  Schliemann Jnisch
  {Schliemann (Jnisch)} {Jnisch-Gambit (Schliemann)}
  {Scotch Opening} {Schottische Erffnung}
  {Sicilian Defence} {Sizilianische Verteidigung}
  {Sicilian Variation} {Sizilianische Variante}
  {Slav Defence} {Slawische Verteidigung}
  Smith-Morra Morra
  {Smith-Morra Accepted} {Angenommenes Morra-Gambit}
  {Smith-Morra Gambit} Morra-Gambit
  {Spanish (Ruy Lopez)} {Spanische Partie}
  {Start position} Ausgangsstellung
  {Steinitz Deferred} Rubinstein-Aufbau
  {Swedish Variation} {Schwedische Variante}
  {Swiss Variation} {Schweizer Variante}
  {Tarrasch's Gambit} {Tarrasch-Gambit}
  {Three Knights} Dreispringer
  {3 Knights} Dreispringer
  {Three Knights Game} Dreispringerspiel
  {Three Pawns Attack} Dreibauernangriff
  {Two Knights} Zweispringer
  {Two Knights Defence} Zweispringer-Verteidigung
  {Two Knights Variation} Zweispringer-Variante
  {Two Pawns} Zweibauern
  {Two Pawns Attack} Zweibauernangriff
  {Wing Gambit} Flgel-Gambit
  {Yugoslav Attack} {Jugoslawischer Angriff}
}


############################################################
#
# German help pages:


##########
# Contents
#
set helpTitle(D,Contents) "Inhaltsverzeichnis"
set helpText(D,Contents) {<h1>Inhaltsverzeichnis Scid-Hilfe</h1>


<h4>Start und allgemeine Hilfe</h4>
<ul>
<li><a Guide><b>Kurzanleitung</b> Benutzung von Scid</a> <red>(Zuerst lesen!)</red></li>
<li><a Hints><b>Hinweise</b> zum effizienteren Arbeiten mit Scid</a></li>
<li><a MainWindow>Das Scid-<b>Hauptfenster</b></a></li>
<li><a Menus>Die Scid-<b>Mens</b></a><red>(Aktualisiert!)</red></li>
<li><a Moves><b>Zge</b> eingeben</a></li>
<li><a Searches><b>Suchen</b> in Scid</a></li>
<li><a Clipbase>Die <b>Ablage</b>-Datenbank</a></li>
<li><a Annotating>Partien <b>kommentieren</b></a> </li>
</ul>

<h4>Andere Scid-Fenster</h4>
<ul>
<li><a Analysis><b>Analyse</b>-Fenster</a></li>
<li><a Reports><b>Berichte</b></a> </li>
<li><a Book><b>Buch</b>-Fenster</a><red>(Neu!)</red></li>
<li><a Finder><b>Dateifinder</b>-Fenster</a></li>
<li><a Switcher><b>Datenbank-Umschalter</b></a></li>
<li><a Email><b>E-Mail</b>-Schach-Manager</a></li>
<li><a TB><b>Endspieltabellen</b> in Scid verwenden</a> </li>
<li><a PTracker><b>Figurenverteilung</b></a></li>
<li><a Graphs><b>Grafik</b>-Fenster</a><red>(Aktualisiert!)</red></li>
<li><a Comment><b>Kommentareditor</b></a></li>
<li><a Crosstable><b>Kreuztabellen</b>-Fenster</a></li>
<li><a GameList><b>Partieliste</b>-Fenster</a></li>
<li><a Import><b>Partie-Import</b>-Fenster</a></li>
<li><a PGN><b>PGN</b> (Partietext)-Fenster</a></li>
<li><a Repertoire><b>Repertoire-Editor</b></a></li>
<li><a PList><b>Spielerfinder</b></a></li>
<li><a PInfo><b>Spieler-Information</b></a></li>
<li><a TacticalGame><b>Trainingspartie</b>-Fenster</a><red>(Neu!)</red></li>
<li><a CalVar><b>Training Varianten berechnen</b>-Fenster</a><red>(Neu!)</red></li>
<li><a OpeningTrainer><b>Erffnungstrainer</b>-Fenster</a><red>(Neu!)</red></li>
<li><a Tmt><b>Turnierfinder</b></a></li>
<li><a Tree><b>Zugbaum</b>-Fenster</a></red></li>
</ul>

<h4>Weitere Hilfsprogramme und Informationen</h4>
<ul>
<li><a Maintenance><b>Datenbank-Wartung</b></a></li>
<li><a Sorting>Datenbank<b> sortieren</b></a></li>
<li><a Compact>Datenbank<b> komprimieren</b></a></li>
<li><a ECO><b>ECO</b>-Erffnungsklassifikation</a></li>
<li><a EPD><b>EPD</b>-Dateien</a></li>
<li><a Correspondence><b>Fernschach</b></a></li>
<li><a Export>Partien in Textdateien <b>exportieren</b></a></li>
<li><a Cmdline><b>Kommandozeilen</b>-Optionen</a></li>
<li><a LaTeX>Scid und <b>LaTeX</b></a> </li>
<li><a Bookmarks><b>Lesezeichen</b></a></li>
<li><a Flags>Partie-<b>Markierungen</b> (Flags)</a></red></li>
<li><a Options><b>Optionen</b> und Prferenzen</a></li>
<li><a Pgnscid><b>Pgnscid</b>: PGN-Dateien konvertieren</a></li>
<li><a NAGs><b>NAG</b>-Standard-Kommentarwerte</a></li>
<li><a Formats>Scids Datenbank-<b>Dateiformate</b></a></li>
<li><a Author>Kontakt-Information</a></li>
</ul>

<p><footer>(Aktualisiert: Scid 3.6.23, Mrz 2008)</footer></p>
}


###############
### Topic Index

set helpTitle(D,Index) "Hilfe-Index"
set helpText(D,Index) {<h1>Scid: Hilfe-Index</h1>

<h3>A</h3>
<ul>
<li><a Clipbase>Ablage-Datenbank</a></li>
<li><a Analysis List>Analyse-Engines, Liste der</a></li>
<li><a Analysis>Analysefenster</a></li>
<li><a MainWindow Autoplay>Automatisches Vorspielen</a></li>
<li><a Author>Autor, Kontaktaufnahme</a></li>
</ul>

<h3>B</h3>
<ul>
<li><a Menus Edit>Bearbeiten-Men</a></li>
<li><a Maintenance Cleaner>Bereiniger</a></li>
<li><a Tree Best>Beste Partien</a></li>
<li><a Graphs Rating>Bewertungsgraph</a></li>
<li><a GameList Browsing>Blttern in Partien</a></li>
<li><a Searches Board>Brettsuche</a></li>
</ul>

<h3>D</h3>
<ul>
<li><a Finder>Dateifinder</a></li>
<li><a Formats>Dateiformate</a></li>
<li><a Menus File>Datei-Men</a></li>
<li><a Formats>Datenbank-Dateiformate</a></li>
<li><a Compact>Datenbank-Komprimierung</a></li>
<li><a Sorting>Datenbank sortieren</a></li>
<li><a Switcher>Datenbank-Umschalter</a></li>
<li><a Maintenance>Datenbank-Wartung</a></li>
<li><a Maintenance Twins>Dubletten (doppelte Partien)</a></li>
</ul>

<h3>E</h3>
<ul>
<li><a ECO Browser>ECO-Auswertung</a></li>
<li><a ECO Codes>ECO-Codesystem</a></li>
<li><a ECO>ECO-Erffnungsklassifikation</a></li>
<li><a Email>E-Mail</a></li>
<li><a CCeMailChess>Email Schach</li>
<li><a TB>Endspieltabellen</a></li>
<li><a EPD>EPD-Dateien</a></li>
<li><a Reports Opening>Erffnungsbericht</a></li>
<li><a ECO>Erffnungsklassifizierung (ECO)</a></li>
<li><a Repertoire>Erffnungsrepertoire</a></li>
<li><a Export>Exportieren, Partien in Textdateien</a></li>
</ul>

<h3>F</h3>
<ul>
<li><a Menus Windows>Fenster-Men</a></li>
<li><a Correspondence><b>Fernschach</b></a></li>
<li><a CCIcons><b>Fernschach Statusanzeigen</b></a></li>
<li><a PTracker>Figurenverteilungs-Fenster</a></li>
<li><a Searches Filter>Filter</a></li>
<li><a Export>Filter, exportieren</a></li>
<li><a Graphs Filter>Filtergrafik</a></li>
</ul>

<h3>G</h3>
<ul>
<li><a Graphs>Grafikfenster</a></li>
</ul>

<h3>H</h3>
<ul>
<li><a MainWindow>Hauptfenster</a></li>
<li><a Menus Help>Hilfe-Men</a></li>
<li><a Hints>Hinweise</a></li>
</ul>

<h3>I</h3>
<ul>
<li><a Import>Importieren</a></li>
<li><a Contents>Inhaltsverzeichnis</a></li>
</ul>

<h3>K</h3>
<ul>
<li><a Cmdline>Kommandozeilen-Optionen</a></li>
<li><a Comment>Kommentareditor</a></li>
<li><a NAGs>Kommentarzeichen</a></li>
<li><a Annotating>Kommentieren</a></li>
<li><a Compact>Komprimieren (Datenbank)</a></li>
<li><a Author>Kontaktinformation</a></li>
<li><a Crosstable>Kreuztabellen</a></li>
<li><a Guide>Kurzanleitung fr Scid</a></li>
</ul>

<h3>L</h3>
<ul>
<li><a LaTeX>LaTeX</a>-Ausgabeformat</li>
<li><a Bookmarks>Lesezeichen</a></li>
<li><a Maintenance Twins>Lschen, Dubletten</a></li>
</ul>

<h3>M</h3>
<ul>
<li><a Flags>Markierungen</a></li>
<li><a Searches Material>Material-/Muster-Suche</a></li>
<li><a Menus>Mens</a></li>
</ul>

<h3>N</h3>
<ul>
<li><a NAGs>NAG-Kommentarwerte</a></li>
<li><a Maintenance Editing>Namen bearbeiten</a></li>
<li><a Maintenance Spellcheck>Namen, Schreibweisen</a></li>
<li><a Annotating Null>Nullzge</a></li>
</ul>

<h3>O</h3>
<ul>
<li><a Options>Optionen</a></li>
</ul>

<h3>P</h3>
<ul>
<li><a Searches Header>Partiedaten-Suche</a></li>
<li><a GameList>Partielisten</a></li>
<li><a Flags>Partie-Markierungen</a></li>
<li><a Menus Game>Partie-Men</a></li>
<li><a PGN>PGN-Fenster</a></li>
<li><a Pgnscid>Pgnscid</a></li>
</ul>

<h3>R</h3>
<ul>
<li><a Repertoire>Repertoire-Editor</a></li>
</ul>

<h3>S</h3>
<ul>
<li><a Moves>Schachzge eingeben</a></li>
<li><a Maintenance Spellcheck>Schreibkorrektur von Namen</a></li>
<li><a Sorting>Sortieren einer Datenbank</a></li>
<li><a Reports Player>Spielerbericht</a></li>
<li><a PInfo>Spielerinformation</a></li>
<li><a PList>Spielersuche</a></li>
<li><a CCIcons><b>Statusanzeigen im Fernschachfenster</b></a></li>
<li><a Searches>Suchen</a></li>
<li><a Menus Search>Suchen-Men</a></li>
<li><a Searches Filter>Such-Filter</a></li>
</ul>

<h3>T</h3>
<ul>
<li><a Moves Trial>Testmodus</a></li>
<li><a Tmt>Turnierfinder</a></li>
<li>Training</li>
<ul>
<li><a OpeningTrainer>Erffnungstrainer</a></li>
<li><a CalVar>Varianten berechnen</a></li>
</ul>
</ul>

<h3>V</h3>
<ul>
<li><a Annotating Vars>Varianten</a></li>
</ul>

<h3>W</h3>
<ul>
<li><a Maintenance>Wartung</a></li>
<li><a Menus Tools>Werkzeug-Men</a></li>
</ul>

<h3>X</h3>
<ul>
<li><a CCXfcc>Xfcc-Untersttzung</a></li>
</ul>

<h3>Z</h3>
<ul>
<li><a Options Fonts>Zeichenstze</a></li>
<li><a Tree>Zugbaumfenster</a></li>
<li><a Moves>Zge eingeben</a></li>
<li><a GameList Browsing>Zusammenfhren, Partien</a></li>
</ul>

<p><footer>(Aktualisiert: Scid 3.6.23, Mrz 2008)</footer></p>
}


###############
### Quick guide

set helpTitle(D,Guide) "Kurzanleitung zur Benutzung von Scid"
set helpText(D,Guide) {<h1>Kurzanleitung zur Benutzung von Scid</h1>
<p>
Scid ist eine Schachdatenbank, mit welcher man Partiesammlungen
nach einer Vielzahl von Kriterien durchsuchen kann, Partien editieren
und mit Hilfe von Xboard/Winboard-kompatiblen Schachprogrammen
analysieren kann.
</p>
<p>
Scid benutzt ein eigenes, spezielles Drei-Dateien-Datenbankformat,
welches sehr schnell und kompakt ist, aber es kann auch das PGN-
(Portable Game Notation) Format lesen und schreiben. Scids
<a PGN>PGN-Fenster</a> zeigt die Notation der aktuellen Partie im
PGN-Format.
</p>
<p>
Man kann in Scid Partien zur Datenbank hinzufgen, mit Hilfe
der Tastatur oder der Maus. Mehr Details unter der Hilfeseite fr
<a Moves>Zugeingabe</a>.
</p>
<p>
Man kann mit Scid auch <a PGN>PGN</a> - Partiesammlungen bearbeiten:
durch Import der PGN-Datei in Scids - <a Import>Import</a> Fenster
oder direkt durch ffnen von PGN-Dateien in Scid. Jedoch: PGN - Dateien
knnen nicht in Scid bearbeitet werden (sie werden schreibgeschtzt
geffnet), und auerdem benutzen sie mehr Speicher und
werden langsamer geladen. Fr groe PGN - Partiesammlungen
wird empfohlen, sie mit Hilfe des Scid-Programms <a Pgnscid>pgnscid</a>
in eine Scid-Datenbank umzuwandeln (dabei bleibt die PGN-Datei erhalten).
</p>
<p>
Das <a MainWindow>Hauptfenster</a> von Scid (mit dem grafischen
Schachbrett) zeigt Details der aktuellen Partie und Datenbank. Man
kann zu gleicher Zeit bis zu vier Datenbanken geffnet haben (fnf
inklusive der <a Clipbase>Ablage-Datenbank</a>), und jede hat eine
eigene aktuelle Partie. (Die Partie mit der Nr. 0 dient zu Eingabe
einer neuen Partie und ist nicht Bestandteil der Datenbank).
Man kann zwischen den offenen Datenbanken im
<a Menus File>Datei-Men</a> umschalten.
</p>
<p>
Fr zustzliche Information lesen Sie bitte die anderen
Hilfe-Seiten, die im <a Index>Index</a> aufgefhrt sind.
</p>
<p>
<a Author>Kontaktinformationen ber den Autor von Scid</a> findet man in
der entsprechenden Hilfeseite.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


###############
### Hints page:

set helpTitle(D,Hints) "Scid Hinweise"
set helpText(D,Hints) {<h1>Scid Hinweise</h1>
<p>
Diese Seite enthlt einige ntzliche Hinweise in Form von Fragen und
Antworten, um Ihnen zu helfen, Scids Fhigkeiten besser zu nutzen.
Wenn Sie das erste Mal mit Scid arbeiten, lesen Sie bitte zuerst die
<a Guide>Kurzanleitung</a> zur Benutzung von Scid.
Die meisten Informationen auf dieser Seite finden Sie detailliert auf
den anderen Hilfeseiten, die im <a Index>Hilfe-Index</a>
aufgefhrt sind.
Falls Sie einen ntzlichen Hinweis haben, der dieser Seite hinzugefgt
werden sollte, senden Sie ihn bitte (in Englisch) an den
<a Author>Autor von Scid</a>.
</p>

<h4>Kann Scid eine Datenbank automatisch beim Start laden?</h4>
<p>
Ja, Sie knnen Datenbanken, PGN-Dateien oder <a EPD>EPD-Dateien</a>
in der Kommandozeile angeben. Beispiel:
<ul>
<li> <b>scid  datenbank  partien.pgn.gz</b></li>
</ul>
ldt die Scid-Datenbank <b>datenbank</b> und gleichzeitig
die mit gzip komprimierte PGN-Datei <b>partien.pgn.gz</b>.
</p>

<h4>Gibt es eine leichtere Mglichkeit, die Brettgre
zu ndern, als ber das Optionen-Men?</h4>
<p>
Ja, Sie knnen mit den Tastenkombinationen <b>Control+Shift+LeftArrow</b>
und <b>Control+Shift+RightArrow</b> das Brett verkleinern bzw. vergrern.
</p>

<h4>Wenn ich trainiere, indem ich eine Partie nachspiele, mchte ich
nicht, da Scid den nchsten Zug im Informationsbereich anzeigt.
Kann ich ihn verstecken?</h4>
<p>
Sie knnen den nchsten Zug verstecken, indem Sie die <b>rechte</b>
Maustaste im Informationsbereich drcken und im darauf erscheinenden
Men <b>Verstecke nchsten Zug</b> auswhlen.
</p>

<h4>Wie kann ich den ECO-Erffnungsschlssel der aktuellen Position
ermitteln?</h4>
<p>
Der ECO-Schlssel wird in der letzten Zeile des Informationsbereichs
angezeigt, unterhalb des Schachbretts im <a MainWindow>Hauptfenster</a>,
wenn Sie die ECO-Datei (<b>scid.eco</b>) geladen haben.<br>
Auf der <a ECO>ECO-Code</a> Hilfeseite wird erklrt, wie man die ECO-Datei
ldt und die Optionen so einstellt, da sie jedesmal beim Programmstart
geladen wird.
</p>

<h4>Beim Eingeben einer Partie bin ich gerade beim 30. Zug, als ich
bemerke, da der 10. Zug falsch eingegeben wurde. Wie kann ich ihn
korrigieren und dabei alle nachfolgenden Zge erhalten?</h4>
<p>
Sie knnen das im <a Import>Import</a>-Fenster tun; siehe die Hilfeseite
<a Moves Mistakes>Zugeingabe</a> fr weitere Informationen.
</p>

<h4>Wie kopiere ich Partien von einer Datenbank in die andere?</h4>
<p>
Im <a Switcher>Datenbank-Umschalterfenster</a>: kopieren Sie alle
Dateien im Datenbank-<a Searches Filter>Filter</a>, indem Sie sie mit
der Maus von einer Datenbank in die andere ziehen.
</p>

<h4>Jedesmal, wenn ich einen bereits vorhandenen Zug eingebe, erhalte
ich ein "Zug ersetzen?"-Dialogfenster. Wie kann ich das verhindern?</h4>
<p>
Schalten Sie es aus mit der Option <b>Fragen vor Ersetzen</b> im Men
<menu>Optionen: Zge</menu>.
Oder gewhnen Sie sich an, Zge mit der rechten Maustaste zurckzunehmen,
die jeweils den letzen Zug der Partie entfernt, wenn Sie sich
am Partiende befinden.
</p>

<h4>Wie ndere ich die Spaltenbreite im Partielistenfenster?</h4>
<p>
Klicken Sie die jeweilige Spaltenberschrift mit der linken oder
rechten Maustaste an und whlen Sie <b>Konfigurieren</b>.
</p>

<h4>Wie kann ich das Zugbaumfenster statt fr die ganze Datenbank nur
fr eine Auswahl von Partien nutzen?</h4>
<p>
Nutzen Sie die <a Clipbase>Ablage-Datenbank</a>. Whlen Sie den
Datenbank-Filter so, da er die von Ihnen gewnschten Partien enthlt,
dann kopieren Sie diese ber den <a Switcher>Datenbank-Umschalter</a>
in die Ablage-Datenbank. Danach brauchen Sie nur noch das Zugbaumfenster
in der Ablage-Datenbank zu ffnen.
</p>

<h4>Der Zugbaum ist bei groen Datenbanken zu langsam. Wie kann ich
ihn beschleunigen?</h4>
<p>
Sichern Sie die Cache-Datei hufig, um die Zugbaum-Resultate zum
spteren Gebrauch zu bewahren. Zu den Details siehe den Abschnitt
<b>Caching</b> auf der <a Tree>Zugbaum</a>-Hilfeseite.
</p>

<h4>Wie kann ich direkt die PGN-Notation der Datei bearbeiten?</h4>
<p>
Im <a PGN>PGN</a>-Fenster knnen sie die aktuelle Partie nicht bearbeiten,
aber Sie knnen immer noch die PGN-Notation editieren, indem Sie das
Fenster <a Import>Partie importieren</a> verwenden.
ffnen Sie es (mit <b>Control+Shift+I</b>) und whlen Sie
<b>Aktuelle Partie einfgen</b>, dann bearbeiten Sie die Partie
und klicken danach <b>Importieren</b> an.

</p>

<h4>In meiner Datenbank sind einige Spielernamen unterschiedlich
geschrieben. Wie kann ich sie korrigieren?</h4>
<p>
Mit den Kommandos im Men <menu>Datei: Wartung</menu> knnen Sie einzelne
Namen editieren oder auch Schreibweisen aller Namen berprfen.
Siehe die Seite <a Maintenance Editing>Wartung</a>.
</p>

<h4>Ich habe zwei Datenbanken geffnet: eine mit meinen eigenen Partien
und eine groe Datenbank mit Gromeisterpartien. Wie kann ich eine
meiner Partien mit denen in der groen Datenbank vergleichen?</h4>
<p>
ffnen Sie das <a Tree>Zugbaumfenster</a> in der groen Datenbank und
und wechseln Sie mit Hilfe des Datenbankwechslers in die zu
vergleichende Datenbank.
</p>

<p><footer>(Aktualisiert: Scid 3.6.28, August 2008)</footer></p>
}


###############
### Main window

set helpTitle(D,MainWindow) "Scid Hauptfenster"
set helpText(D,MainWindow) {<h1>Scid Hauptfenster</h1>
<p>
Das Hauptfenster in Scid zeigt die aktuelle Stellung der jeweiligen
Partie und Information ber diese Partie und die Datenbank.
Separate Hilfeseiten beschreiben die <a Menus>Mens</a> und die
<a Moves>Zugeingabe</a>.
</p>

<h3>Symbolleiste: Navigieren durch die Partie</h3>
<p>
Die direkt ber dem Schachbrett angebracht Symbole haben die
folgende Bedeutung (von links nach rechts):
<ul>
<li> <button tb_start> Gehe zum Beginn der Partie. </li>
<li> <button tb_prev> Gehe einen Zug zurck. </li>
<li> <button tb_next> Gehe einen Zug vor. </li>
<li> <button tb_end> Gehe zum Ende der Partie. </li>
<li> <button tb_invar> Gehe in Variante. </li>
<li> <button tb_outvar> Verlasse die Variante. </li>
<li> <button tb_addvar> Neue Variante hinzufgen. </li>
<li> <button tb_play> Starte/beende automatisches Vorspielen (siehe unten). </li>
<li> <button tb_trial> Starte/beende <a Moves Trial>Testmodus</a>. </li>
<li> <button tb_flip> Brett drehen. </li>
<li> <button tb_coords> Zeige/Verdecke/Zeige unten und links/ die Brettkoordinaten. </li>
</ul>

<h4><name Autoplay>Automatisches Vorspielen</name></h4>
<p>
Im diesem Modus spielt Scid automatisch die Zge in der
aktuellen Partie vor, bis zum Spielende. Die Zeit zwischen den Zgen
kann im Men <menu>Optionen: Zge</menu> eingestellt werden und wird
mit "Optionen speichern" gesichert.
</p>
<p>
Die Tastenkombination <b>Strg+Z</b> startet oder stoppt das autom.
Vorspielen, zustzlich kann das autom. Vorpielen auch durch
Drcken der <b>Esc</b>-Taste beendet werden.
</p>
<p>
Wenn der Modus "Automatisches Vorspielen" beim geffneten
<a Analysis>Analysefenster</a> (Engine 1) gestartet wird, so wird
die von der Engine berechnte jeweilige Fortsetzung als Variante jedem Zug
hinzugefgt <term>Autom. Kommentieren</term>. Siehe auch die
Hilfeseite zum <a Analysis>Analysefenster</a>.
</p>

<h3>Der Informationsbereich</h3>
<p>
Der Bereich unter dem Schachbrett, mit Informationen ber die
Partie, wird <term>Informationsbereich</term> genannt. Die ersten 3
Zeilen zeigen Information zu den Spielern, Ergebnis, ECO-Code, Datum,
Ort und Ereignis. Die vierte Zeile zeigt die Informationen zur
aktuellen Stellung sowie den nchsten Zug.
</p>
<p>
Die fnfte Zeile zeigt den <a ECO>ECO-Code</a> der aktuelle Stellung,
falls enthalten in der gerade benutzen ECO-Datei.
</p>
<p>
Der Informationsbereich hat ein Men, welches man mit der
rechten Maustaste aktivieren kann. Hierber kann man bestimmte
Informationen zum Spiel zeigen oder verstecken sowie Markierungen
fr die aktuelle Partie setzten und lschen. Man kann das
Men auch ber die <b>[F9]</b> Funktionstaste erreichen.
</p>

<h4>Endspieltabellen</h4>
<p>
Der Informationsbereich zeigt auch Ergebnisse aus den
Endspieltabellen zur aktuellen Stellung, wenn diese darin enthalten
ist. Mehr dazu in den Hilfeseiten zu <a TB>Endspieltabellen</a>.
</p>

<h3>Die Statusanzeige</h3>
<p>
Die Statusanzeige zeigt Information ber die aktuelle
Datenbank. Das erste Feld zeigt den Partiestatus an: <b>XX</b>
bedeutet, die Partie wurde gendert, aber noch nicht
gespeichert, whrend <b>--</b> bedeutet, es gibt keine
nderungen, und <b>%%</b> zeigt an, da die Datenbank
schreibgeschtzt geffnet wurde.
</p>
<p>
Wenn man eine Datenbank immer schreibgeschtzt ffen will,
kann man auch die Rechte fr die entsprechenden Scid-Dateien
setzen, oder zumindestens die der Indexdatei; z.B. (unter Linux) durch
den Befehl: <b>chmod a-w datenbank1.si3</b>.
Danach ffnet Scid die entsprechende Datenbank immer
schreibgeschtzt.
</p>
<p>
Die Statusanzeige zeigt auch, wieviel Spiele im aktuellen
<a Searches Filter>Filter</a>
sind.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


######################
### Menus help screen:

set helpTitle(D,Menus) "Mens"
set helpText(D,Menus) {<h1>Die Scid-Mens</h1>

<h3><name File>Datei</name></h3>
<ul>
<li><menu>Neu</menu>: Legt eine neue, leere Scid-Datenbank an.</li>
<li><menu>ffnen</menu>: ffnet eine existierende Scid-Datenbank.</li>
<li><menu>Schlieen</menu>: Schliet die aktive Scid-Datenbank.</li>
<li><menu>Finder</menu>: ffnet das <a Finder>Dateifinder</a>-Fenster.</li>
<li><menu>Lesezeichen</menu>: Das <a Bookmarks>Lesezeichen</a>-Men mit
     einigen Lesezeichen-Funktionen.</li>
<li><menu>Wartung</menu>: Datenbank-<a Maintenance>Wartungs</a>-Funktionen.
    </li>
<ul>
  <li><menu>Wartungsfenster</menu>: ffnet/schliet das
      Datenbank-Wartungsfenster.</li>
  <li><menu>Partien ECO-klassifizieren</menu>: Bestimmt den
      <a ECO>ECO-Code</a> fr alle Partien der Datenbank neu.</li>
  <li><menu>Dubletten lschen</menu>: Findet <a Maintenance Twins>Dubletten</a>
      in der Datenbank.</li>
  <li><menu>Namen</menu>: Ersetzt alle Vorkommen eines Spieler-,
      Ereignis-, Ort- oder Rundeneintrags.</li>
</ul>
<li><menu>Schreibschutz</menu>: Markiert die aktive Datenbank als schreibgeschtzt.</li>
<li><menu>Datenbank 1/2/3/4/5</menu>: Mit diesen Kommandos knnen Sie
    zwischen den vier verfgbaren Datenbanken und der
    <a Clipbase>Ablage-Datenbank</a> wechseln.</li>
<li><menu>Ende</menu>: Beendet Scid. </li>
</ul>

<h3><name Edit>Bearbeiten</name></h3>
<ul>
<li><menu>Variante hinzufgen</menu>: Fgt eine neue, leere Variante zum nchsten
    Zug hinzu bzw. zum vorherigen, falls es noch keinen nchsten Zug gibt.</li>
<li><menu>Variante lschen</menu>: ffnet ein Varianten-Untermen fr
    den aktuellen Zug, um eine Variante zu lschen.</li>
<li><menu>Als erste Variante setzen</menu>: Macht eine Variante zur
    ersten Variante des aktuellen Zuges.</li>
<li><menu>Variante als Hauptvariante setzen</menu>: Tauscht eine Variante
    mit der Partiefolge aus.</li>
<li><menu>Variante testen</menu>: Schaltet in den <a Moves Trial>Testmodus</a>,
    um eine Variante auszuprobieren, ohne die aktuelle Partie zu verndern.</li>
<li><menu>Entfernen</menu>: Entfernt alle Kommentare oder Varianten
    aus der aktuellen Partie.</li>
<br>
<li><menu>Ablage leeren</menu>: Leert die
    <a Clipbase>Ablage</a>-Datenbank.</li>
<li><menu>Partie in Ablage kopieren</menu>: Kopiert die aktuelle Partie
    in die <a Clipbase>Ablage</a>-Datenbank.</li>
<li><menu>Partie aus Ablage einfgen</menu>: Fgt die aktive Partie der
    <a Clipbase>Ablage</a> als aktive Partie in die aktuelle Datenbank
    ein.</li>
<br>
<li><menu>Stellungseingabe</menu>: Legt die Ausgangsstellung fr die
    aktuelle Partie fest.</li>
<li><menu>Stellung einfgen</menu>: Fgt den markierten Text
    (Zwischenablage) als Ausgangsstellung ein.</li>
</ul>

<h3><name Game>Partie</name></h3>
<ul>
<li><menu>Neue Partie</menu>: Verwirft alle nicht gesicherten nderungen
     und beginnt eine neue Partie ab der Grundstellung.</li>
<li><menu>Lade Erste/Vorherige/Nchste/Letzte Partie</menu>: Diese Menpunkte
    laden die erste, vorherige, nchste bzw. letzte Partie im <a Searches Filter>Filter</a>.</li>
<li><menu>Partie wiederladen</menu>: Ldt die aktuelle Partie erneut, wobei
    alle bisherigen nderungen verworfen werden.</li>
<li><menu>Lade Partie Nummer</menu>: Ldt die Partie mit der angegebenen
    Nummer in die aktuelle Datenbank.</li>
<br>
<li><menu>Partie ersetzen</menu>: Sichert die aktuelle Partie, wobei sie
    die Originalversion in der Datenbank ersetzt.</li>
<li><menu>Partie speichern</menu>: Sichert die aktuelle Partie als neue
    Partie, die ans Ende der Datenbank angehngt wird.</li>
<br>
<li><menu>Erffnung identifizieren</menu>: Findet die letztmgliche
    Position der aktuellen Partie in der ECO-Datei.</li>
<li><menu>Zugnummer</menu>: Geht zu der angegebenen Zugnummer in
    der aktuellen Partie.</li>
<li><menu>Finde Neuerung</menu>: Findet den ersten Zug der aktuellen Partie,
    der vorher noch nie gespielt wurde.</li>
</ul>

<h3><name Search>Suchen</name></h3>
<ul>
<li><menu>Filter zurcksetzen</menu>: Setzt den <a Searches Filter>Filter</a>
    zurck, so da er alle Partien enthlt.</li>
<li><menu>Filter negieren</menu>: Invertiert den Filter, so da er alle
    vorher ausgeschlossenen Partien enthlt.</li>
<br>
<li><menu>Brett</menu>: Sucht die
    <a Searches Board>aktuelle Brettposition</a>.</li>
<li><menu>Partiedaten</menu>: Sucht nach <a Searches Header>Partiedaten</a>
    wie z.B. Spielernamen.</li>
<li><menu>Material/Muster</menu>: Sucht nach
    <a Searches Material>Material</a> oder Stellungsmustern</a>.</li>
<br>
<li><menu>Mit Suchoptionsdatei</menu>: Sucht mit Hilfe von
    <a Searches Settings>Einstellungen</a> aus einer Suchoptionsdatei.</li>
</ul>

<h3><name Windows>Fenster</name></h3>
<ul>
<li><menu>Kommentareditor</menu>: ffnet/schliet das
    <a Comment>Kommentareditor</a>-Fenster.</li>
<li><menu>Partieliste</menu>: ffnet/schliet das
    <a GameList>Partielistenfenster</a>.</li>
<li><menu>PGN-Fenster</menu>: ffnet/schliet das
    <a PGN>PGN-Fenster</a>.</li>
<li><menu>Turnierfinder</menu>: ffnet/schliet den
    <a Tmt>Turnierfinder</a>.</li>
<br>
<li><menu>Datenbank-Umschalter</menu>: ffnet/schliet den
    <a Switcher>Datenbank-Umschalter</a>, mit dem man auf einfache Weise zu einer
    anderen Datenbank wechseln oder Partien zwischen Datenbanken kopieren kann.</li>
<li><menu>Wartungsfenster</menu>: ffnet/schliet das
    Datenbank-<a Maintenance>Wartungs</a>-Fenster.</li>
<br>
<li><menu>ECO-Auswertung</menu>: ffnet/schliet das Fenster
    <a ECO browser>ECO-Auswertung</a>.</li>
<li><menu>Repertoire-Editor</menu>: ffnet/schliet den
    <a Repertoire>Repertoire-Editor</a>.</li>
<li><menu>Statistik</menu>: ffnet/schliet das
    <term>Filter-Statistikfenster</term>, welches eine Gewinn/Verlust-Zusammenstellung
    aller Partien im <a Searches Filter>Filter</a> liefert.</li>
<li><menu>Zugbaum</menu>: ffnet/schliet das <a Tree>Zugbaumfenster</a>.</li>
<li><menu>Endspieltabellen</menu>: ffnet/schliet das Fenster, das
    die <a TB>Endspieltabellen</a>-Informationen ausgibt.</li>
</ul>

<h3><name Tools>Werkzeuge</name></h3>
<ul>
<li><menu>Analyse-Engine</menu>: Startet/beendet die "Schachanalyse-Engine",
    die die Auswertung der aktuellen Position
    im <a Analysis>Analysefenster</a> darstellt.</li>
<li><menu>Analyse-Engine #2</menu>: Startet/beendet eine zweite
    "Schachanlyse-Engine".</li>
<li><menu>Kreuztabelle</menu>: Erstellt eine
    Turnier-<a Crosstable>Kreuztabelle</a> fr die aktuelle Partie. </li>
<li><menu>E-Mail-Manager</menu>: ffnet/schliet den <a Email>E-Mail-Manager</a>
    fr Fernschachpartien.</li>
<br>
<li><menu>Rel. Filtergrafik</menu>: ffnet das <a Graphs>Fenster fr die Relative Filtergrafik</a></li>
<li><menu>Abs. Filtergrafik</menu>: ffnet das <a Graphs>Fenster fr die Absolute Filtergrafik</a></li>
<li><menu>Erffnungsbericht</menu>: Erstellt einen <a Reports Opening>Erffnungsbericht</a>
    zur aktuellen Position.</li>
<li><menu>Figurenverteilung</menu>: ffnet das Fenster <a PTracker>Figurenverteilung</a>.
    </li>
<li><menu>Spieler-Information</menu>: Gibt <a PInfo>Spieler-Informationen</a>
    fr einen Spieler der aktuellen Partie aus.</li>
<li><menu>ELO-Zahl-Verlauf</menu>: gibt den
    <a Graphs Rating>ELO-Zahl-Verlauf</a> aus.</li>
<li><menu>Partie-Bewertungsgraph</menu>: Gibt den
    <a Graphs Score>Partie-Bewertungsgraph</a> aus.</li>
<br>
<li><menu>Partie exportieren</menu>: Schreibt die aktuelle Partie in eine
    Textdatei im PGN-, HTML- oder LaTeX-Format. Siehe die
    <a Export>Export</a>-Hilfeseite.</li>
<li><menu>Alle Partien im Filter exportieren</menu>: Schreibt alle Partien
    im Such-<a Searches Filter>Filter</a> in eine Textdatei im PGN-, HTML-
    oder LaTeX-Format. Siehe die <a Export>Export</a>-Hilfeseite.</li>
<br>
<li><menu>Eine PGN-Partie importieren</menu>: ffnet das <a Import>Importfenster</a>,
    um den Inhalt einer Partie im <a PGN>PGN-Format</a> direkt
    einzutippen oder einzufgen.</li>
<li><menu>Datei mit PGN-Partien importieren</menu>: Importiert eine ganze
    Datei mit Partien im PGN-Format in die aktuelle Datenbank.</li>
<br>    
<li><menu>Starte Engine1</menu>: Starte direkt die letzte ausgewhlte Engine1 im Analysemodus</li>  
<li><menu>Starte Engine2</menu>: Starte direkt die letzte ausgewhlte Engine2 im Analysemodus</li>  
</ul>

<h3><name Options>Optionen</name></h3>
<p>
Dieses Men stellt einige Eintrge bereit, um die meisten konfigurierbaren
Optionen von Scid einzustellen.
Der Menpunkt <menu>Autom. speichern bei Beenden</menu> sichert die aktuellen
Optionen  in der Datei "<b>~/.scid/scidrc</b>" (bzw.
<b>scid.opt</b> im Verzeichnis des ausfhrbaren Scid-Programms fr Windows-User);
diese Datei wird bei jedem Programmstart von Scid geladen.
</p>

<h3>Hilfe</h3>
<p>
Dieses Men enthlt die Hilfe-Funktionen sowie Zugriff auf das
"Tip-des-Tages"-Fenster oder das Startfenster, welches Informationen
ber die Dateien liefert, die Scid beim Programmstart geladen hat.
</p>

<p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}


########################
### Entering moves help:

set helpTitle(D,Moves) "Zge eingeben"
set helpText(D,Moves) {<h1>Schachzge eingeben</h1>
<p>
In Scid knnen Sie die Partiezge mit der Maus oder ber die
Tastatur eingeben. Wenn Sie den Mauszeiger auf ein Feld bewegen,
wird dieses und ein weiteres Feld seine Farbe ndern, falls es
einen legalen Zug auf dieses bzw. von diesem Feld gibt. Das ist
der <term>Zugvorschlag</term>. Sie knnen diesen Zug einfach durch
Klicken der <term>linken</term> Maustaste ausfhren. Falls Sie der
Zugvorschlag strt, knnen Sie ihn im Optionsmen abschalten.
</p>
<p>
Um einen anderen als den vorgeschlagenen Zug auszufhren, knnen Sie
die <term>linke</term> Maustaste verwenden: Drcken Sie einfach die
Taste ber einem Feld und lassen Sie sie ber einem anderen Feld los.
</p>
<p>
Wenn Sie es vorziehen, Zge mit zwei Mausklicks auszufhren statt mit
gedrckter Maustaste, knnen Sie die <term>mittlere</term> Taste
verwenden: Klicken Sie erst das eine Feld an, danach das andere.
</p>

<h4>Einen Zug zurcknehmen</h4>
<p>
Um einen Zug zurckzunehmen, drcken Sie die rechte Maustaste. Damit gehen
Sie einen Zug zurck; gleichzeitig lschen Sie diesen Zug, falls es der
letzte Zug der Partie oder einer Variante war.
</p>

<h4>Alte Zge ersetzen</h4>
<p>
Wenn Sie einen Zug an einer Stelle in der Partie eingeben, wo bereits
ein Zug existiert, wird Scid Sie in einem Dialogfenster fragen, ob Sie
wirklich den alten Zug ersetzen wollen (der alte Zug und alle nachfolgenden
sind dann verloren) oder statt dessen den neuen Zug als Variante eingeben
wollen. Manche Leute mgen dieses Dialogfenster als strend empfinden
und wollen alte Zge immer ersetzen. Sie knnen es daher im Men
<menu>Optionen: Zge</menu> mit der Option "<i>Vor Ersetzen nachfragen</i>"
abschalten.
</p>

<h4><name Trial>Der Testmodus</name></h4>
<p>
Wenn Sie eine Partie nachspielen und eine Position erreichen, wo Sie
eine alternative Variante am Brett ausprobieren wollen, ohne die Partie
zu verndern, whlen Sie <b>Variante testen</b> im Men <menu>Bearbeiten</menu>,
um den Testmodus einzuschalten. In diesem Modus knnen Sie Zge eingeben
und die Partie zeitweilig verndern; sobald Sie den Testmodus verlassen,
kehren Sie zur Ausgangsposition zurck.
</p>

<h3><name Mistakes>Fehler korrigieren</name></h3>
<p>
Wenn Sie eine Partie eingeben und pltzlich einige Zge vorher einen
falschen Zug bemerken, knnen Sie diesen korrigieren, ohne die
nachfolgenden Zge zu verlieren. Der einzige Weg besteht darin, die
PGN-Darstellung der Datei zu bearbeiten: ffnen Sie das
<a Import>Import</a>-Fenster, whlen Sie "Aktuelle Partie einfgen",
korrigieren Sie den falschen Zug, und whlen Sie dann "Importieren".
</p>

<h3>Zugeingabe ber die Tastatur</h3>
<p>
Um Zge ber die Tastatur einzugeben, drcken Sie einfach die jeweiligen
Buchstaben- und Zahlentasten. Die Zge sollten in <term>SAN-Notation</term>
<i>ohne</i> die Symbole fr Schlagen (x) oder Umwandeln (=) eingegeben
werden. Gro- und Kleinschreibung wird ignoriert, Sie knnen also
beispielsweise [n][f][3] anstelle von Nf3 eingeben  -- beachten Sie
aber die Anmerkung weiter unten zu den Konflikten bei Bauernzgen.
</p>
<p>
Um sicherzustellen, da kein Zug in einem anderen enthalten ist,
lautet die Eingabe fr die kurze und lange Rochade [0][K] resp. [0][Q]
anstelle der blichen Notation 0-0 bzw. 0-0-0.
</p>
<p>
Wenn Sie einen Zug eingeben, zeigt die Statusleiste die Liste der
mglichen Zge an. Sie knnen jederzeit die [Leertaste] drcken, um
den ersten mglichen Zug der Liste als Eingabe auszuwhlen.
Um ein Zeichen zu lschen, drcken Sie [Rck] oder [Entf].
</p>
<p>
<b>Beachten</b> Sie, da ein Kleinbuchstabe zuerst als Bauer
interpretiert wird; mit [b] kann also ein Bauer oder Lufer ("Bishop")
gemeint sein, im Zweifelsfall mssen Sie daher ein groes [B] fr den
Lufer verwenden.
</p>

<h4>Automatische Zugergnzung</h4>
<p>
Im Options-Men knnen Sie die <term>Automatische Zugergnzung</term>
ein- oder ausschalten.
Mit Zugergnzung wird ein Zug ausgefhrt, sobald er durch Ihre Eingabe
von jedem anderen mglichen Zug unterschieden werden kann. Beispielsweise
mten Sie mit automatischer Zugergnzung in der Ausgangsstellung nur
[n][f] statt <b>Nf3</b> eintippen.
</p>

<h3><name Null>Nullzge eingeben</name></h3>
<p>
<a Annotating Null>Null</a>- (leere) Zge knnen in Varianten ntzlich
sein, wenn Sie den Zug einer Seite auslassen wollen. Sie knnen einen
Nullzug mit der Maus eingeben, indem Sie einen Knig mit dem anderen
schlagen, oder mit der Tastatur, indem Sie "<b>--</b>" eingeben (d.h.
die Minustaste zweimal drcken).
</p>

<h3>Standard-Kommentarzeichen eingeben</h3>
<p>
Sie knnen die blichen <a NAGs>Kommentarzeichen</a> im Hauptfenster auch
ber die Tastatur ohne den <a Comment>Kommentar-Editor</a> hinzufgen.
Die folgende Liste zeigt Ihnen, welche Zeichen Sie mit welchen Tasten
eingeben knnen:
<ul>
<li> !  : [!][Eingabe] </li>
<li> ?  : [?][Eingabe] </li>
<li> !? : [!][?][Eingabe] </li>
<li> ?! : [?][!][Eingabe] </li>
<li> !! : [!][!][Eingabe] </li>
<li> ?? : [?][?][Eingabe] </li>
<li> </li>
<li> +- : [+][-] </li>
<li> +/-: [+][/] </li>
<li> += : [+][=] </li>
<li> =  : [=][Eingabe] </li>
<li> -+ : [-][+] </li>
<li> -/+: [-][/] </li>
<li> =+ : [=][+] </li>
</ul>

<p><footer>(Aktualisiert: Scid 3.4, Juli 2002)</footer></p>
}


#########################
### Searches help screen:

set helpTitle(D,Searches) "Suchen"
set helpText(D,Searches) {<h1>Suchen in Scid</h1>
<p>
Scid kann auf viele verschiedene Weisen in einer Datenbank suchen.
Die drei wichtigsten Arten zu suchen sind:
<ul>
<li><b>1)</b> nach der aktuellen Brettposition, </li>
<li><b>2)</b> nach angegebenem Material und Stellungsmustern, </li>
<li><b>3)</b> nach Partiedaten-Informationen wie Spieler, Ergebnis, Datum. </li>
</ul>
<p>
Auerdem gibt es noch einen automatischen Suchmodus, den sog.
<a Tree>Zugbaum</a>, der an anderer Stelle erklrt wird.
</p>

<h3><name Filter>Der Such-Filter</name></h3>
<p>
Suchen basiert bei Scid auf dem Konzept eines <term>Filters</term>.
Der Filter reprsentiert eine Teilmenge der aktuellen Datenbank;
eine Partie ist immer entweder im Filter enthalten oder vom
Filter ausgeschlossen.
</p>
<p>
Bei jeder Art der Suche knnen Sie whlen, den vorhandenen Filter
weiter einzugrenzen, zu diesem hinzuzufgen oder ihn zu ignorieren
und die gesamte Datenbank zu durchsuchen. Diese Auswahl erlaubt es,
komplexe Suchvorgnge nacheinander aufzubauen.
</p>
<p>
Sie knnen auch mit dem <a Switcher>Datenbank-Umschalter</a> alle Partien
im Filter einer Datenbank in eine andere Datenbank kopieren.
</p>
<p>
Bei der Suche nach einer exakten Postion, der <a Tree>Zugbaum</a>- oder
Material/Muster-Suche wird die Zugnummer der ersten passenden Position
jeder passenden Partie gespeichert; wenn Sie also jede dieser Partien
laden, wird automatisch die passende Stellung angezeigt.
</p>
<p>
<b>Beachten</b> Sie, da beim Suchen nur mit den Partiezgen
verglichen wird, nicht mit den Zgen der Varianten.
</p>

<h3><name Board>Suchen: Brett...</name></h3>
<p>
Hier finden Sie Partien, die die gerade dargestellte Position enthalten,
ohne Bercksichtigung der Rochade- und <i>en-passant</i>-Rechte.
</p>
<p>
Vier Suchtypen stehen zur Verfgung. Alle vier verlangen von einer
passenden Stellung exakt gleiches Material und die gleiche Seite am Zug.
Die Typen sind:
<ul>
<li> [1] exakt (die beiden Stellungen mssen auf jedem Feld bereinstimmen),
     </li>
<li> [2] Bauern (die Bauernstruktur mu bereinstimmen, aber andere Figuren
     knnen irgenwo stehen), </li>
<li> [3] Linien (die Anzahl weier und schwarzer Bauern auf jeder Linie mu
     bereinstimmen, aber andere Figuren knnen irgendwo stehen), and </li>
<li> [4] Material (Bauern und Figuren knnen irgendwo stehen). </li>
</ul>
<p>
Die Bauernsuche ist hilfreich, um Erffnungen nach Bauernstrukuren zu
studieren, und Linien- und Materialsuche helfen beim Auffinden hnlicher
Endspielstellungen.
</p>
<p>
Um nach einer beliebigen Stellung zu suchen, knnen Sie zuerst
die Position aufbauen (im Men <menu>Bearbeiten: Stellungseingabe</menu>)
und dann die Suche starten.
</p>
<p>
Sie knnen Varianten (statt nur die jeweiligen Partiezge) durchsuchen,
indem Sie den Schalter <b>Schaue in Varianten</b> whlen; das kann
aber die Suche stark verlangsamen, falls die Datenbank sehr gro ist
und viele Partien mit Varianten enthlt.
</p>

<h3><name Material>Suchen: Material/Muster</name></h3>
<p>
Diese Suche ist ntzlich, um End- oder Mittelspielthemen zu finden. Sie
knnen eine minimale und maximale Anzahl von Figuren jeden Typs angeben,
und Sie knnen Stellungsmuster wie Lufer auf f7 oder f-Bauer finden.
</p>
<p>
Eine Reihe von hufigen Materialkonstellationen und Stellungsmustern
sind schon bereitgestellt, wie etwa "Endspiel Turm gegen Bauern" oder
"isolierter Damenbauer".
</p>
<p>
<b>Hinweise:</b><br>
Die Geschwindigkeit der Suche nach Stellungsmustern kann stark variieren.
Sie knnen aber durch eine geschickte Wahl der Bedingungen die bentigte
Zeit reduzieren. Wenn Sie beispielsweise fr ein Endspiel die Mindestzahl
von Zgen auf 20 setzen, werden alle Partien, die vor dem 20. Zug enden,
bersprungen.
</p>

<h3><name Header>Suchen: Partiedaten</name></h3>
<p>
Mit dieser Suche knnen Sie Partiedaten finden, die im Vorspann ("Header")
gespeichert sind (wie z.B. Datum, Ergebnis, Namen und Wertungszahlen),
es mssen daher keine Partiezge dekodiert werden.
</p>
<p>
Um bei der Suche nach Partiedaten eine passende Partie zu finden,
mssen <b>alle</b> von Ihnen angegebenen Felder bereinstimmen.
</p>
<p>
Die Namensfelder (Wei, Schwarz, Turnier, Ort und Runde) passen auf
jeden Text im Namen, ohne Bercksichtigung von Gro- und Kleinschreibung
oder Leerzeichen.
</p>
<p>
Sie knnen fr das Wei-, Schwarz-, Turnier-, Ort- und Rundenfeld mit
Unterscheidung von Gro- und Kleinschreibung und mit "Wildcards" suchen
(mit <b>?</b> fr ein und <b>*</b> fr null oder mehr Zeichen), indem
Sie den Suchtext in Anfhrungszeichen setzen. Eine Suche mit der Ortsangabe
<b>USA</b> wird beispielsweise amerikanische Stdte finden, aber auch
<b>Lausanne SUI</b>, was vermutlich nicht von Ihnen beabsichtigt war! Eine
Suche mit dem Ort <b>"*USA"</b> (denken Sie an die Anfhrungszeichen)
liefert dagegen nur Stdte in den USA.
</p>
<p>
Wenn Sie einen bestimmten Spieler (oder zwei bestimmte Kontrahenten) als
Wei oder Schwarz suchen und die jeweilige Farbe keine Rolle spielt,
whlen Sie die Option <b>Farben ignorieren</b>.
</p>
<p>
Schlielich kann die Suche nach Partiedaten auch verwendet werden, um
irgendeinen Text (mit Bercksichtigung von Gro- und Kleinschreibung,
ohne "Wildcards") in der PGN-Darstellung dieser Partie zu finden. Sie
knnen bis zu drei Textteile eingeben, und sie mssen alle in einer
passenden Partie vorkommen.
Diese Methode ist sehr hilfreich, um in den Kommentaren oder zustzlichen
Daten einer Partie zu suchen (wie <b>Zeitberschreitung</b> oder
<b>Kommentator</b>), oder nach einer Zugfolge wie <b>Bxh7+</b> und
<b>Kxh7</b> fr ein angenommenes Luferopfer auf h7.
Allerdings kann diese Art zu suchen <i>sehr</i> langsam sein, da alle
Partien, auf die andere Kriterien zutreffen, dekodiert und auf diese
Texte durchsucht werden mssen.
Es ist daher eine gute Idee, diese Suchen so weit wie mglich einzugrenzen.
Hier sind einige Beispiele:
Um Partien mit einer Unterverwandlung in einen Turm zu finden,
suchen Sie nach <b>=R</b> und setzen gleichzeitig die Markierung
<b>Umwandlung</b> auf Ja.
Wenn Sie nach Text in Kommentaren suchen, setzen Sie die Markierung
<b>Kommentare</b> auf Ja.
Falls Sie nach den Zgen <b>Bxh7+</b> und <b>Kxh7</b> suchen, mchten
Sie z.B. die Suche mglicherweise auf Partien mit dem Ergebnis 1-0 und
mit mindestens 40 Halbzgen beschrnken, oder Sie suchen zuerst nach
Material oder Stellungsmustern, um Partien mit einem weien Luferzug
nach h7 zu finden.
</p>

<h3><name Settings>Sucheinstellungen sichern</name></h3>
<p>
Die Suchfenster Material/Mustern und Partiedaten besitzen einen Schalter
zum <term>Speichern</term>. Das ermglicht Ihnen, die aktuellen
Sucheinstellungen zur spteren Verwendung in einer
<term>Suchoptions</term>-Datei zu speichern (Endung .sso).
Um mit Hilfe einer vorher gespeicherten Suchoptionsdatei (.sso) zu
suchen, whlen Sie <menu>ffnen</menu> im Men <menu>Suchen</menu>.
</p>

<h3>Suchdauer und bergangene Dateien</h3>
<p>
Die meisten Suchen liefern eine Nachricht, die die bentigte Zeit und
die Anzahl der <term>bergangenen</term> Partien angibt. Eine bergangene
Partie ist eine, die aufgrund der im Index gespeicherten Informationen
von der Suche ausgeschlossen werden kann, ohne da ihre Zge dekodiert
werden mssen. Siehe die Hilfeseite ber
<a Formats>Dateiformate</a> fr weitergehende Informationen.
</p>

<p><footer>(Aktualisiert: Scid 3.0, November 2001)</footer></p>
}


############
### Clipbase

set helpTitle(D,Clipbase) "Die Ablage-Datenbank"
set helpText(D,Clipbase) {<h1>Die Ablage-Datenbank</h1>
<p>
Zustzlich zu den geffneten Datenbanken stellt Scid eine
<term>Ablage-Datenbank</term> (als Datenbank 5) zur Verfgung, welche
sich wie eine normale Datenbank verhlt, mit der Ausnahme, da sie
nur im RAM-Speicher existiert und keine Dateien zur Speicherung auf
der Festplatte besitzt.
</p>
<p>
Die Ablage-Datenbank (kurz: Ablage) ist ntzlich als eine temporre
Datenbank, zum Zusammenfhren von Suchergebnissen aus Suche in
mehreren Datenbanken oder zur Behandlung der Suchergebnisse als eine
eigenstndige Datenbank.
</p>
<p>
Angenommen, zum Beispiel, man will sich auf einen Gegner vorbereiten, und
hat eine Datenbank auf alle Partien des Gegners mit Wei durchsucht,
so da diese Partien im <a Searches Filter>Filter</a> sind.
Man kann nun diese Partien in die Ablage kopieren (durch Ziehen mit der
rechten Maustaste von der Originaldatenbank zur Ablage, im Fenster
<a Switcher>Datenbank-Umschalter</a>), danach im Datei-Men die Ablage
als aktive Datenbank auswhlen, und dann kann man sich im
<a Tree>Zugbaumfenster</a> das Erffnungsrepertoire des Gegners
ansehen.
</p>
<p>
Sind 2 Datenbanken geffnet, und hat man im Filter Partien, die man
von der einen Datenbank in die andere kopieren mchte, kann man dies
direkt (ohne Umweg ber die Ablage) tun. Dazu benutzt man wiederum das
Fenster <a Switcher>Datenbank-Umschalter</a>.
</p>
<p>
Die Ablage kann nicht geschlossen werden: mit dem Befehl
<menu>Ablage leeren</menu> aus dem Men <menu>Bearbeiten</menu> wird
der Inhalt der Ablage gelscht.
</p>
<p>
Die Ablage-Datenbank ist begrenzt auf 10.000 Partien zur gleichen Zeit,
da sie nur im Speicher existiert.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


#################################
### Variations and comments help:

set helpTitle(D,Annotating) "Partien kommentieren"
set helpText(D,Annotating) {<h1>Partien kommentieren</h1>
<p>
Mit Scid knnen Sie den Partien Anmerkungen hinzufgen. Es gibt
drei Arten von Anmerkungen, die Sie nach einem Zug eingeben knnen:
Symbole, ein Kommentar und Varianten.
</p>

<h3>Symbole und Kommentare</h3>
<p>
Symbole verwendet man, um eine Stellungsbeurteilung anzuzeigen
(etwa "+-" or "=") oder um auf gute ("!") und schlechte ("?")
Zge hinzuweisen, whrend ein Kommentar ein beliebiger Text sein
kann. Zur Eingabe von Symbolen und Kommentaren benutzen Sie den
<a Comment>Kommentar-Editor</a>. Es gibt auch eine Hilfeseite, in
der die <a NAGs>Standard-Symbolwerte</a> aufgelistet sind.
</p>
<p>
Beachten Sie, da jeder Zug mehr als ein Anmerkungssymbol haben kann,
aber nur einen Kommentar. Ein Kommentar vor dem ersten Partiezug wird
als Text vor dem Beginn der Partie ausgegeben.
</p>

<h3><name Vars>Varianten</name></h3>
<p>
Eine <term>Variante</term> eines Zuges ist eine alternative Zugfolge
an einem bestimmten Punkt der Partie. Varianten knnen Kommentare
enthalten und sogar rekursiv Untervarianten. Mit den Schaltern oberhalb
des Schachbretts mit einem "<b>V</b>"-Symbol sowie den Kommandos im
Men <menu>Bearbeiten</menu> kann man Varianten erstellen, editieren
und sich darin bewegen.
</p>

<h4>Tastatureingaben</h4>
<p>
Wenn es zu einem Zug Varianten gibt, werden sie im Informationsbereich
angezeigt. Die erste wird mit <b>v1</b> bezeichnet, die zweite mit
<b>v2</b> etc. Um in eine Variante zu gehen, knnen Sie sie anklicken
oder "<b>v</b>" gefolgt von der Variantennummer eingeben. (Falls es
nur eine Variante gibt, gengt die Eingabe von <b>v</b>.)
Mit der Taste "<b>z</b>" verlassen Sie die Variante wieder.
</p>

<h3><name Null>Nullzge</name></h3>
<p>
Gelegentlich kann es in einer Variante ntzlich sein, den Zug einer
Seite auszulassen. Beispiel: Sie wollen den Zug 14.Ld3 als Variante
hinzufgen und mchten darauf hinweisen, da er 15.Lxh7+ Kxh7 16.Sg5+
mit Angriff droht. Das knnen Sie erreichen, indem Sie im obigen
Beispiel einen <term>Nullzug</term> zwischen 14.Ld3 und 15.Bxh7+
ausfhren. Ein Nullzug wird als "<b>--</b>" dargestellt und kann
eingefgt werden, indem Sie mit der Maus den illegalen Zug "Knig
schlgt Knig" ausfhren oder mit der Tastatur "<b>--</b>" (zwei
Minuszeichen) eingeben.
</p>
<p>
Beachten Sie, da Nullzge nicht zum PGN-Standard gehren, wenn Sie
also Partien mit Nullzgen in eine PGN-Datei exportieren, wird Scid
(neben einigen anderen Exportoptionen) eine Option anbieten,
Nullzge zu erhalten oder sie in Kommentare umzuwandeln, damit
Kompatibilitt zu anderen Programmen gewahrt bleibt.
Siehe auch die <a Export>Export</a>-Hilfeseite.
</p>

<p><footer>(Aktualisiert: Scid 3.4, Juli 2002)</footer></p>
}


####################
### Analysis window:

set helpTitle(D,Analysis) "Analysefenster"
set helpText(D,Analysis) {<h1>Das Analysefenster</h1>
<p>
Scids Analysefenster zeigt die Analyse der aktuellen Brettstellung
durch ein Schachprogramm (eine sog. <term>Engine</term>).
Immer, wenn sich die Brettstellung ndert, bermittelt Scid die neue
Position an die Engine, und die zeigt ihre Einschtzung dieser Stellung.
</p>
<p>
Die Bewertung im Analysefenster erfolgt immer aus der Perspektive
von Wei, eine negative Bewertung heit also, da Schwarz besser steht.
Der untere Fensterbereich (mit dem Rollbalken) zeigt den Verlauf der
Auswertungen der aktuellen Stellung durch die Engine, Sie knnen also
sehen, wie sich die Einschtzung verndert hat.
</p>
<p>
Um den von der Engine ausgewhlten besten Zug als neuen Zug der
aktuellen Partie zu nehmen, klicken Sie einfach auf den Schalter
<b>Zug hinzufgen</b>.
</p>
<p>
Tip: ber die Tasten F2 und F3 knnen direkt die letzten beiden Analyse-Engines gestartet werden, ohne dies nochmal auswhlen zu mssen.
</p>

<h3><name List>Die Liste der Analyse-Engines</name></h3>
<p>
Scid behlt eine Liste der von Ihnen benutzen Engines mit einer
geschtzten Elo-Zahl (wenn Sie eine Schtzung machen) und dem Datum
der letzten Benutzung. Sie knnen diese Liste nach Namen, Elo-Zahl
oder Datum sortieren.
Whlen Sie <b>Neu</b> oder <b>Bearbeiten</b>, um eine neue Engine
zur Liste hinzuzufgen oder Details eines bestehenden Eintrags zu
bearbeiten.
</p>

<h3><name Start>Engine-Kommandos und Verzeichnisse</name></h3>
<p>
Fr jede Engine mssen Sie die aufzurufende Programmdatei angeben
und das Verzeichnis, in dem Scid sie starten soll.
</p>
<p>
Die hufigste Ursache von Problemen beim Start einer Engine ist die Wahl
des Verzeichnisses, in dem die Engine laufen soll. Einige Engines
bentigen eine Initialisierung oder eine Erffnungsbuchdatei in ihrem
Startverzeichnis, um ordnungsgem zu laufen.
Andere Engines (so wie Crafty) schreiben Logdateien in dem Verzeichnis,
in dem sie gestartet wurden, Sie mssen sie also in einem Verzeichnis
aufrufen, fr das Sie Schreibrecht haben.
Wenn fr das Verzeichnis einer Engine "." angegeben ist, wird Scid sie
einfach im aktuellen Verzeichnis starten.
</p>
<p>
Wenn also eine Engine, die in Scid laufen sollte, nicht startet,
versuchen Sie es mit anderen Verzeichniseinstellungen. Um zu vermeiden,
da Engines Logdateien in vielen verschiedenen Verzeichnissen erstellen,
empfehle ich, Engines im Verzeichnis der Scid-Benutzerdateien zu starten
(da, wo sich die Datei <b>scid.exe</b> bei Windows befindet bzw.
<b>~/.scid/</b> bei Unix); in der Dialogbox fr die Engine-Einstellungen
gibt es einen Schalter <b>scid.exe dir</b> fr Windows bzw. <b>~/.scid</b>
fr Unix, mit dem Sie die Engine in diesem Verzeichnis starten lassen
knnen.
</p>

<h3>Training</h3>
<p>
Mit dem Schalter <b>Training</b> knnen Sie gegen die Analyse-Engine
spielen. Die Bedenkzeit fr jeden Zug ist fest vorgegeben und die
Analyse-Ergebnisse werden nicht angezeigt, wenn der Trainingsmodus
eingeschaltet ist.
</p>

<h3>Partie kommentieren</h3>
<p>
Der Schalter <b>Variante hinzufgen</b> im Analysefenster fgt die
laufende Bewertung und beste Variante als neue Variante der Partie hinzu.
</p>
<p>
Man kann das fr mehrere Zge mit dem Schalter <b>Kommentieren</b>
automatisieren. Sie werden zur Eingabe einiger Kommentar-Optionen
aufgefordert, dann wird in den Autoplay-Modus geschaltet.
Wenn der Autoplay-Modus aktiviert und das Analysefenster geffnet ist,
wird die beste Variante mit Stellungsbewertung zu jeder Position
hinzugefgt, da sich der Autoplay-Modus durch die Partie bewegt.
Nur Stellungen von der aktuellen Stellung bis zum Partieende (oder bis
zum Abbruch des Autoplay-Modus) werden kommentiert, so da Sie Kommentare
zu Erffungszgen unterdrcken knnen, indem Sie vor Aktivierung des
Autoplay-Modus zu einer Mittelspielstellung gehen.
</p>
<p>
Die automatische Kommentierung kann jederzeit durch Ausschalten des
Autoplayer-Modus abgebrochen werden, z.B. durch Drcken der
<b>Esc</b>-Taste im Hauptfenster.
</p>
<p>
Zur Vereinfachung steht der <b>Kommentar</b>-Schalter nur in dem Fenster
zur Verfgung, das als erste Analyse-Engine geffnet wurde. Wenn Sie
eine Engine als Analyse-Engine Nr.2 ffnen, knnen Sie sie nicht zur
Partiekommentierung nutzen.
</p>

<h3>Das Analysebrett</h3>
<p>
Anklicken des Schachbrett-Icons in einem Analysefenster zeigt oder
versteckt das Analysebrett, welches die Position nach der aktuell
besten Variante der Engine zeigt. Das funktioniert fr die meisten
Scid-kompatiblen Engines, aber nicht unbedingt fr alle; es hngt
ganz davon ab, welche Zugnotation eine Engine verwendet.
</p>

<h3>Engine-Prioritt</h3>
<p>
Falls eine Engine zu viel CPU-Zeit verbraucht und die Benutzung von
Scid oder anderen Applikationen beeintrchtigt, kann das Einschalten
der Checkbox <b>Niedrige CPU-Prioritt</b> helfen; es weist der
Engine eine geringe Prioritt frs Proze-Scheduling zu.
</p>

<h3>Schnittstellen-Details</h3>
<p>
Fr die Benutzung des Analysefensters bentigen Sie ein Schachprogramm,
welches das <term>UCI</term> oder <term>WinBoard/Xboard</term>-Protokoll untersttzt.
</p>
<p>
Bei Winboard-Engines sendet Scid beim Programmstart die Befehle <b>xboard</b>, <b>post</b> und
<b>protover 2</b> zur Engine, und nutzt die Befehle <b>setboard</b>
und <b>analyze</b> zur effizienteren Kommunikation, wenn die Engine in
ihrer Antwort anzeigt, da sie diese untersttzt.
Wenn die Engine den Befehl <b>setboard</b> nicht untersttzt, wird sie
fr Partien, die nicht mit der Standard-Ausgangsstellung beginnen, keine
Analysen liefern knnen.
</p>
<p>
Programmen, die den Befehl <b>analyze</b> nicht untersttzen, sendet
Scid nach jeder nderung der Stellung folgende Kommandos: <b>new</b>
und <b>force</b>, dann die Partiezge zur aktuellen Position, danach
<b>go</b>.
</p>
<p>
Bob Hyatt's exzellentes frei verfgbares Schachprogramm <term>Crafty</term>
benutze und empfehle ich zur Analyse mit Scid. Aber auch andere WinBoard-
oder XBoard-kompatible Programme sind erfolgreich getestet worden.
Ein paar Websites zum Herunterladen einiger Engines sind nachfolgend
aufgefhrt.
</p>
<p>
Crafty:
<url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url>
</p>
<p>
wbec-ridderkerk.nl (mit vielen Links auf aktuelle Schach-Engines):
<url http://wbec-ridderkerk.nl/html/lastupdates.htm>http://wbec-ridderkerk.nl/html/lastupdates.htm</url>
</p>
<p>
Gnuchess:
<url http://www.gnu.org/software/chess/chess.html>http://www.gnu.org/software/chess/chess.html</url>
</p>
<p>
The Crazy Bishop:
<url http://remi.coulom.free.fr/>http://remi.coulom.free.fr/</url>
</p>

<p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}


###############################
### Comment editor window help:

set helpTitle(D,Comment) "Kommentareditor"
set helpText(D,Comment) {<h1>Der Kommentareditor</h1>
<p>
Mit dem Kommentareditor knnen Sie den Zgen der aktuellen Partie
Kommentare und symbolische Kommentarzeichen hinzufgen.
</p>

<h3>Kommentarzeichen</h3>
<p>
Scid verwendet den <a Author Related>PGN-Standard</a> fr
Kommentarzeichen und akzeptiert <a NAGs>NAG</a>-Werte fr Anmerkungen
(NAG = numeric annotation glyph, "numerisches Anmerkungszeichen").
Einige der meistgebruchlichen Symbole (wie "!" oder "+-") werden als
solche ausgegeben und haben zur schnelleren Eingabe einen Schalter im
Kommentareditor. Fr andere Symbole knnen Sie den jeweiligen numerischen
NAG-Wert, eine Zahl von 1 bis 255, eingeben. Zum Beispiel bedeutet
der NAG-Wert 36 "Wei besitzt die Initiative" und wird im
<a PGN>PGN-Text</a> der Partie als "$36" ausgegeben.
</p>
<p>
Zu den NAG-Werten, die durch den PGN-Standard definiert werden,
siehe auch die Hilfeseite <a NAGs>NAG-Werte</a>.
</p>
<p>
<b>Hinweis:</b> Sie knnen die blichen Bewertungssymbole fr Schachzge
(!, ?, !!, ??, !? und ?!) direkt im Haupfenster eingeben, ohne den
Kommentareditor zu verwenden, indem Sie das jeweilige Symbol gefolgt
von der [Eingabe]-Taste eintippen.
Das ist besonders ntzlich beim <a Moves>Schachzge eingeben</a>
ber die Tastatur.
</p>

<h3>Kommentare</h3>
<p>
Sie knnen Kommentare im bereitgestellten Textbereich editieren und
dabei die Leeren-, Umkehren- und Speichern-Schalter verwenden.
Sie brauchen den Schalter "Speichern" nicht anzuklicken, um einen Kommentar
zu aktualisieren; dies geschieht automatisch, wann immer Sie zu einer
anderen Partiestellung gehen.
</p>

<h3>Felder einfrben</h3>
<p>
Sie knnen jedes Feld mit einer beliebigen Farbe einfrben, indem Sie
ein besonderes, an irgendeiner Stelle im Kommentar eingebettetes
Kommando verwenden. Das Format dieses Kommandos ist:
</p>
<ul>
<li><b>[%mark feld farbe]</b> ,<li>
</ul>
<p>
wobei <b>feld</b> ein Feldname wie d4 ist und <b>farbe</b> irgendeine
bekannte Farbbezeichnung (wie etwa red, blue4, darkGreen,
lightSteelBlue, etc.) oder ein RGB-Code (ein <b>#</b> gefolgt von 6
Hexadezimalziffern, wie z.B. #a0b0c8). Die Standardfarbe,
falls die Farbangabe weggelassen wird, ist <red>Rot</red>.
</p>
<p>
Ein Kommentar kann eine beliebige Anzahl von Farbkommandos enthalten,
aber jedes mu ein eigenes <b>[%mark ...]</b>-Tag-Feld haben.
Beispielsweise wird der Kommentartext</p>
<p>
  "Jetzt ist d6 [%mark d6] geschwcht und kann vom Springer auf
  b5 [%mark b5 #000070] angegriffen werden."
</p>
<p>
das Feld d6 <red>rot</red> und das Feld b5 in der dunkelblauen Farbe
<darkblue>#000070</darkblue> einfrben.
</p>

<h3>Pfeile einzeichnen</h3>
<p>
Sie knnen mit einem speziellen Kommentar-Kommando, hnlich dem oben
beschriebenen zum Frben von Feldern, einen Pfeil von einem Feld zum
anderen zeichnen.
Das Format ist:
</p>
<ul>
<li><b>[%arrow vonFeld nachFeld farbe]</b><li>
</ul>
<p>
wobei <b>vonFeld</b> und <b>nachFeld</b> Feldbezeichnungen wie d4
sind und <b>farbe</b> ein bekannter Farbname (wie z.B. red, blue4, etc.)
oder RGB-Code (wie #a0b0c0) ist.
Ohne Farbangabe wird standardmig <red>Rot</red> genommen.
</p>
<p>
Beispiel: Der Kommentartext
</p>
<p>
"Springer auf c3 und Lufer auf c4 kontrollieren das schwache Feld d5.
 [%arrow c3 d5 red] [%arrow c4 d5 blue]"
</p>
<p>
zeichnet einen roten Pfeil von c3 nach d5 und einen blauen von c4 nach d5.
</p>

<p><footer>(Aktualisiert: Scid 3.2, Februar 2002)</footer></p>
}


###########################
### Crosstable window help:

set helpTitle(D,Crosstable) "Kreuztabelle"
set helpText(D,Crosstable) {<h1>Das Kreuztabellenfenster</h1>
<p>
Das Kreuztabellenfenster zeigt die Turnierkreuztabelle zur aktuellen
Partie. Jedesmal, wenn sie das Fenster aktualisieren (indem Sie den
"Aktualisieren"-Schalter anklicken, im Kreuztabellenfenster die
[Eingabe]-Taste drcken oder im <a MainWindow>Haupt</a>- oder
<a GameList>Partielisten</a>-Fenster die Tastenkombination
<b>[Strg]-[Umschalt]-X</b> bettigen), sucht Scid alle Partien
vom selben Turnier wie die aktuelle Partie.
</p>
<p>
Jede Partie, die bis zu <b>drei Monate vor oder nach</b> der aktuellen
Partie gespielt wurde und <b>exakt dieselben Turnier- und Ortsangaben</b>
enthlt, wird als Partie dieses Turniers betrachtet.
</p>
<p>
Ein Einfachklick mit der linken Maustaste auf irgendein Ergebnis in der
Kreuztabelle ldt die entsprechende Partie.
Sie knnen alle Partien des Turniers mit dem Schalter
<b>Zum Filter addieren</b> des Kreuztabellenfensters zum
<a Searches Filter>Filter</a> hinzufgen.
</p>

<h4>Mens des Kreuztabellenfensters</h4>
<p>
Im <menu>Datei</menu>-Men knnen Sie die aktuelle Tabelle im Text-,
LaTeX- oder HTML-Format in eine Datei ausgeben.
</p>
<p>
Das <menu>Ausgabe</menu>-Men erlaubt Ihnen, das Tabellenformat
auszuwhlen: <b>Jeder gegen jeden</b>, <b>Schweizer System</b>,
<b>K.o.-System</b> oder <b>Automatisch</b>.
</p>
<p>
Das Format "Jeder gegen jeden" (fr Rundenturniere) ist auf 30 Spieler
limitiert, aber "Schweizer System" (fr Turniere mit vielen Spielern)
kann bis zu 200 Spieler und 20 Runden ausgeben. Die Standardeinstellung
ist <b>Automatisch</b>, was fr jedes Turnier das beste Format auswhlt.
</p>
<p>
Beachten Sie, da Scid den <b>Runden</b>-Eintrag jeder Partie verwendet,
um eine Kreuztabelle nach Schweizer System zu erstellen, Sie werden daher
keine Partien in der Schweizer-System-Tabelle sehen, wenn sie keine
numerischen Runden-Angaben haben:  1, 2, 3, etc.
</p>
<p>
Im Ausgabe-Men knnen Sie auch das Format der Datenausgabe nach Ihren
Wnschen einstellen, um Wertungszahlen, Lnder oder Titel ein- oder
auzublenden. Sie knnen auch whlen, ob beim Schweizer System die
Farbzuteilung angezeigt werden soll.
</p>
<p>
Die Option <b>Punktgruppen</b> wirkt sich nur dann auf das Aussehen der
Tabelle aus, wenn die Spieler nach Punkten sortiert werden: sie bewirkt
das Einfgen einer Leerzeile zwischen Spielergruppen mit gleicher Punktzahl.
</p>
<p>
Das Men <menu>Sortieren</menu> erlaubt es Ihnen, die Spieler nach
Namen, Elo-Zahlen oder Punkten zu sortieren; Standardeinstellung ist
nach Punkten.
</p>
<p>
Das <menu>Farben</menu>-Men ermglicht es Ihnen, Farbausgabe (Hypertext)
ein- oder auszuschalten. Da es sehr zeitaufwendig ist, groe Kreuztabellen
in HTML zu formatieren und auszugeben, wird Ihnen die Option <b>Text</b>
bei groen Turnieren eine Menge Zeit einsparen.
Allerdings knnen Sie im Text-Modus keine Spieler oder Partien anklicken.
</p>

<h4>Dubletten in Kreuztabellen</h4>
<p>
Um sinnvolle Resultate mit der Kreuztabelle zu erzielen, sollten Sie
Dubletten zum Lschen markieren, und Ihre Partien sollten eine
einheitliche Schreibweise fr Spieler-, Orts- und Turniernamen haben.
Zu Hilfen beim Lschen der Dubletten und Editieren (oder berprfen
der Schreibweisen) von Spieler-, Turnier-, Ortsnamen siehe die Seite
<a Maintenance>Datenbank-Wartung</a>.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


###########################
### Database switcher help:

set helpTitle(D,Switcher) "Datenbank-Umschalter"
set helpText(D,Switcher) {<h1>Der Datenbank-Umschalter</h1>
<p>
Der Datenbank-Umschalter bietet eine Darstellung, die es besonders
einfach macht, zwischen Datenbanken zu wechseln oder Dateien zu kopieren.
Der Name, <a Searches Filter>Filter</a>-Status und Icon jeder Datenbank
werden angezeigt, und die aktive Datenbank ist durch einen gelben
Hintergrund hervorgehoben.
</p>
<p>
Sie knnen den Datenbank-Umschalter aus dem <menu>Fenster</menu>-Men
starten oder durch die Tastenkombination <b>Strg+D</b>.
</p>
<p>
Um alle ausgewhlten (gefilterten) Dateien einer Datenbank in eine andere
zu kopieren, ziehen Sie sie mit gedrckter linker Maustaste in das Zielfeld.
Sie sehen dann eine Nachfrage (falls die Zieldatenbank nicht die
<a Clipbase>Ablage</a> ist), ob die Dateien kopiert werden sollen, oder
eine Fehlermeldung, falls die Dateien nicht kopiert werden knnen
(z.B. wenn die gewhlte Datenbank nicht geffnet ist).
</p>
<p>
Drcken Sie die rechten Maustaste ber einer Datenbank, erscheint ein
Kontextmen zu dieser Datenbank, mit dem Sie das Datenbank-Icon ndern oder
den <a Searches Filter>Filter</a> zurcksetzen knnen.
In diesem Men knnen Sie auch die Fensterausrichtung ndern (um die
Datenbankfelder vertikal oder horizontal anzuordnen), was fr kleinere
Bildschirme recht ntzlich ist.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


######################
### Email window help:

set helpTitle(D,Email) "Email-Fenster"
set helpText(D,Email) {<h1>Das Email-Fenster</h1>
<p>
Scids Email-Manager ermglicht es Ihnen, Ihre Email-Fernschachkorrespondenz
zu verwalten.
Wenn Sie kein Email-Schach  spielen, ist dies fr Sie nicht von
Interesse. Aber wenn Sie Fernschach per Email spielen, knnen Sie
Ihre Email-Nachrichten direkt von Scid aus versenden!
</p>
<p>
Um den Email-Manager zu benutzen:
<ul>
<li><b>1)</b> Erstellen Sie die Partie(en) fr Ihren Gegner
    in der Datenbank. </li>
<li><b>2)</b> Whlen Sie <b>Hinzufgen</b> im Email-Manager und geben
    Sie die Daten Ihrer Gegner ein: Name, Email-Adresse und die Zahl
    der Partien in der Datenbank. </li>
<li><b>3)</b> Whlen Sie <b>Email versenden</b> im Email-Fenster, wenn
    Sie Partiezge ausgefhrt haben und eine Nachricht versenden wollen. </li>
</ul>

<p>
Wenn Sie eine E-Mail verschicken, erstellt Scid die Nachricht mit den
Partien im PGN-Format <b>ohne</b> jegliche Kommentare, Anmerkungen oder
Varianten, denn Sie wollen Ihrem Gegner in der Regel nicht Ihre Analysen
zeigen.  Bevor Sie die Nachricht verschicken, knnen Sie sie noch
editieren, um bedingte Zge oder sonstigen Text hinzuzufgen.
</p>
<p>
Fr jeden Gegner knnen Sie eine beliebige Anzahl von Partien haben;
meistens sind es eine oder zwei. Beachten Sie, da Scid nicht berprft,
ob sich die Zahl der Partien gendert hat. Passen Sie also auf, da Sie
nicht Partien lschen oder die Datenbank sortieren, nachdem Sie die Daten
Ihrer Gegner eingegeben haben, denn das wrde die Partien umstellen und
die Partienummern fr Ihre Gegner wren nicht mehr korrekt.
</p>

<h3>Einschrnkungen</h3>
<p>
Scid besitzt noch nicht die Fhigkeit, Ihren E-Mail-Ordner zu berprfen,
Sie mssen daher die Zge Ihrer Kontrahenten manuell eingeben.
</p>

<h3>Konfiguration</h3>
<p>
Eine Kopie jeder von Scid gesendeten E-Mail wird in der Datei
<b>~/.scid/scidmail.log</b> gespeichert. Wenn
Sie sie in einer anderen Datei speichern mchten, mssen Sie die Datei
<b>tcl/start.tcl</b> bearbeiten und Scid neu erstellen ("make scid").
</p>
<p>
Scid kann E-Mails ber einen SMTP-Server oder mit sendmail versenden.
Mit dem Schalter <b>Einstellungen</b> im E-Mail-Manager knnen Sie
auswhlen, welche Mglichkeit Sie verwenden wollen.
</p>
<p>
Scid speichert die Daten Ihrer Gegner fr eine Datenbank in einer Datei
mit demselben Namen wie die Datenbank und der Endung "<b>.sem</b>".
</p>

<p><footer>(Aktualisiert: Scid 3.0, November 2001)</footer></p>
}


############################
### File Finder window help:

set helpTitle(D,Finder) "Dateifinder"
set helpText(D,Finder) {<h1>Das Dateifinderfenster</h1>
<p>
Der <term>Dateifinder</term> hilft Ihnen, Dateien jedes von Scid
benutzten Typs zu finden:  Datenbanken, <a PGN>PGN</a>-Dateien,
<a EPD>EPD</a>-Dateien und <a Repertoire>Repertoire</a>-Dateien.
</p>
<p>
Der Finder zeigt Ihnen ntzliche Informationen zu jeder Datei, wie
etwa ihre Gre (siehe unten) und Datum der letzten Modifikation.
Sie knnen jede angezeigte Datei durch einen linken Mausklick ffnen.
</p>

<h3>In Unterverzeichnissen nachsehen</h3>
<p>
Wenn Sie alle Dateien in allen Unterverzeichnissen des aktuellen
Verzeichnisses finden wollen, schalten Sie <b>Unterverzeichnisse
beachten</b> ein. Dann durchsucht Scid rekursiv jedes Unterverzeichnis
nach Dateien, die Scid ffnen kann. Wenn viele Unterverzeichnisse
vorhanden sind, kann dies eine Weile dauern, Sie sollten das also
nicht fr ein Verzeichnis nahe dem Hauptverzeichnis des Dateisystems
tun. Sie knnen die Dateisuche mit dem <b>Stop</b>-Schalter unterbrechen.
</p>

<h3>Dateigren</h3>
<p>
Die Bedeutung der vom Finder angegebenen Dateigre hngt vom Typ der
Datei ab. Fr Scid-Datenbanken und -PGN-Dateien ist es die Anzahl der
Partien. Fr EPD-Dateien ist es die Anzahl der Positionen. Fr
Repertoiredateien ist es die Anzahl der (gewhlten oder ausgeschlossenen)
Varianten.
</p>
<p>
Fr alle Dateitypen mit Ausnahme von Scid-Datenbanken ist die Dateigre
eine Schtzung durch Auswertung lediglich der ersten 64 Kilobytes der
Datei, die Gre ist daher fr Dateien grer als 64 Kilobytes
mglicherweise nicht korrekt. Geschtzte Gren werden mit einer Tilde
(~) angezeigt zum Zeichen dafr, da sie nicht exakt sind.
</p>

<p><footer>(Aktualisiert: Scid 2.7, September 2001)</footer></p>
}


#########################
### GameList window help:

set helpTitle(D,GameList) "Partieliste"
set helpText(D,GameList) {<h1>Das Partielistenfenster</h1>
<p>
Das Partielistenfenster gibt eine einzeilige Zusammenfassung jeder
Partie im aktuellen <term>Filter</term> aus.
</p>

<h3>Navigation in der Partieliste</h3>
<p>
Sie knnen in der Partieliste mit dem Schieberegler oder den vier
Schaltern unterhalb der Liste blttern.
Sie knnen auch die Tasten [Pos1], [End], [Bild auf], [Bild ab] sowie
die Cursortasten verwenden, um mit der Tastatur zu scrollen.
</p>
<p>
Sie knnen die nchste Partie in der Liste, die einen bestimmten
Text im Wei-, Schwarz-, Turnier- oder Ortsfeld enthlt, mit dem
<b>Text finden</b>-Eingabefeld finden.
</p>

<h3>Aktionen mit Partien in der Liste</h3>
<p>
Um eine Datei aus der Liste zu laden, klicken Sie sie doppelt mit
der linken Maustaste an.
Ein Klick mit der mittleren Maustaste zeigt die Anfangszge der Partie;
das ist ntzlich, wenn man vor dem Laden einer Partie die Erffnung
nachsehen will.
</p>
<p>
Die rechte Maustaste produziert ein Men fr die ausgewhlte Partie,
in dem Sie die Partie lschen (oder "entlschen") oder aus dem Filter
ausschlieen knnen. Beachten Sie, da das Lschen einer Datei lediglich
ihre Lschmarkierung setzt; sie verbleibt solange in der Datenbank,
bis Sie diese <a Compact>komprimieren</a>.
</p>

<h3>Die Partieliste konfigurieren</h3>
<p>
Um die Partieliste zu konfigurieren, klicken Sie mit der linken oder
rechten Maustaste auf eine Spaltenberschrift. Sie knnen die Breite
verndern, Spalten hinzufgen oder entfernen und die Farbe jeder
Spalte verndern.
</p>
<p>
Wenn Sie nur die Spaltenbreite ndern wollen, dafr gibt es eine
Tastenkombination: klicken Sie bei gedrckter <b>[Strg]</b>- (oder
<b>[Umschalt]</b>)-Taste mit der linken Maustaste auf die
Spaltenberschrift, wird die Spalte kleiner, mit der rechten
Maustaste, wird sie breiter.
</p>

<h3>Gre der Partieliste ndern</h3>
<p>
Die Gre der Partieliste wird jedesmal in der Optionsdatei gespeichert,
wenn Sie Ihre Einstellungen sichern.
Wenn Sie also wollen, da die Dateiliste standardmig 10 Partien anzeigt,
verndern Sie einfach die Gre des Partielistenfensters und whlen
dann <b>Optionen speichern</b> im <menu>Optionen</menu>-Men.
</p>

<h3><name Browsing>Partien betrachten und mischen</name></h3>
<p>
Das Kontextmen der Partieliste (und einiger andere Fenster, wie etwa
des <a Reports Opening>Erffnungsbericht</a>-Fensters und der Liste der
<a Tree Best>beste(n) Partien</a> des <a Tree>Zugbaum</a>-Fensters)
erlauben die Auswahl, eine Partie zu laden, zu betrachten oder zu
mischen.
</p>
<p>
Wenn <term>Partie betrachten</term> ausgewhlt wird, werden die Zge
der ausgewhlten Partie (ohne Kommentare oder Varianten) in einem
separaten Fenster ausgegeben. Das ist eine ntzliche Methode, um eine
andere Partie im voraus anzuschauen, ohne die aktuell geladene Partie
zu berhren.
</p>
<p>
Die Funktion <term>Partie mischen</term> ermglicht es, die ausgewhlte
Partie als Variante der aktuellen Partie einzufgen. Scid findet den
letztmglichen Zeitpunkt, wo die gewhlte Partie von der aktuellen
abweicht (unter Bercksichtigung von Zugumstellungen), und fgt an
dieser Position eine Variante ein. Sie knnen die Zahl der angezeigten
Zge der gewhlten Partie ndern, je nachdem, ob Sie die ganze Partie
oder nur die Erffnungsphase hinzufgen wollen.
</p>

<p><footer>(Aktualisiert: Scid 3.2, Februar 2002)</footer></p>
}


#######################
### Import window help:

set helpTitle(D,Import) "Importfenster"
set helpText(D,Import) {<h1>Das Importfenster</h1>
<p>
Scids Importfenster ermglicht es Ihnen, auf einfache Weise eine
Partie im <a PGN>PGN-Format</a> aus einer anderen Anwendung oder
einem anderen Fenster in Scid einzufgen.
</p>
<p>
In den groen Fensterbereich tippen oder fgen Sie den Partietext im
PGN-Format ein, und im grauen Bereich darunter erscheinen
Fehlermeldungen oder Warnungen.
</p>

<h3>Die aktuelle Partie im Importfenster bearbeiten</h3>
<p>
Das Importfenster bietet auch eine weitere, bequeme Mglichkeit fr
nderungen an der aktuellen Partie: Sie knnen die aktuelle Partie in
das Importfenster einfgen (mit dem Schalter <b>Aktuelle Partie
einfgen</b>), den Text editieren und danach auf <b>Import</b> klicken.
</p>

<h3>PGN-Tags im Importfenster</h3>
<p>
Scid erwartet PGN-Eintrge ("header tags") wie
<ul>
<li> <b>[Result "*"]</b> </li>
</ul>
vor den Zgen, aber Sie knnen auch ein Partiefragment wie
<ul>
<li> <b>1.e4 e5 2.Bc4 Bc5 3.Qh5?! Nf6?? 4.Qxf7# 1-0</b> </li>
</ul>
ohne PGN-Tags einfgen, und Scid wird es importieren.
</p>

<h3>PGN-Dateien in Scid verwenden</h3>
<p>
Wenn Sie eine PGN-Datei in Scid verwenden wollen, ohne sie vorher mit
<a Pgnscid>pgnscid</a> zu konvertieren, gibt es zwei Mglichkeiten.
</p>
<p>
Zum einen knnen Sie die Partien der Datei mit der Men-Option
<menu>Werkzeuge: Datei mit PGN-Partien importieren ...</menu> importieren.
</p>
<p>
Die Alternative wre, die PGN-Datei direkt in Scid zu ffnen. Allerdings
werden PGN-Dateien nur zum Lesen geffnet und bentigen mehr Speicher als
eine vergleichbare Scid-Datenbank, diese Mglichkeit ist also nur fr
relativ kleine PGN-Dateien zu empfehlen.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


########################
### Reports help:

set helpTitle(D,Reports) "Berichte"
set helpText(D,Reports) {<h1>Berichte</h1>
<p>
Bei Scid ist ein <term>Bericht</term> ein Dokument, das Informationen ber
eine bestimmte Position und/oder einen bestimmten Spieler enthlt. Scid
kann zwei Berichtstypen erstellen: Erffnungsberichte und Spielerberichte.
</p>

<h3><name Opening>Erffnungsberichte</name></h3>
<p>
Scid kann einen <term>Erffnungsbericht</term> erstellen, der interessante
Informationen ber die aktuelle Erffnungsposition ausgibt. Um den
Erffnungsbericht zu erstellen, vergewissern Sie sich als erstes, da die
dargestellte Position auch die ist, fr die Sie den Bericht haben wollen,
dann whlen Sie <b>Erffnungsbericht</b> im Men <menu>Werkzeuge</menu>.
</p>
<p>
Das <term>Erffnungsberichts</term>-Fenster gibt die Ergebnisse des von
Scid erstellten Berichts aus. Das <b>Datei</b>-Men enthlt Optionen,
um den Bericht in einer Datei zu speichern, im Text-, HTML- oder
<a LaTeX>LaTeX</a>-Format.
</p>
<p>
Die ersten Abschnitte des Berichts prsentieren Informationen zu den
Partien, die die Berichtsposition erreicht haben, und zu den Zgen, die
in dieser Stellung gespielt wurden. Sie knnen erkennen, ob die Erffnung
populrer wird, ob sie zu vielen Kurzremisen fhrt und mit welchen
Zugfolgen (Zugumstellungen) sie erreicht wird.
</p>
<p>
Der Abschnitt ber positionelle Themen informiert ber die Hufigkeit
bestimmter typischer Themen der Berichtspartien. Zu diesem Zweck werden
die ersten 20 Zge (also die ersten 40 Positionen ab Ausgangsstellung)
jeder Partie untersucht. Um als eine Partie eingestuft zu werden, die
ein bestimmtes Thema enthlt, mu dieses Thema mindestens viermal
innerhalb der ersten 20 Zge der Partie vorkommen. Damit wird vermieden,
da durch kurzzeitiges Auftreten eines Themas (wie etwa ein isolierter
Damenbauer, der sofort geschlagen wird) die Ergebnisse verflscht werden.
</p>
<p>
Der letzte und lngste Teil des Berichts ist die Theorie-Tabelle. Wenn Sie
den Bericht in einer Datei sichern, knnen Sie whlen, ob Sie nur die
Theorie-Tabelle, einen kompakten Bericht ohne die Theorie-Tabelle oder
den gesamten Bericht sichern wollen.
</p>
<p>
Fast alle Abschnitte des Berichts knnen mit den Erffnungsberichts-Optionen
eingestellt oder ein- und ausgeschaltet werden, Sie knnen also den
Bericht so anpassen, da er nur die fr Sie interesanten Informationen
enthlt.
</p>
<p>
Bei den meisten Informationen im Berichtsfenster, die farbig dargestellt
sind, fhrt ein linker Mausklick zu einer Aktion. Zum Beispiel knnen Sie
eine angefhrte Partie durch Anklicken laden oder den Filter durch
Klicken auf ein Positionsthema so einstellen, da er nur die
Berichtspartien mit diesem Thema enthlt.
</p>

<h4>Favoriten</h4>
<p>
Mit dem <menu>Favoriten</menu>-Men des Berichtsfensters haben Sie die
Mglichkeit, eine Liste bevorzugter Erffnungsbericht-Positionen zu
verwalten und sehr einfach Berichte fr genau diese Positionen zu
erstellen. Wenn Sie "Bericht hinzufgen..." im Favoriten-Men
whlen, wird die aktuelle Stellung als besondere Berichtsposition
aufgenommen. Sie werden aufgefordert, einen Namen anzugeben, der dann
als Dateiname verwendet wird, wenn Favoritenberichte erstellt werden.
</p>
<p>
Whlen Sie "Berichte erzeugen..." im Favoriten-Men, um einen Bericht
fr jede Ihrer bevorzugten Positionen aus der aktuellen Datenbank zu
erstellen. In einem Dialogfenster knnen Sie dann Typ und Format der
Berichte angeben sowie ein Verzeichnis, wo die Berichtsdateien
gespeichert werden sollen. Die passende Dateiendung fr das gewhlte
Ausgabeformat wird dann automatisch ergnzt (z.B. ".html" fr das
HTML-Format).
</p>

<h3><name Player>Spielerberichte</name></h3>
<p>
Ein <term>Spielerbericht</term> hnelt sehr stark einem Erffnungsbericht,
enthlt aber Informationen ber Partien eines einzelnen Spielers mit
Wei oder mit Schwarz. Sie knnen einen Spielerbericht ber das
Werkzeuge-Men oder aus dem <a PInfo>Spielerinformations</a>-Fenster
heraus erzeugen.
</p>
<p>
Ein Spielerbericht kann entweder fr alle Partien eines bestimmten Spielers
mit einer bestimmten Farbe erstellt werden oder nur fr die Partien, die
die aktuelle Stellung des Hauptfenster-Bretts erreicht haben.
</p>

<h3>Beschrnkungen</h3>
<p>
Fr die meisten Berichtsdaten gibt es eine Beschrnkung auf 2000 Partien,
wenn die Berichtsposition also mehr als 2000 Partien enthlt, knnen
einige Resultate etwas ungenau sein.
</p>
<p>
Auerdem gibt es ein Limit von 500 Partien fr die Theorie-Tabelle. Wenn
die Berichtsposition in mehr als 500 Partien vorkommt, werden zur
Erstellung der Theorie-Tabelle nur die 500 Partien mit den hchsten
durchschnittlichen Elo-Zahlen herangezogen. Die Anzahl der Partien zum
Aufbau der Theorie-Tabelle ist einstellbar.
</p>

<p><footer>(Aktualisiert: Scid 3.5, Februar 2003)</footer></p>
}


####################
### PGN window help:

set helpTitle(D,PGN) "PGN-Fenster"
set helpText(D,PGN) {<h1>Das PGN-Fenster</h1>
<p>
Scids PGN-Fenster gibt den Inhalt der aktuellen Partie in der
Standard-PGN-Darstellung aus. Im Partietext erscheinen Kommentare in
{geschweiften} und Varianten in (runden) Klammern.
</p>

<h3>PGN-Format</h3>
<p>
PGN (Portable Game Notation) ist ein verbreiteter Standard zum Transfer
von Schachpartien zwischen Computerprogrammen. Eine PGN-Partie besteht
aus zwei Abschnitten.
Der erste Teil ist der Vorspann ("Header"), der Eintragungen ("tags") wie
z.B.
<b>[White "Kasparov, Gary"]</b>
und
<b>[Result "1/2-1/2"]</b> enthlt.
</p>
<p>
Der zweite Abschnitt enthlt die eigentlichen Partiezge in
algebraischer Standardnotation (SAN) zusammen mit eventuellen Varianten,
<a NAGs>Kommentarsymbolen</a> und <a Comment>Kommentaren</a>.
</p>

<h3>Aktionen im PGN-Fenster</h3>
<p>
Sie knnen mit dem PGN-Fenster innerhalb der Partie navigieren: Mit
einem Linksklick auf einen Zug gehen Sie zu diesem Zug, mit einem
Linksklick auf einen Kommentar knnen Sie diesen editieren.
Die Cursortasten (sowie die Tasten <b>v</b> und <b>z</b> fr
Variante beginnen bzw. verlassen) funktionieren zum Navigieren in der
Partie genau wie im Hauptfenster.
</p>

<h3>Einstellungen fr PGN-Ausgabe</h3>
<p>
Das Men des PGN-Fensters enthlt Optionen, die die Ausgabe des Fensters
betreffen. Scid kann die Partie farbig oder als reinen Text darstellen
-- siehe das <menu>Ausgabe</menu>-Men im PGN-Fenster.
Die farbige Darstellung ist leichter zu lesen und erlaubt Ihnen, Zge und
Kommentare mit der Maus auszuwhlen, aber sie ist viel langsamer zu
aktualisieren. Fr sehr lange Partien sollten Sie vielleicht die
einfache Textausgabe whlen.
</p>
<p>
Auch das Format der Kommentare und Varianten knnen Sie verndern,
indem Sie sie zwecks besserer bersichtlichkeit eingerckt oder in
separaten Zeilen ausgeben lassen.
</p>
<p>
Die PGN-Ausgabe-Optionen und die Gre des PGN-Fensters werden, wann
immer Sie <b>Optionen speichern</b> im <menu>Optionen</menu>-Men whlen,
in der Konfigurationsdatei gesichert.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


#######################
### Piece Tracker help:

set helpTitle(D,PTracker) "Figurenverteilung"
set helpText(D,PTracker) {<h1>Das Figurenverteilungsfenster</h1>
<p>
Die <term>Figurenverteilung </term> bzw. das Figurenverteilungsfenster
ist ein Werkzeug, um die Bewegungen bestimmter Figuren in allen Partien
des aktuellen Filters nachzuvollziehen und ein Bewegungsmuster (eine
"Fuspur") zu erstellen, das aufzeigt, wie oft jedes Feld von dieser
Figur besetzt wurde.
</p>
<p>
Um die Figurenverteilung zu benutzen, vergewissern Sie sich zuerst, da
der Filter die Partien enthlt, die Sie interessieren, z.B. Partien mit
einer bestimmten Erffnungsposition oder alle Wei-Partien eines
bestimmten Spielers. Dann whlen Sie die Figur, deren Bewegung Sie
nachvollziehen wollen, und whlen die unten im Text erluterten Optionen.
Danach klicken Sie auf den Schalter <b>Aktualisieren</b>.
</p>
<p>
Die Information ber die Figurenbewegungen wird auf zwei Arten dargestellt:
eine grafische "Fuspur" und eine Liste mit einer Textzeile pro Feld.
</p>

<h3>Auswahl der Figur</h3>
<p>
Die Schachfiguren sind unterhalb der "Karte" fr die "Fuspur" gem der
Ausgangsstellung angeordnet. Eine einzelne Figur (wie etwa der weie
Springer b1 oder der schwarze Bauer d7) kann mit der linken Maustaste
ausgewhlt werden, alle Figuren von gleichem Typ und gleicher Farbe
(wie z.B. alle weien Bauern oder beide schwarzen Trme) mit der
rechten Maustaste.
</p>

<h3>Weitere Einstellungen</h3>
<p>
Der Zugnummer-Bereich kontrolliert, wann die Figurenverfolgung anfangen
und enden soll. Die Standardeinstellung 1-20 (d.h. die Verfolgung endet
nach dem 20. Zug von Schwarz) ist gut geeignet zur Untersuchung von
Erffnungsthemen, aber (z.B.) ein Bereich von 15-35 wre besser, wenn
man Entwicklungen im Mittelspiel betrachten will.
</p>
<p>
Es knnen zwei Arten von Statistiken erstellt werden:
<ul>
<li> <b>% der Partien mit Zug auf das Feld</b>: zeigt, welcher Anteil
     an Filterpartien einen Zug der zu beobachtenden Figur auf jedes
     Feld enthlt. Das ist die Standardeinstellung und normalerweise
     die beste Wahl.
<li> <b>% der Zeit auf jedem Feld</b>: zeigt den Anteil der
     Verweildauer der zu beobachtenden Figur auf jedem Feld.
</ul>
</p>

<h3>Hinweise</h3>
<p>
Es gibt (mindestens) drei gute Verwendungsmglichkeiten fr die
Figurenverteilung: Erffnungsvorbereitung, Mittelspielthemen und
Spielervorbereitung.
</p>
<p>
Fr die Erffnungsvorbereitung verwenden Sie die Figurenverteilung
zusammen mit dem <a Tree>Zugbaum</a>. Indem Sie die Bewegungen von
Figuren nachvollziehen, knnen Sie Entwicklungen in der aktuellen
Erffnung erkennen, beispielsweise bliche Bauernvorste,
Springervorposten und die hufigsten Luferplazierungen. Dabei ist es
hilfreich, den Zugbereich nach dem aktuellen Partiezug beginnen zu
lassen, so da die Zge, die zur aktuellen Stellung fhrten, nicht in
die Statistik einflieen.
</p>
<p>
Fr Mittelspielthemen kann die Figurenverteilung ntzlich sein, wenn
der Filter einen bestimmten Elo-Bereich enthlt (mit der
<a Searches Header>Partiedaten-Suche</a>) oder vielleicht ein Muster
wie "Isolierter Damenbauer von Wei"
(mit der <a Searches Material>Material/Muster-Suche</a>).
Stellen Sie den Zugbereich auf einen sinnvollen Wert ein (z.B. 20-40)
und verfolgen Sie Figuren, um beispielsweise Bauernvorste im spten
Mittelspiel oder frhen Endspiel zu erkennen
</p>
<p>
Zur Spielervorbereitung verwenden Sie die
<a Searches Header>Partiedaten-Suche</a> oder die
<a PInfo>Spieler-Information</a>, um alle Partien einer Farbe eines
bestimmten Spielers zu finden. Die Figurenverteilung kann dann genutzt
werden um z.B. festzustellen, wie gern der Spieler Lufer fianchettiert,
lang rochiert oder einen Bauernkeil bis d5 oder e5 treibt.
</p>

<p><footer>(Aktualisiert: Scid 3.3, April 2002)</footer></p>
}

#####################
### Player List help:

set helpTitle(D,PList) "Spielersuche"
set helpText(D,PList) {<h1>Der Spielerfinder</h1>
<p>
Der <term>Spielerfinder</term> gibt eine Namensliste von Spielern
aus der aktuellen Datenbank aus. Die Auswahl eines Spielers ffnet
das <a PInfo>Spieler-Informations</a>-Fenster mit detaillierteren
Informationen ber diesen Spieler.
</p>
<p>
Es werden 5 Spalten ausgegeben, die jeweils den Namen, die hchste
Elo-Zahl, Anzahl der gespielten Partien sowie das Jahr der
ltesten und neueste Partie anzeigen.
Ein Klick auf eine Spalten-berschrift sortiert die Liste nach
dieser Spalte.
</p>
<p>
Die Kontrollschalter unterhalb der Liste ermglichen Ihnen, den
Inhalt der Liste zu filtern. Sie knnen die maximale Listengre
ndern, einen Spielernamen-Anfang eingeben (Gro-/Kleinschreibung
wird ignoriert, z.B. sucht "ada" nach "Adams") sowie den
Elozahlen-Bereich oder die Anzahl der gespielten Partien eingrenzen.
</p>

<p><footer>(Aktualisiert: Scid 3.4, August 2002)</footer></p>
}

#####################
### Player Info help:

set helpTitle(D,PInfo) "Spielerinformation"
set helpText(D,PInfo) {<h1>Die Spieler-Information</h1>
<p>
Das Fenster <term>Spieler-Information</term> wird jedesmal aufgebaut
oder aktualisiert, wenn Sie im Informationsbereich (unterhalb des
Schachbretts) oder im <a Crosstable>Kreuztabellen</a>-Fenster mit der
linken Maustaste auf einen Spielernamen klicken.
</p>
<p>
Es gibt (hoffentlich) ntzliche Informationen ber die Spieler aus,
einschlielich ihrer Erfolgsrate mit Wei und Schwarz, ihrer bevorzugten
Erffnungen (nach <a ECO>ECO-Code</a>) und ihrer Elo-Entwicklung.
</p>
<p>
Jede Prozentangabe ist das Ergebnis, das man aus Sicht des Spielers
erwartet (Erfolgsrate) -- d.h. ein hherer Wert ist fr die Spieler
immer besser, ob als Wei oder Schwarz.
</p>
<p>
Sie knnen die ELO-Entwicklung des Spielers grafisch dargestellt
sehen, wenn Sie die Taste <a Graphs Rating>ELO-Zahl-Verlauf</a> anklicken.
</p>
<p>
Jede rot dargestellte Zahl knnen Sie mit der linken Maustaste anklicken,
um den <a Searches Filter>Filter</a> so einzustellen, da er die
entsprechenden Partien enthlt.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


###########################
### Repertoire editor help:

set helpTitle(D,Repertoire) "Repertoire-Editor"
set helpText(D,Repertoire) {<h1>Der Repertoire-Editor</h1>
<p>
Mit dem Repertoire-Editor knnen Sie <term>Repertoire</term>-Dateien
erstellen, lesen oder bearbeiten. Eine Repertoiredatei ist eine Liste
der Erffnungspositionen, die Sie erreichen wollen oder zu vermeiden
suchen; Sie knnen sie zur Organisation Ihrer Erffnungsprferenzen
und zur Datenbanksuche in Scid verwenden.
</p>

<h3>Repertoire-Gruppen und -Varianten</h3>
<p>
Ein Repertoire enthlt zwei Elementtypen: <term>Gruppen</term> und
<term>Varianten</term>. Gruppen sind nicht tatschlich Teil Ihres
Repertoires; sie werden nur zur Strukturierung verwendet, so wie
Verzeichnisse Dateien auf einem Datentrger strukturieren.
</p>
<p>
In einem Repertoire gibt es in zwei Arten von Varianten:
<term>eingeschlossene</term> Varianten reprsentieren Erffnungspositionen,
an denen Sie interessiert sind und die Sie erreichen wollen, und
<term>ausgeschlossene</term> Varianten, die Sie nicht spielen wollen
und zu vermeiden suchen.
Wenn Sie z.B. Angenommenes Damengambit (1.d4 d5 2.c4 dxc4) mit Schwarz
spielen und nach 3.e4 alle Zge <i>auer </i> 3...Sf6 spielen, htten
Sie 1.d4 d5 2.c4 dxc4 3.e4 als eingeschlossene Variante und 1.d4 d5 2.c4
dxc4 3.e4 Sf6 als ausgeschlossene Variante.
</p>

<h3>Kommentare und Anmerkungen</h3>
<p>
Jede Gruppe oder Variante kann Kommentare enthalten. Es gibt zwei Typen:
kurze (einzeilige) Kommentare erscheinen (in Rot) in der
Repertoire-Hierarchie neben den Zgen der Gruppe oder Variante, whrend
ein langer (mehrzeiliger) Kommentar nur angezeigt wird, wenn die Gruppe
oder Variante ausgewhlt wird.
</p>

<h3>Das Fenster des Repertoire-Editors</h3>
<p>
Die <b>linke</b> Seite des Fensters zeigt die Repertoire-Hierarchie.
Sie knnen die Gruppendarstellung mit einem Klick auf den Ordner auf-
bzw. zuklappen, und mit einem Klick auf die Zge der Gruppen oder
Varianten whlen Sie diese aus und sehen ihre Kommentare.
Eingeschlossene Varianten werden mit einem blauen Haken angezeigt,
ausgeschlossene Varianten haben ein rotes Kreuz.
</p>
<p>
Wenn eine Variante oder Gruppe einen Kurzkommentar hat, wird er hinter
den Zgen angezeigt. Wenn sie einen langen Kommentar hat, wird dies mit
<b><red>**</red></b> nach den Zgen angezeigt. Bei den Gruppen steht
nach den Zgen eine Zahl in Klammern, die die Anzahl der (ein- und
ausgeschlossenen) Varianten anzeigt, die sie jeweils enthalten.
</p>
<p>
Nach einem Rechtsklick auf eine Gruppe oder Variante erscheint ein Men
mit den verfgbaren Funktionen wie Lschen oder Statusnderung.
</p>
<p>
Die <b>rechte</b> Seite des Fensters besteht aus drei Bereichen. Der
erste enthlt die Zge der gerade ausgewhlten Variante oder Gruppe. Sie
knnen ihn mit der linken Maustaste anklicken, womit Sie die Zge in das
<a Import>Import</a>-Fenster einfgen, was recht ntzlich ist, um die
aktuelle Partie mit einer Variante des Repertoires beginnen zu lassen.
Der zweite Bereich enthlt den Kurzkommentar der Variante oder Gruppe,
der dritte Bereich ihren langen Kommentar.
</p>

<h3>Gruppen und Varianten dem Repertoire hinzufgen</h3>
<p>
Um eine Variante oder Gruppe hinzuzufgen, fhren Sie einfach ihre Zge
auf dem Schachbrett im Hauptfenster aus, whlen dann das Men
<menu>Bearbeiten</menu> im Repertoire-Editor und fgen sie als Gruppe,
eingeschlossene Variante oder ausgeschlossene Variante hinzu.
</p>
<p>
Um eine Gruppe oder Variante zu lschen, klicken Sie sie mit der rechten
Maustaste an und whlen im erschienenen Men das entsprechende Kommando.
</p>

<h3><name Search>Datenbanksuche mit Repertoire-Dateien</name></h3>
<p>
Das Men <menu>Suchen</menu> des Repertoire-Editors ermglicht es Ihnen,
mit dem Repertoire in der aktuellen Datenbank zu suchen. Jede Partie
wird mit den Positionen im Repertoire verglichen und nur dann erkannt,
wenn die <i>weitestverzweigte</i> Repertoire-Position fr eine
<i>eingeschlossene</i> Variante gefunden wurde.
</p>
<p>
Sie knnen whlen, ob Sie nach dem gesamten Repertoire oder nur nach den
ausgegebenen Varianten suchen wollen. Die Suche nach den ausgegebenen
Varianten ist nur dann sinnvoll, wenn Sie nur nach einigen Varianten
des Repertoires suchen. Beispiel: Ein Repertoire habe zwei Hauptgruppen
auf der obersten Ebene, eine fr 1.e4 und eine fr 1.d4. Wenn Sie nur
an den e4-Varianten interessiert sind, klappen Sie einfach die Gruppe
1.d4 zu und suchen dann nur nach den ausgegebenen Varianten.
</p>

<h3>Weitere Hinweise</h3>
<p>
Eine Repertoire-Datei eignet sich sehr gut zum Finden neuer Partien in
Ihrem Erffnungssystem. Beispiel: Jedesmal, wenn Sie eine PGN-Datei
erhalten und sie Ihrer Haupt-Datenbank hinzufgen (wie etwa
die ausgezeichneten wchentlichen PGN-Dateien von
<url http://www.chesscenter.com/twic/>The Week In Chess</url>),
ffnen Sie einfach die PGN-Datei in Scid und fhren eine Repertoire-Suche
durch. Dann knnen Sie die gefilterten Partien betrachten und haben
alle Partien, die in Ihrem Repertoire enthalten sind.
</p>
<p>
Sie sollten vielleicht zwei Repertoire-Dateien anlegen: eine fr Schwarz
und eine fr Wei, so da Sie mit jeder Datei getrennt suchen knnen.
</p>
<p>
Eine Repertoire-Datei kann von der Kommanozeile aus geffnet werden,
zum Beispiel:<br>
<b>scid datenbank weiss.sor</b>
</p>
<p>
Sie knnen eine Repertoire-Datei (.sor) mit jedem Editor bearbeiten,
aber passen Sie auf, da Sie nicht ihr Format verndern, sonst kann
sie von Scid nicht geladen oder gesucht werden.
</p>

<p><footer>(Aktualisiert: Scid 2.6, August 2001)</footer></p>
}


##################################
### Tournament Finder window help:

set helpTitle(D,Tmt) "Turnierfinder"
set helpText(D,Tmt) {<h1>Der Turnierfinder</h1>
<p>
Der <term>Turnierfinder</term> ermglicht es Ihnen, Turniere in der
aktuellen Datenbank zu finden. Er untersucht alle Datenbankpartien und
vergleicht Daten mit den gefundenen Turnieren. Es wird angenommen, da
zwei Partien zum selben Turnier gehren, wenn sie denselben Turnier-
und Ortseintrag haben und innerhalb von drei Monaten gespielt wurden.
</p>
<p>
Sie knnen die Liste der Turniere durch die Anzahl der Spieler und
Partien, das Datum, die durchschnittliche Elo-Zahl und das Land
einschrnken, wenn Sie die Felder unterhalb der Turnierliste ausfllen
und dann auf <b>Aktualisieren</b> klicken.
</p>
<p>
Die ausgegebene Liste kann nach Datum, Spielerzahl, Partienzahl,
durchschnittliche Elo-Zahl, Ort, Turnier oder Nachname des Gewinners
sortiert werden. Whlen Sie die Kategorie im
<menu>Sortieren</menu>-Men oder klicken Sie auf die Spaltenberschrift,
um das Sortierkriterium zu ndern.
</p>
<p>
Um die erste Partie eines der aufgefhrten Turniere zu laden, klicken
Sie einfach mit der linken Maustaste, wenn die entsprechende Zeile
hervorgehoben ist. Damit wird auch das
<a Crosstable>Kreuztabellen</a>-Fenster aktualisiert, falls es geffnet
ist.
Wenn Sie statt dessen die rechte Maustaste drcken, wird die Partie
geladen und das Kreuztabellenfenster geffnet, auch wenn es vorher
geschlossen war.
</p>
<p>
Es ist eine gute Idee, zur Beschleunigung des Suchprozesses den
Datenbereich angemessen einzuschrnken (z.B. hchstens einige Jahre)
oder ein einzelnes Land auszuwhlen (mit dem 3stelligen
Standard-Lndercode). Damit wird die Zahl der Partien, die Scid bei
der Konstruktion von Turnieren aus den Partien bercksichtigen mu,
auerordentlich verringert.
</p>

<p><footer>(Aktualisiert: Scid 3.3, April 2002)</footer></p>
}


####################
### Tree window help:

set helpTitle(D,Tree) "Zugbaum"
set helpText(D,Tree) {<h1>Das Zugbaumfenster</h1>
<p>
Das <term>Zugbaum</term>-Fenster liefert Informationen ber alle Zge,
die in der aktuellen Position in den Datenbankpartien gespielt wurden.
Im Zugbaum-Modus wird das Fenster automatisch aktualisiert, sowie sich
die Stellung im Hauptfenster ndert. Fr groe Datenbanken ist das
evtl. etwas langsam.
</p>
<p>
Jedesmal, wenn das Zugbaumfenster aktualisiert wird, wird der
<a Searches Filter>Filter</a> zurckgesetzt, und nur die Partien, die
die die aktuelle Position enthalten, sind erfat.
</p>
<p>
Ein Klick mit der linken Maustaste auf einen Zug im Zugbaumfenster
fgt diesen Zug der Partie hinzu.
</p>

<h3>Inhalt des Zugbaumfensters</h3>
<p>
Das Zugbaumfenster zeigt den <a ECO>ECO-Code</a> (falls vorhanden),
die Hufigkeit (als Anzahl der Partien und in Prozent) und die
Punkte jedes Zuges an. Die <term>Punkte</term> werden immer aus
der Sicht von <b>Wei</b> berechnet, 100% bedeutet also, alle
Weispieler gewinnen, und 0% heit nur Schwarzsiege.
</p>
<p>
Die Zge im Zugbaumfenster knnen nach Zgen (alphabetisch), ECO-Code,
Hufigkeit oder Punkten sortiert werden. Sie knnen die Sortiermethode
im Men <menu>Sortieren</menu> ndern.
</p>

<h3><name Best>Das Fenster "Beste Partien"</name></h3>
<p>
Das Zugbaumfenster besitzt ein Dateimen-Kommando und einen Schalter,
um das Fenster <term>Beste Partien</term> zu ffnen, welches eine Liste
der am hchsten bewerteten Partien des aktuell gezeigten Astes ausgibt.
Die Partien sind nach durchschnittlicher Elo-Zahl sortiert, und Sie
knnen die Liste auf Partien mit einem bestimmten Ergebnis beschrnken.
</p>

<h3><name Graph>Zugbaumgrafik</name></h3>
<p>
Das Zugbaumfenster enthlt einen mit <term>Grafik</term> bezeichneten
Schalter, der eine grafische Darstellung der relativen Erfolgsrate
jedes Zuges in der aktuellen Stellung liefert.
Alle Zge, die in mindestens 1% der Partien und mindestens 5mal
gespielt wurden, werden dargestellt.
Die prozentualen Ergebnisse werden immer aus der Perspektive von
Wei gesehen, auch wenn Schwarz am Zug ist.
</p>
<p>
In der Zugbaumgrafik ist eine rote Linie eingezeichnet, die den
Durchschnitt aller Partien in der aktuellen Position anzeigt, und der
Bereich zwischen 50 und 55% (wo der Erwartungswert der meisten
Standarderffnungen liegt) ist blau gefrbt. In Meisterpartien erreicht
Wei blicherweise etwa 55%.
</p>

<h3><name Lock>Das Zugbaumfenster anbinden</name></h3>
<p>
Jedes Zugbaumfenster ist mit einer geladenen Datenbank verbunden, so
dass, sollten mehre Datenbanken geffnet sein, auch mehrere
Zugbaumfenster parallel existieren knnen, je eines fr jede
Datenbank.
Mit dem Schalter <term>Anbinden</term> im Zugbaumfenster kann man nun
erreichen, dass eine Datenbank automatisch geschlossen wird, sobald
das zugehrige Zugbaumfenster geschlossen wird. Weiterhin werden dann
auch alle anderen, mit dem Zugbaumfenster verbundenen Fenster "Beste
Partien" oder eine Zugbaumgrafik automatisch mit geschlossen.
</p>

<h3><name Training>Training</name></h3>
<p>
Wenn der <term>Trainings</term>-Schalter im Zugbaumfenster aktiviert
ist, wird Scid jedesmal, wenn Sie einen Zug in der Partie ausfhren,
einen zufllig ausgewhlten Zug erwidern. Der Zug, den Scid auswhlt,
hngt von der Datenbankstatistik ab, d.h. ein Zug, der in 80% der
Datenbankpartien gespielt wurde, wird von Scid mit 80%iger
Wahrscheinlichkeit ausgewhlt. Diese Funktion einschalten und dann das
Zugbaumfenster verstecken (oder minimieren) und Erffnungen gegen eine
groe Datenbank spielen ist eine ausgezeichnete Methode, Ihre Kenntnisse
Ihres Erffnungsrepertoires zu testen.
</p>

<h3>Den Zugbaum in geffneten EPD-Dateien verwenden</h3>
<p>
Fr jede geffnete <a EPD>EPD-Datei</a> enthlt das Zugbaumfenster
eine weitere Spalte, die fr jede Position, die mit den angegebenen
Zgen erreicht wird, eine kurze (fnf Zeichen) Zusammenfassung des
Dateiinhalts anzeigt.
</p>
<p>
Die Zusammenfassung knnte eine Bewertung, ein Erffnungscode oder ein
Zugvorschlag sein; sie wird der Inhalt des ersten gefundenen EPD-Feldes
aus der folgenden Liste sein: <b>ce, eco, nic, pv, pm, bm, id</b>, oder
einfach des ersten EPD-Feldes, falls keines der obigen vorhanden ist.
</p>
<p>
Fr eine Beschreibung der EPD-Felder siehe die Hilfeseite
<a EPD>EPD-Dateien</a>. Wenn die Zusammenfassung das <b>ce</b>-Feld
ist, wird sie zur besseren Lesbarkeit als Bewertung in Bauern aus der
Sicht von Wei angezeigt (anstatt als Bewertung in Hundertstel Bauern
aus der Sicht der am Zug befindlichen Seite, wie sie in der EPD-Datei
gespeichert ist).
</p>

<h3>Masken zur Konfiguration der Darstellung</h3>
<p>
Benutzerdefinierte Maskendateien (.stm) knnen angelegt werden, um die
Anzeige der Statistik im Zugabaumfenster zu erweitern. Hiermit knnen
einerseits farbige Markierungen, NAG-Codes oder Kommentare fr eine
bestimmte Stellung hinzugefgt werden, um beispielsweise kritische
Positionen zu markieren.
</p>
<p>
Um Markierungen anzulegen bewegt man sich zunchst in einer
bestehenden Partie zur entsprechenden Position und klickt dann mit der
Maus die entsprechene Variante mit der rechten Taste an. Sodann knnen
aus dem sich ffnenden Kontextmenue entsprechende Markierungen
ausgewhlt oder Kommentare eingegeben werden. Nach dem Hinzufgen
entsprechender Annotationen mu die Maske mit dem Punkt
<term>Speichern</term> gesichert werden.
</p>
<p>
Masken knnen auch aus bestehenden Partien, welche Kommentare und
Varianten enthalten gefllt werden. Hierzu dient der Punkt <term>Mit
aktueller Partie fllen</term> bzw. <term>Mit Datenbank Fllen</term>
</p>

<h3>Schnellere Ergebnisse durch Zwischenspeichern</h3>
<p>
Scid nutzt fr die am hufigsten vorkommenden Positionen einen
Cachespeicher fr die Ergebnisse der Zugbaumsuche. Wenn Sie sich im
Zugbaum-Modus in einer Partie vorwrts und rckwrts bewegen, werden
Sie bemerken, da das Zugbaumfenster praktisch sofort aktualisiert
wird, wenn die gesuchte Stellung im Cachespeicher ist.
</p>
<p>
Das Zugbaumfenster hat ein Dateimen-Kommando <term>Cache-Datei
sichern</term>. Wenn Sie das auswhlen, wird der aktuelle Inhalt des
Zugbaum-Zwischenspeichers in eine Datei geschrieben (mit der Endung
<b>.stc</b>), um sptere Anwendungen des Zugbaum-Modus mit dieser
Datenbank zu beschleunigen.
</p>
<p>
Die Option <term>Cache-Datei fllen</term> im Dateimen des
Zugbaumfensters fllt die Cache-Datei mit Daten fr viele
Erffnungspositionen. Es werden etwa 100 der hufigsten
Erffnungsstellungen gesucht, dann wird die Cache-Datei geschrieben.
</p>
<p>
Das neue aufbauen des Zugbaumfensters kann erheblich beschleunigt
werden, wenn eine Datenbank nach ECO-Codes sortiert abgespeichert
wird. (Zum sortieren von Datenbanken siehe das <a
Maintenance>Wartungsfenster</a>.) Dieses Sortieren kann allerdings
viele Stunden in Anspruch nehmen. Danach kann durch einschalten der
Option <term>Schneller Modus</term> die Suche um bis zu einen Faktor
20 beschleunigt werden, wobei allerdings kleinere Ungenauigkeiten in
Kauf genommen werden mssen. Um eine schnelle Voranzeige der Statistik
zu erreichen aber trotzdem ein genaues ergenbis zu erziehlen dient die
Option <term>Schneller und Grndlicher Modus</term>
</p>
<p>
Beachten Sie, da eine Zugbaum-Cache-Datei (.stc) vllig redundant ist;
Sie knnen sie ohne Auswirkungen auf die Datenbank lschen, und
tatschlich wird sie jedesmal von Scid gelscht, wenn sie nach
irgendeiner Aktion veraltet sein knnte -- zum Beispiel nach Hinzufgen
oder Ersetzen einer Partie, oder nach Sortieren der Datenbank.
</p>

<p><footer>(Aktualisiert: Scid 3.6.26, Oktober 2008)</footer></p>
}


################
### Graphs help:

set helpTitle(D,Graphs) "Grafikfenster"
set helpText(D,Graphs) {<h1>Grafikfenster</h1>
<p>
Scid hat einige Fenster, die Informationen grafisch darstellen.
Diese werden im nachfolgenden erklrt.
</p>

<h3><name Filter>Relative und absolute Filtergrafik</name></h3>
<p>
Das Fenster <term>relative Filtergrafik</term> zeigt Entwicklungen nach Datum
oder Elo-Zahl fr die aktuellen Filterpartien im Vergleich zur gesamten
Datenbank. Das ist beispielsweise im <a Tree>Zugbaum</a>-Fenster eine
ntzliche Hilfe um zu zeigen, wie sich die Popularitt der aktuellen
Erffnungsposition in den letzten Jahren oder Jahrzehnten gendert hat
oder ob sie bei hochrangigen Spielern, etwa bei Gromeistern, besonders
beliebt ist. Jeder Punkt in der Grafik reprsentiert fr ein bestimmtes
Datum oder einen bestimmten Elo-Bereich die Anzahl der Partien im Filter
pro 1000 Partien der gesamten Datenbank.
<br><br>
Neben der relative Filtergrafik gibt es eine <term>absolute Filtergrafik</term>, die die
Partien im Filter nach der absoluten Anzahl der Partien darstellt. Es kann nach
Jahr, Elo-Zahl und Zugzahl der Partie ausgewertet werden.<br>
Mit dem kleinen Grafik-Knopf kann ein Dialog geffnet werden. Hier kann fr jede der drei
Auswertungen der Bereich (von, bis) und die Intervallgre der X-Achse
eingestellt werden. Wird "Schtzen" ausgewhlt, so wird der ELO-Wert
geschtzt (s.u.), ansonst wird ein fehlender ELO-Wert eines Spielers
mit 0 bewertet. "Schtzen aus" entspricht dabei der
min. Elo-Auswertung im Statistik-Fenster. Die Decaden sind fest eingestellt, bitte hier die Jahres-Option benutzen.
Mit dem "Aktualisieren"-Knopf kann man sofort eine neue Auswertung erstellen, ohne den Dialog verlassen zu mssen.
<br>
Bitte beachten: Bei kleinen Intervallen und groem Bereich, kann die Auswertung etwas lnger dauern und die bersichtlichkeit geht verloren.
</p>
<p>

Wenn die Filtergrafik nach Elo-Zahl ausgegeben wird, verwendet Scid
fr jede Partie die durchschnittliche (mittlere) Wertung. Geschtzte
Elo-Zahlen (wie z.B. aus der Schreibkorrekturdatei) werden nicht verwendet.
Falls in einer Partie nur einer der beiden Spieler eine Elo-Zahl hat,
wird angenommen, da der Gegner die gleiche Elo-Zahl besitzt bis zu
einer Hchstgrenze von 2200. Wenn also beispielsweise ein Spieler eine
Elo-Zahl von 2500 hat und sein Gegner keine Elo-Zahl, ist die mittlere
Wertungszahl (2500+2200)/2 = 2350.
</p>

<h3><name Rating>ELO-Zahl-Verlauf</name></h3>
<p>
Das Fenster <term>ELO-Zahl-Verlauf</term> zeigt die Entwicklung der
Elo-Zahl(en) eines Spieler oder beider Spieler der aktuellen Partie.
Sie knnen den Graphen fr einen einzelnen Spieler mit dem Schalter
<term>ELO-Zahl-Verlauf</term> im Fenster <a PInfo>Spielerinformation</a>
erzeugen oder fr beide Spieler der aktuellen Partie, indem Sie
<term>ELO-Zahl-Verlauf</term> im <menu>Werkzeuge</menu>-Men auswhlen.
</p>

<h3><name Score>Partie-Bewertungsgraph</name></h3>
<p>
Das Fenster <term>Partie-Bewertungsgraph</term> zeigt die numerische
Bewertung (Stand) der aktuellen Partie, wie sie in den Kommentaren
gespeichert ist, als Graphen.
Sie knnen mit der linken Maustaste irgendwo auf den Graphen klicken,
um zu der korrespondierenden Partiestellung zu gelangen.
</p>
<p>
Zwei Typen von Bewertungs-Kommentaren werden erkannt: die von Scids
<a Analysis>Analyse</a>-Fenster erstellten (welche das Format
<ul>
<li><b>1.e4 {"+0.25 ...."}</b></li>
</ul>
haben und immer aus der Sicht von Wei bewerten) und die vom
Crafty-Kommando "Kommentieren" erstellten (die das Format
<ul>
<li><b>1.e4 ({9:+0.25} ....)</b></li>
</ul>
haben und ebenfalls aus der Perspektive von Wei bewerten).
</p>

<h3><name Tree>Zugbaumgrafik</name></h3>
<p>
Das Fenster <term>Zugbaumgrafik</term> ist aus dem Zugbaumfenster
zu erreichen. Es zeigt die Erfolgsrate der hufigsten Zge in der
aktuellen Position. Weitere Informationen finden Sie auf der
<a Tree Graph>Zugbaum</a>-Hilfeseite.
</p>

<p><footer>(Aktualisiert: Scid 3.6.21, Nov 2007)</footer></p>
}


####################
### Tablebases help:

set helpTitle(D,TB) "Endspieltabellen"
set helpText(D,TB) {<h1>Endspieltabellen</h1>

<p>
Eine <term>Endspieltabelle</term> ist eine Datei, die die vollstndige
Ergebnisinformation ber alle Positionen einer bestimmten
Materialkonstellation enthlt, wie z.B. Knig und Turm gegen Knig und
Bauer. Es gibt Endspieltabellen fr alle Materialkonstellation mit bis
zu 5 Steinen (inkl. Knige), und einige einfache 6-Steine-Tabellen
sind ebenfalls verfgbar.
</p>
<p>
Scid kann Endspieltabellen im Nalimov-Format verwenden, die von vielen
modernen Schachprogrammen genutzt werden. Sie haben oftmals die
Dateiendung <b>.nbw.emd</b>  oder <b>.nbb.emd</b>.
</p>

<h3>Endspieltabellen in Scid verwenden</h3>
<p>
Um die Endspieltabellendateien in Scid zu verwenden, bestimmen Sie
einfach ihre Verzeichnisse mit <b>Endspieltabellen-Verzeichnis...</b>
im <menu>Optionen</menu>-Men. Sie knnen bis zu 4 Verzeichnisse
angeben, wo Ihre Endspieltabellendateien gespeichert sind. Mit dem
Schalter <b>...</b> rechts nebem dem Datei-Eingabefeld knnen Sie
eine Datei suchen, deren Verzeichnis verwendet werden soll.
</p>
<p>
Wenn eine in der Endspieltabelle gefundene Stellung erreicht wurde, zeigt
der Informationsbereich (unterhalb des Schachbretts)
Endspieltabellen-Informationen an. Sie knnen den Umfang der angezeigten
Information konfigurieren, indem Sie mit der rechten Maustaste diesen
Bereich anklicken oder im <menu>Optionen</menu>-Men den Menpunkt
<b>Partieinformation</b> whlen. Die Option "Ergebnis und bester Zug"
liefert die ntzlichste Information, ist aber oftmals sehr viel
langsamer als die Option "nur Ergebnis".
</p>

<h3>Das Endspieltabellenfenster</h3>
<p>
Sie knnen sogar noch mehr Endspieltabellen-Informationen zur aktuellen
Position erhalten, indem Sie das <term>Endspieltabellenfenster</term>
ffnen (<menu>Fenster</menu>-Men, Tastenkombination Strg+Umschalt+[=]).
Dieses Fenster zeigt das Ergebnis jedes zulssigen Zuges in der aktuellen
Stellung bei perfektem Spiel.
</p>
<p>
Das Fenster enthlt zwei Bereiche. Der bersichtsbereich (links) zeigt
die Endspieltabellen, die Scid auf Ihrem Rechner gefunden hat, mit einer
Inhaltsangabe jeder Tabelle. Der Ergebnisbereich (rechts) zeigt die
optimalen Ergebnisse aller Zge in der aktuellen, im Haupfenster
dargestellten Position.
</p>

<h4>Der bersichtsbereich</h4>
<p>
Im oberen Teil des bersichtsbereichs knnen Sie eine bestimmte
Endspieltabelle auswhlen. Die verfgbaren Tabellen werden blau
angezeigt, die brigen grau, aber Sie knnen jede Tabelle auswhlen.
Der untere Teil des bersichtsbereichs zeigt eine Inhaltsangabe
der Informationen der ausgewhlten Endspieltabelle. (Noch haben nicht
alle Endspieltabellen einen entsprechenden Datensatz in Scid.)
</p>
<p>
Diese Inhaltsangabe enthlt die Hufigkeit (wie viele Partien von
einer Million haben eine Stellung mit diesem Material erreicht,
errechnet anhand einer Datenbank mit ber 600.000 Meisterpartien),
das spteste Matt einer Seite sowie Anzahl wechselseitiger ("umgekehrter")
Zugzwangpositionen. Eine wechselseitige Zugzwangposition liegt dann vor,
wenn Wei am Zug zum Remis fhrt und Schwarz am Zug verliert, wenn
Wei am Zug verliert und Schwarz am Zug Remis ergibt oder wenn derjenige
am Zug verliert.
</p>
<p>
Bei einigen Tabellen mit wechselseitigem Zugzwang enthlt die bersicht
eine Liste aller Zugzwangpositionen oder eine Auswahl davon. Eine
vollstndige Liste fr jede Endspieltabelle ist nicht machbar, da einige
Tabellen tausende von Zugzwangstellungen enthalten.
</p>
<p>
Mit dem Schalter <b>Random</b> knnen Sie eine zufllige Position aus
der ausgewhlten Endspieltabelle aufbauen.
</p>

<h4>Der Ergebnisbereich</h4>
<p>
Der Ergebnisbereich wird immer dann aktualisiert, wenn sich die
Brettstellung im Hauptfenster ndert. Die erste Zeile zeigt an, wie viele
Zge gewinnen (+), zum Remis fhren (=), verlieren (-) oder ein nicht
bekanntes Ergebnis (?) haben. Der brige Teil liefert Ihnen eine
detailliertere Ergebnisliste, mit der Reihenfolge krzeste bis lngste
Matts, danach Remis, dann lngste bis krzeste Verluste. Lnge jeweils
bis zum Matt.
</p>

<h4>Das Ergebnisbrett</h4>
<p>
In einer Endspieltabellenstellung ist es oft ntzlich zu wissen,
wie die Ergebnisse ausshen, wenn alle Steine in ihrer gegenwrtigen
blieben, aber ein bestimmter Stein woanders stnde. Zum Beispiel
wenn Sie feststellen mchten, wie nah ein Knig einem Freibauern sein
mu, um eine bestimmte Stellung zu gewinnen oder Remis zu machen.
In Endspielbchern wird diese Information oft die <i>Gewinnzone</i>
bzw. <i>Remiszone</i> eines Steins in einer bestimmten Stellung
genannt.
</p>
<p>
Mit Hilfe von Scid knnen Sie diese Information erhalten, wenn Sie
den Schalter mit dem Schachbrett anklicken, um das
<term>Ergebnisbrett</term> im Endspieltabellenfenster zu zeigen.
Wenn Sie mit der linken Maustaste irgendeinen Stein auf dem Brett
anklicken, erscheint auf jedem freien Feld ein Symbol mit dem Resultat
der Endspieltabelle, wenn der Stein auf diesem Feld stnde (mit derselben
Seite am Zug wie in der aktuellen Position des Hauptfensters).
</p>
<p>
Ein Feld kann fnf mgliche Symbole haben:
ein weies "<b>#</b>" bedeutet, Wei gewinnt;
ein schwarzes "<b>#</b>" bedeutet, Schwarz gewinnt;
ein blaues "<b>=</b>" bedeutet, die Stellung ist remis;
ein rotes "<b>X</b>" bedeutet, die Position ist illegal (weil die Knige
nebeneinander stehen oder die Seite am Zug Schach bietet); und
ein rotes "<b>?</b>" heit, das Result ist unbekannt, weil die ntige
Endspieltabellendatei nicht zur Verfgung steht.
</p>

<h3>Endspieltabellen-Quellen</h3>
<p>
Zur Hilfe beim Auffinden von Endspieltabellendateien im Internet
siehe die entsprechenden <a Author Related>Links</a>.
</p>

<p><footer>(Aktualisiert: Scid 3.4, September 2002)</footer></p>
}


###################
### Bookmarks help:

set helpTitle(D,Bookmarks) "Lesezeichen"
set helpText(D,Bookmarks) {<h1>Lesezeichen</h1>
<p>
Scid erlaubt Ihnen, wichtige Partien fr einen leichten spteren Zugriff
mit <term>Lesezeichen</term> zu markieren. Das Lesezeichen-Men ist aus
dem <menu>Datei</menu>-Men, der Werkzeugleiste oder mit der
Tastenkombination <B>Strg+B</b> zu erreichen.
</p>
<p>
Wenn Sie eine markierte Partie aus dem Lesezeichen-Men whlen, ffnet
Scid falls ntig die Datenbank, findet die Partie und geht zu der
Partiestellung, die mit dem Lesezeichen versehen wurde.
</p>
<p>
Nur Partien in Datenbanken im Scid-Format (keine PGN-Datei, nicht die
Ablage-Datenbank) knnen mit einem Lesezeichen markiert werden.
</p>
<p>
Wenn die Datenbank einer markierten Partie sortiert oder komprimiert
wurde, sind die Lesezeichendaten mglicherweise veraltet. Falls das
passiert, durchsucht Scid die Datenbank nach der passendsten Partie
(vergleicht Spielernamen, Ort etc.), wenn das Lesezeichen ausgewhlt
wird, die markierte Datei sollte also immer noch geladen werden. Wenn
sich allerdings Daten der markierten Partie ndern, ist es mglich,
da eine andere Partie besser auf die Lesezeichendaten pat und statt
dessen geladen wird. Es ist also eine gute Idee, eine Partie erneut zu
markieren, wenn Sie ihre Spieler-, Orts-, Ergebnis-, Runden- oder
Jahresdaten bearbeiten.
</p>

<h3>Lesezeichen bearbeiten</h3>
<p>
Mit dem Lesezeichen-Editor knnen Sie den fr jede markierte Partie
ausgegebenen Mentext ndern und Verzeichnisse erstellen, um die
Lesezeichen zu kategorisieren.
</p>

<h3>Hinweise</h3>
<p>
Sie knnen Lesezeichen zum schnellen Zugriff auf Datenbanken verwenden,
die Sie oft benutzen, indem Sie eine Partie jeder Datenbank markieren.
Eine weitere gute Verwendungsmglichkeit fr Lesezeichen ist es,
wichtige Partien hinzuzufgen, die Sie beim Studieren einer bestimmten
Schacherffnung finden.
</p>
<p>
Das Lesezeichen-Men enthlt einen Eintrag zur Kontrolle der
Verzeichnisdarstellung: sie knnen als Untermens angezeigt werden
(ntzlich bei sehr vielen Lesezeichen) oder als einzelne Liste.
</p>

<p><footer>(Aktualisiert: Scid 3.0, November 2001)</footer></p>
}


##############################
### Command-line options help:

set helpTitle(D,Cmdline) "Kommandozeilen-Optionen"
set helpText(D,Cmdline) {<h1>Kommandozeilen-Optionen</h1>
<p>
Wenn Sie Scid von der Shell oder Konsole starten, knnen Sie
Kommandozeilen-Optionen spezifizieren. Datenbanken im Scid-Format (mit
oder ohne Dateiendung wie z.B. ".si3") und PGN-Dateien, die geffnet
werden sollen, knnen angegeben werden. Beispiel:
<ul>
<li> <b> scid datenbank partien.pgn</b></li>
</ul>
startet Scid und und ffnet die Scid-Datenbank "datenbank" und die
PGN-Datei "partien.pgn".
</p>
<p>
Auerdem gibt es optionale Argumente, die kontrollieren, welche Dateien
Scid suchen und beim Start verwenden soll. Sie knnen die Benutzung
von <a TB>Endspieltabellen</a>  mit der Option <b>-xtb</b> (oder
<b>-xt</b>) ausschalten, das Laden der Datei zur
<a ECO>ECO-Erffnungsklassifikation</a> mit <b>-xeco</b> oder
<b>-xe</b> verhindern und mit <b>-xspell</b> oder <b>-xs</b> vermeiden,
da die Datei zur <a Maintenance Spellcheck>Schreibkorrektur</a>
geladen wird. Die Option <b>-fast</b> oder <b>-f</b> bewirkt das in
einem, d.h. <b>scid -f</b> ist quivalent zu
<b>scid -xeco -xspell -xtb</b>.
</p>

<p><footer>(Aktualisiert: Scid 3.1, November 2001)</footer></p>
}


####################
### Compaction help:

set helpTitle(D,Compact) "Datenbank komprimieren"
set helpText(D,Compact) {<h1>Datenbank komprimieren</h1>
<p>
Datenbank-<term>Komprimierung</term> ist ein besonderer Teil der
<a Maintenance>Wartung</a>, der die Datenbank so klein und effizient
wie mglich hlt.
Eine Datenbank komprimieren heit, jeden ungenutzten Bereich in ihren
Dateien zu lschen.
Es gibt zwei Arten: Namens- und Partiendatenbank-Komprimierung.
</p>

<h3>Namendatenbank-Komprimierung</h3>
<p>
Nach einer gewissen Zeit werden Sie evtl. feststellen, da die Datenbank
eine Reihe von Spieler-, Turnier- oder Rundennamen enthlt, die in keiner
Partie mehr verwendet werden. Das wird regelmig nach Namenskorrekturen
der Fall sein. Die unbenutzten Namen verschwenden Speicherplatz in der
Namendatei und knnen die Suche nach Namen verlangsamen.
Namendatenbank-Komprimierung lscht alle Namen, die nicht in irgendeiner
Partie verwendet werden.
</p>

<h3>Partiendatenbank-Komprimierung</h3>
<p>
Immer, wenn eine Partie ersetzt oder gelscht wird, verbleibt
ungenutzter Platz in der Partiendatei (die grte der drei Dateien
einer Scid-Datenbank). Partiendatenbank-Komprimierung lscht jeden
ungenutzten Speicher, keine gelschte Datei bleibt in der Datenbank.
Beachten Sie, da diese Operation unumkehrbar ist: nach der
Komprimierung sind die gelschten Dateien fr immer verschwunden!
</p>
<p>
Partiendatenbank-Komprimierung ist auch empfehlenswert nach dem
<a Sorting>Sortieren</a> einer Datenbank, um die Reihenfolge
innerhalb der Partiendatei mit der sortierten Indexdatei synchron
zu halten.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


####################################
### Database maintenance tools help:

set helpTitle(D,Maintenance) "Datenbank-Wartung"
set helpText(D,Maintenance) {<h1>Datenbank-Wartung</h1>
<p>
Scid stellt einige Funktionen zur Datenbank-Wartung zur Verfgung,
die aus dem <a Menus File>Datei</a>-Men zu erreichen sind. Die
Datenbank-<a Compact>Komprimierung</a> und -<a Sorting>Sortierung</a>
werden in separaten Hilfeseiten erklrt.
</p>

<h3>Das Wartungsfenster</h3>
<p>
Die meisten Datenbank-Wartungsarbeiten in Scid knnen aus dem
Wartungsfenster erledigt werden, welches man mit dem Men
<menu>Datei: Wartungsfenster</menu> oder <menu>Fenster</menu>
oder der Tastenkombination <b>Strg+M</b> ffnen kann.
</p>
<p>
Sie knnen in diesem Fenster <a Flags>Partie-Markierungen</a>
bearbeiten, Schreibkorrekturen durchfhren, eine Datenbank
<a Compact>komprimieren</a> oder <a Sorting>sortieren</a>.
Alle Operationen, die fr die aktuelle Datenbank nicht zur Verfgung
stehen (z.B., weil sie schreibgeschtzt oder eine PGN-Datei ist),
werden durch graue Schrift angezeigt.
</p>

<h3><name Twins>Dubletten lschen</name></h3>
<p>
Das Men <menu>Datei: Wartung</menu> hat ein Kommando <menu>Dubletten
lschen...</menu>, um Kopien von Partien (Dubletten) in der Datenbank
zu entdecken. Dieses Kommando findet alle Paare von doppelten Partien
und markiert die krzere Partie als gelscht, whrend die lngere Partie
erhalten bleibt. Zwei Partien werden als gleich angesehen, wenn ihre
Spieler (und alle anderen optionalen Partieeintrge) exakt bereinstimmen.
</p>
<p>
Wenn Sie die Option "gleiche Zge" angeben, mssen zwei Partien die
gleichen Partiezge bis zur Lnge der krzeren Partie haben (oder bis
zum 60. Zug, je nachdem, was zuerst eintritt), um Dubletten zu sein.
</p>
<p>
Wenn Sie Dubletten gelscht haben, ist es eine gute Idee zu berprfen,
ob jede gelschte Partie tatschlich Kopie einer anderen Partie ist.
Das knnen Sie ganz einfach machen, wenn Sie die Option "<b>Filter auf
Dubletten setzen</b>" im Dialogfenster "Dubletten lschen" gewhlt
haben. Der Filter wird dann alle gelschten Partien enthalten. Sie knnen
sie mit dem <term>Dublettenprfer</term> (erreichbar aus dem
Wartungsmen oder mit der Tastenkombination <b>Strg+Umsch+T</b>)
betrachten (blttern mit den Tasten <b>p</b> und <b>n</b>), um zu
verifizieren, da jede Partie deshalb gelscht wurde, weil sie
tatschlich die Dublette einer anderen Partie ist.
</p>

<h3><name Editing>Spieler, Turniere, Orte und Runden editieren</name></h3>
<p>
Sie haben vielleicht falsch geschriebene Namen in Iher Datenbank und
wollen sie korrigieren. Sie knnen das in Scid mit dem
<term>Namenseditor</term> (Tastenkombination: <b>Strg+Umsch+N</b>), den
Sie aus dem Untermen <menu>Datei: Wartung</menu> erreichen.
</p>
<p>
Jeder eindeutige Name ist nur einmal in der Namendatei gespeichert,
mit einer Namensnderung werden daher tatschlich alle Vorkommen
gendert.
</p>

<h3><name Spellcheck>Schreibkorrektur</name></h3>
<p>
Zu Scid gehrt eine <term>Schreibkorrektur</term>-Datei namens
<b>spelling.ssp</b>, um Namen von Spielern, Turnieren, Orten und Runden
zu korrigieren.
Scid versucht die Datei beim Programmstart zu laden; wenn Scid sie
nicht laden kann, knnen Sie sie aus dem <menu>Optionen</menu>-Men
laden.
</p>
<p>
Wenn die Korrekturdatei erst einmal geladen ist, knnen Sie sie mit
den Schreibkorrektur-Befehlen im Men <menu>Datei: Wartung</menu>  oder
aus dem Wartungsfenster auf eine Datenbank anwenden.
</p>
<p>
Wenn Sie fr eine Datenbank eine Schreibkorrektur durchfhren, erzeugt
Scid eine Liste mit Korrekturen, die Sie editieren knnen, bevor die
Korrekturen tatschlich ausgefhrt werden. Sie knnen also jede
nicht gewollte Korrektur lschen.
</p>
<p>
Schreibkorrekturen sind insbesondere ntzlich, um eine Datenbank zu
standardisieren, damit alle Vorkommen eines bestimmten Spielers gleich
geschrieben werden.
Beispielsweise wrden mit der Standarddatei die Namen"Kramnik,V.",
"Vladimir Kramnik" und "V. Kramnik" alle zu "Kramnik, Vladimir"
berichtigt.
</p>
<p>
Die Schreibkorrekturdatei hat einen weiteren Nutzen: wenn sie geladen
ist, werden ihre Spielerdaten genutzt, um die Fenster
<a PInfo>Spielerinformation</a> und <a Crosstable>Kreuztabelle</a>
zu erweitern: Sie sehen dann die FIDE-Titel (<b>gm</b> = Internationaler
Gromeister, <b>im</b> = Internationaler Meister etc.) und
Lnderinformationen zu jedem Spieler, der in der Datei enthalten ist.
ber 6500 starke Spieler der Vergangenheit und Gegenwart sind in der
zu Scid gehrenden Datei <b>spelling.ssp</b> enthalten.
</p>

<h3><name Ratings>Elo-Zahlen zu den Partien hinzufgen</name></h3>
<p>
Der Schalter "Elo-Zahlen hinzufgen..." im Wartungsfenster veranlat
Scid, die aktuelle Datenbank nach Spielern, zu durchsuchen, die keine
Elo-Zahl haben, fr die die Schreibkorrekturdatei aber eine Elo-Zahl
des jeweiligen Spielers zum Zeitpunkt der Partie enthlt. Scid ergnzt
alle diese Elo-Zahlen automatisch. Das ist sehr ntzlich fr eine
Datenbank mit Meisterpartien, die nur wenige Elo-Angaben enthlt.
</p>
<p>
Die mit Scid gelieferte Datei "spelling.ssp" enthlt die fr diese
Funktion bentigten Elo-Zahlen nicht, aber eine grere Version von
ihr namens "ratings.ssp" steht auf der  <a Author>Scid-Website</a>
zur Verfgung.
</p>

<h3><name Cleaner>Der Bereiniger</name></h3>
<p>
Der <term>Bereiniger</term> von Scid (vom Wartungsfenster zu erreichen)
ist ein Werkzeug, um eine Reihe von Wartungsarbeiten fr eine Datenbank
in einem durchzufhren. Sie knnen whlen, welche Aufgaben Sie erledigen
wollen, und Scid fhrt sie fr die Datenbank aus, ohne weitere Eingaben
des Benutzers zu bentigen. Das ist besonders bei der Wartung sehr
groer Datenbanken hilfreich.
</p>

<h3>Partien automatisch laden</h3>
<p>
Der <term>Automatische Lader</term> ldt jedesmal, wenn Sie die
Datenbank ffnen, eine Partie automatisch. Um die Partie, die geladen
wird, zu ndern, whlen Sie den Schalter "Automatisch Partie Nr.
laden..." Wenn Sie jedesmal die letzte Partie der Datenbank geffnet
haben wollen (unabhngig von der Anzahl der Partien in der Datenbank),
whlen Sie einfach eine besonders groe Zahl wie 9999999.
</p>

<p><footer>(Aktualisiert: Scid 3.1, Dezember 2001)</footer></p>
}


##############
### ECO guide:

set helpTitle(D,ECO) "ECO-Fhrer"
set helpText(D,ECO) {<h1>ECO-Erffnungsklassifikation</h1>
<p>
Scid kann Schachpartien gem der <b>ECO</b>- (Enzyklopdie der
Schacherffnungen) -Erffnungsklassifikation einordnen. Ein
Standard-ECO-Code besteht aus einem Buchstaben (A..E) gefolgt von
zwei Ziffern, so da es 500 verschiedene Standard-ECO-Codes gibt.
</p>

<h3>Scids Erweiterung des ECO-Systems</h3>
<p>
Das ECO-System ist sehr limitiert und fr moderne Partien nicht
ausreichend: einige der 500 Codes sieht man praktisch berhaupt nicht
mehr, whrend einige andere sehr hufig vorkommen. Um diese Situation
zu verbessern, erlaubt Scid eine optionale Erweiterung der
ECO-Basiscodes: jeder Code kann um einen Buchstaben (a..z) erweitert
werden, wobei eine weitere Ergnzung (noch eine Ziffer, 1..4) mglich
ist, aber noch nicht in Scids Standard-ECO-Datei benutzt wird.
Ein erweiterter Scid-ECO-Code sieht also etwa aus wie "<b>A41e</b>"
oder "<b>E99b2</b>". Viele der in modernen Meisterpartien vorkommenden
blichen ECO-Codes haben eine in Scids ECO-Datei definierte
Erweiterung.
</p>

<h3><name Browser>Die ECO-Auswertung</name></h3>
<p>
Das Fenster <term>ECO-Auswertung</term> zeigt Ihnen die Positionen,
die zur Klassifizierung jedes ECO-Codes verwendet werden, sowie die
Hufigkeit und Erfolgsrate der ECO-Codes in der der aktuellen Datenbank.
</p>
<p>
Der obere Teil zeigt die Hufigkeit jedes ECO-Codes in der aktuellen
Datenbank. Die Balken in der Grafik haben drei Bereiche: der unterste
(hellste Farbe) steht fr die Anzahl der Weisiege, der mittlere fr
die Zahl der Remis und der oberste (dunkelste) fr die Anzahl der
Schwarzsiege. Damit knnen Sie auf einen Blick die Charakteristik einer
Erffnung erkennen: z.B., ob Wei sehr erfolgreich ist oder ob Remis
hufig vorkommen.
</p>
<p>
Um zu einem tieferen ECO-Niveau zu gehen, klicken Sie mit der linken
Maustaste auf einen Balken in der Grafik (oder tippen Sie den
korrespondierenden Buchstaben (bzw. Ziffer) ein). Um auf ein hheres
Niveau zurckzugehen, klicken Sie mit der rechten Maustaste irgendwo
auf die Grafik oder drcken Sie die linke Cursortaste (oder [Entf]
oder [Rck]).
</p>
<p>
Der untere Teil zeigt die Positionen, die ein bestimmter ECO-Code
enthlt, und zwar entsprechend der von Ihnen geladenen ECO-Datei.
</p>

<h3>Die ECO-Datei laden</h3>
<p>
Die zu Scid gehrende ECO-Datei heit <b>scid.eco</b>, und Scid
versucht sie beim Programmstart zu laden.
Falls Scid sie nicht findet, mssen Sie folgendes tun, um die
ECO-Klassifikation zu ermglichen:
<ul>
<li>(a) Mit dem Menpunkt <menu>Optionen: ECO-Datei laden</menu>
        whlen Sie die Datei <b>scid.eco</b>. </li>
<li>(b) Speichern Sie die Optionen (im <menu>Optionen</menu>-Men). </li>
</ul>
Nachdem Sie das getan haben, wird die ECO-Datei jedesmal geladen, wenn
Sie Scid starten.
</p>

<h3>Das ECO-Code-System</h3>
<p>
Die Basisstruktur des ECO-Systems ist folgende:
</p>
<p>
<b><blue><run ::windows::eco::Refresh A>A</run></blue></b>
    1.d4 Sf6 2...;  1.d4 ...;  1.c4;  1.Verschiedenes
<ul>
<li>  <b>A0</b>  1.<i>Verschiedenes</i>
      (<b>A02-A03</b> 1.f4: <i>Bird-Erffnung</i>,
      <b>A04-A09</b>  1.Sf3: <i>Reti, Knigsindischer Angriff</i>) </li>
<li>  <b>A1</b>  1.c4 ...: <i>Englisch</i> </li>
<li>  <b>A2</b>  1.c4 e5: <i>Englisch, Knigsbauer</i> </li>
<li>  <b>A3</b>  1.c4 c5: <i>Englisch, Symmetrisch</i> </li>
<li>  <b>A4</b>  1.d4 ...: <i>Damenbauer</i> </li>
<li>  <b>A5</b>  1.d4 Sf6 2.c4 ..: <i>Indische Verteidigung </i> </li>
<li>  <b>A6</b>  1.d4 Sf6 2.c4 c5 3.d5 e6: <i>Modernes Benoni </i> </li>
<li>  <b>A7</b>  A6 + 4.Sc3 exd5 5.cxd5 d6 6.e4 g6 7.Sf3 </li>
<li>  <b>A8</b>  1.d4 f5: <i>Hollndische Verteidigung</i> </li>
<li>  <b>A9</b>  1.d4 f5 2.c4 e6: <i>Hollndische Verteidigung</i> </li>
</ul>

<p>
<b><blue><run ::windows::eco::Refresh B>B</run></blue></b>   1.e4 c5;  1.e4 c6;  1.e4 d6;  1.e4 <i>Verschidenes</i>
<ul>
<li>  <b>B0</b>  1.e4 ...
      (<b>B02-B05</b>  1.e4 Sf6: <i>Aljechin-Verteidigung</i>;
      <b>B07-B09</b>  1.e4 d6: <i>Pirc</i>) </li>
<li>  <b>B1</b>  1.e4 c6: <i>Caro-Kann</i> </li>
<li>  <b>B2</b>  1.e4 c5: <i>Sizilianische Verteidigung</i> </li>
<li>  <b>B3</b>  1.e4 c5 2.Sf3 Nc6: <i>Sizilianisch</i> </li>
<li>  <b>B4</b>  1.e4 c5 2.Sf3 e6: <i>Sizilianisch</i> </li>
<li>  <b>B5</b>  1.e4 c5 2.Sf3 d6: <i>Sizilianisch</i> </li>
<li>  <b>B6</b>  B5 + 3.d4 cxd4 4.Sxd4 Sf6 5.Sc3 Sc6 </li>
<li>  <b>B7</b>  B5 + 4.Sxd4 Sf6 5.Sc3 g6: <i>Sizilianisch, Drachen</i> </li>
<li>  <b>B8</b>  B5 + 4.Sxd4 Sf6 5.Sc3 e6: <i>Sizilianisch, Scheveninger</i> </li>
<li>  <b>B9</b>  B5 + 4.Sxd4 Sf6 5.Sc3 a6: <i>Sizilianisch, Najdorf</i> </li>
</ul>

<p>
<b><blue><run ::windows::eco::Refresh C>C</run></blue></b>   1.e4 e5;  1.e4 e6
<ul>
<li>  <b>C0</b>  1.e4 e6: <i>Franzsische Verteidigung</i> </li>
<li>  <b>C1</b>  1.e4 e6 2.d4 d5 3.Sc3: <i>Franzsisch, Winawer/Klassisch</i> </li>
<li>  <b>C2</b>  1.e4 e5: <i>Offene Partie</i> </li>
<li>  <b>C3</b>  1.e4 e5 2.f4: <i>Knigsgambit</i> </li>
<li>  <b>C4</b>  1.e4 e5 2.Sf3: <i>Offene Partie</i> </li>
<li>  <b>C5</b>  1.e4 e5 2.Sf3 Sc6 3.Lc4: <i>Italienisch; Zweispringerspiel</i> </li>
<li>  <b>C6</b>  1.e4 e5 2.Sf3 Sc6 3.Lb5: <i>Spanische Partie</i> </li>
<li>  <b>C7</b>  1.e4 e5 2.Sf3 Sc6 3.Lb5 a6 4.La4: <i>Spanisch</i> </li>
<li>  <b>C8</b>  C7 + 4...Sf6 5.0-0: <i>Spanisch, Geschlossen und Offen</i>
      (<b>C80-C83</b>  5.0-0 Sxe4: <i>Spanisch, Offenes System</i>;
      <b>C84-C89</b>  5.0-0 Le7: <i>Spanisch, Geschlossenes System</i>) </li>
<li>  <b>C9</b>  C8 + 5...Le7 6.Te1 b5 7.Lb3 d6: <i>Spanisch, Geschlossen</i> </li>
</ul>

<p>
<b><blue><run ::windows::eco::Refresh D>D</run></blue></b>   1.d4 d5; 1.d4 Sf6 2.c4 g6 with 3...d5
<ul>
<li>  <b>D0</b>   1.d4 d5: <i>Damenbauernspiele</i> </li>
<li>  <b>D1</b>   1.d4 d5 2.c4 c6: <i>Slawisch</i> </li>
<li>  <b>D2</b>  1.d4 d5 2.c4 dxc4: <i>Angenommenes Damengambit</i> </li>
<li>  <b>D3</b>  1.d4 d5 2.c4 e6: <i>Abgelehntes Damengambit</i> </li>
<li>  <b>D4</b>  D3 + 3.Sc3 Sf6 4.Sf3 c5/c6: <i>Semi-Tarrasch; Semi-Slawisch</i> </li>
<li>  <b>D5</b>  D3 + 3.Sc3 Sf6 4.Lg5: <i>Klassisches Damengambit</i> </li>
<li>  <b>D6</b>  D5 + 4...Le7 5.e3 0-0 6.Sf3 Sbd7: <i>Orthodoxes Damengambit</i> </li>
<li>  <b>D7</b>  1.d4 Sf6 2.c4 g6 with 3...d5: <i>Grnfeld-Indisch</i> </li>
<li>  <b>D8</b>  1.d4 Sf6 2.c4 g6 3.Sc3 d5: <i>Grnfeld-Indisch</i> </li>
<li>  <b>D9</b>  1.d4 Sf6 2.c4 g6 3.Sc3 d5 4.Sf3: <i>Grnfeld-Indisch</i> </li>
</ul>

<p>
<b><blue><run ::windows::eco::Refresh E>E</run></blue></b>   1.d4 Sf6 2.c4 e6; 1.d4 Sf6 2.c4 g6 </li>
<ul>
<li>  <b>E0</b>  1.d4 Sf6 2.c4 e6: <i>Katalanisch etc.</i> </li>
<li>  <b>E1</b>  1.d4 Sf6 2.c4 e6 3.Sf3 (b6): <i>Damenindisch etc.</i> </li>
<li>  <b>E2</b>  1.d4 Sf6 2.c4 e6 3.Sc3 (Lb4): <i>Nimzo-Indisch etc.</i> </li>
<li>  <b>E3</b>  E2 + 4.Lg5 or 4.Dc2: <i>Nimzo-Indisch</i> </li>
<li>  <b>E4</b>  E2 + 4.e3: <i>Nimzo-Indisch, Rubinstein</i> </li>
<li>  <b>E5</b>  E4 + 4...0-0 5.Sf3: <i>Nimzo-Indisch, Hauptvariante</i> </li>
<li>  <b>E6</b>  1.d4 Sf6 2.c4 g6: <i>Knigsindisch</i> </li>
<li>  <b>E7</b>  1.d4 Sf6 2.c4 g6 3.Sc3 Lg7 4.e4: <i>Knigsindisch</i> </li>
<li>  <b>E8</b>  E7 + 4...d6 5.f3: <i>Knigsindisch, Smisch</i> </li>
<li>  <b>E9</b>  E7 + 4...d6 5.Sf3: <i>Knigsindisch, Hauptvarianten</i> </li>
</ul>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}

####################
### Calvar window help:

set helpTitle(D,CalVar) "Varianten berechnen"
set helpText(D,CalVar) {<h1>Das Varianten-berechnen-Fenster</h1>
  <p>
Dieses Training ist auch als Stoyko-bung bekannt. 
Das Ziel dieser bung ist die Analyse einer komplexen Stellung und daraus so viele wie mgliche plausible Varianten zu ermitteln. Jeder Variante wird mit einer Bewertung versehen. 
  </p> 
<p><h3>Konfiguration</h3></p>
Drei Parameter werden eingestellt:
<ul>
<li>Die zur Analyse der verschiedenen Varianten eingesetze UCI-Engine</li>
<li>Zeit, in Sekunden, die zur Analyse der Stellung von der Engine verwendet wird.</li>
<li>Zeit, in Sekunden, die zur Analyse der vom Anwender eingegebenen Variante durch die Engine verwendet wird.</li>
</ul>
<p><h3>Eingabe der Varianten</h3></p>
Die Zugeingabe erfolgt durch Mausklicks auf die Felder des Brettes, allerdings wird auf dem Brett nichts angezeigt. Die angeklickten Felder erscheinen im Varianten-berechnen-Fenster. Jeder Variante wird am Ende mit einer Bewertung abgeschlossen: Es wird einer der Knpfe mit den NAG-Codes gedrckt.
  <p><h3>Auswertung der Bewertung</h3></p>
Wurde eine Variante mit einer NAG-Code-Bewertung abgeschlossen, berechnet die Engine ihre Bewertung der Variante und hngt ihre Variante und Bewertung direkt an die Benutzer-Variante an. 
  <p><h3>Fertig mit der Stellung</h3></p>
Ist der Anwender der Meinung alle besten Varianten gefunden zu haben, drckt er <b>Fertig mit Stellung</b>. Es werden dann noch alle Varianten (mit dem Kommentar <b>Fehlende Varianten</b>) mit einer hheren Bewertung als die beste Variante des Anwenders hinzugefgt. 
  
  <p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}

####################
### EPD files help:

set helpTitle(D,EPD) "EPD-Dateien"
set helpText(D,EPD) {<h1>EPD-Dateien</h1>
<p>
Eine EPD-Datei (extended position description = erweiterte
Stellungsbeschreibung) ist eine Sammlung von Positionen, wobei jeder
Position ein Text zugeordnet ist. Wie <a PGN>PGN</a> ist EPD ein
verbreiteter Standard fr Schachinformationen.
</p>
<p>
Eine EPD-Datei hat eine Reihe definierter "<term>Opcodes</term>"(-Felder),
die in der Datei durch Semikolons (<b>;</b>) getrennt gespeichert sind,
in einem EPD-Fenster von Scid aber in separaten Zeilen dargestellt
werden, um das Bearbeiten zu erleichtern. Ein Semikolon innerhalb eines
EPD-Feldes wird von Scid als "<b>\s</b>" gespeichert, um es von den
Feldende-Markierungen zu unterscheiden.
Jede Position und ihre zugehriger Opcode wird in der EPD-Datei in
einer einzelnen Zeile gespeichert.
</p>
<p>
Standard-EPD-Opcodes sind u.a.:
<ul>
<li> <b>acd</b> Analyse-Zhler: Suchtiefe.</li>
<li> <b>acn</b> Analyse-Zhler: Anzahl der durchsuchten Knoten.</li>
<li> <b>acs</b> Analyse-Zhler: Suchzeit in Sekunden.</li>
<li> <b>bm</b> Beste Zge: aus irgendeinem Grund als beste
eingestufte Zge.</li>
<li> <b>ce</b> Stellungsbeurteilung: Beurteilung in Hundertstel Bauern
[ce = "centipawn evaluation"] aus Sicht der <b>am Zug</b>
befindlichen Seite -- beachten Sie, da sich dies vom Analysefenster
unterscheidet, welches die Einschtzung in Bauerneinheiten aus der
Sicht von Wei zeigt. </li>
<li> <b>cX</b> Kommentar (wobei <b>X</b> eine Ziffer ist, 0-9).</li>
<li> <b>eco</b> Erffnungscode des <a ECO>ECO</a>-Systems.</li>
<li> <b>id</b> Eindeutige Identifizierung dieser Stellung.</li>
<li> <b>nic</b> Erffnungscode des <i>New-In-Chess</i>-Systems.</li>
<li> <b>pm</b> Vorhergesagter Zug: der erste Zug der PV.</li>
<li> <b>pv</b> Vorhergesagte Variante: die beste Variante.</li>
</ul>
</p>
<p>
EPD-Dateien haben einen vielfachen Nutzen: Scid verwendet EPD-Dateien,
um Partien nach dem System der <a ECO>Enzyklopdie der
Schacherffnungen</a> (ECO) zu klassifizieren, und Sie knnen eine
EPD-Datei fr Ihr Erffnungsrepertoire erstellen, mit Kommentaren
zu Stellungen, die Sie regelmig auf dem Brett haben.
</p>
<p>
Mit den Optionen <menu>Neu</menu> und <menu>ffnen</menu>
im <menu>Datei</menu>-Men knnen Sie eine neue EPD-Datei erstellen
bzw. eine bestehende ffnen. Maximal vier EPD-Dateien knnen
gleichzeitig geffnet sein.
</p>

<h3>EPD-Fenster</h3>
<p>
Fr jede geffnete EPD-Datei sehen Sie ein Fenster, welches den Text zur
aktuellen Stellung zeigt. Sie mssen nicht den Schalter "Speichern"
bettigen, um nderungen des Textes zu sichern; der Text wird jedesmal
gespeichert, wenn Sie zu einer anderen Partiestellung gehen.
</p>

<h3>In EPD-Dateien navigieren</h3>
<p>
Um sich durch die Stellungen in einer EPD-Datei zu bewegen, verwenden
Sie die Kommandos <menu>Nchste Position</menu> und <menu>Vorherige
Position</menu> im <menu>Werkzeuge</menu>-Men des EPD-Fensters oder
die Tastenkombinationen <b>Strg+Ab</b> and <b>Strg+Auf</b>.
Diese Befehle gehen zur nchsten/vorherigen Position in der Datei,
wobei sie die aktuelle Partie lschen und die Ausgangsposition
herstellen.
</p>

<h3>EPD-Felder entfernen</h3>
<p>
EPD-Dateien, die Sie im Internet finden, enthalten mglicherweise
Felder, die Sie nicht interessieren und die eine Menge Speicherplatz
in der Datei verschwenden.
Beispielsweise knnte eine EPD-Datei mit Computerauswertungen die Felder
ce, acd, acn, pm, pv und id enthalten, Sie brauchen aber vielleicht
nur das ce- und pv-Feld.
</p>
<p>
Sie knnen einen EPD-Opcode mit dem Menpunkt <menu>EPD-Feld
entfernen</menu> im <menu>Werkzeuge</menu>-Men des EPD-Fensters
aus allen Stellungen in der EPD-Datei entfernen.
</p>

<h3>Die Statusanzeige des EPD-Fensters</h3>
<p>
Die Statuszeile jedes EPD-Fensters zeigt:
<ul>
<li>- den Dateistatus (<b>--</b> heit unverndert, <b>XX</b> heit
      verndert und <b>%%</b> heit schreibgeschtzt); </li>
<li>- den Dateinamen; </li>
<li>- die Anzahl der Positionen in der Datei; </li>
<li>- zulssige Zge in der aktuellen Stellung, die eine andere
Stellung in der EPD-Datei erreichen .</li>
</ul>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


###################
### Exporting help:

set helpTitle(D,Export) "Partien exportieren"
set helpText(D,Export) {<h1>Partien exportieren</h1>
<p>
Sie knnen die Kommandos im <menu>Werkzeuge</menu>-Men benutzen, um die
aktuelle Partie oder alle Partien im aktuellen Filter in eine Textdatei
zu exportieren.
</p>
<p>
Drei Textdatei-Formate stehen zur Verfgung: <a PGN>PGN</a> (portable
game notation), HTML (fr Webseiten) und LaTeX (ein populres
Textsatzsystem).
</p>
<p>
Beim Exportieren knnen Sie whlen, eine neue Datei zu erstellen
oder die Partien einer existierenden Partiendatei hinzuzufgen.
</p>

<h3>Diagramme</h3>
<p>
Wenn Sie im HTML- oder LaTeX-Format exportieren, fgt Scid automatisch
berall dort ein Diagramm ein, wo ein Diagramm-<a NAGs>NAG</a> ("D")
oder ein mit dem Zeichen "#" beginnender <a Comment>Kommentar</a>
in der Partie vorkommt.
</p>

<h3><name Null>Nullzge beim PGN-Export</name></h3>
<p>
Scid erlaubt es, in einer Partie <a Annotating Null>Null- (leere)
Zge</a> zu speichern, da diese beim Kommentieren mit Varianten
hilfreich sein knnen. Allerdings gibt es im PGN-Standard keine
Nullzge. Wenn Sie also Scid-Partien mit Nullzgen in eine PGN-Datei
exportieren, werden andere Programme zum PGN-Lesen nicht in der Lage
sein, die Nullzge zu lesen.
</p>
<p>
Um dieses Problem zu lsen, stellt Scid eine weitere Option bereit,
<b>Nullzge in Kommentare umwandeln</b>, wenn Partien in PGN-Format
exportiert werden. Wenn Sie eine PGN-Datei erstellen wollen, die von
anderer Software verwendet werden kann, schalten Sie diese Option ein,
und Varianten, die Nullzge enthalten, werden in Kommentare umgewandelt.
Wenn Sie jedoch eine PGN-Dateie erstellen wollen, die spter wieder
unter Beibehaltung der Nullzge von Scid importiert werden kann,
lassen Sie diese Option aus.
</p>

<h3>HTML-Export</h3>
<p>
Scid kann Partien in eine HTML-Datei exportieren. Um Diagramme einzufgen,
mssen die Diagrammbilder (im Verzeichnis "<b>bitmaps/</b>" mitgeliefert)
in einem Unterverzeichnis "<b>bitmaps/</b>" unterhalb des Verzeichnisses
sein, wo sich die HTML-Datei befindet.
</p>

<h3>LaTeX-Export</h3>
<p>
Scid kann Partien in eine LaTeX-Datei exportieren. Partien werden in
zwei Spalten pro Seite gedruckt und Zge in figuriner algebraischer
Notation.
</p>
<p>
Fr weitere Informationen siehe die Hilfeseite <a LaTeX>Scid und LaTeX</a>.
</p>

<p><footer>(Aktualisiert: Scid 3.4, Juli 2002)</footer></p>
}


####################
### Flags help:

set helpTitle(D,Flags) "Partie-Markierungen"
set helpText(D,Flags) {<h1>Partie-Markierungen</h1>

<p>
Eine <term>Markierung</term> ("flag") ist ein Kennzeichen irgendeiner
Schach-Charakteristik, die fr jede Partie der Datenbank ein- oder
ausgeschaltet werden kann. Es gibt 13 vom Benutzer einstellbare
Markierungen, die Sie direkt fr jede Partie setzen knnen. Von diesen
hat nur die Lsch-Markierung eine besondere Bedeutung: Partien, bei
denen die Lsch-Markierung eingeschaltet ist, sind zur Lschung
vorgemerkt und werden entfernt, wenn die Datenbank
<a Compact>komprimiert</a> wird.
</p>
<p>
Die anderen 12 vom Benutzer einstellbaren Markierungen und ihre
Symbole sind:
</p>

<ul>
<li>Erffnung Wei (W)</li>
<li>Erffnung Schwarz (B)</li>
<li>Mittelspiel (M)</li>
<li>Endspiel (E)</li>
<li>Neuerung (N)</li>
<li>Bauernstruktur (P)</li>
<li>Taktik (T)</li>
<li>Spiel auf dem Damenflgel (Q)</li>
<li>Spiel auf dem Kngsflgel (K)</li>
<li>Brilliant (!)</li>
<li>Patzer (?)</li>
<li>Benutzer-definiert (U)</li>
</ul>

<p>
Eine Markierung kann fr die aktuelle Partie, fr alle Partien im
Filter oder fr alle Partien der Datenbank im
<a Maintenance>Wartungs</a>-Fenster gesetzt werden.
</p>
<p>
Sie knnen die <a Searches Header>Suche nach Partiedaten</a> benutzen,
um alle Datenbankpartien zu finden, die eine bestimmte Markierung ein-
oder ausgeschaltet haben, oder die Markierungen als Teil einer
komplexeren Suche verwenden.
</p>
<p>
Da alle vom Benutzer einstellbaren Markierungen keine Bedeutung fr
Scid haben (mit Ausnahme der Lsch-Markierung), knnen Sie sie fr
Ihre eigenen Bedrfnisse  verwenden. Zum Beispiel knnten Sie die
Markierung "Spiel auf dem Kngsflgel" (K) fr Bauernstrme auf den
Knig verwenden, fr Figurenangriffe auf den Knig oder auch fr
Endspiele mit allen Bauern auf dem Knigsflgel.
</p>

<p><footer>(Aktualisiert: Scid 3.0, November 2001)</footer></p>
}


###############
### LaTeX help:

set helpTitle(D,LaTeX) "Scid und LaTeX"
set helpText(D,LaTeX) {<h1>Scid und LaTeX</h1>
<p>
Scid kann Partien und Erffnungsberichte im LaTeX-Format in Dateien
sichern. LaTeX ist eine Erweiterung von TeX, einem populren Textsatzsystem.
</p>
<p>
Um die von Scid erzeugten LaTeX-Dateien darzustellen, mssen Sie
(natrlich) LaTeX haben und das Schachzeichensatz-Paket "chess12"
installiert haben. Dieses Paket ist normalerweise nicht Teil der
LaTeX-Standardinstallation, d.h selbst wenn Sie LaTeX haben, haben
Sie vielleicht nicht den Schachzeichensatz.
</p>
<p>
Informationen zum Herunterladen und Installieren des
LaTeX-Schachzeichensatzes finden Sie auf der Seite
<url http://scid.sourceforge.net/latex.html>Using LaTeX with Scid</url>
der <url http://scid.sourceforge.net/>Scid-Website</url>.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


###########################
### Options and Fonts help:

set helpTitle(D,Options) "Options"
set helpText(D,Options) {<h1>Optionen und Prferenzen</h1>
<p>
Viele Optionen und Prferenzen in Scid (z.B. die Brettgre, Farben, Schachbrettmuster,
Zeichenstze und Standardwerte) kann man im <menu>Optionen</menu>-Men
verndern. Alle diese (und mehr, wie etwa das letzte Verzeichnis, aus
dem Sie eine Datenbank gelesen haben, und die Gre einiger Fenster)
werden in einer Optionendatei gesichert, wenn Sie im Optionen-Men
<b>Optionen speichern</b> whlen.
Jedesmal, wenn Sie Scid starten, wird die Optionendatei geladen.
</p>
<p>
Wenn Sie mit Windows arbeiten, ist die Optionendatei <b>options.dat</b>
im Unterverzeichnis "config" der Scids Programmdatei abgelegt. Fr Benutzer von
Unix-Betriebssystemen (wie Solaris oder Linux) ist die Datei
<b>~/.scid/scidrc</b>.
</p>

<h3><name MyPlayerNames>Ihre Spielernamen festlegen</name></h3>
<p>
Es kann sein, da Sie fr einen (oder mehrere) Spieler das Brett im
Haupfenster aus der Sicht dieses Spielers aufgestellt haben mchten,
wenn eine seiner Partien geladen wird. Sie knnen eine Liste solcher
Namen mit <b>Meine Spielernamen...</b> im Men <menu>Optionen/Schachbrett</menu>
anlegen. In dem Dialogfenster geben Sie dann einen Spielernamen pro Zeile
ein. Jokerzeichen ("<b>?</b>" fr genau ein beliebiges Zeichen, "<b>*</b>"
fr eine Zeichenkette von null oder mehr Zeichen) sind erlaubt.
</p>

<h3><name Fonts>Zeichenstze einstellen</name></h3>
<p>
Scid hat drei Basis-Zeichenstze, die in den meisten Fenstern verwendet
werden, und Sie knnen alle drei individuell anpassen. Sie heien
<b>normal</b>, <b>klein</b> und <b>fest</b>.
</p>
<p>
Der feste Zeichensatz sollte ein Zeichensatz mit fester Breite
(nicht-proportional) sein. Er wird fr den <a Tree>Zugbaum</a> und die
<a Crosstable>Kreuztabelle</a> verwendet.
</p>

<p><footer>(Aktualisiert: Scid 3.6.21, November 2007)</footer></p>
}


####################
### Pgnscid help:

set helpTitle(D,Pgnscid) "Pgnscid"
set helpText(D,Pgnscid) {<h1>Pgnscid</h1>
<p>
<term>Pgnscid</term> ist ein separates Program, das Sie zur
Konvertierung von PGN-Dateien ("portable game notation") nach
Scid-Datenbanken bentigen.
</p>
<p>
Um eine Datei namens <i>partien.pgn</i> umzuwandeln, tippen Sie
einfach
<ul>
<li> <b>pgnscid partien.pgn</b> </li>
</ul>
ein, und die Scid-Datenbank (bestehend aus den Dateien
<i>partien.si3</i>, <i>partien.sg3</i> und <i>partien.sn3</i>) wird
erstellt.
Fehlermeldungen oder Warnungen werden in die Datei <i>partien.err</i>
geschrieben.
</p>
<p>
Wenn Sie wollen, da die Datenbank in einem anderen Verzeichnis oder
mit einem anderen Namen erstellt wird, knnen Sie den Datenbanknamen
in der Kommandozeile mit angeben, zum Beispiel erstellt
<ul>
<li> <b>pgnscid partien.pgn datenbank</b> </li>
</ul>
eine Datenbank bestehend aus den Dateien <i>datenbank.si3</i>,
<i>datenbank.sg3</i> und <i>datenbank.sn3</i>.
</p>
<p>
Beachten Sie, da pgnscid (und auch scid) mit gzip komprimierte
PGN-Dateien (z.B. <b>datenbank.pgn.gz</b>) direkt lesen kann, wenn Sie
also eine groe PGN-Datei mit gzip komprimiert haben, um Speicherplatz
zu sparen, mssen Sie sie nicht zuerst dekomprimieren.
</p>

<h3>Optionen</h3>
<p>
Pgnscid akzeptiert zwei optionale Argumente vor dem Dateinamen:
<b>-f</b> und <b>-x</b>.
</p>
<p>
Die Option <b>-f</b> erzwingt das berschreiben einer existierenden
Datenbank; standardmig wandelt pgnscid nicht in eine bereits
bestehende Datenbank um.
</p>
<p>
Die Option <b>-x</b> veranlat pgnscid, Text zwischen den Partien zu
ignorieren. Gem Voreinstellung wird Text zwischen Partien als
Kommentar vor der folgenden Partie gespeichert. Diese Option betrifft
nur Text zwischen Partien; Standardkommentare innerhalb der Partien
werden weiterhin konvertiert und gespeichert.
</p>

<h3>Spielernamen formatieren</h3>
<p>
Um die Anzahl verschiedener Namensschreibweisen desselben Spielers
zu reduzieren, werden von pgnscid einige Grundformatierungen
durchgefhrt. Zum Beispiel wird die Anzahl der Leerzeichen nach einem
Komma auf eins gesetzt, Leerzeichen am Anfang oder Ende eines Namens
werden ebenso wie ein Punkt am Namensende entfernt.
Hollndische Namenszustze wie "van den" und "Van Der" werden ebenfalls
normalisiert, so da sie ein groes "V" und kleines "d" haben.
</p>
<p>
Sie knnen Spieler-, Turnier-, Orts- und Rundenbezeichnungen in Scid
bearbeiten (und sogar automatische Schreibkorrekturen durchfhren);
zu den Details siehe die Hilfeseite <a Maintenance Editing>Wartung</a>.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


#################
### Sorting help:

set helpTitle(D,Sorting) "Datenbank sortieren"
set helpText(D,Sorting) {<h1>Eine Datenbank sortieren</h1>
<p>
Die <term>Sortier</term>-Funktionen sortieren alle Partien einer
Datenbank. Sie knnen mehrere Sortierkriterien auswhlen.
Wenn zwei Partien nach einem Kriterium gleichrangig sind, werden
sie nach dem zweiten Kriterium sortiert, und so weiter.
</p>

<h3>Sortierkriterien</h3>
<p>
Die verfgbaren Sortierkriterien sind:
</p>
<ul>
<li> Datum (lteste Partien zuerst)
<li> Jahr (wie Datum, aber nur das Jahr wird verwendet)
<li> Turnier (Ereignis)
<li> Ort
<li> Land (die letzten 3 Buchstaben des Ortes)
<li> Runde
<li> Wei
<li> Elo-Zahl (Durchschnitt von Wei und Schwarz, hhere zuerst)
<li> Schwarz
<li> Ergebnis (Wei gewinnt, danach Remis, danach Schwarz gewinnt)
<li> Lnge (Anzahl ganzer Zge in der Partie)
<li> ECO (Code der <a ECO>Enzyklopdie der Schacherffnungen</a>)
</ul>

<h3>Sortierergebnis</h3>
<p>
Wenn Sie eine nicht schreibgeschtzte Scid-Datenbank sortieren, wird das
Sortierergebnis gesichert, so da die Reihenfolge der Datenbankpartien
dauerhaft gendert ist. Falls Sie nur eine temporre Sortierung wollen,
schtzen Sie die Datenbank zuerst gegen berschreiben mit dem Menpunkt
<menu>Datei: Schreibschutz</menu>.
</p>
<p>
Wenn Sie eine Datenbank sortieren, die schreibgeschtzt ist oder aus
einer PGN-Datei besteht, kann das Sortierergebnis nicht gesichert werden,
so da die sortierte Partiereihenfolge verloren geht, wenn die Datei
geschlossen wird.
</p>
<p>
Beachten Sie, da das Sortieren einer Datenbank den
<a Searches Filter>Suchfilter</a> zurcksetzt auf alle Partien.
</p>

<h3>Wichtiger Hinweis zum Datenbank sortieren:</h3>
<p>
Wenn eine Datenbank sortiert wurde, ist die Indexdatei gendert, die
Partiendatei aber unverndert. Das heit, das Sortieren einer Datenbank
hinterlt die Partiedatenstze der Datei in einer zuflligen
Reihenfolge relativ zur Indexdatei. Das kann die <a Tree>Zugbaum</a>-,
Positions- und Material/Muster-<a Searches>Suche</a> merklich
<b>verlangsamen</b>, Sie sollten daher nach dem Datenbank sortieren
die Partiendatei durch <a Compact>Komprimieren</a> neuorganisieren,
um gute Suchleistungen zu erhalten.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


####################
### NAG values help:

set helpTitle(D,NAGs) "NAG-Werte"
set helpText(D,NAGs) {<h1>Standard-NAG-Werte</h1>
<p>
Standard-NAG-Werte (Numeric Annotation Glyph = "numerisches
Anmerkungszeichen"), im <a Author Related>PGN-Standard</a> definiert,
sind:
</p>
<cyan>
<ul>
<li>  1   Guter Zug (!) </li>
<li>  2   Schwacher Zug (?) </li>
<li>  3   Ausgezeichneter Zug (!!) </li>
<li>  4   Patzer / Grober Fehler (??) </li>
<li>  5   Interessanter Zug (!?) </li>
<li>  6   Zweifelhafter Zug (?!) </li>
<li>  7   Erzwungener Zug </li>
<li>  8   Der einzige Zug; keine vernnftige Alternative </li>
<li>  9   Schlechtester Zug </li>
<li> 10   Ausgeglichene Position (=) </li>
<li> 11   Gleiche Chancen, ruhige Stellung (=) </li>
<li> 12   Gleiche Chancen, aktive Stellung (=) </li>
<li> 13   Unklare Stellung (~) </li>
<li> 14   Wei hat leichten Vorteil, steht etwas besser (+=) </li>
<li> 15   Schwarz hat leichten Vorteil, steht etwas besser (=+) </li>
<li> 16   Wei hat Vorteil, steht besser (+/-) </li>
<li> 17   Schwarz hat Vorteil, steht besser (-/+) </li>
<li> 18   Wei hat entscheidenden Vorteil (+-) </li>
<li> 19   Schwarz hat entscheidenden Vorteil (-+) </li>
<li> 20   Wei hat berwltigenden Vorteil (+-) </li>
<li> 21   Schwarz hat berwltigenden Vorteil (-+) </li>
<li> 22   Wei ist in Zugzwang </li>
<li> 23   Schwarz ist in Zugzwang </li>
<li> 24   Wei hat leichten Raumvorteil </li>
<li> 25   Schwarz hat leichten Raumvorteil </li>
<li> 26   Wei hat Raumvorteil </li>
<li> 27   Schwarz hat Raumvorteil </li>
<li> 28   Wei hat entscheidenden Raumvorteil </li>
<li> 29   Schwarz hat entscheidenden Raumvorteil </li>
<li> 30   Wei hat leichten Zeit-(Entwicklungs)vorsprung </li>
<li> 31   Schwarz hat leichten Zeit-(Entwicklungs)vorsprung </li>
<li> 32   Wei hat Zeit-(Entwicklungs)vorsprung </li>
<li> 33   Schwarz hat Zeit-(Entwicklungs)vorsprung </li>
<li> 34   Wei hat entscheidenden Zeit-(Entwicklungs)vorsprung </li>
<li> 35   Schwarz hat entscheidenden Zeit-(Entwicklungs)vorsprung </li>
<li> 36   Wei hat die Initiative </li>
<li> 37   Schwarz hat die Initiative </li>
<li> 38   Wei hat andauernde Initiative </li>
<li> 39   Schwarz hat andauernde Initiative </li>
<li> 40   Wei hat Angriff </li>
<li> 41   Schwarz hat Angriff </li>
<li> 42   Wei hat keine ausreichende Kompensation fr das Material </li>
<li> 43   Schwarz hat keine ausreichende Kompensation fr das Material </li>
<li> 44   Wei hat ausreichende Kompensation fr das Material </li>
<li> 45   Schwarz hat ausreichende Kompensation fr das Material </li>
<li> 46   Wei hat mehr als ausreichende Kompensation fr das Material </li>
<li> 47   Schwarz hat mehr als ausreichende Kompensation fr das Material </li>
<li> 48   Wei hat leichtes bergewicht im Zentrum </li>
<li> 49   Schwarz hat leichtes bergewicht im Zentrum </li>
<li> 50   Wei hat bergewicht im Zentrum </li>
<li> 51   Schwarz hat bergewicht im Zentrum </li>
<li> 52   Wei hat entscheidendes bergewicht im Zentrum </li>
<li> 53   Schwarz hat entscheidendes bergewicht im Zentrum </li>
<li> 54   Wei hat leichtes bergewicht am Knigsflgel </li>
<li> 55   Schwarz hat leichtes bergewicht am Knigsflgel </li>
<li> 56   Wei hat bergewicht am Knigsflgel </li>
<li> 57   Schwarz hat bergewicht am Knigsflgel </li>
<li> 58   Wei hat entscheidendes bergewicht am Knigsflgel </li>
<li> 59   Schwarz hat entscheidendes bergewicht am Knigsflgel </li>
<li> 60   Wei hat leichtes bergewicht am Damenflgel </li>
<li> 61   Schwarz hat leichtes bergewicht am Damenflgel </li>
<li> 62   Wei hat bergewicht am Damenflgel </li>
<li> 63   Schwarz hat bergewicht am Damenflgel </li>
<li> 64   Wei hat entscheidendes bergewicht am Damenflgel </li>
<li> 65   Schwarz hat entscheidendes bergewicht am Damenflgel </li>
<li> 66   Wei hat eine schwache Grundreihe </li>
<li> 67   Schwarz hat eine schwache Grundreihe </li>
<li> 68   Wei hat eine gut gesicherte Grundreihe </li>
<li> 69   Schwarz hat eine gut gesicherte Grundreihe </li>
<li> 70   Wei hat einen schlecht gesicherten Knig </li>
<li> 71   Schwarz hat einen schlecht gesicherten Knig </li>
<li> 72   Wei hat einen gut gesicherten Knig </li>
<li> 73   Schwarz hat einen gut gesicherten Knig </li>
<li> 74   Der weie Knig steht schlecht </li>
<li> 75   Der schwarze Knig steht schlecht </li>
<li> 76   Der weie Knig steht gut </li>
<li> 77   Der schwarze Knig steht gut </li>
<li> 78   Wei hat eine sehr schwache Bauernstruktur </li>
<li> 79   Schwarz hat eine sehr schwache Bauernstruktur </li>
<li> 80   Wei hat eine schwache Bauernstruktur </li>
<li> 81   Schwarz hat eine schwache Bauernstruktur </li>
<li> 82   Wei hat eine starke Bauernstruktur </li>
<li> 83   Schwarz hat eine starke Bauernstruktur </li>
<li> 84   Wei hat eine sehr starke Bauernstruktur </li>
<li> 85   Schwarz hat eine sehr starke Bauernstruktur </li>
<li> 86   Der weie Springer steht schlecht </li>
<li> 87   Der schwarze Springer steht schlecht </li>
<li> 88   Der weie Springer steht gut </li>
<li> 89   Der schwarze Springer steht gut </li>
<li> 90   Der weie Lufer steht schlecht </li>
<li> 91   Der schwarze Lufer steht schlecht </li>
<li> 92   Der weie Lufer steht gut </li>
<li> 93   Der schwarze Lufer steht gut </li>
<li> 94   Der weie Turm steht schlecht </li>
<li> 95   Der schwarze Turm steht schlecht </li>
<li> 96   Der weie Turm steht gut </li>
<li> 97   Der schwarze Turm steht gut </li>
<li> 98   Die weie Dame steht schlecht </li>
<li> 99   Die schwarze Dame steht schlecht </li>
<li>100   Die weie Dame steht gut </li>
<li>101   Die schwarze Dame steht gut </li>
<li>102   Die weien Figuren sind schlecht koordiniert </li>
<li>103   Die schwarzen Figuren sind schlecht koordiniert </li>
<li>104   Die weien Figuren sind gut koordiniert </li>
<li>105   Die schwarzen Figuren sind gut koordiniert </li>
<li>106   Wei hat die Erffnung sehr schwach behandelt </li>
<li>107   Schwarz hat die Erffnung sehr schwach behandelt </li>
<li>108   Wei hat die Erffnung schwach behandelt </li>
<li>109   Schwarz hat die Erffnung schwach behandelt </li>
<li>110   Wei hat die Erffnung gut behandelt </li>
<li>111   Schwarz hat die Erffnung gut behandelt </li>
<li>112   Wei hat die Erffnung sehr gut behandelt </li>
<li>113   Schwarz hat die Erffnung sehr gut behandelt </li>
<li>114   Wei hat das Mittelspiel sehr schwach behandelt </li>
<li>115   Schwarz hat das Mittelspiel sehr schwach behandelt </li>
<li>116   Wei hat das Mittelspiel schwach behandelt </li>
<li>117   Schwarz hat das Mittelspiel schwach behandelt </li>
<li>118   Wei hat das Mittelspiel gut behandelt </li>
<li>119   Schwarz hat das Mittelspiel gut behandelt </li>
<li>120   Wei hat das Mittelspiel sehr gut behandelt </li>
<li>121   Schwarz hat das Mittelspiel sehr gut behandelt </li>
<li>122   Wei hat das Endspiel sehr schwach behandelt </li>
<li>123   Schwarz hat das Endspiel sehr schwach behandelt </li>
<li>124   Wei hat das Endspiel schwach behandelt </li>
<li>125   Schwarz hat das Endspiel schwach behandelt </li>
<li>126   Wei hat das Endspiel gut behandelt </li>
<li>127   Schwarz hat das Endspiel gut behandelt </li>
<li>128   Wei hat das Endspiel sehr gut behandelt </li>
<li>129   Schwarz hat das Endspiel sehr gut behandelt </li>
<li>130   Wei hat etwas Gegenspiel </li>
<li>131   Schwarz hat etwas Gegenspiel </li>
<li>132   Wei hat Gegenspiel </li>
<li>133   Schwarz hat Gegenspiel </li>
<li>134   Wei hat entscheidendes Gegenspiel </li>
<li>135   Schwarz hat entscheidendes Gegenspiel </li>
<li>136   Wei ist in leichter Zeitnot </li>
<li>137   Schwarz ist in leichter Zeitnot </li>
<li>138   Wei ist in erheblicher Zeitnot </li>
<li>139   Schwarz ist in erheblicher Zeitnot </li>
</ul>
</cyan>

<p>
Weitere vorgeschlagene NAG-Werte fr Schachinformator-Symbole sind u.a.:
</p>
<cyan>
<ul>
<li>140   Mit der Idee ... </li>
<li>141   Gerichtet gegen ... </li>
<li>142   Besser ist </li>
<li>143   Schlechter ist </li>
<li>144   Gleichwertig ist </li>
<li>145   Anmerkung des Herausgebers ("RR") </li>
<li>146   Neuerung ("N") </li>
<li>147   Schwacher Punkt </li>
<li>148   Endspiel </li>
<li>149   Linie </li>
<li>150   Diagonale </li>
<li>151   Wei hat das Luferpaar </li>
<li>152   Schwarz hat das Luferpaar </li>
<li>153   Verschiedenfarbige Lufer </li>
<li>154   Gleichfarbige Lufer </li>
</ul>
</cyan>

<p>
Andere Vorschlge sind:
</p>
<cyan>
<ul>
<li>190   Etc. </li>
<li>191   Doppelbauern </li>
<li>192   Isolierte Bauern </li>
<li>193   Verbundene Bauern </li>
<li>194   Hngende Bauern </li>
<li>195   Rckstndiger Bauer </li>
</ul>
</cyan>

<p>
Von Scid definierte Symbole zum internen Gebrauch:
</p>
<cyan>
<ul>
<li>201   Diagramm ("D", manchmal auch "#") </li>
</ul>
</cyan>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


######################
### File formats help:

set helpTitle(D,Formats) "Datei-Formate"
set helpText(D,Formats) {<h1>Scids Datei-Formate</h1>
<p>
Scid-Datenbanken bestehen aus drei essentiellen Dateien: eine
Indexdatei, eine Namendatei und eine Partiendatei. Alle haben eine
zweibuchstabige Dateiendung, beginnend mit "s": ".si" fr Indexdateien,
".sn" fr Namendateien und ".sg" fr Partiendateien.
</p>

<h3>Die Indexdatei (.si)</h3>
<p>
Diese Datei enthlt eine Beschreibung der Datenbank und fr jede Partie
einen kleinen Eintrag fester Lnge. Die aktuelle Gre ist 41 Bytes
pro Partie. Von diesen sind 28 Bytes wesentliche Informationen wie
Ergebnis, Datum, Indizes fr Spieler-, Turnier-, Ortsnamen (die
tatschlichen Namen befinden sich in der Namendatei) etc.
</p>
<p>
Die verbleibenden 13 Bytes enthalten redundante, aber ntzliche
Informationen zur Partie, die zur Beschleunigung der Positions-,
Material- und Mustersuche genutzt werden. Siehe den Abschnitt
<a Formats Fast>Schnelles Suchen</a> weiter unten fr weitere
Informationen.
</p>

<h3>Die Namendatei (.sn)</h3>
<p>
Diese Datei enthlt alle Spieler-, Turnier-, Orts- und Rundennamen, die
in der Datenbank verwendet werden. Jeder Name ist nur einmal gespeichert,
auch wenn er in vielen Partien vorkommt. Die Namendatei ist blicherweise
die kleinste der drei essentiellen Datenbankdateien.
</p>

<h3>Die Partiendatei (.sg)</h3>
<p>
Diese Datei enthlt die aktuellen Zge, Varianten und Kommentare jeder
Partie. Die Zugkodierung ist sehr kompakt: die meisten Zge bentigen
nur ein Byte.
</p>
<p>
Wenn eine Partie ersetzt wird, wird ihre neue Version am <i>Ende</i>
der Datei gespeichert, so da sich ber die Zeit nicht genutzter
Speicherplatz ansammelt. Sie knnen durch <a Compact>Komprimieren</a>
die minimale Gre einer Datenbank wiederherstellen.
</p>

<h3>Andere Scid-Dateien</h3>
<p>
Eine <a EPD>EPD</a>-Datei (Dateiendung: ".epd") enthlt eine Reihe von
Schachpositionen, jede mit einem Textkommentar.
Das EDP-Dateiformat ist beim <a Author Related>PGN-Standard</a>
beschrieben.
</p>
<p>
Eine E-Mail-Datei (Dateiendung: ".sem") einer Datenbank speichert
Daten der Gegner, denen Sie E-Mails senden.
</p>
<p>
Eine Suchoptionsdatei (Dateiendung: ".sso") enthlt Einstellungen fr
eine <a Searches Header>Partiedaten</a>- oder
<a Searches Material>Material/Muster</a>-Suche.
</p>

<h3><name Fast>Schnelles Suchen in Scid</name></h3>
<p>
Wie oben erwhnt, enthlt die Indexdatei einige redundante, aber
ntzliche Informationen ber jede Partie, um Positions- oder
Materialsuchen zu beschleunigen.
</p>
<p>
Beispielsweise ist das Material der Schlustellung gespeichert. Wenn Sie
nach Turm- und Bauernendspielen suchen, werden alle Partien, die mit
einer Dame, einem Lufer oder einem Springer auf dem Brett enden,
schnell bergangen.
</p>
<p>
Eine andere ntzliche Teilinformation ist in der Reihenfolge gespeichert,
in der Bauern ihre Ausgangsstellung verlassen haben (durch Ziehen oder
Geschlagenwerden). Dies wird zur Beschleunigung von Zugbaum- oder exakten
Suchen verwendet, insbesondere nach Erffnungspositionen. Beispielsweise
wird bei der Suche nach der Ausgangsstellung der Franzsischen
Verteidigung (1.e4 e6) jede Partie, die mit 1.e4 c5 oder 1.d4 etc.
beginnt, ausgelassen, Partien, die mit 1.e4 e5 anfangen, mssen aber
immer noch durchsucht werden.
</p>

<p><footer>(Aktualisiert: Scid 2.5, Juni 2001)</footer></p>
}


################
### Contact info

set helpTitle(D,Author) "Kontakt-Information"
set helpText(D,Author) {<h1>Kontakt-Information</h1>
<p>
Die Scid Internet - Seite ist erreichbar unter: <br>
<b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>
</p>
<p>
Sie bietet Downloads der neuesten Versionen von Scid und einigen anderen
zustzlichen und ntzlichen Dateien.
</p>
<p>
Bitte senden Sie Ihre Kommentare, Fragen, Vorschlge oder Fehlerberichte
an den Autor von Scid, Shane Hudson, an folgende E-Mail-Adresse: <br>
<b>sgh@users.sourceforge.net</b>
</p>

<h3><name Related>Links</name></h3>
<p>
Falls Sie Freude an Scid haben, knnten Sie die folgenden
Internetseiten interessieren:
</p>
<ul>
<li><url http://www.tim-mann.org/chess.html>http://www.tim_mann.org/chess.html</url> --
Homepage von Tim Mann's <b>xboard & winboard</b> Programm: eine grafische
Oberflche fr Schachprogramme und Schnittstelle fr Internet Schach
Server. Sie hat auch gute Informationen ber Crafty, GNUchess und
andere Schachprogramme.</li>

<li><url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url> --
das starke Schachprogram Crafty. Das <b>TB</b> -
Unterverzeichnis beinhaltet fast alle Nalimov-Endspieltabellen, welche
von einigen Schachprogrammen und auch von Scid benutzt werden.</li>

<li><url http://www.chesscenter.com/twic/>http://www.chesscenter.com/twic/</url> --
TWIC (the week in chess), ein hervorragendes Wochenmagazin fr
internationale Schachpartien, verfgbar im PGN-Format. </li>

<li><url http://scid.sourceforge.net/standard.txt>http://scid.sourceforge.net/standard.txt</url> --
der <b>PGN-Standard</b>, geschaffen von Steven J. Edwards im Jahre 1994.
Die Textdatei erklrt das PGN- und EPD-Format im Detail.</li>
</ul>

<p><footer>(Aktualisiert: Scid 2.6, August 2001)</footer></p>
}

# Book window help
set helpTitle(D,Book) "Buch-Fenster"
set helpText(D,Book) {<h1>Buch-Fenster</h1>
  <p>
 Das Buch-Fenster zeigt eine Liste aller im Buch-Verzeichnis von Scid verfgbaren Buch-Datenbanken an. Das Format der Bcher entspricht dem Format, welches von Polygot und den Engines Fruit und Toga verwendet wird.
  </p>
  <p>
 Das Buch-Fenster zeigt (aus dem ausgewhlten Buch) fr die aktuelle Position alle mglichen Zge, die im Buch enthalten sind und deren relativen Gewichtungen in Prozent an. Bei jedem Zug wird das Buch-Fenster aktualisiert. Beim Anklicken eines Zuges im Buch-Fenster wird dieser Zug in die aktuelle Stellung bernommen.
  </p>
  <p>
Zwischen den Bchern kann schnell gewechselt werden, in dem man in der oberen Liste ein anderes Buch auswhlt.
  </p>
  <p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}

# Tactical game window help
set helpTitle(D,TacticalGame) "Trainingspartie-Fenster"
set helpText(D,TacticalGame) {<h1>Trainingspartie-Fenster</h1>
  <p>
  Hier kann eine Trainingspartie gegene eine Engine gespielt werden, die einen Gegner mit einer bestimmten ELO-Zahl simuliert.  
  Der Gegner wird von Phalanx gespielt, als Coach wird Crafty eingesetzt. Diese Engines werden automatisch ber ihre Namen ausgewhlt und sollten korrekt konfiguriert sein. Standardmig werden diese Engines bei der Installation von Scid eingerichtet. 
  </p>
  <p>
  Folgende Parameter sind einzustellen:
  <ul>
  <li>Schwierigkeit : ELO-Zahl des Gegners</li>
  <li>Auswahl der Erffnung : Der Gegner wird die ausgewhlte Erffnung spielen (ntzlich fr das Training von Erffnungen).</li>
  <li>Analysezeit der Engine: Die Zge des Spielers werden duch eine Coach-Engine berprft. Die Zeit zur berprfung des Zuges um zu Bewerten, ob der Zug gut oder schlecht war, kann eingestellt werden.</li>
  </ul>
  <p>Zum Starten der Partie "Spielen" drcken.</p> 
  <p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}

# Opening Trainer window help
set helpTitle(D,OpeningTrainer) "Erffnungstrainer"
set helpText(D,OpeningTrainer) {<h1>Erffnungstrainer</h1>
  <p>
  Eine Scid Datenbank kann als Repertoire genutzt werden, wenn sie mit dem entsprechenden Typ/Icon markiert wurde. Die Datenbank muss einer der folgenen Typen sein:
  <li>Openings for White</li>
  <li>Openings for Black</li>
  <li>Openings for either Color</li> <br>
  Der Typ muss mit der Auswahl "Konfiguration Trainingsrepertoire" (Wei, Schwarz, Beide) bereinstimmen. Jede Partie reprsentiert eine Erffnungsvariante. 
  </p>
  
  <h3>Erffnungstrainer Statistik</h3>
  <p>
   Vier Zahlen zeigen die Statistik fr die aktuelle Stellung:
  <ul>
  <li>Grn : Anzahl bereits korrekt gespielten Zge.</li>
  <li>Gelb : Anzahl zweifelhafter gespielter Zge im Repertoire</li>
  <li>Rot : Anzahl der Zge, die nicht im Repertoire enthalten sind.</li>
  <li>Wei : Hufigkeit der Stellung</li>
  </ul>
  </p>
  
  <h3>Der Bericht</h3>
  <p>
  Der Bericht zeigt fr das ganze Repertoire Statistiken und gibt Informationen ber das Wissen des Anwenders:  
  <ul>
  <li>Positionen im Repertoire: Anzahl der Positione im Repertoire (alle Varianten in der Datenbank)</li>
  <li>nicht gespielte Positionen : Anzahl der Stellungen, die bisher nie gespielt wurden</li>
  <li>gespielte Positionen : gespielte Stellungen und die Summe wie hufig sie ausgespielt wurden. Anmerkung: Diese Zahl reprsentiert das Vorkommen der Stellung in allen Erffnungsvarianten: Diese Zahl kann fr Stellungen nahe der Startaufstellung schnell sehr gro werden.</li>
  <li>Erfolgreich : Anzahl der guten Zge durch den Spieler</li>
  <li>Zweifelhafte Zge : Anzahl der schwachen/schlechten Zge durch den Spieler</li>
  <li>Nicht im Repertoire : Anzahl der Zge des Spieler, die nicht im Repertoire enthalten sind.</li>
  </ul>
  </p> 
  <p><footer>(Aktualisiert: Scid 3.6.21, Dezember 2007)</footer></p>
}


############################################################
#
# German tip of the day

set tips(D) {
  {
    Scid hat mehr als 30 <a Index>Hilfeseiten</a> und in den meisten
    Scid-Fenstern liefert die <b>F1</b>-Taste die Hilfeseite zu diesem
    Fenster.
  }
  {
    Einige Scid-Fenster (z.B. Informationsbereich und
    Datenbank-<a Switcher>Umschalter</a>) haben ein Kontextmenu.
    Drcken Sie einfach die rechte Maustaste in jedem Fenster, um zu
    sehen, ob es ein Men hat und welche Funktionen zur Verfgung
    stehen.
  }
  {
    Scid bietet Ihnen mehr als eine Mglichkeit, Schachzge einzugeben,
    und lt Ihnen die Wahl, welche Ihnen am meisten zusagt. Sie knnen
    die Maus verwenden (mit oder ohne Zugvorschlag) oder die Tastatur
    (mit oder ohne Zugergnzung). Fr Details lesen Sie die Hilfeseite
    <a Moves>Zge eingeben</a>.
  }
  {
    Wenn Sie einige Datenbanken hufig ffnen, fgen Sie zu jeder ein
    <a Bookmarks>Lesezeichen</a> hinzu, dann knnen Sie sie schneller
    mit dem Lesezeichen-Men ffnen.
  }
  {
    Sie knnen alle Zge einer Partie (mit allen Varianten und
    Kommentaren) mit dem <a PGN>PGN-Fenster</a> betrachten. Im
    PGN-Fenster knnen Sie zu jedem beliebigen Zug gehen, indem Sie
    ihn mit der linken Maustaste anklicken oder mit der mittleren
    Maustaste eine Voransicht dieser Stellung erhalten.
  }
  {
    Sie knnen Partien mit der linken Maustaste per "Drag & Drop" im
    <a Switcher>Datenbank-Umschalter</a> von einer Datenbank in eine
    andere kopieren.
  }
  {
    Scid kann PGN-Dateien selbst dann ffnen, wenn sie mit Gzip
    komprimiert wurden (Dateiname mit Erweiterung .gz). PGN-Dateien
    werden schreibgeschtzt geffnet. Wenn Sie also eine PGN-Datei
    editieren wollen, erstellen Sie eine neue Scid-Datenbank und
    kopieren die PGN-Datei mit dem <a Switcher>Datenbank-Umschalter</a>
    dorthin.
  }
  {
    Wenn Sie eine groe Datenbank haben, die Sie oftmals mit dem
    <a Tree>Zugbaumfenster</a> nutzen, lohnt es sich,
    <b>Cache-Datei fllen</b> im Dateimen des Zugbaumfensters zu
    whlen. Damit merken Sie sich Zugbaum-Statistiken fr viele
    hufige Erffnungspositionen und beschleunigen den Zugriff auf
    den Zugbaum fr die Datenbank.
  }
  {
    Das <a Tree>Zugbaum</a>-Fenster kann Ihnen alle Zge zeigen, die
    in der aktuellen Position gespielt wurden, aber wenn Sie auch alle
    Zugfolgen sehen wollen, mit denen diese Stellung erreicht wurde,
    finden Sie diese, wenn Sie einen <a Reports Opening>Erffnungsbericht</a>
    erstellen.
  }
  {
    Klicken Sie mit der linken oder rechten Maustaste auf die berschrift
    einer Spalte im <a GameList>Partieliste</a>-Fenster , um ihre
    Breite anzupassen.
  }
  {
    Mit dem Fenster <a PInfo>Spielerinformation</a> (um es zu ffnen,
    klicken Sie einfach auf einen Spielernamen im Informationsbereich
    unter dem Hauptfenster-Schachbrett) knnen Sie auf einfache Weise
    den <a Searches Filter>Filter</a> so einstellen, da er alle Partien
    eines bestimmten Spielers mit einem bestimmten Ergebnis enthlt,
    indem Sie auf irgendeinen <red>in Rot</red> dargestellten Wert
    klicken.
  }
  {
    Beim Erffnungsstudium kann es sehr hilfreich sein, fr eine wichtige
    Position eine <a Searches Board>Brettsuche</a> mit der <b>Bauern</b>-
    oder <b>Linien</b>-Option durchzufhren, was andere Erffnungen
    entdecken knnte, die zur selben Bauernstruktur fhren.
  }
  {
    Im Informationsbereich (unterhalb des Schachbretts) knnen Sie mit
    der rechten Maustaste ein Men zur Gestaltung der Ausgabe aktivieren.
    Zum Beispiel knnen Sie Scid veranlassen, den nchsten Zug zu
    verstecken, was ntzlich ist, wenn man zum Trainieren eine Partie
    nachspielt und die Zge zu erraten versucht.
  }
  {
    Wenn Sie fr eine groe Datenbank oftmals eine umfangreiche
    Datenbank-<a Maintenance>Wartung</a> durchfhren, knnen Sie
    mehrere Wartungsarbeiten gleichzeitig mit dem
    <a Maintenance Cleaner>Bereiniger</a> ausfhren.
  }
  {
    Wenn Sie eine groe Datenbank haben, wo die meisten Partien einen
    Turniereintrag besitzen und Sie wollen die Partien nach Datum
    sortiert haben, erwgen Sie ein <a Sorting>Sortieren</a> nach
    Turnierdatum und Turnier anstatt nach Datum und Turnier, da
    Ihnen das hilft, Partien desselben Turniers mit unterschiedlichen
    Daten zusammen zu halten (natrlich unter der Voraussetzung, da
    sie alle dasselbe Turnierdatum haben).
  }
  {
    Es ist eine gute Idee, vor einem <a Maintenance Twins>Dubletten
    lschen</a> eine <a Maintenance Spellcheck>Schreibkorrektur</a>
    Ihrer Datenbank durchzufhren, da es dies Scid ermglicht, mehr
    Dubletten zu finden und zum Lschen vorzumerken.
  }
  {
    <a Flags>Markierungen</a> sind ntzlich, um Datenbankpartien mit
    Charakteristiken zu versehen, nach denen Sie zu einem spteren
    Zeitpunkt vielleicht suchen wollen, wie etwa Bauernstruktur, Taktik
    etc. Sie knnen mit der <a Searches Header>Partiedaten-Suche</a>
    nach Markierungen suchen.
  }
  {
    Wenn Sie eine Partie nachspielen und einige Zge ausprobieren
    wollen, ohne die Partie zu verndern, schalten Sie einfach den
    Testmodus ein (mit der Tastenkombination <b>Strg+Leerzeichen</b>
    oder mit dem Symbol aus der Werkzeugleiste), und wenn Sie fertig
    sind, schalten Sie ihn wieder aus, um zur ursprnglichen Partie
    zurckzukommen.
  }
  {
    Um die prominentesten Partien (Spieler mit hohen Elo-Zahlen)
    zu finden, die eine bestimmte Position erreicht haben, ffnen
    Sie das <a Tree>Zugbaum</a>-Fenster und dort die Liste der
    besten Partien. Sie knnen sogar die Liste der besten Partien
    auf Partien mit einem bestimmten Ergebnis begrenzen.
  }
  {
    Eine ausgezeichnete Methode, eine Erffnung mit Hilfe einer groen
    Datenbank zu studieren, ist, den Trainingsmodus im
    <a Tree>Zugbaum</a>-Fenster zu aktivieren und dann gegen die
    Datenbank zu spielen, um zu sehen, welche Zge hufig vorkommen.
  }
  {
    Wenn Sie zwei Datenbanken geffnet haben und die
    <a Tree>Zugbaum</a>-Statistik der ersten Datenbank sehen wollen,
    whrend Sie eine Partie der zweiten Datenbank untersuchen, drcken
    Sie einfach den Schalter <b>Anbinden</b> im Zugbaumfenster, um die
    Partie an die erste Datenbank zu binden, und wechseln dann zur
    zweiten Datenbank.
  }
  {
    Der <a Tmt>Turnierfinder</a> ist nicht nur zum Auffinden eines
    bestimmten Turniers ntzlich, sondern auch um zu sehen, an welchen
    Turnieren ein bestimmter Spieler vor kurzem teilgenommen hat,
    oder um die Spitzenturniere in einem bestimmten Land zu betrachten.
  }
  {
    Es gibt eine Reihe hufiger Stellungsmuster, die im Fenster
    <a Searches Material>Material/Muster</a>-Suche definiert sind und
    die Ihnen beim Erffnungs- oder Mittelspielstudium ntzlich sein
    knnen.
  }
  {
    Wenn Sie im Fenster <a Searches Material>Material/Muster</a>-Suche
    nach einer bestimmten Materialkonstellation suchen, ist es oftmals
    hilfreich, die Suche auf Partien zu beschrnken, die mindestens fr
    einige Halbzge auf das Suchmuster passen, um Partien auszusondern,
    wo die gesuchte Konstellation nur kurz vorkam.
  }
  {
    Wenn Sie eine wichtige Datenbank haben, die Sie nicht versehentlich
    verndern wollen, whlen Sie <b>Schreibschutz...</b> im
    <b>Datei</b>-Men, nachdem Sie sie geffnet haben, oder ndern Sie
    ihre Dateizugriffsrechte auf "nur Lesen".
  }
  {
    Wenn Sie XBoard oder WinBoard benutzen (oder ein anderes
    Schachprogramm, das Schachpositionen in FEN-Standardnotation in die
    Zwischenablage kopieren kann) und wollen dessen aktuelle
    Schachposition nach Scid kopieren, ist der schnellste und einfachste
    Weg, <b>Position sichern</b> im Dateimen von XBoard/Winboard zu
    whlen, danach <b>Stellung einfgen</b> in Scids Men "Bearbeiten".
  }
  {
    Die <a Searches Header>Partiedaten-Suche</a> ignoriert bei
    Spieler/Turnier/Ort/Runden-Namen Gro- und Kleinschreibung.  Sie
    knnen sie aber bercksichtigen und gleichzeitig
    Platzhalterzeichen verwenden (mit "?" = irgendein einzelnes
    Zeichen und "*" = null oder mehr Zeichen), wenn Sie den Suchtext
    in Anfhrungszeichen ("...")  eingeben. Beispielsweise geben Sie
    "*BEL" (mit den Anfhrungszeichen) im Ortsfeld ein, um alle in
    Belgien, nicht aber in Belgrad gespielten Partien zu finden.
  }
  {
    Wenn Sie einen Partiezug korrigieren wollen, ohne die danach
    gespielten Zge zu verlieren, ffnen Sie das
    <a Import>Import</a>-Fenster, klicken auf <b>Aktuelle Partie
    einfgen</b>, editieren den falschen Zug und whlen dann
    <b>Importieren</b>.
  }
  {
    Wenn Sie eine ECO-Klassifikationsdatei geladen haben, knnen Sie
    zur am weitest klassifizierten Position der aktuellen Partie mit
    <b>Erffnung identifizieren</b> im <b>Partie</b>-Men gehen
    (Tastenkombination: Strg+Umsch+D).
  }
  {
    Wenn Sie vor dem ffnen einer Datei ihre Gre oder das Datum ihrer
    letzten Modifikation berprfen wollen, ffnen Sie sie mit dem
    <a Finder>Dateifinder</a>.
  }
  {
    Eine <a Repertoire>Repertoire</a>-Datei ist eine ausgezeichnete
    Methode, Ihre favorisierten Erffnungsvarianten im Auge zu behalten
    und die Partien zu finden, wo diese Varianten gespielt wurden.
    Wenn Sie erst einmal Ihre Erffnungen in einer Repertoire-Datei
    gespeichert haben, knnen Sie jedesmal, wenn Sie eine neue Datei
    mit Partien haben, eine Repertoire-Suche durchfhren und die Partien
    mit Ihren favorisierten Erffnungen betrachten.
  }
  {
    Mit einem <a Reports Opening>Erffnungsbericht</a> kann man sehr gut
    mehr ber eine bestimmte Position lernen. Sie knnen die Erfolgsrate
    sehen, ob sie zu vielen Kurzremis fhrt und die typischen
    positionellen Themen.
  }
  {
    Sie knnen die gebruchlichsten Kommentarsymbole (!, !?, += etc.)
    dem aktuellen Zug oder der aktuellen Stellung mit Tastenkombinationen
    hinzufgen, ohne den Kommentareditor benutzen zu mssen -- um
    beispielsweise ein "!" hinzuzufgen, tippen Sie "!" und danach die
    Eingabetaste. Zu den Details siehe die Hilfeseite <a Moves>Zge
    eingeben</a>.
  }
  {
    Wenn Sie Erffnungen in einer Datenbank mit dem <a Tree>Zugbaum</a>
    betrachten, knnen Sie eine ntzlichen bersicht erhalten, welche
    Erfolge mit der aktuellen Erffnung in der letzten Zeit und zwischen
    Spitzenspielern erzielt wurden, indem Sie das Statistikfenster
    ffnen (Tastenkombination: Strg-I).
  }
  {
    Sie knnen die Gre des Hauptfensters ndern, indem Sie die
    <b>Strg</b>-Taste gedrckt halten und dann die Cursortaste
    <b>Links</b> oder <b>Rechts</b> drcken.
  }
  {
    Nach einer <a Searches>Suche</a> knnen Sie leicht durch alle
    passenden Partien blttern, indem Sie die <b>Strg</b>-Taste gedrckt
    halten und dann die Cursortaste <b>Auf</b> oder <b>Ab</b> drcken,
    um die vorherige bzw. nchste Partie im <a Searches Filter>Filter</a>
    zu laden.
  }
  {
    ber die Tasten <b>F2</b> und <b>F3</b> knnen direkt die letzten beiden Analyse-Engines gestartet werden, ohne dies nochmal auswhlen zu mssen. 
  }
}

############################################################
#
# German Correspondence Chess, thanks to Jochen Jansen for translation
set helpTitle(D,Correspondence) "Fernschach"
set helpText(D,Correspondence) {<h1>Fernschach</h1>

<p>
Derzeit bietet Scid zwei Wege an, um Fernschach 
zu spielen.
</p>
<ul>
   <li><b>Email Schach</b> verschickt die aktuelle Partie per Email an
   Ihren Gegner, sobald Sie Ihren Zug gemacht haben.  Zu diesem Zweck
   wird eine Email in dem von Ihnen bevorzugten Email-Programm
   generiert.  Diese Email enthlt eine PGN-Datei mit der aktuellen
   Partie als Anhang.  Von Ihnen evtl. eingefgte Kommentare oder
   Varianten werden selbstverstndlich vorher entfernt.
   </li>
   <li><b>Fernschach-Server</b> werden unter Verwendung des sog.
   Xfcc-Protokolls untersttzt. Sofern Sie bei einem solchen Server
   einen Account besitzen, holt ein externes Tool dort Ihre Partien ab
   und synchronisiert Scid entsprechend.  Sobald Sie dann ihren Zug
   gemacht haben, wird auf dem gleichen Wege wieder Ihr Zug vermittels
   Xfcc an Ihren Gegner gesendet. Das Holen und Senden wurde hier
   bewut ber ein externes Tool realisiert, da so spter einfachere
   Anpassung mglich sind, falls noch andere Protokolle erscheinen.
   </li>
</ul>
<p>
Sobald eine der Fernschachfunktionen aus dem Menue aufgerufen werden
ffnet sich das Fernschachfenster. Dieses Fenster kann auch aus dem
Fenster-Menue aus geffnet werden. Das Fernschachfenster enthlt die
ntigen Knpfe zur Navigation durch laufende Partien, um Partien via
Xfcc abzuholen und eMail-Partien zu synchronisieren. Auerdem bietet
es eine einfache Konsole zur Anzeige der gesendeten und Empfangenen
Nachrichten sowie eine Liste aller laufenden Partien aus Scids
Posteingang.
</p>

<p>
Bevor Sie irgendwelche Fernschachfunktionen nutzen knnen, mssen Sie
zuerst eine Datenbank vom Typ "Fernschach" anlegen! Erstellen Sie also
ggf. eine neue Datenbank ("Datei-> Neu..." oder Strg-C) und setzen Sie
dann im <a Maintenance>Wartungsfenster</a> den Typ der Datenbank auf
"Correspondence Chess" (Briefkastensymbol). Das Setzen dieses
Datenbanktyps ist unabdingbar, da Scid am Typ erkennt, mit welcher DB
es die empfangenen Zge abgleichen soll. Wenn wie im beschriebenen
Fall die Datenbank nach Erstellung ja noch leer ist, behandelt Scid
die empfangenen Partien automatisch als neue Partien und fgt diese an
die Datenbank an.
</p>

<p>
Falls Sie zu diesem Zeitpunkt noch keine Datenbank vom Typ
"Correspondence Chess" geffnet haben, wird Scid Sie daran erinnern.
Beachten Sie aber, nie mehr als eine Datenbank diesen Typs zu ffnen,
da Scid sonst nicht wei, welche der Datenbanken es verwenden soll.
</p>

<h3>Grundfunktionen</h3>

<p>
Wenn Sie alles korrekt eingerichtet haben, knnen Sie die
Fernschachfunktionen ganz einfach ber die folgenden Buttons erreichen
<ul>
   <li><button tb_CC_Retrieve> Abholen der Fernschach-Partien.  Ein
   externes Tool wird aufgerufen, das die Partien abholt, und alle so
   abgeholten Partien werden ebenso wie alle Partien, die sich zu
   diesem Zeitpunkt in Scids Posteingang (siehe unten)  mit der aktuell
   geffneten Fernschachdatenbank synchronisiert.
   </li>
   <li><button tb_CC_Send> Schickt Ihren Zug an Ihren Gegner, in dem
   es entweder eine Email in dem von Ihnen bevorzugten Emailprogramm
   erstellt oder den Zug vermittels des Xfcc-Protokolls an einen
   Fernschachserver sendet.
   </li>
   <li><button tb_CC_delete> leert das Posteingangs- und das
   Postausgangsverzeichnis.
   </li>
   <li><button tb_CC_online> zeigt an, dass die Partienliste in der
   aktuellen Scid-Sitzung online aktualisiert wurde. Der zugehrige
   Infotip zeit das Datum und die Uhrzeit der letzten Aktualisierung.
   </li>
   <li><button tb_CC_offline> zeigt an, dass der Xfcc-Status ohne
   Aktualisierung aus den gespeicherten Werten hergestellt wurde und
   somit nicht aktuell sein mu. Der zugehrige Infotip zeit das Datum
   und die Uhrzeit der letzten Aktualisierung.
   </li>
</ul>
</p>

<p>
Bitte beachten Sie auch die Liste der <a CCIcons>Icons und Statusindikatoren</a>.
</p>

<h3>Konfiguration</h3>

<p>
Fernschach mit Scid funktioniert ber eine normale Scid-Datenbank, die
Ihre Fernschachpartien enthlt, und einigen externen Tools, die fr
Scid den "nichtschachlichen-Teil" abwickeln. Diese Tools und einige
Parameters mssen einmalig eingerichtet werden, die Einstellungen
werden fr die sptere Nutzung gespeichert.
</p>

<p>
Sie erreichen den Konfigurationsdialog aus dem Men ber
<menu>Spielen</menu> <menu>Fernschach</menu><menu>Einrichten</menu>.
Einzelheiten finden Sie unter <a CCSetupDialog>Fernschach
einrichten</a>. Das Verlassen dieses Dialogs mittels des <b>[Ok]</b>
Buttons speichert automatisch die von Ihnen getroffenen Einstellungen
ab.
</p>

<h3>Partien empfangen</h3>
<p>
Je nach dem, ob Sie per Email oder ber einen Fernschachserver
spielen, ist der Empfangsprozess geringfgig verschieden. Wichtig ist,
dass am Ende Ihre Partie(n) als Datei(en) im PGN-Format in Scids Posteingang
Verzeichnis liegen, ganz gleich, auf welchem Weg Sie dies (evtl. durch
externe Programme) erreicht haben.
</p>
<p>
Sobald die Partien in der Posteingang liegen, whlen Sie im Men
<menu>Posteingang bearbeiten</menu> und Scid arbeitet sich durch die
Posteingang, wobei es die neuen Zge automatisch an bereits bestehende
Partien in Ihrer Datenbank anhngt. Neue Partien, die noch nicht in
der Datenbank erfasst sind, werden automatisch der Datenbank
hinzugefgt.
</p>

<p><a CCeMailChess>Fernschach per Email</a> beschreibt detailliert
Fernschach via Email, whrend in <a CCXfcc>Fernschach via Schachserver
</a> Fernschach ber entsprechende Fernschach-Server beschrieben wird.
</p>

<h3>Partien durchgehen</h3>
<p>
Nach dem Abholen werden Partien in Scids "clipboard" Datenbank geladen
und neue Partien und Zge werden der zuvor geffneten
Fernschachdatenbank hinzu gefgt. Im Unterschied zur Funktion aus dem
<menu>Partie</menu> Men blttern Sie mit diesen Knpfen nicht durch
die gesamte Datenbank, sondern nur durch die Partien aus Scids Posteingang,
also nur durch die gerade von ihnen gespielten Partien. Die Datenbank
kann ja sehr viele Partien mehr enthalten, und Sie werden
wahrscheinlich nicht erst durch alle diese Partien blttern, nur um
irgendwann die Partie mit dem tatschlich neuen Zug zu finden.
</p>
<p>
Beachten Sie bitte, dass hierbei Daten aus den Kopfzeilen ausgewertet
werden, die nicht von Scid indiziert wurden. Bei einer extrem groen
Fernschachdatenbank wrden die Suchzeiten empfindlich ansteigen.
Sollten Sie sehr viel Fernschach spielen und Ihre Datenbank dadurch
sehr gro werden, so empfiehlt es sich, bereits beendete Partien in
einer Archivdatenbank zu speichern, um so den Suchzugriff auf die
aktuellen Partien zu beschleunigen.  Alternativ knnen Sie auch
einfach eine neue Datenbank erstellen, da Scid neue Partien dieser ja
dann automatisch hinzufgt. ffnen Sie einfach diese neue und leere
Datenbank (Typ "Correspondence Chess" nicht vergessen) und whlen Sie
im Men <menu>Posteingang bearbeiten</menu>, und schon werden alle noch
laufenden Partien importiert.
</p>
<p>
Vergleichbar mit den genannten Knpfen sind die Menpunkte
<menu>Vorherige Partie</menu> und <menu>Nchste Partie<menu> aus dem
<menu>Fernschach</menue> Men.
</p>
<p>
Ein alternativer Weg um eine bestimmte Partie anzuwhlen ist ein
Doppelklick auf diese in der Partienliste des Fernschachfensters.
</p>
<p>
Beachten Sie, dass bei korrekt eingegebenen Namen (unter <menu>Meine
Spielernamen</menu>) Scid das Schachbrett immer so drehen wird, dass
Sie "richtig herum", also von unten nach oben, spielen. Sie knnen
verschiedene Spielernamen verwenden. Einzelheiten finden Sie unter <a
Options MyPlayerNames>Meine Spielernamen</a>.
</p>

<h3>Analyse und Ziehen</h3>
<p>
Fr das Fernschach knnen alle Analysefunktionen verwendet werden.
Varianten, Kommentare etc. knnen wie gewohnt hinzu gefgt werden.
Scid wird aber immer den letzten Halbzug nehmen und ihn wie den zu
sendenden Zug behandeln. Es wird nicht geprft, ob nur ein Halbzug
oder auf welcher Seite dieser Zug hinzu gefgt wurde! Wenn Sie ber
einen Fernschachserver spielen, bertrgt Scid auch den letzten
Kommentar, damit Sie auf diese Weise ihrem Gegner etwas mitteilen
knnen. Wenn Sie via Email spielen, knnen Sie ja Kommentare oder
Gre einfach in die Emailnachricht schreiben. Daher werden bei dieser
Variante alle Kommentare entfernt.
</p>
<p>
Nach dem Drcken des Verschicken-Knopfes <button tb_CC_Send> wird Scid
zunchst bestimmen, welche Art von Fernschachpartie vorliegt (Email
oder Fernschachserver) und entweder Ihr Email-Programm aufrufen oder
Ihren Zug ber ein externes Tool an den Fernschachserver bertragen.
Der Menpunkt <menu>Zug versenden</menu> erfllt den gleichen Zweck.
Alternativ knnen Sie die aktuelle Partie auch ber den Menpunkt
<menu>per Email versenden</menu> per Email versenden. Wie beschrieben
erfllt <menu>Zug versenden</menu> den gleichen Zweck. Auch bei
Vorliegen eines Serverspiels kann so eine Email erzeugt werden. Diese
wird aber wohl keinen Adressaten enthalten, da Fernschachserver diese
Information gewhnlich nicht bertragen.
</p>

<p><footer>(Updated: Scid 3.6.25, August 2008)</footer></p>
}

set helpTitle(D,CCIcons) "Fernschach: Icons und Statusindikatoren"
set helpText(D,CCIcons) {
<h1>Icons und Statusindikatoren</h1>
<p>
Um die Anzeige in der Partienliste abzukrzen werden einige Symbole
verwendet. Manche von ihnen sind nur unter bestimmten Umstnden
sichtbar, andere nur fr Xfcc- bzw. eMail-basierte Partien. Diese
Indikatoren werden intern gespeichert und knnen so auch ohne
Internetverbindung mit dem Status der letzten Aktualisierung angezeigt
werden.
</p>
<ul>
   <li><button tb_CC_online> zeigt an, dass die Partienliste in der
   aktuellen Scid-Sitzung online aktualisiert wurde. Der zugehrige
   Infotip zeit das Datum und die Uhrzeit der letzten Aktualisierung.
   </li>
   <li><button tb_CC_offline> zeigt an, dass der Xfcc-Status ohne
   Aktualisierung aus den gespeicherten Werten hergestellt wurde und
   somit nicht aktuell sein mu. Der zugehrige Infotip zeit das Datum
   und die Uhrzeit der letzten Aktualisierung.
   </li>
   <li><button tb_CC_envelope> zeigt eine eMail-basierte Partie an.
   Durch die Limitationen dieses Mediums sind kaum zustzliche
   Statusangaben verfgbar.
   </li>
   <li><button tb_CC_yourmove>
   Sie sind am Zug!
   <br>
   <b>Hinweis 1:</b> Dieser Status wird nur aktualisiert, wenn
   mit dem Fernschachserver synchronisiert wird, d. h. er gibt immer
   den Zustand des Servers bei der letzten Synchronisation wieder.
   <br>
   <b>Hinweis 2:</b> Fhrt man mit der Maus ber dieses Symbol wird
   der letzte Zug des Gegners angezeigt.
   </li>
   <li><button tb_CC_oppmove>
   Der Gegner ist am Zug. Hinweis: Dieser Status wird nur aktualisiert, wenn
   mit dem Fernschachserver synchronisiert wird, d. h. er gibt immer
   den Zustand des Servers bei der letzten Synchronisation wieder.
   </li>
   <li><button tb_CC_draw>
   Es wurde ein Remis vereinbart.
   </li>
   <li><button tb_CC_book>
   Erffnungsbcher sind fr diese Partie erlaubt.
   </li>
   <li><button tb_CC_database>
   Datenbanken sind fr diese Partie erlaubt.
   </li>
   <li><button tb_CC_tablebase>
   Endspieltabellen (z. B. Nalimov-Tabellen) sind fr diese Partie
   erlaubt.
   </li>
   <li><button tb_CC_engine>
   Schachengines sind fr diese Partie erlaubt. Solche Partien werden
   bisweilen als "Advanced Chess" bezeichnet.
   </li>
   <li><button tb_CC_outoftime>
   Der Gegner hat seine Bedenkzeit berschritten. Es kann ein Gewinn
   wegen Zeitberschreitung beantragt werden.
   </li>
   <li><button tb_CC_message>
   Der Gegner bermittelte mit dem Letzten Zug enie Nachricht. Diese
   wurde zur Partienotation als Kommentar hinzugefgt.
   </li>
</ul>
<b>Hinweis 1:</b> Wenn ein Tournier noch nicht offiziell begonnen hat,
aber die Aufstellung bereits bekannt gegeben wurde werden die Texte in
den Spalten id, Event und Site in <gray><b>grau</b></gray>
dargestellt.
<br>
<b>Hinweis 2:</b> Fhrt man mit der Maus ber die Site-Spalte, wird
der komplette Sitetag angezeigt. Fhrt man ber die Event-Spalte wird
ebenfalls der komplette Event-Tag angezeigt, sowie die Zeitkontrollen
der jeweiligen Partie, sofern diese vom Server bermittelt wurden.
Wurden keine Zeitkontrollen bermittelt zeigt Scid <i>10 / 50d (?)</i>
an, d. h. vermutet die offiziellen ICCF-Zeitkontrollen. (Der
ICCF-Server selbst sendet niemals die Zeitvorgaben.)
</p>

<p>
Fr Xfcc-basierte Partien wird fr jeden Gegner die jeweilige
Landesflagge angezeigt, wenn der Server die ntigen
Lnderinformationen bermittelt. Fr eMail basierte Partien kann dies
erreicht werden, wenn im PGN-Kopf zwei zusttzliche Zeilen
<i>whiteCountry</i> bzw. <i>blackCountry</i> eingefgt werden, die den
internationalen, dreistelligen Lndercode nach ISO 3166-1 enthalten
(z. B. "EUR" <button flag_eur>, "USA" <button flag_usa>, "GBR" <button
flag_gbr>, "FRA" <button flag_fra>, "RUS" <button flag_rus>, "CHN"
<button flag_chn>...).
</p>

<p>
Beachten Sie auch das Kapitel <a Correspondence>Fernschach</a> fr
allgemeine Informationen.
</p>


<p><footer>(Updated: Scid 3.7b4, February 2009)</footer></p>
}

set helpTitle(D,CCXfcc) "Fernschach-Server"
set helpText(D,CCXfcc) {<h1>Fernschach-Server</h1>

<p>
Es gibt diverse Fernschachserver im Internet. blicherweise spielt
man auf ihnen ganz einfach mit einem Webbrowser, also ohne
irgendwelche spezielle Software. Dennoch bieten viele dieser Server
die Mglichkeit, ein externes (Schach-) Programm zu benutzen. Dies
geschieht durch die Verwendung des Xfcc-Protokolls.  Dieses
Xfcc-Protokoll wird bei Scid durch externe Tools untersttzt, die man
im <a CCSetupDialog>Einstellungen</a> Dialog konfiguriert.
</p>

<h3>Eine neue Partie beginnen</h3>
<p>
Xfcc selbst erlaubt es nicht, wie bei Email eine neue Partie zu
beginnen, in dem man einfach den ersten Zug an einen Gegner sendet.
Die Suche nach einem Gegner sowie das Beginnen von Partien geschieht
grundstzlich auf der Webseite der Fernschachserver. Hat man denn dort
eine Partie einmal begonnen, kann man Scid dann im Weiteren benutzen,
um die neuen Zge der Gegner ab zu holen, sie zur eigenen Datenbank
hinzu zu fgen, sie zu analysieren, zu beantworten, usw.. Alle
Funktionen von Scid stehen dem Benutzer zur geneigten Verwendung zur
Verfgung. Klren Sie ggf. vorher im Rahmen der sportlichen Fairness
ab, ob und welche der zahlreichen Hilfsmittel Sie berhaupt verwenden
drfen.
</p>

<h3>Partien abholen</h3>
<p>
ffnen Sie die Datenbank, die ihre Fernschachpartien enthlt oder
erstellen sie diesselbe neu. Diese Datenbank muss zwingend vom Typ
"Correspondence chess" sein. 
</p>

Anmerkungen: 
<ul>
   <li>Findet Scid keine geffnete passende Datenbank, so fordert es
   Sie auf, eine solche zu ffnen.
   </li>
   <li>Enthlt die Datenbank keine der Partien aus der Posteingang, so
   werden diese automatisch der Datenbank als neue Partien
   hinzugefgt.
   </li>
   <li>Scid wird die erste geffnete Datenbank vom Typ "Correspondence
   Chess" benutzen. Es wird empfohlen, nur eine Datenbank dieses Typs
   geffnet zu halten.
   </li>
</ul>
<p>
Xfcc holt immer alle laufenden Partien vom Server, die dort unter
Ihrer Benutzer-ID registriert sind. Zum Abholen drcken Sie einfach
auf das <button tb_CC_Retrieve> Symbol oder whlen <menu>Partien
abholen </menu> aus dem <menu>Fernschach</menu> Men. Stellen Sie
sicher, dass Ihr System eine funktionierende Netzwerkverbindung hat,
da Scid selbst keine Verbindung herstellt sondern lediglich eine
bestehende nutzt, um sich mit dem Server zu verbinden. Scid holt die
Partien gem Ihren Einstellung aus dem <a
CCSetupDialog>Einstellungen</a> Dialog ab und legt die Partien im
PGN-Format in der Scid-Posteingang ab. Dies kann etwas dauern.  Nach
dem Abholen der Partien wird ihre zuvor geffnete Fernschachdatenbank
entsprechend mit diesen Partien automatisch aktualisiert.
</p>
<p>
<b>Hinweis</b> Mit <button tb_CC_delete> kann das Posteingangs- und
Postausgangsverzeichnis geleert werden.
</p>
<p>
Sobald Ihre Partien abgeholt wurden, sucht Scid in Ihrer geffneten
Fernschachdatendank nach den entsprechenden Gegenstcken und fgt die
neuen Zge dort automatisch diesen Partien hinzu. Whrend bei einer
Email-Partie gewhnlich Halbzug fr Halbzug via Email und somit
vermutlich auch via Scid bermittelt wird, kann man Xfcc-Server auf
verschiedene Art erreichen (Web, Mobiltelefon, usw.). Es ist also
denkbar, dass Sie und Ihr Gegner vielleicht einige Zge von
Unterwegs aus ausgefhrt haben: Via Mobiltelefon aus der U-Bahn etwa,
und spter via Web vom Brorechner aus, und in der Mittagspause gab es
einen Zug vom PDA aus. Wenn Sie jetzt am Abend diese Partie mit Scid
abholen, hat Scid diese Zge ja alle bis jetzt noch nicht gesehen. Es
wird also alle notwendigen Zge bis zum aktuellen an diese Partie in
Ihrer Datenbank anfgen. Wie gesehen, kann dies eine ganze Anzahl von
Zgen sein. Aus diesem Grunde sollten Sie Anmerkungen und Kommentare
nie in die Hauptpartie schreiben, sondern stets Varianten dafr
verwenden, da es ja wie gesehen sein kann, dass Scid etliche Zge in
Ihrer Datenbank ergnzen muss. Scid wird hierbei immer nur am Ende der
Partie in ihrer Datenbank ergnzen, so dass nderungen in der
Hauptvariante sehr wahrscheinlich dazu fhren, dass eine
Synchronisation unmglich wird.
</p>
Fr Xfcc-basierte Partien kann Scid den status dieser sehr genau
angeben. Diese Informationen stehen aber nur zur Verfgung wenn die
interne Xfcc-Untersttzung verwendet wird.  Folgende Symbole werden
hierzu benutzt:
<ul>
   <li><button tb_CC_draw> Im letzten Zug wurde ein Remis verinbart.
   </li>
   <li><button tb_CC_yourmove> Sie sind am Zug.
   </li>
   <li><button tb_CC_oppmove> Ihr Gegner ist am Zug.
   </li>
   <li><button tb_CC_book> In dieser Partie sind Erffnungsbcher erlaubt.
   </li>
   <li><button tb_CC_database> In dieser Partie ist die Nutzung von Datenbanken erlaubt.
   </li>
   <li><button tb_CC_tablebase> In dieser Partie ist die Nutzung von Endspieltabellen erlaubt.
   </li>
   <li><button tb_CC_engine> In dieser Partie ist die Nutzung von Schachprogrammen zur Analyse erlaubt.
   </li>
</ul>
<p>
Auerdem zeigt Scid den Stand der Uhren beider Parteien <p>zum
Zeitpunkt der Synchronisation</b> an sowie die Schachvariante.
Allerdings erlaubt Scid derzeit nur Standard Schach.
</p>
<p>
Hinweis: Nur wenn die entsprechenden Symbole (Buch, Datenbank,
Tabelle, Schachprogramm) angezeigt werden drfen diese Hilfsmittel
verwendet werden. Andernfalls sind sie verboten! Bitte beachten Sie
diese Regeln!
</p>

<p>
<b>NOTABENE:</b> Wenn Sie Zge anders als mit Scid hinzu fgen, etwa
mit einem Texteditor oder einem Emailprogramm, dann achten Sie aus den
genannten Grnden genauestens darauf, nur den einen, von Ihnen
beabsichtigten Zug in die Hauptpartie zu schreiben! Scid wei zu
keinem Zeitpunkt, an welcher Stelle der Partie sie "eigentlich" dran
waren! Fr Scid ist dies <b>immer</b> der letzte Zug in der
"Hauptlinie" der Partie! Wenn Sie also eine mutmaliche Fortfhrung
der Partie notieren wollen (was ja an sich als Gedchtnissttze sehr
sinnvoll ist), so tun Sie dies <b>immer</b> in einer Variante, und
<b>nie</b> in der Hauptpartie! Ihr Gegner wrde diese von Ihnen als
Gedchtnissttze fr Ihren Plan notierten Zge sonst bermittelt
bekommen - und Sie wollten sicher nicht Ihren Plne an Ihren Gegner
senden!
</p>
<p>
<b>Beispiel:</b> Sie spielen ohne Scid, und schreiben die Antwortzge
im Bro einfach von Hand mit dem Texteditor des Brorechners hinter
die von Ihrem Gegner geschickten Zge, und wollen diese (wenn der Chef
weg ist) dann spter mit Scid versenden. Ihr Gegner schickt Ihnen zum
Auftakt ein 1.e4 * zu. Sie berlegen sich, mit 1...e6 die Partie zu
antworten, und ferner, die Partie wie folgt fort zu setzen: 2. d4 d5
3. Nf3 Nf6 4. Nc3 * . Diese Fortsetzung wollen Sie sich als
Gedchtnissttze notieren.  Schreiben Sie nun auf keinen Fall "1...e6
2. d4 d5 3. Nf3 Nf6 4. Nc3"!  Scid bertrgt 4.Nc3 an den
Schachserver. Dieser Zug ist beim Derzeitigen Stand der Partie
ungltig und wird abgelehnt werden. Der Zug ist hierbei aus mehreren
Grnden Ungltig. Zunchst erwartet der Schachserver den 2. Halbzug
von Schwarz im ersten Zug. Statt dessen wird aber der 1. Halbzug von
Wei aus dem 4. Zug gesendet.
</p>
<p>
Notieren Sie stattdessen Ihren Plan als Variante: 
1.e4 e6 (1...e6 2. d4 d5 3. Nf3 Nf6 4. Nc3 )
So wird nur das 1....e6 an Ihren Gegner bermittelt, da dies der
letzte Zug der Hauptvariante ist. Dieser ist gltig und wird
akzeptiert werden.
</p>
<p>
Beachten Sie, dass smtliche Partien in Scids Posteingang, ganz
gleich, wo diese herstammen, whrend des Abholprozesses von Scid
verarbeitet werden!  Auf diese Weise knnen Sie auch Partien, die Sie
auf anderem Weg erhalten haben, auf einfachste Art bearbeiten: Einfach
die Partie (im PGN-Format!) in die Posteingang legen, und wenn Sie in
Scid dann den Knopf <button tb_CC_Retrieve> drcken, wird die Partie
mit bearbeitet.  Scid arbeitet einfach alles ab, was sich in seinem
Posteingang befindet. Wie gewohnt: Bei Partien, die sich schon in
Ihrer geffneten Fernschachdatenbank befinden, werden die neuen Zge
hinzu gefgt, whrend unbekannte Partien ganz einfach als neue Partien
an Ihre Datenbank angehangen werden.
</p>
<p>
<b>Hinweis</b> Mit <button tb_CC_delete> kann das Posteingangs- und
Postausgangsverzeichnis geleert werden.
</p>
<p>
<b>Hinweis fr Programmierer</b>: Dem Fetch-Tool wird beim Aufruf der
Pfad zur Posteingang als Parameter mit gegeben. Es sollte dann alle
Server-Accounts durchgehen und ordentlich formatierte PGN-Files in den
bergebenen Pfad ablegen. Diese Dateien sollten zustzliche Felder im
Header enthalten, wie sie von cmail her bekannt sind. (Siehe <a
CCeMailChess>Correspondence Chess via eMail</a> fr weitere
Informationen ber die bentigten Felder.) </p>

<p><footer>(Updated: Scid 3.6.23, February 2008)</footer></p>
}

#############
# eMail Chess:
set helpTitle(D,CCeMailChess) "Fernschach via Email"
set helpText(D,CCeMailChess) {<h1>Fernschach via Email</h1>

<p>
Das Medium Email bietet eine einfache und bequeme Mglichkeit zum
Fernschach-Spielen.  Die Standard-Anwendung fr Un*x-aritge
Betriebssysteme ist bis heute die Kombination xboard/cmail. Man kann
damit recht bequem seine Fernschachpartien abwickeln. Da cmail dabei
nichts anderes produziert als sauberes PGN, ist es das Vorbild fr
Scids Email-Funktion. Sofern man die vollstndigen PGN-Kopfdaten
erhlt, kann man damit mit jedem beliebigen Gegner spielen, der in der
Lage ist, irgendwie PGN-Dateien zu bearbeiten. Es ist also nicht
notwendig, dass beide Spieler einer Partie die gleiche Software
benutzen.
</p>

<h3>Email-Schach</h3>
<p>
Scid kann Ihre Fernschachpartien via Email fast vollautomatisch
verarbeiten.  Dabei bleibt die Kompatibilitt mit cmail/xboard aus der
Un*x Welt gewahrt (Sie knnen also auch gegen Benutzer dieser
Programme spielen). Das Ganze funktioniert ber das Versenden von
vollstndigen PGN-Dateien als Email-Anhang, wobei die PGN-Kopfdaten
bestimmte wichtige Daten enthalten, die fr das Verwalten der Daten
unabdingbar sind. Aus diesem Grunde sollten Sie Kopfdaten nur ndern,
wenn Sie wirklich wissen, was Sie tun. Im Zweifel lassen Sie es
besser, denn einige Felder mssen bestimmte Werte in ganz exakter Form
enthalten. Diese Felder werden von Scid automatisch und korrekt
ausgefllt, wenn Sie eine Partie mit Scid beginnen. Obacht: Sie drfen
diese Felder <b>auf keinen Fall</b> lschen, ndern oder
berschreiben!
</p>
<p>
Dies sind unabdingbare Kopfzeilen-Felder:
</p>
<ul>
   <li><term>Event</term>: Standardmig "Email correspondence game"
   </li>
   <li><term>Site</term>: muss auf "NET" lauten
   </li>
   <li><term>Mode</term>: muss auf "EM" lauten
   </li>
   <li><term>WhiteNA</term>: enthlt die Email-Addresse des weien
   Spielers. Beachten Sie bitte, dass hier nur die "reine" Adresse
   stehen darf in der Form <term>user@host.org</term>.
   </li>
   <li><term>BlackNA</term>: enthlt die Email-Address des schwarzen
   Spielers analog zu WhiteNA.
   </li>
   <li><term>CmailGameName</term>: Enthlt eine <b>eindeutige</b>
   Bezeichnung (ID) fr die Partie. Diese Bezeichnung muss nicht nur
   eindeutig, sondern auch ein Unikat sein, denn ber diese ID werden
   die Partien einander zugeordnet.
   <p>
   Scid knnte bei Datenbank auf Indices zurckgreifen. Das geht aber
   nicht bei "nicht-Datenbank-Daten" wie den cmail-Daten. Dewegen wird
   auf den <term>CmailGameName</term>-Parameter zurck gegriffen, den
   der Anwender vergeben muss.  Dieser Parameter muss <b>eindeutig</>
   sein! Eine einfache und praktible Art ist bspw.
   <term>aa-bb-yyyymmdd</term>, mit aa als Abkrzung des Namens des
   weien Spielers und bb analog fr Schwarz, sowie yyyymmdd fr das
   aktuelle Datum.
   </p>
   <p>Bei Xfcc-basierten Partien muss dieses Feld ebnfalls eine
   eindeutige ID enthalten, aber in diesem Fall nimmt man den
   Servernamem und die eindeutige Partienummer auf diesen Server als
   ID, also in der Form <term>MeinXfccServer-12345</term>.
   </p>
   </li>
</ul>
<p>
eMail basierte Partien enthalten nicht so ausfhrliche
Statusinformationen wie Xfcc-basierte Partien. Allerdings werden diese
Partien mit dem <button tb_CC_envelope> Symbol gekennzeichnet um sie
leicht von anderen unterscheiden zu knnen.
</p>

<h3>Eine neue Partie beginnen</h3>
<p>
Hier ffnet sich ein Dialog, in welchem man den eigenen und den Namen
des Gegners so eingibt, wie er spter in den Kopfzeilen erscheinen
soll sowie in den Emailaddressen beider Parteien. Zustzlich muss eine
<b>eindeutige</b> Partie-ID vergeben werden.  Eine bewhrte Lsung fr
ist eine ID in der Form <term>aa-bb-yyyymmdd</term>, mit aa als
Abkrzung des Namens des weien Spielers und bb analog fr Schwarz,
sowie yyyymmdd fr das aktuelle Datum.  Diese ID im Text-Format ist
unabdingbar fr das Zuordnen der Partien.  Die Nutzer von cmail kennen
diese ID als <i>game name</i>. Sie darf nur Buchstaben, Zahlen, das
Minus-Zeichen und Unterstrichen enthalten.  Vermeiden Sie also alle
anderen (Sonder-) Zeichen.
</p>
<p>
Nachdem Sie durch Drcken des <b>[Ok]</b> Knopfes diesen Dialog
verlassen haben, wird eine neue Partie an die geffnete
Fernschachdatenbank angehangen, und die PGN-Kopfzeilen sind ordentlich
ausgefllt. Machen Sie also einfach Ihren Zug und senden sie ihn ab.
</p>

<h3>Partien empfangen</h3>

<p>
Scid bearbeitet nicht Ihr Email-Postfach. Der Programmieraufwand hierfr
wre angedenk der unzhligen Mglichkeiten von Email-Zugngen viel zu
gro. Auerdem muss man das Rad ja nicht neu erfinden: Ihr gewohntes
Email-Programm kann ja genau das, und deswegen verwendet Scid auch
einfach Ihr gewohntes Email-Programm. Um nun eine so empfangene Partie
in Scid hinein zu bekommen, speichern Sie einfach das an der Email
angehangene PGN-File in Scids Posteingang ab (viele Emailprogramme
erlauben es auch, dies automatisch erledigen zu lassen. Lesen Sie dazu
das Handbuch Ihres Emailprogrammes). Whlen Sie dann einfach
<menu>Partien synchronisieren</menu> (bzw. drcken den <button tb_CC_Retrieve>
Knopf) oder whlen Sie <menu>Posteingang synchronisieren</menu>. Der
Unterschied zwischen beiden Mglichkeiten ist der, dass
<menu>Posteingang synchronisieren</menu> nur die Dateien verarbeitet,
die zu diesem Zeitpunkt im Posteingang liegen, whrend der erstere
Weg zustzlich ber in externes Programm zunchst weitere Partien (z.B.
via Xfcc) abholt, diese in der Posteingang speichert und dann
smtliche Dateien, die sich dann in der Posteingang befinden,
bearbeitet.  Wenn Sie also sowohl per Email wie auch ber Xfcc-Server
spielen, drfte der bequemste Weg der sein,  zunchst die per Email
empfangenen Partien in der Posteingang zu speichern und dann <button
tb_CC_Retrieve> zu bettigen.
</p>
<p>
<b>Hinweis</b> Mit <button tb_CC_delete> kann das Posteingangs- und
Postausgangsverzeichnis geleert werden.
</p>
<p>
<b>Notabene:</b> <menu>Partien synchronisieren</menu> bzw. der <button
tb_CC_Retrieve> Knopf haben keine Funktion zum <b>Abholen</b> von
Emails! Sie mssen die Email mit Ihrem Emailprogramm abholen und "von
Hand" in Scids Posteingang speichern. Viele Emailprogramm ermglichen
das Automatisieren dieses Arbeitsschrittes (auf Un*x-artigen Systemen
knnten Sie leicht die ntigen "mime handler" in Ihrer
<term>.mailcap</term> anpassen, oder Mailfilter fr die automatische
Verarbeitung einsetzen.).
</p>

<h3>Antwortzge verschicken</h3>

<p>
Wenn Sie Ihren Zug gemacht haben, knnen Sie ihn entweder ber den
Menpunkt <menu>Zug per eMail senden</menu> und <menu>Zug
senden</menu> oder <button tb_CC_Send>. Letzteres whlt die Art des
Versandes in Abhngigkeit der vorliegenden Partie, also wahlweise per
Email oder das Xfcc-Protokoll, whrend ersteres <b>immer</b> eine
Email mit angehangenem PGN erzeugt.
</p>
<p>
Selbstverstndlich versendet Scid nur die reinen Zge. Smtliche Arten
von Kommentaren und Varianten werden vorher entfernt, da Sie Ihre
Analysen und Plne ganz sicher nicht Ihrem Gegner bermitteln wollen.
</p>
<p>
Sofern Sie eins der blichen grafischen Email-Programme benutzen (wie
Thunderbird, Evolution, usw.), dann ffnet sich dort das Fenster zum
Verfassen einer Email. Die Adresse Ihres Gegners ist bereits
ausgefllt, ebenso wie die Betreffzeile, in der die ID der Partie
eingetragen ist, damit Sie ggf. die Spiele nach Betreff filtern oder
sortieren knnen. Falls Sie unter <a CCSetupDialog>Einstellungen</a>
eine Adresse fr eine Blindkopie angegeben haben, ist auch das
bcc-Feld der Email ausgefllt (etwa, wenn bei Fernschachturnieren
jeder Zug in Kopie an einen Spielleiter geht). Der eigentlich
Email-Text enthlt die aktuelle Stellung als FEN sowie eine Liste der
bis dahin gemachten Zge. Das ermglich Ihrem Gegner einen "schnellen
Blick" auf die Partie, ohne dass er besondere Fernschachprogramme
einsetzen muss. Und schlielich ist bereits die bis dahin gespielte
Partie vollstndig als PGN-Datei an die Email angehangen.
</p>
<p>
Falls Sie ein mailx-kompatibles Programm verwenden, so sehen Sie
nichts vom Sendevorgang, alles luft im Hintergrund ab. In diesem Fall
wird die PGN-Datei im Textkrper der Nachricht wiederholt.
</p>
<p>
Beachten Sie, dass Sie bei Email-Partien auf keinen Fall mehr als nur
einen Halbzug vor dem Versenden anhngen drfen! Scid berprft nicht,
ob und wie viele Zge angehangen wurden. Aus diesem Grund sollten Sie
Analysen und Kommentare <b>nie</b> in die Hauptzeile der Partei
schreiben, sondern immer nur als Variante. Letztere werden automatisch
entfernt, so dass Sie bei so nie Gefahr laufen, Ihrem Gegner Ihre
Plne zu bermitteln.
</p>
<p><footer>(Updated: Scid 3.6.23, February 2008)</footer></p>
}

#############
# Correspondence Chess setup dialog help:
set helpTitle(D,CCSetupDialog) "Fernschach Setup"
set helpText(D,CCSetupDialog) {<h1>Fernschach Setup</h1>

<p>
Im Einstellungsdialog sind bei bereits einige Standardwerte
eingetragen, die aber nicht notwendigerweise den Begebenheiten auf
Ihren System entsprechen. Sie mssen also einige Anpassungen
vornehmen. Alle getroffenen Einstellungen werden automatisch in der
Konfigurationsdatei gespeichert, sobald Sie den Dialog mit dem
<b>[Ok]</b> Button verlassen. Die Einstellung sind sofort gltig.
</p>

<p><b>Hinweis</b> Scid wird seine Standardeinstellungen so lange
verwenden bis der Einstellungsdialog mit <term>OK</term> besttigt
wurde. Bis dies geschehen ist verwendet Scid die internen Standards
und wird diese nicht abspeichern. Standardmig wird Scid auerdem
versuchen alle Einstellungen automatisch vorzunehmen und die ntigen
Daten im <term>data</term>-Unterverzeichnis seiner Einstellungen zu
speichern. Hier wird auch eine gltige Datenbank fr Fernschach
angelegt sowie die Posteingangs- und Postausgangsverzeichnisse
angelegt.
</p>

<p>
<b>Standarddatenbank</b>:
Hier stellen Sie die Datenbank ein, die Sie als Standard fr Ihr
Fernschach verwenden wollen, leicht erreichbar ber <menu>Datenbank
ffnen</menu> im <menu>Fernschach</menu> Men.  (Sie knnen diese
Datei aber auch auf jede andere Art ffnen, die Scid bietet.) Der
Vorteil bei dieser Vorgehensweise ist, dass diese Datenbank nicht in
der Liste krzlich geffneten Datenbanken erscheint. Sie knnen also
eine Datei nur fr das Fernschach verwenden.  Diese Datenbank <b>muss
zwingend</b> von Typ "Correspondence chess" sein!
</p>

<p>
<b>Posteingang (Pfad)</b>:
In diesem Verzeichnis schaut Scid nach Partien im PGN-Format. Diese
Partien werden mit Ihrer geffneten Fernschachdatenbank
synchronisiert. Dabei ist es fr Scid vllig egal, wie diese Partien
dorthon gekommen sind. Es arbeitet sich einfach durch alle Dateien
durch, die es dort vorfindet. So knnen Sie (oder andere Entwickler)
beliebige andere Werkzeuge und Programme verwenden, um Partien abzuholen
und dort zu platzieren. Beispielsweise knnen Sie aus einem beliebigen
Emailprogramm heraus die empfangene PGN-Datei einfach dort
abspeichern, und Scid wird sie verarbeiten.
</p>
<p>
Scid wird keine Email-Postfcher kontaktieren, sondern einfach alle
PGN-Dateien verarbeiten, die es im Posteingang-Verzeichnis vorfindet.
Beachten Sie, dass dabei dann alle gefundenen Partie mit der zu diesem
Zeitpunkt geffneten (Fernschach-) Datenbank abgeglichen werden.
Sofern eine Partie aus diesem Verzeichnis nicht in der Datenbank
enthalten sein sollte, wird sie dort automatisch als neue Partie
angehangen.
</p>
<p>
Damit der Abgleich der Partien aus der Posteingang mit der Datenbank
funktioniert, mssen die PGN-Dateien eine Kopfzeilen enthalten, die
peinlich genau dem PGN-Standard entsprechen mssen! Werfen Sie einen
Blick in das Kapitel <a CCeMailChess>Fernschach via
eMail</a> falls Sie diese mit einem eigenen Tool erstellen wollen oder
Sie von einem anderen System migrieren.
</p>

<p>
<b>Postausgang (Pfad)</b>:
Das Gegenstck zur <i>Posteingang</i>. Scid speichert hier die
PGN-Dateien der ausgehenden Dateien. Das ist beim Email-Schach
wichtig, weil dabei diese Dateien an die Emails angehangen werden.
Bei Xfcc, wo nur der aktuelle Zug versendet wird, ist dies zwar
eigentlich nicht ntig, aber die Outbox ist sehr praktisch, falls Sie
bspw. einen PDA mit allen aktuell gespielten Partien abgleichen
wollen.
</p>

<p>
<b>Interne Xfcc-Untersttzung verwenden</b>:
Wenn angewhlt werden nicht die beiden exterenn Hilfsprogramme
verwendet um Partien via Xfcc abzuholen oder Zge zu verschicken
sondern statt dessen Scids interne Untersttzung fr dieses Protokoll.
Dies ist der einfachste Weg und sollte blicherweise gewhlt werden.
</p>
<p>
Hinweis: Diese Option kann nur gewhlt werden wenn die beiden Module
http und tDOM fr TCL installiert sind. Diese befinden sich
normalerweise im Lieferumfang der TCL-Installation, mssen aber bei
einigen Systemen explizit installiert werden. Wird eines dieser Pakete
nicht gefunden wird diese Funktion ausgeschaltet
</p>
<p>
<b>Xfcc Einstellungen</b>:
Hier wird der Pfad und Dateiname der Xfcc-Konfigurationsdatei
angegeben. Dieser Parameter wird ggf. auch an die externen
Hilfsprogramme weitergegeben, sollten diese benutzt werden.
</p>

<p>
<b>Hilfsprogramm zum Abholen</b>:
Dieses Hilfsprogramm holt Ihre Partien von einem Fernschachserver ab,
und erzeugt aus den empfangenen Daten ein ordentliches PGN-File mit
korrektem Header. Zur Kommunikation mit Xfcc-Servern sind externe
Werkzeuge die erste Wahl. Sollten sich das Protokoll einmal ndern,
kann man diese nderungen so einfacher umsetzen. Auch knnen so
weitere Programme auf dieses Hilfsprogramm zugreifen, wodurch dem
Benutzer beliebig viele Mglichkeiten (z.B. zur Automatisierung)
offenstehen.
</p>
<p>
Beachten Sie: Dieses Hilfsprogramm dient <b>nicht</b> dem Empfang von
Email-Partien!
</p>

<p>
<b>Hilfsprogramm zum Senden</b>: 
Das Gegenstck zum Empfangsprogramms, ebenfalls im Wesentlichen fr
das Xfcc-Protokoll gedacht. Dieses Hilfsprogramm wird von Scid mit
folgenden Parametern aufgerufen:
<term>
SendTool Outbox Name GameID MoveCount Move "Comment" resign claimDraw offerDraw acceptDraw
</term>
</p>

<p>
Das verbirgt sich hinter diesen Parametern:
   <ul>
      <li><term>Outbox</term>: Hier wird der Outbox-Pfad gesetzt, wo
      das Versandprogramm ein PGN-File erzeugen soll.
      </li>
      <li><term>Name</term>: Der Spielername und gleichzeitig das
      Xfcc-Login, der identisch ist mit dem Spielernamen im
      PGN-Header.
      </li>
      <li><term>MoveCount</term>: Die Nummer des zu versendenden
      Zuges.
      </li>
      <li><term>Move</term>: Der aktuelle Zug in vereinfachter
      algebraischer Notation (SAN).
      </li>
      <li><term>"Comment"</term>: Ein kommentar, der an den Gegner
      gesendet wird. Scid verwendet hierzu den letzten Kommentar, der
      in der aktuellen Partie enthalten ist, d. h. der letzte
      Kommentar der Partie wird als "fr den Gegner bestimmt"
      behandelt. Dieser Kommentar wird in Anfhrungszeichen bergeben,
      so dass mehrzeilige Kommentare mglich sein sollten.
      </li>
      <li><term>resign</term>: 0 oder 1, gibt an, ob Sie aufgeben. 1
      bedeutet Aufgabe und wird in <menu>Aufgeben</menu> aus dem
      <menu>Fernschach</menu> Men gesetzt.
      </li>
      <li><term>claimDraw</term>: 0 oder 1, zeigt an, dass Sie Remis
      fordern. Wird 1, falls Sie <menu>Remis erklren</menu> aus dem
      Men <menu>Fernschach</menu> whlen.
      </li>
      <li><term>offerDraw</term>: 0 oder 1, entspricht Ihrem Wunsch
      nach Remis.  Wird 1, wenn Sie <menu>Remis anbieten</menu> aus
      dem Men <menu>Fernschach</menu> whlen.
      </li>
      <li><term>acceptDraw</term>: 0 oder 1, wenn Sie Remis annehmen
      wollen.  Wird 1, wenn Sie <menu>Remis annehmen</menu> aus dem
      Men <menu>Fernschach</menu> whlen.
      </li>
   </ul>
</p>
<p>
Anmerkung: Dieses Hilfsprogramm wird <b>nicht</b> fr eMail-Schach verwendet!
</p>

<p>
<b>Mail-Programm</b>:
Gibt den Pfad zu Ihrem bevorzugten Email-Programm an. Dieses Programm
wird dann fr das Erstellen und Versenden von Email-Schachpartien
aufgerufen. 
</p>
<p>
<b>(B)CC Address</b>:
Hiermit wird eine Blindkopie der Email an die hier angegebene Adresse
geschickt.  Das macht man z.B., falls man ein Email-Turnier spielt,
bei dem alle Zge in Kopie an einen Spiel- oder Turnierleiter gehen.
</p>

<p>
<b>Modus</b>:
Unglcklicherweiser gibt es unzhlige verschiedene Mailprogramme, die
auch noch alle unterschiedlich aufgerufen werden mssen. Einige der
gebruchlichsten Programme und ihre Aufrufparameter sind hier
gelistet. Falls Sie nicht wissen, wie Sie ihr Mailprogramm aufrufen
mssen, versuchen Sie die Einstellungen aus dieser Liste. Leider
knnen aber nicht alle Mailprogramme Mails mit Dateianhnge erzeugen,
wenn man sie aus einem anderen Programm heraus aufruft. Dann bleibt
Ihnen leider nur, entweder ein anderes Emailprogramm zu verwenden oder
die Postversand von Hand zu organisieren.
</p>
<p>Hinweis: mailx oder eines seiner Derivate sollten als
Kommandozeilenapplikation in der Lage sein, von eigentlich jeder
Plattform aus wie gewnscht zu funktionieren. Die Einrichtung ist
nicht sehr schwierig, so dass es sie es einmal versuchen sollten,
falls Ihr Mailprogramm nicht funktioniert
</p>
<p>Hinweis: mutt nutzt das systemsinterne Mailsystem (aka
sendmail/exim/postfix). Falls sie dieses (angeblich) recht schwierig
zu konfigurierende Mailsystem korrekt eingerichtet haben, ist mutt ein
prima Alternative. Auf einem "decent Unix" arbeitet es vllig
problemlos, allerdings stellt das einzurichtende Mailsystem eine
gewisse Hrde dar, da immer mehr Linuxsystem eben kein korrekt
eingerichtetes Mailsystem ausliefern.
</p>
<p>
<b>Attachement-Parameter</b>: 
Dieser Parameter gibt die anzuhngende Datei an. Er wird <b>nur</b> im
<term>mailx</term> Modus verwendet.
</p>
<p>
<b>Betreff-Parameter</b>:
Dieser Parameter gibt den Betreff einer Email an. Er wird <b>nur</b>
im <term>mailx</term> Modus verwendet.  </p>
<p><footer>(Updated: Scid 3.6.23, February 2008)</footer></p>
}

#############
# Correspondence Chess setup dialog help:
set helpTitle(D,CCXfccSetupDialog) "Xfcc Servereinstellungen"
set helpText(D,CCXfccSetupDialog) {<h1>Xfcc Servereinstellungen</h1>
<p>
Dieser Dialog liest das aktuell Verwendete Xfcc-Setup aus der
Konfigurationsdatei ein und zeigt alle Server an. Das Dialogfenster
selbst ist in zwei Teile geteilt: im oberen Bereich findet sich eine
Liste aller Servernamen, im unteren Bereich die fr diesen Server
aktuell geltenden Parameter.
</p>
<h2>Notwendige Eintrge</h2>
<ul>
<li><term>Servername</term>: Hier wird der von Scid verwendete
Servername angegeben. Er wird z. B. verwendet um eindeutige IDs fr
die einzelnen Fernschachpartien zu vergeben. Deshalb mu er aus einem
Wort bestehen, darf nur die Buchstaben (a-z und A-Z), Zahlen und die
beiden Zeichen "-" und "_" enthalten. Ferner mu dieser Name eindeutig
sein (Gro/Kleinschreibung wird beachtet).
</li>
<li><term>Loginname</term>: Mit diesem Namen meldet sich Scid beim
ausgewhlten Server an. Es ist hilfreich und vermeidet Probleme auch
hier nur Buchstaben, Zahlen und "-" sowie "_" zu verwenden.
</li>
<li><term>Passwort</term>: Gibt das fr das Login verwendete Passwort
an. Hier gilt ebenfalls das zum Loginnamen gesagte. <b>Hinweis</b>
Scid speichert die Passworte unverschlsselt.
</li>
<li><term>URL</term>: Hier wird die Zugangsadresse fr den
Xfcc-Service definiert. Diese erfhrt man beim jeweiligen
Diensteanbieter. Einige bekannte Server:
<ul>
	<li>SchemingMind: <url
	http://www.schemingmind.com/xfcc/xfccbasic.asmx>
	http://www.schemingmind.com/xfcc/xfccbasic.asmx</url>
	</li>
	<li>ICCF: 
	<url http://www.iccf-webchess.com/XfccBasic.asmx>
	http://www.iccf-webchess.com/XfccBasic.asmx</url>
	</li>
	<li>MeinSchach.de / MyChess.de:
	<url http://www.myChess.de/xfcc/xfccbasic.php4>
	http://www.myChess.de/xfcc/xfccbasic.php4</url>
	</li>
</ul>
</li>
</ul>
<p>
Um die Einstellungen eines Servers zu ndern whlt man diesen einfach
aus der Liste aus. Die zugehrigen Werte werden dann in den
Eingabefeldern angezeigt und knnen editiert wreden. Das Auswhlen
eines anderen Servers aktiviert diese Einstellungen.
</p>
<p>
Um einen neuen Server zu addieren whlt man den <term>Neu</term>
Knopf. Es wird ein neuer Eintrag erzeugt in dem die entsprechenden
Felder ausgefllt werden knnen.
</p>
<p>
Um einen Server zu lschen whlt man ihn aus der Liste aus und drckt
den <term>Lschen</term> Knopf. Allen Werte des entsprechenden Servers
wird nun ein Hash (#) vorangestellt. Hat man also versehentlich einen
Server gelscht entfernt man einfach das # vor jedem Eintrag.
</p>
<p>
Durch drcken von <term>OK</term> speichert Scid die Einstellungen ab.
Hier werden dann auch die als gelscht markierten Server endgltig
entfernt und alle neu angelegten hinzugefgt. Durch drcken von
<term>Abbruch</term> bleibt alles beim alten.
</p>

<p><footer>(Updated: Scid 3.6.24, May 2008)</footer></p>
}




### End of file: deutsch.tcl
### francais.tcl:
#
# French language support for Scid.
# Translations contributed by:
# Gilles Maire, Vincent Serisier, Joel Rivat, and Pascal Heisel.

addLanguage F Francais 0 iso8859-1

proc setLanguage_F {} {

# File menu:
menuText F File "Fichier" 0
menuText F FileNew "Nouvelle..." 0 {Crer une nouvelle base de donnes Scid}
menuText F FileOpen "Ouvrir..." 0 {Ouvrir une base de donnes Scid existante}
menuText F FileClose "Fermer" 0 {Fermer la base de donnes Scid active}
menuText F FileFinder "Trouver" 0 {Ouvrir la fentre de recherche de fichier}
menuText F FileBookmarks "Signets" 0 {Menu des signets (raccourci: Ctrl+B)}
menuText F FileBookmarksAdd "Ajouter un signet" 0 \
  {Poser un signet pour la position et partie courante}
menuText F FileBookmarksFile "Classer un signet" 0 \
  {Classer un signet pour la position et partie courante}
menuText F FileBookmarksEdit "Modifier les signets..." 0 \
  {Modifier les menus de signets}
menuText F FileBookmarksList "Afficher les dossiers comme une simple liste" 0 \
  {Afficher les dossiers comme une simple liste et non comme des sous-menus}
menuText F FileBookmarksSub "Afficher les dossiers comme des sous-menus" 0 \
  {Afficher les dossiers comme des sous-menus et non comme une simple liste}
menuText F FileMaint "Maintenance" 0 {Maintenance de la base}
menuText F FileMaintWin "Fentre de maintenance" 0 \
  {Ouvrir/Fermer la fentre de maintenance}
menuText F FileMaintCompact "Compacter la base..." 0 \
  {Compacter la base: supprimer les parties effaces et les noms non utiliss}
menuText F FileMaintClass "Classer les parties suivant ECO" 2 \
  {Recalculer le code ECO de toutes les parties}
menuText F FileMaintSort "Trier la base..." 0 {Trier toutes les parties de la base}
menuText F FileMaintDelete "Purger les doublons..." 0 \
  {Trouver les parties en doublons et les marquer pour l'effacement}
menuText F FileMaintTwin "Trouver les doublons" 0 \
  {Ouvrir/Actualiser la fentre de recherche de doublons}
menuText F FileMaintName "Orthographie des noms" 0 {dition des noms et outils orthographiques}
menuText F FileMaintNameEditor "diteur de noms" 11 {Ouvrir/Fermer l'diteur de noms}
menuText F FileMaintNamePlayer "Corriger les noms de joueurs..." 21 \
  {Vrifier l'orthographe des noms de joueurs}
menuText F FileMaintNameEvent "Corriger les vnements..." 14 \
  {Vrifier l'orthographe des noms d'vnements}
menuText F FileMaintNameSite "Corriger les noms de lieux.." 21 \
  {Vrifier l'orthographe des noms de lieux}
menuText F FileMaintNameRound "Corriger les noms des rondes..." 22 \
  {Vrifier l'orthographe des noms de rondes}
menuText F FileReadOnly "Lecture seule..." 0 \
  {Traiter la base courante en lecture seule, en empchant les changements}
menuText F FileSwitch "Changer de base" 0 \
  {Changer vers une base ouverte diffrente}
menuText F FileExit "Quitter" 0 {Quitter Scid}
menuText F FileMaintFixBase "Rparer base" 0 {Essaie de rparer une base corrompue}

# Edit menu:
menuText F Edit "diter" 0
menuText F EditAdd "Ajouter variante" 0 {Ajouter une variante}
menuText F EditDelete "Effacer variante" 0 {Effacer cette variante}
menuText F EditFirst "Dplacer en tte" 0 \
  {Dplacer cette variante en tte de liste}
menuText F EditMain "Variante vers ligne principale" 13 \
   {Promouvoir une variante en ligne principale}
menuText F EditTrial "Essayer une variante" 0 \
  {Dmarrer/Stopper mode d'essai, pour tester une ide sur l'chiquier}
menuText F EditStrip "purer" 2 {purer les commentaires ou les variantes de cette partie}
menuText F EditUndo "Annuler" 0 {Annuler la dernire modification de la partie}
# ====== TODO To be translated ======
menuText F EditRedo "Redo" 0 {Redo last game change}
menuText F EditStripComments "Commentaires" 0 \
  {purer cette partie de tous les commentaires et annotations}
menuText F EditStripVars "Variantes" 0 {purer cette partie des variantes}
menuText F EditStripBegin "Coups depuis le dbut" 1 \
  {purer cette partie des coups depuis le dbut}
menuText F EditStripEnd "Coups jusqu' la fin" 0 \
  {purer cette partie des coups jusqu' la fin}
menuText F EditReset "Vider le presse-papier" 0 {Vider le presse-papier}
menuText F EditCopy "Copier dans la base presse-papier" 0 \
  {Copier la partie en cours dans la base clipbase (9)}
menuText F EditPaste "Coller depuis la base presse-papier" 1 \
  {Copier la partie contenue dans la base clipbase (9)  cet emplacement}
menuText F EditPastePGN "Coller le presse-papier comme partie PGN..." 10 \
  {Interprter le texte du presse-papiers comme de la notation PGN et le coller ici}
menuText F EditSetup "Position de dpart" 0 \
  {Choisir une position de dpart pour cette partie}
menuText F EditCopyBoard "Copier la position" 6 \
  {Copier la position en cours en notation FEN vers la slection de texte (presse-papier)}
menuText F EditPasteBoard "Coller la position de dpart" 12 \
  {Initialiser la position de dpart  partir de la slection de texte courante(presse-papier)}

# Game menu:
menuText F Game "Partie" 0
menuText F GameNew "Nouvelle partie" 2 \
  {Remettre  zro la partie}
menuText F GameFirst "Charger la premire partie" 5 {Charger la premire partie du filtre}
menuText F GamePrev "Partie prcdente" 7 \
  {Charger la partie prcdente du filtre}
menuText F GameReload "Recharger la partie" 2 \
  {Recharger la partie (les modifications ne seront pas sauvegardes)}
menuText F GameNext "Partie suivante" 7 {Charger la partie suivante du filtre}
menuText F GameLast "Charger la dernire partie" 5 {Charger la dernire partie du filtre}
menuText F GameRandom "Charger une partie au hasard" 8 {Charger au hasard une partie du filtre}
menuText F GameNumber "Partie numro..." 9 \
  {Charger une partie en donnant son numro}
menuText F GameReplace "Enregistrer: Remplacer la partie..." 13 \
  {Enregistrer cette partie, en crasant l'ancienne version}
menuText F GameAdd "Enregistrer: Ajouter nouvelle partie..." 13 \
  {Enregistrer cette partie en tant que nouvelle partie dans la base}
menuText F GameDeepest "Identifier ouverture" 11 \
  {Trouver la partie la plus proche dans la nomenclature ECO}
menuText F GameGotoMove "Coup numro..." 6 \
  {Aller au coup spcifi dans la partie en cours}
menuText F GameNovelty "Trouver la nouveaut..." 7 \
  {Trouver le premier coup de la partie qui n'a pas t jou auparavant}

# Search menu:
menuText F Search "Rechercher" 0
menuText F SearchReset "Rinitialiser le filtre" 0 \
  {Remettre  zro le filtre (inclusion de toutes les parties)}
menuText F SearchNegate "Inverser le filtre" 0 \
  {Inverser le filtre}
menuText F SearchCurrent "Position..." 0 \
  {Rechercher la position en cours}
menuText F SearchHeader "Entte..." 0 \
  {Rechercher par entte (joueur, tournoi, etc) information}
menuText F SearchMaterial "Motifs" 0 \
  {Rechercher des motifs ou un matriel particulier sur l'chiquier}
menuText F SearchUsing "En utilisant un fichier d'options..." 0 \
  {Rechercher en utilisant un fichier d'options de recherche}

# Windows menu:
menuText F Windows "Fentres" 2
menuText F WindowsComment "diteur de commentaires" 0 \
  {Ouvrir/fermer l'diteur de commentaires}
menuText F WindowsGList "Liste des parties" 0 \
  {Ouvrir/fermer la liste des parties}
menuText F WindowsPGN "Fentre PGN" 8 {Ouvrir/fermer la fentre PGN}
menuText F WindowsPList "Chercher un joueur" 2 {Ouvrir/fermer la recherche de joueur}
menuText F WindowsTmt "Recherche de tournois" 0 {Ouvrir/fermer la recherche de tournois}
menuText F WindowsSwitcher "Changer de base" 0 \
  {Ouvrir/Fermer l'outil de changement de base}
menuText F WindowsMaint "Fentre de Maintenance" 0 \
  {Ouvrir/Fermer la fentre de maintenance}
menuText F WindowsECO "Navigateur ECO" 0 {Ouvrir/fermer le navigateur ECO}
menuText F WindowsRepertoire "diteur de rpertoire" 0 {Ouvrir/Fermer l'diteur de rpertoire}
menuText F WindowsStats "Fentre de statistique" 11 \
  {Ouvrir/Fermer le filtre de statistiques}
menuText F WindowsTree "Fentre d'arbre" 10 \
  {Ouvrir/Fermer la fentre d'arbre}
menuText F WindowsTB "Fentre de tables de finales" 8 \
  {Ouvrir/Fermer la fentre de tables de finales}
menuText F WindowsBook "Bibliothque d'ouvertures" 0 {Ouvrir/Fermer la bibliothque d'ouverture}
menuText F WindowsCorrChess "Jeu par correspondance" 0 {Ouvrir/Fermer la fentre de jeu par correspondance}

# Tools menu:
menuText F Tools "Outils" 2
menuText F ToolsAnalysis "Moteur d'analyse..." 9 \
  {Dmarrer/Arrter un moteur d'analyses}
menuText F ToolsAnalysis2 "Moteur d'analyse #2..." 18 \
  {Dmarrer/Arrter un moteur d'analyses}
menuText F ToolsCross "Classement du tournoi" 0 \
  {Montrer le classement du tournoi}
menuText F ToolsEmail "Gestion des messages" 0 \
  {Ouvrir/Fermer la fentre de gestion des messages lectroniques}
menuText F ToolsFilterGraph "Graphique de filtre" 7 {Ouvrir/Fermer la fentre du graphique de filtre}
menuText F ToolsAbsFilterGraph "Graphique de filtre absolu" 7 {Ouvrir/Fermer la fentre du graphique de filtre absolu}
menuText F ToolsOpReport "Rapport d'ouverture" 0 {Gnrer un rapport d'ouvertures  partir de la position courante}
menuText F ToolsOpenBaseAsTree "Ouvrir base dans arbre" 0   {Ouvrir une base dans la fentre d'arbre}
menuText F ToolsOpenRecentBaseAsTree "Ouvrir base rcente dans arbre" 0   {Ouvrir une base rcente dans la fentre d'arbre}
menuText F ToolsTracker "Suivi de pice"  0 {Ouvrir la fentre de suivi de pice}
menuText F ToolsTraining "Entrainement"  0 {Entrainement (tactique, ouvertures, ...) }
menuText F ToolsTacticalGame "Partie tactique"  0 {Jouer une partie tactique}
menuText F ToolsSeriousGame "Partie srieuse"  0 {Jouer une partie sans handicap}
menuText F ToolsTrainOpenings "Ouvertures"  0 {Entrainement sur un rpertoire}
menuText F ToolsTrainReviewGame "Revoir partie"  0 {Deviner les coups jous dans la partie}
menuText F ToolsTrainTactics "Tactique"  0 {Rsoudre des problmes tactiques}
menuText F ToolsTrainCalvar "Calcul de variantes"  0 {Entrainement au calcul de variantes}
menuText F ToolsTrainFindBestMove "Trouver le meilleur coup"  0 {Trouver le meilleur coup}
menuText F ToolsTrainFics "Jouer sur internet"  0 {Jouer sur freechess.org}
# ====== TODO To be translated ======
menuText F ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText F ToolsBookTuning "Config. bibliothque" 0 {Configuration fine d'une bibliothque}
menuText F ToolsConnectHardware "Connecter matriel" 0 {Connecter un chiquier externe}
menuText F ToolsConnectHardwareConfigure "Configurer..." 0 {Configurer un chiquier externe et connection}
menuText F ToolsConnectHardwareNovagCitrineConnect "Connecter Novag Citrine" 0 {Connecter Novag Citrine}
menuText F ToolsConnectHardwareInputEngineConnect "Connecter entre" 0 {Connecter un moteur en entre (p.e. DGT)}
menuText F ToolsPInfo "Information sur les joueurs"  0 \
  {Ouvrir/Mettre  jour la fentre d'information sur les joueurs}
menuText F ToolsPlayerReport "Rapport pour le joueur..." 3 \
  {Gnrer un rapport pour le joueur}
menuText F ToolsRating "Elo graphique" 0 \
  {Tracer un graphique du classement Elo des joueurs de cette partie}
menuText F ToolsScore "Score graphique" 0 {Montrer le graphique des scores}
menuText F ToolsExpCurrent "crire la partie en cours" 22 \
  {crire la partie en cours dans un fichier texte}
menuText F ToolsExpCurrentPGN "Dans un fichier PGN..." 16 \
  {crire la partie en cours dans un fichier PGN}
menuText F ToolsExpCurrentHTML "Dans un fichier HTML..." 16 \
  {crire la partie en cours dans un fichier HTML}
menuText F ToolsExpCurrentHTMLJS "Dans un fichier HTML et JavaScript..." 16 {crire la partie en cours dans un fichier HTML et JavaScript}  
menuText F ToolsExpCurrentLaTeX "Dans un fichier LaTeX..." 16 \
  {crire la partie en cours dans un fichier LaTeX}
menuText F ToolsExpFilter "crire le filtre " 2 \
  {crire le filtre dans un fichier texte}
menuText F ToolsExpFilterPGN "Dans un fichier PGN..." 16 \
  {crire le filtre dans un fichier PGN}
menuText F ToolsExpFilterHTML "Dans un fichier HTML..." 16 \
  {crire le filtre dans un fichier HTML}
menuText F ToolsExpFilterHTMLJS "Dans un fichier HTML et JavaScript..." 16 {crire le filtre dans un fichier HTML et JavaScript}  
menuText F ToolsExpFilterLaTeX "Dans un fichier LaTeX..." 16 \
  {crire le filtre dans un fichier LaTeX}
menuText F ToolsImportOne "Importer une partie en PGN..." 0 \
  {Importer une partie  partir d'un texte PGN}
menuText F ToolsImportFile "Importer un fichier en PGN..." 12 \
  {Importer des parties  partir d'un fichier PGN}
menuText F ToolsStartEngine1 "Dmarrer moteur 1" 0  {Dmarrer moteur 1}
menuText F ToolsStartEngine2 "Dmarrer moteur 2" 0  {Dmarrer moteur 2}
# ====== TODO To be translated ======
menuText F ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
menuText F Play "Jouer" 0
menuText F CorrespondenceChess "Echecs par correspondance" 0 {eMail et Xfcc checs par correspondance}
menuText F CCConfigure "Configurer..." 0 {Configurer outils externes et config gnrale}
# ====== TODO To be translated ======
menuText F CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
menuText F CCOpenDB "Ouvrir base..." 0 {Ouvrir la base de jeu par correspondance par dfaut}
menuText F CCRetrieve "Rcuprer parties" 0 {Rcuprer les parties via Xfcc}
menuText F CCInbox "Analyser bote" 0 {Analyser tous les fichiers dans la bote de rception de Scid}
menuText F CCSend "Envoyer coup" 0 {Envoyer votre coup via eMail ou outil externe (Xfcc)}
menuText F CCResign "Abandonner" 0 {Abandonner (pas par eMail)}
menuText F CCClaimDraw "Rclamer la nulle" 0 {Envoyer coup et rclamer nulle (pas par eMail)}
menuText F CCOfferDraw "Proposer la nulle" 0 {Envoyer coup et proposer nulle (pas par eMail)}
menuText F CCAcceptDraw "Accepter la nulle" 0 {Accepter la nulle (pas par eMail)}
menuText F CCNewMailGame "Nouvelle partie eMail..." 0 {Commencer une nouvelle partie par eMail}
menuText F CCMailMove "eMailer le coup..." 0 {Envoyer le coup par eMail  l'adversaire}
menuText F CCGamePage "Page partie..." 0 {Ouvrir la partie dans navigateur web}
menuText F CCEditCopy "Copier parties dans Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText F Options "Options" 0
menuText F OptionsBoard "Echiquier" 0 {Options d'aspect de l'chiquier}
menuText F OptionsBoardSize "Taille chiquier" 0 {Changer la taille de l'chiquier}
menuText F OptionsBoardPieces "Style des pices" 6 {Changer le style des pices}
menuText F OptionsBoardColors "Couleurs..." 0 {Changer les couleurs}
menuText F OptionsBoardGraphics "Images de cases..." 0 {Select textures for squares}
translate F OptionsBGW {Slectionner les textures des cases}
translate F OptionsBoardGraphicsText {Slection des images pour les cases blanches et noires:}
menuText F OptionsBoardNames "Mes noms de joueurs..." 0 {Editer mes noms de joueurs}
menuText F OptionsExport "Exportation" 0 {Changer les options d'exportation}
menuText F OptionsFonts "Polices" 0 {Changer les polices}
menuText F OptionsFontsRegular "Normales" 0 {Changer les polices normales}
menuText F OptionsFontsMenu "Menu" 0 {Changer la police des menus}
menuText F OptionsFontsSmall "Petites" 0 {Changer les petites polices}
# ====== TODO To be translated ======
menuText F OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText F OptionsFontsFixed "Fixe" 0 {Changer les polices de chasse fixe}
menuText F OptionsGInfo "Informations de la partie" 7 {Options d'information de la partie}
menuText F OptionsLanguage "Langue" 0 {Slectionner le menu de choix des langues}
menuText F OptionsMovesTranslatePieces "Traduction des pices" 0 {Convertit la premire lettre des pices}
menuText F OptionsMovesHighlightLastMove "Surbrillance dernier coup" 0 {Surbrillance du dernier coup}
menuText F OptionsMovesHighlightLastMoveDisplay "Afficher" 0 {Afficher la surbrillance du dernier coup}
menuText F OptionsMovesHighlightLastMoveWidth "Epaisseur" 0 {Epaisseur de la ligne}
menuText F OptionsMovesHighlightLastMoveColor "Couleur" 0 {Couleur de la ligne}
# ====== TODO To be translated ======
menuText F OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText F OptionsMoves "Coups" 2 {Gestion des coups}
menuText F OptionsMovesAsk "Demander avant d'craser les coups" 0 \
  {Demander avant d'craser un coup existant}
menuText F OptionsMovesAnimate "Temps d'animation" 1 \
  {Fixe le temps utilis pour l'animation des coups}
menuText F OptionsMovesDelay "Dlai entre les coups" 3 \
  {Positionner le dlai entre deux coups en mode automatique}
menuText F OptionsMovesCoord "Coordonnes entre les coups" 0 \
  {Accepter l'entre des coups par coordonnes ("g1f3")}
menuText F OptionsMovesSuggest "Montrer les coups suggrs" 0 \
  {Activer/Dsactiver le mode de suggestion de coup}
menuText F OptionsShowVarPopup "Montrer fentre des variantes" 0 {Affichage automatique des variantes}  
menuText F OptionsMovesSpace "Ajouter un espace aprs le numro du coup" 0 {Espace aprs numro du coup}  
menuText F OptionsMovesKey "Compltion clavier" 0 \
  {Activer/Dsactiver le mode de compltion du clavier}
menuText F OptionsMovesShowVarArrows "Montrer flches pour les variations" 0 {Montrer des flches pour les variations existantes}
menuText F OptionsNumbers "Format numrique" 7 {Slectionner le format des nombres}
menuText F OptionsStartup "Dmarrage" 3 {Slectionner les fentres  ouvrir au dmarrage}
menuText F OptionsTheme "Apparence" 0 {Change l'apparence de l'interface}
menuText F OptionsWindows "Fentres" 0 {Options des fentres}
menuText F OptionsWindowsIconify "Mise en icone automatique" 5 \
  {Mettre toutes les fentres en icones quand la fentre principale est mise en icone}
menuText F OptionsWindowsRaise "Apparition automatique" 0 \
  {Faire apparatre certaines fentres (i.e. barres de progression)  chaque fois qu'elles sont obscurcies}
menuText F OptionsSounds "Sons..." 2 {Configurer l'annonce des sonore des coups}
menuText F OptionsWindowsDock "Fentres groupes" 0 {Fentres groupes (ncessite un redmarrage)}
menuText F OptionsWindowsSaveLayout "Enregistrer disposition" 0 {Enregistrer disposition}
menuText F OptionsWindowsRestoreLayout "Remettre disposition" 0 {Remettre disposition}
menuText F OptionsWindowsShowGameInfo "Montrer le panneau d'info" 0 {Montrer le panneau d'info}
menuText F OptionsWindowsAutoLoadLayout "Chargement auto 1re disposition" 0 {Chargement auto de la premire disposition au dmarrage}
menuText F OptionsToolbar "Barre d'outils de la fentre principale" 12 \
  {Montrer/Cacher dans la barre d'outils de la fentre principale}
menuText F OptionsECO "Charger le fichier ECO..." 20 \
  {Charger un fichier au format ECO}
menuText F OptionsSpell "Charger le fichier d'orthographe..." 25 \
  {Charger un fichier de correction orthographique scid}
menuText F OptionsTable "Rpertoire des tables de finales TB..." 0 \
  {Slectionner un rpertoire de fichiers TB, tous les fichiers de ce rpertoire seront utiliss}
menuText F OptionsRecent "Fichiers rcents..." 0 \
  {Changer le nombre de fichiers rcents affichs dans le menu Fichier}
menuText F OptionsBooksDir "Rpertoire des bibliothques..." 0 {Rpertoire des bibliothques d'ouverture}
menuText F OptionsTacticsBasesDir "Rpertoire des bases d'entrainement..." 0 {Rpertoire des bases pour l'entrainement tactique}
menuText F OptionsSave "Sauver les options" 0 "Sauver les options dans le fichier $::optionsFile"
menuText F OptionsAutoSave "Sauvegarde automatique des options" 0 \
  {Sauvegarder automatiquement toutes les options en quittant Scid}

# Help menu:
menuText F Help "Aide" 0
menuText F HelpContents "Contenu" 0 {Montrer la page du contenu de l'aide}
menuText F HelpIndex "Index" 0 {Afficher la table des matires}
menuText F HelpGuide "Aide Rapide" 5 {Montrer la page d'aide rapide}
menuText F HelpHints "Astuces" 0 {Afficher les trucs et astuces}
menuText F HelpContact "Contact" 0 {Afficher les noms des contacts}
menuText F HelpTip "Astuce du jour" 0 {Afficher une astuce Scid}
menuText F HelpStartup "Fentre de dmarrage" 0 {Afficher la fentre de dmarrage}
menuText F HelpAbout "A propos de Scid" 2 {Information au sujet de Scid}

# Game info box popup menu:
menuText F GInfoHideNext "Cacher le coup suivant" 0
menuText F GInfoMaterial "Montrer les valeurs de matriel" 0
menuText F GInfoFEN "Montrer la notation FEN" 5
menuText F GInfoMarks "Montrer les cases colores et les flches" 5
menuText F GInfoWrap "Dcouper les longues lignes" 0
menuText F GInfoFullComment "Montrer tous les commentaires" 10
menuText F GInfoPhotos "Montrer les Photos" 5
menuText F GInfoTBNothing "Tables de finales: Rien" 12
menuText F GInfoTBResult "Tables de finales: Seulement le rsultat" 12
menuText F GInfoTBAll "Tables de finales: rsultat et meilleurs coups" 19
menuText F GInfoDelete "(Rcuprer)Effacer cette partie" 4
menuText F GInfoMark "(D)Marquer cette partie" 4
menuText F GInfoInformant "Configurer les valeurs de notation" 0

# Main window buttons:
helpMsg F .main.fbutton.button.start {Aller au dbut de la partie  (Raccourci clavier: Home)}
helpMsg F .main.fbutton.button.end {Aller  la fin de la partie  (Raccourci clavier: Fin)}
helpMsg F .main.fbutton.button.back {Reculer d'un coup  (Raccourci clavier: Flche gauche)}
helpMsg F .main.fbutton.button.forward {Avancer d'un coup  (Raccourci clavier: Flche droite)}
helpMsg F .main.fbutton.button.intoVar {Entrer dans une variante  (Raccourci clavier: v)}
helpMsg F .main.fbutton.button.exitVar {Quitter la variante en cours  (Raccourci clavier: z)}
helpMsg F .main.fbutton.button.flip {Retourner l'chiquier  (Raccourci clavier: .)}
helpMsg F .main.fbutton.button.coords {Afficher/Enlever les coordonnes  (Raccourci clavier: 0)}
helpMsg F .main.fbutton.button.stm {Afficher/Enlever l'icone du joueur ayant le trait}
helpMsg F .main.fbutton.button.autoplay {Jeu automatique  (Raccourci clavier: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg F .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg F .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg F .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate F Back {Retour}
translate F Browse {Parcourir}
translate F Cancel {Annuler}
translate F Continue {Continuer}
translate F Clear {Effacer}
translate F Close {Fermer}
translate F Contents {Contenu}
translate F Defaults {Par dfaut}
translate F Delete {liminer}
translate F Graph {Graphique}
translate F Help {Aide}
translate F Import {Importer}
translate F Index {Index}
translate F LoadGame {Charger partie}
translate F BrowseGame {Explorer la partie dans une fentre spare}
translate F MergeGame {Fusionner la partie comme variante}
translate F MergeGames {Fusionner les parties}
translate F Preview {Prvisualiser}
translate F Revert {Revenir}
translate F Save {Enregistrer}
translate F Search {Rechercher}
translate F Stop {Arrter}
translate F Store {Enregistrer}
translate F Update {Mettre  jour}
translate F ChangeOrient {Changer l'orientation de la fentre}
translate F ShowIcons {Montrer les icones}
translate F None {Aucun}
translate F First {Premier}
translate F Current {En cours}
translate F Last {Dernier}

# General messages:
translate F game {partie}
translate F games {parties}
translate F move {coup}
translate F moves {coups}
translate F all {tout}
translate F Yes {Oui}
translate F No {Non}
translate F Both {Les deux}
translate F King {Roi}
translate F Queen {Dame}
translate F Rook {Tour}
translate F Bishop {Fou}
translate F Knight {Cavalier}
translate F Pawn {Pion}
translate F White {Blancs}
translate F Black {Noirs}
translate F Player {Joueur}
translate F Rating {Classement ELO}
translate F RatingDiff {Diffrence de classement ELO (Blancs - Noirs)}
translate F AverageRating {Classement moyen}
translate F Event {vnement}
translate F Site {Lieux}
translate F Country {Pays}
translate F IgnoreColors {Ignorer les couleurs}
translate F Date {Date}
translate F EventDate {vnement date}
translate F Decade {Dcennie}
translate F Year {Anne}
translate F Month {Mois}
translate F Months {Janvier Fvrier Mars Avril Mai Juin Juillet Aot Septembre Octobre Novembre Dcembre}
translate F Days {Dim Lun Mar Mer Jeu Ven Sam}
translate F YearToToday {Anne jusqu' aujourd'hui}
translate F Result {Rsultat}
translate F Round {Ronde}
translate F Length {Longueur}
translate F ECOCode {code ECO}
translate F ECO {ECO}
translate F Deleted {limin}
translate F SearchResults {Rsultats de la recherche}
translate F OpeningTheDatabase {Ouverture de la base}
translate F Database {Base}
translate F Filter {Filtre}
translate F noGames {pas de parties}
translate F allGames {toutes les parties}
translate F empty {vide}
translate F clipbase {presse-papier}
translate F score {score}
translate F StartPos {Position de dpart}
translate F Total {Total}
translate F readonly {lecture seule}

# Standard error messages:
translate F ErrNotOpen {Ceci n'est pas une base ouverte.}
translate F ErrReadOnly {Cette base est en lecture seule; elle ne peut tre modifie.}
translate F ErrSearchInterrupted {La recherche a t interrompue; les rsultats sont incomplets.}

# Game information:
translate F twin {doublon}
translate F deleted {limin}
translate F comment {commentaire}
translate F hidden {cach}
translate F LastMove {Dernier coup}
translate F NextMove {Coup suivant}
translate F GameStart {Dbut de partie}
translate F LineStart {Dbut de ligne}
translate F GameEnd {Fin de partie}
translate F LineEnd {Fin de ligne}

# Player information:
translate F PInfoAll {Rsultats pour <b>toutes</b> les parties}
translate F PInfoFilter {Rsultats pour les parties <b>filtres</b>}
translate F PInfoAgainst {Rsultats contre}
translate F PInfoMostWhite {Ouvertures les plus frquentes avec les blancs}
translate F PInfoMostBlack {Ouvertures les plus frquentes avec les noirs}
translate F PInfoRating {Historique du classement}
translate F PInfoBio {Biographie}
translate F PInfoEditRatings {Editer les Classements}

# Tablebase information:
translate F Draw {Nulle}
translate F stalemate {pat}
translate F withAllMoves {avec tous les coups}
translate F withAllButOneMove {avec tous les coups sauf le dernier}
translate F with {avec}
translate F only {seulement}
translate F lose {perte}
translate F loses {pertes}
translate F allOthersLose {toutes les autres pertes}
translate F matesIn {mat en}
translate F hasCheckmated {a mat}
translate F longest {le plus long}
translate F WinningMoves {Coups gagnants}
translate F DrawingMoves {Coups faisant nulle}
translate F LosingMoves {Coups perdants}
translate F UnknownMoves {Coups dont le rsultat est inconnu}

# Tip of the day:
translate F Tip {Conseil}
translate F TipAtStartup {Conseil au dmarrage}

# Tree window menus:
menuText F TreeFile "Fichier" 0
menuText F TreeFileFillWithBase "Remplir cache avec base" 0 {Remplir le cache avec toutes les parties de la base courante}
menuText F TreeFileFillWithGame "Remplir cache avec partie" 0 {Remplir le cache avec la partie de la base courante}
menuText F TreeFileSetCacheSize "Taille du cache" 0 {Taille du cache}
menuText F TreeFileCacheInfo "Info cache" 0 {Afficher information sur l'utilisation du cache}
menuText F TreeFileSave "Sauver le cache" 0
menuText F TreeFileFill "Remplir le cache" 0
menuText F TreeFileBest "Liste des meilleures parties" 0 {Montrer la liste des meilleures parties}
menuText F TreeFileGraph "Graphique" 0 {Graphique de l'arbre}
menuText F TreeFileCopy "Copier l'arbre dans le presse-papiers" 0
menuText F TreeFileClose "Fermer la fentre d'arbre" 0
menuText F TreeMask "Masque" 0
menuText F TreeMaskNew "Nouveau" 0 {Nouveau masque}
menuText F TreeMaskOpen "Ouvrir" 0 {Ouvrir masque}
menuText F TreeMaskOpenRecent "Ouvrir rcent" 0 {Ouvrir un masque rcent}
menuText F TreeMaskSave "Sauver" 0 {Sauver masque}
menuText F TreeMaskClose "Fermer" 0 {Fermer masque}
menuText F TreeMaskFillWithGame "Remplir avec partie" 0 {Remplir le masque avec partie}
menuText F TreeMaskFillWithBase "Remplir avec base" 0 {Remplir le masque avec les parties de la base}
menuText F TreeMaskInfo "Info" 0 {Statistiques du masque}
menuText F TreeMaskDisplay "Afficher l'arbre" 0 {Affichage des donnes du masque sous la forme d'un arbre}
menuText F TreeMaskSearch "Chercher" 0 {Chercher dans le masque courant}
menuText F TreeSort "Trier" 0
menuText F TreeSortAlpha "Alphabtique" 0
menuText F TreeSortECO "code ECO" 0
menuText F TreeSortFreq "Frquence" 0
menuText F TreeSortScore "Score" 0
menuText F TreeOpt "Options" 0
menuText F TreeOptSlowmode "Mode lent" 0 {Mode lent pour rafraichissement (prcis)}
menuText F TreeOptFastmode "Mode rapide" 0 {Mode rapide pour rafraichissement (pas de transpositions)}
menuText F TreeOptFastAndSlowmode "Mode rapide puis lent" 0 {Mode rapide puis lent pour rafraichissement}
menuText F TreeOptStartStop "Rafrachissement auto" 0 {Rafrachissement automatique de la fentre}
menuText F TreeOptLock "Verrouille" 0 {D/verrouiller l'arbre  la base en cours}
menuText F TreeOptTraining "Entranement" 0 {Dmarrer/Arrter l'arbre du mode d'entranement}
menuText F TreeOptAutosave "Sauver le cache automatiquement" 0
menuText F TreeHelp "Aide" 0
menuText F TreeHelpTree "Aide Arbre" 0
menuText F TreeHelpIndex "Index" 0
translate F SaveCache {Sauver le cache}
translate F Training {Entranement}
translate F LockTree {Verrouiller}
translate F TreeLocked {verrouill}
translate F TreeBest {Meilleur}
translate F TreeBestGames {Arbre des meilleures parties}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate F TreeTitleRow \
  {    Coup   ECO        Frquence   Score EloMoy Perf AnneMoy %Nulle}
translate F TreeTotal {TOTAL}
translate F DoYouWantToSaveFirst {voulez-vous d'abord sauvegarder}
translate F AddToMask {Ajouter au masque}
translate F RemoveFromMask {Enlever du masque}
translate F AddThisMoveToMask {Ajouter ce coup au masque}
translate F SearchMask {Recherche dans masque}
translate F DisplayMask {Affichage du masque}
translate F Nag {Code Nag}
translate F Marker {Marqueur}
translate F Include {Inclure}
translate F Exclude {Exclure}
translate F MainLine {Ligne principale}
translate F Bookmark {Signet}
translate F NewLine {Nouvelle ligne}
translate F ToBeVerified {A vrifier}
translate F ToTrain {S'entrainer}
translate F Dubious {Douteux}
translate F ToRemove {A supprimer}
translate F NoMarker {Aucun marqueur}
translate F ColorMarker {Couleur}
translate F WhiteMark {Blanc}
translate F GreenMark {Vert}
translate F YellowMark {Jaune}
translate F BlueMark {Bleu}
translate F RedMark {Rouge}
translate F CommentMove {Annoter coup}
translate F CommentPosition {Annoter position}
translate F AddMoveToMaskFirst {Ajoutez d'abord le coup au masque}
translate F OpenAMaskFileFirst {Ouvrez d'abord un masque}
translate F Positions {Positions}
translate F Moves {Coups}

# Finder window:
menuText F FinderFile "Fichier" 0
menuText F FinderFileSubdirs "Rechercher dans les sous rpertoires" 0
menuText F FinderFileClose "Fermer l'explorateur de fichiers" 0
menuText F FinderSort "Trier" 0
menuText F FinderSortType "Type" 0
menuText F FinderSortSize "Taille" 0
menuText F FinderSortMod "Modifi" 0
menuText F FinderSortName "Nom" 0
menuText F FinderSortPath "Chemin" 0
menuText F FinderTypes "Types" 0
menuText F FinderTypesScid "Bases Scid" 0
menuText F FinderTypesOld "Bases Scid  l'ancien format" 0
menuText F FinderTypesPGN "fichiers PGN" 0
menuText F FinderTypesEPD "fichiers EPD (thorie)" 0
menuText F FinderTypesRep "fichiers des rpertoires" 0
menuText F FinderHelp "Aide" 0
menuText F FinderHelpFinder "Aide de l'explorateur de fichiers" 0
menuText F FinderHelpIndex "Index" 0
translate F FileFinder {Explorateur de fichiers}
translate F FinderDir {Rpertoire}
translate F FinderDirs {Rpertoires}
translate F FinderFiles {Fichiers}
translate F FinderUpDir {rpertoire prcdent}
translate F FinderCtxOpen {Ouvrir}
translate F FinderCtxBackup {Sauvegarder}
translate F FinderCtxCopy {Copier}
translate F FinderCtxMove {Dplacer}
translate F FinderCtxDelete {Supprimer}

# Player finder:
menuText F PListFile "Fichier" 0
menuText F PListFileUpdate "Mettre  jour" 0
menuText F PListFileClose "Fermer la recherche de joueur" 0
menuText F PListSort "Trier" 0
menuText F PListSortName "Nom" 0
menuText F PListSortElo "Elo" 0
menuText F PListSortGames "Parties" 0
menuText F PListSortOldest "Les plus vieux" 0
menuText F PListSortNewest "Les plus rcents" 0

# Tournament finder:
menuText F TmtFile "Fichier" 0
menuText F TmtFileUpdate "Mettre  jour" 0
menuText F TmtFileClose "Fermer l'explorateur de tournois" 0
menuText F TmtSort "Trier" 0
menuText F TmtSortDate "Date" 0
menuText F TmtSortPlayers "Joueurs" 0
menuText F TmtSortGames "Parties" 0
menuText F TmtSortElo "Elo" 0
menuText F TmtSortSite "Lieux" 0
menuText F TmtSortEvent "vnement" 1
menuText F TmtSortWinner "Vainqueur" 0
translate F TmtLimit "Limite de liste"
translate F TmtMeanElo "Moyenne ELO la plus basse"
translate F TmtNone "Aucun tournoi correspondant n'a t trouv."

# Graph windows:
menuText F GraphFile "Fichier" 0
menuText F GraphFileColor "Sauver comme Postscript en couleurs..." 27
menuText F GraphFileGrey "Sauver comme Postscript en niveaux de gris..." 27
menuText F GraphFileClose "Fermer la fentre" 0
menuText F GraphOptions "Options" 0
menuText F GraphOptionsWhite "Blancs" 0
menuText F GraphOptionsBlack "Noirs" 0
menuText F GraphOptionsBoth "Les deux" 4
menuText F GraphOptionsPInfo "Informations joueurs" 0
translate F GraphFilterTitle "Graphique de filtre: frquence pour 1000 parties"
translate F GraphAbsFilterTitle "Graphique de filtre: frquence des parties"
translate F ConfigureFilter {Configurer l'axe des X par anne, classement et coups}
translate F FilterEstimate "Estimer"
translate F TitleFilterGraph "Scid: Graphe de filtre"

# Analysis window:
translate F AddVariation {Ajouter une variante}
translate F AddAllVariations {Ajouter toutes les variantes}
translate F AddMove {Ajouter le coup}
translate F Annotate {Annotation}
translate F ShowAnalysisBoard {Montrer chiquier d'analyse}
translate F ShowInfo {Montrer infos moteur}
translate F FinishGame {Continuer la partie}
translate F StopEngine {Arrter le moteur}
translate F StartEngine {Dmarrer le moteur}
translate F LockEngine {Verrouiller moteur  la position actuelle}
translate F AnalysisCommand {Commande d'analyse}
translate F PreviousChoices {Choix prcdents}
translate F AnnotateTime {Fixer le temps en secondes entre deux coups}
translate F AnnotateWhich {Ajouter des variantes}
translate F AnnotateAll {Pour les coups des deux cots}
translate F AnnotateAllMoves {Annoter tous les coups}
translate F AnnotateWhite {Pour les coups des blancs seulement}
translate F AnnotateBlack {Pour les coups des noirs seulement}
translate F AnnotateBlundersOnly {Quand le coup est une erreur}
translate F AnnotateBlundersOnlyScoreChange {Coup faible, le score varie de/: }
translate F BlundersThreshold {Seuil de l'erreur}
# TODO: Translate
translate F ScoreAllMoves {Valider tous les coups}
translate F LowPriority {Priorit processeur basse}
translate F ClickHereToSeeMoves {Cliquer ici pour afficher les coups}
translate F ConfigureInformant {Configurer les valeurs des notations}
translate F Informant!? {Coup intressant}
translate F Informant? {Coup faible}
translate F Informant?? {Mauvais coup}
translate F Informant?! {Coup douteux}
translate F Informant+= {Les blancs ont un lger avantage}
translate F Informant+/- {Les blancs ont l'avantage}
translate F Informant+- {Les blancs ont un avantage dcisif}
translate F Informant++- {La partie est gagne}

# Book window
translate F Book {Bibliothque}
translate F OtherBookMoves {Bibliothque de l'adversaire}
translate F OtherBookMovesTooltip {Coups pour lesquels l'adversaire a une rponse}

# Analysis Engine open dialog:
translate F EngineList {Liste des moteurs d'analyse}
translate F EngineName {Nom}
translate F EngineCmd {Commande}
translate F EngineArgs {Paramtres}
translate F EngineDir {Rpertoire}
translate F EngineElo {Elo}
translate F EngineTime {Date}
translate F EngineNew {Nouvelle}
translate F EngineEdit {diter}
translate F EngineRequired {Les champs en gras sont requis; les autres sont optionnels}

# Stats window menus:
menuText F StatsFile "Fichier" 0
menuText F StatsFilePrint "crire dans fichier..." 0
menuText F StatsFileClose "Fermer la fentre" 0
menuText F StatsOpt "Options" 0

# PGN window menus:
menuText F PgnFile "Fichier" 0
menuText F PgnFileCopy "Copier la partie dans le Presse-papier" 0
menuText F PgnFilePrint "crire dans fichier..." 0
menuText F PgnFileClose "Fermer la fentre PGN" 0
menuText F PgnOpt "Affichage" 0
menuText F PgnOptColor "Couleur d'affichage" 0
menuText F PgnOptShort "Entte court (3-lignes)" 0
menuText F PgnOptSymbols "Annotations symboliques" 0
menuText F PgnOptIndentC "Indentation des commentaires" 0
menuText F PgnOptIndentV "Indentation des variantes" 16
menuText F PgnOptColumn "Style en colonne (un coup par ligne)" 1
menuText F PgnOptSpace "Espace aprs numro des coups" 0
menuText F PgnOptStripMarks "Enlever les codes de flches et de coloration de cases" 1
menuText F PgnOptBoldMainLine "Mettre en gras les coups de la ligne principale" 4
menuText F PgnColor "Couleur" 0
menuText F PgnColorHeader "Entte..." 0
menuText F PgnColorAnno "Annotations..." 0
menuText F PgnColorComments "Commentaires..." 0
menuText F PgnColorVars "Variantes..." 0
menuText F PgnColorBackground "Couleur du fond..." 11
menuText F PgnColorMain "Main line..." 0
menuText F PgnColorCurrent "Dernier coup..." 1
menuText F PgnHelp "Aide" 0
menuText F PgnHelpPgn "Aide PGN" 0
menuText F PgnHelpIndex "Index" 0
translate F PgnWindowTitle {Notation - partie %u}

# Crosstable window menus:
menuText F CrosstabFile "Fichier" 0
menuText F CrosstabFileText "crire dans un fichier texte..." 23
menuText F CrosstabFileHtml "crire dans un fichier HTML..." 23
menuText F CrosstabFileLaTeX "crire dans un fichier LaTeX..." 23
menuText F CrosstabFileClose "Fermer fentre tableau" 0
menuText F CrosstabEdit "diter" 0
menuText F CrosstabEditEvent "vnement" 0
menuText F CrosstabEditSite "Lieux" 0
menuText F CrosstabEditDate "Date" 0
menuText F CrosstabOpt "Affichage" 0
menuText F CrosstabOptAll "Toutes rondes" 0
menuText F CrosstabOptSwiss "Suisse" 0
menuText F CrosstabOptKnockout "KO" 0
menuText F CrosstabOptAuto "Auto" 0
menuText F CrosstabOptAges "Ages en annes" 8
menuText F CrosstabOptNats "Nationalits" 0
menuText F CrosstabOptRatings "Classements" 0
menuText F CrosstabOptTitles "Titres" 0
menuText F CrosstabOptBreaks "Scores du dpartage" 4
menuText F CrosstabOptDeleted "Inclure les parties effaces" 8
menuText F CrosstabOptColors "Couleurs (systme suisse uniquement)" 1
menuText F CrosstabOptColumnNumbers "Colonnes numrotes (Toutes rondes seulement)" 2
menuText F CrosstabOptGroup "Scores du groupe" 0
menuText F CrosstabSort "Trier" 0
menuText F CrosstabSortName "Nom" 0
menuText F CrosstabSortRating "Elo" 0
menuText F CrosstabSortScore "Score" 0
menuText F CrosstabColor "Couleur" 0
menuText F CrosstabColorPlain "Texte normal" 0
menuText F CrosstabColorHyper "Hypertexte" 0
menuText F CrosstabHelp "Aide" 0
menuText F CrosstabHelpCross "Aide tableau" 0
menuText F CrosstabHelpIndex "Index" 0
translate F SetFilter {Activer le filtre}
translate F AddToFilter {Ajouter au filtre}
translate F Swiss {Suisse}
translate F Category {Catgorie}

# Opening report window menus:
menuText F OprepFile "Fichier" 0
menuText F OprepFileText "crire dans un fichier texte..." 23
menuText F OprepFileHtml "crire dans un fichier HTML..." 23
menuText F OprepFileLaTeX "crire dans un fichier LaTeX..." 23
menuText F OprepFileOptions "Options..." 0
menuText F OprepFileClose "Fermer la fentre du rapport" 0
menuText F OprepFavorites "Favoris" 1
menuText F OprepFavoritesAdd "Ajouter au rapport..." 0
menuText F OprepFavoritesEdit "Editer les favoris de rapport..." 0
menuText F OprepFavoritesGenerate "Gnrer les rapports..." 0

menuText F OprepHelp "Aide" 0
menuText F OprepHelpReport "Aide du rapport" 0
menuText F OprepHelpIndex "Index" 0

# Repertoire editor:
menuText F RepFile "Fichier" 0
menuText F RepFileNew "Nouvelle" 0
menuText F RepFileOpen "Ouvrir..." 0
menuText F RepFileSave "Sauver..." 0
menuText F RepFileSaveAs "Sauver sous..." 5
menuText F RepFileClose "Fermer" 0
menuText F RepEdit "diter" 0
menuText F RepEditGroup "Ajouter Groupe" 4
menuText F RepEditInclude "Ajouter Inclure ligne" 4
menuText F RepEditExclude "Ajouter Exclure ligne" 4
menuText F RepView "Voir" 0
menuText F RepViewExpand "tends tous les groupes" 0
menuText F RepViewCollapse "Fermer tous les groupes" 0
menuText F RepSearch "Rechercher" 0
menuText F RepSearchAll "Tout le rpertoire..." 0
menuText F RepSearchDisplayed "Afficher seulement les lignes..." 0
menuText F RepHelp "Aide" 0
menuText F RepHelpRep "Aide sur le rpertoire" 0
menuText F RepHelpIndex "Index" 0
translate F RepSearch "Rechercher dans le rpertoire"
translate F RepIncludedLines "lignes inclues"
translate F RepExcludedLines "lignes exclues"
translate F RepCloseDialog {Ce rpertoire a des modifications non enregistres.

Voulez vous rellement continuer et ne pas tenir compte des changements que vous avez effectu?
}

# Header search:
translate F HeaderSearch {Rechercher Entte}
translate F EndSideToMove {Ct devant jouer  la fin de la partie}
translate F GamesWithNoECO {Partie sans code ECO?}
translate F GameLength {Longueur de la partie}
translate F FindGamesWith {Chercher les parties avec}
translate F StdStart {Pos. dpart non standard}
translate F Promotions {Promotions}
translate F Comments {Commentaires}
translate F Variations {Variantes}
translate F Annotations {Annotations}
translate F DeleteFlag {Marques supprimes}
translate F WhiteOpFlag {Ouverture des blancs}
translate F BlackOpFlag {Ouverture des noirs}
translate F MiddlegameFlag {Milieu de partie}
translate F EndgameFlag {Finale}
translate F NoveltyFlag {Nouveaut}
translate F PawnFlag {Structure de pions}
translate F TacticsFlag {Tactiques}
translate F QsideFlag {Jeu  l'aile dame}
translate F KsideFlag {Jeu  l'aile roi}
translate F BrilliancyFlag {Spectaculaire}
translate F BlunderFlag {Gaffe}
translate F UserFlag {Utilisateur}
translate F PgnContains {PGN contenant du texte}
# ====== TODO To be translated ======
translate F Annotator {Annotator}
# ====== TODO To be translated ======
translate F Cmnts {Annotated games only}

# Game list window:
translate F GlistNumber {Numro}
translate F GlistWhite {Blancs}
translate F GlistBlack {Noirs}
translate F GlistWElo {B-Elo}
translate F GlistBElo {N-Elo}
translate F GlistEvent {vnement}
translate F GlistSite {Lieux}
translate F GlistRound {Ronde}
translate F GlistDate {Date}
translate F GlistYear {Anne}
translate F GlistEDate {vnement-Date}
translate F GlistResult {Rsultat}
translate F GlistLength {Longueur}
translate F GlistCountry {Pays}
translate F GlistECO {ECO}
translate F GlistOpening {Ouverture}
translate F GlistEndMaterial {Matriel final}
translate F GlistDeleted {Effac}
translate F GlistFlags {Drapeaux}
translate F GlistVars {Variantes}
translate F GlistComments {Commentaires}
translate F GlistAnnos {Annotations}
translate F GlistStart {Dpart}
translate F GlistGameNumber {Partie numro}
# ====== TODO To be translated ======
translate F GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate F GlistRating {Rating}
translate F GlistFindText {Rechercher texte}
translate F GlistMoveField {Coup}
translate F GlistEditField {Configurer}
translate F GlistAddField {Ajouter}
translate F GlistDeleteField {Enlever}
translate F GlistWidth {Largeur}
translate F GlistAlign {Aligner}
# ====== TODO To be translated ======
translate F GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate F GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate F GlistAlignC {Align: center}
translate F GlistColor {Couleur}
translate F GlistSep {Sparateur}
# ====== TODO To be translated ======
translate F GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate F GlistNewSort {New}
# ====== TODO To be translated ======
translate F GlistAddToSort {Add}
# ====== TODO To be translated ======
translate F GsortSort {Sort...}
# ====== TODO To be translated ======
translate F GsortDate {Date}
# ====== TODO To be translated ======
translate F GsortYear {Year}
# ====== TODO To be translated ======
translate F GsortEvent {Event}
# ====== TODO To be translated ======
translate F GsortSite {Site}
# ====== TODO To be translated ======
translate F GsortRound {Round}
# ====== TODO To be translated ======
translate F GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate F GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate F GsortECO {ECO}
# ====== TODO To be translated ======
translate F GsortResult {Result}
# ====== TODO To be translated ======
translate F GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate F GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate F GsortCountry {Country}
# ====== TODO To be translated ======
translate F GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate F GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate F GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate F GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate F GsortComments {Comments}
# ====== TODO To be translated ======
translate F GsortVariations {Variations}
# ====== TODO To be translated ======
translate F GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate F GsortAscending {Ascending}
# ====== TODO To be translated ======
translate F GsortDescending {Descending}
# ====== TODO To be translated ======
translate F GsortAdd {Add}
# ====== TODO To be translated ======
translate F GsortStore {Store}
# ====== TODO To be translated ======
translate F GsortLoad {Load}

# menu shown with right mouse button down on game list.
translate F GlistRemoveThisGameFromFilter  {Enlever cette partie du filtre}
translate F GlistRemoveGameAndAboveFromFilter  {Enlever cette partie (et celles au-dessus) du filtre}
translate F GlistRemoveGameAndBelowFromFilter  {Enlever cette partie (et celles en-dessous) du filtre}
translate F GlistDeleteGame {(Ds-)effacer cette partie} 
translate F GlistDeleteAllGames {Effacer toutes les parties du filtre} 
translate F GlistUndeleteAllGames {Ds-effacer toutes les parties du filtre} 
translate F GlistMergeGameInBase {Fusionner la partie dans une autre base} 

# Maintenance window:
translate F DatabaseName {Nom de base:}
translate F TypeIcon {Type icne:}
translate F NumOfGames {Parties:}
translate F NumDeletedGames {Parties supprimes:}
translate F NumFilterGames {Parties dans le filtre:}
translate F YearRange {Annes:}
translate F RatingRange {Classements:}
translate F Description {Description}
translate F Flag {Drapeau}
# ====== TODO To be translated ======
translate F CustomFlags {Custom flags}
translate F DeleteCurrent {Effacer la partie courante}
translate F DeleteFilter {Effacer le filtre de parties}
translate F DeleteAll {Effacer toutes les parties}
translate F UndeleteCurrent {Rcuprer la partie en cours}
translate F UndeleteFilter {Rcuprer les parties filtres}
translate F UndeleteAll {Rcuprer toutes les parties}
translate F DeleteTwins {Effacer les parties en doublon}
translate F MarkCurrent {Slectionner la partie en cours}
translate F MarkFilter {Slectionner les parties filtres}
translate F MarkAll {Slectionner toutes les parties}
translate F UnmarkCurrent {Dslectionner la partie en cours}
translate F UnmarkFilter {Dslectionner les parties filtres}
translate F UnmarkAll {Dslectionner toutes les parties}
translate F Spellchecking {Vrification orthographique}
translate F Players {Joueurs}
translate F Events {vnements}
translate F Sites {Lieux}
translate F Rounds {Rondes}
translate F DatabaseOps {Oprations sur la base}
translate F ReclassifyGames {ECO-Classifier les parties...}
translate F CompactDatabase {Compacter la base}
translate F SortDatabase {Trier la base}
translate F AddEloRatings {Ajouter les classements Elo}
translate F AutoloadGame {Chargement automatique du numro de partie}
translate F StripTags {Enlever les marqueurs PGN}
translate F StripTag {Enlever les marqueurs}
translate F Cleaner {Nettoyer}
translate F CleanerHelp {
Le Nettoyeur Scid va raliser pour la base en cours toutes les actions de maintenance que vous avez slectionn  partir de la liste ci-dessous.

Les rglages en cours de la classification ECO et les dialogues d'effacement des jumeaux vont s'appliquer si vous avez slectionn ces fonctions.
}
translate F CleanerConfirm {
Une fois que le nettoyage est commenc, il ne peut tre interrompu!

Cela peut prendre beaucoup de temps sur une grande base, suivant les fonctions que vous avez slectionn et leurs rglages en cours.

Etes vous sr que vous voulez commencer les fonctions de maintenance que vous avez slectionn?
}

translate F TwinCheckUndelete {pour permuter; "u" pour annuler l'effacement des deux}
translate F TwinCheckprevPair {Paire prcdente}
translate F TwinChecknextPair {Paire suivante}
translate F TwinChecker {Scid: vrificateur de doublon}
translate F TwinCheckTournament {Parties dans le tournoi:}
translate F TwinCheckNoTwin {Pas de doublon  }
translate F TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
translate F TwinCheckTag {Partager tags...}
translate F TwinCheckFound1 {Scid a trouv $result doublons}
translate F TwinCheckFound2 { et positionn le marquer de suppression}
translate F TwinCheckNoDelete {Il n'y a pas de parties dans cette base  effacer.}
translate F TwinCriteria1 { Les paramtres pour trouver des doublons risquent de\nfaire que des parties diffrentes avec des coups similaires soient marques comme des doublons.}
translate F TwinCriteria2 {Il est recommand de slectionner "Non" pour "mmes coups", vous devriez slectionner "Oui" pour les couleurs, vnement, site, ronde, anne et mois.\nVoulez-vous continuer et effacer les doublons quand mme ? }
translate F TwinCriteria3 {Il est recommand de slectionner "Oui" pour au moins deux des paramtres "mme site", "mme ronde" et "mme anne".\nVoulez-vous continuer et effacer les doublons quand mme ?}
translate F TwinCriteriaConfirm {Scid: Confirmer les paramtres de doublons}
translate F TwinChangeTag "Changer les tags de partie suivants:\n\n"
translate F AllocRatingDescription "Cette commande va utiliser les fichiers de vrification de noms et de classement ELO pour les parties de cette base. Chaque fois qu'un joueur n'a pas de classement mais que son classement est list dans le fichier de vrification de noms  la date de la partie, ce classement est pris en compte."
translate F RatingOverride "Remplacer le classement non nul existant ?"
translate F AddRatings "ajouter classement :"
translate F AddedRatings {Scid a ajout $r classements Elo dans $g parties.}
translate F NewSubmenu "Nouveau sous-menu"

# Comment editor:
translate F AnnotationSymbols {Symboles d'annotation:}
translate F Comment {Commentaire:}
translate F InsertMark {Insre une marque}
translate F InsertMarkHelp {
Insrer/enlever marque: Slectionner la couleur, le type et la case.
Insrer/enlever flche: Clic droit sur deux cases.
}

# Nag buttons in comment editor:
translate F GoodMove {Bon coup}
translate F PoorMove {Coup faible}
translate F ExcellentMove {Excellent coup}
translate F Blunder {Gaffe}
translate F InterestingMove {Coup intressant}
translate F DubiousMove {coup douteux}
translate F WhiteDecisiveAdvantage {Les blancs ont un avantage dcisif}
translate F BlackDecisiveAdvantage {Les noirs ont un avantage dcisif}
translate F WhiteClearAdvantage {Les blancs ont l'avantage}
translate F BlackClearAdvantage {Les noirs ont l'avantage}
translate F WhiteSlightAdvantage {Les blancs ont un lger avantage}
translate F BlackSlightAdvantage {Les noirs ont un lger avantage}
translate F Equality {Egalit}
translate F Unclear {Peu clair}
translate F Diagram {Diagramme}

# Board search:
translate F BoardSearch {Rechercher Position}
translate F FilterOperation {Opration sur le filtre en cours:}
translate F FilterAnd {ET (Restreint le filtre)}
translate F FilterOr {OU (Ajouter au filtre)}
translate F FilterIgnore {IGNORER (Restaure le filtre initial)}
translate F SearchType {Type de recherche:}
translate F SearchBoardExact {Position exacte (mmes pices sur les mmes cases)}
translate F SearchBoardPawns {Pions (mme matriel, tous les pions sur les mmes cases)}
translate F SearchBoardFiles {Colonnes (mme matriel, tous les pions sur mmes colonnes)}
translate F SearchBoardAny {Tous (mme matriel, pions et pices n'importe o)}
translate F SearchInRefDatabase { Dans la base de rfrence }
translate F LookInVars {Chercher dans les variantes}

# Material search:
translate F MaterialSearch {Rechercher Motifs}
translate F Material {Matriel}
translate F Patterns {Motifs}
translate F Zero {Zro}
translate F Any {Tout}
translate F CurrentBoard {Position en cours}
translate F CommonEndings {Finales}
translate F CommonPatterns {Motifs}
translate F MaterialDiff {Diffrence en matriel}
translate F squares {cases}
translate F SameColor {Mmes couleur}
translate F OppColor {Couleurs opposes}
translate F Either {Les deux}
translate F MoveNumberRange {Dplacer de X coups}
translate F MatchForAtLeast {Correspond  la dernire}
translate F HalfMoves {demi-coups}

# Common endings in material search:
translate F EndingPawns {Finales de pions}
translate F EndingRookVsPawns {Tour contre pion(s)}
translate F EndingRookPawnVsRook {Tour et 1 pion contre Tour}
translate F EndingRookPawnsVsRook {Tour et pion(s) contre Tour}
translate F EndingRooks {Finales Tour contre Tour}
translate F EndingRooksPassedA {Finales de Tour contre Tour avec un pion a pass}
translate F EndingRooksDouble {Finales 2 tours}
translate F EndingBishops {Finales Fou contre Fou}
translate F EndingBishopVsKnight {Finales Fou contre Cavalier}
translate F EndingKnights {Finales Cavalier contre Cavalier}
translate F EndingQueens {Finales Dame contre Dame}
translate F EndingQueenPawnVsQueen {Dame et 1 pion contre Dame}
translate F BishopPairVsKnightPair {Milieu de jeu 2 Fous contre 2 Cavaliers}

# Common patterns in material search:
translate F PatternWhiteIQP {White IQP} ;# ***
translate F PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6} ;# ***
translate F PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6} ;# ***
translate F PatternBlackIQP {Black IQP} ;# ***
translate F PatternWhiteBlackIQP {White IQP vs. Black IQP} ;# ***
translate F PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple} ;# ***
translate F PatternHangingC5D5 {Black Hanging Pawns on c5 and d5} ;# ***
translate F PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)} ;# ***
translate F PatternRookSacC3 {Rook Sacrifice on c3} ;# ***
translate F PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;# ***
translate F PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;# ***
translate F PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)} ;# ***
translate F PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)} ;# ***
translate F PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)} ;# ***

# Game saving:
translate F Today {Aujourd'hui}
translate F ClassifyGame {Classer la partie}

# Setup position:
translate F EmptyBoard {Vider l'chiquier}
translate F InitialBoard {R-initialiser l'chiquier}
translate F SideToMove {Cot qui a le trait}
translate F MoveNumber {Coup numro}
translate F Castling {Roque}
translate F EnPassantFile {Prise en passant}
translate F ClearFen {Effacer FEN}
translate F PasteFen {Coller FEN}
translate F SaveAndContinue {Enregistrer et continuer}
translate F DiscardChangesAndContinue {Ignorer changements\net continuer}
translate F GoBack {Revenir}

# Replace move dialog:
translate F ReplaceMove {Remplacer le coup}
translate F AddNewVar {Ajouter variante}
translate F NewMainLine {Ligne principale}
translate F ReplaceMoveMessage {Un coup existe dj.

Vous pouvez le remplacer, ou bien dtruire tous les coups aprs ce coup ou ajouter une nouvelle variante.

(Vous pouvez demander  ne plus voir ce message  l'avenir, en dslectionnant l'option "Demander avant de remplacer le coup" dans le menu des options)}

# Make database read-only dialog:
translate F ReadOnlyDialog {Si vous mettez cette base en lecture seule, aucun changement ne sera permis.
Aucune partie ne peut tre sauve ou remplace, et aucun drapeau d'effacement ne peut tre altr.
Tout les tris ou les rsultats de classification ECO seront temporaires.

Vous pouvez facilement rendre la base  nouveau accessible en criture, en la fermant et en l'ouvrant  nouveau.

Voulez vous vraiment passer cette base en lecture seule?}

# Clear game dialog:
translate F ClearGameDialog {Cette partie a t modifie.

Voulez vous vraiment continuer et ignorer les changements effectus?
}

# Exit dialog:
translate F ExitDialog {Voulez vous rellement quitter Scid?}
translate F ExitUnsaved {Les bases de donnes suivantes ont des parties modifies non sauvegardes. Si vous quittez maintenant, ces modifications seront perdues.}

# Import window:
translate F PasteCurrentGame {Coller la partie courante}
translate F ImportHelp1 {Entrer ou coller une partie au format PGN dans le cadre ci-dessus.}
translate F ImportHelp2 {Toutes les erreurs durant l'import de la partie seront affiches ici.}
translate F OverwriteExistingMoves {Effacer les coups existants ?}

# ECO Browser:
translate F ECOAllSections {toutes les sections ECO}
translate F ECOSection {section ECO}
translate F ECOSummary {Rsum pour}
translate F ECOFrequency {Frquence des sous-codes pour}

# Opening Report:
translate F OprepTitle {Rapport sur l'ouverture}
translate F OprepReport {Rapport}
translate F OprepGenerated {Gnr par}
translate F OprepStatsHist {Statistiques et Historique}
translate F OprepStats {Statistiques}
translate F OprepStatAll {Toutes les parties du rapport}
translate F OprepStatBoth {Les deux joueurs classs}
translate F OprepStatSince {Depuis}
translate F OprepOldest {Les parties les plus anciennes}
translate F OprepNewest {Les parties les plus rcentes}
translate F OprepPopular {Popularit courante}
translate F OprepFreqAll {Frquence pour toutes les annes: }
translate F OprepFreq1   {Depuis 1 an jusqu' ce jour:      }
translate F OprepFreq5   {Depuis 5 ans jusqu' ce jour:     }
translate F OprepFreq10  {Depuis 10 ans jusqu' ce jour:    }
translate F OprepEvery {une fois toutes les %u parties}
translate F OprepUp {%u%s rencontr pour l'ensemble des annes}
translate F OprepDown {%u%s non rencontr l'ensemble des annes}
translate F OprepSame {sans changement par rapport  l'ensemble des annes}
translate F OprepMostFrequent {Joueurs les plus frquents}
translate F OprepMostFrequentOpponents {Adversaires les plus frquents}
translate F OprepRatingsPerf {Classements et performance}
translate F OprepAvgPerf {Classements moyens et performance}
translate F OprepWRating {Classement des blancs}
translate F OprepBRating {Classement des noirs}
translate F OprepWPerf {Performance des blancs}
translate F OprepBPerf {Performance des noirs}
translate F OprepHighRating {Parties avec le classement moyen le plus lev}
translate F OprepTrends {Tendances de rsultat}
translate F OprepResults {Rsultats longueurs et frquences}
translate F OprepLength {Longueur de partie}
translate F OprepFrequency {Frquence}
translate F OprepWWins {Gains blancs: }
translate F OprepBWins {Gains noirs:  }
translate F OprepDraws {Nulles:       }
translate F OprepWholeDB {base complte}
translate F OprepShortest {Gains les plus rapides}
translate F OprepMovesThemes {Coups et Thmes}
translate F OprepMoveOrders {Ordres de coups atteignant la position du rapport}
translate F OprepMoveOrdersOne \
  {Il n'y a qu'un seul ordre de coups pour atteindre cette position:}
translate F OprepMoveOrdersAll \
  {Il y a %u ordres de coups pour atteindre cette position:}
translate F OprepMoveOrdersMany \
  {Il y a %u ordres de coups pour atteindre cette position. Les %u premiers sont:}
translate F OprepMovesFrom {Coups depuis la position du rapport}
translate F OprepMostFrequentEcoCodes {Codes ECO les plus frquents}
translate F OprepThemes {Thmes positionnels}
translate F OprepThemeDescription {Frquence des thmes dans les premiers %u coups de chaque partie}
translate F OprepThemeSameCastling {Roques du mme ct}
translate F OprepThemeOppCastling {Roques du ct oppos}
translate F OprepThemeNoCastling {Aucun roque}
translate F OprepThemeKPawnStorm {Avalanche de pions  l'aile roi}
translate F OprepThemeQueenswap {Dames changes}
translate F OprepThemeWIQP {Pion Dame blanc isol}
translate F OprepThemeBIQP {Pion Dame noir isol}
translate F OprepThemeWP567 {Pion blanc sur la 5/6/7e range}
translate F OprepThemeBP234 {Pion noir sur la 2/3/4e range}
translate F OprepThemeOpenCDE {Colonne c/d/e ouverte}
translate F OprepTheme1BishopPair {Paire de fous}
translate F OprepEndgames {Finales}
translate F OprepReportGames {Les parties du rapport}
translate F OprepAllGames {Toutes les parties}
translate F OprepEndClass {Classification du matriel des positions finales}
translate F OprepTheoryTable {Table de Thorie}
translate F OprepTableComment {Gnr  partir des %u parties au classement le plus lev.}
translate F OprepExtraMoves {Nombre de coups additionnels dans la table de thorie}
translate F OprepMaxGames {Nombre maximum de parties dans la table de thorie}
translate F OprepViewHTML {Voir en HTML}
translate F OprepViewLaTeX {Voir en LaTeX}

# Player Report:
translate F PReportTitle {Rapport du joueur}
translate F PReportColorWhite {avec les Blancs pices}
translate F PReportColorBlack {avec les Noirs pices}
translate F PReportMoves {aprs %s}
translate F PReportOpenings {Ouvertures}
translate F PReportClipbase {Vider le presse-papier et copier dedans toutes les parties qui correspondent}

# Piece Tracker window:
translate F TrackerSelectSingle {Le bouton gauche de la souris slectionne cette pice.}
translate F TrackerSelectPair {Le bouton gauche de la souris slectionne cette pice; le bouton droit slectionne aussi son pendant.}
translate F TrackerSelectPawn {Le bouton gauche de la souris slectionne ce pion ; le bouton droit slectionne les 8 pions.}
translate F TrackerStat {Statistiques}
translate F TrackerGames {% parties avec dplacement sur la case}
translate F TrackerTime {% fois sur chaque case}
translate F TrackerMoves {Coups}
translate F TrackerMovesStart {Entrer le numro du coups  partir duquel la recherche doit commencer.}
translate F TrackerMovesStop {Entrer le numro du coups auquel la recherche doit s'arrter.}

# Game selection dialogs:
translate F SelectAllGames {Toutes les parties de la base}
translate F SelectFilterGames {Seulement les parties du filtre}
translate F SelectTournamentGames {Seulement les parties du tournoi courant}
translate F SelectOlderGames {Seulement les parties plus anciennes}

# Delete Twins window:
translate F TwinsNote {Pour tre considres comme doublons, deux parties doivent au moins avoir les deux mmes joueurs, et avoir les critres que vous pouvez fixer ci-dessous satisfaits. Quand une paire de doublons est trouve, la partie la plus courte est efface. Conseil: il est prfrable de vrifier l'orthographe dans la base avant d'effacer les doublons, car cela amliore la dtection des doublons. }
translate F TwinsCriteria {Critre: Les doublons doivent avoir...}
translate F TwinsWhich {Parties  examiner}
translate F TwinsColors {Mme couleurs de joueurs?}
translate F TwinsEvent {Mme vnement?}
translate F TwinsSite {Mme lieu?}
translate F TwinsRound {Mme ronde?}
translate F TwinsYear {Mme anne?}
translate F TwinsMonth {Mme mois?}
translate F TwinsDay {Mme jour?}
translate F TwinsResult {Mme rsultat?}
translate F TwinsECO {Mme code ECO?}
translate F TwinsMoves {Mmes coups?}
translate F TwinsPlayers {Comparaison des noms des joueurs:}
translate F TwinsPlayersExact {Correspondance exacte}
translate F TwinsPlayersPrefix {Les 4 premires lettres seules}
translate F TwinsWhen {En effacant les doublons}
translate F TwinsSkipShort {Ignorer toutes les parties de moins de cinq coups?}
translate F TwinsUndelete {Rcuprer toutes les parties d'abord?}
translate F TwinsSetFilter {Appliquer le filtre  tous les doublons limins?}
translate F TwinsComments {Toujours garder les parties qui comportent des commentaires?}
translate F TwinsVars {Toujours garder les parties qui comportent des variantes?}
translate F TwinsDeleteWhich {Partie  effacer:}
translate F TwinsDeleteShorter {La partie la plus courte}
translate F TwinsDeleteOlder {La partie avec le plus petit numro}
translate F TwinsDeleteNewer {La partie avec le plus grand numro}
translate F TwinsDelete {Effacer les parties}

# Name editor window:
translate F NameEditType {Taper le nom  diter}
translate F NameEditSelect {Parties  diter}
translate F NameEditReplace {Remplacer}
translate F NameEditWith {avec}
translate F NameEditMatches {Correspondances: Presser Alt+1  Alt+9 pour slectionner}
# ====== TODO To be translated ======
translate F CheckGames {Check games}
# ====== TODO To be translated ======
translate F CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate F CheckAll {All games}
# ====== TODO To be translated ======
translate F CheckSelectFilterGames {Only games in filter}

# Classify window:
translate F Classify {Classer}
translate F ClassifyWhich {Choix des parties  classer suivant ECO}
translate F ClassifyAll {Toutes les parties (crase les anciens codes ECO)}
translate F ClassifyYear {Toutes les parties joues la dernire anne}
translate F ClassifyMonth {Toutes les parties joues le dernier mois}
translate F ClassifyNew {Seulement les parties qui ne possdent pas encore de code ECO}
translate F ClassifyCodes {Codes ECO  utiliser}
translate F ClassifyBasic {Codes de base seulement ("B12", ...)}
translate F ClassifyExtended {Extensions de Scid ("B12j", ...)}

# Compaction:
translate F NameFile {Fichier de noms}
translate F GameFile {Fichier de parties}
translate F Names {Noms}
translate F Unused {Non utilis}
translate F SizeKb {Taille (kb)}
translate F CurrentState {tat courant}
translate F AfterCompaction {Aprs compactage}
translate F CompactNames {Compacter le fichier de noms}
translate F CompactGames {Compacter le fichier de parties}
translate F NoUnusedNames "Il n'y a pas de noms inutiliss, le fichier de noms est donc dj compact."
translate F NoUnusedGames "Le fichier des parties est dj compact."
translate F NameFileCompacted {Le fichier de noms de la base "[file tail [sc_base filename]]" a t compact.}
translate F GameFileCompacted {Le fichier de parties de la base "[file tail [sc_base filename]]" a t compact.}

# Sorting:
translate F SortCriteria {Critre}
translate F AddCriteria {Ajouter un critre}
translate F CommonSorts {Tris courants}
translate F Sort {Tri}

# Exporting:
translate F AddToExistingFile {Ajouter les parties  un fichier existant?}
translate F ExportComments {Exporter les commentaires?}
translate F ExportVariations {Exporter les variantes?}
translate F IndentComments {Indenter les commentaires?}
translate F IndentVariations {Indenter les variantes?}
translate F ExportColumnStyle {Style en colonne (un coup par ligne)?}
translate F ExportSymbolStyle {Style d'annotation symbolique:}
translate F ExportStripMarks {Enlever les codes de marquages de flches et de coloration de cases des commentaires?}

# Goto game/move dialogs:
translate F LoadGameNumber {Entrer le numro de la partie  charger:}
translate F GotoMoveNumber {Aller au coup numro:}

# Copy games dialog:
translate F CopyGames {Copier les parties}
translate F CopyConfirm {
 Voulez vous vraiment copier
 les [::utils::thousands $nGamesToCopy] parties filtres
 depuis la base "$fromName"
 vers la base "$targetName"?
}
translate F CopyErr {Ne peut copier les parties}
translate F CopyErrSource {la base source}
translate F CopyErrTarget {la base destination}
translate F CopyErrNoGames {n'a pas de parties dans son filtre}
translate F CopyErrReadOnly {est en lecture seule}
translate F CopyErrNotOpen {n'est pas ouverte}

# Colors:
translate F LightSquares {Cases blanches}
translate F DarkSquares {Cases noires}
translate F SelectedSquares {Cases slectionnes}
translate F SuggestedSquares {Cases des coups suggrs}
translate F WhitePieces {Pices blanches}
translate F BlackPieces {Pices noires}
translate F WhiteBorder {Bordure des pices blanches}
translate F BlackBorder {Bordure des pices noires}

# Novelty window:
translate F FindNovelty {Trouver la nouveaut}
translate F Novelty {Nouveaut}
translate F NoveltyInterrupt {Recherche de nouveaut interrompue}
translate F NoveltyNone {Aucune nouveaut n'a t trouve pour cette partie}
translate F NoveltyHelp {
Scid va trouver le premier coup de la partie en cours qui atteint une position qui ne figure ni dans la base slectionne ni dans le rpertoire d'ouvertures ECO.
}

# Sounds configuration:
translate F SoundsFolder {Rpertoire des fichiers sonores}
translate F SoundsFolderHelp {Le rpertoire devrait contenir les fichiers King.wav, a.wav, 1.wav, etc}
translate F SoundsAnnounceOptions {Options d'annonce des coups}
translate F SoundsAnnounceNew {Annoncer les coups jous}
translate F SoundsAnnounceForward {Annoncer les coups quand avance d'un coup}
translate F SoundsAnnounceBack {Annoncer quand retour arrire d'un coup}

# Upgrading databases:
translate F Upgrading {Mise  jour}
translate F ConfirmOpenNew {
Ceci est une base de donnes  l'ancien format (Scid 3) qui ne peut tre ouverte dans Scid 4, mais une version au nouveau format (Scid 4) a dj t cre.

Voulez vous ouvrir le nouveau format de la base de donnes?
}
translate F ConfirmUpgrade {
Ceci est une base de donnes  l'ancien format (Scid 3). Une version de la base de donnes au nouveau format doit tre cre avant de pouvoir tre utilise dans Scid 4.

Mettre  jour va crer une nouvelle version de la base de donnes; les fichiers originaux seront effacs.

Cela peut prendre un peu de temps, mais il n'est ncessaire de le faire qu'une fois. Vous pouvez abandonner si cela dure trop longtemps.

Voulez vous mettre  jour cette base de donnes maintenant?
}

# Recent files options:
translate F RecentFilesMenu {Nombre de fichiers rcents dans le menu Fichier}
translate F RecentFilesExtra {Nombre de fichiers rcents dans le sous-menu complmentaire}

# My Player Names options:
translate F MyPlayerNamesDescription {
Entrer ci-dessous une liste des noms des joueurs prfrs, un nom par ligne. Les caractres spciaux (i.e. "?" pour un seul caractre, "*" pour n'importe quelle suite de caractres) sont autoriss.

Chaque fois qu'une partie avec un joueur de la liste est charge, l'chiquier de la fentre principale sera tourn si ncessaire de faon  montrer la partie selon le point de vue du joueur.
}
#Coach
translate F showblunderexists {Montrer si erreur}
translate F showblundervalue {Montrer la valeur de l'erreur}
translate F showscore {Montrer score}
translate F coachgame {Entrainement}
translate F configurecoachgame {Configurer une partie avec entraineur}
translate F configuregame {Configuration de partie}
translate F Phalanxengine {moteur Phalanx}
translate F Coachengine {entraineur}
translate F difficulty {difficult}
translate F hard {difficile}
translate F easy {facile}
translate F Playwith {Jouer avec}
translate F white {blanc}
translate F black {noir}
translate F both {les deux}
translate F Play {Jouer}
translate F Noblunder {Pas d'erreur}
translate F blunder {erreur}
translate F Noinfo {-- Pas d'info --}
translate F PhalanxOrTogaMissing {Phalanx ou Toga non trouv}
translate F moveblunderthreshold {le coup est une erreur si les pertes sont suprieures }
translate F limitanalysis {limiter le temps d'analyse}
translate F seconds {secondes}
translate F Abort {Arrter}
translate F Resume {Reprendre}
translate F OutOfOpening {Hors de l'ouverture}
translate F NotFollowedLine {Vous n'avez pas suivi la ligne}
translate F DoYouWantContinue {Voulez-vous continuer ?}
translate F CoachIsWatching {L'entraineur regarde}
translate F Ponder {Rflexion permanente}
translate F LimitELO {Limiter force ELO}
translate F DubiousMovePlayedTakeBack {Coup douteux jou, voulez-vous reprendre le coup ?}
translate F WeakMovePlayedTakeBack {Coup faible jou, voulez-vous reprendre le coup ?}
translate F BadMovePlayedTakeBack {Mauvais coup jou, voulez-vous reprendre le coup ?}
translate F Iresign {J'abandonne}
translate F yourmoveisnotgood {Votre coup n'est pas bon}
translate F EndOfVar {Fin de variante}
translate F Openingtrainer {Entrainement aux ouvertures}
translate F DisplayCM {Afficher les coups candidats}
translate F DisplayCMValue {Afficher la valeur des coups candidats}
translate F DisplayOpeningStats {Montrer statistiques}
translate F ShowReport {Montrer rapport}
translate F NumberOfGoodMovesPlayed {bons coups jous}
translate F NumberOfDubiousMovesPlayed {coups douteux jous}
translate F NumberOfMovesPlayedNotInRepertoire {coups jous absents du rpertoire}
translate F NumberOfTimesPositionEncountered {nombre de fois position rencontre}
translate F PlayerBestMove  {N'autoriser que les meilleurs coups}
translate F OpponentBestMove {Ne jouer que les meilleurs coups}
translate F OnlyFlaggedLines {Seulement les lignes marques}
translate F resetStats {Remettre  zro les scores}
translate F Repertoiretrainingconfiguration {Configuration entrainement rpertoire}
translate F Loadingrepertoire {Chargement du rpertoire}
translate F Movesloaded {Coups lus}
translate F Repertoirenotfound {Rpertoire introuvable}
translate F Openfirstrepertoirewithtype {Ouvrez d'abord une base avec le bon type/icne sur le ct droit}
translate F Movenotinrepertoire {Coup absent du rpertoire}
translate F PositionsInRepertoire {Positions dans le rpertoire}
translate F PositionsNotPlayed {Positions non joues}
translate F PositionsPlayed {Positions joues}
translate F Success {Succs}
translate F DubiousMoves {Coups douteux}
translate F OutOfRepertoire {Hors du rpertoire}
translate F ConfigureTactics {Configurer exercices tactiques}
translate F ResetScores {Remise  zro des scores}
translate F LoadingBase {Chargement de la base}
translate F Tactics {Tactique}
translate F ShowSolution {Montrer la solution}
translate F NextExercise {Exercice suivant}
translate F PrevExercise {Exercice prcdent}
translate F StopTraining {Arrter l'entrainement}
translate F Next {Suivant}
translate F ResettingScore {Remise  zro des scores}
translate F LoadingGame {Chargement partie}
translate F MateFound {Mat trouv}
translate F BestSolutionNotFound {Meilleur coup non trouv !}
translate F MateNotFound {Mat non trouv}
translate F ShorterMateExists {Un mat plus rapide existe}
translate F ScorePlayed {score coup jou}
translate F Expected {attendu}
translate F ChooseTrainingBase {Choisir la base d'exercices}
translate F Thinking {Calcul en cours}
translate F AnalyzeDone {Analyse termine}
translate F WinWonGame {Terminer partie gagne}
translate F Lines {Lignes}
translate F ConfigureUCIengine {Configurer moteur UCI}
translate F SpecificOpening {Ouverture spcifique}
translate F StartNewGame {Nouvelle partie}
translate F FixedLevel {Niveau fixe}
translate F Opening {Ouverture}
translate F RandomLevel {Niveau alatoire}
translate F StartFromCurrentPosition {Jouer depuis la position actuelle}
translate F FixedDepth {Profondeur fixe}
translate F Nodes {Noeuds} 
translate F Depth {Profondeur}
translate F Time {Temps} 
translate F SecondsPerMove {Secondes par coup}
translate F Engine {Moteur}
translate F TimeMode {Mode de rflexion}
translate F TimeBonus {Temps + bonus}
translate F TimeMin {min}
translate F TimeSec {sec}
translate F AllExercisesDone {Tous les exercices sont faits}
translate F MoveOutOfBook {Coup hors bibliothque d'ouverture}
translate F LastBookMove {Dernier coup de la bibliothque d'ouverture}
translate F AnnotateSeveralGames {Annotater plusieurs parties\ndepuis l'actuelle jusqu' :}
translate F FindOpeningErrors {Chercher les erreurs d'ouverture}
translate F MarkTacticalExercises {Marquer exercices tactiques}
translate F UseBook {Utiliser bibliothque}
translate F MultiPV {Nombre de variantes}
translate F Hash {Mmoire}
translate F OwnBook {Utiliser bibliothque propre}
translate F BookFile {Bibliothque d'ouverture}
translate F AnnotateVariations {Annotater les variantes}
translate F ShortAnnotations {Annotations courtes}
translate F addAnnotatorTag {Ajouter Annotateur}
translate F AddScoreToShortAnnotations {Ajouter score aux annotations courtes}
translate F Export {Exporter}
translate F BookPartiallyLoaded {Bibliothque charge en partie}
translate F Calvar {Calcul de variantes}
translate F ConfigureCalvar {Configuration}
# Opening names used in tacgame.tcl
translate F Reti {Reti}
translate F English {Anglaise}
translate F d4Nf6Miscellaneous {1.d4 Cf6 divers}
translate F Trompowsky {Trompowsky}
translate F Budapest {Budapest}
translate F OldIndian {Vieille Indienne}
translate F BenkoGambit {Gambit Benko}
translate F ModernBenoni {Benoni Moderne}
translate F DutchDefence {Dfense hollandaise}
translate F Scandinavian {Scandinave}
translate F AlekhineDefence {Dfense Alekhine}
translate F Pirc {Pirc}
translate F CaroKann {Caro-Kann}
translate F CaroKannAdvance {Caro-Kann Avance}
translate F Sicilian {Sicilienne}
translate F SicilianAlapin {Sicilienne Alapin}
translate F SicilianClosed {Sicilienne ferme}
translate F SicilianRauzer {Sicilienne Rauzer}
translate F SicilianDragon {Sicilienne Dragon}
translate F SicilianScheveningen {Sicilienne Scheveningen}
translate F SicilianNajdorf {Sicilienne Najdorf}
translate F OpenGame {Partie ouverte}
translate F Vienna {Viennoise}
translate F KingsGambit {Gambit Roi}
translate F RussianGame {Petroff}
translate F ItalianTwoKnights {Italienne/Deux cavaliers}
translate F Spanish {Espagnole}
translate F SpanishExchange {Espagnole change}
translate F SpanishOpen {Espagnole ouverte}
translate F SpanishClosed {Espagnole ferme}
translate F FrenchDefence {Dfense franaise}
translate F FrenchAdvance {Dfense franaise Avance}
translate F FrenchTarrasch {Dfense franaise Tarrasch}
translate F FrenchWinawer {Dfense franaise Winawer}
translate F FrenchExchange {Dfense franaise Echange}
translate F QueensPawn {Pion Dame}
translate F Slav {Slave}
translate F QGA {GD Accept}
translate F QGD {GD Dclin}
translate F QGDExchange {GD Echange}
translate F SemiSlav {Semi-Slave}
translate F QGDwithBg5 {GD dclin avec Fg5}
translate F QGDOrthodox {GD dclin Orthodoxe}
translate F Grunfeld {Grnfeld}
translate F GrunfeldExchange {Grnfeld Echange}
translate F GrunfeldRussian {Grnfeld Russe}
translate F Catalan {Catalane}
translate F CatalanOpen {Catalane Ouverte}
translate F CatalanClosed {Catalane Ferme}
translate F QueensIndian {Ouest indienne}
translate F NimzoIndian {Nimzo-Indienne}
translate F NimzoIndianClassical {Nimzo-Indienne Classique}
translate F NimzoIndianRubinstein {Nimzo-Indienne Rubinstein}
translate F KingsIndian {Est-indienne}
translate F KingsIndianSamisch {Est-indienne Smisch}
translate F KingsIndianMainLine {Est-indienne ligne principale}
translate F ConfigureFics {Configurer FICS}
translate F FICSGuest {Login comme invit}
translate F FICSServerPort {Port du serveur}
translate F FICSServerAddress {Adresse IP}
translate F FICSRefresh {Rafrachir}
translate F FICSTimesealPort {Port Timeseal}
translate F FICSSilence {Silence}
translate F FICSOffers {Offres}
translate F FICSConsole {Console}
translate F FICSGames {Parties}
translate F FICSUnobserve {Arrter de suivre la partie}
translate F FICSProfile {Afficher mon historique et mes donnes}
translate F FICSRelayedGames {Parties retransmises}
translate F FICSFindOpponent {Trouver adversaire}
translate F FICSTakeback {Reprendre un coup}
translate F FICSTakeback2 {Rependre deux coups}
translate F FICSInitTime {Temps initial (min)}
translate F FICSIncrement {Incrment (sec)}
translate F FICSRatedGame {Partie classe}
translate F FICSAutoColour {automatique}
translate F FICSManualConfirm {accepter manuellement}
translate F FICSFilterFormula {Filtrer avec formule}
translate F FICSIssueSeek {Envoyer seek}
translate F FICSChallenge {Challenge}
translate F FICSAccept {accepter}
translate F FICSDecline {refuser}
translate F FICSColour {Couleur}
translate F FICSSend {envoyer}
translate F FICSConnect {Connecter}
translate F FICSdefaultuservars {Variables par dfaut}
translate F FICSObserveconfirm {Voulez-vous suivre la partie}
# ====== TODO To be translated ======
translate F FICSpremove {Enable premove}
translate F GameReview {Revue de partie}
translate F GameReviewTimeExtended {Temps tendu}
translate F GameReviewMargin {Marge d'erreur}
translate F GameReviewAutoContinue {Continuer quand le coup est correct}
translate F GameReviewReCalculate {Utiliser temps tendu}
translate F GameReviewAnalyzingMovePlayedDuringTheGame {Analyse du coup jou pendant la partie}
translate F GameReviewAnalyzingThePosition {Analyse de la position}
translate F GameReviewEnterYourMove {Jouez votre coup}
translate F GameReviewCheckingYourMove {Vrification de votre coup}
translate F GameReviewYourMoveWasAnalyzed {Votre coup a t analys}
translate F GameReviewYouPlayedSameMove {Vous avez jou le mme coup que dans la partie}
translate F GameReviewScoreOfYourMove {Score de votre coup}
translate F GameReviewGameMoveScore {Score du coup de la partie}
translate F GameReviewEngineScore {Score du moteur}
translate F GameReviewYouPlayedLikeTheEngine {Vous avez jou un coup aussi bon que le moteur}
translate F GameReviewNotEngineMoveButGoodMove {Pas le coup du moteur, mais un coup jouable}
translate F GameReviewMoveNotGood {Ce coup n'est pas bon, le score est}
translate F GameReviewMovesPlayedLike {Coups jous comme}
translate F GameReviewMovesPlayedEngine {coups jous comme le moteur}
translate F CCDlgConfigureWindowTitle {Configurer checs par correspondance}
translate F CCDlgCGeneraloptions {Options gnrales}
translate F CCDlgDefaultDB {Base par dfaut:}
translate F CCDlgInbox {Rception (chemin):}
translate F CCDlgOutbox {Envoi (chemin):}
translate F CCDlgXfcc {Configuration Xfcc:}
translate F CCDlgExternalProtocol {Protocole externe (p.e. Xfcc)}
translate F CCDlgFetchTool {Outil de rception:}
translate F CCDlgSendTool {Outil d'envoi:}
translate F CCDlgEmailCommunication {Communication eMail}
translate F CCDlgMailPrg {Programme de mail:}
translate F CCDlgBCCAddr {Addresse de copie:}
translate F CCDlgMailerMode {Mode:}
translate F CCDlgThunderbirdEg {p.e. Thunderbird, Mozilla Mail, Icedove...}
translate F CCDlgMailUrlEg {p.e. Evolution}
translate F CCDlgClawsEg {p.e Sylpheed Claws}
translate F CCDlgmailxEg {p.e. mailx, mutt, nail...}
translate F CCDlgAttachementPar {Attachement:}
translate F CCDlgInternalXfcc {Utiliser Xfcc interne}
translate F CCDlgConfirmXfcc {Confirmer coups}
translate F CCDlgSubjectPar {Objet:}
translate F CCDlgDeleteBoxes {Vider botes}
translate F CCDlgDeleteBoxesText {Voulez-vous rellement vider les botes entrantes et sortantes pour les checs par correspondance ? Cela ncessite une nouvelle synchronisation pour afficher le dernier tat de vos parties}
translate F CCDlgConfirmMove {Confirmer coup}
translate F CCDlgConfirmMoveText {Si vous confirmez, le coup ci-dessous et le commentaire sont envoys au serveur:}
translate F CCDlgDBGameToLong {Ligne principale incohrente}
translate F CCDlgDBGameToLongError {La ligne principale dans votre base de donnes est plus longue que la partie dans votre bote de rception. Si la bote de rception contient les parties en cours, c'est--dire juste aprs une synchronisation, certains coups ont t ajouts  tort  la ligne principale dans la base de donnes.\nDans ce cas veuillez raccourcir la ligne principale  au plus coup\n}
translate F CCDlgStartEmail {Commencer nouvelle partie par eMail}
translate F CCDlgYourName {Votre nom:}
translate F CCDlgYourMail {Votre adresse mail:}
translate F CCDlgOpponentName {Nom adversaire:}
translate F CCDlgOpponentMail {Adresse eMail adversaire:}
translate F CCDlgGameID {Identifiant Partie (unique):}
translate F CCDlgTitNoOutbox {Scid: Bote d'envoi}
translate F CCDlgTitNoInbox {Scid: Bote de rception}
translate F CCDlgTitNoGames {Scid: Pas de parties par correspondence}
translate F CCErrInboxDir {Rpertoire de la bote de rception:}
translate F CCErrOutboxDir {Rpertoire de la bote d'envoi:}
translate F CCErrDirNotUsable {n'existe pas ou inaccessible!\nVeuillez vrifier les paramtres.}
translate F CCErrNoGames {ne contient pas de parties!\nVeuillez d'abord les rcuprer.}
translate F CCDlgTitNoCCDB {Scid: pas de base par correspondance}
translate F CCErrNoCCDB {Aucune base du type 'Correspondance' n'est ouverte. Ouvrez-en une avant d'utiliser les fonctions par correspondance.}
translate F CCFetchBtn {Rcuprer les parties sur le serveur et les analyser dans la bote de rception}
translate F CCPrevBtn {Aller  la partie prcdente}
translate F CCNextBtn {Aller  la partie suivante}
translate F CCSendBtn {Envoyer coup}
translate F CCEmptyBtn {Vider les botes d'envoi et de rception}
translate F CCHelpBtn {Aide sur les icnes et indicateurs.\nPour plus d'aide appuyer sur F1!}
translate F CCDlgServerName {Nom serveur:}
translate F CCDlgLoginName  {Login:}
translate F CCDlgPassword   {Mot de passe:}
translate F CCDlgURL        {Xfcc-URL:}
translate F CCDlgRatingType {Type classement:}
translate F CCDlgDuplicateGame {Identifiant de partie non-unique}
translate F CCDlgDuplicateGameError {Cette partie existe  plusieurs exemplaires dans la base de donnes. Veuillez effacer tous les doublons et compacter votre fichier de parties (Fichier/Maintenance/Compacter base).}
translate F CCDlgSortOption {Tri:}
translate F CCDlgListOnlyOwnMove {Parties o c'est mon tour}
translate F CCOrderClassicTxt {Site, Evnement, Ronde, Rsultat, Blancs, Noirs}
translate F CCOrderMyTimeTxt {Ma pendule}
translate F CCOrderTimePerMoveTxt {Temps par coup jusqu'au prochain contrlede temps}
translate F CCOrderStartDate {Date de dpart}
translate F CCOrderOppTimeTxt {Pendule adversaire}
# ====== TODO To be translated ======
translate F CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate F CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate F ExtHWConfigConnection {Configure external hardware}
translate F ExtHWPort {Port}
translate F ExtHWEngineCmd {Commande moteur}
translate F ExtHWEngineParam {Paramtre moteur}
translate F ExtHWShowButton {Montrer bouton}
translate F ExtHWHardware {Matriel}
translate F ExtHWNovag {Novag Citrine}
translate F ExtHWInputEngine {Moteur en entre}
translate F ExtHWNoBoard {Pas d'chiquier}
translate F NovagReferee {Arbitre}
translate F IEConsole {Console du moteur en entre}
translate F IESending {Coups envoys pour}
translate F IESynchronise {Synchronizer}
translate F IERotate  {Tourner}
translate F IEUnableToStart {Impossible de dmarrer le moteur en entre:}
translate F DoneWithPosition {Position termine}
translate F Board {Echiquier}
translate F showGameInfo {Montrer le panneau d'info}
translate F autoResizeBoard {Redimensionnement automatique}
translate F DockTop {Dplacer en haut}
translate F DockBottom {Dplacer en bas}
translate F DockLeft {Dplacer  gauche}
translate F DockRight {Dplacer  droite}
translate F Undock {Dtacher}
translate F ChangeIcon {Changer icone...}

##########
#
# ECO Opening name translations:

# translateECO F {
  # Accelerated {, Acclr}
  # {: Accelerated} Acclr
  # Accepted {, accept}
  # {: Accepted} Accept
  # Advance Avance
  # {as Black} {avec les Noirs}
  # Attack Attaque
  # Bishop Fou
  # Bishop's Fou
  # Classical Classique
  # Closed Ferm
  # {Closed System} {Systme ferm}
  # Counterattack Contre-Attaque
  # Countergambit Contre-Gambit
  # Declined {, Dclin}
  # Defence Dfense
  # deferred diffr
  # Deferred {, Diffr}
  # Early Tt
  # Exchange Echange
  # Game Partie
  # Improved amlior
  # King's Roi
  # Knight Cavalier
  # Line Ligne
  # {Main Line} Ligne principale
  # Open Ouvert
  # Opening Ouverture
  # Queen's Dame
  # Queenswap Permutation de dame
  # Symmetrical Symtrique
  # Variation Variante
  # Wing Aile
  # with avec
  # without sans
  # 
  # Alekhine Alekhine
  # Averbakh Averbakh
  # Botvinnik Botvinnik
  # Chigorin Tchigorine
  # Polugaevsky Polugaevsky
  # Rauzer Rauzer
  # Sveshnikov Sveshnikov
  # 
  # Austrian Autrichien
  # Berlin Berlinois
  # Bremen Breme
  # Catalan Catalane
  # Czech Tchque
  # Dutch Hollandaise
  # English Anglaise
  # French Franaise
  # Hungarian Hongroise
  # Indian Indienne
  # Italian Italienne
  # Latvian Letton
  # Meran Meran
  # Moscow Moscou
  # Polish Polonais
  # Prague Prague
  # Russian Russe
  # Scandinavian Scandinave
  # Scheveningen Scheveningen
  # Scotch Ecossaise
  # Sicilian Sicilienne
  # Slav Slave
  # Spanish Espagnole
  # Swedish Sudois
  # Swiss Suisse
  # Vienna Viennois
  # Yugoslav Yougoslave
  # 
  # {Accelerated Fianchetto} {Fianchetto Acclr}
  # {Accelerated Pterodactyl} {Pterodactyle Acclr}
  # {Alekhine Defence} Dfense-Alekhine
  # {Alekhine Variation} Variante-Alekhine
  # {Alekhine: Smisch Attack} {Alekhine: Systme viennois (Attaque Smisch)}
  # {Anderssen Opening} Ouverture-Anderssen
  # {Anti-King's Indian} Anti-Est-Indienne
  # {Austrian Attack} {Attaque Autrichienne}
  # {Benko Gambit} {Gambit Benko}
  # {Benko Opening} {Ouverture Benk}
  # {Berlin Defence} {Dfense Berlinoise}
  # Chameleon Cameleon
  # Chelyabinsk Chelyabinsk
  # {Classical Defence} {Dfense Classique}
  # {Spanish: Classical Defence} {Espagnole: Dfense Classique}
  # {Classical Exchange} {Echange Classique}
  # {Classical Variation} {Variante Classique}
  # {Closed Berlin} {Berlinoise Ferme}
  # {Open Berlin} {Berlinoise Ouverte}
  # {Bird's,} {Bird,}
  # {Bird's Defence} {Dfense Bird}
  # {Bird's Deferred} {Bird Diffre}
  # {Bishop's Opening} {Ouverture du Fou}
  # {Botvinnik System} {Systme Botvinnik}
  # {Central Variation} {Variante du centre}
  # {Centre Attack} {Attaque du centre}
  # {Centre Game} {Ouverture du centre}
  # {Danish Gambit} {Gambit Danois}
  # Dragon Dragon
  # {Dutch Variation} {Variante Hollandaise}
  # {Early Exchange} {Echange rapide}
  # {Early Queenswap} {Echange de Dames rapide}
  # {English Attack} {Attaque Anglaise}
  # {English: King's} {Anglaise: Roi}
  # {English Variation} {Variante Anglaise}
  # {Englund Gambit} {Gambit Englund}
  # {Exchange Variation} {Variante d'change}
  # {Fianchetto Variation} {Variante du Fianchetto}
  # {Flohr Variation} {Variante Flohr}
  # {Four Knights} {Quatre Cavaliers}
  # {Four Knights Game} {Partie des Quatre Cavaliers}
  # {Four Pawns} {Quatre Pions}
  # {Four Pawns Attack} {Attaque des Quatre Pions}
  # {French Variation} {Variante Franaise}
  # {From Gambit} {Gambit From}
  # {Goring Gambit} {Gambit Gring}
  # {Grob Gambit} {Gambit Grob}
  # {Hungarian Defence} {Dfense Hongroise}
  # {Indian Variation} {Variante Indienne}
  # {Italian Game} {Partie Italienne}
  # KGD {Gambit Roi Dclin}
  # {Classical KGD} {Gambit Roi Dclin Classique}
  # {Keres Variation} {Variante Keres}
  # KGA {Gambit Roi Accept}
  # {KGA: Bishop's Gambit} {Gambit Roi Accept: Gambit du Fou}
  # {KGA: King's Knight Gambit} {Gambit Roi Accept: Gambit du Cavalier}
  # {King's Gambit} {Gambit Roi}
  # {King's Gambit Accepted} {Gambit Roi Accept}
  # {King's Gambit Accepted (KGA)} {Gambit Roi Accept}
  # {King's Indian} Est-Indienne
  # KIA {Attaque Est-Indienne}
  # {King's Knight Gambit} {Gambit du Cavalier Roi}
  # {King's Pawn} {Pion Roi}
  # {Lasker Variation} {Variante Lasker}
  # {Latvian Gambit} {Gambit Letton}
  # {Maroczy Bind} {Maroczy}
  # {Marshall Variation} {Variante Marshall}
  # {Modern Attack} {Attaque Moderne}
  # {Modern Steinitz} {Steinitz Moderne}
  # {Modern Variation} {Variante Moderne}
  # {Moscow Variation} {Variante de Moscou}
  # Nimzo-Indian Nimzo-Indienne
  # {Old Benoni} {Vieille Benoni}
  # {Old Indian} {Vieille Indienne}
  # {Old Indian Attack} {Attaque Vieille Indienne}
  # {Old Steinitz} {Vieille Steinitz}
  # {Open Game} {Partie Ouverte}
  # {Poisoned Pawn} {Pion empoisonn}
  # {Polish Variation} {Variante Polonaise}
  # {Polugaevsky Variation} {Variante Polugajewski}
  # {Queen's Gambit} {Gambit Dame}
  # {Queen's Gambit Accepted} {Gambit Dame accept}
  # QGA {GDA}
  # {Queen's Gambit Accepted (QGA)} {Gambit Dame accept (GDA)}
  # {Reversed QGA} {GDA invers}
  # QGD {Gambit Dame Dclin}
  # {Queen's Gambit Declined (QGD)} {Gambit Dame Dclin (GDD)}
  # {Reversed QGD} {GDD invers}
  # {Queen's Indian} Ouest-Indienne
  # {Queen's Pawn} {Pion Dame}
  # {Queen's Pawn Game} {Partie du Pion Dame}
  # {Reversed Slav} {Slave Inverse}
  # {Rubinstein Variation} {Variante Rubinstein}
  # {Russian Game} {Partie Russe}
  # {Russian Game (Petroff Defence)} {Partie Russe (Dfense Petrov)}
  # {Russian-Three Knights Game} {Partie Russe: Trois Cavaliers}
  # {Scandinavian (Centre Counter)} {Scandinave (Centre)}
  # Schliemann Jnisch
  # {Schliemann (Jnisch)} {Gambit Jnisch (Schliemann)}
  # {Scotch Opening} {Ouverture Ecossaise}
  # {Sicilian Defence} {Dfense Sicilienne}
  # {Sicilian Variation} {Variante Sicilienne}
  # {Slav Defence} {Dfense Slave}
  # Smith-Morra Morra
  # {Smith-Morra Accepted} {Gambit Morra Accept}
  # {Smith-Morra Gambit} {Gambit Morra}
  # {Spanish (Ruy Lopez)} {Partie Espagnole}
  # {Start position} {Position de dpart}
  # {Steinitz Deferred} {Rubinstein retarde}
  # {Swedish Variation} {Variante sudoise}
  # {Swiss Variation} {Variante Suisse}
  # {Tarrasch's Gambit} {Gambit Tarrasch}
  # {Three Knights} {Trois Cavaliers}
  # {3 Knights} {Trois Cavaliers}
  # {Three Knights Game} {Partie des Trois Cavaliers}
  # {Three Pawns Attack} {Attaque des Trois Pions}
  # {Two Knights} {Deux Cavaliers}
  # {Two Knights Defence} {Dfense des Deux Cavaliers}
  # {Two Knights Variation} {Variante des Deux Cavaliers}
  # {Two Pawns} {Deux Pions}
  # {Two Pawns Attack} {Attaque des Deux Pions}
  # {Wing Gambit} {Gambit de l'aile}
  # {Yugoslav Attack} {Attaque Yougoslave}
# }


}

# end of francais.tcl

# Κείμενο για ονόματα των μενού και των μηνυμάτων βοήθειας της γραμμής κατάστασης στα Ελληνικά.
# Τμήμα του Scid (Shane's Chess Information Database).
#
# Οδηγίες προσθήκης νέας γλώσσας:
#
# (4) Γράψτε την μετάφραση. Κάτι προϋποθέτει την αλλαγή ο,τιδήποτε "μέσα σε εισαγωγικά"
#     ή σε {μύστακες} για τις εντολές menuText, helpMsg και translate.
#
#     Μια εντολή μενού έχει την μορφή:
#         menuText L tag "Name..." underline {ΜήνυμαΒοήθειας...}
#
#     Ένα μήνυμα βοήθειας στην γραμμή κατάστασης έχει την μορφή:
#         helpMsg L tag {ΜήνυμαΒοήθειας...}
#
#     Η μετάφραση μιας γενικής λέξης ή μηνύματος έχει την μορφή:
#         translate L tag {μήνυμα...}
#
#     όπου "L" το σύμβολο για την γλώσα, "tag" το όνομα του μενού
#     ή το όνομα του κουμπιού της εφαρμογής, και "underline" είναι ο 
#     δείκτης του υπογραμμισμένου γράμματος μετρώντας από το μηδέν ως πρώτο γράμμα. Τα μενού
#     που εμφανίζονται στο ίδιο μενού πρέπει να έχουν διαφορετικό υπογραμμισμένο γράμμα.
#     Αν έχετε αμφιβιλίες, βάλτε σε όλους τους δείκτες "0" και θα τα αντιστοιχίσω με με υπογραμμισμένα
#     γράμματα όταν οι μεταφράσεις ενσωματωθούν στο Scid.
#
# Έχετε να προσθέσετε ή να διορθώσετε; Email: sgh@users.sourceforge.net
#
# Αυτή είναι μια πρώτη μετάφραση του παρόντος αρχείου. Οι συμβουλευτικές προτάσεις και
# διορθώσεις όσων χρησιμοποιούν το Scid είναι απαραίτητες, καθώς πολλά μηνύματα βοήθειας
# έχουν αποδοθεί αρκετά ελεύθερα ή, αντιθέτα, κυριολεκτικά! Είναι άμεση ανάγκη για την βελτίωση
# του Scid και της μετάφρασής του στα Ελληνικά, να επικοινωνήσετε με τον μεταφραστή του παρόντος
# κειμένου στη διεύθυνση tripalatos@gmail.com για κάθε σφάλμα ή παράλειψη!


addLanguage G Greek 0 utf-8

proc setLanguage_G {} {

# File menu:
menuText G File "Αρχείο" 0
menuText G FileNew "Νέα..." 0 {Δημιουργείστε μια νέα βάση δεδομένων Scid}
menuText G FileOpen "Άνοιγμα..." 0 {Ανοίξτε μια υπάρχουσα βάση δεδομένων Scid}
menuText G FileClose "Κλείσμο" 0 {Κλείστε την ενεργή βάση δεδομένων Scid}
menuText G FileFinder "Αναζήτηση" 0 {Ανοίγει το παράθυρο Αναζήτησης Αρχείου}
menuText G FileBookmarks "Σελιδοδείκτες" 0 {Μενού σελιδοδεικτών (συντόμευση: Ctrl+B)}
menuText G FileBookmarksAdd "Προσθήκη σελιδοδείκτου" 0 \
  {Θέστε σελιδοδείκτη στην τρέχουσα βάση δεδομένων παρτίδων και στην θέση}
menuText G FileBookmarksFile "Αρχειοθέτηση σελιδοδείκτου" 0 \
  {Αρχειοθετήστε έναν σελιδοδείκτη για την τρέχουσα παρτίδα και θέση}
menuText G FileBookmarksEdit "Επεξεργασία σελιδοδεικτών..." 0 \
  {Επεξεργαστείτε τα μενού των σελιδοδεικτών}
menuText G FileBookmarksList "Εμφάνιση των καταλόγων ως απλή λίστα" 0 \
  {Εμφάνιση των καταλόγων των σελιδοδεικτών ως απλής λίστα και όχι ως υπομενού}
menuText G FileBookmarksSub "Εμφάνιση των καταλόγων ως υπομενού" 0 \
  {Εμφάνιση των καταλόγων των σελιδοδεικτών ως υπομενού και όχι ως απλή λίστα}
menuText G FileMaint "Συντήρηση" 0 {Εργαλείο συντήρησης βάσεων δεδομένων Scid}
menuText G FileMaintWin "Παράθυρο συντήρησης" 0 \
  {Ανοίξτε/Κλείστε το παράθυρο συντήρησης βάσης δεδομένων Scid}
menuText G FileMaintCompact "Συμπίεση βάσης δεδομένων..." 0 \
  {Συμπιέστε τα αρχεία βάσης δεδομένων απομακρύνοντας διαγραμμένες παρτίδες και μη χρησιμοποιημένα ονόματα}
menuText G FileMaintClass "Παρτίδες ταξινομημένες κατά ECO..." 2 \
  {Επανυπολογισμός των κωδικών ECO για όλες τις παρτίδες}
menuText G FileMaintSort "Ταξινόμηση βάσης δεδομένων..." 0 \
  {Ταξινομήστε όλες τις παρτίδες της βάσης δεδομένων}
menuText G FileMaintDelete "Διαγραφή δίδυμων παρτίδων..." 0 \
  {Βρήτε τις δίδυμες παρτίδες και προσδιορίστε τα για διαγραφή}
menuText G FileMaintTwin "Παράθυρο ελέγχου δίδυμων παρτίδων" 0 \
  {Άνοιγμα/ενημέρωση του παραθύρου ελέγχου δίδυμων παρτίδων}
menuText G FileMaintName "Ορθογραφία ονομάτων" 0 {Εργαλείο επεξεργασίας και ορθογραφίας ονομάτων}
menuText G FileMaintNameEditor "Επεξεργαστής ονομάτων" 0 \
  {Άνοιγμα/κλείσιμο του παραθύρου επεξεργαστή ονομάτων}
menuText G FileMaintNamePlayer "Έλεγχος ορθογραφίας των ονομάτων των παικτών..." 11 \
  {Ελέγξτε την ορθογραφία των ονομάτων των παικτών με την χρήση του αρχείου ελέγχου οθρογραφίας}
menuText G FileMaintNameEvent "Έλεγχος ορθογραφίας των ονομάτων των διοργανώσεων..." 11 \
  {Ελέγξτε την ορθογραφία των ονομάτων των διοργανώσεων με τη χρήση του αρχείου ελέγχου ορθογραφίας}
menuText G FileMaintNameSite "Έλεγχος ορθογραφίας των ονομάτων των τοποθεσιών..." 11 \
  {Ελέγξτε την ορθογραφία των ονομάτων των τοποθεσιών με την χρήση του αρχείου ελέγχου ορθογραφίας}
menuText G FileMaintNameRound "Έλεγχος οθρογραφίας των ονομάτων των περιόδων..." 11 \
  {Έλεγχος των ονομάτων των περιόδων του αγώνα με την χρήση του αρχείου ελέγχου ορθογραφίας}
menuText G FileReadOnly "Μόνο για ανάγνωση (Read-only)..." 0 \
  {Επεξεργαστείτε την τρέχουσα βάση δεδομένων ως μόνον για ανάγνωση, εμποδίζοντας τις αλλαγές}
menuText G FileSwitch "Μετάβαση στην βάση δεδομένων" 0 \
  {Μεταβείτε σε μια διαφορετική ανοιγμένη βάση δεδομένων}
menuText G FileExit "Έξοδος" 1 {Έξοδος από το Scid}
menuText G FileMaintFixBase "Διόρθωση βάσης" 0 {Προσπαθείστε να επισκευάσετε μια χαλασμένη βάση}
  
# Edit menu:
menuText G Edit "Επεξεργασία" 0
menuText G EditAdd "Προσθήκη βαριάντας" 0 {Προσθέστε την βαριάντα μιας κίνησης της παρτίδας}
menuText G EditDelete "Διαγραφή βαριάντας" 0 {Διαγράψτε την βαριάντα για αυτή την κίνηση}
menuText G EditFirst "Πρώτη βαριάντα" 5 \
  {Προαγωγή μιας βαριάντας στην πρώτη θέση της λίστας}
menuText G EditMain "Προαγωγή βαριάντας σε κύρια γραμμή" 21 \
  {Προαγωγή μιας βαριάντας ως κύρια γραμμή}
menuText G EditTrial "Έλεγχος βαριάντας" 0 \
  {Έναρξη/διακοπή της λειτουργίας ελέγχου μιας ιδέας στην σκακιέρα}
menuText G EditStrip "Απομάκρυνση" 2 {Απομακρύνετε τα σχόλια ή τις βαριάντες από αυτή τη παρτίδα}
menuText G EditUndo "Επαναφορά" 0 {Επαναφέρετε την τελευταία αλλαγή στην παρτίδα}
# ====== TODO To be translated ======
menuText G EditRedo "Redo" 0 {Redo last game change}
menuText G EditStripComments "Σχόλια" 0 \
  {Απομακρύνετε όλα τα σχόλια και τον υπομνηματισμό από αυτή τη παρτίδα}
menuText G EditStripVars "Βαριάντες" 0 {Απομακρύνετε όλες τις βαριάντες από αυτή τη παρτίδα}
menuText G EditStripBegin "Κινήσεις από την έναρξη" 1 \
  {Απομακρύνετε τις κινήσεις από την έναρξη της παρτίδας}
menuText G EditStripEnd "Κινήσεις από το φινάλε" 0 \
  {Απομακρύνετε τις κινήσεις φινάλε της παρτίδας}
menuText G EditReset "Άδειασμα της προσωρινής βάσης (Clipbase)" 0 \
  {Μηδενίστε την προσωρινή βάση δεδομένων (Clipbase) ώστε να αδειάσει πλήρως}
menuText G EditCopy "Αντιγραφή της παρτίδας στην προσωρινή βάση" 0 \
  {Αντιγραφή αυτής της παρτίδας στην προσωρινή βάση δεδομένων}
menuText G EditPaste "Επικόλληση της τελευταίας παρτίδας της προσωρινής βάσης (Clipbase)" 0 \
  {Επικολλήστε εδώ την ενεργή παρτίδα της προσωρινής βάσης}
menuText G EditPastePGN "Επικόλληση του κειμένου της προσωρινής μνήμης ως παρτίδας PGN..." 18 \
  {Μετατρέψτε το κείμενο της προσωρινής μνήμης ως παρτίδας με σχολιασμό PGN και επικολλήστε την εδώ}
menuText G EditSetup "Στήσιμο αρχικής σκακιέρας..." 0 \
  {Καθορίστε την θέση έναρξης αυτής της παρτίδας}
menuText G EditCopyBoard "Αντιγραφή θέσης" 6 \
  {Αντιγράψτε την τρέχουσα σκακιέρα στην προσωρινή μνήμη με σχολιασμό FEN}
menuText G EditPasteBoard "Επικόλληση σκακιέρας έναρξης" 12 \
  {Καθορίστε την σκακιέρα από την προσωρινή μνήμη}

# Game menu:
menuText G Game "Παρτίδα" 0
menuText G GameNew "Νέα παρτίδα" 0 \
  {Επαναφορά σε κενή παρτίδα, αναιρώντας κάθε αλλαγή}
menuText G GameFirst "Φόρτωση πρώτης παρτίδας" 5 {Φορτώστε την πρώτη φιλτραρισμένη παρτίδα}
menuText G GamePrev "Φόρτωση προηγούμενης παρτίδας" 5 {Φορτώστε την προηγούμενη φιλτραρισμένη παρτίδα}
menuText G GameReload "Επαναφόρτωση τρέχουσας παρτίδας" 3 \
  {Επαναφορτώστε την παρτίδα αυτή, αναιρώντας κάθε αλλαγή}
menuText G GameNext "Φόρτωση επόμενης παρτίδας" 7 {Φορτώστε την επόμενη φιλτραρισμένη παρτίδα}
menuText G GameLast "Φόρτωση τελευταίας παρτίδας" 8 {Φορτώστε την τελευταία φιλτραρισμένη παρτίδα}
menuText G GameRandom "Φόρτωση τυχαίας παρτίδας" 8 {Φορτώστε μια παρτίδα τυχαίου φιλτραρίσματος}
menuText G GameNumber "Φόρτωση αριθμού παρτίδας..." 5 \
  {Φορτώστε μια παρτίδα εισάγοντας τον αριθμό της}
menuText G GameReplace "Αποθήκευση: Αντικατάσταση παρτίδας..." 6 \
  {Αποθηκεύστε αυτή τη παρτίδα αντικαθιστώντας την παλαιότερη εκδοχή της}
menuText G GameAdd "Αποθήκευση: Προσθήκη νέας παρτίδας..." 6 \
  {Αποθηκεύστε αυτή τη παρτίδα ως νέα παρτίδα στην βάση δεδομένων}
menuText G GameDeepest "Αναγνώριση ανοίγματος" 0 \
  {Μετάβαση στην πιο προχωρημένη θέση της παρτίδας που αναφέρεται στην ECO}
menuText G GameGotoMove "Μετάβαση στην κίνηση με αριθμό..." 5 \
  {Μετάβαση στην κίνηση με συγκεκριμένο αριθμό στην τρέχουσα παρτίδα}
menuText G GameNovelty "Αναζήτηση νεοτερισμού..." 7 \
  {Βρείτε την πρώτη κίνηση αυτής της παρτίδας που δεν έχει παιχθεί ποτέ}

# Search Menu:
menuText G Search "Αναζήτηση" 0
menuText G SearchReset "Μηδενισμός φίλτρων" 0 {Μηδενίστε τα φίλτρα ώστε να συμπεριληφθούν όλες οι παρτίδες}
menuText G SearchNegate "Αναίρεση φίλτρου" 0 {Αναιρέστε το φίλτρο ώστε να συμπεριληφθούν μόνο εξαιρεταίες παρτίδες}
menuText G SearchCurrent "Τρέχουσα σκακιέρα..." 0 {Αναζητήστε την τρέχουσα θέση της σκακιέρας}
menuText G SearchHeader "Κεφαλίδα..." 0 {Αναζήτηση βάσει των πληροφοριών κεφαλίδας (παίκτης, διοργάωνση, κλπ)}
menuText G SearchMaterial "Υλικό/Διάταξη..." 0 {Αναζήτηση για υλικό ή διάταξη σκακιέρας}
menuText G SearchUsing "Με χρήση αρχείου αναζήτησης..." 0 {Αναζήτηση με την χρήση ενός αρχείου SearchOptions}

# Windows menu:
menuText G Windows "Παράθυρα" 0
menuText G WindowsComment "Συντάκτης σχολίων" 0 {Ανοίξτε/κλείστε τον συντάκτη σχολίων}
menuText G WindowsGList "Λίστα παρτίδων" 0 {Ανοίξτε/κλείστε το παράθυρο με την λίστα των παρτίδων}
menuText G WindowsPGN "Παράθυρο PGN" 0 \
  {Ανοίξτε/κλείστε το παράθυρο PGN (σχολιασμός παρτίδας)}
menuText G WindowsPList "Αναζήτηση παίκτου" 2 {Ανοίξτε/κλείστε την εύρεση παίκτου}
menuText G WindowsTmt "Αναζήτηση προκριματικών" 2 {Άνοιγμα/κλείσιμο της αναζήτησης τουρνουά}
menuText G WindowsSwitcher "Εναλλαγή βάσης δεδομένωνDatabase switcher" 0 \
  {Άνοιγμα/κλείσιμο του παραθύρου εναλλαγής βάσης δεδομένων}
menuText G WindowsMaint "Παράθυρο συντήρησης" 0 \
  {Άνοιγμα/κλείσιμο του παραθύρου συντήρησης}
menuText G WindowsECO "Φυλλομετρητής ECO" 0 {Άνοιγμα/κλείσιμο του παραθύρου του φυλλομετρητή ECO}
menuText G WindowsRepertoire "Συντάκτης ρεπερτορίου" 0 \
  {Άνοιγμα κλείσιμο του συντάκτη ρεπερτορίου}
menuText G WindowsStats "Παράθυρο στατιστικών" 0 \
  {Άνοιγμα/κλείσιμο του παραθύρου φιλτραρίσματος στατιστικών}
menuText G WindowsTree "Παράθυρο δένδρου" 0 {Άνοιγμα/κλείσιμο του παραθύρου δένδρου}
menuText G WindowsTB "Παράθυρο βάσης δεδομένων φινάλε" 1 {Άνοιγμα/κλείσιμο του παραθύρου βάσης δεδομένων φινάλε}
menuText G WindowsBook "Παράθυρο βιβλίου" 0 {Άνοιγμα/κλείσιμο του παραθύρου του βιβλίου}
menuText G WindowsCorrChess "Παράθυρο αλληλογραφίας" 0 {Άνοιγμα/κλείσιμο του παραθύρου αλληλογραφίας}

# Tools menu:
menuText G Tools "Εργαλεία" 0
menuText G ToolsAnalysis "Μηχανή ανάλυσης..." 0 \
  {Εκκίνηση/διακοπή της σκακιστικής μηχανής ανάλυσης}
menuText G ToolsAnalysis2 "Μηχανής ανάλυσης #2..." 17 \
  {Εκκίνηση/διακοπή της δεύτερης σκακιστικής μηχανής ανάλυσης}
menuText G ToolsCross "Συγκριτικός πίνακας" 0 {Εμφανήστε τον συγκριτικό πίνακα προκριματικών γι' αυτή τη παρτίδα}
menuText G ToolsEmail "Διαχείριση ηλ. αλληλογραφίας" 0 {Άνοιγμα/κλείσιμο του παραθύρου διαχείρισης σκακιστικής ηλ. αλληλογραφίας}
menuText G ToolsFilterGraph "Γράφημα σχετικού φίλτρου" 12 {Άνοιγμα/κλείσιμο του παραθύρου των φίλτρων γραφημάτων σχετικών τιμών}
menuText G ToolsAbsFilterGraph "Γράφημα απόλυτου φίλτρου" 7 {Άνοιγμα/κλείσιμο του παραθύρου των φίλτρων γραφημάτων απολύτων τιμών}
menuText G ToolsOpReport "Αναφορά ανοίγματος" 0 {Δημιουργήστε μια αναφορά για το άνοιγμα της τρέχουσας θέσης}
menuText G ToolsOpenBaseAsTree "Άνοιγμα βάσης ως δένδρου..." 0   {Ανοίξτε μια βάση και χρησιμοποιείστε την στο παράθυρο δένδρου}
menuText G ToolsOpenRecentBaseAsTree "Άνοιγμα πρόσφατης βάσης ως δένδρου" 0   {Ανοίξτε μια πρόσφατη βάση και χρησιμοποιήστε την μέσα από το παράθυρο του δένδρου}
menuText G ToolsTracker "Ανιχνευτής κομματιού"  6 {Ανοίξτε το παράθυρο του ανιχνευτή κομματιού}
menuText G ToolsTraining "Προπόνηση"  0 {Προπονητικά εργαλεία (τακτικές, ανοίγματα...)}
menuText G ToolsTacticalGame "Παρτίδα τακτικής"  0 {Παίξτε μια παρτίδα τακτικής}
menuText G ToolsSeriousGame "Σοβαρή παρτίδα"  0 {Παίξτε μια σοβαρή παρτίδα}
menuText G ToolsTrainOpenings "Ανοίγματα"  0 {Προπονηθείτε με ένα ρεπερτόριο}
menuText G ToolsTrainReviewGame "Επισκόπηση παρτίδας"  0 {Μαντέψτε τις κινήσεις που έγιναν σε μια παρτίδα}
menuText G ToolsTrainTactics "Τακτικές"  0 {Επιλύστε τακτικές}
menuText G ToolsTrainCalvar "Υπολογισμός βαριαντών"  0 {Προπόνηση στον υπολογισμό βαριαντών}
menuText G ToolsTrainFindBestMove "Εύρεση καλύτερης κίνησης"  0 {Βρείτε την καλύτερη κίνηση}
menuText G ToolsTrainFics "Παιχνίδι στον FICS"  0 {Παίξτε στο freechess.org}
# ====== TODO To be translated ======
menuText G ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText G ToolsBookTuning "Συντονισμός βιβλίου" 0 {Συντονισμός βιβλίου}
menuText G ToolsConnectHardware "Σύνδεση περιφερειακού" 8 {Συνδέστε εξωτερικό περιφερειακό}
menuText G ToolsConnectHardwareConfigure "Ρύθμιση..." 0 {Ρυθμίστε εξωτερικό περιφερειακό και συνδέσεις}
menuText G ToolsConnectHardwareNovagCitrineConnect "Σύνδεση με Novag Citrine" 8 {Συνδέστε Novag Citrine με το Scid}
menuText G ToolsConnectHardwareInputEngineConnect "Σύνδεση μηχανής εισόδου δεδομένων" 8 {Συνδέστε μηχανή εισόδου (π.χ. DGT board) με το Scid}

menuText G ToolsPInfo "Πληροφορίες παίκτη"  0 \
  {Άνοιγμα/ενημέρωση του παραθύρου πληροφοριών παίκτη}
menuText G ToolsPlayerReport "Δελτίο παίκτη..." 3 \
  {Δημιουργήστε δελτίο για έναν παίκτη}
menuText G ToolsRating "Γράφημα βαθμολόγησης" 0 \
  {Δημιουργήστε γράφημα του ιστορικού βαθμολόγησης των παικτών της τρέχουσας παρτίδας}
menuText G ToolsScore "Γράφημα επιδόσεων" 0 {Εμφανίστε το παράθυρο γραφήματος των σκορ}
menuText G ToolsExpCurrent "Εξαγωγή τρέχουσας παρτίδας" 8 \
  {Γράψτε την τρέχουσα παρτίδα σε ένα αρχείο κειμένου}
menuText G ToolsExpCurrentPGN "Εξαγωγή παρτίδας σε ένα αρχείο PGN..." 15 \
  {Γράψτε την τρέχουσα παρτίδα σε ένα αρχείο PGN}
menuText G ToolsExpCurrentHTML "Εξαγωγή παρτίδας σε αρχείο HTML..." 15 \
  {Γράψτε την τρέχουσα παρτίδα σε ένα αρχείο HTML}
menuText G ToolsExpCurrentHTMLJS "Εξαγωγή παρτίδας σε αρχεία HTML και JavaScript..." 15 {Γράψτε την τρέχουσα παρτίδα σε αρχεία HTML και JavaScript}  
menuText G ToolsExpCurrentLaTeX "Εξαγωγή παρτίδας σε αρχείο LaTeX..." 15 \
  {Γράψτε την τρέχουσα παρτίδα σε ένα αρχείο LaTeX}
menuText G ToolsExpFilter "Εξαγωγή όλων των φιλτραρισμένων παρτίδων" 1 \
  {Γράψτε όλες τις φιλτραρισμένες παρτίδες σε ένα αρχείο κειμένου}
menuText G ToolsExpFilterPGN "Εξαγωγή φίλτρου σε αρχείο PGN..." 17 \
  {Γράψτε όλες τις φιλτραρισμένες παρτίδες σε ένα αρχείο PGN}
menuText G ToolsExpFilterHTML "Εξαγωγή φίλτρου σε αρχείο HTML..." 17 \
  {Γράψτε όλες τις φιλτραρισμένες παρτίδες σε ένα αρχείο HTML}
menuText G ToolsExpFilterHTMLJS "Εξαγωγή φίλτρου σε αρχεία HTML και JavaScript..." 17 {Γράψτε όλες τις φιλτραρισμένες παρτίδες σε αρχεία HTML και JavaScript}  
menuText G ToolsExpFilterLaTeX "Εξαγωγή φίλτρου σε αρχείο LaTeX..." 17 \
  {Γράψτε όλες τις φιλτραρισμένες παρτίδες σε ένα αρχείο LaTeX}
menuText G ToolsImportOne "Εισαγωγή παρτίδας PGN..." 0 \
  {Εισάγετε μια παρτίδα από ένα κείμενο PGN}
menuText G ToolsImportFile "Εισαγωγή αρχείου παρτίδων PGN..." 7 {Εισάγετε παρτίδες από ένα αρχείο PGN}
menuText G ToolsStartEngine1 "Εκκίνηση μηχανής 1" 13  {Εκκινήστε την μηχανή 1}
menuText G ToolsStartEngine2 "Εκκίνηση μηχανής 2" 13  {Εκκινήστε την μηχανή 2}
menuText G ToolsCaptureBoard "Σύλληψη τρέχουσας σκακιέρας..." 5  {Αποθηκεύστε την τρέχουσα σκακιέρα ως εικόνα.}

# Play menue
menuText G Play "Παιχνίδι" 0

# --- Correspondence Chess
menuText G CorrespondenceChess "Σκάκι δι' αλληλογραφίας" 0 {Λειτουργίες σκακιού δι' αλληλογραφίας βάσει eMail και Xfcc}
menuText G CCConfigure "Ρυθμίσεις..." 0 {Προσαρμογή εξωτερικών εργαλείων και γενικές ρυθμίσεις}
menuText G CCConfigRelay "Παρακολούθηση παρτίδων..." 10 {Ρυθμίστε τις παρτίδες προς παρακολούθηση}
menuText G CCOpenDB "Άνοιγμα βάσης δεδομένων..." 0 {Ανοίξτε την προκαθορισμένη βάση δεδομένων αλληλογραφίας}
menuText G CCRetrieve "Ανάκτηση παρτίδων" 0 {Ανακτήστε παρτίδες μέσω εξωτερικής εφαρμογής (Xfcc-)helper}
menuText G CCInbox "Επεξεργασία εισερχομένων" 8 {Επεξεργαστείτε όλα τα αρχεία στα εισερχόμενα του Scid}
menuText G CCSend "Αποστολή κίνησης" 0 {Στείλτε την κίνησή σας μέσω eMail ή εξωτερικής εφαρμογής (Xfcc-)helper}

menuText G CCResign "Παραίτηση" 1 {Παραιτηθείτε (όχι μέσω eMail)}
menuText G CCClaimDraw "Αίτηση ισοπαλίας" 6 {Στείλτε την κίνησή σας και ζητήστε ισοπαλία (όχι μέσω eMail)}
menuText G CCOfferDraw "Παραχώρηση ισοπαλίας" 1 {Στείλτε την κίνησή σας και παραχωρήστε ισοπαλία (όχι μέσω eMail)}
menuText G CCAcceptDraw "Αποδοχή ισοπαλίας" 0 {Δεχθείτε μια παραχώρηση ισοπαλίας (όχι μέσω eMail)}

menuText G CCNewMailGame "Νέα παρτίδα eMail..." 2 {Ξεκινήστε μια νέα παρτίδα μέσω eMail}
menuText G CCMailMove "Αποστολή κίνησης..." 0 {Ταχυδρομήστε την κίνησή σας μέσω eMail προς τον αντίπαλο}
menuText G CCGamePage "Σελίδα παρτίδας..." 0 {Εμφανήστε την παρτίδα μέσα από τον περιηγητή ιστού}

# menu in cc window:
menuText G CCEditCopy "Αντιγραφή λίστας παρτίδων στην προσωρινή μνήμη (Clipbase)" 0 {Αντιγράψτε τις παρτίδες ως λίστα CSV στην μνήμη clipbase}

#  B    GHiJKL    Q  TUV XYZ

# Options menu:
menuText G Options "Επιλογές" 0
menuText G OptionsBoard "Σκακιέρα" 0 {Επιλογές εμφάνισης σκακιέρας}
menuText G OptionsBoardSize "Μέγεθος" 0 {Αλλάξτε το μέγεθος της σκακιέρας}
menuText G OptionsBoardPieces "Είδος κομματιών" 6 {Αλλάξτε το είδος των κομματιών της σκακιέρας}
menuText G OptionsBoardColors "Χρώματα..." 0 {Αλλάξτε τα χρώματα της σκακιέρας}
#Klimmek
menuText G OptionsBoardGraphics "Τετράγωνα..." 0 {Επιλέξτε την υφή των τετραγώνων}
translate G OptionsBGW {Επιλέξτε την υφή των τετραγώνων}
translate G OptionsBoardGraphicsText {Επιλέξτε το αρχείο γραφικών για τα λευκά και τα μαύρα τετράγωνα:}
menuText G OptionsBoardNames "Τα ονόματά μου..." 0 {Επεξεργαστείτε τα ονόματά σας στις παρτίδες}
menuText G OptionsExport "Εξαγωγές" 0 {Αλλάξτε τις επιλογές εξαγωγής κειμένου}
menuText G OptionsFonts "Γραμματοσειρές" 0 {Αλλάξτε τις γραμματοσειρές}
menuText G OptionsFontsRegular "Συνήθης" 0 {Αλλάξτε την τακτική γραμματοσειρά}
menuText G OptionsFontsMenu "Μενού" 0 {Αλλάξτε την γραμματοσειρά των μενού}
menuText G OptionsFontsSmall "Μικρή" 0 {Αλλάξτε την μικρή γραμματοσειρά}
menuText G OptionsFontsTiny "Πολύ μικρή" 0 {Αλλάξτε την πολύ μικρή γραμματοσειρά}
menuText G OptionsFontsFixed "Σταθερή" 0 {Αλλάξτε την γραμματοσειρά σταθερού πλάτους}
menuText G OptionsGInfo "Πληροφορίες παρτίδας" 0 {Επιλογές πληροφοριών παρτίδας}
menuText G OptionsLanguage "Γλώσσα" 0 {Επιλέξτε την γλώσσα των μενού}
menuText G OptionsMovesTranslatePieces "Μετάφραση κομματιών" 0 {Μεταφράστε το πρώτο γράμμα των κομματιών}
menuText G OptionsMovesHighlightLastMove "Ανάδειξη τελευταίας κίνησης" 0 {Αναδείξτε την τελευταία κίνηση}
menuText G OptionsMovesHighlightLastMoveDisplay "Εμφάνιση" 0 {Προβολή της τελευταίας κίνησης με ανάδειξη}
menuText G OptionsMovesHighlightLastMoveWidth "Πλάτος" 0 {Το πάχος της γραμμής}
menuText G OptionsMovesHighlightLastMoveColor "Χρώμα" 0 {Το χρώμα τηςη γραμμής}
# ====== TODO To be translated ======
menuText G OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText G OptionsMoves "Κινήσεις" 0 {Επιλογές εισαγωγής κίνησης}
menuText G OptionsMovesAsk "Ερώτηση πριν την αντικατάσταση κινήσεων" 0 \
  {Να ερωτάστε πριν την αντικατάσταση κάθε κίνησης που έγινε}
menuText G OptionsMovesAnimate "Χρόνος απεικόνισης κίνησης" 1 \
  {Καθορίστε την διάρκεια απεικόνισης της κίνησης}
menuText G OptionsMovesDelay "Χρονική καθυστέρηση αυτόματου παιχνιδιού..." 1 \
  {Καθορίστε την διάρκεια της χρονικής καθυστέρησης για την λειτουργία αυτόματου παιξίματος}
menuText G OptionsMovesCoord "Εισαγωγή συντεταγμένης κίνησης" 0 \
  {Αποδοχή εισαγωγής κίνησης σε στυλ συντεταγμένων (π.χ. "g1f3")}
menuText G OptionsMovesSuggest "Εμφάνιση προτεινόμενων κινήσεων" 0 \
  {Ενεργοποίηση/απενεργοποίηση προτεινόμενης κίνησης}
menuText G OptionsShowVarPopup "Εμφάνιση παραθύρου βαριαντών" 0 {Ενεργοποίηση/απενεργοποίηση την εμφάνιση του παραθύρου βαριαντών}  
menuText G OptionsMovesSpace "Προσθήκη διαστημάτων μετά τον αριθμό της κίνησης" 0 {Προσθήκη διαστήματος μετά τον αριθμό της κίνησης}  
menuText G OptionsMovesKey "Ολοκλήρωση πληκτρολογίου" 0 \
  {Ενεργοποίηση/απενεργοποίηση της αυτόματης ολοκλήρωσης κινήσεων μέσω πληκτρολογίου}
menuText G OptionsMovesShowVarArrows "Εμφάνιση βέλους για βαριάντα" 0 {Ενεργοποίηση/απενεργοποίηση του βέλους που δείχνει τις κινήσεις των βαριαντών}
menuText G OptionsNumbers "Μορφή αριθμών" 0 {Επιλέξτε τη μορφή των αριθμών}
menuText G OptionsStartup "Εκκίνηση" 3 {Επιλέξτε τα παράθυρα που θα ανοίγουν κατά την εκκίνηση του Scid}
menuText G OptionsTheme "Θέμα" 0 {Αλλάξτε την όψη του προγράμματος}
menuText G OptionsWindows "Παράθυρα" 0 {Επιλογές παραθύρων}
menuText G OptionsWindowsIconify "Αυτόματο εικονίδιο" 5 \
  {Μετατροπή όλων των παραθύρων σε εικονίδια όταν το κυρίως παράθυρο έχει γίνει εικονίδιο}
menuText G OptionsWindowsRaise "Αυτόματη μεγέθυνση" 5 \
  {Μεγέθυνση συγκεκριμένων παραθύρων (π.χ. των γραμμών προόδου) κάθε φορά που αποκρύπτονται}
menuText G OptionsSounds "Ήχοι..." 2 {Ρυθμίστε τους ήχους αναγγελίας κίνησης}
menuText G OptionsWindowsDock "Προσκόληση παραθύρων" 0 {Προσκολήστε τα παράθυρα (χρειάζεται επανεκκίνηση)}
menuText G OptionsWindowsSaveLayout "Αποθήκευση διάταξης" 0 {Αποθηκεύστε την διάταξη των παραθύρων}
menuText G OptionsWindowsRestoreLayout "Αποκατάσταση διάταξης" 0 {Αποκαταστήστε προηγούμενη διάταξη παραθύρων}
menuText G OptionsWindowsShowGameInfo "Εμφάνιση πληροφοριών παρτίδας" 0 {Εμφανίστε τις πληροφορίες για την παρτίδα}
menuText G OptionsWindowsAutoLoadLayout "Αυτόματη φόρτωση της πρώτης διάταξης" 0 {Αυτόματη φόρτωση κατά την εκκίνηση της πρώτης διάταξης}
menuText G OptionsToolbar "Γραμμή εργαλειών..." 0 {Προσαρμόστε την εργαλειοθήκη του κύριου παραθύρου}
menuText G OptionsECO "Φόρτωση αρχείου ECO..." 7 {Φορτώστε το αρχείο ταξινόμησης κατά ECO}
menuText G OptionsSpell "Φόρτωση αρχείου ορθογραφικού ελέγχου..." 11 \
  {Φορτώστε το αρχείο ορθογραφικού ελέγχου του Scid}
menuText G OptionsTable "Κατάλογος βάσης φινάλε..." 10 \
  {Επιλέξτε μια βάση δεδομένων φινάλες. Θα χρησιμοποιηθούν όλες οι βάσεις δεδομένων φινάλε του καταλόγου αυτού}
menuText G OptionsRecent "Πρόσφατα αρχεία..." 0 {Αλλάξτε το πλήθος των πρόσφατων αρχείων που εμφανίζονται στο μενού Αρχείο}
menuText G OptionsBooksDir "Κατάλογος βιβλίων..." 0 {Καθορίζει τον κατάλογο των βιβλίων ανοιγμάτων}
menuText G OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText G OptionsSave "Αποθήκευση επιλογών" 0 "Αποθηκεύστε όλες τις μεταβολές ρυθμίσεων στο αρχείο $::optionsFile"
menuText G OptionsAutoSave "Αυτόματη αποθήκευση επιλογών κατά την έξοδο" 0 \
  {Να αποθηκεύονται αυτόματα οι επιλογές κατά την έξοδο από το Scid}

# Help menu:
menuText G Help "Βοήθεια" 0
menuText G HelpContents "Περιεχόμενα" 0 {Εμφανήστε την σελίδα των περιεχομένων της βοήθειας}
menuText G HelpIndex "Κατάλογος" 0 {Εμφανήστε τον κατάλογο βοήθειας}
menuText G HelpGuide "Γρήγορος οδηγός" 0 {Εμφανίζει την σελίδα της βοήθειας με τον γρήγορο οδηγό}
menuText G HelpHints "Υποδείξεις" 0 {Εμφανήστε την σελίδα της βοήθειας με τις νύξεις}
menuText G HelpContact "Πληροφορίες επικοινωνίας" 1 {Εμφανίζει την σελίδα της βοήθειας με τις πληροφορίες επικοινωνίας}
menuText G HelpTip "Συμβουλή της ημέρας" 0 {Εμφάνιση χρήσιμων συμβουλών για το Scid}
menuText G HelpStartup "Παράθυρο έναρξης" 0 {Εμφανίζει το παράθυρο έναρξης}
menuText G HelpAbout "Για το Scid" 0 {Πληροφορίες για το Scid}

# Game info box popup menu:
menuText G GInfoHideNext "Απόκρυψη επόμενης κίνησης" 0
menuText G GInfoMaterial "Εμφάνισης της αξίας των κομματιών" 0
menuText G GInfoFEN "Εμφάνιση FEN" 5
menuText G GInfoMarks "Εμφάνιση έγχρωμων τετρατώνων και βελών" 5
menuText G GInfoWrap "Αναδύπλωση γραμμών" 0
menuText G GInfoFullComment "Εμφάνιση πλήρους σχολιασμού" 10
menuText G GInfoPhotos "Εμφάνιση φωτογραφιών" 5
menuText G GInfoTBNothing "Βάση φινάλε: Τίποτα" 12
menuText G GInfoTBResult "Βάση φινάλε: Μόνον αποτελέσματα" 12
menuText G GInfoTBAll "Βάση φινάλε: Αποτέλεσα και καλύτερες κινήσεις" 19
menuText G GInfoDelete "Διαγραφή/ανάκτηση αυτής της παρτίδας" 4
menuText G GInfoMark "(Μη-)Σημείωση αυτής της παρτίδας" 4
menuText G GInfoInformant "Ρύθμιση τιμών πληροφορίας" 0

# Main window buttons:
helpMsg G .main.fbutton.button.start {Μετάβαση στην αρχή της παρτίδας (πλήκτρο: Home)}
helpMsg G .main.fbutton.button.end {Μετάβαση στο τέλος της παρτίδας (πλήκτρο: End)}
helpMsg G .main.fbutton.button.back {Μετάβαση μια κίνηση πίσω (πλήκτρο: LeftArrow)}
helpMsg G .main.fbutton.button.forward {Μετάβαση μια κίνηση εμπρός (πλήκτρο: RightArrow)}
helpMsg G .main.fbutton.button.intoVar {Μετάβαση σε βαριάντα (πλήκτρο: v)}
helpMsg G .main.fbutton.button.exitVar {Έξοδος από την τρέχουσα βαριάντα (πλήκτρο: z)}
helpMsg G .main.fbutton.button.flip {Περιστροφή σκακιέρας (πλήκτρο: .)}
helpMsg G .main.fbutton.button.coords {Εμφάνιση/απόκρυψη συντεταγμένων σκακιέρας (πλήκτρο: 0)}
helpMsg G .main.fbutton.button.stm {Εμφάνιση/απόκρυψη του εικονιδίου της πλευράς που είναι να παίξη}
helpMsg G .main.fbutton.button.autoplay {Αυτόματο παίξιμο κινήσεων (πλήκτρο: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg G .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg G .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg G .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate G Back {Πίσω}
translate G Browse {Αναζήτηση}
translate G Cancel {Άκυρο}
translate G Continue {Συνέχεια}
translate G Clear {Καθαρισμός}
translate G Close {Κλείσιμο}
translate G Contents {Περιεχόμενα}
translate G Defaults {Αρχικό}
translate G Delete {Διαγραφή}
translate G Graph {Γράφημα}
translate G Help {Βοήθεια}
translate G Import {Εισαγωγή}
translate G Index {Κατάλογος}
translate G LoadGame {Φώρτωση παρτίδας}
translate G BrowseGame {Περιήγηση παρτίδας}
translate G MergeGame {Συνένωση παρτίδας}
translate G MergeGames {Συνένωση παρτίδων}
translate G Preview {Προεπισκόπηση}
translate G Revert {Επαναφορά}
translate G Save {Αποθήκευση}
translate G Search {Αναζήτηση}
translate G Stop {Διακοπή}
translate G Store {Αποθήκευση}
translate G Update {Ενημέρωση}
translate G ChangeOrient {Αλλαγή προσανατολισμού παραθύρου}
translate G ShowIcons {Εμφάνιση εικόνων}
translate G None {Κανένα}
translate G First {Πρώτο}
translate G Current {Τρέχων}
translate G Last {Τελευταίο}

# General messages:
translate G game {παρτίδα}
translate G games {παρτίδες}
translate G move {κίνηση}
translate G moves {κινήσεις}
translate G all {όλες}
translate G Yes {Ναι}
translate G No {Όχι}
translate G Both {Αμφότεροι}
translate G King {Βασιλιάς}
translate G Queen {Βασίλισσα}
translate G Rook {Πύργος}
translate G Bishop {Αξιωματικός}
translate G Knight {Ίππος}
translate G Pawn {Πιόνι}
translate G White {Λευκά}
translate G Black {Μαύρα}
translate G Player {Παίκτης}
translate G Rating {Βαθμολογία}
translate G RatingDiff {Διαφορά βαθμολογίας (Λευκά - Μαύρα)}
translate G AverageRating {Μέση βαθμολογία}
translate G Event {Διοργάνωση}
translate G Site {Τόπος}
translate G Country {Χώρα}
translate G IgnoreColors {Αγνόηση χρωμάτων}
translate G Date {Ημερομηνία}
translate G EventDate {Ημερομηνία διοργάνωσης}
translate G Decade {Δεκαετία}
translate G Year {Έτος}
translate G Month {Μήνας}
translate G Months {Ιανουάριος Φεβρουάριος Μάρτιος Απρίλιος Μάιος Ιούνιος Ιούλιος Αύγουστος Σεπτέμβριος Οκτώβριος Νοέμβριος Δεκέμβριος}
translate G Days {Κυρ Δευ Τρ Τε Πε Πα Σα}
translate G YearToToday {Τρέχον έτος}
translate G Result {Αποτέλεσμα}
translate G Round {Περίοδος}
translate G Length {Έκταση}
translate G ECOCode {Κώδικας ECO}
translate G ECO {ECO}
translate G Deleted {Διαγράφηκε}
translate G SearchResults {Αναζήτηση αποτελεσμάτων}
translate G OpeningTheDatabase {Βάση δεδομένων ανοιγμάτων}
translate G Database {Βάση δεδομένων}
translate G Filter {Φίλτρο}
translate G noGames {καμία παρτίδα}
translate G allGames {όλες οι παρτίδες}
translate G empty {κενό}
translate G clipbase {προσωρινή μνήμη clipbase}
translate G score {βαθμός}
translate G StartPos {Εναρκτήρια θέση}
translate G Total {Σύνολο}
translate G readonly {μόνο για ανάγνωση}

# Standard error messages:
translate G ErrNotOpen {Αυτή η βάση δεδομένων δεν είναι ανοικτή.}
translate G ErrReadOnly {Αυτή η βάση δεδομένων είναι μόνον για ανάγνωση. Δεν μπορεί να αντικατασταθεί.}
translate G ErrSearchInterrupted {Η αναζήτηση διακόπηκε. Τα αποτελέσματα δεν είναι πλήρη.}

# Game information:
translate G twin {δίδυμες}
translate G deleted {διεγραμμένη}
translate G comment {σχόλιο}
translate G hidden {κρυμένη}
translate G LastMove {Τελευταία κίνηση}
translate G NextMove {Επόμενη}
translate G GameStart {Αρχή παρτίδας}
translate G LineStart {Αρχή γραμμής}
translate G GameEnd {Τέλος παρτίδας}
translate G LineEnd {Τέλος γραμμής}

# Player information:
translate G PInfoAll {Αποτελέσματα για <b>όλες</b> τις παρτίδες}
translate G PInfoFilter {Αποτελέσματα για τις <b>φιλτραρισμένες</b> παρτίδες}
translate G PInfoAgainst {Αποτελέσματα εναντίον}
translate G PInfoMostWhite {Τα κοινότερα ανοίγματα ως Λευκά}
translate G PInfoMostBlack {Τα κοινότερα ανοίγματα ως Μαύρα}
translate G PInfoRating {Ιστορικό βαθμολόγησης}
translate G PInfoBio {Βιογραφία}
translate G PInfoEditRatings {Επεξεργασία βαθμολογήσεων}

# Tablebase information:
translate G Draw {Ισοπαλία}
translate G stalemate {πατ}
translate G withAllMoves {με όλες τις κινήσεις}
translate G withAllButOneMove {με όλες τις κινήσεις εκτός μιας}
translate G with {με}
translate G only {μόνο}
translate G lose {απώλεια}
translate G loses {χάνει}
translate G allOthersLose {όλες οι άλλες χάνουν}
translate G matesIn {ματ σε}
translate G hasCheckmated {έκανε ματ}
translate G longest {μεγαλύτερη}
translate G WinningMoves {Κινήσεις που κερδίζουν}
translate G DrawingMoves {Κινήσεις που οδηγούν σε ισοπαλία}
translate G LosingMoves {Κινήσεις που χάνουν}
translate G UnknownMoves {Κινήσεις αγνώστου αποτελέσματος}

# Tip of the day:
translate G Tip {Συμβουλή}
translate G TipAtStartup {Συμβουλές κατά την εκκίνηση}

# Tree window menus:
menuText G TreeFile "Αρχείο" 0
menuText G TreeFileFillWithBase "Γέμισμα της μνήμης με την βάση" 0 {Γεμίστε την προσωρινή μνήμη cache με όλα τις παρτίδες της τρέχουσας βάσης}
menuText G TreeFileFillWithGame "Γέμισμα της μνήμης με παρτίδα" 0 {Γεμίστε την προσωρινή μνήμη cache με την τρέχουσα παρτίδα στην τρέχουσα βάση}
menuText G TreeFileSetCacheSize "Μέγεθος προσωρινής μνήμης" 0 {Καθορίστε το μέγεθος της προσωρινής μνήμης cache}
menuText G TreeFileCacheInfo "Αποθήκευση πληροφοριών στην μνημη" 0 {Μεταβιβάστε τις πληροφορίες στην μνήμη cache}
menuText G TreeFileSave "Αποθήκευση του αρχείου προσωρινής μνήμης" 0 {Αποθηκεύστε το αρχείο δένδρου της προσωρινής μνήμης (.stc)}
menuText G TreeFileFill "Γέμισμα του αρχείου προσωρινής μνήμης" 0 \
  {Γεμίστε το αρχείο προσωρινής μνήμης με συνήθεις θέσεις ανοιγμάτων}
menuText G TreeFileBest "Λίστα καλύτερων παρτίδων" 0 {Εμφάνιση του καλύτερου δένδρου λίστας παρτίδων}
menuText G TreeFileGraph "Παράθυρο γραφήματος" 0 {Εμφάνιση του γραφήματος γι' αυτόν τον κλάδο δένδρου}
menuText G TreeFileCopy "Αντιγραφή του κειμένου του δένδρου στην προσωρινή μνήμη Clipboard" 1 \
  {Αντιγράψτε το δένδρο των στατιστικών στην προσωρινή μνήμη clipboard}
menuText G TreeFileClose "Κλείσιμο του παραθύρου δένδρου" 0 {Κλείστε το παράθυρο του δένδρου}
menuText G TreeMask "Μάσκα" 0
menuText G TreeMaskNew "Νέα" 0 {Νέα μάσκα}
menuText G TreeMaskOpen "Άνοιγμα" 0 {Ανοίξτε μια μάσκα}
menuText G TreeMaskOpenRecent "Άνοιγμα πρόσφατης" 0 {Ανοίξτε πρόσφατη μάσκα}
menuText G TreeMaskSave "Αποθήκευση" 0 {Αποθηκεύστε την μάσκα}
menuText G TreeMaskClose "Κλείσιμο" 0 {Κλείστε τη μάσκα}
menuText G TreeMaskFillWithGame "Γέμισμα με παρτίδα" 0 {Γεμίστε την μάσκα με μια παρτίδα}
menuText G TreeMaskFillWithBase "Γέμισμα με βάση" 0 {Γεμίστε τη μάσκα με όλες τις παρτίδες της βάσης}
menuText G TreeMaskInfo "Info" 0 {Show statistics for current mask}
menuText G TreeMaskDisplay "Εμφάνιση χάρτη μάσκας" 0 {Εμφανίστε τα δεδομένα της μάσκας σε μορφή δένδρου}
menuText G TreeMaskSearch "Αναζήτηση" 0 {Αναζήτηση στην τρέχουσα μάσκα}
menuText G TreeSort "Ταξινόμηση" 0
menuText G TreeSortAlpha "Αλφαβητική" 0
menuText G TreeSortECO "Κώδικας ECO" 0
menuText G TreeSortFreq "Συχνότητα" 0
menuText G TreeSortScore "Βαθμολογία" 0
menuText G TreeOpt "Επιλογές" 0
menuText G TreeOptSlowmode "Αργή λειτουργία" 0 {Αργή λειτουργία των ενημερώσεων (μεγάλη ακρίβεια)}
menuText G TreeOptFastmode "Γρήγορη λειτουργία" 0 {Γρήγορη λειτουργία των ενημερώσεων (χωρίς αντιμετάθεση κίνησης)}
menuText G TreeOptFastAndSlowmode "Αργή και γρήγορη λειτουργία" 0 {Γρήγορη λειτουργία και έπειτα αργή λειτουργία για ενημερώσεις}
menuText G TreeOptStartStop "Αυτόματη ανανέωση" 0 {Εναλλάσει την αυτόματη ανανέωση του παραθύρου του δένδρου}
menuText G TreeOptLock "Lock" 0 {Lock/unlock the tree to the current database}
menuText G TreeOptTraining "Προπόνηση" 0 {Ενεργοποίηση/απενεργοποίηση της λειτουργίας εκπαίδευσης}
menuText G TreeOptAutosave "Αυτόματη αποθήκευση του αρχείου προσωρινής μνήμης" 0 \
  {Αποθηκεύει αυτόματα το αρχείο προσωρινής μνήμης όταν κλείσετε το παράθυρο δένδρου}
menuText G TreeHelp "Βοήθεια" 0
menuText G TreeHelpTree "Δένδρο βοήθειας" 0
menuText G TreeHelpIndex "Κατάλογος βοήθειας" 0
translate G SaveCache {Αποθήκευση προσωρινής μνήμης Cache}
translate G Training {Προπόνηση}
translate G LockTree {Κλείδωμα}
translate G TreeLocked {κλειδωμένο}
translate G TreeBest {Καλύτερο}
translate G TreeBestGames {Οι καλύτερες παρτίδες του δένδρου}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate G TreeTitleRow \
  {    Move   ECO       Frequency    Score  AvElo Perf AvYear %Draws}
translate G TreeTotal {ΣΥΝΟΛΟ}
translate G DoYouWantToSaveFirst {Θέλετε να αποθηκεύσετε πρώτα;}
translate G AddToMask {Προσθήκη στην μάσκα}
translate G RemoveFromMask {Απομάκρυνση από την μάσκα}
translate G AddThisMoveToMask {Προσθήκη αυτής της κίνησης στην μάσκα}
translate G SearchMask {Αναζήτηση στην μάσκα}
translate G DisplayMask {Εμφάνιση μάσκας}
translate G Nag {Κώδικας Nag}
translate G Marker {Μαρκαδόρος}
translate G Include {Περιλαμβάνει}
translate G Exclude {Εξαιρεί}
translate G MainLine {Κύρια γραμμή}
translate G Bookmark {Σελιδοδείκτης}
translate G NewLine {Νέα γραμμή}
translate G ToBeVerified {Να εξακριβωθεί}
translate G ToTrain {Να εξασκηθεί}
translate G Dubious {Αμφίβολη}
translate G ToRemove {Προς απομάκρυνση}
translate G NoMarker {Χωρίς μαρκαδόρο}
translate G ColorMarker {Χρώμα}
translate G WhiteMark {Λευκό}
translate G GreenMark {Πράσινο}
translate G YellowMark {Κίτρινο}
translate G BlueMark {Γαλάζιο}
translate G RedMark {Κόκκινο}
translate G CommentMove {Σχολιασμός κίνησης}
translate G CommentPosition {Σχολιασμός θέσης}
translate G AddMoveToMaskFirst {Πρώτα να προστεθεί η κίνηση στην μάσκα}
translate G OpenAMaskFileFirst {Πρώτα να ανοιχτεί ένα αρχείο μάσκας}
translate G Positions {Θέσεις}
translate G Moves {Κινήσεις}

# Finder window:
menuText G FinderFile "Αρχείο" 0
menuText G FinderFileSubdirs "Αναζήτηση στους υποκαταλόγους" 0
menuText G FinderFileClose "Κλείσιμο αναζήτησης αρχείου" 0
menuText G FinderSort "Ταξινόμηση" 0
menuText G FinderSortType "Τύπος" 0
menuText G FinderSortSize "Μέγεθος" 0
menuText G FinderSortMod "Τροποποιήθηκε" 0
menuText G FinderSortName "Όνομα" 0
menuText G FinderSortPath "Διαδρομή" 0
menuText G FinderTypes "Τύποι" 0
menuText G FinderTypesScid "Βάσεις δεδομένων Scid" 0
menuText G FinderTypesOld "Βάσεις δεδομένων Scid παλαιάς μορφής" 0
menuText G FinderTypesPGN "Αρχεία PGN" 0
menuText G FinderTypesEPD "Αρχεία EPD" 0
menuText G FinderTypesRep "Αρχεία ρεπερτορίου" 0
menuText G FinderHelp "Βοήθεια" 0
menuText G FinderHelpFinder "Βοήθεια για την αναζήτηση αρχείων" 0
menuText G FinderHelpIndex "Κατάλογος βοήθειας" 0
translate G FileFinder {Αναζήτηση αρχείου}
translate G FinderDir {Κατάλογος}
translate G FinderDirs {Κατάλογοι}
translate G FinderFiles {Αρχεία}
translate G FinderUpDir {επάνω}
translate G FinderCtxOpen {Άνοιγμα}
translate G FinderCtxBackup {Αντίγραφο ασφαλείας}
translate G FinderCtxCopy {Αντιγραφή}
translate G FinderCtxMove {Μεταφορά}
translate G FinderCtxDelete {Διαγραφή}
 
# Player finder:
menuText G PListFile "Αρχείο" 0
menuText G PListFileUpdate "Ανανέωση/Ενημέρωση" 0
menuText G PListFileClose "Κλείσιμο αναζήτησης αναπαραγωγής" 0
menuText G PListSort "Ταξινόμηση" 0
menuText G PListSortName "Όνομα" 0
menuText G PListSortElo "Elo" 0
menuText G PListSortGames "Παρτίδες" 0
menuText G PListSortOldest "Παλαιότερη" 0
menuText G PListSortNewest "Νεότερη" 2

# Tournament finder:
menuText G TmtFile "Αρχείο" 0
menuText G TmtFileUpdate "Ανανέωση" 0
menuText G TmtFileClose "Κλείσιμο αναζήτησης προκριματικών" 0
menuText G TmtSort "Ταξινόμηση" 0
menuText G TmtSortDate "Ημερομηνία" 0
menuText G TmtSortPlayers "Παίκτες" 0
menuText G TmtSortGames "Παρτίδες" 0
menuText G TmtSortElo "Elo" 0
menuText G TmtSortSite "Τοποθεσία" 0
menuText G TmtSortEvent "Διοργάνωση" 1
menuText G TmtSortWinner "Νικητής" 0
translate G TmtLimit "Όριο λίστας"
translate G TmtMeanElo "Μέσος Elo"
translate G TmtNone "Δεν βρέθηκαν προκριματικοί που να ταιριάζουν."

# Graph windows:
menuText G GraphFile "Αρχείο" 0
menuText G GraphFileColor "Αποθήκευση ως έγρωμο PostScript..." 8
menuText G GraphFileGrey "Αποθήκευση ως γρκίζο PostScript..." 8
menuText G GraphFileClose "Κλείσιμο παραθύρου" 6
menuText G GraphOptions "Επιλογές" 0
menuText G GraphOptionsWhite "Λευκά" 0
menuText G GraphOptionsBlack "Μαύρα" 0
menuText G GraphOptionsBoth "Και τα δύο" 1
menuText G GraphOptionsPInfo "Πληροφορίες παίκτη" 0
translate G GraphFilterTitle "Φίλτρο γραφήματος: συχνότητα ανά 1000 παρτίδες"
translate G GraphAbsFilterTitle "Φίλτρο γραφήματος: συχνότητα παρτίδας"
translate G ConfigureFilter "Προσαρμογή των αξόνων Χ ως προς Έτος, Βαθμολογία και Κινήσεις"
translate G FilterEstimate "Εκτίμηση"
translate G TitleFilterGraph "Scid: Φιλτράρισμα γραφήματος"

# Analysis window:
translate G AddVariation {Προσθήκη βαριάντας}
translate G AddAllVariations {Προσθήκη όλων των βαριαντών}
translate G AddMove {Προσθήκκη κίνησης}
translate G Annotate {Υπομνηματισμός}
translate G ShowAnalysisBoard {Εμφάνισης της σκακιέρας ανάλυσης}
translate G ShowInfo {Εμφάνιση πληροφοριών μηχανής}
translate G FinishGame {Ολοκλήρωση παρτίδας}
translate G StopEngine {Διακοπή μηχανής}
translate G StartEngine {Εκκίνηση μηχανής}
translate G LockEngine {Κλείδωμα της μηχανής στην τρέχουσα θέση}
translate G AnalysisCommand {Εντολή ανάλυσης}
translate G PreviousChoices {Προηγούμενες επιλογές}
translate G AnnotateTime {Καθορίστε τον χρόνο μεταξύ των κινήσεων σε δευτερόλεπτα}
translate G AnnotateWhich {Προσθήκη βαριαντών}
translate G AnnotateAll {Για κινήσεις και των δύο πλευρών}
translate G AnnotateAllMoves {Υπομνηματισμός όλων των κινήσεων}
translate G AnnotateWhite {Για τις κινήσεις μόνο των Λευκών}
translate G AnnotateBlack {Για τις κινήσεις μόνο των Μαύρων}
translate G AnnotateBlundersOnly {Όταν η κίνηση είναι σφάλμα}
translate G AnnotateBlundersOnlyScoreChange {Η ανάλυση αναφέρει σφάλμα και το σκορ άλλαξε από/σε: }
translate G BlundersThreshold {Αφετηρία}
translate G ScoreAllMoves {Βαθμολόγηση όλων των κινήσεων}
translate G LowPriority {Χαμηλή προτεραιότητα της CPU}
translate G ClickHereToSeeMoves {Πατήστε εδώ για να δείτε τις κινήσεις}
translate G ConfigureInformant {Προσαρμογή Informant}
translate G Informant!? {Ενδιαφέρουσα κίνησηInteresting move}
translate G Informant? {Φτωχή κίνηση}
translate G Informant?? {Σφάλμα}
translate G Informant?! {Αμφίβολη κίνηση}
translate G Informant+= {Τα Λευκά έχουν μικρό πλεονέκτημα}
translate G Informant+/- {Τα Λευκά έχουν μέτριο πλεονέκτημα}
translate G Informant+- {Τα Λευκά έχουν αποφασιστικό πλεονέκτημα}
translate G Informant++- {Η παρτίδα θεωρείται κερδισμένη}
  
# Book window
translate G Book {Βιβλίο}
translate G OtherBookMoves {Βιβλίο αντιπάλου}
translate G OtherBookMovesTooltip {Κινήσεις για τις οποίες ο αντίπαλος διαθέτει απάντηση}

# Analysis Engine open dialog:
translate G EngineList {Λίστα μηχανής ανάλυσης}
translate G EngineName {Όνομα}
translate G EngineCmd {Εντολή}
translate G EngineArgs {Παράμετροι}
translate G EngineDir {Κατάλογος}
translate G EngineElo {Elo}
translate G EngineTime {Ημερομηνία}
translate G EngineNew {Νέα}
translate G EngineEdit {Επεξεργασία}
translate G EngineRequired {Τα παιδία με έντονη γραμματοσειρά είναι απαραίτητα, τα άλλα είναι προαιρετικά}

# Stats window menus:
menuText G StatsFile "Αρχείο" 0
menuText G StatsFilePrint "Εκτύπωση σε αρχείο..." 0
menuText G StatsFileClose "Κλείσιμο παραθύρου" 0
menuText G StatsOpt "Επιλογές" 0

# PGN window menus:
menuText G PgnFile "Αρχείο" 0
menuText G PgnFileCopy "Αντιγραφή παρτίδας στην προσωρινή μνήμη Clipboard" 0
menuText G PgnFilePrint "Εκτύπωση σε αρχείο..." 0
menuText G PgnFileClose "Κλείσιμο παραθύρου PGN" 10
menuText G PgnOpt "Εμφάνιση" 0
menuText G PgnOptColor "Έγχρωμη εμφάνιση" 0
menuText G PgnOptShort "Μικρή (3 γραμμών) κεφαλίδα" 0
menuText G PgnOptSymbols "Συμβολικός υπομνηματισμός" 1
menuText G PgnOptIndentC "Εσοχή σχολίων" 0
menuText G PgnOptIndentV "Εσοχή βαριαντών" 7
menuText G PgnOptColumn "Είδος στήλης (μια κίνηση ανά γραμμή)" 1
menuText G PgnOptSpace "Διάστημα μετά τον αριθμό της κίνησης" 1
menuText G PgnOptStripMarks "Απομάκρυνση έγχρωμων κωδικών τετραγώνων/βελών" 1
menuText G PgnOptBoldMainLine "Χρήση έντονου κειμένου για τις κινήσεις κύριας γραμμής" 4
menuText G PgnColor "Χρώματα" 0
menuText G PgnColorHeader "Κεφαλίδα..." 0
menuText G PgnColorAnno "Υπομνηματισμοί..." 0
menuText G PgnColorComments "Σχόλια..." 0
menuText G PgnColorVars "Βαριάντες..." 0
menuText G PgnColorBackground "Υπόβαθρο..." 0
menuText G PgnColorMain "Κύρια γραμμή..." 0
menuText G PgnColorCurrent "Υπόβαθρο τρέχουσας κίνησης..." 1
menuText G PgnHelp "Βοήθεια" 0
menuText G PgnHelpPgn "Βοήθεια για PGN" 0
menuText G PgnHelpIndex "Κατάλογος" 0
translate G PgnWindowTitle {Σημείωση - παρτίδα %u}

# Crosstable window menus:
menuText G CrosstabFile "Αρχείο" 0
menuText G CrosstabFileText "Εκτύπωση κειμένου σε αρχείο..." 9
menuText G CrosstabFileHtml "Εκτύπωση σε αρχείο HTML..." 9
menuText G CrosstabFileLaTeX "Εκτύπωση σε αρχείο LaTeX..." 9
menuText G CrosstabFileClose "Κλείσιμο του παραθύρου συγκριτικού πίνακα" 0
menuText G CrosstabEdit "Επεξεργασία" 0
menuText G CrosstabEditEvent "Διοργάνωση" 0
menuText G CrosstabEditSite "Τοποθεσία" 0
menuText G CrosstabEditDate "Ημερομηνία" 0
menuText G CrosstabOpt "Εμφάνιση" 0
menuText G CrosstabOptAll "All-play-all" 0
menuText G CrosstabOptSwiss "Ελβετικού τύπου" 0
menuText G CrosstabOptKnockout "Knockout" 0
menuText G CrosstabOptAuto "Αυτόματα" 1
menuText G CrosstabOptAges "Ηλικία σε έτη" 8
menuText G CrosstabOptNats "Εθνικότητες" 0
menuText G CrosstabOptRatings "Βαθμολογίες" 0
menuText G CrosstabOptTitles "Τίτλοι" 0
menuText G CrosstabOptBreaks "Βαθμολογίες μη δεσμευτικού συστήματος" 4
menuText G CrosstabOptDeleted "Να περιλαμβάνονται διεγραμμένες παρτίδες" 8
menuText G CrosstabOptColors "Χρώματα (Πίνακες Ελβετικού τύπου μόνον)" 0
menuText G CrosstabOptColumnNumbers "Αριθμημένες στήλες (πίνακες τύπου All-play-all μόνον)" 2
menuText G CrosstabOptGroup "Ομαδοποίηση βαθμολογιών" 0
menuText G CrosstabSort "Ταξινόμηση" 0
menuText G CrosstabSortName "Όνομα" 0
menuText G CrosstabSortRating "Βαθμολόγηση" 0
menuText G CrosstabSortScore "Επίδοση" 0
menuText G CrosstabColor "Χρώμα" 0
menuText G CrosstabColorPlain "Απλό κείμενο" 0
menuText G CrosstabColorHyper "Υπερκείμενο" 0
menuText G CrosstabHelp "Βοήθεια" 0
menuText G CrosstabHelpCross "Βοήθεια συγκριτικών πινάκων" 0
menuText G CrosstabHelpIndex "Κατάλογος βοήθειας" 0
translate G SetFilter {Καθορισμός φίλτρου}
translate G AddToFilter {Προσθήκη σε φίλτρο}
translate G Swiss {Ελβετικού τύπου}
translate G Category {Κατηγορία}

# Opening report window menus:
menuText G OprepFile "Αρχείο" 0
menuText G OprepFileText "Εκτύπωση σε αρχείο κειμένου..." 9
menuText G OprepFileHtml "Εκτύπωση σε αρχείο HTML..." 9
menuText G OprepFileLaTeX "Εκτύπωση σε αρχείο LaTeX..." 9
menuText G OprepFileOptions "Επιλογές..." 0
menuText G OprepFileClose "Κλείσιμο παραθύρου αναφορών" 0
menuText G OprepFavorites "Προτιμώμενα" 1
menuText G OprepFavoritesAdd "Προσθήκη αναφοράς..." 0
menuText G OprepFavoritesEdit "Επεξεργασία προτιμήσεων αναφορών..." 0
menuText G OprepFavoritesGenerate "Δημιουργία αναφορών..." 0
menuText G OprepHelp "Βοήθεια" 0
menuText G OprepHelpReport "Άνοιγμα της βοήθειας για αναφορές" 0
menuText G OprepHelpIndex "Κατάλογος βοήθειας" 0

# Repertoire editor:
menuText G RepFile "Αρχείο" 0
menuText G RepFileNew "Νέο" 0
menuText G RepFileOpen "Άνοιγμα..." 0
menuText G RepFileSave "Αποθήκευση..." 0
menuText G RepFileSaveAs "Αποθήκευση ως..." 5
menuText G RepFileClose "Κλείσιμο παραθύρου" 0
menuText G RepEdit "Επεξεργασία" 0
menuText G RepEditGroup "Προσθήκη ομάδας" 4
menuText G RepEditInclude "Προσθήκη Περιέχεται Γραμμή" 4
menuText G RepEditExclude "Προσθήκη Εξαιρείται Γραμμή" 4
menuText G RepView "Εμφάνιση" 0
menuText G RepViewExpand "Ανάπτυξη όλων των ομάδων" 0
menuText G RepViewCollapse "Σύμπτηξη όλων των ομάδων" 0
menuText G RepSearch "Αναζήτηση" 0
menuText G RepSearchAll "Όλο το ρεπερτόριο..." 0
menuText G RepSearchDisplayed "Μόνον γραμμές που εμφανίζονται..." 0
menuText G RepHelp "Βοήθεια" 0
menuText G RepHelpRep "Βοήθεια ρεπερτορίου" 0
menuText G RepHelpIndex "Κατάλογος βοήθειας" 0
translate G RepSearch "Αναζήτηση ρεπερτορίου"
translate G RepIncludedLines "γραμμές που περιλαμβάνονται"
translate G RepExcludedLines "γραμμές που εξαιρούνται"
translate G RepCloseDialog {This repertoire has unsaved changes.

Do you really want to continue and discard the changes you have made?
}

# Header search:
translate G HeaderSearch {Αναζήτηση κεφαλίδας}
translate G EndSideToMove {Η πλευρά που έχει την κίνηση στο τέλος της παρτίδας}
translate G GamesWithNoECO {Παρτίδες χωρίς ECO;}
translate G GameLength {Μήκος παρτίδας}
translate G FindGamesWith {Εύρεση παρτίδων με σημαίες}
translate G StdStart {Μη πρότυπη έναρξη}
translate G Promotions {Προαγωγές}
translate G Comments {Σχόλια}
translate G Variations {Βαριάντες}
translate G Annotations {Υπομνηματισμοί}
translate G DeleteFlag {Διαγραφή σημαιών}
translate G WhiteOpFlag {Άνγοιγμα Λευκών}
translate G BlackOpFlag {Άνοιγμα Μαύρων}
translate G MiddlegameFlag {Μέσον παρτίδας}
translate G EndgameFlag {Φινάλε}
translate G NoveltyFlag {Νεοτερισμός}
translate G PawnFlag {Πιονοδομή}
translate G TacticsFlag {Τακτική}
translate G QsideFlag {Παιχνίδι στην πλευρά της Βασίλισσας}
translate G KsideFlag {Παιχνίδι στην πλευρά του Βασιλιά}
translate G BrilliancyFlag {Ευφυές}
translate G BlunderFlag {Σφάλμα}
translate G UserFlag {Χρήστης}
translate G PgnContains {Το PGN περιέχει κείμενο}
translate G Annotator {Υπομνηματιστής}
translate G Cmnts {Μόνον υπομνηματισμένες παρτίδες}

# Game list window:
translate G GlistNumber {Αριθμός}
translate G GlistWhite {Λευκά}
translate G GlistBlack {Μαύρα}
translate G GlistWElo {Elo Λευκών}
translate G GlistBElo {Elo Μαύρων}
translate G GlistEvent {Διοργάνωση}
translate G GlistSite {Τοποθεσία}
translate G GlistRound {Γύρος}
translate G GlistDate {Ημερομηνία}
translate G GlistYear {Έτος}
translate G GlistEDate {Ημερομηνία Διοργάνωσης}
translate G GlistResult {Αποτέλεσμα}
translate G GlistLength {Μήκος}
translate G GlistCountry {Χώρα}
translate G GlistECO {ECO}
translate G GlistOpening {Άνοιγμα}
translate G GlistEndMaterial {Υλικό φινάλε}
translate G GlistDeleted {Διεγραμμένα}
translate G GlistFlags {Σημαίες}
translate G GlistVars {Βαριάντες}
translate G GlistComments {Σχόλια}
translate G GlistAnnos {Υπομηματισμοί}
translate G GlistStart {Έναρξη}
translate G GlistGameNumber {Αριθμός παρτίδας}
# ====== TODO To be translated ======
translate G GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate G GlistRating {Rating}
translate G GlistFindText {Εύρεση κειμένου}
translate G GlistMoveField {Μετακίνηση}
translate G GlistEditField {Προσαρμογή}
translate G GlistAddField {Προσθήκη}
translate G GlistDeleteField {Απομάκρυνση}
translate G GlistWidth {Πλάτος}
translate G GlistAlign {Ευθυγραμμιση}
# ====== TODO To be translated ======
translate G GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate G GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate G GlistAlignC {Align: center}
translate G GlistColor {Χρώμα}
translate G GlistSep {Διαχωριστής}
# ====== TODO To be translated ======
translate G GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate G GlistNewSort {New}
# ====== TODO To be translated ======
translate G GlistAddToSort {Add}

# ====== TODO To be translated ======
translate G GsortSort {Sort...}
# ====== TODO To be translated ======
translate G GsortDate {Date}
# ====== TODO To be translated ======
translate G GsortYear {Year}
# ====== TODO To be translated ======
translate G GsortEvent {Event}
# ====== TODO To be translated ======
translate G GsortSite {Site}
# ====== TODO To be translated ======
translate G GsortRound {Round}
# ====== TODO To be translated ======
translate G GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate G GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate G GsortECO {ECO}
# ====== TODO To be translated ======
translate G GsortResult {Result}
# ====== TODO To be translated ======
translate G GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate G GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate G GsortCountry {Country}
# ====== TODO To be translated ======
translate G GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate G GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate G GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate G GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate G GsortComments {Comments}
# ====== TODO To be translated ======
translate G GsortVariations {Variations}
# ====== TODO To be translated ======
translate G GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate G GsortAscending {Ascending}
# ====== TODO To be translated ======
translate G GsortDescending {Descending}
# ====== TODO To be translated ======
translate G GsortAdd {Add}
# ====== TODO To be translated ======
translate G GsortStore {Store}
# ====== TODO To be translated ======
translate G GsortLoad {Load}

# menu shown with right mouse button down on game list. 
translate G GlistRemoveThisGameFromFilter  {Απομάκρυνση αυτής της παρτίδας από το φίλτρο}
translate G GlistRemoveGameAndAboveFromFilter  {Απομάκρυνση παρτίδας (και όλων των από πάνω) από το φίλτρο}
translate G GlistRemoveGameAndBelowFromFilter  {Απομάκρυνση παρτίδας (και όλων των από κάτω) από το φίλτρο}
translate G GlistDeleteGame {Διαγραφή/ανάκτηση αυτής της παρτίδας} 
translate G GlistDeleteAllGames {Διαγραφή όλων των παρτίδων από το φίλτρο} 
translate G GlistUndeleteAllGames {Ανάκτηση όλων των παρτίδων από το φίλτρο}  
translate G GlistMergeGameInBase {Συνένωση παρτίδας σε άλλη βάση δεδομένων}

# Maintenance window:
translate G DatabaseName {Όνομα βάσης δεδομένων:}
translate G TypeIcon {Εικόνα τύπου:}
translate G NumOfGames {Παρτίδες:}
translate G NumDeletedGames {Διεγραμμένες παρτίδες:}
translate G NumFilterGames {Παρτίδες στο φίλτρο:}
translate G YearRange {Εύρος έτους:}
translate G RatingRange {Εύρος βαθμολόγησης:}
translate G Description {Περιγραφή}
translate G Flag {Σημαία}
translate G CustomFlags {Προσαρμοζόμενες σημαίες}
translate G DeleteCurrent {Διαγραφή τρέχουσας παρτίδας}
translate G DeleteFilter {Διαγραφή φιλτραρισμένων παρτίδων}
translate G DeleteAll {Διαγραφή όλων των παρτίδων}
translate G UndeleteCurrent {Ανάκτηση τρέχουσας παρτίδας}
translate G UndeleteFilter {Ανάκτηση φιλτραρισμένων παρτίδων}
translate G UndeleteAll {Ανάκτηση όλων των παρτίδων}
translate G DeleteTwins {Διαγραφή δίδυμων παρτίδων}
translate G MarkCurrent {Μαρκάρισμα τρέχουσας παρτίδας}
translate G MarkFilter {Μαρκάρισμα φιλτραρισμένων παρτίδων}
translate G MarkAll {Μαρκάρισμα όλων των παρτίδων}
translate G UnmarkCurrent {Ξεμαρκάρισμα τρέχουσας παρτίδας}
translate G UnmarkFilter {Ξεμαρκάρισμα φιλτραρισμένων παρτίδων}
translate G UnmarkAll {Ξεμαρκάρισμα όλων των παρτίδων}
translate G Spellchecking {Έλεγχος ορθογραφίας}
translate G Players {Παίκτες}
translate G Events {Διοργανώσεις}
translate G Sites {Τοποθεσίες}
translate G Rounds {Γύροι}
translate G DatabaseOps {Χειρισμοί βάσης δεδομένων}
translate G ReclassifyGames {Ταξινόμηση παρτίδων κατά ECO}
translate G CompactDatabase {Συμπίεση βάσης δεδομένων}
translate G SortDatabase {Ταξινόμηση βάσης δεδομένων}
translate G AddEloRatings {Προσθήκη βαθμολογίας κατά Elo}
translate G AutoloadGame {Αυτόματη φόρτωση αριθμού παρτίδας}
translate G StripTags {Απομάκρυνση ετικετών ΡGN}
translate G StripTag {Απομάκρυνση ετικετών}
translate G Cleaner {Καθαρισμός}
translate G CleanerHelp {
Ο Καθαρισμός του Scid θα εφαρμόσει στην τρέχουσα βάση δεδομένων όλες τις ενέργειες συντήρησης που επιλέξατε από την λίστα που ακολουθεί.

Οι τρέχουσες ρυθμίσεις της ταξινόμησης κατά ECO και η διαγραφή δίδυμων παρτίδων θα εφαρμοσθούν εφόσον επιλέξατε αυτές τις ενέργειες.
}
translate G CleanerConfirm {
Όταν ο Καθαρισμός ξεκινήσει, δεν μπορείτε να τον σταματήσετε!

Η διαδικασία αυτή ίσως διαρκέσει αρκετό χρόνο αν η βάση δεδομένων είναι μεγάλη, αναλόγως των ενεργειών που έχετε επιλέξει και των ρυθμίσεών τους.

Είστε βέβαιος/αιη ότι θέλετε να ξεκινήσουν οι ενέργειες συντήρησης που επιλέξατε;
}
# Twinchecker
translate G TwinCheckUndelete {to flip; "u" undeletes both)}
translate G TwinCheckprevPair {Προηγούμενο ζεύγος}
translate G TwinChecknextPair {Επόμενο ζεύγος}
translate G TwinChecker {Scid: έλεγχος δίδυμων παρτίδων}
translate G TwinCheckTournament {Παρτίδες προκριματικού:}
translate G TwinCheckNoTwin {Δεν υπάρχουν δίδυμα }
translate G TwinCheckNoTwinfound {Δεν εντοπίστηκαν δίδυμα για την παρτίδα αυτή.\nΓια να δείτε τις δίδυμες παρτίδες χρησιμοποιώντας το παράθυρο αυτό, πρέπει πρώτα να χρησιμοποιήσετε την λειτουργία "Διαγραφή δίδυμων παρτίδων...". }
translate G TwinCheckTag {Κοινή χρήση ετικετών...}
translate G TwinCheckFound1 {Το Scid βρήκε $result δίδυμες παρτίδες}
translate G TwinCheckFound2 { και έθεσε γι' αυτές σημαίες διαγραφής}
translate G TwinCheckNoDelete {Σε αυτή τη βάση δεδομένων δεν υπάρχουν παρτίδες προς διαγραφή.}
translate G TwinCriteria1 {Οι ρυθμίσεις σας για την αναζήτηση δίδυμων παρτίδων πιθανόν να προκαλούν το μαρκάρισμα  μη-δίδυμων παρτίδων ως δίδυμες.}
translate G TwinCriteria2 {Αν έχετε επιλέξει "Όχι" για τις "όμοιες κινήσεις", συνιστούμε να επιλέξετε "Ναι" στις ρυθμίσεις για χρώματα, διοργανώσεις, τοποθεσίες, έτος και μήνες.\nΘέλετε να συνεχίσετε και να διαγραφούν οι δίδυμες;}
translate G TwinCriteria3 {Συνιστούμε να επιλέξετε "Ναι" τουλάχιστον για δύο ρυθμίσεις "ίδια τοποθεσία", "ίδιος γύρος" και "ίδιο έτος".\nΘέλετε να συνεχίσετε και να διαγραφούν οι δίδυμες;}
translate G TwinCriteriaConfirm {Scid: Επιβεβαίωση ρυθμίσεων διδύμων}
translate G TwinChangeTag "Αλλαγή των ακόλουθων ετικετών παρτίδας:\n\n"
translate G AllocRatingDescription "Η εντολή αυτή θα χρησιμοποιήσει το τρέχον αρχείο ορθογραφικού ελέγχου για να προσθέσει βαθμολογίες Elo σε αυτή την βάση δεδομένων. Αν ο παίκτης/παίκτρια δεν έχει τρέχουσα βαθμολογία αλλά η βαθμολογία του/της την στιγμή της παρτίδας εμφανίζεται στο αρχείο ορθογραφικού ελέγχου, αυτή η βαθμολογία θα προστεθεί."
translate G RatingOverride "Να αντικατασταθούν οι υπάρχουσες μη-μηδενικές βαθμολογίες;"
translate G AddRatings "Προσθήκη βαθμολογίας στον/στην:"
translate G AddedRatings {Τ Scid πρόσθεσε $r βαθμούς Elo σε $g παρτίδες.}

#Bookmark editor
translate G NewSubmenu "Νέο υπομενού"

# Comment editor:
translate G AnnotationSymbols  {Σύμβολα υπομνηματισμούς:}
translate G Comment {Σχόλιο:}
translate G InsertMark {Εισαγωγή σημαδιού}
translate G InsertMarkHelp {
Εισαγωγή/απομάκρυνμση σημαδιού: Επιλέξτε χρώμα, είδος, τετράγωνο.
Εισαγωγή/απομάκρυνση βέλους: Δεξί πάτημα δύο τετράγνω.
}

# Nag buttons in comment editor:
translate G GoodMove {Καλή κίνηση}
translate G PoorMove {Φτωχή κίνηση}
translate G ExcellentMove {Εξαίρετη κίνηση}
translate G Blunder {Σφάλμα}
translate G InterestingMove {Ενδιαφέρουσα κίνηση}
translate G DubiousMove {Αμφίβολη κίνηση}
translate G WhiteDecisiveAdvantage {Τα Λευκά έχουν αποφασιστικό πλεονέκτημα}
translate G BlackDecisiveAdvantage {Τα Μαύρα έχουν αποφασιστικό πλεονέκτημα}
translate G WhiteClearAdvantage {Τα Λευκά έχουν σαφές προβάδισμα}
translate G BlackClearAdvantage {Τα Μαύρα έχουν σαφές προβάδισμα}
translate G WhiteSlightAdvantage {Τα Λευκά έχουν μικρό πλεονέκτημα}
translate G BlackSlightAdvantage {Τα Μαύρα έχουν μικρό πλεονέκτημα}
translate G Equality {Ισότητα}
translate G Unclear {Ασαφής}
translate G Diagram {Διάγραμμα}

# Board search:
translate G BoardSearch {Αναζήτηση σκακιέρας}
translate G FilterOperation {Χειρισμός για το τρέχον φίλτρο:}
translate G FilterAnd {AND (Περιορισμός φίλτρου)}
translate G FilterOr {OR (Προσθήκη στο φίλτρο)}
translate G FilterIgnore {IGNORE (Επαναφορά φίλτρου)}
translate G SearchType {Ειδος αναζήτησης:}
translate G SearchBoardExact {Ακριβής θέση (όλα τα κομμάτια στα ίδια τετράγωνα)}
translate G SearchBoardPawns {Πιόνια (ίδιο υλικό, όλα τα πιόνια στα ίδια τετράγωνα)}
translate G SearchBoardFiles {Γραμμή (ίδιο υλικό, όλα τα πιόνια στις ίδιες γραμμές)}
translate G SearchBoardAny {Οπουδήποτε (ίδιο υλικό, πιόνια και κομμάτια οπουδήποτε)}
translate G SearchInRefDatabase {Αναζήτηση στην βάση αναφοράς}
translate G LookInVars {Αναζήτηση στις βαριάντες}

# Material search:
translate G MaterialSearch {Αναζήτηση υλικού}
translate G Material {Υλικό}
translate G Patterns {Διάταξη}
translate G Zero {Μηδέν}
translate G Any {Ό,τιδήποτε}
translate G CurrentBoard {Τρέχουσα σκακιέρα}
translate G CommonEndings {Κοινά φινάλε}
translate G CommonPatterns {Κοινές διατάξεις}
translate G MaterialDiff {Διαφορά υλικού}
translate G squares {τετράγωνα}
translate G SameColor {Ιδίου χρώματος}
translate G OppColor {Αντίθετου χρώματος}
translate G Either {Οποιοδήποτε}
translate G MoveNumberRange {Εύρος αριθμού κίνησης}
translate G MatchForAtLeast {Να ταιριάζουνβ τουλάχιστον}
translate G HalfMoves {μισές κινήσεις}

# Common endings in material search:
translate G EndingPawns {Φινάλε πιονιών}
translate G EndingRookVsPawns {Πύργων εναντίον πιονιών}
translate G EndingRookPawnVsRook {Πύργος και 1 Πύργος εναντίον πύργου}
translate G EndingRookPawnsVsRook {Πύργος και πιόνι(α) εναντίον Πύργου}
translate G EndingRooks {Φινάλε Πύργου εναντίον Πύργου}
translate G EndingRooksPassedA {Φινάλε Πύργου εναντίον Πύργου με προχωρημένο α-πιόνι}
translate G EndingRooksDouble {Φινάλε διπλού Πύργου}
translate G EndingBishops {Φινάλε Αξιωματικού εναντίον Αξιωματικού}
translate G EndingBishopVsKnight {Φινάλε Αξιωματικού εναντίον Ίππου}
translate G EndingKnights {Φινάλε Ίππου εναντίον Ίππου}
translate G EndingQueens {Φινάλε Βασίλισσας εναντίον Βασίλισσας}
translate G EndingQueenPawnVsQueen {Βασίλισσα και 1 Πιόνι εναντίον Βασίλισσας}
translate G BishopPairVsKnightPair {Μέσον παρτίδας με δύο Αξιωματικούς εναντίον δυο Αξιωματικών}

# Common patterns in material search:
translate G PatternWhiteIQP {Λευκό ΑΠΒ}
translate G PatternWhiteIQPBreakE6 {Λευκό ΑΠΒ: διείσδηση d4-d5 έναντι e6}
translate G PatternWhiteIQPBreakC6 {Λευκό ΑΠΒ: διείσδησηW d4-d5 έναντι c6}
translate G PatternBlackIQP {Μαύρο ΑΠΒ}
translate G PatternWhiteBlackIQP {Λευκό ΑΠΒ εναντίον Μαύρου ΑΠΒ}
translate G PatternCoupleC3D4 {Ζεύγος Λευκών πιονιών c3+d4}
translate G PatternHangingC5D5 {Μαύρα κρεμασμένα Πιόνια στα c5 και d5}
translate G PatternMaroczy {Κέντρο Maroczy (με Πιόνια στα c4 και e4)}
translate G PatternRookSacC3 {Θυσία Πύργου στο c3}
translate G PatternKc1Kg8 {O-O-O εναντίον O-O (Kc1 εναντίον Kg8)}
translate G PatternKg1Kc8 {O-O εναντίον O-O-O (Kg1 εναντίον Kc8)}
translate G PatternLightFian {Φιανκέττο λευκού τετραγώνου (Αξιωματικός-g2 εναντίον Αξιωματικού-b7)}
translate G PatternDarkFian {Φιανκέττο μαύρου τετραγώνου (Αξιωματικός-b2 εναντίον Αξιωματικού-g7)}
translate G PatternFourFian {Τέσσερα Φιανκέττα (Αξιωματικοί στα b2,g2,b7,g7)}

# Game saving:
translate G Today {Σήμερα}
translate G ClassifyGame {Ταξινόμηση παρτίδας}

# Setup position:
translate G EmptyBoard {Κενή σκακιέρα}
translate G InitialBoard {Αρχική σκακιέρα}
translate G SideToMove {Πλευρά που παίζει}
translate G MoveNumber {Αριθμός κίνησης}
translate G Castling {Ροκέ}
translate G EnPassantFile {Γραμμή en passant}
translate G ClearFen {Καθαρισμός FEN}
translate G PasteFen {Επικόληση FEN}

translate G SaveAndContinue {Αποθήκευση και συνέχιση}
translate G DiscardChangesAndContinue {Ακύρωση αλλαγών \nκαι συνέχιση}
translate G GoBack {Προς τα πίσω}

# Replace move dialog:
translate G ReplaceMove {Αντικατάσταση κίνησης}
translate G AddNewVar {Προσθήκη νέας βαριάντας}
translate G NewMainLine {Νέα κύρια γραμμή}
translate G ReplaceMoveMessage {Υπάρχει ήδη μια κίνηση εδώ.

Μπορείτε να την αντικαταστήσετε ακυρώνοντας όλες τις κινήσεις μετά από αυτήν ή να προσθέσετε την κίνησή σας ως νέα βαριάντα.

(Μπορείτε να αποφύγετε την εμφάνιση αυτού του μηνύματος στο μέλλον απενεργοποιώντας την επιλογή "Ερώτηση πριν την αντικατάσταση κίνησης" από το μενού Επιλογές:Κινήσεις.)}

# Make database read-only dialog:
translate G ReadOnlyDialog {Αν δηλώσετε αυτή την βάση δεδομένεν μόνον για ανάγνωση, δεν θα επιτρέπονται οι αλλαγές.
Δεν θα μπορούν να αποθηκευθούν ή να αντικατασταθούν παρτίδες και δεν θα μπορούν να αντικατασταθούν οι σημαίες διαγραφής.
Κάθε ταξινόμηση ή αποτελέσματα ταξινομημένα κατά ΕCO, θα είναι προσωρινά.

Μπορείτε εύκολα να δηλώσετε την βάση δεδομένων και πάλι ως εγγράψιμη, κλείνοντας και ανοίγοντάς την εκ νέου.

Θέλετε στ' αλήθεια να γίνει αυτή η βάση μόνον για ανάγνωση;}

# Clear game dialog:
translate G ClearGameDialog {Η παρτίδα αυτή έχει αντικατασταθεί.

Θέλετε στ' αλήθεια να συνεχίσετε και να ακυρώσετε τις αλλαγές που κάνατε σε αυτήν;
}

# Exit dialog:
translate G ExitDialog {Θέλετε στ' αλήθεια να βγείτε από το Scid;}
translate G ExitUnsaved {Οι βάσεις δεδομένων που ακολουθούν έχουν μη αποθηκευμένες αλλαγές παρτίδων. Αν βγείτε τώρα οι αλλαγές αυτές θα χαθούν.}

# Import window:
translate G PasteCurrentGame {Επικόλληση τρέχουσας παρτίδας}
translate G ImportHelp1 {Εισάγετε ή επικολλήστε παρτίδα σε μορφη PGN στο παραπάνω πλαίσιο.}
translate G ImportHelp2 {Εδώ θα εμφανίζεται οποιοδήποτε σφάλμα κατά την εισαγωγή παρτίδας.}
translate G OverwriteExistingMoves {Αντικατάσταση υπαρχόντων κινήσεων;}

# ECO Browser:
translate G ECOAllSections {όλες οι ενότητες ECO}
translate G ECOSection {ενότητας ECO}
translate G ECOSummary {Περίληψη της}
translate G ECOFrequency {Συχνότητα υποκωδίκων για}

# Opening Report:
translate G OprepTitle {Έκθεση ανοίγματος}
translate G OprepReport {Έκθεση/αναφορά}
translate G OprepGenerated {Δημιουργήθηκε από τον/την}
translate G OprepStatsHist {Στατιστικά και Ιστορικό}
translate G OprepStats {Στατιστικά}
translate G OprepStatAll {Όλες οι παρτίδες της αναφοράς}
translate G OprepStatBoth {Βαθμολογήθηκαν}
translate G OprepStatSince {Από}
translate G OprepOldest {Παλαιότερες παρτίδες}
translate G OprepNewest {Νεότερες παρτίδες}
translate G OprepPopular {Τρέχουσα δημοτικότητα}
translate G OprepFreqAll {Συχνότητα σε όλα τα χρόνια:   }
translate G OprepFreq1   {Από το έτος  1 έως σήμερα: }
translate G OprepFreq5   {Από το έτος  5 έως σήμερα: }
translate G OprepFreq10  {Από το έτος 10 έως σήμερα: }
translate G OprepEvery {μια φορά κάθε %u παρτίδες}
translate G OprepUp {%u%s έτη και άνω}
translate G OprepDown {%u%s έτη και κάτω}
translate G OprepSame {χωρίς αλλαγή σε όλα τα έτη}
translate G OprepMostFrequent {Πιο συχνοί παίκτες}
translate G OprepMostFrequentOpponents {Πιο συχνοί αντίπαλοι}
translate G OprepRatingsPerf {Βαθμολογήσεις και επιδόσεις}
translate G OprepAvgPerf {Μέσες βαθμολογήσεις και επιδόσεις}
translate G OprepWRating {Βαθμολόγηση Λευκών}
translate G OprepBRating {Βαθμολόγηση Μαύρων}
translate G OprepWPerf {Επίδοση Λευκών}
translate G OprepBPerf {Επίδοση Μαύρων}
translate G OprepHighRating {Παρτίδες με υψηλότερη μέση βαθμολόγηση}
translate G OprepTrends {Τάσεις αποτελεσμάτων}
translate G OprepResults {Μήκη και συχνότητες αποτελεσμάτων}
translate G OprepLength {Μήκος παρτίδας}
translate G OprepFrequency {Συχνότητα}
translate G OprepWWins {Τα Λευκά κερδίζουν: }
translate G OprepBWins {Τα Μαύρα κερδίζουν: }
translate G OprepDraws {Ισοπαλίες:      }
translate G OprepWholeDB {ολόκληρη η βάση δεδομένων}
translate G OprepShortest {Οι συντομότερες νίκες}
translate G OprepMovesThemes {Κινήσεις και Θέματα}
translate G OprepMoveOrders {Σειρές κινήσεων που καταλήγουν στην θέση}
translate G OprepMoveOrdersOne \
  {Υπάρχει μόνο μια σειρά κινήσεων που καταλήγει στην θέση αυτή:}
translate G OprepMoveOrdersAll \
  {Υπάρχουν %u σειρές κινήσεων που καταλήγουν στην θέση αυτή:}
translate G OprepMoveOrdersMany \
  {Υπάρχουν %u σειρές κινήσεων που καταλήγουν στην θέση αυτή. Οι πρώτες %u είναι:}
translate G OprepMovesFrom {Κινήσεις από την θέση}
translate G OprepMostFrequentEcoCodes {Συχνότεροι κωδικοί ECO}
translate G OprepThemes {Θέματα θέσης}
translate G OprepThemeDescription {Συχνότητα θεμάτων κατά τις πρώτες %u κινήσεις κάθε παρτίδας}
translate G OprepThemeSameCastling {Ομόπλευρα ροκέ}
translate G OprepThemeOppCastling {Αντίθετα ροκέ}
translate G OprepThemeNoCastling {Και οι δυο Βασιλιάδες χωρίς ροκέ}
translate G OprepThemeKPawnStorm {Επίθεση πιονιών Βασιλιά}
translate G OprepThemeQueenswap {Ανταλλαγή Βασιλισσών}
translate G OprepThemeWIQP {Λευκό απομονωμένο πιόνι Βασίλισσας}
translate G OprepThemeBIQP {Μαύρο απομονωμένο πιόνι Βασίλισσας}
translate G OprepThemeWP567 {Λευκό πιόνι στην 5/6/7η σειρά}
translate G OprepThemeBP234 {Μαύρο πιόνι στην 2/3/4η σειρά}
translate G OprepThemeOpenCDE {Ανοικτή Open c/d/e στήλη}
translate G OprepTheme1BishopPair {Μόνον η μια πλευρά διαθέτει ζεύγος Αξιωματικών}
translate G OprepEndgames {Φινάλε}
translate G OprepReportGames {Αναφορά παρτίδων}
translate G OprepAllGames    {Όλες οι παρτίδες}
translate G OprepEndClass {Υλικό στο τέλος κάθε παρτίδας}
translate G OprepTheoryTable {Πίνακας ανοιγμάτων}
translate G OprepTableComment {Δημιουργήθηκε από τις %u με την υψηλότερη βαθμολογία.}
translate G OprepExtraMoves {Επιπλέον κινήσεις στις σημειώσεις του πίνακα ανοιγμάτων}
translate G OprepMaxGames {Μέγιστος αριθμός παρτίδων στον πίνακα ανοιγμάτων}
translate G OprepViewHTML {Εμφάνιση HTML}
translate G OprepViewLaTeX {Εμφάνιση LaTeX}

# Player Report:
translate G PReportTitle {Έκθεση παίκτη}
translate G PReportColorWhite {με τα Λευκά κομμάτια}
translate G PReportColorBlack {με τα Μαύρα κομμάτια}
translate G PReportMoves {μετά από %s}
translate G PReportOpenings {Ανοίγματα}
translate G PReportClipbase {Διαγραφή της προσωρινής μνήμης clipbase και αντιγραφή σε αυτήν των παρτίδων που ταιριάζουν}

# Piece Tracker window:
translate G TrackerSelectSingle {Το αριστερό πλήκτρο του ποντικιού επιλέγει το κομμάτι αυτό.}
translate G TrackerSelectPair {Το αριστερό πλήκτρο του ποντικιού επιλέγει το κομμάτι αυτό, το δεξιό πλήκτρο επιλέγει το ταίρι του.}
translate G TrackerSelectPawn {Το αριστερό πλήκτρο επιλέγει το πιόνι αυτό, το δεξιό πλήκτρο επιλέγει και τα 8 πιόνια.}
translate G TrackerStat {Στατιστικά}
translate G TrackerGames {% παρτίδες με κίνηση στο τετράγωνο}
translate G TrackerTime {% χρόνο σε κάθε τετράγωνο}
translate G TrackerMoves {Κινήσεις}
translate G TrackerMovesStart {Εισάγετε τον αριθμό της κίνησης από την οποία θα ξεκινήσει η ανίχνευση.}
translate G TrackerMovesStop {Εισάγετε τον αριθμό της κίνησης στην οποία θα σταματήσει η ανίχνευση.}

# Game selection dialogs:
translate G SelectAllGames {Όλες οι παρτίδες της βάσης δεδομένων}
translate G SelectFilterGames {Μόνο παρτίδες στο φίλτρο}
translate G SelectTournamentGames {Μόνο παρτίδες του προκριματικού}
translate G SelectOlderGames {Μόνο παλαιότερες παρτίδες}

# Delete Twins window:
translate G TwinsNote {Για να είναι δίδυμες, δυο παρτίδες πρέπει να έχουν τουλάχιστον τους ίδιους παίκτες και τα κριτήρια που θα ορίσετε πιο κάτω. Όταν εντοπίζεται κάποιο ζεύγος δίδυμων, η μικρότερης διάρκειας παρτίδα διαγράφεται. Συμβουλή: πρέπει να ελέγχετε την ορθογραφία της βάσης δεδομένων πριν διαγράψετε δίδυμες παρτίδες, διότι βελτιώνει τον εντοπισμό τους.}
translate G TwinsCriteria {Κριτήρια: Οι δίδυμες παρτίδες πρέπει να διαθέτουν...}
translate G TwinsWhich {Εξέταση ποιάς παρτίδας}
translate G TwinsColors {Με παίκτη ιδίου χρώματος;}
translate G TwinsEvent {Με ίδια διοργάνωση;}
translate G TwinsSite {Με ίδια τοποθεσία;}
translate G TwinsRound {Με ίδιο γύρο;}
translate G TwinsYear {Με ίδιο έτος;}
translate G TwinsMonth {Με ίδιο μήνα;}
translate G TwinsDay {Με ίδια ημέρα;}
translate G TwinsResult {Με ίδιο αποτέλεσμα;}
translate G TwinsECO {Με ίδιο κωδικό ECO;}
translate G TwinsMoves {Με ίδιες κινήσεις}
translate G TwinsPlayers {Σύγκριση ονομάτων παικτών:}
translate G TwinsPlayersExact {Ταιριάζουν ακριβώς}
translate G TwinsPlayersPrefix {Μόνο τα 4 πρώτα γράμματα}
translate G TwinsWhen {Όταν διαγράφονται δίδυμες παρτίδες}
translate G TwinsSkipShort {Να αγνοούνται όλες οι παρτίδες με μήκος μικρότερο των 5 κινήσεων;}
translate G TwinsUndelete {Πρώτα να διαγραφούν όλες οι παρτίδες;}
translate G TwinsSetFilter {Να μπουν φίλτρα σε όλες τις διαγραμμένες δίδυμες παρτίδες;}
translate G TwinsComments {Πάντοτε διατήρηση των παρτίδων με σχόλια;}
translate G TwinsVars {Πάντοτε διατήρηση των παρτίδων με βαριάντες;}
translate G TwinsDeleteWhich {Διαγραφή της παρτίδας:}
translate G TwinsDeleteShorter {Συντομότερη παρτίδα}
translate G TwinsDeleteOlder {Ο μικρότερος αριθμός παρτίδας}
translate G TwinsDeleteNewer {Ο μεγαλύτερος αριθμός παρτίδας}
translate G TwinsDelete {Διαγραφή παρτίδας}

# Name editor window:
translate G NameEditType {Τύπος του προς επεξεργασία ονόματος}
translate G NameEditSelect {Παρτίδες για επεξεργασία}
translate G NameEditReplace {Αντικατάσταση}
translate G NameEditWith {με}
translate G NameEditMatches {Ταιριάσματα: Για επιλογή, πατήστε Ctrl+1 έως Ctrl+9}

# Check games window:
translate G CheckGames {Έλεγχος παρτίδων}
translate G CheckGamesWhich {Έλεγχος παρτίδων}
translate G CheckAll {Όλες οι παρτίδες}
translate G CheckSelectFilterGames {Μόνον οι παρτίδες του φίλτρου}

# Classify window:
translate G Classify {Ταξινόμηση}
translate G ClassifyWhich {Ταξινόμηση κατά ECO των εξής παρτίδων}
translate G ClassifyAll {Όλες οι παρτίδες (αντικατάσταση των παλαιών κωδίκων κατά ECO)}
translate G ClassifyYear {Όλες οι παρτίδες που παίχτηκαν την προηγούμενη χρονιά}
translate G ClassifyMonth {Όλες οι παρτίδες που παίχτηκαν τον προηγούμενο μήνα}
translate G ClassifyNew {Μόνον παρτίδες χωρίς ακόμη κώδικα ECO}
translate G ClassifyCodes {Κωδικοί ECO προς χρήση}
translate G ClassifyBasic {Μόνον βασικοί κωδικοί ("B12", ...)}
translate G ClassifyExtended {Επεκτάσεις Scid ("B12j", ...)}

# Compaction:
translate G NameFile {Αρχείο ονομάτων}
translate G GameFile {Αρχείο παρτίδων}
translate G Names {Ονόματα}
translate G Unused {Μη χρησιμοποιημένα}
translate G SizeKb {Μέγεθος (kb)}
translate G CurrentState {Τρέχουσα κατάσταση}
translate G AfterCompaction {Μετά την συμπίεση}
translate G CompactNames {Συμπιεσμένο αρχείο ονομάτων}
translate G CompactGames {Συμπιεσμένο αρχείο παρτίδων}
translate G NoUnusedNames "Δεν υπάρχουν ονόματα που δεν χρησιμοποιούνται, γι' αυτό το αρχείο ονομάτων είναι πλήρως συμπιεσμένο."
translate G NoUnusedGames "Το αρχείο παρτίδων είναι ήδη πλήρως συμπιεσμένο."
translate G NameFileCompacted {Το αρχείο ονομάτων για την βάση δεδομένων "[file tail [sc_base filename]]" συμπιέστηκε.}
translate G GameFileCompacted {Το αρχείο παρτίδων για την βάση δεδομένων "[file tail [sc_base filename]]" συμπιέστηκε.}

# Sorting:
translate G SortCriteria {Κριτήρια}
translate G AddCriteria {Προσθήκη κριτηρίων}
translate G CommonSorts {Κοινές ταξινομήσεις}
translate G Sort {Ταξινόμηση}

# Exporting:
translate G AddToExistingFile {Να προστεθούν οι παρτίδες σε υπάρχον αρχείο;}
translate G ExportComments {Να εξαχθούν τα σχόλια;}
translate G ExportVariations {Να εξαχθούν οι βαριάντες}
translate G IndentComments {Να έχουν εσοχές τα σχόλια;}
translate G IndentVariations {Να έχουν εσοχές οι βαριάντες;}
translate G ExportColumnStyle {Είδος στήλης (μια κίνηση ανά γραμμή);}
translate G ExportSymbolStyle {Είδος συμβολικού υπομνηματισμού:}
translate G ExportStripMarks {Να απομακρυνθούν τα σημάδια τετραγώνου/βέλους από τα σχόλια;}

# Goto game/move dialogs:
translate G LoadGameNumber {Εισάγετε τον αριθμό παρτίδας για φόρτωση:}
translate G GotoMoveNumber {Μετάβαση στην κίνηση αριθμός:}

# Copy games dialog:
translate G CopyGames {Αντιγραφή παρτίδων}
translate G CopyConfirm {
 Θέλετε πράγματι να αντιγράψετε τις
 [::utils::thousands $nGamesToCopy] φιλτραρισμένες παρτίδες
 της βάσης δεδομένων "$fromName"
 στην βάση δεδομένων "$targetName";
}
translate G CopyErr {Αδύνατη η αντιγραφή των παρτίδων}
translate G CopyErrSource {η αρχική βάση δεδομένων}
translate G CopyErrTarget {η τελική βάση δεδομένων}
translate G CopyErrNoGames {δεν διαθέτει παρτίδες στο φίλτρο της}
translate G CopyErrReadOnly {είναι μόνον για ανάγνωση}
translate G CopyErrNotOpen {δεν είναι ανοικτή}

# Colors:
translate G LightSquares {Λευκά τετράγωνα}
translate G DarkSquares {Μαύρα τετράγωνα}
translate G SelectedSquares {Επιλεγμένα τετράγωνα}
translate G SuggestedSquares {Τετράγωνα που προτείνονται για την κίνηση}
translate G WhitePieces {Λευκά κομμάτια}
translate G BlackPieces {Μαύρα κομμάτια}
translate G WhiteBorder {Λευκό περίγραμμα}
translate G BlackBorder {Μαύρο περίγραμμα}

# Novelty window:
translate G FindNovelty {Εύρεση νεοτερισμού}
translate G Novelty {Νεοτερισμός}
translate G NoveltyInterrupt {Η αναζήτηση νεοτερισμού διακόπηκε}
translate G NoveltyNone {Δεν βρέθηκε νεοτερισμός για αυτή την παρτίδα}
translate G NoveltyHelp {
Το Scid θα βρει την πρώτη κίνηση της τρέχουσας παρτίδας η οποία καταλήγει σε θέση που δεν υπάρχει στην επιλεχθείσα βάση δεδομένων ή στο βιβλίο ECO των ανοιγμάτων.
}

# Sounds configuration:
translate G SoundsFolder {Κατάλογος αρχείων ήχου}
translate G SoundsFolderHelp {Ο κατάλογος πρέπει να περιέχει τα αρχεία King.wav, a.wav, 1.wav, κλπ.}
translate G SoundsAnnounceOptions {Επιλογές αναγγελίας κίνησης}
translate G SoundsAnnounceNew {Αναγγελία των νέων κινήσεων καθώς εκτελούνται}
translate G SoundsAnnounceForward {Αναγγελία όταν πρόκειται για μια κίνηση προς τα εμπρός}
translate G SoundsAnnounceBack {Αναγγελία όταν πρόκειται για αναδρομή ή για κίνηση προς τα πίσω}

# Upgrading databases:
translate G Upgrading {Ενημέρωση}
translate G ConfirmOpenNew {
Αυτή η βάση δεδομένων είναι παλαιάς μορφής (Scid 3) την οποία δεν μπορεί να ανοίξει το Scid 4, αλλά έχει ήδη δημιουργηθεί μια έκδοσή της νέας μορφής (Scid 4).

Θέλετε να ανοίξετε την βάση δεδομένων νέας μορφής;
}
translate G ConfirmUpgrade {
Αυτή η βάση δεδομένων είναι παλαιάς μορφής (Scid 3). Πρέπει να δημιουργηθεί μια βάση νέας μορφής για το Scid 4.

Η ανανέωση θα δημιουργήσει μια νέα έκδοση της βάσης δεδομένων και κατόπιν θα διαγράψει τα αρχικά αρχεία.

Αυτό ίσως διαρκέσει λίγο χρόνο, αλλά θα χρειαστεί να το κάνετε μόνο μια φορά. Μπορείτε να ακυρώσετε την διαδικασία αν διαρκεί πάρα πολύ.

Θέλετε να ενημερώσετε αυτή την βάση δεδομένων τώρα;
}

# Recent files options:
translate G RecentFilesMenu {Πλήθος των πρόσφατων αρχείων του μενού Αρχείο}
translate G RecentFilesExtra {Πλήθος των πρόσφατων αρχείων του επιπλέον υπομενού}

# My Player Names options:
translate G MyPlayerNamesDescription {
Δημιουργήστε παρακάτω μια λίστα των ονομάτων των προτιμόμενων παικτών, ένα για κάθε γραμμή. Τα συμβολα μπαλαντέρ (π.χ. "?" για κάνε έναν μοναδικό χαρακτήρα, "*" για οποιαδήποτε ακολουθία χαρακτήρων) επιτρέπονται.

Κάθε φορά που θα φορτώνεται μια παρτίδα με παίκτη που υπάρχειστην λίστα, αν είναι απαραίτητο η σκακιέρα του κυρίως παραθύρου θα περιστρέφεται ώστε η παρτίδα να προβάλεται από την μεριά αυτού του παίκτη.
}

#Coach
translate G showblunderexists {εμφάνιση ότι το σφάλμα υπάρχει}
translate G showblundervalue {εμφάνιση της αξίας του σφάλματος}
translate G showscore {εμφάνιση σκορ}
translate G coachgame {διδασκαλία παρτίδας}
translate G configurecoachgame {Προσαρμογή τακτικής παρτίδας}
translate G configuregame {Προσαρμογή παρτίδας}
translate G Phalanxengine {Μηχανή Phalanx}
translate G Coachengine {Μηχανή Coach}
translate G difficulty {δυσκολία}
translate G hard {δύσκολη}
translate G easy {εύκολη}
translate G Playwith {Παιχνίδι με}
translate G white {λευκά}
translate G black {μαύρα}
translate G both {και τα δυο}
translate G Play {Παιχνίδι}
translate G Noblunder {Χωρίς σφάλματα}
translate G blunder {σφάλμα}
translate G Noinfo {-- Καμια πληροφορία --}
translate G PhalanxOrTogaMissing {Δεν βρέθηκε Phalanx ή Toga}
translate G moveblunderthreshold {η κίνηση είναι σφάλμα αν η απώλεια είναι μεγαλύτερη από}
translate G limitanalysis {περιορισμός του χρόνου ανάλυσης της μηχανής}
translate G seconds {δευτερόλεπτα}
translate G Abort {Ματαίωση}
translate G Resume {Επανάληψη}
translate G OutOfOpening {Εκτός ανοίγματος}
translate G NotFollowedLine {Δεν ακολοθήσατε την γραμμή}
translate G DoYouWantContinue {Θέλετε να συνεχίσετε;}
translate G CoachIsWatching {Ο προπονητής παρακολουθεί}
translate G Ponder {Μόνιμη σκέψη}
translate G LimitELO {Περιορισμός της δύναμης ELO}
translate G DubiousMovePlayedTakeBack {Η κίνηση που παίχτηκε είναι αμφίβολη, θέλετε να την αναιρέσετε;}
translate G WeakMovePlayedTakeBack {Η κίνηση που παίχτηκε είναι αδύναμη, θέλετε να την αναιρέσετε;}
translate G BadMovePlayedTakeBack {Η κίνηση που παίχτηκε είναι κακή, θέλετε να την αναιρέσετε;}
translate G Iresign {Παραιτούμαι}
translate G yourmoveisnotgood {η κίνησή σας δεν είναι καλή}
translate G EndOfVar {Τέλος βαριάντας}
translate G Openingtrainer {Προπόνηση ανοιγμάτων}
translate G DisplayCM {Εμφάνιση υποψήφιων κινήσεων}
translate G DisplayCMValue {Εμφάνιση των αξιών των υποψήφιων κινήσεων}
translate G DisplayOpeningStats {Εμφάνιση στατιστικών}
translate G ShowReport {Εμφάνιση έκθεσης}
translate G NumberOfGoodMovesPlayed {οι καλές κινήσεις που παίχτηκαν}
translate G NumberOfDubiousMovesPlayed {οι αμφίβολες κινήσεις που παίχτηκαν}
translate G NumberOfMovesPlayedNotInRepertoire {οι κινήσεις που παίχτηκαν δεν υπάρχουν στο ρεπερτόριο}
translate G NumberOfTimesPositionEncountered {φορές εμφάνισης της θέσης}
translate G PlayerBestMove  {Να επιτρέπονται μόνον οι καλύτερες κινήσεις}
translate G OpponentBestMove {Ο αντίπαλος παίζει τις καλύτερες κινήσεις}
translate G OnlyFlaggedLines {Μόνον γραμμές με σημαίες}
translate G resetStats {Μηδενισμός στατιστικών}
translate G Repertoiretrainingconfiguration {Προσαρμογή προπόνησης ρεπερτορίου}
translate G Loadingrepertoire {Φόρτωση ρεπερτορίου}
translate G Movesloaded {Κινήσεις που φορτώθηκαν}
translate G Repertoirenotfound {Το ρεπερτόριο δεν βρέθηκε}
translate G Openfirstrepertoirewithtype {Πρώτα άνοιγμα μιας βάσης δεδομένων ρεπερτορίου με την εικόνα ή/και τον τύπο τοποθετημένη στην δεξιά πλευρά}
translate G Movenotinrepertoire {Η κίνηση δεν υπάρχει στο ρεπερτόριο}
translate G PositionsInRepertoire {Θέσεις στο ρεπερτόριο}
translate G PositionsNotPlayed {Θέσεις που δεν παίχτηκαν}
translate G PositionsPlayed {Θέσεις που παίχτηκαν}
translate G Success {Επιτυχία}
translate G DubiousMoves {Αμφίβολες κινήσεις}
translate G OutOfRepertoire {Εκτός ρεπερτορίου}
translate G ConfigureTactics {Προσαρμογή τακτικής}
translate G ResetScores {Μηδενισμός σκορ}
translate G LoadingBase {Φόρτωση βάσης}
translate G Tactics {Τακτική}
translate G ShowSolution {Εμφάνιση λύσης}
translate G NextExercise {Επόμενη άσκηση}
translate G PrevExercise {Προηγούμενη άσκηση}
translate G StopTraining {Διακοπή προπόνησης}
translate G Next {Επόμενο}
translate G ResettingScore {Μηδενισμός σκορ}
translate G LoadingGame {Φόρτωση παρτίδας}
translate G MateFound {Βρέθηκε ματ}
translate G BestSolutionNotFound {Δεν βρέθηκε βέλτιστη λύση !}
translate G MateNotFound {Δεν βρέθηκε ματ}
translate G ShorterMateExists {Υπάρχει συντομότερο ματ}
translate G ScorePlayed {Score played}
translate G Expected {αναμενόμενη}
translate G ChooseTrainingBase {Επιλογή προπονητικής βάσης δεδομένων}
translate G Thinking {Ανάλυση}
translate G AnalyzeDone {Η ανάλυση ολοκληρώθηκε}
translate G WinWonGame {Κερδισμένη παρτίδα}
translate G Lines {Γραμμές}
translate G ConfigureUCIengine {Προσαρμογή μηχανής UCI}
translate G SpecificOpening {Συγκεκριμένο άνοιγμα}
translate G StartNewGame {Έναρξη νέας παρτίδας}
translate G FixedLevel {Σταθερό επίπεδο}
translate G Opening {Άνοιγμα}
translate G RandomLevel {Τυχαίο επίπεδο}
translate G StartFromCurrentPosition {Εκκίνηση από την τρέχουσα θέση}
translate G FixedDepth {Σταθερού βάθους}
translate G Nodes {Κόμβοι}
translate G Depth {Βάθος}
translate G Time {Χρόνος} 
translate G SecondsPerMove {Δευτερόλεπτα ανά κίνηση}
translate G Engine {Μηχανή}
translate G TimeMode {Λειτουργία χρόνου}
translate G TimeBonus {Χρόνος + δώρο}
translate G TimeMin {min}
translate G TimeSec {sec}
translate G AllExercisesDone {Ολοκληρώθηκαν όλες οι ασκήσεις}
translate G MoveOutOfBook {Κίνηση εκτός βιβλίου}
translate G LastBookMove {Κίνηση τελευταίου βιβλίου}
translate G AnnotateSeveralGames {Υπομνηματισμός πολλαπλών παρτίδων \nαπό την τρέχουσα σε :}
translate G FindOpeningErrors {Εύρεση σφαλμάτων ανοιγμάτων}
translate G MarkTacticalExercises {Σημάδεμα ασκήσεων τακτικής}
translate G UseBook {Χρήση του βιβλίου}
translate G MultiPV {Πολλαπλές βαριάντες}
translate G Hash {Μνήμη κατατεμαχισμού (hash)}
translate G OwnBook {Χρήση του βιβλίου της μηχανής}
translate G BookFile {Βιβλίο ανοιγμάτων}
translate G AnnotateVariations {Υπομνηματισμός βαριαντών}
translate G ShortAnnotations {Σύντομος υπομνηματισμός}
translate G addAnnotatorTag {Προσθήκη εκτικέτας του υπομνηματιστή}
translate G AddScoreToShortAnnotations {Προσθήκη σκορ στους υπομνηματισμούς}
translate G Export {Εξαγωγή}
translate G BookPartiallyLoaded {Το βιβλίο φορτώθηκε μερικώς}
translate G Calvar {Υπολογισμο βαριαντών}
translate G ConfigureCalvar {Προσαρμογή}
# Opening names used in tacgame.tcl
translate G Reti {Reti}
translate G English {Αγγλική}
translate G d4Nf6Miscellaneous {1.d4 Nf6 Διάφορες άλλες}
translate G Trompowsky {Trompowsky}
translate G Budapest {Βουδαπέστης}
translate G OldIndian {Παλαιά Ινδική}
translate G BenkoGambit {Γκαμπί Benko}
translate G ModernBenoni {Σύγχρονη Benoni}
translate G DutchDefence {Ολλανδική άμυνα}
translate G Scandinavian {Σκανδιναβική}
translate G AlekhineDefence {Άμυνα Αλιέχιν}
translate G Pirc {Pirc}
translate G CaroKann {Caro-Kann}
translate G CaroKannAdvance {Caro-Kann Advance}
translate G Sicilian {Σικελική}
translate G SicilianAlapin {Σικελική Αλάπιν}
translate G SicilianClosed {Σικελική Κλειστή}
translate G SicilianRauzer {Σικελική Rauzer}
translate G SicilianDragon {Σικελικός Δράκος}
translate G SicilianScheveningen {Σικελική Σεβενίγκεν}
translate G SicilianNajdorf {Sicilian Νάιντορφ}
translate G OpenGame {Ανοικτή παρτίδα}
translate G Vienna {Βιέννη}
translate G KingsGambit {Γκαμπί του Βασιλιά}
translate G RussianGame {Ρωσική παρτίδα}
translate G ItalianTwoKnights {Ιταλική/Δυο Ίππων}
translate G Spanish {Ισπανική}
translate G SpanishExchange {Ισπανική Ανταλλαγής}
translate G SpanishOpen {Ισπανικό άνοιγμα}
translate G SpanishClosed {Ισπανική Κλειστή}
translate G FrenchDefence {Γαλλική Άμυνα}
translate G FrenchAdvance {Γαλλική Advance}
translate G FrenchTarrasch {Γαλλική Τάρρας}
translate G FrenchWinawer {Γαλλική Γουίναγουερ}
translate G FrenchExchange {Γαλλική Ανταλλαγής}
translate G QueensPawn {Πιόνι Βασίλισσας}
translate G Slav {Σλαβική}
translate G QGA {Γκαμπί της Βασίλισσας Αποδεκτό (QGA)}
translate G QGD {Γκαμπί της Βασίλισσας μη Αποδεκτό (QGD)}
translate G QGDExchange {Γκαμπί της Βασίλισσας μη Αποδεκτό Ανταλλαγής}
translate G SemiSlav {Ημι-Σλαβική}
translate G QGDwithBg5 {Γκαμπί της Βασίλισσας μη Αποδεκτό με Bg5}
translate G QGDOrthodox {Ορθόδοξο Γκαμπί της Βασίλισσας μη Αποδεκτό}
translate G Grunfeld {Γρκύνφελντ}
translate G GrunfeldExchange {Γκρύνφελντ Ανταλλαγής}
translate G GrunfeldRussian {Γκρύνφελντ Ρωσική}
translate G Catalan {Καταλανική}
translate G CatalanOpen {Καταλανική Ανοικτή}
translate G CatalanClosed {Καταλανική Κλειστή}
translate G QueensIndian {Ινδική της Βασίλισσας}
translate G NimzoIndian {Νιμτσοϊνδική}
translate G NimzoIndianClassical {Κλασσική Νιμτσοϊνδική}
translate G NimzoIndianRubinstein {Νιμτσοϊνδική Ρουμπινστάιν}
translate G KingsIndian {Ινδική του Βασιλιά}
translate G KingsIndianSamisch {Ινδική του Βασιλιά Σέμις}
translate G KingsIndianMainLine {Κύρια Γραμμή Ινδικής του Βασιλιά}

# FICS
translate G ConfigureFics {Προσαρμογή FICS}
translate G FICSGuest {Σύνδεση ως Καλεσμένος/η}
translate G FICSServerPort {Θύρα Διακομηστή}
translate G FICSServerAddress {Διεύθυνση IP}
translate G FICSRefresh {Ανανέωση}
translate G FICSTimesealPort {Θύρα Timeseal}
translate G FICSSilence {Φίλτρο κονσόλας}
translate G FICSOffers {Προσφορές}
translate G FICSConsole {Κονσόλα}
translate G FICSGames {Παρτίδες}
translate G FICSUnobserve {Διακοπή παρακολούθησης παρτίδας}
translate G FICSProfile {Εμφάνιση του ιστορικού και του προφίλ σας}
translate G FICSRelayedGames {Αναμεταδιδόμενες παρτίδες}
translate G FICSFindOpponent {Εύρεση αντιπάλου}
translate G FICSTakeback {Αναίρεση}
translate G FICSTakeback2 {Αναίρεση 2}
translate G FICSInitTime {Αρχικός χρόνος (min)}
translate G FICSIncrement {Προσαύξηση (sec)}
translate G FICSRatedGame {Παρτίδα βαθμολόγησης}
translate G FICSAutoColour {αυτόματο}
translate G FICSManualConfirm {χειροκίνηση επιβεβαίωση}
translate G FICSFilterFormula {Φίλτρο με φόρμουλα}
translate G FICSIssueSeek {Αναζήτηση τεύχους}
translate G FICSChallenge {Πρόκληση}
translate G FICSAccept {αποδεκτή}
translate G FICSDecline {μη αποδεκτή}
translate G FICSColour {Χρώμα}
translate G FICSSend {αποστολή}
translate G FICSConnect {Σύνδεση}
translate G FICSdefaultuservars {Χρήση αρχικών μεταβλητών}
translate G FICSObserveconfirm {Θέλετε να παρακολουθήσετε την παρτίδα}
# ====== TODO To be translated ======
translate G FICSpremove {Enable premove}

# Game review
translate G GameReview {Επισκόπηση παρτίδας}
translate G GameReviewTimeExtended {Ο χρόνος επεκτάθηκε}
translate G GameReviewMargin {Περιθώριο λάθους}
translate G GameReviewAutoContinue {Αυτόματη συνέχιση όταν η κίνηση είναι σωστή}
translate G GameReviewReCalculate {Χρήση εκτεταμένου χρόνου}
translate G GameReviewAnalyzingMovePlayedDuringTheGame {Γίνεται ανάλυση της κίνησης που παίχτηκε κατά την διάρκεια της παρτίδας}
translate G GameReviewAnalyzingThePosition {Γίνεται ανάλυση της θέσης}
translate G GameReviewEnterYourMove {Εισάγετε την κίνησή σας}
translate G GameReviewCheckingYourMove {Ελέγχεται η κίνησή σας}
translate G GameReviewYourMoveWasAnalyzed {Η κίνησή σας αναλύθηκε}
translate G GameReviewYouPlayedSameMove {Παίξατε την ίδια κίνηση όπως και στο ματς}
translate G GameReviewScoreOfYourMove {Το σκορ της κίνησής σας}
translate G GameReviewGameMoveScore {Το σκορ κίνησης της παρτίδας}
translate G GameReviewEngineScore {Το σκορ της μηχανής}
translate G GameReviewYouPlayedLikeTheEngine {Παίξατε το ίδιο καλά με την μηχανή}
translate G GameReviewNotEngineMoveButGoodMove {Η κίνηση δεν είναι της μηχανής, αλλά είναι μια καλή κίνηση}
translate G GameReviewMoveNotGood {Η κίνηση αυτή δεν είναι καλή, το σκορ είναι}
translate G GameReviewMovesPlayedLike {Κινήσεις που παίχτηκαν σαν}
translate G GameReviewMovesPlayedEngine {Κινήσεις που παίχτηκαν σαν της μηχανής}

# Correspondence Chess Dialogs:
translate G CCDlgConfigureWindowTitle {Προσαρμογή Σκακιού Δι' αλληλογραφίας}
translate G CCDlgCGeneraloptions {Γενκές επιλογές}
translate G CCDlgDefaultDB {Αρχική Βάση δεδομένων:}
translate G CCDlgInbox {ΕισερχόμεναInbox (διαδρομή):}
translate G CCDlgOutbox {Εξερχόμενα (διαδρομή):}
translate G CCDlgXfcc {Παραμετροποίηση Xfcc:}
translate G CCDlgExternalProtocol {Χειριστής Εξωτερικού Πρωτοκόλου (π.χ. Xfcc)}
translate G CCDlgFetchTool {Εργαλείο ανάκτησης:}
translate G CCDlgSendTool {Εργαλείο αποστολής:}
translate G CCDlgEmailCommunication {Επικοινωνία eMail}
translate G CCDlgMailPrg {Πρόγραμμα αλληλογραφίας:}
translate G CCDlgBCCAddr {Διεύθυνση (B)CC:}
translate G CCDlgMailerMode {Λειτουργία:}
translate G CCDlgThunderbirdEg {π.χ. Thunderbird, Mozilla Mail, Icedove...}
translate G CCDlgMailUrlEg {π.χ. Evolution}
translate G CCDlgClawsEg {π.χ. Sylpheed Claws}
translate G CCDlgmailxEg {π.χ. mailx, mutt, nail...}
translate G CCDlgAttachementPar {Παράμτερος επισυναπτόμενου:}
translate G CCDlgInternalXfcc {Χρήση της εσωτερικής υποστήριξης Xfcc}
translate G CCDlgConfirmXfcc {Επιβεβαίωση κινήσεων}
translate G CCDlgSubjectPar {Παράμετρος Θέματος:}
translate G CCDlgDeleteBoxes {Κενό Εισ/Εξερχόμενα}
translate G CCDlgDeleteBoxesText {Θέλετε πράγματι να αδειάσετε τους καταλόγους Εισερχομένων και Εξερχομένων;\nΚάτι τέτοιο απαιτεί έναν νέο συγχρονισμός για να εμφανιστεί η πρόσφατη κατάσταση των παρτίδων σας.}
translate G CCDlgConfirmMove {Επιβεβαίωση κίνησης}
translate G CCDlgConfirmMoveText {Αν επιβεβαιώσετε, θα σταλούν στον διακομηστή η ακόλουθη κίνηση και το ακόλουθο σχόλιο:}
translate G CCDlgDBGameToLong {Αντιφατική Mainline}
translate G CCDlgDBGameToLongError {Η mainline της βάσης δεδομένων σας είναι μεγαλύτερη από ό,τι η παρτίδα στα Εισερχόμενά σας. Αν τα Εισερχόμενα περιέχουν τρέχουσες παρτίδες, δηλαδή, αμέσως μετά από έναν συγχρονισμός, κάποιες κινήσεις προστέθηκαν στην mainline της βάσης δεδομένων με τρόπο λανθασμένο.

Στην περίπτωση αυτή συντομεύστε την mainline στην κίνηση (μέγιστο)
}


translate G CCDlgStartEmail {Έναρξη νέας παρτίδας με eMail}
translate G CCDlgYourName {Το όνομά σας:}
translate G CCDlgYourMail {Η ηλ. διεύθυνσή σας:}
translate G CCDlgOpponentName {Όνομα αντιπάλου:}
translate G CCDlgOpponentMail {Ηλ. διεύθυνση αντιπάλου:}
translate G CCDlgGameID {Ταυτότητα παρτίδας (μοναδική):}

translate G CCDlgTitNoOutbox {Scid: Εξερχόμενα Σκακιού Δι' Αλληλογραφίας}
translate G CCDlgTitNoInbox {Scid: Εισερχόμενα Σκακιού Δι' Αλληλογραφίας}
translate G CCDlgTitNoGames {Scid: Δεν υπάρχουν παρτίδες δι' αλληλογραφίας}
translate G CCErrInboxDir {Κατάλογος εισερχομένων σκακιού δι' αλληλογραφίας:}
translate G CCErrOutboxDir {Κατάλογος εξερχομένων σκακιού δι' αλληλογραφίας:}
translate G CCErrDirNotUsable {δεν υπάρχει ή δεν είναι προσβάσιμος!\nΠαρακαλώ ελέγξτε και διορθώστε τις ρυθμίσεις.}
translate G CCErrNoGames {does not contain any games!\nPlease fetch them first.}

translate G CCDlgTitNoCCDB {Scid: Δεν υπάρχει βάση δεδομένων αλληλογραφίας}
translate G CCErrNoCCDB {Δεν ανοίχτηκε κάποια βάση δεδομένων τύπου 'Αλληλογραφία'. Παρακαλώ ανοίξτε μια πριν χρησιμοποιήσετε τις λειτουργίες σκακιού δι' αλληλογραφίας.}

translate G CCFetchBtn {Ανάκτηση παρτίδων από τον διακομηστή και επεξεργασία Εισερχομένων}
translate G CCPrevBtn {Μετάβαση σε προηγούμενη παρτίδα}
translate G CCNextBtn {Μετάβαση σε επόμενη παρτίδα}
translate G CCSendBtn {Αποστολή κίνησης}
translate G CCEmptyBtn {Εκκένωση Εισερχομένων και Εξερχομένων}
translate G CCHelpBtn {Βοήθεια για τα εικονίδια και τους δείκτες κατάστασης.\nΓια γενική Βοήθεια πατήστε F1!}

translate G CCDlgServerName {ΌΝομα διακομηστή:}
translate G CCDlgLoginName  {Όνομα σύνδεσης:}
translate G CCDlgPassword   {Κωδικός:}
translate G CCDlgURL        {Xfcc-URL:}
translate G CCDlgRatingType {Τύπως αξιολόγησης:}

translate G CCDlgDuplicateGame {Μη μοναδική ταυτότητα παρτίδας}
translate G CCDlgDuplicateGameError {Η παρτίδα αυτή υπάρχει περισσότερες από μια φορές στην βάση δεδομένων σας. Παρακαλώ διαγράψτε τις διπλότυπες και συμπιέστε το αρχείο παρτίδων σας (Αρχείο/Συντήρηση/Συμπίεση βάσης δεδομένων).}

translate G CCDlgSortOption {Ταξινόμηση:}
translate G CCDlgListOnlyOwnMove {Μόνον παρτίδες στις οποίες παίζω εγώ}
translate G CCOrderClassicTxt {Τοποθεσία, Διοργάνωση, Γύρος, Αποτέλεσμα, Λευκά, Μαύρα}
translate G CCOrderMyTimeTxt {Το ρολόι μου}
translate G CCOrderTimePerMoveTxt {Χρόνος ανά κίνηση μέχρι τον επόμενο έλεγχο χρόνου}
translate G CCOrderStartDate {Ημερομηνία έναρξης}
translate G CCOrderOppTimeTxt {Ρολόι αντιπάλου}

translate G CCDlgConfigRelay {Παρακολούθηση παρτίδων}
translate G CCDlgConfigRelayHelp {Μετάβαση στην σελίδα παρτίδας http://www.iccf-webchess.com και εμφάνιση της παρτίδας για παρακολούθηση. Αν βλέπετε την σκακιέρα αντιγράψτε την διεύθυνση URL από τον φυλλομετρητή σας στην παρακάτω λίστα. Μόνον ένα URL ανά γραμμή!\nΠαράδειγμα: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}

# Connect Hardware dialogs
translate G ExtHWConfigConnection {Προσαρμογή εξωτερικών συσκευών}
translate G ExtHWPort {Θύρα}
translate G ExtHWEngineCmd {Εντολή μηχανής}
translate G ExtHWEngineParam {Παράμετροι μηχανής}
translate G ExtHWShowButton {Εμφάνιση κουμπιού}
translate G ExtHWHardware {Συσκευές}
translate G ExtHWNovag {Novag Citrine}
translate G ExtHWInputEngine {Μηχανής εισόδου}
translate G ExtHWNoBoard {No board}
translate G NovagReferee {Διαιτητής}

# Input Engine dialogs
translate G IEConsole {Κονσόλα εισόδου μηχανής}
translate G IESending {Κινήσεις που εστάλησαν για}
translate G IESynchronise {Συγχρονισμός}
translate G IERotate  {Περιστροφή}
translate G IEUnableToStart {Αδυναμία εκκίνησης της μηχανής εισόδου:}


# Calculation of Variations
translate G DoneWithPosition {Ολοκλήρωση της θέσης}

translate G Board {Σκακιέρα}
translate G showGameInfo {Εμφάνιση πληροφοριών παρτίδας}
translate G autoResizeBoard {Αυτόματη αλλαγή μεγέθους σκακιέρας}
translate G DockTop {Μετάβαση στην κορυφή}
translate G DockBottom {Μετάβαση στο κάτω μέρος}
translate G DockLeft {Μετάβαση αριστερά}
translate G DockRight {Μετάβαση δεξιά}
translate G Undock {Αποκόληση}

# Switcher window
translate G ChangeIcon {Αλλαγή εικονιδίου...}

}
# end of greek.tcl
# hungary.tcl:
# Hungarian text for menu names and status bar help messages for SCID
# Translated by: Gbor Szts

addLanguage H Hungarian 0 iso8859-2

proc setLanguage_H {} {

# File menu:
menuText H File "Fjl" 0
menuText H FileNew "j..." 0 {j SCID-adatbzis ltrehozsa}
menuText H FileOpen "Megnyit..." 3 {Meglv SCID-adatbzis megnyitsa}
menuText H FileClose "Bezr" 2 {Az aktv SCID-adatbzis bezrsa}
menuText H FileFinder "Fjlkeres" 0 {Kinyitja a Fjlkeres ablakot.}
menuText H FileBookmarks "Knyvjelzk" 0 {Knyvjelzmen (gyorsbillenty: Ctrl+B)}
menuText H FileBookmarksAdd "j knyvjelz" 0 \
  {Megjelli az aktulis jtszmt s llst.}
menuText H FileBookmarksFile "Knyvjelz mentse" 11 \
  {Az llshoz tartoz knyvjelzt kln knyvtrba teszi.}
menuText H FileBookmarksEdit "Knyvjelzk szerkesztse..." 13 \
  {Knyvjelzk szerkesztse}
menuText H FileBookmarksList "Megjelents listaknt" 13 \
  {A knyvjelzk knyvtrai nem almenknt, hanem listaknt jelennek meg.}
menuText H FileBookmarksSub "Megjelents almenknt" 13 \
  {A knyvjelzk knyvtrai nem listaknt, hanem almenknt jelennek meg.}
menuText H FileMaint "Gondozs" 0 {SCID adatbzisgondoz eszkzk}
menuText H FileMaintWin "Adatbzisgondoz ablak" 0 \
  {Kinyitja/becsukja az SCID adatbzisgondoz ablakot.}
menuText H FileMaintCompact "Adatbzis tmrtse..." 10 \
  {Eltvoltja az adatbzisbl a trlt jtszmkat s a hasznlaton kvl ll neveket.}
menuText H FileMaintClass "Osztlyba sorols..." 0 \
  {jra kiszmtja az sszes jtszma ECO-kdjt.}
menuText H FileMaintSort "Rendezs..." 0 \
  {Rendezi az adatbzis sszes jtszmjt.}
menuText H FileMaintDelete "Ikerjtszmk trlse..." 0 \
  {Megkeresi az ikerjtszmkat, s megjelli ket trlsre.}
menuText H FileMaintTwin "Ikerkeres ablak" 4 \
  {Kinyitja/becsukja az ikerkeres ablakot.}
menuText H FileMaintName "Nevek helyesrsa" 0 {Nvszerkeszt s helyesrsi eszkzk}
menuText H FileMaintNameEditor "Nvszerkeszt" 0 \
  {Kinyitja/becsukja a nvszerkeszt ablakot.}
menuText H FileMaintNamePlayer "Jtkosnevek ellenrzse..." 0 \
  {A helyesrs-ellenrz fjl segtsgvel ellenrzi a jtkosok nevt.}
menuText H FileMaintNameEvent "Esemnynevek ellenrzse..." 0 \
  {A helyesrs-ellenrz fjl segtsgvel ellenrzi esemnyek nevt.}
menuText H FileMaintNameSite "Helynevek ellenrzse..." 0 \
  {A helyesrs-ellenrz fjl segtsgvel ellenrzi a helysznek nevt.}
menuText H FileMaintNameRound "Fordulnevek ellenrzse..." 0 \
  {A helyesrs-ellenrz fjl segtsgvel ellenrzi a fordulk nevt.}
menuText H FileReadOnly "rsvdelem..." 0 \
  {Az aktulis adatbzist csak olvashatv teszi, nehogy meg lehessen vltoztatni.}
menuText H FileSwitch "Adatbzisvlts" 0 \
  {tvlt egy msik megnyitott adatbzisra.}
menuText H FileExit "Kilp" 2 {Kilp SCID-bl.}
menuText H FileMaintFixBase "Megrongldott adatbzis javtsa" 25 {Megprblja megjavtani a megrongldott adatbzist.}

# Edit menu:
menuText H Edit "Szerkeszts" 1
menuText H EditAdd "j vltozat" 0 {Ennl a lpsnl j vltozatot szr be a jtszmba.}
menuText H EditDelete "Vltozat trlse" 9 {Trl egy vltozatot ennl a lpsnl.}
menuText H EditFirst "Els vltozatt tesz" 0 \
  {Els helyre teszi a vltozatot a listn.}
menuText H EditMain "Fvltozatt tesz" 0 \
  {A vltozatot fvltozatt lpteti el.}
menuText H EditTrial "Vltozat kiprblsa" 0 \
  {Elindtja/meglltja a prbazemmdot, amellyel egy elgondolst lehet a tbln kiprblni.}
menuText H EditStrip "Lecsupaszt" 2 {Eltvoltja a megjegyzseket vagy a vltozatokat ebbl a jtszmbl.}
# ====== TODO To be translated ======
menuText H EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText H EditRedo "Redo" 0 {Redo last game change}
menuText H EditStripComments "Megjegyzsek" 0 \
  {Eltvoltja az sszes megjegyzst s elemzst ebbl a jtszmbl.}
menuText H EditStripVars "Vltozatok" 0 {Eltvoltja az sszes vltozatot ebbl a jtszmbl.}
menuText H EditStripBegin "Az elejtl" 3 \
  {Levgja a jtszma elejt}
menuText H EditStripEnd "A vgig" 2 \
  {Levgja a jtszma vgt}
menuText H EditReset "Kirti a Vgasztalt" 2 \
  {Alaphelyzetbe hozza a Vgasztalt, hogy az teljesen res legyen.}
menuText H EditCopy "A Vgasztalra msolja ezt a jtszmt." 15 \
  {Ezt a jtszmt tmsolja a Vgasztal adatbzisba.}
menuText H EditPaste "Beilleszti az utols jtszmt a Vgasztalrl." 0 \
  {A Vgasztal aktv jtszmjt beilleszti ide.}
menuText H EditPastePGN "A vglap tartalmt PGN-jtszmaknt beilleszti" 20 \
  {A vglap tartalmt PGN-jells jtszmnak tekinti, s idemsolja.}
menuText H EditSetup "Kezdlls fellltsa..." 14 \
  {Fellltja a kezdllst ehhez a jtszmhoz.}
menuText H EditCopyBoard "lls msolsa FEN-knt" 17 \
  {Az aktulis llst FEN-jellssel a vglapra msolja.}
menuText H EditPasteBoard "Kezdlls beillesztse" 13 \
  {Fellltja a kezdllst kijellt szveg (vglap) alapjn.}

# Game menu:
menuText H Game "Jtszma" 0
menuText H GameNew "j jtszma" 0 \
  {j jtszmt kezd; a vltoztatsokat elveti.}
menuText H GameFirst "Betlti az els jtszmt." 11 {Betlti az els szrt jtszmt.}
menuText H GamePrev "Betlti az elz jtszmt." 12 {Betlti az elz szrt jtszmt.}
menuText H GameReload "Ismt betlti az aktulis jtszmt." 0 \
  {jra betlti ezt a jtszmt; elvet minden vltoztatst.}
menuText H GameNext "Betlti a kvetkez jtszmt." 10 {Betlti a kvetkez szrt jtszmt.}
menuText H GameLast "Betlti az utols jtszmt." 11 {Betlti az utols szrt jtszmt.}
menuText H GameRandom "Vletlenszeren betlt egy jtszmt." 0 {Vletlenszeren betlt egy szrt jtszmt.}
menuText H GameNumber "Megadott sorszm jtszma betltse..." 9 \
  {Betlti a sorszmmal megadott jtszmt.}
menuText H GameReplace "Ments cservel..." 7 \
  {Elmenti ezt a jtszmt; fellrja a rgi vltozatot.}
menuText H GameAdd "Ments j jtszmaknt..." 0 \
  {Elmenti ezt a jtszmt; j jtszmt hoz ltre az adatbzisban.}
menuText H GameDeepest "Megnyits azonostsa" 10 \
  {Az ECO-knyvben szerepl legnagyobb mlysgig megy bele a jtszmba.}
menuText H GameGotoMove "Ugrs megadott sorszm lpshez..." 1 \
  {Megadott sorszm lpshez ugrik az aktulis jtszmban.}
menuText H GameNovelty "jts keresse..." 1 \
  {Megkeresi ebben a jtszmban az els olyan lpst, amely korbban nem fordult el.}

# Search Menu:
menuText H Search "Keress" 0
menuText H SearchReset "Szr trlse" 6 {Alaphelyzetbe hozza a szrt, hogy az sszes jtszma benne legyen.}
menuText H SearchNegate "Szr neglsa" 6 {Neglja a szrt, hogy csak a kizrt jtszmk legyenek benne.}
menuText H SearchCurrent "Aktulis lls..." 0 {A tbln lv llst keresi.}
menuText H SearchHeader "Fejlc..." 0 {Keress fejlc (jtkos, esemny, stb.) alapjn}
menuText H SearchMaterial "Anyag/szerkezet..." 6 {Keress anyag vagy llsszerkezet alapjn}
menuText H SearchUsing "Keresfjl hasznlata..." 0 {Keress SearchOptions fjl hasznlatval}

# Windows menu:
menuText H Windows "Ablakok" 0
menuText H WindowsComment "Megjegyzsszerkeszt" 0 {Megnyitja/bezrja a megjegyzsszerkesztt.}
menuText H WindowsGList "Jtszmk listja" 9 {Kinyitja/becsukja a jtszmk listjt mutat ablakot.}
menuText H WindowsPGN "PGN" 0 \
  {Kinyitja/becsukja a PGN-(jtszmajegyzs)-ablakot.}
menuText H WindowsPList "Jtkoskeres" 0 {Kinyitja/becsukja a jtkoskerest.}
menuText H WindowsTmt "Versenykeres" 0 {Kinyitja/becsukja a versenykerest.}
menuText H WindowsSwitcher "Adatbzisvlt" 0 \
  {Kinyitja/becsukja az adatbzisvlt ablakot.}
menuText H WindowsMaint "Adatbzisgondoz" 9 \
  {Kinyitja/becsukja az adatbzisgondoz ablakot.}
menuText H WindowsECO "ECO-bngsz" 0 {Kinyitja/becsukja az ECO-bngsz ablakot.}
menuText H WindowsRepertoire "Repertorszerkeszt" 0 \
  {Megnyitja/bezrja a megnyitsi repertorszerkesztt.}
menuText H WindowsStats "Statisztika" 0 \
  {Kinyitja/becsukja a szrsi statisztika ablakt.}
menuText H WindowsTree "Faszerkezet" 0 {Kinyitja/becsukja a faszerkezet-ablakot.}
menuText H WindowsTB "Vgjtktblzatok" 8 \
  {Kinyitja/becsukja a vgjtktblzatok ablakt.}
menuText H WindowsBook "Megnyitstrablak" 3 {Kinyitja/becsukja a megnyitstrablakot.}
menuText H WindowsCorrChess "Levelezsi sakk" 14 {Open/close the Correspondence window}

# Tools menu:
menuText H Tools "Eszkzk" 0
menuText H ToolsAnalysis "Elemz motor..." 0 \
  {Elindt/lellt egy sakkelemz programot.}
menuText H ToolsAnalysis2 "Msodik elemz motor..." 1 \
  {Elindtja/lelltja a 2. sakkelemz programot.}
menuText H ToolsCross "Versenytblzat" 0 {Megmutatja az ehhez a jtszmhoz tartoz verseny tblzatt.}
menuText H ToolsEmail "Levelezsi sakk" 0 \
  {Kinyitja/becsukja az elektronikus sakklevelezs lebonyoltsra szolgl ablakot.}
menuText H ToolsFilterGraph "Szrgrafikon" 0 \
  {Kinyitja/becsukja a szrgrafikont mutat ablakot.}
menuText H ToolsAbsFilterGraph "Abszolt szrgrafikon" 0 {Kinyitja/becsukja az abszolt rtkeket mutat szrgrafikon-ablakot}
menuText H ToolsOpReport "Megnyitsi sszefoglal" 0 \
  {Ismertett kszt az aktulis llshoz tartoz megnyitsrl.}
menuText H ToolsOpenBaseAsTree "Adatbzis megnyitsa faknt" 10   {Faszerkezet-ablakban megnyit egy adatbzist.}
menuText H ToolsOpenRecentBaseAsTree "Nemrg hasznlt adatbzis megnyitsa faknt" 7   {Faszerkezet-ablakban megnyit egy nemrg hasznlt adatbzist.}
menuText H ToolsTracker "Figurakvet"  0 {Kinyitja/becsukja a figurakvet ablakot.}
menuText H ToolsTraining "Edzs"  0 {Segdeszkzk edzshez (taktika, megnyits,...) }
menuText H ToolsTacticalGame "Taktikai jtszma"  0 {Taktikai jelleg jtszma kezdse}
menuText H ToolsSeriousGame "Komoly jtszma"  0 {Komoly jtszma kezdse}
menuText H ToolsTrainOpenings "Megnyits"  0 {Edzs repertorral}
# ====== TODO To be translated ======
menuText H ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
menuText H ToolsTrainTactics "Taktika"  0 {Feladvnyok megfejtse}
menuText H ToolsTrainCalvar "Vltozatszmts"  0 {Vltozatszmts gyakorlsa}
menuText H ToolsTrainFindBestMove "Legjobb lps"  0 {A legjobb lps megkeresse}
menuText H ToolsTrainFics "Internetes jtszma"  0 {Jtk a freechess.org szerveren}
# ====== TODO To be translated ======
menuText H ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText H ToolsBookTuning "Megnyitstr-hangols" 13 {Megnyitstr-hangols}
menuText H ToolsConnectHardware "Hardver csatlakoztatsa" 8 {Kls hardver csatlakoztatsa}
menuText H ToolsConnectHardwareConfigure "Bellts" 0 {Kls hardver s kapcsolat belltsa}
menuText H ToolsConnectHardwareNovagCitrineConnect "Novag Citrine csatlakoztatsa" 0 {Novag Citrine csatlakoztatsa}
menuText H ToolsConnectHardwareInputEngineConnect "Bejv motor csatlakoztatsa" 7 {Bejv motor (pl. DGT) csatlakoztatsa}
menuText H ToolsPInfo "Jtkosinformci"  0 \
  {Kinyitja/frissti a jtkos adatait tartalmaz ablakot.}
menuText H ToolsPlayerReport "sszefoglal jtkosrl..." 0 \
    {sszefoglalt kszt a jtkosrl}
menuText H ToolsRating "rtkszm alakulsa" 0\
  {Grafikusan brzolja, hogyan alakult az aktulis jtszma rsztvevinek rtkszma.}
menuText H ToolsScore "Eredmny alakulsa" 1 {Megmutatja az eredmnygrafikont.}
menuText H ToolsExpCurrent "Az aktulis jtszma exportlsa" 21 \
  {Szvegfjlba rja az aktulis jtszmt.}
menuText H ToolsExpCurrentPGN "Exportls PGN-fjlba..." 11 \
  {PGN-fjlba rja az aktulis jtszmt.}
menuText H ToolsExpCurrentHTML "Exportls HTML-fjlba..." 11 \
  {HTML-fjlba rja az aktulis jtszmt.}
menuText H ToolsExpCurrentHTMLJS "Jtszma exportlsa HTML s JavaScript fjlba" 28 {Az aktulis jtszmt HTML s JavaScript fjlba rja.}  
menuText H ToolsExpCurrentLaTeX "Exportls LaTeX-fjlba..." 11 \
  {LaTeX-fjlba rja az aktulis jtszmt.}
menuText H ToolsExpFilter "Az sszes szrt jtszma exportlsa" 11 \
  {Szvegfjlba rja az sszes szrt jtszmt.}
menuText H ToolsExpFilterPGN "Szr exportlsa PGN-fjlba..." 18 \
  {PGN-fjlba rja az sszes szrt jtszmt.}
menuText H ToolsExpFilterHTML "Szr exportlsa HTML-fjlba..." 18 \
  {HTML-fjlba rja az sszes szrt jtszmt.}
menuText H ToolsExpFilterHTMLJS "Szr exportlsa HTML s JavaScript fjlba" 30 {Az sszes kiszrt jtszmt HTML s JavaScript fjlba rja.}  
menuText H ToolsExpFilterLaTeX "Szr exportlsa LaTeX-fjlba..." 18 \
  {LaTeX-fjlba rja az sszes szrt jtszmt.}
menuText H ToolsImportOne "PGN-jtszma importlsa..." 0 \
  {PGN-formtum jtszma importlsa}
menuText H ToolsImportFile "PGN-fjl importlsa..." 2 \
  {PGN-fjl sszes jtszmjnak importlsa}
menuText H ToolsStartEngine1 "Az 1. motor elindtsa" 3  {Elindtja az 1. motort.}
menuText H ToolsStartEngine2 "A 2. motor elindtsa" 2  {Elindtja a 2. motort.}
# ====== TODO To be translated ======
menuText H ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
menuText H Play "Jtk" 0
menuText H CorrespondenceChess "Levelezsi sakk" 0 {Segdeszkzk eMail vagy Xfcc alap levelezsi sakkhoz}
menuText H CCConfigure "Belltsok" 0 {Kls eszkzk s alaptulajdonsgok}
# ====== TODO To be translated ======
menuText H CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
menuText H CCOpenDB "Adatbzis megnyitsa" 0 {Megnyitja az alaprtelmezs levelezsi adatbzist.}
menuText H CCRetrieve "Jtszmk bekrse" 0 {Jtszmk lekrdezse kls (Xfcc-) segdeszkz tjn}
menuText H CCInbox "Bejv postafik feldolgozsa" 7 {A SCID bejv postafikjban tallhat sszes fjl feldolgozsa}
menuText H CCSend "Lps elkldse" 8 {Lps elkldse eMail vagy kls (Xfcc-) segdeszkz tjn}
menuText H CCResign "Felads" 0 {Felads (nem eMail tjn)}
menuText H CCClaimDraw "Dntetlen ignylse" 10 {Lps elkldse s dntetlen ignylse (nem eMail tjn)}
menuText H CCOfferDraw "Dntetlenajnlat" 0 {Lps elkldse s dntetlenajnlat (nem eMail tjn)}
menuText H CCAcceptDraw "Dntetlenajnlat elfogadsa" 17 {Dntetlenajnlat elfogadsa (nem eMail tjn)}
menuText H CCNewMailGame "j eMail-es jtszma" 0 {j eMail-es jtszma kezdse}
menuText H CCMailMove "Lps elkldse" 4 {Lps elkldse az ellenflnek eMail tjn}
menuText H CCGamePage "Jtszmaoldal..." 0 {Bngszvel jelenti meg a jtszmt.}
# ====== TODO To be translated ======
menuText H CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText H Options "Belltsok" 0
menuText H OptionsBoard "Sakktbla" 0 {Sakktbla megjelensnek megvltoztatsa}
menuText H OptionsBoardSize "Tblamret" 0 {A tbla mretnek megvltoztatsa}
menuText H OptionsBoardPieces "Figurk stlusa" 0 {A figurk megjelensi formjnak megvltoztatsa}
menuText H OptionsBoardColors "Sznek..." 0 {A tbla szneinek megvltoztatsa}
menuText H OptionsBoardGraphics "Mezk..." 0 {A mezk rajzolatnak megvltoztatsa}
translate H OptionsBGW {A mezk rajzolatnak kivlasztsa}
translate H OptionsBoardGraphicsText {A vilgos s stt mezk grafikus fjljai:}
menuText H OptionsBoardNames "Jtkosnevek..." 0 {Jtkosnevek tszerkesztse}
menuText H OptionsExport "Exportls" 1 {Exportlsi belltsok vltoztatsa}
menuText H OptionsFonts "Karakterkszlet" 0 {Karakterkszlet vltoztatsa}
menuText H OptionsFontsRegular "Szoksos" 0 {A szoksos karakterkszlet vltoztatsa}
menuText H OptionsFontsMenu "Men" 0 {A menk karakterkszletnek a vltoztatsa}
menuText H OptionsFontsSmall "Kisbets" 0 {A kisbets karakterkszlet vltoztatsa}
# ====== TODO To be translated ======
menuText H OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText H OptionsFontsFixed "Rgztett" 0 {A rgztett szlessg karakterkszlet vltoztatsa}
menuText H OptionsGInfo "Jtszmainformci" 0 {Jtszmainformci vltoztatsa}
menuText H OptionsLanguage "Nyelv" 0 {A men nyelvnek kivlasztsa}
menuText H OptionsMovesTranslatePieces "Figurk nevnek lefordtsa" 0 {Lefordtja a figurk nevnek els betjt.}
# ====== TODO To be translated ======
menuText H OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText H OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText H OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText H OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText H OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText H OptionsMoves "Lpsek" 0 {Lpsek bevitelnek belltsai}
menuText H OptionsMovesAsk "Lps cserje eltt rkrdez." 6 \
  {Mieltt trna egy meglev lpst, rkrdez.}
menuText H OptionsMovesAnimate "Megelevents ideje" 0 \
  {Belltja az idt lpsek megeleventshez.}
menuText H OptionsMovesDelay "Automatikus visszajtszs ksleltetse..." 0 \
  {Belltja a ksleltetst automatikus visszajtszshoz.}
menuText H OptionsMovesCoord "Lps megadsa koordintkkal" 15 \
  {Koordintkkal megadott lpst ("g1f3") is elfogad.}
menuText H OptionsMovesSuggest "Javaslat" 0 \
  {Be/kikapcsolja a lpsjavaslatot.}
menuText H OptionsShowVarPopup "Vltozatok ablaka" 0 {Be- vagy kikapcsolja a vltozatokat megjelent ablakot.}  
menuText H OptionsMovesSpace "Szkzk a lps sorszma utn" 0 {Szkzkkel egszti ki a lps sorszmt.}  
menuText H OptionsMovesKey "Billenty-kiegszts" 0 \
  {Be/kikapcsolja a billentyzettel rszlegesen bevitt lpsek automatikus kiegsztst.}
# ====== TODO To be translated ======
menuText H OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText H OptionsNumbers "Szmformtum" 1 {Szmformtum kivlasztsa}
menuText H OptionsStartup "Indts" 0 {Az indtskor kinyitand ablakok kivlasztsa}
menuText H OptionsTheme "Tma" 0 {A program megjelensnek megvltoztatsa}
menuText H OptionsWindows "Ablakok" 0 {Ablakbelltsok}
menuText H OptionsWindowsIconify "Automatikus ikonizls" 12 \
  {A f ablak ikonizlsakor az sszes tbbit is ikonizlja.}
menuText H OptionsWindowsRaise "Automatikus elhozs" 12 \
  {Elhoz bizonyos ablakokat (pl. elrehalads-svokat), amikor el vannak takarva.}
menuText H OptionsSounds "Hangok..." 3 {Lpseket bejelent hangok definilsa}
menuText H OptionsWindowsDock "Ablakok helyhez rgztse" 8 {Dock windows}
menuText H OptionsWindowsSaveLayout "Elrendezs mentse" 11 {Ablakelrendezs mentse}
menuText H OptionsWindowsRestoreLayout "Elrendezs visszalltsa" 11 {Ablakelrendezs visszalltsa}
menuText H OptionsWindowsShowGameInfo "Jtszmainformci" 0 {Jtszma adatainak megjelentse ablakban}
menuText H OptionsWindowsAutoLoadLayout "Az els elrendezs automatikus betltse" 19 {Indulskor automatikusan betlti az els ablakelrendezst.}
menuText H OptionsToolbar "Eszkztr" 0 {A f ablak eszkztrnak sszelltsa}
menuText H OptionsECO "ECO-fjl betltse..." 2 {Betlti az ECO-osztlyoz fjlt.}
menuText H OptionsSpell "Helyesrs-ellenrz fjl betltse..." 0 \
  {Betlti a helyesrs-ellenrz fjlt.}
menuText H OptionsTable "Vgjtktblzatok knyvtra..." 0 \
  {Vgjtktblzat-fjl kivlasztsa; a knyvtrban lev sszes vgjtktblzatot hasznlatba veszi.}
menuText H OptionsRecent "Aktulis fjlok..." 3 \
  {A Fjl menben megjelentett aktulis fjlok szmnak megvltoztatsa}
menuText H OptionsBooksDir "A megnyitstr knyvtra" 6 {Kijelli a megnyitstr knyvtrt.}
menuText H OptionsTacticsBasesDir "Az adatbzisok knyvtra" 4 {Kijelli a taktikai (edzs) adatbzisok knyvtrt.}
menuText H OptionsSave "Belltsok mentse" 12 \
  "Minden bellthat rtket elment a $::optionsFile fjlba."
menuText H OptionsAutoSave "Belltsok automatikus mentse kilpskor." 0 \
  {Automatikusan elment minden belltst, amikor kilpsz SCID-bl.}

# Help menu:
menuText H Help "Segtsg" 0
menuText H HelpContents "Tartalomjegyzk" 0 {Megjelenti a tartalomjegyzket}
menuText H HelpIndex "Trgymutat" 1 {Megjelenti a trgymutatt}
menuText H HelpGuide "Rvid ismertet" 0 {Rvid ismertett nyjt a program hasznlatrl.}
menuText H HelpHints "Krds-felelet" 0 {Nhny hasznos tancs}
menuText H HelpContact "Cmek" 0 {Fontosabb internetcmek}
menuText H HelpTip "A nap tippje" 2 {Hasznos tipp SCID hasznlathoz}
menuText H HelpStartup "Indul ablak" 0 {A program indtsakor megjelen ablak}
menuText H HelpAbout "SCID-rl" 0 {Tjkoztats SCID-rl}

# Game info box popup menu:
menuText H GInfoHideNext "Elrejti a kvetkez lpst." 0
menuText H GInfoMaterial "Anyagi helyzetet." 0
menuText H GInfoFEN "FEN-formtum" 0
menuText H GInfoMarks "Mutatja a sznes mezket s nyilakat." 10
menuText H GInfoWrap "Hossz sorok trdelse" 0
menuText H GInfoFullComment "Teljes kommentr" 7
menuText H GInfoPhotos "Fnykpek" 1
menuText H GInfoTBNothing "Vgjtktblzatok: nincs informci" 20
menuText H GInfoTBResult "Vgjtktblzatok: csak eredmny" 20
menuText H GInfoTBAll "Vgjtktblzatok: eredmny s a legjobb lpsek" 42
menuText H GInfoDelete "Trli/helyrelltja ezt a jtszmt." 0
menuText H GInfoMark "Megjelli ezt a jtszmt/megsznteti a jellst." 0
menuText H GInfoInformant "Tjkoztat rtkek hatrainak belltsa" 0

# Main window buttons:
helpMsg H .main.fbutton.button.start {Ugrs a jtszma elejre  (billenty: Home)}
helpMsg H .main.fbutton.button.end {Ugrs a jtszma vgre  (billenty: End)}
helpMsg H .main.fbutton.button.back {Vissza egy lpssel  (billenty: balra mutat nyl)}
helpMsg H .main.fbutton.button.forward {Elre egy lpssel  (billenty: jobbra mutat nyl)}
helpMsg H .main.fbutton.button.intoVar {Belp egy vltozatba  (gyorsbillenty: v).}
helpMsg H .main.fbutton.button.exitVar {Kilp az aktulis vltozatbl  (gyorsbillenty: z).}
helpMsg H .main.fbutton.button.flip {Tbla elforgatsa  (gyorsbillenty: .)}
helpMsg H .main.fbutton.button.coords {Koordintk be- vagy kikapcsolsa  (gyorsbillenty: 0)}
helpMsg H .main.fbutton.button.stm {Be- vagy kikapcsolja a lpsjogot mutat ikont}
helpMsg H .main.fbutton.button.autoplay {Automatikus visszajtszs  (billenty: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg H .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg H .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg H .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate H Back {Vissza}
translate H Browse {Tallz}
translate H Cancel {Mgse}
translate H Continue {Tovbb}
translate H Clear {Trl}
translate H Close {Bezr}
translate H Contents {Tartalom}
translate H Defaults {Alaprtkek}
translate H Delete {Trl}
translate H Graph {Grafikon}
translate H Help {Segtsg}
translate H Import {Import}
translate H Index {Trgymutat}
translate H LoadGame {Jtszma betltse}
translate H BrowseGame {Jtszma nzegetse}
translate H MergeGame {Jtszma beolvasztsa}
translate H MergeGames {Jtszmk beolvasztsa}
translate H Preview {Elnzet}
translate H Revert {Elvet}
translate H Save {Ment}
translate H Search {Keres}
translate H Stop {llj}
translate H Store {Trol}
translate H Update {Frisst}
translate H ChangeOrient {Ablak elhelyezkedsnek vltoztatsa}
translate H ShowIcons {Ikonok megjelentse} ;# ***
translate H None {Nincs}
translate H First {Els}
translate H Current {Aktulis}
translate H Last {Utols}

# General messages:
translate H game {jtszma}
translate H games {jtszma}
translate H move {lps}
translate H moves {lps}
translate H all {mind}
translate H Yes {Igen}
translate H No {Nem}
translate H Both {Mindkett}
translate H King {Kirly}
translate H Queen {Vezr}
translate H Rook {Bstya}
translate H Bishop {Fut}
translate H Knight {Huszr}
translate H Pawn {Gyalog}
translate H White {Vilgos}
translate H Black {Stt}
translate H Player {Jtkos}
translate H Rating {rtkszm}
translate H RatingDiff {rtkszmklnbsg (vilgos - stt)}
translate H AverageRating {tlagos rtkszm}
translate H Event {Esemny}
translate H Site {Helyszn}
translate H Country {Orszg}
translate H IgnoreColors {A szn kzmbs}
translate H Date {Dtum}
translate H EventDate {Az esemny dtuma}
translate H Decade {vtized}
translate H Year {v}
translate H Month {Hnap}
translate H Months {janur februr mrcius prilis mjus jnius jlius augusztus szeptember oktber november december}
translate H Days {vasrnap htf kedd szerda cstrtk pntek szombat}
translate H YearToToday {Az utols egy vben}
translate H Result {Eredmny}
translate H Round {Fordul}
translate H Length {Hossz}
translate H ECOCode {ECO-kd}
translate H ECO {ECO}
translate H Deleted {trlt}
translate H SearchResults {A keress eredmnye}
translate H OpeningTheDatabase {Adatbzis megnyitsa}
translate H Database {Adatbzis}
translate H Filter {Szr}
translate H noGames {Nincs tallat}
translate H allGames {sszes jtszma}
translate H empty {res}
translate H clipbase {vgasztal}
translate H score {Eredmny}
translate H StartPos {Kezdlls}
translate H Total {sszesen}
translate H readonly {read-only} ;# ***

# Standard error messages:
translate H ErrNotOpen {Ez az adatbzis nincs megnyitva.}
translate H ErrReadOnly {Ez az adatbzis csak olvashat; nem lehet megvltoztatni.}
translate H ErrSearchInterrupted {Keress megszaktva; az eredmnyek hinyosak.}

# Game information:
translate H twin {iker}
translate H deleted {trlt}
translate H comment {megjegyzs}
translate H hidden {rejtett}
translate H LastMove {Utols lps}
translate H NextMove {Kvetkez}
translate H GameStart {Jtszma eleje}
translate H LineStart {Elgazs eleje}
translate H GameEnd {Jtszma vge}
translate H LineEnd {Elgazs vge}

# Player information:
translate H PInfoAll {Eredmnyek az <b>sszes</b> jtszma alapjn}
translate H PInfoFilter {Eredmnyek a <b>szrt</b> jtszmk alapjn}
translate H PInfoAgainst {Eredmnyek, ha az ellenfl}
translate H PInfoMostWhite {Leggyakoribb megnyitsok vilgosknt}
translate H PInfoMostBlack {Leggyakoribb megnyitsok sttknt}
translate H PInfoRating {rtkszm alakulsa}
translate H PInfoBio {letrajz}
translate H PInfoEditRatings {rtkszmok tszerkesztse}

# Tablebase information:
translate H Draw {Dntetlen}
translate H stalemate {patt}
translate H withAllMoves {az sszes lpssel}
translate H withAllButOneMove {egy hjn az sszes lpssel}
translate H with {with}
translate H only {csak}
translate H lose {vesztenek}
translate H loses {veszt}
translate H allOthersLose {minden ms veszt}
translate H matesIn {mates in}
translate H hasCheckmated {mattot adott}
translate H longest {leghosszabb}
translate H WinningMoves {Nyer lps}
translate H DrawingMoves {Dntetlenre vezet lps}
translate H LosingMoves {Veszt lps}
translate H UnknownMoves {Bizonytalan kimenetel lps}

# Tip of the day:
translate H Tip {Tipp}
translate H TipAtStartup {Tipp indulskor}

# Tree window menus:
menuText H TreeFile "Fjl" 0
menuText H TreeFileFillWithBase "Adatbzis betltse a gyorsttrba" 0 {Betlti a gyorsttrba a megnyitott adatbzis sszes jtszmjt.}
menuText H TreeFileFillWithGame "Jtszma betltse a gyorsttrba" 0 {Betlti a gyorsttrba a megnyitott adatbzis aktulis jtszmjt.}
menuText H TreeFileSetCacheSize "A gyorsttr mrete" 14 {Belltja a gyorsttr mrett.}
menuText H TreeFileCacheInfo "Gyorsttr-hasznlat" 12 {Tjkoztat a gyorsttr hasznlatrl}
menuText H TreeFileSave "Cache-fjl mentse" 11 {Elmenti a faszerkezet-cache-fjlt (.stc)}
menuText H TreeFileFill "Cache-fjl feltltse" 14 \
  {Feltlti a cache-fjlt gyakori megnyitsokkal.}
menuText H TreeFileBest "Legjobb jtszmk listja" 0 {Megmutatja a legjobb jtszmkat a frl.}
menuText H TreeFileGraph "Grafikon" 0 {Megmutatja ennek a fagnak a grafikonjt.}
menuText H TreeFileCopy "Szveg msolsa a vglapra" 0 \
  {A kirt statisztikai adatokat a vglapra msolja.}
menuText H TreeFileClose "Faablak bezrsa" 10 {Bezrja a faszerkezet-ablakot.}
menuText H TreeMask "Maszk" 0
menuText H TreeMaskNew "j" 0 {j maszk}
menuText H TreeMaskOpen "Megnyits" 0 {Maszk megnyitsa}
# ====== TODO To be translated ======
menuText H TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
menuText H TreeMaskSave "Ments" 5 {Maszk mentse}
menuText H TreeMaskClose "Bezrs" 0 {Maszk bezrsa}
menuText H TreeMaskFillWithGame "Feltlts jtszmval" 1 {Maszk feltltse jtszmval}
menuText H TreeMaskFillWithBase "Feltlts adatbzissal" 2 {Maszk feltltse az adatbzis sszes jtszmjval}
menuText H TreeMaskInfo "Informci" 0 {Az aktulis maszk fbb adatai}
# ====== TODO To be translated ======
menuText H TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText H TreeMaskSearch "Search" 0 {Search in current mask}
menuText H TreeSort "Rendezs" 0
menuText H TreeSortAlpha "ABC" 0
menuText H TreeSortECO "ECO-kd" 0
menuText H TreeSortFreq "Gyakorisg" 0
menuText H TreeSortScore "Pontszm" 0
menuText H TreeOpt "Belltsok" 0
menuText H TreeOptSlowmode "Lass zemmd" 0 {Lass frissts (nagy pontossg)}
menuText H TreeOptFastmode "Gyors zemmd" 0 {Gyors frissts (nincsenek lpscserk)}
menuText H TreeOptFastAndSlowmode "Gyors s lass zemmd" 1 {Gyors majd lass frissts}
menuText H TreeOptStartStop "Automatikus frissts" 0 {tvltja a faszerkezet-ablak automatikus frisstst.}
menuText H TreeOptLock "Rgzts" 0 {A ft az aktulis adatbzishoz kti ill. a ktst feloldja.}
menuText H TreeOptTraining "Edzs" 0 {Edzszemmd be- vagy kikapcsolsa}
menuText H TreeOptAutosave "Cache-fjl automatikus mentse" 11 \
  {A faablak bezrsakor automatikusan elmenti a cache-fjlt.}
menuText H TreeHelp "Segtsg" 0
menuText H TreeHelpTree "Segtsg a fhoz" 0
menuText H TreeHelpIndex "Tartalom" 0
translate H SaveCache {Cache mentse}
translate H Training {Edzs}
translate H LockTree {Rgzts}
translate H TreeLocked {rgztve}
translate H TreeBest {Legjobb}
translate H TreeBestGames {A fa legjobb jtszmi}
translate H TreeTitleRow \
  {    Lps  ECO       Gyakorisg  Eredm. tll Telj. tl.v}
translate H TreeTotal {SSZESEN}
translate H DoYouWantToSaveFirst {Akarod elbb menteni?}
translate H AddToMask {Add hozz a maszkhoz}
translate H RemoveFromMask {Vedd ki a maszkbl}
translate H AddThisMoveToMask {Add hozz ezt a lpst a maszkhoz}
# ====== TODO To be translated ======
translate H SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate H DisplayMask {Display Mask}
translate H Nag {NAG-kd}
translate H Marker {Jells}
translate H Include {Belevesz}
translate H Exclude {Kizr}
translate H MainLine {Fvltozat}
translate H Bookmark {Knyvjelz}
translate H NewLine {Soremels}
translate H ToBeVerified {Ellenrizni kell}
translate H ToTrain {Gyakorolni kell}
translate H Dubious {Ktes}
translate H ToRemove {Trlni kell}
translate H NoMarker {Nincs jells}
translate H ColorMarker {Szn}
translate H WhiteMark {Fehr}
translate H GreenMark {Zld}
translate H YellowMark {Srga}
translate H BlueMark {Kk}
translate H RedMark {Piros}
translate H CommentMove {Lps kommentlsa}
translate H CommentPosition {lls kommentlsa}
translate H AddMoveToMaskFirst {Elbb add hozz a lpst a maszkhoz}
translate H OpenAMaskFileFirst {Elbb nyiss meg egy maszkfjlt}
translate H Positions {llsok}
translate H Moves {Lpsek}

# Finder window:
menuText H FinderFile "Fjl" 0
menuText H FinderFileSubdirs "Keress az alknyvtrakban" 0
menuText H FinderFileClose "A fjlkeres bezrsa" 15
menuText H FinderSort "Rendezs" 0
menuText H FinderSortType "Tpus" 0
menuText H FinderSortSize "Mret" 0
menuText H FinderSortMod "Id" 0
menuText H FinderSortName "Nv" 0
menuText H FinderSortPath "tvonal" 0
menuText H FinderTypes "Tpusok" 0
menuText H FinderTypesScid "SCID-adatbzisok" 0
menuText H FinderTypesOld "Rgi formtum SCID-adatbzisok" 5
menuText H FinderTypesPGN "PGN-fjlok" 0
menuText H FinderTypesEPD "EPD-fjlok" 0
menuText H FinderTypesRep "Repertorfjlok" 0
menuText H FinderHelp "Segtsg" 0
menuText H FinderHelpFinder "Segtsg a fjlkereshz" 0
menuText H FinderHelpIndex "Tartalom" 0
translate H FileFinder {Fjlkeres}
translate H FinderDir {Knyvtr}
translate H FinderDirs {Knyvtrak}
translate H FinderFiles {Fjlok}
translate H FinderUpDir {fel}
translate H FinderCtxOpen {Megnyit}
translate H FinderCtxBackup {Biztonsgi msolat}
translate H FinderCtxCopy {Msol}
translate H FinderCtxMove {thelyez}
translate H FinderCtxDelete {Trl}

# Player finder:
menuText H PListFile "Fjl" 0
menuText H PListFileUpdate "Frisst" 0
menuText H PListFileClose "Jtkoskeres bezrsa" 16
menuText H PListSort "Rendezs" 0
menuText H PListSortName "Nv" 0
menuText H PListSortElo "l" 0
menuText H PListSortGames "Jtszmk" 0
menuText H PListSortOldest "Legrgibb" 0
menuText H PListSortNewest "Legjabb" 3

# Tournament finder:
menuText H TmtFile "Fjl" 0
menuText H TmtFileUpdate "Frisst" 0
menuText H TmtFileClose "A versenykeres bezrsa" 18
menuText H TmtSort "Rendezs" 0
menuText H TmtSortDate "Dtum" 0
menuText H TmtSortPlayers "Jtkosok" 0
menuText H TmtSortGames "Jtszmk" 1
menuText H TmtSortElo "l" 0
menuText H TmtSortSite "Helyszn" 0
menuText H TmtSortEvent "Esemny" 0
menuText H TmtSortWinner "Gyztes" 0
translate H TmtLimit "Lista hossza"
translate H TmtMeanElo "Legkisebb tlagos l"
translate H TmtNone "Nem talltam hozz versenyt."

# Graph windows:
menuText H GraphFile "Fjl" 0
menuText H GraphFileColor "Ments Color PostScript-knt..." 7
menuText H GraphFileGrey "Ments Greyscale PostScript-knt..." 7
menuText H GraphFileClose "Ablak bezrsa" 8
menuText H GraphOptions "Belltsok" 0
menuText H GraphOptionsWhite "Vilgos" 0
menuText H GraphOptionsBlack "Stt" 0
menuText H GraphOptionsBoth "Mindkett" 1
menuText H GraphOptionsPInfo "A jtkosinformci jtkosa" 0
translate H GraphFilterTitle "Szrgrafikon: gyakorisg 1000 jtszmnknt"
translate H GraphAbsFilterTitle "Szrgrafikon: jtszmk gyakorisga"
translate H ConfigureFilter {lltsd be az X tengelyt vre, rtkszmra vagy lpsre}
translate H FilterEstimate "Becsls"
translate H TitleFilterGraph "Scid: Szrgrafikon"

# Analysis window:
translate H AddVariation {Vltozat beszrsa}
translate H AddAllVariations {Add hozz az sszes vltozatot}
translate H AddMove {Lps beszrsa}
translate H Annotate {Lsd el rtkel jelekkel}
translate H ShowAnalysisBoard {Mutasd az elemztblt}
translate H ShowInfo {Mutasd a motor kirsait}
translate H FinishGame {Fejezd be a jtszmt}
translate H StopEngine {lltsd le a motort}
translate H StartEngine {Indtsd el a motort}
translate H LockEngine {Tartsd a motort ennl az llsnl}
translate H AnalysisCommand {Elemzsparancs}
translate H PreviousChoices {Korbbi vlasztsok}
translate H AnnotateTime {Kt lps kztti id msodpercben}
translate H AnnotateWhich {Vltozatok hozzadsa}
translate H AnnotateAll {Mindkt fl lpseihez}
translate H AnnotateAllMoves {rtkeld az sszes lpst}
translate H AnnotateWhite {Csak vilgos lpseihez}
translate H AnnotateBlack {Csak stt lpseihez}
translate H AnnotateBlundersOnly {Ha a tett lps nyilvnvalan durva hiba}
translate H AnnotateBlundersOnlyScoreChange {Az elemzs durva hibnak tekinti a lpst, ha az rtkels megvltozsa: }
translate H BlundersThreshold {Kszb}
# TODO: Translate
translate H ScoreAllMoves {Score all moves}
translate H LowPriority {Alacsony CPU-priorits}
translate H ClickHereToSeeMoves {Kattints ide, hogy lsd a lpseket}
translate H ConfigureInformant {rtkel jelek definilsa}
translate H Informant!? {rdekes lps}
translate H Informant? {Gyatra lps}
translate H Informant?? {Durva hiba}
translate H Informant?! {Ktes lps}
translate H Informant+= {Vilgosnak nmi elnye van}
translate H Informant+/- {Vilgosnak jelents elnye van}
translate H Informant+- {Vilgosnak dnt elnye van}
translate H Informant++- {A jtszma eldlt}
translate H Book {Megnyitstr}
translate H OtherBookMoves {Az ellenfl megnyitstra}
translate H OtherBookMovesTooltip {Azok a lpsek, amelyekre az ellenflnek van vlasza}

# Analysis Engine open dialog:
translate H EngineList {Elemz motorok listja}
translate H EngineName {Nv}
translate H EngineCmd {Parancssor}
translate H EngineArgs {Paramterek}
translate H EngineDir {Knyvtr}
translate H EngineElo {l}
translate H EngineTime {Dtum}
translate H EngineNew {j}
translate H EngineEdit {Szerkeszts}
translate H EngineRequired {A vastagbets mezk szksgesek, a tbbiek kihagyhatk.}

# Stats window menus:
menuText H StatsFile "Fjl" 0
menuText H StatsFilePrint "Nyomtats fjlba..." 0
menuText H StatsFileClose "Ablak bezrsa" 8
menuText H StatsOpt "Belltsok" 0

# PGN window menus:
menuText H PgnFile "Fjl" 0
menuText H PgnFileCopy "A vglapra msolja a jtszmt" 2
menuText H PgnFilePrint "Nyomtats fjlba..." 0
menuText H PgnFileClose "PGN-ablak bezrsa" 12
menuText H PgnOpt "Megjelents" 0
menuText H PgnOptColor "Sznes szveg" 0
menuText H PgnOptShort "Rvid (3-soros) fejlc" 0
menuText H PgnOptSymbols "Szimblumok hasznlata" 1
menuText H PgnOptIndentC "Megjegyzsek behzsa" 0
menuText H PgnOptIndentV "Vltozatok behzsa" 0
menuText H PgnOptColumn "Oszlopok stlusa (soronknt egy lps)" 0
menuText H PgnOptSpace "Szkz a lps sorszma utn" 3
menuText H PgnOptStripMarks "Sznes mezk s nyilak kifejtse" 2
menuText H PgnOptBoldMainLine "A fvltozat lpsei vastag betvel" 21
menuText H PgnColor "Sznek" 1
menuText H PgnColorHeader "Fejlc..." 0
menuText H PgnColorAnno "rtkel jelek..." 0
menuText H PgnColorComments "Megjegyzsek..." 0
menuText H PgnColorVars "Vltozatok..." 0
menuText H PgnColorBackground "Httr..." 0
menuText H PgnColorMain "Fvltozat..." 1
menuText H PgnColorCurrent "Az aktulis lps httrszne..." 3
menuText H PgnHelp "Segtsg" 0
menuText H PgnHelpPgn "Segtsg PGN-hez" 9
menuText H PgnHelpIndex "Tartalom" 0
translate H PgnWindowTitle {Jtszmajegyzs - %u. jtszma}

# Crosstable window menus:
menuText H CrosstabFile "Fjl" 0
menuText H CrosstabFileText "Nyomtats szvegfjlba..." 10
menuText H CrosstabFileHtml "Nyomtats HTML-fjlba..." 10
menuText H CrosstabFileLaTeX "Nyomtats LaTeX-fjlba..." 10
menuText H CrosstabFileClose "Ablak bezrsa" 8
menuText H CrosstabEdit "Szerkeszts" 1
menuText H CrosstabEditEvent "Esemny" 0
menuText H CrosstabEditSite "Helyszn" 0
menuText H CrosstabEditDate "Dtum" 0
menuText H CrosstabOpt "Megjelents" 0
menuText H CrosstabOptAll "Krmrkzs" 0
menuText H CrosstabOptSwiss "Svjci" 0
menuText H CrosstabOptKnockout "Kiesses" 1
menuText H CrosstabOptAuto "Talld ki!" 0
menuText H CrosstabOptAges "letkor vben" 0
menuText H CrosstabOptNats "Nemzetisg" 0
menuText H CrosstabOptRatings "rtkszmok" 1
menuText H CrosstabOptTitles "Cmek" 0
menuText H CrosstabOptBreaks "Pontszm holtverseny eldntshez" 0
menuText H CrosstabOptDeleted "Trlt jtszmkkal egytt" 0
menuText H CrosstabOptColors "Sznek (csak svjci rendszer esetn)" 2
menuText H CrosstabOptColumnNumbers "Szmozott oszlopok (csak krmrkzshez)" 2
menuText H CrosstabOptGroup "Pontcsoportok" 1
menuText H CrosstabSort "Rendezs" 0
menuText H CrosstabSortName "Nv" 0
menuText H CrosstabSortRating "rtkszm" 0
menuText H CrosstabSortScore "Pontszm" 0
menuText H CrosstabColor "Szn" 2
menuText H CrosstabColorPlain "Kznsges szveg" 0
menuText H CrosstabColorHyper "Hypertext" 0
menuText H CrosstabHelp "Segtsg" 0
menuText H CrosstabHelpCross "Segtsg versenytblzathoz" 0
menuText H CrosstabHelpIndex "Tartalom" 0
translate H SetFilter {Szr belltsa}
translate H AddToFilter {Hozzadja a szrhz}
translate H Swiss {Svjci}
translate H Category {Kategria}

# Opening report window menus:
menuText H OprepFile "Fjl" 0
menuText H OprepFileText "Nyomtats szvegfjlba..." 10
menuText H OprepFileHtml "Nyomtats HTML-fjlba..." 10
menuText H OprepFileLaTeX "Nyomtats LaTeX-fjlba..." 10
menuText H OprepFileOptions "Belltsok..." 0
menuText H OprepFileClose "Ablak bezrsa" 8
menuText H OprepFavorites "Kedvencek" 0
menuText H OprepFavoritesAdd "sszefoglal hozzadsa..." 0
menuText H OprepFavoritesEdit "Kedvencek tszerkesztse..." 0
menuText H OprepFavoritesGenerate "sszefoglal ksztse..." 0
menuText H OprepHelp "Segtsg" 0
menuText H OprepHelpReport "Segtsg a megnyitsi sszefoglalhoz" 0
menuText H OprepHelpIndex "Trgymutat" 0

# Repertoire editor:
menuText H RepFile "Fjl" 0
menuText H RepFileNew "j" 0
menuText H RepFileOpen "Megnyits..." 3
menuText H RepFileSave "Ments..." 0
menuText H RepFileSaveAs "Ments msknt..." 5
menuText H RepFileClose "Ablak bezrsa" 8
menuText H RepEdit "Szerkeszts" 1
menuText H RepEditGroup "Csoport hozzadsa" 0
menuText H RepEditInclude "Beveend elgazs" 0
menuText H RepEditExclude "Kizrand elgazs" 0
menuText H RepView "Nzet" 0
menuText H RepViewExpand "Az sszes csoportot kibontja" 20
menuText H RepViewCollapse "Az sszes csoportot sszehzza" 20
menuText H RepSearch "Keress" 0
menuText H RepSearchAll "Az egsz repertorban..." 3
menuText H RepSearchDisplayed "Csak a megjelentett elgazsokban..." 0
#Ez igen gyans!
menuText H RepHelp "Segtsg" 0
menuText H RepHelpRep "Segtsg a repertorhoz" 0
menuText H RepHelpIndex "Tartalom" 0
translate H RepSearch "Keress a repertorban"
translate H RepIncludedLines "beveend elgazsok"
translate H RepExcludedLines "kizrand elgazsok"
translate H RepCloseDialog {Ebben a repertorban elmentetlen vltoztatsok vannak.

Tnyleg folytatni akarod, s elvetni a ltrehozott vltoztatsokat?
}

# Header search:
translate H HeaderSearch {Keress fejlc alapjn}
translate H EndSideToMove {Aki a jtszma vgn lpsre kvetkezik}
translate H GamesWithNoECO {Jtszmk ECO nlkl?}
translate H GameLength {Jtszmahossz}
translate H FindGamesWith {Megjellt jtszmk}
translate H StdStart {Klnleges kezds}
translate H Promotions {Gyalogtvltozsok}
translate H Comments {Megjegyzsek}
translate H Variations {Vltozatok}
translate H Annotations {rtkel jelek}
translate H DeleteFlag {Megjells trlse}
translate H WhiteOpFlag {Megnyits vilgossal}
translate H BlackOpFlag {Megnyits stttel}
translate H MiddlegameFlag {Kzpjtk}
translate H EndgameFlag {Vgjtk}
translate H NoveltyFlag {jts}
translate H PawnFlag {Gyalogszerkezet}
translate H TacticsFlag {Taktika}
translate H QsideFlag {Vezrszrnyi jtk}
translate H KsideFlag {Kirlyszrnyi jtk}
translate H BrilliancyFlag {Csillogs}
translate H BlunderFlag {Elnzs}
translate H UserFlag {Felhasznl}
translate H PgnContains {Szveg a PGN-ben}
# ====== TODO To be translated ======
translate H Annotator {Annotator}
# ====== TODO To be translated ======
translate H Cmnts {Annotated games only}

# Game list window:
translate H GlistNumber {Szm}
translate H GlistWhite {Vilgos}
translate H GlistBlack {Stt}
translate H GlistWElo {Vilgos lje}
translate H GlistBElo {Stt lje}
translate H GlistEvent {Esemny}
translate H GlistSite {Helyszn}
translate H GlistRound {Fordul}
translate H GlistDate {Dtum}
translate H GlistYear {v}
translate H GlistEDate {Az esemny dtuma}
translate H GlistResult {Eredmny}
translate H GlistLength {Hossz}
translate H GlistCountry {Orszg}
translate H GlistECO {ECO}
translate H GlistOpening {Megnyits}
translate H GlistEndMaterial {Vgs anyagi helyzet}
translate H GlistDeleted {Trlt}
translate H GlistFlags {Megjellsek}
translate H GlistVars {Variations}
translate H GlistComments {Megjegyzsek}
translate H GlistAnnos {rtkel jelek}
translate H GlistStart {Kezdet}
translate H GlistGameNumber {A jtszma sorszma}
# ====== TODO To be translated ======
translate H GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate H GlistRating {Rating}
translate H GlistFindText {Szveg keresse}
translate H GlistMoveField {Lps}
translate H GlistEditField {Konfigurls}
translate H GlistAddField {Hozzad}
translate H GlistDeleteField {Eltvolt}
translate H GlistWidth {Szlessg}
translate H GlistAlign {Igazt}
# ====== TODO To be translated ======
translate H GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate H GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate H GlistAlignC {Align: center}
translate H GlistColor {Szn}
translate H GlistSep {Elvlaszt}
# ====== TODO To be translated ======
translate H GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate H GlistNewSort {New}
# ====== TODO To be translated ======
translate H GlistAddToSort {Add}
# ====== TODO To be translated ======
translate H GsortSort {Sort...}
# ====== TODO To be translated ======
translate H GsortDate {Date}
# ====== TODO To be translated ======
translate H GsortYear {Year}
# ====== TODO To be translated ======
translate H GsortEvent {Event}
# ====== TODO To be translated ======
translate H GsortSite {Site}
# ====== TODO To be translated ======
translate H GsortRound {Round}
# ====== TODO To be translated ======
translate H GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate H GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate H GsortECO {ECO}
# ====== TODO To be translated ======
translate H GsortResult {Result}
# ====== TODO To be translated ======
translate H GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate H GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate H GsortCountry {Country}
# ====== TODO To be translated ======
translate H GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate H GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate H GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate H GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate H GsortComments {Comments}
# ====== TODO To be translated ======
translate H GsortVariations {Variations}
# ====== TODO To be translated ======
translate H GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate H GsortAscending {Ascending}
# ====== TODO To be translated ======
translate H GsortDescending {Descending}
# ====== TODO To be translated ======
translate H GsortAdd {Add}
# ====== TODO To be translated ======
translate H GsortStore {Store}
# ====== TODO To be translated ======
translate H GsortLoad {Load}
translate H GlistRemoveThisGameFromFilter  {Vedd ki ezt a jtszmt a szrbl}
translate H GlistRemoveGameAndAboveFromFilter  {Vedd ki a jtszmt s az sszes fltte lvt a szrbl}
translate H GlistRemoveGameAndBelowFromFilter  {Vedd ki a jtszmt s az sszes alatta lvt a szrbl}
translate H GlistDeleteGame {Trld/lltsd helyre ezt a jtszmt} 
translate H GlistDeleteAllGames {Trld a szr sszes jtszmjt} 
translate H GlistUndeleteAllGames {lltsd helyre a szr sszes jtszmjt} 
# ====== TODO To be translated ======
translate H GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate H DatabaseName {Az adatbzis neve:}
translate H TypeIcon {Tpusikon:}
translate H NumOfGames {Jtszmk:}
translate H NumDeletedGames {Trlt jtszmk:}
translate H NumFilterGames {Szrt jtszmk:}
translate H YearRange {vtartomny:}
translate H RatingRange {rtkszmtartomny:}
translate H Description {Lers}
translate H Flag {Megjells}
# ====== TODO To be translated ======
translate H CustomFlags {Custom flags}
translate H DeleteCurrent {Trli az aktulis jtszmt.}
translate H DeleteFilter {Trli a szrt jtszmkat.}
translate H DeleteAll {Minden jtszmt trl.}
translate H UndeleteCurrent {Helyrelltja az aktulis jtszmt.}
translate H UndeleteFilter {Helyrelltja a szrt jtszmkat.}
translate H UndeleteAll {Minden jtszmt helyrellt.}
translate H DeleteTwins {Trli az ikerjtszmkat.}
translate H MarkCurrent {Megjelli az aktulis jtszmt.}
translate H MarkFilter {Megjelli a szrt jtszmkat.}
translate H MarkAll {Minden jtszmt megjell.}
translate H UnmarkCurrent {Eltvoltja az aktulis jtszma megjellst.}
translate H UnmarkFilter {Eltvoltja a szrt jtszmk megjellst.}
translate H UnmarkAll {Minden jtszma megjellst eltvoltja.}
translate H Spellchecking {Helyesrs-ellenrzs}
translate H Players {Jtkosok}
translate H Events {Esemnyek}
translate H Sites {Helysznek}
translate H Rounds {Fordulk}
translate H DatabaseOps {Adatbzismveletek}
translate H ReclassifyGames {ECO alapjn osztlyozza a jtszmkat.}
translate H CompactDatabase {Adatbzis tmrtse}
translate H SortDatabase {Adatbzis rendezse}
translate H AddEloRatings {l-rtkszmok hozzadsa}
translate H AutoloadGame {Jtszmasorszm automatikus betltse}
#Igaz ez?
translate H StripTags {PGN-cmkk eltntetse}
translate H StripTag {Cmke eltntetse}
translate H Cleaner {Takart}
translate H CleanerHelp {
SCID Takartja el fogja vgezni az aktulis adatbzison az sszes olyan gondozsi feladatot, amelyet az albbi listrl kijellsz.

Az ECO-osztlyozsra s az ikertrlsre vonatkoz jelenlegi belltsok akkor jutnak rvnyre, ha ezeket a feladatokat is kijelld.
}
translate H CleanerConfirm {
Ha a Takart mr elindult, tbb nem lehet meglltani!

Nagy adatbzison a kivlasztott feladatoktl s aktulis belltsaiktl fggen a mvelet sokig eltarthat.

Biztos, hogy neki akarsz ltni a kijellt gondozsi feladatoknak?
}
translate H TwinCheckUndelete {vlts; "u" mindkettt helyrelltja)}
translate H TwinCheckprevPair {Elz pr}
translate H TwinChecknextPair {Kvetkez pr}
translate H TwinChecker {Scid: Ikerjtszma-ellenrzs}
translate H TwinCheckTournament {E verseny jtszmi:}
translate H TwinCheckNoTwin {Nem ikrek  }
translate H TwinCheckNoTwinfound {Ennek a jtszmnak nincs ikertestvre.\nEbben az ablakban akkor lehet megjelenteni az ikreket, ha elbb az "Ikerjtszmk trlse..." funkcit hasznlod. }
translate H TwinCheckTag {Cmkk ellenrzse...}
translate H TwinCheckFound1 {Scid $result ikerjtszmt tallt,}
translate H TwinCheckFound2 { s megjellte ket trlsre.}
translate H TwinCheckNoDelete {Ebben az adatbzisban nincsenek trlend jtszmk.}
translate H TwinCriteria1 {Ikerjtszmk megtallst clz belltsaid azzal a veszllyel jrnak,\nhogy hasonl lpseket tartalmaz (nem-iker) jtszmkat is megjellk trlsre..}
translate H TwinCriteria2 {Ha "azonos lpsek"-nl "Nem"-et vlasztottad, akkor clszer "Igen"-t vlasztani a sznek, az esemny, a helyszn, a fordul, az v s a hnap belltsainl.\nAkarod folytatni, s mindenkppen trlni az ikreket?}
translate H TwinCriteria3 {Ajnlatos "azonos helyszn", "azonos fordul" s "azonos v" belltsai kzl legalbb kettt "Igen"-nek vlasztani.\nAkarod folytatni, s mindenkppen trlni az ikreket?}
translate H TwinCriteriaConfirm {Scid: Erstsd meg az ikerbelltsokat}
translate H TwinChangeTag "Vltoztasd meg a kvetkez jtszmacmkket:\n\n"
translate H AllocRatingDescription "Ez a parancs a jelenlegi helyesrsellenrz fjl felhasznlsval l-pontokkal ltja el az adatbzis jtszmit. Ha egy jtkosnak jelenleg nincs lje, de a jtszma idejn rvnyes lje benne van a helyesrsellenrz fjlban, azt az lt fogja kapni."
translate H RatingOverride "Fellrjam a meglv 0-tl klnbz lket?"
translate H AddRatings "Adj lket ehhez:"
translate H AddedRatings {Scid $r l-rtkszmot adott $g jtszmhoz.}
translate H NewSubmenu "j almen"

# Comment editor:
translate H AnnotationSymbols  {rtkel szimblumok:}
translate H Comment {Megjegyzs:}
translate H InsertMark {Megjells beszrsa}
translate H InsertMarkHelp {
Megjells beszrsa/trlse: szn, tpus, mez kivlasztsa.
Nyl beszrsa/trlse: Kattints a jobb gombbal kt mezn.
}

# Nag buttons in comment editor:
translate H GoodMove {J lps}
translate H PoorMove {Rossz lps}
translate H ExcellentMove {Kitn lps}
translate H Blunder {Elnzs}
translate H InterestingMove {rdekes lps}
translate H DubiousMove {Ktes rtk lps}
translate H WhiteDecisiveAdvantage {Vilgosnak dnt elnye van.}
translate H BlackDecisiveAdvantage {Sttnek dnt elnye van.}
translate H WhiteClearAdvantage {Vilgos elnye nyilvnval.}
translate H BlackClearAdvantage {Stt elnye nyilvnval.}
translate H WhiteSlightAdvantage {Vilgos valamivel jobban ll.}
translate H BlackSlightAdvantage {Stt valamivel jobban ll.}
translate H Equality {Egyenl lls}
translate H Unclear {Tisztzatlan lls}
translate H Diagram {Diagram}

# Board search:
translate H BoardSearch {lls keresse}
translate H FilterOperation {Elvgzend mvelet az aktulis szrn:}
translate H FilterAnd {S (Szr szktse)}
translate H FilterOr {VAGY (Szr bvtse)}
translate H FilterIgnore {SEMMI (Szr trlse)}
translate H SearchType {A keress fajtja:}
translate H SearchBoardExact {Pontos lls (minden figura azonos mezn)}
translate H SearchBoardPawns {Gyalogok (azonos anyag, minden gyalog azonos mezn)}
translate H SearchBoardFiles {Vonalak (azonos anyag, minden gyalog azonos vonalon)}
translate H SearchBoardAny {Brmi (azonos anyag, gyalogok s figurk brhol)}
# ====== TODO To be translated ======
translate H SearchInRefDatabase { Search in base }
translate H LookInVars {Vltozatokban is keres.}

# Material search:
translate H MaterialSearch {Keress anyagra}
translate H Material {Anyag}
translate H Patterns {Alakzatok}
translate H Zero {Nullzs}
translate H Any {Brmi}
translate H CurrentBoard {Aktulis lls}
translate H CommonEndings {Gyakori vgjtkok}
translate H CommonPatterns {Gyakori alakzatok}
translate H MaterialDiff {Anyagklnbsg}
translate H squares {mezk}
translate H SameColor {Azonos szn}
translate H OppColor {Ellenkez szn}
translate H Either {Brmelyik}
translate H MoveNumberRange {Lpstartomny}
translate H MatchForAtLeast {Egyezzen legalbb}
translate H HalfMoves {fl lpsig.}

# Common endings in material search:
translate H EndingPawns {Gyalogvgjtkok}
translate H EndingRookVsPawns {Bstya gyalog(ok) ellen}
translate H EndingRookPawnVsRook {Bstya s 1 gyalog bstya ellen}
translate H EndingRookPawnsVsRook {Bstya s gyalogok bstya ellen}
translate H EndingRooks {Bstyavgjtkok}
translate H EndingRooksPassedA {Bstyavgjtkok szabad a-gyaloggal}
translate H EndingRooksDouble {Ketts bstyavgjtkok}
translate H EndingBishops {Futvgjtkok}
translate H EndingBishopVsKnight {Fut huszr ellen}
translate H EndingKnights {Huszrvgjtkok}
translate H EndingQueens {Vezrvgjtkok}
translate H EndingQueenPawnVsQueen {Vezr s 1 gyalog vezr ellen}
translate H BishopPairVsKnightPair {Futpr huszrpr ellen a kzpjtkban}

# Common patterns in material search:
translate H PatternWhiteIQP {Izollt vilgos vezrgyalog}
translate H PatternWhiteIQPBreakE6 {d4-d5 ttrs e6 ellen}
translate H PatternWhiteIQPBreakC6 {d4-d5 ttrs c6 ellen}
translate H PatternBlackIQP {Izollt stt vezrgyalog}
translate H PatternWhiteBlackIQP {Izollt vilgos d-gyalog izollt stt d-gyalog ellen}
translate H PatternCoupleC3D4 {Izollt vilgos c3-d4 gyalogpr}
translate H PatternHangingC5D5 {Lg stt gyalogok c5-n s d5-n}
translate H PatternMaroczy {Marczy-centrum (gyalogok c4-en s e4-en)}
translate H PatternRookSacC3 {Bstyaldozat c3-on}
translate H PatternKc1Kg8 {O-O-O O-O ellen (Kc1 s Kg8)}
translate H PatternKg1Kc8 {O-O O-O-O ellen (Kg1 s Kc8)}
translate H PatternLightFian {Vilgos mezej fianchetto (g2 fut b7 fut ellen)}
translate H PatternDarkFian {Stt mezej fianchetto (b2 fut g7 fut ellen)}
translate H PatternFourFian {Ngyes fianchetto (futk b2-n, g2-n, b7-en s g7-en)}

# Game saving:
translate H Today {Ma}
translate H ClassifyGame {Jtszma osztlyozsa}

# Setup position:
translate H EmptyBoard {Tbla letakartsa}
translate H InitialBoard {Alaplls}
translate H SideToMove {Ki lp?}
translate H MoveNumber {Lps szma}
translate H Castling {Sncols}
translate H EnPassantFile {"en passant"-vonal}
translate H ClearFen {FEN trlse}
translate H PasteFen {FEN beillesztse}
translate H SaveAndContinue {Ments s folytats}
translate H DiscardChangesAndContinue {Vltoztatsok elvetse\ns folytats}
translate H GoBack {Vissza}

# Replace move dialog:
translate H ReplaceMove {Lps cserje}
translate H AddNewVar {j vltozat beszrsa}
translate H NewMainLine {j fvltozat}
translate H ReplaceMoveMessage {Itt mr van lps.

Kicserlheted, miltal az sszes t kvet lps elvsz, vagy lpsedet beszrhatod j vltozatknt.

(Ha a jvben nem akarod ltni ezt az zenetet, kapcsold ki a Belltsok:Lpsek menben a "Lps cserje eltt rkrdez." belltst.)}

# Make database read-only dialog:
translate H ReadOnlyDialog {Ha ezt az adatbzist kizrlag olvashatv teszed, nem lehet vltoztatsokat vgezni rajta. Nem lehet jtszmkat elmenteni vagy kicserlni, sem a trlskijellseket megvltoztatni. Minden rendezs vagy ECO-osztlyozs csak tmeneti lesz.

Knnyen jra rhatv teheted az adatbzist, ha bezrod, majd jbl megnyitod.

Tnyleg kizrlag olvashatv akarod tenni ezt az adatbzist?}

# Clear game dialog:
translate H ClearGameDialog {Ez a jtszma megvltozott.

Tnyleg folytatni akarod, s elvetni a ltrehozott vltoztatsokat?
}

# Exit dialog:
translate H ExitDialog {Tnyleg ki akarsz lpni SCID-bl?}
translate H ExitUnsaved {A kvetkez adatbzisokban elmentetlen jtszmavltoztatsok vannak. Ha most kilpsz, ezek a vltoztatsok elvesznek.}

# Import window:
translate H PasteCurrentGame {Beilleszti az aktulis jtszmt.}
translate H ImportHelp1 {Bevisz vagy beilleszt egy PGN-formtum jtszmt a fenti keretbe.}
translate H ImportHelp2 {Itt jelennek meg az importls kzben fellp hibk.}
translate H OverwriteExistingMoves {Fellrjam a meglv lpseket?}

# ECO Browser:
translate H ECOAllSections {sszes ECO-osztly}
translate H ECOSection {ECO-osztly}
translate H ECOSummary {sszefoglals:}
translate H ECOFrequency {Alkdok gyakorisga:}

# Opening Report:
translate H OprepTitle {Megnyitsi sszefoglal}
translate H OprepReport {sszefoglal}
translate H OprepGenerated {Ksztette:}
#Lehet, hogy ez "kszlt"?
translate H OprepStatsHist {Statisztika s trtnet}
translate H OprepStats {Statisztika}
translate H OprepStatAll {Az sszefoglal sszes jtszmja}
translate H OprepStatBoth {Mindkett}
translate H OprepStatSince {Idszak kezdete:}
translate H OprepOldest {A legrgibb jtszmk}
translate H OprepNewest {A legjabb jtszmk}
translate H OprepPopular {Jelenlegi npszersg}
translate H OprepFreqAll {Gyakorisg a teljes idszakban:   }
translate H OprepFreq1   {Az utbbi 1 vben: }
translate H OprepFreq5   {Az utbbi 5 vben: }
translate H OprepFreq10  {Az utbbi 10 vben: }
translate H OprepEvery {minden %u jtszmban egyszer}
translate H OprepUp {%u%s nvekeds az vek sorn}
translate H OprepDown {%u%s cskkens az vek sorn}
translate H OprepSame {nincs vltozs az vek sorn}
translate H OprepMostFrequent {Leggyakoribb jtkosok}
translate H OprepMostFrequentOpponents {Leggyakoribb ellenfelek}
translate H OprepRatingsPerf {rtkszm s teljestmny}
translate H OprepAvgPerf {tlagos rtkszm s teljestmny}
translate H OprepWRating {Vilgos rtkszma}
translate H OprepBRating {Stt rtkszma}
translate H OprepWPerf {Vilgos teljestmnye}
translate H OprepBPerf {Stt teljestmnye}
translate H OprepHighRating {A legnagyobb tlagrtkszm jtszmk}
translate H OprepTrends {Tendencik}
translate H OprepResults {Eredmny hosszsg s gyakorisg szerint}
translate H OprepLength {Jtszmahossz}
translate H OprepFrequency {Gyakorisg}
translate H OprepWWins {Vilgos nyer: }
translate H OprepBWins {Stt nyer:   }
translate H OprepDraws {Dntetlen:    }
translate H OprepWholeDB {teljes adatbzis}
translate H OprepShortest {A legrvidebb gyzelmek}
translate H OprepMovesThemes {Lpsek s tmk}
translate H OprepMoveOrders {A vizsglt llshoz vezet lpssorrendek}
translate H OprepMoveOrdersOne \
  {Csak egy lpssorrend vezetett ehhez az llshoz:}
translate H OprepMoveOrdersAll \
  {%u lpssorrend vezetett ehhez az llshoz:}
translate H OprepMoveOrdersMany \
  {%u lpssorrend vezetett ehhez az llshoz. Az els %u:}
translate H OprepMovesFrom {A vizsglt llsban tett lpsek}
translate H OprepMostFrequentEcoCodes {Leggyakoribb ECO-kdok}
translate H OprepThemes {Pozcis tmk}
translate H OprepThemeDescription {Tmk gyakorisga az egyes jtszmk els %u lpsben}
translate H OprepThemeSameCastling {Sncols azonos oldalra}
translate H OprepThemeOppCastling {Sncols ellenkez oldalra}
translate H OprepThemeNoCastling {Egyik kirly sem sncolt.}
translate H OprepThemeKPawnStorm {Kirlyszrnyi gyalogroham}
translate H OprepThemeQueenswap {Vezrcsere}
translate H OprepThemeWIQP {Elszigetelt vilgos vezrgyalog}
translate H OprepThemeBIQP {Elszigetelt stt vezrgyalog}
translate H OprepThemeWP567 {Vilgos gyalog az 5./6./7. soron}
translate H OprepThemeBP234 {Stt gyalog a 4./3./2. soron}
translate H OprepThemeOpenCDE {Nylt c/d/e-vonal}
translate H OprepTheme1BishopPair {Csak az egyik flnek van futprja.}
translate H OprepEndgames {Vgjtkok}
translate H OprepReportGames {Az sszefoglal jtszmi}
translate H OprepAllGames    {sszes jtszma}
translate H OprepEndClass {Anyagi viszonyok az egyes jtszmk vgn}
translate H OprepTheoryTable {Elmlettblzat}
translate H OprepTableComment {a legnagyobb rtkszm %u jtszma alapjn}
translate H OprepExtraMoves {A kln megjegyzssel elltott lpsek szma az elmlettblzatban}
translate H OprepMaxGames {Az elmlettblzat ltrehozshoz felhasznlhat jtszmk maximlis szma}
translate H OprepViewHTML {HTML megtekintse}
translate H OprepViewLaTeX {LaTeX megtekintse}

# Player Report:
translate H PReportTitle {sszefoglal jtkosrl}
translate H PReportColorWhite {vilgossal}
translate H PReportColorBlack {stttel}
translate H PReportMoves {%s utn}
translate H PReportOpenings {Megnyitsok}
translate H PReportClipbase {Kirti a vglapot, s odamsolja a felttelnek megfelel jtszmkat}

# Piece Tracker window:
translate H TrackerSelectSingle {A bal egrgomb kivlasztja ezt a figurt.}
translate H TrackerSelectPair {A bal egrgomb kivlasztja ezt a figurt; a jobb egrgomb a prjt is kivlasztja.}
translate H TrackerSelectPawn {A bal egrgomb kivlasztja ezt a gyalogot; a jobb egrgomb az sszes gyalogot kivlasztja.}
translate H TrackerStat {Statisztika}
translate H TrackerGames {Jtszmk %-a, amelyekben erre a mezre lpett}
translate H TrackerTime {Id %-a, amelyet az egyes mezkn tlttt}
translate H TrackerMoves {Lpsek}
translate H TrackerMovesStart {Add meg a lps szmt, amelynl a nyomkvetsnek el kell kezddnie.}
translate H TrackerMovesStop {Add meg a lps szmt, amelynl a nyomkvetsnek be kell fejezdnie.}

# Game selection dialogs:
translate H SelectAllGames {Az adatbzis sszes jtszmja}
translate H SelectFilterGames {Csak a szrt jtszmk}
translate H SelectTournamentGames {Csak az aktulis verseny jtszmi}
translate H SelectOlderGames {Csak rgebbi jtszmk}

# Delete Twins window:
translate H TwinsNote {Kt jtszma akkor iker, ha ugyanazok jtsszk ket, s megfelelnek az alant meghatrozhat kritriumoknak. Az ikerprbl a rvidebb jtszma trldik. Javaslat: ikrek trlse eltt rdemes helyesrs-ellenrzst vgezni az adatbzison, mert az javtja az ikerfeldertst.}
translate H TwinsCriteria {Kritriumok: Az ikerjtszmk kzs tulajdonsgai...}
translate H TwinsWhich {A megvizsgland jtszmk}
translate H TwinsColors {Azonos szn?}
translate H TwinsEvent {Ugyanaz az esemny?}
translate H TwinsSite {Azonos helyszn?}
translate H TwinsRound {Ugyanaz a fordul?}
translate H TwinsYear {Azonos v?}
translate H TwinsMonth {Azonos hnap?}
translate H TwinsDay {Ugyanaz a nap?}
translate H TwinsResult {Azonos eredmny?}
translate H TwinsECO {Azonos ECO-kd?}
translate H TwinsMoves {Azonos lpsek?}
translate H TwinsPlayers {A jtkosok nevnek sszehasonltsakor:}
translate H TwinsPlayersExact {Teljes egyezs kell.}
translate H TwinsPlayersPrefix {Elg az els 4 betnek egyeznie.}
translate H TwinsWhen {Ikerjtszmk trlsekor}
translate H TwinsSkipShort {Hagyjuk figyelmen kvl az 5 lpsnl rvidebb jtszmkat?}
translate H TwinsUndelete {Elszr lltsuk helyre az sszes jtszmt?}
translate H TwinsSetFilter {A szrt lltsuk az sszes trlt ikerjtszmra?}
translate H TwinsComments {A megjegyzsekkel elltott jtszmkat mindig tartsuk meg?}
translate H TwinsVars {A vltozatokat tartalmaz jtszmkat mindig tartsuk meg?}
translate H TwinsDeleteWhich {Melyik jtszmt trljem?}
translate H TwinsDeleteShorter {A rvidebbet}
translate H TwinsDeleteOlder {A kisebb sorszmt}
translate H TwinsDeleteNewer {A nagyobb sorszmt}
translate H TwinsDelete {Jtszmk trlse}

# Name editor window:
translate H NameEditType {Szerkesztend nvtpus}
translate H NameEditSelect {Szerkesztend jtszmk}
translate H NameEditReplace {Cserl}
translate H NameEditWith {Erre}
translate H NameEditMatches {Egyezsek: Ctrl+1...Ctrl+9 vlaszt.}
# ====== TODO To be translated ======
translate H CheckGames {Check games}
# ====== TODO To be translated ======
translate H CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate H CheckAll {All games}
# ====== TODO To be translated ======
translate H CheckSelectFilterGames {Only games in filter}

# Classify window:
translate H Classify {Osztlyoz}
translate H ClassifyWhich {Mely jtszmk essenek t ECO-osztlyozson?}
translate H ClassifyAll {Az sszes (rja fell a rgi ECO-kdokat)}
translate H ClassifyYear {Az utbbi vben jtszott jtszmk}
translate H ClassifyMonth {Az utbbi hnapban jtszott jtszmk}
translate H ClassifyNew {Csak az eddig mg nem osztlyozott jtszmk}
translate H ClassifyCodes {Hasznland ECO-kdok}
translate H ClassifyBasic {Csak az alapkdok ("B12", ...)}
translate H ClassifyExtended {Kiterjesztett SCID-kdok ("B12j", ...)}

# Compaction:
translate H NameFile {Nvfjl}
translate H GameFile {Jtszmafjl}
translate H Names {Nevek}
translate H Unused {Hasznlaton kvl}
translate H SizeKb {Mret (kB)}
translate H CurrentState {Jelenlegi llapot}
translate H AfterCompaction {Tmrts utn}
translate H CompactNames {Nvfjl tmrtse}
translate H CompactGames {Jtszmafjl tmrtse}
translate H NoUnusedNames "Nincsenek nem hasznlt nevek, gyhogy a nvfjl mr teljesen tmr."
translate H NoUnusedGames "A nvfjl mr teljesen tmr."
translate H NameFileCompacted {Az adatbzis "[file tail [sc_base filename]]" nvfjlja tmrtve van.}
translate H GameFileCompacted {Az adatbzis "[file tail [sc_base filename]]" jtszmafjlja tmrtve van.}

# Sorting:
translate H SortCriteria {Kritriumok}
translate H AddCriteria {Kritriumok hozzadsa}
translate H CommonSorts {Szoksos rendezsek}
translate H Sort {Rendezs}

# Exporting:
translate H AddToExistingFile {Jtszmk hozzadsa ltez fjlhoz?}
translate H ExportComments {Megjegyzsek exportlsa?}
translate H ExportVariations {Vltozatok exportlsa?}
translate H IndentComments {Megjegyzsek igaztsa?}
translate H IndentVariations {Vltozatok igaztsa?}
translate H ExportColumnStyle {Oszlop stlusa (soronknt egy lps)?}
translate H ExportSymbolStyle {Szimblumok stlusa:}
translate H ExportStripMarks {Kivegye a megjegyzsekbl a mez- s nylmegjellseket?}

# Goto game/move dialogs:
translate H LoadGameNumber {A betltend jtszma sorszma:}
translate H GotoMoveNumber {Ugrs a kvetkez lpshez:}

# Copy games dialog:
translate H CopyGames {Jtszmk msolsa}
translate H CopyConfirm {
 Tnyleg t akarod msolni
 a [::utils::thousands $nGamesToCopy] szrt jtszmt
 a "$fromName" adatbzisbl
 a "$targetName" adatbzisba?
}
translate H CopyErr {Nem tudom tmsolni a jtszmkat.}
translate H CopyErrSource {forrs}
translate H CopyErrTarget {cl}
translate H CopyErrNoGames {szrjben nincsenek jtszmk.}
translate H CopyErrReadOnly {kizrlag olvashat.}
translate H CopyErrNotOpen {nincs megnyitva.}

# Colors:
translate H LightSquares {Vilgos mezk}
translate H DarkSquares {Stt mezk}
translate H SelectedSquares {Kivlasztott mezk}
translate H SuggestedSquares {Javasolt lpsek mezi}
translate H WhitePieces {Vilgos figurk}
translate H BlackPieces {Stt figurk}
translate H WhiteBorder {Vilgos krvonal}
translate H BlackBorder {Stt krvonal}

# Novelty window:
translate H FindNovelty {jts keresse}
translate H Novelty {jts}
translate H NoveltyInterrupt {jtskeress lelltva}
translate H NoveltyNone {Ebben a jtszmban nem talltam jtst.}
translate H NoveltyHelp {
SCID megkeresi az aktulis jtszma els olyan lpst, amely nem szerepel sem a kivlasztott adatbzisban, sem az ECO megnyitstrban.
}

# Sounds configuration:
translate H SoundsFolder {Hangfjlok knyvtra}
translate H SoundsFolderHelp {A knyvtrban a King.wav, a.wav, 1.wav, s..t. fjloknak kell szerepelnik.}
translate H SoundsAnnounceOptions {Lpsbemondsok belltsai}
translate H SoundsAnnounceNew {j lps bemondsa amint megtesszk}
translate H SoundsAnnounceForward {Lps bemondsa amikor egy lpst elre lpnk}
translate H SoundsAnnounceBack {Lps bemondsa amikor visszavesznk vagy egy lpst htra lpnk}

# Upgrading databases:
translate H Upgrading {Feljts}
translate H ConfirmOpenNew {
Ez rgi formtum (SCID 3) adatbzis, amelyet SCID 4 nem tud megnyitni, de mr ltrehozott egy j formtum (SCID 4) verzit.

Szeretnd megnyitni az adatbzis j formtum verzijt?
}
translate H ConfirmUpgrade {
Ez rgi formtum (SCID 3) adatbzis. j formtum verzit kell ltrehozni belle, hogy SCID 4 hasznlni tudja.

A feljts j verzit hoz ltre az adatbzisbl. Az eredeti fjlok srtetlenl megmaradnak.

Az eljrs eltarthat egy darabig, de csak egyszer kell elvgezni. Megszakthatod, ha tl sokig tart.

Szeretnd most feljtani ezt az adatbzist?
}

# Recent files options:
translate H RecentFilesMenu {Az aktulis fjlok szma a Fjl menben}
translate H RecentFilesExtra {Az aktulis fjlok szma a kiegszt almenben}

# My Player Names options:
translate H MyPlayerNamesDescription {
Add meg az ltalad kedvelt jtkosok nevt, soronknt egyet. Helyettest karaktereket (pl. "?" tetszleges karakter helyett, "*" tetszleges karaktersorozat helyett) is hasznlhatsz.

Amikor betltd egy a listn szerepl jtkos jtszmjt, a fablak sakktblja szksg esetn elfordul, hogy a jtszmt annak a jtkosnak a szemszgbl mutassa.
}
translate H showblunderexists {Jelezd a durva hibt}
translate H showblundervalue {Mutasd a durva hiba mrtkt}
translate H showscore {Mutasd az rtkelst}
translate H coachgame {Edz bekapcsolsa}
translate H configurecoachgame {Edzs zemmd belltsai}
translate H configuregame {Jtszmabelltsok}
translate H Phalanxengine {Phalanx}
translate H Coachengine {Edzmotor}
translate H difficulty {Nehzsg}
translate H hard {nehz}
translate H easy {knny}
translate H Playwith {Szned}
translate H white {vilgos}
translate H black {stt}
translate H both {mindkett}
translate H Play {Jtk}
translate H Noblunder {Nincs durva hiba}
translate H blunder {durva hiba}
translate H Noinfo {-- Nincs adat --}
translate H PhalanxOrTogaMissing {Phalanx vagy Toga nincs meg}
translate H moveblunderthreshold {egy lps durva hiba, ha a vesztesg nagyobb mint}
translate H limitanalysis {A motor ennyi ideig elemezhet}
translate H seconds {msodperc}
translate H Abort {Elg}
translate H Resume {Folytasd}
translate H OutOfOpening {Vge a megnyitstrnak}
translate H NotFollowedLine {Eltrtl a vltozattl}
translate H DoYouWantContinue {Akarod folytatni?}
translate H CoachIsWatching {Az edz figyel}
translate H Ponder {Folyamatos gondolkods}
translate H LimitELO {l korltozsa}
translate H DubiousMovePlayedTakeBack {Ktes lps, visszaveszed?}
translate H WeakMovePlayedTakeBack {Gyenge lps, visszaveszed?}
translate H BadMovePlayedTakeBack {Rossz lps, visszaveszed?}
translate H Iresign {Feladom.}
translate H yourmoveisnotgood {Ez nem j lps.}
translate H EndOfVar {A vltozatnak vge.}
translate H Openingtrainer {Megnyitsgyakorls}
translate H DisplayCM {Mutasd a szba jv lpseket}
translate H DisplayCMValue {Mutasd a szba jv lpsek rtkelst}
translate H DisplayOpeningStats {Mutasd a statisztikt}
translate H ShowReport {Mutasd a jelentst}
translate H NumberOfGoodMovesPlayed {a j lpsek szma}
translate H NumberOfDubiousMovesPlayed {a ktes lpsek szma}
translate H NumberOfMovesPlayedNotInRepertoire {a repertorban nem szerepl lpsek szma}
translate H NumberOfTimesPositionEncountered {az lls elfordulsainak a szma}
translate H PlayerBestMove  {Csak a legjobb lpseket engedlyezi}
translate H OpponentBestMove {Az ellenfl a legjobbakat lpi}
translate H OnlyFlaggedLines {Csak megjellt vltozatokat jtszhatsz meg}
translate H resetStats {Statisztika trlse}
translate H Repertoiretrainingconfiguration {Repertorgyakorls belltsai}
translate H Loadingrepertoire {Repertor betltse}
translate H Movesloaded {Betlttt lpsek}
translate H Repertoirenotfound {A repertor nincs meg.}
translate H Openfirstrepertoirewithtype {Elbb nyiss meg egy repertor-adatbzist a jobb oldali ikon segtsgvel.}
translate H Movenotinrepertoire {A lps nincs a repertorban.}
translate H PositionsInRepertoire {A repertorban szerepl llsok}
translate H PositionsNotPlayed {A nem jtszott llsok}
translate H PositionsPlayed {A megjtszott llsok}
translate H Success {Siker}
translate H DubiousMoves {Ktes lpsek}
translate H OutOfRepertoire {A repertor kimerlt.}
translate H ConfigureTactics {Taktika belltsai}
translate H ResetScores {Eredmnyek trlse}
translate H LoadingBase {Adatbzis betltse}
translate H Tactics {Taktika}
translate H ShowSolution {Mutasd meg a megfejtst.}
# ====== TODO To be translated ======
translate H NextExercise {Next exercise}
# ====== TODO To be translated ======
translate H PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate H StopTraining {Stop training}
translate H Next {Kvetkez}
translate H ResettingScore {Eredmnyek trlse}
translate H LoadingGame {Jtszma betltse}
translate H MateFound {Megvan a matt.}
translate H BestSolutionNotFound {Nincs meg a legjobb megolds!}
translate H MateNotFound {Nincs meg a matt.}
translate H ShorterMateExists {Van rvidebb matt.}
translate H ScorePlayed {A megtett lps rtkelse}
translate H Expected {vrt}
translate H ChooseTrainingBase {Vlaszd ki az edzsadatbzist.}
translate H Thinking {Gondolkodom...}
translate H AnalyzeDone {Az elemzs ksz.}
translate H WinWonGame {Nyert jtszma megnyerse}
translate H Lines {Vltozatok}
translate H ConfigureUCIengine {UCI-motor belltsa}
translate H SpecificOpening {Meghatrozott megnyits}
translate H StartNewGame {j jtszma}
translate H FixedLevel {Megadott szint}
translate H Opening {Megnyits}
translate H RandomLevel {Vletlen szint}
translate H StartFromCurrentPosition {Ez legyen a kezdlls}
translate H FixedDepth {Adott mlysg}
translate H Nodes {Csompont} 
translate H Depth {Mlysg}
translate H Time {Id} 
translate H SecondsPerMove {Msodperc lpsenknt}
translate H Engine {Motor}
translate H TimeMode {Idbeoszts}
translate H TimeBonus {Idalap + nvekmny}
translate H TimeMin {perc}
translate H TimeSec {msodperc}
translate H AllExercisesDone {Minden gyakorlat ksz.}
translate H MoveOutOfBook {A lps nem szerepel a megnyitstrban.}
translate H LastBookMove {Utols lps a megnyitstrban}
translate H AnnotateSeveralGames {Tbb jtszma kommentlsa\na jelenlegitl eddig:}
translate H FindOpeningErrors {Megnyitsi hibk keresse}
translate H MarkTacticalExercises {Taktikai gyakorlatok megjellse}
translate H UseBook {Megnyitstr-hasznlat}
translate H MultiPV {Tbb vltozat}
translate H Hash {Hesmemria}
translate H OwnBook {A motor megnyitstrnak hasznlata}
translate H BookFile {Megnyitstr}
translate H AnnotateVariations {Vltozatok kommentlsa}
translate H ShortAnnotations {Rvid kommentr}
translate H addAnnotatorTag {rtkel jel hozzadsa}
translate H AddScoreToShortAnnotations {Rvid kommentr kiegsztse rtkelssel}
translate H Export {Export}
translate H BookPartiallyLoaded {Megnyitstr rszlegesen betltve}
translate H Calvar {Vltozatok szmtsa}
translate H ConfigureCalvar {Bellts}
translate H Reti {Rti}
translate H English {Angol}
translate H d4Nf6Miscellaneous {1.d4 Nf6 vegyes}
translate H Trompowsky {Trompowsky}
translate H Budapest {Budapest}
translate H OldIndian {indiai}
translate H BenkoGambit {Benk-csel}
translate H ModernBenoni {Modern Benoni}
translate H DutchDefence {Holland vdelem}
translate H Scandinavian {Skandinv}
translate H AlekhineDefence {Aljechin-vdelem}
translate H Pirc {Pirc}
translate H CaroKann {Caro-Kann}
translate H CaroKannAdvance {Betols Caro-Kann}
translate H Sicilian {Szicliai}
translate H SicilianAlapin {Szicliai Alapin}
translate H SicilianClosed {Zrt szicliai}
translate H SicilianRauzer {Szicliai Rauzer}
translate H SicilianDragon {Szicliai srkny}
translate H SicilianScheveningen {Szicliai Scheveningen}
translate H SicilianNajdorf {Szicliai Najdorf}
translate H OpenGame {Nylt megnyitsok}
translate H Vienna {Bcsi jtk}
translate H KingsGambit {Kirlycsel}
translate H RussianGame {Orosz vdelem}
translate H ItalianTwoKnights {Olasz megnyits/Ketts huszrjtk}
translate H Spanish {Spanyol}
translate H SpanishExchange {Cserespanyol}
translate H SpanishOpen {Nylt spanyol}
translate H SpanishClosed {Zrt spanyol}
translate H FrenchDefence {Francia vdelem}
translate H FrenchAdvance {Betols francia}
translate H FrenchTarrasch {Francia Tarrasch}
translate H FrenchWinawer {Francia Winawer}
translate H FrenchExchange {Cserefrancia}
translate H QueensPawn {Vezrgyalog megnyits}
translate H Slav {Szlv}
translate H QGA {Elfogadott vezrcsel}
translate H QGD {Elhrtott vezrcsel}
translate H QGDExchange {Elhrtott vezrcsel - cserevltozat}
translate H SemiSlav {Flszlv}
translate H QGDwithBg5 {Elhrtott vezrcsel Fg5-tel}
translate H QGDOrthodox {Orthodox vezrcsel}
translate H Grunfeld {Grnfeld}
translate H GrunfeldExchange {Grnfeld - cserevltozat}
translate H GrunfeldRussian {Grnfeld - orosz vltozat}
translate H Catalan {Kataln}
translate H CatalanOpen {Nylt kataln}
translate H CatalanClosed {Zrt kataln}
translate H QueensIndian {Vezrindiai}
translate H NimzoIndian {Nimzo-indiai}
translate H NimzoIndianClassical {Klasszikus Nimzo-indiai}
translate H NimzoIndianRubinstein {Nimzo-indiai - Rubinstein}
translate H KingsIndian {Kirlyindiai}
translate H KingsIndianSamisch {Kirlyindiai - Smisch}
translate H KingsIndianMainLine {Kirlyindiai - fvltozat}
translate H ConfigureFics {FICS belltsa}
translate H FICSGuest {Belps vendgknt}
translate H FICSServerPort {Szerverport}
# ====== TODO To be translated ======
translate H FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate H FICSRefresh {Refresh}
translate H FICSTimesealPort {Idblyegport}
translate H FICSSilence {Csend}
translate H FICSOffers {Ajnlatok}
# ====== TODO To be translated ======
translate H FICSConsole {Console}
translate H FICSGames {Jtszmk}
# ====== TODO To be translated ======
translate H FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate H FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate H FICSRelayedGames {Relayed games}
translate H FICSFindOpponent {Ellenflkeres}
translate H FICSTakeback {Visszavtel}
translate H FICSTakeback2 {Visszavtel 2}
translate H FICSInitTime {Kezdeti id (perc)}
translate H FICSIncrement {Nvekmny (msodperc)}
translate H FICSRatedGame {les jtszma}
translate H FICSAutoColour {automatikus}
translate H FICSManualConfirm {kzi megersts}
translate H FICSFilterFormula {Szrformula}
translate H FICSIssueSeek {Keress}
translate H FICSChallenge {Kihvs}
translate H FICSAccept {elfogad}
translate H FICSDecline {elutast}
translate H FICSColour {Szn}
translate H FICSSend {kld}
translate H FICSConnect {Csatlakozs}
# ====== TODO To be translated ======
translate H FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate H FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate H FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate H GameReview {Game review}
# ====== TODO To be translated ======
translate H GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate H GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate H GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate H GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate H GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate H GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate H GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate H GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate H GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate H GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate H GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate H GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate H GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate H GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate H GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate H GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate H GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate H GameReviewMovesPlayedEngine {Moves played like engine}
translate H CCDlgConfigureWindowTitle {Levelezsi sakk belltsai}
translate H CCDlgCGeneraloptions {ltalnos lehetsgek}
translate H CCDlgDefaultDB {Alaprtelmezs adatbzis:}
translate H CCDlgInbox {Bejv postafik (tvonal):}
translate H CCDlgOutbox {Kimen postafik (tvonal):}
translate H CCDlgXfcc {Xfcc-bellts:}
translate H CCDlgExternalProtocol {Kls protokollkezel (pl. Xfcc)}
translate H CCDlgFetchTool {Bekr eszkz:}
translate H CCDlgSendTool {Kld eszkz:}
translate H CCDlgEmailCommunication {eMail-kapcsolat}
translate H CCDlgMailPrg {Levelezprogram:}
translate H CCDlgBCCAddr {(B)CC-cm:}
translate H CCDlgMailerMode {zemmd:}
translate H CCDlgThunderbirdEg {pl. Thunderbird, Mozilla Mail, Icedove...}
translate H CCDlgMailUrlEg {pl. Evolution}
translate H CCDlgClawsEg {pl. Sylpheed Claws}
translate H CCDlgmailxEg {pl. mailx, mutt, nail...}
translate H CCDlgAttachementPar {Mellkletparamter:}
translate H CCDlgInternalXfcc {Bels Xfcc-tmogats hasznlata}
# ====== TODO To be translated ======
translate H CCDlgConfirmXfcc {Confirm moves}
translate H CCDlgSubjectPar {Trgyparamter:}
translate H CCDlgDeleteBoxes {Be/kimen postafik kirtse}
translate H CCDlgDeleteBoxesText {Tnyleg ki akarod rteni a levelezsi sakk be- s kimen postafikjait? Ehhez jra szinkronizlni kell, amely jtszmid utols llapott mutatja.}
# ====== TODO To be translated ======
translate H CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate H CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate H CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate H CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
translate H CCDlgStartEmail {Start new eMail game}
translate H CCDlgYourName {Neved:}
translate H CCDlgYourMail {eMail-cmed:}
translate H CCDlgOpponentName {Az ellenfl neve:}
translate H CCDlgOpponentMail {Az ellenfl eMail-cme:}
translate H CCDlgGameID {Jtszmaazonost (egyedi):}
translate H CCDlgTitNoOutbox {Scid: A levelezsi sakk kimen postafikja}
translate H CCDlgTitNoInbox {Scid: A levelezsi sakk bejv postafikja}
translate H CCDlgTitNoGames {Scid: Nincsenek levelezsi jtszmk.}
translate H CCErrInboxDir {A levelezsi sakk bejv postafikjnak knyvtra:}
translate H CCErrOutboxDir {A levelezsi sakk kimen postafikjnak knyvtra:}
translate H CCErrDirNotUsable {nem ltezik vagy nem hozzfrhet!\nEllenrizd s javtsd ki a belltsokat.}
translate H CCErrNoGames {nem tartalmaz jtszmt!\nElbb krd be ket.}
translate H CCDlgTitNoCCDB {Scid: Nincs levelezsi adatbzis.}
translate H CCErrNoCCDB {Nincs megnyitva "levelezsi" tpus adatbzis. Nyiss meg egyet mieltt levelezsi funkcikat akarnl hasznlni.}
translate H CCFetchBtn {Krj be jtszmkat a szervertl, s dolgozd fel a bejv postafikot.}
translate H CCPrevBtn {Menj az elz jtszmhoz.}
translate H CCNextBtn {Menj a kvetkez jtszmhoz.}
translate H CCSendBtn {Lps elkldse}
translate H CCEmptyBtn {A postafikok kirtse}
translate H CCHelpBtn {Segtsg ikonokhoz s llapotjelzkhz\nltalnos segtsgrt nyomd meg F1-et!}
translate H CCDlgServerName {Szervernv:}
translate H CCDlgLoginName  {Bejelentkez nv:}
translate H CCDlgPassword   {Jelsz:}
translate H CCDlgURL        {Xfcc-URL:}
translate H CCDlgRatingType {rtkszm tpusa:}
translate H CCDlgDuplicateGame {Nem egyedi jtszmaazonost}
translate H CCDlgDuplicateGameError {Ez a jtszma egynl tbbszr fordul el adatbzisodban. Trld a msolatokat, s tmrtsd jtszmafjlodat (Fjl/Gondozs/Adatbzis tmrtse).}
# ====== TODO To be translated ======
translate H CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate H CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate H CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate H CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate H CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate H CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate H CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate H CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate H CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate H ExtHWConfigConnection {Kls hardver belltsa}
translate H ExtHWPort {Port}
translate H ExtHWEngineCmd {Motorparancs}
translate H ExtHWEngineParam {Motorparamter}
translate H ExtHWShowButton {Mutasd meg a nyomgombot.}
translate H ExtHWHardware {Hardver}
translate H ExtHWNovag {Novag Citrine}
translate H ExtHWInputEngine {Bemeneti motor}
translate H ExtHWNoBoard {Nincs sakktbla}
# ====== TODO To be translated ======
translate H NovagReferee {Referee}
translate H IEConsole {Bemeneti motor kezelszerve}
translate H IESending {Lpsek bekrve}
translate H IESynchronise {Szinkronizls}
translate H IERotate  {Forgats}
translate H IEUnableToStart {Nem tudom elindtani ezt a bemeneti motort:}
translate H DoneWithPosition {lls ksz}
translate H Board {Sakktbla}
translate H showGameInfo {A jtszma adatai}
translate H autoResizeBoard {A sakktbla automatikus tmretezse}
translate H DockTop {Mozgats fellre}
translate H DockBottom {Mozgats alulra}
translate H DockLeft {Mozgats balra}
translate H DockRight {Mozgats jobbra}
translate H Undock {Felolds}
# ====== TODO To be translated ======
translate H ChangeIcon {Change icon...}
}

# Tips of the day in Hungarian

set tips(H) {
  {
    Scid-ben tbb mint 30 oldalnyi <a Index>segtsg</a> van, s a legtbb Scid-ablakban
    az <b>F1</b> billenty megnyomsra elbukkan egy arra az ablakra vonatkoz
    segt szveg.
  }
  {
    Egyes Scid-ablakoknak (pl. a jtszmainformcis terlet, az
    <a Switcher>adatbzisvlt</a>) jobbegrgombos menjk van.
    Nyomd meg a jobb egrgombot az egyes ablakokban, s megltod,
    hogy ott is van-e, s milyen lehetsgeket knl.
  }
  {
    Scid tbb lehetsget is knl lpsek bevitelre, amelyek
    kzl kedved szerint vlaszthatsz. Hasznlhatod az egeret
    (lpsjavaslattal vagy anlkl) vagy a billentyzetet
    (lpskiegsztssel vagy anlkl). Olvasd el a rszleteket a
    <a Moves>Lpsek bevitele</a> cm segtlapon.
  }
  {
    Ha bizonyos adatbzisokat gyakran hasznlsz, jelld meg ket egy-egy
    <a Bookmarks>knyvjelz</a> segtsgvel, s ezutn a knyvjelzmen
    tjn gyorsabban tudod megnyitni ket.
  }
  {
    A <a PGN>PGN-ablak</a> rvn az aktulis jtszma sszes
    lpst lthatod (elgazsokkal s megjegyzsekkel).
    A PGN-ablakban brmelyik lpshez elugorhatsz, ha rkattintasz a bal
    egrgombbal; a kzps vagy a jobb egrgomb hasznlatval pedig
    a lpshez tartoz llst tekintheted meg.
  }
  {
    A bal egrgomb rvn thzssal egyik adatbzisbl a msikba
    msolhatsz jtszmkat az <a Switcher>adatbzisvlt</a> ablakban.
  }
  {
    Scid meg tud nyitni PGN-fjlokat, mg akkor is, ha Gzip tjn
    tmrtve vannak (.gz fjlnv-kiterjesztssel). A megnyitott PGN-fjlok
    csak olvashatak, ezrt ha egy PGN-fjlt Scidben akarsz tszerkeszteni,
    hozz ltre j Scid-adatbzist, s az <a Switcher>adatbzisvlt</a>
    segtsgvel msold bele a PGN-fjl jtszmit.
  }
  {
    Ha egy nagy adatbzist gyakran hasznlsz a <a Tree>faszerkezet</a>-ablakkal,
    rdemes a <b>Cache-fjl feltltse</b> pontot vlasztani a faszerkezet-ablak
    Fjl menjbl. Ez megjegyzi sok gyakori megnyits faszerkezet-adatait,
    miltal gyorsabb lesz a hozzfrs az adatbzishoz.
  }
  {
    A <a Tree>faszerkezet</a>-ablak megmutatja az sszes lpst, amelyet
    az adott llsban tettek, de ha az sszes lpssorrendet ltni akarod,
    amely ehhez az llshoz vezetett, <a OpReport>megnyitsi sszefoglal</a>
    ltrehozsval megkaphatod.
  }
  {
    A <a GameList>jtszmk listja</a> ablakban egy oszlop fejlcre
    kattintva mdosthatod az oszlop szlessgt.
  }
  {
    A <a PInfo>jtkosinformci</a>-ablak segtsgvel (kinyitshoz
    egyszeren kattints valamelyik jtkos nevre a fablak sakktblja alatt
    tallhat jtszmainformcis terleten) knnyedn bellthat gy
    a <a Searches Filter>szr</a>, hogy bizonyos jtkos bizonyos eredmnnyel
    vgzdtt sszes jtszmjt tartalmazza. Ehhez csak a <red>piros szn</red>
    rtkek valamelyikre kell kattintani.
  }
  {
    Megnyits tanulmnyozsakor egy fontos llsban nagyon hasznos lehet a
    <a Searches Board>pozcikeress</a> <b>Gyalogok</b> vagy
    <b>Oszlopok</b> belltssal, mert ez megmutathatja,
    hogy mg mely megnyitsok vezetnek ugyanehhez a gyalogszerkezethez.
  }
  {
    Ha a jtszmainformcis terleten (a sakktbla alatt) megnyomod
    a jobb egrgombot, elbukkan egy men, amellyel testre szabhat. 
    Pldul megkrheted Scidet, hogy rejtse el a kvetkez lpst, ami
    edzsnl hasznos, ha egy jtszma lpseit ki akarod tallni.
  }
  {
    Ha gyakran vgzel <a Maintenance>gondozs</a>t nagy adatbzison,
    egyszerre hajthatsz vgre tbb gondozsi feladatot a
    <a Maintenance Cleaner>takart</a> segtsgvel.
  }
  {
    Ha nagy adatbzisod van, amelyben a legtbb jtszmnl az esemny ideje
    is fel van tntetve, s a jtszmkat id szerint szeretnd rendezni, vgezd
    a <a Sorting>rendezs</a>t az esemny ideje majd esemny szerint,
    s ne fordtva. gy ugyanannak a versenynek a klnbz keltezs jtszmi
    egytt fognak maradni (termszetesen csak akkor, ha mindegyiknl azonos
    az esemny keltezse).
  }
  {
    <a Maintenance Twins>Ikerjtszmk trlse</a> eltt clszer
    <a Maintenance Spellcheck>helyesrsellenrzs</a> al vetni
    az adatbzist, mert gy Scid tbb ikret tud megtallni s trlsre kijellni.
  }
  {
    <a Flags>Megjellsek</a> rvn az adatbzis jtszminak olyan
    jellegzetessgeit lehet kiemelni, amelyek alapjn ksbb keresst
    akarsz vgezni (gyalogszerkezet, taktikai motvum stb.).
    Megjellsekre <a Searches Header>keress fejlc alapjn</a> lehet
    keresni.
  }
  {
    Ha egy jtszmt tanulmnyozva szeretnl kiprblni lpseket
    a jtszma megvltoztatsa nlkl, egyszeren kapcsold be a
    Vltozat kiprblsa zemmdot (a <b>Ctrl+space</b>
    billentykombincival vagy az eszkztr ikonjval), majd kapcsold ki,
    ha vgeztl, s vissza akarsz trni az eredeti jtszmhoz.
  }
  {
    Ha meg akarod keresni egy adott llshoz vezet legkiemelkedbb
    jtszmkat (nagy rtkszm ellenfelek kztt), nyisd ki a
    <a Tree>faszerkezet</a>-ablakot, majd onnan nyisd ki a legjobb
    jtszmk listjt. Mg ezt a listt is szktheted, hogy csak
    meghatrozott eredmnnyel vgzd jtszmkat mutasson.
  }
  {
    Remekl lehet megnyitst tanulmnyozni nagy adatbzisra
    tmaszkodva oly mdon, hogy a <a Tree>faszerkezet</a>-ablakban
    bekapcsolod az edzst, majd az adatbzis ellen jtszva megnzheted,
    mely elgazsok fordulnak el gyakran.
  }
  {
    Ha kt adatbzisod van nyitva, s ltni szeretnd az els adatbzis
    <a Tree>faszerkezet</a>-adatait, mikzben a msiknak egyik
    jtszmjt tanulmnyozod, a <b>Rgzts</b> gomb megnyomsval
    rgztsd a ft az els adatbzishoz, majd vlts t a msikra.
  }
  {
    A <a Tmt>versenykeres</a> nemcsak arra val, hogy megkeress
    vele egy versenyt. Arra is hasznlhat, hogy megnzd, hogy egy jtkos
    mely versenyeken indult mostanban, vagy vgignzd egy adott orszgban
    rendezett legkiemelkedbb versenyeket.
  }
  {
    Az <a Searches Material>Anyag/szerkezet</a> keresablakban
    megtallhat nhny gyakran elfordul llsszerkezet, amely
    hasznos lehet megnyits vagy kzpjtk tanulmnyozsakor.
  }
  {
    Ha meghatrozott anyagi helyzetre keresel az
    <a Searches Material>Anyag/szerkezet</a> keresablakban, sokszor clszer
    a keresst olyan jtszmkra korltozni, amelyek tbb lpsen keresztl
    megfelelnek a feltteleknek. Ily mdon ki lehet zrni azokat a jtszmkat,
    amelyekben a keresett helyzet csak rvid ideig llt fenn.
  }
  {
    Ha egy fontos adatbzist nem szeretnl vletlenl megvltoztatni,
    megnyitsa utn vlaszd az <b>rsvdelem...</b> pontot a
    <b>Fjl</b> menbl, vagy lltsd t attribtumt csak olvashatra.
  }
  {
    Ha XBoardot vagy WinBoardot hasznlod (vagy ms olyan sakkprogramot,
    amely egy sakkllst szabvnyos FEN-jellssel a vglapra tud msolni),
    s t akarod msolni a rajta lv llst Scidbe, ennek leggyorsabb s
    legegyszerbb mdja az, hogy XBoard/WinBoard File menjbl
    <b>Copy Position</b> rvn, majd Scid Szerkeszts menjbl
    <b>Kezdlls beillesztse</b> tjn temeled az llst.
  }
  {
    <a Searches Header>Keress fejlc alapjn</a> esetben a
    jtkos-, esemny-, helyszn- s fordulnevek nem rzkenyek
    kis- vagy nagybet szempontjbl, s az egyezs nv belsejben is lehet.
    Ehelyett vgeztethetsz kis- vagy nagybet szempontjbl rzkeny
    dzskerkeresst is (ahol "?" = brmilyen karakter, "*" = esetleges
    tovbbi karakterek), ha a keresend szveget "idzjelben" adod meg.
    Pldul rj "*BEL"-t (idzjelekkel) a helysznmezbe, ha meg akarod tallni
    a Belgiumban jtszott jtszmkat, de a Belgrdban jtszottakat nem.
  }
  {
    Ha egy jtszmban helyesbteni akarsz egy lpst, de nem szeretnd,
    ha az t kvet lpsek elvesznnek, nyisd ki az <a Import>Import</a>
    ablakot, nyomd meg a <b>Beilleszti az aktulis jtszmt.</b> gombot,
    javtsd ki a tves lpst, majd nyomd meg az <b>Import</b> gombot.
  }
  {
    Ha van betltve ECO-osztlyoz fjlod, a <b>Jtszma</b> menbl
    <b>Megnyits azonostsa</b> tjn (gyorsbillenty: Ctrl+Shift+D)
    elugorhatsz az aktulis jtszmban elfordul legmlyebb osztlyozott llshoz.
    .
  }
  {
    Ha meg akarod nzni egy fjl mrett vagy utols mdostsnak
    idpontjt, mieltt megnyitnd, hasznld megnyitsra a
    <a Finder>fjlkeres</a>t.
  }
  {
    A <a Repertoire>repertor</a>fjl remek md kedvelt megnyitsaid
    nyilvntartsra, emellett meg lehet vele keresni azokat a jtszmkat,
    amelyekben e megnyitsok elfordultak. Ha megnyitsaidat repertorfjlban
    tartod, minden j jtszmagyjtemnyt tszrhetsz vele,
    s vgignzheted azokat a jtszmkat, amelyekben kedvelt megnyitsaid
    elfordulnak.
  }
  {
    A <a OpReport>megnyitsi sszefoglal</a> nagyszer lehetsget nyjt
    egy lls megismersre. Megnzheted, mennyire eredmnyes,
    gyakran vezet-e rvid dntetlenre, megmutatja a gyakran elfordul
    pozcis tmkat.
  }
  {
    A leghasznlatosabb rtkel jeleket (!, !?, += stb.) a
    <a Comment>megjegyzsszerkeszt<a> hasznlata nlkl,
    billentyzssel is hozz lehet fzni az aktulis lpshez vagy llshoz.
    Pldul "!", majd Enter letsvel be tudod szrni a "!" jelet.
    Bvebb ismertetst a <a Moves>Lpsek bevitele</a> cm segtlap
    nyjt.
  }
  {
    Ha egy adatbzis megnyitsai kztt <a Tree>faszerkezet</a> segtsgvel
    bngszel, hasznos sszefoglalt kaphatsz arrl, hogy a vizsglt megnyits
    milyen eredmnyes volt az utbbi idben ers jtkosok kztt. Ehhez nyisd ki
    a Statisztika ablakot (gyorsbillenty: Ctrl+I).
  }
  {
    Megvltoztathatod a fablak sakktbljnak mrett, ha a <b>Ctrl</b>
    s a <b>Shift</b> billentyk nyomva tartsa mellett megnyomod a
    <b>bal</b> vagy a <b>jobb</b> nyilat.
  }
  {
    <a Searches>Keress</a> utn knnyszerrel vgignzheted a tallt
    jtszmkat. Tartsd nyomva a <b>Ctrl</b> billentyt, s nyomd meg a
    <b>fel</b> vagy a <b>le</b> nyilat az elz vagy a kvetkez
    <a Searches Filter>szr</a>jtszma betltshez.
  }
}

# end of hungary.tcl
### italian.tcl:
# Italian language support for Scid.
# Added by Giancarlo Bassi.
# Updated by Paolo Montrasi.
# Updated by Michele Rinesi on 19/02/2004.
# Untranslated messages are marked with a "***" comment.

addLanguage I Italian 0 ; # iso8859-1

proc setLanguage_I {} {

# File menu:
menuText I File "File" 0
menuText I FileNew "Nuovo..." 0 {Crea un nuovo database Scid}
menuText I FileOpen "Apri..." 0 {Apre un database Scid esistente}
menuText I FileClose "Chiudi" 0 {Chiude un database Scid attivo}
menuText I FileFinder "Finder" 0 {Apre la finestra per cercare i file}
menuText I FileBookmarks "Bookmarks" 0 {Menu' Bookmarks (chiave: Ctrl+B)}
menuText I FileBookmarksAdd "Aggiungi bookmark" 0 \
  {Memorizza la partita e la posizione del database attivo}
menuText I FileBookmarksFile "Memorizza bookmark" 0 \
  {Memorizza un bookmark per la partita e posizione corrente}
menuText I FileBookmarksEdit "Modifica bookmarks..." 0 \
  {Modifica il menu' dei bookmarks memorizzati}
menuText I FileBookmarksList "Mostra i bookmark come una lista" 0 \
  {Mostra le cartelle dei bookmarks come una lista, senza sottomenu'}
menuText I FileBookmarksSub "Mostra i bookmark come sottomenu'" 0 \
  {Mostra le cartelle dei bookmarks con sottomenu', non a lista}
menuText I FileMaint "Gestione" 0 {Strumenti di gestione di un database Scid}
menuText I FileMaintWin "Finestra di Gestione" 0 \
  {Apre/chiude la finestra di gestione di un database Scid}
menuText I FileMaintCompact "Compatta database..." 0 \
  {Compatta i file di database, rimuovendo le partite cancellate e i nomi non usati}
menuText I FileMaintClass "Classificazione ECO di partite..." 2 \
  {Ricalcola il codice ECO di tutte le partite}
menuText I FileMaintSort "Ordina database..." 0 \
  {Ordina tutte le partite nel database}
menuText I FileMaintDelete "Cancella le partite doppie..." 20 \
  {Cerca le partite duplicate e le seleziona per cancellarle}
menuText I FileMaintTwin "Finestra di controllo delle doppie" 0 \
  {Apre/aggiorna la finestra del controllo dei duplicati}
menuText I FileMaintName "Controllo di nomi" 13 {Editor di nomi e controllo ortografico}
menuText I FileMaintNameEditor "Finestra di editor dei nomi" 0 \
  {Apre/chiude la finestra di editor dei nomi}
menuText I FileMaintNamePlayer "Controllo di nomi dei giocatori..." 22 \
  {Controllo di nomi dei giocatori mediante il file di verifica di nomi}
menuText I FileMaintNameEvent "Controllo di nomi di Eventi..." 21 \
  {Controllo di nomi dei eventi mediante il file di verifica di eventi}
menuText I FileMaintNameSite "Controllo di nomi di siti..." 21 \
  {Controllo di nomi di siti mediante il file di verifica}
menuText I FileMaintNameRound "Controllo di nomi di turni..." 21 \
  {Controllo di nomi di turni mediante il file di verifica}
menuText I FileReadOnly "Sola-lettura..." 0 \
  {Tratta il database attuale in sola lettura, prevenendo variazioni}
menuText I FileSwitch "Attiva un database" 0 \
  {Attiva uno fra i database aperti}
menuText I FileExit "Esci" 0 {Esce da Scid}
# ====== TODO To be translated ======
menuText I FileMaintFixBase "Fix corrupted base" 0 {Try to fix a corrupted base}

# Edit menu:
menuText I Edit "Edita" 0
menuText I EditAdd "Aggiunge una variante" 0 {Aggiunge una variante a questa mossa nella partita}
menuText I EditDelete "Cancella Variante" 0 {Cancella una variante per questa mossa}
menuText I EditFirst "Variante principale" 5 \
  {Promuove a variante principale nella lista}
menuText I EditMain "Promuove una Variante a Linea Principale" 0 \
  {Promuove una variante a linea principale}
menuText I EditTrial "Prova una variante" 0 \
  {Attiva/disattiva la modalita' di prova di una variante, per provare idee direttamente sulla scacchiera}
menuText I EditStrip "Pulisci" 2 {Elimina commenti o varianti dalla partita corrente}
# ====== TODO To be translated ======
menuText I EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText I EditRedo "Redo" 0 {Redo last game change}
menuText I EditStripComments "Commenti" 0 \
  {Elimina tutti i commenti e le annotazioni dalla parita corrente}
menuText I EditStripVars "Varianti" 0 {Elimina tutte le varianti dalla partita corrente}
menuText I EditStripBegin "Mosse dall'inizio" 1 \
  {Elimina le mosse dall'inizio della partita}
menuText I EditStripEnd "Mosse rimanenti" 0 \
  {Elimina le mosse rimanenti}
menuText I EditReset "Vuota la Clipbase" 0 \
  {Svuota completamente la clipbase}
menuText I EditCopy "Copia questa partita nella Clipbase" 1 \
  {Copia questa partita nella clipbase}
menuText I EditPaste "Incolla l'ultima partita nella Clipbase" 0 \
  {Incolla qui la partita della clipbase}
menuText I EditPastePGN "Paste Clipboard text as PGN game..." 10 \
  {Interpret the clipboard text as a game in PGN notation and paste it here} ;# ***
menuText I EditSetup "Posizione definita..." 10 \
  {Definisce una posizione per la partita corrente}
menuText I EditCopyBoard "Copia posizione" 6 \
  {Copia la posizione della scacchiera corrente in notazione FEN come testo (clipboard)}
menuText I EditPasteBoard "Incolla come posizione di partenza" 12 \
  {Imposta la posizione di partenza dalla selezione del testo corrente (clipboard)}

# Game menu:
menuText I Game "Partita" 0
menuText I GameNew "Annulla partita" 0 \
  {Torna alla posizione iniziale, rinunciando ai cambiamenti}
menuText I GameFirst "Carica la prima Partita" 13 {Carica la prima partita del filtro}
menuText I GamePrev "Carica la precedente Partita" 10 {Carica la precedente partita del filtro}
menuText I GameReload "Ricarica la Partita attuale" 0 \
  {Ricarica questa partita, eliminando ogni cambiamento eseguito}
menuText I GameNext "Carica la successiva Partita" 10 {Carica il successivo filtro di partite}
menuText I GameLast "Carica l'ultima partita" 9 {Carica l'ultima partita del filtro}
menuText I GameRandom "Carica una partica casuale" 8 {Carica una partita casuale del filtro}
menuText I GameNumber "Carica la partita numero..." 18 \
  {Carica una partita digitando il suo numero}
menuText I GameReplace "Salva: Sostituisce la partita..." 8 \
  {Salva questa partita, sostituendo la vecchia versione}
menuText I GameAdd "Save: Aggiunge la nuova partita..." 7 \
  {Salva questa partita come nuova partita nel database}
menuText I GameDeepest "Identifica apertura" 0 \
  {Va' alla posizione di partita piu' profonda listata nel libro ECO}
menuText I GameGotoMove "Vai alla mossa numero..." 0 \
  {Va' al numero di mossa specificato nella partita attuale}
menuText I GameNovelty "Trova Novita'..." 7 \
  {Cerca la prima mossa mai giocata della partita corrente}

# Search Menu:
menuText I Search "Cerca" 0
menuText I SearchReset "Annulla il filtro" 0 {Annulla il filtro per includere tutte le partite}
menuText I SearchNegate "Filtro Negato" 0 {Nega il filtro per comprendere solo partite escluse}
menuText I SearchCurrent "Posizione attuale..." 0 {Cerca la attuale posizione}
menuText I SearchHeader "Intestazione..." 0 {Ricerca per intestazione (giocatore, evento, etc)}
menuText I SearchMaterial "Materiale/Schema..." 0 {Ricerca per materiale o schema posizionale}
menuText I SearchUsing "Uso del file di ricerca..." 0 {Ricerca mediante un file di Opzioni}

# Windows menu:
menuText I Windows "Finestre" 2
menuText I WindowsComment "Editor di commenti" 10 {Apre/chiude l'editor di commenti}
menuText I WindowsGList "Lista di Partite" 0 {Apre/chiude la finestra di lista di partite}
menuText I WindowsPGN "Finestra PGN" 9 {Apre/chiude la finestra PGN (notazione di partita)}
menuText I WindowsPList "Trova giocatore" 2 {Apre/chiude la finestra per la ricerca di un giocatore}
menuText I WindowsTmt "Trova torneo" 2 {Apre/chiude la finestra per la ricerca di un torneo}
menuText I WindowsSwitcher "Selezione di Database" 11 {Apre/chiude la finestra per la selezione di un Database}
menuText I WindowsMaint "Finestra di gestione" 12 {Apre/chiude la finestra per la gestione di un Database}
menuText I WindowsECO "Navigazione ECO" 12 {Apre/chiude la finestra di navigazione ECO}
menuText I WindowsRepertoire "Editor di repertorio" 10 \
  {Apre/chiude l'editor di repertorio di apertura}
menuText I WindowsStats "Finestra di statistica" 12 {Apre/chiude la finestra di filtro statistico}
menuText I WindowsTree "Finestra di albero" 12 {Apre/chiude la finestra di albero}
menuText I WindowsTB "Finestra di Tablebase di finale" 12 \
  {Apre/chiude la finestra Tablebase}
menuText I WindowsBook "Libro delle aperture" 0 {Apre/chiude la finestra del libro delle aperture}
menuText I WindowsCorrChess "Gioco per corrispondenza" 0 {Apre/chiude la finestra per il gioco per corrispondenza}

# Tools menu:
menuText I Tools "Strumenti" 0
menuText I ToolsAnalysis "Motore di analisi..." 10 \
  {Inizia/termina il motore di analisi scacchistica}
menuText I ToolsAnalysis2 "Motore di analisi #2..." 19 \
  {Inizia/termina il motore di analisi scacchistica}
menuText I ToolsCross "Tabella" 0 {Mostra la tabella di torneo per questa partita}
menuText I ToolsEmail "Gestione Email" 10 \
  {Apre/chiude la finestra di gestione di partite per posta elettronica}
menuText I ToolsFilterGraph "Grafici relativi" 7 \
  {Apre/chiude la finestra dei grafici sul filtro con valori relativi}
menuText I ToolsAbsFilterGraph "Grafici assoluti" 7 {Apre/chiude la finestra dei grafici sul filtro con valori assoluti}
menuText I ToolsOpReport "Rapporto di Apertura" 0 \
  {Genera un rapporto di apertura per l'attuale posizione}
menuText I ToolsOpenBaseAsTree "Apri come albero..." 0   {Apre un database nella finestra per l'albero}
menuText I ToolsOpenRecentBaseAsTree "Apri recente come albero" 0   {Apre un database recente nella finestra per l'albero}
menuText I ToolsTracker "Dislocazione dei Pezzi"  0 {Apre/chiude la finestra con la traccia sulla dislocazione dei pezzi}
menuText I ToolsTraining "Allenamento"  0 {Strumenti per l'allenamento (tattica, aperture,...) }
menuText I ToolsTacticalGame "Partita tattica"  0 {Gioca una partita con le tattiche}
menuText I ToolsSeriousGame "Partita seria"  0 {Gioca una partita seria}
menuText I ToolsTrainOpenings "Aperture"  0 {Allenati con un repertorio}
# ====== TODO To be translated ======
menuText I ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
menuText I ToolsTrainTactics "Tattiche"  0 {Risolvi problemi tattici}
menuText I ToolsTrainCalvar "Calcolo delle varianti"  0 {Allenati sul calcolo delle varianti}
menuText I ToolsTrainFindBestMove "Trova la mossa migliore"  0 {Trova la mossa migliore}
menuText I ToolsTrainFics "Gioca su internet"  0 {Gioca su freechess.org}
# ====== TODO To be translated ======
menuText I ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText I ToolsBookTuning "Raffina il libro delle aperture" 0 {Raffina il libro delle aperture}
# ====== TODO To be translated ======
menuText I ToolsConnectHardware "Connect Hardware" 0 {Connect external hardware}
# ====== TODO To be translated ======
menuText I ToolsConnectHardwareConfigure "Configurazione" 1 {Configura la periferica}
# ====== TODO To be translated ======
menuText I ToolsConnectHardwareNovagCitrineConnect "Connetti Novag Citrine" 10 {Connetti la periferica Novag Citrine}
# ====== TODO To be translated ======
menuText I ToolsConnectHardwareInputEngineConnect "Connetti Input Engine" 10 {Connetti Input Engine (e.g. DGT)}
menuText I ToolsPInfo "Informazioni sul giocatore"  17 \
  {Apre/aggiorna la finestra di Informazione del giocatore}
menuText I ToolsPlayerReport "Report del giocatore ..." 3 \
  {Genera un Report del giocatore}
menuText I ToolsRating "Grafico del punteggio Elo" 24 \
  {Grafico storico del punteggio Elo dei giocatori della corrente partita}
menuText I ToolsScore "Grafico dei punti" 12 {Mostra la finestra del grafico dei punti}
menuText I ToolsExpCurrent "Esporta la partita attuale" 0 \
  {Scrive la partita attuale in un file di testo}
menuText I ToolsExpCurrentPGN "Esporta partita in un file PGN..." 15 \
  {Scrive la partita attuale in un file PGN}
menuText I ToolsExpCurrentHTML "Esporta partita in un file HTML..." 15 \
  {Scrive la partita attuale in un file HTML}
menuText I ToolsExpCurrentHTMLJS "Esporta partita in un file HTML con Javascript..." 15 {Scrive la partita attuale in un file HTML con Javascript}
menuText I ToolsExpCurrentLaTeX "Esporta partita in un file LaTeX..." 15 \
  {Scrive la partita attuale in un file LaTeX}
menuText I ToolsExpFilter "Esporta tutte le partite del filtro" 1 \
  {Scrive tutte le partite filtrate in un file di testo}
menuText I ToolsExpFilterPGN "Esporta filtro in file PGN..." 17 \
  {Scrive tutte le partite filtrate in un file PGN}
menuText I ToolsExpFilterHTML "Esporta filtro in file HTML..." 17 \
  {Scrive tutte le partite filtrate in un file HTML}
menuText I ToolsExpFilterHTMLJS "Esporta filtro in file HTML con Javascript..." 17 {Scrive tutte le partite filtrate in un file HTML con Javascript}
menuText I ToolsExpFilterLaTeX "Esporta filtro in un file LaTeX..." 17 \
  {Scrive tutte le partite filtrate in un file LaTeX}
menuText I ToolsImportOne "Importa una partita in formato PGN..." 0 \
  {Importa una partita da testo PGN}
menuText I ToolsImportFile "Importa file(s) di partite PGN..." 11 \
  {Importa le partite da uno o più file PGN}
menuText I ToolsStartEngine1 "Avvia il motore 1" 0  {Avvia il primo motore per l'analisi della posizione}
menuText I ToolsStartEngine2 "Avvia il motore 2" 0  {Avvia il secondo motore per l'analisi della posizione}
# ====== TODO To be translated ======
menuText I ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}

# Play menue
menuText I Play "Gioca" 0

# --- Correspondence Chess
menuText I CorrespondenceChess "Gioco per corrispondenza" 0 {Funzioni per il gioco per corrispondenza tramite eMail e Xfcc}
menuText I CCConfigure "Configura..." 0 {Configurazione generale e degli strumenti esterni}
# ====== TODO To be translated ======
menuText I CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
menuText I CCOpenDB "Apri Database..." 0 {Apri il database di default per il gioco per corrispondenza}
menuText I CCRetrieve "Trova Partite" 0 {Trova le partite tramite l'aiuto esterno Xfcc}
menuText I CCInbox "Processa Posta in Arrivo" 0 {Processa tutti i file nella posta in arrivo di Scid}
menuText I CCSend "Spedisci Mossa" 0 {Spedisce la tua mossa tramite eMail o Xfcc}
menuText I CCResign "Abbandona" 0 {Abbandona la partita (non tramite eMail)}
menuText I CCClaimDraw "Richiedi Patta" 0 {Spedisce la mossa e richiede la patta (non tramite eMail)}
menuText I CCOfferDraw "Offri Patta" 0 {Spedisce la mossa e offre la patta (non tramite eMail)}
menuText I CCAcceptDraw "Accetta Patta" 0 {Accetta l'offerta di patta (non tramite eMail)}
menuText I CCNewMailGame "Nuova Partita con eMail..." 0 {Avvia una nuova partita tramite eMail}
menuText I CCMailMove "Mossa per eMail..." 0 {Spedisce la mossa all'avversariio tramite eMail}
# ====== TODO To be translated ======
menuText I CCGamePage "Game Page..." 0 {Call up the game via the web browser}
# ====== TODO To be translated ======
menuText I CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText I Options "Opzioni" 0
menuText I OptionsBoard "Scacchiera" 0 {Opzioni di visualizzazione della scacchiera}
menuText I OptionsBoardSize "Dimensione della scacchiera" 0 {Cambia la dimensione della scacchiera}
menuText I OptionsBoardPieces "Stile dei pezzi" 6 \
  {Modifica lo stile dei pezzi della scacchiera}
menuText I OptionsBoardColors "Colori..." 0 {Cambia i colori della scacchiera}
menuText I OptionsBoardGraphics "Caselle..." 0 {Seleziona l'aspetto delle caselle}
translate I OptionsBGW {Seleziona l'aspetto delle caselle}
translate I OptionsBoardGraphicsText {Seleziona i files grafici per le caselle bianche e nere:}
menuText I OptionsBoardNames "I nomi dei miei giocatori ..." 0 {Edita i nomi dei miei giocatori}
menuText I OptionsExport "Esportazione" 2 {Cambia le opzioni di importazione testo}
menuText I OptionsFonts "Fonts" 0 {Cambia fonts}
menuText I OptionsFontsRegular "Regolare" 0 {Cambia il font in 'regular'}
menuText I OptionsFontsMenu "Menu" 0 {Cambia il font dei menu}
menuText I OptionsFontsSmall "Piccolo" 0 {Cambia il font 'small'}
# ====== TODO To be translated ======
menuText I OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText I OptionsFontsFixed "Fisso" 0 {Cambia il font di larghezza fissa}
menuText I OptionsGInfo "Informazioni sulla partita" 0 {Opzioni sulle informazioni della partita}
menuText I OptionsLanguage "Lingua" 0 {Sceglie una nuova lingua di menu}
menuText I OptionsMovesTranslatePieces "Traduci i pezzi" 0 {Traduce la prima lettera dei pezzi}
# ====== TODO To be translated ======
menuText I OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText I OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText I OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText I OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText I OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText I OptionsMoves "Mosse" 0 {Opzioni di immissione di mosse}
menuText I OptionsMovesAsk "Conferma prima di sostituire le mosse" 0 \
  {Chiede prima di sovrascrivere ogni mossa esistente}
menuText I OptionsMovesAnimate "Intervallo di tempo per le mosse animate" 1 \
  {Definisce l'intervallo di tempo per le mosse animate}
menuText I OptionsMovesDelay "Intervallo di tempo per il gioco automatico..." 1 \
  {Definisce l'intervallo di tempo per il gioco automatico}
menuText I OptionsMovesCoord "Immissione mossa per coordinate" 0 \
  {Accetta l'input di mossa mediante coordinate ("g1f3")}
menuText I OptionsMovesSuggest "Mostra le mosse suggerite" 0 \
  {Attiva/Disattiva il suggerimento di mosse}
menuText I OptionsShowVarPopup "Mostra Finestra Varianti" 0 {Attiva/Disattiva la visualizzazione della finestra delle varianti}
menuText I OptionsMovesSpace "Aggiungi Spazi dopo Mossa" 0 {Agginuge spazi dopo il numero della mossa}
menuText I OptionsMovesKey "Completamento da tastiera" 0 \
  {Attiva/Disattiva l'autocompletamento di mosse da tastiera}
menuText I OptionsMovesShowVarArrows "Mostra Frecce x Varianti" 0 {Attiva/Disattiva le freccie indicanti le mosse delle varianti}
menuText I OptionsNumbers "Formato del numero" 13 {Seglie il formato del numero}
menuText I OptionsStartup "Apertura all'avvio" 3 {Sceglie le finestre da aprire all'avvio}
# ====== TODO To be translated ======
menuText I OptionsTheme "Theme" 0 {Change look of interface}
menuText I OptionsWindows "Finestre" 2 {Opzioni di finestra}
menuText I OptionsWindowsIconify "Minimizza automaticamente" 5 \
  {Minimizza tutte le finestre quando la finestra principale viene minimizzata}
menuText I OptionsWindowsRaise "Auto-aumenta" 0 \
  {Aumenta alcune finestre (per es. le barre di progresso) ogni volta che sono oscurate}
menuText I OptionsSounds "Sounds..." 2 {Configure move announcement sounds} ;# ***
# ====== TODO To be translated ======
menuText I OptionsWindowsDock "Dock windows" 0 {Dock windows}
# ====== TODO To be translated ======
menuText I OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
# ====== TODO To be translated ======
menuText I OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
# ====== TODO To be translated ======
menuText I OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
# ====== TODO To be translated ======
menuText I OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText I OptionsToolbar "Barra degli strumenti" 12 \
  {Mostra/nasconde la barra degli strumenti nella finestra principale}
menuText I OptionsECO "Carica il file ECO..." 15 {Carica il file di classificazione ECO}
menuText I OptionsSpell "Carica il file di controllo ortografico..." 28 \
  {Carica il file di controllo di Scid}
menuText I OptionsTable "Directory di Tablebase..." 13 \
  {Seglie un file tablebase; tutte le tablebases nella directory saranno utilizzate}
menuText I OptionsRecent "File utilizzati di recente..." 0 \
  {Cambia il numero di file recentemente utilizzati visualizzato nel menu file}
menuText I OptionsBooksDir "Directory del libro delle aperture..." 0 {Configura la directory per il libro delle aperture}
menuText I OptionsTacticsBasesDir "Directory dei Database..." 0 {Configura la directory per i database di allenamento}
menuText I OptionsSave "Salva Opzioni" 0 \
  "Salva tutte le opzioni definibili nel file $::optionsFile"
menuText I OptionsAutoSave "Salva Opzioni all'uscita" 0 \
  {Salva automaticamente tutte le opzioni quando si esce da Scid}

# Help menu:
menuText I Help "Aiuto" 0
menuText I HelpContents "Contents" 0 {Mostra la pagina "contents" dell'aiuto}
menuText I HelpIndex "Indice" 0 {Mostra la pagina dell'indice dell'aiuto}
menuText I HelpGuide "Guida Veloce" 0 {Mostra la pagina di aiuto per la guida veloce}
menuText I HelpHints "Suggerimenti" 0 {Mostra la pagina di aiuto dei suggerimenti}
menuText I HelpContact "Informazioni per contattare" 17 {Mostra la pagina dell'aiuto di informazione di contatto}
menuText I HelpTip "Suggerimento del giorno" 0 {Mostra utili suggerimenti riguardo Scid}
menuText I HelpStartup "Finestra di partenza" 0 {Mostra la finestra di partenza}
menuText I HelpAbout "Su Scid" 1 {Informazioni su Scid}

# partita info box popup menu:
menuText I GInfoHideNext "Nascondi la mossa successiva" 0
menuText I GInfoMaterial "Mostra i valori del materiale" 0
menuText I GInfoFEN "Mostra FEN" 5
menuText I GInfoMarks "Mostra caselle e frecce colorate" 5
menuText I GInfoWrap "A capo automatico" 0
menuText I GInfoFullComment "Mostra commenti completi" 10
menuText I GInfoPhotos "Visualizza foto" 5
menuText I GInfoTBNothing "Tablebases: nulla" 12
menuText I GInfoTBResult "Tablebases: solo risultato" 12
menuText I GInfoTBAll "Tablebases: risultato e mosse migliori" 19
menuText I GInfoDelete "Recupera/Cancella questa partita" 9
menuText I GInfoMark "Smarca/Marca questa partita" 7
menuText I GInfoInformant "Configura i valori informativi" 0

# Main window buttons:
helpMsg I .main.fbutton.button.start {Va all'inizio della partita  (chiave: Home)}
helpMsg I .main.fbutton.button.end {Va alla fine della partita  (chiave: End)}
helpMsg I .main.fbutton.button.back {Indietro di una mossa (chiave: LeftArrow)}
helpMsg I .main.fbutton.button.forward {Avanti di una mossa (chiave: RightArrow)}
helpMsg I .main.fbutton.button.intoVar {Entra in una variante  (chiave abbreviata: v)}
helpMsg I .main.fbutton.button.exitVar {Lascia la variante attuale  (chiave abbreviata: z)}
helpMsg I .main.fbutton.button.flip {Ruota la scacchiera (chiave abbreviata: .)}
helpMsg I .main.fbutton.button.coords {Coordinate on/off  (chiave abbreviata: 0)}
helpMsg I .main.fbutton.button.stm {Visualizza l'icona di chi ha la mossa (si/no)}
helpMsg I .main.fbutton.button.autoplay {Mosse automatiche  (chiave: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg I .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg I .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg I .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate I Back {Indietro}
translate I Browse {Browse}
translate I Cancel {Cancella}
translate I Continue {Continua}
translate I Clear {Annulla}
translate I Close {Chiudi}
translate I Contents {Contents}
translate I Defaults {Defaults}
translate I Delete {Annulla}
translate I Graph {Grafico}
translate I Help {Aiuto}
translate I Import {Importa}
translate I Index {Indice}
translate I LoadGame {Carica partita}
translate I BrowseGame {Visualizza partita}
translate I MergeGame {Fondi partita}
translate I MergeGames {Unisci partite}
translate I Preview {Anteprima}
translate I Revert {Rovescia}
translate I Save {Salva}
translate I Search {Cerca}
translate I Stop {Stop}
translate I Store {Memorizza}
translate I Update {Aggiorna}
translate I ChangeOrient {Modifica l'orientamento della finestra}
translate I ShowIcons {Show Icons} ;# ***
translate I None {Nessuno}
translate I First {Prima}
translate I Current {Attuale}
translate I Last {Ultima}

# General messages:
translate I game {partita}
translate I games {Partite}
translate I move {mossa}
translate I moves {mosse}
translate I all {tutto}
translate I Yes {Si'}
translate I No {No}
translate I Both {Entrambi}
translate I King {Re}
translate I Queen {Donna}
translate I Rook {Torre}
translate I Bishop {Alfiere}
translate I Knight {Cavallo}
translate I Pawn {Pedone}
translate I White {Bianco}
translate I Black {Nero}
translate I Player {Giocatori}
translate I Rating {Punteggio}
translate I RatingDiff {Differenza punteggio (Bianco - Nero)}
translate I AverageRating {Punteggio medio}
translate I Event {Evento}
translate I Site {Sito}
translate I Country {Paese}
translate I IgnoreColors {Ignora i colori}
translate I Date {Data}
translate I EventDate {Evento data}
translate I Decade {Decennio}
translate I Year {Anno}
translate I Month {Mese}
translate I Months {Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre}
translate I Days {Dom Lun Mar Mer Gio Ven Sab}
translate I YearToToday {Anno ad oggi}
translate I Result {Risultato}
translate I Round {Turno}
translate I Length {Lunghezza}
translate I ECOCode {codice ECO}
translate I ECO {ECO}
translate I Deleted {Cancellato}
translate I SearchResults {Risultati della ricerca}
translate I OpeningTheDatabase {Database di aperture}
translate I Database {Database}
translate I Filter {Filtro}
translate I noGames {no partite}
translate I allGames {tutte le partite}
translate I empty {vuoto}
translate I clipbase {clipbase}
translate I score {score}
translate I StartPos {Posizione iniziale}
translate I Total {Totale}
translate I readonly {sola-lettura}

# Standard error messages:
translate I ErrNotOpen {Questo database non � aperto.}
translate I ErrReadOnly {Questo database � a sola lettura; non puo' essere modificato.}
translate I ErrSearchInterrupted {Ricerca interrotta; il risultato e' incompleto.}

# Game information:
translate I twin {doppio}
translate I deleted {cancellato}
translate I comment {commento}
translate I hidden {nascosto}
translate I LastMove {Ultima mossa}
translate I NextMove {Mossa Successiva}
translate I GameStart {Inizio di partita}
translate I LineStart {Inizio di variante}
translate I GameEnd {Fine della partita}
translate I LineEnd {Fine della variante}

# Player information:
translate I PInfoAll {Risultati per <b>tutte</b> le partite}
translate I PInfoFilter {Risultati per le partite nel <b>filtro</b>}
translate I PInfoAgainst {Risultati contro}
translate I PInfoMostWhite {Le piu' frequenti aperture con il Bianco}
translate I PInfoMostBlack {Le piu' frequenti aperture con il Nero}
translate I PInfoRating {Variazioni dell'Elo}
translate I PInfoBio {Biografia}
translate I PInfoEditRatings {Edita i Ratings}

# Tablebase information:
translate I Draw {Patta}
translate I stalemate {stallo}
translate I withAllMoves {con tutte le mosse}
translate I withAllButOneMove {con tutte le mosse tranne una}
translate I with {con}
translate I only {solo}
translate I lose {persa}
translate I loses {perse}
translate I allOthersLose {tutte le altre perse}
translate I matesIn {matto in}
translate I hasCheckmated {e' mattato}
translate I longest {la piu' lunga}
translate I WinningMoves {Mosse vincenti}
translate I DrawingMoves {Mosse pattanti}
translate I LosingMoves {Mosse perdenti}
translate I UnknownMoves {Mosse senza risultato}

# Tip of the day:
translate I Tip {Suggerimento}
translate I TipAtStartup {Suggerimento all'avvio}

# Tree window menus:
menuText I TreeFile "File" 0
menuText I TreeFileFillWithBase "Riempi Cache con Database" 0 {Riempie la cache con tutte le partite nel database attuale}
menuText I TreeFileFillWithGame "Riempi Cache con Partita" 0 {Riempie la cache con la partita corrente del database attuale}
menuText I TreeFileSetCacheSize "Dimensione Cache" 0 {Seleziona la dimensione della cache}
menuText I TreeFileCacheInfo "Informazioni Cache" 0 {Ottiene informazioni sull'uso della cache}
menuText I TreeFileSave "Salva il file di cache" 0 \
  {Salva il file (.stc) della cache dell'albero}
menuText I TreeFileFill "Riempie il file di cache" 0 \
  {Riempie il file di cache con le piu' frequenti posizioni di apertura}
menuText I TreeFileBest "Lista delle migliori partite" 0 {Mostra l'albero delle migliori partite}
menuText I TreeFileGraph "Finestra di grafico" 0 \
  {Mostra il grafico per la corrente variante dell'albero}
menuText I TreeFileCopy "Copia il testo dell'albero nella clipboard" 1 \
  {Copia le statistiche dell'albero nella clipboard}
menuText I TreeFileClose "Chiudi la finestra dell'albero" 0 \
  {Chiudi la finestra dell'albero}
# ====== TODO To be translated ======
menuText I TreeMask "Mask" 0
# ====== TODO To be translated ======
menuText I TreeMaskNew "New" 0 {New mask}
# ====== TODO To be translated ======
menuText I TreeMaskOpen "Open" 0 {Open mask}
# ====== TODO To be translated ======
menuText I TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
# ====== TODO To be translated ======
menuText I TreeMaskSave "Save" 0 {Save mask}
# ====== TODO To be translated ======
menuText I TreeMaskClose "Close" 0 {Close mask}
# ====== TODO To be translated ======
menuText I TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
# ====== TODO To be translated ======
menuText I TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
# ====== TODO To be translated ======
menuText I TreeMaskInfo "Info" 0 {Show statistics for current mask}
# ====== TODO To be translated ======
menuText I TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText I TreeMaskSearch "Search" 0 {Search in current mask}
menuText I TreeSort "Ordina" 0
menuText I TreeSortAlpha "Alfabetico" 0
menuText I TreeSortECO "codice ECO" 0
menuText I TreeSortFreq "Frequenza" 0
menuText I TreeSortScore "Punti" 0
menuText I TreeOpt "Opzioni" 0
menuText I TreeOptSlowmode "Modalità lenta" 0 {Modalità lenta per l'aggiornamento (più precisa)}
menuText I TreeOptFastmode "Modalità veloce" 0 {Modalità veloce per l'aggiornamento (nessuna trasposizione di mosse)}
menuText I TreeOptFastAndSlowmode "Modalità lenta e veloce" 0 {Modalità lenta e veloce per l'aggiornamento}
# ====== TODO To be translated ======
menuText I TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText I TreeOptLock "Blocca" 0 {Blocca/sblocca l'albero al database corrente}
menuText I TreeOptTraining "Training" 0 {Attiva/disattiva la modalita' di esercizio dell'albero}
menuText I TreeOptAutosave "File di cache per Auto-salvare" 0 \
  {Salva automaticamente il file di cache quando si chiude la finestra dell'albero}
menuText I TreeHelp "Aiuto" 0
menuText I TreeHelpTree "Aiuto per l'albero" 0
menuText I TreeHelpIndex "Indice di aiuto" 0
translate I SaveCache {Salva cache}
translate I Training {Esercizio}
translate I LockTree {Blocca}
translate I TreeLocked {Bloccato}
translate I TreeBest {Migliore}
translate I TreeBestGames {Migliori partite}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate I TreeTitleRow \
  {    Mossa  ECO       Frequenza    Punt.  AvElo Perf AvAnno %Patta}
translate I TreeTotal {TOTALE}
# ====== TODO To be translated ======
translate I DoYouWantToSaveFirst {Do you want to save first}
# ====== TODO To be translated ======
translate I AddToMask {Add to Mask}
# ====== TODO To be translated ======
translate I RemoveFromMask {Remove from Mask}
# ====== TODO To be translated ======
translate I AddThisMoveToMask {Add this move to Mask}
# ====== TODO To be translated ======
translate I SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate I DisplayMask {Display Mask}
# ====== TODO To be translated ======
translate I Nag {Nag code}
# ====== TODO To be translated ======
translate I Marker {Marker}
# ====== TODO To be translated ======
translate I Include {Include}
# ====== TODO To be translated ======
translate I Exclude {Exclude}
# ====== TODO To be translated ======
translate I MainLine {Main line}
# ====== TODO To be translated ======
translate I Bookmark {Bookmark}
# ====== TODO To be translated ======
translate I NewLine {New line}
# ====== TODO To be translated ======
translate I ToBeVerified {To be verified}
# ====== TODO To be translated ======
translate I ToTrain {To train}
# ====== TODO To be translated ======
translate I Dubious {Dubious}
# ====== TODO To be translated ======
translate I ToRemove {To remove}
# ====== TODO To be translated ======
translate I NoMarker {No marker}
# ====== TODO To be translated ======
translate I ColorMarker {Color}
# ====== TODO To be translated ======
translate I WhiteMark {White}
# ====== TODO To be translated ======
translate I GreenMark {Green}
# ====== TODO To be translated ======
translate I YellowMark {Yellow}
# ====== TODO To be translated ======
translate I BlueMark {Blue}
# ====== TODO To be translated ======
translate I RedMark {Red}
# ====== TODO To be translated ======
translate I CommentMove {Comment move}
# ====== TODO To be translated ======
translate I CommentPosition {Comment position}
# ====== TODO To be translated ======
translate I AddMoveToMaskFirst {Add move to mask first}
# ====== TODO To be translated ======
translate I OpenAMaskFileFirst {Open a mask file first}
# ====== TODO To be translated ======
translate I Positions {Positions}
# ====== TODO To be translated ======
translate I Moves {Moves}

# Finder window:
menuText I FinderFile "File" 0
menuText I FinderFileSubdirs "Cerca nelle sottodirectory" 0
menuText I FinderFileClose "Chiudi File Finder" 0
menuText I FinderSort "Ordina" 0
menuText I FinderSortType "Tipo" 0
menuText I FinderSortSize "Dimensione" 0
menuText I FinderSortMod "Modifica" 0
menuText I FinderSortName "Nome" 0
menuText I FinderSortPath "Percorso" 0
menuText I FinderTypes "Tipi" 0
menuText I FinderTypesScid "Database Scid" 0
menuText I FinderTypesOld "Vecchio formato database Scid" 0
menuText I FinderTypesPGN "File PGN" 0
menuText I FinderTypesEPD "EPD (book) files" 0
menuText I FinderTypesRep "File di Repertorio" 0
menuText I FinderHelp "Aiuto" 0
menuText I FinderHelpFinder "Aiuto su File Finder" 0
menuText I FinderHelpIndex "Indice di aiuto" 0
translate I FileFinder {Trova File}
translate I FinderDir {Trova Directory}
translate I FinderDirs {Trova Directories}
translate I FinderFiles {Trova Files}
translate I FinderUpDir {Su}
# ====== TODO To be translated ======
translate I FinderCtxOpen {Open}
# ====== TODO To be translated ======
translate I FinderCtxBackup {Backup}
# ====== TODO To be translated ======
translate I FinderCtxCopy {Copy}
# ====== TODO To be translated ======
translate I FinderCtxMove {Move}
# ====== TODO To be translated ======
translate I FinderCtxDelete {Delete}

# Player finder:
menuText I PListFile "File" 0
menuText I PListFileUpdate "Aggiorna" 0
menuText I PListFileClose "Chiudi Player Finder" 0
menuText I PListSort "Ordina" 0
menuText I PListSortName "Nome" 0
menuText I PListSortElo "Elo" 0
menuText I PListSortGames "Partite" 0
menuText I PListSortOldest "Pi� vecchie" 0
menuText I PListSortNewest "Pi� recenti" 0

# Tournament finder:
menuText I TmtFile "File" 0
menuText I TmtFileUpdate "Aggiorna" 0
menuText I TmtFileClose "Chiudi Tournament Finder" 0
menuText I TmtSort "Ordina" 0
menuText I TmtSortDate "Data" 0
menuText I TmtSortPlayers "Giocatori" 0
menuText I TmtSortGames "Partite" 0
menuText I TmtSortElo "Elo" 0
menuText I TmtSortSite "Siti" 0
menuText I TmtSortEvent "Eventi" 1
menuText I TmtSortWinner "Vincitore" 0
translate I TmtLimit "Limite della lista"
translate I TmtMeanElo "Media Elo piu' bassa"
translate I TmtNone "Non e' stato trovato nessun torneo."

# Graph windows:
menuText I GraphFile "File" 0
menuText I GraphFileColor "Salva come Color Postscript..." 8
menuText I GraphFileGrey "Salva come Greyscale Postscript..." 8
menuText I GraphFileClose "Chiudi la finestra" 6
menuText I GraphOptions "Opzioni" 0
menuText I GraphOptionsWhite "Bianco" 0
menuText I GraphOptionsBlack "Nero" 0
menuText I GraphOptionsBoth "Entrambi" 1
menuText I GraphOptionsPInfo "Info sul giocatore" 0
translate I GraphFilterTitle "Filter Graph: frequenza ogni 1000 partite"
translate I GraphAbsFilterTitle "Filter Graph: frequenza delle partite"
translate I ConfigureFilter {Configura l'asse delle X per Anno, Rating e Mosse}
translate I FilterEstimate "Stima"
translate I TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate I AddVariation {Aggiungi variante}
translate I AddAllVariations {Aggiungi tutte le varianti}
translate I AddMove {Aggiunge una mossa}
translate I Annotate {Annota}
translate I ShowAnalysisBoard {Mostra la finestra dell'analisi}
translate I ShowInfo {Mostra le informazioni del motore}
translate I FinishGame {Termina la partita}
translate I StopEngine {Ferma il motore}
translate I StartEngine {Avvia il motore}
# ====== TODO To be translated ======
translate I LockEngine {Lock engine to current position}
translate I AnalysisCommand {Comando di analisi}
translate I PreviousChoices {Scelta precedente}
translate I AnnotateTime {Imposta il tempo tra le mosse in secondi}
translate I AnnotateWhich {Aggiungi varianti}
translate I AnnotateAll {Per mosse di entrambi i colori}
translate I AnnotateAllMoves {Tutte le mosse}
translate I AnnotateWhite {Per solo le mosse del Bianco}
translate I AnnotateBlack {Per solo le mosse del Nero}
translate I AnnotateBlundersOnly {Quando la mossa è chiaramente un errore}
translate I AnnotateBlundersOnlyScoreChange {L'analisi riporta come errori, con variazione del punteggio da/a:}
translate I BlundersThreshold {Limite}
# TODO: Translate
translate I ScoreAllMoves {Score all moves}
translate I LowPriority {Imposta la priorità della CPU a bassa}
translate I ClickHereToSeeMoves {Clicca qui per vedere le mosse}
translate I ConfigureInformant {Configura i valori informativi}
translate I Informant!? {Mossa interessante}
translate I Informant? {Mossa debole}
translate I Informant?? {Errore grave}
translate I Informant?! {Mossa dubbia}
translate I Informant+= {Il bianco ha un leggero vantaggio}
translate I Informant+/- {Il bianco ha un moderato vantaggio}
translate I Informant+- {Il bianco ha un vantaggio decisivo}
translate I Informant++- {La partita è considerata vinta}
translate I Book {Libro}
# ====== TODO To be translated ======
translate I OtherBookMoves {Opponent's book}
# ====== TODO To be translated ======
translate I OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate I EngineList {Lista dei motori di analisi}
translate I EngineName {Nome}
translate I EngineCmd {Comando}
translate I EngineArgs {Parametri}
translate I EngineDir {Directory}
translate I EngineElo {Elo}
translate I EngineTime {Data}
translate I EngineNew {Nuovo}
translate I EngineEdit {Modifica}
translate I EngineRequired {I campi in grassetto sono obbligatori; gli altri sono opzionali}

# Stats window menus:
menuText I StatsFile "File" 0
menuText I StatsFilePrint "Stampa in file..." 0
menuText I StatsFileClose "Chiudi la finestra" 0
menuText I StatsOpt "Opzioni" 0

# PGN window menus:
menuText I PgnFile "File" 0
menuText I PgnFileCopy "Copia la partita verso la Clipboard" 0
menuText I PgnFilePrint "Stampa in file..." 0
menuText I PgnFileClose "Chiudi la finestra PGN" 0
menuText I PgnOpt "Visualizza" 0
menuText I PgnOptColor "Visualizza il Colore" 0
menuText I PgnOptShort "Intestazione compatta (3-righe)" 0
menuText I PgnOptSymbols "Annotazioni simboliche" 0
menuText I PgnOptIndentC "Indenta i commenti" 0
menuText I PgnOptIndentV "Indenta le varianti" 1
menuText I PgnOptColumn "Stile della colonna (una mossa per riga)" 0
menuText I PgnOptSpace "Spazio dopo i numeri delle mosse" 0
menuText I PgnOptStripMarks "Elimina i codici colorati delle caselle/frecce" 0
menuText I PgnOptBoldMainLine "Usa il grassetto per le mosse della linea principale" 4
menuText I PgnColor "Colori" 0
menuText I PgnColorHeader "Intestazione..." 0
menuText I PgnColorAnno "Annotazioni..." 0
menuText I PgnColorComments "Commenti..." 0
menuText I PgnColorVars "Varianti..." 0
menuText I PgnColorBackground "Sfondo..." 0
menuText I PgnColorMain "Linea principale..." 0
menuText I PgnColorCurrent "Sfondo per la mossa attuale..." 1
menuText I PgnHelp "Aiuto" 0
menuText I PgnHelpPgn "Aiuto PGN" 0
menuText I PgnHelpIndex "Indice" 0
translate I PgnWindowTitle {Notazione - partita %u}

# Crosstable window menus:
menuText I CrosstabFile "File" 0
menuText I CrosstabFileText "Stampa in un file di Testo..." 21
menuText I CrosstabFileHtml "Stampa in un file HTML..." 18
menuText I CrosstabFileLaTeX "Stampa in un file LaTeX..." 18
menuText I CrosstabFileClose "Chiudi la finestra della tabella" 0
menuText I CrosstabEdit "Edita" 0
menuText I CrosstabEditEvent "Evento" 0
menuText I CrosstabEditSite "Sito" 0
menuText I CrosstabEditDate "Data" 0
menuText I CrosstabOpt "Visualizza" 0
menuText I CrosstabOptAll "Girone all'italiana" 0
menuText I CrosstabOptSwiss "Girone Svizzero" 0
menuText I CrosstabOptKnockout "Knockout" 0
menuText I CrosstabOptAuto "Auto" 0
menuText I CrosstabOptAges "Eta' in anni" 8
menuText I CrosstabOptNats "Nazionalita'" 0
menuText I CrosstabOptRatings "Punteggi" 0
menuText I CrosstabOptTitles "Titoli" 0
menuText I CrosstabOptBreaks "Punteggi al Tie-break" 4
menuText I CrosstabOptDeleted "Inserisce le partite cancellate" 8
menuText I CrosstabOptColors "Colori (solo girone Svizzero)" 0
menuText I CrosstabOptColumnNumbers "A colonne (Solo la tabella dei tornei all'italiana)" 3
menuText I CrosstabOptGroup "Punti del gruppo" 0
menuText I CrosstabSort "Ordina" 0
menuText I CrosstabSortName "Nome" 0
menuText I CrosstabSortRating "Punteggio" 0
menuText I CrosstabSortScore "Punti" 0
menuText I CrosstabColor "Colore" 0
menuText I CrosstabColorPlain "Testo normale" 0
menuText I CrosstabColorHyper "Ipertesto" 0
menuText I CrosstabHelp "Aiuto" 0
menuText I CrosstabHelpCross "Aiuto tabella" 0
menuText I CrosstabHelpIndex "Indice di aiuto" 0
translate I SetFilter {Imposta filtro}
translate I AddToFilter {Aggiungi al filtro}
translate I Swiss {Svizzero}
translate I Category {Categoria}

# Opening report window menus:
menuText I OprepFile "File" 0
menuText I OprepFileText "Stampa in un file di testo..." 21
menuText I OprepFileHtml "Stampa in un file HTML..." 18
menuText I OprepFileLaTeX "Stampa in un file LaTeX..." 18
menuText I OprepFileOptions "Opzioni..." 0
menuText I OprepFileClose "Chiude la finestra del rapporto" 0
menuText I OprepFavorites "Preferiti" 1
menuText I OprepFavoritesAdd "Aggiungi Report..." 0
menuText I OprepFavoritesEdit "Edita i Report preferiti..." 0
menuText I OprepFavoritesGenerate "Genera Reports..." 0

menuText I OprepHelp "Aiuto" 0
menuText I OprepHelpReport "Aiuto sul rapporto di apertura" 0
menuText I OprepHelpIndex "Indice di Aiuto" 0

# Repertoire editor:
menuText I RepFile "File" 0
menuText I RepFileNew "Nuovo" 0
menuText I RepFileOpen "Apri..." 0
menuText I RepFileSave "Salva..." 0
menuText I RepFileSaveAs "Salva con nome..." 3
menuText I RepFileClose "Close window" 0
menuText I RepEdit "Edita" 0
menuText I RepEditGroup "Aggiunge il gruppo" 12
menuText I RepEditInclude "Aggiunge la variante inclusa" 21
menuText I RepEditExclude "Aggiunge la variante esclusa" 21
menuText I RepView "Visualizza" 0
menuText I RepViewExpand "Espande tutti i gruppi" 0
menuText I RepViewCollapse "Collassa tutti i gruppi" 0
menuText I RepSearch "Cerca" 0
menuText I RepSearchAll "Tutto del repertorio..." 0
menuText I RepSearchDisplayed "Visualizza solo varianti..." 0
menuText I RepHelp "Aiuto" 0
menuText I RepHelpRep "Aiuto del repertorio" 0
menuText I RepHelpIndex "Indice di Aiuto" 0
translate I RepSearch "Ricerca nel repertorio"
translate I RepIncludedLines "varianti incluse"
translate I RepExcludedLines "varianti escluse"
translate I RepCloseDialog {Questo repertorio non e' stato salvato.

Vuoi veramente continuare ed eliminare le modifiche effettuate?
}

# Header search:
translate I HeaderSearch {Ricerca per Intestazione}
translate I EndSideToMove {Side to move at end of game} ;# ***
translate I GamesWithNoECO {Partite senza ECO?}
translate I GameLength {Lunghezza della partita}
translate I FindGamesWith {Cerca partite con}
translate I StdStart {Inizio standard}
translate I Promotions {Promozioni}
translate I Comments {Commenti}
translate I Variations {Varianti}
translate I Annotations {Annotazioni}
translate I DeleteFlag {Cancellato}
translate I WhiteOpFlag {Apertura del Bianco}
translate I BlackOpFlag {Apertura del Nero}
translate I MiddlegameFlag {Mediogioco}
translate I EndgameFlag {Finale}
translate I NoveltyFlag {Novita'}
translate I PawnFlag {Struttura pedonale}
translate I TacticsFlag {Tatticismi}
translate I QsideFlag {Gioco su lato di Donna}
translate I KsideFlag {Gioco su lato di Re}
translate I BrilliancyFlag {Brillantezza}
translate I BlunderFlag {Svista}
translate I UserFlag {User}
translate I PgnContains {PGN contiene testo}
# ====== TODO To be translated ======
translate I Annotator {Annotator}
# ====== TODO To be translated ======
translate I Cmnts {Annotated games only}

# Game list window:
translate I GlistNumber {Numero}
translate I GlistWhite {Bianco}
translate I GlistBlack {Nero}
translate I GlistWElo {B-Elo}
translate I GlistBElo {N-Elo}
translate I GlistEvent {Evento}
translate I GlistSite {Sito}
translate I GlistRound {Turno}
translate I GlistDate {Data}
translate I GlistYear {Anno}
translate I GlistEDate {Evento-Data}
translate I GlistResult {Risultato}
translate I GlistLength {Lunghezza}
translate I GlistCountry {Paese}
translate I GlistECO {ECO}
translate I GlistOpening {Apertura}
translate I GlistEndMaterial {Materiale a fine partita}
translate I GlistDeleted {Cancellato}
translate I GlistFlags {Identificatore}
translate I GlistVars {Varianti}
translate I GlistComments {Commenti}
translate I GlistAnnos {Annotazioni}
translate I GlistStart {Inizio}
translate I GlistGameNumber {numero di Partita}
# ====== TODO To be translated ======
translate I GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate I GlistRating {Rating}
translate I GlistFindText {Cerca testo}
translate I GlistMoveField {Mossa}
translate I GlistEditField {Configura}
translate I GlistAddField {Aggiungi}
translate I GlistDeleteField {Elimina}
translate I GlistWidth {Larghezza}
translate I GlistAlign {Allinea}
# ====== TODO To be translated ======
translate I GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate I GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate I GlistAlignC {Align: center}
translate I GlistColor {Colore}
translate I GlistSep {Separatore}
# ====== TODO To be translated ======
translate I GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate I GlistNewSort {New}
# ====== TODO To be translated ======
translate I GlistAddToSort {Add}
# ====== TODO To be translated ======
translate I GsortSort {Sort...}
# ====== TODO To be translated ======
translate I GsortDate {Date}
# ====== TODO To be translated ======
translate I GsortYear {Year}
# ====== TODO To be translated ======
translate I GsortEvent {Event}
# ====== TODO To be translated ======
translate I GsortSite {Site}
# ====== TODO To be translated ======
translate I GsortRound {Round}
# ====== TODO To be translated ======
translate I GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate I GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate I GsortECO {ECO}
# ====== TODO To be translated ======
translate I GsortResult {Result}
# ====== TODO To be translated ======
translate I GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate I GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate I GsortCountry {Country}
# ====== TODO To be translated ======
translate I GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate I GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate I GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate I GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate I GsortComments {Comments}
# ====== TODO To be translated ======
translate I GsortVariations {Variations}
# ====== TODO To be translated ======
translate I GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate I GsortAscending {Ascending}
# ====== TODO To be translated ======
translate I GsortDescending {Descending}
# ====== TODO To be translated ======
translate I GsortAdd {Add}
# ====== TODO To be translated ======
translate I GsortStore {Store}
# ====== TODO To be translated ======
translate I GsortLoad {Load}
translate I GlistRemoveThisGameFromFilter  {Rimuovi questa partita dal filtro}
translate I GlistRemoveGameAndAboveFromFilter  {Rimuovi la partita (e le precedenti) dal filtro}
translate I GlistRemoveGameAndBelowFromFilter  {Rimuovi la partita (e le seguenti) dal filtro}
translate I GlistDeleteGame {Elimina/Recupera questa partita}
translate I GlistDeleteAllGames {Elimina tutte le partite nel filtro}
translate I GlistUndeleteAllGames {Recupera tutte le partite nel filtro}
# ====== TODO To be translated ======
translate I GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate I DatabaseName {Nome del Database:}
translate I TypeIcon {Icona tipo:}
translate I NumOfGames {Partite:}
translate I NumDeletedGames {partite cancellate:}
translate I NumFilterGames {Partite nel filtro:}
translate I YearRange {Intervallo di anni:}
translate I RatingRange {Intervallo di Punteggio:}
translate I Description {Descrizione}
translate I Flag {Identificatore}
# ====== TODO To be translated ======
translate I CustomFlags {Custom flags}
translate I DeleteCurrent {Cancella la partita attuale}
translate I DeleteFilter {Cancella le partite del filtro}
translate I DeleteAll {Cancella tutte le partite}
translate I UndeleteCurrent {Recupera la partita attuale}
translate I UndeleteFilter {Recupera il filtro di partite}
translate I UndeleteAll {Recupera tutte le partite}
translate I DeleteTwins {Cancella le partite doppie}
translate I MarkCurrent {Marca la partita attuale}
translate I MarkFilter {Marca partite del filtro}
translate I MarkAll {Marca tutte le partite}
translate I UnmarkCurrent {Smarca la partita attuale}
translate I UnmarkFilter {Smarca le partite del filtro}
translate I UnmarkAll {Smarca tutte le partite}
translate I Spellchecking {Controllo nome}
translate I Players {Giocatori}
translate I Events {Eventi}
translate I Sites {Siti}
translate I Rounds {Turni}
translate I DatabaseOps {Operazioni sul Database}
translate I ReclassifyGames {Partite classificate ECO}
translate I CompactDatabase {Compatta database}
translate I SortDatabase {Ordina database}
translate I AddEloRatings {Aggiungi punteggio Elo}
translate I AutoloadGame {Numero della partita che si caricher� automaticamente}
translate I StripTags {Toglie i PGN tags}
translate I StripTag {Toglie i tag}
translate I Cleaner {Manutentore Globale}
translate I CleanerHelp {La finestra Manutentore Globale effettura' tutte le operazioni che verranno selezionate dalla lista sottostante, sul database corrente.

Le impostazioni correnti nelle finestre della classificazione ECO e della cancellazione delle partite doppie verranno applicate se selezionate.}
translate I CleanerConfirm {Una volta attivata l'operazione di pulizia questa non puo' piu' essere interrotta!

Questo puo' richiedere diverso tempo su un grosso database, a seconda delle funzioni selezionate e delle impostazioni correnti.

Sei sicuro di voler procedere con le funzioni selezionate?}

translate I TwinCheckUndelete {per invertire; "u" recupera entrambe}
translate I TwinCheckprevPair {Coppia precedente}
translate I TwinChecknextPair {Coppia seguente}
translate I TwinChecker {Scid: Controllo partite doppie}
translate I TwinCheckTournament {Partite nel torneo:}
translate I TwinCheckNoTwin {Nessuna partita doppia}
translate I TwinCheckNoTwinfound {Nessun doppio è stato trovato per questa partita.\nPer mostrare i doppi con questa finestra, devi prima usare la funzione "Cancella le partite doppie".}
translate I TwinCheckTag {Condividi i tags...}
translate I TwinCheckFound1 {Scid ha trovato $result partite doppie}
translate I TwinCheckFound2 { e ha impostato il loro stato a cancellato}
translate I TwinCheckNoDelete {Non ci sono partite da cancellare nel database.}
translate I TwinCriteria1 {Le impostazioni per trovare le partite doppie possono portare a determinare come doppie partite diverse con mosse simili.}
translate I TwinCriteria2 {Si consiglia di selezionare "No" per "Stesse Mosse", e "Sì" per colori, evento, luogo, turno, anno e mese.\nVuoi procedere e cancellare le partite doppie comunque?}
translate I TwinCriteria3 {Si consiglia di selezionare "Sì" per almeno due tra "stesso luogo", "stesso turno" and "stesso anno".\nVuoi procedere e cancellare le partite doppie comunque?}
translate I TwinCriteriaConfirm {Scid: Conferma le impostazioni per el partite doppie}
translate I TwinChangeTag "Cambia i seguenti tags della partita:\n\n"
translate I AllocRatingDescription "Questo comando usa l'attuale controllore ortografico per aggiungere i punteggi Elo alle partite in questo database. Se un giocatore non ha un punteggio ma il suo punteggio al momento della partita è presente nel controllore ortografico, quel punteggio sarà aggiunto."
translate I RatingOverride "Sovrascrivi i punteggi diversi da zero?"
translate I AddRatings "Aggiungi i punteggi a:"
translate I AddedRatings {Scid ha aggiunto $r punteggi Elo in $g partite.}
translate I NewSubmenu "Nuovo sottomenu"

# Comment editor:
translate I AnnotationSymbols  {Simboli di annotazione:}
translate I Comment {Commento:}
translate I InsertMark {Inserisci marcatore}
translate I InsertMarkHelp {
Inserisci/togli marcatore: Seleziona colore, tipo, casella.
Inserisci/togli freccia: Doppio-click due caselle.
}

# Nag buttons in comment editor:
translate I GoodMove {Mossa buona}
translate I PoorMove {Mossa debole}
translate I ExcellentMove {Mossa ottima}
translate I Blunder {Svista}
translate I InterestingMove {Mossa interessante}
translate I DubiousMove {Mossa dubbia}
translate I WhiteDecisiveAdvantage {Il Bianco � in vantaggio decisivo}
translate I BlackDecisiveAdvantage {Il Nero � in vantaggio decisivo}
translate I WhiteClearAdvantage {Il Bianco sta meglio}
translate I BlackClearAdvantage {Il Nero sta meglio}
translate I WhiteSlightAdvantage {Il Bianco sta leggermente meglio}
translate I BlackSlightAdvantage {Il Nero sta leggermente meglio}
translate I Equality {Parit�}
translate I Unclear {Incerta}
translate I Diagram {Diagramma}

# Board search:
translate I BoardSearch {Ricerca Posizione}
translate I FilterOperation {Operazione sul filtro corrente:}
translate I FilterAnd {AND (Restrizione del filtro)}
translate I FilterOr {OR (Aggiunta al filtro)}
translate I FilterIgnore {IGNORA (Annulla il filtro)}
translate I SearchType {Tipo di ricerca:}
translate I SearchBoardExact {Posizione Esatta (tutti i pezzi sulla stessa casa)}
translate I SearchBoardPawns {Pedoni (stesso materiale, tutti i pedoni sulla stessa casa)}
translate I SearchBoardFiles {File (stesso materiale, tutti i pedoni sulle stesse file)}
translate I SearchBoardAny {Dovunque (stesso materiale, pedoni e pezzi dovunque)}
# ====== TODO To be translated ======
translate I SearchInRefDatabase { Search in base }
translate I LookInVars {Osserva nelle varianti}

# Material search:
translate I MaterialSearch {Ricerca Materiale}
translate I Material {Materiale}
translate I Patterns {Schema}
translate I Zero {Nessuno}
translate I Any {Tutti}
translate I CurrentBoard {Posizione corrente}
translate I CommonEndings {Finali Comuni}
translate I CommonPatterns {Schemi Comuni}
translate I MaterialDiff {Differenze di materiale}
translate I squares {sulle case di}
translate I SameColor {Stesso colore}
translate I OppColor {Colore opposto}
translate I Either {Entrambi}
translate I MoveNumberRange {Intervallo del numero di mosse}
translate I MatchForAtLeast {Confronta per almeno}
translate I HalfMoves {semi-mosse}

# Common endings in material search:
translate I EndingPawns {Pawn endings} ;# ***
translate I EndingRookVsPawns {Rook vs. Pawn(s)} ;# ***
translate I EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook} ;# ***
translate I EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook} ;# ***
translate I EndingRooks {Rook vs. Rook endings} ;# ***
translate I EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn} ;# ***
translate I EndingRooksDouble {Double Rook endings} ;# ***
translate I EndingBishops {Bishop vs. Bishop endings} ;# ***
translate I EndingBishopVsKnight {Bishop vs. Knight endings} ;# ***
translate I EndingKnights {Knight vs. Knight endings} ;# ***
translate I EndingQueens {Queen vs. Queen endings} ;# ***
translate I EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen} ;# ***
translate I BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame} ;# ***

# Common patterns in material search:
translate I PatternWhiteIQP {White IQP} ;# ***
translate I PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6} ;# ***
translate I PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6} ;# ***
translate I PatternBlackIQP {Black IQP} ;# ***
translate I PatternWhiteBlackIQP {White IQP vs. Black IQP} ;# ***
translate I PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple} ;# ***
translate I PatternHangingC5D5 {Black Hanging Pawns on c5 and d5} ;# ***
translate I PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)} ;# ***
translate I PatternRookSacC3 {Rook Sacrifice on c3} ;# ***
translate I PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;# ***
translate I PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;# ***
translate I PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)} ;# ***
translate I PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)} ;# ***
translate I PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)} ;# ***

# game saving:
translate I Today {Oggi}
translate I ClassifyGame {Classifica la partita}

# Setup position:
translate I EmptyBoard {Scacchiera vuota}
translate I InitialBoard {Posizione iniziale}
translate I SideToMove {Parte che muove}
translate I MoveNumber {Numero della mossa}
translate I Castling {Arrocco}
translate I EnPassantFile {Fila En Passant}
translate I ClearFen {Annulla FEN}
translate I PasteFen {Incolla FEN}
translate I SaveAndContinue {Salava e continua}
translate I DiscardChangesAndContinue {Scarta le modifiche\ne continua}
translate I GoBack {Indietro}

# Replace move dialog:
translate I ReplaceMove {Sostituisci la mossa}
translate I AddNewVar {Aggiunge una nuova variante}
translate I NewMainLine {Nuova linea principale}
translate I ReplaceMoveMessage {Esiste gia' una mossa qui.

Puoi sostituirla, rinunciando a tutte le mosse dopo di essa, o aggiungere la tua mossa come nuova variante.

(Puoi impedire di vedere questo messaggio in futuro ponendo ad off l'opzione "Domanda prima di sostiture le mosse" nel menu Opzioni:Mosse.)}

# Make database read-only dialog:
translate I ReadOnlyDialog {Se rendi questo database di sola lettura, nessuna variazione sara'permessa.
Nessuna partita puo' essere salvata o sostituita, e nessuna 'cancella identificatore' puo' essere alterato.
Ogni ordinamento o classificazione ECO resultera' essere temporaneo.

Puoi facilmente rendere ancora scrivibile il database, chiudendolo e riaprendolo.

Desideri veramente rendere questo database di sola lettura?}

# Clear game dialog:
translate I ClearGameDialog {Questa partita e' stata modificata.

Sei sicuro di voler continuare ed eliminare le modifiche effettuate?}

# Exit dialog:
translate I ExitDialog {Vuoi veramente uscire da Scid?}
translate I ExitUnsaved {Il database ha partite modificate e non salvate. Se esci adesso queste modifiche saranno perse.}

# Import window:
translate I PasteCurrentGame {Incolla la partita attuale}
translate I ImportHelp1 {Immetti o incolla una partita in formato PGN nella struttura precedente.}
translate I ImportHelp2 {Ogni errore di importazione di partita sara' visualizzato qui.}
translate I OverwriteExistingMoves {Sovrascrivi le mosse presenti?}

# ECO Browser:
translate I ECOAllSections {tutte le sezioni ECO}
translate I ECOSection {sezione ECO}
translate I ECOSummary {Sommario per}
translate I ECOFrequency {Frequenze nell'ambito del}

# Opening Report:
translate I OprepTitle {Rapporto di apertura}
translate I OprepReport {Rapporto}
translate I OprepGenerated {Generato da}
translate I OprepStatsHist {Statistica e Storia}
translate I OprepStats {Statistica}
translate I OprepStatAll {tutte le partite della statistica}
translate I OprepStatBoth {Entrambe classificate}
translate I OprepStatSince {Da}
translate I OprepOldest {Le partite piu' vecchie}
translate I OprepNewest {Le partite piu' recenti}
translate I OprepPopular {Attuale popularita'}
translate I OprepFreqAll {Frequenza in tutti gli anni: }
translate I OprepFreq1   {Da  1 anno ad oggi:          }
translate I OprepFreq5   {Da  5 anni ad oggi:          }
translate I OprepFreq10  {Da 10 anni ad oggi:          }
translate I OprepEvery {una volta ogni %u partite}
translate I OprepUp {su %u%s da tutti gli anni}
translate I OprepDown {giu' %u%s da tutti gli anni}
translate I OprepSame {nessuna variazione da tutti gli anni}
translate I OprepMostFrequent {Giocatori piu' frequenti}
translate I OprepMostFrequentOpponents {Avversari pi� frequenti}
translate I OprepRatingsPerf {Punteggi e Performance}
translate I OprepAvgPerf {Punteggi medi e performance}
translate I OprepWRating {Punteggio del Bianco}
translate I OprepBRating {Punteggio del Nero}
translate I OprepWPerf {Performance del Bianco}
translate I OprepBPerf {Performance del Nero}
translate I OprepHighRating {Partite con il piu' alto punteggio medio}
translate I OprepTrends {Tendenze dei risultati}
translate I OprepResults {Risultato lunghezza e frequenza}
translate I OprepLength {Lunghezza della partita}
translate I OprepFrequency {Frequenza}
translate I OprepWWins {Vittorie del Bianco: }
translate I OprepBWins {Vittorie del Nero: }
translate I OprepDraws {Patte:      }
translate I OprepWholeDB {intero database}
translate I OprepShortest {Vittorie piu' brevi}
translate I OprepMovesThemes {Mosse e Temi}
translate I OprepMoveOrders {Ordini di mosse che raggiungono la posizione considerata}
translate I OprepMoveOrdersOne \
  {C'era solo un ordine di mosse che raggiungeva questa posizione:}
translate I OprepMoveOrdersAll \
  {C'erano %u ordini di mosse che raggiungevano questa posizione:}
translate I OprepMoveOrdersMany \
  {C'erano %u ordini di mossa che raggiungevano questa posizione. Le prime %u sono:}
translate I OprepMovesFrom {Mosse dalla posizione del rapporto}
translate I OprepMostFrequentEcoCodes {Codici ECO pi� frequenti}
translate I OprepThemes {Temi Posizionali}
translate I OprepThemeDescription {Frequenza dei Temi nelle prime %u mosse di ogni partita}
translate I OprepThemeSameCastling {Arrocco dallo stesso lato}
translate I OprepThemeOppCastling {Arrocchi eterogenei}
translate I OprepThemeNoCastling {Entrambi i re non arroccati}
translate I OprepThemeKPawnStorm {Attacco di pedoni sull'ala di re}
translate I OprepThemeQueenswap {Scambio di donne}
translate I OprepThemeWIQP {Pedone di donna Bianco isolato}
translate I OprepThemeBIQP {Pedone di donna Nero isolato}
translate I OprepThemeWP567 {Pedone Bianco sulla 5/6/7ma traversa}
translate I OprepThemeBP234 {Pedone Nero sulla 2/3/4ta traversa}
translate I OprepThemeOpenCDE {Colonne c/d/e aperte}
translate I OprepTheme1BishopPair {Una parte ha la coppia degli alfieri}
translate I OprepEndgames {Finali}
translate I OprepReportGames {Partite del rapporto}
translate I OprepAllGames {tutte le partite}
translate I OprepEndClass {Materiale alla fine di ogni partita}
translate I OprepTheoryTable {Tabella della Teoria}
translate I OprepTableComment {Generato da %u partite piu' quotate.}
translate I OprepExtraMoves {Mosse Extra note nella tabella della teoria}
translate I OprepMaxGames {Numero massimo di partite nella tabella della teoria}
translate I OprepViewHTML {Vedi HTML}
translate I OprepViewLaTeX {Vedi LaTeX}

# Player Report:
translate I PReportTitle {Report sul giocatore}
translate I PReportColorWhite {con i pezzi Bianchi}
translate I PReportColorBlack {con i pezzi Neri}
translate I PReportMoves {dopo %s}
translate I PReportOpenings {Aperture}
translate I PReportClipbase {Svuota la Clipbase e copia le partite risultanti in essa}

# Piece Tracker window:
translate I TrackerSelectSingle {Il tasto sinistro del mouse seleziona questo pezzo.}
translate I TrackerSelectPair {Il tasto sinistro del mouse seleziona questo pezzo; il tasto destro seleziona il suo sibling.}
translate I TrackerSelectPawn {Il tasto sinistro del mouse seleziona questo pedone; il tasto destro seleziona tutti gli 8 pedoni.}
translate I TrackerStat {Statistiche}
translate I TrackerGames {% di partite con mosse in questa casella}
translate I TrackerTime {% di tempo su ogni casella}
translate I TrackerMoves {Mosse}
translate I TrackerMovesStart {Inserisci il numero di mossa da dove iniziare il tracciamento.}
translate I TrackerMovesStop {Inserisci il numero di mossa dove finire il tracciamento.}

# Game selection dialogs:
translate I SelectAllGames {Tutte le partite nel database}
translate I SelectFilterGames {Solo le partite nel filtro}
translate I SelectTournamentGames {Solo le partite del torneo attuale}
translate I SelectOlderGames {Solo le partite piu' vecchie}

# Delete Twins window:
translate I TwinsNote {Per essere doppie, due partite devono almeno avere gli stessi due giocatori, e criteri che puoi definire sotto. Quando viene trovata una coppia di doppie, la partita piu' breve e' cancellata. Suggerimento: E' meglio controllare per caratteri il database prima di cancellare le doppie, per migliorare la ricerca delle doppie.}
translate I TwinsCriteria {Criteri: Partite doppie devono avere...}
translate I TwinsWhich {Esamina quali partite}
translate I TwinsColors {Stessi colori?}
translate I TwinsEvent {Stesso evento?}
translate I TwinsSite {Stesso sito?}
translate I TwinsRound {Stesso turno?}
translate I TwinsYear {Stesso anno?}
translate I TwinsMonth {Stesso mese?}
translate I TwinsDay {Stesso giorno?}
translate I TwinsResult {Stesso result?}
translate I TwinsECO {Stesso codice ECO?}
translate I TwinsMoves {Stesse mosse?}
translate I TwinsPlayers {Confronta i nomi dei giocatori:}
translate I TwinsPlayersExact {Stretta uguaglianza}
translate I TwinsPlayersPrefix {Solo le prima 4 lettere}
translate I TwinsWhen {Quando cancellare partite doppie}
translate I TwinsSkipShort {Ignorare tutte le partite sotto le 5 mosse?}
translate I TwinsUndelete {Recupera prima tutte le partite?}
translate I TwinsSetFilter {Definisci il filtro a tutte le partite doppie cancellate?}
translate I TwinsComments {Mantieni sempre le partite con commenti?}
translate I TwinsVars {Mantieni sempre le partite con varianti?}
translate I TwinsDeleteWhich {Quale partita cancellare:}
translate I TwinsDeleteShorter {La partita pi� corta}
translate I TwinsDeleteOlder {La partita inserita prima nel database}
translate I TwinsDeleteNewer {La partita inserita dopo nel database}
translate I TwinsDelete {Cancella partite}

# Name editor window:
translate I NameEditType {Tipo di nome da editare}
translate I NameEditSelect {Partite da editare}
translate I NameEditReplace {Sostituisci}
translate I NameEditWith {con}
translate I NameEditMatches {Corrispondenze: Digita da Ctrl+1 ad Ctrl+9 per scegliere}
# ====== TODO To be translated ======
translate I CheckGames {Check games}
# ====== TODO To be translated ======
translate I CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate I CheckAll {All games}
# ====== TODO To be translated ======
translate I CheckSelectFilterGames {Only games in filter}

# Classify window:
translate I Classify {Classifica}
translate I ClassifyWhich {Quali partite classificare ECO}
translate I ClassifyAll {Tutte le partite (sovrascrivi i vecchi codici ECO)}
translate I ClassifyYear {Tutte le partite giocate nell'ultimo anno}
translate I ClassifyMonth {Tutte le partite giocate nell'ultimo mese}
translate I ClassifyNew {Solo partite ancora senza codice ECO}
translate I ClassifyCodes {Codici ECO da usare}
translate I ClassifyBasic {Solo codici di base ("B12", ...)}
translate I ClassifyExtended {estensioni Scid ("B12j", ...)}

# Compaction:
translate I NameFile {File di Nomi}
translate I GameFile {File Partite}
translate I Names {Nomi}
translate I Unused {Non usati}
translate I SizeKb {Dimensioni (kb)}
translate I CurrentState {Stato Attuale}
translate I AfterCompaction {Dopo la compattazione}
translate I CompactNames {Compatta il file di nomi}
translate I CompactGames {Compatta il file di partite}
translate I NoUnusedNames "Non ci sono nomi inutilizzati, il file dei nomi è già compresso."
translate I NoUnusedGames "Il file delle partite è già compresso."
translate I NameFileCompacted {Il file dei nomi del database "[file tail [sc_base filename]]" è stato compresso.}
translate I GameFileCompacted {Il file delle partite del database "[file tail [sc_base filename]]" è stato compresso.}

# Sorting:
translate I SortCriteria {Criteri}
translate I AddCriteria {Aggiungi criteri}
translate I CommonSorts {Ordinamenti Comuni}
translate I Sort {Ordina}

# Exporting:
translate I AddToExistingFile {Aggiungi partite al file esistente?}
translate I ExportComments {Esporta commenti?}
translate I ExportVariations {Esporta varianti?}
translate I IndentComments {Indenta commenti?}
translate I IndentVariations {Indenta varianti?}
translate I ExportColumnStyle {Stile colonna (una mossa per riga)?}
translate I ExportSymbolStyle {Stile annotazione simbolica:}
translate I ExportStripMarks {Togliere i codici di casella/freccia dai commenti?}

# Goto game/move dialogs:
translate I LoadGameNumber {Inserire il numero della partita da caricare:}
translate I GotoMoveNumber {Vai alla mossa numero:}

# Copy games dialog:
translate I CopyGames {Copia partite}
translate I CopyConfirm {
 Vuoi veramente copiare
 le [::utils::thousands $nGamesToCopy] partite dal filtro
 del database "$fromName"
 nel database "$targetName"?
}
translate I CopyErr {Impossibile copiare le partite}
translate I CopyErrSource {il database origine}
translate I CopyErrTarget {il database destinazione}
translate I CopyErrNoGames {non contiene nessuna partita nel suo filtro}
translate I CopyErrReadOnly {e' di sola lettura}
translate I CopyErrNotOpen {non e' aperto}

# Colors:
translate I LightSquares {Case chiare}
translate I DarkSquares {Case scure}
translate I SelectedSquares {Case selezionate}
translate I SuggestedSquares {Case delle mosse suggerite}
translate I WhitePieces {Pezzi Bianchi}
translate I BlackPieces {Pezzi Neri}
translate I WhiteBorder {Bordi del Bianco}
translate I BlackBorder {Bordi del Nero}

# Novelty window:
translate I FindNovelty {Trova Novita'}
translate I Novelty {Novita'}
translate I NoveltyInterrupt {Ricerca novita' interrotta}
translate I NoveltyNone {Non e' stata trovata nessuna novita' per la partita corrente}
translate I NoveltyHelp {
Scid cerchera' la prima mossa della partita corrente che raggiungera' una posizione non presente nel database selezionato o nel libro delle aperure.
}

# Sounds configuration:
translate I SoundsFolder {Sound Files Folder} ;# ***
translate I SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc} ;# ***
translate I SoundsAnnounceOptions {Move Announcement Options} ;# ***
translate I SoundsAnnounceNew {Announce new moves as they are made} ;# ***
translate I SoundsAnnounceForward {Announce moves when moving forward one move} ;# ***
translate I SoundsAnnounceBack {Announce when retracting or moving back one move} ;# ***

# Upgrading databases:
translate I Upgrading {Aggiornamento}
translate I ConfirmOpenNew {
Questo e' un vecchio formato (Scid 3) di database che non puo' essere aperto da Scid 4, ma e' stata appena creata una nuova versione nel formato (Scid 4).

Vuoi aprire la nuova versione del database?
}
translate I ConfirmUpgrade {
Questo e' un vecchio formato (Scid 3) di database. Prima di poter utilizzare il database in Scid 4 va' creata una nuova versione.

L'aggiornamento creera' una nuova versione del database.

Questo richiedera' del tempo, ma necessita di essere fatto una volta sola. Puoi arrestare il processo se durera' a lungo.

Vuoi aggiornare il database ora?
}

# Recent files options:
translate I RecentFilesMenu {Numero di file recentemente utilizzati nel Menu File}
translate I RecentFilesExtra {Numero di file recentemente utilizzati nel submenu extra}

# My Player Names options:
translate I MyPlayerNamesDescription {
Inserisci sotto una lista di giocatori preferiti, un nome per linea. Wildcards (e.g. "?" per ogni singolo carattere, "*" per ogni sequenza di caratteri) sono accettati.

Ogni volta che viene caricata una partita con un giocatore nella lista, la finestra principale della scacchiera se necessario ruoterà e vi proporrà la partita dal punto di vista di quel giocatore.
}
translate I showblunderexists {mostra gli errori}
translate I showblundervalue {mostra il valore dell'errore}
translate I showscore {mostra il punteggio}
translate I coachgame {partita con maestro}
translate I configurecoachgame {configura la partita con maestro}
translate I configuregame {Configurazione della partita}
translate I Phalanxengine {Motore Phalanx}
translate I Coachengine {Motore per il maestro}
translate I difficulty {difficoltà}
translate I hard {difficile}
translate I easy {facile}
translate I Playwith {Gioca con}
translate I white {bianco}
translate I black {nero}
translate I both {entrambi}
translate I Play {Gioca}
translate I Noblunder {Nessun errore}
translate I blunder {errore}
translate I Noinfo {-- Nessuna info --}
# ====== TODO To be translated ======
translate I PhalanxOrTogaMissing {Phalanx or Toga not found}
translate I moveblunderthreshold {la mossa è un errore se la perdita è maggiore di}
translate I limitanalysis {limita il tempo di analisi del motore}
translate I seconds {secondi}
translate I Abort {Annulla}
# ====== TODO To be translated ======
translate I Resume {Resume}
translate I OutOfOpening {Fuori dall'apertura}
translate I NotFollowedLine {Non hai seguito la linea}
translate I DoYouWantContinue {Vuoi continuare?}
translate I CoachIsWatching {Il maestro stà osservando}
translate I Ponder {Analisi permanente}
# ====== TODO To be translated ======
translate I LimitELO {Limit ELO strength}
translate I DubiousMovePlayedTakeBack {Mossa dubbia, vuoi rifare?}
translate I WeakMovePlayedTakeBack {Mossa debole, vuoi rifare?}
translate I BadMovePlayedTakeBack {Mossa cattiva, vuoi rifare?}
translate I Iresign {Abbandono}
translate I yourmoveisnotgood {La tua mossa non è buona}
translate I EndOfVar {Fine della variante}
translate I Openingtrainer {Allenatore delle aperture}
translate I DisplayCM {Mostra le mosse candidate}
translate I DisplayCMValue {Mostra il valore delle mosse candidate}
translate I DisplayOpeningStats {Mostra le statistiche}
translate I ShowReport {Mostra il report}
# ====== TODO To be translated ======
translate I NumberOfGoodMovesPlayed {good moves played}
# ====== TODO To be translated ======
translate I NumberOfDubiousMovesPlayed {dubious moves played}
# ====== TODO To be translated ======
translate I NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
# ====== TODO To be translated ======
translate I NumberOfTimesPositionEncountered {times position encountered}
translate I PlayerBestMove  {Permetti solo le mosse migliori}
translate I OpponentBestMove {L'avversario gioca le mosse migliori}
translate I OnlyFlaggedLines {Solo linee tracciate}
translate I resetStats {Azzera le statistiche}
translate I Repertoiretrainingconfiguration {Configuarazione dell'allenatore del repertorio}
translate I Loadingrepertoire {Leggo il repertorio}
translate I Movesloaded {Mosse lette}
translate I Repertoirenotfound {Repertorio non trovato}
translate I Openfirstrepertoirewithtype {Apri prima un database come repertorio con tipo/icona a destra}
translate I Movenotinrepertoire {Mossa non presente nel repertorio}
translate I PositionsInRepertoire {Posizioni nel repertorio}
translate I PositionsNotPlayed {Posizioni non giocate}
translate I PositionsPlayed {Posizioni giocate}
translate I Success {Successo}
translate I DubiousMoves {Mossa dubbia}
translate I OutOfRepertoire {Fuori dal repertorio}
translate I ConfigureTactics {Configura le tattiche}
translate I ResetScores {Azzara i punteggi}
translate I LoadingBase {Leggo il database}
translate I Tactics {Tattiche}
translate I ShowSolution {Mostra la soluzione}
# ====== TODO To be translated ======
translate I NextExercise {Next exercise}
# ====== TODO To be translated ======
translate I PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate I StopTraining {Stop training}
translate I Next {Seguente}
translate I ResettingScore {Azzero il punteggio}
translate I LoadingGame {Leggo la partita}
translate I MateFound {Scacco matto trovato}
translate I BestSolutionNotFound {La migliore soluzione NON è stata trovata!}
translate I MateNotFound {Scacco matto non trovato}
translate I ShorterMateExists {Essite uno scacco matto più breve}
translate I ScorePlayed {Punteggio giocato}
translate I Expected {atteso}
translate I ChooseTrainingBase {Scegli il database di allenamento}
translate I Thinking {Penso}
translate I AnalyzeDone {Analisi eseguita}
translate I WinWonGame {Vinci le partite vinte}
translate I Lines {Linee}
translate I ConfigureUCIengine {Configura il motore UCI}
translate I SpecificOpening {Apertura Specifica}
# ====== TODO To be translated ======
translate I StartNewGame {Start new game}
# ====== TODO To be translated ======
translate I FixedLevel {Fixed level}
# ====== TODO To be translated ======
translate I Opening {Opening}
translate I RandomLevel {Livello casuale}
translate I StartFromCurrentPosition {Parti dalla posizione attuale}
translate I FixedDepth {Profondità fissa}
translate I Nodes {Nodi}
translate I Depth {Profondità}
translate I Time {Tempo}
translate I SecondsPerMove {Secondi per mossa}
# ====== TODO To be translated ======
translate I Engine {Engine}
# ====== TODO To be translated ======
translate I TimeMode {Time mode}
translate I TimeBonus {Tempo + bonus}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate I TimeMin {min}
# ====== TODO To be translated ======
translate I TimeSec {sec}
translate I AllExercisesDone {Tutti gli esercizi eseguiti}
translate I MoveOutOfBook {Mossa fuori dal libro}
translate I LastBookMove {Ultima mossa del libro}
translate I AnnotateSeveralGames {Annota più partite\ndall'attuale a:}
translate I FindOpeningErrors {Trova errori dell'apertura}
# ====== TODO To be translated ======
translate I MarkTacticalExercises {Mark tactical exercises}
translate I UseBook {Usa il libro}
translate I MultiPV {Varianti multiple}
translate I Hash {Memoria Hash}
translate I OwnBook {Use il libro del motore}
translate I BookFile {Libro delle aperture}
translate I AnnotateVariations {Annota le varianti}
translate I ShortAnnotations {Annotazione breve}
translate I addAnnotatorTag {Aggiungi il tag dell'annotazione}
translate I AddScoreToShortAnnotations {Aggiungi il punteggio alle annotazioni brevi}
translate I Export {Esporta}
translate I BookPartiallyLoaded {Libro caricato parzialmente}
translate I Calvar {Calcolo delle varianti}
translate I ConfigureCalvar {Configurazione}
translate I Reti {Reti}
translate I English {Inglese}
translate I d4Nf6Miscellaneous {1.d4 Nf6 Vario}
translate I Trompowsky {Trompowsky}
translate I Budapest {Budapest}
translate I OldIndian {Vecchia Indiana}
translate I BenkoGambit {Gambetto Benko}
translate I ModernBenoni {Moderna Benoni}
translate I DutchDefence {Difesa Olandese}
translate I Scandinavian {Scandinava}
translate I AlekhineDefence {Difesa Alekhine}
translate I Pirc {Pirc}
translate I CaroKann {Caro-Kann}
translate I CaroKannAdvance {Caro-Kann Avanzata}
translate I Sicilian {Siciliana}
translate I SicilianAlapin {Siciliana Alapin}
translate I SicilianClosed {Siciliana Chiusa}
translate I SicilianRauzer {Siciliana Rauzer}
translate I SicilianDragon {Siciliana Dragone}
translate I SicilianScheveningen {Siciliana Scheveningen}
translate I SicilianNajdorf {Siciliana Najdorf}
translate I OpenGame {Partita Aperta}
translate I Vienna {Vienna}
translate I KingsGambit {Gambetto di Re}
translate I RussianGame {Partita Russa}
translate I ItalianTwoKnights {Italiana/Due Cavalli}
translate I Spanish {Spagnola}
translate I SpanishExchange {Spagnola Cambio}
translate I SpanishOpen {Spagnola Aperta}
translate I SpanishClosed {Spagnola Chiusa}
translate I FrenchDefence {Difesa Francese}
translate I FrenchAdvance {Francese Avanzata}
translate I FrenchTarrasch {Francese Tarrasch}
translate I FrenchWinawer {Francese Winawer}
translate I FrenchExchange {Francese Cambio}
translate I QueensPawn {Pedone di Donna}
translate I Slav {Slava}
translate I QGA {Gambetto di Donna Acettato}
translate I QGD {Gambetto di Donna Rifiutato}
translate I QGDExchange {Gambetto di Donna Rifiutato Cambio}
translate I SemiSlav {Semi-Slava}
translate I QGDwithBg5 {Gambetto di Donna Rifiutato con Ag5}
translate I QGDOrthodox {Gambetto di Donna Rifiutato Ortodossa}
translate I Grunfeld {Grunfeld}
translate I GrunfeldExchange {Grunfeld Cambio}
translate I GrunfeldRussian {Grunfeld Russa}
translate I Catalan {Catalana}
translate I CatalanOpen {Catalana Aperta}
translate I CatalanClosed {Catalana Chiusa}
translate I QueensIndian {Indiana di Donna}
translate I NimzoIndian {Nimzo-Indiana}
translate I NimzoIndianClassical {Nimzo-Indiana Classica}
translate I NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
translate I KingsIndian {Indiana di Re}
translate I KingsIndianSamisch {Indiana di Re Samisch}
translate I KingsIndianMainLine {Indiana di Re Liena Principale}
# ====== TODO To be translated ======
translate I ConfigureFics {Configure FICS}
# ====== TODO To be translated ======
translate I FICSGuest {Login as Guest}
# ====== TODO To be translated ======
translate I FICSServerPort {Server port}
# ====== TODO To be translated ======
translate I FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate I FICSRefresh {Refresh}
# ====== TODO To be translated ======
translate I FICSTimesealPort {Timeseal port}
# ====== TODO To be translated ======
translate I FICSSilence {Silence}
# ====== TODO To be translated ======
translate I FICSOffers {Offers}
# ====== TODO To be translated ======
translate I FICSConsole {Console}
# ====== TODO To be translated ======
translate I FICSGames {Games}
# ====== TODO To be translated ======
translate I FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate I FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate I FICSRelayedGames {Relayed games}
# ====== TODO To be translated ======
translate I FICSFindOpponent {Find opponent}
# ====== TODO To be translated ======
translate I FICSTakeback {Takeback}
# ====== TODO To be translated ======
translate I FICSTakeback2 {Takeback 2}
# ====== TODO To be translated ======
translate I FICSInitTime {Initial time (min)}
# ====== TODO To be translated ======
translate I FICSIncrement {Increment (sec)}
# ====== TODO To be translated ======
translate I FICSRatedGame {Rated Game}
# ====== TODO To be translated ======
translate I FICSAutoColour {automatic}
# ====== TODO To be translated ======
translate I FICSManualConfirm {confirm manually}
# ====== TODO To be translated ======
translate I FICSFilterFormula {Filter with formula}
# ====== TODO To be translated ======
translate I FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate I FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate I FICSAccept {accept}
# ====== TODO To be translated ======
translate I FICSDecline {decline}
# ====== TODO To be translated ======
translate I FICSColour {Colour}
# ====== TODO To be translated ======
translate I FICSSend {send}
# ====== TODO To be translated ======
translate I FICSConnect {Connect}
# ====== TODO To be translated ======
translate I FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate I FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate I FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate I GameReview {Game review}
# ====== TODO To be translated ======
translate I GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate I GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate I GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate I GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate I GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate I GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate I GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate I GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate I GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate I GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate I GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate I GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate I GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate I GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate I GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate I GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate I GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate I GameReviewMovesPlayedEngine {Moves played like engine}
translate I CCDlgConfigureWindowTitle {Configura Scacchi per Corrispondenza}
translate I CCDlgCGeneraloptions {Opzioni generali}
translate I CCDlgDefaultDB {Database di Default:}
translate I CCDlgInbox {Posta in Arrivo (percorso):}
translate I CCDlgOutbox {Posta in Uscita (percorso):}
translate I CCDlgXfcc {Configurazione di Xfcc:}
translate I CCDlgExternalProtocol {Gestore del Protocollo esterno (p.e. Xfcc)}
translate I CCDlgFetchTool {Strumento per la scansione:}
translate I CCDlgSendTool {Strumento per l'invio:}
translate I CCDlgEmailCommunication {Comunicazione via eMail}
translate I CCDlgMailPrg {Programma di posta:}
translate I CCDlgBCCAddr {Indirizzo (B)CC:}
translate I CCDlgMailerMode {Modo:}
translate I CCDlgThunderbirdEg {p.e. Thunderbird, Mozilla Mail, Icedove...}
translate I CCDlgMailUrlEg {p.e. Evolution}
translate I CCDlgClawsEg {p.e Sylpheed Claws}
translate I CCDlgmailxEg {p.e. mailx, mutt, nail...}
translate I CCDlgAttachementPar {Parametro per l'allegato:}
translate I CCDlgInternalXfcc {Usa il supporto interno per Xfcc}
# ====== TODO To be translated ======
translate I CCDlgConfirmXfcc {Confirm moves}
translate I CCDlgSubjectPar {Parametro per l'oggetto:}
# ====== TODO To be translated ======
translate I CCDlgDeleteBoxes {Empty In-/Outbox}
# ====== TODO To be translated ======
translate I CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess? This requires a new sync to show the last state of your games}
# ====== TODO To be translated ======
translate I CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate I CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate I CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate I CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
translate I CCDlgStartEmail {Avvia una nuova partita tramite eMail}
translate I CCDlgYourName {Il tuo nome:}
translate I CCDlgYourMail {Il tuo indirizzo eMail:}
translate I CCDlgOpponentName {Nome dell'avversario:}
translate I CCDlgOpponentMail {Indirizzo eMail dell'avversario:}
translate I CCDlgGameID {ID (univoco) della partita:}
translate I CCDlgTitNoOutbox {Scid: Posta in uscita del gioco per corrispondenza}
translate I CCDlgTitNoInbox {Scid: Posta in arrivo del gioco per corrispondenza}
translate I CCDlgTitNoGames {Scid: Nessuna partita per il gioco per corrispondenza}
translate I CCErrInboxDir {Directory della posta in arrivo:}
translate I CCErrOutboxDir {Directory della posta in uscita:}
translate I CCErrDirNotUsable {non esiste o non è accessibile\nControlla e correggi le impostazioni.}
translate I CCErrNoGames {non contiene partite!\nEffettua prima una scansione.}
translate I CCDlgTitNoCCDB {Scid: Nessun database per il gioco per corrispondenza}
translate I CCErrNoCCDB {Non è aperto nessun database di tipo "gioco per corrispondenza". Aprine uno usando le funzioni per il gioco per corrispondenza.}
# ====== TODO To be translated ======
translate I CCFetchBtn {Fetch games from the server and process the Inbox}
# ====== TODO To be translated ======
translate I CCPrevBtn {Goto previous game}
# ====== TODO To be translated ======
translate I CCNextBtn {Goto next game}
# ====== TODO To be translated ======
translate I CCSendBtn {Send move}
# ====== TODO To be translated ======
translate I CCEmptyBtn {Empty In- and Outbox}
# ====== TODO To be translated ======
translate I CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}
# ====== TODO To be translated ======
translate I CCDlgServerName {Server Name:}
# ====== TODO To be translated ======
translate I CCDlgLoginName  {Login Name:}
# ====== TODO To be translated ======
translate I CCDlgPassword   {Password:}
# ====== TODO To be translated ======
translate I CCDlgURL        {Xfcc-URL:}
# ====== TODO To be translated ======
translate I CCDlgRatingType {Rating Type:}
# ====== TODO To be translated ======
translate I CCDlgDuplicateGame {Non-unique game ID}
# ====== TODO To be translated ======
translate I CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
# ====== TODO To be translated ======
translate I CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate I CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate I CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate I CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate I CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate I CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate I CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate I CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate I CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
# ====== TODO To be translated ======
translate I ExtHWConfigConnection {Configure external hardware}
# ====== TODO To be translated ======
translate I ExtHWPort {Port}
# ====== TODO To be translated ======
translate I ExtHWEngineCmd {Engine command}
# ====== TODO To be translated ======
translate I ExtHWEngineParam {Engine parameter}
# ====== TODO To be translated ======
translate I ExtHWShowButton {Show button}
# ====== TODO To be translated ======
translate I ExtHWHardware {Hardware}
# ====== TODO To be translated ======
translate I ExtHWNovag {Novag Citrine}
# ====== TODO To be translated ======
translate I ExtHWInputEngine {Input Engine}
# ====== TODO To be translated ======
translate I ExtHWNoBoard {No board}
# ====== TODO To be translated ======
translate I NovagReferee {Referee}
# ====== TODO To be translated ======
translate I IEConsole {Input Engine Console}
# ====== TODO To be translated ======
translate I IESending {Moves sent for}
# ====== TODO To be translated ======
translate I IESynchronise {Synchronise}
# ====== TODO To be translated ======
translate I IERotate  {Rotate}
# ====== TODO To be translated ======
translate I IEUnableToStart {Unable to start Input Engine:}
translate I DoneWithPosition {Posizione conclusa}
# ====== TODO To be translated ======
translate I Board {Board}
# ====== TODO To be translated ======
translate I showGameInfo {Show game info}
# ====== TODO To be translated ======
translate I autoResizeBoard {Automatic resize of board}
# ====== TODO To be translated ======
translate I DockTop {Move to top}
# ====== TODO To be translated ======
translate I DockBottom {Move to bottom}
# ====== TODO To be translated ======
translate I DockLeft {Move to left}
# ====== TODO To be translated ======
translate I DockRight {Move to right}
# ====== TODO To be translated ======
translate I Undock {Undock}
# ====== TODO To be translated ======
translate I ChangeIcon {Change icon...}
}

############################################################
#
# Italian tips section:

set tips(I) {
  {
    SCID ha oltre 30 <a Index>pagine di help</a>, e in molte finestre 
    premendo il tasto funzionale <b>F1</b> apparira' una pagina di help
    relativa alla finestra.
  }
  {
    Molte finestre di SCID (p.e. il database <a Switcher>database switcher</a>,
    ecc.) hanno un menu' collegato al pulsante destro del mouse. Prova a
    premerlo in ogni finestra per vedere se c'e' e quali funzionalita' permette.
  }
  {
    SCID ti consente piu' di una modalit� per inserire le mosse, scegli
    quale preferisci. Puoi utilizzare il mouse (con o senza il suggerimento
    della mossa) o la tastiera (con o senza il completamento della mossa).
    Leggi la pagina di help <a Moves>inserire le mosse</a> per maggiori dettagli. 
  }
  {
    Se utilizzi pochi database che apri spesso, aggiungi un
    <a Bookmarks>segnalibro</a> a ognuno di essi e poi puoi aprirlo piu'
    velocemente con il Menu Segnalibri.
  }
  {
    Puoi visualizzare tutte le mosse della partita caricata (con ogni
    variante e/o commento) utilizzando la <a PGN>Finestra PGN</a>.
    Nella Finestra PGN puoi andare a ogni mossa premendo il tasto sinistro
    del mouse quando sei sulla mossa oppure visualizzare la posizione
    premendo il tasto centrale/destro del mouse.
  }
  {
    Puoi copiare partite da un database ad un'altro usando la tecnica del
    drag and drop utilizzando il tasto sinistro del mouse nella finestra 
    <a Switcher>database switcher</a>.
  }
  {
    SCID puo' aprire file PGN, anche se sono compressi con Gzip (con il
    suffisso .gz). I file PGN aperti sono a sola lettura cosi' puoi
    modificare un file PGN in SCID, creando un nuovo database SCID e copiando
    il file PGN in esso utilizzando il <a Switcher>database switcher</a>.
  }
  {
    Se hai un grosso database e usi spesso la finestra <a Tree>albero</a>,
    e' il caso di utilizzare <b>riempi il file cache</b> dalla Finestra
    Albero (menu file). Cio' memorizza le statistiche dell'albero delle
    piu' comuni posizioni di apertura rendendo piu' veloci gli accessi
    all'albero per quel database.
  }
  {
    La finestra <a Tree>albero</a> visualizza tutte le mosse giocate dalla
    posizione caricata, ma se vuoi vedere tutti gli ordini di mosse che
    raggiungono la posizione devi generare un <a OpReport>report di apertura</a>.
  }
  {
    Nella finestra <a GameList>elenco partite</a> premendo il tasto sinistro
    o desto del mouse sulla testata di ogni colonna puoi modificarne la
    larghezza.
  }
  {
    Con la finestra <a PInfo>informazioni sul giocatore</a> (che ottieni
    cliccando sui nomi dei giocatori nella info area sotto la finestra
    con la scacchiera) tu puoi facilmente, utilizzando il
    <a Searches Filter>filtro</a>, ottenere tutte le partite di un certo
    giocatore con i suoi risultati cliccando su ogni campo che appare
    <red>in rosso</red>.
  }
  {
    Quando studi un'apertura puo' essere utile effettuare una
    <a Searches Board>ricerca su scacchiera</a> con le opzioni
    <b>Pedoni</b> oppure <b>Colonne</b> sulla posizione che ti
    interessa, in maniera da evidenziarti se altre aperture 
    raggiungono la stessa struttura di pedoni.
  }
  {
    Nell'Area di informazioni sulla partita (sotto la scacchiera) tu puoi
    premere il tasto destro del mouse per ottenere un menu' per 
    personalizzarla. Per esempio puoi nascondere la prossima mossa e cio'
    e' utile quando visualizzi una partita per allenamento e vuoi pensare
    le mosse successive. 
  }
  {
    Se tu effettui spesso <a Maintenance>manutenzione</a> di un database
    di grosse dimensioni puoi effettuare tutte le attivita' in un colpo
    solo utilizzando il <a Maintenance Cleaner>pulitore</a>.
  }
  {
    Se tu hai un grosso database dove molte partite hanno il campo EventDate
    valorizzato e tu vuoi le partite in ordine di data utilizza
    <a Sorting>ordinamento</a> per EventDate/Event invece di Date/Event
    cosicche' otterrai insieme le partite dello stesso torneo anche se hanno
    date diverse (partendo dal presupposto che abbiano la stessa EventDate).
  }
  {
    Prima di <a Maintenance Twins>cancellare le partite doppie</a> e' meglio
    utilizzare il <a Maintenance Spellcheck>controllo ortografico</a> sul tuo
    database permettendo a SCID di identificare un numero maggiore di
    partite doppie e contrassegnarle per la cancellazione.
  }
  {
    <a Flags>Gli identificatori</a>  sono utili per evidenziare partite con
    caratteristiche particolari da ricercare successivamente (p.e. struttura
    di pedoni, tattica, ecc.). Puoi ricercare le partite contrassegnate
    utilizzando <a Searches Header>ricerca per intestazione</a>.
  }
  {
    Se stai visualizzando una partita e vuoi provare qualche altra mossa
    senza modificare la partita puoi entrare nel Modo Prova (con lo
    shortcut <b>Ctrl+space</b> oppure cliccando l'apposita icona).
    Quando hai finito puoi deselezionare il Modo Prova ritornando
    alla partita originale.
  }
  {
    Per cercare le partite maggiormente rilevanti (quelle con i giocatori
    con l'Elo piu' alto) in una posizione, apri la finestra <a Tree>albero</a>
    e da quella apri la Lista Migliori Partite.
    Puoi personalizzare la lista ottenendo solo le partite con un
    certo risultato che ti interessa.
  }
  {
    Un buon modo per studiare le aperture utilizzando un grosso database
    e' attivare il Modo Esercizio nella finestra <a Tree>albero</a> e
    giocare contro il database per vedere quali linee appaiono spesso.
  }
  {
    Se hai due database aperti e vuoi visualizzare le statistiche
    dell'<a Tree>albero</a> del primo database mentre esamini una
    partita del secondo database premi il pulsante <b>Blocca</b> nella
    finestra albero per bloccare il primo database ed allora selezionare
    il secondo database.
  }
  {
    Il <a Tmt>tournament finder</a> non e' solo utile per trovare un
    certo torneo, ma puo' essere usato anche per vedere quali tornei
    ha giocato recentemente un certo giocatore oppure vedere i tornei
    piu' importanti giocati in una certa nazione.
  }
  {
    La finestra <a Searches Material>Materiale/Schema</a> ti propone
    alcune possibilita', fra le piu' comuni, facilitandoti ricerche
    per aperture o centri partita a fine di studio.
  }
  {
    Quando effettui una ricerca per una particolare posizione
    nella finestra <a Searches Material>Materiale/Schema</a> e'
    spesso utile restringere la ricerca a partite che permangono
    nella posizione voluta almeno qualche mezza mossa eliminando
    partite che raggiungono la posizione voluta solo una volta. 
  }
  {
    Se tu hai un importante database e non vuoi correre il rischio
    di effettuare modifiche inopportune, seleziona <b>solo lettura...</b>
    dal <b>File</b> menu dopo averlo aperto, oppure cambia gli
    attributi a solo lettura.
  }
  {
    Se usi XBoard oppure WinBoard (oppure altri programmi scacchistici
    che possono copiare sulla clipboard la posizione attuale in notazione
    standard FEN) e vuoi copiare la tua posizione su SCID, il modo piu'
    facile e veloce e' selezionare <b>Copia Positione</b> dal menu File
    in XBoard/WinBoard e poi <b>Copia come posizione di partenza</b> dal
    menu Edita in SCID.  
  }
  {
    In una <a Searches Header>ricerca per intestazione</a>,
    giocatore/evento/luogo/turno non sono sensibili alle maiuscole e
    vengono cercate anche all'interno dei nomi. Puoi scegliere di
    fare una ricerca sensibile alle maiuscole (dove "?" = ogni singolo
    carattere e "*" = zero o piu' caratteri) digitando la stringa che
    vuoi trovare fra "virgolette". Per esempio digitando "*BEL" (con
    le virgolette) nel campo luogo otterrai tutte le partite giocate
    in Belgio ma non a Belgrado.
  }
  {
    Se vuoi correggere una mossa in una partita senza perdere le mosse
    giocate successivamente, apri la finestra <a Import>Importa</a>
    premi l'icona b>Incolla la partica corrente</b>, edita la mossa
    sbagliata e poi premi l'icona <b>Importa</b>.
  }
  {
    Se hai caricato un file di classificazione ECO, puoi andare alla
    posizione classificata piu' profonda della partita correntemente
    caricata con <b>Identifica apertura</b> nel menu <b>Partita</b>
    (shortcut: Ctrl+Shift+D).
  }
  {
    Se vuoi verificare le dimensioni di un file o la sua data di ultima
    modifica prima di aprirlo, utilizza <a Finder>file finder</a> per
    aprirlo.
  }
  {
    Un file di <a Repertoire>repertorio</a> e' un grande strumento per
    monitorare le tue aperture preferite e per trovare le partite nelle
    quali queste linee sono state giocate. Dopo aver memorizzato le tue
    aperture in un file di repertorio puoi effettuare ricerche tutte le
    volte che acquisisci nuovi file di partite e visualizzare le partite
    che ti interessano.
  }
  {
    Un <a OpReport>rapporto di apertura</a> e' molto utile per apprendere
    ulteriori informazioni su una particolare posizione. Puoi vedere il
    punteggio percentuale che raggiunge, se porta a rapide patte, i temi
    posizionali piu' comuni e molto altro.
  }
  {
    Puoi aggiungere i piu' comuni simboli di annotazione (!, !?, +=, ecc)
    alla posizione attualmente caricata con scorciatoie da tastiera senza
    necessita' di utilizzare <a Comment>l'editor di commenti<a>.
    Per esempio digitando "!" seguito dal tasto Conferma/Enter/Return
    aggiungerete il simbolo "!". Guarda la pagina di help
    <a Moves>Inserire le mosse</a> per maggiori informazioni.
  }
  {
    Se stai visualizzando un'apertura in un database con <a Tree>l'albero</a>
    puoi facilmente vedere i risultati percentuali dell'apertura che stai
    guardando (recenti e fra giocatori di Elo alto) aprendo la finestra
    Statistiche (shortcut: Ctrl+I).
  }
  {
    Puoi cambiare le dimensioni della scacchiera premendo i tasti
    <b>Ctrl</b> e <b>Shift</b>, e regolare le dimensioni premendo i tasti
    freccia <b>Left</b> o <b>Right</b> .
  }
  {
    Dopo una <a Searches>ricerca</a> puoi facilmente visualizzare tutte le
    partite trovate premendo <b>Ctrl</b> e con i tasti <b>Su</b> o <b>Giu'</b>
    caricare la precedente o successiva partita del <a Searches Filter>filtro</a>.
  }
}


# end of italian.tcl
#  nederlan.tcl:
#  Dutch language support for Scid.
#  Added by J.Kees Hofkamp.
#  Changes by J. Krabbenbos.
#  Changes by Leander Laruelle.
# Untranslated messages are marked with a "***" comment.


addLanguage N Nederlands 0 ;#iso8859-1

proc setLanguage_N {} {

# File menu:
menuText N File "Bestand" 0
menuText N FileNew "Nieuw..." 0 {Maak een nieuwe Scid database}
menuText N FileOpen "Openen..." 0 {Open een bestaande Scid database}
menuText N FileClose "Sluiten" 0 {Sluit de  actieve Scid database}
menuText N FileFinder "Bestandzoeker" 0 {Open het bestandszoekvenster}
menuText N FileBookmarks "Bladwijzers" 0 {Bladwijzer menu (sneltoets: Ctrl+B)}
menuText N FileBookmarksAdd "Toevoegen bladwijzer" 0 \
  {Bladwijzer naar huidige databasepartij en stelling}
menuText N FileBookmarksFile "Bladwijzer-bestand" 0 \
  {Maak een bladwijzerbestand voor de huidige partij en stelling}
menuText N FileBookmarksEdit "Wijzigen Bladwijzers..." 0 \
  {Bladwijzermenu's}
menuText N FileBookmarksList "Weergeven bladwijzerfolders als lijst" 0 \
  {Weergeven bladwijzerfolders als lijst, niet als submenu's}
menuText N FileBookmarksSub "Weergeven bladwijzerfolders als submenu's" 0 \
  {Weergeven bladwijzerfolders als submenu's, niet als lijst}
menuText N FileMaint "Onderhoud" 2 {Onderhoud Scid database}
menuText N FileMaintWin "Onderhoudsvenster" 2 \
  {Open/sluit het Scid onderhoudsvenster}
menuText N FileMaintCompact "Reorganiseer database..." 0 \
  {Reorganiseer database bestanden}
menuText N FileMaintClass "Partijen ECO-classificeren..." 10 \
  {Herbereken de ECO code van alle partijen}
menuText N FileMaintSort "Sorteren..." 0 \
  {Sorteer alle partijen in de database}
menuText N FileMaintDelete "Dubbels verwijderen..." 0 \
  {Vind dubbele partijen om ze te verwijderen}
menuText N FileMaintTwin "Dubbels-venster" 1 \
  {Open/bijwerken het dubbels-controle venster}
menuText N FileMaintName "Namen" 0 \
  {Corrigeer namen/spelling}
menuText N FileMaintNameEditor "Namen-bewerker" 6 \
  {Open/sluit het namen-correctie venster}
menuText N FileMaintNamePlayer "Corrigeer naam speler..." 15 \
  {Controleer spelling namen via het spellingcontrole bestand}
menuText N FileMaintNameEvent "Corrigeer naam evenement..." 15 \
  {Controleer spelling evenementen via spellingchecker bestand}
menuText N FileMaintNameSite "Corrigeer naam plaats..." 15 \
  {Controleer plaatsnamen via spellingchecker bestand}
menuText N FileMaintNameRound "Corrigeer ronde..." 10 \
  {Controleer rondenamen via spelling spellingchecker bestand}
menuText N FileReadOnly "Alleen lezen..." 7 \
  {Zet huidige database op alleen-lezen en voorkom veranderingen}
menuText N FileSwitch "Schakel naar andere  database" 0 \
  {Schakel naar een andere geopende database} 
menuText N FileExit "Einde programma" 0 {Einde Scid}
menuText N FileMaintFixBase "Repareer databank" 0 \
    {Probeer een corrupte databank te repareren}

# Edit menu:
menuText N Edit "Bewerken" 0
menuText N EditAdd "Nieuwe variant" 8 \
 {Voeg op dit punt een variant toe}
menuText N EditDelete "Variant verwijderen" 11 \
 {Verwijder een variant voor deze zet}
menuText N EditFirst "Maak hoofdvariant" 5 \
  {Maak deze variant de eerste in de lijst}
menuText N EditMain "Variatie op hoofdvariant" 13 \
   {Promoveerd de variant als hoofdvariant}
menuText N EditTrial "Probeer variatie" 0 \
  {Start/stop probeer modus, om een idee op het bord te testen}
menuText N EditStrip "Verwijder analyse" 2 {Verwijder commentaar of varianten uit deze partij}
menuText N EditUndo "Ongedaan" 0 {Maak laatset verandering ongedaan}
# ====== TODO To be translated ======
menuText N EditRedo "Redo" 0 {Redo last game change}
menuText N EditStripComments "Commentaar" 0 \
  {Verwijder alle commentaar en annotaties uit deze partij}
menuText N EditStripVars "Varianten" 0 {Verwijder alle varianten uit deze partij}
menuText N EditStripBegin " Zetten vanaf begin " 1 \
  {Verwijder alle zetten vanaf begin van de partij} ;
menuText N EditStripEnd " Zetten tot het einde  " 0 \
  {Verwijder alle verdere zetten tot het einde van de partij} ;
menuText N EditReset "Klembord leegmaken" 0 \
  {Maak het klembord helemaal leeg}
menuText N EditCopy "Partij naar klembord" 7 \
  {Kopieer deze partij naar het klembord}
menuText N EditPaste "Partij vanuit klembord" 7 \
  {Plak actieve klembord-partij hier}
menuText N EditPastePGN "Plak de Klipbord tekst als  PGN partij..." 10 \
  {Interpreteer de Klipbord tekst als een partij  in PGN notatie en plak die hier} ;
menuText N EditSetup "Stelling opzetten..." 0 \
  {Kies een start-stelling voor de partij}
menuText N EditCopyBoard "Copieer stelling " 6 \
  {Copieer de huidige stelling in FEN notatie naar de tekst het tekst clibbord } ;
menuText N EditPasteBoard "Invoegen start stelling" 12 \
  {Maak de start stelling van de huidige tekst selectie (klembord)}

# Game menu:
menuText N Game "Partij" 0
menuText N GameNew "Partij leegmaken" 7 \
  {Maak partij leeg; sla veranderingen niet op}
menuText N GameFirst "Eerste partij laden" 5 {Laad de eerste gefilterde partij}
menuText N GamePrev "Vorige partij laden" 0 \
  {Laad vorige partij in het filter}
menuText N GameReload "Partij opnieuw laden" 7 \
  {Laad partij opnieuw; sla veranderingen niet op}
menuText N GameNext "Volgende partij laden" 3 \
  {Laad volgende partij in het filter}
menuText N GameLast "Laatste partij laden" 6 {Laad de laatste gefilterde partijd}
menuText N GameRandom "Laad willekeurige partij" 8 {Laad een willekeurige partij}
menuText N GameNumber "Laad partij nummer..." 12 \
  {Laad partijnummer:}
menuText N GameReplace "Partij overschrijven..." 11 \
  {Bewaar partij; overschrijf oude versie}
menuText N GameAdd "Partij toevoegen..." 7 \
  {Bewaar partij en voeg toe aan de database}
menuText N GameDeepest "Opening bepalen" 8 \
  {Ga naar de diepste stelling uit het ECO openingboek}
menuText N GameGotoMove "Zetnummer..." 0 \
  {Ga naar zetnummer .. in de partij}
menuText N GameNovelty "Vind nieuwtje..." 7 \
  {Vind de eerste zet in deze partij die nog niet eerder is gespeeld}

# Search menu:
menuText N Search "Selecteren" 0
menuText N SearchReset "Alle partijen" 0 \
  {Reset filter en toon alle partijen}
menuText N SearchNegate "Selectie omdraaien" 9 \
  {Draai filter om en toon de andere partijen uit de databse}
menuText N SearchCurrent "Zoek huidige stelling" 5 \
  {Zoek in database naar huidige stelling}
menuText N SearchHeader "Partijgegevens..." 5 \
  {Zoek op speciale informatie: speler, evenement enz.}
menuText N SearchMaterial "Materiaal/Kenmerken..." 0 \
  {Zoek op patroon: bord, materiaal enz.}
menuText N SearchUsing "Zoekopties" 0 \
  {Zoek met gebruikmaking van opgeslagen opties}

# Windows menu:
menuText N Windows "Venster" 0
menuText N WindowsComment "Bewerk commentaar" 0 \
 {Open/sluit commentaar bewerkings venster}
menuText N WindowsGList "Toon alle partijen" 0 \
  {Open/sluit lijst met partijen}
menuText N WindowsPGN "PGN-venster" 0 \
 {Open/sluit het PGN-notatie venster}
menuText N WindowsPList "Spelervinder" 2 {Open/sluit de spelervinder} ;
menuText N WindowsTmt "Toernooi Zoeker" 2 {Open/sluit het toernooi zoekvenster}
menuText N WindowsSwitcher  "Database wisselen" 0 \
  {Open/sluit het database-wisselen venster}
menuText N WindowsMaint "Onderhoudsvenster" 5 \
  {Open/sluit het onderhoudsvenster}
menuText N WindowsECO "ECO Browser" 0 {Open/sluit het ECO browser venster}
menuText N WindowsRepertoire "Repertoire editor" 0 {Open/sluit de openingsrepertoir editor}
menuText N WindowsStats "Statistiek" 0 \
  {Open/sluit het filter statieken-venster}
menuText N WindowsTree "Openingoverzicht" 0 {Open/sluit het Openingsoverzichtvenster}
menuText N WindowsTB "Tablebase venster" 1 \
  {Open/sluit het Tablebase venster}
menuText N WindowsBook "Boek Venster" 0 {Open/sluit het Boek venster}
menuText N WindowsCorrChess "Correspondentieschaak venster" 0 \
    {Open/sluit het correspondentieschaak venster}

# Tools menu:
menuText N Tools "Gereedschappen" 0
menuText N ToolsAnalysis "Schaakengine ..." 3 \
  {Start/stop schaak-analyse programma 1}
menuText N ToolsAnalysis2 "Schaakengine #2..." 17 \
  {Start/stop  schaak-analyse programma 2}
menuText N ToolsCross "Kruistabel" 0 \
  {Toon toernooi-kruistabel voor huidige partij}
menuText N ToolsEmail "EmailBeheerder" 0 {Open/sluit het email venster}
menuText N ToolsFilterGraph "Filter grafiek" 7 \
  {Openen/sluiten grafisch filter venster}
menuText N ToolsAbsFilterGraph "Abs. Filter Grafiek" 7 {Open/sluit het filter grafiek venster voor absolute waarden}
menuText N ToolsOpReport "Openingen rapportering" 0 \
  {Genereer een openingenrapport voor de huidige stelling}
menuText N ToolsOpenBaseAsTree "Open base als boom" 0   {Open een databank en gebruik ze in een boomvenster}
menuText N ToolsOpenRecentBaseAsTree "Open een recente databank als boom" 0   {Open een recente databank en gebruik ze in een boom venster}
menuText N ToolsTracker "Stuk Spoorvolger "  0 {Open het Stuk Spoorvolger venster}
menuText N ToolsTraining "Training"  0 {Training gereedschappen (taktiek, openingen,...) }
menuText N ToolsTacticalGame "Taktische partij"  0 {Speel een taktische partij}
menuText N ToolsSeriousGame "Ernstige partij"  0 {Speel een ernstige partij}
menuText N ToolsTrainOpenings "Openingen "  0 {Repertoriumtraining}
menuText N ToolsTrainReviewGame "Herspeel Partij"  0 {Zoek de zetten gespeeld in een partij}
menuText N ToolsTrainTactics "Tactiek "  0 {Los tactische stellingen op }
menuText N ToolsTrainCalvar "Berekenen van varianten"  0 {Training in het berekenen van varianten}
menuText N ToolsTrainFindBestMove "Vind de beste zet"  0 {Vind de beste zet}
menuText N ToolsTrainFics "Speel op het internet"  0 {Speel of freechess.org}
# ====== TODO To be translated ======
menuText N ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText N ToolsBookTuning "Openingenboek afstemming " 0 {Openingenboek afstemming}
menuText N ToolsConnectHardware "Verbind Hardware" 0 {Verbind externe hardware}
menuText N ToolsConnectHardwareConfigure "Configureer..." 0 {Configureer externe hardware en verbinding}
menuText N ToolsConnectHardwareNovagCitrineConnect "Verbind Novag Citrine" 0 {Verbind Novag Citrine}
menuText N ToolsConnectHardwareInputEngineConnect "Verbind Invoer Engine" 0 {Verbind Invoer Engine (e.g. DGT)}
menuText N ToolsPInfo "Speler Informatie"  7 \
  {Open/wijzig het spelerinformatievenster}
menuText N ToolsPlayerReport "Speler Rapport ..." 3 \
  {Genereer een Speler Rapport} ;
menuText N ToolsRating "Elo Klassering geschiedenis" 0 \
  {Grafiek van de Elo Klassering van de twee spelers}
menuText N ToolsScore "Partij score" 7 \
  {Laat het partij-score venster zien}
menuText N ToolsExpCurrent "Partij exporteren" 8 \
  {Exporteer huidige partij naar een bestand}
menuText N ToolsExpCurrentPGN "Partij in PGN-formaat exporteren..." 11 \
  {Schrijf huidige partij naar PGN-bestand}
menuText N ToolsExpCurrentHTML "Partij in HTML-formaat exporteren..." 11 \
  {Schrijf huidige partij naar HTML-bestand}
menuText N ToolsExpCurrentHTMLJS "Exporteer Partij naar een HTML en JavaScript Bestand..." 15 {Schrijf de huidige partij naar een HTML en JavaScript bestand}  
menuText N ToolsExpCurrentLaTeX "Partij in LaTeX-formaat exporteren..." 11 \
  {Schrijf huidige partij naar LaTex-bestand}
menuText N ToolsExpFilter "Alle partijen in filter exporteren" 17 \
  {Exporteer alle geslecteerde partijen naar een bestand}
menuText N ToolsExpFilterPGN "Filter in PGN-formaat exporteren..." 10 \
  {Schrijf selectie naar PGN-bestand}
menuText N ToolsExpFilterHTML "Filter in HTML-formaat exporteren..." 10 \
  {Schrijf selectie naar HTML-bestand}
menuText N ToolsExpFilterHTMLJS "Exporteer Filter naar HTML en JavaScript Bestand..." 17 {Schrijf alle gefilterde partijen naar een HTML en JavaScript bestand}  
menuText N ToolsExpFilterLaTeX "Filter in LaTeX-formaat exporteren..." 10 \
  {Schrijf selectie naar LaTex-bestand}
menuText N ToolsImportOne "Een PGN partij importeren..." 4 \
  {Importeer PGN partij}
menuText N ToolsImportFile "PGN database importeren..." 4 \
  {Importeer PGN bestand}
menuText N ToolsStartEngine1 "Start engine 1" 0  {Start engine 1}
menuText N ToolsStartEngine2 "Start engine 2" 0  {Start engine 2}
# ====== TODO To be translated ======
menuText N ToolsCaptureBoard "Capture Current Board..." 5  {Save the current board as an image.}
menuText N Play "Speel" 0
menuText N CorrespondenceChess "Correspondentieschaak" 0 {Functies voor eMail en Xfcc gebaseerde correspondentieschaak}
menuText N CCConfigure "Configureer..." 0 {Configureer externe gereedschappen en algemene instellingen}
# ====== TODO To be translated ======
menuText N CCConfigRelay "Observe games..." 10 {Configure games to be observed}
menuText N CCOpenDB "Open Database..." 0 {Open de standaard correspondentieschaak database}
menuText N CCRetrieve "Haal Partijen op" 0 {Haal partijen op via externe (Xfcc-)helper}
menuText N CCInbox "Verwerk Inbox" 0 {Verwerk alle bestanden in scids Inbox}
menuText N CCSend "Stuur de Zet op" 0 {Stuur de zet op via eMail of de externe (Xfcc-)helper}
menuText N CCResign "Geef op" 0 {Geef op (niet via eMail)}
menuText N CCClaimDraw "Eis Remise" 0 {Stuur de zet op en eis remise (niet via eMail)}
menuText N CCOfferDraw "Stel Remise voor" 0 {Stuur de zet op en stel remise voor (niet via eMail)}
menuText N CCAcceptDraw "Accepteer Remise" 0 {Accepteer een remise voorstel (niet via eMail)}
menuText N CCNewMailGame "Nieuwe eMail Partij..." 0 {Start een nieuwe eMail partij}
menuText N CCMailMove "Stuur de zet op..." 0 {Stuur de zet op naar de tegenspeler via eMail}
menuText N CCGamePage "Partij Pagina..." 0 {Roep de partij op met een web browser}
menuText N CCEditCopy "Kopieer de Partijlijst naar het Clipbord" 0 {Kopieer de Partijen als CSV lijst naar het clipbord}

# Options menu:
menuText N Options "Opties" 0
menuText N OptionsBoard "Bord" 0 {Opties  Uitzicht Schaakbord} ;
menuText N OptionsBoardSize "Grootte van bord" 0 {Wijzig bord grootte}
menuText N OptionsBoardPieces "Bord Stukken Stijl" 6 \
  {Wijzig de stijl van bord en/of stukken}
menuText N OptionsBoardColors "Kleuren..." 0 {Wijzig bord kleuren}
menuText N OptionsBoardGraphics "Vakken..." 0 {Selecteer textures voor de vakken}
translate N OptionsBGW {Selecteer het texture voor de vakken}
translate N OptionsBoardGraphicsText {Selecteer graphische bestanden voor de witte en de zwarte vakken:}
menuText N OptionsBoardNames "Mijn Spelersnamen ..." 0 {Bewerk mijn spelersnamen} ;
menuText N OptionsExport "Export" 1 {Wijzig tekst export opties}
menuText N OptionsFonts "Lettertypes" 0 {Wijzig lettertype}
menuText N OptionsFontsRegular "Standaard" 0 {Wijzig het standaard lettertype}
menuText N OptionsFontsMenu "Menu" 0 {Wijzig het menu lettertype}
menuText N OptionsFontsSmall "Klein" 0 {Wijzig het kleine lettertype}
# ====== TODO To be translated ======
menuText N OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText N OptionsFontsFixed "Vaste grootte" 0 {Wijzig dit lettertype}
menuText N OptionsGInfo "Partij Informatie" 0 {Parij-informatie opties}
menuText N OptionsLanguage "Kies taal" 5 {Kies taal}
menuText N OptionsMovesTranslatePieces "Vertaal stukken" 0 {Vertaal de eerste letters van de stukken}
menuText N OptionsMovesHighlightLastMove "Markeer de laatste zet" 0 {Markeer de laatste zet}
menuText N OptionsMovesHighlightLastMoveDisplay "Toon" 0 {Toon de laatste zet markering}
menuText N OptionsMovesHighlightLastMoveWidth "Breedte" 0 {Variantdikte}
menuText N OptionsMovesHighlightLastMoveColor "Kleur" 0 {Varinatkleur}
# ====== TODO To be translated ======
menuText N OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText N OptionsMoves "Zetten" 0 {Wijzig optie voor zet-invoer}
menuText N OptionsMovesAsk "Bevestiging voor overschrijven" 0 \
  {Bevestig het overschrijven van bestaande zetten}
menuText N OptionsMovesAnimate "Stuk Animatietijd " 1 \
  {Zet animatietijd van de stukkenbewegingen} ;
menuText N OptionsMovesDelay "Tijdinstelling voor auto-spelen" 10 \
  {Stel de tijd in voor het automatisch spelen van de zetten}
menuText N OptionsMovesCoord "Zet-ingave" 0 \
  {Accepteer de volgende manier van zetten invoeren ("g1f3")}
menuText N OptionsMovesSuggest "Toon hint" 0 \
  {Schakel hints aan of uit}
menuText N OptionsShowVarPopup "Toon het varianten venster" 0 {Toon al dan niet het varianten venster} 
menuText N OptionsMovesSpace "Voeg spaties in na het nummer van de zet" 0 {Voeg spaties in na het nummer van de zet}  
menuText E OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}   
menuText N OptionsMovesKey "Auto-aanvullen" 0 \
  {Aan/uitschakelen van toetsenbordzet auto-aanvullen}
menuText N OptionsMovesShowVarArrows "Toon Pijlen voor Varianten" 0 {Zet aan/af pijlen om variantenzetten te tonen}
menuText N OptionsNumbers "Getalformaat" 5 \
  {Kies de manier waarop getallen te zien zijn}
menuText N OptionsStartup "Opstarten" 3 {Selecteer de vensters die tijdens starten geopend worden}
menuText N OptionsTheme "Theme" 0 {Verander het uitzicht van de interface}
menuText N OptionsWindows "Vensters" 0 {Venster opties}
menuText N OptionsWindowsIconify "Auto-icoon" 5 \
  {Breng alle vensters in icoonvorm als het hoofdvenster naar icoon gaat.}
menuText N OptionsWindowsRaise "Auto-voorgrond" 0 \
  {Breng sommige vensters terug op de voorgrond (bvb. voortgangsbalken) gelijk wanneer ze verdwijnen.}
menuText N OptionsSounds "Geluiden ..." 2 {Configureer zet aankondigingsgeluiden} ;
menuText N OptionsWindowsDock "Veranker de vensters" 0 {Veranker de vensters}
menuText N OptionsWindowsSaveLayout "Opmaak opslaan" 0 {Opmaak opslaan}
menuText N OptionsWindowsRestoreLayout "Opmaak herstellen" 0 {Opmaak herstellen}
menuText N OptionsWindowsShowGameInfo "Toon de informatie over de partij" 0 {Toon de informatie over de partij}
menuText N OptionsWindowsAutoLoadLayout "Auto laad eerste layout" 0 {Auto laad eerste layout bij opstarten}
menuText N OptionsToolbar "Gereedschappenbalk" 12 \
  {Weergeven/verbergen hoofdvenster gereedschappenbalk}
menuText N OptionsECO "ECO data laden..." 0 \
  {Laad het ECO classificatie bestand}
menuText N OptionsSpell "Laad spelling (namen)..." 5 \
  {Laad het Scid spellingbestand}
menuText N OptionsTable "Eindspel database laden..." 9 \
  {Kies een eindspel database, alle in de directory aanwezige worden gebruikt}
menuText N OptionsRecent "Recente bestanden..." 0 \
  {Wijzig het aantal recent gebruikte bestanden in het Bestand menu}
menuText N OptionsBooksDir "Boeken map..." 0 {Stel de map met openingsboeken in}
menuText N OptionsTacticsBasesDir "Databases map..." 0 {Stel de map met de  taktiek (training) databases in}
menuText N OptionsSave "Opties bewaren" 0 \
  "Bewaar alle instellingen in het bestand $::optionsFile"
menuText N OptionsAutoSave "Automatisch bewaren opties tijdens afsluiten" 0 \
  {Automatisch bewaren alle gewijzigde opties bij het afsluiten van Scid}

# Help menu:
menuText N Help "Help" 0
menuText N HelpContents "Inhoud" 0 {Toon de Help Inhoudstabel} ;
menuText N HelpIndex "Index" 0 {Toon de help inhouds pagina}
menuText N HelpGuide "Snelle hulp" 0 {Laat de snelle-hulp pagina zien}
menuText N HelpHints "Hints" 0 {Laat de hints-hulp pagina zien}
menuText N HelpContact "Contact-info" 0 {Laat de contact-infopagina zien}
menuText N HelpTip "Tip van de dag" 0 {Laat een handige Scid tip zien}
menuText N HelpStartup "Startvenster" 5 {Laat het startvenster zien}
menuText N HelpAbout "Over Scid" 0 {Informatie over Scid}

# Game info box popup menu:
menuText N GInfoHideNext "Verberg volgende zet" 0
menuText N GInfoMaterial "Materiaalverhouding" 0
menuText N GInfoFEN "FEN" 0
menuText N GInfoMarks "Toon gekleurde velden en pijlen. " 5
menuText N GInfoWrap "Lange regels op schermbreedte splitsen." 0
menuText N GInfoFullComment "Volledig commentaar weergeven" 10
menuText N GInfoPhotos "Toon Fotos" 5 ;
menuText N GInfoTBNothing "Eindspel Tablebases: niets" 12
menuText N GInfoTBResult  "Eindspel Tablebases: alleen resultaat" 12
menuText N GInfoTBAll "Eindspel Tablebases: resultaat en beste zetten" 19
menuText N GInfoDelete "Partij wissen/terughalen" 9
menuText N GInfoMark "Partij markeren/niet markeren" 7
menuText N GInfoInformant "Configureer informant waarden" 0

# Main windows buttons:
helpMsg N .main.fbutton.button.start {Naar begin van partij  (toets: home)}
helpMsg N .main.fbutton.button.end {Naar eind van partij  (toets: end)}
helpMsg N .main.fbutton.button.back {Een zet terug   (toets: pijl links)}
helpMsg N .main.fbutton.button.forward {Een zet vooruit  (toets: pijl rechts)}
helpMsg N .main.fbutton.button.intoVar {Naar variant  (toets: v)}
helpMsg N .main.fbutton.button.exitVar {Verlaat variant  (toets: z)}
helpMsg N .main.fbutton.button.flip {Draai bord  (toets: .)}
helpMsg N .main.fbutton.button.coords {Coordinaten aan/uit  (toets: 0)}
helpMsg N .main.fbutton.button.stm {Zet zijde-aan-zet ikoon aan ofaf} ;
helpMsg N .main.fbutton.button.autoplay {Speel zetten automatisch  (toets: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg N .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg N .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg N .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate N Back {Terug}
translate N Browse {Bladeren} ;
translate N Cancel {Annuleren}
translate N Continue {Verder gaane}
translate N Clear {Leegmaken}
translate N Close {Sluiten}
translate N Contents {Inhoud} ;
translate N Defaults {Standaard}
translate N Delete {Wis}
translate N Graph {Grafiek}
translate N Help {Help}
translate N Import {Importeren}
translate N Index {Index}
translate N LoadGame {Partij laden}
translate N BrowseGame {Door de partij bladeren}
translate N MergeGame {Partij Samenvoegen}
translate N MergeGames {Voeg Partijen Samen}
translate N Preview {Proefbeeld}
translate N Revert {Terugkeren}
translate N Save {Bewaren}
translate N Search {Zoeken}
translate N Stop {Stop}
translate N Store {Opbergen}
translate N Update {Bijwerken}
translate N ChangeOrient {Wijzigen venster orientatie}
translate N ShowIcons {Toon Ikonen} ;
translate N None {Geen}
translate N First {Eerste}
translate N Current {Huidige}
translate N Last {Laatste}

# General messages:
translate N game {Partij}
translate N games {Partijen}
translate N move {Zet}
translate N moves {Zetten}
translate N all {Alle}
translate N Yes {Ja}
translate N No {Nee}
translate N Both {Beide}
translate N King {Koning}
translate N Queen {Dame}
translate N Rook {Toren}
translate N Bishop {Loper}
translate N Knight {Paard}
translate N Pawn {Pion}
translate N White {Wit}
translate N Black {Zwart}
translate N Player {Speler}
translate N Rating {Eloklassering}
translate N RatingDiff {EloklasseringsVerschil (Wit - Zwart)}
translate N AverageRating {Gemiddelde elo rangschikking} ;
translate N Event {Evenement}
translate N Site {Plaats}
translate N Country {Land}
translate N IgnoreColors {Kleuren negeren}
translate N Date {Datum}
translate N EventDate {Datum evenement}
translate N Decade {Decennium}
translate N Year {Jaar}
translate N Month {Maand}
translate N Months {Januari Februari Maart April Mei Juni Juli Augustus September October November December}
translate N Days {Zon Maa Din Woe Don Vri Zat}
translate N YearToToday {Een jaar geleden}
translate N Result {Uitslag}
translate N Round {Ronde}
translate N Length {Lengte}
translate N ECOCode {ECO Code}
translate N ECO {ECO}
translate N Deleted {Verwijderd}
translate N SearchResults {Zoekresultaten}
translate N OpeningTheDatabase {Database aan het Openen}
translate N Database {Database}
translate N Filter {Filter}
translate N noGames {Geen partijen}
translate N allGames {Alle partijen}
translate N empty {leeg}
translate N clipbase {Klembord}
translate N score {Score}
translate N StartPos {Begin stelling}
translate N Total {Totaal}
translate N readonly {alleen-lezen}

# Standard error messages:
translate N ErrNotOpen {Deze database is niet geopend.} ;
translate N ErrReadOnly {Deze database is alleen lezen; kan niet veranderd worded.} ;
translate N ErrSearchInterrupted {Zoeken werd onderbroken; de resultaten zijn onvolledig.} ;

# Game information:
translate N twin {Dubbele partijen}
translate N deleted {Gewist}
translate N comment {Commentaar}
translate N hidden {Verborgen}
translate N LastMove {Laatste zet}
translate N NextMove {Volgende zet}
translate N GameStart {Start partij}
translate N LineStart {Start variant}
translate N GameEnd {Einde partij}
translate N LineEnd {Einde variant}

# Player information:
translate N PInfoAll {Resultaten voor <b>alle</b> partijen}
translate N PInfoFilter {Resultaten voor <b>filter</b> partijen}
translate N PInfoAgainst {Resultaten tegen}
translate N PInfoMostWhite {Meest gespeelde opening als Wit}
translate N PInfoMostBlack {Meest gespeelde opening als Zwart}
translate N PInfoRating {Geschiedenis Elo Klassering}
translate N PInfoBio {Biografie}
translate N PInfoEditRatings {Bewerk elo rangschikking} ;

# Tablebase information:
translate N Draw {Remise}
translate N stalemate {Pat}
translate N withAllMoves {met alle zetten}
translate N withAllButOneMove {alle zetten behalve n}
translate N with {met}
translate N only {alleen}
translate N lose {verliezen}
translate N loses {verliest}
translate N allOthersLose {alle overigen verliezen}
translate N matesIn {Mat in}
translate N hasCheckmated {geeft mat}
translate N longest {langste}
translate N WinningMoves {Winnende zetten} ;
translate N DrawingMoves {Remise zetten} ;
translate N LosingMoves {Verliezende zetten} ;
translate N UnknownMoves {Onbekend resultaat zetten} ;

# Tip of the day:
translate N Tip {Tip}
translate N TipAtStartup {Tip bij opstarten}

# Tree window menus:
menuText N TreeFile "BoomDataBestand" 0
menuText N TreeFileFillWithBase "Vul de Cache met DataBestand" 0 {Vul het cache bestand met alle partijen in het huidige databestand}
menuText N TreeFileFillWithGame "Vul de cache met de partij" 0 {Vul het cache bestand met het huidige speel in het huidige databestand}
menuText N TreeFileSetCacheSize "Cache grootte" 0 {Stel de grootte van het cache bestand in}
menuText N TreeFileCacheInfo "Cache info" 0 {Vraag informatie over het gebruik van de cache}
menuText N TreeFileSave " BoomData Bewaren" 0 {Bewaar de boomdata in een boomcache (.stc) bestand}
menuText N TreeFileFill "Vullen boomcache bestand" 0 \
  {Vul het boomcache bestand met algemene opening stellingen}
menuText N TreeFileBest "Lijst beste partijen" 0 {Weergeven van de lijst met beste partijen}
menuText N TreeFileGraph "Grafiek-venster" 0 \
  {Weergeven van de grafiek voor deze tak}
menuText N TreeFileCopy "Kopieer boom tekst naar klembord" 0 \
  {Kopieren van de boomstatistieken naar het klembord}
menuText N TreeFileClose "Zoekboom venster sluiten" 0 {Sluiten van het zoekboom venster}
menuText N TreeMask "Masker" 0
menuText N TreeMaskNew "Nieuw" 0 {Nieuw masker}
menuText N TreeMaskOpen "Open" 0 {Open mask}
menuText N TreeMaskOpenRecent "Open recent" 0 {Open recent masker}
menuText N TreeMaskSave "Bewaar" 0 {Bewaar het masker}
menuText N TreeMaskClose "Sluiten" 0 {Sluit het masker}
menuText N TreeMaskFillWithGame "Vullen met partij" 0 {Vul het masker met de partij}
menuText N TreeMaskFillWithBase "Vullen met databestand" 0 {Vul het masker met alle partijen in het databestand}
menuText N TreeMaskInfo "Info" 0 {Toon de statistieken voor het huidige masker}
menuText N TreeMaskDisplay "Toon masker overzicht" 0 {Toon maskerdata in boomvorm}
menuText N TreeMaskSearch "Zoek" 0 {Zoek in huidig masker}
menuText N TreeSort "Sorteren" 0
menuText N TreeSortAlpha "Alfabetisch" 0
menuText N TreeSortECO "ECO code" 0
menuText N TreeSortFreq "Frequentie" 0
menuText N TreeSortScore "Punten" 0
menuText N TreeOpt "Opties" 0
menuText N TreeOptSlowmode "Trage modus" 0 {Trage modus voor updates (hoge nauwkeurigheid)}
menuText N TreeOptFastmode "Snelle modus" 0 {Snelle modus voor updates (geen omwisselingen van zetten)}
menuText N TreeOptFastAndSlowmode "Snelle en trage modus" 0 {Eerst snelle modus en daarna trage modus voor updates}
menuText N TreeOptStartStop "Auto verversing" 0 {Zet automatische verversing van het boomvenster op/af}
menuText N TreeOptLock "Vergrendelen" 0 {Vergrendelen/Ontgrendelen van de boom bij de huidige database}
menuText N TreeOptTraining "Training" 0 {Aan/Uit zetten training modus}
menuText N TreeOptAutosave "Autom.cache-data Bewaren" 4 \
  {Automatisch bewaren van het cache bestand bij sluiten boomvenster}
menuText N TreeHelp "Help" 0
menuText N TreeHelpTree "Hulp bij zoekboom" 0
menuText N TreeHelpIndex "Index" 0
translate N SaveCache {Cache Bewaren}
translate N Training {Training}
translate N LockTree {Boom Vergrendelen}
translate N TreeLocked {Vergrendeld}
translate N TreeBest {Beste}
translate N TreeBestGames {Boom Beste partijen}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate N TreeTitleRow \
  {    Zet   ECO       Frekwentie    Score  GemElo Prest GemJaar %Remises} ;
translate N TreeTotal {TOTAAL}
translate N DoYouWantToSaveFirst {Wil u eerst de verandering bewaren?}
translate N AddToMask {Toevoegen aan het Masker}
translate N RemoveFromMask {Verwijderen uit het Masker}
translate N AddThisMoveToMask {Voeg deze zet toe aan het Masker}
translate N SearchMask {Zoek in Masker}
translate N DisplayMask {Toon Masker}
translate N Nag {Nag code}
translate N Marker {Aanwijzer}
translate N Include {Invoegen}
translate N Exclude {Weglaten}
translate N MainLine {Hoofdvariant}
translate N Bookmark {Bladwijzer}
translate N NewLine {Nieuwe variant}
translate N ToBeVerified {Na te kijken}
translate N ToTrain {Trainen}
translate N Dubious {Twijfelachtig}
translate N ToRemove {Verwijderen}
translate N NoMarker {Geen aanwijzer}
translate N ColorMarker {Kleur}
translate N WhiteMark {Wit}
translate N GreenMark {Groen}
translate N YellowMark {Geel}
translate N BlueMark {Blauw}
translate N RedMark {Rood}
translate N CommentMove {Commentaar op zet}
translate N CommentPosition {Commentaar op stelling}
translate N AddMoveToMaskFirst {Voeg de zet eerst toe aan het masker}
translate N OpenAMaskFileFirst {Open eerst een maskerbestand}
translate N Positions {Stellingen}
translate N Moves {Zetten}

# Finder window:
menuText N FinderFile "Bestand" 0
menuText N FinderFileSubdirs "Kijken in subdirectories" 0
menuText N FinderFileClose "Sluiten bestandszoeker" 0
menuText N FinderSort "Sorteren" 0
menuText N FinderSortType "Type" 0
menuText N FinderSortSize "Grootte" 0
menuText N FinderSortMod "Gewijzigd" 0
menuText N FinderSortName "Naam" 0
menuText N FinderSortPath "Pad" 0
menuText N FinderTypes "Types" 0
menuText N FinderTypesScid "Scid databases" 0
menuText N FinderTypesOld "Oud formaat Scid databases" 0
menuText N FinderTypesPGN "PGN bestanden" 0
menuText N FinderTypesEPD "EPD (boek) bestanden" 0
menuText N FinderTypesRep "Repertorium bestanden" 0
menuText N FinderHelp "Help" 0
menuText N FinderHelpFinder "Bestandszoeker Help" 0
menuText N FinderHelpIndex " Bestandszoeker Help Inhoud" 0
translate N FileFinder {Bestandszoeker}
translate N FinderDir {Folder}
translate N FinderDirs {Folders}
translate N FinderFiles {Bestanden}
translate N FinderUpDir {Hogere Folder}
translate N FinderCtxOpen {Open}
translate N FinderCtxBackup {Reservecopie}
translate N FinderCtxCopy {Copieren}
translate N FinderCtxMove {Verplaatsen}
translate N FinderCtxDelete {Verwijderen}

# Player finder:
menuText N PListFile "Bestand" 0
menuText N PListFileUpdate "Bijwerken" 0
menuText N PListFileClose "Dichtbij Speler Vinder" 0 ;
menuText N PListSort "Sorteren" 0
menuText N PListSortName "Naam" 0 ;
menuText N PListSortElo "Elo" 0
menuText N PListSortGames "Partijen" 0 ;
menuText N PListSortOldest "Oudste" 0 ;
menuText N PListSortNewest "Niewste" 0 ;

# Tournament finder:
menuText N TmtFile "Bestand" 0
menuText N TmtFileUpdate "Bijwerken" 0
menuText N TmtFileClose "Sluiten Toernooi zoeker" 0
menuText N TmtSort "Sorteren" 0
menuText N TmtSortDate "Datum" 0
menuText N TmtSortPlayers "Spelers" 0
menuText N TmtSortGames "Partijen" 0
menuText N TmtSortElo "Elo" 0
menuText N TmtSortSite "Plaats" 0
menuText N TmtSortEvent "Evenement" 1
menuText N TmtSortWinner "Winnaar" 0
translate N TmtLimit "Limiet Lijst"
translate N TmtMeanElo "Laagste gem. Elo" 
translate N TmtNone "Geen toernooien gevonden."

# Graph windows:
menuText N GraphFile "Bestand" 0
menuText N GraphFileColor "Bewaren als kleuren Postscript..." 8
menuText N GraphFileGrey "Bewaren als grijze Postscript..." 8
menuText N GraphFileClose "Venster sluiten" 0
menuText N GraphOptions "Opties" 0
menuText N GraphOptionsWhite "Wit" 0
menuText N GraphOptionsBlack "Zwart" 0
menuText N GraphOptionsBoth "Beide" 1
menuText N GraphOptionsPInfo "Speler informatie" 0
translate N GraphFilterTitle "Filtergrafiek: frequentie per 1000 partijen"
translate N GraphAbsFilterTitle "Filtergrafiek: frequentie van de partijen"
translate N ConfigureFilter {Configureer de X-as voor Jaar, Elo en Zetten}
translate N FilterEstimate "Schat"
translate N TitleFilterGraph "Scid: Filtergrafiek"

# Analysis window:
translate N AddVariation {Toevoegen variant}
translate N AddAllVariations {Voeg alle varianten toe}
translate N AddMove {Toevoegen zet}
translate N Annotate {Annotatie}
translate N ShowAnalysisBoard {Toon het analysebord}
translate N ShowInfo {Toon engine informatie}
translate N FinishGame {Beeindig de partij}
translate N StopEngine {Stop de engine}
translate N StartEngine {Start de engine}
translate N LockEngine {Fixeer de engine op de huidige stelling}
translate N AnalysisCommand {Analyse commando}
translate N PreviousChoices {Voorgaande keuzes}
translate N AnnotateTime {Geef de analysetijd in seconden per zet}
translate N AnnotateWhich {Voeg varianten toe}
translate N AnnotateAll {Voor zetten van beide zijden}
translate N AnnotateAllMoves {Annotateer alle zetten}
translate N AnnotateWhite {Alleen voor zetten door Wit}
translate N AnnotateBlack { Alleen voor zetten door Zwart}
translate N AnnotateBlundersOnly {Als de partijzet een klaarblijkelijke blunder is}
translate N AnnotateBlundersOnlyScoreChange {Blunder Analyse rapport, met scorewijziging van/naar: }
translate N BlundersThreshold {Ondergrens}
# TODO: Translate
translate N ScoreAllMoves {Waardeer alle zetten}
translate N LowPriority {Lage CPU prioriteit} ;
translate N ClickHereToSeeMoves {Klik hier om de zetten te zien}
translate N ConfigureInformant {Configureer de Informant}
translate N Informant!? {Interessante zet}
translate N Informant? {Slechte zet}
translate N Informant?? {Blunder}
translate N Informant?! {Twijfelachtige zet}
translate N Informant+= {Wit heeft een klein voordeel}
translate N Informant+/- {Wit heeft een gematigd voordeel}
translate N Informant+- {Wit heeft een beslissend voordeel}
translate N Informant++- {Deze partij kan als gewonnen beschouwd worden}
translate N Book {Openingenboek}
translate N OtherBookMoves {Boek van de tegenspeler}
translate N OtherBookMovesTooltip {Zetten waarvoor de tegenspeler een antwoord heeft}

# Analysis Engine open dialog:
translate N EngineList {Analyse Engine Lijst}
translate N EngineName {Naam}
translate N EngineCmd {Commando}
translate N EngineArgs {Parameters}
translate N EngineDir {Folder}
translate N EngineElo {Elo}
translate N EngineTime {Datum}
translate N EngineNew {Nieuw}
translate N EngineEdit {Bewerk}
translate N EngineRequired {Velden in <b>vet</b> zijn vereist; de andere facultatief}

# Stats window menus:
menuText N StatsFile "Bestand" 0
menuText N StatsFilePrint "Data als tekstbestand Bewaren..." 0
menuText N StatsFileClose "Venster sluiten" 0
menuText N StatsOpt "Opties" 0

# PGN window menus:
menuText N PgnFile "Bestand" 0
menuText N PgnFileCopy "Copieer Partij naar Klipbord" 0 ;#
menuText N PgnFilePrint "Als pgn bestand Bewaren..." 0
menuText N PgnFileClose "PGN-venster sluiten" 0
menuText N PgnOpt "Opties" 0
menuText N PgnOptColor "Instellen kleuren" 10
menuText N PgnOptShort "Korte (3 regelige) kop" 0
menuText N PgnOptSymbols "Symbolen annotaties" 10
menuText N PgnOptIndentC "Inspringen (commentaar)" 12
menuText N PgnOptIndentV "Inspringen (variant)" 12
menuText N PgnOptColumn "Kolom stijl (een zet per regel)" 0
menuText N PgnOptSpace "Spatie na zetnummer" 0
menuText N PgnOptStripMarks "Verwijder gekleurde vierkante haken codes" 1
menuText N PgnOptBoldMainLine "Gebrui Dikke Tekst voo Hoofdvariant Zetten" 4 ;
menuText N PgnColor "Kleuren" 0
menuText N PgnColorHeader "Kop..." 0
menuText N PgnColorAnno "Annotaties..." 0
menuText N PgnColorComments "Commentaar..." 0
menuText N PgnColorVars "Varianten..." 0
menuText N PgnColorBackground "Achtergrond kleur..." 0
 
menuText N PgnColorMain "Main line..." 0
 
menuText N PgnColorCurrent "Current move background..." 1
 
menuText N PgnHelp "Help" 0
menuText N PgnHelpPgn "PGN help" 0
menuText N PgnHelpIndex "Inhoud" 0
translate N PgnWindowTitle {Partij Notatie - partij %u} ;

# Crosstable window menus:
menuText N CrosstabFile "Bestand" 0
menuText N CrosstabFileText "Bewaren in tekstformaat..." 13
menuText N CrosstabFileHtml " Bewaren in HTML-formaat..." 13
menuText N CrosstabFileLaTeX " Bewaren in LaTeX-formaat..." 13
menuText N CrosstabFileClose "Kruistabel sluiten" 0
menuText N CrosstabEdit "Bewerken" 0
menuText N CrosstabEditEvent "Evenement" 0
menuText N CrosstabEditSite "Plaats" 0
menuText N CrosstabEditDate "Datum" 0
menuText N CrosstabOpt "Opties" 0
menuText N CrosstabOptAll "Gesloten" 0
menuText N CrosstabOptSwiss "Zwitsers" 0
menuText N CrosstabOptKnockout "Knockout" 0
menuText N CrosstabOptAuto "Auto" 0
menuText N CrosstabOptAges "Leeftijd in jaren" 8
menuText N CrosstabOptNats "Nationaliteiten" 1
menuText N CrosstabOptRatings "Elo" 0
menuText N CrosstabOptTitles "Titels" 0
menuText N CrosstabOptBreaks "Tie-break scores" 4
menuText N CrosstabOptDeleted "Inclusief gewiste partijen" 8
menuText N CrosstabOptColors "Kleuren (alleen bij Zwitsers)" 0
menuText N CrosstabOptColumnNumbers "Genummerde kolommen (Alleen bij gesloten tabel)" 2
menuText N CrosstabOptGroup "Punten (groep)" 0
menuText N CrosstabSort "Sorteren" 0
menuText N CrosstabSortName "Naam" 0
menuText N CrosstabSortRating "Elo" 0
menuText N CrosstabSortScore "Score" 0
menuText N CrosstabColor "Kleuren" 0
menuText N CrosstabColorPlain "Tekst" 0
menuText N CrosstabColorHyper "Hypertekst" 1
menuText N CrosstabHelp "Help" 0
menuText N CrosstabHelpCross "Help (kruistabel)" 0
menuText N CrosstabHelpIndex "Inhoud" 0
translate N SetFilter {Zet Filter}
translate N AddToFilter {Toevoegen aan selectie}
translate N Swiss {Zwitsers}
translate N Category {Categorie} ;

# Opening report window menus:
menuText N OprepFile "Bestand" 0
menuText N OprepFileText "Bewaren in tekstformaat..." 13
menuText N OprepFileHtml " Bewaren in HTML-formaat..." 13
menuText N OprepFileLaTeX " Bewaren in LaTeX-formaat..." 13
menuText N OprepFileOptions "Opties..." 0
menuText N OprepFileClose "Sluit rapportvenster" 0
menuText N OprepFavorites "Favorieten" 1 ;
menuText N OprepFavoritesAdd "Voeg Rapport toe..." 0 ;
menuText N OprepFavoritesEdit "Bewerk Favoriete Rapport..." 0 ;
menuText N OprepFavoritesGenerate "Genereer Rapporten..." 0 ;
menuText N OprepHelp "Help" 0
menuText N OprepHelpReport "Help (openingsrapport)" 0
menuText N OprepHelpIndex "Inhoud" 0

# Repertoire editor:
menuText N RepFile "Bestand" 0
menuText N RepFileNew "Nieuw" 0
menuText N RepFileOpen "Openen..." 0
menuText N RepFileSave "Bewaren..." 0
menuText N RepFileSaveAs "Bewaren als..." 5
menuText N RepFileClose "Sluit venster" 2
menuText N RepEdit "Bewerken" 0
menuText N RepEditGroup "Toevoegen Groep" 4
menuText N RepEditInclude "Toevoegen inclusief variant" 4
menuText N RepEditExclude "Toevoegen exclusief variant" 4
menuText N RepView "Bekijken" 0
menuText N RepViewExpand "Uitklappen alle groepen" 0
menuText N RepViewCollapse "Inklappen alle groepen" 0
menuText N RepSearch "Selecteren" 0
menuText N RepSearchAll "Alles van repertorium..." 0
menuText N RepSearchDisplayed "Alleen weergegeven varianten..." 0
menuText N RepHelp "Help" 0
menuText N RepHelpRep "Repertorium help" 0
menuText N RepHelpIndex "Inhoud" 0
translate N RepSearch "Zoeken repertorium"
translate N RepIncludedLines "inclusief varianten"
translate N RepExcludedLines "exclusief varianten"
translate N RepCloseDialog {Dit repetorium heeft onopgeslagen wijzigingen.

Wilt u echt doorgaan en de wijzigingen niet Bewaren?
}

# Header search:
translate N HeaderSearch {Zoek naar kop}
translate N EndSideToMove {Zijde aan zet bij partijeinde} ;
translate N GamesWithNoECO {Partijen zonder ECO?}
translate N GameLength {Lengte partij}
translate N FindGamesWith {Vind partijen met vlag}
translate N StdStart {Ab-normaal begin}
translate N Promotions {Promoties}
translate N Comments {Commentaar}
translate N Variations {Varianten}
translate N Annotations {Annotaties}
translate N DeleteFlag {Gewist-markeringen}
translate N WhiteOpFlag {Wit opening}
translate N BlackOpFlag {Zwart opening}
translate N MiddlegameFlag {Middenspel}
translate N EndgameFlag {Eindspel}
translate N NoveltyFlag {Nieuwtje}
translate N PawnFlag {Pionnenstructur}
translate N TacticsFlag {Tactiek}
translate N QsideFlag {Damevleugel}
translate N KsideFlag {Koningsvleugel}
translate N BrilliancyFlag {Briljant}
translate N BlunderFlag {Blunder}
translate N UserFlag {Gebruiker}
translate N PgnContains {PGN bevat tekst}
# ====== TODO To be translated ======
translate N Annotator {Annotator}
# ====== TODO To be translated ======
translate N Cmnts {Annotated games only}

# Game list window:
translate N GlistNumber {Nummer}
translate N GlistWhite {Wit}
translate N GlistBlack {Zwart}
translate N GlistWElo {W-Elo}
translate N GlistBElo {Z-Elo}
translate N GlistEvent {Evenement}
translate N GlistSite {Plaats}
translate N GlistRound {Ronde}
translate N GlistDate {Datum}
translate N GlistYear {Jaar}
translate N GlistEDate {Datum evenement}
translate N GlistResult {Uitslag}
translate N GlistLength {Lengte}
translate N GlistCountry {Country}
translate N GlistECO {ECO}
translate N GlistOpening {Opening}
translate N GlistEndMaterial {Eind-Material}
translate N GlistDeleted {Verwijderd}
translate N GlistFlags {Markeringen}
translate N GlistVars {Varianten}
translate N GlistComments {Commentaar}
translate N GlistAnnos {Annotaties}
translate N GlistStart {Start}
translate N GlistGameNumber {Partij nummer}
# ====== TODO To be translated ======
translate N GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate N GlistRating {Rating}
translate N GlistFindText {Tekst vinden}
translate N GlistMoveField {Zet}
translate N GlistEditField {Configuratie}
translate N GlistAddField {Voeg toe}
translate N GlistDeleteField {Verwijder}
translate N GlistWidth {Breedte}
translate N GlistAlign {Uitlijnen}
# ====== TODO To be translated ======
translate N GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate N GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate N GlistAlignC {Align: center}
translate N GlistColor {Kleuren}
translate N GlistSep {Separator}
# ====== TODO To be translated ======
translate N GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate N GlistNewSort {New}
# ====== TODO To be translated ======
translate N GlistAddToSort {Add}
# ====== TODO To be translated ======
translate N GsortSort {Sort...}
# ====== TODO To be translated ======
translate N GsortDate {Date}
# ====== TODO To be translated ======
translate N GsortYear {Year}
# ====== TODO To be translated ======
translate N GsortEvent {Event}
# ====== TODO To be translated ======
translate N GsortSite {Site}
# ====== TODO To be translated ======
translate N GsortRound {Round}
# ====== TODO To be translated ======
translate N GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate N GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate N GsortECO {ECO}
# ====== TODO To be translated ======
translate N GsortResult {Result}
# ====== TODO To be translated ======
translate N GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate N GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate N GsortCountry {Country}
# ====== TODO To be translated ======
translate N GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate N GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate N GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate N GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate N GsortComments {Comments}
# ====== TODO To be translated ======
translate N GsortVariations {Variations}
# ====== TODO To be translated ======
translate N GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate N GsortAscending {Ascending}
# ====== TODO To be translated ======
translate N GsortDescending {Descending}
# ====== TODO To be translated ======
translate N GsortAdd {Add}
# ====== TODO To be translated ======
translate N GsortStore {Store}
# ====== TODO To be translated ======
translate N GsortLoad {Load}
 
translate N GlistRemoveThisGameFromFilter  {Remove this game from Filter}
 
translate N GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
 
translate N GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
translate N GlistDeleteGame {Maak de verwijdering van deze partij ongedaan} 
translate N GlistDeleteAllGames {Verwijder alle partijen in de filter} 
translate N GlistUndeleteAllGames {Maak de verwijdering van alle partijen in de filter ongedaan} 
translate N GlistMergeGameInBase {Voeg Partij toe aan een andere database} 

# Maintenance windows
translate N DatabaseName {Naam database:}
translate N TypeIcon {Type icoon:}
translate N NumOfGames {Partijen:}
translate N NumDeletedGames {Gewiste partijen:}
translate N NumFilterGames {Partijen in selectie:}
translate N YearRange {JaarBereik:}
translate N RatingRange {EloBereik (laag/hoog):}
translate N Description {Beschrijving} ;
translate N Flag {Markering}
translate N CustomFlags {Markering volgens keus}
translate N DeleteCurrent {Wis huidige partij}
translate N DeleteFilter {Wis geselecteerde partijen}
translate N DeleteAll {Wis alle partijen}
translate N UndeleteCurrent {Haal huidige partij terug}
translate N UndeleteFilter {Haal geselecteerde partijen terug}
translate N UndeleteAll {Haal alle partijen terug}
translate N DeleteTwins {Wis doublures}
translate N MarkCurrent {Markeer huidige partij}
translate N MarkFilter {Markeer geselecteerde partijen}
translate N MarkAll {Markeer alle partijen}
translate N UnmarkCurrent {Verwijder Markering huidige partij)}
translate N UnmarkFilter {Verwijder Markering geselecteerde partijen)}
translate N UnmarkAll {Verwijder Markering alle partijen)}
translate N Spellchecking {Spellingscontrole}
translate N Players {Spelers}
translate N Events {Evenementen}
translate N Sites {Plaatsen}
translate N Rounds {Rondes}
translate N DatabaseOps {Database bewerkingen}
translate N ReclassifyGames {Partijen ECO-classificeren...}
translate N CompactDatabase {Database compact maken = optimaliseren}
translate N SortDatabase {Database sorteren}
translate N AddEloRatings {Toevoegen Elo classificatie}
translate N AutoloadGame {Auto-laden partij nummer}
translate N StripTags {Verwijder PGN labels}
translate N StripTag {Verwijder label}
translate N Cleaner {Reiniger}
translate N CleanerHelp {
De Scid Reiniger zal alle onderhoudsactiviteiten die u selecteert uit onderstaande lijst, uitvoeren op de huidige database. 
De dialogen van de huidige instellingen in de ECO classificatie en verwijderen van doublures zullen worden toegepast indien u deze functies selecteert.
}
translate N CleanerConfirm {
Eens het Reiniger onderhoud is gestart, kan dit niet worden onderbroken!

Dit kan lang duren op een grote database, afhankelijk van de geselecteerde functies en de huidige instellingen.

Weet u zeker dat u de geselecteerde onderhoudsfuncties wilt uitvoeren?
}
translate N TwinCheckUndelete {omwisselen; "u" maakt de verwijdering van beide ongedaan)}
translate N TwinCheckprevPair {Vorige paar}
translate N TwinChecknextPair {Volgende paar}
translate N TwinChecker {Scid: Tweeling partij verifieerder}
translate N TwinCheckTournament {Partijen in het toernooi:}
translate N TwinCheckNoTwin {Geen tweeling  }
translate N TwinCheckNoTwinfound {Er werd geen tweeling gedetecteerd voor deze partij.\n
Om tweelingen te laten zien met dit venster moet U eerst de "Verwijder tweeling partijen..." functie gebruiken. }
translate N TwinCheckTag {Deel etiket...}
translate N TwinCheckFound1 {Scid vond $result tweeling partijen}
translate N TwinCheckFound2 { en zet hun verwijder vlaggen}
translate N TwinCheckNoDelete {Er zijn geen partijen in deze databank om te verwijderen.}
translate N TwinCriteria1 { Uw instellingen voor het vinden van tweeling partijen kunnen mogelijkerwijs \n tot gevolg hebben dat partijen met gelijkaardige zetten ten onrechte als tweelingen worden aangegeven.}
translate N TwinCriteria2 {Het wordt aangeraden dat indien U "Nee" selecteert voor "dezelfde zetten" dat U dan "Ja" selecteert voor de kleuren, event, plaats, ronde, jaar en maand instellingen.\n Wil U doorgaan en de tweelingen toch verwijderen?}
translate N TwinCriteria3 {Het wordt aangeraden dat U "Ja" selecteert voor tenminste twee instellingen uit "zelfde plaats", "zelfde ronde" en "zelfde jaar".\n Wil U doorgaan en de tweelingen toch verwijderen?}
translate N TwinCriteriaConfirm {Scid: Bevestig tweeling instellingen}
translate N TwinChangeTag "Veranderder de volgende partij labels:\n\n"
translate N AllocRatingDescription "Dit commando zal het huidige spellingscontrole bestand gebruiken om Elo punten toe te voegen aan partijen in deze databank. Indien een speler geen huidige Elo punten heeft maar zijn/haar punten op het moment van het spel zijn aanwezig in het spellingscontrole bestand dan zullen deze punten toegevoegd worden."
translate N RatingOverride "Overschrijf bestaande, van nul verschillende, punten?"
translate N AddRatings "Voeg Elo punten to aan:"
translate N AddedRatings {Scid voegde $r Elo punten toe aan $g partijen.}
translate N NewSubmenu "Nieuw submenu"

# Comment editor:
translate N AnnotationSymbols  {Symbolen voor annotatie:}
translate N Comment {Commentaar:}
translate N InsertMark {Voeg markering toe} ;
translate N InsertMarkHelp {
Voeg toe/verwijder markering: Selecteer  kleur, type, veld.
Voeg toe/verwijder pijl: Rechtsklik twee velden.
} ;

# Nag buttons in comment editor:
translate N GoodMove {Goede zet} ;
translate N PoorMove {Slechte zet} ;
translate N ExcellentMove {Excellente zet} ;
translate N Blunder {Blunder}
translate N InterestingMove {Interessante zet} ;
translate N DubiousMove {Twijfelachtige zet} ;
translate N WhiteDecisiveAdvantage {Wit heeft beslissend voordeel} ;
translate N BlackDecisiveAdvantage {Zwart heeft beslissend voordee} ;
translate N WhiteClearAdvantage {Wit heeft duidelijk voordeel} ;
translate N BlackClearAdvantage {Zwart heeft beslissend voordeel} ;
translate N WhiteSlightAdvantage {Wit heeft licht voordeel} ;
translate N BlackSlightAdvantage {Zwart heeft licht voordee} ;
translate N Equality {Gelijk} ;
translate N Unclear {Onduidelijk} ;
translate N Diagram {Diagram} ;

# Board search:
translate N BoardSearch {Zoeken Bord}
translate N FilterOperation {Toepassen op huidige selectie:}
translate N FilterAnd {AND (Selectie beperken)}
translate N FilterOr {OR (Selectie uitbreiden)}
translate N FilterIgnore {Selectie Ongedaan maken}
translate N SearchType {Zoek type stelling:}
translate N SearchBoardExact {Exacte stelling (stukken op dezelfde velden)}
translate N SearchBoardPawns {Pionnen (hetzelfde materiaal, alle pionnen op dezelfde velden)}
translate N SearchBoardFiles {Lijnen (hetzelfde materiaal, alle pionnen op dezelfde lijnen)}
translate N SearchBoardAny {Willekeurig (hetzelfde materiaal, pionnen en stukken willekeurig)}
translate N SearchInRefDatabase { Zoek in database }
translate N LookInVars {Zoek in varianten}

# Material search:
translate N MaterialSearch {Zoeken Materiaal}
translate N Material {Materiaal}
translate N Patterns {Patroon}
translate N Zero {Niets}
translate N Any {Willekeurig}
translate N CurrentBoard {Huidige stelling}
translate N CommonEndings {Veel Voorkomende Eindspelen}
translate N CommonPatterns { Veel Voorkomende patronen}
translate N MaterialDiff {Material onevenwicht}
translate N squares {Velden}
translate N SameColor {Gelijke kleur}
translate N OppColor {Ongelijke kleur}
translate N Either {Beide}
translate N MoveNumberRange {Zet bereik }
translate N MatchForAtLeast {Op z'n minst gelijk}
translate N HalfMoves {halve zetten}

# Common endings in material search:
translate N EndingPawns {Pionnen eindspel} ;
translate N EndingRookVsPawns {Toren tegen Pion(nen)} ;
translate N EndingRookPawnVsRook {Toren en 1 Pion tegen Toren} ;
translate N EndingRookPawnsVsRook {Toren en Pionnen tegen Toren} ;
translate N EndingRooks {Toren tegen Toren Eindspel} ;
translate N EndingRooksPassedA {Toren tegen Toren met een vrije a-pion} ;
translate N EndingRooksDouble {Dubbele Toren eindspelen} ;
translate N EndingBishops {Loper tegen Loper eindspel} ;
translate N EndingBishopVsKnight {Loper tegen Paard eindspe} ;
translate N EndingKnights {Paard tegenPaard eindspel} ;
translate N EndingQueens {Dame tegen Dame eindspel} ;
translate N EndingQueenPawnVsQueen {Dame +1 pion tegen Dame} ;
translate N BishopPairVsKnightPair {Loperpaar tegen 2 Paarden middenspel} ;

# Common patterns in material search:
translate N PatternWhiteIQP {Witte Gesoleerde pion} ;
translate N PatternWhiteIQPBreakE6 {Witte Gesoleerde pion: d4-d5 doorbraak vs. e6} ;
translate N PatternWhiteIQPBreakC6 {Witte Gesoleerde pion: d4-d5 doorbraak vs. c6} ;
translate N PatternBlackIQP {Zwarte Gesoleerde pion} ;
translate N PatternWhiteBlackIQP {Witte Gesoleerde pion  vs. Zwarte Gesoleerde pion} ;
translate N PatternCoupleC3D4 {Witte hangende pionnen c3+d4 } ;
translate N PatternHangingC5D5 {Zwarte hangende pionnen c5+d5} ;
translate N PatternMaroczy {Maroczy Centrum ( Pionnen op c4 en e4)} ;
translate N PatternRookSacC3 {Torenoffer op c3} ;
translate N PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;
translate N PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;
translate N PatternLightFian {Light-Square Fianchettos (Loper-g2 vs. Loper-b7)} ;
translate N PatternDarkFian {Dark-Square Fianchettos (Loper-b2 vs. Loper-g7)} ;
translate N PatternFourFian {Four Fianchettos (Lopers op b2,g2,b7,g7)} ;

# Game saving:
translate N Today {Nu}
translate N ClassifyGame {Partij classificeren}

# Setup position:
translate N EmptyBoard {Bord leegmaken}
translate N InitialBoard {Beginstelling}
translate N SideToMove {Aan zet:}
translate N MoveNumber {Zetnummer}
translate N Castling {Rokade}
translate N EnPassantFile {En Passant lijn}
translate N ClearFen {FEN leegmaken}
translate N PasteFen {FEN plakken}
translate N SaveAndContinue {Bewaar en ga door}
translate N DiscardChangesAndContinue {Laat veranderingen vallen\nen ga door}
translate N GoBack {Ga terug}

# Replace move dialog:
translate N ReplaceMove {Zet vervangen}
translate N AddNewVar {Voeg Nieuwe Variant Toe}
translate N NewMainLine {Nieuwe Hoofd Variant}
translate N ReplaceMoveMessage {Hier is al een zet.  

U kunt hem vervangen en alle volgende zetten wissen, of uw zet toevoegen als een nieuwe variant.

(U kunt deze boodschap in de toekeomst vermijden door de optie "Zet vervangen bevestigen" uit te zetten in het menu:Zetten)}

# Make database read-only dialog:
translate N ReadOnlyDialog {Als u deze database "alleen-lezen" maakt, zijn geen veranderingen toegestaan.
Er kunnen geen partijen meer worden opgeslagen of veranderd en ook geen wis-markeringen toegevoegd of verwijderd.
Elke sortering of ECO-classificering zal tijdelijk zijn dan voor deze database.

U kunt de database weer schrijf-toegankelijk maken door hem te sluiten en weer te openen.

Wilt u echt deze database alleen-lezen maken?}

# Clear game dialog:
translate N ClearGameDialog {Deze partij is gewijzigd.

Wilt u echt doorgaan en de wijzigingen niet doorvoeren?
}

# Exit dialog:
translate N ExitDialog {Wilt u Scid werkelijk afsluiten?}
translate N ExitUnsaved {De volgende databases hebben nog onopgeslagen wijzigingen in hun partijen.  Als u nu afsluit zullen deze wijzigingen verloren gaan.}

# Import window:
translate N PasteCurrentGame {Plak huidige partij}
translate N ImportHelp1 {Invoeren of plak een PGN-formaat partij in het venster hierboven.}
translate N ImportHelp2 {Alle import-fouten worden hier weergegeven.}
translate N OverwriteExistingMoves {Overschrijf bestaande zetten ?}

# ECO Browser:
translate N ECOAllSections {alle ECO code secties}
translate N ECOSection {ECO sectie}
translate N ECOSummary {Samenvatting voor}
translate N ECOFrequency {Frequentie van subcodes voor}

# Opening Report:
translate N OprepTitle {Openings Rapportage}
translate N OprepReport {Rapportage}
translate N OprepGenerated {Samengesteld door }
translate N OprepStatsHist {Statistieken en Geschiedenis}
translate N OprepStats {Statistieken}
translate N OprepStatAll {Alle Rapportage Partijen}
translate N OprepStatBoth {Beide Spelers Elo}
translate N OprepStatSince {Sinds}
translate N OprepOldest {Oudste partijen}
translate N OprepNewest {Meest recente partijen}
translate N OprepPopular {Huidige Populariteit}
translate N OprepFreqAll {Frequentie over alle jaren: }
translate N OprepFreq1   {In het afgelopen jaar:      }
translate N OprepFreq5   {In de afgelopen 5 jaar:    }
translate N OprepFreq10  {In de afgelopen 10 jaar:    }
translate N OprepEvery {Eens per %u partijen}
translate N OprepUp {%u%s hoger dan alle jaren}
translate N OprepDown {%u%s lager dan alle jaren}
translate N OprepSame {zelfde als alle jaren}
translate N OprepMostFrequent {Meest frequente spelers}
translate N OprepMostFrequentOpponents {Frekwentste tegenstanders} ;
translate N OprepRatingsPerf {Elo Classificatie en Resultaten}
translate N OprepAvgPerf {Gemiddelde Elo Classificatie en Resultaten }
translate N OprepWRating {Witte Elo Classificatie }
translate N OprepBRating {Zwarte Elo Classificatie }
translate N OprepWPerf {Prestatie wit}
translate N OprepBPerf {Prestatie zwart}
translate N OprepHighRating {Partijen met de hoogste gemiddelde Elo Classificatie }
translate N OprepTrends {Resultaten trends}
translate N OprepResults {Resultaat lengtes en frequenties}
translate N OprepLength {Partij lengte}
translate N OprepFrequency {Frequentie}
translate N OprepWWins {Overwinningen wit:   }
translate N OprepBWins {Overwinningen zwart: }
translate N OprepDraws {Remises: }
translate N OprepWholeDB {hele database}
translate N OprepShortest {Kortste winst}
# translate N OprepShortWhite {Kortste witte overwinningen}
# translate N OprepShortBlack {Kortste zwarte overwinningen}
translate N OprepMovesThemes {Zetten en thema's}
translate N OprepMoveOrders {Zetvolgorde om rapportstelling te bereiken}
translate N OprepMoveOrdersOne \
  {Er was slechts 1 volgorde om deze stelling te bereiken:}
translate N OprepMoveOrdersAll \
  {Er waren %u zet-volgordes om deze stelling te bereiken:}
translate N OprepMoveOrdersMany \
  {Er waren %u zet-volgordes om deze stelling te bereiken. De top %u zijn:}
translate N OprepMovesFrom {Zetten vanuit de rapportstelling:}
translate N OprepMostFrequentEcoCodes {Frekwentste ECO codes} ;
translate N OprepThemes {Positionele Thema's}
translate N OprepThemeDescription {Frekwentie van  themas in de eerste %u zetten van elke partij} ;
translate N OprepThemeSameCastling {Gelijke rochades}
translate N OprepThemeOppCastling {Tegengestelde rochades}
translate N OprepThemeNoCastling {Beide zijden niet gerocheerd}
translate N OprepThemeKPawnStorm {Pionnenstorm op koningsvleugel}
translate N OprepThemeQueenswap {Dameruil}
translate N OprepThemeWIQP {Witte Gesoleerde Damepion} ;
translate N OprepThemeBIQP {Zwarte Gesoleerde Damepion} ;
translate N OprepThemeWP567 {Witte pion op de 5/6/7de rij}
translate N OprepThemeBP234 {Zwarte pion op de 2/3/4de rij}
translate N OprepThemeOpenCDE {Open c/d/e lijn}
translate N OprepTheme1BishopPair {Slechts 1 kant heeft loperpaar}
translate N OprepEndgames {Eindspelen}
translate N OprepReportGames {Rapportage partijen}
translate N OprepAllGames {Alle partijen}
translate N OprepEndClass {Materiaal classificatie van eindstellingen}
translate N OprepTheoryTable {Theorie tabel}
translate N OprepTableComment {Samengesteld uit de %u partijen met de hoogste Elo classificatie.}
translate N OprepExtraMoves {Extra zetten in theorie tabel}
translate N OprepMaxGames {Maximaal aantal partijen in theorie tabel}
translate N OprepViewHTML { HTML zicht} ;
translate N OprepViewLaTeX {LaTeX zicht} ;

# Player Report:
translate N PReportTitle {Speler Rapport} ;
translate N PReportColorWhite {met Wit} ;
translate N PReportColorBlack {mee Zwart} ;
translate N PReportMoves {na %s} ;
translate N PReportOpenings {Openingen} ;
translate N PReportClipbase {Maak klipbord leeg en copieer de aan voorwaarden vervullende partijen ernaar} ;

# Piece Tracker window:
translate N TrackerSelectSingle {Linkse muisknop selecteert dit stuk.}
translate N TrackerSelectPair { Linkse muisknop selecteert dit stuk; de rechtermuisknop selecteert zijn buur.}
translate N TrackerSelectPawn { Linkse muisknop selcteert deze pion; ; de rechtermuisknop selecteert alle 8 pionnen.}
translate N TrackerStat {Statistiek}
translate N TrackerGames {% partijen met zet naar dit veld.}
translate N TrackerTime {% keer op ieder veld.}
translate N TrackerMoves {Zetten}
translate N TrackerMovesStart {Voer de zet in waar de Spoorvolger moet beginnen.}
translate N TrackerMovesStop { Voer de zet in waar de Spoorvolger moet stoppen.}

# Game selection dialogs:
translate N SelectAllGames {Alle partijen in de database}
translate N SelectFilterGames {Alleen partijen uit selectiefilter}
translate N SelectTournamentGames {Alleen partijen in huidig toernooi}
translate N SelectOlderGames {Alleen oudere partijen}

# Delete Twins window:
translate N TwinsNote {Om een dubbele partij te zijn moet deze minimaal dezelfde twee spelers en de onderstaande te selecteren criteria bevatten. Bij vondst van twee dubbele partijen wordt de kortste verwijderd. Hint: Controleer de database op spelfouten voordat doublures worden verwijderd. Dit verhoogt de kans op vinden van dubbele partijen. }
translate N TwinsCriteria {Criteria: Dubbele partijen moeten hebben...}
translate N TwinsWhich {Onderzoek welke partijen}
translate N TwinsColors {Spelers dezelfde kleur?}
translate N TwinsEvent {Hetzelfde evenement?}
translate N TwinsSite {Dezelfde lokatie?}
translate N TwinsRound {Dezelfde ronde?}
translate N TwinsYear {Hetzelfde jaar?}
translate N TwinsMonth {Dezelfde maand?}
translate N TwinsDay {Dezelfde dag?}
translate N TwinsResult {Hetzelfde resultaat?}
translate N TwinsECO {Dezelfde ECO code?}
translate N TwinsMoves {Dezelfde zetten?}
translate N TwinsPlayers {Vergelijken speler namen:}
translate N TwinsPlayersExact {Exacte overeenkomst}
translate N TwinsPlayersPrefix {Alleen eerste 4 letters}
translate N TwinsWhen {Wanner doublures verwijderen}
translate N TwinsSkipShort {Negeer alle partijen korter dan 5 zetten?}
translate N TwinsUndelete {Haal alle voor wissen gemarkeerde partijen eerst terug?}
translate N TwinsSetFilter {Selecteer alle verwijderde dubbele partijen?}
translate N TwinsComments {Altijd partijen met commentaar bewaren?}
translate N TwinsVars {Altijd partijen met varianten bewaren?}
translate N TwinsDeleteWhich {Welke partij wissen:}
translate N TwinsDeleteShorter {Kortste partij}
translate N TwinsDeleteOlder {Laagste partijnummer}
translate N TwinsDeleteNewer {Hoogste partijnummer}
translate N TwinsDelete {Verwijder partijen}

# Name editor window:
translate N NameEditType {Type naam om te wijzigen}
translate N NameEditSelect {Partijen om te wijzigen}
translate N NameEditReplace {Vervangen}
translate N NameEditWith {met}
translate N NameEditMatches {Gelijken: Druk Ctrl+1 tot Ctrl+9 om te selecteren}
# ====== TODO To be translated ======
translate N CheckGames {Check games}
# ====== TODO To be translated ======
translate N CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate N CheckAll {All games}
# ====== TODO To be translated ======
translate N CheckSelectFilterGames {Only games in filter}

# Classify window:
translate N Classify {Classificeren}
translate N ClassifyWhich {ECO-Classificatie: welke partijen}
translate N ClassifyAll {Alle partijen (overschrijven oude ECO codes)}
translate N ClassifyYear {Alle partijen gespeeld in het afgelopen jaar}
translate N ClassifyMonth {Alle partijen gespeeld in de afgelopen maand}
translate N ClassifyNew {Alleen partijen zonder ECO code}
translate N ClassifyCodes {ECO Codes om te gebruiken}
translate N ClassifyBasic {Alleen basis codes ("B12", ...)}
translate N ClassifyExtended {Scid extenties ("B12j", ...)}

# Compaction:
translate N NameFile {Namen Bestand}
translate N GameFile {Partijen Bestand}
translate N Names {Namen}
translate N Unused {Ongebruikt}
translate N SizeKb {Grootte (Kb)}
translate N CurrentState {Huidige toestand}
translate N AfterCompaction {Na comprimeren}
translate N CompactNames {Gecomprimeerde namen bestand}
translate N CompactGames {Gecomprimeerd partijen bestand}
translate N NoUnusedNames "Er zijn geen ongebruikte namen dus het naambestand is reeds volledig gecomprimeerd."
translate N NoUnusedGames "Het partijen bestand is reeds volledig gecomprimeerd."
translate N NameFileCompacted {Het namen bestand voor de databank "[file tail [sc_base filename]]" werd gecomprimeerd.}
translate N GameFileCompacted {Het namen bestand voor de databank "[file tail [sc_base filename]]" werd comprimeerd.}

# Sorting:
translate N SortCriteria {Criteria}
translate N AddCriteria {Toevoegen criteria}
translate N CommonSorts {Algemene sorteringen}
translate N Sort {Sorteren}

# Exporting:
translate N AddToExistingFile {Toevoegen partijen aan bestaand bestand?}
translate N ExportComments {Exporteren commentaar?}
translate N ExportVariations {Exporteren varianten?}
translate N IndentComments {Inspringen commentaar?}
translate N IndentVariations {Inspringen varianten?}
translate N ExportColumnStyle {Kolomstijl (een zet per regel)?}
translate N ExportSymbolStyle {Symbolische annotatie stijl:}
translate N ExportStripMarks {Wis vierkante haken/pijlen markeer codes uit de commentaar?}

# Goto game/move dialogs:
translate N LoadGameNumber {Geef het nummer van de te laden partij:}
translate N GotoMoveNumber {Ga naar zetnummer:}

# Copy games dialog:
translate N CopyGames {Kopiren partijen}
translate N CopyConfirm {
 Wilt u echt kopieren
 de [::utils::thousands $nGamesToCopy] geselecteerde partijen
 van database "$fromName"
 naar database "$targetName"?
}
translate N CopyErr {Kan partijen niet kopieren}
translate N CopyErrSource {de bron database}
translate N CopyErrTarget {de doel database}
translate N CopyErrNoGames {heeft geen partijen in het filter}
translate N CopyErrReadOnly {is alleen-lezen}
translate N CopyErrNotOpen {is niet geopend}

# Colors:
translate N LightSquares {Lichte velden}
translate N DarkSquares {Donkere velden}
translate N SelectedSquares {Geselecteerde velden}
translate N SuggestedSquares {Zetsuggestie velden}
translate N WhitePieces {Witte stukken}
translate N BlackPieces {Zwarte stukken}
translate N WhiteBorder {Witte rand}
translate N BlackBorder {Zwarte rand}

# Novelty window:
translate N FindNovelty {Vind Nieuwtje}
translate N Novelty {Nieuwtje}
translate N NoveltyInterrupt {Zoeken nieuwtje onderbroken}
translate N NoveltyNone {In deze partij is geen nieuwtje gevonden}
translate N NoveltyHelp {
Scid zal de eerste zet vinden in de huidige partij, waarna een stelling ontstaat die nog niet was gevonden in de database of in het ECO openingsboek.
}

# Sounds configuration:
translate N SoundsFolder {Geluidsbestanden Map} ;
translate N SoundsFolderHelp {De map moet de bestanden King.wav, a.wav, 1.wav, enz. bevatten} ;
translate N SoundsAnnounceOptions {Zet Aankondigingen Opties} ;
translate N SoundsAnnounceNew {Kondig nieuwe zetten aan als ze gedaan worden} ;
translate N SoundsAnnounceForward {Kondig  aan als n zet vooruit gedaan wordt} ;
translate N SoundsAnnounceBack {Kondig  aan als n zet terug gedaan of genomen wordt} ;

# Upgrading databases:
translate N Upgrading {Bijwerken}
translate N ConfirmOpenNew {
Dit is een oud formaat (Scid 3) database welke in Scid 4 niet kan worden geopend. Maar een nieuwe versie (Scid 4) is reeds aangemaakt.

Wilt u de database in het nieuwe formaat openen?
}
translate N ConfirmUpgrade {
Dit is een oud formaat (Scid 3) database. Een versie in het nieuwe formaat moet worden gemaakt, voordat het in Scid 4 kan worden gebruikt.

Bijwerken creert een nieuwe versie van de database.

Dit kan enige tijd duren, maar het hoeft slechts eenmalig plaats te vinden. U kunt het afbreken indien het te lang duurt.

Wilt u de database nu bijwerken?
}

# Recent files options:
translate N RecentFilesMenu {Aantal recente bestanden in Bestand menu}
translate N RecentFilesExtra {Aantal recente bestand in extra submenu}

# My Player Names options:
translate N MyPlayerNamesDescription {Voeg hieronder een lijst met voorkeur spelernamen in, 1 speler per regel. Jokers (bvb "?" voor elke letter, "*" voor een reeks letters) zijn toegelaten.
Telkens een partij uit de lijst word geladen, zal het schaakbord worden gedraaid indien nodig om de partij vanuit die speler zijn perspektief te tonen.
} ;

translate N showblunderexists {toon dat er een blunder is}
translate N showblundervalue {toon blunder waarde}
translate N showscore {toon score}
translate N coachgame {coach partij}
translate N configurecoachgame {configureer coach partij}
translate N configuregame {Partij instellingen}
translate N Phalanxengine {Phalanx engine}
translate N Coachengine {Coach machiee}
translate N difficulty {moeilijkheid}
translate N hard {erg moeilijk}
translate N easy {gemakkelijk}
translate N Playwith {Speel met}
 
translate N white {wit}
 
translate N black {zwart}
 
translate N both {beide}
 
translate N Play {Spel}
 
translate N Noblunder {Geen blunder}
 
translate N blunder {Blunder}
 
translate N Noinfo {-- Geen info --}
translate N PhalanxOrTogaMissing {Phalanx of Toga werden niet gevonden}
 
 
 
translate N moveblunderthreshold {zet is blunder als het verlies groter is dan}
 
translate N limitanalysis {limiet engine analyse tijd}
 
translate N seconds {seconden}
 
translate N Abort {Breek af}
translate N Resume {Herneem}
 
translate N OutOfOpening {Uit de opening}
 
translate N NotFollowedLine {Je volgde de variant niet}
 
translate N DoYouWantContinue {Wil je verder gaan?}
translate N CoachIsWatching {De coach kijkt toe}
translate N Ponder {Altijd denken}
translate N LimitELO {Beperk ELO sterkte}
translate N DubiousMovePlayedTakeBack {Twijfelachtige zet gespeeld. Wil je terugnemen ?}
translate N WeakMovePlayedTakeBack {Zwakke zet gespeeld, wil je terugnemen ?}
translate N BadMovePlayedTakeBack {Slechte zet gespeeld, wil je terugnemen ?}
 
translate N Iresign {Ik geef op}
 
translate N yourmoveisnotgood {Je zet is niet goed}
 
translate N EndOfVar {Eind van variant}
 
translate N Openingtrainer {Opening trainer}
 
translate N DisplayCM {Toon kandidaat zetten}
 
translate N DisplayCMValue {Toon waarde kandidaat zetten}
translate N DisplayOpeningStats {Toon statistieken}
translate N ShowReport {Toon het rapport}
translate N NumberOfGoodMovesPlayed {gespeelde goede zetten}
translate N NumberOfDubiousMovesPlayed {gespeelde twijfelachtige zetten}
translate N NumberOfMovesPlayedNotInRepertoire {gespeelde zetten niet in het repertorium}
translate N NumberOfTimesPositionEncountered {aantal keer dat deze stelling voorkwam}
 
translate N PlayerBestMove  {Laat alleen beste zetten toe}
 
translate N OpponentBestMove {Tegenstander speelt beste zetten}
 
translate N OnlyFlaggedLines {Enkel gemarkeerde varianten}
translate N resetStats {Herstart de statistieken}
 
translate N Repertoiretrainingconfiguration {Repertorium training configuratie}
 
translate N Loadingrepertoire {Repertorium Laden}
 
translate N Movesloaded {Zetten geladen}
 
translate N Repertoirenotfound {Repertorium niet gevonden}
 
translate N Openfirstrepertoirewithtype {Open eerste repertorium database met ikoon/type aan rechterzijde gezet}
 
translate N Movenotinrepertoire {Zet niet in Repertorium}
translate N PositionsInRepertoire {Stellingen in het repertorium}
translate N PositionsNotPlayed {Niet gespeelde stellingen}
translate N PositionsPlayed {Gespeelde stellingen}
translate N Success {Succes}
translate N DubiousMoves {Twijfelachtige zetten}
translate N OutOfRepertoire {Uit het repertorium}
  
translate N ConfigureTactics {Configureer takiek}
 
translate N ResetScores {Initialiseer scores}
 
translate N LoadingBase {Laad database}
 
translate N Tactics {Taktiek}
 
translate N ShowSolution {Toon oplossing}
translate N NextExercise {Volgende oefening}
translate N PrevExercise {Voorgaande oefening}
translate N StopTraining {Stop training}
 
translate N Next {Volgende}
 
translate N ResettingScore {Initialiseer score}
 
translate N LoadingGame {Laad partij}
 
translate N MateFound {Mat gevonden}
 
translate N BestSolutionNotFound {Beste oplossing NIET gevonden!}
 
translate N MateNotFound {Mat NIET gevonden}
 
translate N ShorterMateExists {Korter mat bestaat}
 
translate N ScorePlayed {Score gespeeld}
 
translate N Expected {verwacht}
 
translate N ChooseTrainingBase {Kies training base}
 
translate N Thinking {Denkend}
 
translate N AnalyzeDone {Analyse gedaan}
 
translate N WinWonGame {Win gewonnen partij}
 
translate N Lines {Varianten}
 
translate N ConfigureUCIengine {Configureer UCI engine}
 
translate N SpecificOpening {Specifieke opening}
translate N StartNewGame {Start nieuwe partij}
translate N FixedLevel {Vast niveau}
translate N Opening {Opening}
translate N RandomLevel {Willekeurig niveau}
translate N StartFromCurrentPosition {Start vanaf de huidige stelling}
translate N FixedDepth {Vaste diepte}
translate N Nodes {Knooppunten} 
translate N Depth {Diepte}
translate N Time {Tijd} 
translate N SecondsPerMove {Seconden per zet}
translate N Engine {Engine}
translate N TimeMode {Tijd methode}
translate N TimeBonus {Tiid + bonus}
translate N TimeMin {min}
translate N TimeSec {sec}
 
translate N AllExercisesDone {Alle oefeningen gedaan}
 
translate N MoveOutOfBook {Zet buiten boek}
 
translate N LastBookMove {Laatste zet boek}
 
translate N AnnotateSeveralGames {Becommentarieer verschillende partijen \n van huidig tot :}
 
translate N FindOpeningErrors {Vind openingsfouten}
translate N MarkTacticalExercises {Markeer de tactische oefeningen}
 
translate N UseBook {Gebruik boek}
 
translate N MultiPV {Meerder varianten}
 
translate N Hash {Hash Geheugentabel}
 
translate N OwnBook {Gebruik engine boek}
 
translate N BookFile {Opening boek}
 
translate N AnnotateVariations {Becommentarieer varianten}
translate N ShortAnnotations {Korte commentaren}
translate N addAnnotatorTag {Voeg een commentaar label toe}
translate N AddScoreToShortAnnotations {Voeg de score toe aan de korte commentaren}
 
translate N Export {Export}
 
translate N BookPartiallyLoaded {Boek gedeeltelijk geladen}
translate N Calvar {Berekening van de varianten}
translate N ConfigureCalvar {Configuratie}
 
 
translate N Reti {Reti}
 
translate N English {Engels}
 
translate N d4Nf6Miscellaneous {1.d4 Nf6 Verscheidene}
 
translate N Trompowsky {Trompowsky}
 
translate N Budapest {Boedapest}
 
translate N OldIndian {Oud Indisch}
 
translate N BenkoGambit {Benko Gambiet}
 
translate N ModernBenoni {Moderne Benoni}
 
translate N DutchDefence {Dutch Defence}
 
translate N Scandinavian {Scandinavian}
 
translate N AlekhineDefence {Alechin Verdediging}
 
translate N Pirc {Pirc}
 
translate N CaroKann {Caro-Kann}
 
translate N CaroKannAdvance {Caro-Kann Doorschuif}
 
translate N Sicilian {Siciliaans}
 
translate N SicilianAlapin {Siciliaans Alapin}
 
translate N SicilianClosed {Siciliaans Gesloten}
 
translate N SicilianRauzer {Siciliaans Rauzer}
 
translate N SicilianDragon {Siciliaans Draak}
 
translate N SicilianScheveningen {Siciliaans Scheveningen}
 
translate N SicilianNajdorf {Siciliaans Najdorf}
 
translate N OpenGame {Open Spel}
 
translate N Vienna {Weens}
 
translate N KingsGambit {Konings Gambiet}
 
translate N RussianGame {Russisch}
 
translate N ItalianTwoKnights {Italiaans/Tweepaardenspel}
 
translate N Spanish {Spaans}
 
translate N SpanishExchange {Spaans Ruil}
 
translate N SpanishOpen {Spaans Open}
 
translate N SpanishClosed {Spaans Gesloten}
 
translate N FrenchDefence {Frans}
 
translate N FrenchAdvance {Frans Doorschuif}
 
translate N FrenchTarrasch {Frans Tarrasch}
 
translate N FrenchWinawer {Frans Winawer}
 
translate N FrenchExchange {Frans Ruil}
 
translate N QueensPawn {Damepion}
 
translate N Slav {Slavisch}
 
translate N QGA {Aangenomen Damegambiet}
 
translate N QGD {Damegambiet}
 
translate N QGDExchange {Damegambiet Ruil}
 
translate N SemiSlav {Half-Slavisch}
 
translate N QGDwithBg5 {Damegambiet met Lg5}
 
translate N QGDOrthodox {Damegambiet Orthodox}
 
translate N Grunfeld {Grnfeld}
 
translate N GrunfeldExchange {Grnfeld Ruil}
 
translate N GrunfeldRussian {Grnfeld Russisch}
 
translate N Catalan {Catalaans}
 
translate N CatalanOpen {Catalaans Open}
 
translate N CatalanClosed {Catalaans Gesloten}
 
translate N QueensIndian {Dameindisch}
 
translate N NimzoIndian {Nimzo-Indisch}
 
translate N NimzoIndianClassical {Nimzo-Indisch Klassiek Dc2}
 
translate N NimzoIndianRubinstein {Nimzo-Indisch Rubinstein}
 
translate N KingsIndian {Koningsindisch}
 
translate N KingsIndianSamisch {Koningsindisch Smisch}

translate N KingsIndianMainLine {Koningsindisch Hoofdvariant}
translate N ConfigureFics {Configureer FICS}
translate N FICSGuest {Login als Gast}
translate N FICSServerPort {Server poort}
translate N FICSServerAddress {IP Addres}
translate N FICSRefresh {Ververs}
translate N FICSTimesealPort {Tijdsoverschrijdingspoort}
translate N FICSSilence {Stilte}
translate N FICSOffers {Biedt aan}
translate N FICSConsole {Console}
translate N FICSGames {Partiejen}
translate N FICSUnobserve {Stop gadeslaan partij}
translate N FICSProfile {Toon jouw geschiedenis en profiel}
translate N FICSRelayedGames {Doorgezonden partijen}
translate N FICSFindOpponent {Zoek opponent}
translate N FICSTakeback {Terugnemen}
translate N FICSTakeback2 {Terugnemen 2}
translate N FICSInitTime {Initile tijd (min)}
translate N FICSIncrement {Toename (sec)}
translate N FICSRatedGame {De Betreffende Partij}
translate N FICSAutoColour {Automatisch}
translate N FICSManualConfirm {Bevestig manueel}
translate N FICSFilterFormula {Filter met fromule}
translate N FICSIssueSeek {Zoek uitdager}
translate N FICSChallenge {Uitdagen}
translate N FICSAccept {Aanvaard}
translate N FICSDecline {weiger}
translate N FICSColour {Kleur}
translate N FICSSend {Zend}
translate N FICSConnect {Verbind}
translate N FICSdefaultuservars {Gebruik standaard waarden}
translate N FICSObserveconfirm {Wil je de partij gadeslaan}
# ====== TODO To be translated ======
translate N FICSpremove {Enable premove}
translate N GameReview {Partij herbekijken}
translate N GameReviewTimeExtended {Tijd overschreden}
translate N GameReviewMargin {Fout marge}
translate N GameReviewAutoContinue {Auto vervolg als de zet juist is}
translate N GameReviewReCalculate {Gebruik verlengde tijd}
translate N GameReviewAnalyzingMovePlayedDuringTheGame {Analyseer de gespeelde zet tijdens de partij}
translate N GameReviewAnalyzingThePosition {Analyseer de stelling}
translate N GameReviewEnterYourMove {Voer je zet in}
translate N GameReviewCheckingYourMove {Controle van je zet}
translate N GameReviewYourMoveWasAnalyzed {Je zet werd geanalyseerd}
translate N GameReviewYouPlayedSameMove {Je speelde dezelfde zet als in de partij}
translate N GameReviewScoreOfYourMove {Score van je zet}
translate N GameReviewGameMoveScore {Partijzet score}
translate N GameReviewEngineScore {Score van engine}
translate N GameReviewYouPlayedLikeTheEngine {Je speelde zoals de engine}
translate N GameReviewNotEngineMoveButGoodMove {Geen engine zet maar ook goed}
translate N GameReviewMoveNotGood {Deze zet is niet goed, de score is}
translate N GameReviewMovesPlayedLike {Zetten gespeeld zoals}
translate N GameReviewMovesPlayedEngine {Zetten gespeeld zoals de engine}
translate N CCDlgConfigureWindowTitle {Configureer Correspondentie Schaak}
translate N CCDlgCGeneraloptions {Algemene Opties}
translate N CCDlgDefaultDB {Default Databank:}
translate N CCDlgInbox {Inbox (pad):}
translate N CCDlgOutbox {Outbox (pad):}
translate N CCDlgXfcc {Xfcc Configuratie:}
translate N CCDlgExternalProtocol {Externe Protocol Verwerker (b.v. Xfcc)}
translate N CCDlgFetchTool {Verwerf Tool:}
translate N CCDlgSendTool {Zend Tool:}
translate N CCDlgEmailCommunication {eMail Communicatie}
translate N CCDlgMailPrg {Mail programma:}
translate N CCDlgBCCAddr {(B)CC Address:}
translate N CCDlgMailerMode {Mode:}
translate N CCDlgThunderbirdEg {b.v. Thunderbird, Mozilla Mail, Icedove...}
translate N CCDlgMailUrlEg {b.v. Evolution}
translate N CCDlgClawsEg {b.v Sylpheed Claws}
translate N CCDlgmailxEg {b.v. mailx, mutt, nail...}
translate N CCDlgAttachementPar {Aanhangsel parameter:}
translate N CCDlgInternalXfcc {Gebruik interne Xfcc ondersteuning}
translate N CCDlgConfirmXfcc {Bevestig de zetten}
translate N CCDlgSubjectPar {Onderwerp parameter:}
translate N CCDlgDeleteBoxes {Lege In-/Uitbox}
translate N CCDlgDeleteBoxesText {Wil je echt de  In- and Uitbox mappen voor Correspondentieschaak ledigen? Dit vereist een nieuwe synchronisatie om de laatste staat van je partijen te tonen.}
translate N CCDlgConfirmMove {Bevestig zet}
translate N CCDlgConfirmMoveText {Als je bevestigt zal volgende zet en commentaar naar de server gestuurd worden:}
translate N CCDlgDBGameToLong {Onverenigbare Hoofdvariant}
translate N CCDlgDBGameToLongError {De hoofdvariant in jouw database is langer dan de partij in je Inbox. Als de Inbox huidige partijen bevat bvb. vlak na een synchronisatie, dan werden enkele verkeerde zetten toegevoegd aan de hoofdvariant.\nIn dit geval verkort de hoofdvariant tot (max) zetten\n}
translate N CCDlgStartEmail {Start een nieuwe eMail partij}
translate N CCDlgYourName {Uw Naam:}
translate N CCDlgYourMail {Uw eMail Addres:}
translate N CCDlgOpponentName {Naam van de tegenstander:}
translate N CCDlgOpponentMail {EMail Addres van de tegenstander:}
translate N CCDlgGameID {Game ID (uniek):}
translate N CCDlgTitNoOutbox {Scid: Correspondentie Schaak Outbox}
translate N CCDlgTitNoInbox {Scid: Correspondentie Schaak Inbox}
translate N CCDlgTitNoGames {Scid: Geen Correspondentie Schaak partijen}
translate N CCErrInboxDir {Correspondentie Schaak inbox folder:}
translate N CCErrOutboxDir {Correspondentie Schaak outbox folder:}
translate N CCErrDirNotUsable {dit bestaat niet of is niet toegankelijk!\nVerifieer en corrigeer de instellingen.}
translate N CCErrNoGames {dit bevat geen partijen!\nHaal ze alstublieft eerst op.}
translate N CCDlgTitNoCCDB {Scid: No Correspondentie Databank}
translate N CCErrNoCCDB {Er werd geen databank van type 'Correspondentie' geopend. U moet er eerst een openen alvorens de correspondentie schaak functies te gebruiken.}
translate N CCFetchBtn {Haal de partijen van de server en verwerk de Inbox}
translate N CCPrevBtn {Ga naar de vorige partij}
translate N CCNextBtn {Ga naar de volgende}
translate N CCSendBtn {Stuur de zet op}
translate N CCEmptyBtn {Ledig In- en Outbox}
translate N CCHelpBtn {Hulp over iconen en status indicatoren.\nVoor algemen hulp: druk F1!}
translate N CCDlgServerName {Server Naam:}
translate N CCDlgLoginName  {Login Naam:}
translate N CCDlgPassword   {Paswoord:}
translate N CCDlgURL        {Xfcc-URL:}
translate N CCDlgRatingType {Klassering Type:}
translate N CCDlgDuplicateGame {Niet-unieke partij ID}
translate N CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
translate N CCDlgSortOption {Rangschikken:}
translate N CCDlgListOnlyOwnMove {De enige partijen waarvan ik de zet heb}
translate N CCOrderClassicTxt {Plaats, Wedstrijd, Ronde, Resultaat, Wit, Zwart}
translate N CCOrderMyTimeTxt {Mijn klok}
translate N CCOrderTimePerMoveTxt {Tijd per zet tot de volgende tijdscontrole}
translate N CCOrderStartDate {Start datum}
translate N CCOrderOppTimeTxt {Tegenstander Klok}
# ====== TODO To be translated ======
translate N CCDlgConfigRelay {Observe games}
# ====== TODO To be translated ======
translate N CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate N ExtHWConfigConnection {Configureer externe hardware}
translate N ExtHWPort {Poort}
translate N ExtHWEngineCmd {Engine commando}
translate N ExtHWEngineParam {Engine parameters}
translate N ExtHWShowButton {Toon de knop}
translate N ExtHWHardware {Hardware}
translate N ExtHWNovag {Novag Citrine}
translate N ExtHWInputEngine {Invoer Engine}
translate N ExtHWNoBoard {Geen bord}
translate N NovagReferee {Scheidsrechter}
translate N IEConsole {Invoer Engine Console}
translate N IESending {Zetten verzonden voor}
translate N IESynchronise {Synchroniseer}
translate N IERotate  {Roteer}
translate N IEUnableToStart {De Input engine start niet:}
translate N DoneWithPosition {Klaar met deze stelling}
translate N Board {Bord}
translate N showGameInfo {Toon de partij informatie}
translate N autoResizeBoard {Verander bord automatisch van grootte}
translate N DockTop {Zend naar eeste plaats}
translate N DockBottom {Zend naar laatste plaats}
translate N DockLeft {Zend naar links}
translate N DockRight {Zend naar rechts}
translate N Undock {Undock}
translate N ChangeIcon {Verander ikoon...}
}
# End of nederlan.tcl
# norsk.tcl
# Text for menu names and status bar help messages in Norwegian.
# First created for Scid 3.2.beta2 by morten.skarstad@sapphire.no.
# Edited for Scid 3.2.beta4
# Thanks to Martin Skjldebrand, swedish.tcl was of great help to me.

addLanguage O Norsk 1 ;#iso8859-1

proc setLanguage_O {} {

# File menu:
menuText O File "Fil" 0
menuText O FileNew "Ny..." 0 {Lag en ny Scid-database}
menuText O FileOpen "pne..." 0 {pne en Scid-database}
menuText O FileClose "Lukk" 0 {Lukk aktiv Scid-database}
menuText O FileFinder "Sk" 0 {pne skevinduet}
menuText O FileBookmarks "Bokmerker" 0 {Bokmerkemeny (snarvei: Ctrl+B)}
menuText O FileBookmarksAdd "Legg til bokmerke" 0 \
  {Sett bokmerke til nvrende database, parti og stilling}
menuText O FileBookmarksFile "Lagre bokmerke" 0 \
  {Lagre et bokmerke for nvrende database, parti og stilling}
menuText O FileBookmarksEdit "Ordne bokmerker" 0 \
  {Vedlikehold av bokmerkene}
menuText O FileBookmarksList "Vis kataloger som enkel liste" 24 \
  {Vis bokmerker som liste, ikke undermenyer}
menuText O FileBookmarksSub "Vis kataloger som undermenyer" 18 \
  {Vis bokmerke-katalogene som undermenyer, ikke liste}
menuText O FileMaint "Vedlikehold" 0 {Verkty for  vedlikeholde Scid-databasen}
menuText O FileMaintWin "Vedlikeholdsvindu" 0 \
  {pne/lukk Scids vedlikeholdsvindu}
menuText O FileMaintCompact "Komprimer database..." 0 \
  {Sletter ubrukte partier og navn}
menuText O FileMaintClass "ECO-klassifiser partier..." 0 \
  {Regn om ECO-koden for alle partier}
menuText O FileMaintSort "Sorter database..." 0 \
  {Sorter alle partier i databasen}
menuText O FileMaintDelete "Slett duplikater..." 6 \
  {Finner like partier og merker en av dem for sletting}
menuText O FileMaintTwin "Duplikatsjekkvindu" 1 \
  {pne/oppdatere duplikatsjekkvinduet}
menuText O FileMaintName "Navnestaving" 0 {Redigering og stavekontroll av navn}
menuText O FileMaintNameEditor "Navneredigering" 5 \
  {pne/lukk vinduet for navneredigering}
menuText O FileMaintNamePlayer "Kontroller navn..." 0 \
  {Sammenlign navn med stavekontroll-filen}
menuText O FileMaintNameEvent "Kontroller anledninger..." 11 \
  {Sammenlign anledninger med stavekontroll-filen}
menuText O FileMaintNameSite "Kontroller stedsnavn..." 12 \
  {Sammenlign stedsnavn med stavekontroll-filen}
menuText O FileMaintNameRound "Kontroller runde-navn..." 11 \
  {Sammenlign rundenavn med stavekontroll-filen}
menuText O FileReadOnly "Skrivebeskytt..." 6 \
  {Hindrer endringer p databasen}
menuText O FileSwitch "Switch to database" 0 \
  {Switch to a different opened database} ;# ***
menuText O FileExit "Avslutt" 0 {Avslutt Scid}
# ====== TODO To be translated ======
menuText O FileMaintFixBase "Fix corrupted base" 0 {Try to fix a corrupted base}

# Edit menu:
menuText O Edit "Rediger" 0
menuText O EditAdd "Legg til variasjon" 0 {Legg til en variasjon av dette trekket i partiet}
menuText O EditDelete "Slett variasjon" 0 {Slett en variasjon av dette trekket}
menuText O EditFirst "Flytt variasjon verst" 0 \
  {Gjr variasjonen til den verste p listen}
menuText O EditMain "Gjr variasjon til hovedlinje" 0 \
  {Gjr variasjon til hovedlinje}
menuText O EditTrial "Prv variasjon" 0 \
  {Start/avslutt prvemodus, for  teste ut en ide p brettet}
menuText O EditStrip "Fjern" 0 {Fjern kommentarer eller variasjoner fra partiet}
# ====== TODO To be translated ======
menuText O EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText O EditRedo "Redo" 0 {Redo last game change}
menuText O EditStripComments "Kommentarer" 0 \
  {Fjern alle kommentarer og annotasjoner fra dette partiet}
menuText O EditStripVars "Variasjoner" 0 {Fjern alle variasjoner fra dette partiet}
menuText O EditStripBegin "Moves from the beginning" 1 \
  {Strip moves from the beginning of the game} ;# ***
menuText O EditStripEnd "Moves to the end" 0 \
  {Strip moves to the end of the game} ;# ***
menuText O EditReset "Rensk utklippsbase" 0 \
  {Tmmer utklippsbasen fullstendig}
menuText O EditCopy "Kopier partiet til utklippsbasen" 0 \
  {Kopier dette partiet til utklippsbasen}
menuText O EditPaste "Lim inn siste parti fra utklippsbasen" 0 \
  {Limer inn gjeldende parti fra utklippsbasen her}
menuText O EditPastePGN "Paste Clipboard text as PGN game..." 10 \
  {Interpret the clipboard text as a game in PGN notation and paste it here} ;# ***
menuText O EditSetup "Still opp stilling..." 0 \
  {Lag en startstilling for dette partiet}
menuText O EditCopyBoard "Copy position" 6 \
  {Copy the current board in FEN notation to the text selection (clipboard)} ;# ***
menuText O EditPasteBoard "Lim inn stilling" 0 \
  {Lag en startstilling fra gjeldende utvalg (utklippstavle)}

# Game menu:
menuText O Game "Parti" 0
menuText O GameNew "Nytt parti" 0 \
  {Sletter alle trekk og starter et nytt parti}
menuText O GameFirst "Hent frste parti" 0 {Henter frste parti fra filteret}
menuText O GamePrev "Hent forrige parti" 0 {Henter forrige parti fra filteret}
menuText O GameReload "Hent dette partiet" 0 \
  {Henter dette partiet p nytt og fjerner alle endringer}
menuText O GameNext "Hent neste parti" 0 {Henter neste parti fra filteret}
menuText O GameLast "Hent siste parti" 0 {Henter siste parti fra filteret}
menuText O GameRandom "Hent tilfeldig parti" 8 {Hent tilfeldig parti fra filteret}
menuText O GameNumber "Hent parti nummer..." 0 \
  {Finn et parti ved  angi nummeret}
menuText O GameReplace "Lagre: Erstatt parti..." 0 \
  {Lagre og overskriv dette partiet}
menuText O GameAdd "Lagre som nytt parti..." 0 \
  {Lagre dette partiet som et nytt parti}
menuText O GameDeepest "Identifiser pning" 0 \
  {G til dypeste posisjon i dette partiet listet i ECO-boken}
menuText O GameGotoMove "G til trekk..." 0 \
  {G til et angitt trekk i dette partiet}
menuText O GameNovelty "Finn avvik..." 0 \
  {Finn det frste trekket i dette partiet som ikke har blitt spilt tidligere}

# Search Menu:
menuText O Search "Sk" 0
menuText O SearchReset "Nullstill filter" 0 {Nullstill filteret til  inneholde alle partier}
menuText O SearchNegate "Snu filter" 0 {Reverserer filteret til  kun inneholde eksluderte partier}
menuText O SearchCurrent "Stilling..." 0 {Sk etter denne stillingen}
menuText O SearchHeader "Header..." 0 {Sk etter Header (partier, turnering etc) informasjon}
menuText O SearchMaterial "Kvalitet/stilling..." 0 {Sk p kvalitet eller stilling}
menuText O SearchUsing "Bruk skefil..." 0 {Sk vha lagrede skevilkr}

# Windows menu:
menuText O Windows "Vinduer" 0
menuText O WindowsComment "Kommentarer" 0 {pne/lukk kommentarvinduet}
menuText O WindowsGList "Partioversikt" 0 {pne/lukk partioversikten}
menuText O WindowsPGN "PGN-vindu" 0 \
  {pne/lukk PGN-vinduet}
menuText O WindowsPList "Player Finder" 2 {Open/close the player finder} ;# ***
menuText O WindowsTmt "Turneringsker" 0 {pne/lukk turneringsskeren}
menuText O WindowsSwitcher "Databasebytter" 0 \
  {pne/lukk databasebytteren}
menuText O WindowsMaint "Vedlikeholdsvindu" 0 \
  {pne/lukk vedlikeholdsvinduet}
menuText O WindowsECO "ECO-oversikt" 0 {pne/lukk ECO-oversikten}
menuText O WindowsRepertoire "Repertoirvindu" 0 \
  {pne/lukk pningsreportoiret}
menuText O WindowsStats "Statistikkvindu" 0 \
  {pne/lukk statistikk for filteret}
menuText O WindowsTree "Trevindu" 0 {pne/lukk trevinduet}
menuText O WindowsTB "Sluttspilltabellvindu" 0 \
  {pne/lukk sluttspilltabellen}
# ====== TODO To be translated ======
menuText O WindowsBook "Book Window" 0 {Open/close the Book window}
# ====== TODO To be translated ======
menuText O WindowsCorrChess "Correspondence Window" 0 {Open/close the Correspondence window}

# Tools menu:
menuText O Tools "Verkty" 0
menuText O ToolsAnalysis "Analysemotor..." 0 \
  {Start/stopp en sjakkanalysemotor}
menuText O ToolsAnalysis2 "Analysemotor #2..." 0 \
  {Start/stopp enda en sjakkanalysemotor}
menuText O ToolsCross "Krysstabell" 0 {Vis turnerigskrystabellen for dette partiet}
menuText O ToolsEmail "Epostbehandler" 0 \
  {pne/lukk epostbehandlingsvinduet}
menuText O ToolsFilterGraph "Filtergraf" 7 \
  {pne/lukk filtergrafvinduet}
# ====== TODO To be translated ======
menuText O ToolsAbsFilterGraph "Abs. Filter Graph" 7 {Open/close the filter graph window for absolute values}
menuText O ToolsOpReport "pningsrapport" 0 \
  {Lager en pningsrapport for denne stillingen}
# ====== TODO To be translated ======
menuText O ToolsOpenBaseAsTree "Open base as tree" 0   {Open a base and use it in Tree window}
# ====== TODO To be translated ======
menuText O ToolsOpenRecentBaseAsTree "Open recent base as tree" 0   {Open a recent base and use it in Tree window}
menuText O ToolsTracker "Brikkesporing"  0 {pne brikkesporingsvinduet}
# ====== TODO To be translated ======
menuText O ToolsTraining "Training"  0 {Training tools (tactics, openings,...) }
# ====== TODO To be translated ======
menuText O ToolsTacticalGame "Tactical game"  0 {Play a game with tactics}
# ====== TODO To be translated ======
menuText O ToolsSeriousGame "Serious game"  0 {Play a serious game}
# ====== TODO To be translated ======
menuText O ToolsTrainOpenings "Openings"  0 {Train with a repertoire}
# ====== TODO To be translated ======
menuText O ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
# ====== TODO To be translated ======
menuText O ToolsTrainTactics "Tactics"  0 {Solve tactics}
# ====== TODO To be translated ======
menuText O ToolsTrainCalvar "Calculation of variations"  0 {Calculation of variations training}
# ====== TODO To be translated ======
menuText O ToolsTrainFindBestMove "Find best move"  0 {Find best move}
# ====== TODO To be translated ======
menuText O ToolsTrainFics "Play on internet"  0 {Play on freechess.org}
# ====== TODO To be translated ======
menuText O ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
# ====== TODO To be translated ======
menuText O ToolsBookTuning "Book tuning" 0 {Book tuning}
# ====== TODO To be translated ======
menuText O ToolsConnectHardware "Connect Hardware" 0 {Connect external hardware}
# ====== TODO To be translated ======
menuText O ToolsConnectHardwareConfigure "Configure..." 0 {Configure external hardware and connection}
# ====== TODO To be translated ======
menuText O ToolsConnectHardwareNovagCitrineConnect "Connect Novag Citrine" 0 {Connect Novag Citrine}
# ====== TODO To be translated ======
menuText O ToolsConnectHardwareInputEngineConnect "Connect Input Engine" 0 {Connect Input Engine (e.g. DGT)}
menuText O ToolsPInfo "Spillerinformasjon"  0 \
  {pne/oppdater informasjonsvinduet for denne spilleren}
menuText O ToolsPlayerReport "Player Report..." 3 \
  {Generate a player report} ;# ***
menuText O ToolsRating "Ratinggraf" 0 \
  {Tegner ratingen til disse spillerene over tid}
menuText O ToolsScore "Poeng-graf" 0 {Viser poeng-grafen}
menuText O ToolsExpCurrent "Eksporter parti" 0 \
  {Skriv dette partiet til en tekstfil}
menuText O ToolsExpCurrentPGN "Eksporter parti til PGN-fil..." 0 \
  {Skriv dette partiet til en PGN-fil}
menuText O ToolsExpCurrentHTML "Eksporter parti til HTML fil..." 0 \
  {Skriv dette partiet til en HTML-fil}
# ====== TODO To be translated ======
menuText O ToolsExpCurrentHTMLJS "Export Game to HTML and JavaScript File..." 15 {Write current game to a HTML and JavaScript file}  
menuText O ToolsExpCurrentLaTeX "Eksporter partil til LaTeX fil..." 0 \
  {Skriv dette partiet til en LaTeX-fil}
menuText O ToolsExpFilter "Eksporter alle partier i filteret" 0 \
  {Skriv alle partier i filteret til en tekstfil}
menuText O ToolsExpFilterPGN "Eksporter filter til PGN-fil..." 0 \
  {Skriv alle partier i filteret til en PGN-fil}
menuText O ToolsExpFilterHTML "Eksporter filter til HTML-fil..." 0 \
  {Skriv alle partier i filteret til en HTML-fil}
# ====== TODO To be translated ======
menuText O ToolsExpFilterHTMLJS "Export Filter to HTML and JavaScript File..." 17 {Write all filtered games to a HTML and JavaScript file}  
menuText O ToolsExpFilterLaTeX "Eksporter filter til LaTeX-fil..." 0 \
  {Skriv alle partier i filteret til en LaTeX-fil}
menuText O ToolsImportOne "Importer ett PGN-parti..." 0 \
  {Importer ett parti fra en PGN-fil}
menuText O ToolsImportFile "Importer fil med PGN-partier..." 0 \
  {Importer partier fra en PGN-fil}
# ====== TODO To be translated ======
menuText O ToolsStartEngine1 "Start engine 1" 0  {Start engine 1}
# ====== TODO To be translated ======
menuText O ToolsStartEngine2 "Start engine 2" 0  {Start engine 2}
# ====== TODO To be translated ======
menuText O ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
# ====== TODO To be translated ======
menuText O Play "Play" 0
# ====== TODO To be translated ======
menuText O CorrespondenceChess "Correspondence Chess" 0 {Functions for eMail and Xfcc based correspondence chess}
# ====== TODO To be translated ======
menuText O CCConfigure "Configure..." 0 {Configure external tools and general setup}
# ====== TODO To be translated ======
menuText O CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
# ====== TODO To be translated ======
menuText O CCOpenDB "Open Database..." 0 {Open the default Correspondence database}
# ====== TODO To be translated ======
menuText O CCRetrieve "Retrieve Games" 0 {Retrieve games via external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText O CCInbox "Process Inobx" 0 {Process all files in scids Inbox}
# ====== TODO To be translated ======
menuText O CCSend "Send Move" 0 {Send your move via eMail or external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText O CCResign "Resign" 0 {Resign (not via eMail)}
# ====== TODO To be translated ======
menuText O CCClaimDraw "Claim Draw" 0 {Send move and claim a draw (not via eMail)}
# ====== TODO To be translated ======
menuText O CCOfferDraw "Offer Draw" 0 {Send move and offer a draw (not via eMail)}
# ====== TODO To be translated ======
menuText O CCAcceptDraw "Accept Draw" 0 {Accept a draw offer (not via eMail)}
# ====== TODO To be translated ======
menuText O CCNewMailGame "New eMail Game..." 0 {Start a new eMail game}
# ====== TODO To be translated ======
menuText O CCMailMove "Mail Move..." 0 {Send the move via eMail to the opponent}
# ====== TODO To be translated ======
menuText O CCGamePage "Game Page..." 0 {Call up the game via the web browser}
# ====== TODO To be translated ======
menuText O CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText O Options "Innstillinger" 0
menuText O OptionsBoard "Chessboard" 0 {Chess board appearance options} ;# ***
menuText O OptionsBoardSize "Brettstrrelse" 0 {Endre brettstrrelse}
menuText O OptionsBoardPieces "Brikkeutseende" 6 \
  {Endrer utseendet p brikkene}
menuText O OptionsBoardColors "Farger..." 0 {Endre farger p brettet}
# ====== TODO To be translated ======
menuText O OptionsBoardGraphics "Squares..." 0 {Select textures for squares}
# ====== TODO To be translated ======
translate O OptionsBGW {Select texture for squares}
# ====== TODO To be translated ======
translate O OptionsBoardGraphicsText {Select graphic files for white and black squares:}
menuText O OptionsBoardNames "My Player Names..." 0 {Edit my player names} ;# ***
menuText O OptionsExport "Eksport" 0 {Endre innstillinger for eksport av tekst}
menuText O OptionsFonts "Skrifttyper" 0 {Endre skrifttyper}
menuText O OptionsFontsRegular "Vanlig" 0 {Endre den vanlige skrifttypen}
menuText O OptionsFontsMenu "Menu" 0 {Change the menu font} ;# ***
menuText O OptionsFontsSmall "Liten" 0 {Endre den lille skrifttypen}
# ====== TODO To be translated ======
menuText O OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText O OptionsFontsFixed "Fastbredde" 0 {Endre fastbreddeskrifttypen}
menuText O OptionsGInfo "Partiinformasjon" 0 {Informasjonsinnstillinger}
menuText O OptionsLanguage "Sprk" 0 {Velg menysprk}
# ====== TODO To be translated ======
menuText O OptionsMovesTranslatePieces "Translate pieces" 0 {Translate first letter of pieces}
# ====== TODO To be translated ======
menuText O OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText O OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText O OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText O OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText O OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText O OptionsMoves "Trekk" 0 {Innstillinger for hvordan trekk angis}
menuText O OptionsMovesAsk "Spr fr trekk erstattes" 0 \
  {Spr fr eksisterende trekk erstattes av et nytt}
menuText O OptionsMovesAnimate "Animation time" 1 \
  {Set the amount of time used to animate moves} ;# ***
menuText O OptionsMovesDelay "Autospillforsinkelse..." 0 \
  {Sett forsinkelsen ved automatisk gjennomgang av partiet}
menuText O OptionsMovesCoord "Koordinater" 0 \
  {Tillat angivelse av koordinater ("g1f3")}
menuText O OptionsMovesSuggest "Vis foresltte trekk" 0 \
  {Sl av/p forslag til trekk}
# ====== TODO To be translated ======
menuText O OptionsShowVarPopup "Show variations window" 0 {Turn on/off the display of a variations window}  
# ====== TODO To be translated ======
menuText O OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}  
menuText O OptionsMovesKey "Autofullfr" 0 \
  {Sl av/p autofullfriring av tastaturtrekk}
# ====== TODO To be translated ======
menuText O OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText O OptionsNumbers "Tallformat" 0 {Angi tallformat}
menuText O OptionsStartup "Oppstart" 0 {Angi vinduer som skal pne ved oppstart}
# ====== TODO To be translated ======
menuText O OptionsTheme "Theme" 0 {Change look of interface}
menuText O OptionsWindows "Vinduer" 0 {Vindusinnstillinger}
menuText O OptionsWindowsIconify "Auto-minimer" 5 \
  {Minimerer alle vinduer sammen med hovedvinduet}
menuText O OptionsWindowsRaise "Autoheving" 0 \
  {Hever visse vinduer (fremdriftsvisere etc) nr de er skjult}
menuText O OptionsSounds "Sounds..." 2 {Configure move announcement sounds} ;# ***
# ====== TODO To be translated ======
menuText O OptionsWindowsDock "Dock windows" 0 {Dock windows}
# ====== TODO To be translated ======
menuText O OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
# ====== TODO To be translated ======
menuText O OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
# ====== TODO To be translated ======
menuText O OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
# ====== TODO To be translated ======
menuText O OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText O OptionsToolbar "Verktylinje i hovedvindu" 0 \
  {Vis/skjul menylinjen i hovedvinduet}
menuText O OptionsECO "Hent ECO-fil..." 0 {Henter filen med ECO-klassifiseringer}
menuText O OptionsSpell "Hent stavekontrollfil..." 0 \
  {Henter filen med stavekontrollen til Scid}
menuText O OptionsTable "Tabellbasekatalog..." 0 \
  {Velg en tabellbase; Alle tabellbaser i katalogen vil bli brukt}
menuText O OptionsRecent "Recent files..." 0 \
  {Change the number of recent files displayed in the File menu} ;# ***
# ====== TODO To be translated ======
menuText O OptionsBooksDir "Books directory..." 0 {Sets the opening books directory}
# ====== TODO To be translated ======
menuText O OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText O OptionsSave "Lagre innstillinger" 0 \
  "Lagre alle instillinger til $::optionsFile"
menuText O OptionsAutoSave "Autolagre innstillinger ved avslutning" 0 \
  {Autolagre alle innstillinger nr Scid avsluttes}

# Help menu:
menuText O Help "Hjelp" 0
menuText O HelpContents "Contents" 0 {Show the help contents page} ;# ***
menuText O HelpIndex "Innhold" 0 {Hjelpesystemets innhold}
menuText O HelpGuide "Lynguide" 0 {Vis lynguiden}
menuText O HelpHints "Hint" 0 {Vis hint}
menuText O HelpContact "Kontaktinformasjon" 0 {Vis kontaktinformasjon}
menuText O HelpTip "Dagens tips" 0 {Vis et nyttig Scid-tips}
menuText O HelpStartup "Oppstartsvindu" 0 {Vis oppstartsvindu}
menuText O HelpAbout "Om Scid" 0 {Informasjon om Scid}

# Game info box popup menu:
menuText O GInfoHideNext "Skjul neste trekk" 0
menuText O GInfoMaterial "Vis kvalitet" 0
menuText O GInfoFEN "Vis FEN" 0
menuText O GInfoMarks "Vis fargede ruter og piler" 0
menuText O GInfoWrap "Tekstbryting" 0
menuText O GInfoFullComment "Vis full kommentar" 0
menuText O GInfoPhotos "Show Photos" 5 ;# ***
menuText O GInfoTBNothing "Tabellbaser: ingenting" 0
menuText O GInfoTBResult "Tabellbaser: kun resultater" 0
menuText O GInfoTBAll "Tabellbaser: resultater og beste trekk" 0
menuText O GInfoDelete "Slett/gjenopprett dette partiet" 0
menuText O GInfoMark "(Av)Merk dette partiet" 0
# ====== TODO To be translated ======
menuText O GInfoInformant "Configure informant values" 0

# Main window buttons:
helpMsg O .main.fbutton.button.start {G til begynnelsen av partiet (tast: Home)}
helpMsg O .main.fbutton.button.end {G til slutten av partiet (tast: End)}
helpMsg O .main.fbutton.button.back {G ett trekk tilbake (tast: LeftArrow)}
helpMsg O .main.fbutton.button.forward {G et trekk fremover (tast: RightArrow)}
helpMsg O .main.fbutton.button.intoVar {G inn i en variasjon (snarvei: v)}
helpMsg O .main.fbutton.button.exitVar {Forlat variasjon (snarvei: z)}
helpMsg O .main.fbutton.button.flip {Roter brett (snarvei: .)}
helpMsg O .main.fbutton.button.coords {Sl av/p brettkoordinater (snarvei: 0)}
helpMsg O .main.fbutton.button.stm {Turn the side-to-move icon on or off} ;# ***
helpMsg O .main.fbutton.button.autoplay {Automatisk spill (tast: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg O .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg O .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg O .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate O Back {Tilbake}
translate O Browse {Browse} ;# ***
translate O Cancel {Avbryt}
# ====== TODO To be translated ======
translate O Continue {Continue}
translate O Clear {Slett}
translate O Close {Lukk}
translate O Contents {Contents} ;# ***
translate O Defaults {Standard}
translate O Delete {Slett}
translate O Graph {Graf}
translate O Help {Hjelp}
translate O Import {Importer}
translate O Index {Innhold}
translate O LoadGame {Hent parti}
translate O BrowseGame {Bla gjennom parti}
translate O MergeGame {Smelt parti}
# ====== TODO To be translated ======
translate O MergeGames {Merge Games}
translate O Preview {Forhndsvis}
translate O Revert {Gjr om}
translate O Save {Lagre}
translate O Search {Sk}
translate O Stop {Stopp}
translate O Store {Lagre}
translate O Update {Oppdater}
translate O ChangeOrient {Vend vindu}
translate O ShowIcons {Show Icons} ;# ***
translate O None {Ingen}
translate O First {Frste}
translate O Current {Gjeldende}
translate O Last {Siste}

# General messages:
translate O game {parti}
translate O games {partier}
translate O move {trekk}
translate O moves {trekk}
translate O all {alle}
translate O Yes {Ja}
translate O No {Nei}
translate O Both {Begge}
translate O King {Konge}
translate O Queen {Dronning}
translate O Rook {Trn}
translate O Bishop {Lper}
translate O Knight {Springer}
translate O Pawn {Bonde}
translate O White {Hvit}
translate O Black {Sort}
translate O Player {Spiller}
translate O Rating {Rating}
translate O RatingDiff {Ratingforskjell (Hvit - Sort)}
translate O AverageRating {Average Rating} ;# ***
translate O Event {Anledning}
translate O Site {Sted}
translate O Country {Land}
translate O IgnoreColors {Overse farger}
translate O Date {Dato}
translate O EventDate {Anledningsdato}
translate O Decade {Decade} ;# ***
translate O Year {r}
translate O Month {Mned}
translate O Months {Januar Februar Mars April Mai Juni Juli August September Oktober November Desember}
translate O Days {Sn Man Tir Ons Tor Fre Lr}
translate O YearToToday {r til i dag}
translate O Result {Utfall}
translate O Round {Runde}
translate O Length {Lengde}
translate O ECOCode {ECO-kode}
translate O ECO {ECO}
translate O Deleted {Slettet}
translate O SearchResults {Sk i resultater}
translate O OpeningTheDatabase {pningsdatabase}
translate O Database {Database}
translate O Filter {Filter}
translate O noGames {ingen partier}
translate O allGames {alle partier}
translate O empty {tom}
translate O clipbase {utklippsbase}
translate O score {poeng}
translate O StartPos {Utgangsstilling}
translate O Total {Sammenlagt}
translate O readonly {skrivebeskyttet}

# Standard error messages:
translate O ErrNotOpen {This is not an open database.} ;# ***
translate O ErrReadOnly {This database is read-only; it cannot be altered.} ;# ***
translate O ErrSearchInterrupted {Search was interrupted; results are incomplete.} ;# ***

# Game information:
translate O twin {duplikat}
translate O deleted {slettet}
translate O comment {kommentar}
translate O hidden {skjult}
translate O LastMove {Siste trekk}
translate O NextMove {Neste}
translate O GameStart {Begynnelse p parti}
translate O LineStart {Begynnelse p linje}
translate O GameEnd {Slutt p parti}
translate O LineEnd {Slutt p linje}

# Player information:
translate O PInfoAll {Resultater for <b>alle</b> partier}
translate O PInfoFilter {Resultater for partier i <b>filteret</b>}
translate O PInfoAgainst {Resultater mot}
translate O PInfoMostWhite {Hyppigste pning som hvit}
translate O PInfoMostBlack {Hyppigste pning som sort}
translate O PInfoRating {Historisk rating}
translate O PInfoBio {Biografi}
translate O PInfoEditRatings {Edit Ratings} ;# ***

# Tablebase information:
translate O Draw {Uavgjort}
translate O stalemate {patt}
translate O withAllMoves {med alle trekk}
translate O withAllButOneMove {med alle trekk unntatt ett}
translate O with {med}
translate O only {kun}
translate O lose {taper} ;# tap?
translate O loses {taper}
translate O allOthersLose {alle andre taper}
translate O matesIn {setter matt i}
translate O hasCheckmated {har satt matt}
translate O longest {lengste}
translate O WinningMoves {Winning moves} ;# ***
translate O DrawingMoves {Drawing moves} ;# ***
translate O LosingMoves {Losing moves} ;# ***
translate O UnknownMoves {Unknown-result moves} ;# ***

# Tip of the day:
translate O Tip {Tips}
translate O TipAtStartup {Tips ved oppstart}

# Tree window menus:
menuText O TreeFile "Fil" 0
# ====== TODO To be translated ======
menuText O TreeFileFillWithBase "Fill Cache with base" 0 {Fill the cache file with all games in current base}
# ====== TODO To be translated ======
menuText O TreeFileFillWithGame "Fill Cache with game" 0 {Fill the cache file with current game in current base}
# ====== TODO To be translated ======
menuText O TreeFileSetCacheSize "Cache size" 0 {Set the cache size}
# ====== TODO To be translated ======
menuText O TreeFileCacheInfo "Cache info" 0 {Get info on cache usage}
menuText O TreeFileSave "Lagre hurtigbuffer" 0 {Lagrer hurtigbufferfilen (.stc)}
menuText O TreeFileFill "Fyll hurtigbuffer" 0 \
  {Fyller hurtigbufferet med de hyppigste pningsstillingene}
menuText O TreeFileBest "Idealparti" 0 {Show the best tree games list}
menuText O TreeFileGraph "Grafikk" 0 {Vis grafen for denne grenen av treet}
menuText O TreeFileCopy "Kopier treet til utklippstavlen" 0 \
  {Kopier statistikken for treet til utklippstavlen}
menuText O TreeFileClose "Lukk trevindu" 0 {Lukker trevinduet}
# ====== TODO To be translated ======
menuText O TreeMask "Mask" 0
# ====== TODO To be translated ======
menuText O TreeMaskNew "New" 0 {New mask}
# ====== TODO To be translated ======
menuText O TreeMaskOpen "Open" 0 {Open mask}
# ====== TODO To be translated ======
menuText O TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
# ====== TODO To be translated ======
menuText O TreeMaskSave "Save" 0 {Save mask}
# ====== TODO To be translated ======
menuText O TreeMaskClose "Close" 0 {Close mask}
# ====== TODO To be translated ======
menuText O TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
# ====== TODO To be translated ======
menuText O TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
# ====== TODO To be translated ======
menuText O TreeMaskInfo "Info" 0 {Show statistics for current mask}
# ====== TODO To be translated ======
menuText O TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText O TreeMaskSearch "Search" 0 {Search in current mask}
menuText O TreeSort "Sorter" 0
menuText O TreeSortAlpha "Alfabetisk" 0
menuText O TreeSortECO "ECO-kode" 0
menuText O TreeSortFreq "Hyppighet" 0
menuText O TreeSortScore "Poeng" 0
menuText O TreeOpt "Innstillinger" 0
# ====== TODO To be translated ======
menuText O TreeOptSlowmode "slow mode" 0 {Slow mode for updates (high accuracy)}
# ====== TODO To be translated ======
menuText O TreeOptFastmode "Fast mode" 0 {Fast mode for updates (no move transposition)}
# ====== TODO To be translated ======
menuText O TreeOptFastAndSlowmode "Fast and slow mode" 0 {Fast mode then slow mode for updates}
# ====== TODO To be translated ======
menuText O TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText O TreeOptLock "Ls" 0 {Lser treet til nvrende database}
menuText O TreeOptTraining "Trening" 0 {Slr av/p treningsmodus}
menuText O TreeOptAutosave "Autolagre hurtigbuffer" 0 \
  {Autolagrer hurtigbufferet nr vinduet lukkes}
menuText O TreeHelp "Hjelp" 0
menuText O TreeHelpTree "Tre hjelp" 0
menuText O TreeHelpIndex "Innholdsfortegnelse" 0
translate O SaveCache {Lagre hurtigbuffer}
translate O Training {Trening}
translate O LockTree {Ls}
translate O TreeLocked {lst}
translate O TreeBest {Beste}
translate O TreeBestGames {Idealtrepartier}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate O TreeTitleRow \
  {    Move   ECO       Frequency    Score  AvElo Perf AvYear %Draws} ;# ***
translate O TreeTotal {SAMMENLAGT}
# ====== TODO To be translated ======
translate O DoYouWantToSaveFirst {Do you want to save first}
# ====== TODO To be translated ======
translate O AddToMask {Add to Mask}
# ====== TODO To be translated ======
translate O RemoveFromMask {Remove from Mask}
# ====== TODO To be translated ======
translate O AddThisMoveToMask {Add this move to Mask}
# ====== TODO To be translated ======
translate O SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate O DisplayMask {Display Mask}
# ====== TODO To be translated ======
translate O Nag {Nag code}
# ====== TODO To be translated ======
translate O Marker {Marker}
# ====== TODO To be translated ======
translate O Include {Include}
# ====== TODO To be translated ======
translate O Exclude {Exclude}
# ====== TODO To be translated ======
translate O MainLine {Main line}
# ====== TODO To be translated ======
translate O Bookmark {Bookmark}
# ====== TODO To be translated ======
translate O NewLine {New line}
# ====== TODO To be translated ======
translate O ToBeVerified {To be verified}
# ====== TODO To be translated ======
translate O ToTrain {To train}
# ====== TODO To be translated ======
translate O Dubious {Dubious}
# ====== TODO To be translated ======
translate O ToRemove {To remove}
# ====== TODO To be translated ======
translate O NoMarker {No marker}
# ====== TODO To be translated ======
translate O ColorMarker {Color}
# ====== TODO To be translated ======
translate O WhiteMark {White}
# ====== TODO To be translated ======
translate O GreenMark {Green}
# ====== TODO To be translated ======
translate O YellowMark {Yellow}
# ====== TODO To be translated ======
translate O BlueMark {Blue}
# ====== TODO To be translated ======
translate O RedMark {Red}
# ====== TODO To be translated ======
translate O CommentMove {Comment move}
# ====== TODO To be translated ======
translate O CommentPosition {Comment position}
# ====== TODO To be translated ======
translate O AddMoveToMaskFirst {Add move to mask first}
# ====== TODO To be translated ======
translate O OpenAMaskFileFirst {Open a mask file first}
# ====== TODO To be translated ======
translate O Positions {Positions}
# ====== TODO To be translated ======
translate O Moves {Moves}

# Finder window:
menuText O FinderFile "Fil" 0
menuText O FinderFileSubdirs "Let i underkataloger" 0
menuText O FinderFileClose "Lukk skevindu" 0
menuText O FinderSort "Sorter" 0
menuText O FinderSortType "Type" 0
menuText O FinderSortSize "Strrelse" 0
menuText O FinderSortMod "Endret" 0
menuText O FinderSortName "Navn" 0
menuText O FinderSortPath "Sti" 0
menuText O FinderTypes "Typer" 0
menuText O FinderTypesScid "Scid-databaser" 0
menuText O FinderTypesOld "Scid-databaser i gammelt format" 0
menuText O FinderTypesPGN "PGN-filer" 0
menuText O FinderTypesEPD "EPD-filer" 0
menuText O FinderTypesRep "Repertoire-filer" 0
menuText O FinderHelp "Hjelp" 0
menuText O FinderHelpFinder "Skehjelp" 0
menuText O FinderHelpIndex "Innholdsfortegnelse" 0
translate O FileFinder {Skeverkty}
translate O FinderDir {Katalog}
translate O FinderDirs {Kataloger}
translate O FinderFiles {Filer}
translate O FinderUpDir {opp}
# ====== TODO To be translated ======
translate O FinderCtxOpen {Open}
# ====== TODO To be translated ======
translate O FinderCtxBackup {Backup}
# ====== TODO To be translated ======
translate O FinderCtxCopy {Copy}
# ====== TODO To be translated ======
translate O FinderCtxMove {Move}
# ====== TODO To be translated ======
translate O FinderCtxDelete {Delete}

# Player finder:
menuText O PListFile "Fil" 0
menuText O PListFileUpdate "Oppdater" 0
menuText O PListFileClose "Close Player Finder" 0 ;# ***
menuText O PListSort "Sorter" 0
menuText O PListSortName "Name" 0 ;# ***
menuText O PListSortElo "Elo" 0
menuText O PListSortGames "Partier" 0
menuText O PListSortOldest "Oldest" 0 ;# ***
menuText O PListSortNewest "Newest" 0 ;# ***

# Tournament finder:
menuText O TmtFile "Fil" 0
menuText O TmtFileUpdate "Oppdater" 0
menuText O TmtFileClose "Lukk turneringssker" 0
menuText O TmtSort "Sorter" 0
menuText O TmtSortDate "Dato" 0
menuText O TmtSortPlayers "Players" 0
menuText O TmtSortGames "Partier" 0
menuText O TmtSortElo "Elo" 0
menuText O TmtSortSite "Sted" 0
menuText O TmtSortEvent "Anledning" 1
menuText O TmtSortWinner "Vinner" 0
translate O TmtLimit "Listegrense"
translate O TmtMeanElo "Laveste middel-ELO"
translate O TmtNone "Ingen passende turneringer funnet."

# Graph windows:
menuText O GraphFile "Fil" 0
menuText O GraphFileColor "Lagre som farget PostScript..." 0
menuText O GraphFileGrey "Lagre som grtonet PostScript..." 0
menuText O GraphFileClose "Lukk vindu" 0
menuText O GraphOptions "Innstillinger" 0
menuText O GraphOptionsWhite "Hvit" 0
menuText O GraphOptionsBlack "Sort" 0
menuText O GraphOptionsBoth "Begge" 0
menuText O GraphOptionsPInfo "Spiller Info spiller" 0
translate O GraphFilterTitle "Filtergraf: hyppighet per 1000 partier"
# ====== TODO To be translated ======
translate O GraphAbsFilterTitle "Filter Graph: frequency of the games"
# ====== TODO To be translated ======
translate O ConfigureFilter {Configure X-Axes for Year, Rating and Moves}
# ====== TODO To be translated ======
translate O FilterEstimate "Estimate"
# ====== TODO To be translated ======
translate O TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate O AddVariation {Legg til variasjon}
# ====== TODO To be translated ======
translate O AddAllVariations {Add All Variations}
translate O AddMove {Legg til trekk}
translate O Annotate {Annoter}
# ====== TODO To be translated ======
translate O ShowAnalysisBoard {Show analysis board}
# ====== TODO To be translated ======
translate O ShowInfo {Show engine info}
# ====== TODO To be translated ======
translate O FinishGame {Finish game}
# ====== TODO To be translated ======
translate O StopEngine {Stop engine}
# ====== TODO To be translated ======
translate O StartEngine {Start engine}
# ====== TODO To be translated ======
translate O LockEngine {Lock engine to current position}
translate O AnalysisCommand {Analysekommando}
translate O PreviousChoices {Tidligere valg}
translate O AnnotateTime {Tid mellom trekk i sekunder}
translate O AnnotateWhich {Legg til variasjoner}
translate O AnnotateAll {For trekk av begge sider}
# ====== TODO To be translated ======
translate O AnnotateAllMoves {Annotate all moves}
translate O AnnotateWhite {Kun for hvite trekk}
translate O AnnotateBlack {Kun for sorte trekk}
# ====== TODO To be translated ======
translate O AnnotateBlundersOnly {When game move is an obvious blunder}
# ====== TODO To be translated ======
translate O AnnotateBlundersOnlyScoreChange {Analysis reports blunder, with score change from/to: }
# ====== TODO To be translated ======
translate O BlundersThreshold {Threshold}
# TODO: Translate
translate O ScoreAllMoves {Score all moves}
translate O LowPriority {Low CPU priority} ;# ***
# ====== TODO To be translated ======
translate O ClickHereToSeeMoves {Click here to see moves}
# ====== TODO To be translated ======
translate O ConfigureInformant {Configure Informant}
# ====== TODO To be translated ======
translate O Informant!? {Interesting move}
# ====== TODO To be translated ======
translate O Informant? {Poor move}
# ====== TODO To be translated ======
translate O Informant?? {Blunder}
# ====== TODO To be translated ======
translate O Informant?! {Dubious move}
# ====== TODO To be translated ======
translate O Informant+= {White has a slight advantage}
# ====== TODO To be translated ======
translate O Informant+/- {White has a moderate advantage}
# ====== TODO To be translated ======
translate O Informant+- {White has a decisive advantage}
# ====== TODO To be translated ======
translate O Informant++- {The game is considered won}
# ====== TODO To be translated ======
translate O Book {Book}
# ====== TODO To be translated ======
translate O OtherBookMoves {Opponent's book}
# ====== TODO To be translated ======
translate O OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate O EngineList {Liste over analysemotorer}
translate O EngineName {Navn}
translate O EngineCmd {Kommandolinje}
translate O EngineArgs {Parametre}
translate O EngineDir {Katalog}
translate O EngineElo {Elo}
translate O EngineTime {Dato}
translate O EngineNew {Ny}
translate O EngineEdit {Rediger}
translate O EngineRequired {Fete felter er ndvendige, de vrige er valgfrie}

# Stats window menus:
menuText O StatsFile "Fil" 0
menuText O StatsFilePrint "Skriv til fil..." 0
menuText O StatsFileClose "Lukk vindu" 0
menuText O StatsOpt "Innstillinger" 0

# PGN window menus:
menuText O PgnFile "Fil" 0
menuText O PgnFileCopy "Copy Game to Clipboard" 0 ;# ***
menuText O PgnFilePrint "Skriv til fil..." 0
menuText O PgnFileClose "Lukk PGN-vindu" 0
menuText O PgnOpt "Vis" 0
menuText O PgnOptColor "Vis farger" 0
menuText O PgnOptShort "Kort (3 linjer) header" 0
menuText O PgnOptSymbols "Symbolnotasjon" 0
menuText O PgnOptIndentC "Rykk inn kommentarer" 0
menuText O PgnOptIndentV "Rykk inn variasjoner" 0
menuText O PgnOptColumn "Bruk kolonner (ett trekk per linje)" 0
menuText O PgnOptSpace "Mellomrom etter trekknummer" 0
menuText O PgnOptStripMarks "Fjern fargekoder" 0
menuText O PgnOptBoldMainLine "Use Bold Text for Main Line Moves" 4 ;# ***
menuText O PgnColor "Farger" 0
menuText O PgnColorHeader "Header..." 0
menuText O PgnColorAnno "Annotasjoner..." 0
menuText O PgnColorComments "Kommentarer..." 0
menuText O PgnColorVars "Variasjoner..." 0
menuText O PgnColorBackground "Bakgrunn..." 0
# ====== TODO To be translated ======
menuText O PgnColorMain "Main line..." 0
# ====== TODO To be translated ======
menuText O PgnColorCurrent "Current move background..." 1
menuText O PgnHelp "Hjelp" 0
menuText O PgnHelpPgn "PGN-hjelp" 0
menuText O PgnHelpIndex "Innholdsfortegnelse" 0
translate O PgnWindowTitle {Game Notation - game %u} ;# ***

# Crosstable window menus:
menuText O CrosstabFile "Fil" 0
menuText O CrosstabFileText "Skriv til tekstfil..." 0
menuText O CrosstabFileHtml "Skriv til HTML-fil..." 0
menuText O CrosstabFileLaTeX "Skriv til LaTeX-fil..." 0
menuText O CrosstabFileClose "Lukk krysstabellvindu" 0
menuText O CrosstabEdit "Rediger" 0
menuText O CrosstabEditEvent "Anledning" 0
menuText O CrosstabEditSite "Sted" 0
menuText O CrosstabEditDate "Dato" 0
menuText O CrosstabOpt "Vis" 0
menuText O CrosstabOptAll "Alle-mot-alle" 0
menuText O CrosstabOptSwiss "Sveitsisk" 0
menuText O CrosstabOptKnockout "Kun vinnere" 0
menuText O CrosstabOptAuto "Auto" 0
menuText O CrosstabOptAges "Aldre i r" 0
menuText O CrosstabOptNats "Nasjonaliteter" 0
menuText O CrosstabOptRatings "Ratinger" 0
menuText O CrosstabOptTitles "Titler" 0
menuText O CrosstabOptBreaks "Poengfordel" 0
menuText O CrosstabOptDeleted "Include deleted games" 8 ;# ***
menuText O CrosstabOptColors "Farger (kun sveitsisk)" 0
menuText O CrosstabOptColumnNumbers "Nummererte kolonner (kun alle-mot-alle-tabeller)" 0
menuText O CrosstabOptGroup "Gruppepoeng" 0
menuText O CrosstabSort "Sorter" 0
menuText O CrosstabSortName "Navn" 0
menuText O CrosstabSortRating "Rating" 0
menuText O CrosstabSortScore "Poeng" 0
menuText O CrosstabColor "Farge" 0
menuText O CrosstabColorPlain "Ren tekst" 0
menuText O CrosstabColorHyper "Hypertekst" 0
menuText O CrosstabHelp "Hjelp" 0
menuText O CrosstabHelpCross "Krysstabell hjelp" 0
menuText O CrosstabHelpIndex "Innholdsfortegnelse" 0
translate O SetFilter {Sett filter}
translate O AddToFilter {Legg til i filter}
translate O Swiss {Sveitsisk}
translate O Category {Category} ;# ***

# Opening report window menus:
menuText O OprepFile "Fil" 0
menuText O OprepFileText "Skriv til tekstfil..." 0
menuText O OprepFileHtml "Skriv til HTML-fil..." 0
menuText O OprepFileLaTeX "Skriv til LaTeX-fil..." 0
menuText O OprepFileOptions "Innstillinger..." 0
menuText O OprepFileClose "Lukk rapport-vindu" 0
menuText O OprepFavorites "Favorites" 1 ;# ***
menuText O OprepFavoritesAdd "Add Report..." 0 ;# ***
menuText O OprepFavoritesEdit "Edit Report Favorites..." 0 ;# ***
menuText O OprepFavoritesGenerate "Generate Reports..." 0 ;# ***
menuText O OprepHelp "Hjelp" 0
menuText O OprepHelpReport "pningsrapport hjelp" 0
menuText O OprepHelpIndex "Innholdsfortegnelse" 0

# Repertoire editor:
menuText O RepFile "Fil" 0
menuText O RepFileNew "Ny" 0
menuText O RepFileOpen "pne..." 0
menuText O RepFileSave "Lagre..." 0
menuText O RepFileSaveAs "Lagre som..." 0
menuText O RepFileClose "Lukk vindu" 0
menuText O RepEdit "Rediger" 0
menuText O RepEditGroup "Legg til gruppe" 0
menuText O RepEditInclude "Inkluder" 0
menuText O RepEditExclude "Ekskluder" 0
menuText O RepView "Vis" 0
menuText O RepViewExpand "Utvid alle grupper" 0
menuText O RepViewCollapse "Trekk sammen alle grupper" 0
menuText O RepSearch "Sk" 0
menuText O RepSearchAll "Alle i reportoir..." 0
menuText O RepSearchDisplayed "Kun viste linjer..." 0
menuText O RepHelp "Hjelp" 0
menuText O RepHelpRep "Repertoir hjelp" 0
menuText O RepHelpIndex "Innholdsfortegnelse" 0
translate O RepSearch "Repertoirsk"
translate O RepIncludedLines "inkluderte linjer"
translate O RepExcludedLines "ekskluderte linjer"
translate O RepCloseDialog {Gjeldende reportoir har ulagrede endringer.

Vil du virkelig fortsette og miste disse endringene?
}

# Header search:
translate O HeaderSearch {Headersk}
translate O EndSideToMove {Side to move at end of game} ;# ***
translate O GamesWithNoECO {Partier uten ECO?}
translate O GameLength {Partilengde}
translate O FindGamesWith {Finn partier merket med...}
translate O StdStart {Vanlig utgangsstilling}
translate O Promotions {Forfremmelser}
translate O Comments {Kommentarer}
translate O Variations {Variasjoner}
translate O Annotations {Annotasjoner}
translate O DeleteFlag {Slettet}
translate O WhiteOpFlag {Hvit pning}
translate O BlackOpFlag {Sort pning}
translate O MiddlegameFlag {Midtspill}
translate O EndgameFlag {Sluttspill}
translate O NoveltyFlag {Avvik}
translate O PawnFlag {Bondestruktur}
translate O TacticsFlag {Taktikk}
translate O QsideFlag {Spill p dronningsiden}
translate O KsideFlag {Spill p kongesiden}
translate O BrilliancyFlag {Brillians}
translate O BlunderFlag {Tabbe}
translate O UserFlag {Bruker}
translate O PgnContains {PGN inneholder tekst}
# ====== TODO To be translated ======
translate O Annotator {Annotator}
# ====== TODO To be translated ======
translate O Cmnts {Annotated games only}

# Game list window:
translate O GlistNumber {Nummer}
translate O GlistWhite {Hvit}
translate O GlistBlack {Sort}
translate O GlistWElo {H-Elo}
translate O GlistBElo {S-Elo}
translate O GlistEvent {Anledning}
translate O GlistSite {Sted}
translate O GlistRound {Runde}
translate O GlistDate {Dato}
translate O GlistYear {r}
translate O GlistEDate {AnledningDato}
translate O GlistResult {Resultat}
translate O GlistLength {Lengde}
translate O GlistCountry {Land}
translate O GlistECO {ECO}
translate O GlistOpening {pning}
translate O GlistEndMaterial {Slutt-kvalitet}
translate O GlistDeleted {Slettet}
translate O GlistFlags {Flagg}
translate O GlistVars {Variasjoner}
translate O GlistComments {Kommentarer}
translate O GlistAnnos {Annotasjoner}
translate O GlistStart {Start}
translate O GlistGameNumber {Parti nummer}
# ====== TODO To be translated ======
translate O GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate O GlistRating {Rating}
translate O GlistFindText {Finn tekst}
translate O GlistMoveField {Trekk}
translate O GlistEditField {Still inn}
translate O GlistAddField {Legg til}
translate O GlistDeleteField {Fjern}
translate O GlistWidth {Bredde}
translate O GlistAlign {Justering}
# ====== TODO To be translated ======
translate O GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate O GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate O GlistAlignC {Align: center}
translate O GlistColor {Farge}
translate O GlistSep {Skilletegn}
# ====== TODO To be translated ======
translate O GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate O GlistNewSort {New}
# ====== TODO To be translated ======
translate O GlistAddToSort {Add}
# ====== TODO To be translated ======
translate O GsortSort {Sort...}
# ====== TODO To be translated ======
translate O GsortDate {Date}
# ====== TODO To be translated ======
translate O GsortYear {Year}
# ====== TODO To be translated ======
translate O GsortEvent {Event}
# ====== TODO To be translated ======
translate O GsortSite {Site}
# ====== TODO To be translated ======
translate O GsortRound {Round}
# ====== TODO To be translated ======
translate O GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate O GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate O GsortECO {ECO}
# ====== TODO To be translated ======
translate O GsortResult {Result}
# ====== TODO To be translated ======
translate O GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate O GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate O GsortCountry {Country}
# ====== TODO To be translated ======
translate O GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate O GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate O GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate O GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate O GsortComments {Comments}
# ====== TODO To be translated ======
translate O GsortVariations {Variations}
# ====== TODO To be translated ======
translate O GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate O GsortAscending {Ascending}
# ====== TODO To be translated ======
translate O GsortDescending {Descending}
# ====== TODO To be translated ======
translate O GsortAdd {Add}
# ====== TODO To be translated ======
translate O GsortStore {Store}
# ====== TODO To be translated ======
translate O GsortLoad {Load}
# ====== TODO To be translated ======
translate O GlistRemoveThisGameFromFilter  {Remove this game from Filter}
# ====== TODO To be translated ======
translate O GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
# ====== TODO To be translated ======
translate O GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
# ====== TODO To be translated ======
translate O GlistDeleteGame {(Un)Delete this game} 
# ====== TODO To be translated ======
translate O GlistDeleteAllGames {Delete all games in filter} 
# ====== TODO To be translated ======
translate O GlistUndeleteAllGames {Undelete all games in filter} 
# ====== TODO To be translated ======
translate O GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate O DatabaseName {Databasenavn:}
translate O TypeIcon {Ikon:}
translate O NumOfGames {Partier:}
translate O NumDeletedGames {Slettede partier:}
translate O NumFilterGames {Partier i filter:}
translate O YearRange {Til/fra r:}
translate O RatingRange {Til/fra rating:}
translate O Description {Description} ;# ***
translate O Flag {Flagg}
# ====== TODO To be translated ======
translate O CustomFlags {Custom flags}
translate O DeleteCurrent {Slett gjeldende parti}
translate O DeleteFilter {Slett filtrerte partier}
translate O DeleteAll {Slett alle partier}
translate O UndeleteCurrent {Gjenopprett gjeldende parti}
translate O UndeleteFilter {Gjenopprett filtrerte partier}
translate O UndeleteAll {Gjenopprett alle partier}
translate O DeleteTwins {Slett duplikatpartier}
translate O MarkCurrent {Merk gjeldende parti}
translate O MarkFilter {Merk filtrerte partier}
translate O MarkAll {Merk alle partier}
translate O UnmarkCurrent {Fjern merking p gjeldende parti}
translate O UnmarkFilter {Fjern merking p filtrerte partier}
translate O UnmarkAll {Fjern merking p alle partier}
translate O Spellchecking {Stavekontroll}
translate O Players {Spillere}
translate O Events {Anledninger}
translate O Sites {Steder}
translate O Rounds {Runder}
translate O DatabaseOps {Databasebehandling}
translate O ReclassifyGames {ECO-klassifiser partier}
translate O CompactDatabase {Komprimer database}
translate O SortDatabase {Sorter database}
translate O AddEloRatings {Legg til ELO-ratinger}
translate O AutoloadGame {Start med parti nummer}
translate O StripTags {Fjern PGN-merker}
translate O StripTag {Fjern merke}
translate O Cleaner {Opprydding}
translate O CleanerHelp {
Scid-opprydding vil utfre alle handlinger du velger fra listen under p gjeldende database.

Gjeldende innstillinger i ECO-klassifiseringen og duplikatslettingdialogene vil virke inn om du velger disse funksjonene.
}
translate O CleanerConfirm {
Nr oppryddingen er i gang kan den ikke avbrytes!

Dette kan ta lang tid p en stor databse, avhengig av funksjonene du har valgt og disses gjeldende innstillinger.

Er du sikker p at du vil starte vedlikeholdsfunksjonene du har valgt?
}
# ====== TODO To be translated ======
translate O TwinCheckUndelete {to flip; "u" undeletes both)}
# ====== TODO To be translated ======
translate O TwinCheckprevPair {Previous pair}
# ====== TODO To be translated ======
translate O TwinChecknextPair {Next pair}
# ====== TODO To be translated ======
translate O TwinChecker {Scid: Twin game checker}
# ====== TODO To be translated ======
translate O TwinCheckTournament {Games in tournament:}
# ====== TODO To be translated ======
translate O TwinCheckNoTwin {No twin  }
# ====== TODO To be translated ======
translate O TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
# ====== TODO To be translated ======
translate O TwinCheckTag {Share tags...}
# ====== TODO To be translated ======
translate O TwinCheckFound1 {Scid found $result twin games}
# ====== TODO To be translated ======
translate O TwinCheckFound2 { and set their delete flags}
# ====== TODO To be translated ======
translate O TwinCheckNoDelete {There are no games in this database to delete.}
# ====== TODO To be translated ======
translate O TwinCriteria1 { Your settings for finding twin games are potentially likely to\ncause non-twin games with similar moves to be marked as twins.}
# ====== TODO To be translated ======
translate O TwinCriteria2 {It is recommended that if you select "No" for "same moves", you should select "Yes" for the colors, event, site, round, year and month settings.\nDo you want to continue and delete twins anyway? }
# ====== TODO To be translated ======
translate O TwinCriteria3 {It is recommended that you specify "Yes" for at least two of the "same site", "same round" and "same year" settings.\nDo you want to continue and delete twins anyway?}
# ====== TODO To be translated ======
translate O TwinCriteriaConfirm {Scid: Confirm twin settings}
# ====== TODO To be translated ======
translate O TwinChangeTag "Change the following game tags:\n\n"
# ====== TODO To be translated ======
translate O AllocRatingDescription "This command will use the current spellcheck file to add Elo ratings to games in this database. Wherever a player has no currrent rating but his/her rating at the time of the game is listed in the spellcheck file, that rating will be added."
# ====== TODO To be translated ======
translate O RatingOverride "Overwrite existing non-zero ratings?"
# ====== TODO To be translated ======
translate O AddRatings "Add ratings to:"
# ====== TODO To be translated ======
translate O AddedRatings {Scid added $r Elo ratings in $g games.}
# ====== TODO To be translated ======
translate O NewSubmenu "New submenu"

# Comment editor:
translate O AnnotationSymbols  {Notasjonssymboler:}
translate O Comment {Kommentar:}
translate O InsertMark {Insert mark} ;# ***
translate O InsertMarkHelp {
Insert/remove mark: Select color, type, square.
Insert/remove arrow: Right-click two squares.
} ;# ***

# Nag buttons in comment editor:
translate O GoodMove {Good move} ;# ***
translate O PoorMove {Poor move} ;# ***
translate O ExcellentMove {Excellent move} ;# ***
translate O Blunder {Tabbe}
translate O InterestingMove {Interesting move} ;# ***
translate O DubiousMove {Dubious move} ;# ***
translate O WhiteDecisiveAdvantage {White has a decisive advantage} ;# ***
translate O BlackDecisiveAdvantage {Black has a decisive advantage} ;# ***
translate O WhiteClearAdvantage {White has a clear advantage} ;# ***
translate O BlackClearAdvantage {Black has a clear advantage} ;# ***
translate O WhiteSlightAdvantage {White has a slight advantage} ;# ***
translate O BlackSlightAdvantage {Black has a slight advantage} ;# ***
translate O Equality {Equality} ;# ***
translate O Unclear {Unclear} ;# ***
translate O Diagram {Diagram} ;# ***

# Board search:
translate O BoardSearch {Stillingsk}
translate O FilterOperation {Operasjoner p gjeldende filter:}
translate O FilterAnd {AND (Kun p filter)}
translate O FilterOr {OR (Legg til filter)}
translate O FilterIgnore {IGNORE (Nullstill filter)}
translate O SearchType {Sketype:}
translate O SearchBoardExact {Nyaktig stilling (alle brikker p samme felt)}
translate O SearchBoardPawns {Bnder (samme kvalitet, alle bnder p samme felt)}
translate O SearchBoardFiles {Kolonner (samme kvalitet, alle bnder p samme kolonner)}
translate O SearchBoardAny {Alle (samme kvalitet, bnder og brikker hvor som helst)}
# ====== TODO To be translated ======
translate O SearchInRefDatabase { Search in base }
translate O LookInVars {Sk i variasjoner}

# Material search:
translate O MaterialSearch {Kvalitetssk}
translate O Material {Kvalitet}
translate O Patterns {Mnstre}
translate O Zero {Null}
translate O Any {Hvilke som helst}
translate O CurrentBoard {Gjeldende stilling}
translate O CommonEndings {Vanlige sluttspill}
translate O CommonPatterns {Vanlige mnstre}
translate O MaterialDiff {Kvalitetsforskjell}
translate O squares {felt}
translate O SameColor {Samme farge}
translate O OppColor {Motsatt farge}
translate O Either {Begge}
translate O MoveNumberRange {Fra/til trekk nummer}
translate O MatchForAtLeast {Treff i minst}
translate O HalfMoves {halvtrekk}

# Common endings in material search:
translate O EndingPawns {Pawn endings} ;# ***
translate O EndingRookVsPawns {Rook vs. Pawn(s)} ;# ***
translate O EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook} ;# ***
translate O EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook} ;# ***
translate O EndingRooks {Rook vs. Rook endings} ;# ***
translate O EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn} ;# ***
translate O EndingRooksDouble {Double Rook endings} ;# ***
translate O EndingBishops {Bishop vs. Bishop endings} ;# ***
translate O EndingBishopVsKnight {Bishop vs. Knight endings} ;# ***
translate O EndingKnights {Knight vs. Knight endings} ;# ***
translate O EndingQueens {Queen vs. Queen endings} ;# ***
translate O EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen} ;# ***
translate O BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame} ;# ***

# Common patterns in material search:
translate O PatternWhiteIQP {White IQP} ;# ***
translate O PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6} ;# ***
translate O PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6} ;# ***
translate O PatternBlackIQP {Black IQP} ;# ***
translate O PatternWhiteBlackIQP {White IQP vs. Black IQP} ;# ***
translate O PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple} ;# ***
translate O PatternHangingC5D5 {Black Hanging Pawns on c5 and d5} ;# ***
translate O PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)} ;# ***
translate O PatternRookSacC3 {Rook Sacrifice on c3} ;# ***
translate O PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;# ***
translate O PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;# ***
translate O PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)} ;# ***
translate O PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)} ;# ***
translate O PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)} ;# ***

# Game saving:
translate O Today {I dag}
translate O ClassifyGame {Klassifiser parti}

# Setup position:
translate O EmptyBoard {Tm brett}
translate O InitialBoard {Utgangsstilling}
translate O SideToMove {Side i trekk}
translate O MoveNumber {Trekk nummer}
translate O Castling {Rokkade}
translate O EnPassantFile {En Passant-kolonne}
translate O ClearFen {Slett FEN}
translate O PasteFen {Lim inn FEN}
# ====== TODO To be translated ======
translate O SaveAndContinue {Save and continue}
# ====== TODO To be translated ======
translate O DiscardChangesAndContinue {Discard changes\nand continue}
# ====== TODO To be translated ======
translate O GoBack {Go back}

# Replace move dialog:
translate O ReplaceMove {Erstatt trekk}
translate O AddNewVar {Legg til ny variasjon}
# ====== TODO To be translated ======
translate O NewMainLine {New Main Line}
translate O ReplaceMoveMessage {Et trekk eksisterer allerede her.

Du kan erstatte det og slette alle flgende trekk, eller du kan legge det til som en variasjon.

(Du kan unng denne meldingen i fremtiden ved  sl av Spr fr trekk erstattes-innstillingen i Innstillinger:Trekk-menyen.)}

# Make database read-only dialog:
translate O ReadOnlyDialog {Hvis du skrivebeskytter denne databasen tillates ikke lenger endringer p den. Ingen partier kan lagres eller erstattes, og ingen sletteflagg kan endres. All sortering eller ECO-klassifisering vil vre midlertidig.

Du kan enkelt sl av skrivebeskyttelsen p databasen ved  lukke og gjenpne den.

Vil du virkelig skrivebeskytte denne databasen?}

# Clear game dialog:
translate O ClearGameDialog {Dette partiet har blitt endret.

Vil du virkelig forkaste endringene som er gjort?
}

# Exit dialog:
translate O ExitDialog {Vil du virkelig avslutte Scid?}
translate O ExitUnsaved {Flgende baser har ulagrede endringer i partier. Hvis du avslutter n vil disse endringene g tapt.}

# Import window:
translate O PasteCurrentGame {Lim inn gjeldende parti}
translate O ImportHelp1 {Skriv eller lim inn et PGN-parti i feltet over.}
translate O ImportHelp2 {Feil i importen vil vises her.}
# ====== TODO To be translated ======
translate O OverwriteExistingMoves {Overwrite existing moves ?}

# ECO Browser:
translate O ECOAllSections {alle ECO-deler}
translate O ECOSection {ECO-del}
translate O ECOSummary {Sammendrag for}
translate O ECOFrequency {Hyppighet eller underkoder for}

# Opening Report:
translate O OprepTitle {pningsrapport}
translate O OprepReport {Rapport}
translate O OprepGenerated {Generert av}
translate O OprepStatsHist {Statistikk og historie}
translate O OprepStats {Statistikk}
translate O OprepStatAll {Alle rapporterte partier}
translate O OprepStatBoth {Begge med rating}
translate O OprepStatSince {Siden}
translate O OprepOldest {Eldste partier}
translate O OprepNewest {Nyeste partier}
translate O OprepPopular {Trend}
translate O OprepFreqAll {Frekvens i r:   }
translate O OprepFreq1   {Det siste ret: }
translate O OprepFreq5   {De siste 5 rene: }
translate O OprepFreq10  {De siste 10 rene: }
translate O OprepEvery {hvert %u parti}
translate O OprepUp {opp %u%s fra alle r}
translate O OprepDown {ned %u%s fra alle r}
translate O OprepSame {ingen endring fra alle r}
translate O OprepMostFrequent {Hyppigste spillere}
translate O OprepMostFrequentOpponents {Most frequent opponents} ;# ***
translate O OprepRatingsPerf {Ratinger og resultater}
translate O OprepAvgPerf {Middelratinger og -resultater}
translate O OprepWRating {Hvit rating}
translate O OprepBRating {Sort rating}
translate O OprepWPerf {Hvite resultater}
translate O OprepBPerf {Sorte resultater}
translate O OprepHighRating {Parti med hyeste gjennomsnittsrating}
translate O OprepTrends {Resultattrend}
translate O OprepResults {Resultatlengde og -hyppighet}
translate O OprepLength {Partilengde}
translate O OprepFrequency {Hyppighet}
translate O OprepWWins {Hvit vinner: }
translate O OprepBWins {Sort vinner: }
translate O OprepDraws {Uavgjort:      }
translate O OprepWholeDB {hele databasen}
translate O OprepShortest {Korteste seire}
translate O OprepMovesThemes {Trekk og temaer}
translate O OprepMoveOrders {Trekkrekkeflger til rapportert stilling}
translate O OprepMoveOrdersOne \
  {Det var kun en trekkrekkeflge som frte til denne stillingen:}
translate O OprepMoveOrdersAll \
  {Det var %u trekkrekkeflger som frte til denne stillingen:}
translate O OprepMoveOrdersMany \
  {There were %u move orders reaching this position. The top %u are:}
translate O OprepMovesFrom {Trekk fra rapportert stilling}
translate O OprepMostFrequentEcoCodes {Most frequent ECO codes} ;# ***
translate O OprepThemes {Stillingstemaer}
translate O OprepThemeDescription {Frequency of themes in the first %u moves of each game} ;# ***
translate O OprepThemeSameCastling {Rokkade til samme side}
translate O OprepThemeOppCastling {Rokkade til motsatt side}
translate O OprepThemeNoCastling {Ingen konger rokert}
translate O OprepThemeKPawnStorm {Bondestorm p kongesiden}
translate O OprepThemeQueenswap {Byttede dronninger}
translate O OprepThemeWIQP {White Isolated Queen Pawn} ;# ***
translate O OprepThemeBIQP {Black Isolated Queen Pawn} ;# ***
translate O OprepThemeWP567 {Hvit bonde p rekke 5/6/7}
translate O OprepThemeBP234 {Sort bonde p rekke 2/3/4}
translate O OprepThemeOpenCDE {pen c/d/e-kolonne}
translate O OprepTheme1BishopPair {Kun en side har to lpere}
translate O OprepEndgames {Sluttspill}
translate O OprepReportGames {Rapporterte partier}
translate O OprepAllGames    {Alle partier}
translate O OprepEndClass {Materiale i sluttspillet}
translate O OprepTheoryTable {Teoritabell}
translate O OprepTableComment {Generert fra de %u hyest ratede partiene.}
translate O OprepExtraMoves {Ytterligere trekk notert i teoritabellen}
translate O OprepMaxGames {Maksimalt antall partier i teoritabellen}
translate O OprepViewHTML {View HTML} ;# ***
translate O OprepViewLaTeX {View LaTeX} ;# ***

# Player Report:
translate O PReportTitle {Player Report} ;# ***
translate O PReportColorWhite {with the White pieces} ;# ***
translate O PReportColorBlack {with the Black pieces} ;# ***
translate O PReportMoves {after %s} ;# ***
translate O PReportOpenings {Openings} ;# ***
translate O PReportClipbase {Empty clipbase and copy matching games to it} ;# ***

# Piece Tracker window:
translate O TrackerSelectSingle {Venstre museknapp merker denne brikken}
translate O TrackerSelectPair {Venstre museknapp merker denne brikken; hyre merker alle brikker av denne typen.}
translate O TrackerSelectPawn {Venstre museknapp merker denne brikken; hyre merker alle brikker av denne typen.}
translate O TrackerStat {Statistikk}
translate O TrackerGames {% partier med trekk til felt}
translate O TrackerTime {% tid p hvert felt}
translate O TrackerMoves {Trekk}
translate O TrackerMovesStart {Oppgi trekket hvor sporingen skal begynne.}
translate O TrackerMovesStop {Oppgi trekket hvor sporingen skal stoppe.}

# Game selection dialogs:
translate O SelectAllGames {Alle partier i databasen}
translate O SelectFilterGames {Kun partier i filteret}
translate O SelectTournamentGames {Kun partier i gjeldende turnering}
translate O SelectOlderGames {Kun eldre partier}

# Delete Twins window:
translate O TwinsNote {For  vre duplikater m to partier minst ha de samme to spillerene, og kriterier du kan angi under. Nr to duplikater finnes blir det korteste partiet slettet. Tips: Det er best  kjre en stavekontroll fr duplikatsjekken, da det forbedrer sket.}
translate O TwinsCriteria {Kriterier: Duplikater m ha...}
translate O TwinsWhich {Undersk hvilke partier}
translate O TwinsColors {Spillere samme farge?}
translate O TwinsEvent {Samme anledning?}
translate O TwinsSite {Samme sted?}
translate O TwinsRound {Samme runde?}
translate O TwinsYear {Samme r?}
translate O TwinsMonth {Samme mned?}
translate O TwinsDay {Samme dag?}
translate O TwinsResult {Samme utfall?}
translate O TwinsECO {Samme ECO-kode?}
translate O TwinsMoves {Samme trekk?}
translate O TwinsPlayers {Sammenlign spillernavn:}
translate O TwinsPlayersExact {Nyaktig like}
translate O TwinsPlayersPrefix {Kun frste 4 bokstaver}
translate O TwinsWhen {Nr duplikatpartier slettes}
translate O TwinsSkipShort {Overse alle partier kortere enn 5 trekk?}
translate O TwinsUndelete {Gjenopprett alle partier frst?}
translate O TwinsSetFilter {Sett filter til alle slettede duplikatpartier?}
translate O TwinsComments {Behold alltid partier med kommentarer?}
translate O TwinsVars {Behold alltid partier med variasjoner?}
translate O TwinsDeleteWhich {Slett hvilket parti:}
translate O TwinsDeleteShorter {Korteste parti}
translate O TwinsDeleteOlder {Laveste partinummer}
translate O TwinsDeleteNewer {Hyeste partinummer}
translate O TwinsDelete {Slett partier}

# Name editor window:
translate O NameEditType {Navnetype som skal redigeres}
translate O NameEditSelect {Partier som skal redigeres}
translate O NameEditReplace {Erstatt}
translate O NameEditWith {med}
translate O NameEditMatches {Treff: Trykk Ctrl+1 til Ctrl+9 for  velge}
# ====== TODO To be translated ======
translate O CheckGames {Check games}
# ====== TODO To be translated ======
translate O CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate O CheckAll {All games}
# ====== TODO To be translated ======
translate O CheckSelectFilterGames {Only games in filter}

# Classify window:
translate O Classify {Klassifiser}
translate O ClassifyWhich {ECO-klassifiser hvilke partier}
translate O ClassifyAll {Alle partier (overskriv gamle ECO-koder)}
translate O ClassifyYear {Aller partier det siste ret}
translate O ClassifyMonth {Alle partier den siste mneden}
translate O ClassifyNew {Kun partier uten ECO-kode}
translate O ClassifyCodes {ECO-koder som skal brukes}
translate O ClassifyBasic {Kun standardkoder ("B12", ...)}
translate O ClassifyExtended {Scid-utvidet ("B12j", ...)}

# Compaction:
translate O NameFile {Navnefil}
translate O GameFile {Partifil}
translate O Names {Navn}
translate O Unused {Ubrukte}
translate O SizeKb {Strrelse (kb)}
translate O CurrentState {Nvrende}
translate O AfterCompaction {Etter komprimering}
translate O CompactNames {Komrimer navnefil}
translate O CompactGames {Komprimer partifil}
# ====== TODO To be translated ======
translate O NoUnusedNames "There are no unused names, so the name file is already fully compacted."
# ====== TODO To be translated ======
translate O NoUnusedGames "The game file is already fully compacted."
# ====== TODO To be translated ======
translate O NameFileCompacted {The name file for the database "[file tail [sc_base filename]]" was compacted.}
# ====== TODO To be translated ======
translate O GameFileCompacted {The game file for the database "[file tail [sc_base filename]]" was compacted.}

# Sorting:
translate O SortCriteria {Kriterier}
translate O AddCriteria {Legg til kriterie}
translate O CommonSorts {Vanlige sorteringer}
translate O Sort {Sorter}

# Exporting:
# These lines do not use the excact notation of the original english.tcl, because this would cause inconsistency with the PGN window menus
translate O AddToExistingFile {Legg partier til en eksisterende fil}
translate O ExportComments {Eksporter kommentarer}
translate O ExportVariations {Eksporter variasjoner}
translate O IndentComments {Rykk inn kommentarer}
translate O IndentVariations {Rykk inn variasjoner}
translate O ExportColumnStyle {Bruk kolonner (ett trekk per linje)}
translate O ExportSymbolStyle {Symbolnotasjoner}
translate O ExportStripMarks {Fjern alle fargekoder og piler fra kommentarer?}

# Goto game/move dialogs:
translate O LoadGameNumber {Angi partinummer som skal lastes inn:}
translate O GotoMoveNumber {G til trekk nummer:}

# Copy games dialog:
translate O CopyGames {Kopier partier}
translate O CopyConfirm {
Vil du virkelig kopiere de [::utils::thousands $nGamesToCopy] filtrerte partiene fra "$fromName"
 til databasen "$targetName"?
}
translate O CopyErr {Kan ikke kopiere partiene}
translate O CopyErrSource {kildedatabasen}
translate O CopyErrTarget {mldatabasen}
translate O CopyErrNoGames {har ingen partier i sitt filter}
translate O CopyErrReadOnly {er skrivebeskyttet}
translate O CopyErrNotOpen {er ikke pnet}

# Colors:
translate O LightSquares {Lyse felt}
translate O DarkSquares {Mrke felt}
translate O SelectedSquares {Merkede felt}
translate O SuggestedSquares {Foresltte trekkfelt}
translate O WhitePieces {Hvite brikker}
translate O BlackPieces {Sorte brikker}
translate O WhiteBorder {Hvit ramme}
translate O BlackBorder {Sort ramme}

# Novelty window:
translate O FindNovelty {Finn avvik}
translate O Novelty {Avvik}
translate O NoveltyInterrupt {Avvikssk avbrutt}
translate O NoveltyNone {Ingen avvik ble funnet i dette partiet}
translate O NoveltyHelp {
Scid vil finne det frste trekket i det gjeldende partiet som frer til en stilling som ikke finnes i den valgte databasen eller i ECO-pningsboken.}

# Sounds configuration:
translate O SoundsFolder {Sound Files Folder} ;# ***
translate O SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc} ;# ***
translate O SoundsAnnounceOptions {Move Announcement Options} ;# ***
translate O SoundsAnnounceNew {Announce new moves as they are made} ;# ***
translate O SoundsAnnounceForward {Announce moves when moving forward one move} ;# ***
translate O SoundsAnnounceBack {Announce when retracting or moving back one move} ;# ***

# Upgrading databases:
translate O Upgrading {Oppgraderer}
translate O ConfirmOpenNew {
Dette er en database i gammelt format (Scid 3) som ikke kan pnes i Scid 4, men en ny versjon (Scid 4) har allerede blitt opprettet.

Vil du pne versjonen som er i det nye formatet?
}
translate O ConfirmUpgrade {
Dette er en database i gammelt format (Scid3). En versjon i nytt format m opprettes fr den kan brukes i Scid 4.

Oppgradering vil opprette en ny versjon av databasen.

Dette kan ta en stund, men det trenger kun  gjres en gang. Du kan avbryte om det tar for lang tid.

nsker du  oppgradere databasen n?
}

# Recent files options:
translate O RecentFilesMenu {Number of recent files in File menu} ;# ***
translate O RecentFilesExtra {Number of recent files in extra submenu} ;# ***

# My Player Names options:
translate O MyPlayerNamesDescription {
Enter a list of preferred player names below, one name per line. Wildcards (e.g. "?" for any single character, "*" for any sequence of characters) are permitted.

Every time a game with a player in the list is loaded, the main window chessboard will be rotated if necessary to show the game from that players perspective.
} ;# ***
# ====== TODO To be translated ======
translate O showblunderexists {show blunder exists}
# ====== TODO To be translated ======
translate O showblundervalue {show blunder value}
# ====== TODO To be translated ======
translate O showscore {show score}
# ====== TODO To be translated ======
translate O coachgame {coach game}
# ====== TODO To be translated ======
translate O configurecoachgame {configure coach game}
# ====== TODO To be translated ======
translate O configuregame {Game configuration}
# ====== TODO To be translated ======
translate O Phalanxengine {Phalanx engine}
# ====== TODO To be translated ======
translate O Coachengine {Coach engine}
# ====== TODO To be translated ======
translate O difficulty {difficulty}
# ====== TODO To be translated ======
translate O hard {hard}
# ====== TODO To be translated ======
translate O easy {easy}
# ====== TODO To be translated ======
translate O Playwith {Play with}
# ====== TODO To be translated ======
translate O white {white}
# ====== TODO To be translated ======
translate O black {black}
# ====== TODO To be translated ======
translate O both {both}
# ====== TODO To be translated ======
translate O Play {Play}
# ====== TODO To be translated ======
translate O Noblunder {No blunder}
# ====== TODO To be translated ======
translate O blunder {blunder}
# ====== TODO To be translated ======
translate O Noinfo {-- No info --}
# ====== TODO To be translated ======
translate O PhalanxOrTogaMissing {Phalanx or Toga not found}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate O moveblunderthreshold {move is a blunder if loss is greater than}
# ====== TODO To be translated ======
translate O limitanalysis {limit engine analysis time}
# ====== TODO To be translated ======
translate O seconds {seconds}
# ====== TODO To be translated ======
translate O Abort {Abort}
# ====== TODO To be translated ======
translate O Resume {Resume}
# ====== TODO To be translated ======
translate O OutOfOpening {Out of opening}
# ====== TODO To be translated ======
translate O NotFollowedLine {You did not follow the line}
# ====== TODO To be translated ======
translate O DoYouWantContinue {Do you want yo continue ?}
# ====== TODO To be translated ======
translate O CoachIsWatching {Coach is watching}
# ====== TODO To be translated ======
translate O Ponder {Permanent thinking}
# ====== TODO To be translated ======
translate O LimitELO {Limit ELO strength}
# ====== TODO To be translated ======
translate O DubiousMovePlayedTakeBack {Dubious move played, do you want to take back ?}
# ====== TODO To be translated ======
translate O WeakMovePlayedTakeBack {Weak move played, do you want to take back ?}
# ====== TODO To be translated ======
translate O BadMovePlayedTakeBack {Bad move played, do you want to take back ?}
# ====== TODO To be translated ======
translate O Iresign {I resign}
# ====== TODO To be translated ======
translate O yourmoveisnotgood {your move is not good}
# ====== TODO To be translated ======
translate O EndOfVar {End of variation}
# ====== TODO To be translated ======
translate O Openingtrainer {Opening trainer}
# ====== TODO To be translated ======
translate O DisplayCM {Display candidate moves}
# ====== TODO To be translated ======
translate O DisplayCMValue {Display candidate moves value}
# ====== TODO To be translated ======
translate O DisplayOpeningStats {Show statistics}
# ====== TODO To be translated ======
translate O ShowReport {Show report}
# ====== TODO To be translated ======
translate O NumberOfGoodMovesPlayed {good moves played}
# ====== TODO To be translated ======
translate O NumberOfDubiousMovesPlayed {dubious moves played}
# ====== TODO To be translated ======
translate O NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
# ====== TODO To be translated ======
translate O NumberOfTimesPositionEncountered {times position encountered}
# ====== TODO To be translated ======
translate O PlayerBestMove  {Allow only best moves}
# ====== TODO To be translated ======
translate O OpponentBestMove {Opponent plays best moves}
# ====== TODO To be translated ======
translate O OnlyFlaggedLines {Only flagged lines}
# ====== TODO To be translated ======
translate O resetStats {Reset statistics}
# ====== TODO To be translated ======
translate O Repertoiretrainingconfiguration {Repertoire training configuration}
# ====== TODO To be translated ======
translate O Loadingrepertoire {Loading repertoire}
# ====== TODO To be translated ======
translate O Movesloaded {Moves loaded}
# ====== TODO To be translated ======
translate O Repertoirenotfound {Repertoire not found}
# ====== TODO To be translated ======
translate O Openfirstrepertoirewithtype {Open first a repertoire database with icon/type set to the right side}
# ====== TODO To be translated ======
translate O Movenotinrepertoire {Move not in repertoire}
# ====== TODO To be translated ======
translate O PositionsInRepertoire {Positions in repertoire}
# ====== TODO To be translated ======
translate O PositionsNotPlayed {Positions not played}
# ====== TODO To be translated ======
translate O PositionsPlayed {Positions played}
# ====== TODO To be translated ======
translate O Success {Success}
# ====== TODO To be translated ======
translate O DubiousMoves {Dubious moves}
# ====== TODO To be translated ======
translate O OutOfRepertoire {OutOfRepertoire}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate O ConfigureTactics {Configure tactics}
# ====== TODO To be translated ======
translate O ResetScores {Reset scores}
# ====== TODO To be translated ======
translate O LoadingBase {Loading base}
# ====== TODO To be translated ======
translate O Tactics {Tactics}
# ====== TODO To be translated ======
translate O ShowSolution {Show solution}
# ====== TODO To be translated ======
translate O NextExercise {Next exercise}
# ====== TODO To be translated ======
translate O PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate O StopTraining {Stop training}
# ====== TODO To be translated ======
translate O Next {Next}
# ====== TODO To be translated ======
translate O ResettingScore {Resetting score}
# ====== TODO To be translated ======
translate O LoadingGame {Loading game}
# ====== TODO To be translated ======
translate O MateFound {Mate found}
# ====== TODO To be translated ======
translate O BestSolutionNotFound {Best solution NOT found !}
# ====== TODO To be translated ======
translate O MateNotFound {Mate not found}
# ====== TODO To be translated ======
translate O ShorterMateExists {Shorter mate exists}
# ====== TODO To be translated ======
translate O ScorePlayed {Score played}
# ====== TODO To be translated ======
translate O Expected {expected}
# ====== TODO To be translated ======
translate O ChooseTrainingBase {Choose training base}
# ====== TODO To be translated ======
translate O Thinking {Thinking}
# ====== TODO To be translated ======
translate O AnalyzeDone {Analyze done}
# ====== TODO To be translated ======
translate O WinWonGame {Win won game}
# ====== TODO To be translated ======
translate O Lines {Lines}
# ====== TODO To be translated ======
translate O ConfigureUCIengine {Configure UCI engine}
# ====== TODO To be translated ======
translate O SpecificOpening {Specific opening}
# ====== TODO To be translated ======
translate O StartNewGame {Start new game}
# ====== TODO To be translated ======
translate O FixedLevel {Fixed level}
# ====== TODO To be translated ======
translate O Opening {Opening}
# ====== TODO To be translated ======
translate O RandomLevel {Random level}
# ====== TODO To be translated ======
translate O StartFromCurrentPosition {Start from current position}
# ====== TODO To be translated ======
translate O FixedDepth {Fixed depth}
# ====== TODO To be translated ======
translate O Nodes {Nodes} 
# ====== TODO To be translated ======
translate O Depth {Depth}
# ====== TODO To be translated ======
translate O Time {Time} 
# ====== TODO To be translated ======
translate O SecondsPerMove {Seconds per move}
# ====== TODO To be translated ======
translate O Engine {Engine}
# ====== TODO To be translated ======
translate O TimeMode {Time mode}
# ====== TODO To be translated ======
translate O TimeBonus {Time + bonus}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate O TimeMin {min}
# ====== TODO To be translated ======
translate O TimeSec {sec}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate O AllExercisesDone {All exercises done}
# ====== TODO To be translated ======
translate O MoveOutOfBook {Move out of book}
# ====== TODO To be translated ======
translate O LastBookMove {Last book move}
# ====== TODO To be translated ======
translate O AnnotateSeveralGames {Annotate several games\nfrom current to :}
# ====== TODO To be translated ======
translate O FindOpeningErrors {Find opening errors}
# ====== TODO To be translated ======
translate O MarkTacticalExercises {Mark tactical exercises}
# ====== TODO To be translated ======
translate O UseBook {Use book}
# ====== TODO To be translated ======
translate O MultiPV {Multiple variations}
# ====== TODO To be translated ======
translate O Hash {Hash memory}
# ====== TODO To be translated ======
translate O OwnBook {Use engine book}
# ====== TODO To be translated ======
translate O BookFile {Opening book}
# ====== TODO To be translated ======
translate O AnnotateVariations {Annotate variations}
# ====== TODO To be translated ======
translate O ShortAnnotations {Short annotations}
# ====== TODO To be translated ======
translate O addAnnotatorTag {Add annotator tag}
# ====== TODO To be translated ======
translate O AddScoreToShortAnnotations {Add score to short annotations}
# ====== TODO To be translated ======
translate O Export {Export}
# ====== TODO To be translated ======
translate O BookPartiallyLoaded {Book partially loaded}
# ====== TODO To be translated ======
translate O Calvar {Calculation of variations}
# ====== TODO To be translated ======
translate O ConfigureCalvar {Configuration}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate O Reti {Reti}
# ====== TODO To be translated ======
translate O English {English}
# ====== TODO To be translated ======
translate O d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
# ====== TODO To be translated ======
translate O Trompowsky {Trompowsky}
# ====== TODO To be translated ======
translate O Budapest {Budapest}
# ====== TODO To be translated ======
translate O OldIndian {Old Indian}
# ====== TODO To be translated ======
translate O BenkoGambit {Benko Gambit}
# ====== TODO To be translated ======
translate O ModernBenoni {Modern Benoni}
# ====== TODO To be translated ======
translate O DutchDefence {Dutch Defence}
# ====== TODO To be translated ======
translate O Scandinavian {Scandinavian}
# ====== TODO To be translated ======
translate O AlekhineDefence {Alekhine Defence}
# ====== TODO To be translated ======
translate O Pirc {Pirc}
# ====== TODO To be translated ======
translate O CaroKann {Caro-Kann}
# ====== TODO To be translated ======
translate O CaroKannAdvance {Caro-Kann Advance}
# ====== TODO To be translated ======
translate O Sicilian {Sicilian}
# ====== TODO To be translated ======
translate O SicilianAlapin {Sicilian Alapin}
# ====== TODO To be translated ======
translate O SicilianClosed {Sicilian Closed}
# ====== TODO To be translated ======
translate O SicilianRauzer {Sicilian Rauzer}
# ====== TODO To be translated ======
translate O SicilianDragon {Sicilian Dragon}
# ====== TODO To be translated ======
translate O SicilianScheveningen {Sicilian Scheveningen}
# ====== TODO To be translated ======
translate O SicilianNajdorf {Sicilian Najdorf}
# ====== TODO To be translated ======
translate O OpenGame {Open Game}
# ====== TODO To be translated ======
translate O Vienna {Vienna}
# ====== TODO To be translated ======
translate O KingsGambit {King's Gambit}
# ====== TODO To be translated ======
translate O RussianGame {Russian Game}
# ====== TODO To be translated ======
translate O ItalianTwoKnights {Italian/Two Knights}
# ====== TODO To be translated ======
translate O Spanish {Spanish}
# ====== TODO To be translated ======
translate O SpanishExchange {Spanish Exchange}
# ====== TODO To be translated ======
translate O SpanishOpen {Spanish Open}
# ====== TODO To be translated ======
translate O SpanishClosed {Spanish Closed}
# ====== TODO To be translated ======
translate O FrenchDefence {French Defence}
# ====== TODO To be translated ======
translate O FrenchAdvance {French Advance}
# ====== TODO To be translated ======
translate O FrenchTarrasch {French Tarrasch}
# ====== TODO To be translated ======
translate O FrenchWinawer {French Winawer}
# ====== TODO To be translated ======
translate O FrenchExchange {French Exchange}
# ====== TODO To be translated ======
translate O QueensPawn {Queen's Pawn}
# ====== TODO To be translated ======
translate O Slav {Slav}
# ====== TODO To be translated ======
translate O QGA {QGA}
# ====== TODO To be translated ======
translate O QGD {QGD}
# ====== TODO To be translated ======
translate O QGDExchange {QGD Exchange}
# ====== TODO To be translated ======
translate O SemiSlav {Semi-Slav}
# ====== TODO To be translated ======
translate O QGDwithBg5 {QGD with Bg5}
# ====== TODO To be translated ======
translate O QGDOrthodox {QGD Orthodox}
# ====== TODO To be translated ======
translate O Grunfeld {Grnfeld}
# ====== TODO To be translated ======
translate O GrunfeldExchange {Grnfeld Exchange}
# ====== TODO To be translated ======
translate O GrunfeldRussian {Grnfeld Russian}
# ====== TODO To be translated ======
translate O Catalan {Catalan}
# ====== TODO To be translated ======
translate O CatalanOpen {Catalan Open}
# ====== TODO To be translated ======
translate O CatalanClosed {Catalan Closed}
# ====== TODO To be translated ======
translate O QueensIndian {Queen's Indian}
# ====== TODO To be translated ======
translate O NimzoIndian {Nimzo-Indian}
# ====== TODO To be translated ======
translate O NimzoIndianClassical {Nimzo-Indian Classical}
# ====== TODO To be translated ======
translate O NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
# ====== TODO To be translated ======
translate O KingsIndian {King's Indian}
# ====== TODO To be translated ======
translate O KingsIndianSamisch {King's Indian Smisch}
# ====== TODO To be translated ======
translate O KingsIndianMainLine {King's Indian Main Line}
# ====== TODO To be translated ======
translate O ConfigureFics {Configure FICS}
# ====== TODO To be translated ======
translate O FICSGuest {Login as Guest}
# ====== TODO To be translated ======
translate O FICSServerPort {Server port}
# ====== TODO To be translated ======
translate O FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate O FICSRefresh {Refresh}
# ====== TODO To be translated ======
translate O FICSTimesealPort {Timeseal port}
# ====== TODO To be translated ======
translate O FICSSilence {Silence}
# ====== TODO To be translated ======
translate O FICSOffers {Offers}
# ====== TODO To be translated ======
translate O FICSConsole {Console}
# ====== TODO To be translated ======
translate O FICSGames {Games}
# ====== TODO To be translated ======
translate O FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate O FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate O FICSRelayedGames {Relayed games}
# ====== TODO To be translated ======
translate O FICSFindOpponent {Find opponent}
# ====== TODO To be translated ======
translate O FICSTakeback {Takeback}
# ====== TODO To be translated ======
translate O FICSTakeback2 {Takeback 2}
# ====== TODO To be translated ======
translate O FICSInitTime {Initial time (min)}
# ====== TODO To be translated ======
translate O FICSIncrement {Increment (sec)}
# ====== TODO To be translated ======
translate O FICSRatedGame {Rated Game}
# ====== TODO To be translated ======
translate O FICSAutoColour {automatic}
# ====== TODO To be translated ======
translate O FICSManualConfirm {confirm manually}
# ====== TODO To be translated ======
translate O FICSFilterFormula {Filter with formula}
# ====== TODO To be translated ======
translate O FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate O FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate O FICSAccept {accept}
# ====== TODO To be translated ======
translate O FICSDecline {decline}
# ====== TODO To be translated ======
translate O FICSColour {Colour}
# ====== TODO To be translated ======
translate O FICSSend {send}
# ====== TODO To be translated ======
translate O FICSConnect {Connect}
# ====== TODO To be translated ======
translate O FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate O FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate O FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate O GameReview {Game review}
# ====== TODO To be translated ======
translate O GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate O GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate O GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate O GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate O GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate O GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate O GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate O GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate O GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate O GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate O GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate O GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate O GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate O GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate O GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate O GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate O GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate O GameReviewMovesPlayedEngine {Moves played like engine}
# ====== TODO To be translated ======
translate O CCDlgConfigureWindowTitle {Configure Correspondence Chess}
# ====== TODO To be translated ======
translate O CCDlgCGeneraloptions {General Options}
# ====== TODO To be translated ======
translate O CCDlgDefaultDB {Default Database:}
# ====== TODO To be translated ======
translate O CCDlgInbox {Inbox (path):}
# ====== TODO To be translated ======
translate O CCDlgOutbox {Outbox (path):}
# ====== TODO To be translated ======
translate O CCDlgXfcc {Xfcc Configuration:}
# ====== TODO To be translated ======
translate O CCDlgExternalProtocol {External Protocol Handler (e.g. Xfcc)}
# ====== TODO To be translated ======
translate O CCDlgFetchTool {Fetch Tool:}
# ====== TODO To be translated ======
translate O CCDlgSendTool {Send Tool:}
# ====== TODO To be translated ======
translate O CCDlgEmailCommunication {eMail Communication}
# ====== TODO To be translated ======
translate O CCDlgMailPrg {Mail program:}
# ====== TODO To be translated ======
translate O CCDlgBCCAddr {(B)CC Address:}
# ====== TODO To be translated ======
translate O CCDlgMailerMode {Mode:}
# ====== TODO To be translated ======
translate O CCDlgThunderbirdEg {e.g. Thunderbird, Mozilla Mail, Icedove...}
# ====== TODO To be translated ======
translate O CCDlgMailUrlEg {e.g. Evolution}
# ====== TODO To be translated ======
translate O CCDlgClawsEg {e.g Sylpheed Claws}
# ====== TODO To be translated ======
translate O CCDlgmailxEg {e.g. mailx, mutt, nail...}
# ====== TODO To be translated ======
translate O CCDlgAttachementPar {Attachment parameter:}
# ====== TODO To be translated ======
translate O CCDlgInternalXfcc {Use internal Xfcc support}
# ====== TODO To be translated ======
translate O CCDlgConfirmXfcc {Confirm moves}
# ====== TODO To be translated ======
translate O CCDlgSubjectPar {Subject parameter:}
# ====== TODO To be translated ======
translate O CCDlgDeleteBoxes {Empty In-/Outbox}
# ====== TODO To be translated ======
translate O CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess? This requires a new sync to show the last state of your games}
# ====== TODO To be translated ======
translate O CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate O CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate O CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate O CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
# ====== TODO To be translated ======
translate O CCDlgStartEmail {Start new eMail game}
# ====== TODO To be translated ======
translate O CCDlgYourName {Your Name:}
# ====== TODO To be translated ======
translate O CCDlgYourMail {Your eMail Address:}
# ====== TODO To be translated ======
translate O CCDlgOpponentName {Opponents Name:}
# ====== TODO To be translated ======
translate O CCDlgOpponentMail {Opponents eMail Address:}
# ====== TODO To be translated ======
translate O CCDlgGameID {Game ID (unique):}
# ====== TODO To be translated ======
translate O CCDlgTitNoOutbox {Scid: Correspondence Chess Outbox}
# ====== TODO To be translated ======
translate O CCDlgTitNoInbox {Scid: Correspondence Chess Inbox}
# ====== TODO To be translated ======
translate O CCDlgTitNoGames {Scid: No Correspondence Chess Games}
# ====== TODO To be translated ======
translate O CCErrInboxDir {Correspondence Chess inbox directory:}
# ====== TODO To be translated ======
translate O CCErrOutboxDir {Correspondence Chess outbox directory:}
# ====== TODO To be translated ======
translate O CCErrDirNotUsable {does not exist or is not accessible!\nPlease check and correct the settings.}
# ====== TODO To be translated ======
translate O CCErrNoGames {does not contain any games!\nPlease fetch them first.}
# ====== TODO To be translated ======
translate O CCDlgTitNoCCDB {Scid: No Correspondence Database}
# ====== TODO To be translated ======
translate O CCErrNoCCDB {No Database of type 'Correspondence' is opened. Please open one before using correspondence chess functions.}
# ====== TODO To be translated ======
translate O CCFetchBtn {Fetch games from the server and process the Inbox}
# ====== TODO To be translated ======
translate O CCPrevBtn {Goto previous game}
# ====== TODO To be translated ======
translate O CCNextBtn {Goto next game}
# ====== TODO To be translated ======
translate O CCSendBtn {Send move}
# ====== TODO To be translated ======
translate O CCEmptyBtn {Empty In- and Outbox}
# ====== TODO To be translated ======
translate O CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}
# ====== TODO To be translated ======
translate O CCDlgServerName {Server Name:}
# ====== TODO To be translated ======
translate O CCDlgLoginName  {Login Name:}
# ====== TODO To be translated ======
translate O CCDlgPassword   {Password:}
# ====== TODO To be translated ======
translate O CCDlgURL        {Xfcc-URL:}
# ====== TODO To be translated ======
translate O CCDlgRatingType {Rating Type:}
# ====== TODO To be translated ======
translate O CCDlgDuplicateGame {Non-unique game ID}
# ====== TODO To be translated ======
translate O CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
# ====== TODO To be translated ======
translate O CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate O CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate O CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate O CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate O CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate O CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate O CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate O CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate O CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
# ====== TODO To be translated ======
translate O ExtHWConfigConnection {Configure external hardware}
# ====== TODO To be translated ======
translate O ExtHWPort {Port}
# ====== TODO To be translated ======
translate O ExtHWEngineCmd {Engine command}
# ====== TODO To be translated ======
translate O ExtHWEngineParam {Engine parameter}
# ====== TODO To be translated ======
translate O ExtHWShowButton {Show button}
# ====== TODO To be translated ======
translate O ExtHWHardware {Hardware}
# ====== TODO To be translated ======
translate O ExtHWNovag {Novag Citrine}
# ====== TODO To be translated ======
translate O ExtHWInputEngine {Input Engine}
# ====== TODO To be translated ======
translate O ExtHWNoBoard {No board}
# ====== TODO To be translated ======
translate O NovagReferee {Referee}
# ====== TODO To be translated ======
translate O IEConsole {Input Engine Console}
# ====== TODO To be translated ======
translate O IESending {Moves sent for}
# ====== TODO To be translated ======
translate O IESynchronise {Synchronise}
# ====== TODO To be translated ======
translate O IERotate  {Rotate}
# ====== TODO To be translated ======
translate O IEUnableToStart {Unable to start Input Engine:}
# ====== TODO To be translated ======
translate O DoneWithPosition {Done with position}
# ====== TODO To be translated ======
translate O Board {Board}
# ====== TODO To be translated ======
translate O showGameInfo {Show game info}
# ====== TODO To be translated ======
translate O autoResizeBoard {Automatic resize of board}
# ====== TODO To be translated ======
translate O DockTop {Move to top}
# ====== TODO To be translated ======
translate O DockBottom {Move to bottom}
# ====== TODO To be translated ======
translate O DockLeft {Move to left}
# ====== TODO To be translated ======
translate O DockRight {Move to right}
# ====== TODO To be translated ======
translate O Undock {Undock}
# ====== TODO To be translated ======
translate O ChangeIcon {Change icon...}
# ====== TODO To be translated ======
}

# norsk.tcl

# Sjekkliste:
# - Snarveier
### Polish menus for Scid.
# Contributed by Michal Rudolf and Adam Umiastowski.

addLanguage P Polish 0 iso8859-2

proc setLanguage_P {} {

menuText P File "Plik" 0
menuText P FileNew "Nowy..." 0 {Twrz nowa baz Scid}
menuText P FileOpen "Otwrz..." 0 {Otwrz istniejc baz Scid}
menuText P FileClose "Zamknij" 0 {Zamknij aktywn baz Scid}
menuText P FileFinder "Poszukiwacz plikw" 0 {Otwrz okno poszukiwacza plikw}
menuText P FileBookmarks "Zakadki" 2 {Menu zakadek (klawisz: Ctrl+B)}
menuText P FileBookmarksAdd "Dodaj zakadk" 0 \
  {Dodaj zakadk do aktualnej bazy i pozycji}
menuText P FileBookmarksFile "Wstaw zakadk" 0 \
  {Wstaw do wybranego katalogu zakadk do aktualnej bazy i pozycji}
menuText P FileBookmarksEdit "Edycja zakadek..." 0 \
  {Edytuj menu zakadek}
menuText P FileBookmarksList "Wywietlaj katalogi jako list" 0 \
  {Wywietlaj katalogi zakadek jako list, nie jako zagniedone menu}
menuText P FileBookmarksSub "Wywietl katalogi jako menu" 0 \
  {Wywietlaj katalogi zakadek jako zagniedone menu, nie jako list}
menuText P FileMaint "Obsuga" 1 {Narzdzia obsugi bazy Scid}
menuText P FileMaintWin "Obsuga" 0 \
  {Otwrz/zamknij obsug bazy Scid}
menuText P FileMaintCompact "Porzdkuj baz..." 0 \
  {Porzdkuj baz, usuwajc skasowane partie i nieuywane nazwiska}
menuText P FileMaintClass "Klasyfikacja debiutowa partii..." 0 \
  {Przelicz klasyfikacj debiutowa wszystkich partii}
menuText P FileMaintSort "Sortuj baz..." 0 \
  {Sortuj wszystkie partie w bazie}
menuText P FileMaintDelete "Usu podwjne partie..." 0 \
  {Szukaj podwjnych partii i oznacz je do skasowania}
menuText P FileMaintTwin "Wyszukiwanie podwjnych partii" 0 \
  {Otwrz/uaktualnij wyszukiwanie podwjnych partii}
menuText P FileMaintName "Pisownia" 0 \
  {Edycja nazw/nazwisk i kontrola pisowni}
menuText P FileMaintNameEditor "Edytor nazwisk" 0 \
  {Otwrz/zamknij edytor nazwisk}
menuText P FileMaintNamePlayer "Sprawd pisowni nazwisk..." 17 \
  {Sprawd pisowni nazwisk przy pomocy pliku nazwisk}
menuText P FileMaintNameEvent "Sprawd pisowni nazw zawodw..." 22 \
  {Sprawd pisowni nazw zawodw przy pomocy pliku turniejw}
menuText P FileMaintNameSite "Sprawd pisowni nazw miejscowoci..." 22 \
  {Sprawd pisowni nazw miejscowoci przy pomocy pliku miejscowoci}
menuText P FileMaintNameRound "Sprawd numery rund..." 15 \
  {Sprawd numery rund przy pomocy pliku}
menuText P FileReadOnly "Tylko do odczytu..." 0 \
  {Zabezpiecz baz przed zapisem}
menuText P FileSwitch "Przecz baz" 1 \
  {Przecz na inn otwart baz} 
menuText P FileExit "Koniec" 0 {Zamknij Scida}
# ====== TODO To be translated ======
menuText P FileMaintFixBase "Fix corrupted base" 0 {Try to fix a corrupted base}

menuText P Edit "Edytuj" 0
menuText P EditAdd "Dodaj wariant" 0 {Dodaj wariant do ruchu w partii}
menuText P EditDelete "Usu wariant" 0 {Usu wariant dla tego posunicia}
menuText P EditFirst "Twrz pierwszy wariant" 0 \
  {Przesu wariant na pierwsze miejsce na licie}
menuText P EditMain "Zmie wariant na tekst partii" 0 \
   {Zamie wariant i tekst partii}
menuText P EditTrial "Sprawd wariant" 0 \
  {Wcz/wycz tryb sprawdzania wariantw}
menuText P EditStrip "Usu" 2 \
  {Usu komentatarze i warianty}
# ====== TODO To be translated ======
menuText P EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText P EditRedo "Redo" 0 {Redo last game change}
menuText P EditStripComments "Komentarze" 0 \
  {Usu wszystkie komentarze z aktualnej partii}
menuText P EditStripVars "Warianty" 0 \
  {Usu wszystkie warianty z aktualnej partii}
menuText P EditStripBegin "Poprzednie posunicia" 0 \
  {Usu wszystkie posunicia do biecej pozycji}
menuText P EditStripEnd "Nastpne posunicia" 0 \
  {Usu wszystkie posunicia od biecej pozycji do koca partii}
menuText P EditReset "Oprnij schowek" 0 \
  {Oprnij schowek bazy}
menuText P EditCopy "Kopiuj parti do schowka" 0 \
  {Kopiuj parti do schowka}
menuText P EditPaste "Wklej aktywn parti ze schowka" 0 \
  {Wklej aktywn parti ze schowka}
menuText P EditPastePGN "Paste Clipboard text as PGN game..." 10 \
  {Interpret the clipboard text as a game in PGN notation and paste it here} ;# ***
menuText P EditSetup "Ustaw pozycj pocztkow..." 6 \
  {Ustaw pozycj pocztkow partii}
menuText P EditCopyBoard "Kopiuj pozycj" 7 \
  {Kopiuj aktualn pozycj w notacji FEN do schowka}
menuText P EditPasteBoard "Ustaw pozycj ze schowka" 3 \
  {Ustaw pozycj ze schowka}

menuText P Game "Partia" 1
menuText P GameNew "Opu parti" 0 \
  {Opu parti, rezygnujc z wszelkich zmian}
menuText P GameFirst "Pierwsza partia" 2 {Wczytaj pierwsz parti z filtra}
menuText P GamePrev "Poka poprzedni parti" 0 \
  {Wczytaj poprzedni wyszukan parti}
menuText P GameReload "Przeaduj aktualn parti"  10 \
  {Wczytaj parti ponownie, rezygnujc z wszelkich zmian}
menuText P GameNext "Nastpna partia" 0 \
  {Wczytaj nastpn wyszukan parti}
menuText P GameLast "Ostatnia partia" 5 {Wczytaj ostatni parti z filtra}
menuText P GameRandom "Losowa partia z filtra" 8 {Wczytaj losow parti z filtra}
menuText P GameNumber "Wczytaj parti numer..." 17 \
  {Wczytaj parti wprowadzajc jej numer}
menuText P GameReplace "Zapisz: zastp parti..." 3 \
  {Zapisz parti, zastp poprzedni wersj}
menuText P GameAdd "Zapisz: dodaj now parti..." 8 \
  {Zapisz t parti jako nowa parti w bazie}
menuText P GameDeepest "Rozpoznaj debiut" 0 \
  {Przejd do najduszego wariantu z ksiki debiutowej}
menuText P GameGotoMove "Przejd do posunicia nr..." 13 \
  {Przejd do posunicia o podanym numerze}
menuText P GameNovelty "Znajd nowink..." 7 \
  {Znajd pierwsze posunicie partii niegrane wczeniej}

menuText P Search "Szukaj" 0
menuText P SearchReset "Resetuj filtr" 0 \
  {Wstaw wszystkie partie do filtra}
menuText P SearchNegate "Odwr filtr" 0 \
  {Zamie partie w filtrze i poza nim}
menuText P SearchCurrent "Aktualna pozycja..." 0 \
  {Szukaj aktualnej pozycji}
menuText P SearchHeader "Nagwek..." 0 \
  {Szukaj informacji o nagwkach (nazwiska, nazwy turnieju itp.)}
menuText P SearchMaterial "Materia/wzorzec..." 0 \
  {Szukaj wedug materiau lub wzorca}
menuText P SearchUsing "Stosuj plik poszukiwania..." 0 \
  {Szukaj stosujc plik z opcjami poszukiwania}

menuText P Windows "Okna" 1
menuText P WindowsComment "Edytor komentarzy" 0 \
  {Otwrz/zamknij edytor komentarzy}
menuText P WindowsGList "Lista partii" 0 {Otwrz/zamknij list partii}
menuText P WindowsPGN "Okno PGN" 0 {Otwrz/zamknij (zapis partii) PGN }
menuText P WindowsPList "Zawodnicy" 2 {Otwrz/zamknij przegldark zawodnikw}
menuText P WindowsTmt "Turnieje" 0 {Otwrz/zamknij przegldark turniejw}
menuText P WindowsSwitcher "Przecznik baz" 12 \
  {Otwrz/zamknij przecznik baz}
menuText P WindowsMaint "Zarzdzanie baz" 0 \
  {Otwrz/zamknij okno zarzdzania baz}
menuText P WindowsECO "Przegldarka kodw debiutowych" 0 \
  {Otwrz/zamknij przegldark kodw debiutowych}
menuText P WindowsRepertoire "Repertuar debiutowy" 0 \
  {Otwrz/zamknij okno repertuaru debiutowego}
menuText P WindowsStats "Statystyka" 0 \
  {Otwrz/zamknij statystyk}
menuText P WindowsTree "Drzewo wariantw" 0 {Otwrz/zamknij drzewo wariantw}
menuText P WindowsTB "Tablica kocwek" 8 \
  {Otwrz/zamknij okno tablicy kocwek}
# ====== TODO To be translated ======
menuText P WindowsBook "Book Window" 0 {Open/close the Book window}
# ====== TODO To be translated ======
menuText P WindowsCorrChess "Correspondence Window" 0 {Open/close the Correspondence window}

menuText P Tools "Narzdzia" 0
menuText P ToolsAnalysis "Program analizujcy..." 8 \
  {Uruchom/zatrzymaj program analizujcy}
menuText P ToolsAnalysis2 "Program analizujcy 2..." 21 \
  {Uruchom/zatrzymaj program analizujcy}
menuText P ToolsCross "Tabela turniejowa" 0 \
  {Poka tabel turniejow dla aktualnej partii}
menuText P ToolsEmail "Zarzdzanie poczt e-mail" 0 \
  {Otwrz/zamknij zarzdzanie adresami e-mail}
menuText P ToolsFilterGraph "Wykres filtra" 7 \
  {Otwrz/zamknij wykres filtra}
# ====== TODO To be translated ======
menuText P ToolsAbsFilterGraph "Abs. Filter Graph" 7 {Open/close the filter graph window for absolute values}
menuText P ToolsOpReport "Raport debiutowy" 0 \
  {Utwrz raport debiutowy dla aktualnej pozycji}
# ====== TODO To be translated ======
menuText P ToolsOpenBaseAsTree "Open base as tree" 0   {Open a base and use it in Tree window}
# ====== TODO To be translated ======
menuText P ToolsOpenRecentBaseAsTree "Open recent base as tree" 0   {Open a recent base and use it in Tree window}
menuText P ToolsTracker "ledzenie figur"  10 {Otwrz/zamknij okno ledzenia figur} 
# ====== TODO To be translated ======
menuText P ToolsTraining "Training"  0 {Training tools (tactics, openings,...) }
# ====== TODO To be translated ======
menuText P ToolsTacticalGame "Tactical game"  0 {Play a game with tactics}
# ====== TODO To be translated ======
menuText P ToolsSeriousGame "Serious game"  0 {Play a serious game}
# ====== TODO To be translated ======
menuText P ToolsTrainOpenings "Openings"  0 {Train with a repertoire}
# ====== TODO To be translated ======
menuText P ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
# ====== TODO To be translated ======
menuText P ToolsTrainTactics "Tactics"  0 {Solve tactics}
# ====== TODO To be translated ======
menuText P ToolsTrainCalvar "Calculation of variations"  0 {Calculation of variations training}
# ====== TODO To be translated ======
menuText P ToolsTrainFindBestMove "Find best move"  0 {Find best move}
# ====== TODO To be translated ======
menuText P ToolsTrainFics "Play on internet"  0 {Play on freechess.org}
# ====== TODO To be translated ======
menuText P ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
# ====== TODO To be translated ======
menuText P ToolsBookTuning "Book tuning" 0 {Book tuning}
# ====== TODO To be translated ======
menuText P ToolsConnectHardware "Connect Hardware" 0 {Connect external hardware}
# ====== TODO To be translated ======
menuText P ToolsConnectHardwareConfigure "Configure..." 0 {Configure external hardware and connection}
# ====== TODO To be translated ======
menuText P ToolsConnectHardwareNovagCitrineConnect "Connect Novag Citrine" 0 {Connect Novag Citrine}
# ====== TODO To be translated ======
menuText P ToolsConnectHardwareInputEngineConnect "Connect Input Engine" 0 {Connect Input Engine (e.g. DGT)}
menuText P ToolsPInfo "Informacje o zawodniku"  0 \
  {Otwrz/odwie okno informacji o zawodniku}
menuText P ToolsPlayerReport "Raport o graczu..." 9 \
  {Utwrz raport o graczu} 
menuText P ToolsRating "Wykres rankingu" 0 \
  {Wykres historii rankingu grajcych parti}
menuText P ToolsScore "Wykres wynikw" 1 {Poka wykres wynikw}
menuText P ToolsExpCurrent "Eksportuj parti" 0 \
  {Zapisz parti do pliku tekstowego}
menuText P ToolsExpCurrentPGN "Do pliku PGN..." 9 \
  {Zapisz parti do pliku PGN}
menuText P ToolsExpCurrentHTML "Do pliku HTML..." 9 \
  {Zapisz parti do pliku HTML}
# ====== TODO To be translated ======
menuText P ToolsExpCurrentHTMLJS "Export Game to HTML and JavaScript File..." 15 {Write current game to a HTML and JavaScript file}  
menuText P ToolsExpCurrentLaTeX "Do pliku LaTeX-a..." 9 \
  {Zapisz parti do pliku LaTeX-a}
menuText P ToolsExpFilter "Eksportuj wyszukane partie" 1 \
  {Zapisz wyszukane partie do pliku tekstowego}
menuText P ToolsExpFilterPGN "Do pliku PGN..." 9 \
  {Zapisz wyszukane partie do pliku PGN}
menuText P ToolsExpFilterHTML "Do pliku HTML..." 9 \
  {Zapisz wyszukane partie do pliku HTML}
# ====== TODO To be translated ======
menuText P ToolsExpFilterHTMLJS "Export Filter to HTML and JavaScript File..." 17 {Write all filtered games to a HTML and JavaScript file}  
menuText P ToolsExpFilterLaTeX "Do pliku LaTeX..." 9 \
  {Zapisz wyszukane partie do pliku LaTeX}
menuText P ToolsImportOne "Wklej parti w formacie PGN..." 0 \
  {Pobierz parti z pliku PGN}
menuText P ToolsImportFile "Importuj plik PGN..." 2 \
  {Pobierz partie z pliku PGN}
# ====== TODO To be translated ======
menuText P ToolsStartEngine1 "Start engine 1" 0  {Start engine 1}
# ====== TODO To be translated ======
menuText P ToolsStartEngine2 "Start engine 2" 0  {Start engine 2}
# ====== TODO To be translated ======
menuText P ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
# ====== TODO To be translated ======
menuText P Play "Play" 0
# ====== TODO To be translated ======
menuText P CorrespondenceChess "Correspondence Chess" 0 {Functions for eMail and Xfcc based correspondence chess}
# ====== TODO To be translated ======
menuText P CCConfigure "Configure..." 0 {Configure external tools and general setup}
# ====== TODO To be translated ======
menuText P CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
# ====== TODO To be translated ======
menuText P CCOpenDB "Open Database..." 0 {Open the default Correspondence database}
# ====== TODO To be translated ======
menuText P CCRetrieve "Retrieve Games" 0 {Retrieve games via external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText P CCInbox "Process Inobx" 0 {Process all files in scids Inbox}
# ====== TODO To be translated ======
menuText P CCSend "Send Move" 0 {Send your move via eMail or external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText P CCResign "Resign" 0 {Resign (not via eMail)}
# ====== TODO To be translated ======
menuText P CCClaimDraw "Claim Draw" 0 {Send move and claim a draw (not via eMail)}
# ====== TODO To be translated ======
menuText P CCOfferDraw "Offer Draw" 0 {Send move and offer a draw (not via eMail)}
# ====== TODO To be translated ======
menuText P CCAcceptDraw "Accept Draw" 0 {Accept a draw offer (not via eMail)}
# ====== TODO To be translated ======
menuText P CCNewMailGame "New eMail Game..." 0 {Start a new eMail game}
# ====== TODO To be translated ======
menuText P CCMailMove "Mail Move..." 0 {Send the move via eMail to the opponent}
# ====== TODO To be translated ======
menuText P CCGamePage "Game Page..." 0 {Call up the game via the web browser}
# ====== TODO To be translated ======
menuText P CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

menuText P Options "Opcje" 0
menuText P OptionsBoard "Szachownica" 0 {Konfiguracja wygldu szachownicy}
menuText P OptionsBoardSize "Wielko" 0 {Zmie wielko szachownicy}
menuText P OptionsBoardPieces "Typ figur" 4 \
  {Zmienia typ wyswietlanych figur} 
menuText P OptionsBoardColors "Kolory..." 0 {Zmie kolory szachownicy}
# ====== TODO To be translated ======
menuText P OptionsBoardGraphics "Squares..." 0 {Select textures for squares}
# ====== TODO To be translated ======
translate P OptionsBGW {Select texture for squares}
# ====== TODO To be translated ======
translate P OptionsBoardGraphicsText {Select graphic files for white and black squares:}
menuText P OptionsBoardNames "Moje nazwiska" 0 {Modyfikuj list moich graczy}
menuText P OptionsExport "Eksport" 0 {Zmie opcje eksportu tekstu}
menuText P OptionsFonts "Czcionka" 0 {Zmie font}
menuText P OptionsFontsRegular "Podstawowa" 0 {Zmie podstawow czcionk}
menuText P OptionsFontsMenu "Menu" 0 {Zmie czcionk menu} 
menuText P OptionsFontsSmall "Maa" 0 {Zmie ma czcionk}
# ====== TODO To be translated ======
menuText P OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText P OptionsFontsFixed "Staa" 0 {Zmie czcionk staej szerokoci}
menuText P OptionsGInfo "Informacje o partii" 0 {Sposb wywietlania informacji o partii}
menuText P OptionsLanguage "Jzyk" 0 {Wybierz jzyk}
# ====== TODO To be translated ======
menuText P OptionsMovesTranslatePieces "Translate pieces" 0 {Translate first letter of pieces}
# ====== TODO To be translated ======
menuText P OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText P OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText P OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText P OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText P OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText P OptionsMoves "Posunicia" 0 {Wprowadzanie posuni}
menuText P OptionsMovesAsk "Zapytaj przed zastpieniem posuni" 0 \
  {Zapytaj przed zastpieniem aktualnych posuni}
menuText P OptionsMovesAnimate "Szybko animacji" 1 \
  {Ustaw czas przeznaczony na animacj jednego posunicia} 
menuText P OptionsMovesDelay "Automatyczne przegldanie..." 0 \
  {Ustaw opnienie przy automatycznym przegldaniu partii}
menuText P OptionsMovesCoord "Posunicia w formacie \"g1f3\"" 0 \
  {Akceptuj posunicia wprowadzone w formacie "g1f3"}
menuText P OptionsMovesSuggest "Poka proponowane posunicia" 1 \
  {Wcz/wycz proponowanie posuni}
# ====== TODO To be translated ======
menuText P OptionsShowVarPopup "Show variations window" 0 {Turn on/off the display of a variations window}  
# ====== TODO To be translated ======
menuText P OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}  
menuText P OptionsMovesKey "Automatyczne dopenianie posuni" 1 \
  {Wcz/wycz automatyczne dopenianie posuni wprowadzanych z klawiatury}
# ====== TODO To be translated ======
menuText P OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText P OptionsNumbers "Format zapisu liczb" 0 {Wybierz format zapisu liczb}
menuText P OptionsStartup "Start" 0 {Wybierz okna, ktre maj by widoczne po uruchomieniu programu}
# ====== TODO To be translated ======
menuText P OptionsTheme "Theme" 0 {Change look of interface}
menuText P OptionsWindows "Okna" 0 {Opcje okien}
menuText P OptionsWindowsIconify "Minimalizuj wszystkie okna" 0 \
  {Schowaj wszystkie okna przy minimalizacji gwnego okna}
menuText P OptionsWindowsRaise "Automatyczne uaktywnianie" 0 \
  {Automatycznie uaktywniaj niektre okna (np. pasek postpu), gdy s zasonite}
menuText P OptionsSounds "Sounds..." 2 {Configure move announcement sounds} ;# ***
# ====== TODO To be translated ======
menuText P OptionsWindowsDock "Dock windows" 0 {Dock windows}
# ====== TODO To be translated ======
menuText P OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
# ====== TODO To be translated ======
menuText P OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
# ====== TODO To be translated ======
menuText P OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
# ====== TODO To be translated ======
menuText P OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText P OptionsToolbar "Pasek narzdziowy" 6 \
  {Schowaj/poka pasek narzdziowy}
menuText P OptionsECO "Wczytaj ksik debiutow..." 16 \
  {Wczytaj plik z klasyfikacja debiutw}
menuText P OptionsSpell "Wczytaj plik sprawdzania pisowni..." 13 \
  {Wczytaj plik do sprawdzania pisowni nazwisk i nazw}
menuText P OptionsTable "Katalog z baz kocwek..." 10 \
  {Wybierz baz kocwek; uyte zostan wszystkie bazy z tego katalogu}
menuText P OptionsRecent "Ostatnie pliki..." 0 \
  {Zmie liczb ostatnio otwartych plikw, wywietlanych w menu Plik} 
# ====== TODO To be translated ======
menuText P OptionsBooksDir "Books directory..." 0 {Sets the opening books directory}
# ====== TODO To be translated ======
menuText P OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText P OptionsSave "Zapamitaj opcje" 0 \
  "Zapamitaj wszystkie ustawienia w pliku $::optionsFile"
menuText P OptionsAutoSave "Automatycznie zapisuj opcje" 0 \
  {Automatycznie zapisz opcje przy zamykaniu programu}

menuText P Help "Pomoc" 2
menuText P HelpContents "Contents" 0 {Poka spis treci pomocy} 
menuText P HelpIndex "Spis treci" 0 {Poka indeks pomocy}
menuText P HelpGuide "Krtki przewodnik" 0 {Poka krtki przewodnik}
menuText P HelpHints "Podpowiedzi" 0 {Poka podpowiedzi}
menuText P HelpContact "Informacja o autorze" 0 \
  {Poka informacj o autorze i stronie Scid-a}
menuText P HelpTip "Porada dnia" 0 {Poka porad Scida}
menuText P HelpStartup "Okno powitalne" 2 {Pokazuj okno startowe}
menuText P HelpAbout "O programie" 0 {Informacje o programie Scid}

# Game info box popup menu:
menuText P GInfoHideNext "Ukryj nastpne posunicie" 0
menuText P GInfoMaterial "Poka materia" 0
menuText P GInfoFEN "Poka pozycj w formacie FEN" 16
menuText P GInfoMarks "Pokazuj kolorowe pola i strzaki" 5 
menuText P GInfoWrap "Zawijaj dugie linie" 0
menuText P GInfoFullComment "Poka cay komentarz" 6
menuText P GInfoPhotos "Poka zdjcia" 5
menuText P GInfoTBNothing "Tablica kocwek: nic" 0
menuText P GInfoTBResult "Tablica kocwek: tylko wynik" 18
menuText P GInfoTBAll "Tablica kocwek: wszystko" 18
menuText P GInfoDelete "Usu/przywr t parti" 0
menuText P GInfoMark "Wcz/wycz zaznaczenie tej partii" 0
# ====== TODO To be translated ======
menuText P GInfoInformant "Configure informant values" 0

# Main window buttons:
helpMsg P .main.fbutton.button.start {Id do pocztku partii (klawisz: Home)}
helpMsg P .main.fbutton.button.end {Id na koniec partii  (klawisz: End)}
helpMsg P .main.fbutton.button.back {Cofnij o jedno posunicie  (klawisz: strzaka w lewo)}
helpMsg P .main.fbutton.button.forward {Jedno posunicie do przodu (klawisz: strzaka w prawo)}
helpMsg P .main.fbutton.button.intoVar {Wejd w wariant (klawisz skrtu: v)}
helpMsg P .main.fbutton.button.exitVar {Opu wariant (klawisz skrtu: z)}
helpMsg P .main.fbutton.button.flip {Obr szachownic  (klawisz skrtu: .)}
helpMsg P .main.fbutton.button.coords {Przecz wywietlanie opisu szachownicy  (klawisz skrtu: 0)}
helpMsg P .main.fbutton.button.stm {Przecz wywietlanie ikony koloru strony na posuniciu} 
helpMsg P .main.fbutton.button.autoplay \
  {Automatyczne przestawianie bierek (klawisz skrtu: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg P .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg P .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg P .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate P Back {Z powrotem}
translate P Browse {Przegldaj}
translate P Cancel {Anuluj}
# ====== TODO To be translated ======
translate P Continue {Continue}
translate P Clear {Wyczy}
translate P Close {Zamknij}
translate P Contents {Spis treci}
translate P Defaults {Domylne}
translate P Delete {Usu}
translate P Graph {Wykres}
translate P Help {Pomoc}
translate P Import {Pobierz}
translate P Index {Indeks}
translate P LoadGame {Wczytaj parti}
translate P BrowseGame {Przegldaj parti}
translate P MergeGame {Docz parti}
# ====== TODO To be translated ======
translate P MergeGames {Merge Games}
translate P Preview {Podgld}
translate P Revert {Odwr}
translate P Save {Zapisz}
translate P Search {Szukaj}
translate P Stop {Stop}
translate P Store {Zapamitaj}
translate P Update {Uaktualnij}
translate P ChangeOrient {Zmie pooenie okna}
translate P ShowIcons {Show Icons} ;# ***
translate P None {Brak}
translate P First {Pierwsza}
translate P Current {Aktualn}
translate P Last {Ostatni}

# General messages:
translate P game {partia}
translate P games {partie}
translate P move {posunicie}
translate P moves {pos.}
translate P all {wszystkie}
translate P Yes {Tak}
translate P No {Nie}
translate P Both {Oba}
translate P King {Krl}
translate P Queen {Hetman}
translate P Rook {Wiea}
translate P Bishop {Goniec}
translate P Knight {Skoczek}
translate P Pawn {Pion}
translate P White {Biae}
translate P Black {Czarne}
translate P Player {Gracz}
translate P Rating {Ranking}
translate P RatingDiff {Rnica rankingw}
translate P AverageRating {redni ranking}
translate P Event {Turniej}
translate P Site {Miejsce}
translate P Country {Kraj}
translate P IgnoreColors {Ignoruj kolory}
translate P Date {Data}
translate P EventDate {Turniej data}
translate P Decade {Dekada} 
translate P Year {Rok}
translate P Month {Miesic}
translate P Months {Stycze Luty Marzec Kwiecie Maj Czerwiec Lipiec Sierpie Wrzesie Padziernik Listopad Grudzie}
translate P Days {N Pn Wt r Cz Pt So}
translate P YearToToday {Ostatni rok}
translate P Result {Wynik}
translate P Round {Runda}
translate P Length {Dugo}
translate P ECOCode {Kod ECO}
translate P ECO {ECO}
translate P Deleted {Usunita}
translate P SearchResults {Wyniki wyszukiwania}
translate P OpeningTheDatabase "Otwieranie bazy"
translate P Database {Bazy}
translate P Filter {Filtr}
translate P noGames {brak partii}
translate P allGames {wszystkie partie}
translate P empty {brak}
translate P clipbase {schowek}
translate P score {punkty}
translate P StartPos {Pozycja pocztkowa}
translate P Total {Razem}
translate P readonly {tylko do odczytu}

# Standard error messages:
translate P ErrNotOpen {To nie jest otwarta baza.} 
translate P ErrReadOnly {Ta baza jest tylko do odczytu; nie mona jej zmieni.}
translate P ErrSearchInterrupted {Wyszukiwanie zostao przerwane. Wyniki bd niepene.}

# Game information:
translate P twin {powtrzona}
translate P deleted {usunita}
translate P comment {komentarz}
translate P hidden {ukryte}
translate P LastMove {Poprzednie}
translate P NextMove {nastpne}
translate P GameStart {Pocztek partii}
translate P LineStart {Pocztek wariantu}
translate P GameEnd {Koniec partii}
translate P LineEnd {Koniec wariantu}

# Player information:
translate P PInfoAll {Wyniki - <b>wszystkie</b> partie}
translate P PInfoFilter {Wyniki - partie z <b>filtra</b>}
translate P PInfoAgainst {Wyniki - }
translate P PInfoMostWhite {Najczstsze debiuty biaymi}
translate P PInfoMostBlack {Najczstsze debiuty czarnymi}
translate P PInfoRating {Historia rankingu}
translate P PInfoBio {Biografia}
translate P PInfoEditRatings {Modyfikuj rankingi} 

# Tablebase information:
translate P Draw {remis}
translate P stalemate {pat}
translate P withAllMoves {po dowolnym posuniciu}
translate P withAllButOneMove {po dowolnym posuniciu oprcz}
translate P with {po}
translate P only {tylko}
translate P lose {przegrywaj}
translate P loses {przegrywa}
translate P allOthersLose {inne posunicia przegrywaj}
translate P matesIn {matuj w}
translate P hasCheckmated {matuj}
translate P longest {najlepsze}
translate P WinningMoves {Wygrywajce posunicia}
translate P DrawingMoves {Remisujce posunicia} 
translate P LosingMoves {Przegrywajce posunicia} 
translate P UnknownMoves {Posunicia o nieznanej ocenie} 

# Tip of the day:
translate P Tip {Porada}
translate P TipAtStartup {Poka porad przy starcie}

# Tree window menus:
menuText P TreeFile "Plik" 0
# ====== TODO To be translated ======
menuText P TreeFileFillWithBase "Fill Cache with base" 0 {Fill the cache file with all games in current base}
# ====== TODO To be translated ======
menuText P TreeFileFillWithGame "Fill Cache with game" 0 {Fill the cache file with current game in current base}
# ====== TODO To be translated ======
menuText P TreeFileSetCacheSize "Cache size" 0 {Set the cache size}
# ====== TODO To be translated ======
menuText P TreeFileCacheInfo "Cache info" 0 {Get info on cache usage}
menuText P TreeFileSave "Zapisz bufor" 7 {Zapisz plik bufora (.stc)}
menuText P TreeFileFill "Twrz standardowy plik cache" 0 {Wstaw typowe pozycje debiutowe do bufora}
menuText P TreeFileBest "Najlepsze partie" 0 {Poka list najlepszych partii}
menuText P TreeFileGraph "Poka wykres" 0 {Poka wykres dla tej gazi drzewa}
menuText P TreeFileCopy "Kopiuj drzewo do schowka" 0 \
  {Skopiuj drzewo ze statystykami do schowka}
menuText P TreeFileClose "Zamknij" 0 {Zamknij okno drzewa}
# ====== TODO To be translated ======
menuText P TreeMask "Mask" 0
# ====== TODO To be translated ======
menuText P TreeMaskNew "New" 0 {New mask}
# ====== TODO To be translated ======
menuText P TreeMaskOpen "Open" 0 {Open mask}
# ====== TODO To be translated ======
menuText P TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
# ====== TODO To be translated ======
menuText P TreeMaskSave "Save" 0 {Save mask}
# ====== TODO To be translated ======
menuText P TreeMaskClose "Close" 0 {Close mask}
# ====== TODO To be translated ======
menuText P TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
# ====== TODO To be translated ======
menuText P TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
# ====== TODO To be translated ======
menuText P TreeMaskInfo "Info" 0 {Show statistics for current mask}
# ====== TODO To be translated ======
menuText P TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText P TreeMaskSearch "Search" 0 {Search in current mask}
menuText P TreeSort "Sortowanie" 0
menuText P TreeSortAlpha "Alfabetycznie" 0
menuText P TreeSortECO "Kod ECO" 0
menuText P TreeSortFreq "Czsto" 0
menuText P TreeSortScore "Punkty" 0
menuText P TreeOpt "Opcje" 0
# ====== TODO To be translated ======
menuText P TreeOptSlowmode "slow mode" 0 {Slow mode for updates (high accuracy)}
# ====== TODO To be translated ======
menuText P TreeOptFastmode "Fast mode" 0 {Fast mode for updates (no move transposition)}
# ====== TODO To be translated ======
menuText P TreeOptFastAndSlowmode "Fast and slow mode" 0 {Fast mode then slow mode for updates}
# ====== TODO To be translated ======
menuText P TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText P TreeOptLock "Blokada" 0 {Zablokuj/odblokuj drzewo na aktualnej bazie}
menuText P TreeOptTraining "Trening" 0 {Wcz/wycz tryb treningowy}
menuText P TreeOptAutosave "Automatyczny zapis bufora" 0 \
  {Automatycznie zapisz plik bufora przy wyjciu}
menuText P TreeHelp "Pomoc" 2
menuText P TreeHelpTree "Drzewo" 0
menuText P TreeHelpIndex "Spis treci" 0
translate P SaveCache {Zapisz bufor}
translate P Training {Trening}
translate P LockTree {Blokada}
translate P TreeLocked {zablokowane}
translate P TreeBest {Najlepsze}
translate P TreeBestGames {Najlepsze partie}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate P TreeTitleRow \
  {    Pos.   ECO       Czsto     Wynik  Rav   Rperf Rok   %Remis}
# {    Move   ECO       Frequency    Score  AvElo Perf AvYear %Draws}
translate P TreeTotal {RAZEM}
# ====== TODO To be translated ======
translate P DoYouWantToSaveFirst {Do you want to save first}
# ====== TODO To be translated ======
translate P AddToMask {Add to Mask}
# ====== TODO To be translated ======
translate P RemoveFromMask {Remove from Mask}
# ====== TODO To be translated ======
translate P AddThisMoveToMask {Add this move to Mask}
# ====== TODO To be translated ======
translate P SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate P DisplayMask {Display Mask}
# ====== TODO To be translated ======
translate P Nag {Nag code}
# ====== TODO To be translated ======
translate P Marker {Marker}
# ====== TODO To be translated ======
translate P Include {Include}
# ====== TODO To be translated ======
translate P Exclude {Exclude}
# ====== TODO To be translated ======
translate P MainLine {Main line}
# ====== TODO To be translated ======
translate P Bookmark {Bookmark}
# ====== TODO To be translated ======
translate P NewLine {New line}
# ====== TODO To be translated ======
translate P ToBeVerified {To be verified}
# ====== TODO To be translated ======
translate P ToTrain {To train}
# ====== TODO To be translated ======
translate P Dubious {Dubious}
# ====== TODO To be translated ======
translate P ToRemove {To remove}
# ====== TODO To be translated ======
translate P NoMarker {No marker}
# ====== TODO To be translated ======
translate P ColorMarker {Color}
# ====== TODO To be translated ======
translate P WhiteMark {White}
# ====== TODO To be translated ======
translate P GreenMark {Green}
# ====== TODO To be translated ======
translate P YellowMark {Yellow}
# ====== TODO To be translated ======
translate P BlueMark {Blue}
# ====== TODO To be translated ======
translate P RedMark {Red}
# ====== TODO To be translated ======
translate P CommentMove {Comment move}
# ====== TODO To be translated ======
translate P CommentPosition {Comment position}
# ====== TODO To be translated ======
translate P AddMoveToMaskFirst {Add move to mask first}
# ====== TODO To be translated ======
translate P OpenAMaskFileFirst {Open a mask file first}
# ====== TODO To be translated ======
translate P Positions {Positions}
# ====== TODO To be translated ======
translate P Moves {Moves}

# Finder window:
menuText P FinderFile "Plik" 0
menuText P FinderFileSubdirs "Przeszukuj podkatalogi" 0
menuText P FinderFileClose "Zamknij wyszukiwacza plikw" 0
menuText P FinderSort "Sortowanie" 0
menuText P FinderSortType "Typ" 0
menuText P FinderSortSize "Rozmiar" 0
menuText P FinderSortMod "Zmieniony" 0
menuText P FinderSortName "Nazwa" 0
menuText P FinderSortPath "cieka" 0
menuText P FinderTypes "Typy" 0
menuText P FinderTypesScid "Bazy Scid-a" 0
menuText P FinderTypesOld "Bazy Scid-a (stary format)" 1
menuText P FinderTypesPGN "Pliki PGN" 0
menuText P FinderTypesEPD "Ksiki debiutowe EPD" 0
menuText P FinderTypesRep "Pliki repertuaru debiutowego" 0
menuText P FinderHelp "Pomoc" 2
menuText P FinderHelpFinder "Pomoc poszukiwacza plikw" 1
menuText P FinderHelpIndex "Spis treci" 0
translate P FileFinder {Poszukiwacz plikw}
translate P FinderDir {Katalog}
translate P FinderDirs {Katalogi}
translate P FinderFiles {Pliki}
translate P FinderUpDir {wyej}
# ====== TODO To be translated ======
translate P FinderCtxOpen {Open}
# ====== TODO To be translated ======
translate P FinderCtxBackup {Backup}
# ====== TODO To be translated ======
translate P FinderCtxCopy {Copy}
# ====== TODO To be translated ======
translate P FinderCtxMove {Move}
# ====== TODO To be translated ======
translate P FinderCtxDelete {Delete}

# Player finder:
menuText P PListFile "Plik" 0
menuText P PListFileUpdate "Uaktualnij" 0
menuText P PListFileClose "Zamknij przegldark zawodnikw" 0
menuText P PListSort "Sortowanie" 0
menuText P PListSortName "Nazwisko" 0
menuText P PListSortElo "Elo" 0
menuText P PListSortGames "Partie" 0
menuText P PListSortOldest "Najstarsza" 0
menuText P PListSortNewest "Najnowsza" 0

# Tournament finder:
menuText P TmtFile "Plik" 0
menuText P TmtFileUpdate "Uaktualnij" 0
menuText P TmtFileClose "Zamknij turnieje" 0
menuText P TmtSort "Sortowanie" 0
menuText P TmtSortDate "Data" 0
menuText P TmtSortPlayers "Zawodnicy" 0
menuText P TmtSortGames "Partie" 0
menuText P TmtSortElo "Elo" 0
menuText P TmtSortSite "Miejsce" 0
menuText P TmtSortEvent "Turniej" 0
menuText P TmtSortWinner "Zwycizca" 0
translate P TmtLimit "Wielko listy"
translate P TmtMeanElo "Min. rednie ELO"
translate P TmtNone "Nie znaleziono turniejw."

# Graph windows:
menuText P GraphFile "Plik" 0
menuText P GraphFileColor "Zapisz jako kolorowy PostScript" 12
menuText P GraphFileGrey "Zapisz jako zwyky PostScript..." 0
menuText P GraphFileClose "Zamknij okno" 6
menuText P GraphOptions "Opcje" 0
menuText P GraphOptionsWhite "Biae" 0
menuText P GraphOptionsBlack "Czarne" 0
menuText P GraphOptionsBoth "Oba kolory" 1
menuText P GraphOptionsPInfo "Gracz z Informacji o graczu" 0
translate P GraphFilterTitle "Filtr: czsto na 1000 partii" 
# ====== TODO To be translated ======
translate P GraphAbsFilterTitle "Filter Graph: frequency of the games"
# ====== TODO To be translated ======
translate P ConfigureFilter {Configure X-Axes for Year, Rating and Moves}
# ====== TODO To be translated ======
translate P FilterEstimate "Estimate"
# ====== TODO To be translated ======
translate P TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate P AddVariation {Dodaj wariant}
# ====== TODO To be translated ======
translate P AddAllVariations {Add All Variations}
translate P AddMove {Dodaj posunicie}
translate P Annotate {Komentuj}
# ====== TODO To be translated ======
translate P ShowAnalysisBoard {Show analysis board}
# ====== TODO To be translated ======
translate P ShowInfo {Show engine info}
# ====== TODO To be translated ======
translate P FinishGame {Finish game}
# ====== TODO To be translated ======
translate P StopEngine {Stop engine}
# ====== TODO To be translated ======
translate P StartEngine {Start engine}
# ====== TODO To be translated ======
translate P LockEngine {Lock engine to current position}
translate P AnalysisCommand {Program do analizy}
translate P PreviousChoices {Poprzednie programy}
translate P AnnotateTime {Czas midzy ruchami (w sekundach)}
translate P AnnotateWhich {Dodaj warianty}
translate P AnnotateAll {Dla obu stron}
# ====== TODO To be translated ======
translate P AnnotateAllMoves {Annotate all moves}
translate P AnnotateWhite {Dla biaych}
translate P AnnotateBlack {Dla czarnych}
# ====== TODO To be translated ======
translate P AnnotateBlundersOnly {When game move is an obvious blunder}
# ====== TODO To be translated ======
translate P AnnotateBlundersOnlyScoreChange {Analysis reports blunder, with score change from/to: }
# ====== TODO To be translated ======
translate P BlundersThreshold {Threshold}
# TODO: Translate
translate P ScoreAllMoves {Score all moves}
translate P LowPriority {Niski priorytet CPU} 
# ====== TODO To be translated ======
translate P ClickHereToSeeMoves {Click here to see moves}
# ====== TODO To be translated ======
translate P ConfigureInformant {Configure Informant}
# ====== TODO To be translated ======
translate P Informant!? {Interesting move}
# ====== TODO To be translated ======
translate P Informant? {Poor move}
# ====== TODO To be translated ======
translate P Informant?? {Blunder}
# ====== TODO To be translated ======
translate P Informant?! {Dubious move}
# ====== TODO To be translated ======
translate P Informant+= {White has a slight advantage}
# ====== TODO To be translated ======
translate P Informant+/- {White has a moderate advantage}
# ====== TODO To be translated ======
translate P Informant+- {White has a decisive advantage}
# ====== TODO To be translated ======
translate P Informant++- {The game is considered won}
# ====== TODO To be translated ======
translate P Book {Book}
# ====== TODO To be translated ======
translate P OtherBookMoves {Opponent's book}
# ====== TODO To be translated ======
translate P OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate P EngineList {Programy szachowe}
translate P EngineName {Nazwa}
translate P EngineCmd {Polecenie}
translate P EngineArgs {Parametry} 
translate P EngineDir {Katalog}
translate P EngineElo {Elo}
translate P EngineTime {Data}
translate P EngineNew {Dodaj}
translate P EngineEdit {Edytuj}
translate P EngineRequired {Pola wytuszczone s konieczne; reszta opcjonalna} 

# Stats window menus:
menuText P StatsFile "Plik" 0
menuText P StatsFilePrint "Zapisz do pliku..." 7
menuText P StatsFileClose "Zamknij" 0
menuText P StatsOpt "Opcje" 0

# PGN window menus:
menuText P PgnFile "Plik" 0
menuText P PgnFileCopy "Kopiuj parti do schowka" 0
menuText P PgnFilePrint "Zapisz do pliku..." 7
menuText P PgnFileClose "Zamknij" 0
menuText P PgnOpt "Wygld" 0
menuText P PgnOptColor "Wywietlanie w kolorach" 0
menuText P PgnOptShort "Krtki (3-wierszowy) nagwek" 0
menuText P PgnOptSymbols "Symbole Informatora" 0
menuText P PgnOptIndentC "Wcinaj komentarze" 7
menuText P PgnOptIndentV "Wcinaj warianty" 7
menuText P PgnOptColumn "Kolumny (jedno posunicie w wierszu)" 0
menuText P PgnOptSpace "Spacja po numerze ruchu" 0
menuText P PgnOptStripMarks "Usu kody kolorowych pl i strzaek" 0
menuText P PgnOptBoldMainLine "Use Bold Text for Main Line Moves" 4 ;# ***
menuText P PgnColor "Kolory" 0
menuText P PgnColorHeader "Nagwek..." 0
menuText P PgnColorAnno "Uwagi..." 3
menuText P PgnColorComments "Komentarze..." 0
menuText P PgnColorVars "Warianty..." 0
menuText P PgnColorBackground "To..." 0
# ====== TODO To be translated ======
menuText P PgnColorMain "Main line..." 0
# ====== TODO To be translated ======
menuText P PgnColorCurrent "Current move background..." 1
menuText P PgnHelp "Pomoc" 2
menuText P PgnHelpPgn "PGN" 0
menuText P PgnHelpIndex "Spis treci" 0
translate P PgnWindowTitle {Game Notation - game %u} ;# ***

# Crosstable window menus:
menuText P CrosstabFile "Plik" 0
menuText P CrosstabFileText "Zapisz w pliku tekstowym..." 15
menuText P CrosstabFileHtml "Zapisz w pliku HTML..." 15
menuText P CrosstabFileLaTeX "Zapisz w pliku LaTeX-a..." 15
menuText P CrosstabFileClose "Zamknij" 0
menuText P CrosstabEdit "Edytuj" 0
menuText P CrosstabEditEvent "Turniej" 0
menuText P CrosstabEditSite "Miejsce" 0
menuText P CrosstabEditDate "Data" 0
menuText P CrosstabOpt "Wywietlanie" 0
menuText P CrosstabOptAll "Turniej koowy" 0
menuText P CrosstabOptSwiss "Szwajcar" 0
menuText P CrosstabOptKnockout "Knockout" 0
menuText P CrosstabOptAuto "Automatycznie" 0
menuText P CrosstabOptAges "Wiek" 0
menuText P CrosstabOptNats "Narodowo" 0
menuText P CrosstabOptRatings "Ranking" 0
menuText P CrosstabOptTitles "Tytu" 0
menuText P CrosstabOptBreaks "Punkty pomocnicze" 1
menuText P CrosstabOptDeleted "Uwzgldniaj usunite partie" 0
menuText P CrosstabOptColors "Kolory (tylko szwajcar)" 0
menuText P CrosstabOptColumnNumbers "Numerowane kolumny (tylko turniej koowy)" 0
menuText P CrosstabOptGroup "Grupuj po liczbie punktw" 0
menuText P CrosstabSort "Sortowanie" 0
menuText P CrosstabSortName "Nazwisko" 0
menuText P CrosstabSortRating "Ranking" 0
menuText P CrosstabSortScore "Punkty" 0
menuText P CrosstabColor "Kolor" 0
menuText P CrosstabColorPlain "Zwyky tekst" 0
menuText P CrosstabColorHyper "Hipertekst" 0
menuText P CrosstabHelp "Pomoc" 2
menuText P CrosstabHelpCross "Tabela turniejowa" 0
menuText P CrosstabHelpIndex "Spis treci" 0
translate P SetFilter {Ustaw filtr}
translate P AddToFilter {Dodaj do filtra}
translate P Swiss {Szwajcar}
translate P Category {Kategoria} 

# Opening report window menus:
menuText P OprepFile "Plik" 0
menuText P OprepFileText "Zapisz w pliku tekstowym..." 15
menuText P OprepFileHtml "Zapisz w pliku HTML..." 15
menuText P OprepFileLaTeX "Zapisz w pliku LaTeX-a..." 15
menuText P OprepFileOptions "Opcje" 2
menuText P OprepFileClose "Zamknij okno raportu" 0
menuText P OprepFavorites "Ulubione" 1 
menuText P OprepFavoritesAdd "Dodaj raport..." 0 
menuText P OprepFavoritesEdit "Modyfikuj ulubione..." 0
menuText P OprepFavoritesGenerate "Twrz raporty..." 0 
menuText P OprepHelp "Pomoc" 2
menuText P OprepHelpReport "Pomoc raportu debiutowego" 0
menuText P OprepHelpIndex "Spis treci" 0

# Repertoire editor:
menuText P RepFile "Plik" 0
menuText P RepFileNew "Nowy" 0
menuText P RepFileOpen "Otwrz..." 0
menuText P RepFileSave "Zapisz" 0
menuText P RepFileSaveAs "Zapisz jako..." 7
menuText P RepFileClose "Zamknij" 3
menuText P RepEdit "Edytuj" 0
menuText P RepEditGroup "Dodaj grup" 6
menuText P RepEditInclude "Wcz wariant" 0
menuText P RepEditExclude "Wycz wariant" 1
menuText P RepView "Widok" 0
menuText P RepViewExpand "Rozwi wszystkie grupy" 0
menuText P RepViewCollapse "Zwi wszystkie grupy" 0
menuText P RepSearch "Szukaj" 0
menuText P RepSearchAll "Wszystkie warianty..." 0
menuText P RepSearchDisplayed "Tylko widoczne warianty..." 0
menuText P RepHelp "Pomoc" 2
menuText P RepHelpRep "Repertuar debiutowy" 0
menuText P RepHelpIndex "Spis treci" 0
translate P RepSearch "Poszukiwanie wariantw"
translate P RepIncludedLines "wczone warianty"
translate P RepExcludedLines "wyczone warianty"
translate P RepCloseDialog {Ten repertuar ma niezapisane zmiany.

Na pewno zamkn repertuar, rezygnujc z wszelkich zmian?
}

# Header search:
translate P HeaderSearch {Wyszukiwanie wg nagwka}
translate P EndSideToMove {Side to move at end of game} ;# ***
translate P GamesWithNoECO {Partie bez ECO?}
translate P GameLength {Dugo}
translate P FindGamesWith {Znajd partie}
translate P StdStart {caa partia}
translate P Promotions {z promocj}
translate P Comments {Komentarze}
translate P Variations {Warianty}
translate P Annotations {Uwagi}
translate P DeleteFlag {Usuwanie}
translate P WhiteOpFlag {Debiut - biae}
translate P BlackOpFlag {Debiut - czarne}
translate P MiddlegameFlag {Gra rodkowa}
translate P EndgameFlag {Kocwka}
translate P NoveltyFlag {Nowinka}
translate P PawnFlag {Struktura pionowa}
translate P TacticsFlag {Taktyka}
translate P QsideFlag {Gra na skrzydle hetmaskim}
translate P KsideFlag {Gra na skrzydle krlewskim}
translate P BrilliancyFlag {Nagroda za pikno}
translate P BlunderFlag {Podstawka}
translate P UserFlag {Inne}
translate P PgnContains {PGN zawiera tekst}
# ====== TODO To be translated ======
translate P Annotator {Annotator}
# ====== TODO To be translated ======
translate P Cmnts {Annotated games only}

# Game list window:
translate P GlistNumber {Numer}
translate P GlistWhite {Biae}
translate P GlistBlack {Czarne}
translate P GlistWElo {B-Elo}
translate P GlistBElo {C-Elo}
translate P GlistEvent {Turniej}
translate P GlistSite {Miejsce}
translate P GlistRound {Runda}
translate P GlistDate {Data}
translate P GlistYear {Rok}
translate P GlistEDate {Turniej-Data}
translate P GlistResult {Wynik}
translate P GlistLength {Dugo}
translate P GlistCountry {Kraj}
translate P GlistECO {ECO}
translate P GlistOpening {Debiut}
translate P GlistEndMaterial {Materia}
translate P GlistDeleted {Usunita}
translate P GlistFlags {Oznaczenie}
translate P GlistVars {Warianty}
translate P GlistComments {Komentarze}
translate P GlistAnnos {Uwagi}
translate P GlistStart {Pozycja pocztkowa}
translate P GlistGameNumber {Numer partii}
# ====== TODO To be translated ======
translate P GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate P GlistRating {Rating}
translate P GlistFindText {Znajd tekst}
translate P GlistMoveField {Przesu}
translate P GlistEditField {Konfiguruj}
translate P GlistAddField {Dodaj}
translate P GlistDeleteField {Usu}
translate P GlistWidth {Szeroko}
translate P GlistAlign {Wyrwnanie}
# ====== TODO To be translated ======
translate P GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate P GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate P GlistAlignC {Align: center}
translate P GlistColor {Kolor}
translate P GlistSep {Separator}
# ====== TODO To be translated ======
translate P GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate P GlistNewSort {New}
# ====== TODO To be translated ======
translate P GlistAddToSort {Add}
# ====== TODO To be translated ======
translate P GsortSort {Sort...}
# ====== TODO To be translated ======
translate P GsortDate {Date}
# ====== TODO To be translated ======
translate P GsortYear {Year}
# ====== TODO To be translated ======
translate P GsortEvent {Event}
# ====== TODO To be translated ======
translate P GsortSite {Site}
# ====== TODO To be translated ======
translate P GsortRound {Round}
# ====== TODO To be translated ======
translate P GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate P GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate P GsortECO {ECO}
# ====== TODO To be translated ======
translate P GsortResult {Result}
# ====== TODO To be translated ======
translate P GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate P GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate P GsortCountry {Country}
# ====== TODO To be translated ======
translate P GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate P GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate P GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate P GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate P GsortComments {Comments}
# ====== TODO To be translated ======
translate P GsortVariations {Variations}
# ====== TODO To be translated ======
translate P GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate P GsortAscending {Ascending}
# ====== TODO To be translated ======
translate P GsortDescending {Descending}
# ====== TODO To be translated ======
translate P GsortAdd {Add}
# ====== TODO To be translated ======
translate P GsortStore {Store}
# ====== TODO To be translated ======
translate P GsortLoad {Load}
# ====== TODO To be translated ======
translate P GlistRemoveThisGameFromFilter  {Remove this game from Filter}
# ====== TODO To be translated ======
translate P GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
# ====== TODO To be translated ======
translate P GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
# ====== TODO To be translated ======
translate P GlistDeleteGame {(Un)Delete this game} 
# ====== TODO To be translated ======
translate P GlistDeleteAllGames {Delete all games in filter} 
# ====== TODO To be translated ======
translate P GlistUndeleteAllGames {Undelete all games in filter} 
# ====== TODO To be translated ======
translate P GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate P DatabaseName {Nazwa bazy:}
translate P TypeIcon {Ikona:}
translate P NumOfGames {Liczba partii:}
translate P NumDeletedGames {Liczba usunitych partii:}
translate P NumFilterGames {Liczba partii w filtrze:}
translate P YearRange {Data:}
translate P RatingRange {Ranking:}
translate P Description {Opis} 
translate P Flag {Oznaczenie:}
# ====== TODO To be translated ======
translate P CustomFlags {Custom flags}
translate P DeleteCurrent {Usu aktualn parti}
translate P DeleteFilter {Usu partie z filtra}
translate P DeleteAll {Usu wszystkie partie}
translate P UndeleteCurrent {Odzyskaj aktualn parti}
translate P UndeleteFilter {Odzyskaj partie z filtra}
translate P UndeleteAll {Odzyskaj wszystkie partie}
translate P DeleteTwins {Usu powtrzone partie}
translate P MarkCurrent {Zaznacz aktualn parti}
translate P MarkFilter {Zaznacz partie z filtra}
translate P MarkAll {Zaznacz wszystkie partie z filtra}
translate P UnmarkCurrent {Usu zaznaczenie aktualnej partii}
translate P UnmarkFilter {Usu zaznaczenie partii z filtra}
translate P UnmarkAll {Usu zaznaczenie wszystkich partii}
translate P Spellchecking {Pisownia}
translate P Players {Zawodnicy}
translate P Events {Turnieje}
translate P Sites {Miejsca}
translate P Rounds {Rundy}
translate P DatabaseOps {Operacje bazodanowe}
translate P ReclassifyGames {Klasyfikacja debiutowa}
translate P CompactDatabase {Uporzdkuj baz}
translate P SortDatabase {Sortuj baz}
translate P AddEloRatings {Dodaj rankingi ELO}
translate P AutoloadGame {Domylna partia}
translate P StripTags {Usu znaczniki PGN} 
translate P StripTag {Usu znacznik}
translate P Cleaner {Zestaw zada}
translate P CleanerHelp {
Zestaw zada pozwala wykona od razu kilka operacji porzdkowania bazy. Operacje wybrane z listy
zostan wykonane na aktualnej bazie.

Do klasyfikacji debiutowej i usuwania powtrzonych partii uyte zostan aktualne ustawienia.
}
translate P CleanerConfirm {
Kiedy wykonanie zestawu zada zostanie rozpoczte, nie bdzie mona ju go przerwa.

Na duej bazie moe to zaj duo czasu (zaley to rwnie od wybranego zestawu zada i ich
ustawie).

Na pewno wykona wybrane zadania?
}
# ====== TODO To be translated ======
translate P TwinCheckUndelete {to flip; "u" undeletes both)}
# ====== TODO To be translated ======
translate P TwinCheckprevPair {Previous pair}
# ====== TODO To be translated ======
translate P TwinChecknextPair {Next pair}
# ====== TODO To be translated ======
translate P TwinChecker {Scid: Twin game checker}
# ====== TODO To be translated ======
translate P TwinCheckTournament {Games in tournament:}
# ====== TODO To be translated ======
translate P TwinCheckNoTwin {No twin  }
# ====== TODO To be translated ======
translate P TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
# ====== TODO To be translated ======
translate P TwinCheckTag {Share tags...}
# ====== TODO To be translated ======
translate P TwinCheckFound1 {Scid found $result twin games}
# ====== TODO To be translated ======
translate P TwinCheckFound2 { and set their delete flags}
# ====== TODO To be translated ======
translate P TwinCheckNoDelete {There are no games in this database to delete.}
# ====== TODO To be translated ======
translate P TwinCriteria1 { Your settings for finding twin games are potentially likely to\ncause non-twin games with similar moves to be marked as twins.}
# ====== TODO To be translated ======
translate P TwinCriteria2 {It is recommended that if you select "No" for "same moves", you should select "Yes" for the colors, event, site, round, year and month settings.\nDo you want to continue and delete twins anyway? }
# ====== TODO To be translated ======
translate P TwinCriteria3 {It is recommended that you specify "Yes" for at least two of the "same site", "same round" and "same year" settings.\nDo you want to continue and delete twins anyway?}
# ====== TODO To be translated ======
translate P TwinCriteriaConfirm {Scid: Confirm twin settings}
# ====== TODO To be translated ======
translate P TwinChangeTag "Change the following game tags:\n\n"
# ====== TODO To be translated ======
translate P AllocRatingDescription "This command will use the current spellcheck file to add Elo ratings to games in this database. Wherever a player has no currrent rating but his/her rating at the time of the game is listed in the spellcheck file, that rating will be added."
# ====== TODO To be translated ======
translate P RatingOverride "Overwrite existing non-zero ratings?"
# ====== TODO To be translated ======
translate P AddRatings "Add ratings to:"
# ====== TODO To be translated ======
translate P AddedRatings {Scid added $r Elo ratings in $g games.}
# ====== TODO To be translated ======
translate P NewSubmenu "New submenu"

# Comment editor:
translate P AnnotationSymbols  {Symbole:}
translate P Comment {Komentarz:}
translate P InsertMark {Wstaw znak}
translate P InsertMarkHelp {
Insert/remove mark: Select color, type, square.
Insert/remove arrow: Right-click two squares.
} ;# ***

# Nag buttons in comment editor:
translate P GoodMove {Good move} ;# ***
translate P PoorMove {Poor move} ;# ***
translate P ExcellentMove {Excellent move} ;# ***
translate P Blunder {Podstawka}
translate P InterestingMove {Interesting move} ;# ***
translate P DubiousMove {Dubious move} ;# ***
translate P WhiteDecisiveAdvantage {White has a decisive advantage} ;# ***
translate P BlackDecisiveAdvantage {Black has a decisive advantage} ;# ***
translate P WhiteClearAdvantage {White has a clear advantage} ;# ***
translate P BlackClearAdvantage {Black has a clear advantage} ;# ***
translate P WhiteSlightAdvantage {White has a slight advantage} ;# ***
translate P BlackSlightAdvantage {Black has a slight advantage} ;# ***
translate P Equality {Equality} ;# ***
translate P Unclear {Unclear} ;# ***
translate P Diagram {Diagram} ;# ***

# Board search:
translate P BoardSearch {Wyszukiwanie wg pozycji}
translate P FilterOperation {Operacje na aktualnym filtrze:}
translate P FilterAnd {I (ogranicz filtr)}
translate P FilterOr {LUB (dodaj do filtra)}
translate P FilterIgnore {NOWY (ignoruj poprzedni filtr)}
translate P SearchType {Typ wyszukiwania:}
translate P SearchBoardExact {Identyczna pozycja (bierki na tych samych polach)}
translate P SearchBoardPawns {Pionki (ten sam materia, pionki na tych samych polach)}
translate P SearchBoardFiles {Kolumny (ten sam materia, pionki na tych samych kolumnach)}
translate P SearchBoardAny {Materia (ten sam materia, pozycja dowolna)}
# ====== TODO To be translated ======
translate P SearchInRefDatabase { Search in base }
translate P LookInVars {Przeszukuj warianty}

# Material search:
translate P MaterialSearch {Wyszukiwanie wg materiau}
translate P Material {Materia}
translate P Patterns {Wzorce}
translate P Zero {Brak}
translate P Any {Dowolny}
translate P CurrentBoard {Aktualna pozycja}
translate P CommonEndings {Typowe kocwki}
translate P CommonPatterns {Typowe wzorce}
translate P MaterialDiff {Przewaga materialna}
translate P squares {pola}
translate P SameColor {jednopolowe}
translate P OppColor {rnopolowe}
translate P Either {dowolne}
translate P MoveNumberRange {Zakres posuni}
translate P MatchForAtLeast {Pasuje min.}
translate P HalfMoves {pruchy}

# Common endings in material search:
translate P EndingPawns {Pawn endings} ;# ***
translate P EndingRookVsPawns {Rook vs. Pawn(s)} ;# ***
translate P EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook} ;# ***
translate P EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook} ;# ***
translate P EndingRooks {Rook vs. Rook endings} ;# ***
translate P EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn} ;# ***
translate P EndingRooksDouble {Double Rook endings} ;# ***
translate P EndingBishops {Bishop vs. Bishop endings} ;# ***
translate P EndingBishopVsKnight {Bishop vs. Knight endings} ;# ***
translate P EndingKnights {Knight vs. Knight endings} ;# ***
translate P EndingQueens {Queen vs. Queen endings} ;# ***
translate P EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen} ;# ***
translate P BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame} ;# ***

# Common patterns in material search:
translate P PatternWhiteIQP {White IQP} ;# ***
translate P PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6} ;# ***
translate P PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6} ;# ***
translate P PatternBlackIQP {Black IQP} ;# ***
translate P PatternWhiteBlackIQP {White IQP vs. Black IQP} ;# ***
translate P PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple} ;# ***
translate P PatternHangingC5D5 {Black Hanging Pawns on c5 and d5} ;# ***
translate P PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)} ;# ***
translate P PatternRookSacC3 {Rook Sacrifice on c3} ;# ***
translate P PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;# ***
translate P PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;# ***
translate P PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)} ;# ***
translate P PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)} ;# ***
translate P PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)} ;# ***

# Game saving:
translate P Today {Dzisiaj}
translate P ClassifyGame {Klasyfikacja debiutowa}

# Setup position:
translate P EmptyBoard {Pusta szachownica}
translate P InitialBoard {Pozycja pocztkowa}
translate P SideToMove {Na posuniciu}
translate P MoveNumber {Posunicie nr}
translate P Castling {Roszada}
translate P EnPassantFile {Bicie w przelocie}
translate P ClearFen {Kopiuj FEN}
translate P PasteFen {Wklej pozycj FEN}
# ====== TODO To be translated ======
translate P SaveAndContinue {Save and continue}
# ====== TODO To be translated ======
translate P DiscardChangesAndContinue {Discard changes\nand continue}
# ====== TODO To be translated ======
translate P GoBack {Go back}

# Replace move dialog:
translate P ReplaceMove {Zmie posunicie}
translate P AddNewVar {Dodaj wariant}
# ====== TODO To be translated ======
translate P NewMainLine {New Main Line}
translate P ReplaceMoveMessage {Posunicie ju istnieje.

Moesz je zastpi, usuwajc dalszy cig partii lub doda nowy wariant.

(Mona wyczy to ostrzeenie, wyczajc opcj  "Zapytaj przed zastpieniem posuni" w menu
Opcje:Posunicia)}

# Make database read-only dialog:
translate P ReadOnlyDialog {Jeli zabezpieczysz t baz przed zapisem, zmiany bd zablokowane
adna partia nie bdzie zapisana ani zmodyfikowana, adne flagi nie bd zmienione.
Sortowanie i klasyfikacja debiutowa bd tylko tymczasowe.

eby usun zabezpieczenie przez zapisem, wystarczy zamkn baz i otworzy j ponownie.

Na pewno zabezpieczy baz przed zapisem?}

# Clear game dialog:
translate P ClearGameDialog {Partia zostaa zmieniona.

Na pewno kontynuowa, rezygnujc z wszelkich zmian?
}

# Exit dialog:
translate P ExitDialog {Na pewno zakoczy prac z programem?}
translate P ExitUnsaved {Nastpujce bazy zawieraj niezapisane zmiany. Jeli zamkniesz program teraz, zmiany zostan utracone.} 

# Import window:
translate P PasteCurrentGame {Wklej aktualn parti}
translate P ImportHelp1 {Wprowad lub wklej parti w formacie PGN w ponisz ramk.}
translate P ImportHelp2 {Tu bd wywietlane bdy przy importowaniu partii.}
# ====== TODO To be translated ======
translate P OverwriteExistingMoves {Overwrite existing moves ?}

# ECO Browser:
translate P ECOAllSections {Wszystkie kody ECO}
translate P ECOSection {Cz ECO}
translate P ECOSummary {Podsumowanie dla}
translate P ECOFrequency {Czstoci kodw dla}

# Opening Report:
translate P OprepTitle {Raport debiutowy}
translate P OprepReport {Raport}
translate P OprepGenerated {Utworzony przez}
translate P OprepStatsHist {Statystyka i historia}
translate P OprepStats {Statystyka}
translate P OprepStatAll {Wszystkie partie}
translate P OprepStatBoth {Obaj zawodnicy z Elo}
translate P OprepStatSince {Od}
translate P OprepOldest {Najdawniejsze partie}
translate P OprepNewest {Ostatnie partie}
translate P OprepPopular {Popularno}
translate P OprepFreqAll {Czsto w caej bazie:         }
translate P OprepFreq1   {W ostatnim roku:                }
translate P OprepFreq5   {W ostatnich piciu latach:      }
translate P OprepFreq10  {W ostatnich dziesiciu latach:  }
translate P OprepEvery {co %u partii}
translate P OprepUp {wicej o %u%s ni w caej bazie}
translate P OprepDown {mniej o %u%s ni w caej bazie}
translate P OprepSame {jak w caej bazie}
translate P OprepMostFrequent {Gracze najczciej stosujcy wariant}
translate P OprepMostFrequentOpponents {Przeciwnicy} 
translate P OprepRatingsPerf {Rankingi i wyniki}
translate P OprepAvgPerf {rednie rankingi i wyniki}
translate P OprepWRating {Ranking biaych}
translate P OprepBRating {Ranking czarnych}
translate P OprepWPerf {Wynik biaych}
translate P OprepBPerf {Wynik czarnych}
translate P OprepHighRating {Partie graczy o najwyszym rednim rankingu}
translate P OprepTrends {Wyniki}
translate P OprepResults {Dugo partii i czstoci}
translate P OprepLength {Dugo partii}
translate P OprepFrequency {Czsto}
translate P OprepWWins {Zwycistwa biaych:  }
translate P OprepBWins {Zwycistwa czarnych: }
translate P OprepDraws {Remisy:              }
translate P OprepWholeDB {caa baza}
translate P OprepShortest {Najkrtsze zwycistwa}
translate P OprepMovesThemes {Posunicia i motywy}
translate P OprepMoveOrders {Posunicia prowadzce do badanej pozycji}
translate P OprepMoveOrdersOne \
  {Badana pozycja powstawaa jedynie po posuniciach:}
translate P OprepMoveOrdersAll \
  {Badana pozycja powstawaa na %u sposobw:}
translate P OprepMoveOrdersMany \
  {Badana pozycja powstawaa na %u sposobw. Najczstsze %u to:}
translate P OprepMovesFrom {Posunicia w badanej pozycji}
translate P OprepMostFrequentEcoCodes {Najczstsze kody ECO} 
translate P OprepThemes {Motywy pozycyjne}
translate P OprepThemeDescription {Czsto motyww w pierwszych %u posuniciach partii} 
translate P OprepThemeSameCastling {Jednostronne roszady}
translate P OprepThemeOppCastling {Rnostronne roszady}
translate P OprepThemeNoCastling {Obie strony bez roszady}
translate P OprepThemeKPawnStorm {Atak pionowy na skrzydle krlewskim}
translate P OprepThemeQueenswap {Wymiana hetmanw}
translate P OprepThemeWIQP {Izolowany pion biaych} 
translate P OprepThemeBIQP {Izolowany pion czarnych}
translate P OprepThemeWP567 {Biay pion na 5/6/7 linii}
translate P OprepThemeBP234 {Czarny pion na 2/3/4 linii}
translate P OprepThemeOpenCDE {Otwarta kolumna c/d/e}
translate P OprepTheme1BishopPair {Jedna ze stron ma par gocw}
translate P OprepEndgames {Kocwki}
translate P OprepReportGames {Partie raportu}
translate P OprepAllGames {Wszystkie partie}
translate P OprepEndClass {Materia w pozycji kocowej}
translate P OprepTheoryTable {Teoria}
translate P OprepTableComment {Utworzono z %u partii o najwyszym rednim rankingu.}
translate P OprepExtraMoves {Dodatkowe posunicia w przypisach}
translate P OprepMaxGames {Maksymalna liczba partii w teorii}
translate P OprepViewHTML {rdo HTML} 
translate P OprepViewLaTeX {rdo LaTeX} 

# Player Report:
translate P PReportTitle {Raport o graczu}
translate P PReportColorWhite {with the White pieces} ;# ***
translate P PReportColorBlack {with the Black pieces} ;# ***
translate P PReportMoves {po %s}
translate P PReportOpenings {Debiuty}
translate P PReportClipbase {Wyczy schowek i skopiuj do niego wybrane partie}

# Piece Tracker window:
translate P TrackerSelectSingle {Lewy przycisk wybiera t figur.}
translate P TrackerSelectPair {Lewy przycisk wybiera t figur; prawy obie takie figury.}
translate P TrackerSelectPawn {Lewy przycisk wybiera tego piona; prawy wszystkie 8 pionw.}
translate P TrackerStat {Statystyka}
translate P TrackerGames {% partie z posuniciem na tym pole}
translate P TrackerTime {% czasu na tym polu}
translate P TrackerMoves {Posunicia}
translate P TrackerMovesStart {Podaj numer posunicia, od ktrego zacz ledzenie.}
translate P TrackerMovesStop {Podaj numer posunicia, na ktrym skoczy ledzenie.}

# Game selection dialogs:
translate P SelectAllGames {Wszystkie partie w bazie}
translate P SelectFilterGames {Partie w filtrze}
translate P SelectTournamentGames {Tylko partie z aktualnego turnieju}
translate P SelectOlderGames {Tylko wczeniejsze partie}

# Delete Twins window:
translate P TwinsNote {Partie zostan uznane za identyczne, jeli zostay rozegrane przez tych samych graczy i speniaj ustawione poniej kryteria. Krtsza z partii zostanie usunita. Uwaga: dobrze przez wyszukaniem powtrzonych partii sprawdzi pisowni nazwisk.}
translate P TwinsCriteria {Kryteria: co musi by jednakowe w obu partiach?}
translate P TwinsWhich {Przeszukiwane partie}
translate P TwinsColors {Kolory}
translate P TwinsEvent {Turniej:}
translate P TwinsSite {Miejsce:}
translate P TwinsRound {Runda:}
translate P TwinsYear {Rok:}
translate P TwinsMonth {Miesic:}
translate P TwinsDay {Dzie:}
translate P TwinsResult {Wynik:}
translate P TwinsECO {Kod ECO:}
translate P TwinsMoves {Posunicia:}
translate P TwinsPlayers {Porwnywanie nazwisk:}
translate P TwinsPlayersExact {Dokadne}
translate P TwinsPlayersPrefix {Tylko pierwsze 4 litery}
translate P TwinsWhen {Usuwanie znalezionych powtrzonych partii}
translate P TwinsSkipShort {Pomija partie krtsze ni 5 posuni?}
translate P TwinsUndelete {Odzyska wszystkie partie przed poszukiwaniem?}
translate P TwinsSetFilter {Wstawi wszystkie usunite partie do filtra?}
translate P TwinsComments {Zawsze zachowywa partie komentowane?}
translate P TwinsVars {Zawsze zachowywa partie z wariantami?}
translate P TwinsDeleteWhich {Ktr parti usun:} 
translate P TwinsDeleteShorter {Krtsz} 
translate P TwinsDeleteOlder {O niszym numerze}
translate P TwinsDeleteNewer {O wyszym numerze}
translate P TwinsDelete {Usu partie}

# Name editor window:
translate P NameEditType {Nazwa do wyboru}
translate P NameEditSelect {Partie do edycji}
translate P NameEditReplace {Zastp}
translate P NameEditWith {przez}
translate P NameEditMatches {Pasujce: Ctrl+1 do Ctrl+9 wybiera}
# ====== TODO To be translated ======
translate P CheckGames {Check games}
# ====== TODO To be translated ======
translate P CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate P CheckAll {All games}
# ====== TODO To be translated ======
translate P CheckSelectFilterGames {Only games in filter}

# Classify window:
translate P Classify {Przyporzdkowanie ECO}
translate P ClassifyWhich {Partie do przyporzdkowania ECO}
translate P ClassifyAll {Wszystkie partie (zmiana starych kodw ECO)}
translate P ClassifyYear {Wszystkie partie z ostatniego roku}
translate P ClassifyMonth {Wszystkie partie z ostatniego miesica}
translate P ClassifyNew {Tylko partie bez kodu ECO}
translate P ClassifyCodes {Kody ECO}
translate P ClassifyBasic {Tylko podstawowe ("B12", ...)}
translate P ClassifyExtended {Rozszerzone kody Scida ("B12j", ...)}

# Compaction:
translate P NameFile {Plik nazw}
translate P GameFile {Plik z partiami}
translate P Names {Nazwy}
translate P Unused {Nieuywane}
translate P SizeKb {Rozmiar (kb)}
translate P CurrentState {Status}
translate P AfterCompaction {Po uporzdkowaniu}
translate P CompactNames {Uporzdkuj nazwy}
translate P CompactGames {Uporzdkuj partie}
# ====== TODO To be translated ======
translate P NoUnusedNames "There are no unused names, so the name file is already fully compacted."
# ====== TODO To be translated ======
translate P NoUnusedGames "The game file is already fully compacted."
# ====== TODO To be translated ======
translate P NameFileCompacted {The name file for the database "[file tail [sc_base filename]]" was compacted.}
# ====== TODO To be translated ======
translate P GameFileCompacted {The game file for the database "[file tail [sc_base filename]]" was compacted.}

# Sorting:
translate P SortCriteria {Kryteria sortowania}
translate P AddCriteria {Dodaj kryteria}
translate P CommonSorts {Standardowe kryteria}
translate P Sort {Sortuj}

# Exporting:
translate P AddToExistingFile {Doda partie do pliku?}
translate P ExportComments {Eksportowa komentarze?}
translate P ExportVariations {Eksportowa warianty?}
translate P IndentComments {Wcinaj komentarze?}
translate P IndentVariations {Wcinaj warianty?}
translate P ExportColumnStyle {Kolumny (jedno posunicie w wierszu)?}
translate P ExportSymbolStyle {Styl znakw komentarza:}
translate P ExportStripMarks {Usuwa z komentarzy kody kolorowania pl/strzaek?} 

# Goto game/move dialogs:
translate P LoadGameNumber {Podaj numer partii do wczytania:}
translate P GotoMoveNumber {Id do posunicia nr:}

# Copy games dialog:
translate P CopyGames {Kopiuj partie}
translate P CopyConfirm {
 Czy na pewno skopiowa
 [::utils::thousands $nGamesToCopy] partii z filtra
 w bazie "$fromName"
 do bazy "$targetName"?
}
translate P CopyErr {Nie mona skopiowa partii}
translate P CopyErrSource {baza rdowa}
translate P CopyErrTarget {baza docelowa}
translate P CopyErrNoGames {nie ma partii w filtrze}
translate P CopyErrReadOnly {jest tylko do odczytu}
translate P CopyErrNotOpen {nie jest otwarta}

# Colors:
translate P LightSquares {Jasne pola}
translate P DarkSquares {Ciemne pola}
translate P SelectedSquares {Wybrane pola}
translate P SuggestedSquares {Wybrane posunicie}
translate P WhitePieces {Biae figury}
translate P BlackPieces {Czarne figury}
translate P WhiteBorder {Kontur biaych figur}
translate P BlackBorder {Kontur czarnych figur}

# Novelty window:
translate P FindNovelty {Znajd nowink}
translate P Novelty {Nowinka}
translate P NoveltyInterrupt {Poszukiwanie nowinki przerwano}
translate P NoveltyNone {Nie znaleziono nowinki w partii}
translate P NoveltyHelp {
Scid znajdzie pierwsze posunicie w partii, po ktrym powstanie pozycja niewystpujca ani w bazie, ani w ksice debiutowej.
}

# Sounds configuration:
translate P SoundsFolder {Sound Files Folder} ;# ***
translate P SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc} ;# ***
translate P SoundsAnnounceOptions {Move Announcement Options} ;# ***
translate P SoundsAnnounceNew {Announce new moves as they are made} ;# ***
translate P SoundsAnnounceForward {Announce moves when moving forward one move} ;# ***
translate P SoundsAnnounceBack {Announce when retracting or moving back one move} ;# ***

# Upgrading databases:
translate P Upgrading {Konwersja}
translate P ConfirmOpenNew {
Ta baza jest zapisana w starym formacie (Scid 3) i nie moe zosta otwarta w nowszej wersji
Scid-a. Baza zostaa ju automatycznie przekonwertowana do nowego formatu.

Czy otworzy now wersj bazy?
}
translate P ConfirmUpgrade {
Ta baza jest zapisana w starym formacie (Scid 3) i nie moe zosta otwarta w nowszej wersji Scid-a. eby mc otworzy baz, trzeba przekonwertowa j do nowego formatu.

Konwersja utworzy now wersj bazy - stara wersja nie zostanie zmieniona ani usunita.

Moe to zaj troch czasu, ale jest to operacja jednorazowa. Moesz j przerwa, jeli potrwa za dugo.

Przekonwertowa baz?
}

# Recent files options:
translate P RecentFilesMenu {Liczba ostatnich plikw w menu Plik} 
translate P RecentFilesExtra {Liczba ostatnich plikw w dodatkowym podmenu} 

# My Player Names options:
translate P MyPlayerNamesDescription {
Podaj list preferowanych nazwisk graczy, po jednym w wierszu. W nazwiskach mona stosowa znaki specjalne (np. "?" - dowolny znak, "*" - dowolna sekwencja znakw).

Wszystkie partie grane przez jednego z graczy z listy bd wywietlane z jego perspektywy.
}
# ====== TODO To be translated ======
translate P showblunderexists {show blunder exists}
# ====== TODO To be translated ======
translate P showblundervalue {show blunder value}
# ====== TODO To be translated ======
translate P showscore {show score}
# ====== TODO To be translated ======
translate P coachgame {coach game}
# ====== TODO To be translated ======
translate P configurecoachgame {configure coach game}
# ====== TODO To be translated ======
translate P configuregame {Game configuration}
# ====== TODO To be translated ======
translate P Phalanxengine {Phalanx engine}
# ====== TODO To be translated ======
translate P Coachengine {Coach engine}
# ====== TODO To be translated ======
translate P difficulty {difficulty}
# ====== TODO To be translated ======
translate P hard {hard}
# ====== TODO To be translated ======
translate P easy {easy}
# ====== TODO To be translated ======
translate P Playwith {Play with}
# ====== TODO To be translated ======
translate P white {white}
# ====== TODO To be translated ======
translate P black {black}
# ====== TODO To be translated ======
translate P both {both}
# ====== TODO To be translated ======
translate P Play {Play}
# ====== TODO To be translated ======
translate P Noblunder {No blunder}
# ====== TODO To be translated ======
translate P blunder {blunder}
# ====== TODO To be translated ======
translate P Noinfo {-- No info --}
# ====== TODO To be translated ======
translate P PhalanxOrTogaMissing {Phalanx or Toga not found}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate P moveblunderthreshold {move is a blunder if loss is greater than}
# ====== TODO To be translated ======
translate P limitanalysis {limit engine analysis time}
# ====== TODO To be translated ======
translate P seconds {seconds}
# ====== TODO To be translated ======
translate P Abort {Abort}
# ====== TODO To be translated ======
translate P Resume {Resume}
# ====== TODO To be translated ======
translate P OutOfOpening {Out of opening}
# ====== TODO To be translated ======
translate P NotFollowedLine {You did not follow the line}
# ====== TODO To be translated ======
translate P DoYouWantContinue {Do you want yo continue ?}
# ====== TODO To be translated ======
translate P CoachIsWatching {Coach is watching}
# ====== TODO To be translated ======
translate P Ponder {Permanent thinking}
# ====== TODO To be translated ======
translate P LimitELO {Limit ELO strength}
# ====== TODO To be translated ======
translate P DubiousMovePlayedTakeBack {Dubious move played, do you want to take back ?}
# ====== TODO To be translated ======
translate P WeakMovePlayedTakeBack {Weak move played, do you want to take back ?}
# ====== TODO To be translated ======
translate P BadMovePlayedTakeBack {Bad move played, do you want to take back ?}
# ====== TODO To be translated ======
translate P Iresign {I resign}
# ====== TODO To be translated ======
translate P yourmoveisnotgood {your move is not good}
# ====== TODO To be translated ======
translate P EndOfVar {End of variation}
# ====== TODO To be translated ======
translate P Openingtrainer {Opening trainer}
# ====== TODO To be translated ======
translate P DisplayCM {Display candidate moves}
# ====== TODO To be translated ======
translate P DisplayCMValue {Display candidate moves value}
# ====== TODO To be translated ======
translate P DisplayOpeningStats {Show statistics}
# ====== TODO To be translated ======
translate P ShowReport {Show report}
# ====== TODO To be translated ======
translate P NumberOfGoodMovesPlayed {good moves played}
# ====== TODO To be translated ======
translate P NumberOfDubiousMovesPlayed {dubious moves played}
# ====== TODO To be translated ======
translate P NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
# ====== TODO To be translated ======
translate P NumberOfTimesPositionEncountered {times position encountered}
# ====== TODO To be translated ======
translate P PlayerBestMove  {Allow only best moves}
# ====== TODO To be translated ======
translate P OpponentBestMove {Opponent plays best moves}
# ====== TODO To be translated ======
translate P OnlyFlaggedLines {Only flagged lines}
# ====== TODO To be translated ======
translate P resetStats {Reset statistics}
# ====== TODO To be translated ======
translate P Repertoiretrainingconfiguration {Repertoire training configuration}
# ====== TODO To be translated ======
translate P Loadingrepertoire {Loading repertoire}
# ====== TODO To be translated ======
translate P Movesloaded {Moves loaded}
# ====== TODO To be translated ======
translate P Repertoirenotfound {Repertoire not found}
# ====== TODO To be translated ======
translate P Openfirstrepertoirewithtype {Open first a repertoire database with icon/type set to the right side}
# ====== TODO To be translated ======
translate P Movenotinrepertoire {Move not in repertoire}
# ====== TODO To be translated ======
translate P PositionsInRepertoire {Positions in repertoire}
# ====== TODO To be translated ======
translate P PositionsNotPlayed {Positions not played}
# ====== TODO To be translated ======
translate P PositionsPlayed {Positions played}
# ====== TODO To be translated ======
translate P Success {Success}
# ====== TODO To be translated ======
translate P DubiousMoves {Dubious moves}
# ====== TODO To be translated ======
translate P OutOfRepertoire {OutOfRepertoire}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate P ConfigureTactics {Configure tactics}
# ====== TODO To be translated ======
translate P ResetScores {Reset scores}
# ====== TODO To be translated ======
translate P LoadingBase {Loading base}
# ====== TODO To be translated ======
translate P Tactics {Tactics}
# ====== TODO To be translated ======
translate P ShowSolution {Show solution}
# ====== TODO To be translated ======
translate P NextExercise {Next exercise}
# ====== TODO To be translated ======
translate P PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate P StopTraining {Stop training}
# ====== TODO To be translated ======
translate P Next {Next}
# ====== TODO To be translated ======
translate P ResettingScore {Resetting score}
# ====== TODO To be translated ======
translate P LoadingGame {Loading game}
# ====== TODO To be translated ======
translate P MateFound {Mate found}
# ====== TODO To be translated ======
translate P BestSolutionNotFound {Best solution NOT found !}
# ====== TODO To be translated ======
translate P MateNotFound {Mate not found}
# ====== TODO To be translated ======
translate P ShorterMateExists {Shorter mate exists}
# ====== TODO To be translated ======
translate P ScorePlayed {Score played}
# ====== TODO To be translated ======
translate P Expected {expected}
# ====== TODO To be translated ======
translate P ChooseTrainingBase {Choose training base}
# ====== TODO To be translated ======
translate P Thinking {Thinking}
# ====== TODO To be translated ======
translate P AnalyzeDone {Analyze done}
# ====== TODO To be translated ======
translate P WinWonGame {Win won game}
# ====== TODO To be translated ======
translate P Lines {Lines}
# ====== TODO To be translated ======
translate P ConfigureUCIengine {Configure UCI engine}
# ====== TODO To be translated ======
translate P SpecificOpening {Specific opening}
# ====== TODO To be translated ======
translate P StartNewGame {Start new game}
# ====== TODO To be translated ======
translate P FixedLevel {Fixed level}
# ====== TODO To be translated ======
translate P Opening {Opening}
# ====== TODO To be translated ======
translate P RandomLevel {Random level}
# ====== TODO To be translated ======
translate P StartFromCurrentPosition {Start from current position}
# ====== TODO To be translated ======
translate P FixedDepth {Fixed depth}
# ====== TODO To be translated ======
translate P Nodes {Nodes} 
# ====== TODO To be translated ======
translate P Depth {Depth}
# ====== TODO To be translated ======
translate P Time {Time} 
# ====== TODO To be translated ======
translate P SecondsPerMove {Seconds per move}
# ====== TODO To be translated ======
translate P Engine {Engine}
# ====== TODO To be translated ======
translate P TimeMode {Time mode}
# ====== TODO To be translated ======
translate P TimeBonus {Time + bonus}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate P TimeMin {min}
# ====== TODO To be translated ======
translate P TimeSec {sec}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate P AllExercisesDone {All exercises done}
# ====== TODO To be translated ======
translate P MoveOutOfBook {Move out of book}
# ====== TODO To be translated ======
translate P LastBookMove {Last book move}
# ====== TODO To be translated ======
translate P AnnotateSeveralGames {Annotate several games\nfrom current to :}
# ====== TODO To be translated ======
translate P FindOpeningErrors {Find opening errors}
# ====== TODO To be translated ======
translate P MarkTacticalExercises {Mark tactical exercises}
# ====== TODO To be translated ======
translate P UseBook {Use book}
# ====== TODO To be translated ======
translate P MultiPV {Multiple variations}
# ====== TODO To be translated ======
translate P Hash {Hash memory}
# ====== TODO To be translated ======
translate P OwnBook {Use engine book}
# ====== TODO To be translated ======
translate P BookFile {Opening book}
# ====== TODO To be translated ======
translate P AnnotateVariations {Annotate variations}
# ====== TODO To be translated ======
translate P ShortAnnotations {Short annotations}
# ====== TODO To be translated ======
translate P addAnnotatorTag {Add annotator tag}
# ====== TODO To be translated ======
translate P AddScoreToShortAnnotations {Add score to short annotations}
# ====== TODO To be translated ======
translate P Export {Export}
# ====== TODO To be translated ======
translate P BookPartiallyLoaded {Book partially loaded}
# ====== TODO To be translated ======
translate P Calvar {Calculation of variations}
# ====== TODO To be translated ======
translate P ConfigureCalvar {Configuration}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate P Reti {Reti}
# ====== TODO To be translated ======
translate P English {English}
# ====== TODO To be translated ======
translate P d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
# ====== TODO To be translated ======
translate P Trompowsky {Trompowsky}
# ====== TODO To be translated ======
translate P Budapest {Budapest}
# ====== TODO To be translated ======
translate P OldIndian {Old Indian}
# ====== TODO To be translated ======
translate P BenkoGambit {Benko Gambit}
# ====== TODO To be translated ======
translate P ModernBenoni {Modern Benoni}
# ====== TODO To be translated ======
translate P DutchDefence {Dutch Defence}
# ====== TODO To be translated ======
translate P Scandinavian {Scandinavian}
# ====== TODO To be translated ======
translate P AlekhineDefence {Alekhine Defence}
# ====== TODO To be translated ======
translate P Pirc {Pirc}
# ====== TODO To be translated ======
translate P CaroKann {Caro-Kann}
# ====== TODO To be translated ======
translate P CaroKannAdvance {Caro-Kann Advance}
# ====== TODO To be translated ======
translate P Sicilian {Sicilian}
# ====== TODO To be translated ======
translate P SicilianAlapin {Sicilian Alapin}
# ====== TODO To be translated ======
translate P SicilianClosed {Sicilian Closed}
# ====== TODO To be translated ======
translate P SicilianRauzer {Sicilian Rauzer}
# ====== TODO To be translated ======
translate P SicilianDragon {Sicilian Dragon}
# ====== TODO To be translated ======
translate P SicilianScheveningen {Sicilian Scheveningen}
# ====== TODO To be translated ======
translate P SicilianNajdorf {Sicilian Najdorf}
# ====== TODO To be translated ======
translate P OpenGame {Open Game}
# ====== TODO To be translated ======
translate P Vienna {Vienna}
# ====== TODO To be translated ======
translate P KingsGambit {King's Gambit}
# ====== TODO To be translated ======
translate P RussianGame {Russian Game}
# ====== TODO To be translated ======
translate P ItalianTwoKnights {Italian/Two Knights}
# ====== TODO To be translated ======
translate P Spanish {Spanish}
# ====== TODO To be translated ======
translate P SpanishExchange {Spanish Exchange}
# ====== TODO To be translated ======
translate P SpanishOpen {Spanish Open}
# ====== TODO To be translated ======
translate P SpanishClosed {Spanish Closed}
# ====== TODO To be translated ======
translate P FrenchDefence {French Defence}
# ====== TODO To be translated ======
translate P FrenchAdvance {French Advance}
# ====== TODO To be translated ======
translate P FrenchTarrasch {French Tarrasch}
# ====== TODO To be translated ======
translate P FrenchWinawer {French Winawer}
# ====== TODO To be translated ======
translate P FrenchExchange {French Exchange}
# ====== TODO To be translated ======
translate P QueensPawn {Queen's Pawn}
# ====== TODO To be translated ======
translate P Slav {Slav}
# ====== TODO To be translated ======
translate P QGA {QGA}
# ====== TODO To be translated ======
translate P QGD {QGD}
# ====== TODO To be translated ======
translate P QGDExchange {QGD Exchange}
# ====== TODO To be translated ======
translate P SemiSlav {Semi-Slav}
# ====== TODO To be translated ======
translate P QGDwithBg5 {QGD with Bg5}
# ====== TODO To be translated ======
translate P QGDOrthodox {QGD Orthodox}
# ====== TODO To be translated ======
translate P Grunfeld {Grnfeld}
# ====== TODO To be translated ======
translate P GrunfeldExchange {Grnfeld Exchange}
# ====== TODO To be translated ======
translate P GrunfeldRussian {Grnfeld Russian}
# ====== TODO To be translated ======
translate P Catalan {Catalan}
# ====== TODO To be translated ======
translate P CatalanOpen {Catalan Open}
# ====== TODO To be translated ======
translate P CatalanClosed {Catalan Closed}
# ====== TODO To be translated ======
translate P QueensIndian {Queen's Indian}
# ====== TODO To be translated ======
translate P NimzoIndian {Nimzo-Indian}
# ====== TODO To be translated ======
translate P NimzoIndianClassical {Nimzo-Indian Classical}
# ====== TODO To be translated ======
translate P NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
# ====== TODO To be translated ======
translate P KingsIndian {King's Indian}
# ====== TODO To be translated ======
translate P KingsIndianSamisch {King's Indian Smisch}
# ====== TODO To be translated ======
translate P KingsIndianMainLine {King's Indian Main Line}
# ====== TODO To be translated ======
translate P ConfigureFics {Configure FICS}
# ====== TODO To be translated ======
translate P FICSGuest {Login as Guest}
# ====== TODO To be translated ======
translate P FICSServerPort {Server port}
# ====== TODO To be translated ======
translate P FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate P FICSRefresh {Refresh}
# ====== TODO To be translated ======
translate P FICSTimesealPort {Timeseal port}
# ====== TODO To be translated ======
translate P FICSSilence {Silence}
# ====== TODO To be translated ======
translate P FICSOffers {Offers}
# ====== TODO To be translated ======
translate P FICSConsole {Console}
# ====== TODO To be translated ======
translate P FICSGames {Games}
# ====== TODO To be translated ======
translate P FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate P FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate P FICSRelayedGames {Relayed games}
# ====== TODO To be translated ======
translate P FICSFindOpponent {Find opponent}
# ====== TODO To be translated ======
translate P FICSTakeback {Takeback}
# ====== TODO To be translated ======
translate P FICSTakeback2 {Takeback 2}
# ====== TODO To be translated ======
translate P FICSInitTime {Initial time (min)}
# ====== TODO To be translated ======
translate P FICSIncrement {Increment (sec)}
# ====== TODO To be translated ======
translate P FICSRatedGame {Rated Game}
# ====== TODO To be translated ======
translate P FICSAutoColour {automatic}
# ====== TODO To be translated ======
translate P FICSManualConfirm {confirm manually}
# ====== TODO To be translated ======
translate P FICSFilterFormula {Filter with formula}
# ====== TODO To be translated ======
translate P FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate P FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate P FICSAccept {accept}
# ====== TODO To be translated ======
translate P FICSDecline {decline}
# ====== TODO To be translated ======
translate P FICSColour {Colour}
# ====== TODO To be translated ======
translate P FICSSend {send}
# ====== TODO To be translated ======
translate P FICSConnect {Connect}
# ====== TODO To be translated ======
translate P FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate P FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate P FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate P GameReview {Game review}
# ====== TODO To be translated ======
translate P GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate P GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate P GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate P GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate P GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate P GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate P GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate P GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate P GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate P GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate P GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate P GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate P GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate P GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate P GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate P GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate P GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate P GameReviewMovesPlayedEngine {Moves played like engine}
# ====== TODO To be translated ======
translate P CCDlgConfigureWindowTitle {Configure Correspondence Chess}
# ====== TODO To be translated ======
translate P CCDlgCGeneraloptions {General Options}
# ====== TODO To be translated ======
translate P CCDlgDefaultDB {Default Database:}
# ====== TODO To be translated ======
translate P CCDlgInbox {Inbox (path):}
# ====== TODO To be translated ======
translate P CCDlgOutbox {Outbox (path):}
# ====== TODO To be translated ======
translate P CCDlgXfcc {Xfcc Configuration:}
# ====== TODO To be translated ======
translate P CCDlgExternalProtocol {External Protocol Handler (e.g. Xfcc)}
# ====== TODO To be translated ======
translate P CCDlgFetchTool {Fetch Tool:}
# ====== TODO To be translated ======
translate P CCDlgSendTool {Send Tool:}
# ====== TODO To be translated ======
translate P CCDlgEmailCommunication {eMail Communication}
# ====== TODO To be translated ======
translate P CCDlgMailPrg {Mail program:}
# ====== TODO To be translated ======
translate P CCDlgBCCAddr {(B)CC Address:}
# ====== TODO To be translated ======
translate P CCDlgMailerMode {Mode:}
# ====== TODO To be translated ======
translate P CCDlgThunderbirdEg {e.g. Thunderbird, Mozilla Mail, Icedove...}
# ====== TODO To be translated ======
translate P CCDlgMailUrlEg {e.g. Evolution}
# ====== TODO To be translated ======
translate P CCDlgClawsEg {e.g Sylpheed Claws}
# ====== TODO To be translated ======
translate P CCDlgmailxEg {e.g. mailx, mutt, nail...}
# ====== TODO To be translated ======
translate P CCDlgAttachementPar {Attachment parameter:}
# ====== TODO To be translated ======
translate P CCDlgInternalXfcc {Use internal Xfcc support}
# ====== TODO To be translated ======
translate P CCDlgConfirmXfcc {Confirm moves}
# ====== TODO To be translated ======
translate P CCDlgSubjectPar {Subject parameter:}
# ====== TODO To be translated ======
translate P CCDlgDeleteBoxes {Empty In-/Outbox}
# ====== TODO To be translated ======
translate P CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess? This requires a new sync to show the last state of your games}
# ====== TODO To be translated ======
translate P CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate P CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate P CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate P CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
# ====== TODO To be translated ======
translate P CCDlgStartEmail {Start new eMail game}
# ====== TODO To be translated ======
translate P CCDlgYourName {Your Name:}
# ====== TODO To be translated ======
translate P CCDlgYourMail {Your eMail Address:}
# ====== TODO To be translated ======
translate P CCDlgOpponentName {Opponents Name:}
# ====== TODO To be translated ======
translate P CCDlgOpponentMail {Opponents eMail Address:}
# ====== TODO To be translated ======
translate P CCDlgGameID {Game ID (unique):}
# ====== TODO To be translated ======
translate P CCDlgTitNoOutbox {Scid: Correspondence Chess Outbox}
# ====== TODO To be translated ======
translate P CCDlgTitNoInbox {Scid: Correspondence Chess Inbox}
# ====== TODO To be translated ======
translate P CCDlgTitNoGames {Scid: No Correspondence Chess Games}
# ====== TODO To be translated ======
translate P CCErrInboxDir {Correspondence Chess inbox directory:}
# ====== TODO To be translated ======
translate P CCErrOutboxDir {Correspondence Chess outbox directory:}
# ====== TODO To be translated ======
translate P CCErrDirNotUsable {does not exist or is not accessible!\nPlease check and correct the settings.}
# ====== TODO To be translated ======
translate P CCErrNoGames {does not contain any games!\nPlease fetch them first.}
# ====== TODO To be translated ======
translate P CCDlgTitNoCCDB {Scid: No Correspondence Database}
# ====== TODO To be translated ======
translate P CCErrNoCCDB {No Database of type 'Correspondence' is opened. Please open one before using correspondence chess functions.}
# ====== TODO To be translated ======
translate P CCFetchBtn {Fetch games from the server and process the Inbox}
# ====== TODO To be translated ======
translate P CCPrevBtn {Goto previous game}
# ====== TODO To be translated ======
translate P CCNextBtn {Goto next game}
# ====== TODO To be translated ======
translate P CCSendBtn {Send move}
# ====== TODO To be translated ======
translate P CCEmptyBtn {Empty In- and Outbox}
# ====== TODO To be translated ======
translate P CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}
# ====== TODO To be translated ======
translate P CCDlgServerName {Server Name:}
# ====== TODO To be translated ======
translate P CCDlgLoginName  {Login Name:}
# ====== TODO To be translated ======
translate P CCDlgPassword   {Password:}
# ====== TODO To be translated ======
translate P CCDlgURL        {Xfcc-URL:}
# ====== TODO To be translated ======
translate P CCDlgRatingType {Rating Type:}
# ====== TODO To be translated ======
translate P CCDlgDuplicateGame {Non-unique game ID}
# ====== TODO To be translated ======
translate P CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
# ====== TODO To be translated ======
translate P CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate P CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate P CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate P CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate P CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate P CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate P CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate P CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate P CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
# ====== TODO To be translated ======
translate P ExtHWConfigConnection {Configure external hardware}
# ====== TODO To be translated ======
translate P ExtHWPort {Port}
# ====== TODO To be translated ======
translate P ExtHWEngineCmd {Engine command}
# ====== TODO To be translated ======
translate P ExtHWEngineParam {Engine parameter}
# ====== TODO To be translated ======
translate P ExtHWShowButton {Show button}
# ====== TODO To be translated ======
translate P ExtHWHardware {Hardware}
# ====== TODO To be translated ======
translate P ExtHWNovag {Novag Citrine}
# ====== TODO To be translated ======
translate P ExtHWInputEngine {Input Engine}
# ====== TODO To be translated ======
translate P ExtHWNoBoard {No board}
# ====== TODO To be translated ======
translate P NovagReferee {Referee}
# ====== TODO To be translated ======
translate P IEConsole {Input Engine Console}
# ====== TODO To be translated ======
translate P IESending {Moves sent for}
# ====== TODO To be translated ======
translate P IESynchronise {Synchronise}
# ====== TODO To be translated ======
translate P IERotate  {Rotate}
# ====== TODO To be translated ======
translate P IEUnableToStart {Unable to start Input Engine:}
# ====== TODO To be translated ======
translate P DoneWithPosition {Done with position}
# ====== TODO To be translated ======
translate P Board {Board}
# ====== TODO To be translated ======
translate P showGameInfo {Show game info}
# ====== TODO To be translated ======
translate P autoResizeBoard {Automatic resize of board}
# ====== TODO To be translated ======
translate P DockTop {Move to top}
# ====== TODO To be translated ======
translate P DockBottom {Move to bottom}
# ====== TODO To be translated ======
translate P DockLeft {Move to left}
# ====== TODO To be translated ======
translate P DockRight {Move to right}
# ====== TODO To be translated ======
translate P Undock {Undock}
# ====== TODO To be translated ======
translate P ChangeIcon {Change icon...}
# ====== TODO To be translated ======
}

### Tips of the day in Polish:

set tips(P) {
  {
    Scid ma ponad 30 <a Index>stron pomocy</a> i w wikszoci okien Scida
    nacinicie klawisza <b>F1</b> spowoduje wywietlenie odpowiedniej
    strony.
  }
  {
    Niektre okna Scida (np. informacje pod szachownic,
    <a Switcher>przecznik baz</a>) maj menu przywoywane prawym przyciskiem
    myszy. Sprbuj nacisn prawy przycisk myszy w kadym oknie, by
    sprawdzi, czy menu jest dostpne i jakie funkcje zawiera.
  }
  {
    Scid pozwala wprowadza posunicia na kilka rnych sposobw.
    Moesz uy myszy (z wywietlaniem moliwych posuni lub bez)
    albo klawiatury (z opcjonalnym automatycznym dopenianiem).
    Wicej informacji mona znale na stronie pomocy
    <a Moves>Wprowadzenie posuni</a>.
  }
  {
    Jeli masz kilka baz, ktre otwierasz czsto, dodaj
    <a Bookmarks>zakadk</a> dla kadej z nich. Umoliwi to atwe
    otwieranie baz z menu.
  }
  {
    Moesz obejrze wszystkie posunicia w aktualnej partii
    (z wariantami i komentarzami lub bez) w <a PGN>Oknie PGN</a>.
    W oknie PGN moesz przej do dowolnego posunicia, klikajc
    na nim lewym przyciskiem myszy oraz uy rodkowego lub prawego
    przycisku myszy do obejrzenia aktualnej pozycji.
  }
  {
    Moesz kopiowa partie z bazy do bazy przecigajc je lewym
    przyciskiem myszy w oknie <a Switcher>Przecznika baz</a>.
  }
  {
    Scid moe otwiera pliki PGN, nawet jeli s one skompresowane
    Gzip-em (z rozszerzeniem .gz). Pliki PGN mog by jedynie
    czytane, wic jeli chcesz co zmieni, utwrz now baz Scida
    i skopiuj do niej partie z pliku PGN.
  }
  {
    Jeli masz du baz i czsto uywasz okna <a Tree>Drzewa wariantw</a>,
    warto wybra polecenie <b>Twrz standardowy plik cache/b>
    z menu Plik okna Drzewo wariantw. Statystyki dla najpopularniejszych
    pozycji debiutowych zostan zapamitane w pliku, co przyspieszy
    dziaanie drzewa.
  }
  {
    <a Tree>Drzewo wariantw</a> moe pokaza wszystkie posunicia
    z aktualnej pozycji, ale jeli chcesz zobaczy wszystkie kolejnoci
    posuni prowadzce do aktualnej pozycji, moesz uy
    <a OpReport>Raportu debiutowego</a>.
  }
  {
    W <a GameList>licie partii</a> kliknij lewym lub prawym przyciskiem
    myszy na nagwku wybranej kolumny, by zmieni jej szeroko.
  }
  {
    W oknie <a PInfo>Informacja o graczu</a> (kliknij na nazwisku gracza
    w polu pod szachownic, by je otworzy) moesz atwo ustawi
    <a Searches Filter>filtr</a> zawierajcy wszystkie partie danego
    gracza zakoczeone wybranym wynikiem, klikajc na dowolnej wartoci
    wywietlanej na <red>czerowono</red>.
  }
  {
    Podczas pracy nad debiutem warto uy funkcji
    <a Searches Board>wyszukiwania pozycji</a> z opcj <b>Pionki</b> lub
    <b>Kolumny</b>. Pozowli to znale inne warianty debiutowe z t
    sam struktur pionow.
  }
  {
    W polu informacji o partii (pod szachownic) mona uy prawego
    przycisku myszy, by wywietli menu konfiguracji pola. Mona
    np. ukry nastpne posunicie, co jest przydatne przy rozwizywaniu
    zada.
  }
  {
    Jeli czsto uywasz funkcji <a Maintenance>obsugi</a> na duej
    bazie, moesz uy okna <a Maintenance Cleaner>Zestaw zada</a>
    do wykonania kilka funkcji naraz.
  }
  {
    Jeli masz du baz, w ktrej wikszo partii ma ustawiony
    znacznik EventDate, moesz <a Sorting>posortowa</a> j
    wg tego znacznika (zamiast Daty). Dziki temu wszystkie partie
    z jednego turnieju znajd si koo siebie.
  }
  {
    Przed uyciem funkcji <a Maintenance Twins>usuwania podwjnych partii</a>
    dobrze jest <a Maintenance Spellcheck>sprawdzi pisowni</a>
    nazwisk w bazie, co usprawni wyszukiwanie powtrze.
  }
  {
    <a Flags>Flagi</a> s przydatne do oznaczania partii, ktre
    zawieraj wane motywy taktyczne, strkutury pionowe, nowinki itd.
    Potem moesz znale takie partie
    <a Searches Header>wyszukiwaniem wg nagwka</a>.
  }
  {
    Jeli przegldasz parti i chcesz sprawdzi jaki wariant nie
    zmieniajc partii, moesz wczy tryb testowania wariantu
    (klawisz <b>Ctrl+spacja</b> lub ikona na pasku narzdziowym).
    Po wyczeniu trybu testowania powrcisz do pozycji z partii.
  }
  {
    eby znale najwaniejsze partie (z najsilniejszymi przeciwnikami),
    w ktrych powstaa aktualna pozycja, otwrz <a Tree>Drzewo wariantw</a>
    i wybierz list najlepszych partii. Moesz nawet wybra tylko
    partie zakoczone konkretnym wynikiem.
  }
  {
    Dobr metod na nauk debiutu przy uyciu duej bazy jest
    wczenie trybu treningu w <a Tree>Drzewie wariantw</a>
    i gra z programem. Pozwala to sprawdzi, ktre posunicia s
    grane najczciej.
  }
  {
    Jeli masz otwarte dwie bazy i chcesz obejrze
    <a Tree>Drzewo wariantw</a> dla pierwszej bazy, przegldajc
    parti z drugiej, kliknij przycisk <b>Blokada</b> na drzewie,
    by zablokowa je na pierwszej bazie, a nastpnie przecz si
    do drugiej bazy.
  }
  {
    Okno <a Tmt>Turnieje</a> jest przydatne nie tylko do znajdowania
    turniejw, ale pozwala take sprawdzi, w jakich turniejach gra
    ostatnio dany zawodnik i jakie turnieje s rozgrywane w wybranym
    kraju.
  }
  {
    Moesz uy jednego z wielu typowych wzorcw w oknie
    <a Searches Material>Wyszukiwania wg materiau</a> do znalezienia
    partii do studiowania debiutw lub gry rodkowej.
  }
  {
    W oknie <a Searches Material>Wyszukiwanie wg materiau</a>, moesz
    ograniczy liczb znajdowanych partii przez warunek, by
    podany stosunek materiau utrzymywa si przynajmniej przez
    kilka pruchw.
  }
  {
    Jeli masz wan baz, ktrej nie chcesz przez przypadek zmieni,
    wcz <b>Tylko do odczytu...</b> w menu <b>Plik</b> po jej otwarciu
    (albo zmie prawa dostpu do pliku).
  }
  {
    Jeli uywasz XBoard-a lub WinBoard-a (albo programu szachowego,
    ktry pozwala na skopiowania pozycji w notacji FEN do schowka)
    i chcesz skopiowa aktualn pozycj do Scid-a, wybierz
    <b>Copy position</b> w menu File programu XBoard/Winboard, a potem
    <b>Wklej aktywn parti ze schowka</b> z menu Edycja Scid-a.
  }
  {
    W oknie <a Searches Header>Wyszukiwanie wg nagwka</a>,
    szukane nazwy graczy/turnieju/miejsca/rundy s znajdowane niezalenie
    od wielkoci liter i rwnie wewntrz nazw.
    Zamiast tego moesz uy poszukiwania z symbolami wieloznacznymi
    (gdzie "?" oznacza dowolny znak, za "*" - 0 lub wicej znakw),
    wpisujc szukany tekst w cudzysowie. Wielko liter zostanie
    uwzgldniona. Na przykad "*BEL" znajdzie wszystkie turnieje grane
    w Belgii (ale nie w Belgradzie).
  }
  {
    Jeli chcesz poprawi posunicie nie zmieniajc nastpnych,
    otwrz okno <a Import>Pobierz parti</a>, wcinij
    <b>Wklej aktualn parti</b>, zmie bdne posunicie i wcinij
    <b>Pobierz</b>.
  }
  {
    Jeli plik klasyfikacji debiutowej ECO jest wczytany, moesz przej
    do ostatniej sklasyfikowanej pozycji w partii za pomoc polecenia
    <b>Rozpoznaj debiut</b> w menu <b>Partia</b> (klawisz Ctrl+Shift+D).
  }
  {
    Jeli chcesz sprawdzi wielko lub dat modyfikacji pliku
    przed jego otwarciem, uyj okna <a Finder>Poszukiwacza plikw</a>.
  }
  {
    Plik<a Repertoire>repertuaru debiutowego</a> pozwala na ledzenie
    partii w ulubionych wariantach. Kiedy dodasz grane przez siebie
    debiuty do pliku repertuaru debiutowego, bdziesz mg atwo
    znajdowa je w nowych partiach.
  }
  {
    <a OpReport>Raport debiutowy</a> pozwala dowiedzie si wicej
    o konkretnej pozycji. Moesz zobaczy wyniki, nazwiska najczciej
    grajcych j zawodnikw, typowe motywy pozycyjne itd.
  }
  {
    Moesz doda wikszo typowych symboli (!, !?, += itd.) do
    aktualnego posunicia lub pozycji za pomoc skrtw klawiszowych,
    bez potrzeby otwierania okna <a Comment>Edytora komentarzy</a>
    -- np. wcinicie "!" i Enter spowoduje dodanie symbolu "!".
    Na stronie <a Moves>Wprowadzanie posuni</a> mona znale
    wicej informacji.
  }
  {
    Moesz atwo przeglda debiuty w bazie w oknie
    <a Tree>Drzewo wariantw</a>. W oknie Statystyka (klawisz Ctrl+I)
    mona znale informacje o ostatnich wynikach w wariancie oraz
    o partiach granych przez silnych graczy.
  }
  {
    Moesz zmieni wielko szachownicy, naciskajc <b>lewo</b> lub <b>prawo</b>
    przy wcinitych klawiszach <b>Ctrl</b> i <b>Shift</b>.
  }
  {
    Po <a Searches>wyszukiwaniu</a> moesz atwo przeglda wszystkie
    znalezione partie, naciskajc klawisz <b>gra</b> lub <b>d</b>
    przy wcinitym <b>Ctrl</b> by obejrze poprzedni/nastpn parti
    w filtrze.
  }
}

# end of polish.tcl
# portbr.tcl:
# Scid in Brazilian Portuguese.
# Translated by Gilberto de Almeida Peres.

addLanguage B {Brazil Portuguese} 0 ;#iso8859-1

proc setLanguage_B {} {

# File menu:
menuText B File "Arquivo" 0
menuText B FileNew "Novo..." 0 {Cria uma nova base de dados Scid}
menuText B FileOpen "Abrir..." 0 {Abre uma base de dados Scid existente}
menuText B FileClose "Fechar" 0 {Fecha a base de dados Scid ativa}
menuText B FileFinder "Buscador" 0 {Abre a janela do Buscador de Arquivos}
menuText B FileBookmarks "Favoritos" 0 {Menu de Favoritos (atalho: Ctrl+B)}
menuText B FileBookmarksAdd "Adicionar a Favoritos" 0 \
  {Adiciona o posicao do jogo do banco de dados atual}
menuText B FileBookmarksFile "Arquivar Favorito" 0 \
  {Arquiva um Favorito para a posicao do jogo atual}
menuText B FileBookmarksEdit "Editar favoritos..." 0 \
  {Editar o menu de favoritos}
menuText B FileBookmarksList "Mostrar pastas como lista" 0 \
  {Mostra as pastas de favoritos em lista unica}
menuText B FileBookmarksSub "Mostrar pastas como submenus" 0 \
  {Mostra as pastas de favoritos como submenus}
menuText B FileMaint "Manutencao" 0 {Ferramentas de manutencao de bases de dados Scid}
menuText B FileMaintWin "Janela de Manutencao" 0 \
  {Abre/Fecha a janela de manutencao de bases de dados Scid}
menuText B FileMaintCompact "Compactar base de dados..." 0 \
  {Compacta arquivos de bases de dados, removendo jogos deletados e nomes nao utilizados}
menuText B FileMaintClass "Classificar jogos por ECO..." 2 \
  {Recalcula o codigo ECO de todos os jogos}
menuText B FileMaintSort "Ordenar base de dados..." 0 \
  {Ordena todos os jogos da base de dados}
menuText B FileMaintDelete "Apagar jogos duplicados..." 13 \
  {Encontra jogos duplicados e os marca para exclusao}
menuText B FileMaintTwin "Janela de verificacao de duplicatas" 10 \
  {Abre/atualiza a janela de verificacao de duplicatas}
menuText B FileMaintName "Ortografia de nomes" 14 {Ferramentas de edicao e correcao ortografica de nomes}
menuText B FileMaintNameEditor "Editor de Nomes" 0 \
  {Abre/fecha a janela do editor de nomes}
menuText B FileMaintNamePlayer "Verificacao Ortografica de Nomes de Jogadores..." 11 \
  {Verifica a correcao dos nomes dos jogadores de acordo com o arquivo de correcao ortografica}
menuText B FileMaintNameEvent "Verificacao Ortografica de Nomes de Eventos..." 11 \
  {Verifica a correcao dos nomes de eventos de acordo com o arquivo de verificacao ortografica}
menuText B FileMaintNameSite "Verificacao Ortografica de Lugares..." 11 \
  {Verifica a correcao dos nomes de lugares usando o arquivo de correcao ortografica}
menuText B FileMaintNameRound "Verificacao Ortografica de Rodadas..." 11 \
  {Verificacao dos nomes de rodadas usando o arquivo de correcao ortografica}
menuText B FileReadOnly "Apenas Leitura..." 7 \
  {Trata a base de dados corrente como arquivo de leitura, impedindo mudancas}
menuText B FileSwitch "Mudar a base de dados" 0 \
  {Muda para uma base de dados diferente, j aberta} ;# ***
menuText B FileExit "Sair" 0 {Encerrar o Scid}
menuText B FileMaintFixBase "Corrigir base corrompida" 0 {Tenta corrigir uma base corrompida}

# Edit menu:
menuText B Edit "Editar" 0
menuText B EditAdd "Adiciona variante" 0 {Adiciona variante do movimento}
menuText B EditDelete "Deleta Variante" 0 {Exclui variante do movimento}
menuText B EditFirst "Converte para Primeira Variante" 14 \
  {Faz com que uma variante seja a primeira da lista}
menuText B EditMain "Converte variante para Linha Principal" 24 \
  {Faz com que uma variante se torne a Linha Principal}
menuText B EditTrial "Experimentar variante" 0 \
  {Inicia/Para experimentacao, para testar alguma nova ideia no tabuleiro}
menuText B EditStrip "Limpar Comentarios e Variantes" 2 \
  {Limpa comentarios e variantes no jogo atual}
menuText B EditUndo "Desfazer" 0 {Desfaz ltima mudana no jogo}
# ====== TODO To be translated ======
menuText B EditRedo "Redo" 0 {Redo last game change}
menuText B EditStripComments "Limpar Comentarios" 0 \
  {Limpa comentarios e anotacoes no jogo atual}
menuText B EditStripVars "Limpar Variantes" 0 \
  {Limpa todas as variantes no jogo atual}
menuText B EditStripBegin "Movimentos a partir do incio" 1 \
  {Remove movimentos a partir do incio do jogo} ;# ***
menuText B EditStripEnd "Movimentos at o final do jogo" 0 \
  {Remove movimentos at o final do jogo} ;# ***
menuText B EditReset "Limpar a base de trabalho" 0 \
  {Limpa completamente a base de trabalho}
menuText B EditCopy "Copiar jogo para a base de trabalho" 0 \
  {Copia o jogo corrente para a base de trabalho}
menuText B EditPaste "Colar jogo da base de trabalho" 1 \
  {Cola o jogo ativo da base de trabalho}
menuText B EditPastePGN "Colar como jogo em PGN..." 10 \
  {Interpreta o texto na rea de transferncia como um jogo em notao PGN e cola na posio corrente} ;# ***
menuText B EditSetup "Configura posicao inicial..." 12 \
  {Configura a posicao inicial para o jogo}
menuText B EditCopyBoard "Copia posio" 6 \
  {Copia o tabuleiro corrente em notao FEN para a rea de transferncia} ;# ***
menuText B EditPasteBoard "Colar Posicao" 12 \
  {Configura a posicao inicial a partir da area de transferencia}

# Game menu:
menuText B Game "Jogo" 0
menuText B GameNew "Limpar Jogo" 0 \
  {Limpa o jogo corrente, descartando qualquer alteracao}
menuText B GameFirst "Primeiro Jogo" 5 {Carrega o primeiro jogo filtrado}
menuText B GamePrev "Jogo Anterior" 5 {Carrega o jogo anterior}
menuText B GameReload "Recarrega o Jogo atual" 3 \
  {Recarrega o jogo, descartando qualquer alteracao}
menuText B GameNext "Proximo Jogo" 5 {Carrega o proximo jogo}
menuText B GameLast "Ultimo Jogo" 8 {Carrega o ultimo jogo}
menuText B GameRandom "Carrega jogo aleatrio" 8 {Carrega um jogo filtrado aleatoriamente} ;# ***
menuText B GameNumber "Carrega Jogo Numero..." 5 \
  {Carrega um jogo pelo seu numero}
menuText B GameReplace "Salvar: Substituir Jogo..." 8 \
  {Salva o jogo e substitui a versao antiga}
menuText B GameAdd "Salvar: Adicionar Jogo..." 9 \
  {Salva este jogo como um novo jogo na base de dados}
menuText B GameDeepest "Identificar Abertura" 0 \
  {Vai para a posicao mais avancada da partida, de acordo com o codigo ECO}
menuText B GameGotoMove "Ir para o movimento numero..." 5 \
  {Avanca o jogo ate o movimento desejado}
menuText B GameNovelty "Pesquisa Novidade..." 7 \
  {Procura o primeiro movimento deste jogo que nao tenha sido jogado antes}

# Search Menu:
menuText B Search "Pesquisa" 0
menuText B SearchReset "Limpar Filtragem" 0 {Limpa o criterio de pesquisa para incluir todos os jogos}
menuText B SearchNegate "Inverter Filtragem" 0 {Inverte o criterio de pesquisa para incluir apenas os jogos que nao atendem o criterio}
menuText B SearchCurrent "Posicao Atual..." 0 {Pesquisa a posicao atual do tabuleiro}
menuText B SearchHeader "Cabecalho..." 0 {Pesquisa por cabecalho (jogador, evento, etc)}
menuText B SearchMaterial "Material/Padrao..." 0 {Pesquisa por material ou padrao de posicao}
menuText B SearchUsing "Usar arquivo de opcoes de filtro..." 0 {Pesquisa usando arquivo com opcoes de filtro}

# Windows menu:
menuText B Windows "Janelas" 0
menuText B WindowsComment "Editor de Comentarios" 0 {Abre/fecha o editor de comentarios}
menuText B WindowsGList "Lista de Jogos" 0 {Abre/fecha a janela com a lista de jogos}
menuText B WindowsPGN "Notacao PGN" 0 \
  {Abre/fecha a janela com a notacao PGN do jogo}
menuText B WindowsPList "Procura Jogador" 2 {Abre/Fecha o buscador de jogadores} ;# ***
menuText B WindowsTmt "Buscador de Torneio" 2 {Abre/Fecha o buscador de torneio}
menuText B WindowsSwitcher "Intercambio de bases de dados" 0 \
  {Abre/fecha a janela de intercambio de bases de dados}
menuText B WindowsMaint "Manutencao" 0 \
  {Abre/fecha a janela de manutencao}
menuText B WindowsECO "Listagem ECO" 0 {Abre/fecha a janela de listagem de codigo ECO}
menuText B WindowsRepertoire "Editor de Repertorio" 0 \
  {Abre/fecha a janela do editor de repertorio}
menuText B WindowsStats "Estatisticas" 0 \
  {Abre/fecha a janela de estatisticas}
menuText B WindowsTree "Arvore" 0 {Abre/fecha a janela da Arvore de pesquisa}
menuText B WindowsTB "Tabela base de Finais" 1 \
  {Abre/fecha a janela da tabela base de finais}
menuText B WindowsBook "Janela do Livro de Aberturas" 0 {Abre/Fecha  a janela do livro de aberturas}
menuText B WindowsCorrChess "Janela de Correspondencia" 0 {Abre/Fecha a janela de correspondencia}

# Tools menu:
menuText B Tools "Ferramentas" 0
menuText B ToolsAnalysis "Analisador #1..." 0 \
  {Inicia ou para o 1o. Analisador}
menuText B ToolsAnalysis2 "Analisador #2..." 17 \
  {Inicia ou para o 2o. Analisador}
menuText B ToolsCross "Tabela de Cruzamento" 0 {Mostra a tabela de cruzamentos do torneio para o jogo corrente}
menuText B ToolsEmail "Gerenciador de e-mails" 0 \
  {Abre/fecha a janela do gerenciador de e-mails}
menuText B ToolsFilterGraph "Grfico de filtro" 7 \
  {Abre/Fecha a janela do grfico de filtro} ;# ***
menuText B ToolsAbsFilterGraph "Grafico de Filtro Absoluto" 7 {Abre/Fecha a janela do grafico de filtro por valor absoluto}
menuText B ToolsOpReport "Relatorio de abertura" 0 \
  {Gera um relatorio de abertura para a posicao corrente}
menuText B ToolsOpenBaseAsTree "Abre base como rvore" 0   {Abre uma base e a utiliza numa janela de rvore}
menuText B ToolsOpenRecentBaseAsTree "Abre base recente como rvore" 0   {Abre uma base recente e a utiliza numa janela de rvore}
menuText B ToolsTracker "Acompanha Pea"  0 {Abre a janela de acompanhamento de peas} ;# ***
menuText B ToolsTraining "Treinamento"  0 {Ferramentas de Treinamento (tticas, aberturas,...) }
menuText B ToolsTacticalGame "Jogo Ttico"  0 {Jogar com tticas}
menuText B ToolsSeriousGame "Jogo Srio"  0 {Jogar um jogo srio}
menuText B ToolsTrainOpenings "Aberturas"  0 {Treinamento com um repertrio}
menuText B ToolsTrainReviewGame "Rever jogo"  0 {Acompanhar movimentos de um jogo}
menuText B ToolsTrainTactics "Tticas"  0 {Exerccios de ttica}
menuText B ToolsTrainCalvar "Clculo de Variantes"  0 {Treinamento de clculo de variantes}
menuText B ToolsTrainFindBestMove "Procurar melhor movimento"  0 {Procura o melhor movimento}
menuText B ToolsTrainFics "Jogar na internet"  0 {Jogar em  freechess.org}
# ====== TODO To be translated ======
menuText B ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText B ToolsBookTuning "Sintonizar Livro" 0 {Sintonizar livro de aberturas}
menuText B ToolsConnectHardware "Conectar Hardware" 0 {Conectar hardware externo}
menuText B ToolsConnectHardwareConfigure "Configurar..." 0 {Configurar hardware e conexo externa}
menuText B ToolsConnectHardwareNovagCitrineConnect "Conectar Novag Citrine" 0 {Conectar Novag Citrine}
menuText B ToolsConnectHardwareInputEngineConnect "Conectar Engine de Entrada" 0 {Conectar engine de entrada (ex. DGT)}
menuText B ToolsPInfo "Informacao do Jogador"  0 \
  {Abre/atualiza a janela de informacao do jogador}
menuText B ToolsPlayerReport "Relatrio de jogador..." 3 \
  {Gera um relatrio de jogador} ;# ***
menuText B ToolsRating "Grafico de Rating" 0 \
  {Mostra, em um grafico, a evolucao do rating de um jogador}
menuText B ToolsScore "Grafico de Resultados" 0 {Mostra a janela com o grafico dos resultados}
menuText B ToolsExpCurrent "Exporta jogo corrente" 8 \
  {Grava o jogo corrente em um arquivo texto}
menuText B ToolsExpCurrentPGN "Exporta para PGN..." 15 \
  {Grava o jogo corrente em um arquivo PGN}
menuText B ToolsExpCurrentHTML "Exporta para HTML..." 15 \
  {Grava o jogo corrente em um arquivo HTML}
menuText B ToolsExpCurrentHTMLJS "Exportar jogo para arquivo HTML e JavaScript..." 15 {Escreve o jogo corrente em um arquivo HTML e JavaScript}  
menuText B ToolsExpCurrentLaTeX "Exporta para LaTex..." 15 \
  {Grava o jogo corrente em um arquivo LaTex}
menuText B ToolsExpFilter "Exporta jogos filtrados" 1 \
  {Exporta todos os jogos filtrados para um arquivo texto}
menuText B ToolsExpFilterPGN "Exporta jogos filtrados - PGN..." 17 \
  {Exporta todos os jogos filtrados para um arquivo PGN}
menuText B ToolsExpFilterHTML "Exporta jogos filtrados - HTML..." 17 \
  {Exporta todos os jogos filtrados para um arquivo HTML}
menuText B ToolsExpFilterHTMLJS "Exporta filtro para arquivo HTML e JavaScript..." 17 {Escreve todos os jogos filtrados para um arquivo HTML e JavaScript}  
menuText B ToolsExpFilterLaTeX "Exporta jogos filtrados - LaTex..." 17 \
  {Exporta todos os jogos filtrados para um arquivo LaTex}
menuText B ToolsImportOne "Importa PGN texto..." 0 \
  {Importa jogo de um texto em PGN}
menuText B ToolsImportFile "Importa arquivo de jogos PGN..." 7 \
  {Importa jogos de um arquivo PGN}
menuText B ToolsStartEngine1 "Iniciar engine 1" 0  {Inicia engine 1}
menuText B ToolsStartEngine2 "Iniciar engine 2" 0  {Inicia engine 2}
# ====== TODO To be translated ======
menuText B ToolsCaptureBoard "Capturar posicao atual..." 5  {Salva uma imagem da posicao atual.}
menuText B Play "Jogar" 0
menuText B CorrespondenceChess "Xadrez por correspondncia" 0 {Funes para jogar xadrez por correspondncia usando eMail e Xfcc}
menuText B CCConfigure "Configurar..." 0 {Configura ferramentas externas e configurao geral}
# ====== TODO To be translated ======
menuText B CCConfigRelay "Observar jogos..." 10 {Configura jogos para observar}
menuText B CCOpenDB "Abrir base..." 0 {Abre a base de correspondncia padro}
menuText B CCRetrieve "Recupera jogos" 0 {Recupera jogos via (Xfcc-)}
menuText B CCInbox "Processa caixa de entrada" 0 {Processa todos os arquivos na caixa de entrada do Scid}
menuText B CCSend "Enviar movimento" 0 {Envia seu movimento via eMail ou (Xfcc-)}
menuText B CCResign "Resignar" 0 {Aceita a derrota (no via eMail)}
menuText B CCClaimDraw "Declarar empate" 0 {Envia o movimento e declara empate (no via eMail)}
menuText B CCOfferDraw "Oferecer empate" 0 {Envia o movimento e oferece empate (no via eMail)}
menuText B CCAcceptDraw "Aceitar empate" 0 {Aceita uma oferta de empate (no via eMail)}
menuText B CCNewMailGame "Novo jogo por eMail..." 0 {Inicia um novo jogo por eMail}
menuText B CCMailMove "Enviar movimento..." 0 {Envia movimento ao oponente via eMaail}
menuText B CCGamePage "Pgina do jogo..." 0 {Chama o jogo atravs do browser}
menuText B CCEditCopy "Copiar Lista de Jogos para a base de cpia" 0 {Copia os jogos no formato CSV para a base de cpia}

# Options menu:
menuText B Options "Opcoes" 0
menuText B OptionsBoard "Tabuleiro" 0 {Opes de aparncia do tabuleiro} ;# ***
menuText B OptionsBoardSize "Tamanho do Tabuleiro" 0 {Muda o tamanho do tabuleiro}
menuText B OptionsBoardPieces "Estilo de Pecas no Tabuleiro" 10 \
  {Muda o estilo das pecas mostradas no tabuleiro}
menuText B OptionsBoardColors "Cores..." 0 {Muda as cores do tabuleiro}
menuText B OptionsBoardGraphics "Casas..." 0 {Seleciona texturas para as casas}
translate B OptionsBGW {Seleciona texturas para as casas}
translate B OptionsBoardGraphicsText {Seleciona arquivos grficos para as casas brancas e pretas:}
menuText B OptionsBoardNames "Meus nomes de jogadores..." 0 {Edita meus nomes de jogadores} ;# ***
menuText B OptionsExport "Exportacao" 0 {Muda as opcoes de exportacao de texto}
menuText B OptionsFonts "Fontes" 0 {Muda os fontes}
menuText B OptionsFontsRegular "Normal" 0 {Fonte Normal}
menuText B OptionsFontsMenu "Menu" 0 {Change the menu font} ;# ***
menuText B OptionsFontsSmall "Pequeno" 0 {Fonte pequeno}
# ====== TODO To be translated ======
menuText B OptionsFontsTiny "Pequeno" 0 {Muda o fonte pequeno}
menuText B OptionsFontsFixed "Fixo" 0 {Fonte de largura fixa}
menuText B OptionsGInfo "Informacoes do Jogo" 0 {Opcoes de informacao do jogo}
menuText B OptionsLanguage "Linguagem" 0 {Menu de selecao de linguagem}
menuText B OptionsMovesTranslatePieces "Traduzir Peas" 0 {Traduz a primeira letra do nome das peas}
menuText B OptionsMovesHighlightLastMove "Destacar ltimo movimento" 0 {Destaca o ltimo movimento}
menuText B OptionsMovesHighlightLastMoveDisplay "Mostrar" 0 {Mostra o destaque do ltimo movimento}
menuText B OptionsMovesHighlightLastMoveWidth "Espessura" 0 {Espessura da linha}
menuText B OptionsMovesHighlightLastMoveColor "Cor" 0 {Cor da linha}
# ====== TODO To be translated ======
menuText B OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText B OptionsMoves "Movimentos" 0 {Opcoes para entrada dos movimentos}
menuText B OptionsMovesAsk "Perguntar antes de substituir movimentos" 0 \
  {Pergunta antes de substituir movimentos existentes}
menuText B OptionsMovesAnimate "Tempo de animao" 1 \
  {Define a quantidade de tempo usada para animar os movimentos} ;# ***
menuText B OptionsMovesDelay "Tempo de atraso p/ Jogo automatico..." 1 \
  {Define o tempo de espera antes de entrar no modo de jogo automatico}
menuText B OptionsMovesCoord "Entrada de movimentos por coordenadas" 0 \
  {Aceita o estilo de entrada de movimentos por coordenadas ("g1f3")}
menuText B OptionsMovesSuggest "Mostrar movimentos sugeridos" 0 \
  {Liga/desliga sugestao de movimentos}
menuText B OptionsShowVarPopup "Mostrar janela de variantes" 0 {Liga/Desliga a janela de variantes}  
menuText B OptionsMovesSpace "Adicionar espaos aps o nmero do movimento" 0 {Adiciona espaos aps o nmero do movimento}  
menuText B OptionsMovesKey "Auto completar" 0 \
  {Liga/desliga auto completar a partir do que for digitado}
menuText B OptionsMovesShowVarArrows "Mostrar Setas para variantes" 0 {Liga/Desliga as setas que mostram movimentos em variantes}
menuText B OptionsNumbers "Formato de Numeros" 0 {Selecione o formato usado para numeros}
menuText B OptionsStartup "Iniciar" 1 \
  {Seleciona janelas que serao abertas ao iniciar o programa}
menuText B OptionsTheme "Tema" 0 {Muda a aparncia da interface}
menuText B OptionsWindows "Janelas" 0 {Opcoes para Janelas}
menuText B OptionsWindowsIconify "Auto-iconizar" 5 \
  {Iconizar todas as janelas quando a janela principal eh iconizada}
menuText B OptionsWindowsRaise "Manter no topo" 0 \
  {Mantem no topo certas janelas (ex. barras de progresso) sempre que sao obscurecidas por outras}
menuText B OptionsSounds "Sons..." 2 {Configura sons para anunciar os movimentos} ;# ***
menuText B OptionsWindowsDock "Estacionar janelas" 0 {Estaciona as janelas}
menuText B OptionsWindowsSaveLayout "Salvar layout" 0 {Salva o layout das janelas}
menuText B OptionsWindowsRestoreLayout "Restaurar layout" 0 {Restaura layout}
menuText B OptionsWindowsShowGameInfo "Mostrar Informaes do Jogo" 0 {Mostra informaes do jogo}
menuText B OptionsWindowsAutoLoadLayout "Carregar primeiro layout na entrada" 0 {Carrega automaticamente o primeiro layout ao entrar na aplicao}
menuText B OptionsToolbar "Barra de Ferramentas da Janela Principal" 12 \
  {Exibe/Oculta a barra de ferramentas da janela principal}
menuText B OptionsECO "Carregar arquivo ECO..." 7 {Carrega o arquivo com a classificacao ECO}
menuText B OptionsSpell "Carregar arquivo de verificacao ortografica..." 6 \
  {Carrega o arquivo de verificacao ortografica do Scid}
menuText B OptionsTable "Diretorio de tabelas de base..." 0 \
  {Selecione um arquivo de tabela de base; todas as tabelas nesse diretorio serao usadas}
menuText B OptionsRecent "Arquivos recentes..." 0 \
  {Muda o nmero de arquivos recentes no menu Arquivo} ;# ***
menuText B OptionsBooksDir "Diretrio de Livros..." 0 {Define o diretrio para os livros de aberturas}
menuText B OptionsTacticsBasesDir "Diretrio de bases..." 0 {Define o diretrio para as bases de treinamento de tticas}
menuText B OptionsSave "Salvar Configuracao" 0 \
  "Salva a configuracao no arquivo $::optionsFile"
menuText B OptionsAutoSave "Salva Opcoes ao sair" 0 \
  {Salva automaticamente todas as opcoes quando sair do Scid}

# Help menu:
menuText B Help "Ajuda" 0
menuText B HelpContents "Contents" 0 {Show the help contents page} ;# ***
menuText B HelpIndex "Indice" 0 {Indice da Ajuda}
menuText B HelpGuide "Consulta Rapida" 0 {Mostra a pagina de consulta rapida}
menuText B HelpHints "Dicas" 0 {Mostra a pagina de dicas}
menuText B HelpContact "Informacoes para contato" 0 {Mostra a pagina com informacoes para contato}
menuText B HelpTip "Dica do dia" 0 {Mostra uma dica util do Scid}
menuText B HelpStartup "Janela de Inicializacao" 0 {Mostra a janela de inicializacao}
menuText B HelpAbout "Sobre Scid" 0 {Informacoes sobre o Scid}

# Game info box popup menu:
menuText B GInfoHideNext "Ocultar proximo movimento" 0
menuText B GInfoMaterial "Mostra valor de material" 0
menuText B GInfoFEN "Mostra Diagrama FEN" 16
menuText B GInfoMarks "Mostra setas e casas coloridas" 7
menuText B GInfoWrap "Quebra de linhas longas" 0
menuText B GInfoFullComment "Mostrar comentario completo" 8
menuText B GInfoPhotos "Mostrar Fotos" 5 ;# ***
menuText B GInfoTBNothing "Tabelas de Base: nada" 12
menuText B GInfoTBResult "Tabelas de Base: apenas resultado" 12
menuText B GInfoTBAll "Tabelas de Base: resultado e melhores movimentos" 19
menuText B GInfoDelete "Recuperar este jogo" 0
menuText B GInfoMark "Desmarcar este jogo" 0
menuText B GInfoInformant "Configurar valores do informante" 0

# Main window buttons:
helpMsg B .main.fbutton.button.start {Ir para o inicio do jogo  (tecla: Home)}
helpMsg B .main.fbutton.button.end {Ir para o final do jogo  (tecla: End)}
helpMsg B .main.fbutton.button.back {Retroceder um movimento  (tecla: Seta Esquerda)}
helpMsg B .main.fbutton.button.forward {Avancar um movimento  (tecla: Seta Direita)}
helpMsg B .main.fbutton.button.intoVar {Entrar na variante  (tecla de atalho: v)}
helpMsg B .main.fbutton.button.exitVar {Sair da variante  (tecla de atalho: z)}
helpMsg B .main.fbutton.button.flip {Girar tabuleiro  (tecla de atalho: .)}
helpMsg B .main.fbutton.button.coords {Liga/desliga coordenadas  (tecla de atalho: 0)}
helpMsg B .main.fbutton.button.stm {Liga/Desliga o cone que indica o lado que tem o movimento} ;# ***
helpMsg B .main.fbutton.button.autoplay {Jogo automatico  (tecla: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg B .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg B .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg B .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate B Back {Voltar}
translate B Browse {Navegar} ;# ***
translate B Cancel {Cancelar}
translate B Continue {Continuar}
translate B Clear {Limpar}
translate B Close {Fechar}
translate B Contents {Contedo} ;# ***
translate B Defaults {Defaults}
translate B Delete {Deletar}
translate B Graph {Grafico}
translate B Help {Ajuda}
translate B Import {Importar}
translate B Index {Indice}
translate B LoadGame {Carrega jogo}
translate B BrowseGame {Listar jogo}
translate B MergeGame {Fazer merge do jogo}
translate B MergeGames {Merge dos jogos}
translate B Preview {Visualizacao}
translate B Revert {Reverter}
translate B Save {Salvar}
translate B Search {Pesquisar}
translate B Stop {Parar}
translate B Store {Guardar}
translate B Update {Atualizar}
translate B ChangeOrient {Muda orientacao da janela}
translate B ShowIcons {Mostrar cones} ;# ***
translate B None {Nenhum}
translate B First {Primeiro}
translate B Current {Atual}
translate B Last {Ultimo}

# General messages:
translate B game {jogo}
translate B games {jogos}
translate B move {movimento}
translate B moves {movimentos}
translate B all {tudo}
translate B Yes {Sim}
translate B No {Nao}
translate B Both {Ambos}
translate B King {Rei}
translate B Queen {Dama}
translate B Rook {Torre}
translate B Bishop {Bispo}
translate B Knight {Cavalo}
translate B Pawn {Peao}
translate B White {Branco}
translate B Black {Preto}
translate B Player {Jogador}
translate B Rating {Rating}
translate B RatingDiff {Diferenca de Rating (Brancas - Pretas)}
translate B AverageRating {Rating Mdio} ;# ***
translate B Event {Evento}
translate B Site {Lugar}
translate B Country {Pais}
translate B IgnoreColors {Ignorar cores}
translate B Date {Data}
translate B EventDate {Evento data}
translate B Decade {Dcada} ;# ***
translate B Year {Ano}
translate B Month {Mes}
translate B Months {Janeiro Fevereiro Marco Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro}
translate B Days {Dom Seg Ter Qua Qui Sex Sab}
translate B YearToToday {Anos ate hoje}
translate B Result {Resultado}
translate B Round {Rodada}
translate B Length {Tamanho}
translate B ECOCode {ECO}
translate B ECO {ECO}
translate B Deleted {Apagado}
translate B SearchResults {Resultados da Pesquisa}
translate B OpeningTheDatabase {Abrindo a Base de Dados}
translate B Database {Base de dados}
translate B Filter {Filtro}
translate B noGames {nenhum jogo}
translate B allGames {todos os jogos}
translate B empty {vazio}
translate B clipbase {base de trabalho}
translate B score {Pontuacao}
translate B StartPos {Posicao Inicial}
translate B Total {Total}
translate B readonly {apenas leitura}

# Standard error messages:
translate B ErrNotOpen {Esta base no est aberta.} ;# ***
translate B ErrReadOnly {Esta base  apenas para leitura; no pode ser alterada.} ;# ***
translate B ErrSearchInterrupted {Pesquisa interrompida; os resultados esto incompletos.} ;# ***

# Game information:
translate B twin {duplicata}
translate B deleted {apagado}
translate B comment {comentario}
translate B hidden {oculto}
translate B LastMove {Ultimo movimento}
translate B NextMove {Proximo}
translate B GameStart {Inicio do jogo}
translate B LineStart {Inicio da linha}
translate B GameEnd {Fim do jogo}
translate B LineEnd {Fim da linha}

# Player information:
translate B PInfoAll {Resultados para <b>todos</b> os jogos}
translate B PInfoFilter {Resultados para os jogos <b>filtrados</b>}
translate B PInfoAgainst {Resultados contra}
translate B PInfoMostWhite {Aberturas mais comuns com as Brancas}
translate B PInfoMostBlack {Aberturas mais comuns com as Pretas}
translate B PInfoRating {Historico de Rating}
translate B PInfoBio {Biografia}
translate B PInfoEditRatings {Editar Ratings} ;# ***

# Tablebase information:
translate B Draw {Empate}
translate B stalemate {mate afogado}
translate B withAllMoves {com todos os movimentos}
translate B withAllButOneMove {com um movimento a menos}
translate B with {com}
translate B only {apenas}
translate B lose {derrota}
translate B loses {derrotas}
translate B allOthersLose {qualquer outro perde}
translate B matesIn {mate em}
translate B hasCheckmated {recebeu xeque-mate}
translate B longest {mais longo}
translate B WinningMoves {Movimentos vencedores} ;# ***
translate B DrawingMoves {Movimentos para empate} ;# ***
translate B LosingMoves {Movimentos perdedores} ;# ***
translate B UnknownMoves {Movimentos com resultado desconhecido} ;# ***

# Tip of the day:
translate B Tip {Dica}
translate B TipAtStartup {Dica ao iniciar}

# Tree window menus: ***
menuText B TreeFile "Arquivo" 0
menuText B TreeFileFillWithBase "Carregar Cache com base" 0 {Carrega todos os jogos da base corrente no Cache}
menuText B TreeFileFillWithGame "Carregar Cache com jogo" 0 {Carrega o jogo corrente da base corrente no Cache}
menuText B TreeFileSetCacheSize "Tamanho do Cache" 0 {Define o tamanho do cache}
menuText B TreeFileCacheInfo "Informao do Cache" 0 {Informaes sobre a utilizao do cache}
menuText B TreeFileSave "Salvar arquivo de cache" 0 \
  {Salvar o arquivo de cache da arvore (.stc)}
menuText B TreeFileFill "Criar arquivo de cache" 0 \
  {Enche o arquivo de cache com as posicoes comuns na abertura}
menuText B TreeFileBest "Lista dos melhores jogos" 0 \
  {Mostra a lista dos melhores jogos da arvore}
menuText B TreeFileGraph "Janela de Grafico" 0 \
  {Mostra o grafico para este galho da arvore}
menuText B TreeFileCopy "Copiar texto da arvore para a area de transferencia" \
  1 {Copiar texto da arvore para a area de transferencia}
menuText B TreeFileClose "Fechar janela de arvore" 0 {Fechar janela de arvore}
menuText B TreeMask "Mscara" 0
menuText B TreeMaskNew "Nova" 0 {Nova mscara}
menuText B TreeMaskOpen "Abrir" 0 {Abrir mscara}
menuText B TreeMaskOpenRecent "Abrir recente" 0 {Abre mscara recente}
menuText B TreeMaskSave "Salvar" 0 {Salva mscara}
menuText B TreeMaskClose "Fechar" 0 {Fecha mscara}
menuText B TreeMaskFillWithGame "Preencher com jogo" 0 {Preenche mscara com jogo}
menuText B TreeMaskFillWithBase "Preencher com base" 0 {Preenche a mscara com todos os jogos da base}
menuText B TreeMaskInfo "Info" 0 {Mostrar estatisticas para a mscara corrente}
menuText B TreeMaskDisplay "Mostrar mapa da mscara" 0 {Mostra os dados da mscara em forma de rvore}
menuText B TreeMaskSearch "Pesquisar" 0 {Pesquisa na mscara corrente}
menuText B TreeSort "Ordenar" 0
menuText B TreeSortAlpha "Alfabetica" 0
menuText B TreeSortECO "ECO" 0
menuText B TreeSortFreq "Frequencia" 0
menuText B TreeSortScore "Pontuacao" 0
menuText B TreeOpt "Opcoes" 0
menuText B TreeOptSlowmode "Modo Lento" 0 {Modo lento para atualizaes (mais acurado)}
menuText B TreeOptFastmode "Modo Rpido" 0 {Modo rpido para atualizaes (sem transsposies de movimentos)}
menuText B TreeOptFastAndSlowmode "Modo rpido e lento" 0 {Modo rpido e lento para atualizaes}
menuText B TreeOptStartStop "Atualizao automtica" 0 {Liga/Desliga a atualizao automtica da janela de rvore}
menuText B TreeOptLock "Lock" 0 {Trava/Destrava a arvore para o banco corrente}
menuText B TreeOptTraining "Treinamento" 0 \
  {Liga/Desliga o modo treinamento na arvore}
menuText B TreeOptAutosave "Salvar automaticamente arquivo de cache" 0 \
  {Salvar automaticamente o arquivo de cache quando fechar a janela de arvore}
menuText B TreeHelp "Ajuda" 0
menuText B TreeHelpTree "Ajuda para arvore" 0
menuText B TreeHelpIndex "Indice da Ajuda" 0
translate B SaveCache {Salvar Cache}
translate B Training {Treinamento}
translate B LockTree {Travamento}
translate B TreeLocked {Travada} ;# ***
translate B TreeBest {Melhor}
translate B TreeBestGames {Melhores jogos da arvore}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate B TreeTitleRow \
  {    Mov.   ECO       Frequencia   Score  AvElo Perf AvYear %Empat} ;# ***
translate B TreeTotal {TOTAL}
translate B DoYouWantToSaveFirst {Quer salvar primeiro?}
translate B AddToMask {Adicionar  mscara}
translate B RemoveFromMask {Remover da mscara}
translate B AddThisMoveToMask {Adicionar este movimento  mscara}
translate B SearchMask {Pesquisar na mscara}
translate B DisplayMask {Mostrar mscara}
translate B Nag {Cdigo Nag}
translate B Marker {Marcador}
translate B Include {Incluir}
translate B Exclude {Excluir}
translate B MainLine {Linha Principal}
translate B Bookmark {Marcador}
translate B NewLine {Nova Linha}
translate B ToBeVerified {Verificar}
translate B ToTrain {Para treinar}
translate B Dubious {Duvidoso}
translate B ToRemove {Para remover}
translate B NoMarker {Sem marcador}
translate B ColorMarker {Cor}
translate B WhiteMark {Branca}
translate B GreenMark {Verde}
translate B YellowMark {Amarela}
translate B BlueMark {Azul}
translate B RedMark {Vermelha}
translate B CommentMove {Comentar movimento}
translate B CommentPosition {Comentar posio}
translate B AddMoveToMaskFirst {Adicionar movimento  mscara primeiro}
translate B OpenAMaskFileFirst {Abrir uma mscara primeiro}
translate B Positions {Posies}
translate B Moves {Movimentos}

# Finder window:
menuText B FinderFile "Arquivo" 0
menuText B FinderFileSubdirs "Buscar nos subdiretorios" 0
menuText B FinderFileClose "Fecha buscador de arquivos" 0
menuText B FinderSort "Ordenar" 0
menuText B FinderSortType "Tipo" 0
menuText B FinderSortSize "Tamanho" 0
menuText B FinderSortMod "Modificado" 0
menuText B FinderSortName "Nome" 0
menuText B FinderSortPath "Caminho" 0
menuText B FinderTypes "Tipos" 0
menuText B FinderTypesScid "Bases Scid" 0
menuText B FinderTypesOld "Bases Scid antigas" 0
menuText B FinderTypesPGN "Arquivos PGN" 0
menuText B FinderTypesEPD "Arquivos EPD (book)" 0
menuText B FinderTypesRep "Arquivos de Repertorio" 0
menuText B FinderHelp "Ajuda" 0
menuText B FinderHelpFinder "Ajuda do Buscador" 0
menuText B FinderHelpIndex "Indice da Ajuda" 0
translate B FileFinder {Buscador de Arquivos}
translate B FinderDir {Diretorio}
translate B FinderDirs {Diretorios}
translate B FinderFiles {Arquivos}
translate B FinderUpDir {Acima}
translate B FinderCtxOpen {Abrir}
translate B FinderCtxBackup {Backup}
translate B FinderCtxCopy {Copiar}
translate B FinderCtxMove {Mover}
translate B FinderCtxDelete {Apagar}

# Player finder:
menuText B PListFile "Arquivo" 0
menuText B PListFileUpdate "Atualizar" 0
menuText B PListFileClose "Close Player Finder" 0 ;# ***
menuText B PListSort "Ordenar" 0
menuText B PListSortName "Name" 0 ;# ***
menuText B PListSortElo "Elo" 0
menuText B PListSortGames "Jogos" 0
menuText B PListSortOldest "Mais antigo" 0 ;# ***
menuText B PListSortNewest "Mais novo" 0 ;# ***

# Tournament finder:
menuText B TmtFile "Arquivo" 0
menuText B TmtFileUpdate "Atualizar" 0
menuText B TmtFileClose "Fecha Buscador de Torneios" 0
menuText B TmtSort "Ordenar" 0
menuText B TmtSortDate "Data" 0
menuText B TmtSortPlayers "Jogadores" 0
menuText B TmtSortGames "Jogos" 0
menuText B TmtSortElo "Elo" 0
menuText B TmtSortSite "Lugar" 0
menuText B TmtSortEvent "Evento" 1
menuText B TmtSortWinner "Vencedor" 0
translate B TmtLimit "Limite de Lista"
translate B TmtMeanElo "Menor Elo"
translate B TmtNone "Nenhum torneio encontrado."

# Graph windows:
menuText B GraphFile "Arquivo" 0
menuText B GraphFileColor "Salvar como Postscript Colorido..." 12
menuText B GraphFileGrey "Salvar como Postscript Cinza..." 23
menuText B GraphFileClose "Fecha janela" 6
menuText B GraphOptions "Opcoes" 0
menuText B GraphOptionsWhite "Branco" 0
menuText B GraphOptionsBlack "Preto" 0
menuText B GraphOptionsBoth "Ambos" 0
menuText B GraphOptionsPInfo "Informacao do Jogador" 0
translate B GraphFilterTitle "Grfico de filtro: frequencia por 1000 jogos" ;# ***
translate B GraphAbsFilterTitle "Grfico de filtro: frequencia dos jogos"
translate B ConfigureFilter {Configurar Eixos X para Ano, Rating e Movimentos}
translate B FilterEstimate "Estimar"
translate B TitleFilterGraph "Scid: Grfico de Filtro"

# Analysis window:
translate B AddVariation {Adicionar variante}
translate B AddAllVariations {Adicionar todas as Variantes}
translate B AddMove {Adicionar movimento}
translate B Annotate {Anotar}
translate B ShowAnalysisBoard {Mostrar tabuleiro de anlise}
translate B ShowInfo {Mostrar informaes do engine}
translate B FinishGame {Encerrar jogo}
translate B StopEngine {Parar engine}
translate B StartEngine {Iniciar engine}
translate B LockEngine {Travar engine na posio corrente}
translate B AnalysisCommand {Comando de Analise}
translate B PreviousChoices {Escolhas Anteriores}
translate B AnnotateTime {Define o tempo entre movimentos em segundos}
translate B AnnotateWhich {Adiciona variante}
translate B AnnotateAll {Parar movimentos de ambos os lados}
translate B AnnotateAllMoves {Anotar todos os movimentos}
translate B AnnotateWhite {Apenas para movimentos das Brancas}
translate B AnnotateBlack {Apenas para movimentos das Pretas}
translate B AnnotateBlundersOnly {Quando o mivimento for um erro crasso}
translate B AnnotateBlundersOnlyScoreChange {As anlises indicam um erro crasso, com mudana de score de/para: }
translate B BlundersThreshold {Limite}
# TODO: Translate
translate B ScoreAllMoves {Score all moves}
translate B LowPriority {Baixa prioridade da CPU} ;# ***
translate B ClickHereToSeeMoves {Clique aqui para ver os movimentos}
translate B ConfigureInformant {Configurar Informante}
translate B Informant!? {Movimento interessante}
translate B Informant? {Movimento pobre}
translate B Informant?? {Erro crasso}
translate B Informant?! {Movimento duvidoso}
translate B Informant+= {Branca tem alguma vantagem}
translate B Informant+/- {Branca tem vantagem moderada}
translate B Informant+- {Branca tem vantagem decisiva}
translate B Informant++- {O jogo  considerado como ganho}
translate B Book {Livro}
translate B OtherBookMoves {Livro do oponente}
translate B OtherBookMovesTooltip {Movimentos para os quais o oponente tem resposta}

# Analysis Engine open dialog:
translate B EngineList {Lista de Programas de Analise}
translate B EngineName {Nome}
translate B EngineCmd {Comando}
translate B EngineArgs {Parametros}
translate B EngineDir {Diretorio}
translate B EngineElo {Elo}
translate B EngineTime {Data}
translate B EngineNew {Novo}
translate B EngineEdit {Editar}
translate B EngineRequired {Campos em negrito so obrigatrios; os demais so opcionais}

# Stats window menus:
menuText B StatsFile "Arquivo" 0
menuText B StatsFilePrint "Imprimir para arquivo..." 0
menuText B StatsFileClose "Fecha janela" 0
menuText B StatsOpt "Opcoes" 0

# PGN window menus:
menuText B PgnFile "Arquivo" 0
menuText B PgnFileCopy "Copiar o jogo para a rea de transferncia" 0 ;# ***
menuText B PgnFilePrint "Imprimir para arquivo..." 0
menuText B PgnFileClose "Fechar janela PGN" 0
menuText B PgnOpt "Monitor" 0
menuText B PgnOptColor "Monitor Colorido" 0
menuText B PgnOptShort "Cabecalho curto (3 linhas)" 0
menuText B PgnOptSymbols "Anotacoes simbolicas" 0
menuText B PgnOptIndentC "Identar comentarios" 0
menuText B PgnOptIndentV "Identar variantes" 7
menuText B PgnOptColumn "Estilo Coluna (um movimento por linha)" 0
menuText B PgnOptSpace "Espaco apos o numero do movimento" 0
menuText B PgnOptStripMarks "Remover os cdigos coloridos das casas/setas" 1 ;# ***
menuText B PgnOptBoldMainLine "Use negrito para movimentos da linha principal" 4 ;# ***
menuText B PgnColor "Cores" 0
menuText B PgnColorHeader "Cabecalho..." 0
menuText B PgnColorAnno "Anotacoes..." 0
menuText B PgnColorComments "Comentarios..." 0
menuText B PgnColorVars "Variantes..." 0
menuText B PgnColorBackground "Cor de fundo..." 0
menuText B PgnColorMain "Linha principal..." 0
menuText B PgnColorCurrent "Cor de fundo do movimento atual..." 1
menuText B PgnHelp "Ajuda" 0
menuText B PgnHelpPgn "Ajuda PGN" 0
menuText B PgnHelpIndex "Indice" 0
translate B PgnWindowTitle {Notao do Jogo - jogo %u} ;# ***

# Crosstable window menus:
menuText B CrosstabFile "Arquivo" 0
menuText B CrosstabFileText "Imprime para arquivo texto..." 9
menuText B CrosstabFileHtml "Imprime para arquivo HTML..." 9
menuText B CrosstabFileLaTeX "Imprime para arquivo LaTex..." 9
menuText B CrosstabFileClose "Fechar tabela de cruzamentos" 0
menuText B CrosstabEdit "Editar" 0
menuText B CrosstabEditEvent "Evento" 0
menuText B CrosstabEditSite "Lugar" 0
menuText B CrosstabEditDate "Data" 0
menuText B CrosstabOpt "Monitor" 0
menuText B CrosstabOptAll "Todos contra todos" 0
menuText B CrosstabOptSwiss "Suio" 0
menuText B CrosstabOptKnockout "Knockout" 0
menuText B CrosstabOptAuto "Automatico" 0
menuText B CrosstabOptAges "Idade em anos" 0
menuText B CrosstabOptNats "Nacionalidades" 0
menuText B CrosstabOptRatings "Ratings" 0
menuText B CrosstabOptTitles "Titulos" 0
menuText B CrosstabOptBreaks "Scores de desempate" 0
menuText B CrosstabOptDeleted "Incluir jogos apagados" 8 ;# ***
menuText B CrosstabOptColors "Cores (apenas para tabela Swiss)" 0
menuText B CrosstabOptColumnNumbers "Colunas numeradas (apenas tabelas Todos-contra-Todos)" 2 ;# ***
menuText B CrosstabOptGroup "Pontuacao do Grupo" 0
menuText B CrosstabSort "Ordenar" 0
menuText B CrosstabSortName "Nome" 0
menuText B CrosstabSortRating "Rating" 0
menuText B CrosstabSortScore "Pontuacao" 0
menuText B CrosstabColor "Cor" 0
menuText B CrosstabColorPlain "Texto puro" 0
menuText B CrosstabColorHyper "Hipertexto" 0
menuText B CrosstabHelp "Ajuda" 0
menuText B CrosstabHelpCross "Ajuda para tabela de cruzamentos" 0
menuText B CrosstabHelpIndex "Indice da Ajuda" 0
translate B SetFilter {Setar filtro}
translate B AddToFilter {Adicionar ao filtro}
translate B Swiss {Suio}
translate B Category {Categoria} ;# ***

# Opening report window menus:
menuText B OprepFile "Arquivo" 0
menuText B OprepFileText "Imprimir para arquivo texto..." 9
menuText B OprepFileHtml "Imprimir para arquivo HTML..." 9
menuText B OprepFileLaTeX "Imprimir para arquivo LaTex..." 9
menuText B OprepFileOptions "Opcoes..." 0
menuText B OprepFileClose "Fechar janela de relatorio" 0
menuText B OprepFavorites "Favoritos" 1 ;# ***
menuText B OprepFavoritesAdd "Adicionar Relatrio..." 0 ;# ***
menuText B OprepFavoritesEdit "Editar Relatrio de Favoritos..." 0 ;# ***
menuText B OprepFavoritesGenerate "Gerar Relatrios..." 0 ;# ***
menuText B OprepHelp "Ajuda" 0
menuText B OprepHelpReport "Ajuda para Relatorio de abertura" 0
menuText B OprepHelpIndex "Indice da Ajuda" 0

# Repertoire editor:
menuText B RepFile "Arquivo" 0
menuText B RepFileNew "Novo" 0
menuText B RepFileOpen "Abrir..." 0
menuText B RepFileSave "Salvar..." 0
menuText B RepFileSaveAs "Salvar como..." 5
menuText B RepFileClose "Fechar janela" 0
menuText B RepEdit "Editar" 0
menuText B RepEditGroup "Adicionar grupo" 4
menuText B RepEditInclude "Adicionar linha incluida" 4
menuText B RepEditExclude "Adicionar linha excluida" 4
menuText B RepView "Visao" 0
menuText B RepViewExpand "Expandir todos os grupos" 0
menuText B RepViewCollapse "Contrair todos os grupos" 0
menuText B RepSearch "Pesquisa" 0
menuText B RepSearchAll "Tudo do repertorio..." 0
menuText B RepSearchDisplayed "Apenas linhas exibidas..." 0
menuText B RepHelp "Ajuda" 0
menuText B RepHelpRep "Ajuda de Repertorio" 0
menuText B RepHelpIndex "Indice da Ajuda" 0
translate B RepSearch "Pesquisa no repertorio"
translate B RepIncludedLines "linhas incluidas"
translate B RepExcludedLines "linhas excluidas"
translate B RepCloseDialog {Este repertorio sofreu alteracoes.

Voce realmente quer continuar e descartar as alteracoes que foram feitas?
}

# Header search:
translate B HeaderSearch {Busca por cabecalho}
translate B EndSideToMove {Lado que tem o mivimento ao final do jogo} ;# ***
translate B GamesWithNoECO {Jogos sem ECO?}
translate B GameLength {Tamanho do jogo}
translate B FindGamesWith {Encontrar jogos com}
translate B StdStart {Inicio padrao}
translate B Promotions {Promocoes}
translate B Comments {Comentarios}
translate B Variations {Variantes}
translate B Annotations {Anotacoes}
translate B DeleteFlag {Apagar Flag}
translate B WhiteOpFlag {Abertura Brancas}
translate B BlackOpFlag {Abertura Pretas}
translate B MiddlegameFlag {Meio-jogo}
translate B EndgameFlag {Final}
translate B NoveltyFlag {Novidade}
translate B PawnFlag {Estrutura de Peoes}
translate B TacticsFlag {Tatica}
translate B QsideFlag {Jogo na ala da Dama}
translate B KsideFlag {Jogo na ala do Rei}
translate B BrilliancyFlag {Brilhantismo}
translate B BlunderFlag {Erro!!!}
translate B UserFlag {Usuario}
translate B PgnContains {PGN contem texto}
# ====== TODO To be translated ======
translate B Annotator {Anotador}
# ====== TODO To be translated ======
translate B Cmnts {Apenas jogos anotados}

# Game list window:
translate B GlistNumber {Numero}
translate B GlistWhite {Branco}
translate B GlistBlack {Preto}
translate B GlistWElo {B-Elo}
translate B GlistBElo {P-Elo}
translate B GlistEvent {Evento}
translate B GlistSite {Lugar}
translate B GlistRound {Rodada}
translate B GlistDate {Data}
translate B GlistYear {Ano}
translate B GlistEDate {Evento-Data}
translate B GlistResult {Resultado}
translate B GlistLength {Tamanho}
translate B GlistCountry {Pais}
translate B GlistECO {ECO}
translate B GlistOpening {Abertura}
translate B GlistEndMaterial {Material-Final}
translate B GlistDeleted {Apagado}
translate B GlistFlags {Sinalizador}
translate B GlistVars {Variantes}
translate B GlistComments {Comentarios}
translate B GlistAnnos {Anotacoes}
translate B GlistStart {Iniciar}
translate B GlistGameNumber {Numero do Jogo}
# ====== TODO To be translated ======
translate B GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate B GlistRating {Rating}
translate B GlistFindText {Encontrar texto}
translate B GlistMoveField {Mover}
translate B GlistEditField {Configurar}
translate B GlistAddField {Adicionar}
translate B GlistDeleteField {Remover}
translate B GlistWidth {Largura}
translate B GlistAlign {Alinhar}
# ====== TODO To be translated ======
translate B GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate B GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate B GlistAlignC {Align: center}
translate B GlistColor {Cor}
translate B GlistSep {Separador}
# ====== TODO To be translated ======
translate B GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate B GlistNewSort {New}
# ====== TODO To be translated ======
translate B GlistAddToSort {Add}
# ====== TODO To be translated ======
translate B GsortSort {Sort...}
# ====== TODO To be translated ======
translate B GsortDate {Date}
# ====== TODO To be translated ======
translate B GsortYear {Year}
# ====== TODO To be translated ======
translate B GsortEvent {Event}
# ====== TODO To be translated ======
translate B GsortSite {Site}
# ====== TODO To be translated ======
translate B GsortRound {Round}
# ====== TODO To be translated ======
translate B GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate B GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate B GsortECO {ECO}
# ====== TODO To be translated ======
translate B GsortResult {Result}
# ====== TODO To be translated ======
translate B GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate B GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate B GsortCountry {Country}
# ====== TODO To be translated ======
translate B GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate B GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate B GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate B GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate B GsortComments {Comments}
# ====== TODO To be translated ======
translate B GsortVariations {Variations}
# ====== TODO To be translated ======
translate B GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate B GsortAscending {Ascending}
# ====== TODO To be translated ======
translate B GsortDescending {Descending}
# ====== TODO To be translated ======
translate B GsortAdd {Add}
# ====== TODO To be translated ======
translate B GsortStore {Store}
# ====== TODO To be translated ======
translate B GsortLoad {Load}
translate B GlistRemoveThisGameFromFilter  {Remover este jogo do filtro}
translate B GlistRemoveGameAndAboveFromFilter  {Remover jogo (e todos antes dele) do filtro}
translate B GlistRemoveGameAndBelowFromFilter  {Remover jogo (e todos depois dele) do filtro}
translate B GlistDeleteGame {Recuperar este jogo} 
translate B GlistDeleteAllGames {Apagar todos os jogos no filtro} 
translate B GlistUndeleteAllGames {Recuperar todos os jogos no filtro} 
translate B GlistMergeGameInBase {Incorporar jogo em outra base} 

# Maintenance window:
translate B DatabaseName {Nome da base de dados:}
translate B TypeIcon {Icone de Tipo:}
translate B NumOfGames {Jogos:}
translate B NumDeletedGames {Jogos deletados:}
translate B NumFilterGames {Jogos no filtro:}
translate B YearRange {Faixa de Anos:}
translate B RatingRange {Faixa de Rating:}
translate B Description {Descrio} ;# ***
translate B Flag {Sinalizador}
translate B CustomFlags {Flags customizadas}
translate B DeleteCurrent {Deletar jogo corrente}
translate B DeleteFilter {Deletar jogos filtrados}
translate B DeleteAll {Deletar todos os jogos}
translate B UndeleteCurrent {Recuperar jogo corrente}
translate B UndeleteFilter {Recuperar jogos filtrados}
translate B UndeleteAll {Recuperar todos os jogos}
translate B DeleteTwins {Deletar duplicatas}
translate B MarkCurrent {Marcar jogo corrente}
translate B MarkFilter {Marcar jogos filtrados}
translate B MarkAll {Marcar todos os jogos}
translate B UnmarkCurrent {Desmarcar jogo corrente}
translate B UnmarkFilter {Desmarcar jogos filtrados}
translate B UnmarkAll {Desmarcar todos os jogos}
translate B Spellchecking {Verificacao Ortografica}
translate B Players {Jogadores}
translate B Events {Eventos}
translate B Sites {Lugares}
translate B Rounds {Rodadas}
translate B DatabaseOps {Operacoes na base de dados}
translate B ReclassifyGames {Jogos classificados por ECO}
translate B CompactDatabase {Compactar base de dados}
translate B SortDatabase {Ordenar base de dados}
translate B AddEloRatings {Adicionar ratings}
translate B AutoloadGame {Carregar autom. o jogo numero}
translate B StripTags {Remover tags PGN} ;# ***
translate B StripTag {Remover tag} ;# ***
translate B Cleaner {Limpador}
translate B CleanerHelp {
O Limpador do Scid executara todas as acoes de manutencao selecionadas da lista abaixo, no banco corrente.

As configuracoes atuais na classificacao por ECO e dialogos de exclusao de duplicatas serao aplicadas se voce escolher estas funcoes.
}
translate B CleanerConfirm {
Uma vez iniciado, o Limpador nao podera ser interrompido!

Esta operacao pode levar muito tempo para ser executada em uma grande base de dados, dependendo das funcoes selecionadas e das configuracoes atuais.

Voce esta certo de que quer iniciar as acoes de manutencao selecionadas?
}
translate B TwinCheckUndelete {para virar; "u" recupera ambos)}
translate B TwinCheckprevPair {Par anterior}
translate B TwinChecknextPair {Prximo par}
translate B TwinChecker {Scid: Verificador de duplicatas}
translate B TwinCheckTournament {Jogos no torneio:}
translate B TwinCheckNoTwin {Nenhuma duplicata  }
translate B TwinCheckNoTwinfound {Nenhuma duplicata foi detectada para este jogo.\nPara mostrar duplicatas nesta janela, voc deve usar primeiro a funo "Apagar Duplicatas...". }
translate B TwinCheckTag {Compartilhar tags...}
translate B TwinCheckFound1 {Scid encontrou $result duplicatas}
translate B TwinCheckFound2 { e definiu suas flags de excluso}
translate B TwinCheckNoDelete {No h jogos para excluir nesta base.}
translate B TwinCriteria1 { Suas configuraes para encontrar duplicatas podem \nfazer com que no duplicatas com movimentos similares sejam marcadas como se fossem.}
translate B TwinCriteria2 { recomendado que, se voc selecionar "No" para "mesmos movimentos", voc selecione "Sim" para as cores, evento, local, rodada, ano e ms.\nVoc quer continuar e excluir as duplicatas mesmo assim? }
translate B TwinCriteria3 { recomendado que voc especifique "Sim" para pelo menos duas das configuraes de "mesmo local", "mesma rodada" e "mesmo ano".\nVoc quer continuar e excluir as duplicatas mesmo assim?}
translate B TwinCriteriaConfirm {Scid: Confirme as configuraes de duplicatas}
translate B TwinChangeTag "Alterar as seguintes tags:\n\n"
translate B AllocRatingDescription "Este comando utilizar o arquivo corrente de verificao ortogrfica para adicionar ratings Elo aos jogos nesta base. Sempre que um jogador no tiver um rating corrente, mas seu rating no momento do jogo estiver listado no arquivo de verificao, esse rating ser adicionado."
translate B RatingOverride "Sobrescrever ratings existentes diferentes de zero?"
translate B AddRatings "Adicionar ratings a:"
translate B AddedRatings {Scid adicionou $r ratings Elo em $g jogos.}
translate B NewSubmenu "Novo Submenu"

# Comment editor:
translate B AnnotationSymbols  {Simbolos de Anotacao:}
translate B Comment {Comentario:}
translate B InsertMark {Inserir marca} ;# ***
translate B InsertMarkHelp {
Insere/remove marca: Seleciona cor, tipo, casa.
Insere/remove seta: Clique com o boto direito em duas casas.
} ;# ***

# Nag buttons in comment editor:
translate B GoodMove {Bom Movimento} ;# ***
translate B PoorMove {Movimento Pobre} ;# ***
translate B ExcellentMove {Movimento Excelente} ;# ***
translate B Blunder {Erro!!!} ;# ***
translate B InterestingMove {Movimento Interessante} ;# ***
translate B DubiousMove {Movimento Duvidoso} ;# ***
translate B WhiteDecisiveAdvantage {Branca tem vantagem decisiva} ;# ***
translate B BlackDecisiveAdvantage {Preta tem vantagem decisiva} ;# ***
translate B WhiteClearAdvantage {Branca tem clara vantagem} ;# ***
translate B BlackClearAdvantage {Preta tem clara vantagem} ;# ***
translate B WhiteSlightAdvantage {Branca tem alguma vantagem} ;# ***
translate B BlackSlightAdvantage {Preta tem alguma vantagem} ;# ***
translate B Equality {Igualdade} ;# ***
translate B Unclear {No claro} ;# ***
translate B Diagram {Diagrama} ;# ***

# Board search:
translate B BoardSearch {Pesquisa Tabuleiro}
translate B FilterOperation {Operacao no filtro corrente:}
translate B FilterAnd {E (Filtro restrito)}
translate B FilterOr {OU (Adicionar ao filtro)}
translate B FilterIgnore {IGNORAR (Limpar filtro)}
translate B SearchType {Tipo de pesquisa:}
translate B SearchBoardExact {Posicao exata (todas as pecas nas mesmas casas)}
translate B SearchBoardPawns {Peoes (mesmo material, todos os peoes nas mesmas casas)}
translate B SearchBoardFiles {Colunas (mesmo material, todos os peoes na mesma coluna)}
translate B SearchBoardAny {Qualquer (mesmo material, peoes e pecas em qualquer posicao)}
translate B SearchInRefDatabase { Pesquisa na base }
translate B LookInVars {Olhar nas variantes}

# Material search:
translate B MaterialSearch {Pesquisa Material}
translate B Material {Material}
translate B Patterns {Padroes}
translate B Zero {Zero}
translate B Any {Qualquer}
translate B CurrentBoard {Tabuleiro corrente}
translate B CommonEndings {Finais comuns}
translate B CommonPatterns {Padroes comuns}
translate B MaterialDiff {Diferenca de Material}
translate B squares {casas}
translate B SameColor {Mesma cor}
translate B OppColor {Cor oposta}
translate B Either {Qualquer}
translate B MoveNumberRange {Faixa do numero de movimentos}
translate B MatchForAtLeast {Conferem por pelo menos}
translate B HalfMoves {meios movimentos}

# Common endings in material search:
translate B EndingPawns {Finais com Pees} ;# ***
translate B EndingRookVsPawns {Torre contra Pees} ;# ***
translate B EndingRookPawnVsRook {Torre e 1 Peo contra Torre} ;# ***
translate B EndingRookPawnsVsRook {Torre e Pees contra Torre} ;# ***
translate B EndingRooks {Finais Torre contra Torre} ;# ***
translate B EndingRooksPassedA {Finais Torre contra Torre com Peo passado na coluna a} ;# ***
translate B EndingRooksDouble {Finais com Torres dobradas} ;# ***
translate B EndingBishops {Finais Bispo contra Bispo} ;# ***
translate B EndingBishopVsKnight {Finais Bispo contra Cavalo} ;# ***
translate B EndingKnights {Finais Cavalo contra Cavalo} ;# ***
translate B EndingQueens {Finais Dama contra Dama} ;# ***
translate B EndingQueenPawnVsQueen {Dama e 1 Peo contra Dama} ;# ***
translate B BishopPairVsKnightPair {Meio-jogo com 2 Bispos contra 2 Cavalos} ;# ***

# Common patterns in material search:
translate B PatternWhiteIQP {IQP Branca} ;# ***
translate B PatternWhiteIQPBreakE6 {IQP Branca: avano d4-d5 contra e6} ;# ***
translate B PatternWhiteIQPBreakC6 {IQP Branca: avano d4-d5 contra c6} ;# ***
translate B PatternBlackIQP {IQP Preta} ;# ***
translate B PatternWhiteBlackIQP {IQP Branca vs. IQP Preta} ;# ***
translate B PatternCoupleC3D4 {Pees Brancos isolados em c3+d4} ;# ***
translate B PatternHangingC5D5 {Pees Pretos em c5 e d5} ;# ***
translate B PatternMaroczy {Maroczy Center (com Pees em c4 e e4)} ;# ***
translate B PatternRookSacC3 {Sacrifcio de Torre em c3} ;# ***
translate B PatternKc1Kg8 {O-O-O vs. O-O (Rc1 vs. Rg8)} ;# ***
translate B PatternKg1Kc8 {O-O vs. O-O-O (Rg1 vs. Rc8)} ;# ***
translate B PatternLightFian {Fianchettos nas casas brancas(Bispo-g2 vs. Bispo-b7)} ;# ***
translate B PatternDarkFian {Fianchettos nas casas pretas (Bispo-b2 vs. Bispo-g7)} ;# ***
translate B PatternFourFian {Quatro Fianchettos (Bispos em b2,g2,b7,g7)} ;# ***

# Game saving:
translate B Today {Hoje}
translate B ClassifyGame {Classificar Jogo}

# Setup position:
translate B EmptyBoard {Tabuleiro vazio}
translate B InitialBoard {Tabuleiro Inicial}
translate B SideToMove {Lado que move}
translate B MoveNumber {No. do Movimento}
translate B Castling {Roque}
translate B EnPassantFile {coluna En Passant}
translate B ClearFen {Limpar FEN}
translate B PasteFen {Colar FEN}
translate B SaveAndContinue {Salvar e continuar}
translate B DiscardChangesAndContinue {Descartar alteraes\ne continuar}
translate B GoBack {Voltar}

# Replace move dialog:
translate B ReplaceMove {Substituir movimento}
translate B AddNewVar {Adicionar nova variante}
translate B NewMainLine {Nova linha principal}
translate B ReplaceMoveMessage {Um movimento ja existe nesta posicao.

Voce pode substitui-lo, descartar todos os movimentos que o seguem, ou adicionar seu movimento como uma nova variante.

(Voce pode evitar que esta mensagem apareca no futuro desligando a opcao "Perguntar antes de substituir movimentos" no menu Opcoes:Movimentos.)}

# Make database read-only dialog:
translate B ReadOnlyDialog {Se voce tornar esta base de dados apenas para leitura, nenhuma alteracao sera permitida.
Nenhum jogo podera ser salvo ou substituido, e nenhuma flag de exclusao podera ser alterada.
Qualquer ordenacao ou resultados de classificacao por ECO serao temporarios.

Para poder tornar a base de dados atualizavel novamente, feche-a e abra-a novamente.

Voce realmente quer que esta base de dados seja apenas de leitura?}

# Clear game dialog:
translate B ClearGameDialog {Este jogo foi alterado.

Voce realmente quer continuar e descartar as mudancas feitas?
}

# Exit dialog:
translate B ExitDialog {Voce quer realmente sair do Scid?}
translate B ExitUnsaved {As bases a seguir tem mudanas nos jogos que no foram salvas. Se voc sair agora, essas mudanas sero perdidas.} ;# ***

# Import window:
translate B PasteCurrentGame {Colar jogo corrente}
translate B ImportHelp1 {Introduzir ou colar um jogo em formato PGN no quadro acima.}
translate B ImportHelp2 {Quaisquer erros ao importar o jogo serao mostrados aqui.}
translate B OverwriteExistingMoves {Sobrescrever movimentos existentes ?}

# ECO Browser:
translate B ECOAllSections {todas as secoes ECO}
translate B ECOSection {secao ECO}
translate B ECOSummary {Resumo para}
translate B ECOFrequency {Frequencia de subcodigos para}

# Opening Report:
translate B OprepTitle {Relatorio de Abertura}
translate B OprepReport {Relatorio}
translate B OprepGenerated {Gerado por}
translate B OprepStatsHist {Estatisticas e Historico}
translate B OprepStats {Estatisticas}
translate B OprepStatAll {Todas as partidas do relatorio}
translate B OprepStatBoth {Ambos com rating}
translate B OprepStatSince {Desde}
translate B OprepOldest {Jogos mais antigos}
translate B OprepNewest {Jogos mais recentes}
translate B OprepPopular {Popularidade Atual}
translate B OprepFreqAll {Frequencia em todos os anos:   }
translate B OprepFreq1   {No ultimo ano: }
translate B OprepFreq5   {Nos ultimos 5 anos: }
translate B OprepFreq10  {Nos ultimos 10 anos: }
translate B OprepEvery {uma vez em cada %u jogos}
translate B OprepUp {ate %u%s de todos os anos}
translate B OprepDown {menos que %u%s de todos os anos}
translate B OprepSame {nenhuma mudanca em todos os anos}
translate B OprepMostFrequent {Jogadores mais frequentes}
translate B OprepMostFrequentOpponents {Oponentes mais frequentes} ;# ***
translate B OprepRatingsPerf {Ratings e Desempenho}
translate B OprepAvgPerf {Ratings e desempenho medios}
translate B OprepWRating {Rating Brancas}
translate B OprepBRating {Rating Pretas}
translate B OprepWPerf {Desempenho Brancas}
translate B OprepBPerf {Desempenho Pretas}
translate B OprepHighRating {Jogos com o maior rating medio}
translate B OprepTrends {Tendencias de Resultados}
translate B OprepResults {Qtd. e frequencia de resultados}
translate B OprepLength {Tamanho do jogo}
translate B OprepFrequency {Frequencia}
translate B OprepWWins {Brancas vencem: }
translate B OprepBWins {Pretas vencem:  }
translate B OprepDraws {Empates:        }
translate B OprepWholeDB {toda a base de dados}
translate B OprepShortest {Vitorias mais rapidas}
translate B OprepMovesThemes {Movimentos e Temas}
translate B OprepMoveOrders {Ordem dos movimentos para atingir a posicao do relatorio}
translate B OprepMoveOrdersOne \
  {Houve apenas uma ordem de movimentos que atinge esta posicao: }
translate B OprepMoveOrdersAll \
  {Houve apenas %u ordens de movimentos que atingem esta posicao:}
translate B OprepMoveOrdersMany \
  {Houve %u ordens de movimentos que atingem esta posicao. As %u primeiras sao:}
translate B OprepMovesFrom {Movimentos da posicao do relatorio}
translate B OprepMostFrequentEcoCodes {Cdigos ECO mais frequentes} ;# ***
translate B OprepThemes {Temas Posicionais}
translate B OprepThemeDescription {Frequencia dos temas nos primeiros  %u movimentos de cada jogo} ;# ***
translate B OprepThemeSameCastling {Roque do mesmo lado}
translate B OprepThemeOppCastling {Roques opostos}
translate B OprepThemeNoCastling {Ninguem efetuou o roque}
translate B OprepThemeKPawnStorm {Tempestade de Peoes no lado do Rei}
translate B OprepThemeQueenswap {Damas ja trocadas}
translate B OprepThemeWIQP {Peo branco da Dama isolado} ;# ***
translate B OprepThemeBIQP {Peo preto da Dama isolado} ;# ***
translate B OprepThemeWP567 {Peao Branco na 5/6/7a fila}
translate B OprepThemeBP234 {Peao Preto na 2/3/4a fila}
translate B OprepThemeOpenCDE {Colunas c/d/e abertas}
translate B OprepTheme1BishopPair {Um lado tem o par de Bispos}
translate B OprepEndgames {Finais}
translate B OprepReportGames {Jogos no Relatorio}
translate B OprepAllGames {Todos os jogos}
translate B OprepEndClass {Material ao fim de cada jogo}
translate B OprepTheoryTable {Tabela de Teoria}
translate B OprepTableComment {Gerada a partir dos %u jogos com rating mais alto.}
translate B OprepExtraMoves {Movimentos com nota extra na Tabela de Teoria}
translate B OprepMaxGames {Qtde. Maxima de jogos na tabela de teoria}
translate B OprepViewHTML {Visualizar HTML} ;# ***
translate B OprepViewLaTeX {Visualizar LaTeX} ;# ***

# Player Report:
translate B PReportTitle {Relatorio do Jogador} ;# ***
translate B PReportColorWhite {com as Brancas} ;# ***
translate B PReportColorBlack {com as Pretas} ;# ***
translate B PReportMoves {aps %s} ;# ***
translate B PReportOpenings {Aberturas} ;# ***
translate B PReportClipbase {Limpa base de cpia e copia os jogos encontrados para ela} ;# ***

# Piece Tracker window:
translate B TrackerSelectSingle {Use o boto esquerdo do mouse para selecionar esta pea.} ;# ***
translate B TrackerSelectPair {Boto esquerdo seleciona esta pea; boto direito seleciona sua parceira.}
translate B TrackerSelectPawn {Boto esquerdo seleciona este Peo; boto direito seleciona os 8 Pees}
translate B TrackerStat {Estatisticas}
translate B TrackerGames {% jogos com movimentos para a casa}
translate B TrackerTime {% tempo em cada casa}
translate B TrackerMoves {Movimentos}
translate B TrackerMovesStart {Entre o nmero do movimento a partir do qual o acompanhamento deve ser feito.}
translate B TrackerMovesStop {Entre com o numero do movimento onde deve parar o acompanhamento.}

# Game selection dialogs:
translate B SelectAllGames {Todos os jogos na base de dados}
translate B SelectFilterGames {Apenas jogos no filtro}
translate B SelectTournamentGames {Somente jogos no torneio atual}
translate B SelectOlderGames {Somente jogos antigos}

# Delete Twins window:
translate B TwinsNote {Para serem duplicatas, dois jogos devem ter pelo menos os mesmos dois jogadores, alem de criterios que voce pode definir abaixo. Quando um par de duplicatas e encontrado, o jogo menor e deletado. Dica: e melhor fazer a verificacao ortografica da base de dados antes de remover duplicatas, pois isso melhora o processo de deteccao de duplicatas. }
translate B TwinsCriteria {Criterio: Duplicatas devem ter...}
translate B TwinsWhich {Jogos a examinar}
translate B TwinsColors {Jogadores com a mesma cor?}
translate B TwinsEvent {Mesmo evento?}
translate B TwinsSite {Mesmo lugar?}
translate B TwinsRound {Mesma rodada?}
translate B TwinsYear {Mesmo ano?}
translate B TwinsMonth {Mesmo mes?}
translate B TwinsDay {Mesmo dia?}
translate B TwinsResult {Mesmo resultado?}
translate B TwinsECO {Mesmo codigo ECO?}
translate B TwinsMoves {Mesmos movimentos?}
translate B TwinsPlayers {Comparacao dos nomes dos jogadores:}
translate B TwinsPlayersExact {Comparacao exata}
translate B TwinsPlayersPrefix {Primeiras 4 letras apenas}
translate B TwinsWhen {Quando deletar duplicatas}
translate B TwinsSkipShort {Ignorar todos os jogos com menos de 5 movimentos?}
translate B TwinsUndelete {Recuperar todos os jogos antes?}
translate B TwinsSetFilter {Definir filtro para todas as duplicatas deletadas?}
translate B TwinsComments {Manter sempre os jogos com comentarios?}
translate B TwinsVars {Manter sempre os jogos com variantes?}
translate B TwinsDeleteWhich {Excluir qual jogo:} ;# ***
translate B TwinsDeleteShorter {Menor jogo} ;# ***
translate B TwinsDeleteOlder {Menor numero de jogo} ;# ***
translate B TwinsDeleteNewer {Maior numero de jogo} ;# ***
translate B TwinsDelete {Deletar jogos}

# Name editor window:
translate B NameEditType {Tipo de nome para editar}
translate B NameEditSelect {Jogos para editar}
translate B NameEditReplace {Substituir}
translate B NameEditWith {com}
translate B NameEditMatches {Confere: Pressione Ctrl+1 a Ctrl+9 para selecionar}
translate B CheckGames {Marcar jogos}
translate B CheckGamesWhich {Marcar jogos}
translate B CheckAll {Todos os jogos}
translate B CheckSelectFilterGames {Somente jogos filtrados}

# Classify window:
translate B Classify {Classificar}
translate B ClassifyWhich {Que jogos devem ser classificados por ECO}
translate B ClassifyAll {Todos os Jogos (substituir codigos ECO antigos)}
translate B ClassifyYear {Todos os jogos do ultimo ano}
translate B ClassifyMonth {Todos os jogos do ultimo mes}
translate B ClassifyNew {Somente jogos ainda sem codigo ECO}
translate B ClassifyCodes {Codigos ECO a serem usados}
translate B ClassifyBasic {Codigos Basicos apenas ("B12", ...)}
translate B ClassifyExtended {Extensoes Scid ("B12j", ...)}

# Compaction:
translate B NameFile {Arquivo de nomes}
translate B GameFile {Arquivo de jogos}
translate B Names {Nomes}
translate B Unused {Nao usado}
translate B SizeKb {Tamanho (kb)}
translate B CurrentState {Estado Atual}
translate B AfterCompaction {Apos compactacao}
translate B CompactNames {Compactar arquivo de nomes}
translate B CompactGames {Compactar arquivo de nomes}
translate B NoUnusedNames "No h nomes no utilizados, ento o arquivo j est totalmente compactado."
translate B NoUnusedGames "O arquivo de jogo j est totalmente compactado."
translate B NameFileCompacted {O arquivo de nomes para a base "[file tail [sc_base filename]]" est compactado.}
translate B GameFileCompacted {O arquivo de jogos para a base "[file tail [sc_base filename]]" est compactado.}

# Sorting:
translate B SortCriteria {Criterio}
translate B AddCriteria {Adicionar criterio}
translate B CommonSorts {Ordenacoes comuns}
translate B Sort {Ordenar}

# Exporting:
translate B AddToExistingFile {Adicionar jogos a um arquivo existente?}
translate B ExportComments {Exportar comentarios?}
translate B ExportVariations {Exportar variantes?}
translate B IndentComments {Identar Comentarios?}
translate B IndentVariations {Identar Variantes?}
translate B ExportColumnStyle {Estilo Coluna (um movimento por linha)?}
translate B ExportSymbolStyle {Estilo de anotacao simbolica:}
translate B ExportStripMarks {Remover cdigos de marca de casa/seta dos comentrios?} ;# ***

# Goto game/move dialogs:
translate B LoadGameNumber {Entre o numero do jogo a ser carregado:}
translate B GotoMoveNumber {Ir p/ o lance no.:}

# Copy games dialog:
translate B CopyGames {Copiar jogos}
translate B CopyConfirm {
 Voce realmente quer copiar
 os [::utils::thousands $nGamesToCopy] jogos filtrados
 da base de dados "$fromName"
 para a base de dados "$targetName"?
}
translate B CopyErr {Copia nao permitida}
translate B CopyErrSource {a base de dados origem}
translate B CopyErrTarget {a base de dados destino}
translate B CopyErrNoGames {nao tem jogos que atendam o filtro}
translate B CopyErrReadOnly {e apenas de leitura}
translate B CopyErrNotOpen {nao esta aberta}

# Colors:
translate B LightSquares {Casas Brancas}
translate B DarkSquares {Casas Pretas}
translate B SelectedSquares {Casas selecionadas}
translate B SuggestedSquares {Casas Sugeridas}
translate B WhitePieces {Pecas Brancas}
translate B BlackPieces {Pecas Pretas}
translate B WhiteBorder {Borda Branca}
translate B BlackBorder {Borda Preta}

# Novelty window:
translate B FindNovelty {Buscar Novidade}
translate B Novelty {Novidade}
translate B NoveltyInterrupt {Busca interrompida}
translate B NoveltyNone {Nenhuma novidade encontrada}
translate B NoveltyHelp {
Scid buscara o primeiro movimento do jogo atual que alcanca uma posicao nao encontrada na base selecionada ou no arquivo ECO.
}

# Sounds configuration:
translate B SoundsFolder {Pasta de arquivos de som} ;# ***
translate B SoundsFolderHelp {A pasta deve conter os arquivos King.wav, a.wav, 1.wav, etc} ;# ***
translate B SoundsAnnounceOptions {Opes de anuncio de movimentos} ;# ***
translate B SoundsAnnounceNew {Anuncia novos movimentos quando eles so feitos} ;# ***
translate B SoundsAnnounceForward {Anuncia movimentos quando avanar um movimento} ;# ***
translate B SoundsAnnounceBack {Anuncia movimentos quando retroceder um movimento} ;# ***

# Upgrading databases:
translate B Upgrading {Atualizando}
translate B ConfirmOpenNew {
Esta e uma base em formato antigo (Scid 3) que nao pode ser aberta pelo Scid 4, mas uma versao no novo formato (Scid 4) ja foi criada.

Voce quer abrir a nova versao da base Scid 4?
}
translate B ConfirmUpgrade {
Esta e uma base em formato antigo (Scid 3). Uma versao da base no novo formato deve ser criada antes de poder ser usada no Scid 4.

A atualizacao criara uma nova versao da base; isto nao altera nem remove os registros originais.

Este processo pode levar algum tempo, mas so precisa ser feito uma vez e pode ser cancelado se estiver demorando muito.

Voce quer atualizar esta base agora?
}

# Recent files options:
translate B RecentFilesMenu {Numero de arquivos recentes no menu Arquivo} ;# ***
translate B RecentFilesExtra {Numero de arquivos recentes no submenu extra} ;# ***

# My Player Names options:
translate B MyPlayerNamesDescription {
Entre com uma lista dos nomes de jogadores preferidos, abaixo, um nome por linha. Substitutos (ex. "?" para qualquer caracter nico, "*" para qualquer sequencia de caracteres) so permitidas.

Cada vez que um jogo com um jogador da lista  carregado, o tabuleiro da janela principal sofrer rotao, se necessrio, para mostrar o jogo da perspectiva desse jogador..
} ;# ***
translate B showblunderexists {mostra que existe um erro crasso}
translate B showblundervalue {mostra o valor do erro crasso}
translate B showscore {mostra o score}
translate B coachgame {auxilio ao jogo}
translate B configurecoachgame {configura auxilio ao jogo}
translate B configuregame {Configurao do jogo}
translate B Phalanxengine {Engine Phalanx}
translate B Coachengine {Engine de auxilio}
translate B difficulty {dificuldade}
translate B hard {dificil}
translate B easy {facil}
translate B Playwith {Jogar com}
translate B white {branca}
translate B black {preta}
translate B both {ambas}
translate B Play {Jogar}
translate B Noblunder {Nenhum erro crasso}
translate B blunder {erro crasso}
translate B Noinfo {-- Sem informaes --}
translate B PhalanxOrTogaMissing {Phalanx ou Toga no encontrado}
translate B moveblunderthreshold {movimento e um erro crasso se a perda e maior que}
translate B limitanalysis {limita tempo de analise do engine}
translate B seconds {segundos}
translate B Abort {Abortar}
translate B Resume {Continuar}
translate B OutOfOpening {Fora da abertura}
translate B NotFollowedLine {Voc no seguiu a linha}
translate B DoYouWantContinue {Voce quer continuar ?}
translate B CoachIsWatching {Auxilio esta observando}
translate B Ponder {Pensando permanentemente}
translate B LimitELO {Limite da fora ELO}
translate B DubiousMovePlayedTakeBack {Movimento duvidoso, quer voltar ?}
translate B WeakMovePlayedTakeBack {Movimento fraco, quer voltar ?}
translate B BadMovePlayedTakeBack {Movimento ruim, quer voltar ?}
translate B Iresign {Eu desisto}
translate B yourmoveisnotgood {seu movimento nao e bom}
translate B EndOfVar {Fim da variante}
translate B Openingtrainer {Treinador de aberturas}
translate B DisplayCM {Mostrar movimentos candidatos}
translate B DisplayCMValue {Mostrar valor dos movimentos candidatos}
translate B DisplayOpeningStats {Mostrar estatisticas}
translate B ShowReport {Mostrar relatorio}
translate B NumberOfGoodMovesPlayed {bom movimentos jogados}
translate B NumberOfDubiousMovesPlayed {movimentos duvidosos jogados}
translate B NumberOfMovesPlayedNotInRepertoire {movimentos jogados no existem no repertorio}
translate B NumberOfTimesPositionEncountered {vezes a posio foi encontrada}
translate B PlayerBestMove  {Permitir somente os melhores movimentos}
translate B OpponentBestMove {Oponente joga os melhores movimentos}
translate B OnlyFlaggedLines {Somente linhas marcadas}
translate B resetStats {Reiniciar estatisticas}
translate B Repertoiretrainingconfiguration {Configurao do repertorio de treinamento}
translate B Loadingrepertoire {Carregando repertorio}
translate B Movesloaded {Movimentos carregados}
translate B Repertoirenotfound {Repertorio no encontrado}
translate B Openfirstrepertoirewithtype {Abra primeiro uma base de repertorio com o cone/tipo definido do lado direito}
translate B Movenotinrepertoire {Movimento no existe no repertorio}
translate B PositionsInRepertoire {Posies no repertorio}
translate B PositionsNotPlayed {Posies no jogadas}
translate B PositionsPlayed {Posies jogadas}
translate B Success {Successo}
translate B DubiousMoves {Movimentos duvidosos}
translate B OutOfRepertoire {Fora do Repertorio}
translate B ConfigureTactics {Configurar taticas}
translate B ResetScores {Reiniciar scores}
translate B LoadingBase {Carregando base}
translate B Tactics {Taticas}
translate B ShowSolution {Mostrar soluo}
translate B NextExercise {Proximo exercicio}
translate B PrevExercise {exercicio anterior}
translate B StopTraining {Parar treinamento}
translate B Next {Proximo}
translate B ResettingScore {Reinicializando score}
translate B LoadingGame {Carregando jogo}
translate B MateFound {Mate encontrado}
translate B BestSolutionNotFound {Melhor soluo NO encontrada !}
translate B MateNotFound {Mate no encontrado}
translate B ShorterMateExists {Existe mate mais curto}
translate B ScorePlayed {Score obtido}
translate B Expected {esperado}
translate B ChooseTrainingBase {Escolher base de treinamento}
translate B Thinking {Pensando}
translate B AnalyzeDone {Analise completa}
translate B WinWonGame {Win venceu o jogo}
translate B Lines {Linhas}
translate B ConfigureUCIengine {Configurar engine UCI}
translate B SpecificOpening {Abertura especifica}
translate B StartNewGame {Iniciar novo jogo}
translate B FixedLevel {Nivel fixo}
translate B Opening {Abertura}
translate B RandomLevel {Nivel aleatorio}
translate B StartFromCurrentPosition {Iniciar a paartir da posio corrente}
translate B FixedDepth {Profundidade fixa}
translate B Nodes {Ns} 
translate B Depth {Profundidade}
translate B Time {Tempo} 
translate B SecondsPerMove {Segundos por movimento}
translate B Engine {Engine}
translate B TimeMode {Modo de tempo}
translate B TimeBonus {Bonus de tempo}
translate B TimeMin {min}
translate B TimeSec {seg}
translate B AllExercisesDone {Todos os exercicios completos}
translate B MoveOutOfBook {Movimento fora do livro}
translate B LastBookMove {Ultimo movimento do livro}
translate B AnnotateSeveralGames {Anotar diversos jogos\ndo atual at :}
translate B FindOpeningErrors {Encontrar erros na abertura}
translate B MarkTacticalExercises {Marcar exercicios taticos}
translate B UseBook {Usar livro}
translate B MultiPV {Variantes multiplas}
translate B Hash {Varrer memria}
translate B OwnBook {Usar livro do engine}
translate B BookFile {Livro de aberturas}
translate B AnnotateVariations {Anotar variantes}
translate B ShortAnnotations {Anotaes curtas}
translate B addAnnotatorTag {Adicionar tag do anotador}
translate B AddScoreToShortAnnotations {Adicionar o score s anotaes curtas}
translate B Export {Exportar}
translate B BookPartiallyLoaded {Livro parcialmente carregado}
translate B Calvar {Calculo de variantes}
translate B ConfigureCalvar {Configurao}
# ====== TODO To be translated ======
translate B Reti {Reti}
# ====== TODO To be translated ======
translate B English {Inglesa}
# ====== TODO To be translated ======
translate B d4Nf6Miscellaneous {1.d4 Nf6 Diversas}
# ====== TODO To be translated ======
translate B Trompowsky {Trompowsky}
# ====== TODO To be translated ======
translate B Budapest {Budapest}
# ====== TODO To be translated ======
translate B OldIndian {India antiga}
# ====== TODO To be translated ======
translate B BenkoGambit {Gambito Benko}
# ====== TODO To be translated ======
translate B ModernBenoni {Modern Benoni}
# ====== TODO To be translated ======
translate B DutchDefence {Defesa Holandesa}
# ====== TODO To be translated ======
translate B Scandinavian {Escandinava}
# ====== TODO To be translated ======
translate B AlekhineDefence {Defesa Alekhine}
# ====== TODO To be translated ======
translate B Pirc {Pirc}
# ====== TODO To be translated ======
translate B CaroKann {Caro-Kann}
# ====== TODO To be translated ======
translate B CaroKannAdvance {Caro-Kann Advance}
# ====== TODO To be translated ======
translate B Sicilian {Siciliana}
# ====== TODO To be translated ======
translate B SicilianAlapin {Siciliana Alapin}
# ====== TODO To be translated ======
translate B SicilianClosed {Siciliana Fechada}
# ====== TODO To be translated ======
translate B SicilianRauzer {Siciliana Rauzer}
# ====== TODO To be translated ======
translate B SicilianDragon {Siciliana Dragao}
# ====== TODO To be translated ======
translate B SicilianScheveningen {Siciliana Scheveningen}
# ====== TODO To be translated ======
translate B SicilianNajdorf {Siciliana Najdorf}
# ====== TODO To be translated ======
translate B OpenGame {Jogo aberto}
# ====== TODO To be translated ======
translate B Vienna {Vienna}
# ====== TODO To be translated ======
translate B KingsGambit {Gambito do Rei}
# ====== TODO To be translated ======
translate B RussianGame {Russa}
# ====== TODO To be translated ======
translate B ItalianTwoKnights {Italiana/Dois Cavalos}
# ====== TODO To be translated ======
translate B Spanish {Espanhola}
# ====== TODO To be translated ======
translate B SpanishExchange {Espanhola Trocas}
# ====== TODO To be translated ======
translate B SpanishOpen {Espanhola Aberta}
# ====== TODO To be translated ======
translate B SpanishClosed {Espanhola Fechada}
# ====== TODO To be translated ======
translate B FrenchDefence {Defesa Francesa}
# ====== TODO To be translated ======
translate B FrenchAdvance {Francesa Avanco}
# ====== TODO To be translated ======
translate B FrenchTarrasch {Francesa Tarrasch}
# ====== TODO To be translated ======
translate B FrenchWinawer {Francesa Winawer}
# ====== TODO To be translated ======
translate B FrenchExchange {Francesa Trocas}
# ====== TODO To be translated ======
translate B QueensPawn {Peao da Dama}
# ====== TODO To be translated ======
translate B Slav {Eslava}
# ====== TODO To be translated ======
translate B QGA {QGA}
# ====== TODO To be translated ======
translate B QGD {QGD}
# ====== TODO To be translated ======
translate B QGDExchange {QGD Trocas}
# ====== TODO To be translated ======
translate B SemiSlav {Semi-Eslava}
# ====== TODO To be translated ======
translate B QGDwithBg5 {QGD com Bg5}
# ====== TODO To be translated ======
translate B QGDOrthodox {QGD Ortodoxa}
# ====== TODO To be translated ======
translate B Grunfeld {Grnfeld}
# ====== TODO To be translated ======
translate B GrunfeldExchange {Grnfeld Trocas}
# ====== TODO To be translated ======
translate B GrunfeldRussian {Grnfeld Russa}
# ====== TODO To be translated ======
translate B Catalan {Catalan}
# ====== TODO To be translated ======
translate B CatalanOpen {Catalan Aberta}
# ====== TODO To be translated ======
translate B CatalanClosed {Catalan Fechada}
# ====== TODO To be translated ======
translate B QueensIndian {India da Dama}
# ====== TODO To be translated ======
translate B NimzoIndian {Nimzo-India}
# ====== TODO To be translated ======
translate B NimzoIndianClassical {Nimzo-India Classica}
# ====== TODO To be translated ======
translate B NimzoIndianRubinstein {Nimzo-India Rubinstein}
# ====== TODO To be translated ======
translate B KingsIndian {India do Rei}
# ====== TODO To be translated ======
translate B KingsIndianSamisch {India do Rei Smisch}
# ====== TODO To be translated ======
translate B KingsIndianMainLine {India do Rei Linha Principal}
translate B ConfigureFics {Configurar FICS}
translate B FICSGuest {Login como convidado}
translate B FICSServerPort {Porta do Servidor}
translate B FICSServerAddress {Endereo IP}
translate B FICSRefresh {Atualizar}
translate B FICSTimesealPort {Porta Timeseal}
translate B FICSSilence {Silencio}
translate B FICSOffers {Ofertas}
translate B FICSConsole {Console}
translate B FICSGames {Jogos}
translate B FICSUnobserve {Parar de observar jogo}
translate B FICSProfile {Exibir seu perfil e historico}
translate B FICSRelayedGames {Jogos conectados}
translate B FICSFindOpponent {Encontrar Oponente}
translate B FICSTakeback {Voltar}
translate B FICSTakeback2 {Voltar 2}
translate B FICSInitTime {Tempo inicial (min)}
translate B FICSIncrement {Incremento (seg)}
translate B FICSRatedGame {Jogo com rate}
translate B FICSAutoColour {automatico}
translate B FICSManualConfirm {confirmar manualmente}
translate B FICSFilterFormula {Filtro com formula}
translate B FICSIssueSeek {Busca item}
translate B FICSChallenge {Desafiar}
translate B FICSAccept {aceitar}
translate B FICSDecline {recusar}
translate B FICSColour {Cor}
translate B FICSSend {enviar}
translate B FICSConnect {Conectar}
translate B FICSdefaultuservars {Usar variaveis default}
translate B FICSObserveconfirm {Voce quer observar o jogo}
# ====== TODO To be translated ======
translate B FICSpremove {Enable premove}
translate B GameReview {Rever jogo}
translate B GameReviewTimeExtended {Tempo estendido}
translate B GameReviewMargin {Mergem de erro}
translate B GameReviewAutoContinue {Continuar automaticamente quando o movimento estiver correto}
translate B GameReviewReCalculate {Usar tempo estendido}
translate B GameReviewAnalyzingMovePlayedDuringTheGame {Analisando movimento feito durante o jogo}
translate B GameReviewAnalyzingThePosition {Analisando a posio}
translate B GameReviewEnterYourMove {Entre seu movimento}
translate B GameReviewCheckingYourMove {Verificando seu movimento}
translate B GameReviewYourMoveWasAnalyzed {Seu movimento foi analisado}
translate B GameReviewYouPlayedSameMove {Voc usou o mesmo movimento como na resposta}
translate B GameReviewScoreOfYourMove {Score do seu movimento}
translate B GameReviewGameMoveScore {Score do movimento do jogo}
translate B GameReviewEngineScore {Score do Engine}
translate B GameReviewYouPlayedLikeTheEngine {Voce jogou como o engine}
translate B GameReviewNotEngineMoveButGoodMove {No  o movimento do engine, mas  um bom movimento}
translate B GameReviewMoveNotGood {Este movimento no  bom; seu score e}
translate B GameReviewMovesPlayedLike {Movimentos semelhantes}
translate B GameReviewMovesPlayedEngine {Movimentos semelhantes aos do engine}
translate B CCDlgConfigureWindowTitle {Configurar Xadrez por correspondencia}
translate B CCDlgCGeneraloptions {Opes Gerais}
translate B CCDlgDefaultDB {Base default:}
translate B CCDlgInbox {Caixa de Entrada (caminho):}
translate B CCDlgOutbox {Caixa de Saida (caminho):}
translate B CCDlgXfcc {Configuraao do Xfcc:}
translate B CCDlgExternalProtocol {Tratamento de protocolo externo (ex. Xfcc)}
translate B CCDlgFetchTool {Ferramenta de busca:}
translate B CCDlgSendTool {Ferramenta de envio:}
translate B CCDlgEmailCommunication {Comunicao por eMail}
translate B CCDlgMailPrg {Programa de Mail:}
translate B CCDlgBCCAddr {Endereo Cpia Oculta:}
translate B CCDlgMailerMode {Modo:}
translate B CCDlgThunderbirdEg {ex. Thunderbird, Mozilla Mail, Icedove...}
translate B CCDlgMailUrlEg {ex. Evolution}
translate B CCDlgClawsEg {ex. Sylpheed Claws}
translate B CCDlgmailxEg {ex. mailx, mutt, nail...}
translate B CCDlgAttachementPar {Parametro de anexos:}
translate B CCDlgInternalXfcc {Usar suporte internal Xfcc}
translate B CCDlgConfirmXfcc {Confirmar movimentos}
translate B CCDlgSubjectPar {Parametro de Assunto:}
translate B CCDlgDeleteBoxes {Esvaziar caixas de entrada e sada}
translate B CCDlgDeleteBoxesText {Voce quer realmente esvaziar as caixas de Entrada e Saida usadas para o Xadrez por correspondncia? Esta operao exige uma novaa sincronizao para mostrar o ultimo estado dos seus jogos}
translate B CCDlgConfirmMove {Confirmar movimento}
translate B CCDlgConfirmMoveText {Se voce confirmar, o movimento indicado a seguir e os comentrios sero enviados para o servidor:}
translate B CCDlgDBGameToLong {Linha principal inconsistente}
translate B CCDlgDBGameToLongError {A linha principal na sua base  maior do que o jogo que est na caixa de entrada. Se a caixa de entrada contem jogos correntes, isto  logo aps uma sincronizao, alguns movimentos foram adicionados erroneamente  linha principal na base.\nNeste caso, por favor, diminua a linha principal para (no maximo) movimentos\n}
translate B CCDlgStartEmail {Iniciar novo jogo por eMail}
translate B CCDlgYourName {Seu nome:}
translate B CCDlgYourMail {Seu eMail:}
translate B CCDlgOpponentName {Nome do Oponente:}
translate B CCDlgOpponentMail {eMail do Oponente:}
translate B CCDlgGameID {ID do jogo (unico):}
translate B CCDlgTitNoOutbox {Scid: Caixa de Saida}
translate B CCDlgTitNoInbox {Scid: Caixa de Entrada}
translate B CCDlgTitNoGames {Scid: Nenhum jogo por correspondncia}
translate B CCErrInboxDir {Diretorio da Caixa de Entrada:}
translate B CCErrOutboxDir {Diretorio da Caixa de Saida:}
translate B CCErrDirNotUsable {no existe ou no est acessivel!\nPor favor, verifique e corrija a configurao.}
translate B CCErrNoGames {no contem nenhum jogo!\nPor favor, localize-os primeiro.}
translate B CCDlgTitNoCCDB {Scid: Nenhuma base de correspondncia}
translate B CCErrNoCCDB {Nenhuma base do tipo 'Correspondencia' est aberta. Por favor, abra uma antes de usar as funcoes do xadrez por correspondencia.}
translate B CCFetchBtn {Busca jogos no servidor e processa a Caixa de Entrada}
translate B CCPrevBtn {Ir para o jogo anterior}
translate B CCNextBtn {Ir para o proximo jogo}
translate B CCSendBtn {Enviar movimento}
translate B CCEmptyBtn {Esvaziar caixas de entrada e saida}
translate B CCHelpBtn {Ajuda sobre icones e indicadores de estado.\nPara ajuda geral, use a tecla F1!}
translate B CCDlgServerName {Nome do Servidor:}
translate B CCDlgLoginName  {Login Name:}
translate B CCDlgPassword   {Senha:}
translate B CCDlgURL        {Xfcc-URL:}
translate B CCDlgRatingType {Tipo de Rating:}
translate B CCDlgDuplicateGame {ID de jogo no nico}
translate B CCDlgDuplicateGameError {Este jogo existe mais de uma vez em sua base. Exclua todas as duplicatas e compacte seu arquivo de jogos (Arquivo/Manuteno/Compactar Base).}
translate B CCDlgSortOption {Ordenando:}
translate B CCDlgListOnlyOwnMove {Somente jogos nos quais tenho o movimento}
translate B CCOrderClassicTxt {Local, Evento, Rodada, Resultado, Branca, Preta}
translate B CCOrderMyTimeTxt {Meu Relgio}
translate B CCOrderTimePerMoveTxt {Tempo por movimento at o prximo controle de tempo}
translate B CCOrderStartDate {Data de Inicio}
translate B CCOrderOppTimeTxt {Relogio do Oponente}

# ====== TODO To be translated ======
translate B CCDlgConfigRelay {Observar jogos}
# ====== TODO To be translated ======
translate B CCDlgConfigRelayHelp {Consulta a pagina de jogos em http://www.iccf-webchess.com e mostra o jogo a ser observado.  Se voce enxergar o tabuleiro, copie a URL do seu navegador para a lista abaixo. Apenas uma URL por linha!\nExemplo: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}

translate B ExtHWConfigConnection {Configurar hardware externo}
translate B ExtHWPort {Porta}
translate B ExtHWEngineCmd {Comando do Engine}
translate B ExtHWEngineParam {Parametro do Engine}
translate B ExtHWShowButton {Mostrar boto}
translate B ExtHWHardware {Hardware}
translate B ExtHWNovag {Novag Citrine}
translate B ExtHWInputEngine {Entrar com o Engine}
translate B ExtHWNoBoard {Nenhum tabuleiro}
translate B NovagReferee {Arbitro}
translate B IEConsole {Entrar na console do Engine}
translate B IESending {Movimentos enviados para}
translate B IESynchronise {Sincronizar}
translate B IERotate  {Girar}
translate B IEUnableToStart {No  possivel iniciar Engine:}
translate B DoneWithPosition {Posio definida}
translate B Board {Tabuleiro}
translate B showGameInfo {Mostrar informaes do jogo}
translate B autoResizeBoard {Tamanho automtico do tabuleiro}
translate B DockTop {Mover para cima}
translate B DockBottom {Mover para o final}
translate B DockLeft {Mover para a esquerda}
translate B DockRight {Mover para a direita}
translate B Undock {Desacoplar}
translate B ChangeIcon {Alterar icone...}
}

# end of portbr.tcl
### russian.tcl:
#  Russian language support for Scid.
#  Contributed by Alex Sedykh.
#  Untranslated messages are marked with a "***" comment.
#  Untranslated help page sections are in <NEW>...</NEW> tags.

addLanguage R Russian 1 iso8859-5

proc setLanguage_R {} {

# File menu:
menuText R File "" 0
menuText R FileNew "..." 0 {    Scid}
menuText R FileOpen "..." 0 {   Scid}
menuText R FileClose "" 0 {    Scid}
menuText R FileFinder "" 0 {   }
menuText R FileBookmarks "" 2 {  (: Ctrl+B)}
menuText R FileBookmarksAdd " " 0 \
  {       }
menuText R FileBookmarksFile " " 0 \
  {      }
menuText R FileBookmarksEdit " ..." 0 \
  {  }
menuText R FileBookmarksList "    " 0 \
  {  ,   ,   }
menuText R FileBookmarksSub "   " 1 \
  {    ,    }
menuText R FileMaint "" 2 {    Scid}
menuText R FileMaintWin " " 0 \
  {/     Scid}
menuText R FileMaintCompact "  ..." 0 \
  {   ,      }
menuText R FileMaintClass "ECO- ..." 0 \
  {  ECO   }
menuText R FileMaintSort "  ..." 2 \
  {     }
menuText R FileMaintDelete " -..." 0 \
  { -     }
menuText R FileMaintTwin "  " 14 \
  {/   }
menuText R FileMaintName " " 0 {    }
menuText R FileMaintNameEditor " " 0 \
  {/   }
menuText R FileMaintNamePlayer "  ..." 9 \
  {      }
menuText R FileMaintNameEvent "  ..." 18 \
  {      }
menuText R FileMaintNameSite "  ..." 18 \
  {      }
menuText R FileMaintNameRound "  ..." 20 \
  {      }
menuText R FileReadOnly "  ..." 0 \
  {       ,  }
menuText R FileSwitch "  " 6 \
  {     }
menuText R FileExit "" 0 {  Scid}
# ====== TODO To be translated ======
menuText R FileMaintFixBase "Fix corrupted base" 0 {Try to fix a corrupted base}

# Edit menu:
menuText R Edit "" 0
menuText R EditAdd " " 0 {     }
menuText R EditDelete " " 0 {    }
menuText R EditFirst "  " 0 \
  {      }
menuText R EditMain "   " 0 \
  {    }
menuText R EditTrial " " 0 \
  {/  ,     }
menuText R EditStrip "" 1 {     }
# ====== TODO To be translated ======
menuText R EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText R EditRedo "Redo" 0 {Redo last game change}
menuText R EditStripComments "" 0 \
  {       }
menuText R EditStripVars "" 0 {     }
menuText R EditStripBegin "Moves from the beginning" 1 \
  {Strip moves from the beginning of the game}
menuText R EditStripEnd "Moves to the end" 0 \
  {Strip moves to the end of the game}
menuText R EditReset " " 0 \
  {   }
menuText R EditCopy "     " 1 \
  {     }
menuText R EditPaste "     " 0 \
  {      }
# ====== TODO To be translated ======
menuText R EditPastePGN "Paste Clipboard text as PGN game..." 18 \
  {Interpret the clipboard text as a game in PGN notation and paste it here}
menuText R EditSetup " ..." 2 \
  {     }
menuText R EditCopyBoard " " 4 \
  {     FEN    ()}
menuText R EditPasteBoard "  " 3 \
  {       ()}

# Game menu:
menuText R Game "" 0
menuText R GameNew " " 0 \
  {    ,   }
menuText R GameFirst "  " 0 {   }
menuText R GamePrev "  " 1 {   }
menuText R GameReload "  " 1 \
  {  ,    }
menuText R GameNext "  " 2 {   }
menuText R GameLast "  " 3 {   }
menuText R GameRandom "  " 4 {   }
menuText R GameNumber "  ..." 6 \
  { ,   }
menuText R GameReplace ":  ..." 0 \
  {  ,   }
menuText R GameAdd ":   ..." 2 \
  {  ,     }
menuText R GameDeepest " " 0 \
  {    ,    ECO}
menuText R GameGotoMove "   ..." 5 \
  {     }
menuText R GameNovelty " ..." 2 \
  {     ,    }

# Search Menu:
menuText R Search "" 0
menuText R SearchReset " " 0 { ,    }
menuText R SearchNegate " " 0 { ,     }
menuText R SearchCurrent " ..." 0 {  }
menuText R SearchHeader "..." 0 {   (, ,  ..)}
menuText R SearchMaterial "/..." 0 {     }
menuText R SearchUsing "  ..." 0 {      }

# Windows menu:
menuText R Windows "" 0
menuText R WindowsComment " " 0 {/  }
menuText R WindowsGList " " 0 {/   }
menuText R WindowsPGN " PGN" 0 \
  {/  PGN ( )}
menuText R WindowsPList " " 2 {/   }
menuText R WindowsTmt " " 0 {/   }
menuText R WindowsSwitcher "  " 1 \
  {/    }
menuText R WindowsMaint " " 1 \
  {/  }
menuText R WindowsECO " ECO" 4 {/   ECO}
menuText R WindowsRepertoire " " 2 \
  {/    }
menuText R WindowsStats " " 2 \
  {/   }
menuText R WindowsTree " " 10 {/  }
menuText R WindowsTB "  " 10 \
  {/   }
# ====== TODO To be translated ======
menuText R WindowsBook "Book Window" 0 {Open/close the Book window}
# ====== TODO To be translated ======
menuText R WindowsCorrChess "Correspondence Window" 0 {Open/close the Correspondence window}

# Tools menu:
menuText R Tools "" 0
menuText R ToolsAnalysis " ..." 0 \
  {/   }
menuText R ToolsAnalysis2 "  2..." 22 \
  {/    }
menuText R ToolsCross " " 0 {     }
menuText R ToolsEmail " " 0 \
  {/    }
menuText R ToolsFilterGraph " " 0 \
  {/   }
# ====== TODO To be translated ======
menuText R ToolsAbsFilterGraph "Abs. Filter Graph" 7 {Open/close the filter graph window for absolute values}
menuText R ToolsOpReport " " 0 \
  {     }
# ====== TODO To be translated ======
menuText R ToolsOpenBaseAsTree "Open base as tree" 0   {Open a base and use it in Tree window}
# ====== TODO To be translated ======
menuText R ToolsOpenRecentBaseAsTree "Open recent base as tree" 0   {Open a recent base and use it in Tree window}
menuText R ToolsTracker " "  4 {   }
# ====== TODO To be translated ======
menuText R ToolsTraining "Training"  0 {Training tools (tactics, openings,...) }
# ====== TODO To be translated ======
menuText R ToolsTacticalGame "Tactical game"  0 {Play a game with tactics}
# ====== TODO To be translated ======
menuText R ToolsSeriousGame "Serious game"  0 {Play a serious game}
# ====== TODO To be translated ======
menuText R ToolsTrainOpenings "Openings"  0 {Train with a repertoire}
# ====== TODO To be translated ======
menuText R ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
# ====== TODO To be translated ======
menuText R ToolsTrainTactics "Tactics"  0 {Solve tactics}
# ====== TODO To be translated ======
menuText R ToolsTrainCalvar "Calculation of variations"  0 {Calculation of variations training}
# ====== TODO To be translated ======
menuText R ToolsTrainFindBestMove "Find best move"  0 {Find best move}
# ====== TODO To be translated ======
menuText R ToolsTrainFics "Play on internet"  0 {Play on freechess.org}
# ====== TODO To be translated ======
menuText R ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
# ====== TODO To be translated ======
menuText R ToolsBookTuning "Book tuning" 0 {Book tuning}
# ====== TODO To be translated ======
menuText R ToolsConnectHardware "Connect Hardware" 0 {Connect external hardware}
# ====== TODO To be translated ======
menuText R ToolsConnectHardwareConfigure "Configure..." 0 {Configure external hardware and connection}
# ====== TODO To be translated ======
menuText R ToolsConnectHardwareNovagCitrineConnect "Connect Novag Citrine" 0 {Connect Novag Citrine}
# ====== TODO To be translated ======
menuText R ToolsConnectHardwareInputEngineConnect "Connect Input Engine" 0 {Connect Input Engine (e.g. DGT)}
menuText R ToolsPInfo "  "  1 \
  {/    }
menuText R ToolsPlayerReport "Player Report..." 3 \
  {Generate a player report}
menuText R ToolsRating " " 1 \
  {      }
menuText R ToolsScore " " 2 {   }
menuText R ToolsExpCurrent "  " 0 \
  {     }
menuText R ToolsExpCurrentPGN "    PGN..." 0 \
  {     PGN}
menuText R ToolsExpCurrentHTML "    HTML..." 1 \
  {     HTML}
# ====== TODO To be translated ======
menuText R ToolsExpCurrentHTMLJS "Export Game to HTML and JavaScript File..." 15 {Write current game to a HTML and JavaScript file}  
menuText R ToolsExpCurrentLaTeX "    LaTeX..." 2 \
  {     LaTeX}
menuText R ToolsExpFilter "   " 11 \
  {      }
menuText R ToolsExpFilterPGN "     PGN..." 1 \
  {      PGN}
menuText R ToolsExpFilterHTML "     HTML..." 2 \
  {      HTML}
# ====== TODO To be translated ======
menuText R ToolsExpFilterHTMLJS "Export Filter to HTML and JavaScript File..." 17 {Write all filtered games to a HTML and JavaScript file}  
menuText R ToolsExpFilterLaTeX "     LaTeX..." 3 \
  {      LaTeX}
menuText R ToolsImportOne "   PGN..." 0 \
  {     PGN}
menuText R ToolsImportFile "   PGN..." 9 \
  {    PGN}
# ====== TODO To be translated ======
menuText R ToolsStartEngine1 "Start engine 1" 0  {Start engine 1}
# ====== TODO To be translated ======
menuText R ToolsStartEngine2 "Start engine 2" 0  {Start engine 2}
# ====== TODO To be translated ======
menuText R ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
# ====== TODO To be translated ======
menuText R Play "Play" 0
# ====== TODO To be translated ======
menuText R CorrespondenceChess "Correspondence Chess" 0 {Functions for eMail and Xfcc based correspondence chess}
# ====== TODO To be translated ======
menuText R CCConfigure "Configure..." 0 {Configure external tools and general setup}
# ====== TODO To be translated ======
menuText R CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
# ====== TODO To be translated ======
menuText R CCOpenDB "Open Database..." 0 {Open the default Correspondence database}
# ====== TODO To be translated ======
menuText R CCRetrieve "Retrieve Games" 0 {Retrieve games via external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText R CCInbox "Process Inobx" 0 {Process all files in scids Inbox}
# ====== TODO To be translated ======
menuText R CCSend "Send Move" 0 {Send your move via eMail or external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText R CCResign "Resign" 0 {Resign (not via eMail)}
# ====== TODO To be translated ======
menuText R CCClaimDraw "Claim Draw" 0 {Send move and claim a draw (not via eMail)}
# ====== TODO To be translated ======
menuText R CCOfferDraw "Offer Draw" 0 {Send move and offer a draw (not via eMail)}
# ====== TODO To be translated ======
menuText R CCAcceptDraw "Accept Draw" 0 {Accept a draw offer (not via eMail)}
# ====== TODO To be translated ======
menuText R CCNewMailGame "New eMail Game..." 0 {Start a new eMail game}
# ====== TODO To be translated ======
menuText R CCMailMove "Mail Move..." 0 {Send the move via eMail to the opponent}
# ====== TODO To be translated ======
menuText R CCGamePage "Game Page..." 0 {Call up the game via the web browser}
# ====== TODO To be translated ======
menuText R CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText R Options "" 0
menuText R OptionsBoard "Chessboard" 0 {Chess board appearance options}
menuText R OptionsBoardSize " " 0 {  }
menuText R OptionsBoardPieces " " 0 {  }
menuText R OptionsBoardColors "..." 0 {  }
# ====== TODO To be translated ======
menuText R OptionsBoardGraphics "Squares..." 0 {Select textures for squares}
# ====== TODO To be translated ======
translate R OptionsBGW {Select texture for squares}
# ====== TODO To be translated ======
translate R OptionsBoardGraphicsText {Select graphic files for white and black squares:}
menuText R OptionsBoardNames "My Player Names..." 0 {Edit my player names}
menuText R OptionsExport "" 0 {  }
menuText R OptionsFonts "" 0 { }
menuText R OptionsFontsRegular "" 0 {  }
menuText R OptionsFontsMenu "" 0 {  }
menuText R OptionsFontsSmall "" 1 {  }
# ====== TODO To be translated ======
menuText R OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText R OptionsFontsFixed "" 0 {  }
menuText R OptionsGInfo "  " 0 {   }
menuText R OptionsLanguage "" 0 {  }
# ====== TODO To be translated ======
menuText R OptionsMovesTranslatePieces "Translate pieces" 0 {Translate first letter of pieces}
# ====== TODO To be translated ======
menuText R OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText R OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText R OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText R OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText R OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText R OptionsMoves "" 0 {  }
menuText R OptionsMovesAsk "   " 0 \
  {    }
menuText R OptionsMovesAnimate " " 1 \
  {  ,    }
menuText R OptionsMovesDelay "  ..." 0 \
  {     }
menuText R OptionsMovesCoord " " 1 \
  {      ("g1f3")}
menuText R OptionsMovesSuggest "  " 0 \
  {/   }
# ====== TODO To be translated ======
menuText R OptionsShowVarPopup "Show variations window" 0 {Turn on/off the display of a variations window}  
# ====== TODO To be translated ======
menuText R OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}  
menuText R OptionsMovesKey " " 0 \
  {/   }
# ====== TODO To be translated ======
menuText R OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText R OptionsNumbers " " 0 {  }
menuText R OptionsStartup "" 0 { ,   }
# ====== TODO To be translated ======
menuText R OptionsTheme "Theme" 0 {Change look of interface}
menuText R OptionsWindows "" 0 { }
menuText R OptionsWindowsIconify "-" 0 \
  {  ,    }
menuText R OptionsWindowsRaise "-" 1 \
  {   (,  )  ,   }
# ====== TODO To be translated ======
menuText R OptionsSounds "Sounds..." 2 {Configure move announcement sounds}
# ====== TODO To be translated ======
menuText R OptionsWindowsDock "Dock windows" 0 {Dock windows}
# ====== TODO To be translated ======
menuText R OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
# ====== TODO To be translated ======
menuText R OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
# ====== TODO To be translated ======
menuText R OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
# ====== TODO To be translated ======
menuText R OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText R OptionsToolbar " " 0 {    }
menuText R OptionsECO "  ECO..." 2 {    ECO}
menuText R OptionsSpell "   ..." 4 \
  { Scid   }
menuText R OptionsTable " ..." 15 \
  {  ;       }
menuText R OptionsRecent "  ..." 2 \
  {       }
# ====== TODO To be translated ======
menuText R OptionsBooksDir "Books directory..." 0 {Sets the opening books directory}
# ====== TODO To be translated ======
menuText R OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText R OptionsSave " " 0 \
  "     $::optionsFile"
menuText R OptionsAutoSave "   " 0 \
  {      }

# Help menu:
menuText R Help "" 0
menuText R HelpContents "Contents" 0 {Show the help contents page}
menuText R HelpIndex "" 0 {   }
menuText R HelpGuide " " 0 {    }
menuText R HelpHints "" 0 {  }
menuText R HelpContact " " 0 {  }
menuText R HelpTip " " 2 {  }
menuText R HelpStartup " " 1 {  }
menuText R HelpAbout " Scid" 0 {  Scid}

# Game info box popup menu:
menuText R GInfoHideNext "  " 0
menuText R GInfoMaterial "  " 0
menuText R GInfoFEN " FEN" 1
menuText R GInfoMarks "    " 3
menuText R GInfoWrap "  " 0
menuText R GInfoFullComment "  " 7
menuText R GInfoPhotos " " 9
menuText R GInfoTBNothing " : " 0
menuText R GInfoTBResult " :  " 5
menuText R GInfoTBAll " :    " 7
menuText R GInfoDelete "()  " 1
menuText R GInfoMark "( )  " 2
# ====== TODO To be translated ======
menuText R GInfoInformant "Configure informant values" 0

# Main window buttons:
helpMsg R .main.fbutton.button.start {     (: Home)}
helpMsg R .main.fbutton.button.end {     (: End)}
helpMsg R .main.fbutton.button.back {    (: LeftArrow)}
helpMsg R .main.fbutton.button.forward {   (: RightArrow)}
helpMsg R .main.fbutton.button.intoVar {    (: v)}
helpMsg R .main.fbutton.button.exitVar {    (: z)}
helpMsg R .main.fbutton.button.flip {  (: .)}
helpMsg R .main.fbutton.button.coords {/   (: 0)}
helpMsg R .main.fbutton.button.stm {/   }
helpMsg R .main.fbutton.button.autoplay {    (: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg R .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg R .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg R .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate R Back {}
translate R Browse {Browse}
translate R Cancel {}
# ====== TODO To be translated ======
translate R Continue {Continue}
translate R Clear {}
translate R Close {}
translate R Contents {Contents}
translate R Defaults { }
translate R Delete {}
translate R Graph {}
translate R Help {}
translate R Import {}
translate R Index {}
translate R LoadGame { }
translate R BrowseGame { }
translate R MergeGame { }
# ====== TODO To be translated ======
translate R MergeGames {Merge Games}
translate R Preview { }
translate R Revert {}
translate R Save {}
translate R Search {}
translate R Stop {}
translate R Store {}
translate R Update {}
translate R ChangeOrient {  }
# ====== TODO To be translated ======
translate R ShowIcons {Show Icons}
translate R None {}
translate R First {}
translate R Current {}
translate R Last {}

# General messages:
translate R game {}
translate R games {}
translate R move {}
translate R moves {}
translate R all {}
translate R Yes {}
translate R No {}
translate R Both {}
translate R King {}
translate R Queen {}
translate R Rook {}
translate R Bishop {}
translate R Knight {}
translate R Pawn {}
translate R White {}
translate R Black {}
translate R Player {}
translate R Rating {}
translate R RatingDiff {  ( - )}
translate R AverageRating { }
translate R Event {}
translate R Site {}
translate R Country {}
translate R IgnoreColors { }
translate R Date {}
translate R EventDate { }
translate R Decade {}
translate R Year {}
translate R Month {}
translate R Months {           }
translate R Days {      }
translate R YearToToday { }
translate R Result {}
translate R Round {}
translate R Length {}
translate R ECOCode { ECO}
translate R ECO {ECO}
translate R Deleted {}
translate R SearchResults { }
translate R OpeningTheDatabase {  }
translate R Database { }
translate R Filter {}
translate R noGames { }
translate R allGames { }
translate R empty {}
translate R clipbase {}
translate R score {}
translate R StartPos { }
translate R Total {}
# ====== TODO To be translated ======
translate R readonly {read-only}

# Standard error messages:
translate R ErrNotOpen {    .}
translate R ErrReadOnly {     ;     .}
translate R ErrSearchInterrupted {  ;   .}

# Game information:
translate R twin {}
translate R deleted {}
translate R comment {}
translate R hidden {}
translate R LastMove { }
translate R NextMove {}
translate R GameStart { }
translate R LineStart { }
translate R GameEnd { }
translate R LineEnd { }

# Player information:
translate R PInfoAll { <b></b> }
translate R PInfoFilter { <b></b> }
translate R PInfoAgainst { }
translate R PInfoMostWhite {    }
translate R PInfoMostBlack {    }
translate R PInfoRating { }
translate R PInfoBio {}
translate R PInfoEditRatings {Edit Ratings}

# Tablebase information:
translate R Draw {}
translate R stalemate {}
translate R withAllMoves {  }
translate R withAllButOneMove {    }
translate R with {}
translate R only {}
translate R lose {}
translate R loses {}
translate R allOthersLose {  }
translate R matesIn { }
translate R hasCheckmated {}
translate R longest { }
translate R WinningMoves { }
translate R DrawingMoves { }
translate R LosingMoves { }
translate R UnknownMoves {,    }

# Tip of the day:
translate R Tip {}
translate R TipAtStartup {  }

# Tree window menus:
menuText R TreeFile "" 0
# ====== TODO To be translated ======
menuText R TreeFileFillWithBase "Fill Cache with base" 0 {Fill the cache file with all games in current base}
# ====== TODO To be translated ======
menuText R TreeFileFillWithGame "Fill Cache with game" 0 {Fill the cache file with current game in current base}
# ====== TODO To be translated ======
menuText R TreeFileSetCacheSize "Cache size" 0 {Set the cache size}
# ====== TODO To be translated ======
menuText R TreeFileCacheInfo "Cache info" 0 {Get info on cache usage}
menuText R TreeFileSave "  " 0 {    (.stc)}
menuText R TreeFileFill "  " 0 \
  {      }
menuText R TreeFileBest "  " 1 {    }
menuText R TreeFileGraph " " 0 {     }
menuText R TreeFileCopy "    " 1 \
  {    }
menuText R TreeFileClose "  " 4 {  }
# ====== TODO To be translated ======
menuText R TreeMask "Mask" 0
# ====== TODO To be translated ======
menuText R TreeMaskNew "New" 0 {New mask}
# ====== TODO To be translated ======
menuText R TreeMaskOpen "Open" 0 {Open mask}
# ====== TODO To be translated ======
menuText R TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
# ====== TODO To be translated ======
menuText R TreeMaskSave "Save" 0 {Save mask}
# ====== TODO To be translated ======
menuText R TreeMaskClose "Close" 0 {Close mask}
# ====== TODO To be translated ======
menuText R TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
# ====== TODO To be translated ======
menuText R TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
# ====== TODO To be translated ======
menuText R TreeMaskInfo "Info" 0 {Show statistics for current mask}
# ====== TODO To be translated ======
menuText R TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText R TreeMaskSearch "Search" 0 {Search in current mask}
menuText R TreeSort "" 0
menuText R TreeSortAlpha "" 0
menuText R TreeSortECO "  ECO" 3
menuText R TreeSortFreq " " 3
menuText R TreeSortScore " " 3
menuText R TreeOpt "" 0
# ====== TODO To be translated ======
menuText R TreeOptSlowmode "slow mode" 0 {Slow mode for updates (high accuracy)}
# ====== TODO To be translated ======
menuText R TreeOptFastmode "Fast mode" 0 {Fast mode for updates (no move transposition)}
# ====== TODO To be translated ======
menuText R TreeOptFastAndSlowmode "Fast and slow mode" 0 {Fast mode then slow mode for updates}
# ====== TODO To be translated ======
menuText R TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText R TreeOptLock "" 0 {()    }
menuText R TreeOptTraining "" 0 {/  }
menuText R TreeOptAutosave "  " 0 \
  {  ,    }
menuText R TreeHelp "" 0
menuText R TreeHelpTree "  " 0
menuText R TreeHelpIndex " " 0
translate R SaveCache { }
translate R Training {}
translate R LockTree {}
translate R TreeLocked {}
translate R TreeBest {}
translate R TreeBestGames {  }
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate R TreeTitleRow \
  {        ECO               Elo    %}
translate R TreeTotal {TOTAL}
# ====== TODO To be translated ======
translate R DoYouWantToSaveFirst {Do you want to save first}
# ====== TODO To be translated ======
translate R AddToMask {Add to Mask}
# ====== TODO To be translated ======
translate R RemoveFromMask {Remove from Mask}
# ====== TODO To be translated ======
translate R AddThisMoveToMask {Add this move to Mask}
# ====== TODO To be translated ======
translate R SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate R DisplayMask {Display Mask}
# ====== TODO To be translated ======
translate R Nag {Nag code}
# ====== TODO To be translated ======
translate R Marker {Marker}
# ====== TODO To be translated ======
translate R Include {Include}
# ====== TODO To be translated ======
translate R Exclude {Exclude}
# ====== TODO To be translated ======
translate R MainLine {Main line}
# ====== TODO To be translated ======
translate R Bookmark {Bookmark}
# ====== TODO To be translated ======
translate R NewLine {New line}
# ====== TODO To be translated ======
translate R ToBeVerified {To be verified}
# ====== TODO To be translated ======
translate R ToTrain {To train}
# ====== TODO To be translated ======
translate R Dubious {Dubious}
# ====== TODO To be translated ======
translate R ToRemove {To remove}
# ====== TODO To be translated ======
translate R NoMarker {No marker}
# ====== TODO To be translated ======
translate R ColorMarker {Color}
# ====== TODO To be translated ======
translate R WhiteMark {White}
# ====== TODO To be translated ======
translate R GreenMark {Green}
# ====== TODO To be translated ======
translate R YellowMark {Yellow}
# ====== TODO To be translated ======
translate R BlueMark {Blue}
# ====== TODO To be translated ======
translate R RedMark {Red}
# ====== TODO To be translated ======
translate R CommentMove {Comment move}
# ====== TODO To be translated ======
translate R CommentPosition {Comment position}
# ====== TODO To be translated ======
translate R AddMoveToMaskFirst {Add move to mask first}
# ====== TODO To be translated ======
translate R OpenAMaskFileFirst {Open a mask file first}
# ====== TODO To be translated ======
translate R Positions {Positions}
# ====== TODO To be translated ======
translate R Moves {Moves}

# Finder window:
menuText R FinderFile "" 0
menuText R FinderFileSubdirs "  " 0
menuText R FinderFileClose "  " 0
menuText R FinderSort "" 0
menuText R FinderSortType "" 0
menuText R FinderSortSize "" 0
menuText R FinderSortMod "" 0
menuText R FinderSortName "" 0
menuText R FinderSortPath "" 0
menuText R FinderTypes "" 0
menuText R FinderTypesScid "  Scid" 0
menuText R FinderTypesOld "    Scid" 0
menuText R FinderTypesPGN " PGN" 0
menuText R FinderTypesEPD " EPD" 1
menuText R FinderTypesRep " " 6
menuText R FinderHelp "" 0
menuText R FinderHelpFinder "   " 0
menuText R FinderHelpIndex " " 0
translate R FileFinder { }
translate R FinderDir {}
translate R FinderDirs {}
translate R FinderFiles {}
translate R FinderUpDir {}
# ====== TODO To be translated ======
translate R FinderCtxOpen {Open}
# ====== TODO To be translated ======
translate R FinderCtxBackup {Backup}
# ====== TODO To be translated ======
translate R FinderCtxCopy {Copy}
# ====== TODO To be translated ======
translate R FinderCtxMove {Move}
# ====== TODO To be translated ======
translate R FinderCtxDelete {Delete}

# Player finder:
menuText R PListFile "" 0
menuText R PListFileUpdate "" 0
menuText R PListFileClose "  " 0
menuText R PListSort "" 0
menuText R PListSortName "" 0
menuText R PListSortElo "Elo" 0
menuText R PListSortGames "" 0
menuText R PListSortOldest "" 1
menuText R PListSortNewest "" 0

# Tournament finder:
menuText R TmtFile "" 0
menuText R TmtFileUpdate "" 0
menuText R TmtFileClose "  " 0
menuText R TmtSort "" 0
menuText R TmtSortDate "" 0
menuText R TmtSortPlayers "" 0
menuText R TmtSortGames "" 0
menuText R TmtSortElo "Elo" 0
menuText R TmtSortSite "" 0
menuText R TmtSortEvent "" 0
menuText R TmtSortWinner "" 2
translate R TmtLimit " "
translate R TmtMeanElo "  Elo"
translate R TmtNone "    ."

# Graph windows:
menuText R GraphFile "" 0
menuText R GraphFileColor "   PostScript..." 14
menuText R GraphFileGrey "  - PostScript..." 14
menuText R GraphFileClose " " 6
menuText R GraphOptions "" 0
menuText R GraphOptionsWhite "" 0
menuText R GraphOptionsBlack "" 0
menuText R GraphOptionsBoth "" 0
menuText R GraphOptionsPInfo " -   " 0
translate R GraphFilterTitle " :   1000 "
# ====== TODO To be translated ======
translate R GraphAbsFilterTitle "Filter Graph: frequency of the games"
# ====== TODO To be translated ======
translate R ConfigureFilter {Configure X-Axes for Year, Rating and Moves}
# ====== TODO To be translated ======
translate R FilterEstimate "Estimate"
# ====== TODO To be translated ======
translate R TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate R AddVariation { }
# ====== TODO To be translated ======
translate R AddAllVariations {Add All Variations}
translate R AddMove { }
translate R Annotate {}
# ====== TODO To be translated ======
translate R ShowAnalysisBoard {Show analysis board}
# ====== TODO To be translated ======
translate R ShowInfo {Show engine info}
# ====== TODO To be translated ======
translate R FinishGame {Finish game}
# ====== TODO To be translated ======
translate R StopEngine {Stop engine}
# ====== TODO To be translated ======
translate R StartEngine {Start engine}
# ====== TODO To be translated ======
translate R LockEngine {Lock engine to current position}
translate R AnalysisCommand { }
translate R PreviousChoices { }
translate R AnnotateTime {     }
translate R AnnotateWhich { }
translate R AnnotateAll {   }
# ====== TODO To be translated ======
translate R AnnotateAllMoves {Annotate all moves}
translate R AnnotateWhite {   }
translate R AnnotateBlack {   }
# ====== TODO To be translated ======
translate R AnnotateBlundersOnly {When game move is an obvious blunder}
# ====== TODO To be translated ======
translate R AnnotateBlundersOnlyScoreChange {Analysis reports blunder, with score change from/to: }
# ====== TODO To be translated ======
translate R BlundersThreshold {Threshold}
# TODO: Translate
translate R ScoreAllMoves {Score all moves}
translate R LowPriority {  CPU}
# ====== TODO To be translated ======
translate R ClickHereToSeeMoves {Click here to see moves}
# ====== TODO To be translated ======
translate R ConfigureInformant {Configure Informant}
# ====== TODO To be translated ======
translate R Informant!? {Interesting move}
# ====== TODO To be translated ======
translate R Informant? {Poor move}
# ====== TODO To be translated ======
translate R Informant?? {Blunder}
# ====== TODO To be translated ======
translate R Informant?! {Dubious move}
# ====== TODO To be translated ======
translate R Informant+= {White has a slight advantage}
# ====== TODO To be translated ======
translate R Informant+/- {White has a moderate advantage}
# ====== TODO To be translated ======
translate R Informant+- {White has a decisive advantage}
# ====== TODO To be translated ======
translate R Informant++- {The game is considered won}
# ====== TODO To be translated ======
translate R Book {Book}
# ====== TODO To be translated ======
translate R OtherBookMoves {Opponent's book}
# ====== TODO To be translated ======
translate R OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate R EngineList {  }
translate R EngineName {}
translate R EngineCmd {}
translate R EngineArgs {}
translate R EngineDir {}
translate R EngineElo {Elo}
translate R EngineTime {}
translate R EngineNew {}
translate R EngineEdit {}
translate R EngineRequired {,   ,  ,   }

# Stats window menus:
menuText R StatsFile "" 0
menuText R StatsFilePrint "  ..." 0
menuText R StatsFileClose " " 0
menuText R StatsOpt "" 0

# PGN window menus:
menuText R PgnFile "" 0
menuText R PgnFileCopy "Copy Game to Clipboard" 0
menuText R PgnFilePrint "  ..." 0
menuText R PgnFileClose "  PGN" 0
menuText R PgnOpt "" 0
menuText R PgnOptColor " " 0
menuText R PgnOptShort " () " 0
menuText R PgnOptSymbols " " 0
menuText R PgnOptIndentC "  " 2
menuText R PgnOptIndentV "  " 0
menuText R PgnOptColumn "  (   )" 4
menuText R PgnOptSpace "   " 0
menuText R PgnOptStripMarks "   /" 0
menuText R PgnOptBoldMainLine "Use Bold Text for Main Line Moves" 4
menuText R PgnColor "" 0
menuText R PgnColorHeader "..." 0
menuText R PgnColorAnno "..." 0
menuText R PgnColorComments "..." 0
menuText R PgnColorVars "..." 0
menuText R PgnColorBackground "..." 0
# ====== TODO To be translated ======
menuText R PgnColorMain "Main line..." 0
# ====== TODO To be translated ======
menuText R PgnColorCurrent "Current move background..." 1
menuText R PgnHelp "" 0
menuText R PgnHelpPgn "  PGN" 0
menuText R PgnHelpIndex "" 0
translate R PgnWindowTitle {Game Notation - game %u}

# Crosstable window menus:
menuText R CrosstabFile "" 0
menuText R CrosstabFileText "   ..." 11
menuText R CrosstabFileHtml "  HTML ..." 11
menuText R CrosstabFileLaTeX "  LaTeX ..." 11
menuText R CrosstabFileClose "   " 0
menuText R CrosstabEdit "" 0
menuText R CrosstabEditEvent "" 0
menuText R CrosstabEditSite "" 0
menuText R CrosstabEditDate "" 0
menuText R CrosstabOpt "" 0
menuText R CrosstabOptAll "  " 0
menuText R CrosstabOptSwiss " " 0
menuText R CrosstabOptKnockout " " 0
menuText R CrosstabOptAuto "" 0
menuText R CrosstabOptAges "  " 2
menuText R CrosstabOptNats "" 2
menuText R CrosstabOptRatings "" 0
menuText R CrosstabOptTitles "" 0
menuText R CrosstabOptBreaks " -" 0
menuText R CrosstabOptDeleted "  " 1
menuText R CrosstabOptColors " (   )" 0
menuText R CrosstabOptColumnNumbers "  (    )" 2
menuText R CrosstabOptGroup " " 0
menuText R CrosstabSort "" 0
menuText R CrosstabSortName "" 0
menuText R CrosstabSortRating "" 0
menuText R CrosstabSortScore "" 0
menuText R CrosstabColor "" 0
menuText R CrosstabColorPlain " " 0
menuText R CrosstabColorHyper "" 0
menuText R CrosstabHelp "" 0
menuText R CrosstabHelpCross "   " 0
menuText R CrosstabHelpIndex " " 0
translate R SetFilter { }
translate R AddToFilter {  }
translate R Swiss { }
translate R Category {}

# Opening report window menus:
menuText R OprepFile "" 0
menuText R OprepFileText "   ..." 11
menuText R OprepFileHtml "  HTML ..." 11
menuText R OprepFileLaTeX "  LaTeX ..." 11
menuText R OprepFileOptions "..." 0
menuText R OprepFileClose "  " 0
menuText R OprepFavorites "Favorites" 1
menuText R OprepFavoritesAdd "Add Report..." 0
menuText R OprepFavoritesEdit "Edit Report Favorites..." 0
menuText R OprepFavoritesGenerate "Generate Reports..." 0
menuText R OprepHelp "" 0
menuText R OprepHelpReport "   " 0
menuText R OprepHelpIndex " " 0

# Repertoire editor:
menuText R RepFile "" 0
menuText R RepFileNew "" 0
menuText R RepFileOpen "..." 0
menuText R RepFileSave ".." 0
menuText R RepFileSaveAs " ..." 2
menuText R RepFileClose " " 0
menuText R RepEdit "" 0
menuText R RepEditGroup " " 9
menuText R RepEditInclude "  " 9
menuText R RepEditExclude "  " 9
menuText R RepView "" 0
menuText R RepViewExpand "  " 0
menuText R RepViewCollapse "  " 0
menuText R RepSearch "" 0
menuText R RepSearchAll " ..." 0
menuText R RepSearchDisplayed "  ..." 0
menuText R RepHelp "" 4
menuText R RepHelpRep "  " 0
menuText R RepHelpIndex " " 0
translate R RepSearch " "
translate R RepIncludedLines " "
translate R RepExcludedLines " "
translate R RepCloseDialog {     .

       ,   ?
}

# Header search:
translate R HeaderSearch {  }
# ====== TODO To be translated ======
translate R EndSideToMove {Side to move at end of game}
translate R GamesWithNoECO {  ECO?}
translate R GameLength { }
translate R FindGamesWith {   }
translate R StdStart { }
translate R Promotions {}
translate R Comments {}
translate R Variations {}
translate R Annotations {}
translate R DeleteFlag { }
translate R WhiteOpFlag { }
translate R BlackOpFlag { }
translate R MiddlegameFlag {}
translate R EndgameFlag {}
translate R NoveltyFlag {}
translate R PawnFlag { }
translate R TacticsFlag {}
translate R QsideFlag {   }
translate R KsideFlag {   }
translate R BrilliancyFlag {}
translate R BlunderFlag {}
translate R UserFlag {}
translate R PgnContains { PGN}
# ====== TODO To be translated ======
translate R Annotator {Annotator}
# ====== TODO To be translated ======
translate R Cmnts {Annotated games only}

# Game list window:
translate R GlistNumber {}
translate R GlistWhite {}
translate R GlistBlack {}
translate R GlistWElo {-Elo}
translate R GlistBElo {-Elo}
translate R GlistEvent {}
translate R GlistSite {}
translate R GlistRound {}
translate R GlistDate {}
translate R GlistYear {}
translate R GlistEDate { }
translate R GlistResult {}
translate R GlistLength {}
translate R GlistCountry {}
translate R GlistECO {ECO}
translate R GlistOpening {}
translate R GlistEndMaterial { }
translate R GlistDeleted {}
translate R GlistFlags {}
translate R GlistVars {}
translate R GlistComments {}
translate R GlistAnnos {}
translate R GlistStart {}
translate R GlistGameNumber { }
# ====== TODO To be translated ======
translate R GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate R GlistRating {Rating}
translate R GlistFindText { }
translate R GlistMoveField {}
translate R GlistEditField {}
translate R GlistAddField {}
translate R GlistDeleteField {}
translate R GlistWidth {}
translate R GlistAlign {}
# ====== TODO To be translated ======
translate R GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate R GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate R GlistAlignC {Align: center}
translate R GlistColor {}
translate R GlistSep {}
# ====== TODO To be translated ======
translate R GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate R GlistNewSort {New}
# ====== TODO To be translated ======
translate R GlistAddToSort {Add}
# ====== TODO To be translated ======
translate R GsortSort {Sort...}
# ====== TODO To be translated ======
translate R GsortDate {Date}
# ====== TODO To be translated ======
translate R GsortYear {Year}
# ====== TODO To be translated ======
translate R GsortEvent {Event}
# ====== TODO To be translated ======
translate R GsortSite {Site}
# ====== TODO To be translated ======
translate R GsortRound {Round}
# ====== TODO To be translated ======
translate R GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate R GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate R GsortECO {ECO}
# ====== TODO To be translated ======
translate R GsortResult {Result}
# ====== TODO To be translated ======
translate R GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate R GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate R GsortCountry {Country}
# ====== TODO To be translated ======
translate R GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate R GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate R GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate R GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate R GsortComments {Comments}
# ====== TODO To be translated ======
translate R GsortVariations {Variations}
# ====== TODO To be translated ======
translate R GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate R GsortAscending {Ascending}
# ====== TODO To be translated ======
translate R GsortDescending {Descending}
# ====== TODO To be translated ======
translate R GsortAdd {Add}
# ====== TODO To be translated ======
translate R GsortStore {Store}
# ====== TODO To be translated ======
translate R GsortLoad {Load}
# ====== TODO To be translated ======
translate R GlistRemoveThisGameFromFilter  {Remove this game from Filter}
# ====== TODO To be translated ======
translate R GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
# ====== TODO To be translated ======
translate R GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
# ====== TODO To be translated ======
translate R GlistDeleteGame {(Un)Delete this game} 
# ====== TODO To be translated ======
translate R GlistDeleteAllGames {Delete all games in filter} 
# ====== TODO To be translated ======
translate R GlistUndeleteAllGames {Undelete all games in filter} 
# ====== TODO To be translated ======
translate R GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate R DatabaseName {  :}
translate R TypeIcon { :}
translate R NumOfGames {:}
translate R NumDeletedGames { :}
translate R NumFilterGames {  :}
translate R YearRange { :}
translate R RatingRange { :}
translate R Description {}
translate R Flag {}
# ====== TODO To be translated ======
translate R CustomFlags {Custom flags}
translate R DeleteCurrent {  }
translate R DeleteFilter {  }
translate R DeleteAll {  }
translate R UndeleteCurrent {  }
translate R UndeleteFilter {  }
translate R UndeleteAll {  }
translate R DeleteTwins {  }
translate R MarkCurrent {  }
translate R MarkFilter {  }
translate R MarkAll {  }
translate R UnmarkCurrent {    }
translate R UnmarkFilter {    }
translate R UnmarkAll {    }
translate R Spellchecking { }
translate R Players {}
translate R Events {}
translate R Sites {}
translate R Rounds {}
translate R DatabaseOps {   }
translate R ReclassifyGames {   ECO}
translate R CompactDatabase {  }
translate R SortDatabase {  }
translate R AddEloRatings {  Elo}
translate R AutoloadGame {  }
translate R StripTags {  PGN}
translate R StripTag { }
translate R Cleaner {}
translate R CleanerHelp {
 Scid    ,      ,    .

   ECO      ,     .
}
translate R CleanerConfirm {
   ,     !

        ,    ,       .

 ,     ,   ?
}
# ====== TODO To be translated ======
translate R TwinCheckUndelete {to flip; "u" undeletes both)}
# ====== TODO To be translated ======
translate R TwinCheckprevPair {Previous pair}
# ====== TODO To be translated ======
translate R TwinChecknextPair {Next pair}
# ====== TODO To be translated ======
translate R TwinChecker {Scid: Twin game checker}
# ====== TODO To be translated ======
translate R TwinCheckTournament {Games in tournament:}
# ====== TODO To be translated ======
translate R TwinCheckNoTwin {No twin  }
# ====== TODO To be translated ======
translate R TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
# ====== TODO To be translated ======
translate R TwinCheckTag {Share tags...}
# ====== TODO To be translated ======
translate R TwinCheckFound1 {Scid found $result twin games}
# ====== TODO To be translated ======
translate R TwinCheckFound2 { and set their delete flags}
# ====== TODO To be translated ======
translate R TwinCheckNoDelete {There are no games in this database to delete.}
# ====== TODO To be translated ======
translate R TwinCriteria1 { Your settings for finding twin games are potentially likely to\ncause non-twin games with similar moves to be marked as twins.}
# ====== TODO To be translated ======
translate R TwinCriteria2 {It is recommended that if you select "No" for "same moves", you should select "Yes" for the colors, event, site, round, year and month settings.\nDo you want to continue and delete twins anyway? }
# ====== TODO To be translated ======
translate R TwinCriteria3 {It is recommended that you specify "Yes" for at least two of the "same site", "same round" and "same year" settings.\nDo you want to continue and delete twins anyway?}
# ====== TODO To be translated ======
translate R TwinCriteriaConfirm {Scid: Confirm twin settings}
# ====== TODO To be translated ======
translate R TwinChangeTag "Change the following game tags:\n\n"
# ====== TODO To be translated ======
translate R AllocRatingDescription "This command will use the current spellcheck file to add Elo ratings to games in this database. Wherever a player has no currrent rating but his/her rating at the time of the game is listed in the spellcheck file, that rating will be added."
# ====== TODO To be translated ======
translate R RatingOverride "Overwrite existing non-zero ratings?"
# ====== TODO To be translated ======
translate R AddRatings "Add ratings to:"
# ====== TODO To be translated ======
translate R AddedRatings {Scid added $r Elo ratings in $g games.}
# ====== TODO To be translated ======
translate R NewSubmenu "New submenu"

# Comment editor:
translate R AnnotationSymbols  { :}
translate R Comment {:}
translate R InsertMark { }
translate R InsertMarkHelp {
Insert/remove mark: Select color, type, square.
Insert/remove arrow: Right-click two squares.
}

# Nag buttons in comment editor:
translate R GoodMove {Good move}
translate R PoorMove {Poor move}
translate R ExcellentMove {Excellent move}
# ====== TODO To be translated ======
translate R Blunder {Blunder}
translate R InterestingMove {Interesting move}
translate R DubiousMove {Dubious move}
translate R WhiteDecisiveAdvantage {White has a decisive advantage}
translate R BlackDecisiveAdvantage {White has a decisive advantage}
translate R WhiteClearAdvantage {White has a clear advantage}
translate R BlackClearAdvantage {White has a clear advantage}
translate R WhiteSlightAdvantage {White has a slight advantage}
translate R BlackSlightAdvantage {White has a slight advantage}
translate R Equality {Equality}
translate R Unclear {Unclear}
translate R Diagram {Diagram}

# Board search:
translate R BoardSearch { }
translate R FilterOperation {   :}
translate R FilterAnd {AND ( )}
translate R FilterOr {OR (  )}
translate R FilterIgnore {IGNORE ( )}
translate R SearchType { :}
translate R SearchBoardExact {  (     )}
translate R SearchBoardPawns { (  ,      )}
translate R SearchBoardFiles { (  ,      )}
translate R SearchBoardAny { (  ,      )}
# ====== TODO To be translated ======
translate R SearchInRefDatabase { Search in base }
translate R LookInVars {  }

# Material search:
translate R MaterialSearch { }
translate R Material {}
translate R Patterns {}
translate R Zero {}
translate R Any {}
translate R CurrentBoard { }
translate R CommonEndings { }
translate R CommonPatterns { }
translate R MaterialDiff { }
translate R squares {}
translate R SameColor {  }
translate R OppColor { }
translate R Either {}
translate R MoveNumberRange {  }
translate R MatchForAtLeast {   }
translate R HalfMoves {}
# ====== TODO To be translated ======
translate R EndingPawns {Pawn endings}
# ====== TODO To be translated ======
translate R EndingRookVsPawns {Rook vs. Pawn(s)}
# ====== TODO To be translated ======
translate R EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook}
# ====== TODO To be translated ======
translate R EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook}
# ====== TODO To be translated ======
translate R EndingRooks {Rook vs. Rook endings}
# ====== TODO To be translated ======
translate R EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn}
# ====== TODO To be translated ======
translate R EndingRooksDouble {Double Rook endings}
# ====== TODO To be translated ======
translate R EndingBishops {Bishop vs. Bishop endings}
# ====== TODO To be translated ======
translate R EndingBishopVsKnight {Bishop vs. Knight endings}
# ====== TODO To be translated ======
translate R EndingKnights {Knight vs. Knight endings}
# ====== TODO To be translated ======
translate R EndingQueens {Queen vs. Queen endings}
# ====== TODO To be translated ======
translate R EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen}
# ====== TODO To be translated ======
translate R BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame}
# ====== TODO To be translated ======
translate R PatternWhiteIQP {White IQP}
# ====== TODO To be translated ======
translate R PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6}
# ====== TODO To be translated ======
translate R PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6}
# ====== TODO To be translated ======
translate R PatternBlackIQP {Black IQP}
# ====== TODO To be translated ======
translate R PatternWhiteBlackIQP {White IQP vs. Black IQP}
# ====== TODO To be translated ======
translate R PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple}
# ====== TODO To be translated ======
translate R PatternHangingC5D5 {Black Hanging Pawns on c5 and d5}
# ====== TODO To be translated ======
translate R PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)}
# ====== TODO To be translated ======
translate R PatternRookSacC3 {Rook Sacrifice on c3}
# ====== TODO To be translated ======
translate R PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)}
# ====== TODO To be translated ======
translate R PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)}
# ====== TODO To be translated ======
translate R PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)}
# ====== TODO To be translated ======
translate R PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)}
# ====== TODO To be translated ======
translate R PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)}

# Game saving:
translate R Today {}
translate R ClassifyGame { }

# Setup position:
translate R EmptyBoard { }
translate R InitialBoard { }
translate R SideToMove { }
translate R MoveNumber { }
translate R Castling {}
translate R EnPassantFile { }
translate R ClearFen { FEN}
translate R PasteFen { FEN}
# ====== TODO To be translated ======
translate R SaveAndContinue {Save and continue}
# ====== TODO To be translated ======
translate R DiscardChangesAndContinue {Discard changes\nand continue}
# ====== TODO To be translated ======
translate R GoBack {Go back}

# Replace move dialog:
translate R ReplaceMove { }
translate R AddNewVar {  }
# ====== TODO To be translated ======
translate R NewMainLine {New Main Line}
translate R ReplaceMoveMessage {   .

   ,     ,    ,   .

(       ,   "   "   : .)}

# Make database read-only dialog:
translate R ReadOnlyDialog {        ,     .
      ,       .
     ECO  .

           .

         ?}

# Clear game dialog:
translate R ClearGameDialog {   .

   ,    ?
}

# Exit dialog:
translate R ExitDialog {     Scid?}
translate R ExitUnsaved {       .    ,   .}

# Import window:
translate R PasteCurrentGame {  }
translate R ImportHelp1 {      PGN   .}
translate R ImportHelp2 {      .}
# ====== TODO To be translated ======
translate R OverwriteExistingMoves {Overwrite existing moves ?}

# ECO Browser:
translate R ECOAllSections {  ECO}
translate R ECOSection { ECO}
translate R ECOSummary { }
translate R ECOFrequency {  }

# Opening Report:
translate R OprepTitle { }
translate R OprepReport {}
translate R OprepGenerated {}
translate R OprepStatsHist {  }
translate R OprepStats {}
translate R OprepStatAll {  }
translate R OprepStatBoth {  }
translate R OprepStatSince {}
translate R OprepOldest { }
translate R OprepNewest { }
translate R OprepPopular { }
translate R OprepFreqAll {   :   }
translate R OprepFreq1   {  : }
translate R OprepFreq5   {   : }
translate R OprepFreq10  {   : }
translate R OprepEvery {   %u }
translate R OprepUp { - %u%s   }
translate R OprepDown { - %u%s   }
translate R OprepSame {    }
translate R OprepMostFrequent {   }
translate R OprepMostFrequentOpponents {Most frequent opponents}
translate R OprepRatingsPerf {  }
translate R OprepAvgPerf {   }
translate R OprepWRating { }
translate R OprepBRating { }
translate R OprepWPerf { }
translate R OprepBPerf { }
translate R OprepHighRating {    }
translate R OprepTrends { }
translate R OprepResults {   }
translate R OprepLength { }
translate R OprepFrequency {}
translate R OprepWWins { : }
translate R OprepBWins { : }
translate R OprepDraws {:      }
translate R OprepWholeDB {  }
translate R OprepShortest {  }
translate R OprepMovesThemes {  }
translate R OprepMoveOrders {      }
translate R OprepMoveOrdersOne \
  {        :}
translate R OprepMoveOrdersAll \
  { %u       :}
translate R OprepMoveOrdersMany \
  { %u       .  %u:}
translate R OprepMovesFrom {   }
translate R OprepMostFrequentEcoCodes {Most frequent ECO codes}
translate R OprepThemes { }
translate R OprepThemeDescription {Frequency of themes in the first %u moves of each game}
translate R OprepThemeSameCastling { }
translate R OprepThemeOppCastling { }
translate R OprepThemeNoCastling {   }
translate R OprepThemeKPawnStorm {  }
translate R OprepThemeQueenswap { }
translate R OprepThemeWIQP {White Isolated Queen Pawn}
translate R OprepThemeBIQP {Black Isolated Queen Pawn}
translate R OprepThemeWP567 {   5/6/7 }
translate R OprepThemeBP234 {   2/3/4 }
translate R OprepThemeOpenCDE { c/d/e }
translate R OprepTheme1BishopPair {     }
translate R OprepEndgames {}
translate R OprepReportGames { }
translate R OprepAllGames    { }
translate R OprepEndClass {    }
translate R OprepTheoryTable { }
translate R OprepTableComment {  %u  .}
translate R OprepExtraMoves {      }
translate R OprepMaxGames {    }
translate R OprepViewHTML {View HTML}
translate R OprepViewLaTeX {View LaTeX}

# Player Report:
translate R PReportTitle {Player Report}
translate R PReportColorWhite {with the White pieces}
translate R PReportColorBlack {with the Black pieces}
translate R PReportMoves {after %s}
translate R PReportOpenings {Openings}
translate R PReportClipbase {Empty clipbase and copy matching games to it}

# Piece Tracker window:
translate R TrackerSelectSingle {     .}
translate R TrackerSelectPair {     ;     .}
translate R TrackerSelectPawn {     ;    8 .}
translate R TrackerStat {}
translate R TrackerGames {%      }
translate R TrackerTime {%    }
translate R TrackerMoves {}
translate R TrackerMovesStart {  ,    .}
translate R TrackerMovesStop {  ,   .}

# Game selection dialogs:
translate R SelectAllGames {    }
translate R SelectFilterGames {  }
translate R SelectTournamentGames {   }
translate R SelectOlderGames {  }

# Delete Twins window:
translate R TwinsNote {  ,         ,  ,    .    ,    . :      ,    . }
translate R TwinsCriteria {:   ...}
translate R TwinsWhich {  }
translate R TwinsColors {    ?}
translate R TwinsEvent {  ?}
translate R TwinsSite {  ?}
translate R TwinsRound {  ?}
translate R TwinsYear {  ?}
translate R TwinsMonth {  ?}
translate R TwinsDay {  ?}
translate R TwinsResult {  ?}
translate R TwinsECO {   ECO?}
translate R TwinsMoves {  ?}
translate R TwinsPlayers {  :}
translate R TwinsPlayersExact { }
translate R TwinsPlayersPrefix {  4 }
translate R TwinsWhen {   }
translate R TwinsSkipShort {  ,   5 ?}
translate R TwinsUndelete {   ?}
translate R TwinsSetFilter {     ?}
translate R TwinsComments {    ?}
translate R TwinsVars {    ?}
translate R TwinsDeleteWhich {  :}
translate R TwinsDeleteShorter {  }
translate R TwinsDeleteOlder {  }
translate R TwinsDeleteNewer {  }
translate R TwinsDelete { }

# Name editor window:
translate R NameEditType {   }
translate R NameEditSelect {  }
translate R NameEditReplace {}
translate R NameEditWith {}
translate R NameEditMatches {:  Ctrl+1 - Ctrl+9  }
# ====== TODO To be translated ======
translate R CheckGames {Check games}
# ====== TODO To be translated ======
translate R CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate R CheckAll {All games}
# ====== TODO To be translated ======
translate R CheckSelectFilterGames {Only games in filter}

# Classify window:
translate R Classify {}
translate R ClassifyWhich {   ECO}
translate R ClassifyAll {  (  ECO)}
translate R ClassifyYear { ,    }
translate R ClassifyMonth { ,    }
translate R ClassifyNew {    ECO}
translate R ClassifyCodes { ECO  }
translate R ClassifyBasic {   ("B12", ...)}
translate R ClassifyExtended {Scid  ("B12j", ...)}

# Compaction:
translate R NameFile { }
translate R GameFile { }
translate R Names {}
translate R Unused { }
translate R SizeKb { (kb)}
translate R CurrentState { }
translate R AfterCompaction { }
translate R CompactNames {  }
translate R CompactGames {  }
# ====== TODO To be translated ======
translate R NoUnusedNames "There are no unused names, so the name file is already fully compacted."
# ====== TODO To be translated ======
translate R NoUnusedGames "The game file is already fully compacted."
# ====== TODO To be translated ======
translate R NameFileCompacted {The name file for the database "[file tail [sc_base filename]]" was compacted.}
# ====== TODO To be translated ======
translate R GameFileCompacted {The game file for the database "[file tail [sc_base filename]]" was compacted.}

# Sorting:
translate R SortCriteria {}
translate R AddCriteria { }
translate R CommonSorts { }
translate R Sort {}

# Exporting:
translate R AddToExistingFile {    ?}
translate R ExportComments { ?}
translate R ExportVariations { ?}
translate R IndentComments {  ?}
translate R IndentVariations {  ?}
translate R ExportColumnStyle {  (   )?}
translate R ExportSymbolStyle {  :}
translate R ExportStripMarks {   /  ?}

# Goto game/move dialogs:
translate R LoadGameNumber {    :}
translate R GotoMoveNumber {   :}

# Copy games dialog:
translate R CopyGames { }
translate R CopyConfirm {
    
 [::utils::thousands $nGamesToCopy]  
    "$fromName"
    "$targetName"?
}
translate R CopyErr {   }
translate R CopyErrSource {  }
translate R CopyErrTarget {  }
translate R CopyErrNoGames {has no games in its filter}
translate R CopyErrReadOnly {  }
translate R CopyErrNotOpen { }

# Colors:
translate R LightSquares { }
translate R DarkSquares { }
translate R SelectedSquares { }
translate R SuggestedSquares {  }
translate R WhitePieces { }
translate R BlackPieces { }
translate R WhiteBorder { }
translate R BlackBorder { }

# Novelty window:
translate R FindNovelty { }
translate R Novelty {}
translate R NoveltyInterrupt {  }
translate R NoveltyNone {     }
translate R NoveltyHelp {Scid      ,    ,        .}
# ====== TODO To be translated ======
translate R SoundsFolder {Sound Files Folder}
# ====== TODO To be translated ======
translate R SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc}
# ====== TODO To be translated ======
translate R SoundsAnnounceOptions {Move Announcement Options}
# ====== TODO To be translated ======
translate R SoundsAnnounceNew {Announce new moves as they are made}
# ====== TODO To be translated ======
translate R SoundsAnnounceForward {Announce moves when moving forward one move}
# ====== TODO To be translated ======
translate R SoundsAnnounceBack {Announce when retracting or moving back one move}

# Upgrading databases:
translate R Upgrading {}
translate R ConfirmOpenNew {
   (Scid 2)  ,       Scid 3,     (Scid 3)    .

       ?
}
translate R ConfirmUpgrade {
   (Scid 2)  .              Scid 3.

     ;        .

   ,      .   ,      .

     ?
}

# Recent files options:
translate R RecentFilesMenu {      }
translate R RecentFilesExtra {      }

# My Player Names options:
translate R MyPlayerNamesDescription {
Enter a list of preferred player names below, one name per line. Wildcards (e.g. "?" for any single character, "*" for any sequence of characters) are permitted.

Every time a game with a player in the list is loaded, the main window chessboard will be rotated if necessary to show the game from that players perspective.
}
# ====== TODO To be translated ======
translate R showblunderexists {show blunder exists}
# ====== TODO To be translated ======
translate R showblundervalue {show blunder value}
# ====== TODO To be translated ======
translate R showscore {show score}
# ====== TODO To be translated ======
translate R coachgame {coach game}
# ====== TODO To be translated ======
translate R configurecoachgame {configure coach game}
# ====== TODO To be translated ======
translate R configuregame {Game configuration}
# ====== TODO To be translated ======
translate R Phalanxengine {Phalanx engine}
# ====== TODO To be translated ======
translate R Coachengine {Coach engine}
# ====== TODO To be translated ======
translate R difficulty {difficulty}
# ====== TODO To be translated ======
translate R hard {hard}
# ====== TODO To be translated ======
translate R easy {easy}
# ====== TODO To be translated ======
translate R Playwith {Play with}
# ====== TODO To be translated ======
translate R white {white}
# ====== TODO To be translated ======
translate R black {black}
# ====== TODO To be translated ======
translate R both {both}
# ====== TODO To be translated ======
translate R Play {Play}
# ====== TODO To be translated ======
translate R Noblunder {No blunder}
# ====== TODO To be translated ======
translate R blunder {blunder}
# ====== TODO To be translated ======
translate R Noinfo {-- No info --}
# ====== TODO To be translated ======
translate R PhalanxOrTogaMissing {Phalanx or Toga not found}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate R moveblunderthreshold {move is a blunder if loss is greater than}
# ====== TODO To be translated ======
translate R limitanalysis {limit engine analysis time}
# ====== TODO To be translated ======
translate R seconds {seconds}
# ====== TODO To be translated ======
translate R Abort {Abort}
# ====== TODO To be translated ======
translate R Resume {Resume}
# ====== TODO To be translated ======
translate R OutOfOpening {Out of opening}
# ====== TODO To be translated ======
translate R NotFollowedLine {You did not follow the line}
# ====== TODO To be translated ======
translate R DoYouWantContinue {Do you want yo continue ?}
# ====== TODO To be translated ======
translate R CoachIsWatching {Coach is watching}
# ====== TODO To be translated ======
translate R Ponder {Permanent thinking}
# ====== TODO To be translated ======
translate R LimitELO {Limit ELO strength}
# ====== TODO To be translated ======
translate R DubiousMovePlayedTakeBack {Dubious move played, do you want to take back ?}
# ====== TODO To be translated ======
translate R WeakMovePlayedTakeBack {Weak move played, do you want to take back ?}
# ====== TODO To be translated ======
translate R BadMovePlayedTakeBack {Bad move played, do you want to take back ?}
# ====== TODO To be translated ======
translate R Iresign {I resign}
# ====== TODO To be translated ======
translate R yourmoveisnotgood {your move is not good}
# ====== TODO To be translated ======
translate R EndOfVar {End of variation}
# ====== TODO To be translated ======
translate R Openingtrainer {Opening trainer}
# ====== TODO To be translated ======
translate R DisplayCM {Display candidate moves}
# ====== TODO To be translated ======
translate R DisplayCMValue {Display candidate moves value}
# ====== TODO To be translated ======
translate R DisplayOpeningStats {Show statistics}
# ====== TODO To be translated ======
translate R ShowReport {Show report}
# ====== TODO To be translated ======
translate R NumberOfGoodMovesPlayed {good moves played}
# ====== TODO To be translated ======
translate R NumberOfDubiousMovesPlayed {dubious moves played}
# ====== TODO To be translated ======
translate R NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
# ====== TODO To be translated ======
translate R NumberOfTimesPositionEncountered {times position encountered}
# ====== TODO To be translated ======
translate R PlayerBestMove  {Allow only best moves}
# ====== TODO To be translated ======
translate R OpponentBestMove {Opponent plays best moves}
# ====== TODO To be translated ======
translate R OnlyFlaggedLines {Only flagged lines}
# ====== TODO To be translated ======
translate R resetStats {Reset statistics}
# ====== TODO To be translated ======
translate R Repertoiretrainingconfiguration {Repertoire training configuration}
# ====== TODO To be translated ======
translate R Loadingrepertoire {Loading repertoire}
# ====== TODO To be translated ======
translate R Movesloaded {Moves loaded}
# ====== TODO To be translated ======
translate R Repertoirenotfound {Repertoire not found}
# ====== TODO To be translated ======
translate R Openfirstrepertoirewithtype {Open first a repertoire database with icon/type set to the right side}
# ====== TODO To be translated ======
translate R Movenotinrepertoire {Move not in repertoire}
# ====== TODO To be translated ======
translate R PositionsInRepertoire {Positions in repertoire}
# ====== TODO To be translated ======
translate R PositionsNotPlayed {Positions not played}
# ====== TODO To be translated ======
translate R PositionsPlayed {Positions played}
# ====== TODO To be translated ======
translate R Success {Success}
# ====== TODO To be translated ======
translate R DubiousMoves {Dubious moves}
# ====== TODO To be translated ======
translate R OutOfRepertoire {OutOfRepertoire}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate R ConfigureTactics {Configure tactics}
# ====== TODO To be translated ======
translate R ResetScores {Reset scores}
# ====== TODO To be translated ======
translate R LoadingBase {Loading base}
# ====== TODO To be translated ======
translate R Tactics {Tactics}
# ====== TODO To be translated ======
translate R ShowSolution {Show solution}
# ====== TODO To be translated ======
translate R NextExercise {Next exercise}
# ====== TODO To be translated ======
translate R PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate R StopTraining {Stop training}
# ====== TODO To be translated ======
translate R Next {Next}
# ====== TODO To be translated ======
translate R ResettingScore {Resetting score}
# ====== TODO To be translated ======
translate R LoadingGame {Loading game}
# ====== TODO To be translated ======
translate R MateFound {Mate found}
# ====== TODO To be translated ======
translate R BestSolutionNotFound {Best solution NOT found !}
# ====== TODO To be translated ======
translate R MateNotFound {Mate not found}
# ====== TODO To be translated ======
translate R ShorterMateExists {Shorter mate exists}
# ====== TODO To be translated ======
translate R ScorePlayed {Score played}
# ====== TODO To be translated ======
translate R Expected {expected}
# ====== TODO To be translated ======
translate R ChooseTrainingBase {Choose training base}
# ====== TODO To be translated ======
translate R Thinking {Thinking}
# ====== TODO To be translated ======
translate R AnalyzeDone {Analyze done}
# ====== TODO To be translated ======
translate R WinWonGame {Win won game}
# ====== TODO To be translated ======
translate R Lines {Lines}
# ====== TODO To be translated ======
translate R ConfigureUCIengine {Configure UCI engine}
# ====== TODO To be translated ======
translate R SpecificOpening {Specific opening}
# ====== TODO To be translated ======
translate R StartNewGame {Start new game}
# ====== TODO To be translated ======
translate R FixedLevel {Fixed level}
# ====== TODO To be translated ======
translate R Opening {Opening}
# ====== TODO To be translated ======
translate R RandomLevel {Random level}
# ====== TODO To be translated ======
translate R StartFromCurrentPosition {Start from current position}
# ====== TODO To be translated ======
translate R FixedDepth {Fixed depth}
# ====== TODO To be translated ======
translate R Nodes {Nodes} 
# ====== TODO To be translated ======
translate R Depth {Depth}
# ====== TODO To be translated ======
translate R Time {Time} 
# ====== TODO To be translated ======
translate R SecondsPerMove {Seconds per move}
# ====== TODO To be translated ======
translate R Engine {Engine}
# ====== TODO To be translated ======
translate R TimeMode {Time mode}
# ====== TODO To be translated ======
translate R TimeBonus {Time + bonus}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate R TimeMin {min}
# ====== TODO To be translated ======
translate R TimeSec {sec}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate R AllExercisesDone {All exercises done}
# ====== TODO To be translated ======
translate R MoveOutOfBook {Move out of book}
# ====== TODO To be translated ======
translate R LastBookMove {Last book move}
# ====== TODO To be translated ======
translate R AnnotateSeveralGames {Annotate several games\nfrom current to :}
# ====== TODO To be translated ======
translate R FindOpeningErrors {Find opening errors}
# ====== TODO To be translated ======
translate R MarkTacticalExercises {Mark tactical exercises}
# ====== TODO To be translated ======
translate R UseBook {Use book}
# ====== TODO To be translated ======
translate R MultiPV {Multiple variations}
# ====== TODO To be translated ======
translate R Hash {Hash memory}
# ====== TODO To be translated ======
translate R OwnBook {Use engine book}
# ====== TODO To be translated ======
translate R BookFile {Opening book}
# ====== TODO To be translated ======
translate R AnnotateVariations {Annotate variations}
# ====== TODO To be translated ======
translate R ShortAnnotations {Short annotations}
# ====== TODO To be translated ======
translate R addAnnotatorTag {Add annotator tag}
# ====== TODO To be translated ======
translate R AddScoreToShortAnnotations {Add score to short annotations}
# ====== TODO To be translated ======
translate R Export {Export}
# ====== TODO To be translated ======
translate R BookPartiallyLoaded {Book partially loaded}
# ====== TODO To be translated ======
translate R Calvar {Calculation of variations}
# ====== TODO To be translated ======
translate R ConfigureCalvar {Configuration}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate R Reti {Reti}
# ====== TODO To be translated ======
translate R English {English}
# ====== TODO To be translated ======
translate R d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
# ====== TODO To be translated ======
translate R Trompowsky {Trompowsky}
# ====== TODO To be translated ======
translate R Budapest {Budapest}
# ====== TODO To be translated ======
translate R OldIndian {Old Indian}
# ====== TODO To be translated ======
translate R BenkoGambit {Benko Gambit}
# ====== TODO To be translated ======
translate R ModernBenoni {Modern Benoni}
# ====== TODO To be translated ======
translate R DutchDefence {Dutch Defence}
# ====== TODO To be translated ======
translate R Scandinavian {Scandinavian}
# ====== TODO To be translated ======
translate R AlekhineDefence {Alekhine Defence}
# ====== TODO To be translated ======
translate R Pirc {Pirc}
# ====== TODO To be translated ======
translate R CaroKann {Caro-Kann}
# ====== TODO To be translated ======
translate R CaroKannAdvance {Caro-Kann Advance}
# ====== TODO To be translated ======
translate R Sicilian {Sicilian}
# ====== TODO To be translated ======
translate R SicilianAlapin {Sicilian Alapin}
# ====== TODO To be translated ======
translate R SicilianClosed {Sicilian Closed}
# ====== TODO To be translated ======
translate R SicilianRauzer {Sicilian Rauzer}
# ====== TODO To be translated ======
translate R SicilianDragon {Sicilian Dragon}
# ====== TODO To be translated ======
translate R SicilianScheveningen {Sicilian Scheveningen}
# ====== TODO To be translated ======
translate R SicilianNajdorf {Sicilian Najdorf}
# ====== TODO To be translated ======
translate R OpenGame {Open Game}
# ====== TODO To be translated ======
translate R Vienna {Vienna}
# ====== TODO To be translated ======
translate R KingsGambit {King's Gambit}
# ====== TODO To be translated ======
translate R RussianGame {Russian Game}
# ====== TODO To be translated ======
translate R ItalianTwoKnights {Italian/Two Knights}
# ====== TODO To be translated ======
translate R Spanish {Spanish}
# ====== TODO To be translated ======
translate R SpanishExchange {Spanish Exchange}
# ====== TODO To be translated ======
translate R SpanishOpen {Spanish Open}
# ====== TODO To be translated ======
translate R SpanishClosed {Spanish Closed}
# ====== TODO To be translated ======
translate R FrenchDefence {French Defence}
# ====== TODO To be translated ======
translate R FrenchAdvance {French Advance}
# ====== TODO To be translated ======
translate R FrenchTarrasch {French Tarrasch}
# ====== TODO To be translated ======
translate R FrenchWinawer {French Winawer}
# ====== TODO To be translated ======
translate R FrenchExchange {French Exchange}
# ====== TODO To be translated ======
translate R QueensPawn {Queen's Pawn}
# ====== TODO To be translated ======
translate R Slav {Slav}
# ====== TODO To be translated ======
translate R QGA {QGA}
# ====== TODO To be translated ======
translate R QGD {QGD}
# ====== TODO To be translated ======
translate R QGDExchange {QGD Exchange}
# ====== TODO To be translated ======
translate R SemiSlav {Semi-Slav}
# ====== TODO To be translated ======
translate R QGDwithBg5 {QGD with Bg5}
# ====== TODO To be translated ======
translate R QGDOrthodox {QGD Orthodox}
# ====== TODO To be translated ======
translate R Grunfeld {Gr?nfeld}
# ====== TODO To be translated ======
translate R GrunfeldExchange {Gr?nfeld Exchange}
# ====== TODO To be translated ======
translate R GrunfeldRussian {Gr?nfeld Russian}
# ====== TODO To be translated ======
translate R Catalan {Catalan}
# ====== TODO To be translated ======
translate R CatalanOpen {Catalan Open}
# ====== TODO To be translated ======
translate R CatalanClosed {Catalan Closed}
# ====== TODO To be translated ======
translate R QueensIndian {Queen's Indian}
# ====== TODO To be translated ======
translate R NimzoIndian {Nimzo-Indian}
# ====== TODO To be translated ======
translate R NimzoIndianClassical {Nimzo-Indian Classical}
# ====== TODO To be translated ======
translate R NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
# ====== TODO To be translated ======
translate R KingsIndian {King's Indian}
# ====== TODO To be translated ======
translate R KingsIndianSamisch {King's Indian S?misch}
# ====== TODO To be translated ======
translate R KingsIndianMainLine {King's Indian Main Line}
# ====== TODO To be translated ======
translate R ConfigureFics {Configure FICS}
# ====== TODO To be translated ======
translate R FICSGuest {Login as Guest}
# ====== TODO To be translated ======
translate R FICSServerPort {Server port}
# ====== TODO To be translated ======
translate R FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate R FICSRefresh {Refresh}
# ====== TODO To be translated ======
translate R FICSTimesealPort {Timeseal port}
# ====== TODO To be translated ======
translate R FICSSilence {Silence}
# ====== TODO To be translated ======
translate R FICSOffers {Offers}
# ====== TODO To be translated ======
translate R FICSConsole {Console}
# ====== TODO To be translated ======
translate R FICSGames {Games}
# ====== TODO To be translated ======
translate R FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate R FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate R FICSRelayedGames {Relayed games}
# ====== TODO To be translated ======
translate R FICSFindOpponent {Find opponent}
# ====== TODO To be translated ======
translate R FICSTakeback {Takeback}
# ====== TODO To be translated ======
translate R FICSTakeback2 {Takeback 2}
# ====== TODO To be translated ======
translate R FICSInitTime {Initial time (min)}
# ====== TODO To be translated ======
translate R FICSIncrement {Increment (sec)}
# ====== TODO To be translated ======
translate R FICSRatedGame {Rated Game}
# ====== TODO To be translated ======
translate R FICSAutoColour {automatic}
# ====== TODO To be translated ======
translate R FICSManualConfirm {confirm manually}
# ====== TODO To be translated ======
translate R FICSFilterFormula {Filter with formula}
# ====== TODO To be translated ======
translate R FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate R FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate R FICSAccept {accept}
# ====== TODO To be translated ======
translate R FICSDecline {decline}
# ====== TODO To be translated ======
translate R FICSColour {Colour}
# ====== TODO To be translated ======
translate R FICSSend {send}
# ====== TODO To be translated ======
translate R FICSConnect {Connect}
# ====== TODO To be translated ======
translate R FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate R FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate R FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate R GameReview {Game review}
# ====== TODO To be translated ======
translate R GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate R GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate R GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate R GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate R GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate R GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate R GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate R GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate R GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate R GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate R GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate R GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate R GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate R GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate R GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate R GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate R GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate R GameReviewMovesPlayedEngine {Moves played like engine}
# ====== TODO To be translated ======
translate R CCDlgConfigureWindowTitle {Configure Correspondence Chess}
# ====== TODO To be translated ======
translate R CCDlgCGeneraloptions {General Options}
# ====== TODO To be translated ======
translate R CCDlgDefaultDB {Default Database:}
# ====== TODO To be translated ======
translate R CCDlgInbox {Inbox (path):}
# ====== TODO To be translated ======
translate R CCDlgOutbox {Outbox (path):}
# ====== TODO To be translated ======
translate R CCDlgXfcc {Xfcc Configuration:}
# ====== TODO To be translated ======
translate R CCDlgExternalProtocol {External Protocol Handler (e.g. Xfcc)}
# ====== TODO To be translated ======
translate R CCDlgFetchTool {Fetch Tool:}
# ====== TODO To be translated ======
translate R CCDlgSendTool {Send Tool:}
# ====== TODO To be translated ======
translate R CCDlgEmailCommunication {eMail Communication}
# ====== TODO To be translated ======
translate R CCDlgMailPrg {Mail program:}
# ====== TODO To be translated ======
translate R CCDlgBCCAddr {(B)CC Address:}
# ====== TODO To be translated ======
translate R CCDlgMailerMode {Mode:}
# ====== TODO To be translated ======
translate R CCDlgThunderbirdEg {e.g. Thunderbird, Mozilla Mail, Icedove...}
# ====== TODO To be translated ======
translate R CCDlgMailUrlEg {e.g. Evolution}
# ====== TODO To be translated ======
translate R CCDlgClawsEg {e.g Sylpheed Claws}
# ====== TODO To be translated ======
translate R CCDlgmailxEg {e.g. mailx, mutt, nail...}
# ====== TODO To be translated ======
translate R CCDlgAttachementPar {Attachment parameter:}
# ====== TODO To be translated ======
translate R CCDlgInternalXfcc {Use internal Xfcc support}
# ====== TODO To be translated ======
translate R CCDlgConfirmXfcc {Confirm moves}
# ====== TODO To be translated ======
translate R CCDlgSubjectPar {Subject parameter:}
# ====== TODO To be translated ======
translate R CCDlgDeleteBoxes {Empty In-/Outbox}
# ====== TODO To be translated ======
translate R CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess? This requires a new sync to show the last state of your games}
# ====== TODO To be translated ======
translate R CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate R CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate R CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate R CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
# ====== TODO To be translated ======
translate R CCDlgStartEmail {Start new eMail game}
# ====== TODO To be translated ======
translate R CCDlgYourName {Your Name:}
# ====== TODO To be translated ======
translate R CCDlgYourMail {Your eMail Address:}
# ====== TODO To be translated ======
translate R CCDlgOpponentName {Opponents Name:}
# ====== TODO To be translated ======
translate R CCDlgOpponentMail {Opponents eMail Address:}
# ====== TODO To be translated ======
translate R CCDlgGameID {Game ID (unique):}
# ====== TODO To be translated ======
translate R CCDlgTitNoOutbox {Scid: Correspondence Chess Outbox}
# ====== TODO To be translated ======
translate R CCDlgTitNoInbox {Scid: Correspondence Chess Inbox}
# ====== TODO To be translated ======
translate R CCDlgTitNoGames {Scid: No Correspondence Chess Games}
# ====== TODO To be translated ======
translate R CCErrInboxDir {Correspondence Chess inbox directory:}
# ====== TODO To be translated ======
translate R CCErrOutboxDir {Correspondence Chess outbox directory:}
# ====== TODO To be translated ======
translate R CCErrDirNotUsable {does not exist or is not accessible!\nPlease check and correct the settings.}
# ====== TODO To be translated ======
translate R CCErrNoGames {does not contain any games!\nPlease fetch them first.}
# ====== TODO To be translated ======
translate R CCDlgTitNoCCDB {Scid: No Correspondence Database}
# ====== TODO To be translated ======
translate R CCErrNoCCDB {No Database of type 'Correspondence' is opened. Please open one before using correspondence chess functions.}
# ====== TODO To be translated ======
translate R CCFetchBtn {Fetch games from the server and process the Inbox}
# ====== TODO To be translated ======
translate R CCPrevBtn {Goto previous game}
# ====== TODO To be translated ======
translate R CCNextBtn {Goto next game}
# ====== TODO To be translated ======
translate R CCSendBtn {Send move}
# ====== TODO To be translated ======
translate R CCEmptyBtn {Empty In- and Outbox}
# ====== TODO To be translated ======
translate R CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}
# ====== TODO To be translated ======
translate R CCDlgServerName {Server Name:}
# ====== TODO To be translated ======
translate R CCDlgLoginName  {Login Name:}
# ====== TODO To be translated ======
translate R CCDlgPassword   {Password:}
# ====== TODO To be translated ======
translate R CCDlgURL        {Xfcc-URL:}
# ====== TODO To be translated ======
translate R CCDlgRatingType {Rating Type:}
# ====== TODO To be translated ======
translate R CCDlgDuplicateGame {Non-unique game ID}
# ====== TODO To be translated ======
translate R CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
# ====== TODO To be translated ======
translate R CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate R CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate R CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate R CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate R CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate R CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate R CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate R CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate R CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
# ====== TODO To be translated ======
translate R ExtHWConfigConnection {Configure external hardware}
# ====== TODO To be translated ======
translate R ExtHWPort {Port}
# ====== TODO To be translated ======
translate R ExtHWEngineCmd {Engine command}
# ====== TODO To be translated ======
translate R ExtHWEngineParam {Engine parameter}
# ====== TODO To be translated ======
translate R ExtHWShowButton {Show button}
# ====== TODO To be translated ======
translate R ExtHWHardware {Hardware}
# ====== TODO To be translated ======
translate R ExtHWNovag {Novag Citrine}
# ====== TODO To be translated ======
translate R ExtHWInputEngine {Input Engine}
# ====== TODO To be translated ======
translate R ExtHWNoBoard {No board}
# ====== TODO To be translated ======
translate R NovagReferee {Referee}
# ====== TODO To be translated ======
translate R IEConsole {Input Engine Console}
# ====== TODO To be translated ======
translate R IESending {Moves sent for}
# ====== TODO To be translated ======
translate R IESynchronise {Synchronise}
# ====== TODO To be translated ======
translate R IERotate  {Rotate}
# ====== TODO To be translated ======
translate R IEUnableToStart {Unable to start Input Engine:}
# ====== TODO To be translated ======
translate R DoneWithPosition {Done with position}
# ====== TODO To be translated ======
translate R Board {Board}
# ====== TODO To be translated ======
translate R showGameInfo {Show game info}
# ====== TODO To be translated ======
translate R autoResizeBoard {Automatic resize of board}
# ====== TODO To be translated ======
translate R DockTop {Move to top}
# ====== TODO To be translated ======
translate R DockBottom {Move to bottom}
# ====== TODO To be translated ======
translate R DockLeft {Move to left}
# ====== TODO To be translated ======
translate R DockRight {Move to right}
# ====== TODO To be translated ======
translate R Undock {Undock}
# ====== TODO To be translated ======
translate R ChangeIcon {Change icon...}
# ====== TODO To be translated ======
}
# end of russian.tcl
### serbian.tcl:
# Serbian menus for Scid.
# Contributed by Milos Pejovic.

addLanguage Y Serbian 2 iso8859-2

proc setLanguage_Y {} {

# File menu:
menuText Y File "Fajl" 0
menuText Y FileNew "Novi..." 0 {Kreiraj novu Scid bazu podataka}
menuText Y FileOpen "Otvori..." 0 {Otvori postojeu Scid bazu podataka}
menuText Y FileClose "Zatvori" 0 {Zatvori aktivnu Scid bazu podataka}
menuText Y FileFinder "Traga" 0 {Pokreni Fajl Traga}
menuText Y FileBookmarks "Markeri" 0 {Meni sa markerima (preica: Ctrl+B)}
menuText Y FileBookmarksAdd "Dodaj u markere" 0 \
  {Dodaj u markere tekuu partiju iz baze i poziciju}
menuText Y FileBookmarksFile "Arhiviraj marker" 0 \
  {Arhiviraj marker za tekuu partiju i poziciju}
menuText Y FileBookmarksEdit "Izmeni markere..." 0 \
  {Izmeni menije markera}
menuText Y FileBookmarksList "Prikai foldere kao jedinstvenu listu" 0 \
  {Prikai foldere markera kao jedinstvenu listu, bez podmenija}
menuText Y FileBookmarksSub "Prikai foldere kao podmenije" 0 \
  {Prikai foldere markera kao podmenije, ne jedinstvenu listu}
menuText Y FileMaint "Odravanje" 0 {Alati za odravanje Scid baze podataka}
menuText Y FileMaintWin "Prozor odravanja" 0 \
  {Otvori/zatvori prozor odravanja Scid baze podataka}
menuText Y FileMaintCompact "Komprimuj bazu..." 0 \
  {Uini fajlove baze kompaktnijim, uklanjajui obrisane partije i nekoriena imena}
menuText Y FileMaintClass "EO-Klasifikacija partija..." 2 \
  {Klasifikacija svih partija po otvaranju}
menuText Y FileMaintSort "Sortiraj bazu..." 0 \
  {Sortiraj sve partije u bazi podataka}
menuText Y FileMaintDelete "Izbrii udvojene partije..." 0 \
  {Nai udvojene partije i oznai ih za brisanje}
menuText Y FileMaintTwin "Provera udvojenih partija" 0 \
  {Otvori/osvei prozor za proveru udvojenih partija}
menuText Y FileMaintName "Imena" 0 {Promena imena i kontrola pravopisa}
menuText Y FileMaintNameEditor "Editor imena" 0 \
  {Otvori/zatvori editor imena}
menuText Y FileMaintNamePlayer "Provera pravopisa imena igraa..." 11 \
  {Provera pravopisa imena igraa pomou spellcheck fajla}
menuText Y FileMaintNameEvent "Provera pravopisa imena turnira..." 11 \
  {Provera pravopisa imena turnira pomou spellcheck fajla}
menuText Y FileMaintNameSite "Provera pravopisa imena mesta..." 11 \
  {Provera pravopisa imena mesta pomou spellcheck fajla}
menuText Y FileMaintNameRound "Provera pravopisa kola..." 11 \
  {Provera pravopisa kola pomou spellcheck fajla}
menuText Y FileReadOnly "Read-only..." 0 \
  {Sprei izmene u tekuoj bazi}
menuText Y FileSwitch "Switch to database" 0 \
  {Switch to a different opened database} ;# ***
menuText Y FileExit "Izai" 1 {Izlazak iz Scid-a}
# ====== TODO To be translated ======
menuText Y FileMaintFixBase "Fix corrupted base" 0 {Try to fix a corrupted base}

# Edit menu:
menuText Y Edit "Izmene" 0
menuText Y EditAdd "Dodaj varijantu" 0 {Dodaj varijantu potezu u partiji}
menuText Y EditDelete "Obrii varijantu" 0 {Obrii varijantu za ovaj potez}
menuText Y EditFirst "Postavi prvu varijantu" 5 \
  {Postavi varijantu kao prvu u listi}
menuText Y EditMain "Postavi varijantu na glavnu liniju" 21 \
  {Postavi varijantu na glavnu liniju}
menuText Y EditTrial "Probaj varijantu" 0 \
  {Pokreni/zaustavi mod za testiranje ideje na tabli}
menuText Y EditStrip "Ukloni" 2 {Ukloni komentare ili varijante iz ove partije}
# ====== TODO To be translated ======
menuText Y EditUndo "Undo" 0 {Undo last game change}
# ====== TODO To be translated ======
menuText Y EditRedo "Redo" 0 {Redo last game change}
menuText Y EditStripComments "Komentare" 0 \
  {Ukloni sve komentare i napomene iz ove partije}
menuText Y EditStripVars "Varijante" 0 {Ukloni sve varijante iz ove partije}
menuText Y EditStripBegin "Moves from the beginning" 1 \
  {Strip moves from the beginning of the game} ;# ***
menuText Y EditStripEnd "Moves to the end" 0 \
  {Strip moves to the end of the game} ;# ***
menuText Y EditReset "Isprazni Clipbase" 0 \
  {Resetuje clipbase da bude potpuno prazan}
menuText Y EditCopy "Kopiraj ovu partiju na Clipbase" 0 \
  {Kopiraj ovu partiju na clipbase partija}
menuText Y EditPaste "Prenesi poslednju clipbase partiju" 0 \
  {Prenesi aktivnu clipbase partiju ovde}
menuText Y EditPastePGN "Paste Clipboard text as PGN game..." 10 \
  {Interpret the clipboard text as a game in PGN notation and paste it here} ;# ***
menuText Y EditSetup "Namesti poetnu poziciju..." 0 \
  {Namesti poetnu poziciju za ovu partiju}
menuText Y EditCopyBoard "Copy position" 6 \
  {Copy the current board in FEN notation to the text selection (klipbord)} ;# ***
menuText Y EditPasteBoard "Prenesi poetnu poziciju" 9 \
  {Postavi poetnu poziciju na osnovu trenutno izabranog teksta (klipbord)}

# Game menu:
menuText Y Game "Partija" 0
menuText Y GameNew "Nova partija" 0 \
  {Pokreni novu partiju, sa gubljenjem svih izmena}
menuText Y GameFirst "Uitaj prvu partiju" 5 {Uitaj prvu filtriranu partiju}
menuText Y GamePrev "Uitaj prethodnu partiju" 5 {Uitaj prethodnu filtriranu partiju}
menuText Y GameReload "Osvei trenutnu partiju" 3 \
  {Osvei ovu partiju, sa gubljenjem svih izmena}
menuText Y GameNext "Uitaj sledeu partiju" 5 {Uitaj sledeu filtriranu partiju}
menuText Y GameLast "Uitaj poslednju partiju" 8 {Uitaj poslednju filtriranu partiju}
menuText Y GameRandom "Load Random Game" 8 {Load a random filtered game} ;# ***
menuText Y GameNumber "Uitaj partiju broj..." 5 \
  {Uitaj partiju, unosei njen broj}
menuText Y GameReplace "Sauvaj: Zameni partiju..." 6 \
  {Sauvaj ovu partiju preko stare partiju u bazi}
menuText Y GameAdd "Sauvaj: Dodaj novu partiju..." 6 \
  {Sauvaj ovu partiju kao novu u bazi}
menuText Y GameDeepest "Identifikuj otvaranje" 0 \
  {Idi na poslednju poziciju partije koja odgovara knjizi otvaranja}
menuText Y GameGotoMove "Idi na potez broj..." 5 \
  {Idi na odreeni broj potez u tekuoj partiji}
menuText Y GameNovelty "Pronai novost..." 8 \
  {Pronai prvi potez ove partije koji nije igran ranije}

# Search Menu:
menuText Y Search "Pretrai" 3
menuText Y SearchReset "Resetuj filter" 0 {Resetuj filter da bi sve partije bile ukljuene}
menuText Y SearchNegate "Invertuj filter" 0 {Invertuj filter da ukljui samo iskljuene partije}
menuText Y SearchCurrent "Tekua pozicija..." 0 {Pretrauj prema tekuoj poziciji na tabli}
menuText Y SearchHeader "Zaglavlje..." 0 {Pretrauj prema informacijama iz zaglavlja (igra, turnir, itd)}
menuText Y SearchMaterial "Materijal/Pozicije..." 0 {Pretrauj prema materijalu i poziciji}
menuText Y SearchUsing "Pomou Search fajla..." 0 {Pretrauj pomou Search fajla}

# Windows menu:
menuText Y Windows "Prozori" 1
menuText Y WindowsComment "Editor komentara" 0 {Otvori/zatvori editor komentara}
menuText Y WindowsGList "Lista partija" 0 {Otvori/zatvori listu partija}
menuText Y WindowsPGN "PGN prozor" 0 \
  {Otvori/zatvori PGN prozor (sa podacima o partiji)}
menuText Y WindowsPList "Player Finder" 2 {Open/close the player finder} ;# ***
menuText Y WindowsTmt "Turnir traga" 2 {Otvori/zatvori turnir traga}
menuText Y WindowsSwitcher "Bira baza" 0 \
  {Otvori/zatvori bira baza}
menuText Y WindowsMaint "Prozor odravanja" 0 \
  {Otvori/zatvori prozor odravanja}
menuText Y WindowsECO "EO prikaziva" 0 {Otvori/zatvori EO prikaziva}
menuText Y WindowsRepertoire "Editor repertoara otvaranja" 0 \
  {Otvori/zatvori editor repertoara otvaranja}
menuText Y WindowsStats "Statistiki prozor" 0 \
  {Otvori/zatvori prozor statistika filtera}
menuText Y WindowsTree "Stablo varijanata" 0 {Otvori/zatvori stablo varijanata}
menuText Y WindowsTB "Tabela zavrnica" 1 \
  {Otvori/zatvori tabelu zavrnica}
# ====== TODO To be translated ======
menuText Y WindowsBook "Book Window" 0 {Open/close the Book window}
# ====== TODO To be translated ======
menuText Y WindowsCorrChess "Correspondence Window" 0 {Open/close the Correspondence window}

# Tools menu:
menuText Y Tools "Alati" 0
menuText Y ToolsAnalysis "Program za analizu..." 0 \
  {Pokreni/zaustavi ahovski program za analizu}
menuText Y ToolsAnalysis2 "Program za analizu #2..." 17 \
  {Pokreni/zaustavi drugi ahovski program za analizu}
menuText Y ToolsCross "Tabela turnira" 0 {Pokai tabelu turnira za ovu partiju}
menuText Y ToolsEmail "Email menader" 0 \
  {Otvori/zatvori menader za korespodentske partije preko email-a}
menuText Y ToolsFilterGraph "Filter graph" 7 \
  {Open/close the filter graph window} ;# ***
# ====== TODO To be translated ======
menuText Y ToolsAbsFilterGraph "Abs. Filter Graph" 7 {Open/close the filter graph window for absolute values}
menuText Y ToolsOpReport "Izvetaj o otvaranjima" 0 \
  {Napravi izvetaj o otvaranjima za trenutnu poziciju}
# ====== TODO To be translated ======
menuText Y ToolsOpenBaseAsTree "Open base as tree" 0   {Open a base and use it in Tree window}
# ====== TODO To be translated ======
menuText Y ToolsOpenRecentBaseAsTree "Open recent base as tree" 0   {Open a recent base and use it in Tree window}
menuText Y ToolsTracker "Piece Tracker"  0 {Open the Piece Tracker window} ;# ***
# ====== TODO To be translated ======
menuText Y ToolsTraining "Training"  0 {Training tools (tactics, openings,...) }
# ====== TODO To be translated ======
menuText Y ToolsTacticalGame "Tactical game"  0 {Play a game with tactics}
# ====== TODO To be translated ======
menuText Y ToolsSeriousGame "Serious game"  0 {Play a serious game}
# ====== TODO To be translated ======
menuText Y ToolsTrainOpenings "Openings"  0 {Train with a repertoire}
# ====== TODO To be translated ======
menuText Y ToolsTrainReviewGame "Review game"  0 {Guess moves played in a game}
# ====== TODO To be translated ======
menuText Y ToolsTrainTactics "Tactics"  0 {Solve tactics}
# ====== TODO To be translated ======
menuText Y ToolsTrainCalvar "Calculation of variations"  0 {Calculation of variations training}
# ====== TODO To be translated ======
menuText Y ToolsTrainFindBestMove "Find best move"  0 {Find best move}
# ====== TODO To be translated ======
menuText Y ToolsTrainFics "Play on internet"  0 {Play on freechess.org}
# ====== TODO To be translated ======
menuText Y ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
# ====== TODO To be translated ======
menuText Y ToolsBookTuning "Book tuning" 0 {Book tuning}
# ====== TODO To be translated ======
menuText Y ToolsConnectHardware "Connect Hardware" 0 {Connect external hardware}
# ====== TODO To be translated ======
menuText Y ToolsConnectHardwareConfigure "Configure..." 0 {Configure external hardware and connection}
# ====== TODO To be translated ======
menuText Y ToolsConnectHardwareNovagCitrineConnect "Connect Novag Citrine" 0 {Connect Novag Citrine}
# ====== TODO To be translated ======
menuText Y ToolsConnectHardwareInputEngineConnect "Connect Input Engine" 0 {Connect Input Engine (e.g. DGT)}
menuText Y ToolsPInfo "Informacije o igrau"  0 \
  {Otvori/osvei informacije o igrau}
menuText Y ToolsPlayerReport "Player Report..." 3 \
  {Generate a player report} ;# ***
menuText Y ToolsRating "Grafikon rejtinga" 0 \
  {Iscrtava grafik istorije rejtinga igraa u tekuoj partiji}
menuText Y ToolsScore "Grafikon skora" 0 {Prikai grafikon skora}
menuText Y ToolsExpCurrent "Izvezi tekuu partiju" 8 \
  {Snimi tekuu partiju u tekstualni fajl}
menuText Y ToolsExpCurrentPGN "Izvezi partiju u PGN fajl..." 17 \
  {Snimi tekuu partiju u PGN fajl}
menuText Y ToolsExpCurrentHTML "Izvezi partiju u HTML fajl..." 17 \
  {Snimi tekuu partiju u HTML fajl}
# ====== TODO To be translated ======
menuText Y ToolsExpCurrentHTMLJS "Export Game to HTML and JavaScript File..." 15 {Write current game to a HTML and JavaScript file}  
menuText Y ToolsExpCurrentLaTeX "Izvezi partiju u LaTeX fajl..." 17 \
  {Snimi tekuu partiju u LaTeX fajl}
menuText Y ToolsExpFilter "Izvezi sve filtrirane partije" 1 \
  {Snimi sve filtrirane partije u tekstualni fajl}
menuText Y ToolsExpFilterPGN "Izvezi filtrirane partije u PGN fajl..." 28 \
  {Snimi sve filtrirane partije u PGN fajl}
menuText Y ToolsExpFilterHTML "Izvezi filtrirane partije u HTML fajl..." 28 \
  {Snimi sve filtrirane partije u HTML fajl}
# ====== TODO To be translated ======
menuText Y ToolsExpFilterHTMLJS "Export Filter to HTML and JavaScript File..." 17 {Write all filtered games to a HTML and JavaScript file}  
menuText Y ToolsExpFilterLaTeX "Izvezi filtrirane partije u LaTeX fajl..." 28 \
  {Snimi sve filtrirane partije u LaTeX fajl}
menuText Y ToolsImportOne "Uvezi jednu PGN partiju..." 0 \
  {Uvezi jednu partiju iz PGN fajla}
menuText Y ToolsImportFile "Uvezi vie PGN partija..." 6 \
  {Uvezi vie partija iz PGN fajla}
# ====== TODO To be translated ======
menuText Y ToolsStartEngine1 "Start engine 1" 0  {Start engine 1}
# ====== TODO To be translated ======
menuText Y ToolsStartEngine2 "Start engine 2" 0  {Start engine 2}
# ====== TODO To be translated ======
menuText Y ToolsCaptureBoard "Capture Current Board..." 0  {Save the current board as an image.}
# ====== TODO To be translated ======
menuText Y Play "Play" 0
# ====== TODO To be translated ======
menuText Y CorrespondenceChess "Correspondence Chess" 0 {Functions for eMail and Xfcc based correspondence chess}
# ====== TODO To be translated ======
menuText Y CCConfigure "Configure..." 0 {Configure external tools and general setup}
# ====== TODO To be translated ======
menuText Y CCConfigRelay "Configure observations..." 10 {Configure games to be observed}
# ====== TODO To be translated ======
menuText Y CCOpenDB "Open Database..." 0 {Open the default Correspondence database}
# ====== TODO To be translated ======
menuText Y CCRetrieve "Retrieve Games" 0 {Retrieve games via external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText Y CCInbox "Process Inobx" 0 {Process all files in scids Inbox}
# ====== TODO To be translated ======
menuText Y CCSend "Send Move" 0 {Send your move via eMail or external (Xfcc-)helper}
# ====== TODO To be translated ======
menuText Y CCResign "Resign" 0 {Resign (not via eMail)}
# ====== TODO To be translated ======
menuText Y CCClaimDraw "Claim Draw" 0 {Send move and claim a draw (not via eMail)}
# ====== TODO To be translated ======
menuText Y CCOfferDraw "Offer Draw" 0 {Send move and offer a draw (not via eMail)}
# ====== TODO To be translated ======
menuText Y CCAcceptDraw "Accept Draw" 0 {Accept a draw offer (not via eMail)}
# ====== TODO To be translated ======
menuText Y CCNewMailGame "New eMail Game..." 0 {Start a new eMail game}
# ====== TODO To be translated ======
menuText Y CCMailMove "Mail Move..." 0 {Send the move via eMail to the opponent}
# ====== TODO To be translated ======
menuText Y CCGamePage "Game Page..." 0 {Call up the game via the web browser}
# ====== TODO To be translated ======
menuText Y CCEditCopy "Copy Gamelist to Clipbase" 0 {Copy the games as CSV list to clipbase}

# Options menu:
menuText Y Options "Opcije" 0
menuText Y OptionsBoard "Chessboard" 0 {Chess board appearance options} ;# ***
menuText Y OptionsBoardSize "Veliina table" 0 {Promeni veliinu table}
menuText Y OptionsBoardPieces "Board Piece Style" 6 \
  {Change the board piece style} ;# ***
menuText Y OptionsBoardColors "Boje" 0 {Promeni boje table}
# ====== TODO To be translated ======
menuText Y OptionsBoardGraphics "Squares..." 0 {Select textures for squares}
# ====== TODO To be translated ======
translate Y OptionsBGW {Select texture for squares}
# ====== TODO To be translated ======
translate Y OptionsBoardGraphicsText {Select graphic files for white and black squares:}
menuText Y OptionsBoardNames "My Player Names..." 0 {Edit my player names} ;# ***
menuText Y OptionsExport "Izvoz" 0 {Promeni opcije tekstualnog izvoza}
menuText Y OptionsFonts "Fontovi" 0 {Promeni fontove}
menuText Y OptionsFontsRegular "Obian" 0 {Promeni obian font}
menuText Y OptionsFontsMenu "Menu" 0 {Change the menu font} ;# ***
menuText Y OptionsFontsSmall "Mali" 0 {Promeni mali font}
# ====== TODO To be translated ======
menuText Y OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText Y OptionsFontsFixed "Neproporcionalni" 0 {Promeni neproporcionalni font}
menuText Y OptionsGInfo "Informacije o Partiji" 0 {Opcije informacija o partiji}
menuText Y OptionsLanguage "Jezik" 0 {Izaberi jezik}
# ====== TODO To be translated ======
menuText Y OptionsMovesTranslatePieces "Translate pieces" 0 {Translate first letter of pieces}
# ====== TODO To be translated ======
menuText Y OptionsMovesHighlightLastMove "Highlight last move" 0 {Highlight last move}
# ====== TODO To be translated ======
menuText Y OptionsMovesHighlightLastMoveDisplay "Show" 0 {Display last move Highlight}
# ====== TODO To be translated ======
menuText Y OptionsMovesHighlightLastMoveWidth "Width" 0 {Thickness of line}
# ====== TODO To be translated ======
menuText Y OptionsMovesHighlightLastMoveColor "Color" 0 {Color of line}
# ====== TODO To be translated ======
menuText Y OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText Y OptionsMoves "Potezi" 0 {Opcije unoenja poteza}
menuText Y OptionsMovesAsk "Pitaj pre zamene poteza" 0 \
  {Pitaj, da li se moe postojei zameniti novim potezom}
menuText Y OptionsMovesAnimate "Animation time" 1 \
  {Set the amount of time used to animate moves} ;# ***
menuText Y OptionsMovesDelay "Odlaganje izmeu poteza..." 1 \
  {Podesi vreme odlaganja pri automatskom pregledanju poteza}
menuText Y OptionsMovesCoord "Unoenje koordinata poteza" 0 \
  {Prihvati unoenje poteza pomou koordinata ("g1f3")}
menuText Y OptionsMovesSuggest "Pokai preporuene poteze" 0 \
  {Ukljui/iskljui preporuene poteze}
# ====== TODO To be translated ======
menuText Y OptionsShowVarPopup "Show variations window" 0 {Turn on/off the display of a variations window}  
# ====== TODO To be translated ======
menuText Y OptionsMovesSpace "Add spaces after move number" 0 {Add spaces after move number}  
menuText Y OptionsMovesKey "Dopunjavanje poteza" 0 \
  {Ukljui/iskljui dopunjavanje poteza zadatih tastaturom}
# ====== TODO To be translated ======
menuText Y OptionsMovesShowVarArrows "Show Arrows for Variations" 0 {Turn on/off arrows showing moves in variations}
menuText Y OptionsNumbers "Format brojeva" 0 {Izaberi format brojeva}
menuText Y OptionsStartup "Startup" 3 {Select windows to open at startup} ;# ***
# ====== TODO To be translated ======
menuText Y OptionsTheme "Theme" 0 {Change look of interface}
menuText Y OptionsWindows "Prozori" 0 {Opcije prozora}
menuText Y OptionsWindowsIconify "Auto-iconify" 5 \
  {Iconify all windows when the main window is iconified} ;# ***
menuText Y OptionsWindowsRaise "Auto podizanje" 0 \
  {Podigni odreene prozore kad god su pokriveni}
menuText Y OptionsSounds "Sounds..." 2 {Configure move announcement sounds} ;# ***
# ====== TODO To be translated ======
menuText Y OptionsWindowsDock "Dock windows" 0 {Dock windows}
# ====== TODO To be translated ======
menuText Y OptionsWindowsSaveLayout "Save layout" 0 {Save layout}
# ====== TODO To be translated ======
menuText Y OptionsWindowsRestoreLayout "Restore layout" 0 {Restore layout}
# ====== TODO To be translated ======
menuText Y OptionsWindowsShowGameInfo "Show game info" 0 {Show game info}
# ====== TODO To be translated ======
menuText Y OptionsWindowsAutoLoadLayout "Auto load first layout" 0 {Auto load first layout at startup}
menuText Y OptionsToolbar "Toolbar glavnog prozora" 12 \
  {Prikai/sakrij toolbar glavnog prozora}
menuText Y OptionsECO "Uitaj EO fajl..." 7 {Uitaj EO klasifikacioni fajl}
menuText Y OptionsSpell "Uitaj fajl za kontrolu pravopisa..." 13 \
  {Uitaj fajl za kontrolu pravopisa}
menuText Y OptionsTable "Direktorijum baza zavrnica..." 0 \
  {Izaberi fajl baze zavrnica; sve baze u direktorijumu e biti koriene}
menuText Y OptionsRecent "Recent files..." 0 \
  {Change the number of recent files displayed in the File menu} ;# ***
# ====== TODO To be translated ======
menuText Y OptionsBooksDir "Books directory..." 0 {Sets the opening books directory}
# ====== TODO To be translated ======
menuText Y OptionsTacticsBasesDir "Bases directory..." 0 {Sets the tactics (training) bases directory}
menuText Y OptionsSave "Sauvaj opcije" 0 \
  "Sauvaj sve opcije u fajl $::optionsFile"
menuText Y OptionsAutoSave "Auto-sauvaj opcije na izlasku" 0 \
  {Auto-sauvaj sve opcije pri izlasku iz Scid-a}

# Help menu:
menuText Y Help "Pomo" 2
menuText Y HelpContents "Contents" 0 {Show the help contents page} ;# ***
menuText Y HelpIndex "Sadraj" 0 {Prikai glavnu stranu pomoi}
menuText Y HelpGuide "Brzi vodi" 0 {Prikai brzi vodi}
menuText Y HelpHints "Saveti" 0 {Prikai savete}
menuText Y HelpContact "Kontakt" 0 {Prikai informacije o kontaktu}
menuText Y HelpTip "Tip of the day" 0 {Show a useful Scid tip} ;# ***
menuText Y HelpStartup "Startup prozor" 0 {Prikai startup prozor}
menuText Y HelpAbout "O programu Scid" 0 {Informacije o programu Scid}

# Game info box popup menu:
menuText Y GInfoHideNext "Sakrij sledei potez" 0
menuText Y GInfoMaterial "Prikai vrednosti materijala" 0
menuText Y GInfoFEN "Prikai FEN" 8
menuText Y GInfoMarks "Show colored squares and arrows" 5 ;# ***
menuText Y GInfoWrap "Prelomi dugake linije" 0
menuText Y GInfoFullComment "Show Full Comment" 10 ;# ***
menuText Y GInfoPhotos "Show Photos" 5 ;# ***
menuText Y GInfoTBNothing "Baza zavrnica: nita" 16
menuText Y GInfoTBResult "Baza zavrnica: samo rezultati" 16
menuText Y GInfoTBAll "Baza zavrnica: rezultat i najbolji potezi" 16
menuText Y GInfoDelete "Obrii/vrati ovu partiju" 0
menuText Y GInfoMark "Mark/Unmark this game" 0 ;# ***
# ====== TODO To be translated ======
menuText Y GInfoInformant "Configure informant values" 0

# Main window buttons:
helpMsg Y .main.fbutton.button.start {Idi na poetak partije  (taster: Home)}
helpMsg Y .main.fbutton.button.end {Idi na kraj partije  (taster: End)}
helpMsg Y .main.fbutton.button.back {Idi jedan potez nazad  (taster: Levo)}
helpMsg Y .main.fbutton.button.forward {Idi jedan potez napred  (taster: Desno)}
helpMsg Y .main.fbutton.button.intoVar {Prei na varijantu  (taster preica: v)}
helpMsg Y .main.fbutton.button.exitVar {Ostavi tekuu varijantu  (taster preica: z)}
helpMsg Y .main.fbutton.button.flip {Rotiraj tablu  (taster preica: .)}
helpMsg Y .main.fbutton.button.coords {Ukljui/iskljui koordinate table  (taster preica: 0)}
helpMsg Y .main.fbutton.button.stm {Turn the side-to-move icon on or off} ;# ***
helpMsg Y .main.fbutton.button.autoplay {Automatski menjaj poteze  (taster: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg Y .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg Y .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg Y .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate Y Back {Nazad}
translate Y Browse {Browse} ;# ***
translate Y Cancel {Poniti}
# ====== TODO To be translated ======
translate Y Continue {Continue}
translate Y Clear {Oisti}
translate Y Close {Zatvori}
translate Y Contents {Contents} ;# ***
translate Y Defaults {Podrazumevano}
translate Y Delete {Obrii}
translate Y Graph {Grafikon}
translate Y Help {Pomo}
translate Y Import {Uvoz}
translate Y Index {Indeks}
translate Y LoadGame {Uitaj partiju}
translate Y BrowseGame {Browse game} ;# ***
translate Y MergeGame {Merge game} ;# ***
# ====== TODO To be translated ======
translate Y MergeGames {Merge Games}
translate Y Preview {Preview} ;# ***
translate Y Revert {Vrati se}
translate Y Save {Sauvaj}
translate Y Search {Trai}
translate Y Stop {Stop}
translate Y Store {Sauvaj}
translate Y Update {Osvei}
translate Y ChangeOrient {Promeni orijentaciju prozora}
translate Y ShowIcons {Show Icons} ;# ***
translate Y None {None} ;# ***
translate Y First {Prvu}
translate Y Current {Trenutna}
translate Y Last {Poslednju}

# General messages:
translate Y game {partija}
translate Y games {partije}
translate Y move {potez}
translate Y moves {potezi}
translate Y all {sve}
translate Y Yes {Da}
translate Y No {Ne}
translate Y Both {Oba}
translate Y King {Kralj}
translate Y Queen {Dama}
translate Y Rook {Top}
translate Y Bishop {Lovac}
translate Y Knight {Skaka}
translate Y Pawn {Peak}
translate Y White {Beli}
translate Y Black {Crni}
translate Y Player {Igra}
translate Y Rating {Rejting}
translate Y RatingDiff {Razlika u rejtingu (Beli - Crni)}
translate Y AverageRating {Average Rating} ;# ***
translate Y Event {Turnir}
translate Y Site {Mesto}
translate Y Country {Zemlja}
translate Y IgnoreColors {Ignorii boje}
translate Y Date {Datum}
translate Y EventDate {Datum turnira}
translate Y Decade {Decade} ;# ***
translate Y Year {Godina}
translate Y Month {Mesec}
translate Y Months {Januar Februar Mart April Maj Jun Jul Avgust Septembar Oktobar Novembar Decembar}
translate Y Days {Ned Pon Uto Sre et Pet Sub}
translate Y YearToToday {Godina do danas}
translate Y Result {Rezultat}
translate Y Round {Kolo}
translate Y Length {Duina}
translate Y ECOCode {EO kd}
translate Y ECO {EO}
translate Y Deleted {Izbrisano}
translate Y SearchResults {Trai rezultate}
translate Y OpeningTheDatabase {Otvaranje baze}
translate Y Database {Baza}
translate Y Filter {Filter}
translate Y noGames {ni jedna partija}
translate Y allGames {sve partije}
translate Y empty {prazno}
translate Y clipbase {clipbase}
translate Y score {skor}
translate Y StartPos {Poetna pozicija}
translate Y Total {Ukupno}
translate Y readonly {read-only} ;# ***

# Standard error messages:
translate Y ErrNotOpen {This is not an open database.} ;# ***
translate Y ErrReadOnly {This database is read-only; it cannot be altered.} ;# ***
translate Y ErrSearchInterrupted {Search was interrupted; results are incomplete.} ;# ***

# Game information:
translate Y twin {udvojena}
translate Y deleted {izbrisana}
translate Y comment {komentar}
translate Y hidden {sakrivena}
translate Y LastMove {Poslednji potez}
translate Y NextMove {Sledei}
translate Y GameStart {Poetak partije}
translate Y LineStart {Poetak serije poteza}
translate Y GameEnd {Kraj partije}
translate Y LineEnd {Kraj serije poteza}

# Player information:
translate Y PInfoAll {Rezultati <b>svih</b> partija}
translate Y PInfoFilter {Rezultati <b>filtriranih</b> partija}
translate Y PInfoAgainst {Rezultati protiv}
translate Y PInfoMostWhite {Najee igrana otvaranja sa belim figurama}
translate Y PInfoMostBlack {Najee igrana otvaranja sa crnim figurama}
translate Y PInfoRating {Istorija rejtinga}
translate Y PInfoBio {Biography} ;# ***
translate Y PInfoEditRatings {Edit Ratings} ;# ***

# Tablebase information:
translate Y Draw {Remi}
translate Y stalemate {pat}
translate Y withAllMoves {sa svim potezima}
translate Y withAllButOneMove {sa svim osim jednog poteza}
translate Y with {sa}
translate Y only {samo}
translate Y lose {gubi}
translate Y loses {gubi}
translate Y allOthersLose {svi ostali gube}
translate Y matesIn {matira u}
translate Y hasCheckmated {je matirao}
translate Y longest {najdui}
translate Y WinningMoves {Winning moves} ;# ***
translate Y DrawingMoves {Drawing moves} ;# ***
translate Y LosingMoves {Losing moves} ;# ***
translate Y UnknownMoves {Unknown-result moves} ;# ***

# Tip of the day:
translate Y Tip {Tip} ;# ***
translate Y TipAtStartup {Tip at startup} ;# ***

# Tree window menus:
menuText Y TreeFile "Fajl" 0
# ====== TODO To be translated ======
menuText Y TreeFileFillWithBase "Fill Cache with base" 0 {Fill the cache file with all games in current base}
# ====== TODO To be translated ======
menuText Y TreeFileFillWithGame "Fill Cache with game" 0 {Fill the cache file with current game in current base}
# ====== TODO To be translated ======
menuText Y TreeFileSetCacheSize "Cache size" 0 {Set the cache size}
# ====== TODO To be translated ======
menuText Y TreeFileCacheInfo "Cache info" 0 {Get info on cache usage}
menuText Y TreeFileSave "Sauvaj cache fajl" 0 {Sauvaj cache (.stc) fajl stabla}
menuText Y TreeFileFill "Ispuni cache fajl" 0 \
  {Ispuni cache fajl estim pozicijama otvaranja}
menuText Y TreeFileBest "Lista najboljih partija" 0 {Prikai listu najboljih partija stabla}
menuText Y TreeFileGraph "Prozor grafika" 0 {Prikai grafik za ovu granu stabla}
menuText Y TreeFileCopy "Kopiraj tekst stabla u clipboard" 0 \
  {Kopiraj statistike stabla u clipboard}
menuText Y TreeFileClose "Zatvori stablo varijanata" 0 {Zatvori prozor stabla}
# ====== TODO To be translated ======
menuText Y TreeMask "Mask" 0
# ====== TODO To be translated ======
menuText Y TreeMaskNew "New" 0 {New mask}
# ====== TODO To be translated ======
menuText Y TreeMaskOpen "Open" 0 {Open mask}
# ====== TODO To be translated ======
menuText Y TreeMaskOpenRecent "Open recent" 0 {Open recent mask}
# ====== TODO To be translated ======
menuText Y TreeMaskSave "Save" 0 {Save mask}
# ====== TODO To be translated ======
menuText Y TreeMaskClose "Close" 0 {Close mask}
# ====== TODO To be translated ======
menuText Y TreeMaskFillWithGame "Fill with game" 0 {Fill mask with game}
# ====== TODO To be translated ======
menuText Y TreeMaskFillWithBase "Fill with base" 0 {Fill mask with all games in base}
# ====== TODO To be translated ======
menuText Y TreeMaskInfo "Info" 0 {Show statistics for current mask}
# ====== TODO To be translated ======
menuText Y TreeMaskDisplay "Display mask map" 0 {Show mask data in a tree form}
# ====== TODO To be translated ======
menuText Y TreeMaskSearch "Search" 0 {Search in current mask}
menuText Y TreeSort "Sortiraj" 0
menuText Y TreeSortAlpha "Abecedno" 0
menuText Y TreeSortECO "EO kd" 0
menuText Y TreeSortFreq "Uestalost" 0
menuText Y TreeSortScore "Skor" 0
menuText Y TreeOpt "Opcije" 0
# ====== TODO To be translated ======
menuText Y TreeOptSlowmode "slow mode" 0 {Slow mode for updates (high accuracy)}
# ====== TODO To be translated ======
menuText Y TreeOptFastmode "Fast mode" 0 {Fast mode for updates (no move transposition)}
# ====== TODO To be translated ======
menuText Y TreeOptFastAndSlowmode "Fast and slow mode" 0 {Fast mode then slow mode for updates}
# ====== TODO To be translated ======
menuText Y TreeOptStartStop "Auto refreshing" 0 {Toggles automatic refreshing of the tree window}
menuText Y TreeOptLock "Zakljuaj" 0 {Zakljuaj/otkljuaj stablo za tekuu bazu}
menuText Y TreeOptTraining "Trening" 0 {Ukljui/iskljui trening mod stabla}
menuText Y TreeOptAutosave "Automatski sauvaj cache fajl" 0 \
  {Automatski sauvaj cache fajl pri zatvaranju prozora stabla}
menuText Y TreeHelp "Pomo" 0
menuText Y TreeHelpTree "Pomo za stablo" 0
menuText Y TreeHelpIndex "Sadraj pomoi" 0
translate Y SaveCache {Sauvaj cache}
translate Y Training {Trening}
translate Y LockTree {Zakljuaj}
translate Y TreeLocked {zakljuano}
translate Y TreeBest {Najbolje}
translate Y TreeBestGames {Najbolje partije stabla}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate Y TreeTitleRow \
  {    Move   ECO       Frequency    Score  AvElo Perf AvYear %Draws} ;# ***
translate Y TreeTotal {UKUPNO}
# ====== TODO To be translated ======
translate Y DoYouWantToSaveFirst {Do you want to save first}
# ====== TODO To be translated ======
translate Y AddToMask {Add to Mask}
# ====== TODO To be translated ======
translate Y RemoveFromMask {Remove from Mask}
# ====== TODO To be translated ======
translate Y AddThisMoveToMask {Add this move to Mask}
# ====== TODO To be translated ======
translate Y SearchMask {Search in Mask}
# ====== TODO To be translated ======
translate Y DisplayMask {Display Mask}
# ====== TODO To be translated ======
translate Y Nag {Nag code}
# ====== TODO To be translated ======
translate Y Marker {Marker}
# ====== TODO To be translated ======
translate Y Include {Include}
# ====== TODO To be translated ======
translate Y Exclude {Exclude}
# ====== TODO To be translated ======
translate Y MainLine {Main line}
# ====== TODO To be translated ======
translate Y Bookmark {Bookmark}
# ====== TODO To be translated ======
translate Y NewLine {New line}
# ====== TODO To be translated ======
translate Y ToBeVerified {To be verified}
# ====== TODO To be translated ======
translate Y ToTrain {To train}
# ====== TODO To be translated ======
translate Y Dubious {Dubious}
# ====== TODO To be translated ======
translate Y ToRemove {To remove}
# ====== TODO To be translated ======
translate Y NoMarker {No marker}
# ====== TODO To be translated ======
translate Y ColorMarker {Color}
# ====== TODO To be translated ======
translate Y WhiteMark {White}
# ====== TODO To be translated ======
translate Y GreenMark {Green}
# ====== TODO To be translated ======
translate Y YellowMark {Yellow}
# ====== TODO To be translated ======
translate Y BlueMark {Blue}
# ====== TODO To be translated ======
translate Y RedMark {Red}
# ====== TODO To be translated ======
translate Y CommentMove {Comment move}
# ====== TODO To be translated ======
translate Y CommentPosition {Comment position}
# ====== TODO To be translated ======
translate Y AddMoveToMaskFirst {Add move to mask first}
# ====== TODO To be translated ======
translate Y OpenAMaskFileFirst {Open a mask file first}
# ====== TODO To be translated ======
translate Y Positions {Positions}
# ====== TODO To be translated ======
translate Y Moves {Moves}

# Finder window:
menuText Y FinderFile "Fajl" 0
menuText Y FinderFileSubdirs "Pogledaj u poddirektorijumima" 0
menuText Y FinderFileClose "Zatvori Fajl traga" 0
menuText Y FinderSort "Sortiraj" 0
menuText Y FinderSortType "Tip" 0
menuText Y FinderSortSize "Veliina" 0
menuText Y FinderSortMod "Modifikovano" 0
menuText Y FinderSortName "Ime" 0
menuText Y FinderSortPath "Staza" 0
menuText Y FinderTypes "Tipovi" 0
menuText Y FinderTypesScid "Scid baze" 0
menuText Y FinderTypesOld "Scid baze u starom formatu" 0
menuText Y FinderTypesPGN "PGN fajlovi" 0
menuText Y FinderTypesEPD "EPD (book) fajlovi" 0
menuText Y FinderTypesRep "Repertoar fajlovi" 0
menuText Y FinderHelp "Pomo" 0
menuText Y FinderHelpFinder "Pomo - Fajl traga" 0
menuText Y FinderHelpIndex "Sadraj pomoi" 0
translate Y FileFinder {Fajl traga}
translate Y FinderDir {Direktorijum}
translate Y FinderDirs {Direktorijumi}
translate Y FinderFiles {Fajlovi}
translate Y FinderUpDir {gore}
# ====== TODO To be translated ======
translate Y FinderCtxOpen {Open}
# ====== TODO To be translated ======
translate Y FinderCtxBackup {Backup}
# ====== TODO To be translated ======
translate Y FinderCtxCopy {Copy}
# ====== TODO To be translated ======
translate Y FinderCtxMove {Move}
# ====== TODO To be translated ======
translate Y FinderCtxDelete {Delete}

# Player finder:
menuText Y PListFile "Fajl" 0
menuText Y PListFileUpdate "Osvei" 0
menuText Y PListFileClose "Close Player Finder" 0 ;# ***
menuText Y PListSort "Sortiraj" 0
menuText Y PListSortName "Name" 0 ;# ***
menuText Y PListSortElo "Elo" 0
menuText Y PListSortGames "Partije" 0
menuText Y PListSortOldest "Oldest" 0 ;# ***
menuText Y PListSortNewest "Newest" 0 ;# ***

# Tournament finder:
menuText Y TmtFile "Fajl" 0
menuText Y TmtFileUpdate "Osvei" 0
menuText Y TmtFileClose "Zatvori Turnir traga" 0
menuText Y TmtSort "Sortiraj" 0
menuText Y TmtSortDate "Datum" 0
menuText Y TmtSortPlayers "Igrai" 0
menuText Y TmtSortGames "Partije" 0
menuText Y TmtSortElo "Elo" 0
menuText Y TmtSortSite "Mesto" 0
menuText Y TmtSortEvent "Turnir" 1
menuText Y TmtSortWinner "Pobednik" 0
translate Y TmtLimit "Ogranienje liste"
translate Y TmtMeanElo "Najnii Elo"
translate Y TmtNone "Nije pronaen odgovarajui turnir."

# Graph windows:
menuText Y GraphFile "Fajl" 0
menuText Y GraphFileColor "Sauvaj kao Postscript u boji..." 25
menuText Y GraphFileGrey "Sauvaj kao Postscript u sivim nivoima..." 25
menuText Y GraphFileClose "Zatvori prozor" 6
menuText Y GraphOptions "Opcije" 0
menuText Y GraphOptionsWhite "Beli" 0
menuText Y GraphOptionsBlack "Crni" 0
menuText Y GraphOptionsBoth "Oba" 1
menuText Y GraphOptionsPInfo "Informacije o igrau" 0
translate Y GraphFilterTitle "Filter graph: frequency per 1000 games" ;# ***
# ====== TODO To be translated ======
translate Y GraphAbsFilterTitle "Filter Graph: frequency of the games"
# ====== TODO To be translated ======
translate Y ConfigureFilter {Configure X-Axes for Year, Rating and Moves}
# ====== TODO To be translated ======
translate Y FilterEstimate "Estimate"
# ====== TODO To be translated ======
translate Y TitleFilterGraph "Scid: Filter Graph"

# Analysis window:
translate Y AddVariation {Dodaj varijantu}
# ====== TODO To be translated ======
translate Y AddAllVariations {Add All Variations}
translate Y AddMove {Dodaj potez}
translate Y Annotate {Dodaj napomenu}
# ====== TODO To be translated ======
translate Y ShowAnalysisBoard {Show analysis board}
# ====== TODO To be translated ======
translate Y ShowInfo {Show engine info}
# ====== TODO To be translated ======
translate Y FinishGame {Finish game}
# ====== TODO To be translated ======
translate Y StopEngine {Stop engine}
# ====== TODO To be translated ======
translate Y StartEngine {Start engine}
# ====== TODO To be translated ======
translate Y LockEngine {Lock engine to current position}
translate Y AnalysisCommand {Komanda analize}
translate Y PreviousChoices {Prethodni izbori}
translate Y AnnotateTime {Set the time between moves in seconds} ;# ***
translate Y AnnotateWhich {Add variations} ;# ***
translate Y AnnotateAll {For moves by both sides} ;# ***
# ====== TODO To be translated ======
translate Y AnnotateAllMoves {Annotate all moves}
translate Y AnnotateWhite {For White moves only} ;# ***
translate Y AnnotateBlack {For Black moves only} ;# ***
# ====== TODO To be translated ======
translate Y AnnotateBlundersOnly {When game move is an obvious blunder}
# ====== TODO To be translated ======
translate Y AnnotateBlundersOnlyScoreChange {Analysis reports blunder, with score change from/to: }
# ====== TODO To be translated ======
translate Y BlundersThreshold {Threshold}
# TODO: Translate
translate Y ScoreAllMoves {Score all moves}
translate Y LowPriority {Low CPU priority} ;# ***
# ====== TODO To be translated ======
translate Y ClickHereToSeeMoves {Click here to see moves}
# ====== TODO To be translated ======
translate Y ConfigureInformant {Configure Informant}
# ====== TODO To be translated ======
translate Y Informant!? {Interesting move}
# ====== TODO To be translated ======
translate Y Informant? {Poor move}
# ====== TODO To be translated ======
translate Y Informant?? {Blunder}
# ====== TODO To be translated ======
translate Y Informant?! {Dubious move}
# ====== TODO To be translated ======
translate Y Informant+= {White has a slight advantage}
# ====== TODO To be translated ======
translate Y Informant+/- {White has a moderate advantage}
# ====== TODO To be translated ======
translate Y Informant+- {White has a decisive advantage}
# ====== TODO To be translated ======
translate Y Informant++- {The game is considered won}
# ====== TODO To be translated ======
translate Y Book {Book}
# ====== TODO To be translated ======
translate Y OtherBookMoves {Opponent's book}
# ====== TODO To be translated ======
translate Y OtherBookMovesTooltip {Moves to which the opponent has a reply}

# Analysis Engine open dialog:
translate Y EngineList {Analysis Engine List} ;# ***
translate Y EngineName {Name} ;# ***
translate Y EngineCmd {Command} ;# ***
translate Y EngineArgs {Parameters} ;# ***
translate Y EngineDir {Directory} ;# ***
translate Y EngineElo {Elo}
translate Y EngineTime {Datum}
translate Y EngineNew {New} ;# ***
translate Y EngineEdit {Edit} ;# ***
translate Y EngineRequired {Fields in bold are required; others are optional} ;# ***

# Stats window menus:
menuText Y StatsFile "Fajl" 0
menuText Y StatsFilePrint "Print to file..." 0 ;# ***
menuText Y StatsFileClose "Close window" 0 ;# ***
menuText Y StatsOpt "Opcije" 0

# PGN window menus:
menuText Y PgnFile "Fajl" 0
menuText Y PgnFileCopy "Copy Game to Clipboard" 0 ;# ***
menuText Y PgnFilePrint "tampaj u fajl..." 1
menuText Y PgnFileClose "Zatvori PGN prozor" 0
menuText Y PgnOpt "Prikaz" 0
menuText Y PgnOptColor "Prikaz u boji" 0
menuText Y PgnOptShort "Kratko (3-linije) zaglavlje" 0
menuText Y PgnOptSymbols "Simboliki komentari" 0
menuText Y PgnOptIndentC "Uvuci pasus kod komentara" 0
menuText Y PgnOptIndentV "Uvuci pasus kod varijanata" 16
menuText Y PgnOptColumn "Pasus stil (jedan potez po liniji)" 1
menuText Y PgnOptSpace "Blanko posle broja poteza" 0
menuText Y PgnOptStripMarks "Strip out colored square/arrow codes" 1 ;# ***
menuText Y PgnOptBoldMainLine "Use Bold Text for Main Line Moves" 4 ;# ***
menuText Y PgnColor "Boje" 0
menuText Y PgnColorHeader "Zaglavlje..." 0
menuText Y PgnColorAnno "Napomene..." 0
menuText Y PgnColorComments "Komentari..." 0
menuText Y PgnColorVars "Varijante..." 0
menuText Y PgnColorBackground "Pozadina..." 0
# ====== TODO To be translated ======
menuText Y PgnColorMain "Main line..." 0
# ====== TODO To be translated ======
menuText Y PgnColorCurrent "Current move background..." 1
menuText Y PgnHelp "Pomo" 1
menuText Y PgnHelpPgn "PGN pomo" 0
menuText Y PgnHelpIndex "Sadraj" 0
translate Y PgnWindowTitle {Game Notation - game %u} ;# ***

# Crosstable window menus:
menuText Y CrosstabFile "Fajl" 0
menuText Y CrosstabFileText "tampaj u Tekst fajl..." 10
menuText Y CrosstabFileHtml "tampaj u HTML fajl..." 10
menuText Y CrosstabFileLaTeX "tampaj u LaTeX fajl..." 10
menuText Y CrosstabFileClose "Zatvori tabelu turnira" 0
menuText Y CrosstabEdit "Izmena" 0
menuText Y CrosstabEditEvent "Turnir" 0
menuText Y CrosstabEditSite "Mesto" 0
menuText Y CrosstabEditDate "Datum" 0
menuText Y CrosstabOpt "Prikaz" 0
menuText Y CrosstabOptAll "Svako sa svakim" 0
menuText Y CrosstabOptSwiss "vajcarski sistem" 0
menuText Y CrosstabOptKnockout "Nokaut" 0
menuText Y CrosstabOptAuto "Auto" 0 ;# ***
menuText Y CrosstabOptAges "Starost u godinama" 10
menuText Y CrosstabOptNats "Narodnost" 0
menuText Y CrosstabOptRatings "Rejtinzi" 0
menuText Y CrosstabOptTitles "Titule" 0
menuText Y CrosstabOptBreaks "Tie-break rezultati" 4
menuText Y CrosstabOptDeleted "Include deleted games" 8 ;# ***
menuText Y CrosstabOptColors "Boje (samo za vajcarski sistem)" 0
menuText Y CrosstabOptColumnNumbers "Numbered columns (All-play-all table only)" 2 ;# ***
menuText Y CrosstabOptGroup "Grupii rezultate" 0
menuText Y CrosstabSort "Sortiraj" 0
menuText Y CrosstabSortName "Ime" 0
menuText Y CrosstabSortRating "Rejting" 0
menuText Y CrosstabSortScore "Rezultat" 0
menuText Y CrosstabColor "Boja" 0
menuText Y CrosstabColorPlain "Obian tekst" 0
menuText Y CrosstabColorHyper "Hipertekst" 0
menuText Y CrosstabHelp "Pomo" 0
menuText Y CrosstabHelpCross "Pomo - Tabela turnira" 0
menuText Y CrosstabHelpIndex "Sadraj pomoi" 0
translate Y SetFilter {Postavi filter}
translate Y AddToFilter {Dodaj u filter}
translate Y Swiss {vajcarski sistem}
translate Y Category {Category} ;# ***

# Opening report window menus:
menuText Y OprepFile "Fajl" 0
menuText Y OprepFileText "tampaj u Tekst fajl..." 10
menuText Y OprepFileHtml "tampaj u HTML fajl..." 10
menuText Y OprepFileLaTeX "tampaj u LaTeX fajl..." 10
menuText Y OprepFileOptions "Opcije..." 0
menuText Y OprepFileClose "Zatvori izvetaj o otvaranjima" 0
menuText Y OprepFavorites "Favorites" 1 ;# ***
menuText Y OprepFavoritesAdd "Add Report..." 0 ;# ***
menuText Y OprepFavoritesEdit "Edit Report Favorites..." 0 ;# ***
menuText Y OprepFavoritesGenerate "Generate Reports..." 0 ;# ***
menuText Y OprepHelp "Pomo" 0
menuText Y OprepHelpReport "Pomo - Izvetaj o otvaranjima" 0
menuText Y OprepHelpIndex "Sadraj pomoi" 0

# Repertoire editor:
menuText Y RepFile "File" 0
menuText Y RepFileNew "Novi" 0
menuText Y RepFileOpen "Otvori..." 0
menuText Y RepFileSave "Sauvaj..." 0
menuText Y RepFileSaveAs "Sauvaj kao..." 9
menuText Y RepFileClose "Zatvori prozor" 0
menuText Y RepEdit "Izmena" 0
menuText Y RepEditGroup "Dodaj grupu" 6
menuText Y RepEditInclude "Dodaj ukljuenu liniju" 6
menuText Y RepEditExclude "Dodaj iskljuenu liniju" 6
menuText Y RepView "Prikaz" 0
menuText Y RepViewExpand "Razgranaj sve grupe" 0
menuText Y RepViewCollapse "Sami sve grupe" 0
menuText Y RepSearch "Pretrai" 3
menuText Y RepSearchAll "Ceo repertoar..." 0
menuText Y RepSearchDisplayed "Samo prikazane linije..." 0
menuText Y RepHelp "Pomo" 1
menuText Y RepHelpRep "Pomo - repertoar" 0
menuText Y RepHelpIndex "Sadraj pomoi" 0
translate Y RepSearch "Pretraga repertoara"
translate Y RepIncludedLines "ukljuene linije"
translate Y RepExcludedLines "iskljuene linije"
translate Y RepCloseDialog {Ovaj repertoar ima nesauvane izmene.

Da li zaista elite da nastavite i odbacite izmene koje ste napravili?
}

# Header search:
translate Y HeaderSearch {Pretraga zaglavlja}
translate Y EndSideToMove {Side to move at end of game} ;# ***
translate Y GamesWithNoECO {Partije bez EO-a?}
translate Y GameLength {Duina partije}
translate Y FindGamesWith {Pronai partije sa}
translate Y StdStart {standardnim poetkom}
translate Y Promotions {sa promocijama}
translate Y Comments {Komentari}
translate Y Variations {Varijante}
translate Y Annotations {Napomene}
translate Y DeleteFlag {Znak za brisanje}
translate Y WhiteOpFlag {Otvaranje belog}
translate Y BlackOpFlag {Otvaranje crnog}
translate Y MiddlegameFlag {Sredinjica}
translate Y EndgameFlag {Zavrnica}
translate Y NoveltyFlag {Novost}
translate Y PawnFlag {Peaka struktura}
translate Y TacticsFlag {Taktika}
translate Y QsideFlag {Igra na daminom krilu}
translate Y KsideFlag {Igra na kraljevom krilu}
translate Y BrilliancyFlag {Brilijantnost}
translate Y BlunderFlag {Greka}
translate Y UserFlag {Korisnik}
translate Y PgnContains {PGN contains text} ;# ***
# ====== TODO To be translated ======
translate Y Annotator {Annotator}
# ====== TODO To be translated ======
translate Y Cmnts {Annotated games only}

# Game list window:
translate Y GlistNumber {Broj}
translate Y GlistWhite {Beli}
translate Y GlistBlack {Crni}
translate Y GlistWElo {B-Elo}
translate Y GlistBElo {C-Elo}
translate Y GlistEvent {Turnir}
translate Y GlistSite {Mesto}
translate Y GlistRound {Kolo}
translate Y GlistDate {Datum}
translate Y GlistYear {Year}
translate Y GlistEDate {Datum turnira}
translate Y GlistResult {Rezultat}
translate Y GlistLength {Duina}
translate Y GlistCountry {Zemlja}
translate Y GlistECO {EO}
translate Y GlistOpening {Otvaranje}
translate Y GlistEndMaterial {End-Material} ;# ***
translate Y GlistDeleted {Izbrisano}
translate Y GlistFlags {Oznaka}
translate Y GlistVars {Varijante}
translate Y GlistComments {Komentari}
translate Y GlistAnnos {Napomene}
translate Y GlistStart {Start} ;# ***
translate Y GlistGameNumber {Broj partije}
# ====== TODO To be translated ======
translate Y GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate Y GlistRating {Rating}
translate Y GlistFindText {Nai tekst}
translate Y GlistMoveField {Move} ;# ***
translate Y GlistEditField {Configure} ;# ***
translate Y GlistAddField {Add} ;# ***
translate Y GlistDeleteField {Remove} ;# ***
translate Y GlistWidth {Width} ;# ***
translate Y GlistAlign {Align} ;# ***
# ====== TODO To be translated ======
translate Y GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate Y GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate Y GlistAlignC {Align: center}
translate Y GlistColor {Color} ;# ***
translate Y GlistSep {Separator} ;# ***
# ====== TODO To be translated ======
translate Y GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate Y GlistNewSort {New}
# ====== TODO To be translated ======
translate Y GlistAddToSort {Add}
# ====== TODO To be translated ======
translate Y GsortSort {Sort...}
# ====== TODO To be translated ======
translate Y GsortDate {Date}
# ====== TODO To be translated ======
translate Y GsortYear {Year}
# ====== TODO To be translated ======
translate Y GsortEvent {Event}
# ====== TODO To be translated ======
translate Y GsortSite {Site}
# ====== TODO To be translated ======
translate Y GsortRound {Round}
# ====== TODO To be translated ======
translate Y GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate Y GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate Y GsortECO {ECO}
# ====== TODO To be translated ======
translate Y GsortResult {Result}
# ====== TODO To be translated ======
translate Y GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate Y GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate Y GsortCountry {Country}
# ====== TODO To be translated ======
translate Y GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate Y GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate Y GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate Y GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate Y GsortComments {Comments}
# ====== TODO To be translated ======
translate Y GsortVariations {Variations}
# ====== TODO To be translated ======
translate Y GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate Y GsortAscending {Ascending}
# ====== TODO To be translated ======
translate Y GsortDescending {Descending}
# ====== TODO To be translated ======
translate Y GsortAdd {Add}
# ====== TODO To be translated ======
translate Y GsortStore {Store}
# ====== TODO To be translated ======
translate Y GsortLoad {Load}
# ====== TODO To be translated ======
translate Y GlistRemoveThisGameFromFilter  {Remove this game from Filter}
# ====== TODO To be translated ======
translate Y GlistRemoveGameAndAboveFromFilter  {Remove game (and all above it) from Filter}
# ====== TODO To be translated ======
translate Y GlistRemoveGameAndBelowFromFilter  {Remove game (and all below it) from Filter}
# ====== TODO To be translated ======
translate Y GlistDeleteGame {(Un)Delete this game} 
# ====== TODO To be translated ======
translate Y GlistDeleteAllGames {Delete all games in filter} 
# ====== TODO To be translated ======
translate Y GlistUndeleteAllGames {Undelete all games in filter} 
# ====== TODO To be translated ======
translate Y GlistMergeGameInBase {Merge Game in other base} 

# Maintenance window:
translate Y DatabaseName {Ime baze:}
translate Y TypeIcon {Ikona:}
translate Y NumOfGames {Partija:}
translate Y NumDeletedGames {Obrisanih partija:}
translate Y NumFilterGames {Partija u filteru:}
translate Y YearRange {Raspon godina:}
translate Y RatingRange {Raspon rejtinga:}
translate Y Description {Description} ;# ***
translate Y Flag {Oznaka}
# ====== TODO To be translated ======
translate Y CustomFlags {Custom flags}
translate Y DeleteCurrent {Obrii tekuu partiju}
translate Y DeleteFilter {Obrii filtrirane partije}
translate Y DeleteAll {Obrii sve partije}
translate Y UndeleteCurrent {Obnovi tekuu partiju}
translate Y UndeleteFilter {Obnovi filtrirane partije}
translate Y UndeleteAll {Obnovi sve partije}
translate Y DeleteTwins {Obrii udvojene partije}
translate Y MarkCurrent {Markiraj tekuu partiju}
translate Y MarkFilter {Markiraj filtrirane partije}
translate Y MarkAll {Markiraj sve partije}
translate Y UnmarkCurrent {Demarkiraj tekuu partiju}
translate Y UnmarkFilter {Demarkiraj filtrirane partije}
translate Y UnmarkAll {Demarkiraj sve partije}
translate Y Spellchecking {Provera pravopisa}
translate Y Players {Igrai}
translate Y Events {Turniri}
translate Y Sites {Mesta}
translate Y Rounds {Kola}
translate Y DatabaseOps {Operacije sa bazom}
translate Y ReclassifyGames {Klasifikuj partije po EO}
translate Y CompactDatabase {Komprimuj bazu}
translate Y SortDatabase {Sortiraj bazu}
translate Y AddEloRatings {Dodaj Elo rejtinge}
translate Y AutoloadGame {Autoload game number} ;# ***
translate Y StripTags {Strip PGN tags} ;# ***
translate Y StripTag {Strip tag} ;# ***
translate Y Cleaner {ista}
translate Y CleanerHelp {
Scid ista e da primeni sve akcije odravanja koje izaberete iz donje liste, na tekuu bazu.

Trenutna podeavanja u dijalozima EO klasifikacija i brisanje udvojenih partija e se primeniti ako ste izabrali te funkcije.
}
translate Y CleanerConfirm {
Kada je ista jednom pokrenut, ne moe se prekinuti!

Ovo moe potrajati na velikoj bazi, zavisno od funkcija koje ste izabrali i njihovih trenutnih podeavanja.

Da li ste sigurni da elite da ponete funkcije odravanja koje ste izabrali?
}
# ====== TODO To be translated ======
translate Y TwinCheckUndelete {to flip; "u" undeletes both)}
# ====== TODO To be translated ======
translate Y TwinCheckprevPair {Previous pair}
# ====== TODO To be translated ======
translate Y TwinChecknextPair {Next pair}
# ====== TODO To be translated ======
translate Y TwinChecker {Scid: Twin game checker}
# ====== TODO To be translated ======
translate Y TwinCheckTournament {Games in tournament:}
# ====== TODO To be translated ======
translate Y TwinCheckNoTwin {No twin  }
# ====== TODO To be translated ======
translate Y TwinCheckNoTwinfound {No twin was detected for this game.\nTo show twins using this window, you must first use the "Delete twin games..." function. }
# ====== TODO To be translated ======
translate Y TwinCheckTag {Share tags...}
# ====== TODO To be translated ======
translate Y TwinCheckFound1 {Scid found $result twin games}
# ====== TODO To be translated ======
translate Y TwinCheckFound2 { and set their delete flags}
# ====== TODO To be translated ======
translate Y TwinCheckNoDelete {There are no games in this database to delete.}
# ====== TODO To be translated ======
translate Y TwinCriteria1 { Your settings for finding twin games are potentially likely to\ncause non-twin games with similar moves to be marked as twins.}
# ====== TODO To be translated ======
translate Y TwinCriteria2 {It is recommended that if you select "No" for "same moves", you should select "Yes" for the colors, event, site, round, year and month settings.\nDo you want to continue and delete twins anyway? }
# ====== TODO To be translated ======
translate Y TwinCriteria3 {It is recommended that you specify "Yes" for at least two of the "same site", "same round" and "same year" settings.\nDo you want to continue and delete twins anyway?}
# ====== TODO To be translated ======
translate Y TwinCriteriaConfirm {Scid: Confirm twin settings}
# ====== TODO To be translated ======
translate Y TwinChangeTag "Change the following game tags:\n\n"
# ====== TODO To be translated ======
translate Y AllocRatingDescription "This command will use the current spellcheck file to add Elo ratings to games in this database. Wherever a player has no currrent rating but his/her rating at the time of the game is listed in the spellcheck file, that rating will be added."
# ====== TODO To be translated ======
translate Y RatingOverride "Overwrite existing non-zero ratings?"
# ====== TODO To be translated ======
translate Y AddRatings "Add ratings to:"
# ====== TODO To be translated ======
translate Y AddedRatings {Scid added $r Elo ratings in $g games.}
# ====== TODO To be translated ======
translate Y NewSubmenu "New submenu"

# Comment editor:
translate Y AnnotationSymbols  {Simboli napomena:}
translate Y Comment {Komentari:}
translate Y InsertMark {Insert mark} ;# ***
translate Y InsertMarkHelp {
Insert/remove mark: Select color, type, square.
Insert/remove arrow: Right-click two squares.
} ;# ***

# Nag buttons in comment editor:
translate Y GoodMove {Good move} ;# ***
translate Y PoorMove {Poor move} ;# ***
translate Y ExcellentMove {Excellent move} ;# ***
translate Y Blunder {Blunder} ;# ***
translate Y InterestingMove {Interesting move} ;# ***
translate Y DubiousMove {Dubious move} ;# ***
translate Y WhiteDecisiveAdvantage {White has a decisive advantage} ;# ***
translate Y BlackDecisiveAdvantage {Black has a decisive advantage} ;# ***
translate Y WhiteClearAdvantage {White has a clear advantage} ;# ***
translate Y BlackClearAdvantage {Black has a clear advantage} ;# ***
translate Y WhiteSlightAdvantage {White has a slight advantage} ;# ***
translate Y BlackSlightAdvantage {Black has a slight advantage} ;# ***
translate Y Equality {Equality} ;# ***
translate Y Unclear {Unclear} ;# ***
translate Y Diagram {Diagram} ;# ***

# Board search:
translate Y BoardSearch {Pretraga po poziciji}
translate Y FilterOperation {Operacije na tekuem filteru:}
translate Y FilterAnd {I (Ogranii filter)}
translate Y FilterOr {ILI (Dodaj u filter)}
translate Y FilterIgnore {IGNORII (Resetuj filter)}
translate Y SearchType {Tip pretrage:}
translate Y SearchBoardExact {Ista pozicija (sve figure na istim poljima)}
translate Y SearchBoardPawns {Peaci (isti materijal, svi peaci na istim poljima)}
translate Y SearchBoardFiles {Linije (isti materijal, svi peaci na istim linijama)}
translate Y SearchBoardAny {Materijal (isti materijal, peaci i figure bilo gde)}
# ====== TODO To be translated ======
translate Y SearchInRefDatabase { Search in base }
translate Y LookInVars {Pogledaj u varijantama}

# Material search:
translate Y MaterialSearch {Pretraga po materijalu}
translate Y Material {Materijal}
translate Y Patterns {Pozicije}
translate Y Zero {Nita}
translate Y Any {Bilo koje}
translate Y CurrentBoard {Trenutna pozicija}
translate Y CommonEndings {Tipine zavrnice}
translate Y CommonPatterns {Tipine pozicije}
translate Y MaterialDiff {Material difference} ;# ***
translate Y squares {polja}
translate Y SameColor {Ista boja}
translate Y OppColor {Suprotna boja}
translate Y Either {Oba}
translate Y MoveNumberRange {Raspon broja poteza}
translate Y MatchForAtLeast {Nai za najmanje}
translate Y HalfMoves {polupoteza}

# Common endings in material search:
translate Y EndingPawns {Pawn endings} ;# ***
translate Y EndingRookVsPawns {Rook vs. Pawn(s)} ;# ***
translate Y EndingRookPawnVsRook {Rook and 1 Pawn vs. Rook} ;# ***
translate Y EndingRookPawnsVsRook {Rook and Pawn(s) vs. Rook} ;# ***
translate Y EndingRooks {Rook vs. Rook endings} ;# ***
translate Y EndingRooksPassedA {Rook vs. Rook endings with a passed a-pawn} ;# ***
translate Y EndingRooksDouble {Double Rook endings} ;# ***
translate Y EndingBishops {Bishop vs. Bishop endings} ;# ***
translate Y EndingBishopVsKnight {Bishop vs. Knight endings} ;# ***
translate Y EndingKnights {Knight vs. Knight endings} ;# ***
translate Y EndingQueens {Queen vs. Queen endings} ;# ***
translate Y EndingQueenPawnVsQueen {Queen and 1 Pawn vs. Queen} ;# ***
translate Y BishopPairVsKnightPair {Two Bishops vs. Two Knights middlegame} ;# ***

# Common patterns in material search:
translate Y PatternWhiteIQP {White IQP} ;# ***
translate Y PatternWhiteIQPBreakE6 {White IQP: d4-d5 break vs. e6} ;# ***
translate Y PatternWhiteIQPBreakC6 {White IQP: d4-d5 break vs. c6} ;# ***
translate Y PatternBlackIQP {Black IQP} ;# ***
translate Y PatternWhiteBlackIQP {White IQP vs. Black IQP} ;# ***
translate Y PatternCoupleC3D4 {White c3+d4 Isolated Pawn Couple} ;# ***
translate Y PatternHangingC5D5 {Black Hanging Pawns on c5 and d5} ;# ***
translate Y PatternMaroczy {Maroczy Center (with Pawns on c4 and e4)} ;# ***
translate Y PatternRookSacC3 {Rook Sacrifice on c3} ;# ***
translate Y PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)} ;# ***
translate Y PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)} ;# ***
translate Y PatternLightFian {Light-Square Fianchettos (Bishop-g2 vs. Bishop-b7)} ;# ***
translate Y PatternDarkFian {Dark-Square Fianchettos (Bishop-b2 vs. Bishop-g7)} ;# ***
translate Y PatternFourFian {Four Fianchettos (Bishops on b2,g2,b7,g7)} ;# ***

# Game saving:
translate Y Today {Danas}
translate Y ClassifyGame {Klasifikuj partiju}

# Setup position:
translate Y EmptyBoard {Isprazni tablu}
translate Y InitialBoard {Poetna pozicija}
translate Y SideToMove {Na potezu je}
translate Y MoveNumber {Broj poteza}
translate Y Castling {Rokada}
translate Y EnPassantFile {En Passant linija}
translate Y ClearFen {Oisti FEN}
translate Y PasteFen {Prenesi FEN}
# ====== TODO To be translated ======
translate Y SaveAndContinue {Save and continue}
# ====== TODO To be translated ======
translate Y DiscardChangesAndContinue {Discard changes\nand continue}
# ====== TODO To be translated ======
translate Y GoBack {Go back}

# Replace move dialog:
translate Y ReplaceMove {Zameni potez}
translate Y AddNewVar {Dodaj novu varijantu}
# ====== TODO To be translated ======
translate Y NewMainLine {New Main Line}
translate Y ReplaceMoveMessage {Ovde ve postoji potez.

Moete ga zameniti, odbacujui sve poteze posle njega, ili dodajte svoj potez kao novu varijantu.

(Moete izbei pojavljivanje ove poruke ubudue ako iskljuite "Pitaj pre zamene poteza" opciju u meniju Opcije:Potezi.)}

# Make database read-only dialog:
translate Y ReadOnlyDialog {Ako omoguite samo itanje iz ove baze, nee biti dozvoljene izmene.
Nijedna partije nee biti sauvana ili zamenjena, i nijedan znak za brisanje ne moe biti izmenjen.
Bilo kakvo sortiranje ili rezultati EO klasifikacije e biti privremeni.

Moete lako ponovo omoguiti pisanje po bazi, ako je zatvorite i ponovo otvorite.

Da li zaista elite da ova baza bude samo za itanje?}

# Clear game dialog:
translate Y ClearGameDialog {Ova partija je izmenjena.

Da li zaista elite da nastavite i odbacite sve uinjene promene?
}

# Exit dialog:
translate Y ExitDialog {Da li zaista elite da napustite Scid?}
translate Y ExitUnsaved {The following databases have unsaved game changes. If you exit now, these changes will be lost.} ;# ***

# Import window:
translate Y PasteCurrentGame {Prenesi tekuu partiju}
translate Y ImportHelp1 {Unesi ili prenesi partiju u PGN formatu u gornji okvir.}
translate Y ImportHelp2 {Bilo koja greka u uvozu partije e biti prikazana ovde.}
# ====== TODO To be translated ======
translate Y OverwriteExistingMoves {Overwrite existing moves ?}

# ECO Browser:
translate Y ECOAllSections {sve EO sekcije}
translate Y ECOSection {EO sekcija}
translate Y ECOSummary {Pregled za}
translate Y ECOFrequency {Uestanost subkodova za}

# Opening Report:
translate Y OprepTitle {Izvetaj o otvaranjima}
translate Y OprepReport {Izvetaj}
translate Y OprepGenerated {Generisao}
translate Y OprepStatsHist {Statistika i Istorija}
translate Y OprepStats {Statistika}
translate Y OprepStatAll {Sve partije iz iz izvetaja}
translate Y OprepStatBoth {Oba sa rejtingom}
translate Y OprepStatSince {Od}
translate Y OprepOldest {Najstarije partije}
translate Y OprepNewest {Najnovije partije}
translate Y OprepPopular {Trenutna popularnost}
translate Y OprepFreqAll {Uetanost za sve godine:    }
translate Y OprepFreq1   {Tokom  1 poslednje godine:  }
translate Y OprepFreq5   {Tokom  5 poslednjih godina: }
translate Y OprepFreq10  {Tokom 10 poslednjih godina: }
translate Y OprepEvery {jednom svakih %u partija}
translate Y OprepUp {vie za %u%s tokom svih godina}
translate Y OprepDown {manje za %u%s tokom svih godina}
translate Y OprepSame {bez promena tokom svih godina}
translate Y OprepMostFrequent {Najei igrai}
translate Y OprepMostFrequentOpponents {Most frequent opponents} ;# ***
translate Y OprepRatingsPerf {Rejtinzi i umenost}
translate Y OprepAvgPerf {Proseni rejtinzi i umenost}
translate Y OprepWRating {Rejting belog}
translate Y OprepBRating {Rejting crnog}
translate Y OprepWPerf {Umenost belog}
translate Y OprepBPerf {Umenost crnog}
translate Y OprepHighRating {Partije sa najveim prosenim rejtingom}
translate Y OprepTrends {Rezultatski trendovi}
translate Y OprepResults {Duine rezultata i uestanosti}
translate Y OprepLength {Duina partije}
translate Y OprepFrequency {Uestanost}
translate Y OprepWWins {Pobede belog: }
translate Y OprepBWins {Pobede crnog: }
translate Y OprepDraws {Remiji:       }
translate Y OprepWholeDB {cela baza}
translate Y OprepShortest {Najkraa pobeda} ;# ***
# translate Y OprepShortWhite {Najkraa pobeda belog}
# translate Y OprepShortBlack {Najkraa pobeda crnog}
translate Y OprepMovesThemes {Potezi i teme}
translate Y OprepMoveOrders {Redosledi poteza koji su dosegli poziciju iz izvetaja}
translate Y OprepMoveOrdersOne \
  {Samo je jedan redosled poteza koji je dostigao ovu poziciju:}
translate Y OprepMoveOrdersAll \
  {Bilo je %u redosleda poteza koji su dostigli ovu poziciju:}
translate Y OprepMoveOrdersMany \
  {Bilo je %u redosleda poteza koji su dostigli ovu poziciju. Prvih %u su:}
translate Y OprepMovesFrom {Potezi iz pozicije iz izvetaja}
translate Y OprepMostFrequentEcoCodes {Most frequent ECO codes} ;# ***
translate Y OprepThemes {Pozicione teme}
translate Y OprepThemeDescription {Frequency of themes in the first %u moves of each game} ;# ***
translate Y OprepThemeSameCastling {Rokade sa iste strane}
translate Y OprepThemeOppCastling {Rokade sa suprotne strane}
translate Y OprepThemeNoCastling {Obe strane bez rokada}
translate Y OprepThemeKPawnStorm {Prodor peaka na kraljevom krilu}
translate Y OprepThemeQueenswap {Zamena dama}
translate Y OprepThemeWIQP {White Isolated Queen Pawn} ;# ***
translate Y OprepThemeBIQP {Black Isolated Queen Pawn} ;# ***
translate Y OprepThemeWP567 {Beli peak na 5., 6. ili 7. redu}
translate Y OprepThemeBP234 {Crni peak na 2., 3. ili 4. redu}
translate Y OprepThemeOpenCDE {Otvorena c, d ili e linija}
translate Y OprepTheme1BishopPair {Jedna strana ima par lovaca}
translate Y OprepEndgames {Zavrnice}
translate Y OprepReportGames {Partije iz izvetaja}
translate Y OprepAllGames {Sve partije}
translate Y OprepEndClass {Materijal na kraju svake partije}
translate Y OprepTheoryTable {Tabela teorije}
translate Y OprepTableComment {Generisano iz %u najbolje rejtiranih partija.}
translate Y OprepExtraMoves {Posebno notirani potezi u tabeli teorije}
translate Y OprepMaxGames {Maksimum partija u tabeli teorije}
translate Y OprepViewHTML {View HTML} ;# ***
translate Y OprepViewLaTeX {View LaTeX} ;# ***

# Player Report:
translate Y PReportTitle {Player Report} ;# ***
translate Y PReportColorWhite {with the White pieces} ;# ***
translate Y PReportColorBlack {with the Black pieces} ;# ***
translate Y PReportMoves {after %s} ;# ***
translate Y PReportOpenings {Openings} ;# ***
translate Y PReportClipbase {Empty clipbase and copy matching games to it} ;# ***

# Piece Tracker window:
translate Y TrackerSelectSingle {Left mouse button selects this piece.} ;# ***
translate Y TrackerSelectPair {Left mouse button selects this piece; right button also selects its sibling.}
translate Y TrackerSelectPawn {Left mouse button selects this pawn; right button selects all 8 pawns.}
translate Y TrackerStat {Statistic}
translate Y TrackerGames {% games with move to square}
translate Y TrackerTime {% time on each square}
translate Y TrackerMoves {Moves}
translate Y TrackerMovesStart {Enter the move number where tracking should begin.}
translate Y TrackerMovesStop {Enter the move number where tracking should stop.}

# Game selection dialogs:
translate Y SelectAllGames {Sve partije u bazi}
translate Y SelectFilterGames {Samo partije u filteru}
translate Y SelectTournamentGames {Samo partije u tekuem turniru}
translate Y SelectOlderGames {Samo starije partije}

# Delete Twins window:
translate Y TwinsNote {Da bi bile udvojene, dve partije moraju da najmanje imaju istu dvojicu igraa, i kriterijume koje nie moete podesiti. Kada se par udvojenih partija otkrije, kraa partija se brie. Savet: Najbolje je proveriti pravopis u bazi pre brisanja udvojenih partija, jer to unapreuje detekciju. }
translate Y TwinsCriteria {Kriterijumi: Udvojene partije moraju imati...}
translate Y TwinsWhich {Koje partije da proverim?}
translate Y TwinsColors {Iste boje igraa?}
translate Y TwinsEvent {Isti turnir?}
translate Y TwinsSite {Isto mesto?}
translate Y TwinsRound {Isto kolo?}
translate Y TwinsYear {Ista godina?}
translate Y TwinsMonth {Isti mesec?}
translate Y TwinsDay {Isti dan?}
translate Y TwinsResult {Isti rezultat?}
translate Y TwinsECO {Isti EO kd?}
translate Y TwinsMoves {Isti potezi?}
translate Y TwinsPlayers {Uporeivanje imena igraa:}
translate Y TwinsPlayersExact {Potpuna podudarnost}
translate Y TwinsPlayersPrefix {Samo prva 4 slova}
translate Y TwinsWhen {Kod brisanja udvojenih partija}
translate Y TwinsSkipShort {Ignore all games under 5 moves long?} ;# ***
translate Y TwinsUndelete {Obnovi prvo sve partije?}
translate Y TwinsSetFilter {Postavi filter na sve obrisane udvojene partije?}
translate Y TwinsComments {Uvek sauvaj partije sa komentarima?}
translate Y TwinsVars {Uvek sauvaj partije sa varijantama?}
translate Y TwinsDeleteWhich {Delete which game:} ;# ***
translate Y TwinsDeleteShorter {Shorter game} ;# ***
translate Y TwinsDeleteOlder {Smaller game number} ;# ***
translate Y TwinsDeleteNewer {Larger game number} ;# ***
translate Y TwinsDelete {Obrii partije}

# Name editor window:
translate Y NameEditType {Tip imena za izmenu}
translate Y NameEditSelect {Partije za izmenu}
translate Y NameEditReplace {Zameni}
translate Y NameEditWith {sa}
translate Y NameEditMatches {Podudara se: Pritisni Ctrl+1 do Ctrl+9 za izbor}
# ====== TODO To be translated ======
translate Y CheckGames {Check games}
# ====== TODO To be translated ======
translate Y CheckGamesWhich {Check games}
# ====== TODO To be translated ======
translate Y CheckAll {All games}
# ====== TODO To be translated ======
translate Y CheckSelectFilterGames {Only games in filter}

# Classify window:
translate Y Classify {Klasifikuj}
translate Y ClassifyWhich {Klasifikuj partije po EO}
translate Y ClassifyAll {Sve partije (prebrii stare EO kdove)}
translate Y ClassifyYear {Sve partije igrane poslednje godine}
translate Y ClassifyMonth {Sve partije igrane poslednjeg meseca}
translate Y ClassifyNew {Samo partije koje su jo bez EO kda}
translate Y ClassifyCodes {Koristi EO kdove}
translate Y ClassifyBasic {Samo osnovne kdove ("B12", ...)}
translate Y ClassifyExtended {Proireni Scid ("B12j", ...)}

# Compaction:
translate Y NameFile {Fajl imena}
translate Y GameFile {Fajl partija}
translate Y Names {Imena}
translate Y Unused {Nekoriena}
translate Y SizeKb {Veliina (kb)}
translate Y CurrentState {Trenutno stanje}
translate Y AfterCompaction {Posle komprimacije}
translate Y CompactNames {Komprimuj fajl imena}
translate Y CompactGames {Komprimuj fajl partija}
# ====== TODO To be translated ======
translate Y NoUnusedNames "There are no unused names, so the name file is already fully compacted."
# ====== TODO To be translated ======
translate Y NoUnusedGames "The game file is already fully compacted."
# ====== TODO To be translated ======
translate Y NameFileCompacted {The name file for the database "[file tail [sc_base filename]]" was compacted.}
# ====== TODO To be translated ======
translate Y GameFileCompacted {The game file for the database "[file tail [sc_base filename]]" was compacted.}

# Sorting:
translate Y SortCriteria {Kriterijumi}
translate Y AddCriteria {Dodaj kriterijum}
translate Y CommonSorts {Uobiajena sortiranja}
translate Y Sort {Sortiraj}

# Exporting:
translate Y AddToExistingFile {Dodaj partije u postojei fajl?}
translate Y ExportComments {Izvezi komentare?}
translate Y ExportVariations {Izvezi varijante?}
translate Y IndentComments {Uvuci pasus kod komentara?}
translate Y IndentVariations {Uvuci pasus kod varijanata?}
translate Y ExportColumnStyle {Pasus stil (jedan potez po liniji)?}
translate Y ExportSymbolStyle {Stil simbolikih napomena:}
translate Y ExportStripMarks {Strip square/arrow mark codes from comments?} ;# ***

# Goto game/move dialogs:
translate Y LoadGameNumber {Unesi broj partije za uitavanje:}
translate Y GotoMoveNumber {Idi na potez broj:}

# Copy games dialog:
translate Y CopyGames {Kopiraj partije}
translate Y CopyConfirm {
 Da li zaista elite da kopirate
 [::utils::thousands $nGamesToCopy] filtriranih partija
 iz baze "$fromName"
 u bazu "$targetName"?
}
translate Y CopyErr {Ne mogu da kopiram partije}
translate Y CopyErrSource {izvorina baza}
translate Y CopyErrTarget {odredina baza}
translate Y CopyErrNoGames {nema partija u svom filteru}
translate Y CopyErrReadOnly {je samo za itanje}
translate Y CopyErrNotOpen {nije otvorena}

# Colors:
translate Y LightSquares {Svetla polja}
translate Y DarkSquares {Tamna polja}
translate Y SelectedSquares {Izabrana polja}
translate Y SuggestedSquares {Polja preporuenog poteza}
translate Y WhitePieces {Bele figure}
translate Y BlackPieces {Crne figure}
translate Y WhiteBorder {Ivica belih figura}
translate Y BlackBorder {Ivica crnih figura}

# Novelty window:
translate Y FindNovelty {Pronai novost}
translate Y Novelty {Novost}
translate Y NoveltyInterrupt {Traenje novosti prekinuto}
translate Y NoveltyNone {Nijedna novost nije pronaena u ovoj partiji}
translate Y NoveltyHelp {
Scid e nai prvi potez tekue partije, koji dostie poziciju koja nije naena u izabranoj bazi ili u EO knjizi otvaranja.
}

# Sounds configuration:
translate Y SoundsFolder {Sound Files Folder} ;# ***
translate Y SoundsFolderHelp {The folder should contain the files King.wav, a.wav, 1.wav, etc} ;# ***
translate Y SoundsAnnounceOptions {Move Announcement Options} ;# ***
translate Y SoundsAnnounceNew {Announce new moves as they are made} ;# ***
translate Y SoundsAnnounceForward {Announce moves when moving forward one move} ;# ***
translate Y SoundsAnnounceBack {Announce when retracting or moving back one move} ;# ***

# Upgrading databases:
translate Y Upgrading {Unapreivanje}
translate Y ConfirmOpenNew {
Ovo je baza u starom formatu (Scid 3), koju ne moe da otvori Scid 4, ve je kreirana verzija u novom formatu (Scid 4).

Da li elite da otvorite verziju baze u novom formatu?
}
translate Y ConfirmUpgrade {
Ovo je baza u starom formatu (Scid 3). Verzija baze u novom formatu mora biti kreirana pre korienja u Scid-u 4.

Unapreivanjem e se kreirati nova verzija baze.

Ovo moe potrajati, ali treba da se uradi samo jednom. Moete prekinuti ukoliko bude predugo trajalo.

Da li elite da sada unapredite ovu bazu?
}

# Recent files options:
translate Y RecentFilesMenu {Number of recent files in File menu} ;# ***
translate Y RecentFilesExtra {Number of recent files in extra submenu} ;# ***

# My Player Names options:
translate Y MyPlayerNamesDescription {
Enter a list of preferred player names below, one name per line. Wildcards (e.g. "?" for any single character, "*" for any sequence of characters) are permitted.

Every time a game with a player in the list is loaded, the main window chessboard will be rotated if necessary to show the game from that players perspective.
} ;# ***
# ====== TODO To be translated ======
translate Y showblunderexists {show blunder exists}
# ====== TODO To be translated ======
translate Y showblundervalue {show blunder value}
# ====== TODO To be translated ======
translate Y showscore {show score}
# ====== TODO To be translated ======
translate Y coachgame {coach game}
# ====== TODO To be translated ======
translate Y configurecoachgame {configure coach game}
# ====== TODO To be translated ======
translate Y configuregame {Game configuration}
# ====== TODO To be translated ======
translate Y Phalanxengine {Phalanx engine}
# ====== TODO To be translated ======
translate Y Coachengine {Coach engine}
# ====== TODO To be translated ======
translate Y difficulty {difficulty}
# ====== TODO To be translated ======
translate Y hard {hard}
# ====== TODO To be translated ======
translate Y easy {easy}
# ====== TODO To be translated ======
translate Y Playwith {Play with}
# ====== TODO To be translated ======
translate Y white {white}
# ====== TODO To be translated ======
translate Y black {black}
# ====== TODO To be translated ======
translate Y both {both}
# ====== TODO To be translated ======
translate Y Play {Play}
# ====== TODO To be translated ======
translate Y Noblunder {No blunder}
# ====== TODO To be translated ======
translate Y blunder {blunder}
# ====== TODO To be translated ======
translate Y Noinfo {-- No info --}
# ====== TODO To be translated ======
translate Y PhalanxOrTogaMissing {Phalanx or Toga not found}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate Y moveblunderthreshold {move is a blunder if loss is greater than}
# ====== TODO To be translated ======
translate Y limitanalysis {limit engine analysis time}
# ====== TODO To be translated ======
translate Y seconds {seconds}
# ====== TODO To be translated ======
translate Y Abort {Abort}
# ====== TODO To be translated ======
translate Y Resume {Resume}
# ====== TODO To be translated ======
translate Y OutOfOpening {Out of opening}
# ====== TODO To be translated ======
translate Y NotFollowedLine {You did not follow the line}
# ====== TODO To be translated ======
translate Y DoYouWantContinue {Do you want yo continue ?}
# ====== TODO To be translated ======
translate Y CoachIsWatching {Coach is watching}
# ====== TODO To be translated ======
translate Y Ponder {Permanent thinking}
# ====== TODO To be translated ======
translate Y LimitELO {Limit ELO strength}
# ====== TODO To be translated ======
translate Y DubiousMovePlayedTakeBack {Dubious move played, do you want to take back ?}
# ====== TODO To be translated ======
translate Y WeakMovePlayedTakeBack {Weak move played, do you want to take back ?}
# ====== TODO To be translated ======
translate Y BadMovePlayedTakeBack {Bad move played, do you want to take back ?}
# ====== TODO To be translated ======
translate Y Iresign {I resign}
# ====== TODO To be translated ======
translate Y yourmoveisnotgood {your move is not good}
# ====== TODO To be translated ======
translate Y EndOfVar {End of variation}
# ====== TODO To be translated ======
translate Y Openingtrainer {Opening trainer}
# ====== TODO To be translated ======
translate Y DisplayCM {Display candidate moves}
# ====== TODO To be translated ======
translate Y DisplayCMValue {Display candidate moves value}
# ====== TODO To be translated ======
translate Y DisplayOpeningStats {Show statistics}
# ====== TODO To be translated ======
translate Y ShowReport {Show report}
# ====== TODO To be translated ======
translate Y NumberOfGoodMovesPlayed {good moves played}
# ====== TODO To be translated ======
translate Y NumberOfDubiousMovesPlayed {dubious moves played}
# ====== TODO To be translated ======
translate Y NumberOfMovesPlayedNotInRepertoire {moves played not in repertoire}
# ====== TODO To be translated ======
translate Y NumberOfTimesPositionEncountered {times position encountered}
# ====== TODO To be translated ======
translate Y PlayerBestMove  {Allow only best moves}
# ====== TODO To be translated ======
translate Y OpponentBestMove {Opponent plays best moves}
# ====== TODO To be translated ======
translate Y OnlyFlaggedLines {Only flagged lines}
# ====== TODO To be translated ======
translate Y resetStats {Reset statistics}
# ====== TODO To be translated ======
translate Y Repertoiretrainingconfiguration {Repertoire training configuration}
# ====== TODO To be translated ======
translate Y Loadingrepertoire {Loading repertoire}
# ====== TODO To be translated ======
translate Y Movesloaded {Moves loaded}
# ====== TODO To be translated ======
translate Y Repertoirenotfound {Repertoire not found}
# ====== TODO To be translated ======
translate Y Openfirstrepertoirewithtype {Open first a repertoire database with icon/type set to the right side}
# ====== TODO To be translated ======
translate Y Movenotinrepertoire {Move not in repertoire}
# ====== TODO To be translated ======
translate Y PositionsInRepertoire {Positions in repertoire}
# ====== TODO To be translated ======
translate Y PositionsNotPlayed {Positions not played}
# ====== TODO To be translated ======
translate Y PositionsPlayed {Positions played}
# ====== TODO To be translated ======
translate Y Success {Success}
# ====== TODO To be translated ======
translate Y DubiousMoves {Dubious moves}
# ====== TODO To be translated ======
translate Y OutOfRepertoire {OutOfRepertoire}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate Y ConfigureTactics {Configure tactics}
# ====== TODO To be translated ======
translate Y ResetScores {Reset scores}
# ====== TODO To be translated ======
translate Y LoadingBase {Loading base}
# ====== TODO To be translated ======
translate Y Tactics {Tactics}
# ====== TODO To be translated ======
translate Y ShowSolution {Show solution}
# ====== TODO To be translated ======
translate Y NextExercise {Next exercise}
# ====== TODO To be translated ======
translate Y PrevExercise {previous exercise}
# ====== TODO To be translated ======
translate Y StopTraining {Stop training}
# ====== TODO To be translated ======
translate Y Next {Next}
# ====== TODO To be translated ======
translate Y ResettingScore {Resetting score}
# ====== TODO To be translated ======
translate Y LoadingGame {Loading game}
# ====== TODO To be translated ======
translate Y MateFound {Mate found}
# ====== TODO To be translated ======
translate Y BestSolutionNotFound {Best solution NOT found !}
# ====== TODO To be translated ======
translate Y MateNotFound {Mate not found}
# ====== TODO To be translated ======
translate Y ShorterMateExists {Shorter mate exists}
# ====== TODO To be translated ======
translate Y ScorePlayed {Score played}
# ====== TODO To be translated ======
translate Y Expected {expected}
# ====== TODO To be translated ======
translate Y ChooseTrainingBase {Choose training base}
# ====== TODO To be translated ======
translate Y Thinking {Thinking}
# ====== TODO To be translated ======
translate Y AnalyzeDone {Analyze done}
# ====== TODO To be translated ======
translate Y WinWonGame {Win won game}
# ====== TODO To be translated ======
translate Y Lines {Lines}
# ====== TODO To be translated ======
translate Y ConfigureUCIengine {Configure UCI engine}
# ====== TODO To be translated ======
translate Y SpecificOpening {Specific opening}
# ====== TODO To be translated ======
translate Y StartNewGame {Start new game}
# ====== TODO To be translated ======
translate Y FixedLevel {Fixed level}
# ====== TODO To be translated ======
translate Y Opening {Opening}
# ====== TODO To be translated ======
translate Y RandomLevel {Random level}
# ====== TODO To be translated ======
translate Y StartFromCurrentPosition {Start from current position}
# ====== TODO To be translated ======
translate Y FixedDepth {Fixed depth}
# ====== TODO To be translated ======
translate Y Nodes {Nodes} 
# ====== TODO To be translated ======
translate Y Depth {Depth}
# ====== TODO To be translated ======
translate Y Time {Time} 
# ====== TODO To be translated ======
translate Y SecondsPerMove {Seconds per move}
# ====== TODO To be translated ======
translate Y Engine {Engine}
# ====== TODO To be translated ======
translate Y TimeMode {Time mode}
# ====== TODO To be translated ======
translate Y TimeBonus {Time + bonus}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate Y TimeMin {min}
# ====== TODO To be translated ======
translate Y TimeSec {sec}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate Y AllExercisesDone {All exercises done}
# ====== TODO To be translated ======
translate Y MoveOutOfBook {Move out of book}
# ====== TODO To be translated ======
translate Y LastBookMove {Last book move}
# ====== TODO To be translated ======
translate Y AnnotateSeveralGames {Annotate several games\nfrom current to :}
# ====== TODO To be translated ======
translate Y FindOpeningErrors {Find opening errors}
# ====== TODO To be translated ======
translate Y MarkTacticalExercises {Mark tactical exercises}
# ====== TODO To be translated ======
translate Y UseBook {Use book}
# ====== TODO To be translated ======
translate Y MultiPV {Multiple variations}
# ====== TODO To be translated ======
translate Y Hash {Hash memory}
# ====== TODO To be translated ======
translate Y OwnBook {Use engine book}
# ====== TODO To be translated ======
translate Y BookFile {Opening book}
# ====== TODO To be translated ======
translate Y AnnotateVariations {Annotate variations}
# ====== TODO To be translated ======
translate Y ShortAnnotations {Short annotations}
# ====== TODO To be translated ======
translate Y addAnnotatorTag {Add annotator tag}
# ====== TODO To be translated ======
translate Y AddScoreToShortAnnotations {Add score to short annotations}
# ====== TODO To be translated ======
translate Y Export {Export}
# ====== TODO To be translated ======
translate Y BookPartiallyLoaded {Book partially loaded}
# ====== TODO To be translated ======
translate Y Calvar {Calculation of variations}
# ====== TODO To be translated ======
translate Y ConfigureCalvar {Configuration}
# ====== TODO To be translated ======
# ====== TODO To be translated ======
translate Y Reti {Reti}
# ====== TODO To be translated ======
translate Y English {English}
# ====== TODO To be translated ======
translate Y d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
# ====== TODO To be translated ======
translate Y Trompowsky {Trompowsky}
# ====== TODO To be translated ======
translate Y Budapest {Budapest}
# ====== TODO To be translated ======
translate Y OldIndian {Old Indian}
# ====== TODO To be translated ======
translate Y BenkoGambit {Benko Gambit}
# ====== TODO To be translated ======
translate Y ModernBenoni {Modern Benoni}
# ====== TODO To be translated ======
translate Y DutchDefence {Dutch Defence}
# ====== TODO To be translated ======
translate Y Scandinavian {Scandinavian}
# ====== TODO To be translated ======
translate Y AlekhineDefence {Alekhine Defence}
# ====== TODO To be translated ======
translate Y Pirc {Pirc}
# ====== TODO To be translated ======
translate Y CaroKann {Caro-Kann}
# ====== TODO To be translated ======
translate Y CaroKannAdvance {Caro-Kann Advance}
# ====== TODO To be translated ======
translate Y Sicilian {Sicilian}
# ====== TODO To be translated ======
translate Y SicilianAlapin {Sicilian Alapin}
# ====== TODO To be translated ======
translate Y SicilianClosed {Sicilian Closed}
# ====== TODO To be translated ======
translate Y SicilianRauzer {Sicilian Rauzer}
# ====== TODO To be translated ======
translate Y SicilianDragon {Sicilian Dragon}
# ====== TODO To be translated ======
translate Y SicilianScheveningen {Sicilian Scheveningen}
# ====== TODO To be translated ======
translate Y SicilianNajdorf {Sicilian Najdorf}
# ====== TODO To be translated ======
translate Y OpenGame {Open Game}
# ====== TODO To be translated ======
translate Y Vienna {Vienna}
# ====== TODO To be translated ======
translate Y KingsGambit {King's Gambit}
# ====== TODO To be translated ======
translate Y RussianGame {Russian Game}
# ====== TODO To be translated ======
translate Y ItalianTwoKnights {Italian/Two Knights}
# ====== TODO To be translated ======
translate Y Spanish {Spanish}
# ====== TODO To be translated ======
translate Y SpanishExchange {Spanish Exchange}
# ====== TODO To be translated ======
translate Y SpanishOpen {Spanish Open}
# ====== TODO To be translated ======
translate Y SpanishClosed {Spanish Closed}
# ====== TODO To be translated ======
translate Y FrenchDefence {French Defence}
# ====== TODO To be translated ======
translate Y FrenchAdvance {French Advance}
# ====== TODO To be translated ======
translate Y FrenchTarrasch {French Tarrasch}
# ====== TODO To be translated ======
translate Y FrenchWinawer {French Winawer}
# ====== TODO To be translated ======
translate Y FrenchExchange {French Exchange}
# ====== TODO To be translated ======
translate Y QueensPawn {Queen's Pawn}
# ====== TODO To be translated ======
translate Y Slav {Slav}
# ====== TODO To be translated ======
translate Y QGA {QGA}
# ====== TODO To be translated ======
translate Y QGD {QGD}
# ====== TODO To be translated ======
translate Y QGDExchange {QGD Exchange}
# ====== TODO To be translated ======
translate Y SemiSlav {Semi-Slav}
# ====== TODO To be translated ======
translate Y QGDwithBg5 {QGD with Bg5}
# ====== TODO To be translated ======
translate Y QGDOrthodox {QGD Orthodox}
# ====== TODO To be translated ======
translate Y Grunfeld {Grnfeld}
# ====== TODO To be translated ======
translate Y GrunfeldExchange {Grnfeld Exchange}
# ====== TODO To be translated ======
translate Y GrunfeldRussian {Grnfeld Russian}
# ====== TODO To be translated ======
translate Y Catalan {Catalan}
# ====== TODO To be translated ======
translate Y CatalanOpen {Catalan Open}
# ====== TODO To be translated ======
translate Y CatalanClosed {Catalan Closed}
# ====== TODO To be translated ======
translate Y QueensIndian {Queen's Indian}
# ====== TODO To be translated ======
translate Y NimzoIndian {Nimzo-Indian}
# ====== TODO To be translated ======
translate Y NimzoIndianClassical {Nimzo-Indian Classical}
# ====== TODO To be translated ======
translate Y NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
# ====== TODO To be translated ======
translate Y KingsIndian {King's Indian}
# ====== TODO To be translated ======
translate Y KingsIndianSamisch {King's Indian Smisch}
# ====== TODO To be translated ======
translate Y KingsIndianMainLine {King's Indian Main Line}
# ====== TODO To be translated ======
translate Y ConfigureFics {Configure FICS}
# ====== TODO To be translated ======
translate Y FICSGuest {Login as Guest}
# ====== TODO To be translated ======
translate Y FICSServerPort {Server port}
# ====== TODO To be translated ======
translate Y FICSServerAddress {IP Address}
# ====== TODO To be translated ======
translate Y FICSRefresh {Refresh}
# ====== TODO To be translated ======
translate Y FICSTimesealPort {Timeseal port}
# ====== TODO To be translated ======
translate Y FICSSilence {Silence}
# ====== TODO To be translated ======
translate Y FICSOffers {Offers}
# ====== TODO To be translated ======
translate Y FICSConsole {Console}
# ====== TODO To be translated ======
translate Y FICSGames {Games}
# ====== TODO To be translated ======
translate Y FICSUnobserve {Stop observing game}
# ====== TODO To be translated ======
translate Y FICSProfile {Display your history and profile}
# ====== TODO To be translated ======
translate Y FICSRelayedGames {Relayed games}
# ====== TODO To be translated ======
translate Y FICSFindOpponent {Find opponent}
# ====== TODO To be translated ======
translate Y FICSTakeback {Takeback}
# ====== TODO To be translated ======
translate Y FICSTakeback2 {Takeback 2}
# ====== TODO To be translated ======
translate Y FICSInitTime {Initial time (min)}
# ====== TODO To be translated ======
translate Y FICSIncrement {Increment (sec)}
# ====== TODO To be translated ======
translate Y FICSRatedGame {Rated Game}
# ====== TODO To be translated ======
translate Y FICSAutoColour {automatic}
# ====== TODO To be translated ======
translate Y FICSManualConfirm {confirm manually}
# ====== TODO To be translated ======
translate Y FICSFilterFormula {Filter with formula}
# ====== TODO To be translated ======
translate Y FICSIssueSeek {Issue seek}
# ====== TODO To be translated ======
translate Y FICSChallenge {Challenge}
# ====== TODO To be translated ======
translate Y FICSAccept {accept}
# ====== TODO To be translated ======
translate Y FICSDecline {decline}
# ====== TODO To be translated ======
translate Y FICSColour {Colour}
# ====== TODO To be translated ======
translate Y FICSSend {send}
# ====== TODO To be translated ======
translate Y FICSConnect {Connect}
# ====== TODO To be translated ======
translate Y FICSdefaultuservars {Use default variables}
# ====== TODO To be translated ======
translate Y FICSObserveconfirm {Do you want to observe game}
# ====== TODO To be translated ======
translate Y FICSpremove {Enable premove}
# ====== TODO To be translated ======
translate Y GameReview {Game review}
# ====== TODO To be translated ======
translate Y GameReviewTimeExtended {Time extended}
# ====== TODO To be translated ======
translate Y GameReviewMargin {Error margin}
# ====== TODO To be translated ======
translate Y GameReviewAutoContinue {Auto continue when move is correct}
# ====== TODO To be translated ======
translate Y GameReviewReCalculate {Use extended time}
# ====== TODO To be translated ======
translate Y GameReviewAnalyzingMovePlayedDuringTheGame {Analyzing move played during the game}
# ====== TODO To be translated ======
translate Y GameReviewAnalyzingThePosition {Analyzing the position}
# ====== TODO To be translated ======
translate Y GameReviewEnterYourMove {Enter your move}
# ====== TODO To be translated ======
translate Y GameReviewCheckingYourMove {Checking your move}
# ====== TODO To be translated ======
translate Y GameReviewYourMoveWasAnalyzed {Your move was analyzed}
# ====== TODO To be translated ======
translate Y GameReviewYouPlayedSameMove {You played the same move as in match}
# ====== TODO To be translated ======
translate Y GameReviewScoreOfYourMove {Score of your move}
# ====== TODO To be translated ======
translate Y GameReviewGameMoveScore {Game move's score}
# ====== TODO To be translated ======
translate Y GameReviewEngineScore {Engine's score}
# ====== TODO To be translated ======
translate Y GameReviewYouPlayedLikeTheEngine {You played like the engine}
# ====== TODO To be translated ======
translate Y GameReviewNotEngineMoveButGoodMove {Not the engine move, but is also a good move}
# ====== TODO To be translated ======
translate Y GameReviewMoveNotGood {This move is not good, score is}
# ====== TODO To be translated ======
translate Y GameReviewMovesPlayedLike {Moves played like}
# ====== TODO To be translated ======
translate Y GameReviewMovesPlayedEngine {Moves played like engine}
# ====== TODO To be translated ======
translate Y CCDlgConfigureWindowTitle {Configure Correspondence Chess}
# ====== TODO To be translated ======
translate Y CCDlgCGeneraloptions {General Options}
# ====== TODO To be translated ======
translate Y CCDlgDefaultDB {Default Database:}
# ====== TODO To be translated ======
translate Y CCDlgInbox {Inbox (path):}
# ====== TODO To be translated ======
translate Y CCDlgOutbox {Outbox (path):}
# ====== TODO To be translated ======
translate Y CCDlgXfcc {Xfcc Configuration:}
# ====== TODO To be translated ======
translate Y CCDlgExternalProtocol {External Protocol Handler (e.g. Xfcc)}
# ====== TODO To be translated ======
translate Y CCDlgFetchTool {Fetch Tool:}
# ====== TODO To be translated ======
translate Y CCDlgSendTool {Send Tool:}
# ====== TODO To be translated ======
translate Y CCDlgEmailCommunication {eMail Communication}
# ====== TODO To be translated ======
translate Y CCDlgMailPrg {Mail program:}
# ====== TODO To be translated ======
translate Y CCDlgBCCAddr {(B)CC Address:}
# ====== TODO To be translated ======
translate Y CCDlgMailerMode {Mode:}
# ====== TODO To be translated ======
translate Y CCDlgThunderbirdEg {e.g. Thunderbird, Mozilla Mail, Icedove...}
# ====== TODO To be translated ======
translate Y CCDlgMailUrlEg {e.g. Evolution}
# ====== TODO To be translated ======
translate Y CCDlgClawsEg {e.g Sylpheed Claws}
# ====== TODO To be translated ======
translate Y CCDlgmailxEg {e.g. mailx, mutt, nail...}
# ====== TODO To be translated ======
translate Y CCDlgAttachementPar {Attachment parameter:}
# ====== TODO To be translated ======
translate Y CCDlgInternalXfcc {Use internal Xfcc support}
# ====== TODO To be translated ======
translate Y CCDlgConfirmXfcc {Confirm moves}
# ====== TODO To be translated ======
translate Y CCDlgSubjectPar {Subject parameter:}
# ====== TODO To be translated ======
translate Y CCDlgDeleteBoxes {Empty In-/Outbox}
# ====== TODO To be translated ======
translate Y CCDlgDeleteBoxesText {Do you really want to empty your In- and Outbox folders for Correspondence Chess? This requires a new sync to show the last state of your games}
# ====== TODO To be translated ======
translate Y CCDlgConfirmMove {Confirm move}
# ====== TODO To be translated ======
translate Y CCDlgConfirmMoveText {If you confirm, the following move and comment will be sent to the server:}
# ====== TODO To be translated ======
translate Y CCDlgDBGameToLong {Inconsistent Mainline}
# ====== TODO To be translated ======
translate Y CCDlgDBGameToLongError {The mainline in your database is longer than the game in your Inbox. If the Inbox contains current games, i.e. right after a sync, some moves were added to the mainline in the database erroneously.\nIn this case please shorten the mainline to (at max) move\n}
# ====== TODO To be translated ======
translate Y CCDlgStartEmail {Start new eMail game}
# ====== TODO To be translated ======
translate Y CCDlgYourName {Your Name:}
# ====== TODO To be translated ======
translate Y CCDlgYourMail {Your eMail Address:}
# ====== TODO To be translated ======
translate Y CCDlgOpponentName {Opponents Name:}
# ====== TODO To be translated ======
translate Y CCDlgOpponentMail {Opponents eMail Address:}
# ====== TODO To be translated ======
translate Y CCDlgGameID {Game ID (unique):}
# ====== TODO To be translated ======
translate Y CCDlgTitNoOutbox {Scid: Correspondence Chess Outbox}
# ====== TODO To be translated ======
translate Y CCDlgTitNoInbox {Scid: Correspondence Chess Inbox}
# ====== TODO To be translated ======
translate Y CCDlgTitNoGames {Scid: No Correspondence Chess Games}
# ====== TODO To be translated ======
translate Y CCErrInboxDir {Correspondence Chess inbox directory:}
# ====== TODO To be translated ======
translate Y CCErrOutboxDir {Correspondence Chess outbox directory:}
# ====== TODO To be translated ======
translate Y CCErrDirNotUsable {does not exist or is not accessible!\nPlease check and correct the settings.}
# ====== TODO To be translated ======
translate Y CCErrNoGames {does not contain any games!\nPlease fetch them first.}
# ====== TODO To be translated ======
translate Y CCDlgTitNoCCDB {Scid: No Correspondence Database}
# ====== TODO To be translated ======
translate Y CCErrNoCCDB {No Database of type 'Correspondence' is opened. Please open one before using correspondence chess functions.}
# ====== TODO To be translated ======
translate Y CCFetchBtn {Fetch games from the server and process the Inbox}
# ====== TODO To be translated ======
translate Y CCPrevBtn {Goto previous game}
# ====== TODO To be translated ======
translate Y CCNextBtn {Goto next game}
# ====== TODO To be translated ======
translate Y CCSendBtn {Send move}
# ====== TODO To be translated ======
translate Y CCEmptyBtn {Empty In- and Outbox}
# ====== TODO To be translated ======
translate Y CCHelpBtn {Help on icons and status indicators.\nFor general Help press F1!}
# ====== TODO To be translated ======
translate Y CCDlgServerName {Server Name:}
# ====== TODO To be translated ======
translate Y CCDlgLoginName  {Login Name:}
# ====== TODO To be translated ======
translate Y CCDlgPassword   {Password:}
# ====== TODO To be translated ======
translate Y CCDlgURL        {Xfcc-URL:}
# ====== TODO To be translated ======
translate Y CCDlgRatingType {Rating Type:}
# ====== TODO To be translated ======
translate Y CCDlgDuplicateGame {Non-unique game ID}
# ====== TODO To be translated ======
translate Y CCDlgDuplicateGameError {This game exists more than once in your database. Please delete all duplicates and compact your game file (File/Maintenance/Compact Database).}
# ====== TODO To be translated ======
translate Y CCDlgSortOption {Sorting:}
# ====== TODO To be translated ======
translate Y CCDlgListOnlyOwnMove {Only games I have the move}
# ====== TODO To be translated ======
translate Y CCOrderClassicTxt {Site, Event, Round, Result, White, Black}
# ====== TODO To be translated ======
translate Y CCOrderMyTimeTxt {My Clock}
# ====== TODO To be translated ======
translate Y CCOrderTimePerMoveTxt {Time per move till next time control}
# ====== TODO To be translated ======
translate Y CCOrderStartDate {Start date}
# ====== TODO To be translated ======
translate Y CCOrderOppTimeTxt {Opponents Clock}
# ====== TODO To be translated ======
translate Y CCDlgConfigRelay {Configure ICCF observations}
# ====== TODO To be translated ======
translate Y CCDlgConfigRelayHelp {Go to the games page on http://www.iccf-webchess.com and display the game to be observed.  If you see the chessboard copy the URL from your browser to the list below. One URL per line only!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
# ====== TODO To be translated ======
translate Y ExtHWConfigConnection {Configure external hardware}
# ====== TODO To be translated ======
translate Y ExtHWPort {Port}
# ====== TODO To be translated ======
translate Y ExtHWEngineCmd {Engine command}
# ====== TODO To be translated ======
translate Y ExtHWEngineParam {Engine parameter}
# ====== TODO To be translated ======
translate Y ExtHWShowButton {Show button}
# ====== TODO To be translated ======
translate Y ExtHWHardware {Hardware}
# ====== TODO To be translated ======
translate Y ExtHWNovag {Novag Citrine}
# ====== TODO To be translated ======
translate Y ExtHWInputEngine {Input Engine}
# ====== TODO To be translated ======
translate Y ExtHWNoBoard {No board}
# ====== TODO To be translated ======
translate Y NovagReferee {Referee}
# ====== TODO To be translated ======
translate Y IEConsole {Input Engine Console}
# ====== TODO To be translated ======
translate Y IESending {Moves sent for}
# ====== TODO To be translated ======
translate Y IESynchronise {Synchronise}
# ====== TODO To be translated ======
translate Y IERotate  {Rotate}
# ====== TODO To be translated ======
translate Y IEUnableToStart {Unable to start Input Engine:}
# ====== TODO To be translated ======
translate Y DoneWithPosition {Done with position}
# ====== TODO To be translated ======
translate Y Board {Board}
# ====== TODO To be translated ======
translate Y showGameInfo {Show game info}
# ====== TODO To be translated ======
translate Y autoResizeBoard {Automatic resize of board}
# ====== TODO To be translated ======
translate Y DockTop {Move to top}
# ====== TODO To be translated ======
translate Y DockBottom {Move to bottom}
# ====== TODO To be translated ======
translate Y DockLeft {Move to left}
# ====== TODO To be translated ======
translate Y DockRight {Move to right}
# ====== TODO To be translated ======
translate Y Undock {Undock}
# ====== TODO To be translated ======
translate Y ChangeIcon {Change icon...}
# ====== TODO To be translated ======
}
# end of serbian.tcl
# spanish.tcl:
# Spanish translations for Scid.
# Contributed by Jordi Gonzlez Boada.
# Updated by Enrique Lopez.
# Updated by Benigno Hernndez Bacallado.
# Updated by Pedro Reina.
# Untranslated messages are marked with a "***" comment.

addLanguage S Espaol 1 ;#iso8859-1

proc setLanguage_S {} {

# File menu:
menuText S File "Archivo" 0
menuText S FileNew "Nuevo..." 0 {Crea una nueva base de datos Scid vaca}
menuText S FileOpen "Abrir..." 1 {Abre una base de datos Scid ya existente}
menuText S FileClose "Cerrar" 0 {Cierra la base de datos Scid activa}
menuText S FileFinder "Visor..." 0 {Abre la ventana del visor de archivos}
menuText S FileBookmarks "Partidas favoritas" 0 {Seleccionar partidas favoritas (Ctrl+B)}
menuText S FileBookmarksAdd "Aadir" 0 \
  {Seala la partida y posicin actual de la base de datos}
menuText S FileBookmarksFile "Archivar" 8 \
  {Archiva un marcador para la partida y posicin actual}
menuText S FileBookmarksEdit "Editar partidas favoritas..." 0 \
  {Edita los mens de las partidas favoritas}
menuText S FileBookmarksList "Mostrar partidas favoritas" 0 \
  {Muestra las carpetas de favoritas en una sola lista, sin submens}
menuText S FileBookmarksSub "Mostrar partidas marcadas con submens" 0 \
  {Muestra las carpetas de favoritas como submens, no una sola lista}
menuText S FileMaint "Mantenimiento" 0 \
  {Herramientas de mantenimiento de la base de datos Scid}
menuText S FileMaintWin "Ventana de mantenimiento" 0 \
  {Abre/cierra la ventana de mantenimiento de la base de datos Scid}
menuText S FileMaintCompact "Compactar base de datos..." 0 \
  {Compacta los archivos de la base de datos, quitando partidas borradas y nombres no usados}
menuText S FileMaintClass "Clasificar partidas por ECO..." 24 \
  {Recalcula el cdigo ECO de todas las partidas}
menuText S FileMaintSort "Ordenar base de datos..." 0 \
  {Ordena todas las partidas de la base de datos}
menuText S FileMaintDelete "Borrar partidas dobles..." 0 \
  {Encuentra partidas dobles y las coloca para ser borradas}
menuText S FileMaintTwin "Ventana de inspeccin de dobles" 11 \
  {Abre/actualiza la ventana de inspeccin de dobles}
menuText S FileMaintName "Ortografa de nombres" 0 {Herramientas de ortografa y edicin de nombres}
menuText S FileMaintNameEditor "Ventana de edicin de nombres" 22 \
  {Abre/cierra la ventana de edicin de nombres}
menuText S FileMaintNamePlayer "Comprobacin ortogrfica de nombres de jugadores..." 39 \
  {Comprobacin ortogrfica de jugadores usando archivo de comprobacin ortogrfica}
menuText S FileMaintNameEvent "Comprobacin ortogrfica de nombres de eventos..." 39 \
  {Comprobacin ortogrfica de eventos usando el archivo de comprobacin ortogrfica}
menuText S FileMaintNameSite "Comprobacin ortogrfica de nombres de lugares..." 39 \
  {Comprobacin ortogrfica de lugares usando el archivo de comprobacin ortogrfica}
menuText S FileMaintNameRound "Comprobacin ortogrfica de rondas..." 28 \
  {Comprobacin ortogrfica de rondas usando el archivo de comprobacin ortogrfica}
menuText S FileReadOnly "Slo lectura..." 5 \
  {Trata la actual base de datos como de slo lectura, previniendo cambios}
menuText S FileSwitch "Cambiar de base de datos" 0 \
  {Cambia a una base de datos abierta diferente}
menuText S FileExit "Salir" 0 {Salir de Scid}
menuText S FileMaintFixBase "Arreglar base corrupta" 0 {Intenta arreglar una base corrupta}

# Edit menu:
menuText S Edit "Editar" 0
menuText S EditAdd "Aadir variacin" 0 \
  {Aade una variacin a este movimiento en la partida}
menuText S EditDelete "Borrar variacin" 0 {Borra variacin para este movimiento}
menuText S EditFirst "Convertir en primera variacin" 0 \
  {Hace que una variacin sea la primera en la lista}
menuText S EditMain "Variacin a lnea principal" 0 \
   {Promover una variacin para que sea la lnea principal}
menuText S EditTrial "Probar variacin" 1 \
  {Inicia/para el modo de prueba, para ensayar una idea en el tablero}
menuText S EditStrip "Eliminar" 2 \
  {Elimina comentarios o variaciones de esta partida}
menuText S EditUndo "Deshacer" 0 {Deshace el ltimo cambio en la partida}
# ====== TODO To be translated ======
menuText S EditRedo "Redo" 0 {Redo last game change}
menuText S EditStripComments "Comentarios" 0 \
  {Quita todos los comentarios y variaciones de esta partida}
menuText S EditStripVars "Variaciones" 0 {Quita todas las variaciones de esta partida}
menuText S EditStripBegin "Movimientos desde el principio" 1 \
  {Quita los movimientos desde el principio de la partida}
menuText S EditStripEnd "Movimientos hasta el final" 0 \
  {Quita los movimientos hasta el final de la partida}
menuText S EditReset "Poner a cero la base de trabajo" 0 \
  {Pone a cero la base de trabajo (clipbase) para que est completamente vaca}
menuText S EditCopy "Copiar esta partida a la base de trabajo" 1 \
  {Copia esta partida a la base de trabajo (clipbase)}
menuText S EditPaste "Pegar la ltima partida de la base de trabajo" 2 \
  {Pega en la base actual la partida activa en la base de trabajo (clipbase)}
menuText S EditPastePGN "Pegar el texto del portapapeles como partida PGN..." 10 \
  {Interpreta el texto de la base de trabajo (clipbase) como una partida en notacin PGN y la pega aqu}
menuText S EditSetup "Iniciar tablero de posicin..." 26 \
  {Inicia el tablero de posicin con la posicin de la partida}
menuText S EditCopyBoard "Copiar posicin" 8 \
  {Copia el tablero actual en notacin FEN al portapapeles}
menuText S EditPasteBoard "Pegar tablero inicial" 6 \
  {Coloca el tablero inicial en el portapapeles}

# Game menu:
menuText S Game "Partida" 0
menuText S GameNew "Partida nueva" 0 \
  {Partida nueva, descarta cambios de la partida actual}
menuText S GameFirst "Cargar primera partida" 7 {Carga la primera partida filtrada}
menuText S GamePrev "Cargar partida anterior" 16 {Carga la anterior partida filtrada}
menuText S GameReload "Recargar partida actual" 0 \
  {Vuelve a cargar esta partida, descartando cualquier cambio hecho}
menuText S GameNext "Cargar siguiente partida" 7 {Carga la siguiente partida filtrada}
menuText S GameLast "Cargar ltima partida" 9 {Carga la ltima partida filtrada}
menuText S GameRandom "Cargar partida aleatoria" 16 {Carga aleatoriamente una partida filtrada}
menuText S GameNumber "Cargar partida nmero..." 3 \
  {Carga una partida poniendo su nmero}
menuText S GameReplace "Guardar: reemplazar partida..." 10 \
  {Guarda esta partida, reemplazando la antigua versin}
menuText S GameAdd "Guardar: aadir nueva partida..." 9 \
  {Guarda esta partida como una nueva partida en la base de datos}
menuText S GameDeepest "Identificar apertura" 1 \
  {Va a la posicin ms avanzada de la partida segn el libro ECO}
menuText S GameGotoMove "Ir al movimiento nmero..." 6 \
  {Ir al nmero de movimiento especificado en la partida actual}
menuText S GameNovelty "Encontrar novedad..." 12 \
  {Encuentra el primer movimiento de esta partida que no se ha jugado antes}

# Search Menu:
menuText S Search "Buscar" 0
menuText S SearchReset "Poner a cero el filtro" 0 \
  {Pone a cero el filtro para que todas la partidas estn incluidas}
menuText S SearchNegate "Invertir filtro" 0 \
  {Invierte el filtro para slo incluir las partidas excluidas}
menuText S SearchCurrent "Tablero actual..." 0 \
  {Busca por la posicin actual del tablero}
menuText S SearchHeader "Encabezamiento..." 0 \
  {Busca por informacin de encabezamiento (jugador, evento, etc.)}
menuText S SearchMaterial "Material/Patrn..." 0 \
  {Busca por material o patrn del tablero}
menuText S SearchUsing "Usar archivo de bsqueda..." 0 \
  {Busca usando un archivo de opciones de bsqueda}

# Windows menu:
menuText S Windows "Ventanas" 0
menuText S WindowsComment "Editor de comentarios" 0 \
  {Abre/cierra el editor de comentarios}
menuText S WindowsGList "Listado de partidas" 0 \
  {Abre/cierra la  ventana de listado de partidas}
menuText S WindowsPGN "Ventana PGN" 8 \
  {Abre/cierra la ventana de PGN (notacin de partida)}
menuText S WindowsPList "Buscador de jugadores" 2 {Abre/cierra el buscador de jugadores}
menuText S WindowsTmt "Visor de torneos" 9 {Abre/cierra el visor de torneos}
menuText S WindowsSwitcher "Bases de datos" 0 \
  {Abre/cierra la ventana de bases de datos}
menuText S WindowsMaint "Ventana de mantenimiento" 11 \
  {Abre/cierra la ventana de mantenimiento}
menuText S WindowsECO "Buscador ECO" 0 {Abre/cierra la ventana del buscador ECO}
menuText S WindowsRepertoire "Editor de repertorio" 10 \
  {Abrir/cerrar el editor de repertorio de aperturas}
menuText S WindowsStats "Ventana de estadsticas" 12 \
  {Abre/cierra la ventana de estadsticas del filtro}
menuText S WindowsTree "Ventana de rbol de aperturas" 6 {Abre/cierra la ventana de rbol de aperturas (Book)}
menuText S WindowsTB "Ventana de tablas de finales (TBs)" 8 \
  {Abre/cierra la ventana de TBs}
menuText S WindowsBook "Ventana de libros de aperturas (Book)" 0 {Abrir/Cerrar la ventana de libros de aperturas (Book)}
menuText S WindowsCorrChess "Ventana de Correo" 0 {Abrir/Cerrar la ventra de Correo}

# Tools menu:
menuText S Tools "Herramientas" 0
menuText S ToolsAnalysis "Motor de anlisis #1..." 0 \
  {Inicia/para el anlisis del motor de ajedrez #1}
menuText S ToolsAnalysis2 "Motor de anlisis #2..." 18 \
  {Inicia/para el anlisis del motor de ajedrez #2}
menuText S ToolsCross "Tabla cruzada" 0 {Muestra la tabla cruzada para esta partida}
menuText S ToolsEmail "Administrador de Email" 0 \
  {Abre/cierra la ventana del administrador de Email}
menuText S ToolsFilterGraph "Filtro grfico" 7 \
  {Abre/cierra la ventana del filtro grfico}
menuText S ToolsAbsFilterGraph "Filtro grfico Abs." 7 {Abrir/Cerrar la ventana de filtro grfico para valores absolutos}
menuText S ToolsOpReport "Informe de la apertura" 1 \
  {Crea un informe de la apertura para la posicin actual}
menuText S ToolsOpenBaseAsTree "Abrir base como rbol" 0   {Abrir una base y usarla en la ventana de rbol (Tree)}
menuText S ToolsOpenRecentBaseAsTree "Abrir base reciente como rbol" 0   {Abre una base reciente y la usa en ventana de rbol (Tree)} 
menuText S ToolsTracker "Rastreador de piezas"  14 {Abre la ventana del rastreador de piezas}
menuText S ToolsTraining "Entrenamiento"  0 {Entrenamiento (tctica, aperturas,...)}
menuText S ToolsTacticalGame "Partida tctica..."  0 {Juega una partida tctica}
menuText S ToolsSeriousGame "Partida seria..."  0 {Juega una partida seria}
menuText S ToolsTrainOpenings "Entrenamiento de aperturas"  0 {Entrenamiento con un repertorio}
menuText S ToolsTrainReviewGame "Revisar partida"  0 {Adivina movimientos jugados en una partida}
menuText S ToolsTrainTactics "Tctica (problemas)"  0 {Resuelve problemas de tctica}
menuText S ToolsTrainCalvar "Clculo de variaciones"  0 {Clculo de variaciones}
menuText S ToolsTrainFindBestMove "Encontrar la mejor jugada"  0 {Busca el movimiento mejor}
menuText S ToolsTrainFics "Jugar en internet..."  0 {Conecta a freechess.org}
# ====== TODO To be translated ======
menuText S ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText S ToolsBookTuning "Sintonizar libro de aperturas" 0 {Sintoniza el libro (Book)}
menuText S ToolsConnectHardware "Conectar hardware" 0 {Conecta hardware externo"}
menuText S ToolsConnectHardwareConfigure "Configuracin..." 1 {Configuracin}
menuText S ToolsConnectHardwareNovagCitrineConnect "Conectar Novag" 0 {Conecta Novag}
menuText S ToolsConnectHardwareInputEngineConnect "Conectar motor de entrada" 0 {Conecta un motor de entrada (e.d. DGT)}
menuText S ToolsPInfo "Informacin del jugador" 16 \
  {Abre/actualiza la ventana de informacin del jugador}
menuText S ToolsPlayerReport "Informe del jugador..." 3 \
  {Crea un informe sobre un jugador}
menuText S ToolsRating "Grfico del Elo..." 0 \
  {Grfico de la historia del Elo de los jugadores de la actual partida}
menuText S ToolsScore "Grfico de puntuacin..." 1 \
  {Muestra la ventana del grfico de puntuacin}
menuText S ToolsExpCurrent "Exportar la partida actual..." 0 \
  {Escribe la partida actual en un archivo de texto}
menuText S ToolsExpCurrentPGN "Exportar la partida a un archivo PGN..." 33 \
  {Escribe la partida actual en un archivo PGN}
menuText S ToolsExpCurrentHTML "Exportar la partida a un archivo HTML..." 33 \
  {Escribe la partida actual en un archivo HTML}
menuText S ToolsExpCurrentHTMLJS "Exportar la partida a un archivo HTML y JavaScript..." 15 \
  {Escribe la partida actual a un fichero HTML y JavaScript} 
menuText S ToolsExpCurrentLaTeX "Exportar la partida a un archivo LaTeX..." 33 \
  {Escribe la partida actual en un archivo LaTeX}
menuText S ToolsExpFilter "Exportar todas las partidas filtradas..." 1 \
  {Escribe todas las partidas filtradas en un archivo de texto}
menuText S ToolsExpFilterPGN "Exportar filtro a un archivo PGN..." 29 \
  {Escribe todas las partidas filtradas en un archivo PGN}
menuText S ToolsExpFilterHTML "Exportar filtro a un archivo HTML..." 29 \
  {Escribe todas las partidas filtradas en un archivo HTML}
menuText S ToolsExpFilterHTMLJS "Exportar filtro a un archivo HTML y JavaScript..." 17 \
  {Escribe todas las partidas filtradas a ficheros HTML y JavaScript}  
menuText S ToolsExpFilterLaTeX "Exportar filtro a un archivo LaTeX..." 29 \
  {Escribe todas las partidas filtradas en un archivo LaTeX}
menuText S ToolsImportOne "Importar una partida PGN..." 0 \
  {Importa una partida de un texto PGN}
menuText S ToolsImportFile "Importar un archivo de partidas PGN..." 2 \
  {Importa partidas de un archivo PGN}
menuText S ToolsStartEngine1 "Empezar motor 1" 0  {Empieza el motor 1}
menuText S ToolsStartEngine2 "Empezar motor 2" 0  {Empieza el motor 2}
menuText S ToolsCaptureBoard "Capturar Tablero Actual..." 0  {Guardar el tablero actual como imagen.}
menuText S Play "Jugar" 0
menuText S CorrespondenceChess "Ajedrez por correo" 0 \
  {Funciones para ajedrez por correo basado en email y Xfcc}
menuText S CCConfigure "Configurar..." 0 \
  {Configura herramientas externas y configuracin general}
menuText S CCConfigRelay "Configurar observaciones..." 10 {Configurar partidas para ser observadas}
menuText S CCOpenDB "Abrir base de datos..." 0 \
  {Abrir la base de correo por defecto}
menuText S CCRetrieve "Reparar partidas" 0 \
  {Repara partidas va ayuda externa (Xfcc)}
menuText S CCInbox "Procesar correo entrante" 0 \
  {Procesa todos los ficheros en correo entrante de Scid (Inbox)}
menuText S CCSend "Enviar movimiento" 0 \
  {Envia tu movimiento via eMail o ayuda externa (Xfcc)}
menuText S CCResign "Abandonar" 0 {Abandona}
menuText S CCClaimDraw "Reclamar tablas" 0 \
  {Envia un movimiento y reclama tablas}
menuText S CCOfferDraw "Ofrecer tablas" 0 \
  {Envia un movimiento y ofrecer tablas}
menuText S CCAcceptDraw "Aceptar tablas" 0 {Acepta un ofrecimiento de tablas}
menuText S CCNewMailGame "Nueva partida email..." 0 \
  {Empeza una nueva partida por email}
menuText S CCMailMove "Enviar jugada via email..." 0 \
  {Enva el movimiento via email al oponente}
menuText S CCGamePage "Pgina de la partida..." 0 \
  {Abre la partida desde el navegador}
menuText S CCEditCopy "Copiar lista de partidas a Clipbase" 0 \
  {Copia las partidas como una lista CSV a Clipbase}

# Options menu:
menuText S Options "Opciones" 0
menuText S OptionsBoard "Tablero" 0 {Opciones sobre el aspecto del tablero}
menuText S OptionsBoardSize "Tamao del tablero" 0 {Cambia el tamao del tablero}
menuText S OptionsBoardPieces "Estilo de piezas" 10 \
  {Cambia el estilo de piezas del tablero}
menuText S OptionsBoardColors "Colores..." 0 {Cambia los colores del tablero}
menuText S OptionsBoardGraphics "Escaques..." 0 {Elige texturas para escaques}
translate S OptionsBGW {Elegir textura para escaques}
translate S OptionsBoardGraphicsText {Elegir fichero grfico para escaques blancos y negros}
menuText S OptionsBoardNames "Nombres de jugador..." 0 {Edita lista de nombres de jugador}
menuText S OptionsExport "Exportacin" 0 {Cambia las opciones de exportacin de texto}
menuText S OptionsFonts "Fuentes" 0 {Cambia las fuentes}
menuText S OptionsFontsRegular "Habitual" 0 {Cambia la fuente habitual}
menuText S OptionsFontsMenu "Men" 0 {Cambia la fuente del men}
menuText S OptionsFontsSmall "Pequea" 0 {Cambia la fuente pequea}
menuText S OptionsFontsTiny "Tiny" 0 {Cambia la fuente diminuta}
menuText S OptionsFontsFixed "Ancho fijo" 0 {Cambia la fuente de ancho fijo}
menuText S OptionsGInfo "Informacin de la partida" 0 {Informacin de la partida}
menuText S OptionsLanguage "Idioma" 0 {Selecciona el idioma del programa}
menuText S OptionsMovesTranslatePieces "Traducir piezas" 0 \
  {Traduce la primera letra de las piezas}
menuText S OptionsMovesHighlightLastMove "Iluminar ltima jugada" 0 \
  {Ilumina la ltima jugada}
menuText S OptionsMovesHighlightLastMoveDisplay "Mostrar" 0 \
  {Muestra la ltima jugada iluminada}
menuText S OptionsMovesHighlightLastMoveWidth "Ancho" 0 {Espesor de la lnea}
menuText S OptionsMovesHighlightLastMoveColor "Color" 0 {Color de lnea}
# ====== TODO To be translated ======
menuText S OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText S OptionsMoves "Movimientos" 0 {Opciones de la entrada de movimientos}
menuText S OptionsMovesAsk "Preguntar antes de reemplazar movimientos" 0 \
  {Pregunta antes de sobreescribir cualquier movimiento existente}
menuText S OptionsMovesAnimate "Velocidad de la animacin" 1 \
  {Pone el tiempo usado para animar las jugadas}
menuText S OptionsMovesDelay "Demora del automovimiento..." 0 \
  {Pone el tiempo de demora para el modo de automovimiento}
menuText S OptionsMovesCoord "Entrada de movimientos coordinada" 0 \
  {Acepta entrada de movimientos en sistema "coordinado" ("g1f3")}
menuText S OptionsMovesSuggest "Mostrar movimientos sugeridos" 20 \
  {Activa/desactiva la sugerencia de movimientos}
menuText S OptionsShowVarPopup "Mostrar ventana de variaciones" 0 \
  {Activa/desactiva la ventana de variaciones}
menuText S OptionsMovesSpace "Aadir espacios detrs del nmero de movimiento" 0 \
  {Aade espacios detrs del nmero de movimiento}
menuText S OptionsMovesKey "Teclado inteligente" 0 \
  {Activa/desactiva la funcin de autocompletado inteligente de movimientos con teclado}
menuText S OptionsMovesShowVarArrows "Mostrar flechas para las variaciones" 0 \
  {Activa/desactiva mostrar flechas para las variaciones}
menuText S OptionsNumbers "Formato de nmeros" 11 \
  {Selecciona el formato de nmeros}
menuText S OptionsStartup "Inicio" 3 \
  {Selecciona las ventanas que se abren al comenzar}
menuText S OptionsTheme "Tema" 0 {Cambia el aspecto del interfaz}
menuText S OptionsWindows "Ventanas" 0 {Opciones de ventana}
menuText S OptionsWindowsIconify "Autominimizar" 4 \
  {Minimiza todas las ventanas cuando la ventana principal es minimizada}
menuText S OptionsWindowsRaise "Poner a la vista automticamente" 0 \
  {Hace visibles ciertas ventanas (ej. barras de progreso) siempre que sean tapadas}
menuText S OptionsSounds "Sonidos..." 2 \
  {Configura el sonido del anuncio de las jugadas}
menuText S OptionsWindowsDock "Ventanas en dique" 0 {Ventanas en dique}
menuText S OptionsWindowsSaveLayout "Salvar disposicin" 0 {Salva la disposicin}
menuText S OptionsWindowsRestoreLayout "Restaurar disposicin" 0 \
  {Restaura la disposicin}
menuText S OptionsWindowsShowGameInfo "Mostrar informacin de la partida" 0 \
  {Muestrar informacin de la partida}
menuText S OptionsWindowsAutoLoadLayout "Auto cargar primera disposicin" 0 \
  {Autocarga la primera disposicin al iniciar}
menuText S OptionsToolbar "Barra de herramientas ventana principal" 9 \
  {Muestra/oculta la barra de herramientas de la ventana principal}
menuText S OptionsECO "Cargar archivo ECO..." 7 \
  {Cargar el archivo de clasificacin ECO}
menuText S OptionsSpell "Cargar archivo de comprobacin ortogrfica..." 2 \
  {Carga el archivo de comprobacin ortogrfica Scid}
menuText S OptionsTable "Directorio de las tablas de finales (TB)..." 19 \
  {Selecciona el directorio de tablas finales; todas las TB de ese directorio sern usadas}
menuText S OptionsRecent "Archivos recientes..." 9 \
  {Cambia el nmero de archivos recientes mostrados en el men Archivo}
menuText S OptionsBooksDir "Carpeta de libros de aperturas..." 0 \
  {Fija la carpeta de los libros de aperturas (Books)}
menuText S OptionsTacticsBasesDir "Carpeta de bases de datos..." 0 \
  {Fija la carpeta de la base de entrenamiento tctico}
menuText S OptionsSave "Guardar opciones" 0 \
  "Guarda todas las opciones en el fichero $::optionsFile"
menuText S OptionsAutoSave "Autoguardar opciones al salir" 0 \
  {Guarda automticamente todas las opciones cuando se sale de Scid}

# Help menu:
menuText S Help "Ayuda" 1
menuText S HelpContents "Contenidos" 0 {Show the help contents page}
menuText S HelpIndex "ndice" 0 {Muestra la pgina ndice de la ayuda}
menuText S HelpGuide "Gua rpida" 0 {Muestra la pgina de la ayuda gua rpida}
menuText S HelpHints "Sugerencias" 1 {Muestra la pgina de la ayuda sugerencias}
menuText S HelpContact "Informacin de contacto" 15 \
  {Muestra la pgina de la ayuda de la informacin de contacto}
menuText S HelpTip "Sugerencia del da" 0 {Muestra una til sugerencia para Scid}
menuText S HelpStartup "Ventana de inicio" 0 {Muestra la ventana de inicio}
menuText S HelpAbout "Acerca de Scid" 10 {Informacin acerca de Scid}

# Game info box popup menu:
menuText S GInfoHideNext "Ocultar siguiente movimiento" 0
menuText S GInfoMaterial "Mostrar valor del material" 0
menuText S GInfoFEN "Mostrar FEN" 8
menuText S GInfoMarks "Mostrar casillas y flechas coloreadas" 29
menuText S GInfoWrap "Dividir lneas largas" 0
menuText S GInfoFullComment "Mostrar comentarios completos" 8
menuText S GInfoPhotos "Mostrar fotos" 5
menuText S GInfoTBNothing "TBs: nada" 5
menuText S GInfoTBResult  "TBs: slo resultado" 10
menuText S GInfoTBAll "TBs: resultado y mejor movimiento" 23
menuText S GInfoDelete "(No)Borrar esta partida" 4
menuText S GInfoMark "(No)Marcar esta partida" 4
menuText S GInfoInformant "Configurar valores de informacin" 0

# Main window buttons:
helpMsg S .main.fbutton.button.start {Ir al principio de la partida  (Tecla: Inicio)}
helpMsg S .main.fbutton.button.end {Ir al final de la partida  (Tecla: Fin)}
helpMsg S .main.fbutton.button.back {Ir atrs un movimiento  (Tecla: Flecha izquierda)}
helpMsg S .main.fbutton.button.forward {Ir adelante un movimiento  (Tecla: Flecha derecha)}
helpMsg S .main.fbutton.button.intoVar {Moverse dentro de una variacin  (Tecla rpida: v)}
helpMsg S .main.fbutton.button.exitVar {Dejar la variacin actual  (Tecla rpida: z)}
helpMsg S .main.fbutton.button.flip {Girar tablero  (Tecla rpida: .)}
helpMsg S .main.fbutton.button.coords {Poner/quitar las coordenadas del tablero  (Tecla rpida: 0)}
helpMsg S .main.fbutton.button.stm {Activa/desactiva el icono de turno de juego}
helpMsg S .main.fbutton.button.autoplay {Automovimiento de los movimientos  (Tecla: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg S .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg S .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg S .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate S Back {Atrs}
translate S Browse {Hojear}
translate S Cancel {Cancelar}
translate S Continue {Continuar}
translate S Clear {Limpiar}
translate S Close {Cerrar}
translate S Contents {Contenidos}
translate S Defaults {Por defecto}
translate S Delete {Borrar}
translate S Graph {Grfico}
translate S Help {Ayuda}
translate S Import {Importar}
translate S Index {ndice}
translate S LoadGame {Cargar partida}
translate S BrowseGame {Hojear partida}
translate S MergeGame {Incorporar partida}
translate S MergeGames {Mezclar o fusionar partidas}
translate S Preview {Vista previa}
translate S Revert {Retroceder}
translate S Save {Guardar}
translate S Search {Buscar}
translate S Stop {Parar}
translate S Store {Almacenar}
translate S Update {Actualizar}
translate S ChangeOrient {Cambiar orientacin de la ventana}
translate S ShowIcons {Mostrar iconos}
translate S None {Ninguno}
translate S First {Primera}
translate S Current {Actual}
translate S Last {ltima}

# General messages:
translate S game {partida}
translate S games {partidas}
translate S move {movimiento}
translate S moves {movimientos}
translate S all {todo}
translate S Yes {S}
translate S No {No}
translate S Both {Ambos}
translate S King {Rey}
translate S Queen {Dama}
translate S Rook {Torre}
translate S Bishop {Alfil}
translate S Knight {Caballo}
translate S Pawn {Pen}
translate S White {Blancas}
translate S Black {Negras}
translate S Player {Jugador}
translate S Rating {Elo}
translate S RatingDiff {Diferencia de Elo (Blancas - Negras)}
translate S AverageRating {Elo promedio}
translate S Event {Evento}
translate S Site {Lugar}
translate S Country {Pas}
translate S IgnoreColors {Ignorar colores}
translate S Date {Fecha}
translate S EventDate {Evento fecha}
translate S Decade {Dcada}
translate S Year {Ao}
translate S Month {Mes}
translate S Months {enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre}
translate S Days {dom lun mar mi jue vie sb}
translate S YearToToday {ltimo ao hasta hoy}
translate S Result {Resultado}
translate S Round {Ronda}
translate S Length {Longitud}
translate S ECOCode {Cdigo ECO}
translate S ECO {ECO}
translate S Deleted {Borrar}
translate S SearchResults {Buscar resultados}
translate S OpeningTheDatabase {Abriendo base de datos}
translate S Database {Base de datos}
translate S Filter {Filtro}
translate S noGames {no hay partidas}
translate S allGames {todas las partidas}
translate S empty {vaca}
translate S clipbase {clipbase}
translate S score {puntuacin}
translate S StartPos {Posicin inicial}
translate S Total {Total}
translate S readonly {slo lectura}

# Standard error messages:
translate S ErrNotOpen {Esta base de datos no est abierta.}
translate S ErrReadOnly {Esta base de datos es de slo lectura; no puede ser cambiada.}
translate S ErrSearchInterrupted {La busqueda se interrumpi; los resultados son incompletos.}

# Game information:
translate S twin {doble}
translate S deleted {borradas}
translate S comment {comentario}
translate S hidden {oculto}
translate S LastMove {ltimo movimiento}
translate S NextMove {Siguiente}
translate S GameStart {Inicio de partida}
translate S LineStart {Inicio de lnea}
translate S GameEnd {Fin de partida}
translate S LineEnd {Fin de lnea}

# Player information:
translate S PInfoAll {Resultados para <b>todas</b> las partidas}
translate S PInfoFilter {Resultados para las partidas <b>filtradas</b>}
translate S PInfoAgainst {Resultados contra}
translate S PInfoMostWhite {Aperturas ms comunes con blancas}
translate S PInfoMostBlack {Aperturas ms comunes con negras}
translate S PInfoRating {Historial de clasificacin}
translate S PInfoBio {Biografa}
translate S PInfoEditRatings {Editar Elos}

# Tablebase information:
translate S Draw {Tablas}
translate S stalemate {rey ahogado}
translate S withAllMoves {con todos los movimientos}
translate S withAllButOneMove {con todos los movimientos excepto uno}
translate S with {con}
translate S only {slo}
translate S lose {formas de perder}
translate S loses {hace perder}
translate S allOthersLose {todos los dems hacen perder}
translate S matesIn {mate en}
translate S hasCheckmated {jaque mate}
translate S longest {el mate ms largo}
translate S WinningMoves {Movimientos ganadores}
translate S DrawingMoves {Movimientos para tablas}
translate S LosingMoves {Movimientos perdedores}
translate S UnknownMoves {Movimientos de resultado desconocido}

# Tip of the day:
translate S Tip {Sugerencia}
translate S TipAtStartup {Sugerencia al iniciar}

# Tree window menus:
menuText S TreeFile "Archivo" 0
menuText S TreeFileFillWithBase "Rellenar cach con base" 0 \
  {Rellena el archivo cach con todas las partidas de la base actual}
menuText S TreeFileFillWithGame "Rellenar cach con partida" 0 \
  {Rellena el fichero cach con movimientos de la partida actual en la base actual}
menuText S TreeFileSetCacheSize "Tamao de cach" 0 {Fija el tamao del cach}
menuText S TreeFileCacheInfo "Informacin de cach" 0 \
  {Informacin y uso del cach}
menuText S TreeFileSave "Guardar archivo cach" 0 \
  {Guarda el archivo cach del rbol (.stc)}
menuText S TreeFileFill "Construir archivo cach" 2 \
  {Construye archivo cach con posiciones de apertura comunes}
menuText S TreeFileBest "Lista de mejores partidas" 9 \
  {Muestra la lista del rbol de mejores partidas}
menuText S TreeFileGraph "Ventana del grfico" 0 \
  {Muestra el grfico para esta rama del rbol}
menuText S TreeFileCopy "Copiar texto del rbol al portapapeles" 1 \
  {Copia texto del rbol al portapapeles}
menuText S TreeFileClose "Cerrar ventana del rbol" 0 \
  {Cerra ventana del rbol}
menuText S TreeMask "Mscara" 0
menuText S TreeMaskNew "Nuevo" 0 {Nueva mscara}
menuText S TreeMaskOpen "Abrir" 0 {Abre mscara}
menuText S TreeMaskOpenRecent "Abrir reciente" 0 {Abre mscara reciente}
menuText S TreeMaskSave "Salvar" 0 {Salva mscara}
menuText S TreeMaskClose "Cerrar" 0 {Cierra mscara}
menuText S TreeMaskFillWithGame "Llenar con partida" 0 \
  {Llena mscara con partida}
menuText S TreeMaskFillWithBase "Llenar con base" 0 \
  {Llena mscara con todas las partidas de la base}
menuText S TreeMaskInfo "Info" 0 {Muestra estadsticas para la mscara actual}
menuText S TreeMaskDisplay "Mostrar mapa de la mscara" 0 \
  {Muestra mscara en forma de rbol}
menuText S TreeMaskSearch "Buscar" 0 {Busca en mscara actual}
menuText S TreeSort "Ordenar" 0
menuText S TreeSortAlpha "Alfabticamente" 0
menuText S TreeSortECO "Por cdigo ECO" 11
menuText S TreeSortFreq "Por frecuencia" 4
menuText S TreeSortScore "Por puntuacin" 4
menuText S TreeOpt "Opciones" 1
menuText S TreeOptSlowmode "Modo Lento" 0 \
  {Movimiento lento para actualizaciones (alta calidad)}
menuText S TreeOptFastmode "Modo Rpido" 0 \
  {Movimiento rpido para actualizaciones (no transpone movimientos)}
menuText S TreeOptFastAndSlowmode "Modo rpido y lento" 0 \
  {Movimiento rpido y modo lento para actualizaciones}
menuText S TreeOptStartStop "Auto actualizado" 0 \
  {Actualizado automtico de la ventana del rbol}
menuText S TreeOptLock "Bloquear" 1 \
  {Bloquea/desbloquea el rbol de la base de datos actual}
menuText S TreeOptTraining "Entrenamiento" 2 \
  {Activa/desactiva el modo de entrenamiento de rbol}
menuText S TreeOptAutosave "Autoguardar archivo cach" 0 \
  {Guarda automticamente el archivo cach cuando se cierra la ventana de rbol}
menuText S TreeHelp "Ayuda" 1
menuText S TreeHelpTree "Ayuda del rbol" 4
menuText S TreeHelpIndex "ndice de la ayuda" 0
translate S SaveCache {Guardar cach}
translate S Training {Entrenamiento}
translate S LockTree {Bloquear}
translate S TreeLocked {Bloqueado}
translate S TreeBest {Mejor}
translate S TreeBestGames {Mejores partidas del rbol}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate S TreeTitleRow \
  {    Movim. ECO       Frecuencia   Puntu. AvElo Perf AvAo %Tablas}
translate S TreeTotal {TOTAL}
translate S DoYouWantToSaveFirst {Quieres salvar primero?}
translate S AddToMask {Aadir a mscara}
translate S RemoveFromMask {Eliminar desde la mscara}
translate S AddThisMoveToMask {Aadir este movimiento a la Mscara}
translate S SearchMask {Buscar en mscara}
translate S DisplayMask {Mostrar mscara}
translate S Nag {Cdigo de regao}
translate S Marker {Marcador}
translate S Include {Incluir}
translate S Exclude {Excluir}
translate S MainLine {Lnea principal}
translate S Bookmark {Marcador}
translate S NewLine {Lnea nueva}
translate S ToBeVerified {Para ser verificado}
translate S ToTrain {Para entrenar}
translate S Dubious {Dudoso}
translate S ToRemove {Para quitar}
translate S NoMarker {Sin marcador}
translate S ColorMarker {Color}
translate S WhiteMark {Blanco}
translate S GreenMark {Verde}
translate S YellowMark {Amarillo}
translate S BlueMark {Azul}
translate S RedMark {Rojo}
translate S CommentMove {Comentar movimiento}
translate S CommentPosition {Comentar posicin}
translate S AddMoveToMaskFirst {Aadir primero el movimiento a la mscara}
translate S OpenAMaskFileFirst {Abrir primero un fichero de mscara}
translate S Positions {Posiciones}
translate S Moves {Jugadas}

# Finder window:
menuText S FinderFile "Archivo" 0
menuText S FinderFileSubdirs "Mirar en subdirectorios" 0
menuText S FinderFileClose "Cierra visor de archivos" 0
menuText S FinderSort "Ordenar" 0
menuText S FinderSortType "Tipo" 0
menuText S FinderSortSize "Tamao" 0
menuText S FinderSortMod "Modificado" 0
menuText S FinderSortName "Nombre" 0
menuText S FinderSortPath "Camino" 0
menuText S FinderTypes "Tipos" 0
menuText S FinderTypesScid "Bases de datos Scid" 0
menuText S FinderTypesOld "Bases de datos Scid en formato antiguo" 12
menuText S FinderTypesPGN "Archivos PGN" 9
menuText S FinderTypesEPD "Archivos EPD (libro)" 0
menuText S FinderTypesRep "Archivos de repertorio" 12
menuText S FinderHelp "Ayuda" 1
menuText S FinderHelpFinder "Ayuda del visor de archivos" 0
menuText S FinderHelpIndex "ndice de la ayuda" 0
translate S FileFinder {Visor de archivos}
translate S FinderDir {Directorio}
translate S FinderDirs {Directorios}
translate S FinderFiles {Archivos}
translate S FinderUpDir {Arriba}
translate S FinderCtxOpen {Abrir}
translate S FinderCtxBackup {Copia de seguridad (Backup)}
translate S FinderCtxCopy {Copia}
translate S FinderCtxMove {Jugada}
translate S FinderCtxDelete {Borrar}

# Player finder:
menuText S PListFile "Archivo" 0
menuText S PListFileUpdate "Actualizar" 0
menuText S PListFileClose "Cierra el buscador de jugadores" 0
menuText S PListSort "Ordenar" 0
menuText S PListSortName "Nombre" 0
menuText S PListSortElo "Elo" 0
menuText S PListSortGames "Partidas" 0
menuText S PListSortOldest "Ms antiguo" 10
menuText S PListSortNewest "Ms nuevo" 4

# Tournament finder:
menuText S TmtFile "Archivo" 0
menuText S TmtFileUpdate "Actualizar" 0
menuText S TmtFileClose "Cierra el visor de torneos" 0
menuText S TmtSort "Ordenar" 0
menuText S TmtSortDate "Fecha" 0
menuText S TmtSortPlayers "Jugadores" 0
menuText S TmtSortGames "Partidas" 0
menuText S TmtSortElo "Elo" 0
menuText S TmtSortSite "Lugar" 0
menuText S TmtSortEvent "Evento" 1
menuText S TmtSortWinner "Ganador" 0
translate S TmtLimit "Lmite de lista"
translate S TmtMeanElo "Media de Elo inferior"
translate S TmtNone "No se han encontrado torneos concordantes."

# Graph windows:
menuText S GraphFile "Archivo" 0
menuText S GraphFileColor "Guardar como Postscript en color..." 24
menuText S GraphFileGrey "Guardar como Postscript en escala de grises..." 34
menuText S GraphFileClose "Cerrar ventana" 7
menuText S GraphOptions "Opciones" 0
menuText S GraphOptionsWhite "Blancas" 0
menuText S GraphOptionsBlack "Negras" 0
menuText S GraphOptionsBoth "Ambos" 0
menuText S GraphOptionsPInfo "Jugador Informacin jugador" 0
translate S GraphFilterTitle "Filtro grfico: frecuencia por 1000 partidas"
translate S GraphAbsFilterTitle "Filtro grfico: frecuencia de las partidas"
translate S ConfigureFilter {Configurar Eje-X para Ao, Rating y Movimientos}
translate S FilterEstimate "Estimar"
translate S TitleFilterGraph "Scid: Filtro Grfico"

# Analysis window:
translate S AddVariation {Aadir variacin}
translate S AddAllVariations {Aadir todas las variaciones}
translate S AddMove {Aadir movimiento}
translate S Annotate {Anotar}
translate S ShowAnalysisBoard {Mostrar tablero de anlisis}
translate S ShowInfo {Muestra info del motor}
translate S FinishGame {Finalizar partida}
translate S StopEngine {Parar motor}
translate S StartEngine {Empezar motor}
translate S LockEngine {Bloquea motor en posicin actual}
translate S AnalysisCommand {Direccin de anlisis}
translate S PreviousChoices {Eleccin previa}
translate S AnnotateTime {Poner el tiempo entre movimientos en segundos}
translate S AnnotateWhich {Aadir variaciones}
translate S AnnotateAll {Para movimientos de ambos lados}
translate S AnnotateAllMoves {Anotar todos los movimientos}
translate S AnnotateWhite {Slo para movimientos de las blancas}
translate S AnnotateBlack {Slo para movimientos de las negras}
translate S AnnotateBlundersOnly {Cuando el movimiento de la partida es un error}
translate S AnnotateBlundersOnlyScoreChange {Anlisis reporta errores, con cambio de puntuacin desde: }
translate S BlundersThreshold {Umbral del error }
translate S ScoreAllMoves {Puntuar todos los movimientos}
translate S LowPriority {Baja prioridad del procesador}
translate S ClickHereToSeeMoves {Pulsa aqu para ver movimientos}
translate S ConfigureInformant {Configurar informaciones}
translate S Informant!? {Movimiento interesante}
translate S Informant? {Movimiento malo}
translate S Informant?? {Desastroso}
translate S Informant?! {Movimiento dudoso}
translate S Informant+= {Blancas tienen una ligera ventaja}
translate S Informant+/- {Blancas tienen ventaja}
translate S Informant+- {Blancas tienen una ventaja decisiva}
translate S Informant++- {La partida es considerada ganada}
translate S Book {Libro}
translate S OtherBookMoves {Otros movimientos del libro}
translate S OtherBookMovesTooltip {Movimientos para los que el oponente tiene una respuesta}

# Analysis Engine open dialog:
translate S EngineList {Lista de motores de anlisis}
translate S EngineName {Nombre}
translate S EngineCmd {Orden}
translate S EngineArgs {Parmetros}
translate S EngineDir {Directorio}
translate S EngineElo {Elo}
translate S EngineTime {Fecha}
translate S EngineNew {Nuevo}
translate S EngineEdit {Editar}
translate S EngineRequired {Los campos en negrita son obligatorios; los dems opcionales}

# Stats window menus:
menuText S StatsFile "Archivo" 0
menuText S StatsFilePrint "Imprimir en archivo..." 0
menuText S StatsFileClose "Cerrar ventana" 0
menuText S StatsOpt "Opciones" 0

# PGN window menus:
menuText S PgnFile "Archivo" 0
menuText S PgnFileCopy "Copiar partida al portapapeles" 0
menuText S PgnFilePrint "Imprimir en archivo..." 0
menuText S PgnFileClose "Cerrar ventana PGN" 0
menuText S PgnOpt "Presentacin" 0
menuText S PgnOptColor "Color de la presentacin" 0
menuText S PgnOptShort "Encabezado pequeo (3 lneas)" 13
menuText S PgnOptSymbols "Anotaciones simblicas" 0
menuText S PgnOptIndentC "Sangra en comentarios" 0
menuText S PgnOptIndentV "Sangra en variaciones" 11
menuText S PgnOptColumn "Estilo de columna (un movimiento por lnea)" 1
menuText S PgnOptSpace "Espacio despus del nmero del movimiento" 0
menuText S PgnOptStripMarks "Quitar cdigos de color en casilla/flecha" 3
menuText S PgnOptBoldMainLine "Usar texto en negrita para las jugadas principales" 4
menuText S PgnColor "Colores" 1
menuText S PgnColorHeader "Encabezamiento..." 0
menuText S PgnColorAnno "Anotaciones..." 0
menuText S PgnColorComments "Comentarios..." 0
menuText S PgnColorVars "Variaciones..." 0
menuText S PgnColorBackground "Fondo..." 0
menuText S PgnColorMain "Lnea principal..." 0
menuText S PgnColorCurrent "Color de fondo del ltimo movimiento..." 1
menuText S PgnHelp "Ayuda" 1
menuText S PgnHelpPgn "Ayuda de PGN" 9
menuText S PgnHelpIndex "ndice de la ayuda" 0
translate S PgnWindowTitle {Planilla - partida %u}

# Crosstable window menus:
menuText S CrosstabFile "Archivo" 0
menuText S CrosstabFileText "Imprimir en archivo texto..." 20
menuText S CrosstabFileHtml "Imprimir en archivo HTML..." 20
menuText S CrosstabFileLaTeX "Imprimir en archivo LaTeX..." 20
menuText S CrosstabFileClose "Cerrar ventana de tabla cruzada" 0
menuText S CrosstabEdit "Editar" 0
menuText S CrosstabEditEvent "Evento" 0
menuText S CrosstabEditSite "Lugar" 0
menuText S CrosstabEditDate "Fecha" 0
menuText S CrosstabOpt "Presentacin" 0
menuText S CrosstabOptAll "Todos contra todos" 0
menuText S CrosstabOptSwiss "Suizo" 0
menuText S CrosstabOptKnockout "Eliminatoria directa" 0
menuText S CrosstabOptAuto "Auto" 0
menuText S CrosstabOptAges "Edad en aos" 1
menuText S CrosstabOptNats "Nacionalidades" 0
menuText S CrosstabOptRatings "Elo" 0
menuText S CrosstabOptTitles "Ttulos" 0
menuText S CrosstabOptBreaks "Puntuaciones de desempate" 0
menuText S CrosstabOptDeleted "Incluir partidas borradas" 17
menuText S CrosstabOptColors "Colores (slo en tabla de suizos)" 0
menuText S CrosstabOptColumnNumbers "Columnas numeradas (Slo en tabla todos contra todos)" 11
menuText S CrosstabOptGroup "Grupos de clasificacin" 0
menuText S CrosstabSort "Ordenar" 0
menuText S CrosstabSortName "Por nombre" 4
menuText S CrosstabSortRating "Por Elo" 4
menuText S CrosstabSortScore "Por puntuacin" 4
menuText S CrosstabColor "Color" 2
menuText S CrosstabColorPlain "Texto simple" 0
menuText S CrosstabColorHyper "Hipertexto" 0
menuText S CrosstabHelp "Ayuda" 1
menuText S CrosstabHelpCross "Ayuda de tabla cruzada" 9
menuText S CrosstabHelpIndex "ndice de la ayuda" 0
translate S SetFilter {Poner filtro}
translate S AddToFilter {Aadir al filtro}
translate S Swiss {Suizo}
translate S Category {Categora}

# Opening report window menus:
menuText S OprepFile "Archivo" 0
menuText S OprepFileText "Imprimir en archivo texto..." 20
menuText S OprepFileHtml "Imprimir en archivo HTML..." 20
menuText S OprepFileLaTeX "Imprimir en archivo LaTeX..." 20
menuText S OprepFileOptions "Opciones..." 0
menuText S OprepFileClose "Cerrar ventana del informe de la apertura" 0
menuText S OprepFavorites "Favoritos" 1
menuText S OprepFavoritesAdd "Aadir informe..." 0
menuText S OprepFavoritesEdit "Editar informe favorito..." 0
menuText S OprepFavoritesGenerate "Generar informe..." 0
menuText S OprepHelp "Ayuda" 1
menuText S OprepHelpReport "Ayuda del informe de la apertura" 11
menuText S OprepHelpIndex "ndice de la ayuda" 0

# Repertoire editor:
menuText S RepFile "Archivo" 0
menuText S RepFileNew "Nuevo" 0
menuText S RepFileOpen "Abrir..." 0
menuText S RepFileSave "Guardar..." 0
menuText S RepFileSaveAs "Guardar como..." 1
menuText S RepFileClose "Cerrar ventana" 0
menuText S RepEdit "Editar" 0
menuText S RepEditGroup "Aadir grupo" 7
menuText S RepEditInclude "Aadir lnea incluida" 13
menuText S RepEditExclude "Aadir lnea excluida" 13
menuText S RepView "Ver" 0
menuText S RepViewExpand "Expandir todos los grupos" 0
menuText S RepViewCollapse "Colapsar todos los grupos" 0
menuText S RepSearch "Buscar" 0
menuText S RepSearchAll "Todo el repertorio..." 0
menuText S RepSearchDisplayed "Slo las lneas mostradas..." 16
menuText S RepHelp "Ayuda" 1
menuText S RepHelpRep "Ayuda del repertorio" 10
menuText S RepHelpIndex "ndice de la ayuda" 0
translate S RepSearch "Bsqueda del repertorio"
translate S RepIncludedLines "Lneas incluidas"
translate S RepExcludedLines "Lneas excluidas"
translate S RepCloseDialog {Este repertorio tiene cambios no guardados.

Realmente quieres continuar y descartar los cambios que has hecho?
}

# Header search:
translate S HeaderSearch {Bsqueda por encabezamiento}
translate S EndSideToMove {Bando a mover al final de la partida}
translate S GamesWithNoECO {Partidas sin ECO?}
translate S GameLength {Duracin:}
translate S FindGamesWith {Encontrar partidas con}
translate S StdStart {Inicio estndar}
translate S Promotions {Promociones}
translate S Comments {Comentarios}
translate S Variations {Variaciones}
translate S Annotations {Anotaciones}
translate S DeleteFlag {Seal de borrado}
translate S WhiteOpFlag {Apertura de las blancas}
translate S BlackOpFlag {Apertura de las negras}
translate S MiddlegameFlag {Mediojuego}
translate S EndgameFlag {Finales}
translate S NoveltyFlag {Novedad}
translate S PawnFlag {Estructura de peones}
translate S TacticsFlag {Tcticas}
translate S QsideFlag {Juego del lado de dama}
translate S KsideFlag {Juego del lado de rey}
translate S BrilliancyFlag {Genialidad}
translate S BlunderFlag {Error}
translate S UserFlag {Usuario}
translate S PgnContains {PGN contiene texto}
translate S Annotator {Comentarista}
translate S Cmnts {Slo partidas comentadas}

# Game list window:
translate S GlistNumber {Nmero}
translate S GlistWhite {Blancas}
translate S GlistBlack {Negras}
translate S GlistWElo {B-Elo}
translate S GlistBElo {N-Elo}
translate S GlistEvent {Evento}
translate S GlistSite {Lugar}
translate S GlistRound {Ronda}
translate S GlistDate {Fecha}
translate S GlistYear {Ao}
translate S GlistEDate {Evento-Fecha}
translate S GlistResult {Resultado}
translate S GlistLength {Longitud}
translate S GlistCountry {Pas}
translate S GlistECO {ECO}
translate S GlistOpening {Apertura}
translate S GlistEndMaterial {Material final}
translate S GlistDeleted {Borrado}
translate S GlistFlags {Seal}
translate S GlistVars {Variaciones}
translate S GlistComments {Comentarios}
translate S GlistAnnos {Anotaciones}
translate S GlistStart {Inicio}
translate S GlistGameNumber {Nmero de partida}
# ====== TODO To be translated ======
translate S GlistAverageElo {Average Elo}
# ====== TODO To be translated ======
translate S GlistRating {Rating}
translate S GlistFindText {Encontrar texto}
translate S GlistMoveField {Movimiento}
translate S GlistEditField {Configurar}
translate S GlistAddField {Aadir}
translate S GlistDeleteField {Quitar}
translate S GlistWidth {Anchura}
translate S GlistAlign {Alinear}
# ====== TODO To be translated ======
translate S GlistAlignL {Align: left}
# ====== TODO To be translated ======
translate S GlistAlignR {Align: right}
# ====== TODO To be translated ======
translate S GlistAlignC {Align: center}
translate S GlistColor {Color}
translate S GlistSep {Separador}
# ====== TODO To be translated ======
translate S GlistCurrentSep {-- Current --}
# ====== TODO To be translated ======
translate S GlistNewSort {New}
# ====== TODO To be translated ======
translate S GlistAddToSort {Add}
# ====== TODO To be translated ======
translate S GsortSort {Sort...}
# ====== TODO To be translated ======
translate S GsortDate {Date}
# ====== TODO To be translated ======
translate S GsortYear {Year}
# ====== TODO To be translated ======
translate S GsortEvent {Event}
# ====== TODO To be translated ======
translate S GsortSite {Site}
# ====== TODO To be translated ======
translate S GsortRound {Round}
# ====== TODO To be translated ======
translate S GsortWhiteName {White Name}
# ====== TODO To be translated ======
translate S GsortBlackName {Black Name}
# ====== TODO To be translated ======
translate S GsortECO {ECO}
# ====== TODO To be translated ======
translate S GsortResult {Result}
# ====== TODO To be translated ======
translate S GsortMoveCount {Move Count}
# ====== TODO To be translated ======
translate S GsortAverageElo {Average Elo}
# ====== TODO To be translated ======
translate S GsortCountry {Country}
# ====== TODO To be translated ======
translate S GsortDeleted {Deleted}
# ====== TODO To be translated ======
translate S GsortEventDate {Event Date}
# ====== TODO To be translated ======
translate S GsortWhiteElo {White Elo}
# ====== TODO To be translated ======
translate S GsortBlackElo {Black Elo}
# ====== TODO To be translated ======
translate S GsortComments {Comments}
# ====== TODO To be translated ======
translate S GsortVariations {Variations}
# ====== TODO To be translated ======
translate S GsortNAGs {NAGs}
# ====== TODO To be translated ======
translate S GsortAscending {Ascending}
# ====== TODO To be translated ======
translate S GsortDescending {Descending}
# ====== TODO To be translated ======
translate S GsortAdd {Add}
# ====== TODO To be translated ======
translate S GsortStore {Store}
# ====== TODO To be translated ======
translate S GsortLoad {Load}
translate S GlistRemoveThisGameFromFilter  {Quita esta partida del filtro}
translate S GlistRemoveGameAndAboveFromFilter  {Quita esta partida y todas las de arriba del filtro}
translate S GlistRemoveGameAndBelowFromFilter  {Quita esta partida y todas las de abajo del filtro}
translate S GlistDeleteGame {Elimina/recupera esta partida de la base}
translate S GlistDeleteAllGames {Elimina todas las partidas de la base que aparecen en el filtro}
translate S GlistUndeleteAllGames {Recupera todas las partidas borradas de la base que aparecen en el filtro}
translate S GlistMergeGameInBase {Fusionar la partida en otra base} 

# Maintenance window:
translate S DatabaseName {Nombre de la base:}
translate S TypeIcon {Tipo de icono:}
translate S NumOfGames {Partidas:}
translate S NumDeletedGames {Partidas borradas:}
translate S NumFilterGames {Partidas en el filtro:}
translate S YearRange {Rango de aos:}
translate S RatingRange {Rango de Elo:}
translate S Description {Descripcin}
translate S Flag {Seal}
translate S CustomFlags {Seales personalizadas}
translate S DeleteCurrent {Borrar partida actual}
translate S DeleteFilter {Borrar partidas filtradas}
translate S DeleteAll {Borrar todas las partidas}
translate S UndeleteCurrent {No borrar partida actual}
translate S UndeleteFilter {No borrar partidas filtradas}
translate S UndeleteAll {No borrar todas las partidas}
translate S DeleteTwins {Borrar partidas dobles}
translate S MarkCurrent {Marcar partida actual}
translate S MarkFilter {Marcar partidas filtradas}
translate S MarkAll {Marcar todas las partidas}
translate S UnmarkCurrent {No marcar partida actual}
translate S UnmarkFilter {No marcar partidas filtradas}
translate S UnmarkAll {No marcar todas las partidas}
translate S Spellchecking {Revisin ortogrfica}
translate S Players {Jugadores}
translate S Events {Eventos}
translate S Sites {Lugares}
translate S Rounds {Rondas}
translate S DatabaseOps {Operaciones con la base de datos}
translate S ReclassifyGames {Reclasificar partidas por ECO...}
translate S CompactDatabase {Compactar base de datos}
translate S SortDatabase {Ordenar base de datos}
translate S AddEloRatings {Aadir clasificacin Elo}
translate S AutoloadGame {Autocargar nmero de partida}
translate S StripTags {Quitar etiquetas PGN}
translate S StripTag {Quitar etiquetas}
translate S Cleaner {MultiHerramienta}
translate S CleanerHelp {
Scid ejecutar, en la actual base de datos, todas las acciones de mantenimiento
que selecciones de la siguiente lista.

Se aplicar el estado actual en la clasificacin ECO y el dilogo de borrado de
dobles si seleccionas esas funciones.
}
translate S CleanerConfirm {
Una vez que la MultiHerramienta de mantenimiento se inicia no puede ser interrumpida!

Esto puede tomar mucho tiempo en una base de datos grande, dependiendo de las funciones que hallas seleccionado y su estado actual.

Ests seguro de querer comenzar las funciones de mantenimiento que has seleccionado?
}
translate S TwinCheckUndelete {Pulsar "u" para no borrar ninguna (undelete)}
translate S TwinCheckprevPair {Pareja anterior}
translate S TwinChecknextPair {Pareja siguiente}
translate S TwinChecker {Scid: Verificar partidas dobles}
translate S TwinCheckTournament {Partidas en torneo:}
translate S TwinCheckNoTwin {No doble  }
translate S TwinCheckNoTwinfound {No fueron detectados dobles para esta partida.\nPara mostrar dobles usando esta ventana debes usar la funcin Borrar partidas dobles..." }
translate S TwinCheckTag {Compartir etiquetas...}
translate S TwinCheckFound1 {Scid encontr $result partidas dobles}
translate S TwinCheckFound2 {y pone pone sus banderas de borrado}
translate S TwinCheckNoDelete {No hay partidas en esta base para borrar.}
translate S TwinCriteria1 {Tus parmetros para encontrar partidas dobles potencialmente pueden causar partidas no-dobles con movimientos similares a ser marcadas como dobles.}
translate S TwinCriteria2 {Es recomendable que si elijes "No" para "algunos movimientos", elijas "S" para los parmetros colores, eventos, lugar, ronda, ao y mes.\nQuieres continuar y borrar partidas dobles en cualquier caso?}
translate S TwinCriteria3 {Es recomendable que especifiques "S" para al menos dos parmetros de "mismo lugar", "misma ronda" y "mismo ao".\nQuieres continuar y borrar dobles en todo caso?}
translate S TwinCriteriaConfirm {Scid: Confirmar parmetros para partidas dobles}
translate S TwinChangeTag "Cambiar las siguientes etiquetas de las:\n\n partidas"
translate S AllocRatingDescription "Este comando usar el actual fichero SpellCheck para aadir  puntuaciones ELO y partidas en esta base. Donde quiera que un jugador no tenga puntuacin pero su puntuacin en el listado del  fichero  spellcheck , su puntuacin ser aadida."
translate S RatingOverride "Sobreescribir puntuaciones existentes no nulas?"
translate S AddRatings "Aadir puntuaciones a:"
translate S AddedRatings {Scid aadi $r puntuaciones Elo en $g partidas.}
translate S NewSubmenu "Nuevo submenu"

# Comment editor:
translate S AnnotationSymbols  {Smbolos de anotacin:}
translate S Comment {Comentario:}
translate S InsertMark {Insertar marca}
translate S InsertMarkHelp {
Insertar/quitar marca: Selecciona color, tipo, casilla.
Insertar/quitar flecha: Botn derecho sobre dos casillas.
}

# Nag buttons in comment editor:
translate S GoodMove {Buena jugada}
translate S PoorMove {Mala jugada}
translate S ExcellentMove {Jugada excelente}
translate S Blunder {Error}
translate S InterestingMove {Jugada interesante}
translate S DubiousMove {Jugada dudosa}
translate S WhiteDecisiveAdvantage {Las blancas tienen decisiva ventaja}
translate S BlackDecisiveAdvantage {Las negras tienen decisiva ventaja}
translate S WhiteClearAdvantage {Las blancas tienen clara ventaja}
translate S BlackClearAdvantage {Las negras tienen clara ventaja}
translate S WhiteSlightAdvantage {Las blancas tienen ligera ventaja}
translate S BlackSlightAdvantage {Las negras tienen ligera ventaja}
translate S Equality {Igualdad}
translate S Unclear {Incierto}
translate S Diagram {Diagrama}

# Board search:
translate S BoardSearch {Tablero de bsqueda}
translate S FilterOperation {Operacin en filtro actual:}
translate S FilterAnd {Y (Restringir filtro)}
translate S FilterOr {O (Aadir al filtro)}
translate S FilterIgnore {IGNORAR (Poner a cero el filtro)}
translate S SearchType {Tipo de bsqueda:}
translate S SearchBoardExact {Posicin exacta (todas las piezas en las mismas casillas)}
translate S SearchBoardPawns {Peones (igual material, todos los peones en las mismas casillas)}
translate S SearchBoardFiles {Columnas (igual material, todos los peones en las mismas columnas)}
translate S SearchBoardAny {Cualquiera (igual material, peones y piezas en cualquier parte)}
translate S SearchInRefDatabase {Bsqueda en la base de referencia}
translate S LookInVars {Mirar en variaciones}

# Material search:
translate S MaterialSearch {Bsqueda de material}
translate S Material {Material}
translate S Patterns {Patrones}
translate S Zero {Cero}
translate S Any {Cualquiera}
translate S CurrentBoard {Tablero actual}
translate S CommonEndings {Finales comunes}
translate S CommonPatterns {Patrones comunes}
translate S MaterialDiff {Diferencia de material}
translate S squares {casillas}
translate S SameColor {Igual color}
translate S OppColor {Color opuesto}
translate S Either {Cualquiera}
translate S MoveNumberRange {Rango de nmero de movimientos}
translate S MatchForAtLeast {Encuentro de al menos}
translate S HalfMoves {medios movimientos}

# Common endings in material search:
translate S EndingPawns {Finales de peones}
translate S EndingRookVsPawns {Torre vs. peon(es)}
translate S EndingRookPawnVsRook {Torre y un pen vs. torre}
translate S EndingRookPawnsVsRook {Torre y peon(es) vs. torre}
translate S EndingRooks {Finales de torre vs. torre}
translate S EndingRooksPassedA {Finales de torre vs. torre con pen pasado}
translate S EndingRooksDouble {Finales de dos torres}
translate S EndingBishops {Finales de alfil vs. alfil}
translate S EndingBishopVsKnight {Finales de alfil vs. caballo}
translate S EndingKnights {Finales de caballo vs. caballo}
translate S EndingQueens {Finales de dama vs. dama}
translate S EndingQueenPawnVsQueen {Dama y un pen vs. dama}
translate S BishopPairVsKnightPair {Medio juego de dos alfiles vs. dos caballos}

# Common patterns in material search:
translate S PatternWhiteIQP {PDA blanco}
translate S PatternWhiteIQPBreakE6 {PDA blanco: d4-d5 ruptura vs. e6}
translate S PatternWhiteIQPBreakC6 {PDA blanco: d4-d5 ruptura vs. c6}
translate S PatternBlackIQP {PDA negro}
translate S PatternWhiteBlackIQP {PDA blanco vs. PDA negro}
translate S PatternCoupleC3D4 {Pareja de peones aislados blancos c3+d4}
translate S PatternHangingC5D5 {Peones colgantes negros en c5 y d5}
translate S PatternMaroczy {Centro Maroczy (con peones en c4 y e4)}
translate S PatternRookSacC3 {Sacrificio de torre en c3}
translate S PatternKc1Kg8 {O-O-O vs. O-O (Rc1 vs. Rg8)}
translate S PatternKg1Kc8 {O-O vs. O-O-O (Rg1 vs. Rc8)}
translate S PatternLightFian {Fianchettos de casillas claras (Alfil-g2 vs. Alfil-b7)}
translate S PatternDarkFian {Fianchettos de casillas oscuras (Alfil-b2 vs. Alfil-g7)}
translate S PatternFourFian {Cuatro Fianchettos (Alfiles en b2,g2,b7,g7)}

# Game saving:
translate S Today {Hoy}
translate S ClassifyGame {Clasificar partida}

# Setup position:
translate S EmptyBoard {Tablero vaco}
translate S InitialBoard {Tablero inicial}
translate S SideToMove {Lado que mueve}
translate S MoveNumber {Movimiento nmero}
translate S Castling {Enroque}
translate S EnPassantFile {Columna al paso}
translate S ClearFen {Quitar FEN}
translate S PasteFen {Pegar FEN}
translate S SaveAndContinue {Salvar (grabar) y continuar}
translate S DiscardChangesAndContinue {Descartar \n cambios y continuar}
translate S GoBack {Volver atrs}

# Replace move dialog:
translate S ReplaceMove {Reemplazar movimiento}
translate S AddNewVar {Aadir nueva variacin}
translate S NewMainLine {Nueva lnea principal}
translate S ReplaceMoveMessage {Ya existe un movimiento.

Puedes reemplazarlo, descartando todos los movimientos posteriores, o aadirlo como una nueva variacin.

(Puedes evitar seguir viendo este mensaje en el futuro desactivando la opcin "Preguntar antes de reemplazar movimientos" en el men Opciones: Movimientos.)}

# Make database read-only dialog:
translate S ReadOnlyDialog {Si haces que esta base de datos sea de slo lectura no se permitirn hacer cambios. No se podrn guardar o reemplazar partidas y no se podrn alterar las seales de borrada. Cualquier ordenacin o clasificacin por ECO ser temporal.

Puedes hacer fcilmente escribible la base de datos otra vez cerrndola y abrindola.

Realmente quieres hacer que esta base de datos sea de slo lectura?}

# Clear game dialog:
translate S ClearGameDialog {Esta partida ha sido cambiada.

Realmente quieres continuar y eliminar los cambios hechos en ella?
}

# Exit dialog:
translate S ExitDialog {Realmente quieres salir de Scid?}
translate S ExitUnsaved {La siguiente base de datos tiene cambios en partidas no guardados. Si sales ahora se perdern estos cambios.}

# Import window:
translate S PasteCurrentGame {Pegar partida actual}
translate S ImportHelp1 \
  {Introducir o pegar una partida en formato PGN en el marco superior.}
translate S ImportHelp2 \
  {Cualquier error importando la partida ser mostrado aqu.}
translate S OverwriteExistingMoves {Sobreescribir movimientos existentes?}

# ECO Browser:
translate S ECOAllSections {todas las divisiones ECO}
translate S ECOSection {divisin ECO}
translate S ECOSummary {Resumen de}
translate S ECOFrequency {Frecuencia de los subcdigos para}

# Opening Report:
translate S OprepTitle {Informe de la apertura}
translate S OprepReport {Informe}
translate S OprepGenerated {Generado por}
translate S OprepStatsHist {Estadsticas e historia}
translate S OprepStats {Estadsticas}
translate S OprepStatAll {Todas las partidas referidas}
translate S OprepStatBoth {Ambos con Elo}
translate S OprepStatSince {Desde}
translate S OprepOldest {Partidas ms antiguas}
translate S OprepNewest {Partidas ms nuevas}
translate S OprepPopular {Popularidad actual}
translate S OprepFreqAll {Frecuencia durante todos los aos: }
translate S OprepFreq1   {Desde el ltimo ao hasta hoy:     }
translate S OprepFreq5   {En los ltimos 5 aos hasta hoy:   }
translate S OprepFreq10  {En los ltimos 10 aos hasta hoy:  }
translate S OprepEvery {una vez cada %u partidas}
translate S OprepUp {sube un %u%s respecto al total de aos}
translate S OprepDown {baja un %u%s respecto al total de aos}
translate S OprepSame {no hay cambios respecto al total de aos}
translate S OprepMostFrequent {Jugadores ms frecuentes}
translate S OprepMostFrequentOpponents {Rivales ms frecuentes}
translate S OprepRatingsPerf {Elo y rendimiento}
translate S OprepAvgPerf {Promedio de Elo y rendimiento}
translate S OprepWRating {Elo de las blancas}
translate S OprepBRating {Elo de las negras}
translate S OprepWPerf {Rendimiento de las blancas}
translate S OprepBPerf {Rendimiento de las negras}
translate S OprepHighRating {Partida con el mayor promedio de Elo}
translate S OprepTrends {Tendencias de resultados}
translate S OprepResults {Resultado de duraciones y frecuencias}
translate S OprepLength {Duracin de la partida}
translate S OprepFrequency {Frecuencia}
translate S OprepWWins {Blancas ganan: }
translate S OprepBWins {Negras ganan:  }
translate S OprepDraws {Tablas:        }
translate S OprepWholeDB {en el conjunto de la base de datos}
translate S OprepShortest {Triunfos ms cortos}
translate S OprepMovesThemes {Movimientos y temas}
translate S OprepMoveOrders {Lneas de movimientos que alcanzan la posicin del informe}
translate S OprepMoveOrdersOne \
  {Slo hay una lnea de movimientos que alcanza esta posicin:}
translate S OprepMoveOrdersAll \
  {Hay %u lneas de movimiento que alcanzan esta posicin:}
translate S OprepMoveOrdersMany \
  {Hay %u lneas de movimiento que alcanzan esta posicin. Las %u ms comunes son:}
translate S OprepMovesFrom {Movimientos desde la posicin del informe}
translate S OprepMostFrequentEcoCodes {Aperturas ms frecuentes}
translate S OprepThemes {Temas posicionales}
translate S OprepThemeDescription {Frecuencia de los temas en las primeras %u jugadas de cada partida}
translate S OprepThemeSameCastling {Enroque al mismo lado}
translate S OprepThemeOppCastling {Enroque en lados opuestos}
translate S OprepThemeNoCastling {Ambos reyes no enrocados}
translate S OprepThemeKPawnStorm {Avanzada de los peones del rey}
translate S OprepThemeQueenswap {Damas intercambiadas}
translate S OprepThemeWIQP {Pen de dama aislado de las blancas}
translate S OprepThemeBIQP {Pen de dama aislado de las negras}
translate S OprepThemeWP567 {Peones blancos en 5/6/7 fila}
translate S OprepThemeBP234 {Peones negros en 2/3/4 fila}
translate S OprepThemeOpenCDE {Columnas c/d/e abiertas}
translate S OprepTheme1BishopPair {Un lado tiene los dos alfiles}
translate S OprepEndgames {Finales}
translate S OprepReportGames {Informe de partidas}
translate S OprepAllGames {Todas las partidas}
translate S OprepEndClass {Tipos de finales segn la ltima posicin de las partidas}
translate S OprepTheoryTable {Tabla terica}
translate S OprepTableComment {Generado a partir de las %u partidas con mejor Elo.}
translate S OprepExtraMoves {Anotacin extra de movimientos en la tabla terica}
translate S OprepMaxGames {Mximas partidas en la tabla terica}
translate S OprepViewHTML {Ver HTML}
translate S OprepViewLaTeX {Ver LaTeX}

# Player Report:
translate S PReportTitle {Informe del jugador}
translate S PReportColorWhite {con las piezas blancas}
translate S PReportColorBlack {con las piezas negras}
translate S PReportMoves {%s despus}
translate S PReportOpenings {Aperturas}
translate S PReportClipbase {Vaciar portapapeles y copiar las partidas}

# Piece Tracker window:
translate S TrackerSelectSingle {El botn izquierdo selecciona esta pieza.}
translate S TrackerSelectPair {El botn izquierdo selecciona esta pieza; el botn derecho tambin selecciona su hermana.}
translate S TrackerSelectPawn {El botn izquierdo selecciona este pen; el botn derecho selecciona los ocho peones.}
translate S TrackerStat {Estadstica}
translate S TrackerGames {% de partidas con movimiento a esta casilla}
translate S TrackerTime {% de tiempo en esta casilla}
translate S TrackerMoves {Movimientos}
translate S TrackerMovesStart {Escribe el nmero del movimiento desde donde debe empezar el rastreo.}
translate S TrackerMovesStop {Escribe el nmero del movimiento donde debe parar el rastreo.}

# Game selection dialogs:
translate S SelectAllGames {Todas las partidas de la base de datos}
translate S SelectFilterGames {Slo las partidas filtradas}
translate S SelectTournamentGames {Slo las partidas del actual torneo}
translate S SelectOlderGames {Slo partidas antiguas}

# Delete Twins window:
translate S TwinsNote {Para ser dobles, dos partidas deben de tener al menos los mismos dos jugadores y los criterios que fijes debajo. Cuando un par de dobles es encontrado, la partida ms corta es borrada. Sugerencia: es mejor hacer la correccin ortogrfica de la base de datos antes de iniciar el borrado de dobles, porque esto mejora su deteccin.}
translate S TwinsCriteria {Criterios: Las partidas dobles deben tener...}
translate S TwinsWhich {Partidas a examinar}
translate S TwinsColors {Jugadores con igual color?}
translate S TwinsEvent {Mismo evento?}
translate S TwinsSite {Mismo sitio?}
translate S TwinsRound {Misma ronda?}
translate S TwinsYear {Mismo ao?}
translate S TwinsMonth {Mismo mes?}
translate S TwinsDay {Mismo da?}
translate S TwinsResult {Mismo resultado?}
translate S TwinsECO {Mismo cdigo ECO?}
translate S TwinsMoves {Mismos movimientos?}
translate S TwinsPlayers {Comparando nombres de jugadores:}
translate S TwinsPlayersExact {Encuentro exacto}
translate S TwinsPlayersPrefix {Slo las primeras 4 letras}
translate S TwinsWhen {Cuando se borren partidas dobles}
translate S TwinsSkipShort {Ignorar todas las partidas con menos de cinco movimientos?}
translate S TwinsUndelete {Quitar marcas de borrado primero?}
translate S TwinsSetFilter {Poner filtro a todas las partidas borradas?}
translate S TwinsComments {Saltar siempre partidas con comentarios?}
translate S TwinsVars {Saltar siempre partidas con variaciones?}
translate S TwinsDeleteWhich {Qu partida borrar:}
translate S TwinsDeleteShorter {Partida ms corta}
translate S TwinsDeleteOlder {Nmero de partida menor}
translate S TwinsDeleteNewer {Nmero de partida mayor}
translate S TwinsDelete {Borrar partidas}

# Name editor window:
translate S NameEditType {Tipo de dato a editar}
translate S NameEditSelect {Partidas a editar}
translate S NameEditReplace {Reemplazar}
translate S NameEditWith {con}
translate S NameEditMatches {Encuentros: Presionar Ctrl+1 a Ctrl+9 para seleccionarlo}
translate S CheckGames {Revisar partidas}
translate S CheckGamesWhich {Revisar partidas}
translate S CheckAll {Todas las partidas}
translate S CheckSelectFilterGames {Slo las partidas del filtro}

# Classify window:
translate S Classify {Clasificar}
translate S ClassifyWhich {Clasificar por cdigos ECO}
translate S ClassifyAll {Todas las partidas (sobreescribir cdigo ECO)}
translate S ClassifyYear {Todas las partidas jugadas en el ltimo ao}
translate S ClassifyMonth {Todas las partidas jugadas en el ltimo mes}
translate S ClassifyNew {Slo las partidas todava sin cdigo ECO}
translate S ClassifyCodes {Cdigo ECO a usar}
translate S ClassifyBasic {Slo cdigo bsico ("B12", ...)}
translate S ClassifyExtended {Extensiones Scid ("B12j", ...)}

# Compaction:
translate S NameFile {Archivo de nombres}
translate S GameFile {Archivo de partidas}
translate S Names {Nombres}
translate S Unused {No usado}
translate S SizeKb {Tamao (kb)}
translate S CurrentState {Estado actual}
translate S AfterCompaction {Despus de la compactacin}
translate S CompactNames {Compactar archivo de nombres}
translate S CompactGames {Compactar archivo de partidas}
translate S NoUnusedNames "No hay nombres sin usar, por tanto el nombre del fichero est ya totalmente compactado."
translate S NoUnusedGames "El fichero ya est totalmente compactado."
translate S NameFileCompacted {El fichero de nombre para la base de datos "[file tail [sc_base filename]]" fue compactado.}
translate S GameFileCompacted {El fichero de partidas para la base de datos "[file tail [sc_base filename]]" fue compactado.}

# Sorting:
translate S SortCriteria {Criterio}
translate S AddCriteria {Aadir criterio}
translate S CommonSorts {Ordenaciones comunes}
translate S Sort {Ordenar}

# Exporting:
translate S AddToExistingFile {Aadir partidas a un archivo existente?}
translate S ExportComments {Exportar comentarios?}
translate S ExportVariations {Exportar variaciones?}
translate S IndentComments {Sangrar comentarios?}
translate S IndentVariations {Sangrar variaciones?}
translate S ExportColumnStyle {Estilo de columna (un movimiento por lnea)?}
translate S ExportSymbolStyle {Estilo de anotacin simblico:}
translate S ExportStripMarks {Quitar marca de cdigos de casilla/flecha de los comentarios?}

# Goto game/move dialogs:
translate S LoadGameNumber {Escribe el nmero de la partida a cargar:}
translate S GotoMoveNumber {Ir al movimiento nmero:}

# Copy games dialog:
translate S CopyGames {Copiar partidas}
translate S CopyConfirm {
 Realmente deseas copiar las [::utils::thousands $nGamesToCopy] partidas fitradas
 de la base de datos "$fromName"
 a la base de datos "$targetName"?
}
translate S CopyErr {No se pueden copiar las partidas}
translate S CopyErrSource {la base de datos fuente}
translate S CopyErrTarget {la base de datos de destino}
translate S CopyErrNoGames {no tiene partidas en su filtro}
translate S CopyErrReadOnly {es slo de lectura}
translate S CopyErrNotOpen {no est abierta}

# Colors:
translate S LightSquares {Casillas claras}
translate S DarkSquares {Casillas oscuras}
translate S SelectedSquares {Casillas seleccionadas}
translate S SuggestedSquares {Casillas de movimiento sugerido}
translate S WhitePieces {Piezas blancas}
translate S BlackPieces {Piezas negras}
translate S WhiteBorder {Borde blancas}
translate S BlackBorder {Borde negras}

# Novelty window:
translate S FindNovelty {Encontrar novedad}
translate S Novelty {Novedad}
translate S NoveltyInterrupt {Busqueda de novedades interrumpida}
translate S NoveltyNone {Ninguna novedad encontrada para esta partida}
translate S NoveltyHelp {
Scid encontrar el primer movimiento de la actual partida que alcanza una posicin no encontrada en la base de datos seleccionada o en el libro de aperturas ECO.
}

# Sounds configuration:
translate S SoundsFolder {Directorio de los archivos de sonido}
translate S SoundsFolderHelp {El directorio debe contener los archivos King.wav, a.wav, 1.wav, etc.}
translate S SoundsAnnounceOptions {Opciones de anunciamiento de movimientos}
translate S SoundsAnnounceNew {Anunciar nuevos movimientos cuando sean hechos}
translate S SoundsAnnounceForward {Anunciar movimientos cuando avancemos un movimiento}
translate S SoundsAnnounceBack {Anunciar movimiento cuando rectifiquemos o retrocedamos una jugada}

# Upgrading databases:
translate S Upgrading {Actualizacin}
translate S ConfirmOpenNew {
Este es un formato de base de datos antiguo (Scid 3) que no puede ser abierto con Scid 4, pero ya se ha creado una versin de formato nuevo (Scid 4).

Quieres abrir la versin de formato nuevo de la base de datos?
}
translate S ConfirmUpgrade {
Esta es una base de datos en un formato antiguo (Scid 3). Se debe crear una versin de formato nuevo de base de datos antes de poder ser usada en Scid 4.

La actualizacin crear una nueva versin de la base de datos.

Esto puede tomar un tiempo, pero slo es necesario hacerlo una vez. Puedes cancelar si toma demasiado tiempo.

Quieres actualizar esta base de datos ahora?
}

# Recent files options:
translate S RecentFilesMenu {Nmero de archivos recientes en el men Archivo}
translate S RecentFilesExtra {Nmero de archivos recientes en submen extra}

# My Player Names options:
translate S MyPlayerNamesDescription {
Escriba una lista de nombres de jugadores preferidos, un nombre por cada lnea. Estn permitidos los comodines (por ejemplo "?" para un slo caracter, "*" para varios caracteres).

Cada vez que carge una partida con un jugador de la lista se girar el tablero, si fuese necesario, para ver la partida desde la perspectiva del jugador.
}
translate S showblunderexists {Mostrar metedura de pata}
translate S showblundervalue {Mostrar valor de la metedura de pata}
translate S showscore {Mostrar marcador}
translate S coachgame {Entrenador}
translate S configurecoachgame {Configurar entrenador}
translate S configuregame {Configuracin de partida}
translate S Phalanxengine {Motor Phalanx}
translate S Coachengine {Motor entrenador}
translate S difficulty {Dificultad}
translate S hard {Duro}
translate S easy {Fcil}
translate S Playwith {Juega con}
translate S white {blancas}
translate S black {negras}
translate S both {ambos}
translate S Play {Jugar}
translate S Noblunder {Sin errores}
translate S blunder {Meteduras de pata}
translate S Noinfo {-- Sin informacin --}
translate S PhalanxOrTogaMissing {Phalanx o Toga no encontrado}
translate S moveblunderthreshold {El movimiento es una metedura de pata si la prdida de puntuacin es mayor que }
translate S limitanalysis {Tiempo lmite para anlisis del motor}
translate S seconds {segundos}
translate S Abort {Abortar}
translate S Resume {Reanudar}
translate S OutOfOpening {Fuera de apertura}
translate S NotFollowedLine {T no sigues la lnea}
translate S DoYouWantContinue {Quieres continuar?}
translate S CoachIsWatching {Entrenador}
translate S Ponder {Pensar siempre (el motor)}
translate S LimitELO {Limitar fuerza Elo}
translate S DubiousMovePlayedTakeBack {Movimiento dudoso, quieres rectificar?}
translate S WeakMovePlayedTakeBack {Movimiento flojo, quieres rectificar ?}
translate S BadMovePlayedTakeBack {Movimiento malo, quieres rectificar ?}
translate S Iresign {Yo abandono}
translate S yourmoveisnotgood {tu movimiento no es bueno}
translate S EndOfVar {Fin de la variante}
translate S Openingtrainer {Entrenador de aperturas}
translate S DisplayCM {Muestra posibles movimientos}
translate S DisplayCMValue {Muestra valor de posibles movimientos}
translate S DisplayOpeningStats {Muestra estadsticas}
translate S ShowReport {Muestra informe}
translate S NumberOfGoodMovesPlayed {buenos movimientos jugados}
translate S NumberOfDubiousMovesPlayed {dudosos momientos jugados}
translate S NumberOfMovesPlayedNotInRepertoire {movimientos jugados fuera de repertorio}
translate S NumberOfTimesPositionEncountered {veces encontrada la posicin}
translate S PlayerBestMove  {Permite nicamente movimientos mejores}
translate S OpponentBestMove {Oponente juega mejores movimientos}
translate S OnlyFlaggedLines {Slo lneas marcadas}
translate S resetStats {Reinicia estadsticas}
translate S Repertoiretrainingconfiguration {Configuracin del repertorio de entrenamiento}
translate S Loadingrepertoire {Cargando repertorio}
translate S Movesloaded {Movimientos cargados}
translate S Repertoirenotfound {Repertorio no encontrado}
translate S Openfirstrepertoirewithtype {Abrir primero una base con icono/tipo de repertorio colocado en el lado derecho}
translate S Movenotinrepertoire {Movimiento no est en el repertorio}
translate S PositionsInRepertoire {Posiciones en repertorio}
translate S PositionsNotPlayed {Posiciones no jugadas}
translate S PositionsPlayed {Posiciones jugadas}
translate S Success {xitos}
translate S DubiousMoves {Movimientos dudosos}
translate S OutOfRepertoire {Fuera de repertorio}
translate S ConfigureTactics {Configurar tctica}
translate S ResetScores {Reiniciar marcadores (puntuaciones)}
translate S LoadingBase {Cargando base}
translate S Tactics {Tcticas}
translate S ShowSolution {Mostrar solucin}
translate S NextExercise {Ejercicio siguiente}
translate S PrevExercise {Ejercicio anterior}
translate S StopTraining {Parar entrenamiento}
translate S Next {Siguiente}
translate S ResettingScore {Reiniciando marcador}
translate S LoadingGame {Cargando partida}
translate S MateFound {Mate encontrado}
translate S BestSolutionNotFound {No fue encontrada la mejor solucin!}
translate S MateNotFound {Mate no encontrado}
translate S ShorterMateExists {Esiste un mate ms corto}
translate S ScorePlayed {Marcador jugado}
translate S Expected {Esperado}
translate S ChooseTrainingBase {Elegir base de entrenamiento}
translate S Thinking {Pensando}
translate S AnalyzeDone {Anlisis hecho}
translate S WinWonGame {Gana la partida ganada}
translate S Lines {Lneas}
translate S ConfigureUCIengine {Configurar motor UCI}
translate S SpecificOpening {Apertura especfica}
translate S StartNewGame {Empezar partida nueva}
translate S FixedLevel {Nivel fijado}
translate S Opening {Abriendo}
translate S RandomLevel {Nivel aleatorio}
translate S StartFromCurrentPosition {Empezar desde la posicin actual}
translate S FixedDepth {Profundidad fija}
translate S Nodes {Nodos} 
translate S Depth {Profundidad}
translate S Time {Tiempo} 
translate S SecondsPerMove {Segundos por movimiento}
translate S Engine {Motor}
translate S TimeMode {Modo de tiempo}
translate S TimeBonus {Tiempo + bonus}
translate S TimeMin {min}
translate S TimeSec {seg}
translate S AllExercisesDone {Todos los ejercicios hechos}
translate S MoveOutOfBook {Movimiento fuera del libro}
translate S LastBookMove {ltimo movimiento del libro}
translate S AnnotateSeveralGames {Anotar las partidas\ndesde la actual hasta la partida: }
translate S FindOpeningErrors {Encontrar errores en los primeros }
translate S MarkTacticalExercises {Marca ejercicios tcticos}
translate S UseBook {Usar libro de aperturas (Book)}
translate S MultiPV {Variantes mltiples}
translate S Hash {Memoria Hash}
translate S OwnBook {Usar libro (book) del motor}
translate S BookFile {Libro de aperturas}
translate S AnnotateVariations {Anotar variantes}
translate S ShortAnnotations {Anotaciones cortas}
translate S addAnnotatorTag {Aadir etiqueta de anotador}
translate S AddScoreToShortAnnotations {Aadir puntuacin para anotaciones cortas}
translate S Export {Exportar}
translate S BookPartiallyLoaded {Libro parcialmente cargado}
translate S Calvar {Clculo de variantes}
translate S ConfigureCalvar {Configuracin}
translate S Reti {Apertura Reti}
translate S English {Apertura inglesa}
translate S d4Nf6Miscellaneous {1.d4 Cf6 variadas}
translate S Trompowsky {Apertura Trompowsky}
translate S Budapest {Gambito Budapest}
translate S OldIndian {Defensa india antigua}
translate S BenkoGambit {Gambito Benko}
translate S ModernBenoni {Defensa Benoni moderna}
translate S DutchDefence {Defensa holandesa}
translate S Scandinavian {Defensa escandinava}
translate S AlekhineDefence {Defensa Alekhine}
translate S Pirc {Defensa Pirc}
translate S CaroKann {Defensa Caro-Kann}
translate S CaroKannAdvance {Defensa Caro-Kann, variante del avance}
translate S Sicilian {Defensa Siciliana}
translate S SicilianAlapin {Defensa Siciliana, variante Alapin}
translate S SicilianClosed {Defensa Siciliana, variante cerrada}
translate S SicilianRauzer {Defensa Siciliana, variante Rauzer}
translate S SicilianDragon {Defensa Siciliana, variante del dragon}
translate S SicilianScheveningen {Defensa Siciliana, variante Scheveningen}
translate S SicilianNajdorf {Defensa Siciliana, Variante Najdorf}
translate S OpenGame {Apertura abierta}
translate S Vienna {Apertura Vienesa}
translate S KingsGambit {Gambito de rey}
translate S RussianGame {Partida rusa}
translate S ItalianTwoKnights {Apertura italiana, variante de los dos caballos}
translate S Spanish {Apertura espaola}
translate S SpanishExchange {Apertura espaola, variante del cambio}
translate S SpanishOpen {Apertura espaola}
translate S SpanishClosed {Apertura espaola, variante cerrada}
translate S FrenchDefence {Defensa francesa}
translate S FrenchAdvance {Defensa francesa, variante del avance}
translate S FrenchTarrasch {Defensa francesa, variante Tarrasch}
translate S FrenchWinawer {Defensa francesa, variante Winawer}
translate S FrenchExchange {Defensa francesa, variante del cambio}
translate S QueensPawn {Apertura de pen de dama}
translate S Slav {Defensa eslava}
translate S QGA {Gambito de dama aceptado}
translate S QGD {Gambito de dama declinado}
translate S QGDExchange {Gambito de dama declinado, variante del cambio}
translate S SemiSlav {Defensa semieslava del gambito de dama declinado}
translate S QGDwithBg5 {Gambito de dama declinado con Ag5}
translate S QGDOrthodox {Gambito de dama declinado, defensa ortodoxa}
translate S Grunfeld {Defensa Grnfeld}
translate S GrunfeldExchange {Variante del cambio de la defensa Grnfeld }
translate S GrunfeldRussian {Variante rusa de la defensa Grnfeld}
translate S Catalan {Catalana}
translate S CatalanOpen {Apertura catalana}
translate S CatalanClosed {Apertura catalana, variante cerrada}
translate S QueensIndian {Defensa india de dama}
translate S NimzoIndian {Apertura Nimzo-India}
translate S NimzoIndianClassical {Apertura Nimzo-India clsica}
translate S NimzoIndianRubinstein {Variante Rubinstein de la Nimzo-India}
translate S KingsIndian {India de rey}
translate S KingsIndianSamisch {Ataque Smish de la india de rey}
translate S KingsIndianMainLine {Lnea principal india de rey}
translate S ConfigureFics {Configurar FICS}
translate S FICSGuest {Autentificacin como invitado}
translate S FICSServerPort {Puerto del servidor}
translate S FICSServerAddress {Direccin IP}
translate S FICSRefresh {Refrescar}
translate S FICSTimesealPort {Puerto Timeseal}
translate S FICSSilence {Silencio}
translate S FICSOffers {Ofertas}
translate S FICSConsole {Consola}
translate S FICSGames {Partidas}
translate S FICSUnobserve {Parar vistazo de partida}
translate S FICSProfile {Muestra tu historia y perfil}
translate S FICSRelayedGames {Partidas retransmitidas}
translate S FICSFindOpponent {Buscar oponente}
translate S FICSTakeback {Retrocede}
translate S FICSTakeback2 {Retrocede 2}
translate S FICSInitTime {Tiempo inicial (min)}
translate S FICSIncrement {Incremento (seg)}
translate S FICSRatedGame {Partida valorada}
translate S FICSAutoColour {automtico}
translate S FICSManualConfirm {confirma manualmente}
translate S FICSFilterFormula {Filtrar con frmula}
translate S FICSIssueSeek {Panel de retos}
translate S FICSChallenge {Retar}
translate S FICSAccept {aceptar}
translate S FICSDecline {rechazar}
translate S FICSColour {Color}
translate S FICSSend {enviar}
translate S FICSConnect {Conectar}
translate S FICSdefaultuservars {Usa valores por defecto}
translate S FICSObserveconfirm {Quieres observar la partida}
# ====== TODO To be translated ======
translate S FICSpremove {Enable premove}
translate S GameReview {Revisin de partida}
translate S GameReviewTimeExtended {Tiempo extendido}
translate S GameReviewMargin {Margen de error}
translate S GameReviewAutoContinue {Autocontinuar cuando el movimiento es correcto}
translate S GameReviewReCalculate {Usar tiempo extendido}
translate S GameReviewAnalyzingMovePlayedDuringTheGame {Analizando movimiento jugado durante la partida}
translate S GameReviewAnalyzingThePosition {Analizando la posicin}
translate S GameReviewEnterYourMove {Introduce tu movimiento}
translate S GameReviewCheckingYourMove {Comprobando tu movimiento}
translate S GameReviewYourMoveWasAnalyzed {Tu movimiento fue analizado}
translate S GameReviewYouPlayedSameMove {Jugaste el mismo movimiento que en la partida}
translate S GameReviewScoreOfYourMove {Puntuacin de tu movimiento}
translate S GameReviewGameMoveScore {Puntuacin del movimiento de la partida}
translate S GameReviewEngineScore {Puntuacin del motor}
translate S GameReviewYouPlayedLikeTheEngine {T jugaste como el motor}
translate S GameReviewNotEngineMoveButGoodMove {No es el movimiento del motor, pero es tambin un buen movimiento}
translate S GameReviewMoveNotGood {Este movimiento no es bueno, la puntuacin es }
translate S GameReviewMovesPlayedLike {Movimientos jugados como}
translate S GameReviewMovesPlayedEngine {Movimientos jugados como motor}
translate S CCDlgConfigureWindowTitle {Configurar Ajedrez por correo}
translate S CCDlgCGeneraloptions {Opciones generales}
translate S CCDlgDefaultDB {Base por defecto:}
translate S CCDlgInbox {Entrante (Carpeta):}
translate S CCDlgOutbox {Saliente (carpeta):}
translate S CCDlgXfcc {Configuracin Xfcc:}
translate S CCDlgExternalProtocol {Protocolo externo (e.g. Xfcc)}
translate S CCDlgFetchTool {Herramienta de traer:}
translate S CCDlgSendTool {Herramienta de envo:}
translate S CCDlgEmailCommunication {Comunicacin email}
translate S CCDlgMailPrg {Programa de correo:}
translate S CCDlgBCCAddr {(B)CC Direccin:}
translate S CCDlgMailerMode {Modo:}
translate S CCDlgThunderbirdEg {p.e. Thunderbird, Mozilla Mail, Icedove...}
translate S CCDlgMailUrlEg {p.e. Evolution}
translate S CCDlgClawsEg {p.e. Sylpheed Claws}
translate S CCDlgmailxEg {p.e. mailx, mutt, nail...}
translate S CCDlgAttachementPar {Parmetro Adjunto (Attachment):}
translate S CCDlgInternalXfcc {Usar soporte interno Xfcc}
translate S CCDlgConfirmXfcc {Confirmar jugadas}
translate S CCDlgSubjectPar {Parmetro Sujeto (Subject):}
translate S CCDlgDeleteBoxes {Vaciar Entrante/Saliente}
translate S CCDlgDeleteBoxesText {Quieres realmente vaciar tus carpetas Entrante y Saliente para Ajedrez por correspondencia? Esto requiere una nueva sincronizacin para mostrar el estado ltimo de tus partidas}
translate S CCDlgConfirmMove {Confirmar jugada}
translate S CCDlgConfirmMoveText {Si t confirmas, la siguiente jugada y comentario ser enviado al servidor:}
translate S CCDlgDBGameToLong {Lnea principal inconsistente}
translate S CCDlgDBGameToLongError {La lnea principal en tu base es ms larga que de la partida en la bandeja de entrada. Si la bandeja de entrada contiene la partida actual, algunos movimientos fueron aadidos a la lnea principal en la base errneamente.\nEn este caso acorte la lnea principal a la (max) jugada\n}
translate S CCDlgStartEmail {Empezar nueva partida por email}
translate S CCDlgYourName {Tu nombre:}
translate S CCDlgYourMail {Tu direccin email:}
translate S CCDlgOpponentName {Nombre de oponente:}
translate S CCDlgOpponentMail {Direccin email de oponente:}
translate S CCDlgGameID {Partida ID (nico):}
translate S CCDlgTitNoOutbox {Scid: Salida del Correo de Ajedrez}
translate S CCDlgTitNoInbox {Scid: Entrada del Correo de Ajedrez}
translate S CCDlgTitNoGames {Scid: No hay partidas de Ajedrez por Correo}
translate S CCErrInboxDir {Carpeta de entrada del Correo de Ajedrez (Entrante):}
translate S CCErrOutboxDir {Carpeta de salida del Correo de Ajedrez (Saliente):}
translate S CCErrDirNotUsable {No existe o no est accesible!\nPor favor, compruebe y corrija los parmetros.}
translate S CCErrNoGames {No contiene ninguna partida!\nPor favor, trigala primero.}
translate S CCDlgTitNoCCDB {Scid: No es una Base de Ajedrez por Correo}
translate S CCErrNoCCDB {No hay una Base del tipo 'Correo' abierta. Por favor, abra una antes de usar funciones de ajedrez por correo.}
translate S CCFetchBtn {Traer partidas desde el servidor y procesar correo entrante}
translate S CCPrevBtn {Ir a partida anterior}
translate S CCNextBtn {Ir a partida siguiente}
translate S CCSendBtn {Enviar movimiento}
translate S CCEmptyBtn {Correos entrante y saliente vacos}
translate S CCHelpBtn {Ayuda en iconos e indicadores de estatus. \n Para ayuda general, pulse F1}
translate S CCDlgServerName {Nombre del servidor:}
translate S CCDlgLoginName  {Nombre de registro:}
translate S CCDlgPassword   {Contrasea:}
translate S CCDlgURL        {Xfcc-URL:}
translate S CCDlgRatingType {Tipo de puntuacin (Rating):}
translate S CCDlgDuplicateGame {El ID de la partida no es nico}
translate S CCDlgDuplicateGameError {Esta partida existe ms de una vez en tu base. Por favor, borra todos los duplicados y compacta tu fichero de partidas (Fichero/Mantenimiento/Compactar base de datos).}
translate S CCDlgSortOption {Ordenando:}
translate S CCDlgListOnlyOwnMove {Slo partidas que tienen el movimiento}
translate S CCOrderClassicTxt {Lugar, Evento, Ronda, Resultado, Blancas, Negras}
translate S CCOrderMyTimeTxt {Mi reloj}
translate S CCOrderTimePerMoveTxt {Tiempo por movimiento falta el prximo control de tiempo}
translate S CCOrderStartDate {Empezar fecha}
translate S CCOrderOppTimeTxt {Reloj de los oponentes}
translate S CCDlgConfigRelay {Configurar observaciones ICCF}
translate S CCDlgConfigRelayHelp {Ir a las partidas de la pgina en http://www.iccf-webchess.com y mostrar la partida a ser observada. Si tu ves el tablero de ajedrez copia la URL desde tu explorador a la lista. !Una sola URL por lnea!\nExample: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate S ExtHWConfigConnection {Configurar hardware externo}
translate S ExtHWPort {Puerto}
translate S ExtHWEngineCmd {Comando del motor}
translate S ExtHWEngineParam {Parmetro del motor}
translate S ExtHWShowButton {Mostrar botn}
translate S ExtHWHardware {Hardware}
translate S ExtHWNovag {Novag Citrine}
translate S ExtHWInputEngine {Motor de entrada}
translate S ExtHWNoBoard {Sin tablero}
translate S NovagReferee {rbitro}
translate S IEConsole {Consola de entrada del motor}
translate S IESending {Movimientos enviados por}
translate S IESynchronise {Sincronizar}
translate S IERotate  {Rotar}
translate S IEUnableToStart {Imposible empezar con el motor de entrada:}
translate S DoneWithPosition {Terminado con la posicin}
translate S Board {Tablero}
translate S showGameInfo {Mostrar informacin de la partida}
translate S autoResizeBoard {Tamao automtico del tablero}
translate S DockTop {Mover arriba}
translate S DockBottom {Mover abajo}
translate S DockLeft {Mover a la izquierda}
translate S DockRight {Mover a la derecha}
translate S Undock {Ventana flotante}
translate S ChangeIcon {Cambiar icono...}

}
# end of spanish.tcl
# Text for menu names and status bar help messages in English.
# Part of Scid (Shane's Chess Information Database).
#
# Instructions for adding a new language:
#
# (1) Choose a letter code for the language. Currently assigned codes are:
#      E=English, D=Deutsch, F=Francais, S=Spanish, B=Brasil Portuguese,
#      P=Polish, N=Nederlands, W=Swedish, O=Norsk, C=Czech, H=Hungarian,
#      Y=Serbian.
#
# (2) Edit the code below that has the lines "addLanguage ..." and add your
#     new language. The final digit in each line is the index of the
#     letter to underline in the menu, counting from 0 as the first letter.
#
# (3) Copy the section of English menu and help message details below (all
#     the commands that start "menuText E ..." or "helpMsg E ..." or
#     "translate E ...") and change all the "E" letters to the letter you
#     assigned for the new language.
#
# (4) Write the translations. This involves changing anything "in quotes"
#     or {in braces} for the menuText, helpMsg and translate commands.
#
#     A menu command has the format:
#         menuText L tag "Name..." underline {HelpMessage...}
#
#     A status bar help message for a button has the format:
#         helpMsg L tag {HelpMessage...}
#
#     A general word or message translation has the format:
#         translate L tag {message...}
#
#     where "L" is the language letter, "tag" is the name of the menu entry
#     or the button widget name, and "underline" is the index of the letter
#     to underline, counting from zero as the first letter. Two menu entries
#     that appear in the same menu should have a different underlined letter.
#     If in doubt, just make them all "0" and I'll assign sensible underlined
#     letters when your translations are incorporated into Scid.
#
# Additions, corrections? Email: sgh@users.sourceforge.net

addLanguage U Suomi 1 iso8859-1

proc setLanguage_U {} {

# File menu:
menuText U File "Tiedosto" 0
menuText U FileNew "Uusi..." 0 {Luo uusi Scid-tietokanta}
menuText U FileOpen "Avaa..." 0 {Avaa olemassaoleva Scid-tietokanta}
menuText U FileClose "Sulje" 0 {Sulje Scid-tietokanta}
menuText U FileFinder "Etsi" 0 {Avaa tiedostonhakuikkuna}
menuText U FileBookmarks "Kirjanmerkit" 0 {Kirjanmerkit-valikko (pikanppin: Ctrl+K)}
menuText U FileBookmarksAdd "Lis kirjanmerkki" 7 \
  {Lis kirjanmerkki nykyiseen peliin ja asemaan tietokannassa}
menuText U FileBookmarksFile "Tallenna kirjanmerkki" 5 \
  {Tallenna kirjanmerkki nykyisest pelist ja asemasta}
menuText U FileBookmarksEdit "Muokkaa kirjanmerkkej..." 0 \
  {Muokkaa kirjanmerkkivalikkoja}
menuText U FileBookmarksList "Nyt kansiot yhdess listassa" 0 \
  {Nyt kirjanmerkit yhdess listassa, ei alivalikoissa}
menuText U FileBookmarksSub "Nyt kansiot alivalikoina" 0 \
  {Nyt kirjanmerkkikansiot alivalikkoina, ei yhdess listassa}
menuText U FileMaint "Yllpito" 0 {Yllpitotykalut Scid-tietokannoille}
menuText U FileMaintWin "Yllpitoikkuna" 0 \
  {Avaa/sulje yllpitoikkuna}
menuText U FileMaintCompact "Tiivist tietokanta..." 0 \
  {Tiivist tietokannan, tuhoaa poistetuksi merkityt pelit ja kyttmttmt nimet}
menuText U FileMaintClass "ECO-luokittelu..." 2 \
  {Tarkista kaikkien pelien ECO-koodi}
menuText U FileMaintSort "Lajittele tietokanta..." 0 \
  {Lajittele tietokannan pelit}
menuText U FileMaintDelete "Poista kaksoiskappaleet..." 0 \
  {Etsii pelien kaksoiskappaleet ja merkitsee ne poistettaviksi}
menuText U FileMaintTwin "Kaksoiskappaleet" 0 \
  {Avaa/pivit kaksoiskappaleet-ikkuna}
menuText U FileMaintName "Nimet ja oikeinkirjoitus" 0 {Nimien muokkaus- ja oikeinkirjoitustykalut}
menuText U FileMaintNameEditor "Nimet" 0 \
  {Avaa/sulje nimien muokkausikkuna}
menuText U FileMaintNamePlayer "Pelaajien nimet..." 0 \
  {Tarkista pelaajien nimien oikeinkirjoitus}
menuText U FileMaintNameEvent "Tapahtumien nimet..." 0 \
  {Tarkista tapahtumien nimien oikeinkirjoitus}
menuText U FileMaintNameSite "Paikannimet..." 1 \
  {Tarkista paikannimien oikeinkirjoitus}
menuText U FileMaintNameRound "Kierrosten nimet..." 0 \
  {Tarkista kierrosten nimien oikeinkirjoitus}
menuText U FileReadOnly "Vain luku..." 0 \
  {Est muutokset nykyiseen tietokantaan}
menuText U FileSwitch "Vaihda tietokanta" 3 \
  {Vaihda toiseen avattuun tietokantaan}
menuText U FileExit "Lopeta" 0 {Lopeta ja sulje Scid}
menuText U FileMaintFixBase "Korjaa tietokanta" 0 {Yrit korjata vaurioitunut tietokanta}
  
# Edit menu:
menuText U Edit "Muokkaa" 0
menuText U EditAdd "Lis muunnelma" 0 {Lis muunnelma tmn siirron kohdalle}
menuText U EditDelete "Poista muunnelma" 0 {Poista tmn siirron kohdalla oleva muunnelma}
menuText U EditFirst "Ensimmiseksi" 0 \
  {Ylenn muunnelma ensimmiseksi sivumuunnelmaksi}
menuText U EditMain "Plinjaksi" 1 \
  {Ylenn muuunnelma plinjaksi}
menuText U EditTrial "Kokeile muunnelmaa" 0 \
  {Aloita/lopeta tila, jossa voit testata muunnelmiasi laudalla}
menuText U EditStrip "Poista" 2 {Poista siirtoja, kommentteja tai muunnelmia}
menuText U EditUndo "Kumoa" 1 {Peruuta viimeisin muutos}
menuText U EditRedo "Tee uudelleen" 0 {Tee uudelleen viimeisin muutos}
menuText U EditStripComments "Kommentit" 1 \
  {Poista kaikki kommentit ja arvioinnit pelist}
menuText U EditStripVars "Muunnelmat" 3 {Poista kaikki muunnelmat pelist}
menuText U EditStripBegin "Siirtoja alusta" 1 \
  {Poista siirtoja pelin alusta}
menuText U EditStripEnd "Siirtoja lopusta" 3 \
  {Poista siirtoja lopusta}
menuText U EditReset "Tyhjenn leikekanta" 0 \
  {Poista kaikki pelit leiketietokannasta}
menuText U EditCopy "Kopioi peli leikekantaan" 0 \
  {Kopioi nykyinen peli leiketietokantaan}
menuText U EditPaste "Liit leikekannasta" 0 \
  {Liit leiketietokannan aktiivinen peli thn}
menuText U EditPastePGN "Liit leikepydn teksti PGN-pelin..." 12 \
  {Tulkitse leikepydll oleva teksti PGN-muotoiseksi peliksi ja liit thn}
menuText U EditSetup "Uusi asema..." 0 \
  {Luo uusi alkuasema pelille}
menuText U EditCopyBoard "Kopioi asema" 0 \
  {Kopioi nykyinen asema leikepydlle FEN-muodossa}
menuText U EditPasteBoard "Liit asema" 0 \
  {Liit leikepydll oleva FEN-teksti alkuasemaksi}

# Game menu:
menuText U Game "Peli" 0
menuText U GameNew "Uusi peli" 0 \
  {Aloita uusi peli, poista kaikki vanhat siirrot}
menuText U GameFirst "Lataa ensimminen" 6 {Lataa ensimminen suodatetuista peleist}
menuText U GamePrev "Lataa edellinen" 7 {Lataa edellinen peli suodatetuista}
menuText U GameReload "Lataa uudelleen" 1 \
  {Lataa nykyinen peli uudelleen, poista tehdyt muutokset}
menuText U GameNext "Lataa seuraava" 6 {Lataa seuraava peli suodatetuista}
menuText U GameLast "Lataa viimeinen" 6 {Lataa viimeinen suodatetuista peleist}
menuText U GameRandom "Lataa satunnainen" 2 {Lataa sattumanvaraisesti valittu peli suodatetuista}
menuText U GameNumber "Lataa numero..." 8 \
  {Lataa peli, jonka numeron annat avautuvassa ikkunassa}
menuText U GameReplace "Tallenna: Korvaa..." 8 \
  {Tallenna nykyinen peli korvaten vanha versio uusilla tiedoilla}
menuText U GameAdd "Tallenna: Lis uusi..." 13 \
  {Tallenna nykyinen peli tietokantaan uudeksi peliksi}
menuText U GameDeepest "Tunnista avaus" 0 \
  {Tunnista avauksen ECO-koodi avauskirjaa kytten}
menuText U GameGotoMove "Siirry siirtoon..." 5 \
  {Siirry mritetyn siirron kohdalle nykyisess peliss}
menuText U GameNovelty "Etsi uutuus..." 0 \
  {Etsi pelin ensimminen ennen pelaamaton siirto}

# Search Menu:
menuText U Search "Etsi" 0
menuText U SearchReset "Alusta suodatin" 0 {Nyt kaikki pelit, nollaa suodatin}
menuText U SearchNegate "Knteinen suodatin" 0 {Suodatin nytt aiemmin poissuodatetut pelit}
menuText U SearchCurrent "Nykyinen asema..." 0 {Etsi nykyist asemaa tietokannasta}
menuText U SearchHeader "Otsikko..." 0 {Etsi otsikkotiedon perusteella (pelaaja, tapahtuma jne.)}
menuText U SearchMaterial "Materiaali/asema..." 0 {Etsi materiaalin tai aseman tunnusmerkkien perusteella}
menuText U SearchUsing "Haku tiedostolla..." 0 {Etsi kytten apuna erillist hakutiedostoa}

# Windows menu:
menuText U Windows "Ikkunat" 0
menuText U WindowsComment "Kommentit" 0 {Avaa/sulje kommenttimuokkain}
menuText U WindowsGList "Peliluettelo" 0 {Avaa/sulje peliluettelo}
menuText U WindowsPGN "PGN-listaus" 1 \
  {Avaa/sulje  PGN-listaus (pelinotaatio)}
menuText U WindowsPList "Pelaajahaku" 1 {Avaa/sulje pelaajahaku}
menuText U WindowsTmt "Turnaushaku" 1 {Avaa/sulje turnaushaku}
menuText U WindowsSwitcher "Tietokannan vaihto" 0 \
  {Avaa/sulje Tietokannan vaihtoikkuna}
menuText U WindowsMaint "Yllpito" 0 \
  {Avaa/sulje yllpitoikkuna}
menuText U WindowsECO "ECO-selain" 1 {Avaa/sulje ECO-avauskirjaston selain}
menuText U WindowsRepertoire "Repertuaari" 0 \
  {Avaa/sulje oman avausrepertuaarisi muokkain}
menuText U WindowsStats "Tilastot" 6 \
  {Avaa/sulje tilastoikkuna}
menuText U WindowsTree "Puunkym" 3 {Avaa/sulje puunkym}
menuText U WindowsTB "Loppupelitietokanta" 15 {Avaa/sulje loppupelitietokanta}
menuText U WindowsBook "Avauskirja" 8 {Avaa/sulje avauskirja}
menuText U WindowsCorrChess "Kirjeshakki" 6 {Avaa/sulje kirjeshakki-ikkuna}

# Tools menu:
menuText U Tools "Tykalut" 1
menuText U ToolsAnalysis "Analyysimoottori #1..." 18 \
  {Kynnist/pysyt analyysimoottori}
menuText U ToolsAnalysis2 "Analyysimoottori #2..." 18 \
  {Kynnist/pysyt toinen analyysimoottori}
menuText U ToolsCross "Ristitaulukko" 0 {Nyt turnauksen ristitaulukko tlle pelille}
menuText U ToolsEmail "Email" 0 {Avaa/sulje email-shakin hallintaikkuna}
menuText U ToolsFilterGraph "Suhteellinen graafi" 13 {Avaa/sulje suodatingraafi suhteellisilla arvoilla}
menuText U ToolsAbsFilterGraph "Absoluuttinen graafi" 17 {Avaa/sulje suodatingraafi absoluuttisilla arvoilla}
menuText U ToolsOpReport "Avausraportti" 0 {Luo nykyisest asemasta avausraportti}
menuText U ToolsOpenBaseAsTree "Avaa kanta puuna..." 0   {Avaa tietokanta ja ksittele sit puurakenteena}
menuText U ToolsOpenRecentBaseAsTree "Avaa viimeaikainen kanta puuna" 1   {Avaa viimeaikainen tietokanta ja ksittele sit puurakenteena}
menuText U ToolsTracker "Nappuloiden liikkuminen"  0 {Avaa ikkuna, jossa seuraat napppuloiden sijaintia ja liikkumista laudalla}
menuText U ToolsTraining "Valmennus"  2 {Tykaluja valmennukseen (taktiikka, avaukset...) }
menuText U ToolsTacticalGame "Taktinen peli"  2 {Pelaa taktisesti painottunut peli}
menuText U ToolsSeriousGame "Virallinen peli"  7 {Pelaa virallinen peli}
menuText U ToolsTrainOpenings "Avaukset"  5 {Harjoittele repertuaariasi}
menuText U ToolsTrainReviewGame "Arvaa siirto"  11 {Arvaa pelin seuraava siirto}
menuText U ToolsTrainTactics "Taktiikkaharjoitukset"  9 {Ratko taktiikoita}
menuText U ToolsTrainCalvar "Muunnelmien laskeminen"  0 {Harjoittele muunnelmien laskemista}
menuText U ToolsTrainFindBestMove "Etsi paras siirto"  5 {Etsi aseman paras siirto}
menuText U ToolsTrainFics "FICS"  0 {Pelaa palvelimella freechess.org}
menuText U ToolsEngineTournament "Shakkimoottoriturnaus"  0 {Turnaus shakkimoottorien kesken}
menuText U ToolsBookTuning "Virit avaukset" 0 {Muokkaa avauskirjastoasi}
menuText U ToolsConnectHardware "Liit syttlaite" 8 {Liit ulkoinen syttlaite (elektroninen lauta tms.)}
menuText U ToolsConnectHardwareConfigure "Asetukset..." 0 {Sd ulkoisen syttlaitteen asetuksia}
menuText U ToolsConnectHardwareNovagCitrineConnect "Liit Novag Citrine" 0 {Liit Novag Citrine shakkitietokone}
menuText U ToolsConnectHardwareInputEngineConnect "Liit muu syttlaite" 0 {Esimerkiksi elektroninen DGT-lauta}

menuText U ToolsPInfo "Pelaajatiedot"  0 \
  {Avaa/pivit pelaajatiedot-ikkuna}
menuText U ToolsPlayerReport "Pelaajaraportti..." 1 \
  {Luo pelaajaraportti}
menuText U ToolsRating "Vahvuusluvut" 0 \
  {Kaavio pelaajien vahvuuslukuhistoriasta}
menuText U ToolsScore "Tuloskaavio" 0 {Nyt tuloskaavio}
menuText U ToolsExpCurrent "Vie tekstitiedostoon" 1 \
  {Kirjoita nykyinen peli tekstitiedostoon}
menuText U ToolsExpCurrentPGN "Vie PGN-tiedostoon" 6 \
  {Kirjoita nykyinen peli PGN-tiedostoon}
menuText U ToolsExpCurrentHTML "Vie HTML-tiedostoon" 4 \
  {Kirjoita nykyinen peli HTML-tiedostoon}
menuText U ToolsExpCurrentHTMLJS "Vie HTML- ja JavaScript-tiedostoihin" 6 {Kirjoita nykyinen peli HTML- ja JavaScript-tiedostoihin}  
menuText U ToolsExpCurrentLaTeX "Vie LaTeX-tiedostoon" 8 \
  {Kirjoita nykyinen peli LaTeX-tiedostoon}
menuText U ToolsExpFilter "Vie suodatetut pelit tekstitiedostoon" 0 \
  {Kirjoita kaikki suodatetut pelit tekstitiedostoon}
menuText U ToolsExpFilterPGN "Vie suodatetut pelit PGN-tiedostoon" 0 \
  {Kirjoita kaikki suodatetut pelit PGN-tiedostoon}
menuText U ToolsExpFilterHTML "Vie suodatetut pelit HTML-tiedostoon" 0 \
  {Kirjoita kaikki suodatetut pelit HTML-tiedostoon}
menuText U ToolsExpFilterHTMLJS "Vie suodatetut pelit HTML- ja JavaScript-tiedostoihin" 0 {Kirjoita kaikki suodatetut pelit HTML- ja JavaScript-tiedostoihin}  
menuText U ToolsExpFilterLaTeX "Vie suodatetut pelit LaTeX-tiedostoon" 0 \
  {Kirjoita kaikki suodatetut pelit LaTeX-tiedostoon}
menuText U ToolsImportOne "Tuo yksi PGN-peli" 0 \
  {Tuo yksittinen peli PGN-tekstist}
menuText U ToolsImportFile "Tuo PGN pelitiedosto" 0 {Tuo yksi tai useampia pelej sisltv PGN-tiedosto}
menuText U ToolsStartEngine1 "Kynnist moottori 1" 19  {Kynnist moottori 1}
menuText U ToolsStartEngine2 "Kynnist moottori 2" 19  {Kynnist moottori 2}
menuText U ToolsCaptureBoard "Kuvakaappaus asemasta..." 1  {Tallenna asema kuvana.}

# Play menue
menuText U Play "Pelaa" 0

# --- Correspondence Chess
menuText U CorrespondenceChess "Kirjeshakki" 0 {Toiminnot shkposti- ja Xfcc-pohjaista kirjeshakkia varten}
menuText U CCConfigure "Asetukset" 0 {Mrit ohjelmat ja tee kirjeshakkiin liittyvt asetukset}
menuText U CCConfigRelay "Seuraa pelej..." 12 {Seurattavien pelien asetukset}
menuText U CCOpenDB "Avaa tietokanta" 1 {Avaa kirjeshakin oletustietokanta}
menuText U CCRetrieve "Nouda pelit" 0 {Hae pelit ulkoisella (Xfcc-) avustajalla}
menuText U CCInbox "Ksittele Saapuneet" 1 {Ksittele kaikki saapuneet tiedostot}
menuText U CCSend "Lhet siirto" 2 {Lhet siirtosi shkpostina tai (Xfcc-) avustajalla}

menuText U CCResign "Luovuta" 0 {Luovuta (ei shkposti)}
menuText U CCClaimDraw "Vaadi tasapeli" 0 {Lhet siirto ja vaadi tasapeli (ei shkposti)}
menuText U CCOfferDraw "Tarjoa tasapeli" 2 {Lhet siirto ja ehdota tasapeli (ei shkposti)}
menuText U CCAcceptDraw "Hyvksy tasapeli" 1 {Hyvksy vastustajan tarjoama tasapeli (ei shkposti)}

menuText U CCNewMailGame "Uusi shkpostipeli" 0 {Aloita uusi shkpostipeli}
menuText U CCMailMove "Shkpostisiirto" 0 {Lhet siirto shkpostilla vastustajalle}
menuText U CCGamePage "Pelisivusto" 0 {Avaa pelisivusto selaimessa}

# menu in cc window:
menuText U CCEditCopy "Kopioi pelilista leikekantaan" 0 {Kopioi pelit leikekantaan CSV-tiedostona (pilkuilla erotettu teksti)}

#  B    GHiJKL    Q  TUV XYZ

# Options menu:
menuText U Options "Asetukset" 0
menuText U OptionsBoard "Shakkilauta" 0 {Shakkilaudan ulkonkn liittyvt asetukset}
menuText U OptionsBoardSize "Koko" 0 {Muuta laudan kokoa}
menuText U OptionsBoardPieces "Nappulat" 0 {Muuta nappuloiden ulkomuotoa}
menuText U OptionsBoardColors "Vrit" 0 {Vaihda laudan vrej}
#Klimmek
menuText U OptionsBoardGraphics "Ruudut" 0 {Valitse ruuduissa kytettv tekstuuri}
translate U OptionsBGW {Valitse ruuduissa kytettv tekstuuri}
translate U OptionsBoardGraphicsText {Valitse ruuduissa kytettv grafiikkatiedosto:}
menuText U OptionsBoardNames "Omat nimet" 0 {Lis ja muokkaa kyttmisi pelaajanimi}
menuText U OptionsExport "Vientiasetukset" 0 {Muuta eri tekstimuotojen vientiin liittyvi asetuksia}
menuText U OptionsFonts "Fontit" 0 {Muuta fontteja}
menuText U OptionsFontsRegular "Oletusfontti" 0 {Vaihda oletusfontti}
menuText U OptionsFontsMenu "Valikko" 0 {Vaihda valikoissa kytetty fontti}
menuText U OptionsFontsSmall "Pieni" 0 {Vaihda pieni fontti}
menuText U OptionsFontsTiny "Hyvin pieni" 0 {CVaihda hyvin pieni fontti}
menuText U OptionsFontsFixed "Tasalevyinen" 0 {Vaihda tasalevyinen fontti}
menuText U OptionsGInfo "Pelitiedot" 0 {Pelitietoihin liittyvt asetukset}
menuText U OptionsLanguage "Kieli" 0 {Valitse valikoissa kytettv kieli}
menuText U OptionsMovesTranslatePieces "Knnkset" 0 {Knn nappuloiden ensimmiset kirjaimet}
menuText U OptionsMovesHighlightLastMove "Korosta viimeisin siirto" 0 {Korosta viimeisin siirto}
menuText U OptionsMovesHighlightLastMoveDisplay "Nyt" 0 {Nyt viimeisin siirto korostettuna}
menuText U OptionsMovesHighlightLastMoveWidth "Viiva" 0 {Laudalla nytettvn viivan paksuus}
menuText U OptionsMovesHighlightLastMoveColor "Vri" 0 {Laudalla nytettvn viivan vri}
menuText U OptionsMovesHighlightLastMoveArrow "Sis. nuoli" 0 {Korostettuun siirtoon sisllytetn nuoli}
menuText U OptionsMoves "Siirrot" 0 {Siirtojen syttmiseen liittyvt asetukset}
menuText U OptionsMovesAsk "Kysy ennen korvaamista" 0 \
  {Ohjelma kysyy luvan ennen kuin kirjoittaa vanhojen tietojen plle}
menuText U OptionsMovesAnimate "Animaation nopeus" 1 \
  {Siirtojen animoinnin nopeus}
menuText U OptionsMovesDelay "Toiston siirtonopeus" 1 \
  {Automaattisesti toistetun pelin siirtonopeus}
menuText U OptionsMovesCoord "Siirrot koordinaatteina" 0 \
  {Hyvksy nppimistlt annetut siirtokoordinaatit (esim "g1f3")}
menuText U OptionsMovesSuggest "Nyt suositetut siirrot" 0 \
  {Siirtosuositukset plle/plt}
menuText U OptionsShowVarPopup "Nyt muunnelmaikkuna" 0 {Nyt/sulje muunnelmaikkuna}  
menuText U OptionsMovesSpace "Vlilynti siirtoihin" 0 {Lis vlilynti siirron numeron pern}  
menuText U OptionsMovesKey "Automaattinen tydennys" 0 \
  {Kytek siirtojen automaattinen tydennys plle/plt}
menuText U OptionsMovesShowVarArrows "Muunnelmat nuolin" 0 {Nyt/l nyt muunnelmia nuolilla laudalla}
menuText U OptionsNumbers "Numerointi" 0 {Numeroformaatit, 1-3 desimaalipisteell, 4-6 -pilkulla}
menuText U OptionsStartup "Kynnistys" 0 {Valitse lisikkunat, jotka avataan ohjelmaa kynnistettess}
menuText U OptionsTheme "Teema" 0 {Valitse kyttliittymn teema}
menuText U OptionsWindows "Ikkunat" 0 {Ikkunoiden asetukset}
menuText U OptionsWindowsIconify "Pienenn automaattisesti" 0 \
  {Pienenn mys muut ikkunat, kun pikkuna pienennetn}
menuText U OptionsWindowsRaise "Nosta automaattisesti" 0 \
  {Nosta ert ikkunat automaattisesti ylimmksi}
menuText U OptionsSounds "net" 0 {Muokaa siirtoilmoitusni}
menuText U OptionsWindowsDock "Telakoi ikkunat" 0 {Telakoi irti olevat ikkunat (vaatii uudelleenkynnistyksen)}
menuText U OptionsWindowsSaveLayout "Tallenna layout" 0 {Tallenna nimelle ikkunoiden ja tykalupalkkien sijainti}
menuText U OptionsWindowsRestoreLayout "Palauta layout" 0 {Palauta tallennettu layout}
menuText U OptionsWindowsShowGameInfo "Pelin tiedot" 0 {Nyt/piilota pelin tiedot (pelaajanimet, turnaus...)}
menuText U OptionsWindowsAutoLoadLayout "Ensimminen layout automaattisesti" 0 {Lataa ensimminen tallennettu layout automaattisesti}
menuText U OptionsToolbar "Tykalupalkki" 0 {Muokkaa pikkunan tykalupalkkia}
menuText U OptionsECO "Lataa ECO-tiedosto" 7 {Lataa ECO avausluokittelu tiedostosta}
menuText U OptionsSpell "Lataa oikeinkirjoitustiedosto" 0 \
  {Lataa Scidin oikeinkirjoitustiedosto}
menuText U OptionsTable "Loppupelitietokannat" 0 \
  {Valitse hakemisto, jossa kannat sijaitsevat. Kaikki kannat otetaan kyttn}
menuText U OptionsRecent "Viimeaikaiset tiedostot" 0 {Kuinka monta tiedostoa nytetn Tiedosto-valikon viimeaikaisten listassa}
menuText U OptionsBooksDir "Avauskirjat" 0 {Hakemisto, jossa avauskirjat sijaitsevat}
menuText U OptionsTacticsBasesDir "Taktiikkakannat" 0 {Hakemisto, jossa taktiikka (harjoitus) tietokannat sijaitsevat}
menuText U OptionsSave "Tallenna asetukset" 0 "Tallenna kaikki asetukset tiedostoon $::optionsFile"
menuText U OptionsAutoSave "Automaattinen asetusten tallennus" 0 \
  {Tallenna asetukset automaattisesti ohjelmasta poistuttaessa}

# Help menu:
menuText U Help "Ohje" 0
menuText U HelpContents "Sisllysluettelo" 0 {Nyt ohjeen sisllysluettelo}
menuText U HelpIndex "Hakemisto" 0 {Nyt ohjeen aakkosellinen luettelo}
menuText U HelpGuide "Pikaopas" 0 {Nyt Scidin pikaopas}
menuText U HelpHints "Vinkit" 0 {Nyt sivu, jolla Scidin kytt helpottavia vihjeit}
menuText U HelpContact "Yhteystietoja" 0 {Nyt yhteystiedot}
menuText U HelpTip "Pivn vinkki" 1 {Nyt vihje}
menuText U HelpStartup "Kynnistys-popup" 2 {Nyt ohjelman kynnistys-popup}
menuText U HelpAbout "Tietoja Scidist" 9 {Tietoja ohjelmasta}

# Game info box popup menu:
menuText U GInfoHideNext "Piilota seuraava siirto" 0
menuText U GInfoMaterial "Nyt materiaaliarvot" 0
menuText U GInfoFEN "Nyt FEN" 6
menuText U GInfoMarks "Nyt vriruudut ja nuolet" 6
menuText U GInfoWrap "Rivit automaattisesti" 0
menuText U GInfoFullComment "Nyt koko kommentti" 6
menuText U GInfoPhotos "Nyt valokuvat" 7
menuText U GInfoTBNothing "Loppupelikannat: ei mitn" 0
menuText U GInfoTBResult "Loppupelikannat: vain tulos" 1
menuText U GInfoTBAll "Loppupelikannat: tulos ja parhaat siirrot" 4
menuText U GInfoDelete "Poista peli (kumoa)" 3
menuText U GInfoMark "Merkitse peli (kumoa)" 3
menuText U GInfoInformant "Informant-asetukset" 5

# Main window buttons:
helpMsg U .main.fbutton.button.start {Pelin alkuun  (pika: Home)}
helpMsg U .main.fbutton.button.end {Pelin loppuun  (pika: End)}
helpMsg U .main.fbutton.button.back {Takaisin yksi siirto  (pika: Vasen nuoli)}
helpMsg U .main.fbutton.button.forward {Eteenpin yksi siirto  (pika: Oikea nuoli)}
helpMsg U .main.fbutton.button.intoVar {Siirry muunnelmaan  (pika: v)}
helpMsg U .main.fbutton.button.exitVar {Poistu muunnelmasta  (pika: z)}
helpMsg U .main.fbutton.button.flip {Knn lauta  (pika: piste)}
helpMsg U .main.fbutton.button.coords {Nyt/piilota koordinaatit  (pika: 0)}
helpMsg U .main.fbutton.button.stm {Nyt/piilota siirtovuoron osoitin}
helpMsg U .main.fbutton.button.autoplay {Siirr automaattisesti  (pika: Ctrl+Z)}
helpMsg U .main.fbutton.button.comment {Avaa kommenttieditori (pika: Ctrl+E)}
helpMsg U .main.fbutton.button.hgame_prev {Edelliseen peliin}
helpMsg U .main.fbutton.button.hgame_next {Seuraavaan peliin}

# General buttons:
translate U Back {Palaa}
translate U Browse {Selaa}
translate U Cancel {Peruuta}
translate U Continue {Jatka}
translate U Clear {Tyhjenn}
translate U Close {Sulje}
translate U Contents {Sisllys}
translate U Defaults {Oletukset}
translate U Delete {Poista}
translate U Graph {Graafi}
translate U Help {Ohje}
translate U Import {Tuo}
translate U Index {Hakemisto}
translate U LoadGame {Lataa peli}
translate U BrowseGame {Selaa peli}
translate U MergeGame {Yhdist peli}
translate U MergeGames {Yhdist pelit}
translate U Preview {Esikatselu}
translate U Revert {Palauta}
translate U Save {Tallenna}
translate U Search {Etsi}
translate U Stop {Seis}
translate U Store {Talleta}
translate U Update {Pivit}
translate U ChangeOrient {Muuta ikkunan muotoa}
translate U ShowIcons {Nyt kuvakkeet}
translate U None {Tyhj}
translate U First {Ensimminen}
translate U Current {Nykyinen}
translate U Last {Viimeinen}

# General messages:
translate U game {peli}
translate U games {pelit}
translate U move {siirto}
translate U moves {siirrot}
translate U all {kaikki}
translate U Yes {Kyll}
translate U No {Ei}
translate U Both {Molemmat}
translate U King {Kuningas}
translate U Queen {Kuningatar}
translate U Rook {Torni}
translate U Bishop {Lhetti}
translate U Knight {Ratsu}
translate U Pawn {Sotilas}
translate U White {Valkea}
translate U Black {Musta}
translate U Player {Pelaaja}
translate U Rating {Vahvuusluku}
translate U RatingDiff {Vahvuuksien ero (Valkea - Musta)}
translate U AverageRating {Keskivahvuus}
translate U Event {Tapahtuma}
translate U Site {Paikka}
translate U Country {Maa}
translate U IgnoreColors {l huomioi vrej}
translate U Date {Pvm.}
translate U EventDate {Tapahtuman pvm.}
translate U Decade {Vuosikymmen}
translate U Year {Vuosi}
translate U Month {Kuukausi}
translate U Months {Tammikuu Helmikuu Maaliskuu Huhtikuu Toukokuu Keskuu Heinkuu Elokuu Syyskuu Lokakuu Marraskuu Joulukuu}
translate U Days {Su Ma Ti Ke To Pe La}
translate U YearToToday {Vuoden alusta}
translate U Result {Tulos}
translate U Round {Kierros}
translate U Length {Pituus}
translate U ECOCode {ECO-koodi}
translate U ECO {ECO}
translate U Deleted {Poistettu}
translate U SearchResults {Haun tulokset}
translate U OpeningTheDatabase {Avaustietokanta}
translate U Database {Tietokanta}
translate U Filter {Suodatin}
translate U noGames {ei pelej}
translate U allGames {kaikki pelit}
translate U empty {tyhj}
translate U clipbase {leikekanta}
translate U score {tulos}
translate U StartPos {Alkuasema}
translate U Total {Yhteens}
translate U readonly {vain luku}

# Standard error messages:
translate U ErrNotOpen {Tm ei ole avoin tietokanta.}
translate U ErrReadOnly {Tm tietokanta on vain luku -moodissa; sit ei voi muokata.}
translate U ErrSearchInterrupted {Haku keskeytyi; tulokset ovat vaillinaiset.}

# Game information:
translate U twin {tupla}
translate U deleted {poistettu}
translate U comment {kommentti}
translate U hidden {piilotettu}
translate U LastMove {Viimeinen siirto}
translate U NextMove {Seuraava}
translate U GameStart {Pelin alku}
translate U LineStart {Rivin alku}
translate U GameEnd {Pelin loppu}
translate U LineEnd {Rivin loppu}

# Player information:
translate U PInfoAll {<b>Kaikki</b> tulokset}
translate U PInfoFilter {<b>Suodatetut</b> tulokset}
translate U PInfoAgainst {Tulokset vastaan}
translate U PInfoMostWhite {Yleisimmt avaukset: Valkea}
translate U PInfoMostBlack {Yleisimmt avaukset: Musta}
translate U PInfoRating {Vahvuuslukuhistoria}
translate U PInfoBio {Biografia}
translate U PInfoEditRatings {Muokkaa vahvuuslukuja}

# Tablebase information:
translate U Draw {Tasapeli}
translate U stalemate {patti}
translate U withAllMoves {kaikilla siirroilla}
translate U withAllButOneMove {yht vaille kaikilla siirroilla}
translate U with {kanssa}
translate U only {vain}
translate U lose {hvi}
translate U loses {hvi}
translate U allOthersLose {kaikki muut hvivt}
translate U matesIn {matti}
translate U hasCheckmated {on matti}
translate U longest {pisin}
translate U WinningMoves {Voittavat siirrot}
translate U DrawingMoves {Tasapeliin vievt siirrot}
translate U LosingMoves {Hvivt siirrot}
translate U UnknownMoves {Epvarma tulos}

# Tip of the day:
translate U Tip {Vihje}
translate U TipAtStartup {Kynnistysvihje}

# Tree window menus:
menuText U TreeFile "Tiedosto" 0
menuText U TreeFileFillWithBase "Kanta vlimuistiin" 0 {Tyt vlimuisti nykyisen tietokannan peleill}
menuText U TreeFileFillWithGame "Peli vlimuistiin" 0 {Siirr nykyisen kannan aktiivinen peli vlimuistiin}
menuText U TreeFileSetCacheSize "Vlimuistin koko" 0 {Aseta vlimuistin koko}
menuText U TreeFileCacheInfo "Tietoja vlimuistista" 1 {Nyt tiedot vlimuistista ja sen kytst}
menuText U TreeFileSave "Tallenna vlimuisti" 2 {Tallenna vlimuisti (.stc) tiedostoksi}
menuText U TreeFileFill "Tyt vlimuisti" 1 \
  {Tyt vlimuisti yleisill asemilla}
menuText U TreeFileBest "Parhaat pelit" 2 {Nyt parhaat pelit}
menuText U TreeFileGraph "Graafi-ikkuna" 0 {Nyt puun haara graafina}
menuText U TreeFileCopy "Puu leikepydlle" 1 \
  {Kopioi puun tilastot leikepydlle}
menuText U TreeFileClose "Sulje puu" 2 {Sulje ikkuna}
menuText U TreeMask "Maski" 0
menuText U TreeMaskNew "Uusi" 2 {Uusi maski}
menuText U TreeMaskOpen "Avaa" 0 {Avaa maski}
menuText U TreeMaskOpenRecent "Avaa viimeaikainen" 0 {Avaa viimeaikainen maski}
menuText U TreeMaskSave "Tallenna" 0 {Tallenna maski}
menuText U TreeMaskClose "Close" 0 {Sulje maski}
menuText U TreeMaskFillWithGame "Tyt pelill" 0 {Tyt maski pelill}
menuText U TreeMaskFillWithBase "Tyt kannalla" 0 {Tyt maski kannan kaikilla peleill}
menuText U TreeMaskInfo "Tiedot" 0 {Nyt nykyisen maskin tilastot}
menuText U TreeMaskDisplay "Nyt maski" 0 {Nyt maski puumuodossa}
menuText U TreeMaskSearch "Etsi" 0 {Etsi nykyisest maskista}
menuText U TreeSort "Lajittele" 0
menuText U TreeSortAlpha "Aakkosta" 0
menuText U TreeSortECO "ECO-koodi" 0
menuText U TreeSortFreq "Yleisyys" 0
menuText U TreeSortScore "Tulos" 0
menuText U TreeOpt "Asetukset" 0
menuText U TreeOptSlowmode "Hidas moodi" 0 {Pivit asemat hitaasti (suurempi tarkkuus)}
menuText U TreeOptFastmode "Nopea moodi" 0 {Pivit nopeati (Ei lyd siirtovaihtoja)}
menuText U TreeOptFastAndSlowmode "Hidas ja nopea" 0 {Pivit ensin nopeasti, sitten tarkasti}
menuText U TreeOptStartStop "Automaattinen pivitys" 0 {Ikkunan automaattinen pivitys plle/plt}
menuText U TreeOptLock "Lukitse" 0 {Lukitse/vapauta puu nykyiseen tietokantaan}
menuText U TreeOptTraining "Valmennus" 0 {Puun valmennusmoodii plle/plt}
menuText U TreeOptAutosave "Tallenna vlimuisti automaattisesti" 0 \
  {Tallenna vlimuisti tiedostoon automaattisesti, kun puu-ikkuna suljetaan}
menuText U TreeHelp "Ohje" 0
menuText U TreeHelpTree "Puun ohje" 0
menuText U TreeHelpIndex "Aakkosellinen ohje" 0
translate U SaveCache {Tallenna vlimuisti}
translate U Training {Valmennus}
translate U LockTree {Lukitse}
translate U TreeLocked {lukittu}
translate U TreeBest {Paras}
translate U TreeBestGames {Parhaat pelit}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate U TreeTitleRow \
  {  Siirto   ECO       Yleisyys     Tulos  AvElo Perf AvYear %Draws}
translate U TreeTotal {TOTAL}
translate U DoYouWantToSaveFirst {Haluatko tallentaa ensin}
translate U AddToMask {Lis maskiin}
translate U RemoveFromMask {Poista maskista}
translate U AddThisMoveToMask {Lis siirto maskiin}
translate U SearchMask {Etsi maskista}
translate U DisplayMask {Nyt maski}
translate U Nag {Nag-koodi}
translate U Marker {Merkki}
translate U Include {Sisllyt}
translate U Exclude {l sisllyt}
translate U MainLine {Pmuunnelma}
translate U Bookmark {Kirjanmerkki}
translate U NewLine {Uusi rivi}
translate U ToBeVerified {Varmennetaan}
translate U ToTrain {Harjoiteltavaksi}
translate U Dubious {Arveluttava}
translate U ToRemove {Poistettavaksi}
translate U NoMarker {Ei merkki}
translate U ColorMarker {Vri}
translate U WhiteMark {Valkea}
translate U GreenMark {Vihre}
translate U YellowMark {Keltainen}
translate U BlueMark {Sininen}
translate U RedMark {Punainen}
translate U CommentMove {Kommentoi siirto}
translate U CommentPosition {Komentoi asema}
translate U AddMoveToMaskFirst {Lis siirto ensin maskiin}
translate U OpenAMaskFileFirst {Avaa maski-tiedosto ensin}
translate U Positions {Asemat}
translate U Moves {Siirrot}

# Finder window:
menuText U FinderFile "Tiedosto" 0
menuText U FinderFileSubdirs "Etsi alihakemistoista" 0
menuText U FinderFileClose "Sulje haku" 0
menuText U FinderSort "Lajittele" 0
menuText U FinderSortType "Tyyppi" 0
menuText U FinderSortSize "Koko" 0
menuText U FinderSortMod "Muokattu" 0
menuText U FinderSortName "Nimi" 0
menuText U FinderSortPath "Polku" 0
menuText U FinderTypes "Tyypit" 0
menuText U FinderTypesScid "Scid-tietokannat" 0
menuText U FinderTypesOld "Vanhat Scid-kannat" 0
menuText U FinderTypesPGN "PGN-tiedostot" 0
menuText U FinderTypesEPD "EPD-tiedostot" 0
menuText U FinderTypesRep "Repertuaari-tiedostot" 0
menuText U FinderHelp "Ohje" 0
menuText U FinderHelpFinder "Tiedostohaun ohje" 0
menuText U FinderHelpIndex "Aakkosellinen ohje" 0
translate U FileFinder {Tiedostohaku}
translate U FinderDir {Hakemisto}
translate U FinderDirs {Hakemistot}
translate U FinderFiles {Tiedostot}
translate U FinderUpDir {yls}
translate U FinderCtxOpen {Avaa}
translate U FinderCtxBackup {Varmista}
translate U FinderCtxCopy {Kopioi}
translate U FinderCtxMove {Siirr}
translate U FinderCtxDelete {Poista}
 
# Player finder:
menuText U PListFile "Tiedosto" 0
menuText U PListFileUpdate "Pivit" 0
menuText U PListFileClose "Sulje pelaajahaku" 0
menuText U PListSort "Lajittele" 0
menuText U PListSortName "Nimi" 0
menuText U PListSortElo "Elo" 0
menuText U PListSortGames "Pelit" 3
menuText U PListSortOldest "Vanhin" 0
menuText U PListSortNewest "Uusin" 0

# Tournament finder:
menuText U TmtFile "Tiedosto" 0
menuText U TmtFileUpdate "Pivit" 0
menuText U TmtFileClose "Sulje kilpailuhaku" 0
menuText U TmtSort "Lajittele" 0
menuText U TmtSortDate "Pivmr" 1
menuText U TmtSortPlayers "Pelaajar" 1
menuText U TmtSortGames "Pelit" 2
menuText U TmtSortElo "Elo" 2
menuText U TmtSortSite "Paikka" 3
menuText U TmtSortEvent "Tapahtuma" 4
menuText U TmtSortWinner "Voittaja" 0
translate U TmtLimit "Luettelon raja"
translate U TmtMeanElo "Keski-Elo"
translate U TmtNone "Turnauksia ei lytynyt."

# Graph windows:
menuText U GraphFile "Tiedosto" 0
menuText U GraphFileColor "Tallenna Color PostScript..." 9
menuText U GraphFileGrey "Tallenna Greyscale PostScript..." 9
menuText U GraphFileClose "Sulje ikkuna" 0
menuText U GraphOptions "Asetukset" 0
menuText U GraphOptionsWhite "Valkea" 0
menuText U GraphOptionsBlack "Musta" 0
menuText U GraphOptionsBoth "Molemmat" 1
menuText U GraphOptionsPInfo "Pelaaja Info pelaaja" 0
translate U GraphFilterTitle "Graafi: yleisyys per 1000 peli"
translate U GraphAbsFilterTitle "graafi: pelien yleisyys"
translate U ConfigureFilter "Muokkaa X-akseli; vuosi, vahvuus, siirrot"
translate U FilterEstimate "Arvioi"
translate U TitleFilterGraph "Scid: graafi"

# Analysis window:
translate U AddVariation {Lis muunnelma}
translate U AddAllVariations {Lis kaikki muunnelmat}
translate U AddMove {Lis siirto}
translate U Annotate {Kommentoi}
translate U ShowAnalysisBoard {Nyt analyysilauta}
translate U ShowInfo {Nyt tiedot moottorista}
translate U FinishGame {Lopeta peli}
translate U StopEngine {Pysyt moottori}
translate U StartEngine {Kynnist moottori}
translate U LockEngine {Lukitse moottori nykyiseen asemaan}
translate U AnalysisCommand {Analyysi-komento}
translate U PreviousChoices {Aikaisemmat vaihtoehdot}
translate U AnnotateTime {Siirtojen vlinen aika sekunteina}
translate U AnnotateWhich {Lis muunnelmat}
translate U AnnotateAll {molemmille osapuolille}
translate U AnnotateAllMoves {Kommentoi kaikki siirrot}
translate U AnnotateWhite {Vain valkealle}
translate U AnnotateBlack {Vain mustalle}
translate U AnnotateBlundersOnly {Kun pelisiirto on virhe (blunder)}
translate U AnnotateBlundersOnlyScoreChange {Analyysi raportoi virheet, muuuttaen pisteytyksen: }
translate U BlundersThreshold {Virhekynnys}
translate U ScoreAllMoves {Pisteyt kaikki siirrot}
translate U LowPriority {Matala CPUn kyttaste}
translate U ClickHereToSeeMoves {Klikkaa nhdksesi siirrot}
translate U ConfigureInformant {Tee Informant-asetukset}
translate U Informant!? {Mielenkiintoinen siirto}
translate U Informant? {Heikko siirto}
translate U Informant?? {Virhe}
translate U Informant?! {Epilyttv siirto}
translate U Informant+= {Valkean pieni etu}
translate U Informant+/- {Valkean etu}
translate U Informant+- {Valkean ratkaiseva etu}
translate U Informant++- {Voittoasema}
  
# Book window
translate U Book {Kirja}
translate U OtherBookMoves {Vastustajan kirja}
translate U OtherBookMovesTooltip {Siirrot, joihin vastustajalla on vastaus}

# Analysis Engine open dialog:
translate U EngineList {Analyysimoottorilista}
translate U EngineName {Nimi}
translate U EngineCmd {Komento}
translate U EngineArgs {Parametrit}
translate U EngineDir {Hakemisto}
translate U EngineElo {Elo}
translate U EngineTime {Pvm}
translate U EngineNew {Uusi}
translate U EngineEdit {Muokkaa}
translate U EngineRequired {Lihavoidut kentt ovat pakollisia}

# Stats window menus:
menuText U StatsFile "Tiedosto" 0
menuText U StatsFilePrint "Tulosta tiedostoon..." 1
menuText U StatsFileClose "Sulje ikkuna" 0
menuText U StatsOpt "Asetukset" 0

# PGN window menus:
menuText U PgnFile "Tiedosto" 0
menuText U PgnFileCopy "Kopioi peli leikepydlle" 0
menuText U PgnFilePrint "Tulosta tiedostoon..." 1
menuText U PgnFileClose "Sulje PGN-ikkuna" 6
menuText U PgnOpt "Nytt" 0
menuText U PgnOptColor "Vrit" 0
menuText U PgnOptShort "Lyhyet otsikkotiedot (3-rivinen)" 0
menuText U PgnOptSymbols "Merkinnt symboleina" 1
menuText U PgnOptIndentC "Sisenn kommentit" 0
menuText U PgnOptIndentV "Sisenn muunnelmat" 1
menuText U PgnOptColumn "Sarakkeina (siirto per rivi)" 1
menuText U PgnOptSpace "Vlilynti siirtonumeron jlkeen" 1
menuText U PgnOptStripMarks "Poista vri-/nuolikoodit" 1
menuText U PgnOptBoldMainLine "Lihavoi pmuunnelma" 2
menuText U PgnColor "Vrit" 2
menuText U PgnColorHeader "Otsikko..." 0
menuText U PgnColorAnno "Merkinnt..." 0
menuText U PgnColorComments "Kommentit..." 0
menuText U PgnColorVars "Muunnelmat..." 0
menuText U PgnColorBackground "Tausta..." 0
menuText U PgnColorMain "Pmuunnelma..." 0
menuText U PgnColorCurrent "Nykyisen siirron tausta..." 0
menuText U PgnHelp "Ohje" 0
menuText U PgnHelpPgn "PGN-ohje" 0
menuText U PgnHelpIndex "Aakkosellinen" 0
translate U PgnWindowTitle {Siirrot - peli %u}

# Crosstable window menus:
menuText U CrosstabFile "Tiedosto" 0
menuText U CrosstabFileText "Tulosta tekstitiedostoon..." 9
menuText U CrosstabFileHtml "Tulosta HTML-tiedostoon..." 8
menuText U CrosstabFileLaTeX "Tulosta LaTeX-tiedostoon..." 8
menuText U CrosstabFileClose "Sulje ristitaulukko" 0
menuText U CrosstabEdit "Muokkaa" 0
menuText U CrosstabEditEvent "Tapahtuma" 0
menuText U CrosstabEditSite "Paikka" 0
menuText U CrosstabEditDate "Pvm" 0
menuText U CrosstabOpt "Nytt" 0
menuText U CrosstabOptAll "Tyskierroskilpailu" 0
menuText U CrosstabOptSwiss "Swiss" 0
menuText U CrosstabOptKnockout "Cup-kilpailu" 0
menuText U CrosstabOptAuto "Auto" 0
menuText U CrosstabOptAges "Ik" 0
menuText U CrosstabOptNats "Kansallisuudet" 0
menuText U CrosstabOptRatings "Vahvuusluvuut" 0
menuText U CrosstabOptTitles "Tittelit" 0
menuText U CrosstabOptBreaks "Tie-Break" 4
menuText U CrosstabOptDeleted "Huomioi poistetut pelit" 0
menuText U CrosstabOptColors "Vrit (vain Swiss)" 0
menuText U CrosstabOptColumnNumbers "Numeroidut sarakkeet (vain tyskierroskilpailu)" 0
menuText U CrosstabOptGroup "Ryhmtulokset" 0
menuText U CrosstabSort "Lajittele" 0
menuText U CrosstabSortName "Nimi" 0
menuText U CrosstabSortRating "Vahvuusluku" 0
menuText U CrosstabSortScore "Tulos" 0
menuText U CrosstabColor "Vri" 0
menuText U CrosstabColorPlain "Teksti" 0
menuText U CrosstabColorHyper "Hyperteksti" 0
menuText U CrosstabHelp "Ohje" 0
menuText U CrosstabHelpCross "Ristitaulukon ohje" 0
menuText U CrosstabHelpIndex "Aakkosellinen ohje" 0
translate U SetFilter {Aseta suodatin}
translate U AddToFilter {Lis suodattimeen}
translate U Swiss {Swiss}
translate U Category {Kategoria}

# Opening report window menus:
menuText U OprepFile "Tiedosto" 0
menuText U OprepFileText "Tulosta tekstitiedostoon..." 1
menuText U OprepFileHtml "Tulosta HTML-tiedostoon..." 8
menuText U OprepFileLaTeX "Tulosta LaTeXtiedostoon..." 8
menuText U OprepFileOptions "Asetukset..." 0
menuText U OprepFileClose "Sulje raportti-ikkuna" 0
menuText U OprepFavorites "Suosikit" 2
menuText U OprepFavoritesAdd "Lis raportti..." 3
menuText U OprepFavoritesEdit "Muokkaa raportin suosikkeja..." 0
menuText U OprepFavoritesGenerate "Luo raportteja..." 4
menuText U OprepHelp "Ohje" 2
menuText U OprepHelpReport "Avausraportin ohje" 0
menuText U OprepHelpIndex "Aakkosellinen ohje" 0

# Repertoire editor:
menuText U RepFile "Tiedosto" 0
menuText U RepFileNew "Uusi" 0
menuText U RepFileOpen "Avaa..." 0
menuText U RepFileSave "Tallenna..." 2
menuText U RepFileSaveAs "Tallenna nimell..." 4
menuText U RepFileClose "Sulje ikkuna" 0
menuText U RepEdit "Muokkaa" 0
menuText U RepEditGroup "Lis ryhm" 3
menuText U RepEditInclude "Lis mukaan otettava linja" 0
menuText U RepEditExclude "Lis poistettava linja" 0
menuText U RepView "Nyt" 0
menuText U RepViewExpand "Laajenna kaikki ryhmt" 0
menuText U RepViewCollapse "Pienenn kaikki ryhmt" 0
menuText U RepSearch "Haku" 0
menuText U RepSearchAll "Kaikkialta..." 0
menuText U RepSearchDisplayed "Vain nytetyist riveist..." 0
menuText U RepHelp "Ohje" 3
menuText U RepHelpRep "Repertuaarin ohje" 0
menuText U RepHelpIndex "aakkosellinen ohje" 0
translate U RepSearch "Repertuaarihaku"
translate U RepIncludedLines "mukaan otettavat linjat"
translate U RepExcludedLines "poistettavat linjat"
translate U RepCloseDialog {Tss repertuaarissa on tallentamattomia muutoksia.

Haluatko jatkaa ja hylt tekemsi mutokset?
}

# Header search:
translate U HeaderSearch {Haku otsikkotiedoista}
translate U EndSideToMove {Siirtovuoro pelin lopussa}
translate U GamesWithNoECO {Ei ECO-koodia}
translate U GameLength {Pelin pituus}
translate U FindGamesWith {Merkityt pelit}
translate U StdStart {Ei-standardi alku}
translate U Promotions {Korotukset}
translate U Comments {Kommentit}
translate U Variations {Muunnelmat}
translate U Annotations {Annotaatiot}
translate U DeleteFlag {Poistomerkki}
translate U WhiteOpFlag {Valkean avaus}
translate U BlackOpFlag {Mustan avaus}
translate U MiddlegameFlag {Keskipeli}
translate U EndgameFlag {Loppupeli}
translate U NoveltyFlag {Uutuus}
translate U PawnFlag {Sotilasasema}
translate U TacticsFlag {Taktiikka}
translate U QsideFlag {Kuningatarsivustan peli}
translate U KsideFlag {Kuningassivustan peli}
translate U BrilliancyFlag {Loistosiirto}
translate U BlunderFlag {Virhe (Blunder)}
translate U UserFlag {Kyttj}
translate U PgnContains {PGN sislt teksti}
translate U Annotator {Annotoija}
translate U Cmnts {Vain annotoidut pelit}

# Game list window:
translate U GlistNumber {Numero}
translate U GlistWhite {Valkea}
translate U GlistBlack {Musta}
translate U GlistWElo {V-Elo}
translate U GlistBElo {M-Elo}
translate U GlistEvent {Tapahtuma}
translate U GlistSite {Paikka}
translate U GlistRound {Kierros}
translate U GlistDate {Pvm}
translate U GlistYear {Vuosi}
translate U GlistEDate {Tapahtuman pvm}
translate U GlistResult {Tulos}
translate U GlistLength {Pituus}
translate U GlistCountry {Maa}
translate U GlistECO {ECO}
translate U GlistOpening {Avaus}
translate U GlistEndMaterial {Loppumateriaali}
translate U GlistDeleted {Poistettu}
translate U GlistFlags {Merkit}
translate U GlistVars {Muunnelmat}
translate U GlistComments {Kommentit}
translate U GlistAnnos {Annotaatiot}
translate U GlistStart {Alk}
translate U GlistGameNumber {Peli nro}
translate U GlistAverageElo {Keskim. Elo}
translate U GlistRating {Vahvuusluku}
translate U GlistFindText {Etsi teksti}
translate U GlistMoveField {Siirto}
translate U GlistEditField {Asetukset}
translate U GlistAddField {Lis}
translate U GlistDeleteField {Poista}
translate U GlistWidth {Leveys}
translate U GlistAlign {Tasaus}
translate U GlistAlignL {Tasaa vasen}
translate U GlistAlignR {Tasaa oikea}
translate U GlistAlignC {Keskit}
translate U GlistColor {Vri}
translate U GlistSep {Erotin}
translate U GlistCurrentSep {-- Nykyinen --}
translate U GlistNewSort {Uusi}
translate U GlistAddToSort {Lis}
translate U GsortSort {Lajittele...}
translate U GsortDate {Pvm.}
translate U GsortYear {Vuosi}
translate U GsortEvent {Tapahtuma}
translate U GsortSite {Paikka}
translate U GsortRound {Kierros}
translate U GsortWhiteName {Valkea nimi}
translate U GsortBlackName {Musta nimi}
translate U GsortECO {ECO}
translate U GsortResult {Tulos}
translate U GsortMoveCount {Siirtolkm.}
translate U GsortAverageElo {Keskim. Elo}
translate U GsortCountry {Maa}
translate U GsortDeleted {Poistettu}
translate U GsortEventDate {Tapahtuman pvm.}
translate U GsortWhiteElo {Valkea Elo}
translate U GsortBlackElo {Musta Elo}
translate U GsortComments {Kommentit}
translate U GsortVariations {Muunnelmat}
translate U GsortNAGs {NAG}
translate U GsortAscending {Nouseva}
translate U GsortDescending {Laskeva}
translate U GsortAdd {Lis}
translate U GsortStore {Varastoi}
translate U GsortLoad {Lataa}

# menu shown with right mouse button down on game list. 
translate U GlistRemoveThisGameFromFilter  {Tm peli pois suodattimesta}
translate U GlistRemoveGameAndAboveFromFilter  {Tm ja kaikki edeltvt pois suodattimesta}
translate U GlistRemoveGameAndBelowFromFilter  {Tm ja kaikki seuraavat pois suodattimesta}
translate U GlistDeleteGame {Poista tm peli (kumoa)} 
translate U GlistDeleteAllGames {Poista kaikki suodatetut pelit} 
translate U GlistUndeleteAllGames {Kumoa kaikkien suodatettujen pelien poisto}  
translate U GlistMergeGameInBase {Yhdist peli toiseen kantaan}

# Maintenance window:
translate U DatabaseName {Tietokannan nimi:}
translate U TypeIcon {Tyyppi:}
translate U NumOfGames {Pelit:}
translate U NumDeletedGames {Poistetut pelit:}
translate U NumFilterGames {Suodatetut pelit:}
translate U YearRange {Vuodet:}
translate U RatingRange {Vahvuusluvut:}
translate U Description {Kuvaus}
translate U Flag {Merkit}
translate U CustomFlags {Omat merkit}
translate U DeleteCurrent {Poista nykyinen peli}
translate U DeleteFilter {Poista suodatetut pelit}
translate U DeleteAll {Poista kaikki pelit}
translate U UndeleteCurrent {Kumoa nykyisen poisto}
translate U UndeleteFilter {Kumoa suodatettujen poisto}
translate U UndeleteAll {Kumoa kaikkien poisto}
translate U DeleteTwins {Poista tuplat}
translate U MarkCurrent {Merkitse nykyinen peli}
translate U MarkFilter {Merkitse suodatetut pelit}
translate U MarkAll {Merkite kaikki pelit}
translate U UnmarkCurrent {Poista merkint nykyisest}
translate U UnmarkFilter {Poista merkint suodatetuista}
translate U UnmarkAll {Poista merkint kaikista}
translate U Spellchecking {Oikeinkirjoitus}
translate U Players {Pelaajat}
translate U Events {Tapahtumat}
translate U Sites {Paikat}
translate U Rounds {Kierrokset}
translate U DatabaseOps {Tietokantaoperaatiot}
translate U ReclassifyGames {ECO-luokittele pelit}
translate U CompactDatabase {Tiivist kanta}
translate U SortDatabase {Lajittele kanta}
translate U AddEloRatings {Lis Elo-luvut}
translate U AutoloadGame {Lataa automaattisesti peli nro}
translate U StripTags {Poista PGN-merkinnt}
translate U StripTag {Poista merkint}
translate U Cleaner {Puhdistaja}
translate U CleanerHelp {
Scidin Puhdistaja tekee nykyiselle tietokannalle alla olevasta listasta valitsemasi yllpitotoimet.

Voit valita kytettviksi mys nykyiset ECO- ja tuplien poistoasetukset.
}
translate U CleanerConfirm {
Puhdistajaa ei voi pysytt!

Suurilla tietokannoilla puhdistusajo voi kest todella kauan, riippuen valitsemistasi asetuksista.

Oletko varma, ett haluat ajaa puhdistusajon?
}
# Twinchecker
translate U TwinCheckUndelete {Vaihda valinta; "u" peruu poiston}
translate U TwinCheckprevPair {Edellinen pari}
translate U TwinChecknextPair {Seuraava pari}
translate U TwinChecker {Scid: Tuplien poisto}
translate U TwinCheckTournament {Pelit turnauksessa:}
translate U TwinCheckNoTwin {Ei tupla}
translate U TwinCheckNoTwinfound {Pelille ei lytynyt tuplaa.\nNhdksesi tuplat tss ikkunassa valitse "Poista tuplat..." -toiminto.}
translate U TwinCheckTag {Yhteiset merkinnt...}
translate U TwinCheckFound1 {Scid lysi $result tuplaa}
translate U TwinCheckFound2 { ja asetti niille poistomerkinnn}
translate U TwinCheckNoDelete {Ei poistettavia pelej tietokannassa.}
translate U TwinCriteria1 { Asetuksillasi lytyy todennkisesti valetuplia,\neli pelej joissa on samat siirrot, mutta jotka eivt ole tuplia.}
translate U TwinCriteria2 {Mikli valitset "Ei" samoille siirroille, sinun pitisi valita "Kyll" vreille, tapahtumalle, kierrokselle, vuodelle ja kuukaudelle.\nHaluatko silti jatkaa? }
translate U TwinCriteria3 {Kannattaa valita "Kyll" ainakin kahdelle seuraavista "sama paikka", "sama kierros" ja "sama vuosi".\nHaluatko silti jatkaa?}
translate U TwinCriteriaConfirm {Scid: Vahvista tupla-asetukset}
translate U TwinChangeTag "Muuta seuraavat merkinnt:\n\n"
translate U AllocRatingDescription "Tm komento kytt oikeinkirjoitustiedostoa mrittkseen Elo-luvut tietokannan peleille. Mikli pelaajalla ei ole voimassa olevaa lukua, kytetn oikeinkirjoitustiedostossa olevaa lukua peliajankohtana - mikli sellainen on olemassa."
translate U RatingOverride "Kirjoita yli olemassaolevat luvut?"
translate U AddRatings "Lis vahvuusluvut:"
translate U AddedRatings {Scid lissi $r Elo-lukua $g peliin.}

#Bookmark editor
translate U NewSubmenu "Uusi alivalikko"

# Comment editor:
translate U AnnotationSymbols  {Annotaatiosymbolit:}
translate U Comment {Kommentti:}
translate U InsertMark {Lis merkint}
translate U InsertMarkHelp {
Lis/poista merkint: Valitse vri, tyyppi, ruutu.
Lis/poista nuoli: Hiiren kakkosnapilla kaksi ruutua.
}

# Nag buttons in comment editor:
translate U GoodMove {Hyv siirto}
translate U PoorMove {Huono siirto}
translate U ExcellentMove {Erinomainen siirto}
translate U Blunder {Virhe (Blunder)}
translate U InterestingMove {Mielenkiintoinen siirto}
translate U DubiousMove {Epilyttv siirto}
translate U WhiteDecisiveAdvantage {Valkealla on ratkaiseva etu}
translate U BlackDecisiveAdvantage {Mustalla on ratkaiseva etu}
translate U WhiteClearAdvantage {Valkealla on selv etu}
translate U BlackClearAdvantage {Mustalla on selv etu}
translate U WhiteSlightAdvantage {Valkealla on hieman etua}
translate U BlackSlightAdvantage {Mustalla on hieman etua}
translate U Equality {Tasa-asema}
translate U Unclear {Epselv}
translate U Diagram {Kaavio}

# Board search:
translate U BoardSearch {Asemahaku}
translate U FilterOperation {Operaatio nykyiselle suodattimelle:}
translate U FilterAnd {AND (rajoita suodatinta)}
translate U FilterOr {OR (Lis suodattimeen)}
translate U FilterIgnore {IGNORE (Alusta suodatin)}
translate U SearchType {Hakutapa:}
translate U SearchBoardExact {Tsmllinen (kaikki nappulat samoissa ruuduissa)}
translate U SearchBoardPawns {Sotilaat (sama materiaali, sotilaat samoissa ruuduissa)}
translate U SearchBoardFiles {Rivit (sama materiaali, sotilaat samoilla riveill)}
translate U SearchBoardAny {Kaikki (sama materiaali, sotilaat ja upseerit miss tahansa)}
translate U SearchInRefDatabase { Etsi referenssikannasta }
translate U LookInVars {Etsi mys muunnelmista}

# Material search:
translate U MaterialSearch {Materiaalhaku}
translate U Material {Materiaali}
translate U Patterns {Tunnusmerkit}
translate U Zero {Nolla}
translate U Any {Kaikki}
translate U CurrentBoard {Nykyinen lauta}
translate U CommonEndings {Yleiset loppupelit}
translate U CommonPatterns {Yleiset tunnusmerkit}
translate U MaterialDiff {Materiaaliero}
translate U squares {ruudut}
translate U SameColor {Sama vri}
translate U OppColor {Vastavri}
translate U Either {Molemmat}
translate U MoveNumberRange {Siirtonumerot}
translate U MatchForAtLeast {Yhteisen vhintn}
translate U HalfMoves {puolisiirtoa}

# Common endings in material search:
translate U EndingPawns {Sotilasloppupelit}
translate U EndingRookVsPawns {Torni vs. sotilas(-aat)}
translate U EndingRookPawnVsRook {Torni ja 1 sotilas vs. torni}
translate U EndingRookPawnsVsRook {Torni ja sotilaita vs. torni}
translate U EndingRooks {Torni vs. torni}
translate U EndingRooksPassedA {Torni vs. torni ja a-vapaasotilas}
translate U EndingRooksDouble {Nelitorniloppupelit}
translate U EndingBishops {Lhetti vs. lhetti}
translate U EndingBishopVsKnight {Lhetti vs. ratsu}
translate U EndingKnights {Ratsu vs. ratsu}
translate U EndingQueens {Kuningatar vs. kuningatar}
translate U EndingQueenPawnVsQueen {Kuningatar ja 1 sotilas vs. kuningatar}
translate U BishopPairVsKnightPair {Kaksi lhetti vs. kaksi ratsua keskipeliss}

# Common patterns in material search:
translate U PatternWhiteIQP {Valkea IQP}
translate U PatternWhiteIQPBreakE6 {Valkea IQP: d4-d5 murto vs. e6}
translate U PatternWhiteIQPBreakC6 {Valkea IQP: d4-d5 murto vs. c6}
translate U PatternBlackIQP {Musta IQP}
translate U PatternWhiteBlackIQP {Valkea IQP vs. musta IQP}
translate U PatternCoupleC3D4 {Valkea c3+d4 eristetty sotilaspari}
translate U PatternHangingC5D5 {Musta riippuvat sotilaat c5 ja d5}
translate U PatternMaroczy {Maroczy-keskusta (sotilaat c4 ja e4)}
translate U PatternRookSacC3 {Tornin uhraus c3:een}
translate U PatternKc1Kg8 {O-O-O vs. O-O (Kc1 vs. Kg8)}
translate U PatternKg1Kc8 {O-O vs. O-O-O (Kg1 vs. Kc8)}
translate U PatternLightFian {Vaalearuutuiset sivustoinnit (lhetti g2 vs. lhetti b7)}
translate U PatternDarkFian {Tummaruutuiset sivustoinnit (lhetti b2 vs. lhetti g7)}
translate U PatternFourFian {Nelj sivustointia (Lhetit b2,g2,b7,g7)}

# Game saving:
translate U Today {Tnn}
translate U ClassifyGame {Luokittele peli}

# Setup position:
translate U EmptyBoard {Tyhj lauta}
translate U InitialBoard {Alkuasema}
translate U SideToMove {Siirtovuorossa}
translate U MoveNumber {Siirto nro}
translate U Castling {Linnoitus}
translate U EnPassantFile {Ohestalynti}
translate U ClearFen {Tyhjenn FEN}
translate U PasteFen {Liit FEN}

translate U SaveAndContinue {Tallenna ja jatka}
translate U DiscardChangesAndContinue {Hylk mutokset\nja jatka}
translate U GoBack {Takaisin}

# Replace move dialog:
translate U ReplaceMove {Korvaa siirto}
translate U AddNewVar {Lis uusi muunnelma}
translate U NewMainLine {Uusi pmuunnelma}
translate U ReplaceMoveMessage {Siirto on jo olemassa.

Voit korvata sen ja poistaa samalla kaiki seuraavat siirrot tai list siirtosi uutena muunnelmana.

(Jos et halua nhd tt varoitusta jatkossa, muuta toiminto "Kysy ennen korvaamista" valikosta.)}

# Make database read-only dialog:
translate U ReadOnlyDialog {Jos muutat tmn kannan vain luku -moodiin, mitn muutoksia ei sallita.
Pelej ei voi tallentaa tai korvata, eik poistomerkintj muuttaa.
Kaikki tekemsi ECO-luokitukset ja lajittelut ovat tilapisi.

Voit helposti muuttaa kannan takaisin kirjoitusmoodiin sulkemalla ja avaamalla sen uudestaan.

Haluatko varmasti muuttaa kannan vain luku -moodiin?}

# Clear game dialog:
translate U ClearGameDialog {Tt peli on muutettu.

Haluatko jatkaa ja hylt kaikki tehdyt muutokset?
}

# Exit dialog:
translate U ExitDialog {Haluatko todella sulkea Scidin?}
translate U ExitUnsaved {Seuraavissa kannoissa on tallentamattomia muutoksia. Jos lopetat, muutokset menetetn.}

# Import window:
translate U PasteCurrentGame {Liit nykyinen peli}
translate U ImportHelp1 {Syt tai liit peli yllolevaan kehykseen PGN-muodossa.}
translate U ImportHelp2 {Pelin tuonnissa ilmenneet virheet nytetn tss.}
translate U OverwriteExistingMoves {Kirjoitetaanko vanhojen siirtojen plle?}

# ECO Browser:
translate U ECOAllSections {Kaikki ECO-osiot}
translate U ECOSection {ECO-osio}
translate U ECOSummary {Yhteenveto:}
translate U ECOFrequency {Alikoodien yleisyys:}

# Opening Report:
translate U OprepTitle {Avausraportti}
translate U OprepReport {Raportti}
translate U OprepGenerated {Luonut:}
translate U OprepStatsHist {Tilastot ja historia}
translate U OprepStats {Tilastot}
translate U OprepStatAll {Kaikki raportin pelit}
translate U OprepStatBoth {Molemmilla vahvuusluku}
translate U OprepStatSince {alkaen}
translate U OprepOldest {Vanhimmat pelit}
translate U OprepNewest {Uusimmat pelit}
translate U OprepPopular {Nykyinen suosio}
translate U OprepFreqAll {Yleisyys kaikkina vuosina:   }
translate U OprepFreq1   {Viimeisimpn vuotena: }
translate U OprepFreq5   {Viimeisimpin 5 vuotena thn pivn: }
translate U OprepFreq10  {Viimeisimpin 10 vuotena thn pivn: }
translate U OprepEvery {kerran joka %u peliss}
translate U OprepUp {yls %u%s kaikista vuosista}
translate U OprepDown {alas %u%s kaikista vuosista}
translate U OprepSame {ei muutosta kaikista vuosista}
translate U OprepMostFrequent {Yleisimmt pelaajat}
translate U OprepMostFrequentOpponents {Yleisimmt vastustajat}
translate U OprepRatingsPerf {Vahvuusluvut ja suoritusluvut}
translate U OprepAvgPerf {Keskivahvuudet ja -suoritusluvut}
translate U OprepWRating {Valkean vahvuusluku}
translate U OprepBRating {Mustan vahvuusluku}
translate U OprepWPerf {Valkean suoritusluku}
translate U OprepBPerf {Mustan suoritusluku}
translate U OprepHighRating {Pelit, joilla korkein keskivahvuus}
translate U OprepTrends {Tulostrendit}
translate U OprepResults {Tulosten pituudet ja yleisyys}
translate U OprepLength {Pelin pituus}
translate U OprepFrequency {Yleisyys}
translate U OprepWWins {Valkea voittaa: }
translate U OprepBWins {Musta voittaa: }
translate U OprepDraws {Tasapeli:      }
translate U OprepWholeDB {koko tietokanta}
translate U OprepShortest {Lyhimmt voitot}
translate U OprepMovesThemes {Siirrot ja teemat}
translate U OprepMoveOrders {Siirtojrjestykset raportin asemaan}
translate U OprepMoveOrdersOne \
  {Vain yksi siirtojrjestys, jolla thn asemaan on pdytty:}
translate U OprepMoveOrdersAll \
  { %u siirtojrjestyst johti thn asemaan:}
translate U OprepMoveOrdersMany \
  {%u siirtojrjestyst johti thn asemaan. Yleisimmt %u ovat:}
translate U OprepMovesFrom {Siirrot raportin asemasta}
translate U OprepMostFrequentEcoCodes {Yleisimmt ECO-koodit}
translate U OprepThemes {Asemalliset teemat}
translate U OprepThemeDescription {Teemojen yleisyys ensimmisiss %u siirrossa}
translate U OprepThemeSameCastling {Linnoitukset samalle puolelle}
translate U OprepThemeOppCastling {Linnoitukset vastakkaisille puolille}
translate U OprepThemeNoCastling {Kumpikaan ei linnoita}
translate U OprepThemeKPawnStorm {Kuningassivustan sotilasvyry}
translate U OprepThemeQueenswap {Kuningatarten vaihto}
translate U OprepThemeWIQP {Valkean eristetty kuningatarsotilas}
translate U OprepThemeBIQP {Mustan eristetty kuningatarsotilas}
translate U OprepThemeWP567 {Valkean sotilas 5./6./7. rivill}
translate U OprepThemeBP234 {Mustan sotilas 2./3./4. rivill}
translate U OprepThemeOpenCDE {Avoin c/d/e-linja}
translate U OprepTheme1BishopPair {Lhettipari vain toisella}
translate U OprepEndgames {Loppupelit}
translate U OprepReportGames {Raportin pelit}
translate U OprepAllGames    {Kaikki pelit}
translate U OprepEndClass {Materiaali pelin lopussa}
translate U OprepTheoryTable {Teoriataulukko}
translate U OprepTableComment {Luotu %u korkeimmalle rankatusta pelist.}
translate U OprepExtraMoves {Erikoisesti huomioitavat siirrot teoriataulukossa}
translate U OprepMaxGames {Maksimimr pelej teoriataulukossa}
translate U OprepViewHTML {Nyt HTML}
translate U OprepViewLaTeX {Nyt LaTeX}

# Player Report:
translate U PReportTitle {Pelaajaraportti}
translate U PReportColorWhite {valkeilla}
translate U PReportColorBlack {mustilla}
translate U PReportMoves { %s jlkeen}
translate U PReportOpenings {Avaukset}
translate U PReportClipbase {Tyhjenn leikekanta ja kopioi suodatetut pelit siihen}

# Piece Tracker window:
translate U TrackerSelectSingle {Hiiren ykksnappi valitsee tmn nappulan.}
translate U TrackerSelectPair {Hiiren ykksnappi valitsee tmn nappulan; kakkosnappi valitsee mys toisen samanlaisen.}
translate U TrackerSelectPawn {Hiiren ykksnappi valitsee tmn sotilaan; kakkosnappi valitsee kaikki 8 sotilasta.}
translate U TrackerStat {Tilastot}
translate U TrackerGames {% peleist, joissa siirto ruutuun}
translate U TrackerTime {% ajasta kussakin ruudussa}
translate U TrackerMoves {Siirrot}
translate U TrackerMovesStart {Seuranta alkaa siirrosta:}
translate U TrackerMovesStop {Seuranta loppuu siirtoon:}

# Game selection dialogs:
translate U SelectAllGames {Kaikki tietokannan pelit}
translate U SelectFilterGames {Vain suodatetut pelit}
translate U SelectTournamentGames {Vain nykyisen turnauksen pelit}
translate U SelectOlderGames {Vain vanhemmat pelit}

# Delete Twins window:
translate U TwinsNote {Peli on tupla jonkin toisen pelin kanssa: Peleill on samat pelaajat ja lisksi alla mritetyt kriteerit tyttyvt. Kun tuplapari lytyy, lyhyempi peleist poistetaan. Vihje: Kannattaa tarkistaa kannan oikeinkirjoitus ennen tuplien poistoa, koska monien pelaajien nimist on useita kirjoitustapoja. }
translate U TwinsCriteria {Kriteerit: Tuplissa tytyy olla...}
translate U TwinsWhich {Mit pelej tarkastellaan}
translate U TwinsColors {Samat pelaajien vrit?}
translate U TwinsEvent {Sama tapahtuma (turnaus)?}
translate U TwinsSite {Sama paikka?}
translate U TwinsRound {Sama kierros?}
translate U TwinsYear {Sama vuosi?}
translate U TwinsMonth {Sama kuukausi?}
translate U TwinsDay {Sama piv?}
translate U TwinsResult {Sama tulos?}
translate U TwinsECO {Sama ECO-koodi?}
translate U TwinsMoves {Samat siirrot?}
translate U TwinsPlayers {Verrataan pelaajien nimi:}
translate U TwinsPlayersExact {Tsmlleen samat}
translate U TwinsPlayersPrefix {Ensimmiset 4 kirjainta}
translate U TwinsWhen {Tuplia poistettaessa:}
translate U TwinsSkipShort {Ohita kaikki alle 5 siirron pelit?}
translate U TwinsUndelete {Ensin kumoa kaikkien pelien poisto?}
translate U TwinsSetFilter {Aseta suodatin nyttmn kaikki poistetut tuplat?}
translate U TwinsComments {Silyt aina pelit, joissa on kommentteja?}
translate U TwinsVars {Silyt aina pelit, joissa on muunnelmia?}
translate U TwinsDeleteWhich {Mik peli poistetaan:}
translate U TwinsDeleteShorter {Lyhyempi}
translate U TwinsDeleteOlder {Pienempi numero pelilistauksessa}
translate U TwinsDeleteNewer {Suurempi numero pelilistauksessa}
translate U TwinsDelete {Poista pelit}

# Name editor window:
translate U NameEditType {Muokattavan nimen tyyppi}
translate U NameEditSelect {Muokattavat pelit}
translate U NameEditReplace {Korvaa}
translate U NameEditWith {kanssa}
translate U NameEditMatches {Osumat: Tee valinta painamalla Ctrl+1 - Ctrl+9}
translate U CheckGames {Tarkista pelit}
translate U CheckGamesWhich {Tarkista pelit}
translate U CheckAll {Kaikki pelit}
translate U CheckSelectFilterGames {Vain suodattimen pelit}

# Classify window:
translate U Classify {Luokittele}
translate U ClassifyWhich {Mitk pelit ECO-luokitellaan}
translate U ClassifyAll {Kaikki pelit (kirjoita yli vanhat ECO-koodit)}
translate U ClassifyYear {Viimeisimmn vuoden aikana pelatut}
translate U ClassifyMonth {Viimeisimmn kuukauden aikana pelatut}
translate U ClassifyNew {Vain pelit, joilla ei ole ECO-koodia entuudestaan}
translate U ClassifyCodes {Kytettvt ECO-koodit}
translate U ClassifyBasic {Vain standardit ECO-koodit ("B12", ...)}
translate U ClassifyExtended {Scid-laajennukset ("B12j", ...)}

# Compaction:
translate U NameFile {Nimitiedosto}
translate U GameFile {Pelitiedosto}
translate U Names {Nimet}
translate U Unused {Kyttmtn}
translate U SizeKb {Koko (kb)}
translate U CurrentState {Nykyinen status}
translate U AfterCompaction {Tiivistmisen jlkeen}
translate U CompactNames {Tiivist nimitiedosto}
translate U CompactGames {Tiivist pelitiedosto}
translate U NoUnusedNames "Ei kyttmttmi nimi, nimitiedosto on valmiiksi tysin tiivistetty."
translate U NoUnusedGames "Pelitiedosto on valmiiksi tysin tiivistetty."
translate U NameFileCompacted {Nimitiedosto tietokannalle "[file tail [sc_base filename]]" on tiivistetty.}
translate U GameFileCompacted {Pelitiedosto tietokannalle "[file tail [sc_base filename]]" on tiivistetty.}

# Sorting:
translate U SortCriteria {Kriteerit}
translate U AddCriteria {Lis kriteeri}
translate U CommonSorts {Yleiset lajittelut}
translate U Sort {Lajittele}

# Exporting:
translate U AddToExistingFile {Lis pelit olemassaolevaan tiedostoon?}
translate U ExportComments {Vie kommentit?}
translate U ExportVariations {Vie muunnelmat?}
translate U IndentComments {Sisenn kommentit?}
translate U IndentVariations {Sisenn muunnelmat?}
translate U ExportColumnStyle {Saraketyyli (siirto per rivi)?}
translate U ExportSymbolStyle {Symboolit annotaatioissa:}
translate U ExportStripMarks {Poista ruutu-/nuolimerkit kommenteista?}

# Goto game/move dialogs:
translate U LoadGameNumber {Ladattavan pelin numero:}
translate U GotoMoveNumber {Siirry siirtoon nro:}

# Copy games dialog:
translate U CopyGames {Kopioi pelit}
translate U CopyConfirm {
 Haluatko varmasti kopioida suodattimen [::utils::thousands $nGamesToCopy] pelit
 tietokannasta "$fromName"
 tietokantaan "$targetName"?
}
translate U CopyErr {Ei voi kopioida}
translate U CopyErrSource {lhdekanta}
translate U CopyErrTarget {kohdekanta}
translate U CopyErrNoGames {ei sisll pelej suodattimessa}
translate U CopyErrReadOnly {on vain-luku}
translate U CopyErrNotOpen {ei ole auki}

# Colors:
translate U LightSquares {Vaaleat ruudut}
translate U DarkSquares {Tummat ruudut}
translate U SelectedSquares {Valitut ruudut}
translate U SuggestedSquares {Siirtoehdotusten ruudut}
translate U WhitePieces {Valkeat nappulat}
translate U BlackPieces {Mustat nappulat}
translate U WhiteBorder {Valkea reuna}
translate U BlackBorder {Musta reuna}

# Novelty window:
translate U FindNovelty {Etsi uutuus}
translate U Novelty {Uutuus}
translate U NoveltyInterrupt {Uutuuksien etsint keskeytetty}
translate U NoveltyNone {Ei uutuuksia}
translate U NoveltyHelp {
Scid lyt pelin ensimmisen siirron, joka johtaa sellaiseen asemaan, jota ei lydy valitusta tietokannasta tai ECO-avauskirjasta.
}

# Sounds configuration:
translate U SoundsFolder {nitiedostojen hakemisto}
translate U SoundsFolderHelp {Hakemistosta pit lyty tiedostot King.wav, a.wav, 1.wav, jne}
translate U SoundsAnnounceOptions {Siirtoilmoitusasetukset}
translate U SoundsAnnounceNew {Ilmoita uudet siirrot}
translate U SoundsAnnounceForward {Ilmoita, kun siirrytn eteenpin yksi siirto}
translate U SoundsAnnounceBack {Ilmoita, kun siirrytn taaksepin yksi siirto}

# Upgrading databases:
translate U Upgrading {Pivitys}
translate U ConfirmOpenNew {
Tm on vanhaa muotoa (Scid 3) oleva tietokanta, jota ei voi avata Scid 4:ss. Uusi (Scid 4) versio on jo luotu, haluatko avata sen?
}
translate U ConfirmUpgrade {
Tm on vanhaa muotoa (Scid 3) oleva tietokanta. Uuden muotoinen kanta tytyy luoda ennen kuin voit kytt sit Scid 4:ss.

Pivitys luo uuden version tietokannasta ja poistaa sen jlkeen alkuperisen.

Pivitys voi kest jonkin aikaa, mutta se tytyy tehd vain kerran. Mikli pivitys kest liian pitkn, voit keskeytt sen.

Haluatko pivitt tmn tietokannan nyt?
}

# Recent files options:
translate U RecentFilesMenu {Viimeaikaisten tiedostojen lkm Tiedosto-valikossa}
translate U RecentFilesExtra {Viimeaikaisten tiedostojen lkm extra-alivalikossa}

# My Player Names options:
translate U MyPlayerNamesDescription {
Lis alle kyttmsi pelaajanimet, yksi nimi per rivi. Voit kytt villikortteja (esim. "?" korvaa yksittisen merkin, "*" korvaa kuinka monta perkkist merkki hyvns).

Aina kun Scid lataa pelin, jossa on kyttmsi pelaajanimi, peli nytetn pelaajan nkkulmasta. Tarvittaessa lauta knnetn niin, ett musta pelaa alhaalta yls.
}

#Coach
translate U showblunderexists {nyt virheet}
translate U showblundervalue {nyt virheen pistearvo}
translate U showscore {nyt tulos}
translate U coachgame {valmennus}
translate U configurecoachgame {Taktisen pelin asetukset}
translate U configuregame {Peliasetukset}
translate U Phalanxengine {Phalanx-moottori}
translate U Coachengine {Valmennusmoottori}
translate U difficulty {vaikeusaste}
translate U hard {vaikea}
translate U easy {helppo}
translate U Playwith {Pelaa}
translate U white {valeilla}
translate U black {mustilla}
translate U both {molemmilla}
translate U Play {Pelaa}
translate U Noblunder {Ei virhe}
translate U blunder {virhe}
translate U Noinfo {-- Ei info --}
translate U PhalanxOrTogaMissing {Phalanx tai Toga ei lydy}
translate U moveblunderthreshold {sirto on virhe, jos tappio on enemmn kuin}
translate U limitanalysis {rajoita koneanalyysin aikaa}
translate U seconds {sekuntia}
translate U Abort {Keskeyt}
translate U Resume {Jatka}
translate U OutOfOpening {Ei avauskirjastossa}
translate U NotFollowedLine {Et seurannut avauslinjaa}
translate U DoYouWantContinue {Haluatko jatkaa?}
translate U CoachIsWatching {Valmentaja seuraa}
translate U Ponder {Jatkuva analyysi}
translate U LimitELO {Rajoita ELO-vahvuus}
translate U DubiousMovePlayedTakeBack {Epilyttv siirto, haluatko peruuttaa sen?}
translate U WeakMovePlayedTakeBack {Heikko siirto, haluatko peruuttaa sen?}
translate U BadMovePlayedTakeBack {Huono siirto, haluatko peruuttaa sen?}
translate U Iresign {Luovutan}
translate U yourmoveisnotgood {siirtosi ei ole hyv}
translate U EndOfVar {Muunnelman loppu}
translate U Openingtrainer {Avausvalmentaja}
translate U DisplayCM {Nyt ehdokassiirrot}
translate U DisplayCMValue {Nyt ehdokassiirtojen arvot}
translate U DisplayOpeningStats {Nyt tilastot}
translate U ShowReport {Nyt raportti}
translate U NumberOfGoodMovesPlayed {hyvi siirtoja}
translate U NumberOfDubiousMovesPlayed {epilyttvi siirtoja}
translate U NumberOfMovesPlayedNotInRepertoire {siirtoja, jotka eivt ole repertuaarissa}
translate U NumberOfTimesPositionEncountered {kerta asemassa}
translate U PlayerBestMove  {Salli vain parhaat siirrot}
translate U OpponentBestMove {Vastustaja pelaa parhaita siirtoja}
translate U OnlyFlaggedLines {Vain merkityt muunnelmat}
translate U resetStats {Nollaa tilastot}
translate U Repertoiretrainingconfiguration {Repertuaarivalmennuksen asetukset}
translate U Loadingrepertoire {Lataa repertuaari}
translate U Movesloaded {Siirrot ladattu}
translate U Repertoirenotfound {Repertuaaria ei lydy}
translate U Openfirstrepertoirewithtype {Avaa ensimminen repertuaari, jonka kuvake/tyyppi on oikealla}
translate U Movenotinrepertoire {Siirtoa ei lydy repertuaarista}
translate U PositionsInRepertoire {Asemat repertuaarissa}
translate U PositionsNotPlayed {Asemat, joita ei pelattu}
translate U PositionsPlayed {Pelatut asemat}
translate U Success {Onnistuminen}
translate U DubiousMoves {Epilyttvt siirrot}
translate U OutOfRepertoire {Ei repertuaarissa}
translate U ConfigureTactics {Taktiikka-asetukset}
translate U ResetScores {Nollaa tulokset}
translate U LoadingBase {Ladataan kantaa}
translate U Tactics {Taktiikat}
translate U ShowSolution {Nyt ratkaisu}
translate U NextExercise {Seuraava harjoitus}
translate U PrevExercise {Edellinen harjoitus}
translate U StopTraining {Lopeta harjoittelu}
translate U Next {Seuraava}
translate U ResettingScore {Nollataan tulokset}
translate U LoadingGame {Ladataan peli}
translate U MateFound {Matti lytyi}
translate U BestSolutionNotFound {Paras ratkaisu ei lytynyt!}
translate U MateNotFound {Matti ei lytynyt}
translate U ShorterMateExists {On lyhyempikin matti}
translate U ScorePlayed {Tulos}
translate U Expected {odotustulos}
translate U ChooseTrainingBase {Valitse harjoituskanta}
translate U Thinking {Thinking}
translate U AnalyzeDone {Analyysi valmis}
translate U WinWonGame {Voita voittoasema}
translate U Lines {Muunnelmat}
translate U ConfigureUCIengine {UCI-moottorin asetukset}
translate U SpecificOpening {Tietty avaus}
translate U StartNewGame {Aloita uusi peli}
translate U FixedLevel {Kiinte taso}
translate U Opening {Avaus}
translate U RandomLevel {Satunnainen taso}
translate U StartFromCurrentPosition {Aloita tmnhetkisest asemasta}
translate U FixedDepth {Kiinte syvyys}
translate U Nodes {Noodit}
translate U Depth {Syvyys}
translate U Time {Aika} 
translate U SecondsPerMove {sekuntia per siirto}
translate U Engine {Moottori}
translate U TimeMode {Aikamoodi}
translate U TimeBonus {Aika + bonus}
translate U TimeMin {min}
translate U TimeSec {s}
translate U AllExercisesDone {Kaikki harjoitukset tehty}
translate U MoveOutOfBook {Siirtoa ei lydy avauskirjasta}
translate U LastBookMove {Viimeinen kirjasiirto}
translate U AnnotateSeveralGames {Annotoi useita pelej\nalkaen nykyisest, ptten:}
translate U FindOpeningErrors {Etsi avausvirheet}
translate U MarkTacticalExercises {Merkitse taktiset harjoitukset}
translate U UseBook {Kyt avauskirjaa}
translate U MultiPV {Monia muunnelmia}
translate U Hash {Vlimuisti}
translate U OwnBook {Kyt moottorin avauskirjaa}
translate U BookFile {Avauskirja}
translate U AnnotateVariations {Annotoi muunnelmat}
translate U ShortAnnotations {Lyhyet annotaatiot}
translate U addAnnotatorTag {Lis merkint annotaattorista}
translate U AddScoreToShortAnnotations {Lis tulos annotaatioihin}
translate U Export {Vie}
translate U BookPartiallyLoaded {Kirja osittain ladattu}
translate U Calvar {Muunnelmien laskenta}
translate U ConfigureCalvar {Asetukset}
# Opening names used in tacgame.tcl
translate U Reti {Reti}
translate U English {English}
translate U d4Nf6Miscellaneous {1.d4 Nf6 Miscellaneous}
translate U Trompowsky {Trompowsky}
translate U Budapest {Budapest}
translate U OldIndian {Old Indian}
translate U BenkoGambit {Benko Gambit}
translate U ModernBenoni {Modern Benoni}
translate U DutchDefence {Dutch Defence}
translate U Scandinavian {Scandinavian}
translate U AlekhineDefence {Alekhine Defence}
translate U Pirc {Pirc}
translate U CaroKann {Caro-Kann}
translate U CaroKannAdvance {Caro-Kann Advance}
translate U Sicilian {Sicilian}
translate U SicilianAlapin {Sicilian Alapin}
translate U SicilianClosed {Sicilian Closed}
translate U SicilianRauzer {Sicilian Rauzer}
translate U SicilianDragon {Sicilian Dragon}
translate U SicilianScheveningen {Sicilian Scheveningen}
translate U SicilianNajdorf {Sicilian Najdorf}
translate U OpenGame {Open Game}
translate U Vienna {Vienna}
translate U KingsGambit {King's Gambit}
translate U RussianGame {Russian Game}
translate U ItalianTwoKnights {Italian/Two Knights}
translate U Spanish {Spanish}
translate U SpanishExchange {Spanish Exchange}
translate U SpanishOpen {Spanish Open}
translate U SpanishClosed {Spanish Closed}
translate U FrenchDefence {French Defence}
translate U FrenchAdvance {French Advance}
translate U FrenchTarrasch {French Tarrasch}
translate U FrenchWinawer {French Winawer}
translate U FrenchExchange {French Exchange}
translate U QueensPawn {Queen's Pawn}
translate U Slav {Slav}
translate U QGA {QGA}
translate U QGD {QGD}
translate U QGDExchange {QGD Exchange}
translate U SemiSlav {Semi-Slav}
translate U QGDwithBg5 {QGD with Bg5}
translate U QGDOrthodox {QGD Orthodox}
translate U Grunfeld {Grnfeld}
translate U GrunfeldExchange {Grnfeld Exchange}
translate U GrunfeldRussian {Grnfeld Russian}
translate U Catalan {Catalan}
translate U CatalanOpen {Catalan Open}
translate U CatalanClosed {Catalan Closed}
translate U QueensIndian {Queen's Indian}
translate U NimzoIndian {Nimzo-Indian}
translate U NimzoIndianClassical {Nimzo-Indian Classical}
translate U NimzoIndianRubinstein {Nimzo-Indian Rubinstein}
translate U KingsIndian {King's Indian}
translate U KingsIndianSamisch {King's Indian Smisch}
translate U KingsIndianMainLine {King's Indian Main Line}

# FICS
translate U ConfigureFics {FICS-asetukset}
translate U FICSGuest {Kirjaudu vierailijana (Guest)}
translate U FICSServerPort {Serveriportti}
translate U FICSServerAddress {IP-osoite}
translate U FICSRefresh {Pivit}
translate U FICSTimesealPort {Timeseal portti}
translate U FICSSilence {Konsolisuodatin}
translate U FICSOffers {Tarjoukset}
translate U FICSConsole {Konsoli}
translate U FICSGames {Pelit}
translate U FICSUnobserve {Lopeta seuraaminen}
translate U FICSProfile {Nyt historia ja profiili}
translate U FICSRelayedGames {Seurattavat pelit (Relay)}
translate U FICSFindOpponent {Etsi vastustaja}
translate U FICSTakeback {Peruuta siirto}
translate U FICSTakeback2 {Peruuta 2}
translate U FICSInitTime {Alkuaika (min)}
translate U FICSIncrement {lis per siirto (s)}
translate U FICSRatedGame {Vahvuuslaskentaan}
translate U FICSAutoColour {automaattisesti}
translate U FICSManualConfirm {vahvista}
translate U FICSFilterFormula {Suodatin kaavalla}
translate U FICSIssueSeek {Tee haku}
translate U FICSChallenge {Haasta}
translate U FICSAccept {hyvksy}
translate U FICSDecline {hylk}
translate U FICSColour {Vri}
translate U FICSSend {lhet}
translate U FICSConnect {yhdist}
translate U FICSdefaultuservars {Kyt oletusmuuttujia}
translate U FICSObserveconfirm {Haluatko seurata peli}
translate U FICSpremove {Ennakkosiirto plle}

# Game review
translate U GameReview {Pelin arvioiminen}
translate U GameReviewTimeExtended {Lisaika}
translate U GameReviewMargin {Virhemarginaali}
translate U GameReviewAutoContinue {Jatka automaattisesti, kun siirto on oikein}
translate U GameReviewReCalculate {Kyt lisaikaa}
translate U GameReviewAnalyzingMovePlayedDuringTheGame {Analysoidaan pelattua siirtoa}
translate U GameReviewAnalyzingThePosition {Analysoidaan asemaa}
translate U GameReviewEnterYourMove {Syt siirtosi}
translate U GameReviewCheckingYourMove {Tarkistetaan siirtoa}
translate U GameReviewYourMoveWasAnalyzed {Siirtosi on analysoitu}
translate U GameReviewYouPlayedSameMove {Pelasit saman siirron kuin peliss}
translate U GameReviewScoreOfYourMove {Siirtosi arvo}
translate U GameReviewGameMoveScore {Pelisiirron arvo}
translate U GameReviewEngineScore {Moottorin arvo}
translate U GameReviewYouPlayedLikeTheEngine {Pelasit yht hyvin kuin moottori}
translate U GameReviewNotEngineMoveButGoodMove {Eri siirto kuin moottorilla, mutta silti hyv}
translate U GameReviewMoveNotGood {Tm ei ole hyv siirto, arvio: }
translate U GameReviewMovesPlayedLike {Siirrot kuin}
translate U GameReviewMovesPlayedEngine {Siirrot kuin moottorilla}

# Correspondence Chess Dialogs:
translate U CCDlgConfigureWindowTitle {Kirjeshakkiasetukset}
translate U CCDlgCGeneraloptions {Yleiset}
translate U CCDlgDefaultDB {Oletustietokanta:}
translate U CCDlgInbox {Inbox/Saapuneet (polku):}
translate U CCDlgOutbox {Outbox/Lhtevt (polku):}
translate U CCDlgXfcc {Xfcc-asetukset:}
translate U CCDlgExternalProtocol {Ulkoisten protokollien ksittelij (esim. Xfcc)}
translate U CCDlgFetchTool {Noutotykalu:}
translate U CCDlgSendTool {Lhetystykalu:}
translate U CCDlgEmailCommunication {eMail}
translate U CCDlgMailPrg {eMail-ohjelma:}
translate U CCDlgBCCAddr {(B)CC-osoite:}
translate U CCDlgMailerMode {Moodi:}
translate U CCDlgThunderbirdEg {esim. Thunderbird, Mozilla Mail, Icedove...}
translate U CCDlgMailUrlEg {esim. Evolution}
translate U CCDlgClawsEg {esim. Sylpheed Claws}
translate U CCDlgmailxEg {esim. mailx, mutt, nail...}
translate U CCDlgAttachementPar {Liiteparametrit:}
translate U CCDlgInternalXfcc {Kyt sisnrakennettua tukea Xfcc:lle}
translate U CCDlgConfirmXfcc {Vahvista siirrot}
translate U CCDlgSubjectPar {Otsikko:}
translate U CCDlgDeleteBoxes {Tyhjenn In-/Outbox}
translate U CCDlgDeleteBoxesText {Haluatko varmasti tyhjent Saapuneet ja Lhetetyt?\nTyhjennykse jlkeen sinun tytyy synkronoida nhdksesi tmnhetkiset asemat.}
translate U CCDlgConfirmMove {Vahvista siirto}
translate U CCDlgConfirmMoveText {Jos vahvistat, seuraava siirto kommentteineen lhetetn palvelimelle:}
translate U CCDlgDBGameToLong {Epyhteninen pmuunnelma}
translate U CCDlgDBGameToLongError {Pmuunnelma on pidempi kuin peli Saapuneet-kansiossa (Inbox). Mikli Saapuneet on ajan tasalla, on pelin pmuunnelmaan listty vahingossa siirtoja.\nLyhenn pmuunnelma ainakin siirtoon \n}


translate U CCDlgStartEmail {Aloita uusi eMail-peli}
translate U CCDlgYourName {Nimi:}
translate U CCDlgYourMail {eMail-osoite:}
translate U CCDlgOpponentName {Vastustajan nimi:}
translate U CCDlgOpponentMail {Vastustajan eMail-osoite:}
translate U CCDlgGameID {Peli ID (yksilllinen):}

translate U CCDlgTitNoOutbox {Scid: Kirjeshakki - Lhtevt (Outbox)}
translate U CCDlgTitNoInbox {Scid: Kirjeshakki - Saapuneet (Inbox)}
translate U CCDlgTitNoGames {Scid: Ei kirjeshakkipelej}
translate U CCErrInboxDir {Kirjeshakki - Saapuneet-hakemisto:}
translate U CCErrOutboxDir {Kirjeshakki - Lhtevt-hakemisto:}
translate U CCErrDirNotUsable {ei ole olemassa tai siihen ei saada yhteytt!\nTarkista ja korjaa asetukset.}
translate U CCErrNoGames {ei sill pelej!\nNouda pelit ensin.}

translate U CCDlgTitNoCCDB {Scid: Ei kirjeshakkitietokantaa}
translate U CCErrNoCCDB {Ei lydy avointa 'Kirjeshakki (Correspondence)' tyyppist tietokantaa. Avaa ainakin yksi kirjeshakkikanta ennen kirjeshakkitoimintojen kytt.}

translate U CCFetchBtn {Nouda pelit serverilt ja prosessoi Saapuneet (Inbox)}
translate U CCPrevBtn {Edelliseen peliin}
translate U CCNextBtn {Seuraavaan peliin}
translate U CCSendBtn {Lhet siirto}
translate U CCEmptyBtn {Tyhjenn Saapuneet ja Lhetetyt}
translate U CCHelpBtn {Apua kuvakkeiden ja statussanomien tulkintaan.\nYleisemp apua saa painamalla F1!}

translate U CCDlgServerName {Serverin nimi:}
translate U CCDlgLoginName  {Kyttjtunnus:}
translate U CCDlgPassword   {Salasana:}
translate U CCDlgURL        {Xfcc-URL:}
translate U CCDlgRatingType {Vahvuuslukutyyppi:}

translate U CCDlgDuplicateGame {Ei-yksilllinen peli-ID}
translate U CCDlgDuplicateGameError {Tm peli lytyy useammasta kuin yhdest tietokannastasi. Poista tuplat ja tiivist tietokantasi (Tiedosto/Yllpito/Tiivist kanta).}

translate U CCDlgSortOption {Lajittelu:}
translate U CCDlgListOnlyOwnMove {Vain ne, joissa olen siirtovuorossa}
translate U CCOrderClassicTxt {Paika, Tapahtuma, Kierros, Tulos, Valkea, Musta}
translate U CCOrderMyTimeTxt {Kelloni}
translate U CCOrderTimePerMoveTxt {Aikaa per siirto ennen seuraavaa ajantarkastusta}
translate U CCOrderStartDate {Aloituspvm.}
translate U CCOrderOppTimeTxt {Vastustajan kello}
translate U CCDlgConfigRelay {Seuraa pelej}
translate U CCDlgConfigRelayHelp {Siirry sivulle http://www.iccf-webchess.com ja nyt seurattava peli.  Jos net shakkilaudan, kopioi osoite selaimestasi URL alla olevaan listaan. Vain yksi osoite per rivi!\nEsim: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}

# Connect Hardware dialogs
translate U ExtHWConfigConnection {Ulkoisten laitteiden asetukset}
translate U ExtHWPort {Portti}
translate U ExtHWEngineCmd {Moottorin komento}
translate U ExtHWEngineParam {Moottorin parametri}
translate U ExtHWShowButton {Nyt painike}
translate U ExtHWHardware {Hardware}
translate U ExtHWNovag {Novag Citrine}
translate U ExtHWInputEngine {Input Engine}
translate U ExtHWNoBoard {Ei lautaa}
translate U NovagReferee {Referee}

# Input Engine dialogs
translate U IEConsole {Input Engine Console}
translate U IESending {Siirrot lhetetn}
translate U IESynchronise {Synkronoi}
translate U IERotate  {Knn}
translate U IEUnableToStart {Input Engine ei voi kynnisty:}


# Calculation of Variations
translate U DoneWithPosition {Asema valmis}

translate U Board {Lauta}
translate U showGameInfo {Nyt pelin tiedot}
translate U autoResizeBoard {Sd laudan koko automaattisesti}
translate U DockTop {Siirr ylimmksi}
translate U DockBottom {Siirr alimmaksi}
translate U DockLeft {Siirr vasemmalle}
translate U DockRight {Siirr oikealle}
translate U Undock {Vapauta lukitus}

# Switcher window
translate U ChangeIcon {Vaihda kuvake...}

}
# end of suomi.tcl
# swedish.tcl:
# Text for menu names and status bar help messages in Swedish.
# Part of Scid (Shane's Chess Information Database).
# Contributed by Martin Skjldebrand, martin@skjoldebrand.org
# Thanks to: Hans Eriksson, for looking over the translation file

addLanguage W Swedish 1 ;#iso8859-1

proc setLanguage_W {} {

# File menu:
menuText W File "Arkiv" 0
menuText W FileNew "Ny..." 0 {Skapa en ny Scid databas}
menuText W FileOpen "ppna..." 0 {ppna en befintlig Scid databas}
menuText W FileClose "Stng" 0 {Stng den aktiva Scid databasen}
menuText W FileFinder "Sk filer" 4 {ppna skdialogen}
menuText W FileBookmarks "Bokmrken" 0 {Hantera bokmrken (kortkommando: Ctrl+B)}
menuText W FileBookmarksAdd "Nytt bokmrke" 0 \
  {Markera den aktiva stllningen i partiet}
menuText W FileBookmarksFile "Spara bokmrke" 0 \
  {Spara bokmrket fr den aktiva stllningen i partiet}
menuText W FileBookmarksEdit "Redigera bokmrken..." 0 \
  {Redigera bokmrken}
menuText W FileBookmarksList "Visa bokmrken som lista" 19 \
  {Visar bokmrkena som lista, inte undermenyer}
menuText W FileBookmarksSub "Visa bokmrken i undermenyer" 17 \
  {Visar bokmrkena som undermenyer, inte lista}
menuText W FileMaint "Databasverktyg" 0 {Scids databasverktyg}
menuText W FileMaintWin "Verktygsfnster" 0 \
  {ppna/ stng verktygsfnstret}
menuText W FileMaintCompact "Komprimera databasen..." 0 \
  {Komprimera databasen, avlgsna raderade partier och oanvnda namn}
menuText W FileMaintClass "Klassificera partier enligt ECO..." 2 \
  {Klassificera om alla partier enligt ECO-systemet}
menuText W FileMaintSort "Sortera databasen..." 0 \
  {Sortera partierna i den aktiva databasen}
menuText W FileMaintDelete "Radera dubbletter..." 0 \
  {Sk dubbletter och markera dem som raderingsbara}
menuText W FileMaintTwin "Sk dubbletter" 0 \
  {ppna/ stng dubblettfnstret fr att ska dubblettpartier}
menuText W FileMaintName "Stavningskontroll" 0 {Namnredigering och stavningskontroll}
menuText W FileMaintNameEditor "Redigera namn" 0 \
  {Redigera spelarnamn utifrn rttstavningsfilen}
menuText W FileMaintNamePlayer "Stavningskontrollera namn..." 22 \
  {Stavningskontrollera namn utifrn rttstavningsfilen}
menuText W FileMaintNameEvent "Stavningskontrollera evenemang..." 21 \
  {Stavningskontrollera evenemang utifrn rttstavningsfilen}
menuText W FileMaintNameSite "Stavningskontrollera platser..." 21 \
  {Stavningskontrollera platser utifrn rttstavningsfilen}
menuText W FileMaintNameRound "Stavningskontrollera ronder..." 21 \
  {Stavningskontrollera ronder utifrn rttstavningsfilen}
menuText W FileReadOnly "Enbart lsbar..." 8 \
  {Avlgsna temporrt redigeringsmjligheterna till databasen}
menuText W FileSwitch "Byt databas" 0 \
  {Byt till en annan ppnad databas} 
menuText W FileExit "Avsluta" 0 {Avsluta Scid}
menuText W FileMaintFixBase "Fixa trasig databas" 0 {Frsk att fixa en trasig databas}

# Edit menu:
menuText W Edit "Redigera" 0
menuText W EditAdd "Lgg till variant" 0 {Skapa en variant vid denna stllning}
menuText W EditDelete "Radera variant" 0 {Radera en variant vid denna stllning}
menuText W EditFirst "Skapa huvudvariant" 6 \
  {Gr en av varianterna till huvudvariant}
menuText W EditMain "Skapa nytt textdrag" 11 \
  {Gr en av varianterna till partifortsttning}
menuText W EditTrial "Testa variant" 6 \
  {Starta/ stoppa testlge, undersk en id p brdet}
menuText W EditStrip "Ta bort" 3 {Avlgsna kommentarer eller varianter frn partiet}
menuText W EditUndo "ngra" 0 {ngra senaste ndring i parti}
# ====== TODO To be translated ======
menuText W EditRedo "Redo" 0 {Redo last game change}
menuText W EditStripComments "Kommentarer" 0 \
  {Avlgsna alla kommentarer och noteringar frn partiet}
menuText W EditStripVars "Varianter" 0 {Avlgsna alla varianter frn partiet}
menuText W EditStripBegin "Avlgsna tidigare drag" 9 \
  {Avlgsna dragen fram till den aktuella stllningen} 
menuText W EditStripEnd "Avlgsna resterande drag" 0 \
  {Avlgsna partiets resterande drag} 
menuText W EditReset "Tm Clipbase" 1 \
  {Tmmer den temporra databasen}
menuText W EditCopy "Kopiera partiet till Clipbase" 21 \
  {Kopierar det aktuella partiet till Clipbase}
menuText W EditPaste "Klistra in det senaste Clipbasepartiet" 8 \
  {Klistrar in det senaste tillagda i Clipbase i den aktiva databasen}
menuText W EditPastePGN "Klistra in Clipbasetext som PGNparti..." 10 \
  {Tolka Clipbasetexten som ett parti i PGN notation och klistra in det hr}
menuText W EditSetup "Skapa stllning..." 0 \
  {Skapa en utgngsstllning fr aktuellt parti}
menuText W EditCopyBoard "Kopiera stllning" 0 \
  {Kopiera den aktuella stllningen i FEN kod till urklippshanteraren} 
menuText W EditPasteBoard "Klistra in utgngsstllning" 10 \
  {Klistra in stllningen frn aktuellt parti i den temporra databasen}

# Game menu:
menuText W Game "Partier" 0
menuText W GameNew "Nytt parti" 0 \
  {terstll brdet infr ett nytt parti (raderar alla ndringar)}
menuText W GameFirst "Ladda det frsta partiet" 10 {Laddar det frsta partiet i filtret}
menuText W GamePrev "Ladda fregende parti" 7 {Ladda fregende parti i filtret}
menuText W GameReload "Brja om partiet" 0 \
  {terstll partiet (raderar alla ndringar)}
menuText W GameNext "Ladda nsta parti" 6 {Ladda nsta parti i filtret}
menuText W GameLast "Ladda det sista partiet" 10 {Ladda det sista partiet i filtret}
menuText W GameRandom "Ladda parti slumpmssigt" 14 \
  {Ladda ett av datorn slumpmssigt valt parti} 
menuText W GameNumber "Ladda parti nummer..." 6 \
  {Ladda ett parti genom att ange dess nummer}
menuText W GameReplace "Spara: Erstt parti..." 7 \
  {Spara partiet och erstt tidigare version}
menuText W GameAdd "Spara: Nytt parti..." 1 \
  {Spara ett nytt parti}
menuText W GameDeepest "Identifiera ppningen" 0 \
  {G till den mest detaljerade stllningen i ECO boken}
menuText W GameGotoMove "G till drag nummer..." 8 \
  {G till ett specifikt drag i partiet}
menuText W GameNovelty "Hitta nyhet..." 7 \
  {Hitta det frsta draget i partiet som inte spelats tidigare}

# Search Menu:
menuText W Search "Sk" 0
menuText W SearchReset "terstll skfilter" 0 {terstll skfiltret s att alla partiet ingr}
menuText W SearchNegate "Omvnt filter" 0 {Ta med partier som utesluts av filtret}
menuText W SearchCurrent "Aktuell position..." 8 {Sk partier med aktuell position p brdet}
menuText W SearchHeader "I huvud..." 2 {Anvnd fast information (spelare, evenemang, plats, mm)}
menuText W SearchMaterial "Material/stllning..." 0 {Skning baserad p material eller stllning}
menuText W SearchUsing "Anvnd skfil..." 10 {Anvnd en fil med lagrade skvillkor}

# Windows menu:
menuText W Windows "Fnster" 0
menuText W WindowsComment "Kommentarseditor" 0 {ppna/ stng kommentarseditorn}
menuText W WindowsGList "Partilista" 5 {ppna/ stng partilistan}
menuText W WindowsPGN "PGN fnster" 0 \
  {ppna/ stng PGN fnstret}
menuText W WindowsPList "Spelarfrteckning" 7 {ppna/ stng en frteckning ver spelarna i den aktiva databasen} 
menuText W WindowsTmt "Turneringar" 0 {Lista turneringar}
menuText W WindowsSwitcher "Databasvxlaren" 0 \
  {ppna/ stng databasvxlaren}
menuText W WindowsMaint "Verktygsfnster" 0 \
  {ppna/ stng verktygsfnstret}
menuText W WindowsECO "ECO fnster" 0 {ppna/ stng ECO blddraren}
menuText W WindowsRepertoire "Repetoareditor" 0 \
  {ppna/ stng spelppningsfnstret}
menuText W WindowsStats "Statistikfnster" 0 \
  {ppna/ stng statistikfnstret}
menuText W WindowsTree "Trdfnster" 2 {ppna/ stng varianttrdets fnster}
menuText W WindowsTB "Slutspelsdatabas" 2 \
  {ppna/ stng slutspelsdatabasfnstret}
menuText W WindowsBook "Bokfnster" 0 {ppna/stng Bokfnstret}
menuText W WindowsCorrChess "Korrespondensfnster" 0 {ppna/stng Korrespondensfnstret}

# Tools menu:
menuText W Tools "Verktyg" 0
menuText W ToolsAnalysis "Analysmotor..." 6 \
  {Starta/ stoppa en analysmotor}
menuText W ToolsAnalysis2 "Analysmotor 2..." 12 \
  {Starta/ stoppa en andra analysmotor}
menuText W ToolsCross "Resultattabell" 0 {Visa en resultattabell fr den aktuella turneringen}
menuText W ToolsEmail "Eposthanterare" 0 \
  {ppna/ stng eposthanteraren}
menuText W ToolsFilterGraph "Filterdiagram" 7 \
  {ppna/ stng filterdiagramfnstret} 
menuText W ToolsAbsFilterGraph "Absolut Filtergraf" 7 {ppna/stng filtergraffnstret fr absolutvrden}
menuText W ToolsOpReport "ppningsrapport" 0 \
  {Skapa en ppningsrapport utifrn den aktuella stllningen}
menuText W ToolsOpenBaseAsTree "ppna databas som trd" 0   {ppna en databas och anvnd den i Trdfnstret}
menuText W ToolsOpenRecentBaseAsTree "ppna senaste databasen som trd" 0   {ppna den senaste databasen och anvnd den i Trdfnstret}
menuText W ToolsTracker "Sk material"  0 {ppnar dialog fr att ska efter en viss materiell balans} 
menuText W ToolsTraining "Trning"  0 {Trningsverktyg (taktik, ppningar,...) }
menuText W ToolsTacticalGame "Taktiskt parti"  0 {Spela ett parti med taktik}
menuText W ToolsSeriousGame "Serist parti"  0 {Spela ett serist parti}
menuText W ToolsTrainOpenings "ppningar"  0 {Trna med en repetoar}
menuText W ToolsTrainReviewGame "Granska parti"  0 {Gissa drag spelade i ett parti}
menuText W ToolsTrainTactics "Taktik"  0 {Lsa taktik}
menuText W ToolsTrainCalvar "Variantberkning"  0 {Variantberkningstrning}
menuText W ToolsTrainFindBestMove "Hitta bst drag"  0 {Hitta bsta draget}
menuText W ToolsTrainFics "Spela p Internet"  0 {Spela p freechess.org}
# ====== TODO To be translated ======
menuText W ToolsEngineTournament "Engine tournament"  0 {Start a tournament between chess engines}
menuText W ToolsBookTuning "Bokfininstllning" 0 {Bokfininstllning}
menuText W ToolsConnectHardware "Anslut Hrdvara" 0 {Anslut extern hrdvara}
menuText W ToolsConnectHardwareConfigure  "Konfiguration" 0 {Konfiguration}
menuText W ToolsConnectHardwareNovagCitrineConnect "Anslut Novag Citrine" 0 {Anslut Novag Citrine}
menuText W ToolsConnectHardwareInputEngineConnect "Anslut Inmatningsschackmotor" 0 {Anslut Inmatningsschackmotor (t.ex. DGT)}
menuText W ToolsPInfo "Spelarinformation"  0 \
  {ppna/ uppdatera spelarinformation}
menuText W ToolsPlayerReport "Spelarrapport..." 3 \
  {Skapa en spelarrapport}
menuText W ToolsRating "Ratingdiagram" 0 \
  {Skapa ett ratingdiagram fr spelarna i partiet}
menuText W ToolsScore "Resultatdiagram" 8 {Visa resultatdiagrammet}
menuText W ToolsExpCurrent "Exportera aktuellt parti" 1 \
  {Spara aktuellt parti till en textfil}
menuText W ToolsExpCurrentPGN "Exportera till PGN..." 15 \
  {Spara aktuellt parti till en PGN-fil}
menuText W ToolsExpCurrentHTML "Exportera till HTML..." 15 \
  {Spara aktuellt parti till en HTML-fil}
menuText W ToolsExpCurrentHTMLJS "Exportera till HTML och JavaScript-fil..." 15 {Spara aktuellt parti till en HTML och JavaScript-fil}  
menuText W ToolsExpCurrentLaTeX "Exportera till LaTeX..." 15 \
  {Spara aktuellt parti till en LaTeX-fil}
menuText W ToolsExpFilter "Exportera alla filtrerade partier" 15 \
  {Spara alla filterade partier till en textfil}
menuText W ToolsExpFilterPGN "Exportera till PGN..." 15 \
  {Spara alla filterade partier till en PGN-fil}
menuText W ToolsExpFilterHTML "Exportera till HTML..." 15 \
  {Spara alla filterade partier till en HTML-fil}
menuText W ToolsExpFilterHTMLJS "Exportera filtrerade till HTML och JavaScript-fil..." 17 {Spara alla filtrerade partier till en HTML och JavaScript-fil}  
menuText W ToolsExpFilterLaTeX "Exportera till LaTeX..." 15 \
  {Spara alla filterade partier till en LaTeX-fil}
menuText W ToolsImportOne "Importera ett parti i PGN-format..." 0 \
  {Importera ett parti i PGN-format}
menuText W ToolsImportFile "Importera flera partier i PGN-format..." 16 \
  {Importera flera partier i PGN-format frn en fil}
menuText W ToolsStartEngine1 "Starta schackmotor 1" 0  {Starta schackmotor 1}
menuText W ToolsStartEngine2 "Starta schackmotor 2" 0  {Starta schackmotor 2}
menuText W ToolsCaptureBoard "Spara aktuellt schackbrde..." 0  {Spara det aktuella schackbrdet som en bild.}
menuText W Play "Spela" 0
menuText W CorrespondenceChess "Korrespondensschack" 0 {Funktioner fr eMail och Xfcc baserad Korrespondensschack}
menuText W CCConfigure "Konfigurera..." 0 {Konfigurera externa verktyg och generella instllningar}
menuText W CCConfigRelay "Konfigurera observationer..." 10 {Konfigurera partier att observera}
menuText W CCOpenDB "ppna Databas..." 0 {ppna standardkorrespondensdatabasen}
menuText W CCRetrieve "Hmta Partier" 0 {Hmta partier via extern (Xfcc-)hjlpare}
menuText W CCInbox "Hantera Inkorg" 0 {Hantera alla filer i Scids Inkorg}
menuText W CCSend "Skicka Drag" 0 {Skicka ditt drag via eMail eller extern (Xfcc-)hjlpare}
menuText W CCResign "Ge upp" 0 {Ge upp (inte via eMail)}
menuText W CCClaimDraw "Hvda Remi" 0 {Skicka drag och hvda Remi (inte via eMail)}
menuText W CCOfferDraw "Erbjud Remi" 0 {Skicka drag och erbjud Remi (inte via eMail)}
menuText W CCAcceptDraw "Acceptera Remi" 0 {Acceptera en erbjuden Remi (inte via eMail)}
menuText W CCNewMailGame "Nytt eMail-parti..." 0 {Starta ett nytt eMail-parti}
menuText W CCMailMove "Skicka Drag..." 0 {Skicka draget via eMail till motstndaren}
menuText W CCGamePage "Partisida..." 0 {Starta upp partiet via weblsaren}
menuText W CCEditCopy "Kopiera partilista till Clipbase" 0 {Kopiera partierna som CSV-lista till Clipbase}

# Options menu:
menuText W Options "Alternativ" 2
menuText W OptionsBoard "Brdet" 0 {ndra brdets utseende}
menuText W OptionsBoardSize "Brdstorlek" 0 {ndra brdets storlek}
menuText W OptionsBoardPieces "Pjsutseende" 1 {ndra pjsernas utseende} 
menuText W OptionsBoardColors "Frger..." 0 {ndra brdets frger}
menuText W OptionsBoardGraphics "Rutor..." 0 {Vlj texturer fr rutor}
translate W OptionsBGW {Vlj textur fr rutor}
translate W OptionsBoardGraphicsText {Vlj grafikfiler fr vita och svarta rutor:}
menuText W OptionsBoardNames "Spelarnamn..." 0 {Redigera spelares namn}
menuText W OptionsExport "Export" 0 {ndra exportalternativ}
menuText W OptionsFonts "Typsnitt" 0 {ndra typsnitt}
menuText W OptionsFontsRegular "Normal" 0 {ndra det normala typsnittet}
menuText W OptionsFontsMenu "Menu" 0 {ndra menytypsnittet}
menuText W OptionsFontsSmall "Liten" 0 {ndra det lilla typsnittet}
menuText W OptionsFontsTiny "Tiny" 0 {Change the tiny font}
menuText W OptionsFontsFixed "Fixerad" 0 {ndra det fixerade typsnittet}
menuText W OptionsGInfo "Partiinformation" 0 {Alternativ fr partiinformation}
menuText W OptionsLanguage "Sprk" 0 {Vlj sprk}
menuText W OptionsMovesTranslatePieces "verstt pjser" 0 {verstt frsta bokstaven fr pjser}
menuText W OptionsMovesHighlightLastMove "Markera senaste draget" 0 {Markera senaste draget}
menuText W OptionsMovesHighlightLastMoveDisplay "Visa" 0 {Visa senaste markerade draget}
menuText W OptionsMovesHighlightLastMoveWidth "Bredd" 0 {Tjockhet p rad}
menuText W OptionsMovesHighlightLastMoveColor "Frg" 0 {Frg p rad}
# ====== TODO To be translated ======
menuText W OptionsMovesHighlightLastMoveArrow "include Arrow" 0 {Include Arrow with Highlight}
menuText W OptionsMoves "Drag" 0 {Alternativ fr dragangivelse}
menuText W OptionsMovesAsk "Frga fre erstt drag" 0 \
  {Frga innan du erstter befintliga drag}
menuText W OptionsMovesAnimate "Frdrjning vid manuellt spel" 1 \
  {Ange tid mellan varje drag nr dragen grs automatiskt}
menuText W OptionsMovesDelay "Frdrjning vid automatspel..." 1 \
  {Ange frdrjning mellan dragen nr datorn spelar sjlv}
menuText W OptionsMovesCoord "Koordinater" 0 \
  {Acceptera koordinater ("g1f3") vid dragangivelse}
menuText W OptionsMovesSuggest "Visa freslagna drag" 0 \
  {Visa/ Dlj freslagna drag}
menuText W OptionsShowVarPopup "Visa Variantfnster" 0 {Starta/Avsluta visningen av ett Variantfnster}  
menuText W OptionsMovesSpace "Lgg till mellanslag efter dragnummer" 0 {Lgg till mellanslag efter dragnummer}  
menuText W OptionsMovesKey "Tangentkomplettering" 0 \
  {Starta/ stng av dragkomplettering vid tangentinmatning}
menuText W OptionsMovesShowVarArrows "Visa pilar fr variationer" 0 {Vxlar p/av pilar som visar drag i variationer}
menuText W OptionsNumbers "Talformat" 3 {Vlj hur tal visas}
menuText W OptionsStartup "Start" 3 {Vlj vilka fnster som ska ppnas vid start}
menuText W OptionsTheme "Tema" 0 {ndra utseende p grnssnitt}
menuText W OptionsWindows "Fnster" 1 {Fnsteralternativ}
menuText W OptionsWindowsIconify "Minimera automatiskt" 5 \
  {Minimera alla fnster nr huvudfnstret minimeras}
menuText W OptionsWindowsRaise "Autofokus" 0 \
  {Visa ter vissa fnster (t ex. resultatrknare) automatiskt nr de dljs}
menuText W OptionsSounds "Ljud..." 2 {Konfigurera ljud fr att annonsera drag}
menuText W OptionsWindowsDock "Dockningsfnster" 0 {Dockningsfnster}
menuText W OptionsWindowsSaveLayout "Spara layout" 0 {Sparar layout}
menuText W OptionsWindowsRestoreLayout "terstll layout" 0 {terstller layout}
menuText W OptionsWindowsShowGameInfo "Visa partiinformation" 0 {Visar partiinformation}
menuText W OptionsWindowsAutoLoadLayout "Automatiskt ppna frsta layouten" 0 {ppnar automatiskt frsta layouten vid uppstart}
menuText W OptionsToolbar "Verktygsflt" 0 \
  {Visa/ dlj huvudfnstrets verktygsflt}
menuText W OptionsECO "Ladda ECO fil..." 7 {Ladda ECO-klassificeringen vid start}
menuText W OptionsSpell "Ladda Rttstavningsfil..." 7 \
  {Ladda rttstavningsfilen vid start}
menuText W OptionsTable "Katalog fr slutspelsdatabaser..." 0 \
  {Vlj en fil som innehller en slutspelsdatabas; alla vriga filer i samma katalog kommer att anvndas}
menuText W OptionsRecent "Senast anvnda filer..." 16 \
  {ndra antalet senast anvnda filer som visas i Arkivmenyn} 
menuText W OptionsBooksDir "ppningsbokskatalog..." 0 {Anger ppningsbokskatalogen}
menuText W OptionsTacticsBasesDir "Taktikbaskatalog..." 0 {Anger Taktikbaskatalog (fr trning)}
menuText W OptionsSave "Spara alternativ" 7 \
  "Spara alla alternativ till en instllningsfil"
menuText W OptionsAutoSave "Autospara vid avslut" 1 \
  {Spara alla alternativ nr du avslutar Scid}

# Help menu:
menuText W Help "Hjlp" 0
menuText W HelpContents "Innehll" 0 {Visa innehll} 
menuText W HelpIndex "Index" 0 {Hjlpsystemets indexsida}
menuText W HelpGuide "Snabbguide" 0 {Visa snabbguiden}
menuText W HelpHints "Tips" 0 {Visa tips}
menuText W HelpContact "Kontaktinformation" 0 {Visa kontaktinformation}
menuText W HelpTip "Dagens tips" 0 {Anvndbara Scid tips}
menuText W HelpStartup "Startfnster" 5 {Visa startfnstret}
menuText W HelpAbout "Om Scid" 0 {Information om Scid}

# Game info box popup menu:
menuText W GInfoHideNext "Dlj nsta drag" 0
menuText W GInfoMaterial "Visa materialvrden" 0
menuText W GInfoFEN "Visa FEN" 5
menuText W GInfoMarks "Visa frgade flt och pilar" 22 
menuText W GInfoWrap "Radbrytning" 0
menuText W GInfoFullComment "Visa fullstndiga kommentarer" 18
menuText W GInfoPhotos "Visa bilder" 5 ;
menuText W GInfoTBNothing "Slutspelsdatabaser: inget" 20
menuText W GInfoTBResult "Slutspelsdatabaser: endast resultat" 28
menuText W GInfoTBAll "Slutspelsdatabaser: resultat och bsta drag" 33
menuText W GInfoDelete "terta/Radera detta parti" 0
menuText W GInfoMark "(Av-)Markera detta parti" 5
menuText W GInfoInformant "Konfigurera Informant-parametrar" 0

# Main window buttons:
helpMsg W .main.fbutton.button.start {G till brjan av partiet  (kortkommando: Home)}
helpMsg W .main.fbutton.button.end {G till slutet av partiet  (kortkommando: End)}
helpMsg W .main.fbutton.button.back {Backa ett drag (kortkommando: Vnsterpil)}
helpMsg W .main.fbutton.button.forward {G fram ett drag  (kortkommando: Hgerpil)}
helpMsg W .main.fbutton.button.intoVar {G in i variant (kortkommando: v)}
helpMsg W .main.fbutton.button.exitVar {G ur variant  (kortkommando: z)}
helpMsg W .main.fbutton.button.flip {Rotera brdet  (kortkommando: .)}
helpMsg W .main.fbutton.button.coords {Visa (inte) koordinater  (kortkommando: 0)}
helpMsg W .main.fbutton.button.stm {Visa (inte) vilken sida som r vid draget}
helpMsg W .main.fbutton.button.autoplay {Autospel  (kortkommando: Ctrl+Z)}
# ====== TODO To be translated ======
helpMsg W .main.fbutton.button.comment {Open comment editor (key: Ctrl+E)}
# ====== TODO To be translated ======
helpMsg W .main.fbutton.button.hgame_prev {Go back to previous viewed game}
# ====== TODO To be translated ======
helpMsg W .main.fbutton.button.hgame_next {Go forward to next viewed game}

# General buttons:
translate W Back {Tillbaka}
translate W Browse {Blddra}
translate W Cancel {Avbryt}
translate W Continue {Fortstt}
translate W Clear {Rensa}
translate W Close {Stng}
translate W Contents {Innehll}
translate W Defaults {Standard}
translate W Delete {Radera}
translate W Graph {Diagram}
translate W Help {Hjlp}
translate W Import {Importera}
translate W Index {Index}
translate W LoadGame {Ladda parti}
translate W BrowseGame {Blddra genom partier}
translate W MergeGame {Sl samman parti}
translate W MergeGames {Sl samman partier}
translate W Preview {Frhandsgranska}
translate W Revert {ngra inmatning}
translate W Save {Spara}
translate W Search {Sk}
translate W Stop {Stoppa}
translate W Store {Spara}
translate W Update {Uppdatera}
translate W ChangeOrient {ndra fnstrets orientering}
translate W ShowIcons {Visa Ikoner} ;# ***
translate W None {Ingen}
translate W First {Frsta}
translate W Current {Aktuella}
translate W Last {Sista}

# General messages:
translate W game {parti}
translate W games {partier}
translate W move {drag}
translate W moves {drag}
translate W all {alla}
translate W Yes {Ja}
translate W No {Nej}
translate W Both {Bda}
translate W King {Kung}
translate W Queen {Dam}
translate W Rook {Torn}
translate W Bishop {Lpare}
translate W Knight {Springare}
translate W Pawn {Bonde}
translate W White {Vit}
translate W Black {Svart}
translate W Player {Spelare}
translate W Rating {Rating}
translate W RatingDiff {Ratingskillnad (Vit - Svart)}
translate W AverageRating {Medelrating}
translate W Event {Evenemang}
translate W Site {Plats}
translate W Country {Land}
translate W IgnoreColors {Ignorera frger}
translate W Date {Datum}
translate W EventDate {Evenemangsdatum}
translate W Decade {Decennium}
translate W Year {r}
translate W Month {Mnad}
translate W Months {Januari Februari Mars April Maj Juni Juli Augusti September Oktober November December}
translate W Days {Sn Mn Tis Ons Tor Fre Lr}
translate W YearToToday {Idag}
translate W Result {Resultat}
translate W Round {Rond}
translate W Length {Lngd}
translate W ECOCode {ECO kod}
translate W ECO {ECO}
translate W Deleted {Raderad}
translate W SearchResults {Skresultat}
translate W OpeningTheDatabase {ppnar databas}
translate W Database {Databas}
translate W Filter {Filter}
translate W noGames {inga partier}
translate W allGames {alla partier}
translate W empty {tom}
translate W clipbase {Clipbase}
translate W score {resultat}
translate W StartPos {Utgngsstllning}
translate W Total {Totalt}
translate W readonly {bara lsbar} ;# ***

# Standard error messages:
translate W ErrNotOpen {Databasen r inte ppen.}
translate W ErrReadOnly {Databasen r skrivskyddad. Du kan inte ndra i den.}
translate W ErrSearchInterrupted {Skningen avbrts; resultatet r inte fullstndigt.}

# Game information:
translate W twin {dubblett}
translate W deleted {raderad}
translate W comment {kommentar}
translate W hidden {dold}
translate W LastMove {Senaste draget}
translate W NextMove {Nsta}
translate W GameStart {Utgngsstllning}
translate W LineStart {Varianten brjar}
translate W GameEnd {Slutstllning}
translate W LineEnd {Varianten slut}

# Player information:
translate W PInfoAll {Resultat fr <b>alla</b> partier}
translate W PInfoFilter {Resultat fr <b>filtrerade</b> partier}
translate W PInfoAgainst {Resultat mot}
translate W PInfoMostWhite {De vanligaste ppningarna som vit}
translate W PInfoMostBlack {De vanligaste ppningarna som svart}
translate W PInfoRating {Ratinghistoria}
translate W PInfoBio {Biografisk information}
translate W PInfoEditRatings {Redigera rating} 

# Tablebase information:
translate W Draw {Remi}
translate W stalemate {patt}
translate W withAllMoves {med alla drag}
translate W withAllButOneMove {med alla drag utom ett}
translate W with {med}
translate W only {bara}
translate W lose {frlust}
translate W loses {frluster}
translate W allOthersLose {alla andra drag frlorar}
translate W matesIn {med matt i}
translate W hasCheckmated {har satt matt}
translate W longest {lngst}
translate W WinningMoves {Vinstdrag} 
translate W DrawingMoves {Remidrag} 
translate W LosingMoves {Frlustdrag} 
translate W UnknownMoves {Oknt resultat} 

# Tip of the day:
translate W Tip {Tips}
translate W TipAtStartup {Tips vid start}

# Tree window menus:
menuText W TreeFile "Fil" 0
menuText W TreeFileFillWithBase "Fyll Cache med databas" 0 {Fyll Cachefilen med alla partier i den aktuella databasen}
menuText W TreeFileFillWithGame "Fyll Cache med parti" 0 {Fyll Cachefilen med aktuellt parti i den aktuella databasen}
menuText W TreeFileSetCacheSize "Cachestorlek" 0 {Ange Cachestorleken}
menuText W TreeFileCacheInfo "Cacheinformation" 0 {F information om Cacheanvndning}
menuText W TreeFileSave "Spara cachefil" 0 {Spara trdcache (*.stc)-filen}
menuText W TreeFileFill "Fyll cachefil" 0 \
 {Fyll cachefilen med vanliga ppningar}
menuText W TreeFileBest "Lista bsta partier" 0 {Visa lista ver de bsta partierna i trdet}
menuText W TreeFileGraph "Diagramfnster" 0 {Visa diagrammet fr denna gren i trdet}
menuText W TreeFileCopy "Kopiera trd till urklipp" 1 \
  {Kopierar trdrelaterad statistik till urklipp}
menuText W TreeFileClose "Stng trdfnstret" 0 {Stng trdfnstret}
menuText W TreeMask "Skmask" 0
menuText W TreeMaskNew "Ny" 0 {Ny skmask}
menuText W TreeMaskOpen "ppna" 0 {ppna skmask}
menuText W TreeMaskOpenRecent "ppna senaste" 0 {ppna senaste skmasken}
menuText W TreeMaskSave "Spara" 0 {Spara skmask}
menuText W TreeMaskClose "Stng" 0 {Stng skmask}
menuText W TreeMaskFillWithGame "Fyll med parti" 0 {Fyll skmask med parti}
menuText W TreeMaskFillWithBase "Fyll med databas" 0 {Fyll skmask med alla partier i databasen}
menuText W TreeMaskInfo "Info om skmask" 0 {Visa statistik fr aktuell skmask}
menuText W TreeMaskDisplay "Visa skmaskkarta" 0 {Visa skmaskdata i trdform}
menuText W TreeMaskSearch "Sk" 0 {Sk i aktuell skmask}
menuText W TreeSort "Sortera" 0
menuText W TreeSortAlpha "Alfabetiskt" 0
menuText W TreeSortECO "ECO kod" 0
menuText W TreeSortFreq "Frekvens" 0
menuText W TreeSortScore "Resultat" 0
menuText W TreeOpt "Alternativ" 0
menuText W TreeOptSlowmode "Lngsam mod" 0 {Lngsam mod fr uppdateringar (hg noggrannhet)}
menuText W TreeOptFastmode "Snabb mod" 0 {Snabb mod fr uppdateringar (ingen dragtranspositionering)}
menuText W TreeOptFastAndSlowmode "Snabb och lngsam mod" 0 {Snabb mod sedan lngsam mod fr uppdateringar}
menuText W TreeOptStartStop "Automatisk uppdatering" 0 {Vxlar automatisk uppdatering av trdfnstret}
menuText W TreeOptLock "Ls" 0 {Ls/ ls upp trdet fr den aktuella databasen}
menuText W TreeOptTraining "Trna" 0 {Starta/ stng av trningslge}
menuText W TreeOptAutosave "Spara cache filen automatiskt" 0 \
  {Spara cachefilen automatiskt nr trdfnstret stngs}
menuText W TreeHelp "Hjlp" 0
menuText W TreeHelpTree "Trdhjlp" 0
menuText W TreeHelpIndex "Hjlpindex" 0
translate W SaveCache {Spara cache}
translate W Training {Trna}
translate W LockTree {Ls}
translate W TreeLocked {Lst}
translate W TreeBest {Bst}
translate W TreeBestGames {Bsta partier i trdet}
# Note: the next message is the tree window title row. After editing it,
# check the tree window to make sure it lines up with the actual columns.
translate W TreeTitleRow \
  { Drag      ECO     Frekvens      Res.    Elo~  Niv  r~   %Remi} 
translate W TreeTotal {TOTALT} 
translate W DoYouWantToSaveFirst {Vill du spara frst}
translate W AddToMask {Lgg till i skmask}
translate W RemoveFromMask {Ta bort frn skmask}
translate W AddThisMoveToMask {Lgg till deta drag i skmask}
translate W SearchMask {Sk i skmask}
translate W DisplayMask {Visa skmask}
translate W Nag {NAG-kod}
translate W Marker {Markera}
translate W Include {Inkludera}
translate W Exclude {Exkludera}
translate W MainLine {Huvudvariant}
translate W Bookmark {Bokmrke}
translate W NewLine {Ny variant}
translate W ToBeVerified {Att bli verifierad}
translate W ToTrain {Att trna}
translate W Dubious {Tveksam}
translate W ToRemove {Att ta bort}
translate W NoMarker {Ingen markering}
translate W ColorMarker {Frg}
translate W WhiteMark {Vit}
translate W GreenMark {Grn}
translate W YellowMark {Gul}
translate W BlueMark {Bl}
translate W RedMark {Rd}
translate W CommentMove {Kommentera drag}
translate W CommentPosition {Kommentera position}
translate W AddMoveToMaskFirst {Lgg till drag till skmask frst}
translate W OpenAMaskFileFirst {ppna en skmaskmaskfil frst}
translate W Positions {Positioner}
translate W Moves {Drag}

# Finder window:
menuText W FinderFile "Fil" 0
menuText W FinderFileSubdirs "Sk i underkataloger" 0
menuText W FinderFileClose "Stng Filskaren" 0
menuText W FinderSort "Sortera" 0
menuText W FinderSortType "Typ" 0
menuText W FinderSortSize "Storlek" 0
menuText W FinderSortMod "Frndrad" 0
menuText W FinderSortName "Namn" 0
menuText W FinderSortPath "Skvg" 0
menuText W FinderTypes "Typer" 0
menuText W FinderTypesScid "Sciddatabaser" 0
menuText W FinderTypesOld "Sciddatabaser i ldre format" 0
menuText W FinderTypesPGN "PGN-filer" 0
menuText W FinderTypesEPD "EPD-filer" 0
menuText W FinderTypesRep "ppningsfiler" 0
menuText W FinderHelp "Hjlp" 0
menuText W FinderHelpFinder "Hjlp fr Filskaren" 0
menuText W FinderHelpIndex "Hjlpindex" 0
translate W FileFinder {Filskaren}
translate W FinderDir {Katalog}
translate W FinderDirs {Kataloger}
translate W FinderFiles {Filer}
translate W FinderUpDir {upp}
translate W FinderCtxOpen {ppna}
translate W FinderCtxBackup {Spara}
translate W FinderCtxCopy {Kopiera}
translate W FinderCtxMove {Flytta}
translate W FinderCtxDelete {Ta bort}

# Player finder:
menuText W PListFile "Fil" 0
menuText W PListFileUpdate "Uppdatera" 0
menuText W PListFileClose "Stng spelarfrteckningen" 1 
menuText W PListSort "Sortera" 0
menuText W PListSortName "Namn" 0
menuText W PListSortElo "Elo" 0
menuText W PListSortGames "Partier" 0
menuText W PListSortOldest "ldst" 0 
menuText W PListSortNewest "Yngst" 0

# Tournament finder:
menuText W TmtFile "Fil" 0
menuText W TmtFileUpdate "Uppdatera" 0
menuText W TmtFileClose "Stng turneringshanteraren" 0
menuText W TmtSort "Sortera" 0
menuText W TmtSortDate "Datum" 0
menuText W TmtSortPlayers "Spelare" 0
menuText W TmtSortGames "Partier" 0
menuText W TmtSortElo "Elo" 0
menuText W TmtSortSite "Plats" 0
menuText W TmtSortEvent "Evenemang" 1
menuText W TmtSortWinner "Vinnare" 0
translate W TmtLimit "Listbegrnsningar"
translate W TmtMeanElo "Lgsta snitt Elo"
translate W TmtNone "Inga turneringar hittades."

# Graph windows:
menuText W GraphFile "Fil" 0
menuText W GraphFileColor "Spara som Postscript (i frg)" 8
menuText W GraphFileGrey "Spara som Postscript (i grskala)" 8
menuText W GraphFileClose "Stng fnster" 6
menuText W GraphOptions "Alternativ" 0
menuText W GraphOptionsWhite "Vit" 0
menuText W GraphOptionsBlack "Svart" 0
menuText W GraphOptionsBoth "Bda" 1
menuText W GraphOptionsPInfo "Spelarinformation" 0
translate W GraphFilterTitle "Filterdiagram: antal per 1000 partier"
translate W GraphAbsFilterTitle "Filtergraf: frekvens fr partierna"
translate W ConfigureFilter {Konfigurera X-axlar fr r, Rating och Drag}
translate W FilterEstimate "Uppskatta"
translate W TitleFilterGraph "Scid: Filtergraf"

# Analysis window:
translate W AddVariation {Lgg till variation}
translate W AddAllVariations {Lgg till alla variationer}
translate W AddMove {Lgg till drag}
translate W Annotate {Kommentera}
translate W ShowAnalysisBoard {Visa Analysbrde}
translate W ShowInfo {Visa schackmotorinformation}
translate W FinishGame {Avsluta parti}
translate W StopEngine {Stoppa schackmotor}
translate W StartEngine {Starta schackmotor}
translate W LockEngine {Ls schackmotor vid nuvarande position}
translate W AnalysisCommand {Analysera}
translate W PreviousChoices {Fregende val}
translate W AnnotateTime {Ange tid mellan drag i sekunder}
translate W AnnotateWhich {Lgg till variationer}
translate W AnnotateAll {Fr bda sidors drag}
translate W AnnotateAllMoves {Kommentera alla drag}
translate W AnnotateWhite {Endast vits drag}
translate W AnnotateBlack {Endast svarts drag}
translate W AnnotateBlundersOnly {Nr partidraget r en uppenbar blunder}
translate W AnnotateBlundersOnlyScoreChange {Analysen rapporterar blunder, med vrderingsfrndringar frn/till: }
translate W BlundersThreshold {Trskelvrde}
translate W ScoreAllMoves {Score all moves}
translate W LowPriority {Kr som lgprioriterad process} 
translate W ClickHereToSeeMoves {Klicka hr fr att se drag}
translate W ConfigureInformant {Konfigurera Informant-parametrar}
translate W Informant!? {Intressant drag}
translate W Informant? {Dligt drag}
translate W Informant?? {Blunder}
translate W Informant?! {Tveksamt drag}
translate W Informant+= {Vit har en mindre frdel}
translate W Informant+/- {Vit har en liten frdel}
translate W Informant+- {Vit har en avgrande frdel}
translate W Informant++- {Partiet anses vara vunnet}
translate W Book {Bok}
translate W OtherBookMoves {Motstndarens bok}
translate W OtherBookMovesTooltip {Drag som motstndaren har ett svar p}

# Analysis Engine open dialog:
translate W EngineList {Lista ver schackprogram}
translate W EngineName {Namn}
translate W EngineCmd {Startkommando}
translate W EngineArgs {Parametrar} 
translate W EngineDir {Katalog}
translate W EngineElo {Elo}
translate W EngineTime {Datum}
translate W EngineNew {Ny}
translate W EngineEdit {Redigera}
translate W EngineRequired {Fet stil indikerar obligatoriska flt; vriga flt r frivilliga} 

# Stats window menus:
menuText W StatsFile "Fil" 0
menuText W StatsFilePrint "Skriv ut till fil..." 0
menuText W StatsFileClose "Stng fnster" 0
menuText W StatsOpt "Alternativ" 0

# PGN window menus:
menuText W PgnFile "Fil" 0
menuText W PgnFileCopy "Kopiera partiet till Clipbase" 0
menuText W PgnFilePrint "Skriv ut till..." 0
menuText W PgnFileClose "Stng PGN-fnster" 0
menuText W PgnOpt "Presentation" 0
menuText W PgnOptColor "Frg" 0
menuText W PgnOptShort "Kort (3-raders) huvud" 0
menuText W PgnOptSymbols "Symbolbaserad kommentar" 1
menuText W PgnOptIndentC "Indragna kommentarer" 0
menuText W PgnOptIndentV "Indragna variationer" 7
menuText W PgnOptColumn "Spaltstil (ett drag per rad)" 1
menuText W PgnOptSpace "Utrymme efter dragnummer" 1
menuText W PgnOptStripMarks "Avlgsna koder fr frgade flt och pilar" 1 
menuText W PgnOptBoldMainLine "Anvnd Fet Text fr Huvudvariationsdrag" 4
menuText W PgnColor "Frger" 0
menuText W PgnColorHeader "Huvud..." 0
menuText W PgnColorAnno "Noteringar..." 0
menuText W PgnColorComments "Kommentarer..." 0
menuText W PgnColorVars "Variationer..." 0
menuText W PgnColorBackground "Bakgrund..." 0
menuText W PgnColorMain "Huvudvariation..." 0
menuText W PgnColorCurrent "Aktuellt drag bakgrund..." 1
menuText W PgnHelp "Hjlp" 0
menuText W PgnHelpPgn "PGN-hjlp" 0
menuText W PgnHelpIndex "Index" 0
translate W PgnWindowTitle {PGN-version av partiet %u} 

# Crosstable window menus:
menuText W CrosstabFile "Fil" 0
menuText W CrosstabFileText "Skriv ut till textfil..." 9
menuText W CrosstabFileHtml "Skriv ut till HTML-fil..." 9
menuText W CrosstabFileLaTeX "Skriv ut till LaTeX-fil..." 9
menuText W CrosstabFileClose "Stng resultattabellsfnstret" 0
menuText W CrosstabEdit "Redigera" 0
menuText W CrosstabEditEvent "Evenemang" 0
menuText W CrosstabEditSite "Plats" 0
menuText W CrosstabEditDate "Datum" 0
menuText W CrosstabOpt "Presentation" 0
menuText W CrosstabOptAll "Alla-mter-alla" 0
menuText W CrosstabOptSwiss "Schweizer" 0
menuText W CrosstabOptKnockout "Knock Out" 0
menuText W CrosstabOptAuto "Auto" 1
menuText W CrosstabOptAges "lder i r" 8
menuText W CrosstabOptNats "Nationalitet" 0
menuText W CrosstabOptRatings "Rating" 0
menuText W CrosstabOptTitles "Titlar" 0
menuText W CrosstabOptBreaks "Tie-break pong" 4
menuText W CrosstabOptDeleted "Inkludera raderade partier" 8 
menuText W CrosstabOptColors "Frg (endast Schweizer)" 0
menuText W CrosstabOptColumnNumbers "Numrerade kolumner (Endast alla-mot-alla)" 2 
menuText W CrosstabOptGroup "Gruppresultat" 0
menuText W CrosstabSort "Sortera" 0
menuText W CrosstabSortName "Namn" 0
menuText W CrosstabSortRating "Rating" 0
menuText W CrosstabSortScore "Resultat" 0
menuText W CrosstabColor "Frg" 0
menuText W CrosstabColorPlain "Ren text" 0
menuText W CrosstabColorHyper "Hypertext" 0
menuText W CrosstabHelp "Hjlp" 0
menuText W CrosstabHelpCross "Hjlp fr resultattabell" 0
menuText W CrosstabHelpIndex "Hjlpindex" 0
translate W SetFilter {Bestm filter}
translate W AddToFilter {Utka filter}
translate W Swiss {Schweizer}
translate W Category {Kategori} 

# Opening report window menus:
menuText W OprepFile "Fil" 0
menuText W OprepFileText "Skriv ut till textfil..." 9
menuText W OprepFileHtml "Skriv ut till HTML-fil..." 9
menuText W OprepFileLaTeX "Skriv ut till LaTeX-fil..." 9
menuText W OprepFileOptions "Alternativ..." 0
menuText W OprepFileClose "Stng rapportfnstret" 0
menuText W OprepFavorites "Favoriter" 1 
menuText W OprepFavoritesAdd "Lgg till rapport..." 0 
menuText W OprepFavoritesEdit "Redigera favoritrapport..." 0 
menuText W OprepFavoritesGenerate "Skapa rapport..." 0 
menuText W OprepHelp "Hjlp" 0
menuText W OprepHelpReport "Hjlp fr ppningsrapporter" 0
menuText W OprepHelpIndex "Hjlpindex" 0

# Repertoire editor:
menuText W RepFile "Fil" 0
menuText W RepFileNew "Ny" 0
menuText W RepFileOpen "ppna..." 0
menuText W RepFileSave "Spara..." 0
menuText W RepFileSaveAs "Spara som..." 5
menuText W RepFileClose "Stng fnster" 0
menuText W RepEdit "Redigera" 0
menuText W RepEditGroup "Lgg till grupp" 4
menuText W RepEditInclude "Lgg till inkluderad variation" 4
menuText W RepEditExclude "Lgg till exkluderad variation" 4
menuText W RepView "Visa" 0
menuText W RepViewExpand "Expandera alla grupper" 0
menuText W RepViewCollapse "Implodera alla grupper" 0
menuText W RepSearch "Sk" 0
menuText W RepSearchAll "Hela ppningsrepetoaren..." 0
menuText W RepSearchDisplayed "Endast visade variationer..." 0
menuText W RepHelp "Hjlp" 0
menuText W RepHelpRep "Hjlp fr spelppningsrepetoar" 0
menuText W RepHelpIndex "Hjlpindex" 0
translate W RepSearch "Sk i spelppningsrepetoar"
translate W RepIncludedLines "inkluderade variationer"
translate W RepExcludedLines "exkluderade variationer"
translate W RepCloseDialog {Du har osparade ndringar i repetoaren.

Vill du verkligen fortstta och frlora dina frndringar?
}

# Header search:
translate W HeaderSearch {Sk i partihuvud}
translate W EndSideToMove {Sida vid draget vid slutet av partiet}
translate W GamesWithNoECO {Partier utan ECO-kod?}
translate W GameLength {Partilngd}
translate W FindGamesWith {Hitta flaggade partier}
translate W StdStart {Normal utgngsstllning}
translate W Promotions {Frvandlingar}
translate W Comments {Kommentarer}
translate W Variations {Variationer}
translate W Annotations {Noteringar}
translate W DeleteFlag {Raderingsflagga}
translate W WhiteOpFlag {Vits ppning}
translate W BlackOpFlag {Svarts ppning}
translate W MiddlegameFlag {Mittspel}
translate W EndgameFlag {Slutspel}
translate W NoveltyFlag {Nyhet}
translate W PawnFlag {Bondestruktur}
translate W TacticsFlag {Taktiska stllningar}
translate W QsideFlag {Damflygelsinitiativ}
translate W KsideFlag {Kungsflygelsinitiativ}
translate W BrilliancyFlag {Utmrkt parti}
translate W BlunderFlag {Bortsttningar}
translate W UserFlag {Anvndare}
translate W PgnContains {PGN innehller text}
translate W Annotator {Kommentator}
translate W Cmnts {Bara kommenterade partier}

# Game list window:
translate W GlistNumber {Nummer}
translate W GlistWhite {Vit}
translate W GlistBlack {Svart}
translate W GlistWElo {Elo, vit}
translate W GlistBElo {Elo, svart}
translate W GlistEvent {Evenemang}
translate W GlistSite {Plats}
translate W GlistRound {Rond}
translate W GlistDate {Datum}
translate W GlistYear {r}
translate W GlistEDate {Startdatum}
translate W GlistResult {Resultat}
translate W GlistLength {Lngd}
translate W GlistCountry {Land}
translate W GlistECO {ECO}
translate W GlistOpening {ppning}
translate W GlistEndMaterial {Slutmaterial}
translate W GlistDeleted {Raderad}
translate W GlistFlags {Flaggor}
translate W GlistVars {Variationer}
translate W GlistComments {Kommentarer}
translate W GlistAnnos {Noteringar}
translate W GlistStart {Start}
translate W GlistGameNumber {Partinummer}
translate W GlistAverageElo {Medel-Elo}
translate W GlistRating {Rating}
translate W GlistFindText {Sk text}
translate W GlistMoveField {Drag}
translate W GlistEditField {Konfiguration}
translate W GlistAddField {Lgg till}
translate W GlistDeleteField {Ta bort}
translate W GlistWidth {Bredd}
translate W GlistAlign {Justering}
translate W GlistAlignL {Justera: vnster}
translate W GlistAlignR {Justera: hger}
translate W GlistAlignC {Justera: centrera}
translate W GlistColor {Frg}
translate W GlistSep {Separator}
translate W GlistCurrentSep {-- Aktuell --}
translate W GlistNewSort {Ny}
translate W GlistAddToSort {Lgg till}
translate W GsortSort {Sortera...}
translate W GsortDate {Datum}
translate W GsortYear {r}
translate W GsortEvent {Evenemang}
translate W GsortSite {Plats}
translate W GsortRound {Runda}
translate W GsortWhiteName {Vits namn}
translate W GsortBlackName {Svarts namn}
translate W GsortECO {ECO}
translate W GsortResult {Resultat}
translate W GsortMoveCount {Antal drag}
translate W GsortAverageElo {Medel-Elo}
translate W GsortCountry {Land}
translate W GsortDeleted {Borttagen}
translate W GsortEventDate {Evenemangsdatum}
translate W GsortWhiteElo {Vits Elo}
translate W GsortBlackElo {Svarts Elo}
translate W GsortComments {Kommentarer}
translate W GsortVariations {Variationer}
translate W GsortNAGs {Kommentarssymboler}
translate W GsortAscending {Stigande}
translate W GsortDescending {Sjunkande}
translate W GsortAdd {Lgg till}
translate W GsortStore {Spara}
translate W GsortLoad {ppna}
translate W GlistRemoveThisGameFromFilter  {Ta bort detta parti frn Filter}
translate W GlistRemoveGameAndAboveFromFilter  {Ta bort parti (och alla ovanfr det) frn Filter}
translate W GlistRemoveGameAndBelowFromFilter  {Ta bort parti (och alla nedanfr det) frn Filter}
translate W GlistDeleteGame {Ta tillbaka detta parti} 
translate W GlistDeleteAllGames {Ta bort alla partier i filtret} 
translate W GlistUndeleteAllGames {Ta tillbaka alla partier i filtret} 
translate W GlistMergeGameInBase {Lgg till parti i annan databas} 

# Maintenance window:
translate W DatabaseName {Databasnamn:}
translate W TypeIcon {Ikontyp:}
translate W NumOfGames {Partier:}
translate W NumDeletedGames {Raderade partier:}
translate W NumFilterGames {Partier i filter:}
translate W YearRange {Tidsperiod:}
translate W RatingRange {Ratingintervall:}
translate W Description {Beskrivning} 
translate W Flag {Flagga}
translate W CustomFlags {Anpassade flaggor}
translate W DeleteCurrent {Ta bort aktuellt parti}
translate W DeleteFilter {Ta bort partierna i filtret}
translate W DeleteAll {Ta bort alla partier}
translate W UndeleteCurrent {terta aktuellt parti}
translate W UndeleteFilter {terta partierna i filtret}
translate W UndeleteAll {terta alla partier}
translate W DeleteTwins {Ta bort dubbletter}
translate W MarkCurrent {Markera aktuellt parti}
translate W MarkFilter {Markera partierna i filtret}
translate W MarkAll {Markera alla partier}
translate W UnmarkCurrent {Avmarkera aktuellt parti}
translate W UnmarkFilter {Avmarkera partierna i filtret}
translate W UnmarkAll {Avmarkera alla partier}
translate W Spellchecking {Rttstava}
translate W Players {Spelare}
translate W Events {Evenemang}
translate W Sites {Platser}
translate W Rounds {Ronder}
translate W DatabaseOps {Databashantering}
translate W ReclassifyGames {ECO-klassificera partier}
translate W CompactDatabase {Komprimera databasen}
translate W SortDatabase {Sortera databasen}
translate W AddEloRatings {Lgg till Elorating}
translate W AutoloadGame {Ladda partinummer automatiskt}
translate W StripTags {Avlgsna PGN-taggar}
translate W StripTag {Avlgsna taggar}
translate W Cleaner {Snygga till databasen}
translate W CleanerHelp {
Databasstdaren i Scid genomfr allt det underhll av databasen du vljer nedan p den aktiva databasen.

De nuvarande instllningarna i ECO-klassificering och Radera dubbletter kommer att appliceras om du vljer dessa tgrder.
}
translate W CleanerConfirm {
Nr du vl startat Databasstdaren kan du inte avbryta den!

P en stor databas kan detta ta ett bra tag. Tidstgngen beror p valda tgrder och deras instllningar.

r du sker p att du vill pbrja databasunderhllet nu?
}
translate W TwinCheckUndelete {att vxla; "u" tar tillbaka bda)}
translate W TwinCheckprevPair {Tidigare par}
translate W TwinChecknextPair {Nsta par}
translate W TwinChecker {Scid: Dublettpartikontrollerare}
translate W TwinCheckTournament {Partier i turnering:}
translate W TwinCheckNoTwin {Ingen dublett  }
translate W TwinCheckNoTwinfound {Ingen dublett detekterades fr detta parti.\nFr att visa dubletter med detta fnster, mste du frst anvnda "Ta bort dublettpartier..."-funktionen. }
translate W TwinCheckTag {Dela taggar...}
translate W TwinCheckFound1 {Scid hittade $result dublettpartier}
translate W TwinCheckFound2 { och ange deras borttagningsflaggor}
translate W TwinCheckNoDelete {Det finns inga partier i denna databas att ta bort.}
translate W TwinCriteria1 { Dina instllningar fr att hitta dublettpartier r potentiellt sannorlika att\norsaka att icke-dublettpartier med liknande drag blir markerade som dubletter.}
translate W TwinCriteria2 {Det r rekommenderat att om du vljer "Nej" fr "samma drag" och att du vljer "Ja" fr Frger, Evenemang, Plats, Runda, r och Mnads instllningar.\nVill du fortstta och ta bort dubletter nd? }
translate W TwinCriteria3 {Det r rekommenderat att du specificerar "Ja" fr tminstonde tv av "samma plats", "samma runda" och "samma r" instllningar.\nVill du fortstta och ta bort dubletter nd?}
translate W TwinCriteriaConfirm {Scid: Bekrfta dublettinstllningar}
translate W TwinChangeTag "ndra fljande partitaggar:\n\n"
translate W AllocRatingDescription "Detta kommando kommer att anvnda den aktuella stavningskontrollfilen fr att lgga till Elo-rating till partier i denna databas. Dr en spelare inte har en aktuell rating men hans/hennes rating vid tiden fr partiet r listat i stavningskontrollfilen, kommer denna rating att lggas till."
translate W RatingOverride "Skriv ver existerande inte-noll rating?"
translate W AddRatings "Lgg till rating till:"
translate W AddedRatings {Scid lade till $r Elo-ratingar i $g partier.}
translate W NewSubmenu "Ny undermeny"

# Comment editor:
translate W AnnotationSymbols  {Symboler:}
translate W Comment {Kommentar:}
translate W InsertMark {Infoga symbol} 
translate W InsertMarkHelp {
Infoga/ta bort markering: Vlj frg, typ av markering samt ruta.
Infoga/ta bort pil: Hger-klicka tv rutor.
}

# Nag buttons in comment editor:
translate W GoodMove {Bra drag}
translate W PoorMove {Dligt drag}
translate W ExcellentMove {Utmrkt drag}
translate W Blunder {Blunder}
translate W InterestingMove {Intressant drag}
translate W DubiousMove {Tveksamt drag}
translate W WhiteDecisiveAdvantage {Vit har en avgrande frdel}
translate W BlackDecisiveAdvantage {Svart har en avgrande frdel}
translate W WhiteClearAdvantage {Vit har en klar frdel}
translate W BlackClearAdvantage {Svart har en klar frdel}
translate W WhiteSlightAdvantage {Vit har en liten frdel}
translate W BlackSlightAdvantage {Svart har en liten frdel}
translate W Equality {Jmnvikt}
translate W Unclear {Oklar}
translate W Diagram {Diagram}

# Board search:
translate W BoardSearch {Positionsskningar}
translate W FilterOperation {Hantering av aktuellt filter:}
translate W FilterAnd {AND (Restriktivt filter)}
translate W FilterOr {OR (Ackumulativt filter)}
translate W FilterIgnore {IGNORE (Anvnd ej filter)}
translate W SearchType {Sktyp:}
translate W SearchBoardExact {Exakt position (alla pjser p samma rutor)}
translate W SearchBoardPawns {Bnder (samma material, alla bnder p samma rutor)}
translate W SearchBoardFiles {Filer (samma material, alla bnder p samma filer)}
translate W SearchBoardAny {Obestmt (samma material, bnder och pjser p valfria rutor)}
translate W SearchInRefDatabase {Sk i databas}
translate W LookInVars {Sk i variationer}

# Material search:
translate W MaterialSearch {Materialskning}
translate W Material {Material}
translate W Patterns {Stllningar}
translate W Zero {Inga/-en}
translate W Any {Flera}
translate W CurrentBoard {Aktuell stllning}
translate W CommonEndings {Vanliga slutspel}
translate W CommonPatterns {Vanliga stllningar}
translate W MaterialDiff {Skillnad i material}
translate W squares {rutor}
translate W SameColor {Samma frg}
translate W OppColor {Motsatt frg}
translate W Either {Antingen eller}
translate W MoveNumberRange {Dragintervall}
translate W MatchForAtLeast {Trffa minst}
translate W HalfMoves {halvdrag}

# Common endings in material search:
translate W EndingPawns {Bondeslutspel}
translate W EndingRookVsPawns {Torn mot Bonde (Bnder)}
translate W EndingRookPawnVsRook {Torn och 1 Bonde mot Torn}
translate W EndingRookPawnsVsRook {Torn och Bonde (Bnder) mot Torn}
translate W EndingRooks {Torn mot Torn slutspel}
translate W EndingRooksPassedA {Torn mot Torn slutspel med en fri a-bonde}
translate W EndingRooksDouble {Dubbla Torn slutspel}
translate W EndingBishops {Lpare mot Lpare slutspel}
translate W EndingBishopVsKnight {Lpare mot Springare slutspel}
translate W EndingKnights {Springare mot Springare slutspel}
translate W EndingQueens {Dam mot Dam slutspel}
translate W EndingQueenPawnVsQueen {Dam och 1 Bonde mot Dam}
translate W BishopPairVsKnightPair {Tv Lpare mot Tv Springare mittspel}

# Common patterns in material search:
translate W PatternWhiteIQP {Vit Isolerad dambonde}
translate W PatternWhiteIQPBreakE6 {Vit Isolerad dambonde: d4-d5 brott mot e6}
translate W PatternWhiteIQPBreakC6 {Vit Isolerad dambonde: d4-d5 brott mot c6}
translate W PatternBlackIQP {Svart Isolerad dambonde}
translate W PatternWhiteBlackIQP {Vit Isolerad dambonde mot Svart Isolerad dambonde}
translate W PatternCoupleC3D4 {Vit c3+d4 Isolaterat Bondepar}
translate W PatternHangingC5D5 {Svart Hngande Bnder p c5 och d5}
translate W PatternMaroczy {Maroczy Center (med Bnder p c4 och e4)}
translate W PatternRookSacC3 {Tornoffer p c3}
translate W PatternKc1Kg8 {O-O-O mot O-O (Kc1 mot Kg8)}
translate W PatternKg1Kc8 {O-O mot O-O-O (Kg1 mot Kc8)}
translate W PatternLightFian {Ljus-Ruta Fianchetton (Lpare-g2 mot Lpare-b7)}
translate W PatternDarkFian {Mrk-Ruta Fianchetton (Lpare-b2 mot Lpare-g7)}
translate W PatternFourFian {Fyra Fianchetton (Lpare p b2,g2,b7,g7)}

# Game saving:
translate W Today {Idag}
translate W ClassifyGame {Klassificera parti}

# Setup position:
translate W EmptyBoard {Tm brdet}
translate W InitialBoard {Utgngsstllning}
translate W SideToMove {Frg vid draget}
translate W MoveNumber {Antal drag}
translate W Castling {Rockad}
translate W EnPassantFile {En Passant fil}
translate W ClearFen {Rensa FEN}
translate W PasteFen {Klistra in FEN}
translate W SaveAndContinue {Spara och fortstt}
translate W DiscardChangesAndContinue {Ignorera ndringar\noch fortstt}
translate W GoBack {G tillbaka}

# Replace move dialog:
translate W ReplaceMove {Erstt drag}
translate W AddNewVar {Lgg till ny variation}
translate W NewMainLine {Ny huvudvariation}
translate W ReplaceMoveMessage {Det finns redan ett drag i denna stllning.

Du kan erstta detta drag, och frlora samtliga fljande, eller lgga till ditt drag som en ny variation.

(Om du stnger av "Frga fre erstt drag" i Alternativ:Drag menyn slipper du denna frga i framtiden.)}

# Make database read-only dialog:
translate W ReadOnlyDialog {Om du ger denna databas endast lsbar kan du inte gra ngra ndringar i den.
Inga partier kan sparas eller ersttas, och du kan inte ndra flaggor fr raderbara partier.
Alla sorteringsinstllningar eller ECO-klassificeringar kommer att vara temporra.

Du kan gra den skrivbar igen genom att helt enkelt stnga och ppna den igen.

Vill du verkligen ange att databasen endast ska vara lsbar?}

# Clear game dialog:
translate W ClearGameDialog {Detta parti har ndrats.

Vill du verkligen fortstta och frlora ndringarna?
}

# Exit dialog:
translate W ExitDialog {Vill du verkligen avsluta Scid?}
translate W ExitUnsaved {De fljande databaserna har osparade frndringar. Om du avslutar nu, kommer dessa frndringar att g frlorade.} 

# Import window:
translate W PasteCurrentGame {Klistra in aktuellt parti}
translate W ImportHelp1 {Ange eller klistra in ett parti i PGN-format i omrdet ovan.}
translate W ImportHelp2 {Eventuella felaktigheter kommer att anges hr.}
translate W OverwriteExistingMoves {Skriv ver existerande drag ?}

# ECO Browser:
translate W ECOAllSections {alla ECO avdelningar}
translate W ECOSection {ECO avdelning}
translate W ECOSummary {Sammanfattning fr}
translate W ECOFrequency {Underkodsfrekvens fr}

# Opening Report:
translate W OprepTitle {ppningsrapport}
translate W OprepReport {Rapport}
translate W OprepGenerated {Skapad av}
translate W OprepStatsHist {Statistik och historik}
translate W OprepStats {Statistik}
translate W OprepStatAll {Rapporterade partier}
translate W OprepStatBoth {Bda med rating}
translate W OprepStatSince {Sedan}
translate W OprepOldest {De ldsta partierna}
translate W OprepNewest {De yngsta partierna}
translate W OprepPopular {Aktuell popularitet}
translate W OprepFreqAll {Frekvens totalt:   }
translate W OprepFreq1   {Under det senaste ret: }
translate W OprepFreq5   {Under de 5 senaste ren: }
translate W OprepFreq10  {Under de 10 senaste ren: }
translate W OprepEvery {en gng var %u parti}
translate W OprepUp {kat %u%s gentemot samtliga r}
translate W OprepDown {minskat %u%s gentemot samtliga r}
translate W OprepSame {ingen frndring gentemot samtliga r}
translate W OprepMostFrequent {Spelas mest av}
translate W OprepMostFrequentOpponents {Vanligaste motstndaren}
translate W OprepRatingsPerf {Rating och resultat}
translate W OprepAvgPerf {Genomsnittrating och resultat}
translate W OprepWRating {Vits rating}
translate W OprepBRating {Svarts rating}
translate W OprepWPerf {Vits resultat}
translate W OprepBPerf {Svarts resultat}
translate W OprepHighRating {Partierna med hgst genomsnittsrating}
translate W OprepTrends {Resultattrender}
translate W OprepResults {Lngd och frekvens}
translate W OprepLength {Partiets lngd}
translate W OprepFrequency {Frekvens}
translate W OprepWWins {Vita vinster: }
translate W OprepBWins {Svarta vinster: }
translate W OprepDraws {Remier:      }
translate W OprepWholeDB {Hela databasen}
translate W OprepShortest {Kortaste vinster}
# translate W OprepShortWhite {De kortaste vita vinsterna}
# translate W OprepShortBlack {De kortaste svarta vinsterna}
translate W OprepMovesThemes {Drag och teman}
translate W OprepMoveOrders {Dragordning fr att n rapportstllningen}
translate W OprepMoveOrdersOne \
  {Stllningen nddes bara genom en dragordning:}
translate W OprepMoveOrdersAll \
  {Det fanns %u dragordningar som ledde fram denna stllning:}
translate W OprepMoveOrdersMany \
  {Det fanns %u dragordningar som ledde fram denna stllning. De %u vanligaste r:}
translate W OprepMovesFrom {Drag frn rapportstllningen}
translate W OprepMostFrequentEcoCodes {De mest frekommande ECO-koderna}
translate W OprepThemes {Positionella teman}
translate W OprepThemeDescription {Temanfrekvens de frsta %u dragen av varje parti}
# translate W OprepThemeDescription {Antal teman vid drag %u}
translate W OprepThemeSameCastling {Rockad p samma flygel}
translate W OprepThemeOppCastling {Rockad p olika flyglar}
translate W OprepThemeNoCastling {Ingen har gjort rockad}
translate W OprepThemeKPawnStorm {Bondestorm p kungsflygeln}
translate W OprepThemeQueenswap {Dambyte}
translate W OprepThemeWIQP {Isolerad vit dambonde} 
translate W OprepThemeBIQP {Isolerad svart dambonde}
translate W OprepThemeWP567 {Vit bonde p 5e/6e/7e raden}
translate W OprepThemeBP234 {Svart bonde p 2a/3e/4e raden}
translate W OprepThemeOpenCDE {ppen c/d/e linje}
translate W OprepTheme1BishopPair {Endast den ena sidan har lparparet}
translate W OprepEndgames {Slutspel}
translate W OprepReportGames {Antal partier i rapporten}
translate W OprepAllGames    {Samtliga partier}
translate W OprepEndClass {Material i slutstllningen}
translate W OprepTheoryTable {Teorisammanstllning}
translate W OprepTableComment {Skapad frn de %u hgst rankade partierna.}
translate W OprepExtraMoves {Ytterligare antal drag i notfrteckningen}
translate W OprepMaxGames {Maximalt antal partier i sammanstllningen}
translate W OprepViewHTML {Visa HTML}
translate W OprepViewLaTeX {Visa LaTeX}

# Player Report:
translate W PReportTitle {Spelarrapport} 
translate W PReportColorWhite {med de vita pjserna} 
translate W PReportColorBlack {med de svarta pjserna} 
translate W PReportMoves {efter %s} 
translate W PReportOpenings {ppningar} 
translate W PReportClipbase {Tm Clipbase och kopiera liknande partier dit} 


# Piece Tracker window:
translate W TrackerSelectSingle {Vnsterklicka fr att vlja denna pjs.} 
translate W TrackerSelectPair {Vnsterklicka fr att vlja denna pjs; anvnd hger musknapp fr att ocks vlja den relaterade pjsen.}
translate W TrackerSelectPawn {Vnsterklicka fr att vlja denna pjs; anvnd hger musknapp fr att vlja alla tta bnder.}
translate W TrackerStat {Statistik}
translate W TrackerGames {% partier med drag till rutan}
translate W TrackerTime {% tid p varje ruta}
translate W TrackerMoves {Drag}
translate W TrackerMovesStart {Ange vid vilket drag skningen ska brja.}
translate W TrackerMovesStop {Ange vid vilket drag skningen ska sluta.}

# Game selection dialogs:
translate W SelectAllGames {Alla partier i databasen}
translate W SelectFilterGames {Endast partierna i filtret}
translate W SelectTournamentGames {Endast partierna i den aktuella turneringen}
translate W SelectOlderGames {Endast ldre partier}

# Delete Twins window:
translate W TwinsNote {Partier mste minst ha samma spelare fr att kunna identifieras som dubbletter samt uppfylla andra kriterier du kan ange nedan. Nr dubbletter hittas raderas det kortare partiet. Tips: det bsta r att anvnda rttstavningen innan dubblettjmfrelsen eftersom detta frbttrar mjligheten fr upptckt av dubbletter.}
translate W TwinsCriteria {Kriterium: Dubbletter mste ha...}
translate W TwinsWhich {Ange vilka partier som ska jmfras}
translate W TwinsColors {Samma frger?}
translate W TwinsEvent {Samma evenemang?}
translate W TwinsSite {Samma plats?}
translate W TwinsRound {Samma rond?}
translate W TwinsYear {Samma r?}
translate W TwinsMonth {Samma mnad?}
translate W TwinsDay {Samma dag?}
translate W TwinsResult {Samma resultat?}
translate W TwinsECO {Samma ECO-kod?}
translate W TwinsMoves {Samma drag?}
translate W TwinsPlayers {Jmfr spelarnas namn:}
translate W TwinsPlayersExact {Exakt kopia}
translate W TwinsPlayersPrefix {Endast de 4 frsta bokstverna}
translate W TwinsWhen {Nr dubbletter tas bort}
translate W TwinsSkipShort {Ignorera alla partier som r kortare n 5 drag?}
translate W TwinsUndelete {terta alla partier frst?}
translate W TwinsSetFilter {Filtrera alla borttagna dubbletter?}
translate W TwinsComments {Spara alltid partier med kommentarer?}
translate W TwinsVars {Spara alltid partier med variationer?}
translate W TwinsDeleteWhich {Ange vilket parti som ska tas bort:} 
translate W TwinsDeleteShorter {Det kortare partiet} 
translate W TwinsDeleteOlder {Partiet med lgst nummer} 
translate W TwinsDeleteNewer {Partiet med hgst nummer} 
translate W TwinsDelete {Ta bort partier}

# Name editor window:
translate W NameEditType {Typ av namn att redigera}
translate W NameEditSelect {Partier att redigera}
translate W NameEditReplace {Erstt}
translate W NameEditWith {med}
translate W NameEditMatches {Matchar: Tryck Ctrl+1 till Ctrl+9 fr att vlja}
translate W CheckGames {Kontrollera partier}
translate W CheckGamesWhich {Kontrollera partier}
translate W CheckAll {Alla partier}
translate W CheckSelectFilterGames {Bara partier i filter}

# Classify window:
translate W Classify {Klassificera}
translate W ClassifyWhich {ECO-klassificera vilka partier?}
translate W ClassifyAll {Alla partier (skriv ver gamla ECO-koder)}
translate W ClassifyYear {Alla partier spelade under det senaste ret}
translate W ClassifyMonth {Alla partier spelade den senaste mnaden}
translate W ClassifyNew {Endast partier som nnu ej klassificerats}
translate W ClassifyCodes {ECO-koder som ska anvndas}
translate W ClassifyBasic {Enbart standardkoder ("B12", ...)}
translate W ClassifyExtended {Scidextensioner ("B12j", ...)}

# Compaction:
translate W NameFile {Namnfil}
translate W GameFile {Partifil}
translate W Names {Namn}
translate W Unused {Ej anvnd}
translate W SizeKb {Storlek (kb)}
translate W CurrentState {Aktuell status}
translate W AfterCompaction {Efter komprimering}
translate W CompactNames {Namn, komprimera namnfil}
translate W CompactGames {Partier, komprimera partifil}
translate W NoUnusedNames "Det finns inga oanvnda namn, s namnfilen r redan fullt komprimerad."
translate W NoUnusedGames "Partifilen r redan fullt komprimerad."
translate W NameFileCompacted {Namnfilen fr databasen "[file tail [sc_base filename]]" blev komprimerad.}
translate W GameFileCompacted {Partifilen fr databasen "[file tail [sc_base filename]]" blev komprimerad.}

# Sorting:
translate W SortCriteria {Kriterium}
translate W AddCriteria {Lgg till kriterium}
translate W CommonSorts {Normal sortering}
translate W Sort {Sortering}

# Exporting:
translate W AddToExistingFile {Lgg till partier till en existerande fil?}
translate W ExportComments {Exportera kommentarer?}
translate W ExportVariations {Exportera variationer?}
translate W IndentComments {Dra in kommentarer?}
translate W IndentVariations {Dra in variationer?}
translate W ExportColumnStyle {Kolumnstil (ett drag per rad)?}
translate W ExportSymbolStyle {Symbolbaserade kommentarer:}
translate W ExportStripMarks {Avlgsna koder fr flt och pilar frn kommentarerna?} 

# Goto game/move dialogs:
translate W LoadGameNumber {Ange partiets nummer:}
translate W GotoMoveNumber {G till drag nummer:}

# Copy games dialog:
translate W CopyGames {kopiera partier}
translate W CopyConfirm {
 Vill du verkligen kopiera
 de [::utils::thousands $nGamesToCopy] filtrerade partierna
 ur databasen "$fromName"
 till databasen "$targetName"?
}
translate W CopyErr {Kan ej kopiera partier}
translate W CopyErrSource {klldatabasen}
translate W CopyErrTarget {mldatabasen}
translate W CopyErrNoGames {har inga partier i filtret}
translate W CopyErrReadOnly {kan bara lsas}
translate W CopyErrNotOpen {r ej ppen}

# Colors:
translate W LightSquares {Ljusa flt}
translate W DarkSquares {Mrka flt}
translate W SelectedSquares {Valda flt}
translate W SuggestedSquares {Freslagna flt}
translate W WhitePieces {Vita pjser}
translate W BlackPieces {Svarta pjser}
translate W WhiteBorder {Vit kantlinje}
translate W BlackBorder {Svart kantlinje}

# Novelty window:
translate W FindNovelty {Hitta nyhet}
translate W Novelty {Nyhet}
translate W NoveltyInterrupt {Nyhetsskningen avbrts}
translate W NoveltyNone {Inga nyheter hittades i detta parti}
translate W NoveltyHelp {
Scid kommer att frska hitta det frsta draget som leder till en position som inte annars finns i denna databas eller i spelppingsboken baserad p ECO.
}

# Sounds configuration:
translate W SoundsFolder {Ljudfilskatalog}
translate W SoundsFolderHelp {Katalogen ska ha filerna King.wav, a.wav, 1.wav, etc}
translate W SoundsAnnounceOptions {Instllningar fr Dragannonsering}
translate W SoundsAnnounceNew {Annonsera nya drag nr de grs}
translate W SoundsAnnounceForward {Annonsera drag nr du gr fram ett drag}
translate W SoundsAnnounceBack {Annonsera drag nr du gr fram eller tillbaka ett drag}

# Upgrading databases:
translate W Upgrading {Uppdaterar}
translate W ConfirmOpenNew {
Denna databas r i ett gammal format (Scid 3) och kan inte ppnas i Scid 4, men en databas i det nya formatet (Scid 4) har redan skapats.

Vill du ppna den senare databasen istllet?
}
translate W ConfirmUpgrade {
Denna databas r i ett gammalt format (Scid 3). En databas i det nyare formatet mste skapas innan den kan anvndas i Scid 4.

Genom att uppdatera skapas en databas i det nya formatet med samma innehll; uppdateringen ndrar ingenting i den gamla databasen.

Detta kan ta ett tag men behver bara gras en gng. Om du tycker att det tar alltfr lng tid kan du avbryta processen.

Vill du uppdatera denna databas nu?
}

# Recent files options:
translate W RecentFilesMenu {Antal senast ppnade filer i Arkivmenyn}
translate W RecentFilesExtra {Antal senast ppnade filer i extra undermeny}

# My Player Names options:
translate W MyPlayerNamesDescription {
Ange en lista p dina favoritspelare hr nedanfr. Skriv ett namn per rad. Jokertecken ("?", t ex, motsvarar ett enstaka tecken medan "*" str fr flera tecken) r tilltna.

Varje gng ett parti med en spelare vars namn str i denna lista ppnas kommer brdet automatiskt att vridas s att partiet visas frn spelarens perspektiv.
} 
translate W showblunderexists {visa blunder finns}
translate W showblundervalue {visa blundervrde}
translate W showscore {visa vrdering}
translate W coachgame {trnarparti}
translate W configurecoachgame {konfigurera trnarparti}
translate W configuregame {Konfigurera parti}
translate W Phalanxengine {Phalanx schackmotor}
translate W Coachengine {Trnarschackmotor}
translate W difficulty {svrighetsgrad}
translate W hard {svr}
translate W easy {ltt}
translate W Playwith {Spela med}
translate W white {vit}
translate W black {svart}
translate W both {bda}
translate W Play {Spela}
translate W Noblunder {Ingen blunder}
translate W blunder {blunder}
translate W Noinfo {-- Ingen information --}
translate W PhalanxOrTogaMissing {Phalanx eller Toga hittades inte}
translate W moveblunderthreshold {drag r en blunder om frlust r strre n}
translate W limitanalysis {begrnsa schackmotors analystid}
translate W seconds {sekunder}
translate W Abort {Avbryt}
translate W Resume {Fortstt}
translate W OutOfOpening {utanfr ppning}
translate W NotFollowedLine {Du fljde inte variationen}
translate W DoYouWantContinue {Vill du fortstta ?}
translate W CoachIsWatching {Trnaren observerar}
translate W Ponder {Permanent tnkande}
translate W LimitELO {Begrnsa ELO-styrka}
translate W DubiousMovePlayedTakeBack {Ett tveksamt drag spelades, vill du ta tillbaka det ?}
translate W WeakMovePlayedTakeBack {Ett svagt drag spelades, vill du ta tillbaka det ?}
translate W BadMovePlayedTakeBack {Ett dligt drag spelades, vill du ta tillbaka det ?}
translate W Iresign {Jag ger upp}
translate W yourmoveisnotgood {ditt drag r inte bra}
translate W EndOfVar {Slut p variation}
translate W Openingtrainer {ppningstrnare}
translate W DisplayCM {Visa kandidatdrag}
translate W DisplayCMValue {Visa kandidatdragens vrden}
translate W DisplayOpeningStats {Visa statistik}
translate W ShowReport {Visa rapport}
translate W NumberOfGoodMovesPlayed {bra drag spelade}
translate W NumberOfDubiousMovesPlayed {tveksamma drag spelade}
translate W NumberOfMovesPlayedNotInRepertoire {drag spelade som inte finns i repetoar}
translate W NumberOfTimesPositionEncountered {gnger positionen ptrffats}
translate W PlayerBestMove  {Tillt bara bsta dragen}
translate W OpponentBestMove {Motstndare spelar bsta dragen}
translate W OnlyFlaggedLines {Bara markerade variationer}
translate W resetStats {Nollstll statistik}
translate W Repertoiretrainingconfiguration {Repetoartrnings-konfiguration}
translate W Loadingrepertoire {ppnar repetoar}
translate W Movesloaded {ppnat drag}
translate W Repertoirenotfound {Repetoar hittades inte}
translate W Openfirstrepertoirewithtype {ppna frst en repetoardatabas med ikon/typ angivet p hger sida}
translate W Movenotinrepertoire {Drag finns inte i repetoar}
translate W PositionsInRepertoire {Positioner i repetoar}
translate W PositionsNotPlayed {Positioner inte spelade}
translate W PositionsPlayed {Positioner spelade}
translate W Success {Framgng}
translate W DubiousMoves {Tveksamma drag}
translate W OutOfRepertoire {Utanfr repetoar}
translate W ConfigureTactics {Konfigurera taktik}
translate W ResetScores {Nollstll pong}
translate W LoadingBase {ppnar bas}
translate W Tactics {Taktik}
translate W ShowSolution {Visa lsning}
translate W NextExercise {Nsta vning}
translate W PrevExercise {Tidigare vning}
translate W StopTraining {Avbryt trning}
translate W Next {Nsta}
translate W ResettingScore {Nollstller pong}
translate W LoadingGame {ppnar parti}
translate W MateFound {Matt hittad}
translate W BestSolutionNotFound {Bsta lsningen hittades INTE !}
translate W MateNotFound {Matt hittades inte}
translate W ShorterMateExists {En kortare matt finns}
translate W ScorePlayed {Pong spelad}
translate W Expected {frvntat}
translate W ChooseTrainingBase {Vlj trningsbas}
translate W Thinking {Tnker}
translate W AnalyzeDone {Analys klar}
translate W WinWonGame {Vinn vunnet parti}
translate W Lines {Variationer}
translate W ConfigureUCIengine {Konfigurera UCI-schackmotor}
translate W SpecificOpening {Specifik ppning}
translate W StartNewGame {Starta nytt parti}
translate W FixedLevel {Fast niv}
translate W Opening {ppning}
translate W RandomLevel {Slumpmssig niv}
translate W StartFromCurrentPosition {Starta frn den aktuella positionen}
translate W FixedDepth {Fast skdjup}
translate W Nodes {Noder} 
translate W Depth {Skdjup}
translate W Time {Tid} 
translate W SecondsPerMove {Sekunder per drag}
translate W Engine {Schackmotor}
translate W TimeMode {Tidsmod}
translate W TimeBonus {Tid + bonus}
translate W TimeMin {min}
translate W TimeSec {sek}
translate W AllExercisesDone {Alla vningar gjorda}
translate W MoveOutOfBook {Drag utanfr bok}
translate W LastBookMove {Sista bokdrag}
translate W AnnotateSeveralGames {Kommentera flera partier\nfrn aktuellt till :}
translate W FindOpeningErrors {Hitta ppningsfel}
translate W MarkTacticalExercises {Markera taktiska vningar}
translate W UseBook {Anvnd bok}
translate W MultiPV {Flera variationer}
translate W Hash {Hashminne}
translate W OwnBook {Anvnd schackmotorbok}
translate W BookFile {ppningsbok}
translate W AnnotateVariations {Kommentera variationer}
translate W ShortAnnotations {Korta kommentarer}
translate W addAnnotatorTag {Lgg till kommentator-tagg}
translate W AddScoreToShortAnnotations {Lgg till vrdering till korta kommentarer}
translate W Export {Exportera}
translate W BookPartiallyLoaded {Bok delvis ppnad}
translate W Calvar {Berkning av variationer}
translate W ConfigureCalvar {Konfiguration}
translate W Reti {Reti}
translate W English {Engelsk}
translate W d4Nf6Miscellaneous {1.d4 Nf6 Diverse}
translate W Trompowsky {Trompowsky}
translate W Budapest {Budapest}
translate W OldIndian {Gammalindisk}
translate W BenkoGambit {Benko-gambit}
translate W ModernBenoni {Modern Benoni}
translate W DutchDefence {Hollndskt frsvar}
translate W Scandinavian {Skandinaviskt}
translate W AlekhineDefence {Alekhines frsvar}
translate W Pirc {Pirc}
translate W CaroKann {Caro-Kann}
translate W CaroKannAdvance {Caro-Kann Avancemang}
translate W Sicilian {Siciliansk}
translate W SicilianAlapin {Siciliansk Alapin}
translate W SicilianClosed {Stngd Siciliansk}
translate W SicilianRauzer {Siciliansk Rauzer}
translate W SicilianDragon {Siciliansk Drake}
translate W SicilianScheveningen {Siciliansk Scheveningen}
translate W SicilianNajdorf {Siciliansk Najdorf}
translate W OpenGame {ppet parti}
translate W Vienna {Wiener}
translate W KingsGambit {Kungsgambit}
translate W RussianGame {Ryskt parti}
translate W ItalianTwoKnights {Italianskt/Tvspringar}
translate W Spanish {Spanskt}
translate W SpanishExchange {Spanskt Avbytesvariant}
translate W SpanishOpen {pett Spanskt}
translate W SpanishClosed {Stngt Spanskt}
translate W FrenchDefence {Franskt Frsvar}
translate W FrenchAdvance {Fransk Avancemang}
translate W FrenchTarrasch {Fransk Tarrasch}
translate W FrenchWinawer {Fransk Winawer}
translate W FrenchExchange {Fransk Avbytesvariant}
translate W QueensPawn {Dambonde}
translate W Slav {Slav}
translate W QGA {Antagen Damgambit}
translate W QGD {Avbjd Damgambit}
translate W QGDExchange {Avbjd Damgambit Avbytesvariant}
translate W SemiSlav {Semi-Slav}
translate W QGDwithBg5 {Avbjd Damgambit med Bg5}
translate W QGDOrthodox {Avbjd Damgambit Ortodox}
translate W Grunfeld {Grnfeld}
translate W GrunfeldExchange {Grnfeld Avbytesvariant}
translate W GrunfeldRussian {Grnfeld Ryskt}
translate W Catalan {Catalan}
translate W CatalanOpen {ppen Catalan}
translate W CatalanClosed {Stngd Catalan}
translate W QueensIndian {Damindiskt}
translate W NimzoIndian {Nimzo-Indiskt}
translate W NimzoIndianClassical {Nimzo-Indiskt Klassiskt}
translate W NimzoIndianRubinstein {Nimzo-Indiskt Rubinstein}
translate W KingsIndian {Kungsindiskt}
translate W KingsIndianSamisch {Kungsindiskt Smisch}
translate W KingsIndianMainLine {Kungsindiskt Huvudvariation}
translate W ConfigureFics {Konfigurera FICS}
translate W FICSGuest {Logga in som Gst}
translate W FICSServerPort {Server-port}
translate W FICSServerAddress {IP-adress}
translate W FICSRefresh {Uppdatera}
translate W FICSTimesealPort {Timeseal-port}
translate W FICSSilence {Tystnad}
translate W FICSOffers {Erbjuder}
translate W FICSConsole {Konsol}
translate W FICSGames {Partier}
translate W FICSUnobserve {Sluta observera parti}
translate W FICSProfile {Visa din historik och profil}
translate W FICSRelayedGames {terutsnda partier}
translate W FICSFindOpponent {Hitta motstndare}
translate W FICSTakeback {Ta tillbaka}
translate W FICSTakeback2 {Ta tillbaka 2}
translate W FICSInitTime {Initialtid (minuter)}
translate W FICSIncrement {Inkrementering (sekunder)}
translate W FICSRatedGame {Ratingparti}
translate W FICSAutoColour {automatisk}
translate W FICSManualConfirm {bekrfta manuellt}
translate W FICSFilterFormula {Filtrera med formel}
translate W FICSIssueSeek {Skfrga}
translate W FICSChallenge {Utmana}
translate W FICSAccept {acceptera}
translate W FICSDecline {avbj}
translate W FICSColour {frg}
translate W FICSSend {skicka}
translate W FICSConnect {Anslut}
translate W FICSdefaultuservars {Anvnd standardvariabler}
translate W FICSObserveconfirm {Vill du observera parti} 
# ====== TODO To be translated ======
translate W FICSpremove {Enable premove}
translate W GameReview {Partiversikt}
translate W GameReviewTimeExtended {Utkad tid}
translate W GameReviewMargin {Felmarginal}
translate W GameReviewAutoContinue {Fortstt automatiskt nr drag r korrekt}
translate W GameReviewReCalculate {Anvnd utkad tid}
translate W GameReviewAnalyzingMovePlayedDuringTheGame {Analysera drag spelat under partiet}
translate W GameReviewAnalyzingThePosition {Analysera positionen}
translate W GameReviewEnterYourMove {Ange ditt drag}
translate W GameReviewCheckingYourMove {Kontrollerar ditt drag}
translate W GameReviewYourMoveWasAnalyzed {Ditt drag analyserades}
translate W GameReviewYouPlayedSameMove {Du speladade samma drag som i partiet}
translate W GameReviewScoreOfYourMove {Vrdering av ditt drag}
translate W GameReviewGameMoveScore {Partidragets vrdering}
translate W GameReviewEngineScore {Schackmotorns vrdering}
translate W GameReviewYouPlayedLikeTheEngine {Du spelade som schackmotorn}
translate W GameReviewNotEngineMoveButGoodMove {Inte schackmotordraget, men det r ocks ett bra drag}
translate W GameReviewMoveNotGood {Detta drag r inte bra, vrderingen r}
translate W GameReviewMovesPlayedLike {Drag spelade som}
translate W GameReviewMovesPlayedEngine {Drag apelade som schackmotorn}
translate W CCDlgConfigureWindowTitle {Konfigurera Korrespondensschack}
translate W CCDlgCGeneraloptions {Generella instllningar}
translate W CCDlgDefaultDB {Standarddatabas:}
translate W CCDlgInbox {Inkorg (skvg):}
translate W CCDlgOutbox {Utkorg (skvg):}
translate W CCDlgXfcc {Xfcc-Konfiguration:}
translate W CCDlgExternalProtocol {Extern Protokollhanterare (t.ex. Xfcc)}
translate W CCDlgFetchTool {Hmtningsverktyg:}
translate W CCDlgSendTool {Sndverktyg:}
translate W CCDlgEmailCommunication {eMail-kommunikation}
translate W CCDlgMailPrg {eMail-program:}
translate W CCDlgBCCAddr {(B)CC-address:}
translate W CCDlgMailerMode {Mod:}
translate W CCDlgThunderbirdEg {t.ex. Thunderbird, Mozilla Mail, Icedove...}
translate W CCDlgMailUrlEg {t.ex. Evolution}
translate W CCDlgClawsEg {t.ex Sylpheed Claws}
translate W CCDlgmailxEg {t.ex. mailx, mutt, nail...}
translate W CCDlgAttachementPar {Bilage-parameter:}
translate W CCDlgInternalXfcc {Anvnd internt Xfcc-std}
translate W CCDlgConfirmXfcc {Bekrfta drag}
translate W CCDlgSubjectPar {mnes-parameter:}
translate W CCDlgDeleteBoxes {Tm In-/Utkorg} 
translate W CCDlgDeleteBoxesText {Vill du verkligen tmma dina In- och Utkorgskataloger fr Korrespondensschack? Detta krver en ny synkronisering fr att visa den seanaste statusen p dina partier} 
translate W CCDlgConfirmMove {Bekrfta drag} 
translate W CCDlgConfirmMoveText {Om du bekrftar, kommer fljande drag och kommentar att skickas till servern:} 
translate W CCDlgDBGameToLong {Inkonsekvent huvudvariation}
translate W CCDlgDBGameToLongError {Huvudvariationen i din databas r lngre n partiet i din Inkorg. Om Inkorgen innehller aktuella partier, dvs precis efter en synkronisering, lades ngra drag felaktigt till i huvudvariationen i databasen.\nI detta fall var god och frkorta huvudvariationen till (maximalt) drag\n}
translate W CCDlgStartEmail {Starta ett nytt eMail-parti}
translate W CCDlgYourName {Ditt Namn:}
translate W CCDlgYourMail {Din eMail-address:}
translate W CCDlgOpponentName {Motstndarnamn:}
translate W CCDlgOpponentMail {Motstndarens eMail-address:}
translate W CCDlgGameID {Parti-ID (unikt):}
translate W CCDlgTitNoOutbox {Scid: Korrespondensschackutkorg}
translate W CCDlgTitNoInbox {Scid: Korrespondensschackinkorg}
translate W CCDlgTitNoGames {Scid: Inga Korrespondensschackpartier}
translate W CCErrInboxDir {Korrespondensschacksinkorgskatalog:}
translate W CCErrOutboxDir {Korrespondensschacksutkorgskatalog:}
translate W CCErrDirNotUsable {finns inte eller r inte mjlig att anvnda!\nVar god och kontrollera och korrigera instllningarna.}
translate W CCErrNoGames {innehller inga partier!\nVar god och hmta dem frst.}
translate W CCDlgTitNoCCDB {Scid: Ingen Korrespondensdatabas}
translate W CCErrNoCCDB {Ingen Databas av typ 'Korrespondens' r ppnad. Var god och ppna en innan du anvnder Korrespondensschackfunktioner.}
translate W CCFetchBtn {Hmta partier frn servern och bearbeta Inkorgen}
translate W CCPrevBtn {G till tidigare parti}
translate W CCNextBtn {G till nsta parti}
translate W CCSendBtn {Skicka drag}
translate W CCEmptyBtn {Tm Inkorgen och Utkorgen}
translate W CCHelpBtn {Hjlp med ikoner och statusindikatorer.\nFr generell Hjlp tryck p F1!}
translate W CCDlgServerName {Servernamn:}
translate W CCDlgLoginName  {Inloggningsnamn:}
translate W CCDlgPassword   {Lsenord:}
translate W CCDlgURL        {Xfcc-URL:}
translate W CCDlgRatingType {Ratingtyp:}
translate W CCDlgDuplicateGame {Icke unikt parti-ID}
translate W CCDlgDuplicateGameError {Detta parti finns fler n en gng i din databas. Var god och ta bort alla dubbletter och komprimera din partifil (Arkiv/Underhll/Komprimera Databas).}
translate W CCDlgSortOption {Sorterar:}
translate W CCDlgListOnlyOwnMove {Bara partier dr jag r vid draget}
translate W CCOrderClassicTxt {Plats, Evenemang, Runda, Resultat, Vit, Svart}
translate W CCOrderMyTimeTxt {Min klocka}
translate W CCOrderTimePerMoveTxt {Tid per drag till nsta tidskontroll}
translate W CCOrderStartDate {Startdatum}
translate W CCOrderOppTimeTxt {Motstndarens klocka}
translate W CCDlgConfigRelay {Konfigurera ICCF-observationer}
translate W CCDlgConfigRelayHelp {G till partisidan p http://www.iccf-webchess.com och visa partiet att observera.  Om du ser schackbrder kopiera webadressen frn din weblsare till listan nedanfr. Bara en webadress per rad!\nExempel: http://www.iccf-webchess.com/MakeAMove.aspx?id=266452}
translate W ExtHWConfigConnection {Konfigurera extern hrdvara}
translate W ExtHWPort {Port}
translate W ExtHWEngineCmd {Schackmotorkommando}
translate W ExtHWEngineParam {Schackmotorparameter}
translate W ExtHWShowButton {Visa knapp}
translate W ExtHWHardware {Hrdvara}
translate W ExtHWNovag {Novag Citrine}
translate W ExtHWInputEngine {Inmatningsschackmotor}
translate W ExtHWNoBoard {Inget brde}
translate W NovagReferee {Nedteckna bara dragen}
translate W IEConsole {Inmatningsschackmotorkonsol}
translate W IESending {Drag skickade fr}
translate W IESynchronise {Synkronisera}
translate W IERotate  {Rotera}
translate W IEUnableToStart {Kunde inste starta Inmatningsschackmotor:}
translate W DoneWithPosition {Klar med position}
translate W Board {Brde}
translate W showGameInfo {Visa partiinformation}
translate W autoResizeBoard {ndra storleken p brdet automatiskt}
translate W DockTop {Drag verst}
translate W DockBottom {Drag nederst}
translate W DockLeft {Drag till vnster}
translate W DockRight {Drag till hger}
translate W Undock {Avdocka}
translate W ChangeIcon {ndra ikon...}
}

############################################################
#
# Swedish tips section:

set tips(W) {
  {
    Scid har ver 30 <a Index>hjlpsidor</a>, och i de flesta fnster kan du
    genom att trycka <b>F1</b> f hjlp om det fnster du fr tillfllet har
    aktivt.
  }
  {
    Vissa fnster (t ex partiinformation och <a Switcher>databasvljaren</a>) 
    har en meny fr hger musknapp. Prova att hgerklicka i varje fnster s
    ser du vilka som har det och vilka funktioner du kommer t den vgen.
  }
  {
    Du kan ange drag p mer n ett stt, s du kan vlja vilket som passar dig
    bst. Du kan anvnda musen (med eller utan dragfrslag) eller tangentbordet
    (med eller utan autokomplettering). Ls hjlpsidan fr 
    <a Moves>att ange drag</a> fr mer information.
  }
  {
    Om du har databaser du ofta ppnar s kan du lgga till ett 
    <a Bookmarks>bokmrke</a> fr varje databas. Du kommer d att kunna ppna 
    databaserna snabbare via bokmrkesmenyn.
  }
  {
    Du kan se alla drag i det aktuella partiet (inklusive variationer och kommentarer)
    genom att ppna <a PGN>PGN-fnstret</a>.
    Du navigerar igenom partiet i PGN-fnstret genom att klicka p valfritt drag med
    vnster musknapp. Genom att klicka p draget med mellan- eller hgermusknapp s
    fr du en frhandsvisning av just den stllningen.
  }
  {
    Du kan kopiera partier mellan databaserna i <a Switcher>databasvljaren</a> genom
    att dra-och-slppa dem mellan respektive databas.
  }
  {
    Scid kan ppna PGN filer, ven de som r komprimerade med Gzip (dvs har en .gz filndelse). 
    PGN filer ppnas med enbart lsrttigheter, s om du vill redigera en PGN fil i Scid 
    mste du kopiera filen till en Scid databas med hjlp av <a Switcher>databasvljaren</a>.
  }
  {
    Om du ofta anvnder <a Tree>Trdfnstret</a> med stora databaser, r det vrt att vlja
    <b>Fyll cache fil</b> frn Arkivmenyn i Trdfnstret. Detta innebr att trdstatistik fr 
    mnga av de vanligare stllningarna sparas, vilket ger en snabbare trdtkomst fr databasen
    ifrga.
  }
  {
    <a Tree>Trdfnstret</a> kan visa alla drag frn den aktuella stllningen. Men om ocks vill 
    se alla dragfljder som har lett till denna stllning kan du f fram det genom att skapa en
   <a OpReport>ppningsrapport</a>.
  }
  {
    Du kan vnster- eller hgerklicka i en kolumn i <a GameList>partilistan</a> fr att ndra 
    dess bredd.
  }
  {
    Med <a PInfo>spelarinformationen</a> aktuell (klicka p endera spelarens namn under brdet i 
    huvudfnstret fr att f fram den) r det enkelt att <a Searches Filter>filtrera</a> fram partier
    av en srskild spelares enskilda resultat. Klicka bara p valfritt vrde som har angivits med
    <red>rd text</red>.
  }
  {
    Nr du studerar ppningar kan det vara en pong att markera valen <b>Bnder</b> eller <b>Filer</b> i 
    <a Searches Board>Sk aktuell position</a>. Genom dessa val kan du hitta andra ppningar som ger
    liknande bondestrukturer.
  }
  {
    Du kan hgerklicka i partiinformationsdelen av huvudfnstret (under brdet) fr att f fram en 
    kontextmeny. Du kan t ex gra s att Scid dljer nsta drag i ett parti, vilket kan vara anvndbart 
    om du vill trna genom att "gissa" nsta drag.
  }
  {
    Om du ofta <a Maintenance>underhller</a> stora databaser kan du utfra flera underhllsuppgifter 
    vid samma tillflle via <a Maintenance Cleaner>databasverktyget</a>.
  }
  {
    Om du har en stor databas dr de flesta partierna har ett evenemangsdatum och du vill ha partierna i 
    datumordning br du vervga att <a Sorting>sortera</a> den p evenemangsdatum i frsta hand och 
    evenemang i andra hand, istllet fr datum och evenemang, d detta kommer att hlla turneringspartierna
    frn olika datum samman. (Under frutsttning att alla partier har samma evenemangsdatum naturligtvis).
    Alternativt kan du se till att flten evenemang, rond och datum r s enhetliga och korrekta som mjligt.
    (ms).
  }
  {
    Det kan vara en bra ide att <a Maintenance Spellcheck>stavningskontrollera</a> din databas innan du 
    <a Maintenance Twins>raderar dubbletter</a> d Scid har strre mjlighet att hitta dubbletterna och 
    markera dessa fr borttagning.
  }
  {
    <a Flags>Flaggor</a> r anvndbara fr att markera upp partier med karaktristika du vill ska p senare,
    ssom bondestllning, taktiska finesser, osv. Du kan ska p flaggor nr du sker p flt i partihuvudet.
  }
  {
    Om du gr igenom ett parti, och helt enkelt vill testa en ny variation utan att frndra partiet i sig, kan 
    du sl p Frskslget (Trial mode) genom att trycka <b>Ctrl+Mellanslag</b> eller frn verktygsraden. terg till
    ursprungspartiet nr du r klar.
  }
  {
    Om du vill hitta det mest betydelsefulla partiet (med hgst rankade spelare) i en viss position kan du
    ppna <a Tree>Trdfnstret</a> och i denna ppna listan med de bsta partierna. I trdfnstret kan du till
    och med begrnsa partierna till endast ett srskilt resultat.
  }
  {
    Ett bra stt att studera en ppning r att i en stor databas sl p trningslget i <a Tree>Trdfnstret</a>, 
    och sedan spela igenom databasen fr att se vilka varianter som frekommer oftast.
  }
  {
    Om du har tv databaser ppna, och vill ha ett varianttrd att studera medan du gr igenom ett parti
    i den andra databasen kan du <b>lsa</b> trdet i den databasen och sedan byta till den andra.
  }
  {
    <a Tmt>Turneringsskaren (tournament finder)</a> r inte bara anvndbar fr att lokalisera en srskild 
    turnering. Du kan ocks anvnda den fr att ska efter turneringar en specifik spelare nyligen deltagit 
    i, eller att blddra genom turneringar som genomfrts i ett visst land.
  }
  {
    Det finns ett antal vanliga stllningstyper definierade i <a Searches Material>Sk material/stllning</a>
    fnstret som du kan ha nytta av nr du studerar ppningar och mittspel.
  }
  {
    Nr du sker p <a Searches Material>material eller stllning</a> kan det ofta vara frdelaktigt att begrnsa
    skningen till sdana partier dr stllningen eller materialet frekommit i tminstone ngra drag. Du slipper
    du f med trffar dr situationen du sker uppkom helt tillflligt.
  }
  {
    Om du har en viktig databas du inte vill radera av misstag kan du vlja  <b>Enbart lsbar</b> frn <b>Arkiv</b>
    menyn efter att du har ppnat den. Alternativt kan du stta dess filrttigheter till enbart lsrttigheter.
  }
  {
    Om du anvnder XBoard eller WinBoard (eller ngot annat program som kan hantera FEN notation via urklippshanteraren)
    och vill kopiera den aktuella stllningen frn ditt program r det snabbaste sttet att gra det s hr:
    Vlj <b>Copy Position</b> frn <b>File</b> menyn i Xboard/Winboard, vlj sedan <b>Klistra in utgngsstllning</b>
    i Redigera menyn i Scid.
  }
  {
    I <a Searches Header>Sk i huvud</a>, r spelare-, evenemang-, plats-, och rondnamn oknsliga fr stora eller sm
    bokstver och ger trffar varhelst de finns i ett namn. Om du vill kan du ange att du istllet vill att skningen <b>ska</b>
    ta versaler/gemener i beaktande. Genom att anvnda jokertecken inom citationstecken (dr "?" = motsvarar obestmt
    enskilt tecken och "*" = noll eller flera tecken). Om du exempelvis anger "*BEL" (med citationstecken) i det platsfltet
    hittar du alla partier spelade i Belgien, men exkluderar de som spelats i Belgrad.
  }
  {
    Om du vill redigera ett drag i ett parti utan att frlora alla de drag som spelats efter detta kan du ppna
    <a Import>Importera ett parti i PGN-format</a> fnstret i Verktygsmenyn. Klicka dr p <b>Klistra in aktuellt parti</b> 
    , redigera partiet och avsluta med <b>Importera</b>.
  }
  {
    Om du har en ECO klassificeringsfil laddad, kan du n den mest exakt klassificerade stllningen fr det aktuella partiet
    genom att vlja <b>Identifiera ppning</b> i <b>Partier</b> menyn (kortkommando: Ctrl+Shift+D).
  }
  {
    Nr du vill se hur stor en fil r, eller vill se nr den senast redigerades innan du ppnar den kan du anvnda
    <a Finder>file finder</a> (Arkiv - Sk filer).
  }
  {
    En <a repetoire>repetoarfil</a> r ett utmrkt stt att hlla koll p dina favoritppningar, eller hitta partier dr
    dr de har spelats. Nr du vl har skapat en repetoarfil kan du genomska nya filer utifrn repetoarfilen, och titta 
    igenom alla partier med just dina ppningar.
  }
  {
    Genom att skapa en <a OpReport>ppningsrapport</a> har du en utmrkt mjlighet att lra dig en ny spelppning. Du kan f
    information om resultat, hur remiaktig den r, vilka vanliga positionella teman som dyker upp, och mycket mer.
  }
  {
    Du kan kommentera den aktuella stllningen med de vanligaste symbolerna (!, !?, +=, etc) utan att behva anvnda 
    <a Comment>kommentarseditorn<a>. Dr du exempelvis vill ange ett bra drag skriver du "!" och trycker sedan ENTER
    s lggs "!" symbolen till draget. Se ven hjlpsidan <a Moves>ange drag</a> fr mer detaljerad information.
  }
  {
    Om du blddrar igenom ppningarna i en databas i <a Tree>trdfnstret</a>, fr du en anvndbar verblick ver hur
    vl ppningen fungerar i sentida partier mellan hgrankade spelare om du ppnar statistikfnstret (kortkommando: Ctrl+I).
  }
  {
    Du ndrar enkelt huvudfnstrets brdstorlek genom att hlla nere <b>Ctrl</b> och <b>Shift</b> tangenterna, samtidigt
    som du trycker hger- eller vnster piltangent.
  }
  {
    Efter genomfrd <a Searches>skning</a>, r det enkelt att navigera genom urvalet genom att hlla nere <b>Ctrl</b> 
    tangenten samtidigt som du trycker upp- eller nerpiltangenterna fr att g till fregende eller nsta parti i 
    <a Searches Filter>urvalet</a>.
  }
{
  Du kan relativt enkelt rita pilar och frga rutor till dina kommentarer. ppna <b>Kommentarseditorn</b>, klicka p <b>Infoga symbol</b> och vlj nskad frg. Om du nu klicka p en frsta ruta, och drefter klickar p en andra s dras en pil i nskad frg frn den frsta till den andra rutan. Klickar du bara p en ruta, blir den frgad.
  }
}

##########
#
# ECO Opening name translations:

translateECO W {
  Accelerated {, Accelererad}
  {: Accelerated} Accelererad
  Accepted {, Antagen}
  {: Accepted} Antagen
  Advance Avancemang
  {as Black} {som Svart}
  Attack Angrepp
  Bishop Lpare
  Bishop's Lpar
  Classical Klassisk
  Closed Stngd
  {Closed System} {Stngt system}
  Counterattack Motangrepp
  Countergambit Motgambit
  Declined {, Avbjd}
  Defence Frsvar
  deferred frvgrad
  Deferred {, frvgrad}
  Early Tidig
  Exchange Avbyte
  Game Parti
  Improved frbttrad
  King's Kung
  Knight Springar
  Line Variant
  {Main Line} Huvudvariant
  Open ppen
  Opening ppning
  Queen's Dam
  Queenswap Damavbyte
  Symmetrical Symmetrisk
  Variation Variation
  Wing Flygel
  with med
  without utan

  Alekhine Aljechin
  Averbakh Averbach
  Botvinnik Botvinnik
  Chigorin Chigorin
  Polugaevsky Polugajevski
  Rauzer Rauzer
  Sveshnikov Sveschnikov

  Austrian sterrikisk
  Berlin Berlin
  Bremen Bremen
  Catalan Katalansk
  Czech Tjeckisk
  Dutch Hollndsk
  English Engelsk
  French Fransk
  Hungarian Ungersk
  Indian Indisk
  Italian Italiensk
  Latvian Lettisk
  Meran Meran
  Moscow Moskva
  Polish Polsk
  Prague Prag
  Russian Rysk
  Scandinavian Skandinavisk
  Scheveningen Scheveningen
  Scotch Skottsk
  Sicilian Siciliansk
  Slav Slavisk
  Spanish Spansk
  Swedish Svensk
  Swiss Schweizisk
  Vienna Wiener
  Yugoslav Jugoslavisk

  {Accelerated Fianchetto} {Accelererad Fianchetto}
  {Accelerated Pterodactyl} {Accelererad Pterodactyl}
  {Alekhine Defence} Aljechins Frsvar
  {Alekhine Variation} Aljechin-Variant
  {Alekhine: Smisch Attack} {Aljechin: Wiener-system (Smisch-Angrepp)}
  {Anderssen Opening} Anderssen-ppning
  {Anti-King's Indian} Anti-Kungsindisk
  {Austrian Attack} {sterrikiskt Angrepp}
  {Benko Gambit} Volga-Gambit
  {Benko Opening} Benk-ppning
  {Berlin Defence} {Berlinfrsvar}
  Chameleon Chamaleon
  Chelyabinsk Chelyabinsk
  {Classical Defence} {Klassiskt frsvar}
  {Spanish: Classical Defence} {Spanskt: Klassiskt (Cordel-) frsvar}
  {Classical Exchange} {Klassiskt Avbyte}
  {Classical Variation} {Klassisk Variant}
  {Closed Berlin} {Stngd Berlin}
  {Open Berlin} {ppen Berlin}
  {Bird's,} {Bird,}
  {Bird's Defence} Birds frsvar
  {Bird's Deferred} {Frvgrad Bird}
  {Bishop's Opening} Lparspel
  {Botvinnik System} Botvinnik-system
  {Central Variation} Centralvariant
  {Centre Attack} Centrumsangrepp
  {Centre Game} Mittgambit
  {Danish Gambit} {Nordisk Gambit}
  Dragon Drake
  {Dutch Variation} {Hollndsk Variant}
  {Early Exchange} {Tidigt Avbyte}
  {Early Queenswap} {Tidigt Dambyte}
  {English Attack} {Engelskt Angrepp}
  {English: King's} {Engelskt: Kungsbonde}
  {English Variation} {Engelsk Variant}
  {Englund Gambit} Englunds Gambit
  {Exchange Variation} Avbytesvariant
  {Fianchetto Variation} Fianchettovariant
  {Flohr Variation} Flohr-Variant
  {Four Knights} Fyrspringar
  {Four Knights Game} Fyrspringarspel
  {Four Pawns} Fyrbonde
  {Four Pawns Attack} Fyrbondeangrepp
  {French Variation} {Fransk Variant}
  {From Gambit} {From-Gambit}
  {Goring Gambit} {Gring-Gambit}
  {Grob Gambit} {Grobs Gambit}
  {Hungarian Defence} {Ungerskt frsvar}
  {Indian Variation} {Indisk Variant}
  {Italian Game} {Italienskt Parti}
  KGD {Avbjd Kungssgambit}
  {Classical KGD} {Klassisk avbjd Kungsgambit}
  {Keres Variation} Keres-Variant
  KGA {Antagen Kungsgambit}
  {KGA: Bishop's Gambit} Kungslpargambit
  {KGA: King's Knight Gambit} Kungsspringargambit
  {King's Gambit} Kungsgambit
  {King's Gambit Accepted} {Antagen Kungsgambit}
  {King's Gambit Accepted (KGA)} {Antagen Kungsgambit}
  {King's Indian} Kungsindisk
  KIA {Kungsindiskt Angrepp}
  {King's Knight Gambit} Kungsspringargambit
  {King's Pawn} Kungsbonde
  {Lasker Variation} {Lasker-Variant}
  {Latvian Gambit} {Lettisk Gambit}
  {Maroczy Bind} {Maroczy-bindning}
  {Marshall Variation} Marshall-Variant
  {Modern Attack} {Modernt Angrepp}
  {Modern Steinitz} {Modern Steinitz}
  {Modern Variation} {Modern Variant}
  {Moscow Variation} {Moskva-variant}
  Nimzo-Indian Nimzoindisk
  {Old Benoni} {Klassisk Benoni}
  {Old Indian} Gammalindisk
  {Old Indian Attack} {Gammalindisk Indisk attack}
  {Old Steinitz} Gammal Steinitz-ppning
  {Open Game} {ppet Parti}
  {Poisoned Pawn} {Frgiftad Bonde}
  {Polish Variation} {Polsk Variant}
  {Polugaevsky Variation} {Polugajevski-Variant}
  {Queen's Gambit} Damgambit
  {Queen's Gambit Accepted} {Antagen Damgambit}
  QGA {Antagen Damgambit}
  {Queen's Gambit Accepted (QGA)} {Antagen Damgambit}
  {Reversed QGA} {Omvnd antagen Damgambit}
  QGD {Avbjd Damgambit}
  {Queen's Gambit Declined (QGD)} {Avbjd Damgambit}
  {Reversed QGD} {Omvnd avbjd Damgambit}
  {Queen's Indian} Damindisk
  {Queen's Pawn} Dambonde
  {Queen's Pawn Game} Dambondespel
  {Reversed Slav} {Omvnd Slavisk}
  {Rubinstein Variation} Rubinstein-Variant
  {Russian Game} {Ryskt Parti}
  {Russian Game (Petroff Defence)} {Ryskt Parti}
  {Russian-Three Knights Game} {Ryskt trespringarspel}
  {Scandinavian (Centre Counter)} Skandinavisk
  Schliemann Jnisch
  {Schliemann (Jnisch)} {Jnisch-Gambit (Schliemann)}
  {Scotch Opening} {Skottsk ppning}
  {Sicilian Defence} {Sicilianskt frsvar}
  {Sicilian Variation} {Siciliansk Variant}
  {Slav Defence} {Slaviskt frsvar}
  Smith-Morra Morra
  {Smith-Morra Accepted} {Antagen Morra-Gambit}
  {Smith-Morra Gambit} Morra-Gambit
  {Spanish (Ruy Lopez)} {Spanskt Parti}
  {Start position} Utgngsstllning
  {Steinitz Deferred} Frvgrad Rubinstein
  {Swedish Variation} {Svensk Variant}
  {Swiss Variation} {Schweizisk Variant}
  {Tarrasch's Gambit} {Tarrasch-Gambit}
  {Three Knights} Trespringar
  {3 Knights} Trespringar
  {Three Knights Game} Trespringarspel
  {Three Pawns Attack} Trebondeangrepp
  {Two Knights} Tvspringar
  {Two Knights Defence} Tvspringar-frsvar
  {Two Knights Variation} Tvspringar-variant
  {Two Pawns} Tvbonde
  {Two Pawns Attack} Tvbondeangrepp
  {Wing Gambit} Flygel-Gambit
  {Yugoslav Attack} {Jugoslaviskt Angrepp}
}

############################################################
#
# Swedish help pages:

# Basic help pages completed, no links no other sections.

##########
# Contents
#
set helpTitle(W,Contents) "Innehllsfrteckning"
set helpText(W,Contents) {<h1>Hjlp med Scid: Innehllsfrteckning</h1>

<h3>Komma igng och allmnt om Scid</h3>
<p>Fljande texter och dess lnkar r under versttning. Detta pbrjades i Scid 3.4 beta 1 (2002 07 27). 
 /Martin S.</p>
Detta betyder att menyerna r versatta. Rubriktexterna br kunna vara versatta till Scid 3.4 men alla lnkar
frn rubriktexterna r frmodligen inte det. /Martin S.</p>

<ul>
<li><a Guide><b>Komma igng</b> med Scid</a> <red>(Ls detta frst)</red></li>
<li><a Hints><b>Tips</b> om hur du fr ut mer av Scid</a></li>
<li><a MainWindow><b>Huvudfnstret</b></a></li>
<li><a Menus><b>Menyerna</b></a> <red>(Uppdaterad!)</red></li>
<li><a Moves>Ange <b>drag</b></a> <red>(Uppdaterad!)</red></li>
<li><a Searches><b>Ska</b> i Scid</a></li>
<li><a Clipbase>Att anvnda <b>Clipbase (Urklippsdatabasen)</b></a></li>
<li><a Annotating><b>Kommentera partier</b></a> <red>(Ny!)</red></li>
</ul>

<h4>Andra Scid-fnster</h4>

<ul>
<li><a Analysis><b>Analysfnstret</a></li>
<li><a Book><b>Bokfnstret</b></a></li>
<li><a CalVar><b>Berkning av variationer-fnstret</b></a></li>
<li><a Comment><b>Kommentareditor</b> </a></li>
<li><a Crosstable><b>Korstabellfnster</a></li>
<li><a Switcher><b>Databasvxlaren</b> </a></li>
<li><a Email><b>Email-fnster</a></li>
<li><a Finder><b>Sk filer</b> </a></li>
<li><a GameList><b>Partilistan</b> </a></li>
<li><a Import><b>Importfnstret</a></li>
<li><a OpeningTrainer><b>ppningstrnarfnstret</b>  </a></li>
<li><a Reports><b>Rapporter</b></a> <red>(Uppdaterad!)</red></li>
<li><a PGN><b>PGN-fnster</a></li>
<li><a PTracker><b>Pjsspraren</b></a></li>
<li><a PList><b>Spelarlistan</b></a></li>
<li><a PInfo><b>Spelarinfo</b> </a></li>
<li><a Repertoire><b>Repetoar-Editor</a></li>
<li><a TacticalGame><b>Taktiskt partifnstret</b> </a></li>
<li><a Tmt><b>Sk turneringar</a></li>
<li><a Tree><b>Trdfnstret</a></li>
<li><a Graphs><b>Graffnster</a></li>
<li><a TB>Slutspelstabeller</a><red>(Uppdaterad!)</red></li>
</ul>

<h4>Andra funktioner och information</h4>
<ul>
<li><a Bookmarks><b>Bokmrken</b></a></li>
<li><a Cmdline>Kommandorad-alternativ</a></li>
<li><a Compact><b>Komprimera databas</a></li>
<li><a Correspondence>Korrespondensschack</a></li>
<li><a Maintenance><b>Underhll databas</a></li>
<li><a ECO><b>ECO</a></li>
<li><a EPD><b>EPD</a></li>
<li><a Export><b>Exportera partier</a> <red>(Uppdaterad!)</red></li>
<li><a Flags>Parti-markeringarna</a></li>
<li><a LaTeX>Scid och LaTeX</a></li>
<li><a Options><b>Alternativ</a><red>(Uppdaterad!)</red></li>
<li><a Sorting><b>Sortera databas</a></li>
<li><a Pgnscid><b>Pgnscid</a></li>
<li><a NAGs>NAG-vrden</a></li>
<li><a Formats>Filformat</a></li>
<li><a Author>Kontaktinformation</a></li>
</ul>

<p><footer>(Uppdaterad: Scid 3.6.1, December 2004)</footer></p>
}

###############
### Topic Index

set helpTitle(W,Index) "Hjlp-index"
set helpText(W,Index) {<h1>Scid: Hjlp-index</h1>

<h3>A</h3>
<ul>
<li><a Options>Alternativ</a></li>
<li><a Analysis>Analysfnstret</a></li>
<li><a Moves>Ange drag</a></li>
</ul>

<h3>B</h3>
<ul>
<li><a CalVar>Berkning av variationer-fnstret</a></li>
<li><a GameList Browsing>Blddra partilistor</a></li>
<li><a Book>Bokfnstret</a></li>
<li><a Bookmarks>Bokmrken</a></li>
<li><a Tree Best>Bsta partier</a></li>
</ul>

<h3>D</h3>
<ul>
<li><a Sorting>Databassortering</a></li>
<li><a Maintenance>Databasunderhll</a></li>
<li><a Switcher>Databasvxlaren</a></li>
<li><a Translator>Den svenska versttningen</a></li>
</ul>

<h3>E</h3>
<ul>
<li><a ECO>ECO</a></li>
<li><a ECO Browser>ECO-blddrar</a>-fnster</li>
<li><a ECO Codes>ECO kodsystem</a></li>
<li><a Email>Email-fnster</a></li>
<li><a EPD>EPD-filer</a></li>
<li><a Export>Exportfilter</a></li>
<li><a Export>Exportera partier som text</a></li>
</ul>

<h3>F</h3>
<ul>
<li><a Formats>Filformat</a></li>
</ul>

<h3>G</h3>
<ul>
<li><a Graphs Filter>Graffilter</a></li>
<li><a Graphs>Graffnster</a></li>
</ul>

<h3>H</h3>
<ul>
<li><a MainWindow>Huvudfnstret</a></li>
</ul>

<h3>I</h3>
<ul>
<li><a Import>Importfnstret</a></li>
<li><a Contents>Innehllsfrteckning</a></li>
</ul>

<h3>K</h3>
<ul>
<li><a Guide>Komma igng med Scid</a></li>
<li><a Cmdline>Kommandorad-alternativ</a></li>
<li><a Comment>Kommentareditor</a></li>
<li><a Annotating Null>Kommentera Nulldrag</a></li>
<li><a Annotating>Kommentera partier</a></li>
<li><a Compact>Komprimera databas</a></li>
<li><a Correspondence>Korrespondensschack</a></li>
<li><a Crosstable>Korstabellfnster</a></li>
<li><a Author>Kontaktinformation</a></li>
</ul>

<h3>L</h3>
<ul>
<li><a LaTeX>LaTeX</a> utdataformat</li>
</ul>

<h3>M</h3>
<ul>
<li><a Menus>Menyerna</a></li>
<li><a Menus File>Meny Arkiv</a></li>
<li><a Menus Edit>Meny Redigera</a></li>
<li><a Menus Game>Meny Partier</a></li>
<li><a Menus Search>Meny Sk</a></li>
<li><a Menus Windows>Meny Fnster</a></li>
<li><a Menus Tools>Meny Verktyg</a></li>
<li><a Menus Options>Meny Alternativ</a></li>
<li><a Menus Help>Meny Hjlp</a></li>
</ul>

<h3>N</h3>
<ul>
<li><a NAGs>NAG-vrden</a></li>
</ul>

<h3>P</h3>
<ul>
<li><a GameList>Partilistan</a></li>
<li><a Flags>Partimarkeringarna</a></li>
<li><a PGN>PGN-fnster</a></li>
<li><a Pgnscid>Pgnscid</a></li>
<li><a PTracker>Pjsspraren</a></li>
</ul>

<h3>R</h3>
<ul>
<li><a Reports Opening>Rapporter</a></li>
<li><a Graphs Rating>Ratinggraf</a></li>
<li><a Repertoire>Repetoar-Editor</a></li>
</ul>

<h3>S</h3>
<ul>
<li><a Analysis List>Schackmotorlista</a></li>
<li><a LaTeX>Scid och LaTeX</a></li>
<li><a Hints>Scidtips</a></li>
<li><a MainWindow Autoplay>Sjlvspelsmod</a></li>
<li><a TB>Slutspelstabeller</a></li>
<li><a Guide>Snabbguide till att anvnda Scid</a></li>
<li><a Sorting>Sortera databas</a></li>
<li><a PInfo>Spelarinfo</a></li>
<li><a Reports Player>Spelarrapport</a></li>
<li><a Maintenance Spellcheck>Stavningskontrollera namn</a></li>
<li><a Finder>Sk filer</a></li>
<li><a Searches Filter>Skfilter</a></li>
<li><a Searches Header>Sk partidata</a></li>
<li><a PList>Sk spelare</a></li>
<li><a Searches Board>Sk stllning</a></li>
<li><a Searches>Ska i Scid</a></li>
<li><a Searches Material>Sk material</a></li>
<li><a Tmt>Sk turneringar</a></li>
</ul>

<h3>T</h3>
<ul>
<li><a TacticalGame>Taktiskt partifnstret</a></li>
<li><a Moves Trial>Testa variant mod</a></li>
<li><a Hints>Tips</a></li>
<li><a Tree>Trdfnstret</a></li>
<li><a Options Fonts>Typsnitt</a></li>
</ul>

<h3>U</h3>
<ul>
<li><a Maintenance>Underhll databas</a></li>
<li><a Maintenance Cleaner>Underhll: Databasrensaren</a></li>
<li><a Maintenance Editing>Underhll: ndra spelarnamn</a></li>
<li><a Maintenance Twins>Underhll: Ta bort dubbletter</a></li>
<li><a Maintenance Spellcheck>Underhll: Stavningskontrollera spelarnamn</a></li>
<li><a Clipbase>Urklippsdatabasen</a></li>
</ul>

<h3>V</h3>
<ul>
<li><a Annotating Vars>Varianter</a></li>
</ul>

<h3></h3>
<ul>
<li><a ECO>ppningsklassificering (ECO)</a></li>
<li><a Repertoire>ppningsrepetoar</a></li>
<li><a Reports Opening>ppningsrapport</a></li>
<li><a OpeningTrainer>ppningstrnarfnstret</a></li>
</ul>

<p><footer>(Uppdaterad: Scid 3.5, February 2003)</footer></p>
}

####################
### Quick Guide help:

set helpTitle(W,Guide) "Komma igng med Scid"
set helpText(W,Guide) {<h1>Komma igng med Scid</h1>
<p>
Scid r en schackdatabashanterare som du kan anvnda till att blddra och <a Searches>ska</a> (enligt kriterier du stller upp) igenom 
databaser med schackpartier. Du kan ocks redigera de partier du vill.
</p>
<p>
Scid anvnder sitt eget <a Formats>databasformat</a> baserat p tre filer. Det r mycket kompakt och snabbt, men kan konvertera svl 
till som frn PGN (Portable Game Notation) standarden om man s nskar. Scids <a PGN>PGN-fnster</a> visar texten till det aktuella
partiet i PGN-format.
</p>
<p>
Du kan anvnda Scid till att lgga till och ta bort partier i en databas genom att anvnda svl mus som tangentbordet fr att skriva in
drag. Se vidare <a Moves>att skriva in drag</a> fr en noggrannare beskrivning.
</p>
<p>
Du kan ocks anvnda Scid fr att hantera <a PGN>PGN</a> filer genom att klistra in PGN-text i Scids <a Import>Importfnster</a> 
eller genom att ppna en PGN-fil i Scid. PGN-filer kan dock inte redigeras av Scid (de ppnas skrivskyddade). Eftersom PGN-filer
anvnder mer minne och laddas lngsammare rekommenderas du att konvertera stora PGN-filer till en Scid databas med verktyget
<a Pgnscid>Pgnscid</a>.
</p>
<p>
Scids <a MainWindow>huvudfnster</a> (det med schackbrdet) visar det aktuella partiet och databasen i detalj. Du kan nr som helst ppna 
upp till fyra databaser (fem om du rknar med Urklippsdatabasen <a Clipbase>Clipbase</a>). Var och ett av dessa kommer att ha sitt eget aktuella
parti. (Partier med ID-numret 0 visar att detta r ett parti som nnu inte ingr i den aktuella databasen). Du blddrar mellan de ppnade databaserna
via <a Menus File>Filmenyn</a>.
</p>
<p>
Ls grna vriga hjlpsidor i <a Index>Innehllsfrteckningen</a> fr mer information.
</p>
<p>
Ls <a Author>kontaktinformationssidan</a> om du vill komma i kontakt med skaparen av Scid. Fr frgor om den svenska versttningen ska du
<b>inte</b> kontakta upphovsmannen utan istllet <a Translator>versttaren</a>.
</p>

<p><footer>(Uppdaterad: Scid 3.1, December 2001)</footer></p>
}


set helpTitle(W,Author) "Kontaktinformation"
set helpText(W,Author) {<h1>Kontaktinformation</h1>
<p>
Scids webbsajt finns p: <br>
<b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>
</p>
<p>
P hemsidan kan du hmta den senaste versionen av Scid och andra extrafiler som kan bli tillgngliga.
</p>
<p>Den mest uppdaterade hjlpen kommer alltid att finnas tillgnglig online hos:
<b><url http://scid.sourceforge.net/tutorial/>http://scid.sourceforge.net/tutorial/</url></b>
Typiskt kommer denna att vara mer uppdaterad n den hjlp som distribueras med Scid, eller dessa hjlp-
sidor i Scid.
</p>

<p>Den svenska versttningen av Scid har gjorts av Martin Skjldebrand. Synpunkter p versttningen ska <b>inte</b>
skickas till Shane. Dremot fr du grna skicka kommentarer, frgor och frslag till rttningar till versttaren p adressen:<br>
<b>martin@skjoldebrand.org</b>
</p>
}

####################
### Hints page:
set helpTitle(W,Hints) "Scid-tips"
set helpText(W,Hints) {<h1>Scid-tips</h1>
<p>
Denna sida innehller anvndbara tips i form av frgor och svar. Genom att lsa igenom denna sida, kan du senare komma att
anvnda Scid bttre. Om du nyligen brjat anvnda Scid, s ls till en brjan <a Guide>Kom igng</a>.
Det mesta av informationen p denna sida finns refererad mer utfrligt p andra sidor i hjlpen. Du finner dem i <a Index>Innehllsfrteckningen</a>.
Om har ngot du tips du tycker passar bra fr denna sida, s skicka den till <a Author>upphovsmannen</a>.
</p>

<h4>Kan Scid ladda en databas nr den startas?</h4>
<p>
Ja, du kan ange databaser, PGN-filer eller <a EPD>EPD-filer</a>
p kommandoraden som t ex;
<ul>
<li> <b>scid  mybase  games.pgn.gz</b> </li>
</ul>
som laddar Scid-databasen <b>mybase</b> och den Gzip-komprimerade PGN-filen <b>games.pgn.gz</b>.
</p>

<h4>Finns det enklare stt att ndra storleken p brdet n via Alternativmenyn?</h4>
<p>
Ja, du kan anvnda kortkommandorna <b>Ctrl+Shift+VnsterPil</b> och <b>Ctrl+Shift+HgerPil</b> fr att frminska eller 
frstora brdets storlek.
</p>

<h4>Jag brukar trna genom att spela igenom partier, s jag vill inte att Scid visar nsta drag i partiinformationen
nedanfr brdet. Kan jag dlja detta p ngot stt?</h4>
<p>
Du kan dlja nsta drag genom att hgerklicka partiinformationen och vlja  <b>Dlj nsta drag</b> i menyn som ppnas.
</p>

<h4>Var finner jag ECO-koden fr ppningen p brdet?</h4>
<p>
ECO-koden visas p sista raden i partiinformationen nedanfr brdet i  <a MainWindow>huvudfnstret</a>,
om du har laddat ECO-klassificeringsfilen (<b>scid.eco</b>). <br>
Hjlpsidan fr <a ECO>ECO-koder</a> frklarar hur man laddar ECO-klassificeringsfilen och stller in programmet s att
den laddas varje gng man startar Scid.
</p>

<h4>Jag hller p och matar in ett parti och befinner mig nu vid drag 30. Nu ser jag att drag 10 blev fel. Hur kan jag ndra
detta utan att gra om alltihop?</h4>
<p>
Du kan anvnda <a Import>Importfnstret</a>; se vidare <a Moves Mistakes>mata in drag</a> fr mer information.
</p>

<h4>Hur kopierar jag partier frn en databas till en annan?</h4>
<p>
Anvnd <a Switcher>Databasvxlaren</a>. Drag frn klldatabasen till mldatabasen s kopierar du allt i klldatabasen till
mldatabasen. Genom att anvnda <a Searches Filter>Filter</a> kan du begrnsa det du kopierar frn den ena databasen till den andra.
</p>

<h4>Varje gng jag anger ett drag som redan finns fr jag frgan "Erstt drag?". Hur undviker jag detta?</h4>
<p>
Du kan antingen stnga av <b>Frga fre erstt drag</b> valmjligheten i menyn <menu>Altervativ: Drag</menu</menu>; eller
tnka p att gra ndringarna genom att ta tillbaka dragen genom att hgerklicka med musen. Det senare alternativet raderar dragen helt ur
partiet.
</p>

<h4>Hur ndrar kolumnbredden i partilistan?</h4>
<p>
Hger- eller vnsterklicka p kolumntiteln fr den kolumn du vill ndra.
</p>

<h4>Hur anvnder jag trdfnstret fr ett filtrerade partier - till skillnad mot att anvnda den fr hela databasen?</h4>
<p>
Anvnd <a Clipbase>Urklippsdatabasen (Clipbase)</a>. Filtera databasen att visa endast de partier du vill anvnda i trdet, 
kopiera sedan partierna till Urklippsdatabasen (Clipbase) via <a Switcher>Databasvxlaren</a>. ppna drefter trdfnstret
med den senare databasen som aktiv.
</p>

<h4>Trdet r lngsamt nr jag jobbar med stora databaser. Gr det att snabba upp den?</h4>
<p>
Spara trdcachen ofta s sparar du resultaten fr framtida anvndning. Se vidare cache-sektionen i hjlpen fr 
<a Tree>trdet</a> fr mer detaljerad information.
</p>

<h4>Kan jag redigera PGN-texten fr ett parti direkt?</h4>
<p>
Du kan inte anvnda <a PGN>PGN-</a>fnstret till att redigera det aktuella partiet, dremot kan du anvnda 
<a Import>Importfnstret</a>. ppna fnstret (kortkommando: <b>Ctrl+Shift+I</b>) och klicka p klistra in aktuellt parti
<b>Paste current game</b>, redigera partiet och klicka sedan p <b>Importera</b>.
</p>

<h4>I min databas finns mnga spelarnamn som r felstavade. Hur rttar jag allt detta?</h4>
<p>
Du kan rtta enstaka namn, eller gra en stavningskontroll fr hela databasen via menyvalen i <menu>Arkiv: Databasverktyg</menu>.
Se vidare hjlpen fr <a Maintenance Editing>Databasunderhll</a>.
</p>

<h4>Jag har tv databaser ppna: den ena innehller mina egna partier, den andra r mnga stormstarpartier.
Hur jmfr jag ett av mina egna partier mot partierna i databasen med stormstarpartier?</h4>
<p>
ppna <a Tree>Trdfnstret</a> i databasen med stormstarpartier och vlj <term>Ls</term> fr att lsa trdet i den databasen. 
Nr du sedan byter till den andra databasen kommer trdet att fortstta visa informationen frn databasen med stormstarpartier.
</p>

<p><footer>(Uppdaterad: Scid 2.6,  augusti 2001)</footer></p>
}


#################
# Authors, translators
#

set helpTitle(W,Translator) "Den svenska versttningen"
set helpText(W,Translator) {<h1>Den svenska versttningen</h1>
<p>
Scids webbsajt finns p: <br>
<b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>. Dr kan du hmta den senaste versionen av Scid och 
de andra filerna till programmet som du kan ha behov av. Dr finns ocks den senaste versionen av den svenska sprkfilen.
</p>
<p>Den svenska versttningen av Scid har gjorts av Martin Skjldebrand. Skicka grna kommentarer, frgor och frslag till rttningar
till versttaren p adressen:<br>
<b>martin@skjoldebrand.org</b>
</p>
}

####################
### Main window help:

set helpTitle(W,MainWindow) "Huvudfnstret"
set helpText(W,MainWindow) {<h1>Scid: huvudfnstret</h1>
<p>
P brdet i huvudfnstret visas den aktuella stllningen i det aktiva partiet. Du fr ocks information om partiet och den
aktiva databasen. Fr ytterligare information om <a Menus>Menyerna</a> och olika stt att <a Moves>Ange drag</a> hnvisas till
andra hjlpsidor.
</p>

<h3>Att navigera i partier</h3>
<p>
Navigationsknapparna vid brdet har fljande funktioner (frn vnster till hger):
</p>
<ul>
<li> <button tb_start> G till utgngsstllningen. </li>
<li> <button tb_prev> G tillbaka ett drag. </li>
<li> <button tb_next> G framt ett drag. </li>
<li> <button tb_end> G till slutstllningen. </li>
<li> <button tb_invar> G in i varianten. </li>
<li> <button tb_outvar> G ur varianten. </li>
<li> <button tb_addvar> Lgg till ny variant. </li>
<li> <button tb_play> Start/stopp fr autospelslge (se nedan). </li>
<li> <button tb_trial> Start/stopp fr <a Moves Trial>Frskslge</a>. </li>
<li> <button tb_flip> Rotera brdet 180 grader. </li>
<li> <button tb_coords> Visa/dlj koordinater. </li>
</ul>

<h4><name Autoplay>Autospelslge</name></h4>
<p>
I autospelslge gr Scid automatiskt bda spelarnas drag i det aktuella partiet. Frdrjningen mellan varje drag kan anges i
menyn <menu>Alternativ: Drag</menu> och sparas nr du sparar ndringarna av instllningsmjligheterna.
</p>
<p>
Kortkommandot <b>Ctrl+Z</b> startar eller avbryter autospelslget. Du kan ocks g ur autospelslge genom att trycka
 <b>Esc</b>-tangenten.
</p>
<p>
Om du startar autospelslge nr <a Analysis>Analysfnstret</a> r ppet <term>kommenteras</term> partiet: stllningsbedmningen 
och analysen av varje stllning lggs till som en ny variant vid varje drag.
Se hjlpen fr <a Analysis>Analysfnstret</a> fr mer information.
</p>

<h3>Partiinformation</h3>
<p>
Nedanfr brdet visas information om det aktuella partiet. Denna del av huvudskrmen kallas <term>partiinformationsomrdet</term>.
P de tre frsta raderna ges grundinformation ssom spelarnas namn, resultat, datum och spelplats. Den fjrde raden aktuell
stllning och nsta drag.
</p>
<p>
Rad fem visar <a ECO>ECO</a> (Encyclopedia of Chess
Openings) koden fr den aktuella stllningen, om stllningen ingr i den ECO-fil som anvnds.
</p>
<p>
Nr man hgerklickar p partiinformationsomrdet visas en meny med instllningsmjligheter som r relevanta fr just denna del av
programmet. Du kan t ex vlja att dlja nsta drag (anvndbart om du trnar genom att "gissa" nsta drag i  partiet) eller ta bort
/terta det aktuella partiet. Kortkommandot fr denna funktion r funktionsknappen F9.
</p>

<h4>Slutspelsdatabaser</h4>
<p>
Partiinformationsomrdet visar resultaten frn slutspelsdatabaserna om du har ngra installerade och om stllningen terfinns 
i dessa. Se hjlpsidan fr <a TB>Slutspelsdatabaser</a> fr mer information.
</p>

<h3>Statusraden</h3>
<p>
Statusraden (lngst ner i huvudfnstret) visar information om den aktuella databasen.
Det frsta fltet visar partiets status: <b>XX</b> betyder att det har frndrats men nnu inte sparats, medan <b>--</b> 
betyder att partiet inte har ndrats, <b>%%</b>, slutligen, betyder att databasen r skrivskyddad (det gr inte att ndra i partiet.).
</p>
<p>
Om du vill, kan du ppna databasen skrivskyddad. ndra rttigheterna till scid-filerna (eller enbart indexfilen) genom att i UNIX(-lika)
system ge kommandot:
<b>chmod a-w myfile.si3</b>
vid kommandoraden.I MS-DOS eller Windows ndrar du filattributet Arkiv med Attrib filnamn +A (i MS-DOS) eller Filhanteraren/Utforskaren etc. (i Windows).)
</p>
<p>
Statusraden visar ocks hur mnga partiet som ingr i det aktiva <a Searches Filter>Filtret</a>.
</p>

<p><footer>(Uppdaterad: 3.6.11-beta Januari 2007)</footer></p>
}

####################
### Menus help screen:

set helpTitle(W,Menus) "Menyerna"
set helpText(W,Menus) {<h1>Menyerna</h1>

<h3><name File>Arkiv</name></h3>
<ul>
<li><menu>Ny</menu>: Skapar en ny, tom, Scid databas.</li>
<li><menu>ppna</menu>: ppnar en befintlig Scid-databas.</li>
<li><menu>Stng</menu>: Stnger den aktiva Scid-databasen.</li>
<li><menu>Sk filer</menu>: ppnar <a Finder>Skdialogen</a> fr filer.</li>
<li><menu>Bokmrken</menu>: Hanterar <a Bookmarks>bokmrken</a>.</li>
<li><menu>Nytt bokmrke</menu>: Markerar den aktiva stllningen i partiet som ett bokmrke.</li>
	<li><menu>Spara bokmrke</menu>: Sparar bokmrket fr den aktiva stllningen i partiet.</li>
	<li><menu>Redigera bokmrken</menu>: Redigerar dina bokmrken.</li>
	<li><menu>Visa bokmrken som lista</menu>: Visar bokmrkena som lista, inte som undermenyer.</li>
	<li><menu>Visa bokmrken i undermenyer</menu>: Visar bokmrkena som undermenyer, inte som en lista.</li>
	</ul>
<li><menu>Databasverktyg</menu>: <a Maintenance>Underhll</a> databasen.</li>
    </li>
	<ul>
	<li><menu>Verktygsfnster</menu>: ppnar/ stnger verktygsfnstret.</li>
	<li><menu>Klassificera partier enligt ECO</menu>: Klassificerar alla partier enligt ECO-systemet.</li>
	<li><menu>Ta bort dubbletter</menu>: Tar bort <a Maintenance Twins>Dubblettpartier</a> i databasen.</li>
	<li><menu>Namn</menu>: Erstter alle frekomster av en spelar-,
      resultat-, ort- eller rundeinmatning.</li>
      </ul>
      <li><menu>Skrivskyddad</menu>: Avlgsnar temporrt redigeringsmjligheterna till databasen.</li>
<li><menu>Byt databas</menu>: Byter till en annan ppnad databas.</li>
	<ul>
		<li><menu>Base 1/2/3/4/5</menu>: Hr byter du mellan de olika databaserna i databasvxlarna, inklusive <a Clipbase>Urklippsdatabasen</a>.</li>
	</ul>
	<ul>
	<li><menu>Komprimera databasen</menu>: Komprimerar databasen, avlgsna borttagna partier och oanvnda namn.</li>
	<li><menu>Sortera databasen</menu>: Sorterar partierna i den aktiva databasen.</li>
  	<li><menu>Sk dubbletter"</menu>: ppnar/ stnger dubblettfnstret fr att ska dubblettpartier.</li>
	<li><menu>Stavningskontroll</menu>: Namnredigerar och stavningskontrollerar.</li>
		<ul>
		<li><menu>Redigera namn</menu>: Redigerar spelarnamn utifrn rttstavningsfilen.</li>
		<li><menu>Stavningskontrollera namn</menu>: Stavningskontrollerar namn utifrn rttstavningsfilen.</li>
		<li><menu>Stavningskontrollera evenemang</menu>: Stavningskontrollerar evenemang utifrn rttstavningsfilen.</li>
		<li><menu>Stavningskontrollera platser</menu>: Stavningskontrollerar platser utifrn rttstavningsfilen.</li>
		<li><menu>Stavningskontrollera ronder</menu>: Stavningskontrollerar ronder utifrn rttstavningsfilen.</li>
  		</ul>
	</ul>	
<li><menu>Avsluta</menu>: Avslutar Scid. </li>
</ul>

<h3>Redigera</h3>
<ul>
<li><menu>Lgg till variant</menu>: Skapar en variant vid denna stllning. Antingen fr nsta drag, eller fr fregende drag om det r det frsta draget.</li>
<li><menu>Ta bort variant</menu>: Visar en undermeny med de borttagbara varianterna.</li>
<li><menu>Skapa huvudvariant</menu>: Upphjer en av varianterna till huvudvariant.</li>
<li><menu>Skapa nytt textdrag</menu>: Gr en av varianterna till nytt partidrag.</li>
<li><menu>Testa en id</menu>: Slr p <a Moves Trial>Testlge</a> fr att tillflligt testa en id. Frndrar inte partiet.</li>
<li><menu>Ta bort</menu>: Avlgsnar kommentarer eller varianter ur partiet.</li>
<br>
<li><menu>Tm Clipbase</menu>: Tmmer Urklippsdatabasen <a Clipbase>Clipbase</a> p partier.</li>
<li><menu>Kopiera partiet till Clipbase</menu>: Kopierar det aktuella partiet till Urklippsdatabasen <a Clipbase>Clipbase</a>.</li>
<li><menu>Klistra in det senaste Clipbasepartiet</menu>: Klistrar in det aktiva partiet i <a Clipbase>Clipbase</a> i den aktiva databasen och gr det aktivt.</li>
<br>
<li><menu>Skapa stllning</menu>: Skapar en utgngsstllning fr aktuellt parti.</li>
<li><menu>Kopiera stllning</menu>: Kopierar den aktuella stllningen i FEN-kod till Urklippsdatabasen.</li>
<li><menu>Klistra in utgngsstllning</menu>: Klistrar in stllningen frn aktuellt parti i den temporra databasen.</li>
</ul>

<h3>Partier</h3>
<ul>
<li><menu>Nytt parti</menu>: terstller brdet infr ett nytt parti (detta tar bort alla ndringar).</li>
<li><menu>Ladda frsta/fregende/nsta/sista partiet</menu>: Dessa laddar respektive parti i <a Searches Filter>Skfiltret</a>.</li>
<li><menu>Ladda om partiet</menu>: Laddar om aktuellt parti och tar bort alla gjorda ndringar..</li>
<li><menu>Ladda parti slumpmssigt</menu>:  Laddar ett av datorn slumpmssigt valt parti.</li> 
<li><menu>Ladda parti nummer...</menu>: Laddar ett parti genom att ange dess nummer.</li>
<br>
<li><menu>Spara: Erstt parti...</menu>: Sparar partiet och erstter tidigare version.</li>
<li><menu>Spara: Nytt parti...</menu>: Sparar det aktuella partiet och lgger till det till databasen.</li>
<br>
<li><menu>Identifiera ppningen</menu>: Gr till den mest detaljerade stllningen i ECO-boken.</li>
<li><menu>G till drag nummer...</menu>: Gr till ett specifikt drag i partiet.</li>
<li><menu>Hitta nyhet...</menu>: Hittar det frsta draget i partiet som inte spelats tidigare.</li>
</ul>

<h3>Sk</h3>
<ul>
<li><menu>terstll skfilter</menu>: terstller <a Searches Filter>Skfiltret</a> s att alla partiet ingr i urvalet.</li>
<li><menu>Omvnt filter</menu>: Tar med de partier som utesluts av filtret.</li>
<br>
<li><menu>Aktuell stllning...</menu>: Sker partier med <a Searches Board>Den aktuella stllningen</a> p brdet.</li>
<li><menu>I huvud...</menu>: Anvnder <a Searches Header>Fast information</a> (spelare, evenemang, plats, mm).</li>
<li><menu>Material/Stllning...</menu>: Sker baserad p <a Searches Material>Material</a> eller <a Searches Pattern>Stllning</a>.</li>
<br>
<li><menu>Anvnd skfil...</menu>: Anvnder en fil med <a Searches Settings>lagrade</a>.</li>
</ul>

<h3>Fnster</h3>
<ul>
<li><menu>Kommentarseditor</menu>: ppnar/ stnger <a Comment>Kommentarseditorn</a>.</li>
<li><menu>Partilista</menu>: ppnar/ stnger <a GameList>Partilistan</a>.</li>
<li><menu>PGN fnster</menu>: ppnar/ stnger <a PGN>PGN-fnstret</a>.</li>
<li><menu>Spelarfrteckning</menu>: ppnar/ stnger en frteckning ver spelarna i den aktiva databasen.</li> 
<li><menu>Turneringar</menu>: Listar <a Tmt>Turneringar</a>.</li>
<br>
<li><menu>Databasvxlaren</menu>: ppnar/ stnger <a Switcher>Databasvxlaren</a>. Databasvxlaren underlttar byte mellan olika databaser
och kopiering av partier frn den ena databasen till den andra.</li>
<li><menu>Databasverktyg</menu>: ppnar/ stnger <a Maintenance>Verktygsfnstret</a>.</li>
<br>
<li><menu>ECO fnster</menu>: ppnar/ stnger <a ECO browser>ECO blddraren</a>.</li>
<li><menu>Repetoareditor</menu>: ppnar/ stnger verktyget fr <a repetoire>Spelppningshantering</a>.</li>
<li><menu>Statistikfnster</menu>: ppnar/ stnger <term>Statistikfnstret</term>. Hr hittar du en statistisk sammanfattning av partierna i  
 <a Searches Filter>Skfiltret</a>.</li>
<li><menu>Trdfnster</menu>: ppnar/ stnger <a Tree>Varianttrdet</a>.</li>
<li><menu>Slutspelsdatabas</menu>: ppnar/ stnger slutspelsdatabasfnstret som ger dig viss information om <a TB>Slutspelsdatabaserna</a>.</li>
</ul>

<h3>Verktyg</h3>
<ul>
<li><menu>Analysmotor...</menu>: Startar/ stoppar en analysmotor, t ex Crafty, som kontinuerligt bedmmer den aktuella stllningen
p brdet i ett <a Analysis>Analysfnster</a>.</li>
<li><menu>Analysmotor 2...</menu>: Startar/ stoppar en andra analysmotor, t ex Crafty.</li>
<li><menu>Resultattabell</menu>: Skapar en <a Crosstable>Resultattabell</a> fr den aktuella turneringen/matchen som det aktuella partiet ingr i</li>
<li><menu>Eposthanteraren</menu>: ppnar/ stnger <a Email>Eposthanteraren</a> fr hantering av korrespondensschack.</li>
<br>
<li><menu>ppningsrapport</menu>: Skapar en <a OpReport>ppningsrapport</a> utifrn den aktuella stllningen.</li>
<li><menu>Sk material</menu>: ppnar dialog fr att <a PTracker>Ska efter en viss materiell balans</a>.</li>
<br>
<li><menu>Spelarinformation</menu>: Visar/ uppdaterar <a PInfo>Spelarinformation</a> fr den ene av tv spelare i det aktuella partiet.</li>
<li><menu>Ratingdiagram</menu>: Skapar ett <a Graphs Rating>Ratingdiagram</a> fr spelarna i partiet.</li>
<li><menu>Resultatdiagram</menu>: Visar <a Graphs Score>Resultatdiagrammet</a>.</li>
<br>
<li><menu>Exportera aktuellt parti ...</menu>: Sparar aktuellt parti till olika format; text, HTML eller LaTeX. Se vidare
   hjlpsidan fr  att <a Export>Exportera</a> partier.</li>
<li><menu>Exportera alla filtrerade partier</menu>: Sparar alla <a Searches Filter>filterade</a> partier till olika format; text, HTML eller LaTeX. Se vidare
   hjlpsidan fr  att <a Export>Exportera</a> partier.</li>
<br>
<li><menu>Importera ett parti i PGN-format...</menu>: ppnar <a Import>Importfnstret</a> fr att ange eller klistra in ett parti i 
 <a PGN>PGN-format</a> fr import till en Scid databas.</li>
<li><menu>Importera flera partier i PGN-format...</menu>: Importerar flera partier i PGN-format frn en fil.</li>
</ul>

<h3>Alternativ</h3>
<p>
Denna meny ger tillgng till de flesta av de parametrar som styr hur Scid fungerar.
Menyvalet <menu>Spara alternativ</menu> sparar de aktuella instllningarna till filen
 "<b>~/.scid/scidrc</b>" (eller <b>scid.opt</b> i katalogen som innehller den exekverbara
scid-filen, Scid.exe, om Windows); denna fil laddas varje gng du startar Scid.
</p>

<h3>Hjlp</h3>
<p>
Denna meny innehller hjlpfunktioner och ger tillgng till bl a fnstret "Dagens tips"
och startfnstret som informerar om vilka filer Scid laddat vid uppstart. 
</p>

<p><footer>(Uppdaterad: Scid 3.5, februari 2003)</footer></p>
}
	
####################
### Entering moves help:

set helpTitle(W,Moves) "Ange drag"
set helpText(W,Moves) {<h1>Ange drag</h1>
<p>
I Scid, kan du ange partidrag svl med musen som med tangentbordet. Nr du rr musmarkren ver en ruta p
brdet kommer du att mrka att svl rutan som ytterligare en ruta fr en annan frg. Om det finns ett legalt
drag till eller frn den ruta du fr musmarkren ver. Detta r det <term>Freslagna draget</term>.
Du utfr detta drag genom att <term>Vnsterklicka</term> med musen. Om detta str dig kan du stnga av denna funktion
i Alternativmenyn.

</p>
<p>
Fr att utfra ett annat drag kan du <term>klicka och hlla nere vnster</term> musknapp: flytta sedan musen till nskad
 ruta och slpp musknappen.
</p>
<p>
Om du vill kan du utfra drag genom att klicka tv gnger istllet fr att anvnda klicka-och-drag tekniken. Klicka d 
frst p utgngsrutan med den <term>Mittersta musknappen</term> och klicka sedan med samma musknapp p destinationsrutan.
(Tipset gller kanske framfrallt anvndare av UNIX(-lika) system, som ofta har stor nytta av 3-knappsmss).
</p>

<h4>Ta tillbaka ett drag</h4>
<p>
Man kan ta tillbaka ett drag genom att hgerklicka med musen. Detta gr tillbaka ett drag och tar bort det senast utfrda draget i partiet
eller varianten.
</p>

<h4>Erstt tidigare drag</h4>
<p>
Om du anger ett drag i en stllning dr ett drag redan angivits kommer Scid att frga om du verkligen vill erstta den tidigare
draget (draget och alla varianter lngre fram som r beroende av draget tas bort), eller om du vill skapa en ny variant istllet.
En del anvnder tycker att frgan r strande och vill alltid erstta det tidigare draget, s man kan konfigurera Scid till att inte
stlla denna frga. Du hittar mjligheten i  menyn <menu>Alternativ: Drag</menu> "<i>Frga fre erstt drag</i>".
</p>

<h4><name Trial>Testlge</name></h4>
<p>
Om du gr igenom ett parti och kommer till en stllning dr du vill testa en id utan att pverka det registrerade partiet s vljer du
<b>Testa en id</b> frn menyn <menu>Redigera</menu> fr att stta p testlge. I testlge kan du gra drag och frndringar av partiet som
r temporra, dvs de sparas inte nr du tergr frn testlge.
</p>

<h3><name Mistakes>Rtta fel</name></h3>
<p>
Om du skriver in ett parti och pltsligt upptcker ett fel flera drag tidigare r det mjligt att rtta till detta utan att 
behva gra om alla drag efter feldraget. Det enda sttet r att redigera PGN-versionen av partiet: ppna <a Import>Importfnstret</a>, 
vlj Klistra in aktivt parti, korrigera felet och vlj drefter "Importera".
</p>

<h3>Ange drag via tangentbordet</h3>
<p>
Du kan ange drag via tangentbordet genom att helt enkelt skriva in dem med bokstver och siffror. Lgg mrke till att dragen
ska anges i <term>SAN-notation</term>, <i>utan</i> (x) tecknet fr slag eller (=) tecknet fr promovering. Dragnotationen r 
inte versal/gemenknslig s t ex:
[n][f][3] r samma drag som Nf3 -- men kontrollera med noten nedan fr drag som str i konflikt med varandra.
</p>
<p>
Fr att skerstlla att inga drag r prefix fr ett annat drag s anvnds en srskild metod att ange rockad. Kort och lng rockad
representeras med hjlp av bokstver som fljer:
kort rockad anges med  [O][K]
lng rockad anges med [O][Q] istllet fr det vanliga O-O och O-O-O.
</p>
<p>
Nr du anger drag kommer du i statusraden att se en lista ver giltiga drag. Du kan, genom att trycka <b>[Mellanslag]</b> vlja det frsta i listan och fra in det
i partiet. Fr att ta bort tecken anvnder du de vanliga raderingstangenterna.
</p>
<p>
<b>OBS</b> gemena tecken kopplas i frsta hand till bnder, vilket betyder att [b]kan betyda b-bonden istllet fr lparen (Bishop). Om du hamnar
i situationer nr konflikter uppstr mste du istllet ange pjserna med versaler (B) i detta fallet.
</p>
<b>versttarens kommentar</b> Scid frstr inte svenska. Detta betyder att du inte kan anvnda de svenska frkortningarna till att ange drag. [s][f][6] 
frsts inte av Scid (dremot funkar [n][f][6] utmrkt). Om du vill anvnda tangentbordet att skriva in drag fr du istllet anvnda notationen [g][8][f][6] fr
samma drag.
</p>
<h4>Autokomplettering</h4>
<p>
I Alternativmenyn kan du sl p eller av <term>Autokomplettering</term>
av drag.
Med denna pslagen grs draget s fort du skrivit in tillrckligt mycket fr att srskilja det frn andra mjliga drag. Exempelvis rcker det att skriva [n][f] istllet
fr [n][f][3] fr draget <b>Nf3</b>i utgngsstllningen.
</p>
<p><b>versttarens kommentar</b> Scid frstr som sagt inte svenska. Dremot fungerar det med rutangivelsen om t ex pjsen p g1 bara har ett flt 
att g till.</p>

<h3><name Null>Ange null-drag</name></h3>
<p>
<a Annotating Null>Null</a> (tomma, planerade) drag kan vara anvndbara i  kommentarer fr att hoppa ver den ena spelarens drag. Du anger null-drag
genom att sl den ena kungen med den andra, eller via tangentbordet genom att skriva  "<b>--</b>" (minustecknet tv gnger).
</p>
<p><b>versttarens kommentar</b> "null" r en dataterm fr att beskriva ingenting (till skillnad mot noll som har ett vrde om dock noll, null har inget vrde).
Shane anvnder termen null hr, ngon som har frslag p bttre i den svenska versttningen? Kolla introduktionssidan fr att fresl ngonting.</p>

<h3>Ange de vanligaste kommentarsymbolerna</h3>
<p>
Du kan ven ange <a NAGs>Kommentarsymboler</a> via tangentbordet utan att behva anvnda <a Comment>Kommentarseditorn</a>. 
Fljande lista kan anges via tangentbordet:
<ul>
<li> !	: [!][ENTER] </li>
<li> ?	: [?][ENTER] </li>
<li> !?	: [!][?][ENTER] </li>
<li> ?!	: [?][!][ENTER] </li>
<li> !!	: [!][!][ENTER] </li>
<li> ??	: [?][?][ENTER] </li>
<li> </li>
<li> +-	: [+][-] </li>
<li> +/-	: [+][/] </li>
<li> +=	: [+][=] </li>
<li> =	: [=][ENTER] </li>
<li> -+	: [-][+] </li>
<li> -/+	: [-][/] </li>
<li> =+	: [=][+] </li>
</ul>

<p><footer>(Uppdaterad: Scid 3.4,  juli 2002)</footer></p>
}


########################################
### Searches help screen:

set helpTitle(W,Searches) "Ska i Scid"
set helpText(W,Searches) {<h1>Ska i Scid</h1>
<p>
I Scid kan man ska information p flera olika stt. 
Det finns tre huvudmetoder att anvnda sig av beroende p vilken typ av information man
r ute efter:
<ul>
<li><b>1)</b> utifrn den aktuella stllningen p brdet, </li>
<li><b>2)</b> utifrn specifikt material eller en specifik stllningstyp; och </li>
<li><b>3)</b> utifrn fast information, t ex spelare, ort, resultat eller datum. </li>
</ul>
<p>
Utver dessa metoder kan man anvnda sig av en automatisk skfunktion, <a Tree>Trdfnstret</a>, som frklaras
separat.
</p>

<h3><name Filter>Skfiltret</name></h3>
<p>
Skningar baseras i  Scid p <term>Filter</term>.
Ett filter representerar en delmngd av den aktiva databasen. Vid varje specifikt tillflle kommer ett parti att antingen vara
del av denna delmngd (filtret) eller uteslutas av detta. I varje typ av skning (se ovan) kan du vlja att begrnsa, utka eller
ignorera det aktiva filtret och istllet ska i hela databasen. Detta gr att man stegvis kan bygga komplicerade skningar. 
Du kan ocks kopiera alla filtrerade partier frn den ena databasen till den andra genom att anvnda <a Switcher>Databasvxlaren</a>.
</p>

<p>
Nr du sker p exakt stllning, <a Tree>Trd</a> eller Material/Stllningstyp, sparas dragnumret i den frsta stllningen och varje
parti med identisk stllning lagras i minnet s att man, nr man senare laddar de framskta partierna, automatiskt kommer till den stllning
som var av intresse (som skningen grundades p).
</p>
<p>
<b>OBS</b> skningen gller endast textdragen, inte varianterna.
</p>

<h3><name Board>Sk: Aktuell stllning</name></h3>
<p>
Med denna metod hittas partier med samma stllning som det p brdet i huvudfnstret. Rockadmjligheter och 
rttigheter att gra <i>En passant</i> ignoreras. Det finns fyra undertyper att vlja p, samtliga krver att stllningen har exakt samma material och spelare vid draget fr att en trff ska
anses ha intrffat:
<ul>
<li> [1] exakt (de bda stllningarna mste vara exakt lika), </li>
<li> [2] bnder (bondestrukturen mste vara identisk, men de vriga pjsernas placering kan variera), </li>
<li> [3] linjer (antalet vita och svarta bnder p varje linje mste vara identisk - i vrigt kan pjsplaceringen variera), och slutligen; </li>
<li> [4] material (bnder och pjser kan st var som helst p brdet.). </li>
</ul>
<p>
Att ska p bondestllning r anvndbart nr man studerar spelppningar med likartad bondstruktur, medan att ska p linjer och material r lmpliga metoder fr
att finna liknande stllningar i slutspel. Nr man sker p specifika stllningar kan man skapa den frst (frn menyvalet <menu>Redigera: Skapa stllning</menu>) och starta skningen drifrn.
(Man kan naturligtvis ocks spela upp stllningen p brdet, <i>versttarens anmrkning</i>).
</p>
<p>
Du kan ange att skningen ven ska leta i varianter (istllet fr att bara inkludera de egentliga partidragen) genom att markera kryssrutan <b>Sk i varianter</b>, 
men detta kan gra skningen lngsammare om databasen r stor och har mnga partier med varianter.
</p>

<h3><name Material>Sk: Material/stllningstyp</name></h3>
<p>
Denna skning r anvndbar nr man vill finna slut- eller mittspelsteman. Du kan specificera minimalt och maximalt antal av varje pjstyp, och hitta stllningar
av typen "Lpare p f7" eller "Bonde p f-linjen". Det finns ett antal vanliga stllningstyper frdefinierade, t ex "Torn och Bondeslutspel" eller "Isolerade d-bnder".
</p>
<p>
<b>Tips:</b><br>
Tidstgngen fr denna typ av skning kan variera kraftigt. Man kan minska tiden som behvs genom att anvnda sig av frnuftiga begrnsningar.
Om man, som exempel,  vill underska slutspel kan man stta det minimala antalet drag partiet ska innehlla till 20. D kommer alla partier 
med frre n 20 drag att ignoreras.
</p>

<h3><name Header>Sk: fasta uppgifter ("header search")</name></h3>
<p>
Denna skning anvnds fr att finna aspekter p partier som lagras i partihuvudet (jmfr med eposthuvud) ssom datum, resultat, plats och ratingtal. Den
krver ingen avkodning av dragen i partiet. Fr att en trff ska registreras krvs att alla flt du specificerar stmmer verens. Namnflten  (Vit, Svart, 
Evenemang, Plats och Rond) r versal/gementoleranta. Trffar registrerars p all text i dessa flt och mellanslag ignoreras .
</p>
<p>
Du kan generera exakta skningar och anvnda jokertecken i huvudflten som nmnts ovan. Jokertecknet  <b>?</b> betyder "Ett
valfritt tecken" medan <b>*</b> betyder "Inget eller flera valfria tecken". Man genererar exakta skningar genom att innesluta den text man
nskar hitta i citattecken ("). Exempel:
</p>

<p>
En skning p platsen <b>USA</b> kommer att generera amerikanska stder, men ven <b>Lausanne SUI</b>, vilket du frmodligen inte var ute efter! 
Detta lser man genom att istllet ska efter platsen <b>"*USA"</b> (notera citattecknen) som endast kommer att presentera stder i USA.</p>
<p>
Om du sker efter en srskild spelare (eller tv srskilda spelare) som vit eller svart och det inte spelar ngon roll vet som har vilken frg vljer du med 
frdel <b>Ignorera frg</b> i stllet fr svart/vit i frgangivelsen.
</p>
<p>
Avslutningsvis kan fasta skningar gras fr att hitta valfri text (VERSAL/gemen-knsligt och utan jokertecken) i PGN-versionen av partierna. Du kan
ange upp till tre textstrngar, och alla mste finnas i ett parti fr att de ska rknas som en trff. Denna skning r mycket anvndbar nr det gller
kommentarsfltet eller extra mrkord i partierna (exempelvis  <b>frlorar p tid</b> eller <b>Kommentator</b>), eller fr en dragfljd som 
<b>Bxh7+</b> och <b>Kxh7</b> nr en lpare har offrats (och accepterats) p h7.

Tnk dock p att denna typ av skningar kan vara <i>mycket</i> tidskrvande eftersom alla partier som mter vissa kriterier mste avkodas och
genomskas efter textstrngen/-arna. Det r drfr en bra id att begrnsa denna typ av skning s mycket som mjligt. Exempel:
</p>

<p>
Fr att hitta partier med underpromovering till torn sker man p <b>=R</b> och stter <b>Frvandlingar</b> flaggan till Ja.
Fr att hitta text i kommentarer stter du flaggan <b>Kommentarer</b> till Ja.
Om du sker p dragen <b>Bxh7+</b> och <b>Kxh7</b>, kan det vara en id att begrnsa partierna till de som har resultatet  1-0 resultatet och innehller
minst 20 halvdrag. Eller gr en Material-/Stllningstypsskning fr att hitta partier dr lparen flyttas till h7.
</p>

<h3><name Settings>Spara skkriterierna</name></h3>
<p>
I Material/Stllningstyp och Huvudskningsfnstren finns valet att  
<term>Spara instllningarna</term>. Detta ger dig mjligheten att spara de aktuella skkriterierna fr senare anvndning.
Kriterierna sparas till en <term>Skningsfil</term> med filndelsen  .sso. Fr att teranvnda en tidigare sparad skningfil
vljer du <menu>ppna ...</menu> frn menyn <menu>Sk</menu>.
</p>

<h3>Sktider och ignorerade partier</h3>
<p>
De flesta skningar meddelar en hur lng tid skningen tog och hur mnga partier som <term>Ignorerades</term>. Ignorerade partier
r de som exkluderats frn en skning utan att ngot av dess drag har avkodats (frn Scids databasformat). Detta baseras p information
som lagrats i index. Se vidare hjlpfilen om <a Formats>Filformat</a> fr ytterligare information. 
</p>

<p><footer>(Uppdaterad: Scid 3.0, november 2001)</footer></p>
}

#################
### Clipbase help:

set helpTitle(W,Clipbase) "Urklippsdatabasen"
set helpText(W,Clipbase) {<h1>Urklippsdatabasen</h1>
<p>
Frutom de databaser du ppnar sjlv, ppnar Scid ytterligare en - <term>Urklippsdatabasen</term>. Urklippsdatabasen,
fungerar precis som alla andra databaser, med ett undantag. Den existerar bara i datorns arbetsminne och sparar inte data
ngonstans permanent. Urklippsdatabasen tms sledes nr du stnger av datorn.
</p>
<p>
Urklippsdatabasen r anvndbar som en tillfllig lagringsplats, fr att sl samman skresultat frn olika databaser, eller fr att man dr
kan behandla resultat frn en skning som en egen databas. 
</p>
<p>
Antag, exempelvis, att du vill frbereda dig fr en srskild motstndare. Du har skt igenom databasen efter partier av denne dr motstndaren
spelar vit. Kopiera alla partier i <a Searches Filter>Skfiltret</a> till Urklippsdatabasen. Du kan gra det genom att i <a Switcher>Databasvxlaren</a>
 dra dem frn deras ordinarie databas till Urklippsdatabasen. Drefter kan du ppna Urklippsdatabasen och underska partierna i  <a Tree>Trdfnstret</a>, 
till exempel fr att kartlgga motstndarens ppningsrepetoar.
</p>
<p>
Observera att du kan kopiera partier frn en databas till en annan utan att anvnda Urklippsdatabasen som mellanlagringsplats. Notera ocks att
Urklippsdatabasen <i>inte</i> kan stngas via menyvalet <menu>Arkiv: Stng</menu>medan du r i Urklippsdatabasen. Det som hnder d r
motsvarigheten till  <menu>Redigera: terstll Urklippsdatabasen</menu>, dvs databasen tms.
</p>
<p>
Du kan maximalt ha 100000 partier i minnet samtidigt.
</p>

<p><footer>(Uppdaterad: Scid 2.5,  juni 2001)</footer></p>
}

#################################
### Variations and comments help:

set helpTitle(W,Annotating) "Kommentera partier"
set helpText(W,Annotating) {<h1>Kommentera partier</h1>
<p>
I Scid kan lgga till noter till partierna. Det finns tre typer av anteckningar du kan lgga till till varje drag:
symboler, kommentarer och varianter.
</p>

<h3>Symboler och kommentarer</h3>
<p>
Symboler anvnds fr stllningsbedmningar om vem som str bst (t ex "+-" eller "=") , om draget som just gjordes var bra eller dligt
(t ex "!" eller "?") medan kommentarer kan best av valfri text. Fr att lgga till symboler och kommentarer anvnder man
<a Comment>Kommentarseditorn</a>. Det finns ocks en srskild hjlpsida fr <a NAGs>Standardsymbolerna</a>.
</p>
<p>
Tnk p att ven om varje drag kan ha fler symboler, kan det bara ha en kommentar. En kommentar fr frsta draget skrivs ut som 
text fre partidragen. 
</p>

<h3><name Vars>Varianter</name></h3>
<p>
En <term>variant</term> r en alternativ fortsttning av partiet som skulle ha kunnat utfras vid ngot
tillflle i partiet. Varianter kan innehlla kommentarer, symboler och varianter. Knappen mrkt "<b>V</b>" 
ovanfr brdet i huvudfnstret, samt valmjligheter frn menyn <menu>Redigera</menu> kan anvndas till att skapa,
navigera i och redigera varianter.
</p>

<h4>Kortkommandon</h4>
<p>
Nr det finns varianter till ett drag visas dem i partiinformationsomrdet. Den frsta varianten r <b>v1</b>, den andra
r <b>v2</b>, osv. Fr att flja en variant kan man klicka p den, eller trycka  "<b>v</b>" fljt av variantens nummer 
(Om det bara finns en variant rcker det med att trycka <b>v</b>.). Kortkommandot fr att g ur en variant r "<b>z</b>".
</p>

<h3><name Null>Null-drag</name></h3>
<p>
Det kan ibland vara anvndbart att hoppa ver drag i varianter. Du kan exempelvis till draget 14.Bd3 lgga till en variant och
nmna att det hotar 15.Bxh7+ Kxh7 16.Ng5+ med angrepp. Du kan ocks gra detta genom att anvnda <term>Null-drag</term>
mellan 14.Bd3 och 15.Bxh7+, i exemplet ovan. Ett null-drag visas som "<b>--</b>" och infogas genom att med musen utfra det
ogiltiga draget att med kungen sl den andra kungen, eller att helt enkelt skriva in "<b>--</b>" (tv minustecken).
</p>
<p>
Observera att null-drag inte ingr i PGN standarden, s om du vill exportera partier som innehller null-drag till en PGN-fil mste du 
vlja mellan att bevara null-dragen(-t) eller konvertera dem till kommentarer fr att bibehlla exportmjligheter till andra
program. Se hjlpsidan fr att <a Export>Exportera</a> partier fr mer information.
</p>

<p><footer>(Uppdaterad: Scid 3.4, juli 2002)</footer></p>
}

####################
### Analysis window:

set helpTitle(W,Analysis) "Analysfnstret"
set helpText(W,Analysis) {<h1>Scids Analysfnster</h1>

<h3>Analysfnster</h3>
<p>
Scids analysfnster visar analysen frn en schackmotor
av den aktuella positionen. Nr positionen ndras skickar Scid den 
nya positionen till schackmotorn samt visar dess vrdering av 
denna position. 
</p>

<p>
Vrderingen som visas i analysfnstret r alltid frn vits perspektiv, 
s en negativ vrdering indikerar att svart str bttre. Den nedre delen av fnstret 
(med scrollrutan) visar historiken fr vrderingar producerat av schackprogrammet fr den 
aktuella positionen, s att du kan se hur vrderingen har ndrats. 
</p>

<p>
Fr att lgga till det bsta draget valt av en schackmotor som ett nytt drag i det aktuella partiet 
klickar du p Lgg till drag knappen. 
</p>

<h3>Schackmotorlistan</h3>

<p>
Scid behller en lista p de schackmotorer du har anvnt, tillsammans med en uppskattad Elo-rating 
(om du antar en) och datumet nr varje schackmotor sist anvndes. Du kan sortera schackmotorlistan 
efter namn, Elo-rating, eller datum. Vlj Ny eller ndra knapparna fr att lgga till en ny schackmotor till 
listan eller ndra detaljerna fr en existerande schackmotor. 
</p>

<h3>Schackmotorkommandon och kataloger</h3>

<p>
Fr varje schackmotor mste du specificera den exekuterbara filen att kra samt i vilken katalog Scid ska 
kra den i. 
</p>

<p>
Den mest sannorlika orsaken till problem att starta en schackmotor r valet av vilken katalog schackmotorn 
ska kra i. Vissa schackmotorer krver en instllnings- eller ppningsboksfil i sina startkataloger 
fr att fungera bra. Andra schackmotorer (som Crafty) skriver loggfiler till katalogen de startar i, s 
du mste kra dem i en katalog dr du har tillstnd att skriva i. Om kataloginstllningarna fr en 
schackmotor r ".", kommer Scid att starta en schackmotor i den aktuella katalogen. 
</p>

<p>
S om en schackmotor som borde fungera bra i Scid inte startar frsk att ndra dess kataloginstllning. 
Fr att undvika att schackmotorer skapar loggfiler i mnga olika kataloger rekommenderar jag att starta schackmotorer 
i katalogen med Scids anvndarfiler (detta r dr Scid.exe filen finns i Windows, 
eller ~/.scid/ i Unix); det finns en knapp i dialogrutan fr att ndra schackmotordetaljer med namnet 
Scid.exe-katalogen i Windows eller ~/.scid i Unix som lter dig vlja vilken schackmotor som ska starta i denna katalog. 
</p>

<h3>Trning</h3>

<p>
Med Trningsknappen kan du spela drag mot schackprogrammet. Tiden fr varje drag 
r fixerad och analysresultet visas inte d. 
</p>

<h3>Kommentera ett parti</h3>

<p>
Lgg till variation knappen i analysfnstret lgger till den aktuella vrderingen och bsta analyserade
dragfljd som en ny variation i partiet. 
</p>

<p>
Du kan gra detta automatiskt fr ett antal drag (kommentera partiet) genom att klicka p 
kommentarknappen. Detta frgar dig efter ngra kommentarsalternativ och sedan startar 
sjlvspelsmod. Nr sjlvspelsmod anvnds och analysfnstret r ppet lggs 
en variation innehllande vrderingen och bsta dragfljden automatiskt till fr varje 
position nr sjlvspelsmod gr igenom partiet. Bara positioner frn den aktuella 
positionen till slutet av partiet (eller tills du lmnar sjlvspelsmod) kommenteras, 
s du kan hoppa ver att kommentera ppningsdragen genom att g till en mittspelsposition 
innan du startar sjlvspel. 
</p>

<p>
Fr att avbryta kommentarer stng av sjlvspelsmod, till exampel genom att trycka
ner Esc-tangenten i huvudfnstret. 
</p>

<p>
Observera att fr enkelhet finns kommentarknappen bara tillgnglig i fnstret ppnat som 
schackmotor 1. Om du ppnar en schackmotor som schackmotor 2 kan du inte anvnda den fr att
kommentera partiet. 
</p>

<h3>Analysbrdet</h3>

<p>
Genom att klicka p schackbrdeknappen i ett analysfnster visar du eller dljer du analysbrdet, 
som visar positionen vid slutet av den av den bsta funna aktuella dragfljden hittad av 
schackmotorn. 
Detta fungerar fr de flesta Scid-kompatibla schackmotorer men inte fr alla; 
det beror p den dragnotation som schackmotorn anvnder. 
</p>

<h3>Schackmotorprioritet</h3>

<p>
Om en schackmotor anvnder fr mycket CPU-tid och pverkar anvndningen av Scid eller 
andra program kan det hjlpa att stta p "Lg CPU-prioritet" i proxyn; 
det ger schackmotorn en lg prioritet fr CPU-anvndning. 
</p>

<h3>Grnssnittsdetaljer</h3>

<p>
Fr att anvnda analysfnstret behver du ett schackprogram som stder WinBoard/Xboard-protokollet. 
</p>

<p>
Scid skickar kommandorna <b>"xboard"</b>,<b>"post"</b> och <b>"protover 2"</b> till en schackmotor nr den startar, 
och anvnder <b>"setboard"</b> och <b>"analyze"</b> kommandorna fr mer effektiv kommunikation 
om schackprogrammet svarar vilket indikerar att det stder dem. Om en schackmotor inte stder 
<b>"setboard"</b> kommandot kan det inte analysera ett parti som brjar med en 
ickestandard startposition. 
</p>

<p>
Fr program som inte stder analyskommandot skickar Scid fljande 
kommandon varje gng positionen ndras: <b>"new"</b> och <b>"force"</b>, 
sedan dragen i partiet till den aktuella position sedan <b>"go"</b>. 
</p>

<p>
Bob Hyatts utmrkta gratis schackmotor Crafty r vad jag anvnder och rekommenderar fr 
analysfnstret, men mnga andra WinBoard eller XBoard kompatibla schackmotorer har 
anvnts framgngsrikt med Scid. Ngra nedladdningssajter fr ngra schackmotorer listas nedan. 
</p>

<p>
Crafty: <url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url> 
</p>

<p>
Yace: <url http://home1.stofanet.dk/moq/>http://home1.stofanet.dk/moq/</url> 
</p>

<p>
Phalanx: <url ftp://ftp.math.muni.cz/pub/math/people/Dobes/>ftp://ftp.math.muni.cz/pub/math/people/Dobes/</url> 
</p>

<p>
Comet: <url http://members.aol.com/utuerke/comet/>http://members.aol.com/utuerke/comet/</url> 
</p>

<p>
Gnuchess: <url http://www.gnu.org/software/chess/chess.html>http://www.gnu.org/software/chess/chess.html</url> 
</p>

<p>
The Crazy Bishop: <url http://remi.coulom.free.fr/>http://remi.coulom.free.fr/</url> 
</p>
<p><footer>(Uppdaterat: Scid 3.4, September 2002)</footer></p>
}





###############################
### Comment editor window help:

set helpTitle(W,Comment) "Kommentareditor"
set helpText(W,Comment) {<h1>Scids Kommentareditor</h1>

<h3>Kommentarseditorfnstret</h3>

<p>
Kommentareditorfnstret lter dig lgga till eller ndra kommentarer och symboliska kommentarssymboler 
fr drag i det aktuella schackpartiet. 
</p>

<h3>Kommentarsymboler</h3>

<p>
Scid anvnder PGN-standarden fr kommentarsymboler, accepterar NAGs (Numeriska annotationsglypfer) 
vrden fr kommentarer. Ngra av de mest vanliga symbolerna (som "!" eller "+-") visas 
som symboler och har en knapp i kommentarseditorfnstret fr snabb inmatning. Fr andra symboler, 
kan du skriva in det lmpliga numeriska NAG-vrdet som r ett nummer frn 1 till 255. Till exempel, 
NAG-vrdet 36 betyder "Vit har initiativet" och visas som "$36" i PGN-texten till partiet.  
</p>

<p>
Se hjlpsidan om NAG-vrden fr NAG vrden som definieras av bl a PGN-standard. 
</p>

<p>
Tips: Du kan lgga till de vanligaste dragvrderingssymbolerna (!, ?, !!, ??, !? och ?!) i huvudfnstret 
utan att behva anvnda kommentarseditorfnstret, genom att skriva in symbolerna fljt av att trycka 
p <b>[Enter]</b> tangenten. Detta r speciellt anvndbart om du skriver in schackdrag genom att anvnda
tangentbordet. 
</p>

<h3>Kommentarer</h3>

<p>
Du kan ndra kommentarer genom att skriva in text och anvnda Rensa, ngra och Lagra 
knapparna. Du behver inte trycka p Lagra knappen fr att uppdatera en kommentar; 
den uppdateras automatiskt nr du gr till en annan position i partiet. 
</p>

<h3>Frga rutor</h3>

<p>
Du kan frga alla rutor med valfri frg genom att anvnda ett specialkommando,som kan 
finnas varsomhelst i en kommentar. Kommandoformatet r: 
</p>

<p>
[%mark square color]
</p>

<p>
dr square r ett rutnamn som d4 och frg r varje definierat frgnamn 
(som red, blue, darkGreen, lightSteelBlue, etc) eller RGB-kod (a # fljt av 
sex hexadecimala siffror, som #a0b0c8). Om frgen utelmnas blir rutan
rd. 
</p>

<p>
En kommentar kan innehlla obegrnsat antal frgkommandon, men varje mste ha sin 
egen [%mark ...] markering. Till exempel, kommentarstexten
</p>

<p>
Nu r d6-rutan  [%mark d6] svag och springaren kan attackera den frn b5. [%mark b5 #000070] 
</p>

<p>
frgar rutan d6 rd och rutan b5 frgas med den mrkbl frgen #000070. 
</p>

<h3>Rita pilar</h3>

<p>
Du kan rita en pil frn en ruta till en annan genom att anvnda ett specialkommentarskommando 
liknande det fr att frga rutor. Formatet r: 
</p>

<p>
[%arrow fromSquare toSquare color]
</p>

<p>
dr fromSquare och toSquare r namn p rutor som d4 och frg r varje definierat 
frgnamn (som  red, blue, etc) eller RGB code (som #a0b0c0). Om frgen inte specificeras
blir den rd. 
</p>

<p>
Till exempel, kommentarstexten 
</p>

<p>
C3-springaren och c4-lparen kontrollerar den svaga d5 rutan. 
[%arrow c3 d5 red] [%arrow c4 d5 blue] 
</p>

<p>
kommer att rita en rd pil frn c3 till d5 och en bl pil frn c4 till d5. 
</p>

<p><footer>(Uppdaterat: Scid 3.2, February 2002)</footer></p>
}


###########################
### Crosstable window help:

set helpTitle(W,Crosstable) "Korstabellfnster"
set helpText(W,Crosstable) {<h1>Scids korstabellfnster</h1>

<h3>Korstabellfnstret</h3>

<p>
Korstabellfnstret visar turneringskorstabellen fr det aktuella partiet. 
Varje gng du uppdaterar korstabellfnstret (genom att trycka p Uppdatera knappen, 
genom att trycka Enter tangenten i korstabellfnstret, eller genom att trycka <b>Ctrl+Shift+X</b> 
i huvud- eller partilistefnstren), sker Scid efter alla partier i samma turnering som det
aktuella partiet. 
</p>

<p>
Alla partier som spelas upp till tre mnader fre eller efter det aktuella partiet, 
med exakt samma Evenemangs- och Ortmarkeringar anses vara i turneringen. 
</p>

<p>
Ett enkelt klick med vnstra musknappen p ett resultat i korstabellen laddar detta  
parti. Du kan lgga till alla partier i turneringen till filtret med Lgg till filter knappen
i korstabellen. 
</p>

<h3>Korstabellfnstermenyer</h3>

<p>
<b>[Arkiv]</b> menyn lter dig spara den aktuella tabellen till en fil med text-, 
LaTeX- eller HTML-tabellformat. 
</p>

<p>
<b>[Visa]</b> menyn lter dig vlja tabellformat: 
All-play-all, Swiss eller Knockout eller Auto. 
</p>

<p>
All-play-all formatet (fr round-robin-typ evenemang) har en begrnsning p 30 spelare, 
men Swiss formatet (fr turneringar med mnga spelare) kan visa upp till 
200 spelare och upp till 20 rundor. Auto, som vljer det bsta formatet automatiskt 
fr varje turnering r standardinstllningen. 
</p>

<p>
Observera att Scid anvnder Rundemarkeringen fr varje parti fr att producera en Swisskorstabell, 
s du kommer inte att se ngra partier i Swisskorstabellen fr en turnering om dess partier inte 
har numeriska rundevrden som: 1, 2, 3, etc. 
</p>

<p>
Visa menyn lter dig ocks stlla in de data som ska presenteras att inkludera eller exkludera rating, 
lnder och spelartitlar. Du kan ocks vlja om frgallokationer i Swisstabeller ska synas. 
</p>

<p>
Separat ponggrupps-alternativet pverkar bara utseendet p tabellen nr spelarna sorteras
efter pong: det ger en tomrad mellan varje grupp av spelare med samma pong. 
</p>

<p>
<b>[Sortera]</b> menyn lter dig sortera spelarna efter namn, rating eller pong; 
efter pong r standardinstllningen. 
</p>

<p>
<b>[Frg]</b> menyn lter dig stta p eller av frg i hypertextvisning. Eftersom det kan ta lng tid att 
formattera och visa stora korstabeller i hypertext sparar det mycket tid att vlja vanlig text
fr stora evenemang. Men i enkel text kan du inte klicka p spelare eller partier. 
</p>

<h3>Duplikerade partier i korstabeller</h3>

<p>
Fr att f bra resultat med korstabeller br du markera dubblettpartier fr borttagning och 
ha en konsistent stavning i partierna av namn p spelare, ort och evenemang. Se Underhll 
databas fr hjlp med att ta bort dubbletter och ndra (eller stavningskontrollera) 
spelar-/evenemangs-/ortsnamn. 
</p>

<p><footer>(Uppdaterat: Scid 3.1, December 2001)</footer></p>
}


###########################
### Database switcher help:

set helpTitle(W,Switcher) "Databasvxlaren"
set helpText(W,Switcher) {<h1>Scids databasvxlare</h1>

<h3>Databasvxlaren</h3>

<p>
Databasvxlaren ger en mjlighet att enkelt byta mellan databaser 
eller kopiera partier mellan databaser. Namnet, filterinstllningen 
pch en ikon fr varje databas visas medan den aktiva databasen 
markeras med en gul bakgrund. 
</p>

<p>
Du kan ppna databasvxlaren frn  <b>[Fnster]</b> menyn eller genom att 
anvnda dess tangentkombination: <b>Ctrl+D</b>. 
</p>

<p>
Fr att kopiera alla filtererade partier frn en databas till en annan, drag med den vnstra 
musknappen nedtryckt frn klldatabasen till destinationsdatabasen. Du kommer d att se en  
bekrftelsedialog (om destinationsdatabasen inte r Clipbase) om partierna kan 
kopieras eller se ett felmeddelande om partierna inte kan kopieras (till exempel, 
om en vald databas inte r ppnad). 
</p>

<p>
Genom att klicka med hger musknapp p en databas visas en popup-menu fr 
denna databas, frn vilken du kan ndra databasikon eller nollstlla databasens 
filter. Du kan ocks anvnda denna meny fr att ndra orienteringen av den 
(fr att arrangera databasen vertikalt eller horisontellt) vilket r anvndbart fr 
mindre bildskrmar. 
</p>

<p><footer>(Uppdaterat: Scid 3.1, December 2001)</footer></p>
}


######################
### Email window help:

set helpTitle(W,Email) "Email-fnster"
set helpText(W,Email) {<h1>Scids Email-fnster</h1>

<h3>Email-fnstret</h3>

<p>
Scids email-fnster ger en mjlighet att hantera korrespondensschackpartier 
med email. Om du inte spelar emailschack har du inget intresse fr detta. 
Men om du spelar korrespondensschack via email kan du skicka dina 
emailmeddelanden direkt frn Scid! 
</p>

<p>
Fr att anvnda emailhanteraren flj fljande steg: 
</p>

<p>
<li>1) Skapa partierna fr din motstndare i databasen. </li>
<li>2) I emailhanteringsfnstret vlj Lgg till och skriv in detaljerna om dina motstndare: 
namn, email-adress samt antal partier i databasen. </li>
<li>3) Vlj Skicka email i emailfnstret varje gng du har lagt till drag till partierna 
och vill skicka ett meddelande. </li>
Nr du skickar ett email-meddelande genererar Scid meddelandet med partierna 
i PGN-format utan kommentarer eller variationer eftersom du vanligtvis inte vill att din 
motstndare ska se din analys. Du kan ndra meddelandet innan du skickar det fr att lgga
till villkorade drag eller annan text. 
</p>

<p>
Fr varje motstndare kan du ha obegrnsat antal partier; en eller tv r det mest vanliga. 
Observera att Scid inte kontrollerar om antalet partier ndras, s efter att ha stllt in detaljerna 
om dina motstndare var noga att undvika att ta bort partier eller sortera din databas med emailpartier 
eftersom detta kommer att ndra i partier och gra antalet partier fr varje motstndare felaktigt. 
</p>

<h3>Begrnsningar</h3>

<p>
Scid har inte nnu mjlighet att kontrollera din emailkatalog, s du mste fortfarande lgga till
dina motstndares drag till partierna manuellt. 
</p>

<h3>Konfiguration<h3>

<p>
En kopia av varje emailmeddelande som skickats av Scid sparas i filen ~/.scid/scidmail.log. 
Om du vill att de ska sparas i en annan fil behver du ndra i filen tcl/start.tcl 
och omkompilera Scid. 
</p>

<p>
Scid kan skicka emailmeddelanden genom att anvnda en SMTP server eller sendmail. 
Anvnd instllningsknappen i emailhanteraren fr att specificera vilken du vill anvnda. 
</p>

<p>
Scid lagrar motstndardetaljerna fr en databas i en fil med samma namn som databasen
med filndelsen  ".sem". 
</p>

<p><footer>(Uppdaterat: Scid 3.0, November 2001)</footer></p>
}


############################
### File Finder window help:

set helpTitle(W,Finder) "Sk filer"
set helpText(W,Finder) {<h1>Sk filer</h1>

<h3>Sk filer<h3>

<p>
Sk filer hjlper dig att hitta filer som du kan anvnda i Scid: 
databaser, PGN-filer, EPD-filer samt repetoarfiler. 
</p>

<p>
Den visar anvndbar information om varje fil, som dess storlek 
(see nedan) och datum fr senaste ndringen. Du kan ppna varje visad 
fil genom att vlja den genom att klicka en gng med vnstra musknappen. 
</p>

<h3>Ska i underkataloger</h3>

<p>
Nr du vill hitta alla filer i alla underkataloger till den aktuella katalogen, 
s markerar du i markeringsrutan fr Leta i underkataloger. Detta fr Scid att rekursivt 
genomska varje underkatalog efter filer som kan ppnas i Scid. Detta kan 
ta lng tid om det finns mnga underkataloger, s du kanske inte vill gra detta 
fr en katalog nra roten av filsystemet. Du kan avbryta filskningen genom att 
trycka p Stoppknappen. 
</p>

<h3>Filstorlekar</h3>

<p>
Betydelsen av de filstorlekar som visas beror p filtypen. 
Fr Scid-databaser och PGN-filer r det antalet partier. Fr EPD-filer 
r det antalet positioner. Fr repetoarfiler r det antalet 
(inkludera- eller exkludera)ppningar. 
</p>

<p>
Fr alla filtyper utom Scid-databaser r den angivna filstorleken en uppskattning baserad p 
de frsta 64 kilobytesen av filen, s den angivna storleken kanske inte r korrekt fr 
filer som r strre n 64 kb. Uppskattade storlekar visas med ett ungefrtecken (~) 
fr att visa att de inte r exakta. 
</p>

<p><footer>(Uppdaterat: Scid 2.7, September 2001)</footer></p>
}


#########################
### GameList window help:

set helpTitle(W,GameList) "Partilistan"
set helpText(W,GameList) {<h1>Partilistan</h1>
<p>
Partilistafnstret ger en enradig sammanfattning av varje
parti i det aktuella <term>Filtret</term> .
</p>

<h3>Navigationen i partilistan</h3>

<p>
Du kan blddra i partilistan med skjutregulatorn eller med de fyra
knapparna i nedre delen av listan .
Du kan ocks anvnda tangenterna <b>[Pos1]</b>, <b>[End]</b>, <b>[Bild i]</b>, <b>[Bild ab]</b> svl som
cursortangenterna , fr att scrolla med tangentbordet.
</p>

<p>
Du kan hitta  nsta parti i listan, som innehller en bestmd
text i Vit-, Svart-, Turnerings- eller Ortsfltet , med 
<b>Sk text</b>-inmatningsflten.
</p>

<h3>tgrder med partier i listan</h3>

<p>
Fr att ladda ett parti p listan klickar du dubbelt med
den vnstra musknappen.
Ett klick med dem mittersta musknappen visar de frsta dragen i partiet;
det r nyttigt, nr man vill se ppningen fre ppnandet av ett parti.
</p>
<p>
Den hgra musknappen ger en meny fr det utvalda partiet,
dr du kan ta bort partier (eller "ta tillbaka partier") eller utesluta partier frn 
filtret. Observera att borttagandet inte grs direkt utan det grs frst
nr databasen  <a Compact>komprimeras</a>.
</p>

<h3>Konfigurera partilistan</h3>
<p>
Fr att konfigurera partilistan, klickar du med den vnstra eller
hgra musknappen i en kolumnverskrift. Du kan ven ndra bredd,
, infoga eller ta bort samt ndra frg p varje kolumn.
</p>
<p>
Nr du bara vill ndra kolumnbredden, finns det fr detta en
tangentkombination: klickar du med nedtryckt <b>[Ctrl]</b>- (eller
<b>[Shift]</b>)-tangent med den vnstra musknappen i 
den versta delen av kolumnen  blir kolumnen mindre med den hgra
musknappen blir den bredare.
</p>

<h3>ndra storlek p partilistan</h3>
<p>
Storleken p partilistan blir sparat i alternativfilen varje gng,
som du sparar dina instllningar.
Du kan ocks nr du vill att partilistan standardmssigt ska visa 10 partier ,
frndra storleken p partilistafnstret och vlja
<b>Spara instllningar</b> i <menu>Alternativ</menu>-menyn.
</p>

<h3><name Browsing>Se partier och infoga variant</name></h3>
<p>
Kontextmenyn fr Partilistan (och ngra andra fnster, som bl a
<a Reports Opening>ppningsrapport</a>-Fnstren och listan med de
<a Tree Best>Bsta partierna</a> i <a Tree>Dragtrd</a>-Fnstret)
tillter val av parti att ladda, titta p eller infogandet av en variant.
</p>
<p>
Nr <term>Betrakta parti</term> blir valt, blir dragen i
det utvalda partiet (utan kommentarer eller varianter) visat i ett
separat fnster. Det r en nyttig metod att titta p ett annat parti
i frgrunden utan att ndra i det aktuellt laddade partiet.
</p>
<p>
Funktionen <term>Infoga variant</term> gr det mjligt att infoga 
varianter i det utvalda partiet. Scid finner den
sista mjliga tidpunkten, d det valda partiet avvek frn det aktuella
(med betraktande av dragomkastningar), och infogar denna position
som en variant. 
</p>

<p><footer>(Uppdaterat: Scid 3.2, Februari 2002)</footer></p>
}


#######################
### Import window help:

set helpTitle(W,Import) "Importfnstret"
set helpText(W,Import) {<h1>Importfnstet</h1>
<p>
Scids Importfnster mjliggr att enkelt infoga ett
parti i <a PGN>PGN-format</a> till Scid eller till ett annat 
program.
</p>
<p>
I det stora fnsteromrdet skriver du  in eller infogar partitexten i
PGN-format och i det gra omrdet nedanfr finns 
felmeddelanden eller varningar.
</p>

<h3>Bearbeta det aktuella partiet i Importfnstret</h3>
<p>
Importfnstret ger ocks en ytterligare bekvm mjlighet fr
ndringar i det aktuella partiet: du kan i det aktuella partiet i
importfnster infoga (med funktionen <b>Infoga aktuellt parti</b>), 
ndra i texten och drefter klicka p <b>Importera</b> .
</p>

<h3>PGN-markeringar i Importfnstret</h3>
<p>
Scid frvntar sig PGN-markeringar ("header tags") som
<ul>
<li> <b>[Resultat "*"]</b> </li>
</ul>
fre dragen, men du kan ocks infoga ett partifragment som
<ul>
<li> <b>1.e4 e5 2.Bc4 Bc5 3.Qh5?! Nf6?? 4.Qxf7# 1-0</b> </li>
</ul>
utan PGN-markeringar , och Scid importerar det.
</p>

<h3>Anvnda PGN-filer i Scid</h3>
<p>
Nr du vill anvnda en PGN-fil i Scid , utan att i frvg konvertera den med
<a Pgnscid>Pgnscid</a> , finns det tv mjligheter.
</p>
<p>
I det frsta alternativet kan du importera parti-filen med menyalternativet
<menu>Verktyg: Importera PGN-partier ...</menu> .
</p>
<p>
Alternativet tv vore att ppna PGN-filen direkt i Scid . Dessutom
blir PGN-filen bara ppnat fr lsande och behver mer minnesutrymme n
en jmfrbar Scid-databas, denna mjlighet r allts bara att rekommendera
fr relativt sm PGN-filer .
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


########################
### Reports help:

set helpTitle(W,Reports) "Rapporter"
set helpText(W,Reports) {<h1>Rapporter</h1>
<p>
Hos Scid r en <term>Rapport</term> ett dokument, som innehller information om
en bestmd Position och/eller en bestmd spelare . 
Scid kan skapa tv typer av rapporter: 
ppningsrapporter och Spelarrapporter.
</p>

<h3><name Opening>ppningsrapport</name></h3>
<p>
Scid kan skapa en <term>ppningsrapport</term> , som har interessant
information om den aktuella ppningspositionen. Fr att skapa 
ppningsrapporten frvissar du dig frst att den aktuella positionen r den som
du vill ha rapporten fr,
sedan vljer du <b>ppningsrapport</b> i menyn <menu>Verktyg</menu>.
</p>
<p>
<term>ppningsrapport</term>-fnstret ger resulatet av rapporten. 
<b>Data</b>-menyn innehller alternativ,
fr att spara rapporten i Text-, HTML- eller
<a LaTeX>LaTeX</a>-format.
</p>
<p>
De frsta avsnitten i rapporten presenterar information om de
partier, som har rapportpositionen, och de drag som har spelats i denna
stllning. Du kan se om ppningen r populr , om den leder till mnga korta remier 
och med vilka dragfljder (dragomkastningar) den blir uppndd.
</p>
<p>
Avsnittet om positionella teman informerar om vanligheten av
bestmda typiska teman i rapportpartierna. Till detta blir
de frsta 20 dragen (allts de frsta 40 positionerna frn utgngsstllningen)
i varje parti unterskt. Fr att ett parti ska finnas med som har ett bestmt tema
mste detta tema minst frekomma fyra gnger inom de frsta 20 dragen i partiet. 
Drmed undviks att ett kortsiktig frekomst av ett tema (som t ex en isolerad
dambonde, som genast blir slagen) att resultatet blir missvisande.
</p>
<p>
Den sista och lngsta delen av rapporten r teoritabellerna. Nr du
sparar rapporten i en fil kan du vlja om du bara vill ha teoritabellerna, 
en kompakt rapport utan teoritabellerna eller
hela rapporten.
</p>
<p>
Nstan alla avsnitt i rapporten kan stllas in med ppningsrapport-alternativ
eller stngas av eller p.
Du kan allts anpassa rapporten, s att den bara innehller den fr dig intressanta 
informationen.
</p>
<p>
Med den mesta informationen i rapportfnstret, som r frgkodad, 
leder ett klick p vnster musknapp till en aktion. Till exempel kan du
ladda ett parti genom att klicka p det eller stlla in filtret genom att
klicka p ett positionstema s att rapporten bara innehller partier med
detta tema .
</p>

<h4>Favoriter</h4>
<p>
Med  <menu>Favoriter</menu>-menyn i rapportfnstret har du 
mjlighet att frvalta en lista av frdefinierade ppningsrapportpositioner 
och mycket enkelt skapa rapporter fr exakt dessa positioner. 
Nr du vljer "Infoga i rapport..." im Favorit-menyn
blir den aktuella stllningen vald som en srskild rapportposition. 
Du uppmanas d att ange ett namn, som d anvnds nr 
favoritrapporter skapas.
</p>
<p>
Vlj "Skapa rapport..." i Favorit-menyn, fr att skapa en rapport
fr varje vald position i den aktuella databasen . 
I ett dialogfnster kan du d ange typ och format p rapporten 
svl som den katalog, dr rapportfilerna blir sparade. 
Den passande filndelsen fr det valda utdataformatet
blir d automatiskt valt (till exempel ".html" fr HTML-format).
</p>

<h3><name Player>Spelarrapport</name></h3>
<p>
En <term>Spelarrapport</term> liknar mycket en ppningsrapport,
men innehller information om partier fr en enskild spelare med
vit eller med svart. Du kan antingen f en spelarrapport via verktygs-menyn
eller frn <a PInfo>Spelarinformations</a>-fnstret.
</p>
<p>
En Spelarrapport kan skapas antingen fr alla partier/fr en bestmd spelare
/fr en bestmd frg eller bara fr de partier, som
har ftt den aktuella stllningen p huvudfnster-brdet.
</p>

<h3>Inskrnkningar</h3>
<p>
Fr de flesta ppningsdata finns det en inskrnkning till 2000 partier,
nr ppningsposition innehller fler n 2000 partier kan
ngra resultat vara lite oklara.
</p>
<p>
Dessutom finns det en begrnsning till 500 partier fr teori-tabellerna. Nr
ppningspositionen finns i fler n 500 partier , anvnds bara de 500 partier med de 
hgsta genomsnittliga Elo-talen. Antalet partier fr
uppbyggnaden av teoritabellerna r instllningsbart.
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


####################
### PGN window help:

set helpTitle(W,PGN) "PGN-fnster"
set helpText(W,PGN) {<h1>PGN-fnster</h1>
<p>
Scids PGN-fnster ger innehllet i det aktuella partiet i 
Standard-PGN-format. I Partitexten syns kommentarer i
{icke runda} och varianter i (runda) klamrar.
</p>

<h3>PGN-format</h3>
<p>
PGN (Portable Game Notation) r ett utbredd standard fr verfring
av schackpartier mellan datorprogram. En PGN-parti bestr
av tv delar.
Den frsta delen r PGN-markeringarna ("Header"), som innehller inmatningar ("tags") som
till exempel
<b>[White "Kasparov, Gary"]</b>
och
<b>[Resultat "1/2-1/2"]</b> .
</p>
<p>
Den andra delen innehller de egentliga partidragen i
algebraisk standardnotation (SAN) tillsammans med eventuella varianter,
<a NAGs>Kommentarsymboler</a> och <a Comment>Kommentarer</a>.
</p>

<h3>tgrder i PGN-fnster</h3>
<p>
Du kan navigera i partiet med PGN-fnstret: Med
ett klick med vnstra musknappen p ett drag gr du till detta drag, med ett
klick med vnstra musknappen i en Kommentar kan du ndra i denna.
Cursortangenterna (liksom tangenterna <b>v</b> och <b>z</b> fr
att brja respektive avsluta varianter) anvnds fr att navigera i 
partiet precis som i huvudfnstret.
</p>

<h3>Instllningar fr PGN-presentation</h3>
<p>
Menyn PGN-fnster innehller alternativ fr fnstret i PGN presentationen. 
Scid kan visa partiet i frg eller visa det som en ren text
-- se  <menu>Presentations</menu>-menyn i PGN-fnstret.
Den frgade presentationen r ltt att lsa och tillter dig att vlja drag och
kommentarer med musen, men de r mycket lngsammare n enkel text. 
Fr mycket lnga partier br du kanske vlja enkel text.
</p>
<p>
Ocks formatet fr kommentarer och varianten kan du frndra,
fr att ge en bttre versikt eller fr att lta ge ut i separata delar.
</p>
<p>
PGN-presentationsalternativ och storleken p PGN-fnstret blir alltid sparat i
konfigurationsfilen nr du vljer <b>Spara alternativ</b> i <menu>Alternativ</menu>-Menyn.
</p>

<p><footer>(Uppdaterat: Scid 3.1, December 2001)</footer></p>
}


#######################
### Piece Tracker help:

set helpTitle(W,PTracker) "Pjsspraren"
set helpText(W,PTracker) {<h1>Pjsspraren</h1>

<h3>Pjsspraren</h3>

<p>
Pjsspraren r en funktion som sprar rrelserna fr en srskild pjs fr alla partier 
i det aktuella filtret och genererar ett "fotavtryck" fr att visa hur ofta varje pjs 
har varit p en viss ruta. 
</p>

<p>
Fr att anvnda pjsspraren se frst till att filtret innehller de partier du r 
intresserad av, som partier med en viss ppningsposition eller alla partier 
dr en viss spelare hade de vita pjserna. Vlj sedan pjs att spra och 
stll in andra alternativ; som frklaras hr nedan. Efter detta tryck p 
Uppdateraknappen. 
</p>

<p>
Informationen om den sprade pjsens rrelser visas p tv stt: ett grafiskt 
"fotavtryck" och en textlista med en rad med data per ruta. 
</p>

<h3>Vlja pjs att spra</h3>

<p>
Schackpjserna visas i startpositionen nedanfr fotavtrycksdiagrammet. En enkel pjs 
(som den vita b1 springaren eller den svarta d7 bonden) 
kan vljas med den vnstra musknappen och alla pjser av samma typ och frg 
(som alla vita bnder eller bda svarts torn) kan vljas med den hgra musknappen. 
</p>

<h3>Andra pjssprarinstllningar<h3>

<p>
Dragnummeromrdet kontrollerar nr sprningen ska starta och stoppa i varje parti. 
Standardinstllningen p 1-20 (betyder att sprningen ska stoppas efter svarts drag nr 20) 
r lmpligt fr att underska ppningsteman, men (till exempel) ett omrde som 15-35 
r bttre nr man sker efter mittspelstrender. 
</p>

<p>
Det finns tv typer av statistik som pjsspraren kan generera: 
</p>

<p>
% games with move to square: visar vilken proportion av de filtrerade partierna som 
innehller ett drag av den sprade pjsen fr varje ruta. Detta r standardinstllningen 
och vanligtvis det mest passande valet. 
% time in each square: visar proportionen av tid den sprade pjsen har spenderat 
p varje ruta. 
</p>

<h3>Tips</h3>

<p>
Det finns tminstonde tre bra anvndningar av pjsspraren: ppningspreparering, 
mittspelsteman och spelarpreparering. 
</p>

<p>
Fr ppningspreparering anvnd pjsspraren med dragtrdet ppnat. Genom att flja
pjser kan du se trender i den aktuella ppningen som vanliga bondeframsttar, 
springarutposter samt var lparna oftast placeras. Du kan ven finna det 
anvndbart att stta dragantalet till att starta efter det aktuella draget i partiet, 
s att dragen fram till och med den aktuella positionen inte inkluderas i statistiken. 
</p>

<p>
Fr mittspelsteman kan pjsspraren vara anvndbar nr filtret har stllts in att 
innehlla en viss ECO-omfattning (genom en Partihuvudskning) eller kanske ett 
mnster som en vit isolerad dambonde (genom en Material/mnsterskning). 
Stt dragantalet till ngot lmpligt (som 20-40) och spra pjser fr att t ex se 
bondeframsttar i det sena mittspelet eller tidiga slutspelet. 
</p>

<p>
Fr spelarpreparering anvnd en Partihuvudskning eller Spelarinformationsfnstret
fr att hitta alla partier av en viss spelare med en viss frg. Pjsspraren kan d
anvndas fr att t ex upptcka hur sannorlikt det r att spelaren fianchettar lpare, 
gr lng rockad eller stller upp bnderna p d5 eller e5. 
</p>

<p><footer>(Uppdaterat: Scid 3.3, April 2002)</footer></p>
}

#####################
### Player List help:

set helpTitle(W,PList) "Spelarlistan"
set helpText(W,PList) {<h1>Spelarlistan</h1>

<h3>Spelarlistan</h3>

<p>
Spelarlistan visar en lista p spelarnamn i den aktuella databasen. 
Genom att vlja en spelare ppnas spelarinfofnstret fr att visa mer detaljerad
information om den spelaren. 
</p>

<p>
Fem kolumner som syns visar varje spelares namn, Hgsta uppndda ELO, 
antal spelade partier samt ret fr deras ldsta och nyaste parti. 
Klicka p valfri kolumntitel p toppen av listan fr att sortera listan efter den
kolumnen. 
</p>

<p>
Kontrollerna nedanfr listan lter dig filtrera listinnehllet. 
Du kan ndra den maximala liststorleken, skriva in ett VERSAL-/gemenoknsligt spelarnamn 
prefix (som "ada" fr att ska efter "Adams"), 
och begrnsa Elo-omfattningen och antalet spelade partier. 
</p>

<p><footer>(Uppdaterat: Scid 3.4, August 2002)</footer></p>
}

#####################
### Player Info help:

set helpTitle(W,PInfo) "Spelarinfo"
set helpText(W,PInfo) {<h1>Spelarinfo</h1>

<h3>Spelarinfofnstret</h3>

<p>
Spelarinformationsfnstret skapas eller uppdateras nr du klickar med den vnstra 
musknappen p ett spelarnamn i spelinformationsytan (nedanfr schackbrdet) 
eller i korstabellfnstret. 
</p>

<p>
Den visar frhoppningsvis anvndbar information om spelaren, inklusive deras framgng 
med vit och svart, favoritppningar (med ECO-kod), och ratinghistoria. 
</p>

<p>
Alla procenttal som visas r en frvntad pong (mtt p framgng), frn den spelarens 
perspektiv -- s hgre r alltid bttre fr spelaren oavsett om de r vit eller svart. 
</p>

<p>
Du kan se spelarens ratinghistoria i en tabell genom att trycka p  Ratingtabellknappen. 
</p>

<p>
Varje antal skrivet i rtt kan klickas med den vnstra musknappen fr att stlla in filtret fr de
partier den representerar. 
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


###########################
### Repertoire editor help:

set helpTitle(W,Repertoire) "Repetoar-Editor"
set helpText(W,Repertoire) {<h1>Repetoar-Editor</h1>

<h3>Repertoar-Editor</h3>

<p>
Repetoar-editorn lter dig skapa, se och ndra repetoarfiler. 
En repetoarfil (*.sor) r en lista p de ppningspositioner du vill n eller 
frsker undvika, och du kan anvnda den fr att hantera dina 
schackppningspreferenser men den gr ven att anvnda fr att ska i
databaser med Scid. 
</p>

<h3>Repetoargrupper och linjer</h3>

<p>
En repetoar innehller tv typer av element: grupper och linjer. 
Grupper r inte en del av din repetoar; de anvnds bara fr att 
strukturera den p samma stt som kataloger ger struktur till filerna p en hrddisk,CD,DVD
eller diskett. 
</p>

<p>
Linjer i en repetoar finns i tv typer: Inkludera linjer, som representerar de 
ppningspositioner du r intereserad av och frsker uppn medan exkluderalinjer,som r
de du inte r intresserade av att spela och frsker undvika. 
Till exempel, om du spelar en accepterad damgambit (QGA) dvs 1.d4 d5 2.c4 dxc4 som svart
och du spelar alla drag efter 3.e4 utom 3...Sf6, mste du ha 1.d4 d5 2.c4 dxc4 3.e4 som en 
Inkluderalinje och 1.d4 d5 2.c4 dxc4 3.e4 Nf6 som en Exkluderalinje. 
</p>

<h3>Kommentarer och anteckningar</h3>

<p>
Varje grupp eller linje kan ha kommentarer anknytna till sig. 
Det finns tv typer: korta (enrads-) kommentarer som syns med rtt i repetoarhierarkin brevid 
dragen i en grupp eller linje medan lnga (flerradiga-) kommentarer bara visas nr gruppen  
eller linjen vljs. 
</p>

<p>

<h3>Anvnda Repetoar-editorn</h3>

<p>
Den vnstra sidan av fnstret visar repetoarhierarkin. 
Du kan klicka p folderikoner fr att expandera och krympa grupper, 
och klicka p dragen i en  grupp eller linje fr att vlja den och se dess kommentarer. 
Inkludelinjer visas med bl accepteraikoner medan exkluderalinjer visas med rda kors. 
</p>

<p>
Om en linje eller grupp har en kort kommentar, visas den efter dragen. 
Om den har en lng kommentar indikeras detta med ** efter dragen. 
Grupperna har en siffra inom parentes efter sina drag som visar det antal inkludera- och 
excluderalinjer de innehller. 
</p>

<p>
Genom att klicka med hger musknapp p en grupp eller linje ger det en meny med funktioner
fr att ta bort den eller frndra dess status. 
</p>

<h3>Den hgra sidan av fnstret innehller tre delar.</h3>

<p> 
Den frsta delen r en lista p dragen i den aktuellt valda linjen eller gruppen. 
Du kan klicka med vnster musknapp p den fr att klistra in dragen i Importfnstret, 
vilket r anvndbart fr att lta det aktuella partiet starta med en linje i repetoaren. 
Den andra delen innehller en kort kommentar fr linjen eller gruppen, 
och den tredje delen innehller dess lnga kommentar. 
</p>

<h3>Lgga till grupper och linjer till repetoaren</h3>

<p>
Fr att lgga till en linje eller grupp till fnstret mata bara in dragen p schackbrdet i 
huvudfnstret och anvnd sedan <b>[Redigera]</b> menyn i Repetoar-editorn fr att lgga till det 
som en grupp, inkluderalinje eller excluderalinje. 
</p>

<p>
Fr att ta bort en grupp eller linje klicka med hger musknapp p den och vlj det lmpliga 
kommandot frn menyn som visas. 
</p>

<h3>Ska databaser med repetoarfiler</h3>

<p>
Repetoar-editorns <b>[Sk]</b> meny lter dig ska den aktuella databasen med repetoaren. 
Varje parti blir genomskt efter positionerna i repetoaren och blir bara matchade i skningen
om den djupaste repetoarpositionen som hittas r en inkluderalinje. 
</p>

<p>
Du kan vlja att ska genom att anvnda hela repetoaren eller bara de visade linjerna. 
Att ska bara de visade linjerna r anvndbart nr du bara vill anvnda en del av repetoaren. 
Till exempel kan en repetoar ha tv huvudgrupper , 
en fr 1.e4 och en fr 1.d4. Om du r bara interesserad av 1.e4 linjerna, 
krymp bara 1.d4 gruppen och sk sedan bara de visade linjerna. 
</p>

<h3>Extra tips</h3>

<p>
En repetoarfil r bra fr att hitta nya partier i dina ppningssystem. 
Till exempel varje gng du fr en ny PGN-fil att lgga till till din huvuddatabas 
(som den excellenta vecko PGN-filen frn The Week In Chess), 
ppna bara PGN-filen i Scid och gr en repetoarskning. 
Sedan kan du blddra i de filtrerade partierna fr att se alla de spelade partierna som finns i 
din repetoar. 
</p>

<p>
Du kan vilja behlla tv repertoarfiler: en fr svart och en fr vit, 
s att du kan ska med varje fil separat. 
</p>

<p>
En repertoarfil kan ppnas frn kommandoraden, till exempel: 
scid minbas vit.sor 
</p>

<p>
Du kan ndra en repetoarfil (*.sor) i valfri texteditor, men var noga att bevara dess format 
s att den frblir laddbar eller skbar i Scid. 
</p>

<p><footer>(Uppdaterat: Scid 2.6, Augusti 2001)</footer></p>
}


##################################
### Tournament Finder window help:

set helpTitle(W,Tmt) "Sk turneringar"
set helpText(W,Tmt) {<h1>Sk turneringar</h1>

<h3>Sk turneringar</h3>

<p>
Sk turneringar lter dig hitta turneringar i den aktuella databasen. 
Den sker i alla databasepartier och samlar data om de funna turneringarna. 
Observera att tv partier anses vara i samma turnering om de har 
samma Evenemangsmarkering , samma Ortsmarkering och spelades inom tre mnader. 
</p>

<p>
Du kan begrnsa listan p turneringar med antalet spelare och partier, 
datum, genomsnittling Elo rating och land genom att ndra i flten nedanfr turneringslistan 
och sedan trycka p Uppdateraknappen. 
</p>

<p>
Den visade listan kan sorteras efter datum,antal spelare, antal partier, 
genomsnittlig Elo , Ort, Evenemang eller Namn . Vlj kategori 
i <b>[Sorterings]</b> menyn eller klicka p en kolumntitel fr att frndra i sorteringsfltet. 
</p>

<p>
Fr att ladda det frsta partiet i en visad turnering klicka bara med vnster musknapp 
nr dess rad markerats. Detta kommer ocks att uppdatera Korstabellfnstret om det
r ppnat. 
Om du istllet trycker hger musknapp kommer partiet att laddas och korstabellfnstret
blir ppnat ven om det r stngt. 
</p>

<p>
Fr att snabba upp turneringsskningar r det en bra id att vlja en ganska litet omrde 
(som ngra r) eller vlja ett speciellt land (efter dess trebokstavs standardkod). 
Genom detta minskas kraftigt det antal partier Scid mste g igenom fr att bilda 
turneringar av partierna i databasen. 
</p>

<p><footer>(Uppdaterat: Scid 3.3, April 2002)</footer></p>
}


####################
### Tree window help:

set helpTitle(W,Tree) "Trdfnstret"
set helpText(W,Tree) {<h1>Trdfnstret</h1>

<h3>Trdfnstret</h3>

<p>
Trdfnstret visar information om alla drag som gjorts frn den aktuella 
positionen i partier i databasen. I trdmoden uppdateras trdfnstret 
automatiskt nr brdet p huvudfnstret ndras. Detta kan vara lngsamt 
fr stora databaser. 
</p>

<p>
Observera att nr trdfnstret uppdateras nollstlls filtret och bara de partier 
som innehller den aktuella positionen inkluderas. 
</p>

<p>
Genom att trycka p vnster musknapp p ett drag i trdfnstret s adderas detta drag
till partiet. 
</p>

<h3>Trdfnstrets innehll</h3>

<p>
Trdfnstret visar ECO koden (om den finns), frekvens (bde som antal 
partier och en procentsats) och vrderingen av varje drag. 
Vrderingen berknas alltid frn vits perspektiv, 
s 100% betyder att vit vinner alla partier  
medan 0% betyder att svart vinner alla partier. 
</p>

<p>
Dragen i trdfnstret kan sorteras efter drag (alfabetiskt), 
ECO-kod, frekvens, eller vrdering. Du kan ndra sorteringsmetod i 
<b>[Sorterings]</b> menyn. 
</p>

<h3>Bsta partier</h3>

<p>
Trdfnstret har ett filmenykommando och knapp fr att ppna de 
Bsta partierna, vilka visar en lista p de hgst rankade partierna i 
den aktuellt visade trdgrenen. Partierna listas efter genomsnittlig 
rating och du kan begrnsa listan till att visa partier med ett speciellt 
resultat. 
</p>

<h3>Trdgraffnstret</h3>

<p>
Trdfnsterknapparna inkluderar en knapp markerad Graph som ger 
en grafisk visning av det relativa utfallet fr varje drag frn den aktuella 
positionen. Alla drag som har spelat minst 1% och minst 5 gnger visas. 
Procentsiffror r alltid frn vits perspektiv ven nr det r svarts drag. 
</p>

<p>
I trdgrafen plottas en rd linje fr att visa genomsnittet av alla partier 
frn den aktuella positionen och ytan mellan 50-55% (som de flesta 
standardppningar frvntas f) r markerad med bltt fr att assistera 
jmfrandet av drag. Observera att vit vanligtvis vinner cirka 55% av 
schackmstarpartierna. 
</p>

<h3>Lsa trdfnstret</h3>

<p>
Lsknappen i trdfnstret kan anvndas fr att lsa trdet till den 
aktuella databasen. Detta betyder att trdet kommer att fortstta att
anvnda denna databas ven nr du byter till en annan ppnad databas. 
Detta r anvndbart om du viss anvnda en stor databas som en referens 
nr du spelar igenom ett parti i en annan databas: 
bara ppna trdet i referensdatabasen, ls det och vxla sedan till
den andra databasen. 
</p>

<h3>Trning</h3>

<p>
Nr Trningscheckrutan i trdfnstret vljs kommer Scid  
slumpmssigt att gra ett drag varje gng du lgger till ett drag till partiet. 
Draget som Scid vljer beror p databasstatistiken, s ett drag som spelats
i 80% av databaspartierna kommer att vljas av Scid med 80% 
sannorlikhet. Att starta denna funktion och sedan dlja (eller ikonifiera)  
trdfnstret och spela ppningar mot en stor databas r ett bra stt att
testa din kunskap om ppningsrepetoaren. 
</p>

<h3>Anvnda Trdet med ppnade EPD-filer</h3>

<p>
Fr varje ppnad EPD-fil kommer trdfnstret att innehlla en extra kolumn 
som visar en kort (fem tecken) sammanfattning av innehllet i 
EPD-filen fr varje position som ns frn de listade dragen. 
</p>

<p>
Sammanfattningen kan vara en vrdering, en ppnings ECO-kod eller ett freslaget drag; 
det kommer att vara innehllet i det frsta EPD-fltet hittat frn fljande lista: 
ce, eco, nic, pv, pm, bm, id
eller bara det frsta EPD-fltet om ingen av de ovan nmnda finns. 
</p>

<p>
Fr en beskrivning av EPD flten, se EPD-fil hjlpsidan. 
Observera att om sammanfattningen r av ce fltet, 
visas det som en vrdering i bnder frn vits perspektiv
(istllet fr som em vrdering i hundradelsbnder frn perspektivet av sidan vid draget, 
som det sparas i EPD-filen) fr att frbttra lsbarheten. 
</p>

<h3>Cache fr snabbare resultat</h3>

<p>
Scid har en cache fr trdskresultat fr de positioner med de 
mest matchande partierna. Om du gr framt och bakt i ett parti 
i trdmod kommer du att se att trdfnstret uppdateras  nstan omedelbart 
nr positionen som sks finns i cachen. 
</p>

<p>
Trdfnstret har ett filmenykommando kallat Spara Cache. 
Nr du vljer detta kommer det aktuella innehllet i trdcachen att sparas till 
en fil (med filndelsen * .stc) fr att snabba upp framtida anvndning av 
Trdmoden med denna databas. 
</p>

<p>
Fyll cache filkommandot i filmenyn fr trdfnstret fyller cachefilen med data fr 
mnga ppningspositioner. Det gr en trdskning fr omkring 100 av de mest 
vanliga ppningspositionerna och sparar sedan cachefilen. 
</p>

<p>
Observera att en trdcachefil (*.stc) r helt verfldig; 
du kan ta bort den utan att pverka databasen, 
och den tas ven bort av Scid nr en tgrd grs som kan gra den icke uppdaterad 
som till exempel att lgga till eller erstta ett parti eller sortera databasen. 
</p>

<p><footer>(Uppdaterat: Scid 3.0, November 2001)</footer></p>
}


################
### Graphs help:

set helpTitle(W,Graphs) "Graffnster"
set helpText(W,Graphs) {<h1>Graffnster</h1>

<h3>Graffnster</h3>

<p>
Scid har ett antal fnster som visar information grafiskt. 
De frklaras hr nedanfr. 
</p>

<h3>Filtergraffnstret</h3>

<p>
Filtergraffnstret visar trender efter datum eller efter Elo-rating fr 
partierna i det aktuella filtret jmfrt med hela databasen. 
Till exempel r det anvndbart nr trdet r ppnat som ett redskap 
fr att visa hur den aktuella ppningspositionen har frndrats i popularitet 
p senare r eller tiotal r eller om det r speciellt populrt bland hgre-rankade 
spelare som stormstare. Varje pong p grafen representerar antalet partier i 
filtret per 1000 partier i hela databasen, 
fr ett speciellt dator eller ett visst Eloratingomrde. 
</p>

<p>
Nr filtergrafen plottas efter rating anvnder Scid den genomsnittliga 
(aritmetiskt medelvrde) ratingen fr varje parti. Uppskattade ratings 
(som de som finns i stavningsfilen) anvnds inte. Om en spelare i ett 
parti har en rating men motstndaren inte har det, 
antas motstndaren ha samma upp till 2200. 
Till exempel, om en spelare r rankad 2500 och motstndaren inte 
har en rating blir genomsnittsratingen (2500+2200)/2=2350. 
</p>

<h3>Ratinggraffnstret</h3>

<p>
Ratinggraffnstret visar ratinghistorian fr en spelare eller tv 
spelare i det aktuella partiet. Du kan producera grafen fr en spelare 
genom att trycka p Ratinggrafknappen i spelarinformationsfnstret 
eller skapa den fr de tv spelarna i de aktuella partiet genom att vlja Ratinggraf 
frn <b>[Verktygs]</b> menyn. 
</p>

<h3>Vrderingsgraffnstret</h3>

<p>
Vrderingsgraffnstret visar de numeriska vrderingarna (pong) 
sparade i kommentarerna till det aktuella partiet som en graf. 
Du kan klicka med vnster musknapp ngonstans i vrderingsgrafen fr att g till
motsvarande position i partiet. 
</p>

<p>
Tv typer av vrderingskommentarer finns: dessa produceras av Scids analysfnster
(som har formatet 1.e4 {"+0.25 ...."} r alltid vrderade frn vits perspektiv) 
och de som produceras av Craftys analyskommando 
(som har formatet 1.e4 ({9:+0.25} ....) och ocks r vrderade frn vits perspektiv). 
</p>

<h3>Trdgraffnstret</h3>

<p>
Trdgraffnstret finns i trdfnstret. Det visar resultatet av de mest populra
dragen frn den aktuella positionen. 
Mer information finns i avsnittet om trdfnster. 
</p>

<p><footer>(Uppdaterat: Scid 3.3, April 2002)</footer></p>
}


####################
### Tablebases help:

set helpTitle(W,TB) "Slutspelstabeller"
set helpText(W,TB) {<h1>Slutspelstabeller</h1>

<h3>Slutspelsdatabaser</h3>

<p>
En slutspelsdatabas r en fil som innehller den perfekta resultatinformationen om alla positioner 
med ett visst material , som Kung och Torn mot Kung och Bonde. 
Slutspelstabeller fr alla materiella situationer med upp till fem pjser (inklusive Kungar) 
har genererats och ngra enkla 6-pjsslutspelstabeller finns ocks tillgngliga. 
</p>

<p>
Scid kan anvnda slutspelsdatabaser i Nalimov-format som anvnds av mnga nyare schackmotorer. 
Dessa slutar ofta med ndelserna .nbw.emd eller .nbb.emd. Alla 3-, 4- och 5-pjs 
Nalimov-slutspelstabeller kan anvndas i Scid. 
</p>

<h3>Anvnda slutspelstabeller i Scid</h3>

<p>
Fr att anvnda slutspelstabeller i Scid specificera bara deras kataloger
genom att vlja Slutspelstabellkatalog i <b>[Alternativ]</b> menyn. Du kan vlja upp till 
4 kataloger dr dina slutspelstabeller r sparade. Du kan trycka p ... 
knappen till hger om en inmatning fr att vlja en katalog fr att specificera att
katalogen till den ska anvndas. 
</p>

<p>
Nr en position som hittats i slutspelstabellen har ntts visar partiinformationsytan 
nedanfr schackbrdet slutspelstabellinformation. 
Du kan konfigurera mngden information som visas genom att klicka med den hgra
musknappen i den eller vlja Partiinformation frn  <b>[Alternativ]</b> menyn. 
Genom att vlja "Resultat och bsta drag"  ges den mest anvndbara informationen, 
men det r ofta mycket lngsammare n "Bara resultat". 
</p>

<h3>Slutspelstabellfnster</h3>

<p>
Du kan f nnu mer slutspelstabellinformation om den aktuella positionen genom att 
ppna Slutspelstabellfnstet i ([Fnster] menyn, tangentkombination: <b>Ctrl+Shift+=</b>). 
Detta fnster visar resultatet med perfekt spel av alla legala drag frn den 
aktuella positionen. 
</p>

<p>
Fnstret har tv huvudsakliga delar. Sammanfattningsdelen (till vnster) visar 
vilka slutspelstabeller Scid har hittat p din dator och en sammanfattning fr varje 
slutspelstabell. Resultatdelen (till hger) visar optimala resultat fr alla drag frn den
aktuella positionen som visas i huvudfnstret. 
</p>

<h3>Sammanfattningsdelen</h3>

<p>
Den vre delen av sammanfattningsdelen lter dig vlja en speciell slutspelstabell. 
De som du har tillgngliga visas i bltt och de slutspelstabeller som inte finns visas
i grtt. Den nedre delen av sammanfattningsdelen visar sammanfattningsinformation
fr den valda slutspelstabellen. 
(Alla slutspelstabeller har inte en sammanfattning i Scid) 
</p>

<p>
Sammanfattningen inkluderar frekvensen(hur mnga partier per million som nr 
en position med detta material berknat frn en databas med mer n 
600000 msterpartier), en lngsta matt fr en sida samt antalet 
msesidiga (eller "reciprokala") dragtvng. Ett msesidigt dragtvng r en 
position dr vit vid draget fr remi och svart vid draget frlorar eller dr 
vit vid draget frlorar och svart vid draget fr remi eller dr den som r vid draget
frlorar. 
</p>

<p>
Fr ngra slutspelstabeller med msesidiga dragtvng visar sammanfattningen 
ocks en lista p alla dragtvngspositioner eller ett urval av dem. En fullstndig
lista p alla slutspelstabeller r inte mjlig eftersom vissa slutspelstabeller har 
tusentals msesidiga dragtvng. 
</p>

<p>
Du kan stta upp en slumpmssig position frn den valda slutspelsdatabasen
genom att trycka p Slumpknappen. 
</p>

<h3>Resultatdelen</h3>

<p>
Resultatdelen uppdateras nr schackbrdet i huvudfnstret ndras. 
Den frsta linjen visar hur mnga drag vinner (+), ger remi (=), frlorar (-), 
eller har ett oknt resultat (?). Resten av resultatdelen ger en mer detaljerad 
lista p resultat, rangordnande dem frn kortaste till lngsta matt, sedan remier, 
sedan lngsta till kortaste frluster. Alla avstnd r till matt. 
</p>

<h3>Resultatbrdet</h3>

<p>
I en slutspelstabellposition r det ofta anvndbart att se vad 
slutspelstabellresultatet skulle vara om alla pjser i den aktuella
positionen var p sina aktuella rutor men en srskild pjs flyttas ngon 
annanstans. Till exempel kan du vilja bestmma hur nra en kung mste vara
till en fribonde fr att vinna eller f remi i en srskild position. I slutspelsbcker
kallas denna information ofta vinstzonen eller remizonen fr en pjs i en position. 
</p>

<p>
Du kan hitta denna information i Scid genom att trycka p knappen med en
bild p schackbrdet fr att visa resultatbrdet i slutspelstabellfnstret. 
Nr du trycker p vnster musknapp p ngon av pjserna p brdet visas 
en symbol i varje tom ruta visande vad slutspelstabellresultatet blir 
(med samma sida vid draget som i den aktuella positionen p huvudfnstret) 
om den valda pjsen var p den rutan. 
</p>

<p>
Det finns fem olika symboler en ruta kan ha: en vit # betyder att vit vinner; 
ett svart  # betyder att svart vinner; ett bltt = betyder att positionen r remi; 
ett rtt X betyder  att positionen r illegal (eftersom kungarna str brevid 
varandra eller sidan vid draget ger schack); och ett rtt ? betyder att resultatet 
r oknt beroende p att den ndvndiga slutspelstabellen inte finns tillgnglig. 
</p>

<h3>F tillgng till slutspelstabellsfiler</h3>

<p>
Se avsnittet om relaterade lnkar fr hjlp med att hitta slutspelstabeller p Internet. 
</p>

<p><footer>(Uppdaterat: Scid 3.4, September 2002)</footer></p>
}


###################
### Bookmarks help:

set helpTitle(W,Bookmarks) "Bokmrken"
set helpText(W,Bookmarks) {<h1>Bokmrken</h1>
<p>
Scid lter dig bokmrka viktiga partier fr enkel framtida referens. 
Bokmrkesmenyn finns i <b>[Arkiv]</b> menyn och i verktygsraden och har
tangentkombinationen: 
<b>Ctrl+B</b> . 
</p>

<p>
Nr du vljer ett bokmrkt parti frn Bokmrkesmenyn 
kommer Scid att ppna dess databas om det r ndvndigt, hitta partiet, 
och g till den schackposition som var nr den bokmrktes. 
</p>

<p>
Bara partier i en Scidformaterad databas (inte en PGN-fil eller Clipbasen) 
kan bokmrkas. 
</p>

<p>
Om databasen till ett bokmrkt parti sorteras eller kompimeras kan 
bokmrkesdetaljerna bli inaktuella. Nr det hnder kommer Scid att
ska igenom databasen efter det bst matchande partiet 
(jmfr Spelare, Ort, Resultat, r etc) nr bokmrket vljs, 
s att det bokmrkta partiet fortfarande blir laddat. Men om 
detaljerna i det bokmrkta partiet ndras r det mjligt att ett annat 
parti kommer att matcha bokmrkesdetaljerna bttre och laddas istllet. 
S det r en bra id att om-bokmrka ett parti om du ndrar i dess 
Spelare, Ort, Resultat, Runda eller r. 
</p>

<h3>ndra bokmrken</h3>
<p>
Med bokmrkeseditorn kan du ndra menytexten som visas fr varje 
bokmrkt parti och lgga till kataloger fr att kategorisera bokmrken. 
</p>
<h3>Tips</h3>
<p>
Du kan anvnda bokmrken fr snabb tillgng till databaser du ofta 
anvnder genom att bokmrka ett parti frn varje databas. En annan 
god anvndning fr bokmrken r att lgga till viktiga partier du hittar
nr du studerar en viss schackppning. 
</p>

<p>
Bokmrkesmenyn innehller tv alternativ fr att kontrollera visandet av 
bokmrkeskataloger : de kan visas som undermenyer 
(anvndbart nr det finns mnga bokmrken) eller som en enkel lista. 
</p>

<p><footer>(Uppdaterat: Scid 3.0, November 2001)</footer></p>
}


##############################
### Command-line options help:

set helpTitle(W,Cmdline) "Kommandorad-alternativ"
set helpText(W,Cmdline) {<h1>Kommandorad-alternativ</h1>
<h3>Kommandorad-alternativ</h3>
<p>
Nr du startar Scid frn ett grnsnitt eller consol, 
finns det kommandorad-alternativ du kan specificera. 
Scid-format databaser (med eller utan en filndelse som <b>"*.si3"</b>) 
och PGN-filer att ppna kan anges, till exempel: 
<b>scid minbas nyapartier.pgn</b> 
kommer att starta Scid och ppna Scid-databasen <b>mybase</b> och  
PGN-filen <b>nyapartier.pgn</b>. 
</p>

<p>
Det finns ocks optionella argument fr att kontrollera vilka filer Scid 
ska leta efter och anvnda nr det startar.
Du kan stnga av anvndningen av slutspelstabeller med <b>-xtb</b> (eller <b>-xt</b>) alternativet, 
undvika att ladda in ECO ppningsklassificeringsfiler med <b>-xeco</b> eller <b>-xe</b>, 
och undvika att ladda in stavningsfilen med -xspell eller -xs.
Utver detta ger alternativet <b>-fast</b> eller <b>-f</b> alla dessa tre saker , 
s <b>scid -f</b> r samma som <b>scid -xeco -xspell -xtb</b>. 
</p>

(Updaterat: Scid 3.1, November 2001)


}


####################
### Compaction help:

set helpTitle(W,Compact) "Komprimera databas"
set helpText(W,Compact) {<h1>Komprimera databas</h1>
<p>
<h3>Komprimera databas</h3>

<p>
Att komprimera en databas r en speciell typ av underhll 
som hller en databas s liten och effektiv som mjligt. 
Att komprimera en databas betyder att ta bort allt oanvnt
utrymme i dess filer . Det finns tv typer: namnfils- och partifilskomprimering. 
</p>

<h3>Namnfilskomprimering</h3>

<p>
ver tiden kan du finna att databasen brjar att innehlla ett antal spelarnamn, 
evenemangs-, orts- eller rundenamn som inte lngre anvnds i ngot parti. 
Detta hnder ofta efter att du stavningskontrollerar namn. 
De oanvnda namnen slsar utrymme i namnfilen och kan sakta mer namnskningar. 
Namnfilskomprimering tar bort alla namn som inte anvnds i ngot parti. 
</p>

<h3>Partifilskomprimering</h3>

<p>
Nr ett parti erstts eller tas bort lmnas oanvnt utrymme i partifilen
(den strsta av de tre filerna i en Scid databas). 
Partifilskomprimering tar bort allt oanvnt utrymme och lmnar inga borttagna partier
i databasen. Observera att denna operation r slutgiltig:
efter komprimering r de bortagna partierna borta fr evigt! 
</p>

<p>
Partifilskomprimering rekommenderas ocks efter att ha sorterat en databas fr att
hlla ordningen p partifilen konsistent med den sorterade indexfilen. 
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


####################################
### Database maintenance tools help:

set helpTitle(W,Maintenance) "Underhll databas"
set helpText(W,Maintenance) {<h1>Underhll databas</h1>

<h3>Underhll databas</h3>
<p>
Scid har ett antal redskap fr att underhlla databaser, 
tillgngliga frn Scids Arkivmeny. Databaskomprimeringen 
och sorteringsfunktionerna frklaras i separata avsnitt. 
</p>


<h3>Underhllsfnstret</h3>
<p>
Det mesta av Scids databasunderhll kan gras frn underhllsfnstret 
, som kan ppnas frn 
<b>[Arkiv: Underhll]</b> eller <b>[Fnster]</b> menyerna eller med tangentkombinationen:
<b>Ctrl+M</b>. 
</p>

<p>
Du kan anvnda detta fnster fr att underhlla partimarkeringar, 
stavningskontrollera namn, komprimera eller sortera en databas. 
Observera att alla operationer som inte finns tillgngliga fr den aktuella
databasen (till exempel, p grund av att den r skrivskyddad eller en 
PGN-fil) visas med gr frg. 
</p>

<h3>Ta bort dubbla partier</h3>
<p>
I <b>[Arkiv: Underhll]</b> menyn finns ett kommando <b>[Ta bort dubbla partier...]</b> 
fr att detektera extra kopior (dubbletter) av partier i databasen. 
Detta kommando hittar alla dubbletter och fr varje par markeras det kortare 
partiet fr borttagning medan det lngre partiet lmnas kvar. 
Tv partier anses vara dubbletter om spelarna 
(och alla andra markeringar som du kan specificera) matchar exakt.
</p>

<p>
Om du specificerar  "samma drag" alternativet mste varje par av partier ha 
samma drag upp till lngden av det kortare partiet 
(eller upp till drag 60) fr att vara dubbletter. 
</p>

<p>
Nr du har tagit bort dubbletter r det en bra id att kontrollera att 
varje borttaget parti verkligen r en kopia av ett annat parti. Du kan gra detta
enkelt om du valde "Stt filter till alla borttagna partier" alternativet i ta bort
dubbletter dialogrutan. Filtret kommer d att innehlla alla borttagna partier. 
Du kan blddra genom dem  (med <b>p</b> och <b>n</b> tangenterna) med kontrollera 
dubbla partier fnstret  (finns i underhllsmenyn eller med tangentkombinationen <b>Ctrl+Shift+T</b>) 
fr att verifiera att varje borttaget parti r borttaget fr att det faktiskt r en dubblett av ett
annat parti. 
</p>

<h3>ndra spelar, evenemang, ort och rundenamn</h3>

<p>
Du kan finna felstavade namn i din databas och vilja korrigera dem. 
Du kan gra detta i Scid med Namneditorfnstret 
(tangentkombination: <b>Ctrl+Shift+N</b>), som finns i <b>[Arkiv: Underhll]</b>
undermenyn. 
</p>

<p>
Varje unikt namn lagras bara en gng i namnfilen, s om du ndrar ett namn s
ndrar du alla frekomster av det. 
</p>
<h3>Stavningskontrollera namn</h3>
<p>
Scid kommer med en stavningskontrollfil med namnet spelling.ssp, 
fr att korrigera spelar-, evenemang-, orts- och rundenamn. 
Scid kommer att frska ladda stavningskontrollfilen nr det startar; 
om den inte laddas in d kan du ladda in den frn <b>[Alternativ]</b> menyn. 
</p>

<p>
Nr stavningskontrollfilen r laddad kan du anvnda den p en Scid databas med 
stavningskontrollkommandorna i  <b>[Arkiv: Underhll]</b> menyn eller frn 
underhllsfnstret. 
</p>

<p>
Nr du stavningskontrollerar en databas producerar Scid en lista p korrektioner som du 
kan ndra i innan ngra ndringar grs, s att du kan ta bort alla korrektioner du inte
vill gra.
</p>

<p>
Stavningskontroll r speciellt viktigt fr att standardisera en databas s att alla frekomster
av en speciell spelare stavas likadant. Till exampel, med standard stavningskontrollfilen, 
s korrigeras namnen "Kramnik,V.", "Vladimir Kramnik", och "V. Kramnik" till "Kramnik, Vladimir". 
</p>

<p>
Stavningskontrollfilen har en ytterligare anvndning: nr den laddas anvnds dess spelardata
fr att frbttra spelarinformationsfnstret och korttabellfnstret: : du kommer att se FIDE 
mstartitlar som (gm = Internationell Stormstare, im = Internationell Mstare, etc) och 
landsinformation fr spelarna listas i stavningskontrollfilen. 
ver 6500 starka spelare frn historien och nutiden finns listade i <b>spelling.ssp</b> filen som 
kommer med Scid. 
</p>

<h3>Lgga till Elo rating till partier</h3>

<p>
"Lgg till Elo rating..." knappen i underhllsfnstret fr Scid att ska igenom den aktuella 
databasen efter partier dr en spelare inte har en rating, men dr stavningskontrollfilen 
har en Elo rating listad fr denna spelare vid tiden fr partiet. Scid kommer att lgga till all 
sdan rating automatiskt. Detta r mycket anvndbart fr en databas med mstarpartier 
som har f ratings.
</p>

<p>
Stavningskontrollfilen "spelling.ssp" som kommer med Scid innehller inte Elo rating 
informationen som behvs fr denna funktion, men en strre variant av den kallad "ratings.ssp" 
finns p Scids webbsajt. 
</p>

<h3>Rensaren</h3>
<p>
Rensaren (som finns i Underhllsfnstret) r ett redskap fr att gra ett antal 
underhllsarbeten p en databas med en tgrd. Du kan vlja vilka arbeten du vill 
gra och Scid kommer att utfra dem p den aktuella databasen utan att krva
anvndarinteraktion. Detta r speciallt anvndbart fr underhll av stora databaser. 
</p>

<h3>Stlla in att databasen ska ladda in ett parti automatiskt</h3>
<p>
Vid automatiskt laddande av ett parti i en databas s laddas detta parti in nr denna 
databas ppnas. Fr att ndra det automatiska laddandet av partiet i databasen, 
anvnd "Autoladda parti nummer..." knappen. Om du alltid vill att det sista partiet i en 
databas ska ppnas  (oavsett om hur mnga partier som finns i databasen),
s stll in det till ett hgt nummer som 9999999. 
</p>

<p><footer>(Uppdaterat: Scid 3.1, December 2001)</footer></p>
}


##############
### ECO guide:

set helpTitle(W,ECO) "ECO"
set helpText(W,ECO) {<h1>ECO-ppningsklassificering</h1>

<h3>ECO ppningsklassificering</h3>
<p>
Scid kan klassificera schackpartier enligt ECO 
(Encyclopedia of Chess Openings) schackppningsklassificering. 
En standard ECO-kod bestr av en bokstav (A-E) fljt av tv siffror, 
s det finns 500 distinkta standard ECO-coder. 
</p>

<h3>Scids utvidgningar av ECOs ppningsklassificering</h3>

<p>
ECO klassificeringen r vldigt begrnsad och inte tillrcklig fr moderna partier:
ngra av de 500 koderna syns nstan aldrig, medan ngra syns vldigt ofta. 
Fr att frbttra denna situation tillter Scid en optionell utkning av de grundlggande 
ECO-koderna: varje kod kan bli utkad med en bokstav (a-z) som dessutom kan utkas
ytterligare (med en siffra frn 1-4)  men det anvnds inte nnu i standard Scid ECO-filen . 
S en utkad Scid ECO-kod ser ut antingen som "A41e" eller som "E99b2". 
Mnga av de mest vanliga ECO-koderna som finns i moderna mstarpartier har
utkningar definerade i Scids ECO-fil. 
</p>

<h3>ECO Blddrarfnstret</h3>

<p>
ECO Blddrarfnstret visar dig de positioner som anvnds fr att klassificera varje ECO-kod, 
samt frekvensen och resultatet av ECO-koderna i den aktuella databasen. 
</p>

<p>
Den vre delen visar frekvensen fr varje ECO-kod i den aktuella databasen. 
Frgerna i grafen finns i tre sektioner: den lgsta (ljusaste frgen) visar antalet vita vinster, 
den mittersta visar antalet remier, och den hgsta (mrkaste frgen) visar antalet svarta vinster. 
Detta lter dig snabbt se om en ppning r bra eller dlig fr vit eller om remier r mycket vanliga. 
</p>

<p>
Fr att g till en djupare ECO niv klicka med vnster musknapp p en del av grafen
(eller skriv den bokstav eller siffra den motsvarar). Fr att g tillbaka till en hgre niv, 
klicka med hger musknapp i grafen eller tryck p vnsterpilen (eller delete eller bakt). 
</p>

<p>
Den nedre delen visar de positioner som utgr en speciell ECO-kod, 
enligt den ECO-fil som du har ppnat. 
</p>

<h3>ppna Scids ECO-fil</h3>
<p>
ECO-filen som kommer med Scid heter scid.eco och Scid frsker att ppna den nr det 
startar. Om Scid inte kan hitta den behver du gra fljande fr att anvnda 
ECO-klassificeringen: 
</p>

<p>
(a) I Scid anvnd menykommandot <b>[Alternativ: Ladda ECO-fil]</b> och vlj filen <b>scid.eco</b>. 
(b) Spara alternativ (i  <b>[Alternativ]</b> menyn). 
Efter att du har gjort deta kommer ECO-filen att laddas varje gng du startar Scid. 
</p>

<h3>ECO-koderna</h3>
<p>
Den grundlggande strukturen i ECO r:
</p>

A 1.d4 Nf6 2...; 1.d4 ...; 1.c4; 1.diverse
<ul>
<li>A0 1.diverse (A02-A03 1.f4: Birds ppning, A04-A09 1.Nf3: Reti, Kungsindisk attack) </li>
<li>A1 1.c4 ...: Engelsk </li>
<li>A2 1.c4 e5: Kungsengelsk </li> 
<li>A3 1.c4 c5: Engelsk, Symmetriskt </li> 
<li>A4 1.d4 ...: Dambonde </li>
<li>A5 1.d4 Nf6 2.c4 ..: Indiskt frsvar </li> 
<li>A6 1.d4 Nf6 2.c4 c5 3.d5 e6: Modern Benoni </li> 
<li>A7 A6 + 4.Nc3 exd5 5.cxd5 d6 6.e4 g6 7.Nf3 </li>
<li>A8 1.d4 f5: Hollndskt frsvar </li>
<li>A9 1.d4 f5 2.c4 e6: Hollndskt frsvar </li>
</ul>
B 1.e4 c5; 1.e4 c6; 1.e4 d6; 1.e4 diverse 
<ul>
<li>B0 1.e4 ... (B02-B05 1.e4 Nf6: Alekhines frsvar; B07-B09 1.e4 d6: Pirc) </li>
<li>B1 1.e4 c6: Caro-Kann </li>
<li>B2 1.e4 c5: Sicilianskt frsvar </li> 
<li>B3 1.e4 c5 2.Nf3 Nc6: Sicilianskt </li>
<li>B4 1.e4 c5 2.Nf3 e6: Sicilianskt </li>
<li>B5 1.e4 c5 2.Nf3 d6: Sicilianskt </li>
<li>B6 B5 + 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 Nc6 </li>
<li>B7 B5 + 4.Nxd4 Nf6 5.Nc3 g6: Siciliansk Drake </li>
<li>B8 B5 + 4.Nxd4 Nf6 5.Nc3 e6: Siciliansk Scheveningen </li> 
<li>B9 B5 + 4.Nxd4 Nf6 5.Nc3 a6: Siciliansk Najdorf </li>
</ul>
C 1.e4 e5; 1.e4 e6 

<ul>
<li>C0 1.e4 e6: Franskt Frsvar </li>
<li>C1 1.e4 e6 2.d4 d5 3.Nc3: Franskt, Winawer/Klassisk </li> 
<li>C2 1.e4 e5: ppet parti </li>
<li>C3 1.e4 e5 2.f4: Kungsgambit </li>
<li>C4 1.e4 e5 2.Nf3: ppet parti </li>
<li>C5 1.e4 e5 2.Nf3 Nc6 3.Bc4: Italienskt; Tvspringar </li>
<li>C6 1.e4 e5 2.Nf3 Nc6 3.Bb5: Spanskt (Ruy Lopez) </li>
<li>C7 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4: Spanskt </li>
<li>C8 C7 + 4...Nf6 5.O-O: Spanskt, ppet och Stngt (C80-C83 5.O-O Nxe4: Spanskt, ppet system; C84-C89 5.O-O Be7: Spanskt, Stngt system) </li>
<li>C9 C8 + 5...Be7 6.Re1 b5 7.Bb3 d6: Spanskt, Stngt </li>
</ul>
D 1.d4 d5; 1.d4 Nf6 2.c4 g6 med 3...d5 
<ul>
<li>D0 1.d4 d5: Dambonde </li>
<li>D1 1.d4 d5 2.c4 c6: Slaviskt frsvar </li> 
<li>D2 1.d4 d5 2.c4 dxc4: Antagen damgambit </li>
<li>D3 1.d4 d5 2.c4 e6: Avbjd damgambit  </li>
<li>D4 D3 + 3.Nc3 Nf6 4.Nf3 c5/c6: Semi-Tarrasch; Semi-Slav </li>
<li>D5 D3 + 3.Nc3 Nf6 4.Bg5: Avbjd klassisk damgambit</li>
<li>D6 D5 + 4...Be7 5.e3 O-O 6.Nf3 Nbd7: Avbjd  ortodox damgambit </li>
<li>D7 1.d4 Nf6 2.c4 g6 with 3...d5: Grnfeld </li>
<li>D8 1.d4 Nf6 2.c4 g6 3.Nc3 d5: Grnfeld </li>
<li>D9 1.d4 Nf6 2.c4 g6 3.Nc3 d5 4.Nf3: Grnfeld </li>
</ul>
 
E 1.d4 Nf6 2.c4 e6; 1.d4 Nf6 2.c4 g6 

<ul>
<li>E0 1.d4 Nf6 2.c4 e6: Katalanskt, mm </li>
<li>E1 1.d4 Nf6 2.c4 e6 3.Nf3 (b6): Damindiskt, mm </li>
<li>E2 1.d4 Nf6 2.c4 e6 3.Nc3 (Bb4): Nimzo-Indiskt, mm </li>
<li>E3 E2 + 4.Bg5 or 4.Qc2: Nimzo-Indiskt </li>
<li>E4 E2 + 4.e3: Nimzo-Indiskt, Rubinstein </li>
<li>E5 E4 + 4...O-O 5.Nf3: Nimzo-Indiskt, huvudvariant </li> 
<li>E6 1.d4 Nf6 2.c4 g6: Kungindiskt </li>
<li>E7 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4: Kungsindiskt </li>
<li>E8 E7 + 4...d6 5.f3: Kungsindiskt, Smisch </li>
<li>E9 E7 + 4...d6 5.Nf3: Kungsindiskt, huvudvarianter </li>
</ul>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}

####################
### Calvar window help:

set helpTitle(W,CalVar) "Berkning av variationer"
set helpText(W,CalVar) {<h1>Berkning av variationer-fnstret</h1>
  <p>
Denna trningsvning r ocks knd som Stoyko-vningen.
Dess syfte r att analysera en komplex position och utvrdera s mnga sunda variationer som mjligt,
och ge en korrekt vrdering fr varje av dem.
  </p>
<p><h3>Konfiguration</h3></p>
Tre parametrars anges :
<ul>
<li>Den UCI-schackmotor som kommer att analysera olika variationer</li>
<li>Den tid, i sekunder, som schackmotorn kommer att anvnda fr att analysera positionen</li>
<li>Den tid, i sekunder, som schackmotorn kommer att anvnda fr att analysera varje variation som har angivits av anvndaren</li>
</ul>
<p><h3>Ange variationer</h3></p>
Drag anges som vanligt med musklick p brdet men de visas inte. Vid slutet p varje variation behver anvndaren ange en vrdering genom att klicka p en av knapparna med NAG-vrden.
  <p><h3>Vrderingsverifikation</h3></p>
Varje gng en vrdering anges till en variation berknar schackmotorn dess vrde och lgger till variationen och vrderingen precis nedanfr anvndarens.
  <p><h3>Klar med position</h3></p>
Nr anvndaren tror att han har hittat alla de bsta variationerna, kommer tryckandet p <b>Klar med position</b> att lgga till i partiet
(med kommentaren <b>Missad variation</b>), de variationer som har en hgre vrdering n de bsta variationerna som har angetts av anvndaren.

  <p><footer>(Uppdaterat: Scid 3.6.21, December 2007)</footer></p>
}

####################
### EPD files help:

set helpTitle(W,EPD) "EPD"
set helpText(W,EPD) {<h1>EPD-filer</h1>

<h3>EPD filer</h3>
<p>
En EPD (extended position description) fil r en samling av positioner, 
dr varje position har ngon tillhrande text. Det r precis som PGN r det 
en vanlig standard fr schackinformation. 
</p>

<p>
En EPD-fil har ett antal definierade <b>opcodes (flt)</b> som r lagrade 
separade med semikolon <b>(;)</b> i filen men visas p olika rader 
i ett Scid EPD-fnster fr att gra ndringar lttarer. Ett semikolon inom ett 
EPD-flt lagras som <b>"\s"</b> av Scid fr att skilja det frn en markering av slutet av fltet. 
Varje position och dess tillhrande opcodes lagras p en enkel rad i EPD-filen. 
</p>

<p>
Standard <b>EPD-opcodes</b> inkluderar: 
</p>

<p>
<li><b>acd</b> Analysrkning: skdjup.</li> 
<li><b>acn</b> Analysrkning: antal skta noder.</li> 
<li><b>acs</b> Analysrkning: sktid i sekunder.</li> 
<li><b>bm</b> Bsta drag: drag som anses bst av ngon anledning.</li> 
<li><b>ce</b> Hundradelsbondevrdering: vrdering i hundradelar av en bonde fr den sida 
som r vid draget (Observera att detta skiljer sig frn Analysfnstret som visar 
vrderingen i bnder frn vits perspektiv).</li> 
<li><b>cX</b> Kommentar (dr <b>X</b> r en siffra frn 0-9).</li> 
<li><b>eco</b> ECO ppningskod.</li> 
<li><b>id</b> Unik identifikation av denna position.</li> 
<li><b>nic</b> New In Chess (NIC) ppningskod.</li> 
<li><b>pm</b> Frutsptt drag: det frsta draget i den frutspdda variationen (PV).</li> 
<li><b>pv</b> Frutspdd variation: den bsta dragfljden.</li>
</p>

<p>
EPD-filer har ett antal anvndningar: Scid anvnder en EPD-fil fr att klassificera
partier enligt Encyclopedia of Chess Openings (ECO) , 
och du kan skapa en EPD-fil fr din ppningsrepetoar samt 
lgga till kommentarer fr positioner du vanligtvis nr i partier. 
</p>

<p>
Du kan skapa en ny EPD-fil eller ppna en existerande frn  <b>[Ny]</b> och <b>[ppna]</b> 
kommandorna i  <b>[Arkiv]</b> menyn. Som mest kan fyra EPD-filer vara ppnade. 
</p>

<h3>EPD fnster</h3>

<p>
Fr varje ppnad EPD-fil ser du will ett fnster som visar texten fr den aktuella positionen. 
Du behver inte trycka p <b>Spara</b> knappen fr att spara de frndringar du gr med 
en positionstext; texten sparas nr du gr till en annan position i partiet. 
</p>

<h3>Navigera i EPD-filer</h3>

<p>
Fr att blddra genom positionerna i en EPD-fil anvnd <b>[Nsta position]</b> och <b>[Tidigare position]</b> 
kommandorna frn EPD-fnstret i <b>[Verktygs]</b> menyn eller anvnd tangentkombinationerna 
<b>Ctrl+NerPil</b> och <b>Ctrl+UppPil</b>. Dessa kommandon gr till nsta eller fregende position i filen, 
tar bort det aktuella partiet och stller in den nya startpositionen. 
</p>

<h3>Ta bort EPD-flt</h3>

<p>
EPD-filer du finner p Internet kan innehlla flt som inte intresserar dig och de kan 
slsa mycket utrymme i filen. Till exempel, en EPD-fil med datorvrderingar kan ha 
<b>ce</b>, <b>acd</b>, <b>acn</b>, <b>pm</b>, <b>pv</b> och <b>id</b> flt 
men du kanske bara behver <b>ce</b> och <b>pv</b> flten. 
</p>

<p>
Du kan ta bort en EPD-opcode frn alla positioner i EPD-filen genom att anvnda <b>[Ta bort EPD flt]</b> 
frn EPD-fnstret i <b>[Verktygs]</b> menyn. 
</p>

<h3>EPD-fnstrets resultat</h3>

<p>
Alla EPD-fnster visar: 
</p>

<ul>
<li>- filstatus (-- betyder ofrndrad, <b>XX</b> betyder frndrad, och <b>%%</b> betyder skrivskyddad); </li>
<li>- filnamn; </li>
<li>- antal positioner i filen; </li>
<li>- legala drag frn den aktuella positionen fr att n en annan position i denna EPD-fil.</li> 
</ul>
<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


###################
### Exporting help:

set helpTitle(W,Export) "Exportera partier"
set helpText(W,Export) {<h1>Exportera partier</h1>
<p>
Du kan anvnda funktionerna i <menu>Verktygs</menu>-menyn, fr det
aktuella partiet eller fr alla partier i det aktuella filtret fr att exportera dragen
i en textfil.
</p>
<p>
Tre Textdata-format str till frfogande: <a PGN>PGN</a> (portable
game notation), HTML (fr Webbsidor) och LaTeX (ett populrt
Textbearbetningssystem).
</p>
<p>
Vid export kan du vlja att skapa en ny fil 
eller infoga partierna i en existierande partifil.
</p>

<h3>Diagram</h3>
<p>
Nr du exporterar i HTML- eller LaTeX-format , infogar Scid automatiskt
dr ett diagram , dr det finns en diagram-<a NAGs>NAG</a> ("D")
eller ett med tecknet "#" brjande <a Comment>Kommentar</a>
i partiet .
</p>

<h3><name Null>Null-drag vid PGN-Export</name></h3>
<p>
Scid tillter att det sparas <a Annotating Null>Null- (inga drag)
drag</a> , d dessa kan vara hjlpsamma vid kommentarer av varianter. 
Det finns dock inga Null-drag i PGN-Standarden. 
Nr du d exporterar Scid-partier med Null-drag i en PGN-fil
kan andra program oftast inte lsa in partierna.
</p>
<p>
Fr att lsa detta problem stller Scid en annan funktion till frfogande,
<b>Omvandla Null-drag till kommentarer</b>, nr partier blir exporterade i 
PGN-format. Nr du vill skapa en PGN-fil, som kan anvndas av
andra program, anvnder du denna funktion som omvandlar varianter med nolldrag 
till kommentarer.
Nr du nd vill skapa en PGN-fil, som senare kan importeras av Scid med bibehllande av
Null-drag stnger du av denna funktion.
</p>

<h3>HTML-Export</h3>
<p>
Scid kan exportera partier i en HTML-filer. Fr att infoga diagram ,
mste diagrambilderna finnas (i katalogen "<b>bitmaps/</b>" )
i en underkatalog till "<b>bitmaps/</b>" i katalogen under  HTML-filen.
</p>

<h3>LaTeX-Export</h3>
<p>
Scid kan exportera partier i en LaTeX-fil. Partier blir sparade i
tv kolumner per sida och dragen blir sparade i algebraisk
notation med symboler fr pjserna.
</p>
<p>
Fr mer information se hjlpsidan <a LaTeX>Scid och LaTeX</a>.
</p>

<p><footer>(Uppdaterat: Scid 3.4, Juli 2002)</footer></p>
}


####################
### Flags help:

set helpTitle(W,Flags) "Parti-markeringarna"
set helpText(W,Flags) {<h1>Parti-markeringarna</h1>

<p>
En <term>Markering</term> ("Flags") r ett Knnetecken p ngon
schackegenskap, som kan markeras fr varje parti i databasen. 
Det finns 13 av anvndare instllbara
markeringar, som du kan stta direkt i varje parti . Av dessa
har bara ta bort-markeringen en srskild betydelse: partier, som
r markerade med ta bort-markeringen, r markerade fr att tas bort
och tas bort, nr databasen blir
<a Compact>komprimerad</a> .
</p>
<p>
De andra 12 av anvndare instllbara markeringarna och deras
symboler r:
</p>

<ul>
<li>ppningen Vit (W)</li>
<li>ppningen Svart (B)</li>
<li>Mittspelet (M)</li>
<li>Slutspelet (E)</li>
<li>Nyhet (N)</li>
<li>Bondestruktur (P)</li>
<li>Taktik (T)</li>
<li>Spel p damflygeln (Q)</li>
<li>Spel p Kungsflygeln (K)</li>
<li>Utomordentligt (!)</li>
<li>Blunder (?)</li>
<li>Anvndar-definierat (U)</li>
</ul>

<p>
En markering kan sttas fr det aktuella partiet, fr alla partier i
filtret eller fr alla partier i databasen i
<a Maintenance>Underhlls</a>-fnstret.
</p>
<p>
Du kan anvnda  <a Searches Header>Skning efter Partidata</a> ,
fr att finna alla datenbaspartier , som har en bestmd markering 
eller anvnda markeringarna som en del av en komplex skning.
</p>
<p>
D alla av anvndare instllbara markeringar inte har ngon betydelse fr
Scid (med undantag av ta bort-markeringar), kan du anvnda dessa fr
dina egna syften. Till exempel kan anvnda markeringen "Spel p kungsflygeln" (K) 
fr att leta efter bland annat bondestormar mot kungen , pjsangrepp mot kungen 
eller slutspel med alla bnder p kungsflygeln.
</p>

<p><footer>(Uppdaterat: Scid 3.0, November 2001)</footer></p>
}


###############
### LaTeX help:

set helpTitle(W,LaTeX) "Scid och LaTeX"
set helpText(W,LaTeX) {<h1>Scid och LaTeX</h1>
<p>
Scid kan spara partier och ppningsresultat i LaTeX-format i filer. 
LaTeX r en utvidgning av TeX, ett populrt Textbehandlingssystem.
</p>
<p>
Fr att Scid ska kunna skapa LaTeX-filer , mste du
(naturligtvis) ha installerat LaTeX  och schackteckensnitts-paketet "chess12". 
Detta paket r normalt inte en del av
LaTeX-Standardinstallation, dvs om du har LaTeX , har
du kanske inte schackteckensnittet.
</p>
<p>
Information om nedladdning och installation av
LaTeX-schackteckensnittet hittar du p lnken
<url http://scid.sourceforge.net/latex.html>Using LaTeX with Scid</url>
p <url http://scid.sourceforge.net/>Scids Webbsida</url>.
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


###########################
### Options and Fonts help:

set helpTitle(W,Options) "Alternativ"
set helpText(W,Options) {<h1>Alternativ och preferenser</h1>
<p>
Mnga alternativ och preferenser i Scid (som till exempel brdstorleken, frger,
teckensnitt och standardinstllningar) kan man ndra i <menu>Alternativ</menu>-menyn. 
Alla dessa (och fler instllningar, som till exempel den sista katalogen i vilket du har lst in en
databas och storleken p ngra fnster)
blir sparat i en instllningsfil, nr du vljer 
<b>Spara instllningar</b> i Alternativ-menyn.
Varje gng som Scid startar blir denna instllningsfil laddad.
</p>
<p>
Nr du arbetar med Windows , finns instllningsfilen <b>scid.opt</b>
i samma katalog som Scids programfil. Fr anvndare av
Unix-Operativsystem (som Solaris eller Linux) r filen
<b>~/.scid/scidrc</b>.
</p>

<h3><name MyPlayerNames>Faststlla spelarnamn</name></h3>
<p>
Det kan vara s att du vill se brdet i huvudfnstret fr en (eller flera) spelare 
frn dennes eller deras perspektiv nr dennes eller deras partier ppnas. 
Du kan ange en lista med sdana namn med <b>Mina Spelarnamn...
</b> i Menyn <menu>Alternativ/Schachbrde</menu>. 
I Dialogfnstret matar du d in ett spelarnamn per rad. 
Jokertecken som ("<b>?</b>" fr ett oknt tecken och "<b>*</b>"
fr en teckenkedja av noll eller flera tecken) r tilltna.
</p>

<h3><name Fonts>Stlla in teckensnitt</name></h3>
<p>
Scid har tre teckensnitt som anvnds i de flesta fnster
och du kan anpassa alla tre individuellt. De heter
<b>normal</b>, <b>liten</b> och <b>fast</b>.
</p>
<p>
Det fasta teckensnittet borde vara ett teckensnitt med fast bredd
(inte-proportionellt) . Det anvnds av <a Tree>Dragtrdet</a> och 
<a Crosstable>Korstabeller</a> .
</p>

<p><footer>(Uppdaterat: Scid 3.5, Februar 2003)</footer></p>
}


####################
### Pgnscid help:

set helpTitle(W,Pgnscid) "Pgnscid"
set helpText(W,Pgnscid) {<h1>Pgnscid</h1>
<p>
<term>Pgnscid</term> r ett separat program, som du kan
anvnda fr att konvertera PGN-filer ("portable game notation") 
till Scid-Databaser.
</p>
<p>
Fr att konvertera en fil med namnet <i>partier.pgn</i> , skriver du
bara
<ul>
<li> <b>pgnscid partier.pgn</b> </li>
</ul>
och Scid-Databasen (bestende av filerna
<i>partier.si3</i>, <i>partier.sg3</i> och <i>partier.sn3</i>) blir
skapade.
Felmeddelanden eller varningar blir skrivna i filen <i>partier.err</i>
.
</p>
<p>
Nr du vill att databasen ska skapas i en annan katalog eller
med ett annat namn, kan du ange datenbasnamnen
i kommandoraden, till exempel skapar
<ul>
<li> <b>pgnscid partier.pgn databas</b> </li>
</ul>
en databas bestende av filerna <i>databas.si3</i>,
<i>databas.sg3</i> och <i>datenbas.sn3</i>.
</p>
<p>
Observera att pgnscid (och ocks Scid) direkt kan lsa gzip-komprimerade
PGN-filer som till exempel. <b>datenbas.pgn.gz</b>.
</p>

<h3>Alternativ</h3>
<p>
Pgnscid accepterar tv optionella argument fr filnamnen:
<b>-f</b> och <b>-x</b>.
</p>
<p>
Alternativet <b>-f</b> tvingar fram verskrivandet av en existerande
databas; normalt ndrar pgnscid inte i en redan
existerande databas.
</p>
<p>
Alternativet <b>-x</b> gr att pgnscid ignorerar text mellan partierna. 
Normalt blir text mellan partierna sparat som en kommentar fre det
fljande partiet. Detta alternativ gller bara text mellan partier; 
standardkommentarer i partierna blir dessutom konverterade och sparade.
</p>

<h3>Formatera spelarnamn</h3>
<p>
Fr att minska antalet olika stavningar av samma spelare
genomfr pgnscid ngra Grundformateringar
. Till exempel blir antalet mellanrum efter ett
komma satt till ett medan mellanrum i brjan eller slutet av ett namn
blir bortagna.
Hollndska Namn som "van den" och "Van Der" blir dessutom
normaliserade, s att de har ett stort "V" och litet "d".
</p>
<p>
Du kan ven ndra Spelar-, Turnerings-, Orts- och Rundebeteckningar i Scid
(och till och med utfra automatisk skrivkorrektur);
fr detaljerna se hjlpsidan <a Maintenance Editing>Underhll</a>.
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}





#################
### Sorting help:

set helpTitle(W,Sorting) "Sortera databas"
set helpText(W,Sorting) {<h1>Sortera databas</h1>
<p>
<term>Sortera</term>-Funktionerna sorterar alla partier i en
databas. Du kan vlja flera sorteringskriterier .
Nr tv partier r likvrdiga efter ett kriterium, blir
de sorterade efter det andra kriteriet och s vidare.
</p>

<h3>Sorteringskriterier</h3>
<p>
De tillgngliga sorteringskriterierna r:
</p>
<ul>
<li> Datum (ldsta partier frst)
<li> r (som Datum, men bara ret anvnds)
<li> Turnering (Tilldragelse)
<li> Ort
<li> Land (de sista 3 bokstverna i orten)
<li> Runda
<li> Vit
<li> Elo-tal (Genomsnitt av Vit och Svart, hgst frst)
<li> Svart
<li> Resultat (Vit vinner, drefter remier, drefter Svart vinner)
<li> Lngd (Antal hela drag i partiet)
<li> ECO-kod enligt <a ECO>Encyclopedia of Chess Openings</a>)
</ul>

<h3>Sorteringsresultatet</h3>
<p>
Nr du inte sorterar en skrivskyddad Scid-Databas , blir 
sorteringsresultatet skrat genom att lngvarigt ndra i ordningsfljden 
i databaspartierna. Om du bara vill gra en temporr sortering ,
skyddar du frst databasen mot verskrivande med med menyfunktionen
<menu>Fil: Skrivskydd</menu>.
</p>
<p>
Nr du sorterar en databas , som r skrivskyddad eller bestr av
en PGN-fil , kan sorteringsresultatet inte bli skrat , vilket gr att 
den sorterade partiordningsfljden gr frlorad nr filen
stngs.
</p>
<p>
Observera att sorteringen av en databas i
<a Searches filtret>Skfilter</a> ndrar i alla partier.
</p>

<h3>Viktig hjlp fr databas-sortering:</h3>
<p>
Nr en Databas blir sorterad , r indexfilen ndrad, men
partifilen r ofrndrad. Det vill sga, sorteringen av en databas
lmnar partidata-filen i en tillfllig ordningsfljd relativ till 
indexfilen. Detta kan gra <a Tree>Dragtrd</a>-,
Positions- och Material/Mnster-<a Searches>Skningar</a> mrkbart
<b>lngsammare</b>, du br drfr efter att ha sorterat databasen
ndra i partifilen genom att <a Compact>Komprimera</a> ,
fr att f bra skprestanda .
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}





####################
### NAG values help:

set helpTitle(W,NAGs) "NAG-vrden"
set helpText(W,NAGs) {<h1>Standard-NAG-vrden</h1>
<p>
Standard-NAG-vrden (Numeric Annotation Glyph = "numeriska
Anmrkningglyfer"), som definieras i <a Author Related>PGN-Standard</a> ,
r:
</p>
<cyan>
<ul>
<li>  1   Bra drag (!) </li>
<li>  2   Dligt drag (?) </li>
<li>  3   Utomordentligt drag (!!) </li>
<li>  4   Stort misstag / Blunder (??) </li>
<li>  5   Intressant drag (!?) </li>
<li>  6   Tveksamt drag (?!) </li>
<li>  7   Tvingat drag </li>
<li>  8   Det enda draget; det finns inga andra bra drag </li>
<li>  9   Smsta draget </li>
<li> 10   Utjmnad position (=) </li>
<li> 11   Lika chanser, lugn stllning (=) </li>
<li> 12   Lika chanser, aktiv stllning (=) </li>
<li> 13   Oklar stllning (~) </li>
<li> 14   Vit har en liten frdel, str ngot bttre (+=) </li>
<li> 15   Svart har en liten frdel, str ngot bttre (=+) </li>
<li> 16   Vit har frdel, str bttre (+/-) </li>
<li> 17   Svart har frdel, str bttre (-/+) </li>
<li> 18   Vit har en avgrande frdel (+-) </li>
<li> 19   Svart har en avgrande frdel (-+) </li>
<li> 20   Vit har en vervldigande frdel (+-) </li>
<li> 21   Svart har en vervldigande frdel (-+) </li>
<li> 22   Vit r i dragtvng </li>
<li> 23   Svart r i dragtvng </li>
<li> 24   Vit har en liten utrymmesfrdel </li>
<li> 25   Svart har en liten utrymmesfrdel </li>
<li> 26   Vit har en utrymmesfrdel </li>
<li> 27   Svart har en utrymmesfrdel </li>
<li> 28   Vit har en avgrande utrymmesfrdel </li>
<li> 29   Svart har en avgrande utrymmesfrdel </li>
<li> 30   Vit har ett litet Tids-(Utvecklings)frsprng </li>
<li> 31   Svart har ett litet Tids-(Utvecklings)frsprng </li>
<li> 32   Vit har ett Tids-(Utvecklings)frsprng </li>
<li> 33   Svart har ett Tids-(Utvecklings)frsprng </li>
<li> 34   Vit har ett avgrande Tids-(Utvecklings)frsprng </li>
<li> 35   Svart har ett avgrande Tids-(Utvecklings)frsprng </li>
<li> 36   Vit har initiativet </li>
<li> 37   Svart har initiativet </li>
<li> 38   Vit har ett uthlligt initiativ </li>
<li> 39   Svart har ett uthlligt initiativ </li>
<li> 40   Vit har ett angrepp </li>
<li> 41   Svart har ett angrepp </li>
<li> 42   Vit har ingen tillrcklig kompensation fr materialet </li>
<li> 43   Svart har ingen tillrcklig kompensation fr materialet </li>
<li> 44   Vit har tillrcklig kompensation fr materialet </li>
<li> 45   Svart har tillrcklig kompensation fr materialet </li>
<li> 46   Vit har mer n tillrcklig kompensation fr materialet </li>
<li> 47   Svart har mer n tillrcklig kompensation fr materialet </li>
<li> 48   Vit har en ltt vervikt i centrum </li>
<li> 49   Svart har en ltt vervikt i centrum </li>
<li> 50   Vit har en vervikt i centrum </li>
<li> 51   Svart har en vervikt i centrum </li>
<li> 52   Vit har en avgrande vervikt i centrum </li>
<li> 53   Svart har en avgrande vervikt i centrum </li>
<li> 54   Vit har en ltt vervikt p kungsflygeln </li>
<li> 55   Svart har en ltt vervikt p kungsflygeln </li>
<li> 56   Vit har en vervikt p kungsflygeln </li>
<li> 57   Svart har en vervikt p kungsflygeln </li>
<li> 58   Vit har en avgrande vervikt p kungsflygeln </li>
<li> 59   Svart har en avgrande vervikt p kungsflygeln </li>
<li> 60   Vit har en ltt vervikt p damflygeln </li>
<li> 61   Svart har en ltt vervikt p damflygeln </li>
<li> 62   Vit har en vervikt p damflygeln </li>
<li> 63   Svart har en vervikt p damflygeln </li>
<li> 64   Vit har en avgrande vervikt p damflygeln </li>
<li> 65   Svart har en avgrande vervikt p damflygeln </li>
<li> 66   Vit har en svag stllning </li>
<li> 67   Svart har en svag stllning </li>
<li> 68   Vit har en bra skrad stllning </li>
<li> 69   Svart har en bra skrad stllning </li>
<li> 70   Vit har en dligt skrad kung </li>
<li> 71   Svart har en dligt skrad kung </li>
<li> 72   Vit har en bra skrad kung </li>
<li> 73   Svart har en bra skrad kung </li>
<li> 74   Den vita kungen str dligt </li>
<li> 75   Den svarta kungen str dligt </li>
<li> 76   Den vita kungen str bra </li>
<li> 77   Den svarta kungen str bra </li>
<li> 78   Vit har en mycket svag bondestruktur </li>
<li> 79   Svart har en mycket svag bondestruktur </li>
<li> 80   Vit har en svag bondestruktur </li>
<li> 81   Svart har en svag bondestruktur </li>
<li> 82   Vit har en stark bondestruktur </li>
<li> 83   Svart har en stark bondestruktur </li>
<li> 84   Vit har en mycket stark bondestruktur </li>
<li> 85   Svart har en mycket stark bondestruktur </li>
<li> 86   Den vita springaren str dligt </li>
<li> 87   Den svarta springaren str dligt </li>
<li> 88   Den vita springaren str bra </li>
<li> 89   Den svarta springaren str bra </li>
<li> 90   Den vita lparen str dligt </li>
<li> 91   Den svarta lparen str dligt </li>
<li> 92   Den vita lparen str bra </li>
<li> 93   Den svarta lparen str bra </li>
<li> 94   Det vita tornet str dligt </li>
<li> 95   Det svarta tornet str dligt </li>
<li> 96   Det vita tornet str bra </li>
<li> 97   Det svarta tornet str bra </li>
<li> 98   Den vita damen str dligt </li>
<li> 99   Den svarta damen str dligt </li>
<li>100   Den vita damen str bra </li>
<li>101   Den svarta damen str bra </li>
<li>102   De vita pjserna r dligt koordinerade </li>
<li>103   De svarta pjserna r dligt koordinerade </li>
<li>104   De vita pjserna r bra koordinerade </li>
<li>105   De svarta pjserna r bra koordinerade </li>
<li>106   Vit har behandlat ppningen mycket dligt  </li>
<li>107   Svart har nehandlat ppningen mycket dligt </li>
<li>108   Vit har behandlat ppningen dligt </li>
<li>109   Svart har behandlat ppningen dligt </li>
<li>110   Vit har behandlat ppningen bra  </li>
<li>111   Svart har behandlat ppningen bra  </li>
<li>112   Vit har behandlat ppningen mycket bra  </li>
<li>113   Svart har behandlat ppningen mycket bra  </li>
<li>114   Vit har behandlat mittspelet mycket dligt </li>
<li>115   Svart har behandlat mittspelet mycket dligt  </li>
<li>116   Vit har behandlat mittspelet dligt  </li>
<li>117   Svart har behandlat mittspelet dligt </li>
<li>118   Vit har behandlat mittspelet bra  </li>
<li>119   Svart har behandlat mittspelet bra  </li>
<li>120   Vit har behandlat mittspelet mycket bra  </li>
<li>121   Svart har behandlat mittspelet mycket bra  </li>
<li>122   Vit har behandlat slutspelet mycket dligt  </li>
<li>123   Svart har behandlat slutspelet mycket dligt  </li>
<li>124   Vit har behandlat slutspelet dligt  </li>
<li>125   Svart har behandlat slutspelet dligt  </li>
<li>126   Vit har behandlat slutspelet bra  </li>
<li>127   Svart har behandlat slutspelet bra  </li>
<li>128   Vit har behandlat slutspelet mycket bra  </li>
<li>129   Svart har behandlat slutspelet mycket bra  </li>
<li>130   Vit har lite motspel </li>
<li>131   Svart har lite motspel </li>
<li>132   Vit har motspel </li>
<li>133   Svart har motspel </li>
<li>134   Vit har avgrande motspel </li>
<li>135   Svart har avgrande motspel </li>
<li>136   Vit r i ltt tidsnd </li>
<li>137   Svart r i ltt tidsnd </li>
<li>138   Vit r i allvarlig tidsnd </li>
<li>139   Svart r i allvarlig tidsnd </li>
</ul>
</cyan>

<p>
Fler freslagna Nag-vrden fr Schachinformator-symboler r bland annat:
</p>
<cyan>
<ul>
<li>140   Med iden ... </li>
<li>141   Riktat mot ... </li>
<li>142   Bttre r </li>
<li>143   Smre r </li>
<li>144   Likvrdigt r </li>
<li>145   Redaktrens anmrkning ("RR") </li>
<li>146   Nyhet ("N") </li>
<li>147   Svag punkt </li>
<li>148   Slutspelet </li>
<li>149   Linje </li>
<li>150   Diagonal </li>
<li>151   Vit har lparparet </li>
<li>152   Svart har lparparet </li>
<li>153   Olikfrgade lpare </li>
<li>154   Likfrgade lpare </li>
</ul>
</cyan>

<p>
Andra frslag r:
</p>
<cyan>
<ul>
<li>190   Etc. </li>
<li>191   Dubbelbnder </li>
<li>192   Isolerade bnder </li>
<li>193   Frenade bnder </li>
<li>194   Hngande bnder </li>
<li>195   Baktvnd bonde </li>
</ul>
</cyan>

<p>
Av Scid definierade symboler fr internt bruk:
</p>
<cyan>
<ul>
<li>201   Diagram ("D", ibland ocks "#") </li>
</ul>
</cyan>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}


######################
### File formats help:

set helpTitle(W,Formats) "Filformat"
set helpText(W,Formats) {<h1>Scids Filformat</h1>
<p>
Scid-Databaser bestr av tre viktiga filer: en
Indexfil, en Namnfil och en Partidatafil. 
Alla filer har en trebokstavsndelse, 
som brjar med "s": 
<b>".si3"</b> fr Indexfiler,
<b>".sn3"</b> fr Namnfiler och 
<b>".sg3"</b> fr Partidatafiler.
</p>

<h3>Indexfilen (.si3)</h3>
<p>
Denna fil innehller en beskrivning av databasen dr det finns en 
liten notering med fast lngd fr varje parti. Den aktuella storleken 
r 41 bytes per parti. Av dessa r 28 bytes vsentlig information 
som Resultat, Datum, Index fr Spelar-, Turnerings- och
Ortsnamn (de aktuella namnen finns i  namnfilen) .
</p>
<p>
De resterande 13 bytes innehller reduktant, men nyttig
information om partiet, som anvnds fr  Positions-,
Material- och Mnsterskningar. 
Se avsnittet <a Formats Fast>Ska snabbt</a> fr mer
information.
</p>

<h3>Namnfilen (.sn3)</h3>
<p>
Denna fil innehller alla Spelar-, Turnerings-, Orts- och Rundenamn, som
anvnds i databasen. Varje Namn r bara sparat en gng,
ven om det frekommer i mnga partier. Namnfilen r vanligtvis
den minsta av de tre viktiga databasfilerna.
</p>

<h3>Partidatafilen (.sg3)</h3>
<p>
Denna fil innehller de aktuella dragen, varianter och kommentarer fr varje
parti. Dragkodningen r mycket kompakt: de flesta dragen behver bara en 
byte.
</p>
<p>
Nr ett parti blir ersatt, blir dess nya version sparat i <i>slutet</i>
av filen, s att det inte ver tiden ansamlar sig icke anvnt sparutrymme. 
Du kan genom <a Compact>Komprimering</a>
terstlla den minimala storleken p en databas.
</p>

<h3>Andra Scid-Filer</h3>
<p>
En <a EPD>EPD</a>-fil (Filndelse: ".epd") innehller en rad 
schackpositioner, varje med en textkommentar.
EDP-filformatet beskrivs i <a Author Related>PGN-Standard</a>.
</p>
<p>
En E-Mail-fil (Filndelse: <b>".sem"</b>) sparas i en databas
av motstndaren, som ni skickar E-Mail till.
</p>
<p>
En Skalternativfil (Filndelse: <b>".sso"</b>) innehller instllningar fr
en <a Searches Header>Partidata</a>- eller
<a Searches Material>Material/Mnster</a>-skning.
</p>

<h3><name Fast>Ska snabbt i Scid</name></h3>
<p>
Som ovan nmns, innehller Indexfilen ngra reduktanta, men
nyttiga informationer om varje parti, som anvnds av Positions- eller
Materialskning.
</p>
<p>
Till exempel sparas materialet i slutstllningen. Om du
vill ska efter Torn- och Bondeslutspel, blir alla partier, som har en
Dam, en Lpare eller en Springare p brdet i slutstllningen,
snabbt genomskta.
</p>
<p>
En annan nyttig delinformation som sparas r ordningsfljden,
fr Bnderna att lmna sin utgngsstllning (genom drag eller
genom att de blir tagna). Detta blir anvnt fr skningar av bondedrag 
eller exakta skningar, i synnerhet efter ppningspositioner. Till exempel
blir vid skningen av utgngsstllningen fr den franska ppningen
(1.e4 e6) varje Parti, som brjar med 1.e4 c5 eller 1.d4 etc.
genomskt, Partier, som brjar med 1.e4 e5 , mste ven alltid
genomskas.
</p>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}



################
### Contact info

set helpTitle(W,Author) "Kontaktinformation"
set helpText(W,Author) {<h1>Kontaktinformation</h1>
<p>
Scids webbsajt finns p: <br>
<b><url http://scid.sourceforge.net/>http://scid.sourceforge.net/</url></b>
</p>
<p>
Dr kan du hmta den senaste versionen av Scid och de andra filerna till Scid, som du kan ha behov av.
</p>
<p>Den svenska versttningen av Scid har gjorts av Martin Skjldebrand. Synpunkter p versttningen ska <b>inte</b>
skickas till Shane. Dremot fr du grna skicka kommentarer, frgor och frslag till rttningar till versttaren p adressen:<br>
<b>martin@skjoldebrand.org</b>
</p>
<h3><name Related>Lnkar</name></h3>
<p>
Om Ni har gldje av Scid kan de fljande
Internetsidorna vara interessanta:
</p>
<ul>
<li><url http://www.tim-mann.org/chess.html>http://www.tim_mann.org/chess.html</url> --
Hemsida fr Tim Mann's <b>xboard & winboard</b> program: grafiska
grnssnitt fr schackprogram och anslutning till Internet Chess
Server. Den har ocks bra information om Crafty, GNUchess och
andra schackprogram.</li>

<li><url ftp://ftp.cis.uab.edu/pub/hyatt/>ftp://ftp.cis.uab.edu/pub/hyatt/</url> --
Det starka schackprogrammet Crafty.  <b>TB</b> -
underkatalogerna  innehller nstan alla Nalimov-slutspelstabeller, som
anvnds av ngra schackprogram och ven anvnds av Scid.</li>

<li><url http://www.chesscenter.com/twic/twic.html>http://www.chesscenter.com/twic/twic.html</url> --
TWIC (the week in chess), r ett framstende veckomagazin fr
internationella schackpartier, tillgngliga i PGN-format. </li>

<li><url http://scid.sourceforge.net/doc/standard.txt>http://scid.sourceforge.net/doc/standard.txt</url> --
 <b>PGN-Standard</b>, skapad av Steven J. Edwards 1994.
Textfilen frklarar PGN- och EPD-Formaten i detalj.</li>
</ul>

<p><footer>(Uppdaterat: Scid 2.5, Juni 2001)</footer></p>
}

# Book window help
set helpTitle(W,Book) "Bokfnstret"
set helpText(W,Book) {<h1>Bokfnstret</h1>
  <p>
  Bokfnstret visar en lista p alla bokfiler som finns i Scids bokkatalog. Formatet p bckerna r
  det som anvnds av Polyglot och schackmotorer som Fruit och Toga.
  </p>
  <p>
  Fr varje position, visar bokfnstret alla mjliga drag det innehller och deras
  relativa vikter i procent. Nr ett drag grs, uppdateras bokfnstret.
  Om det klickas p ett drag i bokfnstret grs detta drag i den aktuella positionen.
  </p>
  <p>
  Den aktuella boken som anvnds kan snabbt ndras genom att vlja en annan bok i den vre listan.
  </p>
  <p><footer>(Uppdaterat: Scid 3.6.5, Februari 2007)</footer></p>
}

# Tactical game window help
set helpTitle(W,TacticalGame) "Taktiskt parti-fnstret"
set helpText(W,TacticalGame) {<h1>Taktiskt parti-fnstret</h1>
  <p>
  Spela ett taktiskt parti mot en schackmotor som simulerar en motstndare med en angiven ELO-rating.
  Motstndaren spelas av Phalanx och trnaren spelas av Crafty. De rtta schackmotorerna vljs automatiskt
  genom sina namn, och br vara korrekt konfigurerade (detta r standard nr Scid installeras).
  </p>
  <p>
  De fljande parametrarna mste konfigureras :
  <ul>
  <li>svrighet : ELO-rating p motstndare</li>
  <li>specifik ppning : motstndaren spelar en specifik ppning (anvndbart fr ppningstrning)</li>
  <li>spelarens fel kontrolleras av en schackmotor som agerar som en trnare. Tiden som anvnds fr att bedma om ett
  drag r bra eller inte kan begrnsas</li>
  </ul>
  <p>Nr du r klar klicka bara p spela</p> 
  <p><footer>(Uppdaterat: Scid 3.6.5, Mars 2007)</footer></p>
}

# Opening Trainer window help
set helpTitle(W,OpeningTrainer) "ppningstrnare"
set helpText(W,OpeningTrainer) {<h1>ppningstrnare</h1>
  <p>
  En Sciddatabas kan anvndas som en repetoar, dr varje parti representerar en ppningsvariant.
  </p>
  
  <h3>ppningstrnarstatistik</h3>
  <p>
  Fyra tal visas fr att visa statistik fr den aktuella positionen :
  <ul>
  <li>Grn : antalet drag som spelades av anvndaren som r bra drag</li>
  <li>Gul : antalet tveksamma drag som spelades som r repertoaren</li>
  <li>Rd : antalet drag som spelades som inte finns i repertoaren</li>
  <li>Vit : antalet gnger positionen ptrffades</li>
  </ul>
  </p>
  
  <h3>Rapporten</h3>
  <p>
  Rapporten visar statistik fr hela repertoaren och ger information om anvndarens kunskaper :
  <ul>
  <li>Positioner i repertoaren : det totala antalet positioner i repertoaren (alla varianter i databasen)</li>
  <li>Positioner som inte spelats : de positioner som alldrig har ptrffats</li>
  <li>Positioner spelade : de positioner som spelades och summan av antalet gnger de har ptrffats. Notera att
  detta antal representerar antalet frekomster av en position i alla ppningsvarianter : detta antal kan snabbt bli stort
  fr positioner som r nra till startpositionen</li>
  <li>Bra drag : antalet bra drag gjorda av anvndaren</li>
  <li>Tveksamma drag : antalet svaga drag gjorda av anvndaren</li>
  <li>Utanfr repertoaren : antalet drag som anvndaren har gjort som inte finns i repertoaren</li>
  </ul>
  </p> 
  <p><footer>(Uppdaterat: Scid 3.6.11, April 2007)</footer></p>
}

####################
### Correspondence Chess help:
set helpTitle(W,Correspondence) "Korrespondensschack"
set helpText(W,Correspondence) {<h1>Korrespondensschack</h1>

<p>
Scid erbjuder nu tv huvudfunktioner fr korrespondens-
schack.
</p>
<ul>
   <li><b>eMail-schack</b> gr detta genom att skicka det aktuella partiet via eMail
   till din motstndare nr du har gjort ditt drag. Fr detta skapas ett eMail-
   meddelande i ditt fredragna email-program med det aktuella partiet
   bifogat till det i PGN-format. Givetvis tas alla kommentarer och
   variationer bort frst.
   </li>
   <li><b>Korrespondensschackservrar</b> stds med hjlp av
   Xfcc-protokollet. Hr anvnds externa verktyg fr att hmta partierna frn
   ditt/dina konto/konton och levererar dem till Scid fr synkronisering. Efter
   du har gjort ditt drag skickas detta till din motstndare genom
   Xfcc. Hmtnings- och sndningsverktygen r implementerade som externa verktyg fr
   enkel utkning om andra protokoll kommer.
   </li>
</ul>

<p>
Fr att anvnda korrespondensschackfuntioner mste en databas av typ
"Korrespondensschack" ppnas innan ngra
korrespondensschackfunktioner anvnds. OM du inte har en sdan databas
n, skapa bara en ny databas och ange dess typ till "Korrespondensschack"
med funktionen <a Maintenance>Underhll</a>.
Det r viktigt att ange typen s att Scid kommer att knna igen databasen fr
synkronisering genom denna typ. D denna databas r tom efter
skapandet kommer Scid att behandla alla korrespondensschackpartier det fr vid
den frsta synkroniseringen som nya partier och lgga till dem till denna databas.
</p>

<p>
Om ingen databas av typ "Korrespondensschack" r nu ppnad
kommer Scid att pminna dig om att gra s. Men, ppna inte mer n en
databas av denna typ d Scid inte d kan avgra vilken som ska anvndas.
</p>

<h3>Grundfunktionalitet</h3>

<p>
Om allting r korrekt konfigurerat kan anvndningen av korrespondens-
schackfunktionerna ltt ns med fljande knappar:
<ul>
   <li><button tb_CC_Retrieve> Hmtar korrespondensschackpartier.
   Fr detta startas ett externt hmtningsverktyg och alla partier hmtas
   s likvl som andra partier som lagras i Scids Inkorg
   (se nedan) r synkroniserade till den aktuella korrespondensschack-
   databasen.
   </li>
   <li><button tb_CC_Send> Skickar ditt drag till motstndaren genom att antingen
   skapa ett nytt eMail-meddelande i dett fredragna email-program eller genom att
   skicka ett drag till en schackserver om Xfcc anvnds.
   </li>
</ul>
</p>

<h3>Konfiguration</h3>

<p>
Korrespondensschack inom Scid r baserat p en normal Scid-
databas som har partierna och ngra externa verktyg till Scid som
hanterar de "icke-schack-delarna". Dessa verktyg och deras parametrar mste stllas
in en gng, och lagras sedan fr framtida anvndning.
</p>

<p>
Fr att n konfigurationsdialogen vlj <menu>Spela</menu>
<menu>Korrespondensschack</menu><menu>Konfigurera</menu> frn
menyn. Detaljerna beskrivs i <a CCSetupDialog>Korrespondensschack-
instllningar</a>. Nr denna dialog avslutas med <b>[Ok]</b> knappen kommer
dina instllningar automatiskt att lagras.
</p>

<h3>Hmta partierna</h3>
<p>
Beroende p om du spelar korrespondensschack via eMail eller via en
schackserver skiljer sig den aktuella hmtningsprocessen lite. Generellt
resulterar den i ett antal partier i PGN-format placerade i Scids Inkorgs-
katalog. Detta erbjuder ocks mjligheten till automatisk hmtning via
extern programvara.
</p>
<p>
Nr partierna finns i Scids Inkorg kommer <menu>Behandla Inkorg</menu>
frn menyn att bearbeta Inkorgen och lgga till nya drag till
de partier som redan finns i databasen. Dessutom kommer den att lgga till de partier
som inte hittas i den aktuella korrespondensschackdatabasen som nya partier.
</p>

<p><a CCeMailChess>Korrespondensschack via eMail</a> beskriver
detaljerna fr anvndning av eMail, medan <a CCXfcc>Korrespondens-
schack via schackserverar</a> beskriver motsvarande fr korrespondens-
schackservrar.
</p>

<h3>Stega igenom partier</h3>
<p>
Efter att partierna r hmtade laddas de i Scids klippboardsdatabas
och nya drag lggs till och lagras i den ppnade korrespondensschack-
databasen. Skillnades i
funktionen frn menyn <menu>Partier</menu> r, att dessa tv
knappar scrollar bara mellan partierna i Scids Inkorg som r
tnkt att vara dina aktuella pgende partier. Givetvis kan
Korrespondensschackdatabasen innehlla mnga fler partier, men
normalt vill du inte g igenom  dessa fr att se vad din
motstndare har gjort fr drag i ett aktuellt parti.
</p>
<p>
Notera att en taggskning krvs med ngra flt som
inte r indexerade av Scid. Drfr r det , inte att rekommendera
att lagra partier i en stor referensdatabas d
sktiderna kan bli ganska lnga. Om du spelar mycket och din egen
databas blir ganska stor, kan sktiden reduceras genom att flytta
avslutade partier till en arkivdatabas, eller genom att bara skapa en ny
databas fr de pgende partierna. Scid kommer att behandla alla partier som inte finns
redan i korrespondensschackdatabasen som nya partier och lgga till dem
automatiskt. Drfr, r det tillrckligt att ppna en tom databas av
typ "Korrespondensschack" och anvnda <menu>Behandla Inkorg</menu> fr att
importera alla nu pgende partier.
</p>
<p>
Motsvarande till de tv nmnda knapparna r <menu>Tidigare
Parti</menu> och <menu>Nsta Parti</menu> frn <menu>Korrepondens-
schack</menu> menyn.
</p>
<p>
Notera att om du anger dina spelarnamn korrekt (i menyn
<menu>Mina Spelarnamn</menu>) kommer Scid att rotera brdet fr dig att
alltid spela uppt. Du kan ha flera spelarnamn. Se ocks <a
Options MyPlayerNames>Mina Spelarnamn</a> fr detaljer.
</p>

<h3>Analysera och gr ett drag</h3>
<p>
Alla analysfunktioner kan anvndas fr korrespondensschackpartier.
Variationer, kommentarer etc. kan lggas till precis som i en normal partianalys.
Nr det r klart, kommer Scid att ta den senaste halvdraget som lades till
partiet och behandla det som det aktuella draget att skicka. Ingen kontroll grs
hr av om bara ett halvdrag lades till eller vilken sida som r vid draget,
drfr, mste bara ett halvdrag i huvudvarianten lggas till!  Om en
schackserver anvnds skickar Scid ocks den senaste kommentaren som lades till
servern vilket kan vara anvndbart fr kommunikationen med motstndaren. I
eMail-schack kan detta gras med det normala email-meddelandet, s dr tas alla
kommmentarer bort.
</p>
<p>
Genom att trycka p Sndknappen <button tb_CC_Send> kommer Scid att msta
bestmma den typ av korrespondensschackparti som visas (eMail eller
ett serverparti) och starta antingen ditt eMail-program eller det externa skicka-
verktyget fr att skicka ditt drag. Att anvnda <menu>Skicka drag</menu> r motsvarande
till denna knapp. Alternativt, kan <menu>eMail drag</menu> anvndas fr att
skicka det aktuella draget via eMail. Om det r ett eMail-parti r denna
funktion motsvarande till <menu>Skicka drag</menu>. Om det r ett server-
baserat parti genereras ett eMail-meddelande. Notera dock, att detta kommer
inte ndvndigtvis att innehlla en riktig mottagare d eMail-addresser inte byts ut
i serverbaserad korrespondensschack.
</p>

<p><footer>(Uppdaterat: Scid 3.6.23, Februari 2008)</footer></p>
}


set helpTitle(W,CCXfcc) "Korrespondensschackservrar"
set helpText(W,CCXfcc) {<h1>Korrespondensschackservrar</h1>

<p>
Det finns flera korrespondensschackserverar p
Internet. Generellt, r de anvnda med en webblsare, s ingen
specifik programvara krvs. Men mnga av dem erbjuder ocks ett
grnssnitt till specialiserad schackprogramvara via ett protokoll kallat Xfcc.
Integrationen av Xfcc grs i Scid via externa hjlpverktyg angivna
i <a CCSetupDialog>Konfiguration</a>-dialogen fr korrespondens-
schack.
</p>

<h3>Starta ett nytt parti</h3>
<p>
Xfcc tillter inte sjlv att ett nytt parti startas. Att ska efter en
motstndare och starta ett parti r istllet hanterat av schackservern
p dess hemsida. Nr partiet r startat kan dock, Scid anvndas fr att hmta
motstndarens drag, lgga till dem till den interna databasen,
analysera osv. Alla funktioner i Scid r till anvndarnas frfogande
men speciella moder av spel kanske inte tillter dem (t.ex.  normala partier
tillter vanligtvis inte anvndande av schackmotorer fr analys).
</p>

<h3>Hmta partier</h3>
<p>
ppna en databas som inehller korrespondensschackpartier. Denna databas
mste vara av typ "Korrespondensschack". 
</p>

Notera: 
<ul>
   <li>Om Scid inte hittar en korrespondensschackdatabas kommer den att
   informera dig att ppna en.
   </li>
   <li>Om databasen inte har partierna som r hmtade frn
   servern behandlas de som nya partier och lggs till databasen
   automatiskt.
   </li>
   <li>Scid kommer att anvnda den frsta databasen av typ "Korrespondensschack"
   som r ppnad. Av denna anledning br bara en sdan databas i taget
   vara ppnad.
   </li>
</ul>
<p>
Xfcc hmtar alltid omedelbart alla partier som finns p en specificerad server fr ditt
anvndarnamn. Fr att hmta partierna klicka bara p <button tb_CC_Retrieve>
ikonen eller vlj <menu>Hmta Partier</menu> frn
<menu>Korrespondensschack</menu>-menyn. D en serveranslutning
krvs fr att hmta nya partier var sker p att systemet har tillgng till ntverket.
Scid kommer att starta hmtningsverktyget som r konfigurerat i 
<a CCSetupDialog>Konfiguration</a>-dialogen vilket kommer att placera
partierna i PGN-format i Scids inkorg. Det kan ta lite tid att hmta
svaret, s vat tlmodig. Efter att partierna r hmtade uppdateras
korrespondensschackdatabasen med dem.
</p>
<p>
Nr partierna r hmtade sks deras motstndare i
korrespondensschackdatabasen och nya drag lggs till dr. D Xfcc
servrar kan erbjuda olika stt att infoga drag (via Internet eller mobil eller
andra program...) kan det vara s att Scid mste lgga till hlften av
partiet till databasen. Detta innebr inget problem. Scid kommer att lgga till alla drag
som fanns i partiet frn servern. Scid kommer dock inte att erstta
partiet frn brjan d etta kan ta bort all din analys.
Drfr r det <b>viktigt att notera</b> att du inte fr infoga drag till
huvudvarianten bortom ditt sista drag! Fr att lgga till fortsttningar var god
och anvnd variationer!
</p>
<p>
Notera att om andra kllor har placerat partier i din inkorg (t.ex. frn
din eMail-korrespondensschack) synkroniseras de ocks i
hmtningen till databasen d hela Inkorgen ocks bearbetas.
Detta tillter att eMail-partier lggs till i Inkorgen, sedan kan du vxla till Scid,
klicka p <button tb_CC_Retrieve> och alla partier r uppdaterade.Partier som inte
nnu finns i datasen behandlas som nya partier och lggs till
databasen.
</p>
<p>
<b>Notering fr programmerare</b>: hmtningsverktyget startas med Inkorgsskvgen som
parameter. Det r tnkt atrt fungera genom alla serverkonton och placera
korrekt formatterade PGN-filer i den skvg som anges till den. Dessa filer
br innehlla ytteliggare flt som r knda av cmail-verktyget.
 (Se <a CCeMailChess>Korrespondensschack via eMail</a> fr
information om de krvda flten.)
</p>

<p><footer>(Uppdaterat: Scid 3.6.23, Februari 2008)</footer></p>
}

#############
# eMail Chess:
set helpTitle(W,CCeMailChess) "Korrespondensschack via eMail"
set helpText(W,CCeMailChess) {<h1>Korrespondensschack via eMail</h1>

<p>
eMail erbjuder ett vldigt bekvmt stt att spela korrespondensschack.
Standardapplikationen fr detta i Un*x-vrden r till idag xboard
tillsammans med dess cmail-hjlpare. D den tillter nstan automatisk
hantering av korrespondensschack-eMail och drutver inte lgger till ngonting
som inte r PGN r det ocks modellen fr Scid att hantera
eMail-schack. Genom att bara bevara hela PGN-huvudet kan sdana partier
spelas med en motstndare som har ett verktyg fr att hantera PGN.
</p>

<h3>eMail-schack</h3>
<p>
Scid kan hantera eMail-korrespondensschackpartier nstan automatiskt.
Det stt p hur detta grs hlls kompatibelt med cmail-verktyget som
kommer med xboard p Un*x system. (Att ha sagt detta antyder att du
kan spela mot en motstndare med cmail/xboard.) Det fungerar genom att skicka
partierna som hela PGN-filer till och frn som email-bilagor, medan
huvudet innehller vissa huvudflt som lter dem knnas igen och
sorteras tillsammans. Av denna anledning mste anvndaren vara noggrann med
att ndra i huvudflten.  Notera att flten med explicita vrden mste
anges till exakt detta vrde fr eMail-schack. Att starta ett parti med
Scid gr det automatiskt, men du <b>fr inte</b> skriva ver
eller ta bort dem!
</p>
<p>
Ndvndiga huvudflt r:
</p>
<ul>
   <li><term>Event</term>: mste vara "Email correspondence game"
   </li>
   <li><term>Site</term>: mste vara "NET"
   </li>
   <li><term>Mode</term>: mste vara "EM"
   </li>
   <li><term>WhiteNA</term>: innehller eMail-addressen fr den vita spelaren. Notera
   att adressen bara lagras dr i formen
   <term>user@host.org</term>.
   </li>
   <li><term>BlackNA</term>: innehller eMail-addressen fr den svarta spelaren
   liknande WhiteNA.
   </li>
   <li><term>CmailGameName</term>: Innehller en <b>unik</b> identifierare fr
   partiet. Detta anvnds fr att sortera partierna.
   <p>
   Medan Scid kan anvnda ngot databasindex r detta inte mjligt fr
   icke-DB-baserade verktyg som cmail. Av denna anledning r
   <term>CmailGameName</term> parametern anvndarinmatad. Den mste vara
   unik! Det enklaste r ngonting avformen
   <term>xx-yy-yyyymmdd</term> dr xx r en beteckning p den vita
   spelaren, yy en beteckning fr den svarta spelaren, och yyyymmdd r det aktuella datumet.
   </p>
   <p>Fr Xfcc-baserade partier mste detta flt anges till en unik
   identifierare men dr kan servernamnet och det unika partinumret p
   denna server anvndas, dvs denna identifierare r av formen
   <term>MyXfccServer-12345</term>.
   </p>
   </li>
</ul>

<h3>Starta ett nytt parti</h3>
<p>
Detta pppnar en dialog fr inmatning av ditt eget och motstndarens namn som
de br vara i huvudet likvl som eMail-addresserna fr
bda spelarna. Bessutom mste ett <b>unikt</b> game ID infogas.
Det enklaste sttet fr detta Game ID r ngonting av formen
<term>xx-yy-yyyymmdd</term> dr xx r en frkortning fr den vita
spelaren, yy fr den svarta spelaren, och yyyymmdd r det aktuella datumet.
Denna Game id r en text och det r viktigt fr att identifiera partierna unikt.
Anvndare av cmail kommer ocks att knna denna Game ID som <i>partinamn</i>. Det fr
brar innehlla bokstveroch sifror, minustecknet och understrykning.
Var god och undvik andra tecken.
</p>
<p>
Efter att dialogen r avslutad genom att trycka p <b>[Ok]</b> knappen lggs ett
nytt parti till den aktuella ppnade korrespondensschackdatabasen
och PGN-huvudet fylls i ordentligt. Gr bara ditt drag och skicka det som
det beskrivs nedan.
</p>

<h3>Hmta partier</h3>

<p>
Scid hanterar inte din emailkorg automatiskt. Detta skulle,
med tanke p den stora variationen p mjliga email-program idag, involvera
en stor mngd programkod. Av denna anledning anvnder Scid ditt normala
eMail-program som r mycket mer lmpligt fr detta syfte n Scid
kan ngonsin bli. Fr att hmta ett parti till Scid spara bara den bifogade PGN-filen
i Scids inkorg och bearbeta inkorgen genom antingen <menu>Hmta
Partier</menu> eller  <button tb_CC_Retrieve> knappen eller
<menu>Bearbeta Inkorgen</menu>. Skillnaden mellan de tv r att
den frsta ocks startar det externa hmtningsverktyget och fyller
Inkorgen ytterliggare med partier frn andra kllor (som Xfcc). Drfr r
<button tb_CC_Retrieve> det mest bekvma sttet om du anvnder bda
typerna av korrespondensschackpartier.
</p>
<p>
<b>Notera</b> att <menu>Hmta Partier</menu> menyn eller  <button
tb_CC_Retrieve> knappen <b>inte</b> hmtar dina eMail-meddelanden! Du
mste spara dina PGN-filer i Scids Inkorg fr hand. Troligtvis kan detta
bli automatiserat av ditt eMail-program (p Un*x system r det enkelt att stta upp en
mime-hanterare genom <term>.mailcap</term>).
</p>

<h3>Skicka svaret</h3>

<p>
Efter att du har gjort ditt drag skicka det antingen med <menu>eMail drag</menu>
funktionen frn menyn via <menu>Skicka drag</menu> vilket r motsvarande till
<button tb_CC_Send>. Fr det senare  mste Scid knna igen partiet
som eMail-korrespondens och skicka det med email medan den fregende metoden
kommer att f Scid att generera ett eMail-meddelande.
</p>
<p>
Givetvis tar Scid bort alla kommentarer och variationer
innan det bifogas i det utgende eMailet d du inte vill skicka med
din analys.
</p>
<p>
Om ett GUI-emailprogram anvnds, ppnas dess vanliga skapafnster.
Addressen p din motstndare fylls i likvl som ett generiskt mne
som innehller game id fr enkel filtrering och bcc-addresses om den
r specificerad i <a CCSetupDialog>Konfigurations</a>-dialogen. Email-
texten r angiven till att innehlla FEN p den sista positionen och listan p
de tidigare gjorda dragen. P detta stt kan motstndaren snabbt se ditt
drag. SlutligenFinally, bifogar Scid det aktuelkla partiet inklusive ditt drag i
PGN-format till email-meddelandet.
</p>
<p>
Nr ett mailx kompatibelt verktyg anvnds ppnas inget fnster och emailet skickas
osynligt geonom att starta verktyget specificerat i bakgrunden. I
detta fall innehller det genererade emailet PGN ven i email-texten.
</p>
<p>
Notera att d eMail-schack fungerar genom att skicka hela PGN-filen fr du inte
lgga till mer n ditt drag. Scid kontrolerar inte hr om
mer n ett drag lades till huvudvarianten, d Scid helt enkelt inte
vet vilket drag det r, d du skickar ditt drag.
</p>
<p><footer>(Uppdaterat: Scid 3.6.23, Februari 2008)</footer></p>
}

#############
# Correspondence Chess setup dialog help:
set helpTitle(W,CCSetupDialog) "Korrespondensschackinstllningar"
set helpText(W,CCSetupDialog) {<h1>Korrespondensschackinstllningar</h1>

<p>
Indata i konfigurationsdialogen finns frdefinierat till vissa standard-
parametrar men dessa mste inte ndvndigtvis matcha ditt system, s
anpassning kommer skert att vara ndvndigt. Alla parametrar lagras i
konfigurationsfilen automatiskt nr dialogen r stngd via
<b>[Ok]</b> knappen. Parametrarna gller d omedelbart.
</p>

<p>
<b>Standarddatabas</b>:
Detta definierar standarddatabasen fr
korrespondensschackpartier. Den kan enkelt ns via
<menu>ppna Databas</menu> i  <menu>Korrespondensschack</menu>
menyn. Frdelen med denna metod r, att databasen inte
visas i <i>senaste databaser</i> listor och att du kan ha en
specifik fil fr detta. Denna databas <b>mste vara</b> av typ
"Korrespondensschack". Att ppna en databas av denna typ p ett annat
stt r ocks ok, s troligtvis vill du ignorera denna instllning
(t.ex. om du startar Scid med din korrespondensschackdatabas vid
uppstart.)
</p>

<p>
<b>Inkorg (skvg)</b>:
I denna katalog sker Scid efter korrespondensschackpartier sparade
i PGN-format. Dessa partier anvnds fr synkroniseringen av
korrespondensschackdatabasen. Generellt, bryr sig inte Scid om hur
partierna kommer till denna katalog. Scid kommer bara att arbeta sig igenom alla PGN-filer
som finns dr. Detta ger mjlighet att anvnda ngra externa verktyg
fr att hmta partier till denna plats. Drutver, i eMail-schack br man
bara spara PGN-filerna frn motstndaren i denna
katalog.
</p>
<p>
Scid kommer inte att lsa en mailkorg, utan hanterar bara
alla PGN-filer som r placerade i denna katalog. Notera ocks, att Scid kommer att
synkronisera partie med den aktuella databasen. Men, om ett parti
frn denna katalog inte nnu finns i databasen kommer det att
behandlas som ett nytt parti och lggas till databasen.
</p>
<p>
Fr att synkroniseringsprocessen ska fungera mste PGN-filerna innehlla
ngon ytterliggare huvudinformation som r i perfekt enlighet med
PGN-standarden. Var god och konsulera <a
CCeMailChess>)Korrespondensschack via eMail</a> om du vill skapa
ditt eget verktyg eller om du flyttar data frn ngot annat system.
</p>

<p>
<b>Utkorg (skvg)</b>:
Motsatsen till <i>Inkorgen</i>. Scid placerar hr PGN-filer fr de
utgnde partierna. Fr eMail-schack r detta ndvndigt d PGN-filerna mste
bifogas till ett eMail-meddelande.  Fr Xfcc, dr bara draget skickas
, r detta inte ndvndigt, men Utkorgskatalogen erbjuder
ett bekvmt stt att koppla upp din PDA eller ngon annan anvndning d
PGN-filerna i Utkorgen ocks kommer att innehlla ditt senaste drag.
</p>

<p>
<b>Hmtningsverktyg</b>:
Detta program startas fr att hmta korrespondensschack-
partier frn en korrespondensschackserver. Denna hjlpare mste bara
hmta partier frn den klla den tycker om, generera en korrekt PGN-
fil med de ndvndiga PGN-taggarna. Verktyg fr att hmta partier
frn Xfcc-servrar finns som externa program och dessa r de naturliga
verktygen att stlla in hr. Fr framtida protokoll kan man enkelt generera
ett externt hmtningsverktyg som hanterar detta protokoll. ven automatisering
r mjlig om denna funktionalitet r gjord externt.
</p>
<p>
Notera: Detta verktug r <b>inte</b> startat fr hmtning av eMailschack-
meddelanden!
</p>

<p>
<b>Skickaverktyg</b>: 
Detta r motsatsen till hmtningsverktygen, primrt ven avsett fr Xfcc
support eller ngon annat framtida protokoll som kan dyka upp. Skickaverktyget,
dock, startas frn Scid med flera parametrar som ser ut som:
<term>
SendTool Outbox Name GameID MoveCount Move "Comment" resign claimDraw offerDraw acceptDraw
</term>
</p>

<p>
Betydelsen av parametrarna r som fljer:
   <ul>
      <li><term>Outbox</term>: Utkorgsskvgen anges i denna dialog. Skicka-
      verktyget ska generera en korrekt formatterad PGN-fil
      dr.
      </li>
      <li><term>Name</term>: Namnet p spelaren vid draget som str
      i PGN-fltet. Fr Xfcc r detta loginnamnet. Det r
      identiskt som spelarnamnet i PGN-huvudet.
      </li>
      <li><term>MoveCount</term>: Dragnummer att skicka.
      </li>
      <li><term>Move</term>: Det aktuella draget i SAN.
      </li>
      <li><term>"Comment"</term>: En kommentar skickad till motstndaren. Scid
      infogar den sista kommentaren i partiet. Dvs dessa kommentarer r
      behandlade som kommentarer till motstndaren. Notera att kommentaren r
      citerad, s flerradiga kommentarer br vara mjligt.
      </li>
      <li><term>resign</term>: 0 eller 1, specificerar om anvndaren
      vill ge upp. Ange till 1 om anvndaren anvnder
      <menu>Ge upp</menu> frn <menu>Korrespondensschack</menu>
      menyn.
      </li>
      <li><term>claimDraw</term>: 0 eller 1, specificerar om anvndaren
      vill ha krver remi. Ange till 1 om anvndaren anvnder
      <menu>Krv remi</menu> frn <menu>Korrespondensschack</menu>
      menyn.
      </li>
      <li><term>offerDraw</term>: 0 eller 1, specificerar om anvndaren
      vill erbjuda remi. Ange till 1 om anvndaren anvnder <menu>Erbjud
      remi</menu> frn <menu>Korrespondensschack</menu> menyn.
      </li>
      <li><term>acceptDraw</term>: 0 eller 1, specificerar om anvndaren
      vill acceptera en remi som erbjuds av motstndaren. Ange till 1 om
      anvndaren anvnder <menu>Acceptera remi</menu> frn
      <menu>Korrespondensschack</menu>
      menyn.
      </li>
   </ul>
</p>
<p>
Notera: Denna funktion r <b>not</b> startat fr eMail-schack!
</p>

<p>
<b>eMail-program</b>:
Detta anger skvgen till ditt fredragna eMail-program. Detta program startas
fr eMail-schack fr att skriva ett meddelande till motstndaren.
</p>

<p>
<b>(B)CC-Address</b>:
En kopia p det utgene meddelandet skickas till denna address som en kopia.
Notera dock, att om ett GUI-emailprogram anvnds har det normalt sin egen
utgende email-hantering. Drfr, kan angivande av denna address duplicera
meddelanden. Det kan dock anvndas fr att skicka ett parti till en annan address.
</p>

<p>
<b>Mod</b>:
Olyckligtvis finns det ett stort antal email-klienter och de anvnder
vldigt olika startkonventioner. Ngra vanliga konventioner, och
exempel p program som anvnder dem, listas hr. Emailprogrammet
kommer att startas med den valda konventionen. Om det inte r knt
vilken konvention som anvnds kan en av alternativen kanske matcha och
fungera. Notera dock att ett stort antal emailprogram r inte
kapabla att skicka bilagor nr de startas av ett annat program. I
detta fall mste du antingen byta din email-klient eller lgga till de bilagor
som har placerats i Scids Utkorg manuellt.
</p>
<p>Tips: mailx eller en av dess mnga kloner br vara tillgngliga som en
kommandoradsapplikation p nstan alla system som ett enkelt att stlla in
verktyg. Om ingen av dessa konventioner fungerar med din fredragna
klient eller om denna klient inte kan hantera email med bilagor via startande frn
kommandoraden, kan installation av mailx vara ett alternativ.
</p>
<p>Tips: mutt anvnder systemets emailtransport (dvs
sendmail/exim/postfix). Att stlla in dem r (troligtvis) inte enkelt
s mutt r ett perfekt alternativ. P en ordentlig Un*x med riktiga
instllningar br det vara det mest enkla sttet att hantera eMail-schack.
(Men det finns inte mnga korrekt instllda system , speciellt inte i
Linuxvrlden.)
</p>
<p>
<b>Bilageparameter</b>: 
Denna parameter anvnds fr att specificera en bilaga. Detta anvnds <b>bara</b>
i <term>mailx</term> mod.
</p>
<p>
<b>mnesparameter</b>:
Denna parameter anvnds fr att specificera mnet fr email-meddelandet. Det
anvnds <b>bara</b> i <term>mailx</term> mod.
</p>
<p><footer>(Uppdaterat: Scid 3.6.23, Februari 2008)</footer></p>
}
############################################################
#
# Swedish tip of the day:

set tips(W) {
  {
    Scid har ver 30 <a Index>Hjlpsidor</a>, och i de flesta fnster kan du
    genom att trycka <b>F1</b> f hjlp om det fnster du fr tillfllet har
    aktivt.
  }
  {
    Vissa fnster (t ex Partiinformation och <a Switcher>Databasvljaren</a>) 
    har en meny fr hger musknapp. Prova att hgerklicka i varje fnster s
    ser du vilka som har det och vilka funktioner du kommer t den vgen.
  }
  {
    Du kan ange drag p mer n ett stt, s du kan vlja vilket som passar dig
    bst. Du kan anvnda musen (med eller utan dragfrslag) eller tangentbordet
    (med eller utan autokomplettering). Ls hjlpsidan fr 
    <a Moves>Att ange drag</a> fr mer information.
  }
  {
    Om du har databaser du ofta ppnar s kan du lgga till ett 
    <a Bookmarks>Bokmrke</a> fr varje databas. Du kommer d att kunna ppna 
    databaserna snabbare via bokmrkesmenyn.
  }
  {
    Du kan se alla drag i det aktuella partiet (inklusive varianter och kommentarer)
    genom att ppna <a PGN>PGN-fnstret</a>.
    Du navigerar igenom partiet i PGN-fnstret genom att klicka p valfritt drag med
    vnster musknapp. Genom att klicka p draget med mellan- eller hgermusknapp s
    fr du en frhandsvisning av just den stllningen.
  }
  {
    Du kan kopiera partier mellan databaserna i <a Switcher>Databasvljaren</a> genom
    att dra-och-slppa dem mellan respektive databas.
  }
  {
    Scid kan ppna PGN filer, ven de som r komprimerade med Gzip (dvs har en .gz filndelse). 
    PGN filer ppnas med enbart lsrttigheter, s om du vill redigera en PGN-fil i Scid 
    mste du kopiera filen till en Scid-databas med hjlp av <a Switcher>Databasvljaren</a>.
  }
  {
    Om du ofta anvnder <a Tree>Trdfnstret</a> med stora databaser, r det vrt att vlja
    <b>Fyll cachefil</b> frn Arkivmenyn i Trdfnstret. Detta innebr att trdstatistik fr 
    mnga av de vanligare stllningarna sparas, vilket ger en snabbare trdtkomst fr databasen
    ifrga.
  }
  {
    <a Tree>Trdfnstret</a> kan visa alla drag frn den aktuella stllningen. Men om ocks vill 
    se alla dragfljder som har lett till denna stllning kan du f fram det genom att skapa en
   <a OpReport>ppningsrapport</a>.
  }
  {
    Du kan vnster- eller hgerklicka i en kolumn i <a GameList>Partilistan</a> fr att ndra 
    dess bredd.
  }
  {
    Med <a PInfo>Spelarinformationen</a> aktuell (klicka p endera spelarens namn under brdet i 
    huvudfnstret fr att f fram den) r det enkelt att <a Searches filtret>Filtrera</a> fram partier
    av en srskild spelares enskilda resultat. Klicka bara p valfritt vrde som har angivits med
    <red>rd text</red>.
  }
  {
    Nr du studerar ppningar kan det vara en pong att markera valen <b>Bnder</b> eller <b>Filer</b> i 
    <a Searches Board>Sk aktuell position</a>. Genom dessa val kan du hitta andra ppningar som ger
    liknande bondestrukturer.
  }
  {
    Du kan hgerklicka i partiinformationsdelen av huvudfnstret (under brdet) fr att f fram en 
    kontextmeny. Du kan t ex gra s att Scid dljer nsta drag i ett parti, vilket kan vara anvndbart 
    om du vill trna genom att "gissa" nsta drag.
  }
  {
    Om du ofta <a Maintenance>Underhller</a> stora databaser kan du utfra flera underhllsuppgifter 
    vid samma tillflle via <a Maintenance Cleaner>Databasverktyget</a>.
  }
  {
    Om du har en stor databas dr de flesta partierna har ett evenemangsdatum och du vill ha partierna i 
    datumordning br du vervga att <a Sorting>Sortera</a> den p evenemangsdatum i frsta hand och 
    evenemang i andra hand, istllet fr datum och evenemang, d detta kommer att hlla turneringspartierna
    frn olika datum samman. (Under frutsttning att alla partier har samma evenemangsdatum naturligtvis).
    Alternativt kan du se till att flten evenemang, rond och datum r s enhetliga och korrekta som mjligt.
    (ms).
  }
  {
    Det kan vara en bra id att <a Maintenance Spellcheck>Stavningskontrollera</a> din databas innan du 
    <a Maintenance Twins>Tar bort dubbletter</a> d Scid har strre mjlighet att hitta dubbletterna och 
    markera dessa fr borttagning.
  }
  {
    <a Flags>Flaggor</a> r anvndbara fr att markera upp partier med karaktristika du vill ska p senare,
    ssom bondestllning, taktiska finesser, osv. Du kan ska p flaggor nr du sker p flt i partihuvudet.
  }
  {
    Om du gr igenom ett parti, och helt enkelt vill testa en ny variant utan att frndra partiet i sig, kan 
    du sl p Frskslget (Trial mode) genom att trycka <b>Ctrl+Mellanslag</b> eller frn verktygsraden. terg till
    ursprungspartiet nr du r klar.
  }
  {
    Om du vill hitta det mest betydelsefulla partiet (med hgst rankade spelare) i en viss position kan du
    ppna <a Tree>Trdfnstret</a> och i denna ppna listan med de bsta partierna. I trdfnstret kan du till
    och med begrnsa partierna till endast ett srskilt resultat.
  }
  {
    Ett bra stt att studera en ppning r att i en stor databas sl p trningslget i <a Tree>Trdfnstret</a>, 
    och sedan spela igenom databasen fr att se vilka varianter som frekommer oftast.
  }
  {
    Om du har tv databaser ppna, och vill ha ett varianttrd att studera medan du gr igenom ett parti
    i den andra databasen kan du <b>Lsa</b> trdet i den databasen och sedan byta till den andra.
  }
  {
    <a Tmt>Turneringsskaren</a> r inte bara anvndbar fr att lokalisera en srskild 
    turnering. Du kan ocks anvnda den fr att ska efter turneringar en specifik spelare nyligen deltagit 
    i, eller att blddra genom turneringar som genomfrts i ett visst land.
  }
  {
    Det finns ett antal vanliga stllningstyper definierade i <a Searches Material>Sk Material/Stllning</a>
    fnstret som du kan ha nytta av nr du studerar ppningar och mittspel.
  }
  {
    Nr du sker p <a Searches Material>Material eller Stllning</a> kan det ofta vara frdelaktigt att begrnsa
    skningen till sdana partier dr stllningen eller materialet frekommit i tminstone ngra drag. Du slipper
    du f med trffar dr situationen du sker uppkom helt tillflligt.
  }
  {
    Om du har en viktig databas du inte vill radera av misstag kan du vlja  <b>Enbart lsbar</b> frn <b>Arkiv</b>
    menyn efter att du har ppnat den. Alternativt kan du stta dess filrttigheter till enbart lsrttigheter.
  }
  {
    Om du anvnder XBoard eller WinBoard (eller ngot annat program som kan hantera FEN-notation via Urklippshanteraren)
    och vill kopiera den aktuella stllningen frn ditt program r det snabbaste sttet att gra det s hr:
    Vlj <b>Kopiera position</b> frn <b>Arkiv</b>-menyn i Xboard/Winboard, vlj sedan <b>Klistra i utgngsstllning</b>
    i Redigera menyn i Scid.
  }
  {
    I <a Searches Header>Sk i huvud</a>, r spelare-, evenemang-, plats-, och rondnamn oknsliga fr VERSALER och
    gemener och ger trffar varhelst de finns i ett namn. Om du vill kan du ange att du istllet vill att skningen <b>ska</b>
    ta VERSALER/gemener i beaktande. Genom att anvnda jokertecken inom citationstecken (dr "?" = motsvarar obestmt
    enskilt tecken och "*" = noll eller flera tecken). Om du exempelvis anger "*BEL" (med citationstecken) i det platsfltet
    hittar du alla partier spelade i Belgien, men exkluderar de som spelats i Belgrad.
  }
  {
    Om du vill redigera ett drag i ett parti utan att frlora alla de drag som spelats efter detta kan du ppna
    <a Import>Importera ett parti i PGN-format</a> fnstret i Verktygsmenyn. Klicka dr p <b>Klistra i aktuellt parti</b> 
    , redigera partiet och avsluta med <b>Importera</b>.
  }
  {
    Om du har en ECO klassificeringsfil laddad, kan du n den mest exakt klassificerade stllningen fr det aktuella partiet
    genom att vlja <b>Identifiera ppning</b> i <b>Partier</b> menyn (kortkommando: <b>Ctrl+Shift+D</b>).
  }
  {
    Nr du vill se hur stor en fil r, eller vill se nr den senast redigerades innan du ppnar den kan du anvnda
    <a Finder>Sk filer</a> (Arkiv - Sk filer).
  }
  {
    En <a repetoire>Repetoarfil</a> r ett utmrkt stt att hlla koll p dina favoritppningar, eller hitta partier dr
    dr de har spelats. Nr du vl har skapat en repetoarfil kan du genomska nya filer utifrn repetoarfilen, och titta 
    igenom alla partier med just dina ppningar.
  }
  {
    Genom att skapa en <a OpReport>ppningsrapport</a> har du en utmrkt mjlighet att lra dig en ny spelppning. Du kan f
    information om resultat, hur remiaktig den r, vilka vanliga positionella teman som dyker upp, och mycket mer.
  }
  {
    Du kan kommentera den aktuella stllningen med de vanligaste symbolerna (!, !?, +=, etc) utan att behva anvnda 
    <a Comment>Kommentarseditorn<a>. Dr du exempelvis vill ange ett bra drag skriver du "!" och trycker sedan ENTER
    s lggs "!" symbolen till draget. Se ven hjlpsidan <a Moves>Ange drag</a> fr mer detaljerad information.
  }
  {
    Om du blddrar igenom ppningarna i en databas i <a Tree>Trdfnstret</a>, fr du en anvndbar verblick ver hur
    vl ppningen fungerar i sentida partier mellan hgratade spelare om du ppnar statistikfnstret (kortkommando: Ctrl+I).
  }
  {
    Du ndrar enkelt huvudfnstrets brdstorlek genom att hlla nere <b>Ctrl</b> och <b>Shift</b> tangenterna, samtidigt
    som du trycker hger- eller vnster piltangent.
  }
  {
    Efter genomfrd <a Searches>Skning</a>, r det enkelt att navigera genom urvalet genom att hlla nere <b>Ctrl</b> 
    tangenten samtidigt som du trycker upp- eller nerpiltangenterna fr att g till fregende eller nsta parti i 
    <a Searches filtret>Urvalet</a>.
  }
{
  Du kan relativt enkelt rita pilar och frga rutor till dina kommentarer. ppna <b>Kommentarseditorn</b>, klicka p <b>Infoga symbol</b> och vlj nskad frg. Om du nu klickar p en frsta ruta, och drefter klickar p en andra s dras en pil i nskad frg frn den frsta till den andra rutan. Klickar du bara p en ruta, blir den frgad.
  }
}
#}
###
### uci.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
######################################################################
### add UCI engine support

namespace eval uci {
    # will contain the UCI engine options saved
    variable newOptions {}
    
    # set pipe ""
    set uciOptions {}
    set optList {}
    set oldOptions ""
    array set check ""
    
    set autoSaveOptions 0 ; # UCI options are saved as soon as the options dialog is closed
    set autoSaveOptionsIndex -1
    
    # The list of token that comes with info
    set infoToken { depth seldepth time nodes pv multipv score cp mate lowerbound upperbound \
                currmove currmovenumber hashfull nps tbhits sbhits cpuload string refutation currline }
    set optionToken {name type default min max var }
    set optionImportant { MultiPV Hash OwnBook BookFile UCI_LimitStrength UCI_Elo }
    set optionToKeep { UCI_LimitStrength UCI_Elo UCI_ShredderbasesPath }
    array set uciInfo {}
    ################################################################################
    #
    ################################################################################
    proc resetUciInfo { { n 1 }} {
        global ::uci::uciInfo
        set uciInfo(depth$n) 0
        set uciInfo(seldepth$n) 0
        set uciInfo(time$n) 0
        set uciInfo(nodes$n) 0
        set uciInfo(pv$n) ""
        set uciInfo(multipv$n) ""
        # set uciInfo(pvlist$n) {}
        # set uciInfo(score$n) ""
        set uciInfo(tmp_score$n) ""
        set uciInfo(scoremate$n) 0
        set uciInfo(currmove$n) ""
        set uciInfo(currmovenumber$n) 0
        set uciInfo(hashfull$n) 0
        set uciInfo(nps$n) 0
        set uciInfo(tbhits$n) 0
        set uciInfo(sbhits$n) 0
        set uciInfo(cpuload$n) 0
        set uciInfo(string$n) ""
        set uciInfo(refutation$n) ""
        set uciInfo(currline$n) ""
        # set uciInfo(bestmove$n) ""
    }
    ################################################################################
    # if analyze = 0 -> engine mode
    # if analyze = 1 -> analysis mode
    ################################################################################
    proc  processAnalysisInput { { n 1 } { analyze 1 } } {
        global analysis ::uci::uciInfo
        
        if {$analyze} {
            set pipe $analysis(pipe$n)
            if { ! [ ::checkEngineIsAlive $n ] } { return }
        } else  {
            set analysis(fen$n) ""
            set pipe $uciInfo(pipe$n)
            if { ! [ ::uci::checkEngineIsAlive $n ] } { return }
        }
        
        if {$analyze} {
            if {! $analysis(seen$n)} {
                set analysis(seen$n) 1
                logEngineNote $n {First line from engine seen; sending it initial commands now.}
                # in order to get options, engine should end reply with "uciok"
                ::sendToEngine $n "uci"
            }
        } else  {
            if {! $uciInfo(seen$n)} {
                set uciInfo(seen$n) 1
                logEngineNote $n {First line from engine seen; sending it initial commands now.}
                ::uci::sendToEngine $n "uci"
            }
        }

        after idle "after 1 ::uci::processInput_ $n $analyze"
        fileevent $pipe readable {}
    }

    proc processInput_ { {n} {analyze} } {
        global analysis ::uci::uciInfo ::uci::infoToken ::uci::optionToken
        
        if {$analyze} {
            set pipe $analysis(pipe$n)
            if { ! [ ::checkEngineIsAlive $n ] } { return }
        } else  {
            set analysis(fen$n) ""
            set pipe $uciInfo(pipe$n)
            if { ! [ ::uci::checkEngineIsAlive $n ] } { return }
        }

        # Get one line from the engine:
        set line [gets $pipe]
        if {$line == ""} {
            fileevent $pipe readable "::uci::processAnalysisInput $n $analyze"
            return
        }

        after idle "after 1 ::uci::processInput_ $n $analyze"
        
        # puts ">> $line"
        
        # To speed up parsing of engine's output. Should be removed if currmove info is used
        # if {[string first "info currmove" $line ] == 0} { return }
        
        logEngine $n "Engine: $line"

        if {[string match "bestmove*" $line]} {
            set data [split $line]
            set uciInfo(bestmove$n) [lindex $data 1]
            # get ponder move
            if {[lindex $data 2] == "ponder"} {
                set uciInfo(ponder$n) [lindex $data 3]
            } else {
                set uciInfo(ponder$n) ""
            }
            set analysis(waitForBestMove$n) 0
            return
        }
        
        if {[string match "id *name *" $line]} {
            set name [ regsub {id[ ]?name[ ]?} $line "" ]
            if {$analyze} {
                set analysis(name$n) $name
            } else  {
                set uciInfo(name$n) $name
            }
            
            if {$n == 1} {
                catch {wm title .analysisWin$n "Scid: Analysis: $name"}
            } else {
                catch {wm title .analysisWin$n "Scid: Analysis $n: $name"}
            }
        }
        
        set toBeFormatted 0
        # parse an info line
        if {[string first "info" $line ] == 0} {
            if {$analysis(waitForReadyOk$n)} { return }
            resetUciInfo $n
            set data [split $line]
            set length [llength $data]
            for {set i 0} {$i < $length } {incr i} {
                set t [lindex $data $i]
                if { $t == "info" } { continue }
                if { $t == "depth" } { incr i ; set uciInfo(depth$n) [ lindex $data $i ] ; continue }
                if { $t == "seldepth" } { incr i ; set uciInfo(seldepth$n) [ lindex $data $i ] ; set analysis(seldepth$n) $uciInfo(seldepth$n) ; continue }
                if { $t == "time" } { incr i ; set uciInfo(time$n) [ lindex $data $i ] ; continue }
                if { $t == "nodes" } { incr i ; set uciInfo(nodes$n) [ lindex $data $i ] ; continue }
                if { $t == "pv" } {
                    incr i
                    set uciInfo(pv$n) [ lindex $data $i ]
                    incr i
                    while { [ lsearch -exact $infoToken [ lindex $data $i ] ] == -1 && $i < $length } {
                        append uciInfo(pv$n) " " [ lindex $data $i ]
                        incr i
                    }
                    set toBeFormatted 1
                    incr i -1
                    continue
                }
                if { $t == "multipv" } { incr i ; set uciInfo(multipv$n) [ lindex $data $i ] ; continue }
                if { $t == "score" } {
                    incr i
                    set next [ lindex $data $i ]
                    # Needed for Prodeo, which is not UCI compliant
                    if { $next != "cp" && $next != "mate" } {
                        return
                    }
                    if { $next == "cp" } {
                        incr i
                        set uciInfo(tmp_score$n) [ lindex $data $i ]
                    }
                    if { $next == "mate" } {
                        incr i
                        set next [ lindex $data $i ]
                        set uciInfo(scoremate$n) $next
                        if { $next < 0} {
                            set uciInfo(tmp_score$n) [expr {-32767 - 2 * $next}]
                        } else  {
                            set uciInfo(tmp_score$n) [expr {32767 - 2 * $next}]
                        }
                    }
                    # convert the score to white's perspective (not engine's one)
                    if { $analysis(fen$n) == "" } {
                        set side [string index [sc_pos side] 0]
                    } else {
                        set side [lindex [split $analysis(fen$n)] 1]
                    }
                    if { $side == "b"} {
                        set uciInfo(tmp_score$n) [ expr 0.0 - $uciInfo(tmp_score$n) ]
                        if { $uciInfo(scoremate$n) } {
                            set uciInfo(scoremate$n) [ expr 0 - $uciInfo(scoremate$n) ]
                            if { $uciInfo(tmp_score$n) < 0 } {
                                set uciInfo(tmp_score$n) [ expr {$uciInfo(tmp_score$n) - 1.0} ]
                            }
                        }
                    } elseif { $uciInfo(scoremate$n) && $uciInfo(tmp_score$n) > 0 } {
                        set uciInfo(tmp_score$n) [ expr {$uciInfo(tmp_score$n) + 1.0} ]
                    }
                    set uciInfo(tmp_score$n) [expr {double($uciInfo(tmp_score$n)) / 100.0} ]
                    
                    # don't consider lowerbound & upperbound score info
                    continue
                }
                if { $t == "currmove" } { incr i ; set uciInfo(currmove$n) [ lindex $data $i ] ; set analysis(currmove$n) [formatPv $uciInfo(currmove$n) $analysis(fen$n)] ; continue}
                if { $t == "currmovenumber" } { incr i ; set uciInfo(currmovenumber$n) [ lindex $data $i ] ; set analysis(currmovenumber$n) $uciInfo(currmovenumber$n) ; continue}
                if { $t == "hashfull" } { incr i ; set uciInfo(hashfull$n) [ lindex $data $i ] ; set analysis(hashfull$n) $uciInfo(hashfull$n) ; continue}
                if { $t == "nps" } { incr i ; set uciInfo(nps$n) [ lindex $data $i ] ; set analysis(nps$n) $uciInfo(nps$n) ; continue}
                if { $t == "tbhits" } { incr i ; set uciInfo(tbhits$n) [ lindex $data $i ] ; set analysis(tbhits$n) $uciInfo(tbhits$n) ; continue}
                if { $t == "sbhits" } { incr i ; set uciInfo(sbhits$n) [ lindex $data $i ] ; set analysis(sbhits$n) $uciInfo(sbhits$n) ; continue}
                if { $t == "cpuload" } { incr i ; set uciInfo(cpuload$n) [ lindex $data $i ] ; set analysis(cpuload$n) $uciInfo(cpuload$n) ; continue}
                if { $t == "string" } {
                    incr i
                    while { $i < $length } {
                        append uciInfo(string$n) [ lindex $data $i ] " "
                        incr i
                    }
                    break
                }
                # TODO parse following tokens if necessary  : refutation currline
                if { $t == "refutation" } { continue }
                if { $t == "currline" } { continue }
            };# end for data loop
            
            # return if no interesting info
            if { $uciInfo(tmp_score$n) == "" || $uciInfo(pv$n) == "" } {
                if {$analyze} {
                    updateAnalysisText $n
                }
                return
            }
            
            # handle the case an UCI engine does not send multiPV
            if { $uciInfo(multipv$n) == "" } { set uciInfo(multipv$n) 1 }
            
            if { $uciInfo(multipv$n) == 1 } {
                set uciInfo(score$n) $uciInfo(tmp_score$n)
            }
            
            if { $uciInfo(multipv$n) == 1 && $analyze} {
                # this is the best line
                set analysis(prev_depth$n) $analysis(depth$n)
                set analysis(depth$n) $uciInfo(depth$n)
                set analysis(score$n) $uciInfo(score$n)
                set analysis(scoremate$n) $uciInfo(scoremate$n)
                set analysis(moves$n) $uciInfo(pv$n)
                set analysis(time$n) [expr {double($uciInfo(time$n)) / 1000.0} ]
                set analysis(nodes$n) [calculateNodes $uciInfo(nodes$n) ]
            }
            
            set pvRaw $uciInfo(pv$n)
            
            # convert to something more readable
            if ($toBeFormatted) {
                set uciInfo(pv$n) [formatPv $uciInfo(pv$n) $analysis(fen$n)]
                set toBeFormatted 0
            }
            
            set idx [ expr $uciInfo(multipv$n) -1 ]
            
            # was if $analyze etc..
            if { $idx < $analysis(multiPVCount$n) } {
                set tmpTime [expr {double($uciInfo(time$n)) / 1000.0}]
                if {$idx < [llength $analysis(multiPV$n)]} {
                    lset analysis(multiPV$n) $idx "$uciInfo(depth$n) $uciInfo(tmp_score$n) [list $uciInfo(pv$n)] $uciInfo(scoremate$n) $tmpTime"
                    lset analysis(multiPVraw$n) $idx "$uciInfo(depth$n) $uciInfo(tmp_score$n) [list $pvRaw] $uciInfo(scoremate$n) $tmpTime"
                } else  {
                    lappend analysis(multiPV$n) "$uciInfo(depth$n) $uciInfo(tmp_score$n) [list $uciInfo(pv$n)] $uciInfo(scoremate$n) $tmpTime"
                    lappend analysis(multiPVraw$n) "$uciInfo(depth$n) $uciInfo(tmp_score$n) [list $pvRaw] $uciInfo(scoremate$n) $tmpTime"
                }
            }
            
        } ;# end of info line
        
        # the UCI engine answers to <uci> command
        if { $line == "uciok"} {
            if {$analysis(waitForUciOk$n)} {
                set analysis(waitForUciOk$n) 0
            }
            resetUciInfo $n
            sendUCIoptions $n
            if {$analyze} {
                set analysis(uciok$n) 1
                startAnalyzeMode $n
            } else  {
                set uciInfo(uciok$n) 1
            }
        }
        
        # the UCI engine answers to <isready> command
        if { $line == "readyok"} {
            set analysis(waitForReadyOk$n) 0
            return
        }
        
        # get options and save only part of data
        if { [string first "option name" $line] == 0 && $analyze } {
            set min "" ; set max ""
            set data [split $line]
            set length [llength $data]
            for {set i 0} {$i < $length} {incr i} {
                set t [lindex $data $i]
                if {$t == "name"} {
                    incr i
                    set name [ lindex $data $i ]
                    incr i
                    while { [ lsearch -exact $optionToken [ lindex $data $i ] ] == -1 && $i < $length } {
                        append name " " [ lindex $data $i ]
                        incr i
                    }
                    incr i -1
                    continue
                }
                if {$t == "min"} { incr i ; set min [ lindex $data $i ] ; continue }
                if {$t == "max"} {incr i ; set max [ lindex $data $i ] ; continue }
            }
            lappend analysis(uciOptions$n) [ list $name $min $max ]
        }
        if {$analyze} {
            updateAnalysisText $n
        }
    }
    ################################################################################
    #
    ################################################################################
    proc readUCI { n } {
        global ::uci::uciOptions
        
        set line [string trim [gets $::uci::uciInfo(pipe$n)] ]
        # end of options
        if {$line == "uciok"} {
            # we got all options, stop engine
            closeUCIengine $n 1
            uciConfigWin
        }
        # get options
        if { [string first "option name" $line] == 0 } {
            lappend uciOptions $line
        }
    }
    ################################################################################
    # build a dialog with UCI options published by the engine
    # and available in analysis(uciOptions)
    ################################################################################
    proc uciConfig { n cmd arg dir options } {
        global ::uci::uciOptions ::uci::oldOptions
        
        if {[info exists ::uci::uciInfo(pipe$n)]} {
            if {$::uci::uciInfo(pipe$n) != ""} {
                tk_messageBox -title "Scid" -icon warning -type ok -message "An engine is already running"
                return
            }
        }
        set oldOptions $options
        
        # If the analysis directory is not current dir, cd to it:
        set oldpwd ""
        if {$dir != "."} {
            set oldpwd [pwd]
            catch {cd $dir}
        }
        # Try to execute the analysis program:
        if {[catch {set pipe [open "| [list $cmd] $arg" "r+"]} result]} {
            if {$oldpwd != ""} { catch {cd $oldpwd} }
            tk_messageBox -title "Scid: error starting UCI engine" \
                    -icon warning -type ok -message "Unable to start the program:\n$cmd"
            return
        }
        
        set ::uci::uciInfo(pipe$n) $pipe
        
        # Configure pipe for line buffering and non-blocking mode:
        fconfigure $pipe -buffering full -blocking 0
        fileevent $pipe readable "::uci::readUCI $n"
        
        # Return to original dir if necessary:
        if {$oldpwd != ""} { catch {cd $oldpwd} }
        
        set uciOptions {}
        
        puts $pipe "uci"
        flush $pipe
        
        # give a few seconds for the engine to output its options, then automatically kill it
        # (to handle xboard engines)
        after 5000  "::uci::closeUCIengine $n 0"
    }
    
    ################################################################################
    #   builds the dialog for UCI engine configuration
    ################################################################################
    proc uciConfigWin {} {
        global ::uci::uciOptions ::uci::optList ::uci::optionToken ::uci::oldOptions ::uci::optionImportant
        
        set w .uciConfigWin
        if { [winfo exists $w]} { return }
        toplevel $w
        wm title $w $::tr(ConfigureUCIengine)

        autoscrollframe -bars both $w canvas $w.c -highlightthickness 0 -background [ttk::style lookup Button.label -background]
        bind $w.c <Configure>  {
            set l [winfo reqwidth %W.f]
            set h [winfo reqheight %W.f]
            %W configure -scrollregion [list 0 0 $l $h] -width $l -height $h
        }
        grid [ttk::frame $w.c.f]
        $w.c create window 0 0 -window $w.c.f -anchor nw
        set w $w.c.f

        proc tokeep {opt} {
            foreach tokeep $::uci::optionToKeep {
                if { [lsearch $opt $tokeep] != -1 } {
                    return 1
                }
            }
            return 0
        }
        
        set optList ""
        array set elt {}
        foreach opt $uciOptions {
            set elt(name) "" ; set elt(type) "" ; set elt(default) "" ; set elt(min) "" ; set elt(max) "" ; set elt(var) ""
            set data [split $opt]
            # skip options starting with UCI_ and Ponder
            # some engines like shredder use UCI_* options that should not be ignored
            
            if { ![tokeep $opt] && ( [ lsearch -glob $data "UCI_*" ] != -1 || [ lsearch $data "Ponder" ] != -1 ) } {
                continue
            }
            
            set length [llength $data]
            # parse one option
            for {set i 0} {$i < $length} {incr i} {
                set t [lindex $data $i]
                if {$t == "option"} { continue }
                if {$t == "name"} {
                    incr i
                    set elt(name) [ lindex $data $i ]
                    incr i
                    while { [ lsearch -exact $optionToken [ lindex $data $i ] ] == -1 && $i < $length } {
                        append elt(name) " " [ lindex $data $i ]
                        incr i
                    }
                    incr i -1
                    continue
                }
                if {$t == "type"} { incr i ; set elt(type) [ lindex $data $i ] ; continue }
                if {$t == "default"} { ;# Glaurung uses a default value that is > one word
                    incr i
                    set elt(default) [ lindex $data $i ]
                    incr i
                    while { [ lsearch -exact $optionToken [ lindex $data $i ] ] == -1 && $i < $length } {
                        append elt(default) " " [ lindex $data $i ]
                        incr i
                    }
                    incr i -1
                    continue
                }
                if {$t == "min"} { incr i ; set elt(min) [ lindex $data $i ] ; continue }
                if {$t == "max"} { incr i ; set elt(max) [ lindex $data $i ] ; continue }
                if {$t == "var"} {
                    incr i
                    set tmp [ lindex $data $i ]
                    incr i
                    while { ([ lsearch -exact $optionToken [ lindex $data $i ] ] == -1 && $i < $length ) \
                                || [ lindex $data $i ] == "var" } {
                        if {[ lindex $data $i ] != "var" } {
                            append tmp " " [ lindex $data $i ]
                        } else  {
                            lappend elt(var) [list $tmp]
                            incr i
                            set tmp [ lindex $data $i ]
                        }
                        incr i
                    }
                    lappend elt(var) [list $tmp]
                    
                    incr i -1
                    continue
                }
            }
            lappend optList [array get elt]
        }
        
        # sort list of options so that important ones come first
        set tmp $optList
        set optList {}
        foreach l $tmp {
            array set elt $l
            if { [ lsearch $optionImportant $elt(name) ] != -1 } {
                lappend optList $l
            }
        }
        foreach l $tmp {
            array set elt $l
            if { [ lsearch $optionImportant $elt(name) ] == -1 } {
                lappend optList $l
            }
        }
        
        set optnbr 0
        ttk::frame $w.fopt
        ttk::frame $w.fbuttons
        
        set row 0
        set col 0
        set isImportantParam 1
        foreach l $optList {
            array set elt $l
            set name $elt(name)
            if { [ lsearch $optionImportant $elt(name) ] == -1 && $isImportantParam } {
                set isImportantParam 0
                incr row
                set col 0
            }
            if {$elt(name) == "MultiPV"} { set name $::tr(MultiPV) }
            if {$elt(name) == "Hash"} { set name $::tr(Hash) }
            if {$elt(name) == "OwnBook"} { set name $::tr(OwnBook) }
            if {$elt(name) == "BookFile"} { set name $::tr(BookFile) }
            if {$elt(name) == "UCI_LimitStrength"} { set name $::tr(LimitELO) }
            
            if { $col > 3 } { set col 0 ; incr row}
            if {$elt(default) != ""} {
                set default "\n($elt(default))"
            } else  {
                set default ""
            }
            set value $elt(default)
            # find the name in oldOptions (the previously saved data)
            foreach old $oldOptions {
                if {[lindex $old 0] == $elt(name)} {
                    set value [lindex $old 1]
                    break
                }
            }
            if { $elt(type) == "check"} {
                ttk::checkbutton $w.fopt.opt$optnbr -text "$name$default" -onvalue true -offvalue false -variable ::uci::check($optnbr)
                set ::uci::check($optnbr) $value
                grid $w.fopt.opt$optnbr -row $row -column $col -sticky w
            }
            if { $elt(type) == "spin"} {
                ttk::label $w.fopt.label$optnbr -text "$name$default"
                if { $elt(name) == "UCI_Elo" } {
                    spinbox $w.fopt.opt$optnbr -from $elt(min) -to $elt(max) -width 5 -increment 50 -validate all -vcmd { regexp {^[0-9]+$} %P }
                } else  {
                    spinbox $w.fopt.opt$optnbr -from $elt(min) -to $elt(max) -width 5 -validate all -vcmd { regexp {^[0-9]+$} %P }
                }
                $w.fopt.opt$optnbr set $value
                grid $w.fopt.label$optnbr -row $row -column $col -sticky e
                incr col
                grid $w.fopt.opt$optnbr -row $row -column $col -sticky w
            }
            if { $elt(type) == "combo"} {
                ttk::label $w.fopt.label$optnbr -text "$name$default"
                set idx 0
                set i 0
                set tmp {}
                foreach e $elt(var) {
                    lappend tmp [join $e]
                    if {[join $e] == $value} { set idx $i }
                    incr i
                }
                ttk::combobox $w.fopt.opt$optnbr -values $tmp
                
                $w.fopt.opt$optnbr current $idx
                grid $w.fopt.label$optnbr -row $row -column $col -sticky e
                incr col
                grid $w.fopt.opt$optnbr -row $row -column $col -sticky w
            }
            if { $elt(type) == "button"} {
                ttk::button $w.fopt.opt$optnbr -text "$name$default"
                grid $w.fopt.opt$optnbr -row $row -column $col -sticky w
            }
            if { $elt(type) == "string"} {
                ttk::label $w.fopt.label$optnbr -text "$name$default"
                ttk::entry $w.fopt.opt$optnbr
                $w.fopt.opt$optnbr insert 0 $value
                grid $w.fopt.label$optnbr -row $row -column $col -sticky e
                incr col
                grid $w.fopt.opt$optnbr -row $row -column $col -sticky w
            }
            incr col
            incr optnbr
        }
        
        ttk::button $w.fbuttons.save -text $::tr(Save) -command {
            ::uci::saveConfig
            destroy .uciConfigWin
        }
        ttk::button $w.fbuttons.cancel -text $::tr(Cancel) -command "destroy .uciConfigWin"
        pack $w.fbuttons.save $w.fbuttons.cancel -side left -expand yes -fill x -padx 20 -pady 2
        pack $w.fopt -expand 1 -fill both
        addHorizontalRule $w
        pack $w.fbuttons -expand 1 -fill both
        bind $w <Return> "$w.fbuttons.save invoke"
        bind $w <Escape> "destroy .uciConfigWin"
        catch {grab .uciConfigWin}
    }
    ################################################################################
    # will generate a list of list {{name}/value} pairs
    ################################################################################
    proc saveConfig {} {
        global ::uci::optList ::uci::newOptions
        set newOptions {}
        set w .uciConfigWin.sf.scrolled
        set optnbr 0
        
        foreach l $optList {
            array set elt $l
            set value ""
            if { $elt(type) == "check"} {
                set value $::uci::check($optnbr)
            }
            if { $elt(type) == "spin" || $elt(type) == "combo" || $elt(type) == "string" } {
                set value [$w.fopt.opt$optnbr get]
            }
            if { $elt(type) == "button" } { set value "" }
            
            lappend newOptions [ list $elt(name)  $value ]
            incr optnbr
        }
        if { $::uci::autoSaveOptions } {
            writeOptions
            set ::uci::autoSaveOptions 0
        }
    }
    ################################################################################
    # If the config window is called outside the engine dialog, save UCI options
    # (only the UCI options dialog box is called
    ################################################################################
    proc writeOptions {} {
        set elt [lindex $::engines(list) $::uci::autoSaveOptionsIndex]
        set elt [ lreplace $elt 8 8 $::uci::newOptions]
        set ::engines(list) [lreplace $::engines(list) $::uci::autoSaveOptionsIndex $::uci::autoSaveOptionsIndex $elt]
        
        ::enginelist::write
    }
    ################################################################################
    # The engine replied readyok, so it's time to configure it (sends the options to the engine)
    # It seems necessary to ask first if engine is ready
    ################################################################################
    proc sendUCIoptions { n } {
        global analysis
        set engineData [ lindex $::engines(list) $analysis(index$n) ]
        set options [ lindex $engineData 8 ]
        foreach opt $options {
            set name [lindex $opt 0]
            set value [lindex $opt 1]
            set analysis(waitForReadyOk$n) 1
            ::sendToEngine $n "isready"
            vwait analysis(waitForReadyOk$n)
            ::sendToEngine $n "setoption name $name value $value"
        }
    }
    ################################################################################
    # will start an engine for playing (not analysis)
    ################################################################################
    proc startEngine {index n} {
        global ::uci::uciInfo
        resetUciInfo $n
        set uciInfo(pipe$n) ""
        set uciInfo(seen$n) 0
        set uciInfo(uciok$n) 0
        ::resetEngine $n
        set engineData [lindex $::engines(list) $index]
        set analysisName [lindex $engineData 0]
        set analysisCommand [ toAbsPath [lindex $engineData 1] ]
        set analysisArgs [lindex $engineData 2]
        set analysisDir [ toAbsPath [lindex $engineData 3] ]
        
        # If the analysis directory is not current dir, cd to it:
        set oldpwd ""
        if {$analysisDir != "."} {
            set oldpwd [pwd]
            catch {cd $analysisDir}
        }
        
        # Try to execute the analysis program:
        if {[catch {set uciInfo(pipe$n) [open "| [list $analysisCommand] $analysisArgs" "r+"]} result]} {
            if {$oldpwd != ""} { catch {cd $oldpwd} }
            tk_messageBox -title "Scid: error starting engine" -icon warning -type ok \
                    -message "Unable to start the program:\n$analysisCommand"
            return
        }
        
        set ::analysis(index$n) $index
        set ::analysis(pipe$n) $uciInfo(pipe$n)
        
        # Return to original dir if necessary:
        if {$oldpwd != ""} { catch {cd $oldpwd} }
        
        fconfigure $uciInfo(pipe$n) -buffering line -blocking 0
        fileevent $uciInfo(pipe$n) readable "::uci::processAnalysisInput $n 0"
        
        # wait a few seconds to be sure the engine had time to start
        set counter 0
        while {! $::uci::uciInfo(uciok$n) && $counter < 50 } {
            incr counter
            update
            after 100
        }
    }
    ################################################################################
    #
    ################################################################################
    proc sendToEngine {n text} {
        logEngine $n "Scid  : $text"
        catch {puts $::uci::uciInfo(pipe$n) $text}
    }
    ################################################################################
    # returns 0 if engine died abruptly or 1 otherwise
    ################################################################################
    proc checkEngineIsAlive { n } {
        global ::uci::uciInfo
        if {[eof $uciInfo(pipe$n)]} {
            fileevent $uciInfo(pipe$n) readable {}
            set exit_status 0
            if {[catch {close $uciInfo(pipe$n)} standard_error] != 0} {
                global errorCode
                if {"CHILDSTATUS" == [lindex $errorCode 0]} {
                    set exit_status [lindex $errorCode 2]
                }
            }
            set uciInfo(pipe$n) ""
            if { $exit_status != 0 } {
                logEngineNote $n {Engine terminated with exit code $exit_status: "\"$standard_error\""}
                tk_messageBox -type ok -icon info -parent . -title "Scid" \
                              -message "The analysis engine terminated with exit code $exit_status: \"$standard_error\""
            } else {
                logEngineNote $n {Engine terminated without exit code: "\"$standard_error\""}
                tk_messageBox -type ok -icon info -parent . -title "Scid" \
                              -message "The analysis engine terminated without exist code: \"$standard_error\""
            }
            return 0
        }
        return 1
    }
    ################################################################################
    # close the engine
    # It may be not an UCI one (if the user made an error, trying to configure an xboard engine)
    ################################################################################
    proc closeUCIengine { n { uciok 1 } } {
        global windowsOS ::uci::uciInfo
        
        set pipe $uciInfo(pipe$n)
        # Check the pipe is not already closed:
        if {$pipe == ""} { return }
        
        after cancel "::uci::closeUCIengine $n 0"
        fileevent $pipe readable {}
        
        if {! $uciok } {
            tk_messageBox -title "Scid: error closing UCI engine" \
                    -icon warning -type ok -message "Not an UCI engine"
        }
        
        # Some engines in analyze mode may not react as expected to "quit"
        # so ensure the engine exits analyze mode first:
        catch { puts $pipe "stop" ; puts $pipe "quit" }
        #in case an xboard engine
        catch { puts $pipe "exit" ; puts $pipe "quit" }
        
        # last resort : try to kill the engine (TODO if Windows : no luck, welcome zombies !)
        # No longer try to kill the engine as :
        # - it does not work on Windows
        # - Rybka MP uses processes instead of threads : killing the main process will leave the children processes running
        # - engines should normally exit
        # if { ! $windowsOS } { catch { exec -- kill -s INT [ pid $pipe ] }  }
        
        catch { flush $pipe }
        catch { close $pipe }
        set uciInfo(pipe$n) ""
    }
    ################################################################################
    # UCI moves use long notation
    # returns 1 if an error occured when entering a move
    ################################################################################
    proc sc_move_add { moves } {
        
        foreach m $moves {
            # get rid of leading piece
            set c [string index $m 0]
            if {$c == "K" || $c == "Q" || $c == "R" || $c == "B" || $c == "N"} {
                set m [string range $m 1 end]
            }
            set s1 [string range $m 0 1]
            set s1 [::board::sq $s1]
            set s2 [string range $m 2 3]
            set s2 [::board::sq $s2]
            if {[string length $m] > 4} {
                set promo [string range $m 4 end]
                # inverse transformation : const char PIECE_CHAR [] = "xKQRBNP.xkqrbnpxMm";
                # it seems capitalisation does not matter (see addMove proc in main.tcl)
                switch -- $promo {
                    q { set p 2}
                    r { set p 3}
                    b { set p 4}
                    n { set p 5}
                    default {puts "Promo error $promo for moves $moves"}
                }
                if { [catch { sc_move add $s1 $s2 $p } ] } { return 1 }
            } else  {
                if { [catch { sc_move add $s1 $s2 0 } ] } { return 1 }
            }
        }
        return 0
    }
    ################################################################################
    #make UCI output more readable (b1c3 -> Nc3)
    ################################################################################
    proc formatPv { moves { fen "" } } {
        # Push a temporary copy of the current game:
        if {$fen != ""} {
            sc_game push
            sc_game startBoard $fen
        } else  {
            sc_game push copyfast
        }
        set tmp ""
        foreach m $moves {
            if { [sc_move_add $m] == 1 } { break }
            set prev [sc_game info previousMoveNT]
            append tmp " $prev"
        }
        set tmp [string trim $tmp]
        
        # Pop the temporary game:
        sc_game pop

        return $tmp
    }
    ################################################################################
    #   Format a line starting at current position where <moves> were played (in San notation)
    ################################################################################
    proc formatPvAfterMoves { played_moves moves } {
        sc_game push copyfast
        sc_move addSan $played_moves
        
        set tmp ""
        foreach m $moves {
            if { [sc_move_add $m] == 1 } {
                break
            }
            set prev [sc_game info previousMoveNT]
            append tmp " $prev"
        }
        set tmp [string trim $tmp]
        
        # Pop the temporary game:
        sc_game pop

        return $tmp
    }
}
###
### End of file: uci.tcl
###
# end.tcl: part of Scid.
# Copyright (C) 2000-2003 Shane Hudson.

if { ! [file isdirectory $::scidBooksDir]} {
  tk_messageBox -title "Scid" -type ok -icon warning -message "Books directory not found"
}

############################################################
### Main window title, etc:



############################################################
### Menu/etc Functions:


# findNovelty:
#   Searches the for first position in the current game not
#   found in the selected database.

set noveltyOlder 0

proc findNovelty {} {
  global noveltyBase noveltyOlder
  set noveltyBase [sc_base current]
  set w .noveltyWin
  if {[winfo exists $w]} {
    updateNoveltyWin
    return
  }
  toplevel $w
  wm title $w "Scid: $::tr(FindNovelty)"
  
  pack [frame $w.help] -side top -fill x
  text $w.help.text -width 1 -height 5 -wrap word \
      -relief ridge -cursor top_left_arrow -yscrollcommand "$w.help.ybar set"
  scrollbar $w.help.ybar -orient vertical -command "$w.help.text yview" \
      -takefocus 0 -width 10
  pack $w.help.ybar -side right -fill y
  pack $w.help.text -side left -fill x -expand yes
  $w.help.text insert end [string trim $::tr(NoveltyHelp)]
  $w.help.text configure -state disabled
  
  label $w.title -text $::tr(Database:) -font font_Bold
  pack $w.title -side top
  set numBases [sc_base count total]
  for {set i 1} {$i <= $numBases} {incr i} {
    radiobutton $w.b$i -text "" -variable noveltyBase -value $i -underline 5
    pack $w.b$i -side top -anchor w -padx 10
  }
  addHorizontalRule $w
  
  label $w.which -text $::tr(TwinsWhich:) -font font_Bold
  pack $w.which -side top
  radiobutton $w.all -text $::tr(SelectAllGames) \
      -variable noveltyOlder -value 0
  radiobutton $w.older -text $::tr(SelectOlderGames) \
      -variable noveltyOlder -value 1
  pack $w.all $w.older -side top -anchor w -padx 10
  
  addHorizontalRule $w
  
  label $w.status -text "" -width 1 -font font_Small -relief sunken -anchor w
  pack $w.status -side bottom -fill x
  pack [frame $w.b] -side top -fill x
  dialogbutton $w.b.stop -textvar ::tr(Stop) -state disabled \
      -command sc_progressBar
  dialogbutton $w.b.go -text $::tr(FindNovelty) -command {
    .noveltyWin.b.stop configure -state normal
    .noveltyWin.b.go configure -state disabled
    .noveltyWin.b.close configure -state disabled
    busyCursor .
    .noveltyWin.status configure -text " ... "
    update
    grab .noveltyWin.b.stop
    if {$noveltyOlder} {
      set err [catch {sc_game novelty -older -updatelabel .noveltyWin.status $noveltyBase} result]
    } else {
      set err [catch {sc_game novelty -updatelabel .noveltyWin.status $noveltyBase} result]
    }
    grab release .noveltyWin.b.stop
    if {! $err} { set result "$::tr(Novelty): $result" }
    unbusyCursor .
    .noveltyWin.b.stop configure -state disabled
    .noveltyWin.b.go configure -state normal
    .noveltyWin.b.close configure -state normal
    .noveltyWin.status configure -text $result
    updateBoard
  }
  dialogbutton $w.b.close -textvar ::tr(Close) -command {
    catch {destroy .noveltyWin}
  }
  packbuttons right $w.b.close $w.b.go $w.b.stop
  wm resizable $w 0 0
  focus $w.b.go
  bind $w <KeyPress-1> "$w.b1 invoke"
  bind $w <KeyPress-2> "$w.b2 invoke"
  bind $w <KeyPress-3> "$w.b3 invoke"
  bind $w <KeyPress-4> "$w.b4 invoke"
  updateNoveltyWin
}

proc updateNoveltyWin {} {
  set w .noveltyWin
  if {! [winfo exists $w]} { return }
  set numBases [sc_base count total]
  $w.older configure -text "$::tr(SelectOlderGames) (< [sc_game info date])"
  for {set i 1} {$i <= $numBases} {incr i} {
    set name [file tail [sc_base filename $i]]
    set ng [::utils::thousands [sc_base numGames $i]]
    set text "Base $i: $name ($ng $::tr(games))"
    $w.b$i configure -state normal -text $text
    if {$ng == 0} { $w.b$i configure -state disabled }
  }
}

set merge(ply) 40

# mergeGame:
#   Produces a dialog for the user to merge a selected game into
#   the current game.
#
proc mergeGame {{base 0} {gnum 0}} {
  global merge glNumber
  if {$base == 0} {
    if {$glNumber < 1} { return }
    if {$glNumber > [sc_base numGames]} { return }
    set base [sc_base current]
    set gnum $glNumber
  }
  sc_game push copy
  set err [catch {sc_game merge $base $gnum} result]
  sc_game pop
  if {$err} {
    tk_messageBox -title "Scid" -type ok -icon info \
        -message "Unable to merge the selected game:\n$result"
    return
  }
  set merge(base) $base
  set merge(gnum) $gnum
  set w .mergeDialog
  toplevel $w
  wm title $w "Scid: $::tr(MergeGame)"
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <F1> {helpWindow GameList Browsing}
  label $w.title -text $::tr(Preview:) -font font_Bold
  pack $w.title -side top
  pack [frame $w.b] -side bottom -fill x
  frame $w.f
  text $w.f.text -background white -wrap word -width 60 -height 20 \
      -font font_Small -yscrollcommand "$w.f.ybar set"
  scrollbar $w.f.ybar -takefocus 0 -command "$w.f.text yview"
  event generate $w.f.text <ButtonRelease-1>
  pack $w.f.ybar -side right -fill y
  pack $w.f.text -side left -fill both -expand yes
  pack $w.f -fill both -expand yes
  set small font_Small
  label $w.b.label -text "Up to move:" -font $small
  pack $w.b.label -side left
  foreach i {5 10 15 20 25 30 35 40} {
    radiobutton $w.b.m$i -text $i -variable merge(ply) -value [expr {$i * 2}] \
        -indicatoron 0 -padx 2 -pady 1 -font $small -command updateMergeGame
    pack $w.b.m$i -side left
  }
  radiobutton $w.b.all -text [::utils::string::Capital $::tr(all)] \
      -variable merge(ply) -value 1000 -indicatoron 0 -padx 2 -pady 1 \
      -font $small -command updateMergeGame
  pack $w.b.all -side left
  dialogbutton $w.b.ok -text "OK" -command {
    sc_game merge $merge(base) $merge(gnum) $merge(ply)
    catch {grab release .mergeDialog}
    destroy .mergeDialog
    updateBoard -pgn
  }
  dialogbutton $w.b.cancel -text $::tr(Cancel) \
      -command "catch {grab release $w}; destroy $w"
  packbuttons right $w.b.cancel $w.b.ok
  grab $w
  updateMergeGame
}

proc updateMergeGame {args} {
  global merge
  set w .mergeDialog
  if {! [winfo exists $w]} { return }
  sc_game push copy
  sc_game merge $merge(base) $merge(gnum) $merge(ply)
  set pgn [sc_game pgn -indentV 1 -short 1 -width 60]
  sc_game pop
  $w.f.text configure -state normal
  $w.f.text tag configure red -foreground darkRed
  $w.f.text tag configure blue -foreground darkBlue
  $w.f.text delete 1.0 end
  foreach line [split $pgn "\n"] {
    if {[string index $line 0] == " "} {
      $w.f.text insert end $line blue
    } else {
      $w.f.text insert end $line
    }
    $w.f.text insert end "\n"
  }
  $w.f.text tag add red 1.0 4.0
  #$w.f.text insert end $pgn
  $w.f.text configure -state disabled
}

# setExportText:
#   Allows the user to modify the text printed at the start and end of a
#   file for a particular export format
#
proc setExportText {exportType} {
  global exportStartFile exportEndFile
  
  switch -- $exportType {
    "PGN" {
      set title "Set PGN file export text"
    }
    "HTML" {
      set title "Set HTML file export text"
    }
    "LaTeX" {
      set title "Set LaTeX file export text"
    }
    default {
      return
    }
  }
  
  set w .setExportText$exportType
  if {[winfo exists $w]} { return }
  toplevel $w
  wm title $w "Scid: $title"
  
  frame $w.buttons
  pack $w.buttons -side bottom -fill x -anchor e
  
  set pane [::utils::pane::Create $w.pane start end 500 400]
  ::utils::pane::SetRange $w.pane 0.3 0.7
  pack $pane -side top -expand true -fill both
  foreach f [list $pane.start $pane.end] type {start end} {
    label $f.title -font font_Bold -text "Text at $type of $exportType file:"
    text $f.text -wrap none -background white \
        -yscroll "$f.ybar set" -xscroll "$f.xbar set"
    scrollbar $f.ybar -orient vertical -command "$f.text yview"
    scrollbar $f.xbar -orient horizontal -command "$f.text xview"
    bind $f.text <FocusIn> {%W configure -background lightYellow}
    bind $f.text <FocusOut> {%W configure -background white}
    grid $f.title -row 0 -column 0 -sticky w
    grid $f.text -row 1 -column 0 -sticky nesw
    grid $f.ybar -row 1 -column 1 -sticky nesw
    grid $f.xbar -row 2 -column 0 -sticky nesw
    grid rowconfig $f 1 -weight 1 -minsize 0
    grid columnconfig $f 0 -weight 1 -minsize 0
  }
  
  $pane.start.text insert end $exportStartFile($exportType)
  $pane.end.text insert end $exportEndFile($exportType)
  
  button $w.buttons.default -text "Reset to Default" -command "
  $pane.start.text delete 1.0 end
  $pane.start.text insert end \$default_exportStartFile($exportType)
  $pane.end.text delete 1.0 end
  $pane.end.text insert end \$default_exportEndFile($exportType)
  "
  dialogbutton $w.buttons.ok -text "OK" -command "
  set exportStartFile($exportType) \[$pane.start.text get 1.0 end-1c\]
  set exportEndFile($exportType) \[$pane.end.text get 1.0 end-1c\]
  focus .
  destroy $w
  "
  dialogbutton $w.buttons.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
  pack $w.buttons.default -side left -padx 5 -pady 2
  pack $w.buttons.cancel $w.buttons.ok -side right -padx 5 -pady 2
  focus $pane.start.text
}

image create photo htmldiag0 -data {
  R0lGODdhbgBkAIAAAAAAAP///ywAAAAAbgBkAAAC/oyPqcvtD6OctNqLs968+w+G4kiW5omm
  6moAgQu/ckzPdo3fes7vfv5wsYQtBFF2OCqNzCPrs4xEi0mQEyWcApxbqhfpvYa2ZCNZeQ4y
  k122YgqGNs7oMtu+aH9f6XT1vydm5ddCyIenlkB3KAgnePFIJzm5yECkRVmpuPbokflpaLl2
  eKeHCNcRCQo6F3e52qY3Gve04QhbJkvrGYQb+jbrB8sHaJPi25mnGItLvDmRnLwnCpH1luUb
  WGwpLdUsIdaFHLtdHe09bM45Lkw9p4uRXfHKbseFntibnk9fT/4XDR6kb+BKsfrkrFuhc+b2
  OYhh0J+1Z+8U6ltVMGIm/kaTpnnL95DgQzPpMC6RJtCCPArMOmqsNDFjq4YYq5lZGKokxZEc
  Vtok5pIkwl2p0NXsZZDUsmH3fmpIuWxeUKEHy828yo0dT6p5sk3sZrGrP6dWx3kMCRKYykhE
  xcpD1fWpxK1tOX4LK9OtVneuliKjAnEEIqkMA9UrgjctTokCY+4a29fvL6OM2ZabW3co1peH
  rwVb3DmM5lpSRlV2DHryrGPFEidqShrS59azz2Zw/TTyF0e168aG1ps3bRG4bz8pvqmH8h/M
  lztvDj0wVuG7g/sW3Bv48Orbr7Purky3eOpgkMsenxcuX/XHs3NzzzG8NsJQ38EnG2Uq+rWa
  /s7bVrvfRtwBxhIlLHWnEHUCklegfumtpgx5AloHjYHAMTjdahbeB46D+EG4Hoj68YaXh3Sx
  B9IVrADo3TUTHmjVTHA5pFuCR70G4oeSaYZiRTemyGJcw72lIWWj2TckjKLRKN5FKypZHj/B
  iBQZWFS6g2GIVI3Wo15HApljFTMSlKWLP4oyo45L8himkxuq2eJ+nKV0UoUvgvlfhmb2x2FI
  JsL505hPDmjjoDx1qeWWEyK655d6tunMNGbt5N2kaF0Wlop7DejnX9qRJGWj++TnJpMUhVPf
  bJhBOqehWqompmmQgbejT8Bgkup4s8aZ2pU71VGYK4xVp8qqLAJriREXw1LqpaV0xXeoqJ4C
  Uuyuz2g62KvL5tnqmb8uhhS128Imra03iZvtsz2xikU8CFLInXkqvVsavZwyekKZTcArZ5Pt
  6vutvf3GBjC7VrRX1HMKR8fwwg4bo26+/Eq4729FCUyxHEPcO7FpFtvSscC8DJExx9vI+3G/
  JfNK1ncqh4zybyuvLEEBADs=
}

image create photo htmldiag1 -data {
  R0lGODdhbgBkAIQAAAAAAAsLCxYWFiAgICsrKzY2NkBAQEtLS1VVVWBgYGtra3V1dYCAgIuL
  i5WVlaCgoKqqqrW1tcDAwMrKytXV1eDg4Orq6vX19f//////////////////////////////
  /ywAAAAAbgBkAAAF/iAmjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IJBGAYTqb0Kc0
  Sp1aq9irNst9vphLkYWAEFEEkFGEIkIQLJhxGUMhsDGQ9wis7MnNaCducH90diJ5cBgVQ3xC
  AIVnaSMLiHqRh3h6GAgNUCsRBgd3NRIAp3ymqKcMe6gSKQdzkiIScAYKJJh3iW1zLBWoAzGO
  GKqnI8eorSKrsCcAk7QiDG8GAA4kjIa8mwi/xSbKN8oS5g6rpwnm5SvTcAwAA6gFtrrbvZy/
  LgWnk18llKUbSPCZCSbTIBjAEIGgvAQPSEjwNscCrHAmCJzaN0Ogw48GTSQUwMaCgFMH/lAJ
  YJBAwEpFI76JIRChBYJVAmAU8/ixIAoABiZBIDlCAQACFfrJY2Qh3oAJMSsSmIRxBIR0w2zc
  7PmRYwlFQ0lNOLXQwqoEjCaczEZn5j8VFU7i1CnoFLu7eM1tVAEmLIl5AARYMJuu1RkAv8a8
  rYpBabocKV0AONDCL0MMD7juPTwpKCJmKMYSpHsiHoPTqFOnBgD6p2UEEa8JANyVzklSeIhW
  dfwYRzzNy1gguDOoCS+uZdARsEo0BYWPpE38Bs56BZ/iwQrcudazZr+IEZp/KjF9YI7ymlur
  KN6YrEa5HwUHG1bhzrYT3EcDLE2dlXVOmzTUX3AJAEAKAq1g/pSfeb4NqN4JCmwS14DCMARA
  JQDCZMKCvUmGAnpcPVjChYqMgdxHbMijiSIYgYjKeQ7CoJEBGhGUy0etXFPBYKBAt590MfIV
  h0XVmVVAjQQcABVPZGFQYE1xXIQCfAMsEIE5MPYn4ldvPCdBeNk4RUID8WFgWhwEeJLCAqew
  NUNV8Ui25R6yiEDAAC6J0A9UI/Bm3pl1jldCMMtFkAB3OJgo2SYp/HMYA3VEQ4KAKJpC2X0q
  sEkbAyGxEI6JQBkg6qikjnoKoweJsOMiFBAKJSBc6bUQCYzFQ+YpA8xaQ0oUouROJiiEp5le
  GFIQkQrTCWDAadGJQRuFA2hIax28/qg5ggV+gmSKYQLUxBiZNOUAaq+nShtTN4owVSNwFpDZ
  ylQsmGJLA4fq2oIjLlIoIh/5DIeBUf2ZCUBNrzLR1IIDaPQsYyzkGyQK/ZYRzIBOGmiCSQH/
  KDC5q+y7oi8i3KrlPFYlyKZmVc7ZMMcdQ0zRCBOUKvPMuCDSHIcEudlsECSCHOUNzU2mLAMN
  5IVlHzLIhOZbM2CKKQ8M7wCG0orZTNwlZAAilHiCIu3117R2IfYWZI9tdtlo0xBJILldTUjW
  3FhirhFrb42bh3VbLYICB7w9Syb5MBK1DgbDPdIducCQd9snUKAmtXK3YW0Ri1smw2SzsG05
  HUTfB/nH/vo088IDpzUwN1+BHk7C3SxIo3lzjGzlDwYXAP6y4usGxvoKrtutKieDh22b75xU
  IJpKcOBzu+grp1MAaaoXL5oM0SPwPIgGRSxGpyrgHHwJ1V+PzBfV63E8KttEcPsY3rYAYlaS
  lQ/H9DB4xjgGCyygyAPwAWUu1fByQVMG4pUV2M8y+dvfSXQCFq7F4QG5UwlEKCGVfzCsAg3o
  3yqqxCfrNPBuFoDgi2RgmQTAQVhceYouAtg8zRTgaY1qjgkZokG6vKYVlAIOn6qGhwShAGDU
  EYyQbmghBr3gNXpYWArtRLwTTGxACeBdc4qjxO81w18ZMkavTqi3rlGjV8tJ/gFi3KZF/SRt
  ExSQWTqUVar7bO4EDyhVBOVRKsrYBI1qtOInisOjg6zCXiWwjOBa4BGVpSqLfRyRHtuANfuQ
  Ih2AZA5xDCmRgVDSBHzMRH1coZMI+c0MmcjhKdRFvOIED4j06CTW/nYHAcVAf2hi5QjmWIkH
  lBJVK3hiOjrYAljuYpbj81AsQUmK5wwkJ5JkJEwGl68oCvOXZhgh7mRJCYdACYmE4B4KqhiY
  GEBTBCfTIyQMB7iaeK864SHjGDwRNV0OBIY/gSYEzClNF6TOdnD4yEIeoE64xasn2kTBPdHV
  hHp6Shr4tJNDMKTMYTLPOT3ZHTQQSlAMrGsGn8tH/hHXeKBVxkB26QgjDDLKKErRhaTSoqU2
  PkmHiAzOna8ACEpLUKMYzDQOETgNQQZwGoOs7VUoqEBOC0SQBHAKniJJKE51Gsx7YbEXFiAq
  cFYiArZMAyMUyFZPCsDLgzz1ElJdBQ2gOkfN/GIaKDhMr4DaKKw5hDT5EBmFoIJWL/KqV8iE
  RuQwINcOHZFR50wPBg4glC2xDAAB3SsGAquTfKSBdKqJrGQ5RQK/hGOymFUNUqOxicdi9pWK
  QEDicPBGIsCSE6PFwXUqwoALiCACbmrAJJrCJwq0tote/MFqxXBbhugsaRXsYiYz10QlALCU
  OwPCImmwXLqk7blniy50waebXN1qTbgeHd5elfZQsN1Afg5NyPpOJ7UiGOh1/STudqWSIu/i
  AL0Nrdz6WMgz815zitkVb2iD21331gCb4dXcfJlW3zAAWL77dYsZBunf/+KXpfr1GQ/rgNTy
  LuHBARbKgInZ3wbDYBvDvS7ojsvhMJg4xNodMX8/12EPvwDFEQ7d0kqMgMQSzrwwFnCCZxy3
  LDbXxfnVsYQD+Dn2PMK8M1GvihXcYyP/2MUIHjJF40veGy8hyjKecCYyKSUYhAAAOw==
}

# exportOptions:
#   Prompts the user to select exporting options.
#
proc exportOptions {exportType} {
  global exportFlags
  
  set w .exportFlagsWin
  set exportFlags(ok) -1
  toplevel $w
  wm title $w "Scid: [tr OptionsExport]"
  # wm transient $w .
  wm protocol $w WM_DELETE_WINDOW { }
  bind $w <Escape> "$w.b.cancel invoke"
  bind $w <Return> "$w.b.ok invoke"
  bind $w <F1> {helpWindow Export}
  
  pack [frame $w.o] -side top -fill x -pady 5 -padx 5
  label $w.o.append -text $::tr(AddToExistingFile)
  radiobutton $w.o.appendYes -text $::tr(Yes) \
      -variable exportFlags(append) -value 1
  radiobutton $w.o.appendNo -text $::tr(No) \
      -variable exportFlags(append) -value 0
  label $w.o.comments -text $::tr(ExportComments)
  radiobutton $w.o.commentsOn -text $::tr(Yes) \
      -variable exportFlags(comments) -value 1
  radiobutton $w.o.commentsOff -text $::tr(No) \
      -variable exportFlags(comments) -value 0
  label $w.o.stripMarks -text $::tr(ExportStripMarks)
  radiobutton $w.o.stripMarksOn -text $::tr(Yes) \
      -variable exportFlags(stripMarks) -value 1
  radiobutton $w.o.stripMarksOff -text $::tr(No) \
      -variable exportFlags(stripMarks) -value 0
  label $w.o.indentc -text $::tr(IndentComments)
  radiobutton $w.o.indentcOn -text $::tr(Yes) \
      -variable exportFlags(indentc) -value 1
  radiobutton $w.o.indentcOff -text $::tr(No) \
      -variable exportFlags(indentc) -value 0
  label $w.o.vars -text $::tr(ExportVariations)
  radiobutton $w.o.varsOn -text $::tr(Yes) -variable exportFlags(vars) -value 1
  radiobutton $w.o.varsOff -text $::tr(No) -variable exportFlags(vars) -value 0
  label $w.o.indentv -text $::tr(IndentVariations)
  radiobutton $w.o.indentvOn -text $::tr(Yes) \
      -variable exportFlags(indentv) -value 1
  radiobutton $w.o.indentvOff -text $::tr(No) \
      -variable exportFlags(indentv) -value 0
  label $w.o.column -text $::tr(ExportColumnStyle)
  radiobutton $w.o.columnOn -text $::tr(Yes) \
      -variable exportFlags(column) -value 1
  radiobutton $w.o.columnOff -text $::tr(No) \
      -variable exportFlags(column) -value 0
  label $w.o.symbols -text $::tr(ExportSymbolStyle)
  radiobutton $w.o.symbolsOn -text "! +=" \
      -variable exportFlags(symbols) -value 1
  radiobutton $w.o.symbolsOff -text {$2 $14} \
      -variable exportFlags(symbols) -value 0
  grid $w.o.append -row 0 -column 0 -sticky w
  grid $w.o.appendYes -row 0 -column 1 -sticky w
  grid $w.o.appendNo -row 0 -column 2 -sticky w
  grid $w.o.comments -row 1 -column 0 -sticky w
  grid $w.o.commentsOn -row 1 -column 1 -sticky w
  grid $w.o.commentsOff -row 1 -column 2 -sticky w
  grid $w.o.stripMarks -row 2 -column 0 -sticky w
  grid $w.o.stripMarksOn -row 2 -column 1 -sticky w
  grid $w.o.stripMarksOff -row 2 -column 2 -sticky w
  grid $w.o.indentc -row 3 -column 0 -sticky w
  grid $w.o.indentcOn -row 3 -column 1 -sticky w
  grid $w.o.indentcOff -row 3 -column 2 -sticky w
  grid $w.o.vars -row 4 -column 0 -sticky w
  grid $w.o.varsOn -row 4 -column 1 -sticky w
  grid $w.o.varsOff -row 4 -column 2 -sticky w
  grid $w.o.indentv -row 5 -column 0 -sticky w
  grid $w.o.indentvOn -row 5 -column 1 -sticky w
  grid $w.o.indentvOff -row 5 -column 2 -sticky w
  grid $w.o.column -row 6 -column 0 -sticky w
  grid $w.o.columnOn -row 6 -column 1 -sticky w
  grid $w.o.columnOff -row 6 -column 2 -sticky w
  grid $w.o.symbols -row 7 -column 0 -sticky w
  grid $w.o.symbolsOn -row 7 -column 1 -sticky w
  grid $w.o.symbolsOff -row 7 -column 2 -sticky w
  
  # Extra option for PGN format: handling of null moves
  if {$exportType == "PGN"} {
    label $w.o.space -text ""
    grid $w.o.space -row 8 -column 0 -sticky w
    label $w.o.nullMoves -text "Convert null moves to comments"
    radiobutton $w.o.convertNullMoves -text $::tr(Yes) \
        -variable exportFlags(convertNullMoves) -value 1
    radiobutton $w.o.keepNullMoves -text $::tr(No) \
        -variable exportFlags(convertNullMoves) -value 0
    grid $w.o.nullMoves -row 9 -column 0 -sticky w
    grid $w.o.convertNullMoves -row 9 -column 1 -sticky w
    grid $w.o.keepNullMoves -row 9 -column 2 -sticky w
  }
  
  # Extra option for HTML format: diagram image set
  if {$exportType == "HTML"} {
    label $w.o.space -text ""
    label $w.o.hdiag -text "Diagram"
    radiobutton $w.o.hb0 -text "bitmaps" \
        -variable exportFlags(htmldiag) -value 0
    radiobutton $w.o.hb1 -text "bitmaps2" \
        -variable exportFlags(htmldiag) -value 1
    label $w.o.hl0 -image htmldiag0
    label $w.o.hl1 -image htmldiag1
    grid $w.o.space -row 8 -column 0
    grid $w.o.hdiag -row 9 -column 0 -sticky w
    grid $w.o.hb0 -row 9 -column 1 -sticky w
    grid $w.o.hb1 -row 9 -column 2 -sticky w
    grid $w.o.hl0 -row 10 -column 1
    grid $w.o.hl1 -row 10 -column 2
  }
  
  addHorizontalRule $w
  pack [frame $w.b] -side top
  dialogbutton $w.b.ok -text "OK" -command {
    set exportFlags(ok) 1
  }
  dialogbutton $w.b.cancel -text $::tr(Cancel) -command {
    set exportFlags(ok) 0
  }
  pack $w.b.ok $w.b.cancel -side left -padx 5 -pady 5
  
  wm withdraw $w
  update idletasks
  set x [expr {[winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 \
        - [winfo vrootx [winfo parent $w]]}]
  set y [expr {[winfo screenheight $w]/2 - [winfo reqheight $w]/2 \
        - [winfo vrooty [winfo parent $w]]}]
  wm geom $w +$x+$y
  wm deiconify $w
  
  grab $w
  tkwait variable exportFlags(ok)
  grab release $w
  destroy $w
  return $exportFlags(ok)
}

# exportGames:
#   exports current game or all filtered games to a new PGN, LaTeX or Html file.
#
proc exportGames {selection exportType} {
  global ::pgn::moveNumberSpaces exportStartFile exportEndFile exportFlags
  set exportFilter 0
  if {$selection == "filter"} { set exportFilter 1 }
  if {$exportFilter} {
    # Check that we have some games to export:
    if {![sc_base inUse]} {
      tk_messageBox -title "Scid: Empty database" -type ok -icon info \
          -message "This is an empty database, there are no games to export."
      return
    }
    if {[sc_filter count] == 0} {
      tk_messageBox -title "Scid: Filter empty" -type ok -icon info \
          -message "The filter contains no games."
      return
    }
  }
  
  if {[exportOptions $exportType] == 0} { return }
  sc_info html $exportFlags(htmldiag)
  
  switch -- $exportType {
    "PGN" {
      set ftype {
        { "PGN files" {".pgn"} }
        { "All files" {"*"} }
      }
      set title "a PGN file"
      set idir $::initialDir(base)
      set default ".pgn"
    }
    "HTML" {
      set ftype {
        { "HTML files" {".html" ".htm"} }
        { "All files" {"*"} }
      }
      set title "an HTML file"
      set idir $::initialDir(html)
      set default ".html"
    }
    "LaTeX" {
      set ftype {
        { "LaTeX files" {".tex" ".ltx"} }
        { "All files" {"*"} }
      }
      set title "a LaTeX file"
      set idir $::initialDir(tex)
      set default ".tex"
    }
    default { return }
  }
  
  if {$exportFlags(append)} {
    set getfile tk_getOpenFile
    set title "Add games to $title"
  } else {
    set getfile tk_getSaveFile
    set title "Create $title"
  }
  set fName [$getfile -initialdir $idir -filetypes $ftype -defaultextension $default -title $title]
  if {$fName == ""} { return }
  if {$exportFilter} {
    progressWindow "Scid" "Exporting games..." $::tr(Cancel) "sc_progressBar"
  }
  busyCursor .
  sc_base export $selection $exportType $fName -append $exportFlags(append) \
      -starttext $exportStartFile($exportType) \
      -endtext $exportEndFile($exportType) \
      -comments $exportFlags(comments) -variations $exportFlags(vars) \
      -space $::pgn::moveNumberSpaces -symbols $exportFlags(symbols) \
      -indentC $exportFlags(indentc) -indentV $exportFlags(indentv) \
      -column $exportFlags(column) -noMarkCodes $exportFlags(stripMarks) \
      -convertNullMoves $exportFlags(convertNullMoves)
  unbusyCursor .
  if {$exportFilter} {
    closeProgressWindow
  }
}

proc copyFilter {frombaseNum tobaseNum} {
  # Check status of source and target bases:
  set currentBaseNum [sc_base current]
  sc_base switch $frombaseNum
  set nGamesToCopy [sc_filter count]
  set fromInUse [sc_base inUse]
  set fromName [file tail [sc_base filename]]
  sc_base switch $tobaseNum
  set targetInUse [sc_base inUse]
  set targetName [file tail [sc_base filename]]
  set targetReadOnly [sc_base isReadOnly]
  sc_base switch $currentBaseNum
  set err ""
  if {$nGamesToCopy == 0} {
    set err "$::tr(CopyErrSource) $::tr(CopyErrNoGames)."
  }
  if {$targetReadOnly} {
    set err "$::tr(CopyErrTarget) ($targetName) $::tr(CopyErrReadOnly)."
  }
  if {! $targetInUse} {set err "$::tr(CopyErrTarget) $::tr(CopyErrNotOpen)."}
  if {! $fromInUse} {set err "$::tr(CopyErrSource) $::tr(CopyErrNotOpen)."}
  if {$frombaseNum == $tobaseNum} {
    set err "$::tr(CopyErrSource) == $::tr(CopyErrTarget)."
  }
  
  if {$err != ""} {
    tk_messageBox -type ok -icon info -title "Scid" \
        -message "$::tr(CopyErr) \n\"$fromName\" -> \"$targetName\": \n$err"
    return
  }
  
  # If copying to the clipbase, do not bother asking for confirmation:
  if {$tobaseNum == [sc_info clipbase]} {
    progressWindow "Scid" "$::tr(CopyGames)..." $::tr(Cancel) "sc_progressBar"
    busyCursor .
    set copyErr [catch {sc_filter copy $frombaseNum $tobaseNum} result]
    unbusyCursor .
    closeProgressWindow
    if {$copyErr} {
      tk_messageBox -type ok -icon info -title "Scid" -message $result
    }
    ::notify::DatabaseChanged
    return
  }
  
  set w [toplevel .fcopyWin]
  wm title $w "Scid: $::tr(CopyGames)"
  bind $w <Destroy> "::notify::DatabaseChanged"
  label $w.text -text [subst $::tr(CopyConfirm)]
  frame $w.b
  dialogbutton $w.b.go -text $::tr(CopyGames) -command "
  busyCursor .
  $w.b.cancel configure -command \"sc_progressBar\"
  $w.b.cancel configure -text $::tr(Stop)
  sc_progressBar $w.bar bar 301 21 time
  grab $w.b.cancel
  if {\[catch {sc_filter copy $frombaseNum $tobaseNum} result\]} {
    tk_messageBox -type ok -icon info \
        -title \"Scid\" -message \$result
  }
  unbusyCursor .
  focus .
  destroy $w
  "
  dialogbutton $w.b.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
  canvas $w.bar -width 300 -height 20 -bg white -relief solid -border 1
  $w.bar create rectangle 0 0 0 0 -fill blue -outline blue -tags bar
  $w.bar create text 295 10 -anchor e -font font_Regular -tags time \
      -fill black -text "0:00 / 0:00"
  
  pack $w.text $w.b -side top -pady 5
  pack $w.bar -side bottom
  pack $w.b.go $w.b.cancel -side left -padx 10 -pady 10
  grab $w
  bind $w <Return> "$w.b.go invoke"
  bind $w <Escape> "$w.b.cancel invoke"
  focus $w.b.go
}


###########################################################################
### Global variables used in gameSave:
set date 0; set year 0; set month 0; set day 0; set white 0; set black 0
set resultVal 0; set event 0; set site 0; set round 0
set whiteElo 0; set blackElo 0; set eco 0; set extraTags ""
set whiteRType "Elo"; set blackRType "Elo"
set edate 0; set eyear 0; set emonth 0; set eday 0

# Traces on game-save dialog variables to ensure sane values:

trace variable resultVal w  ::utils::validate::Result
trace variable whiteElo w {::utils::validate::Integer [sc_info limit elo] 0}
trace variable blackElo w {::utils::validate::Integer [sc_info limit elo] 0}
trace variable year w {::utils::validate::Integer [sc_info limit year] 1}
trace variable month w {::utils::validate::Integer 12 1}
trace variable day w {::utils::validate::Integer 31 1}
trace variable eyear w {::utils::validate::Integer [sc_info limit year] 1}
trace variable emonth w {::utils::validate::Integer 12 1}
trace variable eday w {::utils::validate::Integer 31 1}

set gsaveNum 0
set i 0; set j 0
set temp 0

array set nameMatches {}
set nameMatchCount 0

# updateMatchList:
#    Called from gameSave to update the matching name list as the user
#    types a player/site/event/round name.
#
proc updateMatchList { tw nametype maxMatches name el op } {
  global nameMatches nameMatchCount
  global $name editNameType
  if {![winfo exists $tw]} return
  
  if {$nametype == ""} { set nametype $editNameType }
  if {$nametype == "rating"} { set nametype "player" }
  set val [set $name]
  $tw configure -state normal
  $tw delete 0.0 end
  set matches {}
  catch {set matches [sc_name match $nametype $val $maxMatches]}
  set count [llength $matches]
  set nameMatchCount [expr {$count / 2}]
  for {set i 0} { $i < $count } {incr i 2} {
    set nameMatchCount [expr {($i / 2) + 1}]
    set nameMatches($nameMatchCount) [lindex $matches [expr {$i + 1}]]
    set str "$nameMatchCount:\t[lindex $matches $i]\t$nameMatches($nameMatchCount)\n"
    $tw insert end $str
  }
  $tw configure -state disabled
}

proc clearMatchList { tw } {
  global nameMatches nameMatchCount
  set nameMatchCount 0
  $tw configure -state normal
  $tw delete 0.0 end
  $tw configure -state disabled
}

# Traces to update the match list as names are typed in:

trace variable event w { updateMatchList .save.g.list e 9 }
trace variable site  w { updateMatchList .save.g.list s 9 }
trace variable white w { updateMatchList .save.g.list p 9 }
trace variable black w { updateMatchList .save.g.list p 9 }
trace variable round w { updateMatchList .save.g.list r 9 }

set editName ""
set editNameNew ""
set editNameType "player"
set editNameSelect "all"
set editNameRating ""
set editNameRType "Elo"
set editDate ""
set editDateNew ""

trace variable editNameRating w {::utils::validate::Integer [sc_info limit elo] 0}
trace variable editName w { updateMatchList .nedit.g.list "" 9 }
trace variable editDate w ::utils::validate::Date
trace variable editDateNew w ::utils::validate::Date

proc editNameNewProc { tw nametype maxMatches name el op } {
  global editNameNew
  if {! [winfo exists .nedit]} { return }
  if {[string compare $editNameNew ""]} {
    .nedit.buttons.replace configure -state normal
  } else {
    .nedit.buttons.replace configure -state disabled
  }
  catch {updateMatchList $tw $nametype $maxMatches $name $el $op}
}

trace variable editNameNew w { editNameNewProc .nedit.g.list "" 9 }


set nameEditorWin 0

proc makeNameEditor {} {
  if {! [winfo exists .nedit]} { nameEditor }
}

proc setNameEditorType {type} {
  if {! [winfo exists .nedit]} { return }
  catch {.nedit.typeButtons.$type invoke}
}

proc nameEditor {} {
  global editName editNameType editNameNew nameEditorWin editNameSelect
  global editNameRating editDate editDateNew
  
  set w .nedit
  if {[winfo exists $w]} {
    destroy $w
    return
  }
  toplevel $w
  wm title $w "Scid: [tr FileMaintNameEditor]"
  set nameEditorWin 1
  setWinLocation $w
  bind $w <Configure> "recordWinSize $w"
  
  label $w.typeLabel -textvar ::tr(NameEditType:) -font font_Bold
  frame $w.typeButtons
  pack $w.typeLabel $w.typeButtons -side top -pady 5
  foreach i { "Player" "Event" "Site" "Round"} {
    set j [string tolower $i]
    radiobutton $w.typeButtons.$j -textvar ::tr($i) -variable editNameType \
        -value $j -indicatoron false -pady 5 -padx 5 -command {
          grid remove .nedit.g.ratingE
          grid remove .nedit.g.rtype
          grid remove .nedit.g.fromD
          grid remove .nedit.g.toD
          grid .nedit.g.toL -row 1 -column 1 -sticky e
          grid .nedit.g.fromE -row 0 -column 2 -sticky w
          grid .nedit.g.toE -row 1 -column 2 -sticky w
        }
    pack $w.typeButtons.$j -side left -padx 5
  }
  radiobutton $w.typeButtons.rating -textvar ::tr(Rating) -variable editNameType \
      -value rating -indicatoron false -pady 5 -padx 5 -command {
        grid remove .nedit.g.toE
        grid remove .nedit.g.toL
        grid remove .nedit.g.fromD
        grid remove .nedit.g.toD
        grid .nedit.g.fromE -row 0 -column 2 -sticky w
        grid .nedit.g.rtype -row 1 -column 0 -columnspan 2 -sticky e
        grid .nedit.g.ratingE -row 1 -column 2 -sticky w
      }
  radiobutton $w.typeButtons.date -textvar ::tr(Date) -variable editNameType \
      -value date -indicatoron false -pady 5 -padx 5 -command {
        grid remove .nedit.g.toE
        grid remove .nedit.g.fromE
        grid remove .nedit.g.ratingE
        grid remove .nedit.g.rtype
        grid .nedit.g.fromD -row 0 -column 2 -sticky w
        grid .nedit.g.toL -row 1 -column 1 -sticky e
        grid .nedit.g.toD -row 1 -column 2 -sticky w
      }
  radiobutton $w.typeButtons.edate -textvar ::tr(EventDate) \
      -variable editNameType -value edate -indicatoron false -pady 5 -padx 5 \
      -command {
        grid remove .nedit.g.toE
        grid remove .nedit.g.fromE
        grid remove .nedit.g.ratingE
        grid remove .nedit.g.rtype
        grid .nedit.g.fromD -row 0 -column 2 -sticky w
        grid .nedit.g.toL -row 1 -column 1 -sticky e
        grid .nedit.g.toD -row 1 -column 2 -sticky w
      }
  pack $w.typeButtons.rating $w.typeButtons.date $w.typeButtons.edate \
      -side left -padx 5
  
  addHorizontalRule .nedit
  
  label $w.selectLabel -textvar ::tr(NameEditSelect) -font font_Bold
  frame $w.selectButtons
  pack $w.selectLabel $w.selectButtons -side top -pady 5
  foreach i {all filter crosstable} row {0 1 2} text {
    SelectAllGames
    SelectFilterGames
    SelectTournamentGames
  } {
    radiobutton $w.selectButtons.$i -textvar ::tr($text) \
        -variable editNameSelect -value $i
    grid $w.selectButtons.$i -row $row -column 0 -sticky w
  }
  
  addHorizontalRule $w
  
  pack [frame $w.g] -side top
  label $w.g.space -text "    "
  grid $w.g.space $w.g.space -row 0 -column 0
  label $w.g.fromL -textvar ::tr(NameEditReplace:) -font font_Bold -anchor e
  entry $w.g.fromE -width 40 -background white -relief sunken \
      -textvariable editName
  entry $w.g.fromD -width 15 -background white -relief sunken \
      -textvariable editDate
  grid $w.g.fromL -row 0 -column 1 -sticky e
  grid $w.g.fromE -row 0 -column 2 -sticky we
  
  label $w.g.toL -textvar ::tr(NameEditWith:) -font font_Bold -anchor e
  entry $w.g.toE -width 40 -background white -relief sunken \
      -textvariable editNameNew
  entry $w.g.toD -width 15 -background white -relief sunken \
      -textvariable editDateNew
  grid $w.g.toL -row 1 -column 1 -sticky e
  grid $w.g.toE -row 1 -column 2 -sticky we
  
  entry $w.g.ratingE -width 5 -background white -relief sunken \
      -textvariable editNameRating -justify right
  eval tk_optionMenu $w.g.rtype editNameRType [sc_info ratings]
  $w.g.rtype configure -pady 2
  
  label $w.g.title -textvar ::tr(NameEditMatches) \
      -font font_Bold
  text $w.g.list -height 9 -width 40 -relief sunken \
      -background grey90 -tabs {2c right 2.5c left} -wrap none
  
  label $w.g.padding -text ""
  grid $w.g.padding -row 2 -column 0
  
  grid $w.g.title -row 3 -column 1 -columnspan 2 -sticky n
  grid $w.g.list -row 4 -column 1 -rowspan 9 -columnspan 2 -sticky n
  
  updateMatchList $w.g.list "" 9 editName "" w
  
  foreach i {fromE toE ratingE fromD toD} {
    bind $w.g.$i <FocusIn> { %W configure -background lightYellow }
    bind $w.g.$i <FocusOut> { %W configure -background white }
  }
  foreach {i j} {.nedit.g.fromE "editName"  .nedit.g.toE "editNameNew" } {
    for {set z 1} {$z <= 9} {incr z} {
      bind $i [format "<Control-Key-%d>" $z] \
          [format "eval {if {\$nameMatchCount >= %d} { \
              set %s \$nameMatches(%d)}}; break" $z $j $z ]
    }
  }
  
  addHorizontalRule $w
  
  frame $w.buttons
  button $w.buttons.replace -textvar ::tr(NameEditReplace) -command {
    if {$editNameType == "rating"} {
      set err [catch {sc_name edit $editNameType $editNameSelect $editName $editNameRating $editNameRType} result]
    } elseif {$editNameType == "date"  ||  $editNameType == "edate"} {
      set err [catch {sc_name edit $editNameType $editNameSelect $editDate $editDateNew} result]
    } else {
      set err [catch {sc_name edit $editNameType $editNameSelect $editName $editNameNew} result]
    }
    if {$err} {
      tk_messageBox -type ok -icon info -parent .nedit -title "Scid" \
          -message $result
    } else {
      .nedit.status configure -text $result
    }
    sc_game tags reload
    updateBoard -pgn
    ::windows::gamelist::Refresh
  }
  
  dialogbutton $w.buttons.cancel -textvar ::tr(Close) -command {focus .; destroy .nedit}
  pack $w.buttons -side top -pady 5
  pack $w.buttons.replace $w.buttons.cancel -side left -padx 10
  
  label $w.status -text "" -width 1 -font font_Small -relief sunken -anchor w
  pack $w.status -side bottom -fill x
  
  wm resizable $w 0 0
  bind $w <Escape> { focus .; destroy .nedit }
  bind $w <Return> {.nedit.buttons.replace invoke}
  bind $w <Destroy> {set nameEditorWin 0}
  bind $w <F1> {helpWindow Maintenance Editing}
  focus $w
  $w.typeButtons.$editNameType invoke
}


# addGameSaveEntry:
#   used in gameSave for setting up the simpler labels and entry boxes.
#
proc addGameSaveEntry { name row textname } {
  ttk::label .save.g.label$name -textvar $textname
  ttk::entry .save.g.entry$name -width 30 -textvariable $name
  grid .save.g.label$name -row $row -column 0 -sticky w
  grid .save.g.entry$name -row $row -column 1 -columnspan 7 -sticky w
}

# gameSave:
#   The game save dialog. Used for adding and replacing games. If the
#   value gnum is zero, it is to add a new game; otherwise it is to
#   replace game number gnum.
#
proc gameSave { gnum } {
  global date year month day white black resultVal event site round
  global whiteElo blackElo whiteRType blackRType eco extraTags gsaveNum
  global edate eyear emonth eday
  
  if {![sc_base inUse]} {
    # We can't load a game, no database is open
    tk_messageBox -title "Scid: No database open" -type ok -icon info -message "No database is open; open or create one first."
    return
  }
  
  # Make a new toplevel that contains the game save dialog:
  set w .save
  toplevel $w
  if {$gnum == 0} {
    wm title $w "Scid: [tr GameAdd]"
  } else {
    wm title $w "Scid: [tr GameReplace]"
  }
  set gsaveNum $gnum
  catch {grab $w}
  
  set f [ttk::frame $w.g]
  pack $f -side top
  
  ttk::label $f.title -textvar ::tr(NameEditMatches)
  text $f.list -height 9 -width 40 -relief sunken -background grey90 \
      -tabs {2c right 2.5c left} -wrap none
  
  # Get current values of tags:
  set year [sc_game tag get Year];    set eyear [sc_game tag get EYear]
  set month [sc_game tag get Month];  set emonth [sc_game tag get EMonth]
  set day [sc_game tag get Day];      set eday [sc_game tag get EDay]
  set white [sc_game tag get White];  set black [sc_game tag get Black]
  set event [sc_game tag get Event];  set site [sc_game tag get Site]
  set resultVal [sc_game tag get Result];  set round [sc_game tag get Round]
  set whiteElo [sc_game tag get WhiteElo]
  set blackElo [sc_game tag get BlackElo]
  set whiteRType [sc_game tag get WhiteRType]
  set blackRType [sc_game tag get BlackRType]
  set eco [sc_game tag get ECO];  set extraTags [sc_game tag get Extra]
  clearMatchList $f.list
  
  # Use question marks instead of zero values in date:
  if {$year == 0} { set year "????" }
  if {$month == 0} { set month "??" }
  if {$day == 0} { set day "??" }
  if {$eyear == 0} { set eyear "????" }
  if {$emonth == 0} { set emonth "??" }
  if {$eday == 0} { set eday "??" }
  
  addGameSaveEntry event 0 ::tr(Event:)
  addGameSaveEntry site 1 ::tr(Site:)
  
  ttk::frame $f.dateframe
  ttk::label $f.datelabel -textvar ::tr(Date:)
  ttk::entry $f.dateyear -width 6 -textvariable year -justify right ;# -background white -relief sunken
  ttk::label $f.datedot1 -text "."
  ttk::entry $f.datemonth -width 3 -textvariable month -justify right
  ttk::label $f.datedot2 -text "."
  ttk::entry $f.dateday -width 3 -textvariable day -justify right
  grid $f.datelabel -row 2 -column 0 -sticky w
  grid $f.dateframe -row 2 -column 1 -columnspan 5 -sticky w
  ttk::button $f.datechoose -image tb_calendar -style Pad0.Small.TButton -command {
    set newdate [::utils::date::chooser "$year-$month-$day"]
    if {[llength $newdate] == 3} {
      set year [lindex $newdate 0]
      set month [lindex $newdate 1]
      set day [lindex $newdate 2]
    }
  }
  ttk::button $f.today -textvar ::tr(Today) -command {
    set year [::utils::date::today year]
    set month [::utils::date::today month]
    set day [::utils::date::today day]
  }
  pack $f.dateyear $f.datedot1 $f.datemonth $f.datedot2 $f.dateday \
      -in $f.dateframe -side left
  if {$::tcl_version >= 8.3} {
    pack $f.datechoose -in $f.dateframe -side left
  }
  pack $f.today -in $f.dateframe -side left
  
  ttk::frame $f.edateframe
  ttk::label $f.edatelabel -textvar ::tr(EventDate:)
  ttk::entry $f.edateyear -width 6 -textvariable eyear -justify right
  ttk::label $f.edatedot1 -text "."
  ttk::entry $f.edatemonth -width 3 -textvariable emonth -justify right
  ttk::label $f.edatedot2 -text "."
  ttk::entry $f.edateday -width 3 -textvariable eday -justify right
  grid $f.edatelabel -row 3 -column 0 -sticky w
  grid $f.edateframe -row 3 -column 1 -columnspan 5 -sticky w
  ttk::button $f.edatechoose -image tb_calendar -style Pad0.Small.TButton -command {
    set newdate [::utils::date::chooser "$eyear-$emonth-$eday"]
    if {[llength $newdate] == 3} {
      set eyear [lindex $newdate 0]
      set emonth [lindex $newdate 1]
      set eday [lindex $newdate 2]
    }
  }
  ttk::button $f.esame -text "=$::tr(Date)" -command {
    set eyear $year
    set emonth $month
    set eday $day
  }
  pack $f.edateyear $f.edatedot1 $f.edatemonth $f.edatedot2 $f.edateday \
      -in $f.edateframe -side left
  if {$::tcl_version >= 8.3} {
    pack $f.edatechoose -in $f.edateframe -side left
  }
  pack $f.esame -in $f.edateframe -side left
  
  addGameSaveEntry round 4 ::tr(Round:)
  addGameSaveEntry white 5 ::tr(White:)
  addGameSaveEntry black 6 ::tr(Black:)
  
  ttk::label $f.reslabel -textvar ::tr(Result:)
  ttk::entry $f.resentry -width 2 -textvariable resultVal
  ttk::label $f.rescomment -text "(1, =, 0, *)"
  grid $f.reslabel -row 7 -column 0 -sticky w
  grid $f.resentry -row 7 -column 1 -sticky w
  grid $f.rescomment -row 7 -column 2 -columnspan 4 -sticky w
  
  ttk::label $f.welolabel -text "$::tr(White) "
  
  ttk::combobox $f.wrtype -values [sc_info ratings] -width 7 -textvariable whiteRType
  
  ttk::entry $f.weloentry -width 5 -textvariable whiteElo -justify right
  
  ttk::label $f.belolabel -text "$::tr(Black) "
  
  ttk::combobox $f.brtype -values [sc_info ratings] -width 7 -textvariable blackRType
  
  ttk::entry $f.beloentry -width 5 -textvariable blackElo -justify right
  
  grid $f.welolabel -row 8 -column 0 -sticky w
  grid $f.wrtype -row 8 -column 1 -sticky w
  grid $f.weloentry -row 8 -column 2 -sticky w
  grid $f.belolabel -row 9 -column 0 -sticky w
  grid $f.brtype -row 9 -column 1 -sticky w
  grid $f.beloentry -row 9 -column 2 -sticky w
  
  ttk::label $f.ecolabel -text "ECO Code:"
  ttk::entry $f.ecoentry -width 6 -textvariable eco
  grid $f.ecolabel -row 10 -column 0 -sticky w
  grid $f.ecoentry -row 10 -column 1 -sticky w
  
  ttk::button $f.ecob -textvar ::tr(ClassifyGame) -command {set eco [sc_eco game]}
  grid $f.ecob -row 10 -column 2 -sticky w
  
  grid $f.title -row 0 -column 8 -sticky n -padx 10
  grid $f.list -row 1 -column 8 -rowspan 9 -sticky nw -padx 10
  
  addHorizontalRule .save
  
  ttk::label .save.extralabel -text "Extra Tags: (example format: Annotator \"Anand, V\") "
  pack .save.extralabel -side top -fill x
  ttk::frame .save.extra
  text .save.extra.text -height 4 -width 40 -bg white -wrap none \
      -yscrollcommand ".save.extra.scroll set"
  # Override tab-binding for this text widget:
  bind .save.extra.text <Key-Tab> "[bind all <Key-Tab>]; break"
  ttk::scrollbar .save.extra.scroll -command ".save.extra.text yview" -takefocus 0
  ttk::button .save.extra.last -text "Use\nlast\ngame's\ntags" -command {
    set extraTags [sc_game tag get -last Extra]
    .save.extra.text delete 1.0 end
    .save.extra.text insert 1.0 $extraTags
  }
  pack .save.extra -side top -fill both -expand 1 -ipady 10
  pack .save.extra.text -side left -fill both -expand 1
  if {$gnum == 0} {
    pack .save.extra.last -side right -padx 10
  }
  pack .save.extra.scroll -side right -fill y
  .save.extra.text insert 1.0 $extraTags
  
  foreach i {entryevent entrysite dateyear datemonth dateday \
        entryround entrywhite entryblack resentry \
        weloentry beloentry ecoentry edateyear edatemonth edateday} {
    bind $f.$i <Return> {.save.buttons.save invoke}
    # bind $f.$i <FocusIn> {%W configure -background lightYellow }
    # bind $f.$i <FocusOut> {%W configure -background white }
  }
  bind .save.extra.text <FocusIn> {%W configure -background lightYellow }
  bind .save.extra.text <FocusOut> {%W configure -background white }
  
  # Bindings so Ctrl-1 to Ctrl-9 select a matching name in the player,
  # site, event and round entryboxes:
  
  set j 0
  foreach {i j} {entryevent "event" entrysite "site"
    entrywhite "white" entryblack "black"
    entryround "round" } {
    for {set z 1} {$z <= 9} {incr z} {
      bind $f.$i [format "<Control-Key-%d>" $z] \
          [format "eval {if {\$nameMatchCount >= %d} \
            {set %s \$nameMatches(%d)}}" $z $j $z ]
    }
  }
  
  addHorizontalRule .save
  
  ttk::frame .save.buttons
  if {$gnum == 0} {
    ttk::button .save.buttons.prev -text "As last game" -command {
    }
  }
  dialogbutton .save.buttons.save -textvar ::tr(Save) -underline 0 -command {
    set extraTags [.save.extra.text get 1.0 end-1c]
    gsave $gsaveNum;
    destroy .save
  }
  
  dialogbutton .save.buttons.cancel -textvar ::tr(Cancel) -command {destroy .save}
  pack .save.buttons -side bottom -ipady 10 -fill both -expand 1
  if {$gnum == 0} {
    #pack .save.buttons.prev -side left -padx 10
  }
  packbuttons right .save.buttons.cancel .save.buttons.save
  
  bind .save <Alt-s> {
    set extraTags [.save.extra.text get 1.0 end-1c]
    gsave $gsaveNum;
    focus .
    destroy .save
    break
  }
  bind .save <Escape> { focus .; destroy .save; }
  ::utils::win::Centre .save
  focus .save.g.entryevent
  .save.g.entryevent selection range 0 end
  if {$gnum > 0} { focus .save.buttons.save }
}

# gsave:
#    Called by gameSave when the user presses the "Save" button
#    to save the game. Attempts to save and reports the result.
#
proc gsave { gnum } {
  global date year month day white black resultVal event site round
  global whiteElo blackElo whiteRType blackRType eco extraTags
  global edate eyear emonth eday
  
  set date [format "%s.%s.%s" $year $month $day]
  set edate [format "%s.%s.%s" $eyear $emonth $eday]
  set extraTagsList [split $extraTags "\n"]
  sc_game tags set -event $event -site $site -date $date -round $round \
      -white $white -black $black -result $resultVal \
      -whiteElo $whiteElo -whiteRatingType $whiteRType \
      -blackElo $blackElo -blackRatingType $blackRType \
      -eco $eco -eventdate $edate -extra $extraTagsList
  set res [sc_game save $gnum]
  if {$res != ""} {
    tk_messageBox -type ok -icon info -parent .save \
        -title "Scid" -message $res
  }
  updateBoard -pgn
  ::windows::gamelist::Refresh
  updateTitle
}

# gameAdd:
#   Calls gameSave with a game number of zero.
#
proc gameAdd {} { gameSave 0 }

# gameReplace:
#   Calls gameSave with the current game number, which should be nonzero.
#
proc gameReplace {} { gameSave [sc_game number] }


# helpAbout:
#    Displays information about Scid.
#
proc helpAbout {} {
    # for {set g 1} { $g <= [sc_base numGames ] } {incr g} {
        # sc_game load $g
        # ::game::Strip comments
        # ::game::Strip variations
        # sc_game save $g
    # }
    # return
  ::utils::sound::PlaySound sound_move
  set str {}
  append str "Scid: Shane's chess information database\n\n"
  append str "Version $::scidVersion, $::scidVersionDate\n"
  append str "Using Tcl/Tk version: [info patchlevel]\n\n"
  append str "Copyright (C) 1999-2004 Shane Hudson\n"
  append str "Copyright (C) 2006-2009 Pascal Georges\n"
  append str "Copyright (C) 2010- The Scid Project\n"
  append str "Scid is licenced under the\n"
  append str "GNU General Public License.\n"
  set asserts [sc_info asserts]
  if {$asserts > 0} {
    append str "\n\n[::utils::thousands $asserts] asserts tested."
  }
  tk_messageBox -title "About Scid" -message $str -type ok
}

############################################################
#### Square Bindings:
# Pascal Georges : allow the drawing of markers directly on the board (not through comment editor)
set startArrowSquare ""

proc addMarker {sq color} {
  set to [::board::san $sq]
  set oldComment [sc_pos getComment]
  
  # check if the square is already of the same color
  set erase [regexp "\[\x5B\]%draw full,$to,$color\[\x5D\]" $oldComment]
  regsub "\[\x5B\]%draw full,$to,(green|yellow|red)\[\x5D\]" $oldComment "" newComment
  set newComment [string trim $newComment]
  if {!$erase} {
    append newComment " \[%draw full,$to,$color\]"
  }
  sc_pos setComment $newComment
  ::pgn::Refresh 1
  updateBoard
}

proc drawArrow {sq color} {
  global startArrowSquare
  if {$startArrowSquare == ""} {
    set startArrowSquare [::board::san $sq]
  } else  {
    set oldComment [sc_pos getComment]
    set to [::board::san $sq]
    if {$startArrowSquare != $to } {
      set erase [regexp "\[\x5B\]%draw arrow,$startArrowSquare,$to,$color\[\x5D\]" $oldComment]
      regsub "\[\x5B\]%draw arrow,$startArrowSquare,$to,(green|yellow|red)\[\x5D\]" $oldComment "" newComment
      set newComment [string trim $newComment]
      if {!$erase} {
        append newComment " \[%draw arrow,$startArrowSquare,$to,$color\]"
      }
      sc_pos setComment $newComment
      ::pgn::Refresh 1
      updateBoard
    }
    set startArrowSquare ""
  }
}

for {set i 0} { $i < 64 } { incr i } {
  ::board::bind .main.board $i <Enter> "enterSquare $i"
  ::board::bind .main.board $i <Leave> "leaveSquare $i"
  ::board::bind .main.board $i <ButtonPress-1> "set ::addVariationWithoutAsking 0 ; pressSquare $i"
  ::board::bind .main.board $i <ButtonPress-$::MB2> "set ::addVariationWithoutAsking 1 ; pressSquare $i"
  #::board::bind .main.board $i <ButtonPress-$::MB3> "set ::addVariationWithoutAsking 1 ; pressSquare $i"
  ::board::bind .main.board $i <Control-ButtonPress-1> "drawArrow $i green"
  ::board::bind .main.board $i <Control-ButtonPress-$::MB2> "drawArrow $i yellow"
  ::board::bind .main.board $i <Control-ButtonPress-$::MB3> "drawArrow $i red"
  ::board::bind .main.board $i <Shift-ButtonPress-1> "addMarker $i green"
  ::board::bind .main.board $i <Shift-ButtonPress-$::MB2> "addMarker $i yellow"
  ::board::bind .main.board $i <Shift-ButtonPress-$::MB3> "addMarker $i red"
  ::board::bind .main.board $i <B1-Motion> "::board::dragPiece .main.board %X %Y"
  ::board::bind .main.board $i <ButtonRelease-1> "releaseSquare .main.board %X %Y ; set ::addVariationWithoutAsking 0"
  ::board::bind .main.board $i <ButtonRelease-$::MB2> "releaseSquare .main.board %X %Y ; set ::addVariationWithoutAsking 0"
  #::board::bind .main.board $i <ButtonRelease-$::MB3> "releaseSquare .main.board %X %Y ; set ::addVariationWithoutAsking 0"
  
  #::board::bind .main.board $i <ButtonPress-$::MB2> "pressSquare $i"
  # Pascal Georges : this should be removed because I find it too dangerous for people with cats ??
  # put it back with Scid 3.6.13, let's see if this leads to problems
  ::board::bind .main.board $i <ButtonPress-$::MB3> backSquare
}

foreach i {o q r n k O Q R B N K} {
  bind .main <$i> "moveEntry_Char [string toupper $i]"
}
foreach i {a b c d e f g h 1 2 3 4 5 6 7 8} {
  bind .main <Key-$i> "moveEntry_Char $i"
}

bind .main <Control-BackSpace> backSquare
bind .main <Control-Delete> backSquare
bind .main <BackSpace> moveEntry_Backspace
bind .main <Delete> moveEntry_Backspace
bind .main <space> moveEntry_Complete


###  Other Key bindings:
# Set via menus.tcl -> standardShortcuts

# Arrow keys, Home and End:
bind $dot_w <Home> ::move::Start
bind $dot_w <Left> ::move::Back
bind $dot_w <Up> {
  if {[sc_pos isAt vstart]} {
    .main.fbutton.button.exitVar invoke
  } else  {
    ::move::Back 10
  }
}
bind $dot_w <Down> {::move::Forward 10}
bind $dot_w <Right> ::move::Forward
bind $dot_w <End> ::move::End

bind $dot_w <period> {if {!$tree(refresh)} {toggleRotateBoard}}

# MouseWheel in main window:
bind .main <MouseWheel> {
  if {[expr -%D] < 0} { ::move::Back }
  if {[expr -%D] > 0} { ::move::Forward }
}
bind .main <Shift-MouseWheel> {
  if {[expr -%D] < 0} { ::move::Back 10 }
  if {[expr -%D] > 0} { ::move::Forward 10}
}

if {! $windowsOS} {
  bind all <Button-4> {event generate [focus -displayof %W] <MouseWheel> -delta 120}
  bind all <Button-5> {event generate [focus -displayof %W] <MouseWheel> -delta -120}
  bind all <Shift-Button-4> {event generate [focus -displayof %W] <Shift-MouseWheel> -delta  120}
  bind all <Shift-Button-5> {event generate [focus -displayof %W] <Shift-MouseWheel> -delta -120}
  # bind $dot_w <Button-4> ::move::Back
  # bind $dot_w <Button-5> ::move::Forward
  # bind $dot_w <Shift-Button-4> {::move::Back 10}
  # bind $dot_w <Shift-Button-5> {::move::Forward 10}
}

# Apply standard shortcuts to main window
# standardShortcuts $dot_w
standardShortcuts .main

############################################################
### Packing the main window:

if { $::docking::USE_DOCKING} {
  ttk::frame .main.space
  grid .main.space -row 4 -column 0 -columnspan 3 -sticky nsew
  grid rowconfigure .main 4 -weight 1
}

label .main.statusbar -textvariable statusBar -relief sunken -anchor w -width 1 -font font_Small
grid .main.statusbar -row 5 -column 0 -columnspan 3 -sticky we
bind .main.statusbar <1> gotoNextBase

proc gotoNextBase {} {
  set n [sc_base current]
  set cb [sc_info clipbase]
  while {1} {
    incr n; if {$n > $cb} { set n 1 }
    sc_base switch $n
    if {[sc_base inUse]} { break }
  }
  updateBoard -pgn
  ::notify::DatabaseChanged
}

grid columnconfigure .main 0 -weight 1

# game info widget only gets its requested size
if { $::docking::USE_DOCKING } {
  grid rowconfigure .main 3 -weight 0
} else  {
  grid rowconfigure .main 3 -weight 1
}

pack .main.fbutton.button -anchor center
grid .main.fbutton -row 1 -column 0 -sticky we ;# -pady 2 -padx 2

grid .main.board -row 2 -column 0 -sticky we ;# -padx 5 -pady 5

# update Game Info panel visibility after loading options
toggleGameInfo

# grid .main.gameInfoFrame -row 3 -column 0 -sticky news -padx 2

redrawToolbar

if { ! $::docking::USE_DOCKING } {
  wm resizable .main 0 1
}

wm minsize . 0 0
wm iconname . "Scid"


#################
# Open files and databases:

# Check for arguments starting with "-" (or "/" on Windows):

set loadAtStart(spell) 1
set loadAtStart(eco) 1
set loadAtStart(tb) 1

proc getCommandLineOptions {} {
  global argc argv windowsOS loadAtStart
  
  if { $::macOS && ([string first "-psn" [lindex $argv 0]] == 0)} {
    # Remove Process Serial Number from argument list:
    set argv [lrange $argv 1 end]
    incr argc -1
  }
  
  while {$argc > 0} {
    set arg [lindex $argv 0]
    set firstChar [string index $arg 0]
    if {$firstChar == "-"  ||  ($windowsOS  &&  $firstChar == "/")} {
      # Seen option argument:
      incr argc -1
      set argv [lrange $argv 1 end]
      
      # Special argument "--" means no more options:
      if {$arg == "--"} { return }
      
      # Check for known option names:
      #   -f (/f), -fast (/fast): Fast start with no tablebases, etc.
      #   -xeco, -xe: Do not load ECO file.
      #   -xspell, -xs: Do not load spellcheck file.
      #   -xtb, -xt: Do not check tablebase directory.
      
      set argName [string range $arg 1 end]
      switch $argName {
        "f"    -
        "fast" {
          ::splash::add "Fast start: no tablebases, ECO or spelling file loaded."
          set loadAtStart(spell) 0
          set loadAtStart(eco) 0
          set loadAtStart(tb) 0
        }
        "xt" -
        "xtb" {
          set loadAtStart(tb) 0
        }
        "xe" -
        "xeco" {
          set loadAtStart(eco) 0
        }
        "xs" -
        "xspell" {
          set loadAtStart(spell) 0
        }
        "s1"  { set ::boardSize 21 }
        "s2"  { set ::boardSize 25 }
        "s3"  { set ::boardSize 29 }
        "s4"  { set ::boardSize 33 }
        "s5"  { set ::boardSize 37 }
        "s6"  { set ::boardSize 40 }
        "s7"  { set ::boardSize 45 }
        "s8"  { set ::boardSize 49 }
        "s9"  { set ::boardSize 54 }
        "s10" { set ::boardSize 58 }
        "s11" { set ::boardSize 64 }
        "s12" { set ::boardSize 72 }
        default {
          ::splash::add "Warning: unknown option: \"$arg\""
        }
      }
    } else {
      # Seen first non-option argument:
      return
    }
  }
}

getCommandLineOptions


setLanguage $language

updateTitle
updateBoard
update idle

# Try to find tablebases:
if {$loadAtStart(tb)} {
  if {[sc_info tb]} {
    ::splash::add "Checking for endgame tablebase files..."
    set tbDirs {}
    foreach i {1 2 3 4} {
      if {$initialDir(tablebase$i) != ""} {
        if {$tbDirs != ""} { append tbDirs ";" }
        append tbDirs [file nativename $initialDir(tablebase$i)]
      }
    }
    set result 0
    if {$tbDirs != ""} {
      set result [sc_info tb $tbDirs]
    }
    if {$result == 0} {
      ::splash::add "    No tablebases were found."
    } else {
      ::splash::add "    Tablebases with up to $result pieces were found."
    }
  }
}

# Try to open the ECO classification file:
set result 0
set ecoFile_fullname [file nativename $ecoFile]

if {$loadAtStart(eco)} {
  ::splash::add "Trying to load the ECO openings file..."
  if {[catch { sc_eco read $ecoFile_fullname } result]} {
    # Could not load, so try "scid.eco" in the current directory:
    if {[catch {sc_eco read "scid.eco"} result]} {
      # Neither attempt worked, so do not use ECO classification
      ::splash::add "    Unable to open the ECO file: $ecoFile"
    } else {
      ::splash::add "    ECO file \"./scid.eco\" loaded: $result positions."
    }
  } else {
    ::splash::add "    ECO file \"[file tail $ecoFile_fullname]\"  loaded: $result positions."
  }
}

###
# Try to load the spellcheck file:
if {$loadAtStart(spell)} {
  if {[catch {sc_name read $spellCheckFile} result]} {
    #::splash::add "Unable to load the default spellcheck file: $spellCheckFile"
  } else {
    ::splash::add "Spellcheck file \"[file tail $spellCheckFile]\" loaded:"
    ::splash::add "    [lindex $result 0] players, [lindex $result 1] events, [lindex $result 2] sites, [lindex $result 3] rounds."
  }
}

# fullname:
#   Given a file name, returns its absolute name.
#
proc fullname {fname} {
  if {[file pathtype $fname] == "absolute"} { return $fname }
  set old [pwd]
  if {[catch {cd [file dirname $fname]}]} { return $fname }
  set fname [file join [pwd] [file tail $fname]]
  catch {cd $old}
  return $fname
}

# Loading a database if specified on the command line:
# Need to check file type: .epd, .pgn, .pgn.gz, etc

while {$argc > 0} {
  set startbase [fullname [lindex $argv 0]]
  if {! [catch {sc_game startBoard $startbase}]} {
    set argc 0
    break
  }
  if {! [catch {sc_game startBoard [join $argv " "]}]} {
    set argc 0
    break
  }
  if {[string match "*.epd*" $startbase]} {
    ::splash::add "Opening EPD file: $startbase..."
    if {![newEpdWin openSilent $startbase]} {
      ::splash::add "   Error opening EPD file: $startbase"
    }
    set initialDir(epd) [file dirname $startbase]
  } elseif {[string match "*.sso" $startbase]} {
    ::splash::add "Opening filter file: $startbase..."
    if {[catch {uplevel "#0" source $startbase} err]} {
      ::splash::add "   Error opening $startbase: $err"
    } else {
      switch -- $::searchType {
        "Material" {
          sc_search material \
              -wq [list $pMin(wq) $pMax(wq)] -bq [list $pMin(bq) $pMax(bq)] \
              -wr [list $pMin(wr) $pMax(wr)] -br [list $pMin(br) $pMax(br)] \
              -wb [list $pMin(wb) $pMax(wb)] -bb [list $pMin(bb) $pMax(bb)] \
              -wn [list $pMin(wn) $pMax(wn)] -bn [list $pMin(bn) $pMax(bn)] \
              -wm [list $pMin(wm) $pMax(wm)] -bm [list $pMin(bm) $pMax(bm)] \
              -wp [list $pMin(wp) $pMax(wp)] -bp [list $pMin(bp) $pMax(bp)] \
              -flip $ignoreColors -filter $::search::filter::operation \
              -range [list $minMoveNum $maxMoveNum] \
              -length $minHalfMoves -bishops $oppBishops \
              -diff [list $minMatDiff $maxMatDiff] \
              -patt "$pattBool(1) $pattPiece(1) $pattFyle(1) $pattRank(1)" \
              -patt "$pattBool(2) $pattPiece(2) $pattFyle(2) $pattRank(2)" \
              -patt "$pattBool(3) $pattPiece(3) $pattFyle(3) $pattRank(3)" \
              -patt "$pattBool(4) $pattPiece(4) $pattFyle(4) $pattRank(4)" \
              -patt "$pattBool(5) $pattPiece(5) $pattFyle(5) $pattRank(5)" \
              -patt "$pattBool(6) $pattPiece(6) $pattFyle(6) $pattRank(6)" \
              -patt "$pattBool(7) $pattPiece(7) $pattFyle(7) $pattRank(7)" \
              -patt "$pattBool(8) $pattPiece(8) $pattFyle(8) $pattRank(8)" \
              -patt "$pattBool(9) $pattPiece(9) $pattFyle(9) $pattRank(9)" \
              -patt "$pattBool(10) $pattPiece(10) $pattFyle(10) $pattRank(10)"
          ::splash::add "   Material/Pattern filter file $startbase correctly applied"
        }
        "Header"   {
          set sPgnlist {}
          foreach i {1 2 3} {
            set temp [string trim $sPgntext($i)]
            if {$temp != ""} { lappend sPgnlist $temp }
          }
          set wtitles {}
          set btitles {}
          foreach i $sTitleList {
            if $sTitles(w:$i) { lappend wtitles $i }
            if $sTitles(b:$i) { lappend btitles $i }
          }
          sc_search header -white $sWhite -black $sBlack \
              -event $sEvent -site $sSite -round $sRound \
              -date [list $sDateMin $sDateMax] \
              -results [list $sResWin $sResDraw $sResLoss $sResOther] \
              -welo [list $sWhiteEloMin $sWhiteEloMax] \
              -belo [list $sBlackEloMin $sBlackEloMax] \
              -delo [list $sEloDiffMin $sEloDiffMax] \
              -eco [list $sEcoMin $sEcoMax $sEco] \
              -length [list $sGlMin $sGlMax] \
              -toMove $sSideToMove \
              -gameNumber [list $sGnumMin $sGnumMax] \
              -flip $sIgnoreCol -filter $::search::filter::operation \
              -fStdStart $sHeaderFlags(StdStart) \
              -fPromotions $sHeaderFlags(Promotions) \
              -fComments $sHeaderFlags(Comments) \
              -fVariations $sHeaderFlags(Variations) \
              -fAnnotations $sHeaderFlags(Annotations) \
              -fDelete $sHeaderFlags(DeleteFlag) \
              -fWhiteOp $sHeaderFlags(WhiteOpFlag) \
              -fBlackOp $sHeaderFlags(BlackOpFlag) \
              -fMiddlegame $sHeaderFlags(MiddlegameFlag) \
              -fEndgame $sHeaderFlags(EndgameFlag) \
              -fNovelty $sHeaderFlags(NoveltyFlag) \
              -fPawnStruct $sHeaderFlags(PawnFlag) \
              -fTactics $sHeaderFlags(TacticsFlag) \
              -fKingside $sHeaderFlags(KsideFlag) \
              -fQueenside $sHeaderFlags(QsideFlag) \
              -fBrilliancy $sHeaderFlags(BrilliancyFlag) \
              -fBlunder $sHeaderFlags(BlunderFlag) \
              -fUser $sHeaderFlags(UserFlag) \
              -pgn $sPgnlist -wtitles $wtitles -btitles $btitles
          ::splash::add "   Header filter file $startbase correctly applied"
        }
      }
      ::windows::gamelist::Refresh
      ::windows::stats::Refresh
    }
  } elseif {[string match "*.sor" $startbase]} {
    ::splash::add "Opening repertoire file: $startbase..."
    if {[catch {::rep::OpenWithFile $startbase} err]} {
      ::splash::add "Error opening $startbase: $err"
    }
  } else {
    busyCursor .
    ::splash::add "Opening database: $startbase ..."
    set err 0
    set errMessage ""
    if {[string match "*.pgn" $startbase] || \
          [string match "*.PGN" $startbase] || \
          [string match "*.pgn.gz" $startbase]} {
      set err [catch {sc_base create $startbase true} errMessage]
      if {$err == 0} {
        doPgnFileImport $startbase "\nOpening [file tail $startbase] read-only...\n"
        sc_base type [sc_base current] 3
        ::recentFiles::add $startbase
      }
    } else {
      set err [catch { ::file::Open $startbase} errMessage]
      if {! $err} { ::recentFiles::add "[file rootname $startbase].si4" }
    }
    if {$err} {
      ::splash::add "   Error: could not open database \"$startbase\":\n  $errMessage"
    } else {
      ::splash::add "   Database \"$startbase\" opened: [sc_base numGames] games."
      set initialDir(base) [file dirname $startbase]
      catch {sc_game load auto}
      flipBoardForPlayerNames $::myPlayerNames
    }
  }
  unbusyCursor .
  incr argc -1
  set argv [lrange $argv 1 end]
}

::splash::add "\nStartup completed."
::splash::add "Scid has 44 online help pages; just press F1 for help!\n"
::splash::add "Also look at the online tutorial\nhttp://scid.sourceforge.net/tutorial/\n"
setWinLocation $dot_w
wm deiconify $dot_w

wm protocol $dot_w WM_DELETE_WINDOW { ::file::Exit }

# In docked mode, reopen only the windows that are not dockable
if { !$::docking::USE_DOCKING } {
  if {$startup(switcher)} { ::windows::switcher::Open }
  if {$startup(pgn)} { ::pgn::OpenClose }
  if {$startup(gamelist)} { ::windows::gamelist::Open }
  if {$startup(tree)} { ::tree::make }
  if {$startup(stats)} { ::windows::stats::Open }
  if {$startup(crosstable)} { crosstabWin }
  if {$startup(finder)} { ::file::finder::Open }
  if {$startup(book)} { ::book::open }
} else  {
  if {$startup(stats)} { ::windows::stats::Open }
  if {$startup(crosstable)} { crosstabWin }
  if {$startup(finder)} { ::file::finder::Open }
}

updateBoard
updateTitle
updateLocale
update
bind $dot_w <Configure> "recordWinSize $dot_w"

# Bindings to map/unmap all windows when main window is mapped:
bind .main.statusbar <Map> { showHideAllWindows deiconify}
bind .main.statusbar <Unmap> { showHideAllWindows iconify}

################################################################################
# returns a list of all toplevel windows, except some that are utilities
################################################################################
proc getTopLevel {} {
  
  set topl {}
  set exclude { ".tooltip" ".glistExtra" ".menu" "." ".pgnPopup" }
  foreach c [winfo children .] {
    if { $c != [winfo toplevel $c] } { continue }
    # Tk report .__tk_filedialog as toplevel window even if the window has been closed
    if { [ lsearch $topl $c ] == -1 && [ lsearch $exclude $c ] == -1 && ![string match "\.__tk*" $c] } {
      lappend topl $c
    }
  }
  return $topl
}
################################################################################
#
################################################################################
# showHideAllWindows:
#   Arranges for all major Scid windows to be shown/hidden
#   Should be called type = "iconify" or "deiconify"
#
proc showHideAllWindows {type} {
  
  # Don't do this if user option is off:
  if {! $::autoIconify} { return }
  
  # Some window managers like KDE generate Unmap events for other
  # situations like switching to another desktop, etc.
  # So if the main window is still mapped, do not iconify others:
  if {($type == "iconify")  && ([winfo ismapped .main] == 1)} { return }
  
  # Now iconify/deiconify all the major Scid windows that exist:
  foreach w [getTopLevel] {
    # .baseWin .glistWin .pgnWin .tourney .maintWin \
    # .ecograph .crosstabWin .treeWin .analysisWin1 .anslysisWin2 \
    # .playerInfoWin .commentWin .repWin .statsWin .tbWin \
    # .sb .sh .sm .noveltyWin .emailWin .oprepWin .plist \
    # .rgraph .sgraph .importWin .helpWin .tipsWin
    if {[winfo exists $w]} { catch {wm $type $w} }
  }
  
}

proc raiseAllWindows {} {
  # Don't do this if auto-raise option is turned off:
  if {! $::autoRaise} { return }
  
  showHideAllWindows deiconify
  
  foreach w [getTopLevel] {
    # .baseWin .glistWin .pgnWin .tourney .maintWin \
    # .ecograph .crosstabWin .treeWin .analysisWin1 .anslysisWin2 \
    # .playerInfoWin .commentWin .repWin .statsWin .tbWin \
    # .sb .sh .sm .noveltyWin .emailWin .oprepWin .plist \
    # .rgraph .sgraph .importWin .helpWin .tipsWin
    if {[winfo exists $w]} { catch { raise $w } }
  }
}

# Bind double-click in main Scid window to raise all Scid windows:
bind $dot_w <Double-Button-1> raiseAllWindows

# Hack to extract gif images out of Scid:
#
if {0} {
  proc dumpImages {dir} {
    package require base64
    file mkdir $dir
    set images [image names]
    foreach i $images {
      if {[image type $i] == "photo" } {
        set ext [$i cget -format]
        if {$ext == ""} {
          set ext "gif"
        }
      } else  {
        set ext "gif"
      }
      set data [string trim [$i cget -data]]
      if {$data == ""} { continue }
      if {[catch {set d [::base64::decode $data]}]} { continue }
      regsub -all {:} $i {_} i
      set fname [file join $dir $i.$ext]
      set f [open $fname w]
      fconfigure $f -translation binary -encoding binary
      puts -nonewline $f $d
      close $f
    }
  }
  
  bind $dot_w <Control-Shift-F7> {puts "dumpImages" ; dumpImages "/tmp/images"}
}

if {$startup(tip)} { ::tip::show }

# Opening files by drag & drop on Scid icon on Mac
if { $macOS } {
  # We opened for a drag & drop request, process it now:
  set isopenBaseready 1
  if {$dndargs != 0} {
    set isopenBaseready 2
    catch {::tk::mac::OpenDocument $dndargs} errmsg
    #::splash::add "Opening file(s)...\$dndargs"
  }
}

if { !$::docking::USE_DOCKING } {
  wm withdraw .
  bind .main <Destroy> { destroy . }
}

if { $::docking::USE_DOCKING } {
  setTitle .main [ ::tr "Board" ]
  # restore geometry
  wm minsize $dot_w 360 320
  setWinLocation $dot_w
  setWinSize $dot_w
  
  # when main board pane is resized, auto-size it
  bind .main <Configure> { ::docking::handleConfigureEvent ::resizeMainBoard }
  
  # restore default layout (number 1)
  if { $::autoLoadLayout } {
    set ::docking::restore_running 1
    ::docking::layout_restore 1
    # engines may take time to start. Wait a few seconds before allowing an engine to automatically start analyzing
    after 2000 { set ::docking::restore_running 0 }
  }
  
  standardShortcuts TNotebook
  ::docking::toggleAutoResizeBoard
}

# updateMenuStates

### End of file: end.tcl
###
### tacgame.tcl: part of Scid.
### Copyright (C) 2006  Pascal Georges
###

namespace eval tacgame {
  ######################################################################
  ### Tacgame window: uses a chess engine (Phalanx) in easy mode and
  ### another engine (for example Toga) to track blunders
  
  ### many variables are now set in start.tcl to allow for
  ### remembering them in options.dat S.A
  
  set resignCount 0
  
  # if true, follow a specific opening
  set openingMovesList {}
  set openingMovesHash {}
  set openingMoves ""
  set outOfOpening 0
  
  # list of fen positions played to detect 3 fold repetition
  set lFen {}
  
  set index1 0
  set index2 0
  
  set lastblundervalue 0.0
  set prev_lastblundervalue 0.0
  set blundermissed false
  set blunderwarning false
  set blunderwarningvalue 0.0
  set blundermissedvalue 0.0
  
  set blunderWarningLabel $::tr(Noblunder)
  set scoreLabel 0.0
  
  set blunderpending 0
  set prev_blunderpending 0
  set currentPosHash 0
  set lscore {}
  
  set analysisCoach(automove1) 0
  set analysisCoach(paused) 0 ; # S.A
  
  # ======================================================================
  # resetValues
  #   Resets all blunders data.
  # ======================================================================
  proc resetValues {} {
    # see tcl/start.tcl
    set ::tacgame::blundermissed false
    set ::tacgame::lastblundervalue 0.0
    set ::tacgame::prev_lastblundervalue 0.0
    set ::tacgame::prev_blunderpending 0
    set ::tacgame::currentPosHash [sc_pos hash]
    set ::tacgame::lscore {}
    set ::tacgame::resignCount 0
  }
  
  # ======================================================================
  # resetEngine:
  #   Resets all engine-specific data.
  # ======================================================================
  proc resetEngine {n} {
    
    global ::tacgame::analysisCoach
    set analysisCoach(pipe$n) ""             ;# Communication pipe file channel
    set analysisCoach(seen$n) 0              ;# Seen any output from engine yet?
    set analysisCoach(seenEval$n) 0          ;# Seen evaluation line yet?
    set analysisCoach(score$n) 0             ;# Current score in centipawns
    set analysisCoach(moves$n) ""            ;# PV (best line) output from engine
    set analysisCoach(movelist$n) {}         ;# Moves to reach current position
    set analysisCoach(nonStdStart$n) 0       ;# Game has non-standard start
    set analysisCoach(has_analyze$n) 0       ;# Engine has analyze command
    set analysisCoach(has_setboard$n) 0      ;# Engine has setboard command
    set analysisCoach(send_sigint$n) 0       ;# Engine wants INT signal
    set analysisCoach(wants_usermove$n) 0    ;# Engine wants "usermove" before moves
    set analysisCoach(wholeSeconds$n) 0      ;# Engine times in seconds not centisec
    set analysisCoach(analyzeMode$n) 0       ;# Scid has started analyze mode
    set analysisCoach(invertScore$n) 1       ;# Score is for side to move, not white
    set analysisCoach(automove$n) 0
    set analysisCoach(automoveThinking$n) 0
    set analysisCoach(automoveTime$n) 2000
    set analysisCoach(lastClicks$n) 0
    set analysisCoach(after$n) ""
    set analysisCoach(log$n) ""              ;# Log file channel
    set analysisCoach(logCount$n) 0          ;# Number of lines sent to log file
    set analysisCoach(wbEngineDetected$n) 0  ;# Is this a special Winboard engine?
  }
  
  # ======================================================================
  #		::tacgame::config
  #   Configure coach games :
  #			- Phalanx engine (because it has an 'easy' option)
  #			- Coach engine (Toga is the best)
  #			- level of difficulty
  # ======================================================================
  proc config {} {
    
    global ::tacgame::configWin ::tacgame::analysisCoachCommand ::tacgame::analysisCoach \
        engineCoach1 engineCoach2 ::tacgame::level ::tacgame::levelFixed \
        ::tacgame::isLimitedAnalysisTime ::tacgame::analysisTime ::tacgame::index1 ::tacgame::index2 ::tacgame::chosenOpening
    
    # check if game window is already opened. If yes abort previous game
    if {[winfo exists .coachWin]} {
      focus .
      destroy .coachWin
      ::tacgame::closeEngine 1
      ::tacgame::closeEngine 2
    }
    
    # find Phalanx and Toga engines
    set i 0
    set index1 -1
    set index2 -1
    foreach e $::engines(list) {
      if { $index1 != -1 && $index2 != -1 } { break }
      set name [lindex $e 0]
      if { [ string match -nocase "*phalanx*" $name ]  } {
        set engineCoach1 $name
        set index1 $i
      }
      
      if { [ string match -nocase "*toga*" $name ] } {
        set engineCoach2 $name
        set index2 $i
      }
      incr i
    }
    
    # could not find Toga or Phalanx
    if { $index1 == -1 || $index2 == -1 } {
      tk_messageBox -title "Scid" -icon warning -type ok -message $::tr(PhalanxOrTogaMissing)
      return
    }
    
    set w ".configWin"
    if {[winfo exists $w]} {
      focus $w
      # wm attributes $w -topmost
      return
    }
    
    toplevel $w
    wm title $w "$::tr(configurecoachgame)"
    
    bind $w <F1> { helpWindow TacticalGame }
    setWinLocation $w
    
    ttk::labelframe $w.flevel -text [string toupper $::tr(difficulty) 0 0 ]
    ttk::frame $w.flevel.diff_fixed
    ttk::frame $w.flevel.diff_random
    ttk::labelframe $w.fopening -text $::tr(Opening)
    ttk::frame $w.flimit -relief raised -borderwidth 1
    ttk::frame $w.fbuttons
    
    pack $w.flevel -side top -fill x
    pack $w.flevel.diff_fixed -side top
    pack $w.flevel.diff_random -side top
    pack $w.fopening  -side top -fill both -expand 1
    pack $w.flimit $w.fbuttons -side top -fill x
    
    ttk::radiobutton $w.flevel.diff_random.cb -text $::tr(RandomLevel) -variable ::tacgame::randomLevel -value 1 -width 15
    ttk::scale $w.flevel.diff_random.lMin -orient horizontal -from 1200 -to 2200 -length 100 -variable ::tacgame::levelMin \
        -command { ::utils::validate::roundScale ::tacgame::levelMin 50 }
    ttk::label $w.flevel.diff_random.labelMin -textvariable ::tacgame::levelMin
    ttk::scale $w.flevel.diff_random.lMax -orient horizontal -from 1200 -to 2200 -length 100 -variable ::tacgame::levelMax \
        -command { ::utils::validate::roundScale ::tacgame::levelMax 50 }
    ttk::label $w.flevel.diff_random.labelMax -textvariable ::tacgame::levelMax
    
    grid $w.flevel.diff_random.cb -row 0 -column 0 -rowspan 2
    grid $w.flevel.diff_random.labelMin -row 0 -column 1
    grid $w.flevel.diff_random.lMin -row 1 -column 1
    grid $w.flevel.diff_random.labelMax -row 0 -column 2
    grid $w.flevel.diff_random.lMax -row 1 -column 2
    
    ttk::radiobutton $w.flevel.diff_fixed.cb -text $::tr(FixedLevel) -variable ::tacgame::randomLevel -value 0 -width 15
    ttk::label $w.flevel.diff_fixed.labelFixed -textvariable ::tacgame::levelFixed
    ttk::scale $w.flevel.diff_fixed.scale -orient horizontal -from 1200 -to 2200 -length 200 \
        -variable ::tacgame::levelFixed -command { ::utils::validate::roundScale ::tacgame::levelFixed 50 }
    
    grid $w.flevel.diff_fixed.cb -row 0 -column 0 -rowspan 2
    grid $w.flevel.diff_fixed.labelFixed -row 0 -column 1 -columnspan 2
    grid $w.flevel.diff_fixed.scale -row 1 -column 1 -columnspan 2
    
    # start new game
    ttk::radiobutton $w.fopening.cbNew -text $::tr(StartNewGame)  -variable ::tacgame::openingType -value new
    
    # start from current position
    ttk::radiobutton $w.fopening.cbPosition -text $::tr(StartFromCurrentPosition) -variable ::tacgame::openingType -value current
    
    # or choose a specific opening
    ttk::radiobutton $w.fopening.cbSpecific -text $::tr(SpecificOpening) -variable ::tacgame::openingType -value specific
    
    pack $w.fopening.cbNew -anchor w -padx 100
    pack $w.fopening.cbPosition -anchor w -padx 100
    pack $w.fopening.cbSpecific -anchor w -padx 100
    
    ttk::frame $w.fopening.fOpeningList
    listbox $w.fopening.fOpeningList.lbOpening -yscrollcommand "$w.fopening.fOpeningList.ybar set" \
        -height 5 -width 40 -list ::tacgame::openingList
    $w.fopening.fOpeningList.lbOpening selection set $::tacgame::chosenOpening
    $w.fopening.fOpeningList.lbOpening see $::tacgame::chosenOpening
    
    ttk::scrollbar $w.fopening.fOpeningList.ybar -command "$w.fopening.fOpeningList.lbOpening yview"
    pack $w.fopening.fOpeningList.lbOpening -side right -fill both -expand 1
    pack $w.fopening.fOpeningList.ybar  -side right -fill y
    pack $w.fopening.fOpeningList -expand yes -fill both -side top -expand 1
    
    # in order to limit CPU usage, limit the time for analysis (this prevents noise on laptops)
    ttk::checkbutton $w.flimit.blimit -text $::tr(limitanalysis) -variable ::tacgame::isLimitedAnalysisTime
    ttk::label $w.flimit.labelsecval -textvariable ::tacgame::analysisTime
    ttk::label $w.flimit.labelsec -text $::tr(seconds)
    ttk::scale $w.flimit.analysisTime -orient horizontal -from 5 -to 60 -length 200 -variable ::tacgame::analysisTime \
        -command { ::utils::validate::roundScale ::tacgame::analysisTime 5 }
    grid $w.flimit.blimit -column 0 -row 0 -rowspan 2
    grid $w.flimit.labelsecval  -column 1 -row 0
    grid $w.flimit.labelsec -column 2 -row 0
    grid $w.flimit.analysisTime -column 1 -row 1 -columnspan 2
    # pack $w.flimit.blimit $w.flimit.labelsec $w.flimit.analysisTime  $w.flimit.labelsecval -side left -expand yes -pady 5
    
    ttk::button $w.fbuttons.close -text $::tr(Play) -command {
      focus .
      set ::tacgame::chosenOpening [.configWin.fopening.fOpeningList.lbOpening curselection]
      destroy .configWin
      ::tacgame::play
    }
    ttk::button $w.fbuttons.cancel -textvar ::tr(Cancel) -command "focus .; destroy $w"
    
    pack $w.fbuttons.close $w.fbuttons.cancel -expand yes -side left -padx 20 -pady 2
    
    bind $w <Escape> { .configWin.fbuttons.cancel invoke }
    bind $w <Return> { .configWin.fbuttons.close invoke }
    bind $w <F1> { helpWindow TacticalGame }
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
  }
  # ======================================================================
  #
  #	::tacgame::play
  #
  # ======================================================================
  proc play { } {
    global ::tacgame::analysisCoach ::tacgame::threshold ::tacgame::showblunder ::tacgame::showblundervalue \
        ::tacgame::blunderfound ::tacgame::showmovevalue ::tacgame::level ::tacgame::levelFixed engineCoach1 \
        engineCoach2 ::tacgame::index1 ::tacgame::index2 ::tacgame::chosenOpening \
        ::tacgame::openingType ::tacgame::openingList ::tacgame::openingMovesList \
        ::tacgame::openingMovesHash ::tacgame::openingMoves ::tacgame::outOfOpening
    
    resetEngine 1
    resetEngine 2
    catch { unset ::uci::uciInfo(score2) }
    
    set ::tacgame::lFen {}
    
    set analysisCoach(paused) 0
    
    if {$::tacgame::randomLevel} {
      if {$::tacgame::levelMax < $::tacgame::levelMin} {
        set tmp $::tacgame::levelMax
        set ::tacgame::levelMax $::tacgame::levelMin
        set ::tacgame::levelMin $tmp
      }
      set level [expr int(rand()*($::tacgame::levelMax - $::tacgame::levelMin)) + $::tacgame::levelMin ]
    } else {
      set level $::tacgame::levelFixed; # S.A.
    }
    
    # if will follow a specific opening line
    if {$openingType == "specific"} {
      set fields [split [lindex $openingList $chosenOpening] ":"]
      set openingName [lindex $fields 0]
      set openingMoves [string trim [lindex $fields 1]]
      set openingMovesList ""
      set openingMovesHash ""
      set outOfOpening 0
      foreach m [split $openingMoves] {
        # in case of multiple adjacent spaces in opening line
        if {$m =={}} {
          continue
        }
        set n [string trim $m]
        lappend openingMovesList [string trim [regsub {^[1-9]+\.} $m ""] ]
      }
      
      sc_game new
      lappend openingMovesHash [sc_pos hash]
      foreach m  $openingMovesList {
        if {[catch {sc_move addSan $m}]} {
        }
        lappend openingMovesHash [sc_pos hash]
      }
    }
    
    # create a new game if a DB is opened
    if {$::tacgame::openingType != "current"} {
      sc_game new
      sc_game tags set -event "Tactical game"
      if { [::board::isFlipped .main.board] } {
        sc_game tags set -white "Phalanx - $level ELO"
      } else  {
        sc_game tags set -black "Phalanx - $level ELO"
      }
      sc_game tags set -date [::utils::date::today]
      if {[sc_base inUse [sc_base current]]} { catch {sc_game save 0}  }
    }
    
    updateBoard -pgn
    ::windows::gamelist::Refresh
    updateTitle
    updateMenuStates
    
    set w .coachWin
    if {[winfo exists $w]} {
      focus .
      destroy $w
      return
    }
    
    createToplevel $w
    setTitle $w "$::tr(coachgame) (Elo $level)"
    setWinLocation $w
    
    ttk::frame $w.fdisplay -relief groove -borderwidth 1
    ttk::frame $w.fthreshold -relief groove -borderwidth 1
    ttk::frame $w.finformations -relief groove -borderwidth 1
    ttk::frame $w.fclocks -relief raised -borderwidth 2
    ttk::frame $w.fbuttons
    pack $w.fdisplay $w.fthreshold $w.finformations $w.fclocks $w.fbuttons -side top -expand yes -fill both
    
    ttk::checkbutton $w.fdisplay.b1 -text $::tr(showblunderexists) -variable ::tacgame::showblunder
    ttk::checkbutton $w.fdisplay.b2 -text $::tr(showblundervalue) -variable ::tacgame::showblundervalue
    ttk::checkbutton $w.fdisplay.b5 -text $::tr(showscore) -variable ::tacgame::showevaluation
    pack $w.fdisplay.b1 $w.fdisplay.b2 $w.fdisplay.b5 -expand yes -anchor w
    
    ttk::label $w.fthreshold.l -text $::tr(moveblunderthreshold) -wraplength 300
    
    ttk::scale $w.fthreshold.t -orient horizontal -from 0.0 -to 10.0 -length 200 \
        -variable ::tacgame::threshold -command { ::utils::validate::floatScale ::tacgame::threshold 0.1 }
    ttk::label $w.fthreshold.labelt -textvariable ::tacgame::threshold
    pack $w.fthreshold.l $w.fthreshold.labelt $w.fthreshold.t -side top
    
    ttk::label $w.finformations.l1 -textvariable ::tacgame::blunderWarningLabel -background linen
    ttk::label $w.finformations.l3 -textvariable ::tacgame::scoreLabel -foreground WhiteSmoke -background SlateGray
    pack $w.finformations.l1 $w.finformations.l3 -padx 5 -pady 5 -side top -fill x
    
    ::gameclock::new $w.fclocks 2 80
    ::gameclock::new $w.fclocks 1 80
    ::gameclock::reset 1
    ::gameclock::start 1
    
    ### Resume restarts paused computer (while player moves forward/back in history) S.A.
    ttk::button $w.fbuttons.resume -state disabled -textvar ::tr(Resume) -command {
      set ::tacgame::analysisCoach(paused) 0
      .coachWin.fbuttons.resume configure -state disabled
      ::tacgame::phalanxGo
    }
    pack $w.fbuttons.resume -expand yes -fill both -padx 20 -pady 2
    
    ttk::button $w.fbuttons.close -textvar ::tr(Abort) -command ::tacgame::abortGame
    pack $w.fbuttons.close -expand yes -fill both -padx 20 -pady 2
    
    ::tacgame::launchengine $index1 1
    ::uci::startEngine $index2 2
    set ::uci::uciInfo(multipv2) 1
    changePVSize 2
    
    ::tacgame::resetValues
    updateAnalysisText
    
    bind $w <F1> { helpWindow TacticalGame }
    bind $w <Destroy> "after cancel ::tacgame::phalanxGo ; focus . ; \
        ::tacgame::closeEngine 1; ::tacgame::closeEngine 2"
    bind $w <Escape> ::tacgame::abortGame
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
    
    ::tacgame::phalanxGo
  }
  ################################################################################
  #
  ################################################################################
  proc abortGame { { destroyWin 1 } } {
    after cancel ::tacgame::phalanxGo
    stopAnalyze
    if { $destroyWin } { destroy ".coachWin" }
    focus .
    ::tacgame::closeEngine 1
    ::tacgame::closeEngine 2
    ::docking::cleanup .coachWin
  }
  # ======================================================================
  #   ::tacgame::launchengine
  #  - launches both engines
  #  - updates values for :
  #						blundermissed (boolean), blunderwarning (boolean)
  #						blunderwarningvalue (real), blundermissedvalue (real)
  #						totalblundersmissed (real), totalblunders (real)
  # ======================================================================
  
  proc launchengine {index n} {
    global ::tacgame::analysisCoach ::tacgame::level
    
    ::tacgame::resetEngine $n
    
    set engineData [lindex $::engines(list) $index]
    set analysisName [lindex $engineData 0]
    set analysisCommand [ ::toAbsPath [ lindex $engineData 1 ] ]
    set analysisArgs [lindex $engineData 2]
    set analysisDir [ ::toAbsPath [lindex $engineData 3] ]
    
    # turn phalanx book, ponder and learning off, easy on
    if {$n == 1} {
      # convert Elo = 1200 to level 100 up to Elo=2200 to level 0
      set easylevel [expr int(100-(100*($level-1200)/(2200-1200)))]
      append analysisArgs " -b+ -p- -l- -e $easylevel "
    }
    
    # If the analysis directory is not current dir, cd to it:
    set oldpwd ""
    if {$analysisDir != "."} {
      set oldpwd [pwd]
      catch {cd $analysisDir}
    }
    
    # Try to execute the analysis program:
    if {[catch {set analysisCoach(pipe$n) [open "| [list $analysisCommand] $analysisArgs" "r+"]} result]} {
      if {$oldpwd != ""} { catch {cd $oldpwd} }
      tk_messageBox -title "Scid: error starting analysis" \
          -icon warning -type ok \
          -message "Unable to start the program:\n$analysisCommand"
      ::tacgame::resetEngine $n
      return
    }
    
    # Return to original dir if necessary:
    if {$oldpwd != ""} { catch {cd $oldpwd} }
    
    # Configure pipe for line buffering and non-blocking mode:
    fconfigure $analysisCoach(pipe$n) -buffering line -blocking 0
    
    if {$n == 1} {
      fileevent $analysisCoach(pipe$n) readable "::tacgame::processInput"
      after 1000 "::tacgame::checkAnalysisStarted $n"
    }
    
  }
  
  # ======================================================================
  # ::tacgame::closeEngine
  #   Close an engine.
  # ======================================================================
  proc closeEngine {n} {
    global windowsOS ::tacgame::analysisCoach
    
    # Check the pipe is not already closed:
    if { $n == 1 } {
      if {$analysisCoach(pipe$n) == "" } {
        return
      }
    }
    if { $n == 2 } {
      ::uci::closeUCIengine $n
      return
    }
    
    # Send interrupt signal if the engine wants it:
    if {(!$windowsOS)  &&  $analysisCoach(send_sigint$n)} {
      catch {exec -- kill -s INT [pid $analysisCoach(pipe$n)]}
    }
    
    # Some engines in analyze mode may not react as expected to "quit"
    # so ensure the engine exits analyze mode first:
    sendToEngine $n "exit"
    sendToEngine $n "quit"
    catch { flush $analysisCoach(pipe$n) }
    
    # Uncomment the following line to turn on blocking mode before
    # closing the engine (but probably not a good idea!)
    #   fconfigure $analysisCoach(pipe$n) -blocking 1
    
    # Close the engine, ignoring any errors since nothing can really
    # be done about them anyway -- maybe should alert the user with
    # a message box?
    catch {close $analysisCoach(pipe$n)}
    
    set analysisCoach(pipe$n) ""
  }
  # ======================================================================
  # sendToEngine:
  #   Send a command to a running analysis engine.
  # ======================================================================
  proc sendToEngine {n text} {
    catch {puts $::tacgame::analysisCoach(pipe$n) $text}
  }
  
  # ======================================================================
  # checkAnalysisStarted
  #   Called a short time after an analysis engine was started
  #   to send it commands if Scid has not seen any output from
  #   it yet.
  # ======================================================================
  proc checkAnalysisStarted {n} {
    global ::tacgame::analysisCoach
    if {$analysisCoach(seen$n)} { return }
    
    # Some Winboard engines do not issue any output when
    # they start up, so the fileevent above is never triggered.
    # Most, but not all, of these engines will respond in some
    # way once they have received input of some type.  This
    # proc will issue the same initialization commands as
    # those in processAnalysisInput below, but without the need
    # for a triggering fileevent to occur.
    
    set analysisCoach(seen$n) 1
    ::tacgame::sendToEngine $n "xboard"
    ::tacgame::sendToEngine $n "protover 2"
    ::tacgame::sendToEngine $n "post"
    ::tacgame::sendToEngine $n "ponder off"
    
    # Prevent some engines from making an immediate "book"
    # reply move as black when position is sent later:
    ::tacgame::sendToEngine $n "force"
  }
  
  # ======================================================================
  #
  # processInput from the engine blundering (Phalanx)
  #
  # ======================================================================
  proc processInput {} {
    global ::tacgame::analysisCoach ::tacgame::analysis
    
    # Get one line from the engine:
    set line [gets $analysisCoach(pipe1)]
    
    # check that the engine is really Phalanx
	 # Allowd versions include Phalanx-scid Phalanx-pg and XXIII
	 # upwards
	 if { ! $analysisCoach(seen1) && $line != {Phalanx XXII-pg} && $line != {Phalanx XXIII} && $line != {Phalanx XXII-scid} } {

      after cancel ::tacgame::phalanxGo
      ::tacgame::closeEngine 1
      # ::tacgame::closeEngine 2
      ::uci::closeUCIengine 2
      tk_messageBox -type ok -icon warning -parent .main -title "Scid" -message "Please choose the correct Phalanx engine"
      focus .
      destroy .coachWin
      ::tacgame::config
      return
    }
    
    # Check that the engine did not terminate unexpectedly:
    if {[eof $analysisCoach(pipe1)]} {
      fileevent $analysisCoach(pipe1) readable {}
      catch {close $analysisCoach(pipe1)}
      set analysisCoach(pipe1) ""
      tk_messageBox -type ok -icon info -parent .main -title "Scid" \
          -message "The analysis engine 1 terminated without warning; it probably crashed or had an internal error."
    }
    
    if {! $analysisCoach(seen1)} {
      # First line of output from the program, so send initial commands:
      set analysisCoach(seen1) 1
      ::tacgame::sendToEngine 1 "xboard"
      ::tacgame::sendToEngine 1 "post"
    }
    
    ::tacgame::makePhalanxMove $line
    
  }
  
  # ======================================================================
  # startAnalyzeMode:
  #   Put the engine in analyze mode
  # ======================================================================
  proc startAnalyze { } {
    global ::tacgame::analysisCoach ::tacgame::isLimitedAnalysisTime ::tacgame::analysisTime
    set n 2
    set ::analysis(waitForReadyOk$n) 1
    ::uci::sendToEngine $n "isready"
    vwait ::analysis(waitForReadyOk$n)
    ::uci::sendToEngine $n "position fen [sc_pos fen]"
    ::uci::sendToEngine $n "go infinite"
    
    if { $isLimitedAnalysisTime == 1 }  {
      after [expr 1000 * $analysisTime] ::tacgame::stopAnalyze
    }
    
  }
  # ======================================================================
  # stopAnalyzeMode:
  #   Stop the engine analyze mode
  # ======================================================================
  proc stopAnalyze { } {
    global ::tacgame::analysisCoach ::tacgame::isLimitedAnalysisTime ::tacgame::analysisTime
    
    after cancel ::tacgame::stopAnalyze
    ::uci::sendToEngine 2 "stop"
  }
  ################################################################################
  # returns true if last move is a mate and stops clocks
  ################################################################################
  proc endOfGame {} {
    if { [string index [sc_game info previousMove] end ] == "#"} {
      ::gameclock::stop 1
      ::gameclock::stop 2
      return 1
    }
    return 0
  }
  # ======================================================================
  # phalanxGo
  #		it is phalanx's turn to play
  # ======================================================================
  proc phalanxGo {} {
    global ::tacgame::analysisCoach ::tacgame::openingType ::tacgame::openingMovesList \
        ::tacgame::openingMovesHash ::tacgame::openingMoves ::tacgame::outOfOpening
    
    after cancel ::tacgame::phalanxGo
    
    ### should show endOfGame
    
    if {$analysisCoach(paused)} {
      .coachWin.fbuttons.resume configure -state normal
      return
    }
    
    if { [::tacgame::endOfGame] } { return }
    
    # check if Phalanx is already thinking
    if { $analysisCoach(automoveThinking1) == 1 } {
      after 1000 ::tacgame::phalanxGo
      return
    }
    
    updateAnalysisText
    
    if { [sc_pos side] != [::tacgame::getPhalanxColor] } {
      after 1000 ::tacgame::phalanxGo
      return
    }
    
    ::gameclock::stop 1
    ::gameclock::start 2
    repetition
    
    # make a move corresponding to a specific opening, (it is Phalanx's turn)
    if {$openingType == "specific" && !$outOfOpening} {
      set index 0
      # Warn if the user went out of the opening line chosen
      if { !$outOfOpening } {
        set ply [ expr [sc_pos moveNumber] * 2 - 1]
        if { [sc_pos side] == "white" } {
          set ply [expr $ply - 1]
        }
        
        if { [lsearch $openingMovesHash [sc_pos hash]] == -1 && [llength $openingMovesList] >= $ply} {
          set answer [tk_messageBox -icon question -parent .main -title $::tr(OutOfOpening) -type yesno \
              -message "$::tr(NotFollowedLine) $openingMoves\n $::tr(DoYouWantContinue)" ]
          if {$answer == no} {
            sc_move back 1
            updateBoard -pgn
            ::gameclock::stop 2
            ::gameclock::start 1
            after 1000 ::tacgame::phalanxGo
            return
          }  else  {
            set outOfOpening 1
          }
        }
      }
      
      set hpos [sc_pos hash]
      # Find a corresponding position in the opening line
      set length [llength $openingMovesHash]
      for {set i 0}   { $i < [expr $length-1] } { incr i } {
        set h [lindex $openingMovesHash $i]
        if {$h == $hpos} {
          set index [lsearch $openingMovesHash $h]
          set move [lindex $openingMovesList $index]
          # play the move
          set action "replace"
          if {![sc_pos isAt vend]} { set action [confirmReplaceMove] }
          if {$action == "replace"} {
            if {[catch {sc_move addSan $move}]} {}
          } elseif {$action == "var"} {
            sc_var create
            if {[catch {sc_move addSan $move}]} {}
          } elseif {$action == "mainline"} {
            sc_var create
            if {[catch {sc_move addSan $move}]} {}
            sc_var exit
            sc_var promote [expr {[sc_var count] - 1}]
            sc_move forward 1
          }
          
          ::utils::sound::AnnounceNewMove $move
          
          updateBoard -pgn -animate
          ::gameclock::stop 2
          ::gameclock::start 1
          repetition
          after 1000 ::tacgame::phalanxGo
          return
        }
      }
      
    }
    
    # Pascal Georges : original Phalanx does not have 'setboard'
    set analysisCoach(automoveThinking1) 1
    sendToEngine 1 "setboard [sc_pos fen]"
    sendToEngine 1 "go"
    after 1000 ::tacgame::phalanxGo
  }
  ################################################################################
  #   add current position for 3fold repetition detection and returns 1 if
  # the position is a repetion
  ################################################################################
  proc repetition {} {
    set elt [lrange [split [sc_pos fen]] 0 2]
    # append the position only if different from the last element
    if { $elt != [ lindex $::tacgame::lFen end ] } {
      lappend ::tacgame::lFen $elt
    }
    if { [llength [lsearch -all $::tacgame::lFen $elt] ] >=3 } {
      tk_messageBox -type ok -message $::tr(Draw) -parent .main -icon info
      return 1
    }
    return 0
  }
  # ======================================================================
  # makePhalanxMove:
  #
  # ======================================================================
  proc makePhalanxMove { input } {
    global ::tacgame::lscore ::tacgame::analysisCoach ::tacgame::currentPosHash ::tacgame::resignCount
    
    # The input move is of the form "my move is MOVE"
    if {[scan $input "my move is %s" move] != 1} { return 0 }
    
    ::tacgame::stopAnalyze
    
    # Phalanx will move : update the score list to detect any blunder
    if {[info exists ::tacgame::sc1]} {
      lappend lscore $::tacgame::sc1
    }
    
    # if the resign value has been reached more than 3 times in a raw, resign
    if { ( [getPhalanxColor] == "black" && [lindex $lscore end] >  $::informant("++-") ) || \
          ( [getPhalanxColor] == "white" && [lindex $lscore end] < [expr 0.0 - $::informant("++-")] ) } {
      incr resignCount
    } else  {
      set resignCount 0
    }
    
    # check the sequence of moves
    # in case of any event (board setup, move back/forward), reset score list
    if { ![sc_pos isAt start] && ![sc_pos isAt vstart]} {
      sc_move back 1
      if { [sc_pos hash] != $currentPosHash} {
        set lscore {}
        updateAnalysisText
      }
      sc_move forward 1
    } else  {
      if { [sc_pos hash] != $currentPosHash} {
        set lscore {}
        updateAnalysisText
      }
    }
    
    # play the move
    set action "replace"
    if {![sc_pos isAt vend]} { set action [confirmReplaceMove] }
    if {$action == "replace"} {
      if {[catch {sc_move addSan $move}]} {
        # No move from Phalanx : remove the score (last element)
        set lscore [lreplace $lscore end end]
        return 0
      }
    } elseif {$action == "var"} {
      sc_var create
      if {[catch {sc_move addSan $move}]} {
        # No move from Phalanx : remove the score (last element)
        set lscore [lreplace $lscore end end]
        return 0
      }
    } elseif {$action == "mainline"} {
      sc_var create
      if {[catch {sc_move addSan $move}]} {
        # No move from Phalanx : remove the score (last element)
        set lscore [lreplace $lscore end end]
        return 0
      }
      sc_var exit
      sc_var promote [expr {[sc_var count] - 1}]
      sc_move forward 1
    }
    
    set analysisCoach(automoveThinking1) 0
    set currentPosHash [sc_pos hash]
    
    ::tacgame::startAnalyze
    ::utils::sound::AnnounceNewMove $move
    updateBoard -pgn -animate
    
    ::gameclock::stop 2
    ::gameclock::start 1
    repetition
    
    if { $resignCount > 3 } {
      tk_messageBox -type ok -message $::tr(Iresign) -parent .main -icon info
      set resignCount 0
    }
    
    return 1
  }
  
  # ======================================================================
  # updateScore
  # ======================================================================
  proc updateScore { } {
    if { ! $::tacgame::showevaluation } { return }
    if {![info exists ::uci::uciInfo(score2)]} {
      set ::tacgame::scoreLabel ""
      return
    } else {
      set ::tacgame::scoreLabel "Score : $::uci::uciInfo(score2)"
    }
  }
  
  # ======================================================================
  # updateAnalysisText
  #   Update the text in an analysis window.
  #   Human blunders are not checked, only Phalanx'one
  # ======================================================================
  proc updateAnalysisText { } {
    global ::tacgame::analysisCoach ::tacgame::showblunder ::tacgame::blunderWarningLabel \
        ::tacgame::showblunder ::tacgame::showblundervalue ::tacgame::showblunderfound ::tacgame::showmovevalue \
        ::tacgame::showevaluation ::tacgame::lscore ::tacgame::threshold \
        ::tacgame::lastblundervalue ::tacgame::prev_lastblundervalue ::tacgame::scoreLabel \
        ::tacgame::blunderpending ::tacgame::prev_blunderpending ::tacgame::sc1
    
    # only update when it is human turn
    if { [getPhalanxColor] == [sc_pos side] } { return }
    
    catch {
      set sc1 $::uci::uciInfo(score2)
      set sc2 [lindex $lscore end]
    }
    
    # There are less than 2 scores in the list
    if {[llength $lscore] < 2} {
      set blunderWarningLabel $::tr(Noinfo)
      set scoreLabel ""
      if {[llength $lscore] == 1 && $showevaluation } {
        set scoreLabel "Score : [lindex $lscore end]"
      }
      return
    }
    
    # set sc1 [lindex $lscore end]
    # set sc2 [lindex $lscore end-1]
    
    if { $analysisCoach(automoveThinking1) } {
      set blunderWarningLabel $::tr(Noinfo)
    }
    
    # Check if a blunder was made by Phalanx at last move.
    # The check is done during player's turn
    if { $showblunder && [::tacgame::getPhalanxColor] != [sc_pos side] } {
      if {[llength $lscore] >=2} {
        if { ($sc1 - $sc2 > $threshold && [::tacgame::getPhalanxColor] == "black") || \
              ($sc1 - $sc2 < [expr 0.0 - $threshold] && [::tacgame::getPhalanxColor] == "white") } {
          set lastblundervalue [expr $sc1-$sc2]
          # append a ?!, ? or ?? to the move if there is none yet and if the game was not dead yet
          # (that is if the score was -6, if it goes down to -10, this is a normal evolution
          if { [expr abs($sc2)] < $::informant("++-") } {
            sc_pos clearNags
            set b [expr abs($lastblundervalue)]
            if { $b >= $::informant("?!") && $b < $::informant("?") } {
              sc_pos addNag "?!"
            } elseif { $b >= $::informant("?") && $b < $::informant("??") }  {
              sc_pos addNag "?"
            } elseif  { $b >= $::informant("??") } {
              sc_pos addNag "??"
            }
          }
          
          .coachWin.finformations.l1 configure -background LightCoral
          if { $showblundervalue } {
            set tmp $::tr(blunder)
            append tmp [format " %+8.2f" [expr abs($sc1-$sc2)]]
            set blunderWarningLabel $tmp
            set blunderpending 1
          } else {
            set blunderWarningLabel "$::tr(blunder) !"
          }
        } else {
          sc_pos clearNags
          .coachWin.finformations.l1 configure -background linen
          set blunderWarningLabel $::tr(Noblunder)
          set blunderpending 0
        }
      }
    } else {
      set blunderWarningLabel "---"
    }
    
    if { !$showblunder || $analysisCoach(automoveThinking1) } {
      set blunderWarningLabel "---"
    }
    
    # displays current score sent by the "good" engine (Toga)
    if { $showevaluation } {
      set scoreLabel "Score : $sc1"
    } else {
      set scoreLabel ""
    }
  }
  
  # ======================================================================
  # getPhalanxColor
  #   Returns "white" or "black" (Phalanx always plays at top)
  # ======================================================================
  proc getPhalanxColor {} {
    # Phalanx always plays for the upper side
    if { [::board::isFlipped .main.board] == 0 } {
      return "black"
    } else  {
      return "white"
    }
  }
  
  ################################################################################
  #
  ################################################################################
  set openingList [ list \
      "$::tr(Reti): 1.Nf3" \
      "$::tr(English): 1.c4" \
      "$::tr(d4Nf6Miscellaneous): 1.d4 Nf6" \
      "$::tr(Trompowsky): 1.d4 Nf6 2.Bg5" \
      "$::tr(Budapest): 1.d4 Nf6 2.c4 e5" \
      "$::tr(OldIndian): 1.d4 Nf6 2.c4 d6" \
      "$::tr(BenkoGambit): 1.d4 Nf6 2.c4 c5 3.d5 b5" \
      "$::tr(ModernBenoni): 1.d4 Nf6 2.c4 c5 3.d5 e6" \
      "$::tr(DutchDefence): 1.d4 f5" \
      "1.e4" \
      "$::tr(Scandinavian): 1.e4 d5" \
      "$::tr(AlekhineDefence): 1.e4 Nf6" \
      "$::tr(Pirc): 1.e4 d6" \
      "$::tr(CaroKann): 1.e4 c6" \
      "$::tr(CaroKannAdvance): 1.e4 c6 2.d4 d5 3.e5" \
      "$::tr(Sicilian): 1.e4 c5" \
      "$::tr(SicilianAlapin): 1.e4 c5 2.c3" \
      "$::tr(SicilianClosed): 1.e4 c5 2.Nc3" \
      "$::tr(Sicilian): 1.e4 c5 2.Nf3 Nc6" \
      "$::tr(Sicilian): 1.e4 c5 2.Nf3 e6" \
      "$::tr(SicilianRauzer): 1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 Nc6" \
      "$::tr(SicilianDragon): 1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 g6 " \
      "$::tr(SicilianScheveningen): 1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 e6" \
      "$::tr(SicilianNajdorf): 1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 a6" \
      "$::tr(OpenGame): 1.e4 e5" \
      "$::tr(Vienna): 1.e4 e5 2.Nc3" \
      "$::tr(KingsGambit): 1.e4 e5 2.f4" \
      "$::tr(RussianGame): 1.e4 e5 2.Nf3 Nf6" \
      "$::tr(OpenGame): 1.e4 e5 2.Nf3 Nc6" \
      "$::tr(ItalianTwoKnights): 1.e4 e5 2.Nf3 Nc6 3.Bc4" \
      "$::tr(Spanish): 1.e4 e5 2.Nf3 Nc6 3.Bb5" \
      "$::tr(SpanishExchange): 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Bxc6" \
      "$::tr(SpanishOpen): 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O Nxe4" \
      "$::tr(SpanishClosed): 1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O Be7" \
      "$::tr(FrenchDefence): 1.e4 e6" \
      "$::tr(FrenchAdvance): 1.e4 e6 2.d4 d5 3.e5" \
      "$::tr(FrenchTarrasch): 1.e4 e6 2.d4 d5 3.Nd2" \
      "$::tr(FrenchWinawer): 1.e4 e6 2.d4 d5 3.Nc3 Bb4" \
      "$::tr(FrenchExchange): 1.e4 e6 2.d4 d5 3.exd5 exd5" \
      "$::tr(QueensPawn): 1.d4 d5" \
      "$::tr(Slav): 1.d4 d5 2.c4 c6" \
      "$::tr(QGA): 1.d4 d5 2.c4 dxc4" \
      "$::tr(QGD): 1.d4 d5 2.c4 e6" \
      "$::tr(QGDExchange): 1.d4 d5 2.c4 e6 3.cxd5 exd5" \
      "$::tr(SemiSlav): 1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Nf3 c6" \
      "$::tr(QGDwithBg5): 1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Bg5" \
      "$::tr(QGDOrthodox): 1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Bg5 Be7 5.e3 O-O 6.Nf3 Nbd7" \
      "$::tr(Grunfeld): 1.d4 Nf6 2.c4 g6 3.Nc3 d5" \
      "$::tr(GrunfeldExchange): 1.d4 Nf6 2.c4 g6 3.Nc3 d5 4.cxd5" \
      "$::tr(GrunfeldRussian): 1.d4 Nf6 2.c4 g6 3.Nc3 d5 4.Nf3 Bg7 5.Qb3" \
      "$::tr(Catalan): 1.d4 Nf6 2.c4 e6 3.g3 " \
      "$::tr(CatalanOpen): 1.d4 Nf6 2.c4 e6 3.g3 d5 4.Bg2 dxc4" \
      "$::tr(CatalanClosed): 1.d4 Nf6 2.c4 e6 3.g3 d5 4.Bg2 Be7" \
      "$::tr(QueensIndian): 1.d4 Nf6 2.c4 e6 3.Nf3 b6" \
      "$::tr(NimzoIndian): 1.d4 Nf6 2.c4 e6 3.Nc3 Bb4" \
      "$::tr(NimzoIndianClassical): 1.d4 Nf6 2.c4 e6 3.Nc3 Bb4 4.Qc2" \
      "$::tr(NimzoIndianRubinstein): 1.d4 Nf6 2.c4 e6 3.Nc3 Bb4 4.e3" \
      "$::tr(KingsIndian): 1.d4 Nf6 2.c4 g6" \
      "$::tr(KingsIndianSamisch): 1.d4 Nf6 2.c4 g6 4.e4 d6 5.f3" \
      "$::tr(KingsIndianMainLine): 1.d4 Nf6 2.c4 g6 4.e4 d6 5.Nf3" \
      ]
}
###
### End of file: tacgame.tcl
###
###
### sergame.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
################################################################################
# The number used for the engine playing a serious game is 3
################################################################################

namespace eval sergame {
  
  # DEBUG
  set ::uci::uciInfo(log_stdout3) 0
  
  # if true, follow a specific opening
  set openingMovesList {}
  set openingMovesHash {}
  set openingMoves ""
  set outOfOpening 0
  array set engineListBox {}
  set engineName ""
  set bookSlot 2
  
  # list of fen positions played to detect 3 fold repetition
  set lFen {}
  set lastPlayerMoveUci ""
  
  ################################################################################
  #
  ################################################################################
  proc config {} {
    global ::sergame::configWin ::sergame::chosenOpening
    
    # check if game window is already opened. If yes abort previous game
    set w ".serGameWin"
    if {[winfo exists $w]} {
      focus .
      destroy $w
    }
    
    set w ".configSerGameWin"
    if {[winfo exists $w]} {
      focus $w
      return
    }
    
    toplevel $w
    wm title $w "$::tr(configuregame)"
    
    bind $w <F1> { helpWindow SeriousGame }
    setWinLocation $w
    
    ttk::labelframe $w.fengines -text $::tr(Engine)
    ttk::frame $w.fbook -relief groove -borderwidth 1
    ttk::labelframe $w.ftime -text $::tr(TimeMode)
    ttk::frame $w.fconfig -relief groove -borderwidth 1
    ttk::frame $w.fopening -relief groove -borderwidth 1
    ttk::frame $w.fbuttons
    
    pack $w.fengines $w.fbook $w.ftime $w.fconfig -side top -fill x
    pack $w.fopening -side top -fill both -expand 1
    pack $w.fbuttons -side top -fill x
    
    # builds the list of UCI engines
    ttk::frame $w.fengines.fEnginesList -relief raised -borderwidth 1
    listbox $w.fengines.fEnginesList.lbEngines -yscrollcommand "$w.fengines.fEnginesList.ybar set" \
        -height 5 -width 50 -exportselection 0
    ttk::scrollbar $w.fengines.fEnginesList.ybar -command "$w.fengines.fEnginesList.lbEngines yview"
    pack $w.fengines.fEnginesList.ybar -side left -fill y
    pack $w.fengines.fEnginesList.lbEngines -side left -fill both -expand yes
    pack $w.fengines.fEnginesList -expand yes -fill both -side top
    set i 0
    set idx 0
    foreach e $::engines(list) {
      if { [lindex $e 7] != 1} { incr idx ; continue }
      set ::sergame::engineListBox($i) $idx
      set name [lindex $e 0]
      $w.fengines.fEnginesList.lbEngines insert end $name
      incr i
      incr idx
    }
    
    # Engine configuration (limit strength for example)
    ttk::button $w.fengines.bEngineConfig -text $::tr(ConfigureUCIengine) -command {
      set sel [.configSerGameWin.fengines.fEnginesList.lbEngines curselection]
      set index $::sergame::engineListBox($sel)
      set engineData [lindex $::engines(list) $index]
      set name [lindex $engineData 0]
      set cmd [ toAbsPath [lindex $engineData 1] ]
      set args [lindex $engineData 2]
      set dir [ toAbsPath [lindex $engineData 3] ]
      set options [lindex $engineData 8]
      set ::uci::autoSaveOptionsIndex $index
      set ::uci::autoSaveOptions 1
      ::uci::uciConfig 3 [ toAbsPath $cmd ] $args [ toAbsPath $dir ] $options
    }
    pack $w.fengines.bEngineConfig -side top
    
    # if no engines defined, bail out
    if {$i == 0} {
      tk_messageBox -type ok -message "No UCI engine defined" -icon error
      destroy $w
      return
    }
    
    $w.fengines.fEnginesList.lbEngines selection set $::sergame::chosenEngine
    $w.fengines.fEnginesList.lbEngines see $::sergame::chosenEngine
    
    # load book names
    ttk::checkbutton $w.fbook.cbUseBook -text $::tr(UseBook) -variable ::sergame::useBook
    set bookPath $::scidBooksDir
    set bookList [ lsort -dictionary [ glob -nocomplain -directory $bookPath *.bin ] ]
    if { [llength $bookList] == 0 } {
      $w.fbook.cbUseBook configure -state disabled
      set ::sergame::useBook 0
    }
    set i 0
    set idx 0
    set tmp {}
    foreach file  $bookList {
      lappend tmp [ file tail $file ]
      if { $::sergame::bookToUse == [ file tail $file ]} {
        set idx $i
      }
      incr i
    }
    
    ttk::combobox $w.fbook.combo -width 12 -values $tmp
    catch { ch$w.fbook.combo current $idx }
    
    set row 0
    
    pack $w.fbook.cbUseBook -side left
    pack $w.fbook.combo -side right -expand yes -fill both
    
    # Time bonus frame
    ttk::frame $w.ftime.timebonus
    pack  $w.ftime.timebonus -side top -fill x -expand 1
    
    ttk::radiobutton $w.ftime.timebonus.rb1 -text $::tr(TimeBonus) -value "timebonus" -variable ::sergame::timeMode
    grid $w.ftime.timebonus.rb1 -row $row -column 0 -sticky w -rowspan 2
    
    ttk::label $w.ftime.timebonus.whitelabel -text $::tr(White)
    grid $w.ftime.timebonus.whitelabel -row $row -column 1
    spinbox $w.ftime.timebonus.whitespminutes -background white -width 4 -from 1 -to 120 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.ftime.timebonus.whitespminutes -row $row -column 2
    ttk::label $w.ftime.timebonus.whitelminutes -text $::tr(TimeMin)
    grid $w.ftime.timebonus.whitelminutes -row $row -column 3
    spinbox $w.ftime.timebonus.whitespseconds -background white -width 4 -from 0 -to 60 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.ftime.timebonus.whitespseconds -row $row -column 4
    ttk::label $w.ftime.timebonus.whitelseconds -text $::tr(TimeSec)
    grid $w.ftime.timebonus.whitelseconds -row $row -column 5
    
    incr row
    ttk::label $w.ftime.timebonus.blacklabel -text $::tr(Black)
    grid $w.ftime.timebonus.blacklabel -row $row -column 1
    spinbox $w.ftime.timebonus.blackspminutes -background white -width 4 -from 1 -to 120 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.ftime.timebonus.blackspminutes -row $row -column 2
    ttk::label $w.ftime.timebonus.blacklminutes -text $::tr(TimeMin)
    grid $w.ftime.timebonus.blacklminutes -row $row -column 3
    spinbox $w.ftime.timebonus.blackspseconds -background white -width 4 -from 0 -to 60 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.ftime.timebonus.blackspseconds -row $row -column 4
    ttk::label $w.ftime.timebonus.blacklseconds -text $::tr(TimeSec)
    grid $w.ftime.timebonus.blacklseconds -row $row -column 5
    
    $w.ftime.timebonus.whitespminutes set [expr $::uci::uciInfo(wtime3) / (60 * 1000)]
    $w.ftime.timebonus.whitespseconds set [expr $::uci::uciInfo(winc3) /  1000]
    $w.ftime.timebonus.blackspminutes set [expr $::uci::uciInfo(btime3) / (60 * 1000)]
    $w.ftime.timebonus.blackspseconds set [expr $::uci::uciInfo(binc3) /  1000 ]
    
    # Fixed depth
    ttk::frame $w.ftime.depth
    ttk::radiobutton $w.ftime.depth.button -text $::tr(FixedDepth) -value "depth" -variable ::sergame::timeMode
    spinbox $w.ftime.depth.value -background white -width 4 -from 1 -to 20 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    $w.ftime.depth.value set $::sergame::depth
    
    pack $w.ftime.depth -side top -fill x
    pack $w.ftime.depth.button -side left
    pack $w.ftime.depth.value -side left
    
    ttk::frame $w.ftime.nodes
    ttk::radiobutton $w.ftime.nodes.button -text "$::tr(Nodes) (x1000)" -value "nodes" -variable ::sergame::timeMode
    spinbox $w.ftime.nodes.value -background white -width 4 -from 5 -to 10000 -increment 5 -validate all -vcmd { regexp {^[0-9]+$} %P }
    $w.ftime.nodes.value set [ expr $::sergame::nodes /1000]
    
    pack $w.ftime.nodes -side top -fill x
    pack $w.ftime.nodes.button -side left
    pack $w.ftime.nodes.value -side left
    
    ttk::frame $w.ftime.movetime
    ttk::radiobutton $w.ftime.movetime.button -text $::tr(SecondsPerMove) -value "movetime" -variable ::sergame::timeMode
    spinbox $w.ftime.movetime.value -background white -width 4 -from 1 -to 120 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    $w.ftime.movetime.value set [ expr $::sergame::movetime /1000]
    
    pack $w.ftime.movetime -side top -fill x
    pack $w.ftime.movetime.button -side left
    pack $w.ftime.movetime.value -side left
    
    # New game or use current position ?
    ttk::checkbutton $w.fconfig.cbPosition -text $::tr(StartFromCurrentPosition) -variable ::sergame::startFromCurrent
    pack $w.fconfig.cbPosition  -side top -anchor w
    
    # ponder
    ttk::checkbutton $w.fconfig.cbPonder -text $::tr(Ponder) -variable ::sergame::ponder
    pack $w.fconfig.cbPonder  -side top -anchor w
    
    # Warn if the user makes weak/bad moves
    ttk::checkbutton $w.fconfig.cbCoach -text $::tr(CoachIsWatching) -variable ::sergame::coachIsWatching
    pack $w.fconfig.cbCoach -side top -anchor w
    
    # choose a specific opening
    ttk::checkbutton $w.fopening.cbOpening -text $::tr(SpecificOpening) -variable ::sergame::isOpening
    ttk::frame $w.fopening.fOpeningList -relief raised -borderwidth 1
    listbox $w.fopening.fOpeningList.lbOpening -yscrollcommand "$w.fopening.fOpeningList.ybar set" \
        -height 5 -width 50 -list ::tacgame::openingList -exportselection 0
    $w.fopening.fOpeningList.lbOpening selection set $::sergame::chosenOpening
    $w.fopening.fOpeningList.lbOpening see $::sergame::chosenOpening
    
    ttk::scrollbar $w.fopening.fOpeningList.ybar -command "$w.fopening.fOpeningList.lbOpening yview"
    pack $w.fopening.fOpeningList.lbOpening -side right -fill both -expand 1
    pack $w.fopening.fOpeningList.ybar -side right -fill y
    pack $w.fopening.cbOpening -fill x -side top
    pack $w.fopening.fOpeningList -expand yes -fill both -side top -expand 1
    
    ttk::button $w.fbuttons.close -text $::tr(Play) -command {
      focus .
      set ::sergame::chosenEngine [.configSerGameWin.fengines.fEnginesList.lbEngines curselection]
      set ::sergame::engineName [.configSerGameWin.fengines.fEnginesList.lbEngines get $::sergame::chosenEngine]
      set ::sergame::chosenOpening [.configSerGameWin.fopening.fOpeningList.lbOpening curselection]
      if {$::sergame::useBook} {
        set ::sergame::bookToUse [.configSerGameWin.fbook.combo get]
        if {$::sergame::bookToUse == "" } {
          set ::sergame::useBook 0
        }
      }
      set ::uci::uciInfo(wtime3) [expr [.configSerGameWin.ftime.timebonus.whitespminutes get]*1000*60]
      set ::uci::uciInfo(btime3) [expr [.configSerGameWin.ftime.timebonus.blackspminutes get]*1000*60]
      set ::uci::uciInfo(winc3) [expr [.configSerGameWin.ftime.timebonus.whitespseconds get]*1000]
      set ::uci::uciInfo(binc3) [expr [.configSerGameWin.ftime.timebonus.blackspseconds get]*1000]
      set ::uci::uciInfo(fixeddepth3) [.configSerGameWin.ftime.depth.value get]
      set ::uci::uciInfo(fixednodes3) [expr [.configSerGameWin.ftime.nodes.value get]*1000]
      set ::uci::uciInfo(movetime3) [expr [.configSerGameWin.ftime.movetime.value get]*1000]
      
      destroy .configSerGameWin
      ::sergame::play $::sergame::chosenEngine
    }
    ttk::button $w.fbuttons.cancel -textvar ::tr(Cancel) -command "focus .; destroy $w"
    
    pack $w.fbuttons.close $w.fbuttons.cancel -expand yes -side left
    
    bind $w <Escape> { .configSerGameWin.fbuttons.cancel invoke }
    bind $w <Return> { .configSerGameWin.fbuttons.close invoke }
    bind $w <F1> { helpWindow SeriousGame }
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
  }
  
  ################################################################################
  #
  ################################################################################
  proc play { engine {n 3} } {
    global ::sergame::chosenOpening ::sergame::isOpening ::tacgame::openingList ::sergame::openingMovesList \
        ::sergame::openingMovesHash ::sergame::openingMoves ::sergame::outOfOpening
    
    set ::sergame::lFen {}
    
    ::uci::startEngine $::sergame::engineListBox($engine) $n
    ::uci::sendUCIoptions $n
    
    set ::uci::uciInfo(prevscore$n) 0.0
    set ::uci::uciInfo(score$n) 0.0
    set ::uci::uciInfo(ponder$n) ""
    
    if {$::sergame::startFromCurrent} {
      set isOpening 0
    }
    
    # ponder
    if {$::sergame::ponder} {
      ::sergame::sendToEngine $n "setoption name Ponder value true"
    } else {
      ::sergame::sendToEngine $n "setoption name Ponder value false"
    }
    
    # if will follow a specific opening line
    if {$isOpening} {
      set fields [split [lindex $openingList $chosenOpening] ":"]
      set openingName [lindex $fields 0]
      set openingMoves [string trim [lindex $fields 1]]
      set openingMovesList ""
      set openingMovesHash ""
      set outOfOpening 0
      foreach m [split $openingMoves] {
        # in case of multiple adjacent spaces in opening line
        if {$m =={}} {
          continue
        }
        set p [string trim $m]
        lappend openingMovesList [string trim [regsub {^[1-9]+\.} $p ""] ]
      }
      
      sc_game new
      lappend openingMovesHash [sc_pos hash]
      foreach m  $openingMovesList {
        if {[catch {sc_move addSan $m}]} { }
        lappend openingMovesHash [sc_pos hash]
      }
    }
    if {!$::sergame::startFromCurrent} {
      # create a new game if a DB is opened
      sc_game new
      sc_game tags set -event "Serious game"
      if { [::board::isFlipped .main.board] } {
        sc_game tags set -white "$::sergame::engineName"
      } else  {
        sc_game tags set -black "$::sergame::engineName"
      }
      sc_game tags set -date [::utils::date::today]
      if {[sc_base inUse [sc_base current]]} { catch {sc_game save 0}  }
    }
    
    updateBoard -pgn
    ::windows::gamelist::Refresh
    updateTitle
    updateMenuStates
    set w ".serGameWin"
    if {[winfo exists $w]} {
      focus .
      destroy $w
      return
    }
    
    createToplevel $w
    setTitle $w "$::tr(coachgame) ($::sergame::engineName)"
    
    setWinLocation $w
    
    ttk::frame $w.fclocks -relief raised -borderwidth 1
    ttk::frame $w.fbuttons
    
    ::gameclock::new $w.fclocks 2 80 1
    ::gameclock::new $w.fclocks 1 80 1
    ::gameclock::reset 1
    ::gameclock::start 1
    
    ttk::button $w.fbuttons.close -textvar ::tr(Abort) -command ::sergame::abortGame
    pack $w.fbuttons.close -expand yes
    
    pack $w.fclocks -side top -expand yes -fill both
    pack $w.fbuttons -side top -expand yes -fill both
    
    bind $w <F1> { helpWindow TacticalGame }
    bind $w <Destroy> ::sergame::abortGame
    bind $w <Escape> ::sergame::abortGame
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
    
    # setup clocks
    if { [::sergame::getEngineColor] == "white" } {
      ::gameclock::setSec 2 [expr 0 - $::uci::uciInfo(wtime$n)/1000]
      ::gameclock::setSec 1 [expr 0 - $::uci::uciInfo(btime$n)/1000]
    } else  {
      ::gameclock::setSec 1 [expr 0 - $::uci::uciInfo(wtime$n)/1000]
      ::gameclock::setSec 2 [expr 0 - $::uci::uciInfo(btime$n)/1000]
    }
    
    set ::sergame::wentOutOfBook 0
    ::sergame::engineGo $n
  }
  ################################################################################
  #
  ################################################################################
  proc abortGame { { n 3 } } {
    set ::sergame::lFen {}
    if { $::uci::uciInfo(pipe$n) == ""} { return }
    after cancel ::sergame::engineGo $n
    ::uci::closeUCIengine $n
    ::gameclock::stop 1
    ::gameclock::stop 2
    set ::uci::uciInfo(bestmove$n) "abort"
    destroy .serGameWin
    focus .
    ::docking::cleanup .serGameWin
  }
  
  ################################################################################
  #
  ################################################################################
  proc sendToEngine {n text} {
    ::sergame::logEngine $n "Scid  : $text"
    catch {puts $::uci::uciInfo(pipe$n) $text}
  }
  ################################################################################
  # returns true if last move is a mate and stops clocks
  ################################################################################
  proc endOfGame {} {
    set move_done [sc_game info previousMove]
    if { [string index [sc_game info previousMove] end ] == "#"} {
      ::gameclock::stop 1
      ::gameclock::stop 2
      return 1
    }
    return 0
  }
  ################################################################################
  #
  ################################################################################
  proc engineGo { n } {
    global ::sergame::isOpening ::sergame::openingMovesList ::sergame::openingMovesHash ::sergame::openingMoves \
        ::sergame::timeMode ::sergame::outOfOpening
    
    after cancel ::sergame::engineGo $n
    
    if { [::sergame::endOfGame] } { return }
    
    if { [sc_pos side] != [::sergame::getEngineColor] } {
      after 1000 ::sergame::engineGo $n
      return
    }
    
    # The player moved : add clock time
    if {!([::sergame::getEngineColor] == "black" && [sc_pos moveNumber] == 1)} {
      if { [::sergame::getEngineColor] == "white" } {
        ::gameclock::add 1 [expr $::uci::uciInfo(binc$n)/1000]
      } else  {
        ::gameclock::add 1 [expr $::uci::uciInfo(winc$n)/1000]
      }
    }
    ::gameclock::stop 1
    ::gameclock::start 2
    repetition
    
    # make a move corresponding to a specific opening, (it is engine's turn)
    if {$isOpening && !$outOfOpening} {
      set index 0
      # Warn if the user went out of the opening line chosen
      if { !$outOfOpening } {
        set ply [ expr [sc_pos moveNumber] * 2 - 1]
        if { [sc_pos side] == "white" } {
          set ply [expr $ply - 1]
        }
        
        if { [lsearch $openingMovesHash [sc_pos hash]] == -1 && [llength $openingMovesList] >= $ply} {
          set answer [tk_messageBox -icon question -parent .main -title $::tr(OutOfOpening) -type yesno \
              -message "$::tr(NotFollowedLine) $openingMoves\n $::tr(DoYouWantContinue)" ]
          if {$answer == no} {
            sc_move back 1
            updateBoard -pgn
            ::gameclock::stop 2
            ::gameclock::start 1
            after 1000 ::sergame::engineGo $n
            return
          }  else  {
            set outOfOpening 1
          }
        }
      }
      
      set hpos [sc_pos hash]
      # Find a corresponding position in the opening line
      set length [llength $openingMovesHash]
      for {set i 0}   { $i < [expr $length-1] } { incr i } {
        set h [lindex $openingMovesHash $i]
        if {$h == $hpos} {
          set index [lsearch $openingMovesHash $h]
          set move [lindex $openingMovesList $index]
          # play the move
          set action "replace"
          if {![sc_pos isAt vend]} { set action [confirmReplaceMove] }
          if {$action == "replace"} {
            if {[catch {sc_move addSan $move}]} {}
          } elseif {$action == "var"} {
            sc_var create
            if {[catch {sc_move addSan $move}]} {}
          } elseif {$action == "mainline"} {
            sc_var create
            if {[catch {sc_move addSan $move}]} {}
            sc_var exit
            sc_var promote [expr {[sc_var count] - 1}]
            sc_move forward 1
          }
          
          updateBoard -pgn -animate
          ::gameclock::stop 2
          ::gameclock::start 1
          repetition
          if { [::sergame::getEngineColor] == "white" } {
            ::gameclock::add 2 [expr $::uci::uciInfo(winc$n)/1000]
          } else  {
            ::gameclock::add 2 [expr $::uci::uciInfo(binc$n)/1000]
          }
          after 1000 ::sergame::engineGo $n
          return
        }
      }
    }
    # -------------------------------------------------------------
    # use a book
    if {$::sergame::useBook && ! $::sergame::wentOutOfBook} {
      set move [ ::book::getMove $::sergame::bookToUse [sc_pos fen] $::sergame::bookSlot]
      if {$move == ""} {
        set ::sergame::wentOutOfBook 1
      } else  {
        sc_move addSan $move
        ::utils::sound::AnnounceNewMove $move
        # we made a book move so assume a score = 0
        set ::uci::uciInfo(prevscore$n) 0.0
        updateBoard -pgn -animate
        ::gameclock::stop 2
        ::gameclock::start 1
        repetition
        if {$timeMode == "timebonus"} {
          if { [::sergame::getEngineColor] == "white" } {
            ::gameclock::add 2 [expr $::uci::uciInfo(winc$n)/1000]
          } else  {
            ::gameclock::add 2 [expr $::uci::uciInfo(binc$n)/1000]
          }
        }
        after 1000 ::sergame::engineGo $n
        return
      }
    }
    # -------------------------------------------------------------
    # check if the engine pondered on the right move
    
    if { $::sergame::ponder && $::uci::uciInfo(ponder$n) == $::sergame::lastPlayerMoveUci} {
      ::sergame::sendToEngine $n "ponderhit"
    } else {
      
      if { $::sergame::ponder } {
        ::sergame::sendToEngine $n "stop"
      }
      set ::analysis(waitForReadyOk$n) 1
      ::sergame::sendToEngine $n "isready"
      vwait ::analysis(waitForReadyOk$n)
      ::sergame::sendToEngine $n "position fen [sc_pos fen]"
      if { [::sergame::getEngineColor] == "white" } {
        set wtime [expr [::gameclock::getSec 2] * 1000 ]
        set btime [expr [::gameclock::getSec 1] * 1000 ]
      } else  {
        set wtime [expr [::gameclock::getSec 1] * 1000 ]
        set btime [expr [::gameclock::getSec 2] * 1000 ]
      }
      if {$timeMode == "timebonus"} {
        ::sergame::sendToEngine $n "go wtime $wtime btime $btime winc $::uci::uciInfo(winc$n) binc $::uci::uciInfo(binc$n)"
      } elseif {$timeMode == "depth"} {
        ::sergame::sendToEngine $n "go depth $::uci::uciInfo(fixeddepth$n)"
      } elseif {$timeMode == "movetime"} {
        ::sergame::sendToEngine $n "go movetime $::uci::uciInfo(movetime$n)"
      } elseif {$timeMode == "nodes"} {
        ::sergame::sendToEngine $n "go nodes $::uci::uciInfo(fixednodes$n)"
      }
    }
    
    set ::uci::uciInfo(bestmove$n) ""
    vwait ::uci::uciInfo(bestmove$n)
    
    # -------------------------------------------------------------
    # if weak move detected, propose the user to tack back
    if { $::sergame::coachIsWatching && $::uci::uciInfo(prevscore$n) != "" } {
      set blunder 0
      set delta [expr $::uci::uciInfo(score$n) - $::uci::uciInfo(prevscore$n)]
      if {$delta > $::informant("?!") && [getEngineColor] == "white" ||
        $delta < [expr 0.0 - $::informant("?!")] && [getEngineColor] == "black" } {
        set blunder 1
      }
      
      if {$delta > $::informant("?") && [getEngineColor] == "white" ||
        $delta < [expr 0.0 - $::informant("?")] && [getEngineColor] == "black" } {
        set blunder 2
      }
      
      if {$delta > $::informant("??") && [getEngineColor] == "white" ||
        $delta < [expr 0.0 - $::informant("??")] && [getEngineColor] == "black" } {
        set blunder 3
      }
      
      if {$blunder == 1} {
        set tBlunder "DubiousMovePlayedTakeBack"
      } elseif {$blunder == 2} {
        set tBlunder "WeakMovePlayedTakeBack"
      } elseif {$blunder == 3} {
        set tBlunder "BadMovePlayedTakeBack"
      }
      
      if {$blunder != 0} {
        set answer [tk_messageBox -icon question -parent .main -title "Scid" -type yesno -message $::tr($tBlunder) ]
        if {$answer == yes} {
          sc_move back 1
          updateBoard -pgn
          ::gameclock::stop 2
          ::gameclock::start 1
          after 1000 ::sergame::engineGo $n
          return
        }
      }
    }
    
    # -------------------------------------------------------------
    if { $::uci::uciInfo(bestmove$n) == "abort" } {
      return
    }
    
    ::uci::sc_move_add $::uci::uciInfo(bestmove$n)
    ::utils::sound::AnnounceNewMove $::uci::uciInfo(bestmove$n)
    set ::uci::uciInfo(prevscore$n) $::uci::uciInfo(score$n)
    updateBoard -pgn -animate
    repetition
    
    # add time after a move played
    if {$timeMode == "timebonus"} {
      if { [::sergame::getEngineColor] == "white" } {
        ::gameclock::add 2 [expr $::uci::uciInfo(winc$n)/1000]
      } else  {
        ::gameclock::add 2 [expr $::uci::uciInfo(binc$n)/1000]
      }
    }
    ::gameclock::stop 2
    ::gameclock::start 1
    
    # ponder mode (the engine just played its move)
    if {$::sergame::ponder && $::uci::uciInfo(ponder$n) != ""} {
      ::sergame::sendToEngine $n "position fen [sc_pos fen] moves $::uci::uciInfo(ponder$n)"
      if { [::sergame::getEngineColor] == "white" } {
        set wtime [expr [::gameclock::getSec 2] * 1000 ]
        set btime [expr [::gameclock::getSec 1] * 1000 ]
      } else  {
        set wtime [expr [::gameclock::getSec 1] * 1000 ]
        set btime [expr [::gameclock::getSec 2] * 1000 ]
      }
      if {$timeMode == "timebonus"} {
        ::sergame::sendToEngine $n "go ponder wtime $wtime btime $btime winc $::uci::uciInfo(winc$n) binc $::uci::uciInfo(binc$n)"
      } elseif {$timeMode == "depth"} {
        ::sergame::sendToEngine $n "go ponder depth $::uci::uciInfo(fixeddepth$n)"
      } elseif {$timeMode == "movetime"} {
        ::sergame::sendToEngine $n "go ponder movetime $::uci::uciInfo(movetime$n)"
      } elseif {$timeMode == "nodes"} {
        ::sergame::sendToEngine $n "go ponder nodes $::uci::uciInfo(fixednodes$n)"
      }
    }
    
    after 1000 ::sergame::engineGo $n
  }
  ################################################################################
  #   add current position for 3fold repetition detection and returns 1 if
  # the position is a repetion
  ################################################################################
  proc repetition {} {
    set elt [lrange [split [sc_pos fen]] 0 2]
    # append the position only if different from the last element
    if { $elt != [ lindex $::sergame::lFen end ] } {
      lappend ::sergame::lFen $elt
    }
    
    if { [llength [lsearch -all $::sergame::lFen $elt] ] >=3 } {
      tk_messageBox -type ok -message $::tr(Draw) -parent .main -icon info
      puts $::sergame::lFen
      return 1
    }
    return 0
  }
  ################################################################################
  #
  ################################################################################
  proc getEngineColor {} {
    # Engine always plays for the upper side
    if { [::board::isFlipped .main.board] == 0 } {
      return "black"
    } else  {
      return "white"
    }
  }
  
  ################################################################################
  #
  ################################################################################
  proc logEngine {n text} {
    if {$::uci::uciInfo(log_stdout$n)} {
      puts stdout "$n $text"
    }
  }
  
}
###
### End of file: sergame.tcl
###
###
### calvar.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
################################################################################
# The number used for the engine playing a serious game is 4
################################################################################

namespace eval calvar {
  # DEBUG
  set ::uci::uciInfo(log_stdout4) 0
  
  array set engineListBox {}
  set blunderThreshold 0.2
  set thinkingTimePerLine 10
  set thinkingTimePosition 30
  set currentLine 1
  set currentListMoves {}
  # each line begins with a list of moves, a nag code and ends with FEN
  set lines {}
  set analysisQueue {}
  
  # contains multipv analysis of the position, to see if the user considered all important lines
  set initPosAnalysis {}
  
  set working 0
  set midmove ""
  
  set afterIdPosition 0
  set afterIdLine 0
  
  trace add variable ::calvar::working write { ::calvar::traceWorking }
  ################################################################################
  #
  ################################################################################
  proc traceWorking {a b c} {
    set widget .calvarWin.fCommand.bDone
    if {$::calvar::working} {
      $widget configure -state disabled
    } else {
      $widget configure -state normal
    }
  }
  ################################################################################
  #
  ################################################################################
  proc reset {} {
    set currentLine 1
    set currentListMoves {}
    set lines {}
    set working 0
    set analysisQueue {}
    if {[winfo exists .calvarWin]} {
      .calvarWin.fText.t delete 1.0 end
    }
  }
  ################################################################################
  #
  ################################################################################
  proc config {} {
    
    # check if game window is already opened. If yes abort previous game
    set w ".calvarWin"
    if {[winfo exists $w]} {
      focus .calvarWin
      return
    }
    
    set w ".configCalvarWin"
    if {[winfo exists $w]} {
      focus $w
      return
    }
    
    toplevel $w
    wm title $w [::tr "ConfigureCalvar"]
    
    bind $w <F1> { helpWindow CalVar }
    setWinLocation $w
    
    # builds the list of UCI engines
    ttk::frame $w.fengines -relief raised -borderwidth 1
    listbox $w.fengines.lbEngines -yscrollcommand "$w.fengines.ybar set" -height 5 -width 50 -exportselection 0
    ttk::scrollbar $w.fengines.ybar -command "$w.fengines.lbEngines yview"
    pack $w.fengines.ybar -side left -fill y
    pack $w.fengines.lbEngines -side left -fill both -expand yes
    pack $w.fengines -expand yes -fill both -side top
    set i 0
    set idx 0
    foreach e $::engines(list) {
      if { [lindex $e 7] != 1} { incr idx ; continue }
      set ::calvar::engineListBox($i) $idx
      set name [lindex $e 0]
      $w.fengines.lbEngines insert end $name
      incr i
      incr idx
    }
    $w.fengines.lbEngines selection set 0
    
    # if no engines defined, bail out
    if {$i == 0} {
      tk_messageBox -type ok -message "No UCI engine defined" -icon error
      destroy $w
      return
    }
    
    # parameters setting
    set f $w.parameters
    ttk::frame $w.parameters
    pack $f -expand yes -fill both
    # label $f.lThreshold -text "Threshold"
    # spinbox $f.sbThreshold -background white -width 3 -textvariable ::calvar::blunderThreshold -from 0.1 -to 1.5 -increment 0.1
    # pack $f.lThreshold $f.sbThreshold -side left
    ttk::label $f.lTime -text "Move thinking time"
    spinbox $f.sbTime -background white -width 3 -textvariable ::calvar::thinkingTimePerLine -from 5 -to 120 -increment 5 -validate all -vcmd { regexp {^[0-9]+$} %P }
    pack $f.lTime $f.sbTime -side left
    ttk::label $f.lTime2 -text "Position thinking time"
    spinbox $f.sbTime2 -background white -width 3 -textvariable ::calvar::thinkingTimePosition -from 5 -to 300 -increment 5 -validate all -vcmd { regexp {^[0-9]+$} %P }
    pack $f.lTime2 $f.sbTime2 -side left
    
    ttk::frame $w.fbuttons
    pack $w.fbuttons -expand yes -fill both
    ttk::button $w.fbuttons.start -text Start -command {
      focus .
      set chosenEngine [.configCalvarWin.fengines.lbEngines curselection]
      set ::calvar::engineName [.configCalvarWin.fengines.lbEngines get $chosenEngine]
      destroy .configCalvarWin
      ::calvar::start $chosenEngine
    }
    ttk::button $w.fbuttons.cancel -textvar ::tr(Cancel) -command "focus .; destroy $w"
    
    pack $w.fbuttons.start $w.fbuttons.cancel -expand yes -side left -padx 20 -pady 2
    
    bind $w <Escape> { .configCalvarWin.fbuttons.cancel invoke }
    bind $w <Return> { .configCalvarWin.fbuttons.start invoke }
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
  }
  ################################################################################
  #
  ################################################################################
  proc start { engine { n 4 } } {
    
    ::calvar::reset
    
    set w ".calvarWin"
    if {[winfo exists $w]} {
      focus .calvarWin
      return
    }
    createToplevel $w
    ::setTitle $w [::tr "Calvar"]
    bind $w <F1> { helpWindow CalVar }
    setWinLocation $w
    
    set f $w.fNag
    ttk::frame $f
    set i 0
    foreach nag { "=" "+=" "+/-" "+-" "=+" "-/+" "-+" } {
      ttk::button $f.nag$i -text $nag -command "::calvar::nag $nag" -width 3
      pack $f.nag$i -side left
      incr i
    }
    pack $f -expand 1 -fill both
    
    set f $w.fText
    ttk::frame $f
    text $f.t -height 12 -width 50
    pack $f.t -expand 1 -fill both
    pack $f -expand 1 -fill both
    
    set f $w.fPieces
    ttk::frame $f
    ttk::label $f.lPromo -text "Promotion"
    pack $f.lPromo -side left
    foreach piece { "q" "r" "b" "n" } {
      ttk::button $f.p$piece -image w${piece}20 -command "::calvar::promo $piece"
      pack $f.p$piece -side left
    }
    pack $f -expand 1 -fill both
    
    set f $w.fCommand
    ttk::frame $f
    ttk::button $f.bDone -text [::tr "DoneWithPosition"] -command ::calvar::positionDone
    pack $f.bDone
    pack $f -expand 1 -fill both
    
    set f $w.fbuttons
    ttk::frame $f
    pack $f -expand 1 -fill both
    ttk::button $w.fbuttons.stop -textvar ::tr(Stop) -command "::calvar::stop"
    pack $w.fbuttons.stop -expand yes -side left -padx 20 -pady 2
    
    bind $w <Escape> { .calvarWin.fbuttons.stop invoke }
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
    
    # start engine and set MultiPV to 10
    ::uci::startEngine $::calvar::engineListBox($engine) $n
    
    set ::analysis(multiPVCount$n) 10
    ::uci::sendToEngine $n "setoption name MultiPV value $::analysis(multiPVCount$n)"
    set ::calvar::suggestMoves_old $::suggestMoves
    set ::calvar::hideNextMove_old $::gameInfo(hideNextMove)
    
    set ::suggestMoves 0
    set ::gameInfo(hideNextMove) 1
    updateBoard
    
    # fill initPosAnalysis for the current position
    set ::calvar::working 1
    ::calvar::startAnalyze "" "" [sc_pos fen]
    
    set ::calvar::afterIdPosition [after [expr $::calvar::thinkingTimePosition * 1000] { ::calvar::stopAnalyze "" "" "" ; ::calvar::addLineToCompute "" }]
    ::createToplevelFinalize $w
  }
  ################################################################################
  #
  ################################################################################
  proc stop { {n  4 } } {
    after cancel $::calvar::afterIdPosition
    after cancel $::calvar::afterIdLine
    ::uci::closeUCIengine $n
    focus .
    destroy .calvarWin
    set ::suggestMoves $::calvar::suggestMoves_old
    set ::gameInfo(hideNextMove) $::calvar::hideNextMove_old
    updateBoard
  }
  
  ################################################################################
  #
  ################################################################################
  proc pressSquare { sq } {
    global ::calvar::midmove
    
    set sansq [::board::san $sq]
    if {$midmove == ""} {
      set midmove $sansq
    } else {
      lappend ::calvar::currentListMoves "$midmove$sansq"
      set midmove ""
    }
    set tmp " "
    if {$midmove == ""} {
      set tmp "-"
    }
    .calvarWin.fText.t insert "$::calvar::currentLine.end" "$tmp$sansq"
  }
  ################################################################################
  #
  ################################################################################
  proc promo { piece } {
    if { [llength $::calvar::currentListMoves] == 0 } { return }
    
    set tmp [lindex $::calvar::currentListMoves end]
    set tmp "$tmp$piece"
    lset ::calvar::currentListMoves end $tmp
    .calvarWin.fText.t insert end "$piece"
  }
  ################################################################################
  # This will end a line, and start engine computation
  ################################################################################
  proc nag { n } {
    .calvarWin.fText.t insert "$::calvar::currentLine.end" " $n\n"
    set newline [list $::calvar::currentListMoves $n [sc_pos fen]]
    lappend ::calvar::lines $newline
    incr ::calvar::currentLine
    addLineToCompute $newline
    set ::calvar::currentListMoves {}
  }
  ################################################################################
  #
  ################################################################################
  proc addLineToCompute {line {n 4} } {
    global ::calvar::analysisQueue
    puts "====>>> addLineToCompute $line"
    if {$line != ""} {
      lappend analysisQueue $line
    }
    if { $::calvar::working } { return }
    
    while { [llength $analysisQueue] != 0 } {
      set line [lindex $analysisQueue 0]
      set analysisQueue [lreplace analysisQueue 0 0]
      computeLine $line
    }
  }
  ################################################################################
  #
  ################################################################################
  proc computeLine {line {n 4} } {
    set ::calvar::working 1
    puts "---->>>> computeLine $line"
    set moves [ lindex $line 0 ]
    set nag [ lindex $line 1 ]
    set fen [ lindex $line 2 ]
    startAnalyze $moves $nag $fen
    set ::calvar::afterIdLine [after [expr $::calvar::thinkingTimePerLine * 1000] "::calvar::stopAnalyze [list $moves $nag $fen]"]
  }
  ################################################################################
  # we suppose FEN has not changed !
  ################################################################################
  proc handleResult {moves nag fen {n 4} } {
    set comment ""
    
    set usermoves [::uci::formatPv $moves $fen]
    set firstmove [lindex $usermoves 0]
    
    # format engine's output
    # append first move to the variations
    set ::analysis(multiPV$n) {}
    for {set i 0 } {$i < [llength $::analysis(multiPVraw$n)]} {incr i} {
      set elt [lindex $::analysis(multiPVraw$n) $i ]
      set line [::uci::formatPvAfterMoves $firstmove [lindex $elt 2] ]
      set line "$firstmove $line"
      lappend ::analysis(multiPV$n) [list [lindex $elt 0] [lindex $elt 1] $line [lindex $elt 3]]
    }
    
    puts "==================================="
    puts "handleResult $::analysis(multiPV$n)"
    puts "==================================="
    
    if { [llength $moves] != [llength $usermoves]} {
      set comment " error in user moves [lrange $moves [llength $usermoves] end ]"
      puts $comment
    }
    
    set pv [ lindex $::analysis(multiPV$n) 0 ]
    if { [ llength $pv ] == 4 } {
      set engmoves [lindex $pv 2]
      # score is computed for the opposite side, so invert it
      set engscore [expr - 1.0 * [lindex $pv 1] ]
      set engdepth [lindex $pv 0]
      addVar $usermoves $engmoves $nag $comment $engscore
    } else  {
      puts "Error pv = $pv"
    }
  }
  ################################################################################
  # will add a variation at current position.
  # Try to merge the variation with an existing one.
  ################################################################################
  proc addVar {usermoves engmoves nag comment engscore} {
    puts "addVar usermoves $usermoves engmoves $engmoves nag $nag comment $comment"

    # Cannot add a variation to an empty variation:
    if {[sc_pos isAt vstart]  &&  [sc_pos isAt vend]} {
      # enter the first move as dummy variation
      sc_move addSan [lindex $engmoves 0]
      sc_move back
    }
    
    set repeat_move ""
    # If at the end of the game or a variation, repeat previous move
    if {[sc_pos isAt vend] && ![sc_pos isAt vstart]} {
      set repeat_move [sc_game info previousMoveNT]
      sc_move back
    }
    
    # first enter the user moves
    sc_var create
    if {$repeat_move != ""} {sc_move addSan $repeat_move}
    sc_move addSan $usermoves
    if {$comment != ""} {
      sc_pos setComment $comment
    }
    
    sc_pos addNag $nag
    
    # now enter the engine moves
    while {![sc_pos isAt vstart] } {sc_move back}
    if {$repeat_move != ""} {sc_move forward}
    sc_var create
    sc_pos setComment  "$::calvar::engineName : $engscore"
    sc_move addSan $engmoves
    sc_var exit
    sc_var exit
    
    if {$repeat_move != ""} {sc_move forward}

    updateBoard -pgn
  }
  ################################################################################
  # will add a variation at current position.
  # Try to merge the variation with an existing one.
  ################################################################################
  proc addMissedLine {moves score depth} {
    puts "addMissedLine moves $moves score $score depth $depth"

    # Cannot add a variation to an empty variation:
    if {[sc_pos isAt vstart]  &&  [sc_pos isAt vend]} {
      # enter the first move as dummy variation
      sc_move addSan [lindex $moves 0]
      sc_move back
    }
    
    set repeat_move ""
    # If at the end of the game or a variation, repeat previous move
    if {[sc_pos isAt vend] && ![sc_pos isAt vstart]} {
      set repeat_move [sc_game info previousMoveNT]
      sc_move back
    }
    
    sc_var create
    if {$repeat_move != ""} {sc_move addSan $repeat_move}
    sc_pos setComment "Missed line ($depth) $score"
    sc_move addSan $moves
    sc_var exit
    if {$repeat_move != ""} { sc_move forward }

    updateBoard -pgn
  }
  ################################################################################
  # The user stops entering var, check he founds all important ones.
  # All the moves that the user did not consider with a score better than the first best
  # move entered by the user should be pointed out.
  ################################################################################
  proc positionDone {} {
    global ::calvar::initPosAnalysis ::calvar::lines
    
    ################################################################################
    proc isPresent { engmoves } {
      global ::calvar::lines
      set res 0
      set firsteng [lindex $engmoves 0]
      foreach userLine $::calvar::lines {
        set usermoves [::uci::formatPv [lindex $userLine 0]]
        set firstuser [lindex $usermoves 0]
        if {$firstuser == $firsteng} { return 1 }
      }
      return 0
    }
    
    ################################################################################
    foreach pv $::calvar::initPosAnalysis {
      set engmoves [lindex $pv 2]
      set engscore [lindex $pv 1]
      set engdepth [lindex $pv 0]
      if { ! [isPresent $engmoves] } {
        addMissedLine $engmoves $engscore $engdepth
      } else {
        # the user considered at least one line (skip those that are below)
        puts "position done :: Line present"
        break
      }
    }
    ::calvar::reset
  }
  ################################################################################
  # startAnalyze:
  #   Put the engine in analyze mode and ponder on the first move entered by the user to see
  # if the line's evaluation is coherent
  ################################################################################
  proc startAnalyze {moves nag fen {n 4}} {
    global analysis
    
    # Check that the engine has not already had analyze mode started:
    if {$analysis(analyzeMode$n)} { return }
    set analysis(analyzeMode$n) 1
    set analysis(waitForReadyOk$n) 1
    ::uci::sendToEngine $n "isready"
    vwait analysis(waitForReadyOk$n)
    set analysis(fen$n) $fen
    if { [llength $moves] > 0 } {
      ::uci::sendToEngine $n "position fen $fen moves [lindex $moves 0]"
    } else {
      ::uci::sendToEngine $n "position fen $fen"
    }
    ::uci::sendToEngine $n "go infinite"
  }
  ################################################################################
  # stopAnalyzeMode
  ################################################################################
  proc stopAnalyze { moves nag fen {n 4} } {
    if {! $::analysis(analyzeMode$n)} { return }
    set ::analysis(analyzeMode$n) 0
    ::uci::sendToEngine $n "stop"
    
    if { [llength $moves] > 0 } {
      handleResult $moves $nag $fen
    } else {
      set ::calvar::initPosAnalysis $::analysis(multiPV$n)
    }
    set ::calvar::working 0
    addLineToCompute ""
  }
  
}
###
### End of file: calvar.tcl
###
###
### fics.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###

namespace eval fics {
  set server "freechess.org"
  set sockchan 0
  set seeklist {}
  set observedGame -1
  set playing 0
  set rated 0
  set waitForRating ""
  set waitForMoves ""
  set silence 1
  set sought 0
  set soughtlist {}
  set width 300
  set height 300
  set off 20
  set graphon 0
  set timeseal_pid 0
  font create font_offers -family courier -size 12 -weight bold
  set history {}
  set history_pos 0
  set offers_minelo 1000
  set offers_maxelo 2500
  set offers_mintime 0
  set offers_maxtime 60
  variable logged 0
  variable isGuestLogin 0
  array set profileVars {}
  array set findopponent {}

  set showabortreq 1
  set showadjournreq 1
  set showdrawreq 1
  set showtakebackreq 1

  set premoveSq1 -1
  set premoveSq2 -1

  ################################################################################
  #
  ################################################################################
  proc config {} {
    variable logged
    global ::fics::sockChan
    set w ".ficsConfig"

    if {[winfo exists $w]} {
      focus $w
      return
    }

    if {[winfo exists .fics]} {
      focus .fics
      return
    }

    set logged 0

    toplevel $w
    ::setTitle $w [::tr "ConfigureFics"]
    pack [ttk::frame $w.f]

    ttk::label $w.f.lLogin -text [::tr "CCDlgLoginName"]
    ttk::entry $w.f.login -width 20 -textvariable ::fics::login
    ttk::label $w.f.lPwd -text [::tr "CCDlgPassword"]
    ttk::entry $w.f.passwd -width 20 -textvariable ::fics::password
    ttk::button $w.f.connect -text [::tr "FICSConnect"] -state disabled -command {
      ::fics::connect [.ficsConfig.f.login get] [.ficsConfig.f.passwd get]
      destroy .ficsConfig
    }
    ttk::button $w.f.guest -text [::tr FICSGuest] -state disabled -command {
      ::fics::connect "guest" ""
      destroy .ficsConfig
    }
    ttk::button $w.f.cancel -text [::tr "Cancel"] -command { destroy .ficsConfig }

    set row 0
    grid $w.f.lLogin -column 0 -row $row
    grid $w.f.login -column 1 -row $row
    incr row
    grid $w.f.lPwd -column 0 -row $row
    grid $w.f.passwd -column 1 -row $row
    incr row

    # horizontal line
    ttk::frame $w.f.line$row -height 2 -borderwidth 2 -relief sunken
    grid $w.f.line$row -pady 5 -column 0 -row $row -columnspan 3 -sticky ew
    incr row

    # use default user variables
    ttk::checkbutton $w.f.cbvars -text [::tr "FICSdefaultuservars"] -variable ::fics::usedefaultvars
    grid $w.f.cbvars -column 0 -row $row -sticky w
    incr row

    # enable premove
    ttk::checkbutton $w.f.premove -text [::tr "FICSpremove"] -variable ::fics::premoveEnabled
    grid $w.f.premove -column 0 -row $row -sticky w
    incr row

    # Time seal configuration
    ttk::checkbutton $w.f.cbts -text "Time seal" -variable ::fics::use_timeseal -onvalue 1 -offvalue 0
    grid $w.f.cbts -column 0 -row $row -sticky w
    incr row
    ttk::entry $w.f.eExec -width 30 -textvariable ::fics::timeseal_exec
    ttk::button $w.f.bExec -text "..." -command { set ::fics::timeseal_exec [tk_getOpenFile] }
    grid $w.f.eExec -column 0 -row $row -columnspan 2
    grid $w.f.bExec -column 2 -row $row
    incr row
    ttk::label $w.f.lFICS_ip -text [::tr "FICSServerAddress" ]
    ttk::entry $w.f.ipserver -width 16 -textvariable ::fics::server_ip -state readonly
    ttk::button $w.f.bRefresh -text [::tr "FICSRefresh" ] -command ::fics::getIP
    ttk::label $w.f.lFICS_port -text [::tr "FICSServerPort"]
    ttk::entry $w.f.portserver -width 6 -textvariable ::fics::port_fics
    ttk::label $w.f.ltsport -text [::tr "FICSTimesealPort"]
    ttk::entry $w.f.portts -width 6 -textvariable ::fics::port_timeseal

    grid $w.f.lFICS_ip -column 0 -row $row
    grid $w.f.ipserver -column 1 -row $row
    grid $w.f.bRefresh -column 2 -row $row
    incr row
    grid $w.f.lFICS_port -column 0 -row $row
    grid $w.f.portserver -column 1 -row $row
    incr row
    grid $w.f.ltsport -column 0 -row $row
    grid $w.f.portts -column 1 -row $row
    incr row

    # horizontal line
    ttk::separator $w.f.line$row -orient horizontal
    grid $w.f.line$row -pady 5 -column 0 -row $row -columnspan 3 -sticky ew
    incr row

    grid $w.f.connect -column 0 -row $row -sticky ew
    grid $w.f.guest  -column 1 -row $row -sticky ew
    grid $w.f.cancel -column 2 -row $row -sticky ew

    bind $w <Escape> "$w.f.cancel invoke"
    bind $w <F1> { helpWindow FICSLogin}

    # Get IP adress of server (as Timeseal needs IP adress)
    if { $::fics::server_ip == "0.0.0.0" } {
      getIP
    }

    $w.f.connect configure -state normal
    $w.f.guest configure -state normal

  }
  ################################################################################
  #
  ################################################################################
  proc getIP {} {
    set b .ficsConfig.f.bRefresh
    $b configure -state disabled
    update
    # First handle the case of a network down
    if { [catch {set sockChan [socket -async $::fics::server $::fics::port_fics]} err]} {
      tk_messageBox -icon error -type ok -title "Unable to contact $::fics::server" -message $err -parent .ficsConfig.f
      return
    }

    # Then the case of a proxy
    set timeOut 5
    set i 0
    while { $i <= $timeOut } {
      after 1000

      if { [catch {set peer [ fconfigure $sockChan -peername ]} err]} {
        if {$i == $timeOut} {
          tk_messageBox -icon error -type ok -title "Unable to contact $::fics::server" -message $err -parent .ficsConfig.f
          return
        }
      } else  {
        break
      }
      incr i
    }

    set ::fics::server_ip [lindex $peer 0]
    ::close $sockChan
    $b configure -state normal
  }
  ################################################################################
  #
  ################################################################################
  proc setProfileVars { login } {
    global  ::fics::profileVars
    if { ! [info exists profileVars(initTime_$login)] } {
      return
    }
    set ::fics::findopponent(initTime) $profileVars(initTime_$login)
    set ::fics::findopponent(incTime) $profileVars(incTime_$login)
    set ::fics::findopponent(rated) $profileVars(rated_$login)
    set ::fics::findopponent(color) $profileVars(color_$login)
    set ::fics::findopponent(limitrating) $profileVars(limitrating_$login)
    set ::fics::findopponent(rating1) $profileVars(rating1_$login)
    set ::fics::findopponent(rating2) $profileVars(rating2_$login)
    set ::fics::findopponent(manual) $profileVars(manual_$login)
    set ::fics::findopponent(formula) $profileVars(formula_$login)
  }
  ################################################################################
  #
  ################################################################################
  proc syncProfileVars { login } {
    global  ::fics::profileVars
    variable isGuestLogin

    if {$isGuestLogin} {
      set login "guest"
    }
    set profileVars(initTime_$login) $::fics::findopponent(initTime)
    set profileVars(incTime_$login) $::fics::findopponent(incTime)
    set profileVars(rated_$login) $::fics::findopponent(rated)
    set profileVars(color_$login) $::fics::findopponent(color)
    set profileVars(limitrating_$login) $::fics::findopponent(limitrating)
    set profileVars(rating1_$login) $::fics::findopponent(rating1)
    set profileVars(rating2_$login) $::fics::findopponent(rating2)
    set profileVars(manual_$login) $::fics::findopponent(manual)
    set profileVars(formula_$login) $::fics::findopponent(formula)
  }
  ################################################################################
  #
  ################################################################################
  proc connect { login passwd } {
    global ::fics::sockchan ::fics::seeklist ::fics::width ::fics::height ::fics::off
    variable isGuestLogin

    if {$login != ""} {
      set ::fics::reallogin $login
      # do not reset the password if we log in as guest.
      # This allows to reset it if we have another UID.
      if {$login != "guest"} {
         set ::fics::password $passwd
      }
    } else {
      return
    }

    set isGuestLogin [string match -nocase "guest" $login]

    setProfileVars $login

    # check timeseal configuration
    if {$::fics::use_timeseal} {
      if {![ file executable $::fics::timeseal_exec ]} {
        tk_messageBox -title "Error" -icon error -type ok -message "Timeseal exec error : $::fics::timeseal_exec"
        return
      }
    }

    set w .fics
    ::createToplevel $w
    ::setTitle $w "Free Internet Chess Server $::fics::reallogin"
    pack [ttk::panedwindow $w.f -orient vertical] -expand 1 -fill both

    ttk::notebook $w.f.top
    ttk::frame $w.f.top.fconsole
    ttk::frame $w.f.top.fconsole.f1
    ttk::frame $w.f.top.fconsole.f2

    ttk::frame $w.f.top.foffers
    $w.f.top add $w.f.top.fconsole -sticky nsew -text [::tr "FICSConsole"]
    $w.f.top add $w.f.top.foffers -sticky nsew -text [::tr "FICSOffers"]

    pack $w.f.top.fconsole.f1  -fill both -expand 1
    pack $w.f.top.fconsole.f2 -fill x
    ttk::frame $w.f.bottom

    $w.f add $w.f.top -weight 1
    $w.f add $w.f.bottom -weight 1

    ttk::frame $w.f.bottom.left
    ttk::frame $w.f.bottom.right
    pack $w.f.bottom.left -side left
    pack $w.f.bottom.right -side left

    # graph
    canvas $w.f.top.foffers.c -background white -width $width -height $height -relief solid
    pack $w.f.top.foffers.c
    bind $w.f.top.foffers <Configure> { ::fics::configureCanvas}

    ttk::scrollbar $w.f.top.fconsole.f1.ysc -command { .fics.f.top.fconsole.f1.console yview }
    text $w.f.top.fconsole.f1.console -bg $::fics::consolebg -fg $::fics::consolefg -height $::fics::consoleheight -width $::fics::consolewidth  \
         -font font_Fixed -wrap word -yscrollcommand "$w.f.top.fconsole.f1.ysc set"
    pack $w.f.top.fconsole.f1.ysc -side left -fill y -side right
    pack $w.f.top.fconsole.f1.console -side left -fill both -expand 1 -side right

    #define colors for console
    $w.f.top.fconsole.f1.console tag configure seeking     -foreground $::fics::colseeking
    $w.f.top.fconsole.f1.console tag configure game        -foreground $::fics::colgame
    $w.f.top.fconsole.f1.console tag configure gameresult  -foreground $::fics::colgameresult
    $w.f.top.fconsole.f1.console tag configure ficspercent -foreground $::fics::colficspercent
    $w.f.top.fconsole.f1.console tag configure ficshelpnext -foreground $::fics::colficshelpnext -underline 1

    ttk::entry $w.f.top.fconsole.f2.cmd -width 32
    ttk::button $w.f.top.fconsole.f2.send -text [::tr "FICSSend"] -command ::fics::cmd
    bind $w.f.top.fconsole.f2.cmd <Return> { ::fics::cmd }
    bind $w.f.top.fconsole.f2.cmd <Up> { ::fics::cmdHistory up ; break }
    bind $w.f.top.fconsole.f2.cmd <Down> { ::fics::cmdHistory down ; break }
    bind $w.f.top.fconsole.f2.cmd <Left> " [bind TEntry <Left>] ; break "
    bind $w.f.top.fconsole.f2.cmd <Right> " [bind TEntry <Right>] ; break "
    pack $w.f.top.fconsole.f2.cmd $w.f.top.fconsole.f2.send -side left -fill x

    # clock 1 is white
    ::gameclock::new $w.f.bottom.left 1 100 0
    ::gameclock::new $w.f.bottom.left 2 100 0

    set row 0
    ttk::checkbutton $w.f.bottom.right.silence -image FICSsilence -variable ::fics::silence -onvalue 0 -offvalue 1 -command {
      ::fics::writechan "set gin $::fics::silence" "echo"
      ::fics::writechan "set seek $::fics::silence" "echo"
      ::fics::writechan "set silence $::fics::silence" "echo"
      ::fics::writechan "set chanoff [expr ! $::fics::silence ]" "echo"
    }
    ::utils::tooltip::Set $w.f.bottom.right.silence "[::tr FICSSilence]\n(set gin 0\nset seek 0\nset silence 0\nset chanoff 1)"
    set ::fics::silence 1

    set ::fics::graphon 0

    ttk::button $w.f.bottom.right.findopp -image FICSsearch  -command { ::fics::findOpponent }
    ::utils::tooltip::Set $w.f.bottom.right.findopp [::tr "FICSFindOpponent"]
    grid $w.f.bottom.right.findopp -column 0 -row $row -sticky ew -pady 2
    ttk::button $w.f.bottom.right.relay -image FICSrelayedgames -compound image -command { ::fics::writechan "tell relay listgames"}
    ::utils::tooltip::Set $w.f.bottom.right.relay "[::tr FICSRelayedGames]\n(tell relay listgames)"
    grid $w.f.bottom.right.relay -column 1 -row $row -sticky ew -pady 2
    ttk::button $w.f.bottom.right.games -image FICSusers -compound image -command { ::fics::writechan "games /bsu"}
    ::utils::tooltip::Set $w.f.bottom.right.games "[::tr FICSGames]\n(games /bsu)"
    grid $w.f.bottom.right.games -column 2 -row $row -sticky ew -pady 2
    ttk::button $w.f.bottom.right.uno -image FICSunobserve -compound image -command { ::fics::writechan "unobserve"}
    ::utils::tooltip::Set $w.f.bottom.right.uno "[::tr FICSUnobserve]\n(unobserve)"
    grid $w.f.bottom.right.uno -column 3 -row $row -sticky ew -pady 2
    ttk::button $w.f.bottom.right.profile -image FICSprofile -compound image -command { ::fics::writechan "finger" ; ::fics::writechan "history" }
    ::utils::tooltip::Set $w.f.bottom.right.profile "[::tr FICSProfile]\n(finger, history)"
    grid $w.f.bottom.right.profile -column 4 -row $row -sticky ew -pady 2

    incr row

    ttk::button $w.f.bottom.right.draw -image FICSdraw -command { ::fics::writechan "draw"}
    ::utils::tooltip::Set $w.f.bottom.right.draw "[::tr CCClaimDraw]\n(draw)"
    ttk::button $w.f.bottom.right.resign -image FICSresign -command { ::fics::writechan "resign"}
    ::utils::tooltip::Set $w.f.bottom.right.resign "[::tr CCResign]\n(resign)"
    grid $w.f.bottom.right.draw -column 0 -row $row -sticky ew -pady 2
    grid $w.f.bottom.right.resign -column 1 -row $row -sticky ew -pady 2
    ttk::button $w.f.bottom.right.abort -image FICSabort -command { ::fics::writechan "abort" }
    ::utils::tooltip::Set $w.f.bottom.right.abort "[::tr Abort]\n(abort)"
    grid $w.f.bottom.right.abort -column 2 -row $row -sticky ew -pady 2
    grid $w.f.bottom.right.silence -column 4 -row $row -sticky w
    incr row

    ttk::button $w.f.bottom.right.takeback -image FICStakeback1 -command { ::fics::writechan "takeback"}
    ::utils::tooltip::Set $w.f.bottom.right.takeback "[::tr FICSTakeback]\n(takeback)"
    ttk::button $w.f.bottom.right.takeback2 -image FICStakeback2 -command { ::fics::writechan "takeback 2"}
    ::utils::tooltip::Set $w.f.bottom.right.takeback2 "[::tr FICSTakeback2]\n(takeback 2)"

    grid $w.f.bottom.right.takeback -column 0 -row $row -sticky ew -pady 2
    grid $w.f.bottom.right.takeback2 -column 1 -row $row -sticky ew -pady 2
    incr row

    ttk::button $w.f.bottom.right.cancel -image FICSexit -command { ::fics::close }
    ::utils::tooltip::Set $w.f.bottom.right.cancel [::tr "Close"]
    grid $w.f.bottom.right.cancel -column 0 -columnspan 3 -row $row -sticky ew  -pady 2

    bind $w.f.top <<NotebookTabChanged>> { ::fics::tabchanged ; break }
    bind $w <Destroy> { catch ::fics::close }
    bind $w <Configure> "recordWinSize $w"

    bind $w <F1> { helpWindow FICS}
    bind $w.f.top.fconsole.f1.console <FocusIn> "focus $w.f.top.fconsole.f2.cmd"
    bind $w.f.top.fconsole.f1.console <Configure> { .fics.f.top.fconsole.f1.console yview moveto 1 }
    bind $w.f.top.fconsole.f1.console <ButtonPress-1> { ::fics::consoleClick %x %y %W }
    standardShortcuts $w

    # all widgets must be visible
    update
    set x [winfo reqwidth $w]
    set y [winfo reqheight $w]
    wm minsize $w $x $y

    setWinLocation $w
    setWinSize $w

    ::gameclock::setColor 1 white
    ::gameclock::setColor 2 black

    updateConsole "Connecting $login"

    # start timeseal proxy
    if {$::fics::use_timeseal} {
      updateConsole "Starting TimeSeal"
      if { [catch { set timeseal_pid [exec $::fics::timeseal_exec $::fics::server_ip $::fics::port_fics -p $::fics::port_timeseal &]} ] } {
        set ::fics::use_timeseal 0
        set port $::fics::port_fics
      } else {
        #wait for proxy to be ready !?
        after 500
        set server "localhost"
        set port $::fics::port_timeseal
      }
    } else {
      set server $::fics::server
      set port $::fics::port_fics
    }

    updateConsole "Socket opening"

    if { [catch { set sockchan [socket $server $port] } ] } {
      tk_messageBox -title "Error" -icon error -type ok -message "Network error\nCan't connect to $server $port" -parent .fics
      return
    }

    updateConsole "Channel configuration"

    fconfigure $sockchan -blocking 0 -buffering line -translation auto ;#-encoding iso8859-1 -translation crlf
    fileevent $sockchan readable ::fics::readchan
    setState disabled
  }
  ################################################################################
  #
  ################################################################################
  proc cmd {} {
    set l [.fics.f.top.fconsole.f2.cmd get]
    .fics.f.top.fconsole.f2.cmd delete 0 end
    if {$l == "quit"} {
      ::fics::close
      return
    }
    # do nothing if the command is void
    if {[string trim $l] == ""} { return }
    writechan $l "echo"
    lappend ::fics::history $l
    set ::fics::history_pos [llength $::fics::history]
  }
  ################################################################################
  #
  ################################################################################
  proc cmdHistory { action } {
    set t .fics.f.top.fconsole.f2.cmd

    if {$action == "up" && $::fics::history_pos > 0} {
      incr ::fics::history_pos -1
      $t delete 0 end
      $t insert end [lindex $::fics::history $::fics::history_pos]
    }
    if {$action == "down" && $::fics::history_pos < [expr [llength $::fics::history] -1] } {
      incr ::fics::history_pos
      $t delete 0 end
      $t insert end [lindex $::fics::history $::fics::history_pos]
    }
  }
  ################################################################################
  #
  ################################################################################
  proc findOpponent {} {
    set w .ficsfindopp
    if {[winfo exists $w]} {
      focus $w
      return
    }
    toplevel $w
    wm title $w [::tr "FICSFindOpponent"]
    pack [ttk::frame $w.f]

    ttk::label $w.f.linit -text [::tr "FICSInitialTime"]
    spinbox $w.f.sbTime1 -background white -width 3 -textvariable ::fics::findopponent(initTime) -from 0 -to 120 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    ttk::label $w.f.linc -text [::tr "FICSIncrement"]
    spinbox $w.f.sbTime2 -background white -width 3 -textvariable ::fics::findopponent(incTime) -from 0 -to 120 -increment 1 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.f.linit -column 0 -row 0 -sticky ew
    grid $w.f.sbTime1 -column 1 -row 0 -sticky ew
    grid $w.f.linc -column 0 -row 1 -sticky ew
    grid $w.f.sbTime2 -column 1 -row 1 -sticky ew

    ttk::checkbutton $w.f.cbrated -text [::tr "FICSRatedGame"] -onvalue "rated" -offvalue "unrated" -variable ::fics::findopponent(rated)
    grid $w.f.cbrated -column 0 -row 2 -columnspan 2 -sticky ew

    ttk::label $w.f.color -text [::tr "FICSColour"]
    grid $w.f.color -column 0 -row 3 -columnspan 3 -sticky ew
    ttk::radiobutton $w.f.rb1 -text [::tr "FICSAutoColour"] -value "" -variable ::fics::findopponent(color)
    ttk::radiobutton $w.f.rb2 -text [::tr "White"] -value "white" -variable ::fics::findopponent(color)
    ttk::radiobutton $w.f.rb3 -text [::tr "Black"] -value "black" -variable ::fics::findopponent(color)
    grid $w.f.rb1 -column 0 -row 4 -sticky ew
    grid $w.f.rb2 -column 1 -row 4 -sticky ew
    grid $w.f.rb3 -column 2 -row 4 -sticky ew

    ttk::checkbutton $w.f.cblimitrating -text [::tr "RatingRange"] -variable ::fics::findopponent(limitrating)
    spinbox $w.f.sbrating1 -background white -width 4 -textvariable ::fics::findopponent(rating1) -from 1000 -to 3000 -increment 50 -validate all -vcmd { regexp {^[0-9]+$} %P }
    spinbox $w.f.sbrating2 -background white -width 4 -textvariable ::fics::findopponent(rating2) -from 1000 -to 3000 -increment 50 -validate all -vcmd { regexp {^[0-9]+$} %P }
    grid $w.f.cblimitrating -column 0 -row 5 -columnspan 2 -sticky ew
    grid $w.f.sbrating1 -column 0 -row 6 -sticky ew
    grid $w.f.sbrating2 -column 1 -row 6 -sticky ew

    ttk::checkbutton $w.f.cbmanual -text [::tr "FICSManualConfirm"] -onvalue "manual" -offvalue "auto" -variable ::fics::findopponent(manual)
    grid $w.f.cbmanual -column 0 -row 7 -columnspan 2 -sticky ew
    ttk::checkbutton $w.f.cbformula -text [::tr "FICSFilterFormula"] -onvalue "formula" -offvalue "" -variable ::fics::findopponent(formula)
    grid $w.f.cbformula -column 0 -row 8 -columnspan 2 -sticky ew

    ttk::button $w.f.seek -text [::tr "FICSIssueSeek"] -command {
      ::fics::syncProfileVars $::fics::login

      set range ""
      if {$::fics::findopponent(limitrating) } {
        set range "$::fics::findopponent(rating1)-$::fics::findopponent(rating2)"
      }
      set cmd "seek $::fics::findopponent(initTime) $::fics::findopponent(incTime) $::fics::findopponent(rated) \
          $::fics::findopponent(color) $::fics::findopponent(manual) $::fics::findopponent(formula) $range"
      ::fics::writechan $cmd
      destroy .ficsfindopp
    }
    ttk::button $w.f.cancel -text [::tr "Cancel"] -command "destroy $w"
    bind $w <F1> { helpWindow FICSfindOpp}

    grid $w.f.seek -column 0 -row 9 -sticky ew
    grid $w.f.cancel -column 1 -row 9 -sticky ew
  }
  ################################################################################
  #
  ################################################################################
  proc readchan {} {
    variable logged

    if {[eof $::fics::sockchan]} {
      fileevent $::fics::sockchan readable {}
      tk_messageBox -title "FICS" -icon error -type ok -message "Network error reading channel"
      ::fics::close "error"
      return
    }

    # switch from read to gets in case a read is done at the middle of a line
    if {! $logged} {
      set line [read $::fics::sockchan]
      foreach l [split $line "\n"] {
        readparse $l
      }
    } else  {
      set line [gets $::fics::sockchan]
      set line [string map {"\a" ""} $line]
      readparse $line
    }

    ::fics::makePremove
  }

  ################################################################################
  # Appends an array to soughtlist if the parameter is correct
  # returns 0 if the line is not parsed and so it is still pending for use
  ################################################################################
  proc parseSoughtLine { l } {
    global ::fics::offers_minelo ::fics::offers_maxelo ::fics::offers_mintime ::fics::offers_maxtime

    # it seems that the first offer starts with a prompt
    if {[string match "fics% *" $l]} {
      set l [string range $l 6 end]
    }

    if { [ catch { if {[llength $l] < 8} { return 0} } ] } { return 0}
    array set ga {}

    set offset 0
    set ga(game) [lindex $l 0]
    if { ! [string is integer $ga(game)] } { return 0}
    set tmp [lindex $l 1]
    if { [scan $tmp "%d" ga(elo)] != 1} { set ga(elo) $offers_minelo }
    if { $ga(elo) < $offers_minelo } { set ga(elo) $offers_minelo }
    set ga(name) [lindex $l 2]

    set tmp [lindex $l 3]
    if { [scan $tmp "%d" ga(time_init)] != 1} { set ga(time_init) $offers_maxtime}
    set tmp [lindex $l 4]
    if { [scan $tmp "%d" ga(time_inc)] != 1} { set ga(time_inc) 0 }

    set ga(rated) [lindex $l 5]
    if {$ga(rated) != "rated" && $ga(rated) != "unrated"} { return 0 }

    set ga(type) [lindex $l 6]
    if { $ga(type) != "untimed" && $ga(type) != "blitz" && $ga(type) != "standard" && $ga(type) != "lightning" } {
      return 0
    }
    set ga(color) ""
    if { [lindex $l 7] == "\[white\]" || [lindex $l 7] == "\[black\]" } {
      set ga(color) [lindex $l 7]
      set offset 1
    }
    set ga(rating_range) [lindex $l [expr 7 + $offset]]
    if { [ catch { set ga(start) [lindex $l [expr 8 + $offset]] } ] } {
      set ga(start) ""
    }

    lappend ::fics::soughtlist [array get ga]
    return 1
  }
  ################################################################################
  #
  ################################################################################
  proc readparse {line} {
    variable logged
    variable isGuestLogin

    if {$line == "" || $line == "fics% "} {return}

    if { $::fics::sought } {
      if {[string match "* ad* displayed." $line]} {
        set ::fics::sought 0
        catch { displayOffers }
        return
      }
      # lappend ::fics::soughtlist $line
      if { [ parseSoughtLine $line ] } {
        return
      }
    }

    if {[string match "login: " $line]} {
      writechan $::fics::reallogin
      if { $isGuestLogin} {
        set logged 1
      }
      return
    }
    if {[string match "password: " $line]} {
      writechan $::fics::password
      set logged 1
      return
    }
    if {[string match "<sc>*" $line]} {
      set ::fics::seeklist {}
      return
    }
    if {[string match "<s>*" $line]} {
      parseSeek $line
      return
    }
    if {[string match "<sr>*" $line]} {
      removeSeek $line
      return
    }

    if {[string match "<12>*" $line]} {
      parseStyle12 $line
      return
    }

    # puts "readparse->$line"
    updateConsole $line
    if {[string match "Creating: *" $line]} {
      # hide offers graph
      .fics.f.top select 0
      ::utils::sound::PlaySound sound_move
      # Create a game in an opened base
      if {![sc_base inUse]} {
        sc_base switch clipbase
      }
      sc_game new
      set idx1 [string first "(" $line]
      set white [string trim [string range $line 10 [expr $idx1 -1]] ]
      set idx2 [string first ")" $line]
      set whiteElo [string trim [string range $line [expr $idx1 +1] [expr $idx2 -1]] ]

      set idx1 [expr $idx2 +1]
      set idx2 [string first "(" $line $idx1]
      set black [string trim [string range $line $idx1 [expr $idx2 -1]] ]

      set idx1 [expr $idx2 +1]
      set idx2 [string first ")" $line $idx1]
      set blackElo [string trim [string range $line $idx1 [expr $idx2 -1]] ]

      if { $whiteElo == "++++"} { set whiteElo 0 }
      if { $blackElo == "++++"} { set blackElo 0 }

      sc_game tags set -white $white
      sc_game tags set -whiteElo $whiteElo
      sc_game tags set -black $black
      sc_game tags set -blackElo $blackElo

      sc_game tags set -event "FICS [lrange $line 5 end]"
      if { [::board::isFlipped .main.board] } {
        if { [ string match -nocase $white $::fics::reallogin ] } { ::board::flip .main.board }
      } else {
        if { [ string match -nocase $black $::fics::reallogin ] } { ::board::flip .main.board }
      }
      updateBoard -pgn -animate
      set ::fics::rated [string equal [lindex $line 5] "rated"]
      # display the win / draw / loss score
      if { $::fics::rated } { ::fics::writechan "assess" "noecho" }
      # it's a new game so show again abort, draw, etc requests
      set ::fics::showabortreq 1
      set ::fics::showadjournreq 1
      set ::fics::showdrawreq 1
      set ::fics::showtakebackreq 1
      return
    }

    if {[string match "\{Game *" $line]} {
      set num [lindex [lindex $line 0] 1]
      set res [lindex $line end]
      if {$num == $::fics::observedGame} {
        if {[string match "1/2*" $res]} {
          tk_messageBox -title [::tr "Result"] -icon info -type ok -message "Draw"
        } else {
          tk_messageBox -title [::tr "Result"] -icon info -type ok -message "$res"
        }
        sc_game tags set -result $res
        set ::fics::playing 0
        set ::fics::observedGame -1
        ::gameclock::stop 1
        ::gameclock::stop 2
        updateBoard -pgn
      }
      return
    }

    if { [string match "You are now observing game*" $line] } {
      scan $line "You are now observing game %d." ::fics::observedGame
    }

    # Start session
    if {[string match "*Starting FICS session*" $line]} {

      # mandatory init commands
      writechan "iset seekremove 1"
      writechan "iset seekinfo 1"
      writechan "style 12"
      writechan "iset nowrap 1"
      writechan "iset nohighlight 1"

      # user init commands
      if { $::fics::usedefaultvars } {
        writechan "set seek 1" ; # be informed of "seek" ads when they are made
        writechan "set silence 1" ; #  turn off shouts, cshouts and channel tells while you play
        writechan "set chanoff 0" ; # stop hearing tells to channels
        writechan "set echo 1" ; # shouts and most other communications will be echoed to you
        writechan "set cshout 0" ; # do not hear cshouts
      }
      setState normal
      return
    }

    if { $::fics::waitForRating == "wait" } {
      if {[catch {set val [lindex $line 0]}]} {
        return
      } else  {
        if {[lindex $line 0] == "Standard"} {
          set ::fics::waitForRating [lindex $line 1]
          return
        }
      }
    }

    if { $::fics::waitForMoves != "" } {
      set m1 ""
      set m2 ""
      set line [string trim $line]

      # Because some free text may be in the form (".)
      if {[catch {llength $line} err]} {
        puts "Exception $err llength $line"
        return
      }

      if {[llength $line ] == 5 && [scan $line "%d. %s (%d:%d) %s (%d:%d)" t1 m1 t2 t3 m2 t4 t5] != 7} {
        return
      }
      if {[llength $line ] == 3 && [scan $line "%d. %s (%d:%d)" t1 m1 t2 t3] != 4} {
        return
      }
      catch { sc_move addSan $m1 }
      if {$m2 != ""} {
        catch { sc_move addSan $m2 }
      }

      if {[sc_pos fen] == $::fics::waitForMoves } {
        set ::fics::waitForMoves ""
      }
    }

    if {[string match "Challenge:*" $line]} {
      set ans [tk_dialog .challenge [::tr "FICSChallenge"] $line "" 0 [::tr "FICSAccept"] [::tr "FICSDecline"]]
      if {$ans == 0} {
        writechan "accept"
      } else {
        writechan "decline"
      }
    }

    # abort request
    # for the abort, etc requests, added the "cancel" option so that during this game
    # the message box won't open again for the canceled type of request
    # to avoid "denial of play" attack by the opponent constantly issuing such a request
    # (because  tk_messageBox  "waits for the user to select one of the buttons")
    if {[string match "* would like to abort the game;*" $line] && $::fics::showabortreq} {
      set ans [tk_messageBox -title [::tr "Abort"] -icon question -type yesnocancel -message "$line\nDo you accept ?" ]
      switch -- $ans {
        yes {writechan "accept"}
        no  {writechan "decline"}
        cancel {set ::fics::showabortreq 0}
      }
    }

    # takeback
    if {[string match "* would like to take back *" $line] && $::fics::showtakebackreq} {
      set ans [tk_messageBox -title "Abort" -icon question -type yesnocancel -message "$line\nDo you accept ?" ]
      switch -- $ans {
        yes {writechan "accept"}
        no  {writechan "decline"}
        cancel {set ::fics::showtakebackreq 0}
      }
    }

    # draw
    if {[string match "*offers you a draw*" $line] && $::fics::showdrawreq} {
      set ans [tk_messageBox -title "Abort" -icon question -type yesnocancel -message "$line\nDo you accept ?" ]
      switch -- $ans {
        yes {writechan "accept"}
        no  {writechan "decline"}
        cancel {set ::fics::showdrawreq 0}
      }
    }

    # adjourn
    if {[string match "*would like to adjourn the game*" $line] && $::fics::showadjournreq} {
      set ans [tk_messageBox -title "Abort" -icon question -type yesnocancel -message "$line\nDo you accept ?" ]
      switch -- $ans {
        yes {writechan "accept"}
        no  {writechan "decline"}
        cancel {set ::fics::showadjournreq 0}
      }
    }

    # guest logging
    if {[string match "Logging you in as*" $line]} {
      set line [string map {"\"" "" ";" ""} $line ]
      set ::fics::reallogin [lindex $line 4]
      ::setTitle .fics "Free Internet Chess Server $::fics::reallogin"
    }
    if {[string match "Press return to enter the server as*" $line]} {
      writechan "\n"
    }

  }
  ################################################################################
  #  Set the state of user interface related to connection state
  ################################################################################
  proc setState { state } {
    set w .fics

    foreach elt [winfo children $w.f.bottom.right] {
      if { $elt != "$w.f.bottom.right.cancel" } {
        $elt configure -state $state
      }
    }

    foreach elt [list $w.f.top.fconsole.f2.send $w.f.top.fconsole.f2.cmd ] {
      $elt configure -state $state
    }

    if {$state == "normal" } {
      $w.f.top add $w.f.top.foffers
    } else  {
      $w.f.top hide $w.f.top.foffers
    }
  }
  ################################################################################
  #
  ################################################################################
  proc updateConsole {line} {
    set t .fics.f.top.fconsole.f1.console

    if { [string match "* seeking *" $line ] } {
      $t insert end "$line\n" seeking
    } elseif { [string match "\{Game *\}" $line ] } {
      $t insert end "$line\n" game
    } elseif { [string match "\{Game *\} *" $line ] } {
      $t insert end "$line\n" gameresult
    } elseif { [string match "fics% *" $line ] } {
      $t insert end "$line\n" ficspercent
    } elseif  { $line == "Type \[next\] to see next page."  } {
      $t insert end "Click or type \[next\] to see next page.\n" ficshelpnext
    } else  {
      $t insert end "$line\n"
    }

    set pos [ lindex [ .fics.f.top.fconsole.f1.ysc get ] 1 ]
    if {$pos == 1.0} {
      $t yview moveto 1
    }

  }
  ################################################################################
  #
  ################################################################################
  proc removeSeek {line} {
    global ::fics::seeklist
    foreach l $line {

      if { $l == "<sr>" } {continue}

      # remove seek from seeklist
      for {set i 0} {$i < [llength $seeklist]} {incr i} {
        array set a [lindex $seeklist $i]
        if {$a(index) == $l} {
          set seeklist [lreplace $seeklist $i $i]
          break
        }
      }

      # remove seek from graph
      if { $::fics::graphon } {
        for {set idx 0} { $idx < [llength $::fics::soughtlist]} { incr idx } {
          array set g [lindex $::fics::soughtlist $idx]
          set num $g(game)
          if { $num == $l } {
            .fics.f.top.foffers.c delete game_$idx
            break
          }
        }
      }

    }
  }
  ################################################################################
  #
  ################################################################################
  proc parseStyle12 {line} {
    set color [lindex $line 9]
    set gameNumber [lindex $line 16]
    set white [lindex $line 17]
    set black [lindex $line 18]
    set relation [lindex $line 19]
    set initialTime [lindex $line 20]
    set increment [lindex $line 21]
    set whiteMaterial [lindex $line 22]
    set blackMaterial [lindex $line 23]
    set whiteRemainingTime  [lindex $line 24]
    set blackRemainingTime  [lindex $line 25]
    set moveNumber [lindex $line 26]
    set verbose_move [lindex $line 27]
    set moveTime [lindex $line 28]
    set moveSan [lindex $line 29]

    set ::fics::playing $relation
    set ::fics::observedGame $gameNumber

    ::gameclock::setSec 1 [ expr 0 - $whiteRemainingTime ]
    ::gameclock::setSec 2 [ expr 0 - $blackRemainingTime ]
    if {$color == "W"} {
      ::gameclock::start 1
      ::gameclock::stop 2
    } else {
      ::gameclock::start 2
      ::gameclock::stop 1
    }

    set fen ""
    for {set i 1} {$i <=8} { incr i} {
      set l [lindex $line $i]
      set count 0

      for { set col 0 } { $col < 8 } { incr col } {
        set c [string index $l $col]
        if { $c == "-"} {
          incr count
        } else {
          if {$count != 0} {
            set fen "$fen$count"
            set count 0
          }
          set fen "$fen$c"
        }
      }

      if {$count != 0} { set fen "$fen$count" }
      if {$i != 8} { set fen "$fen/" }
    }

    set fen "$fen [string tolower $color]"
    set f [lindex $line 10]

    # en passant
    if { $f == "-1" || $verbose_move == "none"} {
      set enpassant "-"
    } else {
      set enpassant "-"
      set conv "abcdefgh"
      set fl [string index $conv $f]
      if {$color == "W"} {
        if { [ string index [lindex $line 4] [expr $f - 1]] == "P" || [ string index [lindex $line 4] [expr $f + 1]] == "P" } {
          set enpassant "${fl}6"
        }
      } else {
        if { [ string index [lindex $line 5] [expr $f - 1]] == "p" || [ string index [lindex $line 5] [expr $f + 1]] == "p" } {
          set enpassant "${fl}3"
        }
      }
    }

    set castle ""
    if {[lindex $line 11] == "1"} {set castle "${castle}K"}
    if {[lindex $line 12] == "1"} {set castle "${castle}Q"}
    if {[lindex $line 13] == "1"} {set castle "${castle}k"}
    if {[lindex $line 14] == "1"} {set castle "${castle}q"}
    if {$castle == ""} {set castle "-"}

    set fen "$fen $castle $enpassant [lindex $line 15] $moveNumber"

    # try to play the move and check if fen corresponds. If not this means the position needs to be set up.
    if {$moveSan != "none" && $::fics::playing != -1} {
      # first check side's coherency
      if { ([sc_pos side] == "white" && $color == "B") || ([sc_pos side] == "black" && $color == "W") } {
        # puts "sc_move addSan $moveSan"
        ::utils::sound::PlaySound sound_move
        ::utils::sound::AnnounceNewMove $moveSan
        if { [catch { sc_move addSan $moveSan } err ] } {
          puts "error $err"
        } else {
          if { $::novag::connected } {
            set m $verbose_move
            if { [string index $m 1] == "/" } { set m [string range $m 2 end] }
            set m [string map { "-" "" "=" "" } $m]
            ::novag::addMove $m
          }
          updateBoard -pgn -animate
        }
      }
    }

    if {$fen != [sc_pos fen]} {
      puts "Debug fen \n$fen\n[sc_pos fen]"
      # Create a game in an opened base
      if {![sc_base inUse]} {
        sc_base switch clipbase
      }
      sc_game new

      set ::fics::waitForRating "wait"
      writechan "finger $white /s"
      vwaitTimed ::fics::waitForRating 2000 "nowarn"
      if {$::fics::waitForRating == "wait"} { set ::fics::waitForRating "0" }
      sc_game tags set -white $white
      sc_game tags set -whiteElo $::fics::waitForRating

      set ::fics::waitForRating "wait"
      writechan "finger $black /s"
      vwaitTimed ::fics::waitForRating 2000 "nowarn"
      if {$::fics::waitForRating == "wait"} { set ::fics::waitForRating "0" }
      sc_game tags set -black $black
      sc_game tags set -blackElo $::fics::waitForRating

      set ::fics::waitForRating ""

      sc_game tags set -event "FICS game $gameNumber $initialTime/$increment"

      # try to get first moves of game
      writechan "moves $gameNumber"
      set ::fics::waitForMoves $fen
      vwaitTimed ::fics::waitForMoves 2000 "nowarn"
      set ::fics::waitForMoves ""

      # Did not manage to reconstruct the game, just set its position
      if {$fen != [sc_pos fen]} {
        sc_game startBoard $fen
      }
      updateBoard -pgn -animate
    }
  }
  ################################################################################
  #
  ################################################################################
  proc parseSeek {line} {
    array set seekelt {}
    set seekelt(index) [lindex $line 1]
    foreach m [split $line] {
      if {[string match "w=*" $m]} { set seekelt(name_from) [string range $m 2 end] ; continue }
      if {[string match "ti=*" $m]} { set seekelt(titles) [string range $m 3 end] ; continue }
      if {[string match "rt=*" $m]} { set seekelt(rating) [string range $m 3 end] ; continue }
      if {[string match "t=*" $m]} { set seekelt(time) [string range $m 2 end] ; continue }
      if {[string match "i=*" $m]} { set seekelt(increment) [string range $m 2 end] ; continue }
      if {[string match "r=*" $m]} { set seekelt(rated) [string range $m 2 end] ; continue }
      if {[string match "tp=*" $m]} { set seekelt(type) [string range $m 3 end] ; continue }
      if {[string match "c=*" $m]} { set seekelt(color) [string range $m 2 end] ; continue }
      if {[string match "rr=*" $m]} { set seekelt(rating_range) [string range $m 3 end] ; continue }
      if {[string match "a=*" $m]} { set seekelt(automatic) [string range $m 2 end] ; continue }
      if {[string match "f=*" $m]} { set seekelt(formula_checked) [string range $m 2 end] ; continue }
    }
    lappend ::fics::seeklist [array get seekelt]
  }
  ################################################################################
  #
  ################################################################################
  proc updateOffers { } {
    set ::fics::sought 1
    set ::fics::soughtlist {}
    writechan "sought"
    vwaitTimed ::fics::sought 5000 "nowarn"
    after 3000 ::fics::updateOffers
  }
  ################################################################################
  #
  ################################################################################
  proc configureCanvas {} {
    set w .fics.f.top.foffers
    set ::fics::height [winfo height $w]
    set ::fics::width [winfo width $w]
    $w.c configure -width $::fics::width -height $::fics::height
    displayOffers
  }
  ################################################################################
  #
  ################################################################################
  proc displayOffers { } {
    global ::fics::width ::fics::height ::fics::off \
        ::fics::offers_minelo ::fics::offers_maxelo ::fics::offers_mintime ::fics::offers_maxtime
    after cancel ::fics::updateOffers

    set w .fics.f.top.foffers
    set size 5
    set idx 0

    #first erase the canvas
    foreach id [ $w.c find all] { $w.c delete $id }

    # draw scales
    $w.c create line $off [expr $height - $off ] $width [expr $height - $off] -fill blue
    $w.c create line $off 0 $off [expr $height - $off] -fill blue
    $w.c create text 1 1 -fill black -anchor nw -text ELO
    $w.c create text [expr $width - 1 ] [expr $height - 1 ] -fill black -anchor se -text [tr Time]

    # draw time markers at 5', 15'
    set x [ expr $off + 5 * ($width - $off) / ($offers_maxtime - $offers_mintime)]
    $w.c create line $x 0 $x [expr $height - $off] -fill red
    set x [ expr $off + 15 * ($width - $off) / ($offers_maxtime - $offers_mintime)]
    $w.c create line $x 0 $x [expr $height - $off] -fill red

    foreach g $::fics::soughtlist {
      array set l $g
      set fillcolor green
      # if the time is too large, put it in red
      set tt [expr $l(time_init) + $l(time_inc) * 2 / 3 ]
      if { $tt > $offers_maxtime } {
        set tt $offers_maxtime
        set fillcolor red
      }
      # if a computer, put it in blue
      if { [string match "*(C)" $l(name)] } {
        set fillcolor blue
      }
      # if player without ELO, in gray
      if { [string match "Guest*" $l(name)] } {
        set fillcolor gray
      }

      set x [ expr $off + $tt * ($width - $off) / ($offers_maxtime - $offers_mintime)]
      set y [ expr $height - $off - ( $l(elo) - $offers_minelo ) * ($height - $off) / ($offers_maxelo - $offers_minelo)]
      if { $l(rated) == "rated" } {
        set object "oval"
      } else {
        set object "rectangle"
      }
      $w.c create $object [expr $x - $size ] [expr $y - $size ] [expr $x + $size ] [expr $y + $size ] -tag game_$idx -fill $fillcolor

      $w.c bind game_$idx <Enter> "::fics::setOfferStatus $idx %x %y"
      $w.c bind game_$idx <Leave> "::fics::setOfferStatus -1 %x %y"
      $w.c bind game_$idx <ButtonPress> "::fics::getOffersGame $idx"
      incr idx
    }

  }
  ################################################################################
  # Play the selected game
  ################################################################################
  proc getOffersGame { idx } {
    array set ga [lindex $::fics::soughtlist $idx]
    catch { writechan "play $ga(game)" }
  }
  ################################################################################
  #
  ################################################################################
  proc setOfferStatus { idx x y } {
    global ::fics::height ::fics::width

    set w .fics.f.top.foffers
    if { $idx != -1 } {
      set gl [lindex $::fics::soughtlist $idx]
      if { $gl == "" } { return }
      array set l [lindex $::fics::soughtlist $idx]
      set m "$l(game) $l(name)($l(elo))\n$l(time_init)/$l(time_inc) $l(rated)\n$l(color) $l(start)"

      if {$y < [expr $height / 2]} {
        set anchor "n"
      } else {
        set anchor "s"
      }

      if {$x < [expr $width / 2]} {
        append anchor "w"
      } else {
        append anchor "e"
      }

      $w.c create text $x $y -tags status -text $m -font font_offers -anchor $anchor -width 150
      $w.c raise game_$idx
    } else {
      $w.c delete status
    }
  }
  ################################################################################
  #
  ################################################################################
  proc play {index} {
    writechan "play $index"
    # set ::fics::playing 1
    set ::fics::observedGame $index
  }
  ################################################################################
  #
  ################################################################################
  proc writechan {line {echo "noecho"}} {
    after cancel ::fics::stayConnected
    if {[eof $::fics::sockchan]} {
      tk_messageBox -title "FICS" -icon error -type ok -message "Network error writing channel"
      ::fics::close "error"
      return
    }
    puts $::fics::sockchan $line
    if {$echo != "noecho"} {
      updateConsole "->>$line"
    }
    after 2700000 ::fics::stayConnected
  }
  ################################################################################
  # FICS seems to close connexion after 1 hr idle. So send a dummy command
  # every 45 minutes
  ################################################################################
  proc stayConnected {} {
    catch {
      writechan "date" "noecho"
      after 2700000 ::fics::stayConnected
    }
  }
  ################################################################################
  #  returns 1 if premove is set
  ################################################################################
  proc setPremove {sq1 sq2} {
      if { $::fics::premoveEnabled && $::fics::playing == -1 && $sq2 != -1 } {
          set ::fics::premoveSq1 $sq1
          set ::fics::premoveSq2 $sq2
          ::board::mark::DrawArrow .main.board.bd $sq2 $sq1 $::highlightLastMoveColor
          return 1
      }
      return 0
  }
  ################################################################################
  #  execute FICS premove if possible
  ################################################################################
  proc makePremove {} {
    if { $::fics::premoveEnabled && $::fics::playing == 1 && $::fics::premoveSq1 != -1 } {
      addMove $::fics::premoveSq1 $::fics::premoveSq2
      set ::fics::premoveSq1 -1
    }
  }
  ################################################################################
  #   returns 1 if the player is allowed to enter a move (either playing or using puzzlebot)
  ################################################################################
  proc playerCanMove {} {

    if { ! [winfo exists .fics] } { return 1 }

    if { [sc_game info white] == "puzzlebot" || [sc_game info black] == "puzzlebot" } {
      return 1
    }

    if { $::fics::playing == 1 } { return 1 }

    if { $::fics::premoveEnabled && $::fics::playing == -1 } { 
        .main.board.bd delete mark
        set ::fics::premoveSq1 -1
        return 1 
    }
    return 0
  }
  ################################################################################
  # Handle mouse button 1 on console : observe the selected game
  # or handle commands (like <next>)
  ################################################################################
  proc consoleClick { x y win } {
    set idx [ $win index @$x,$y ]
    if { [ scan $idx "%d.%d" l c ] != 2 } {
      # should never happen
      return
    }
    set elt [$win get $l.0 $l.end]

    if { $elt ==  "Click or type \[next\] to see next page." } {
      writechan "next"
      return
    }

    set found 0

    if { [llength $elt] > 4} {
      # validate format
      set game [lindex $elt 0]
      set elow [lindex $elt 1]
      set white [lindex $elt 2]
      set elob [lindex $elt 3]
      set black [lindex $elt 4]

      if { [ scan $game "%d" tmp ] != 1 || \
            ( [ scan $elow "%d" tmp ] != 1 && $elow != "++++" ) || \
            ( [ scan $elob "%d" tmp ] != 1 && $elob != "++++" ) } {
      } else  {
        set found 1
      }
    }

    # Second chance : try to parse "tell relay listgames" (:104 GMxxxx GMyyyyy * B22)
    if { [llength $elt] == 5 && ! $found } {
      if { [ scan [lindex $elt 0] ":%d" game ] == 1 } {
        set white [lindex $elt 1]
        set black [lindex $elt 2]
        set elow "-"
        set elob "-"
        set found 1
      }
    }

    if { ! $found } {
      puts "$elt not a valid game"
      return
    }

    # warn the user before observing a game because it can interfere with a game played or
    # other that would be disturbed by observing a game
    set ans [tk_messageBox -title "Observe game" -icon question -type yesno \
        -message "[ ::tr FICSObserveconfirm ] $game\n$white ($elow) - $black ($elob)  ?" ]
    if { $ans == yes } {
      writechan "unobserve" "echo"
      writechan "observe $game" "echo"
    }

  }
  ################################################################################
  # updates the offers view if it is visible
  ################################################################################
  proc tabchanged {} {
    set nb .fics.f.top
    set w .fics.f.top.foffers

    if { [ $nb select ] == $w } {
      updateOffers
      set ::fics::graphon 1
    } else  {
      after cancel ::fics::updateOffers
      set ::fics::graphon 0
    }
  }
  ################################################################################
  #
  ################################################################################
  proc close { {mode ""} } {
    variable logged
    # stop recursive call
    bind .fics <Destroy> {}

    set ::fics::sought 0
    after cancel ::fics::updateOffers
    after cancel ::fics::stayConnected
    set logged 0

    if {$mode != "error"} {
      writechan "exit"
    }

    set ::fics::playing 0
    set ::fics::observedGame -1
    ::close $::fics::sockchan
    if { ! $::windowsOS } { catch { exec -- kill -s INT [ $::fics::timeseal_pid ] }  }
    destroy .fics
    # necessary on windows
    ::docking::cleanup .fics
  }
}
###
### End of file: fics.tcl
###
###
### opening.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
namespace eval opening {
  set repBase -1
  # list of elements of type fenMovesEvalList (fen move1 nag1 .... movei nagi)
  set allLinesFenList {}
  set fenMovesEvalList {}
  # list of hash lists, one list per game (a game = a line)
  set allLinesHashList {}
  set hashList {}
  # options for repertoire training
  set playerBestMove 1
  set opBestMove 1
  set onlyFlaggedLines 0
  set repColor "w"
  set resetStats 0
  
  set movesLoaded 0
  set fenLastUpdate 0
  set fenLastStatsUpdate 0
  set cancelLoadRepertoire 0
  set lastMainLoopFen 0
  set lastMainLoopFlipped [sc_pos side]
  
  # parameters for opening trainer window
  set displayCM 0
  set DisplayCMValue 0
  set tCM ""
  set lastCMFen ""
  set lastCM "-1"
  
  set displayOpeningStats 1
  set listStats {} ;# list of {fen x y z t} where x:good move played, y:dubious move, z:move out of rep, t:position played
  
  ################################################################################
  # Configuration
  ################################################################################
  proc config {} {
    global ::opening::playerBestMove ::opening::opBestMove ::opening::repColor
    
    set w .openingConfig
    if { [winfo exists $w] } { focus $w ; return  }
    if { [winfo exists ".openingWin"] } { focus ".openingWin" ; return }
    
    toplevel $w
    wm title $w $::tr(Repertoiretrainingconfiguration)
    setWinLocation $w
    frame $w.f0 -relief groove
    
    radiobutton $w.f0.rbRepColorW -value "w" -variable ::opening::repColor -text $::tr(white)
    radiobutton $w.f0.rbRepColorB -value "b" -variable ::opening::repColor -text $::tr(black)
    radiobutton $w.f0.rbRepColorWB -value "wb" -variable ::opening::repColor -text $::tr(both)
    pack $w.f0.rbRepColorW $w.f0.rbRepColorB $w.f0.rbRepColorWB -side left  -expand yes -fill both
    
    frame $w.f1
    checkbutton $w.f1.cbPlayerBestMove -text $::tr(PlayerBestMove) -variable ::opening::playerBestMove
    checkbutton $w.f1.cbOpBestMove -text $::tr(OpponentBestMove) -variable ::opening::opBestMove
    checkbutton $w.f1.cbOnlyFlaggedLines -text $::tr(OnlyFlaggedLines) -variable ::opening::onlyFlaggedLines
    checkbutton $w.f1.cbResetStats -text $::tr(resetStats) -variable ::opening::resetStats
    pack $w.f1.cbPlayerBestMove $w.f1.cbOpBestMove $w.f1.cbOnlyFlaggedLines $w.f1.cbResetStats -anchor w -side top
    
    frame $w.f2
    button $w.f2.ok -text $::tr(Continue) -command " destroy $w ; ::opening::openRep"
    button $w.f2.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
    pack $w.f2.ok $w.f2.cancel -expand yes -side left -padx 20 -pady 2
    
    pack $w.f0 $w.f1 $w.f2 -side top -fill both
    
    bind $w <F1> { helpWindow OpeningTrainer }
    bind $w <Escape> "destroy $w"
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
  }
  ################################################################################
  # Open a repertoire
  ################################################################################
  proc openRep {} {
    global ::windows::switcher::base_types ::opening::repColor ::opening::repBase
    
    if {$::opening::resetStats} {
      set ::opening::listStats {}
    } else  {
      loadStats
    }
    
    set repBase -1
    set typeW [lsearch $base_types {Openings for White} ]
    set typeB [lsearch $base_types {Openings for Black} ]
    set typeWB [lsearch $base_types {Openings for either color} ]
    
    for {set x 1} {$x <= [ expr [sc_base count]-1 ]} {incr x} {
      set type [sc_base type $x]
      if {$type == $typeW && $repColor == "w" || $type == $typeB && $repColor == "b" || $type == $typeWB && $repColor == "wb"} {
        set repBase  $x
        break
      }
    }
    
    if {$repBase == -1} {
      tk_messageBox -title $::tr(Repertoirenotfound) -type ok -icon warning \
          -message $::tr(Openfirstrepertoirewithtype)
      return
    }
    
    set prevBase [sc_base current]
    if {$prevBase != $repBase} { sc_base switch $repBase }
    loadRep "$repBase - [sc_base filename $repBase]" "[sc_base description]"
    if {$prevBase != $repBase} {
      sc_base switch $prevBase
    } else  {
      sc_base switch clipbase
    }
    
    if { $::opening::movesLoaded == 0 } {
      tk_messageBox -title $::tr(Repertoirenotfound) -type ok -icon error -message $::tr(ZeroMovesLoaded)
    }
    
    if { ! [sc_base inUse $prevBase] } {
      # switch to clipboard base if the current base is empty
      sc_base switch clipbase
    }
    
    # add a blank game for training in current base, if the current base is opened
    sc_game new
    sc_game tags set -event $::tr(Openingtrainer)
    sc_game save 0
    updateBoard -pgn -animate
    ::windows::gamelist::Refresh
    updateTitle
    
    ::opening::openingWin
    ::opening::mainLoop
  }
  ################################################################################
  # Loads a repertoire
  # Go through all games and variations and build a tree of positions encountered
  #
  ################################################################################
  proc loadRep { name desc } {
    global ::opening::repBase ::opening::fenMovesEvalList ::opening::allLinesFenList \
        ::opening::allLinesHashList ::opening::hashList ::opening::onlyFlaggedLines \
        ::opening::movesLoaded ::opening::cancelLoadRepertoire
    
    set movesLoaded 0
    set cancelLoadRepertoire 0
    set allLinesFenList {}
    set allLinesHashList {}
    
    progressWindow "Scid" "$::tr(Loadingrepertoire)..." $::tr(Cancel) "::opening::sc_progressBar"
    for {set g 1} { $g <= [sc_base numGames]} { incr g} {
      if {$cancelLoadRepertoire} { break  }
      if {$onlyFlaggedLines && ![sc_game flag "WhiteOpFlag" $g] && ![sc_game flag "BlackOpFlag" $g]} {
        continue
      }
      set fenMovesEvalList {}
      set hashList  {}
      sc_game load $g
      changeProgressWindow "$::tr(Loadingrepertoire)...\n$name\n$desc\n$::tr(Movesloaded) $movesLoaded"
      updateProgressWindow $g [sc_base numGames]
      parseGame
      lappend allLinesFenList $fenMovesEvalList
      set hashList [lsort -unique $hashList]
      lappend allLinesHashList $hashList
    }
    # puts "$allLinesFenList"
    
    closeProgressWindow
  }
  ################################################################################
  # cancel repertoire loading
  ################################################################################
  proc sc_progressBar {} {
    set ::opening::cancelLoadRepertoire 1
  }
  ################################################################################
  # parse one game and fill the list
  ################################################################################
  proc parseGame {} {
    while {![sc_pos isAt vend]} {
      fillFen
      # Go through all variants
      for {set v 0} {$v<[sc_var count]} {incr v} {
        # enter each var (beware the first move is played)
        sc_var enter $v
        parseVar
      }
      # now treat the main line
      sc_move forward
    }
  }
  ################################################################################
  # parse recursively variants.
  ################################################################################
  proc parseVar {} {
    while {![sc_pos isAt vend]} {
      fillFen
      # Go through all variants
      for {set v 0} {$v<[sc_var count]} {incr v} {
        sc_var enter $v
        fillFen
        # we are at the start of a var, before the first move : start recursive calls
        parseVar
      }
      sc_move forward
    }
    # at the end of a var : exit it
    sc_var exit
  }
  ################################################################################
  # fill the tree with repertoire information
  # we are at a given position :
  # - fill hash list in order to speed up searches
  # - fill fenMovesEvalList with {fen {move eval} {move eval} .... }
  ################################################################################
  proc fillFen {} {
    global ::opening::fenMovesEvalList ::opening::hashList ::opening::movesLoaded
    
    if {[sc_pos isAt vend] && [sc_var count] == 0 } {
      return
    }
    
    set s [split [sc_pos fen]]
    set fen "[lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3]"
    
    set newFen {}
    set moves {}
    set newIndex -1
    incr movesLoaded
    
    lappend hashList [sc_pos hash]
    
    # check if the fen already exists in the list
    for {set i 0} { $i < [llength $fenMovesEvalList]} {incr i} {
      set f [lindex $fenMovesEvalList $i]
      if {[lindex $f 0] == $fen} { set newFen $fen ; set moves [lindex $f 1] ; set newIndex $i ; break }
    }
    set newFen $fen
    
    # the main move
    if {! [sc_pos isAt vend] } {
      set m [sc_game info nextMove]
      sc_move forward
      set nag [sc_pos getNags]
      sc_move back
      if {[lsearch $moves $m] == -1 } {
        lappend moves $m $nag
      } else  {
        # the move already exists : check if NAG values are coherent
        set lmoves [lsearch -all $moves $m]
        foreach i $lmoves {
          if {[lindex $moves [expr $i +1]] != $nag} {
            puts "redundancy and incoherence $m $nag for $newFen"
          }
        }
      }
    }
    # Go through all variants
    for {set v 0} {$v<[sc_var count]} {incr v} {
      sc_var enter $v
      set nag [sc_pos getNags]
      set m [sc_game info previousMove]
      if {[lsearch $moves $m] == -1 } {
        lappend moves $m $nag
      } else  {
        # the move already exists : check if NAG values are coherent
        set lmoves [lsearch -all $moves $m]
        foreach i $lmoves {
          if {[lindex $moves [expr $i +1]] != $nag} {
            puts "var redundancy and incoherence $m $nag for $newFen"
          }
        }
      }
      sc_var exit
    }
    
    # put the newFen in the list
    if {$newIndex == -1} {
      lappend fenMovesEvalList [list $fen $moves ]
    } else  {
      lset fenMovesEvalList $newIndex [list $fen $moves ]
    }
  }
  ################################################################################
  # main loop called every second to trigger playing
  ################################################################################
  proc mainLoop {} {
    global ::opening::allLinesHashList ::opening::allLinesFenList tCM
    
    after cancel ::opening::mainLoop
    
    # Handle case of player's turn (which always plays from bottom of the board)
    if { [sc_pos side] == "white" &&  ![::board::isFlipped .main.board] || [sc_pos side] == "black" &&  [::board::isFlipped .main.board] } {
      # it is player's turn : update UI
      ::opening::update_tCM
      ::opening::updateStats
      after 1000  ::opening::mainLoop
      return
    }
    
    # check the position has not been treated already
    if {[sc_pos fen] == $::opening::lastMainLoopFen && [::board::isFlipped .main.board] == $::opening::lastMainLoopFlipped} {
      after 1000 ::opening::mainLoop
      return
    }
    
    # the player moved : check if his move was in the repertoire and as good as expected
    set move_done [sc_game info previousMove]
    if { $move_done != "" } {
      sc_move back
      set cm [ getCm ]
      sc_move forward
      # No move available : reached the end of a line
      if { [llength $cm] == 0 } {
        ::opening::update_tCM
        ::opening::updateStats
        after 1000 ::opening::mainLoop
        return
      }
      
      # we know there are some CM
      set l [lsearch -all $cm $move_done]
      # move not in repertoire
      if {[llength $l] == 0} {
        tk_messageBox -type ok -message $::tr(Movenotinrepertoire) -icon info
        sc_move back
        addStats -good 0 -dubious 0 -absent 1 -total 1
        ::opening::update_tCM
        ::opening::updateStats
        updateBoard -pgn -animate
        after 1000  ::opening::mainLoop
        return
      }
      
      # The move played is in repertoire !
      set moveOK 1
      
      if {$::opening::playerBestMove} {
        foreach i $l {
          if {! [ ::opening::isGoodMove [ lindex $cm [expr $i+1] ] ] } {
            addStatsPrev -good 0 -dubious 1 -absent 0 -total 1
            set moveOK 0
            set nag [ lindex $cm [expr $i+1] ]
            break
          }
        }
        
        # The move is not good : offer to take back
        if { ! $moveOK } {
          # addStatsPrev -good 0 -dubious 0 -absent 1 -total 0
          set answer [tk_messageBox -icon question -title $::tr(OutOfOpening) -type yesno \
              -message "$::tr(yourmoveisnotgood) ($nag) \n $::tr(DoYouWantContinue)" ]
          if {$answer == no} {
            sc_move back
            updateBoard -pgn
            after 1000  ::opening::mainLoop
            return
          }
        } else  { ;# the move is a good one
          addStatsPrev -good 1 -dubious 0 -absent 0 -total 1
        }
      } else  { ;# player is allowed to play bad moves
        foreach i $l {
          set goodMove 1
          if {! [ ::opening::isGoodMove [ lindex $cm [expr $i+1] ] ] } {
            set goodMove 0
            break
          }
        }
        if {$goodMove} {
          addStatsPrev -good 1 -dubious 0 -absent 0 -total 1
        } else  {
          addStatsPrev -good 1 -dubious 1 -absent 0 -total 1
        }
      }
      
    }
    # end of player's move check
    # now it is computer's turn
    set cm [ getCm ]
    
    if {[llength $cm] != 0} {
      ::opening::play $cm
    }
    set ::opening::lastMainLoopFen [sc_pos fen]
    set ::opening::lastMainLoopFlipped [::board::isFlipped .main.board]
    
    ::opening::update_tCM
    ::opening::updateStats
    after 1000  ::opening::mainLoop
  }
  ################################################################################
  # isGoodMove : returns true if the nag list in parameter is empty or contains !? ! !!
  ################################################################################
  proc isGoodMove { n } {
    if { [lsearch -exact $n "?"] != -1 || [lsearch -exact $n "?!"] != -1 || [lsearch -exact $n "??"] != -1} {
      return 0
    }
    return 1
  }
  ################################################################################
  # get all candidate moves in the repertoire from current position
  # the list returned is of the form {move1 nag1 move2 nag2 ....}
  # the moves are not unique
  ################################################################################
  proc getCm {  } {
    global ::opening::allLinesHashList ::opening::allLinesFenList ::opening::lastCMFen
    
    set fen [ sc_pos fen ]
    # avoids calculation
    if {$fen == $lastCMFen } { return $lastCM }
    
    set cm {}
    # First find the position in hash lists to spare time
    set linesFound {}
    for {set i 0} {$i<[llength $allLinesHashList]} {incr i} {
      set res [lsearch -sorted [lindex $allLinesHashList $i] [sc_pos hash]]
      if {$res != -1} { lappend linesFound $i }
    }
    
    set s [split $fen]
    set fen "[lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3]"
    foreach i $linesFound {
      set line [lindex $allLinesFenList $i]
      foreach f $line {
        if {[lindex $f 0] == $fen} { set cm [concat $cm [lindex $f 1]] }
      }
    }
    
    set lastCM $cm
    set lastCMFen $fen
    
    return $cm
  }
  ################################################################################
  # play one of the candidate moves
  ################################################################################
  proc play { cm } {
    # addStatsPrev -good 0 -dubious 0 -absent 0 -total 1
    set r [expr int(rand()*[llength $cm]/2) ]
    set m [ lindex $cm [ expr $r * 2 ] ]
    
    if {[sc_pos moveNumber] == 1 && [sc_pos side] == "white"} {
      ::game::Clear
    }
    
    if {![catch {sc_move addSan [::untrans $m] }]} {
    }
    updateBoard -pgn -animate
  }
  ################################################################################
  # The window displayed when in opening trainer mode
  ################################################################################
  proc openingWin {} {
    global ::opening::displayCM ::opening::displayCMValue ::opening::tCM ::opening::fenLastUpdate
    
    set w ".openingWin"
    if {[winfo exists $w]} { focus $w ; return }
    
    toplevel $w
    wm title $w $::tr(Openingtrainer)
    setWinLocation $w
    frame $w.f1
    frame $w.f2 -relief raised -bd 2
    frame $w.f3
    
    checkbutton $w.f1.cbDisplayCM  -text $::tr(DisplayCM) -variable ::opening::displayCM -relief flat \
        -command "set fenLastUpdate 0 ; ::opening::update_tCM 1"
    checkbutton $w.f1.cbDisplayCMValue  -text $::tr(DisplayCMValue) -variable ::opening::displayCMValue -relief flat \
        -command "set fenLastUpdate 0 ; ::opening::update_tCM 1"
    label $w.f1.lCM -textvariable ::opening::tCM
    pack $w.f1.cbDisplayCM $w.f1.cbDisplayCMValue -anchor w -side top
    pack $w.f1.lCM -side top -anchor center
    
    checkbutton $w.f2.cbDisplayStats  -text $::tr(DisplayOpeningStats) -variable ::opening::displayOpeningStats -relief flat \
        -command "::opening::updateStats 1"
    label $w.f2.lStats1 -textvariable ::opening::lStats1 -width 4 -anchor center -background green
    label $w.f2.lStats2 -textvariable ::opening::lStats2 -width 4 -anchor center -background yellow
    label $w.f2.lStats3 -textvariable ::opening::lStats3 -width 4 -anchor center -background red
    label $w.f2.lStats4 -textvariable ::opening::lStats4 -width 4 -anchor center -background white
    
    label $w.f2.lStats1exp -text $::tr(NumberOfGoodMovesPlayed)
    label $w.f2.lStats2exp -text $::tr(NumberOfDubiousMovesPlayed)
    label $w.f2.lStats3exp -text $::tr(NumberOfMovesPlayedNotInRepertoire)
    label $w.f2.lStats4exp -text $::tr(NumberOfTimesPositionEncountered)
    
    grid $w.f2.cbDisplayStats -row 0 -column 0 -columnspan 2
    grid $w.f2.lStats4 -row 1 -column 0 -sticky w -padx 5
    grid $w.f2.lStats1 -row 2 -column 0 -sticky w -padx 5
    grid $w.f2.lStats2 -row 3 -column 0 -sticky w -padx 5
    grid $w.f2.lStats3 -row 4 -column 0 -sticky w -padx 5
    
    
    grid $w.f2.lStats4exp -row 1 -column 1 -sticky w -padx 5
    grid $w.f2.lStats1exp -row 2 -column 1 -sticky w -padx 5
    grid $w.f2.lStats2exp -row 3 -column 1 -sticky w -padx 5
    grid $w.f2.lStats3exp -row 4 -column 1 -sticky w -padx 5
    
    button $w.f3.report -textvar ::tr(ShowReport) -command ::opening::report
    button $w.f3.close -textvar ::tr(Abort) -command ::opening::endTraining
    
    pack $w.f3.report $w.f3.close -side top -anchor center -fill x
    pack $w.f1 $w.f2 $w.f3 -fill x
    
    bind $w <F1> { helpWindow OpeningTrainer }
    bind $w <Escape> "destroy $w"
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    wm minsize $w 45 0
  }
  ################################################################################
  #
  ################################################################################
  proc endTraining {} {
    after cancel ::opening::mainLoop
    saveStats
    focus .
    destroy ".openingWin"
  }
  ################################################################################
  # display the candidate moves list (with NAG values)
  ################################################################################
  proc  update_tCM { { forceUpdate 0 } } {
    global ::opening::displayCM ::opening::displayCMValue ::opening::tCM ::opening::fenLastUpdate
    
    # If current fen is the same as the one used during latest update call, do nothing
    if {$fenLastUpdate == [sc_pos fen] && ! $forceUpdate} { return }
    
    set cm [ getCm ]
    
    if { [llength $cm] == 0 } {
      .openingWin.f1.lCM configure -bg LightCoral
      set tCM $::tr(EndOfVar)
      set fenLastUpdate [sc_pos fen]
      return
    }
    
    if { !$displayCM } { set tCM "" ; set fenLastUpdate 0 ; return }
    
    .openingWin.f1.lCM configure -bg linen
    
    set tmp ""
    
    for {set x 0} {$x<[llength $cm]} { set x [expr $x+2]} {
      set m [lindex $cm $x]
      # if the move already found, skip it, even if it has other nags : to be corrected ?
      if {[string first $m $tmp] != -1} { continue }
      append tmp  $m " "
      set nlist [lindex $cm [expr $x+1] ]
      if {$nlist == 0} { continue }
      if {$displayCMValue} {
        foreach n $nlist {
          append tmp $n " "
        }
      }
      # go to new line every 3 (moves,nags)
      if {[expr $x % 3] == 2} { append tmp "\n" }
    }
    
    set fenLastUpdate [sc_pos fen]
    set tCM $tmp
  }
  ################################################################################
  #
  ################################################################################
  proc loadStats {} {
    set optionsFile [scidConfigFile optrainer]
    if {[catch {source $optionsFile} ]} {
      ::splash::add "Unable to find the options file: [file tail $optionsFile]"
    } else {
      ::splash::add "Your options file \"[file tail $optionsFile]\" was found and loaded."
    }
  }
  ################################################################################
  #
  ################################################################################
  proc saveStats {} {
    set optrainerFile [scidConfigFile optrainer]
    if {[catch {open $optrainerFile w} f]} {
      return 0
    }
    puts $f "set ::opening::listStats { $::opening::listStats }"
    close $f
    return 1
  }
  ################################################################################
  # getStats
  # returns a list containing the 4 stats values for current pos
  # or an empty list if the stats are not available for current position
  ################################################################################
  proc getStats {} {
    set s [split [sc_pos fen]]
    set fen "[lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3]"
    set found 0
    set idx 0
    foreach l $::opening::listStats {
      if {[lindex $l 0] == $fen} {
        set found 1
        break
      }
      incr idx
    }
    if {$found} {
      return [lindex $l 1]
    }
    return {}
  }
  
  ################################################################################
  # addStats
  # x = success best moves only, y = success all moves z = failures t = coverage by computer
  ################################################################################
  proc addStats { args } {
    set dx 0
    set dy 0
    set dz 0
    set dt 0
    
    for {set i 0 } {$i < [llength $args]} {incr i 2} {
      if {[lindex $args $i] == "-good"} { set dx [lindex $args [expr $i + 1] ] ; continue }
      if {[lindex $args $i] == "-dubious"} { set dy [lindex $args [expr $i + 1] ] ; continue }
      if {[lindex $args $i] == "-absent"} { set dz [lindex $args [expr $i + 1] ] ; continue }
      if {[lindex $args $i] == "-total"} { set dt [lindex $args [expr $i + 1] ] ; continue }
    }
    
    set s [split [sc_pos fen]]
    set fen "[lindex $s 0] [lindex $s 1] [lindex $s 2] [lindex $s 3]"
    set found 0
    set idx 0
    foreach l $::opening::listStats {
      if {[lindex $l 0] == $fen} {
        set found 1
        break
      }
      incr idx
    }
    
    if {$found} {
      set lval [lindex $l 1]
      set ::opening::listStats [ lreplace $::opening::listStats $idx $idx [list $fen [list \
          [expr [lindex $lval 0]+$dx] \
          [expr [lindex $lval 1]+$dy] \
          [expr [lindex $lval 2]+$dz] \
          [expr [lindex $lval 3]+$dt] \
          ] ] ]
    } else  {
      lappend ::opening::listStats [list $fen [list $dx $dy $dz $dt] ]
    }
    updateStats 1
  }
  ################################################################################
  #
  ################################################################################
  proc addStatsPrev { args } {
    if {[sc_pos isAt vstart] } { return }
    if { ![catch {sc_move back} ]} {
      eval addStats $args
      sc_move forward
    }
  }
  ################################################################################
  #
  ################################################################################
  proc updateStats { {force 0} } {
    global ::opening::fenLastStatsUpdate
    
    # If current fen is the same as the one used during latest update call, do nothing
    if {$fenLastStatsUpdate == [sc_pos fen] && !$force} { return }
    
    set fenLastStatsUpdate [sc_pos fen]
    
    if { $::opening::displayOpeningStats } {
      set gs [getStats]
      set ::opening::lStats1 [lindex $gs 0]
      set ::opening::lStats2 [lindex $gs 1]
      set ::opening::lStats3 [lindex $gs 2]
      set ::opening::lStats4 [lindex $gs 3]
    } else  {
      set ::opening::lStats1 " "
      set ::opening::lStats2 " "
      set ::opening::lStats3 " "
      set ::opening::lStats4 " "
    }
  }
  ################################################################################
  # shows a repertoire report (how much of the rep was trained)
  ################################################################################
  proc report {} {
    global ::opening::listStats ::opening::allLinesFenList
    set w ".openingWin.optrainerreport"
    if {[winfo exists $w]} { focus $w ; return }
    
    toplevel $w
    wm title $w $::tr(Openingtrainer)
    setWinLocation $w
    
    frame $w.ft
    text $w.ft.text -height 10 -width 40 -wrap word -background white
    pack $w.ft.text
    pack $w.ft
    
    frame $w.fclose
    button $w.fclose.close -textvar ::tr(Close) -command "destroy $w"
    pack $w.fclose.close
    
    # builds stats report
    set posNotPlayed 0
    set posTotalPlayed 0
    set success 0
    set dubMoves 0
    set outOfRep 0
    set totalPos 0
    foreach line $allLinesFenList {
      incr totalPos [llength $line]
      foreach pos $line {
        set fenLine [lindex $pos 0]
        set idx 0
        set found 0
        foreach l $listStats {
          if {$fenLine == [lindex $l 0]} {
            set found 1
            break
          }
          incr idx
        }
        if { $found } {
          set stats [lindex [ lindex $listStats $idx ] 1]
          if { $stats != "" } {
            incr success [lindex $stats 0]
            incr dubMoves [lindex $stats 1]
            incr outOfRep [lindex $stats 2]
            incr posTotalPlayed [lindex $stats 3]
          }
        } else {
          incr posNotPlayed
        }
      }
    }
    $w.ft.text insert end "$::tr(PositionsInRepertoire) $totalPos\n"
    $w.ft.text insert end "$::tr(PositionsNotPlayed) $posNotPlayed\n"
    $w.ft.text insert end "$::tr(PositionsPlayed) [expr $totalPos - $posNotPlayed]\n"
    $w.ft.text insert end "$::tr(Success) $success\n"
    $w.ft.text insert end "$::tr(DubiousMoves) $dubMoves\n"
    $w.ft.text insert end "$::tr(OutOfRepertoire) $outOfRep\n"
    
    $w.ft.text configure -state disabled
    
    bind $w <F1> { helpWindow OpeningTrainer }
    bind $w <Escape> "destroy $w"
    bind $w <Destroy> ""
    bind $w <Configure> "recordWinSize $w"
    # wm minsize $w 45 0
  }
  ################################################################################
  #
  ################################################################################
}
###
### End of file: opening.tcl
###
### tactics.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
######################################################################
### Solve tactics (mate in n moves for example)
# use Site token in pgn notation to store progress
#

namespace eval tactics {
    
    set infoEngineLabel ""
    set baseList {}
    set solved "problem solved"
    set failed "problem failed"
    set prevScore 0
    set prevLine ""
    set nextEngineMove ""
    set matePending 0
    set cancelScoreReset 0
    set askToReplaceMoves_old 0
    set showSolution 0
    set labelSolution ". . . . . . "
    set lastGameLoaded 0
    set prevFen ""
    set engineSlot 5
    # Don't try to find the exact best move but to win a won game (that is a mate in 5 is ok even if there was a pending mate in 2)
    set winWonGame 0
    
    ################################################################################
    # Current base must contain games with Tactics flag and **** markers
    # for certain moves. The first var should contain the best move (the next best move
    # is at least 1.0 point away.
    ################################################################################
    proc findBestMove { {previous 0} } {
        
        set old_game [sc_game number]
        
        if { $old_game == 1 && $previous != 0} {
            return
        }
        
        if { $old_game == [sc_base numGames] && $previous == 0} {
            return
        }
        
        set found 0
        
        if {![sc_base inUse] || [sc_base numGames] == 0} {
            tk_messageBox -type ok -icon info -title "Scid" -message "No game with Tactics flag\nor no tactics comment found"
            return
        }
        
        if {$previous != 0} {
            ::game::LoadNextPrev previous
        }
        
        # Try to find in current game, from current pos (exit vars first)
        catch { ;# if gamenumber == 0, sc_game flag T returns no boolean
            if {[sc_game flag T [sc_game number]]} {
                while {[sc_var level] != 0} { sc_var exit }
                if {[llength [gotoNextTacticMarker] ] != 0} {
                    set found 1
                }
            }
        }
        if { ! $found } {
            set sens 1
            set start [expr [sc_game number] +1]
            set end [sc_base numGames]
            if {$previous != 0} {
                set sens -1
                set start  [expr [sc_game number] -1]
                set end 1
            }
            for {set g $start } { [expr $sens * $g ] <= [ expr $sens * $end ] } { incr g $sens} {
                sc_game load $g
                if {![sc_game flag T $g]} { continue }
                # go through all moves and look for tactical markers ****
                if {[llength [gotoNextTacticMarker] ] != 0} {
                    set found 1
                    break
                }
            }
        }
        
        if { ! $found } {
            sc_game load $old_game
            gotoNextTacticMarker
            tk_messageBox -type ok -icon info -title "Scid" -message "No game with Tactics flag\nor no tactics comment found"
        } else  {
            sideToMoveAtBottom
        }
        updateBoard -pgn
        ::windows::gamelist::Refresh
        updateTitle
    }
    ################################################################################
    # The initial proc to start Find Best Move training
    proc findBestMoveStart {} {
        
        set f .main.fbutton.button
        
        if { $::tactics::findBestMoveRunning } {
            set ::tactics::hideNextMove_old $::gameInfo(hideNextMove)
            set ::tactics::showVarArrows_old $::showVarArrows
            set ::tactics::showVarPopup_old $::showVarPopup
            set ::gameInfo(hideNextMove) 1
            set ::showVarArrows 0 ;# so the user will not see the solution through var arrows
            set ::showVarPopup 0
            
            # create UI to handle commands and feed back for find best move
            if { ![winfo exists $f.fbm_space1]} {
                ttk::frame $f.fbm_space1 -width 15
                button $f.fbm_solution -image tb_lightbulb -command ::tactics::findBestMoveShowSolution
                ::utils::tooltip::Set $f.fbm_solution [::tr ShowSolution]
                button $f.fbm_prev -image tb_backward -command { ::tactics::findBestMove previous }
                ::utils::tooltip::Set $f.fbm_prev [::tr PrevExercise ]
                button $f.fbm_next -image tb_forward -command ::tactics::findBestMove
                ::utils::tooltip::Set $f.fbm_next [::tr NextExercise ]
                button $f.fbm_stop -image tb_stop -command { set ::tactics::findBestMoveRunning 0 ;  ::tactics::findBestMoveStart }
                ::utils::tooltip::Set $f.fbm_stop [::tr StopTraining ]
            }
            pack $f.fbm_space1 -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
            pack $f.fbm_solution $f.fbm_prev $f.fbm_next $f.fbm_stop -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
            
            # load the last game seen by the user
            set fname [sc_base filename]
            if { $fname != "\[empty\]" && $fname != "\[clipbase\]"} {
                if { [ info exists ::tactics::findBestMove_History($fname) ] } {
                    ::game::Load $::tactics::findBestMove_History($fname)
                }
            }
            
            findBestMove
            
        } else  {
            findBestMoveStop
        }
        
    }
    ################################################################################
    # Refresh the PGN window so the solution is visible
    proc  findBestMoveShowSolution {} {
        set ::tactics::findBestMoveRunning 0
        ::pgn::Refresh 1
        set ::tactics::findBestMoveRunning 1
    }
    ################################################################################
    proc findBestMoveStop {} {
        if { ! $::tactics::findBestMoveRunning } {
            set f .main.fbutton.button
            set ::tactics::findBestMoveRunning 0
            # stop the training, restore normal PGN display
            ::pgn::Refresh 1
            set ::gameInfo(hideNextMove) $::tactics::hideNextMove_old
            set ::showVarArrows $::tactics::showVarArrows_old
            set ::showVarPopup $::tactics::showVarPopup_old
            
            set fname [sc_base filename]
            if { $fname != "\[empty\]" && $fname != "\[clipbase\]"} {
                set ::tactics::findBestMove_History($fname) [sc_game number]
            }
            pack forget $f.fbm_space1 $f.fbm_solution $f.fbm_prev $f.fbm_next $f.fbm_stop
            # destroy $f.fbm_space1 $f.fbm_solution $f.fbm_prev $f.fbm_next $f.fbm_stop
        }
    }
    ################################################################################
    # Scid exists when the training is in progress : restore options
    proc findBestMoveExit {} {
        if { $::tactics::findBestMoveRunning } {
            set ::gameInfo(hideNextMove) $::tactics::hideNextMove_old
        }
    }
    ################################################################################
    # returns a list with depth score prevscore
    # or an empty list if marker not found
    proc gotoNextTacticMarker {} {
        while {![sc_pos isAt end]} {
            sc_move forward
            set cmt [sc_pos getComment]
            # TODO old format to be removed
            set res [scan $cmt "\*\*\*\*d%dfrom%fto%f" dif prevscore score ]
            if {$res != 3} { ; # try new format if the old format failed
                set res [scan $cmt "\*\*\*\*D%d %f->%f" dif prevscore score ]
            }
            if {$res == 3} {
                return [list $dif $score $prevscore]
            }
        }
        return {}
    }
    ################################################################################
    # Configuration dialog
    ################################################################################
    proc config {} {
        global ::tactics::baseList
        if {! [file isdirectory $::scidBasesDir]} { setTacticsBasesDir }
        if {! [file isdirectory $::scidBasesDir]} return
        set basePath $::scidBasesDir
        
        # check if tactics window is already opened. If so, abort serial.
        set w .tacticsWin
        if {[winfo exists $w]} {
            destroy $w
        }
        
        set w ".configTactics"
        if {[winfo exists $w]} {
            focus $w
            return
        }
        toplevel $w
        wm title $w $::tr(ConfigureTactics)
        setWinLocation $w
        
        if {[sc_base count free] == 0} {
            tk_messageBox -type ok -icon info -title "Scid" -message "Too many databases are open; close one first"
            return
        }
        
        set prevBase [sc_base current]
        # go through all bases and take descriptions
        set baseList {}
        set fileList [  lsort -dictionary [ glob -nocomplain -directory $basePath *.si4 ] ]
        foreach file  $fileList {
            if {[sc_base slot $file] == 0} {
                sc_base open [file rootname $file]
                set wasOpened 0
            } else  {
                sc_base switch [sc_base slot $file]
                set wasOpened 1
            }
            
            set solvedCount 0
            for {set g 1 } { $g <= [sc_base numGames]} { incr g} {
                sc_game load $g
                if {[sc_game tags get "Site"] == $::tactics::solved} { incr solvedCount }
            }
            lappend baseList "$file" "[sc_base description] ($solvedCount/[sc_base numGames])"
            if {! $wasOpened } {
                sc_base switch $prevBase
                sc_base close [sc_base slot $file]
            }
        }
        
        updateMenuStates
        updateStatusBar
        updateTitle
        
        ttk::frame $w.fconfig -relief raised ;# -borderwidth 1
        ttk::label $w.fconfig.l1 -text $::tr(ChooseTrainingBase)
        pack $w.fconfig.l1
        
        ttk::frame $w.fconfig.flist
        listbox $w.fconfig.flist.lb -selectmode single -exportselection 0 \
                -yscrollcommand "$w.fconfig.flist.ybar set" -height 10 -width 30
        ttk::scrollbar $w.fconfig.flist.ybar -command "$w.fconfig.flist.lb yview"
        pack $w.fconfig.flist.lb $w.fconfig.flist.ybar -side left -fill y
        for {set i 1} {$i<[llength $baseList]} {incr i 2} {
            $w.fconfig.flist.lb insert end [lindex $baseList $i]
        }
        $w.fconfig.flist.lb selection set 0
        
        ttk::frame $w.fconfig.reset
        ttk::button $w.fconfig.reset.button -text $::tr(ResetScores) \
                -command {::tactics::resetScores [ lindex $::tactics::baseList [expr [.configTactics.fconfig.flist.lb curselection] * 2 ] ]}
        pack $w.fconfig.reset.button -expand yes -fill both
        
        # in order to limit CPU usage, limit the time for analysis (this prevents noise on laptops)
        ttk::labelframe $w.fconfig.flimit -text $::tr(limitanalysis)
        ttk::label $w.fconfig.flimit.analabel -text  "($::tr(seconds))"
        ttk::scale $w.fconfig.flimit.analysisTime -orient horizontal -from 1 -to 60 -length 120 -variable ::tactics::analysisTime \
                -command { ::utils::validate::roundScale ::tactics::analysisTime 1 }
        ttk::label $w.fconfig.flimit.value -textvar ::tactics::analysisTime
        pack $w.fconfig.flimit.analabel $w.fconfig.flimit.analysisTime $w.fconfig.flimit.value -side left -expand yes -fill x
        
        ttk::frame $w.fconfig.fbutton
        ttk::button $w.fconfig.fbutton.ok -text $::tr(Continue) -command {
            set base [ lindex $::tactics::baseList [expr [.configTactics.fconfig.flist.lb curselection] * 2 ] ]
            destroy .configTactics
            ::tactics::start $base
        }
        ttk::button $w.fconfig.fbutton.cancel -text $::tr(Cancel) -command "focus .; destroy $w"
        pack $w.fconfig.fbutton.ok $w.fconfig.fbutton.cancel -expand yes -side left -padx 20 -pady 2
        
        pack $w.fconfig $w.fconfig.flist $w.fconfig.reset $w.fconfig.flimit $w.fconfig.fbutton -expand 1 -fill x
        bind $w <Configure> "recordWinSize $w"
        bind $w <F1> { helpWindow TacticsTrainer }
        
    }
    ################################################################################
    #
    ################################################################################
    proc start { base } {
        global ::tactics::analysisEngine ::askToReplaceMoves ::tactics::askToReplaceMoves_old
        
        set ::tactics::lastGameLoaded 0
        
        if { ! [::tactics::launchengine] } { return }
        
        set askToReplaceMoves_old $askToReplaceMoves
        set askToReplaceMoves 0
        
        set w .tacticsWin
        if {[winfo exists $w]} { focus $w ; return }
        
        createToplevel $w
        setTitle $w $::tr(Tactics)
        setWinLocation $w
        # because sometimes the 2 buttons at the bottom are hidden
        wm minsize $w 170 170
        ttk::frame $w.f1 -relief groove ;# -borderwidth 1
        ttk::label $w.f1.labelInfo -textvariable ::tactics::infoEngineLabel -background linen
        ttk::checkbutton $w.f1.cbWinWonGame -text $::tr(WinWonGame) -variable ::tactics::winWonGame
        pack $w.f1.labelInfo $w.f1.cbWinWonGame -expand yes -fill both -side top
        
        ttk::frame $w.fclock
        ::gameclock::new $w.fclock 1 80 0
        ::gameclock::reset 1
        ::gameclock::start 1
        
        ttk::frame $w.f2 -relief groove
        ttk::checkbutton $w.f2.cbSolution -text $::tr(ShowSolution) -variable ::tactics::showSolution -command ::tactics::toggleSolution
        ttk::label $w.f2.lSolution -textvariable ::tactics::labelSolution -wraplength 120
        pack $w.f2.cbSolution $w.f2.lSolution -expand yes -fill both -side top
        
        ttk::frame $w.fbuttons -relief groove -borderwidth 1
        pack $w.f1 $w.fclock $w.f2 $w.fbuttons -expand yes -fill both
        
        setInfoEngine $::tr(LoadingBase)
        
        ttk::button $w.fbuttons.next -text $::tr(Next) -command {
            ::tactics::stopAnalyze
            ::tactics::loadNextGame }
        ttk::button $w.fbuttons.close -textvar ::tr(Abort) -command ::tactics::endTraining
        pack $w.fbuttons.next $w.fbuttons.close -expand yes -fill both -padx 20 -pady 2
        bind $w <Destroy> { ::tactics::endTraining }
        bind $w <Configure> "recordWinSize $w"
        bind $w <F1> { helpWindow TacticsTrainer }
        createToplevelFinalize $w
        
        ::tactics::loadBase [file rootname $base]
        
        setInfoEngine "---"
        ::tactics::loadNextGame
        ::tactics::mainLoop
    }
    ################################################################################
    #
    ################################################################################
    proc endTraining {} {
        set w .tacticsWin
        ::tactics::stopAnalyze
        after cancel ::tactics::mainLoop
        catch { sc_base close }
        updateMenuStates
        updateStatusBar
        updateTitle
        set ::askToReplaceMoves $::tactics::askToReplaceMoves_old
        focus .
        destroy $w
        
        catch { ::uci::closeUCIengine $::tactics::engineSlot }
    }
    ################################################################################
    #
    ################################################################################
    proc toggleSolution {} {
        global ::tactics::showSolution ::tactics::labelSolution ::tactics::analysisEngine
        if {$showSolution} {
            set labelSolution "$analysisEngine(score) : [::trans $analysisEngine(moves)]"
        } else  {
            set labelSolution ". . . . . . "
        }
    }
    ################################################################################
    #
    ################################################################################
    proc resetScores {name} {
        global ::tactics::cancelScoreReset ::tactics::baseList
        
        set base [file rootname $name]
        
        set wasOpened 0
        
        if {[sc_base count free] == 0} {
            tk_messageBox -type ok -icon info -title "Scid" -message "Too many databases are opened\nClose one first"
            return
        }
        # check if the base is already opened
        if {[sc_base slot $name] != 0} {
            sc_base switch [sc_base slot $name]
            set wasOpened 1
        } else  {
            if { [catch { sc_base open $base }] } {
                tk_messageBox -type ok -icon warning -title "Scid" -message "Unable to open base"
                return
            }
        }
        
        #reset site tag for each game
        progressWindow "Scid" $::tr(ResettingScore) $::tr(Cancel) "::tactics::sc_progressBar"
        set numGames [sc_base numGames]
        set cancelScoreReset 0
        for {set g 1} { $g <= $numGames } { incr g} {
            if { $cancelScoreReset } { break }
            sc_game load $g
            if { [sc_game tags get "Site"] != ""} {
                sc_game tags set -site ""
                sc_game save [sc_game number]
            }
            if { [expr $g % 100] == 0 } {
                updateProgressWindow $g $numGames
            }
        }
        closeProgressWindow
        if { ! $wasOpened } {
            sc_base close
        }
        # update listbox
        set w ".configTactics"
        set cs [$w.fconfig.flist.lb curselection]
        set idx [expr $cs * 2 +1]
        set tmp [lindex $baseList $idx]
        regsub "\[(\]\[0-9\]+/" $tmp "(0/" tmp
        lset baseList $idx $tmp
        $w.fconfig.flist.lb delete 0 end
        for {set i 1} {$i<[llength $baseList]} {incr i 2} {
            $w.fconfig.flist.lb insert end [lindex $baseList $i]
        }
        $w.fconfig.flist.lb selection set $cs
    }
    ################################################################################
    # cancel score reset loading
    ################################################################################
    proc sc_progressBar {} {
        set ::tactics::cancelScoreReset 1
    }
    ################################################################################
    #
    ################################################################################
    proc loadNextGame {} {
        ::tactics::resetValues
        setInfoEngine $::tr(LoadingGame)
        set newGameFound 0
        # find a game with site tag != problem solved
        for {set g [ expr $::tactics::lastGameLoaded +1 ] } { $g <= [sc_base numGames]} { incr g} {
            sc_game load $g
            set tag [sc_game tags get "Site"]
            if {$tag != $::tactics::solved} { set newGameFound 1 ; break }
        }
        # it seems we finished the serial
        if {! $newGameFound } {
            tk_messageBox -title "Scid" -icon info -type ok -message $::tr(AllExercisesDone)
            return
        }
        set ::tactics::lastGameLoaded $g
        
        sideToMoveAtBottom
        
        ::gameclock::reset 1
        ::gameclock::start 1
        
        ::notify::DatabaseChanged
        updateBoard -pgn
        set ::tactics::prevFen [sc_pos fen]
        ::tactics::startAnalyze
        ::tactics::mainLoop
    }
    ################################################################################
    # flips the board if necessary so the side to move is at the bottom
    ################################################################################
    proc sideToMoveAtBottom {} {
        if { [sc_pos side] == "white" && [::board::isFlipped .main.board] || [sc_pos side] == "black" &&  ![::board::isFlipped .main.board] } {
            ::board::flip .main.board
        }
    }
    ################################################################################
    #
    ################################################################################
    proc isPlayerTurn {} {
        if { [sc_pos side] == "white" &&  ![::board::isFlipped .main.board] || [sc_pos side] == "black" &&  [::board::isFlipped .main.board] } {
            return 1
        }
        return 0
    }
    ################################################################################
    #
    ################################################################################
    proc exSolved {} {
        ::tactics::stopAnalyze
        ::gameclock::stop 1
        tk_messageBox -title "Scid" -icon info -type ok -message $::tr(MateFound)
        sc_game tags set -site $::tactics::solved
        sc_game save [sc_game number]
        ::tactics::loadNextGame
    }
    ################################################################################
    # Handle the case where position was changed not during normal play but certainly with
    # move back / forward / rewind commands
    ################################################################################
    proc abnormalContinuation {} {
        ::tactics::stopAnalyze
        ::tactics::resetValues
        ::notify::DatabaseChanged
        updateBoard -pgn
        if { [sc_pos side] == "white" && [::board::isFlipped .main.board] || [sc_pos side] == "black" &&  ![::board::isFlipped .main.board] } {
            ::board::flip .main.board
        }
        set ::tactics::prevFen [sc_pos fen]
        ::tactics::startAnalyze
        ::tactics::mainLoop
    }
    ################################################################################
    # waits for the user to play and check the move played
    ################################################################################
    proc mainLoop {} {
        global ::tactics::prevScore ::tactics::prevLine ::tactics::analysisEngine ::tactics::nextEngineMove
        
        after cancel ::tactics::mainLoop
        
        if {[sc_pos fen] != $::tactics::prevFen && [sc_pos isAt start]} {
            ::tactics::abnormalContinuation
            return
        }
        
        # is this player's turn (which always plays from bottom of the board) ?
        if { [::tactics::isPlayerTurn] } {
            after 1000  ::tactics::mainLoop
            return
        }
        
        set ::tactics::prevFen [sc_pos fen]
        
        # check if player's move is a direct mate : no need to wait for engine analysis in this case
        set move_done [sc_game info previousMove]
        if { [string index $move_done end] == "#"} { ::tactics::exSolved; return }
        
        # if the engine is still analyzing, wait the end of it
        if {$analysisEngine(analyzeMode)} { vwait ::tactics::analysisEngine(analyzeMode) }
        
        if {[sc_pos fen] != $::tactics::prevFen  && [sc_pos isAt start]} {
            ::tactics::abnormalContinuation
            return
        }
        
        # the player moved and analysis is over : check if his move was as good as expected
        set prevScore $analysisEngine(score)
        set prevLine $analysisEngine(moves)
        ::tactics::startAnalyze
        
        # now wait for the end of analyzis
        if {$analysisEngine(analyzeMode)} { vwait ::tactics::analysisEngine(analyzeMode) }
        if {[sc_pos fen] != $::tactics::prevFen  && [sc_pos isAt start]} {
            ::tactics::abnormalContinuation
            return
        }
        
        # compare results
        set res [::tactics::foundBestLine]
        if {  $res != ""} {
            tk_messageBox -title "Scid" -icon info -type ok -message "$::tr(BestSolutionNotFound)\n$res"
            # take back last move so restore engine status
            set analysisEngine(score) $prevScore
            set analysisEngine(moves) $prevLine
            sc_game tags set -site $::tactics::failed
            sc_game save [sc_game number]
            sc_move back
            updateBoard -pgn
            set ::tactics::prevFen [sc_pos fen]
        } else  {
            catch { sc_move addSan $nextEngineMove }
            set ::tactics::prevFen [sc_pos fen]
            updateBoard -pgn
            if { $::tactics::matePending } {
                # continue until end of game
            } else  {
                setInfoEngine $::tr(GoodMove)
                sc_game tags set -site $::tactics::solved
                sc_game save [sc_game number]
            }
        }
        
        after 1000 ::tactics::mainLoop
    }
    ################################################################################
    # Returns "" if the user played the best line, otherwise an explanation about the missed move :
    # - guessed the same next move as engine
    # - mate found in the minimal number of moves
    # - combinaison's score is close enough (within 0.5 point)
    ################################################################################
    proc foundBestLine {} {
        global ::tactics::analysisEngine ::tactics::prevScore ::tactics::prevLine ::tactics::nextEngineMove ::tactics::matePending
        set score $analysisEngine(score)
        set line $analysisEngine(moves)
        
        set s [ regsub -all "\[\.\]{3} " $line "" ]
        set s [ regsub -all "\[0-9\]+\[\.\] " $s "" ]
        set nextEngineMove [ lindex [ split $s ] 0 ]
        set ply [ llength [split $s] ]
        
        # check if the player played the same move predicted by engine
        set s [ regsub -all "\[\.\]{3} " $prevLine "" ]
        set s [ regsub -all "\[0-9\]+\[\.\] " $s "" ]
        set prevBestMove [ lindex [ split $s ] 1 ]
        if { [sc_game info previousMoveNT] == $prevBestMove} {
            return ""
        }
        
        # Case of mate
        if { [string index $prevLine end] == "#"} {
            set matePending 1
            #  Engine may find a mate then put a score != 300 but rather 10
            if {[string index $line end] != "#"} {
                # Engine line does not end with a # but the score is a mate (we can't count plies here)
                if {[sc_pos side] == "white" && $score < -300 || [sc_pos side] == "black" && $score > 300} {
                    return ""
                }
                if {! $::tactics::winWonGame } {
                    return $::tr(MateNotFound)
                } else  {
                    # win won game but still have to find a mate
                    if {[sc_pos side] == "white" && $score < -300 || [sc_pos side] == "black" && $score > 300} {
                        return ""
                    } else  {
                        return $::tr(MateNotFound)
                    }
                }
            }
            # Engine found a mate, search in how many plies
            set s [ regsub -all "\[\.\]{3} " $prevLine "" ]
            set s [ regsub -all "\[0-9\]+\[\.\] " $s "" ]
            set prevPly [ llength [ split $s ] ]
            if { $ply > [ expr $prevPly - 1 ] && ! $::tactics::winWonGame } {
                return $::tr(ShorterMateExists)
            } else  {
                return ""
            }
        } else  {
            # no mate case
            set matePending 0
            set threshold 0.5
            if {$::tactics::winWonGame} {
                # Only alert when the advantage clearly changes side
                if {[sc_pos side] == "white" && $prevScore < 0 && $score >= $threshold  || \
                            [sc_pos side] == "black" &&  $prevScore >= 0 && $score < [expr 0 - $threshold]  } {
                    return "$::tr(ScorePlayed) $score\n$::tr(Expected) $prevScore"
                } else  {
                    return ""
                }
            }
            if {[ expr abs($prevScore) ] > 3.0 } { set threshold 1.0 }
            if {[ expr abs($prevScore) ] > 5.0 } { set threshold 1.5 }
            # the player moved : score is from opponent side
            if {[sc_pos side] == "white" && $score < [ expr $prevScore + $threshold ] || \
                        [sc_pos side] == "black" && $score > [ expr $prevScore - $threshold ] } {
                return ""
            } else  {
                return "$::tr(ScorePlayed) $score\n$::tr(Expected) $prevScore"
            }
        }
    }
    ################################################################################
    # Loads a base bundled with Scid (in ./bases directory)
    ################################################################################
    proc loadBase { name } {
        
        if {[sc_base count free] == 0} {
            tk_messageBox -type ok -icon info -title "Scid" -message "Too many databases are open; close one first"
            return
        }
        # check if the base is already opened
        if {[sc_base slot $name] != 0} {
            sc_base switch [sc_base slot $name]
        } else  {
            if { [catch { sc_base open $name }] } {
                tk_messageBox -type ok -icon warning -title "Scid" -message "Unable to open base"
                return
            }
        }
        
        ::notify::DatabaseChanged
        updateBoard -pgn
    }
    ################################################################################
    ## resetValues
    #   Resets global data.
    ################################################################################
    proc resetValues {} {
        set ::tactics::prevScore 0
        set ::tactics::prevLine ""
        set ::tactics::nextEngineMove ""
        set ::tactics::matePending 0
        set ::tactics::showSolution 0
        set ::tactics::labelSolution ""
        set ::tactics::prevFen ""
    }
    ################################################################################
    #
    ################################################################################
    proc  restoreAskToReplaceMoves {} {
        set ::askToReplaceMoves $::tactics::askToReplaceMoves_old
    }
    ################################################################################
    #
    ################################################################################
    proc setInfoEngine { s { color linen } } {
        set ::tactics::infoEngineLabel $s
        .tacticsWin.f1.labelInfo configure -background $color
    }
    
    ################################################################################
    #  Will start engine
    # in case of an error, return 0, or 1 if the engine is ok
    ################################################################################
    proc launchengine {} {
        global ::tactics::analysisEngine
        
        ::uci::resetUciInfo $::tactics::engineSlot
        
        set analysisEngine(analyzeMode) 0
        
        # find engine
        set engineFound 0
        set index 0
        foreach e $::engines(list) {
            if { [string equal -nocase -length 4 [lindex $e 0] "toga" ] } {
                set engineFound 1
                break
            }
            incr index
        }
        if { ! $engineFound } {
            tk_messageBox -type ok -icon warning -parent . -title "Scid" -message "Unable to find engine.\nPlease configure engine with Toga as name"
            return 0
        }
        
        ::uci::startEngine $index $::tactics::engineSlot ;# start engine in analysis mode
        return 1
    }
    
    # ======================================================================
    # sendToEngine:
    #   Send a command to a running analysis engine.
    # ======================================================================
    proc sendToEngine {text} {
        ::uci::sendToEngine $::tactics::engineSlot $text
    }
    
    # ======================================================================
    # startAnalyzeMode:
    #   Put the engine in analyze mode
    # ======================================================================
    proc startAnalyze { } {
        global ::tactics::analysisEngine ::tactics::analysisTime
        setInfoEngine "$::tr(Thinking) ..." PaleVioletRed
        
        # Check that the engine has not already had analyze mode started:
        if {$analysisEngine(analyzeMode)} {
            ::tactics::sendToEngine  "exit"
        }
        
        set analysisEngine(analyzeMode) 1
        after cancel ::tactics::stopAnalyze
        ::tactics::sendToEngine "position fen [sc_pos fen]"
        ::tactics::sendToEngine "go infinite"
        after [expr 1000 * $analysisTime] ::tactics::stopAnalyze
    }
    # ======================================================================
    # stopAnalyzeMode:
    #   Stop the engine analyze mode
    # ======================================================================
    proc stopAnalyze { } {
        global ::tactics::analysisEngine ::tactics::analysisTime
        # Check that the engine has already had analyze mode started:
        if {!$analysisEngine(analyzeMode)} { return }
        
        set pv [lindex $::analysis(multiPV$::tactics::engineSlot) 0]
        set analysisEngine(score) [lindex $pv 1]
        set analysisEngine(moves) [lindex $pv 2]
        
        set analysisEngine(analyzeMode) 0
        ::tactics::sendToEngine  "stop"
        setInfoEngine $::tr(AnalyzeDone) PaleGreen3
    }
    
}

###
### End of file: tactics.tcl
###
### reviewgame.tcl: part of Scid.
### Copyright (C) 2009  Pascal Georges
###
######################################################################
### Try to guess the moves of a game
#

# TODO :
# - permettre tourner l'échiquier après le démarrage

namespace eval reviewgame {
  
  set prevScore 0
  set prevLine ""
  set nextEngineMove ""
  set prevFen ""
  set engineSlot 6
  set window ".reviewgame"
  set timeShort 5
  set timeExtended 1
  set margin 0.3
  set moveOfGameIsBest 0
  # The score of the move really played
  set scoreGame 0.0
  # The score of the user's move
  set scorePlayed 0.0
  # Score of the engine
  set scoreEngine 0.0
  
  set sequence 0
  set pushedgame 0
  
  array set analysisEngine {}
  
  set progressBarStep 1
  set progressBarTimer 0
  set autoProceed 0
}

################################################################################
#
################################################################################
proc ::reviewgame::start {} {
  set w $::reviewgame::window
  createToplevel $w
  setTitle $w [::tr "GameReview" ]
  setWinLocation $w
  wm minsize $w 200 200
  
  ttk::frame $w.fgameinfo
  set welo [sc_game tags get WhiteElo]
  set belo [sc_game tags get BlackElo]
  if { $welo == "0"} { set welo "-" }
  if { $belo == "0"} { set belo "-" }
  ttk::label $w.fgameinfo.l1 -text "[sc_game tags get White] ($welo) - [sc_game tags get Black] ($belo)"
  set result [sc_game tags get Result]
  if { $result == "1" } { set result "1-0" }
  if { $result == "0" } { set result "0-1" }
  if { $result == "=" } { set result "1/2 - 1/2" }
  ttk::label $w.fgameinfo.l2 -text "$result"
  pack $w.fgameinfo.l1 $w.fgameinfo.l2
  pack $w.fgameinfo -expand 1 -fill both
  
  ttk::frame $w.fparam
  ttk::label $w.fparam.ltime1 -text "[::tr Time] ([::tr sec])"
  spinbox $w.fparam.time1 -values { 5 10 15 30 45 60 90 120 } -command { set ::reviewgame::timeShort [$::reviewgame::window.fparam.time1 get] }
  $w.fparam.time1 set $::reviewgame::timeShort
  ttk::label $w.fparam.ltime2 -text "[::tr GameReviewTimeExtended] ([ ::tr min])"
  spinbox $w.fparam.time2 -values { 1 2 3 4 5} -command { set ::reviewgame::timeExtended [$::reviewgame::window.fparam.time1 get] }
  $w.fparam.time2 set $::reviewgame::timeExtended
  ttk::label $w.fparam.lmargin -text "[::tr GameReviewMargin]"
  spinbox $w.fparam.margin -from 0.1 -to 1.0 -increment 0.1 -command { set ::reviewgame::margin [$::reviewgame::window.fparam.time1 get] }
  $w.fparam.margin set $::reviewgame::margin
  
  set row 0
  grid $w.fparam.ltime1 -column 0 -row $row -sticky nw
  grid $w.fparam.time1 -column 1 -row $row -sticky nw
  incr row
  grid $w.fparam.ltime2 -column 0 -row $row -sticky nw
  grid $w.fparam.time2 -column 1 -row $row -sticky nw
  incr row
  grid $w.fparam.lmargin -column 0 -row $row -sticky nw
  grid $w.fparam.margin -column 1 -row $row -sticky nw
  incr row
  
  ttk::checkbutton $w.fparam.cbproceed -text "[::tr GameReviewAutoContinue]" -variable ::reviewgame::autoProceed
  grid $w.fparam.cbproceed -column 0 -row $row  -columnspan 2 -sticky nw
  
  pack $w.fparam -expand 1 -fill both
  
  ttk::frame $w.finfo
  pack $w.finfo -expand 1 -fill both
  ttk::progressbar $w.finfo.pb -orient horizontal -length 100 -value 0 -mode determinate
  ttk::label $w.finfo.pblabel -image tb_stop -compound left
  ttk::label $w.finfo.sc1 -text "-"
  ttk::label $w.finfo.sc2 -text "-"
  ttk::label $w.finfo.sc3 -foreground blue -text "-"
  ttk::button $w.finfo.proceed -textvar ::tr(Continue) -command ::reviewgame::proceed
  ttk::button $w.finfo.extended -text "[::tr GameReviewReCalculate]" -command ::reviewgame::extendedTime
  
  set row 0
  grid $w.finfo.pb -column 0 -row $row -sticky nw
  incr row
  grid $w.finfo.pblabel -column 0 -row $row -sticky nw
  incr row
  grid $w.finfo.proceed -column 0 -row $row -sticky nw
  grid $w.finfo.extended -column 1 -row $row -sticky nw
  incr row
  grid $w.finfo.sc1 -column 0 -row $row  -columnspan 2 -sticky nw
  incr row
  grid $w.finfo.sc2 -column 0 -row $row  -columnspan 2 -sticky nw
  incr row
  grid $w.finfo.sc3 -column 0 -row $row  -columnspan 2 -sticky nw
  incr row
  
  ttk::button $w.finfo.sol -text [::tr ShowSolution ] -command ::reviewgame::showSolution
  grid $w.finfo.sol -column 0 -row $row  -sticky nw
  incr row
  
  # Display statistics
  ttk::label $w.finfo.stats -text ""
  grid $w.finfo.stats -column 0 -row $row -sticky nw -columnspan 3
  
  ttk::frame $w.fbuttons
  pack $w.fbuttons -fill x
  ttk::button $w.fbuttons.close -textvar ::tr(Abort) -command ::reviewgame::endTraining
  pack $w.fbuttons.close -expand 1 -fill x
  
  set ::reviewgame::boardFlipped [::board::isFlipped .main.board]
  
  if { ! [::reviewgame::launchengine] } {
    tk_messageBox -title "Scid" -icon error -type ok -message "Error launching engine"
    return
  }
  
  bind $w <Destroy> { ::reviewgame::endTraining }
  bind $w <Configure> "recordWinSize $w"
  bind $w <F1> { helpWindow ReviewGame }
  
  set ::reviewgame::prevFen [sc_pos fen]
  set ::reviewgame::movesLikePlayer 0
  set ::reviewgame::movesLikeEngine 0
  set ::reviewgame::numberMovesPlayed 0
  ::reviewgame::resetValues
  ::reviewgame::mainLoop
  
}
################################################################################
#
################################################################################
proc ::reviewgame::showSolution {} {
  set w $::reviewgame::window
  $w.finfo.sol configure -text "[ sc_game info nextMove ]"
  set ::reviewgame::solutionDisplayed 1
}
################################################################################
#
################################################################################
proc ::reviewgame::endTraining {} {
  set w $::reviewgame::window
  
  if {$::reviewgame::pushedgame} {
    sc_game pop
  }
  
  after cancel ::reviewgame::mainLoop
  set ::reviewgame::bailout 1
  set ::reviewgame::sequence 0
  after cancel ::reviewgame::stopAnalyze
  ::reviewgame::stopAnalyze
  focus .
  bind $w <Destroy> {}
  destroy $w
  ::docking::cleanup $w
  
  catch { ::uci::closeUCIengine $::reviewgame::engineSlot }
}
################################################################################
#
################################################################################
proc ::reviewgame::isPlayerTurn {} {
  if { [sc_pos side] == "white" &&  ![::board::isFlipped .main.board] || [sc_pos side] == "black" &&  [::board::isFlipped .main.board] } {
    return 1
  }
  return 0
}
################################################################################
# Handle the case where position was changed not during normal play but certainly with
# move back / forward / rewind commands
################################################################################
proc ::reviewgame::abnormalContinuation {} {
  ::reviewgame::stopAnalyze
  ::reviewgame::resetValues
  ::windows::gamelist::Refresh
  ::windows::stats::Refresh
  updateMenuStates
  updateBoard -pgn
  if { [sc_pos side] == "white" && [::board::isFlipped .main.board] || [sc_pos side] == "black" &&  ![::board::isFlipped .main.board] } {
    ::board::flip .main.board
  }
  set ::reviewgame::prevFen [sc_pos fen]
  ::reviewgame::startAnalyze
  ::reviewgame::mainLoop
}
################################################################################
# waits for the user to play and check the move played
################################################################################
proc ::reviewgame::mainLoop {} {
  global ::reviewgame::prevScore ::reviewgame::prevLine ::reviewgame::analysisEngine ::reviewgame::nextEngineMove
  global ::reviewgame::sequence ::reviewgame::useExtendedTime
  set w $::reviewgame::window
  
  after cancel ::reviewgame::mainLoop
  
  if { ! [ checkConsistency ] } { puts "ERROR checkConsistency returns false" ; return }
  
  if { $useExtendedTime } {
    set ::reviewgame::thinkingTime [expr $::reviewgame::timeExtended * 60 ]
  } else {
    set ::reviewgame::thinkingTime $::reviewgame::timeShort
  }
  
  # in start position, it must be user's turn
  if { ! [::reviewgame::isPlayerTurn] && $sequence == 0} {
    if { [ sc_game info nextMoveNT ] != ""} {
      ::move::Forward
    }
  }
  
  $w.finfo.proceed configure -state disabled
  $w.finfo.sol configure -state disabled
  
  # Phase 1 : analyze the move really played during the game
  if {$sequence == 0} {
    $w.finfo.sc1 configure -text ""
    $w.finfo.sc2 configure -text ""
    set ::reviewgame::movePlayed [ sc_game info nextMoveNT ]
    if {$::reviewgame::movePlayed == ""} {
      return
    }
    $w.finfo.pblabel configure -image tb_stop -text "[::tr GameReviewAnalyzingMovePlayedDuringTheGame]"
    ::reviewgame::startAnalyze $::reviewgame::thinkingTime $::reviewgame::movePlayed
    vwait ::reviewgame::sequence
    if { $::reviewgame::bailout } { return }
  }
  
  # Phase 2 : find the best engine move in current position
  if { $sequence == 1 } {
    $w.finfo.pblabel configure -image tb_stop -text "[::tr GameReviewAnalyzingThePosition]"
    ::reviewgame::startAnalyze $::reviewgame::thinkingTime
    vwait ::reviewgame::sequence
    if { $::reviewgame::bailout } { return }
  }
  
  $w.finfo.pblabel configure -image tb_play -text "[::tr GameReviewEnterYourMove]"
  $w.finfo.sol configure -state normal
  
  # is this player's turn (which always plays from bottom of the board) ?
  if { [::reviewgame::isPlayerTurn] } {
    after 1000  ::reviewgame::mainLoop
    return
  }
  
  $w.finfo.sol configure -text "[::tr ShowSolution]"
  
  checkPlayerMove
  
  $w.finfo.proceed configure -state normal
  $w.finfo.extended configure -state normal
  updateStats
  set ::reviewgame::useExtendedTime 0
  after 1000  ::reviewgame::mainLoop
}
################################################################################
#
################################################################################
proc ::reviewgame::checkPlayerMove {} {
  global ::reviewgame::prevScore ::reviewgame::prevLine ::reviewgame::analysisEngine ::reviewgame::nextEngineMove
  global ::reviewgame::sequence ::reviewgame::useExtendedTime
  set w $::reviewgame::window
  
  incr ::reviewgame::numberMovesPlayed
  
  # Phase 3 : ponder on user's move if different of best engine move and move played
  # We know user has played
  set user_move [sc_game info previousMoveNT]
  
  # ponder on user's move if he did not play the same move as in match
  if {$user_move != $::reviewgame::movePlayed} {
    $w.finfo.pblabel configure -image tb_stop -text "[::tr GameReviewCheckingYourMove]"
    $w.finfo.sc3 configure -text ""
    ::reviewgame::startAnalyze $::reviewgame::thinkingTime ;#$user_move
    vwait ::reviewgame::sequence
    if { $::reviewgame::bailout } { return }
    $w.finfo.pblabel configure -image tb_stop -text "[::tr GameReviewYourMoveWasAnalyzed]"
    # display user's score
    $w.finfo.sc3 configure -text "[::tr GameReviewScoreOfYourMove] : $analysisEngine(score,2)"
  }
  
  # User guessed the correct move played in game
  if {$user_move == $::reviewgame::movePlayed } {
    
    set  ::reviewgame::sequence 0
    
    $w.finfo.sc3 configure -text "[::tr GameReviewYouPlayedSameMove]" -foreground "sea green"
    if {  ! $::reviewgame::solutionDisplayed } {
      incr ::reviewgame::movesLikePlayer
    }
    # Starting with Scid 4.1, when the move entered already exists it is not added but we simply move forward, so the code below is useless
    # set var [sc_var number]
    # sc_var exit
    # sc_var delete $var
    # sc_move forward
    # updateBoard -animate -pgn
    
    # display played move score
    $w.finfo.sc2 configure -text "[::tr GameReviewGameMoveScore] : $analysisEngine(score,1) [::trans $::reviewgame::movePlayed]"
    # display engine's score
    $w.finfo.sc1 configure -text "[::tr GameReviewEngineScore] : $analysisEngine(score,2) [::trans [lindex $analysisEngine(moves,2) 0]]"
    if { $::reviewgame::autoProceed } {
      # guessed the correct move played during the game, so continue directly
      proceed
    }
    $w.finfo.pblabel configure -image tb_play -text ""
    set sequence 0
  } elseif { $user_move == [ lindex $analysisEngine(moves,2) 0] || [ isGoodScore $analysisEngine(score,2) $analysisEngine(score,3)  ] } {
    
    set  ::reviewgame::sequence 0
    
    # User guessed engine's move
    if {$user_move == [ lindex $analysisEngine(moves,2) 0]} {
      $w.finfo.sc3 configure -text "[::tr GameReviewYouPlayedLikeTheEngine]" -foreground "sea green"
      incr ::reviewgame::movesLikeEngine
      
    } else  {
      $w.finfo.sc3 configure -text "[::tr GameReviewNotEngineMoveButGoodMove] : [::trans $user_move] ($analysisEngine(score,3))" -foreground blue
    }
    sc_var exit
    sc_move forward
    updateBoard -animate -pgn
    # display played move score
    $w.finfo.sc2 configure -text "[::tr GameReviewGameMoveScore] : $analysisEngine(score,1) [::trans $::reviewgame::movePlayed]"
    # display engine's score
    $w.finfo.sc1 configure -text "[::tr GameReviewEngineScore] $analysisEngine(score,2) [::trans [lindex $analysisEngine(moves,2) 0]]"
  } else  {
    
    # user played a bad move : comment it and restart the process
    
    set  ::reviewgame::sequence 2
    
    $w.finfo.sc3 configure -text "[::tr GameReviewMoveNotGood] $analysisEngine(score,3) \n([::trans $analysisEngine(moves,3)])" -foreground red
    sc_pos addNag "?"
    
    # Instead of adding info in comments, add real variations
    # sc_pos setComment "($analysisEngine(score,3)) $analysisEngine(moves,3) Engine : ($analysisEngine(score,2)) \n[::trans $analysisEngine(moves,2)]"
    sc_pos setComment "($analysisEngine(score,3))"
    sc_move addSan $analysisEngine(moves,3)
    sc_var exit
    sc_var create
    sc_pos setComment "Engine : ($analysisEngine(score,2))"
    sc_move addSan $analysisEngine(moves,2)
    sc_var exit
    updateBoard -pgn
    
    # allows a re-calculation
    $w.finfo.extended configure -state normal
    
    # display played move score
    $w.finfo.sc2 configure -text "[::tr GameReviewGameMoveScore] : $analysisEngine(score,1)"
    # display engine's score
    $w.finfo.sc1 configure -text "[::tr GameReviewEngineScore] $analysisEngine(score,2)"
    set  ::reviewgame::sequence 2
    # after 1000 ::reviewgame::mainLoop
    # return
  }
  
}
################################################################################
#
################################################################################
proc ::reviewgame::updateStats {} {
  
  set l $::reviewgame::window.finfo.stats
  if { ![::board::isFlipped .main.board] } {
    set player [sc_game info white]
  } else  {
    set player [sc_game info black]
  }
  
  $l configure -text "[::tr GameReviewMovesPlayedLike] $player : $::reviewgame::movesLikePlayer / $::reviewgame::numberMovesPlayed\n[::tr GameReviewMovesPlayedEngine] : $::reviewgame::movesLikeEngine / $::reviewgame::numberMovesPlayed"
}
################################################################################
#
################################################################################
proc ::reviewgame::isGoodScore {engine player} {
  global ::reviewgame::margin
  puts "isGoodScore engine $engine player $player"
  if { ![::board::isFlipped .main.board] } {
    # if player plays white
    if {$player >= [expr $engine - $margin]} {
      return 1
    }
  } else  {
    if {$player <= [expr $engine + $margin]} {
      return 1
    }
  }
  puts "return 0"
  return 0
}
################################################################################
## resetValues
#   Resets global data.
################################################################################
proc ::reviewgame::resetValues {} {
  set ::reviewgame::prevScore 0
  set ::reviewgame::prevLine ""
  set ::reviewgame::nextEngineMove ""
  set ::reviewgame::prevFen ""
  set ::reviewgame::sequence 0
  set ::reviewgame::analysisEngine(analyzeMode) 0
  set ::reviewgame::bailout 0
  set ::reviewgame::useExtendedTime 0
  set ::reviewgame::solutionDisplayed 0
}

################################################################################
#  Will start engine
# in case of an error, return 0, or 1 if the engine is ok
################################################################################
proc ::reviewgame::launchengine {} {
  global ::reviewgame::analysisEngine
  
  ::uci::resetUciInfo $::reviewgame::engineSlot
  
  set analysisEngine(analyzeMode) 0
  
  # find engine
  set engineFound 0
  set index 0
  foreach e $::engines(list) {
    if { [string equal -nocase -length 4 [lindex $e 0] "toga" ] } {
      set engineFound 1
      break
    }
    incr index
  }
  if { ! $engineFound } {
    tk_messageBox -type ok -icon warning -parent . -title "Scid" -message "Unable to find engine.\nPlease configure engine with Toga as name"
    return 0
  }
  
  ::uci::startEngine $index $::reviewgame::engineSlot ;# start engine in analysis mode
  return 1
}

# ======================================================================
# sendToEngine:
#   Send a command to a running analysis engine.
# ======================================================================
proc ::reviewgame::sendToEngine {text} {
  ::uci::sendToEngine $::reviewgame::engineSlot $text
}

# ======================================================================
# startAnalyzeMode:
#   Put the engine in analyze mode, from current position after move played (in UCI format), time is in seconds
# ======================================================================
proc ::reviewgame::startAnalyze { analysisTime { move "" } } {
  global ::reviewgame::analysisEngine ::reviewgame::engineSlot
  
  puts "startAnalyze $move"
  
  set pb $::reviewgame::window.finfo.pb
  set length [$pb cget -maximum]
  set ::reviewgame::progressBarTimer  [expr ( $analysisTime * 1000 * $::reviewgame::progressBarStep ) / $length ]
  after $::reviewgame::progressBarTimer ::reviewgame::updateProgressBar
  
  # Check that the engine has not already had analyze mode started:
  if {$analysisEngine(analyzeMode)} {
    ::reviewgame::sendToEngine  "exit"
  }
  set analysisEngine(analyzeMode) 1
  after cancel ::reviewgame::stopAnalyze
  
  # we want to ponder on a particular move, hence we need to switch to a temporary position so
  # UCI code can correctly format the variations
  if {$move != ""} {
    sc_game push copyfast
    set ::reviewgame::pushedgame 1
    # puts "::uci::sc_move_add $move"
    # ::uci::sc_move_add $move
    sc_move addSan $move
    set ::analysis(fen$engineSlot) [sc_pos fen]
  } else  {
    set ::analysis(fen$engineSlot) ""
    set ::reviewgame::pushedgame 0
  }
  
  ::reviewgame::sendToEngine "position fen [sc_pos fen] $move"
  ::reviewgame::sendToEngine "go infinite"
  after [expr 1000 * $analysisTime] "::reviewgame::stopAnalyze $move"
}
# ======================================================================
# stopAnalyzeMode:
#   Stop the engine analyze mode
# ======================================================================
proc ::reviewgame::stopAnalyze { { move "" } } {
  global ::reviewgame::analysisEngine ::reviewgame::sequence
  
  # Check that the engine has already had analyze mode started:
  if { ! $analysisEngine(analyzeMode) } { return }
  
  after cancel ::reviewgame::updateProgressBar
  $::reviewgame::window.finfo.pb configure -value 0
  
  incr ::reviewgame::sequence
  set pv [lindex $::analysis(multiPV$::reviewgame::engineSlot) 0]
  set analysisEngine(score,$sequence) [lindex $pv 1]
  set analysisEngine(moves,$sequence) [lindex $pv 2]
  
  puts "résultat analyse $sequence : $analysisEngine(score,$sequence) $analysisEngine(moves,$sequence)"
  set analysisEngine(analyzeMode) 0
  ::reviewgame::sendToEngine  "stop"
  
  if {$move != ""} {
    sc_game pop
  }
}
################################################################################
#
################################################################################
proc ::reviewgame::proceed {} {
  # next cycle
  ::move::Forward
  ::reviewgame::resetValues
  set ::reviewgame::prevFen [sc_pos fen]
  after 1000 ::reviewgame::mainLoop
}
################################################################################
# Rethink on the position with extended time
################################################################################
proc ::reviewgame::extendedTime {} {
  
  # if already calculating, do nothing
  if { $::reviewgame::analysisEngine(analyzeMode)} {
    return
  }
  
  if { ![::reviewgame::isPlayerTurn] } {
    ::move::Back
  }
  
  set ::reviewgame::useExtendedTime 1
  set ::reviewgame::sequence 0
  ::reviewgame::mainLoop
  
}
################################################################################
#
################################################################################
proc ::reviewgame::updateProgressBar {} {
  $::reviewgame::window.finfo.pb step $::reviewgame::progressBarStep
  after $::reviewgame::progressBarTimer ::reviewgame::updateProgressBar
}
################################################################################
#
################################################################################
proc ::reviewgame::checkConsistency {} {
  if { $::reviewgame::boardFlipped != [::board::isFlipped .main.board] } {
    tk_messageBox -type ok -icon warning -title "Scid" -message "Choose the side BEFORE starting the exercise"
    return 0
  }
  return 1
}

################################################################################
#   returns 1 if the player is allowed to enter a move (pondering is done)
################################################################################
proc ::reviewgame::playerCanMove {} {
  if { ! [winfo exists $::reviewgame::window] } { return 1 }
  
  if { !  [::reviewgame::isPlayerTurn]  } {
    return 0
  } elseif { $::reviewgame::sequence == 2 } {
    return 1
  }
  
  puts "DEBUG : ::reviewgame::playerCanMove returned 0"
  return 0
}

###
### End of file: reviewgame.tcl
###
###
### metadata.tcl: part of Scid.
### Copyright (C) 2008 Alexander Wagner
###
### $Id: metadata.tcl,v 4.3 2011/02/13 18:12:02 arwagner Exp $
###
### Last change: <Fri, 2008/12/26 13:08:31 arwagner ingata>
###
### Read/Write/Show descriptive information for a specific database
###
#======================================================================

set m .menu.tools

# $m add command -label "Database information..." -command {::metadata::show}

#======================================================================
#
#======================================================================
namespace eval metadata {

	set metadatafilename        ""
	set DBMetadata              ""

	# preset the data hash with the usual Dublin Core values
	set datahash(dc:title)                ""
	set datahash(dc:description)          ""
	set datahash(dc:date)                 ""
	set datahash(dc:subject)              ""
	set datahash(dc:type)                 "Dataset"
	set datahash(dc:source)               ""
	set datahash(dc:coverage)             ""
	set datahash(dc:creator)              "Shanes Chess Information Database (Scid) $::scidVersion"
	set datahash(dc:rights)               ""
	set datahash(dc:format)               "application/sciddb"
	set datahash(dc:identifier)           ""
	set datahash(dc:language)             ""
	set datahash(dc:audience)             ""
	set datahash(dc:provenance)           ""
	set datahash(dc:rightsholder)         ""
	set datahash(dc:instructionalmethod)  ""
	set datahash(dc:accrualmethos)        ""
	set datahash(dc:accrualperiodicity)   ""
	set datahash(dc:accrualpolidy)        ""


	#----------------------------------------------------------------------
	# Store the metadata to a Scid config file.
	#----------------------------------------------------------------------
	proc saveOptions {metadatafile} {

		set optionF ""

		# Copy data back from the hash to the list
		set ::metadata::DBMetadata ""
		foreach key [array names ::metadata::datahash *] {
			lappend ::metadata::DBMetadata [list $key $::metadata::datahash($key)]
		}

		if {[catch {open $metadatafile w} optionF]} {
			tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
				-message "Unable to write options file: $metadatafile\n$optionF"
		} else {
			puts $optionF "# Scid options file"
			puts $optionF "# Version: $::scidVersion, $::scidVersionDate"
			puts $optionF "#"
			puts $optionF "# Descriptive Metadata"
			puts $optionF "# This file is generated automatically. Do NOT edit."

			set curtime [clock format [clock seconds]]
			puts $optionF "#"
			puts $optionF "# Last Update: $curtime"
			puts $optionF "#"

			foreach i {::metadata::DBMetadata } {
				puts $optionF "set $i [list [set $i]]"
			}
			close $optionF
		}

		# now write also a Dublin Core XML file
		regsub "sme$" $metadatafile "sg3" dbname
		regsub "sme$" $metadatafile "xml" metadatafile
		if {[catch {open $metadatafile w} optionF]} {
			tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
				-message "Unable to write options file: $metadatafile\n$optionF"
		} else {
			puts $optionF "<rdf:RDF"
			puts $optionF "   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""
			puts $optionF "   xmlns:dc=\"http://purl.org/dc/elements/1.1/\">"
			puts $optionF "   <rdf:Description rdf:about=\"$dbname\">"
			foreach key [array names ::metadata::datahash *] {
				puts $optionF "      <$key>$::metadata::datahash($key)</$key>"
			}
			puts $optionF "   </rdf:Description>"
			puts $optionF "</rdf:RDF>"
			close $optionF
		}
	}

	#----------------------------------------------------------------------
	# Show the current metadata from the sme file and allow to edit
	# them. If no metadata are found use sensible defaults.
	#----------------------------------------------------------------------
	proc show {} {

		if { [sc_base current] < 9 } {

			set w .metadataWindow
			if {[winfo exists .metadataWindow]} {
				focus .
				destroy .metadataWindow
				return
			}

			toplevel $w
			wm title $w "Database Information"
			# the window is not resizable
			### wm resizable $w 0 0

			set currentdb [sc_base current]
			set metadatafile [file nativename [sc_base filename $currentdb]]

			set metadatafile "$metadatafile.sme"
			puts $metadatafile

			# set sensible defaults
			set ::metadata::DBMetadata ""
			set ::metadata::datahash(dc:title)               [file tail [sc_base filename $currentdb]]
			set ::metadata::datahash(dc:description)          ""
			set ::metadata::datahash(dc:date)                 [clock format [clock seconds]] 
			set ::metadata::datahash(dc:subject)              ""
			set ::metadata::datahash(dc:type)                 "Dataset"
			set ::metadata::datahash(dc:source)               ""
			set ::metadata::datahash(dc:coverage)             ""
			set ::metadata::datahash(dc:creator)              "Shanes Chess Information Database (Scid) $::scidVersion"
			set ::metadata::datahash(dc:rights)               ""
			set ::metadata::datahash(dc:format)               "application/sciddb"
			set ::metadata::datahash(dc:identifier)           ""
			set ::metadata::datahash(dc:language)             ""
			set ::metadata::datahash(dc:audience)             ""
			set ::metadata::datahash(dc:provenance)           ""
			set ::metadata::datahash(dc:rightsholder)         ""
			set ::metadata::datahash(dc:instructionalmethod)  ""
			set ::metadata::datahash(dc:accrualmethos)        ""
			set ::metadata::datahash(dc:accrualperiodicity)   ""
			set ::metadata::datahash(dc:accrualpolidy)        ""

			# hook up with scids geometry manager
			setWinLocation $w
			setWinSize $w
			bind $w <Configure> "recordWinSize $w"

			set ::metadata::metadatafilename $metadatafile

			button $w.bOk     -text OK -command {
					::metadata::saveOptions $::metadata::metadatafilename
					destroy .metadataWindow
			}
			button $w.bCancel -text [::tr "Cancel"] -command "destroy $w"

			# enable the standard shortcuts
			standardShortcuts $w

			set textcolour "black"
			if {[catch {source $metadatafile} ]} {
				# copy default values if there is no set
				foreach key [array names ::metadata::datahash *] {
					lappend ::metadata::DBMetadata [list $key $::metadata::datahash($key)]
				}
				set textcolour "blue"
			}

			set line 0

			foreach i $metadata::DBMetadata {

				set tag [lindex $i 0]
				set val [lindex $i 1]

				label $w.$tag  -fg $textcolour -text $tag
				set ::metadata::datahash($tag) $val

				entry $w.v$tag -width 60 -textvariable "::metadata::datahash($tag)"

				grid $w.$tag  -stick w -column 0 -row $line
				grid $w.v$tag -stick w -column 1 -row $line

				set line [expr {$line + 1 }]
			}

			# Buttons and ESC-key
			grid $w.bOk      -stick e  -column 0 -row $line -pady 10
			grid $w.bCancel            -column 1 -row $line -pady 10
			bind $w <Escape> "$w.bCancel invoke"

			bind $w <F1> { helpWindow Metadata}
		}

	}

}


###
###    inputengine.tcl
###
###    This file adds input eninge protocol support to scid chess
###    database. It adds menue with subitems to the tools-menue and
###    additionally a button to enable the engine from within the GUI.
###    This module is selfcontained and can just be linked into the Scid
###    database upon built.
###
###    $Id: inputengine.tcl,v 4.3 2011/02/13 18:12:02 arwagner Exp $
###    Last change: <Mon, 2010/11/15 13:00:39 arwagner agamemnon>
###    Author     : Alexander Wagner
###    Language   : TCL
###
#----------------------------------------------------------------------

namespace eval ExtHardware {

  set engine     "dgtdrv2.i686";
  set port       "/dev/ttyUSB0"
  set param      "la"

  # the hardware configured by default:
  #  1 : Novag Citrine
  #  2 : Input Engine
  set hardware   1

  set bindbutton "::novag::connect"
  set showbutton 0

  #----------------------------------------------------------------------
  # Save the hardware options
  #----------------------------------------------------------------------
  proc saveHardwareOptions {} {
     set optionF ""
     if {[catch {open [scidConfigFile ExtHardware] w} optionF]} {
        tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
           -message "Unable to write options file: [scidConfigFile InputEngine]\n$optionF"
     } else {
        puts $optionF "# Scid options file"
        puts $optionF "# Version: $::scidVersion, $::scidVersionDate"
        puts $optionF "# This file contains commands in the Tcl language format."
        puts $optionF "# If you edit this file, you must preserve valid Tcl"
        puts $optionF "# format or it will not set your Scid options properly."
        puts $optionF ""

        foreach i { ::ExtHardware::engine     \
                    ::ExtHardware::port       \
                    ::ExtHardware::param      \
                    ::ExtHardware::hardware   \
                    ::ExtHardware::showbutton \
                    ::ExtHardware::bindbutton } {
           puts $optionF "set $i [list [set $i]]"
        }

     }
     close $optionF
     set ::statusBar "External hardware options were saved to: [scidConfigFile correspondence]"

     # Check if the hw connect button exists already. If not, add it.
     if { [winfo exists .main.fbutton.button.exthardware]} { 
        return 
     } else {
        if { $::ExtHardware::showbutton == 1 } {

           frame .main.fbutton.button.space4 -width 15
           button .main.fbutton.button.exthardware -image tb_eng_disconnected
           .main.fbutton.button.exthardware configure -relief flat -border 1 -highlightthickness 0 \
               -anchor n -takefocus 0
           bind .main.fbutton.button.exthardware <Any-Enter> "+.main.fbutton.button.exthardware configure -relief groove"
           bind .main.fbutton.button.exthardware <Any-Leave> "+.main.fbutton.button.exthardware configure -relief flat; statusBarRestore %W; break"
           pack .main.fbutton.button.space4 .main.fbutton.button.exthardware -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
           pack .main.fbutton.button.exthardware -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0

           .main.fbutton.button.exthardware configure -command $::ExtHardware::bindbutton
        }
     }

  }

  #----------------------------------------------------------------------
  # Set the hardware connect button image
  #----------------------------------------------------------------------
  proc HWbuttonImg {img} {

    if { $::ExtHardware::showbutton == 1 } {
      .main.fbutton.button.exthardware configure -image $img -relief flat
    }
  }

  #----------------------------------------------------------------------
  # Set the hardware connect button command binding
  #----------------------------------------------------------------------
  proc HWbuttonBind {cmd} {

    if { $::ExtHardware::showbutton == 1 } {
       set ::ExtHardware::bindbutton $cmd
    }
  }

  #----------------------------------------------------------------------
  # config:
  #    Opens the configuration dialog to input driver engines binary
  #    and parameters required to fire up the engine
  #----------------------------------------------------------------------
  proc config {} {
    global ::ExtHardware::port ::ExtHardware::engine ::ExtHardware::param ::ExtHardware::hardware

    ::ExtHardware::HWbuttonImg tb_eng_query

    set w .exthardwareConfig
    if { [winfo exists $w]} { return }
    toplevel $w
    wm title $w [::tr ExtHWConfigConnection]

    label $w.lport -text  [::tr ExtHWPort]
    entry $w.eport -width 50 -textvariable ::ExtHardware::port

    label $w.lengine -text [::tr ExtHWEngineCmd]
    entry $w.eengine -width 50 -textvariable ::ExtHardware::engine

    label $w.lparam -text  [::tr ExtHWEngineParam]
    entry $w.eparam -width 50 -textvariable ::ExtHardware::param

    label $w.options -text [::tr ExtHWHardware]
    
    checkbutton $w.showbutton -text [::tr ExtHWShowButton] -variable ::ExtHardware::showbutton

    #--------------
    # Add a new radio button for subsequent new hardware here:
    radiobutton $w.novag    -text [::tr ExtHWNovag]  -variable ::ExtHardware::hardware -value 1 -command { \
       set ::ExtHardware::bindbutton "::novag::connect"
       .exthardwareConfig.eengine configure -state disabled
       .exthardwareConfig.eparam  configure -state disabled
    }
    radiobutton $w.inputeng -text [::tr ExtHWInputEngine]   -variable ::ExtHardware::hardware -value 2 -command { \
       set ::ExtHardware::bindbutton "::inputengine::connectdisconnect"
       .exthardwareConfig.eengine configure -state normal
       .exthardwareConfig.eparam  configure -state normal
    }
    #--------------

    if { $::ExtHardware::hardware == 1 } {
       .exthardwareConfig.eengine configure -state disabled
       .exthardwareConfig.eparam  configure -state disabled
    }

    button $w.bOk -text OK -command { ::ExtHardware::saveHardwareOptions
       ::ExtHardware::HWbuttonBind $::ExtHardware::bindbutton
       destroy .exthardwareConfig
       $::ExtHardware::bindbutton
    }
    button $w.bCancel -text [::tr Cancel] -command "::ExtHardware::HWbuttonImg tb_eng_disconnected ; destroy $w"


    grid $w.options    -stick ew    -row 0 -column 0
    grid $w.novag      -stick w     -row 0 -column 1
    grid $w.inputeng   -stick w     -row 1 -column 1

    grid $w.lport      -stick ew    -row 2 -column 0 
    grid $w.eport                   -row 2 -column 1

    grid $w.lengine    -stick ew    -row 3 -column 0
    grid $w.eengine                 -row 3 -column 1

    grid $w.lparam     -stick ew    -row 4 -column 0 
    grid $w.eparam                  -row 4 -column 1

    grid $w.showbutton -stick w     -row 5 -column 1

    grid $w.bOk        -stick e     -row 6 -column 0 
    grid $w.bCancel    -stick w     -row 6 -column 1

    bind $w <F1> { helpWindow HardwareConfig}

  }

}
  #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  # source the options file to overwrite the above setup
  if {[catch {source [scidConfigFile ExtHardware]} ]} {
    #::splash::add "Unable to find the options file: [file tail $optionsFile]"
  } else {

     # Add the button to connect the engine to the button bar
     if { $::ExtHardware::showbutton == 1 } {

        frame .main.fbutton.button.space4 -width 15
        button .main.fbutton.button.exthardware -image tb_eng_disconnected
        .main.fbutton.button.exthardware configure -relief flat -border 1 -highlightthickness 0 \
            -anchor n -takefocus 0
        bind .main.fbutton.button.exthardware <Any-Enter> "+.main.fbutton.button.exthardware configure -relief groove"
        bind .main.fbutton.button.exthardware <Any-Leave> "+.main.fbutton.button.exthardware configure -relief flat; statusBarRestore %W; break"
        pack .main.fbutton.button.space4 .main.fbutton.button.exthardware -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0
        pack .main.fbutton.button.exthardware -side left -pady 1 -padx 0 -ipadx 0 -pady 0 -ipady 0

        .main.fbutton.button.exthardware configure -command $::ExtHardware::bindbutton
     }

    ::splash::add "External hardware configuration was found and loaded."
  }



#======================================================================

namespace eval inputengine {
  global ::ExtHardware::port ::ExtHardware::engine ::ExtHardware::param ::ExtHardware::hardware

  set engine     $::ExtHardware::engine
  set port       $::ExtHardware::port
  set param      $::ExtHardware::param

  set InputEngine(pipe)     ""
  set InputEngine(log)      ""
  set InputEngine(logCount) 0
  set InputEngine(init)     0
  set connectimg            tb_eng_ok
  set MovingPieceImg        $::board::letterToPiece(.)80
  set MoveText              "     "

  set NoClockTime           "--:--"
  set StoreClock            0

  set WhiteClock            $::inputengine::NoClockTime
  set BlackClock            $::inputengine::NoClockTime
  set oldWhiteClock         $::inputengine::NoClockTime
  set oldBlackClock         $::inputengine::NoClockTime
  set toMove                "White"

  font create moveFont -family Helvetica -size 56 -weight bold

  #----------------------------------------------------------------------
  # Generate the console window also used for status display
  #----------------------------------------------------------------------
  proc consoleWindow {} {

    set w .inputengineconsole
    if { [winfo exists $w]} { 
       ::inputengine::disconnect
       return
    }
    if {$::tcl_version >= 8.5} {
       ::createToplevel $w
      ::setTitle $w [::tr IEConsole]
    } else {
       toplevel $w
       wm title $w [::tr IEConsole]
    }

    recordWinSize $w

    scrollbar $w.ysc     -command { .inputengineconsole.console yview }
    text      $w.console -height 5  -width 80 -wrap word -yscrollcommand "$w.ysc set"

    label     $w.lmode   -text [::tr IESending]

    ::board::new $w.bd 25
     $w.bd configure -relief solid -borderwidth 1

    label     $w.engine      -text "$::ExtHardware::engine $::ExtHardware::port $::ExtHardware::param"

    radiobutton $w.sendboth  -text [::tr Both]  -variable send -value 1 -command { ::inputengine::sendToEngine sendboth  }
    radiobutton $w.sendwhite -text [::tr White] -variable send -value 2 -command { ::inputengine::sendToEngine sendwhite }
    radiobutton $w.sendblack -text [::tr Black] -variable send -value 3 -command { ::inputengine::sendToEngine sendblack }

    button $w.bInfo          -text Info           -command { ::inputengine::sysinfo }

    ###---### rotate does not work yet
    button $w.bRotate        -text [::tr IERotate]      -command { ::inputengine::rotateboard }

    button $w.bSync          -text [::tr IESynchronise] -command { ::inputengine::synchronise }
    button $w.bClose         -text [::tr Close]         -command { ::inputengine::connectdisconnect }

    # Buttons for visual move announcement
    button $w.bPiece -image $inputengine::MovingPieceImg
    button $w.bMove  -font moveFont -text  $inputengine::MoveText
    $w.bPiece configure -relief flat -border 0 -highlightthickness 0 -takefocus 0
    $w.bMove  configure -relief flat -border 0 -highlightthickness 0 -takefocus 0

    # Buttons for clock display
    button $w.wClock -text  $inputengine::WhiteClock
    button $w.bClock -text  $inputengine::BlackClock
    $w.wClock configure -relief flat -border 0 -highlightthickness 0 -takefocus 0
    $w.bClock configure -relief flat -border 0 -highlightthickness 0 -takefocus 0


    # Store the time as comment
    checkbutton $w.bStoreClock -text "Store Clock" -variable ::inputengine::StoreClock

    grid $w.console    -stick ns    -column 0  -row 0 -columnspan 12
    grid $w.ysc        -stick ns    -column 12 -row 0

    grid $w.engine     -stick ewns   -column 0  -row 1 -columnspan 9

    grid $w.lmode      -stick ew    -column 0  -row 2
    grid $w.sendboth   -stick e     -column 2  -row 2 
    grid $w.sendwhite               -column 4  -row 2 
    grid $w.sendblack  -stick w     -column 6  -row 2 

    grid $w.bInfo      -stick ew    -column 0  -row 3
    ###---### grid $w.bRotate   -stick ew    -column 0  -row 4
    grid $w.bSync      -stick ew    -column 0  -row 5
    grid $w.bStoreClock -stick ew   -column 0  -row 6
    grid $w.bClose     -stick ew    -column 0  -row 11

    grid $w.bPiece     -stick nwes  -column 2  -row 3 -rowspan 9 -columnspan 3
    grid $w.bMove      -stick nwes  -column 5  -row 3 -rowspan 9 -columnspan 3

    grid $w.wClock     -stick nwes  -column 9 -row 11 -columnspan 7
    grid $w.bClock     -stick nwes  -column 9 -row 1  -columnspan 7

    grid $w.bd         -stick nw    -column 9  -row 2 -rowspan 9 -columnspan 7

    bind $w <Destroy> { catch ::inputengine::connectdisconnect }
    bind $w <F1> { helpWindow InputEngine}

    ::createToplevelFinalize $w
  }

  proc updateConsole {line} {
    set t .inputengineconsole.console
    $t insert end "$line\n"
    $t yview moveto 1
  }

  #----------------------------------------------------------------------
  # connectdisconnect()
  #   Connects or disconnects depending on the current status of the
  #   external input engine
  #----------------------------------------------------------------------
  proc connectdisconnect {} {
    global  ::inputengine::InputEngine

    set connection $::inputengine::InputEngine(pipe)

    if {$connection == ""} {
      consoleWindow
      ::inputengine::connect
    } else {
      ::inputengine::disconnect
    }
  }

  #----------------------------------------------------------------------
  # connect():
  #     Fire upt the input engine and connect it to a local pipe.
  #     Also register the eventhandler
  #----------------------------------------------------------------------
  proc connect {} {
    global ::inputengine::InputEngine ::inputengine::engine \
        ::inputengine::port ::inputengine::param

	 set ::inputengine::engine     $::ExtHardware::engine
	 set ::inputengine::port       $::ExtHardware::port
	 set ::inputengine::param      $::ExtHardware::param

    ::ExtHardware::HWbuttonImg tb_eng_connecting

    if {[catch {set InputEngine(pipe) [open "| $engine $port $param" "r+"]} result]} {
      ::ExtHardware::HWbuttonImg tb_eng_error
      tk_messageBox -title "Scid: Input Engine" -icon warning -type ok \
          -message "[::tr IEUnableToStart]\n$engine $port $param"
      ::inputengine::resetEngine
      return
    }

    ::inputengine::Init
  }

  #----------------------------------------------------------------------
  # disconneet()
  #    Disconnect and close the input engine
  #----------------------------------------------------------------------
  proc disconnect {} {
    global ::inputengine::InputEngine
    set pipe $::inputengine::InputEngine(pipe)

    set ::inputengine::connectimg tb_eng_connecting 

    ::inputengine::sendToEngine "stop"
    ::inputengine::sendToEngine "quit"
    set ::inputengine::connectimg tb_eng_disconnected

    if { [winfo exists ::inputengine::.inputengineconsole]} { 
       destroy ::inputengine::.inputengineconsole
    }
  }

  #----------------------------------------------------------------------
  # logEngine
  #    Simple log routine, ie. writing to stdout
  #----------------------------------------------------------------------
  proc logEngine {msg} {
      updateConsole "$msg"
  }

  #----------------------------------------------------------------------
  # sendToEngine()
  #    Send a string to the engine and log it by means of logEngine
  #----------------------------------------------------------------------
  proc sendToEngine {msg} {
    global ::inputengine::InputEngine
    set pipe $::inputengine::InputEngine(pipe)

    ::inputengine::logEngine "> $msg"
    puts $pipe $msg
    flush $pipe
  }

  #----------------------------------------------------------------------
  # init()
  #    Initialises the engine and internal data
  #----------------------------------------------------------------------
  proc Init {} {
    global ::inputengine::InputEngine
    set pipe $::inputengine::InputEngine(pipe)

    # Configure the pipe and intitiate the engine
    set pipe $::inputengine::InputEngine(pipe)
    fconfigure $pipe -buffering full -blocking 0
    # register the eventhandler
    fileevent  $pipe readable "::inputengine::readFromEngine"

    ::inputengine::newgame
  }

  #----------------------------------------------------------------------
  # resetEngine()
  #    Resets the engines global variables
  #----------------------------------------------------------------------
  proc resetEngine {} {
    global ::inputengine::InputEngine

    ::ExtHardware::HWbuttonImg tb_eng_disconnected
    destroy .inputengineconsole
    set ::inputengine::InputEngine(pipe)     ""
    set ::inputengine::InputEngine(log)      ""
    set ::inputengine::InputEngine(logCount) 0
    set ::inputengine::InputEngine(init)     0
  }


  #----------------------------------------------------------------------
  # sysinfo()
  #    Initialises the engine and internal data
  #----------------------------------------------------------------------
  proc sysinfo {} {
    global ::inputengine::InputEngine
    set pipe $::inputengine::InputEngine(pipe)

    # call system information
    ::inputengine::sendToEngine "sysinfo"
  }

  #----------------------------------------------------------------------
  # rotateboard()
  #    Rotates the board, ie. exchanges a1 and h8
  #----------------------------------------------------------------------
  proc rotateboard {} {
    global ::inputengine::InputEngine
    set pipe $::inputengine::InputEngine(pipe)

    # rotate the graphical boards
    ::board::flip .main.board
    ::board::flip .inputengineconsole.bd

    ::inputengine::newgame
    # rotate the board for the input engine
    ::inputengine::sendToEngine "rotateboard"
    ::inputengine::synchronise
  }

  #----------------------------------------------------------------------
  # newgame()
  #    Handle NewGame event from board
  #----------------------------------------------------------------------
  proc newgame {} {

    # Ask the user to save the current game
    ::game::Clear
    sc_game tags set -event "InputEngine Input"
    sc_game tags set -date [::utils::date::today]
  }

  #----------------------------------------------------------------------
  # endgame()
  #    Handle game ending (end game event + result)
  #----------------------------------------------------------------------
  proc endgame {result} {

    set filternum [sc_filter first]

    logEngine "  info End Game $filternum: $result"

    sc_game tags set -result $result
    gameAdd
  }

  #----------------------------------------------------------------------
  # synchronise()
  #    read board position and set scid's representation accordingly
  #----------------------------------------------------------------------
  proc synchronise {} {
    global ::inputengine::InputEngine

    logEngine "  info Sync called"
    set InputEngine(init) 0

    ::inputengine::sendToEngine "getposition"
    ::inputengine::sendToEngine "getclock"
  }

  proc strreverse {str} {
     set res {}
     set i [string length $str]
     while {$i > 0} {append res [string index $str [incr i -1]]}
     set res
  }

  #----------------------------------------------------------------------
  # readFromEngine()
  #     Event Handler for commands and moves sent from the input
  #     engine, implements input engine protocol
  #----------------------------------------------------------------------
  proc readFromEngine {} {
    global ::inputengine::InputEngine ::inputengine::connectimg
    set pipe $::inputengine::InputEngine(pipe)

    set line     [string trim [gets $pipe] ]

    # Close the pipe in case the engine was stoped
    if [eof $pipe] {
      catch {close $pipe}
      ::inputengine::resetEngine
      return
    }

    switch -regexp -- $line \
        "^move *" {
          set m [string range $line 5 end]

          set s1 [string range $m 0 1]
          set s2 [string range $m 2 end]
          if {$s1 == "0-"} {
            # casteling must not be rewritten
            set m "$s1$s2"
          } else {
            set m "$s1-$s2"
          }

          logEngine "$line"

          if {[catch {sc_move addSan $m}]} {
             ::utils::sound::PlaySound "sound_alert"
             logEngine "  info Illegal move detected!"
             logEngine "  info Ignoring: $m"
             .inputengineconsole.bPiece configure -background red
             .inputengineconsole.bMove  configure -background red -text $m
          } else {

            .inputengineconsole.bPiece configure -background green
            .inputengineconsole.bMove  configure -background green -text $m

             updateBoard -animate
             updateBoard -pgn
             ::inputengine::sendToEngine "getposition"
             ::inputengine::sendToEngine "getclock"
          }
        } \
        "info *" {
          logEngine "< $line"
          set event [string range $line 5 end]
          switch -regexp -- $event \
          "string ERROR *" {
            set err [string range $event 7 end]
            tk_messageBox -title "Scid: Input Engine" \
            -icon warning -type ok -message "Engine $err"
            catch {close $pipe}
            ::ExtHardware::HWbuttonImg tb_eng_error
            return
          } \
          "string Chessboard found and initialised*" {
            # switch to xboard mode and disable move
            # announcments by the driver engine
            ::inputengine::sendToEngine "xboard"
            ::inputengine::sendToEngine "announce"
          } \
          "Engine mode    : xboard*" {
            ::inputengine::sendToEngine "getposition"
            ::ExtHardware::HWbuttonImg $inputengine::connectimg
          } \
          "string FEN *" {
            set InputEngine(init) 0
            # The first FEN string is always sent as
            # info string FEN ...
            # as this is compatible with both UCI and xboard.
            # At this stage the engine is not set to xboard mode
            # yet, so this signals a new program startup
            # accordingly.
          } \
          "FEN *" {
            set fenstr [string range $event 4 end]
            set fenstr [string trim $fenstr]
            if { $::inputengine::InputEngine(init) == 0 }  {
              # Initialise scids representation with the FEN
              # delivered by the external board.
              catch {sc_game startBoard $fenstr}
              updateBoard -pgn
              set InputEngine(init) 1
            } else {
              # Compare the internal representation to the
              # board each time a FEN string arrives from the
              # driver.
              #
              # Do not check the whole FEN, as the external
              # board can not know anything about e.p. or O-O
              # capabilities. Strip them off and compare just
              # the piece settings.
              set space [string first " " $fenstr]
              set fen [string range $fenstr 0 $space]

              set space [string first " " [sc_pos fen]]
              set int [string range [sc_pos fen] 0 $space]

              if {$fen != $int} {
                ::utils::sound::PlaySound "sound_alert"
                logEngine "  info Wrong Position! $int (scid) != $fen (external)"
              } else {
                logEngine "  info Board and internal position match."
              }
              # Generate a board position out of the FEN
              # RNBQKBNRPPPP.PPP............P................n..pppppppprnbqkb.r w
              # Something is in reverse here:
              ###---### set extpos $fen
              ###---### regsub -all {8} $extpos "........" extpos
              ###---### regsub -all {7} $extpos "......." extpos
              ###---### regsub -all {6} $extpos "......" extpos
              ###---### regsub -all {5} $extpos "....." extpos
              ###---### regsub -all {4} $extpos "...." extpos
              ###---### regsub -all {3} $extpos "..." extpos
              ###---### regsub -all {2} $extpos ".." extpos
              ###---### regsub -all {1} $extpos "." extpos
              ###---### regsub -all {/} $extpos "" extpos
              ###---### puts stderr [sc_pos board]
              ###---### puts stderr [strreverse "$extpos"]
              ###---### set extpos "$extpos w"
              ###---### ::board::update .inputengineconsole.bd "$extpos w"
            }
          } \
          {moving piece: [A-Z] *} {
            .inputengineconsole.bPiece configure -image $::board::letterToPiece([string range $event 14 end])80
          }\
          {moving piece: [a-z] *} {
            .inputengineconsole.bPiece configure -image $::board::letterToPiece([string range $event 14 end])80
          }\
          "!new game!" {
            ::inputengine::newgame
            .inputengineconsole.bPiece configure -background blue
            .inputengineconsole.bMove  configure -background blue -text "OK"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(K)80
          } \
          "!move now!" {
            logEngine "< info $event"
          } \
          "!end game 1-0!" {
            logEngine "< info $event"
            ::inputengine::endgame "1-0"
            .inputengineconsole.bPiece configure -background white
            .inputengineconsole.bMove  configure -background white -text "1-0"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(K)80
          } \
          "!end game 0-1!" {
            logEngine "< info $event"
            ::inputengine::endgame "0-1"
            .inputengineconsole.bPiece configure -background gray
            .inputengineconsole.bMove  configure -background gray -text "0-1"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(k)80
          } \
          "!end game 1/2-1/2!" {
            logEngine "< info $event"
            ::inputengine::endgame "1/2-1/2"
            .inputengineconsole.bPiece configure -background black
            .inputengineconsole.bMove  configure -background white -text "1/2-1/2"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(.)80
          } \
          "!enter setup mode!" {
            .inputengineconsole.bPiece configure -background yellow
            .inputengineconsole.bMove  configure -background yellow -text "Setup"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(K)80
            logEngine "< info $event"
          } \
          "!end setup mode!" {
            logEngine "< info $event"
            ::inputengine::synchronise
            .inputengineconsole.bPiece configure -background yellow
            .inputengineconsole.bMove  configure -background yellow -text "OK"
            .inputengineconsole.bPiece configure -image $::board::letterToPiece(q)80
          } \
          "!white to move!" {
            set ::inputengine::toMove "White"
            .inputengineconsole.wClock configure -background white
            .inputengineconsole.bClock configure -background gray -foreground black

            if {$::inputengine::StoreClock == 1} {
               if { ($::inputengine::oldWhiteClock != $::inputengine::NoClockTime) && \
                    ($::inputengine::WhiteClock    != $::inputengine::NoClockTime) } {
                  set wHrs [expr $::inputengine::WhiteClock / 60 / 60]
                  set wMin [expr ($::inputengine::WhiteClock - $wHrs*60*60) / 60 ]
                  set wSec [expr ($::inputengine::WhiteClock - $wHrs*60*60 - $wMin * 60) ]
                  set timediff [expr $::inputengine::oldWhiteClock - $::inputengine::WhiteClock]
                  set ::inputengine::oldWhiteClock $::inputengine::WhiteClock
                  sc_pos setComment "\[%ct $wHrs:$wMin:$wSec\] \[%emt $timediff\]"
               }
            }
          } \
          "!black to move!" {
            set ::inputengine::toMove "Black"
            .inputengineconsole.wClock configure -background gray
            .inputengineconsole.bClock configure -background black -foreground white

            if {$::inputengine::StoreClock == 1} {
               if { ($::inputengine::oldBlackClock != $::inputengine::NoClockTime) && \
                    ($::inputengine::BlackClock    != $::inputengine::NoClockTime) } {
                  set bHrs [expr $::inputengine::BlackClock / 60 / 60]
                  set bMin [expr ($::inputengine::BlackClock - $bHrs*60*60) / 60 ]
                  set bSec [expr ($::inputengine::BlackClock - $bHrs*60*60 - $bMin * 60) ]
                  set timediff [expr $::inputengine::oldBlackClock - $::inputengine::BlackClock]
                  set ::inputengine::oldBlackClock $::inputengine::BlackClock
                  sc_pos setComment "\[%ct $bHrs:$bMin:$bSec\] \[%emt $timediff\]"
               }
            }
          } \
          "No Clock detected" {
             set ::inputengine::WhiteClock $::inputengine::NoClockTime
             set ::inputengine::BlackClock $::inputengine::NoClockTime
             .inputengineconsole.wClock configure -text $::inputengine::WhiteClock
             .inputengineconsole.bClock configure -text $::inputengine::BlackClock
          } \
          "Time White:" {
            if { ($::inputengine::oldWhiteClock == $::inputengine::NoClockTime) } {
               set ::inputengine::oldWhiteClock $::inputengine::WhiteClock
            }
            # Get the time in seconds
            regsub -all {[A-Za-z:# ]} $event "" ::inputengine::WhiteClock

            # calculate a sensible format
            set wHrs [expr $::inputengine::WhiteClock / 60 / 60]
            set wMin [expr ($::inputengine::WhiteClock - $wHrs*60*60) / 60 ]
            set wSec [expr ($::inputengine::WhiteClock - $wHrs*60*60 - $wMin * 60) ]

            if {$wHrs > 0} {
               .inputengineconsole.wClock configure -text "$wHrs:$wMin:$wSec (EXT)"
            } else {
               .inputengineconsole.wClock configure -text "$wMin:$wSec (EXT)"
            }

            ###---### Is this enough to set game clocks for all possible occurences?
            catch { ::gameclock::setSec 1 [expr -1*$::inputengine::WhiteClock] }
          } \
          "Time Black:" {
            if { ($::inputengine::oldBlackClock == $::inputengine::NoClockTime) } {
               set ::inputengine::oldBlackClock $::inputengine::BlackClock
            }
            regsub -all {[A-Za-z:# ]} $event "" ::inputengine::BlackClock

            set bHrs [expr $::inputengine::BlackClock / 60 / 60]
            set bMin [expr ($::inputengine::BlackClock - $bHrs*60*60) / 60 ]
            set bSec [expr ($::inputengine::BlackClock - $bHrs*60*60 - $bMin * 60) ]

            if {$bHrs > 0} {
               .inputengineconsole.bClock configure -text "$bHrs:$bMin:$bSec (EXT)"
            } else {
               .inputengineconsole.bClock configure -text "$bMin:$bSec (EXT)"
            }

            ###---### Is this enough to set game clocks for all possible occurences?
            catch { ::gameclock::setSec 2 [expr -1*$::inputengine::BlackClock] }
          } \
          "Wrong move performed:" {
             # This event can only be used if there is a possiblity to
             # send the last move to the input engine for it ot cross
             # check. This however is not easy in Scid, therefore
             # compare FEN.
             #
             # ::utils::sound::PlaySound "sound_alert"
             # logEngine "< info $event"
          } \
          "DGT Projects - This DGT board" {
            set ::inputengine::connectimg tb_eng_dgt
            set txt [string range $event 7 end]
            ## ::utils::tooltip::Set .button.exthardware "$::inputengine::port:\n$txt"
          } \
        } \
        default  {
          logEngine "< $line"
        }
        # Should better show current wooden board position? Return value of 
        # sc_pos board is
        # RNBQKBNRPPPP.PPP............P................n..pppppppprnbqkb.r w
        ::board::update .inputengineconsole.bd [sc_pos board]
  }



}


###
### End of file: inputengine.tcl
###
###
### novag.tcl: part of Scid.
### Copyright (C) 2007  Pascal Georges
###
######################################################################
### add NOVAG board support

namespace eval novag {
  set fd ""
  set connected 0
  set waitBetweenMessages 0
  
  ##########################################################
  proc connect {} {
    global ::novag::fd
    
    set serial $::ExtHardware::port
    
    set w .novag
    ::createToplevel $w
    ::setTitle $w "Novag Citrine"
    pack [ttk::panedwindow $w.f -orient vertical] -expand 1 -fill both
    
    ttk::frame $w.f.top
    ttk::frame $w.f.bottom
    $w.f add $w.f.top -weight 1
    $w.f add $w.f.bottom -weight 1
    
    ttk::scrollbar $w.f.top.ysc -command { .novag.f.top.output yview }
    text $w.f.top.output -width 20 -height 20  -wrap word  -yscrollcommand ".novag.f.top.ysc set"
    pack $w.f.top.ysc -side left -fill y -side right
    pack .novag.f.top.output -side left -fill both -expand 1 -side right
    
    entry $w.f.bottom.input -width 20
    ttk::button $w.f.bottom.send -text Send -command {
      ::novag::send [.novag.f.bottom.input get]
      .novag.f.bottom.input delete 0 end
    }
    bind $w.f.bottom.input <Return> " $w.f.bottom.send invoke "
    bind $w <Destroy> { catch ::novag::disconnect }
    bind $w <F1> { helpWindow Novag}
    ::createToplevelFinalize $w
    
    ttk::checkbutton $w.f.bottom.cbref -text [tr "NovagReferee" ] -variable ::novag::referee -offvalue "OFF" -onvalue "ON" -command { ::novag::send  "U $::novag::referee" }
    
    pack $w.f.top.output -fill both -expand 1
    pack $w.f.bottom.input $w.f.bottom.send  $w.f.bottom.cbref -side left
    update
    
    # Set button to "connection in progress"
    ::ExtHardware::HWbuttonImg tb_eng_connecting
    
    if {[catch { set fd [open $serial r+ ] } err]} {
        tk_messageBox -type ok -icon error -parent . -title "Novag Citrine" -message "Connection error for $serial \n $err"
        destroy $w
        return
    }
    
    # 57600 bauds, no parity, 8 bits, 1 stop
    fconfigure $fd -mode 57600,n,8,1 -blocking 0 -buffering line
    fileevent $fd readable ::novag::recv
    # human / human mode
    # get info
    ::novag::send "I"
    wait 200
    # new game
    ::novag::send "N"
    wait 200
    ::novag::send "X ON"
    wait 200
    ::novag::send "U ON"
    set ::novag::connected 1
    
    # Set button to "connected, ready to use"
    ::ExtHardware::HWbuttonImg tb_eng_ok
  }
  ##########################################################
  proc disconnect {} {
    global ::novag::fd
    close $fd
    set ::novag::connected 0
  }
  
  ##########################################################
  proc addMove {san} {
    # if promotion add "/"
    if {[string length $san] == 5} {
      set san "[string range $san 0 3]/[string range $san 4 end]"
    }
    
    ::novag::send "M $san"
    if { [ string first "x" [sc_game info previousMove] ] != -1 } {
      wait 3000
    } else {
      wait 200
    }
    # ::novag::send "T"
    ::novag::send "M $san"
  }
  ##########################################################
  proc send {msg} {
    global ::novag::fd
    puts "sending $msg"
    puts $fd "$msg\n\r"
  }
  ##########################################################
  proc recv {} {
    global ::novag::fd
    
    set output .novag.f.top.output
    
    set l [gets $fd]
    if { $l == "" } { return }
    puts "received $l"
    $output insert end "$l\n"
    $output yview moveto 1
    
    if {[string match -nocase "New Game*" $l]} {
      sc_game new
      updateBoard -pgn
      ::novag::send "U $::novag::referee"
      return
    }
    
    if {[lindex $l 0] == "M"} {
      
      if {[sc_pos side] == "white" && [string index [lindex $l 1] end ] == ","} {  return }
      if {[sc_pos side] == "black" && [string index [lindex $l 1] end ] != ","} {  return }
      
      set m [lindex $l 2]
      set m [regsub -- "-" $m ""]
      set m [regsub -- "/" $m ""]
      if { [ catch { sc_move addSan $m } err ] } {
        puts $err
      } else {
        if {[winfo exists .fics]} {
          if { $::fics::playing == 1} {
            ::fics::writechan [ sc_game info previousMoveNT ]
          }
        }
      }
      updateBoard -pgn
      return
    }
    
    if {[lindex $l 0] == "T"} {
      sc_move back
      updateBoard -pgn
      return
    }
    
  }
  ##########################################################
  proc wait {ms} {
    after $ms {set ::novag::waitBetweenMessages 1}
    vwait ::novag::waitBetweenMessages
  }
}

###
### End of file: novag.tcl
###
###
### bibliography.tcl: part of Scid.
### Copyright (C) 2010 Alexander Wagner
###
### $Id: bibliography.tcl,v 4.3 2011/02/13 18:12:02 arwagner Exp $
###
### Last change: <Tue, 2010/07/13 23:08:01 arwagner ingata>
###
### Handle Bib pgn headers to show bibliographic references for a
### given game. The bibliographic database should be available in
### BibTeX format. The ref header should be of the form:
###
### [Bib "<bibtexkey>, <additional info> ; <bibtexkey>, <additional info>]
###
### E.g.
###     [Bib "Botvinnik:1960, No. 27 p.57"]
###
### Refering to the BibTeX record:
###
###     @BOOK{Botvinnik:1960,
###       title = {{O}ne hundred selected games},
###       publisher = {Dover Pub.},
###       year = {1960},
###       author = {Botvinnik, M. M.},
###       pages = {272},
###       address = {New York},
###       keywords = {Game Collection},
###       refid = {1106902}
###     }

###
#======================================================================

set m .menu.tools

# $m add command -label "Database information..." -command {::metadata::show}

#======================================================================
#
#======================================================================
namespace eval Bibliography {

	set literature ""

	#----------------------------------------------------------------------
	# Take a ref structure and turn it into a simplified version of
	# ISBD reference output
	#----------------------------------------------------------------------
	proc Ref2ISBD { Ref Biblio} {

		set w .showRef

		set key [lindex $Ref 0]
		set type ""
		set address   ""; set author    ""; set editor    ""; set number    "";
		set isbn      ""; set issn      ""; set issue     ""; set pages     "";
		set publisher ""; set title     ""; set volume    ""; set year      "";
		set edition   ""; set keywords  "";

		foreach tag { type address author editor number isbn issn issue pages publisher title volume year edition keywords } {
			set $tag [lindex [lindex $Ref [lsearch -exact -index 0 $Ref $tag]] 1]
		}
		regsub -all -nocase { and }    $author "; " author
		set isbd ""

		$w.f.tree insert {} end -id $key -text "$type: $author ($key)" -open true
		$w.f.tree insert $key end -id "l2$key" -text "$author" -tags {author}
		$w.f.tree insert $key end -id "l3$key" -text "$title"  -tags {title}
		$w.f.tree insert $key end -id "l4$key" -text "$Biblio" -tags {reference}
		if {$editor != ""} {
			$w.f.tree insert $key end -id "l5$key" -text "Ed. $editor"
		}
		if {$edition != ""} {
			$w.f.tree insert $key end -id "l6$key" -text  "$edition"
		}
		$w.f.tree insert $key end -id "l7$key" -text  "$address : $publisher, $year. - "
		if {$pages != ""} {
			$w.f.tree insert $key end -id "l8$key" -text  "$pages"
		}
		if {$isbn != ""} {
			$w.f.tree insert $key end -id "l9$key" -text  "$isbn"
		} elseif {$issn != ""} {
			$w.f.tree insert $key end -id "l9$key" -text  "$issn"
		}
		if {$keywords != ""} {
			$w.f.tree insert $key end -id "l0$key" -text  "$keywords"
		}

		### set isbd "\[$type\]\n"
		### set isbd "$author\n$title / $author.\n"
		### if {$editor != ""} {
		### 	set isbd "$isbd Ed. $editor\n"
		### }
		### set isbd "$isbd $edition\n"
		### set isbd "$isbd $address : $publisher, $year. - "
		### set isbd "$isbd $pages\n$isbn\n\n$keywords"

		# Simplified ISBD for book
		if {$type == "BOOK"} {
			set isbd "$author:\n$title / $author. Ed. $editor.\n- $edition -\n$address : $publisher, $year. - $pages\n$isbn\n\n$keywords\n"
		} elseif {$type == "PERIODICAL"} {
			# Simplified ISBD for journal
			set isbd "\[Journal\]\n$title / publ. $editor\n$address : $publisher, $year. - $pages\n$issn\n\n$keywords\n"
		} else {
			# use book format by default, should be improved
			set isbd "\[$type\]\n$author:\n$title / $author. Ed. $editor.\n - $edition - $address : $publisher, $year. - $pages\n$isbn ($issn)\n\n$keywords\n"
		}
		### set isbd "$isbd\n------------------------------------------------------------\n";

		return $isbd
	}

	#----------------------------------------------------------------------
	# Simple BibTeX reader. Does not handle all the funny things of
	# BibTeX like crossref etc. assumes all tags in a single line
	#----------------------------------------------------------------------
	proc ReadBibTeX { bibfile } {
		set fd [open $bibfile]

		set Bibentries {}

		set type ""
		set key  ""
		set address   ""; set author    ""; set editor    ""; set number    "";
		set isbn      ""; set issn      ""; set issue     ""; set pages     "";
		set publisher ""; set title     ""; set volume    ""; set year      "";
		set edition   ""; set keywords  "";

		while { [gets $fd line] >= 0} {
			if {[regexp -- "@" $line]} {
				# begin of dataset
				lappend Bibentries [list \
					"$key" \
					[list "type" $type] \
					[list "title" $title] \
					[list "editor" $editor] \
					[list "author" $author] \
					[list "publisher" $publisher] \
					[list "pages" $pages] \
					[list "address" $address] \
					[list "isbn" $isbn] \
					[list "issn" $issn] \
					[list "volume" $volume] \
					[list "issue" $issue] \
					[list "number" $number] \
					[list "edition" $edition] \
					[list "keywords" $keywords] \
					[list "year"  $year] ]

				regsub {\{.*} $line "" type
				regsub {\@} $type "" type
				## set type [string lower type]
				regsub {.*\{} $line "" key
				regsub {,}    $key  "" key

				set key [string trim $key]
				set type [string trim $type]

				set address   ""; set author    ""; set editor    ""; set number    "";
				set isbn      ""; set issn      ""; set issue     ""; set pages     "";
				set publisher ""; set title     ""; set volume    ""; set year      ""
				set edition   ""; set keywords  "";
			} else {
				regsub -all { "} $line {} line
				regsub -all {" } $line {} line
				regsub -all {,$} $line {} line
				regsub -all {[\{\}]} $line {} line

			}
			if {[regexp -- {[ \t]title[ \t=]} $line]} {
				regsub -all {title .*= } $line {} title
				set title [string trim $title]
			}
			if {[regexp -- {[ \t]author[ \t=]} $line]} { 
				regsub -all {author .*= } $line {} author
				set author [string trim $author]
			}
			if {[regexp -- {[ \t]editor[ \t=]} $line]} { 
				regsub -all {editor .*= } $line {} editor
				set editor [string trim $editor]
			}
			if {[regexp -- {[ \t]year[ \t=]} $line]} {
				regsub -all {year .*= } $line {} year
				set year [string trim $year]
			}
			if {[regexp -- {[ \t]publisher[ \t=]} $line]} {
				regsub -all {publisher .*= } $line {} publisher
				set publisher [string trim $publisher]
			}
			if {[regexp -- {[ \t]address[ \t=]} $line]} {
				regsub -all {address .*= } $line {} address
				set address [string trim $address]
			}
			if {[regexp -- {[ \t]isbn[ \t=]} $line]} {
				regsub -all {isbn.*= } $line {} isbn
				set isbn [string trim $isbn]
			}
			if {[regexp -- {[ \t]issn[ \t=]} $line]} {
				regsub -all {issn.*= } $line {} issn
				set issn [string trim $issn]
			}
			if {[regexp -- {[ \t]issue[ \t=]} $line]} {
				regsub -all {issue.*= } $line {} issue
				set issue [string trim $issue]
			}
			if {[regexp -- {[ \t]volume[ \t=]} $line]} {
				regsub -all {volume.*= } $line {} volume
				set volume [string trim $volume]
			}
			if {[regexp -- {[ \t]number[ \t=]} $line]} {
				regsub -all {number.*= } $line {} number
				set number [string trim $number]
			}
			if {[regexp -- {[ \t]edition[ \t=]} $line]} {
				regsub -all {edition.*= } $line {} edition
				set edition [string trim $edition]
			}
			if {[regexp -- {[ \t]keywords[ \t=]} $line]} {
				regsub -all {keywords.*= } $line {} keywords
				set keywords [string trim $keywords]
			}
		}
		close $fd
		return $Bibentries
	}

	#----------------------------------------------------------------------
	# Extract the Ref header from the current game. Uses bibfile as
	# input for bibliographic information, returns a block of ISBD
	# formatted entries
	#----------------------------------------------------------------------
	proc ExtractRef { bibfile } {

		set w .showRef

		set Extra  [sc_game tags get Extra]
		set extraTagsList [split $Extra "\n"]

		set literature ""

		foreach i $extraTagsList {
			if { [string equal -nocase [lindex $i 0] "Bib" ] } {
				set ref [string range $i 5 end-1]

				regsub -all { ; } $ref {|} ref

				# Tcl uses a list of split chars as second argument :(
				set ref [split $ref "|"]
				
				set BibEntries [::Bibliography::ReadBibTeX $bibfile]

				foreach r $ref {
					regsub -all {, .*} $r {} BibKey
					regsub -all {.*, } $r {} Biblio
					set BibKey [string trim $BibKey]
					set Biblio [string trim $Biblio]
					set idx [lsearch -exact -index 0 $BibEntries $BibKey]
					set BibDta [lindex $BibEntries $idx]

					set isbd [::Bibliography::Ref2ISBD $BibDta $Biblio]
					set literature "$literature\n$isbd\n$Biblio\n\n"
				}
			}
		}
		set lit [string trim $literature]
		return $lit
	}

	#----------------------------------------------------------------------
	# Open a window with an expanded tree widget containing all
	# referenced entities from the BibTeX file.
	#----------------------------------------------------------------------
	proc ShowRef {} {
		global scidDataDir

		set w .showRef

		if { [winfo exists $w] } {
			# recreate the widget with new data
			destroy $w
		}

		toplevel $w
		::setTitle $w "References"
		setWinLocation $w
		setWinSize $w

		ttk::frame $w.f
		pack $w.f -fill both -expand 1

		ttk::treeview  $w.f.tree -xscrollcommand "$w.f.xbar set" -yscrollcommand "$w.f.ybar set" -show tree -selectmode none
		ttk::scrollbar $w.f.xbar -command "$w.f.tree xview" -orient horizontal
		ttk::scrollbar $w.f.ybar -command "$w.f.tree yview" -orient vertical
		$w.f.tree column #0 -minwidth 1200

		$w.f.tree tag configure author -foreground blue
		$w.f.tree tag configure title -foreground blue
		$w.f.tree tag configure reference -foreground red

		pack $w.f.xbar -side bottom -fill x
		pack $w.f.ybar -side right  -fill y
		pack $w.f.tree -side left   -expand 1 -fill both

		# set a global bib file
		set bibfile [file nativename [file join $scidDataDir "Bookshelf.bib"]]
		# ... but overwrite it if a bibliography for the base itself exits
		if {[file readable "[sc_base filename].bib"]} {
			set bibfile "[sc_base filename].bib"
		}
		set ::Bibliography::literature [::Bibliography::ExtractRef $bibfile]

		bind $w <Escape> { destroy  .showRef}
		bind $w <Configure>  {
			recordWinSize .showRef
		}
		# Copy references to clipboard
		bind $w <Control-Insert> { clipboard clear; clipboard append $::Bibliography::literature }
		bind $w <Control-c>      { clipboard clear; clipboard append $::Bibliography::literature }
	}

}

###
### End of file: bibliography.tcl
###
