#!/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;

}

}