+ *cp = 0;
+ while (*--cp == ' ')
+ *cp = 0;
+ cp = (char *)ip;
+ strncpy(cmdbuf, cp, &argspac.argc[CLSIZE*NBPG] - cp);
+ if (cp[0] == '-' || cp[0] == '?' || cp[0] <= ' ') {
+ strcat(cmdbuf, " (");
+ strncat(cmdbuf, u.u_comm, sizeof(u.u_comm));
+ strcat(cmdbuf, ")");
+ }
+/*
+ if (xflg == 0 && gflg == 0 && tptr == 0 && cp[0] == '-')
+ return (0);
+*/
+ return (savestr(cmdbuf));
+
+bad:
+ fprintf(stderr, "ps: error locating command name for pid %d\n",
+ mproc->p_pid);
+retucomm:
+ strcpy(cmdbuf, " (");
+ strncat(cmdbuf, u.u_comm, sizeof (u.u_comm));
+ strcat(cmdbuf, ")");
+ return (savestr(cmdbuf));
+}
+
+char *lhdr =
+" F UID PID PPID CP PRI NI ADDR SZ RSS WCHAN STAT TT TIME";
+lpr(sp)
+ struct savcom *sp;
+{
+ register struct asav *ap = sp->ap;
+ register struct lsav *lp = sp->sun.lp;
+
+ printf("%6x%4d%6u%6u%3d%4d%3d%5x%4d%5d",
+ ap->a_flag, ap->a_uid,
+ ap->a_pid, lp->l_ppid, lp->l_cpu&0377, ap->a_pri-PZERO,
+ ap->a_nice-NZERO, lp->l_addr, ap->a_size/2, ap->a_rss/2);
+ printf(lp->l_wchan ? " %5x" : " ", (int)lp->l_wchan&0xfffff);
+ printf(" %4.4s ", state(ap));
+ ptty(ap->a_tty);
+ ptime(ap);
+}
+
+ptty(tp)
+ char *tp;
+{
+
+ printf("%-2.2s", tp);
+}
+
+ptime(ap)
+ struct asav *ap;
+{
+
+ printf("%3ld:%02ld", ap->a_cpu / HZ, ap->a_cpu % HZ);
+}
+
+char *uhdr =
+"USER PID %CPU %MEM SZ RSS TT STAT TIME";
+upr(sp)
+ struct savcom *sp;
+{
+ register struct asav *ap = sp->ap;
+ int vmsize, rmsize;
+
+ vmsize = (ap->a_size + ap->a_tsiz)/2;
+ rmsize = ap->a_rss/2;
+ if (ap->a_xccount)
+ rmsize += ap->a_txtrss/ap->a_xccount/2;
+ printf("%-8.8s %5d%5.1f%5.1f%5d%5d",
+ getname(ap->a_uid), ap->a_pid, sp->sun.u_pctcpu, pmem(ap),
+ vmsize, rmsize);
+ putchar(' ');
+ ptty(ap->a_tty);
+ printf(" %4.4s", state(ap));
+ ptime(ap);
+}
+
+char *vhdr =
+" PID TT STAT TIME SL RE PAGEIN SIZE RSS SRS TSIZ TRS %CPU %MEM";
+vpr(sp)
+ struct savcom *sp;
+{
+ register struct vsav *vp = sp->sun.vp;
+ register struct asav *ap = sp->ap;
+
+ printf("%5u ", ap->a_pid);
+ ptty(ap->a_tty);
+ printf(" %4.4s", state(ap));
+ ptime(ap);
+ printf("%3d%3d%7d%5d%5d%5d%5d%4d%5.1f%5.1f",
+ ap->a_slptime, ap->a_time > 99 ? 99 : ap->a_time, vp->v_majflt,
+ ap->a_size/2, ap->a_rss/2, vp->v_swrss/2,
+ ap->a_tsiz/2, ap->a_txtrss/2, vp->v_pctcpu, pmem(ap));
+}
+
+char *shdr =
+"SSIZ PID TT STAT TIME";
+spr(sp)
+ struct savcom *sp;
+{
+ register struct asav *ap = sp->ap;
+
+ if (sflg)
+ printf("%4d ", sp->sun.s_ssiz);
+ printf("%5u", ap->a_pid);
+ putchar(' ');
+ ptty(ap->a_tty);
+ printf(" %4.4s", state(ap));
+ ptime(ap);
+}
+
+char *
+state(ap)
+ register struct asav *ap;
+{
+ char stat, load, nice, anom;
+ static char res[5];
+
+ switch (ap->a_stat) {
+
+ case SSTOP:
+ stat = 'T';
+ break;
+
+ case SSLEEP:
+ if (ap->a_pri >= PZERO)
+ if (ap->a_slptime >= MAXSLP)
+ stat = 'I';
+ else
+ stat = 'S';
+ else if (ap->a_flag & SPAGE)
+ stat = 'P';
+ else
+ stat = 'D';
+ break;
+
+ case SWAIT:
+ case SRUN:
+ case SIDL:
+ stat = 'R';
+ break;
+
+ case SZOMB:
+ stat = 'Z';
+ break;
+
+ default:
+ stat = '?';
+ }
+ load = ap->a_flag & SLOAD ? ' ' : 'W';
+ if (ap->a_nice < NZERO)
+ nice = '<';
+ else if (ap->a_nice > NZERO)
+ nice = 'N';
+ else
+ nice = ' ';
+ anom = ap->a_flag & (SANOM|SUANOM) ? 'A' : ' ';
+ res[0] = stat; res[1] = load; res[2] = nice; res[3] = anom;
+ return (res);