proc dummy {args} {
# your code here instead of a delay
if {$args != "dummyargs"} {
puts "\nFailed"
exit
}
after 100
return
}
# Tcl progressMeter by Mike Tuxford
proc progressMeter {i args} {
set c 0
set spincnt 0
array set spinner {0 "/" 1 "-" 2 "\\" 3 "|"}
while {$c < $i} {
[lindex $args 0] [lrange $args 1 end]
if {$spincnt == 3} {
set spincnt 0
} else {
incr spincnt
}
incr c
set p [expr int(($c / $i.0) * 100)]
puts -nonewline stdout " $spinner($spincnt)\[$p%\][string repeat \b 8]"
flush stdout
}
puts "\bDone! "
return
}
# Syntax: progressMeter <number of loops> <proc> ?args?
progressMeter 123 dummy dummyargsSC Here's another one which is used as a callback, more like the various tk callback widgets. The original author is Kris Raney I believe.
# text_progress --
#
# progress callback for a download or other piece of work
#
# Arguments:
# total expected total size/duration
# current current size/duration
# Results:
# Displays progress information in some way to the user.
#
# this version culled from Kris Raney's text_progress
#
proc text_progress {totalsize current} {
puts -nonewline "\r |"
if {$totalsize == 0} {
set totalsize $current
}
set portion [expr 1.0 * $current/$totalsize * 40]
for {set x 0} {$x <= $portion} {incr x} {
puts -nonewline "="
}
for {} {$x <= 40} {incr x} {
puts -nonewline " "
}
puts -nonewline "| [format "%3d" [expr int(100.0 * $current/$totalsize)]] %"
flush stdout
if {$totalsize == $current} {
puts "\ndone"
}
}
## test code
for {set i 0} {$i < 100} {incr i} {
text_progress 100 $i
after 100
}MT That's an interesting one although for values less than or greater than 100 it leaves the final percentage as less than 100% but certainly usable as is.

