# # # # puts "MAIA TK Utilities" set szView [file tail $env(CLEARCASE_ROOT)] set szXipc $env(XIPCINSTANCE) proc run {} { global env global szCommand wRun input wLog wRun global szView szXipc set env(CLEARCASE_ROOT) /view/$szView set env(XIPCINSTANCE) $szXipc set szCmd "xterm -sl 50000 -sb" if {[string length $szCommand] == 0} { set szCommand "$szCmd" } else { append szCmd " -e $szCommand" } if [catch {eval exec "$szCmd &"} input] { $wLog insert end $input bell } else { #fileevent $input readable log $wLog insert end "$env(PS1)$szCommand &\n" $wLog see end #$wRun config -text Stop -command stop } } proc log {} { global input wLog if [eof $input] { stop } else { gets $input szLine $wLog insert end "$szLine\n" $wLog see end } } proc stop {} { global input wRun catch {close $input} $wRun config -text "Run it" -command run } proc cmdUpdate {name1 name2 ops} { global szCommand szTarget szView szXipc \ szTestScript szTestcase szArguments global iSelect global lTestScripts lTestcaseIDs lArguments switch $name1 { szArguments { set lArguments($iSelect) $szArguments } szTestcase { set lTestcaseIDs($iSelect) $szTestcase } } set szCommand "bluegnu " if {[string compare $szTarget ""] != 0} { append szCommand "\"--target=$szTarget" if {[string compare $szView ""] != 0} { append szCommand " view=$szView" } if {[string compare $szXipc ""] != 0} { append szCommand " XIPCINSTANCE=$szXipc" } append szCommand "\" " } foreach i [lsort -integer [array names lTestScripts]] { # puts "test script index = $i" append szCommand "\"$lTestScripts($i)" if {[string compare $lTestcaseIDs($i) ""] !=0} { append szCommand "\[$lTestcaseIDs($i)\]" } if {[string compare $lArguments($i) ""] != 0} { #puts "szArguments: >$lArguments($i)<" append szCommand "=$lArguments($i)" } append szCommand "\" " } #puts "szCommand: >$szCommand<" } proc setPWD {dir} { global szPWD wPWDmenu wPWDentry env #puts "setPWD $dir:" set szPWD $dir #puts "szPWD:: $szPWD" cd $szPWD catch {setTS "."} if {[string compare $szPWD "/"] != 0} { set szPWD "[exec /bin/sh -c pwd]/" regsub "/tmp_mnt" $szPWD "" szPWD } #puts "szPWD>: $szPWD" $wPWDentry insert [$wPWDentry index end] \ [string range $szPWD [$wPWDentry index end] end] #update idletasks $wPWDentry icursor end if {[$wPWDmenu index end] > 1} { $wPWDmenu delete 2 end } foreach F [lsort [glob *]] { if [file isdirectory $F] { set szFile [file tail $F] $wPWDmenu add command -label $szFile -command "setPWD $szFile" } } } proc setPWDoverwrite {name1 name2 ops} { global wPWDmenu env catch {upvar #0 $name1 szPWD} szErrMsg if {[file isdirectory $szPWD]} { trace vdelete szPWD w setPWDoverwrite setPWD $szPWD trace variable szPWD w setPWDoverwrite } else { set szDir {} foreach F [glob -nocomplain "${szPWD}*"] { if [file isdirectory $F] { lappend szDir $F } } # puts "szDir: >$szDir< [llength $szDir]" if {[llength $szDir] == 1} { set szPWD $szDir setPWD $szPWD } elseif {[llength $szDir] == 0} { bell } } } proc checkDir {szDir} { regsub "^.*/home" $szDir "/home" szDir return $szDir } proc setTS {dir} { global szTS szTSdir wTSmenu wTSentry env wLR trace vdelete szTS w setTSoverwrite $wTSentry configure -state normal #puts "setTS $dir: [checkDir [exec /bin/sh -c pwd]]" if {[string compare $dir ".."] == 0} { # puts "##szTS: >$szTS<1" set szTStmp [file dirname $szTS] # puts "##szTS: >[set szTStmp [file dirname $szTS]]<2" $wTSentry delete 0 end # puts "##szTS: >$szTS<3" $wTSentry insert end "$szTStmp/" } elseif {[string compare $dir "."] == 0} { set szTStmp "." $wTSentry delete 0 end $wTSentry insert end "$szTStmp/" catch {listRemoved} szErrMsg #puts "err: $szErrMsg" } else { $wTSentry insert end "$dir/" } set szTmp [$wTSentry get] # puts "####### TS: >[set szTmp [$wTSentry get]]<" #puts "######szTS: >$szTS<" catch {insertTests $wLR} # update idletasks # $wTSentry icursor end # puts "TS menu index: [$wTSmenu index end]" if {[$wTSmenu index end] != "none"} { $wTSmenu delete 0 end } if {[string compare $szTmp "./"] != 0} { $wTSmenu add command -label .. \ -command "setTS .." } foreach F [lsort [glob -nocomplain ${szTmp}*]] { if [file isdirectory $F] { set szFile [file tail $F] $wTSmenu add command -label $szFile \ -command "setTS $szFile" } } $wTSentry configure -state disabled trace variable szTS w setTSoverwrite # puts "TS menu end" } proc setEXPECT {dir} { global szExpect wEXPECTentry env # puts "Set env(EXPECT) to $dir" trace vdelete szExpect w setExpectOverwrite $wEXPECTentry configure -state normal $wEXPECTentry delete 0 end $wEXPECTentry insert end "$dir" set szExpect $dir $wEXPECTentry configure -state disabled trace variable szExpect w setExpectOverwrite } proc setTSoverwrite {name1 name2 ops} { global wTSmenu env catch {upvar #0 $name1 szTS} szErrMsg # puts "szTS >$szTS<" #setTS $szTS } proc setExpectOverwrite {name1 name2 ops} { #global wEmenu env catch {upvar #0 $name1 szExpect} szErrMsg } proc setExpect {name1 name2 ops} { global szExpect env if {[string length $szExpect] == 0} { catch {unset env(EXPECT)} } else { set env(EXPECT) $szExpect } } proc scrollSet {wScroll geoCmd offset size} { if {$offset != 0.0 || $size != 1.0} { eval $geoCmd; # make sure it is visible $wScroll set $offset $size } else { set manager [lindex $geoCmd 0] $manager forget $wScroll; # hide it } } proc scrolledListBox {w args} { frame $w -width 200 grid rowconfigure $w 0 -weight 1 grid columnconfigure $w 0 -weight 1 listbox $w.list \ -xscrollcommand [list scrollSet $w.xscroll \ [list grid $w.xscroll -row 1 -column 0 -sticky we]] \ -yscrollcommand [list scrollSet $w.yscroll \ [list grid $w.yscroll -row 0 -column 1 -sticky ns]] eval {$w.list configure} $args scrollbar $w.xscroll -orient horizontal \ -command [list $w.list xview] scrollbar $w.yscroll -orient vertical \ -command [list $w.list yview] grid $w.list $w.yscroll -sticky news grid $w.xscroll -sticky news return $w.list } proc listTransferSelected {w wL} { global szTS wLR global lTestScripts lTestcaseIDs lArguments set i [lindex [$w curselection] 0] set szTest [$w get $i] set szTestScript [file join $szTS $szTest] # puts "selected: >$szTest<" set i [$wL index end] set lTestScripts($i) $szTestScript set lTestcaseIDs($i) "" set lArguments($i) [getArguments $szTestScript] # puts "set lArguments($i) $lArguments($i)" $wL insert end $szTestScript cmdUpdate lArguments {} u } proc listRemoved {} { global lTestScripts lTestcaseIDs lArguments global wLL szCommand if [catch {set jMax [$wLL index end]}] return for {set i $jMax} {$i > 0} {incr i -1} { catch {unset lTestScripts($i)} catch {unset lTestcaseIDs($i)} catch {unset lArguments($i)} $wLL delete $i } set szCommand "" } proc listTransferRemoved {w wL} { global lTestScripts lTestcaseIDs lArguments set jMax [$w index end] foreach i [lsort -integer -decreasing [$w curselection]] { # puts "i = $i; jMax = $jMax" if {$i + 1 < $jMax} { for {set j $i} {$j < $jMax - 1} {incr j} { set k [expr $j + 1] # puts "j = $j; k = $k" set lTestScripts($j) $lTestScripts($k) set lTestcaseIDs($j) $lTestcaseIDs($k) set lArguments($j) $lArguments($k) unset lTestScripts($k) unset lTestcaseIDs($k) unset lArguments($k) } } else { unset lTestScripts($i) unset lTestcaseIDs($i) unset lArguments($i) } cmdUpdate lArguments {} u $w delete $i } } proc listTransferData {w} { global iSelect szArguments wArguments szTestcase wTestcase global lTestcaseIDs lArguments if {! [catch {set iSelect [lindex [$w curselection] 0]}]} { if {[llength iSelect] == 1} { selection own -command [list lostSelection $w] $w # trace vdelete szArguments w cmdUpdate set szArguments $lArguments($iSelect) $wArguments configure -state normal # trace variable szArguments w cmdUpdate # trace vdelete szTestcase w cmdUpdate set szTestcase $lTestcaseIDs($iSelect) $wTestcase configure -state normal # trace variable szTestcase w cmdUpdate cmdUpdate lArguments {} u } } } proc lostSelection {w} { global wArguments wTestcase global iSelect szArguments szTestcase set i [$w index active] # $w selection clear $i # trace vdelete szArguments w cmdUpdate # trace vdelete szTestcase w cmdUpdate # set szArguments "" # set szTestcase "" # trace variable szArguments w cmdUpdate # trace variable szTestcase w cmdUpdate $wArguments configure -state disabled $wTestcase configure -state disabled } proc getArguments {ts} { if [file exists $ts] { set F [open $ts r] set bArg 0 set szArgs "" while {[gets $F szLine] >= 0} { switch -regexp $szLine { "Mandatory Arguments:" - "Optional Arguments:" { set bArg 1 continue } {^# *$} { set bArg 0 continue } {^processTestScriptArgs} { break } default { if {$bArg} { set bRepl [regsub {^# *} $szLine {} szArg] if {! $bRepl} { set bRepl [regsub "^\[ \t ]*set *" \ $szLine {} szArg] if {$bRepl} { regsub " " $szArg "=" szArg regsub -all {"} $szArg "" szArg regsub -all "\{" $szArg "" szArg regsub -all "\}" $szArg "" szArg } } if {$bRepl} { regsub { *; *#.*$} $szArg {} szArg if {[string first " " $szArg] >= 0} { append szArgs "\{[string trim $szArg]\} " } else { append szArgs "[string trim $szArg] " } } } } } } close $F return [string trim $szArgs] } return "" } proc insertTests {w} { global szTS $w delete 0 end foreach F [lsort [glob -nocomplain ${szTS}/*]] { if {! [file isdirectory $F]} { switch -regexp $F { {~$} - {[.]sql$} - {[.]err$} - {[.]log$} - {[.]out$} - {[.]txt$} - {tclIndex$} { # Nothing to be done, will not be added to list } default { set szFile [file tail $F] $w insert end "$szFile" } } } } }