The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -P

# $RCSfile: scan_last,v $$Revision: 4.1 $$Date: 92/08/07 17:20:35 $

# This reports who was logged on at weird hours

($dy, $mo, $lastdt) = split(/ +/,`date`);

open(Last, 'exec last 2>&1 |') || die "scan_last: can't run last";

while (<Last>) {
#if defined(mc300) || defined(mc500) || defined(mc700)
    $_ = substr($_,0,19) . substr($_,23,100);
#endif
    next if /^$/;
    (print),next if m|^/|;
    $login  = substr($_,0,8);
    $tty    = substr($_,10,7);
    $from   = substr($_,19,15);
    $day    = substr($_,36,3);
    $mo     = substr($_,40,3);
    $dt     = substr($_,44,2);
    $hr     = substr($_,47,2);
    $min    = substr($_,50,2);
    $dash   = substr($_,53,1);
    $tohr   = substr($_,55,2);
    $tomin  = substr($_,58,2);
    $durhr  = substr($_,63,2);
    $durmin = substr($_,66,2);
    
    next unless $hr;
    next if $login eq 'reboot  ';
    next if $login eq 'shutdown';

    if ($dt != $lastdt) {
	if ($lastdt < $dt) {
	    $seen += $dt - $lastdt;
	}
	else {
	    $seen++;
	}
	$lastdt = $dt;
    }

    $inat = $hr + $min / 60;
    if ($tohr =~ /^[a-z]/) {
	$outat = 12;		# something innocuous
    } else {
	$outat = $tohr + $tomin / 60;
    }

  last if $seen + ($inat < 8) > 1;

    if ($inat < 5 || $inat > 21 || $outat < 6 || $outat > 23) {
	print;
    }
}