Tcl/Tk 进度系统 可以点状态与时间
来源:互联网 发布:程序员数学 编辑:程序博客网 时间:2024/04/30 23:18
#!/bin/sh
# -*- tcl -*- \
exec tclsh "$0" ${1+"$@"}
package require Iwidgets
set p8 .label
toplevel $p8
set ecn_dir "d://ecn"
global loger
set loger zd
array set phase {
0 "\u63A5 \u6536"
1 "Proc1"
2 "Proc2"
3 "\u5DE5 \u6536"
4 "\u5BE9\u6838\u7D50\u6848"
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc game_over {} {
global ecn_dir p8
set job [$p8.frame1.jobname getcurselection]
source [file join $ecn_dir $job]
for {set i 0} {$i < 4} {incr i} {
if {[lindex [set [set job]($i)] 0] == "x"} {return 1}
}
if {[lindex [set [set job](4)] 0] == "x"} {
return 1
} else {
return 0
}
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc write_job {job index butt} {
global ecn_dir loger
source [file join $ecn_dir $job]
set now_date [clock format [clock seconds] -format %m%/%d%#%H:%M:%S]
if {$butt == 0} {
set [set job]($index) [list $now_date $loger x x]
} else {
set [set job]($index) [list [lindex [set [set job]($index)] 0] [lindex [set [set job]($index)] 1] $now_date $loger]
}
set ecn_bakjob [open $ecn_dir/$job.tmp a+]
set ecn_openjob [open $ecn_dir/$job r+]
gets $ecn_openjob line
puts -nonewline $ecn_bakjob $line\n
for {set i 0} {$i < 5} {incr i} {
puts -nonewline $ecn_bakjob [list $i [set [set job]($i)] ]\n
}
puts -nonewline $ecn_bakjob \}
puts -nonewline \n
close $ecn_bakjob
close $ecn_openjob
file rename -force "$ecn_dir/$job.tmp" "$ecn_dir/$job"
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc click_proc {loger} {
global p8 ecn_dir phase deal_job index
set deal_job [$p8.frame1.jobname getcurselection]
set deal_state [$p8.frame1.state get]
source [file join $ecn_dir $deal_job]
set mingzi [array names db_p]
set suv 0
foreach name $mingzi {
if {[lindex $db_p($name) 0] == $loger && [lindex $db_p($name) 3] == "suv" || [lindex $db_p($name) 0] == "suv1" } { set suv 1} { puts "welcome"}
}
######[lindex [set [set deal_job](0)] 0] 这里deal_job不是直接数组名###
######[lindex [set deal_job(0)] 0] 这里deal_job是直接数组名###
switch -- $deal_state {
"\u63A5 \u6536" {if {[lindex [set [set deal_job](0)] 0] != "x"} {
$p8.frame1.startbut configure -state disabled
} else {
$p8.frame1.startbut configure -state normal
}
if {[lindex [set [set deal_job](0)] 2] != "x"} {
$p8.frame1.endbut configure -state disabled
} else {
$p8.frame1.endbut configure -state normal
}
set index 0
}
"Proc1" {if {[lindex [set [set deal_job](1)] 0] != "x"} {
$p8.frame1.startbut configure -state disabled
} else {
$p8.frame1.startbut configure -state normal
}
if {[lindex [set [set deal_job](1)] 2] != "x"} {
$p8.frame1.endbut configure -state disabled
} else {
$p8.frame1.endbut configure -state normal
}
set index 1
}
"Proc2" {if {[lindex [set [set deal_job](2)] 0] != "x"} {
$p8.frame1.startbut configure -state disabled
} else {
$p8.frame1.startbut configure -state normal
}
if {[lindex [set [set deal_job](2)] 2] != "x"} {
$p8.frame1.endbut configure -state disabled
} else {
$p8.frame1.endbut configure -state normal
}
set index 2
}
"\u5DE5 \u6536" {if {[lindex [set [set deal_job](3)] 0] != "x"} {
$p8.frame1.startbut configure -state disabled
} else {
$p8.frame1.startbut configure -state normal
}
if {[lindex [set [set deal_job](3)] 2] != "x"} {
$p8.frame1.endbut configure -state disabled
} else {
$p8.frame1.endbut configure -state normal
}
set index 3
}
"\u5BE9\u6838\u7D50\u6848" {if {[lindex [set [set deal_job](4)] 0] != "x"} {
$p8.frame1.startbut configure -state disabled
} else {
$p8.frame1.startbut configure -state normal
}
if {$suv == 1 && [lindex [set [set deal_job](4)] 2] == "x"} {
$p8.frame1.endbut configure -state normal
} else {
$p8.frame1.endbut configure -state disabled
}
set index 4
}
}
return $index
}
#console show
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc write_job_state { } {
global p8 ecn_dir loger rlist
set sta $rlist
puts "sta: $sta"
foreach job_st $sta {
set num [lsearch $sta $job_st]
source [file join $ecn_dir $job_st]
if {[lindex [set [set job_st](3)] 2] != "x"} {
set win [$p8.frame2 childsite]
$win.main itemconfigure p4$num -fill red
} elseif {[lindex [set [set job_st](2)] 2] != "x"} {
set win [$p8.frame2 childsite]
$win.main itemconfigure p3$num -fill red
} elseif {[lindex [set [set job_st](1)] 2] != "x"} {
set win [$p8.frame2 childsite]
$win.main itemconfigure p2$num -fill red
} elseif {[lindex [set [set job_st](0)] 2] != "x"} {
set win [$p8.frame2 childsite]
$win.main itemconfigure p1$num -fill red
}
}
}
#########################################################
proc read_job {} {
global p8 ecn_dir phase stard row column rlist
set win [$p8.frame2 childsite]
set list "" ; set rlist ""
foreach job [glob -directory [file join $ecn_dir] -nocomplain *] {
set job [lindex [split $job /] end]
lappend list [list $job [file mtime [file join $ecn_dir $job]]]
}
set column [list [lsort -index 1 -increasing $list]]
puts "column: $column"
foreach ecn [lsort -index 1 -increasing $list] {
lappend rlist [lindex $ecn 0]
$p8.frame1.jobname insert list end [lindex $ecn 0]
}
$win.main delete all
set j 0
set t_now [clock scan [join [split [join [split [clock format [clock seconds] -format "%y%/%m%/%d%#%H:%M:%S"] #] T] /] ""]]
foreach ecnrange $rlist {
source [file join $ecn_dir $ecnrange]
$win.main create rect 3 [expr 8+$j*38] 100 [expr 28+$j*38] -fill yellow -outline blue -tags $ecnrange
$win.main create text 53 [expr 18+$j*38] -text "$phase(0)" -font {courier 8 bold} -tags $ecnrange
#set spend_t [expr $t_now - [t_tran [lindex [set [set ecnrange](0)] 0] ]]
for {set i 1} {$i < 5} {incr i} {
$win.main create rect [expr $i*100] [expr 8+$j*38] [expr ($i+1)*100] [expr 28+$j*38] -fill "" -outline blue -tags p$i$j
$win.main create text [expr $i*100+50.0] [expr 18+$j*38] -text "$phase($i)" -font {courier 10 bold} -tags $ecnrange
lappend ary [list p$i$j]
set row $ary
}
$win.main create text 505 [expr 18+$j*38] -text $ecnrange -font {courier 10 bold} -anchor w -tags $ecnrange
incr j
}
$win.main configure -height [expr $j*38+25]
write_job_state
return $row ; return $rlist
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc new {} {
global p8 phase loger ecn_dir
set ecn_job [$p8.frame1.label.ent get]
puts $ecn_job
$p8.frame1.jobname insert list end $ecn_job
set list [lsort [glob -directory [file join $ecn_dir] -nocomplain *]]
set j [llength $list]
if {$ecn_job == ""} {
tk_messageBox -icon error -message "please enter job name !"
return
} else {
destroy $p8.frame1.label
}
set win [$p8.frame2 childsite]
set now_date [clock format [clock seconds] -format %m%/%d%#%H:%M:%S]
if {[file exists "$ecn_dir/$ecn_job"]} {
set open_ecn [open "$ecn_dir/$ecn_job" r+]
} else {
set open_ecn [open "$ecn_dir/$ecn_job" a+]
}
puts -nonewline $open_ecn "array set $ecn_job \{"
puts -nonewline $open_ecn \n
$win.main create rect 3 [expr 8+$j*38] 100 [expr 28+$j*38] -fill yellow -tags $ecn_job
$win.main create text 53 [expr 18+$j*38] -text "$phase(0)" -font {courier 10 bold} -tags $ecn_job
puts -nonewline $open_ecn "0 {$now_date $loger x x }"
puts -nonewline $open_ecn \n
for {set i 1} {$i < 5} {incr i} {
$win.main create rect [expr $i*100] [expr 8+$j*38] [expr ($i+1)*100] [expr 28+$j*38] -fill "" -outline blue -tags $ecn_job$j$i
$win.main create text [expr $i*100+50.0] [expr 18+$j*38] -text "$phase($i)" -font {courier 10 bold} -tags $ecn_job
puts -nonewline $open_ecn "$i { x x x x }"
puts -nonewline $open_ecn \n
}
$win.main create text 505 [expr 18+$j*38] -text $ecn_job -font {courier 10 bold} -anchor w -tags $ecn_job
puts -nonewline $open_ecn "\}"
close $open_ecn
$win.main configure -height [expr $j*38+30]
}
proc delete {} {
global p8 ecn_dir
set list "" ; set rlist ""
foreach job [glob -directory [file join $ecn_dir] -nocomplain *] {
set job [lindex [split $job /] end]
lappend list [list $job [file mtime [file join $ecn_dir $job]]]
}
foreach ecn [lsort -index 1 -increasing $list] {
lappend rlist [lindex $ecn 0]
$p8.frame1.labeldel.entdel insert list end [lindex $ecn 0]
}
$p8.frame1.labeldel.del configure -command {
set ecn_job [$p8.frame1.labeldel.entdel get]
if {$ecn_job != ""} {
if {[file exists "$ecn_dir/$ecn_job" ]} {
file delete -force "$ecn_dir/$ecn_job"
destroy $p8.frame1.labeldel
} else {
tk_messageBox -icon error -message "please enter a exists job name !"
destroy $p8.frame1.labeldel
return
}
} else {
tk_messageBox -icon error -message "please enter job name !"
destroy $p8.frame1.labeldel
return
}
}
}
proc sub_ecn_score_count {jobname} {
set ecn_score d:/score
set ecn_donefile "d:/ecn_done"
source [file join $ecn_donefile $jobname ]
set timeout 0
set s_time [lindex [set [set jobname ](1)] 0]
set e_time [lindex [set [set jobname ](4)] 0]
set start_time [ clock scan [split $s_time # ] ]
set end_time [ clock scan [split $e_time # ] ]
if {[expr $end_time-$start_time ] > 345600 } {
set timeout 1
}
for {set i 0} {$i <= 4} {incr i} {
if {$i != 0 && $i != 4} {
if {$i == 1 } {
if {$timeout == 0} {
set score1 0.3
set score2 0.1
} else {
set score1 0.1
set score2 0.1
}
} else {
if {$i == 2} {
set score1 0.1
set score2 0.1
}
if {$i == 3} {
set score1 0.1
set score2 0.1
}
}
set time1 [lindex [set [set jobname ]($i)] 0]
set loger1 [lindex [set [set jobname ]($i)] 1]
set time2 [lindex [set [set jobname ]($i)] 2]
set loger2 [lindex [set [set jobname ]($i)] 3]
if {![file isdirectory $ecn_score]} {file mkdir "$ecn_score"}
if {![file isdirectory $ecn_score/$loger1]} {file mkdir "$ecn_score/$loger1"}
if {![file isdirectory $ecn_score/$loger2]} {file mkdir "$ecn_score/$loger2"}
if { $loger1 == $loger2 } {
if {![file exists $ecn_score/$loger1/$loger1]} {
set score_db [open $ecn_score/$loger1/$loger1 a+]
} else {
set score_db [open $ecn_score/$loger1/$loger1 r+]
}
set tag1 1
while {![eof $score_db]} {
gets $score_db line
if {[lindex $line 0] == [list $jobname/$i] && $loger1 == [lindex $line 8]} {
set tag1 -1
break
}
}
if {$tag1 == 1 && ![file exists $score_db]} {
puts -nonewline $score_db [list $jobname/ECN/$i , $time1 , [expr $score1+$score2] , $time2 , $loger1 , $loger2 , [expr $score1+$score2] ]\n
} else {
tk_messageBox -message "EXISTS!"
break
}
close $score_db
} else {
if {![file exists $ecn_score/$loger1/$loger1]} {
set score_db [open $ecn_score/$loger1/$loger1 a+]
} else {
set score_db [open $ecn_score/$loger1/$loger1 r+]
}
set tag1 1
while {![eof $score_db]} {
gets $score_db line
if {[lindex $line 0] == [list $jobname/$i] && $loger1 == [lindex $line 8]} {
set tag1 -1
break
}
}
if {$tag1 == 1 && ![file exists $score_db]} {
puts -nonewline $score_db [list $jobname/ECN/$i , $time1 , [expr $score1+$score2] , x , $loger1 , $loger2 , $score1]\n
} else {
tk_messageBox -message "EXISTS!"
break
}
close $score_db
if {![file exists $ecn_score/$loger2/$loger2]} {
set score_db [open $ecn_score/$loger2/$loger2 a+]
} else {
set score_db [open $ecn_score/$loger2/$loger2 r+]
}
set tag1 1
while {![eof $score_db]} {
gets $score_db line
if {[lindex $line 0] == [list $jobname/$i] && $loger2 == [lindex $line 8]} {
set tag1 -1
break
}
}
if {$tag1 == 1 && ![file exists $score_db]} {
puts -nonewline $score_db [list $jobname/ECN/$i , x , x , $time2 , $loger1 , $loger2 , $score2]\n
} else {
tk_messageBox -message "EXISTS!"
break
}
close $score_db
}
}
}
}
proc main_frame {} {
global p8 ecn_dir row column rlist
console show
pack [frame $p8.frame1 -width 640] -side top
pack [button $p8.frame1.new -width 7 -text "Add Job" -font {courier 8 bold}] -side left
pack [button $p8.frame1.del -width 7 -text "Del Job" -font {courier 8 bold}] -side left
pack [label $p8.frame1.txt -text "JobName: " -font {courier 11 bold}] -side left
pack [iwidgets::combobox $p8.frame1.jobname -width 20 -selectioncommand {click_proc $loger ;puts $index} ] -side left
pack [iwidgets::optionmenu $p8.frame1.state -width 80 -command {click_proc $loger ;puts $index} ] -side left
pack [button $p8.frame1.startbut -width 12 -text "\u958B \u59CB" -font {courier 10 bold}] -side left
pack [button $p8.frame1.endbut -width 12 -text "\u7D50 \u675F" -font {courier 10 bold}] -side left
$p8.frame1.new configure -command {
place [frame $p8.frame1.label -width 200 -height 40 -bg green ] -x 1 -y 1
place [entry $p8.frame1.label.ent -width 15] -x 1 -y 5
place [button $p8.frame1.label.ok -text "O K" -width 5 -command new] -x 100 -y 4
place [button $p8.frame1.label.cancel -text "Cancel" -width 5 -command "destroy $p8.frame1.label"] -x 150 -y 4
}
$p8.frame1.del configure -command {
place [frame $p8.frame1.labeldel -width 250 -height 40 -bg green ] -x 1 -y 1
place [iwidgets::combobox $p8.frame1.labeldel.entdel -width 12] -x 1 -y 5
place [button $p8.frame1.labeldel.del -text "Delete" -width 5 ] -x 100 -y 4
place [button $p8.frame1.labeldel.cancel -text "Cancel" -width 5 -command "destroy $p8.frame1.labeldel"] -x 150 -y 4
delete
}
$p8.frame1.state insert end "\u63A5 \u6536" "Proc1" "Proc2" "\u5DE5 \u6536" "\u5BE9\u6838\u7D50\u6848"
pack [iwidgets::scrolledframe $p8.frame2 -width 640 -height 285] -side bottom
set win [$p8.frame2 childsite]
pack [canvas $win.main -width 700 -height 285 -relief sunken -bd 0]
read_job
$p8.frame1.startbut configure -command {
write_job [$p8.frame1.jobname getcurselection] [click_proc $loger] 0
$p8.frame1.startbut configure -state disabled
}
$p8.frame1.endbut configure -command {
if {[$p8.frame1.state get] == $phase(4)} {
if {[game_over] == 0} {
set current_job [$p8.frame1.jobname getcurselection]
write_job $current_job [click_proc $loger] 1
file copy -force $ecn_dir/$current_job d:/ecn_done
file delete -force "$ecn_dir/$current_job"
read_job
sub_ecn_score_count $current_job
}
} else {
write_job [$p8.frame1.jobname getcurselection] [click_proc $loger] 1
set flow [$p8.frame1.state get]
set dex [$p8.frame1.jobname getcurselection]
global num
set view $rlist
set num [lsearch $view $dex]
switch -- $flow {
"\u63A5 \u6536" { set win [$p8.frame2 childsite]
$win.main itemconfigure p1$num -fill red }
"Proc1" { set win [$p8.frame2 childsite]
$win.main itemconfigure p1$num -fill ""
$win.main itemconfigure p2$num -fill red }
"Proc2" { set win [$p8.frame2 childsite]
$win.main itemconfigure p2$num -fill ""
$win.main itemconfigure p3$num -fill red }
"\u5DE5 \u6536" { set win [$p8.frame2 childsite]
$win.main itemconfigure p3$num -fill ""
$win.main itemconfigure p4$num -fill red }
}
}
$p8.frame1.endbut configure -state disabled
}
}
main_frame
- Tcl/Tk 进度系统 可以点状态与时间
- tcl/tk
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- Tcl/Tk: 输出、赋值与替换
- Tcl/Tk: 数学表达式与 expr 命令
- tcl/tk参考——系统相关cd
- tcl/tk参考——系统相关pwd
- tcl/tk参考——系统相关pid
- tcl/tk参考——系统相关time
- tcl/tk参考——系统相关exit
- tcl/tk参考——系统相关glob
- tcl/tk参考——系统相关glob
- Tcl/Tk 命令与C/C++的集成研究
- tcl/tk中大括号与双引号分组的不同
- tcl/tk学习笔记:输出、赋值与替换
- Aizu 0009 Prime Number
- Android面试题(含答案)
- Ralink RT3070 AP移植笔记
- Eclipse SVN插件安装
- Android源码解析系列
- Tcl/Tk 进度系统 可以点状态与时间
- 自定义propertygrid弹出属性编辑框
- IPHONE强制重启
- uva 10256(凸包)
- leetcode刷题 总结 记录 备忘 46
- Windows 2008 IIS 7 WCF 404.17 ERROR
- 树莓派的U盘只能读不能写的问题
- 2015 Multi-University Training Contest 3
- Triangle Interior