#!/usr/local/bin/perl ############################################################################## # # # thread.cgi(for hboard_std Rev 1.0) (1999-03-15) # # # ############################################################################## # # # 普通の掲示板(返事も書けるよ) # # 削除機能も付いておまっせ # # にスレッド表示させるオプションだよ # # Copyright (C) 1999 Web新撰組 # # WWW: http://www.web-shinsengumi.com # # 無断転載・複製を禁ずる # # # # 作成:萩原 逸郎(eMail:hagi2@kh.rim.or.jp) # # 監修:津田 貴史(eMail:taka@web-shinsengumi.com) # ############################################################################## ############################################################################## # 初期設定 # ここらへんをちゃんと設定してないとうまく動きません ############################################################################## # このCGIのファイル名 $cginame='./thread.cgi'; # 掲示板CGI $boardcgi='./board.cgi'; # ログファイル名 $logdata="./board.dat"; # ホームページURL $HOME='http://www.web-shinsengumi.com'; # このCGIの見出し $CGI_TITLE='お試しボード'; # 1ページに表示する行数 $display=20; #初期設定は、ここまで ##################### %FORM=&get_formdata; $start=1; if($FORM{'start'}){ $start=$FORM{'start'}; $start=1 if($start <= 0); } $end=$start + $display; if($start > 1){ $next=$start - $display; $next=1 if($next <=0); }else{ $next=0; } # HTMLヘッダ表示。 # BODYとかを編集してかっちょよくして下さい。 # print <<"EOL";からEOLまでの間は普通のhtmlです。 print <<"EOL"; Content-type: text/html $CGI_TITLE ボードに戻る

EOL # ここからスレッド表示部分 # いじっちゃ駄目だよ open(IN,"$logdata"); $i=0; while(){ $data=$_; last if($i >= $start); if($data =~ /^<\!--start/){ $i++; last if($i >= $start); } } $data=~s/\D//g; $num=$data; $dmy=;$dmy=; $name=; $dmy=; $subject=; $dmy=; $date=; $date=~s/<[^<>]+>//g; $line="" . $num . "" . $subject . " (" . $name . ")"; $line=~s/\n//g; push(@lines,$line); while(){ $data=$_; if($data =~ /^<\!--start/){ $i++; last if($i >= $end); $data=~s/\D//g; $num=$data; $dmy=;$dmy=; $name=; $dmy=; $subject=; $dmy=; $date=; $date=~s/<[^<>]+>//g; $line="" . $num . "" . $subject . " (" . $name . ")"; $line=~s/\n//g; push(@lines,$line); } } if($data =~ /^<\!--start/){ $prev=$i; }else{ $prev=0; } if($next != 0){ print "<\;--newer

\n"; } print "\n"; foreach $line (@lines){ print "\n"; } print "
$line
\n"; if($prev != 0){ print "older-->\;

\n"; } # フッタの部分。 # 適当に編集してね print <<"EOL";

EOL exit(0); #おしまい ################################################# # フォームからのデータをデコードする ################################################# sub get_formdata{ local($buffer,@pairs,%FORM,$name,$value,$ename,$disp); 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/%(\w\w)/pack("C", hex($1))/eg; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $FORM{$name} = $value; } return(%FORM); }