#!/usr/local/bin/perl
# ↑たいていは「#!/usr/local/bin/perl」デス
#                                                                 +------------+
#  トピックフロート型掲示板doBBS表示スクリプト                    | dobbsr.cgi |
#-----------------------------------------------------------------+------------+
$version ='v20020713';

require "./dobbsi.pl";

#----- ドコモ端末からのアクセスを飛ばす
if($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo\//){
	print "Location: $dobbsk_url\n\n";
}



##### ヘッダの出力(gzip圧縮転送設定含む(ヘタにいぢらないで))
	if($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/ && $gzip ne ''){
		$|=1;
		print "Content-type: text/html;charset=$charset\n";
		if($ENV{'HTTP_ACCEPT_ENCODING'}=~/x-gzip/){
			print "Content-encoding: x-gzip\n\n";
		}else{
			print "Content-encoding: gzip\n\n";
		}
		open(STDOUT,"| $gzip -1 -c");
	}else{
		print "Content-type: text/html;charset=$charset\n\n";
	}

##### HTMLヘッダ出力
&html_header();

##### アクションによる分岐
$a = $IN{'a'};

# トップページ表示(ダイジェスト)
if($a eq ''){

	##### 連続リロード回避
	$t = time;
	if($COOKIE{'rltime'} > $t - $unrl_time){ &error("連続更新(リロード)は控えてください。","$unrl_time秒は更新(リロード)できません。","
<FORM METHOD=\"post\">ゼロになったらリロードして下さい→<INPUT NAME=\"cd\" SIZE=\"5\"></form>
<SCRIPT LANGUAGE=\"JavaScript\">
<!--
var cds = $unrl_time + 1;
function cd() {
	setTimeout('cd()', 1000); // 1000msec = 1sec
	cds--;
	if(cds < 0){ cds = 0; }
	document.forms[0].elements[0].value = \" \" + cds;
}
cd();
// -->
</SCRIPT>
"); }

	if($ENV{'QUERY_STRING'} eq ''){
		print <<"_HTML_";
<!-- アクセス解析のHTMLはここに貼り付けるといいよ！-->
<img src="http://www.mis.ne.jp/~yakthyme/kaiseki/hana_page.cgi?id=bbs&type=main">

_HTML_
	}

	# 書き込みテスト用掲示板へのリンクは消去しないでください。
	print "<br>$top_title_part<p>$rule_part<br><a href=\"$dobbsr_url?a=rule\" target=\"_blank\">■ガイドラインの詳細</a>　<a href=\"http://www.bayashi.net/st/cgi-bin/dobbs/dobbsr.cgi\" target=\"_blank\">■書き込みテスト用掲示板はこちら</a></font></ul></td></tr></table></td></tr></table><p></center>";#　
	&top_view();
}

	# 記事表示
	elsif($a eq 'view'){ &view(); }

	# トピック一覧表示
	elsif($a eq 'vat'){ &put_topics_list($max_topics_num,'all'); }

	# 新規トピックの作成フォーム表示
	elsif($a eq 'v_topic'){ &v_topic_form(); }

	# ガイドライン詳細表示
	elsif($a eq 'rule'){
		print "<br>$top_title_part<p>$rule_part$rule_part2</font></td></tr></table></td></tr></table><p></center>";
	}
	# リンクだったら飛ばす
	elsif($a eq 'lnk' && $IN{'url'} =~ /(s?https?:\/\/([-_\.!~\*'\(a-zA-Z0-9;\/\?:\@&=\+\$,%#]+))/){
		&lnk();
	}


##### フッターを表示
&foot();

##### 終了
exit(0);





#===============================================================================




#-------------------------------------------------------------------------------
##### トップページ表示サブルーチン
sub top_view {

	my(@topics,@ress,$topic_title,$loop_nb);

	print "<a name=\"top\" class=\"na\">";
	#----- 新規トピック作成リンク表示 -----
	&make_new_topic();
	#----- トピックリスト表示 -----
	&put_topics_list($put_topics_v_num,'');

	#----- 各トピックの表示 -----
	if(-e $topics_path && -s $topics_path){

		#----- $topics_pathがあるのでダイジェスト表示 -----
		# ダイジェスト表示するトピックスリストの取得
		open(TP,"<$topics_path") ||  &error("トピックリストファイルが開けましぇん。");
		$topics_n = 0;
		$topics_n++ while(<TP>);
		seek(TP,0,0);
		#----- ダイジェスト表示するトピックごとのループ開始
		my $loop = 0;
		foreach $topic (<TP>){
			$loop++;
			if($loop > $put_topics_num){ last; }
			chomp($topic);
			#----- topic_idを取り出す
			($topic_id,$topic_title,$name,$res_num,$last_v_time) = split(/\t/,$topic);
			#----- ここからレスの表示準備
			if(-e "$tbox$topic_id$file_uniq_char\.cgi"){
				#----- 記事の表示するスタート位置と表示件数を求める
				my $put_start_res_num = $res_num - $put_res_num + 2;
				if($put_start_res_num < 2){ $put_start_res_num = 2; }
				my $start_res_num = $put_start_res_num;
				if($res_num < $put_res_num){ $loop_res_num = $res_num; }else{ $loop_res_num = $put_res_num; }
				#----- 記事データを取得する
				open(RS,"<$tbox$topic_id$file_uniq_char\.cgi") ||  &error("レスファイルが開けましぇん。");
				#----- 記事内の表示ループ

				if($loop > 1){ $loop_nb = $loop - 1; $nb = "<a href=\"$dobbsr_url#"."$loop_nb\">▲</a>"; }
				if($loop < $topics_n){ $loop_nb = $loop + 1; $nb = "$nb <a href=\"$dobbsr_url#"."$loop_nb\">▼</a>"; }
				my $rloop = 0;
				foreach $res (<RS>){
					$rloop++;
					if($rloop != 1 && $rloop < $start_res_num){ next; }
					if($rloop == 1){ ($res_id,$topic_title,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); $topic_title =~ s/&amp;\$(\d+);/【絵】/g; }else{ ($res_id,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); }

					#----- 出力データの成形処理
					&pdatas($topic_id,$rloop);

					#----- トピック記事の表示
					if($rloop == 1){
						print <<"_HTML_";
<p>
<a name="$loop" class="na">
<center>
<table border=0 cellspacing=0 cellpadding=4 bgcolor="$palette_dark" width=94%><tr align="top">
<td align="left">
	<table border=0 cellspacing=0 cellpadding=0 bgcolor="$palette_back" width=100%><tr align="top">
	<td align="left">
	<table border=0 cellspacing=0 cellpadding=4 width=100% bgcolor="$palette_back"><tr><td bgcolor="$palette_topic_back">
		<font size=-1>[1:$res_num]　</font><font size=+1 color="$palette_topic"><b>$topic_title</b></font><br>
	</td></tr>
	<tr><td>
		<font size=-1 color="$palette_type_light">&nbsp;1 ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min $info</font><br>
	</td></tr>
	<tr><td>
		<DL><dd>$put_line</DL>
	</td></tr>
	<tr><td align="right">
		<font size=-1>[<a href="$dobbsr_url?a=view&topic_id=$topic_id" target="_blank">全レス表示</a>] [<a href="$dobbsr_url?a=view&topic_id=$topic_id&res_id=l$last_put_res" target="_blank">最新$last_put_res</a>] [<a href="$dobbsr_url?a=view&topic_id=$topic_id&res_id=-100" target="_blank">1-100</a>] [<a href="$dobbsr_url#top">■トピックリストへ</a>] $nb &nbsp;</font>
	</td></tr>
	</table>
<hr>
_HTML_
					}else{
					#----- レス記事の表示
					print <<"_HTML_";
<center>
	<table border=0 cellspacing=0 cellpadding=6 width=100% bgcolor="$palette_back"><tr><td>
		<DL><dt><font size=-1 color="$palette_type_light">&nbsp;$put_start_res_num ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min  $info<br></font><dd>$put_line
</DL></td></tr></table>
_HTML_
					if($rloop != $res_num){ print "<hr size=0 width=95%>"; }
					$put_start_res_num++;
					} # close if($rloop == 1)
				} # foreach $res (<RS>)
				close(RS);

				#----- レス表示ループ終了後の処理
				print <<"_HTML_";
<p align="right">
<font size=-1>[<a href="$dobbsr_url?a=view&topic_id=$topic_id" target="_blank">全レス表示</a>] [<a href="$dobbsr_url?a=view&topic_id=$topic_id&res_id=l$last_put_res" target="_blank">最新$last_put_res</a>] [<a href="$dobbsr_url?a=view&topic_id=$topic_id&res_id=-100" target="_blank">1-100</a>] [<a href="$dobbsr_url#top">■トピックリストへ</a>] $nb &nbsp;</font>
</p>
_HTML_
				#----- レス数による警告表示
				if($res_num == $max_res_num){
					print "<font color=\"#ff6666\">レスが最大件数に達しました。レスはできません。</font><br>";
				}elsif($put_start_res_num > $max_res_num-10){
					print "<font color=\"#ff6666\">レスが最大件数($max_res_num)に近づいています。</font><br>";
				}
				#----- 返信フォーム表示
				if($res_num < $max_res_num){ &v_res_form($topic_id); }else{ print "<br>"; }
				print "</td></tr></table></td></tr></table></center><p>";

			} # if(-e "$tbox$topic_id$file_uniq_char\.cgi")

		} # close foreach $topic (@topics)
		close(TP);

	}else{
		#----- $topics_pathがないので間を空ける -----
		print "<p>";

	} # close if(-e $topics_path && -s $topics_path)

	#----- 新規トピック作成リンク表示
	&make_new_topic();

} # close sub top_view


#-------------------------------------------------------------------------------
##### 全レス表示＆特定番号レス表示サブルーチン
sub view {

	# 全レス表示
	if($IN{'res_id'} eq ''){

		print "<DL><dt><font size=-1>[<a href=\"$dobbsr_url\">掲示板に戻る</a>]</font><p>";

		# レスを読み込んで表示
			if(-e "$tbox$IN{'topic_id'}$file_uniq_char\.cgi"){
				open(RD,"<$tbox$IN{'topic_id'}$file_uniq_char\.cgi") ||  &error("レスファイルが開けましぇんわ。");
				$res_n = 0;
				$res_n++ while(<RD>);
				seek(RD,0,0);
				$i = 0;
				foreach $res (<RD>){
					$i++;
					if($i > 1){ ($res_id,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); }
						else{ ($res_id,$topic_title,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); $topic_title =~ s/&amp;\$(\d+);/【絵】/g; }
					if($i > 2){ print "<dt><hr size=0 width=95%>"; }

					# レス番号が１の時はトピックタイトル表示
					if($i == 1){
						$res_num = $res_n;
						print <<"_HTML_";
<a name="$i" class="na">
<table border=0 cellspacing=0 cellpadding=4 width=100% bgcolor="$palette_topic_back"><tr><td>
	<font size=-1>[1:$res_num]　</font><font size=+1 color="$palette_topic"><b>$topic_title</b></font><br>
</td></tr></table>
<dt><font size=-1 color="$palette_type_light">$i
_HTML_
					}else{ print "<a name=\"$i\" class=\"na\"><dt><font size=-1 color=\"$palette_type_light\">$i"; }

					&pdatas($IN{'topic_id'},$i);

					print " ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min $info<br></font><dd>$put_line";

					if($IN{'admin'} == 1 && $i > 1 && $name ne $delete_msg && $txt ne $delete_msg && $ua ne $delete_msg && $host ne $delete_msg){
						print <<"_HTML_";
<p align="right">
<form action="$dobbsm_url?a=rmres" method=POST>
<input type="hidden" name="topic" value="$IN{'topic_id'}">
<input type="hidden" name="res" value="$res_id">
パスワード <input type="password" name="pswd" size=8>
<input type="submit" value="$iの削除">
</form>
</p>
_HTML_
					}elsif($IN{'admin'} == 1 && $i == 1){
						print <<"_HTML_";
<p align="right">
<form action="$dobbsm_url?a=rmtopic" method=POST>
<input type="hidden" name="topic" value="$IN{'topic_id'}">
パスワード <input type="password" name="pswd" size=8>
<input type="submit" value="トピックごと削除">
</form>
</p>
_HTML_
					}

					if($i == 1){ print "<dt><hr>"; }

				} # close foreach (<RD>)

					print "</DL>";

					# 返信フォーム表示
					if($res_n < $max_res_num){ &v_res_form($IN{'topic_id'}); }else{ print "<br>"; }

			}else{ &error("トピックが見つかりません。","トピックが削除されたか","はたまた不正なアドレス指定で実行されたか。","1ページ戻ってリロードしてみて。"); }

		# ↑ 全レス表示処理終了
		#---------------------------------------------------------------------------
		# ↓範囲指定 ( ex. 1-100 ) レス表示サブルーチン

		}elsif($IN{'res_id'} =~ /^(\d+)?\-(\d+)$/){

			$start_res = $1;
			if($start_res eq ''){ $start_res = 1; }
			$end_res = $2;
			if($start_res > $end_res){ $start_res = $2; $end_res = $1; }
			print "<DL><dt><font size=-1>[<a href=\"$dobbsr_url\">掲示板に戻る</a>]</font><p>";
			if(-e "$tbox$IN{'topic_id'}$file_uniq_char\.cgi"){
				open(RD,"<$tbox$IN{'topic_id'}$file_uniq_char\.cgi") ||  &error("レスファイルが開けましぇんわー。");
				$res = 0;
				$res++ while(<RD>);
				if($start_res > $res){ close(RD); &error('無効な範囲指定です。','レスが存在しないので表示できません。'); }
				seek(RD,0,0);
				$res_num = 0;
				foreach (<RD>){
					$res_num++;
					if(($res_num >= $start_res && $res_num <= $end_res) || $res_num == 1){
						#----- 特定範囲の出力
						if($res_num > 1){ ($res_id,$name,$mail,$host,$ua,$txt) = split(/\t/,$_); }else{ ($res_id,$topic_title,$name,$mail,$host,$ua,$txt) = split(/\t/,$_); $topic_title =~ s/&amp;\$(\d+);/【絵】/g; }
						&pdatas($IN{'topic_id'},$res_num);
						# レス番号が１の時はトピックタイトル表示
						if($res_num == 1){
							print <<"_HTML_";
<table border=0 cellspacing=0 cellpadding=4 width=100% bgcolor="$palette_topic_back"><tr><td>
	<font size=-1>[1:$res]　</font><font size=+1 color="$palette_topic"><b>$topic_title</b></font><br>
</td></tr></table>
<dt><font size=-1 color="$palette_type_light">
_HTML_

						}else{
							if($res_num == 2 || $start_res == $res_num){ print "<dt><hr>"; }elsif($res_num > 2 && $res_num != $start_res){ print "<dt><hr size=0>"; }
						print "<font size=-1 color=\"$palette_type_light\">$res_num";
						}
						#----- 記事の表示
						print <<"_HTML_";
 ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min  $info<br></font>
<dd>$put_line
_HTML_
						if($res_num == 1 || $res_num == $end_res || $res_num == $res){
							print <<"_HTML_";
<dt><table width=100%><tr><td align="right">
<font size=-1>
[<a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}">全レス表示</a>]
_HTML_
							$i = 1;
							while($i < $res && $res > $page_put_res){
								$i += $page_put_res;
								$j = $i - $page_put_res;
								print " [<a href=\"$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&res_id=$j-$i\" target=\"_top\">$j-</a>] ";
							}
							print <<"_HTML_";
 [<a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&res_id=l$last_put_res" target="_top">最新$last_put_res</a>]</font>
</td></tr></table>
_HTML_
						}

					} # close if($res_num > $start_num && $res_num < $end_res)
				} # close foreach (<RD>)
				close(RD);
				print "</DL>";

					#----- 返信フォーム表示
					&v_res_form($IN{'topic_id'});

			}else{ &error("トピックが見つかりません。","トピックが削除されたか","はたまた不正なアドレス指定で実行されたか。","1ページ戻ってリロードしてみて。"); }

		# ↑ 範囲指定表示処理終了
		#---------------------------------------------------------------------------
		# ↓ラストレス ( ex. l$last_put_res ) 表示サブルーチン

		}elsif($IN{'res_id'} =~ /^l(\d+)$/){

			if($1 <= $last_put_res && $1 > 1){ $last_put_res = $1; }
			print "<DL><dt><font size=-1>[<a href=\"$dobbsr_url\">掲示板に戻る</a>]</font><p>";
			if(-e "$tbox$IN{'topic_id'}$file_uniq_char\.cgi"){
				open(RD,"<$tbox$IN{'topic_id'}$file_uniq_char\.cgi") ||  &error("レスファイルが開けましぇんわー。");
				$res = 0;
				$res++ while(<RD>);
				$end_res = $res;
				$start_res = $end_res - $last_put_res + 1;
				seek(RD,0,0);
				$res_num = 0;
				foreach (<RD>){
					$res_num++;
					if(($res_num >= $start_res && $res_num <= $end_res) || $res_num == 1){
						#----- 特定範囲の出力
						if($res_num > 1){ ($res_id,$name,$mail,$host,$ua,$txt) = split(/\t/,$_); }else{ ($res_id,$topic_title,$name,$mail,$host,$ua,$txt) = split(/\t/,$_); $topic_title =~ s/&amp;\$(\d+);/【絵】/g; }
						&pdatas($IN{'topic_id'},$res_num);
						# レス番号が１の時はトピックタイトル表示
						if($res_num == 1){
							print <<"_HTML_";
<table border=0 cellspacing=0 cellpadding=4 width=100% bgcolor="$palette_topic_back"><tr><td>
	<font size=-1>[1:$res]　</font><font size=+1 color="$palette_topic"><b>$topic_title</b></font><br>
</td></tr></table>
<dt><font size=-1 color="$palette_type_light">
_HTML_

						}else{
							if($res_num == 2 || $start_res == $res_num){ print "<dt><hr>"; }elsif($res_num > 2 && $res_num != $start_res){ print "<dt><hr size=0>"; }
						print "<font size=-1 color=\"$palette_type_light\">$res_num";
						}
						#----- 記事の表示
						print <<"_HTML_";
 ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min  $info<br></font>
<dd>$put_line
_HTML_
						if($res_num == 1 || $res_num == $end_res || $res_num == $res){
							print <<"_HTML_";
<dt><table width=100%><tr><td align="right">
<font size=-1>
[<a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}">全レス表示</a>]
_HTML_
							$i = 1;
							while($i < $res && $res > $page_put_res){
								$i += $page_put_res;
								$j = $i - $page_put_res;
								print " [<a href=\"$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&res_id=$j-$i\" target=\"_top\">$j-</a>] ";
							}
							print <<"_HTML_";
</font>
</td></tr></table>
_HTML_
						}

					} # close if($res_num > $start_num && $res_num < $end_res)
				} # close foreach (<RD>)
				close(RD);
				print "</DL>";

					#----- 返信フォーム表示
					&v_res_form($IN{'topic_id'});

			}else{ &error("トピックが見つかりません。","トピックが削除されたか","はたまた不正なアドレス指定で実行されたか。","1ページ戻ってリロードしてみて。"); }

		# ↑ ラストレス ( ex. l$last_put_res ) 表示サブルーチン
		#---------------------------------------------------------------------------
		# ↓特定のレスを表示

		}else{

			print "<DL><dt><font size=-1>[<a href=\"$dobbsr_url\">掲示板に戻る</a>]</font><p>";
			if(-e "$tbox$IN{'topic_id'}$file_uniq_char\.cgi"){
				#----- レスデータの読み込み
				open(RD,"<$tbox$IN{'topic_id'}$file_uniq_char\.cgi") ||  &error("レスファイルが開けましぇんね。");
				$res_num = 0;
				$res_num++ while(<RD>);
				if($res_num < $IN{'res_id'} || $IN{'res_id'} < 1 || $IN{'res_id'} !~ /^(\d+)$/){ close(RD); &error('ご指定のレスはないれす。'); }
				seek(RD,0,0);
				foreach(1..$IN{'res_id'}){ $res = <RD>; }
				close(RD);
				#----- 出力データの成形
				$res_id_num = int($IN{'res_id'});
				if($res_id_num > 1){ ($res_id,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); }else{ ($res_id,$topic_title,$name,$mail,$host,$ua,$txt) = split(/\t/,$res); $topic_title =~ s/&amp;\$(\d+);/【絵】/g; }
				&pdatas($IN{'topic_id'},$res_id_num);

				# レス番号が１の時はトピックタイトル表示
				if($res_id_num == 1){
					print <<"_HTML_";
<table border=0 cellspacing=0 cellpadding=4 width=100% bgcolor="$palette_topic_back"><tr><td>
	<font size=-1>[1:$res_num]　</font><font size=+1 color="$palette_topic"><b>$topic_title</b></font><br>
</td></tr></table>
<dt><font size=-1 color="$palette_type_light">
_HTML_

				}else{
					#----- レスの時は番号のみ表示
					print "<dt><font size=-1 color=\"$palette_type_light\">$res_id_num";
				}
				#----- 記事の表示
				print <<"_HTML_";
 ナマエ：<b>$name</b>$year/$mon/$mday($youbij) $hour:$min  $info<br></font>
<dd>$put_line</DL>
_HTML_

				print <<"_HTML_";
<dt><table width=100%><tr><td align="right">
<font size=-1>
[<a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}">全レス表示</a>]
_HTML_
				$i = 1;
				while($i < $res_num && $res_num > $page_put_res){
					$i += $page_put_res;
					$j = $i - $page_put_res;
					print " [<a href=\"$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&res_id=$j-$i\" target=\"_top\">$j-</a>] ";
				}
				print <<"_HTML_";
 [<a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&res_id=l$last_put_res" target="_top">最新$last_put_res</a>]</font>
</td></tr></table>
_HTML_

				#----- 返信フォーム表示
				&v_res_form($IN{'topic_id'});

			}else{ &error("トピックが見つかりません。","トピックが削除されたか","はたまた不正なアドレス指定で実行されたか。","1ページ戻ってリロードしてみて。"); }

		} # close if($IN{'res_id'} eq '')

} # close view sub



#-------------------------------------------------------------------------------
##### トピックリスト表示サブルーチン -------------------------------------------
sub put_topics_list {

	my($loop,$put) = @_;
	my($i,$j,$k,$bgcolor,$topic,$tn);

	#----- トピック一覧ならガイド表示
	if($put eq 'all'){
		if($ptlm eq 't'){ $i = "a"; }else{ $i = "t" }
		print <<"_HTML_";
<font size=-1>[<a href="$dobbsr_url?&ptlm=$ptlm">掲示板に戻る</a>]</font>
<p align="right">[<a href="$dobbsr_url?a=vat&ptlm=$i">表示モード切り替え</a>]</p>
_HTML_
	}

	if($ptlm eq 't'){ $i = 0; }else{ $i = 6; }
	print <<"_HTML_";
<center>
<a name="top" class="na">
<table border=0 cellspacing=0 cellpadding=4 bgcolor="$palette_dark" width=94%><tr align="top">
<td align="left">
	<table border=0 cellspacing=0 cellpadding=$i bgcolor="$palette_topic_back" width=100%><tr align="top">
	<td align="left" style="line-height: 125%">
_HTML_

	if(!(-e $topics_path && -s $topics_path)){ print "トピックはありません。"; $j = 1; }
		else{
			if($ptlm eq 't'){
			print <<"_HTML_";
		<table border=0 cellspacing=0 cellpadding=3 bgcolor="$palette_back" width=100%><tr align="top" bgcolor="$palette_topic_back">
		<td align="center" nowrap>No</td><td>トピックタイトル</td><td>投稿者名</td><td align="center" nowrap><font size=-1>レス</font></td><td>最終投稿日</td></tr>
_HTML_
			}

			#----- リスト表示用データ取得
			open(TP,"<$topics_path") || &error('トピックリストファイルが開けましぇん。');
			$tn = 0;
			$tn++ while(<TP>);
			seek(TP,0,0);
			#----- リスト表示ループ開始
			$i = 0;
			foreach $topic (<TP>){
				$i++;
				if($put ne 'all' && $i > $loop){ last; }
				if($topic ne ''){
					chomp($topic);
					($topic_id,$topic_title,$name,$res_num,$last_v_time) = split(/\t/,$topic);
					if($name eq ''){ $name = $noname; }else{ $name =~ s/&amp;\$(\d+);/【絵】/g; }
					$topic_title =~ s/&amp;\$(\d+);/【絵】/g;
					if($i-1 < $put_topics_num && $put ne 'all'){
						# ページ内リンク
						$k = "<a href=\"$dobbsr_url#$i\">";
					}else{
						# ページ外リンク
						$k = "<a href=\"$dobbsr_url?a=view&topic_id=$topic_id&res_id=l$last_put_res\" target=\"_blank\">";
					}

					#----- 縦リスト表示
					if($ptlm eq 't'){
						if($bgcolor eq "$palette_light"){ $bgcolor = "$palette_back"; }else{ $bgcolor = "$palette_light"; }
						my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst,$youbi,$youbij) = &dtime($last_v_time);
						print "<tr bgcolor=\"$bgcolor\"><td align=\"center\"><a href=\"$dobbsr_url?a=view&topic_id=$topic_id&res_id=l$last_put_res\" target=\"_blank\">$i</a></td><td><font size=-1>$k$topic_title</a></font></td><td nowrap><font size=-1>$name</font></td><td align=\"center\">$res_num</a></td><td nowrap><font size=-1>$year/$mon/$mday($youbij)$hour:$min</font></a></td></tr>";

					}else{

						print "<a href=\"$dobbsr_url?a=view&topic_id=$topic_id&res_id=l$last_put_res\" target=\"_blank\">$i</a>\:$k$topic_title($res_num)</a>　";
						if($i == $big_put_num){ print "<font size=-1>"; }

					} # if($ptlm eq 't')

				}

			} # close foreach (<TP>)
			close(TP);

			if($ptlm eq 't'){ print "</table>"; }

			#----- 過去ログコンテナリンク出力？！
			print "</td></tr><tr><td align=\"right\">";
			$k = 0;
			foreach (@containers){
				$k++;
				if(-e "$_\index\.html" && $_ ne ''){
					print <<"_HTML_";
	<font size=-1>■<a href="$_" target="_blank"><b>コンテナ$k</b></a>　</font>
_HTML_
				}
			}


	} # -e $topics_path else

	if($put ne 'all' && $j != 1){
		if($ptlm eq 't'){ $j = "a"; }else{ $j = "t" }
		print <<"_HTML_";
	</td></tr>
	<tr><td align="right">
	<font size=-1>[<a href="$dobbsr_url?a=vat&ptlm=$ptlm">全$tnトピックの一覧表示</a>] [<a href="$dobbsr_url?ptlm=$j">表示モード切り替え</a>]</font>
_HTML_
	}

	print "</td></tr></table>	</td></tr></table></center>";

	if($put eq 'all'){
		if($ptlm eq 't'){ $j = "a"; }else{ $j = "t" }
		print <<"_HTML_";
</table>
<p align="right">
[<a href="$dobbsr_url?a=vat&ptlm=$j">表示モード切り替え</a>]
</p>
_HTML_
	}


} # close put_topic_list sub


#-------------------------------------------------------------------------------
##### 新規トピック作成リンク出力 -----------------------------------------------
sub make_new_topic {

		print <<"_HTML_";
<center>
<table border=0 cellspacing=0 cellpadding=4 bgcolor="$palette_dark"><tr align="top"><td align="left">
	<table border=0 cellspacing=0 cellpadding=6 bgcolor="$palette_back" width=100%><tr align="top"><td align="left" style="line-height: 125%">
_HTML_

	if($no_make_topic){
		print "新規トピック作成禁止中です。";
	}else{
		print "→ <a href=\"$dobbsr_url?a=v_topic\" target=\"_top\">新規トピックの作成</a> ←";
	}

	print "</td></tr></table>	</td></tr></table>	</center><p>";

} # close make_new_topic sub


#-------------------------------------------------------------------------------
##### フッター表示 -------------------------------------------------------------
sub foot {

	if(($IN{'a'} eq 'view' && $IN{'res_id'} eq '') && $IN{'admin'} != 1){
		print <<"_HTML_";
<p align="right"><font size=-1><a href="$dobbsr_url?a=view&topic_id=$IN{'topic_id'}&admin=1">●管理モード</a></font></p>
_HTML_
	}elsif(($IN{'a'} eq 'view' && $IN{'res_id'} eq '') || $IN{'a'} eq ''){
		print <<"_HTML_";
<p align="right"><font size=-1><a href="$dobbsm_url">◎管理フォーム</a></font></p>
_HTML_
	}

# 著作権表示です。必ずご表示いただけるようお願いします。
	print <<"_HTML_";
<center><hr><font size=-1><a href="http://www.bayashi.net/st/" target="_top">doBBS dobbsr.cgi $version</a></font></center>
</body></html>
_HTML_

} # close sub foot





#-------------------------------------------------------------------------------
#               Copyright (c) 2001-CurrentYear bayashi.net. All rights reserved.
#                                                     http://www.bayashi.net/st/
#                                                                 ok@bayashi.net
