#!/usr/bin/perl
&decode;
#本日のバックカラー
$today_color = '#FFC3CE';
#それ以外のバックカラー
$day_bgcolor = '#ffffff';
#数字のフォントカラー
$font_color = 'black';
#土曜日のフォントカラー
$sat_color = '#0000FF';
#日曜日、祝日のフォントカラー
$sun_color = '#FF0000';
&time;
if ($month_r) {$month = $month_r; }
else{$month = $mon;}
#春分の日、秋分の日所得
($spring,$autum)=&get_special_day($year);
# 祝日
@spe_day = ('1 1','2 11',"3 $spring",'4 29','5 3','5 4','5 5',"9 $autum",'11 3','11 23','12 23');
# 祝日2(成人の日、体育の日)第2月曜
@spe_day2 = ('1','10');
# 祝日3 (海の日、敬老の日)第3月曜日
@spe_day3 = ('7','9');
#月始めの曜日所得
$wday_no = &wday_no(1,$year,$month);
$lastday = (31,28,31,30,31,30,31,31,30,31,30,31) [$month-1] + ($month == 2 && (($years % 4 == 0 && $years % 100 != 0) || $years % 400 == 0)) ;
&html;
sub html{
print <<"HTML";
Content-type: text/html
カレンダー
|
$year年$month月
|
HTML
foreach $i(@week){
if ($i eq $week[0]){ $color = $sun_color;}
elsif ($i eq $week[6]){ $color = $sat_color;}
else {$color = $font_color;}
print "| $i | \n";
}
print "
\n";
$flag =0;
$c = 0;
$a = 0;
$next_flag = 0;
foreach (1..42){
if ($c == 7 ){$c = 0;}
++$c;
if (($c < $wday_no +1) && ($start_flag == 0)|| ($a == $lastday)){
$day_count = ' ';$bgcolor = $day_bgcolor;}
else { $day_count = ++$a; $start_flag = 1;}
if (($start_flag == 1)&&($c == 2)){++$flag ;}
if ((($month == $spe_day2[0] )||($month == $spe_day2[1])) &&
($c == 2) && ($flag == 2)){ $color = $sun_color;$bgcolor = $day_bgcolor; }
elsif ((($month == $spe_day3[0] )||($month == $spe_day3[1])) &&
($c == 2) && ($flag == 3)){ $color = $sun_color;$bgcolor = $day_bgcolor; }
elsif ($c == 1 ) { $color = $sun_color; $bgcolor = $day_bgcolor;}
elsif (($c == 2) && ($next_flag==1)){ $color = $sun_color; $next_flag = 0;}
elsif ($c == 2 ) {$bgcolor = $day_bgcolor; $color = $font_color; }
elsif ($c == 7 ) { $color = $sat_color; $bgcolor = $day_bgcolor;}
else { $bgcolor = $day_bgcolor; $color = $font_color;}
foreach (@spe_day){
($mon_value,$day_value)= split(/ /);
if (($mon_value == $month)&&($day_value == $a)&&($c == 1 )){$next_flag = 1;last;}
if (($mon_value == $month)&&($day_value == $a)){$color = $sun_color;last;}
}
if (($a == $today)&& ($month == $mon)){ if ($c == 7 ){
$bgcolor = $today_color; }
elsif ($c == 1 ) { $bgcolor = $today_color;}
elsif ($c == 2 ) { $bgcolor = $today_color;}
else{$bgcolor = $today_color; }
}
if (($c == 1) && ($flag > 2) && ( $day_count eq ' ')){last;}
elsif ($c == 1) {print "\n";}
print "| $day_count | \n";
if ($c == 7 ) {print "
\n";}
}
$back_month = $month -1;
$next_month = $month +1;
if ($back_month < 1 ) {$back = '';}
else{$back = "←back\n";}
if ($next_month > 12 ) {$next = '';}
else{$next = "next→\n";}
print "
$back\ \;\ \;$next";
exit;
}
#現在時間所得
sub time{
($sec,$min,$hour,$today,$mon,$year,$wday) = localtime(time);
@week = ('日','月','火','水','木','金','土');
$week = $weekday[$wday];
$mon++;
$year = 1900 + $year;
}
#ツェラーの公式を利用、指定日の曜日所得
sub wday_no {
local($day, $year, $mon) = @_;
if ($mon == 1 || $mon == 2) { $year--; $mon += 12; }
int ($year + int ($year/4) - int ($year/100) + int ($year/400) + int (2.6*$mon+1.6) + $day) % 7;
}
#春分の日、秋分の日
sub get_special_day{
local($year)=@_;
$spring =int(20.8431+0.242194*($year-1980)-int(($year-1980)/4));
$autum=int(23.2488+0.242194*($year-1980)-int(($year-1980)/4));
($spring,$autum);
}
#デコード処理
sub decode{
$method = $ENV{ 'REQUEST_METHOD' };
if( $method eq 'GET' ) {
$input = $ENV{ 'QUERY_STRING' };
} else {read( STDIN,$input,$ENV{ 'CONTENT_LENGTH' } );}
@in = split(/&/,$input);
foreach (@in) {
($list, $value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#&jcode'convert(*value, 'sjis');
$form{$list} = $value;
}
$month_r = $form{'month'};
}
__END__