#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)
, 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
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);
* 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'";
/* 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);
}
, procps_version, Myname, usage));
case 'i':
TOGw(Curwin, Show_IDLEPS);
- Curwin->maxtasks = 0;
+ Curwin->rc.maxtasks = 0;
break;
case 'n':
if (cp[1]) cp++;
// 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 !!
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
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;
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 (;;) {
*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);
}
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);
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
* 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);
}
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);
}
{
#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) {
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;
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;
}
/* 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;
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;
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
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;
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);
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;
, 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));
break;
case '=':
- Curwin->maxtasks = 0;
+ Curwin->rc.maxtasks = 0;
SETw(Curwin, Show_IDLEPS | VISIBLE_tsk);
Monpidsidx = 0;
break;
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;
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;
}
/* 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); \
#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
// 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;
}
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;
}
}
}
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
/* 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; \
/* 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 */
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
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 !!! */
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;
#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"