--- capa/capa51/GUITools/classl.tcl 1999/09/28 21:25:36 1.1 +++ capa/capa51/GUITools/classl.tcl 2000/03/22 21:08:02 1.3 @@ -67,13 +67,16 @@ proc createClasslEditor { classlFile } { #action button $actionFrame.add -text "Add" -command "classlAdd $num" button $actionFrame.edit -text "Edit" -command "classlEdit $num" + button $actionFrame.save -text "Save" -command "saveClassl $num 1" button $actionFrame.delete -text "Delete" -command "classlDelete $num" button $actionFrame.section -text "Change Section" -command "classlSectionChange $num" button $actionFrame.sort -text "Sort" -command "classlSort $num" button $actionFrame.print -text "Print" -command "classlPrint $num" button $actionFrame.find -text "Find" -command "classlFind $num" - pack $actionFrame.add $actionFrame.edit $actionFrame.delete $actionFrame.section \ - $actionFrame.sort $actionFrame.print $actionFrame.find -side left + button $actionFrame.merge -text "Merge" -command "classlMerge $num" + pack $actionFrame.add $actionFrame.edit $actionFrame.save $actionFrame.delete \ + $actionFrame.section $actionFrame.sort $actionFrame.print $actionFrame.find \ + $actionFrame.merge -side left #window set leftFrame [frame $windowFrame.left] @@ -738,9 +741,8 @@ proc classlDoFind { num type } { incr which } set max [$gClassl($num) index end] - for {set i 0} { $i < ($max-1)} {incr i} { + for {set i 0} { $i < ($max)} {incr i} { set current [expr ($i+$which)%$max] - puts -nonewline "$current:" set entry [$gClassl($num) get $current] switch $type { name { set tmp [string range [$gClassl($num) get $current] 24 53] } @@ -751,9 +753,52 @@ proc classlDoFind { num type } { $gClassl($num) selection clear 0 end $gClassl($num) selection set $current $gClassl($num) see $current - puts " " return } } displayMessage "Not Found" +} + +########################################################### +# classlMerge +########################################################### +########################################################### +########################################################### +proc classlMerge { num } { + global gClassl + + set filename [tk_getOpenFile -title "Select a File to merge in"] + + if { $filename == "" } { return } + set fileId [open $filename "r"] + set maxlines [lindex [exec wc -l $filename] 0] + set linenum 0 + set newentries 0 + displayStatus "Merging $filename" both $num + set aline [gets $fileId] + while {![eof $fileId]} { + incr linenum + set found 0 + set stunum [string range $aline 14 22] + set max [$gClassl($num) index end] + for {set i 0} { $i < ($max)} {incr i} { + set tmp [string range [$gClassl($num) get $i] 14 22] + if { [regexp -nocase $stunum $tmp] } { + set found 1 + break + } + } + if { !$found } { + incr newentries + $gClassl($num) insert end $aline + } + updateStatusBar [expr $linenum/double($maxlines)] $num + set aline [gets $fileId] + } + removeStatus $num + if { $newentries != 0 } { + $gClassl($num) see $max + $gClassl($num) selection set $max + } + displayMessage "Added $newentries students." } \ No newline at end of file