X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=ui_common.c;h=dcf66466fda42e780de65a5302c8d97e279819d1;hb=refs%2Fheads%2Fpps-accounting;hp=a4d4ba0e63735bf88da663c3fd1e6e92f201be77;hpb=ee672060787e3f7023ff0d99f9c546a034bd89bf;p=iftop.git diff --git a/ui_common.c b/ui_common.c index a4d4ba0..dcf6646 100644 --- a/ui_common.c +++ b/ui_common.c @@ -21,8 +21,11 @@ int history_divs[HISTORY_DIVISIONS] = {1, 5, 20}; #define UNIT_DIVISIONS 4 -char* unit_bits[UNIT_DIVISIONS] = { "b", "Kb", "Mb", "Gb"}; -char* unit_bytes[UNIT_DIVISIONS] = { "B", "KB", "MB", "GB"}; +char* unit_disp[][UNIT_DIVISIONS] = { + [OPTION_BW_BITS] = { "b", "Kb", "Mb", "Gb"}, + [OPTION_BW_BYTES] = { "B", "KB", "MB", "GB"}, + [OPTION_BW_PKTS] = { "p", "Kp", "Mp", "GB"}, +}; extern hash_type* history; extern int history_pos; @@ -121,29 +124,34 @@ int screen_line_compare(void* a, void* b) { /* * Format a data size in human-readable format */ -void readable_size(float n, char* buf, int bsize, int ksize, int bytes) { +void readable_size(float n, char* buf, int bsize, int ksize, + option_bw_unit_t unit) { int i = 0; float size = 1; /* Convert to bits? */ - if(bytes == 0) { + if (unit == OPTION_BW_BITS) { n *= 8; } + /* Force power of ten for pps */ + if (unit == OPTION_BW_PKTS) + ksize = 1000; + while(1) { if(n < size * 1000 || i >= UNIT_DIVISIONS - 1) { - snprintf(buf, bsize, " %4.0f%s", n / size, bytes ? unit_bytes[i] : unit_bits[i]); + snprintf(buf, bsize, " %4.0f%s", n / size, unit_disp[unit][i]); break; } i++; size *= ksize; if(n < size * 10) { - snprintf(buf, bsize, " %4.2f%s", n / size, bytes ? unit_bytes[i] : unit_bits[i]); + snprintf(buf, bsize, " %4.2f%s", n / size, unit_disp[unit][i]); break; } else if(n < size * 100) { - snprintf(buf, bsize, " %4.1f%s", n / size, bytes ? unit_bytes[i] : unit_bits[i]); + snprintf(buf, bsize, " %4.1f%s", n / size, unit_disp[unit][i]); break; } }