#!/usr/local/bin/perl

#�����₫���C�g�̓V���v���ȋ@�\�̈�s�f���‚ł��B
#�g�p�A�����A�Ĕz�z�Ɉ�؂̐����͂���܂���B
#���e�R�[�h���[�`���͌Ǔ��̈�Ձihttp://www.synapse.ne.jp/~pato/kojo/�j
#���Q�l�Ɋȗ����������̂��g�p���Ă��܂��B
#07/05 2000 �^�ӐT
############################### �‹��ݒ� ###############################

$title = '�����������v���R��펺����';     # �f���‚̖��O

$bbsurl = './tl11p.cgi';       # ���̃X�N���v�g��URL�i���Ύw����j

$bbsfile = './bbs.dat';        # �L�^�t�@�C���̃p�X

$counterfile = './count.txt';  # �J�E���^�t�@�C���̃p�X

$jcpl = './jcode.pl';          # ���{��R�[�h�ϊ����C�u�����̃p�X

# �o��HTML�̕����F��w�i�i�{�f�B�^�O�j
$body = '<body text="#000000" bgcolor="#aabbcc" link="#1775a2" vlink="#1775a2" alink="#cc0000">';

$namecolor = '#d53d8e';        # ���O�̐F

$textcolor = '#333333';        # ���e�̐F

$datecolor = '#666666';        # ���e�����̐F

$max = 100;                    # �\������

$maxlength = 3*1024;           # ���̓f�[�^���v�̍ő�l(byte)

$code1 = 12345678;             # ���e�R�[�h1 (8���̐��l�A�v�ύX)
$code2 = 56;                   # ���e�R�[�h2 (2���̐��l�A�v�ύX)
$ltime = 3*60*60;              # �Œ����e�Ԋu(sec�A�����蒷�����Ԃ��o�߂����ꍇ�͏������ݕs��)
$stime = 0;                    # �ŒZ���e�Ԋu(sec�A������Z���Ԋu�̏������ݕs�j

$time_dif = 9*60*60;           # �O���j�b�W�W�����Ƃ̎����i���{���Ԃ�\������ꍇ9*60*60�j

############################### �S�̏��� ###############################

&get_time;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	&decode;
	&write if($FORM{'value'});
}
&html;
exit;

############################### �T�u���[�`�� ###############################

sub get_time{ #-------------------- �������� --------------------#
	$time = time; # $time�͓��e�R�[�h�쐬�ɂ��g�p����̂ŏȗ��s��
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time + $time_dif);
	$mon++;
	$wday = ('��','��','��','��','��','��','�y')[$wday];
	$date_now = sprintf( "%02d/%02d($wday)%02d:%02d",$mon,$mday,$hour,$min);
}

sub decode{ #-------------------- �f�R�[�h --------------------#
	return if($ENV{'CONTENT_LENGTH'} > $maxlength);
	require "$jcpl";
	read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); 
	foreach (split(/&/,$buf)) {
		($name, $value) = split(/=/,$_);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		&jcode'convert(*value,'sjis');
		$value =~ s/\r|\n//g;
		$value =~ s/&/&amp\;/g;
		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;
		$value =~ s/\t:/  :/g; 
		$FORM{$name} = $value;
	}
}

sub html{ #-------------------- HTML�o�� --------------------#
	&counter; # HTML���̔C�ӂ̏ꏊ��$count��u���Ƃ����ɃJ�E���g�����\������܂�
	# ���e�R�[�h����
	$code = ($time+$code1)*$code2;

	print "Content-type: text/html\n\n";
	print <<"_HTML_";
<html><head><title>$title</title></head>
$body
<font size=4><b>$title</b></font>
<small>�@�@| <a href="http://thor.prohosting.com/~crium/cgi-bin/mchat.cgi">����펺</a>
| <a href="http://wacom.virtualave.net/cgi-bin/kakiko.cgi">��Q��펺</a>
| <a href="http://www.lucky.org/mk3/user/itsgood.html">�i�ߎ�</a>
| <a href="http://mj.giganet.net/">������</a>
| <a href="http://i.am/kakumeigun/">�v���R</a>
|�@�@��$count
</small>
<form method=post action="$bbsurl">
<input type=hidden name=code value="$code">
���O <input type=text name="name" size=20 maxlength=50 value="$FORM{'name'}">
���������N <input type="checkbox" name="auto_link" value="1" checked><br>
���e <input type=text name="value" size=80 maxlength=300><br>
���� <input type=submit value="���e /�����[�h"><input type=reset value="del"></form><p>
_HTML_

	# �L���̏o��
	open(IN,"$bbsfile");
	while (<IN>) {
		($date,$name,$value,$pcode) = split(/\t:/,$_);
		print "<hr size=1><font color=\"$namecolor\"><b>$name</b> </font>&gt\; ";
		print "<font color=\"$textcolor\"><b>$value</b></font> <font size=1 color=\"$datecolor\">$date</font>\n";
	}
	close(IN);

	print <<"_HTML_";
<hr><div align=right><small>�����₫���C�g1.1p <a href="http://mizuiro.virtualave.net/t_lite/">source</a></small></div>
</body></html>
_HTML_
}

sub write{ #-------------------- �������ݏ��� --------------------#

	open(IN,"$bbsfile");
	@data = <IN>;
	close(IN);

	foreach(@data){
		$code0 = (split(/\t:/,$_))[3];
		chomp $code0;
		if($code0 == $FORM{'code'}){&error('���̓��e�R�[�h�͎g�p�ς݂ł��B');}
	}

	# ���e�R�[�h����
	$de_code = ($FORM{'code'}/$code2)-$code1;

	if($time <= $de_code){ &error('���e�R�[�h�����Ă��܂��B�f���‚������[�h���ĉ������B'); }
	elsif($time - $de_code > $ltime){&error("���e�R�[�h�̗L�������i$ltime�b�j���߂��Ă��܂��B�f\���‚������[�h���ĉ������B");}
	elsif($time - $de_code < $stime){&error("���e�Ԋu���Z�������܂��B$stime�b�ȏ�o�߂��Ă��瓊�e���ĉ������B");}

	if($FORM{'auto_link'}){
		$FORM{'value'} =~ s/(http:\/\/)/\t:$1/g; # �A������URL��\�����ꍇ�̏����i\t:�ŋ�؂�j
		$FORM{'value'} =~ s/http:\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"http:\/\/$1\">��<\/a>/g;
		$FORM{'value'} =~ s/\t://g; # \t:�����ɖ߂�
	}

	splice(@data,$max-1) if($max <= @data);

	open(OUT,">$bbsfile");
	print OUT "$date_now\t:$FORM{'name'}\t:$FORM{'value'}\t:$FORM{'code'}\n";
	foreach(@data){	print OUT $_; }
	close(OUT);
}

sub error{ #-------------------- �G���[���� --------------------#
	$error_msg = $_[0];
	print "Content-type: text/plain\n\n";
	print "Error(T-T):$error_msg\n\n";
	print "--�����₫���C�g1.1p--\n\n\n\n";
	exit;
}

sub counter{ #-------------------- �A�N�Z�X�J�E���^ --------------------#
	open(IN,"$counterfile");
	$count = <IN>;
	close(IN);
	$count++;
	open(OUT,">$counterfile");
	print OUT "$count";
	close(OUT);
}