program to print concurrent month output
Tom Christiansen
tchrist at convexe.uucp
Fri Oct 27 00:05:41 AEST 1989
Here is a simple litle script, which i call "now", that
does a cal on this month, last month, and next month,
and prints them out all together, like this
September 1989 October 1989 November 1989
S M Tu W Th F S S M Tu W Th F S S M Tu W Th F S
35 1 2 40 1 2 3 4 5 6 7 44 1 2 3 4
36 3 4 5 6 7 8 9 41 8 9 10 11 12 13 14 45 5 6 7 8 9 10 11
37 10 11 12 13 14 15 16 42 15 16 17 18 19 20 21 46 12 13 14 15 16 17 18
38 17 18 19 20 21 22 23 43 22 23 24 25 _2_6 27 28 47 19 20 21 22 23 24 25
39 24 25 26 27 28 29 30 44 29 30 31 48 26 27 28 29 30
The current day is printed in reverse video. I've been lazy and hard-coded
the vt100 standout escape sequence. You can always parse out $ENV{'TERMCAP'}
if you really want to. And see, the ||'d together substitute is pretty gross,
but I couldn't make it work for the boudary conditions otherwise. This has
been running for over a year, so I've tested it during December and January.
#!/usr/local/bin/perl
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$mon++; # 0 based
$year += 1900;
$nmon = $mon + 1;
$nyear = $year;
if ( $nmon == 13 ) {
$nmon = 1;
$nyear++;
}
$pmon = $mon - 1;
$pyear = $year;
if ( $pmon == 0 ) {
$pmon = 12;
$pyear--;
}
$SO = "\033[7m";
$SE = "\033[m";
open ( prev, "cal $pmon $pyear |" );
open ( cur, "cal $mon $year |" );
open ( foll, "cal $nmon $nyear |" );
until (eof(prev) && eof(cur) && eof(foll)) {
$prev = <prev>; chop($prev);
$cur = <cur>; chop($cur);
$cur =~ s/([^0-9][^0-9]*)$mday([^0-9][^0-9]*)/$1$SO$mday$SE$2/ ||
$cur =~ s/([^0-9][^0-9]*)$mday$/$1$SO$mday$SE/ ||
$cur =~ s/^$mday([^0-9][^0-9]*)/$SO$mday$SE$1/;
$foll = <foll>; chop($foll);
printf ("%-20s %-20s %-20s\n", $prev, $cur, $foll );
}
Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist
Convex Computer Corporation tchrist at convex.COM
"EMACS belongs in <sys/errno.h>: Editor too big!"
More information about the Alt.sources
mailing list