#!/bin/sh
#-*-tcl-*-
# the next line restarts using wish8.3 \
exec wish8.3 "$0" -- ${1+"$@"}

#
# $Id: tkcvs.blank,v 1.39 2001/10/01 00:45:52 dorothyr Exp $
#
# TkCVS Main program -- A Tk interface to CVS.
#
# Uses a structured modules file -- see the manpage for more details.
#
# Author:  Del (del@babel.dialix.oz.au)
#

#
if {$tk_version < 8.1} {
   tk_dialog .wrongversion "Tcl/Tk too old" \
   "TkCVS requires Tcl/Tk 8.1 or better!" \
   error 0 {Bye Bye}
   exit 1
}

set ScriptBin [file dirname [info script]]
set TclExe [info nameofexecutable]
if {$tcl_platform(platform) == "windows"} {
  set TclExe [file attributes $TclExe -shortname]
}

set TclRoot /usr/local/lib     ;# 2 b replaced by install skript
# allow runtime replacement
if {[info exists env(TCLROOT)]} {
   set TclRoot $env(TCLROOT)
}

set TCDIR [file join $TclRoot tkcvs]
set cvscfg(bitmapdir) [file join $TclRoot tkcvs bitmaps]

if {! [info exists cvscfg(editorargs)]} {
  set cvscfg(editorargs) {}
}
set auto_path [linsert $auto_path 0 $TCDIR]
set cvscfg(allfiles) false
set cvscfg(checkrecursive) {}
if {! [info exists cvscfg(startwindow)]} {
  set cvscfg(startwindow) "workdir"
}
set cvscfg(econtrol) false


set maxdirs 15
set dirlist {}
set totaldirs 0

if { [info exists env(HOME)] } {
  set cvscfg(home) $env(HOME)
} else {
  set cvscfg(home) "~"
}

# Read in defaults
if {[file exists [file join $TCDIR tkcvs_def.tcl]]} {
  source [file join $TCDIR tkcvs_def.tcl]
}

set optfile [file join $cvscfg(home) .tkcvs]
if {[file exists $optfile]} {
  source $optfile
}

# Set some defaults
set cvsglb(sort_pref) { filecol -decreasing }

if {! [get_cde_params]} {
  # Fonts.
  # First, see what the native menu font is.
  # This makes it look "normal" on Windows.
  . configure -menu .native
  menu .native
  set menufont [lindex [.native configure -font] 4]
  destroy .native
  # Hilight colors.  Get the colorful ones.
  entry .testent
  set cvsglb(hlbg) [lindex [.testent configure -selectbackground] 4]
  set cvsglb(hlfg) [lindex [.testent configure -selectforeground] 4]
  destroy .testent

  # Find out what the default gui font is
  if { [info exists cvscfg(guifont)] } {
    # If you set a guifont, I'm going to assume you want to use it for
    # the menus too.
    set menufont $cvscfg(guifont)
  } else {
    # Find out what the tk default is
    label .testlbl -text "LABEL"
    set cvscfg(guifont) [lindex [.testlbl configure -font] 4]
    #set cvsglb(canvbg) [lindex [.testlbl configure -background] 4]
    destroy .testlbl
  }
  # Find out what the default font is for listboxes
  if { ! [info exists cvscfg(listboxfont)] } {
    entry .testent
    set cvscfg(listboxfont) [lindex [.testent configure -font] 4]
    destroy .testent
  }
  scrollbar .scrl
  destroy .scrl

  if { ! [info exists cvscfg(dialogfont)] } {
    set cvscfg(dialogfont) $cvscfg(guifont)
  }

  option add *Label.font $cvscfg(guifont) userDefault
  option add *Button.font $cvscfg(guifont) userDefault
  option add *Menu.font $menufont userDefault
}

option add *ToolTip.background  "LightGoldenrod1" userDefault
option add *ToolTip.foreground  "black" userDefault

# This makes tk_dialog use our font.  The default tends to be terrible
# no matter what platform
option add *Dialog.msg.font $cvscfg(dialogfont) userDefault
# Sometimes we'll want to override this but let's set a default
option add *Message.font $cvscfg(dialogfont) userDefault


# Initialize logging (classes are CFTD)
if { ! [info exists cvscfg(log_classes)] } {
  set cvscfg(log_classes) "C"
}
foreach class [split $cvscfg(log_classes) {}] {
  set logclass($class) $class
}
if { ! [info exists cvscfg(logging)] } {
  set cvscfg(logging) false
}
if {$cvscfg(logging)} {
  gen_log:init
}

#
# Add directory where we last ran to the menu list
if { ! [info exists cvscfg(lastdir)] } {
  set cvscfg(lastdir) [pwd]
}

#
# Command line options
#
set usage "Usage: tkcvs \[-dir directory\] \[-root cvsroot\] \[-win workdir|module\]"
for {set i 0} {$i < [llength $argv]} {incr i} {
  set arg [lindex $argv $i]
  set val [lindex $argv [expr {$i+1}]]
  switch -glob -- $arg {
    -dir {
      set dir $val; incr i
      cd $val
    }
    -root {
      set cvscfg(cvsroot) $val; incr i
    }
    -win {
      set cvscfg(startwindow) $val; incr i
    }
    -help {
      puts $usage
      exit 0
    }
    default {
      puts $usage
      exit 1
    }
  }
}

if { ! [info exists cvscfg(cvsroot)] } {
  if { ! [info exists env(CVSROOT)] } {
    puts "warning: your \$CVSROOT environment variable is not set."
    set cvscfg(cvsroot) ""
  } else {
    set cvscfg(cvsroot) $env(CVSROOT)
  }
}
# This helps with Samba-mounted repositories
set cvscfg(cvsroot) [file join $cvscfg(cvsroot)]
 
if {![info exists cvscfg(ignore_file_filter)]} {
  set cvscfg(ignore_file_filter) ""
}
# Remember what the setting was.  We'll have to restore it after
# leaving a directory with a .cvsignore file.
set cvsglb(default_ignore_filter) $cvscfg(ignore_file_filter)

set incvs 0

#
# Read in the bitmaps
#
image create photo Fileview -format gif -file [file join $cvscfg(bitmapdir) fileview.gif]
image create photo Fileedit -format gif -file [file join $cvscfg(bitmapdir) fileedit.gif]
image create photo Delete -format gif -file [file join $cvscfg(bitmapdir) delete.gif]
image create photo Clear -format gif -file [file join $cvscfg(bitmapdir) clear.gif]
image create photo Refresh -format gif -file [file join $cvscfg(bitmapdir) loop-glasses.gif]
image create photo Branches -format gif -file [file join $cvscfg(bitmapdir) branch.gif]
image create photo Add -format gif -file [file join $cvscfg(bitmapdir) add.gif]
image create photo Remove -format gif -file [file join $cvscfg(bitmapdir) remove.gif]
image create photo Diff -format gif -file [file join $cvscfg(bitmapdir) diff.gif]
image create photo Checkin -format gif -file [file join $cvscfg(bitmapdir) checkin.gif]
image create photo Checkout -format gif -file [file join $cvscfg(bitmapdir) checkout.gif]
image create photo Edit -format gif -file [file join $cvscfg(bitmapdir) edit.gif]
image create photo Unedit -format gif -file [file join $cvscfg(bitmapdir) unedit.gif]
image create photo Modules -format gif -file [file join $cvscfg(bitmapdir) modbrowse.gif]
image create photo Workdir -format gif -file [file join $cvscfg(bitmapdir) folderopen.gif]
image create photo Import -format gif -file [file join $cvscfg(bitmapdir) import.gif]

image create photo Export -format gif -file [file join $cvscfg(bitmapdir) export.gif]
image create photo Files -format gif -file [file join $cvscfg(bitmapdir) files.gif]
image create photo Patches -format gif -file [file join $cvscfg(bitmapdir) patches.gif]
image create photo Patchfile -format gif -file [file join $cvscfg(bitmapdir) patchfile.gif]
image create photo Tag -format gif -file [file join $cvscfg(bitmapdir) tag.gif]
image create photo Tags -format gif -file [file join $cvscfg(bitmapdir) tags.gif]
image create photo Branchtag -format gif -file [file join $cvscfg(bitmapdir) branchtag.gif]
image create photo Mergebranch -format gif -file [file join $cvscfg(bitmapdir) mergebranch.gif]
image create photo Mergediff -format gif -file [file join $cvscfg(bitmapdir) mergediff.gif]
image create photo Conflict -format gif -file [file join $cvscfg(bitmapdir) conflict.gif]
image create photo Who -format gif -file [file join $cvscfg(bitmapdir) who.gif]

image create photo dir -format gif -file [file join $cvscfg(bitmapdir) dir.gif]
image create photo mdir -format gif -file [file join $cvscfg(bitmapdir) mdir.gif]
image create photo mod -format gif -file [file join $cvscfg(bitmapdir) mod.gif]
image create photo adir -format gif -file [file join $cvscfg(bitmapdir) adir.gif]
image create photo amod -format gif -file [file join $cvscfg(bitmapdir) amod.gif]

image create photo arr_up -format gif -file [file join $cvscfg(bitmapdir) arrow_up.gif]
image create photo arr_dn -format gif -file [file join $cvscfg(bitmapdir) arrow_dn.gif]
image create photo arh_up -format gif -file [file join $cvscfg(bitmapdir) arrow_hl_up.gif]
image create photo arh_dn -format gif -file [file join $cvscfg(bitmapdir) arrow_hl_dn.gif]

#foreach c [lsort [array names cvscfg]] {
  #gen_log:log D "cvscfg($c) $cvscfg($c)"
#}

# Create a window
if {$cvscfg(startwindow) == "module"} {
  wm withdraw .
  if {[file isdirectory CVS]} {
    read_cvs_dir CVS
  }
  modbrowse_run $cvscfg(cvsroot)
} else {
  workdir_setup
}

