Beats.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Jan 2002 00:06:10 +0000 (00:06 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Jan 2002 00:06:10 +0000 (00:06 +0000)
bot.tcl

diff --git a/bot.tcl b/bot.tcl
index eb65a0e..4685581 100755 (executable)
--- a/bot.tcl
+++ b/bot.tcl
@@ -23,8 +23,32 @@ proc showintervalsecs {howlong abbrev} {
     return [showintervalsecs/[opt timeformat] $howlong $abbrev]
 }
 
+proc formatsf {pfx value} {
+   foreach {min format} { 100 %.0f 10 %.1f 0 %.2f} {
+       set fval [format $format $value]
+       if {$fval < $min} continue
+       return [format "$fval${pfx}" $value]
+   }
+}
+
 proc showintervalsecs/beat {howlong abbrev} {
-    return [format "%g B" [expr {$howlong/86.4}]]
+    # We split in two to avoid overflow problems.
+    if {$howlong < 86 } {
+       # mB's
+       set pfx mB
+       return [format "%.0fmB" [expr {round($howlong * 1.157)*10} ]]
+    } else {
+       if {$howlong < 86400 } {
+           # B's
+           set pfx B
+           set value [expr {$howlong / 86.4}]
+       } else {
+           # kB's
+           set pfx kB
+           set value [expr {$howlong / 86400.0}]
+       }
+    }
+    return [formatsf $pfx $value]
 }
 
 proc showintervalsecs/ks {howlong abbrev} {
@@ -32,17 +56,14 @@ proc showintervalsecs/ks {howlong abbrev} {
        return "${howlong}s"
     } else {
        if {$howlong < 1000000} {
-           set pfx k
+           set pfx ks
            set scale 1000
        } else {
-           set pfx M
+           set pfx Ms
            set scale 1000000
        }
        set value [expr "$howlong.0 / $scale"]
-       foreach {min format} {100 %.0f 10 %.1f 1 %.2f} {
-           if {$value < $min} continue
-           return [format "$format${pfx}s" $value]
-       }
+       return [formatsf $pfx $value]
     }
 }