- nblock = (sbuf.st_size + 2559) / 2560;
- signal (2, intrp);
- for (bl = nblock - 1; bl >= 0; bl--)
- {
- lseek (f, bl * 2560, 0);
- n_byte = read (f, buf, 2560);
- n_record = n_byte / sizeof buf [0];
- for (rec = n_record - 1; rec >= 0; rec--)
- {
-
- if (should_print ())
- {
- q = ctime (&buf[rec].ut_time);
- printf
- (
- "%-8.8s %-8.8s %10.10s %5.5s ",
- buf[rec].ut_name, buf[rec].ut_line, q, 11+q
- );
- otime = buf[rec].ut_time;
- /*
- * look up the logout time for the tty
- */
- for (i = 0;; i++)
- {
- if (!*tty_names [i])
- /* not in the table, therefore add it */
- {
- move
- (
- buf[rec].ut_line,
- tty_names [i]
- );
- ntime = 0;
- break;
- }
- if
- (
- equal
- (
- tty_names [i],
- buf [rec].ut_line
- )
- )
- {
- ntime = logouts [i];
- break;
- }
- }
- if (ntime == 0)
- {
- printf (" still logged in\n");
- }
- else
- {
- if (ntime < 0)
- {
- ntime = -ntime;
- printf ("- crash");
- }
- else
- {
- printf ("- %5.5s", ctime (&ntime) + 11);
- }
- /*
- * calculate how long logged in
- */
- otime = ntime - otime;
- otime += 231220830 + 10800;
- if (otime < 231220830 + 86400 + 10800)
- {
- printf
- (
- " (%5.5s)\n",
- ctime (&otime) + 11
- );
- }
- else
- {
- printf
- (
- " (%ld+%5.5s)\n",
- (otime -
- (231330830-86400-10800))/86400,
- ctime (&otime) + 11
- );
- }
- }
- fflush (stdout);
+ for (bl--; bl >= 0; bl--) {
+ lseek(wtmp, bl * sizeof (buf), 0);
+ bp = &buf[read(wtmp, buf, sizeof (buf)) / sizeof(buf[0]) - 1];
+ for ( ; bp >= buf; bp--) {
+ print = want(bp);
+ if (print) {
+ ct = ctime(&bp->ut_time);
+ printf("%-*.*s %-*.*s %10.10s %5.5s ",
+ NMAX, NMAX, bp->ut_name,
+ LMAX, LMAX, bp->ut_line, ct, 11+ct);