#!/usr/bin/perl -P ;# ;# @(#)from.faces 1.4 91/11/19 ;# ;# Copyright (c) Steve Kinzler - April 1991. ;# ;# Permission is given to distribute these sources, as long as the ;# copyright messages are not removed, and no monies are exchanged. ;# ;# No responsibility is taken for any errors on inaccuracies inherent ;# either to the comments or the code of this program, but if reported ;# to me, then an attempt will be made to fix them. ;# Uncomment this line if you are running a version of faces earlier ;# than version 1.5.0: ;# $oldformat = 1; $cols = 7; ;# from.faces - alternate, experimental faces script to monitor one's mail ;# spool file ;# Steve Kinzler, kinzler@cs.indiana.edu, 28 Jan 1991 $format = $oldformat ? "%-20s%-20s%-10s%-10s%-10s%-10s\n" : "%s\t%s\t%s\t%s\t%s\t%s\n"; $ENV{'MAIL'} = "/var/spool/mail/$ENV{'USER'}" unless defined $ENV{'MAIL'}; print("Cols=1 Rows=1\nNOMAIL\n"), exit unless -s $ENV{'MAIL'}; %cal = ('Jan', 0, 'Feb', 31, 'Mar', 59, 'Apr', 90, 'May', 120, 'Jun', 151, 'Jul', 181, 'Aug', 212, 'Sep', 243, 'Oct', 273, 'Nov', 304, 'Dec', 334); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime time; $now = int((1900 + $year - 1) * 365.25) + $yday + ($hour * 60 + $min) / 1440; open(MAIL, $ENV{'MAIL'}); while () { if (/^From /) { %hdr = (); $host = ''; DO: /^(\S*)\s*(.*)/; $f = $1; $v = $2; if ($f =~ /./) { $field = $f; $field =~ y/A-Z/a-z/; $hdr{$field} = $v; } else { $hdr{$field} .= " $v"; } $_ = ; goto DO unless eof || /^$/; ($from, $wday, $mon, $mday, $time, $year) = split(/\s+/, $hdr{'from'}); #include "/usr/local/faces/lib/allrc"; $from =~ s/.*<([^>]*)>.*/\1/; $from =~ s/\(.*\)//; $from =~ s/\s.*//; while ($from =~ /^@([^:]*):([^:].*)/) { $from = $2; $host = $1; } while ($from =~ /(.*)[%@](.*)/) { $from = $1; $host = $2; } while ($from =~ /([^!]*)!(.*)/) { $from = $2; $host = $1; $host .= '.uucp' unless $host =~ /\./; } while ($from =~ /([^:]*)::(.*)/) { $from = $2; $host = $1; } $from =~ s/^(.{0,20}).*/\1/ if $oldformat; $from =~ y/A-Z/a-z/ unless $from =~ /[a-z]/; $from =~ s/^postmaster$/postmaster/i; $wind = $from; $wind =~ s/^(.{0,10}).*/\1/ if $oldformat; if ($oldformat) { $host =~ s/^[^\.]*.// while length $host > 20; } $host =~ y/A-Z/a-z/; $day = $cal{$mon}; if ($year % 4 == 0 && $day > 31) { $day++; } $time =~ /(.*):(.*):.*/; $then = int(($year - 1) * 365.25) + $day + $mday - 1 + ($1 * 60 + $2) / 1440; $days = int($now - $then); $hrs = ($now - $then - $days) * 24; $mins = int(($hrs - int($hrs)) * 60); $hrs = int($hrs); $hrs = "0$hrs" if $hrs < 10; $mins = "0$mins" if $mins < 10; $icon = "$days,$hrs:$mins"; $icon =~ s/^(.{0,10}).*/\1/ if $oldformat; $n++; $output .= sprintf($format, $from, $host, $wind, '', $icon, ''); } } close(MAIL); printf("Cols=1 Rows=1\nNOMAIL\n"), exit if $n <= 0; printf $format, $from, $host, $wind, $n, '', ''; printf "Cols=%d Rows=%d\n", ($n > $cols) ? $cols : $n, ($n - 1) / $cols + 1; print $output;