つぼ倉庫

ガラクタ置き場です。運悪く来てしまった方、すみません。
たいしたものはありませんが、よかったら持ってって下さい。


おしながき


壊してしまったMiniBBSのログを修復する

「Web裏技」(http://www.rescue.ne.jp/)で配布している「簡易BBS」シリーズのログは特殊な記録方式をとっているため、転送や編集の時にログを壊してしまうことがままあります。
一度壊してしまうと、直すには知識と根気が必要で、泣く泣く過去ログをあきらめた人も少なくありません(かく言う私もやらかしたことがあります)。
そこで、ログを修復するスクリプトを作ってみました。このスクリプトを使うことで、作業の大部分を自動化できます。

MiniBBS タイプ1のバージョン7.x〜10.x、および2000に対応。どのバージョンのログかを自動判定します。
※「First aid」ですので、完璧は期待しないで下さい(^^;

download > Re^9: First aid 1.04

使い方

  1. 上のリンクをctrl+クリック(Winなら右クリック)して「リンク先を保存」して下さい。
  2. 落としたファイルをテキストエディタで開き、中に書いてある説明を読んで下さい。

使用条件

感謝ウェアです。利用して嬉しかったら感謝して下さい。お礼のメールを送るとか、自作スクリプトを公開するとか、他の人の質問に答えてあげるとか、感謝の方法は何でも構いません。
転載や改変はご自由に。改変したものを再配布する時は、その旨を表示して下さい。
動作/バグ報告・ご感想・ご要望等はメールでrescue@debuchin.orgまでお願いします。


MiniBBS-EXで返信のついた記事を先頭に移動する

<ins>:09 Feb.'04 追加

「Web裏技」(http://www.rescue.ne.jp/)のサポート掲示板でたびたび見られる質問に「『簡易BBSエクセレント』で、返信のついた記事を先頭に持っていきたい」というものがあります。
この掲示板は全ての投稿を親記事の投稿時刻によって管理しているため、記事の順番を入れ替えるのは困難でした。
しかし同様の質問があまりに多いため、質問があるたびに「無理です」と答えるより、何とかして実現させた方がお互いに幸せであると考え、ついに改造に成功しました。

改造スクリプトの再配布には許可が必要なため、改造方法を説明します。
書き換える位置がずれないよう、スクリプトの後方から順に示しています。

  1. 改造元のスクリプトをまだ入手していなければ、「Web裏技」(http://www.rescue.ne.jp/)のサイトから「簡易BBSエクセレント 1.30」をダウンロードします。
  2. アーカイブを解凍し、テキストエディタで「bbs.cgi」を開きます。(ここからが本題)
  3. 1246行目「&html;」の直前に「&setdir;」という行を追加します。
  4. 1225行目「undef %in;」と1226行目「@IMAGES = ();」を削除します。
  5. 578行目「}」の直前に「&setdir;」という行を追加します。
  6. 488行目「sub getdir {」〜512行目「}#getdir」を削除し、かわりに以下をコピーして追加します。

    $list_name = 'log_order';

    sub getdir {
    $check = (eval { opendir(DIR,$base_path); }, $@ eq "");
    if (!$check) { &error("システムエラー",0,"ファイル取得ができません."); }
    undef %RESP;
    @BASE = ();
    @list = readdir(DIR);
    foreach $file (@list) {
    next if -d $file;
    if ($file =~ /^(\d+)\.(\d+)\.$ext$/) {
    $RESP{$1} .= "\0" if (defined($RESP{$1}));
    $RESP{$1} .= $file;
    }
    elsif ($file =~ /^(\d+)\.$ext$/) { push(@BASE,$1); }
    }
    close(DIR);
    @BASE = sort { $b <=> $a; } @BASE;

    # ここから追加部分
    if(open(RE,"$base_path$list_name\.$ext")) {
    @lists = <RE>;
    close(RE);
    @BASE = ();
    while ($popped = pop(@lists)) {
    chop($popped);
    unshift(@BASE,$popped);
    }
    }
    else {
    unless(open(RE,">$base_path$list_name\.$ext")) { &error('エラー',0,'ログファイルに書き込めません'); }
    foreach (@BASE) { print RE "$_\n"; }
    close(RE);
    chmod(0666,"$base_path$list_name\.$ext");
    }
    }#getdir

    sub setdir {
    ($thisnum,$devnull) = split(/\./,$in{'_number'});
    unless(open(RE,"$base_path$list_name\.$ext")) { &error('エラー',0,'ログファイルが読み込めません'); }
    @lists = <RE>;
    close(RE);
    @lists = grep(!/^$thisnum/,@lists);
    unshift(@lists,$thisnum . "\n") unless $in{'_remove'};
    until ($#lists < $SETUP{'max'}) { pop(@lists); }
    unless(open(RE,">$base_path$list_name\.$ext")) { &error('エラー',0,'ログファイルが書き込めません'); }
    print RE @lists;
    close(RE);
    chmod(0666,"$base_path$list_name\.$ext");
    undef %in;
    @IMAGES = ();
    } #setdir

    # 追加ここまで

  7. あとはスクリプトの説明に従って設置して下さい。改造前のログも認識しますので、既に使い始めている場合でも大丈夫です。

※動作確認はしましたが、穴があるかもしれません。動作/バグ報告・ご感想・ご要望等はメールでrescue@debuchin.orgまでお願いします。


しあわせのツボ info@debuchin.org