Posted to tcl by schelte at Sat Mar 23 15:22:55 GMT 2013view pretty

#!/usr/bin/tclsh
 
package require Tk
 
wm title . "Load AVG"
#wm resizable . 0 0
 
entry .e1 -width 6 -state readonly -justify center -textvariable old(.e1)
entry .e2 -width 6 -state readonly -justify center -textvariable old(.e2)
entry .e3 -width 6 -state readonly -justify center -textvariable old(.e3)
entry .e4 -width 6 -state readonly -justify center -textvariable old(.e4)
entry .e5 -width 6 -state readonly -justify center -textvariable old(.e5)
button .b1 -text {Exit} -state normal -command {exit}
grid .e1 -row 0 -column 0
grid .e2 -row 1 -column 0
grid .e3 -row 2 -column 0
grid .e4 -row 3 -column 0
grid .e5 -row 4 -column 0
grid .b1 -row 5 -column 0
 
proc StatusInsert {name now} {
    global old
    if {$now > $old($name)} {
        puts "$now UP"
        $name configure -foreground red
    } elseif {$now == $old($name)} {
        puts "$now EQUAL"
        $name configure -foreground  blue
    } else {
        puts "$now DOWN"
        $name configure -foreground darkgreen
    }
    set old($name) $now
}
 
proc avg_load {} {
    set lavgFile {/proc/loadavg}
    set lavgFD [open $lavgFile r]
    while {[gets $lavgFD line] >= 0} {
        set result $line
    }
    
    foreach w {.e1 .e2 .e3} value [lrange [split $result { }] 0 2] {
        StatusInsert $w $value
    }
    
    foreach w {.e4 .e5} value [split [lindex [split $result { }] 3] {/}] {
        StatusInsert $w $value
    }
    
    close $lavgFD
}

proc testcase {} {
    avg_load
    after 1000 testcase
}

testcase