SMP fix, speed, hide IO-wait, dumb/VT510 terms
This commit is contained in:
parent
33023bbf34
commit
80a7f3ff35
@ -171,7 +171,7 @@ Thanks.
|
|||||||
read those lines | case 5: case 6: case 7: case:
|
read those lines | case 5: case 6: case 7: case:
|
||||||
from the LEFT to | cap = Curwin->captab[(int:
|
from the LEFT to | cap = Curwin->captab[(int:
|
||||||
the RIGHT? This | *sub_end = '\0'; :
|
the RIGHT? This | *sub_end = '\0'; :
|
||||||
"innovation" may | printf("%s%.*s%s", cap, r:
|
"innovation" may | PUTP("%s%.*s%s", cap, roo:
|
||||||
possibly benefit | room -= (sub_end - sub_be:
|
possibly benefit | room -= (sub_end - sub_be:
|
||||||
those particular | sub_beg = ++sub_end; :
|
those particular | sub_beg = ++sub_end; :
|
||||||
kinds of people, | break; :
|
kinds of people, | break; :
|
||||||
@ -241,9 +241,11 @@ Enjoy...
|
|||||||
//#define CASEUP_SCALE /* show scaled time/num suffix upper case */
|
//#define CASEUP_SCALE /* show scaled time/num suffix upper case */
|
||||||
//#define CASEUP_SUMMK /* show memory summary kilobytes with 'K' */
|
//#define CASEUP_SUMMK /* show memory summary kilobytes with 'K' */
|
||||||
//#define POSIX_CMDLIN /* use '[ ]' for kernel threads, not '( )' */
|
//#define POSIX_CMDLIN /* use '[ ]' for kernel threads, not '( )' */
|
||||||
|
//#define PRETEND2_5_X /* pretend we're linux 2.5.x (for IO-wait) */
|
||||||
//#define PRETEND4CPUS /* pretend we're smp with 4 ticsers (sic) */
|
//#define PRETEND4CPUS /* pretend we're smp with 4 ticsers (sic) */
|
||||||
//#define PRETENDNOCAP /* use a terminal without essential caps */
|
//#define PRETENDNOCAP /* use a terminal without essential caps */
|
||||||
//#define SORT_SUPRESS /* *attempt* to reduce qsort overhead */
|
//#define SORT_SUPRESS /* *attempt* to reduce qsort overhead */
|
||||||
//#define USE_LIB_STA3 /* use lib status (3 ch) vs. proc_t (1 ch) */
|
//#define USE_LIB_STA3 /* use lib status (3 ch) vs. proc_t (1 ch) */
|
||||||
|
//#define YIELDCPU_OFF /* hang on tight, DON'T issue sched_yield */
|
||||||
//#define WARN_NOT_SMP /* restrict '1' & 'I' commands to true smp */
|
//#define WARN_NOT_SMP /* restrict '1' & 'I' commands to true smp */
|
||||||
|
|
||||||
|
@ -405,10 +405,10 @@ static int pr_fname(void){
|
|||||||
|
|
||||||
/* elapsed wall clock time, [[dd-]hh:]mm:ss format (not same as "time") */
|
/* elapsed wall clock time, [[dd-]hh:]mm:ss format (not same as "time") */
|
||||||
static int pr_etime(void){
|
static int pr_etime(void){
|
||||||
unsigned long long t;
|
unsigned long t;
|
||||||
unsigned dd,hh,mm,ss;
|
unsigned dd,hh,mm,ss;
|
||||||
char *cp = outbuf;
|
char *cp = outbuf;
|
||||||
t = seconds_since_boot - pp->start_time / Hertz;
|
t = seconds_since_boot - (unsigned long)(pp->start_time / Hertz);
|
||||||
ss = t%60;
|
ss = t%60;
|
||||||
t /= 60;
|
t /= 60;
|
||||||
mm = t%60;
|
mm = t%60;
|
||||||
@ -475,7 +475,7 @@ static int pr_ppid(void){
|
|||||||
|
|
||||||
/* cumulative CPU time, [dd-]hh:mm:ss format (not same as "etime") */
|
/* cumulative CPU time, [dd-]hh:mm:ss format (not same as "etime") */
|
||||||
static int pr_time(void){
|
static int pr_time(void){
|
||||||
unsigned long long t;
|
unsigned long t;
|
||||||
unsigned dd,hh,mm,ss;
|
unsigned dd,hh,mm,ss;
|
||||||
int c;
|
int c;
|
||||||
t = (pp->utime + pp->stime) / Hertz;
|
t = (pp->utime + pp->stime) / Hertz;
|
||||||
|
37
top.1
37
top.1
@ -147,7 +147,6 @@ and used when reading and writing a \*(CF.
|
|||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
.SH 0. OVERVIEW, Documentation and Operation
|
.SH 0. OVERVIEW, Documentation and Operation
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
.Scr
|
|
||||||
Listed below are the remaining topics in this document.
|
Listed below are the remaining topics in this document.
|
||||||
Be advised that none of these topics need be read now, or studied later,
|
Be advised that none of these topics need be read now, or studied later,
|
||||||
for a successful\fB close-encounter-of-the-1st-kind\fR with \*(Us.
|
for a successful\fB close-encounter-of-the-1st-kind\fR with \*(Us.
|
||||||
@ -155,9 +154,9 @@ for a successful\fB close-encounter-of-the-1st-kind\fR with \*(Us.
|
|||||||
You need remember just the\fB help key\fR ('h' or '?') to survive
|
You need remember just the\fB help key\fR ('h' or '?') to survive
|
||||||
\*(EM nay, prosper!
|
\*(EM nay, prosper!
|
||||||
What about quitting, you ask?
|
What about quitting, you ask?
|
||||||
Well, of course there's the 'q' \*(CI, but then \*(Me does quite well
|
Well, of course there's the 'q' \*(CI, but \*(Me does quite well
|
||||||
with\fB signals\fR.
|
with\fB signals\fR.
|
||||||
So just zap him with the traditional \fI^C\fR when you're done.
|
So just zap him with a \fI^C\fR when you're done.
|
||||||
.br
|
.br
|
||||||
Oh, almost forgot...
|
Oh, almost forgot...
|
||||||
|
|
||||||
@ -189,7 +188,7 @@ Remaining Table of Contents
|
|||||||
a. SYSTEM Configuration File
|
a. SYSTEM Configuration File
|
||||||
b. PERSONAL Configuration File
|
b. PERSONAL Configuration File
|
||||||
6.\fB DIFFERENCES / New Features\fR
|
6.\fB DIFFERENCES / New Features\fR
|
||||||
a. User Interface Etiquette
|
a. Interface Etiquette
|
||||||
b. Expanded Configurable Display Support
|
b. Expanded Configurable Display Support
|
||||||
c. Enhanced Field/Column Management
|
c. Enhanced Field/Column Management
|
||||||
d. Customization Flexibility
|
d. Customization Flexibility
|
||||||
@ -200,14 +199,15 @@ Remaining Table of Contents
|
|||||||
lastly,\fB the usual\fR...
|
lastly,\fB the usual\fR...
|
||||||
8. BUGS, 9. HISTORY Former top, 10. AUTHOR, 11. SEE ALSO
|
8. BUGS, 9. HISTORY Former top, 10. AUTHOR, 11. SEE ALSO
|
||||||
|
|
||||||
.Scr
|
.PP
|
||||||
When you start \*(Us for the first time, you'll be presented with the
|
When you start \*(Us for the first time, you'll be presented with the
|
||||||
traditional screen elements: 1) Summary Area; 2) Message/Prompt Line;
|
traditional screen elements: 1) Summary Area; 2) Message/Prompt Line;
|
||||||
3) Columns Header; 4) Task Area.
|
3) Columns Header; 4) Task Area.
|
||||||
But even out-of-the-box, there are numerous subtle differences, compared to
|
But even out-of-the-box, there are numerous subtle differences, compared to
|
||||||
the former top.
|
the former top.
|
||||||
|
|
||||||
.SS Highlighting
|
.TP 3
|
||||||
|
.B Highlighting
|
||||||
.I Summary_Area\fR:
|
.I Summary_Area\fR:
|
||||||
It's retina-friendly with\fB no\fR highlighting for load/uptime and
|
It's retina-friendly with\fB no\fR highlighting for load/uptime and
|
||||||
only\fB values\fR highlighted for other elements.
|
only\fB values\fR highlighted for other elements.
|
||||||
@ -216,9 +216,10 @@ only\fB values\fR highlighted for other elements.
|
|||||||
Tasks\fB running\fR (or ready to run) will be highlighted, and bold is
|
Tasks\fB running\fR (or ready to run) will be highlighted, and bold is
|
||||||
only one way of emphasizing such processes.
|
only one way of emphasizing such processes.
|
||||||
|
|
||||||
.SS Content/Labels
|
.TP 3
|
||||||
|
.B Content/Labels
|
||||||
.I Summary_Area\fR:
|
.I Summary_Area\fR:
|
||||||
The program\fB name\fR is shown (symlinks/aliases, remember?).
|
The program\fB name\fR is shown (perhaps a symlink/alias).
|
||||||
The Cpu\fI(s)\fR state\fR\fB label\fR hints at other possibilities (smp folks,
|
The Cpu\fI(s)\fR state\fR\fB label\fR hints at other possibilities (smp folks,
|
||||||
stand by).
|
stand by).
|
||||||
The\fB memory\fR stats use a lower case '\fBk\fR' (making numbers and letters
|
The\fB memory\fR stats use a lower case '\fBk\fR' (making numbers and letters
|
||||||
@ -228,7 +229,7 @@ more distinct).
|
|||||||
Shows a\fB new\fR field and some\fB changed\fR labels (unseen to the right).
|
Shows a\fB new\fR field and some\fB changed\fR labels (unseen to the right).
|
||||||
Precious horizontal space is no longer squandered.
|
Precious horizontal space is no longer squandered.
|
||||||
|
|
||||||
.Scr
|
.PP
|
||||||
All of that, however, is just the tip of the old iceberg.
|
All of that, however, is just the tip of the old iceberg.
|
||||||
So please, do not touch that dial!
|
So please, do not touch that dial!
|
||||||
You may, however, peruse the following screen representation before we
|
You may, however, peruse the following screen representation before we
|
||||||
@ -263,7 +264,7 @@ acknowledge \*(Us's default settings ...
|
|||||||
+\fB--------------------------------------\fR+
|
+\fB--------------------------------------\fR+
|
||||||
.Rje
|
.Rje
|
||||||
|
|
||||||
.Scr
|
.PP
|
||||||
Within the following categories, \*(Us's startup defaults are documented
|
Within the following categories, \*(Us's startup defaults are documented
|
||||||
assuming no \*(CF, thus no user customizations.
|
assuming no \*(CF, thus no user customizations.
|
||||||
However, items shown with an \*(AS could be overridden through the\fB
|
However, items shown with an \*(AS could be overridden through the\fB
|
||||||
@ -1436,12 +1437,14 @@ personal \*(CF to the current directory, subject to permissions.
|
|||||||
.SH 6. DIFFERENCES / New Features
|
.SH 6. DIFFERENCES / New Features
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
The following summarizes differences between \*(US and your former \*(Me.
|
The following summarizes differences between \*(US and your former \*(Me.
|
||||||
It was based on procps-2.0.7.
|
It was originally based on procps-2.0.7.
|
||||||
|
However, except for the separate/summary \*(PU toggle, all of these
|
||||||
|
differences also apply through procps-2.0.10.
|
||||||
|
|
||||||
.\" ......................................................................
|
.\" ......................................................................
|
||||||
.SS 6a. User Interface Etiquette
|
.SS 6a. Interface Etiquette
|
||||||
.New
|
.New
|
||||||
Input and output are more carefully implemented.
|
Input and output are far more carefully implemented in \*(Us.
|
||||||
You won't be subjected to 4 - 5 'Unknown command' messages should you press the
|
You won't be subjected to 4 - 5 'Unknown command' messages should you press the
|
||||||
wrong key.
|
wrong key.
|
||||||
|
|
||||||
@ -1457,11 +1460,15 @@ The Help screen will no longer overflow, even when running with a
|
|||||||
The fields selection/ordering screens do not carelessly destroy important
|
The fields selection/ordering screens do not carelessly destroy important
|
||||||
information through unintended line wraps.
|
information through unintended line wraps.
|
||||||
|
|
||||||
|
.New
|
||||||
|
Should you narrow a xterm window to less than 80 columns while \*(Us is
|
||||||
|
running, you will not be left with an utterly worthless, embarrassing display.
|
||||||
|
|
||||||
.\" ......................................................................
|
.\" ......................................................................
|
||||||
.SS 6b. Expanded Configurable Display Support
|
.SS 6b. Expanded Configurable Display Support
|
||||||
.New
|
.New
|
||||||
With \*(Us, you can alternate between a\fB summary\fR display or one
|
In an SMP environment, you can choose between a\fB summary\fR display or
|
||||||
showing\fB each \*(Pu\fR separately.
|
you may show\fB each \*(Pu\fR separately.
|
||||||
No longer must this choice be irrevocably made at startup.
|
No longer must this choice be irrevocably made at startup.
|
||||||
|
|
||||||
.New
|
.New
|
||||||
|
294
top.c
294
top.c
@ -23,6 +23,9 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <curses.h>
|
#include <curses.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#ifndef YIELDCPU_OFF
|
||||||
|
#include <sched.h>
|
||||||
|
#endif
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -58,7 +61,7 @@
|
|||||||
#endif
|
#endif
|
||||||
/* need: meminfo stuff */
|
/* need: meminfo stuff */
|
||||||
#include "proc/sysinfo.h"
|
#include "proc/sysinfo.h"
|
||||||
/* need: procps_version */
|
/* need: procps_version + kernel version stuff */
|
||||||
#include "proc/version.h"
|
#include "proc/version.h"
|
||||||
/* need: sprint_uptime */
|
/* need: sprint_uptime */
|
||||||
#include "proc/whattime.h"
|
#include "proc/whattime.h"
|
||||||
@ -84,9 +87,11 @@ static int Page_size;
|
|||||||
static unsigned Mem_pages;
|
static unsigned Mem_pages;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SMP and Irix/Solaris mode support */
|
/* SMP, Irix/Solaris mode, Linux 2.5.xx support */
|
||||||
static int Cpu_tot,
|
static int Cpu_tot,
|
||||||
*Cpu_map;
|
*Cpu_map;
|
||||||
|
/* assume no IO-wait stats, overridden if linux 2.5.41 */
|
||||||
|
static char *States_fmts = STATES_line2x4;
|
||||||
|
|
||||||
/* Specific process id monitoring support */
|
/* Specific process id monitoring support */
|
||||||
static pid_t Monpids [MONPIDMAX] = { 0 };
|
static pid_t Monpids [MONPIDMAX] = { 0 };
|
||||||
@ -151,7 +156,7 @@ static WIN_t *Winstk [GROUPSMAX],
|
|||||||
and/or that would be too cumbersome managed as parms */
|
and/or that would be too cumbersome managed as parms */
|
||||||
static int Frame_maxtask; /* last known number of active tasks */
|
static int Frame_maxtask; /* last known number of active tasks */
|
||||||
/* ie. current 'size' of proc table */
|
/* ie. current 'size' of proc table */
|
||||||
static float Frame_scale; /* so we can '*' vs. '/' IF 'pcpu' */
|
static float Frame_tscale; /* so we can '*' vs. '/' WHEN 'pcpu' */
|
||||||
static int Frame_srtflg, /* the subject window sort direction */
|
static int Frame_srtflg, /* the subject window sort direction */
|
||||||
Frame_ctimes, /* the subject window's ctimes flag */
|
Frame_ctimes, /* the subject window's ctimes flag */
|
||||||
Frame_cmdlin; /* the subject window's cmdlin flag */
|
Frame_cmdlin; /* the subject window's cmdlin flag */
|
||||||
@ -230,7 +235,7 @@ _SC_NUM1(P_FLG, flags)
|
|||||||
/*###### Tiny useful routine(s) ########################################*/
|
/*###### Tiny useful routine(s) ########################################*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This routine isolates ALL user input and ensures that we
|
* This routine isolates ALL user INPUT and ensures that we
|
||||||
* wont be mixing I/O from stdio and low-level read() requests */
|
* wont be mixing I/O from stdio and low-level read() requests */
|
||||||
static int chin (int ech, char *buf, unsigned cnt)
|
static int chin (int ech, char *buf, unsigned cnt)
|
||||||
{
|
{
|
||||||
@ -306,12 +311,15 @@ static void bye_bye (int eno, const char *str)
|
|||||||
#endif
|
#endif
|
||||||
if (!Batch)
|
if (!Batch)
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
|
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
|
||||||
printf("%s%s\n", tg2(0, Screen_rows), Cap_curs_norm);
|
putp(tg2(0, Screen_rows));
|
||||||
|
putp(Cap_curs_norm);
|
||||||
|
putp("\n");
|
||||||
|
|
||||||
#ifdef ATEOJ_REPORT
|
#ifdef ATEOJ_REPORT
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\nbye_bye's Summary report:"
|
"\nbye_bye's Summary report:"
|
||||||
"\n\tProgram"
|
"\n\tProgram"
|
||||||
|
"\n\t Linux version = %u.%u.%u"
|
||||||
"\n\t Page_size = %d, Cpu_tot = %d"
|
"\n\t Page_size = %d, Cpu_tot = %d"
|
||||||
"\n\t %s, using Hertz = %u (%u bytes, %u-bit time)"
|
"\n\t %s, using Hertz = %u (%u bytes, %u-bit time)"
|
||||||
"\n\t sizeof(CPUS_t) = %u, sizeof(HIST_t) = %u (%u HIST_t's/Page)"
|
"\n\t sizeof(CPUS_t) = %u, sizeof(HIST_t) = %u (%u HIST_t's/Page)"
|
||||||
@ -335,6 +343,9 @@ static void bye_bye (int eno, const char *str)
|
|||||||
"\n\t winlines = %d, maxtasks = %d, maxcmdln = %d"
|
"\n\t winlines = %d, maxtasks = %d, maxcmdln = %d"
|
||||||
"\n\t sortindx = %d"
|
"\n\t sortindx = %d"
|
||||||
"\n"
|
"\n"
|
||||||
|
, LINUX_VERSION_MAJOR(linux_version_code)
|
||||||
|
, LINUX_VERSION_MINOR(linux_version_code)
|
||||||
|
, LINUX_VERSION_PATCH(linux_version_code)
|
||||||
, Page_size, Cpu_tot
|
, Page_size, Cpu_tot
|
||||||
, procps_version, (unsigned)Hertz, sizeof(Hertz), sizeof(Hertz) * 8
|
, procps_version, (unsigned)Hertz, sizeof(Hertz), sizeof(Hertz) * 8
|
||||||
, sizeof(CPUS_t), sizeof(HIST_t), Page_size / sizeof(HIST_t)
|
, sizeof(CPUS_t), sizeof(HIST_t), Page_size / sizeof(HIST_t)
|
||||||
@ -390,7 +401,7 @@ static void std_err (const char *str)
|
|||||||
/* we'll use our own buffer so callers can still use fmtmk() and, yes the
|
/* we'll use our own buffer so callers can still use fmtmk() and, yes the
|
||||||
leading tab is not the standard convention, but the standard is wrong
|
leading tab is not the standard convention, but the standard is wrong
|
||||||
-- OUR msg won't get lost in screen clutter, like so many others! */
|
-- OUR msg won't get lost in screen clutter, like so many others! */
|
||||||
sprintf(buf, "\t%s: %s\n", Myname, str);
|
snprintf(buf, sizeof(buf), "\t%s: %s\n", Myname, str);
|
||||||
if (!Ttychanged) {
|
if (!Ttychanged) {
|
||||||
fprintf(stderr, buf);
|
fprintf(stderr, buf);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -409,7 +420,8 @@ static void suspend (int dont_care_sig)
|
|||||||
(void)dont_care_sig;
|
(void)dont_care_sig;
|
||||||
/* reset terminal */
|
/* reset terminal */
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
|
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
|
||||||
printf("%s%s", tg2(0, Screen_rows), Cap_curs_norm);
|
putp(tg2(0, Screen_rows));
|
||||||
|
putp(Cap_curs_norm);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
raise(SIGSTOP);
|
raise(SIGSTOP);
|
||||||
/* later, after SIGCONT... */
|
/* later, after SIGCONT... */
|
||||||
@ -423,7 +435,7 @@ static void suspend (int dont_care_sig)
|
|||||||
/*
|
/*
|
||||||
* Make the appropriate caps/color strings and set some
|
* Make the appropriate caps/color strings and set some
|
||||||
* lengths which are used to distinguish twix the displayed
|
* lengths which are used to distinguish twix the displayed
|
||||||
* columns and an actual printf row!
|
* columns and an actual printed row!
|
||||||
* note: we avoid the use of background color so as to maximize
|
* note: we avoid the use of background color so as to maximize
|
||||||
* compatibility with the user's xterm settings */
|
* compatibility with the user's xterm settings */
|
||||||
static void capsmk (WIN_t *q)
|
static void capsmk (WIN_t *q)
|
||||||
@ -447,7 +459,7 @@ static void capsmk (WIN_t *q)
|
|||||||
strcpy(Cap_home, tIF(cursor_home));
|
strcpy(Cap_home, tIF(cursor_home));
|
||||||
strcpy(Cap_norm, tIF(exit_attribute_mode));
|
strcpy(Cap_norm, tIF(exit_attribute_mode));
|
||||||
strcpy(Cap_reverse, tIF(enter_reverse_mode));
|
strcpy(Cap_reverse, tIF(enter_reverse_mode));
|
||||||
sprintf(Caps_off, "%s%s", Cap_norm, tIF(orig_pair));
|
snprintf(Caps_off, sizeof(Caps_off), "%s%s", Cap_norm, tIF(orig_pair));
|
||||||
if (tgoto(cursor_address, 1, 1)) Cap_can_goto = 1;
|
if (tgoto(cursor_address, 1, 1)) Cap_can_goto = 1;
|
||||||
capsdone = 1;
|
capsdone = 1;
|
||||||
}
|
}
|
||||||
@ -456,13 +468,13 @@ static void capsmk (WIN_t *q)
|
|||||||
the job's done until he/she/it has a change-of-heart */
|
the job's done until he/she/it has a change-of-heart */
|
||||||
if (CHKw(q, Show_COLORS) && max_colors > 0) {
|
if (CHKw(q, Show_COLORS) && max_colors > 0) {
|
||||||
strcpy(q->capclr_sum, tparm(set_a_foreground, q->summclr));
|
strcpy(q->capclr_sum, tparm(set_a_foreground, q->summclr));
|
||||||
sprintf(q->capclr_msg, "%s%s"
|
snprintf(q->capclr_msg, sizeof(q->capclr_msg), "%s%s"
|
||||||
, tparm(set_a_foreground, q->msgsclr), Cap_reverse);
|
, tparm(set_a_foreground, q->msgsclr), Cap_reverse);
|
||||||
sprintf(q->capclr_pmt, "%s%s"
|
snprintf(q->capclr_pmt, sizeof(q->capclr_pmt), "%s%s"
|
||||||
, tparm(set_a_foreground, q->msgsclr), Cap_bold);
|
, tparm(set_a_foreground, q->msgsclr), Cap_bold);
|
||||||
sprintf(q->capclr_hdr, "%s%s"
|
snprintf(q->capclr_hdr, sizeof(q->capclr_hdr), "%s%s"
|
||||||
, tparm(set_a_foreground, q->headclr), Cap_reverse);
|
, tparm(set_a_foreground, q->headclr), Cap_reverse);
|
||||||
sprintf(q->capclr_rownorm, "%s%s"
|
snprintf(q->capclr_rownorm, sizeof(q->capclr_rownorm), "%s%s"
|
||||||
, Caps_off, tparm(set_a_foreground, q->taskclr));
|
, Caps_off, tparm(set_a_foreground, q->taskclr));
|
||||||
} else {
|
} else {
|
||||||
q->capclr_sum[0] = '\0';
|
q->capclr_sum[0] = '\0';
|
||||||
@ -472,7 +484,7 @@ static void capsmk (WIN_t *q)
|
|||||||
strcpy(q->capclr_rownorm, Cap_norm);
|
strcpy(q->capclr_rownorm, Cap_norm);
|
||||||
}
|
}
|
||||||
/* this guy's a composite, so we do him outside the if */
|
/* this guy's a composite, so we do him outside the if */
|
||||||
sprintf(q->capclr_rowhigh, "%s%s"
|
snprintf(q->capclr_rowhigh, sizeof(q->capclr_rowhigh), "%s%s"
|
||||||
, q->capclr_rownorm, CHKw(q, Show_HIBOLD) ? Cap_bold : Cap_reverse);
|
, q->capclr_rownorm, CHKw(q, Show_HIBOLD) ? Cap_bold : Cap_reverse);
|
||||||
q->len_rownorm = strlen(q->capclr_rownorm);
|
q->len_rownorm = strlen(q->capclr_rownorm);
|
||||||
q->len_rowhigh = strlen(q->capclr_rowhigh);
|
q->len_rowhigh = strlen(q->capclr_rowhigh);
|
||||||
@ -496,7 +508,7 @@ static void msg_save (const char *fmts, ...)
|
|||||||
vsnprintf(tmp, sizeof(tmp), fmts, va);
|
vsnprintf(tmp, sizeof(tmp), fmts, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
/* we'll add some extra attention grabbers to whatever this is */
|
/* we'll add some extra attention grabbers to whatever this is */
|
||||||
sprintf(Msg_delayed, "\a*** %s ***", strim(0, tmp));
|
snprintf(Msg_delayed, sizeof(Msg_delayed), "\a*** %s ***", strim(0, tmp));
|
||||||
Msg_awaiting = 1;
|
Msg_awaiting = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,7 +517,7 @@ static void msg_save (const char *fmts, ...)
|
|||||||
* Show an error message (caller may include a '\a' for sound) */
|
* Show an error message (caller may include a '\a' for sound) */
|
||||||
static void show_msg (const char *str)
|
static void show_msg (const char *str)
|
||||||
{
|
{
|
||||||
printf("%s%s %s %s%s"
|
PUTP("%s%s %s %s%s"
|
||||||
, tg2(0, Msg_row)
|
, tg2(0, Msg_row)
|
||||||
, Curwin->capclr_msg
|
, Curwin->capclr_msg
|
||||||
, str
|
, str
|
||||||
@ -521,7 +533,7 @@ static void show_msg (const char *str)
|
|||||||
* Show an input prompt + larger cursor */
|
* Show an input prompt + larger cursor */
|
||||||
static void show_pmt (const char *str)
|
static void show_pmt (const char *str)
|
||||||
{
|
{
|
||||||
printf("%s%s%s: %s%s"
|
PUTP("%s%s%s: %s%s"
|
||||||
, tg2(0, Msg_row)
|
, tg2(0, Msg_row)
|
||||||
, Curwin->capclr_pmt
|
, Curwin->capclr_pmt
|
||||||
, str
|
, str
|
||||||
@ -589,7 +601,7 @@ static void show_special (const char *glob)
|
|||||||
case 5: case 6: case 7: case 8:
|
case 5: case 6: case 7: case 8:
|
||||||
cap = Curwin->captab[(int)*sub_end];
|
cap = Curwin->captab[(int)*sub_end];
|
||||||
*sub_end = '\0';
|
*sub_end = '\0';
|
||||||
printf("%s%.*s%s", cap, room, sub_beg, Caps_off);
|
PUTP("%s%.*s%s", cap, room, sub_beg, Caps_off);
|
||||||
room -= (sub_end - sub_beg);
|
room -= (sub_end - sub_beg);
|
||||||
sub_beg = ++sub_end;
|
sub_beg = ++sub_end;
|
||||||
break;
|
break;
|
||||||
@ -599,14 +611,15 @@ static void show_special (const char *glob)
|
|||||||
if (0 >= room) break; /* skip substrings that won't fit */
|
if (0 >= room) break; /* skip substrings that won't fit */
|
||||||
} /* end: while 'subtrings' */
|
} /* end: while 'subtrings' */
|
||||||
|
|
||||||
printf("%s\n", Cap_clr_eol); /* emulate truncated newline */
|
putp(Cap_clr_eol);
|
||||||
|
putp("\n"); /* emulate truncated newline */
|
||||||
glob = ++lin_end; /* point to next line (maybe) */
|
glob = ++lin_end; /* point to next line (maybe) */
|
||||||
} /* end: while 'lines' */
|
} /* end: while 'lines' */
|
||||||
|
|
||||||
/* if there's anything left in the glob (by virtue of no trailing '\n'),
|
/* if there's anything left in the glob (by virtue of no trailing '\n'),
|
||||||
it probably means caller wants to retain cursor position on this final
|
it probably means caller wants to retain cursor position on this final
|
||||||
line -- ok then, we'll just do our 'fit-to-screen' thingy... */
|
line -- ok then, we'll just do our 'fit-to-screen' thingy... */
|
||||||
if (*glob) printf("%.*s", Screen_cols, glob);
|
if (*glob) PUTP("%.*s", Screen_cols, glob);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,7 +636,6 @@ static char *ask4str (const char *prompt)
|
|||||||
memset(buf, '\0', sizeof(buf));
|
memset(buf, '\0', sizeof(buf));
|
||||||
chin(1, buf, sizeof(buf) - 1);
|
chin(1, buf, sizeof(buf) - 1);
|
||||||
putp(Cap_curs_norm);
|
putp(Cap_curs_norm);
|
||||||
|
|
||||||
return strim(0, buf);
|
return strim(0, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -685,20 +697,18 @@ static const char *scale_num (unsigned num, const int width, const unsigned type
|
|||||||
static char buf[TNYBUFSIZ];
|
static char buf[TNYBUFSIZ];
|
||||||
float *dp;
|
float *dp;
|
||||||
char *up;
|
char *up;
|
||||||
int n;
|
|
||||||
|
|
||||||
/* try an unscaled version first... */
|
/* try an unscaled version first... */
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), "%u", num))
|
if (width >= snprintf(buf, sizeof(buf), "%u", num)) return buf;
|
||||||
&& width >= n) return buf;
|
|
||||||
|
|
||||||
/* now try successively higher types until it fits */
|
/* now try successively higher types until it fits */
|
||||||
for (up = nextup + type, dp = scale; *dp; ++dp, ++up) {
|
for (up = nextup + type, dp = scale; *dp; ++dp, ++up) {
|
||||||
/* the most accurate version */
|
/* the most accurate version */
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), "%.1f%c", num / *dp, *up))
|
if (width >= snprintf(buf, sizeof(buf), "%.1f%c", num / *dp, *up))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
/* the integer version */
|
/* the integer version */
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), "%d%c", (int)(num / *dp), *up))
|
if (width >= snprintf(buf, sizeof(buf), "%d%c", (int)(num / *dp), *up))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
/* well shoot, this outta' fit... */
|
/* well shoot, this outta' fit... */
|
||||||
return "?";
|
return "?";
|
||||||
@ -723,26 +733,25 @@ static const char *scale_tics (TICS_t tics, const int width)
|
|||||||
#endif
|
#endif
|
||||||
static char buf[TNYBUFSIZ];
|
static char buf[TNYBUFSIZ];
|
||||||
unsigned ss;
|
unsigned ss;
|
||||||
int n;
|
|
||||||
TICS_t t = (tics * 100) / (TICS_t)Hertz;
|
TICS_t t = (tics * 100) / (TICS_t)Hertz;
|
||||||
|
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), T1
|
if (width >= snprintf(buf, sizeof(buf), T1
|
||||||
, (unsigned)t / 6000, (unsigned)(t / 100) % 60, (unsigned)t % 100))
|
, (unsigned)t / 6000, (unsigned)(t / 100) % 60, (unsigned)t % 100))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
t /= 100;
|
t /= 100;
|
||||||
ss = t % 60;
|
ss = t % 60;
|
||||||
t /= 60;
|
t /= 60;
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), T2, (unsigned)t, ss))
|
if (width >= snprintf(buf, sizeof(buf), T2, (unsigned)t, ss))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
t /= 60;
|
t /= 60;
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), HH, (unsigned)t))
|
if (width >= snprintf(buf, sizeof(buf), HH, (unsigned)t))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
t /= 24;
|
t /= 24;
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), DD, (unsigned)t))
|
if (width >= snprintf(buf, sizeof(buf), DD, (unsigned)t))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
t /= 7;
|
t /= 7;
|
||||||
if (-1 != (n = snprintf(buf, sizeof(buf), WW, (unsigned)t))
|
if (width >= snprintf(buf, sizeof(buf), WW, (unsigned)t))
|
||||||
&& width >= n) return buf;
|
return buf;
|
||||||
|
|
||||||
/* well shoot, this outta' fit... */
|
/* well shoot, this outta' fit... */
|
||||||
return "?";
|
return "?";
|
||||||
@ -755,45 +764,6 @@ 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
|
* Calculate and the elapsed time since the last update along with the
|
||||||
* scaling factor used in multiplication (vs. division) when calculating
|
* scaling factor used in multiplication (vs. division) when calculating
|
||||||
@ -811,7 +781,7 @@ static void time_elapsed (void)
|
|||||||
oldtimev.tv_sec = timev.tv_sec;
|
oldtimev.tv_sec = timev.tv_sec;
|
||||||
oldtimev.tv_usec = timev.tv_usec;
|
oldtimev.tv_usec = timev.tv_usec;
|
||||||
/* if in Solaris mode, adjust our scaling for all cpus */
|
/* if in Solaris mode, adjust our scaling for all cpus */
|
||||||
Frame_scale = 100.0f / ((float)Hertz * (float)et * (Mode_irixps ? 1 : Cpu_tot));
|
Frame_tscale = 100.0f / ((float)Hertz * (float)et * (Mode_irixps ? 1 : Cpu_tot));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -844,7 +814,7 @@ static void *alloc_r (void *q, unsigned numb)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This guy's modeled on libproc's 'four_cpu_numbers' function except
|
* This guy's modeled on libproc's 'five_cpu_numbers' function except
|
||||||
* we preserve all cpu data in our CPUS_t array which is organized
|
* we preserve all cpu data in our CPUS_t array which is organized
|
||||||
* as follows:
|
* as follows:
|
||||||
* cpus[0] thru cpus[n] == tics for each separate cpu
|
* cpus[0] thru cpus[n] == tics for each separate cpu
|
||||||
@ -875,7 +845,7 @@ static CPUS_t *refreshcpus (CPUS_t *cpus)
|
|||||||
, &cpus[Cpu_tot].u, &cpus[Cpu_tot].n, &cpus[Cpu_tot].s, &cpus[Cpu_tot].i, &cpus[Cpu_tot].w))
|
, &cpus[Cpu_tot].u, &cpus[Cpu_tot].n, &cpus[Cpu_tot].s, &cpus[Cpu_tot].i, &cpus[Cpu_tot].w))
|
||||||
std_err("failed /proc/stat read");
|
std_err("failed /proc/stat read");
|
||||||
/* and just in case we're 2.2.xx compiled without SMP support... */
|
/* and just in case we're 2.2.xx compiled without SMP support... */
|
||||||
memcpy(cpus, &cpus[1], sizeof(CPUS_t));
|
if (1 == Cpu_tot) memcpy(cpus, &cpus[1], sizeof(CPUS_t));
|
||||||
|
|
||||||
/* and now value each separate cpu's tics */
|
/* and now value each separate cpu's tics */
|
||||||
for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) {
|
for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) {
|
||||||
@ -896,17 +866,10 @@ static CPUS_t *refreshcpus (CPUS_t *cpus)
|
|||||||
* This guy's modeled on libproc's 'readproctab' function except
|
* This guy's modeled on libproc's 'readproctab' function except
|
||||||
* we reuse and extend any prior proc_t's. He's been customized
|
* we reuse and extend any prior proc_t's. He's been customized
|
||||||
* for our specific needs and to avoid the use of <stdarg.h> */
|
* for our specific needs and to avoid the use of <stdarg.h> */
|
||||||
static proc_t **refreshprocs (proc_t **tbl)
|
static proc_t **refreshprocs (proc_t **table, int flags)
|
||||||
{
|
{
|
||||||
#define PTRsz sizeof(proc_t *) /* eyeball candy */
|
#define PTRsz sizeof(proc_t *) /* eyeball candy */
|
||||||
#define ENTsz sizeof(proc_t)
|
#define ENTsz sizeof(proc_t)
|
||||||
static int flags = PROC_FILLMEM | PROC_FILLUSR
|
|
||||||
#ifdef UGH_ITS_4_RH
|
|
||||||
| PROC_FILLCMD
|
|
||||||
#else
|
|
||||||
| PROC_FILLGRP | PROC_FILLCOM
|
|
||||||
#endif
|
|
||||||
| PROC_FILLSTATUS | PROC_FILLSTAT;
|
|
||||||
static unsigned savmax = 0; /* first time, Bypass: (i) */
|
static unsigned savmax = 0; /* first time, Bypass: (i) */
|
||||||
proc_t *ptsk = (proc_t *)-1; /* first time, Force: (ii) */
|
proc_t *ptsk = (proc_t *)-1; /* first time, Force: (ii) */
|
||||||
unsigned curmax = 0; /* every time (jeeze) */
|
unsigned curmax = 0; /* every time (jeeze) */
|
||||||
@ -921,34 +884,34 @@ static proc_t **refreshprocs (proc_t **tbl)
|
|||||||
|
|
||||||
/* i) Allocated Chunks: *Existing* table; refresh + reuse */
|
/* i) Allocated Chunks: *Existing* table; refresh + reuse */
|
||||||
while (curmax < savmax) {
|
while (curmax < savmax) {
|
||||||
if (tbl[curmax]->cmdline) {
|
if (table[curmax]->cmdline) {
|
||||||
free(*tbl[curmax]->cmdline);
|
free(*table[curmax]->cmdline);
|
||||||
tbl[curmax]->cmdline = NULL;
|
table[curmax]->cmdline = NULL;
|
||||||
}
|
}
|
||||||
if (!(ptsk = readproc(PT, tbl[curmax]))) break;
|
if (!(ptsk = readproc(PT, table[curmax]))) break;
|
||||||
++curmax;
|
++curmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ii) Unallocated Chunks: *New* or *Existing* table; extend + fill */
|
/* ii) Unallocated Chunks: *New* or *Existing* table; extend + fill */
|
||||||
while (ptsk) {
|
while (ptsk) {
|
||||||
/* realloc as we go, keeping 'tbl' ahead of 'currmax++' */
|
/* realloc as we go, keeping 'table' ahead of 'currmax++' */
|
||||||
tbl = alloc_r(tbl, (curmax + 1) * PTRsz);
|
table = alloc_r(table, (curmax + 1) * PTRsz);
|
||||||
/* here, readproc will allocate the underlying proc_t stg */
|
/* here, readproc will allocate the underlying proc_t stg */
|
||||||
if ((ptsk = readproc(PT, NULL)))
|
if ((ptsk = readproc(PT, NULL)))
|
||||||
tbl[curmax++] = ptsk;
|
table[curmax++] = ptsk;
|
||||||
}
|
}
|
||||||
closeproc(PT);
|
closeproc(PT);
|
||||||
|
|
||||||
/* iii) Chunkless: make 'eot' entry, after possible extension */
|
/* iii) Chunkless: make 'eot' entry, after possible extension */
|
||||||
if (curmax >= savmax) {
|
if (curmax >= savmax) {
|
||||||
tbl = alloc_r(tbl, (curmax + 1) * PTRsz);
|
table = alloc_r(table, (curmax + 1) * PTRsz);
|
||||||
/* here, we must allocate the underlying proc_t stg ourselves */
|
/* here, we must allocate the underlying proc_t stg ourselves */
|
||||||
tbl[curmax] = alloc_c(ENTsz);
|
table[curmax] = alloc_c(ENTsz);
|
||||||
savmax = curmax + 1;
|
savmax = curmax + 1;
|
||||||
}
|
}
|
||||||
/* this frame's end, but not necessarily end of allocated space */
|
/* this frame's end, but not necessarily end of allocated space */
|
||||||
tbl[curmax]->pid = -1;
|
table[curmax]->pid = -1;
|
||||||
return tbl;
|
return table;
|
||||||
|
|
||||||
#undef PTRsz
|
#undef PTRsz
|
||||||
#undef ENTsz
|
#undef ENTsz
|
||||||
@ -981,6 +944,12 @@ static void before (char *me)
|
|||||||
Cpu_map = alloc_r(NULL, sizeof(int) * Cpu_tot);
|
Cpu_map = alloc_r(NULL, sizeof(int) * Cpu_tot);
|
||||||
for (i = 0; i < Cpu_tot; i++)
|
for (i = 0; i < Cpu_tot; i++)
|
||||||
Cpu_map[i] = i;
|
Cpu_map[i] = i;
|
||||||
|
#ifndef PRETEND2_5_X
|
||||||
|
if ( 2 <= LINUX_VERSION_MAJOR(linux_version_code)
|
||||||
|
&& 5 <= LINUX_VERSION_MINOR(linux_version_code)
|
||||||
|
&& 41 <= LINUX_VERSION_PATCH(linux_version_code))
|
||||||
|
#endif
|
||||||
|
States_fmts = STATES_line2x5;
|
||||||
|
|
||||||
/* get virtual page size -- nearing huge! */
|
/* get virtual page size -- nearing huge! */
|
||||||
Page_size = getpagesize();
|
Page_size = getpagesize();
|
||||||
@ -1078,7 +1047,7 @@ static void parse_args (char **args)
|
|||||||
. no deprecated/illegal use of 'breakargv:' with goto
|
. no deprecated/illegal use of 'breakargv:' with goto
|
||||||
. bunched args are actually handled properly and none are ignored
|
. bunched args are actually handled properly and none are ignored
|
||||||
. we tolerate NO whitespace and NO switches -- maybe too tolerant? */
|
. we tolerate NO whitespace and NO switches -- maybe too tolerant? */
|
||||||
static const char *usage =
|
static const char usage[] =
|
||||||
" -hv | -bcisS -d delay -n iterations -p pid [,pid ...]";
|
" -hv | -bcisS -d delay -n iterations -p pid [,pid ...]";
|
||||||
float tmp_delay = MAXFLOAT;
|
float tmp_delay = MAXFLOAT;
|
||||||
char *p;
|
char *p;
|
||||||
@ -1267,8 +1236,7 @@ static void display_fields (const char *fields, const char *xtra)
|
|||||||
/* advance past any leading spaces */
|
/* advance past any leading spaces */
|
||||||
for (p = Fieldstab[i].head; ' ' == *p; ++p)
|
for (p = Fieldstab[i].head; ' ' == *p; ++p)
|
||||||
;
|
;
|
||||||
|
PUTP("%s%s%c %c: %-10s = %s"
|
||||||
printf("%s%s%c %c: %-10s = %s"
|
|
||||||
, tg2((i / rmax) * cmax, (i % rmax) + yRSVD)
|
, tg2((i / rmax) * cmax, (i % rmax) + yRSVD)
|
||||||
, b ? Cap_bold : Cap_norm
|
, b ? Cap_bold : Cap_norm
|
||||||
, b ? '*' : ' '
|
, b ? '*' : ' '
|
||||||
@ -1280,7 +1248,7 @@ static void display_fields (const char *fields, const char *xtra)
|
|||||||
putp(Curwin->capclr_rownorm);
|
putp(Curwin->capclr_rownorm);
|
||||||
while ((p = strchr(xtra, '\n'))) {
|
while ((p = strchr(xtra, '\n'))) {
|
||||||
++i;
|
++i;
|
||||||
printf("%s%.*s"
|
PUTP("%s%.*s"
|
||||||
, tg2((i / rmax) * cmax, (i % rmax) + yRSVD)
|
, tg2((i / rmax) * cmax, (i % rmax) + yRSVD)
|
||||||
, (int)(p - xtra)
|
, (int)(p - xtra)
|
||||||
, xtra);
|
, xtra);
|
||||||
@ -1302,7 +1270,8 @@ static void fields_reorder (void)
|
|||||||
char c, *p;
|
char c, *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf("%s%s", Cap_clr_scr, Cap_curs_huge);
|
putp(Cap_clr_scr);
|
||||||
|
putp(Cap_curs_huge);
|
||||||
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
||||||
do {
|
do {
|
||||||
show_special(fmtmk(FIELDS_current
|
show_special(fmtmk(FIELDS_current
|
||||||
@ -1335,7 +1304,8 @@ static void fields_sort (void)
|
|||||||
|
|
||||||
strcpy(phoney, NUL_FIELDS);
|
strcpy(phoney, NUL_FIELDS);
|
||||||
x = i = Curwin->sortindx;
|
x = i = Curwin->sortindx;
|
||||||
printf("%s%s", Cap_clr_scr, Cap_curs_huge);
|
putp(Cap_clr_scr);
|
||||||
|
putp(Cap_curs_huge);
|
||||||
do {
|
do {
|
||||||
p = phoney + i;
|
p = phoney + i;
|
||||||
*p = toupper(*p);
|
*p = toupper(*p);
|
||||||
@ -1364,7 +1334,8 @@ static void fields_toggle (void)
|
|||||||
char c, *p;
|
char c, *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf("%s%s", Cap_clr_scr, Cap_curs_huge);
|
putp(Cap_clr_scr);
|
||||||
|
putp(Cap_curs_huge);
|
||||||
do {
|
do {
|
||||||
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
||||||
show_special(fmtmk(FIELDS_current
|
show_special(fmtmk(FIELDS_current
|
||||||
@ -1418,7 +1389,8 @@ static void win_colsheads (WIN_t *q)
|
|||||||
/* now we can build the true run-time columns header and format the
|
/* now we can build the true run-time columns header and format the
|
||||||
command column heading if P_CMD is really being displayed --
|
command column heading if P_CMD is really being displayed --
|
||||||
show_a_task is aware of the addition of winnum to the header */
|
show_a_task is aware of the addition of winnum to the header */
|
||||||
sprintf(q->columnhdr, "%s", Mode_altscr ? fmtmk("%d", q->winnum) : "");
|
snprintf(q->columnhdr, sizeof(q->columnhdr), "%s"
|
||||||
|
, Mode_altscr ? fmtmk("%d", q->winnum) : "");
|
||||||
for (i = 0; i < q->maxpflgs; i++) {
|
for (i = 0; i < q->maxpflgs; i++) {
|
||||||
h = Fieldstab[q->procflags[i]].head;
|
h = Fieldstab[q->procflags[i]].head;
|
||||||
/* are we gonna' need the kernel symbol table? */
|
/* are we gonna' need the kernel symbol table? */
|
||||||
@ -1445,13 +1417,21 @@ static void win_colsheads (WIN_t *q)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tell caller if a specific pflag is 'exposing itself' (whoa!) */
|
||||||
|
static inline int win_fldviz (WIN_t *q, PFLG_t flg)
|
||||||
|
{
|
||||||
|
PFLG_t *p = q->procflags + q->maxpflgs - 1;
|
||||||
|
|
||||||
|
while (*p != flg && q->procflags < p) --p;
|
||||||
|
return *p == flg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Value a window's name and make the associated group name. */
|
* Value a window's name and make the associated group name. */
|
||||||
static void win_names (WIN_t *q, const char *name)
|
static void win_names (WIN_t *q, const char *name)
|
||||||
{
|
{
|
||||||
/* these safeguards are totally unnecessary if our caller(s) are
|
|
||||||
internal, they can be trusted -- it's those darn users that we
|
|
||||||
worry 'bout... */
|
|
||||||
sprintf(q->winname, "%.*s", WINNAMSIZ -1, name);
|
sprintf(q->winname, "%.*s", WINNAMSIZ -1, name);
|
||||||
sprintf(q->grpname, "%d:%.*s", q->winnum, WINNAMSIZ -1, name);
|
sprintf(q->grpname, "%d:%.*s", q->winnum, WINNAMSIZ -1, name);
|
||||||
}
|
}
|
||||||
@ -1473,7 +1453,7 @@ static void win_select (char ch)
|
|||||||
case 'a': /* we don't carry 'a' / 'w' in our */
|
case 'a': /* we don't carry 'a' / 'w' in our */
|
||||||
Curwin = Curwin->next; /* pmt - they're here for a good */
|
Curwin = Curwin->next; /* pmt - they're here for a good */
|
||||||
break; /* friend of ours -- wins_colors. */
|
break; /* friend of ours -- wins_colors. */
|
||||||
case 'w': /* (however, those lettrs work via */
|
case 'w': /* (however those letters work via */
|
||||||
Curwin = Curwin->prev; /* the pmt too but gee, end-loser */
|
Curwin = Curwin->prev; /* the pmt too but gee, end-loser */
|
||||||
break; /* should just press the darn key) */
|
break; /* should just press the darn key) */
|
||||||
case '1': case '2':
|
case '1': case '2':
|
||||||
@ -1529,12 +1509,14 @@ static void wins_colors (void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
winsclr(Curwin, 1);
|
winsclr(Curwin, 1);
|
||||||
printf("%s%s", Cap_clr_scr, Cap_curs_huge);
|
putp(Cap_clr_scr);
|
||||||
|
putp(Cap_curs_huge);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
putp(Cap_home);
|
||||||
/* this string is well above ISO C89's minimum requirements! */
|
/* this string is well above ISO C89's minimum requirements! */
|
||||||
show_special(fmtmk(COLOR_help
|
show_special(fmtmk(COLOR_help
|
||||||
, Cap_home, procps_version, Curwin->grpname
|
, procps_version, Curwin->grpname
|
||||||
, CHKw(Curwin, Show_HIBOLD) ? "On" : "Off"
|
, CHKw(Curwin, Show_HIBOLD) ? "On" : "Off"
|
||||||
, CHKw(Curwin, Show_COLORS) ? "On" : "Off"
|
, CHKw(Curwin, Show_COLORS) ? "On" : "Off"
|
||||||
, tgt, clr, Curwin->winname));
|
, tgt, clr, Curwin->winname));
|
||||||
@ -1752,7 +1734,7 @@ static void cpudo (CPUS_t *cpu, const char *pfx)
|
|||||||
|
|
||||||
/* display some kinda' cpu state percentages
|
/* display some kinda' cpu state percentages
|
||||||
(who or what is explained by the passed prefix) */
|
(who or what is explained by the passed prefix) */
|
||||||
show_special(fmtmk(STATES_line2
|
show_special(fmtmk(States_fmts
|
||||||
, pfx
|
, pfx
|
||||||
, (float)u_frme * scale
|
, (float)u_frme * scale
|
||||||
, (float)s_frme * scale
|
, (float)s_frme * scale
|
||||||
@ -1791,7 +1773,6 @@ static void frame_states (proc_t **ppt, int show)
|
|||||||
hist_new = hist_tmp;
|
hist_new = hist_tmp;
|
||||||
|
|
||||||
total = running = sleeping = stopped = zombie = 0;
|
total = running = sleeping = stopped = zombie = 0;
|
||||||
|
|
||||||
time_elapsed();
|
time_elapsed();
|
||||||
|
|
||||||
/* make a pass through the data to get stats */
|
/* make a pass through the data to get stats */
|
||||||
@ -1817,8 +1798,8 @@ static void frame_states (proc_t **ppt, int show)
|
|||||||
}
|
}
|
||||||
if (total+1 >= hist_siz) {
|
if (total+1 >= hist_siz) {
|
||||||
hist_siz = hist_siz * 5 / 4 + 100; // grow by at least 25%
|
hist_siz = hist_siz * 5 / 4 + 100; // grow by at least 25%
|
||||||
hist_sav = alloc_r(hist_sav, sizeof(HIST_t)*hist_siz);
|
hist_sav = alloc_r(hist_sav, sizeof(HIST_t) * hist_siz);
|
||||||
hist_new = alloc_r(hist_new, sizeof(HIST_t)*hist_siz);
|
hist_new = alloc_r(hist_new, sizeof(HIST_t) * hist_siz);
|
||||||
}
|
}
|
||||||
/* calculate time in this process; the sum of user time (utime)
|
/* calculate time in this process; the sum of user time (utime)
|
||||||
+ system time (stime) -- but PLEASE dont waste time and effort on
|
+ system time (stime) -- but PLEASE dont waste time and effort on
|
||||||
@ -1862,7 +1843,7 @@ static void frame_states (proc_t **ppt, int show)
|
|||||||
char tmp[SMLBUFSIZ];
|
char tmp[SMLBUFSIZ];
|
||||||
/* display each cpu's states separately */
|
/* display each cpu's states separately */
|
||||||
for (i = 0; i < Cpu_tot; i++) {
|
for (i = 0; i < Cpu_tot; i++) {
|
||||||
sprintf(tmp, " Cpu%-2d:", Mode_irixps ? i : Cpu_map[i]);
|
snprintf(tmp, sizeof(tmp), " Cpu%-2d:", Mode_irixps ? i : Cpu_map[i]);
|
||||||
cpudo(&smpcpu[i], tmp);
|
cpudo(&smpcpu[i], tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1935,7 +1916,7 @@ static void mkcol (WIN_t *q, PFLG_t idx, int sta, int *pad, char *buf, ...)
|
|||||||
if (!CHKw(q, Show_HICOLS) || q->sortindx != idx) {
|
if (!CHKw(q, Show_HICOLS) || q->sortindx != idx) {
|
||||||
vsprintf(buf, Fieldstab[idx].fmts, va);
|
vsprintf(buf, Fieldstab[idx].fmts, va);
|
||||||
} else {
|
} else {
|
||||||
vsprintf(tmp, Fieldstab[idx].fmts, va);
|
vsnprintf(tmp, sizeof(tmp), Fieldstab[idx].fmts, va);
|
||||||
sprintf(buf, "%s%s", q->capclr_rowhigh, tmp);
|
sprintf(buf, "%s%s", q->capclr_rowhigh, tmp);
|
||||||
*pad += q->len_rowhigh;
|
*pad += q->len_rowhigh;
|
||||||
if (!CHKw(q, Show_HIROWS) || 'R' != sta) {
|
if (!CHKw(q, Show_HIROWS) || 'R' != sta) {
|
||||||
@ -1955,7 +1936,7 @@ static void show_a_task (WIN_t *q, proc_t *task)
|
|||||||
far and away the most frequent and costly part of top's entire job! */
|
far and away the most frequent and costly part of top's entire job! */
|
||||||
#define MKCOL(q,idx,sta,pad,buf,arg...) \
|
#define MKCOL(q,idx,sta,pad,buf,arg...) \
|
||||||
if (!b) \
|
if (!b) \
|
||||||
sprintf(buf, f, ## arg); \
|
snprintf(buf, sizeof(buf), f, ## arg); \
|
||||||
else mkcol(q, idx, sta, pad, buf, ## arg);
|
else mkcol(q, idx, sta, pad, buf, ## arg);
|
||||||
char rbuf[ROWBUFSIZ];
|
char rbuf[ROWBUFSIZ];
|
||||||
int j, x, pad;
|
int j, x, pad;
|
||||||
@ -2018,7 +1999,7 @@ static void show_a_task (WIN_t *q, proc_t *task)
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case P_CPU:
|
case P_CPU:
|
||||||
{ float u = (float)task->pcpu * Frame_scale;
|
{ float u = (float)task->pcpu * Frame_tscale;
|
||||||
|
|
||||||
if (99.9 < u) u = 99.9;
|
if (99.9 < u) u = 99.9;
|
||||||
MKCOL(q, i, a, &pad, cbuf, u);
|
MKCOL(q, i, a, &pad, cbuf, u);
|
||||||
@ -2083,20 +2064,13 @@ static void show_a_task (WIN_t *q, proc_t *task)
|
|||||||
, scale_num(PAGES_2K(task->size - task->resident), w, s));
|
, scale_num(PAGES_2K(task->size - task->resident), w, s));
|
||||||
break;
|
break;
|
||||||
case P_TME:
|
case P_TME:
|
||||||
{ 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:
|
case P_TM2:
|
||||||
{ TICS_t t;
|
{ TICS_t t;
|
||||||
|
|
||||||
t = task->utime + task->stime;
|
t = task->utime + task->stime;
|
||||||
if (CHKw(q, Show_CTIMES))
|
if (CHKw(q, Show_CTIMES))
|
||||||
t += (task->cutime + task->cstime);
|
t += (task->cutime + task->cstime);
|
||||||
MKCOL(q, i, a, &pad, cbuf, format_interval_wide(t));
|
MKCOL(q, i, a, &pad, cbuf, scale_tics(t, w));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case P_TTY:
|
case P_TTY:
|
||||||
@ -2132,10 +2106,8 @@ static void show_a_task (WIN_t *q, proc_t *task)
|
|||||||
strcat(rbuf, cbuf);
|
strcat(rbuf, cbuf);
|
||||||
} /* end: for 'maxpflgs' */
|
} /* end: for 'maxpflgs' */
|
||||||
|
|
||||||
/* This row buffer could be stuffed with parameterized strings.
|
/* This row buffer could be stuffed with parameterized strings... */
|
||||||
We are thus advised to always use tputs/putp, but it works just
|
PUTP("\n%s%.*s%s%s", (CHKw(q, Show_HIROWS) && 'R' == task->state)
|
||||||
fine with good ol' printf... */
|
|
||||||
printf("\n%s%.*s%s%s", (CHKw(q, Show_HIROWS) && 'R' == task->state)
|
|
||||||
? q->capclr_rowhigh : q->capclr_rownorm
|
? q->capclr_rowhigh : q->capclr_rownorm
|
||||||
, Screen_cols + pad
|
, Screen_cols + pad
|
||||||
, rbuf
|
, rbuf
|
||||||
@ -2238,7 +2210,8 @@ static void do_key (unsigned c)
|
|||||||
case '?':
|
case '?':
|
||||||
{ char ch;
|
{ char ch;
|
||||||
|
|
||||||
printf("%s%s", Cap_clr_scr, Cap_curs_huge);
|
putp(Cap_clr_scr);
|
||||||
|
putp(Cap_curs_huge);
|
||||||
/* this string is well above ISO C89's minimum requirements! */
|
/* this string is well above ISO C89's minimum requirements! */
|
||||||
show_special(fmtmk(KEYS_help
|
show_special(fmtmk(KEYS_help
|
||||||
, procps_version
|
, procps_version
|
||||||
@ -2488,11 +2461,31 @@ static void do_key (unsigned c)
|
|||||||
* and then, returning a pointer to the pointers to the proc_t's! */
|
* and then, returning a pointer to the pointers to the proc_t's! */
|
||||||
static proc_t **do_summary (void)
|
static proc_t **do_summary (void)
|
||||||
{
|
{
|
||||||
|
#ifdef UGH_ITS_4_RH
|
||||||
|
#define myCMD PROC_FILLCMD
|
||||||
|
#define myGRP 0
|
||||||
|
#else
|
||||||
|
#define myCMD PROC_FILLCOM
|
||||||
|
#define myGRP PROC_FILLGRP
|
||||||
|
#endif
|
||||||
static proc_t **p_table = NULL;
|
static proc_t **p_table = NULL;
|
||||||
|
int p_flags = PROC_FILLMEM | PROC_FILLSTAT | PROC_FILLSTATUS;
|
||||||
|
WIN_t *w;
|
||||||
|
|
||||||
|
/* first try to minimize the cost of this frame (cross your fingers) */
|
||||||
|
w = Curwin;
|
||||||
|
do {
|
||||||
|
if (!Mode_altscr || CHKw(w, VISIBLE_tsk)) {
|
||||||
|
p_flags |= (CHKw(w, Show_CMDLIN) && win_fldviz(w, P_CMD)) ? myCMD : 0;
|
||||||
|
p_flags |= win_fldviz(w, P_USR) ? PROC_FILLUSR : 0;
|
||||||
|
p_flags |= win_fldviz(w, P_GRP) ? myGRP : 0;
|
||||||
|
}
|
||||||
|
if (Mode_altscr) w = w->next;
|
||||||
|
} while (w != Curwin);
|
||||||
|
|
||||||
if (!p_table) {
|
if (!p_table) {
|
||||||
/* whoa first time, gotta' prime the pump... */
|
/* whoa first time, gotta' prime the pump... */
|
||||||
p_table = refreshprocs(NULL);
|
p_table = refreshprocs(NULL, p_flags);
|
||||||
frame_states(p_table, 0);
|
frame_states(p_table, 0);
|
||||||
putp(Cap_clr_scr);
|
putp(Cap_clr_scr);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
@ -2516,15 +2509,29 @@ static proc_t **do_summary (void)
|
|||||||
/*
|
/*
|
||||||
** Display Tasks and Cpu(s) states and also prime for potential 'pcpu',
|
** Display Tasks and Cpu(s) states and also prime for potential 'pcpu',
|
||||||
** but NO table sort yet -- that's done on a per window basis! */
|
** but NO table sort yet -- that's done on a per window basis! */
|
||||||
p_table = refreshprocs(p_table);
|
p_table = refreshprocs(p_table, p_flags);
|
||||||
frame_states(p_table, CHKw(Curwin, View_STATES));
|
frame_states(p_table, CHKw(Curwin, View_STATES));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Display Memory and Swap space usage */
|
** Display Memory and Swap space usage */
|
||||||
frame_storage();
|
frame_storage();
|
||||||
|
|
||||||
|
#ifndef YIELDCPU_OFF
|
||||||
|
/* jeeze pucker up, it's time to kiss the scheduler's butt...
|
||||||
|
|
||||||
|
Alright Mr. Kernel, that's ENOUGH already. This swell little program
|
||||||
|
is SICK and TIRED of being PUNISHED for its CAREFUL USE of cpu cycles
|
||||||
|
(quite unlike old top who just threw them away). You constantly make
|
||||||
|
me FIGHT my way back up the RUN-QUEUE! Dammit, I am GOOD, regardless
|
||||||
|
of whether your GOODNESS says so. So here's the deal: I'll yield the
|
||||||
|
darn cpu, if you'll promise to re-dispatch me real soon, ok? */
|
||||||
|
sched_yield();
|
||||||
|
#endif
|
||||||
SETw(Curwin, NEWFRAM_cwo);
|
SETw(Curwin, NEWFRAM_cwo);
|
||||||
return p_table;
|
return p_table;
|
||||||
|
|
||||||
|
#undef myCMD
|
||||||
|
#undef myGRP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2543,7 +2550,7 @@ static void do_window (proc_t **ppt, WIN_t *q, int *lscr)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Display Column Headings -- and distract 'em while we sort (maybe) */
|
** Display Column Headings -- and distract 'em while we sort (maybe) */
|
||||||
printf("\n%s%s%s%s", q->capclr_hdr, q->columnhdr, Caps_off, Cap_clr_eol);
|
PUTP("\n%s%s%s%s", q->capclr_hdr, q->columnhdr, Caps_off, Cap_clr_eol);
|
||||||
|
|
||||||
#ifdef SORT_SUPRESS
|
#ifdef SORT_SUPRESS
|
||||||
if (CHKw(Curwin, NEWFRAM_cwo)
|
if (CHKw(Curwin, NEWFRAM_cwo)
|
||||||
@ -2597,7 +2604,6 @@ static void do_window (proc_t **ppt, WIN_t *q, int *lscr)
|
|||||||
* -- i swear that's the whole truth, so-help-me ! */
|
* -- i swear that's the whole truth, so-help-me ! */
|
||||||
static void sohelpme (int wix, int max)
|
static void sohelpme (int wix, int max)
|
||||||
{
|
{
|
||||||
WIN_t *w = Winstk[wix];
|
|
||||||
int i, rsvd, size, wins;
|
int i, rsvd, size, wins;
|
||||||
|
|
||||||
/* calc remaining number of visible windows + total 'user' lines */
|
/* calc remaining number of visible windows + total 'user' lines */
|
||||||
@ -2621,12 +2627,8 @@ static void sohelpme (int wix, int max)
|
|||||||
if (CHKw(Winstk[i], VISIBLE_tsk)) {
|
if (CHKw(Winstk[i], VISIBLE_tsk)) {
|
||||||
Winstk[i]->winlines =
|
Winstk[i]->winlines =
|
||||||
Winstk[i]->maxtasks ? Winstk[i]->maxtasks : size;
|
Winstk[i]->maxtasks ? Winstk[i]->maxtasks : size;
|
||||||
w = Winstk[i];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* award any remaining lines to the screen's last visible window
|
|
||||||
(for the best/most stable display) */
|
|
||||||
w->winlines += (max - wins) % wins;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2682,7 +2684,7 @@ static void so_lets_see_em (void)
|
|||||||
/* clear to end-of-screen (critical if last window is 'idleps off'),
|
/* clear to end-of-screen (critical if last window is 'idleps off'),
|
||||||
then put the cursor in-its-place, and rid us of any prior frame's msg
|
then put the cursor in-its-place, and rid us of any prior frame's msg
|
||||||
(main loop must iterate such that we're always called before sleep) */
|
(main loop must iterate such that we're always called before sleep) */
|
||||||
printf("%s%s%s", Cap_clr_eos, tg2(0, Msg_row), Cap_clr_eol);
|
PUTP("%s%s%s", Cap_clr_eos, tg2(0, Msg_row), Cap_clr_eol);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
top.h
38
top.h
@ -34,8 +34,10 @@
|
|||||||
|
|
||||||
/* Development/Debugging defines ----------------------------------- */
|
/* Development/Debugging defines ----------------------------------- */
|
||||||
//#define ATEOJ_REPORT /* report a bunch of stuff, at end-of-job */
|
//#define ATEOJ_REPORT /* report a bunch of stuff, at end-of-job */
|
||||||
|
//#define PRETEND2_5_X /* pretend we're linux 2.5.x (for IO-wait) */
|
||||||
//#define PRETEND4CPUS /* pretend we're smp with 4 ticsers (sic) */
|
//#define PRETEND4CPUS /* pretend we're smp with 4 ticsers (sic) */
|
||||||
//#define PRETENDNOCAP /* use a terminal without essential caps */
|
//#define PRETENDNOCAP /* use a terminal without essential caps */
|
||||||
|
//#define YIELDCPU_OFF /* hang on tight, DON'T issue sched_yield */
|
||||||
|
|
||||||
|
|
||||||
/*###### Some Miscellaneous constants ##################################*/
|
/*###### Some Miscellaneous constants ##################################*/
|
||||||
@ -107,6 +109,15 @@
|
|||||||
static int sort_ ## f (const proc_t **P, const proc_t **Q) { \
|
static int sort_ ## f (const proc_t **P, const proc_t **Q) { \
|
||||||
return Frame_srtflg * strcmp((*Q)->s, (*P)->s); }
|
return Frame_srtflg * strcmp((*Q)->s, (*P)->s); }
|
||||||
|
|
||||||
|
/* Used to 'inline' those portions of the display requiring formatting
|
||||||
|
while ensuring we won't be blindsided by some whacko terminal's
|
||||||
|
'$<..>' (millesecond delay) lurking in a terminfo string. */
|
||||||
|
#define PUTP(fmt,arg...) do { \
|
||||||
|
char _str[ROWBUFSIZ]; \
|
||||||
|
snprintf(_str, sizeof(_str), fmt, ## arg); \
|
||||||
|
putp(_str); \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
/*------ Special Macros (debug and/or informative) ---------------------*/
|
/*------ Special Macros (debug and/or informative) ---------------------*/
|
||||||
|
|
||||||
/* Orderly end, with any sort of message - see fmtmk */
|
/* Orderly end, with any sort of message - see fmtmk */
|
||||||
@ -318,25 +329,21 @@ typedef struct win {
|
|||||||
#define LOADAV_line "%s -%s\n"
|
#define LOADAV_line "%s -%s\n"
|
||||||
#define LOADAV_line_alt "%s\06 -%s\n"
|
#define LOADAV_line_alt "%s\06 -%s\n"
|
||||||
#define STATES_line1 "Tasks:\03" \
|
#define STATES_line1 "Tasks:\03" \
|
||||||
" %3u \02total,\03 %3u \02running,\03 %3u \02sleeping,\03" \
|
" %3u \02total,\03 %3u \02running,\03 %3u \02sleeping,\03 %3u \02stopped,\03 %3u \02zombie\03\n"
|
||||||
" %3u \02stopped,\03 %3u \02zombie\03\n"
|
#define STATES_line2x4 "%s\03" \
|
||||||
#define STATES_line2 "%s\03" \
|
" %#5.1f%% \02user,\03 %#5.1f%% \02system,\03 %#5.1f%% \02nice,\03 %#5.1f%% \02idle\03\n"
|
||||||
" %#5.1f%% \02user,\03 %#5.1f%% \02system,\03" \
|
#define STATES_line2x5 "%s\03" \
|
||||||
" %#5.1f%% \02nice,\03 %#5.1f%% \02idle,\03 %#5.1f%% \02IO-wait\03\n"
|
" %#5.1f%% \02user,\03 %#5.1f%% \02system,\03 %#5.1f%% \02nice,\03 %#5.1f%% \02idle,\03 %#5.1f%% \02IO-wait\03\n"
|
||||||
#ifdef CASEUP_SUMMK
|
#ifdef CASEUP_SUMMK
|
||||||
#define MEMORY_line1 "Mem: \03" \
|
#define MEMORY_line1 "Mem: \03" \
|
||||||
" %8uK \02total,\03 %8uK \02used,\03" \
|
" %8uK \02total,\03 %8uK \02used,\03 %8uK \02free,\03 %8uK \02buffers\03\n"
|
||||||
" %8uK \02free,\03 %8uK \02buffers\03\n"
|
|
||||||
#define MEMORY_line2 "Swap:\03" \
|
#define MEMORY_line2 "Swap:\03" \
|
||||||
" %8uK \02total,\03 %8uK \02used,\03" \
|
" %8uK \02total,\03 %8uK \02used,\03 %8uK \02free,\03 %8uK \02cached\03\n"
|
||||||
" %8uK \02free,\03 %8uK \02cached\03\n"
|
|
||||||
#else
|
#else
|
||||||
#define MEMORY_line1 "Mem: \03" \
|
#define MEMORY_line1 "Mem: \03" \
|
||||||
" %8uk \02total,\03 %8uk \02used,\03" \
|
" %8uk \02total,\03 %8uk \02used,\03 %8uk \02free,\03 %8uk \02buffers\03\n"
|
||||||
" %8uk \02free,\03 %8uk \02buffers\03\n"
|
|
||||||
#define MEMORY_line2 "Swap:\03" \
|
#define MEMORY_line2 "Swap:\03" \
|
||||||
" %8uk \02total,\03 %8uk \02used,\03" \
|
" %8uk \02total,\03 %8uk \02used,\03 %8uk \02free,\03 %8uk \02cached\03\n"
|
||||||
" %8uk \02free,\03 %8uk \02cached\03\n"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Keyboard Help specially formatted string(s) --
|
/* Keyboard Help specially formatted string(s) --
|
||||||
@ -435,7 +442,7 @@ typedef struct win {
|
|||||||
/* Colors Help specially formatted string(s) --
|
/* Colors Help specially formatted string(s) --
|
||||||
see 'show_special' for syntax details + other cautions. */
|
see 'show_special' for syntax details + other cautions. */
|
||||||
#define COLOR_help \
|
#define COLOR_help \
|
||||||
"%sHelp for color mapping\02 - %s\n" \
|
"Help for color mapping\02 - %s\n" \
|
||||||
"current window: \01%s\06\n" \
|
"current window: \01%s\06\n" \
|
||||||
"\n" \
|
"\n" \
|
||||||
" color -\03 04:25:44 up 8 days, 50 min, 7 users, load average:\n" \
|
" color -\03 04:25:44 up 8 days, 50 min, 7 users, load average:\n" \
|
||||||
@ -526,7 +533,7 @@ typedef struct win {
|
|||||||
//atic void *alloc_c (unsigned numb);
|
//atic void *alloc_c (unsigned numb);
|
||||||
//atic void *alloc_r (void *q, unsigned numb);
|
//atic void *alloc_r (void *q, unsigned numb);
|
||||||
//atic CPUS_t *refreshcpus (CPUS_t *cpus);
|
//atic CPUS_t *refreshcpus (CPUS_t *cpus);
|
||||||
//atic proc_t **refreshprocs (proc_t **tbl);
|
//atic proc_t **refreshprocs (proc_t **table, int flags);
|
||||||
/*------ Startup routines ----------------------------------------------*/
|
/*------ Startup routines ----------------------------------------------*/
|
||||||
//atic void before (char *me);
|
//atic void before (char *me);
|
||||||
//atic void configs_read (void);
|
//atic void configs_read (void);
|
||||||
@ -540,6 +547,7 @@ typedef struct win {
|
|||||||
//atic void fields_toggle (void);
|
//atic void fields_toggle (void);
|
||||||
/*------ Windows/Field Groups support ----------------------------------*/
|
/*------ Windows/Field Groups support ----------------------------------*/
|
||||||
//atic void win_colsheads (WIN_t *q);
|
//atic void win_colsheads (WIN_t *q);
|
||||||
|
//atic inline int win_fldviz (WIN_t *q, int flg);
|
||||||
//atic void win_names (WIN_t *q, const char *name);
|
//atic void win_names (WIN_t *q, const char *name);
|
||||||
//atic void win_select (char ch);
|
//atic void win_select (char ch);
|
||||||
//atic int win_warn (void);
|
//atic int win_warn (void);
|
||||||
|
Loading…
Reference in New Issue
Block a user