#!/usr/bin/perl #発射&リロード # 99/07/03 update(v5.1) by 普通 #==================================================================== #ご協力を頂いた方 #oidon_<)'); #顔文字設定 ##################################################Option:002 by Add End if ($in{'cook'} eq 'yes') {&set_cookie();} #クッキー登録 print "Content-type: text/html\n\n"; if ($in{'roomno'} && $in{'chatname'}) { &profchk(); if ($frame eq 'yes') {&main2();} else {&main();}} else {&error("このスクリプトを動作させる為の情報が不足しています。");} exit; sub profchk { $roomno = $in{'roomno'}; #Chat室No &roomset(); #部屋属性取得 $chatname = $in{'chatname'}; #ハンドル名 &rom_proc(); #参加者登録、登参加者・ROM精査 $profno = $bmf_profno; #プロフィールNo $java = $bmf_java; #java script利用可否 $seq = $bmf_seq; #ささやき受付可否 $color = $bmf_ccolor; #発言文字カラー if ($in{'font'}) { #文字サイズ $font_s = ""; $font_e = ""; } ##################################################Option:002 by Add Start # if ($in{'face'} && !($in{'face'} eq 'none')) {$face = $in{'face'};} ##################################################Option:002 by Add End $frame = $in{'frame'}; #Frame利用可否 $seqmem = $in{'seqmem'}; #ささやき相手殿 if ($in{'seqmem'} eq 'noneseq') {;} #ささやき要求 else {$seqreq = '1';} #部屋表現セット ##############フラッシュバージョンへ変更############ if ($ficon eq 'y') { # $roomdisp = ""; # $roomdisp2 = ""; $roomdisp = ""; $roomdisp2 = ""; ############################################## }else{ $roomdisp = $bhf_roomname; $roomdisp2 = $bhf_roomname; } #あいこん一覧リンク if ($ic_chat) { if ($ic_chat eq '1') { $ic_disp = "
  • あいこん一覧\n"; } else { if ($frame eq 'yes') { $ic_disp = "
  • あいこん一覧\n"; } else { $ic_disp = "
  • あいこん一覧\n"; } } } #発言ランキングリンク if ($ranking) { if ($frame eq 'yes') { $disp9 = "
  • 発言ランキング\n"; } else { $disp9 = "
  • 発言ランキング\n"; } } #管理者ICQ呼び出し if ($func_icq eq '1' && !($bmf_end)) { $disp8 = "
  • 管理人ICQ呼び出し♪\n"; } #プロフィールリンク if ($profno) { $chatname_disp = "$chatname";} else {$chatname_disp = $chatname;} } #非フレーム時処理 sub main { print "$title2\n"; print<<"__EOF__"; $bhf_pgbody
    発言 __EOF__ #ささやき相手メンバー表示 &seqmember (); print<<"__EOF__"; 文字サイズ __EOF__ ##################################################Option:002 by Add Start # print<<"__EOF__"; #顔文字 #__EOF__ ##################################################Option:002 by Add End print<<"__EOF__";
    自発言消し:
    __EOF__ if ($java eq 'yes') { print<<"__EOF__"; __EOF__ } ######退室する######################################################## print<<"__EOF__";

    __EOF__ if ($seqreq eq '1') {&seqmems ();} #ささやき要求時でのメンバー検索 if ($in{'comment'}) {&commsg ();} #発言内容の書き込み elsif ($in{'wait'}) {&retmsg ();} #待機からの復帰の書き込み elsif ($in{'del'}) {&msg_del();} #記録済み発言削除 &prcom2(); #発言内容の表示 print<<"__EOF__";



    ここは、$title - $roomdispです。

    うこそ、いらっしゃいませ!「$chatname」さん。じゃん、じゃんんでってくださいね!
    • 発言内容の更新は「発言/リロード」ボタンを押してください。
    • お帰り(退室)は下の「退室する」ボタンを押してネ!(参加人数を間違えるので・・・)
      $disp9 $disp8
    • HELP
      $ic_disp

    __EOF__ exit(0); } #フレームモード表示判定 sub main2 { if ($in{'wind'} eq 'f') {&main2_f();} #発言投稿フレーム elsif ($in{'wind'} eq 't') {&main2_t();} #発言表示フレーム else {&main2_1st();} #フレーム初期表示 } #フレーム初期表示(フレーム対応) sub main2_1st { $w_chatname = $chatname; $e_chatname = &encode($w_chatname); print "$title2\n"; print<<"__EOF__"; $bhf_pgbody <TABLE><TR> <TD VALIGN=bottom><FORM METHOD="POST" ACTION="${sbase}chat_end.cgi"> <INPUT TYPE=hidden NAME="roomno" VALUE="$roomno"> <INPUT TYPE=hidden NAME="chatname" VALUE="$chatname"> <INPUT TYPE=submit VALUE="退室する"></FORM> </TR></TABLE><HR SIZE=2> <FONT FACE="MS Pゴシック"> <H2><STRONG>ここは、$title - $roomdispです。</STRONG></H2> 現在、この部屋はフレーム表\示モードにて動作しています。一旦退室し、非フレームにて入室願います<BR> </FONT><HR NOSHADE> __EOF__ } #発言フォーム表示(フレーム対応) sub main2_f { print "$title2\n"; if ($java eq 'yes') { print<<"__EOF__"; __EOF__ $jsubmit = "onSubmit=\"setTimeout("autoclear()",10)\""; } print<<"__EOF__"; $bhf_pgbody
    発言 __EOF__ #ささやき相手メンバー表示 &seqmember (); print<<"__EOF__"; 文字サイズ __EOF__ ##################################################Option:002 by Add Start # print<<"__EOF__"; #顔文字 #__EOF__ ##################################################Option:002 by Add End print<<"__EOF__";
    自動リロード : CallBell: 自発言消し:


    ここは、$title - $roomdispです。

    うこそ、いらっしゃいませ!「$chatname」さん。じゃん、じゃんんでってくださいね!
    • 発言内容の更新は「発言/リロード」ボタンを押してください。
    • お帰り(退室)は下の「退室する」ボタンを押してネ!(参加人数を間違えるので・・・)
      $disp9 $disp8
    • HELP
      $ic_disp

    __EOF__ } #発言内容表示(フレーム対応) sub main2_t { $rlt = $in{'rlt'}; $w_chatname = $chatname; $e_chatname = &encode($w_chatname); print "$title2\n"; if ($in{'rlt'}) { if ($in{'rlt'} eq '0') {;} else { if ($in{'bell'} eq '1') { print "\n"; } else { print "\n"; } } } print "$bhf_pgbody2\n"; #ささやき要求時でのメンバー検索 if ($seqreq eq '1') {&seqmems ();} #発言内容の書き込み if ($in{'comment'}) {&commsg();} elsif ($in{'del'}) {&msg_del();} #記録済み発言削除 #発言内容の表示 if ($in{'bell'} eq '1') {print "【ベルON】
    \n";} &prcom2(); print "
    \n"; if ($in{'rlt'}) { if ($in{'rlt'} eq '0') {print "リロード:手動\n";} else {print "リロード:$in{'rlt'}秒\n";}} else {print "リロード:手動\n";} print "\n"; exit(0); } #部屋属性取得 sub roomset { &ReadHeader ($roomno); ($bhf_roomname,$bhf_intime,$bhf_outtime,$bhf_memcnt,$bhf_page,$bhf_ccolor,$bhf_roomenv,$bhf_roompass,$bhf_bkurl,$bhf_yobi1,$bhf_yobi2,$bhf_yobi3) = split(/||\n/,$hf_list); $bhf_page =~ s/body/BODY/gi; @page_set = split(/,/,$bhf_page); if ($bhf_page =~ /.+BODY.+BODY.+/) { if ($bgmode eq '1') { $bhf_pgbody = $page_set[0]; $bhf_pgbody2 = $page_set[1]; } else { $bhf_pgbody = $page_set[1]; $bhf_pgbody2 = $page_set[0]; } $bhf_line = $page_set[2]; } else { $bhf_pgbody = $page_set[0]; $bhf_pgbody2 = $page_set[0]; $bhf_line = $page_set[1]; } ($bhf_roomenvi1,$bhf_roomenvi2,$bhf_roomenvo,$bhf_roomenvd,$bhf_imaxcnt) = split(/,/,$bhf_roomenv); } #参加者登録、参加者・ROM精査 sub rom_proc { $memcnt = 0; $actmem = 0; &LockReadMember($roomno); foreach (@mf_list) { ($tmf_roomno,$tmf_roomname,$tmf_chatname,$tmf_inenv,$tmf_inproc,$tmf_yobi) = split(/||\n/); ($tmf_ipaddr,$tmf_intime,$tmf_latime,$tmf_agent,$tmf_profno,$tmf_yobi21) = split(/,/,$tmf_inproc); if ($tmf_ipaddr eq 'ROM') { $timewk = time - $tmf_intime; if ($timewk > $rom_time) {$_ = '';} elsif ($tmf_chatname eq $rom_name) {$_ = '';} else {push (@rom_list,$tmf_chatname);} } else { $timewk = time - $tmf_latime; if ($timewk > $aout_time) {$_ = '';} # elsif ($tmf_ipaddr eq $ipaddr) {$_ = '';} elsif ($tmf_chatname eq $chatname) { $bmf_latime = $tmf_latime; ($bmf_ccolor,$bmf_seq,$bmf_java,$bmf_end,$bmf_yobi12) = split(/,/,$tmf_inenv); if ($in{'ccolor'}) { #発言色変更チェック $bmf_ccolor = $in{'color'}; if ($in{'profno'}) {$tmf_profno = $in{'profno'};} } $_ = "$tmf_roomno|$tmf_roomname|$tmf_chatname|$bmf_ccolor,$bmf_seq,$bmf_java,$bmf_end,$bmf_yobi12|$ipaddr,$tmf_intime,$times,$tmf_agent,$tmf_profno,|$tmf_yobi|\n"; $bmf_profno = $tmf_profno; $memcnt++; $actmem = 1; if ($tmf_profno) {push(@memb_list,"$tmf_chatname");} else {push(@memb_list,"$tmf_chatname");} } else { ($tmf_ccolor,$tmf_seq,$tmf_java,$tmf_end,$bmf_yobi12) = split(/,/,$tmf_inenv); if ($tmf_profno) {push(@memb_list,"$tmf_chatname");} else {push(@memb_list,"$tmf_chatname");} $memcnt++; } } } &UnlockWriteMember($roomno); if ($actmem eq 0) {&error("一定時間($aout_time秒)のアクセスが無く自動退室された可能\性があります、
    会話を継続する場合は再度入室して下さい。");} } #ささやき受けメンバー表示 sub seqmember { print "
    ささやき!→\n"; } #ささやき受けメンバー検索 sub seqmems { local($cn,$ip) = ("相手無し","000000000000"); foreach (@mf_list) { next if (!($_)); ($tmf_roomno,$tmf_roomname,$tmf_chatname,$tmf_inenv,$tmf_inproc,$tmf_yobi) = split(/||\n/); ($tmf_ccolor,$tmf_seq,$tmf_java,$tmf_end,$tmf_yobi12) = split(/,/,$tmf_inenv); ($tmf_ipaddr,$tmf_intime,$tmf_latime,$tmf_agent,$tmf_profno,$tmf_yobi21) = split(/,/,$tmf_inproc); if ($tmf_chatname eq $seqmem) { ($cn,$ip) = ($tmf_chatname,$tmf_ipaddr); last; } } $seq_chatname = $cn; $seqmsg= ""; } #発言メッセージ書き込み sub commsg { $comment = $in{'comment'}; $comment =~ s//>/g; $comment =~ s/\r//g; $comment =~ s/\n//g; if ($dic_usefnc) { if ($dic_usefnc eq '1') {$dicnum = '9999';} else {$dicnum = $roomno;} if (-e "${dic_base}zchat$dicnum.dic") { &jcode'convert(*comment, 'euc'); $comment = &dic_conv($dicnum,$comment); } } &jcode'convert(*comment, 'sjis'); $comment =~ s/([^=\"]|^)(http:\/\/[\w\-\?\#\+\.\/~:]{9,})/$1$2<\/A>/ig; if ($tag_usefnc) {$comment = &tag_use($comment);} if ($ic_chat) {$comment =~ s/\[(\w{3,8})\]//g;} if ($seq_chatname) { $seqdst = "→$seq_chatname"; } else { $seqdst = ""; } &WriteComment ($roomno, "$font_s$chatname_disp$cend1$seqdst>$comment$face$cend2\[$date$rhost\]$seqmsg$font_e
    \n"); if ($ranking && !$seqreq eq '1') {&ranking();} } #復帰メッセージ表示 sub retmsg { &WriteComment ($roomno, "「$chatname_disp」は待機から復帰!\[$date$rhost\]
    \n"); } #投稿内容の表示 sub prcom2 { print "在室者:\n"; foreach (@memb_list) {print "$_ \n";} print "

    \n"; if ($rom_disp) {&rom_disp();} if (($in{'start'} || $in{'fstart'}) && $profno && -e "${dfbase}dmsg$profno.txt") {&dmsg_disp();} $lcnt = 0; $bell = ''; &ReadComment ($roomno); $myid = "$chatname:$ipaddr"; foreach (@cf_list) { next if (!($_)); if (s///g) { next if ($1 ne $myid && $2 ne $myid); $_ = "$_"; } if ($in{'bell'} && s///g) { if ($1 > $bmf_latime) { $bell = 1; } } s///g; print $bhf_line, $_; last if (++$lcnt > $dmax); } if ($bell) { print "\n"; } } #ROM表示 sub rom_disp { $rom_dsw = '0'; $rom_count = @rom_list; if ($rom_count eq 0) {return;} if ($rom_nmmd eq '1') { print "ご案内>ROM中!さんが$rom_count人、いらっしゃいます〜。
    \n"; } else { foreach (@rom_list) { if ($rom_dsw eq '0') { print "ご案内>現在のROMさんは『$_』"; $rom_dsw = '1'; } else {print "『$_』";} } print "です。
    \n"; } } #伝言表示 sub dmsg_disp { &ReadDenMessage ($profno); $denmsg_cnt = @dmf_list; print "ご案内>伝言を$denmsg_cnt件預かっていました。
    \n"; print @dmf_list; print "
    \n"; } #発言記録削除 sub msg_del { &LockReadComment ($roomno); foreach (@cf_list) { if ((/.*(\S+)<\/FONT>\S*→\S*><\/STRONG>.*.*/) || (/.*(\S+)→\S*><\/STRONG>.*.*/) || (/.*(\S+)<\/FONT>\S*><\/STRONG>.*.*/) || (/.*(\S+)><\/STRONG>.*.*/) ) { $tmp_chatname = $1; $tmp_ipaddr = $2; if (($chatname eq $tmp_chatname) && ($tmp_ipaddr eq $ipaddr)) { $_ = ''; last; } } } &UnlockWriteComment ($roomno); } #発言ランキング累計 sub ranking { ##################################################Option:003 by Add Start # if ($memcnt eq 1) {return;} ##################################################Option:003 by Add End if ($chatname =~ /@/) {@rk_chatname = split(/@/,$chatname);} else {push (@rk_chatname,$chatname);} &LockReadRanking; $mod = '0'; foreach (@rf_list) { ($rf_chatname,$rf_ltime,$rf_mon,$rf_cnt1,$rf_cnt2,$rf_cnt3,$rf_lhost,$rf_profno) = split(/||\n/); if ($rf_chatname eq $rk_chatname[0]) { if ($rf_mon eq $mon) { $mrf_cnt = $rf_cnt1 + 1; } else { $rf_mon = $mon; $rf_cnt3 = $rf_cnt2; $rf_cnt2 = $rf_cnt1; $mrf_cnt = 1; } $rkf_item = "$rf_chatname|$date_now|$rf_mon|$mrf_cnt|$rf_cnt2|$rf_cnt3|$rf_lhost|$profno\n"; $_ = ''; $mod = '1'; last; } } if ($mod eq '0') {unshift(@rf_list,"$rk_chatname[0]|$date_now|$mon|1|0|0||\n");} else {unshift(@rf_list,$rkf_item);} &UnlockWriteRanking; } #タグ利用処理 sub tag_use { local($_) = $_[0]; ##################################################Option:005 by Add Start # 1 while s/(.*)(<(img([!-:A-~\s\=]+))>)/$1/i; ##################################################Option:005 by Add End 1 while s/(.*)(<(font[\s\w\=\#\"\'\+]+)\>(.*)\<\/font\>)/$1<$3>$4<\/FONT>/i; 1 while s/(.*)(<(b)>(.*)<\/b>)/$1$4<\/B>/i; 1 while s/(.*)(<(i)>(.*)<\/i>)/$1$4<\/I>/i; $_; } #エンコード処理 sub encode { $_[0] =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge; $_[0] =~ s/\s/+/g; $_[0]; } #アクセス制限処理 sub ng_check { $a_ng = '0'; foreach(@ng_ipa){if($ENV{'REMOTE_ADDR'} =~ /^$_/){$a_ng = '1';}} foreach(@ng_rmh){if($ENV{'REMOTE_HOST'} =~ /$_$/){$a_ng = '1';}} if($a_ng eq '1'){ print "Content-type: text/html\n"; print "Status: 404\n\n"; exit(0);} } #エラー表示 sub error { print "$title2\n"; print<<"__EOF__"; $hp_bcolor
    $_[0]
    $title - Chat室(部屋選択)へ戻る。

    __EOF__ exit(0); }