#!/usr/bin/perl

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#
#        ☆　Apus 1.03　☆
#
#        kz island (keiko)
#        http://www.kz-island.net/
#
#
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#
#    ◆必要なファイル
#      ・apus.cgi[755]
#      ・jcode.pl[755]
#      ・log.txt（ログ保存用）[666]
#
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

################### 初期設定 ここから ################################

#★マークは必ず設定を変更してください。

#日本語変換ライブラリ
require "jcode.pl";

#★管理人の名前
$me = "KUMO";

#★パスワード
$pass = "isama";

#★戻り先URL
$home = "http://contest.thinkquest.gr.jp/tqj2002/50205/frontindex.html";

#上で指定したURLのターゲット(<a href="戻り先URL" target="この部分!">）
#フレームを使っている場合、適当に変えてください。
$home_target = "_self";

#このファイル名
$file = "apus.cgi";

#ログ用ファイル名
$logfile = "apus.log";
$logfile2 = "apus2.log";


#---------------------------------------------------------------------
#####   表示の設定   #####
#---------------------------------------------------------------------

#下の「スタイルシートの設定」でさらに細かい設定が可能です(^^)

#タイトル
$main_title = " * ひかりめいろ  B B S *";

#タイトルに画像を使う場合、画像の指定（使わない場合は"")
$title_img = "";

#サブタイトル（管理人からのメッセージなど）
$sub_title = "<center>疑問や質問、このページの感想など気軽に書き込んでください！<BR>コメントの編集の権利は、管理者に属します。<BR>
高度な内容については、お答えできないことがあります。<br><br><font color=\"blue\">同じような質問がされている場合があります。<br>質問をする前に、２枚目くらいまでの過去の書きこみも見てみてください</font></center>";

#タイトルのフォント
$title_font = "Times New Roman";

#タイトルの色
$title_color = "#666666";

#文字色
$text_color = "#666666";

#文字の大きさ
$font_size = "10pt";

#背景色
$bgcolor = "#FFFFFF";

#背景画像
$background = "";

#テーブルの幅
$table_width = "400px";

#テーブルの枠の色
$table_border = "skyblue";

#テーブルの枠の2重線の間隔（0にすると1重線になります）
$cellspacing = 2;

#テーブルの枠線の太さ
$border_width = 1;

#テーブルの背景色
$table_bgcolor = "#FFFFFF";

#リンクの文字色
$link_color = "#666666";

#訪問したリンクの文字色
$vlink_color = "#666666";

#アクティブなリンクの文字色
$alink_color = "#666666";

#リンクにマウスをのせたときの文字色
$hlink_color = "#666666";

#リンクにマウスをのせたときの背景色
$hlink_bgcolor = "#FFCC99";

#タイトルの前の■（親記事）と●（レス記事）の色
$symbol_color="#FFCC99";

#入力欄の文字色（IE4以上、NN6以上でのみ反映)
$input_color = "#666666";

#入力欄の枠の色（IE4以上、NN6以上でのみ反映)
$input_border = "powderblue";

#入力欄の背景の色（IE4以上、NN6以上のみ反映）
$input_bgcolor = "lightyellow";

#マウスをのせたときの入力欄の背景の色
#（IE4以上、NN6以上でJavaが有効の時のみ反映）
$input_bgcolor2 = "#FFCC99";

#区切り線の色
$hr_color="powderblue";

#ホームページへのリンクに使うアイコン（使わない場合は"")
$hp_img = "";

#メールに使うアイコン（使わない場合は""）
$email_img = "";

#レスに使うアイコン（使わない場合は""）
$res_img = "";

#曲（MIDI）（曲を鳴らさない場合は"")
$midi = "";

#---------------------------------------------------------------------
#####   動作の設定   #####
#---------------------------------------------------------------------

#親記事の保存数
$max = 12000;

#1ページに表示する件数
$pagemax = 15;

#レスを付けた記事が一番上に来るようにする(yes=1,no=0)
#途中で設定を変ると変更前に投稿された記事も並び変えます。
#yesにした場合、ちょっと重いかもしれません。
$res_sort = 1;

#---------------------------------------------------------------------
#####   投稿時の文字色の設定   #####
#---------------------------------------------------------------------

#投稿するときに文字色を選べるようにする(yes=1,no=0)
$color_use = 1;

#文字色を選べるように設定したとき、文字色の指定
#（いくつでも増やせますが、増やしすぎるとテーブルの幅が広がって表示が乱れます。）
@colors = ('#666666','mediumslateblue','lightcoral','lightsalmon','mediumseagreen','plum','burlywood');

#文字色を選べるように設定したとき、色見本の形（★や●にするとおもしろいかも？）
$color_symbol = "■";

#---------------------------------------------------------------------
#####   投稿時のアイコンの設定   #####
#---------------------------------------------------------------------

#投稿するときにアイコンを選べるようにする(yes=1,no=0)
$icon_use = 0;

#アイコンを選べるように設定したとき、アイコンのあるディレクトリの指定
$icon_dir = "icon";

#アイコンの選択肢に「ランダム」を入れる
#（「ランダム」を選択すると、下で登録したアイコンの中からランダムに選ばれます。）
$iconrand_use = 1;

#アイコンを選べるように設定したとき、アイコンの設定
#アイコンの名前				#画像の指定
$icon_name[0] = "あっぷる";		$icon_img[0] = "appler.gif";
$icon_name[1] = "すとろべりー";		$icon_img[1] = "sberry.gif";
$icon_name[2] = "ぶるーべりー";		$icon_img[2] = "bberry.gif";
$icon_name[3] = "らずべりー";		$icon_img[3] = "rberry.gif";
$icon_name[4] = "ぐれーぷ";		$icon_img[4] = "grape.gif";
$icon_name[5] = "ちぇりー";		$icon_img[5] = "cherry.gif";
$icon_name[6] = "ぴーち";		$icon_img[6] = "peach2.gif";
$icon_name[7] = "らいち";		$icon_img[7] = "raichi.gif";
$icon_name[8] = "すいか";		$icon_img[8] = "wmelon3.gif";
$icon_name[9] = "とまと";		$icon_img[9] = "tomato.gif";
$icon_name[10] = "なす";		$icon_img[10] = "eggplant.gif";
$icon_name[11] = "たまねぎ";		$icon_img[11] = "onion.gif";
$icon_name[12] = "きゃべつ";		$icon_img[12] = "cabbage.gif";
$icon_name[13] = "かぶ";		$icon_img[13] = "radish.gif";
$icon_name[14] = "かぼちゃ";		$icon_img[14] = "pumpkin2.gif";
$icon_name[15] = "とうがらし";		$icon_img[15] = "capsicum.gif";
$icon_name[16] = "アイコンなし";		$icon_img[16] = "";
#以下、同じように増やしていけば、アイコンをいくつでも設定可能。

#---------------------------------------------------------------------
#####   管理人用文字色・アイコンの設定   #####
#---------------------------------------------------------------------

#アイコンを選べるように設定したとき、管理人用アイコン・文字色の指定（使わない場合は"")
#「管理人の名前」で投稿すると、このアイコン・文字色になります。）

#管理人の名前		#管理人用文字色			#管理人用アイコン
$kanrinin[0] = "keiko";	$kanri_color[0] = "sandybrown";	$kanri_icon[0] = "peary.gif";
$kanrinin[1] = "kanri";	$kanri_color[1] = "red";	$kanri_icon[1] = "capsicum.gif";

#---------------------------------------------------------------------
#####   訪問者別メッセージの設定   #####
#---------------------------------------------------------------------

#クッキーを使って訪問者別にメッセージを表示することができます。
#過去に書き込んだことのある人にのみ表示されます。

#訪問者別メッセージを使う(使う:1、使わない:0)
$visit_use = 1;

#訪問者別メッセージを使うように設定したとき、メッセージの設定
#訪問者の名前には、掲示板で書かれた名前を入れます。

#訪問者の名前				#メッセージ
$visitor[0] = "keiko";			$visit_message[0] = "keikoさん、こんにちわ！";
$visitor[1] = "yosuke";			$visit_message[1] = "yosukeさん、メッセージをどうぞ";
#以下、同じように増やしていけば、いくつでも設定可能。

sub else_message {	#この行は消さないこと。

#上で指定した人以外の場合（使わない場合は""）
#「$else_visitor」に訪問者の名前が入ります。
$else_message = "<p align=center>$else_visitorさん 雲つかを活用していってくださいね。</p>";

}			#この行は消さないこと。

#---------------------------------------------------------------------
#####   セキュリティに関する設定   #####
#---------------------------------------------------------------------

#禁止するタグ（いくつでも増やせます。）
#もともと設定してあるタグを消した場合、記事投稿時のタグのミスによって表示が乱れたり、投稿できなくなったりする場合があります。
@errtag = ('html','meta','body','!--','embed','table','meta','tr','td','th','script','frame','form','input','bgsound','applet','url');

#上で設定したタグに関係なく、すべてのタグを禁止(禁止:1、禁止しない:0)
#タグが機能を持たず、そのまま表示されるようになります。
$tag_all = 0;

#投稿時により厳しくチェックする(する:1、しない:0)
#Eメールアドレスが正しくなかったり
#サブジェクトや名前にタグが入っていると投稿できなくします。
$toukou_filter = 1;

#アクセス制限するプロバイダ名（いくつでも増やせます。）
#例：@shut_out = ('so-net','meshnet','.com');
@shut_out = ('.br','.do','.ar','.mx','.cx');

#proxy経由ではアクセスできないようにする(する:1、しない:0)
$proxy = 0;

#他の場所から投稿できないようにする
#http://からこの掲示板のURLを指定します。使わない場合は""
$toukou_url = "";

#投稿時のコメントの最大文字数
$letter_max = "4500";

#---------------------------------------------------------------------
#####   ちょっと高度（？）な設定  #####
#---------------------------------------------------------------------

#暗号化方式は？(使わない:0、DES方式:1、MD5方式:2)
#お使いのプロバイダーやサーバに問い合わせてみてください。
#記事削除・編集時にエラーが出る場合、変えてみてください。
#推奨は1か2です。(0にするとパスワードが漏れる可能性大です）
$crypt = 1;

#ロック機能を使う(使う:1、使わない:0)
#推奨「使う：1」
#「混み合っています」と常に表示される場合、使わないように設定してください。
$lock_use = 0;

#ロックファイル（アップロードの必要はありません）
$lockfile = "apus.lock";

#メソッド（get or post)
$method = "POST";

#クッキーのパス(どこからクッキーが読み出せるか)を設定する(する:1、しない:0)
#独自ドメインでレンタル掲示板をやっている場合は1の方がいいです。
$path_use = 1;

#パス設定
#独自ドメインの場合は変更しなくてかまいません。
$path = "/50205/";

#---------------------------------------------------------------------
#####   スタイルシートの設定   #####
#---------------------------------------------------------------------
#スタイルシートがわかる人は適当に変更してください。
#「$ほにゃらら」には、上で設定した値が入ります。

$style = <<"HTML";
<style type="text/css">
<!--
body,td	{color : $text_color; font-size : $font_size; }

a:link	{color : $link_color; text-decoration : none; }
a:visited	{color : $vlink_color; text-decoration : none; }
a:active	{color : $alink_color; text-decoration : none; }
a:hover	{color : $hlink_color; text-decoration : underline overline blink; background-color : $hlink_bgcolor;
}
input,textarea,select{border-left:1px solid $input_border;
border-right:2px solid $input_border;
border-top:1px solid $input_border;
border-bottom:2px solid $input_border;
background-color : $input_bgcolor; color : $input_color; }

.noborder { border-left:0px solid $input_border;
border-right:0px solid $input_border;
border-top:0px solid $input_border;
border-bottom:0px solid $input_border;
background-color : $table_bgcolor ;color : $input_color; }

-->
</style>

HTML


################### 初期設定 ここまで ################################

#-------！！！！！ここから先はいじらない方がいいです！！！！！--------

#バージョン
$version = "ver 1.03";

if($lock_use == 1){

	&lock;

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

#------------------- フォームデコード --------------------------------

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

#------------------ IP取得 -----------------------------------------

$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq "$addr") {
	($p1,$p2,$p3,$p4) = split(/\./,$addr);
	$temp = pack("C4",$p1,$p2,$p3,$p4);
	$host = gethostbyaddr("$temp", 2);
	if ($host eq "") { $host = $addr; }
}

#---------- アクセス制限 ----------
&shutout;

#------------------- 配列変数にログファイルの中身を代入 --------------
if (!open (DATA,"$logfile")) { &error(bad_file); }
@DATA = <DATA>;
close(DATA);

#<m>-logfile2を開く
if (!open (DATA2,"$logfile2")) { &error(bad_file); }
@DATA2 = <DATA2>;
close(DATA2);

#------------------- 管理モード --------------------------------------
&getcookie;
if($COOKIE{'admin'} eq $pass){
	$main_mode = "admin";	
}
elsif($FORM{'update'} eq "admin"){
	if($FORM{'up_password'} ne $pass){ &error('bad_pass');	}
	else {	
		$main_mode = "admin";
		$admin_pass = $pass;
		$apus_t_cookie = "admin<>$admin_pass";
		print "Set-Cookie: Apus_temp=$apus_t_cookie;\n";

	}
}


#------------------- 分岐 --------------------------------------------
if($FORM{'action'} eq "resist")	{	&resist;	&main_html;	}
elsif($FORM{'action'} eq "res")	{	&res_html;	}
elsif($FORM{'action'} eq "res_resist"){		&resist;	&main_html;	}
elsif($FORM{'action'} eq "edit_resist"){	&edit;	&main_html;	}
elsif($FORM{'action'} eq "edit")	{
	if($FORM{'update'} eq "edit")	{	&edit_html;	}
	elsif($FORM{'update'} eq "delete")	{	&delete;	&main_html;	}
	else	{	&main_html;	}
}
elsif($FORM{'action'} eq "icon")	{	&icons_html;	}
else	{	&main_html;	}


#---------------------------------------------------------------------
#####   メイン表示部   #####
#---------------------------------------------------------------------

sub main_html {

	$mode = "main";

	$title = $main_title;

	#入力欄(input)のvalueを決定
	$name_value = $COOKIE{'name'};
	if ($COOKIE{'hp'}) {	$hp_value = $COOKIE{'hp'};}
	else			{	$hp_value = "http://";}
	$email_value = $COOKIE{'email'};
	$password_value = $COOKIE{'password'};
	$color_flag = 0;
	foreach $selected_color (@colors) {
		if($COOKIE{'color'} eq $colors[$c]){
			$ccheck_value[$c] = "checked";
			$color_flag = 1;
		}
		$c++;
	}
	if($color_flag == 0){	$ccheck_value[0] = "checked";	}
	$ico = 0;
	$icon_flag = 0;
	foreach $selected_icon (@icon_name) {
		if($COOKIE{'icon'} eq $icon_img[$ico]){
			$iselected_value[$ico] = "selected";
			last;
		}
		$ico++;
	}

	#訪問者別メッセージの決定
	$m = 0;
	$visit_flag = 0;
	if($visit_use == 1 && $COOKIE{'name'} ne ""){
		foreach $_ (@visitor) {
			if($_ eq $COOKIE{'name'}){
				$message = $visit_message[$m];
				$visit_flag = 1;
				last;
			}
			$m++;
		}
		if($visit_flag == 0){
			$else_visitor = $COOKIE{'name'};
			&else_message;
			$message = $else_message;
		}
		if($message ne ""){
			$message = "$message<br>";
		}
	}


	$action = resist;

	#----- 表示部分 -----
	&header;
	print "<p></p><br>\n";
	&input;

	print "<form action=$file method=$method>\n";
	print "<input type=hidden name=action value=edit>\n";

	&log_show;

print<<"HTML";
<br>
<br>
<div align="center">
    <table border="0" cellpadding="3">
      <tr>
        <td>
          Pass <input type="password" name="up_password" size="8">
        </td>
        <td> 
          <select name="update">
            <option value="edit">edit</option>
            <option value="delete">delete</option>
            <option value="admin">admin</option>
          </select>
        </td>
        <td> 
          <input type="submit" value="update" onMouseOver="this.style.background='$input_bgcolor2'" onMouseOut="this.style.background='$input_bgcolor'">
        </td>
      </tr>
    </table>
</div>
</form>
HTML

	#---------- NEXT、BACKボタン ----------
	if ($pagemode eq "pageedit") {	$action = "edit$pass";}
	#管理モードだったら
	else	{	$action = "pagemain"	}

	print "<div align=center>\n";
	if($log_start > 0 || ($log_sum + 1) < $count){
		print "<table border=0 width=$table_width>\n<tr>\n<td><hr noshade size=1 color=$hr_color></td></tr></table>\n";
	}
	print "<table border=0 width=$table_width cellspacing=3>\n<tr>\n<td>\n";
	print "<div align=right>\n";
	print "<form action=\"$file\" method=\"$method\">\n";
	print "<input type=\"hidden\" name=\"action\" value=\"$action\">\n";
	print "<input type=hidden name=page value=$this_page>\n";
	if($log_start > 0){
		print "<input type=submit name=back value=BACK onMouseOver=this.style.background=\'$input_bgcolor2\' onMouseOut=this.style.background=\'$input_bgcolor\'>\n";
	}
	if($log_sum < $count){
		print "<input type=submit name=next value=NEXT onMouseOver=this.style.background=\'$input_bgcolor2\' onMouseOut=this.style.background=\'$input_bgcolor\'>\n";
	}

	#管理モード
	if($main_mode eq "admin"){
		print "<input type=\"hidden\" name=\"up_password\" value=\"$pass\">\n";
		print "<input type=\"hidden\" name=\"update\" value=\"admin\">\n";
	}

	print "</form></div>\n</td>\n</tr>\n</table>\n</div>\n";


	&footer;
}

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

sub log_show {

	print "<div align=center>\n";

#普通の順序で並べる
if($res_sort == 0){

	#-- 親記事を別配列に --
	foreach $line (@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
		if($resnum eq "m"){
			push(@MAIN,$line);
		}
	}
}

#レスのついた記事を上に持ってくる
elsif($res_sort == 1){
	$flag = 0;
	foreach $line (@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);

		#親記事だったら・・・
		if($resnum eq "m"){
			foreach $temp (@TEMPS) {
				if($temp eq $num){
					$flag = 1;
					last;
				}
			}
			#TEMPSに入ってなかったら加える。
			if($flag == 0){	push(@TEMPS,$num);	}
		}

		#レス記事だったら・・・
		else{
			foreach $temp (@TEMPS) {
				if($temp eq $resnum){
					$flag = 1;
					last;
				}
			}
			#TEMPSに入ってなかったら加える。
			if($flag == 0){	push(@TEMPS,$resnum);	}
		}
		$flag = 0;

	}
	#TEMPを調べて、親記事を別配列に
	foreach $temp (@TEMPS) {
		foreach $line (@DATA) {
			($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
			if($temp == $num){	
				push(@MAIN,$line);
				last;
			}

		}
	}

}

	$count = @MAIN;

	#-- レス記事のために配列を逆にする --
	@DATA = reverse(@DATA);

	#ページ処理
	if($FORM{'page'} eq ""){
		$log_start = 0;	$this_page = 1;
	}
	else{
		if($FORM{'back'} eq "BACK"){	
			$log_start = ($FORM{'page'} - 2) * $pagemax;
			$this_page = $FORM{'page'} - 1;
		}
		elsif($FORM{'next'} eq "NEXT"){	
			$log_start = $FORM{'page'} * $pagemax;
			$this_page = $FORM{'page'} + 1;
		}
		else{
			$log_start = ($FORM{'page'} - 1) * $pagemax;
			$this_page = $FORM{'page'};
		}
	}

	$log_count = 0;
	$log_sum = $log_start + $pagemax;

	#親記事を表示しながらレス記事を表示
	foreach $line (@MAIN) {

		if($log_count >= $log_sum){	last;	}

		if($log_count >= $log_start){


		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);

&kiji1;

#ここからレス記事の処理
foreach $res_line (@DATA) {

	($r_num,$r_resnum,$r_date,$r_name,$r_subject,$r_email,$r_hp,$r_comment,$r_password,$r_host,$r_color,$r_icon,$d3) = split(/\,/,$res_line);

	if($r_resnum eq $num){	&kiji2;	}
}

&kiji3;
}
	$log_count++;

	}

	print "</div>\n";

}

#---------------------------------------------------------------------
#####   編集画面   #####
#---------------------------------------------------------------------

sub edit_html {

	#アップデートしたい記事にチェックがついていなかったらエラー
	if($FORM{'up_num'} eq ""){	&error(bad_update);	}

	#タイトル
	$title ="記事編集";

	#該当記事が見つかったか調べるフラグ
	$edit_flag = 0;

	#アクションの決定
	$action = edit_resist;
	$res_symbol = "<input type=hidden name=edit_num value=$FORM{'up_num'}>";

	#編集対象記事の検索とパスワード認証
	foreach $line(@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
		if ($num == $FORM{'up_num'}){

			if(!&pass_check($password) && $FORM{'up_password'} ne $pass){
				&error(bad_pass);
			}
	
			$target = $i;
			$edit_flag = 1;
			last;
		}
		$i++;
	}

	if($edit_flag == 0){	&error('bad_target');	}

	#入力欄(input)のvalueを決定
	($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,@DATA[$target]);
	$name_value = $name;
	$email_value = $email;
	if ($hp) {	$hp_value = $hp;}
	else			{	$hp_value = "http://";}
	$subject_value = $subject;
	$comment_value = $comment;
	$password_value = $password;
	$color_flag = 0;
	foreach $selected_color (@colors) {
		if($color eq $colors[$c]){
			$ccheck_value[$c] = "checked";
			$color_flag = 1;
		}
		$c++;
	}
	if($color_flag == 0){	$ccheck_value[0] = "checked";	}
	$ico = 0;
	foreach $selected_icon (@icon_name) {
		if($icon eq $icon_img[$ico]){
			$iselected_value[$ico] = "selected";
			last;
		}
		$ico++;
	}


	#---------- タグを改行に ----------
	$comment_value =~ s/<br>/\r/g;

	#表示部分
	&header;
	&input;
	&footer;
}

#---------------------------------------------------------------------
#####   レス画面   #####
#---------------------------------------------------------------------

sub res_html {

	#クッキー取得

	$res_flag = 0;

	#入力欄のvalueを決める
	foreach $line (@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
		if($FORM{'res_num'} eq $num){
			$subject_value = "Re:$subject";
			$res_flag = 1;
			last;
		}
	}

	if ($res_flag == 0){	&error('bad_target');	}

	$name_value = $COOKIE{'name'};
	if ($COOKIE{'hp'}) {	$hp_value = $COOKIE{'hp'};}
	else			{	$hp_value = "http://";}
	$email_value = $COOKIE{'email'};
	$password_value = $COOKIE{'password'};
	$color_flag = 0;
	foreach $selected_color (@colors) {
		if($COOKIE{'color'} eq $colors[$c]){
			$ccheck_value[$c] = "checked";
			$color_flag = 1;
		}
		$c++;
	}
	if($color_flag == 0){	$ccheck_value[0] = "checked";	}
	$ico = 0;
	foreach $selected_icon (@icon_name) {
		if($COOKIE{'icon'} eq $icon_img[$ico]){
			$iselected_value[$ico] = "selected";
			last;
		}
		$ico++;
	}

	#タイトル
	if($subject eq "")	{	$subject = "（無題）";	}
	$title = "「$subject」へのレス";

	#アクションの決定
	$action = res_resist;
	$res_symbol = "<input type=hidden name=res_num value=$FORM{'res_num'}>";

	#表示部分
	&header;
	&input;

	$i = 0;
	print "<div align=center>\n";

	#親記事を探して表示
	foreach $line (@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);

		if($FORM{'res_num'} eq $num){
			&kiji1;
			last;
		}
		$i++;
	}

	$j = 0;
	#レスを探して表示
	foreach $res_line (@DATA) {

		($r_num,$r_resnum,$r_date,$r_name,$r_subject,$r_email,$r_hp,$r_comment,$r_password,$r_host,$r_color,$r_icon,$r_d3) = split(/\,/,$res_line);

		if($r_resnum eq $num){
			#配列に加える
			unshift(@RES,$res_line);
		}
		$j++;
		#レスは必ず親記事より上にあるので・・・
		if($j > $i) {	last;	}
	}
	foreach $_ (@RES) {
		($r_num,$r_resnum,$r_date,$r_name,$r_subject,$r_email,$r_hp,$r_comment,$r_password,$r_host,$r_color,$r_icon,$r_d3) = split(/\,/,$_);
		&kiji2;

	}

	&kiji3;

	print "</div>\n";

	&footer;
}

#---------------------------------------------------------------------
#####   アイコンのサンプル表示   #####
#---------------------------------------------------------------------

sub icons_html {
$title = "アイコン一覧";
$ico = 0;
$ico_count = @icon_name;

&header;

print "<a href=$file>△掲示板へ戻る</a>\n";
print "<div align=center><b>アイコン一覧</b></div><br><br>";
print "<div align=center>\n";
print "<table border=1 cellspacing=0 cellpadding=5>\n";

	#ランダムアイコン
	if($iconrand_use == 1){
		print "<tr>\n<td>ランダム</td>\n";
		print "<td><b>？</b></td>\n</tr>";

	}

	foreach $selected_icon (@icon_name) {
		print "<tr>\n<td>$icon_name[$ico]</td>\n";
		if($icon_img[$ico] ne ""){
			print "<td><img src=$icon_dir\/$icon_img[$ico] border=0 alt=$icon_name[$ico]></td>\n</tr>";
		}
		else {
			print "<td>　</td>\n</tr>";
		}
		$ico++;
	}

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

&footer;
}


#---------------------------------------------------------------------
#####   入力欄   #####
#---------------------------------------------------------------------

sub input {

if($mode eq "main" && $sub_title ne ""){	$sub_title = "$sub_title<br><br>";	}
else {	$sub_title = "";	}
if($title_img ne "" && $mode eq "main"){
	$title = "<img src=$title_img border=0>";
}

print<<"HTML";
  <div align="center">
   <font face="$title_font" color="$title_color"><b>$title</b></font>
   <form action="$file" method="POST">
    <input type="hidden" name="page" value="$FORM{'page'}">
    <input type="hidden" name="action" value="$action">
      $res_symbol
      $edit_symbol
    <table bordercolor="$table_border" cellpadding="10" bgcolor="$table_bgcolor" cellspacing="$cellspacing">
      <tr> 
        <td>$message$sub_title
          <table border="0" cellspacing="0">
              <tr> 
                <td colspan="4" nowrap> 
                  <div align="right">なまえ : 
                    <input type="text" size="35" name="name" value="$name_value">
                  </div>
                </td>
              </tr>
              <tr> 
                <td colspan="4" nowrap> 
                  <div align="right">題名 : 
                    <input type="text" size="35" name="subject" value="$subject_value">
                  </div>
                </td>
              </tr>
              <tr> 
                <td colspan="4" nowrap> 
                  <div align="right">E-mail : 
                    <input type="text" size="35" name="email" value="$email_value">
                  </div>
                </td>
              </tr>
              <tr> 
                <td colspan="4" nowrap> 
                  <div align="right">HP : 
                    <input type="text" size="35" name="hp" value="$hp_value">
                  </div>
                </td>
              </tr>
              <tr> 
                <td colspan="4"> 
                  <div align="right"> 
                    <textarea name="comment" rows="5" cols="45">$comment_value</textarea>
                  </div>
                </td>
              </tr>
HTML

#アイコン
if ($icon_use == 1){
	$i = 0;
	print "<tr>\n<td nowrap colspan=\"4\">\nICON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n";
	print "<select name=\"icon\">\n";
	#ランダムアイコン
	if($iconrand_use == 1){
		print "<option value=random>ランダム</option>";

	}
	foreach $selected_icon (@icon_name) {
		print "<option value=$icon_img[$i] $iselected_value[$i]>@icon_name[$i]</option>";
		$i++;
	}
	print "</select>\n";
	print "&nbsp;&nbsp;&nbsp;&nbsp;<a href=$file?action=icon>ICONサンプル</a>\n";
	print "</td>\n</tr>\n";

}
#文字色
if ($color_use == 1){
	$c = 0;
	print "<tr>\n<td nowrap colspan=\"4\">\nCOLOR&nbsp;&nbsp;\n";
	foreach $selected_color (@colors) {
		print "<input type=radio name=color value=$colors[$c] class=noborder $ccheck_value[$c]>";
		print " <font color=$colors[$c]>$color_symbol</font>\n";
		$c++;
	}
	print "</td>\n</tr>\n";
}


print<<"HTML";
              <tr> 
                <td nowrap> 
                  <input type="checkbox" name="cookie" value="on" checked class="noborder">
                  cookie</td>
                <td nowrap align="right"> Pass 
                  <input type="password" name="password" size="8" value="$COOKIE{'password'}">
                </td>
                <td nowrap align="right"> 
                  <input type="submit" name="Submit3" value="Send" onMouseOver="this.style.background='$input_bgcolor2'" onMouseOut="this.style.background='$input_bgcolor'">
                </td>
                <td nowrap align="right"> 
                  <input type="reset" name="Submit2" value="×" onMouseOver="this.style.background='$input_bgcolor2'" onMouseOut="this.style.background='$input_bgcolor'">
                </td>
              </tr>
          </table>
        </td>
      </tr>
    </table>
  </form>
</div>
  
HTML
}


#---------------------------------------------------------------------
#####   ヘッダー   #####
#---------------------------------------------------------------------

sub header {


print "Content-type: text/html\n\n";


print<<"HTML";
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>$title</title>
$style
</head>
<body text="$text_color" link="$link_color" alink="$alink_color" vlink="$vlink_cokor" bgcolor="$bgcolor" background="$background">
HTML

}

#---------------------------------------------------------------------
#####   フッター   #####
#---------------------------------------------------------------------

sub footer {

#MIDIをならす
if($midi ne ""){

print<<"HTML";
<script language="JavaScript">
<!--
if (navigator.appName == "Netscape")
document.writeln("<EMBED src=$midi autostart=true hidden=true loop=true>");
else
document.writeln("<BGSOUND src=$midi loop=infinite>");
// -->
</script>
HTML

}

print<<"HTML";
<p align="center"style="font-size:8pt">Copyright(C)2003 ThinkQuest@Japan Team 
    50205 all rights reserved | <a href="../../copyright.html" onClick='openWi12("../../common/copyright.html","cloud",350,350);return false' target="_top">Legal 
    notice</a></p><div align="right">
<a href="http://www.kz-island.net/" target="_blank">Base CGI from ☆Apus ver 1.03 by kz island</a>
</div>
</p>
</body>
</html>
HTML
exit;

}

#---------------------------------------------------------------------
#####   書き込み   #####
#---------------------------------------------------------------------

sub resist {

	#------------------ エラー -----------------------------------------

	#他サイトからの投稿を排除
	if($toukou_url){
		$referer = $ENV{'HTTP_REFERER'};
		if ($referer ne $toukou_url) {
			&error('bad_access');
		}
	}
    
	if ($FORM{'name'} eq "" || $FORM{'name'} eq " " || $FORM{'name'} eq "　") { &error(bad_name); }
	if ($FORM{'comment'} eq "" || $FORM{'comment'} eq " " || $FORM{'comment'} eq "　") { &error(bad_comment); }
	if($FORM{'password'} ne ""){
		if (length($FORM{'password'}) < 4 || length($FORM{'password'}) > 8) { &error(bad_length); }
	}
	if ( $letter_max ne '' && (length($FORM{'comment'}) > $letter_max))	{
		&error(bad_letter_length);
	}

	$count = @DATA;
	&get_time;
	$random_flag = 0;

	#---------- パスワードエンコード ----------
	&pass_enc($FORM{'password'});

	#---------- ランダムアイコン ----------
	if ($FORM{'icon'} eq "random"){
		$icon_count = @icon_name;
		srand(time);
		$icon_num = rand(time) ;
		$icon_num = $icon_num % $icon_count;
		$FORM{'icon'} = $icon_img[$icon_num];
		$random_flag = 1;
	}

	#---------- 管理者アイコン・文字色 ----------
	$k = 0;
	foreach $_ (@kanrinin) {
		if($FORM{'name'} eq $_ && $kanri_icon[$k] ne "" && $icon_use == 1){
			$FORM{'icon'} = $kanri_icon[$k];
		}
		if($FORM{'name'} eq $_ && $kanri_color[$k] ne "" && $color_use == 1){
			$FORM{'color'} = $kanri_color[$k];
		}
		$k++;
	}

	#「アイコンなし」を選択した場合
	if($FORM{'icon'} eq "selected")	{	$FORM{'icon'} = "";	}

	#サブジェクト
	if ($FORM{'subject'} eq "") {	$FORM{'subject'} = "（無題）";	}

	#<m>-logfile2から最新記事を読み込み
	#１行だけ読み込み
	open(DATA2,"$logfile2");
	$before = <DATA2> ;
	close(DATA2);

	#タグを戻す
		$before =~ s/&lt;/</g;
		$before =~ s/&gt;/>/g;

	#最新の記事
	($l_num,$l_resnum,$l_date,$l_name,$l_subject,$l_email,$l_hp,$l_comment,$l_password,$l_host,$l_d1,$l_d2,$l_d3) = split(/\,/,$before);

	#2重投稿の禁止
	if($l_name eq $FORM{'name'} && $l_comment eq $FORM{'comment'}){	&error(bad_r_resist);	}

	$num = $l_num + 1;

	if ($FORM{'hp'} eq "http://") {	$FORM{'hp'} = "";	}

	if($FORM{'action'} eq "res_resist"){
		$value = "$num\,$FORM{'res_num'}\,$date_now\,$FORM{'name'}\,$FORM{'subject'}\,$FORM{'email'}\,$FORM{'hp'}\,$FORM{'comment'}\,$password\,$host\,$FORM{'color'}\,$FORM{'icon'}\,\n";
	}
	else{
		$value = "$num\,m\,$date_now\,$FORM{'name'}\,$FORM{'subject'}\,$FORM{'email'}\,$FORM{'hp'}\,$FORM{'comment'}\,$password\,$host\,$FORM{'color'}\,$FORM{'icon'}\,\n";
	}

	&tag;
	if($toukou_filter == 1){ &filter;	}

	#<m>-mirror用の変数へ追加
	unshift(@DATA2,$value);

	#親記事保存数を越えたら削除
	if($FORM{'action'} eq "resist"){
		$i = 0;
		$main_count = 0;
		foreach $line(@DATA2) {
			($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
			if($resnum eq "m"){	
				$main_count++;
				if($main_count > $max){

					#保存数を越えた親記事の位置から最後まで削除
					#次回削除までレス記事が残る場合があるので処理が甘いかも・・・
					splice(@DATA2,$i,$count);

				}
			}
			$i++;
		}
	}

	#<m>-logfaile2へ書き込み

	if (!open(DATA2,">$logfile2")) { &error(bad_file); }
	print DATA2 @DATA2;
	close(DATA2);

	#ランダムアイコンが選択されていたらクッキー保存しない。
	if ($random_flag == 1) {	$FORM{'icon'} = "";	}

	#クッキーのセット
	if($FORM{'cookie'} eq "on")	{	&setcookie;	}

}

#---------------------------------------------------------------------
#####   削除   #####
#---------------------------------------------------------------------

sub delete {

	#アップデートしたい記事にチェックがついてなかったらエラー
	if($FORM{'up_num'} eq ""){	&error(bad_update);	}

	#削除対象記事が見つかったか調べるフラグ
	$delete_flag = 0;

	#記事削除
	foreach $line(@DATA) {
		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);
		if ($num == $FORM{'up_num'}){

			if(!&pass_check($password) && $FORM{'up_password'} ne $pass){
				&error(bad_pass);
			}

			#対象記事の削除
			splice(@DATA,$i,1);

			#削除した記事が親記事だったらレスも削除
			if($resnum eq "m"){
				for($j = 0; $j <= $i ; $j++){
					($r_num,$r_resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$DATA[$j]);
					if($FORM{'up_num'} eq $r_resnum){	splice(@DATA,$j,1);	}
				}
			}
			$delete_flag = 1;
			last;
		}
		$i++;
	}

	#対象記事が見つからなかったらエラー
	if($delete_flag == 0){	&error('bad_target');	}

	if (!open(DATA,">$logfile")) { &error(bad_file); }
	print DATA @DATA;
	close(DATA);

}

#---------------------------------------------------------------------
#####   編集   #####
#---------------------------------------------------------------------

sub edit{

	foreach $line(@DATA) {

	$random_flag = 0;

		($num,$resnum,$date,$name,$subject,$email,$hp,$comment,$password,$host,$color,$icon,$d3) = split(/\,/,$line);

		#編集対象記事が見つかったら・・・
		if ($num == $FORM{'edit_num'}){

		#---------- ランダムアイコン ----------
		if ($FORM{'icon'} eq "random"){
			$icon_count = @icon_name;
			srand(time);
			$icon_num = rand(time) ;
			$icon_num = $icon_num % $icon_count;
			$FORM{'icon'} = $icon_img[$icon_num];
			$random_flag = 1;

		}

		#---------- 管理者アイコン・文字色 ----------
		$k = 0;
		foreach $_ (@kanrinin) {
			if($FORM{'name'} eq $_ && $kanri_icon[$k] ne "" && $icon_use == 1){
				$FORM{'icon'} = $kanri_icon[$k];
			}
			if($FORM{'name'} eq $_ && $kanri_color[$k] ne "" && $color_use == 1){
				$FORM{'color'} = $kanri_color[$k];
			}
			$k++;
		}

			#---------- パスワードエンコード ----------
			&pass_enc($FORM{'password'}); 

			if ($FORM{'hp'} eq "http://") {	$FORM{'hp'} = "";	}

			#---------- フォーマット ----------
			$value = "$num\,$resnum\,$date\,$FORM{'name'}\,$FORM{'subject'}\,$FORM{'email'}\,$FORM{'hp'}\,$FORM{'comment'}\,$password\,$host\,$FORM{'color'}\,$FORM{'icon'}\,\n";

			&tag;
			if($toukou_filter == 1){ &filter;	}

			@DATA[$i] = $value;

		}
		$i++;
	}

	if (!open(DATA,">$logfile")) { &error(bad_file); }
	print DATA @DATA;
	close(DATA);

}

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

sub error {
	$error = $_[0];
	$title = "ERROR";
	if ($error eq "bad_file") { $error_msg = "ログ保存ファイル、『<b>$logfile</b>』 がないか、ファイルが開けません。"; }
	elsif ($error eq "bad_pass") { $error_msg = 'パスワードが違います。'; }
	elsif ($error eq "bad_name") { $error_msg = '名前が記入されていません。'; }
	elsif ($error eq "bad_comment") { $error_msg = 'コメントが記入されていません。'; }
	elsif ($error eq "bad_length") { $error_msg = 'パスワードは4文字以上8文字以下で入力してください。'; }
	elsif ($error eq "bad_letter_length") { $error_msg = "コメントは半角で$letter_max文字までです。"; }
	elsif ($error eq "bad_delete") { $error_msg = '削除したい記事にチェックを入れてください。'; }
	elsif ($error eq "bad_tag") { $error_msg = '使用できないタグが使われています。'; }
	elsif ($error eq "bad_filter") { $error_msg = 'E-mailが正しくないか、E-mail、HP、名前、サブジェクトにタグが入っていると投稿できません。'; }
	elsif ($error eq "bad_r_resist") { $error_msg = '2重投稿は禁止しています。'; }
	elsif ($error eq "bad_update") { $error_msg = 'アップデートしたい記事にチェックをつけてください。'; }
	elsif ($error eq "bad_host") { $error_msg = 'あなたと同じプロバイダの方を制限しています。'; }
	elsif ($error eq "bad_proxy") { $error_msg = 'proxy経由ではアクセスできません。'; }
	elsif ($error eq "bad_access") { $error_msg = '不正なアクセスです。'; }
	elsif ($error eq "bad_target") { $error_msg = '該当記事がありません。'; }

	elsif ($error eq "bad_retry") {
		$error_msg = "混み合っています。";
		unlink $lockfile;
	}

	else { $msg = '原因不明のエラーで処理を継続できません。'; }


	#------- エラー表示 -------
	&header;

	print "<div align=\"center\"><br><br><br>\n";
	print "<p><font size=\"+1\"><b>error</b></font></p>\n";

	print "<p>$error_msg</p>\n";

	print "<p><br><a href=javascript:history.back()>▲BACK</a></p>\n";
	print "</div>\n";

	&footer;
}

#---------------------------------------------------------------------
#####   ロック機能   #####
#---------------------------------------------------------------------

sub lock {

	$symlink_check = (eval { symlink("",""); },$@ eq "");
	if(!$symlink_check) {
		$c = 0;
		while (-f "$lockfile") {
			$c++;
			if($c > 3) {	&error(bad_retry);	}
			sleep(2);
		}
	}
	else{
		local($retry) = 3;
		while (!symlink(".", $lockfile)) {
			if(--$retry <= 0) {	&error(bad_retry);	}
			sleep(2);
		}
	}

}

#---------------------------------------------------------------------
#####   投稿時フィルター   #####
#---------------------------------------------------------------------

sub filter {

	if($FORM{'name'} =~ s/</&lt;/g || $FORM{'name'} =~ s/>/&gt;/g) { &error('bad_filter'); }
	if($FORM{'subject'} =~ s/</&lt;/g || $FORM{'name'} =~ s/>/&gt;/g) { &error('bad_filter'); }
	if($FORM{'email'} =~ s/</&lt;/g || $FORM{'name'} =~ s/>/&gt;/g) { &error('bad_filter'); }
	if($FORM{'hp'} =~ s/</&lt;/g || $FORM{'name'} =~ s/>/&gt;/g) { &error('bad_filter'); }

	if($FORM{'email'}){

		if ($FORM{'email'} =~ /\s|\,/) { &error('bad_filter'); }
		unless ($FORM{'email'} =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { &error('bad_filter'); }

	}

}

#---------------------------------------------------------------------
#####   タグの禁止   #####
#---------------------------------------------------------------------

sub tag {

	if($tag_all == 1){
		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;
		#ただし改行だけは元に戻す
		$value =~ s/&lt;br&gt;/<br>/ig;

	}
	else{

		#----- SSI（実際には意味なし） -----
		$value =~ s/<!--#(.|\n)*-->//ig;

		foreach ( @errtag ){
			if ($value =~ /<$_(.|\n)*>/i) {&error(bad_tag);}
		}

		#<m>-\"[url=\"の排除
			if ($value =~ /[$_(.|\n)*]/i) {&error(bad_tag);}
	}

	#---------- 改行をタグに ----------
	$value =~ s/\r/<br>/g;




}

#---------------------------------------------------------------------
#####   日付と時刻   #####
#---------------------------------------------------------------------

sub get_time {

$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);
	if ( substr($month,0,1) == 0 )	{	$month =~ s/0/ /;	}
	if ( substr($mday,0,1) == 0 )	{	$mday =~ s/0/ /;	}
	$hour = sprintf("%02d",$hour);
	$min = sprintf("%02d",$min);
	$sec = sprintf("%02d",$sec);
	$youbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
	$date_now = "$year年$month月$mday日 ($youbi) $hour:$min";

}

#---------------------------------------------------------------------
#####   クッキーのセット   #####
#---------------------------------------------------------------------

sub setcookie {


	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)
		=gmtime(time + 30*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"; }
	$mong = ('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\-$mong\-$yearg $hourg:$ming:$secg GMT";
	$apus_cookie = "name<>$FORM{'name'},email<>$FORM{'email'},hp<>$FORM{'hp'},password<>$FORM{'password'},color<>$FORM{'color'},icon<>$FORM{'icon'}";

	if ($path_use == 1) {
		print "Set-Cookie: Apus=$apus_cookie;  expires=$date_gmt; path=$path\n";
	}
	else {
		print "Set-Cookie: Apus=$apus_cookie;  expires=$date_gmt;\n";

	}


}

#---------------------------------------------------------------------
#####   クッキーの取得   #####
#---------------------------------------------------------------------

sub getcookie{
	$cookies = $ENV{'HTTP_COOKIE'};
	@pairs = split(/;/,$cookies);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ s/ //g;
		$KEY{$name} = $value;
	}
	@pairs = split(/,/,$KEY{'Apus'});
		foreach $pair (@pairs) {
			($name, $value) = split(/<>/, $pair);
			$COOKIE{$name} = $value;
		}
	@pairs = split(/,/,$KEY{'Apus_temp'});
		foreach $pair (@pairs) {
			($name, $value) = split(/<>/, $pair);
			$COOKIE{$name} = $value;
		}

}

#---------------------------------------------------------------------
#####   パスワード暗号化   #####
#---------------------------------------------------------------------

sub pass_enc {

	#DES方式
	if($crypt == 1){
		srand();
		$passwd = "himitsu";
		$xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		    . "abcdefghijklmnopqrstuvwxyz"
		    . "0123456789./";
		$salt = substr($xx, int(rand(64)), 1);
		$salt .= substr($xx, int(rand(64)), 1);
		$password = crypt($_[0], $salt);
	}

	#MD5方式
	elsif($crypt == 2){
		$password = crypt($_[0],'$1$');
	}

	else{	$password = $_[0];	}

}

#---------------------------------------------------------------------
#####   パスワードチェック   #####
#---------------------------------------------------------------------

sub pass_check {

	if ($crypt == 1) {
		#最初の2文字をとる
    		$salt = substr($_[0], 0, 2);
		#入力されたパスワードを暗号化し、保存しておいたものと一致したらＯＫ(^^)
    		if ($_[0] ne "" && $_[0] eq crypt($FORM{'up_password'}, $salt)) {
			return 1;
		}
	}
	elsif($crypt == 2) {
		if ($_[0] ne "" && $_[0] eq crypt($FORM{'up_password'},'$1$' . $_[0])) {
			return 1 ;
		}
	}
	else{
		if ($FORM{'up_password'} eq $_[0]) {return 1 ;	}
	}
	return 0;
}

#---------------------------------------------------------------------
#####   アクセス制限   #####
#---------------------------------------------------------------------

sub shutout{

	foreach $ad(@shut_out){

		if($ad ne "" && $host =~ /$ad/gi){	&error(bad_host);	}
	}

	if($proxy == 1){

		$CONNECTION = $ENV{'HTTP_PROXY_CONNECTION'};
		$INFO = $ENV{'HTTP_CACHE_INFO'};
		$VIA = $ENV{'HTTP_VIA'};

		if ( $CONNECTION ne "" || $INFO ne "" || $VIA ne "") {
		    &error(bad_proxy);
		}
	}

}

#---------------------------------------------------------------------
#####   記事表示1   #####
#---------------------------------------------------------------------

sub kiji1 {

	#コメントを整える
	$comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\" target=\"_blank\">$2$3<\/a>/g;

	#そのうち消す。
	if($subject eq ""){	$subject = "（無題）";	}

	#ホームページとメールにリンク
	if ($hp ne "") {
		if($hp_img eq ""){	$hp = "<a href=\"$hp\" target=\"_blank\">【h】</a>";	}
		else	{	$hp = "<a href=\"$hp\" target=\"_blank\"><img src=\"$hp_img\" border=\"0\"></a>";	}
	}
	if ($email ne "") {
		if($email_img eq ""){	$email = "<a href=\"mailto:$email\">【m】</a>";	}
		else	{	$email = "<a href=\"mailto:$email\"><img src=\"$email_img\" border=\"0\"></a>";	}
	}

	#レス画面だったら、ラジオボタンを表示しない
	if ($FORM{'action'} eq "res"){
		$radio = "";
	}
	#レス画面じゃなかったら・・・
	else{
		if($res_img eq "") {
			$res_mark = "<a href=$file?action=res&res_num=$num&page=$this_page>res</a>";
		}
		else {
			$res_mark = "<a href=$file?action=res&res_num=$num&page=$this_page><img src=\"$res_img\" border=\"0\"></a>"
		}
		$radio = "<input type=radio name=up_num value=$num class=noborder>";
	}

	#アイコン
	if($icon eq ""){	$show_icon = "";	}
	else{ $show_icon = "<img src=\"$icon_dir\/$icon\" border=\"0\">";	}

	#ホスト
	if($main_mode eq "admin"){	$host = "<br>$host";	}
	else{	$host = "";	}

print<<"HTML";
<br>
    <table width="$table_width" border="$border_width" bordercolor="$table_border" bgcolor="$table_bgcolor" cellspacing="$cellspacing">
      <tr>
        <td> 
          <table width="100%" border="0">
            <tr>
              <td>
                <table width="100%" border="0" cellpadding="5">
                  <tr> 
                    <td> 
                      <p><font color="$symbol_color">■</font> $subject ... $name&nbsp;&nbsp;&nbsp;$hp $email</p>
                    </td>
                    <td>$res_mark</td>
                  </tr>
                </table>
                <table width="100%" border="0" cellpadding="5">
                  <tr>
                    <td>$show_icon</td>
                    <td width="100%"> <font color="$color">$comment</font></td>
                  </tr>
                  <tr> 
                    <td colspan="2" nowrap align="right">
                      <font face="Tahoma" size="1">$date$host</font> $radio
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
HTML

}

#---------------------------------------------------------------------
#####   記事２（レス記事）   #####
#---------------------------------------------------------------------

sub kiji2{

	#コメントを整える
	$r_comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\" target=\"_blank\">$2$3<\/a>/g;

	#そのうち消す
	if($r_subject eq ""){	$r_subject = "（無題）";	}

	#ホームページとメールにリンク
	if ($r_hp ne "") {
		if($hp_img eq ""){	$r_hp = "<a href=\"$r_hp\" target=\"_blank\">【h】</a>";	}
		else	{	$r_hp = "<a href=\"$r_hp\" target=\"_blank\"><img src=\"$hp_img\" border=\"0\"></a>";	}
	}
	if ($r_email ne "") {
		if($email_img eq ""){	$r_email = "<a href=\"mailto:$r_email\">【m】</a>";	}
		else	{	$r_email = "<a href=\"mailto:$r_email\"><img src=\"$email_img\" border=\"0\"></a>";	}
	}

	#レス画面だったら、ラジオボタンを表示しない
	if ($FORM{'action'} eq "res"){
		$radio = "";
	}
	#レス画面じゃなかったら・・・
	else{
		$radio = "<input type=radio name=up_num value=$r_num class=noborder>";
	}

	#アイコン
	if($r_icon eq ""){	$show_icon = "";	}
	else{ $show_icon = "<img src=\"$icon_dir\/$r_icon\" border=\"0\">";	}

	#ホスト
	if($main_mode eq "admin"){	$r_host = "<br>$r_host";	}
	else{	$r_host = "";	}


print<<"HTML";
          <tr> 
            <td> 
              <table width="75%" border="0" align="right" bgcolor="$table_bgcolor" cellpadding="5">
                <tr> 
                 <td colspan="2"><hr noshade size="1" color="$hr_color"></td>
                </tr>
                <tr> 
                  <td colspan="2"> 
                    <p><font color="$symbol_color">●</font> $r_subject ...$r_name&nbsp;&nbsp;&nbsp$r_hp $r_email</p>
                  </td>
                </tr>
                <tr>
                  <td>$show_icon</td>
                  <td width="100%"><p><font color="$r_color">$r_comment</font></p></td>
                </tr>
                <tr> 
                    <td colspan="2" nowrap align="right">
                    <font face="Tahoma" size="1">$r_date$r_host</font> $radio
                  </td>
                </tr>
              </table>
            </td>
          </tr>
HTML

}

#---------------------------------------------------------------------
#####   記事３   #####
#---------------------------------------------------------------------

sub kiji3 {
print<<"HTML";
        </table>
       </td>
      </tr>
    </table>
<br>
HTML
}

