]> granicus.if.org Git - procps-ng/commitdiff
format_interval_wide
authoralbert <>
Tue, 15 Oct 2002 01:43:21 +0000 (01:43 +0000)
committeralbert <>
Tue, 15 Oct 2002 01:43:21 +0000 (01:43 +0000)
proc/version.c
proc/version.h
top.c

index 6410bf0e278e11ab2ea13adfdb57c7daec6d204b..277a0e9b09657844e4aec5403ac64de200e3b2f3 100644 (file)
@@ -12,9 +12,9 @@
 #include "version.h"
 
 #ifdef MINORVERSION
-char procps_version[] = "procps version " VERSION "." SUBVERSION "." MINORVERSION;
+const char procps_version[] = "procps version " VERSION "." SUBVERSION "." MINORVERSION;
 #else
-char procps_version[] = "procps version " VERSION ;
+const char procps_version[] = "procps version " VERSION "." SUBVERSION;
 #endif
 
 void display_version(void) {
index 7b58cdbcfcb6f5f66507f402d2b033a2266d848f..6a93d8938008fda150f609733703d1d104d6d979 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 extern void display_version(void);     /* display suite version */
-extern char procps_version[];          /* global buf for suite version */
+extern const char procps_version[];            /* global buf for suite version */
 
 extern int linux_version_code;         /* runtime version of LINUX_VERSION_CODE
                                           in /usr/include/linux/version.h */
diff --git a/top.c b/top.c
index 1e7e8486729ab42ca54bdbc315a06d2e05dc23fa..c64943344a296c463d23dd6b8f14c3018f149c3e 100644 (file)
--- a/top.c
+++ b/top.c
@@ -755,6 +755,45 @@ static const char *scale_tics (TICS_t tics, const int width)
 }
 
 
+static const char *format_interval_wide(unsigned long long tick64)
+{
+   static char buf[TNYBUFSIZ];
+   unsigned day, hr, min, sec;
+
+   if( sizeof(long)==4 && (tick64>>32) ){  // if need 64-bit on 32-bit
+      sec = tick64 / Hertz;       // seconds won't overflow 32-bit
+      min = sec/60u;             // total minutes
+   }else{
+      unsigned long hz = Hertz;
+      unsigned long tick = tick64;
+      sec = tick / hz;            // total seconds
+      min = sec/60u;             // total minutes
+      if(min < 120u){    // less than 120 minutes --> use MMM:SS.XX
+         unsigned wee = tick - sec*hz;
+         if(100ul != hz){                  // if jiffies aren't centiseconds
+            if(1000ul == hz) wee /= 10u;
+            else             wee = wee * 100u / hz;
+         }
+         sec = sec - min * 60u;     // seconds past minute
+         snprintf(buf, sizeof buf, "%3u:%02u.%02u", min, sec, wee);
+         return buf;
+      }
+   }   
+   // won't fit in MMM:SS.XX format
+   sec = sec - min * 60u;     // seconds past minute
+   hr  = min / 60u;           // total hours
+   min = min - hr * 60u;      // min past the hour
+   if(hr < 48){
+      snprintf(buf, sizeof buf, "%3u:%02u:%02u", hr, min, sec);
+      return buf;
+   }
+   day = hr / 24u;            // total days
+   hr = hr - day * 24u;       // hours past the day
+   snprintf(buf, sizeof buf, "%3u-%02u:%02u", day, hr, min);
+   return buf;
+}
+
+
         /*
          * Calculate and the elapsed time since the last update along with the
          * scaling factor used in multiplication (vs. division) when calculating
@@ -2044,13 +2083,20 @@ static void show_a_task (WIN_t *q, proc_t *task)
                , scale_num(PAGES_2K(task->size - task->resident), w, s));
             break;
          case P_TME:
-         case P_TM2:
          {  TICS_t t;
 
             t = task->utime + task->stime;
             if (CHKw(q, Show_CTIMES))
                t += (task->cutime + task->cstime);
             MKCOL(q, i, a, &pad, cbuf, scale_tics(t, w));
+         }
+         case P_TM2:
+         {  TICS_t t;
+
+            t = task->utime + task->stime;
+            if (CHKw(q, Show_CTIMES))
+               t += (task->cutime + task->cstime);
+            MKCOL(q, i, a, &pad, cbuf, format_interval_wide(t));
          }
             break;
          case P_TTY: