mirror of
https://github.com/xzeldon/htop.git
synced 2024-12-23 22:55:46 +00:00
make units more dynamic
Signed-off-by: Christian Hesse <mail@eworm.de>
This commit is contained in:
parent
f3a9f5406b
commit
6f58fbc5dd
@ -25,8 +25,16 @@ int MemoryMeter_attributes[] = {
|
||||
};
|
||||
|
||||
static void MemoryMeter_setValues(Meter* this, char* buffer, int size) {
|
||||
int written;
|
||||
Platform_setMemoryValues(this);
|
||||
snprintf(buffer, size, "%ld/%ldM", (long int) this->values[0] / 1024, (long int) this->total / 1024);
|
||||
|
||||
written = Meter_humanUnit(buffer, this->values[0], size);
|
||||
buffer += written;
|
||||
if ((size -= written) > 0) {
|
||||
*buffer++ = '/';
|
||||
size--;
|
||||
Meter_humanUnit(buffer, this->total, size);
|
||||
}
|
||||
}
|
||||
|
||||
static void MemoryMeter_display(Object* cast, RichString* out) {
|
||||
|
28
Meter.c
28
Meter.c
@ -141,6 +141,34 @@ Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type) {
|
||||
return this;
|
||||
}
|
||||
|
||||
int Meter_humanUnit(char* buffer, unsigned long int value, int size) {
|
||||
const char * prefix = "KMGTPEZY";
|
||||
unsigned long int powi = 1;
|
||||
unsigned int written, powj = 1, precision = 2;
|
||||
|
||||
for(;;) {
|
||||
if (value / 1024 < powi)
|
||||
break;
|
||||
|
||||
if (prefix[1] == 0)
|
||||
break;
|
||||
|
||||
powi *= 1024;
|
||||
++prefix;
|
||||
}
|
||||
|
||||
for (; precision > 0; precision--) {
|
||||
powj *= 10;
|
||||
if (value / powi < powj)
|
||||
break;
|
||||
}
|
||||
|
||||
written = snprintf(buffer, size, "%.*f%c",
|
||||
precision, (double) value / powi, *prefix);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
void Meter_delete(Object* cast) {
|
||||
if (!cast)
|
||||
return;
|
||||
|
2
Meter.h
2
Meter.h
@ -105,6 +105,8 @@ extern MeterClass Meter_class;
|
||||
|
||||
Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type);
|
||||
|
||||
int Meter_humanUnit(char* buffer, unsigned long int value, int size);
|
||||
|
||||
void Meter_delete(Object* cast);
|
||||
|
||||
void Meter_setCaption(Meter* this, const char* caption);
|
||||
|
12
SwapMeter.c
12
SwapMeter.c
@ -33,9 +33,17 @@ static void SwapMeter_humanNumber(char* buffer, const long int* value) {
|
||||
sprintf(buffer, "%ldM ", *value / MEGABYTE);
|
||||
}
|
||||
|
||||
static void SwapMeter_setValues(Meter* this, char* buffer, int len) {
|
||||
static void SwapMeter_setValues(Meter* this, char* buffer, int size) {
|
||||
int written;
|
||||
Platform_setSwapValues(this);
|
||||
snprintf(buffer, len, "%ld/%ldM", (long int) this->values[0] / MEGABYTE, (long int) this->total / MEGABYTE);
|
||||
|
||||
written = Meter_humanUnit(buffer, this->values[0], size);
|
||||
buffer += written;
|
||||
if ((size -= written) > 0) {
|
||||
*buffer++ = '/';
|
||||
size--;
|
||||
Meter_humanUnit(buffer, this->total, size);
|
||||
}
|
||||
}
|
||||
|
||||
static void SwapMeter_display(Object* cast, RichString* out) {
|
||||
|
Loading…
Reference in New Issue
Block a user