#!/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 (<CALENDAR>) 
	{ 
		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 ---
