#!/usr/bin/perl

#+++　CGI作成元　++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++
#+++　　[ 目指せ全国制覇!! Ver0.81 ]　…　2000.07.12　Update
#+++		･････>>> All Created by Tacky				     
#+++		･････>>> Copyright (c) 1999.6 Tacky's Room. All rights reserved....
#+++        Email    >>> tacky2@ops.dti.ne.jp
#+++        Homepage >>> http://tackysroom.com/
#+++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

##+------------------------------------+##
##      				##
##   Fan Map v1.0307 (01.03.07)		##
##					##
## Edit By *- CGI Cafe. -*		##
##    URL: http://saya.kiy.jp/		##
##					##
##+------------------------------------+##

##----[注意事項]------------------------------------------------##
##								##
## 1. このスクリプトはフリーソフトです。このスクリプトを使用した##
##    いかなる損害に対しても作者は一切の責任を負いません。	##
##								##
## 2. 設置に関する質問は掲示板にお願いいたします。		##
##    メールによる質問には一切お答えしません。			##
##								##
## 3. このCGIに対する問い合わせを、スクリプト作成元には		##
##    絶対にしないでくださいね。				##
##								##
##━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━##
##								##
##    ■ 必要なファイルと主なパーミッション設定			##
##	※各プロバイダによって違いますので必ず確認して下さいね！##
##								##
##      ・fanmap.cgi------------------[755]			##
##      ・jcode.pl--------------------[755]			##
##      ・fanmap.dat(ログ保存用)------[666]			##
##	・count.dat(カウンターログ)---[666]			##
##	・gif画像-------------------[変更不要]			##
##								##
##--------------------------------------------------------------##

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

##--------------初期設定--------------##

$lono	= 0 ;			#「トクトク」「3nopaage」などに設置の場合は「1」、それ以外の方は「0」を指定して下さい。

# 「トクトク」「3nopaage」などで↑上記を「1」に設定しても書き込みがうまくいかない場合は
#　↓ＣＧＩのファイル名を「http://〜」から始まる絶対パスで指定してみて下さい。
$script =  "./fanmap.cgi";	# このＣＧＩの名前を指定

$url =  "http://www.houjinzei.com/bunpu/index.htm";# 戻り先ＵＲＬ
$method	= 'POST';		# METHODの指定(POST又はGET)
$logfile = './fanmap.dat';	# ログファイルの名前を指定
$lockfile = './fanmap.lock';	# ロックファイルの名前を指定(自動作成されるため、作成の必要はありません。)
$title = '第６０回合格の喜び';	# タイトルを指定
$titlelogo = '../norinori.gif';	# タイトル画像を指定
$bgcolor = '#ffffff';		# 背景色を指定
$backpicture = '';		# 背景画像を指定（使用しない場合は '';)
$tbgcolor = '#cce6ff';		# 入力フォームの背景色を指定

#管理者からのコメントがある場合指定(タグＯＫ！)
$admin_com ='第６０回税理士試験<br>● 合格の喜び ●<br><br>−合格科目ごとにどうぞ！−<br>できれば自己採点の点数と勝因もお願いします！<DIV style="HEIGHT: 0px; LEFT: -200px; POSITION: absolute; TOP: -200px; VISIBILITY: visible; WIDTH: 0px; Z-INDEX: 1"><IMG src="http://houjinzei.com/vicounter/s3cnt/w_s3ctup.cgi"></DIV>';
$master_password = 'houjin1234';	# メンテナンス用パスワード ※管理者専用なので絶対変更してね！
$dc_color   = "#66b3ff";	# Pass入力箇所(記事編集or削除)のコメントの色

$col = 46 ;			# メッセージ欄の桁数
$row = 4 ;			# メッセージ欄の行数
$tsz = '90%' ;			# ログ表示部のテーブル横幅

#----ログ表示部分のセル幅調整-----
# 向かって左側からのセル幅を指定します。必要に応じて調整してくださいね。
$t_1 = '';	# 「地域」欄の幅
$t_2 = '75';	# 「お名前」欄の幅
$t_3 = '';	# 「選択肢１」欄の幅
$t_4 = '';	# 「選択肢２」欄の幅
$t_5 = '';	# 「年数」欄の幅
$t_6 = '';	# 「HP」欄の幅
$t_7 = '';	# 「アンケート」欄の幅
$t_8 = '150';	# 「コメント」欄の幅
$t_9 = '60';	# 「Date＆No」欄の幅


$hpicon = "./home.gif";		# ホームページアイコン
$headbgcolor	= "#4db3ff";	# メッセージ表示部分の見出しセル背景色
$headtxcolor	= "#ffffff";	# メッセージ表示部分の見出しセル文字色

$cellbgcolor1	= "#cce6ff";	# メッセージ表示部分のセル背景色１
$celltxcolor1	= "#808080";	# メッセージ表示部分のセル文字色１

$cellbgcolor2	= "#ffe6ff";	# メッセージ表示部分のセル背景色２（１と２で繰り返し表示されます）
$celltxcolor2	= "#808080";	# メッセージ表示部分のセル文字色２（１と２で繰り返し表示されます）


$seiha = "合格！";		# 地域登録情報に表示される文字を指定(短めの方がいいですよ)。指定しないと数字のみ表示されます。
$love  = "感謝！";		# メンバーLOVE情報 or コンビニ情報に表示される文字を指定(　　　〃　　　　)。　　　　　　　〃

$ans = '官報合格';	# アンケート欄を使用する場合指定。(不要の場合は '';)
$headans = '官報';	# アンケートがある場合、ログ表示部分のアンケート見出し(短めの方がいいですよ)
$ans_gif = "./mark.gif";	# アンケートにチェックを入れた場合に表示される画像
$ans_com = 'やったー！';	# アンケートにチェックを入れた場合の画像の ALT指定（画像にマウスを合わせた時表示される文章）

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

$search = 0 ;			# 検索機能を使いますか？(0:使う, 1:使わない)

#<<<地域テーブル
$area_title = "地域別の合格者";	# 登録状況を表示する時のタイトル
@areatbl = ('　−　','北海道','青　森','岩　手','秋　田','宮　城','山　形','福　島',
'栃　木','群　馬','茨　城','埼　玉','東　京','千　葉','神奈川','山　梨','長　野',
'新　潟','富　山','石　川','福　井','静　岡','愛　知','岐　阜','三　重','滋　賀',
'京　都','大　阪','兵　庫','奈　良','和歌山','鳥　取','島　根','岡　山','広　島',
'山　口','徳　島','香　川','愛　媛','高　知','福　岡','佐　賀','長　崎','熊　本',
'大　分','宮　崎','鹿児島','沖　縄');


#<<<選択肢1 -----------------------------------------------------
$con_1 = "合格科目";		# 他の選択肢にする場合の選択タイトル
@fantbl = ('簿記論','財務諸表論','所得税法','法人税法','相続税法','消費税法','酒税法','国税徴収法','固定資産税','事業税','住民税');


#<<<選択肢2 -----------------------------------------------------
$con_2    = "専門学校";	# 他の選択肢にする場合の選択タイトル
$con_title= "専門学校別合格者状況";		# 登録状況を表示する時のタイトル
$sel_all  = 10 ;			# 選択肢の数（登録状況のテーブル表示に必要）
$sel	  =  5 ;			# 登録状況表示テーブルの横を何マスにしますか？（ご自分で調整してください）
@membertbl = ('大原','ＴＡＣ','ＬＥＣ','大栄','ＤＡＩ−Ｘ','大阪ＩＴ会計',
		'東京ＩＴ会計','独学','その他');


#投稿時のパスワードをcrypt関数を使用する（暗号化）
#crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。
$ango = 1 ;	#0:使用しない 1:使用する　（推奨：１：使用する）


# ミニカウンタの設置---------------------------------------
$counter   = 0;			# 0=no、 1=テキスト、 2=GIF画像
$mini_fig  = 5;			# ミニカウンタの桁数
$cnt_color = "#80ccff";		# テキストのとき：ミニカウンタの色
$gif_path  = ".";		# ＧＩＦのとき　：画像までのディレクトリ
$mini_w    = 8;			#       〃    　：画像の横サイズ
$mini_h    = 12;		#       〃    　：画像の縦サイズ
$cntfile   = "./count.dat";	# カウンタファイル
$cnt_pl    = "right";		# カウンターの表示位置　(画面左：left　画面右：right)※スペル間違えないでね〜！


#---------------- スタイルシートの設定 -------------------------------
#スタイルシートがわかる人は適当に変更してくださいね。
$textcolor  = "#808080";	# 標準文字色
$pt         = '9pt';		# 標準フォントサイズ
$linkcolor  = "#1a80ff";	# リンク色（未読リンク）
$vlinkcolor = "#1a80ff";	# リンク色（既読リンク）
$alinkcolor = "#1a80ff";	# リンク色（押した時）
$hovercolor = "#1a80ff";	# ﾘﾝｸをﾎﾟｲﾝﾄした際のﾗｲﾝ色(IE&NN6以上)

$hr	    = "#66b3ff";	# 横線の色
$hr_size    = 2;		# 横線のサイズ(太さ)
$input_color = "#6699ff";	# 入力欄の文字色(IE&NN6以上)
$input_bg = "#FFFFFF";		# 入力欄の背景色(IE&NN6以上)
$input_border = "#66b3ff";	# 入力欄とボタンの枠色(IE&NN6以上)
$h_bg	    = "#dfffff";	# リンク部分とボタンにマウスを合わせた時の背景色
$button_c = "#808080";		# ボタンの文字色
$button_bg = "#cfefff";		# ボタンの背景色(IE&NN6以上)


$style = <<"HTML";

<style type="text/css">
<!--
body,td	{color : $textcolor; font-size : $pt; }
a:link    {text-decoration: none; color: $linkcolor; }
a:visited {text-decoration: none; color: $vlinkcolor; }
a:active  {text-decoration: none; color: $alinkcolor; }
a:hover   {text-decoration: underline overline; color: $hovercolor; background-color: $h_bg
 }
input,textarea,select { border-left: 2px solid $input_border;
border-right: 2px solid $input_border;
border-top: 2px solid $input_border;
border-bottom: 2px solid $input_border; 
background-color: $input_bg; color: $input_color; }
.button	{border-left: 3px double $input_border;
border-right: 3px double $input_border;
border-top: 3px double $input_border;
border-bottom: 3px double $input_border; 
background-color: $button_bg; color: $button_c;
cursor:hand; }
hr {color: $hr; size: $hr_size;}
-->
</style>

HTML

#=======================================================================================================================================================
#<<<　ここから下はいじらない方がいいですよ。

###############################################################################
#### 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";
if ($ENV{'HTTP_USER_AGENT'} !~ /MSIE/i) {	$css_style = "" ;	}
&decode ;
if ( $FORM{'action'} eq "maintenance" ) {  &Maintenance; }    	#<<<"処理"がメンテナンスの場合
elsif	( $FORM{'action'} eq "update" )		{ &update ; }		#<<<ログファイル更新（編集時）
elsif	( $FORM{'action'} eq "disp" )		{ &seiha ; }		#<<<全国制覇状況を見る
elsif	( $FORM{'action'} eq "ldisp" )		{ &love ; }		#<<<選択肢２状況を見る
else	{
	if	( $FORM{'action'} eq 'regist' )	{	&regist ;	}
	&forminput ;
}
&view ;
&footer ;

exit;
###############################################################################
#### Main Process  END  #######################################################
###############################################################################

###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{	
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }
	@pairs = split(/&/,$buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		#タグ無効
		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;
		$value =~ s/\,/，/g;
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
	}
	$page      = $FORM{'page'};			#NEXT,BACKを保持
	$disppage  = $FORM{'disppage'};		#表示されているページ数
	$FORM{'comment'} =~ s/\r\n/<br>/g;	$FORM{'comment'} =~ s/\r|\n/<br>/g;	
	$FORM{'hp'}   =~ s/^http\:\/\///;

}
###<--------------------------------------------------------------
###<---   入力フォーム
###<--------------------------------------------------------------
sub forminput { 
	&dataread ;
	&header ;

	# カウンタ処理
	if ($counter) { &counter; }

	print "<center>\n";
	print "<img src=\"$titlelogo\"><p>\n";
	print "| <a href=$url target=_top>TOP</a>\n";
	print "| <a href=$script?action=disp>$area_title</a> \n";
	print "| <a href=$script?action=ldisp>$con_title</a> |\n";
	print "<p>$admin_com\n";
	print "<form action=\"$script\" method=\"$method\">\n";
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<input type=hidden name=\"action\" value=\"regist\">\n";
	}	else	{
		print "<input type=hidden name=\"action\" value=\"update\">\n";
		print "<input type=hidden name=\"no\" value=\"$FORM{'no'}\">\n";
		print "<input type=hidden name=\"proc\" value=\"edit\">\n";
	}
	print "<br><br><TABLE border=0 cellpadding=1 cellspacing=0 bgcolor=\"$tbgcolor\"><tr><td>\n";
	print "<TABLE border=0 cellpadding=5 cellspacing=0>\n";
    print "<TR>\n";
	print "<TD>Name</TD>\n";
    print "<TD><INPUT size=25 type=text name=name value=\"$c_name\"></TD>\n";
    print "<TD>年数</TD>\n";
    print "<TD>\n";
    print "<select name=sex\n>";
	if ( $c_sex == 1 || !($c_sex) ) { $dmy = "selected"; } else { $dmy = ""; }
	print "<option value=1 $dmy>３年以上";
	if ( $c_sex == 2 ) { $dmy = "selected"; } else { $dmy = ""; }
	print "<option value=2 $dmy>２年";
	if ( $c_sex == 3 ) { $dmy = "selected"; } else { $dmy = ""; }
	print "<option value=3 $dmy>１年";
	print "</select>\n";
    print "</TD>\n";
    print "</TR>\n";
    print "<TR>\n";
    print "<TD>お仕事</TD>\n";
    print "<TD><INPUT size=25 type=text name=email value=\"$c_email\"></TD>\n";
    print "<TD>地域</TD>\n";
	print "<TD>\n";
	&areaset ;
    print "</TD>\n";
	print "</TR>\n";

#-------------------------------------------------------------------------------
   print "<TR><TD align=center>$con_1</TD>\n";
	print "<TD>\n";
	&fanset ;
    print "</TD>\n";
#-------------------------------------------------------------------------------
   print "<TD align=center>$con_2</TD>\n";
	print "<TD>\n";
	&memberset ;
    print "</TD>\n";
	print "</TR>\n";
#-------------------------------------------------------------------------------

    print "<TR><TD colspan=4 align=center>\n";
	print "<TEXTAREA rows=$row cols=$col name=comment>$c_comment</TEXTAREA>\n";
    print "</TD></TR>\n";
    print "<TR><TD colspan=2>URL\n";
    print "<INPUT size=30 type=text name=hp value=\"http://$c_hp\"></TD>\n";
    print "<TD colspan=2>Pass\n";
    print "<INPUT size=8 type=password name=pass value=\"$c_pass\"></TD></TR>\n";
    print "<TR>\n";
	#アンケート部分の表示
	if ( $ans ne '' )	{
	    print "<TD colspan=2 align=center>\n";
		if ( $c_ans == 1 ) { $dmy = "checked" ; } else { $dmy = ""; }		#u000619
		print "<INPUT type=checkbox name=ans value=\"1\" $dmy>←$ans？\n";		#u000619
		print "</TD>\n";
	    print "<TD colspan=2 align=center>\n";
	}	else	{
	    print "<TD colspan=4 align=center>\n";
	}
	print "　<INPUT type=submit value=登録 class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">　　<INPUT type=reset value=クリア class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">\n";
	print "</TD></TR></TABLE>\n";
	print "</TD></TR></TABLE>\n";
	print "</form>\n";
#v0.0927------------------------------------------------------------------
	if ( $search == 0 ){
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<form action=\"$script\" method=\"$method\">\n";
		print "科目：<input type=hidden name=\"action\" value=\"reference\">\n";
	    print "<INPUT size=20 type=text name=findname>&nbsp;&nbsp;又は&nbsp;&nbsp;\n";
		&areaset2 ;
		print "<INPUT type=submit value=検索 class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">";
		print "</form>\n";
	}
}
#------------------------------------------------------------------
	print "</CENTER>\n";
}
###<--------------------------------------------------------------
###<---   地域情報設定
###<--------------------------------------------------------------
sub areaset	{	
	print " <SELECT name=area>\n";
	for ( $i = 0 ; $i <= $#areatbl ; $i++ )	{
		$j = sprintf("%02d",$i);
		if ( $c_address == $j || (!($c_address) && $j ==0 ) ) { $dmy = "selected"; } else { $dmy = ""; }
		print "  <OPTION value=$j $dmy>$areatbl[$i]\n";
	}	
	print "</SELECT>\n";
}
###<--------------------------------------------------------------
###<---   地域情報設定2
###<--------------------------------------------------------------
sub areaset2	{	
	print " <SELECT name=area2>\n";
	for ( $i = 0 ; $i <= $#areatbl ; $i++ )	{
		$j = sprintf("%02d",$i);
		print "  <OPTION value=$j>$areatbl[$i]\n";
	}	
	print "  <OPTION value=48>都道府県順に\表\示\n";
	if ( $ans ne '' )	{
		print "  <OPTION value=49>$ans検索\n";
	}
	print "  <OPTION value=50 selected>全件検索\n";
	print "</SELECT>\n";
}
###<--------------------------------------------------------------
###<---   選択肢1情報設定
###<--------------------------------------------------------------
sub fanset	{	
	print " <SELECT name=fan>\n";
	for ( $i = 0 ; $i <= $#fantbl ; $i++ )	{
		$j = sprintf("%02d",$i);
		if ( $c_fanreki == $j || (!($c_fanreki) && $j ==0 ) ) { $dmy = "selected"; } else { $dmy = ""; }
		print "  <OPTION value=$j $dmy>$fantbl[$i]\n";
	}	
	print "</SELECT>\n";
}
###<--------------------------------------------------------------
###<---   選択肢2情報設定
###<--------------------------------------------------------------
sub memberset	{	
	print " <SELECT name=member>\n";
	for ( $i = 0 ; $i <= $#membertbl ; $i++ )	{
		$j = sprintf("%02d",$i);
		if ( $c_memberlove == $j || (!($c_memberlove) && $j ==0 ) ) { $dmy = "selected"; } else { $dmy = ""; }
		print "  <OPTION value=$j $dmy>$membertbl[$i]\n";
	}	
	print "</SELECT>\n";
}
###<--------------------------------------------------------------
###<---   HTMLヘッダー書き出し
###<--------------------------------------------------------------
sub header { 
	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print "<html>\n<head>\n";
	print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
	print "<title>$title</title>\n";
	#<<<CSS START>>>
	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";
}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer { 
	#<<<　↓消さないでネ♪
	print "<center><a href=http://www.houjinzei.com/index.htm>- 法人の勉強部屋 -</a><br><br>\n";
	print "<a href=http://tackysroom.com/ target=_blank>- Tacky's Room -</a><br>\n";
	print "Edit By <a href=http://saya.kiy.jp/ target=_blank>*- CGI Cafe. -*</a>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   ログファイル読み込み
###<--------------------------------------------------------------
sub	dataread	{
	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@LOG = <IN>;
	close(IN);
}
###<--------------------------------------------------------------
###<---   ログ表示
###<--------------------------------------------------------------
sub	view	{
	print "<DIV align=\"center\">\n";
	print "<table  width=$tsz border=0 cellspacing=3 cellpadding=1>\n";
	print "<tr><td bgcolor=\"$headbgcolor\" align=center width=$t_1><font color=\"$headtxcolor\">地域</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_2><font color=\"$headtxcolor\">Name</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_3><font color=\"$headtxcolor\">$con_1</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_4><font color=\"$headtxcolor\">$con_2</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_5><font color=\"$headtxcolor\">年数</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_6><font color=\"$headtxcolor\">HP</font></td>\n";
	if ( $ans ne '' )	{
		print "<td bgcolor=\"$headbgcolor\" align=center nowrap width=$t_7><font color=\"$headtxcolor\">$headans</font></td>\n";
	}
	print "<td bgcolor=\"$headbgcolor\" align=center width=$t_8><font color=\"$headtxcolor\">コメント</font></td>\n";
	print "<td bgcolor=\"$headbgcolor\" align=center nowrap width=$t_9><font color=\"$headtxcolor\">Date＆No</font></td></tr>\n";

	if  ($FORM{'action'} eq 'reference' && $FORM{'area2'} == 48) {
		@sortlog = sort { $a <=> $b } @LOG;
	}	else	{
		@sortlog = @LOG;
	}

	@new = ();
	foreach $buf ( @sortlog )	{
		($address,$no,$name,$email,$fanreki,$memberlove,$sex,$hp,$pillo,$dummy) = split(/,/,$buf);
		if ( (($FORM{'action'} eq 'reference') &&
			 (( !($FORM{'findname'}) && 
                 ($FORM{'area2'} == $address || $FORM{'area2'} == 48 || $FORM{'area2'} == 50 || $FORM{'area2'} == 49 && $pillo == 1)) || 
			     ($FORM{'findname'} && index($fantbl[$fanreki],$FORM{'findname'}) >= 0 )) ) || 
			  ($FORM{'action'} ne 'reference') )	{
			push(@new,$buf);
		}
	}

	#表示対象ページの先頭データ件数を算出
	$dm = @new;
	if ( $dm % $pagemax == 0) {
		$p = $dm / $pagemax ;
	}	else	{
		$p = $dm / $pagemax + 1;
	}			
	$p = sprintf("%3d",$p);
	if ( $page eq "NEXT" )	{
		if ( $disppage == 0 ) { $disppage = 1 }	;
		$d = ($disppage + 1) * $pagemax - $pagemax ; 	
		$disppage = $disppage + 1 ;
	}	elsif	( $page eq "BACK" ) 	{
		$d = ($disppage - 1) * $pagemax - $pagemax ; 	
		$disppage = $disppage - 1 ;
	}	else	{
		$d = 0	;
		$disppage = 1 ;
	}
	$z = 1;
	for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ )	{ 
		($address,$no,$name,$email,$fanreki,$memberlove,$sex,$hp,$pillo,$comment,$regdate,$p) = split(/,/,$new[$i]);
		if ( $bg eq $cellbgcolor1 ) {
			$bg = $cellbgcolor2;
			$tx = $celltxcolor2;
		}	else	{
			$bg = $cellbgcolor1;
			$tx = $celltxcolor1;
		}
		print "<tr>\n";
		print "<td bgcolor=\"$bg\" align=center nowrap><font  color=\"$tx\">$areatbl[$address]</font></td>\n";
		if ( $email ne '' )	{
			print "<td bgcolor=\"$bg\" align=center nowrap><font  color=\"$tx\">\n";
			print "<a href=\"mailto:$email\">$name</a></font></td>\n";
		}	else	{
			print "<td bgcolor=\"$bg\" align=center nowrap><font  color=\"$tx\">$name</font></td>\n";
		}
		print "<td bgcolor=\"$bg\" align=center nowrap><font  color=\"$tx\">$fantbl[$fanreki]</font></td>\n";
		print "<td bgcolor=\"$bg\" align=center nowrap><font  color=\"$tx\">$membertbl[$memberlove]</font></td>\n";
		if ( $sex == 1 )	{
			print "<td bgcolor=\"$bg\" align=center><font  color=\"$tx\">３年以上</font></td>\n";
			if ( $hp ne '' )	{
				print "<td bgcolor=\"$bg\" align=center><a href=\"http://$hp\" target=_blank><img src=\"$hpicon\" border=0></a></td>\n";
			}	else	{
				print "<td bgcolor=\"$bg\">　</td>\n";
			}
		}	elsif	( $sex == 2 )	{
			print "<td bgcolor=\"$bg\" align=center><font  color=\"$tx\">２年</font></td>\n";
			if ( $hp ne '' )	{
				print "<td bgcolor=\"$bg\" align=center><a href=\"http://$hp\" target=_blank><img src=\"$hpicon\" border=0></a></td>\n";
			}	else	{
				print "<td bgcolor=\"$bg\">　</td>\n";
			}
		}	else	{
			print "<td bgcolor=\"$bg\" align=center><font  color=\"$tx\">１年</font></td>\n";
			if ( $hp ne '' )	{
				print "<td bgcolor=\"$bg\" align=center><a href=\"http://$hp\" target=_blank><img src=\"$hpicon\" border=0 alt=\"HOME\"></a></td>\n";
			}	else	{
				print "<td bgcolor=\"$bg\">　</td>\n";
			}
		}
		if ( $ans ne '' )	{
			if ( $pillo == 1 )	{
				print "<td bgcolor=\"$bg\" align=center><img src=\"$ans_gif\" alt=\"$ans_com\"></td>\n";
			}	else	{
				print "<td bgcolor=\"$bg\">　</td>\n";
			}
		}
		if ( $comment ne '' )	{
			print "<td bgcolor=\"$bg\"><font color=\"$tx\">$comment</font></td>\n";
		}	else	{
			print "<td bgcolor=\"$bg\">　</font></td>\n";
		}
		print "<td bgcolor=\"$bg\" align=center nowrap><font color=\"$tx\"><small>$regdate<br>No.$no</small></font></td></tr>\n";
		$z++;
	}
	print "</table><br>\n";
	if ( $dm % $pagemax == 0) {
		$p = $dm / $pagemax ;
	}	else	{
		$p = $dm / $pagemax + 1;
	}			
	$p = sprintf("%3d",$p);
	print "<form action=$script method=$method>\n";
	print "<input type=hidden name=\"action\" value=\"$FORM{'action'}\">\n";	#i000429
	print "<input type=hidden name=\"area2\" value=\"$FORM{'area2'}\">\n";
	print "<input type=hidden name=\"findname\" value=\"$FORM{'findname'}\">\n";
	print "<input type=hidden name=\"disppage\" value=$disppage>\n";
	if ( $disppage != 0 && $disppage !=1)	{
		print "<input type=submit name=\"page\" value=BACK class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">\n";
	}	
	if ( $disppage + 1 <= $p )	{
		print "<input type=submit name=\"page\" value=NEXT class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">\n";
	}
	print "</form><br><hr width=\"$tsz\">\n";
	print "<form action=\"$script\" method=\"$method\">\n";
	print "<font color=\"$dc_color\">● 「No」と「Pass」を指定すると修正・削除が行えます。 ●</font><br>\n";
	print "No<input type=text name=\"no\" size=5>\n";
	print "Pass<input type=password name=\"pass\" size=10>\n";
	print "<select name=proc>\n";
	print "<option value=\"edit\">edit";
	print "<option value=\"delete\">delete";
	print "</select>\n";
	print "<input type=hidden name=\"action\" value=\"maintenance\">\n";
	print "<input type=submit value=\"update\" class=\"button\" onMouseOver=\"this.style.background='$h_bg'\" onMouseOut=\"this.style.background='$button_bg'\">\n";
	print "</form></div>\n";	
}
###<--------------------------------------------------------------
###<---   ログ出力
###<--------------------------------------------------------------
sub	regist	{
	if ( $FORM{'name'} eq "")	{	&error("ハンドルネームを入力して下さい。") ;	}
	&filelock ;		#ファイルロック
	&dataread ;

	$dcnt = @LOG;	if ($dcnt >= $datamax) {	pop(@LOG);	}

	if ( $dcnt < 1 )	{
		$no = 1;									#１件目
	}	else	{
		($dummy,$no,$dummy) = split(/,/,$LOG[0]);					#最新記事No取得
		$no++;
	}

	# パスワードの暗号化（crypt関数使用））
	if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass = '' ; }
	unshift(@LOG,"$FORM{'area'},$no,$FORM{'name'},$FORM{'email'},$FORM{'fan'},$FORM{'member'},$FORM{'sex'},$FORM{'hp'},$FORM{'ans'},$FORM{'comment'},$today,$pass\n");

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

	&fileunlock ;	#ファイルロック解除

	if ($lono == 1) {
		print "Content-type: text/html\n\n";
		print "<html><head>\n";
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0 URL=$script?\">\n";
		print "</head><body></body></html>\n";
	} else {
		print "Location: $script?\n\n";
	}
	exit ;

}
###<--------------------------------------------------------------
###<---   メンテナンスモード
###<--------------------------------------------------------------
sub Maintenance {
	if ( $FORM{'no'} eq "")	{	&error("メンテナンスする記事Noを入力して下さい。") ;	}
	if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい") ;	}

	$found = 0 ;
	&dataread ;
	foreach ( @LOG )	{ 
		($address,$n,$name,$email,$fanreki,$memberlove,$sex,$hp,$pillo,$comment,$regdate,$p) = split(/,/,$_);
		chop $p ;
		if ( $FORM{'no'} eq $n )	{		
			$found = 1 ;
			if ($FORM{'pass'} ne $master_password && (&pass_dec($p))) { &error("パスワードが違います。"); }
			if ( $FORM{'proc'} eq "delete" )	{
				&update ;
				exit;
			}
			$c_fanreki = $fanreki; $c_memberlove = $memberlove ;
			$c_address = $address ;	$c_sex = $sex ;
			$c_name = $name ;	$c_email = $email ;	$c_hp = $hp ;	$c_ans = $pillo ;
			$c_comment = $comment ; 	$c_comment =~ s/\<br\>/\n/g;	$c_pass = $FORM{'pass'} ;	
			&forminput ;
			last;
		}
	}
	if ( $found == 0 )	{
		&error("該当する記事Noのデータは存在していません。");
	}
	&footer ;
	exit;
}

###<--------------------------------------------------------------
###<---   ログファイル更新
###<--------------------------------------------------------------
sub update {

	&filelock ;		#ファイルロック
	&dataread ;
    foreach (@LOG) {
		($dummy,$no,$dummy) = split(/,/,$_);
		if ( $FORM{'no'} eq $no)	{								#<<<メンテ対象者の場合
			if ( $FORM{'proc'} eq "edit" )	{
				# パスワードの暗号化（crypt関数使用））
				if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass = '' ; }
				push(@new,"$FORM{'area'},$no,$FORM{'name'},$FORM{'email'},$FORM{'fan'},$FORM{'member'},$FORM{'sex'},$FORM{'hp'},$FORM{'ans'},$FORM{'comment'},$today,$pass\n");
			}
		}	else	{
			push(@new,"$_"); 								#<<<そのまま出力
		}
	}
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除

	#メインCGIに戻る
	if ($lono == 1) {
		print "Content-type: text/html\n\n";
		print "<html><head>\n";
		print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0 URL=$script?\">\n";
		print "</head><body></body></html>\n";
	} else {
		print "Location: $script?\n\n";
	}
								
}
###<--------------------------------------------------------------
###<---   全国制覇状況表示
###<--------------------------------------------------------------
sub seiha {
	&header ;
	print "<center>\n";
	print "<img src=\"$titlelogo\"><p>\n";
	print "*-- $area_title --*<p>\n";
	print "| <a href=\"$script\">Back</a> \n";
	print "| <a href=$script?action=ldisp>$con_title</a> |\n";
	print "<br>\n";
	&dataread ;
	for ( @LOG )	{ 
		($address,$no,$name,$email,$fanreki,$memberlove,$sex,$hp,$pillo,$comment,$regdate,$p) = split(/,/,$_);
		$area = sprintf("%02d",$address) ;
		$touroku{$address}++ ;
	}

	print "<br><br>登録した内容が反映されていない場合は、ブラウザの「更新」ボタンを押して下さい\n";
	print "<br>（）内の数字はその地域の合格者数です。\n";
	print "<br><br><table width=50% cellpadding=2 cellspacing=0 border=1>\n";
	print "<tr>\n";
	$j = 1 ;
	for ( $i = 0 ; $i <= 47 ; $i++ )	{
		$i = sprintf("%02d",$i) ;
		print "<td bgcolor=\"$tbgcolor\" align=center nowrap width=100>$areatbl[$i]</td>\n";
		if ( $touroku{$i} )	{
			print "<td bgcolor=\"$tbgcolor\" nowrap><font color=\"#ff80e6\">$seiha&nbsp;($touroku{$i})</font></td>\n";
		}	else	{
			print "<td bgcolor=\"$tbgcolor\" width=50 nowrap >&nbsp;</td>\n";
		}
		$j++ ;
		if ( $j > 4 ) { 
			print "</tr>\n";
			print "<tr>\n" if ( $i != 47 ) ;
			$j = 1 ;
		}
	}
	print "</table><p>\n";

	&footer;
	exit;
}

###<--------------------------------------------------------------
###<---   選択肢2状況表示
###<--------------------------------------------------------------
sub love {
	&header ;
	print "<center>\n";
	print "<img src=\"$titlelogo\"><p>\n";
	print "*-- $con_title --*<p>\n";
	print "| <a href=\"$script\">Back</a> \n";
	print "| <a href=$script?action=disp>$area_title</a> |\n";
	print "<br>\n";
	&dataread ;
	for ( @LOG )	{ 
		($address,$no,$name,$email,$fanreki,$memberlove,$sex,$hp,$pillo,$comment,$regdate,$p) = split(/,/,$_);
		$member = sprintf("%02d",$memberlove) ;
		$touroku2{$memberlove}++ ;
	}
	print "<br><br>登録した内容が反映されていない場合は、ブラウザの「更新」ボタンを押して下さい\n";
	print "<br>（）内の数字は合格者数です。\n";
	print "<br><br><table cellpadding=2 cellspacing=0 border=1>\n";
	print "<tr>\n";
	$j = 1 ;
	for ( $i = 0 ; $i <= $sel_all-1 ; $i++ )	{
		$i = sprintf("%02d",$i) ;
		print "<td bgcolor=\"$tbgcolor\" align=center nowrap>$membertbl[$i]</td>\n";
		if ( $touroku2{$i} )	{
			print "<td bgcolor=\"$tbgcolor\" nowrap width=65><font color=\"#ff80e6\">$love&nbsp;($touroku2{$i})</font></td>\n";
		}	else	{
			print "<td bgcolor=\"$tbgcolor\" nowrap width=65>&nbsp;</td>\n";
		}
		$j++ ;
		if ( $j > $sel ) { 
			print "</tr>\n";
			print "<tr>\n" if ( $i != $sel_all-1 ) ;
			$j = 1 ;
		}
	}
	print "</table><p>\n";

	&footer;
	exit;
}

###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {
	&header ;
	print "<br><br>$_[0]\n";
	&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); }
}
###<-------------------------------------------------------------
###<---   パスワード暗号化
###<--------------------------------------------------------------
sub pass_enc {
	if ( $ango == 1 ) {
		$pass = crypt($_[0], $_[0]);
	}	else	{
		$pass = $_[0];
	}
}
###<-------------------------------------------------------------
###<---   パスワードチェック
###<--------------------------------------------------------------
sub pass_dec {
	if ( $ango == 1 ) {
		if ($_[0] ne '' && ( crypt($FORM{'pass'}, $_[0]) eq $_[0]) )  {	
			return 0 ;
		}
	}	else	{
		if ($FORM{'pass'} eq $_[0]) {	
			return 0 ;
		}
	}
	return 1;
}


## --- カウンタ処理(v1.0307)
sub counter {
	# 閲覧時のみカウントアップ
	$match=0;
	if ($FORM{'mode'} eq '') {
		# カウンタロック
		if ($lockkey) { &lock3; }

		$match=1;
	}

	# カウントファイルを読みこみ
	open(NO,"$cntfile") || &error("Can't open $cntfile",'0');
	$cnt = <NO>;
	close(NO);

	# カウントアップ
	if ($match) { $cnt++; }

	# 更新
	open(OUT,">$cntfile") || &error("Write Error : $cntfile");
	print OUT $cnt;
	close(OUT);

	# カウンタロック解除
	if (-e $cntlock) { unlink($cntlock); }

	# 桁数調整
	while(length($cnt) < $mini_fig) { $cnt = '0' . "$cnt"; }
	@cnts = split(//,$cnt);

	print "<DIV align=\"$cnt_pl\">\n";

	# GIFカウンタ表示
	if ($counter == 2) {
		foreach (0 .. $#cnts) {
			print "<img src=\"$gif_path/$cnts[$_]\.gif\" alt=\"$cnts[$_]\" width=\"$mini_w\" height=\"$mini_h\">";
		}

	# テキストカウンタ表示
	} else {
		print "<font color=\"$cnt_color\" face=\"verdana,Times New Roman,Arial\">$cnt</font>";
	}

	print "</DIV>\n";
}

## --- カウンタロック
sub lock3 {
	$cnt_flag = 0;
	foreach (1 .. 7) {
		if (-e $cntlock) { sleep(1); }
		else {
			open(LOCK,">$cntlock");
			close(LOCK);
			$cnt_flag = 1;
			last;
		}
	}
	if (!$cnt_flag) { unlink($cntlock); }
}
