prep #1, some structs
This commit is contained in:
parent
ae87df8158
commit
7860e77d90
259
top.c
259
top.c
@ -338,15 +338,15 @@ static void bye_bye (int eno, const char *str)
|
||||
#endif
|
||||
"\n\tWindows and Curwin->"
|
||||
"\n\t sizeof(WIN_t) = %u, GROUPSMAX = %d"
|
||||
"\n\t winname = %s, grpname = %s"
|
||||
"\n\t rc.winname = %s, grpname = %s"
|
||||
#ifdef CASEUP_HEXES
|
||||
"\n\t winflags = %08X, maxpflgs = %d"
|
||||
"\n\t rc.winflags = %08X, maxpflgs = %d"
|
||||
#else
|
||||
"\n\t winflags = %08x, maxpflgs = %d"
|
||||
"\n\t rc.winflags = %08x, maxpflgs = %d"
|
||||
#endif
|
||||
"\n\t fieldscur = %s"
|
||||
"\n\t winlines = %d, maxtasks = %d, maxcmdln = %d"
|
||||
"\n\t sortindx = %d"
|
||||
"\n\t rc.fieldscur = %s"
|
||||
"\n\t winlines = %d, rc.maxtasks = %d, maxcmdln = %d"
|
||||
"\n\t rc.sortindx = %d"
|
||||
"\n"
|
||||
, LINUX_VERSION_MAJOR(linux_version_code)
|
||||
, LINUX_VERSION_MINOR(linux_version_code)
|
||||
@ -369,11 +369,11 @@ static void bye_bye (int eno, const char *str)
|
||||
, sizeof(Stdout_buf), (unsigned)BUFSIZ
|
||||
#endif
|
||||
, sizeof(WIN_t), GROUPSMAX
|
||||
, Curwin->winname, Curwin->grpname
|
||||
, Curwin->winflags, Curwin->maxpflgs
|
||||
, Curwin->fieldscur
|
||||
, Curwin->winlines, Curwin->maxtasks, Curwin->maxcmdln
|
||||
, Curwin->sortindx
|
||||
, Curwin->rc.winname, Curwin->grpname
|
||||
, Curwin->rc.winflags, Curwin->maxpflgs
|
||||
, Curwin->rc.fieldscur
|
||||
, Curwin->winlines, Curwin->rc.maxtasks, Curwin->maxcmdln
|
||||
, Curwin->rc.sortindx
|
||||
);
|
||||
#endif
|
||||
|
||||
@ -475,15 +475,15 @@ static void capsmk (WIN_t *q)
|
||||
the job's done until he/she/it has a change-of-heart */
|
||||
strcpy(q->cap_bold, CHKw(q, View_NOBOLD) ? Cap_norm : tIF(enter_bold_mode));
|
||||
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->rc.summclr));
|
||||
snprintf(q->capclr_msg, sizeof(q->capclr_msg), "%s%s"
|
||||
, tparm(set_a_foreground, q->msgsclr), Cap_reverse);
|
||||
, tparm(set_a_foreground, q->rc.msgsclr), Cap_reverse);
|
||||
snprintf(q->capclr_pmt, sizeof(q->capclr_pmt), "%s%s"
|
||||
, tparm(set_a_foreground, q->msgsclr), q->cap_bold);
|
||||
, tparm(set_a_foreground, q->rc.msgsclr), q->cap_bold);
|
||||
snprintf(q->capclr_hdr, sizeof(q->capclr_hdr), "%s%s"
|
||||
, tparm(set_a_foreground, q->headclr), Cap_reverse);
|
||||
, tparm(set_a_foreground, q->rc.headclr), Cap_reverse);
|
||||
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->rc.taskclr));
|
||||
} else {
|
||||
q->capclr_sum[0] = '\0';
|
||||
strcpy(q->capclr_msg, Cap_reverse);
|
||||
@ -1046,9 +1046,9 @@ static void before (char *me)
|
||||
* If running in secure mode via the /etc/rcfile,
|
||||
* Delay_time will be ignored except for root.
|
||||
* For each of the 4 windows:
|
||||
* line a: contains w->winname, fieldscur
|
||||
* line b: contains w->winflags, sortindx, maxtasks
|
||||
* line c: contains w->summclr, msgsclr, headclr, taskclr */
|
||||
* line a: contains w->rc.winname, rc.fieldscur
|
||||
* line b: contains w->rc.winflags, rc.sortindx, rc.maxtasks
|
||||
* line c: contains w->rc.summclr, rc.msgsclr, rc.headclr, rc.taskclr */
|
||||
static void configs_read (void)
|
||||
{
|
||||
static const char err_rc[] = "rcfile now incompatible, you should delete '%s'";
|
||||
@ -1087,19 +1087,19 @@ static void configs_read (void)
|
||||
/* we won't check fscanf returns from here on out -- we'll be
|
||||
hunky-dory with nothing in an rcfile except the 1st 2 lines */
|
||||
fscanf(fp, "%s\tfieldscur=%s\n"
|
||||
, Winstk[i]->winname, Winstk[i]->fieldscur);
|
||||
if (WINNAMSIZ <= strlen(Winstk[i]->winname)
|
||||
|| strlen(DEF_FIELDS) != strlen(Winstk[i]->fieldscur))
|
||||
, Winstk[i]->rc.winname, Winstk[i]->rc.fieldscur);
|
||||
if (WINNAMSIZ <= strlen(Winstk[i]->rc.winname)
|
||||
|| strlen(DEF_FIELDS) != strlen(Winstk[i]->rc.fieldscur))
|
||||
std_err(fmtmk(err_rc, RCfile));
|
||||
fscanf(fp, "\twinflags=%d, sortindx=%u, maxtasks=%d \n"
|
||||
, &Winstk[i]->winflags
|
||||
, &Winstk[i]->sortindx
|
||||
, &Winstk[i]->maxtasks);
|
||||
, &Winstk[i]->rc.winflags
|
||||
, &Winstk[i]->rc.sortindx
|
||||
, &Winstk[i]->rc.maxtasks);
|
||||
fscanf(fp, "\tsummclr=%d, msgsclr=%d, headclr=%d, taskclr=%d \n"
|
||||
, &Winstk[i]->summclr
|
||||
, &Winstk[i]->msgsclr
|
||||
, &Winstk[i]->headclr
|
||||
, &Winstk[i]->taskclr);
|
||||
, &Winstk[i]->rc.summclr
|
||||
, &Winstk[i]->rc.msgsclr
|
||||
, &Winstk[i]->rc.headclr
|
||||
, &Winstk[i]->rc.taskclr);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
@ -1159,7 +1159,7 @@ static void parse_args (char **args)
|
||||
, procps_version, Myname, usage));
|
||||
case 'i':
|
||||
TOGw(Curwin, Show_IDLEPS);
|
||||
Curwin->maxtasks = 0;
|
||||
Curwin->rc.maxtasks = 0;
|
||||
break;
|
||||
case 'n':
|
||||
if (cp[1]) cp++;
|
||||
@ -1267,6 +1267,7 @@ static void whack_terminal (void)
|
||||
// for reframewins and summary_show 1st pass
|
||||
#define L_DEFAULT PROC_FILLSTAT
|
||||
|
||||
#define SF(f) (QSORT_t)sort_P_ ## f
|
||||
|
||||
/* These are our gosh darn 'Fields' !
|
||||
They MUST be kept in sync with pflags !!
|
||||
@ -1279,47 +1280,51 @@ static FTAB_t Fieldstab[] = {
|
||||
P_CPU, L_stat - never filled by libproc, but requires times (pcpu)
|
||||
P_CMD, L_stat - may yet require L_CMDLINE in reframewins (cmd/cmdline)
|
||||
L_EITHER - must L_status, else 64-bit math, __udivdi3 on 32-bit !
|
||||
head fmts width scale sort desc lflg
|
||||
----------- ------- ------ ----- -------- ---------------------- -------- */
|
||||
{ " PID ", "%5u ", -1, -1, _SF(P_PID), "Process Id", L_EITHER },
|
||||
{ " PPID ", "%5u ", -1, -1, _SF(P_PPD), "Parent Process Pid", L_EITHER },
|
||||
{ " PGID ", "%5u ", -1, -1, _SF(P_PGD), "Process Group Id", L_stat },
|
||||
{ " UID ", "%4u ", -1, -1, _SF(P_UID), "User Id", L_NONE },
|
||||
{ "USER ", "%-8.8s ", -1, -1, _SF(P_USR), "User Name", L_EUSER },
|
||||
{ "GROUP ", "%-8.8s ", -1, -1, _SF(P_GRP), "Group Name", L_GROUP },
|
||||
{ "TTY ", "%-8.8s ", 8, -1, _SF(P_TTY), "Controlling Tty", L_stat },
|
||||
{ " PR ", "%3d ", -1, -1, _SF(P_PRI), "Priority", L_stat },
|
||||
{ " NI ", "%3d ", -1, -1, _SF(P_NCE), "Nice value", L_stat },
|
||||
{ "#C ", "%2u ", -1, -1, _SF(P_CPN), "Last used cpu (SMP)", L_stat },
|
||||
{ "%CPU ", "%#4.1f ", -1, -1, _SF(P_CPU), "CPU usage", L_stat },
|
||||
{ " TIME ", "%6.6s ", 6, -1, _SF(P_TME), "CPU Time", L_stat },
|
||||
{ " TIME+ ", "%9.9s ", 9, -1, _SF(P_TME), "CPU Time, hundredths", L_stat },
|
||||
{ "%MEM ", "%#4.1f ", -1, -1, _SF(P_RES), "Memory usage (RES)", L_statm },
|
||||
{ " VIRT ", "%5.5s ", 5, SK_Kb, _SF(P_VRT), "Virtual Image (kb)", L_statm },
|
||||
{ "SWAP ", "%4.4s ", 4, SK_Kb, _SF(P_SWP), "Swapped size (kb)", L_statm },
|
||||
{ " RES ", "%4.4s ", 4, SK_Kb, _SF(P_RES), "Resident size (kb)", L_statm },
|
||||
{ "CODE ", "%4.4s ", 4, SK_Kb, _SF(P_COD), "Code size (kb)", L_statm },
|
||||
{ "DATA ", "%4.4s ", 4, SK_Kb, _SF(P_DAT), "Data+Stack size (kb)", L_statm },
|
||||
{ " SHR ", "%4.4s ", 4, SK_Kb, _SF(P_SHR), "Shared Mem size (kb)", L_statm },
|
||||
{ "nFLT ", "%4.4s ", 4, SK_no, _SF(P_FLT), "Page Fault count", L_stat },
|
||||
{ "nDRT ", "%4.4s ", 4, SK_no, _SF(P_DRT), "Dirty Pages count", L_statm },
|
||||
keys head fmts width scale sort desc lflg
|
||||
------ ----------- ------- ------ ----- ----- ---------------------- -------- */
|
||||
{ "AaAa", " PID ", "%5u ", -1, -1, SF(PID), "Process Id", L_EITHER },
|
||||
{ "BbBb", " PPID ", "%5u ", -1, -1, SF(PPD), "Parent Process Pid", L_EITHER },
|
||||
{ "Cc..", " PGID ", "%5u ", -1, -1, SF(PGD), "Process Group Id", L_stat },
|
||||
{ "DdCc", " UID ", "%4u ", -1, -1, SF(UID), "User Id", L_NONE },
|
||||
{ "EeDd", "USER ", "%-8.8s ", -1, -1, SF(USR), "User Name", L_EUSER },
|
||||
{ "Ff..", "GROUP ", "%-8.8s ", -1, -1, SF(GRP), "Group Name", L_GROUP },
|
||||
{ "GgGg", "TTY ", "%-8.8s ", 8, -1, SF(TTY), "Controlling Tty", L_stat },
|
||||
{ "HhHh", " PR ", "%3d ", -1, -1, SF(PRI), "Priority", L_stat },
|
||||
{ "IiIi", " NI ", "%3d ", -1, -1, SF(NCE), "Nice value", L_stat },
|
||||
{ "JjYy", "#C ", "%2u ", -1, -1, SF(CPN), "Last used cpu (SMP)", L_stat },
|
||||
{ "KkEe", "%CPU ", "%#4.1f ", -1, -1, SF(CPU), "CPU usage", L_stat },
|
||||
{ "LlWw", " TIME ", "%6.6s ", 6, -1, SF(TME), "CPU Time", L_stat },
|
||||
{ "MmWw", " TIME+ ", "%9.9s ", 9, -1, SF(TME), "CPU Time, hundredths", L_stat },
|
||||
{ "NnFf", "%MEM ", "%#4.1f ", -1, -1, SF(RES), "Memory usage (RES)", L_statm },
|
||||
{ "OoMm", " VIRT ", "%5.5s ", 5, SK_Kb, SF(VRT), "Virtual Image (kb)", L_statm },
|
||||
{ "PpOo", "SWAP ", "%4.4s ", 4, SK_Kb, SF(SWP), "Swapped size (kb)", L_statm },
|
||||
{ "QqTt", " RES ", "%4.4s ", 4, SK_Kb, SF(RES), "Resident size (kb)", L_statm },
|
||||
{ "RrKk", "CODE ", "%4.4s ", 4, SK_Kb, SF(COD), "Code size (kb)", L_statm },
|
||||
{ "SsLl", "DATA ", "%4.4s ", 4, SK_Kb, SF(DAT), "Data+Stack size (kb)", L_statm },
|
||||
{ "TtPp", " SHR ", "%4.4s ", 4, SK_Kb, SF(SHR), "Shared Mem size (kb)", L_statm },
|
||||
{ "UuJj", "nFLT ", "%4.4s ", 4, SK_no, SF(FLT), "Page Fault count", L_stat },
|
||||
{ "VvSs", "nDRT ", "%4.4s ", 4, SK_no, SF(DRT), "Dirty Pages count", L_statm },
|
||||
#ifdef USE_LIB_STA3
|
||||
{ "STA ", "%3.3s ", -1, -1, _SF(P_STA), "Process Status", L_status },
|
||||
{ "WwVv", "STA ", "%3.3s ", -1, -1, SF(STA), "Process Status", L_status },
|
||||
#else
|
||||
{ "S ", "%c ", -1, -1, _SF(P_STA), "Process Status", L_status },
|
||||
{ "WwVv", "S ", "%c ", -1, -1, SF(STA), "Process Status", L_status },
|
||||
#endif
|
||||
// next entry's special: '.head' will be formatted using table entry's own
|
||||
// '.fmts' plus runtime supplied conversion args!
|
||||
{ "Command ", "%-*.*s ", -1, -1, _SF(P_CMD), "Command name/line", L_stat },
|
||||
{ "WCHAN ", "%-9.9s ", -1, -1, _SF(P_WCH), "Sleeping in Function", L_stat },
|
||||
{ "XxXx", "Command ", "%-*.*s ", -1, -1, SF(CMD), "Command name/line", L_stat },
|
||||
{ "YyUu", "WCHAN ", "%-9.9s ", -1, -1, SF(WCH), "Sleeping in Function", L_stat },
|
||||
// next entry's special: the 0's will be replaced with '.'!
|
||||
#ifdef CASEUP_HEXES
|
||||
{ "Flags ", "%08lX ", -1, -1, _SF(P_FLG), "Task Flags <sched.h>", L_stat }
|
||||
{ "ZzZz", "Flags ", "%08lX ", -1, -1, SF(FLG), "Task Flags <sched.h>", L_stat },
|
||||
#else
|
||||
{ "Flags ", "%08lx ", -1, -1, _SF(P_FLG), "Task Flags <sched.h>", L_stat }
|
||||
{ "ZzZz", "Flags ", "%08lx ", -1, -1, SF(FLG), "Task Flags <sched.h>", L_stat },
|
||||
#endif
|
||||
{ "..Qq", " A ", "%4.4s ", 4, SK_no, SF(PID), "Accessed Page count", L_stat },
|
||||
{ "..Nn", " TRS ", "%4.4s ", 4, SK_Kb, SF(PID), "Resident Text Size (kb)", L_stat },
|
||||
{ "..Rr", " WP ", "%4.4s ", 4, SK_no, SF(PID), "Write Protected Pages", L_stat },
|
||||
{ "Jj[{", "CPU ", "%2u ", -1, -1, SF(CPN), "Last used cpu (SMP)", L_stat },
|
||||
};
|
||||
|
||||
#undef SF
|
||||
|
||||
/*
|
||||
* Display each field represented in the Fields Table along with its
|
||||
@ -1378,17 +1383,17 @@ static void fields_reorder (void)
|
||||
|
||||
putp(Cap_clr_scr);
|
||||
putp(Cap_curs_huge);
|
||||
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
||||
display_fields(Curwin->rc.fieldscur, FIELDS_xtra);
|
||||
for (;;) {
|
||||
show_special(1, fmtmk(FIELDS_current
|
||||
, Cap_home, Curwin->fieldscur, Curwin->grpname, prompt));
|
||||
, Cap_home, Curwin->rc.fieldscur, Curwin->grpname, prompt));
|
||||
chin(0, &c, 1);
|
||||
i = toupper(c) - 'A';
|
||||
if (i < 0 || i >= MAXTBL(Fieldstab)) break;
|
||||
if (((p = strchr(Curwin->fieldscur, i + 'A')))
|
||||
|| ((p = strchr(Curwin->fieldscur, i + 'a')))) {
|
||||
if (((p = strchr(Curwin->rc.fieldscur, i + 'A')))
|
||||
|| ((p = strchr(Curwin->rc.fieldscur, i + 'a')))) {
|
||||
if (isupper(c)) p--;
|
||||
if (('\0' != p[1]) && (p >= Curwin->fieldscur)) {
|
||||
if (('\0' != p[1]) && (p >= Curwin->rc.fieldscur)) {
|
||||
c = p[0];
|
||||
p[0] = p[1];
|
||||
p[1] = c;
|
||||
@ -1409,7 +1414,7 @@ static void fields_sort (void)
|
||||
int i, x;
|
||||
|
||||
strcpy(phoney, NUL_FIELDS);
|
||||
x = i = Curwin->sortindx;
|
||||
x = i = Curwin->rc.sortindx;
|
||||
putp(Cap_clr_scr);
|
||||
putp(Cap_curs_huge);
|
||||
for (;;) {
|
||||
@ -1424,9 +1429,9 @@ static void fields_sort (void)
|
||||
*p = tolower(*p);
|
||||
x = i;
|
||||
}
|
||||
if ((p = strchr(Curwin->fieldscur, x + 'a')))
|
||||
if ((p = strchr(Curwin->rc.fieldscur, x + 'a')))
|
||||
*p = x + 'A';
|
||||
Curwin->sortindx = x;
|
||||
Curwin->rc.sortindx = x;
|
||||
putp(Cap_curs_norm);
|
||||
}
|
||||
|
||||
@ -1443,15 +1448,15 @@ static void fields_toggle (void)
|
||||
putp(Cap_clr_scr);
|
||||
putp(Cap_curs_huge);
|
||||
for (;;) {
|
||||
display_fields(Curwin->fieldscur, FIELDS_xtra);
|
||||
display_fields(Curwin->rc.fieldscur, FIELDS_xtra);
|
||||
show_special(1, fmtmk(FIELDS_current
|
||||
, Cap_home, Curwin->fieldscur, Curwin->grpname, prompt));
|
||||
, Cap_home, Curwin->rc.fieldscur, Curwin->grpname, prompt));
|
||||
chin(0, &c, 1);
|
||||
i = toupper(c) - 'A';
|
||||
if (i < 0 || i >= MAXTBL(Fieldstab)) break;
|
||||
if ((p = strchr(Curwin->fieldscur, i + 'A')))
|
||||
if ((p = strchr(Curwin->rc.fieldscur, i + 'A')))
|
||||
*p = i + 'a';
|
||||
else if ((p = strchr(Curwin->fieldscur, i + 'a')))
|
||||
else if ((p = strchr(Curwin->rc.fieldscur, i + 'a')))
|
||||
*p = i + 'A';
|
||||
}
|
||||
putp(Cap_curs_norm);
|
||||
@ -1478,9 +1483,9 @@ static void reframewins (void)
|
||||
do {
|
||||
if (!Mode_altscr || CHKw(w, VISIBLE_tsk)) {
|
||||
// build window's procflags array and establish a tentative maxpflgs
|
||||
for (i = 0, w->maxpflgs = 0; w->fieldscur[i]; i++) {
|
||||
if (isupper(w->fieldscur[i]))
|
||||
w->procflags[w->maxpflgs++] = w->fieldscur[i] - 'A';
|
||||
for (i = 0, w->maxpflgs = 0; w->rc.fieldscur[i]; i++) {
|
||||
if (isupper(w->rc.fieldscur[i]))
|
||||
w->procflags[w->maxpflgs++] = w->rc.fieldscur[i] - 'A';
|
||||
}
|
||||
|
||||
/* build a preliminary columns header not to exceed screen width
|
||||
@ -1543,7 +1548,7 @@ static void reframewins (void)
|
||||
* Value a window's name and make the associated group name. */
|
||||
static void win_names (WIN_t *q, const char *name)
|
||||
{
|
||||
sprintf(q->winname, "%.*s", WINNAMSIZ -1, name);
|
||||
sprintf(q->rc.winname, "%.*s", WINNAMSIZ -1, name);
|
||||
sprintf(q->grpname, "%d:%.*s", q->winnum, WINNAMSIZ -1, name);
|
||||
}
|
||||
|
||||
@ -1595,12 +1600,12 @@ static void winsclrhlp (WIN_t *q, int save)
|
||||
static int flgssav, summsav, msgssav, headsav, tasksav;
|
||||
|
||||
if (save) {
|
||||
flgssav = q->winflags; summsav = q->summclr;
|
||||
msgssav = q->msgsclr; headsav = q->headclr; tasksav = q->taskclr;
|
||||
flgssav = q->rc.winflags; summsav = q->rc.summclr;
|
||||
msgssav = q->rc.msgsclr; headsav = q->rc.headclr; tasksav = q->rc.taskclr;
|
||||
SETw(q, Show_COLORS);
|
||||
} else {
|
||||
q->winflags = flgssav; q->summclr = summsav;
|
||||
q->msgsclr = msgssav; q->headclr = headsav; q->taskclr = tasksav;
|
||||
q->rc.winflags = flgssav; q->rc.summclr = summsav;
|
||||
q->rc.msgsclr = msgssav; q->rc.headclr = headsav; q->rc.taskclr = tasksav;
|
||||
}
|
||||
capsmk(q);
|
||||
}
|
||||
@ -1612,7 +1617,7 @@ static void wins_colors (void)
|
||||
{
|
||||
#define kbdABORT 'q'
|
||||
#define kbdAPPLY '\n'
|
||||
int clr = Curwin->taskclr, *pclr = &Curwin->taskclr;
|
||||
int clr = Curwin->rc.taskclr, *pclr = &Curwin->rc.taskclr;
|
||||
char ch, tgt = 'T';
|
||||
|
||||
if (0 >= max_colors) {
|
||||
@ -1635,22 +1640,22 @@ static void wins_colors (void)
|
||||
chin(0, &ch, 1);
|
||||
switch (ch) {
|
||||
case 'S':
|
||||
pclr = &Curwin->summclr;
|
||||
pclr = &Curwin->rc.summclr;
|
||||
clr = *pclr;
|
||||
tgt = ch;
|
||||
break;
|
||||
case 'M':
|
||||
pclr = &Curwin->msgsclr;
|
||||
pclr = &Curwin->rc.msgsclr;
|
||||
clr = *pclr;
|
||||
tgt = ch;
|
||||
break;
|
||||
case 'H':
|
||||
pclr = &Curwin->headclr;
|
||||
pclr = &Curwin->rc.headclr;
|
||||
clr = *pclr;
|
||||
tgt = ch;
|
||||
break;
|
||||
case 'T':
|
||||
pclr = &Curwin->taskclr;
|
||||
pclr = &Curwin->rc.taskclr;
|
||||
clr = *pclr;
|
||||
tgt = ch;
|
||||
break;
|
||||
@ -1671,7 +1676,7 @@ static void wins_colors (void)
|
||||
case 'w':
|
||||
win_select(ch);
|
||||
winsclrhlp(Curwin, 1);
|
||||
clr = Curwin->taskclr, pclr = &Curwin->taskclr;
|
||||
clr = Curwin->rc.taskclr, pclr = &Curwin->rc.taskclr;
|
||||
tgt = 'T';
|
||||
break;
|
||||
}
|
||||
@ -1709,7 +1714,7 @@ static void wins_reflag (int what, int flg)
|
||||
/* a flag with special significance -- user wants to rebalance
|
||||
display so we gotta' 'off' one number then force on two flags... */
|
||||
if (EQUWINS_cwo == flg) {
|
||||
w->maxtasks = 0;
|
||||
w->rc.maxtasks = 0;
|
||||
SETw(w, Show_IDLEPS | VISIBLE_tsk);
|
||||
}
|
||||
w = w->next;
|
||||
@ -1783,14 +1788,14 @@ static void windows_stage1 (void)
|
||||
for (i = 0; i < GROUPSMAX; i++) {
|
||||
Winstk[i] = w;
|
||||
w->winnum = i + 1;
|
||||
strcpy(w->winname, wtab[i].name);
|
||||
strcpy(w->fieldscur, wtab[i].flds);
|
||||
w->sortindx = wtab[i].sort;
|
||||
w->winflags = DEF_WINFLGS;
|
||||
w->summclr = wtab[i].clrs[0];
|
||||
w->msgsclr = wtab[i].clrs[1];
|
||||
w->headclr = wtab[i].clrs[2];
|
||||
w->taskclr = wtab[i].clrs[3];
|
||||
strcpy(w->rc.winname, wtab[i].name);
|
||||
strcpy(w->rc.fieldscur, wtab[i].flds);
|
||||
w->rc.sortindx = wtab[i].sort;
|
||||
w->rc.winflags = DEF_WINFLGS;
|
||||
w->rc.summclr = wtab[i].clrs[0];
|
||||
w->rc.msgsclr = wtab[i].clrs[1];
|
||||
w->rc.headclr = wtab[i].clrs[2];
|
||||
w->rc.taskclr = wtab[i].clrs[3];
|
||||
w->captab[0] = Cap_norm;
|
||||
w->captab[1] = Cap_norm;
|
||||
w->captab[2] = w->cap_bold;
|
||||
@ -1820,7 +1825,7 @@ static void windows_stage2 (void)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < GROUPSMAX; i++) {
|
||||
win_names(Winstk[i], Winstk[i]->winname);
|
||||
win_names(Winstk[i], Winstk[i]->rc.winname);
|
||||
capsmk(Winstk[i]);
|
||||
}
|
||||
// rely on this next guy to force a call (eventually) to reframewins
|
||||
@ -1904,7 +1909,7 @@ static void do_key (unsigned c)
|
||||
if (Mode_altscr) {
|
||||
char tmp[GETBUFSIZ];
|
||||
strcpy(tmp, ask4str(fmtmk("Rename window '%s' to (1-3 chars)"
|
||||
, Curwin->winname)));
|
||||
, Curwin->rc.winname)));
|
||||
if (tmp[0]) win_names(Curwin, tmp);
|
||||
}
|
||||
break;
|
||||
@ -1932,10 +1937,10 @@ static void do_key (unsigned c)
|
||||
putp(Cap_clr_scr);
|
||||
show_special(1, fmtmk(WINDOWS_help
|
||||
, Curwin->grpname
|
||||
, Winstk[0]->winname
|
||||
, Winstk[1]->winname
|
||||
, Winstk[2]->winname
|
||||
, Winstk[3]->winname));
|
||||
, Winstk[0]->rc.winname
|
||||
, Winstk[1]->rc.winname
|
||||
, Winstk[2]->rc.winname
|
||||
, Winstk[3]->rc.winname));
|
||||
chin(0, &ch, 1);
|
||||
win_select(ch);
|
||||
} while ('\n' != ch);
|
||||
@ -1991,8 +1996,8 @@ static void do_key (unsigned c)
|
||||
if (VIZCHKc) {
|
||||
int num =
|
||||
get_int(fmtmk("Maximum tasks = %d, change to (0 is unlimited)"
|
||||
, Curwin->maxtasks));
|
||||
if (-1 < num) Curwin->maxtasks = num;
|
||||
, Curwin->rc.maxtasks));
|
||||
if (-1 < num) Curwin->rc.maxtasks = num;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -2053,16 +2058,16 @@ static void do_key (unsigned c)
|
||||
, Mode_altscr, Mode_irixps, Delay_time, Curwin - Winstk[0]);
|
||||
for (i = 0; i < GROUPSMAX; i++) {
|
||||
fprintf(fp, "%s\tfieldscur=%s\n"
|
||||
, Winstk[i]->winname, Winstk[i]->fieldscur);
|
||||
, Winstk[i]->rc.winname, Winstk[i]->rc.fieldscur);
|
||||
fprintf(fp, "\twinflags=%d, sortindx=%d, maxtasks=%d\n"
|
||||
, Winstk[i]->winflags
|
||||
, Winstk[i]->sortindx
|
||||
, Winstk[i]->maxtasks);
|
||||
, Winstk[i]->rc.winflags
|
||||
, Winstk[i]->rc.sortindx
|
||||
, Winstk[i]->rc.maxtasks);
|
||||
fprintf(fp, "\tsummclr=%d, msgsclr=%d, headclr=%d, taskclr=%d\n"
|
||||
, Winstk[i]->summclr
|
||||
, Winstk[i]->msgsclr
|
||||
, Winstk[i]->headclr
|
||||
, Winstk[i]->taskclr);
|
||||
, Winstk[i]->rc.summclr
|
||||
, Winstk[i]->rc.msgsclr
|
||||
, Winstk[i]->rc.headclr
|
||||
, Winstk[i]->rc.taskclr);
|
||||
}
|
||||
fclose(fp);
|
||||
show_msg(fmtmk("Wrote configuration to '%s'", RCfile));
|
||||
@ -2105,7 +2110,7 @@ static void do_key (unsigned c)
|
||||
break;
|
||||
|
||||
case '=':
|
||||
Curwin->maxtasks = 0;
|
||||
Curwin->rc.maxtasks = 0;
|
||||
SETw(Curwin, Show_IDLEPS | VISIBLE_tsk);
|
||||
Monpidsidx = 0;
|
||||
break;
|
||||
@ -2117,18 +2122,18 @@ static void do_key (unsigned c)
|
||||
case '<':
|
||||
if (VIZCHKc) {
|
||||
PFLG_t *p = Curwin->procflags + Curwin->maxpflgs - 1;
|
||||
while (*p != Curwin->sortindx) --p;
|
||||
while (*p != Curwin->rc.sortindx) --p;
|
||||
if (--p >= Curwin->procflags)
|
||||
Curwin->sortindx = *p;
|
||||
Curwin->rc.sortindx = *p;
|
||||
}
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (VIZCHKc) {
|
||||
PFLG_t *p = Curwin->procflags;
|
||||
while (*p != Curwin->sortindx) ++p;
|
||||
while (*p != Curwin->rc.sortindx) ++p;
|
||||
if (++p < Curwin->procflags + Curwin->maxpflgs)
|
||||
Curwin->sortindx = *p;
|
||||
Curwin->rc.sortindx = *p;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -2146,7 +2151,7 @@ static void do_key (unsigned c)
|
||||
int i;
|
||||
for (i = 0; i < MAXTBL(xtab); ++i)
|
||||
if (c == xtab[i].xkey) {
|
||||
Curwin->sortindx = xtab[i].sort;
|
||||
Curwin->rc.sortindx = xtab[i].sort;
|
||||
show_msg(fmtmk("%s sort compatibility key honored", xtab[i].xmsg));
|
||||
break;
|
||||
}
|
||||
@ -2311,7 +2316,7 @@ static void task_show (const WIN_t *q, const proc_t *p)
|
||||
/* the following macro is our means to 'inline' emitting a column -- next to
|
||||
procs_refresh, that's the most frequent and costly part of top's job ! */
|
||||
#define MKCOL(va...) do { \
|
||||
if (!(CHKw(q, Show_HICOLS) && q->sortindx == i)) \
|
||||
if (!(CHKw(q, Show_HICOLS) && q->rc.sortindx == i)) \
|
||||
snprintf(cbuf, sizeof(cbuf), f, ## va); \
|
||||
else { \
|
||||
snprintf(_z, sizeof(_z), f, ## va); \
|
||||
@ -2498,16 +2503,16 @@ static void window_show (proc_t **ppt, WIN_t *q, int *lscr)
|
||||
|
||||
#ifdef SORT_SUPRESS
|
||||
if (CHKw(Curwin, NEWFRAM_cwo)
|
||||
|| sav_indx != q->sortindx
|
||||
|| sav_flgs != (q->winflags & srtMASK)) {
|
||||
sav_indx = q->sortindx;
|
||||
sav_flgs = (q->winflags & srtMASK);
|
||||
|| sav_indx != q->rc.sortindx
|
||||
|| sav_flgs != (q->rc.winflags & srtMASK)) {
|
||||
sav_indx = q->rc.sortindx;
|
||||
sav_flgs = (q->rc.winflags & srtMASK);
|
||||
#endif
|
||||
if (CHKw(q, Qsrt_NORMAL)) Frame_srtflg = 1; // this one's always needed!
|
||||
else Frame_srtflg = -1;
|
||||
Frame_ctimes = CHKw(q, Show_CTIMES); // this and next, only maybe
|
||||
Frame_cmdlin = CHKw(q, Show_CMDLIN);
|
||||
qsort(ppt, Frame_maxtask, sizeof(proc_t *), Fieldstab[q->sortindx].sort);
|
||||
qsort(ppt, Frame_maxtask, sizeof(proc_t *), Fieldstab[q->rc.sortindx].sort);
|
||||
#ifdef SORT_SUPRESS
|
||||
}
|
||||
#endif
|
||||
@ -2552,7 +2557,7 @@ static void framehlp (int wix, int max)
|
||||
// calc remaining number of visible windows + total 'user' lines
|
||||
for (i = wix, rsvd = 0, wins = 0; i < GROUPSMAX; i++) {
|
||||
if (CHKw(Winstk[i], VISIBLE_tsk)) {
|
||||
rsvd += Winstk[i]->maxtasks;
|
||||
rsvd += Winstk[i]->rc.maxtasks;
|
||||
++wins;
|
||||
if (max <= rsvd) break;
|
||||
}
|
||||
@ -2569,7 +2574,7 @@ static void framehlp (int wix, int max)
|
||||
for (i = wix ; i < GROUPSMAX; i++) {
|
||||
if (CHKw(Winstk[i], VISIBLE_tsk)) {
|
||||
Winstk[i]->winlines =
|
||||
Winstk[i]->maxtasks ? Winstk[i]->maxtasks : size;
|
||||
Winstk[i]->rc.maxtasks ? Winstk[i]->rc.maxtasks : size;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2618,7 +2623,7 @@ static void frame_make (void)
|
||||
|
||||
if (!Mode_altscr) {
|
||||
// only 1 window to show so, piece o' cake
|
||||
Curwin->winlines = Curwin->maxtasks;
|
||||
Curwin->winlines = Curwin->rc.maxtasks;
|
||||
window_show(ppt, Curwin, &scrlins);
|
||||
} else {
|
||||
// maybe NO window is visible but assume, pieces o' cakes
|
||||
|
87
top.h
87
top.h
@ -90,7 +90,6 @@
|
||||
/* Used to reference and create sort callback functions --
|
||||
note: some of the callbacks are NOT your father's callbacks, they're
|
||||
highly optimized to save them ol' precious cycles! */
|
||||
#define _SF(f) (QSORT_t)sort_ ## f
|
||||
#define _SC_NUM1(f,n) \
|
||||
static int sort_ ## f (const proc_t **P, const proc_t **Q) { \
|
||||
if ( (*P)->n < (*Q)->n ) return SORT_lt; \
|
||||
@ -167,6 +166,7 @@ typedef int (*QSORT_t)(const void *, const void *);
|
||||
/* This structure consolidates the information that's used
|
||||
in a variety of display roles. */
|
||||
typedef struct {
|
||||
const char keys[4]; // order: Jim-on Jim-off Rik-on Rik-off
|
||||
const char *head; /* name for column headings + toggle/reorder fields */
|
||||
const char *fmts; /* sprintf format string for field display */
|
||||
const int width; /* field width, if applicable */
|
||||
@ -254,15 +254,36 @@ enum pflag {
|
||||
Show_HIBOLD | Show_HIROWS | Show_IDLEPS | Qsrt_NORMAL | VISIBLE_tsk )
|
||||
|
||||
// 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)
|
||||
#define OFFw(q,f) q->winflags &= ~(f)
|
||||
#define VIZCHKc (!Mode_altscr || Curwin->winflags & VISIBLE_tsk) \
|
||||
#define CHKw(q,f) (int)(q->rc.winflags & (f))
|
||||
#define TOGw(q,f) q->rc.winflags ^= (f)
|
||||
#define SETw(q,f) q->rc.winflags |= (f)
|
||||
#define OFFw(q,f) q->rc.winflags &= ~(f)
|
||||
#define VIZCHKc (!Mode_altscr || Curwin->rc.winflags & VISIBLE_tsk) \
|
||||
? 1 : win_warn()
|
||||
#define VIZTOGc(f) (!Mode_altscr || Curwin->winflags & VISIBLE_tsk) \
|
||||
#define VIZTOGc(f) (!Mode_altscr || Curwin->rc.winflags & VISIBLE_tsk) \
|
||||
? TOGw(Curwin, f) : win_warn()
|
||||
|
||||
typedef struct rcwin {
|
||||
PFLG_t sortindx; /* sort field, as a procflag */
|
||||
int winflags, /* 'view', 'show' and 'sort' mode flags */
|
||||
maxtasks, /* user requested maximum, 0 equals all */
|
||||
summclr, /* color num used in summ info */
|
||||
msgsclr, /* " in msgs/pmts */
|
||||
headclr, /* " in cols head */
|
||||
taskclr; /* " in task display */
|
||||
char winname [WINNAMSIZ], /* window name, user changeable */
|
||||
fieldscur [PFLAGSSIZ]; /* fields displayed and ordered */
|
||||
} rcwin;
|
||||
|
||||
typedef struct rcf { // global/system-wide
|
||||
char rcfid; // RCF_FILEID
|
||||
int altscr; // Mode_altscr
|
||||
int irixps; // Mode_irixps
|
||||
float delay; // Delay_time
|
||||
int curwin; // Curwin
|
||||
rcwin win[4]; // each of 4 windows
|
||||
} RCF_t;
|
||||
|
||||
/* This structure stores configurable information for each window.
|
||||
By expending a little effort in its creation and user requested
|
||||
maintainence, the only real additional per frame cost of having
|
||||
@ -273,18 +294,12 @@ typedef struct win {
|
||||
char *captab [CAPTABMAX]; /* captab needed by show_special */
|
||||
int winnum, /* window's num (array pos + 1) */
|
||||
winlines; /* task window's rows (volatile) */
|
||||
int winflags; /* 'view', 'show' and 'sort' mode flags */
|
||||
PFLG_t procflags [PFLAGSSIZ], /* fieldscur subset, as enum */
|
||||
sortindx; /* sort field, as a procflag */
|
||||
PFLG_t procflags [PFLAGSSIZ]; /* fieldscur subset, as enum */
|
||||
int maxpflgs, /* number of procflags (upcase fieldscur) */
|
||||
maxtasks, /* user requested maximum, 0 equals all */
|
||||
maxcmdln, /* max length of a process' command line */
|
||||
summclr, /* color num used in summ info */
|
||||
msgsclr, /* " in msgs/pmts */
|
||||
headclr, /* " in cols head */
|
||||
taskclr; /* " in task display */
|
||||
maxcmdln; /* max length of a process' command line */
|
||||
int len_rownorm, /* lengths of the corresponding terminfo */
|
||||
len_rowhigh; /* strings to avoid repeated strlen calls */
|
||||
rcwin rc; /* stuff that gets saved in a .toprc file */
|
||||
char capclr_sum [CLRBUFSIZ], /* terminfo strings built from */
|
||||
capclr_msg [CLRBUFSIZ], /* above clrs (& rebuilt too), */
|
||||
capclr_pmt [CLRBUFSIZ], /* but NO recurring costs !!! */
|
||||
@ -293,8 +308,6 @@ typedef struct win {
|
||||
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 */
|
||||
columnhdr [SCREENMAX], /* column headings for procflags */
|
||||
colusrnam [USRNAMSIZ]; /* if selected by the 'u' command */
|
||||
} WIN_t;
|
||||
@ -336,6 +349,44 @@ typedef struct win {
|
||||
#define CMDLINE_FMTS "( %s )"
|
||||
#endif
|
||||
|
||||
//typedef struct rcwin {
|
||||
// PFLG_t sortindx; /* sort field, as a procflag */
|
||||
// int winflags, /* 'view', 'show' and 'sort' mode flags */
|
||||
// maxtasks, /* user requested maximum, 0 equals all */
|
||||
// summclr, /* color num used in summ info */
|
||||
// msgsclr, /* " in msgs/pmts */
|
||||
// headclr, /* " in cols head */
|
||||
// taskclr; /* " in task display */
|
||||
// char winname [WINNAMSIZ], /* window name, user changeable */
|
||||
// fieldscur [PFLAGSSIZ]; /* fields displayed and ordered */
|
||||
//} rcwin;
|
||||
//
|
||||
//typedef struct rcf { // global/system-wide
|
||||
// char rcfid; // RCF_FILEID
|
||||
// int altscr; // Mode_altscr
|
||||
// int irixps; // Mode_irixps
|
||||
// float delay; // Delay_time
|
||||
// int curwin; // Curwin
|
||||
// rcwin win[4]; // each of 4 windows
|
||||
//} RCF_t;
|
||||
|
||||
RCF_t RCf_Defaults = {
|
||||
RCF_FILEID, 0, 1, 3.0f, 0, {
|
||||
{ DEF_WINFLGS, P_CPU, 0,
|
||||
COLOR_RED, COLOR_RED, COLOR_YELLOW, COLOR_RED,
|
||||
"Def", DEF_FIELDS },
|
||||
{ DEF_WINFLGS, P_PID, 0,
|
||||
COLOR_CYAN, COLOR_CYAN, COLOR_WHITE, COLOR_CYAN,
|
||||
"Job", JOB_FIELDS },
|
||||
{ DEF_WINFLGS, P_MEM, 0,
|
||||
COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLUE, COLOR_MAGENTA,
|
||||
"Mem", MEM_FIELDS },
|
||||
{ DEF_WINFLGS, P_USR, 0,
|
||||
COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW,
|
||||
"Usr", USR_FIELDS }
|
||||
}
|
||||
};
|
||||
|
||||
/* Summary Lines specially formatted string(s) --
|
||||
see 'show_special' for syntax details + other cautions. */
|
||||
#define LOADAV_line "%s -%s\n"
|
||||
|
Loading…
x
Reference in New Issue
Block a user