#!/usr/local/bin/perl

$|=1;

require './cgi-lib.pl';
require './boardini.cgi';

$time = time;
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($time);
$year = $year+1900;
$mon = $mon+1;
$datenum = sprintf("%04d%02d%02d%02d%02d%02d",$year,$mon,$mday,$hour,$min,$sec);
$upurl = $updir if $upurl eq "";

require './skinini.cgi';
require './ta-lib.cgi';

#---------------------------------------------------------------ファイル作成

$i = "index.html";
if (!(-e "$logdir$i")) { # index.html
	open(OUT,">$logdir$i");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$i");
	chmod 0606,"$logdir$i";
}
if (!(-e "$updir$i")) { # index.html
	open(OUT,">$updir$i");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$updir$i");
	chmod 0606,"$updir$i";
}
if (!(-e "$logdir$log_d")) { # log.dat
	open(OUT,">$logdir$log_d");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$log_d");
	chmod 0606,"$logdir$log_d"; # パーミッション600で動くなら変更
}
if (!(-e "$logdir$rem_d")) { # remove.dat
	open(OUT,">$logdir$rem_d");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$rem_d");
	chmod 0606,"$logdir$rem_d";
}
if (!(-e "$logdir$kakono")) { # kako no
	open(OUT,">$logdir$kakono");
	print OUT '1<><>0<><><><>';
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$kakono");
	chmod 0606,"$logdir$kakono";
}
$i = 1;
if (!(-e "$logdir$i$kak_d")) { # kako log
	open(OUT,">$logdir$i$kak_d");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$i$kak_d");
	chmod 0606,"$logdir$i$kak_d";
}
if (!(-e "$logdir$hostlist")) { # hostlist
	open(OUT,">$logdir$hostlist");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$hostlist");
	chmod 0606,"$logdir$hostlist";
}
if (!(-e "$logdir$alog")) { # アクセスログ
	open(OUT,">$logdir$alog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$alog");
	chmod 0606,"$logdir$alog";
}
if (!(-e "$logdir$codelog")) { # コードログ
	open(OUT,">$logdir$codelog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$codelog");
	chmod 0606,"$logdir$codelog";
}
if (!(-e "$logdir$errorlog")) { # エラーログ
	open(OUT,">$logdir$errorlog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$errorlog");
	chmod 0606,"$logdir$errorlog";
}
if (!(-e "$logdir$up_count")) { # ファイルアップ記録ファイル
	open(OUT,">$logdir$up_count");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$up_count");
	chmod 0606,"$logdir$up_count";
}
if (!(-e "$logdir$filecount")) { # ファイルアップ記録ファイル
	open(OUT,">$logdir$filecount");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$filecount");
	chmod 0606,"$logdir$filecount";
}
if (!(-e "$logdir$plog")) { # IP抜きログ
	open(OUT,">$logdir$plog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$plog");
	chmod 0606,"$logdir$plog";
}
if (!(-e "$logdir$ad_pas")) { # パスワードファイル
	open(OUT,">$logdir$ad_pas");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$ad_pas");
	chmod 0606,"$logdir$ad_pas";
}
if (!(-e "$logdir$adminlog")) { # このcgiのアクセスログ
	open(OUT,">$logdir$adminlog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$adminlog");
	chmod 0606,"$logdir$adminlog";
}
if (!(-e "$logdir$adminlog")) { # このcgiのアクセスログ
	open(OUT,">$logdir$adminlog");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$adminlog");
	chmod 0606,"$logdir$adminlog";
}
if (!(-e "$logdir$recentry")) { # 投稿履歴記録ファイル名
	open(OUT,">$logdir$recentry");
	close(OUT);
	chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$recentry");
	chmod 0606,"$logdir$recentry";
}

$ad_pas = $logdir.$ad_pas;
$title = "管理者モード - $title";

#---------------------------------------------------------------main

if ($tag_on) {&decode3;} else {&decode;}

&count;
$pasad = $in{'pasad'};
if ( !open(DB,"$ad_pas") ) { &error('0');}
@lines = <DB>;
close(DB);
$password = shift(@lines);
chop($password) if ($password =~ /\n$/);
($header, $password) = split(/:/, $password);
if ($password =~ /^\$1\$/) {
	$salt = 3;
} else {
	$salt = 0;
}
if ($header ne 'crypt_password' || $password eq '') {
	$start = 1;
	&password;
}
if ($in{'action'} eq 'pas' && $in{'papost'} eq 'pcode') {
	&password;
} elsif ($in{'command'} eq 'pass_change' && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&password;
} elsif ($in{'command'} eq "write" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&write;
} elsif ($in{'command'} eq "reswrite" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&reswrite;
} elsif ($in{'command'} eq "new_form" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&writeimod;
} elsif ($in{'command'} eq "kickhost" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&kickhost;
} elsif ($in{'command'} eq "captrip" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&captrip;
} elsif ($in{'command'} eq "analyse" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&analyse;
} elsif ($in{'command'} eq "log_size" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&log_size;
} elsif ($in{'command'} eq "mode_change" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	open(DB,"+<$logdir$mainte");
	eval {flock(DB,2);};
	$mainte_mode=<DB>;
	$mainte_mode++; if ($mainte_mode >3) {$mainte_mode = 0;}
	seek(DB, 0, 0);
	print DB $mainte_mode;
	truncate(DB, tell(DB));
	close(DB);
	$pasad='';
} elsif ($in{'command'} eq "edit" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&edit;
} elsif ($in{'command'} eq "access_log" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&log;
} elsif ($in{'command'} eq "envcheck" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&env;
} elsif ($in{'command'} eq "log_delete" && crypt($pasad, substr($password,$salt,2)) eq $password) {
	&log_delete;
}
&html;
exit;

#---------------------------------------------------------------env

sub env {
	print(&PrintHeader);
	print(&HtmlTop("PrintVariables"));
	print( &PrintEnv(%val), "\n" );
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------html

sub html {
	if (crypt($pasad, substr($password,$salt,2)) eq $password) { &loglist; }
	print(&PrintHeader);
	print qq|<HTML><HEAD>|;
	print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
	print qq|<TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD><BODY>|;
	print "[total $countt 24hr $count24 5min $count5]<BR>$host<P>";
	print "掲示板の更新日時 ";
	print "$last_up_date:$last_up_name <P>";

#	print "<P>掲示板のアクセスログ<BR>";
#	open(LOG, "$logdir$alog") || &error('ファイルエラー');
#	my @lines = <LOG>;
#	close(LOG);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[0]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[1]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[2]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
#	print "<P>管理者モードのアクセスログ<BR>";
#	open(LOG, "$logdir$adminlog") || &error('ファイルエラー');
#	@lines = <LOG>;
#	close(LOG);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[0]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[1]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
#	($datep,$timep,$addrp,$count) = split(/<>/, $lines[2]);
#	print "$datep\[$addrp\]<BR>" if ($datep);
	if ($mainte_mode == 0) {print "<P>モード = 制限なし";}
	elsif ($mainte_mode == 1) {print "<P>モード = 新スレ禁止";}
	elsif ($mainte_mode == 2) {print "<P>モード = 投稿禁止";}
	elsif ($mainte_mode == 3) {print "<P>モード = アクセス禁止";}
	print qq|<P><A href="$reload">掲示板へ</A>|;
	print qq|<P><FORM method="POST" action="$ad_rel">|;
	print qq|<FORM method="POST" action="$ad_rel">|;
	print qq|<SELECT name="command">|;
	print qq|<OPTION value="new_form">新規スレッド|;
	print qq|<OPTION value="log_edit">レスの編集と削除|;
	print qq|<OPTION value="log_delete">ログの削除と移動|;
	print qq|<OPTION value="mode_change">モード変更|;
	print qq|<OPTION value="access_log">アクセスログ|;
	print qq|<OPTION value="analyse">アクセス解析|;
	print qq|<OPTION value="kickhost">アクセス制限|;
	print qq|<OPTION value="captrip">キャップ設定|;
	print qq|<OPTION value="log_size">ログサイズ|;
	print qq|<OPTION value="pass_change">管理パス変更|;
	print qq|<OPTION value="envcheck">env_check|;
	print qq|</SELECT>|;
	print qq| <INPUT type="password" name="pasad" size="8" maxlength="8">|;
	print qq| <INPUT type="submit" value="admin">|;
	print qq|</FORM>|;
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------write i-mode

sub writeimod {
	if ($imod) {
		print(&PrintHeader);
		print qq|<HTML><HEAD><TITLE>$title</TITLE>|;
		print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
		print qq|</HEAD><BODY>|;
		print qq|<FORM method="POST" action="$ad_rel">|;
		print qq|<INPUT type="hidden" name="command" value="write">|;
		print qq|Name<BR><INPUT type="text" name="name" maxlength="20"><BR>|;
		print qq|Subject<BR><INPUT type="text" name="subject" maxlength="60"><BR>|;
		print qq|Message<BR><TEXTAREA name="message" rows="3"></TEXTAREA><BR>|;
		print qq|<SELECT name="how"><OPTION value="0">Normal Mode|;
		print qq|<OPTION value="1">Source Code Mode</SELECT><BR>|;
		print qq|Link<BR><INPUT type="checkbox" name="link" value="1" checked><BR>|;
		print qq|Pass<BR><INPUT type="password" name="pwd" maxlength="8"><BR>|;
		print qq|Mail<BR><INPUT type="text" name="mail" maxlength="50"><BR>|;
		print qq|URL<BR><INPUT type="text" name="url" maxlength="100"><BR>|;
		print qq|Color<BR><INPUT type="text" name="color" maxlength="4"><BR>|;
		print qq|Icon<BR><INPUT type="text" name="icon" maxlength="4"><BR>|;
		print qq|<INPUT type="submit" value="submit / reload"><BR>|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|</FORM>|;
		print(&HtmlBot);
		exit;
	} else {
		print(&PrintHeader);
		print qq|<HTML><HEAD>|;
		print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
		print qq|<TITLE>$title</TITLE>|;
		print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
		print qq|</HEAD><BODY>|;
		print qq|<FORM method="POST" action="$ad_rel" enctype="multipart/form-data">|;
		print qq|<INPUT type="hidden" name="command" value="write">|;
		print qq|Name <INPUT type="text" name="name" size="24">|;
		print qq| Mail <INPUT type="text" name="mail" size="24"><BR>|;
		print qq|Subject <INPUT type="text" name="subject" size="56"><BR>|;
		print qq|Message <SELECT name="how"><OPTION value="0">Normal Mode|;
		print qq|<OPTION value="1">Source Code Mode</SELECT>|;
		print qq| <INPUT type="checkbox" name="link" value="1" checked> Link|;
		print qq| , Pass <INPUT type="password" name="pwd" size="8"><BR>|;
		print qq|<TEXTAREA name="message" rows="12" cols="64"></TEXTAREA><BR>|;
		print qq|URL <INPUT type="text" name="url" size="56"><BR>|;
		print qq|Color <INPUT type="text" name="color" size="8">|;
		print qq| Icon <INPUT type="text" name="icon" size="8">|;
		print qq| Up File <INPUT type="file" name="file" size="8"><BR><BR>|;
		print qq|<INPUT type="submit" value="submit / reload"> <INPUT type="reset" value="reset">|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|</FORM>|;
		print(&HtmlBot);
		exit;
	}
}

#---------------------------------------------------------------log list

sub loglist {
	if ($in{'log'} > 0) { $log_d = $in{'log'}.$kak_d }
	if ($in{'log'} < 0) { $log_d = $rem_d }
	if ($in{'mode'} eq 'remove') {
		&delete1($pass,$in{'log'},$in{'threno'},1);
	}
	if ( $in{'command'} eq 'read') { &readi; }
	print(&PrintHeader);
	print qq|<HTML><HEAD>|;
	print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
	print qq|<TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD><BODY><HR>|;
	print qq|<FORM method="POST" action="$ad_rel" enctype="multipart/form-data">|;
	print qq|<INPUT type="hidden" name="command" value="write">|;
	print qq|Name <INPUT type="text" name="name" size="24">|;
	print qq| Mail <INPUT type="text" name="mail" size="24"><BR>|;
	print qq|Subject <INPUT type="text" name="subject" size="56"><BR>|;
	print qq|Message <SELECT name="how"><OPTION value="0">Normal Mode|;
	print qq|<OPTION value="1">Source Code Mode</SELECT>|;
	print qq| <INPUT type="checkbox" name="link" value="1" checked> Link|;
	print qq| , Pass <INPUT type="password" name="pwd" size="8"><BR>|;
	print qq|<TEXTAREA name="message" rows="7" cols="64"></TEXTAREA><BR>|;
	print qq|URL <INPUT type="text" name="url" size="56"><BR>|;
	print qq|Color <INPUT type="text" name="color" size="8">|;
	print qq| Icon <INPUT type="text" name="icon" size="8">|;
	print qq| Up File <INPUT type="file" name="file" size="8"><BR><BR>|;
	print qq|<INPUT type="submit" value="　新規スレッド / リロード　"> <INPUT type="reset" value="　やめる　">|;
	print qq| Logs|;
	$log_select = qq|<SELECT name="log">|;
	$log_select .= qq|<OPTION value="0">new|;
	open(IN,"$logdir$kakono") || &error('ファイルエラー');
	my $in=<IN>;
	close(IN);
	($pastno,$since,$allmessages) = split(/<>/,$in);
	while($pastno > 0){
		$pastselect="$pastno$kak_d";
		if ($log_d eq $pastselect){
			$log_select .= qq|<OPTION value="$pastno" SELECTED>log $pastno|;
		}else{
			$log_select .= qq|<OPTION value="$pastno">log $pastno|;
		}
		$pastno--;
	}
	if ($log_d eq $rem_d){
		$log_select .= qq|<OPTION value="-1" SELECTED>removed|;
	}else{
		$log_select .= qq|<OPTION value="-1">removed|;
	}
	$log_select .= "</SELECT>";
	print " $log_select";
	print qq|<INPUT type="hidden" name="pasad" value="$pasad"></FORM>|;
	print "投稿フォームのIcon、Colorには、数字を入力してください。";
	print "実際の表\示はskinの設定に依存しており、アイコン、カラー以外にも使えます。";
	print "<HR>";
	open(IN,"$logdir$log_d") || &error('ファイルエラー');
	@lines = <IN>;
	close (IN);
	my $i=1;
	foreach (@lines) {
		($newtime,$firsttime,$thrtitle,$resno,$thrmode,$thrpass,$d,$d,$d,
		$subject,$logno,$date_l,$name_l,$message_l,$spwd_l,$delete_l,$filename_l,$mail_l,$url_l,
		$how_l,$link_l,$addr_l,$timek_l,$user_l,$color_l,$icon_l) = split(/<>/);
		print qq|<TABLE><TR><FORM method="POST" action="$ad_rel"><TD>|;
		print qq| <INPUT type="submit" value="　レスの編集　">|;
		print qq|<INPUT type="hidden" name="log" value="$in{'log'}">|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|<INPUT type="hidden" name="command" value="read">|;
		print qq|<INPUT type="hidden" name="no" value="$firsttime">|;
		print qq|</td></FORM><FORM method="POST" action="$ad_rel"><td>|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|<INPUT type="submit" value="このスレッドを削除">|;
		print qq|<INPUT type="hidden" name="log" value="$in{'log'}">|;
		print qq|<INPUT type="hidden" name="mode" value="remove">|;
		print qq|<INPUT type="hidden" name="threno" value="$firsttime">|;
		print qq|</TD></FORM><TD>|;
		print qq|[$i:$resno] <font color="red">$thrtitle</font>|;
		$i++;
		print qq| Name: <font color="red">$name_l</font>|;
		print qq| Date: $date_l</TD></TR></TABLE><HR>|;
	}
	print "レスの編集ボタンで、そのスレッドのレスを編集できます。<BR>";
	print "削除ボタンで、スレッドを削除ログに移動します。（ログの移動で復活可能\）<BR>";
	print "削除ログのスレッドを削除すると完全に削除されます。<BR>";
	print qq|<FORM method="POST" action="$ad_rel">|;
	print qq|<INPUT type="submit" value="　もどる　">|;
	print qq|</FORM>|;
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------log edit

sub readi {
	$firsttime = $in{'no'};
	open(IN,"$logdir$log_d") || &error('ファイルエラー');
	@lines = <IN>;
	close (IN);
	foreach (@lines) {
		$_ =~ s/\0//g;
		($newtime,$firsttime_m,$thrtitle,$resno,$thrmode,$thrpass,$total_color,$total_icon,$total_res,
		$subject,$logno,$date_l,$name_l,$message_l,$spwd_l,$delete_l,$filename_l,$mail_l,$url_l,
		$how_l,$link_l,$addr_l,$timek_l,$user_l,$color_l,$icon_l,$w,$h,$mesnum) = split(/<>/);
		if ($firsttime == $firsttime_m) {
			last;
		}
	}
	$message_l =~ s/<BR>/\n/gi;
	$name_l =~ s/\&/&amp;/g;
	$name_l =~ s/</&lt;/g;
	$name_l =~ s/>/&gt;/g;
	$name_l =~ s/\"/&quot;/g;
	print(&PrintHeader);
	print qq|<HTML><HEAD>|;
	print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
	print qq|<TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD><BODY>|;
	print qq|投稿内容を編集する場合は編集後管理者パスを入力してeditを押す<BR>|;
	print qq|delete 1;投稿内容の非表\示(削除) 0;投稿内容表\示 3;完全に消去します<BR>|;
	print qq|スレッドの最初の投稿を編集することで、そのスレッドの状態を変更できます。<BR>|;
	print qq|thread_timeの値でスレッドのソ\ートを行っていますので、<BR>|;
	print qq|thread_timeの値を大きくすれば常に(or一定期間)一番上に表\示され下がらないスレッドが作れます。<BR>|;
	print qq|thread_modeは2;入室制限モード3;投稿制限モードです。<BR>|;
	print qq|変更する場合は管理者パスを入力してeditを押す<BR>|;
	print qq|管理者モードの使い方やskinの設定を工夫するとそれ以外にもいろいろ出来ます。<HR>|;
	print qq|<FORM method="POST" action="$ad_rel" enctype="multipart/form-data">|;
	print qq|<INPUT type="hidden" name="command" value="edit">|;
	print qq|<INPUT type="hidden" name="threno" value="$firsttime">|;
	print qq|<INPUT type="hidden" name="log" value="$in{'log'}">|;
	print qq|<INPUT type="hidden" name="resno" value="$logno">|;
	print qq|[<FONT color="red">$firsttime</FONT>]|;
	print qq| Subject <INPUT type="text" name="subject" size="56" value="$subject"><BR>|;
	print qq| thread_time <INPUT type="text" name="newtime"value="$newtime" size="12">|;
	print qq| thread_mode <INPUT type="text" name="thrmode"value="$thrmode" size="2">|;
	print qq| thread_pass <INPUT type="text" name="thrpass"value="$thrpass" size="6">|;
	print qq| res <INPUT type="text" name="resresno"value="$resno" size="6">|;
	print qq|<br> total_color <INPUT type="text" name="total_color"value="$total_color" size="6">|;
	print qq| total_icon <INPUT type="text" name="total_icon"value="$total_icon" size="6">|;
	print qq| total_res <INPUT type="text" name="total_res"value="$total_res" size="6"><P>|;
	print qq|No.<INPUT type="text" name="logno" size="4" value="$logno">|;
	print qq| Date <INPUT type="text" name="date" size="28" value="$date_l">|;
	print qq| Name <INPUT type="text" name="name" size="24" value="$name_l">|;
	print qq| ID <INPUT type="text" name="id" size="18" value="$spwd_l"><BR>|;
	print qq|<TEXTAREA name="message" rows="7" cols="64">$message_l</TEXTAREA><BR>|;
	print qq|How <INPUT type="text" name="how" size="4" value="$how_l">|;
	print qq| Link <INPUT type="text" name="link" size="4" value="$link_l">|;
	print qq| Color <INPUT type="text" name="color" size="8" value="$color_l">|;
	print qq| Icon <INPUT type="text" name="icon" size="8" value="$icon_l"><BR>|;
	print qq| Mail <INPUT type="text" name="mail" size="24" value="$mail_l">|;
	print qq| URL <INPUT type="text" name="url" size="24" value="$url_l">|;
	if ($filename_l) {
		print qq| <A href="$upurl$filename_l" target="_blank">File</A>|;
	} else {
		print qq| File|;
	}
	print qq| <INPUT type="text" name="file" size="24" value="$filename_l">|;
	print qq| W <INPUT type="text" name="w" size="4" value="$w">|;
	print qq| H <INPUT type="text" name="h" size="4" value="$h"><BR>|;
	print qq| Host <INPUT type="text" name="addr" size="38" value="$addr_l">|;
	print qq| Time <INPUT type="text" name="timek" size="8" value="$timek_l">|;
	print qq| UA <INPUT type="text" name="user" size="48" value="$user_l"><BR>|;
	print qq| message_number <INPUT type="text" name="num" size="4" value="$mesnum"><BR>|;
	print qq|Delete <INPUT type="text" name="delete" size="4" value="$delete_l">|;
	print qq| Password <INPUT type="password" name="pasad" size="8">|;
	print qq| <INPUT type="submit" value="edit">|;
	print qq|</FORM><HR>|;
	if ($max_res && $resno >1) {
		open(IN,"$logdir$firsttime$res_d") || &error('ファイルエラー');
		@lines_l = <IN>;
		close (IN);
		foreach (@lines_l) {
			$_ =~ s/\0//g;
			($subject_l,$logno,$date_l,$name_l,$message_l,$spwd_l,$delete_l,$filename_l,$mail_l,$url_l,
			$how_l,$link_l,$addr_l,$timek_l,$user_l,$color_l,$icon_l,$w,$h,$mesnum) = split(/<>/);
			$message_l =~ s/<BR>/\n/gi;
			$name_l =~ s/\&/&amp;/g;
			$name_l =~ s/</&lt;/g;
			$name_l =~ s/>/&gt;/g;
			$name_l =~ s/\"/&quot;/g;
			print qq|<FORM method="POST" action="$ad_rel" enctype="multipart/form-data">|;
			print qq|<INPUT type="hidden" name="command" value="edit">|;
			print qq|<INPUT type="hidden" name="threno" value="$firsttime">|;
			print qq|<INPUT type="hidden" name="log" value="$in{'log'}">|;
			print qq|<INPUT type="hidden" name="resno" value="$logno">|;
			print qq|No.<INPUT type="text" name="logno" size="4" value="$logno">|;
			print qq| Date <INPUT type="text" name="date" size="28" value="$date_l">|;
			print qq| Name <INPUT type="text" name="name" size="24" value="$name_l">|;
			print qq| ID <INPUT type="text" name="id" size="18" value="$spwd_l"><BR>|;
			print qq|Subject <INPUT type="text" name="subject" size="56" value="$subject_l"><BR>|;
			print qq|<TEXTAREA name="message" rows="7" cols="64">$message_l</TEXTAREA><BR>|;
			print qq|How <INPUT type="text" name="how" size="4" value="$how_l">|;
			print qq| Link <INPUT type="text" name="link" size="4" value="$link_l">|;
			print qq| Color <INPUT type="text" name="color" size="8" value="$color_l">|;
			print qq| Icon <INPUT type="text" name="icon" size="8" value="$icon_l"><BR>|;
			print qq| Mail <INPUT type="text" name="mail" size="24" value="$mail_l">|;
			print qq| URL <INPUT type="text" name="url" size="24" value="$url_l">|;
			if ($filename_l) {
				print qq| <A href="$upurl$filename_l" target="_blank">File</A>|;
			} else {
				print qq| File|;
			}
			print qq| <INPUT type="text" name="file" size="24" value="$filename_l">|;
			print qq| W <INPUT type="text" name="w" size="4" value="$w">|;
			print qq| H <INPUT type="text" name="h" size="4" value="$h"><BR>|;
			print qq| Host <INPUT type="text" name="addr" size="38" value="$addr_l">|;
			print qq| Time <INPUT type="text" name="timek" size="8" value="$timek_l">|;
			print qq| UA <INPUT type="text" name="user" size="48" value="$user_l"><BR>|;
			print qq| message_number <INPUT type="text" name="num" size="4" value="$mesnum"><BR>|;
			print qq|Delete <INPUT type="text" name="delete" size="4" value="$delete_l">|;
			print qq| Password <INPUT type="password" name="pasad" size="8">|;
			print qq| <INPUT type="submit" value="edit">|;
			print qq|</FORM><HR>|;
		}
	}
	print qq|<FORM method="POST" action="$ad_rel" enctype="multipart/form-data">|;
	print qq|<INPUT type="hidden" name="command" value="reswrite">|;
	print qq|<INPUT type="hidden" name="threno" value="$firsttime">|;
	print qq|<INPUT type="hidden" name="thrpass" value="$thrpass">|;
	print qq|Name <INPUT type="text" name="name" size="24">|;
	print qq| Mail <INPUT type="text" name="mail" size="24"><BR>|;
	print qq|Subject <INPUT type="text" name="subject" size="56"><BR>|;
	print qq|Message <SELECT name="how"><OPTION value="0">Normal Mode|;
	print qq|<OPTION value="1">Source Code Mode</SELECT>|;
	print qq| <INPUT type="checkbox" name="link" value="1" checked> Link|;
	print qq| , Pass <INPUT type="password" name="pwd" size="8">|;
	print qq| <INPUT type="checkbox" name="sage" value="1"> Sage<BR>|;
	print qq|<TEXTAREA name="message" rows="7" cols="64"></TEXTAREA><BR>|;
	print qq|URL <INPUT type="text" name="url" size="56"><BR>|;
	print qq|Color <INPUT type="text" name="color" size="8">|;
	print qq| Icon <INPUT type="text" name="icon" size="8">|;
	print qq| Up File <INPUT type="file" name="file" size="8"><BR><BR>|;
	print qq|<INPUT type="submit" value="　レスする　"> <INPUT type="reset" value="　やめる　"><BR>|;
	print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
	print qq|</FORM><HR>|;
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------log_delete

sub log_delete {
	$log_d2 = $log_d;
	if ($in{'log'} > 0) { $log_d = $in{'log'}.$kak_d }
	if ($in{'log'} < 0) { $log_d = $rem_d }
	if ( $in{'mode'} eq 'delete') {
		&lock;
		&delete3($in{'log'});
		&unlock;
		$log_d = $log_d2;
	} elsif ($in{'mode'} eq 'deletethre') {
		&delete1($pass,$in{'log'},$in{'threno'},1);
	} elsif ($in{'mode'} eq 'move') {
		&lock;
		my $move;
		open(IN,"+<$logdir$log_d") || &error('ファイルエラー');
		eval {flock(IN,2);};
		my @lines = <IN>;
		foreach (@lines) {
			my ($a1,$firsttime) = split(/<>/);
			if ($in{'threno'} eq $firsttime) {
				$move = $_;
				$_ = "";
				last;
			}
		}
		seek(IN, 0, 0);
		print IN @lines;
		truncate(IN, tell(IN));
		close (IN);
		if ($in{'movelog'} > 0) { $log_d2 = $in{'movelog'}.$kak_d }
		if ($in{'movelog'} < 0) { $log_d2 = $rem_d }
		open(DB,">>$logdir$log_d2") || &error('ファイルエラー');
		print DB $move;
		close (DB);
		&unlock;
	}
	print(&PrintHeader);
	print qq|<HTML><HEAD>|;
	print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
	print qq|<TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD><BODY><HR>|;
	print qq|<FORM method="POST" action="$ad_rel">|;
	print qq|<INPUT type="hidden" name="command" value="log_delete">|;
	print qq| Log|;
	$log_select = "<SELECT name=\"log\">\n";
	$log_select .= "<OPTION value=\"0\">new\n";
	open(IN,"$logdir$kakono") || &error('ファイルエラー');
	my $in=<IN>;
	close(IN);
	($pastno,$since,$allmessages,$last_up_name,$last_up_date) = split(/<>/,$in);
	while($pastno > 0){
		$pastselect="$pastno$kak_d";
		if ($log_d eq $pastselect){
			$log_select .= qq|<OPTION value="$pastno" SELECTED>log $pastno|;
		}else{
			$log_select .= qq|<OPTION value="$pastno">log $pastno|;
		}
		$pastno--;
	}
	if ($log_d eq $rem_d){
		$log_select .= qq|<OPTION value="-1" SELECTED>removed|;
	}else{
		$log_select .= qq|<OPTION value="-1">removed|;
	}
	$log_select .= qq|</SELECT>|;
	print qq| $log_select|;
	print qq| mode <SELECT name="mode"><OPTION value="view">view<OPTION value="delete">delete</SELECT>|;
	print qq| <INPUT type="submit" value="OK">|;
	print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
	print qq|</FORM>|;
	print qq|ログを選択しmodeをviewにしてOKを押せばログの表\示。modeをdeleteにしてOKを押せばログ削除。<BR>|;
	print qq|　＊注意＊　一度、削除したログは復活できません。|;
	print qq|<HR>|;
	print qq|<FORM method="POST" action="$ad_rel">|;
	print qq|<INPUT type="hidden" name="command" value="log_delete">|;
	open(IN,"$logdir$log_d") || &error('ファイルエラー');
	@lines = <IN>;
	close (IN);
	foreach (@lines) {
		($newtime,$firsttime,$thrtitle,$resno,$thrmode,$thrpass,$d,$d,$d,
		$subject,$logno,$date_l,$name_l,$message_l,$spwd_l,$delete_l,$filename_l,$mail_l,$url_l,
		$how_l,$link_l,$addr_l,$timek_l,$user_l,$color_l,$icon_l) = split(/<>/);
		print qq|<input type="radio" name="threno" value="$firsttime">|;
		print qq|<font color="red">$thrtitle</font>　|;
	}
	print qq|<HR><DIV align="right">スレッドを選択しmodeをdeleteにしてOKを押せばスレ削除。modeをmoveにしてOKを押せば選択されたLogへ移動。|;
	print qq|<P> mode <SELECT name="mode"><OPTION value="move">move<OPTION value="deletethre">delete</SELECT>|;
	print qq| Log|;
	$log_select = qq|<SELECT name="movelog">|;
	$log_select .= qq|<OPTION value="0">new|;
	open(IN,"$logdir$kakono") || &error('ファイルエラー');
	my $in=<IN>;
	close(IN);
	($pastno,$since,$allmessages) = split(/<>/,$in);
	while($pastno > 0){
		$pastselect="$pastno$kak_d";
		if ($log_d eq $pastselect){
			$log_select .= qq|<OPTION value="$pastno" SELECTED>log $pastno|;
		}else{
			$log_select .= qq|<OPTION value="$pastno">log $pastno|;
		}
		$pastno--;
	}
	if ($log_d eq $rem_d){
		$log_select .= qq|<OPTION value="-1" SELECTED>removed|;
	}else{
		$log_select .= qq|<OPTION value="-1">removed|;
	}
	$log_select .= "</SELECT>";
	print qq| $log_select|;
	print qq| <INPUT type="submit" value="OK"></DIV>|;
	print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
	print qq|<INPUT type="hidden" name="log" value="$in{'log'}">|;
	print qq|</FORM><HR>|;
	print qq|<FORM method="POST" action="$ad_rel">|;
	print qq|<INPUT type="submit" value="　もどる　">|;
	print qq|</FORM>|;
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------kick host

sub kickhost {
	if ($in{'touroku'} eq '1') {
		open(DB,">$logdir$hostlist") || &error('ファイルエラー');
		print DB "$in{kick_proxy}\n$in{kick_ip}\n$in{ok_ip}\n$in{kick_user}\n$in{ok_user}\n$in{kick_url}\n$in{ok_url}";
		close(DB);
	}
	open(DB,"$logdir$hostlist") || &error('ファイルエラー');
	my @lines = <DB>;
	close(DB);
	foreach (@lines) {
		$_ =~ s/<BR>/\r/gi;
	}
	$kick_proxy = $lines[0];
	chomp $kick_proxy;
	$kick_ip = $lines[1];
	chomp $kick_ip;
	$ok_ip = $lines[2];
	chomp $ok_ip;
	$kick_user = $lines[3];
	chomp $kick_user;
	$ok_user = $lines[4];
	chomp $ok_user;
	$kick_url = $lines[5];
	chomp $kick_url;
	$ok_url = $lines[6];
	chomp $chomp_url;

	print(&PrintHeader);
	print "<HTML>";
	print "<HEAD>";
	print "<STYLE type=\"text/css\"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>";
	print "<TITLE>$title</TITLE>";
	print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">";
	print "</HEAD>";
	print "<BODY>";
	print <<"_HTML_";

<B><FONT size="+1" color="#cc6666">拒否ホスト登録モード</FONT></B>
<BR><BR>
■完全なホスト名（例：nsi0123.ppp.3web.ne.jp）またはホスト名の一部（例：3web.ne.jp、dti.ne.jp、go.jp）いずれでも拒否登録できます。<BR>
<BR>
■ホスト名の一部を登録した場合、その名前を含むすべてのホストを拒否しますので注意して下さい。<BR>
（jpだけを登録した場合、jpドメインのすべてのホストを拒否してしまいます）<BR>
<BR>
■設置サーバーの種類よってはドメイン名ではキックできない場合がありますのでキックできない時はＩＰアドレス（例：202.235.202.57）で設定して下さい。<BR>
<BR>
掲示板のプロクシチェック・ホストチェックを１以上に設定しないと機能\しません。<BR>
ホストかIPで許可・拒否の設定を行ってください。ホストかIPの一部でも可能\。<BR>
allと入力すると、全てのアクセス者を拒否します。<BR>
拒否よりも許可を優先するので、all拒否に設定し許可するホストだけ登録することも可能\です。<BR>
ユーザーエージェントに対しても拒否・許可設定できるのでMacのみ許可なども可。<BR>
リファラーに対しても拒否・許可設定できます。イヤなとこからのリンクを拒否とかできます。<BR>
トップページからのリンクのみ許可などと設定する場合は掲示板のURLも許可に設定すること。<BR>
<BR>
<FORM method="POST" action="$ad_rel">
 <INPUT type="hidden" name="command" value="kickhost">
 <INPUT type="hidden" name="pasad" value="$pasad">
 <INPUT type="hidden" name="touroku" value="1">
拒否するホスト・IP<BR>
<TEXTAREA name="kick_ip" rows="7" cols="64">$kick_ip</TEXTAREA><BR>
許可するホスト・IP<BR>
<TEXTAREA name="ok_ip" rows="7" cols="64">$ok_ip</TEXTAREA><BR>
拒否するユーザーエージェント<BR>
<TEXTAREA name="kick_user" rows="7" cols="64">$kick_user</TEXTAREA><BR>
許可するユーザーエージェント<BR>
<TEXTAREA name="ok_user" rows="7" cols="64">$ok_user</TEXTAREA><BR>
拒否するURL<BR>
<TEXTAREA name="kick_url" rows="7" cols="64">$kick_url</TEXTAREA><BR>
許可するURL<BR>
<TEXTAREA name="ok_url" rows="7" cols="64">$ok_url</TEXTAREA><BR>
拒否するプロクシ（串リストから一括登録）<BR>
<TEXTAREA name="kick_proxy" rows="7" cols="64">$kick_proxy</TEXTAREA><BR>

 <INPUT type="submit" value=" 登録・変更 "></FORM><BR>
_HTML_

	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------cap

sub captrip {
	if ($in{'delete'}) {
		&lock;
		open(DB,"+<$logdir$up_count") || &error('ファイルエラー');
		eval {flock(DB,2);};
		my @lines = <DB>;
		foreach (@lines) {
			my ($name,$id) = split(/<>/);
			if ($in{'capid'} eq $id) {
				$_ = '';
			}
		}
		seek(DB, 0, 0);
		print DB @lines;
		truncate(DB, tell(DB));
		close(DB);
		&unlock;
	} elsif ($in{'reset'}) {
		&lock;
		open(DB,"+<$logdir$up_count") || &error('ファイルエラー');
		eval {flock(DB,2);};
		my @lines = <DB>;
		foreach (@lines) {
			my ($name,$id,$down,$post,$cap,$last_post,$private_icon) = split(/<>/);
			$_ = "$name<>$id<>$down<>$post<>$cap<>$time<>$private_icon<><><>\n";
		}
		seek(DB, 0, 0);
		print DB @lines;
		truncate(DB, tell(DB));
		&unlock;
		close(DB);
	} elsif ($in{'cap_edit'}) {
		&lock;
		open(DB,"+<$logdir$up_count") || &error('ファイルエラー');
		eval {flock(DB,2);};
		my @lines = <DB>;
		foreach (@lines) {
			my ($name,$id) = split(/<>/);
			if ($in{'capid'} eq $id) {
				$_ = "$name<>$id<>$in{'down'}<>$in{'post'}<>$in{'cap'}<>$in{'last_post'}<>$in{'private_icon'}<><><>\n";
			}
		}
		seek(DB, 0, 0);
		print DB @lines;
		truncate(DB, tell(DB));
		close(DB);
		&unlock;
	}
	open(DB,"$logdir$up_count") || &error('ファイルエラー');
	my @lines = <DB>;
	close(DB);
	@lines = @{&csvsort(3,@lines)};
	print(&PrintHeader);
	print qq|<HTML>|;
	print qq|<HEAD>|;
	print qq|<STYLE type="text/css"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>|;
	print qq|<TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD>|;
	print qq|<BODY>|;
	print qq|<DIV align="center">|;
	print qq|<P><FONT color="#cc6666">キャップ設定＆投稿数ランキング</FONT>|;
	print qq|<P><TABLE border="1"><TR><TD>ランキング</TD><TD>名前</TD><TD>投稿数</TD><TD>DL許可数</TD>|;
	print qq|<TD>最終投稿日</TD><TD>キャップ</TD><TD>専用アイコン</TD><TD>登録</TD><TD>削除</TD></TR>|;
	for (my $i = 0; $i<@lines; $i++) {
		my ($name,$id,$down,$post,$cap,$last_post,$private_icon) = split(/<>/, $lines[$i]);
		my $ranking = $i + 1;
		print qq|<TR><FORM method="POST" action="$ad_rel">|;
		print qq|<input type=hidden name="command" value="captrip">|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|<INPUT type="hidden" name="capid" value="$id">|;
		print qq|<INPUT type="hidden" name="cap_edit" value="1">|;
		print qq|<TD align="center">$ranking位</TD><TD>$name</TD>|;
		print qq|<TD><INPUT type="text" name="post" value="$post" size="6"></TD>|;
		print qq|<TD><INPUT type="text" name="down" value="$down" size="6"></TD>|;
		print qq|<TD><INPUT type="text" name="last_post" value="$last_post" size="18"></TD>|;
		print qq|<TD><INPUT type="text" name="cap" value="$cap" size="18"></TD>|;
		print qq|<TD><INPUT type="text" name="private_icon" value="$private_icon" size="6"></TD>|;
		print qq|<TD><INPUT type="submit" value="登録・変更"></TD></FORM>|;
		print qq|<FORM method="POST" action="$ad_rel">|;
		print qq|<input type=hidden name="command" value="captrip">|;
		print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
		print qq|<INPUT type="hidden" name="capid" value="$id">|;
		print qq|<INPUT type="hidden" name="delete" value="1">|;
		print qq|<TD><INPUT type="submit" value="一件削除"></TD></FORM>|;
		print qq|</TR>|;
	}
	print qq|</TABLE>|;
	print qq|<P><TABLE><TR>|;
	print qq|<FORM method="POST" action="$ad_rel"><TD>|;
	print qq|<INPUT type="submit" value="戻る">|;
	print qq|</TD></FORM>|;
	print qq|<FORM method="POST" action="$ad_rel"><TD>|;
	print qq|<input type=hidden name="command" value="captrip">|;
	print qq|<input type=hidden name="reset" value="1">|;
	print qq|<INPUT type="hidden" name="pasad" value="$pasad">|;
	print qq|<INPUT type="submit" value="最終投稿日リセット">|;
	print qq|</TD></FORM></TR></TABLE></DIV>|;
	print(&HtmlBot);
  exit;
}

#---------------------------------------------------------------analyse

sub analyse {
	print(&PrintHeader);
	print "<HTML>";
	print "<HEAD>";
	print "<STYLE type=\"text/css\"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>";
	print "<TITLE>$title</TITLE>";
	print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">";
	print "</HEAD>";
	print "<BODY>";
	print "<DIV align=\"center\">";
	open(DB,"$logdir$alog") || &error('ファイルエラー');
	my @lines = <DB>;
	close(DB);
	my (%analyse_host,%analyse_proxy,%analyse_user,%analyse_referer);
	foreach (@lines) {
		my ($date,$time,$addr,$count,$d,$d,$host,$user,$referer,$cookie) = split(/<>/);
		$analyse_proxy{"$host"}++;
		$host =~ s/\d+/*/g;
		$analyse_host{"$host"}++;
		$analyse_user{"$user"}++;
		$analyse_referer{"$referer"}++;
	}

	my ($name,$value,@analysed_host,@analysed_proxy,@analysed_user,@analysed_referer);

	while (($name,$value) = each %analyse_host) {
		my $data = $name.'<>'.$value.'<>\n';
		push @analysed_host,$data;
	}
	@analysed_host = @{&csvsort(1,@analysed_host)};
	print "<P><FONT color=\"red\">アクセス解析（HOST）</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@analysed_host) {
		my ($host,$time) = split(/<>/);
		print "<TR><TD>$host</TD><TD align=\"right\">$time</TD></TR>";
	}
	print "</TABLE>";
	while (($name,$value) = each %analyse_user) {
		my $data = $name.'<>'.$value.'<>\n';
		push @analysed_user,$data;
	}
	@analysed_user = @{&csvsort(1,@analysed_user)};
	print "<P><FONT color=\"red\">アクセス解析（UA）</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@analysed_user) {
		my ($host,$time) = split(/<>/);
		print "<TR><TD>$host</TD><TD align=\"right\">$time</TD></TR>";
	}
	print "</TABLE>";
	while (($name,$value) = each %analyse_referer) {
		my $data = $name.'<>'.$value.'<>\n';
		push @analysed_referer,$data;
	}
	@analysed_referer = @{&csvsort(1,@analysed_referer)};
	print "<P><FONT color=\"red\">アクセス解析（リファ）</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@analysed_referer) {
		my ($host,$time) = split(/<>/);
		print "<TR><TD>$host</TD><TD align=\"right\">$time</TD></TR>";
	}
	print "</TABLE>";
	while (($name,$value) = each %analyse_proxy) {
		my $data = $name.'<>'.$value.'<>\n';
		push @analysed_proxy,$data;
	}
	@analysed_proxy = @{&csvsort(1,@analysed_proxy)};
	print "<P><FONT color=\"red\">proxy</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@analysed_proxy) {
		my ($proxy,$time) = split(/<>/);
		if ($proxy =~ /proxy/) {
			print "<TR><TD>$proxy</TD><TD align=\"right\">$time</TD></TR>";
		}
	}
	print "</TABLE></DIV>";
	print(&HtmlBot);
  exit;
}

#---------------------------------------------------------------log_size

sub log_size {
	print(&PrintHeader);
	print "<HTML>";
	print "<HEAD>";
	print "<STYLE type=\"text/css\"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>";
	print "<TITLE>$title</TITLE>";
	print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">";
	print "</HEAD>";
	print "<BODY>";
	print "<DIV align=\"center\">";
	opendir LOG,$logdir || &error('エラー');
	my @filename = readdir LOG;
	closedir LOG;
	my $total_size,$size;
	foreach (@filename) {
		$size = (-s "$logdir$_");
		$total_size = $total_size + $size;
		$_ = $_.'<>'.$size
	}
	$total_size = int($total_size/1024);
	@filename = @{&csvsort(1,@filename)};
	print "<P><FONT color=\"red\">ログファイルサイズ 合計 $total_size kb</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@filename) {
		my ($name,$size) = split(/<>/);
		print "<TR><TD>$name";
		print "</TD><TD align=\"right\">";
		print "$size</TD></TR>";
	}
	print "</TABLE>";
	opendir LOG,$updir || &error('エラー');
	my @filename = readdir LOG;
	closedir LOG;
	my $total_size,$size;
	foreach (@filename) {
		$size = (-s "$updir$_");
		$total_size = $total_size + $size;
		$_ = $_.'<>'.$size
	}
	$total_size = int($total_size/1024);
	@filename = @{&csvsort(1,@filename)};
	print "<P><FONT color=\"red\">アップファイルサイズ 合計 $total_size kb</FONT>";
	print "<TABLE border=\"1\">";
	foreach (@filename) {
		my ($name,$size) = split(/<>/);
		print "<TR><TD>$name";
		print "</TD><TD align=\"right\">";
		print "$size</TD></TR>";
	}
	print "</TABLE></DIV>";
	print(&HtmlBot);
  exit;
}

#---------------------------------------------------------------log

sub log {
	open(LOG, "$logdir$alog") || &error('ファイルエラー');
	my @lines = <LOG>;
	close(LOG);

	open(LOG, "$logdir$codelog") || &error('ファイルエラー');
	my @clines = <LOG>;
	close(LOG);

	open(LOG, "$logdir$errorlog") || &error('ファイルエラー');
	my @elines = <LOG>;
	close(LOG);

	open(LOG, "$logdir$adminlog") || &error('ファイルエラー');
	my @alines = <LOG>;
	close(LOG);

	open(LOG, "$logdir$plog") || &error('ファイルエラー');
	my @plines = <LOG>;
	close(LOG);

	print(&PrintHeader);
	print "<HTML>";
	print "<HEAD>";
	print "<STYLE type=\"text/css\"><!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }--></STYLE>";
	print "<TITLE>$title</TITLE>";
	print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">";
	print "</HEAD>";
	print "<BODY>";
	print "<FONT color=\"red\">access log</FONT><BR>";
	my $i = 1;
	foreach (@lines) {
		$_ =~ s/<>/ - /g;
		if ($i) {print qq|<NOBR><FONT color="#339933">$_</FONT></NOBR><BR>|; $i = 0;}
		else {print qq|<NOBR><FONT color="#333399">$_</FONT></NOBR><BR>|; $i = 1;}
	}
	print "<FONT color=\"red\">code log</FONT><BR>";
	foreach (@clines) {
		$_ =~ s/<>/ - /g;
		if ($i) {print qq|<NOBR><FONT color="#339933">$_</FONT></NOBR><BR>|; $i = 0;}
		else {print qq|<NOBR><FONT color="#333399">$_</FONT></NOBR><BR>|; $i = 1;}
	}
	print "<FONT color=\"red\">error log</FONT><BR>";
	foreach (@elines) {
		$_ =~ s/<BR>//gi;
		$_ =~ s/<>/ - /g;
		if ($i) {print qq|<NOBR><FONT color="#339933">$_</FONT></NOBR><BR>|; $i = 0;}
		else {print qq|<NOBR><FONT color="#333399">$_</FONT></NOBR><BR>|; $i = 1;}
	}
	print "<FONT color=\"red\">admin log</FONT><BR>";
	foreach (@alines) {
		$_ =~ s/<>/ - /g;
		if ($i) {print qq|<NOBR><FONT color="#339933">$_</FONT></NOBR><BR>|; $i = 0;}
		else {print qq|<NOBR><FONT color="#333399">$_</FONT></NOBR><BR>|; $i = 1;}
	}
	print "<FONT color=\"red\">IP nuki log</FONT><BR>";
	foreach (@plines) {
		$_ =~ s/<>/ - /g;
		if ($i) {print qq|<NOBR><FONT color="#339933">$_</FONT></NOBR><BR>|; $i = 0;}
		else {print qq|<NOBR><FONT color="#333399">$_</FONT></NOBR><BR>|; $i = 1;}
	}
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------edit

sub edit {
	if ($in{'log'} > 0) { $log_d = $in{'log'}.$kak_d }
	if ($in{'log'} < 0) { $log_d = $rem_d }
	if ($in{'delete'} == 3) {&delete1($pass,$in{'log'},$in{'threno'},$in{'resno'});}
	else {
		&lock;
		if ($in{'resno'} == 1) {
			open(IN,"+<$logdir$log_d") || &error('ファイルエラー');
			eval {flock(IN,2);};
			my @lines = <IN>;
			foreach (@lines) {
				my ($a1,$firsttime) = split(/<>/);
				if ($in{'threno'} eq $firsttime) {
					$_ = "$in{'newtime'}<>$firsttime<>$in{'subject'}<>$in{'resresno'}<>$in{'thrmode'}<>$in{'thrpass'}<>$in{'total_color'}<>$in{'total_icon'}<>$in{'total_res'}<>$in{'subject'}<>$in{'logno'}<>$in{'date'}<>$in{'name'}<>$in{'message'}<>$in{'id'}<>$in{'delete'}<>$in{'file'}<>$in{'mail'}<>$in{'url'}<>$in{'how'}<>$in{'link'}<>$in{'addr'}<>$in{'timek'}<>$in{'user'}<>$in{'color'}<>$in{'icon'}<>$in{'w'}<>$in{'h'}<>$in{'num'}<>\n";
				}
			}
			seek(IN, 0, 0);
			print IN @lines;
			truncate(IN, tell(IN));
			close (IN);
		} else {
			open(IN,"+<$logdir$in{'threno'}$res_d") || &error('ファイルエラー');
			eval {flock(IN,2);};
			my @lines = <IN>;
			foreach (@lines) {
				my ($d1,$resno_l,$d3,$d4,$d5,$spwd_l,$d7,$d8,$d9,$d10,$d11,$d12,$d13,$d14,$d15,$d16,$d17,$d18,$d19,$d20) = split(/<>/);
				if ($in{'resno'} == $resno_l) {
					$_ = "$in{'subject'}<>$in{'logno'}<>$in{'date'}<>$in{'name'}<>$in{'message'}<>$in{'id'}<>$in{'delete'}<>$in{'file'}<>$in{'mail'}<>$in{'url'}<>$in{'how'}<>$in{'link'}<>$in{'addr'}<>$in{'timek'}<>$in{'user'}<>$in{'color'}<>$in{'icon'}<>$in{'w'}<>$in{'h'}<>$in{'num'}<>\n";
				}
			}
			seek(IN, 0, 0);
			print IN @lines;
			truncate(IN, tell(IN));
			close (IN);
		}
		&unlock;
	}
}

#---------------------------------------------------------------error

sub error {
	print(&PrintHeader);
	print qq|<HTML><HEAD><TITLE>$title</TITLE>|;
	print qq|<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">|;
	print qq|</HEAD><BODY>$_[0]<BR>|;
	if($in{'message'} ne ''){
		$in{'message'} =~ s/<BR>/\n/gi; 
		print qq|<FORM><TEXTAREA NAME="repost" ROWS=6 COLS=64>$in{'message'}</TEXTAREA></FORM>|;
	}
	print(&HtmlBot);
	exit;
}

#---------------------------------------------------------------count

sub count {
	&host_get;
	$proxy = 0;
	&proxy_check if ($proxycheck >= 1 && $imod != 1);
	if ($proxy) {$host .= "(proxy)";}
	#--カウント
	open(LOG, "$logdir$alog") || &error('ファイルエラー');
	my @lines = <LOG>;
	close(LOG);
	($d,$d,$d,$countt) = split(/<>/, $lines[0]);
	$count24 = 1;
	$count5 = 1;
	foreach (@lines) {
		my ($datep,$timep,$addrp) = split(/<>/);
		my $ke = $time - $timep;
		if ($ke < 24*60*60 && $addr ne $addrp) {$count24++;}
		if ($ke < 5*60 && $addr ne $addrp) {$count5++;} # このへん正確な数字じゃないけど
	}
	&admin_log_r;
	&make_code;

	open(DB,"+<$logdir$kakono") || &error('ファイルエラー');
	eval {flock(DB,2);};
	my $in = <DB>;
	($pastno,$since,$allmessages,$last_up_name,$last_up_date) = split(/<>/,$in);
	if (!$since) {
		$since = $date;
		my $out = "$pastno<>$since<>$allmessages<>$last_up_name<>$last_up_date<><>";
		seek(DB, 0, 0);
		print DB $out;
		truncate(DB, tell(DB));
	}
	close(DB);
	if (!(-e "$logdir$mainte")) { # モード設定
		open(OUT,">$logdir$mainte");
		print OUT "0";
		close(OUT);
		chown((stat($ad_rel))[4], (stat($ad_rel))[5], "$logdir$mainte");
		chmod 0606,"$logdir$mainte";
	}
	open(DB,"$logdir$mainte") || &error('ファイルエラー error_49.1');
	$mainte_mode = <DB>;
	close(DB);
}

#--- 管理者パスワード登録＆暗号化 --------------------------------#by Force 264(http://www3.digitalworkz.com/~carl/)

sub password {
  $psold = $in{'password_old'};
  $pas1 = $in{'password'};
  $pas2 = $in{'password2'};
  
  print <<"_HTML_";
Content-type: text/html

<HTML>
<HEAD>
<STYLE type="text/css">
<!--body,td,th,tr,table,input,select,option,textarea { font-size : 9pt; }-->
</STYLE>

<TITLE>$title</TITLE></HEAD>
<BODY>
管理者パスワードの設定\／変更画面<P>
_HTML_
  if ($start == 1 && $pas1 eq '') {
    print "管理者パスワードをこのページで設定\します。<P>\n";
  } elsif ($pas1 =~ /\W/) {
    print "<FONT COLOR=red>新パスワードに英数字以外の文字が含まれています。</FONT><P>\n";
  } elsif ( $pas1 ne '' && $pas1 ne $pas2 ){
    print "<FONT COLOR=red>確認のために入力された新パスワードが一致しません。</FONT><P>\n";
  } elsif ( $start != 1 && $psold eq '' ) {
    print "<FONT COLOR=red>旧パスワードも入力して下さい。</FONT><P>\n";
  } elsif ( $start != 1 && (crypt($psold, substr($password, $salt, 2) ) ne $password) ){
    print "<FONT COLOR=red>旧パスワードが認証されませんでした。</FONT><P>\n";
  } else {
    $now = time;
    ($p1, $p2) = unpack("C2", $now);
    $wk = $now / (60 * 60 * 24 * 7) + $p1 + $p2 - 8;
    @saltset = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
    $nsalt = $saltset[$wk % 64] . $saltset[$now % 64];
    $pwd = crypt($in{'password'}, $nsalt);

    if ( !open(DB,">$ad_pas") ) { &error('0'); }
    print DB "crypt_password:$pwd\n";
    close(DB);
    print "<FONT COLOR=blue>管理者パスワードが設定\されました。<BR><A HREF=\"$ad_rel?new\">[ＮＥＸＴ]</A>←をクリックして下さい。</FONT><P>再度変更する場合は下記フォームで再入力しなおして下さい。<P>\n";
  }
  print "<FORM method=\"POST\" action=\"$ad_rel\">\n";
  print "<input type=hidden name=\"action\" value=\"pas\">";
  print "<INPUT type=\"hidden\" name=\"papost\" value=\"pcode\">\n";
  if ($start != 1) {
    print "旧パスワード <INPUT type=\"password\" name=\"password_old\" size=\"8\" maxlength=\"8\"><BR>\n";
  }
  print <<"_HTML_";
新パスワード <INPUT type="password" name="password" size="8" maxlength="8">（半角英数８文字で）<BR>
新パスワード <INPUT type="password" name="password2" size="8" maxlength="8">（確認のため上と同じパスをもう一度）<P>
<INPUT type="submit" value="     登録     ">
</FORM><P>
</BODY>
</HTML>
_HTML_
  exit;
}