#!/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 カレンダー
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 "\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 "\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 "
$year年$month月
$i
$day_count

$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__