Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Apr 1997 18:30:51 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        terry@lambert.org (Terry Lambert)
Cc:        current@freebsd.org
Subject:   Re: Longer user names: take 2
Message-ID:  <199704290130.SAA03420@phaeton.artisoft.com>
In-Reply-To: <199704272227.PAA00413@phaeton.artisoft.com> from "Terry Lambert" at Apr 27, 97 03:27:05 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> Maybe the length specifier should be negated?  This would give a
> generalized mechanism for recognizing fields which should be sized
> dynamically, and make the ps output nice looking once again...
> As it is, "ps -gaxu" is now relatively useles without a "w" option,
> and "ps -gaxuwww" has always been pretty damn useless anyway.

I made the change to ps.  It now outputs with a width of "USER" or
the largest active name, whichever is greater.  Ah, to have the
column space back!

Rather than negate the size (as above) I added a flag value.

The change affects the 'ruser' and 'user' keywords only at this point...
since the mechanism is very general (write a "size" function that
takes a KINFO * and set the DSIZ flag and put the function in the
VAR struct), if you want more fields to magically adjust their size,
add them yourself.

I didn't know where to put the size functions, do I stuck them in
"print.c", since they affect output formatting.

The patches follow the signature.


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.
-----------------------------------------------------------------------
Index: extern.h
===================================================================
RCS file: /b/cvstree/ncvs/src/bin/ps/extern.h,v
retrieving revision 1.5
diff -c -r1.5 extern.h
*** 1.5	1997/02/22 14:04:59
--- extern.h	1997/04/29 01:07:53
***************
*** 68,73 ****
--- 68,74 ----
  void	 pvar __P((KINFO *, VARENT *));
  void	 rssize __P((KINFO *, VARENT *));
  void	 runame __P((KINFO *, VARENT *));
+ int	 s_runame __P((KINFO *));
  void	 rvar __P((KINFO *, VARENT *));
  void	 showkey __P((void));
  void	 started __P((KINFO *, VARENT *));
***************
*** 80,85 ****
--- 81,87 ----
  void	 tsize __P((KINFO *, VARENT *));
  void	 ucomm __P((KINFO *, VARENT *));
  void	 uname __P((KINFO *, VARENT *));
+ int	 s_uname __P((KINFO *));
  void	 uvar __P((KINFO *, VARENT *));
  void	 vsize __P((KINFO *, VARENT *));
  void	 wchan __P((KINFO *, VARENT *));
Index: keyword.c
===================================================================
RCS file: /b/cvstree/ncvs/src/bin/ps/keyword.c,v
retrieving revision 1.14
diff -c -r1.14 keyword.c
*** 1.14	1997/03/04 00:33:56
--- keyword.c	1997/04/29 01:19:40
***************
*** 67,77 ****
  
  #ifdef NOTINUSE
  int	utime(), stime(), ixrss(), idrss(), isrss();
! 	{{"utime"}, "UTIME", USER, utime, 4},
! 	{{"stime"}, "STIME", USER, stime, 4},
! 	{{"ixrss"}, "IXRSS", USER, ixrss, 4},
! 	{{"idrss"}, "IDRSS", USER, idrss, 4},
! 	{{"isrss"}, "ISRSS", USER, isrss, 4},
  #endif
  
  /* Compute offset in common structures. */
--- 67,77 ----
  
  #ifdef NOTINUSE
  int	utime(), stime(), ixrss(), idrss(), isrss();
! 	{{"utime"}, "UTIME", USER, utime, NULL, 4},
! 	{{"stime"}, "STIME", USER, stime, NULL, 4},
! 	{{"ixrss"}, "IXRSS", USER, ixrss, NULL, 4},
! 	{{"idrss"}, "IDRSS", USER, idrss, NULL, 4},
! 	{{"isrss"}, "ISRSS", USER, isrss, NULL, 4},
  #endif
  
  /* Compute offset in common structures. */
***************
*** 88,267 ****
  
  VAR var[] = {
  #ifdef NEWVM
! 	{"%cpu", "%CPU", NULL, 0, pcpu, 4},
! 	{"%mem", "%MEM", NULL, 0, pmem, 4},
! 	{"acflag", "ACFLG", NULL, 0, pvar, 3, POFF(p_acflag), USHORT, "x"},
  	{"acflg", "", "acflag"},
  	{"blocked", "", "sigmask"},
  	{"caught", "", "sigcatch"},
! 	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, 16},
! 	{"cpu", "CPU", NULL, 0, pvar, 3, POFF(p_estcpu), ULONG, "d"},
  	{"cputime", "", "time"},
! 	{"f", "F", NULL, 0, pvar, 7, POFF(p_flag), LONG, "x"},
  	{"flags", "", "f"},
  	{"ignored", "", "sigignore"},
! 	{"inblk", "INBLK", NULL, USER, rvar, 4, ROFF(ru_inblock), LONG, "d"},
  	{"inblock", "", "inblk"},
! 	{"jobc", "JOBC", NULL, 0, evar, 4, EOFF(e_jobc), SHORT, "d"},
! 	{"ktrace", "KTRACE", NULL, 0, pvar, 8, POFF(p_traceflag), LONG, "x"},
! 	{"ktracep", "KTRACEP", NULL, 0, pvar, 8, POFF(p_tracep), LONG, "x"},
! 	{"lim", "LIM", NULL, 0, maxrss, 5},
! 	{"login", "LOGIN", NULL, LJUST, logname, MAXLOGNAME-1},
  	{"logname", "", "login"},
! 	{"lstart", "STARTED", NULL, LJUST|USER, lstarted, 28},
! 	{"majflt", "MAJFLT", NULL, USER, rvar, 4, ROFF(ru_majflt), LONG, "d"},
! 	{"minflt", "MINFLT", NULL, USER, rvar, 4, ROFF(ru_minflt), LONG, "d"},
! 	{"msgrcv", "MSGRCV", NULL, USER, rvar, 4, ROFF(ru_msgrcv), LONG, "d"},
! 	{"msgsnd", "MSGSND", NULL, USER, rvar, 4, ROFF(ru_msgsnd), LONG, "d"},
  	{"ni", "", "nice"},
! 	{"nice", "NI", NULL, 0, pvar, 2, POFF(p_nice), CHAR, "d"},
! 	{"nivcsw", "NIVCSW", NULL, USER, rvar, 5, ROFF(ru_nivcsw), LONG, "d"},
  	{"nsignals", "", "nsigs"},
! 	{"nsigs", "NSIGS", NULL, USER, rvar, 4, ROFF(ru_nsignals), LONG, "d"},
! 	{"nswap", "NSWAP", NULL, USER, rvar, 4, ROFF(ru_nswap), LONG, "d"},
! 	{"nvcsw", "NVCSW", NULL, USER, rvar, 5, ROFF(ru_nvcsw), LONG, "d"},
! 	{"nwchan", "WCHAN", NULL, 0, pvar, 6, POFF(p_wchan), KPTR, "x"},
! 	{"oublk", "OUBLK", NULL, USER, rvar, 4, ROFF(ru_oublock), LONG, "d"},
  	{"oublock", "", "oublk"},
! 	{"p_ru", "P_RU", NULL, 0, pvar, 6, POFF(p_ru), KPTR, "x"},
! 	{"paddr", "PADDR", NULL, 0, evar, 6, EOFF(e_paddr), KPTR, "x"},
! 	{"pagein", "PAGEIN", NULL, USER, pagein, 6},
  	{"pcpu", "", "%cpu"},
  	{"pending", "", "sig"},
! 	{"pgid", "PGID", NULL, 0, evar, PIDLEN, EOFF(e_pgid), ULONG, PIDFMT},
! 	{"pid", "PID", NULL, 0, pvar, PIDLEN, POFF(p_pid), LONG, PIDFMT},
  	{"pmem", "", "%mem"},
! 	{"ppid", "PPID", NULL, 0, evar, PIDLEN, EOFF(e_ppid), LONG, PIDFMT},
! 	{"pri", "PRI", NULL, 0, pri, 3},
! 	{"re", "RE", NULL, 0, pvar, 3, POFF(p_swtime), ULONG, "d"},
! 	{"rgid", "RGID", NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_rgid),
  		ULONG, UIDFMT},
! 	{"rlink", "RLINK", NULL, 0, pvar, 8, POFF(p_procq.tqe_prev), KPTR, "x"},
! 	{"rss", "RSS", NULL, 0, p_rssize, 4},
  	{"rssize", "", "rsz"},
! 	{"rsz", "RSZ", NULL, 0, rssize, 4},
! 	{"rtprio", "RTPRIO", NULL, 0, pvar, 7, POFF(p_rtprio), LONG, "d"},
! 	{"ruid", "RUID", NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_ruid),
  		ULONG, UIDFMT},
! 	{"ruser", "RUSER", NULL, LJUST, runame, USERLEN},
! 	{"sess", "SESS", NULL, 0, evar, 6, EOFF(e_sess), KPTR, "x"},
! 	{"sig", "PENDING", NULL, 0, pvar, 8, POFF(p_siglist), LONG, "x"},
! 	{"sigcatch", "CAUGHT", NULL, 0, pvar, 8, POFF(p_sigcatch), LONG, "x"},
  	{"sigignore", "IGNORED",
! 		NULL, 0, pvar, 8, POFF(p_sigignore), LONG, "x"},
! 	{"sigmask", "BLOCKED", NULL, 0, pvar, 8, POFF(p_sigmask), LONG, "x"},
! 	{"sl", "SL", NULL, 0, pvar, 3, POFF(p_slptime), ULONG, "d"},
! 	{"start", "STARTED", NULL, LJUST|USER, started, 7},
  	{"stat", "", "state"},
! 	{"state", "STAT", NULL, 0, state, 4},
! 	{"svgid", "SVGID",
! 		NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_svgid), ULONG, UIDFMT},
! 	{"svuid", "SVUID",
! 		NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_svuid), ULONG, UIDFMT},
! 	{"tdev", "TDEV", NULL, 0, tdev, 4},
! 	{"time", "TIME", NULL, USER, cputime, 9},
! 	{"tpgid", "TPGID", NULL, 0, evar, 4, EOFF(e_tpgid), ULONG, PIDFMT},
! 	{"tsess", "TSESS", NULL, 0, evar, 6, EOFF(e_tsess), KPTR, "x"},
! 	{"tsiz", "TSIZ", NULL, 0, tsize, 4},
! 	{"tt", "TT ", NULL, 0, tname, 4},
! 	{"tty", "TTY", NULL, LJUST, longtname, 8},
! 	{"ucomm", "UCOMM", NULL, LJUST, ucomm, MAXCOMLEN},
! 	{"uid", "UID", NULL, 0, evar, UIDLEN, EOFF(e_ucred.cr_uid),
  		ULONG, UIDFMT},
! 	{"upr", "UPR", NULL, 0, pvar, 3, POFF(p_usrpri), CHAR, "d"},
! 	{"user", "USER", NULL, LJUST, uname, USERLEN},
  	{"usrpri", "", "upr"},
  	{"vsize", "", "vsz"},
! 	{"vsz", "VSZ", NULL, 0, vsize, 5},
! 	{"wchan", "WCHAN", NULL, LJUST, wchan, 6},
! 	{"xstat", "XSTAT", NULL, 0, pvar, 4, POFF(p_xstat), USHORT, "x"},
  #else
! 	{"%cpu", "%CPU", NULL, 0, pcpu, 4},
! 	{"%mem", "%MEM", NULL, 0, pmem, 4},
! 	{"acflag", "ACFLG", NULL, USER, uvar, 3, UOFF(u_acflag), SHORT, "x"},
  	{"acflg", "", "acflag"},
  	{"blocked", "", "sigmask"},
  	{"caught", "", "sigcatch"},
! 	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, 16},
! 	{"cpu", "CPU", NULL, 0, pvar, 3, POFF(p_cpu), ULONG, "d"},
  	{"cputime", "", "time"},
! 	{"f", "F", NULL, 0, pvar, 7, POFF(p_flag), LONG, "x"},
  	{"flags", "", "f"},
  	{"ignored", "", "sigignore"},
! 	{"inblk", "INBLK", NULL, USER, rvar, 4, ROFF(ru_inblock), LONG, "d"},
  	{"inblock", "", "inblk"},
! 	{"jobc", "JOBC", NULL, 0, evar, 4, EOFF(e_jobc), SHORT, "d"},
! 	{"ktrace", "KTRACE", NULL, 0, pvar, 8, POFF(p_traceflag), LONG, "x"},
! 	{"ktracep", "KTRACEP", NULL, 0, pvar, 8, POFF(p_tracep), LONG, "x"},
! 	{"lim", "LIM", NULL, 0, maxrss, 5},
! 	{"logname", "LOGNAME", NULL, LJUST, logname, MAXLOGNAME-1},
! 	{"lstart", "STARTED", NULL, LJUST|USER, lstarted, 28},
! 	{"majflt", "MAJFLT", NULL, USER, rvar, 4, ROFF(ru_majflt), LONG, "d"},
! 	{"minflt", "MINFLT", NULL, USER, rvar, 4, ROFF(ru_minflt), LONG, "d"},
! 	{"msgrcv", "MSGRCV", NULL, USER, rvar, 4, ROFF(ru_msgrcv), LONG, "d"},
! 	{"msgsnd", "MSGSND", NULL, USER, rvar, 4, ROFF(ru_msgsnd), LONG, "d"},
  	{"ni", "", "nice"},
! 	{"nice", "NI", NULL, 0, pvar, 2, POFF(p_nice), CHAR, "d"},
! 	{"nivcsw", "NIVCSW", NULL, USER, rvar, 5, ROFF(ru_nivcsw), LONG, "d"},
  	{"nsignals", "", "nsigs"},
! 	{"nsigs", "NSIGS", NULL, USER, rvar, 4, ROFF(ru_nsignals), LONG, "d"},
! 	{"nswap", "NSWAP", NULL, USER, rvar, 4, ROFF(ru_nswap), LONG, "d"},
! 	{"nvcsw", "NVCSW", NULL, USER, rvar, 5, ROFF(ru_nvcsw), LONG, "d"},
! 	{"nwchan", "WCHAN", NULL, 0, pvar, 6, POFF(p_wchan), KPTR, "x"},
! 	{"oublk", "OUBLK", NULL, USER, rvar, 4, ROFF(ru_oublock), LONG, "d"},
  	{"oublock", "", "oublk"},
! 	{"p_ru", "P_RU", NULL, 0, pvar, 6, POFF(p_ru), KPTR, "x"},
! 	{"paddr", "PADDR", NULL, 0, evar, 6, EOFF(e_paddr), KPTR, "x"},
! 	{"pagein", "PAGEIN", NULL, USER, pagein, 6},
  	{"pcpu", "", "%cpu"},
  	{"pending", "", "sig"},
! 	{"pgid", "PGID", NULL, 0, evar, PIDLEN, EOFF(e_pgid), ULONG, PIDFMT},
! 	{"pid", "PID", NULL, 0, pvar, PIDLEN, POFF(p_pid), LONG, PIDFMT},
  	{"pmem", "", "%mem"},
! 	{"poip", "POIP", NULL, 0, pvar, 4, POFF(p_poip), SHORT, "d"},
! 	{"ppid", "PPID", NULL, 0, pvar, PIDLEN, POFF(p_ppid), LONG, PIDFMT},
! 	{"pri", "PRI", NULL, 0, pri, 3},
! 	{"re", "RE", NULL, 0, pvar, 3, POFF(p_swtime), ULONG, "d"},
! 	{"rgid", "RGID", NULL, 0, pvar, UIDLEN, POFF(p_rgid), USHORT, UIDFMT},
! 	{"rlink", "RLINK", NULL, 0, pvar, 8, POFF(p_rlink), KPTR, "x"},
! 	{"rss", "RSS", NULL, 0, p_rssize, 4},
  	{"rssize", "", "rsz"},
! 	{"rsz", "RSZ", NULL, 0, rssize, 4},
! 	{"ruid", "RUID", NULL, 0, pvar, UIDLEN, POFF(p_ruid), USHORT, UIDFMT},
! 	{"rtprio", "RTPRIO", NULL, 0, pvar, 7, POFF(p_rtprio), LONG, "d"},
! 	{"ruser", "RUSER", NULL, LJUST, runame, USERLEN},
! 	{"sess", "SESS", NULL, 0, evar, 6, EOFF(e_sess), KPTR, "x"},
! 	{"sig", "PENDING", NULL, 0, pvar, 8, POFF(p_sig), LONG, "x"},
! 	{"sigcatch", "CAUGHT", NULL, 0, pvar, 8, POFF(p_sigcatch), LONG, "x"},
  	{"sigignore", "IGNORED",
! 		NULL, 0, pvar, 8, POFF(p_sigignore), LONG, "x"},
! 	{"sigmask", "BLOCKED", NULL, 0, pvar, 8, POFF(p_sigmask), LONG, "x"},
! 	{"sl", "SL", NULL, 0, pvar, 3, POFF(p_slptime), ULONG, "d"},
! 	{"start", "STARTED", NULL, LJUST|USER, started, 7},
  	{"stat", "", "state"},
! 	{"state", "STAT", NULL, 0, state, 4},
  	{"svgid", "SVGID",
! 		NULL, 0, pvar, UIDLEN, POFF(p_svgid), USHORT, UIDFMT},
  	{"svuid", "SVUID",
! 		NULL, 0, pvar, UIDLEN, POFF(p_svuid), USHORT, UIDFMT},
! 	{"tdev", "TDEV", NULL, 0, tdev, 4},
! 	{"time", "TIME", NULL, USER, cputime, 9},
! 	{"tpgid", "TPGID", NULL, 0, evar, 4, EOFF(e_tpgid), ULONG, PIDFMT},
! 	{"trs", "TRS", NULL, 0, trss, 3},
! 	{"tsess", "TSESS", NULL, 0, evar, 6, EOFF(e_tsess), KPTR, "x"},
! 	{"tsiz", "TSIZ", NULL, 0, tsize, 4},
! 	{"tt", "TT", NULL, LJUST, tname, 4},
! 	{"tty", "TTY", NULL, LJUST, longtname, 8},
! 	{"ucomm", "UCOMM", NULL, LJUST, ucomm, MAXCOMLEN},
! 	{"uid", "UID", NULL, 0, pvar, UIDLEN, POFF(p_uid),USHORT, UIDFMT},
! 	{"upr", "UPR", NULL, 0, pvar, 3, POFF(p_usrpri), CHAR, "d"},
! 	{"uprocp", "UPROCP", NULL, USER, uvar, 6, UOFF(u_procp), KPTR, "x"},
! 	{"user", "USER", NULL, LJUST, uname, USERLEN},
  	{"usrpri", "", "upr"},
  	{"vsize", "", "vsz"},
! 	{"vsz", "VSZ", NULL, 0, vsize, 5},
! 	{"wchan", "WCHAN", NULL, LJUST, wchan, 6},
! 	{"xstat", "XSTAT", NULL, 0, pvar, 4, POFF(p_xstat), USHORT, "x"},
  #endif
  	{""},
  };
--- 88,307 ----
  
  VAR var[] = {
  #ifdef NEWVM
! 	{"%cpu", "%CPU", NULL, 0, pcpu, NULL, 4},
! 	{"%mem", "%MEM", NULL, 0, pmem, NULL, 4},
! 	{"acflag", "ACFLG",
! 		NULL, 0, pvar, NULL, 3, POFF(p_acflag), USHORT, "x"},
  	{"acflg", "", "acflag"},
  	{"blocked", "", "sigmask"},
  	{"caught", "", "sigcatch"},
! 	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, NULL, 16},
! 	{"cpu", "CPU", NULL, 0, pvar, NULL, 3, POFF(p_estcpu), ULONG, "d"},
  	{"cputime", "", "time"},
! 	{"f", "F", NULL, 0, pvar, NULL, 7, POFF(p_flag), LONG, "x"},
  	{"flags", "", "f"},
  	{"ignored", "", "sigignore"},
! 	{"inblk", "INBLK",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_inblock), LONG, "d"},
  	{"inblock", "", "inblk"},
! 	{"jobc", "JOBC", NULL, 0, evar, NULL, 4, EOFF(e_jobc), SHORT, "d"},
! 	{"ktrace", "KTRACE",
! 		NULL, 0, pvar, NULL, 8, POFF(p_traceflag), LONG, "x"},
! 	{"ktracep", "KTRACEP",
! 		NULL, 0, pvar, NULL, 8, POFF(p_tracep), LONG, "x"},
! 	{"lim", "LIM", NULL, 0, maxrss, NULL, 5},
! 	{"login", "LOGIN", NULL, LJUST, logname, NULL, MAXLOGNAME-1},
  	{"logname", "", "login"},
! 	{"lstart", "STARTED", NULL, LJUST|USER, lstarted, NULL, 28},
! 	{"majflt", "MAJFLT",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_majflt), LONG, "d"},
! 	{"minflt", "MINFLT",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_minflt), LONG, "d"},
! 	{"msgrcv", "MSGRCV",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_msgrcv), LONG, "d"},
! 	{"msgsnd", "MSGSND",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_msgsnd), LONG, "d"},
  	{"ni", "", "nice"},
! 	{"nice", "NI", NULL, 0, pvar, NULL, 2, POFF(p_nice), CHAR, "d"},
! 	{"nivcsw", "NIVCSW",
! 		NULL, USER, rvar, NULL, 5, ROFF(ru_nivcsw), LONG, "d"},
  	{"nsignals", "", "nsigs"},
! 	{"nsigs", "NSIGS",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_nsignals), LONG, "d"},
! 	{"nswap", "NSWAP",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_nswap), LONG, "d"},
! 	{"nvcsw", "NVCSW",
! 		NULL, USER, rvar, NULL, 5, ROFF(ru_nvcsw), LONG, "d"},
! 	{"nwchan", "WCHAN", NULL, 0, pvar, NULL, 6, POFF(p_wchan), KPTR, "x"},
! 	{"oublk", "OUBLK",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_oublock), LONG, "d"},
  	{"oublock", "", "oublk"},
! 	{"p_ru", "P_RU", NULL, 0, pvar, NULL, 6, POFF(p_ru), KPTR, "x"},
! 	{"paddr", "PADDR", NULL, 0, evar, NULL, 6, EOFF(e_paddr), KPTR, "x"},
! 	{"pagein", "PAGEIN", NULL, USER, pagein, NULL, 6},
  	{"pcpu", "", "%cpu"},
  	{"pending", "", "sig"},
! 	{"pgid", "PGID",
! 		NULL, 0, evar, NULL, PIDLEN, EOFF(e_pgid), ULONG, PIDFMT},
! 	{"pid", "PID", NULL, 0, pvar, NULL, PIDLEN, POFF(p_pid), LONG, PIDFMT},
  	{"pmem", "", "%mem"},
! 	{"ppid", "PPID",
! 		NULL, 0, evar, NULL, PIDLEN, EOFF(e_ppid), LONG, PIDFMT},
! 	{"pri", "PRI", NULL, 0, pri, NULL, 3},
! 	{"re", "RE", NULL, 0, pvar, NULL, 3, POFF(p_swtime), ULONG, "d"},
! 	{"rgid", "RGID", NULL, 0, evar, NULL, UIDLEN, EOFF(e_pcred.p_rgid),
  		ULONG, UIDFMT},
! 	{"rlink", "RLINK",
! 		NULL, 0, pvar, NULL, 8, POFF(p_procq.tqe_prev), KPTR, "x"},
! 	{"rss", "RSS", NULL, 0, p_rssize, NULL, 4},
  	{"rssize", "", "rsz"},
! 	{"rsz", "RSZ", NULL, 0, rssize, NULL, 4},
! 	{"rtprio", "RTPRIO", NULL, 0, pvar, NULL, 7, POFF(p_rtprio), LONG, "d"},
! 	{"ruid", "RUID", NULL, 0, evar, NULL, UIDLEN, EOFF(e_pcred.p_ruid),
  		ULONG, UIDFMT},
! 	{"ruser", "RUSER", NULL, LJUST|DSIZ, runame, s_runame, USERLEN},
! 	{"sess", "SESS", NULL, 0, evar, NULL, 6, EOFF(e_sess), KPTR, "x"},
! 	{"sig", "PENDING", NULL, 0, pvar, NULL, 8, POFF(p_siglist), LONG, "x"},
! 	{"sigcatch", "CAUGHT",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigcatch), LONG, "x"},
  	{"sigignore", "IGNORED",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigignore), LONG, "x"},
! 	{"sigmask", "BLOCKED",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigmask), LONG, "x"},
! 	{"sl", "SL", NULL, 0, pvar, NULL, 3, POFF(p_slptime), ULONG, "d"},
! 	{"start", "STARTED", NULL, LJUST|USER, started, NULL, 7},
  	{"stat", "", "state"},
! 	{"state", "STAT", NULL, 0, state, NULL, 4},
! 	{"svgid", "SVGID", NULL, 0,
! 		evar, NULL, UIDLEN, EOFF(e_pcred.p_svgid), ULONG, UIDFMT},
! 	{"svuid", "SVUID", NULL, 0,
! 		evar, NULL, UIDLEN, EOFF(e_pcred.p_svuid), ULONG, UIDFMT},
! 	{"tdev", "TDEV", NULL, 0, tdev, NULL, 4},
! 	{"time", "TIME", NULL, USER, cputime, NULL, 9},
! 	{"tpgid", "TPGID",
! 		NULL, 0, evar, NULL, 4, EOFF(e_tpgid), ULONG, PIDFMT},
! 	{"tsess", "TSESS", NULL, 0, evar, NULL, 6, EOFF(e_tsess), KPTR, "x"},
! 	{"tsiz", "TSIZ", NULL, 0, tsize, NULL, 4},
! 	{"tt", "TT ", NULL, 0, tname, NULL, 4},
! 	{"tty", "TTY", NULL, LJUST, longtname, NULL, 8},
! 	{"ucomm", "UCOMM", NULL, LJUST, ucomm, NULL, MAXCOMLEN},
! 	{"uid", "UID", NULL, 0, evar, NULL, UIDLEN, EOFF(e_ucred.cr_uid),
  		ULONG, UIDFMT},
! 	{"upr", "UPR", NULL, 0, pvar, NULL, 3, POFF(p_usrpri), CHAR, "d"},
! 	{"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN},
  	{"usrpri", "", "upr"},
  	{"vsize", "", "vsz"},
! 	{"vsz", "VSZ", NULL, 0, vsize, NULL, 5},
! 	{"wchan", "WCHAN", NULL, LJUST, wchan, NULL, 6},
! 	{"xstat", "XSTAT", NULL, 0, pvar, NULL, 4, POFF(p_xstat), USHORT, "x"},
  #else
! 	{"%cpu", "%CPU", NULL, 0, pcpu, NULL, 4},
! 	{"%mem", "%MEM", NULL, 0, pmem, NULL, 4},
! 	{"acflag", "ACFLG",
! 		NULL, USER, uvar, NULL, 3, UOFF(u_acflag), SHORT, "x"},
  	{"acflg", "", "acflag"},
  	{"blocked", "", "sigmask"},
  	{"caught", "", "sigcatch"},
! 	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, NULL, 16},
! 	{"cpu", "CPU", NULL, 0, pvar, NULL, 3, POFF(p_cpu), ULONG, "d"},
  	{"cputime", "", "time"},
! 	{"f", "F", NULL, 0, pvar, NULL, 7, POFF(p_flag), LONG, "x"},
  	{"flags", "", "f"},
  	{"ignored", "", "sigignore"},
! 	{"inblk", "INBLK",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_inblock), LONG, "d"},
  	{"inblock", "", "inblk"},
! 	{"jobc", "JOBC", NULL, 0, evar, NULL, 4, EOFF(e_jobc), SHORT, "d"},
! 	{"ktrace", "KTRACE",
! 		NULL, 0, pvar, NULL, 8, POFF(p_traceflag), LONG, "x"},
! 	{"ktracep", "KTRACEP",
! 		NULL, 0, pvar, NULL, 8, POFF(p_tracep), LONG, "x"},
! 	{"lim", "LIM", NULL, 0, maxrss, NULL, 5},
! 	{"logname", "LOGNAME", NULL, LJUST, logname, NULL, MAXLOGNAME-1},
! 	{"lstart", "STARTED", NULL, LJUST|USER, lstarted, NULL, 28},
! 	{"majflt", "MAJFLT",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_majflt), LONG, "d"},
! 	{"minflt", "MINFLT",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_minflt), LONG, "d"},
! 	{"msgrcv", "MSGRCV",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_msgrcv), LONG, "d"},
! 	{"msgsnd", "MSGSND",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_msgsnd), LONG, "d"},
  	{"ni", "", "nice"},
! 	{"nice", "NI", NULL, 0, pvar, NULL, 2, POFF(p_nice), CHAR, "d"},
! 	{"nivcsw", "NIVCSW",
! 		NULL, USER, rvar, NULL, 5, ROFF(ru_nivcsw), LONG, "d"},
  	{"nsignals", "", "nsigs"},
! 	{"nsigs", "NSIGS",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_nsignals), LONG, "d"},
! 	{"nswap", "NSWAP",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_nswap), LONG, "d"},
! 	{"nvcsw", "NVCSW",
! 		NULL, USER, rvar, NULL, 5, ROFF(ru_nvcsw), LONG, "d"},
! 	{"nwchan", "WCHAN", NULL, 0, pvar, NULL, 6, POFF(p_wchan), KPTR, "x"},
! 	{"oublk", "OUBLK",
! 		NULL, USER, rvar, NULL, 4, ROFF(ru_oublock), LONG, "d"},
  	{"oublock", "", "oublk"},
! 	{"p_ru", "P_RU", NULL, 0, pvar, NULL, 6, POFF(p_ru), KPTR, "x"},
! 	{"paddr", "PADDR", NULL, 0, evar, NULL, 6, EOFF(e_paddr), KPTR, "x"},
! 	{"pagein", "PAGEIN", NULL, USER, pagein, NULL, 6},
  	{"pcpu", "", "%cpu"},
  	{"pending", "", "sig"},
! 	{"pgid", "PGID",
! 		NULL, 0, evar, NULL, PIDLEN, EOFF(e_pgid), ULONG, PIDFMT},
! 	{"pid", "PID", NULL, 0, pvar, NULL, PIDLEN, POFF(p_pid), LONG, PIDFMT},
  	{"pmem", "", "%mem"},
! 	{"poip", "POIP", NULL, 0, pvar, NULL, 4, POFF(p_poip), SHORT, "d"},
! 	{"ppid", "PPID",
! 		NULL, 0, pvar, NULL, PIDLEN, POFF(p_ppid), LONG, PIDFMT},
! 	{"pri", "PRI", NULL, 0, pri, NULL, 3},
! 	{"re", "RE", NULL, 0, pvar, NULL, 3, POFF(p_swtime), ULONG, "d"},
! 	{"rgid", "RGID",
! 		NULL, 0, pvar, NULL, UIDLEN, POFF(p_rgid), USHORT, UIDFMT},
! 	{"rlink", "RLINK", NULL, 0, pvar, NULL, 8, POFF(p_rlink), KPTR, "x"},
! 	{"rss", "RSS", NULL, 0, p_rssize, NULL, 4},
  	{"rssize", "", "rsz"},
! 	{"rsz", "RSZ", NULL, 0, rssize, NULL, 4},
! 	{"ruid", "RUID",
! 		NULL, 0, pvar, NULL, UIDLEN, POFF(p_ruid), USHORT, UIDFMT},
! 	{"rtprio", "RTPRIO", NULL, 0, pvar, NULL, 7, POFF(p_rtprio), LONG, "d"},
! 	{"ruser", "RUSER", NULL, LJUST|DSIZ, runame, s_runame, USERLEN},
! 	{"sess", "SESS", NULL, 0, evar, NULL, 6, EOFF(e_sess), KPTR, "x"},
! 	{"sig", "PENDING", NULL, 0, pvar, NULL, 8, POFF(p_sig), LONG, "x"},
! 	{"sigcatch", "CAUGHT",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigcatch), LONG, "x"},
  	{"sigignore", "IGNORED",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigignore), LONG, "x"},
! 	{"sigmask", "BLOCKED",
! 		NULL, 0, pvar, NULL, 8, POFF(p_sigmask), LONG, "x"},
! 	{"sl", "SL", NULL, 0, pvar, NULL, 3, POFF(p_slptime), ULONG, "d"},
! 	{"start", "STARTED", NULL, LJUST|USER, started, NULL, 7},
  	{"stat", "", "state"},
! 	{"state", "STAT", NULL, 0, state, NULL, 4},
  	{"svgid", "SVGID",
! 		NULL, 0, pvar, NULL, UIDLEN, POFF(p_svgid), USHORT, UIDFMT},
  	{"svuid", "SVUID",
! 		NULL, 0, pvar, NULL, UIDLEN, POFF(p_svuid), USHORT, UIDFMT},
! 	{"tdev", "TDEV", NULL, 0, tdev, NULL, 4},
! 	{"time", "TIME", NULL, USER, cputime, NULL, 9},
! 	{"tpgid", "TPGID",
! 		NULL, 0, evar, NULL, 4, EOFF(e_tpgid), ULONG, PIDFMT},
! 	{"trs", "TRS", NULL, 0, trss, NULL, 3},
! 	{"tsess", "TSESS", NULL, 0, evar, NULL, 6, EOFF(e_tsess), KPTR, "x"},
! 	{"tsiz", "TSIZ", NULL, 0, tsize, NULL, 4},
! 	{"tt", "TT", NULL, LJUST, tname, NULL, 4},
! 	{"tty", "TTY", NULL, LJUST, longtname, NULL, 8},
! 	{"ucomm", "UCOMM", NULL, LJUST, ucomm, NULL, MAXCOMLEN},
! 	{"uid", "UID", NULL, 0, pvar, NULL, UIDLEN, POFF(p_uid),USHORT, UIDFMT},
! 	{"upr", "UPR", NULL, 0, pvar, NULL, 3, POFF(p_usrpri), CHAR, "d"},
! 	{"uprocp", "UPROCP",
! 		NULL, USER, uvar, NULL, 6, UOFF(u_procp), KPTR, "x"},
! 	{"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN},
  	{"usrpri", "", "upr"},
  	{"vsize", "", "vsz"},
! 	{"vsz", "VSZ", NULL, 0, vsize, NULL, 5},
! 	{"wchan", "WCHAN", NULL, LJUST, wchan, NULL, 6},
! 	{"xstat", "XSTAT", NULL, 0, pvar, NULL, 4, POFF(p_xstat), USHORT, "x"},
  #endif
  	{""},
  };
Index: print.c
===================================================================
RCS file: /b/cvstree/ncvs/src/bin/ps/print.c,v
retrieving revision 1.20
diff -c -r1.20 print.c
*** 1.20	1997/04/16 16:08:11
--- print.c	1997/04/29 01:17:37
***************
*** 284,289 ****
--- 284,300 ----
  #endif
  }
  
+ int
+ s_uname(k)
+ 	KINFO *k;
+ {
+ #ifndef NEWVM
+ 	    return (strlen(user_from_uid(KI_PROC(k)->p_uid, 0)));
+ #else
+ 	    return (strlen(user_from_uid(KI_EPROC(k)->e_ucred.cr_uid, 0)));
+ #endif
+ }
+ 
  void
  runame(k, ve)
  	KINFO *k;
***************
*** 298,303 ****
--- 309,325 ----
  #else
  	(void)printf("%-*s",
  	    (int)v->width, user_from_uid(KI_EPROC(k)->e_pcred.p_ruid, 0));
+ #endif
+ }
+ 
+ int
+ s_runame(k)
+ 	KINFO *k;
+ {
+ #ifndef NEWVM
+ 	    return (strlen(user_from_uid(KI_PROC(k)->p_ruid, 0)));
+ #else
+ 	    return (strlen(user_from_uid(KI_EPROC(k)->e_pcred.p_ruid, 0)));
  #endif
  }
  
Index: ps.c
===================================================================
RCS file: /b/cvstree/ncvs/src/bin/ps/ps.c,v
retrieving revision 1.18
diff -c -r1.18 ps.c
*** 1.18	1997/03/28 15:24:29
--- ps.c	1997/04/29 01:16:54
***************
*** 92,97 ****
--- 92,99 ----
  static int	 pscomp __P((const void *, const void *));
  static void	 saveuser __P((KINFO *));
  static void	 scanvars __P((void));
+ static void	 dynsizevars __P((KINFO *));
+ static void	 sizevars __P((void));
  static void	 usage __P((void));
  
  char dfmt[] = "pid tt state time command";
***************
*** 324,330 ****
--- 326,336 ----
  		kinfo[i].ki_p = kp;
  		if (needuser)
  			saveuser(&kinfo[i]);
+ 		dynsizevars(&kinfo[i]);
  	}
+ 
+ 	sizevars();
+ 
  	/*
  	 * print header
  	 */
***************
*** 362,367 ****
--- 368,412 ----
  {
  	struct varent *vent;
  	VAR *v;
+ 
+ 	for (vent = vhead; vent; vent = vent->next) {
+ 		v = vent->var;
+ 		if (v->flag & DSIZ) {
+ 			v->dwidth = v->width;
+ 			v->width = 0;
+ 		}
+ 		if (v->flag & USER)
+ 			needuser = 1;
+ 		if (v->flag & COMM)
+ 			needcomm = 1;
+ 	}
+ }
+ 
+ static void
+ dynsizevars(ki)
+ 	KINFO *ki;
+ {
+ 	struct varent *vent;
+ 	VAR *v;
+ 	int i;
+ 
+ 	for (vent = vhead; vent; vent = vent->next) {
+ 		v = vent->var;
+ 		if (!(v->flag & DSIZ))
+ 			continue;
+ 		i = (v->sproc)( ki);
+ 		if (v->width < i)
+ 			v->width = i;
+ 		if (v->width > v->dwidth)
+ 			v->width = v->dwidth;
+ 	}
+ }
+ 
+ static void
+ sizevars()
+ {
+ 	struct varent *vent;
+ 	VAR *v;
  	int i;
  
  	for (vent = vhead; vent; vent = vent->next) {
***************
*** 370,379 ****
  		if (v->width < i)
  			v->width = i;
  		totwidth += v->width + 1;	/* +1 for space */
- 		if (v->flag & USER)
- 			needuser = 1;
- 		if (v->flag & COMM)
- 			needcomm = 1;
  	}
  	totwidth--;
  }
--- 415,420 ----
Index: ps.h
===================================================================
RCS file: /b/cvstree/ncvs/src/bin/ps/ps.h,v
retrieving revision 1.4
diff -c -r1.4 ps.h
*** 1.4	1997/02/22 14:05:09
--- ps.h	1997/04/29 00:41:54
***************
*** 68,76 ****
--- 68,79 ----
  #define	COMM	0x01		/* needs exec arguments and environment (XXX) */
  #define	LJUST	0x02		/* left adjust on output (trailing blanks) */
  #define	USER	0x04		/* needs user structure */
+ #define	DSIZ	0x08		/* field size is dynamic*/
  	u_int	flag;
  				/* output routine */
  	void	(*oproc) __P((struct kinfo *, struct varent *));
+ 				/* sizing routine*/
+ 	int	(*sproc) __P((struct kinfo *));
  	short	width;		/* printing width */
  	/*
  	 * The following (optional) elements are hooks for passing information
***************
*** 81,86 ****
--- 84,90 ----
  	enum	type type;	/* type of element */
  	char	*fmt;		/* printf format */
  	char	*time;		/* time format */
+ 	short	dwidth;		/* dynamic printing width */
  	/*
  	 * glue to link selected fields together
  	 */
-----------------------------------------------------------------------



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704290130.SAA03420>