#! /usr/bin/perl
#
#ゆいちゃっとJS2(JavaScript版2)β2リリース(pref.cgi)
#
#pref.cgiは、chat.cgiとenter.cgiで、共通して使われるサブルーチン集です。
sub init{ #初期設定など
$sanka_file = './sanka_log'; #参加記録ファイル
$chat_file = './chat_log'; #チャットログ(ファイル名はなるべく変更しておくこと。)
$method = 'GET';#やっぱり、GETよねぇ〜
#退室後のページは、他のHPにも変えられます。
$endpage= 'http://www.cup.com/yui/end.html';
$title = 'ゆいちゃっとJS';
$body='
';
$max = 50;#ログの最大行数
$host = $ENV{'REMOTE_HOST'};if($host=~/bmc/){$host='ppp753.master.ad.jp';}
$metacode = '';#SJIS認識させる
####アクセス制限を使用するなら、#を消す。
#$kill_file = './killfile';#アクセス制限用
#open(DB,"$kill_file") || die "Cannot Open Log File $kill_file: $!";
# @lines2 = ; close(DB);
#foreach $line (@lines2) {
# next if(length($line)<4); chop $line;
# if( $host=~/$line/ ){ print "Status: 404\n\n"; exit; }
#}
####アクセス制限ここまで
#ロックファイルを使用するなら、#を消す。
#$lockfile = './lock/lock-file.lock';
#$retry = 5;
#while (!symlink(".", $lockfile)) {
#if (--$retry <= 0) { print "Status: 204\n\n"; unlink($lockfile); exit; }
#sleep(1);
#}
#ロックファイルここまで
}#init END
sub ended{ #unlinkとexitを行うためだけのもの。
# unlink($lockfile);#ロックファイルを使用するなら、#を消す。
exit;
}#ended END
sub decode{ #一般的なデコード&変数への代入
$buffer = $ENV{'QUERY_STRING'};
@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,'sjis');
$value =~ s/\t/ /g;$value =~ s/\t/g;$value =~ s/\n//g;
$FORM{$name} = $value;
}
$name = $FORM{'name'};$name =~ s/ //g; $name =~ s/ //g;
$name =~ s/\t/</g; $name = $host if (!$name);
$color = $FORM{'color'}; $color='red' if(!$color);
$mode = $FORM{'mode'}; $reload = $FORM{'reload'};
$email = $FORM{'email'}; $window =$FORM{'window'};
}#decode END
sub jikan{#$dateに時刻を代入します。
$ENV{'TZ'} = 'JST-9';
$times = time;#18時間時差があるなら、$times = time+18*60*60とする。
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($times);
$min = "0$min" if ($min < 10); $month++;
$youbi = ('日','月','火','水','木','金','土') [$wday];
$date = "$month/$mday($youbi)$hour:$min";
}#jikan END
sub sanka{#ここで、アクセス記録をとる。
open(LOG,"$sanka_file") || &ended;
seek(LOG,0,0); @sanka=;
close(LOG);
$flag=1;
foreach $line (@sanka) {
($timerec, $handle, $host2,$dmy) = split(/\t/, $line);
if( $times-60 > $timerec){$line = ''; next;}
if(($host2 eq $host) && $flag){#ホスト名が同一の場合、時間と名前を最新のものにする。
$line = "$times\t$name\t$host\td\n";
$flag =0;$handle = $name; $handle =~ s/☆/★/g;
}
push (@sanka3, "$handle☆") if($handle ne $host2);
}#foreach
if($flag){ #新しい参加者は、加える
$name =~ s/☆/★/g;
push(@sanka,"$times\t$name\t$host\td\n");
push (@sanka3, "$name☆") if($name ne $host);
}
undef(@sanka) if($chat eq 'sanka');
open(LOG,">$sanka_file") || &ended;
eval 'flock(LOG,2);';
seek(LOG,0,0); print LOG @sanka;
eval 'flock(LOG,8);';
close(LOG);
}#sanka END
sub readlog{ #配列@linesにログを読み込む
open(DB,"$chat_file") || &ended;
seek(DB,0,0);
chop($newPointer = );
@lines = ;
close(DB);
}#readlog END
sub writelog{ #$valueを@linesに加えたのち、書き込む
(@lines < $max-1) || (@lines = @lines[0 .. $max - 2]);
unshift( @lines,$value);$newPointer++;
open(DB,">$chat_file") || &ended;
eval 'flock(DB,2);';
seek(DB,0,0); print DB "$newPointer\n"; print DB @lines;
eval 'flock(DB,8);';
close(DB);
}#writelog END
sub hide{ #HTML生成時に共有される部分を一つにまとめる。
$hidden =<<"_HIDE_";
_HIDE_
$logw =<<"_HIDE_";
_HIDE_
$kao =<<'_HIDE_';
今のきもち:
_HIDE_
#顔文字は、最初の6個は残してね。
}#hide END
1; # RETURN TRUE
__END__