#!/usr/bin/perl # --------- # calendar script by mario@lkjlkj.net # Thursday 26 September 2002 # --------- # bug: doesn't work at beginning of month # fix: use '$m - $date' instead of '$m % $date' # --------- use strict; chomp(my $program_name=`basename $0`); my $total_days=7; my $return_value=1; my $dayfound="Oct 29"; if (@ARGV > 0) { usage(); } my $noleap=`/bin/date +%Y` % 4; my $feblast=($noleap ? 28 : 29); my @lastday=(0,31,$feblast,31,30,31,30,31,31,30,31,30,31,31); # --- 13 months cover EOYear change my @month=("Xyz","Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec","Jan"); # ------------ # main program # ------------ my @future=bleak(); if ( open(CALENDAR, "<$ENV{HOME}/calendar") ) { while () { foreach $dayfound (@future) { print STDOUT $_ if ($_=~ /^$dayfound/); } } close (CALENDAR); $return_value=0; } else { print STDERR "$program_name: no ~/calendar found\n"; $return_value=1; } exit $return_value; # ------------ # functions # ------------ sub usage { print STDERR "usage: $program_name\n"; print STDERR "\tprint ~/calendar entries for next $total_days days\n"; print STDERR "\tformat : Mmm DD calendar entry or notes ...\n"; print STDERR "\texample: Oct 29 buy mario a ferrari\n"; print STDERR "\texample: Jan 01 survive hangover\n"; exit $return_value; } # --- # function populates @future with "Jan 01" strings for the next $total_days # EOMonth change computed here, instead of every line in ~/calendar # --- sub bleak { my @future; chomp(my $date=`/bin/date +%d`); chomp(my $month_n=`/bin/date +%m`); for (my $m=$date; $m <= ($date+$total_days); $m++) { my $smonth=$month[$month_n]; my $sdate=$date+($m - $date); # --- EOMonth patch if ($m > @lastday[$month_n]) { $smonth=$month[$month_n + 1]; $sdate=$m-@lastday[$month_n]; } $sdate="0".$sdate if ($sdate < 10); $future[$m - $date]="$smonth $sdate"; } return @future; } # --- EOF ---