(1)ならhtml_logでこんな感じ?
$maxはどっかで決めといてね

# テーブル表示するループ
foreach(@data){
 # 略
 if($reno eq ""){
  if($topic_num){
   $res_count_list{$topic_num} = $res_count; # <= 追加
   print "<a href=\"#topic_$topic_num\">[<b>$topic_num</b>] : $topic($res_count)</a> \n";
 # 略
}
$res_count_list{$topic_num} = $res_count; # <= 追加
print "<a href=\"#topic_$topic_num\">[<b>$topic_num</b>] : $topic($res_count)</a> \n"
 if($topic_num);

# スレ表示するループ
foreach(@data){
 # 略
 if (!$reno) {
  if ($res_count_list{$no} <= $max) { # <= 追加
   print "<form action=\"$script\" method=$method>\n";
   print "<input type=hidden name=mode value=res>\n";
   print "<input type=hidden name=no value=$no>\n";
   print "<input type=submit value='返信'></td></form>\n";
  }
 }
 # 略
}