#!/usr/bin/perl

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++　　[ えすぱー君 Ver0.551]
#+++
#+++		･････>>> All Created by Tacky				     
#+++		･････>>> Copyright (c) 2000.2 Tacky's Room. All rights reserved....
#+++
#+++        Email    >>> tacky2@ops.dti.ne.jp
#+++        Homepage >>> http://tackysroom.com/
#+++
#+++ 設置方法構成(具体例)
#+++
#+++ public_html（ホームページディレクトリ）
#+++ |
#+++ |-- cgi-bin（任意のディレクトリ）
#+++   |
#+++   |-- jcode.pl  (755)…(日本語ライブラリ)
#+++   |-- esper.cgi (755)…(スクリプト本体)
#+++   |-- esper.txt (666)…(ログファイル)…空のままアップロード
#+++
#+++ 　　■( )内はパーミッッションの値です。
#+++ 　　■gif以外はアスキーモード、gifはバイナリーモードでアップロードして下さい。
#+++ 　　■esper.lockは自動作成＆削除しますので、各自でご用意する必要はありません。
#+++ 　　■設置時にエラーになる方は、各ファイルの指定をフルパス(http://〜)で指定してみて下さい。
#+++
#+++ >>> Update-History...
#+++
#+++    2004.02.27(Ver0.551) >>  不具合対応
#+++    2004.02.08(Ver0.55)  >>  セキュリティ強化
#+++    2000.07.12  >>  ﾌｧｲﾙﾛｯｸが解除されない場合がある不具合修正
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

require './jcode.pl';										#日本語コード変換

$url 				= "http://www.goodman.co.jp/disco/top.htm";  #<<<戻り先のURL
$url_target			= "middle";							#戻り先のURLを表示する際のターゲット
$script 			= "./esper.cgi";						#<<<このスクリプトの名前
$logfile 			= "./esper.txt";						#<<<勝敗情報ログファイル名
$lockfile			= './esper.lock';						#<<<ロックファイルの名前を指定

$title  			= "○を当てろ！えすぱー君";							#<<<タイトルを指定
$titlelogo 			= "http://www.goodman.co.jp/disco/img/game1.gif";	#<<<上段部にタイトルロゴを指定する場合、フルパスで指定。指定しない場合は「""」
$bgcolor			= "#ffffff";							#<<<背景色
$backpicture 		= "http://www.goodman.co.jp/disco/img/brick3.gif";	#<<<背景に画像を表示する場合、フルパスで指定。
$textcolor    		= "#000000";							#<<<メッセージ表示部分のテキスト文字色
$linkcolor		    = "#cc6600";							# リンク色（未読リンク）
$vlinkcolor			= "#666666";							# リンク色（既読リンク）
$alinkcolor	 		= "#ff3300";							# リンク色（押した時）

$tbgcolor			= '#ffcc00' ;							#<<<入力フォームの背景色

$card_gif[0]		= './esper_ura.gif';	#<<<カードの裏
$card_gif[1]		= './esper_ok.gif';		#<<<当たりカード
$card_gif[2]		= './esper_ng.gif';		#<<<はずれカード
$size_w				= 90 ;									#<<<カードの横幅
$size_h				= 120 ;									#<<<カードの縦幅

$taku				= 5 ;									#<<<何択（何枚のカードを当てるか）にしますか？最大７択です。

$point[0]			= 10;									#<<<１回目で当たった場合のポイント
$point[1]			= 8;									#<<<２回目で当たった場合のポイント
$point[2]			= 6;									#<<<３回目で当たった場合のポイント
$point[3]			= 3;									#<<<４回目で当たった場合のポイント
$point[4]			= 0;									#<<<５回目で当たった場合のポイント
$point[5]			= 0;									#<<<６回目で当たった場合のポイント
$point[6]			= 0;									#<<<７回目で当たった場合のポイント

$submit 			= "これだ!" ;							#<<<入力フォームの「送信」ボタンに表示される文字

$pt					= '12pt';								#<<<全体のフォントサイズ（pt指定以外何があるのか、僕知らない。(^^ゞ）

$cellheadbgcolor	= '#ffcc00';							#<<<エスパー度画面の見出し背景色
$cellheadtxcolor	= '#333333';							#<<<エスパー度画面の見出し文字色
$cellbgcolor1		= '#ffffff';							#<<<エスパー度画面のセル背景色１
$celltxcolor1		= '#666666';							#<<<エスパー度画面のセル文字色
$cellbgcolor2		= '#ffffcc';							#<<<エスパー度画面のセル背景色２（上記１と交互に表示されます）
$celltxcolor2		= '#666666';							#<<<エスパー度画面のセル文字色

$datamax 			= 100 ;									#<<<最大データ保存件数
$pagemax 			= 20 ;									#<<<１ページ内に表示する件数

#◆◆◆↓セキュリティ◆◆◆
$postchk		= 1;		#投稿時・メンテナンス時のMethodをPOST限定にする場合は１。以外は０。
$urlchk			= '';	#ここで指定されたアドレス(CGIの設置アドレスを記入)以外から投稿があった場合をエラーとします。設定しない場合は''
#◆◆◆↑セキュリティ◆◆◆

#<<<　ここから下はいじらない方が身のためです。(^_^;

###############################################################################
#### Main Process  START  #####################################################
###############################################################################
###<--- システム日時・時刻取得 ------------------------------------
$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);	$today = "$year$month$mday $hour:$min";

#<<<フォームデコード＆変数代入
&decode ;

&header ;						   			#<<<htmlヘッダーの出力

if ( $FORM{'action'} eq 'start' )	{
	srand(time ^ ($$ + ($$ << 15)));
	$FORM{'pinpon'}	= int(rand($taku)) ;
	&Inputform(2) ;				       			#<<<入力フォームの表示
	&footer ;						   			#<<< htmlフッターの出力
}	elsif ( $FORM{'action'} eq "ans" ) {		#答え合わせ
 	&Inputform(3); 									
	&footer ;						   			#<<< htmlフッターの出力
 	&regist if ( $sw == 1 ) ;					#ログ登録処理
}	elsif ( $FORM{'action'} eq "disp" ) {		#勝敗表示
 	&view; 									
	&footer ;						   			#<<< htmlフッターの出力
}	else	{
	&Inputform(1) ;				       			#<<<入力フォームの表示
	&footer ;						   			#<<< htmlフッターの出力
}
exit;
###############################################################################
#### Main Process  END  #######################################################
###############################################################################

###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{	
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});$post = 1 ;
	} else { $buffer = $ENV{'QUERY_STRING'};$post = 0 ; }
	@pairs = split(/&/,$buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ tr/+/ /;
		$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ s/&/&amp;/g;
		$value =~ s/"/&quot;/g;
		$value =~ s/\r\n//g;	$value =~ s/\r|\n//g;
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
	}
	if ( $FORM{'action'} eq 'regist' || $FORM{'action'} eq 'maintenance' || 
		 $FORM{'action'} eq 'update' )	{
		if ( $postchk && !$post )	{	&header ;&error("不正な投稿です。");	}
		if ( $urlchk && $ENV{HTTP_REFERER} !~ /$urlchk/i )	{	exit;	}
	}
}
###<--------------------------------------------------------------
###<---   HTMLヘッダー書き出し
###<--------------------------------------------------------------
sub	header	{
	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print "<html>\n<head>\n";
	print "<title>$title</title>\n";
	#<<<CSS START>>>
	print "<style type=\"text/css\">\n";
	print "<!--\n";
	print "body,tr,td { font-size: $pt;}\n";
	print "-->\n";
	print "</style>\n";
	#<<<CSS END>>>
	print "</head>\n";
	if ($backpicture) { $set = "background=\"$backpicture\""; if ( $bgcolor ) { $set .= " bgcolor=\"$bgcolor\"" ; }	}
	elsif ($bgcolor )	{ $set = "bgcolor=\"$bgcolor\""; }
	print "<body $set text=$textcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
	print "<a href=$url target=$url_target><b>[HOME]</b></a>\n";
	print "<a href=\"$script?action=disp\"><b>[みんなのエスパー度]</b></a>\n" if ( $FORM{'action'} ne 'disp' );
	print "<center>";
	if ( $titlelogo ) {	print "<img src=$titlelogo border=0><br>\n";	}
	else	{	print "$title\n";	}
}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer { 
	#<<<　↓消さないでネ♪
	print "<p align=right><font size=2>\n";
	print "<a href=http://tackysroom.com>えすぱー君 Ver0.551 Created by Tacky's Room</a></font></p>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   入力フォーム
###<--------------------------------------------------------------
sub	Inputform	{
	print "<hr width=80% size=1 noshade color=#000000>";
	print "<br>\n";
	print "<table border=0 cellspacing=5 cellpadding=5>\n";
	print "<tr>\n";
	$sw = 0 ;
	for ( 0..$taku - 1  )	{
		print "<td align=\"center\">\n";
		if ( $_[0] != 3 || $FORM{'no'} ne $_ )	{
			print "<img src=\"$card_gif[0]\" border=0 width=$size_w height=$size_h>";
		}	else	{
			if ( $_ == $FORM{'no'} && $_ == $FORM{'pinpon'} )	{
				print "<img src=\"$card_gif[1]\" border=0 width=$size_w height=$size_h>";
				$sw = 1 ;
			}	else	{
				print "<img src=\"$card_gif[2]\" border=0 width=$size_w height=$size_h>";
				$sw = 2 if ( $sw != 1 );
			}
		}
		print "</td>\n";
	}
	print "</tr>\n";
	$FORM{'cnt'}++ if ( $sw != 1 ) ;
	if ( $_[0] != 1 && $sw != 1)	{ 
		print "<tr>\n";
		for ( 0..$taku - 1  )	{
			print "<form name=inputform action=$script method=POST>";
			print "<input type=hidden name=\"action\" value=\"ans\">\n";
			print "<input type=hidden name=\"cnt\" value=\"$FORM{'cnt'}\">\n";
			print "<input type=hidden name=\"pinpon\" value=\"$FORM{'pinpon'}\">\n";
			print "<input type=hidden name=\"name\" value=\"$FORM{'name'}\">\n";
			print "<input type=hidden name=\"no\" value=\"$_\">\n";
			print "<td align=\"center\"><input type=submit value=\"$submit\"></td></form>";
		}
		print "</tr>\n";
	}
	print "</table>\n";

	print "<br><font color=red><h2><b>$FORM{'cnt'}回目で当たり!!!</b></h2></font>\n"	if ( $sw == 1 )	;
	print "<br><font color=red><h2><b>はずれ!!</b></h2></font>\n"	if ( $sw == 2 )	;

	print "<br><hr width=80% size=1 noshade color=#000000>\n";
	print "<form name=inputform action=$script method=POST>\n";
	print "<input type=hidden name=\"action\" value=\"start\">\n";
	print "<input type=hidden name=\"cnt\" value=\"0\">\n";
	print "<table border=0 cellspacing=0 cellpadding=1 bgcolor=#000000><tr><td>\n";
	print "<table border=0 cellspacing=0 cellpadding=3>\n";
	print "<tr><td bgcolor=\"$tbgcolor\" align=\"center\">name<br>";
	print "<input type=text name=\"name\" size=30 maxlength=100 value=\"$FORM{'name'}\"></td></tr>\n";
	print "<tr><td align=center bgcolor=\"$tbgcolor\">\n";
	print "<input type=submit value=START/RESTART>\n";
	print "</td></tr></table></td></tr></table>\n";
	print "</center><br><br>\n";
	print "<ul>\n";
	print "<li><b>$taku枚の中に１枚だけ「○」が付いたカードを当てるゲームです。</b></li>\n";
	print "<li><b>お名前を入力し、「START/RESTART」ボタンを押下するとゲーム開始です。</b></li>\n";
	print "<li><b>ゲームの途中でも再度「START/RESTART」ボタンを押下する事で再挑戦可能\です。</b></li>\n";
	print "</ul>\n";
	print "</form>\n";
}
###<--------------------------------------------------------------
###<---   エスパー度の表示
###<--------------------------------------------------------------
sub	view	{
	print "<center><hr width=80% size=2>\n";
	print "<br><b>みなさんのエスパー度です！<br>各回数は「何回目に当たりカードを引いたか」を表\しています。</b>\n";
	print "<br><b>ポイントは、</b>";
	print "1回目:<b>$point[0]点</b>";
	print "、2回目:<b>$point[1]点</b>" if ( $taku > 1 ) ;
	print "、3回目:<b>$point[2]点</b>" if ( $taku > 2 ) ;
	print "、4回目:<b>$point[3]点</b>" if ( $taku > 3 ) ;
	print "、5回目:<b>$point[4]点</b>" if ( $taku > 4 ) ;
	print "、6回目:<b>$point[5]点</b>" if ( $taku > 5 ) ;
	print "、7回目:<b>$point[6]点</b>" if ( $taku > 6 ) ;
	print "<b>でポイントされています。</b><br>\n";
	print "<b>※エスパー度（挑戦回数に対する全ポイントの割合）が高い順番に表\示されています。</b><br><br>\n";
	print "<a href=$script><b>エスパー君に戻る</b></a><br><br>\n";
	print "<table border=0 cellspacing=0 cellpadding=0 width=80%><tr><td bgcolor=#000000>\n";
	print "<table border=0 cellspacing=1 cellpadding=5 width=100%>\n";
	print "<tr><td bgcolor=$cellheadbgcolor><font color=$cellheadtxcolor>Name</font></td>\n";
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>挑戦回数</font></td>\n";
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>エスパー度</font></td>\n";
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>１回目</font></td>\n";
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>２回目</font></td>\n" if ( $taku > 1 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>３回目</font></td>\n" if ( $taku > 2 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>４回目</font></td>\n" if ( $taku > 3 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>５回目</font></td>\n" if ( $taku > 4 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>６回目</font></td>\n" if ( $taku > 5 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>７回目</font></td>\n" if ( $taku > 6 ) ;
	print "<td bgcolor=$cellheadbgcolor nowrap align=right><font color=$cellheadtxcolor>最新挑戦時刻</font></td></tr>\n";

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

	@LOG = sort  @LOG ; 	@LOG = reverse @LOG ;	#u000307

	#表示対象ページの先頭データ件数を算出
	$dm = @LOG;
	if ( $dm % $pagemax == 0) {		$p = $dm / $pagemax ;	}
	else	{	$p = $dm / $pagemax + 1;	}			
	$p = sprintf("%3d",$p);
	if ( $FORM{'page'} eq "NEXT" )	{
		if ( $FORM{'disppage'} == 0 ) { $FORM{'disppage'} = 1 }	;
		$d = ($FORM{'disppage'} + 1) * $pagemax - $pagemax ; 	$FORM{'disppage'} = $FORM{'disppage'} + 1 ;
	}	elsif	( $FORM{'page'} eq "BACK" ) 	{
		$d = ($FORM{'disppage'} - 1) * $pagemax - $pagemax ; 	$FORM{'disppage'} = $FORM{'disppage'} - 1 ;
	}	else	{
		$d = 0	;		$FORM{'disppage'} = 1 ;
	}
	$z = 1 ;
	for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ )	{ 
		($esp,$dt,$name,$cnt1,$cnt2,$cnt3,$cnt4,$cnt5,$cnt6,$cnt7,$dmy) = split(/,/,$LOG[$i])	;
		$w = index($esp,"_") ;		$atk = substr($esp,$w + 1,5) ;		$esp = substr($esp,0,$w) ;	#i000228
		($svdate,$svtime) = split(/ /,$dt);
		$edt = substr($svdate,4,2);
		$edt = sprintf("%02d",$edt)."月";
		$edt2 = substr($svdate,6,2);
		$edt = $edt.sprintf("%02d",$edt2)."日";
		if ( $bg eq $cellbgcolor1 ) {	$bg = $cellbgcolor2;	$tx = $celltxcolor2 ;	}
		else	{	$bg = $cellbgcolor1;	$tx = $celltxcolor1 ;	}
		if ( $cm eq '' ) {	$cm = '&nbsp;';	}
		print "<tr><td bgcolor=$bg width=30%><font color=$tx>$name</font></td>\n";
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$atk回</font></td>\n";
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$esp%</font></td>\n";
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt1回</font></td>\n" ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt2回</font></td>\n" if ( $taku > 1 ) ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt3回</font></td>\n" if ( $taku > 2 ) ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt4回</font></td>\n" if ( $taku > 3 ) ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt5回</font></td>\n" if ( $taku > 4 ) ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt6回</font></td>\n" if ( $taku > 5 ) ;
		print "<td bgcolor=$bg nowrap align=right><font color=$tx>$cnt7回</font></td>\n" if ( $taku > 6 ) ;
		print "<td bgcolor=$bg nowrap align=right width=20%>\n";
		print "<font color=$tx>$edt $svtime</font></td></tr>\n";
		$z++;
	}
	print "</table></td></tr></table></td></tr></table><br><br>\n";
	print "<form action=$script method=POST>\n";
	print "<input type=hidden name=\"action\" value=disp>\n";
	print "<input type=hidden name=\"disppage\" value=$FORM{'disppage'}>\n";
	if ( $FORM{'disppage'} != 0 && $FORM{'disppage'} !=1)	{
		print "<input type=submit name=\"page\" value=BACK>\n";
	}	
	if ( $FORM{'disppage'} + 1 <= $p )	{
		print "<input type=submit name=\"page\" value=NEXT>\n";
	}
	print "</form>\n";

}
###<--------------------------------------------------------------
###<---   ログ出力
###<--------------------------------------------------------------
sub	regist	{
	&filelock ;		#ファイルロック
	if ( !(open(IN,"$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@LOG = <IN> ;	close(IN);
	$dcnt = @LOG;	if ($dcnt > $datamax) {	pop(@LOG);	}
	$found = 0;
	foreach ( @LOG )	{
		($esp,$dt,$name,$cnt1,$cnt2,$cnt3,$cnt4,$cnt5,$cnt6,$cnt7,$dmy) = split(/,/,$_)	;
		if ( $FORM{'name'} eq $name )	{
			if ( $FORM{'cnt'} == 1 )	{	$cnt1++ ; }
			if ( $FORM{'cnt'} == 2 )	{	$cnt2++ ; }
			if ( $FORM{'cnt'} == 3 )	{	$cnt3++ ; }
			if ( $FORM{'cnt'} == 4 )	{	$cnt4++ ; }
			if ( $FORM{'cnt'} == 5 )	{	$cnt5++ ; }
			if ( $FORM{'cnt'} == 6 )	{	$cnt6++ ; }
			if ( $FORM{'cnt'} == 7 )	{	$cnt7++ ; }
			$s1 = ($cnt1*$point[0]) + ($cnt2*$point[1]) + ($cnt3*$point[2]) + ($cnt4*$point[3]) + ($cnt5*$point[4]) + ($cnt6*$point[5]) + ($cnt7*$point[6]) ;
			$s2 = $point[0] * ($cnt1 + $cnt2 + $cnt3 + $cnt4 + $cnt5 + $cnt6 + $cnt7) ;	#１回目で当たったポイント×挑戦回数
			$r = sprintf("%3.2f",substr(( $s1 / $s2 ) * 100,0,5)) ;								#u000307
			if ( $r < 100 ) { $r = 0 . $r ; }													#i000307
			if ( $r < 10 ) { $r = 0 . $r ; }													#i000307
			$s = sprintf("%05d",$cnt1 + $cnt2 + $cnt3 + $cnt4 + $cnt5 + $cnt6 + $cnt7) ;		#i000228
			push(@new,$r . "_$s,$today,$name,$cnt1,$cnt2,$cnt3,$cnt4,$cnt5,$cnt6,$cnt7,$dmy") ;	#u000228
			$found = 1 ;
		}	else	{
			push(@new,$_) ;
		}
	}
	if ( $found == 0 )	{
		if ( $FORM{'cnt'} == 1 )	{	$c1 = 1 ; }
		if ( $FORM{'cnt'} == 2 )	{	$c2 = 1 ; }
		if ( $FORM{'cnt'} == 3 )	{	$c3 = 1 ; }
		if ( $FORM{'cnt'} == 4 )	{	$c4 = 1 ; }
		if ( $FORM{'cnt'} == 5 )	{	$c5 = 1 ; }
		if ( $FORM{'cnt'} == 6 )	{	$c6 = 1 ; }
		if ( $FORM{'cnt'} == 7 )	{	$c7 = 1 ; }
		$s1 = ($c1*$point[0]) + ($c2*$point[1]) + ($c3*$point[2]) + ($c4*$point[3]) + ($c5*$point[4]) + ($c6*$point[5]) + ($c7*$point[6]) ;
		$s2 = $point[0] ;	#１回目で当たったポイント
		$r = sprintf("%03.2f",substr(( $s1 / $s2 ) * 100,0,5)) ;						#u000307
		if ( $r < 100 ) { $r = 0 . $r ; }												#i000307
		if ( $r < 10 ) { $r = 0 . $r ; }												#i000307
		push(@new,$r . "_00001,$today,$FORM{'name'},$c1,$c2,$c3,$c4,$c5,$c6,$t7,\n") ;	#u000228
	}
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
}
###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {	print "<br><br><br>$_[0]";	&footer;	exit;	}
###<--------------------------------------------------------------
###<---   ファイルロック設定
###<--------------------------------------------------------------
sub filelock {
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {	open(LOCK,">$lockfile");	close(LOCK);	return;		}
	}
	&error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。"); 
}
###<--------------------------------------------------------------
###<---   ファイルロック解除
###<--------------------------------------------------------------
sub fileunlock {	if (-e $lockfile) { unlink($lockfile); }	}