#!/usr/bin/perl #┌───────────────────────────────── #│ [ YY-BOARD ] #│ yybbs.cgi - 2007/01/25 #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── # 外部ファイル取? require './init.cgi'; require $jcode; # ?イン?? &decode; &axsCheck; if ($mode eq "find") { &find; } elsif ($mode eq "image") { ℑ } elsif ($mode eq "form") { &form_disp; } elsif ($mode eq "past") { &past_log; } elsif ($mode eq "howto") { require $howtopl; &howto; } elsif ($mode eq "check") { require $checkpl; ✓ } &log_view; #------------------------------------------------- # 記事表示部 #------------------------------------------------- sub log_view { # ペ?[ジ繰越 local($resfm); foreach ( keys(%in) ) { if (/^page:(\d+)$/) { $page = $1; } if (/^res:(\d+)$/) { $resfm = $1; last; } } # 返?Mフォ?[ム押下 if ($resfm) { &res_form; } # クッキ?[取得 local($cnam,$ceml,$curl,$cpwd,$cico,$ccol) = &get_cookie; if (!$curl) { $curl = 'http://'; } # ヘッダを?o力 if ($ImageView == 1) { &header('ImageUp'); } else { &header; } # カウンタ?? if ($counter) { &counter; } # 投?eキ?[ local($str_plain,$str_crypt); if ($regist_key) { require $regkeypl; ($str_plain,$str_crypt) = &pcp_makekey; } # タイトル部 print qq |
\n|; if ($banner1 ne "") { print "$banner1

\n"; } if ($t_img eq '') { print qq |$title\n|; } else { print qq |$title\n|; } print qq |


\n|; print qq |[ホ?[ムに戻る]\n|; if (!defined($list_type{$in{'list'}})) { $in{'list'} = $view_type; } if ($in{'list'} ne "thread") { print qq |[?V規投?e]\n|; } foreach ( 'thread', 'tree', 'topic' ) { next if ($in{'list'} eq $_); print qq |[$list_type{$_}]\n|; } print <留意事?] [??[ド検?] EOM # 過去?グのリンク部を表示 if ($pastkey) { print qq |[過去?グ]\n|; } print <管?用]
EOM # 投?eフォ?[ム if ($in{'list'} eq 'thread') { print qq |\n|; print qq |
\n|; print qq |\n|; print qq |\n|; require $formpl; &form($cnam,$ceml,$curl,$cpwd,$cico,$ccol,'',''); print qq |

\n|; } # 記事を展開 my $i = 0; open(IN,"$logfile") || &error("Open Error: $logfile"); my $top = ; while () { my ($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($reno eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $pglog{$in{'list'}}) { next; } # ?e記事 if (!$reno) { push(@view,$no); # レス記事 } else { $res{$reno} .= "$no,"; } # 題名の長さ if (length($sub) > $sub_len*2) { $sub = substr($sub, 0, $sub_len*2) . "..."; } # URLリンク # if ($autolink) { &auto_link($com); } $nam{$no} = $nam; $eml{$no} = $eml; $sub{$no} = $sub; $dat{$no} = $dat; $com{$no} = $com; $col{$no} = $col; $url{$no} = $url; $ico{$no} = $ico; } close(IN); # 記事表示 if ($in{'list'} eq "tree") { require $list_log_tree; &list_log_tree; } elsif ($in{'list'} eq "topic") { require $list_log_topic; &list_log_topic; } else { require $list_log_thread; &list_log_thread; } # ペ?[ジ移動ボタン表示 if ($page - $pglog{$in{'list'}} >= 0 || $page + $pglog{$in{'list'}} < $i) { print qq |

\n|; print qq |
Page:\n|; &mvbtn("$bbscgi?page=", $i, $pglog{$in{'list'}}); print qq |
\n|; } print qq |

\n|; # ユ?[ザ?ンテフォ?[ム?iトピック表示以外?j if ($in{'list'} ne "topic") { print qq |
\n|; print qq |\n|; print qq |\n|; print qq |No.\n|; print qq |暗?リキ?[\n|; print qq |
\n|; } # 著?権表示?i??恤s可?j: 但し?AMakiMakiさんの画像を使用しない??に限り?A # MakiMakiさんのリンクを外すことは可能です?B print < - YY-BOARD - icon:MakiMaki
EOM exit; } #------------------------------------------------- # 返?Mフォ?[ム #------------------------------------------------- sub res_form { # 投?eキ?[ local($str_plain,$str_crypt); if ($regist_key) { require $regkeypl; ($str_plain,$str_crypt) = &pcp_makekey; } $in{'no'} = $resfm; # クッキ?[を取得 local($cnam,$ceml,$curl,$cpwd,$cico,$ccol) = &get_cookie; if (!$curl) { $curl = 'http://'; } # ?グを読み?桙ン my $flg; open(IN,"$logfile") || &error("Open Error: $logfile"); my $top = ; # ヘッダを?o力 if ($ImageView == 1) { &header('ImageUp'); } else { &header; } # 関連記事?o力 print < ?、以下は記事No.$in{'no'} に関する返?Mフォ?[ムです?B
EOM while () { my ($no,$reno,$dat,$nam,$eml,$sub,$com,$url) = split(/<>/); if ($in{'no'} == $no && $reno) { $flg++; } if ($in{'no'} == $no || $in{'no'} == $reno) { if ($in{'no'} == $no) { $resub = $sub; } if ($url) { $url = "&lt;Home&gt;"; } if ($reno) { print ''; } print "

$sub\n"; print "投?e者?F$nam 投?e日?F$dat $url "; print "No.$no

\n"; print "
$com\n"; } } close(IN); if ($flg) { &error("不?ウな返?M要?です"); } # タイトル名 if ($resub !~ /^Re\:/) { $resub = "Re: $resub"; } print <<"EOM";

EOM require $formpl; &form($cnam,$ceml,$curl,$cpwd,$cico,$ccol,$resub,''); print < EOM exit; } #------------------------------------------------- # ??[ド検? #------------------------------------------------- sub find { &header; print <
  • キ?[??[ドを入力し?A?u???v?u表\示?vを選択して検?ボタンを押して下さい?B
  • キ?[??[ドはスペ?[スで区?リって複?博w定することができます?B

    キ?[??[ド ?? 表\示
EOM # 検?実?s if ($in{'word'} ne "") { ($i,$next,$back) = &search($logfile,$in{'word'},$in{'view'},$in{'cond'}); $enwd = &url_enc($in{'word'}); if ($back >= 0) { print "[前の$in{'view'}?]\n"; } if ($next < $i) { print "[次の$in{'view'}?]\n"; } } print "\n"; exit; } #------------------------------------------------- # 投?e画面 #------------------------------------------------- sub form_disp { # 投?eキ?[ local($str_plain,$str_crypt); if ($regist_key) { require $regkeypl; ($str_plain,$str_crypt) = &pcp_makekey; } # クッキ?[を取得 local($cnam,$ceml,$curl,$cpwd,$cico,$ccol) = &get_cookie; if (!$curl) { $curl = 'http://'; } # ヘッダを?o力 if ($ImageView == 1) { &header('ImageUp'); } else { &header; } # 関連記事?o力 print < ?・?V規投?eフォ?[ム
EOM print <<"EOM";
EOM require $formpl; &form($cnam,$ceml,$curl,$cpwd,$cico,$ccol,'',''); print < EOM exit; } #------------------------------------------------- # 過去?グ #------------------------------------------------- sub past_log { open(IN,"$nofile") || &error("Open Error: $nofile"); my $num = ; close(IN); $in{'log'} =~ s/\D//g; if (!$in{'log'}) { $in{'log'} = $num; } &header; print <<"EOM";
過去?グ
キ?[??[ド ?? 表\示
EOM my $file = sprintf("%s/%04d.cgi", $pastdir,$in{'log'}); # 検??? if ($in{'word'} ne "") { # 検? my ($i, $next, $back) = &search($file, $in{'word'}, $in{'view'}, $in{'cond'}, 'past'); # ペ?[ジ繰り越し my $enwd = &url_enc($in{'word'}); if ($back >= 0) { print "[前の$in{'view'}?]\n"; } if ($next < $i) { print "[次の$in{'view'}?]\n"; } print "\n"; exit; } print "
\n"; my $i = 0; open(IN,"$file") || &error("Open Error: $file"); while () { my ($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($re eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $pastView) { next; } if ($eml) { $nam = "$nam"; } if ($url) { $url = "&lt;URL&gt;"; } if ($re eq "") { print "

"; } else { print "
"; } print qq |$sub|; print qq |$nam - $dat $url No.$no

\n|; if ($ico) { print qq ||; print qq ||; print qq |
$com
\n|; } else { print qq |
$com
\n|; } } close(IN); print <
EOM # ペ?[ジ移動ボタン表示 if ($page - $pastView >= 0 || $page + $pastView < $i) { &mvbtn("$bbscgi?mode=$mode&log=$in{'log'}&page=", $i, $pastView); } print < EOM exit; } #------------------------------------------------- # カウンタ?? #------------------------------------------------- sub counter { local($count, $cntup, @count); # 閲覧時のみカウントアップ if ($mode eq '') { $cntup = 1; } else { $cntup = 0; } # カウントファイルを読みこみ open(LOG,"+< $cntfile") || &error("Open Error: $cntfile"); eval "flock(LOG, 2);"; $count = ; # IPチェックと?グ破損チェック local($cnt, $ip) = split(/:/, $count); if ($addr eq $ip || $cnt eq "") { $cntup = 0; } # カウントアップ if ($cntup) { $cnt++; truncate(LOG, 0); seek(LOG, 0, 0); print LOG "$cnt:$addr"; } close(LOG); # 桁?白イ?ョ while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; } @count = split(//, $cnt); # GIFカウンタ表示 if ($counter == 2) { foreach (0 .. $#count) { print "\"$count[$_]\""; } # テキストカウンタ表示 } else { print "$cnt
\n"; } } #------------------------------------------------- # 画像イ??[ジ表示 #------------------------------------------------- sub image { my @ico1 = split(/\s+/, $ico1); my @ico2 = split(/\s+/, $ico2); &header; print <

画像イ??[ジ

EOM my $i = 0; foreach (0 .. $#ico1) { $i++; if ($i % 5 == 1) { print "\n"; } print qq |\n|; if ($i % 5 == 0) { print "\n"; } } while ( $i % 5 != 0 ) { print qq ||; $i++; } print <
EOM exit; } #------------------------------------------------- # 移動ボタン #------------------------------------------------- sub mvbtn { local($link,$i,$view) = @_; local($start,$end,$x,$y,$bk_bl,$fw_bl); if ($in{'bl'}) { $start = $in{'bl'}*10 + 1; $end = $start + 9; } else { $in{'bl'} = 0; $start = 1; $end = 10; } $x = 1; $y = 0; while ($i > 0) { # 当ペ?[ジ if ($page == $y) { print qq {| $x\n}; # ?リ替ペ?[ジ } elsif ($x >= $start && $x <= $end) { print "| $x\n"; # 前ブ?ック } elsif ($x == $start-1) { $bk_bl = $in{'bl'}-1; print "| ?ゥ\n"; # 次ブ?ック } elsif ($x == $end+1) { $fw_bl = $in{'bl'}+1; print "| ?ィ\n"; } $x++; $y += $view; $i -= $view; } print "|\n"; } #------------------------------------------------- # 検??? #------------------------------------------------- sub search { local($file, $word, $view, $cond, $job) = @_; # キ?[??[ドを配列化 $word =~ s/\x81\x40/ /g; my @wd = split(/\s+/, $word); # ファイル展開 print "
\n"; my $i = 0; open(IN,"$file") || &error("Open Error: $file"); my $top = if ($job ne "past"); while () { my $flg; foreach my $wd (@wd) { if (index($_,$wd) >= 0) { $flg++; if ($cond eq 'OR') { last; } } else { if ($cond eq 'AND') { $flg = 0; last; } } } # ヒットした?? if ($flg) { $i++; next if ($i < $page + 1); next if ($i > $page + $view); my ($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = split(/<>/); if ($eml) { $nam = "$nam"; } if ($url) { $url = "&lt;Home&gt;"; } # 結果を表示 print "

[$no] $sub "; print "投?e者?F$nam 投?e日?F$dat $url

\n"; print "
$com\n"; } } close(IN); print <
検?結果?F$i?
EOM my $next = $page + $view; my $back = $page - $view; return ($i, $next, $back); } #------------------------------------------------- # URLエンコ?[ド #------------------------------------------------- sub url_enc { local($_) = @_; s/(\W)/'%' . unpack('H2', $1)/eg; s/\s/+/g; $_; }
$ico1[$_]$ico2[$_]