#!/usr/local/bin/perl

require "jcode.pl";
$DATA1 = "../lab.html";
$DATA2 = "../data/lab.dat";
$DATA3 = "../data/lab_k.dat";
$BASHO = "./lab.cgi";
#フォームの読みとりのために####################################################
if($ENV{'REQUEST_METHOD'} eq 'POST') {
	read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else {
	$query = $ENV{'QUERY_STRING'};
}

foreach $pair (split(/&/, $query)) {
	my	($key, $value) = split(/=/, $pair);
	
	$value =~ tr/+/ /;
	$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
	
#	$value =~ s/</&lt;/g;
#	$value =~ s/>/&gt;/g;
	$value =~ s/\n//g;
	$value =~ s/\r//g;
	$value =~ s/\t//g;
	$value =~ s/\,//g;
	
	$FORM{$key} = $value;
}


if($FORM{'MODE'} eq "1") {NYUURYOKU();}
if(not exists $FORM{'MODE'}) {HTML();}
#ＨＴＭＬ表示##################################################################
sub HTML{


if(!open(FILE,"$DATA1")){&error('システムエラー','ＨＴＭＬファイルを開くことができません。');}
eval{ flock(FILE,2); };
@HTML = <FILE>;
close(FILE);

#####内田教授からのメッセージの処理#####
if(!open(IN,"$DATA2")){&error('システムエラー','伝言版ファイルを開くことができません。');}
eval{ flock(IN,2); };
$COMENT = <IN>;
close(IN);

$i = 0;
$end = $#HTML + 1;
for($i = 0 ; $i < $end ; ++$i){
$HTML[$i] =~ s/_COMENT_/$COMENT/i;
}

#####一言掲示板の処理#####
if(!open(IN,"$DATA3")){&error('システムエラー','掲示板ファイルを開くことができません。');}
eval{ flock(IN,2); };
@FILE = <IN>;
close(IN);

#ファイル形式の処理
$BEGIN = $FORM{'page'} * 3;
$END = $BEGIN + 3;
if($END > @FILE){$END = @FILE;}
for($w = $BEGIN ; $w < $END ; ++$w) {
($NAME,$KAKIKO,$DATE) = split(/\,/, $FILE[$w]);
$OUT[$w] = "<font color=#777777><strong>■$NAME</strong><font size=-1 color=#cccccc>[$DATE]</font><br>$KAKIKO</font>";
}

######リンクの処理######

####returnの処理####
if($END < @FILE){
$nextpage = $FORM{'page'} + 1;
$LINK1 = "<font color=#aaaaaa>[<a href=$ENV{'SCRIPT_NAME'}?page=$nextpage>return</a>]</font>\n";
}
####nextの処理####
if($FORM{'page'} != 0){
$repage = $FORM{'page'} - 1;
$LINK2 = "<font color=#aaaaaa>[<a href=$ENV{'SCRIPT_NAME'}?page=$repage>next</a>]</font>\n";}

#ＨＴＭＬ表示の処理
$OUTOUT = "$OUT[$BEGIN]<br>$OUT[$BEGIN + 1]<br>$OUT[$BEGIN + 2]<br>$LINK1$LINK2";

$q = 0;
$end = $#HTML + 1;
for($q = 0 ; $q < $end ; ++$q){
$HTML[$q] =~ s/_BORD_/$OUTOUT/i;
}


print <<END;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
@HTML
END
}
#書き込みのために##############################################################
sub NYUURYOKU{

######日時のデータ取り#####
($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);
$year = $year + 1900;
$mon = $mon + 1;
@wwday = ('<font color=red>SUN</font>','MON','TUE','WED','THU','FRI','<font color=blue>SAT</font>');
#数字の調節機能
$min = sprintf("%02d",$min);

$DATEDATE = "$year/$mon/$mday($wwday[$wday])$hour:$min";

#####入力チェックです。#####
if ($FORM{'NAME'} eq '') { $FORM{'NAME'} = "名無しさん";}

if ($FORM{'COMENT'} eq '') { &error('入力エラー','コメントを入力してください.'); }


if (!open(OUT,"<$DATA3")) { &error('システムエラー','ファイルを書きこみオープンできません.'); }
eval{flock(OUT, 1);};
@DDATA = <OUT>;
close(OUT);

unshift @DDATA, "$FORM{'NAME'},$FORM{'COMENT'},$DATEDATE\n";
while(@DDATA > 100000){pop @DDATA;}

if (!open(IN,">$DATA3")) { &error('システムエラー','ファイルを書きこみオープンできません.'); }
eval{flock(IN, 2);};
print IN @DDATA;
eval{flock(IN, 8);};
close(IN);
print "Location: $BASHO\n\n";
}

#エラー表示用##################################################################
sub error{
if (-e "$lockfile") { unlink($lockfile); }

print <<END;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>$title</title></head>
<body>
<hr>
<center><strong>$_[0]</strong></center>
<hr>
$_[1]
ブラウザの[戻る]ボタンを押して前の画面に移動してください.<p>
</body>
</html>
END
exit;
}