#!/usr/local/bin/perl
$version='1.32';
#------------------------------------------------
#ファイル名：quiz.cgi
#
#説明：クイズを出題するページです。
#------------------------------------------------



#----------------------------はじめにお読みください------------------------------
#
#●このクイズのファイル構成●
#
#quiz.cgi		クイズのスクリプト
#index.cgi		クイズのトップページ
#quiz_op.cgi	管理人専用。クイズシステムの運営管理を行う
#highscore.cgi	クイズの高成績者表示スクリプト
#function.cgi	サブルーチン集です。他のcgiファイルから呼び出す形で利用します。
#jcode.pl		日本語変換プログラム(内部から呼び出すサブルーチン)
#a.gif			成績者グラフに使用される画像です。
#b.gif			成績者グラフに使用される画像です。
#
#
#●クイズを動作させる手順●
#１．クイズを作成するディレクトリを作成する。(例)quizディレクトリ
#２．作成したディレクトリの属性(パーミッション)を『777』にする。(rwxrwxrwxのこと)
#３．作成したディレクトリに以下のファイルをアップロードし
#    パーミッションを744(rwxr--r--)に設定する。
#	quiz.cgi		(744)
#	index.cgi		(744)
#	quiz_op.cgi		(744)
#	highscore.cgi	(744)
#	function.cgi	(744)
#	jcode.pl		(744)
#	a.gif
#	b.gif
#４．quiz_op.cgiにアクセスし、パスワードを登録後、管理人室に入室する。
#	アクセスできない場合は、各ファイルのパーミッションを再確認してください。
#	それでも駄目な場合、各cgiファイルの１行目にある、
#	『#! /usr/local/bin/perl』を、サーバー毎の設定にあわせてください。
#５．管理人室において、『システム設定編集』『新ジャンル登録』を
#	順に設定する。
#６．ジャンル登録が行われると、管理人室トップに
#	ジャンル別コマンドが現れるので、
#	適宜、問題を追加編集する。
#７．最後に『ジャンルの編集』より、ジャンルを公開する
#
#以上の設定で、動作可能となります
#--------------------------------------------------------------------------------



require 'jcode.pl';
require 'function.cgi';
&main;



#************************************************
# ヘッダ表示処理
#
#_HTML_と_HTML_とのあいだに
#クイズのページのヘッダー部分のHTMLを記入してください。
#普通のHTML表記でかまいません。
#************************************************
sub header_html {
	local($sub)=@_;
	local($sub_header);
	$sub_header=$SYS{sub_header};
	if($sub ne ''){$sub_title = "<br>$sub";$title3 = "- $sub -$mode_name";}
	else{$sub_title = "";$title3="-$mode_name";}
	if($back_color eq ''){$back_color="#bbbbee";}
	if($wall_paper ne ''){$wall_paper = " background=\"$wall_paper\""}
	if($mode_name ne ''){$mode_n="$mode_name";}
	if($FORM{s} ne ''){$mode_n="";}
	if($text_color ne ''){$text=" text=\"$text_color\"";}
	if($link_color ne ''){$link=" link=\"$link_color\"";}
	if($vlink_color ne ''){$vlink=" vlink=\"$vlink_color\"";}
	$sub_header=~ s/\$title/$SYS{main_title}/g;
	$sub_header=~ s/\$sub_title/$sub_title/g;
	$sub_header=~ s/\$genre/$title/g;
	$sub_header=~ s/\$index/$index_cgi/g;
	$sub_header=~ s/\$challenge/$quiz_cgi?d=$FORM{'d'}&m=$FORM{'m'}/g;
	$sub_header=~ s/\$high/$highscore_cgi?d=$FORM{'d'}&m=$FORM{'m'}/g;
	$sub_header=~ s/\$graph/$quiz_cgi?d=$FORM{'d'}&g=1&m=$FORM{'m'}/g;
	$sub_header=~ s/\$score/$quiz_cgi?d=$FORM{'d'}&m=$FORM{'m'}&s=1/g;
	$sub_header=~ s/\$mode/$mode_n/g;

	
	$header_html= <<"_HTML_";
<html><head>
<STYLE Type="text/css">$style</STYLE>
<title>$title$title3</title><link rel="stylesheet" href="../../common/css_menu_l.css" type="text/css">
<link rel="stylesheet" href="../../common/css_basic.css" type="text/css">
<Script Language="JavaScript"src="../../common/menu_l.js">
</Script></head><BODY bgcolor="$back_color"$wall_paper$text$link$vlink onLoad="preLoadJi71()"><SPAN id="Fr0Ji71" class="class0Ji71"> <SPAN id="Ma0Ji71" class="class0Ji71"> 
<div style="font-size:1pt"><IMG SRC="../../common/spacerM.gif" NAME="ga1" width="10"><A href="../../cloud/cloud_index.html"target="_top"style="color:#ffffff" onMouseOver='gaChaRi12("ga1",1)' onMouseOut='gaChaRi12("ga1",2)'><img src="../../common/menu_cloud.gif"title="Cloud &#13; 雲の種類"style="border-color:#ffffff"></a><img src="../../common/spacerV.gif"NAME="ga2"width="10"> 
  <A HREF="../../met/met_index.html"target="_top"style="color:#ffffff"onMouseOver='gaChaRi12("ga2",1)' onMouseOut='gaChaRi12("ga2",0)'><img src="../../common/menu_met.gif"title="Meteorology &#13; 気象現象の仕組み"style="border-color:#ffffff"></a><img src="../../common/spacerV.gif"NAME="ga3"width="10"> 
  <A HREF="../../weather/weather_index.html"target="_top"style="color:#ffffff"onMouseOver='gaChaRi12("ga3",1)' onMouseOut='gaChaRi12("ga3",0)'><img src="../../common/menu_weather.gif"title="Weather &#13; 天気\予\報と天気のことわざ"style="border-color:#ffffff"></A><img src="../../common/spacerV.gif"NAME="ga4"width="10"> 
  <A HREF="../../common/data_center.html"target="_top"style="color:#ffffff"onMouseOver='gaChaRi12("ga4",1)' onMouseOut='gaChaRi12("ga4",0)'><img src="../../common/menu_data.gif"title="Data Center &#13; 天気に関するデータベース"style="border-color:#ffffff"></A><img src="../../common/spacerV.gif"NAME="ga5"width="10"> 
  <A HREF="../../common/activities.html"target="_top"style="color:#ffffff"onMouseOver='gaChaRi12("ga5",1)' onMouseOut='gaChaRi12("ga5",0)'><img src="../../common/menu_activities.gif"title="Activities &#13; 誰でも参加できます"style="border-color:#ffffff"></A><img src="../../common/spacerV.gif"NAME="ga6"width="10"> 
  <A HREF="../../common/about.html"target="_top"style="color:#ffffff"onMouseOver='gaChaRi12("ga6",1)' onMouseOut='gaChaRi12("ga6",0)'><img src="../../common/menu_info.gif"title="Information &#13; 参考文献・staff ... etc"style="border-color:#ffffff"></A> 
</div>
</SPAN> <SPAN id="Ta0Ji71" class="class0Ji71"> 
<div align="left"><A HREF="../../frontindex.html"target="_top"onmouseover="JavaScript:scrollJi71(0)"><img src="../../common/menu.gif"style="border:1pt #ffffff"></a>
</div>
</SPAN> </SPAN> <br><br><br>
$sub_header
_HTML_
}


#************************************************
# 初期画面のメッセージ
#
#_HTML_と_HTML_とのあいだに
#クイズのページのヘッダー部分のHTMLを記入してください。
#普通のHTML表記でかまいません。
#全角スペースを入力するとエラーが発生するので使用しないでください。
#変数$quiz_maxには総問題数が入っています。
#変数$lose_maxには、最大許容誤答数が入っています。
#変数$all_hstには総挑戦者数が入っています。
#変数$highには、最高成績者名がはいります。
#************************************************
sub startmes{
	########挑戦者数取得########
	open(DB,"$FORM{'d'}/$scorehst_cgi\.cgi");@new=<DB>;close(DB);
	$all_hst=0;
	foreach(@new){$all_hst=$all_hst+$_;}

	########ハイスコア名取得########
	open(DB,"$FORM{'d'}/$high_cgi\.cgi");@lines = <DB>;close(DB);
	if($lines[0] =~ /^date/){($day,$high,$name,$host) = split(/\t/,$lines[1]);}
	else{($day,$high,$name,$host) = split(/\t/,$lines[0]);}
	if($high ne ""){$high="最高成績は$nameさんの$high問正解。<br>"}
	$start_comment=~ s/\$title/$title/g;
	$start_comment=~ s/\$quiz_max/$quiz_max/g;
	$start_comment=~ s/\$play_max/$play_max/g;
	$start_comment=~ s/\$lose_max/$lose_max/g;
	$start_comment=~ s/\$challenge/$all_hst/g;
	$start_comment=~ s/\$high/$high_border/g;
	if($time_limit>0){$start_comment=~ s/\$time/$time_limit秒/g;}
	else{$start_comment=~ s/\$time/無し/g;}
	$start_comment=~ s/\$champion/$high/g;

	$start_html=<<"_HTML_";
<br><TABLE $tbl_opt bgcolor="$error_com_color"><TR>
<TD nowrap>
<small>$start_comment</small>
</TD></TR></TABLE><br>
_HTML_
}

#************************************************
# クイズ終了時メッセージ
#************************************************
sub end_mes {
	local($mes,$per,$end_mes);
	$quiz_num=$quiz_num+1;
	$per=&point($LOG{win}*100/$quiz_num,1);
	open(DB,"$FORM{'d'}/$mes_cgi\.cgi");@lines= <DB>;close(DB);
	foreach $line(@lines){
		local($mes_per,$mes_word,$mod1,$mod2)=split(/\t/,$line);
		if($mes_per eq 'top'){if($per == 100){$mes="$mes_word";}last;}
		if($FORM{'m'} ne 2){
			if($mes_per eq 'top1'){if($per == 100){$mes="$mes_word";}last;}
			if(($per < $mes_per)&&($mod1 ne '0')){$mes="$mes_word";last;}
		}else{
			if($mes_per eq 'top2'){if($per == 100){$mes="$mes_word";}last;}
			if(($per < $mes_per)&&($mod2 ne '0')){$mes="$mes_word";last;}
		}
	}
	local($time1,$time2,$col);
	$col=5;
	if($LOG{'time'} ne ''){
		$time1="<td nowrap>TIME</td>";
		$time2="<td nowrap>$LOG{min}分$LOG{sec}秒</td>";
		$col++;
	}
	if($mes ne ''){$end_mes="<tr><td nowrap colspan=$col bgcolor=\"$fin_com_color\"><b>$walign1$mes$walign2</b></td></tr>"}

	$main_html.=<<"_HTML_";
<hr>
<b><span>■最終成績■</span></b>
<table $tbl_opt bgcolor="$fin_menu_color">
$end_mes
<td nowrap>問題数</td>
<td nowrap>正解数</td>
<td nowrap>正解率</td>
<td nowrap>偏差値</td>
<td nowrap>順　位</td>
$time1</tr>
<td nowrap>$quiz_num問</td>
<td nowrap>$LOG{win}問</td>
<td nowrap>$per％</td>
<td nowrap>$hensa</td>
<td nowrap>$better位</td>
$time2</tr>
_HTML_
	if(($LOG{win}*100/$quiz_num>=$high_border)&&($day_limit ne '0')&&($num_limit ne '0')){
		$add_ch=&add_check("$quiz_id"."$LOG{win}");
		$FORM{EntryName}=$LOG{name};
		&form_to_form2(EntryName);
		if($rec_com eq 1){$rec = "<tr><td>コメント：</td><td><input type=text name=com size=30 maxlength=$max_com></td></tr>";}
		$main_html.=<<"_HTML_";
<tr><td nowrap colspan=$col bgcolor='$error_com_color'><br><center>●おめでとうございます。正解率が$high_border％を越えました。●<br>
_HTML_
		if(&rank_in){
			$main_html.=<<"_HTML_";
<b>$_highリストに登録</b>ができます。
<form method="$method" action="$highscore_cgi">
<table border=0><tr><td>
名前：</td><td><input type=text name="EntryName" value="$FORM2{EntryName}" size=30 maxlength=$max_en></td></tr>
$rec
</td></tr></table>
<br><input type=hidden name="Score" value="$LOG{win}">
<input type=hidden name="id" value="$quiz_id">
<input type=hidden name="d" value="$FORM{'d'}">
<input type=hidden name="m" value="$FORM{'m'}">
<input type=hidden name="check" value="$add_ch">
<input type=submit value="登録"></form></center></td></tr></table></ul>
_HTML_
		}else{$main_html.="<br>残念ながら$_highリストにランクインできませんでした。<br><br>";}
	}
$main_html.="</table><br><br>";
$main_i_html.=<<"_HTML_";
GAME OVER<br><br>
■最終成績■<br>
問題数:$quiz_num問<br>
正解数:$LOG{win}問<br>
正解率:$per％<br>
偏差値:$hensa<br>
順　位:$better位<br>

_HTML_

}














########################以下の部分はプログラム本体です。変更する場合は慎重におねがいします。#############################



















#************************************************
# メインプログラム
#************************************************
sub main{
	&setup;		#初期設定
	if(&ch_lock){&busy_html;}
	$quiz_num=0;
	srand();
	$LOG{seed}=int(rand(1000)*100+1);
	&header_html();
	&footer_html;
	&get_cookie;
	if(!&buf_read){&html;}
	else{print "Location:$index_cgi\n\n";exit;}
	&set_cookie;
	if($imode){&output_i;}
	else{&output;}
}


#************************************************
# メイン画面表示
#************************************************
sub html{
	if(&sys_read){&error(2);return ;}
	if(&buf_check){return ;}
	if(&genre_read){&error(3);return ;}
	if($mente eq '0'){$back_color=$back_color1;$wall_paper=$wall;&header_html();&error("このクイズは現在$_underconstです。またのおこしをお待ちしています。");return;}
	&header_html();
	
	if(($FORM{'a'} ne'')||($FORM{'radio'} ne'')||($FORM{'bundle'} ne '')){
		if(&play_log_read){return;}
	}else{
		if($mondai_cgi eq '.'){foreach(@all_dir){push(@genre_list,$_);$genre_num{$_}=-1;}}
		elsif($mondai_cgi =~ /\//){
			@mondai_dat=split(/\t/,$mondai_cgi);
			foreach(@mondai_dat){
				local($dir,$val)=split(/\//,$_);
				push(@genre_list,$dir);
				if($val eq 'all'){$val ='-1';}
				$genre_num{$dir}=$val;
			}
		}
		else{push(@genre_list,$FORM{'d'});$genre_num{$FORM{'d'}}=$quiz_max;}	#クイズ開始時、問題数maxの意味
	}
	&quiz_read_all;		#使用ジャンルのクイズ読み込み
	&max_set;
	if($FORM{'g'} ne ""){										#成績分布表示
		$back_color=$back_color1;
		$wall_paper=$wall;
		&header_html($_glaph);
		&show_graph;
	}elsif($FORM{'s'} ne ""){										#成績分布表示
		$back_color=$back_color1;
		$wall_paper=$wall;
		&header_html($_score);
		&rec_html();
	}elsif(($FORM{'a'} ne '')||($FORM{'radio'} ne '')){			#クイズ挑戦中
		$quiz_index=&mondai_num($quiz_max-1);
		if(&ans_check){return;}
		&header_html;
		if($quiz_reload ne 1){if($anstype[$quiz_index] > 0){$LOG{old} = $quiz_text;}else{$LOG{old} = $quiz_select;}}
		if(&play_log_write){return;}
		if(&ans_html){return;}
		if(&continue_check eq 0){&end_html;return;}
		&score_html;
		&main_html;
	}elsif($FORM{'bundle'} ne ''){								#一括クイズ挑戦中
		
		$back_color=$back_color1;
		$wall_paper=$wall;
		if($quiz_reload ne 1){$LOG{old}='';}
		for($quiz_num=0;$quiz_num<$play_max;$quiz_num++){
			$quiz_index=&mondai_num($quiz_max-1);
			if($anstype[$quiz_index] > 0){$quiz_select='';$quiz_text=$FORM{"a_$quiz_num"};}
			else{$quiz_select=$FORM{"a_$quiz_num"};$quiz_text='';}
			if($quiz_select eq ''){$quiz_select=0;}
			if($quiz_reload ne 1){if($anstype[$quiz_index] > 0){$LOG{old} .= "$quiz_text,";}else{$LOG{old} .= "$quiz_select,";}}
			if(&ans_check){return;}
			if(&ans_html){return;}
			if($quiz_reload ne 1){
				if($win){$COOKIE{"W$FORM{'m'}$FORM{'d'}"}++;}
				else{$COOKIE{"L$FORM{'m'}$FORM{'d'}"}++;}
			}
			if($LOG{num}<1){
				$LOG{win}=$LOG{win}+$win;
				$LOG{lose}=$LOG{lose}+$lose;
			}
		}$quiz_num--;
		if($quiz_reload ne 1){
			if($COOKIE{"W$FORM{'m'}$FORM{'d'}"}>0){
				if($COOKIE{"I$FORM{'m'}$FORM{'d'}"} == 0){$COOKIE{"I$FORM{'m'}$FORM{'d'}"}=$now - $LOG{lap}}
				else{$COOKIE{"I$FORM{'m'}$FORM{'d'}"}=($COOKIE{"I$FORM{'m'}$FORM{'d'}"}*($COOKIE{"W$FORM{'m'}$FORM{'d'}"}-1)+ $now - $LOG{lap})/$COOKIE{"W$FORM{'m'}$FORM{'d'}"};}
			}
		}

		&header_html;
		if($LOG{num}<1){$LOG{num}=$quiz_num;}
		
		if(&play_log_write){return;}
		&end_html;
	}else{														#新規挑戦
		$COOKIE{"S$FORM{'m'}$FORM{'d'}"}++;
		$back_color=$back_color1;
		$wall_paper=$wall;
		&header_html();
		if(&startup){return;}
		if(!&main_html){&startmes;}
	}
}
#************************************************
# MAX最適化関数
#************************************************
sub max_set{
	if($quiz_max eq ''){$quiz_max = $#mondai+1;}
	elsif($quiz_max > $#mondai+1){$quiz_max = $#mondai+1;}
	if($play_max eq ''){$play_max = $quiz_max;}
	elsif($play_max > $quiz_max){$play_max = $quiz_max;}
	if($lose_max eq ''){$lose_max = $play_max;}
	elsif($lose_max > $play_max){$lose_max = $play_max;}
}
#************************************************
# クイズ開始処理
#************************************************
sub startup{
	local($count,$file,$file_t,@log_num,@log_num2,$log_counter);
	open(DB,"$count_file\.cgi");@log_num=<DB>;close(DB);
	$log_counter=$log_num[0]+0;
	@log_num=();
	if($log_counter >= $SYS{max_player}){$log_counter=0;}
	elsif($log_counter < 0){$log_counter=0;}
	for($i=1;$i<=$SYS{max_player};$i++){@log_num[$i]=$i;}
	push(@log_num2,(@log_num[$log_counter+1..$SYS{max_player}],@log_num[1..$log_counter]));
	
	
	########ログ番号取得#########
	$flag=0;
	foreach $i(@log_num2){
		if(!(-f "$data_dir/$header$i\.cgi")){
			$quiz_id=$i;
			$file="$data_dir/$header$quiz_id\.cgi";
			last;
		}
		if(($SYS{limit}/24/60 < (-M "$data_dir/$header$i\.cgi"))&& !(-t "$data_dir/$header$i\.cgi")){
			$quiz_id=$i;
			$file_t = -M "$data_dir/$header$quiz_id\.cgi";
			$file="$data_dir/$header$quiz_id\.cgi";
			last;
		}
	}
	
	if ($file eq ''){
		&error("<br>現在同時プレイ人数限度$SYS{max_player}人がプレイ中です。<br>しばらくしてからお越しください。");return 1;
	}

	########ログファイル作成保存########
	if(&ch_dir_exist('ディレクトリ名',$data_dir) > 0){return 1;}
	local(@new);
	if($FORM{m} eq ''){$FORM{m}=1;}
	push(@new,join("\t",0,0,0,"$LOG{seed}",0,"",$COOKIE{N},$now,$now,0,$FORM{d},$FORM{m},$COOKIE{"S$FORM{'m'}$FORM{'d'}"},$COOKIE{N},$bundle,"\n"));
	$LOG{name}=$COOKIE{N};
	$dum1=0;$dum2=0;
	foreach(@genre_list){
		$dum2=$quiz_max_dir{$_};
		for($i=$dum1;$i<$dum2;$i++){$dir_list[$i]=$_;}
		push(@new,join("\t",$_,$dum2-$dum1,"\n"));
		$dum1=$dum2;
	}
	if(&write_file("$data_dir/$header$quiz_id\.cgi",@new)){&error(1);}
	if(&write_file("$count_file\.cgi",$quiz_id)){&error(1);}
}


#************************************************
# 正解数表示処理
#************************************************
sub ans_html{
	if($random eq '0'){$quiz_index=$quiz_num;}
	else{$quiz_index=&mondai_num($quiz_max-1);}
	@dumy2=&semirand(5);
	$play_index=$dumy2[$quiz_select-1];		#プレイヤーが選択した選択枝
	$quiz_head_num=$quiz_index-$quiz_num_dir{$dir_list[$quiz_index]};
	if (!open(DB,"$dir_list[$quiz_index]/$quiz_header$quiz_head_num\.cgi")) {@qu=(0,0,0,0,0);$play_num =0;$play_win =0;$QU{ave}=0;$QU{win}=0;}
	else{
		@new= <DB>;
		close(DB);
		$new[0]=~ s/\n//g;
		$new[1]=~ s/\n//g;
		@qu = split(/\t/, $new[0]);
		($QU{ave},$QU{win}) = split(/\t/,$new[1]);
		if($QU{ave} eq ''){$QU{ave}='0';}
		if($QU{win}eq ''){$QU{win}='0';}
		$play_num=0;foreach $qu(@qu){$play_num=$play_num+$qu;}
		$play_win=$qu[0];
		if($play_num eq ""){$play_num =0;}
		if($play_win eq ""){$play_win =0;}
	}
	####同一選択枝リロードでない場合#####
	if($quiz_reload ne 1){
		$qu[$play_index]=$qu[$play_index]+1;
		$play_num=$play_num+1;
		$play_win=$play_win+$win;
		$value=join("\t",@qu);
		if($win eq 1){
			$QU{win}++;
			if($LOG{bundle} < 1){$QU{ave}=($QU{ave}*($QU{win}-1)+ $now - $LOG{lap})/$QU{win};}
			elsif($play_max > 0){$QU{ave}=($QU{ave}*($QU{win}-1)+ ($now - $LOG{lap})/$play_max)/$QU{win};}
		}
		$value.="\n$QU{ave}\t$QU{win}\n";
		if(&ch_dir_exist('ディレクトリ名',$dir_list[$quiz_index]) > 0){return 1;}
		$quiz_head_num=$quiz_index-$quiz_num_dir{$dir_list[$quiz_index]};
		if(&write_file("$dir_list[$quiz_index]/$quiz_header$quiz_head_num\.cgi",$value)){
			&error("クイズ成績ログに書き込みができませんでした。<br>管理者にお問い合わせ下さい。");
			return 1;}
	}
	@dumy_ans2=($ans[$quiz_index],$misans1[$quiz_index],$misans2[$quiz_index],$misans3[$quiz_index],$misans4[$quiz_index]);
	@dumy_com2=("",$misanscom1[$quiz_index],$misanscom2[$quiz_index],$misanscom3[$quiz_index],$misanscom4[$quiz_index]);
	@dumy2=&semirand(5);
	
	$i=0;
	foreach(@dumy2){$dumy_com[$i]=$dumy_com2[$_];$dumy_ans[$i]=$dumy_ans2[$_];$i++;}
	
	$main_html.='<hr>';
	$comment="";
	if($win eq 1){
		$main_html.="$_win";
		$main_i_html.="正解！<br><br>";
		$comment="$anscom[$quiz_index]";
	}elsif($lose eq 1){
		if(($time_limit >= $LOG{last_lap})||($time_limit == 0)){$main_html.="$_lose";$main_i_html.="不正解！<br><br>";}
		else{$main_html.="$_over";$main_i_html.="時間オーバー<br><br>";}
		$comment='';
		if($quiz_text ne ''){
			$i=0;
			foreach $da(@dumy_ans2){
				@ans_list=split(/<br>/,$da);
				foreach $al(@ans_list){
					if($al eq $quiz_text){$comment = $dumy_com2[$i];}
				}
				$i++;
			}
			if($comment eq ''){$comment=$misanscom[$quiz_index];}
		}elsif($dumy_com[$quiz_select-1] ne ""){$comment=$dumy_com[$quiz_select-1];}
		else{$comment=$misanscom[$quiz_index];}
	}
	$dum=$quiz_num+1;
	$main_html.="<br><br><span><b>■$dum問目 回答結果■</b></span>";
	$main_html.="<TABLE $tbl_opt bgcolor=$ans_menu_color>";
	if($comment ne ''){$main_html.="<TR><TD nowrap colspan=2 bgcolor=$ans_com_color><span><b>$walign1$comment$walign2</b></span></td></tr>\n";}
	$main_html.= "<tr><td nowrap width=10%><small>問題文</small></td><td nowrap><small>$walign1$mondai[$quiz_index]$walign2</small></td></tr>\n";

	if($show_ans eq '1'){$main_html.= "<tr><td nowrap><small>正解</small></td><td nowrap><small>$walign$ans[$quiz_index]$walign2</small></td></tr>\n";}
	$main_html.= "<tr><td nowrap><small>貴方の答え</small></td><td nowrap width=\"$twidth1\"><small>$walign1";
	if($quiz_text ne ''){$main_html.="$quiz_text$walign2</small></td></tr>";}
	elsif($quiz_select < 1){$main_html.="--------$walign2</small></td></tr>";}
	else{$main_html.="$dumy_ans[$quiz_select-1]$walign2</small></td></tr>";}
	if($play_num > 0){$dumy=&point($play_win*100/$play_num,2);}else{$dumy=0;}
	$qu_ave=&point($QU{ave},2);
	if($bundle < 1){$main_html.= "<tr><td nowrap><small>回答時間</small></td><td nowrap><small>$walign1$LOG{last_lap}秒$walign2</small></td></tr>";}
	$main_html.= "<tr><td nowrap><small>全体の成績</small></td><td nowrap><small>$walign1$play_num人中 $play_win人正解 ($dumy％)　平均正解時間 $qu_ave秒$walign2</small></td></tr></table><br>";
	return 0;
}
#************************************************
# 途中成績表示処理
#************************************************
sub score_html{
	local($time,$limit);
	$quiz_num=$quiz_num+1;
	$dumy=&point($LOG{win}*100/$quiz_num,1);
	if($time_limit > 0){$limit="　時間制限<b>$time_limit</b>秒";}
	if($LOG{time} ne ''){$time='　'."TIME：<b>$LOG{min}分$LOG{sec}秒</b>";}
	$main_html.=<<"_HTML_";
<small><hr>出題数：<b>$quiz_num/$play_max</b>問　正解：<font color="blue"><b>$LOG{win}</b></font>問/不正解：<b><font color="red">$LOG{lose}</font>/$lose_max</b>問　正解率：<b>$dumy</b>％$time$limit</small>
_HTML_
	$main_i_html.="正解数$LOG{win}問<br><br>";
}
#************************************************
# クイズ表示処理
#************************************************
sub main_html{
	if($quiz_max<=0){&error("登録された問題がありません。<br><br>しばらくしてから、またお越しください。");return 1;}
	if(($bundle < 1) ||($imode)){&question_html;&individual_html;}
	else{
		$main_html.= "<form method=\"$method\" action=$quiz_cgi><input type=hidden name=d value=$FORM{'d'}>";
		for($quiz_num=0;$quiz_num<$play_max;$quiz_num++){
			&question_html;
		}
		$main_html.="<br><br>";
		&individual_html;
		$add_ch=&add_check("0"."$quiz_id"."0");
		$main_html.= "<TABLE $tbl_opt><TR><TD BGCOLOR=$mondai_color nowrap>\n";
		$main_html.='<br><center><span><input type=submit value="　　送信　　"></span></center>';
		$main_html.= "<input type=hidden name=m value='$FORM{'m'}'>";
		$main_html.="<input type=hidden name=bundle value='$quiz_id"."_"."$add_ch'><br></td></tr></table>";
	}
	$main_html.="</form>";
	if(($imode)&&($anstype[$quiz_index] > 0)){
		$main_i_html.="</form>";
	}
	return 0;
}

#************************************************
# 出題table表示処理
#************************************************
sub question_html{
	$dumy=$quiz_num+1;
	$main_html.="<hr><b><big>第$dumy問目</big></b>\n";
	$main_i_html.="第$dumy問目<br>";
	$quiz_index=&mondai_num($quiz_max-1);
	$quiz_head_num=$quiz_index-$quiz_num_dir{$dir_list[$quiz_index]};
	if (!open(DB,"$dir_list[$quiz_index]/$quiz_header$quiz_head_num\.cgi")) {$play_num =0;$play_win =0;$QU{ave}=0;$QU{win}=0;}
	else{
		@new= <DB>;
		close(DB);
		@qu = split(/\t/, $new[0]);
		($QU{ave},$QU{win}) = split(/\t/,$new[1]);
		if($QU{ave} eq ''){$QU{ave}='0';}
		if($QU{win}eq ''){$QU{win}='0';}
		$play_num=0;foreach $qu(@qu){$play_num=$play_num+$qu;}
		$play_win=$qu[0];
		if($play_num eq ""){$play_num =0;}
		if($play_win eq ""){$play_win =0;}
	}
	if($play_num ne 0){
		$dumy=&point($play_win*100/$play_num,1);
	}else{$dumy='0.0';}
	
	$qu_ave=&point($QU{ave},2);
	$main_html.= "<SPAN>　 $play_num人中 $play_win人正解 ($dumy％)　平均正解時間 $qu_ave秒</SPAN><br><br>";
	$main_html.= "<TABLE $tbl_opt><TR><TD BGCOLOR=$mondai_color nowrap>\n";
	$main_html.= "<span>$walign1$mondai[$quiz_index]$walign2</span></td></tr>\n";
	$main_i_html.="$mondai[$quiz_index]<br>";

	@dumy_ans2=($ans[$quiz_index],$misans1[$quiz_index],$misans2[$quiz_index],$misans3[$quiz_index],$misans4[$quiz_index]);
	@dumy2=&semirand(5);
	@dumy_ans=();
	foreach(@dumy2){push(@dumy_ans,$dumy_ans2[$_]);}
	$main_html.= "<TR><TD nowrap BGCOLOR=$sentaku_color>$walign1<table border=0 CELLSPACING=0 cellpadding=3 width=100%>";
	
	srand();
	@numlist=(1,2,3,4,5);
	if(($imode)&&($anstype[$quiz_index] > 0)){
		$add_ch=&add_check("$quiz_num"."$quiz_id"."0");
		$main_i_html.= "<form method=\"$method\" action=$quiz_cgi><input type=hidden name=d value=$FORM{'d'}>";
		$main_i_html.= "<input type=hidden name=m value='$FORM{'m'}'>";
		$main_i_html.= "<input type=hidden name=j value='1'>";
		$main_i_html.="<input type=hidden name=radio value='$quiz_num\_$quiz_id"."_0_"."$add_ch'>";
		$main_i_html.="<input type=text name=t ><br>";
		$main_i_html.="<input type=submit value='送信' >";
	}elsif((($SYS{quiz_form} eq '1')||($anstype[$quiz_index] > 0))&&($bundle < 1)){
		$add_ch=&add_check("$quiz_num"."$quiz_id"."0");
		$main_html.= "<form method=\"$method\" action=$quiz_cgi><input type=hidden name=d value=$FORM{'d'}>";
		$main_html.= "<input type=hidden name=m value='$FORM{'m'}'>";
		$main_html.="<input type=hidden name=radio value='$quiz_num\_$quiz_id"."_0_"."$add_ch'>";
	}
	if(($anstype[$quiz_index] > 0)&&($bundle < 1)){$main_html.=<<"_HTML_";
<tr><td width=30%><span><input type=text name=t >
</td></tr>
_HTML_
	}elsif($anstype[$quiz_index] > 0){
		$main_html.=<<"_HTML_";
<tr><td width=30%><span><input type=text name=a_$quiz_num >
</td></tr>
_HTML_
	}
	$button_val=0;
	$count=0;
	foreach(@numlist){
		if(($dumy_ans[$_-1] ne "")&&($anstype[$quiz_index] < 1)){
			$count++;
			$add_ch=&add_check("$quiz_num"."$quiz_id"."$_");
			$main_i_html.= "<a href=\"$quiz_cgi?d=$FORM{'d'}\&j=1&a=$quiz_num\_$quiz_id\_$_\_$add_ch\&m=$FORM{'m'}\">$dumy_ans[$_-1]</a><br>\n";
			if($bundle eq 1){					#ラジオボタン型一括出題
				$main_html.="<tr><td width=10%><span><input type=radio name=\"a_$quiz_num\" value='$_'>".'　'."</td><td nowrap><span>$dumy_ans[$_-1]</span></td></tr>\n";
			}elsif($SYS{quiz_form} eq 0){ #リンク型選択肢
				$main_html.= "<tr><td nowrap width=30%><span><a href=\"$quiz_cgi?d=$FORM{'d'}\&a=$quiz_num\_$quiz_id\_$_\_$add_ch\&m=$FORM{'m'}\">$dumy_ans[$_-1]</a></span></td></tr>\n";
			}elsif($SYS{quiz_form} eq 1){#ラジオボタン型選択肢
				$main_html.="<tr><td width=30%><span><input type=radio name=r value='$_'>".'　'."</td><td nowrap><span>$dumy_ans[$_-1]</span></td></tr>\n";
			}else{#フォームボタン型
				$main_html.= "<form method=\"$method\" action=$quiz_cgi><tr><td width=30%><span><input type=hidden name=d value=$FORM{'d'}><span>";
				$button_val++;
				$main_html.= "<input type=submit value='    $button_val    '></td><td nowrap><span>".'　　';
				$main_html.= "$dumy_ans[$_-1]";
				$main_html.= "<input type=hidden name=m value='$FORM{'m'}'>";
				$main_html.= "<input type=hidden name=a value='$quiz_num\_$quiz_id\_$_\_$add_ch'></span></td></tr></form>\n";
			}
		}
	}
	if((($SYS{quiz_form} eq '1')||($anstype[$quiz_index] > 0))&&($bundle < 1)){
		$main_html.='<tr><td colspan=2><br><center><span><input type=submit value="　　送信　　"></span></center></td></tr></table>';
	}else{$main_html.='</table>';}
	$main_html.= "$walign2</TD></TR></TABLE>";
	return 0;
}
#************************************************
# 個人成績table
#************************************************
sub individual_html{
	if($COOKIE{ck} > 0){
		if($FORM{'m'} eq ''){$FORM{'m'}=1;}
		$COOKIE{"S$FORM{'m'}$FORM{'d'}"}=$COOKIE{"S$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"E$FORM{'m'}$FORM{'d'}"}=$COOKIE{"E$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"W$FORM{'m'}$FORM{'d'}"}=$COOKIE{"W$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"L$FORM{'m'}$FORM{'d'}"}=$COOKIE{"L$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"A$FORM{'m'}$FORM{'d'}"}=$COOKIE{"A$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"H$FORM{'m'}$FORM{'d'}"}=$COOKIE{"H$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"T$FORM{'m'}$FORM{'d'}"}=$COOKIE{"T$FORM{'m'}$FORM{'d'}"}+0;
		$COOKIE{"I$FORM{'m'}$FORM{'d'}"}=$COOKIE{"I$FORM{'m'}$FORM{'d'}"}+0;
		if(($COOKIE{"W$FORM{'m'}$FORM{'d'}"}+$COOKIE{"L$FORM{'m'}$FORM{'d'}"}) > 0){
			$ave=&point($COOKIE{"W$FORM{'m'}$FORM{'d'}"}/($COOKIE{"W$FORM{'m'}$FORM{'d'}"}+$COOKIE{"L$FORM{'m'}$FORM{'d'}"})*100,1);
		}else{$ave='0.0';}
		local($s1,$m1,$h1)=&score_time($COOKIE{"T$FORM{'m'}$FORM{'d'}"});
		$m=$m%60;
		
		$cook_i=&point($COOKIE{"I$FORM{'m'}$FORM{'d'}"},2);
		$cook_a=&point($COOKIE{"A$FORM{'m'}$FORM{'d'}"},1);
		
		$main_html.=<<"_HTML_";
<TABLE $tbl_opt BGCOLOR=$sentaku_color nowrap><TR>
<TD colspan=4 BGCOLOR=$mondai_color>
<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=100%><TR><TD><small>$LOG{name}　個人成績</small></TD>
<TD align=right><small>総時間 $h1時間$m1分$s1秒</small></TD></TR></TABLE>
<TR>
<TD nowrap><small>挑戦 $COOKIE{"S$FORM{'m'}$FORM{'d'}"}回</small></TD>
<TD nowrap><small>正解 $COOKIE{"W$FORM{'m'}$FORM{'d'}"}問</small></TD>
<TD nowrap><small>最高記録 $COOKIE{"H$FORM{'m'}$FORM{'d'}"}問</small></TD>
<TD nowrap><small>正解率 $ave%</small></TD>
</tr><tr>
<TD nowrap><small>完走 $COOKIE{"E$FORM{'m'}$FORM{'d'}"}回</small></TD>
<TD nowrap><small>不正解 $COOKIE{"L$FORM{'m'}$FORM{'d'}"}問</small></TD>
<TD nowrap><small>平均記録 $cook_a問</small></TD>
<TD nowrap><small>正解時間 $cook_i秒</small></TD>
</TR></TABLE>
_HTML_
	}
	return 0;
}


#************************************************
# 問題番号出力関数
# $quiz_num,$LOG{seed}で　一定の数字を返します。
#************************************************
sub mondai_num {
	local($dumy,@semi,$max,$i,$sin,$r,$seed);
	$max=$_[0];
	if($random eq '0'){return $quiz_num;}
	@semi=();
	$seed=$LOG{seed}/100000;
	$mid=int($max*$seed);
	for($i = $mid;$i<=$max;$i++){push(@semi,$i);}
	for($i = 0;$i<$mid;$i++){push(@semi,$i);}
	for($i=0;$i<10;$i++){$seed=3.98*$seed*(1-$seed);}
	for($i = 0;$i<=$quiz_num;$i++){
		$seed=3.98*$seed*(1-$seed);
		$r=int(($max-$i+1)*$seed);
		$dumy=$r;
		$dumy=@semi[$r];
		$semi[$r]=$semi[$max-$i];
	}
	return $dumy;
}

#************************************************
# 高成績者登録チェック
#************************************************
sub rank_in {
	if($num_limit<1){return 1;}
	open(DB,"$FORM{'d'}/$high_cgi\.cgi");local(@lines) = <DB>;close(DB);
	if($lines[0]=~ /^date/){shift(@lines);}
	if($num_limit > $#lines + 1){return 1;}
	local($day,$high,$name,$host,$time,$com) = split(/\t/,$lines[$#lines]);
	if($high < $LOG{win}){return 1;}
	if($high > $LOG{win}){return 0;}
	if(($time >= $LOG{min}*60+$LOG{sec})||($time eq '')){return 1;}
	return 0;
}
#************************************************
# 疑似ランダム関数
# $quiz_num,$LOG{seed}で　0〜引数の間で一定の数字を返します。
#************************************************
sub semirand {
	local(@num,$i,$dummy);
	$max=$_[0];
	@num=(0,1,2,3,4);
	$r=10;
	for($i=0;$i<$max;$i++){
		$sin=sin($quiz_num+$LOG{seed}*10+($r-10))*0.87;
		if($sin<0){$sin=1+$sin;}
		$r=int(($max-$i)*$sin);
		$dummy=$num[$r];
		$num[$r]=$num[$max-1-$i];
		$num[$max-1-$i]=$dummy;
	}
	return @num;
}





#************************************************
# バッファのチェック
#************************************************
sub buf_check {
	if($FORM{'a'} ne ''){
		if($FORM{'a'} =~ /_/){($quiz_num,$quiz_id,$quiz_select,$quiz_check)=split(/_/,$FORM{'a'});}
		elsif(length($FORM{'a'})>8){
			$quiz_id=substr($FORM{'a'},3,length($FORM{'a'})-8);
			$quiz_num=substr($FORM{'a'},0,3);
			$quiz_select=substr($FORM{'a'},length($FORM{'a'})-5,1);
			$quiz_check=substr($FORM{'a'},length($FORM{'a'})-4,4);
		}else{&error(4);return 1;}
	}elsif($FORM{'radio'} ne ''){
		if($FORM{'radio'} =~ /_/){($quiz_num,$quiz_id,$quiz_select,$quiz_check)=split(/_/,$FORM{'radio'});}
		elsif(length($FORM{'radio'})>8){
			$quiz_id=substr($FORM{'radio'},3,length($FORM{'radio'})-8);
			$quiz_num=substr($FORM{'radio'},0,3);
			$quiz_select=substr($FORM{'radio'},length($FORM{'radio'})-5,1);
			$quiz_check=substr($FORM{'radio'},length($FORM{'radio'})-4,4);
		}else{&error(4);return 1;}
		if($FORM{r} ne ''){$quiz_select=$FORM{r};}
		elsif($FORM{t} ne ''){$quiz_text=$FORM{t};}
	}elsif($FORM{'bundle'} ne ''){
		($quiz_id,$quiz_check)=split(/_/,$FORM{'bundle'});
	}
	return 0;
}


#************************************************
# 正解チェック
#************************************************
sub ans_check {
	$win=0;$lose=0;
	if(($FORM{d} ne $LOG{genre})&&($LOG{genre} ne '')){&error(5);return 1;}
	elsif(($FORM{radio} eq '')&&(&add_check("$quiz_num"."$quiz_id"."$quiz_select") ne $quiz_check)&&($FORM{'bundle'} eq '')){
		&error(4);return 1;
	}elsif(($FORM{radio} ne '')&&(&add_check("$quiz_num"."$quiz_id"."0") ne $quiz_check)){
		&error(4);return 1;
	}elsif($imode){
		@dumy=&semirand(5);
		if(($time_limit > 0)&&($time_limit < $LOG{last_lap})){
			$win=0;$lose=1;
		}elsif($anstype[$quiz_index] > 0){
			@ans_list=split(/<br>/,$ans[$quiz_index]);
			foreach(@ans_list){
				if($_ eq $quiz_text){$win=1;$lose=0;return 0;}
			}
			$win=0;$lose=1;
		}elsif(($dumy[$quiz_select-1] ne 0)||($quiz_select < 1)){
			$win=0;$lose=1;
		}else{
			$win=1;$lose=0;
		}
	}elsif($LOG{bundle} > 0){
		if(&add_check("0"."$quiz_id"."0") ne $quiz_check){&error(4);return 1;}
		@dumy=&semirand(5);
		if(($time_limit > 0)&&($time_limit < $LOG{last_lap})){
			$win=0;$lose=1;
		}elsif($quiz_text ne ''){
			@ans_list=split(/<br>/,$ans[$quiz_index]);
			foreach(@ans_list){
				if($_ eq $quiz_text){$win=1;$lose=0;return 0;}
			}
			$win=0;$lose=1;
		}elsif(($quiz_select<1)||($dumy[$quiz_select-1] ne 0)){
			$win=0;$lose=1;
		}else{$win=1;$lose=0;}
	}elsif(($FORM{r} ne '')&&(&add_check("$quiz_num"."$quiz_id"."0") ne $quiz_check)){
		&error(4);return 1;
	}elsif(($FORM{r} eq '')&&(&add_check("$quiz_num"."$quiz_id"."$quiz_select") ne $quiz_check)){
		&error(4);return 1;
	}else{
		@dumy=&semirand(5);
		if(($time_limit > 0)&&($time_limit < $LOG{last_lap})){
			$win=0;$lose=1;
			$back_color=$back_color2;	#不正解時背景色
			$wall_paper=$lose_wall;
		}elsif($anstype[$quiz_index] > 0){
			@ans_list=split(/<br>/,$ans[$quiz_index]);
			foreach(@ans_list){
				if($_ eq $quiz_text){$win=1;$lose=0;$back_color=$back_color1;$wall_paper=$win_wall;return 0;}
			}
			$win=0;$lose=1;$back_color=$back_color2;$wall_paper=$lose_wall;
		}elsif(($dumy[$quiz_select-1] ne 0)||($quiz_select < 1)){
			$win=0;$lose=1;
			$back_color=$back_color2;	#不正解時背景色
			$wall_paper=$lose_wall;
		}else{
			$win=1;$lose=0;
			$back_color=$back_color1;	#正解時背景色
			$wall_paper=$win_wall;
		}
	}
	return 0;
}



#************************************************
# クイズ継続チェック
# $lose_max問以上間違えると０を返す
# $play_max問以上出題しない
#************************************************
sub continue_check {
	if($quiz_num >= $play_max-1){return 0;}
	if($LOG{lose} >= $lose_max){return 0;}
	else{return 1;}
}

#************************************************
# プレイログを読み込む
#************************************************
sub play_log_read {
	local(@list);
	open(DB,"$data_dir/$header$quiz_id\.cgi");@new_log = <DB>;close(DB);
	$new_log[0]=~ s/\n//g;
	($LOG{num},$LOG{win},$LOG{lose},$LOG{seed},$LOG{old},$LOG{write},$LOG{name},$LOG{'time'},$LOG{lap},$LOG{last_lap},$LOG{genre},$LOG{mode},$LOG{ck_s},$LOG{ck_n},$LOG{bundle}) = split(/\t/,$new_log[0]);
	if($LOG{'time'} ne ''){($LOG{sec},$LOG{min})=&score_time($LOG{lap}-$LOG{'time'});}
	@list=@new_log[1..$#new_log];
	$dumy1=0;$dumy2=0;
	@genre_list=();
	foreach(@list){
		local($genre,$num)=split(/\t/,$_);
		push(@genre_list,$genre);
		$genre_num{$genre}=$num;
		$dumy2=$dumy1+$num;
		for($i=$dumy1;$i<$dumy2;$i++){$dir_list[$i]=$genre;}
		$dumy1=$dumy2;
	}
	if(!($imode)&&($LOG{bundle} > 0)){
		if($LOG{num}>0){
			local(@old)=split(/,/,$LOG{old});
			for($i=0;$i<$play_max;$i++){
				if(($old[$i] ne $FORM{"a_$i"})&&($FORM{"a_$i"} ne '')){&error(6);return 1;}
			}
			$quiz_reload=1;
		}else{
			if($play_max>0){$LOG{last_lap}=&point(($now - $LOG{lap})/$play_max,1);}
		}
	}elsif($LOG{num} eq $quiz_num+1){
		if($LOG{old} eq $quiz_select){$quiz_reload=1;}
		elsif($LOG{old} eq $quiz_text){$quiz_reload=1;}
		else{&error(6);return 1;}
	}elsif($quiz_num - $LOG{num} eq 0){
		$LOG{last_lap}=$now - $LOG{lap};
	}
	return 0;
}

#************************************************
# プレイログを書き込む
#************************************************
sub play_log_write {
	local(@new);
	if($quiz_num - $LOG{num} ne 0){
		if($quiz_num - $LOG{num} ne -1){&error(1);return 1;}
	}else{
		$COOKIE{"T$FORM{'m'}$FORM{'d'}"}=$COOKIE{"T$FORM{'m'}$FORM{'d'}"}+ $now - $LOG{lap};
		if(($win)&&(($LOG{bundle} < 1)||($imode))){
			$COOKIE{"W$FORM{'m'}$FORM{'d'}"}++;
			if($COOKIE{"W$FORM{'m'}$FORM{'d'}"}>0){
				if($COOKIE{"I$FORM{'m'}$FORM{'d'}"} == 0){$COOKIE{"I$FORM{'m'}$FORM{'d'}"}=$now - $LOG{lap}}
				else{$COOKIE{"I$FORM{'m'}$FORM{'d'}"}=($COOKIE{"I$FORM{'m'}$FORM{'d'}"}*($COOKIE{"W$FORM{'m'}$FORM{'d'}"}-1)+ $now - $LOG{lap})/$COOKIE{"W$FORM{'m'}$FORM{'d'}"};}
			}
		}elsif(($LOG{bundle} < 1)||($imode)){$COOKIE{"L$FORM{'m'}$FORM{'d'}"}++;}
		$LOG{num}=$LOG{num}+1;
		if(($LOG{bundle} < 1)||($imode)){
			$LOG{win}=$LOG{win}+$win;
			$LOG{lose}=$LOG{lose}+$lose;
		}
		$new[0]=join("\t",$LOG{num},$LOG{win},$LOG{lose},$LOG{seed},$LOG{old},$LOG{write},$LOG{name},$LOG{'time'},$now,$LOG{last_lap},$LOG{genre},$LOG{mode},$COOKIE{"S$FORM{'m'}$FORM{'d'}"},$COOKIE{N},$LOG{bundle},"\n");
		if($LOG{'time'} ne ''){($LOG{sec},$LOG{min})=&score_time($now - $LOG{'time'});}
		foreach(@genre_list){
			push(@new,join("\t",$_,$genre_num{$_},"\n"));
		}
		if(&ch_dir_exist("$data_dirディレクトリ",$data_dir) > 0){return 1;}
		if(&write_file("$data_dir/$header$quiz_id\.cgi",@new)){
			&error(1);return 1;
		}
	}
	return 0;
}
#************************************************
# 使用ジャンル全てのクイズを読み込み
#************************************************
sub quiz_read_all{
	foreach(@genre_list){		#問題読み込み
		$quiz_num_dir{$_}=$#mondai+1;		#このジャンルの問題開始番号を格納
		&quiz_read($_,$genre_num{$_},$#genre_list);
		$quiz_max_dir{$_}=$#mondai+1;
	}
}
#************************************************
# エンディング表示処理
#************************************************
sub end_html {
	&show_graph;
	$main_html.="<big>";

	if($quiz_reload ne 1){			#####リロードでない場合
		$COOKIE{"A$FORM{'m'}$FORM{'d'}"}=($COOKIE{"A$FORM{'m'}$FORM{'d'}"}*$COOKIE{"E$FORM{'m'}$FORM{'d'}"}+ $LOG{win})/($COOKIE{"E$FORM{'m'}$FORM{'d'}"}+1);
		$COOKIE{"E$FORM{'m'}$FORM{'d'}"}++;
		if($COOKIE{"H$FORM{'m'}$FORM{'d'}"} < $LOG{win}){$COOKIE{"H$FORM{'m'}$FORM{'d'}"} = $LOG{win};}
		$value=join("\n",@score);
		&ch_dir_exist('ディレクトリ名',$FORM{'d'});
		
		if(&lock_check("$FORM{'d'}/$scorehst_cgi\.lock",10)){
			&file_lock("$FORM{'d'}/$scorehst_cgi\.lock");
			&write_file("$FORM{'d'}/$scorehst_cgi\.cgi",("date".$last_ed."\n",$value));
			&file_unlock("$FORM{'d'}/$scorehst_cgi\.lock");
		}
	}
	$main_html.="<br>\n";
}

#************************************************
# グラフ表示処理
#************************************************
sub show_graph {
	$mass=0;$better=1;$all_hst=0;
	###スコア履歴総計計算###[
	open(DB,"$FORM{'d'}/$scorehst_cgi\.cgi");@list=<DB>;close(DB);
	if($list[0]=~ /^date(.*)/){
		@score=@list;
		shift @score;
		$last_ed=$1;
	}else{
		&renew_date("$FORM{'d'}/$scorehst_cgi\.cgi");
		$last_ed=$now;
		if($scorehst_back_day > 0){
			&copy_file($scorehst_cgi,$scorehst_back_w);
		}@score=@list;$last_ed=$now;
	}
	for($i=0;$i<=$#score;$i++){$score[$i]=~ s/\n//g;}
	if(($scorehst_back_day > 0)&&($now > $last_ed+$scorehst_back_day*60*60*24)){
		&renew_date("$FORM{'d'}/$scorehst_cgi\.cgi");
		&copy_file($scorehst_cgi,$scorehst_back_w);
	}
	if($histry_div <=> 0){$hst_dev=int($play_max/$histry_div);}
	else{$hst_dev=int($play_max/5);}
	if(($quiz_reload ne 1)&&($FORM{'g'} eq '')){$score[$LOG{win}]++;}
	for($i=0;$i<=$play_max;$i++){
		$score[$i]=~ s/\n//;
		if($score[$i] eq ""){$score[$i]=0;}
		$all_hst=$all_hst+$score[$i];
		$mass=$mass+($i)*$score[$i];
		if($LOG{win}<$i){$better=$better+$score[$i];}
	}
	if($all_hst >0){
		$average=&point($mass/$all_hst,2);
		$hyouhen=0;
		######偏差値計算#######
		for($i=0;$i<=$play_max;$i++){$hyouhen=$hyouhen+($average-$i)*($average-$i)*$score[$i];}
		$hyouhen=&point(sqrt($hyouhen/$all_hst),2);
		if($hyouhen > 0){$hensa=&point(($LOG{win}-$average)*10/$hyouhen+50,1);}
		else{$hensa ='---';}
	}else{$hensa=0;$hyouhen=0;$average=0;}
	if($FORM{'g'} eq ''){&end_mes;$main_html.="";}		#終了メッセージ表示
	else{$main_html.= "<br>";}
	
	######棒グラフ毎の集計#######
	for($i=0;;$i++){
		if($i*$histry_div>$play_max){last;}
		if((($i+1)*$histry_div-1)>$play_max){$to=$play_max;}
		else{$to=($i+1)*$histry_div-1;}
		$dumy=$i+$histry_div-1;
		foreach(@score[$i*$histry_div..$to]){$hst[$i]=$hst[$i]+$_;}
	}

	########$graph_border以下の棒グラフの最大を$sub_maxに入力########
	$sub_max=0;
	for($i=0;$i<=$hst_dev;$i++){
		if($all_hst > 0){$per=($hst[$i]/$all_hst)*100;}		#実際の回答者の割合
		else{$per=0;}
		if($per<$graph_border){
			if($sub_max<$hst[$i]){$sub_max=$hst[$i];}
		}
	}

	$main_html.="<b><span>■成績履歴グラフ■</span></b>";
	$main_html.="<table $tbl_opt bgcolor='$graph_color'><tr><td nowrap colspan=2>$walign1総挑戦者数 $all_hst人　平均 $average問正解　標準偏差 $hyouhen$walign2</td></tr>";
	for($i=0;$i<=$hst_dev;$i++){
		$gif_file=$SYS{b_gif};
		$font_tag1="";$font_tag2="";
		if(($LOG{win}>=$i*$histry_div)&&($LOG{win}<($i+1)*$histry_div)&&($FORM{'g'} eq '')){
			$gif_file=$SYS{a_gif};
			$font_tag1="<font color=red>";
			$font_tag2="</font>";
		}
		if($all_hst > 0){$per=&point($hst[$i]*100/$all_hst,3);}		#実際の回答者の割合
		else{$per='0.000';}
		if($sub_max ne 0){$width=int($hst[$i]/$sub_max*$graph_w);}
		else{$width=0;}
		
		$from=$i*$histry_div;
		$to=($i+1)*$histry_div-1;
		if($to>$play_max-1){$to=$play_max;}
		if($per >= $graph_border){
			$main_html.="<tr><td nowrap>$font_tag1$from〜$to問正解$font_tag2</td><td nowrap>";
			$img="";
			if($hst[$i] ne 0){$img="<img src=\"$gif_file\"width=\"$graph_w\" height=\"$graph_h\"> <img src=\"$gif_file\"width=\"5\" height=\"$graph_h\"> <img src=\"$gif_file\"width=\"5\" height=\"$graph_h\"> <img src=\"$gif_file\"width=\"5\" height=\"$graph_h\">";}
			$main_html.="$img　 $font_tag1$hst[$i]人($per％)$font_tag2</td></tr>\n";
		}else{
			$img="";
			if($hst[$i] ne 0){$img="<img src=\"$gif_file\"width=\"$width\" height=\"$graph_h\">";}
			$main_html.="<tr><td nowrap>$font_tag1$from〜$to問正解$font_tag2</td><td nowrap>$img　 $font_tag1$hst[$i]人($per％)$font_tag2</td></tr>\n";
		}
	}
	$main_html.="</table><small>【偏差値＝（得点−平均）／標準偏差×１０＋５０)】</small><br>";
}

#************************************************
# エラー表示処理
#************************************************
sub error {
	if ($_[0] eq "1") {
		$error_mes .= 'プレイログファイルに書き込みができませんでした。<br>管理者にお問い合わせ下さい。<br><br>error No.1';
	}elsif ($_[0] eq "2") {
		$error_mes .= 'システムファイルの読み込みに失敗しました。<br>管理者にお問い合わせ下さい。<br><br>error No.2';
	}elsif ($_[0] eq "3") {
		$error_mes .= 'ジャンルファイルの読み込みに失敗しました。<br>管理者にお問い合わせ下さい。<br><br>error No.3';
	}elsif ($_[0] eq "4") {
		$error_mes .= 'ずるをした可能性があります。正常に処理されませんでした。<br><br>なお、裏で管理者が作業を行っていた可能性があります。しばらくしてからリロードしてみて下さい。<br><br>error No.4';
	}elsif ($_[0] eq "5") {
		$error_mes .= 'ずるをした可能性があります。正常に処理されませんでした。<br><br>なお、裏で管理者が作業を行っていた可能性があります。しばらくしてからリロードしてみて下さい。<br><br>error No.5';
	}elsif ($_[0] eq "6") {
		$error_mes .= 'ずるをした可能性があります。正常に処理されませんでした。<br><br>なお、裏で管理者が作業を行っていた可能性があります。しばらくしてからリロードしてみて下さい。<br><br>error No.6';
	}elsif ($_[0] eq "7") {
		$error_mes .= 'ずるをした可能性があります。正常に処理されませんでした。<br><br>なお、裏で管理者が作業を行っていた可能性があります。しばらくしてからリロードしてみて下さい。<br><br>error No.7';
	}elsif ($_[0] ne '') {
		$error_mes .= $_[0];
	}else {
		$error_mes .= '処理に何らかのエラーが発生し作業は中止されました。';
	}
	$error_mes.='<br><br>';
}
#************************************************
# エラー表示処理
#************************************************
sub error_html{
	local($color);
	if($error_mes ne ''){
		if($error_com_color eq ''){$color='#eeeebb';}
		else{$color=$error_com_color;}
		$return = <<"_HTML_";
<hr><br>
<table bgcolor="$color" $tbl_opt><tr><td nowrap>
<center><big><font color=#dd5555>●お知らせ●</font><br><br> </big>
<table border=0><tr><td><span><b>$error_mes</b></span></td></tr></table>
</center></td></tr></table><br>
_HTML_
	}
}
#************************************************
# HTML出力
#************************************************
sub output{
	print "Content-type: text/html\n\n";
	print "$header_html$align1";
	print &error_html;
	print "$start_html";
	print "$test";
	print "$main_html$align2";
	print "$footer_html";
	exit;
}
#************************************************
# HTML出力
#************************************************
sub output_i{
	print "Content-type: text/html\n\n";
	print "<html><header><title>$SYS{main_title}</title></header><body>";
	print $error_mes;
	print "$main_i_html$test";
	
	print "<br><br><a href=$index_cgi?&j=1>トップへ</a><br>";
	print "<a href=$quiz_cgi?d=$FORM{d}\&m=1&j=1>再挑戦</a><br>";
	print "</body></html>";
	exit;
}
