#!/usr/local/bin/perl

#====================================================================
# File name: light2ex.cgi v1.00 [KENT氏のlight2.cgi(2002/08/01)を母体]
# Copyright: ツー (e-mail: yama2-db@ipc-tokai.or.jp)
# 				  (URL: http://yama2-db.cside.com/)
#
# 	V1.00	light2ex.cgi	2002/08/12	light2.cgiを母体に改造。
# 										(i-mode/J-SKY/EZweb対応)
# 	V1.20					2006/04/06	禁止サーバ設定サポート
#	V1.21 bata1				2006/04/24	キーワード設定サポート
#
#====================================================================
# [母体の著作権]
# Light Board 補助プログラム
# 過去ログ表示・検索システム
# light2.cgi (2002/08/01)
# Copyright(C) KENT WEB 2002
#--------------------------------------------------------------------

#============#
#  設定項目  #
#============#

# jcode.plが同一ディレクトリの場合
require './jcode.pl';

# スクリプト名
$script = './bbs1.cgi';

# 掲示板への戻り先
$bbsfile  = './bbs.cgi';

# bodyタグ
$body = '<body bgcolor="#F5F5F5" text="#000000">';

# 管理用パスワード
$pass = 'fksmysyk';

# LIGHT BOARDログファイル
$logfile = './light.log';

# ファイルロック形式
#  → 0=no 1=symlink関数 2=mkdir関数
$lockkey = 2;

# ロックファイル名
$lockfile = './light.lock';

# メール通知機能 (0=no 1=yes)
$mail = 0;

# 過去ログ用カウントファイル
$nofile = './pastno.dat';

# 過去ログのあるディレクトリ（フルパスだと / から）
$past_dir = "./past";

# 過去ログのあるＵＲＬディレクトリ（フルパスだと http:// から）
$past_url = "./past";

#============#
#  設定完了  #
#============#

if (open(NUM,"$nofile")) { $count = <NUM>; close(NUM); }
&get_form;
if (!$buffer) { &frame; }
&decode;
if ($mode eq 'ue_html') { &ue_html; }
if ($mode eq 'find_html') { &find_html; }
if ($mode eq 'do_find') { &do_find; }
if ($mode eq 'edit_in') { &edit_in; }
if ($mode eq 'edit') { &edit; }
if ($mode eq 'do_edit') { &do_edit; }
#if ($mode eq 'env') { &env_view; }
if ($mode eq 'env_edit') { &env_edit }

exit;

## ログ編集モード入室処理
sub edit_in {
	&header;
	print "<table width='100%'><tr><th bgcolor=#0000a0>\n";
	print "<font color=#FFFFFF>管 理 モ ー ド</font></th></tr></table>\n";
	print "<P><center><h4>処理を選択しパスワードを入力して下さい</h4>\n";
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=radio name=opt value=\"edit\" checked>記事編集\n";
	print "<input type=radio name=opt value=\"del\">記事削除\n";
	print "<input type=radio name=opt value=\"env\">環境設定<P>\n";
	print "<input type=hidden name=mode value=\"edit\">\n";
	print "<input type=password name=pass size=8>";
	print "<input type=submit value=\"認証\"></form>\n";
	print "</body></html>\n";
}

## ログ編集画面
sub edit {
	# パスワード認証
	if ($pass ne "$in{'pass'}") { &error("パスワードが違います"); }

	open(DB,"$logfile") || &error("Can't open $logfile");
	@lines = <DB>;
	close(DB);
	$init = $lines[0];
	shift(@lines);

	&header;
	print "[<a href=$bbsfile target=_top>掲示板へ戻る</a>]\n";
	print "<table width=100%><tr><th bgcolor=#0000a0>\n";
	print "<font color=#FFFF00>管理モード</font></th></tr></table>\n";
	print "<P><center>\n";

	if ($mode ne 'do_edit') {
		if ($chk && $opt eq 'edit') { &form_edit; }
		elsif ($chk && $opt eq 'del') { &do_del; }
		elsif ($opt eq 'env') { &env_view; }
	}

	if ($opt eq 'edit') { print "編集する記事をチェックして編集ボタンを押して下さい。\n"; }
	else { print "削除する記事をチェックして削除ボタンを押して下さい。\n"; }

	print "<P><form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"edit\">\n";
	print "<input type=hidden name=opt value=\"$opt\">\n";
	print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
	print "<table border=1>\n";
	print "<tr><th>CHK</th><th>投稿日</th><th>題名</th>\n";
	print "<th>なまえ</th><th>メール</th><th>コメント</th></tr>\n";

	foreach $line (@lines) {
		($num,$date,$name,$email,$sub,$com,$url,$host) = split(/<>/,$line);
		if (length($com) > 60) { $com=substr($com,0,58); $com .= '..'; }
		  $com =~ s/</&lt;/g;
		  $com =~ s/>/&gt;/g;
		  $com =~ s/\"/&quot;/g;

		if ($email) { $email = "<a href=mailto:$email>$email</a>"; }
		if ($url) { $name = "<a href=http://$url target=_top>$name</a>"; }
		if ($sub eq "") { $sub = "無題"; }

		if ($opt eq 'edit') {
		  print "<tr><th><input type=radio name=chk value=$num>$num</th>";
		} else {
		  print "<tr><th><input type=checkbox name=chk value=$num>$num</th>";
		}

		print "<td>$date</td><td>$sub</td><td>$name</td><td>$email</td>\n";
		print "<td>$com <font color=#800000>[$host]</font></td></tr>\n";
	}

	print "</table><P><input type=submit value=\"メンテ処理を行う\">";
	print "<input type=reset value=\"リセット\">\n";
	print "</form></center>\n";
	print "</body></html>\n";
}

## 編集フォーム
sub form_edit {
	foreach $line (@lines) {
		($num,$date,$name,$email,$sub,$com,$url,$host,$pwd) = split(/<>/,$line);
		if ($chk eq "$num") { last; }
	}

	$com =~ s/<br>/\r/g;
	if ($url) { $url = "http://$url"; }

	print <<"EOM";
<center><b>変更する部分のみ修正して下さい</b><P>
<form action="$script" method="POST">
<input type=hidden name=mode value="do_edit">
<input type=hidden name=opt value="$opt">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=chk value="$chk">
<table border=1>
<tr><td><b>おなまえ</b></td><td><input type=text name=name value="$name" size=25></td></tr>
<tr><td><b>Ｅメール</b></td><td><input type=text name=email value="$email" size=25></td></tr>
<tr><td><b>タイトル</b></td><td><input type=text name=sub value="$sub" size=30>
<input type=submit value="修正する"><input type=reset value="リセット"></td></tr>
<tr><td colspan=2><b>コメント</b><br><textarea cols=65 rows=7 name=com>$com</textarea></td></tr>
<tr><td><b>ＵＲＬ</b></td><td><input type=text name=url value="$url" size=50></td></tr>
</table>
</form>
</center>
</body></html>
EOM
	exit;
}

## 編集実行処理
sub do_edit {
	# パスワード認証
	if ($pass ne "$in{'pass'}") { &error("パスワードが違います"); }

	# ファイルロック
	if ($lockkey) { &lock; }

	open(DB,"$logfile") || &error("Can't open $logfile");
	@lines = <DB>;
	close(DB);

	$init = $lines[0];
	shift(@lines);

	$in{'com'} =~ s/&/&amp;/g;
	$in{'com'} =~ s/</&lt;/g;
	$in{'com'} =~ s/>/&gt;/g;
	$in{'com'} =~ s/\"/&quot;/g;
	$in{'com'} =~ s/\r\n/<br>/g;
	$in{'com'} =~ s/\r|\n/<br>/g;
	$in{'url'} =~ s/^http\:\/\///;

	@new=();
	foreach $line (@lines) {
		($num,$date,$name,$email,$sub,$com,$url,$host,$pwd) = split(/<>/,$line);
		if ($chk eq "$num") {
			$line = "$num<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'com'}<>$in{'url'}<>$host<>$pwd<>\n";
		}
		push(@new,$line);
	}

	unshift(@new,$init);

	open(DB,">$logfile") || &error("Can't write $logfile");
	print DB @new;
	close(DB);

	# ロック解除
	if ($lockkey) { &unlock; }

	&edit;
}

## 削除処理
sub do_del {
	@new=();
	foreach $line (@lines) {
		($num,$date,$name,$email,$sub,$com,$url,$host,$pwd) = split(/<>/,$line);
		$flag=0;
		foreach $chk (@dels) {
			if ($chk eq "$num") { $flag=1; next; }
#			else { next; }
		}
		if ($flag == 0) { push(@new,$line); }
	}

	@lines = @new;

	unshift(@new,$init);

	open(DB,">$logfile") || &error("Can't write $logfile");
	print DB @new;
	close(DB);

	unlink($lockfile) if (-e $lockfile);
}

## 環境設定画面
sub env_view {
	($head,$title,$t_color,$t_size,$t_face,$bgr,$bgc,$text,$link,$vlink,$alink,$home,$max,$subj_color,$name_color,$mail1,$mail2,$i_title,$i_t_color,$i_t_size,$i_t_face,$i_bgr,$i_bgc,$i_text,$i_link,$i_vlink,$i_alink,$i_home,$i_subj_color,$i_name_color,$j_title,$j_t_color,$j_t_size,$j_t_face,$j_bgr,$j_bgc,$j_text,$j_link,$j_vlink,$j_alink,$j_home,$j_subj_color,$j_name_color,$e2_title,$e2_t_color,$e2_t_size,$e2_t_face,$e2_bgr,$e2_bgc,$e2_text,$e2_link,$e2_vlink,$e2_alink,$e2_home,$e2_subj_color,$e2_name_color,$e_title,$e_home,$plog,$i_plog,$j_plog,$e2_plog,$e_plog,$s_reject,$s_keyword) = split(/<>/,$init);

	$sub_reject = $s_reject;
	$sub_reject =~ s/!/\r/g;
	$sub_keyword = $s_keyword;
	$sub_keyword =~ s/!/\r/g;


	print <<"EOF";
</center><blockquote>
<UL>
<LI>設定ファイル <font color=#CE0067><b>$room</b></font> の修正を行います。
<LI>変更したい個所を修正し、送信キーを押してください。
<LI>タグは書き込まないようにしてください。
</UL>
<form action="$script" method="POST">
<table>
<tr><td align=center bgcolor=pink>[共通設定]</td><td><hr></td></tr>
<tr><td>禁止サーバ<br><font size ="-1" color=green>サーバ毎に改行してください。<br>(一番下に設定した後の改行もお忘れなく)</font></td><td><textarea cols = "58" rows="7" name=s_reject>$sub_reject</textarea></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>キーワード<br><font size ="-1" color=red>漢字=ひらがな</font>&nbsp;<font size ="-1" color=green>で設定してください。<br>(設定ごとに改行を入れてください)</font></td><td><textarea cols = "58" rows="7" name=s_keyword>$sub_keyword</textarea></td></tr>
<tr><td colspan=2><hr size=1 color=green></td></tr>
<tr><td align=center bgcolor=pink>[PC用設定]</td><td><hr></td></tr>
<tr><td>タイトル</td><td><input type=text name=title size=25 value="$title"></td></tr>
<tr>
  <td>サイズ</td>
  <td>
    <select name=t_size>
    <option value=$t_size>$t_size
    <option value=8>8
    <option value=7>7
    <option value=6>6
    <option value=5>5
    <option value=4>4
    </select>
  </td>
</tr>
<tr><td>タイトル色</td><td><input type=text name=t_color size=25 value="$t_color"></td></tr>
<tr><td>文字スタイル</td><td><input type=text name=t_face size=25 value="$t_face"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>壁紙</td><td><input type=text name=bgr size=25 value="$bgr"></td></tr>
<tr><td>背景色</td><td><input type=text name=bgc size=25 value="$bgc"></td></tr>
<tr><td>文字色</td><td><input type=text name=text size=25 value="$text"></td></tr>
<tr><td>リンク色</td><td><input type=text name=link size=25 value="$link">(link)</td></tr>
<tr><td>リンク色</td><td><input type=text name=vlink size=25 value="$vlink">(vlink)</td></tr>
<tr><td>リンク色</td><td><input type=text name=alink size=25 value="$alink">(alink)</td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>記事 [題名] 色</td><td><input type=text name=subj_color size=25 value="$subj_color"></td></tr>
<tr><td>記事 [名前] 色</td><td><input type=text name=name_color size=25 value="$name_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>戻り先</td><td><input type=text name=home size=50 value="$home"></td></tr>
<tr><td>1Pageの記事表\示数</td><td><input type=text name=plog size=25 value="$plog"></td></tr>
<tr><td>最大記事数</td><td><input type=text name=max size=25 value="$max"></td></tr>
<tr><td colspan=2><hr size=1 color=green></td></tr>
<tr><td align=center bgcolor=pink>[i-mode用]</td><td><hr></td></tr>
<tr><td>タイトル</td><td><input type=text name=i_title size=25 value="$i_title"></td></tr>
<tr><td>タイトル色</td><td><input type=text name=i_t_color size=25 value="$i_t_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>背景色</td><td><input type=text name=i_bgc size=25 value="$i_bgc"></td></tr>
<tr><td>文字色</td><td><input type=text name=i_text size=25 value="$i_text"></td></tr>
<tr><td>リンク色</td><td><input type=text name=i_link size=25 value="$i_link">(link)</td></tr>
<tr><td>リンク色</td><td><input type=text name=i_vlink size=25 value="$i_vlink">(vlink)</td></tr>
<tr><td>リンク色</td><td><input type=text name=i_alink size=25 value="$i_alink">(alink)</td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>記事 [題名] 色</td><td><input type=text name=i_subj_color size=25 value="$i_subj_color"></td></tr>
<tr><td>記事 [名前] 色</td><td><input type=text name=i_name_color size=25 value="$i_name_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>戻り先</td><td><input type=text name=i_home size=50 value="$i_home"></td></tr>
<tr><td>1Pageの記事表\示数</td><td><input type=text name=i_plog size=25 value="$i_plog"></td></tr>
<tr><td colspan=2><hr size=1 color=green></td></tr>
<tr><td align=center bgcolor=pink>[J-SKY用]</td><td><hr></td></tr>
<tr><td>タイトル</td><td><input type=text name=j_title size=25 value="$j_title"></td></tr>
<tr><td>タイトル色</td><td><input type=text name=j_t_color size=25 value="$j_t_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>背景色</td><td><input type=text name=j_bgc size=25 value="$j_bgc"></td></tr>
<tr><td>文字色</td><td><input type=text name=j_text size=25 value="$j_text"></td></tr>
<tr><td>リンク色</td><td><input type=text name=j_link size=25 value="$j_link">(link)</td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>記事 [題名] 色</td><td><input type=text name=j_subj_color size=25 value="$j_subj_color"></td></tr>
<tr><td>記事 [名前] 色</td><td><input type=text name=j_name_color size=25 value="$j_name_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>戻り先</td><td><input type=text name=j_home size=50 value="$j_home"></td></tr>
<tr><td>1Pageの記事表\示数</td><td><input type=text name=j_plog size=25 value="$j_plog"></td></tr>
<tr><td colspan=2><hr size=1 color=green></td></tr>
<tr><td align=center bgcolor=pink>[EZweb(WAP2.0)用]</td><td><hr></td></tr>
<tr><td>タイトル</td><td><input type=text name=e2_title size=25 value="$e2_title"></td></tr>
<tr>
  <td>サイズ</td>
  <td>
    <select name=e2_t_size>
    <option value=$e2_t_size>$e2_t_size
    <option value=3>3
    <option value=2>2
    <option value=1>1
    </select>
    1:&lt;small&gt; 2:通常 3:&lt;big&gt;
  </td>
</tr>
<tr><td>タイトル色</td><td><input type=text name=e2_t_color size=25 value="$e2_t_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>背景色</td><td><input type=text name=e2_bgc size=25 value="$e2_bgc"></td></tr>
<tr><td>文字色</td><td><input type=text name=e2_text size=25 value="$e2_text"></td></tr>
<tr><td>リンク色</td><td><input type=text name=e2_link size=25 value="$e2_link">(link)</td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>記事 [題名] 色</td><td><input type=text name=e2_subj_color size=25 value="$e2_subj_color"></td></tr>
<tr><td>記事 [名前] 色</td><td><input type=text name=e2_name_color size=25 value="$e2_name_color"></td></tr>
<tr><td>　</td><td><hr></td></tr>
<tr><td>戻り先</td><td><input type=text name=e2_home size=50 value="$e2_home"></td></tr>
<tr><td>1Pageの記事表\示数</td><td><input type=text name=e2_plog size=25 value="$e2_plog"></td></tr>
<tr><td colspan=2><hr size=1 color=green></td></tr>
<tr><td align=center bgcolor=pink>[EZweb(WAP1.0)用]</td><td><hr></td></tr>
<tr><td>タイトル</td><td><input type=text name=e_title size=25 value="$e_title"></td></tr>
<tr><td>戻り先</td><td><input type=text name=e_home size=50 value="$e_home"></td></tr>
<tr><td>1Pageの記事表\示数</td><td><input type=text name=e_plog size=25 value="$e_plog"></td></tr>
<tr><td colspan=2><hr></td></tr>
EOF
	if ($mail) {
		print "<tr><td>メール送信 1.</td><td><input type=text name=mail1 size=25 value=\"$mail1\"></td></tr>\n";
		print "<tr><td>メール送信 2.</td><td><input type=text name=mail2 size=25 value=\"$mail2\"> (2つ目以降はここに記述)</td></tr>\n";
		print "<tr><td colspan=2><LI>ここにメールアドレスを記入すると投稿記事を送信します。</td></tr>\n";
		print "<tr><td colspan=2><hr></td></tr>\n";
	}

	print "<tr><th colspan=2><input type=submit value=\"送信する\"><input type=reset value=\"リセット\"></th></tr>\n";
	print "<input type=hidden name=mode value=\"env_edit\">\n";
	print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
	print "</form></table></blockquote>\n";
	print "</body></html>\n";
	exit;
}

## 環境設定更新処理
sub env_edit {
	# パスワード認証
	if ($pass ne "$in{'pass'}") { &error("パスワードが違います"); }

	# ファイルロック
if ($lockkey) { &lock; }

	open(DB,"$logfile") || &error("Can't open $logfile");
	@lines = <DB>;
	close(DB);

	($head,$title,$t_color,$t_size,$t_face,$bgr,$bgc,$text,$link,$vlink,$alink,$home,$max,$subj_color,$name_color,$mail1,$mail2,$i_title,$i_t_color,$i_t_size,$i_t_face,$i_bgr,$i_bgc,$i_text,$i_link,$i_vlink,$i_alink,$i_home,$i_subj_color,$i_name_color,$j_title,$j_t_color,$j_t_size,$j_t_face,$j_bgr,$j_bgc,$j_text,$j_link,$j_vlink,$j_alink,$j_home,$j_subj_color,$j_name_color,$e2_title,$e2_t_color,$e2_t_size,$e2_t_face,$e2_bgr,$e2_bgc,$e2_text,$e2_link,$e2_vlink,$e2_alink,$e2_home,$e2_subj_color,$e2_name_color,$e_title,$e_home,$plog,$i_plog,$j_plog,$e2_plog,$e_plog,$s_reject,$s_keyword) = split(/<>/,$lines[0]);

	$in{'s_reject'} =~ s/\r\n/!/g;
	$in{'s_reject'} =~ s/\r|\n/!/g;
	$in{'s_keyword'} =~ s/\r\n/!/g;
	$in{'s_keyword'} =~ s/\r|\n/!/g;

	$lines[0] = "$head<>$in{'title'}<>$in{'t_color'}<>$in{'t_size'}<>$in{'t_face'}<>$in{'bgr'}<>$in{'bgc'}<>$in{'text'}<>$in{'link'}<>$in{'vlink'}<>$in{'alink'}<>$in{'home'}<>$in{'max'}<>$in{'subj_color'}<>$in{'name_color'}<>$in{'mail1'}<>$in{'mail2'}<>$in{'i_title'}<>$in{'i_t_color'}<>$i_t_size<>$i_t_face<>$i_bgr<>$in{'i_bgc'}<>$in{'i_text'}<>$in{'i_link'}<>$in{'i_vlink'}<>$in{'i_alink'}<>$in{'i_home'}<>$in{'i_subj_color'}<>$in{'i_name_color'}<>$in{'j_title'}<>$in{'j_t_color'}<>$j_t_size<>$j_t_face<>$j_bgr<>$in{'j_bgc'}<>$in{'j_text'}<>$in{'j_link'}<>$j_vlink<>$j_alink<>$in{'j_home'}<>$in{'j_subj_color'}<>$in{'j_name_color'}<>$in{'e2_title'}<>$in{'e2_t_color'}<>$in{'e2_t_size'}<>$e2_t_face<>$e2_bgr<>$in{'e2_bgc'}<>$in{'e2_text'}<>$in{'e2_link'}<>$e2_vlink<>$e2_alink<>$in{'e2_home'}<>$in{'e2_subj_color'}<>$in{'e2_name_color'}<>$in{'e_title'}<>$in{'e_home'}<>$in{'plog'}<>$in{'i_plog'}<>$in{'j_plog'}<>$in{'e2_plog'}<>$in{'e_plog'}<>$in{'s_reject'}<>$in{'s_keyword'}<>\n";

	# ログを更新
	open(DB,">$logfile") || &error("Can't write $logfile");
	print DB @lines;
	close(DB);

	# ロック解除
	if ($lockkey) { &unlock; }

	# 完了メッセージ
	&header;
	print "<br><br><center><hr><h3>環境設定の変更が完了しました。</h3><hr>\n";
	print "<P>[<a href=\"$bbsfile\">掲示板へもどる</a>]</center>\n";
	print "</body></html>\n";
	exit;
}

## 検索処理ルーチン
sub do_find {
	# カウントファイルを読み込み
	open(NUM,"$nofile") || &error("Can't open $nofile");
	$count = <NUM>;
	close(NUM);

	@lines = ();
	foreach (1 .. $count) {
		open(DB,"$past_dir\/$_\.html");
		@new_data = <DB>;
		close(DB);

		push(@lines,@new_data);
	}

	$word =~ s/　/ /g;
	$word =~ s/\t/ /g;
	@pairs = split(/ /,$word);

	# 過去ログファイルを読み込み
	foreach $line (@lines) {
		$flag = 0;
		foreach $pair (@pairs){
			if (index($line,$pair) >= 0){
				$flag = 1;
				if ($cond eq 'or') { last ; }
			} else {
				if ($cond eq 'and'){ $flag = 0; last; }
			}
		}
		# ヒットした行を新規配列(@new)に格納
		if ($flag) { push(@new,$line) ; }
	}

	# 検索結果の配列数を数える
	$count = @new;

	# 該当なしの場合
	if ($count == 0) { &nainai; }

	# 結果を出力
	&header;
	print <<"HTML";
<center>
<table border=1>
<tr bgcolor=#FFFFFF>
<td>[<a href="$script?mode=find_html">検索画面に戻る</a>]</td>
<td nowrap>キーワード <font color=#FF0080><b>$word</b></font> は
<b>$count</b>件見つかりました。</td>
</tr>
</table>
</center><hr>
HTML

	foreach $new_line (@new) {
		($title,$msg) = split(/<\!--T-->/, $new_line);
		print "$title $msg\n";
	}
	print "</body></html>\n";
	exit;
}

## フレーム部
sub frame {
	# 過去ログ用カウントファイルをチェック
	unless (-e $nofile) { &error("Don't exist $nofile"); }

	print "Content-type: text/html\n\n";
	print <<"HTML";
<html>
<head><title>過去ログ</title></head>
<frameset rows="95\,*" FRAMEBORDER=no BORDER=0>
<frame name="ue" src="$script?mode=ue_html" target="sita">
<frame name="sita" src="$past_url\/$count\.html">
<noframes>
$body
<h3>フレーム非対応のブラウザの方は利用できません。</h3>
</body></noframes></frameset>
</html>
HTML
	exit;
}

## 上フレーム（メニュー部）
sub ue_html {
	&header;
	print <<"HTML";
<table width="100%">
<tr><th bgcolor="#8080C0">
<font color=#FFFFFF>過去ログ</font>
</th></tr></table>
<hr><center>
[<a href="$bbsfile" target="_top">掲示板へもどる</a>]
[<a href="$script\?mode=find_html" target="sita">過去ログ検索</a>]
[<a href="$past_url\/$count\.html" target="sita">最新</a>]
HTML
	# 過去ログの[リンク]を新規順に表示
	for ($i=$count-1; $i>0; $i--) {
		print "\[<a href=\"$past_url\/$i\.html\" target=\"sita\">$i</a>\]\n";
	}
	print "</center><hr>\n";
	exit;
}

## フォーム取得
sub get_form {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }
}

## フォームからのデータ処理
sub decode {
	@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;

		&jcode'convert(*value,'sjis');

		if ($name eq 'chk') { push(@dels,$value); }

		$in{$name} = $value;
	}
	$word = $in{'word'};
	$cond = $in{'cond'};
	$mode = $in{'mode'};
	$opt  = $in{'opt'};
	$chk  = $in{'chk'};
}

## 検索該当なし
sub nainai {
	&header;
	print "<center>見つかりませんでした<hr>\n";
	print "<b>$word</b></center>\n";
	print "</body></html>\n";
	exit;
}

## 検索初期画面
sub find_html {
	&header;
	print <<"HTML";
<table width="100%">
<tr><th bgcolor=#8080C0>
<font color=#FFFFFF>過去ログ検索</font>
</th></tr></table>
<P><center>
<table width="80%">
<tr><td>
<font color="#006400">
<OL>
<LI>「過去ログ」を<b>キーワード</b>から該当記事を検索します。
<LI><b>半角スペース</b>で区切って複数のキーワード指定が可\能\です。
<LI><b>検索条件</b>を選択し「検索する」ボタンを押して下さい。
</OL>
</font>
</td></tr></table>
<form action="$script" method="POST">
<input type=hidden name=mode value="do_find">
<table border=1>
<tr><td>キーワード</td><td><input type=text name=word size=30></td></tr>
<tr><td>検索条件</td><td><input type=radio name=cond value="and" checked>AND
<input type=radio name=cond value="or">OR</td></tr>
<tr><th colspan=2><input type=submit value="検索する"></th></tr>
</table>
</form></center>
<hr>
<body></html>
HTML
	exit;
}

## HTMLヘッダー部
sub header {
	print "Content-type: text/html\n\n";
	print "<html>\n<head>\n";
	print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
	print "<title>編集ファイル</title></head>\n";
	print "$body\n";
}

## エラー処理
sub error {
	unlink($lockfile) if (-e $lockfile);
	&header;
	print "<center><hr width='75%'><h3>ERROR !</h3>\n";
	print "<P><font color=#DD0000><B>$_[0]</B></font>\n";
	print "<P><hr width='75%'></center>\n";
	print "</body></html>\n";
	exit;
}

#--------------#
#  ロック処理  #
#--------------#
sub lock {
	# 1分以上古いロックは削除する
	if (-e $lockfile) {
		local($mtime) = (stat($lockfile))[9];
		if ($mtime < time - 60) { &unlock; }
	}
	local($retry) = 5;
	# symlink関数式ロック
	if ($lockkey == 1) {
		while (!symlink(".", $lockfile)) {
			if (--$retry <= 0) { &error('Lock is busy'); }
			sleep(1);
		}
	# mkdir関数式ロック
	} elsif ($lockkey == 2) {
		while (!mkdir($lockfile, 0755)) {
			if (--$retry <= 0) { &error('Lock is busy'); }
			sleep(1);
		}
	}
	$lockflag=1;
}

#--------------#
#  ロック解除  #
#--------------#
sub unlock {
	if ($lockkey == 1) { unlink($lockfile); }
	elsif ($lockkey == 2) { rmdir($lockfile); }
	$lockflag=0;
}

