#!/usr/local/bin/perl

require './jcode.pl';
require './cook3.cgi';
&cookCheck;

#------------------------------------------
$ver="I-BOARD v7.2";#  (アイコンレス掲示板)
#------------------------------------------
# Copyright(C) りゅういち
# E-Mail:ryu@cj-c.com
# W W W :http://www.cj-c.com/
#------------------------------------------

##
#-------- 初期設定など ---------*
##

$met   = "POST";		# データ受け渡し方法(POST or GET)
$backurl="http://www.cablenet.ne.jp/~t5711/";	# 戻るURL(http://〜でOK)
$pass  = "571115";		  # 管理用のパスワード(半角英数字)

$title = "雑談板";	   # タイトル
$tface = "ＭＳＰゴシック"; # タイトルのフォント
$tsize = 6; 		# タイトルのサイズ
$tcolor= "#808080";	   # タイトルの色(16進数)

$text = "#808080";		# 標準文字色指定(16進数)
$bg   = "#FFFFFF";		# 背景色の指定(〃)
$link = "#8A98F4";		# 未リンク色の指定(〃)
$vlink= "#73CE91";		# 既リンク色の指定(〃)
$ttb  = "#FBD1B9";		# 汎用的な表の色(〃)
$k_back="#FFFFFF";		# 記事の中の背景色(〃)
$t_back="#808080";		# 記事題名の背景色(〃)
$t_font="#FFFFFF";		# 記事題名の文字色(〃)
$trback="#808080";		# 返信題名の背景色(〃)
$b_col ="#808080";		# 記事の表の線の色(〃)
$back = ""; 		# 背景画像をURLで指定 無しの場合は何も記入しない
$max  = 45; 		# 親記事最大保持件数
$res_n= 1;			# レスを使う?(0=NO 1=YES[A] 2=YES[B])
				# [A]=記事の下にフォーム [B]=記事とは違うページにフォーム
$res_r= 0;			# レスが付くとトップへ?(1=YES 0=NO)
$a_max= 5;			# 1ページ表示件数(レス使用時は少なめに)

$locks= 0;			# ファイルをロックする?(1=YES 0=NO)

$i_mode= 0; 		# アイコンモード?(1=YES 0=NO)
$i_dir = ".";			# アイコン画像のある場所(初期/同じディレクトリ)
$i_hei = "";			# アイコンの縦幅(ピクセル指定)
$i_wid = "";			# アイコンの横幅(〃) サイズを限定しない場合 両方記入しない

$link_i= 1; 		# URLを画像に置きかえる?(1=YES 0=NO)
$l_img = "home.gif";		# 上がYESの場合使う画像(アイコンと同じディレクトリに)
				# URLではなくて画像の名前だよ。
$h_hei = "25";			# リンク画像の縦幅(ピクセル指定)
$h_wid = "22";			# リンク画像の横幅(〃) 画像を使う場合両方記入
#---------------------------------------------------+
#				[ アイコンの設定 ]	|
# @ico1 はファイルの名前	(***.gif / ***.jpg など)|
# @ico2 はアイコンの名前	(ネコ、イヌ、クマ、とか)|
# @ico3 はランダムの画像候補(***.gif / ***.jpg など)    |
# ico1 ico2 は必ずペアで。長くなったら改行してもOK	|
# [管理者アイコン] 初期/右に設定済み			|
# [ランダム機能]   初期/左に設定済み			|
#---------------------------------------------------+
@ico1 = ('ami1.jpg',);
@ico2 = ('あみ1',);
@ico3 = ('ami1.jpg',;		# 管理者用アイコン(87行目に指定したメールアドレスで使用)
$Ico_h= 4;			# アイコン一覧で改行をする数
# 選択文字色を設定 (これは背景が初期設定の時、最適なもの)
@fonts= ('#808080','#E199FD','#8C98E8','#FD9F9D','#F0AC0F','#6AB43F','#40A495','0000FF','C100C1','FF80C0','FF8040','#FF0080','#00FFFF','#810A6F');
# トップ上部のコメント(タグ可 広告タグ可)
$com_top = <<"_COM_";

<small>
・この掲示板ではタグは使用できません<br>・他人の誹謗中傷やマナーを逸脱した書きこみはしないで下さい。<br>・場合によってはこちらで記事を削除する場合があります。<br>・この板への直リンはやめてください。
</small>

_COM_
# ↑は消しちゃダメです。

$s_ret= 0;			# 記事を見る際の制限(0=しない 1=書くとき 2=書く&読むとき)
$s_pas= "7777"; 		# 上記が1or2の場合のパスワード(半角英数2文字以上)
$bup   = 0; 		# バックアップをとる?(1=YES 0=NO)
$bup_f = "./ibbsbup.bak";	# バックアップファイル
$t_mail= 0; 		# 投稿があるとメール通知する?(1=YES 0=NO)
$mymail= 1; 		# 自分の投稿も通知する?(1=YES 0=NO)
$mail[0]='user@host.ne.jp'; # メールアドレス(メール通知時/管理者専用アイコン使用時)
$s_mail ='/usr/lib/sendmail';	# sendmailパス	( 〃 )

$t_img= ""; 		# タイトル画像をURLで指定
$twid = "135";			#  〃 の横幅(ピクセル指定)
$thei = "80";			#  〃 の縦幅( 〃 )
$wrap = "soft"; 		# フォームの改行形式(soft=手動 or hard=強制)
$cou  = 0;			# カウンタの設置(1=YES 0=NO)
$fig  = 5;			# カウンタの桁数
$c_co = "#8187FC";		# テキスト=> テキスト色
$m_wid= 8;			# 画像=> 画像の横サイズ
$m_hei= 12; 		#  〃 => 画像の縦サイズ
$m_pas= ""; 		#  〃 => 画像のあるディレクトリのパス(使用する場合のみ)
$c_f  = "./icount.dat"; 	# カウンタファイルの名前
$c_loc= "icount.loc";		# ↑のロックファイル(使用は44行目に依存/ファイル名設定のみ)
$cgi_f= "./ibbs.cgi";		# このファイル
$log  = "./ibbs.dat";		# 記録ファイル
$lockf= "./ibbs.lock";		# ロックファイル(使用は44行目に依存)
$srch = "./isrch.cgi";		# 検索/過去ログ閲覧用CGI
$tag  = 0;			# タグの使用 (YES=1 NO=0)
$a_link=1;			# URL、E-MAILだとリンクする?(1=YES 0=NO)
# -------- 過去ログ設定 --------*
$klog_s= 0; 		# 過去ログ機能を使う?(1=YES 0=NO)
$klog_c= "./ilog.log";		# 過去ログ数のカウントファイル
$klog_d= ".";			# 過去ログ生成ディレクトリ
$klog_l= 100;			# 過去ログ記録 KB 数
## ---------
$k_font="ＭＳ Ｐゴシック";	# 基本フォント(環境による)
$k_size="10pt"; 		# 基本フォントサイズ(ptは単位)
$ie_c = "#E88C8E";		# リンクを合わせた時の色(16進数 IE向け)

$fss=0; 			# フォームのスタイルシート利用(1=YES 0=NO)
#--------------------------------------+
#	[フォームのスタイルシート設定] |
# 上の項目が 1 の場合設定	       |
# わからない場合は初期設定のままが賢明 |
# $fst=StyleSheet $on/$off=JavaScript  |
#--------------------------------------+
$fst=<<"SS_";
input,textarea,select{
font-family 	:ＭＳ ゴシック;   /*文字フォント*/
font-size		:10pt;			  /* 文字サイズ */
color			:#38B85B;		  /*   文字色	*/
background-color:#FFFFFF;		  /*   背景色	*/
border			:1 dotted #FCB38B;/*線の太さ、色*/
}
SS_
# ↑は削除不可

# マウスが乗ったときや、フォーカスをえた時の動作
$on= "backgroundColor='#FFFAEE'\;";
# マウスがどいたときや、フォーカスを失った時の動作
$off="backgroundColor='#FFFFFF'\;";

$ips[0]="xxx.xxx.xxx";		# 閲覧を許可しないIPアドレス(数字/最初の3区切りを指定)
$ips[1]="yyy.yyy.yyy";		# 同じようにいくつでも指定可能
$ips[2]="zzz.zzz.zzz";

$NW[0]= "死ね"; 		# 禁止文字列 タグ使用の場合は禁止タグも入力OK
$NW[1]= "<img"; 		# 同じようにいくつでも指定可能
$NW[2]= "<script";

# -------- 設定ここまで --------*
$ag=$ENV{'HTTP_USER_AGENT'};
if($fss && $ag =~ /IE/){
$fm=" onmouseover=\"this.style.$on\" onmouseout=\"this.style.$off\"";
$ff=" onFocus=\"this.style.$on\" onBlur=\"this.style.$off\"";
$fsi="$fst";
}
$match = 0;
foreach (@ips) {
	if ($ENV{'REMOTE_ADDR'} =~ /$_/) { $match=1; last; }
}
if($match){&er_("あなたには閲覧権限がありません!");}
if($klog_s){$klog_link="　□<a href=\"$srch?mode=log\"> 過去ログ</a>\n";}
&d_code_;if($s_ret && $mo eq "" && $mode eq ""){&pas_; }
if($mode eq "bma"){ &bma_; }
if($mode eq "man"){ &man_; }
if($mode eq "wri"){ &wri_; }
if($mode eq "del"){ &del_; }
if($mode eq "s_d"){ &s_d_; }
if($mode eq "nam"){ &hen_; }
if($mode eq "h_w"){ &h_w_; }
if($mode eq "res"){ &res_; }
if($mode eq "key"){ &key_; }
if($mode eq "cop"){ &copy; }
if($mode eq "img"){ &img_; }
&html_;
#
# [パスワード認証]
#
sub pas_ {
&hed_;
print <<_PAS_;
<center><table width=90\%>
<tr bgcolor=$ttb><th>パスワード認証</th></tr>
<tr><th>*書きこむにはパスワードが必要です!<form action=$cgi_f method=$met>
<input type=password size=8 name=mo$ff>
<input type=submit value=" 認証 "$fm>
</form></th></tr></table>
_PAS_
if($s_ret==1){
print "記事の閲覧はできます(リードオンリー) <a href=\"$cgi_f?mo=R\"><b>記事を閲覧する</b></a>";
}
&foot_;
}
#
# [トップページ表示]
#
sub html_ {
if($mo ne "R"){if($s_ret && $mo ne "$s_pas"){&er_("パスワードが違います!");}}
&get_;
	open(LOG,"$log") || &er_("Can't open $log");
	@lines = <LOG>;
	close(LOG);

@NEW = ();
foreach (0 .. $#lines) {
($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$lines[$_]);

	if ($type == 0 || $type eq "") { push(@NEW,$lines[$_]); }
}
@lines = reverse(@lines);

	&hed_;
	if ($cou) { &con_; }
print "<center>\n";
	if ($t_img eq "") {
		print "<font color=$tcolor face=\"$tface\" size=$tsize>$title</font>\n";
	} elsif ($t_img ne "") {
		print "<img src=\"$t_img\" width=$twid height=$thei>\n";
	}
if($mo eq "R"){print"<hr width=90\%>";}else{
	print <<"_HTML_";
<hr width=90%>
□<a href="$backurl"> TOPPAGE</a>　
□<a href="$cgi_f?mode=man"> MANUAL</a>　
□<a href="$srch"> SEARCH</a>
$klog_link
<hr width=80%><table><tr><td>$com_top
</td></tr></table><hr width=80%>
<form action="$cgi_f" method="$met">
<input type=hidden name=mode value=wri>
<input type=hidden name=type value=0>
<table>
<tr><td bgcolor=#808080><FONT COLOR=#FFFFFF>Name</td>
<td>/<input type=text name="name" value="$c_name" size=25$ff></td>
<td bgcolor=#808080><FONT COLOR=#FFFFFF>E-Mail</td>
<td>/<input type=text name="email" value="$c_email" size=25$ff></td></tr>
<tr><td bgcolor=#808080><FONT COLOR=#FFFFFF>Title</td>
<td>/<input type=text name="d_may" size=25$ff></td>
<td bgcolor=#808080><FONT COLOR=#FFFFFF>削除キー</td>
<td>/<input type=password name=delkey value="$c_key" size=8$ff>
<small>(半角8文字以内)</small></td></tr>
<tr><td colspan=4 bgcolor=#808080><FONT COLOR=#FFFFFF>Comment/ <small>(適当に改行を入れて下さい)</small><br>
<textarea name="comment" rows=7 cols=70 wrap=$wrap$ff></textarea></td></tr>
<tr><td bgcolor=#808080><FONT COLOR=#FFFFFF>URL</td>
<td colspan=3>/<input type=text name="url" value="http://$c_url" size=65$ff></td></tr>
_HTML_
print "<tr><td bgcolor=#808080><FONT COLOR=#FFFFFF>Color</td><td colspan=3>/\n";
if ($c_font eq "") {
print "<input type=radio name=font value=\"$fonts[0]\" checked><font color=$fonts[0]>■</font>\n";
	foreach (1 .. $#fonts) {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
	}
} else {
	foreach (0 .. $#fonts) {
		if ($c_font eq "$fonts[$_]") {
print "<input type=radio name=font value=\"$fonts[$_]\" checked><font color=$fonts[$_]>■</font>\n";
		} else {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
		}
	}
}
print"</td></tr><tr>";
if ($i_mode == 1) {
	print "<td bgcolor=#808080><FONT COLOR=#FFFFFF>Icon</td><td>/<select name=ico>\n";
foreach(0 .. $#ico1) {
	if ($c_ico eq "$ico1[$_]") {
		print "<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";
} else {
		print "<option value=\"$ico1[$_]\">$ico2[$_]\n";
	}
}
print"</select><br><small>";
print"(画像を選択/<a href='$cgi_f?mode=img' target=_blank>サンプル一覧</a>)</small></td>\n";
}else{print "<td></td><td></td>";}
print <<"_KEY_";
<td colspan=2><input type=submit value="送信する"$fm>
<input type=reset value="リセット"$fm></td></tr></table></form><hr>
_KEY_
}
$total=@NEW;
$page_=int(($total-1)/$a_max);
if ($FORM{'page'} eq '') { $page = 0; }
	else { $page = $FORM{'page'}; }

	$end_data = @NEW - 1;
	$page_end = $page + ($a_max - 1);
	if ($page_end >= $end_data) { $page_end = $end_data; }
foreach ($page .. $page_end) {
($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$NEW[$_]);
if($email ne ""){ $name="<a href=\"mailto:$email\">$name</a>"; }
if($d_may eq ""){ $d_may="No Title"; }
if($link_i == 1){
	if ($url ne "") {
$url="<a href=\"http://$url\" target=\"_top\"><img src=\"$i_dir/$l_img\" border=0 width=\"$h_wid\" height=\"$h_hei\"></a>";
	}
} elsif ($link_i == 0){
	if($url ne ""){$url="<a href=\"http://$url\" target=\"_top\">http://$url</a>"; }
}
	print <<"_HTML_";
<table width=80% bgcolor=$k_back border=1 bordercolor="$b_col"><tr><td><table width=100%>
<tr><th bgcolor=$t_back colspan=2><font color=$t_font><small>$namber</small>/
$d_may</font></th></tr>
<tr><td width=40\% nowrap>
・投稿者/ $name<br>
・投稿日/ $date</td>
<td width=60\% align=right><small>$url</small></td></tr></table><ul><table><tr>
_HTML_
	$ico =~ s/\n//g;
	if ($i_mode == 1) {
if ($i_hei eq ""){
print "<td><img src=\"$i_dir/$ico\">\n";
}
elsif($i_hei ne "") {
print "<td><img src=\"$i_dir/$ico\" height=$i_hei width=$i_wid>\n";
}
	}
	else { print "<td width=37>\n"; }

if ($a_link == 1) { &auto_($comment); }
print "</td><td><font color=\"$font\">$comment</font></td></tr></table><br></ul>\n";
if($mo eq "R"){print"";}elsif($res_n==2){
	print <<"_HTML_";
<div align=right>
<form action=$cgi_f method=$met><input type=hidden name=namber value=$namber>
<input type=submit value=" レスする "$fm><input type=hidden name=mode value="res">
<input type=hidden name=kiji value="$d_may"></form></div>
_HTML_
}
$res = 0;
foreach $lines(@lines) {
($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype) = split(/<>/,$lines);
if($namber eq "$rtype"){
	if ($res == 0) {
print "<hr width=90\% align=right><table width=100\%><tr><td width=10\%><br></td><td width=90\%>\n";
$res=1;}
if($rmail ne "") { $rname="<a href=\"mailto:$rmail\">$rname</a>"; }
if($rd_may eq ""){ $rd_may="No Title"; }
if($link_i == 1){
	if($rurl ne "") {
$rurl="<a href=\"http://$rurl\" target=\"_top\"><img src=\"$i_dir/$l_img\" border=0 width=\"$h_wid\" height=\"$h_hei\"></a>";
	}
}elsif($link_i == 0){
	if($rurl ne ""){$rurl="<a href=\"http://$rurl\" target=\"_top\">http://$rurl</a>";}
}
	print <<"_HTML_";
<table width=100%><tr><th bgcolor=$trback colspan=2><font color=$t_font><small>$rnam</small>/
$rd_may</font></th></tr>
<tr><td width=40\% nowrap>
・投稿者/ $rname<br>
・投稿日/ $rdate</td>
<td width=60\% align=right><small>$rurl</small></td></tr></table><ul><table>
_HTML_
	$ico =~ s/\n//g;
	if ($i_mode == 1) {
if ($i_hei eq ""){
print "<td><img src=\"$i_dir/$rico\"></td>\n";
}
elsif($i_hei ne "") {
print "<td><img src=\"$i_dir/$rico\" height=$i_hei width=$i_wid></td>\n";
}
	}
	else { print "<td width=37></td>\n"; }

	if ($a_link == 1) { &auto_($rcom); }
	print "<td><font color=\"$rfont\">$rcom</font></td></table><br></ul>\n";
	}
}
	if($res){print "</td></tr></table>\n";}
	print "</td></tr></table>";
if($res_n == 2 || $mo eq "R"){print "<br><hr width=65\% size=5><br>\n";}
elsif($res_n == 1){&fom_;}
	}
	print "</center><center><hr width=80\%><table border=0><tr>\n";

	$next_line = $page_end + 1;
	$back_line = $page - $a_max;
if($mo ne ""){$RFB="<input type=hidden name=mo value=$mo>";$RLB="\&mo=$mo";}
	if ($back_line >= 0) {
print <<"_BACK_";
<td><form method="post" action="$cgi_f">
<input type=hidden name=page value="$back_line">$RFB
<input type=submit value="前の$a_max件"$fm>
</form></td>
_BACK_
	}
	if ($page_end ne $end_data) {
print <<"_NEXT_";
<td><form method="post" action="$cgi_f">
<input type=hidden name=page value=\"$next_line">$RFB
<input type=submit value="次の$a_max件"$fm>
</form></td>
_NEXT_
	}
print"</tr></table>全ページ数 / ";
$a=0;
for($i=0;$i<=$page_;$i++){
$af=$page/$a_max;
	if($i eq $af){ print "[<b>$i</b>] \n";
		}else{
		print "[<A HREF=\"$cgi_f?page=$a$RLB\">$i</A>]\n";
	}
$a+=$a_max;
}
	print <<"_HTML_";
</table></center><div align=left>
<form action="$cgi_f" method=$met>
<table><tr><th bgcolor=#808080 colspan=2><FONT COLOR=#FFFFFF>編集/削除フォーム</th></tr><tr><td>
記事NO<br><small>(半角数字)</small></td><td>/ <input type=text name=del size=4$ff>
<select name=mode>
<option value=key>削除
<option value=nam>編集
</select>
</td></tr><tr><td>
削除キー</td><td>/ <input type=password name=delkey size=8$ff>
<input type=submit value=" 送信 "$fm>
</td></tr></table>
</form></div>
<hr width=90\%>
<div align=right>
<form action="$cgi_f" method=$met>
<input type=hidden name=mode value=del>
<input type=password name=pass size=6$ff><input type=submit value="管理用"$fm><br>
</form></div>
_HTML_

	&foot_;
}
#
# [別ページレス]
#
sub res_ {
&get_;
open(DB,"$log");
@lines = <DB>;
close(DB);

	@lines = reverse(@lines);

@new = ();
$flag = 0;
foreach $line (@lines) {
	($nam,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$line);
	if ($namber eq "$nam") {
if ($d_may eq ""){$d_may="No Title";}
	$type =~ s/\n/0/g;
	&hed_;
	if ($a_link == 1) { &auto_($comment); }
	print <<"_HTML_";
□<a href="$cgi_f"> BACK</a>
<table width=100\% bgcolor=$ttb><tr><td>記事ナンバー[$namber] 返信フォーム</td></tr></table>
<br><center><table width=85\% bgcolor=$k_back border=1 bordercolor="$b_col"><tr><td>
<table width=100\%><tr><th colspan=2 bgcolor=$t_back><font color=$t_font>$nam/
$d_may</font></th></tr>
<tr><td nowrap>
・投稿者/ $name<br>
・投稿日/ $date</td>
</td></tr></table>
<blockquote>
<font color="$font">$comment</font></blockquote><br><hr width=75\% align=right>
<table width=100\%><tr><td width=10\%><br>
</td><td width=90\%>
_HTML_
$tit=$d_may;
	}
	if ($namber eq "$type") {
	print <<"_HTML_";

<table width=100%><tr><th colspan=2 bgcolor=$trback>
<font color=$t_font>$nam/
$d_may</font></th></tr><tr><td width=40\% nowrap>
・投稿者/ $name<br>
・投稿日/ $date</td>
</td></tr></table>
<blockquote>
<font color="$font">$comment</font></blockquote><br>

_HTML_
	}
}
print "</td></tr></table></td></tr></table></center>\n";
	$v=1;&fom_;
	&foot_;
}
#
# [フォーム]
#
sub fom_ {
if($v){$w=25;$t=85;if($tit=~ /^re:/){$tit;}else{$tit="re: $tit";}}
else{$w=20;$t=80;if($d_may=~ /^re:/){$tit=$d_may;}else{$tit="re: $d_may";}}
	print <<"_HTML_";
<form action=$cgi_f method=$met><center><table width=$t\%><tr><td width=60%>
△$namber/ $tit へ返信<br><input type=hidden name=mode value=wri>
<input type=hidden name=type value=$namber>
Name/<input type=text name="name" value="$c_name" size=15$ff>
 Comment ▽
<input type=submit value="レス"$fm>
<input type=reset value="リセット"$fm>
<br><textarea name="comment" rows=4 cols=60 wrap=$wrap$ff></textarea>
</td><td width=40%>
<table width=100%>
<tr><td>E-Mail</td>
<td>/<input type=text name="email" value="$c_email" size=$w$ff></td></tr>
<tr><td>URL</td>
<td>/<input type=text name="url" value="http://$c_url" size=$w$ff></td></tr>
<tr><td>Title</td>
<td>/<input type=text name="d_may" size=$w value="$tit"$ff></td></tr>
<tr><td>削除キー</td>
<td>/<input type=password name="delkey" size=8 value="$c_key"$ff></td></tr>
</table></td></tr><tr><td colspan=2>
_HTML_
if($i_mode){
	print "Icon/ <select name=ico>\n";
	foreach(0 .. $#ico1) {
		if ($c_ico eq "$ico1[$_]") {
		print "<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";
		} else {
		print "<option value=\"$ico1[$_]\">$ico2[$_]\n";
		}
	}
print "</select> \n";
}
print "FontColor/<small>\n";
if ($c_font eq "") {
print "<input type=radio name=font value=\"$fonts[0]\" checked><font color=$fonts[0]>■</font>\n";
	foreach (1 .. $#fonts) {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
	}} else {
	foreach (0 .. $#fonts) {
		if ($c_font eq "$fonts[$_]") {
print "<input type=radio name=font value=\"$fonts[$_]\" checked><font color=$fonts[$_]>■</font>\n";
		} else {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
		}
	}
}
print "</small></td></tr></table></center></form><br>\n";
}
#
# [ログ書きこみ処理]
#
sub wri_ {
if ($FORM{'name'} eq "") { &er_("名前が未入力!"); }
if ($FORM{'comment'} eq "") { &er_("コメントが未入力!"); }
if (length($delkey) > 8) { &er_("削除キー は8文字以内!"); }
	if ($locks == 1) { &lock_; }
open(LOG,"$log") || &er_("Can't open $log");
@lines = <LOG>;
close(LOG);
if($bup){&backup_;}
($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]);
if ($name eq $kname && $comment eq $kcom) { &er_("二重投稿は禁止です!"); }

	&set_;
	&cry_;
$ipip = $ENV{'REMOTE_ADDR'};

if($ico eq "randam"){
	srand;
	$randam = @ico3-1;
	$ico = "$ico3[int(rand($randam))]";
}elsif($ico eq "master"){
if($email ne "$mail[0]"){&er_("管理者用アイコンは使用できません!");}
$ico=$mas_i;
}
if ($res_r == 1 && $type != 0) {
@r_date = ();
@new = ();
foreach (0 .. $#lines) {
	$resres = 0;
($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$de,$ip) = split(/<>/,$lines[$_]);
	$ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g;
	$i =~ s/\n//;
	if ($ty == 0 && $nam eq "$type") {
$new_line = "$nam<>$d<>$na<>$mail<>$d_m<>$com<>$u<>$f<>$i<>$ty<>$de<>$ip<>\n";
	$resres = 1;
	}
	elsif ($ty eq "$type") {
	push(@r_data,$lines[$_]);
	$resres = 1;
	}
	if ($resres == 0) { push(@new,$lines[$_]); }
		}
	unshift(@new,$new_line);
	unshift(@new,@r_data);

}else{
		$h = 0;
	foreach (0 .. $#lines) {
($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$de,$ip) = split(/<>/,$lines[$_]);
	$ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g;
	$i =~ s/\n//;
	if ($ty == 0) { $h++; }
	push(@new,$lines[$_]);
	if ($h >= $max-1) { last; }
	}
}
if($namber eq "") {$namber = $knum + 1;}
unshift (@new,"$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$type<>$epasswd<>$ipip<>\n");

open(LOG,">$log") || &er_("Can't write $log");
print LOG @new;
close(LOG);
	if ($klog_s) { &log_; }
	if (-e $lockf) { unlink($lockf); }

if ($mymail == 0){
	if ($t_mail == 1 && $FORM{'email'} ne $mail[0]) { &mail_; }
} elsif ($mymail == 1){
	if ($t_mail == 1) { &mail_; }
}
if($s_ret){$mo="$s_pas";}
}
#
# [記事一括削除]
#
sub s_d_ {
if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); }

	open(DB,">$log");
	printf DB "";
	close(DB);
}
#
# [説明書]
#
sub man_ {
if($tag) { $tagcom = "<b>使用できます。</b>\n";
	}elsif ($tag == 0){ $tagcom = "<b>使用できません。</b>\n"; }
if($res_n){
$rescom = "<li>このBBSは<b>返信\機\能\</b>があり、記事下のフォームから返信します。</li>"
}elsif($res_n == 2){
$rescom = "<li>このBBSは<b>返信\機\能\</b>があり、親記事のフォームをクリックし返信します。</li>"
}
	&hed_;
	print <<"_HTML_";
□<a href="$cgi_f"> BACK</a>
<center><table width=90\%><tr><th bgcolor="$ttb">$title の使い方</th></tr></table>
<table width=65% align=center bgcolor=$k_back><tr><td>
<ul type="square">
<li>この掲示板 (以下BBS) はタグを$tagcom</li>
<li>記事は<b>最大$max件まで</b>保持できます。</li>
<li>他人を中傷するような記事は管理者の判断で予\告\無く削除する場合があります。</li>
<li><b>半角カナは使用しない</b>でください。文字化けの原因になります。</li>
<li><b>名前、コメントは必須記入項目</b>です。記入漏れするとエラーになります。</li>
<li>このBBSは、<b>クッキー対応</b>です。(ブラウザでクッキー有効にしている時に限り)</li>
$rescom
<li><b>削除キー</b>を覚えておくと、一番下のフォームから<b>自分の記事の削除</b>ができます。
削除した記事が親記事だった場合、レス記事もすべて削除されます。</li>
</ul></td></tr></table></center>
_HTML_
	&foot_;
}
#
# [ヘッダ表示]
#
sub hed_ {
	print "Content-type: text/html\n\n";

	print "<html><head>\n";
	print <<"_HTML_";
<STYLE TYPE="text/css">
<!--
A:link	 { text-decoration:none; }
A:visited{ text-decoration:none; }
A:hover  { color:$ie_c; text-decoration:underline; }
BODY,TD,TH{ font-family:"$k_font"; font-size:$k_size; }
$fsi
-->
</STYLE>
<!--$ver-->
<META HTTP-EQUIV="Content-type" CONTENT=\"text/html; charset=x-sjis">
<title>$title</title></head>
_HTML_
print"<body text=$text link=$link vlink=$vlink bgcolor=$bg";
if ($back ne "") { print " background=\"$back\">\n";} elsif ($back eq "") { print ">\n";}
print <<"_HED_";
<!--ヘッダ広告タグ挿入位置▽-->

<!--△ここまで-->
_HED_
}
#
# [フッタ表示]
#
sub foot_ {
	print <<"_HTML_";
<!--著作権表\示 削除しないでください-->
<hr width=90\%><center>- <a href="http://www.cj-c.com/" target="_top">I-BOARD</a> -
</center>
<!--フッタ広告タグ挿入位置▽-->

<!--△ここまで-->
<br>
_HTML_
print"</body></html>\n";
	exit;
}
#
# [フォームなデコード]
#
sub d_code_ {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("文章があまりに長すぎます!"); }
		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;

		&jcode'convert(*value,'sjis');

		if ($tag == 0) {
			$value =~ s/</\&lt\;/g;
			$value =~ s/>/\&gt\;/g;
			$value =~ s/\"/\&quot\;/g;
		} else {
			$value =~ s/<>/\&lt\;\&gt\;/g;
			$value =~ s/<!--(.|\n)*-->//g;
		}
		$FORM{$name} = $value;
foreach(0..$#NW){if(index($value,$NW[$_]) >= 0){&er_("「$NW[$_]」は使用できません!");}}
		if ($name eq 'del') { push(@d_,$value); }
	}
	$d_may= $FORM{'d_may'};
	$name = $FORM{'name'};
	$comment = $FORM{'comment'};$comment =~ s/\r\n/<br>/g;$comment =~ s/\r|\n/<br>/g;
	$email = $FORM{'email'};
	$url = $FORM{'url'};$url =~ s/^http\:\/\///;
	$mode = $FORM{'mode'};
	$ico  = $FORM{'ico'};
	$font = $FORM{'font'};
	$kiji = $FORM{'kiji'};
	$namber=$FORM{'namber'};
	$type = $FORM{'type'};
	$delkey=$FORM{"delkey"};
	$mo    =$FORM{"mo"};

	$ENV{'TZ'} = "JST-9";
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
	$year=$year+1900;
	$mon++;
	if ($mon  < 10) { $mon	= "0$mon";	}
	if ($mday < 10) { $mday = "0$mday"; }
	if ($hour < 10) { $hour = "0$hour"; }
	if ($min  < 10) { $min	= "0$min";	}
	if ($sec  < 10) { $sec	= "0$sec";	}
	$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];

	$date = "$year\/$mon\/$mday\($week\) $hour\:$min\:$sec";
}
#
# [クッキー発行]
#
sub set_ {
($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"; }
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
$cook="name\:$name\,email\:$email\,url\:$url\,ico\:$ico\,font\:$font\,delkey\:$delkey";
print "Set-Cookie: IBBS=$cook; expires=$date_gmt\n";
}
#
# [クッキー取得]
#
sub get_ {
	$cookies = $ENV{'HTTP_COOKIE'};
	@pairs = split(/;/,$cookies);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ s/ //g;
		$DUMMY{$name} = $value;
	}
	@pairs = split(/,/,$DUMMY{'IBBS'});
	foreach $pair (@pairs) {
		($name, $value) = split(/:/, $pair);
		$COOKIE{$name} = $value;
	}
	$c_name = $COOKIE{'name'};
	$c_email= $COOKIE{'email'};
	$c_url	= $COOKIE{'url'};
	$c_ico	= $COOKIE{'ico'};
	$c_font = $COOKIE{'font'};
	$c_key	= $COOKIE{'delkey'};
	if ($FORM{'name'})	 { $c_name = $FORM{'name'}; }
	if ($FORM{'email'})  { $c_email= $FORM{'email'}; }
	if ($FORM{'url'})	 { $c_url  = $url; }
	if ($FORM{'ico'})	 { $c_ico  = $FORM{'ico'}; }
	if ($FORM{'font'})	 { $c_font = $FORM{'font'}; }
	if ($FORM{'delkey'}) { $c_key  = $FORM{'delkey'}; }
}
#
# [管理ページ]
#
sub del_ {
if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); }
&hed_;
print <<"_HTML_";
□<a href="$cgi_f"> BACK</a>
<table width=100\%><tr><th bgcolor="$ttb">管理モード</th></tr></table>
_HTML_
	open(DB,"$log");
	@lines = <DB>;
	close(DB);
@NEW = ();
foreach (0 .. $#lines) {
($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$lines[$_]);
	if ($type == 0 || $type eq "") { push(@NEW,$lines[$_]); }
}
@lines = reverse(@lines);
if (-s $log) { $l_size = -s $log; }else{ $l_size = 0; }
print <<"_HTML_";
現在のログのサイズ：$l_size バイト
<center><table><tr><td>
■ 記事を編集したい場合、その記事のタイトルをクリック。<br>
■ 削除したい記事にチェックを入れ「削除」ボタンを押す。<br>
■ 名前の下の数字は IPアドレス (無い場合、v5.0以前での書き込み)<br>
□ 親記事を削除するとレス記事もすべて削除されます。
</td></tr></table>$msg
<form action=\"$cgi_f\" method=$met>
<input type=hidden name=mode value="key"><input type=hidden name=mo value="1">
<input type=hidden name=pass value="$FORM{'pass'}">
<table border=1 width=90\% bordercolor="$b_col">
<tr bgcolor=$ttb><th>チェック</th><th colspan=2>記事NO</th>
<th>タイトル</th><th>投稿者</th><th>コメント</th></tr>
_HTML_
$total=@NEW;
$page_=int(($total-1)/$a_max);
if ($FORM{'page'} eq '') { $page = 0; }
	else { $page = $FORM{'page'}; }

	$end_data = @NEW - 1;
	$page_end = $page + ($a_max - 1);
	if ($page_end >= $end_data) { $page_end = $end_data; }

foreach ($page .. $page_end) {
	($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip) = split(/<>/,$NEW[$_]);
	$type =~ s/\n/0/g;$delkey =~ s/\n//g;$ip =~ s/\n//g;
	$comment =~ s/<br>/ /g;
	if ($tag) { $comment =~ s/</&lt;/g; $comment =~ s/>/&gt;/g; }
	if (length($comment)>80){$comment = substr($comment,0,78);$comment = $comment . '..'; }
	if ($email ne "") { $name = "<a href=\"mailto:$email\">$name</a>"; }
	if ($d_may eq "") { $d_may= "No Title"; }
print <<"_HTML_";
<tr><th><input type=checkbox name="del" value="$namber"></th>
<th nowrap>親記事</th><td align=center>[$namber]</td><td>
<a href="$cgi_f?mode=nam&pass=$FORM{'pass'}&kiji=$namber&mo=1">$d_may</a></td>
<td>$name<br><font size=2>$ip</font></td><td>$comment</td></tr>
_HTML_

foreach $lines(@lines) {
($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype,$rd,$rip) = split(/<>/,$lines);
$rtype =~ s/\n/0/g;$rd =~ s/\n//g;$rip =~ s/\n//g;
$resmsg= "<br>($rtypeのレス)";
if ($namber eq "$rtype"){
	$rcom =~ s/<br>/ /g;
	if ($tag) { $rcom =~ s/</&lt;/g; $rcom =~ s/>/&gt;/g; }
	if (length($rcom) > 60) { $rcom = substr($rcom,0,58); $rcom = $rcom . '..'; }
	if ($rmail ne "") { $rname="<a href=\"mailto:$rmail\">$rname</a>"; }
	if ($rd_may eq ""){ $rd_may= "No Title"; }
	print <<"_HTML_";
<tr><th><input type=checkbox name="del" value="$rnam"></th>
<td align=center colspan=2>[$rnam]$resmsg</td><td>
<a href="$cgi_f?mode=nam&pass=$FORM{'pass'}&kiji=$rnam&mo=1">$rd_may</a></td>
<td>$rname<br><font size=2>$rip</font></td><td>$rcom</td></tr>
_HTML_
	}
	}
}
print "</table><br><input type=submit value=\" 削除 \">\n";
print "<input type=reset value=\"リセット\"></form><center><table border=0><tr>\n";

	$next_line = $page_end + 1;
	$back_line = $page - $a_max;

	if ($back_line >= 0) {
print <<"_BACK_";
<td><form method="post" action="$cgi_f">
<input type=hidden name=page value="$back_line">
<input type=hidden name=mode value=del>
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=submit value="前の記事$a_max件">
</form></td>
_BACK_
	}
	if ($page_end ne $end_data) {
print <<"_NEXT_";
<td><form method="post" action="$cgi_f">
<input type=hidden name=page value="$next_line">
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=hidden name=mode value=del>
<input type=submit value="次の記事$a_max件">
</form></td>
_NEXT_
	}
print "</tr></table>全ページ数 / \n";
$a=0;
for($i=0;$i<=$page_;$i++){
$af=$page/$a_max;
	if($i eq $af){ print "[<b>$i</b>] \n";
		}else{
		print "[<A HREF=\"$cgi_f?mode=del&page=$a&pass=$pass\">$i</A>]\n";
	}
$a+=$a_max;
}
print"<hr width=90%>\n";
if($klog_s){
print <<"_COPY_";
<form action=$cgi_f method=$met>
現在のログを過去ログにコピー(v6.0以前から使用している人に限り使用可能\)<br>
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=hidden name=mode value="cop"><input type=submit value="コピーする">
</form><hr width=90%>
_COPY_
}
if($bup){
if (-e $bup_f) { $bl=int(-M $bup_f);$bs=-s $bup_f;
$bc="$bs バイト、$bl 日前のバックアップあり。";
}else{$bc="バックアップはありません。";}
print <<"_HTML_";
<form action=$cgi_f method=$met>
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=hidden name=mode value="bma">
$bc<input type=submit value="ログを修復">
</form>
<hr width=90%>
_HTML_
}
print <<"_HTML_";
<form action=$cgi_f method=$met>ログフォーマット
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=hidden name=mode value="s_d"><input type=submit value="フォーマットする">
</form>
</center>
_HTML_
&foot_;
}
#
# [記事編集]
#
sub hen_ {
if($mo eq ""){
	if ($FORM{'del'} eq "") { &er_("登録NO が未入力!"); }
	if ($delkey eq "") { &er_("削除キー が未入力!"); }
$kiji=$FORM{'del'};
}elsif($mo == 1){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }}
open(DB,"$log");
@lines = <DB>;
close(DB);

@new = ();
$flag = 0;
foreach $line (@lines) {
	($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$epasswd,$ip) = split(/<>/,$line);
	if ($kiji eq "$namber") {
if($mo eq ""){
	if($epasswd eq "") { &er_("この記事は削除キーが存在しません!"); }
	&cryma_($epasswd);
	if($ok eq "n"){ &er_("パスワードが違います!"); }
	$hen_l="$cgi_f";
}else{$hen_l="$cgi_f?mode=del&pass=$FORM{'pass'}";}
	$type =~ s/\n/0/g;$delkey=~ s/\n//g;
if($FORM{'pass'} eq ""){$FORM{'pass'}=$delkey;}
	&hed_;
	$comment =~ s/<br>/\n/g;
	if ($tag) { $comment =~ s/</&lt;/g; $comment =~ s/>/&gt;/g; }
print <<"_HTML_";
□<a href="$hen_l"> BACK</a>
<table width=100% bgcolor=$ttb><tr><th>記事ナンバー[$namber] の編集</th></tr></table>
<blockquote><form action="$cgi_f" method="$met">
<input type=hidden name=pass value="$FORM{'pass'}">
<input type=hidden name=mode value=h_w>
<input type=hidden name=namber value=$namber><input type=hidden name=mo value=$mo>
<table><tr><td>Name</td><td>/<input type=text name="name" value="$name" size=25></td></tr>
<tr><td>E-Mail</td><td>/<input type=text name="email" value="$email" size=35></td></tr>
<tr><td>Title</td><td>/<input type=text name="d_may" size=35 value="$d_may"></td></tr>
<tr><td>URL</td><td>/<input type=text name="url" value="http://$url" size=60></td></tr>
<tr><td colspan=2>Comment▽ <small>(適当に改行を入れて下さい)</small><br>
<textarea name="comment" rows=12 cols=70 wrap=$wrap>$comment</textarea></td></tr>
_HTML_

if ($i_mode == 1) {
	print "<tr><td>Icon</td><td>/<select name=ico>\n";
	foreach(0 .. $#ico1) {
	if ($ico eq "$ico1[$_]") {
		print "<option value=\"$ico1[$_]\" selected>$ico2[$_]\n";
	} else {
		print "<option value=\"$ico1[$_]\">$ico2[$_]\n";
	}
}
print "</select> <small>(アイコンを選択して下さい)</small></td></tr>\n";
}
print "<tr><td>FontColor</td><td>/\n";
if ($font eq "") {
print "<input type=radio name=font value=\"$fonts[0]\" checked><font color=$fonts[0]>■</font>\n";
	foreach (1 .. $#fonts) {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
}} else {
	foreach (0 .. $#fonts) {
	if ($font eq "$fonts[$_]") {
print "<input type=radio name=font value=\"$fonts[$_]\" checked><font color=$fonts[$_]>■</font>\n";
	} else {
print "<input type=radio name=font value=\"$fonts[$_]\"><font color=$fonts[$_]>■</font>\n";
	}
}
}
print <<"_EDIT_";
</td></tr><tr><td colspan=2><input type=submit value=" 編 集 ">
<input type=reset value=リセット></td></tr></table></form></blockquote>
_EDIT_
&foot_;
	}
	}
}
#
# [パスワード暗号化]
#
sub cry_ {
	$time = time;
	($p1, $p2) = unpack("C2", $time);
	$wk = $time / (60*60*24*7) + $p1 + $p2 - 8;
	@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
	$nsalt = $saltset[$wk % 64] . $saltset[$time % 64];
	$epasswd = crypt($FORM{'delkey'}, $nsalt);
}
#
# [パスワード解読]
#
sub cryma_ {
	if ($epasswd =~ /^\$1\$/) { $crptkey = 3; }
	else { $crptkey = 0; }
	$ok = "n";
	if (crypt($FORM{'delkey'}, substr($epasswd,$crptkey,2)) eq $epasswd) {$ok = "y";}
}
#
# [削除処理]
#
sub key_ {
if($mo eq ""){
	if ($FORM{'del'} eq "") { &er_("登録NO が 未入力!"); }
	if ($delkey eq "") { &er_("削除キー が未入力!"); }
}elsif($mo == 1){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }}
open(DB,"$log") || &er_("Can't open $log");
@mens = <DB>;
close(DB);
@CAS = ();$I=0;
foreach $mens (@mens) {
	$mens =~ s/\n//g;
($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$epasswd,$ip) = split(/<>/,$mens);
	$type =~ s/\n/0/g;$epasswd =~ s/\n//g;$ip =~ s/\n//g;
foreach $namber (@d_) {
	if ($namber eq "$nam"||$namber eq "$ty") {
if($mo eq ""){
	if($epasswd eq "") { &er_("この記事は削除キーが存在しません!"); }
	&cryma_($epasswd);
	if($ok eq "n"){ &er_("パスワードが違います!"); }
}
	$mens = "";
	}
}
$n="\n";
	if($mens eq ""){
$mens="";$n="";
if($I == 0){$mens = "$nam<><><><><><><><><>$nam<><><>";$n="\n";}
	}
$I=1;
push (@CAS,"$mens$n");
}
	open (DB,">$log");
	print DB @CAS;
	close(DB);
if($mo){&del_;}else{if($s_ret){$mo="$s_pas";}&html_;}
}
#
# [編集記事置換]
#
sub h_w_ {
if($mo){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }}
open(DB,"$log");
@lines = <DB>;
close(DB);
if($ico eq "randam"){
	srand;
	$randam = @ico3 - 1;
	$ico = "$ico3[int(rand($randam))]";
}elsif($ico eq "master"){
if($email ne "$mail[0]"){&er_("管理者用アイコンは利用不可!");}
$ico=$mas_i;
}
@new = ();$flag = 0;
foreach $line (@lines) {
	$line =~ s/\n//g;
	($knam,$kda,$kname,$kemail,$kd_may,$kcomment,$kurl,$kfont,$kico,$kt,$kdel,$kip) = split(/<>/,$line);
if ($namber eq "$knam") {
	if($mo eq ""){
	$epasswd=$kdel;$FORM{'delkey'}=$FORM{'pass'};
	&cryma_($epasswd);
	if($ok eq "n"){ &er_("パスワードが違います!"); }
	}
$line = "$namber<>$kda<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$kt<>$kdel<>$kip<>";
$flag = 1;
}
	push(@new,"$line\n");
}

if ($flag == 0) { &er_("編集記事ナンバーが不正です。"); }

if ($flag == 1) {
	open (DB,">$log");
	print DB @new;
	close(DB);
}
if($mo){$msg="<h3>編集完了</h3>";&del_;}else{if($s_ret){$mo="$s_pas";}&html_;}
}
#
# [ロック処理]
#
sub lock_ {
$lflag = 0;
foreach (1 .. 5) {
	unless (-e $lockf) {
		open(LOCK,">$lockf");
		close(LOCK);
		$lflag = 1;
		last;
	} else { sleep(1);}
}
if ($lflag == 0) {
	if (-e $lockf) { unlink($lockf); }
	&er_("LOCK is BUSY");
	}
}
#
# [メール通知]
#
sub mail_ {
$mail_subj = "$title の投稿通知です。";
if ($type != 0 && $type ne ""){ $types = "(res comment)"; }

	&jcode'convert(*mail_subj,'jis');
		&jcode'convert(*name,'jis');
		&jcode'convert(*d_may,'jis');
		&jcode'convert(*comment,'jis');

$comment =~ s/<br>/\n/g;
$comment =~ s/&lt;/</g;
$comment =~ s/&gt;/>/g;

foreach $mailto (@mail) {
	if (open(MAIL,"| $s_mail $mailto")) {
	print MAIL "X-Mailer: IBBS MAILER\n";
	print MAIL "To: $mailto\n";
	if ($email eq "") { $email = "nomail\@xxx.xxx"; }
	print MAIL "From: $email\n";
	print MAIL "Subject: $mail_subj\n";
	print MAIL "Content-Transfer-Encoding: 7bit\n";
	print MAIL "Content-type: text/plain\n";
	print MAIL "\n\n";
	print MAIL "$mail_subj\n";
	print MAIL "--Comment-----------------------------\n";
	print MAIL "Time : $date\n";
	print MAIL "Name : $name\n";
	print MAIL "Email: $email\n";
	if ($url ne "") { print MAIL "URL  : http://$url\n"; }
	if ($d_may eq "") { $d_may = "No Title"; }
	print MAIL "Title: $d_may $types\n\n";
	print MAIL "$comment\n\n";
	print MAIL "---------------------------------END--\n";
	close(MAIL);
	}
	}
}
#
# [URLなどを判断]
#
sub auto_ {
$_[0]=~ s/([^=^\"]|^)((http|ftp)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<a href=$2 target=_top>$2<\/a>/g;
$_[0]=~ s/([\w\.\-]+)\@([\w\.\-]+)/<a href=mailto\:$1\@$2>$1\@$2<\/a>/g;
}
#
# [カウンタ処理]
#
sub con_ {
	open(NO,"$c_f") || &er_("Can't open $c_f",'0');
	$cnt = <NO>;
	close(NO);

if ($FORM{'mode'} eq "") {
		$cnt++;
if($locks){
	$tmp = "$c_loc";
	foreach (1 .. 10) {
		unless (-f $tmp) { $tf = 1; last; }
		$tf = 0;
		sleep(1);
	}
	if ($tf == 1) {
		$tmp_d = "$$\.tmp";
		if (!open(TMP,">$tmp_d")) { &er_("Can't make tmpfile"); }
		close(TMP);
		if (!open(TMP,">$tmp_d")) { &er_("Can't make tmpfile"); }
		print TMP $cnt;
		close(TMP);
		foreach (1 .. 10) {
			unless (-f $tmp) {
				if (!open(TMP,">$tmp")) { &er_("Can't make tmpfile"); }
				close(TMP);
				rename($tmp_d,"$c_f");
				unlink $tmp;
				$tf = 1;
				last;
			}
			$tf = 0;
			sleep(1);
		}
	}
	$tf;
}else{
	open(NO,">$c_f") || &er_("Can't write $c_f",'0');
	print NO $cnt;
	close(NO);
	}
}
	while(length($cnt) < $fig){ $cnt = 0 . $cnt; }
	@cnts = split(//,$cnt);

print "<table border=0 align=left><tr><td bgcolor=$bg>\n";

if ($m_pas) {
	foreach (0 .. $#cnts) {
print "<img src=\"$m_pas/$cnts[$_]\.gif\" width=\"$m_wid\" height=\"$m_hei\">";
	}
} else {print "<font color=$c_co face=\"Times New Roman\">$cnt</font>";}
	print "</td></tr></table><br><br>\n";
}
#
# [エラー表示]
#
sub er_ {
if (-e $lockf) { unlink($lockf); }
	&hed_;
	print "<center>ERROR - $_[0]</center><br>\n";
	&foot_;
}
#
# [過去ログ]
#
sub log_ {
open(NO,"$klog_c") || &er_("Can't open $klog_c");
$n = <NO>;
close(NO);

	$klog_f = "$klog_d\/$n\.txt";
	unless(-e $klog_f) { &log_n; }

open(LOG,"$klog_f") || &er_("Can't open $klog_f");
@lines = <LOG>;
close(LOG);
$klog_size=$klog_l*1024;
if(-s $klog_f > $klog_size) {&log_up;}

open(LOG,">>$klog_f") || &er_("Can't write $klog_f");
print LOG "$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<><><>$type<><>$ipip<>\n";
close(LOG);
}
#
# [カウントアップ]
#
sub log_up {
$n++;

open(NUM,">$klog_c") || &er_("Can't write $klog_c");
print NUM "$n";
close(NUM);

$klog_f = "$klog_d\/$n\.txt";
&log_n;
}
#
# [過去ログ生成]
#
sub log_n {
$new_flag = 1;

open(DB,">$klog_f") || &er_("Can't write $klog_f");
print DB "";
close(DB);

chmod(0666,"$klog_f");
}
#
# [過去ログコピー]
#
sub copy {
if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); }
open(DB,"$log");
@copy = <DB>;
close(DB);
$klog_f = "$klog_d\/1\.txt";
unless(-e '1.txt') { &log_n; }
if(-s '1.txt' > 0) {&er_("過去ログに記事があります!");}
@copy=reverse(@copy);
open(LOG,">>1.txt") || &er_("Can't write 1.txt");
print LOG @copy;
close(LOG);
$msg="<h3>コピー完了</h3>";
&del_;
}
#
# [バックアップ処理]
#
sub backup_{
	unless(-e $bup_f) { $klog_f=$bup_f;&log_n; }
open(LOG,">$bup_f") || &er_("Can't write $bup_f");
print LOG @lines;
close(LOG);
}
#
# [修復処理]
#
sub bma_ {
if (-e $lockf) { unlink($lockf); }
rename ($bup_f,$log) || &er_("Rename Error");
$msg="<h3>修復完了</h3>";
&del_;
}
#
# [画像表示]
#
sub img_ {
&hed_;
print"<center><table width=90\%><tr><th bgcolor=$ttb>アイコン画像一覧</td></tr></table>";
print"<br>*)見終わったらウィンドウを閉じて下さい<br><br>";
$I=0;
foreach (0..$#ico1){
if($ico1[$_] eq "randam" || $ico1[$_] eq "master"){next;}
$I++;
print"<img src=\"$i_dir/$ico1[$_]\">$ico2[$_]　";
if($I >= $Ico_h){print"<br><br>";$I=0;}
}
print"</center>";
&foot_;
}
