#┌───────────────────────────────── #│ CLIP BOARD v1.9 (2003/10/23) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── #┌───────────────────────────────── #│Powered by Kent Lab #|[KentLab:KL00040] #│http://kent-Lab.com/ #└───────────────────────────────── # # 戻り先のURL (index.htmlなど) $home = "./petit.cgi"; #------------------------------------------------- # 記事表示 #------------------------------------------------- sub html { # クッキーを取得 local($cnam,$cpref,$ceml,$curl,$cpwd,$ccol) = &get_cookie; local($no,$reno,$date,$name,$pref,$mail,$sub,$comment,$url,$host,$pw,$color); if ($page eq "") { $page = 0; } # 出力サイズ初期化 $size = 0; # 投稿フォーム if ($in{'job'} eq "form") { local($resub,$recom); # レス if ($in{'no'}) { open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$reno,$date,$pref,$name,$mail,$sub,$comment) = split(/<>/); last if ($in{'no'} == $no); } close(IN); if ($sub =~ /^Re:/) { $resub = $sub; } else { $resub = "Re: $sub"; } # 標準タイプは本文を引用 # if ($bbstype == 1) { $recom = "> $com"; $recom =~ s/
/\n> /ig; # } # 絵文字復元 $resub =~ s/<//g; $resub = &o2ije($resub); $recom = &o2ije($recom); } &data("
\n"); &data("\n"); &data("\n"); &data("\n"); if ($in{'no'} > 0) { &data("\n"); } &data("おなまえ

\n"); &data("Eメール

\n"); &data("URL

\n"); &data("タイトル

\n"); &data("コメント

\n"); &data("投稿地区
\n"); &data("
\n"); &data("削除キー

\n"); &data("
\n"); &data("戻る\n\n"); # 出力 &header_tel($size); print @data; exit; # 返信フォーム }elsif ($in{'job'} eq "res_form") { local($no,$reno,$date,$name,$pref,$mail,$sub,$comment,$url,$host,$pw,$color); # ログ読込 $f=0; open(IN,"$logfile") || &error("Open Error: $logfile"); @line = ; $line = shift(@line); close(IN); # 関連記事出力 &data("戻る
\n"); &data("- 以下は、記事NO. $in{'no'} に関する
"); &data(" 返信フォーム です -
\n"); $flag=0; foreach (@line) { ($no,$reno,$date,$name,$pref,$mail,$sub,$comment,$url,$host,$pw,$color) = split(/<>/); if ($in{'no'} == $no) { last; } } if ($in{'no'} == $no && $reno) { $f++; } if ($f) { &error("不正な返信要求です"); } # 投稿地区 $prefnm=&get_prfname($pref); if (!$sub) { $sub = "無題"; } if (!$reno) { $com = "
$comment
"; } if ($in{'no'} == $no) { $resub = $sub; } if ($url) { $url = "<HOME>"; } if ($reno && !$flag) { &data("
\n"); $flag=1; } &data("$resub
投稿者:$name
"); &data("投稿地区:$prefnm
投稿日:$date No.$no

\n"); # タイトル名 if ($resub !~ /^Re\:/) { $resub = "Re\: $resub"; } # &data("\n"); ($cnam,$cpref,$ceml,$curl,$cpwd,$ccol) = &get_cookie; &data("
\n"); &data("\n"); &data("\n"); &data("おなまえ
\n"); &data("
\n"); &data("Eメール
\n"); &data("
\n"); &data("コメント

\n"); &data("暗証キー

\n"); &data("
\n"); &data("戻る\n\n"); # 出力 &header_tel($size); print @data; exit; # メールマガジンフォーム } elsif ($in{'job'} eq "maga") { local($mno)=0; open(IN,"$memfile") || &error("Open Error : $memfile"); ++$mno while(); close(IN); &data("戻る
\n"); &data("メールアドレス登録
\n"); &data("

>講読の登録・解除・変更


\n"); &data("▼新着投稿メールマガジンの「登録」

\n"); # 登録件数をチェック if ($no >= $mem_max){ &data("- 現在メールアドレスの登録はできません -\n"); }else{ &data("
\n"); &data("\n"); &data("メールアドレス(半角):
\n"); &data("\n"); &data("
\n"); } &data("

▼新着投稿メールマガジンの「解除」

\n"); &data("

\n"); &data("\n"); &data("メールアドレス(半角):
\n"); &data("\n"); &data("


\n"); &data("*1 : 登録したアドレスを「変更」する場合は、一旦「解除」した後、新規に「登録」して下さい。
\n"); # &data("*2 : セキュリティ上、同一ホストからの連続登録はできません。\n"); &data("\n"); # 出力 &header_tel($size); print @data; exit; } &data("$title
\n"); &data("$emo1戻る
\n"); &data("$emo2投稿
\n"); # &data("$emo3メールマガジン
\n"); # &data("$emo4管理\n"); if ($page eq "") { $page = 0; } $i=0; $flag=0; $rf_flag=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { $rf_flag=1; ($no,$reno,$date,$name,$pref,$mail,$sub,$comment,$url,$host,$pw,$color) = split(/<>/); if ($reno eq "") { $i++; } if ($tno) { if ($tno!=$no) { next; } } if ($i < $page + 1) { next; } if ($i > $page + $p_log2) { next; } push(@view,$_); if ($tno){ if ($tno==$no) { last; } } } close(IN); foreach (@view) { ($no,$reno,$date,$name,$pref,$mail,$sub,$comment,$url,$host,$pw,$color) = split(/<>/); if ($mail) { $name = "$name"; } if ($autolink) { &auto_link($comment); } if ($type eq 'j') { $sub = &i2j($sub); $name = &i2j($name); $comment = &i2j($comment); $sub = &e2j($sub); $name = &e2j($name); $comment = &e2j($comment); } elsif ($type eq 'i') { $sub = &j2i($sub); $name = &j2i($name); $comment = &j2i($comment); $sub = &e2i($sub); $name = &e2i($name); $comment = &e2i($comment); } elsif ($type eq 'e') { $sub = &j2e($sub, $model); $name = &j2e($name, $model); $comment = &j2e($comment, $model); $sub = &i2e($sub, $model); $name = &i2e($name, $model); $comment = &i2e($comment, $model); } $sub = &o2ije($sub); $name = &o2ije($name); $comment = &o2ije($comment); ## if (!$reno) { $flag=1; } if ($reno && !$res_flag){ &data("
\n"); $res_flag=0; }elsif (!$reno && $res_flag){ $res_flag=0; } if (!$reno){ $prefnm = &get_prfname($pref); $res_num = $no; &data("
$sub
\n"); &data("$name
$prefnm
$date "); &data("No\.$no\n"); $url =~ s/^http\:\/\///; if ($url ne "") { &data("URL"); } &data("
$comment
"); # 返信フォーム &data("返信\n"); $flag=1; }else{ &data("$name > $comment ($date)"); &data("No\.$no
\n"); } ## } close(IN); # if ($reno && $flag){ # 返信フォーム # &data("返信\n"); # } &data("
\n"); $next = $page + $p_log2; $back = $page - $p_log2; if ($back >= 0) { &data("$emo4
"); } if ($next < $i) { &data("$emo5\n"); } # 著作権表記(削除不可) &data("
"); &data("PetitBoard
\n"); &data("\n"); # 出力 &header_tel($size); print @data; exit; } #------------------------------------------------- # HTMLヘッダ #------------------------------------------------- sub header_tel { local($len) = @_; if ($headflag) { return; } local($head) = "\n$meta\n"; $head .= "$title\n"; $head .= "\n"; print "Content-Type: text/html\n\n"; if ($cont_len && $len > 0) { $len += length($head); print "Content-Length: $len\n"; } print "\n"; print $head; $headflag=1; } #------------------------------------------------- # 出力データ #------------------------------------------------- sub data { $size += length($_[0]); push(@data,$_[0]); } #------------------------------------------------- # フォームデコード #------------------------------------------------- sub decode_tel { local($buf,$key,$val); $post_flag=0; if ($ENV{'REQUEST_METHOD'} eq "POST") { $post_flag=1; if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量超過"); } read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } undef(%in); foreach ( split(/&/, $buf) ) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # PCは文字コード変換 &jcode'convert(*val, 'sjis') if ($type eq 'p'); # エスケープ $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; # $val =~ s/[\x00-\x20]+/ /g; $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } $page = $in{'page'}; $mode = $in{'mode'}; $in{'url'} =~ s/^http\:\/\///; $tno = $in{'tno'}; $headflag=0; # タイムゾーン設定 $ENV{'TZ'} = "JST-9"; } #------------------------------------------------- # 絵文字 j → 独自 #------------------------------------------------- sub j2o { local($_) = @_; # タグ復元 s/&/&/g; s/"/"/g; s/<//g; s/\x1B\x24[E-GO-Q]([^\x0F]+)\x0F/$1/; s/\x1B\x24([E-GO-Q])([\x21-\x7A]+)/&j2o2($1,$2)/eg; $_; } sub j2o2 { local($f1, $f2) = @_; $f2 =~ s/([\x21-\x7A])/''/eg; $f2; } #------------------------------------------------- # 絵文字 独自 → i,j,e #------------------------------------------------- sub o2ije { local($_) = @_; # i-mode s//pack('H2H2', "$1$2", $3)/eg; # vodafone s//pack('H2H2','1B','24').$1.pack('H2',$2).pack('H2','0F')/eg; # EZweb s//pack('H2H2', "$1$2", $3)/eg; $_; } #------------------------------------------------- # 絵文字 独自 → PC #------------------------------------------------- sub o2p { local($_) = @_; # vodafone s|||g; # i-mode s|||g; # EZweb s|||g; $_; } #------------------------------------------------- # 絵文字 i → j #------------------------------------------------- sub i2j { local($_) = @_; s//&i2j2("$1$2$3")/eg; $_; } sub i2j2 { local($_) = @_; if (defined($i2j{$_})) { $e = $i2j{$_}; $e =~ s/(.)(..)/pack('H2H2','1B','24').$1.pack('H2',$2).pack('H2','0F')/eg; $e; } else { return ""; } } #------------------------------------------------- # 絵文字 i → e #------------------------------------------------- sub i2e { local($_) = @_; s//&i2e2("$1$2$3")/eg; $_; } sub i2e2 { local($_) = @_; if (defined($i2e{$_})) { return ""; } else { return ""; } } #------------------------------------------------- # 絵文字 j → i #------------------------------------------------- sub j2i { local($_) = @_; s//&j2i2($1,$2)/eg; $_; } sub j2i2 { local($f1, $f2) = @_; if (defined($j2i{"$f1$f2"})) { local($e) = $j2i{"$f1$f2"}; $e =~ s/(..)(..)/pack('H2H2', $1, $2)/e; return $e; } else { return ""; } } #------------------------------------------------- # 絵文字 j → e #------------------------------------------------- sub j2e { local($_) = @_; s||&j2e2("$1$2")|eg; $_; } sub j2e2 { local($_) = @_; if (defined($j2e{$_})) { return ""; } else { return ""; } } #------------------------------------------------- # 絵文字 e → i #------------------------------------------------- sub e2i { local($_) = @_; s||&e2i2("$1$2")|eg; $_; } sub e2i2 { local($_) = @_; if (defined($e2i2{$_})) { local($e) = $e2i2{$_}; $e =~ s/(..)(..)/pack('H2H2', $1, $2)/e; return $e; } else { return ""; } } #------------------------------------------------- # 絵文字 e → j #------------------------------------------------- sub e2j { local($_) = @_; s||&e2j2("$1$2")|eg; $_; } sub e2j2 { local($_) = @_; if (defined($e2j2{$_})) { $e = $e2j2{$_}; $e =~ s/(.)(..)/pack('H2H2','1B','24').$1.pack('H2',$2).pack('H2','0F')/eg; $e; } else { return ""; } } #------------------------------------------------- # エラー処理 #------------------------------------------------- sub error { if ($lockflag) { &unlock; } &data("Error
\n"); &data("$_[0]\n"); &header_tel($size); print @data; exit; } 1; __END__