#!/usr/local/bin/perl # FlasH BBS Pro version 1.41 # # Script written by Shigeto Nakazawa.(1997/1/17) # < http://www7.big.or.jp/~jawa/ > # This script is free. # ////////////////////////////////////////////////////////// # // オプションの設定変更はここから始まります。 // # ////////////////////////////////////////////////////////// # ---------------------------------------------------------- # 記事の最大登録数等を設定できます。 # ---------------------------------------------------------- $max_size = 999 *1024; # 記事削除開始記録ファイルサイズ(約nバイト 最低 1500) $max_tree = 10; # リストに表示するツリーの数です。 $max_msg = 8000; # 投稿を受理する最大文字数(半角 n 文字) $new_kiji = 10; # 最新情報に[NEW]をつける数 # ---------------------------------------------------------- # この掲示板の管理者(あなた)の情報です。 # ---------------------------------------------------------- $admin_name = 'segu'; # あなたの名前(ハンドルネーム)を書きます。 $admin_email = 'segu@psxemu.com'; # あなたのメールアドレスを書きます。 # ---------------------------------------------------------- # この掲示板のカスタマイズ項目です。 # ---------------------------------------------------------- $title = "Segu's ToolBox Message Board (JP)"; # 掲示板のタイトル $body_text = '#FFFFFF'; #
タグの設定 $body_link = '#FFFF00'; # リンクの色 $body_alink = '#FF0000'; # クリック中のリンクの色 $body_vlink = '#7F7F00'; # 既にクリック済みのリンクの色 $body_bgcolor = '#000000'; # 背景の色 $body_back = ''; # 背景画像 $backurl = "../indexj.html"; # 帰りの URL $date = "year/mon/day hour:min"; # 時間表示フォーマット $date_type = 1; # 一桁のとき二桁に修正するか? # 0:しない 1:する(時分秒) 2:する(全て) $em_color = "#FFFFFF"; # 強調色の色(数字等) $kiji_title_color = "#FFFFFF"; # 記事のタイトルの色 $kiji_title_bgcolor = "#0000FF"; # 記事のタイトルの背景色 #$form_bgcolor = "#CED1B5"; # 記事投稿フォームの背景色 $form_bgcolor = "#C0C0C0"; # 記事投稿フォームの背景色 $res_color = "#AAAA00"; # 記事につくレスの色 $gif_allnews = 'images/all.gif'; # 一括購読用の GIF IMAGE $gif_news = 'images/docs.gif'; # 標準購読用の GIF IMAGE $gif_new_news = 'images/new.gif'; # 最新記事用の GIF IMAGE $gif_space = 'images/blank.gif'; # 透明 の GIF IMAGE(ダミー画像) $gif_width = 20; # GIF IMAGE の横幅 $gif_height = 14; # GIF IMAGE の縦幅 $tree_width = 30; # Tree Width(ツリーがずれます?) $html_title=<<"_EOF_"; # HTML 文の設定(タイトル)
![]() |
_EOF_ } # [ 著作権等の表示(必ず著作権を表示すること) ] # sub html_footer { print<<"_EOF_";
\n";
$end_tree = $tree + $max_tree;
if ($end_tree > @logs) { $end_tree = @logs; }
for ($i=$tree;$i<$end_tree;$i++) {
print"
";
@datas = ÷_log($logs[$i]);
foreach (@datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = ÷_data($_);
if ($res eq 'root') {
print "
";
} else {
local($space_width) = $gif_width+$tree_width*$lx;
print "
";
}
print "";
if ($no > $count - $new_kiji) {
print "
";
} else {
print "
";
}
print "$title : ";
if ($COOKIE{'name'} eq $name) {
print "$name";
} else { print $name; }
print " ($date)\n";
}
}
print"\n";
}
# [ 個別で記事の内容を表示する ]
#
sub view {
&html_header("記事($FORM{'no'})");
@kiji_datas = ÷_log(&search_no2data($FORM{'tn'},@logs));
$kiji_data = &search_no2data($FORM{'no'},@kiji_datas);
print"[この記事の元になった記事です。 ]$parent
[この記事に対する返事です。]$children
_EOF_
@kiji_datas = ÷_log(&search_no2data($FORM{'tn'},@logs));
foreach (@kiji_datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act) = ÷_data($_);
$no = int($no);
$reply[$res] .= "$no-";
if ($res eq 'root') {
print "
";
} else {
local($space_width) = $gif_width+$tree_width*$lx;
print "
";
}
print "
$title : $name($date)\n";
}
foreach $data (@kiji_datas) {
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$pwd,$rhost,$ipad,$comment) = ÷_data($data);
$no = int($no);
print<<"_EOF_";
| $no | _EOF_ if ($res eq 'root') { print" Root\n"; } else { $res = int($res); print"▲[$res]\n"; } print" | \n"; if (!$reply[$no]) { print"なし\n"; } else { chop($reply[$no]); local(@replys) = split(/-/,$reply[$no]); foreach (@replys) { print"▼[$_]\n"; } } print" |
| \n"; &kiji_view($data); print<<"_EOF_"; | ||
| _EOF_ &kiji_view($data); print<<"_EOF_"; |
|
|
|
$name ($date)
$comment
|
ツリー掲示板の性質上、完全には削除されない場合があります(レス等がある場合)
完全に削除することを望む場合は管理者にお伝え下さい。
_EOF_
}
# [ データ処理関連汎用サブ ]
#
sub divide_log {
local($data) = $_[0];
chop($data);
return split(/<#>/,$data);
}
sub divide_data {
return split(/<>/,$_[0]);
}
sub search_no2data {
local($no,@datas) = @_;
local($data);
foreach $data (@datas) {
if ($no == (split(/<>/,$data))[0]) { return $data; }
}
return 0;
}
# [ フォームからデータ取得 ]
#
sub read_form {
local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = &change_code($value);
}
}
# [ クッキー処理 ]
#
sub check_cookie {
local($text);
foreach $text ('font','sort','tree','form','new_mail','res_mail') {
if (($FORM{$text} ne '') && ($COOKIE{$text} ne $FORM{$text})) { $COOKIE{$text} = $FORM{$text}; }
}
}
sub get_cookie {
local($pair,%DUMMY);
local($cookies) = $ENV{'HTTP_COOKIE'};
local(@pairs) = split(/;/,$cookies);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/,$DUMMY{$cookie_name});
foreach $pair (@pairs) {
local($name,$value) = split(/:/,$pair);
$COOKIE{$name} = &change_code($value);
}
}
sub set_cookie {
local($cook) = "name\:$COOKIE{'name'}\,email\:$COOKIE{'email'}\,pwd\:$COOKIE{'pwd'}\,font\:$COOKIE{'font'}\,sort\:$COOKIE{'sort'}\,tree\:$COOKIE{'tree'}\,form\:$COOKIE{'form'}\,new_mail\:$COOKIE{'new_mail'}\,res_mail\:$COOKIE{'res_mail'}";
$ENV{'TZ'} = "GMT"; # 国際標準時の取得
local($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time + 30*24*60*60);
if ($year < 99) { $year += 100; }
$year += 1900;
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mday < 10) { $mday = "0$mday"; }
$mon = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mon];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wday];
$date_gmt = "$youbi, $mday\-$mon\-$year $hour:$min:$sec GMT";
print "Set-Cookie: $cookie_name=$cook; expires=$date_gmt\n";
}
# [ 文字コード関連 ]
#
sub check_code {
if (!(-r $jcode)) { &error(1,"jcode.pl がありません"); }
require $jcode;
local($text) = ord(substr("中澤重人=じゃわ(^-^;;",0,1));
if ($text == 0xc3) { $mojicode = "euc"; $charset_code = "x-euc-jp"; }
elsif ($text == 0x92) { $mojicode = "sjis";$charset_code = "x-sjis"; }
else { &error(1,"サポートしてない文字コードです"); }
}
sub change_code {
local($text)=$_[0];
&jcode'convert(*text,$mojicode);
if ($mojicode eq 'sjis') { &jcode'h2z_sjis(*text); }
if ($mojicode eq 'euc') { &jcode'h2z_euc(*text); }
$text =~ s/</g;
$text =~ s/>/>/g;
return $text;
}
# [ 日付取得 ]
#
sub get_date {
$ENV{'TZ'} = "JST-9"; # TimeZone (日本時間 = 国際標準時(JST) - 9時間)
local($sec,$min,$hour,$day,$mon,$year) = localtime();
if ($year < 99) { $year += 100; }
$year += 1900;
$year = substr($year,length($year)-2,2);
$mon++;
if ($date_type) {
if ($sec < 10) { $sec = "0$sec"; } # 秒の修正
if ($min < 10) { $min = "0$min"; } # 分 〃
if ($hour < 10) { $hour = "0$hour"; } # 時 〃
if ($date_type > 1) {
if ($mon < 10) { $mon = "0$mon"; } # 月 〃
if ($day < 10) { $day = "0$day"; } # 日 〃
}
}
$date =~ s/year/$year/ig;
$date =~ s/mon/$mon/ig;
$date =~ s/day/$day/ig;
$date =~ s/hour/$hour/ig;
$date =~ s/min/$min/ig;
$date =~ s/sec/$sec/ig;
}
# [ 記録ファイルの処理 ]
#
sub read_file {
local($logfile) = $_[0];
&lock_file($lock1);&lock_file($lock2);
if ($lock_error) { &error(1,"ロックファイルを検出しました。時間をおいてご利用下さい。"); }
if (!open(IN,$logfile)) { &unlock_file; &error(1,"記録ファイルの読み込み不可"); }
local(@files) =
_EOF_
exit;
}
エラー:$err_msg