B toggle, fix t toggle, windowed batch, 3x to 6x faster, out-of-bounds RT as "RT"

This commit is contained in:
albert 2002-11-24 22:04:03 +00:00
parent 94d8204f82
commit d0d827dffe
4 changed files with 566 additions and 491 deletions

View File

@ -51,6 +51,7 @@ separate CPUs, but could easily be changed.
//#define PRETEND4CPUS /* pretend we're smp with 4 ticsers (sic) */
//#define PRETENDNOCAP /* use a terminal without essential caps */
//#define SORT_SUPRESS /* *attempt* to reduce qsort overhead */
//#define STDOUT_IOLBF /* disable our own stdout _IOFBF override */
//#define USE_LIB_STA3 /* use lib status (3 ch) vs. proc_t (1 ch) */
//#define WARN_NOT_SMP /* restrict '1' & 'I' commands to true smp */

98
top.1
View File

@ -185,25 +185,26 @@ Even so, items shown with an \*(AS could be overridden through the
command-line.
\fIGlobal_defaults\fR
'A' - Alt display Off (full-screen)
* 'd' - Delay time 3.0 seconds
'I' - Irix mode On\ \ (no, 'solaris' smp)
* 'p' - PID monitoring Off
* 's' - Secure mode Off (unsecured)
'A' - Alt display Off (full-screen)
* 'd' - Delay time 3.0 seconds
'I' - Irix mode On\ \ (no, 'solaris' smp)
* 'p' - PID monitoring Off
* 's' - Secure mode Off (unsecured)
'B' - Bold disable Off
\fISummary_Area_defaults\fR
'l' - Load Avg/Uptime On\ \ (thus program name)
't' - Task/Cpu state On\ \ (1+1 lines, see '1')
'm' - Mem/Swap stats On\ \ (2 lines worth)
'1' - Single Cpu On\ \ (thus 1 line if smp)
'l' - Load Avg/Uptime On\ \ (thus program name)
't' - Task/Cpu states On\ \ (1+1 lines, see '1')
'm' - Mem/Swap usage On\ \ (2 lines worth)
'1' - Single Cpu On\ \ (thus 1 line if smp)
\fITask_Area_defaults\fR
'b' - Bold hilite On\ \ (not 'reverse')
* 'c' - Command line Off (name, not cmdline)
* 'i' - Idle tasks On\ \ (show all tasks)
'R' - Reverse sort On\ \ (sort pids high-to-low)
* 'S' - Cumulative time Off (exclude dead children)
'x' - Column hilite Off\ (no, sort field)
'y' - Row hilite On\ \ (yes, running tasks)
'z' - color/mono Off\ (no, colors)
'b' - Bold hilite On\ \ (not 'reverse')
* 'c' - Command line Off (name, not cmdline)
* 'i' - Idle tasks On\ \ (show all tasks)
'R' - Reverse sort On\ \ (pids high-to-low)
* 'S' - Cumulative time Off (no, dead children)
'x' - Column hilite Off\ (no, sort field)
'y' - Row hilite On\ \ (yes, running tasks)
'z' - color/mono Off\ (no, colors)
.\" ----------------------------------------------------------------------
@ -438,11 +439,11 @@ The status of the task which can be one of:
'\fBR\fR' = running
'\fBS\fR' = sleeping
'\fBT\fR' = traced or stopped
'\fBZ\fR' = zombies
'\fBZ\fR' = zombie
Tasks shown as running should be more properly thought of as 'ready to run'
\*(EM their task_struct is simply represented on Linux's run-queue.
Even without a true SMP machine you may see numerous tasks in this state,
\*(EM their task_struct is simply represented on the Linux run-queue.
Even without a true SMP machine, you may see numerous tasks in this state
depending on \*(Me's delay interval and nice value.
.TP 3
@ -462,13 +463,10 @@ fit in this field's current width.
That width depends upon other fields selected, their order and the current
screen width.
.in +4
\*(NT The 'Command' field/column is unique, in that it is not fixed-width,
like all other fields.
When displayed, this column will be allocated all remaining screen width,
up to the maximum 512 characters, so as to provide for the potential growth of
program names into command lines!
.in
\*(NT The 'Command' field/column is unique, in that it is not fixed-width.
When displayed, this column will be allocated all remaining screen width (up
to the maximum 512 characters) to provide for the potential growth of program
names into command lines.
.TP 3
y:\fB WCHAN\fR \*(EM Sleeping in Function
@ -477,11 +475,9 @@ will show the name or the address of the kernel function in which the task is
currently sleeping.
Running tasks will display a dash ('-') in this column.
.in +4
\*(NT By displaying this field, \*(Me's own working set will be increased by
over 700Kb.
Your only means of reducing that overhead will be to stop and restart \*(Me.
.in
.TP 3
z:\fB Flags\fR \*(EM Task Flags
@ -538,7 +534,7 @@ Some commands appear more than once \*(EM their meaning or scope may vary
depending on the context in which they are issued.
3a.\fI GLOBAL_Commands\fR
<Ret>, <Sp> ?, =, A, d, G, h, I, k, q, r, s, W, Z
<Ret/Sp> ?, =, A, B, d, G, h, I, k, q, r, s, W, Z
3b.\fI SUMMARY_Area_Commands\fR
l, m, t, 1
3c.\fI TASK_Area_Commands\fR
@ -547,7 +543,7 @@ depending on the context in which they are issued.
Size: #, i, n
Sorting: <, >, F, O, R
3d.\fI COLOR_Mapping\fR
<Ret>, a, b, H, M, q, S, T, w, z, 0 - 7
<Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7
4b.\fI COMMANDS_for_Windows\fR
-, _, =, +, A, a, G, g, w
@ -562,12 +558,12 @@ simply ask for help and view the system summary on the second line.
.TP 7
\ \ \<\fBEnter\fR> or <\fBSpace\fR> :\fIRefresh_Display\fR
In truth, these commands do nothing, they are simply ignored.
These commands do nothing, they are simply ignored.
However, they will awaken \*(Me and following receipt of any input
the entire display will be repainted within milliseconds.
the entire display will be repainted.
If you have set a large delay interval and wish to see current status,
just use either of these keys.
Use either of these keys if you have a large delay interval and wish to
see current status,
.TP 7
\ \ \'\fB?\fR\' or \'\fBh\fR\' :\fIHelp\fR
@ -594,6 +590,18 @@ This command will switch between \*(FM and \*(AM.
\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight into
\*(CWs and field groups.
.TP 7
\ \ \'\fBB\fR\' :\fIBold_Disable/Enable_toggle\fR
This command will influence use of the 'bold' terminfo capability and
alters\fB both\fR the \*(SA and \*(TA for the \*(CW.
While it is intended primarily for use with dumb terminals, it can be
applied anytime.
\*(NT When this toggle is \*O and \*(Me is operating in monochrome mode,
the\fB entire display\fR will appear as normal text.
Thus, unless the 'x' and/or 'y' toggles are using reverse for emphasis,
there will be no visual confirmation that they are even on.
.TP 7
*\ \'\fBd\fR\' or \'\fBs\fR\' :\fIChange_Delay_Time_interval\fR
You will be prompted to enter the delay time, in seconds, between
@ -709,7 +717,12 @@ The \*(TA \*(CIs are\fB never available\fR in \*(AM\fI if\fR the \*(CW's
.PP
.\" .........................
.B APPEARANCE\fR of \*(TW
.PD 0
.br
.in +2
The following commands will also be influenced by the state of the
global 'B' (bold disable) toggle.
.in
.TP 7
\ \ \'\fBb\fR\' :\fIBold/Reverse_toggle\fR
This command will impact how the 'x' and 'y' toggles are displayed.
@ -809,7 +822,7 @@ simply decrease the size of the \*(TD(s) above it.
.br
.in +2
Before using any of these sort provisions, \*(Me suggests that you
temporarily turn on column highlighting using the '\fBx\fR' \*(CI.
temporarily turn on column highlighting using the 'x' \*(CI.
That will help ensure that the actual sort environment matches your intent.
The following \*(CIs will\fB only\fR be honored when the
@ -869,7 +882,8 @@ in all four windows before returning to the \*(Me display.
\fB4\fR upper case letters to select a\fB target\fR
\fB8\fR numbers to select a\fB color\fR
normal toggles available\fR
'b' :bold/reverse
'B' :bold disable/enable
'b' :running tasks "bold"/reverse
'z' :color/mono
other commands available\fR
'a'/'w' :apply, then go to next/prior
@ -901,7 +915,7 @@ groups\fR (\*(Xc 'G' \*(CI, repeated below).
Each of the 4 field groups has a unique separately configurable\fB \*(SA\fR
and its own configurable\fB \*(TA\fR.
In \*(AM, those 4 underlying\fB field groups\fR can now be made visible
In \*(AM, those 4 underlying field groups can now be made visible
simultaneously, or can be turned \*F individually at your command.
The \*(SA will always exist, even if it's only the message line.
@ -1032,9 +1046,9 @@ personal \*(CF to the current directory, subject to permissions.
.\" ----------------------------------------------------------------------
.SH 6. STUPID TRICKS Sampler
.\" ----------------------------------------------------------------------
Many of these 'tricks' work best when you give \*(Me a scheduling boost
\*(EM so plan on starting him with a nice value of -10 (assuming you've got
the authority).
Many of these 'tricks' work best when you give \*(Me a scheduling boost.
So plan on starting him with a nice value of -10, assuming you've got
the authority.
.\" ......................................................................
.SS 6a. Kernel Magic

751
top.c

File diff suppressed because it is too large Load Diff

207
top.h
View File

@ -34,6 +34,7 @@
//#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 PRETENDNOCAP /* use a terminal without essential caps */
//#define STDOUT_IOLBF /* disable our own stdout _IOFBF override */
#ifdef PRETEND2_5_X
#define linux_version_code LINUX_VERSION(2,5,43)
@ -68,8 +69,6 @@
#define OURPATHSZ 1024
#define BIGBUFSIZ 2048
#define USRNAMSIZ GETBUFSIZ
/* colbufsz does NOT apply to command lines - that field uses rowbufsz */
#define COLBUFSIZ SMLBUFSIZ + CLRBUFSIZ
#define ROWBUFSIZ SCREENMAX + CLRBUFSIZ
@ -82,7 +81,6 @@
#define BYTES_2K(n) (unsigned)( (n) >> 10 )
#define PAGES_2B(n) (unsigned)( (n) * Page_size )
#define PAGES_2K(n) BYTES_2K(PAGES_2B(n))
#define PAGE_CNT(n) (unsigned)( (n) / Page_size )
/* Used as return arguments in *some* of the sort callbacks */
#define SORT_lt ( Frame_srtflg > 0 ? 1 : -1 )
@ -110,14 +108,37 @@
static int sort_ ## f (const proc_t **P, const proc_t **Q) { \
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)
/* Used in the following ways, to 'inline' those portions of the
display requiring formatting while protecting against potential
embedded 'millesecond delay' escape sequences.
PUTT - Put to Tty
. for temporary interactive 'REPLACEMENT' output
. may contain ANY valid terminfo escape sequences
. need NOT represent an entire screen row
PUFF - Put for Frame
. for more permanent frame-oriented 'UPDATE' output
. may NOT contain cursor motion terminfo escapes
. represents a complete screen ROW
. subject to optimization, thus MAY be discarded
. when discarded, replaced by a NEWLINE */
#define PUTT(fmt,arg...) do { \
char _str[ROWBUFSIZ]; \
snprintf(_str, sizeof(_str), fmt, ## arg); \
putp(_str); \
} while (0)
#define PUFF(fmt,arg...) do { \
char _str[ROWBUFSIZ]; \
register char *_ptr = &Pseudo_scrn[Pseudo_row * Pseudo_cols]; \
register int _len = snprintf(_str, sizeof(_str), fmt, ## arg); \
if (Batch) fputs(_str, stdout); \
else { \
if (!memcmp(_ptr, _str, _len)) \
putchar('\n'); \
else { \
memcpy(_ptr, _str, ++_len); \
putp(_ptr); \
} } Pseudo_row++; \
} while (0)
/*------ Special Macros (debug and/or informative) ---------------------*/
@ -153,6 +174,7 @@ typedef struct {
const int scale; /* scale_num type, if applicable */
const QSORT_t sort; /* sort function */
const char *desc; /* description for toggle/reorder fields */
const int lflg; /* PROC_FILLxxx flag(s) required for this field */
} FTAB_t;
/* This structure stores one piece of critical 'history'
@ -167,9 +189,9 @@ typedef struct {
calculations. It exists primarily for SMP support but serves
all environments. */
typedef struct {
/* ticks count as represented in /proc/stat */
// ticks count as represented in /proc/stat
TICS_t u, n, s, i, w;
/* tics count in the order of our display */
// tics count in the order of our display
TICS_t u_sav, s_sav, n_sav, i_sav, w_sav;
} CPUS_t;
@ -204,17 +226,15 @@ enum pflag {
#define Flags_OFF 3
/* The Persistent 'Mode' flags!
All of these are preserved in the rc file, as a single integer.
Thus, once personalized, this top will stay personalized across
restarts (not like the old top, who only remembered fields)!
Note: the letter shown is the corresponding 'command' toggle
*/
/* 'View_' flags affect the summary information, taken from 'Curwin' */
These are preserved in the rc file, as a single integer and the
letter shown is the corresponding 'command' toggle */
// 'View_' flags affect the summary (minimum), taken from 'Curwin'
#define View_CPUSUM 0x8000 /* '1' - show combined cpu stats (vs. each) */
#define View_LOADAV 0x4000 /* 'l' - display load avg and uptime summary */
#define View_STATES 0x2000 /* 't' - display task/cpu(s) states summary */
#define View_MEMORY 0x1000 /* 'm' - display memory summary */
/* 'Show_' & 'Qsrt_' flags are for task display in a visible window */
#define View_NOBOLD 0x0001 /* 'B' - disable 'bold' attribute globally */
// 'Show_' & 'Qsrt_' flags are for task display in a visible window
#define Show_COLORS 0x0800 /* 'z' - show in color (vs. mono) */
#define Show_HIBOLD 0x0400 /* 'b' - rows and/or cols bold (vs. reverse) */
#define Show_HICOLS 0x0200 /* 'x' - show sort column highlighted */
@ -228,16 +248,15 @@ enum pflag {
#define NEWFRAM_cwo 0x0004 /* new frame (if anyone cares) - in Curwin */
#define EQUWINS_cwo 0x0002 /* rebalance tasks next frame (off 'i'/ 'n') */
/* ...set in Curwin, but impacts all windows */
#define flag_unused 0x0001 /* ----------------------- future use, maybe */
/* Current-window-only flags -- always turned off at end-of-window! */
// Current-window-only flags -- always turned off at end-of-window!
#define FLGSOFF_cwo EQUWINS_cwo | NEWFRAM_cwo
/* Default flags if there's no rcfile to provide user customizations */
// Default flags if there's no rcfile to provide user customizations
#define DEF_WINFLGS ( View_LOADAV | View_STATES | View_CPUSUM | View_MEMORY | \
Show_HIBOLD | Show_HIROWS | Show_IDLEPS | Qsrt_NORMAL | VISIBLE_tsk )
/* Used to test/manipulate the window flags */
// Used to test/manipulate the window flags
#define CHKw(q,f) (int)(q->winflags & (f))
#define TOGw(q,f) q->winflags ^= (f)
#define SETw(q,f) q->winflags |= (f)
@ -275,6 +294,7 @@ typedef struct win {
capclr_hdr [CLRBUFSIZ], /* note: sum, msg and pmt strs */
capclr_rowhigh [CLRBUFSIZ], /* are only used when this */
capclr_rownorm [CLRBUFSIZ]; /* window is the 'Curwin'! */
char cap_bold [CAPBUFSIZ]; /* support for View_NOBOLD toggle */
char grpname [GRPNAMSIZ], /* window number:name, printable */
winname [WINNAMSIZ], /* window name, user changeable */
fieldscur [PFLAGSSIZ], /* fields displayed and ordered */
@ -326,19 +346,19 @@ typedef struct win {
#define STATES_line1 "Tasks:\03" \
" %3u \02total,\03 %3u \02running,\03 %3u \02sleeping,\03 %3u \02stopped,\03 %3u \02zombie\03\n"
#define STATES_line2x4 "%s\03" \
" %#5.1f\02%% user,\03 %#5.1f\02%% system,\03 %#5.1f\02%% nice,\03 %#5.1f\02%% idle\03\n"
" %#5.1f%% \02user,\03 %#5.1f%% \02system,\03 %#5.1f%% \02nice,\03 %#5.1f%% \02idle\03\n"
#define STATES_line2x5 "%s\03" \
" %#5.1f\02%% user,\03 %#5.1f\02%% system,\03 %#5.1f\02%% nice,\03 %#5.1f\02%% idle,\03 %#5.1f\02%% IO-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
#define MEMORY_line1 "Mem: \03" \
" %8u\02K total,\03 %8u\02K used,\03 %8u\02K free,\03 %8u\02K buffers\03\n"
" %8uK \02total,\03 %8uK \02used,\03 %8uK \02free,\03 %8uK \02buffers\03\n"
#define MEMORY_line2 "Swap:\03" \
" %8u\02K total,\03 %8u\02K used,\03 %8u\02K free,\03 %8u\02K cached\03\n"
" %8uK \02total,\03 %8uK \02used,\03 %8uK \02free,\03 %8uK \02cached\03\n"
#else
#define MEMORY_line1 "Mem: \03" \
" %8u\02k total,\03 %8u\02k used,\03 %8u\02k free,\03 %8u\02k buffers\03\n"
" %8uk \02total,\03 %8uk \02used,\03 %8uk \02free,\03 %8uk \02buffers\03\n"
#define MEMORY_line2 "Swap:\03" \
" %8u\02k total,\03 %8u\02k used,\03 %8u\02k free,\03 %8u\02k cached\03\n"
" %8uk \02total,\03 %8uk \02used,\03 %8uk \02free,\03 %8uk \02cached\03\n"
#endif
/* Keyboard Help specially formatted string(s) --
@ -347,17 +367,17 @@ typedef struct win {
"Help for Interactive Commands\02 - %s\n" \
"Window \01%s\06: \01Cumulative mode \03%s\02. \01System\06: \01Delay \03%.1f secs\02; \01Secure mode \03%s\02.\n" \
"\n" \
" l,t,m Toggle Summary: '\01l\02' load avg; '\01t\02' task/cpu stats; '\01m\02' mem info\n" \
" Z\05,\01B\05 Global: '\01Z\02' change color mappings; '\01B\02' disable/enable bold\n" \
" l,t,m Toggle Summaries: '\01l\02' load avg; '\01t\02' task/cpu stats; '\01m\02' mem info\n" \
" 1,I Toggle SMP view: '\0011\02' single/separate states; '\01I\02' Irix/Solaris mode\n" \
" Z\05 Change color mappings\n" \
"\n" \
" f,o . Fields/Columns: '\01f\02' add or remove; '\01o\02' change display order\n" \
" F or O . Select sort field\n" \
" <,> . Move sort field: '\01<\02' next col left; '\01>\02' next col right\n" \
" R . Toggle normal/reverse sort\n" \
" c,i,S . Toggle: '\01c\02' cmd name/line; '\01i\02' idle tasks; '\01S\02' cumulative time\n" \
" x,y\05 . Toggle highlights: '\01x\02' sort field; '\01y\02' running tasks\n" \
" z,b\05 . Toggle: '\01z\02' color/mono; '\01b\02' bold/reverse (only if 'x' or 'y')\n" \
" x\05,\01y\05 . Toggle highlights: '\01x\02' sort field; '\01y\02' running tasks\n" \
" z\05,\01b\05 . Toggle: '\01z\02' color/mono; '\01b\02' bold/reverse (only if 'x' or 'y')\n" \
" u . Show specific user only\n" \
" n or # . Set maximum tasks displayed\n" \
"\n" \
@ -440,15 +460,16 @@ typedef struct win {
"Help for color mapping\02 - %s\n" \
"current window: \01%s\06\n" \
"\n" \
" color -\03 04:25:44 up 8 days, 50 min, 7 users, load average:\n" \
" Tasks:\03 64 \02total,\03 2 \02running,\03 62 \02sleeping,\03 0 \02stopped,\03\n" \
" State cpu0 :\03 76.5\02%% user,\03 11.2\02%% system,\03 0.0\02%% nice,\03\n" \
" color - 04:25:44 up 8 days, 50 min, 7 users, load average:\n" \
" Tasks:\03 64 \02total,\03 2 \03running,\03 62 \02sleeping,\03 0 \02stopped,\03\n" \
" Cpu(s):\03 76.5%% \02user,\03 11.2%% \02system,\03 0.0%% \02nice,\03 12.3%% \02idle\03\n" \
" \01 Nasty Message! \04 -or- \01Input Prompt\05\n" \
" \01 PID TTY PR NI %%CPU TIME+ VIRT SWAP STA Command \06\n" \
" 17284 \10pts/2 \07 8 0 0.0 0:00.75 1380 0 S /bin/bash \10\n" \
" \01 8601 pts/1 7 -10 0.4 0:00.03 916 0 R < color -b \07\n" \
" 11005 \10? \07 9 0 0.0 0:02.50 2852 1008 S amor -ses \10\n" \
" available toggles: \01b\02 =bold/reverse (\01%s\02), \01z\02 =color/mono (\01%s\02)\n" \
" available toggles: \01B\02 =disable bold globally (\01%s\02),\n" \
" \01z\02 =color/mono (\01%s\02), \01b\02 =tasks \"bold\"/reverse (\01%s\02)\n" \
"\n" \
"Select \01target\02 as upper case letter:\n" \
" S\02 = Summary Data,\01 M\02 = Messages/Prompts,\n" \
@ -500,74 +521,74 @@ typedef struct win {
* source code navigation, which often influences the identifers. */
/*------ Sort callbacks ------------------------------------------------*/
/* for each possible field, in the form of: */
/*atic int sort_P_XXX (const proc_t **P, const proc_t **Q); */
//atic int sort_HIST_t (const HIST_t *P, const HIST_t *Q);
/*atic int sort_P_XXX (const proc_t **P, const proc_t **Q); */
/* additional specialized sort callback(s) */
static int sort_HIST_t (const HIST_t *P, const HIST_t *Q);
/*------ Tiny useful routine(s) ----------------------------------------*/
//atic int chin (int ech, char *buf, unsigned cnt);
//atic const char *fmtmk (const char *fmts, ...);
//atic char *strim (int sp, char *str);
//atic const char *tg2 (int x, int y);
//atic int chin (int ech, char *buf, unsigned cnt);
//atic const char *fmtmk (const char *fmts, ...);
//atic inline char *scat (register char *dst, register const char *src);
//atic char *strim (int sp, char *str);
//atic const char *tg2 (int x, int y);
/*------ Exit/Interrput routines ---------------------------------------*/
//atic void bye_bye (int eno, const char *str);
//atic void stop (int dont_care_sig);
//atic void std_err (const char *str);
//atic void suspend (int dont_care_sig);
//atic void bye_bye (int eno, const char *str);
//atic void end_pgm (int dont_care_sig);
//atic void std_err (const char *str);
//atic void suspend (int dont_care_sig);
/*------ Misc Color/Display support ------------------------------------*/
//atic void capsmk (WIN_t *q);
//atic void msg_save (const char *fmts, ...);
//atic void show_msg (const char *str);
//atic void show_pmt (const char *str);
//atic void show_special (const char *glob);
//atic void capsmk (WIN_t *q);
//atic void msg_save (const char *fmts, ...);
//atic void show_msg (const char *str);
//atic void show_pmt (const char *str);
//atic void show_special (int interact, const char *glob);
/*------ Small Utility routines ----------------------------------------*/
//atic char *ask4str (const char *prompt);
//atic float get_float (const char *prompt);
//atic int get_int (const char *prompt);
//atic const char *scale_num (unsigned num, const int width, const unsigned type);
//atic const char *scale_tics (TICS_t tics, const int width);
//atic char *ask4str (const char *prompt);
//atic float get_float (const char *prompt);
//atic int get_int (const char *prompt);
//atic const char *scale_num (unsigned num, const int width, const unsigned type);
//atic const char *scale_tics (TICS_t tics, const int width);
/*------ Library Alternatives ------------------------------------------*/
//atic void *alloc_c (unsigned numb);
//atic void *alloc_r (void *q, unsigned numb);
//atic CPUS_t *cpus_refresh (CPUS_t *cpus);
//atic void prochlp (proc_t *this);
//atic proc_t **procs_refresh (proc_t **table, int flags);
//atic void *alloc_c (unsigned numb);
//atic void *alloc_r (void *q, unsigned numb);
//atic CPUS_t *cpus_refresh (CPUS_t *cpus);
//atic void prochlp (register proc_t *this);
//atic proc_t **procs_refresh (proc_t **table, int flags);
/*------ Startup routines ----------------------------------------------*/
//atic void before (char *me);
//atic void configs_read (void);
//atic void parse_args (char **args);
//atic void whack_terminal (void);
//atic void before (char *me);
//atic void configs_read (void);
//atic void parse_args (char **args);
//atic void whack_terminal (void);
/*------ Field Selection/Ordering routines -----------------------------*/
/*atic FTAB_t Fieldstab[] = { ... } */
//atic void display_fields (const char *fields, const char *xtra);
//atic void fields_reorder (void);
//atic void fields_sort (void);
//atic void fields_toggle (void);
/*atic FTAB_t Fieldstab[] = { ... } */
//atic void display_fields (const char *fields, const char *xtra);
//atic void fields_reorder (void);
//atic void fields_sort (void);
//atic void fields_toggle (void);
/*------ Windows/Field Groups support ----------------------------------*/
//atic void win_colsheads (WIN_t *q);
//atic inline int win_fldviz (WIN_t *q, PFLG_t flg);
//atic void win_names (WIN_t *q, const char *name);
//atic void win_select (char ch);
//atic int win_warn (void);
//atic void winsclrhlp (WIN_t *q, int save);
//atic void wins_colors (void);
//atic void wins_reflag (int what, int flg);
//atic void wins_resize (int dont_care_sig);
//atic void windows_stage1 (void);
//atic void windows_stage2 (void);
//atic void reframewins (void);
//atic void win_names (WIN_t *q, const char *name);
//atic void win_select (char ch);
//atic int win_warn (void);
//atic void winsclrhlp (WIN_t *q, int save);
//atic void wins_colors (void);
//atic void wins_reflag (int what, int flg);
//atic void wins_resize (int dont_care_sig);
//atic void windows_stage1 (void);
//atic void windows_stage2 (void);
/*------ Main Screen routines ------------------------------------------*/
//atic void do_key (unsigned c);
//atic void summaryhlp (CPUS_t *cpu, const char *pfx);
//atic proc_t **summary_show (void);
//atic void taskhlp (WIN_t *q, int a, int c, int *p, char *b, const char *f, ...);
//atic void task_show (WIN_t *q, proc_t *task);
//atic void window_show (proc_t **ppt, WIN_t *q, int *lscr);
//atic void do_key (unsigned c);
//atic void summaryhlp (CPUS_t *cpu, const char *pfx);
//atic proc_t **summary_show (void);
//atic void task_show (WIN_t *q, proc_t *p);
//atic void window_show (proc_t **ppt, WIN_t *q, int *lscr);
/*------ Entry point plus two ------------------------------------------*/
//atic void framehlp (int wix, int max);
//atic void frame_make (void);
// int main (int dont_care_argc, char **argv);
//atic void framehlp (int wix, int max);
//atic void frame_make (void);
// int main (int dont_care_argc, char **argv);
/* just sanity check(s)... */
#if USRNAMSIZ < GETBUFSIZ
#error "Jeeze, USRNAMSIZ Must NOT be less than GETBUFSIZ !"
# error "Jeeze, USRNAMSIZ Must NOT be less than GETBUFSIZ !"
#endif
#endif /* _Itop */