wcal
#!/usr/bin/perl
use POSIX;
my ($month, $year) = @ARGV;
if (@ARGV < 1)
{
my ($sec,$min,$hour,$mday,$mon,$yr) = localtime();
$month = $mon+1;
$year = $yr + 1900;
}
if (($month < 1) || (12 < $month))
{
print(" usage: wcal <month> [<year>]n");
exit;
}
if (! defined($year))
{
$year = this_year();
}
%DATA = ("left.HANDLE" => "LEFT",
"left.VAR" => $left,
"left.SUB" => &last_month,
"mid.HANDLE" => "MID",
"mid.VAR" => $mid,
"mid.SUB" => &this_month,
"right.HANDLE" => "RIGHT",
"right.VAR" => $right,
"right.SUB" => &next_month);
foreach $key (qw/left mid right/)
{
${$DATA{"$key.VAR"}} = &{$DATA{"$key.SUB"}}($month, $year);
my $cmd = sprintf("cal %s", ${$DATA{"$key.VAR"}});
open($DATA{"$key.HANDLE"}, "$cmd |");
}
# foreach $fhandle (qw/LEFT MID RIGHT/)
# {
# open($fhandle, "cal $left|");
# }
# open(MID, "cal $mid|");
# open(RIGHT, "cal $right|");
for ($done = 0 ; !$done ; )
{
$done = 1;
foreach $key (qw/left mid right/)
{
my $handle = $DATA{"$key.HANDLE"};
chomp(${$DATA{"$key.VAR"}} = <$handle>);
if (defined(${$DATA{"$key.VAR"}}))
{
$done = 0;
if ($^O eq "aix")
{
if (${$DATA{"$key.VAR"}} =~ /^ /)
{
${$DATA{"$key.VAR"}} =~ s/ / /g;
${$DATA{"$key.VAR"}} =~ s/(d) / /g;
}
else
{
${$DATA{"$key.VAR"}} =~ s/ / /g;
}
}
${$DATA{"$key.VAR"}} =~ s/([A-Z][a-z])[a-z] / /g;
}
}
if (!$done)
{
print(" ");
foreach $key (qw/left mid right/)
{
printf("%-25s ", ${$DATA{"$key.VAR"}});
}
}
print("n");
}
# ===========================================================================
sub myr
{
my ($umon, $uyear) = @_;
my $now = mktime(0, 0, 0, 1, $umon-1, $uyear-1900);
return $now;
}
# ===========================================================================
sub last_month
{
my $now = myr(@_);
my ($sec,$min,$hour,$mday,$mon,$year) = localtime($now);
($sec,$min,$hour,$mday,$mon,$year) = localtime($now - ($mday*24*3600));
my $rval = sprintf("%d %d", 1+$mon, 1900+$year);
return $rval;
}
# ===========================================================================
sub this_month
{
my $now = myr(@_);
my ($sec,$min,$hour,$mday,$mon,$year) = localtime($now);
my $rval = sprintf("%d %d", 1+$mon, 1900+$year);
return $rval;
}
# ===========================================================================
sub this_year
{
my ($sec,$min,$hour,$mday,$mon,$year) = localtime();
return 1900+$year;
}
# ===========================================================================
sub next_month
{
my $now = myr(@_);
my ($sec,$min,$hour,$mday,$mon,$year) = localtime($now);
my ($sec,$min,$hour,$mday,$mon,$year)
= localtime($now + ((35-$mday)*24*3600));
my $rval = sprintf("%d %d", 1+$mon, 1900+$year);
return $rval;
}
Comments (0)
You don't have permission to comment on this page.