#!/usr/local/bin/perl
#
# calendar.cgi
#
# Version 1.0.0
#
# Copyright (C) 2000 by Minomusi
# http://members.cool.jp/~minomusi/
##########
# 設定部分
# ↓漢字ライブラリ jcode.pl のファイル名
$jcodelib = 'jcode.pl';
# ↓保存されるファイルの漢字コード('sjis' 'euc' 'jis' のいずれか)
$kanjicode = 'sjis';
# 漢字ライブラリの読み込み
require "$jcodelib";
# 初期化
&init_form($kanjicode);
# 情報の取得
$button = $form{'button'};
$year=$form{'year'};
$mon=$form{'mon'};
# 日付文字列
@Monthday = (31,28,31,30,31,30,31,31,30,31,30,31);
@Days=("日","月","火","水","木","金","土");
@Gra=("month1.gif","month2.gif","month3.gif","month4.gif","month5.gif","month6.gif","month7.gif","month8.gif","month9.gif","month10.gif","month11.gif","month12.gif");
# 現在日時を取得
if ($button eq ""){
$button="今月";
}
if ($button eq '今月'){
( $sec, $min, $hour, $day, $mon, $year) = localtime(time);
$year += 1900;
$today=$day;
$thismonth=$mon;
}
# バックの色を決める。
srand(time|$$);
$ransu1 = int(rand(255));
$ransu2 = int(rand(255));
$ransu1 = int(rand(255));
$bgcolor = $ransu1+$ransu2*256+$ransu3*256*256;
# 月と年の変更
if ($button eq '前月'){
$mon--;
}
if ($button eq '次月'){
$mon++;
}
if ($mon>11){
$mon=0;
$year++;
}
if ($mon<0){
$mon=11;
$year--;
}
# うるう年の設定
if ((($year%4==0)&&($year%100!=0))||($year%400==0)){
$Monthday[1]=29;
}
# 月(変数)に1月をたす。(表示月)
$month=$mon+1;
# 1日目が何曜日かを求める
$day=1;
$start=&get_days($year,$month,$day);
# ヘッダの送出
print "Content-type: text/html\n\n";
# トップ部を表示
&page_begin("カレンダー");
print <<"END_OF_HTML";
<BODY BGCOLOR="$bgcolor" BACKGROUND="./$Gra[$mon]">
<center>
<TABLE Border>
<TR BGCOLOR="#008000"><TH COLSPAN=7><FONT COLOR="#FFFFFF">
$year 年 $month 月
</FONT></TH></TR>
<TR BGCOLOR="#ffd4bd">
<TH ALIGN="center"><FONT COLOR="#FF0000">$Days[0]</FONT></TH>
END_OF_HTML
# 曜日と日を表示
for ($i=1;$i<7;$i++){
print "<TH ALIGN=\"center\"><FONT COLOR=\"#42426F\">$Days[$i]</FONT></TH>\n";
}
print "</TR><TR>\n";
$week=0;
for ($i=0;$i<$start;$i++){
print "<TD></TD>\n";
$week++;
}
for ($i=1;$i<=$Monthday[$mon];$i++){
if (($i==$today)&&($mon==$thismonth)){
print "<TD ALIGN=\"center\"BGCOLOR=\"#ff6347\">\n";
} else {
print "<TD ALIGN=\"center\" BGCOLOR=\"#ccff99\">\n";
}
print "<A HREF=\"./schedule.cgi?year=$year&mon=$mon&day=$i\">$i</A>";
print "</TD>\n";
$week++;
if ($week==7){
print "</TR><TR>\n";
$week=0;
}
}
# ボトム部分の表示
$hyouji='表示';&jcode'convert(*hyouji, $kanjicode);
print <<"END_OF_HTML";
<TR><TD ALIGN="center" COLSPAN=7>
<FORM method=GET action="./calendar.cgi">
<INPUT TYPE="hidden" name="year" value="$year">
<INPUT TYPE="hidden" name="mon" value="$mon">
<INPUT TYPE="submit" name="button" value="前月">
<INPUT TYPE="submit" name="button" value="次月">
<INPUT TYPE="submit" name="button" value="今月">
</FORM>
</TD></TR>
</TABLE>
<P>
<P>
<TABLE BGCOLOR="#FFFFFF">
<TD>
<UL>
<LI>前月、または、次月ボタンをクリックして、その月のカレンダーを$hyoujiできます。
<LI>日の部分をクリックすれば、その日のスケジュールを書き込むことが出来ます。<BR>
<FONT SIZE=-1>(ただし、日付けの過ぎたスケジュールにはアクセスすることが出来ません。)</FONT>
<LI>バックの色はリロードするたびに自動的に変わります。
</TD>
</TABLE>
</center>
END_OF_HTML
&page_end;
# 終了
exit(0);
# タイトル部分
# &page_begin("メッセージ");
sub page_begin {
local ($msg) = @_;
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>$msg</TITLE>\n";
print "</HEAD>\n";
}
# ページの終わり
sub page_end {
print "</BODY>\n";
print "</HTML>\n";
exit(0);
}
# 決められた日の曜日を計算する
sub get_days{
local($year, $mon, $day) = @_;
if ($mon < 3){
$year--;
$mon += 12;
}
return (($year + int($year/4) - int($year/100) + int($year/400) + int((13*$mon + 8)/5) + $day) % 7);
}
# フォームからの情報を連想配列 %form に入れる
# &init_form('euc');
sub init_form {
local($query, @assocarray, $assoc, $property, $value, $charcode, $method);
$charcode = $_[0];
$method = $ENV{'REQUEST_METHOD'};
$method =~ tr/A-Z/a-z/;
if ($method eq 'post') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
$query = $ENV{'QUERY_STRING'};
}
@assocarray = split(/&/, $query);
foreach $assoc (@assocarray) {
($property, $value) = split(/=/, $assoc);
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, $charcode);
$form{$property} = $value;
}
}