#! /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
################################################################################
# フッタ
# ★コピーライト行が含まれますので極力変更しない様、お願いします★
$foot1 = <<"EOT";
|
日
時
メ
ッ
セ
|
ジ
|
EOT
$foot2 = <<"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 "$dt $cm BY $gn | \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
| $title |
$msg戻って見直してください |
$foot2
EOT
exit;
} # close sub msg_disp