#! /usr/local/bin/perl #↑の行が先頭行になる様にしてください。 # perlの所在はプロバイダにより異なりますので注意してください # # 駅伝 Release2001/3a # require '../../jcode.pl'; # 既にあればそこまでのパスを指定します。 ################################################################################ # 初期設定 # ★ここの設定は基本的に変更しないでください!★ $this_file = 'ekiden.cgi'; # このcgiのファイル名 $data_file = 'ekiden.dat'; # データファイル名 $version = "Release2001/3a"; # バージョン情報 $ENV{'TZ'} = "JST-9"; $now = time; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($now); $month = ($mon + 1); $dt = "$month

$mday

$hour

$min
分"; ################################################################################ # 利用者環境設定 # ★ここは好みに合わせて変更してください★ $title = "夜の地下鉄中洲駅"; # タイトルは自由に変更してください $max = "39"; # ログ件数(1画面13件なので基本的には13の倍数にしてください) # 背景設定 $backtype = "0"; # 背景画像あり/なし設定(0=なし,1=あり) $back_color ="#000000"; # 背景色 $backimg = "wall_01.gif"; # 背景画像($backtypeが1の場合、有効) #色設定−−FONT COLORタグの指定と同様です $title_color="#ffa0a0"; # タイトル文字色 $text_color ="#ffff80"; # text(全体の文字色) $error_color="#ff8080"; # エラー表示色 $link_color ="#ffff00"; # link $vlink_color="#ff0000"; # vlink $waku1_color ="#00b000"; # 駅伝外枠色 $waku2_color ="#008000"; # 駅伝枠内色 @chalk =('#ffff80,黄', # チョーク色1 '#ffa0a0,赤', # チョーク色2 '#a0e0ff,青', # チョーク色3 '#ffffff,白'); # チョーク色4 #駅伝からの戻り先(主にトップページ)のURL,表示項目を指定してください $return_link ="./"; # 戻り先(現在の設定は1つ上のdirのindex.html) $return_title ="HOME"; # 戻り先のリンク名 $txt = "./ekiden.txt"; $txt2 = "./ekiden2.txt"; ################################################################################ # ヘッダ # ★あんまりさわらないことをおすすめします★ if ($backtype eq "1") { $bkg="background=\"$backimg\""; } $head = <<"EOT"; Content-type: text/html $title
EOT $foot2 = <<"EOT";
EOT ################################################################################ # フッタ # ★コピーライト行が含まれますので極力変更しない様、お願いします★ $foot1 = <<"EOT";


































駅伝 $version Script written by Wing gate

EOT ################################################################################ # 基本処理 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $option, $ENV{'CONTENT_LENGTH'}); } else { $option = $ENV{'QUERY_STRING'}; } &get_opt; if ($gn ne "" || $cm ne "") { &write_data; } # 伝言書き込み &disp_log; ################################################################################ # オプションパラメータ分解サブルーチン sub get_opt { @opts = split(/&/,$option); foreach $opt (@opts) { ($name, $value) = split(/=/, $opt); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ # # ここに変換設定を追加。。。。 $value=~ s/教えて/愛して/g; $value=~ s/おしえて/愛して/g; $value=~ s/笑/怒/g; $value=~ s/爆/涙/g; $value=~ s/CGI/空中ブランコ/g; $value=~ s/掲示板/サザエさん/g; $value=~ s/良い/臭い/g; $value=~ s/面白い/逆立ちしたい/g; $value=~ s/おもしろい/おもらししたい/g; $value=~ s/プリン/プリン国王/g; $value=~ s/プリリン/愛するプリリン様♪/g; $value=~ s/ぷりりん/愛しのぷりりん様♪/g; $value=~ s/めぐりん/めぐり|ぬ/g; $value=~ s/怪しい/愛しい/g; $value=~ s/変換/私は変態/g; $value=~ s/だんちゃん/段田だんちゃん/g; $value=~ s/さ/ちゃ/g; $value=~ s/し/ち/g; $value=~ s/す/ちゅ/g; $value=~ s/せ/ちぇ/g; $value=~ s/そ/ちょ/g; $value=~ s/ざ/ぢゃ/g; $value=~ s/じ/ぢ/g; $value=~ s/ず/ぢゅ/g; $value=~ s/ぜ/ぢぇ/g; $value=~ s/ぞ/ぢょ/g; $value=~ s/な/にゃ/g; $value=~ s/ぬ/にゅ/g; $value=~ s/ね/にぇ/g; $value=~ s/の?/のか、こら!?/g; $value=~ s/の/にょ/g; $value=~ s/みかん/たべごろみかん/g; $value=~ s/姫/嬢/g; $value=~ s/>/∨/g; $value=~ s/</∧/g; $value=~ s/こんばんわ/愛してほしくて来ました/g; $value=~ s/こんにちは/昨夜のことが忘れられなくて来ました/g; $value=~ s/ん?/うっふん♪/g; $value=~ s/えっ?/あっはん♪/g; $value=~ s/嫌だ/好きだ/g; $value=~ s/嫌い/愛してる/g; $value=~ s/ら/りゃ/g; $value=~ s/る/りゅ/g; $value=~ s/れ/りぇ/g; $value=~ s/ろ/りぉ/g; $value=~ s/すごい/すんばらしい/g; $value=~ s/スゴイ/スンバラシィ/g; # ここまで。。。。 # # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ if ($name eq "gn" || $name eq "cm") { $value=~ s/ ,/,/g; # " ,"はデータの分割に使用するため禁止 $value=~ s/ / /g; # 半角スペースの連続は1つにまとめる $value=~ s/ / /g; # 全角スペースは半角に $value=~ s/([\x00-\x7F])/$1
/g; $value=~ s/([\x81-\x9F|\xE0-\xEF][\x40-\x7E|\x80-\xFC])/$1
/g; $value=~ s/\x81\x5B/|/g; $value=~ s/

/
/g; } &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } # close foreach 〜 $gn = $FORM{'gn'}; # 名前 $cm = $FORM{'cm'}; # コメント $cl = $FORM{'cl'}; # チョーク色 $dp = $FORM{'dp'}; # 表示開始位置 } # close sub get_opt ################################################################################ # ログ表示 sub disp_log { &get_cook; &read_data; $logs=$#buf; $dpe=$dp+12; $dpb=$dp-13; $dpf=$dp+13; if ($dpb > -1) { $next=""; } else { $next="−"; } if ($dpf < $logs+1) { $prev=""; } else { $prev="−"; } print << "EOT"; $head
[ソ\ースファイル][便利な追加機\能\]
EOT &disp_form; foreach (0..12) { ($dt,$gn,$cm,$cc) = split(/ ,/,$buf[$dpe-$_]); $cc =~ s/\n//g; ($chalk_color,$color_name) = split(/,/,$chalk[$cc]); if ($gn ne "") { print "\n"; } else { print "\n"; } $cnt++; } print "$foot1\n"; print "$foot2\n"; exit; } # close sub disp_log ################################################################################ # フォーム sub disp_form { print << "EOT"; EOT } ################################################################################ # データ読み込み sub read_data { open(LOG,"$data_file") || &msg_disp("fe"); @buf = ; close(LOG); } # close sub read_data ################################################################################ # データ書き込み sub write_data { $bgn = $gn; $bgn =~ s/
//g; # 文字数確認のために一時的に
を抹消 $lgn = length($bgn); # 名前のサイズ取得 $bcm = $cm; $bcm =~ s/
//g; # 文字数確認のために一時的に
を抹消 $lcm = length($bcm); # コメントのサイズ取得 # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ # # 発言文字数の設定。。。。 if ($gn eq "") { &msg_disp("ng"); } else { if ($lgn > 60) { &msg_disp("og"); } } if ($cm eq "") { &msg_disp("nc"); } else { if ($lcm > 500) { &msg_disp("oc"); } } # ここまで。。。 # # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ $gn = "$gn##"; $gn =~ s/
##//g; # 名前の最後の
を削除 &read_data; while ($max <= @buf) { pop(@buf); } unshift(@buf,"$dt ,$gn ,$cm ,$cl\n"); open(LOG,">$data_file") || &msg_disp("fe"); print LOG @buf; close(LOG); &set_cook; } # close sub write_data ################################################################################ # クッキー情報取得 sub get_cook { $cook = $ENV{'HTTP_COOKIE'}; @cookies = split(/;/,$cook); foreach $param (@cookies) { local ($name, $value) = split(/=/, $param); $name =~ s/ //g; if ($name eq "EKIDEN") { foreach $param (split(/,/,$value)) { local ($cname, $cvalue) = split(/##/, $param); $COOKIE{$cname} = $cvalue; } } } # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ # # ここをコメントアウト。。。。 # $cgn = $COOKIE{'gn'}; # $ccl = $COOKIE{'cl'}; # if ($gn) { $cgn = $gn; } # if ($cl) { $ccl = $cl; } # ここまで。。。。 # # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ } # close sub get_cook ################################################################################ # クッキー情報発行 sub set_cook { $gn =~ s/
//g; # クッキーへの名前登録のため
は削除 ($sec,$min,$hour,$day,$mon,$year,$wday,$dummy,$dummy) = gmtime(time + 30*24*60*60); if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } if ($day < 10) { $day = "0$day"; } $year = $year + 1900; $yohbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$#mon]; $cook_gmt = "$yohbi, $day\-$month\-$year $hour:$min:$sec GMT"; $cook_data = "gn##$gn,cl##$cl;"; print "Set-Cookie: EKIDEN=$cook_data; path=/; expires=$cook_gmt\n"; } # close sub set_cook ################################################################################ # メッセージ表示処理 sub msg_disp { my($mf) = @_; if ($mf eq "ng") { $msg = "お名前が入力されていません!"; } if ($mf eq "nc") { $msg = "コメントが入力されていません!"; } # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ # # ここも修正。。。。 if ($mf eq "og") { $msg = "お名前が長すぎます!"; } if ($mf eq "oc") { $msg = "コメントが長すぎます!"; } # ここまで。。。 # # ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ if ($mf eq "fe") { $msg = "ログファイルが開けません!"; } print << "EOT"; $head
[$return_title] $title [$prev|$next]
$dt
$cm
BY
$gn








名前:  色: EOT $cnt=0; while ($chalk[$cnt] ne "") { ($chalk_color,$color_name) = split(/,/,$chalk[$cnt]); if ($ccl == $cnt) { print ""; } else { print ""; } print " "; $cnt++; } print <<"EOT";  
発言:
$foot2 EOT exit; } # close sub msg_disp
$title

$msg

戻って見直してください