#******************************************************************************
#***
#*** This file is part of XTeXShell; see file xtexsh for details
#*** Version 0.91 (21.2.94)
#***
#******************************************************************************

#******************************************************************************
#*** Load Setup and Shortcuts file ********************************************
#******************************************************************************

set  setup0fname "$xtexsh_path/setup.orig"
set  setup1fname "$xtexsh_path/setup"
set  setup2fname "$home_dir/.xtexsh.setup"
set  setup3fname "./.xtexsh.setup"

set  short0fname "$xtexsh_path/shortcuts.orig"
set  short1fname "$xtexsh_path/shortcuts"
set  short2fname "$home_dir/.xtexsh.shortcuts"
set  short3fname "./.xtexsh.shortcuts"

proc loadsetup {} {

#*** Load setup file.

       uplevel 1 {
               if {[file exists "$setup1fname"]} {
                       source "$setup1fname"
               } else {
                       source "$setup0fname"
               }
               if {[file exists "$setup2fname"]} {source "$setup2fname"}
               if {[file exists "$setup3fname"]} {source "$setup3fname"}
       }
}


proc writesetup {mode} {

#*** Update setup file mode=0: local, mode=1: global
#***    local:  If setup-file doesn't exist, copy global, setup, setup.orig
#***    global: If setup-file doesn't exist, copy setup, setup.orig

       global wrtsmode boldl_font
       global goto_command

       set wrtsmode $mode

       DisplayMsg "Writing Configuration file.\n Press any key to continue..." $boldl_font

       uplevel 1 {
               if {$wrtsmode==0} {
                       set setupfname "$setup3fname"
               } else {
                       set setupfname "$setup2fname"
               }

#*** Does setup-file exist?  If not, copy setup or setup.orig

               if {![file exists "$setupfname"]} {
                       if {[file exists "$setup1fname"]} {
                               exec cp "$setup1fname" "$setupfname"
                       } else {
                               exec cp "$setup0fname" "$setupfname"
                       }
               }

#*** Generate list with variables to save in setup file

               set setuplist ""
               lvarpush setuplist "editor"
               lvarpush setuplist "editmode"
               lvarpush setuplist "editwrap"
               lvarpush setuplist "edittrans"
               lvarpush setuplist "editmode"

#*** Create a copy of the setup file and open files for read and write

               exec cp "$setupfname" "$setupfname.temp"
               set infile  [open $setupfname.temp "r"]
               set outfile [open $setupfname "w"]

#*** Read old setup file line by line and copy to new setup file
#*** if line does not contain any words of setuplist

               while {![eof $infile]} {
                       gets $infile inline
                       set flag 1
                       if {[string first "set" $inline] >= 0} {
                               foreach key $setuplist {
                                       if {[string first " $key " $inline] >= 0} {
                                               set flag 0
                                       }
                               }
                       }
                       if {$flag} {
                               puts $outfile $inline
                       }
               }

#*** Now write values of variables in setuplist to setup-file

               while {![lempty $setuplist]} {
                       set var [lvarpop setuplist]
                       eval set val \"\$$var\"
                       puts $outfile [format "set\t%-10s\t\"%s\"" $var $val]
               }

#*** Close files

               close $infile
               close $outfile
               unlink -nocomplain "$setupfname.temp"
       }

       eval $goto_command
       set  goto_command ""
}


proc loadshortcuts {} {

#*** Load shortcuts file

       uplevel 1 {
               if {[file exists "$short1fname"]} {
                       ReadShortCuts "$short1fname"
               } else {
                       ReadShortCuts "$short0fname"
               }

               if {[file exists "$short2fname"]} {ReadShortCuts "$short2fname"}
               if {[file exists "$short3fname"]} {ReadShortCuts "$short3fname"}
       }
}


proc ReadShortCuts {fname} {

#*** Read the shortcuts from file fname and generate menu buttons

       global .menu.cuts.m
       global textbuf

#*** Delete old entries

       .menu.cuts.m delete 0 last

#*** Open shortcuts file

       set fd [open "$fname" "r"]

#*** Read line by line and check for :end and :endentry commands.

       for {set mode 0} {[gets $fd line] != -1} {} {
               if {[cequal ":entry" [lindex $line 0]]} {
                       set buf ""
                       set mode 1
                       lvarpop line 0
                       set entryname [string trim $line ""]
                       continue
               }
               if {[cequal ":endentry" [lindex $line 0]]} {
                       .menu.cuts.m add command -label "$entryname" -command "InsertEditor \{$buf\} "
                       set mode 0
                       continue
               }
               if {[cequal ":separator" [lindex $line 0]]} {
                       .menu.cuts.m add separator
                       continue
               }
               if {$mode} {
                       set buf "$buf\n$line"
               }
       }
       close $fd
}