Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!usc!gem.mps.ohio-state.edu!uwm.edu!lll-winken!sun-barr!newstop!texsun!convex!convexe!tchrist From: tchrist@convexe.uucp (Tom Christiansen) Newsgroups: alt.sources Subject: program to print concurrent month output Keywords: perl cal Message-ID: <2423@convex.UUCP> Date: 26 Oct 89 14:05:41 GMT Sender: usenet@convex.UUCP Reply-To: tchrist@convex.COM (Tom Christiansen) Followup-To: alt.sources.d Distribution: alt Organization: Convex Computer Corporation, Richardson, Tx. Lines: 64 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 = ; chop($prev); $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 = ; chop($foll); printf ("%-20s %-20s %-20s\n", $prev, $cur, $foll ); } Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist Convex Computer Corporation tchrist@convex.COM "EMACS belongs in : Editor too big!"