strangeworld-mirror/[1999-05-04 - present] REMIX/bbs.txt
mitsudori dce359389d new file: @hi-ho/bbs.cgi
new file:   @hi-ho/getlog.cgi
	new file:   [1999-01-24 - 1999-04-09] REBIRTH (aka Haruna)/bbscgi.txt
	new file:   [1999-01-24 - 1999-04-09] REBIRTH (aka Haruna)/getlogcgi.txt
	new file:   [1999-01-24 - 1999-04-09] REBIRTH (aka Haruna)/locationcgi.txt
	new file:   [1999-05-04 - present] REMIX/bbs.txt
	new file:   [1999-05-04 - present] REMIX/getlog_m.txt
	new file:   [1999-05-04 - present] REMIX/jcode.txt
	new file:   [1999-05-04 - present] REMIX/location.txt
	new file:   [1999-05-04 - present] REMIX/loveyou.dat
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/bbs.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/count0.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/delete.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/getlog.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/jcode.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/location.txt
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/loveyou.dat
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/readme.html
	new file:   [1999-06-20 - 1999-07-12] REQUIEM (aka RECYCLE)/update.html
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/bbs.cgi
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/getlog_m.cgi
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/jcode.pl
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/list.cgi
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/loveyou.dat
	new file:   [1999-11-03 - 2000-05-02] REFLEX (aka AGStar no Yabou)/readme.txt
	new file:   source.txt
2024-12-02 16:52:30 -03:00

1105 lines
36 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /usr/local/bin/perl
# -------------------------------------------- 環境設定 --------------------------------------------
#
# ---------------------------------------------- 表示 ----------------------------------------------
# 掲示板の名前 --------------------------
$title = 'あやしいわーるどREMIX';
# 文字色や背景などの設定
# body部
$bgc = '004040';
$textc = 'ffffff';
$linkc = 'eeffee';
$vlinkc = 'dddddd';
$alinkc = 'ff0000';
# 題名の色
$subjc = 'ffffee';
$link = 'link';
# --- 表示件数 --------------------------------------------
# 1ページに表示する件数のデフォルト値
$def = 30;
# 1ページに表示する件数の最小値
$defmin = 1;
# この件数以上でリロード/書き込みしたときには次はこの件数にする。
$defmax =800;
# --- ----------------------------------------------
# このスクリプト
$cgiurl = 'http://www4.famille.ne.jp/~haruna/remix/bbs.cgi';
$cgiurf = 'bbs3.cgi';
# もう一つのスクリプト
# 連絡先
$mailadd = 'magmania@shiba.com';
# ログのURL
$loglog0 = 'log';
$loglog1 = 'http://';
# ---------------------------------------- 書き込みチェック ----------------------------------------
# 管理人名前チェック・メールアドレス・パスワード
$namez = 'しば';
$pass = 'chiba';
# NG名前(この名前で投稿するとブラウザがクラッシュ、、、のはずなんだけど、なぜかエラーが出るので#を外さないでね(はぁと)
#$nameng = "つばさ";
# 書き込み最大量
$maxlength = 1024*16;
# 二重書き込みチェック件数
$check = 10;
# 二重書き込みチェックバイト数
$checklength = 10;
# 全体の書き込み件数の最大登録数の設定
$max = 800;
# 個々の掲示板の書き込み件数の最大登録数の設定
$topicmax=75;
# ------------------------------------ ディレクトリ・ファイル名 ------------------------------------
# 日本語コード変換ライブラリjocde.plのパス
require './jcode.pl';
# 内容が書き込まれる記録ファイルのパスを設定
$file = './loveyou.dat';
# 別途とるログのファイル名先頭文字・拡張子の指定
$logfile = "./log/";
$logfiledat = ".html";
# -------------------------------------------- カウンタ --------------------------------------------
# カウンタプラス値
$countplus = "";
# カウンタ開始日
$countdate = '99/5/4';
# カウンタファイルの先頭文字・拡張子の指定
$countfile = './count/count';
$countfiledat = '.txt';
# カウンタ強度(0のときは使用しない)
$countlevel = 3;
# --------------------------------------------- その他 ---------------------------------------------
# 時差
$tim =0*3600;
# 入力形式の設定
$method = 'post';
# 追加対策 -------------------------------
# 外部投稿防止コード
$protect_a = 1312; # 4桁
$protect_b = 25; # 2桁
$protect_c = 418; # 3桁
# 過去ログの最大ファイルサイズ
$maxoldlogsize = 3 * 1024 * 1024; # 3MB
###########################################################################################
# 時刻処理
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + $tim );
$month = ($mon + 1);
# 時刻のゼロサプレス
if ($month < 10) { $month = "0$month"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
# 曜日変換処理
$y0="日"; $y1="月"; $y2="火"; $y3="水"; $y4="木"; $y5="金"; $y6="土";
$youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wday];
# 時刻フォーマット
$date_now = "$month月$mday日($youbi)$hour時$min分$sec秒";
# ログファイル名取得
$filedate = "$logfile$year$month$logfiledat";
$gesu = $ENV{'REMOTE_PORT'};
# 投稿時のaction名
$action = "regist";
# フォーム入力されたデータを$bufferに格納するgetかpostかによって取得方法が異なる
#if ($ENV{'REQUEST_METHOD'} eq "POST" && $ENV{'CONTENT_LENGTH'} < $maxlength) { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
#else { $buffer = $ENV{'QUERY_STRING'}; }
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
if ($ENV{'CONTENT_LENGTH'} > $maxlength) {&error(5);}
# $bufferに格納されたFORM形式のデータを取り出す
@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;
# 記録するデータはsjis
&jcode'convert(*value,'sjis');
# 処理の都合上の処理
$value =~ s/\n//g; # 改行文字は消去
if ($name eq 'value') { $value =~ s/&/&amp\;/g; $value =~ s/\,/\0/g; }
elsif ($name ne 'page' && $name ne 'image') { $value =~ s/\,//g; $value =~ s/\;//g; $value =~ s/\://g; $value =~ s/\=//g; }
else { $value =~ s/\,//g; }
$value =~ s/</&lt\;/g; $value =~ s/>/&gt\;/g;
$FORM{$name} = $value;
}
$p =0;
$pastmonth =$month -1;
$pastyear =$year;
if ( $pastmonth <= 0 ){
$pastmonth = $pastmonth + 12;
$pastyear=$year -1;
}
# 表示ページ数の決定 ##################################################
if ($FORM{'def'} ne '') { $def = $FORM{'def'}; }
if ($def < $defmin) { $def = $defmin;}
$defnext = $def;
if ($defnext > $defmax) {$defnext = $defmax;}
# 表示色の決定 ########################################################
if ($FORM{'bgcolor'} ne '') { $bgc = $FORM{'bgcolor'}; }
$body = "<body bgcolor=\"#$bgc\" text=\"#$textc\" link=\"#$linkc\" vlink=\"#$vlinkc\" alink=\"#$alinkc\">";
# 全体の流れを決定するactionやpwdはフォーム入力されたデータを格納する名前
########################################################
# action=regist --> 記事記録処理して通常画面へ
# その他 --> 通常画面へ
if ($FORM{'action'} eq "$action") { &regist; }
if ($FORM{'action'} eq 'search1') { &search1; }
if ($FORM{'action'} eq 'search2') { &search2; }
if ($FORM{'action'} eq 'search3') { &search3; }
if ($FORM{'code'} eq 'read') { &read; }
if ($FORM{'code'} eq '') { &top }
&html;
# メイン表示サブルーチン #######################################################
sub html {
if ($FORM{'code'} eq '') { $code = $title; }
if ($FORM{'bgcolor'} ne '') { $bgc = $FORM{'bgcolor'}; }
$body = "<body bgcolor=\"#$bgc\" text=\"#$textc\" link=\"#$linkc\" vlink=\"#$vlinkc\" alink=\"#$alinkc\">";
if ($FORM{'code'} ne '') { $code = $FORM{'code'}; }
if ($FORM{'search'} ne '') { $code = $FORM{'search'}; }
print "Content-type: text/html\n\n";
print "<html><head><title>$code</title></head>\n";
print "$body\n";
local ( $ptime ) = time + $tim * 60 * 60;
local ( $pkey ) = ( $ptime + $protect_a ) * $protect_b + $protect_c;
print "<form method=$method action=\"$cgiurl\?code\=$code\">\n";
print "<font color=ffffff size=+1>
<b>$code</b></font> <font size=-1><b><a href=\"$cgiurl\">トップページ</a></b></font> <font size=-1><b><a href=\"http://www.geocities.com/Tokyo/Subway/1282/front.html\">おしらせページ</a></b></font><p>
\n";
print "<input type=hidden name=\"action\" value=\"$action\">\n";
print "投稿者 <input type=text name=\"name\" size=20 maxlength=20 value=\"$FORM{'name'}\"><br>";
print "メール <input type=text name=\"email\" size=30><br>\n";
print "題名  <input type=text name=\"subject\" size=30> \n";
print "<input type=submit value=\"投稿/リロード\"><input type=reset value=\"消す\"><p>内容<i>(タグは使えません。内容を書かずに投稿ボタンを押すとリロードになります。)</i><br><textarea name=\"value\" rows=5 cols=70></textarea><input type=hidden name=\"page\" size=70 value=\"http://\"><p>\n";
print "表\示件数\n";
print "<input type=text name=\"def\" size=8 value=\"$defnext\">\n";
print "バックグラウンドカラー\n";
print "<input type=text name=\"bgcolor\" size=6 value=\"$bgc\">\n";
print "<p>\n";
print "<font size=-1>\n";
print "最近の過去ログは<a href=\"getlog_m.cgi\?action\=\getlog\&logfile\=$year$month.html\&day1\=01\&hour1\=00&day2\=31\&hour2=24\&searchmode=bbs\&keyword\=$code\">ここ</a>か<a href=\"getlog_m.cgi\?action\=\getlog\&logfile\=$pastyear$p$pastmonth.html\&day1\=01\&hour1\=00&day2\=31\&hour2=24\&searchmode=bbs\&keyword\=$code\">ここ</a>。<br>投稿や掲示板の削除は一切できないので、全ての行動は自己責任で行ってください。<br>最大\表\示件数:$topicmax件  返信フォーム 発言サーチ スレッド一覧\n";
print "<input type=hidden name=\"code\" value=\"$code\"><input type=hidden name=\"image\" value=\"http://$sec$hour$min\@$gesu.off\"><input type=hidden name=\"link\" value=\" $FORM{'link'}\">\n";
# プロテクトコード出力
print "<input type=hidden name=\"protect\" value=\"$pkey\">\n";
# リロード
print "</font></font>
<p><input type=submit value=\"投稿/リロード\">\n";
print "</form>\n";
# バナーはここ
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; }
if ($FORM{'page'} eq 'http://') { $page = 0; }
if ($f eq '') { $f = -1; }
if ($FORM{'g'} eq '') { $g = 1; } else { $g = $FORM{'g'}; }
########
###
foreach ( @lines ){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$kode,$postid) = split(/\,/,$_);
if ( $kode eq $FORM{'code'} ) {
$f = $f+1;
}
}
###
#$accesses = @lines; $accesses--;
$page_end = $page + $def -1;
$page_final = $page_end +1;
if ($page_end > $f) { $page_end = $f; }
foreach ( @lines ){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$kode,$postid) = split(/\,/,$_);
if (( $g < $page ) || ($g > $page_final )){ $parano = 1; }
if (( $kode eq $FORM{'code'} ) && ($parano ne 1))
{
$value =~ s/\0/\,/g; # ヌルコードに変換記録した半角カンマを復帰させる
chop($himage) if $himage =~ /\n/;
chop($hpage) if $hpage =~ /\n/;
chop($postid) if $postid =~ /\n/;
&disp;
}
if ( $kode eq $FORM{'code'} ){
$g = $g+1;
$parano=0;
}
}
#########
#$accesses = @lines; $accesses--;
$page_end = $page + $def - 1;
if ($page_end > $f) { $page_end = $f; }
#--- 改ページ処理 ------------------------------------#
print "</form><hr><p>\n";
$page_next = $page_end + 1;
$i = $page + 1; $j = $page_end + 1;
if ($page_end ne $f) {
print "<font size=-1><i>以上は、現在登録されている新着順$i番目から$j番目までの記事です。</i></font><p>\n";
print "<form method=$method action=\"$cgiurl\">\n";
print "<input type=hidden name=\"page\" value=\"$page_next\">\n";
print "<input type=hidden name=\"def\" value=\"$def\">\n";
print "<input type=hidden name=\"code\" value=\"$code\">\n";
print "<input type=hidden name=\"bgcolor\" value=\"$bgc\">\n";
print "<input type=submit value=\"次のページ\"></form>\n";
}
else {
print "<font size=-1><i>以上は、現在登録されている新着順$i番目から$j番目までの記事です。";
print "これ以下の記事はありません。</i></font>\n";
}
#print "<form action=\"$cgiurl\"><input type=submit value=\"トップページへ\">\n";
# このスクリプトの著作権表示(かならず表示してください)
print "</form><p></font><h4 align=right><hr size=5><a href=\"http://www.ask.or.jp/~rescue/\" target=\"$link\">MiniBBS v7.5</a> <a href=\"http://www.bea.hi-ho.ne.jp/~strangeworld/remix/\" target=\"$link\">REMIX 990620</a> is Free.</h4>\n";
print "</body></html>\n";
exit;
}
# 書き込み処理サブルーチン ############################################################
sub regist {
# 内容がスペースならリロード
if ($FORM{'value'} eq "") { &html; }
# 別のページからこのCGIへの投稿を排除する処理
#$ref = $ENV{'HTTP_REFERER'};
#$ref_url = $cgiurl; $ref_url =~ s/\~/.*/g;
#if (!($ref =~ /$ref_url/i)) { &error(form); }
# 入力されたデータのチェック ##################################
if ($FORM{'bgcolor'} eq "") { &error(1); }
if ($FORM{'def'} eq "") { &error(1); }
if ($FORM{'name'} eq "") { $FORM{'name'} = ''; }
if ($FORM{'code'} eq "") { $FORM{'code'} = $FORM{'topic'} ; }
if ($FORM{'image'} eq "") { &error(1); }
if ($FORM{'email'} =~ /,/) { &error(4); }
if ($FORM{'email'} ne "") { if (!($FORM{'email'} =~ /(.*)\@(.*)\.(.*)/)) { &error(3); }}
if ($FORM{'subject'} eq "") { $FORM{'subject'} = ' '; }
if ($FORM{'image'} eq "" || $FORM{'image'} eq "http://") { $FORM{'image'} = ''; }
elsif ( $FORM{'image'} =~ /g$/i || $FORM{'image'} =~ /f$/i || $FORM{'image'} =~ /p$/i ){
$FORM{'image'} =~ s/\s//g;$FORM{'image'} =~ s/\"//g;$FORM{'image'} =~ s/\'//g;
$FORM{'image'} =~ s/http\:\/\/http\:\/\//http\:\/\//g;
}
else{ $FORM{'image'} = ''; }
if ( $FORM{'image'} =~ /\?/ ){ $FORM{'image'} = ''; }
if ( $FORM{'image'} =~ /\=/ ){ $FORM{'image'} = ''; }
if ($FORM{'page'} eq "" || $FORM{'page'} eq "http://") { $FORM{'page'} = ''; }
else{
$FORM{'page'} =~ s/\s//g;$FORM{'page'} =~ s/\"//g;$FORM{'page'} =~ s/\'//g;
$FORM{'page'} =~ s/http\:\/\/http\:\/\//http\:\/\//g;
}
# プロテクトコードチェック
if ( $FORM{'protect'} ne '' ) {
local ( $ptime ) = time + $tim * 60 * 60;
local ( $pcheck ) = ( $FORM{'protect'} - $protect_c ) / $protect_b - $protect_a;
( $csec, $cmin, $chour, $cmday, $cmon, $cyear, $cwday, $cyday, $cisdat )
= localtime ( $pcheck );
$cyear += 1900;
$cmon++;
local ( $cnowdate ) = sprintf ( "%d/%02d/%02d(%s)%02d時%02d分%02d秒",
$cyear, $cmon, $cmday,
( '日', '月', '火', '水', '木', '金', '土' )[$cwday],
$chour, $cmin, $csec );
if (
( $csec < 0 ) || ( $csec > 60 ) ||
( $cmin < 0 ) || ( $cmin > 60 ) ||
( $chour < 0 ) || ( $chour > 24 ) ||
( ( $ptime - $pcheck ) > 1 * 60 * 60 ) ) { # 1時間
&error ( 'xxx' );
}
} else {
&error ( 'xxx' );
}
# 過去ログのファイルサイズチェック
if ( ( -s $filedate ) > $maxoldlogsize ) {
&error (0);
}
# 投稿者名チェック ##########################
$formname = $FORM{'name'};
# if ($formname eq "$nameng"){ &error(xx); }
if ($formname eq "$pass"){$formname = $namez; $FORM{'email'} = $mailadd;}
else {
$formname =~ s/$namez/<small>しは゜<\/small>/g;
# $formname =~ s/しぱ/しは゜/g;
}
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
open (DB,"+<$file") || &error (0);
eval 'flock (DB, 2)';
@lines = <DB>;
#個々の掲示板ごとに規定件数を超えた記事を削除
# 全投稿で規定件数を超えた記事を削除
############################
$i = 0;
$f = 0;
$del = 0;
foreach $line (@lines) {
($date,$name,$email,$value,$subject,$hpage,$himage,$kode,$postid) = split(/\,/,$line);
$i++;
if ( $FORM{'code'} eq $kode ) {$f++ ; }
if ($i == $max) { last; }
if (( $FORM{'code'} eq $kode )&&($f== $topicmax) )
{ $del = 1;
$f=0;
}
if ($del == 0) { push(@new,$line);}
$del = 0;
}
#####################
# 連続同一内容書き込みチェック
$i = 0; $j = 0;
while ( ( $i < $check ) && ($j == 0) ) {
($date0,$name0,$email0,$value0,$subject0,$hpage0,$himage0,$code0) = split(/\,/,$lines[$i]);
if ( $FORM{'value'} eq $value0 ) { $j = 1; }
# if ( $FORM{'image'} eq $himage0 ) { $j = 1; }
# if (substr($FORM{'value'},0,$checklength) eq substr($value0,0,$checklength)){ $j = 1; }
# if (substr($FORM{'value'},1-$checklength,$checklength) eq substr($value0,1-$checklength,$checklength)) { $j = 1; }
$i++;
}
# ID生成
if ( $lines[0] =~ /^.*,.*,.*,.*,.*,.*,.*,.*,(.*)\n/ ) {
$postid = $1 + 1;
} else {
$postid = 1;
}
if ( $j == 0 ) {
$value = "$date_now\,$formname\,$FORM{'email'}\,$FORM{'value'}\,$FORM{'subject'}\,$FORM{'page'}\,$FORM{'image'},$FORM{'code'},$postid\n";
unshift(@new,$value);
seek (DB, 0, 0);
truncate (DB, 0);
print DB @new;
eval 'flock (DB, 8)';
close (DB);
# 過去ログ出力
$FORM{'value'} =~ s/\0/\,/g;
open(LOG,">>$filedate") || &error(0);
eval 'flock (LOG, 2)';
if (-z LOG) {
print LOG "<html>\n<body bgcolor=\"#$bgc\" text=\"#$textc\" link=\"#$linkc\" vlink=\"#$vlinkc\" alink=\"#$alinkc\">\n<hr>";
}
print LOG "<font size=+1 color=\"#$subjc\"><b>$FORM{'subject'}</b></font>";
# メールアドレスが記録されているデータにはリンクを付ける
if ($FORM{'email'} ne '') { print LOG " 投稿者:<b><a href=\"mailto:$FORM{'email'}\">$formname</a></b>\n"; }
else { print LOG " 投稿者:<font color=\"#$subjc\"><b>$formname</b></font>\n"; }
print LOG "<font size=-1> 投稿日:$date_now";
if ($FORM{'code'} ne '') { print LOG " <a href=\"$cgiurl\?code=$FORM{'code'}\" target=\"link\">$FORM{'code'}</a></font><p>\n"; }
$FORM{'value'} =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\" target=\"$jump\">$1:\/\/$2<\/a>/g;
print LOG "</font><blockquote><pre>$FORM{'value'}</pre><p>\n\n";
# URLが記録されているデータにはリンクを付ける
if ($FORM{'page'} ne '') {
$page0 = $FORM{'page'};
$page0 =~ s/$cgiurl\?action=search1\&search=(.*)\&id=\d*/参考:$1/;
if ( $FORM{'page'} eq $page0 ) {
print LOG "<a href=\"$FORM{'page'}\" target=\"jump\">$page0</a><p>\n";
} else {
print LOG "<font color=\"#$linkc\"><u>$page0</u></font><p>\n";
}
}
print LOG "</blockquote>\n<hr>";
eval 'flock (LOG, 8)';
close(LOG);
# if (!open(BD,">>./0000.txt")) {error(0); }
# print BD "$date_now\,$FORM{'subject'}\,$host\n";
# while ( ($a,$b) = each %ENV) {print BD "$a=$b\,";}
# print BD "\n";
# close(BD);
} else {
eval 'flock (LOG, 8)';
close(LOG);
}
# 記録処理後、再読み込みする
if ( $FORM{'follow'} ne "on" ) { &html; }
else {
print "Content-type: text/html\n\n";
print "<html><head><title>かきこみ完了</title></head>\n";
print "$body\n";
print "<h1>かきこみ完了</h1>\n";
exit;
}
# print "Location: $cgiurl" . '?' . "\n\n";
# exit;
}
# フォロー投稿サブルーチンsearch1 ############################################
sub search1 {
#--- 入力フォーム画面 --------------------------------#
print "Content-type: text/html\n\n";
print "<html><head><title>$FORM{search}に返信</title></head>\n";
print "$body\n";
# バナーはここ
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
$accesses = @lines;
$f = 0; $i = 0;
while (($f == 0) && ($i < $accesses)){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$code,$postid) = split(/\,/,$lines[$i]);
chop ($postid) if $postid =~ /\n/;
if ($postid eq $FORM{id}) { $f = 1;}
$i++;
}
if ($f == 1){
$value =~ s/\0/\,/g; # ヌルコードに変換記録した半角カンマを復帰させる
chop($himage) if $himage =~ /\n/;
chop($hpage) if $hpage =~ /\n/;
&disp;
print "<hr>\n";
$value =~ s/\r/\r&gt; /g;
$value ="&gt; $value";
$value =~ s/&gt; &gt; &gt;.*?\r//g;
print "<p>\n";
# プロテクトキー生成
local ( $ptime ) = time + $tim * 60 * 60;
local ( $pkey ) = ( $ptime + $protect_a ) * $protect_b + $protect_c;
print "<form method=$method action=\"$cgiurl\">\n";
print "<input type=hidden name=\"action\" value=\"$action\">\n";
#if ($FORM{'link'} ne '') { $link = $FORM{'link'}; }
if ($FORM{'link'} ne '_top') { print "<input type=hidden name=\"follow\" value=\"on\">\n"; }
print "投稿者 <input type=text name=\"name\" size=20 maxlength=20><br>";
print "メール <input type=text name=\"email\" size=30><br>\n";
print "題名  <input type=text name=\"subject\" size=30 value=\"$name\"> \n";
print "<input type=submit value=\" 投稿 \"><input type=reset value=\"消す\"><p>\n";
print "<input type=hidden name=\"def\" value=\"$defnext\">\n";
print "<input type=hidden name=\"image\" value=\"$himage\">\n";
print "<input type=hidden name=\"link\" value=\"$FORM{link} \">\n";
# プロテクトコード出力
print "<input type=hidden name=\"protect\" value=\"$pkey\">\n";
print "内容<i>(タグは使えません。\n";
print "内容を書かずに投稿ボタンを押すとリロードになります。)</i><br>\n";
print "<textarea name=\"value\" rows=5 cols=70>$value\r";
# if ($hpage ne '') { print ">\r> $hpage\r"; }
print "</textarea><p>\n";
print "<input type=hidden name=\"code\" value=\"$code\">\n";
print "<input type=hidden name=\"page\" size=70 value=\"$cgiurl\?action\=search1\&search\=$date\&id=$postid\">\n";
print "<input type=hidden name=\"bgcolor\" value=\"$bgc\"></form><p>\n"; }
else { print "みつかりません<br>";}
print "<hr></body></html>\n";
exit;
}
# 投稿者名サーチ用サブルーチンsearch2 ############################################
sub search2 {
print "Content-type: text/html\n\n";
print "<html><head><title>$title</title></head>\n";
print "$body\n";
# バナーはここ
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
$accesses = @lines;
$f = 0;
foreach ( @lines ){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$code,$postid) = split(/\,/,$_);
if ( $name eq $FORM{search} ) {
$f = 1;
$value =~ s/\0/\,/g; # ヌルコードに変換記録した半角カンマを復帰させる
chop($himage) if $himage =~ /\n/;
chop($hpage) if $hpage =~ /\n/;
&disp;
}
}
if ($f == 0){ print "みつかりません<br>";}
print "<hr></body></html>\n";
exit;
}
# スレッドサーチ用サブルーチンsearch3 ############################################
sub search3 {
print "Content-type: text/html\n\n";
print "<html><head><title>スレッド一覧</title></head>\n";
print "$body\n";
# バナーはここ
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
$accesses = @lines;
$f = 0;
foreach ( @lines ){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$code,$postid) = split(/\,/,$_);
chop($himage) if $himage =~ /\n/;
chop($hpage) if $hpage =~ /\n/;
$himage =~ s/p:/p/g;
if ( $himage eq $FORM{search} ) {
$f = 1;
$value =~ s/\0/\,/g; # ヌルコードに変換記録した半角カンマを復帰させる
&disp;
}
}
if ($f == 0){ print "みつかりません$himageと$FORM{search} <br>";}
print "<hr></body></html>\n";
exit;
}
# トップページ表示用サブルーチンtop ############################################
sub top {
if ($FORM{'bgcolor'} ne '') { $bgc = $FORM{'bgcolor'}; }
if ($FORM{'code'} ne '') { $bgc = $FORM{'bgcolor'}; }
$body = "<body bgcolor=\"#$bgc\" text=\"#$textc\" link=\"#$linkc\" vlink=\"#$vlinkc\" alink=\"#$alinkc\">";
if ($FORM{'code'} eq '') { $code = $title; }
if ($FORM{'search'} ne '') { $code = $FORM{'search'}; }
print "Content-type: text/html\n\n";
print "<html><head><title>$code</title></head>\n";
print "$body\n";
local ( $ptime ) = time + $tim * 60 * 60;
local ( $pkey ) = ( $ptime + $protect_a ) * $protect_b + $protect_c;
#print "<b>最新連絡</b><p><font size=-1></font><hr>\n";
print "<form method=get action=\"location.cgi\"><table border=0 cellpadding=1 cellspacing=1 width=100%>
<tr><td><font color=ffffff size=+1><b>$code</b></font>    <SELECT NAME=url>
<OPTION VALUE=\"http://www.geocities.com/Tokyo/Subway/1282/front.html\" >
お知らせページ
<OPTION VALUE=\"http://members.tripod.com/denpaoyaji/rebirth/\" >
ミラー
<OPTION VALUE=\"\" >
------------
<OPTION VALUE=\"http://www4.famille.ne.jp/~haruna/requiem/bbs.cgi\" >
REQUIEM
<OPTION VALUE=\"http://strange99.hypermart.net/bbs.cgi\" >
退避用ハイパー
<OPTION VALUE=\"\" >
------------
<OPTION VALUE=\"http://www4.famille.ne.jp/~haruna/remix/bbs.cgi\" >
REMIX
<OPTION VALUE=\"http://kakumeigun.virtualave.net/cgi-bin/remix/bbs.cgi\" >
REMIX革命軍
<OPTION VALUE=\"\" >
------------
<OPTION VALUE=\"http://aruchan.hypermart.net/cgi-bin/bbs.cgi\" >
1999年
<OPTION VALUE=\"http://agtop.virtualave.net/cgi-bin/bbs.cgi\" >
ねこ
<OPTION VALUE=\"http://www4.famille.ne.jp/~kuzuha/strangeworld/bbs2.cgi\" >
はじあや
<OPTION VALUE=\"http://www4.famille.ne.jp/~kuzuha/strangeworld/bbs3.cgi\" >
改め☆
<OPTION VALUE=\"http://geocities.hypermart.net/cgi-bin/bbs.cgi\" >
理系
<OPTION VALUE=\"http://kourakuen.virtualave.net/cgi-bin/kourakuen.cgi\" >
後楽園ホール
<OPTION VALUE=\"http://www.jca.ax.apc.org/ariake/cgi-bin/bbs.cgi\" >
有明
<OPTION VALUE=\"http://logshonin.virtualave.net/cgi-bin/pikachu/pikachu.cgi\" >
ぴかちゅ
<OPTION VALUE=\"http://server6.hypermart.net/maripapa/cgi-bin/manko.cgi\" >
西ヶ丘
<OPTION VALUE=\"\" >
------------
<OPTION VALUE=\"http://freehosting1.at.webjump.com/sw/swatty-webjump/\" >
SwattyLinkWalk
<OPTION VALUE=\"http://members.tripod.com/~eyeline/strange-niyalink.htm\" >
ニヤリンク
<OPTION VALUE=\"http://www.geocities.com/Tokyo/Dojo/5886/\" >
ログ商人
<OPTION VALUE=\"\" >
------------
<OPTION VALUE=\"http://edoya.neko.to/\" >
あ界遺産
</SELECT> <INPUT type=submit VALUE=\"転送\"></td><tr></table></form>
\n";
print "<form method=$method action=\"$cgiurl\">掲示板の名前 <input type=text name=\"code\" size=30 maxlength=30> <input type=submit value=\"新規作成/リロード\"></form>\n";
print "<hr><font size=-1>自分の好きなテーマの掲示板を作れます。各掲示板は最後に投稿のあった日付けの順に\表\示されます。作成しても投稿がないと\表\示されません。掲示板や投稿の削除は一切できないので、全ての行動は自己責任で行ってください。<br>過去ログは<a href=\"getlog_m.cgi\">ここ</a>。最新投稿一覧は<a href=\"$cgiurl\?bgcolor\=$bgc\&$\c\ode\=read\">ここ</a>。\n";
if ( $countlevel > 0 ){
print "$countdateから ";
&counter; print "$countplusこわれにくさレベル$countlevel<hr><blockquote>\n";
}
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
$accesses = @lines;
$f = 0;
$bbscount = 1;
$logcount = 0;
foreach ( @lines ){
# データを各変数に代入する
($date,$name,$email,$value,$subject,$hpage,$himage,$kode,$postid) = split(/\,/,$_);
if ( $kode ne $bbsname{$kode} ) {
$bbs{$bbscount}=$kode;
$date{$bbscount}=$date;
$logs{$kode}=1;
$bbscount = $bbscount + 1;
$bbsname{$kode}=$kode;
}
else {
$logs{$kode}=$logs{$kode}+1; }
$logcount = $logcount + 1;
}
########
print "<center><table border=0 CELLSPACING=2 CELLPADDING=0><tr><td nowrap>タイトル</td><td nowrap> 記事登録件数</td><td nowrap>  最終投稿日</td></tr><tr><td nowrap>\n";
$k = 0;
while ($k < $bbscount) {
$free = $bbs{$k};
print "<a href=\"$cgiurl\?$\code\=$bbs{$k}\">$bbs{$k}</a></font><font size=+0> </font><br>\n";
$k=$k+1;
}
print "</td><td nowrap><center>\n";
$k = 0;
while ($k < $bbscount) {
$free = $bbs{$k};
print "<font>$logs{$free} </font></font><font size=+0> </font><br>\n";
$k=$k+1;
}
print "</center></td><td nowrap>\n";
$k = 0;
while ($k < $bbscount) {
print "<font size=-2>$date{$k}</font><font size=+0> </font><br>\n";
$k=$k+1;
}
print "</tr></td></table></center>\n";
# このスクリプトの著作権表示(かならず表示してください)
print "</blockquote></center><hr><font size=-1><i>以上は、現在登録されている新着順$bbscount\個の掲示板です。記事は合計$logcount\件が保存されています。
</font><h4 align=right><hr size=5><a href=\"http://www.ask.or.jp/~rescue/\" target=\"$link\">MiniBBS v7.5</a> <a href=\"http://www.bea.hi-ho.ne.jp/~strangeworld/remix/\" target=\"$link\">REMIX 990620</a> is Free.</h4>\n";
print "</body></html>\n";
exit;
}
# ログ読み用サブルーチン(logread)
###################################################
sub read{
if ($FORM{'code'} eq '') { $code = $title; }
if ($FORM{'bgcolor'} ne '') { $bgc = $FORM{'bgcolor'}; }
$body = "<body bgcolor=\"#$bgc\" text=\"#$textc\" link=\"#$linkc\" vlink=\"#$vlinkc\" alink=\"#$alinkc\">";
if ($FORM{'code'} ne '') { $code = $FORM{'code'}; }
if ($FORM{'search'} ne '') { $code = $FORM{'search'}; }
if ($FORM{'def'} ne '') { $def = $FORM{'def'}; }
if ($def < $defmin) { $def = $defmin;}
$defnext = $def;
if ($defnext > $defmax) {$defnext = $defmax;}
print "Content-type: text/html\n\n";
print "<html><head><title>あやしいわーるどREMIX 最新投稿一覧</title></head>\n";
print "$body\n";
local ( $ptime ) = time + $tim * 60 * 60;
local ( $pkey ) = ( $ptime + $protect_a ) * $protect_b + $protect_c;
print "<font color=ffffff size=+1>
<b>あやしいわーるどREMIX 最新投稿一覧</b></font>  
\n";
print "<form method=$method action=\"$cgiurl\">\n";
print "表\示件数\n";
print "<input type=text name=\"def\" size=8 value=\"$defnext\">\n";
print "バックグラウンドカラー<input type=text name=\"bgcolor\" size=6 value=\"$bgc\"><input type=hidden name=\"link\" value=\"$FORM{'link'}\">\n";
print "<input type=hidden name=\"link\" value=\"\" $checked1><input type=hidden name=\"link\" value=\"2\" $checked2><input type=hidden name=\"link\" value=\"3\" $checked3></font>\n";
print "<input type=hidden name=\"code\" value=\"\"><p>\n";
# カウンタ
if ( $countlevel > 0 ){
print "$countdateから ";
&counter; print "$countplusこわれにくさレベル$countlevel</font> \n";
print " <input type=submit value=\"リストに戻る\"></form>\n";
print "<form method=$method action=\"$cgiurl\">\n";
print "<input type=hidden name=\"code\" value=\"$FORM{'code'}\">\n";
print "<hr>
<font size=-1>過去ログは<a href=\"./getlog.cgi\" target=\"_top\">ここ</a>。\n";
print "<input type=hidden name=\"image\" value=\"0\">\n";
# プロテクトコード出力
print "<input type=hidden name=\"protect\" value=\"$pkey\">\n";
print "<font size=-1>\n";
# print "<hr><i>新しい記事から表\示します。最高$max件の記事が記録され、それを超えると古い記事から削除されます。<br>\n";
# print "1回の表\示で$def件を越える場合は、下のボタンを押すことで次の画面の記事を表\示します。</i>\n";
# サーチの注意書き
print "投稿の削除は一切しないので、全ての行動は自己責任で行ってください。<br>■:返信フォーム ★:発言サーチ ◆:スレッド一覧\n";
}
# リロード
print "<p></font></font><input type=submit value=\"リロード\">\n";
print "</form>\n";
# バナーはここ
#--- 記録記事の出力 ----------------------------------#
# 記録ファイルを読み出しオープンして、配列<@lines>に格納する
if (!open(DB,"$file")) { &error(0); }
@lines = <DB>;
close(DB);
if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; }
$accesses = @lines; $accesses--;
$page_end = $page + $def - 1;
if ($page_end > $accesses) { $page_end = $accesses; }
foreach ($page .. $page_end) {
($date,$name,$email,$value,$subject,$hpage,$himage,$kode,$postid) = split(/\,/,$lines[$_]);
$value =~ s/\0/\,/g; # ヌルコードに変換記録した半角カンマを復帰させる
chop($himage) if $himage =~ /\n/;
chop($hpage) if $hpage =~ /\n/;
chop($postid) if $postid =~ /\n/;
&disp;
}
#--- 改ページ処理 ------------------------------------#
print "</form><hr><p>\n";
$page_next = $page_end + 1;
$i = $page + 1; $j = $page_end + 1;
if ($page_end ne $accesses) {
print "<font size=-1><i>以上は、現在登録されている新着順$i番目から$j番目までの記事です。</i></font><p>\n";
print "<form method=$method action=\"$cgiurl\">\n";
print "<input type=hidden name=\"page\" value=\"$page_next\">\n";
print "<input type=hidden name=\"def\" value=\"$def\">\n";
print "<input type=hidden name=\"bgcolor\" value=\"$bgc\">\n";
print "<input type=hidden name=\"code\" value=\"read\">\n";
print "<input type=submit value=\"次のページ\"></form>\n";
}
else {
print "<font size=-1><i>以上は、現在登録されている新着順$i番目から$j番目までの記事です。";
print "これ以下の記事はありません。</i></font>\n";
}
# このスクリプトの著作権表示(かならず表示してください)
print "</font><h4 align=right><hr size=5><a href=\"http://www.ask.or.jp/~rescue/\" target=\"$link\">MiniBBS v7.5</a> <a href=\"http://www.bea.hi-ho.ne.jp/~strangeworld/remix/\" target=\"$link\">REMIX 990620</a> is Free.</h4>\n";
print "</body></html>\n";
exit;
}
# 各投稿表示用サブルーチン #############################################################
sub disp {
$hpage0 =$hpage;
$hpage0 =~ s/$cgiurl\?action=search1\&search=(.*)\&id=\d*/参考:$1/;
$hpage0 =~ s/$cgiurf\?action=search1\&search=(.*)\&id=\d*/参考:$1/;
print "<hr>";
print "<font size=+1 color=\"#$subjc\"><b>$subject</b></font> ";
if ($email ne '') { print "投稿者:<b><a href=\"mailto:$email\">$name</a></b>\n"; }
else { print "投稿者:<b>$name</b></font>\n"; }
print "<font size=-1> 投稿日:$date";
print " <a href=\"$cgiurl\?bgcolor\=$bgc\&action\=search1\&search\=$date\&id=$postid\" target=\"$link\">■</a>";
print " <a href=\"$cgiurl\?bgcolor\=$bgc\&action\=search2\&search\=$name\" target=\"$link\">★</a>";
if (($himage ne'') && ($hpage ne'' )){ print " <a href=\"$cgiurl\?bgcolor\=$bgc\&action\=search3\&search\=$himage\" target=\"$link\">◆</a>\n"; }
if ($FORM{'code'} eq 'read') { print " <a href=\"$cgiurl\?bgcolor\=$bgc\&$\c\ode\=$kode\" target=\"$link\">$kode</a>\n"; }
print "</font><p>\n";
if ($FORM{search} eq '') {
$value =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\" target=\"$link\">$1:\/\/$2<\/a>/g;
}
print "<blockquote><pre>$value</pre><p>\n\n";
if ($hpage ne '') { print "<a href=\"$hpage\" target=\"$link\">$hpage0</a><p>\n"; }
print "</blockquote>\n";
}
# エラー処理サブルーチン ############################################################
sub error {
# &error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。
$error = $_[0];
if ($error eq "0") { $error_msg = '記録ファイルの入出力にエラーが発生しました。'; }
elsif ($error eq "2") { $error_msg = '内容が書かれていません。または記録禁止のタグが書かれています。'; }
elsif ($error eq "3") { $error_msg = 'メールアドレスが正しく入力されていません。'; }
elsif ($error eq "4") { $error_msg = 'メールアドレスは複数指定できません。'; }
elsif ($error eq "5") { $error_msg = '投稿内容が大きすぎます。'; }
elsif ($error eq "form") { $error_msg = "投稿画面のURLが<br>$cgiurl<br>" . '以外からの投稿はできません。'; }
elsif ($error eq "x") { $error_msg = "以下の情報が記録されました。けけ"; }
elsif ($error eq "xx") { $error_msg = "かわいそう"; }
elsif ($error eq 'xxx') { $error_msg = ' '; }
print "Content-type: text/html\n\n";
print "<html><head><title>$title</title></head>\n";
print "$body\n";
print "<h3>$error_msg</h3>\n";
if ($error eq "x") {
while ( ($a,$b) = each %ENV) {
print "$a=$b<br><br>\n";
}
}
if ($error eq "xx") {
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "<table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td><table><tr><td>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table>\n";
}
print "</body></html>\n";
exit;
}
# カウンター処理サブルーチン #########################################################
sub counter {
for( $i=0 ; $i < $countlevel ; $i++){
open(IN,"$countfile$i$countfiledat");
$count[$i] = <IN>;
$filenumber[$count[$i]] = $i;
close(IN);
}
@sortedcount = sort by_number @count;
$maxcount = $sortedcount[$countlevel-1];
$mincount = $sortedcount[0];
$maxcount++;
print $maxcount;
open(OUT,">$countfile$filenumber[$mincount]$countfiledat");
print OUT $maxcount;
close(OUT);
}
sub by_number {
$a <=> $b;
}
#end_of_script