SCCS-vsn: usr.bin/w/w.c 5.4
#include <sys/dir.h>
#include <sys/user.h>
#include <sys/proc.h>
#include <sys/dir.h>
#include <sys/user.h>
#include <sys/proc.h>
#include <machine/pte.h>
#include <sys/vm.h>
#define NMAX sizeof(utmp.ut_name)
#define LMAX sizeof(utmp.ut_line)
#include <machine/pte.h>
#include <sys/vm.h>
#define NMAX sizeof(utmp.ut_name)
#define LMAX sizeof(utmp.ut_line)
+#define HMAX sizeof(utmp.ut_host)
#define ARGWIDTH 33 /* # chars left on 80 col crt for args */
#define ARGWIDTH 33 /* # chars left on 80 col crt for args */
time_t findidle();
int debug; /* true if -d flag: debugging output */
time_t findidle();
int debug; /* true if -d flag: debugging output */
+int ttywidth = 80; /* width of tty */
int header = 1; /* true if -h flag: don't print heading */
int lflag = 1; /* true if -l flag: long style output */
int header = 1; /* true if -h flag: don't print heading */
int lflag = 1; /* true if -l flag: long style output */
+int prfrom = 1; /* true if not -f flag: print host from */
int login; /* true if invoked as login shell */
time_t idle; /* number of minutes user is idle */
int nusers; /* number of users logged in now */
int login; /* true if invoked as login shell */
time_t idle; /* number of minutes user is idle */
int nusers; /* number of users logged in now */
register int i, j;
char *cp;
register int curpid, empty;
register int i, j;
char *cp;
register int curpid, empty;
login = (argv[0][0] == '-');
cp = rindex(argv[0], '/');
login = (argv[0][0] == '-');
cp = rindex(argv[0], '/');
+ case 'f':
+ prfrom = !prfrom;
+ break;
+
case 'h':
header = 0;
break;
case 'h':
header = 0;
break;
}
} else {
if (!isalnum(argv[1][0]) || argc > 2) {
}
} else {
if (!isalnum(argv[1][0]) || argc > 2) {
- printf("Usage: %s [ -hlsuw ] [ user ]\n", cp);
+ printf("Usage: %s [ -hlsfuw ] [ user ]\n", cp);
exit(1);
} else
sel_user = argv[1];
exit(1);
} else
sel_user = argv[1];
+ if (ioctl(1, TIOCGWINSZ, &win) == -1 || win.ws_col > 70)
+ ttywidth = win.ws_col;
if ((kmem = open("/dev/kmem", 0)) < 0) {
fprintf(stderr, "No kmem\n");
exit(1);
if ((kmem = open("/dev/kmem", 0)) < 0) {
fprintf(stderr, "No kmem\n");
exit(1);
exit(0);
/* Headers for rest of output */
exit(0);
/* Headers for rest of output */
+ if (lflag && prfrom)
+ printf("User tty from login@ idle JCPU PCPU what\n");
+ else if (lflag)
printf("User tty login@ idle JCPU PCPU what\n");
printf("User tty login@ idle JCPU PCPU what\n");
+ else if (prfrom)
+ printf("User tty from idle what\n");
else
printf("User tty idle what\n");
fflush(stdout);
else
printf("User tty idle what\n");
fflush(stdout);
putline()
{
register int tm;
putline()
{
register int tm;
+ int width = ttywidth - 1;
/* print login name of the user */
printf("%-*.*s ", NMAX, NMAX, utmp.ut_name);
/* print login name of the user */
printf("%-*.*s ", NMAX, NMAX, utmp.ut_name);
/* print tty user is on */
/* print tty user is on */
+ if (lflag && !prfrom) {
/* long form: all (up to) LMAX chars */
printf("%-*.*s", LMAX, LMAX, utmp.ut_line);
/* long form: all (up to) LMAX chars */
printf("%-*.*s", LMAX, LMAX, utmp.ut_line);
+ width -= LMAX;
+ } else {
/* short form: 2 chars, skipping 'tty' if there */
if (utmp.ut_line[0]=='t' && utmp.ut_line[1]=='t' && utmp.ut_line[2]=='y')
printf("%-2.2s", &utmp.ut_line[3]);
else
printf("%-2.2s", utmp.ut_line);
/* short form: 2 chars, skipping 'tty' if there */
if (utmp.ut_line[0]=='t' && utmp.ut_line[1]=='t' && utmp.ut_line[2]=='y')
printf("%-2.2s", &utmp.ut_line[3]);
else
printf("%-2.2s", utmp.ut_line);
+ width -= 2;
+ }
+
+ if (prfrom) {
+ printf(" %-14.14s", utmp.ut_host);
+ width -= 15;
/* print when the user logged in */
prtat(&utmp.ut_time);
/* print when the user logged in */
prtat(&utmp.ut_time);
/* print idle time */
if (idle >= 36 * 60)
printf("%2ddays ", (idle + 12 * 60) / (24 * 60));
else
prttime(idle," ");
/* print idle time */
if (idle >= 36 * 60)
printf("%2ddays ", (idle + 12 * 60) / (24 * 60));
else
prttime(idle," ");
if (lflag) {
/* print CPU time for all processes & children */
prttime(jobtime," ");
if (lflag) {
/* print CPU time for all processes & children */
prttime(jobtime," ");
/* print cpu time for interesting process */
prttime(proctime," ");
/* print cpu time for interesting process */
prttime(proctime," ");
}
/* what user is doing, either command tail or args */
}
/* what user is doing, either command tail or args */
- printf(" %-.32s\n",doing);
+ printf(" %-.*s\n", width-1, doing);