Rename state to app and furhter cleanups
[pstop.git] / lib / common.go
index c04aab9..d93f776 100644 (file)
@@ -9,8 +9,11 @@ import (
 )
 
 const (
-       myname = "pstop"
+       myname    = "pstop"
        copyright = "Copyright (C) 2014 Simon J Mudd <sjmudd@pobox.com>"
+       i_1024_2  = 1024 * 1024
+       i_1024_3  = 1024 * 1024 * 1024
+       i_1024_4  = 1024 * 1024 * 1024 * 1024
 )
 
 // myround converts this floating value to the right width etc.
@@ -32,7 +35,7 @@ func Copyright() string {
 
 // sec_to_time() converts a number of hours, minutes and seconds into hh:mm:ss format.
 // e.g. 7384 = 2h 3m 4s, 7200 + 180 + 4
-func sec_to_time(d int) string {
+func sec_to_time(d uint64) string {
        hours := d / 3600                // integer value
        minutes := (d - hours*3600) / 60 // integer value
        seconds := d - hours*3600 - minutes*60
@@ -40,11 +43,20 @@ func sec_to_time(d int) string {
        return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)
 }
 
-// FormatTime is based on sys.format_time. It 
+// similar to sec_to_time() spaces if 0 and takes seconds as input.
+func FormatSeconds(seconds uint64) string {
+       if seconds == 0 {
+               return "        "
+       } else {
+               return sec_to_time(seconds)
+       }
+}
+
+// FormatTime is based on sys.format_time. It
 // formats to 10 characters including space and suffix.
 // All values have 2 decimal places. Zero is returned as
 // an empty string.
-func FormatTime(picoseconds int) string {
+func FormatTime(picoseconds uint64) string {
        if picoseconds == 0 {
                return ""
        }
@@ -91,7 +103,7 @@ func FormatPct(pct float64) string {
 // For values = 0 return an empty string.
 // For values < 1000 show 6,2 decimal places.
 // For values >= 1000 show 6,1 decimal place.
-func FormatAmount(amount int) string {
+func FormatAmount(amount uint64) string {
        var suffix string
        var formatted string
        var decimal_amount float64
@@ -100,18 +112,18 @@ func FormatAmount(amount int) string {
                return ""
        }
        if amount <= 1024 {
-               return strconv.Itoa(amount)
+               return strconv.Itoa(int(amount))
        }
 
-       if amount > (1024 * 1024 * 1024 * 1024) {
+       if amount > i_1024_4 {
                suffix = "P"
-               decimal_amount = float64(amount) / 1024 / 1024 / 1024 / 1024
-       } else if amount > (1024 * 1024 * 1024) {
+               decimal_amount = float64(amount) / i_1024_4
+       } else if amount > i_1024_3 {
                suffix = "G"
-               decimal_amount = float64(amount) / 1024 / 1024 / 1024
-       } else if amount > (1024 * 1024) {
+               decimal_amount = float64(amount) / i_1024_3
+       } else if amount > i_1024_2 {
                suffix = "M"
-               decimal_amount = float64(amount) / 1024 / 1024
+               decimal_amount = float64(amount) / i_1024_2
        } else if amount > 1024 {
                suffix = "k"
                decimal_amount = float64(amount) / 1024
@@ -125,8 +137,19 @@ func FormatAmount(amount int) string {
        return formatted
 }
 
+// like Amount but tigher in space
+func FormatCounter(counter int, width int) string {
+       if counter == 0 {
+               pattern := "%" + fmt.Sprintf("%d", width) + "s"
+               return fmt.Sprintf(pattern, " ")
+       } else {
+               pattern := "%" + fmt.Sprintf("%d", width) + "d"
+               return fmt.Sprintf(pattern, counter)
+       }
+}
+
 // MyDivide() divides a by b except if b is 0 in which case we return 0.
-func MyDivide(a int, b int) float64 {
+func MyDivide(a uint64, b uint64) float64 {
        if b == 0 {
                return float64(0)
        } else {