#!/usr/local/bin/perl #------------------------------------------------------------------------------------------------------------------ # res.cgiバージョン1.7 # 2000/12/26 # ゴンタくん作ですヽ(^ー^)ノ # というかフォームでコードはminichatからぱくりましたよレスキュー最高!ヽ(^ー^)ノ #------------------------------------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------------------------------------ #『res.cgiバージョン1.7』を、サイト『Donut Shoppe』用に改造したモノです。 #『Donut Shoppe』で利用してる『amezo.cgi』にのみ対応しています。 #------------------------------------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------------------------------------ # res.cgiの設定 #------------------------------------------------------------------------------------------------------------------ $urlbase = 'http://www.an-donut.com/'; #掲示板のURL $amezocgi = 'amezo.cgi'; #amezo.cgiの名前 $blisturl = 'blist.txt'; #掲示板設定ファイル(blist.txt)の名前 $cgi = 'res.cgi'; #このCGI $cgipath = '../'; #掲示板から見たCGIが在るフォルダ(相対パスで) $bbspath = './'; #このCGIから見た掲示板フォルダの在るフォルダ(相対パスで) $icon_on = 1; #一つ以上の板でアイコンを使う(1=yes,0=no) $upload_on = 1; #一つ以上の板でアップロード機能を使う(1=yes,0=no) $rows = 4; #内容欄の行数 #------------------------------------------------------------------------------------------------------------------ # フォームでコード #------------------------------------------------------------------------------------------------------------------ if ($ENV{PATH_INFO}) { my $p = undef; (undef,$dir,$res,$p) = split '/',$ENV{PATH_INFO}; $dir =~ tr/-_.!~'()a-zA-Z0-9+//cd; foreach ($p) { /-/ and do { ($st,$to) = $p =~ /(\d+)?-(\d+)?/; $st||=1; $to||=100000; last }; /^l/ and do { ($ls) = $p =~ /(\d+)/; last }; /^r/ and do { ($re) = $p =~ /(\d+)/; last }; /^k/ and do { ($ko) = $p =~ /(\d+)/; last }; ($at) = $p =~ /(\d+)/; } } else { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $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; $FORM{$name} = $value; } $res = $FORM{'res'}; $ls = $FORM{'ls'}; $dir = $FORM{'dir'}; $st = $FORM{'st'}; $to = $FORM{'to'}; $at = $FORM{'at'}; $re = $FORM{'re'}; $ko = $FORM{'ko'}; } if($st > $to){ $sav = $st; $st = $to; $to = $sav; } #------------------------------------------------------------------------------------------------------------------ # メインスタート #------------------------------------------------------------------------------------------------------------------ $ls && &lson; $st && &ston; $at && &aton; $re && &reon; $ko && &koresu; $res && &jumpres; $dir && &jumpdir; #####res.cgi/の時(res.cgiの内容表示) print "Content-type: text/plain\n\n"; open(R, "$cgi"); print while ; close(R); exit; #####res.cgi/$dir/の時($urlbase/$dir/index.htmlへの移動) sub jumpdir { print "Content-type: text/html; charset=Shift_JIS\n\n"; print < jump to bbs EOM exit; } ######res.cgi/$dir/$res/の時($urlbase/$dir/$res.htmlへの移動) sub jumpres { print "Content-type: text/html; charset=Shift_JIS\n\n"; print < jump to bbs EOM exit; } #####res.cgi/$dir/$res/$reの時(返信時の表示) sub reon { open(R, "$bbspath$dir/$res.html") || &error('スレッドが見つかりません.'); print "Content-type: text/html; charset=Shift_JIS\n\n"; $rows = 20; foreach () { $i++; if($re eq $i){ s/$cgipath$cgi/\.\.\/\.\.\/$cgipath$cgi/gi; if($re eq 1){ s/(.+)<\/dl>/; $recom = "> $1"; $recom =~ s/
//; $recom =~ s/
//; $recom =~ s/
画像(.*)KB\)//; $recom =~ s/
ファイル(.*)KB\)//; $recom =~ s/
(.*)<\/dl>//; $recom =~ s/
//; if ($recom =~ ""){ $recom =~ m/<\/td>
(.+)<\/td><\/tr>/; $recom = "> $1"; $recom =~ s///; } $recom =~ s/
/\n/g; $recom =~ s/\n(?!$)/\n> /g; $recom =~ s/(.+?)<\/a>/$2/g; $recom =~ s//はあとはあと/g; &saigo; } print; /
(.+)<\/dl>/; $recom = "> $1"; $recom =~ s/
//; $recom =~ s/
//; $recom =~ s/
画像(.*)KB\)//; $recom =~ s/
ファイル(.*)KB\)//; $recom =~ s/
(.*)<\/dl>//; if ($recom =~ ""){ $recom =~ m/<\/td>"; }elsif($imecolumn eq '2'){ if($upload_on eq '1'){ $imecolu = " enctype\=\"multipart\/form\-data\""; $imecolu2 = ""; }else{ $imecolu = ''; $imecolu2 = ''; } }else{ $imecolu = ''; $imecolu2 = ''; } $lastres = $resukazu - 1; if($at){ $newres = " 新着レス"; $allres = " レス全部を見る"; if($at > 50){ $bst = $at - 50; $bto = $at - 1; $backres = " 前の50個"; }elsif($at <= 50 && $at > 1){ $bto = $at - 1; if($bto == 1){ $backres = " 前レス"; }else{ $backres = " 前レスまで"; } }else{ $backres = ''; } if($lastres - $at > 50){ $nst = $at + 1; $nto = $at + 50; $nextres = " 次の50個"; }elsif($lastres - $at <= 50 && $lastres - $at > 0){ $nst = $at + 1; if($nst == $lastres){ $nextres = " 次レス"; }else{ $nextres = " 次レスから"; } }else{ $nextres = ''; } } if($st){ $newres = " 新着レス"; if($st == 1 && $to >= $lastres){ $allres = ''; }else{ $allres = " レス全部を見る"; } if($st > 50){ $bst = $st - 50; $bto = $st - 1; $backres = " 前の50個"; }elsif($st <= 50 && $st > 1){ $bto = $st - 1; if($bto == 1){ $backres = " 前レス"; }else{ $backres = " 前レスまで"; } }else{ $backres = ''; } if($lastres - $to > 50){ $nst = $to + 1; $nto = $to + 50; $nextres = " 次の50個"; }elsif($lastres - $to <= 50 && $lastres - $to > 0){ $nst = $to + 1; if($nst == $lastres){ $nextres = " 次レス"; }else{ $nextres = " 次レスから"; } }else{ $nextres = ''; } } if($re){ $newres = ''; $backres = ''; $nextres = ''; $allres = " レス全部を見る"; } if($ls){ $newres = " 新着レス"; if($lskey > 50){ $bst = $lskey - 50; $bto = $lskey - 1; $backres = " 前の50個"; $allres = " レス全部を見る"; }elsif($lskey <= 50 && $lskey > 1){ $bto = $lskey - 1; $backres = " 前レスまで"; $allres = " レス全部を見る"; }else{ $nextres = ''; $allres = ''; } } #投稿フォーム print <
(.+)<\/td><\/tr>/; $recom = "> $1"; $recom =~ s///; } $recom =~ s/
/\n/g; $recom =~ s/\n(?!$)/\n> /g; $recom =~ s/(.+?)<\/a>/$2/g; $recom =~ s//はあとはあと/g; &saigo; } if ($i eq 1){ s/
<\/td><\/tr><\/table>)(.+)/; print $1; } } exit; } #####res.cgi/$dir/$res/$atの時(レス"$at"の表示) sub aton { open(R, "$bbspath$dir/$res.html") || &error('スレッドが見つかりません.'); while(read R, $unko, 1024) { $resukazu += ($unko =~ tr/\n//); } seek (R,0,0); print "Content-type: text/html; charset=Shift_JIS\n\n"; foreach () { $i++; if($at eq $i){ s/$cgipath$cgi/\.\.\/\.\.\/$cgipath$cgi/gi; if($at eq 1){ s/<\/td><\/tr><\/table>)(.+)/; print $1; } } exit; } #####res.cgi/$dir/$res/$st-$toの時("$st"番目から"$to"番目のレスを表示) sub ston { open(R, "$bbspath$dir/$res.html") || &error('スレッドが見つかりません.'); while(read R, $unko, 1024) { $resukazu += ($unko =~ tr/\n//); } seek (R,0,0); print "Content-type: text/html; charset=Shift_JIS\n\n"; foreach () { $i++; s/$cgipath$cgi/\.\.\/\.\.\/$cgipath$cgi/gi; if($st == 1){ $i eq 1 && &saisyo; } else { $i eq 1 && &saisyo2; } $resukazu eq $i && &saigo; $st <= $i && print; $to <= $i && &saigo; } close(R); exit; } #####res.cgi/$dir/$res/$lsの時(最新レス"$ls"個を表示) sub lson { open(R, "$bbspath$dir/$res.html") || &error('スレッドが見つかりません.'); while(read R, $unko, 1024) { $resukazu += ($unko =~ tr/\n//); } seek (R,0,0); $lskey = $resukazu - $ls; print "Content-type: text/html; charset=Shift_JIS\n\n"; foreach () { $i++; s/$cgipath$cgi/\.\.\/\.\.\/$cgipath$cgi/gi; if($lskey <= 1){ $i eq 1 && &saisyo; } else { $i eq 1 && &saisyo2; } $resukazu eq $i && &saigo; $lskey <= $i && print; } close(R); exit; } #####res.cgi/$dir/$res/$koの時(一言レス時の表示) sub koresu { open(R, "$bbspath$dir/$res.html") || &error('スレッドが見つかりません.'); print "Content-type: text/html; charset=Shift_JIS\n\n"; foreach () { $i++; if($ko eq $i){ s/$cgipath$cgi/\.\.\/\.\.\/$cgipath$cgi/gi; if($ko eq 1){ s/<\/td><\/tr><\/table>)(.+)/; print $1; } } exit; } #####レス1の修正(最初の掲示板に戻るアドレスの修正) sub saisyo { s///; s/
(.*)<\/dl>//; s/
(.*)<\/dl>//; print; next; } #####最後の投稿フォーム sub saigo { open(R, "$blisturl"); while(){ chop; ($fol, $color, $title, $subtitle, $pass, $logo, $maxrescnt, $threadcnt, $pagethread, $logmax, $bbsdefname, $iconchek, $imecolumn, $idchek) = split(/,/); last if $fol eq $dir; } close(R); #アイコン欄処理 $icon_on_name ="$bbspath$dir/icon.cgi"; if($iconchek eq '1' && $icon_on eq '1' && -e "$icon_on_name"){ require "$icon_on_name"; &iconselect; $iconsyori = "
アイコン<\/div><\/td>
$iselect アイコンリスト<\/a><\/td><\/tr>"; }else{ $iconsyori = ''; } #画像URL欄&ファイル欄処理 if($imecolumn eq '1'){ $imecolu = ''; $imecolu2 = "
画像URL
ファイル
$iconsyori$imecolu2
投稿者
メール
内容
$newres$backres$nextres$allres 掲示板に戻る 上へ
EOM last; } #####最後の投稿フォームその2(一言レス時の投稿フォーム) sub saigo2 { print < EOM last; } #####エラー表示 sub error { print "Content-type: text/html\n\n

$_[0]

"; exit; }