#!/usr/local/bin/perl

#===============================================================================
#
#                   万年カレンダー 『Web Calender』ver 1.62
#
#                            Copyright Shinobu Suzuki 1998. All rights reserved.
#-------------------------------------------------------------------------------
#   HomePage : http://www.aikis.or.jp/~s-suzuki/cgilabo/
#   E-mail   : s-suzuki@aikis.or.jp
#===============================================================================
# 各種変数の初期設定
#-------------------------------------------------------------------------------
#
$script      = 'webcalen';              # 掲示板スクリプト名(拡張子なし)
$version     = '1.62';                  # 本スクリプトのバージョン
$cginame     = "$script".".cgi";

$title       = "の後藤研の予\定";       # タイトルに付加する文字列
$title_col   = '#000090';               # タイトルの色
$title_text  = 'NH4CuCl3';              # タイトルの説明
$bg_image    = '';                      # 背景画像(URL)
$bg_color    = '#dddddd';               # 背景色
$text_color  = '#000000';               # テキスト色
$link_color  = '#2222ff';               # リンク色
$alink_color = '#ff0000';               # リンク中の色
$vlink_color = '#aa22aa';               # 既リンク色
$bg_holiday  = '#ffdddd';               # 休日の背景色
$bg_sunday   = '#ffdddd';               # 日曜日の背景色
$bg_saturday = '#ddddff';               # 土曜日の背景色
$bg_weekday  = '#ffffff';               # 平日の背景色
$index       = '../';                   # 戻り先(URL)

$col1        = '赤';                    # 色１
$c1          = '#ff0000';               # 色コード(色名)１
$col2        = '青';                    # 色２
$c2          = 'blue';                  # 色コード(色名)２
$col3        = '緑';                    # 色３
$c3          = 'green';                 # 色コード(色名)３
$col4        = '黄';                    # 色４
$c4          = 'yellow';                # 色コード(色名)４

#----------------------------------------------------------
# CERN httpdを使ったサーバーの場合などで、ファイル関係のエ
# ラーが出る場合、設置する（サーバー上の）ディレクトリをフ
# ルパスを指定する。最後は / で終わること。
#       $path = '/home/users/hogehoge/public_html/cgi-bin/';
#----------------------------------------------------------
$path = '';

#----------------------------------------------------------
# 予定内容のタグ禁止設定(0:そのまま,1:一部禁止,2:全面禁止)
#----------------------------------------------------------
$tag_mode = 1;


#----------------------------------------------------------
# 日本語処理ライブラリの指定
#----------------------------------------------------------
require "$path"."jcode.pl";


#=====================================================================
#  これより、処理の開始
#=====================================================================

&get_now;
&form;
&read_data;
&calender;

#----------------------------------------------------------
# スクリプトの動作を決定($FORM{'task'}で判定)
#----------------------------------------------------------
#
if ( $FORM{'task'} eq 'edit' ) {            # 編集モード
    &edit_data;
}
elsif ( $FORM{'task'} eq 'add') {           # データの追加
    &add_data;
}
elsif ( $FORM{'task'} eq 'add2') {          # データの追加書き込み
    &add_data2;
}
elsif ( $FORM{'task'} eq 'write') {         # データ書き込み(編集)
    &write_data('edit');
}
elsif ( $FORM{'task'} eq 'write2') {        # データ書き込み(追加)
    &write_data('add');
}
else {                                      # 通常の画面表示
    &html;
}
exit;

#=====================================================================
#  処理はここまで（以下は、各サブルーチン）
#=====================================================================


#----------------------------------------------------------
# カレンダーデータの作成
#----------------------------------------------------------
#
sub calender {

    @week2    = ('日','月','火','水','木','金','土');
    @zure     = (0,0,3,3,6,1,4,6,2,5,0,3,5);
    @monthday = (0,31,28,31,30,31,30,31,31,30,31,30,31);

    #------------------------------------------------------------
    # うるう年の場合 $uruu に 1 がセットされる
    #------------------------------------------------------------
    $temp1 = int($year/4)-int($year/100)+int($year/400);
    $temp2 = int(($year-1)/4)-int(($year-1)/100)+int(($year-1)/400);
    $uruu  = $temp1-$temp2;

    $monthday[2] = $monthday[2]+$uruu;

    #------------------------------------------------------------
    # $year_zureは、$yearの1/1が何曜日分だけずれているかを計算
    # +0で、日から。+6なら月から。
    #------------------------------------------------------------
    $year_zure = (($year+$temp2) % 7)+0;

    #------------------------------------------------------------
    # $month_zureは、1月からその月までの曜日のずれを求める
    #------------------------------------------------------------
    $month_zure = $zure[$month];
    $month_zure = $month_zure+$uruu if($month > 2);

    #------------------------------------------------------------
    # $weekで、その月の1日が何曜日なのかを求める
    #------------------------------------------------------------
    $week = (($month_zure+$year_zure) % 7);
}


#----------------------------------------------------------
# 予定データの読み込み
#----------------------------------------------------------
#
sub read_data {

    #--------------------------------------------------
    # ログファイル名の作成
    #--------------------------------------------------
    $log_name = sprintf ("%s%d%02d.dat", $path, $year, $month);

    if ( open(DB,"$log_name")) {
        eval 'flock(DB,1);';
        @lines = <DB>;
        close(DB);
        eval 'flock(DB,8);';

        foreach $line (@lines) {
            if( substr( $line, 0, 1 ) eq "0" ) {
                $temp = substr( $line, 1, 1 );
            }
            else {
                $temp = substr( $line, 0, 2 );
            }
            #--------------------------
            # 予定の読み込み
            #--------------------------
            $DATA{$temp}    = substr( $line, 3, length($line)-4 );

            #--------------------------
            # 休日指定
            #--------------------------
            $HOLIDAY{$temp} = substr( $line, 2, 1 );
        }
    }
}



#----------------------------------------------------------
# フォームデータのデコード処理と変数の初期化
#----------------------------------------------------------
sub form {

    if ($ENV{'REQUEST_METHOD'} eq "POST") {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    }
    else {
        $buffer = $ENV{'QUERY_STRING'};
    }
    @pairs = split(/&/,$buffer);

    foreach $pair (@pairs) {
        ($name, $value) = split(/=/, $pair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        &jcode'convert(*value,'sjis');

        #----------------------------------------
        # 書き込まれた内容のチェックルーチン
        #----------------------------------------
        if ($tag_mode == 1) {
            $value =~ s/<img(.|\n)*//ig;
            $value =~ s/<!--#(.|\n)*//ig;
            $value =~ s/<form(.|\n)*//ig;
            $value =~ s/<table(.|\n)*//ig;
            $value =~ s/<xmp(.|\n)*//ig;
            $value =~ s/<code(.|\n)*//ig;
            $value =~ s/<script(.|\n)*//ig;
            $value =~ s/<plaintext(.|\n)*//ig;
            $value =~ s/<listing(.|\n)*//ig;
            $value =~ s/<isindex(.|\n)*//ig;
            $value =~ s/<body(.|\n)*//ig;
            $value =~ s/<title(.|\n)*//ig;
            $value =~ s/<frame(.|\n)*//ig;
            $value =~ s/<server(.|\n)*//ig;
            $value =~ s/<span(.|\n)*//ig;
            $value =~ s/font-size(.|\n)*//ig;
            $value =~ s/point-size(.|\n)*//ig;
            $value =~ s/<basefont(.|\n)*//ig;
            $value =~ s/<style(.|\n)*//ig;
        }
        elsif ($tag_mode == 2) {
            $value =~ s/</&lt;/g;
            $value =~ s/>/&gt;/g;
        }

        #----------------------------------------
        # 改行コードを<BR>に変換する
        #----------------------------------------
        $value =~ s/\r\n/<BR>/g;
        $value =~ s/\n/<BR>/g;

        #----------------------------------------
        # 休日指定フォーム
        #----------------------------------------
        if( $name eq "holiday" ) {
            $HOLIDAY2{$value} = "=";
        }
        #----------------------------------------
        # その他のフォーム
        #----------------------------------------
        else {
            $FORM{$name} = $value;
        }
    }

    #--------------------------------------------------
    # 年・月が指定されていない場合は現在の月にする
    #--------------------------------------------------
    $year    = $FORM{'year'};
    $month   = $FORM{'month'};   
    $year    = $yy unless($FORM{'year'});
    $month   = $mon unless($FORM{'month'});
}


#----------------------------------------------------------
# 現在時刻の取得
#----------------------------------------------------------
sub get_now {
    $ENV{'TZ'} = 'JST-9';
    $times = time;
    ($sec,$min,$hour,$mday,$mon,$yy,$wday,$yday,$isdst) = localtime($times);
    $min   = "0$min" if ($min < 10);
    $mon++;
    $yy    = $yy + 1900;
    $youbi = ('日','月','火','水','木','金','土') [$wday];
    $date  = "$yy/$mon/$mday($youbi)$hour:$min";
}



#----------------------------------------------------------
# メイン画面の表示
#----------------------------------------------------------
sub html{

    $year1      = $year;
    $next_month = $month + 1;
    if( $next_month == 13 ) {
        $next_month = 1;
        $year1++;
    }
    $year0      = $year;
    $last_month = $month-1;
    if( $last_month == 0 ) {
        $last_month = 12;
        $year0--;
    }

#    print "Content-type: text/html\n\n";
    print "Content-type: text/html;charset=Shift_JIS\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>$year年$month月$title</TITLE>\n</HEAD>\n\n";
    if( $bg_image ne "" ) {
        print "<BODY BACKGROUND=\"$bg_image\" BGCOLOR=\"$bg_color\" TEXT=\"$text_color\" LINK=\"$link_color\" ALINK=\"$alink_color\" VLINK=\"$vlink_color\">\n\n";
    }
    else {
        print "<BODY BGCOLOR=\"$bg_color\" TEXT=\"$text_color\" LINK=\"$link_color\" ALINK=\"$alink_color\" VLINK=\"$vlink_color\">\n\n";
    }

    print "<FORM METHOD=\"GET\" ACTION=\"$cginame\">\n";
    print "<TABLE BORDER=0 WIDTH=500>\n<TR VALIGN=\"bottom\">\n";
    print "<TD><FONT SIZE=5 COLOR=\"$title_col\">$year年$month月$title</FONT></TD>";
    print "<TD ALIGN=\"right\"><A HREF=\"$index\">戻る</A></TD>\n</TR></TABLE>";
    print "<HR>\n";
    print "[<A HREF=\"${cginame}?year=$year0&month=$last_month\">$last_month月</A>] $month月 [<A HREF=\"${cginame}?year=$year1&month=$next_month\">$next_month月</A>]　\n";
    print "<INPUT TYPE=\"text\" NAME=\"year\" VALUE=\"$year\" SIZE=5>年\n";
    print "<INPUT TYPE=\"text\" NAME=\"month\" VALUE=\"$month\" SIZE=3>月\n";
    print "<INPUT TYPE=\"submit\" VALUE=\"　表\示　\">\n";
    print "<INPUT TYPE=\"reset\" VALUE=\"Reset\"><HR></FORM>\n";

    print "<TABLE BORDER=1 WIDTH=500 ";
    print "CELLPADDING=2 CELLSPACING=1 BGCOLOR=#000000>\n";     # BORDERCOLORLIGHT=#d07040 BORDERCOLORDARK=#400000>\n";

    print "<TR>\n    <TH COLSPAN=3 BGCOLOR=\"$bg_weekday\">$year年$month月</TH>\n</TR>\n";

    for( $i=1; $i<=$monthday[$month]; $i++ ) {

        if( $DATA{$i} ne "" ) {
            $comment = $DATA{$i};
        }
        else {
            $comment = "　";
        }

        #------------------------------
        # 背景色の設定
        #------------------------------
        if( $week == 0 ) {  # 日曜日
            $bg_col = $bg_sunday;
        }
        elsif( $week == 6 ) {   # 土曜日
            $bg_col = $bg_saturday;
        }
        else {
            $bg_col = $bg_weekday;
        }
        if( $HOLIDAY{$i} eq "=" ) {
            $bg_col = $bg_holiday;
        }

        print "<TR>\n";
        print "    <TD ALIGN=\"right\"  BGCOLOR=\"$bg_col\" NOWRAP>&nbsp;$i&nbsp;</TD>\n";
        print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_col\" NOWRAP>$week2[$week]</TD>\n";
        print "    <TD BGCOLOR=\"$bg_col\" WIDTH=\"100%\">&nbsp;$comment&nbsp;</TD>\n";
        print "</TR>\n";

        if( $week == 6 ) {   # 土曜日
            $week = 0;
        }
        else {
            $week++;
        }
    }
    print "</TABLE>\n";

    print "<FORM METHOD=\"post\" ACTION=\"$cginame\"><HR>\n";
    print "管理パスワード：";
    print "<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"$year\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"$month\">\n";
    print "<INPUT TYPE=\"password\" NAME=\"pwd\" SIZE=10>\n";
    print "<SELECT NAME=\"task\">\n";
    print "    <OPTION VALUE=\"-\"> 機能\の選択　　　　</OPTION>\n";
    print "    <OPTION VALUE=\"add\">予\定の追加</OPTION>\n";
    print "    <OPTION VALUE=\"edit\">予\定の編集</OPTION>\n";
    print "</SELECT>\n";
    print "<INPUT TYPE=\"submit\" VALUE=\"実行\"></FORM>\n";
#    print "現在は、$date です。<BR>\n";

#    print "<HR><DIV ALIGN=\"right\"><FONT FACE=\"times\"><B><A HREF=\"http://www.aikis.or.jp/~s-suzuki/cgilabo/\">WebCalender v$version</A></B></font></DIV>\n\n</BODY>\n</HTML>\n";
    exit;
}


#----------------------------------------------------------
# 予定の編集
#----------------------------------------------------------
sub edit_data {

    #--------------------------------------------------
    # タイトルチェック
    #--------------------------------------------------
    if ( $FORM{'pwd'} ne $title_text ) {
        &err('タイトルが違います');
    }

    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>予\定の編集：$month月</TITLE>\n</HEAD>\n\n";
    print "<BODY BGCOLOR=\"$bg_color\" TEXT=\"$text_color\" LINK=\"$link_color\" ALINK=\"$alink_color\" VLINK=\"$vlink_color\">\n\n";

    print "<FONT SIZE=5 COLOR=\"$title_col\">予\定の編集：$month月</FONT><HR>\n";
    print "<FORM METHOD=\"POST\" ACTION=\"$cginame\">\n";

    print "<TABLE BORDER=1 ";
    print "CELLPADDING=2 CELLSPACING=1 BGCOLOR=\"#000000\">\n";     # BORDERCOLORLIGHT=#d07040 BORDERCOLORDARK=#400000>\n";

    print "<TR>\n";
    print "    <TD BGCOLOR=\"#ffffff\">&nbsp;</TD>\n";
    print "    <TD BGCOLOR=\"#ffffff\">&nbsp;</TD>\n";
    print "    <TD BGCOLOR=\"#ffffff\">休日</TD>\n";
    print "    <TD BGCOLOR=\"#ffffff\">&nbsp;</TD>\n";
    print "</TR>\n";

    for( $i=1; $i<=$monthday[$month]; $i++ ) {

        if( $DATA{$i} ne "" ) {
            $comment = $DATA{$i};
            $comment =~ s/</&lt;/g;
            $comment =~ s/>/&gt;/g;
        }
        else {
            $comment = "";
        }

        print "<TR>\n";
        #---------------------
        # 日曜日
        #---------------------
        if( $week == 0 ) {
            print "    <TD ALIGN=\"right\"  BGCOLOR=\"$bg_sunday\">&nbsp;$i&nbsp;</TD>\n";
            print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_sunday\">$week2[$week]</TD>\n";
            print "    <TD BGCOLOR=\"$bg_sunday\">";
            print "<INPUT TYPE=\"checkbox\" NAME=\"holiday\" VALUE=\"$i\"";
            if ($HOLIDAY{$i} eq "=") {print " CHECKED";}
            print "></TD>\n";
            print "    <TD BGCOLOR=\"$bg_sunday\">";
            print "<TEXTAREA NAME=\"$i\" ROWS=1 COLS=60>$comment</TEXTAREA>";
            print "</TD>\n";
            $week++;
        }
        #---------------------
        # 土曜日
        #---------------------
        elsif( $week == 6 ) {
            print "    <TD ALIGN=\"right\"  BGCOLOR=\"$bg_saturday\">&nbsp;$i&nbsp;</TD>\n";
            print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_saturday\">$week2[$week]</TD>\n";
            print "    <TD BGCOLOR=\"$bg_saturday\">";
            print "<INPUT TYPE=\"checkbox\" NAME=\"holiday\" VALUE=\"$i\"";
            if ($HOLIDAY{$i} eq "=") {print " CHECKED";}
            print "></TD>\n";
            print "    <TD BGCOLOR=\"$bg_saturday\">";
            print "<TEXTAREA NAME=\"$i\" ROWS=1 COLS=60>$comment</TEXTAREA>";
            print "</TD>\n";
            $week = 0;
        }
        else {
            print "    <TD ALIGN=\"right\"  BGCOLOR=\"$bg_weekday\">&nbsp;$i&nbsp;</TD>\n";
            print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_weekday\">$week2[$week]</TD>\n";
            print "    <TD BGCOLOR=\"$bg_weekday\">";
            print "<INPUT TYPE=\"checkbox\" NAME=\"holiday\" VALUE=\"$i\"";
            if ($HOLIDAY{$i} eq "=") {print " CHECKED";}
            print "></TD>\n";
            print "    <TD BGCOLOR=\"$bg_weekday\">";
            print "<TEXTAREA NAME=\"$i\" ROWS=1 COLS=60>$comment</TEXTAREA>";
            print "</TD>\n";
            $week++;
        }
        print "</TR>\n";
    }
    print "</TABLE>\n";

    print "<INPUT TYPE=\"hidden\" NAME=\"task\" VALUE=\"write\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"$year\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"$month\">\n";
    print "<INPUT TYPE=\"submit\" VALUE=\"書き込み\">\n";
    print "<INPUT TYPE=\"reset\" VALUE=\"やり直し\"></FORM>\n";

#    print "<HR><DIV ALIGN=\"right\"><FONT FACE=\"times\"><B><A HREF=\"http://www.aikis.or.jp/~s-suzuki/cgilabo/\">WebCalender v.$version</A></B></font></DIV>\n\n</BODY>\n</HTML>\n";
    exit;

}


#----------------------------------------------------------
# 予定の追加（一覧画面）
#----------------------------------------------------------
sub add_data {

    #--------------------------------------------------
    # タイトルチェック
    #--------------------------------------------------
    if ( $FORM{'pwd'} ne $title_text ) {
        &err('タイトルが違います');
    }

    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>予\定の追加：$month月</TITLE>\n</HEAD>\n\n";
    print "<BODY BGCOLOR=\"$bg_color\" TEXT=\"$text_color\" LINK=\"$link_color\" ALINK=\"$alink_color\" VLINK=\"$vlink_color\">\n\n";

    print "<FONT SIZE=5 COLOR=\"$title_col\">予\定の追加：$month月</FONT><HR>\n";

    print "<TABLE BORDER=1 WIDTH=500 ";
    print "CELLPADDING=2 CELLSPACING=1 BGCOLOR=#000000>\n";     # BORDERCOLORLIGHT=#d07040 BORDERCOLORDARK=#400000>\n";

    print "<TR>\n";
    print "    <TH COLSPAN=4 BGCOLOR=\"$bg_weekday\">$year年$month月</TH>\n";
    print "</TR>\n";

    for( $i=1; $i<=$monthday[$month]; $i++ ) {

        if( $DATA{$i} ne "" ) {
            $comment = $DATA{$i};
        }
        else {
            $comment = "　";
        }

        #------------------------------
        # 背景色の設定
        #------------------------------
        if( $week == 0 ) {  # 日曜日
            $bg_col = $bg_sunday;
        }
        elsif( $week == 6 ) {   # 土曜日
            $bg_col = $bg_saturday;
        }
        else {
            $bg_col = $bg_weekday;
        }
        if( $HOLIDAY{$i} eq "=" ) {
            $bg_col = $bg_holiday;
        }

        print "<FORM METHOD=\"post\" ACTION=\"$cginame\">\n";
        print "<INPUT TYPE=\"hidden\" NAME=\"task\" VALUE=\"add2\">\n";
        print "<INPUT TYPE=\"hidden\" NAME=\"pwd\" VALUE=\"$FORM{'pwd'}\">\n";
        print "<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"$year\">\n";
        print "<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"$month\">\n";
        print "<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"$i\">\n";
        print "<TR>\n";
        print "    <TD ALIGN=\"right\"  BGCOLOR=\"$bg_col\" NOWRAP>&nbsp;$i&nbsp;</TD>\n";
        print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_col\" NOWRAP>$week2[$week]</TD>\n";
        print "    <TD ALIGN=\"center\" BGCOLOR=\"$bg_col\" NOWRAP>&nbsp;<INPUT TYPE=\"submit\" VALUE=\"追加\">&nbsp;</TD>\n";
        print "    <TD BGCOLOR=\"$bg_col\" WIDTH=\"100%\">&nbsp;$comment&nbsp;</TD>\n";
        print "</TR>\n";
        print "</FORM>\n";

        if( $week == 6 ) {   # 土曜日
            $week = 0;
        }
        else {
            $week++;
        }
    }
    print "</TABLE>\n";

#    print "<HR><DIV ALIGN=\"right\"><FONT FACE=\"times\"><B><A HREF=\"http://www.aikis.or.jp/~s-suzuki/cgilabo/\">WebCalender v.$version</A></B></font></DIV>\n\n</BODY>\n</HTML>\n";
    exit;

}


#----------------------------------------------------------
# 予定の追加（書き込み画面）
#----------------------------------------------------------
sub add_data2 {

    #--------------------------------------------------
    # タイトルチェック
    #--------------------------------------------------
    if ( $FORM{'pwd'} ne $title_text ) {
        &err('タイトルが違います');
    }

    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>予\定の追加</TITLE>\n</HEAD>\n\n";
    print "<BODY BGCOLOR=\"$bg_color\" TEXT=\"$text_color\" LINK=\"$link_color\" ALINK=\"$alink_color\" VLINK=\"$vlink_color\">\n\n";

    print "<FONT SIZE=5 COLOR=\"$title_col\">予\定の追加</FONT>：$FORM{'year'}年$FORM{'month'}月$FORM{'day'}日\n";

    print "<HR>\n<TABLE BORDER=0>\n";
    print "<FORM METHOD=\"POST\" ACTION=\"$cginame\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"task\" VALUE=\"write2\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"pwd\" VALUE=\"$FORM{'pwd'}\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"$FORM{'year'}\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"$FORM{'month'}\">\n";
    print "<INPUT TYPE=\"hidden\" NAME=\"day\" VALUE=\"$FORM{'day'}\">\n";
    print "<TR>\n";
    print "    <TD>項目</TD>\n";
    print "    <TD><INPUT TYPE=\"text\" NAME=\"title\" SIZE=30></TD>\n";
    print "</TR>\n";

    print "<TR>";
    print "<TD>色</TD>\n";
    print "<TD>";
    print "<INPUT TYPE=\"radio\" NAME=\"color\" VALUE=\"none\" CHECKED>標準";
    print "　　　<INPUT TYPE=\"radio\" NAME=\"color\" VALUE=\"$c1\"><FONT COLOR=\"$c1\">$col1</FONT>";
    print "　　　<INPUT TYPE=\"radio\" NAME=\"color\" VALUE=\"$c2\"><FONT COLOR=\"$c2\">$col2</FONT>";
    print "　　　<INPUT TYPE=\"radio\" NAME=\"color\" VALUE=\"$c3\"><FONT COLOR=\"$c3\">$col3</FONT>";
    print "　　　<INPUT TYPE=\"radio\" NAME=\"color\" VALUE=\"$c4\"><FONT COLOR=\"$c4\">$col4</FONT>";
    print "</TD>\n";
    print "</TR>";

    print "<TR>";
    print "<TD>&nbsp;</TD>\n";
    print "<TD>";
    print "<INPUT TYPE=\"radio\" NAME=\"bold\" VALUE=\"off\" CHECKED>標準";
    print "　　　<INPUT TYPE=\"radio\" NAME=\"bold\" VALUE=\"on\"><B>太字</B>";
    print "</TD>\n";
    print "</TR>";

    print "<TR>\n";
    print "    <TD>リンク先（省略可）</TD>\n";
    print "    <TD><INPUT TYPE=\"text\" NAME=\"url\" SIZE=60></TD>\n";
    print "</TR>\n";
    print "<TR>\n";
    print "    <TD>　</TD>\n";
    print "    <TD><INPUT TYPE=\"submit\" VALUE=\"書込\"></TD>\n";
    print "</TR>\n";
    print "</TABLE>\n<HR>\n";

    print "</BODY>\n</HTML>\n";
    exit;

}


#----------------------------------------------------------
# 予定の書き込み
#----------------------------------------------------------
sub write_data {

    $mode = $_[0];

    #--------------------------------------------------
    # 通常の編集モードでのデータ書き込み
    #--------------------------------------------------
    if ( $mode eq 'edit' ) {
        #--------------------------------------------------
        # ログファイル名の作成
        #--------------------------------------------------
        $log_name = sprintf ("%s%d%02d.dat", $path, $year, $month);

        #--------------------------------------------------
        # １ヶ月分のデータの作成
        #--------------------------------------------------
        for( $i=1; $i<32; $i++ ) {
            if( $FORM{$i} ne "" ) {
                if( $HOLIDAY2{$i} eq "=") {
                    $temp1 = "=";
                }
                else {
                    $temp1 = ":";
                }
                $temp2 = sprintf ("%02d%s%s\n", $i, $temp1, $FORM{$i});
                push( @data, $temp2 );
            }
        }
    }

    #--------------------------------------------------
    # 追加モードでのデータ書き込み
    #--------------------------------------------------
    else {
        if( $FORM{'title'} eq "" ) {
            &err('項目が書き込まれていません');
        }

        if ( $FORM{'bold'} eq "on" ) {
            $FORM{'title'} = "<B>$FORM{'title'}</B>"
        }

        if ( $FORM{'color'} ne "none" ) {
            $FORM{'title'} = "<FONT COLOR=\"$FORM{'color'}\">$FORM{'title'}</FONT>"
        }


        #--------------------------------------------------
        # ログファイル名の作成
        #--------------------------------------------------
        $log_name = sprintf ("%s%d%02d.dat", $path, $FORM{'year'}, $FORM{'month'});

        if ( open(DB,"$log_name")) {
            eval 'flock(DB,1);';
            @lines = <DB>;
            close(DB);
            eval 'flock(DB,8);';
        }

        $flag = 0;

        foreach $line (@lines) {
            if( substr( $line, 0, 1 ) eq "0" ) {
                $temp = substr( $line, 1, 1 );
            }
            else {
                $temp = substr( $line, 0, 2 );
            }

            if ( $temp ne $FORM{'day'} ) {
                $temp2 = $line;
            }
            else {
                chop($line);    # 改行コードをカット

                if ( $FORM{'url'} ne "" ) {
                    $temp2 = "$line <A HREF=\"$FORM{'url'}\">$FORM{'title'}</A>\n";
                }
                else {
                    $temp2 = "$line $FORM{'title'}\n";
                }
                $flag = 1;
            }
            push( @data, $temp2 );
        }
        #-----------------------------------
        # まだデータが登録されていない時
        #-----------------------------------
        if ( $flag == 0 ) {
            if ( $FORM{'day'} < 10 ) {
                $FORM{'day'} = "0$FORM{'day'}"
            }
            if ( $FORM{'url'} ne "" ) {
                $temp2 = "$FORM{'day'}:<A HREF=\"$FORM{'url'}\">$FORM{'title'}</A>\n";
            }
            else {
                $temp2 = "$FORM{'day'}:$FORM{'title'}\n";
            }
            push( @data, $temp2 );
        }
    }

    if ( !open(DB,">$log_name")) {
        &err('データファイルをオープンできません');
    }
    else {
        eval 'flock(DB,2);';
        print DB @data;
        close(DB);
        eval 'flock(DB,8);';
        chmod 0666, $log_name;
    }

    #--------------------------------------------------
    #  記録処理後、再読み込みする
    #--------------------------------------------------
    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>WebCalender v$version</TITLE>\n</HEAD>\n";
    print "<BODY BGCOLOR=$bg_color TEXT=$text_color LINK=$link_color ALINK=$alink_color VLINK=$vlink_color>\n\n";
    print "<FONT SIZE=5 COLOR=\"$title_col\">書き込み完了</FONT><br><br>\n";
    print "<BLOCKQUOTE>予\定データの書き込みが完了しました。予\定一覧表\示に戻ります。</BLOCKQUOTE>";
    print "<DIV ALIGN=\"center\">";
    print "<FORM METHOD=\"post\" ACTION=\"$cginame\">";
    print "<INPUT TYPE=\"submit\" VALUE=\"　戻る　\">";
    print "<INPUT TYPE=\"hidden\" NAME=\"year\" VALUE=\"$year\">";
    print "<INPUT TYPE=\"hidden\" NAME=\"month\" VALUE=\"$month\">";
    print "</DIV><P>\n";
    print "<HR><DIV ALIGN=\"right\"><FONT FACE=\"times\"><A HREF=\"http://www.aikis.or.jp/~s-suzuki/cgilabo/\">WebCalender v$version</A></font></DIV>\n\n</BODY>\n</HTML>\n";
}


#----------------------------------------------------------
# エラーメッセージの表示
#----------------------------------------------------------
sub err {

    $error = $_[0];

    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>WebCalender v$version</TITLE>\n</HEAD>\n";
    print "<BODY BGCOLOR=$bg_color TEXT=$text_color LINK=$link_color ALINK=$alink_color VLINK=$vlink_color>\n\n";
    print "<H3>エラーが発生しました：$error </H3><br><br>\n";
    print "[<A HREF=\"./$cginame\">戻る</A>]\n";
    print "<HR><DIV ALIGN=\"right\"><FONT FACE=\"times\"><A HREF=\"http://www.aikis.or.jp/~s-suzuki/cgilabo/\">WebCalender v$version</A></font></DIV>\n\n</BODY>\n</HTML>\n";

    exit;
}
__END__
