13       if {$unsavedCount == 0} {
    14         append msg $::tr(ExitUnsaved)
    18       set fname [
file tail [
sc_base filename $i]]
    20       append msg "   Base $i: $fname "
    21       append msg "($::tr(game) $g)"
    34   append msg $::tr(ExitDialog)
    37 if {$unsavedCount > 0} {
    38     set answer [
tk_messageBox -title "Scid: [
tr FileExit]" \
    39         -message $msg -type yesno -icon question]
    40     if {$answer != "yes"} { 
return}
    42   if {$::optionsAutoSave} {
    57     { "Scid databases" {".si4"} }
    58     { "PGN files" {".pgn" ".PGN"} }
    61   set fName [
tk_getSaveFile \
    62              -initialdir $::initialDir(base) \
    64              -defaultextension ".si4" \
    65              -title "Create a Scid database"]
    67   if {$fName == ""} { 
return}
    68   set file_extension [
string tolower [
file extension $fName]]
    69   if {$file_extension == ".si4"} {
    71     set dbName [
file rootname $fName]
    72   } 
elseif {$file_extension == ".pgn"} {
    76   if {[
catch {
sc_base create $dbType $dbName} baseId]} {
    81   set ::initialDir(base) [
file dirname $fName]
    92 proc ::file::Open {{fName ""}} {
    95     set ::curr_db $::file::lastOpened
    98     foreach {tagname tagvalue} [
sc_base extra $::curr_db] {
    99       if {$tagname eq "autoload" && $tagvalue != 0} {
   109 proc ::file::openBaseAsTree { { fName "" } } {
   118 proc ::file::Open_ {{fName ""} } {
   121         { "All Scid files" {".si4" ".si3" ".pgn" ".epd"} }
   122         { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN"} }
   123         { "Scid databases" {".si4" ".si3"} }
   124         { "PGN files" {".pgn" ".PGN"} }
   125         { "EPD files" {".epd" ".EPD"} }
   128     set fName [
tk_getOpenFile -initialdir $::initialDir(base) -filetypes $ftype -title "Open a Scid file"]
   129     if {$fName == ""} { 
return 2}
   132   set ext [
string tolower [
file extension "$fName"]]
   133   if {"$ext" == ".si4"} { 
set fName [
file rootname "$fName"]}
   134   if {[
sc_base slot $fName] != 0} {
   135     tk_messageBox -title "Scid: opening file" -message "The database you selected is already opened."
   140   if {"$ext" == ".si3"} {
   142   } 
elseif {"$ext" == ".pgn"} {
   144 progressWindow "Scid" "$::tr(OpeningTheDatabase): $fName..." $::tr(Cancel)
   145     set err [
catch {
sc_base open PGN "$fName"} ::file::lastOpened]
   150       sc_base extra $::file::lastOpened type 3
   151       set ::initialDir(base) [
file dirname "$fName"]
   154   } 
elseif {"$ext" == ".epd"} {
   156 set err [
catch {
sc_base create MEMORY "$fName"} ::file::lastOpened]
   161       sc_base extra $::file::lastOpened type 3
   162       set ::initialDir(base) [
file dirname "$fName"]
   165   } 
elseif {"$ext" eq ".si4" || "$ext" eq ""} {
   166     progressWindow "Scid" "$::tr(OpeningTheDatabase): [
file tail "$fName"]..." $::tr(Cancel)
   167     set err [
catch {
sc_base open "$fName"} ::file::lastOpened]
   170       if { $::errorCode == $::ERROR::NameDataLoss } { 
set err 0}
   173       set ::initialDir(base) [
file dirname "$fName"]
   177     tk_messageBox -title "Scid: opening file" -message "Unsupported database format:  $ext"
   188 proc ::file::Upgrade {name} {
   189   if {[
file readable "$name.si4"]} {
   190     set msg [
string trim $::tr(ConfirmOpenNew)]
   191     set res [
tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
   192     if {$res == "no"} { 
return}
   196   set msg [
string trim $::tr(ConfirmUpgrade)]
   197   set res [
tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
   198   if {$res == "no"} { 
return}
   201     file copy "$name.sg3"  "$name.sg4"
   202     file copy "$name.sn3"  "$name.sn4"
   203     file copy "$name.si3"  "$name.si4"}]
   209   progressWindow "Scid" "$::tr(Opening): [
file tail $name]..." $::tr(Cancel)
   210   set err [
catch {
sc_base open $name} ::file::lastOpened]
   212   if {$::errorCode == $::ERROR::NameDataLoss} {
   219       file delete "$name.sg4"
   220       file delete "$name.sn4"
   221       file delete "$name.si4"}
   223     progressWindow "Scid" [
concat $::tr(CompactDatabase) "..."] $::tr(Cancel)
   224     set err_compact [
catch {
sc_base compact $::file::lastOpened}]
   234 proc ::file::Close {{base -1}} {
   237   if {$base < 0} { 
set base $current}
   238   if {![
sc_base inUse $base]} { 
return}
   247 if {[
winfo exists .treeWin$base]} { 
destroy .treeWin$base}
   252 if { $current == $base } { 
set current 9}
   254   if {[
catch {
sc_base close $base}]} {
   264 proc ::file::SwitchToBase {{b} {saveHistory 1}} {
   265   if {![
catch {
sc_base switch $b} res]} {
   268 if {[
winfo exists .emailWin]} { 
destroy .emailWin}
   275 proc ::file::autoLoadBases.load {} {
   276   if {![
info exists ::autoLoadBases]} { 
return}
   277   foreach base $::autoLoadBases {
   279       set idx [lsearch -exact $::autoLoadBases $base]
   280       if {$idx != -1} { 
set ::autoLoadBases [
lreplace $::autoLoadBases $idx $idx]}
   285 proc ::file::autoLoadBases.save { {channelId} } {
   286   if {![
info exists ::autoLoadBases]} { 
return}
   287   puts $channelId "set ::autoLoadBases [list $::autoLoadBases]"
   289 proc ::file::autoLoadBases.find { {baseIdx} } {
   290   if {![
info exists ::autoLoadBases]} { 
return -1}
   291   if {[ 
catch {
set base [
sc_base filename $baseIdx]}]} { 
return -1}
   292   return [lsearch -exact $::autoLoadBases $base]
   294 proc ::file::autoLoadBases.add { {baseIdx} } {
   295   if {[ 
catch {
set base [
sc_base filename $baseIdx]}]} { 
return}
   296   lappend ::autoLoadBases $base
   298 proc ::file::autoLoadBases.remove { {baseIdx} } {
   299   if {![
info exists ::autoLoadBases]} { 
return}
   300   if {[ 
catch {
set base [
sc_base filename $baseIdx]}]} { 
return}
   301   set idx [lsearch -exact $::autoLoadBases $base]
   303     set ::autoLoadBases [
lreplace $::autoLoadBases $idx $idx]