#!/usr/bin/perl5 -I /usr/home/kmc/public_html/proj/tuitate/board # # むっちゃてきとーな掲示板システム 98/4/16 by hgw # require 'jcode.pl'; # データの受け取り if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } # 変数のデコード @part = split('&', $str); foreach $i (@part) { $args++; ($variable, $value) = split('=', $i); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; &jcode'convert(*value, 'euc'); $value =~ s//>/g; $value =~ s/\015\012/\012/g; $value =~ s/\015/\012/g; $cgi{$variable} = $value; } $mode = $cgi{"mode"}; $start = $cgi{"start"}; $title = $cgi{"title"}; $name = $cgi{"name"}; $email = $cgi{"email"}; if($cgi{"wwwpage"} ne "") { $wwwpage = $cgi{"wwwpage"}; } else { $wwwpage = "http://"; } $text = $cgi{"text"}; # 初期化 $nkf = "/usr/local/bin/nkf -j"; $www_home = (getpwnam("kmc"))[7]."/public_html"; # for Debug #$start = 1; # 他の掲示板を作りたい方はここからを変更して下さい # (余裕があったら header や footer を変えてみるといいです) $data_file = $www_home."/proj/tuitate/board/local.boarddata"; # 内容を保存する場所 $boardtitle = "ついたて将棋掲示板"; # 掲示板の名前 $comment = "ついたて将棋に関して御意見や御感想などを記入してもらえると嬉しいです。"; $bgcolor = "#ffcc99"; # 背景色 $textcolor = "#000000"; # 文字の色 $linkcolor = "#0000ff"; # リンクの色 $numbercolor = "#ffffff"; # 番号の色 $titlecolor = "#ffff00"; # 題名の色 $titlebgcolor = "#000066"; # 題名の背景色 $namecolor = "#ff0000"; # 名前の色 $endterm = ""; # データ終了文字列 $viewnum = "20"; # 一度に表示する数 $elemnum = "7"; # 要素全体の数 # 出力開始 open(BROWSE, "| $nkf"); select(BROWSE); print "Content-type: text/html\n\n"; # 何も引数が無い場合はとりあえず表示する $mode = "view" if($mode eq ""); # 掲示板の内容を表示 if($mode eq "view") { &searchnum; &header(0); &boardview($start,$viewnum); &footer; } # 掲示板に書き込むフォームを出力 if($mode eq "form") { &header(0); &printform; &footer; } # 掲示板に書き込むフォームを出力 if($mode eq "input") { &searchnum; &checkform; } exit(1); # 先頭の部分を表示 sub header { my($param) = @_; print < $boardtitle EOF print("") if($param == 1); print <

$boardtitle

$comment

EOF } # 掲示板の中身を表示 sub boardview { my($start, $num) = @_; my($tmpnum); print <
EOF $tmpnum = $start + $viewnum; print <= $start + 20);
EOF $tmpnum = $start - $viewnum; print <= $viewnum);
EOF print("
"); &skipdata($allnum - $start - $num); &getdata($num,$allnum - $start - $num); &viewdata($num); } # 必要のある場所まで飛ばす sub skipdata { my($skip) = @_; my $count; unless(open(DATA, $data_file)) { print "ERROR : データファイルが開けません !!"; return; } return if($skip <= 0); $count = 0; while() { chomp; $count++ if($_ eq ""); return if($count == $skip); } } # データを取り出す sub getdata { my($num,$startnum) = @_; my $count, $element; $count = 0; $count -= $startnum if($startnum < 0); while() { chomp; if($_ eq $endterm) { $element = 0; $count++; $data[$elemnum * $count + $elemnum - 1] = ""; return if($count == $num); next; } if($element != $elemnum - 1) { $data[$elemnum * $count + $element] = $_; $element++; } else { $data[$elemnum * $count + $element] .= ($_."
\n"); } } close(DATA); } # データを表示する sub viewdata { my($num) = @_; my $count; $count = 0; for($count = $num - 1; $count >= 0; $count--) { &printdata(@data[($count * $elemnum) .. ($count + 1) * $elemnum - 1]); } } sub printdata { my($number, $title, $name, $email, $wwwpage, $date, $text) = @_; return if($text eq ""); print < $number: $title

$name EOF printf("(\n$email\n)\n") if($email ne ""); printf(":\n$wwwpage\n\n") if($wwwpage ne ""); printf("

$date
\n"); printf("

\n
\n%s
\n
\n",$text); } # フォームを出力する sub printform { print < 題名 :
お名前 :
E-mail :
WWW Page :
御意見、御感想はこちらへ↓


掲示板の内容を再び見る
EOF } sub footer { print <ついたて将棋 WWW Site に戻る EOF } sub searchnum { unless(open(DATA, $data_file)) { $allnum = 0; return; } while() { chomp; $allnum++ if($_ eq ""); } close(DATA); } sub checkform { if($text eq "") { &header(0); printf("意見は必ず記入して下さい"); &printform; } else { &writedata($number ,$title, $name, $email, $wwwpage, $text); &header(1); $text =~ s/\012/
\012/g; print <ありがとうございます。以下の内容で登録されました。
EOF &printdata($number ,$title, $name, $email, $wwwpage, $date, $text); print < EOF } } sub writedata { unless(symlink($data_file,$data_file."\.lock")) { &header(0); printf("掲示板の書き込みに失敗しました。"); return; } $title="(no title)" if($title eq ""); $name="(no name)" if($name eq ""); $number = sprintf("%05d",$allnum+1); $wwwpage = "" if($wwwpage eq "http://"); @datelocal = localtime; $date = $datelocal[5]."年".($datelocal[4]+1)."月".$datelocal[3]."日 ".$datelocal[2]."時".$datelocal[1]."分"; open(DATA,">> $data_file"); printf DATA "%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n", $number,$title,$name,$email,$wwwpage,$date,$text; close(DATA); chmod(0666,"$data_file"); unlink($data_file."\.lock"); }