#!/usr/bin/perl
#use CGI::Carp qw(fatalsToBrowser);
# ┌─────────────────────────────────
# │ Column HTML v1.20 (2002/04/07)
# │ Copyright(C) S.Hakusa 2001-2002
# │ http://www.hakusa.net/computer/
# └─────────────────────────────────
$ver = 'column HTML v1.20改';
# ┌─────────────────────────────────
# │ [注意事項]
# │ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
# │    いかなる損害に対して作者は一切の責任を負いません。
# │ 2. 質問やその他のお問い合わせは一切お答え出来ません。
# │    ご自身で解決してください。
# │    迷惑になると思いますので、決して誰にも相談しないで下さい。
# └─────────────────────────────────
#（デザイン）http://amado.acz.jp/amado/
#（再配布）http://sapporo.cup.com/column/columnhtml/
#
#
#
# [ 設置例 ]

#  public_html / index.html (トップページ）
#       |
#       +-- column / columnh.cgi  [755]
#              |     columnh.log  [666]
#              |     index.html   [666]
#              |     jcode.pl     [644]
#              |
#              +-- lock [777] /
#              |
#              +-- menu [777] /
#              |
#              +-- log [777] /
#              |
#              +-- img [777] /


# ******************************************************************************
#   パラメータ設定  ************************************************************
# ******************************************************************************

# --------------------------------------
#   各種ファイル位置指定  --------------
# --------------------------------------
require 'jcode.pl';       # jcode.plの位置

# CGIスクリプト自身をURLで指定
$script = './columnh.cgi';

# トップファイルHTMLをURLで指定
$htm_url = 'http://popup.tok2.com/home/maoh/21_cgi-bin/column/index.html';

# 戻り先 (index.htmlなど)
$home = 'http://popup.tok2.com/home/maoh/21_cgi-bin/column/index.html';

# configファイルを指定
$config = './config.dat';

# 管理用パスワード(英数字)
$pass = 'kaikai';

# トップページ新着記事表示件数(数字)
$newpagelog = '30';

#形式（雑文、コラム、ニュース、日記、旅行記、記録など適当に入れる）
$wordstyle = 'コラム';

#検索エンジン用の説明文
$searchword = 'コラム 雑文 日記 ソフトレビュー';

#画像アップロード機能を使うか否か
$imageupok = '1';# OK=1,NO=O

#画像アップロードCGIスクリプトファイル名
#変更する際は、実際のファイル名も変更して下さい。
$wwwupl2 = 'wwwupl2.cgi';


#====しばカウンタ====
# カウンタプラス値
$countplus = "";
# カウンタ開始日
$countdate = '00/01/07';
# カウンタファイルの先頭文字・拡張子の指定
$countfile = './count/count';
$countfiledat = '.txt';
# カウンタ強度（０のときは使用しない）
$countlevel = 4;
#====しばカウンタ====


# ******************************************************************************
#   パラメータ設定はここまでです。以下を変更すると「改造」になります  **********
# ******************************************************************************

# ******************************************************************************
#   メイン処理  ****************************************************************
# ******************************************************************************

&paramake;
&decode;
if ($mode eq 'regist') { &regist; }
elsif ($mode eq 'form') { &form; }
elsif ($mode eq 'find') { &find; }
elsif ($mode eq 'admin') { &admin; }
elsif ($mode eq 'config') { &config; }
elsif ($mode eq 'config_edit') { &config_edit; }
elsif ($mode eq 'allwrite') { &allwrite; }
elsif ($mode eq 'mente') { &mente; }
elsif ($mode eq 'edit') { &edit; }
elsif ($mode eq "past" && $pastkey) { &past; }
&location;

# ******************************************************************************
#   書き込みフォーム  **********************************************************
# ******************************************************************************
sub form
{
	# パスワードチェック
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }

	# 日時を取得
	$ENV{'TZ'} = "JST-9";
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
	@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	# フォーマット
	$date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday,$week[$wday]);
#	$date = sprintf("%04d-%02d-%02d (%s)",$year+1900,$mon+1,$mday,$week[$wday]);

	# フォームを表示
	print &header;
	print "[<a href=\"javascript:history.back()\">戻る</a>]\n";
	print "<blockquote><form action=\"$script\" method=\"$method\">\n";
	print "<input type=hidden name=mode value=\"regist\">\n";
	print "<input type=hidden name=pass value=\"$in{'pass'}\">\n";
   	print "以下のフォームから記事を書き込んで下さい。<P>\n";
   	print "<b>日　付</b><br>\n";
   	print "<input type=text name=date value=\"$date\" size=20><br>\n";
	print "<b>タイトル</b><br>\n";
	print "<input type=text name=sub size=\"$sub_wid\" value=\"$res_sub\"><br>\n";
	print "<input type=submit value='書き込み'><input type=reset value='リセット'><br>\n";
	print "<b>内　容</b><br>\n";
	print "<textarea name=comment cols=\"$com_wid\" rows=\"$com_hig\" wrap=soft>$res_com</textarea><br>\n";


#	# ログを書く
	print "</form></blockquote>\n";

	#画像アップ機能
	if ($imageupok) { &wwwupl; }


#書込画面に過去ログが必要な人は下記を有効にする。
#	print "<hr>\n";
#	open(IN,"$logfile") || &error("Open Error : $logfile");
#	$i=0;
#	while ($data = <IN>)
#	{
#		$i++;
#		if ($i > $newpagelog) { last; }
#		print &log_view($data);
#	}
#	close(IN);

	print "</body>\n</html>\n";
	exit;
}

# ******************************************************************************
#   書き込み処理  **************************************************************
# ******************************************************************************
sub regist
{
	# チェック
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }
	if ($in{'comment'} eq "") { &error("コメントに記入がありません"); }

	if ($lockkey) { &lock; }		# ロック開始

	open(IN,"$logfile") || &error("Open Error : $logfile");
	@lines = <IN>;
	close(IN);

	# 二重投稿の禁止
	($num,$date,$sub,$com) = split(/<>/, $lines[0]);
	&error("二重投稿は禁止です") if ($in{'name'} eq $name && $in{'comment'} eq $com);

	# 記事Noカウント
	$no = $num + 1;

	# ログを更新
	unshift (@lines,"$no<>$in{'date'}<>$in{'sub'}<>$in{'comment'}<>\n");
	open(OUT,">$logfile") || &error("Write Error : $logfile");
	print OUT @lines;
	close(OUT);

	# HTMLファイルを生成
	&html_regist_top;
	&html_regist_menu;

#ここから2002.08.10修正
#元	&html_regist_main(0);
#
	&html_regist_main(0);
	if	( $#logs > 0 )
	{ &html_regist_main(1);	}	# 次ページのリンクを変更するため
#ここまで
#
	if ($lockkey) { &unlock; }		# ロック解除

	# HTMLファイルへ戻る
	&location;
	exit;
}


# ******************************************************************************
#   管理用処理  ****************************************************************
# ******************************************************************************
sub admin
{
	# ログイン画面
	if ($in{'pass'} eq '')
	{
		print &header;
		print "[<a href=\"$htm_url\">戻る</a>]\n";
#		print "<table width='100%'><tr><th bgcolor=\"$obi_color\">\n";
#		print "<font color=\"$s_color\"><b>入室画面</b></font></table>\n";
		print "<h4>管理用パスワードを入力して下さい</h4>\n";
		print "<form action=\"$script\" method=\"$method\">\n";
	    print "<input type=radio name=mode value=form checked>書込　\n";
	    print "<input type=radio name=mode value=admin>ログ　\n";
	    print "<input type=radio name=mode value=config>環境　\n";
	    print "<input type=radio name=mode value=allwrite>全書替<P>\n";
		print "<input type=password name=pass size=8>\n";
		print "<input type=submit value=' 認証 '></form>\n";
		print "</body>\n</html>\n";
		exit;
	}

	# パスワードチェック
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }

	# 修正
	if ($in{'ope'} eq 'mente' && $in{'no'}) { &mente; }

	# 削除
	elsif ($in{'ope'} eq 'del' && $in{'no'})
	{
		if ($lockkey) { &lock; }	# ロック開始
		@lines=(); $i = 0;

		open(IN,"$logfile") || &error("Open Error : $logfile");
		@logs = <IN>;
		close(IN);

		# １．削除したナンバーから配列位置を割り出し、
		# 　　その前後の配列位置を得る（旧データ）
		foreach (@logs)
        {
			($no) = split(/<>/);
			if ($in{'no'} == $no) { $prevpage = $i + 1; $nextpage = $i - 1; }
			else { push(@lines,$_); }
			$i++;
		}

		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @lines;
		close(OUT);

		# ２．１で得た「前後のデータ」の配列位置から、ナンバーを得る
		# 　　（旧データ）
	   	($pp2) = split(/<>/,$logs[$prevpage]);
	   	($np2) = split(/<>/,$logs[$nextpage]);

		# ３．２で得たナンバーから、配列位置を得る（新データ）
		$i = 0;
		foreach (@lines)
        {
			($no) = split(/<>/);
			if ($np2 == $no) { $npage = $i; }
			elsif ($pp2 == $no) { $ppage = $i; }
			$i++;
		}

    	# HTMLを再作成
		&html_regist_top;
    	&html_regist_menu;
		&html_regist_main($ppage);
		&html_regist_main($npage);

    	# HTMLファイルを削除
       	$renban = sprintf("%04d",$in{'no'});
        unlink("$logdir$renban.html") || &error("Delete Error : $logdir$renban.html");

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

	# 管理画面
	print &header;
	print <<"EOM";
[<a href="$htm_url">戻る</a>]
<table width="100%"><tr><th bgcolor="$obi_color">
<font color="$s_color"><b>管理画面</b></font></table>
<form action="$script" method="$method">
<input type=hidden name=mode value="admin">
<input type=hidden name=pass value="$in{'pass'}">
<input type=submit value=" 選択する ">
<select name=ope>
<option value=mente>修正</select>
<DL>
EOM
	# ログ表示
	open(IN,"$logfile") || &error("Open Error : $logfile");
	$list_leg2 = $list_leg - 2;
	foreach (<IN>)
	{
		($no,$date,$sub,$com) = split(/<>/);
		$com =~ s/<br>//g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g;
		if (length($com) > $list_leg )
		{
			$com=substr($com,0,$list_leg2);
			$com .= "...";
		}
		print "<DT><hr><input type=radio name=no value=\"$no\">\n";
		print "[<b>$no</b>] <b>$sub</b> - $date\n";
		print "<DD>$com\n";
	}
	close(IN);
	print "<DT><hr>\n</DL>\n</form>\n</body>\n</html>\n";
	exit;
}

# ******************************************************************************
#   記事編集処理  **************************************************************
# ******************************************************************************
sub mente
{
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }

	if ($in{'num'})
	{
        if ($lockkey) { &lock; }	# ロック開始
		@lines=();
		$i=0;
		open(IN,"$logfile") || &error("Open Error : $logfile");
		foreach (<IN>)
		{
			($no,$date,$sub,$com) = split(/<>/);
			if ($in{'num'} == $no) {
				$i2=$i;
				$_ = "$no<>$date<>$in{'sub'}<>$in{'comment'}<>\n";
			}
			push(@lines,$_);
			$i++;
		}
		close(IN);
		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @lines;
		close(OUT);

        # ページに反映
    	&html_regist_menu;
    	&html_regist_main($i2);

		if ($lockkey) { &unlock; }	# ロック開始

		# 戻る
    	&admin;
	}

	print &header;
	print <<"EOM";
[<a href="$htm_url?">戻る</a>]
<table width="100%"><tr><th bgcolor="$obi_color">
<font color="$s_color"><b>管理画面</b></font></table>
<form action="$script" method="$method">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=mode value="mente">
<input type=hidden name=num value="$in{'no'}">
EOM
	open(IN,"$logfile") || &error("Open Error : $logfile");
	foreach (<IN>)
	{
		($no,$date,$sub,$com) = split(/<>/);
		last if ($in{'no'} == $no);
	}
	close(IN);
	$com =~ s/<br>/\r/g;

	print "<b>タイトル</b><br>";
	print "<input type=text name=sub size=\"$sub_wid\" value=\"$sub\"><br><br>\n";
	print "<input type=submit value='編集する'>";
	print "<input type=reset value='リセット'><br><br>\n";
	print "<b>コメント</b><br>\n";
	print "<textarea name=comment cols=\"$com_wid\" rows=\"$com_hig\" wrap=soft>$com</textarea>\n";
	print "</form>\n";

	#画像上げ機能
	if ($imageupok) { &wwwupl; }


	print "</body>\n</html>\n";
	exit;
}


# ******************************************************************************
#   環境設定変更  **************************************************************
# ******************************************************************************
sub config
{
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }

	print &header;
	print <<"EOM";
[<a href="$htm_url?">戻る</a>]
<table width="100%"><tr><th bgcolor="$obi_color">
<font color="$s_color"><b>環境設定</b></font></table>
<blockquote>
<UL>
<LI>設定ファイルの修正を行います。
<LI>変更したい個所を修正し、送信キーを押してください。
</UL>
<form action="$script" method="$method">
<input type=hidden name=mode value="config_edit">
<input type=hidden name=pass value="$in{'pass'}">
<table>
<tr><td colspan=2><hr></td></tr>
<tr><td>トップページの場所</td><td><input type=text name=htmtop size=25 value="$htmtop"></td></tr>
<tr><td>ログファイルの場所</td><td><input type=text name=logfile size=25 value="$logfile"></td></tr>
<tr><td>ログディレクトリの場所１</td><td><input type=text name=logdirm size=25 value="$logdirm"></td></tr>
<tr><td>ログディレクトリの場所２</td><td><input type=text name=logdir size=25 value="$logdir"></td></tr>
<tr><td>メニューディレクトリの場所</td><td><input type=text name=menudir size=25 value="$menudir"></td></tr>
<tr><td>ロックファイルの場所</td><td><input type=text name=lockfile size=25 value="$lockfile"></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>メインページ上バナー</td><td><textarea rows="3" name=main_tbanner cols="58" value="$main_tbanner"></textarea></td></tr>
<tr><td>メインページ下バナー</td><td><textarea rows="3" name=main_bbanner cols="58" value="$main_bbanner"></textarea></td></tr>
<tr><td>メニューページ上バナー</td><td><textarea rows="3" name=menu_tbanner cols="58" value="$menu_tbanner"></textarea></td></tr>
<tr><td>メニューページ下バナー</td><td><textarea rows="3" name=menu_bbanner cols="58" value="$menu_bbanner"></textarea></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>壁紙URL</td><td><input type=text name=bg size=75 value="$bg"></td></tr>
<tr><td>背景色</td><td><input type=text name=bc size=15 value="$bc"></td></tr>
<tr><td>文字色</td><td><input type=text name=tx size=15 value="$tx"></td></tr>
<tr><td>リンク色(link)</td><td><input type=text name=lk size=15 value="$lk"></td></tr>
<tr><td>リンク色(vlink)</td><td><input type=text name=vl size=15 value="$vl"></td></tr>
<tr><td>リンク色(alink)</td><td><input type=text name=al size=15 value="$al"></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>タイトル名</td><td><input type=text name=title size=50 value="$title"></td></tr>
<tr><td>タイトル色</td><td><input type=text name=t_color size=15 value="$t_color"></td></tr>
<tr><td>サイズ</td><td>
<select name=t_size>
EOM

	for ($i = 7; $i >= 1; $i--)
	{
		if ( $t_size eq $i ) { print "<option value=$i selected>$i \n"; }
		else  { print "<option value=$i>$i \n"; }
	}

	print <<"EOM";
</select></td></tr>
<tr><td>タイトル文字スタイル</td><td><input type=text name=t_font size=25 value="$t_font"></td></tr>
<tr><td>タイトルgif画像URL</td><td><input type=text name=t_gif size=25 value="$t_gif"></td></tr>
<tr><td>タイトル画像の横幅</td><td><input type=text name=tg_w size=25 value="$tg_w"></td></tr>
<tr><td>タイトル画像の高さ</td><td><input type=text name=tg_h size=25 value="$tg_h"></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>本文の行間</td><td><input type=text name=cf_h size=5 value="$cf_h"></td></tr>
<tr><td>本文文字サイズ</td><td><input type=text name=cf_s size=10 value="$cf_s"></td></tr>
<tr><td>本文文字スタイル</td><td><input type=text name=cf_f size=25 value="$cf_f"></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>\表\題のポインタ</td><td><input type=text name=point size=15 value="$point"></td></tr>
<tr><td>\表\題のポインタ色</td><td><input type=text name=obi_color size=15 value="$obi_color"></td></tr>
<tr><td>\表\題文字色</td><td><input type=text name=s_color size=15 value="$s_color"></td></tr>
<tr><td>メニューのポインタ</td><td><input type=text name=point2 size=15 value="$point2"></td></tr>
<tr><td>メニューのポインタ色</td><td><input type=text name=p_color size=15 value="$p_color"></td></tr>
<tr><td colspan=2><hr></td></tr>
<tr><td>題名欄の長さ</td><td><input type=text name=sub_wid size=5 value="$sub_wid"></td></tr>
<tr><td>コメント欄横幅</td><td><input type=text name=com_wid size=5 value="$com_wid"></td></tr>
<tr><td>コメント欄高さ</td><td><input type=text name=com_hig size=5 value="$com_hig"></td></tr>
<tr><td>コメントリスト文字数</td><td><input type=text name=list_leg size=5 value="$list_leg"></td></tr>
<tr><td>１ページ記事数</td><td><input type=text name=pagelog size=5 value="$pagelog"></td></tr>
<tr><td colspan=2><hr></td></tr>
EOM

	if ( $autolink eq 1 )
	{
		print "<tr><td>オートリンク</td><td>　する<input type=\"radio\" value=\"1\" name=autolink checked>　　しない<input type=\"radio\" value=\"0\" name=autolink></td></tr>\n";
	}
	else
	{
		print "<tr><td>オートリンク</td><td>　する<input type=\"radio\" value=\"1\" name=autolink>　　しない<input type=\"radio\" value=\"0\" name=autolink checked></td></tr>\n";
	}

	if ( $method == "POST" )
	{
		print "<tr><td>method形式</td><td>　\POST<input type=\"radio\" value=\"POST\" name=method checked>　　\GET<input type=\"radio\" value=\"GET\" name=method></td></tr>\n";
	}
	else
	{
		print "<tr><td>method形式</td><td>　\POST<input type=\"radio\" value=\"POST\" name=method>　　\GET<input type=\"radio\" value=\"GET\" name=method checked></td></tr>\n";
	}

	if ( $lockkey eq "0" )
	{
		print "<tr><td>ファイルロック形式</td><td>　なし<input type=\"radio\" value=\"0\" name=lockkey checked>　　\symlink関数<input type=\"radio\" value=\"1\" name=lockkey>　　\mkdir関数<input type=\"radio\" value=\"2\" name=lockkey></td></tr>\n";
	}
	elsif ( $lockkey eq "1" )
	{
		print "<tr><td>ファイルロック形式</td><td>　なし<input type=\"radio\" value=\"0\" name=lockkey>　　\symlink関数<input type=\"radio\" value=\"1\" name=lockkey checked>　　\mkdir関数<input type=\"radio\" value=\"2\" name=lockkey></td></tr>\n";
	}
	else
	{
		print "<tr><td>ファイルロック形式</td><td>　なし<input type=\"radio\" value=\"0\" name=lockkey>　　\symlink関数<input type=\"radio\" value=\"1\" name=lockkey>　　\mkdir関数<input type=\"radio\" value=\"2\" name=lockkey checked></td></tr>\n";
	}

	if ( $nocashe eq "1" )
	{
		print "<tr><td>ブラウザのキャッシュ取り込み</td><td>　する<input type=\"radio\" value=\"1\" name=nocashe checked>　　しない<input type=\"radio\" value=\"0\" name=nocashe></td></tr>\n";
	}
	else
	{
		print "<tr><td>ブラウザのキャッシュ取り込み</td><td>　する<input type=\"radio\" value=\"1\" name=nocashe>　　しない<input type=\"radio\" value=\"0\" name=nocashe checked></td></tr>\n";
	}

	print <<"EOM";
<tr><td colspan=2><hr></td></tr></table></blockquote>
<center><input type=submit value="送信する"><input type=reset value="リセット"></center>
</form></body></html>
EOM
	exit;
}

sub config_edit
{
	if ($in{'pass'} ne $pass) { &error("パスワードが違います"); }

	$para = "$in{'htmtop'}<>$in{'logfile'}<>$in{'logdirm'}<>$in{'logdir'}<>$in{'menudir'}<>$in{'lockfile'}<>$in{'main_tbanner'}<>$in{'main_bbanner'}<>$in{'menu_tbanner'}<>$in{'menu_bbanner'}<>$in{'bg'}<>$in{'bc'}<>$in{'tx'}<>$in{'lk'}<>$in{'vl'}<>$in{'al'}<>$in{'title'}<>$in{'t_color'}<>$in{'t_size'}<>$in{'t_font'}<>$in{'t_gif'}<>$in{'tg_w'}<>$in{'tg_h'}<>$in{'cf_h'}<>$in{'cf_s'}<>$in{'cf_f'}<>$in{'point'}<>$in{'obi_color'}<>$in{'s_color'}<>$in{'point2'}<>$in{'p_color'}<>$in{'sub_wid'}<>$in{'com_wid'}<>$in{'com_hig'}<>$in{'list_leg'}<>$in{'pagelog'}<>$in{'autolink'}<>$in{'method'}<>$in{'lockkey'}<>$in{'nocashe'}<>\n";

	open(PARA,">$config") || &error("Write Error : $config");
	print PARA $para;
	close(PARA);

	# 戻る
	&paramake;
   	&config;

}
# ******************************************************************************
#   全記事書き直し  ************************************************************
# ******************************************************************************
sub allwrite
{
	open(IN,"$logfile") || &error("Open Error : $logfile");
	@lines = <IN>;
	close(IN);

	if ($lockkey) { &lock; }		# ロック開始

	# HTMLファイルを生成
	&html_regist_top;
	&html_regist_menu;
	for (0..$#lines) { &html_regist_main($_); };

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

	# HTMLファイルへ戻る
	&location;
}
# ******************************************************************************
#   ワード検索  ****************************************************************
# ******************************************************************************
sub find
{
	print &header;
	print <<"EOM";
[<a href="$htm_url" target=\"_top\">戻る</a>]
<table width="100%"><tr><th bgcolor="$obi_color">
<b><font color="$s_color">単語検索</font></b></table>
<UL>
<LI>検索したい<b>キーワード</b>を入力し検索条件を選択し「検索」を押してください。
<LI>複数のキーワードを入力するときは、<b>半角スペース</b>で区切って下さい。
<form action="$script" method="$method">
<input type=hidden name=mode value="find">
キーワード <input type=text name=word size=30 value="$in{'word'}">
検索条件 <select name=cond>
EOM
	foreach ("AND", "OR")
	{
		if ($in{'cond'} eq $_)
		{
			print "<option value=\"$_\" selected>$_\n";
		}
		else
		{
			print "<option value=\"$_\">$_\n";
		}
	}
	print "</select>\n<input type=submit value=' 検索 '></form>\n</UL>\n";

	# ワード検索の実行と結果表示
	if ($in{'word'} ne '')
	{
		$in{'word'} =~ s/　/ /g;
		@pairs = split(/\s+/, $in{'word'});

		@new=();
		open(IN,"$logfile") || &error("Can't open $logfile");
		foreach (<IN>)
        {
			$flag=0;
			foreach $pair (@pairs)
            {
				if (index($_,$pair) >= 0)
                {
					# ORは１つでもあればいい
					$flag=1;
					if ($in{'cond'} eq 'OR') { last; }
				}
                else
                {
					# ANDは１つでもないとだめ
					if ($in{'cond'} eq 'AND') { $flag=0; last; }
				}
			}
			if ($flag) { push(@new,$_); }
		}
		close(IN);

		# 検索終了
		$count = @new;
		print "検索結果：<b>$count</b>件<hr>\n";
		foreach (@new)
        {
			($no,$date,$sub,$com) = split(/<>/);
		  	print "[<b>$no</b>] <b>$sub</b> - $date\n";
			print "<blockquote>$com</blockquote><hr>\n";
		}
	}
	print "</body>\n</html>\n";
	exit;
}

# ******************************************************************************
#   サブルーチン  **************************************************************
# ******************************************************************************

# --------------------------------------
#   HTML生成処理@　トップファイル  ----
# --------------------------------------
sub html_regist_top
{
	open(IN,"$logfile") || &error("Open Error : $logfile");
	@logs = <IN>;
	close(IN);

    $i = 1;
    $r = 1;     # 連番の最初は１

    # 最新連番獲得（４桁化処理）
	$renban = sprintf("%04d",$r);

    # 書き込むHTMLファイルを開く
#	open(WR,">$htmtop") || &error("Write Error : $htmtop");
        &wr_open("$htmtop", 'HTML');

	print WR "<!--spstart-->\n";
	print WR "<H2>$title</H2>\n";
	print WR "<font size=-1>\n";
	print WR "<P>This Page is Only in Japanese.\n";
	print WR "<BR>主にゲームのレビュー、SS小説、コラム、雑文などのんべんだらりと書いていくページです。\n";
	print WR "<BR>ここは永久に工事中です。リンクはフリーですが、トップページにお願いします。\n";
	print WR "<br>このコンテンツ内のコラムを流用、二次使用したいという方はメールにてご連絡下さい。\n";
	print WR "</font>\n";

	print WR "<HR noshade>\n";
	print WR "<ul>\n";
	print WR "<li><A HREF=./menu/0001.html>$wordstyle一覧</A>：過去の$wordstyleの一覧です。\n";
	print WR "<li><A HREF=./columnh.cgi?mode=find>$wordstyle検索</A>：$wordstyleの内容検索です。\n";
	print WR "<li><A HREF=./link/wwwhpmd.cgi>リンク</A>：おすすめサイト等へのリンクです（工事中）。\n";
	print WR "</ul>\n";
	print WR "<HR noshade>\n";

        print WR "<br><h4>[新着リスト]</h4>\n";

	foreach (@logs)
	{
    	($num,$date,$sub,$com) = split(/<>/);
    	&auto_link($com);

        # newpagelog分たまったら出力
        if ($i <= $newpagelog)
        {
        # 内容書き出し
       	$renban = sprintf("%04d",$num);
       	print WR "<BR>[$renban] <a href=\"$logdir$renban.html\">$sub</a> ($date)\n";
        $i++
	}
	}

	print WR "<p>\n";
	print WR "<HR noshade>\n";

	# 著作権を表示（削除禁止）
	&copyright;


	print WR "<p>\n";
	print WR "<font color=\"$p_color\">$point2</font>";
	print WR "<a href=\"$script?mode=admin\" target=\"_top\">管理用</a></B><br>\n";

#このあたりにカウンタを埋め込みたい。

#	print WR "<br>\n";
#	print WR "<!--#exec cmd=\"./analyze/log.pl\"-->\n";
#	print WR "<FONT size=2>\n";
#	print WR "本日は<b><!--#include virtual=\"./log2/count_day.dat\"--></b>カウント / ";
#	print WR "昨日は<b><!--#include virtual=\"./log2/count_reg.dat\"--></b>カウント<br>\n";
#	print WR "</FONT>\n";
#	print WR "<FONT size=2>今まで<b>";
	print WR "<FONT size=2>";


#	print WR "<!--#exec cmd=\"./log2/pcount2.pl\"-->";
	print WR "</FONT>\n";
#	print WR "</b>回のアクセス</FONT>\n";





	print WR "<!--spend-->\n";
	print WR "</body>\n</html>\n";
   	close(WR);
}


# --------------------------------------
#   HTML生成処理A　メニューファイル  --
# --------------------------------------
sub html_regist_menu
{
	open(IN,"$logfile") || &error("Open Error : $logfile");
	@logs = <IN>;
	close(IN);

    $i = 0;
    $r = 1;     # 連番の最初は１

    # 最新連番獲得（４桁化処理）
	$renban = sprintf("%04d",$r);

    # 書き込むHTMLファイルを開く
	&wr_open("$menudir$renban.html" , "HTML");

   	print WR "$menu_tbanner\n";
	print WR "<H3>$title</H3>\n";
        print WR "<P>$wordstyleの一覧\n";
	print WR "<HR noshade>\n";
	print WR "[<a href=\"../index.html\" target=\"_top\">home</a>]\n";
	print WR "<HR noshade>\n";
	foreach (@logs)
    {
    	($num,$date,$sub,$com) = split(/<>/);
    	&auto_link($com);

        # pagelog分たまったら出力
        if ($i >= $pagelog)
        {
            # ナビゲーション書き出し
            if ( $r ne 1 )
            {
        	    $renban = sprintf("%04d",$r-1);
                print WR "<br><a href=\"$renban.html\">新しい$pagelog件</a>";
            }
            $r++;     # 連番を＋１
        	$renban = sprintf("%04d",$r);
            print WR "<br><a href=\"$renban.html\">古い$pagelog件</a>\n";

	print WR "<p>\n";
	print WR "<HR noshade>\n";
   	print WR "$menu_bbanner\n";
	# 著作権を表示（削除禁止）
	&copyright;

	print WR "</body>\n</html>\n";

        	close(WR);

            $i = 0;
        	&wr_open("$menudir$renban.html", 'HTML');
   	print WR "$menu_tbanner\n";
	print WR "<H3>$title</H3>\n";
        print WR "<P>$wordstyleの一覧\n";
	print WR "<HR noshade>\n";
	print WR "[<a href=\"../index.html\" target=\"_top\">home</a>]\n";
	print WR "<HR noshade>\n";
        }
        # 内容書き出し
       	$renban = sprintf("%04d",$num);
       	print WR "<BR>[$renban] <a href=\"$logdirm$renban.html\">$sub</a> ($date)\n";

        $i++
	}

    # ナビゲーション書き出し
    if ( $r ne 1 )
    {
        $renban = sprintf("%04d",$r-1);
        print WR "<br><a href=\"$renban.html\">新しい$pagelog件</a>";
    }

	print WR "<p>\n";
	print WR "<HR noshade>\n";
   	print WR "$menu_bbanner\n";

	# 著作権を表示（削除禁止）
	&copyright;

	print WR "</body>\n</html>\n";
   	close(WR);
}

# --------------------------------------
#   HTML生成処理B　ログファイル  ------
# --------------------------------------
sub html_regist_main
{
	local($_);

	open(IN,"$logfile") || &error("Open Error : $logfile");
	@logs = <IN>;
	close(IN);

   	($num,$date,$sub,$com) = split(/<>/,$logs[$_[0]]);
	&auto_link($com) if ($autolink);
   	$renban = sprintf("%04d",$num);

    # 書き込むHTMLファイルを開く
	&wr_open("$logdir$renban.html" , "HTML");

	# リンク部
   	print WR "$main_tbanner\n";
#	print WR "<B><font color=\"$p_color\">$point2</font>";
#	print WR "<a href=\"$home\" target=\"_top\">トップ</a>\n";
#	print WR "<font color=\"$p_color\">$point2</font>";
#	print WR "<a href=\"$script?mode=find\">検索</a>\n";
#	print WR "<font color=\"$p_color\">$point2</font>";
#	print WR "<a href=\"$script?mode=admin\" target=\"_top\">管理用</a></B><br>\n";

	# タイトル部
	if ($t_gif eq '')
    {
	print WR "<H3>$title</H3>\n";

#タイトルの文字を環境設定で変えたい場合は↓を使う。
#  	print WR "<font color=\"$t_color\" size=\"$t_size\" face=\"$t_font\"><b>$title</b></font><br><br>\n";
	}
    else
    {
	  	print WR "<center><img src=\"$t_gif\" width=$tg_w height=$tg_h alt=\"$title\"></center><br>\n";
	}

	# 記事を展開

	# 記事を展開
  	print WR "<p>[$renban] $sub ($date)\n";
	print WR "<HR noshade>\n";
	print WR "<TABLE border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
#650に固定する場合は↓を使う
#  	print WR "<TABLE border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"650\">\n";
  	print WR "<TR><TD>\n";
  	print WR "$com\n";
  	print WR "</TD></TR>\n";
  	print WR "</TABLE>\n";

  	print WR "<HR noshade>\n";

	# リンクを作成
	# 前頁へのリンク
	if ( $_[0] eq $#logs )
	{
	  	print WR "&lt;Back|<a href=\"../index.html\" target=\"_top\">Top</a>|";
	}
	else
	{
		$pp = $_[0] + 1;
	   	($num) = split(/<>/,$logs[$pp]);
	   	$pp = sprintf("%04d",$num);
	  	print WR "&lt;<a href=\"./$pp.html\">Back</a>|<a href=\"../index.html\" target=\"_top\">Top</a>|";
	}

	# 次頁へのリンク
	if ( $_[0] eq 0 )
	{
		print WR "Next&gt;\n";
	}
	else
	{
		$np = $_[0] - 1;
	   	($num) = split(/<>/,$logs[$np]);
	   	$np = sprintf("%04d",$num);
		print WR "<a href=\"./$np.html\">Next</a>&gt;\n";
	}



   	print WR "$main_bbanner\n";
	print WR "<hr noshade>\n";

	# 著作権を表示（削除禁止）
	&copyright;

	print WR "</body>\n</html>\n";
	close(WR);
}

# --------------------------------------
#   書き込みファイルオープン  ----------
# --------------------------------------
sub wr_open
{
	open(WR,">$_[0]") || &error("Write Error : $_[0]");
	print WR &header($_[1]);
}

# --------------------------------------
#   書き込み内容表示  ------------------
# --------------------------------------
sub log_view
{
	local($_);

	($num,$date,$sub,$com) = split(/<>/, $_[0]);
	&auto_link($com) if ($autolink);

	$_ .= "<table width='100%' cellspacing=0><tr bgcolor=\"$obi_color\">\n";
	$_ .= "<td>　<font color=\"$p_color\">$point</font>\n";
	$_ .= "<font color=\"$s_color\"><b>$sub</b></font></td>\n";
	$_ .= "<td align=right>Date: $date　</td></tr></table>\n";
	$_ .= "<blockquote>$com\n";
	$_ .= "</blockquote><hr>\n";
	$_;
}

# --------------------------------------
#   表示ファイルにジャンプ  ------------
# --------------------------------------
sub location
{
	# IISサーバ対応
	if ($ENV{PERLXS} eq "PerlIS")
	{
		print "HTTP/1.0 302 Temporary Redirection\r\n";
		print "Content-type: text/html\n";
	}
	print "Location: $htm_url\n\n";
}

# --------------------------------------
#   デコード  --------------------------
# --------------------------------------
sub decode
{
	local($buf, @in, $key, $val);
	if ($ENV{'REQUEST_METHOD'} eq "POST")
	{
		&error("投稿量が大きすぎます") if ($ENV{'CONTENT_LENGTH'} > 51200);
		read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
	}
	else { $buf = $ENV{'QUERY_STRING'}; }
	@in = split(/&/, $buf);
	foreach (@in)
	{
		($key, $val) = split(/=/);
		$val =~ tr/+/ /;
		$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

		# 文字コード変換
		&jcode'convert(*value,'sjis');

		# 改行処理
		if ($key eq "comment")
		{
			$val =~ s/\r\n/<br>/g;
			$val =~ s/\r/<br>/g;
			$val =~ s/\n/<br>/g;
		}
		else
		{
			$val =~ s/\r//g;
			$val =~ s/\n//g;
		}
		$in{$key} = $val;
	}
	$mode = $in{'mode'};
	if ($in{'sub'} eq "") { $in{'sub'} = "無題"; }
}

# --------------------------------------
#   エラー処理（強制終了）  ------------
# --------------------------------------
sub error
{
	&unlock if ($lockflag);
	print &header;
	print "<div align=center><hr width=400><h3>ERROR !</h3>\n";
	print "<font color=\"$t_color\"><B>$_[0]</B></font>\n";
	print "<P><hr width=400></div>\n</body>\n</html>\n";
	exit;
}

# --------------------------------------
#   HTMLヘッダー作成  ------------------
# --------------------------------------
sub header
{
	local($_);
	return if ($headflag);
	if ($_[0] ne 'HTML')
	{
		$_ .= "Content-type: text/html\n\n";
		$headflag=1;
	}
	$_ .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
	$_ .= "<html lang=\"ja\"><head>\n";
	$_ .= "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">\n";
	$_ .= "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";

	$_ .= "<meta name=\"description\" content=\"$searchword\">\n";
	$_ .= "<meta name=\"keywords\" content=\"記録,日記,コラム,雑文\">\n";

#	$_ .= "<META HTTP-EQUIV=\"Content-Style-Type\" content=\"text/css\">\n";#	$_ .= "<STYLE type=\"text/css\"><!--\n";
#	$_ .= "body,tr,td,th { line-height: $cf_h; font-size:$cf_s; font-family:$cf_f; }\n";
#	$_ .= "a:link    { text-decoration:none; }\n";
#	$_ .= "a:visited { text-decoration:none; }\n";
#	$_ .= "a:active  { text-decoration:none; }\n";
#	$_ .= "a:hover { text-decoration:underline; color:$al; }\n--></STYLE>\n";
	$_ .= "<title>$title</title></head>\n";
	if ($bg)
    {
		$_ .= "<body background=\"$bg\" bgcolor=\"$bc\" text=\"$tx\" link=\"$lk\" vlink=\"$vl\" alink=\"$al\">\n";
	}
    else
    {
		$_ .= "<body bgcolor=\"$bc\" text=\"$tx\" link=\"$lk\" vlink=\"$vl\" alink=\"$al\">\n";
	}
	$_;
}

# --------------------------------------
#   ロック処理  ------------------------
# --------------------------------------
sub lock
{
	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;
}

# --------------------------------------
#   自動リンク  ------------------------
# --------------------------------------
sub auto_link
{
	$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_top\">$2<\/a>/g;
}

# --------------------------------------
#   パラメータ取り込み  ----------------
# --------------------------------------
sub paramake
{
	open(PARA,"$config") || &error("Can't open $config");
	$para = <PARA>;
	close(PARA);

	($htmtop,$logfile,$logdirm,$logdir,$menudir,$lockfile,
		$main_tbanner,$main_bbanner,$menu_tbanner,$menu_bbanner,
		$bg,$bc,$tx,$lk,$vl,$al,
		$title,$t_color,$t_size,$t_font,$t_gif,$tg_w,$tg_h,
		$cf_h,$cf_s,$cf_f,
		$point,$obi_color,$s_color,$point2,$p_color,
		$sub_wid,$com_wid,$com_hig,$list_leg,
		$pagelog,$autolink,$method,$lockkey,$nocashe) = split(/<>/,$para);
}



# --------------------------------------
#   画像アップロード    ----------------
# --------------------------------------
sub wwwupl
{
#=============================================================
#http://tohoho.wakusei.ne.jp/wwwxx034.htm参照

print "<blockquote>\n";
print "<b>画像アップロード（.jpgのみ）</b><br>\n";
print "<FORM METHOD=POST ENCTYPE=\"multipart/form-data\" ACTION=\"$wwwupl2\" target=\"_blank\">\n";
print "<INPUT TYPE=file NAME=\"01\"><BR>\n";
print "<INPUT TYPE=file NAME=\"02\"><BR>\n";
print "<INPUT TYPE=file NAME=\"03\"><BR>\n";
print "<INPUT TYPE=file NAME=\"04\"><BR>\n";
print "<INPUT TYPE=file NAME=\"05\"><BR>\n";
print "<INPUT TYPE=file NAME=\"06\"><BR>\n";
#print "<input type=password name=pass size=8>\n";
print "<INPUT TYPE=submit VALUE=\"送信\">\n";
print "</FORM>\n";
print "<br><b>参考</b><br>\n";
print "&lt;img src=\"../img/ファイル名\" border=\"0\" width=\"幅\" height=\"高さ\" alt=\"画像の説明\"&gt;<br>\n";
print "&lt;img src=\"../img/\" border=\"0\"&gt;<br>\n";
#print "&lt;BR CLEAR=ALL&gt;<br>\n";
print "</blockquote>\n";
#=============================================================
}

# --------------------------------------
#   著作権表示          ----------------
# --------------------------------------
sub copyright
{
	# 著作権を表示（削除禁止）
	print WR "このシステムは<!-- $ver --><a href='http://www.hakusa.net/computer/' target='_top'>Column HTML</a>を<a href='http://sapporo.cup.com/column/columnhtml/' target='_top'>カスタマイズ</a>したものです。\n";
}
