/* htop - UptimeMeter.c (C) 2004-2011 Hisham H. Muhammad Released under the GNU GPLv2, see the COPYING file in the source distribution for its full text. */ #include "UptimeMeter.h" #include "CRT.h" #include "Object.h" #include "Platform.h" #include "XUtils.h" static const int UptimeMeter_attributes[] = { UPTIME }; static void UptimeMeter_updateValues(Meter* this) { int totalseconds = Platform_getUptime(); if (totalseconds <= 0) { xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "(unknown)"); return; } int seconds = totalseconds % 60; int minutes = (totalseconds / 60) % 60; int hours = (totalseconds / 3600) % 24; int days = (totalseconds / 86400); this->values[0] = days; if (days > this->total) { this->total = days; } char daysbuf[32]; if (days > 100) { xSnprintf(daysbuf, sizeof(daysbuf), "%d days(!), ", days); } else if (days > 1) { xSnprintf(daysbuf, sizeof(daysbuf), "%d days, ", days); } else if (days == 1) { xSnprintf(daysbuf, sizeof(daysbuf), "1 day, "); } else { daysbuf[0] = '\0'; } xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%s%02d:%02d:%02d", daysbuf, hours, minutes, seconds); } const MeterClass UptimeMeter_class = { .super = { .extends = Class(Meter), .delete = Meter_delete }, .updateValues = UptimeMeter_updateValues, .defaultMode = TEXT_METERMODE, .maxItems = 1, .total = 100.0, .attributes = UptimeMeter_attributes, .name = "Uptime", .uiName = "Uptime", .caption = "Uptime: " };