#!/usr/local/bin/perl # ↑サーバーにあわせて、Perlのパスを書き換えてください。 # 注)Nifty,Biglobe,wakwak等、CGI専用サーバーに設置する人は、他に書き換え箇所があります # 詳しくはreadme.txtを参照してください。 # # オリジナルの著作権表示 #┌───────────────────────────────── #│ YY-BOARD v4.8 (2003/01/10) #│ Copyright(C) Kent Web 2003 #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── # # 改造版の著作権表示 #┌───────────────────────────────── #│ YY-BOARD Plus v1.54 (2003/7/16) #│ Edit by けぃ #│ kei@minicgi.net #│ http://minicgi.net/ #└───────────────────────────────── $ver = 'YYBBS v4.8'; $editver = 'ver1.54'; # 設置ついての解説や、注意点などはreadme.txtにあります。 # また、デザイン設定はyybbs.cssを編集することで行ってください。 #====================================# # 重要 or 変更する人が多そうな設定 #====================================# # 管理者パスワード (英数字で8文字以内) $pass = '505408'; # 掲示板の設置URLを、http://〜で記入。無設定でも動作しますが、携帯にURL通知や、フォームメール本文などで使います $httppath = "http://jal.s57.xrea.com/cgi-bin/yybbs1/yybbs.cgi?"; # 「戻る」をクリックした時に飛ぶURL (http://・・・ でもOK)。携帯の場合は、下でまた別に設定 $homepage = "http://jaljal.gozaru.jp/"; # ""にすると「戻る」のリンク自体表示されなくなります # 最大記事数 $max = 100; # 1ページ当たりの記事表示数 (親記事) $p_log = 10; # 壁紙を指定する場合(http://から指定) $backgif = "http://s2.poporo.net/jaljal/kabe/kabegami9.gif"; # 返信がついた親記事をトップへ移動するかどうか # 0 : 移動しない # 1 : 移動する # 2 : 書き込む人が選択可、デフォルトでは移動しない # 3 : 書き込む人が選択可、デフォルトでは移動する $topsort = 1; # 親記事とレス記事の区切り方を、デザインをオリジナルのYYBBSに近づける場合には # $line_colorに区切り線の色を入力。未記入の場合は、セルに背景色をつけて親記事とレス記事を区切ります $line_color = ''; # 例) $line_color = '#bbccff'; # 投稿日と記事No.を表示する位置 # 0:名前やタイトルの横(オリジナルと同じ位置) # 1:発言の右下(IDやランクを表示する時には推奨) $show_date = 1; #====================================# # タイトルの設定 #====================================# # タイトル名を指定 $title = "選手依頼掲示板"; # タイトルにGIF画像を使用する時 (http://から記述) $title_gif = "http://s2.poporo.net/jaljal/logo/logo4.gif"; $tg_w = 811; # GIF画像の幅 (ピクセル) $tg_h = 81; # 〃 高さ (ピクセル) #====================================# # ファイル・フォルダへのパス設定 #====================================# # スクリプトのファイル名( http://〜でもOK ) $script = './yybbs.cgi'; # ログファイルを指定 $logfile = './yybbs.log'; # jcode.plへのパス $jcodepath ='./jcode.pl'; # tool.cgiへのパス $toolpath ='./tool.cgi'; # mobile.cgiへのパス $mobpath ='./mobile.cgi'; # スタイルシートへのパス(http://〜でもOK。nifty,biglobe等では変更が必要) $stylepath = 'yybbs.css'; # JavaScriptファイルへのパス(http://〜でもOK。nifty,biglobe等では変更が必要) $jspath = 'yybbs.js'; #====================================# # アイコン・画像の設定 #====================================# # アイコンを使う (0=no 1=yes) $icon_mode = 1; # アイコンのプレビュー機能を使う(0=no 1=yes) # アイコンプレビューは、IE5.0、NN4.6およびNetscape6で動作確認しています。(JavaScriptが有効の時) $preview = '1'; # アイコンプレビュー部分の幅と高さ $i_width = '141'; # 幅 $i_height = '120'; # 高さ # アイコン画像のある「ディレクトリ」 # → フルパスなら http:// から記述する # → 最後は必ず / で閉じる $imgurl = "./aikon/"; # アイコンを定義(上下は必ずペアで)。管理アイコンや常連アイコンは、ここでは記入の必要無し @icon1 = ('6_hero85.gif','icon_5ninja2.gif','pawa85.gif','6_yamada85.gif','yamada2.gif','b_yabe100.gif', 'h_yabe100.gif','real_yabe85.gif','remake_kame85.gif', 'skame100.gif','10tomo85.gif','real_tomo85.gif','11aoi85.gif','9ninomiya85.gif', 'angel_susumu85.gif','real_susumu85.gif','real_ikari85.gif','real_mizuki85.gif','real_hatu85.gif','e_kuon85.gif', 'ezaki85.gif','hibino85.gif','inukawa85.gif','kage85.gif','karu85.gif','nekogami85.gif','real_drd85.gif',); @icon2 = ('主人公1','主人公2','主人公3','山田1','山田2','矢部1', '矢部2','矢部3','S亀田1', 'S亀田2','友沢1','友沢2','あおい','二宮', '進1','進2','守','みずき','初野','久遠','江崎','日比野', '犬河','影丸','軽井沢','猫神','Dr.ダイジョーブ'); # アイコンの著作権(みぃさんのアイコンを使う時には変更不可)。必要ない時には''にする $copyright =''; # 管理者専用アイコン機能 (0=no 1=yes) # → 【使い方】記事投稿時に「管理者アイコン」を選択し、パスワードに # 「管理用パスワード」を入力して下さい。 $my_icon = 1; # 管理者専用アイコンの「ファイル名」を指定 $my_gif = 'j.gif'; # 常連さん専用アイコンの設定。分かりにくいですねぇ〜(汗;。この設定だと # 「○○専用」は、投稿者名が「○○」の人のみ使えます # 「××専用」は、削除キーが「0000」の人のみ使えます # 「△△専用」は、投稿者名が「△△」かつ、削除キーが「1111」の人のみ使えます。 #(使用するときは、ここから下4行の最初についている「#」を消してください) @reg_icon = ("ho.gif","maki.gif","sho.gif","byo.gif","o.gif","ya.gif","c.gif","mu.gif","ti.gif","s.gif","y.gif","r.gif","h.gif","hn.gif","ryu.gif","a.gif"); # アイコンのファイル名 @icon_name = ("傍若無人新人専用","マッキー♂専用","Sho専用","屏風専用","赤い彗星専用","野球盤S(スタンダード)専用","クールボーイ専用","アンビリバボー村山専用","小さな巨人専用","ファイヤー専用","ユリパリス専用","亮専用","炎の矢部専用","反乱軍専用","リュウ@副管理人専用","アンダースロー@雑談長専用"); # アイコンの名前 @reg_name = ("傍若無人新人","マッキー♂","Sho","屏風","赤い彗星","野球盤S(スタンダード)","クールボーイ","アンビリバボー村山","小さな巨人","ファイヤー","ユリパリス","亮@雑談長","炎の矢部@雑談長","反乱軍","リュウ@副管理人","アンダースロー@雑談長"); # 投稿者名で識別したいときに記入 #@reg_pass = ("505408","",""); # 削除キーで識別したいときに記入 # アイコン一覧の表示形態 # 1 : JavaScript →開く窓のサイズは、yybbs.jsで設定 # 2 : HTML → 改造者が、勝手にこっちをデフォルトにしました^^ $ImageView = 2; # 返信ボタンに画像を使う (0=no 1=yes) $res_img = 0; $res_gif = "res.gif"; # 画像ファイル名 $res_wid = 45; # 画像の横サイズ $res_hei = 20; # 〃 縦サイズ # 書き込んだ人のURLの表示に画像を使う (0=no 1=yes) $home_icon = 1; $home_gif = "web.gif"; # 家アイコンのファイル名 $home_wid = 15; # 画像の横サイズ $home_hei = 15; # 〃 縦サイズ # メール送信フォームへのリンクに画像を使う (0=no 1=yes) $mail_icon = 1; $mail_gif = "mail.gif"; # 家アイコンのファイル名 $mail_wid = 15; # 画像の横サイズ $mail_hei = 15; # 〃 縦サイズ #====================================# # カウンタの設定 #====================================# # ミニカウンタの設置 # → 0=no 1=テキスト 2=GIF画像 $counter = 1; # カウンタ値を記録するファイル $cntfile = './count.dat'; # ミニカウンタの桁数 $mini_fig = 6; # GIFのとき:画像までのディレクトリ # → 最後は必ず / で閉じる $gif_path = "./img/"; $mini_w = 8; # 画像の横サイズ $mini_h = 12; # 画像の縦サイズ #====================================# # 記事表示の設定 #====================================# # 文字色の設定。 @COLORS = ('#883333','#dd3333','#338833','#3333FF','#C133C1','#FF80C0','#FF8040','#333388','#33aaff'); # 記事を表示するテーブルの幅 $table_width = '85%'; # コメント部分にURL(http://・・・)が記入されたら、自動リンクする (0=no 1=yes) $autolink = 1; # タグ広告挿入オプション # → の代わりに「広告タグ」を挿入する。 # → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。 $banner1 = ''; # 掲示板上部に挿入 $banner2 = ''; # 掲示板下部に挿入 # 親記事のタイトルの前につけるマーク(何も付けないなら'') $mark = '☆'; # レス記事のタイトルの前につけるマーク(何も付けないなら'') $re_mark = '◇'; # トップページ(投稿フォームの上の部分)に表示するメッセージ(タグ使用可) # この部分に新規投稿へのリンクを張ってもいいかも $mes = < 気軽に書き込みしてください EOM # ↑これは消しちゃダメ #====================================# # Plusで追加した機能を使うかどうか #====================================# # ソート機能を使う(0=no 1=yes) # トップソート有りなら番号順、無しなら最新レス順のリンクが表示されます $usesort = 1; # 管理人からのお知らせ機能を使う(0=no 1=yes) # お知らせは管理ページから設定でき、記事の一番上に固定して表示されます $use_readme = 1; # お知らせ機能を使うとき、お知らせを記録するファイル $readmefile = "read.dat"; # 『親記事一覧の表示』機能を使うとき、1ページの表示件数 $topiclog = 50; # 0にすると、この機能はOFFになります。 # 『ツリー式で表示』機能を使うとき、1ページの表示件数 $treelog = 0; # 0にすると、この機能はOFFになります。使うなら25くらい? # 「>」や「>」で始まる行は色を変える(0=no 1=yes) $quote = 1; # 何時間以内に投稿された記事にNewマークを付けるか(0にするとこの機能は使いません) $new_time = 24; # Newマークをつけるとき、Newの書式設定 $n_color = 'New!'; # 題名の色を選択可能にする(0=no 1=yes) $s_title = 1; # ↑で選択可能にしない場合、題名の色を指定 $sub_color = "#006400"; # 記事 [タイトル] 部の最大文字数 (全角文字換算) $sub_len = '16'; #====================================# # タグ利用の設定 #====================================# # オリジナルのYYBBSは、クロスサイトスクリプティングを考慮してタグを"完全使用不可"にしています。 # でも、どうしても下で設定するタグを使用したい場合には「$tag = 1;」にしてください $tag = 0; # ↑の機能を利用したとき、許可するタグを1にする。(禁止するタグは0に) $font_tag = 1; # タグ $b_tag = 1; # タグ $i_tag = 1; # タグ $u_tag = 1; # タグ $s_tag = 1; # タグ $a_tag = 1; # タグ $img_tag = 0; # タグ # 投稿フォームで、使えるタグを教えてあげる?『 タグのみ利用可』みたいに表示 $showtag = 1; # (0:no 1:yes) # &を&に・・・(0:変換しない 1:変換する) ←これは「$tag」の設定に関係ありません^^ # 変換しない場合は「♥」でハートマークの入力などができます $and_change = 1; #====================================# # 投稿フォームの設定 #====================================# # 投稿フォームの位置 # 0:記事上部(通常通り) 1:記事下部 2:別ページ 3:別ページ・目立つリンク^^ $form = 0; # 各フォームの幅を指定 $nam_wid = 26; # 名前 $sub_wid = 36; # 題名 $com_wid = 58; # コメント欄。アイコンプレビューを使わない時は、少し小さくすることをお奨めします $url_wid = 56; # URL #====================================# # ランキング機能の設定 #====================================# # ランキング機能(書き込み回数を記録)を使う(0=no 1=yes) $userank = 1; # ランキングを保存するファイル名 $rankfile = "rank.dat"; # 何日間発言がなかったら、ランキングから名前を削除する? $limittime = 180; # 投稿回数によって、クラス分けをする(0=no 1=yes) $useclass = 1; # クラスの名前。超適当に設定したので、デフォルトでは使わないで〜(爆 @class1 = ('初めまして','新人さん','知り合い','お友達','親友','常連さん','裏管理人'); # ↑のクラスになるのは、投稿回数が何回になった時? @class2 = (0,2,15,30,50,75,100); # 名前を"$adminname"で投稿すると、発言回数に関係なくクラスが"$adminclass"になるという設定(管理人の投稿を想定) $adminname = ""; # ここに管理人の名前を入力 $adminclass = "管理人"; # 発言回数に関係なく、どんな名前のクラスにする?(@class1とかぶらない名前にしてください) $adminmode = 1; # 管理人の発言回数やランキングを…(表示する:0 表示しない:1)←ほら、管理人が1位だとさめるから(笑 # 一覧表示ページで、発言回数と現在のクラスを表示する $showrank = 1; # 発言ランキング表示の際、何回以上発言した人のみ表示するか(書き込む人数が多いサイト向け) $limitrank = 0; # 0の場合は全員を表示します。 # 「@」や「@」以降の名前は無視して考える(0=no 1=yes) # Yesにすると、「○○」さんと「○○@仕事中」さんは、同じ人としてランキングをカウントされます $dev_at = 1; #====================================# # ID作成に関するの設定 #====================================# # (IDって何?という人は、readme.txtを参照) # IDの桁数(文字数)を1〜8で指定。←生IDは8桁ですが、表示するには長すぎるので、先頭3〜5桁くらいがいいと思う $id_length = 5; # 一覧表示ページで、IDを表示する $showid = 1; # 「○○」さんと「○○@仕事中」さんを、同じIDとするかどうかは、ランキングの設定にある「$dev_at」に依存します。 #====================================# # メール送信機能の設定 #====================================# # sendmailパス(下の機能を使う時には設定必須) $sendmail = "/usr/sbin/sendmail"; # フォームメール機能を使う (0=no 1=yes) # この機能を使うと、メールアドレスを非公開にしたままメールを受け取れます $formmail = 1; # フォームメールから送られたメールの、上部コメント # できれば、設置URLを書いてあげましょう $mailmes = <\n"; if ($banner1 ne "") { print "$banner1

\n"; } if ($title_gif eq '') { print "

$title
\n"; } else { print "\"$title\"\n"; } print "
\n"; # 各メニューのリンク表示 if($homepage){ print "[
戻る] \n"; } if($form == 1){ print "[新規投稿] \n"; } if($form == 2){ print "[新規投稿] \n"; } if($usesort){ if($sort){print "[通常表\示] \n";} elsif(!$topsort || $topsort == 2){print "[最新レス順] \n";} else{print "[記事No.順] \n";} } if($treelog){print "[ツリー式] \n";} if($topiclog){print "[親記事一覧] \n";} if($userank){print "[Ranking] \n";} print "[使い方] \n"; print "[ワード検索]\n"; if ($pastkey) { print "[過去ログ]\n"; } print <<"EOM"; [管理用]
$mes EOM # 投稿フォーム表示 if(!$form){ &form; } elsif($form == 3){ print"
\n"; } if($use_readme){ open(IN,"$readmefile") || &error("Open Error : $readmefile"); $data = ; close(IN); ($r_flag,$bar_bg,$bar_text,$com_bg,$com_text,$r_sub,$r_com,$r_date) = split(/<>/,$data); if($r_flag){ print "\n"; print "\n"; print "\n"; print "
$r_sub$r_date
$r_com


\n\n"; } } # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; $i=0; $flag=0; # ソート無し:必要最小限だけ読み込み if(!$sort){ while(){ if((split(/<>/))[1] eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } push(@DATA,$_); } } # ソート有り:全データを読み込んでソート実行 else{ @DATA = ; if($sort == 1){ &ressort; } if($sort == 2){ &nosort; } } close(IN); foreach(@DATA){ $_ =~ s/\s*$//; ($no,$reno,$date,$name,$mail,$sub, $comment,$url,$host,$pw,$color,$icon,$t_color,$past_time,$id,$rank,$rank2,$hyde) = split(/<>/); # オリジナルyybbsからの移行の場合 if ($t_color eq '') { $t_color = $sub_color; } # ページ処理 if($sort){ if ($reno eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } } # 題名の長さ if (length($sub) > $sub_len*2) { $sub = substr($sub,0,$sub_len*2); $sub .= "..."; } # 所定時間以内の投稿は[NEWマーク]表示 if($new_time){ if (($times - $past_time) > $new_time*3600) { $newsign = ""; } else { $newsign = "$n_color"; } } # メールのリンク作り if ($mail && !$hyde) { $name = "$name"; } if($formmail && $mail){ if ($mail_icon) { $maillink = "メール送信フォームへ"; } else { $maillink = "<Mail>"; } } else{ $maillink = ""; } # URLのリンク作り if ($home_icon && $url) { $url = "HomePage"; } elsif (!$home_icon && $url) { $url = "<HOME>"; } if (!$icon_mode) { $comment = "
$comment
"; } if (!$reno && $flag) { print "

\n\n"; $flag=1; } if (!$reno) { print "\n
"; $flag=1; } if ($reno && $line_color) { print "
\n"; } print "\n"; if ($reno) { print ""; } if($line_color){ print"\n"; if($line_color){ print"\n"; } } else { print "\n"; } print "

"; } elsif($reno){ print""; } else{ print""; } if (!$reno) { print "   $mark$sub ";} else { print "$re_mark$sub ";} print "投稿者:$name"; # ID表示 if($showid && $id){ print "  ID:$id"; } # ランキング表示 if($userank && $showrank && $rank){ if($adminmode && $rank2 && $rank2 eq $adminclass){ print "  Rank:($rank2"; } else{ print "  Rank:$rank回"; if($rank2 && $useclass){ print "($rank2)"; } print""; } } if(!$show_date){print " - $date No\.$no"; } if($maillink && $formmail){ print"  $maillink" } if($url){print "  $url";} print "   $newsign"; } elsif($reno){ print"\n"; } else{ print"\n"; } if (!$reno) { if($res_img){ print "\n"; } else{ print "
\n"; print "\n"; print "\n"; print "
\n\n"; if ($reno) { print "\n"; } # アイコンモード if ($icon_mode) { print ""; } if($l_height){ print "

\"$icon\"
$comment"; } else{ print "
$comment"; } print "
\n"; if($show_date || $show_ip){ print "
"; } if($show_ip){ print "[Host : $host]   "; } if($show_date){ print " ... $date No\.$no   "; } if($show_date || $show_ip){ print"
\n"; } } print "
\n"; $next_page = $page + $p_log; $back_page = $page - $p_log; $p_flag=0; print "

\n"; if ($back_page >= 0) { $p_flag=1; print "\n"; } if ($next_page < $i) { $p_flag=1; print "\n"; } # ページ移動ボタン表示 if ($p_flag) { print "\n"; } print "
\n"; if($sort){ print "\n"; } print "\n"; print "\n"; print "
\n"; if($sort){ print "\n"; } print "\n"; print "\n"; print "
[直接移動]\n"; $x=1; $y=0; while ($i > 0) { if ($page == $y) { print "[$x]\n"; } elsif($sort) { print "[$x]\n"; } else { print "[$x]\n"; } $x++; $y = $y + $p_log; $i = $i - $p_log; } print "
\n"; # 投稿フォーム表示(下部) if($form == 1){ print"\n";&form; } print "
\n"; print "
\n"; print "- 以下のフォームから自分の投稿記事を修正・削除することができます -
\n"; print "処理 \n"; print "記事No \n"; print "パスワード \n"; print "
\n"; # 著作権表示(削除不可) # → MakiMakiさんの画像を使用しない場合に限り、MakiMakiさんのリンクを外すことは可能 print "$banner2

\n"; print "- KENT& "; print "MakiMaki -\n"; print " / Edit ($editver) : けぃ  \n"; if($copyright){ print " Icon : $copyright -\n"; } print "

\n\n\n"; exit; } #--------------------# # 最新レスでソート # #--------------------# sub ressort{ local($no,$reno,$past_time,@tmp,@res); # 結構怪しい処理してます(汗;。詳しい人が見たら叩きたくなるんじゃないかと… $sortflag = 0; foreach $data(@DATA){ ($no,$reno,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$past_time) = split(/<>/,$data); # 親記事とレス記事分離。親記事には最終レスの時間をキーにして保存 if(!$reno){ if($sortflag){ $tmp{"$tempdata"} = $past_time2; } else{ $sortflag = 1; } $tempdata = "$data"; $past_time2 = $past_time; } else{ push(@res,$data); $past_time2 = $past_time;} } $tmp{"$tempdata"} = $past_time2; # 親記事のみソート @topic = sort {$tmp{$b} <=> $tmp{$a}} keys %tmp; @DATA=(); foreach $data(@topic){ ($no,$reno) = split(/<>/,$data); push(@DATA,$data); $sortflag=0; # 親記事にレス記事をくっつける。もっと良い方法がありそう foreach $res(@res){ ($no2,$reno2) = split(/<>/,$res); if($reno2 == $no){ $sortflag=1; push(@DATA,$res); } elsif($sortflag == 1){ last; } } } } #------------------# # 番号順でソート # #------------------# sub nosort{ local($no,$reno,@tmp,@res); # 同じく怪しい処理してます。重いような気がします(汗; foreach $data(@DATA){ ($no,$reno) = split(/<>/,$data); # 親記事とレス記事分離。親記事には記事番号をキーにして保存 if(!$reno){ $tmp{"$data"} = $no; } else{ push(@res,$data);} } # 親記事のみソート @topic = sort {$tmp{$b} <=> $tmp{$a}} keys %tmp; @DATA=(); foreach $data(@topic){ ($no,$reno) = split(/<>/,$data); push(@DATA,$data); $sortflag=0; # 親記事にレス記事をくっつける。もっと良い方法がありそう foreach $res(@res){ ($no2,$reno2) = split(/<>/,$res); if($reno2 == $no){ $sortflag=1; push(@DATA,$res); } elsif($sortflag == 1){ last; } } } } #--------------------------# # 投稿フォーム(共通部分) # #--------------------------# sub form{ local($b_name,$tagmes); # 投稿ボタン名設定 if ($mode eq "usr_edt"){ $b_name = " 修正する "; } elsif($mode eq "res" || $mode eq "new_html"){ $b_name = " 返信する "; } else{ $b_name = " 投稿する "; } # 使用可能タグを表示する場合 if($tag && $showtag){ @tag = (); if($font_tag){ $tagmes .= "<FONT> "; } if($b_tag){ $tagmes .= "<B> ";} if($i_tag){ $tagmes .= "<I> ";} if($u_tag){ $tagmes .= "<U> ";} if($s_tag){ $tagmes .= "<S> ";} if($a_tag){ $tagmes .= "<A> ";} if($img_tag){ $tagmes .= "<IMG> ";} $tagmes ="- $tagmesタグのみ利用可"; } print "
\n"; # 修正フォームの場合 if($mode eq "usr_edt"){ if($in{'pass'} && $in{'pass'} eq "$pass"){ print "\n"; } else { print "\n"; } print "\n"; print "\n"; print "\n"; } # 通常、およびレスフォーム else{ print "\n"; if($mode eq "res" || $mode eq "new_html"){print"\n"} } print< EOM if ($icon_mode && $preview){print"";} print""; # 常連者アイコンを配列に追加 if(@reg_icon){ foreach(@reg_icon){ push(@icon1,"$_"); } foreach(@icon_name){ push(@icon2,"$_"); } } # 管理者アイコンを配列に付加 if ($my_icon) { push(@icon1,"$my_gif"); push(@icon2,"管理者用"); } if ($icon_mode) { print "\n"; } if ($icon_mode && $preview){print "\n"; if($mode ne "usr_edt"){ print "\n"; print "\n";} elsif($topsort == 3){print "  トップソ\ート:\n";} else{ print "(英数字で8文字以内)\n"; } } else{ print "(英数字で8文字以内)\n"; } } if($s_title){ print "
おなまえ
Eメール EOM if($formmail){ if($chyde){ print "  非公開"; } else{ print "  非公開"; } } print <
題  名  
コメント $tagmes
URL ☆アイコン☆
イメージ\n"; if($preview){print "\n";} foreach(0 .. $#icon1) { if ($cico eq "$icon1[$_]") { print ""; if ($cico){ print "";} else{ print "";} } print "
削除キー\n"; if($mode eq "res" || $mode eq "new_html"){ if($topsort == 2){print "  トップソ\ート:
題名の色\n"; # クッキーの色情報がない場合 if ($ccol2 eq "") { $ccol2 = $COLORS[0]; } foreach (0 .. $#COLORS) { if ($ccol2 eq "$COLORS[$_]") { print ""; print "\n"; } else { print ""; print "\n"; } } } print "
本文の色\n"; # クッキーの色情報がない場合 if ($ccol eq "") { $ccol = $COLORS[0]; } foreach (0 .. $#COLORS) { if ($ccol eq "$COLORS[$_]") { print ""; print "\n"; } else { print ""; print "\n"; } } print "
\n"; print "
\n"; } #----------------# # デコード処理 # #----------------# sub decode { local($buffer, @pairs, $name, $value); $post_flag=0; if ($ENV{'REQUEST_METHOD'} eq "POST") { $post_flag=1; if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # 絵文字の除去の下準備 # 絵文字除去に関してはCGIぽん様(http://www.specters.net/cgipon/)を参考にしました if($mobile eq "i"){ $sjis = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]'; $emoji = '[\xF8\xF9][\x40-\x7E\x80-\xFC]'; } if($buffer){ require "$jcodepath"; } # jcode.plは必要時のみ @pairs = split(/&/, $buffer); foreach (@pairs) { ($name,$value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # 絵文字の除去 if($mobile eq "i"){ $value =~ s/\G((?:$sjis)*)(?:$emoji)/$1/go; } elsif($mobile eq "j"){ $value =~ s/\x1B\$[\x21-\x7A]+\x0F//g; } # 文字コードをシフトJIS変換 &jcode'convert(*value, "sjis", "", "z"); # 禁止ワード処理 if ($badword) { foreach(0..$#errword){ if($errword[$_] && index($value,$errword[$_]) >= 0){ &error("「$errword[$_]」は使用出来ない言葉です");} } } # タグ処理 if($and_change){ $value =~ s/&/&/g; } $value =~ s//>/g; $value =~ s/"/"/g; # 改行等処理 if ($name eq "comment") { $value =~ s/\r\n/
/g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; } else { $value =~ s/\r//g; $value =~ s/\n//g; } # 一括削除用 if ($name eq "del") { push(@DEL,$value); } $in{$name} = $value; } $mode = $in{'mode'}; $page = $in{'page'}; $sort = $in{'sort'}; $in{'url'} =~ s/^http\:\/\///; if ($in{'sub'} eq "") { $in{'sub'} = "無題"; } } #------------------# # クッキーを取得 # #------------------# sub get_cookie { local($key, $val, *ck); $ck = $ENV{'HTTP_COOKIE'}; foreach (split(/;/, $ck)) { ($key, $val) = split(/=/); $key =~ s/\s//g; $ck{$key} = $val; } @ck = split(/<>/, $ck{'YY_BBS'}); return (@ck); } #--------------# # エラー処理 # #--------------# sub error { if ($lockflag) { &unlock; } &header if (!$head_flag); print "

ERROR !

\n"; print "

$_[0]\n"; print "


\n\n\n"; exit; } #----------------# # カウンタ処理 # #----------------# sub counter { local($cntup,@cnts,$cnt); # 閲覧時のみカウントアップ if ($mode eq '') { $cntup=1; } else { $cntup=0; } # カウントファイルを読みこみ open(IN,"$cntfile") || &error("Open Error : $cntfile"); eval "flock(IN, 1);"; $data = ; close(IN); # IPチェックとログ破損チェック ($cnt, $ip) = split(/:/, $data); if ($addr eq $ip || $cnt eq "") { $cntup=0; } # カウントアップ if ($cntup) { $cnt++; open(OUT,"+< $cntfile") || &error("Write Error : $cntfile"); eval "flock(OUT, 2);"; truncate(OUT, 0); seek(OUT, 0, 0); print OUT "$cnt\:$addr"; close(OUT); } # 桁数調整 while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; } @cnts = split(//, $cnt); # GIFカウンタ表示 if ($counter == 2) { foreach (0 .. $#cnts) { print "\"$cnts[$_]\""; } } # テキストカウンタ表示 else { print "$cnt
\n"; } } #--------------# # ロック解除 # #--------------# sub unlock { if ($lockkey == 1) { unlink($lockfile); } elsif ($lockkey == 2) { rmdir($lockfile); } $lockflag=0; } #------------------# # HTMLのヘッダー # #------------------# sub header { $head_flag=1; print "Content-type: text/html\n\n"; print <<"EOM"; EOM if($icon_mode){ print "\n"; } print "$title\n"; print "\n"; if($backgif){ print "\n"; } else { print "\n"; } } #----------------# # ホスト名取得 # #----------------# sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq "$addr") { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } }