--- bbs.cgi	2000-09-03 03:00:00.000000000 +0900
+++ zbbs.cgi	2003-12-01 04:54:00.000000000 +0900
@@ -3,206 +3,65 @@
 #
 #	͂Ղ Rev.0.1 Preview 9 (2000.9.3)
 #	 (f{)
-#	
+#
 #	  mailto	kuzuha@kurumi.ne.jp
 #	  webpage	http://kuzuha.tripod.co.jp/
-#	
+#
 #	TABSIZE=4
 #
+#	₵[ǁb Rev. 0.2 (2003.11.13)
+#	 (f{)
+#
+#	OibcAFcCp[A[ÔL
+#	`A₩A(s)
+#
+#
+#
+#	̑₵[ǁbɌgSĂ̐l
+#
+#	  mailto	admin@ge.st98.arena.ne.jp
+#	  webpage	http://www.ge.st98.arena.ne.jp/
+
+#LEJ[@\(2003/11/29)thanks L_`)
+#LEjumpurl666.htmlindex.html m点XV(2003/11/17)
+#₩Ec[r[fix(2003/11/17)
+#₩Ec[r[[h (2003/11/13)
+#LE׍UꎞI΍(2002/06/20 20:14)
+
+# ʐݒt@C̓Ǎ
+require './bbsset.cgi';
+# ϊR[h̓Ǎ
+require './change_xxx.pl';
 
 ###############################################################################
 #  ݒ
 ###############################################################################
 
 # fCGIURL
-$cgiurl = 'http://strange.kurumi.ne.jp/strangeworld/bbs.cgi';
-
-# jcode.pl̃pX
-$jcode = './jcode.pl';
-
-# gzip̃pX
-#  (gzipk]@\gpȂꍇ͋̂܂܂ɂĂ܂)
-$gzip = '/bin/gzip';
+$cgiurl = 'http://www.ge.st98.arena.ne.jp/cgi-bin/bbs.cgi';
 
 # gzipk̏l
 #   0 : kȂ
 #   1 : k
-$gzipu = 0;
-
-# CGIݒuzXgAhX
-$bbshost = 'strange.kurumi.ne.jp';
-
-# Ot@C
-$logfilename = './bbs.log';
-
-# JE^[̃X^[gt
-$countdate = '2000/01/01';
-
-# JE^[̃t@C̐擪
-$countfile = './count/count';
-
-# JE^[̉ɂx
-$countlevel = 2;
-
-# A^CQ҃JEgpt@C
-#  (A^CQ҃JEg@\gpȂꍇ͋̂܂܂ɂĂ܂)
-$cntfilename = './bbs.cnt';
-
-# A^CQ҃JEgԊu (b)
-# iŏIy[Wr[炱̎Ԃ𒴂Q҂͏Wv珜O܂j
-$cntlimit = 300;
-
-# bZ[W̕ۑ
-$logsave = 500;
+$gzipu = 1;
 
 # Pʂɕ\郁bZ[W̕\
 #  (1`bZ[W̕ۑ)
-$msgdisp = 20;
-
-# T[o[ݒuꏊƓ{Ƃ̎
-#   {             : 0
-#   OjbWW : -9
-#   AJ         : -14 (Vg)
-#                    : -20 (~bhEF[)
-#   j[W[h : 3
-$difftime = 0;
+$msgdisp = 30;
 
 # f̖O
-$bbstitle = '₵[ǁ';
-
-# wiF
-$bgc    = '004040';
-
-# eLXgF
-$textc  = 'ffffff';
+$bbstitle = '₵[ǁb';
 
-# NF
-$linkc  = 'eeffee';
-$vlinkc = 'dddddd';
-$alinkc = 'ff0000';
-
-# 薼̐F
-$subjc  = 'fffffe';
-
-# pbZ[W̐F
-# iFςȂꍇ͋ɂĂj
-$qmsgc  = 'd1d1d1';
-
-# tH[eʃ{^ɕ\镶
-$txtfollow = '';
-
-# eҌ{^ɕ\镶
-$txtauthor = '';
-
-# Xbh\{^ɕ\镶
-$txtthread = '';
-
-# tH[eɑ̓eҖɕt镶
-# iʂ̌fł́uvȂǂtƗǂł傤j
-$fsubj = '';
-
-# ߋOۑpfBNg̖O
-$oldlogfiledir = './log/';
-
-# ߋO̕ۑ`
-#   0 : HTML` (gsbNꗗAߋÖp@\͎gpł܂)
-#   1 : oCi`
-$oldlogfmt = 1;
-
-# ߋÕtH[eEeҌ
-#   0 : s
-#   1 :  (ߋO̕ۑ`HTML`̏ꍇ͐ݒł܂)
-$oldlogbtn = 1;
-
-# ߋO̕ۑ@
-#   0 : 
-#   1 : 
-$oldlogsavesw = 0;
-
-# ߋO̕ۑ
-#  (ߋO̕ۑ@̏ꍇɂ̂ݗL)
-$oldlogsaveday = 5;
-
-# ߋO̍őt@CTCY
-$maxoldlogsize = 4 * 1024 * 1024;
-
-# d݃`FbN
-$checkcount = 30;
-
-# PbZ[W̍ő包
-$maxmsgcol = 192;
-
-# PbZ[W̍ős
-$maxmsgline = 100;
-
-# PbZ[W̍őTCY(byte)
-$maxmsgsize = 8400;
-
-# Aeh~R[hiKύX邱Ɓj
-$protect_a = 12345678;	# 0ȊO̐n܂8̐
-$protect_b = 45;		# 0ȊO̐n܂2̐
-
-# N@\̏l
-#   0 : 
-#   1 : L
-$autolink = 1;
+if ( !$FORM{'newtitle'} ) {
+	$FORM{'newtitle'} = $bbstitle;
+}
 
 # tH[eʕ\
 #   0 : VKEBhEI[vĕ\
 #   1 : ʂɕ\
+# iʕ\͕sc邽߁A܂萄ł܂j
 $followwin = 0;
 
-# eIPAhX̋L^
-#   0 : L^Ȃ
-#   1 : vNV̂݋L^
-#   2 : SċL^
-$iprec = 0;
-
-# User Agent(uEU)̋L^
-#   0 : 
-#   1 : L
-$uarec = 0;
-
-# eIPAhX̕\
-# ieIPAhX̋L^LɂȂĂKv܂j
-#   0 : 
-#   1 : L
-$ipprint = 0;
-
-# User Agent(uEU)̕\
-# iUser Agent̋L^LɂȂĂKv܂j
-#   0 : 
-#   1 : L
-$uaprint = 0;
-
-# IPAhX̓eۂ鎞 (b)
-# ieIPAhX̋L^LɂȂĂKv܂
-#   0ɐݒ肷ƈؐ܂j
-$sptime = 20;
-
-# Cookieɂ铊eҁ^[AhXL@\̎gp
-#   0 : 
-#   1 : L
-$cookie = 0;
-
-# Ǘl̖O
-$adminname = '';
-
-# Ǘl̃[AhX
-$adminmail = 'kuzuha@kurumi.ne.jp';
-
-# ǗppX[hiŏ͋̂܂܂ɂĂĂj
-$adminpost = '';
-
-# Ǘ[hڍspL[[hiKύX邱Ɓj
-$adminkey = 'adminlogin';
-
-# L񎺂URL
-$infopage = 'http://kuzuha.tripod.co.jp/';
-
-# f[^̎n@
-$formmethod = 'post';
-
 
 ###############################################################################
 #  VXepݒEϐiɎwȂύXsj
@@ -237,13 +96,13 @@
 ###############################################################################
 
 sub getnowdate {
-	
+
 	( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdat )
 		= localtime ( $_[0] );
 	$year += 1900;
 	$mon++;
-	$nowdate = sprintf ( "%d/%02d/%02d(%s)%02d%02d%02db", 
-	  $year, $mon, $mday, 
+	$nowdate = sprintf ( "%d/%02d/%02d(%s)%02d%02d%02db",
+	  $year, $mon, $mday,
 	  ( '', '', '', '', '', '', 'y' )[$wday],
 	  $hour, $min, $sec );
 }
@@ -254,24 +113,24 @@
 ###############################################################################
 
 sub getformdata {
-	
+
 	my ( $formbuf, $name, $value );
-	
+
 	if ( $ENV{'REQUEST_METHOD'} eq 'POST' ) {
 		read ( STDIN, $formbuf[0], $ENV{'CONTENT_LENGTH'} );
 	} else {
 		$formbuf[0] = $ENV{'QUERY_STRING'};
 	}
-	
+
 	if ( $formbuf[0] ) {
-		
-		&prterror ( 'ĂяosłB' ) 
+
+		&prterror ( 'ĂяosłB' )
 		  if ( $ENV{'HTTP_HOST'} && ! ( $ENV{'HTTP_HOST'} =~ /$bbshost/i ) );
-		
+
 		$referer = $ENV{'HTTP_REFERER'};
 		$referer =~ s/\+/ /g;
 		$referer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack ( "C", hex ( $1 ) )/eg;
-		
+
 		foreach ( split ( /&/, $formbuf[0] ) ) {
 			( $name, $value ) = split ( /=/ );
 			$value =~ s/\+/ /g;
@@ -279,6 +138,7 @@
 			$value =~ s/&/&amp;/g;
 			$value =~ s/</&lt;/g;
 			$value =~ s/>/&gt;/g;
+			$value =~ s/"/&quot;/g;# X^CV[g΍
 			$value =~ s/\r\n/\r/g;
 			$value =~ s/\n/\r/g;
 			$value =~ s/\r$//;
@@ -294,7 +154,7 @@
 ###############################################################################
 
 sub jconv {
-	
+
 	if ( ( $FORM{'k'} ne '' && $FORM{'v'} ) || $FORM{'j'} ) {
 		require "$jcode";
 		foreach ( keys %FORM ) {
@@ -308,25 +168,25 @@
 #  ϐ擾
 ###############################################################################
 
-sub getenv {
-	
+sub getenv {#
+
 	if ( $uarec ) {
 		$agent = $ENV{'HTTP_USER_AGENT'};
 		$agent =~ s/</&lt;/g;
 		$agent =~ s/>/&gt;/g;
 		$agent =~ s/,/./g;
 	}
-	
+
 	if ( !$iprec ) { return; }
-	
+
 	$addr = $ENV{'REMOTE_ADDR'};
 	$host = $ENV{'REMOTE_HOST'};
 	if ( $addr eq $host || !$host ) {
 		$host = gethostbyaddr ( pack ( 'C4', split ( /\./, $addr ) ), 2 ) || $addr;
 	}
-	
+
 	$proxyflg = 0;
-	
+
 	if ( $ENV{'HTTP_CACHE_CONTROL'} )			{ $proxyflg = 1; }
 	if ( $ENV{'HTTP_CACHE_INFO'} )				{ $proxyflg += 2; }
 	if ( $ENV{'HTTP_CLIENT_IP'} )				{ $proxyflg += 4; }
@@ -347,15 +207,15 @@
 	if ( $host eq $addr ) {
 		$proxyflg += 8192;
 	}
-	
+
 	$realaddr = '';
 	$realhost = '';
 	if ( $proxyflg > 0 ) {
-		
+
 		if ( $ENV{'HTTP_X_FORWARDED_FOR'} =~
 		  s/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/$1.$2.$3.$4/ ) {
 			$realaddr = "$1.$2.$3.$4";
-		} elsif ( $ENV{'HTTP_FORWARDED'} =~ 
+		} elsif ( $ENV{'HTTP_FORWARDED'} =~
 		  s/.*\s(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/ ) {
 			$realaddr = "$1.$2.$3.$4";
 		} elsif ( $ENV{'HTTP_VIA'} =~
@@ -372,20 +232,81 @@
 		} elsif ( $ENV{'HTTP_FROM'} =~ s/\-\@(.+)/$1/ ) {
 			$realhost = "$1";
 		}
-		
+
 		if ( !$realaddr && $realhost ) {
 			$realpackaddr = gethostbyname ( $realhost );
 			( $a, $b, $c, $d ) = unpack ( 'C4', $realpackaddr );
 			$realaddr = "$a.$b.$c.$d";
 		}
-		
+
+			if ( $realaddr eq '' ) {
+				$anonyproxyflg = 1;
+			} else {
+				if ( ($realaddr) && ($realhost eq '') ) {
+					$realhost = $realaddr;
+				}
+			}
+
 		if ( $realaddr && $iprec != 2 ) {
 			$host = '(leak)';
 		}
+
 	} else {
 		$host = '(none)' if ( $iprec != 2 );
 	}
-}
+
+}#
+
+
+###############################################################################
+#  t@[
+###############################################################################
+
+#$jumpurl = "http://rotten.com/";
+$jumpurl = "http://www.ge.st98.arena.ne.jp/index.html";
+$referer = $ENV{'HTTP_REFERER'};
+
+	@referer_list = (
+	"ime\.nu",
+	"pinktower\.com",
+	"2ch",
+	"ohayou\.com",
+	"15ch",
+	"bbspink",
+	"jbbs",
+	"machibbs",
+	"megabbs",
+	"shitaraba",
+	"cgigame\.com"
+	);
+
+	foreach $referer_list2 (@referer_list) {
+
+		if ( $referer =~ /$referer_list2/i ) {
+			print "Content-type: text/html\n";
+			print "Location: $jumpurl\n\n";
+			exit;
+		}
+
+	}
+
+###############################################################################
+#  񏑍{bg΍
+###############################################################################
+
+# BBS Write͔zzI
+# D-Engine͌
+# {bg̓[UG[WFgύXł̂
+# ̏ꍇIP𐧌邱
+
+# WvURL
+$jumpurl = 'http://www.rotten.com/';
+
+	if ($ENV{'HTTP_USER_AGENT'} =~ /BBS Write|D-Engine/i ){
+		print "Content-type: text/html\n";
+		print "Location: $jumpurl\n\n";
+		exit;
+	}
 
 
 ###############################################################################
@@ -393,12 +314,12 @@
 ###############################################################################
 
 sub escstring {
-	
+
 	my ( $srcstr ) = $_[0];
-	
+
 	$srcstr =~ s/([^a-zA-Z0-9\s])/sprintf ( "%%%lx", ( unpack ( "C", $1 ) ) )/eg;
 	$srcstr =~ s/ /\+/g;
-	
+
 	return $srcstr;
 }
 
@@ -408,16 +329,16 @@
 ###############################################################################
 
 sub loadmessage {
-	
+
 	my $openlog;
-	
+
 	if ( !$FORM{'ff'} ) {
 		$openlog = $logfilename;
 	} else {
 		$FORM{'ff'} =~ /^([\w.]*)$/;
 		$openlog = "$oldlogfiledir/$1";
 	}
-	
+
 	open ( READLOG, "$openlog" ) || &prterror ( 'bZ[Wǂݍ݂Ɏs܂' );
 	eval 'flock ( READLOG, 1 )';
 	seek ( READLOG, 0, 0 );
@@ -432,7 +353,7 @@
 ###############################################################################
 
 sub getmessage {
-	
+
 	( $ndate, $postid, $protect, $thread, $phost, $agent, $user, $mail, $title, $msg )
 	  = split ( /\,/, $_[0] );
 	$msg =~ s/\n$//;
@@ -441,6 +362,9 @@
 	$user =~ s/\0/\,/g;
 	$msg =~ s/\0/\,/g;
 	$wdate = &getnowdate ( $ndate );
+
+	# ^O
+	$msg = &tag_change($msg, 0);
 }
 
 
@@ -449,63 +373,127 @@
 ###############################################################################
 
 sub prtmessage {
-	
-	my $mode = $_[0];	# 0 : f 1 : ߋO({^\) 2 : ߋO({^\Ȃ) 3 : 
+
+	if ( $FORM{'multizilla'} ) {
+		$addblank = "\&multizilla=$FORM{'multizilla'}";
+	} else {
+		$addblank = '';
+	}
+
+	if ( ( $FORM{'newtitle'} ) eq $bbstitle ) {
+		$addnewtitle = '';
+	} else {
+		$addnewtitle = "\&newtitle=$FORM{'newtitle'}";
+	}
+
+	#ZLeBz[΍
+	$FORM{'e'} =~ /^([\w.]*)$/;
+	$FORM{'e'} = $1;
+
+	my $mode = $_[0];	# 0 : f 1 : ߋO({^\) 2 : ߋO({^\Ȃ) 3 : eҌ
 	my $tlog = $_[1];
 	my ( $tag, $refdate, $prtmessage, $btn, $btnfollow, $btnauthor, $btnthread, $newwin,
 	  $envlist, $envaddr, $envua, $envbr );
-	
-	# uQlv
+
+	# uQlvʑŊJ
 	if ( $mode == 0 || $mode == 3 ) {
-		$msg =~ s/<A href=\"m=f\&s=(\d+)\&r=(\S+)\">(.*)<\/A>/<A href=\"$cgiurl\?m=f\&c=$FORM{'c'}&s=$1\&r=$2\">$3<\/A>/i;
-		$msg =~ s/<A href=\"mode=follow\&search=(\d+)\&ref=(\S+)\">(.*)<\/A>/<A href=\"$cgiurl\?m=f\&c=$FORM{'c'}&s=$1\&r=$2\">$3<\/A>/i;
+
+	# target=_blankɒuAmultizillã^uŊJ
+	if ( ( !$followwin ) && ( !$FORM{'multizilla'} ) ) {
+		$newwin = " target=\"link\"";
+	} elsif ( $FORM{'multizilla'} ) {
+		$newwin = " target=\"_blank\"";
+	} else {
+		$newwin = '';
+	}
+
+		$msg =~ s/<A href=\"m=f\&s=(\d+)\&r=(\S+)\">(.*)<\/A>/<A href=\"$cgiurl\?m=f\&c=$FORM{'c'}&s=$1\&r=$2$addnewtitle\"$newwin>$3<\/A>/i;
+		$msg =~ s/<A href=\"mode=follow\&search=(\d+)\&ref=(\S+)\">(.*)<\/A>/<A href=\"$cgiurl\?m=f\&c=$FORM{'c'}&s=$1\&r=$2$addnewtitle\"$newwin>$3<\/A>/i;
 	} else {
 		$msg =~ s/<A href=\"m=f\&s=(\d+)\&r=(\S+)\">(.*)<\/A>/<A href=\"#$1\">$3<\/A>/i;
 		$msg =~ s/<A href=\"mode=follow\&search=(\d+)\&ref=(\S+)\">(.*)<\/A>/<A href=\"#$1\">$3<\/A>/i;
 	}
-	
+
 	if ( $mode == 0 || $mode == 3 || ( $mode == 1 && $oldlogbtn && $oldlogfmt ) ) {
-		
-		if ( !$followwin ) { $newwin = " target=\"link\""; }
-		else { $newwin = '' };
-		
+
+	# target=_blankɒuAmultizillã^uŊJ
+	if ( ( !$followwin ) && ( !$FORM{'multizilla'} ) ) {
+		$newwin = " target=\"link\"";
+	} elsif ( $FORM{'multizilla'} ) {
+		$newwin = " target=\"_blank\"";
+	} else {
+		$newwin = '';
+	}
+
 		# tH[e{^
 		$btnfollow = "<A href=\"$cgiurl\?m=f\&u=".
 		  &escstring ( $FORM{'u'} ) .
-		  "&d=$FORM{'d'}&p=$toppostid&s=$postid\&c=$FORM{'c'}";
+		  "&d=$FORM{'d'}&p=$toppostid&s=$postid\&c=$FORM{'c'}$addblank$addnewtitle&$ks_param->{get}";
 		if ( !$mode ) {
 			$btnfollow .= "\"";
 		} elsif ( $mode == 3 ) {
 			$btnfollow .= "&ac=1\"";
 		} else {
-			$btnfollow .= "&ff=$tlog\"";
+			#$btnfollow .= "&ff=$tlog\"";
+			$btnfollow .= "\&ff=$FORM{'e'}\"";
 		}
 		$btnfollow .= "$newwin>$txtfollow</A>@\n";
-		
+
 		# eҌ{^
-		$btnauthor = "<A href=\"$cgiurl\?m\=s\&s\=".
-		  &escstring ( $user ) .
-		  "\&c=$FORM{'c'}\"".
-		  " target=\"link\">$txtauthor</A>@\n";
-		
+
+		# target=_blankɒuAmultizillã^uŊJ
+		# Ɓ͂ɂtargetŊJ
+		if ( $FORM{'multizilla'} ) {
+			$newwin2 = ' target="_blank"';
+		} else {
+			$newwin2 = ' target="link"';
+		}
+
+		# 󔒓é\Ȃ
+		if ( ( $anonymous_search ) || ( ( $user ne $anonymous_word ) && ( !$anonymous_search ) ) ) {
+
+			$btnauthor = "<A href=\"$cgiurl\?m\=s\&s\=".
+			  &escstring ( $user ) .
+			  "\&c=$FORM{'c'}$addblank$addnewtitle&$ks_param->{get}\"".
+			  "$newwin2>$txtauthor</A>@\n";
+
+		} else {
+			$btnauthor = '';
+		}
+
 		# Xbh\{^
-		if ( $thread ) {
+		# ŏ̓e灟
+		if ( ( !$thread ) && ( $first_thread ) ) {
+			$thread = $postid;
+		}
+
+		# ߋÕ{^͏펞
+		if ( ( !$thread ) && ( $mode == 1 ) ) {
+			$thread = $postid;
+		}
+
+		if ( ( $thread ) || ( ( !$thread ) && ( $first_thread ) ) ) {
 			$btnthread = "<A href=\"$cgiurl\?m\=t\&c=$FORM{'c'}".
-			  "\&s\=$thread\" target=\"link\">$txtthread</A>\n";
+			  "\&s\=$thread$addblank$addnewtitle\&ff=$FORM{'e'}&$ks_param->{get}\"$newwin2>$txtthread</A>\n";
 		} else {
 			$btnthread = '';
 		}
-		
+
 		$btn = "@\n  $btnfollow  $btnauthor  $btnthread";
 	} else {
 		$btn = '';
 	}
-	
+
 	# [AhX
 	if ( $mail ) {
 		$user = "<A href=\"mailto\:$mail\">$user<\/A>";
 	}
-	
+
+	# _blankŊJ
+	if ( $FORM{'multizilla'} ) {
+		$msg =~ s/target\=\"link\"/target\=\"_blank\"/g;
+	}
+
 	# pFύX
 	if ( !$mode ) {
 		$msg =~ s/(^|\r)(&gt;[^\r]*)/$1<FONT color=\"#$CC{'qmsgc'}\">$2<\/FONT>/g;
@@ -514,7 +502,7 @@
 		$msg =~ s/(^|\r)(&gt;[^\r]*)/$1<FONT color=\"#$qmsgc\">$2<\/FONT>/g;
 		$msg =~ s/<\/FONT>\r<FONT color=\"#$qmsgc\">/\r/g;
 	}
-	
+
 	# ϐ
 	if ( $ipprint ) {
 		$envaddr = $phost;
@@ -530,15 +518,15 @@
 		$envbr = '<BR>';
 	}
 	if ( $envaddr || $envua ) {
-		$envlist = qq!<FONT size="-1"><I>$envaddr$envbr$envua</I></FONT>!;
+		$envlist = qq!<\!--$envaddr$envbr$envua-->!;
 	} else {
 		$envlist = '';
 	}
-	
+
 	# bZ[W\e`
 	$prtmessage = qq(<A name="$postid"></A>\n$tmpl_msg);
 	$prtmessage =~ s/(\$[A-Za-z0-9\'\{\}]+)/$1/eeg;
-	
+
 	return $prtmessage;
 }
 
@@ -548,22 +536,22 @@
 ###############################################################################
 
 sub counter {
-	
+
 	my ( @count, @filenumber, @sortedcount, $maxcount, $mincount );
-	
+
 	for ( $i = 0 ; $i < $countlevel ; $i++ ) {
 		open ( IN, "$countfile$i.dat" );
 		$count[$i] = <IN>;
 		$filenumber{$count[$i]} = $i;
 		close ( IN );
 	}
-	
+
 	@sortedcount = sort { $a <=> $b; } @count;
 	$maxcount = $sortedcount[$countlevel-1];
 	$mincount = $sortedcount[0];
-	
+
 	$maxcount++;
-	
+
 	if ( open ( OUT, ">$countfile$filenumber{$mincount}.dat" ) ) {
 		print OUT $maxcount;
 		close ( OUT );
@@ -579,9 +567,9 @@
 ###############################################################################
 
 sub mbrcount {
-	
+
 	my ( @hostbin, @ukey, @cntdata, $mbrcount, $cuser, $ctime, $cadd );
-	
+
 	if ( $cntfilename ) {
 		undef @cntdata;
 		$mbrcount = 0;
@@ -592,14 +580,14 @@
 		$ukey[0] = $hostbin[0] + $hostbin[1] + $hostbin[2] + $hostbin[3];
 		$ukey[1] = $hostbin[0] ^ $hostbin[1] & $hostbin[2] ^ $hostbin[3];
 		$ukey[2] = $ukey[0] * $ukey[1];
-		
+
 		if ( open ( UCNT, $cntfilename ) ) {
 			eval 'flock ( UCNT, 1 )';
 			seek ( UCNT, 0, 0 );
 			@cntdata = <UCNT>;
 			eval 'flock ( UCNT, 8 )';
 			close ( UCNT );
-			
+
 			$cadd = 0;
 			for ( $i = 0 ; $i < @cntdata ; $i++ ) {
 				( $cuser, $ctime ) = split ( /\,/, $cntdata[$i] );
@@ -623,15 +611,15 @@
 			push ( @cntdata, "$ukey[2],$nowtime\n" );
 			$mbrcount++;
 		}
-		
+
 		open ( UCNT, ">>$cntfilename" ) || &prterror ( 'Q҃JEgt@C݂̏Ɏs܂B' );
 		eval 'flock ( UCNT, 2 )';
 		truncate ( UCNT, 0 );
 		seek ( UCNT, 0, 0 );
 		print UCNT @cntdata;
 		close ( UCNT );
-		
-		return "@݂̎Q : $mbrcount ($cntlimitbȓ)";
+
+		return "@݂̎Q : $mbrcount ($cntlimitbȓ)@<a href=\"../index.html\"><font color=\"#ffff00\">m点</font></a>(treeview fix)";
 	} else {
 		return;
 	}
@@ -643,27 +631,28 @@
 ###############################################################################
 
 sub prthtmlhead {
-	
+
 	my $headtitle = $_[0];
-	
+
 	# wb_o
 	print "Content-type: text/html\n";
 	if ( $gzip && $gzipu && ( $ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/ ) ) {
 		print "Content-encoding: gzip\n\n";
 		open ( STDOUT, "| $gzip -1 -c" );
-		print "<!-- gzip enable -->";
+		print "\n<!-- gzip enable -->\n";
 	} else {
-		print "\n<!-- gzip disable -->";
+		print "\n<!-- gzip disable -->\n";
 	}
-	
+
 	print <<EOF;
 <HTML>
+<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
 <HEAD>
 <TITLE>$headtitle</TITLE>
 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
 </HEAD>
-
 $body
+<a name="top"></a>
 EOF
 }
 
@@ -673,17 +662,19 @@
 ###############################################################################
 
 sub prterror {
-	
+
 	my $error = $_[0];
-	
+
 	print <<EOF;
 Content-type: text/html
 
 <HTML>
+<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
+<META http-equiv="Pragma" content="no-cache">
 <HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
 <META http-equiv="Pragma" content="no-cache">
-<TITLE>$bbstitle (G[)</TITLE>
+<TITLE>$FORM{'newtitle'} (G[)</TITLE>
 </HEAD>
 $body
 <H3>$error</H3>
@@ -699,18 +690,18 @@
 ###############################################################################
 
 sub prtfollow {
-	
+
 	my $retry = $_[0];
 	my $success = 0;
 	my $formmsg;
-	
+
 	&loadmessage;
-	
+
 	&prterror ( 'p[^܂B' ) if ( !$FORM{'s'} );
-	
-	&prthtmlhead ( "$bbstitle tH[e" );
+
+	&prthtmlhead ( "$FORM{'newtitle'} tH[e" );
 	print "<HR>\n";
-	
+
 	foreach ( 0 .. @logdata - 1 ) {
 		&getmessage ( $logdata[$_] );
 		if ( $postid eq $FORM{'s'} ) {
@@ -719,14 +710,15 @@
 		}
 		$i++;
 	}
-	
+
 	if ( !$success ) {
 		print "<H3>w肳ꂽbZ[W܂B</H3></BODY></HTML>";
 		exit;
 	}
-	
+
 	if ( !$retry ) {
 		$formmsg = $msg;
+
 		$formmsg =~ s/&gt; &gt;.*?\r//g;
 		$formmsg =~ s/<A href=\"m=f\S+\">.*<\/A>//i;
 		$formmsg =~ s/<A href=\S+ target=\"link\">(\S+)<\/A>/$1/ig;
@@ -734,39 +726,49 @@
 		$formmsg = "&gt; $formmsg\r";
 		$formmsg =~ s/\r&gt;\s+\r/\r/g;
 		$formmsg =~ s/\r&gt;\s+\r$/\r/g;
+
+		# ȕϊ߂(FtƂ)
+		$formmsg = &change_from_xxx($formmsg);
 	} else {
-		$formmsg = "$FORM{'v'}";
+		$formmsg = &change_from_xxx($FORM{'v'});
 		$formmsg =~ s/<A href=\"m=f\S+\">.*<\/A>//i;
 	}
-	
+
 	print &prtmessage ( 0, '' );
-	
+
 	if ( !$thread ) {
 		$thread = $postid;
 	}
-	
+
 	if ( $user =~ /\<A\shref=\"mailto\:.*\"\>(.*)\<\/A\>/ ) {
 		$user = $1;
 	}
-	print "tH[Le<BR>\n";
+	print 'tH[Le@<a href="bbs.cgi">߂</a><BR>';
 	&prtform ( "$user$fsubj", "$formmsg\r", '' );
-	
+
 	print <<EOF;
   <BR>
   <INPUT type="hidden" name="d" value="$FORM{'d'}">
-  <FONT size="-1">URLN <INPUT type="checkbox" name="a" value="checked" $S_alchk[$autolink]></FONT><BR>
+  <FONT size="-1">gzip] <INPUT type="checkbox" name="g" accesskey="G" value="checked" $S_gzchk[$gzipu]>
+  URLN <INPUT type="checkbox" name="a" accesskey="U" value="checked" $S_alchk[$autolink]></FONT><BR>
   <INPUT type="hidden" name="g" value="checked" $S_gzchk[$gzipu]>
   <INPUT type="hidden" name="p" value="$FORM{'p'}">
   <INPUT type="hidden" name="s" value="$FORM{'s'}">
   <INPUT type="hidden" name="h" value="$thread">
   <INPUT type="hidden" name="f" value="$postid:$wdate">
   <INPUT type="hidden" name="ac" value="$FORM{'ac'}">
+  <INPUT type="hidden" name="newtitle" value="$FORM{'newtitle'}">
+  <INPUT type="hidden" name="multizilla" value="$FORM{'multizilla'}">
+  <INPUT type="hidden" name="target_blank" value="$FORM{'target_blank'}">
+  <INPUT type="hidden" name="targetlink" value="$FORM{'targetlink'}">
+  <INPUT type="hidden" name="gikoitsuoff" value="$FORM{'gikoitsuoff'}">
+$ks_param->{post}
   <HR>
 </FORM>
 </BODY>
 </HTML>
 EOF
-	
+
 	exit;
 }
 
@@ -775,22 +777,27 @@
 #  pX[h`FbN
 ###############################################################################
 
-sub chkpasswd {
-	
+sub chkpasswd {#
+
 	my $slen;
-	
-	if ( $adminpost =~ /^\$1\$/ ) {
+
+	if ( ($adminpost[0] =~ /^\$1\$/) || ($adminpost[1] =~ /^\$1\$/) ||  ($adminpost[2] =~ /^\$1\$/ ) ) {
 		$slen = 5;
 	} else {
 		$slen = 2;
 	}
-	
-	if ( crypt ( $FORM{'u'}, substr ( $adminpost, 0, $slen ) ) eq $adminpost ) {
+
+	if ( crypt ( $FORM{'u'}, substr ( $adminpost[0], 0, $slen ) ) eq $adminpost[0] ) {
 		return 1;
+	} elsif ( crypt ( $FORM{'u'}, substr ( $adminpost[1], 0, $slen ) ) eq $adminpost[1] ) {
+		return 2;
+	} elsif ( crypt ( $FORM{'u'}, substr ( $adminpost[2], 0, $slen ) ) eq $adminpost[2] ) {
+		return 3;
 	} else {
 		return 0;
 	}
-}
+
+}#
 
 
 ###############################################################################
@@ -798,14 +805,22 @@
 ###############################################################################
 
 sub chkmessage {
-	
+
 	my ( @hostbin, $admincheck, $adminfname );
-	
-	if ( $referer && ! ( $referer =~ /$cgiurl/i ) ) {
+
+	# Amj}CU[oR̓e^ۂ
+	if ($anonymizer) {
+		if ( ! ( $referer =~ /$cgiurl/i ) ) {#֎~
+			&chkerror ( "eʂ̂tqk<BR>$cgiurl<BR>" .
+			  'ȊO̓e͂ł܂B',  3 );
+		}
+	} else {
+		if ( $referer && ! ( $referer =~ /$cgiurl/i ) ) {#
 		&chkerror ( "eʂ̂tqk<BR>$cgiurl<BR>" .
 		  'ȊO̓e͂ł܂B',  3 );
+		}
 	}
-	
+
 	$i = 0;
 	foreach ( split ( /\r/, $FORM{'v'} ) ) {
 		if ( length ( $_ ) > $maxmsgcol ) {
@@ -813,15 +828,15 @@
 		}
 	}
 	if ( $i != 0 ) { &chkerror ( 'eě傫܂B', 10 ); }
-	
+
 	if ( ( $FORM{'v'} =~ tr/\r/\r/ ) > ( $maxmsgline - 1 ) ) {
 		&chkerror ( 'ee̍s傫܂B', 11 );
 	}
-	
+
 	if ( length ( $FORM{'v'} ) > $maxmsgsize ) {
 		&chkerror ( 'ee傫܂B', 12 );
 	}
-	
+
 	if ( $FORM{'pc'} ) {
 		@hostbin = split ( /\./, $ENV{'REMOTE_ADDR'} );
 		for ( $i = 0 ; $i < 4 ; $i++ ) {
@@ -830,7 +845,7 @@
 		$protect_c = $hostbin[0] ^ $hostbin[1] ^ $hostbin[2] ^ $hostbin[3];
 		$pcheck = ( $FORM{'pc'} - $protect_c ) / $protect_b - $protect_a;
 		&getnowdate ( $pcheck );
-		if ( ( $sec  < 0 ) || ( $sec  > 60 ) || 
+		if ( ( $sec  < 0 ) || ( $sec  > 60 ) ||
 		  ( $min  < 0 ) || ( $min  > 60 ) ||
 		  ( $hour < 0 ) || ( $hour > 24 ) ) {
 			&chkerror ( '', 32 );
@@ -850,7 +865,7 @@
 	} else {
 		&chkerror ( 'tH[f[^̈ꕔɌ܂Bx蒼ĉB', 33 );
 	}
-	
+
 	if ( $FORM{'i'} =~ / /i ) {
 		$FORM{'i'} = '';
 	}
@@ -861,43 +876,82 @@
 			&chkerror ( '[AhX͕wł܂B', 21 );
 		}
 	}
-	
+
 	if ( !$FORM{'t'} ) {
-		$FORM{'t'} = ' ';
+		$FORM{'t'} = $notitle;
 	}
-	
+
 	if ( !$FORM{'u'} ) {
-		$FORM{'u'} = '@';
+		if ( !$anonymous_post ) {
+			# Le̋֎~
+			&chkerror ( 'eҖ͂Ă܂B', 22 );
+		} else {
+			$FORM{'u'} = $anonymous_word;
+		}
 	} else {
+
 		if ( &chkpasswd ) {
 			if ( $FORM{'v'} =~ /^$adminkey/ ) {
 				require 'sub/bbsadmin.pl';
 				&adminmain;
 				exit;
 			} else {
-				$FORM{'u'} = $adminname;
-				$FORM{'i'} = $adminmail;
+
+				if ( &chkpasswd eq 1) {
+					$FORM{'u'} = $adminname[0];
+					$FORM{'i'} = $adminmail[0];
+				} elsif ( &chkpasswd eq 2) {
+					$FORM{'u'} = $adminname[1];
+					$FORM{'i'} = $adminmail[1];
+				} elsif ( &chkpasswd eq 3) {
+					$FORM{'u'} = $adminname[2];
+					$FORM{'i'} = $adminmail[2];
+				}
 			}
-		} elsif ( $FORM{'u'} eq $adminpost ) {
-			$FORM{'u'} = "$adminnameinJ[j";
+		} elsif ( $FORM{'u'} eq $adminpost[0] ) {
+			$FORM{'u'} = "$adminname[0]inJ[j";
+		} elsif ( $FORM{'u'} eq $adminpost[1] ) {
+			$FORM{'u'} = "$adminname[1]inJ[j";
+		} elsif ( $FORM{'u'} eq $adminpost[2] ) {
+			$FORM{'u'} = "$adminname[2]inJ[j";
 		} else {
-			$adminfname = quotemeta $adminname;
-			if ( $FORM{'u'} =~ /$adminfname/i ) {
-				$admincheck = $FORM{'u'};
-				$admincheck =~ s/ //g;
-				$admincheck =~ s/@//g;
-				$admincheck =~ s/_//g;
-				if ( $admincheck eq $adminname ) {
-					$FORM{'u'} =~ s/$adminfname/$adminnameixj/;
+
+			foreach $hadminname (@adminname) {
+				$adminfname = quotemeta $hadminname;
+
+				if ( $FORM{'u'} =~ /$adminfname/i ) {
+					$admincheck = $FORM{'u'};
+					$admincheck =~ s/ //g;
+					$admincheck =~ s/@//g;
+					$admincheck =~ s/_//g;
+					if ( ( $admincheck eq $adminname[0] ) && ( $FORM{'i'} ) ) {
+						$FORM{'u'} =~ s/$adminfname/$adminname[0]ixj/;
+					}
+					if ( ( $admincheck eq $adminname[1] )  && ( $FORM{'i'} ) ){
+						$FORM{'u'} =~ s/$adminfname/$adminname[1]ixj/;
+					}
+					if ( ( $admincheck eq $adminname[2] )  && ( $FORM{'i'} ) ){
+						$FORM{'u'} =~ s/$adminfname/$adminname[2]ixj/;
+					}
 				}
 			}
 		}
 	}
-	
+
 	if ( $autolink ) {
 		$FORM{'v'} =~ s#((https?|ftp|gopher|telnet|whois|news)://(=[\x21-\xfc]+|[\x21-\x7e])+)#<A href="$1" target="link">$1</A>#ig;
 	}
-	
+
+	# URLtH[javascript:`ׂ
+
+	#javascript:open('http://strange.kurumi.ne.jp/bbs.cgi');
+	#javascript:for(;;){window.open();}
+	#javascript:open('../diary/diary.html');
+
+	if ( $FORM{'l'} =~ /javascript/i ) {
+		$FORM{'l'} =~ s/:/F/gi;
+	}
+
 	if ( $FORM{'l'} =~ /\s+/ || !$FORM{'l'} ) {
 		$FORM{'l'} = '';
 	} else {
@@ -908,6 +962,15 @@
 		( $i, $j ) = split ( /:/, $FORM{'f'} );
 		$FORM{'v'} .= "\r\r<A href=\"m=f\&s=$i\&r=$j\">QlF$j</A>";
 	}
+
+	# date:2003/12/01
+	# ȕϊs(FtƂ)
+	$FORM{'v'} = &change_to_xxx($FORM{'v'});
+
+	# mfl[
+	if ($ngnameon) {
+		&ngnamepre;
+	}
 }
 
 
@@ -916,10 +979,10 @@
 ###############################################################################
 
 sub chkerror {
-	
+
 	my $errstr = $_[0];
 	$posterr = $_[1];
-	
+
 	&prterror ( $errstr ) if ( $errstr );
 }
 
@@ -929,14 +992,14 @@
 ###############################################################################
 
 sub putmessage {
-	
+
 	my $oldlogext;
-	
+
 	open ( FLOG, "+<$logfilename" ) || &prterror ( 'bZ[Wǂݍ݂Ɏs܂' );
 	eval 'flock ( FLOG, 2 )';
 	seek ( FLOG, 0, 0 );
 	@logdata = <FLOG>;
-	
+
 	$i = 0;
 	$posterr = 0;
 	while ( $logdata[$i] && !$posterr ) {
@@ -947,16 +1010,17 @@
 		$posterr = 2 if ( $host && ( $host eq $items[4] ) && ( $nowtime < ( $items[0] + $sptime ) ) );
 		$i++;
 	}
-	
+
 	if ( !$posterr ) {
-		
+
 		@items = split ( /\,/, $logdata[0] );
 		$newpostid = $items[1] + 1;
+# Ńf[^L^
 		$msgdata = "$nowtime,$newpostid,$FORM{'pc'},$FORM{'h'},$host,$agent,$FORM{'u'},$FORM{'i'},$FORM{'t'},$FORM{'v'}\n";
-		
+
 		@logdata = @logdata[0 .. $logsave - 2] if ( @logdata >= $logsave );
 		unshift ( @logdata, $msgdata );
-		
+
 		$oldstream = select ( FLOG );
 		$| = 1;
 		seek ( FLOG, 0, 0 );
@@ -965,18 +1029,18 @@
 		eval 'flock ( FLOG, 8 )';
 		close ( FLOG );
 		select ( $oldstream );
-		
+
 		&getnowdate ( $nowtime );
-		
+
 		# ߋOo
 		if ( $oldlogfiledir ) {
-			
+
 			if ( !$oldlogfmt ) {
 				$oldlogext = 'html';
 			} else {
 				$oldlogext = 'dat';
 			}
-			
+
 			if ( !$oldlogsavesw ) {
 				$oldlogfilename = sprintf ( "%s/%d%02d%02d.$oldlogext",
 				  $oldlogfiledir, $year, $mon, $mday );
@@ -984,17 +1048,18 @@
 				$oldlogfilename = sprintf ( "%s%d%02d.$oldlogext",
 				  $oldlogfiledir, $year, $mon );
 			}
-			
+
 			open ( CLOG, ">>$oldlogfilename" ) || &prterror ( 'ߋOo͂Ɏs܂' );
 			eval 'flock ( CLOG, 2 )';
-			
+
 			$oldstream = select ( CLOG );
 			$| = 1;
-			
+
 			if ( !$oldlogfmt ) {
 				if ( -z CLOG ) {
 					print CLOG <<EOF;
 <HTML>
+<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
 <HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
 <TITLE>$bbstitle</TITLE>
@@ -1003,34 +1068,34 @@
 <HR>
 EOF
 				}
-				
+
 				&getmessage ( $msgdata );
-				
+
 				print CLOG &prtmessage ( 1, '' );
-				
+
 			} else {
 				print CLOG $msgdata;
 			}
-			
+
 			eval 'flock ( CLOG, 8 )';
 			close ( CLOG );
-			
+
 			select ( $oldstream );
-			
+
 			chmod 0400, $logfilename if ( ( -s $oldlogfilename ) > $maxoldlogsize );
-			
+
 			&getnowdate ( time - $difftime - $oldlogsaveday * 60 * 60 * 24 );
 			$oldlogfilename = sprintf (  "%s/%d%02d%02d.$oldlogext",
 			  $oldlogfiledir, $year, $mon, $mday );
 			unlink $oldlogfilename;
-			
+
 			&putcookie ( 0 ) if ( $cookie );
 		}
-		
+
 	} else {
 		eval 'flock ( FLOG, 8 )';
 		close ( FLOG );
-		
+
 		if ( $posterr == 2 ) {
 			&chkerror ( '', $posterr );
 			if ( $FORM{'f'} ) {
@@ -1049,7 +1114,7 @@
 ###############################################################################
 
 sub getcookie {
-	
+
 	if ( $ENV{'HTTP_COOKIE'} ) {
 		$ENV{'HTTP_COOKIE'} =~ /^c\=u\=(.*)\&m\=(.*)&c\=(.*)$/;
 		$FORM{'u'} = $1 if ( $1 && !$FORM{'u'} );
@@ -1067,13 +1132,13 @@
 ###############################################################################
 
 sub putcookie {
-	
+
 	my ( $cuser, $cmail, @ctime, $cmday, $cmon, $cdate );
 	my $cexpdif = $_[0];
-	
+
 	$cuser = &escstring ( $FORM{'u'} );
 	$cmail = &escstring ( $FORM{'i'} );
-	
+
 	( @ctime ) = gmtime ( time + $S_cexp - $cexpdif );
 	$cmday = ( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' )[$ctime[6]];
 	$cmon = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' )[$ctime[4]];
@@ -1088,10 +1153,10 @@
 ###############################################################################
 
 sub pcode {
-	
+
 	my ( @hostbin, @pkey, @pkeystr, @apkey );
 	srand ( time | $$ );
-	
+
 	#$nowtime = time - $difftime * 60 * 60;
 	@hostbin = split ( /\./, $ENV{'REMOTE_ADDR'} );
 	for ( $i = 0 ; $i < 4 ; $i++ ) {
@@ -1101,14 +1166,14 @@
 	$pkey[0] = ( $nowtime + $protect_a ) * $protect_b + $protect_c;
 	$pkey[1] = $pkey[0] - int ( rand ( 64 ) );
 	$pkey[2] = $pkey[1] + int ( rand ( 128 ) );
-	
+
 	$pkeystr[0] = "\n  <INPUT type=\"hidden\" name=\"pc\" value=\"$pkey[0]\">\n";
 	$pkeystr[1] = "  <!--\n  <INPUT type=\"hidden\" name=\"pc\" value=\"$pkey[1]\">\n  -->";
 	$pkeystr[2] = "  <!--\n  <INPUT type=\"hidden\" name=\"pc\" value=\"$pkey[2]\">\n  -->";
-	
+
 	push ( @apkey, splice ( @pkeystr, rand ( @pkeystr ), 1 ) ) while @pkeystr;
 	@pkeystr = @apkey;
-	
+
 	return "$pkeystr[0]$pkeystr[1]$pkeystr[2]";
 }
 
@@ -1118,95 +1183,121 @@
 ###############################################################################
 
 sub prtform {
-	
+
 	my $dtitle = $_[0];
 	my $dmsg = $_[1];
 	my $dlink = $_[2];
 	my ( $bbslink, $gzipchk, $counter, $mbrcount );
-	
+
 	# veNgR[h
 	my $ptext = &pcode;
-	
+
 	# JE^
 	$counter = &counter;
 	$mbrcount = &mbrcount;
-	
+
 	if ( $gzip ) {
-		$gzipchk = qq#  @<FONT size="-1">gzipk] <INPUT type="checkbox" name="g" value="checked" $S_gzchk[$gzipu]></FONT>#;
+		$gzipchk = qq#  @<FONT size="-1">gzipk] <INPUT type="checkbox" name="g" accesskey="G" value="checked" $S_gzchk[$gzipu]></FONT>#;
 	} else {
 		$gzipchk = '';
 	}
-	
-	if ( $FORM{'m'} eq 'o' || $FORM{'m'} eq 'op' ) {
-		
+
+	# OǂݐpʁÃ[h̕sC
+	if ( $FORM{'m'} eq 'o' || $FORM{'m'} eq 'op' || $FORM{'rm'} eq 'o' ) {
+
 		# OǂݐptH[
-		$bbslink = qq#<A href="$cgiurl?c=$FORM{'c'}">W</A>#;
 		print <<EOF;
 <FORM method="$formmethod" action="$cgiurl">
   <INPUT type="hidden" name="m" value="op">
   <INPUT type="hidden" name="k" value="">
   <INPUT type="hidden" name="c" value="$FORM{'c'}">
-  <P><FONT size="-1">\\ <INPUT size="6" type="text" name="d" value="$FORM{'d'}">
+  <P><FONT size="-1">\\ <INPUT size="6" type="text" name="d" accesskey="1" value="$FORM{'d'}">
 $gzipchk
-  @<FONT size="-1">URLN <INPUT type="checkbox" name="a" value="checked" $S_alchk[$autolink]></FONT>
-  @<INPUT type="submit" name="setup" value="̑̐ݒ"></FONT></P>
+  @<FONT size="-1">URLN <INPUT type="checkbox" name="a" accesskey="U" value="checked" $S_alchk[$autolink]></FONT>
+  @<FONT size="-1">LinksOFF <INPUT type="checkbox" name="linkline" accesskey="l" value="checked" $FORM{'linkline'}></FONT>
+  @<INPUT type="submit" name="setup" accesskey="C" value="ݒ"></FONT></P>$keikoku
   <FONT size="-1">$countdate  $counteriɂx$countlevelj$mbrcount</FONT>
   <HR>
-  <FONT size="-1">| 
-  <A href="$infopage">L</A> | 
-  <A href="$cgiurl?m=g&c=$FORM{'c'}">ŋ߂̉ߋO</A> |
-  $bbslink |
-  </FONT>
+EOF
+if ($FORM{'linkline'}) {
+	require './config.pl';
+	&linklineoff;
+} else {
+	require './config.pl';
+	&linklineon;
+}
+print <<EOF;
   <HR>
   <FONT size="-1">$txtfollow : tH[eʕ\\ @ $txtauthor : eҌ\\ @ $txtthread : Xbh\\
   @@@őo^ : $logsave</FONT>
   <HR>
-  <FONT size="-1"><INPUT type="submit" name="reload" value="[h"></FONT>
+  <INPUT type="submit" name="reload" value="[h" accesskey="R">
+  <INPUT type="submit" name="zeload" accesskey="0" value="0">
+  <INPUT type="submit" name="meload" accesskey="Y" value="">
+  <a href="#bottom"></a>
   <INPUT type="hidden" name="p" value="$toppostid">
+  <INPUT type="hidden" name="multizilla" value="$FORM{'multizilla'}">
+  <INPUT type="hidden" name="newtitle" value="$FORM{'newtitle'}">
+  <INPUT type="hidden" name="target_blank" value="$FORM{'target_blank'}">
+  <INPUT type="hidden" name="targetlink" value="$FORM{'targetlink'}">
+  <INPUT type="hidden" name="gikoitsuoff" value="$FORM{'gikoitsuoff'}">
+$ks_param->{post}
 </FORM>
 EOF
-		
+
 	} else {
-		
+
 		# WetH[
-		$bbslink = qq#<A href="$cgiurl?m=o&c=$FORM{'c'}">Oǂݐp</A>#;
 		print <<EOF;
 <FORM method="$formmethod" action="$cgiurl">
   <INPUT type="hidden" name="m" value="p">
-  e <INPUT size="20" type="text" name="u" maxlength="30" value="$FORM{'u'}"><BR>
-  [ <INPUT size="30" type="text" name="i" maxlength="255" value="$FORM{'i'}"><BR>
-  薼 @<INPUT size="30" type="text" name="t" maxlength="40" value="$dtitle">
-  <INPUT type="submit" name="post" value="e^[h"> <INPUT type="reset" value=""><BR> <BR>
+  e <INPUT size="20" type="text" name="u" accesskey="1" maxlength="30" value="$FORM{'u'}"><BR>
+  [ <INPUT size="30" type="text" name="i" accesskey="2" maxlength="255" value="$FORM{'i'}"><BR>
+  薼 @<INPUT size="30" type="text" name="t" accesskey="3" maxlength="40" value="$dtitle">
+  <INPUT type="submit" name="post" value="e^[h" accesskey="R"> <INPUT type="reset" accesskey="K" value=""><BR> <BR>
   e <FONT size="-1"><I>
   iKɉsĂB^O͎g܂Beɓe{^ƃ[hɂȂ܂j
   </I></FONT><BR>
-  <TEXTAREA rows="5" cols="70" name="v">$dmsg</TEXTAREA><BR> <BR>
+  <TEXTAREA rows="5" cols="70" wrap="off" name="v" accesskey="4">$dmsg</TEXTAREA><BR> <BR>
   URL <FONT size="-1"><I>iNꂽꍇ͂ɋL܂j</I></FONT><BR>
-  <INPUT size="70" type="text" name="l" maxlength="255" value="$dlink">
+  <INPUT size="70" type="text" name="l" accesskey="5" maxlength="255" value="$dlink">
   $ptext
   <INPUT type="hidden" name="k" value="">
   <INPUT type="hidden" name="c" value="$FORM{'c'}">
 EOF
-		
+
 		if ( $FORM{'m'} ne 'f' && !$FORM{'f'} ) {
 			print <<EOF;
-  <P><FONT size="-1">\\ <INPUT size="6" type="text" name="d" value="$FORM{'d'}">
+  <P><FONT size="-1">\\ <INPUT size="6" type="text" name="d" accesskey="6" value="$FORM{'d'}">
   $gzipchk
-  @<FONT size="-1">URLN <INPUT type="checkbox" name="a" value="checked" $S_alchk[$autolink]></FONT>
-  @<INPUT type="submit" name="setup" value="̑̐ݒ"></FONT></P>
+  @<FONT size="-1">URLN <INPUT type="checkbox" name="a" accesskey="U" value="checked" $S_alchk[$autolink]></FONT>
+  @<FONT size="-1">LinksOFF <INPUT type="checkbox" name="linkline" accesskey="l" value="checked" $FORM{'linkline'}></FONT>
+  @<INPUT type="submit" name="setup" accesskey="C" value="ݒ"></FONT></P>$keikoku
   <FONT size="-1">$countdate  $counteriɂx$countlevelj$mbrcount</FONT>
   <HR>
-  <FONT size="-1">| 
-  <A href="$infopage">L</A> | 
-  <A href="$cgiurl?m=g&c=$FORM{'c'}">ŋ߂̉ߋO</A> |
-  $bbslink |
-  </FONT>
+EOF
+if ($FORM{'linkline'}) {
+	require './config.pl';
+	&linklineoff;
+} else {
+	require './config.pl';
+	&linklineon;
+}
+print <<EOF;
   <HR>
-  <FONT size="-1">$txtfollow : tH[eʕ\\ @ $txtauthor : eҌ\\ @ $txtthread : Xbh\\
-  @@@őo^ : $logsave</FONT>
+  <FONT size="-1">$txtfollow : tH[eʕ\\ @ $txtauthor : eҌ\\ @ $txtthread : Xbh\\ @ őo^ : $logsave</FONT>
   <HR>
-  <FONT size="-1"><INPUT type="submit" name="reload" value="[h"></FONT>
+  <INPUT type="submit" name="post" value="e^[h">
+  <INPUT type="submit" name="zeload" accesskey="0" value="0">
+  <INPUT type="submit" name="meload" accesskey="Y" value="">
+  <a href="#bottom"></a>
   <INPUT type="hidden" name="p" value="$toppostid">
+  <INPUT type="hidden" name="multizilla" value="$FORM{'multizilla'}">
+  <INPUT type="hidden" name="newtitle" value="$FORM{'newtitle'}">
+  <INPUT type="hidden" name="target_blank" value="$FORM{'target_blank'}">
+  <INPUT type="hidden" name="targetlink" value="$FORM{'targetlink'}">
+  <INPUT type="hidden" name="gikoitsuoff" value="$FORM{'gikoitsuoff'}">
+$ks_param->{post}
 </FORM>
 EOF
 		}
@@ -1219,34 +1310,35 @@
 ###############################################################################
 
 sub prtmain {
-	
+
 	my ( $prtmessage, $dispcount, @pkeystr, $msgmore, $msgnext, $cntnext );
 	my $dtitle = $_[0];
 	my $dmsg = $_[1];
 	my $dlink = $_[2];
-	
+
 	&loadmessage;
-	
+
 	$prtmessage = '';
-	
+
 	# ŐVPOSTID擾iO[hpj
 	$logdata[0] =~ /^.*,(.*),.*,.*,.*,.*,.*,.*,.*,.*/;
 	$toppostid = $1;
-	
+
 	# bZ[W\ݒ
-	if ( $FORM{'d'} == 0 ) {
+#	if ( $FORM{'d'} == 0 ) {
+	if ( ( $FORM{'d'} == 0 ) || ( $FORM{'meload'} ) ) {
 		$dispcount = $toppostid - $FORM{'p'};
 		$cntnext = $msgdisp;
 	} else {
 		$dispcount = $FORM{'d'};
 		$cntnext = $FORM{'d'};
 	}
-	
+
 	# \bZ[W쐬
 	$msgtop = $bmsg + $dispcount;
 	$msgtop = @logdata if ( $msgtop > @logdata );
 	$j = 0;
-	
+
 	if ( $FORM{'d'} == 0 && $reltype ) {
 		for ( $i = $msgtop - 1 ; $i >= $bmsg ; $i-- ) {
 			&getmessage ( $logdata[$i] );
@@ -1260,35 +1352,70 @@
 			$j++
 		}
 	}
+# ===  ===
+      # tree\
+      if ($FORM{'tree'}) {
+              require './sub/ks_treeview.pl';
+              $prtmessage = output_treeview($bmsg, $msgtop);
+      }
+# === ܂ ===
 	$bmsg++;
 	if ( $j > 0 ) {
 		$msgmore = "ȏ́Aݓo^ĂV$bmsgԖڂ$msgtopԖڂ܂ł̋LłB"
 	} else {
 		$msgmore = 'ǃbZ[W͂܂B';
+		# [ÔLƂ
+		$gikonekotoissho = '<FONT size="-1">[<A HREF="./gikonekoadd.cgi" target="link">[ÔLɂƂ΂</A>]</FONT>';
+
 	}
 	if ( $logdata[$msgtop] && $j > 0 ) {
+
+	# OǂݐpʁÃ[h̕sC
+	if ( $FORM{'m'} eq 'o' || $FORM{'m'} eq 'op' || $FORM{'rm'} eq 'o' ) {
+		$romnext='        <INPUT type="hidden" name="rm" value="o">';
+		$romreload='        <INPUT type="hidden" name="m" value="o">';
+	}
+
 		$msgnext = <<EOF;
 <TABLE>
   <TR>
     <TD>
-      <FORM method="$formmethod" action="$cgiurl">
+      <FORM method="$formmethod" action="$cgiurl">$romnext
         <INPUT type="hidden" name="m" value="n">
         <INPUT type="hidden" name="b" value="$msgtop">
         <INPUT type="hidden" name="u" value="$FORM{'u'}">
         <INPUT type="hidden" name="d" value="$cntnext">
         <INPUT type="hidden" name="c" value="$FORM{'c'}">
+        <INPUT type="hidden" name="linkline" value="$FORM{'linkline'}">
+        <INPUT type="hidden" name="multizilla" value="$FORM{'multizilla'}">
+        <INPUT type="hidden" name="newtitle" value="$FORM{'newtitle'}">
+	<INPUT type="hidden" name="target_blank" value="$FORM{'target_blank'}">
+	<INPUT type="hidden" name="targetlink" value="$FORM{'targetlink'}">
+	<INPUT type="hidden" name="gikoitsuoff" value="$FORM{'gikoitsuoff'}">
         <INPUT type="submit" name="pnext" value="̃y[W">
+$ks_param->{post}
       </FORM>
     </TD>
     <TD>
-      <FORM method="$formmethod" action="$cgiurl">
+      <FORM method="$formmethod" action="$cgiurl">$romreload
         <INPUT type="hidden" name="u" value="$FORM{'u'}">
         <INPUT type="hidden" name="p" value="$toppostid">
         <INPUT type="hidden" name="d" value="$FORM{'d'}">
         <INPUT type="hidden" name="c" value="$FORM{'c'}">
+        <INPUT type="hidden" name="linkline" value="$FORM{'linkline'}">
+        <INPUT type="hidden" name="multizilla" value="$FORM{'multizilla'}">
+        <INPUT type="hidden" name="newtitle" value="$FORM{'newtitle'}">
+	<INPUT type="hidden" name="target_blank" value="$FORM{'target_blank'}">
+	<INPUT type="hidden" name="targetlink" value="$FORM{'targetlink'}">
+	<INPUT type="hidden" name="gikoitsuoff" value="$FORM{'gikoitsuoff'}">
         <INPUT type="submit" name="reload" value="[h">
+	<INPUT type="submit" name="meload" accesskey="Y" value="">
+$ks_param->{post}
       </FORM>
     </TD>
+    <TD>
+	<a href="#top"></a>
+    </TD>
   </TR>
 </TABLE>
 EOF
@@ -1296,19 +1423,93 @@
 		$msgmore .= 'ȉ̋L͂܂B';
 		$msgnext = '';
 	}
-	
+
 	# Co
-	&prthtmlhead ( "$bbstitle" );
+	&prthtmlhead ( "$FORM{'newtitle'}" );
+
+	# Oǂ݉ʂŁAVKeւ̂Nǉ
+
+	if ( $FORM{'m'} eq 'o' || $FORM{'m'} eq 'op' ) {
+
+		# OǂݐptH[
+		$bbslink = qq#<A href="$cgiurl?c=$FORM{'c'}&$ks_param->{get}">W</A>#;
+		$shinkitoukou = "<A HREF=\"$cgiurl?c=100&d=-1&$ks_param->{get}\" target=\"link\">VKe</A>\n";
+
+	} else {
+
+		# WetH[
+		$bbslink = qq#<A href="$cgiurl?m=o&c=$FORM{'c'}&$ks_param->{get}">Oǂ݉</A>#;
+
+	}
+
+
+	# WAc[ÃNݒ
+	my $treelink;
+	my $treemode = $ks_param->get_param('tree');
+
+	if ($treemode) {
+	# c[[hȂ
+		$ks_param->set_param(tree => '');
+		$treelink = qq~<a href="$cgiurl?$ks_param->{get}">W\\</a>~;
+	} else {
+	# W[hȂ
+		$ks_param->set_param(tree => 'on');
+		$treelink = qq~<a href="$cgiurl?$ks_param->{get}">c[\\</a>~;
+	}
+	$ks_param->set_param(tree => $treemode);
+	# /
+
+
 	print <<EOF;
 <P>
-  <B><FONT size="+1">$bbstitle</FONT></B>
-  <FONT size="-1"><A href="$infopage">L</A></FONT>
-  <FONT size="-1"><A href="mailto:$adminmail">A</A></FONT>
+  <B><FONT size="+1">$FORM{'newtitle'}</FONT></B>
+  <FONT size="-1"><A href="$infopage">L</A>
+  A
+  <A href="mailto:$adminmail[9]">0</A>
+<!--  <A href="mailto:$adminmail[0]">1</A> -->
+  <A href="mailto:$adminmail[1]">2</A>
+  <A href="mailto:$adminmail[2]">3</A>
+  $bbslink
+  <a href="$icgi">ZANTEi-mode</a>
+  $treelink
+  $shinkitoukou
+  <a href="#bottom"></a></FONT>
 </P>
 EOF
-	
+
 	&prtform ( $dtitle, $dmsg, $dlink );
-	
+
+	if ( ( ! $FORM{'gikoitsuoff'} ) && ( $gikonekotoissho ) ) {
+
+	print <<EOF;
+<HR>
+
+$prtmessage
+
+<P><I><FONT size="-1">$msgmore</FONT></I>
+$gikonekotoissho</P>
+
+$msgnext
+<HR>
+
+EOF
+	# [ÔLƂ
+		require './gikoneko.pl';
+		&gikoneko;
+	print '<HR>';
+print <<EOF;
+
+<P align="right">$copyright
+</P>
+
+<a name="bottom"></a>
+
+</BODY>
+</HTML>
+EOF
+
+	} else {
+
 	print <<EOF;
 <HR>
 
@@ -1319,13 +1520,17 @@
 $msgnext
 <HR>
 
-<P align="right">
-<FONT size="-1"><A href="http://kuzuha.tripod.co.jp/">͂Ղ</A> Rev.0.1 Preview 9</FONT>
+<P align="right">$copyright
 </P>
 
+<a name="bottom"></a>
+
 </BODY>
 </HTML>
 EOF
+
+	}
+
 }
 
 
@@ -1334,8 +1539,9 @@
 ###############################################################################
 
 sub refcustom {
-	
+
 	if ( $FORM{'c'} ) {
+		# lݒURLƌ݊ۂ
 		if ( length ( $FORM{'c'} ) == 33  ) {
 			$FORM{'c'} =~ /^(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w)(\w)(\w)$/;
 			$CC{'text'} = $1;
@@ -1343,10 +1549,23 @@
 			$CC{'link'} = $3;
 			$CC{'vlink'} = $4;
 			$CC{'qmsgc'} = $5;
-			$CC{'subj'} = $CC{'text'};
-			$i = hex ( $6 );
-			$j = hex ( $7 );	# \
-			$k = hex ( $8 );	# \
+			$CC{'subj'} = $subjc;#$CC{'text'};
+			$i = hex ( $7 );
+			$j = hex ( $8 );	# \
+			$k = hex ( $9 );	# \
+		}
+		elsif ( length ( $FORM{'c'} ) == 39  ) {
+			$FORM{'c'} =~ /^(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w\w\w\w\w\w)(\w)(\w)(\w)$/;
+			$CC{'text'} = $1;
+			$CC{'bg'} = $2;
+			$CC{'link'} = $3;
+			$CC{'vlink'} = $4;
+			$CC{'qmsgc'} = $5;
+			$CC{'subj'} = $6;
+			#$CC{'subj'} = $subjc;#$CC{'text'};
+			$i = hex ( $7 );
+			$j = hex ( $8 );	# \
+			$k = hex ( $9 );	# \
 		} elsif ( length ( $FORM{'c'} ) == 3  ) {
 			$FORM{'c'} =~ /^(\w)(\w)(\w)$/;
 			$CC{'text'} = $textc;
@@ -1379,8 +1598,8 @@
 	$i = sprintf ( "%x", $autolink + $followwin * 2 + $reltype * 4 + $gzipu * 8 );
 	$j = 0;
 	$k = 0;
-	
-	if ( 
+
+	if (
 	  ( $CC{'text'} eq $textc ) &&
 	  ( $CC{'bg'} eq $bgc ) &&
 	  ( $CC{'link'} eq $linkc ) &&
@@ -1389,7 +1608,7 @@
 	  ( $CC{'subj'} eq $subjc ) ) {
 		$FORM{'c'} = "$i$j$k";
 	} else {
-		$FORM{'c'} = "$CC{'text'}$CC{'bg'}$CC{'link'}$CC{'vlink'}$CC{'qmsgc'}$i$j$k";
+		$FORM{'c'} = "$CC{'text'}$CC{'bg'}$CC{'link'}$CC{'vlink'}$CC{'qmsgc'}$CC{'subj'}$i$j$k";
 	}
 }
 
@@ -1398,12 +1617,25 @@
 #  C
 ###############################################################################
 
+
 &getformdata;
 &jconv;
 &getenv;
 &getcookie if ( $cookie );
 $nowtime = time - $difftime * 60 * 60;
 
+
+# p[^Ǘ̂߂$ks_param𐶐
+# $ks_param->{post} <form>p
+# $ks_param->{get}  ɃNp̃p[^Ă܂
+require './sub/ks_param.pl';
+$ks_param = ks_param->new->set_param(
+	tree			=> $FORM{tree},
+	color_newmsg	=> $FORM{color_newmsg},
+	color_branch	=> $FORM{color_branch},
+);
+
+
 if ( $FORM{'m'} eq 'c' ) {
 	require './sub/bbscust.pl';
 	&setcustom;
@@ -1434,7 +1666,8 @@
 	&adminmain;
 	exit;
 }
-if ( !$adminpost ) {
+
+if ( ( !$adminpost[0] ) || ( !$adminpost[1] ) || ( !$adminpost[2] ) ) {
 	require './sub/bbsadmin.pl';
 	&setpass;
 	exit;
@@ -1448,15 +1681,24 @@
 }
 
 # \ݒ
-if ( $FORM{'d'} ne '' ) {
-	if ( $FORM{'d'} > $logsave ) {
-		$FORM{'d'} = $logsave;
-	}
-} else {
-	$FORM{'d'} = $msgdisp;
-}
+
+     if ($FORM{'zeload'}) {
+
+             $FORM{'d'} = 0;
+     } elsif ( $FORM{'d'} ne '' ) {
+             if ( $FORM{'d'} > $logsave ) {
+                     $FORM{'d'} = $logsave;
+             }
+     } else {
+             $FORM{'d'} = $msgdisp;
+     }
 
 if ( $FORM{'m'} eq 'p' && $FORM{'v'} && !$FORM{'reload'} ) {
+
+if ( ($anonyproxylimit) && ($anonyproxyflg) ) {
+&prterror ( '݁Aproxyϐo͂zXgɂ̓ANZXĂ܂B' );
+}
+
 	$postid = 0;
 	$posterr = 0;
 	if ( $ENV{'CONTENT_TYPE'} eq 'application/x-www-form-urlencoded' ) {
@@ -1466,9 +1708,9 @@
 		$posterr = 255;
 	}
 	if ( $FORM{'ac'} || ( $FORM{'f'} && !$followwin ) ) {
-		&prthtmlhead ( "$bbstitle ݊" );
+		&prthtmlhead ( "$FORM{'newtitle'} ݊" );
 		print <<EOF;
-<H1>݊</H1>
+<H1><a href="$cgiurl?$ks_param->{get}">݊</a></H1>
 </BODY>
 </HTML>
 EOF
