#!/usr/bin/perl

require '../jcode.pl';       #日本語コード変換

$url        = 'http://www.sakaeshalom.org/lyre/'; #戻り先ＵＲＬ
$script     = './bbs.cgi'; #このＣＧＩの名前を指定
$method     = 'POST'; #METHODの指定(POST又はGET)
$logfile    = './message.txt'; #ログファイルの名前を指定
$lockfile   = './bbs.lock'; #ロックファイルの名前を指定
$title      = 'Lyre 掲示板'; #タイトルを指定
$bgcolor    = '#ffffff'; #背景色を指定
$tbgcolor   = '#D9DAF9'; #入力フォームの背景色を指定
$ttlcolor   = '#000000'; #ログ表示部の「タイトル」の文字色
$textcolor  = '#0f0f0f'; #ログ表示部の「名前・メッセージ等」の文字色

$tcolor     = "#00008B"; # 文字色
$linkcolor  = "#cc6600"; # リンク色（未読リンク）
$vlinkcolor = "#666666"; # リンク色（既読リンク）
$alinkcolor = "#ff3300"; # リンク色（押した時）

$titleset   = 1;    #新規投稿時に「タイトル」必要？(0:不要 1:必要)
$titleset2  = 1;    #レスする際に「タイトル」必要？(0:不要 1:必要)
$pt     = '10pt'; #全体のフォントサイズ

$imgpath = '/lyre/images';
$homelinklogo   = "$imgpath/linkhome.gif"; #ホームページ・リンク画像を指定
$maillinklogo   = "$imgpath/linkmail.gif"; #メール・リンク画像を指定

$top_l      = "$imgpath/top_l.gif"; #メッセージ部左上隅の透過画像を指定
$top_r      = "$imgpath/top_r.gif"; #メッセージ部右上隅の透過画像を指定
$bottom_l   = "$imgpath/bottom_l.gif"; #メッセージ部左下隅の透過画像を指定
$bottom_r   = "$imgpath/bottom_r.gif"; #メッセージ部右下隅の透過画像を指定

$top_b      = "$imgpath/line_t.gif";
$bottom_b   = "$imgpath/line_b.gif";
$left_b     = "$imgpath/line_l.gif";
$right_b    = "$imgpath/line_r.gif";

$gif_spacer  = "$imgpath/spacer.gif"; #ダミー透過画像
$gif_spacerb = "$imgpath/spacer_b.gif"; #１×１黒色画像

$datamax    = 300 ; #最大データ保存件数
$pagemax    = 20 ;  #１ページ内に表示する件数
$password   = 'pass'; #メンテナンス用パスワード（管理者用）
$tag        = 'yes'; #タグ許可(yes,no)
$hostflag   = 'no' ; #リモートホストを表示する？(yes.no)

#掲示板荒らし対策。排除したいプロバのアドレスを設定して下さい。
#　"xxx?.com"とした場合、"xxx1.com","xxx2.com"等、「？」の部分が文字列１つと判断します
#  "xxx*.com"とした場合、"xxx1.com","xxx12345.com等、「＊」の部分が０個以上の文字列と判断します。
#@DANGER_LIST=("xxx.com","yyy.com","zzz*.or.jp");
@DANGER_LIST=("yournet.ne.jp","fpop.co.jp","xxx.com","yyy.com","zzz*.or.jp","*yahoo.or.jp","*fdsf*","*fsdf*","*/ymra03/*","adipex-jad.blogspot.com","livedoor.co.jp","*gmail.com","*test.com*","*bravenet*","*pharmacy*","*clik*","*ambien*","*skanah*","*site*","*sex*","6k2","84.181.244.43.fbb.ReSET.JP","oska.nt.adsl.ppp.infoweb.ne.jp","p-osaka.nttpc.ne.jp","d57.NGNosakaFL*.vectant.ne.jp","http://pizapizahiza.net","flets-n-osk-1-95.dsn.jp","http://tokorogadokkoi.net","/cybersyndrome.info/","hnext.alpha-net.ne.jp","ap.plala.or.jp","dynamic-114-69-53-85.vips.gol.ne.jp","flets-n-osk-","d143.Osa5NF3.vectant.ne.jp","ppp11.odn.ad.jp","dynamic-114-69-67-38.vips.gol.ne.jp","*vectant.ne.jp","dy.bbexcite.jp","i-revonet.jp","osk9-p183.flets");

#掲示板荒らし対策その２。メッセージ最大文字数を指定。特に設定しない場合は、''として下さい。
$maxword = '4000' ;

$ressw      = 2 ;       #レス機能の設定(0:レス無し　1:管理人のみ　2:みんな)
$resflag    = 'yes' ;   #最新レスを先頭に表示する？(yes,no)

#メッセージ表示部分にある「返信」に画像を使う場合、画像ファイル名を指定。
#画像を使わない場合は、以下を''として下さい。
$res_gif    = "$imgpath/res.gif";

$row        = 5 ;       #入力フォーム・メッセージ欄の行数
$col        = 50;       #入力フォーム・メッセージ欄の文字数

$tbl_sz     = 550 ;     #ログ表示部のテーブル横幅(ピクセル)

#投稿時のパスワードをcrypt関数を使用する（暗号化）
#crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」
$ango       = 1 ;       #0:使用しない 1:使用する　（推奨：１：使用する）

#ＣＳＳ設定
$css_style = <<"EOM";
STYLE="font-size:$pt;background:#ffffff;color:#000000;border:1 solid #666666;" onFocus="this.style.backgroundColor='#ffffcc'" onBlur="this.style.backgroundColor='#FFFFFF'" onMouseOver="this.focus()"
EOM

$button_style = <<"EOM";
STYLE="font-size:9pt;background:#000080;color:#ffffff;border:1 solid #666666;" onFocus="this.style.backgroundColor='#800000'" onBlur="this.style.backgroundColor='#000080'" onMouseOver="this.focus()"
EOM

# ERRORとなるタグ
@errtag = ('table','meta','form','!--','embed','html','body','tr','td','th','a');

####
#### Main starts here  #####################################################
####
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); #システム日時・時刻取得
$year  = sprintf("%02d",$year + 1900);  $month = sprintf("%02d",$mon + 1);
$mday  = sprintf("%02d",$mday);
$hour  = sprintf("%02d",$hour); $min   = sprintf("%02d",$min);
$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
$today = "$month/$mday($week) $hour:$min";
#if ($ENV{'HTTP_USER_AGENT'} !~ /MSIE/i) {
#    $css_style = "" ;
#}
&decode ;   #<<<デコード

if ( $FORM{'action'} eq 'regist' ) {
    &regist ;   
} else {
    if ( $FORM{'proc'} eq 'res' ) { 
        $FORM{'resno'} = $FORM{'no'} ;
    }
    &header ;   # htmlヘッダー出力
    &forminput ;# 入力フォーム表示
    &view ;     # ログ表示
    &footer ;   # htmlフッター出力
}

exit;

####
#### Main ends here  #######################################################
####

##
## デコード＆変数代入
##
sub decode{ 
    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;
        if ($tag eq 'yes') {
            foreach ( @errtag ) {
                if ($value =~ /<$_(.|\n)*>/i) {
                    &error("使用出来ないタグが入力されています");
                }
            }
        } else {
            $value =~ s/</&lt;/g;
            $value =~ s/>/&gt;/g;
        }
        $value =~ s/\,/，/g;
        &jcode'convert(*value,'sjis');
        $FORM{$name} = $value;
    }
    $FORM{'comment'} =~ s/\r\n/<br>/g;
    $FORM{'comment'} =~ s/\r|\n/<br>/g; 
    $FORM{'hp'}   =~ s/^http\:\/\///;
}

##
## 入力フォーム
##
sub forminput { 
## 2006/06/25
	my $kyushi = 0;

    print "<center>\n";
#--    print "<img src=\"$imgpath/title_bbs.gif\" border=0 width=600 height=50><br><br><br>\n";
    print "<img src=\"$imgpath/KeijibanGreen.jpg\" border=0><br><br><br>\n";
if ( $kyushi == 0 ) {
    print "<form action=$script method=$method>\n";
    if ( $FORM{'action'} eq 'res' ) {
        print "<br>\n";
        print "<br>返信フォームです\n";
        print "<br>\n";
    }
    if ( $FORM{'action'} ne 'maintenance' || $FORM{'proc'} eq 'res' ) {
        print "<input type=hidden name=\"action\" value=\"regist\">\n";
        print "<input type=hidden name=\"resno\" value=$FORM{'no'}>\n";
    } else {
        print "<input type=hidden name=\"action\" value=\"update\">\n";
        print "<input type=hidden name=\"no\" value=\"$FORM{'no'}\">\n";
        print "<input type=hidden name=\"proc\" value=\"edit\">\n";
    }
    print "<table border=1 cellspacing=0 cellpadding=15>\n";

    print "<tr bgcolor=\"$tbgcolor\">\n";
    print "<td>\n";

    print "<table width=100% border=0 cellspacing=0 cellpadding=2>\n";
    print "<tr><td bgcolor=\"$tbgcolor\" align=left>\n";
    print "氏名</td>\n";
    print "<td bgcolor=\"$tbgcolor\">";
    print "<input type=text name=\"name\" size=30 value=\"$c_name\" $css_style></td></tr>\n";

    print "<tr><td bgcolor=\"$tbgcolor\" align=left>\n";
    print "メール</td>\n";
    print "<td bgcolor=\"$tbgcolor\">";
    print "<input type=text name=\"email\" size=30 value=\"$c_email\" $css_style></td></tr>\n";

    print "<tr><td bgcolor=\"$tbgcolor\" align=left>\n";
    print "ホームページ</td>\n";
    print "<td bgcolor=\"$tbgcolor\">";
    print "<input type=text name=\"hp\" size=30 value=\"http://$c_hp\" $css_style>\n";
    print "</td></tr>\n";

    print "<tr><td bgcolor=\"$tbgcolor\" align=left>\n";
    print "タイトル</td>\n";
    print "<td bgcolor=\"$tbgcolor\">";
    print "<input type=text name=\"title\" size=30 value=\"$c_title\" $css_style>\n";
    print "</td></tr>\n";

    print "<tr><td bgcolor=\"$tbgcolor\" align=left>\n";
    print "メッセージ</td>\n";
    print "<td bgcolor=\"$tbgcolor\" align=left>";
    print "<textarea name=\"comment\" cols=$col rows=$row $css_style>$c_comment</textarea></td></tr>\n";

    print "<tr><td bgcolor=\"$tbgcolor\" colspan=2 align=left>\n";
    if ( $FORM{'action'} eq 'res'  || $FORM{'proc'} eq 'res' ) {
        $dmy = "返信する" ;
    } else {
        $dmy = "投稿する" ;
    }
    print "<center>\n";
    print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit value=$dmy $css_style>&nbsp;&nbsp;\n";
    print "<input type=reset value=\"やり直す\" $css_style>\n";
    print "</center></td></tr>\n";
    print "</table>\n";

    print "</td>\n";
    print "</tr>\n";
    print "</table>\n";
    print "</form>\n";
} else {
	print "調整中のため，掲示板への投稿は，<A href=\"mailto:lyrehp\@yahoo.co.jp\">管理人へmail</A>でお願いします。<br><br>\n";
}

    print "<font color=\"#00008B\">\n";
#--    print "<a href=\"../../lyre/index.html\" target=_top>TOP</a>&nbsp;&nbsp;&nbsp;♪&nbsp;&nbsp;&nbsp;\n";
    print "<a href=\"../../lyre/index.html\" target=_top>TOP</a>\n";
#--    print "<a href=\"../../lyre/news.html\">NEWS</a>&nbsp;&nbsp;&nbsp;♪&nbsp;&nbsp;&nbsp;\n";
#--    print "<a href=\"../../lyre/lyre.html\">LYRE</a>&nbsp;&nbsp;&nbsp;♪&nbsp;&nbsp;&nbsp;\n";
#--    print "<a href=\"../../lyre/members.html\">MEMBERS</a>&nbsp;&nbsp;&nbsp;♪&nbsp;&nbsp;&nbsp;\n";
#--    print "<a href=\"../../lyre/praise.html\">PRAISES</a>\n";
    print "</font>\n";
    print "</center><br>\n";
}

##
## HTMLヘッダー書き出し
##
sub header { 
    print "Content-type: text/html; charset=Shift_JIS\n\n";
    print "<html>\n<head>\n";
    print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html;charset=s-jis\">\n";
    print "<title>$title</title>\n";
    #<<<CSS START>>>
    print "<style type=\"text/css\">\n";
    print "<!--\n";
    print "body,tr,td { font-size: $pt;}\n";
    print "A:link { text-decoration:none; font-weight:bold; color:#0000ff }\n";
    print "A:visited { text-decoration:none; font-weight:bold; color:#0000ff }\n";
    print "A:active { text-decoration:none; font-weight:bold; color:#0000ff }\n";
    print "A:hover { text-decoration:none; font-weight:bold; color:#00008B }\n";
    print "-->\n";
    print "</style>\n";
    #<<<CSS END>>>
    print "<SCRIPT LANGUAGE=\"JavaScript\">\n";
    print "<!--\n";
    print "function jumpto(url)\n";
    print "{\n";
    print "parent.window.open(url,\"_blank\");\n";
    print "}\n";
    print "//-->\n";
    print "</SCRIPT>\n";
    print "</head>\n";
#--    print "<body bgcolor=\"$bgcolor\" text=$tcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
    print "<BODY background=\"$imgpath/leaf.gif\">\n";
    print "<a name=\"#pagetop\">\n";

}

##
##  HTMLフッダー書き出し
##
sub footer { 
##--    print "<br><center>♪&nbsp;&nbsp;<a href=\"#pagetop\">上へ</a>&nbsp;&nbsp;♪</center>\n";
    print "<br><center>♪&nbsp;&nbsp;<a href=\"#pagetop\">上へ</a>&nbsp;&nbsp;♪&nbsp;&nbsp;<a href=\"../../lyre/index.html \" target=_top>TOP</a>&nbsp;&nbsp;♪</center>\n";
    print "</body></html>\n";
}

##
## ログファイル読み込み
##
sub dataread {
    #<<<ログ読み込み
    if ( !(open(IN,"$logfile"))) {
        &error("ログファイル($logfile)のオープンに失敗しました");
    }
    @LOG = <IN>;
    close(IN);
    $maxno = 0 ;
    foreach ( @LOG ) {
        ($no,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$_);
        if ( $resno eq '' ) {
            push(@MAINLOG,$_) ;
        } else {
            push(@RESLOG,$_) ;
        }
        if ( $no > $maxno ) {
            $maxno = $no ;
        } 
    }
    @RESLOG = reverse @RESLOG ; #レスログは古い順に。
    $maxno++ ;
}

##
## ログ表示
##
sub view {
    &dataread ; #<<<ログ読み込み
    print "<center><hr width=\"600\" size=1 noshade color=\"#000000\">\n";
    #表示対象ページの先頭データ件数を算出
    $dm = @MAINLOG;
    if ( $dm % $pagemax == 0) {
        $p = $dm / $pagemax ;
    } else {
        $p = $dm / $pagemax + 1;
    }           
    $p = sprintf("%3d",$p);
    if ( $FORM{'page'} eq "NEXT" ) {
        if ( $FORM{'disppage'} == 0 ) {
            $FORM{'disppage'} = 1
        }
        $d = ($FORM{'disppage'} + 1) * $pagemax - $pagemax ;    
        $FORM{'disppage'} = $FORM{'disppage'} + 1 ;
    } elsif ( $FORM{'page'} eq "BACK" ) {
        $d = ($FORM{'disppage'} - 1) * $pagemax - $pagemax ;    
        $FORM{'disppage'} = $FORM{'disppage'} - 1 ;
    } elsif ( $FORM{'disppage'} ne "" ) {               
        $d = $FORM{'disppage'} * $pagemax - $pagemax ;          
    } else {
        $d = 0  ;
        $FORM{'disppage'} = 1 ;
    }
    $z = 1 ;
    for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ )  { 
        ($no,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$MAINLOG[$i]);
        if ( ( $FORM{'action'} ne 'res' && $FORM{'proc'} ne 'res' )
        || ( ( $FORM{'action'} eq 'res'  || $FORM{'proc'} eq 'res' )
        && $FORM{'no'} eq $no) ) {
            $color = "#ffffcc" ;
            print "<br>\n";
            print "<table border=1 cellspacing=0 cellpadding=15 width=\"$tbl_sz\">\n";
            if ( $FORM{'action'} ne 'res' && $ressw == 2 ) {
                print "<form action=$script method=$method>";
                print "<input type=hidden name=\"action\" value=\"res\">";
                print "<input type=hidden name=\"no\" value=\"$no\">";
                print "<input type=hidden name=\"disppage\" value=$FORM{'disppage'}>\n";
            }
            print "<tr bgcolor=\"$color\">\n";
            print "<td>\n";

            print "<table cellpadding=0 cellspacing=0 border=0 width=\"$tbl_sz\">\n";
            print "<tr>\n";
            print "<td bgcolor=\"$color\">\n";
            if ( $ttl ) { 
                print "<font color=\"$ttlcolor\">";
                print "<b>「$ttl」</b></font>\n";
            }
            if ( $hostflag eq 'yes' && $hst ) {
                print "&nbsp;&nbsp;&nbsp;<font color=\"$ttlcolor\" size=-1>..($hst)</font>";
            }
            print "<br>\n"  if ( $ttl || ( $hostflag eq 'yes' && $hst ) );
            print "<font color=\"$textcolor\">";
            $no = sprintf("%d",$no);
            print "&nbsp;by&nbsp;$name&nbsp;on&nbsp;</font><font color=\"$textcolor\" size=2>$regdate";
            print "</font>\n";
            print "</td>\n";
            print "</tr>\n";
            print "<tr><td bgcolor=\"$color\">\n";
            print "<img src=\"$gif_spacer\" width=\"$tbl_sz\" height=5><br>\n";
            print "<img src=\"$gif_spacerb\" width=\"$tbl_sz\" height=1><br>\n";
            $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\">こちら<\/a>/g;
            if ( $s eq '*' ) {
                print "<font color=\"$textcolor\" size=-1><br>\n";
                print "（この記事は常に先頭に表\示されます）<br><br></font>\n"; 
            }
            print "<font color=\"$textcolor\"><br>\n";
            print "$comment<br></font>\n";
            print "<div align=right>\n";
            if ( $email ne '' ) {
                print "<input type=button value=\"mail\" onClick=\"jumpto(\'mailto:$email\')\" $button_style>\n";
            }
            if ( $hp ne '' ) {
                print "<input type=button value=\"homepage\" onClick=\"jumpto(\'http://$hp\')\" $button_style>\n";
            }
            if ( $FORM{'action'} ne 'res' && $ressw == 2 ) {
                print "&nbsp;&nbsp;&nbsp;<input type=submit value=\"返信する\" $css_style>\n";
            }
            print "</div></td></tr>\n";
            print "</table>\n";

            #レス表示
            $cnt = 0 ;
            foreach ( @RESLOG ) {
                ($n,$name,$email,$hp,$ttl,$comment,$regdate,$rcolor,$resno,$hst,$s,$pass,$d2) = split(/,/,$_);
                if ( $no eq $resno ) {
                    if ( $cnt == 0 ) { print "<br>\n";  }
                    print "<table cellpadding=0 cellspacing=0 border=0 width=\"$tbl_sz\">\n";
                    print "<tr>\n";
                    print "<td bgcolor=\"$color\" width=25 nowrap>&nbsp;</td>\n";
                    $w = $tbl_sz - 25 ;
                    print "<td bgcolor=\"$color\"><img src=\"$gif_spacerb\" width=\"$w\" height=1></td></tr>\n";
                    print "<tr>\n";
                    print "<td bgcolor=\"$color\" width=25 nowrap>&nbsp;</td>\n";
                    print "<td bgcolor=\"$color\">\n";
                    if ( !($ttl) ) {
                        $ttl = "";
                        print "<font color=\"$ttlcolor\">";
                        print "▲</font>\n";
                    } else {
                        print "<font color=\"$ttlcolor\">";
                        print "▲&nbsp;「$ttl」</font>\n";
                    }
                    print "<font color=\"$textcolor\">from&nbsp;$name</font>\n";
                    if ( $hostflag eq 'yes' && $hst ) {
                        print "&nbsp;&nbsp;&nbsp;<font color=\"$textcolor\" size=-1>..($hst)</font>";
                    } 
                    print "</font></td></tr>\n";
                    print "<tr><td bgcolor=\"$color\" width=25 nowrap>&nbsp;</td>\n";
                    print "<td bgcolor=\"$color\">\n";
                    $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\">こちら<\/a>/g;
                    print "<font color=\"$textcolor\"><br>$comment</font><br>\n";
                    $n = sprintf("%d",$n);
                    print "<div align=right><font color=\"$textcolor\" size=2>posted&nbsp;on&nbsp;$regdate</font>";
                    if ( $ressw != 1 ) {
                        if ( $email ne '' ) {
                            print "<input type=button value=\"mail\" onClick=\"jumpto(\'mailto:$email\')\" $button_style>\n";
                        }
                        if ( $hp ne '' ) {
                            print "<input type=button value=\"homepage\" onClick=\"jumpto(\'http://$hp\')\" $button_style>\n";
                        }
                    }
                    print "</div></td></tr>\n";
                    print "</table>\n";
                    $cnt++ ;
                }
            }
            print "</td>\n";
            print "</tr>\n";
            print "</form>\n" if ( $FORM{'action'} ne 'res' && $ressw == 2 ) ;
            print "</table>\n";
        }
        $z++;
    }

    if ( $FORM{'action'} ne 'res' && $FORM{'proc'} ne 'res' ) {
        $dm = @MAINLOG;
        if ( $dm % $pagemax == 0) {
            $p = $dm / $pagemax ;
        } else {
            $p = $dm / $pagemax + 1;
        }           
        $p = sprintf("%3d",$p);
        print "<br><form action=$script method=$method>\n";
        print "<input type=hidden name=\"disppage\" value=$FORM{'disppage'}>\n";
        if ( $FORM{'disppage'} != 0 && $FORM{'disppage'} !=1) {
            print "<input type=submit name=\"page\" value=BACK $css_style>\n";
        }   
        if ( $FORM{'disppage'} + 1 <= $p ) {
            print "<input type=submit name=\"page\" value=NEXT $css_style>\n";
        }
        print "</form><hr width=\"600\" size=1 noshade color=\"#000000\">\n";
        print "</center>\n";    
        print "<div align=\"right\"><font  color=\"$tcolor\">";
    } else {
        print "<br><br><br>\n";
    }
}

##
## ログ出力
##
sub regist {
    # ホスト名を取得
    $host  = $ENV{'REMOTE_HOST'};
    $addr  = $ENV{'REMOTE_ADDR'};
    if ($host eq "" || $host eq "$addr") {
        ($p1,$p2,$p3,$p4) = split(/\./,$addr);
        $temp = pack("C4",$p1,$p2,$p3,$p4);
        $host = gethostbyaddr("$temp", 2);
        if ($host eq "") {
            $host = $addr;
        }
    }

if (!$ENV{'HTTP_REFERER'}) { &error("掲示板への直接アクセスは禁止されています。"); }

if ($FORM{'comment'} !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/) { &error("日本語を書いてください。"); }


    #掲示板荒らし対策
    foreach $buf(@DANGER_LIST) {
        # パターンマッチを変換
        $buf=~ s/\./\\./g;
        $buf=~ s/\?/\./g;
        $buf=~ s/\*/\.\*/g;
        if($host =~ /$buf/gi){
            &error("\申\し\訳ありません。<br>あなたのプロバイダーからは投稿できませんでした． ");
        }
	if( $FORM{'hp'} =~ /$buf/gi){
            &error("\申\し\訳ありません。<br>投稿できませんでした． ");
        } 
	if( $FORM{'email'} =~ /$buf/gi){
            &error("\申\し\訳ありません。<br>投稿できませんでした． ");
        } 
	if( $FORM{'comment'} =~ /$buf/gi){
            &error("\申\し\訳ありません。<br>投稿できませんでした． ");
        } 
    }
    if ( $maxword ne '' && (length($FORM{'comment'}) > $maxword)) {
        &error("メッセージは$maxword文字までしか登録出来ません。");
    }

    if ( $FORM{'name'} eq '') {
        &error("お名前を入力して下さい。");
    }
    if ( $FORM{'comment'} eq '') {
        &error("メッセージは省略出来ません。");
    }

    &filelock ; #ファイルロック
    &dataread ; #<<<ログ読み込み
    foreach ( @LOG ) {
        ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$_);
        if ( $name eq $FORM{'name'} && $comment eq $FORM{'comment'} ) {
            &fileunlock ;
            &error("二重投稿は禁止しています。") ;
            last ;
        }
    }

    $dcnt = @LOG;   
    if ($dcnt >= $datamax) {
        pop(@LOG);
    }

    $stoppi = 0 ;
    ($no,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$LOG[0]);
    if ( $s eq '*' ) {
        $stoppi = 1 ;
    }

    #レス記事登録時で、ログを先頭に移動する場合の処理
    if ( $resflag eq 'yes' && $FORM{'resno'} ne '') {
    $cnt = 0 ;
    foreach ( @LOG ) {
        ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$_);
        if ( $oyano eq $FORM{'resno'} ) {
            $sv_title = $ttl ;
            splice(@LOG,$cnt,1);
            $wk = "$oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2" ;
            unshift(@LOG,$wk);
            last ;
        }
        $cnt++ ;
    }
    } else {
        if ( $sendmail ) {
            foreach ( @LOG ) {
                ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color,$resno,$hst,$s,$pass,$d2) = split(/,/,$_);
                if ( $oyano eq $FORM{'resno'} ) {
                    $sv_title = $ttl ;
                    last ;
                }
            }
        }
    }

    # パスワードの暗号化（crypt関数使用））
    if ($FORM{'pass'} ne "") {
        &pass_enc($FORM{'pass'});
    } else {
        $pass = '' ;
    }
    unshift(@LOG,"$maxno,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'title'},$FORM{'comment'},$today,$FORM{'color'},$FORM{'resno'},$host,,$pass,\n");

    if ( !(open(OUT,">$logfile"))) {
        &fileunlock ;
        &error("ログファイル($logfile)のオープンに失敗しました");
    }
    print OUT @LOG;
    close(OUT);

    &fileunlock ;   #ファイルロック解除

    print "Location: $script?\n\n"; 
}

##
## エラー処理
##
sub error {
    &header ;
    print "<br><br><br><font color=\"red\"><b>$_[0]</b></font><br><br><br>\n";
    print "<a href=\"javascript:history.back();\">[戻る]<br>\n";
    &footer;
    exit;
}


##
## ファイルロック設定
##
sub filelock {
    foreach (1 .. 5) {
    if (-e $lockfile) {
        sleep(1);
    } else {
        open(LOCK,">$lockfile");
        close(LOCK);
        return;
    }
    }
    &error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。<br>又はロックファイル($lockfile)が残ったままかもしれませんので、同ファイルを削除して下さい。"); 
}

##
## ファイルロック解除
##
sub fileunlock {
    if (-e $lockfile) { unlink($lockfile); }
}
