#!/usr/local/bin/perl use strict; require 'jcode.pl'; ### pageview.cgi ver 2.04 (2001/07/10) #べーじびゅー! #================================================== # システム関連(タイムゾーン・シグナル) #================================================== #タイムゾーンをセットする { $ENV{'TZ'} = "JST-9"; } #シグナル対処関数 sub SigExit { exit(0); } #対応シグナル { $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "SigExit"; } #================================================== # 初期情報の取得(POST) #================================================== { use vars qw(%FORM); my ($buffer, @pairs, $name, $value); if($ENV{'REQUEST_METHOD'} eq 'POST'){ read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }else{ $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split /=/; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg; $FORM{$name} = $value; } } #================================================== # 設定 #================================================== { # 各種PATH生成 use vars qw(%SETTING); use vars qw($WWWPATH); use vars qw($PATH); use vars qw($DATPATH); use vars qw($TEMPPATH); use vars qw($IMODEPATH); use vars qw($npf); $PATH = "../" . $FORM{'bbs'} . "/"; $DATPATH = $PATH . "dat/"; $TEMPPATH = $PATH . "html/"; $IMODEPATH = $PATH . "i/"; use vars qw($NOWTIME); $NOWTIME = time; } #================================================== # 初期情報の取得(設定ファイル) #================================================== #設定ファイルを読む { # 設定ファイルを読む my ($m_pass,$m_key,$m_value); $m_pass = $PATH . "SETTING.TXT"; if(-e $m_pass){ open(FILE,$m_pass); foreach (){ chop; ($m_key,$m_value) = split /=/; $SETTING{$m_key} = $m_value; } close(FILE); }else{ #設定ファイルがない(ERROR) DispError("ERROR!","ユーザー設定が消失しています!$m_pass"); } # 欠落情報の補完 unless($SETTING{'BBS_THREAD_NUMBER'}){$SETTING{'BBS_THREAD_NUMBER'}=20;} unless($SETTING{'BBS_CONTENTS_NUMBER'}){$SETTING{'BBS_CONTENTS_NUMBER'}=10;} unless($SETTING{'BBS_LINE_NUMBER'}){$SETTING{'BBS_LINE_NUMBER'} = 30;} unless($SETTING{'BBS_MAX_MENU_THREAD'}){$SETTING{'BBS_MAX_MENU_THREAD'}=100;} unless($SETTING{'BBS_BG_COLOR'}){$SETTING{'BBS_BG_COLOR'}="#FFFFFF";} unless($SETTING{'BBS_MENU_COLOR'}){$SETTING{'BBS_MENU_COLOR'}="#CCFFCC";} unless($SETTING{'BBS_MAKETHREAD_COLOR'}){$SETTING{'BBS_MAKETHREAD_COLOR'}="#CCFFCC";} unless($SETTING{'BBS_THREAD_COLOR'}){$SETTING{'BBS_THREAD_COLOR'}="#EFEFEF";} unless($SETTING{'BBS_SUBJECT_COLOR'}){$SETTING{'BBS_SUBJECT_COLOR'}="#FF0000";} unless($SETTING{'BBS_TEXT_COLOR'}){$SETTING{'BBS_TEXT_COLOR'}="#000000";} unless($SETTING{'BBS_NAME_COLOR'}){$SETTING{'BBS_NAME_COLOR'}="#008800";} unless($SETTING{'BBS_LINK_COLOR'}){$SETTING{'BBS_LINK_COLOR'}="#0000FF";} unless($SETTING{'BBS_ALINK_COLOR'}){$SETTING{'BBS_ALINK_COLOR'}="#FF0000";} unless($SETTING{'BBS_VLINK_COLOR'}){$SETTING{'BBS_VLINK_COLOR'}="#660099";} unless($SETTING{'BBS_TITLE_COLOR'}){$SETTING{'BBS_TITLE_COLOR'}="#000000";} } #================================================== # ファイル操作(サブジェクトファイル読み込み) #================================================== { my $subject = $PATH . "subject.txt"; use vars qw(@PAGEFILE); use vars qw(%SUBJECT); use vars qw($FILENUM); my ($file, $value,$filename); # サブジェクトファイルを読み込む open(SUBR,"<$subject"); foreach(){ chop; ($file, $value) = split /<>/; unless($file){next;} $filename = $DATPATH . $file; if(-e $filename){ # datが存在する場合順番に追加 push(@PAGEFILE,$file); $SUBJECT{$file} = $value; } } close(SUBR); # サブジェクト数を取得 $FILENUM=@PAGEFILE; #パーミッション調整 chmod(0666,$subject); } #================================================== # もしページが1ならトップに戻す #================================================== { my $lp=int($FILENUM / $SETTING{"BBS_THREAD_NUMBER"}); if($FILENUM != $lp * $SETTING{"BBS_THREAD_NUMBER"}){ $lp++; } if($FORM{'page'} eq '' || $FORM{'page'} > $lp || $FORM{'page'} == 1 && $FORM{'imode'} ne 'true'){ $PATH .= "index.html"; if ($SETTING{'BBS_LOCATION_CHECK'} eq 'checked') { print "Location: $PATH \n\n"; } else { print "Content-Type: text/html; charset=shift_jis\n\n"; print < 移動中 移動中 EOF } exit; } if($FORM{'page'} =~/\D/ || $FORM{'page'} <= 0){DispError("ERROR!","ページ指定が不正です! ")} } #================================================== # i-mode #================================================== { if($FORM{'imode'} eq 'true'){ # 一括書き込み print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "$SETTING{'BBS_TITLE'}\n"; print "\n"; print "おんぷちゃんねる i-mode トップ
"; print "$SETTING{'BBS_TITLE'} : page $FORM{'page'}
"; my ($count,$key,$top,$end,$subtitle); $top = (($FORM{'page'}-1)*30)+1; $end = $top+30; if($end>$FILENUM){$end=$FILENUM+1;} for($count=$top;$count<$end;$count++){ @PAGEFILE[$count-1]=~ /(\d*)\.dat/; $key = $1; $subtitle = $SUBJECT{@PAGEFILE[$count-1]}; &jcode::z2h_sjis(\$subtitle); print "$count: $subtitle
"; } $count=@PAGEFILE; my $nextpage = $FORM{'page'} + 1; my $prevpage = $FORM{'page'} - 1; print "
"; if ($end < $FILENUM){ print " "; } if ($top > 30){ print " "; } print "最初\n"; print "
\n"; exit; } } #================================================== # 本HTML吐き処理 #================================================== { print "Content-type: text/html\n\n"; print < $SETTING{'BBS_TITLE'} EOF if($SETTING{'BBS_TITLE_PICTURE'}){ print "
"; if($SETTING{'BBS_TITLE_LINK'}){ print ""; } print ""; if($SETTING{'BBS_TITLE_LINK'}){ print ""; } print "
"; }else{ print "
"; if($SETTING{'BBS_TITLE_LINK'}){ print ""; } # print "

$SETTING{'BBS_TITLE'}

"; if($SETTING{'BBS_TITLE_LINK'}){ print "
"; } print "
"; } print "\n"; print<
\n"; print " \n"; if ($SETTING{'BBS_PASSWORD_CHECK'} ne "checked"){ print<
$SETTING{'BBS_TITLE'}
EOF if ($SETTING{'BBS_PROXY_CHECK'} eq "checked") { print " ■PROXY規制中■
\n"; } print "
"; &HTM("../right.txt"); print<
EOF &HTM($PATH."head.txt"); print<この板の1スレッドの制限は最大$SETTING{'BBS_MAX_RES_COUNT'}レス、または最大$SETTING{'BBS_MAX_RES_SIZE'}KBになっています。
EOF print "
タイトル:  
名前: E-mail(省略可)
内容:
EOF }else{ print< EOF } &HTM("../bottom.txt"); print "\n\n"; $npf=0; my $PAGE = $FORM{'page'}; my $frontpage=$PAGE-1; if($frontpage>=1){ print "前のページ"; }else{ my $lp=int($FILENUM / $SETTING{"BBS_THREAD_NUMBER"}); if($FILENUM != $lp * $SETTING{"BBS_THREAD_NUMBER"}){ $lp++; } print " 最後のページ"; } my $nextpage=$PAGE+1; if($FILENUM>$PAGE*$SETTING{"BBS_THREAD_NUMBER"}){ $npf=1; print " 次のページ"; }else{ print " 最初のページ"; } print " 過去ログ"; print " i-mode"; print " FAQ"; print " リロード\n"; $PAGE--; if($PAGE<0){ $PAGE=0; } print <
EOF my $TOPFILE = $PAGE * $SETTING{"BBS_THREAD_NUMBER"}; my $ENDFILE = $TOPFILE+$SETTING{"BBS_MAX_MENU_THREAD"}; if($ENDFILE>$FILENUM){ $ENDFILE=$FILENUM; } #スレッド一覧を吐き出す my($count,$key,$dat,$subtemp); for($count=$TOPFILE+1;$count<=$ENDFILE;$count++){ $dat = $key = $PAGEFILE[$count-1]; $key =~ /(.+)\.dat/; $key = $1; unless($1){next;} my $subtemp = $SUBJECT{$dat}; if($SETTING{"BBS_THREAD_NUMBER"} > $count - $TOPFILE-1){ print "$count : $subtemp \n"; }else{ print "$count : $subtemp \n"; } } print "\n"; print "

\n"; my $headad = "../headad.txt"; if(-e $headad){ open(IN, "$headad"); my @headad = ; close(IN); if (@headad){ print "
\n"; foreach(@headad){print} print "

\n"; } } &HTM("../headad2.txt"); $ENDFILE = $TOPFILE+$SETTING{"BBS_THREAD_NUMBER"}; if($ENDFILE>$FILENUM){ $ENDFILE=$FILENUM; } ### スレッドを吐き出す my ($front, $next, $ancnum, $dap, $first, $line); for(my $contnum = $TOPFILE;$contnum < $ENDFILE;$contnum++){ $front=$contnum; $next=$contnum+2; if($front==$TOPFILE){$front=$ENDFILE;} if($next>$ENDFILE){$next=$TOPFILE+1;} $ancnum=$contnum+1; $dap = $PAGEFILE[$contnum]; $dap =~ s/([^\.]*)\.dat/$1/; print "\n"; open(IN, "$TEMPPATH$dap.html"); $first=; $first =~ s/\$ANCOR/$ancnum/g; $first =~ s/\$FRONT/$front/g; $first =~ s/\$NEXT/$next/g; print $first; print while ; close(IN); print < レスを全部読む 最新レス50 レス1-100 掲示板のトップへ リロード
EOF } $FORM{'page'}=$FORM{'page'}+1; if($npf){ print < 次のページ EOF } print "
"; print "

"; &HTM("../bottom_ad.txt"); print "\n"; print "
"; exit; } sub HTM { my ($file,$h) = @_; if($h){select(HTM);} if(-e $file){ open(IN, "$file"); print while ;close(IN); } if($h){select(STDOUT);} } #ロケーションジャンプ(エラー処理) sub LocationJump{ print "Location: http://2ch.net/ \n\n"; exit; } #エラー画面(エラー処理) #DispError(TITLE,TOPIC); sub DispError{ my $title=$_[0]; my $topic=$_[1]; print "Content-type: text/html; charset=shift_jis\n\n"; #----------------------------------------------------------------------- print < $title $topic
こちらでリロードしてください。 GO!
EOF #----------------------------------------------------------------------- exit; }