#!/usr/local/bin/perl

#####################₫CgߋOti-modepCGI#############
#
# \i̓p[~bV()͏LҌCGIT[ȍꍇj
#|-- tl11i.cgi  755(700) 
#|-- jcode.pl    644(600)
#|-- bbs.dat     666(600)
#|-- count.txt   666(600)
#
#₫Cg̓Vvȋ@\̈sfłB
#gpAAĔzzɈ؂̐͂܂B
#08/28 2001 ^ӐT
############################### ݒ ###############################

$title = '܂Ȃׂ̓LҔ';     # f̖O

$bbsurl = 'tl11i.cgi';        # ̃XNvgURLiΎwj

$bbsfile = 'bbs.dat';        # L^t@C̃pX

$counterfile = 'count.txt';  # JE^t@C̃pX

$jcpl = 'jcode.pl';          # {R[hϊCũpX

$logdir = 'log/';            # ߋOۑfBNg

# oHTML̕Fwii{fB^Oj
$body = '<body text="#555555" bgcolor="#f0f0f0" link="#1775a2" vlink="#1775a2" alink="#cc0000">';


$namecolor = '#1775a2';        # O̐F

$textcolor = '#555555';        # e̐F

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

$def0 = 10;                    # ftHg\

$max = 50;                     # őۑ

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

$time_dif = 9*60*60;           # OjbWWƂ̎i{Ԃ\ꍇ9*60*60j

############################### S̏ ###############################

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

############################### Tu[` ###############################

sub get_time{ #--------------------  --------------------#
	$time = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time + $time_dif);
	$year += 1900;
	$mon++;
	$wday = ('','','','','','','y')[$wday];
	foreach($mon,$mday,$hour,$sec,$min){$_ = sprintf("%02d",$_);}
	$date_now = "$mon/$mday($wday)$hour:$min";
}

sub decode{ #-------------------- fR[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{ #-------------------- HTMLo --------------------#
	&counter; # HTML̔Cӂ̏ꏊ$countuƂɃJEg\܂
	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print <<"_HTML_";
<html><head><title>$title</title></head>
<body>
$title
<small>
<a href="$logdir">O</a>
$count
</small>
<form method=post action="$bbsurl">
<input type="hidden" name="def" value="$FORM{def}">
name <input type=text name="name" size=8 maxlength=50 value="$FORM{'name'}"><br>
message <input type="checkbox" name="auto_link" value="1" checked> a_link<br>
<textarea name="value" rows="4" cols="14"></textarea><br>
<input type=submit value="post/rel"><input type=reset value="del"></form><p>
_HTML_

	if($FORM{'def'}){ 
		$def = $FORM{'def'};
		$def = $max if($def > $max);
	}
	else{ 
		$def = $def0; 
	}

	open(IN,"$bbsfile");
	@data = <IN>;
	close(IN);
	$total = @data;
	$page = $FORM{'page'} || 0;
	$page_end = $page + $def;
	$page_end = $total if($page_end > $total);

	# L̏o
	foreach (@data[$page .. $page_end - 1]) {
		($date,$name,$value) = split(/\t:/,$_);
		print "[$name] ";
		print "$value <font size=1>$date</font><p>\n";
	}

	$page++;
	if($page_end < $total){
		print <<"_HTML_";
<form method="POST" action="$bbsurl">
<input type="hidden" name="def" value="$def">
<input type="hidden" name="page" value="$page_end">
<input type="hidden" name="name" value="$FORM{'name'}">
$page-$page_end<input type="submit" value="next">
 (all=$total)
</form>
_HTML_
	}
	else{
		print "$page-$total (last)\n";
	}
	print "</body></html>";

} # html end

sub write{ #-------------------- ݏ --------------------#
	return if($ENV{'HTTP_REFERER'} !~ /$bbsurl/i);
	if($FORM{'auto_link'}){
		$FORM{'value'} =~ s/(http:\/\/)/\t:$1/g; # AURL\ꍇ̏i\t:ŋ؂j
		$FORM{'value'} =~ s/http:\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"http:\/\/$1\" target="_blank"><\/a>/g;
		$FORM{'value'} =~ s/\t://g; # \t:ɖ߂
	}

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

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

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

	# ߋOL^
	$logfile = "$logdir$year$mon$mday.html";
	if(!(-e "$logfile")){
		open(LOG,">$logfile");
		print LOG <<_LOG_;
<html><head><title>$tile$yearN$mon/$mday($wday)ߋO</title></head>
$body
$tile$yearN$mon/$mday($wday)ߋO@@@<a href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}">fɂǂ</a>
_LOG_
	}

	open(LOG,">>$logfile");
	print LOG "<hr size=1><font color=\"$namecolor\"><b>$FORM{'name'}</b> </font>&gt\; ";
	print LOG "<font color=\"$textcolor\"><b>$FORM{'value'}</b></font> <font size=1 color=\"$datecolor\">$date_now</font>\n";
	close(LOG);

}

sub counter{ #-------------------- ANZXJE^ --------------------#
	open(IN,"$counterfile");
	$count = <IN>;
	close(IN);
	$count++;
	open(OUT,">$counterfile");
	print OUT "$count";
	close(OUT);
}

