#!/usr/bin/perl
#
# minichat.txt は minichat.cgi に名前変更してください。

$max = '30';
$method = 'POST';
$body = 'Bgcolor=#E0D090 text=#000000 onLoad="document.MainForm.chat.focus();"';
$chat_file = './chat.dat';
$chat_file2 = './log.dat';
require './jcode.pl';

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$date_now = sprintf("%02d日%02d時%02d分",$mday,$hour,$min);

read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

@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');
		$value =~ s/<!--//g;
		$value =~ s/<img//g;
	$FORM{$name} = $value;
}

print "Content-type: text/html\n\n";
print "<html><head><title>ホリィウッド休憩室</title></head>\n";

if ($FORM{'name'} eq '') {
        print "<body Bgcolor=#E0D090 text=#000000><Center>\n";
}

else {

       print "<body $body><Center>\n";
}


if ($FORM{'chat'} ne '' && $FORM{'name'} ne '') {

	if (!open(DB,"$chat_file")) { &error('エラー','チャットファイルが開けません.'); }
	@lines = <DB>;
	close(DB);

	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};
	if ($host eq "") { $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr; }
	elsif ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }

	if ($max <= $#lines +1) { shift(@lines); }
	push(@lines,"$date_now\t$FORM{'name'}\t$FORM{'color'}\t$FORM{'chat'}\t$host\n");

	if (!open(DB,">$chat_file")) { &error('エラー','チャットファイルへ記録できません.'); }
	print DB @lines;
	close(DB);

# 恒久ログ保存
	if (!open(DB,"$chat_file2")) { &error('エラー','チャットファイルが開けません.'); }
	@lines = <DB>;
	close(DB);

	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};
	if ($host eq "") { $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr; }
	elsif ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
	push(@lines,"$date_now\t$FORM{'name'}\t$FORM{'color'}\t$FORM{'chat'}\t$host\n");

	if (!open(DB,">$chat_file2")) { &error('エラー','チャットファイルへ記録できません.'); }
	print DB @lines;
	close(DB);
#恒久ログ保存ここまで

}

print "<BLOCKQUOTE><H3>ホリィウッド休憩室</H3><hr Width=95%>\n";
print "<form method=$method action=\"chat.cgi\" name=\"MainForm\">\n";

if ($FORM{'name'} eq '') {

	print "お名前 ： <input type=text name=\"name\">　色 ： <input type=text name=\"color\" value=\"blue\">\n";
	print "<input type=submit value=\"参加\"><p>\n";
}

else {
	print "お名前 ： <input type=hidden name=\"name\" value=\"$FORM{'name'}\"><input type=hidden name=\"color\" value=\"$FORM{'color'}\">\n";
	print "<B><Font Color=$FORM{'color'}>$FORM{'name'}</Font><BR><input type=text name=\"chat\" size=\"60\"></B><BR> ";
	print "<input type=submit value=\"発言/更新\"></CENTER>\n";
}

print "</form></Center>\n";

if (!open(IN,"$chat_file")) { &error('エラー','チャットファイルが開けません.'); }
@DATA = <IN>;
close(IN);

@DATA = reverse(@DATA);

foreach $data (@DATA) {
	($date,$name,$color,$chat,$host) = split(/\t/,$data);
	chop($host);

	print "<P><B><font color=$color>$name</font></B> &gt; <!-- $host --><B>$chat</B> <Font Size=2>($date)</Font></P>\n";
}	

print "<hr Width=95%>\n";


print "[<a href=../index.html>戻る</a>]<p>\n";

# このスクリプトの著作権表示（かならず表示してください）
print "<h5 align=right><a href=\"http://www.rescue.ne.jp/\" target=\"_top\">MiniCHAT v5.2</a></h5>\n";


print "<p></BLOCKQUOTE></body></html>\n";
exit;

sub error {

        print "<h1>$_[0]</h1>\n";
	print "<h3>$_[1]</h3>\n";
	print "データファイルの場所やパーミッションを確認してください.<br>\n";
	print "このエラーの場合、JavaScriptエラーも同時に発生することがあります.<p>\n";
        print "</body></html>\n";
        exit;
}