topz-Phase1.patch

This commit is contained in:
albert 2002-12-06 06:53:29 +00:00
parent ad904294e4
commit f1c02989c7
2 changed files with 57 additions and 49 deletions

65
top.c
View File

@ -14,8 +14,8 @@
* GNU Library General Public License for more details. * GNU Library General Public License for more details.
*/ */
/* For their contributions to this program, the author wishes to thank: /* For their contributions to this program, the author wishes to thank:
* Craig Small, <csmall@small.dropbear.id.au>
* Albert D. Cahalan, <albert@users.sf.net> * Albert D. Cahalan, <albert@users.sf.net>
* Craig Small, <csmall@small.dropbear.id.au>
*/ */
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/resource.h> #include <sys/resource.h>
@ -65,7 +65,6 @@ static char *Myname;
overridden with the local rcfile (old or new-style) values */ overridden with the local rcfile (old or new-style) values */
static char Rc_name [OURPATHSZ]; static char Rc_name [OURPATHSZ];
static RCF_t Rc = DEF_RCFILE; static RCF_t Rc = DEF_RCFILE;
static const RCF_t DefRc = DEF_RCFILE;
/* The run-time acquired page size */ /* The run-time acquired page size */
static int Page_size; static int Page_size;
@ -167,11 +166,12 @@ static int Frame_srtflg, // the subject window's sort direction
* values. Note that 2 of these routines serve double duty -- * values. Note that 2 of these routines serve double duty --
* 2 columns each. * 2 columns each.
*/ */
SCB_NUMx(P_PID, pid) SCB_NUMx(P_PID, pid)
SCB_NUMx(P_PPD, ppid) SCB_NUMx(P_PPD, ppid)
SCB_STRx(P_RUN, ruser) SCB_STRx(P_URR, ruser)
SCB_NUMx(P_UID, euid) SCB_NUMx(P_UID, euid)
SCB_STRx(P_USR, euser) SCB_STRx(P_URE, euser)
SCB_STRx(P_GRP, egroup) SCB_STRx(P_GRP, egroup)
SCB_NUMx(P_TTY, tty) SCB_NUMx(P_TTY, tty)
SCB_NUMx(P_PRI, priority) SCB_NUMx(P_PRI, priority)
@ -947,7 +947,7 @@ static void prochlp (proc_t *this)
// this task wins it's displayable screen row lottery... */ // this task wins it's displayable screen row lottery... */
this->pcpu = tics; this->pcpu = tics;
strim(1, this->cmd); strim(1, this->cmd);
// if (Frams_maxcmdln) // if (Frams_maxcmdln) { }
// shout this to the world with the final call (or us the next time in) // shout this to the world with the final call (or us the next time in)
Frame_maxtask++; Frame_maxtask++;
} }
@ -1046,9 +1046,9 @@ static FLD_t Fieldstab[] = {
------ ----------- ------- ------ ----- ----- ---------------------- -------- */ ------ ----------- ------- ------ ----- ----- ---------------------- -------- */
{ "AaAa", " PID ", "%5u ", -1, -1, SF(PID), "Process Id", L_NONE }, { "AaAa", " PID ", "%5u ", -1, -1, SF(PID), "Process Id", L_NONE },
{ "BbBb", " PPID ", "%5u ", -1, -1, SF(PPD), "Parent Process Pid", L_EITHER }, { "BbBb", " PPID ", "%5u ", -1, -1, SF(PPD), "Parent Process Pid", L_EITHER },
{ "CcQq", "RUSER ", "%-8.8s ", -1, -1, SF(RUN), "Real user name", L_RUSER }, { "CcQq", "RUSER ", "%-8.8s ", -1, -1, SF(URR), "Real user name", L_RUSER },
{ "DdCc", " UID ", "%4u ", -1, -1, SF(UID), "User Id", L_NONE }, { "DdCc", " UID ", "%4u ", -1, -1, SF(UID), "User Id", L_NONE },
{ "EeDd", "USER ", "%-8.8s ", -1, -1, SF(USR), "User Name", L_EUSER }, { "EeDd", "USER ", "%-8.8s ", -1, -1, SF(URE), "User Name", L_EUSER },
{ "FfNn", "GROUP ", "%-8.8s ", -1, -1, SF(GRP), "Group Name", L_GROUP }, { "FfNn", "GROUP ", "%-8.8s ", -1, -1, SF(GRP), "Group Name", L_GROUP },
{ "GgGg", "TTY ", "%-8.8s ", 8, -1, SF(TTY), "Controlling Tty", L_stat }, { "GgGg", "TTY ", "%-8.8s ", 8, -1, SF(TTY), "Controlling Tty", L_stat },
{ "HhHh", " PR ", "%3d ", -1, -1, SF(PRI), "Priority", L_stat }, { "HhHh", " PR ", "%3d ", -1, -1, SF(PRI), "Priority", L_stat },
@ -1130,6 +1130,7 @@ static inline int ft_get_char (const int fr, int i) {
} }
#if 0
// convert, or -1 for failure // convert, or -1 for failure
static int ft_get_idx (const int fr, int c) { static int ft_get_idx (const int fr, int c) {
int j = -1; int j = -1;
@ -1140,6 +1141,7 @@ static int ft_get_idx (const int fr, int c) {
} }
return -1; return -1;
} }
#endif
// convert, or NULL for failure // convert, or NULL for failure
@ -1154,12 +1156,14 @@ static const FLD_t *ft_get_ptr (const int fr, int c) {
} }
#if 0
// convert, or NULL for failure // convert, or NULL for failure
static const FLD_t *ft_idx_to_ptr (const int i) { static const FLD_t *ft_idx_to_ptr (const int i) {
if (i < 0) return NULL; if (i < 0) return NULL;
if (i >= MAXTBL(Fieldstab)) return NULL; if (i >= MAXTBL(Fieldstab)) return NULL;
return Fieldstab + i; return Fieldstab + i;
} }
#endif
// convert, or -1 for failure // convert, or -1 for failure
@ -1172,7 +1176,7 @@ static int ft_ptr_to_idx (const FLD_t *p) {
} }
#if 1 #if 0
static void rc_bugless (const RCF_t *const rc) { static void rc_bugless (const RCF_t *const rc) {
const RCW_t *w; const RCW_t *w;
int i = 0; int i = 0;
@ -1501,15 +1505,18 @@ static void before (char *me)
} }
// Anything missing won't show as a choice in the field editor, /*
// so make sure there is exactly one of each letter. * Config file read *helper* function.
// * Anything missing won't show as a choice in the field editor,
// Due to Rik blindly accepting damem's broken patches, procps-2.0.1x * so make sure there is exactly one of each letter.
// has 3 ("three"!!!) instances of "#C", "LC", or "CPU". Fix that too. *
// Some people are maintainers, and others are human patchbots. * Due to Rik blindly accepting damem's broken patches, procps-2.0.1x
static void add_missing_fields(char *fields){ * has 3 ("three"!!!) instances of "#C", "LC", or "CPU". Fix that too.
unsigned upper[32]; * Some people are maintainers, and others are human patchbots.
unsigned lower[32]; * (thanks, Albert) */
static void confighlp (char *fields) {
unsigned upper[PFLAGSSIZ];
unsigned lower[PFLAGSSIZ];
char c; char c;
char *cp; char *cp;
@ -1553,6 +1560,7 @@ static void add_missing_fields(char *fields){
} }
} }
/* /*
* First attempt to read the /etc/rcfile which contains two lines * First attempt to read the /etc/rcfile which contains two lines
* consisting of the secure mode switch and an update interval. * consisting of the secure mode switch and an update interval.
@ -1567,12 +1575,13 @@ static void add_missing_fields(char *fields){
* Delay_time will be ignored except for root. */ * Delay_time will be ignored except for root. */
static void configs_read (void) static void configs_read (void)
{ {
const RCF_t def_rcf = DEF_RCFILE;
char fbuf[MEDBUFSIZ]; char fbuf[MEDBUFSIZ];
int i, fd; int i, fd;
RCF_t rcf; RCF_t rcf;
float delay = Rc.delay_time; float delay = Rc.delay_time;
// Read part of an old-style config in /etc/toprc // read part of an old-style config in /etc/toprc
fd = open(SYS_RCFILESPEC, O_RDONLY); fd = open(SYS_RCFILESPEC, O_RDONLY);
if (fd > 0) { if (fd > 0) {
ssize_t num; ssize_t num;
@ -1594,7 +1603,7 @@ static void configs_read (void)
if (getenv("HOME")) if (getenv("HOME"))
snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", getenv("HOME"), Myname); snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", getenv("HOME"), Myname);
rcf = DefRc; rcf = def_rcf;
fd = open(Rc_name, O_RDONLY); fd = open(Rc_name, O_RDONLY);
if (fd > 0) { if (fd > 0) {
ssize_t num; ssize_t num;
@ -1604,7 +1613,7 @@ static void configs_read (void)
fbuf[1] = '\n'; fbuf[1] = '\n';
fbuf[num+2] = '\0'; fbuf[num+2] = '\0';
if (rc_read_old(fbuf, &rcf) > 0) Crufty_rcf = 1; if (rc_read_old(fbuf, &rcf) > 0) Crufty_rcf = 1;
else rcf = DefRc; // on failure, maybe mangled else rcf = def_rcf; // on failure, maybe mangled
rc_read_new(fbuf, &rcf); rc_read_new(fbuf, &rcf);
delay = rcf.delay_time; delay = rcf.delay_time;
} }
@ -1618,7 +1627,7 @@ static void configs_read (void)
Curwin = &Winstk[rcf.win_index]; Curwin = &Winstk[rcf.win_index];
for (i = 0; i < GROUPSMAX; i++) { for (i = 0; i < GROUPSMAX; i++) {
memcpy(&Winstk[i].rc, &rcf.win[i], sizeof rcf.win[i]); memcpy(&Winstk[i].rc, &rcf.win[i], sizeof rcf.win[i]);
add_missing_fields(Winstk[i].rc.fieldscur); confighlp(Winstk[i].rc.fieldscur);
} }
// lastly, establish the true runtime secure mode and delay time // lastly, establish the true runtime secure mode and delay time
@ -1637,7 +1646,7 @@ static void parse_args (char **args)
{ {
/* differences between us and the former top: /* differences between us and the former top:
-C (separate CPU states for SMP) is left to an rcfile -C (separate CPU states for SMP) is left to an rcfile
-p (pid monitoring) allows, not requires, a comma delimited list -p (pid monitoring) allows a comma delimited list
-q (zero delay) eliminated as redundant, incomplete and inappropriate -q (zero delay) eliminated as redundant, incomplete and inappropriate
use: "nice -n-10 top -d0" to achieve what was only claimed use: "nice -n-10 top -d0" to achieve what was only claimed
-c,i,S act as toggles (not 'on' switches) for enhanced user flexibility -c,i,S act as toggles (not 'on' switches) for enhanced user flexibility
@ -1927,7 +1936,7 @@ static void reframewins (void)
int i, needpsdb = 0; int i, needpsdb = 0;
// Frams_libflags = 0; // should be called only when it's zero // Frams_libflags = 0; // should be called only when it's zero
// Frams_maxcmdln = 0; // to become the largest from the 4 windows // Frams_maxcmdln = 0; // becomes largest from up to 4 windows, if visible
w = Curwin; w = Curwin;
do { do {
if (!Rc.mode_altscr || CHKw(w, VISIBLE_tsk)) { if (!Rc.mode_altscr || CHKw(w, VISIBLE_tsk)) {
@ -2730,8 +2739,6 @@ static void task_show (const WIN_t *q, const proc_t *p)
pad += q->len_rowhigh; \ pad += q->len_rowhigh; \
if (!(CHKw(q, Show_HIROWS) && 'R' == p->state)) pad += q->len_rownorm; \ if (!(CHKw(q, Show_HIROWS) && 'R' == p->state)) pad += q->len_rownorm; \
} } while (0) } } while (0)
// the format for 'command line' display in absence of same (kernel thread)
char rbuf[ROWBUFSIZ], *rp; char rbuf[ROWBUFSIZ], *rp;
int j, x, pad; int j, x, pad;
@ -2822,9 +2829,6 @@ static void task_show (const WIN_t *q, const proc_t *p)
case P_RES: case P_RES:
MKCOL(scale_num(PAGES_2K(p->resident), w, s)); MKCOL(scale_num(PAGES_2K(p->resident), w, s));
break; break;
case P_RUN:
MKCOL(p->ruser);
break;
case P_SHR: case P_SHR:
MKCOL(scale_num(PAGES_2K(p->share), w, s)); MKCOL(scale_num(PAGES_2K(p->share), w, s));
break; break;
@ -2855,9 +2859,12 @@ static void task_show (const WIN_t *q, const proc_t *p)
case P_UID: case P_UID:
MKCOL((unsigned)p->euid); MKCOL((unsigned)p->euid);
break; break;
case P_USR: case P_URE:
MKCOL(p->euser); MKCOL(p->euser);
break; break;
case P_URR:
MKCOL(p->ruser);
break;
case P_VRT: case P_VRT:
MKCOL(scale_num(PAGES_2K(p->size), w, s)); MKCOL(scale_num(PAGES_2K(p->size), w, s));
break; break;

9
top.h
View File

@ -14,8 +14,8 @@
* GNU Library General Public License for more details. * GNU Library General Public License for more details.
*/ */
/* For their contributions to this program, the author wishes to thank: /* For their contributions to this program, the author wishes to thank:
* Craig Small, <csmall@small.dropbear.id.au>
* Albert D. Cahalan, <albert@users.sf.net> * Albert D. Cahalan, <albert@users.sf.net>
* Craig Small, <csmall@small.dropbear.id.au>
*/ */
#ifndef _Itop #ifndef _Itop
#define _Itop #define _Itop
@ -224,7 +224,7 @@ enum scale_num {
/* Flags for each possible field */ /* Flags for each possible field */
enum pflag { enum pflag {
P_PID, P_PPD, P_RUN, P_UID, P_USR, P_GRP, P_TTY, P_PID, P_PPD, P_URR, P_UID, P_URE, P_GRP, P_TTY,
P_PRI, P_NCE, P_PRI, P_NCE,
P_CPN, P_CPU, P_TME, P_TM2, P_CPN, P_CPU, P_TME, P_TM2,
P_MEM, P_VRT, P_SWP, P_RES, P_COD, P_DAT, P_SHR, P_MEM, P_VRT, P_SWP, P_RES, P_COD, P_DAT, P_SHR,
@ -328,7 +328,7 @@ typedef struct WIN_t {
/* Pre-configured field groupss */ /* Pre-configured field groupss */
#define JOB_FIELDS "ABXcefgjlrstuvyzMKNHIWOPQD" #define JOB_FIELDS "ABXcefgjlrstuvyzMKNHIWOPQD"
#define MEM_FIELDS "ANOPQRSTUVXbcdefgjlmyzWHIK" #define MEM_FIELDS "ANOPQRSTUVXbcdefgjlmyzWHIK"
#define USR_FIELDS "DEFGABXchijlopqrstuvyzMKNW" #define USR_FIELDS "DECGABXfhijlopqrstuvyzMKNW"
/* Used by fields_sort, placed here for peace-of-mind */ /* Used by fields_sort, placed here for peace-of-mind */
#define NUL_FIELDS "abcdefghijklmnopqrstuvwxyz" #define NUL_FIELDS "abcdefghijklmnopqrstuvwxyz"
@ -345,7 +345,7 @@ typedef struct WIN_t {
{ P_MEM, DEF_WINFLGS, 0, \ { P_MEM, DEF_WINFLGS, 0, \
COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLUE, COLOR_MAGENTA, \ COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLUE, COLOR_MAGENTA, \
"Mem", MEM_FIELDS }, \ "Mem", MEM_FIELDS }, \
{ P_USR, DEF_WINFLGS, 0, \ { P_URE, DEF_WINFLGS, 0, \
COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW, \ COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW, \
"Usr", USR_FIELDS } \ "Usr", USR_FIELDS } \
} } } }
@ -604,6 +604,7 @@ typedef struct WIN_t {
//atic const char *rc_write_whatever (void); //atic const char *rc_write_whatever (void);
/*------ Startup routines ----------------------------------------------*/ /*------ Startup routines ----------------------------------------------*/
//atic void before (char *me); //atic void before (char *me);
//atic void confighlp (char *fields);
//atic void configs_read (void); //atic void configs_read (void);
//atic void parse_args (char **args); //atic void parse_args (char **args);
//atic void whack_terminal (void); //atic void whack_terminal (void);