- register char *p;
- register struct ttys *dp;
- struct stat stb;
- int x;
-
- if (u.u_ttyp == 0)
- return("?");
- x = u.u_ttyd & 017;
- for (dp = cand[x]; dp; dp = dp->cand) {
- if (dp->ttyd == -1) {
- if (stat(dp->name, &stb) == 0 &&
- (stb.st_mode&S_IFMT)==S_IFCHR)
- dp->ttyd = stb.st_rdev;
- else
- dp->ttyd = -2;
- }
- if (dp->ttyd == u.u_ttyd)
- goto found;
- }
- /* ick */
- for (dp = allttys; dp; dp = dp->next) {
- if (dp->ttyd == -1) {
- if (stat(dp->name, &stb) == 0 &&
- (stb.st_mode&S_IFMT)==S_IFCHR)
- dp->ttyd = stb.st_rdev;
- else
- dp->ttyd = -2;
- }
- if (dp->ttyd == u.u_ttyd)
- goto found;
- }
- return ("?");
-found:
- p = dp->name;
- if (p[0]=='t' && p[1]=='t' && p[2]=='y')
- p += 3;
- return (p);
-}
-
-save()
-{
- register struct savcom *sp;
- register struct asav *ap;
- register char *cp;
- register struct text *xp;
- char *ttyp, *cmdp;
-
- if (mproc->p_stat != SZOMB && getu() == 0)
- return;
- ttyp = gettty();
- if (xflg == 0 && ttyp[0] == '?' || tptr && strcmpn(tptr, ttyp, 2))
- return;
- sp = &savcom[npr];
- cmdp = getcmd();
- if (cmdp == 0)
- return;
- sp->ap = ap = (struct asav *)alloc(sizeof (struct asav));
- sp->ap->a_cmdp = cmdp;
-#define e(a,b) ap->a = mproc->b
- e(a_flag, p_flag); e(a_stat, p_stat); e(a_nice, p_nice);
- e(a_uid, p_uid); e(a_pid, p_pid); e(a_pri, p_pri);
- e(a_slptime, p_slptime); e(a_time, p_time);
- ap->a_tty[0] = ttyp[0];
- ap->a_tty[1] = ttyp[1] ? ttyp[1] : ' ';
- if (ap->a_stat == SZOMB) {
- register struct xproc *xp = (struct xproc *)mproc;
-
- ap->a_cpu = xp->xp_vm.vm_utime + xp->xp_vm.vm_stime;
- } else {
- ap->a_size = mproc->p_dsize + mproc->p_ssize;
- e(a_rss, p_rssize);
- ap->a_ttyd = u.u_ttyd;
- ap->a_cpu = u.u_vm.vm_utime + u.u_vm.vm_stime;
- if (sumcpu)
- ap->a_cpu += u.u_cvm.vm_utime + u.u_cvm.vm_stime;
- if (mproc->p_textp && text) {
- xp = &text[mproc->p_textp - atext];
- ap->a_tsiz = xp->x_size;
- ap->a_txtrss = xp->x_rssize;
- ap->a_xccount = xp->x_ccount;
- }
- }
-#undef e
- ap->a_cpu /= hz;
- ap->a_maxrss = mproc->p_maxrss;
- if (lflg) {
- register struct lsav *lp;
-
- sp->sun.lp = lp = (struct lsav *)alloc(sizeof (struct lsav));
-#define e(a,b) lp->a = mproc->b
- e(l_ppid, p_ppid); e(l_cpu, p_cpu);
- if (ap->a_stat != SZOMB)
- e(l_wchan, p_wchan);
-#undef e
- lp->l_addr = pcbpf;
- } else if (vflg) {
- register struct vsav *vp;
-
- sp->sun.vp = vp = (struct vsav *)alloc(sizeof (struct vsav));
-#define e(a,b) vp->a = mproc->b
- if (ap->a_stat != SZOMB) {
- e(v_swrss, p_swrss);
- vp->v_majflt = u.u_vm.vm_majflt;
- if (mproc->p_textp)
- vp->v_txtswrss = xp->x_swrss;
- }
- vp->v_pctcpu = pcpu();
-#undef e
- } else if (uflg)
- sp->sun.u_pctcpu = pcpu();
- else if (sflg) {
- if (ap->a_stat != SZOMB) {
- for (cp = (char *)u.u_stack;
- cp < &user.upages[UPAGES][0]; )
- if (*cp++)
- break;
- sp->sun.s_ssiz = (&user.upages[UPAGES][0] - cp);
- }
- }
- npr++;
-}
-
-double
-pmem(ap)
- register struct asav *ap;
-{
- double fracmem;
- int szptudot;
-
- if ((ap->a_flag&SLOAD) == 0)
- fracmem = 0.0;
- else {
- szptudot = UPAGES + clrnd(ctopt(ap->a_size+ap->a_tsiz));
- fracmem = ((float)ap->a_rss+szptudot)/CLSIZE/ecmx;
- if (ap->a_xccount)
- fracmem += ((float)ap->a_txtrss)/CLSIZE/
- ap->a_xccount/ecmx;
- }
- return (100.0 * fracmem);
-}
-
-double
-pcpu()
-{
- time_t time;
-
- time = mproc->p_time;
- if (time == 0 || (mproc->p_flag&SLOAD) == 0)
- return (0.0);
- if (rawcpu)
- return (100.0 * mproc->p_pctcpu);
- return (100.0 * mproc->p_pctcpu / (1.0 - exp(time * log(ccpu))));
-}
-
-getu()
-{
- struct pte *pteaddr, apte;
- int pad1; /* avoid hardware botch */
- struct pte arguutl[UPAGES+CLSIZE];
- int pad2; /* avoid hardware botch */