#!/usr/local/bin/perl

##########著作権表示（削除禁止）###################
#Project by 0zero City de かんたんCGI
#Script_name:zeroq.cgi
$ver = 'ZEROQ-ver2.18'; #'02/08/18
#Copyright(c)1998-2001 0zero City de かんたんCGI 
#Person in charge:Miki Nishio
#Nakamuraku,Nagoyashi,Aichi,
#All rights reserved.	2000/01/14
#E-mail:zerocity@sa.starcat.ne.jp
$home_url = 'http://www.zerocity.net/';
###################################################
#
#::::::::::::::::::::::::::::注意事項::::::::::::::::::::::::::
#・このCGIスクリプトはフリーソフトですが著作権は放棄していません
#・添付されている画像はフリーですが著作権は放棄していません
#・著作権の表示(Copyright)は削除・変更禁止です
#・このスクリプトを使用しての如何なる障害も作者及び制作サイトも
#　責任は負いません
#・詳しい利用規定は必ずお読み下さい
#・詳しい利用規定　[URL-http://www.zerocity.net/cgi/miniregu.html]
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#
#-------よくある質問CGIのetc/Windows上でCGIを実行---------------------------
#     http://www.zerocity.net/q&a.html
#===============================================================================
###########################設定はここから#######################################
#===============================================================================
#日本語変換ライブラリ-----------------------------------------★
require './jcode.pl';
#===============================================================================
#このスクリプトのパス(設置場所)-------------------------------★★
$script = 'http://www.gensenmai.com/column/quiz/zeroq.cgi';
#===============================================================================
#データディレクトリ(フォルダ)までのパス-----------------------★★★
$data = './data';
#
#イメージディレクトリ(フォルダ)までのパス---------------------★★★
$img = './img';
#===============================================================================
#管理データファイル名-----------------------------------------★★★★
$base = 'master.dat';
#
#問題データファイル名-----------------------------------------★★★★
$q_file = 'quiz.dat';
#
#■ランキング■データファイル名-----------------------------------★★★★
$r_file = 'rank.dat';
#===============================================================================
#貴方のホームページアドレス-----------------------------------★★★★★
$home = 'http://gensenmai.com/';
#
#管理用パスワード---------------------------------------------★★★★★
$password = '0611';
#===============================================================================
#フォームの送信方法-------------------------------------------★★★★★★
$method = 'GET';
#===============================================================================
###########################お好みに合わせて設定#################################
#===============================================================================
#このクイズCGIのタイトル
$q_title = 'お米クイズにチャレンジ';
#
#タイトル文字色
$ttl_c = '#ccc';
#
#背景色(壁紙を使う場合はこのまま)
#$bcolor = '#FFFFFF';
#
#背景画像名
#背景画像を使う場合は背景画像はimgフォルダの中に入れる
$b_ground = 'back.jpg';
#
#解答ボタンイメージ
#ボタンの色
$btn_b = '#006500';
#
#ボタンの文字色
$btn_c = '#FFFFFF';
#
#制限時間設定
#時間制限を付ける場合は　1 付けない場合は　0
$limitflag = 0;
#
#制限時間を付ける場合の秒数
$t_limit = 15;
#
#不正解時に正解を表示する場合は　1 しない場合は　2
$ans_view = 1;
#
#ランクデータ最大保存数及び表示数
$max_save = 100;
#
#Locationヘッダー処理
#使える場合は　1 使えない場合又は分からない場合は　2
$lctn = 2;
#
#自動生成されるデータファイル最大保存数(最低で10 アクセスが多い場合は多めで)
$master_eno = 50;
#
#アクセスを拒否するIP(拒否したいIPが仮に　240.110.2.12　の場合　240.110.2.*　とした
#方がいいです　何件でも拒否できます。１つのIPを　'　と　'　で囲い　区切りに , を入れる)
@ipdenil = ('aaa.aaa.aaa.aaa','abc.abc.abc.abc');
#
#ロックファイル（データ破損機能）を使う場合は　1;　使わない場合は　0;
$symlink = 0;
#===============================================================================
###########################設定はここまで#######################################
#===============================================================================
$ckname = 'zeroq';
&get_host;
&get_localtime;
&decode;

if ($FORM{'call'} eq 'ans_check') { &ans_check; }
elsif ($FORM{'call'} eq 'rank_in') { &rank_in; }
elsif ($FORM{'call'} eq 'new_qiz') { &q_html; }
elsif ($FORM{'call'} eq 'start') { &q_html2; }
elsif ($FORM{'call'} eq 'master') { &master; }
elsif ($FORM{'call'} eq 'new_q') { &q_write; }
elsif ($FORM{'call'} eq 'q_check') { &check_write; }
elsif ($FORM{'call'} eq 'erase_q') { &erase; }
elsif ($FORM{'call'} eq 'erase_r') { &erase_r; }
elsif ($FORM{'call'} eq 'erase') { &erase_data; }
elsif ($FORM{'call'} eq 'r_erase') { &erase_rank; }
elsif ($FORM{'call'} eq 'rank') { &rank; }
else { &html; }
##削除処理##
sub erase_data {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$qiz_data = "$data\/$q_file";
	if (!open(TEXT,"$qiz_data")) { &error(find_file); }
    @DATA = <TEXT>;
    close(TEXT);
##対象データ削除##
	$new_qcode = 1;
	foreach $line (@DATA) {
	($qcode,$qtext,$qans1,$qans2,$qans3,$qans4,$qokno,$allno,$qrate,) = split(/\,/,$line);
##念のため##
	$qcode =~ s/\r\n//g;
	$qcode =~ s/\r//g;
	$qcode =~ s/\n//g;
		if ($FORM{'erasenumber'} != $qcode) {
		$dummy_line = "$new_qcode\,$qtext\,$qans1\,$qans2\,$qans3\,$qans4\,$qokno\,$allno\,$qrate\,\n";
		push(@DUMMY_Q,$dummy_line);
		$new_qcode ++
		}
	}
##書き込み処理##
	if (!open(TEXT,">$qiz_data")) { &error(find_file); }
	print TEXT @DUMMY_Q;
	close(TEXT);
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
    &erase;
}
##書き込みチェック##
sub check_write {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##内容確認##
	if ($FORM{'comment'} eq '') { &error(no_comment); }
	if ($FORM{'ans1'} eq '') { &error(no_ans); }
	if ($FORM{'ans2'} eq '') { &error(no_ans); }
	if ($FORM{'ans3'} eq '') { &error(no_ans); }
	if ($FORM{'ans4'} eq '') { &error(no_ans4); }
##問題データオープン##
	$qiz_data = "$data\/$q_file";
	if (!open(DAT,"$qiz_data")) { &error(find_file); }
	@DATA = <DAT>;
	close(DAT);
	$count = @DATA;
	if ($count < 1) { $new_code = 1; }
	else {
	$new_code = 1;
		foreach $q_line (@DATA) {
		($qcode,$text,$ans1,$ans2,$ans3,$ans4,$okno,$allno,$qrate,) = split(/\,/,$q_line);
		$new_line = "$new_code\,$text\,$ans1\,$ans2\,$ans3\,$ans4\,$okno\,$allno\,$qrate\,\n";
		push(@DM_DATA,$new_line);
		$new_code ++
		}
	}
	$com = $FORM{'comment'};
	$com =~ s/\r\n/<br>/g;
	$com =~ s/\r/<br>/g;
	$com =~ s/\n/<br>/g;
	$value = "$new_code\,$com\,$FORM{'ans1'}\,$FORM{'ans2'}\,$FORM{'ans3'}\,$FORM{'ans4'}\,0\,0\,0\,\n";
##書き込み処理##
	push(@DM_DATA,$value);
	if (!open(DAT,">$qiz_data")) { &error(find_file); }
	print DAT @DM_DATA;
	close(DAT);
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
	&q_write;
}
##削除処理##
sub erase_rank {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
##対象データ削除##
	$new_rcode = 1;
	foreach $eline (@RANK) {
	($edate,$ecode,$eqno,$euser,$ecom,$erhost,) = split(/\,/,$eline);
##念のため##
	$ecode =~ s/\r\n//g;
	$ecode =~ s/\r//g;
	$ecode =~ s/\n//g;
		if ($FORM{'erasenumber'} != $ecode) {
		$dummy_rline = "$edate\,$new_rcode\,$eqno\,$euser\,$ecom\,$erhost\,\n";
		push(@DUMMY_R,$dummy_rline);
		$new_rcode ++
		}
	}
##書き込み処理##
	if (!open(FILE,">$datarank")) { &error(find_file); }
	print FILE @DUMMY_R;
	close(FILE);
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
    &erase_r;
}
##答え合わせ（不正解画面）##
sub ans_check {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
    &get_cookie;
##データオープン##
	$intime = $COOKIE{'Intime'};
	$dataname = "$data\/$COOKIE{'Intime'}\.dat";
	if (!open(TXT,"$dataname")) { &error(trick); }
	@USERC = <TXT>;
##解答数取得##
	($user_in,$user_name,$qiz_no,$a_b,) = split(/\,/,@USERC[0]);
	$qzno = $qiz_no;
##COOKIE情報と一致しなければエラー##
	if ($a_b eq 'after') { &error(trick); }
	if ($COOKIE{'Q_no'} ne $qiz_no) { &error(trick); }
##問題ナンバー取得##
	$_ = $qiz_no;
	($uqn,) = split(/\,/,$USERC[$_]);
	$matchq = $uqn + 1;
	shift(@USERC);
##ランクデータオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
	$rank_end = @RANK - 1;
##答え合わせ（正解なら正解画面）##
    if ($FORM{'usrans'} eq $COOKIE{'Ans4'}) { &ok_html; }
	$q_no = $qiz_no - 1;
##不正解処理##
	($e_date,$e_code,$e_qno,$e_user,$e_com,$e_rhost,) = split(/\,/,$RANK[$rank_end]);
##管理データ削除##
	$masterdata = "$data\/$base";
	if (!open(TXT,"$masterdata")) { &error(find_file); }
	@MASTER = <TXT>;
	close(TXT);
		foreach $e_data (@MASTER) {
		($erase_dname,$username,$qiz_no,$a_b,) = split(/\,/,$e_data);
##念のため##
		$erase_dname =~ s/\r\n//g;
		$erase_dname =~ s/\r//g;
		$erase_dname =~ s/\n//g;
		if ($intime != $erase_dname) { push(@DUMMY_M,$e_data); }
		}
	if (!open(TXT,">$masterdata")) { &error(find_file); }
	print TXT @DUMMY_M;
	close(TXT);
	$value = "$intime\,$user_name\,-1\,after\,\n";
##書き込み処理##
	unshift(@USERC,$value);
	if (!open(TXT,">$dataname")) { &error(find_file); }
	print TXT @USERC;
	close(TXT);
##問題取得##
	$qiz_data = "$data\/$q_file";
	if (!open(DAT,"$qiz_data")) { &error(find_file); }
	@B_UQIZ = <DAT>;
	close(DAT);
	foreach $q_line (@B_UQIZ) {
	($code,$text,$ans1,$ans2,$ans3,$ans4,$ok,$accscode,$qrate,) = split(/\,/,$q_line);
##念のため##
	$code =~ s/\r\n//g;
	$code =~ s/\r//g;
	$code =~ s/\n//g;
##一致した問題の回答数を増やす##
    	if ($matchq == "$code") {
		$newaccs = $accscode + 1;
			if ($ans4 eq 'one') { $ans5 = $ans1; }
			elsif ($ans4 eq 'two') { $ans5 = $ans2; }
			elsif ($ans4 eq 'three') { $ans5 = $ans3; }
			$bat_text = $text;
			$down_rate = int($ok/$newaccs*100);
		$new_qrate_line = "$code\,$text\,$ans1\,$ans2\,$ans3\,$ans4\,$ok\,$newaccs\,$down_rate\,\n";
		push(@NEWRATE,$new_qrate_line);
		} else {
		push(@NEWRATE,$q_line);
		}
	}
	if (!open(DAT,">$qiz_data")) { &error(find_file); }
	print DAT @NEWRATE;
	close(DAT);
	$form_name = $FORM{'name'};
	&cookie;
##不正解画面表示##
	&html_head;
	print "<table border=\"0\" align=\"center\" width=\"60%\">\n" ;
	print "<tr>\n" ;
	print "<td colspan=\"2\">";
	print "<div style=\"font:600 15pt/130%\"メイリオ\",serif\">第$qzno問</div></td>\n" ;
	print "<th width=\"40%\">";

	print "</td>\n";
	print "</tr>\n";

	print "<tr>\n" ;
	print "<td colspan=\"3\" bgcolor=\"#FFFFFF\">\n";
	print "<div style=\"font:600 12pt/140%\"メイリオ\",serif;color:#293075\">$bat_text</div>\n" ;
	print "</td>\n";
	print "</tr>\n";
		if ($FORM{'usrans'} eq 'over') {
		print "<tr>\n" ;
		print "<td>　</td>\n";
		print "<td colspan=\"2\">";
		print "<div class=\"g_over\">TIME\ OVER</div></td>\n" ;
		print "</td>\n";
		print "</tr>\n";
		} else {
		print "<tr>\n" ;
		print "<td>　</td>\n";
		print "<td colspan=\"2\">";
		print "<div class=\"g_over\">GAME\ OVER</div></td>\n" ;
		print "</td>\n";
		print "</tr>\n";
		}
		if ($ans_view == 1) {
		print "<tr>\n" ;
		print "<td colspan=\"3\">";
		print "<div class=\"ans\">正解は$ans5でした</div></td>\n" ;
		print "</td>\n";
		print "</tr>\n";
		}
	print "<tr>\n" ;
	print "<th colspan=\"3\">";
	print "<div class=\"ans\">正解数は$q_no問です</div></td>\n" ;
	print "</td>\n";
	print "</tr>\n";
		if ($q_no > $e_qno || $rank_end < $max_save) {
		print "<tr>\n" ;
		print "<th id=\"2\" colspan=\"3\">";
		print "コメントを入れてRANKINを押せばランク登録できます</th>\n" ;
		print "</tr>\n";
		print "<tr>\n" ;
		print "<th id=\"2\" colspan=\"2\" nowrap><form action=\"$script\" method=\"$method\" target=_blank><input type=\"hidden\" name=\"call\" value=\"rank_in\">";
		print "コメント：<input type=\"text\" name=\"com\" size=\"20\"><input type=\"submit\" value=\"RANKIN\"></th>\n";
		print "<td></form></td>\n";
		print "</tr>\n";
		}
	print "<tr>\n" ;

	print "<th width=\"50%\" align=\"left\"><a href=\"$script\">■もう一度挑戦！■</a>\n" ;
	print "<th width=\"50%\" align=\"right\"><a href=\"$script?call=rank\" target=_blank>■ランキング■</a>\n" ;
	print "</tr>\n";
	print "</table>\n" ;


	&foot;
##ユーザーファイル削除##
	if (-e $dataname) { unlink($dataname); }
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##正解画面##
sub ok_html {
##正解処理##
	$q_no = $qiz_no + 1;
	$value = "$intime\,$$FORM{'name'}\,$q_no\,before\,\n";
##書き込み処理##
	unshift(@USERC,$value);
	if (!open(TXT,">$dataname")) { &error(find_file); }
	print TXT @USERC;
	close(TXT);
##問題取得##
	$qiz_data = "$data\/$q_file";
	if (!open(DAT,"$qiz_data")) { &error(find_file); }
	@UQIZ = <DAT>;
	close(DAT);
	$end_all_quiz = @UQIZ;
	foreach $q_lines (@UQIZ) {
	($code,$text,$ans1,$ans2,$ans3,$ans4,$ok,$accscode,$qrate,) = split(/\,/,$q_lines);
##念のため##
	$code =~ s/\r\n//g;
	$code =~ s/\r//g;
	$code =~ s/\n//g;
##一致した問題の回答数を増やす##
    	if ($matchq == $code) {
		$newaccs = $accscode + 1;
		$newok = $ok + 1;
			if ($ans4 eq 'one') { $ans5 = $ans1; }
			elsif ($ans4 eq 'two') { $ans5 = $ans2; }
			elsif ($ans4 eq 'three') { $ans5 = $ans3; }
			$ok_text = $text;
			$up_rate = int($newok/$newaccs*100);
		$new_qrate_line = "$code\,$text\,$ans1\,$ans2\,$ans3\,$ans4\,$newok\,$newaccs\,$up_rate\,\n";
		push(@NEWRATE,$new_qrate_line);
		} else {
		push(@NEWRATE,$q_lines);
		}
	}
	if (!open(DAT,">$qiz_data")) { &error(find_file); }
	print DAT @NEWRATE;
	close(DAT);
	$form_name = $FORM{'name'};
	if ($qiz_no != $end_all_quiz) { &cookie; }
##正解画面表示##
	&html_head;
	print "<table border=\"0\" align=\"center\" width=\"60%\">\n" ;
	print "<tr>\n" ;
	print "<td colspan=\"3\">";
	print "<div style=\"font:600 15pt/130%\"メイリオ\",serif\">第$qiz_no問</div></td>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td colspan=\"3\" bgcolor=\"#FFFFFF\">\n";
	print "<div style=\"font:600 12pt/140%\"メイリオ\",serif;color:#293075\">$ok_text</div>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td colspan=\"3\">";
	print "<div class=\"ans\">答え：$ans5</div>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td colspan=\"3\" align=\"right\">";
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
		if ($qiz_no == $end_all_quiz) {
		print "<td id=\"2\" colspan=\"3\">";
		print "<div class=\"g_over\">お見事全問正解です</div>\n";
		print "コメントを記入してRANKINを押してください</td>\n" ;
		print "</td>\n";
		print "</tr>\n";
		print "<tr>\n" ;
		print "<th id=\"2\" colspan=\"2\" width=\"95%\"><form action=\"$script\" method=\"$method\" target=_blank><input type=\"hidden\" name=\"call\" value=\"rank_in\">";
		print "コメント：<input type=\"text\" name=\"com\" size=\"20\"><input type=\"submit\" value=\"RANKIN\"></th>\n";
		print "<td></form></td>\n";
		print "</tr>\n";
		print "<tr>\n" ;
		print "<th width=\"50%\" align=\"left\"><a href=\"$script\">もう一度挑戦！</a>\n" ;
		print "<th colspan=\"2\" width=\"50%\" align=\"right\"><a href=\"$script?call=rank\" target=_blank>■ランキング■&gt;&gt;</a>\n" ;
		print "</tr>\n";
		} else {
		print "<td>　</td>\n";
		print "<td colspan=\"2\">";
		print "<div class=\"g_over\">お見事　正解です</div></td>\n" ;
		print "</td>\n";
		print "</tr>\n";
		print "<tr>\n" ;
		print "<td width=\"35%\"><form action=\"$script\" method=\"$method\"><input type=\"hidden\" name=\"call\" value=\"start\">";
		print "<input type=\"hidden\" name=\"name\" value=\"$form_name\"></th>\n" ;
		print "<td><input id=\"1\" type=\"submit\" value=\"次の問題\"></td>\n" ;
		print "<td width=\"5%\"></form></td>\n" ;
		print "</tr>\n";
		}
	print "</table>\n" ;

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##問題表示##
sub q_html {
	if ($FORM{'name'} eq '') { &error(no_name); }
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##管理データ登録##
	$masterdata = "$data\/$base";
	if (!open(TXT,"$masterdata")) { &error(find_file); }
	@MASTER = <TXT>;
	close(TXT);
    $e_d = @MASTER - 1;
    $over_no = $master_eno - 2;
##増えたデータ削除##
		if ($e_d > $over_no) {
		($erase_dname,$username,$qiz_no,$a_b,) = split(/\,/,$MASTER[$e_d]);
		$dfname = "$data\/$erase_dname\.dat";
		if (-e $dfname) { unlink($dfname); }
		pop(@MASTER)
		}
##新規ユーザー定義##
	$intime = time;
	$q_no = 1;
	$check = 'before';
	$user_value = "$intime\,$FORM{'name'}\,$q_no\,$check\,\n";
	unshift(@MASTER,$user_value);
##書き込み処理##
	if (!open(TXT,">$masterdata")) { &error(find_file); }
	print TXT @MASTER;
	close(TXT);
##登録問題数取得##
	$q_data = "$data\/$q_file";
	if (!open(DAT,"$q_data")) { &error(find_file); }
	@QIZ = <DAT>;
	close(DAT);
	$all_line = @QIZ - 1;
##問題取得##
	@num = (0 .. $all_line);
	srand(time ^ ($$ + ($$ << 612)));
	foreach (0 .. $all_line) {
	$qiz_no[$_] = splice(@num,rand @num,1);
	$dummy_value = "$qiz_no[$_]\,\n";
	unshift(@DUMMY,$dummy_value);
	}
##ユーザーデータ作成##
	unshift(@DUMMY,$user_value);
	$userdata = "$data\/$intime\.dat";
##書き込み処理##
	if (!open(FILE,">$userdata")) { &error(find_file); }
	print FILE @DUMMY;
	close(FILE);
	if($home_url eq '') { &error($cp); }
	$form_name = $FORM{'name'};
	&cookie;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
##Locationヘッダー処理##
	if ($lctn >= 1) {
	print "Content-type: text/html\n\n";
	print "<html><head><meta http-equiv=\"Refresh\" content=\"0;URL=$script?call=start\"></head><body></body></html>";
	} else {
	print "Location: $script?call=start\n\n";
	}
}
##問題表示##
sub q_html2 {
##COOKIE取得##
	&get_cookie;
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$intime = $COOKIE{'Intime'};
	$dataname = "$data\/$intime\.dat";
	if (!open(FILE,"$dataname")) { &error(find_file); }
	@USERC = <FILE>;
	close(FILE);
##解答数取得##
	if ($COOKIE{'Q_no'} eq '') { &error(trick); }
	($user_in,$user_name,$qiz_no,$a_b,) = split(/\,/,@USERC[0]);
	$counts = $qiz_no - 1;
##不正チェック##
	$q_no = $COOKIE{'Q_no'};
	if ($a_b eq 'after') { &error(trick); }
	if ($q_no ne $qiz_no) { &error(ptrick); }
	($uqn,) = split(/\,/,$USERC[$q_no]);
##問題取得##
	$qiz_data = "$data\/$q_file";
	if (!open(DAT,"$qiz_data")) { &error(find_file); }
	@UQIZ = <DAT>;
	close(DAT);
	$_ = $uqn;
	($codeq,$textq,$ans1q,$ans2q,$ans3q,$ans4,$okqrate,$accsrate,$ans_rate,) = split(/\,/,$UQIZ[$_]);
	$form_name = $COOKIE{'name'};
	&cookie;
##表示開始##
	&html_head;
	print "<link type=\"text/css\" rel=\"stylesheet\" href=\"/common.css\">\n" ;
	
	print "<table border=\"0\" align=\"center\" width=\"500\">\n" ;
	print "<tr>\n" ;
	print "<td colspan=\"4\">";
	print "<div style=\"font-size:2.0em \"メイリオ\",serif\">第$COOKIE{'Q_no'}問---</div></td>\n" ;
	print "<th colspan=\"2\" width=\"40%\">";

	print "</td>\n";
	print "</tr>\n";

	print "<tr>\n" ;
	print "<td colspan=\"6\" bgcolor=\"#eee\">\n";
	print "<div style=\"font-size:1.5em \"メイリオ\",serif;font-color:#000;line-height:2.5em;\">$textq</div>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td colspan=\"6\">\n";
	print "<br>\n" ;
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td width=\"5%\"><form action=\"$script\" method=\"$method\"><input type=\"hidden\" name=\"name\" value=\"$COOKIE{'name'}\">";
	print "<input type=\"hidden\" name=\"call\" value=\"ans_check\"><input type=\"hidden\" name=\"usrans\" value=\"one\"></td>\n";
	print "<th width=\"5%\"><div class=\"no\"></div></th>\n" ;
	print "<th width=\"15%\"><input id=\"1\" type=\"submit\" value=\"$ans1q\"></th>\n" ;
	print "<td colspan=\"2\"><div class=\"ans\">$ans1q</div></td>\n" ;
	print "<td width=\"5%\"></form></td>\n" ;
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td width=\"5%\"><form action=\"$script\" method=\"$method\"><input type=\"hidden\" name=\"name\" value=\"$COOKIE{'name'}\">";
	print "<input type=\"hidden\" name=\"call\" value=\"ans_check\"><input type=\"hidden\" name=\"usrans\" value=\"two\"></td>\n";
	print "<th width=\"10%\"><div class=\"no\"></div></th>\n" ;
	print "<th width=\"10%\"><input id=\"1\" type=\"submit\" value=\"$ans2q\"></th>\n" ;
	print "<td colspan=\"2\"><div class=\"ans\">$ans2q</div></td>\n" ;
	print "<td width=\"5%\"></form></td>\n" ;
	print "</tr>\n";
	print "<tr>\n" ;
	print "<td width=\"5%\"><form action=\"$script\" method=\"$method\"><input type=\"hidden\" name=\"name\" value=\"$COOKIE{'name'}\">";
	print "<input type=\"hidden\" name=\"call\" value=\"ans_check\"><input type=\"hidden\" name=\"usrans\" value=\"three\"></td>\n";
	print "<th width=\"10%\"><div class=\"no\"></div></th>\n" ;
	print "<th width=\"10%\"><input id=\"1\" type=\"submit\" value=\"$ans3q\"></th>\n" ;
	print "<td colspan=\"2\"><div class=\"ans\">$ans3q</div></td>\n" ;
	print "<td width=\"5%\"></form></td>\n" ;
	print "</tr>\n";
	print "<tr>\n" ;
	print "</table>\n" ;
	print "<hr size=1 width=90%>\n" ;
	
	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##ランク登録##
sub rank_in {
##登録内容取得##
	&get_cookie;
	$rank_name = $COOKIE{'name'};
	$rank_qno = $COOKIE{'Q_no'};
	$rank_com = $FORM{'com'};
	$rank_host = $host;
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
	$ranknos = @RANK;
##同じユーザーは書き換え##
	$flag = 1;
	foreach $r_line (@RANK) {
	($date,$code,$qnos,$user,$com,$rhost,) = split(/\,/,$r_line);
##念のため##
	$user =~ s/\r\n//g;
	$user =~ s/\r//g;
	$user =~ s/\n//g;
	$rhost =~ s/\r\n//g;
	$rhost =~ s/\r//g;
	$rhost =~ s/\n//g;
		if ($rank_name eq $user && $rank_name == "$user" && $rank_qno >= "$qnos") {
		$r_line = "$localall\,$code\,$rank_qno\,$rank_name\,$rank_com\,$rank_host\,\n";
		$flag ++;
		} elsif ($rank_name eq $user && $rank_name == "$user" && $rank_qno < "$qnos") {
		$flag ++;
		}
	push(@NEWRANK,$r_line);
	}
##新規書き込み##
	if ($flag == 1 && $ranknos >= $max_save) { pop(@NEWRANK); }
	if ($flag == 1) {
	$code_new = $max_save + 1;
	$new_line = "$localall\,$code_new\,$rank_qno\,$rank_name\,$rank_com\,$rank_host\,\n";
	push(@NEWRANK,$new_line);
	}
##データソート##
 	foreach $s_line (@NEWRANK) {
	($sdate,$scode,$sqno,$suser,$scom,$srhost,) = split(/\,/,$s_line);
	$sdate{$scode} = $sdate;
	$scode{$scode} = $scode;
	$sqno{$scode} = $sqno;
	$suser{$scode} = $suser;
	$scom{$scode} = $scom;
	$srhost{$scode} = $srhost;
	}
	$rank2 = 1;
	foreach (sort { $sqno{$b} <=> $sqno{$a} || $scode{$a} <=> $scode{$b} || $a cmp $b } keys(%scode)) {
	$sortvalue = "$sdate{$_}\,$rank2\,$sqno{$_}\,$suser{$_}\,$scom{$_}\,$srhost{$_}\,\n";
	push(@NEW,$sortvalue);
	$tmp = $sqno;
	if ($rank2 >= $max_save) { last; }
	$rank2 ++;
	$loopout = @NEWRANK;
	if ($loopout >= $max_save) { last; }
	elsif ($rank2 > $max_save) { last; }
	}
##ランク順に書き換え##
	if (!open(FILE,">$datarank")) { &error(find_file); }
	print FILE @NEW;
	close(FILE);
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
	&rank;
exit;
}
##管理画面分岐##
sub master {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##表示開始##
    &html_head;
        print <<EOHTM;
<div align="center" style="font:600 15pt/130%\"メイリオ\",serif">管理画面</div> 
<hr size=1 width=90%>
<table align="center" border="0">
<tr> 
<th id="a2" colspan="9"> 
管理パスワードを入力してボタンを押してください</th>
</tr>
<tr>
<td width=1%>
<form action=$script method=$method> 
<input type="hidden" name="call" value="new_q"></td>
<td width=32%>
<input type="password" name="pass" size="10">
<input id="a1" type="submit" value="問題追加"></td>
<td width=1%>
</form></td>
<td width=1%>
<form action=$script method=$method> 
<input type="hidden" name="call" value="erase_q"></td>
<th width=31%>
<input type="password" name="pass" size="10">
<input id="a1" type="submit" value="問題削除"></th>
<td width=1%>
</form></td>
<td width=1%>
<form action=$script method=$method> 
<input type="hidden" name="call" value="erase_r"></td>
<th width=31%>
<input type="password" name="pass" size="10">
<input id="a1" type="submit" value="ランク削除"></th>
<td width=1%>
</form></td>
</tr>
</table>
EOHTM
	if ($q_old) {
	print "<table align=\"center\" border=\"0\">\n" ;
	print "<tr> \n" ;
	print "<td width=1%>\n" ;
	print "<form action=$script method=$method> \n" ;
	print "<input type=\"hidden\" name=\"call\" value=\"v_up\"></td>\n" ;
	print "<td>\n" ;
	print "<input type=\"password\" name=\"pass\" size=\"10\">\n" ;
	print "<input id=\"1\" type=\"submit\" value=\"問題ファイルバージョンアップ\"></td>\n" ;
	print "<td width=1%>\n" ;
	print "</form></td>\n" ;
	print "</tr>\n" ;
	print "</table>\n" ;
	}
	print "<table align=\"center\" border=\"0\" width=\"60%\">\n" ;
	print "<tr>\n" ;

	print "<td align=\"right\"><a href=\"$script\">もう一度挑戦！</a></td>\n" ;
	print "</tr>\n" ;
	print "<tr>\n" ;
	print "<th colspan=\"2\">\n" ;
	
	print "</tr>\n" ;
	print "</table>\n" ;

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##問題追加画面##
sub q_write {
##パスチェック##
	if ($FORM{'call'} eq 'new_q') { if ($FORM{'pass'}  ne $password ) { &error(not_pass); } }
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##表示開始##
    &html_head;
    print "<div align=\"center\" style=\"font:600 15pt/130%\"メイリオ\",serif\">問題追加画面</div>\n";
    print <<EOHTM;
<br> 
<form action=$script method=$method> 
<input type="hidden" name="call" value="q_check"> 
<div class="kanri">ここに問題を記入してください（一行全角２５文字以内で改行してください）<br>
<textarea name=comment rows=3 cols=50></textarea><br><br>
正解を１つ不正解を２つ書き正解の前にチェックを入れる（全角１５文字以内）</div>
<div class="rank3">
答１<input name="ans4" type="radio" value="one">
<input type="text" name="ans1" size="34"><br><br>
答２<input name="ans4" type="radio" value="two">
<input type="text" name="ans2" size="34"><br><br>
答３<input name="ans4" type="radio" value="three">
<input type="text" name="ans3" size="34"><br></div>
<div class="kanri">もう一度よく確認してから問題追加を押す
<input type="submit" value="問題追加"></form></div></th>
</tr></table>
<hr size=1 width=90%>
<table border="0" width="95%">
<tr> 
<th> 
<form action=$script> 
<input type="submit" value="クイズに戻る"></form></th>

</tr>
</table>

EOHTM
	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##問題削除画面##
sub erase {
##パスチェック##
	if ($FORM{'call'} eq 'erase_q') { if ($FORM{'pass'}  ne $password ) { &error(not_pass); } }
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$qiz_data = "$data\/$q_file";
	if (!open(TEXT,"$qiz_data")) { &error(find_rfile); }
    @DATA = <TEXT>;
    close(TEXT);
##表示開始##
    &html_head;
	print "<div align=\"center\" style=\"font:600 15pt/130%\"メイリオ\",serif\">問題削除画面</div>\n";
	print "<br>\n";
	print "<div align=\"center\" class=\"kanri\">削除する問題の削除ボタンを押して下さい\n";
	print "<table align=\"center\" border=\"0\" width=\"60%\">\n";
	print "<tr>\n";
	print "<th>\n";
	print "<form action=$script>\n";
	print "<input type=\"submit\" value=\"クイズに戻る\"></form></th>\n";

	print "</tr>\n";
	print "</table>\n";
	print "<table frame=\"box\" rules=\"rows\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\" width=\"75%\">\n";

		foreach $line (@DATA) {
		($zcode,$ztext,$zans1,$zans2,$zans3,$zans4,$zok,$zaccscode,$zq_rate,) = split(/\,/,$line);
		print "<tr>\n";
		print "<td width=\"5%\">\n";
		print "<form action=$script method=$method>\n";
		print "<input type=\"hidden\" name=\"call\" value=\"erase\">\n";
		print "<input type=\"hidden\" name=\"erasenumber\" value=\"$zcode\">\n";
		print "<td width=\"10%\">\n";
		print "<input type=\"submit\" value=\"No.$zcode削除\">\n";
		print "<td id=\"2\">$ztext</td>\n";
		print "<td width=\"5%\">\n";
		print "</form>\n";
		}
	    print "</table>\n";

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##問題削除画面##
sub erase_r {
##パスチェック##
	if ($FORM{'call'} eq 'erase_r') { if ($FORM{'pass'}  ne $password ) { &error(not_pass); } }
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
##表示開始##
    &html_head;
	print "<div align=\"center\" style=\"font:600 15pt/130%\"メイリオ\",serif\">ランク削除画面</div>\n";
	print "<br>\n";
	print "<div align=\"center\" class=\"kanri\">削除するランクの削除ボタンを押して下さい\n";
	print "<table align=\"center\" border=\"0\" width=\"60%\">\n";
	print "<tr>\n";
	print "<th>\n";
	print "<form action=$script>\n";
	print "<input type=\"submit\" value=\"クイズに戻る\"></form></th>\n";

	print "</tr>\n";
	print "</table>\n";
	print "<table frame=\"box\" rules=\"rows\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\" width=\"75%\">\n";
	foreach $lines (@RANK) {
	($sdate,$scode,$sqno,$suser,$scom,$srhost,) = split(/\,/,$lines);
	print "<tr>\n";
	print "<td width=\"1%\">\n";
	print "<form action=$script method=$method>\n";
	print "<input type=\"hidden\" name=\"call\" value=\"r_erase\">\n";
	print "<input type=\"hidden\" name=\"pass\" value=\"$FORM{'pass'}\">\n";
	print "<input type=\"hidden\" name=\"erasenumber\" value=\"$scode\"></td>\n";
	print "<td width=\"8%\">\n";
	print "<input id=\"1\" type=\"submit\" value=\"削除\"></td>\n";
	print "<td width=\"1%\">\n";
	print "</form></td>\n";
	print "<th id=\"2\" width=\"15%\">$suser</th>\n";
	print "<th id=\"2\" width=\"40%\">$scom</th>\n";
	print "<th id=\"2\" width=\"35%\">$srhost</th></tr>\n";
	}
    print "</table>\n";

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##■ランキング■画面##
sub rank {
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
##表示開始##
    &html_head;
	print "<div align=\"center\" style=\"font:600 15pt/130%\"メイリオ\",serif\">RANKING</div>\n";
	print "<br>\n";
	print "<table frame=\"box\" rules=\"all\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\" width=\"75%\" bgcolor=\"#808080\">\n";
	print "<tr bgcolor=\"#000000\">\n";
	print "<th id=\"3\" width=\"10%\">順位</th>\n";
	print "<th id=\"3\" width=\"25%\">名　前</th>\n";
	print "<th id=\"3\" width=\"10%\">正解</th>\n";
	print "<th id=\"3\" width=\"35%\">コメント</th>\n";
	print "<th id=\"3\">日　時</th>\n";
	foreach $line (@RANK) {
	($sdate,$scode,$sqno,$suser,$scom,$srhost,) = split(/\,/,$line);
	print "<tr bgcolor=\"#FFFFFF\">\n";
	print "<th id=\"2\">$scode位</th>\n";
	print "<th id=\"2\">$suser</th>\n";
	print "<td id=\"2\" align=\"right\">$sqno問</td>\n";
	print "<th id=\"2\" align=\"right\">$scom</th>\n";
	print "<td id=\"2\" align=\"right\">$sdate</td></tr>\n";
	}
	print "<table align=\"center\" border=\"0\" width=\"60%\">\n" ;

	print "<tr>\n" ;
	print "<th colspan=\"2\">\n" ;

	print "</tr>\n" ;
		print "<tr>\n" ;

	print "</tr>\n";
	print "</table>\n" ;

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##トップ画面##
sub html {
##COOKIE取得##
    &get_cookie;
##ロック開始##
	if ($symlink == 1) { &soft_lock; }
##データオープン##
	$datarank = "$data\/$r_file";
	if (!open(FILE,"$datarank")) { &error(find_file); }
	@RANK = <FILE>;
	close(FILE);
##問題取得##
	$qiz_data = "$data\/$q_file";
	if (!open(DAT,"$qiz_data")) { &error(find_file); }
	@QIZ = <DAT>;
	close(DAT);
	$all_q = @QIZ;
##正解率計算##
		foreach $line (@QIZ) {
		($code,$text,$ans1,$ans2,$ans3,$ans4,$ok,$accscode,$q_rate,) = split(/\,/,$line);
		$chrg_all +=  $accscode;
		$ok_all +=  $ok;
		}
##トップ画面##
	&html_head;
	print "<br>\n";
	print "<br>\n";
	print "<table align=\"center\" frame=\"box\" rules=\"cols\" bgcolor=\"#397139\">\n" ;
	print "<tr>\n" ;
	print "<td colspan=\"3\" bgcolor=\"#FFFFFF\">\n" ;
	print "<li id=\"1\">問題は全て三者択一です。\n" ;
	print "<li id=\"1\">正解だと思う答えのボタンを押してください\n" ;
	print "<li id=\"1\">制限時間は";
		if ($limitflag == 1) {
		print "１問$t_limit秒です\n";
		print "<li id=\"1\">制限時間を超えたり答えを間違えたらGAME OVERです。\n" ;
		} else {
		print "ありません\n";
		print "<li id=\"1\">答えを間違えたらGAME OVERです。\n" ;
		}
	
	print "<li id=\"1\">一問も間違えずに何問まで連続正解できるかを競います。\n" ;
	print "</td>\n" ;
	print "<td valign=\"top\" width=\"20%\" bgcolor=\"#FFFFFF\">\n" ;
		$endrank = 2;
		$enddata = @RANK - 1;
		if ($endrank > $enddata) { $endrank = $enddata; }
		foreach (0 .. $endrank) {
		($date,$code,$qno,$user,$com,$ahost,) = split(/\,/,$RANK[$_]);
		print "<em style=\"font:normal 600 9pt/120%;color:#FF0000\">第$code位</em>";
		print "<em style=\"font:normal 600 9pt/120%\">$qno問</em>\n";
		print "<br><em style=\"font:normal 600 10pt/120%\">$userさん<br>\n";
		print "<br>\n";
		}
	print "</td>\n" ;
	print "</tr>\n" ;
	print "<tr>\n" ;
	print "<td width=\"5%\">\n" ;
	print "<form action=$script method=$method>\n" ;
	print "<input type=\"hidden\" name=\"call\" value=\"new_qiz\">\n" ;
	print "<input type=\"hidden\" name=\"name\" value=$newuser>\n" ;
	print "<input type=\"hidden\" name=\"q_no\" value=1>\n" ;
	print "</td>\n" ;
	print "<th id=\"1\" colspan=\"2\" width=\"70%\">ニックネーム：\n" ;
	print "<input type=\"text\" name=\"name\" size=\"30\" value=\"$COOKIE{'name'}\">" ;
	print "<input type=\"submit\" value=\"クイズに挑戦\">\n" ;
	print "</th>\n" ;
	print "<td rowspan=\"2\"></form></td>\n" ;
	print "</tr>\n" ;
	print "<tr>\n" ;
	print "<td id=\"2\" colspan=\"3\" bgcolor=\"#FFFFFF\">" ;
	print "現在の総問題数：$all_q問\n" ;
	print "</td>\n" ;
	print "</tr>\n" ;
	print "</table>\n" ;
	print "<hr size=1 width=90%>\n" ;
	print "<table align=\"center\" border=\"0\" width=\"60%\">\n" ;
	print "<tr>\n" ;
	print "<th width=\"33%\"></th>\n" ;
	print "<td align=\"right\"><a href=\"$script?call=rank\" target=_blank>■ランキング■</a></td>\n" ;
	print "</tr>\n" ;
	print "</table>\n" ;

	&foot;
##ロックファイル削除##
	if (-e $lockfile) { unlink($lockfile); }
exit;
}
##ヘッダー##
sub html_head {
	print "Content-type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" ;
	print "<html><head><title>「厳選米ドットコム」自然農法にこだわった米作農家たち</title>\n" ;
		if ($limitflag == 1) {
		if ($FORM{'call'} eq 'new_qiz' || $FORM{'call'} eq 'start') { print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"$t_limit; URL=$script?call=ans_check&name=$COOKIE{'name'}&usrans=over\">\n" ; }
		}
	print "<style type=text/css>\n" ;
	print "<!--\n" ;
	print ".error { font:600 15pt/130%;color:#FF518A }\n" ;
	print ".title { font:800 25px/120%\"メイリオ\",serif;color:#000000 }\n" ;
	print ".no { font:11pt/180%\"メイリオ\",serif }\n" ;
	print ".ans { font:600 11pt/220%\"メイリオ\",serif;color:#313667 }\n" ;
	print "INPUT#1 { background-color:$btn_b;font:9pt\"メイリオ\",serif;color:$btn_c }\n" ;
	print ".g_over { font:700 18pt/130%\"メイリオ\",serif;color:#FF1678 }\n" ;
	print "TD#1,TH#1 { font:600 13pt/170%\"Times New Roman\",serif;color:#FFFFFF }\n" ;
	print "TD#2,TH#2,LI#1 { font:10pt/150%\"メイリオ\",serif }\n" ;
	print "TD#3,TH#3 { font:10pt/150%\"メイリオ\",serif;color:#FFFFFF }\n" ;
	print "OL#1,UL#1 { font:600 13pt/170%\"メイリオ\",serif;color:#AE0008 }\n" ;
	print ".kanri { font-size:14px;color:#003298;font-weight:600 }\n" ;
	print ".rank { font-size:16px;color:#7D4084;font-weight:600 }\n" ;
	print ".rank2 { font-size:15px;color:#FF0000;font-weight:600 }\n" ;
	print ".rank3 { font-size:14px;color:#7D4084;font-weight:600 }\n" ;
	print ".correct { font-size:15px;color:#4C9BD8;font-weight:600 }\n" ;
	print ".link { font-size:15px;color:#D56AD6;font-weight:600 }\n" ;
	print ".ok_ans { font-size:25px;color:#4C9BD8;font-weight:600 }\n" ;
	print ".over_ans { font-size:40px;color:#FF0000;font-weight:800 }\n" ;
	print ".e_top { font-size:50px;color:#DE003A;font-weight:900 }\n" ;
	print ".e_sec { font-size:40px;color:#0088DE;font-weight:700 }\n" ;
	print ".e_msg { font-size:25px;color:#39366C;font-weight:600 }\n" ;
	print ".erase { font-size:14px;color:#09258F }\n" ;
	print "-->\n" ;
	print "</style>\n" ;
	print <<"EOM";

<META http-equiv="Content-Style-Type" content="text/css">
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<LINK Type="text/css" Rel="stylesheet" Href="../../common.css">
<BODY bgColor=#ffffff>
<CENTER>
<TABLE width="646" cellpadding="0" cellspacing="0" height="100%">
  <TBODY>
<TR BGCOLOR="FFFFFF">
<TD>

EOM
	print "</head>\n" ;
print <<"EOM";	
	<CENTER>
<TABLE height="100%" width="646" 
style="border-top:0pt solid #6b926b;
	border-left:0pt solid #6b926b;
	background-color:#ffffff;
	"><TR><TD ALIGN=CENTER>
EOM

	print "<div class=\"title\" align=\"center\">$q_title</div>\n" ;
}

#----------------------------------
#フッタ表示
#----------------------------------
sub foot{
	print <<"EOM";
      </TD>
    </TR>
  </TBODY>
</TABLE>
</CENTER>
</BODY>
</html>
EOM
	exit;
}

##FORMからのデータを連想配列へ##
sub decode {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
	read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
	} else { $formdata = $ENV{'QUERY_STRING'}; }
	@pairs = split(/&/,$formdata);
		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/</&lt;/g;
		$value =~ s/>/&gt;/g;
		$value =~ s/\n//g;
		$value =~ s/\ //g;
		&jcode'convert(*name,'sjis');
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
		}
    $ok_ans = $FORM{'correctans'};
	$cp = 'no_cright';
}
##ローカルタイムの取得##
sub get_localtime {
	$ENV{'TZ'} = "JST-9";
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
	if($home_url eq '') { &error(cp); }
	$year = $year - 100;
	$mon++;
	if ($year < 10) { $year = "\'0$year"; }
	if ($mon  < 10) { $mon  = "0$mon";  }
	if ($mday < 10) { $mday = "0$mday"; }
	if ($hour < 10) { $hour = "0$hour"; }
	if ($min  < 10) { $min  = "0$min";  }
	if ($sec  < 10) { $sec  = "0$sec";  }
	$dweek = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
	$localall = "$year/$mon/$mday/$hour\:$min";
}
##host取得##
sub get_host {
	$host  = $ENV{'REMOTE_HOST'};
	$addr  = $ENV{'REMOTE_ADDR'};
	if ($host eq "" || $host eq "$addr") {
		$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
	}
	if ($host eq "") { $host = $addr; }
	foreach  (@ipdenil) {
	if ($host =~ /$_/i) { &error(not_acsece); }
	if ($addr =~ /$_/i) { &error(not_acsece); }
	}

}
##COOKIE書込##
sub cookie {
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,
	$wdayg,$ydayg,$isdstg) = gmtime(time + 60*24*60*60);
	$yearg += 1900;
	if ($secg  < 10) { $secg  = "0$secg";  }
	if ($ming  < 10) { $ming  = "0$ming";  }
	if ($hourg < 10) { $hourg = "0$hourg"; }
	if ($mdayg < 10) { $mdayg = "0$mdayg"; }
	$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
	$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
	$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
	$cook= "name\:$form_name\,Intime\:$intime\,Q_no\:$q_no\,Ans4\:$ans4";
	print "Set-Cookie: $ckname=$cook; expires=$date_gmt\n";
}
##COOKIE取得##
sub get_cookie {
	@pairs = split(/\;/,$ENV{'HTTP_COOKIE'});
	foreach $pair (@pairs) {
		local($name, $value) = split(/\=/, $pair);
		$name =~ s/ //g;
		$DUMMY{$name} = $value;
	}
	@pairs = split(/,/,$DUMMY{$ckname});
	foreach $pair (@pairs) {
		local($name, $value) = split(/\:/, $pair);
		$COOKIE{$name} = $value;
	}
}
##著作権表示（削除禁止)##
sub copyright {
	print "<div align=\"center\"><a href=$home_url>--\(C\)$ver--</a></div>\n";
}
##ロックファイル作成##
sub soft_lock {
	$lockfile = './zeroq.lock';
	$try=5;
	while(-f "$lockfile"){
		if(--$try<=0) { &error(bisy); }
		sleep(1);
	}
	if(!open(FILE,">$lockfile")) { &error(bisy); }
	close(FILE);
}
##エラー処理##
sub error {
	if (-e $lockfile) { unlink($lockfile); }
	$error = $_[0];
##内容分岐##
	if ($error eq 'find_file') { $errmsg = 'データ用ファイルがないか書き込み削除が出来ません'; }
	elsif ($error eq 'trick') { $errmsg = '解答が不正か　クッキーが有効ではありません'; }
	elsif ($error eq 'find_rfile') { $errmsg = '■ランキング■用ファイルがないか書き込み削除が出来ません'; }
	elsif ($error eq 'find_ofile') { $errmsg = '過去の問題ファイルがないか書き込み削除が出来ません'; }
	elsif ($error eq 'bisy') { $errmsg = '只今ロック中です。'; }
	elsif ($error eq 'no_name') { $errmsg = '名前が入力されていません'; }
	elsif ($error eq 'no_comment') { $errmsg = '問題がありません'; }
	elsif ($error eq 'ans') { $errmsg = '答が足りません'; }
	elsif ($error eq 'ans4') { $errmsg = '正解がありません'; }
	elsif ($error eq 'not_acsece') { $errmsg = 'アクセスが許可されていません'; }
	elsif ($error eq 'not_pass') { $errmsg = 'パスワード違います。'; }
	elsif ($error eq 'cp') { $errmsg = '著作権削除は違法です。'; }
	else { $errmsg = '原因不明です　もう一度試してみてください'; }
	&html_head;
	print "<div align=\"center\" class=\"title\">$title</div><br><br>\n";
	print "<div align=\"center\" class=\"error\">An error was outputted<br>\n";
   	print "（エラーが出ました）</div>\n";
	print "<div align=\"center\" class=\"error\">As for the expected cause<br>\n";
	print "（原因は以下が予\想されます）</div>\n";
	print "<div align=\"center\" class=\"error\">$errmsg</div>\n";
		&foot;
exit;
}

