#!/usr/bin/perl

require './lib/jcode.pl';

#**************************************************************************
#	1.ファイル設定
#**************************************************************************
#スクリプト名
	$cgi = 'kousin.cgi';
#ファイル名
	$dat = 'kousin.txt';
#ロックファイル名
	$lockfile = 'lock.lock';
#method
	$meth = 'POST';

#**************************************************************************
#	3.外観設定
#**************************************************************************
#テーブルの色（管理画面）
	$t_bg = '#ffd700';
#テーブル幅（管理画面）
	$t_width = '80%';
#日付のフォント色
	$f_color = '#000080';
#最大データ保存数
	$d_max = '20';
#bodyタグ（ない場合でも<body>は消さないで下さい）
	$body = '<body BGCOLOR=#ffffff text=#333333 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 class=txt12>';
#基本フォントサイズ。
	$fonts = '3';
#cssファイルまでのパス。ない場合は''
	$css = '';
#タイトル
	$title = '最新情報';
#**************************************************************************
#	4.location設定
#**************************************************************************
#0/使用可能;1/使用不可能;location使用不可の場合（tok2やomosiro.comなど）は1にしてください。
	$location = '0';

#----------------------------------日付取得

$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);
if ( substr($month,0,1) == 0 )	{	$month =~ s/0/ /;	}
if ( substr($mday,0,1) == 0 )	{	$mday =~ s/0/ /;	}
$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
$today = "$month/$mday($week) $hour:$min";

#----------------------------------処理開始

&decode;
&load;

if ( $FORM{'action'} eq "admin" ){
	if ( $FORM{'pass'} ne $pass ) {		&error("パスワードが違います");		}
	&head;
	&input;
	&end_html;
	exit;
}elsif( $FORM{'action'} eq "input" ){
	&output;
	exit;
}else				    {
	&head;
	&log;
	&end_html;
	exit;
}

#----------------------------------デコード

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;
		$value =~ s/\r\n/<BR>/g;
		$value =~ s/\n/<BR>/g;
		$value =~ s/\r/<BR>/g;
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
	}
}

#----------------------------------HTML書き出し

sub head{
	print "Content-type: text/html\n\n";
	print "<html><head>\n";
	print "<title>$title</title>\n";
	print <<"EOF";
<script language="JavaScript">
<!--
function stylechange()
{
cssheet = "";
	if(navigator.userAgent.indexOf('MSIE 6.')>=0)
	{
		cssheet = "hitomi2.css";
	}
	else if(navigator.userAgent.indexOf('MSIE 5.')>=0)
	{
		cssheet = "hitomi2.css";
	}
	else if(navigator.userAgent.indexOf('MSIE 4.')>=0)
	{
		cssheet = "hitomi2.css";
	}
	else if(navigator.userAgent.indexOf('MSIE 3.')>=0)
	{
		cssheet = "hitomi2.css";
	}
	else if(navigator.userAgent.indexOf('Mozilla/5.')>=0)
	{
		cssheet = "hitomi2.css";
	}
	else if(navigator.userAgent.indexOf('Mozilla/4.')>=0)
	{
		cssheet = "hitomi2_nn.css";
	}
	else if(navigator.userAgent.indexOf('Mozilla/3.')>=0)
	{
		cssheet = "hitomi2_nn.css";
	}
	else if(navigator.userAgent.indexOf('Mozilla/2.')>=0)
	{
		cssheet = "hitomi2_nn.css";
	}
document.write('<link rel="stylesheet" href="'+cssheet+'" type="text/css" charset="x-sjis">');
}
//-->
</script>
<SCRIPT language=javascript>stylechange();</SCRIPT>
EOF
	print "</head>\n";
	print "$body\n";
}

#----------------------------------html書き終わり

sub end_html{
	print "</body></html>\n";
}

#----------------------------------ログ表示

sub log{


	$dm = @DAT;
	for ( $i = $d ; ( $i < $dm ); $i++ )	{ 
		chop $DAT[$i];
		($day,$name,$url,$comment) = split(/,/,$DAT[$i]);
			print "$comment<br><br>\n";
	}

}


#----------------------------------入力画面

sub input{

	print "<div align=center>\n";
	print "<table width=\"$t_width\" cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"$t_bg\">\n";
	print "<form action=\"$cgi\" method=\"$meth\">\n";
	print "<tr><td><basefont size=\"$fonts\">更新内容</td>\n";
	print "<td><textarea name=\"comment\" cols=40 rows=10></textarea></td></tr>\n";
	print "<tr><td align=center colspan=2>\n";
	print "<input type=hidden name=\"action\" value=\"input\">\n";
	print "<input type=submit value=\"Submit\">\n";
	print "<input type=reset value=\"Reset\">\n";
	print "</td></tr>\n";
	print "</form></table>\n";
	print "</div>\n";
}

#----------------------------------ファイル読み込み

sub load{

	if ( !(open(IN,"$dat"))){	&error("ログファイル($dat)のオープンに失敗しました");	}
	@DAT = <IN>;
	close (IN)
}

#----------------------------------ファイル書き出し

sub	output	{

	if ( $FORM{'comment'} eq '')	{	&error("メッセージは省略出来ません。");	}

	$dcnt = @DAT;
	if ($dcnt >= $d_max) {	pop(@DAT);	}

	$name = $FORM{'name'};
	$url = $FORM{'url'};
	$com = $FORM{'comment'};

	unshift(@DAT,"$today,$name,$url,$com\n");

	&filelock ;	#ファイルロック
	if ( !(open(OUT,">$dat")))	{	&error("ログファイル($dat)のオープンに失敗しました");	}
	print OUT @DAT;
	close(OUT);
	&fileunlock ;	#ファイルロック解除

	if ( $location == 0 ) {	print "Location: $cgi?\n\n";	}
	else		{
	&head;
	print "書き込みが完了しました<br>\n";
	print "<a href=\"$cgi?\">モドル</a>\n";
	&end_html;
	}

}

#----------------------------------エラー処理

sub error{

	&head;
	print "<font color=red>$_[0]</font>\n";
	print "<p><a href=\"$cgi?\">$titleに戻る</a>\n";
	&end_html;
	exit;
}

#----------------------------------ファイルロック

sub filelock {
	$sw = 0;
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {
			open(LOCK,">$lockfile");
			close(LOCK);
			$sw = 1;
			return;
		}
	}
	&error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。"); 
}

#----------------------------------ファイルロック解除

sub fileunlock {
	if (-e $lockfile) { unlink($lockfile); }
}