#!/usr/local/bin/perl # WeB DoRaMa version 1.11 # Script written by Shigeto Nakazawa.(1996/11/27) # This script is free. # Arranged by Ninjinju-su CGI require './jcode.pl'; # --------------------------------- # 各種設定 # --------------------------------- $max = '150'; # 登録・表示最大数(あまりに多いと危険) $view = 5; # 初期画面で表示する数 $backurl = '../'; # 帰りのURL(変更してください) $mojicode = 'sjis'; # Windows なら 'sjis' UNIX なら 'euc' を推奨。 $logfile = 'dorama.log'; # 記録用ファイル $lockfile = 'dorama.lock'; # 鍵ファイル $lockcheck = 1; # 鍵ファイルの使用(通常は 1 にしてください) $pluscheck = 1; # 登場人物設定(1:自由登録モード 0:管理者限定登録モード) $kyaralogfile = 'kyara.log'; # 登場人物記録用ファイル $type = '<>'; #ログ形式設定 # --------------------------------- # フォームからデータをもらう # --------------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } $typec = $type; $typec =~ s/\\//; @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,$mojicode); $value =~ s/\n//; if ($type ne '<>') { $value =~ s/$typec//; } $value =~ s/<(.|\n)*//g; $FORM{$name} = $value; } # --------------------------------- # HTML出力 # --------------------------------- print <<"_HTML_header_"; Content-type: text/html\n\n WeB DoRaMa Plus _HTML_header_ # --------------------------------- # 記録ファイルを読み込む # --------------------------------- if ($lockcheck) { $wt = 0; while (-f $lockfile) { $wt++; if ($wt > 19) { &error('強制終了されました。処理は中断されました。'); } sleep 1; } open (LOCK,">$lockfile"); } if (!open(IN,$logfile)) { unlink ($lockfile); &error("管理者が記録ファイルの読み込みを許可していません。現在は使えません。"); } @lines = ; close(IN); if (!open(IN,$kyaralogfile)) { unlink ($lockfile); &error("管理者が登場人物記録ファイルの読み込みを許可していません。現在は使えません。"); } @tomatos = ; close(IN); unlink ($lockfile); foreach $tomato (@tomatos) { chop($tomato); ($kyara,$color) = split(/$type/, $tomato); $kyara = &change1($kyara); push(@actors,$kyara); push(@colors,$color); } if ($pluscheck) { $plusok = "[登場人物追加]"; } # --------------------------------- # 分岐 # --------------------------------- if ($buffer eq '') { &html; } else { ®ist; } exit; # ************* # ウェルカム! # ************* sub html { print <<"_HTML_top_";

WeB DoRaMa Plus


小説は事実より奇なり。読みたい人は自分も小説を書きましょう!!


_HTML_top_ for ($i=$view-1;$i>-1;$i--) { ($nn,$date,$dorama,$actor) = split(/$type/, $lines[$i]); $dorama_c = &change1($dorama); print "$actors[$actor]『$dorama_c』
\n"; if (!$i) { $no = $nn; } } print <<"_HTML_middle_";



_HTML_middle_ print "\n"; print <<"_HTML_buttom_";
  • 同じ人物が続けて発言することはできません。
  • タグを使用したり、全角150字を超えると登録されません。

    $plusok [管理用]

    WeB DoRaMa v1.11 [Shigeto Nakazawa]
    WeB DoRaMa Plus v1.0 [Ninjinju-su CGI]
    _HTML_buttom_ } # ************* # 登録 # ************* sub regist { $no = $FORM{'no'}; $actor = $FORM{'actor'}; $dorama = $FORM{'dorama'}; $dorama_c = &change0($FORM{'dorama'}); # --------------------------------- # フォームセキュリチー # --------------------------------- ($ck_no,$date,$ck_dorama,$ck_actor) = split(/$type/, $lines[0]); if ($ck_no ne $no) { &error("残念、タイムオーバーです。すでに、誰かが執筆してしまったようです。一度戻って,再読み込みを行ってください。"); } if ($ck_actor == $actor) { &error("同じ人がセリフを言ってはいけません。"); } if ($colors[$actor] eq 'no') { &error("セリフを言う人を選んでください。"); } if ($colors[$actor] eq 'del') { &error("削除されていますので使えません"); } if ($dorama eq '') { &error("何も書かれていないか、または使用禁止の文字が使われているようです。<は使用しないでください。"); } if (length($dorama) >= 300) { &error("言葉が長すぎます。文字数は全角150字を超えてはいけません。"); } # ---------------------------------- # 日付を取得する # ---------------------------------- ($sec,$min,$hour,$day,$mon) = localtime(time); $mon++; if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } if ($day < 10) { $day = "0$day"; } if ($mon < 10) { $mon = "0$mon"; } $date = "$mon/$day $hour:$min:$sec"; # --------------------------------- # HTML出力 # --------------------------------- print <<"_HTML_thanks_";

    WeB DoRaMa Plus

    執筆ありがとう!(^o^)
    ゆっくりご覧下さい。見終わったら、ここをクリックすることで前のページに戻ります。

    [もどる]
    _HTML_thanks_ $i = 0; $no = ($no + 1) % 9999; @new = ''; unshift(@lines,"$no$typec$date$typec$dorama_c$typec$actor\n"); foreach $line (@lines) { $i++; push(@new,$line); if ($i == $max) { last; } } for ($i=@new-1;$i>0;$i--) { ($no,$date,$dorama,$actor) = split(/$type/,$new[$i]); $dorama_c = &change1($dorama); print "$date$actors[$actor]『$dorama_c』


    \n"; } # --------------------------------- # 記録ファイルに登録する # --------------------------------- if ($lockcheck) { $wt = 0; while (-f $lockfile) { $wt++; if ($wt > 19) { &error('強制終了されました。処理は中断されました。'); } sleep 1; } open (LOCK,">$lockfile"); } if (!open(OUT,">$logfile")) { unlink ($lockfile); &error("管理者が記録用ファイルの書き込みを許可していません。現在は使えません。"); } print OUT @new; close(OUT); unlink ($lockfile); } # *************************** # 禁止文字コードの変換処理 # *************************** sub change0 { local($text) = $_[0]; $text =~ s/\(/(/g; $text =~ s/\)/)/g; $text =~ s/\*/*/g; $text =~ s/\+/+/g; $text =~ s/\././g; $text =~ s/\?/?/g; $text =~ s/\[/[/g; $text =~ s/\\/\/g; $text =~ s/\]/]/g; $text =~ s/\{/{/g; $text =~ s/\|/|/g; $text =~ s/\}/}/g; return $text; } sub change1 { local($text) = $_[0]; $text =~ s/(/\(/g; $text =~ s/)/\)/g; $text =~ s/*/\*/g; $text =~ s/+/\+/g; $text =~ s/./\./g; $text =~ s/?/\?/g; $text =~ s/[/\[/g; $text =~ s/\/\\/g; $text =~ s/]/\]/g; $text =~ s/{/\{/g; $text =~ s/|/\|/g; $text =~ s/}/\}/g; return $text; } # *************************** # エラー処理 # *************************** sub error { print <<"_HTML_error_";

    監督『カット!!』

    $_[0] _HTML_error_ exit; }