#!/usr/local/bin/perl

##+---------------------------------------------+##
##						 ##
$version ='PurestNote v1.01 (02/01/22)';	 ##
## (C) Jun [PRETTY BOOK]    　          	 ##
## Mail: pretty@prettybook.com              	 ##
## Web : http://www.prettybook.com/         	 ##
##						 ##
##+---------------------------------------------+##
## Special Thanks	*下記参照　　	    	 ##
## KENT WEB                          　　   	 ##
## Web : http://www.kent-web.com/           	 ##
##+---------------------------------------------+##

#-->>>注意事項<<<-------------------------------------------------------#
# ◇ このスクリプトはフリーソフトです。このスクリプトを使用した	　	#
#    いかなる損害に対して製作者は一切の責任を負いません。　　		#
# ◇ このスクリプトは私が作成したスクリプトをベースにし、KENT WEBさん	#
#　　のレス記事のソートに纏わる処理・過去ログ移行処理を引用させて	#
#　　いただき完成させたものです。					#
# ◇ このスクリプトをご利用の際は当サイトの利用規定に同意したものと	#
#　　みなしますのでご了承下さいね。                   			#
#-----------------------------------------------------------------------#
#-->>>設置構成例<<<------------------------------------------------------------#
# index.html (トップページ)					               #
#　   ｜							               #
# 　   --cgi-bin[ディレクトリ](777)/purest.cgi    （パーミッッション700 or 755）#
#　　　       　　　　 　　　　　   purest.log    （パーミッッション600 or 666）#
#　　　　　       　                jcode.pl     （パーミッッション644）       #
#　　　　　       　                count.dat    （パーミッッション600 or 666）#
#			---以下は過去ログ機能を使う場合---	　　           #
#				    1.dat	  (パーミッッション600 or 666）#
#				    pastno.dat    (パーミッッション600 or 666）#
#  （注意）プロバイダによってはこれに限りません。			       #
#------------------------------------------------------------------------------#

#+--設定はここから--+---------------------------------------------------#

# jcode.plの設定（このままだとcgiとjcode.plは同じディレクトリにある状態）
require './jcode.pl';

#-管理用パスワード設定--------------------------------------
$pass = 'risatti1';		# 管理用パスワード

#-ファイル名の設定--------------------------------------
$script = './purest.cgi';	# スクリプトファイル名
$logfile = './purest.log';	# ログファイル名
$setscript = './pureset.cgi';	# 環境セット用のスクリプトファイル名
$setfile = './pureset.log';	# セットファイル用のログファイル
$cntfile = "./count.dat";	# カウンタファイル

#-CSSファイル有無の設定--------------------------------------
#-スタイルシートを外部ファイルで設定しますか？
#>>>ここを1とすると、環境設定部のスタイルシート設定箇所はすべて無視されます。
#>>>外部CSSファイルに付いてはread.html,style.cssソースをお読みください。
$cssfl_use = 0;			#  (0=しない 1=する)
$cssfile = "./purestyle.css";			# CSSファイルを設定

#-クッキー保存日数----------------------------------------
$c_day = 60;

#-methodの形式----------------------------------------------------
$method = 'POST';			# (POST 又は GET)

#-タグを使用できるようにする？------------------------------------
$taguse = 0;				#  (0=タグは使わない 1=使う)

#-URLやメールアドレスを自動リンクできるようにする？---------------
# （注）但し上のタグを1にした場合はここは0とすること
$alinkuse = 1;				#  (0=しない 1=する)

#-ロックファイルに関する設定--------------------------------------
#>>>1でうまくいかなければ、2を設定。
#>>>それでも「アクセスが混雑してます」というメッセージが出てしまうなら0に設定。
$lock_kinou = 0;			# ファイルロック処理 (0=no 1=symlink関数が使える 2=symlink関数が使えない)
$lockfile = './purest.lock';		# ロックファイル名
$clockfile = "./purecnt.lock";	# カウンタのロックファイル

#-メール送信機能に関する設定--------------------------------------
$sendmail = '/usr/lib/sendmail';	# sendmailパス

#-簡易過去ログ機能に関する設定----------------------------------------
$past_use = 0;			# 過去ログ機能を使う？ (0=no 1=yes)
$pastno = "./pastno.dat";	# 過去ログ用NOファイル
$plogline = 50;			# 過去ログ１ファイル当たりの行数（できるだけ$ppagekctの倍数で設定。$ppagekctと同数でも可）
$ppagekct = 10;			# 過去ログ１ページ当たりの行数（$ploglineと同数だと１つのログファイルにつき改頁されず1ページで表示されることになります）
$past_dir = ".";		# 過去ログ1.datファイルのディレクトリ (フルパスだと / から）

#-広告挿入 (''の間に「広告タグ」を挿入。広告挿入義務がなければここは無視）-------
$adv_up = ''; # このBBSのトップセンターに挿入
$adv_dn = ''; # このBBSの下部センターに挿入

#+--設定はここまで--+--------------------------------------------------------#
#---以下は触らない方がいいよー-----------------------------------------------#

#+--デコード--------+#
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
	 } else { $query = $ENV{'QUERY_STRING'}; }

@query = split(/&/, $query);
foreach $xx (@query) {
	($key, $val) = split(/=/, $xx);
    	$key =~ tr/+/ /;
    	$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;	#デコードする
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;	#デコードする
    
#--タグ・改行等処理--
if ($taguse == 0) {
	$val =~ s/\"/&quot;/g; $val =~ s/</&lt;/g; $val =~ s/>/&gt;/g;	#タグは不可なので記号をHTML表示用記号に置換
	} else { 
	$val =~ s/<!--(.|\n)*-->//g; $val =~ s/<>/&lt;&gt;/g;		#タグがOKの場合で、HTML上非表示にする場合>>>KENTさんのスクリプトから引用
	}
	$val =~ s/\r\n/<br>/g; $val =~ s/\r/<br>/g;	$val =~ s/\n/<br>/g;	#改行コードはタグに置換(Win,Mac,Unix用の順）
	$val =~ s/\,/&#44;/g;

	&jcode'convert(*key,'sjis');
	&jcode'convert(*val,'sjis');

if ($key eq 'dele_no') { push(@DELE_NO,$val); }

#--連想配列に格納---
$in{$key} = $val;

}

#+--URLとモード定義--------+#
$in{'url'}=~ s/^http\:\/\///;
$in{'a_url'}=~ s/^http\:\/\///;
$mode = $in{'mode'};
$page = $in{'page'};

#+--エラーメッセージ定義--------+#
$er_non = "未入力エラー";	$er_ps = "パスワード照合エラー";
$er_er = "Error";	$er_log = "ログファイル関連エラー";
$er_lock = "ロックエラー";
#--------
$er_ngps = "パスワードが違います";	$er_ngaps = "管理者用パスワードが違います";
$er_nops = "パスワードを入力してください";	$er_nokj = "記事を選択してください";
$er_nokp = "記事を選択し、パスワードを入力してください";	$er_nglog = "$logfileを更新できません";
$er_oplog = "$logfileを開けません";
$er_acs = "アクセスが混雑しています。しばらくお待ち下さい";

#+--処理--------+#
&set;
if ($mode eq 'formview') { &formview; }		#投稿フォーム
elsif ($mode eq 'intodata') { &intodata; }	#書きこみ処理
elsif ($mode eq 'admin') { &admin; }		#管理モード入室
elsif ($mode eq 'admin2') { &admin2; }		#管理モード
elsif ($mode eq 'edit') { &edit; }		#記事編集モード
elsif ($mode eq 'editidt') { &editidt; }	#編集処理
elsif ($mode eq 'deleidt') { &deleidt; }	#管理者による記事削除処理
elsif ($mode eq 'delevis') { &delevis; }	#ビジターによる記事削除処理
elsif ($mode eq 'resform') { &resform; }	#投稿フォーム
elsif ($mode eq 'past') { &pastview; }		#過去ログ
elsif ($mode eq 'how') { &how; }		#HOW TO
elsif ($mode eq 'iconlist') { &iconlist; }	#アイコンリスト一覧表示
elsif ($mode eq 'search') { &search; }		#SEARCHモード
else { &htmlview; }				#記事表示部HTML

###+--読みこみ-------------------------------------+###
sub set {

open(IN,"$setfile") || &error("$er_log","$setfileが開きません");
$sline = <IN>;
close(IN);

if($sline eq "") {
&seterror;
}
($title,$t_size,$t_color,$t_face,$t_gif,$home,$bggif,$bgcol,$text,$link,$vlink,$alink,$f_name_i,$f_cols_i,$f_name_n,$f_cols_n,$rows,$fm_fcolor,$fm_color,$fm_wkcolor,$fm_wksize_l,$fm_wksize_r,$fm_wksize_t,$fm_wksize_b,$fm_wktype,$fp_fcolor,$fp_color,$fp_wkcolor,$fp_wksize,$fp_wktype,$fp_size,$f_face,$f_size,$b_size,$s_size,$wk_fcol,$wk_col,$wk_gif,$kj_col,$kj_gif,$kj_w,$kj_wsize,$kj_wcol,$kj_cs,$rk_col,$rk_gif,$rk_wsize,$rk_wcol,$rk_cs,$max,$pagekcnt,$masmail,$m_set,$col,$col_mk,$add,$icong,$iconn,$masic,$ic_set,$mail_dt,$c_set,$cnt_keta,$cnt_col,$res_ic,$email_ic,$url_ic,$head_ic,$sort,$target,$topcom) = split(/<>/,$sline);
$f_face =~ s/&quot;/\"/g;
$f_face  = join("\,",split(/&#44;/, $f_face));

if($cssfl_use) { 
$style = "<LINK REL=\"stylesheet\" HREF=\"$cssfile\" TYPE=\"text/css\">";
} else {
$style = <<EOM;
<STYLE TYPE="text/css">
<!--
body {
scrollbar-3dlight-color:$fm_wkcolor;
           scrollbar-arrow-color:$fm_wkcolor;
           scrollbar-base-color:$fm_color;
           scrollbar-darkshadow-color:$fm_color;
           scrollbar-face-color:$fm_color;
           scrollbar-highlight-color:$fm_color;
           scrollbar-shadow-color:$fm_wkcolor;
}
body, td, th { font-size: $f_size; font-family: '$f_face'; }
a:hover { color: $alink; }
a:link  { text-decoration: none; }
a:visited { text-decoration: none; }
big   { font-size: $b_size; }
small { font-size: $s_size; }
.xsp{ font-size : $t_size; }
.xsm{ font-size : 7pt; }
.cnt{ font-size : $s_size; color : $cnt_col; }
LI { list-style-type:circle; }

.infrm { border-left:$fm_wksize_l $fm_wktype $fm_wkcolor;
border-right:$fm_wksize_r $fm_wktype $fm_wkcolor;
border-top:$fm_wksize_t $fm_wktype $fm_wkcolor;
border-bottom:$fm_wksize_b $fm_wktype $fm_wkcolor;
background-color : $fm_color; color : $fm_fcolor; }
.button { font-size:$fp_size; font-family:$f_face;
 border-left:$fp_wksize $fp_wktype $fp_wkcolor;
border-right:$fp_wksize $fp_wktype $fp_wkcolor;
border-top:$fp_wksize $fp_wktype $fp_wkcolor;
border-bottom:$fp_wksize $fp_wktype $fp_wkcolor;
background-color: $fp_color ; color: $fp_fcolor; }
-->
</STYLE>
EOM

}

if($ic_set eq "on") { $icon_use = 1; }
if($sort eq "on") { $sort_on = 1; }
if($m_set eq "on" && $masmail ne "") { $smailuse = 1; }
if($c_set eq "on") { $count_use =1; }

if($wk_gif) { $wkg = "background=\"$wk_gif\""; } else { $wkg = ""; }
if($kj_gif) { $kjg = "background=\"$kj_gif\""; } else { $kjg = ""; }
if($rk_gif) { $rkg = "background=\"$rk_gif\""; } else { $rkg = ""; }

if($col_mk eq "") { $col_mk="◆"; } 
if ($col ne "") { 
@scol1 = split(/&#44;/, $col);
} else {
@scol1 = ('#ff9ba3','#ff8491','#f37cb5','#c79b7a','#b37973','#8aaa7b');
}
if ($add ne "") { 
@areas= split(/&#44;/, $add);
} else {
@areas = ('北海道','東　北','関　東','甲信越','東　海','北　陸','近　畿','中　国','四　国','九　州','沖　縄','海　外','不　明','ひみつ');
}
@icong = split(/&#44;/, $icong);
@iconn = split(/&#44;/, $iconn);

if($pagekcnt eq "") { $pagekcnt = 5; }
if($max eq "") { $max =50; }
if($kj_w eq "") { $kj_w ="350";}
if($f_name_i eq "") { $f_name_i= "40"; }
if($f_cols_i eq "") { $f_cols_i= "34"; }
if($f_name_n eq "") { $f_name_n= "25"; }
if($f_cols_n eq "") { $f_cols_n= "28"; }
if($rows eq "") { $rows= "6"; }
}

###+--フォーム定義-------------------------------------+###
sub get_agent {

$useragent = $ENV{'HTTP_USER_AGENT'};
if ($useragent =~ /MSIE/i) {
	$name_fw = $f_name_i;
	$come_fw = $f_cols_i;
} else {
	$name_fw = $f_name_n;
	$come_fw = $f_cols_n;
}

}

###+--書き込み処理-------------------------------------+###
sub intodata {
if ($in{'name'} eq "") { &error("$er_non","お名前を記入してください"); }
if ($mail_dt && $in{'email'} eq "") { &error("$er_non","メールアドレスを記入してください。"); }
if ($in{'com'} eq "") { &error("$er_non","コメントを記入してください。"); }

#-管理者アイコン処理
if ($masic ne "") {
if ($in{'icon'} eq "$masic") {
	if ($in{'pwd'} ne "$pass") {
		&error("$er_er","管理者アイコンは管理者以外は使用できません");
	}
}
}

if ($lock_kinou == 1){ &lock1; }
elsif($lock_kinou == 2) { &lock2; }
&set_cookie;
&logopen;

#--ホストと時間をゲット--
&get_host;
$host = $hostname;
&get_time;

#--二重投稿チェック--
$ck_flag=0;
foreach (@LINE) {
local($a,$b,$c,$d,$e,$f,$g,$h,$i,$j)  = split(/<>/);
	if ($in{'name'} eq $d && $in{'com'} eq $g) { $ck_flag=1; last; }
}
if ($ck_flag) { &error("$er_er","二重投稿は禁止しています"); }

#--記事No取得-最大記事数処理--
$toplog =~ s/\n//;
$num = $toplog + 1;

#--パスワードを暗号化--
$pwd = crypt($in{'pwd'}, "sa");

#--フォーマット--
if ( $in{'resno'} eq "") {

$i=0;
$end=0;
foreach (@LINE) { 
($num_k,$num2_k,$cc,$dd,$ee,$ff,$gg,$hh,$ii,$jj,$kk,$ll,$mm) = split(/<>/);
$i++;
if ($i > $max-1 && $num2_k eq "") { $end=1; }
if (!$end) { push(@up,$_); }
elsif ($end && $past_use) { push(@pastlines,$_); }
}
if ($pastlines[0] && $past_use) { &pastlog; }

unshift(@up,"$num<>$num2<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n");
unshift(@up,"$num\n");

open(OUT,">$logfile") || &error("$er_log","$er_nglog");
print OUT @up;
close(OUT);
&unlock;
} 
elsif ( $in{'resno'} ne "" && $sort_on) {
$do_flag = 0;
@up = ();
@tmp = ();
foreach (@LINE) {
($num_k,$num2_k,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b) = split(/<>/,$_);
if ($in{'resno'} eq "$num_k") { $do_flag = 1; push(@up,$_); }
elsif ($in{'resno'} eq "$num2_k") { push(@up,$_); }
elsif ($do_flag == 1 && $in{'resno'} ne "$num2_k") {
	$do_flag = 2;
	push(@up,"$num<>$in{'resno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n");
	push(@tmp,$_);
	}
else { push(@tmp,$_); }
}
	if ($do_flag == 1) {
		push(@up,"$num<>$in{'resno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n");
	}
	push(@up,@tmp);
unshift(@up,"$num\n");
open(DATA,">$logfile") || &error("$er_log","$er_nglog");
print DATA @up;
close(DATA);
&unlock;
}
else {
$do_flag=0;
@up=();
foreach (@LINE) {
($num_k,$num2_k,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b,$d_b) = split(/<>/,$_);

if ($do_flag == 0 && $in{'resno'} eq "$num_k") { $do_flag=1; }
elsif ($do_flag == 1 && $in{'resno'} ne "$num2_k") {
	$do_flag=2;
	push(@up,"$num<>$in{'resno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n");
	}
	push(@up,$_);
}
if ($do_flag == 1) {
	push(@up,"$num<>$in{'resno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n");
}

unshift(@up,"$num\n");
open(DATA,">$logfile") || &error("$er_log","$er_nglog");
print DATA @up;
close(DATA);
&unlock;
}

#--メール送信機能設定--
if ($smailuse) { &mailgo; }

&htmlview;
}

###+--記事表示部-------------------------------------+###
sub htmlview {
&header;
print "<center>\n";
if(!$adv_up) { $adv_up = ""; } else { print "$adv_up<br>\n"; }
print "<br>\n";

if($t_gif ne '') { print "<img src=$t_gif alt='$title'>\n";
	}else {	print "<font color=\"$t_color\" size=\"$t_size\" face=\"$t_face\">";
		print "<b><span class=xsp>$title</span></b></font>\n";
	}

print "<br><br>\n";

&formview;

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

#--記事数取得--
$start = $page + 1;
$end   = $page + $pagekcnt;

open(IN,"$logfile") || &error("$er_log","$er_oplog");
$toplog = <IN>;
$flag=0;
$i=0;
while ($_ = <IN>) { 
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/, $_);
if ($num2 eq "") { $i++; }
if ($i < $start) { next; }
if ($i > $end) { next; }

#--自動リンク設定--
if ($alinkuse == 1 ) {
	$com =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\" target=\"$target\">$1:\/\/$2<\/a>/g;
	$com =~ s/([\w|\!\#\$\%\'\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)\@([\w|\!\#\$\%\'\(\)\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)/<a href="mailto:$1\@$2">$1\@$2<\/a>/g;
	}

#--Emailリンク方法指定--
if ($email && $email_ic) { $email="<a href=mailto\:$email><img src=\"$email_ic\" border=0 alt=$email_tx></a>"; }
	elsif ($email && !$email_ic) { $email="<small><a href=mailto\:$email><font color=\"$wk_fcol\">[Mail]</font></a></small>"; }
	elsif (!$email) { $email=""; }

#--Webリンク方法指定--
if ($url && $url_ic) { $url="<a href=\"http://$url\" target=\"$target\"><img src=\"$url_ic\" border=0 alt=$url_tx></a>"; }
	elsif ($url && !$url_ic) { $url="<small><a href=\"http://$url\" target=\"$target\"><font color=\"$wk_fcol\">[Web]</a></small>"; }
	elsif (!$url) { $url=""; }

if ($sub eq "") { $sub="No Title"; }

#--記事表示--
	if ($num2 eq "" && $flag) {
		print "</TD></TR></TBODY></TABLE>\n";
		print "<BR><BR>\n";
		$flag=1;
	}

	if ($num2 eq "") {
		print "<TABLE border=\"$kj_wsize\" width=\"$kj_w\" bgcolor=\"$kj_col\" cellpadding=\"5\" cellspacing=\"$kj_cs\" bordercolor=\"$kj_wcol\"><TBODY><TR>\n";
		print "<TD bgcolor=\"$wk_col\" $wkg>\n";
		print "<table border=0 cellpadding=0 cellspacing=0 width=100%><tr><td>\n";
		if($head_ic) {
		print "<table border=0 cellpadding=0 cellspacing=0><tr><td><img src=\"$head_ic\"></td><td>&nbsp;";
		}
		print "<font color=\"$wk_fcol\">$sub";
		if($head_ic) {
		print "</td></tr></table>";
		}
		print "</td><td align=right>$email $url";

			if ($res_ic ne "" ) {
			print " <a href=\"$script?resmode=on&resnum=$num&mode=resform\"><img src=\"$res_ic\" border=0 alt=Res></a> ";
			} else {
			print " <small><a href=\"$script?resmode=on&resnum=$num&mode=resform\"><font color=\"$wk_fcol\">[Res]</font></a></small> ";
			}
		print "</td></tr></table></TD></TR><TR><TD bgcolor=\"$kj_col\" $kjg>\n";

		print "<table border=0 cellspacing=0 cellpadding=2><tr>";

		# アイコンモード
		if ($icon_use && $icon ne "") {
		print "<td valign=top><img src=\"$icon\"></td>";
		print "<td width=3></td><td valign=top><font color=\"$color\">$com</font></td><td width=5></td>";
		} else {
		print "<td><font color=\"$color\">$com</font></td>";
		}
		print "</tr></table><br>\n";
		print "<div align=right>From：<b>$name</b> <small>\@$area <br>$date</small> ";
		print "<small>(No.$num)</small></div>";
		$flag=1;
	}
	if ($num2 ne "") {
		print "<p><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td width=30%></td><td bgcolor=\"$rk_col\">";
		print "<table border=\"$rk_wsize\" cellspacing=\"$rk_cs\" bgcolor=\"$kj_col\" bordercolor=\"$rk_wcol\" cellpadding=6 width=100% ><tr><td bgcolor=\"$rk_col\" $rkg>";
		print "<table border=0 cellspacing=0 cellpadding=2><tr>";
		# アイコンモード
		if ($icon_use && $icon ne "") {
		print "<td colspan=4><font color=\"$color\">$sub</font></td></tr><tr><td valign=top><img src=\"$icon\"></td>";
		print "<td width=1></td><td valign=top><font color=\"$color\">$com</font></td><td width=5>";
		} else {
		print "<td>$sub</td></tr><tr><td><font color=\"$color\">$com</font>";
		}
		print "</td></tr></table><br>\n";
		print "<div align=right>From：<b>$name</b> <small>\@$area $email $url<br>$date</small> ";
		print "<small>(No.$num)</small></div>";
		print "</td></tr></table></td></tr></table>\n";
	}

}
close(IN);
	print "</TD></TR></TBODY></TABLE>\n";
	print "<br><br>\n";

#--Next Backページボタンの設定--
$nextpage = $page + $pagekcnt;
$backpage = $page - $pagekcnt;
print "<p><table align=center cellpadding=0 cellspacing=0><tr>\n";
if ($backpage >= 0) {
	print "<td><form method=$method action=$script>\n";
	print "<input type=hidden name=page value=\"$backpage\">\n";
	print "&nbsp;<input type=submit value=\"Back\" class=button>&nbsp;\n";
	print "</form></td>\n";
	}
if ($nextpage < $i) {
	print "<td align=center><form method=$method action=$script>\n";
	print "<input type=hidden name=page value=\"$nextpage\">\n";
	print "&nbsp;<input type=submit value=\"Next\" class=button>&nbsp;\n";
	print "</form></td>\n";
	}

print "</tr></table><br>\n";
print "<form action=\"$script\" method=$method>\n";
	print "<p><table border=0><tr><td align=center>\n";
	print "No<input type=text name=vis_no size=3 class=infrm>\n";
	print "Pass<input type=password name=vis_psw size=6 class=infrm>\n";
	print "<select name=mode class=infrm><option value=\"edit\" selected>Edit\n";
	print "<option value=\"delevis\">Delete</select>\n";
	print "<input type=submit value=\"go\" class=button></td></tr></table></form><br>\n";

print "<div align=right>\n";
if ($count_use) {

&count;
if ($cnt_type) {
	foreach (0 .. $#cnts) {
	 print "<img src=\"$cnt_dir\/$cnts[$_]\.gif\" alt=\"$cnts[$_]\">";
	}
} else {
	print "<font color=\"$cnt_col\" class=cnt>$cnt</font>\n";
}
}

&footer;
print "</div>\n";
if(!$adv_dn) { $adv_dn = ""; } else { print "<br><center>$adv_dn</center>\n"; }

print "</center></body></html>\n";
exit;
}

###+--投稿フォーム-------------------------------------+###
sub formview {

&get_agent;
&get_cookie;

print "<center>\n";
if ($past_use) { $PU = "<a href=\"$script?mode=past\"><font color=\"$wk_fcol\">[Log]</font></a>\n"; }
if ( $in{'resmode'} eq "on" ) { $FC = "<big><font color=\"$wk_fcol\">- Res From -</font></big>\n";}
 else { 
$FC = <<"EOM";
<small><a href=\"$home\" target=\"_top\"><font color=\"$wk_fcol\">[Home]</font></a>
<a href=\"$script?mode=how\"><font color=\"$wk_fcol\">[HowTo]</font></a>
$PU
<a href=\"$script?mode=search\"><font color=\"$wk_fcol\">[Search]</font></a>
<a href=\"$script?mode=admin\"><font color=\"$wk_fcol\">[Admin]</font></a></small>
EOM

}
print "<TABLE border=\"$kj_wsize\" width=\"$kj_w\" bgcolor=\"$kj_col\" cellpadding=\"5\" cellspacing=\"$kj_cs\" bordercolor=\"$kj_wcol\"><TBODY><TR>\n";
print "<TD bgcolor=\"$wk_col\" $wkg align=center>\n";
print "$FC</TD></TR><TR><TD bgcolor=\"$kj_col\" $kjg align=center>\n";

print "<form method=\"$method\" action=\"$script\">\n";
print "<input type=hidden name=mode value=\"intodata\">\n";
if ($in{'resmode'} eq "on") {
print "<input type=hidden name=resno value=\"$in{'resnum'}\">\n";
}
if($topcom && $in{'resmode'} ne "on") {
print "<br>$topcom<br>\n";
}
if ($in{'resmode'} eq "on") {
print "<br><table border=0 width=\"$kj_w\"><tr><td align=center><table border=0 width=90%><tr><td>\n";
print "<b>$oyasub</b> From：<b>$oyaname</b> ... <small>$oyadate (No\.$oyanum) $oyaemail $oyaurl</small><P>\n";
print "<blockquote>$oyacom</blockquote><hr color=$kj_wcol size=$kj_wsize>\n";
&logopen;

foreach (@LINE) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/);
if ($in{'resnum'} eq "$num2") {
$resname = $name; $rescom = $com; $resdate = $date; $resnum=$num;
if ($sub) { $ressub = $sub; } else { $ressub = "No Title"; }
if ($email) { $resemail = "[<a href=\"mailto:$email\">Mail</a>]"; } else { $resemail = ""; }
if ($url) { $resurl = "[<a href=\"http://$url\" target=$target>Web</a>]"; } else { $resurl = ""; }
print "<b>$ressub</b> ResFrom：<b>$resname</b> ... <small>$resdate (No\.$resnum) $resemail $resurl</small><P>\n";
print "<blockquote>$rescom</blockquote><hr color=$kj_wcol size=$kj_wsize>\n";
}
}
print "</td></tr></table></td></tr></table><br>\n";
}
print "<br><table border=0>\n";
print "<tr><td nowrap>Name</td>\n";
print "<td><input type=text name=name size=\"$name_fw\" value=\"$c_name\" class=infrm></td></tr>\n";
print "<tr><td nowrap>Mail</td>\n";
print "<td><input type=text name=email size=\"$name_fw\" value=\"$c_email\" class=infrm></td></tr>\n";
print "<tr><td nowrap>Web</td>\n";
print "<td><input type=text size=$name_fw name=url value=\"http://$c_url\" class=infrm></td></tr>\n";
print "<tr><td nowrap>Title</td>\n";
if ($in{'resmode'} eq "on") { $re_sub = "Res:$oyasub"; }
print "<td><input type=text size=$name_fw name=sub class=infrm value=\"$re_sub\"></td></tr>\n";
print "<tr><td nowrap valign=top colspan=2>\n";
print "<textarea cols=\"$come_fw\" rows=$rows name=com wrap=\"soft\" class=infrm></textarea></td></tr>\n";
print "<tr><td nowrap>Color</td><td>\n";
	if ($c_color eq "") { $c_color = $scol1[0]; }
	foreach (0 .. $#scol1) {
		if ($c_color eq "$scol1[$_]") {
			print "<input type=radio name=color value=\"$scol1[$_]\" checked>";
			print "<font color=\"$scol1[$_]\">$col_mk</font> \n";
		} else {
			print "<input type=radio name=color value=\"$scol1[$_]\">";
			print "<font color=\"$scol1[$_]\">$col_mk</font> \n";
		}
	}
print "<tr><td nowrap>Area</td><td><select name=area class=infrm>\n";
foreach(0 .. $#areas) {
		    if ($c_area eq "$areas[$_]") {
		  	print "<option value=\"$areas[$_]\" selected>$areas[$_]\n";
		    } else {
			print "<option value=\"$areas[$_]\">$areas[$_]\n";
		    }
		  }
	print "</select>\n";

if ($icon_use == 1){
print "&nbsp;&nbsp;Icon&nbsp;<select name=icon class=infrm>\n";
if ($masic ne "") {
	push(@icong,$masic);
	push(@iconn,"管理人用");
}
	foreach (0 .. $#icong) {
		if ($c_icon eq "") { $c_icon = "$icong[0]"; }
		if ($c_icon eq "$icong[$_]") {
			print "<option value=\"$icong[$_]\" selected>$iconn[$_]\n";
		} else {
			print "<option value=\"$icong[$_]\">$iconn[$_]\n";
		}
 	 }
	print "</select>&nbsp;<small>(<a href=\"$script?mode=iconlist\" target=_blank>list</a>)</small>\n";
	}

print "</td></tr>\n";
print "<tr><td nowrap valign=top>Pass</td><td>\n";
print "<input type=password name=pwd size=8 maxlength=8 value=\"$c_pwd\" class=infrm>&nbsp;&nbsp;&nbsp;\n";
print "<input type=submit value=\"Write\" class=button>\n";
print " <input type=reset value=\"Reset\" class=button>\n";
print "</td></tr></table><br>\n";
print "</TD></TR></TBODY></TABLE></form><br>\n";

}
###+--レス投稿フォーム-------------------------------------+###
sub resform {
&header;
&logopen;
foreach (@LINE) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/);
if ($in{'resnum'} eq "$num") {
$oyaname = $name; $oyacom = $com;  $oyadate = $date; $oyanum=$num;
if ($sub) { $oyasub = $sub; } else { $oyasub = "No Title"; }
if ($email) { $oyaemail = "[<a href=\"mailto:$email\">Mail</a>]"; } else { $oyaemail = ""; }
if ($url) { $oyaurl = "[<a href=\"http://$url\" target=$target>Web</a>]"; } else { $oyaurl = ""; }
}
}
if (!$oyaname) { &error2("$er_er","該当番号の記事は現行ログに存在しません"); }
print "+<a href=\"$script\?\">Back</a>+\n";
&formview;
print "<center>\n";
&footer;
print "</center>\n</body></html>\n";
exit;

}
###+--管理モード入室-------------------------------------+###
sub admin {
&header;
print "+<a href=\"$script?\">Back</a>+\n";
print "<center><big><font color=$t_color>- Admin -</font></big><br><br>\n";
print "<b>管理モードでは返信記事の投稿及び記事の・削除・編集</b>を、<br>\n";
print "<b>環境設定モードでは掲示板の環境設定</b>を行なうことができます<p>下記にパスワードを入力して、認証ボタンを押してください<br>\n";
print "<form action=\"$script\" method=$method>\n";
print "<input type=hidden name=mode value=\"admin2\">\n";
print "記事管理モード <input type=password name=pass size=8 class=infrm>";
print " <input type=submit value=\" 認証 \" class=button></form>\n";

print "<br><form action=\"$setscript\" method=$method>\n";
print "<input type=hidden name=mode value=\"htmlview\">\n";
print "環境設定モード <input type=password name=pass size=8 class=infrm>";
print " <input type=submit value=\" 認証 \" class=button>\n";
print "</form></center>\n</body></html>\n";
print "</center>\n</body></html>\n";
exit;
}

###+--管理モード＜レス投稿・編集・削除＞-------------+###
sub admin2 {
if ($pass ne "$in{'pass'}") { &error("$er_ps","$er_ngaps"); }

&logopen;
&header;

print "+<a href=\"$script?\">Back</a>+\n";
print "<center><big><font color=$t_color>- Admin -</font></big>\n";
print "<p>記事を<b>編集</b>する場合は、<font color=$t_color><b>該当記事の編集欄のボタンをクリックして編集を選択</b></font>して下さい<br>\n";
print "記事を<b>削除</b>する場合は、<font color=$t_color><b>該当記事の削除欄のボタンをクリックして削除を選択</b></font>して下さい<br>\n";

print "<p><form action=\"$script\" method=$method>\n";
print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
print "<input type=hidden name=vis_psw value=\"$in{'pass'}\">\n";
print "<input type=hidden name=ediad value=\"on\">\n";
print "<select name=mode class=infrm><option value=\"edit\" selected>編集\n";
print "<option value=\"deleidt\">削除</select>\n";
print "<input type=submit value=go class=button><p>\n";
print "<table border=2 bordercolor=$kj_wcol cellpadding=3 cellspacing=1>\n";
print "<tr><th>削除</th>\n";
print "<th>編集</th>\n";
print "<th colspan=2>No</th>\n";
print "<th>Date</th>\n";
print "<th>Name</th>\n";
print "<th>Title</th>";
print "<th>Comment</th>\n";
print "<th>Host</th>\n";
print "</tr>\n";

#--記事数取得--
$page = $in{'page'};
$lastdata = @LINE - 1;
$pagelast = $page + ($pagekcnt - 1);
if ($pagelast >= $lastdata) { $pagelast = $lastdata; }
foreach ($page .. $pagelast) { 
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/,$LINE[$_]);
$com =~ s/<br>/\r/g;
$com =~ s/\"/&quot;/g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g;
if ($email) { $name = "<a href=mailto:$email>$name</a>"; }
if ($num2 ne "" ) { $numres = "<b>$num2</b>のレス"; } else { $numres = "&nbsp;"; }
print "<tr><th><input type=checkbox name=dele_no value=\"$num\"></th>";
print "<th><input type=radio name=vis_no value=\"$num\"></th>";
print "<th>$num</th>";
print "<td nowrap>$numres</td>";
print "<td><small>$date</small></td>\n";
print "<th>$name</th>";
print "<th>$sub</th>";

$com2=substr($com,0,100);
print "<td><small>$com2..</small></td>\n";
print "<td>$host</td>\n";
print "</tr>\n";

}
print "</table></form></center>\n";

#--Next Backページボタンの設定--
$nextpage = $pagelast + 1;
$backpage = $page - $pagekcnt;
print "<center><table align=center><tr>\n";
if ($backpage >= 0) {
	print "<td><form method=$method action=$script>\n";
	print "<input type=hidden name=mode value=\"admin2\">\n";
	print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
	print "<input type=hidden name=page value=\"$backpage\">\n";
	print "&nbsp;<input type=submit value=\"Back\" class=button>&nbsp;\n";
	print "</form></td>\n";
	}
if ($pagelast ne $lastdata) {
	print "<td align=center><form method=$method action=$script>\n";
	print "<input type=hidden name=mode value=\"admin2\">\n";
	print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
	print "<input type=hidden name=page value=\"$nextpage\">\n";
	print "&nbsp;<input type=submit value=\"Next\" class=button>&nbsp;\n";
	print "</form></td>\n";
	}
print "</tr></table></center>\n";

print "</body></html>\n";
exit;
}

###+--管理者ログ削除処理-------------------------------------+###
sub deleidt {
if ($pass ne "$in{'pass'}") { &error("$er_ps","$er_er"); }
if ($in{'dele_no'} eq "") { &error("$er_non","$er_nokj"); }

if ($lock_kinou == 1){ &lock1; }
elsif($lock_kinou == 2) { &lock2; }

@up=();
open(IN,"$logfile") || &error("$er_log","$er_oplog");
$toplog = <IN>;
while ($_ = <IN>) {
$do_flag = 0;
($num,$num2,$d,$n,$e,$s,$c,$u,$h,$p,$co,$a,$ic) = split(/<>/);
foreach $dele_no (@DELE_NO) {
	if ($num eq "$dele_no" || $num2 eq "$dele_no") { $do_flag = 1; last; }
	}
	if ($do_flag == 0) { push(@up,$_); }
}
close(IN);

unshift(@up,$toplog);
open(DATA,">$logfile") || &error("$er_log","$er_nglog");
print DATA @up;
close(DATA);
&unlock;
&admin2;
}

###+--記事編集-------------------------------------+###
sub edit {

if ($in{'vis_no'} eq "" && $in{'vis_psw'} ne "") { &error("$er_non","$er_nokj"); }
if ($in{'ediad'} ne "on" && $in{'vis_no'} ne "" && $in{'vis_psw'} eq "") { &error("$er_non","$er_nops"); }
if ($in{'ediad'} ne "on" && $in{'vis_no'} eq "" && $in{'vis_psw'} eq "") { &error("$er_non","$er_nokp"); }
if ($in{'ediad'} eq "on" && $in{'vis_psw'} ne "$pass") { &error("$er_ps","$er_ngaps"); }
&logopen;
$eflag = 0;
foreach $line (@LINE) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/,$line);
	if ($in{'ediad'} ne "on" && $in{'vis_no'} eq "$num") {
		$eflag = 1;
		$crypted = crypt($in{'vis_psw'}, "sa"); 
		if ($crypted ne "$pwd") { &error("$er_ps","$er_ngps"); }
	}
	}
	if($in{'ediad'} ne "on" && $eflag == 0) { &error("$er_er","該当記事番号がログに存在しません"); }

&header;

print "+<a href=\"$script\?\">Back</a>+\n";
print "<center>";
print "<br>\n";

$lastdata = @LINE - 1;
foreach (0 .. $lastdata) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/, $LINE[$_]);

if ($num == $in{'vis_no'} ) {
&get_agent;
	print "<form action=\"$script\" method=$method>\n";
	if ($in{'ediad'} eq "on") {
	print "<input type=hidden name=adedit value=\"on\">\n";
	}
	print "<input type=hidden name=mode value=\"editidt\">\n";
	print "<input type=hidden name=no value=\"$num\">\n";
	print "<input type=hidden name=password value=\"$in{'vis_psw'}\"><p>\n";
print "<TABLE border=\"$kj_wsize\" width=\"$kj_w\" bgcolor=\"$kj_col\" cellpadding=\"5\" cellspacing=\"$kj_cs\" bordercolor=\"$kj_wcol\"><TBODY><TR>\n";
print "<TD bgcolor=\"$wk_col\" $wkg align=center>\n";
print "- Edit -</TD></TR><TR><TD bgcolor=\"$kj_col\" $kjg align=center>\n";
print "<br> 変更する個所のみ修正し<font color=$t_color><b>Edit</b></font>ボタンを押して下さい <br>\n";
	print "<br><table border=0 width=90%>\n";

if ($in{'ediad'} ne "on") { 
$Kname = "name";
$Kemail = "email";
$Kurl = "url";
$Kcol = "color";
$Karea = "area";
$Kicon = "icon";
} else {
$Kname = "a_name";
$Kemail = "a_email";
$Kurl = "a_url";
$Kcol = "a_color";
$Karea = "a_area";
$Kicon = "a_icon";
}
	print "<tr><td>Name</td><td><input type=text name=$Kname size=\"$name_fw\" value=\"$name\" class=infrm></td></tr>\n";
	print "<tr><td>Mail</td><td><input type=text name=$Kemail size=\"$name_fw\" value=\"$email\" class=infrm></td></tr>\n";
	print "<tr><td>Web</td><td><input type=text name=$Kurl size=\"$name_fw\" value=\"http://$url\" class=infrm></td></tr>\n";
	print "<tr><td nowrap>Title</td>\n";
	print "<td><input type=text size=$name_fw name=sub value=\"$sub\" class=infrm></td></tr>\n";
	print "<tr><td nowrap>Color</td><td>\n";
	if ($color eq "") { $color = $scol1[0]; }
	foreach (0 .. $#scol1) {
		if ($color eq "$scol1[$_]") {
			print "<input type=radio name=$Kcol value=\"$scol1[$_]\" checked>";
			print "<font color=\"$scol1[$_]\">$col_mk</font> \n";
		} else {
			print "<input type=radio name=$Kcol value=\"$scol1[$_]\">";
			print "<font color=\"$scol1[$_]\">$col_mk</font> \n";
		}
	}
print "<tr><td nowrap>Area</td><td><select name=$Karea class=infrm>\n";
		 foreach(0 .. $#areas) {
		    if ($area eq "$areas[$_]") {
		  	print "<option value=\"$areas[$_]\" selected>$areas[$_]\n";
		    } else {
			print "<option value=\"$areas[$_]\">$areas[$_]\n";
		    }
		  }
	print "</select></td></tr>\n";

	if ($icon_use) {
print "<tr><td nowrap>Icon</td><td><select name=$Kicon class=infrm>\n";
if ($masic ne "") {
	push(@icong,$masic);
	push(@iconn,"管理人用");
}
		foreach (0 .. $#icong) {
			
			if ($icon eq "$icong[$_]") {
				print "<option value=\"$icong[$_]\" selected>$iconn[$_]\n";
			} else {
				print "<option value=\"$icong[$_]\">$iconn[$_]\n";
			}
 		 }
		print "</select>&nbsp;<small>+<a href=\"$script?mode=iconlist\" target=_blank>Icon List</a>+</small>\n";
	  	print "</td></tr>\n";
	}

	$com =~ s/<br>/\r/g;
	print "<tr><td valign=top>Comment</td><td><textarea name=com cols=\"$come_fw\" rows=$rows class=infrm>$com</textarea></td></tr>\n";
	print "<tr><td></td><td><input type=submit value=\"Edit\" class=button> <input type=reset value=\"Reset\" class=button>\n";
	print "</td></tr></table></form>\n";
	}
	print "</TD></TR></TBODY></TABLE><br>\n";

}
print "</center></body></html>\n";
exit;
}

###+--編集処理-------------------------------------+###
sub editidt {
if ($in{'adedit'} eq "on") { 
	if ($in{'a_name'} eq "") { &error("$er_non","お名前を記入してください"); }
} else {
	if ($in{'name'} eq "") { &error("$er_non","お名前を記入してください"); }
}
if ($in{'com'} eq "") { &error("$er_non","コメントを記入してください。"); }

if ($lock_kinou == 1){ &lock1; }
elsif($lock_kinou == 2) { &lock2; }
&logopen;

@up=();
foreach $line (@LINE) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/, $line);
$flag = 0;
	if ($in{'no'} eq "$num") {

	if ($in{'adedit'} eq "on") { 
	if ( $in{'password'} eq "$pass") { $flag = 1; } else { &error("$er_ps","$er_ngps"); }
        } else {
	$crypted = crypt($in{'password'}, "sa"); 
	if ($crypted eq "$pwd") { $flag = 1; } else { &error("$er_ps","$er_ngps"); }
	}

	if ($flag == 1) { 
		if ($in{'adedit'} eq "on") { 
		$line = "$num<>$num2<>$date<>$in{'a_name'}<>$in{'a_email'}<>$in{'sub'}<>$in{'com'}<>$in{'a_url'}<>$host<>$pwd<>$in{'a_color'}<>$in{'a_area'}<>$in{'a_icon'}<>\n";
		} else {
		$line = "$num<>$num2<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>$in{'color'}<>$in{'area'}<>$in{'icon'}<>\n";
		}
	}
	}
	push(@up,$line);
	}

unshift(@up,$toplog);
open(DATA,">$logfile") || &error("$er_log","$er_nglog");
print DATA @up;
close(DATA);
&unlock;
&htmlview;
}

###+--ビジター記事削除処理-------------------------------------+###
sub delevis {
if ($in{'vis_no'} eq "" && $in{'vis_psw'} ne "") { &error("$er_non","$er_nokj"); }
if ($in{'vis_no'} ne "" && $in{'vis_psw'} eq "") { &error("$er_non","$er_nops"); }
if ($in{'vis_no'} eq "" && $in{'vis_psw'} eq "") { &error("$er_non","$er_nokp"); }

if ($lock_kinou == 1){ &lock1; }
elsif($lock_kinou == 2) { &lock2; }
&logopen;

$flag=0;
foreach (@LINE) {
($num,$num2,$d,$n,$e,$s,$c,$u,$h,$pwd,$c,$a,$ic) = split(/<>/);
if ($flag == 0 && $in{'vis_no'} eq "$num") {
	$delpsw = $pwd;
	if ($num2 eq "") { $flag=2; } else { $flag=1; }
}
elsif ($flag == 2 && $in{'vis_no'} eq "$num2") { next; }
else { push(@up,$_); }
}

if ($flag == 0) { &error("$er_er","該当記事が存在しません"); }
$crypted = crypt($in{'vis_psw'}, "sa"); 
if ($crypted eq "$delpsw") { $flag = 1; } else { &error("$er_ps","$er_ngps"); }

unshift(@up,$toplog);
open(DATA,">$logfile") || &error("$er_er","$er_nglog");
print DATA @up;
close(DATA);
&unlock;
&htmlview;
}

###+--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">
$style
<title>$title</title></head>
HTML

if ($bggif) {
	print "<body background=\"$bggif\" bgproperties=\"fixed\" bgcolor=$bgcol text=$text link=$link vlink=$vlink alink=$alink>\n<!-- $version (C) PRETTY BOOK http://www.prettybook.com/ -->\n";
	} else {
	print "<body bgcolor=$bgcol text=$text link=$link vlink=$vlink alink=$alink>\n<!-- $version (C) PRETTY BOOK http://www.prettybook.com/ -->\n";
	}
}

###+--HTML部フッター（削除しないでね！）---------------+###
sub footer{
print "<br><br><small> <a href=\"http://www.prettybook.com/\" target='_top'><font class=xsm>+</font> PurestNote<font class=xsm> by PrettyBook</font></small></a>\n";
}

###+--ゲットタイム-------------------------------------+###
sub get_time {
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)  = localtime(time);
$year = $year + 1900; $mon = $mon + 1;
@thisday = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$day  = sprintf("%04d\/%02d\/%02d(%s)",$year,$mon,$mday,$thisday[$wday]);
$time = sprintf("%02d\:%02d", $hour,$min);

$date = "$day $time";
}

###+--クッキー発行-------------------------------------+###
sub set_cookie {
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$my,$dmy) = gmtime(time + $c_day*24*60*60);
$yearg += 1900;
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
@week = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

$gmt_time = "@week[$wdyg], $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
$m_cook="name<>$in{'name'},email<>$in{'email'},url<>$in{'url'},pwd<>$in{'pwd'},color<>$in{'color'},area<>$in{'area'},icon<>$in{'icon'}";
print "Set-Cookie: PUREST=$m_cook; expires=$gmt_time\n";
}

###+--クッキーゲット-------------------------------------+###
sub get_cookie {
$cook = $ENV{'HTTP_COOKIE'};
@query = split(/; */,$cook);
foreach $xx (@query) {
	($key, $val) = split(/=/, $xx);
	$val =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
	$CK{$key} = $val;
	}

@query = split(/\,/, $CK{'PUREST'});
foreach $xx (@query) {
	local($key, $val) = split(/<>/, $xx);
	$COOKIE{$key} = $val;
	}
$c_name = $COOKIE{'name'}; $c_email= $COOKIE{'email'}; $c_url  = $COOKIE{'url'};
$c_pwd  = $COOKIE{'pwd'}; $c_color = $COOKIE{'color'};  $c_area = $COOKIE{'area'}; $c_icon = $COOKIE{'icon'};

if ($in{'name'}) { $c_name = $in{'name'}; }
if ($in{'email'}) { $c_email = $in{'email'}; }
if ($in{'url'}) { $c_url = $in{'url'}; }
if ($in{'pwd'}) { $c_pwd = $in{'pwd'}; }
if ($in{'color'}) { $c_color = $in{'color'}; }
if ($in{'area'}) { $c_area = $in{'area'}; }
if ($in{'icon'}) { $c_icon = $in{'icon'}; }
}

###+--ホストのゲット-------------------------------------+###
sub get_host {
$hostname = $ENV{'REMOTE_HOST'};
$address = $ENV{'REMOTE_ADDR'};

if ($hostname eq "" || $hostname eq "$address") { $hostname = gethostbyaddr(pack("C4", split(/\./, $address)), 2); }
if ($hostname eq "") { $hostname = $address; }
}

###+--ログオープン-------------------------------------+###
sub logopen {
open(IN,"$logfile") || &error("$er_log","$er_oplog");
@LINE = <IN>;
close(IN);
$toplog = shift(@LINE);
}

###+--アイコンリスト表示-------------------------------+###
sub iconlist {
&header;
print "<center><br><br>\n";
print "<big><font color=\"$t_color\">- Icon List -</font></big>\n";
print "<p><table border=2 bordercolor=\"$kj_wcol\" cellpadding=5 cellspacing=2><tr>\n";
if ($masic ne "") {
	push(@icong,$masic);
	push(@iconn,"管理人用");
}
foreach (0 .. $#icong) {
		print "<tr><td nowrap bgcolor=\"$kj_col\"><img src=\"$icong[$_]\"> $iconn[$_]</td></tr>\n";
	}
print "</table></center><br></body></html>\n";
exit;
}

###+--カウンタ-----------------------------------------+###
sub count {
&lock_c;
if (!open(IN, "$cntfile")) { &error("$er_er","$cntfileが開きません"); }
$cline = <IN>;
close(IN);

if ($mode eq "" && $page eq "") { $cflag=1; } else { $cflag=0; }
$ipadd="$ENV{'REMOTE_ADDR'}";
($cnt,$ip) = split(/<>/,$cline);
if ($ipadd eq "$ip") { $cflag=0; }

if($cflag) { 
$cnt++;
open(OUT,">$cntfile") || &error("$er_er","$cntfileを更新できません");
print OUT "$cnt<>$ipadd<>";
close(OUT);
}
&unlock;

while(length($cnt) < $cnt_keta) { $cnt = '0' . "$cnt"; }
@cnts = split(//,$cnt);
}

###+--ロックファイル１-----------------------------------------+###
sub lock1 { 
local($try) = 3;
while (!symlink(".", $lockfile)) {
	if (--$try <= 0) { &error("$er_lock","$er_acs"); }
	sleep(2);
}

}
###+--ロックファイル２-----------------------------------------+###
sub lock2 { 
$try = 0;
while(-f $lockfile){
	$try++;
	if($try > 3)  { &error("$er_lock","$er_acs"); }
	sleep(2);
}
open(LOCK,">$lockfile");
close(LOCK);

}

###+--カウンタロック-----------------------------------------+###
sub lock_c {
$try = 0;
while(-e "$clockfile") {
	$try++;
	if ($try >= 3) { &error("$er_lock","$er_acs"); }
	sleep(1);
}

open(LOCK,">$clockfile");
close(LOCK);
}

###+--アンロック-----------------------------------------+###
sub unlock { 
if (-e $lockfile) { unlink($lockfile); }
if (-e $clockfile)  { unlink($clockfile); }
}

###+--メール送信-----------------------------------------+###
sub mailgo {
$name=$in{'name'}; $email=$in{'email'}; $url=$in{'url'};
$com=$in{'com'}; $area=$in{'area'}; $sub=$in{'sub'};
if($sub eq "") { $stitle="NoTitle"; } else { $stitle =$sub; }
if($url eq "") { $web = "NoWeb"; } else { $web = "http://$url"; }
if ($email eq "") { $email2 = "NoMail"; } else { $email2 = "$email"; }
$mailtitle = "$title に書き込みがありました";
$com =~ s/<br>/\n/g;
$com =~ s/&lt;/</g;
$com =~ s/&gt;/>/g;
$com =~ s/&#44;/\,/g;

	$message .= "$mailtitle\n";
	$message .= "------------------------------------------\n\n";
	$message .= "Date : $date\n";
	$message .= "Host : $host\n";
	$message .= "Name : $name\n";
	if ($area) { $message .= "Area  : $area\n"; }
	$message .= "Mail : $email2\n";
	$message .= "Web  : $web\n";
	$message .= "Title: $stitle\n";
	$message .= "Comment:\n";
	$message .= "$com\n";

#--メールアドレスがない場合--
if ($email eq "") { $email = "nomail\@add.ress"; }

&jcode'convert(*mailtitle,'jis');
&jcode'convert(*message,'jis');
if (open(MAIL,"| $sendmail $masmail")) {
print MAIL "To: $masmail\n";
print MAIL "From: $email\n";
print MAIL "Subject: $mailtitle\n";
print MAIL "Content-type: text/plain;\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "X-Mailer: $version\n\n";
print MAIL "$message\n";
close(MAIL);
}
}

###+--- 過去ログ生成---------------------------------------+###
# <<< Thanks：KENT WEBさんの新規ファイル生成処理法関連・ログ移行処理を引用させていただきました
sub pastlog {
$new_flag = 0;
open(NO,"$pastno") || &error("$er_er","$pastnoが開きません");
$pcnt = <NO>;
close(NO);

#-ファイル名定義-
$pastfile  = "$past_dir\/$pcnt\.dat";

#-ない場合新規生成-
unless(-e $pastfile) { 
$new_flag = 1;
$PLINE[0] = "<!--#S#-->\n";
$PLINE[1] = "<!--#L#-->\n";
open(DATA,">$pastfile") || &error("$er_er","$pastfileが更新できません");
print DATA @PLINE;
close(DATA);
chmod(0666,"$pastfile");
}

if ($new_flag == 0) {
	open (DATA,"$pastfile") || &error("$er_er","$pastfileが開きません");
	@PLINE = <DATA>;
	close(DATA);
}

#-行数を超えたら新規生成-
if ($#PLINE > $plogline) { &next_log; }

foreach (@pastlines) {
($pnum,$pnum2,$pdate,$pname,$pemail,$psub,$pcom,$purl,$phost,$ppw,$pcolor,$parea,$picon) = split(/<>/);

if ($alinkuse == 1 ) {
$pcom =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\">$1:\/\/$2<\/a>/g;
$pcom =~ s/([\w|\!\#\$\%\'\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)\@([\w|\!\#\$\%\'\(\)\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)/<a href="mailto:$1\@$2">$1\@$2<\/a>/g;
}
 
if ($pemail) { $pemail = "[<a href=\"mailto\:$pemail\">Mail</a>]"; }
if ($purl) { $purl = "[<a href=http://$purl target=$target>Web</a>]"; }
if ($parea) { $parea = "&lt;$parea&gt;"; }
if ($pnum2) { $pnum2 = "<small>($pnum2のRes)</small>"; }
if ($psub) { $psub = "<b>$psub</b>"; }
	elsif (!$psub) { $psub = "<b>No title</b>"; }

if ($kj_wsize) { $bg = "border=\"$kj_wsize\" bordercolor=\"$kj_wcol\" bgcolor=\"$kj_col\""; }

$PLOG = <<"HTML";
<center><TABLE $bg width=\"$kj_w\" cellpadding=5 cellspacing=$kj_cs><tr><td>[$pnum] $pnum2 $psub <P><blockquote>$pcom</blockquote><div align=right>From：<b>$pname</b> <small>\@$parea $pemail $purl<Br>Date：$pdate</small></div><!--$phost--></td></tr></table><hr color=\"$kj_wcol\" size="$kj_wsize" width=\"$kj_w\"></center>
HTML

push(@PLOGS,"$PLOG");

}

@new = ();
$flag=0;
foreach (@PLINE) {
	if ($_ =~ /<!--#L#-->/i) { $flag=1; last; }
	push (@new,$_);
	if ($_ =~ /<!--#S#-->/i) { push (@new,@PLOGS); }
}
if (!$flag) {
	push(@new,"<!--#S#-->\n");
	push(@new,@PLOGS);
}

push (@new,"<!--#L#-->\n");

open(DATA,">$pastfile") || &error("$er_er","$pastfileが更新できません");
print DATA @new;
close(DATA);

}

#+--- 新規ファイル生成---+#
sub next_log {
#-ファイルのカウントアップ-
$pcnt++;
#-更新-
open(NO,">$pastno") || &error("$er_er","$pastnoが更新できません");
print NO "$pcnt";
close(NO);
$pastfile  = "$past_dir/$pcnt\.dat";
#-新規ファイルを生成更新-
$new_flag = 1;
$PLINE[0] = "<!--#S#-->\n";
$PLINE[1] = "<!--#L#-->\n";
open(DATA,">$pastfile") || &error("$er_er","$pastfileが開きません");
print DATA @PLINE;
close(DATA);
chmod(0666,"$pastfile");
}

#+--- 過去ログHTML---+#
sub pastview {

#-カウントファイル-
open(NO,"$pastno") || &error("$er_er","$pastnoが開きません");
$pcnt = <NO>;
close(NO);

&header;
if(!$adv_up) { $adv_up = ""; } else { print "<center>$adv_up</center>\n"; }
print "+<a href=\"$script?\">Back</a>+\n";
print "<center><big><font color=$t_color>- Past Log -</font></big>\n";
print "<form method=$method action=$script>\n";
print "<input type=hidden name=mode value=\"past\">\n";
print "Past File選択 <select name=pno class=infrm>\n";
if($pcnt eq "$in{'pno'}") {
print "<option value=\"$pcnt\" selected>No\.$pcnt\n";
} else {
print "<option value=\"$pcnt\">No\.$pcnt\n";
}
for ($c=$pcnt-1; $c>0; $c--) {
if($c eq "$in{'pno'}") {
	print "<option value=\"$c\" selected>No\.$c\n";
} else {
	print "<option value=\"$c\">No\.$c\n";
}
}
print "</select> \n";
print " <input type=submit value=\"go\" class=button></form>\n";

if($in{'pno'} ne "") {
print "- Past No.$in{'pno'} -<p>\n";
$pastfile  = "$past_dir\/$in{'pno'}\.dat";
open(IN,"$pastfile") || &error("$er_log","$in{'pno'}\.datが開けません");
@LINE = <IN>;
close(IN);
$TOP = shift(@LINE);
$LAST = pop (@LINE);
$logt = @LINE;

$page = $in{'page'};
$p_nocnt = $plogline/$ppagekct;
if ( $plogline ne "$ppagekct" && $logt ne "0") {
print "<table cellpadding=3 cellspacing=0 width=\"$kj_w\"><tr><td align=center>\n";
print "Page";
$logtt = int(($logt-1) / $ppagekct);
$p = 0;
for($i=0;$i<=$logtt;$i++){
    if ($p_nocnt < $i ){ last; }
    
    $l = $page/$ppagekct;
        if ( $l eq $i ){
        print "[<b>$i</b>]";
        }else{
        print "[<A HREF=\"$script?mode=past&pno=$in{'pno'}&page=$p\">$i</A>]";
        }
$p += $ppagekct;
}

print "</td></tr></table><br>\n";
}elsif ($logt eq "0") {
print "<small>まだPast Fileに移行したログはありません</small>\n";
}
print "<br>\n";
#--記事数取得--
$lastdata = @LINE - 1;
$pagelast = $page + ($ppagekct - 1);
if ($pagelast >= $lastdata) { $pagelast = $lastdata; }
foreach ($page .. $pagelast) { 
print "$LINE[$_]\n";
}

} #ここまで
if(!$adv_dn) { $adv_dn = "<br>"; } else { print "<BR><BR><BR><BR><BR><BR>$adv_dn\n"; }

print "</center></body></html>\n";

exit;

}

###+--検索-----------------------------------------+###
sub search {
&header;

print <<"EOM";
+<a href="$script?">Back</a>+
<center><font color=\"$t_color\"><big>- Search -</big></font><P>
<form action="$script" method="$method">
<input type=hidden name=mode value="search">
<table border=0 cellpadding=3 cellspacing=1>
<tr><td>Key Word: </td><td><input type=text name=keyword size=30 class=infrm>
<input type=radio name=keystyle value="1" checked>AND
<input type=radio name=keystyle value="0">OR</td></tr>
EOM

if ($past_use) {
open(IN,"$pastno") || &error("$er_log","$pastnoが開きません");
$plogno = <IN>;
close(IN);
print "<tr><td>対象Log: </td><td>";
print "<select name=target class=infrm><option value=\"nowlog\"><B>現行ログ</B>\n";
$c=$plogno;
foreach (1 .. $plogno) {
	print "<option value=\"$c\">過去ログ$c\n";
	$c--;
}
print "</select></td></tr>\n";

} else {
print "<input type=hidden name=target value=\"nowlog\">\n";
}

print "<tr><th colspan=2><input type=submit value=\"Search\" class=button>";
print " <input type=reset value=\"Reset\" class=button></th></tr>\n";
print "</table></form></center>\n";

if ($in{'keyword'} eq "") {

print "<center>キーワードは半角スペースで区切って入力してください\n";

} else {

#-現行ログ検索
if ($in{'target'} eq "nowlog") {
&logopen;
&searchdo;

print "<center>- 計：$hit件 -\n";
print "<P>\n";
foreach (@hits) {
($num,$num2,$date,$name,$email,$sub,$com,$url,$host,$pwd,$color,$area,$icon) = split(/<>/,$_);
if ($alinkuse == 1 ) {
	$com =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\" target=\"$target\">$1:\/\/$2<\/a>/g;
	$com =~ s/([\w|\!\#\$\%\'\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)\@([\w|\!\#\$\%\'\(\)\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)/<a href="mailto:$1\@$2">$1\@$2<\/a>/g;
	}
if (!$sub) { $sub = "No Title"; }
if ($email) { $email = "<br>mail\:<a href=mailto:$email>$email</a>"; }
if ($url) { $url = "<br>web\:<a href=http://$url target=_top>http://$url</a>"; }
if($num2) { $num2 = "<small>($num2のRES)</small>"; }
if ($kj_wsize) { $bg = "border=\"$kj_wsize\" bordercolor=\"$kj_wcol\" bgcolor=\"$kj_col\""; }

print "<TABLE $bg width=\"$kj_w\" cellpadding=5 cellspacing=$kj_cs><tr><td>[$num] $num2 <b>$sub</b>\n";
print "<p><blockquote>$com</blockquote><div align=right>From：<b>$name</b> <small>\@$area $email $url <br>Date：$date</small>\n";
print "</div></td></tr></table><hr color=\"$kj_wcol\" size=\"$kj_wsize\" width=\"$kj_w\">\n";
}

#-過去ログ検索
} else {
$pastfile = "$past_dir\/$in{'target'}\.dat";
open(IN,"$pastfile") || &error("$er_log","$pastfileが開きません");
@LINE = <IN>;
close(IN);
shift(@LINE);
pop(@LINE);
&searchdo;

print "<center>- PastLogFile No\.$in{'target'} 計：$hit件 -\n";
print "<P>\n";
foreach (@hits) {
print "$_\n";
}

}

}
print "</center></body></html>\n";
exit;
}

#+---検索処理---+#
sub searchdo {
$keystyle = $in{'keystyle'};
$keyword = $in{'keyword'};
@substrs = split(/ /,$keyword);

foreach (@LINE) {
$search_flag = 0;
#-or検索
if ($keystyle == 0) {
	foreach $substr(@substrs){
		if (index($_,$substr) >= 0) { $search_flag = 1; last; }
		} 
#-and検索
} else {
	foreach $substr(@substrs){
		if (index($_,$substr) >= 0) { $search_flag = 1; }
		else { $search_flag = 0; last; }
	}
}
	if ($search_flag == 0) { next; }
	if ($search_flag == 1) { push(@hits,$_); }
}

$hit = @hits;
}


###+--HOW TOメッセージ-------------------------------------+###
sub how {
&header;

print <<"EOM";
+<a href="javascript:history.back()">Back</a>+
<center><br>
EOM

print "<TABLE border=\"$kj_wsize\" width=\"$kj_w\" bgcolor=\"$kj_col\" cellpadding=\"5\" cellspacing=\"$kj_cs\" bordercolor=\"$kj_wcol\"><TBODY><TR>\n";
print "<TD bgcolor=\"$wk_col\" $wkg align=center>\n";
print "<big><font color=\"$wk_fcol\">- How to use -</font></big></TD></TR><TR><TD bgcolor=\"$kj_col\" $kjg align=center>\n";

print <<"EOM";
<table border=0 cellpadding=10 align=center width="90%">
<tr><td>
EOM

	if ($taguse) {
		print "<LI>Messageには、<b>タグ使用をすることができます。</b><P>\n";
	} else {
		print "<LI>投稿記事には、<b>タグは一切使用できません。</b><P>\n";
	}

	if ($mail_dt) {
		print "<LI>投稿の際の必須入力項目は<b>「Name」「Message」「Mail」</b>です。<P>\n";
	} else {
		print "<LI>投稿の際の必須入力項目は<b>「Name」</b>と<b>「Message」</b>です。<P>\n";
	}

	if ($past_use) {
		print "<LI>記事の最大保存件数は<b>$max件</b>です。それを超えると古い順に過去ログへ移行します。<P>\n";
	} else {
		print "<LI>記事の最大保存保持件数は<b>$max件</b>です。それを超えると古い順に自動削除されます。<P>\n";
	}

	print <<"EOM";
<LI>文字化けの原因となるので、<b>半角カナは一切使用しないで下さい。</b><P>
<LI>記事の投稿時に<b>「Pass」</b>にパスワード（英数字で4-8文字以内）を入れておくと、その記事は掲示板下段のFormから編集・削除できます。<P>
<LI><a href="$script?mode=search">「Search」</a>から「キーワード」による簡易検索ができます。<P>
<LI>管理者の判断で、記事を予\告なく削除することがあります。
</td></tr></table></center>
<br>
EOM

print "</TD></TR></TBODY></TABLE><br>\n";
print "</center></body></html>\n";

exit;
}

###+--エラーメッセージ-------------------------------------+###
sub error {
#--ロックしてる場合ロックファイル削除--
if (-e $lockfile) { unlink($lockfile); }
if (-e $clockfile) { unlink($clockfile); }

($error1,@error2) = @_;

&header;

print "<p><br><br><br><center>+--<span class=xsp>$error1</span>--+\n";
print "<p><b>@error2</b>\n";
print "<p><br><br><br><br><br>ブラウザの[戻る]ボタンを押して前の画面に戻ってください。<p>\n";
print "</center></body></html>\n";
exit;
}

###+--エラーメッセージ-------------------------------------+###
sub error2 {

($error1,@error2) = @_;

print "<p><br><br><br><center>+--<span class=xsp>$error1</span>--+\n";
print "<p><b>@error2</b>\n";
print "<p><br><br><br><br><br>ブラウザの[戻る]ボタンを押して前の画面に戻ってください。<p>\n";
print "</center></body></html>\n";
exit;
}

###+--エラーメッセージ-------------------------------------+###
sub seterror {

print "Content-type: text/html\n\n";
print <<"HTML";
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Lemonede</title>
<STYLE TYPE="text/css">
<!--
body, td, th { font-size: 10pt; font-family: 'verdana,"ＭＳ Ｐゴシック",sans-serif'; }
a:hover { color: #996666; }
a:link  { text-decoration: none; }
a:visited { text-decoration: none; }
big   { font-size: 14pt; }
-->
</STYLE>
</head>
HTML

print "<body bgcolor=#FFFFFF text=#996666 link=#cc6699 vlink=#996666 alink=#996666>\n<!-- $version (C) PRETTY BOOK http://www.prettybook.com/ -->\n";

print "<center><p><br><br><big>- 環境設定を行なってください -</big><br><br>\n";
print "環境が未設定なので、環境設定モードで設定を行なう必要があります<br>下記に管理用パスワードを入力して、認証ボタンを押してください\n";

print "<P><form action=\"$setscript\" method=$method>\n";
print "<input type=hidden name=mode value=\"htmlview\">\n";
print "<input type=password name=pass size=8 class=infrm>";
print " <input type=submit value=\" 認証 \" class=button>\n";
print "</form></center>\n</body></html>\n";
exit;
}

