#!/usr/local/bin/perl

#┌─────────────────────────────────
#│ O*shirase Book v0.3  (2003/03/03)
#│ Copyright(C) CGI Kitchen 2002/02/02-
#│ http://aikon.milkcafe.to/
#└─────────────────────────────────
$ver = 'YYBBS v4.54';
#┌─────────────────────────────────
#│ [注意事項]
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
#│    いかなる損害に対して作者は一切の責任を負いません。
#│ 2. 設置に関する質問はサポート掲示板にお願いいたします。
#│    直接メールによる質問は一切お受けいたしておりません。
#└─────────────────────────────────
#┌─────────────────────────────────
#│ O*shirase Book v0.3  (2003/03/03)
#│ YY-BOARD v4.54に、記事表示部の枠色選択機能・背景画像ランダム表示機能
#│ ・記事表示部の罫線機能を付加し、
#│ Aikon's CGI Kitchen が改造・再配布するものです。
#│ 設置に関する質問等は、Aikon's CGI Kitchen Help Boardにお願いします。
#│ Kent Web さんへのお問い合わせは絶対になさらないよう、お願いします。
#│ 
#└─────────────────────────────────
#┌─────────────────────────────────
#│ O*shirase Book v0.3  (2003/03/03)
#│ サンプル素材はPhoto material choco*chocoさんにお借りしました。
#│ http://chocochoco.chu.jp/index.html
#│ 
#│ choco*chocoさんのご厚意で、サンプルにお借りしたPhoto素材を
#│ 同梱させていただきました。
#│ ご利用の際には、choco*chocoさんの利用規定を遵守してください。
#│ 
#│ choco*chocoさんの素材はリンクウエアです。
#│ 実稼動は、リンクページの作成後にしてくださいね。
#│ 
#│ このスクリプトはサンプルAの設定です。
#│ B・Cの設定にも簡単に変更できますが、Bにお借りした画像は梱包していません。
#│ Flowerの320xにありますから、そちらからDLなさってください。
#└─────────────────────────────────
#
# 【ファイル構成例】
#
#  public_html (ホームディレクトリ)
#      |
#      +-- O*shirase / new.cgi    [755]
#            |         new.log    [666]
#            |         count.dat  [666]
#            |         jcode.pl   [644]
#            |         pastno.dat [666]
#            |
#            +-- img / home.gif, bear.gif, ...
#            |
#            +-- lock [777] /
#            |
#            +-- past [777] / 1.dat [666] ...

#============#
#  設定項目  #
#============#
#★//////////// *基本的な設定* ////////////★
#---文字コードライブラリ取込
require './jcode.pl';
#---スクリプトのファイル名
$script      = './new.cgi';
#---ログファイルを指定
$logfile     = './new.log';
#---戻り先のURL(index.html エンターページがある場合はトップページ)
$url_use     = 0;#戻りURLは必要ですか？(0=no 1=yes) 　
$homepage    = "http://www.cyberbb.com/s.c.kairoseitai/kj/";
$target      = '_blank';#ターゲットフレーム
#---ロックファイル名
$lockfile    = './lock/oshirase.lock';
#---カウンタファイル
$cntfile     = './count.dat';
#---methodの形式 (POST/GET)
$method      = 'POST';

#★//////////// *仕様の設定* ////////////★
#---ページトップのメインタイトルの表示は必要？(0=no 1=yes)
$title_use   = 0;
#【注意】非表示の場合でも下のタイトル設定にある$titleだけは記入してください
#---トップメニュー(Top、Help、Listのリンクバー)は必要？(0=no 1=yes)
$link_use    = 0;
#---初期ページの表示形態
#最新記事だけを表示し、他の記事は、トピックス一覧やトップメニューのList(記事一覧)で任意選択する→1
#下記の$p_log件をまとめて表示する→0（この場合は、トピックス一覧とリンクバーのListが表示されません。）
$newpage_mode= 1;
#---トピックス一覧のタイトル数とまとめ表示する場合の記事数
$p_log       = 3;

#【注意】$link_use=0にすると、記事一覧はできません

#★//////////// *タイトルの設定* ////////////★
#---タイトルの設定
#タイトル名を指定
$il_mode     = 'no';#好きなイラストをタイトルに使う場合は'yes'
#イラストを背景に$titleを重ねることができます。
#タイトル文字との重なりが気になる場合は、$ilheightの増減で調整してください。
$il_bg       = './icon/titlel.gif';#イラスト名（画像名）
$ilwidth     = '280';#画像の幅 (ピクセル)
$ilheight    = '60';#画像の高さ(ピクセル)
$ilposition  = 'left top';#画像の位置 
$title       = "What's New";#タイトル名を指定
$t_color     = "#919191";#タイトルの色
$t_size      = '16pt';#タイトルの大きさ
$t_face      = "Tempus Sans ITC";# タイトル文字のフォントタイプ
#タイトルをテキスト表示にする場合のポイント画像
$titlepointl = '';#タイトル左側(タグ可)不要な場合は''
$titlepointr = '';#タイトル右側(タグ可)不要な場合は''
#タイトルにGIF画像を使用する時 (http://から記述)
$title_gif   = "";
$tg_w        = '';#画像の幅 (ピクセル)
$tg_h        = '';#画像の高さ(ピクセル)

#★//////////// *フォントの設定* ////////////★
#文字大きさは、ポイント数（スタイルシートで有効）
$b_size      = '10pt';#本文の文字サイズ
$fb_size     = '10pt';#フォームの文字のサイズ
$lb_size     = '8pt';#リンク文字のサイズ
$sfpt        = '8pt';#半角英数など、一回りサイズが小さい文字
$font_family = 'verdana,\"MS UI Gothic\",\"ＭＳ Ｐゴシック\",Osaka,chicago,Arial,Helvetica';#フォントタイプ 使いたいフォントを先頭に出してください。

#★//////////// *背景の設定* ////////////★
#ページ全体の背景画像を使いますか？(0=no 1=yes)
$backgif_use = 1;
#本体部の壁紙(http://から指定）
$kazu    ='7';#個数は'0'から始まります。
$javabg0 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe40.jpg';
$javabg1 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe50.jpg';
$javabg2 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe60.jpg';
$javabg3 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe70.jpg';
$javabg4 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe8.jpg';
$javabg5 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe4.jpg';
$javabg6 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe5.jpg';
$javabg7 ='http://cyberbb.com/s.c.kairoseitai/kj/news/icon/kabe6.jpg';
$bgcolor     = "#FFFFFF";# 背景色を指定
$bgposition  = 'center 0';
$bgrepeat    = 'no-repeat';
$filter      = '100';#背景を透けさせる程度。（0〜100）100で透けません。

#★//////////// *文字色のカスタマイズ* ////////////★
#---リンク色を指定
$link        = "#00008B";#未訪問
$vlink       = "#00008B";#訪問済
$alink       = "#A45F20";#訪問中
#---本文の文字色
$text        = "#00008B";#全体の文字色を指定

#★//////////// *フォームのカスタマイズ* ////////////★
$fbcolor     = '#FFFFFF';#テキストエリア等の背景色
$f_lsize     = '1px';#フォームの枠線のサイズ 
$f_lstyle    = 'solid';#フォームの枠線の形状 
$f_ltcolor   = '#BBBBBB';#フォームの枠線の色
$f_lttcolor  = '#00008B';#フォームの文字の色
$botcolor    = '#00008B';#送信ボタンの文字の色
$ftblesize   = '350';#フォームテーブルの幅（ピクセル)
$mftblesize  = '330';#メンテフォームのテーブル幅（ピクセル)
#---テキストエリアの幅と行数
$nfcom_wid   = '28';#ネスケ(win98)のテキストエリアの幅
$fcom_wid    = '50';#IE6.0までと上記を除いた環境でのテキストエリアの幅
$rows        = '10';#行数 

#★//////////// *スクロールバーの設定* ////////////★
$scrollbararrowcolor     ='#D9D9D9';
$scrollbarfacecolor      ='#FFFFFF';
$scrollbarbasecolor      ='#FFFFFF';
$scrollbardarkshadowcolor='#FFFFFF';
$scrollbarshadowcolor    ='#FFFFFF';
$scrollbarhighlightcolor ='#D9D9D9';
$scrollbartrackcolor     ='';

#★//////////// *枠線・境界線のカスタマイズ* ////////////★
$wakucolor     = '#BBBBBB';#囲み線の色 
$wakusize      = '1px';#囲み線のサイズ 
$wakustyle     = 'solid';#囲み線の形状
$hrcolor       = '#BBBBBB';#境界線の色 
$hrsize        = '1px';#境界線のサイズ 
$hrstyle       = 'solid';#境界線の形状

#★//////////// *テーブルの設定* ////////////★
$table_c       = "";#テーブルの背景色
$tbgcolor      = "";#記事表示部の背景色
$tblesize      = '330';#記事表示部のテーブルの幅（ピクセル）
$mas_col       = '#BBBBBB';#管理ページの仕切り線の色
#---ポイント画像の色を可変にする？ (0=no 1=yes)
$cel_touka_use = 0;#1を選ぶと、トップメニュー(Top・Infomation・Listのリンクバー)と記事表示部のポイント画像を好きな色にカスタマイズできます。…以下は注意事項で。
$cel_bg        = './img_sl/point_toka.gif';#トップメニュー(Top・Infomation・Listのリンクバー)と記事表示部のポイント透過画像($cel_touka_use=1の場合)
$cel_bgcol     = '#BBBBBB';#トップメニュー部のポイント画像の色($cel_touka_use=1の場合)
$subpoint      = '<img src=./img_sl/point.gif>';#$cel_touka_use=0の場合のポイント画像
#---ページ内リンク、タイトル部分のカスタマイズ
$ftbg          = './img_sl/celbg.gif';#ページタイトル部分の透過画像
$ftbgcol       = '#E4E4E4';#ページタイトル部分、$ftbgの背景色

#【注意事項】ポイント画像は、お好みの色にカスタマイズできる透過画像と、通常の画像(色番号#BBBBBB)があります。テーブルを透明化する場合には、$cel_touka_use=0とし、$subpointを指定してください。透過画像を使用すると、背景画像と透過ポイント画像が重なった部分が不自然な表示形態になります。

#★//////////// *記事表示部の設定* ////////////★
$sub_len       = '24';#記事 [タイトル] 部の長さ (全角文字換算)
$subot_color   = "#85643A";#記事の題名の色 
$sub_color     = "#808080";#日付・記事ナンバーの色
#記事タイトル部のポイント画像を可変にしますか？ (0=no 1=yes)
$sub_col_use   = 0;#0の場合は$subpointが入ります。
$letter_mode   = 'yes';#記事表示部に罫線を入れますか？入れる場合は'yes'
$letter_l      = './img_sl/dashed_bg_gld.gif';#上記が'yes'の場合の罫線画像

#【注意事項】$sub_col_use=1にしますと、枠色を可変モードにした際に、ポイント画像が枠色と同色になります。$cel_touka_use=0の場合には反映しません。

#★//////////// *ページの表示位置* ////////////★
#ページの表示位置を任意設定できます。大きなサイズのイラストやフォト素材をご利用の場合に調整してください。
$p_position    = '<center>';#ページの表示位置<blockquote><blockquote><div align=left>など
$bp_position   ='';#ページ上部、BACKの位置を決めるタグ 無記入ならば左端に表示
$sbp_position  ='';#$bp_positionの閉じタグ

#【注意事項】管理ページ・エラー表示は中央に表示されます。

#★//////////// *記事部背景枠・文字色の設定* ////////////★
#---記事部の枠の設定。
$bcol_mode     = 0;#枠色を可変にする場合は'1'固定色なら'0'
$b_col         = '#BBBBBB';
@COLOR2        = ('#BBBBBB','#DECCB4','#C2CFD3','#CCD3AF','#EAE284','#C9C7AB','#E0B39E','#DADBE4');

#---文字色の設定。
$col_mode      = 0;#文字色を可変にする場合は'1'固定色なら'0'
$font_col      = '#00008B';
@COLOR         = ('#00008B','#85643A','#707E5C','#727D9C','#7B8361','#B96B24','#AA5937','#666C77');

#★//////////// *アイコンの設定* ////////////★
$icon_mode       = 0;# アイコンモード (0=no 1=yes)
# アイコン画像のある「ディレクトリ」
# → フルパスなら http:// から記述する
# → 最後は必ず / で閉じる
$imgurl          = "./icon2/";
# アイコンを定義（上下は必ずペアで）
@icon1           = ('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg','6.jpg','7.jpg','8.jpg');
@icon2           = ('ピンクたんぽぽ','薔薇を抱えたクマ','Babie','ビーズアクセ','リボン','おいしい時間','ガーベラ','青いハート？');
#イメージ参照画面の表示形態
#  1 : JavaScript
#  2 : HTML (JavaScriptが不安定なブラザが多い場合はこちら）
$ImageView       = 1;
#イメージ参照画面のサイズ (JavaScriptの場合)
$img_w           = '550'; # 横幅
$img_h           = '450'; # 高さ
#イメージ参照画面の横列に並べるアイコンの数
$iconline        = '5';#アイコンの横幅を考慮して決めてください。

#★//////////// *記事部背景画像の設定* ////////////★
$bg_use          ='no';# 記事部に背景画像を使いますか？使う場合は'yes'
#記事部背景画像のある「ディレクトリ」
# → フルパスなら http:// から記述する
# → 最後は必ず / で閉じる
$imgurl2         = "./icon/";
#背景画像を定義（上下は必ずペアで）
@bg              = ('kabe0.jpg','kabe1.jpg','kabe2.jpg','kabe3.jpg');
@bg2             = ('英字新聞とマーガレット','コスモス','ピンクのたんぽぽ','チューリップ');
$bgsize          ='150';#背景画像の高さの領域を設定。文字に背景が重なっても良い場合は'0'にしてください。
#背景画像の位置
$kijibgposition  ='center bottom';#背景画像の位置(center bottom等)
$kijibgrepeat    ='no-repeat';#画像の繰り返し
#イメージ参照画面の表示形態
#  1 : JavaScript
#  2 : HTML (JavaScriptが不安定なブラザが多い場合はこちら）
$Image2View      = 1;
#イメージ参照画面のサイズ (JavaScriptの場合)
$img2_w          = '550'; # 横幅
$img2_h          = '450'; # 高さ
#イメージ参照画面の横列に並べる背景画像の数
$bgline          = '1';#背景画像の横幅を考慮して決めてください。

#★//////////// *タイトル一覧の設定* ////////////★
$subtitle   = 'News&Update';#タイトル一覧の総称(Topoics、最近の更新情報etc)
$info       = 'タイトル<font class=sf>Click</font>で詳細表示(下部)';#$subtitleの後に説明文を挿入できます。長い文章でも構いませんが、文字列が折り返します。
$topiwid    = '330';#タイトル一覧の幅
$topisub_len= '20';#タイトル一覧で表示するタイトルの文字数(全角)
$toptpointl = '<img src=./img_sl/point.gif>';#総称左のポイント(タグ可)
$toptpointr = '<img src=./img_sl/point.gif>';#総称右のポイント(タグ可)
$topipoint  = '<img src=./img_sl/point.gif>';#タイトル最全部ポイント(タグ可)

#★//////////// *HELPページ、説明文の設定* ////////////★
$help_msg   = '管理人のひとこと日記です。です。気ままなひとりごとですが、毎日更新を目指していますので、お暇な時にでも覗いていただければ嬉しいです。';
#記事表示ページ内での、説明文の領域が狭いので、ここの部分で補填してください。

#★//////////// *その他の設定* ////////////★
#---素材サイトの著作表示
$material_use     ='yes';#素材サイトの著作表示が必要な場合は'yes'
$materialhp       ='http://chocochoco.chu.jp/index.html';#素材サイトのアドレス
$materialnm       ='choco*choco';#素材サイトの名称
#---最大記事数
$max              = 80;#過去ログを取らない場合は「100」ぐらい
#---管理者用マスタパスワード (英数字で8文字以内)
$pass             = '1982';
#---無題の場合のタイトル
$nontitle         = 'あら！タイトル書くのを忘れたわ！';
#---メンテナンスフォームのタイトル
$master_only      = 'Master only';#Master only等 無記入でも構いません。
#フレームに入れる等で、テーブル幅を狭くする場合は無記入にしてください。
#---戻りリンクのポイントマーク（タグ可）
$bpoint           = '<img src=./img_sl/point.gif>';
#---ホスト名取得モード
# → 0 : $ENV{'REMOTE_HOST'}変数で取得できる場合
# → 1 : gethostbyaddr関数で取得できる場合
$get_remotehost   = 0;
#---ファイルロック形式
$lockkey          = 0;#0=no 1=symlink関数 2=mkdir関数
#---カウンタの設定
$counter          = 0;#0=no 1=テキスト 2=GIF画像
$mini_fig         = 6;#ミニカウンタの桁数
$cnt_color        = "#C7C7C7";#テキストのとき：ミニカウンタの色
$gif_path         = "./img/";#ＧＩＦのとき、画像までのディレクトリ
$mini_w           = 8;# 画像の横サイズ
$mini_h           = 12;# 画像の縦サイズ
#---タグを使いますか？
$tagkey           = 1;# (0=no 1=yes)
$font_tag_use     = 'yes';#フォントタグを使用しない場合は'no'
#---記事の更新は method=POST 限定 
$MethPost         = 1;#(0=no 1=yes)
#---同一IPアドレスからの連続投稿時間（秒数）
$wait             = 0;#値を 0 にするとこの機能は無効になります
#---投稿フォーム改行形式 (soft=手動 hard=強制)
$wrap             = 'soft';
#---URLの自動リンク (0=no 1=yes)
$autolink         = 1;
#---タグ広告挿入オプション (FreeWebなど）
#→ <!-- 上部 --> <!-- 下部 --> の代わりに「広告タグ」を挿入する。
#→ 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。
$banner1   = '<!-- 上部 -->';	# 掲示板上部に挿入
#---アクセス制限（ホスト名、IPアドレスを記述）
@deny = (
	"anonymizer.com",
	"cache*.*.interlog.com",
	"211.154.120.*",
	"",
	""
	);

#★//////////// *過去ログの設定* ////////////★
# 過去ログ生成 (0=no 1=yes)
$pastkey   = 1;
# 過去ログ用NOファイル
$nofile    = './pastno.dat';
# 過去ログのディレクトリ
# → フルパスなら / から記述（http://からではない）
# → 最後は必ず / で閉じる
$pastdir   = './past/';
# 過去ログ１ファイルの行数
# → この行数を超えると次ページを自動生成します
$log_line  = '600';

#============#
#  設定完了  #
#============#
# メイン処理
&decode;
&axs_check;
if ($mode eq "howto") { &howto; }
elsif ($mode eq "find") { &find; }
elsif ($mode eq "top_log") { &top_log; }
elsif ($mode eq "usr_del") { &usr_del; }
elsif ($mode eq "usr_edt") { &usr_edt; }
elsif ($mode eq "regist") { &regist; }
elsif ($mode eq "res") { &res_form; }
elsif ($mode eq "admin") { &admin; }
elsif ($mode eq "image") { &image; }
elsif ($mode eq "image2") { &image2; }
elsif ($mode eq "past") { &past; }
elsif ($mode eq "check") { &check; }
elsif ($mode eq "new_view") { &new_view; }
elsif ($mode eq "com_view") { &com_view; }
elsif ($mode eq "all_view") { &all_view; }
elsif ($mode eq "html_view1") { &html_view1; }
elsif ($mode eq "html_view2") { &html_view2; }
elsif ($mode eq "title_view") { &title_view; }
elsif ($mode eq "input") { &main_form; }
elsif ($mode eq "master") { &master; }
elsif ($mode eq "plink") { &plink; }
elsif ($mode eq "main_log") { &main_log; }
elsif ($mode eq "mainte") { &mainte; }
elsif ($mode eq "footer") { &footer; }
if ($newpage_mode == 1 ) { &new_view; } else { &all_view; }


#----------------#
#  アクセス制限  #
#----------------#
sub axs_check {
	# ホスト名を取得
	&get_host;

	local($flag)=0;
	foreach (@deny) {
		if (!$_) { next; }
		$_ =~ s/\*/\.\*/g;
		if ($host =~ /$_/i) { $flag=1; last; }
	}
	if ($flag) { &error("アクセスを許可されていません"); }
}
#--------------#
#  トップ表示  #
#--------------#
sub top_log {
#---広告バナー
	if ($banner1 ne "<!-- 上部 -->") { print "$banner1<P>\n"; }
#---タイトル部（$il_mode）
if ($title_use == 1) { 
if ($il_mode eq 'yes'){
print "<table style='BACKGROUND-POSITION:$ilposition;BACKGROUND-repeat:no-repeat;background-image:url(\"$il_bg\");' width=$ilwidth height=$ilheight><tr><td valign=bottom align=center><font color=\"$t_color\"><span>$title</span></font>";
print "</td></tr></table>\n";
} else {
if ($title_gif eq '') {
print "<table><tr><td>$titlepointl</td>";
print "<td><font color=\"$t_color\"><span>$title</span></font></td>";
print "<td>$titlepointr</td></tr></table>\n";
	} else {
print "<img src=\"$title_gif\" width=\"$tg_w\" height=\"$tg_h\" alt=\"$title\">\n";
}}
if ($newpage_mode == 0) { print " <BR>\n";}}
}

#--------------#
#  メインログ  #
#--------------#
sub main_log {
#---メインログ
#文字色・背景枠色の固定
if($col_mode==0){$color="$font_col";}
if($bcol_mode==0){$color2="$b_col";}
if (!$icon_mode) { $comment = "$comment"; }
if (!$reno && $flag) {
if ($bg_use eq 'yes'){
print "<table BGCOLOR=\"$tbgcolor\"><tr><td BGCOLOR=\"$tbgcolor\" height=$bgsize></TD></TR></TABLE>\n";}
			print "</TD></TR></TABLE></TD></TR></TABLE><br><br>\n";
			$flag=1;}

		if (!$reno) {
                if ($bg_use eq 'yes'){$tbgcolor="";}
print "<TABLE WIDTH=$tblesize CELLPADDING=3 style='border-color: $color2; border-style:$wakustyle;border-width:$wakusize' cellspacing=0 STYLE=filter:Alpha(opacity=$filter,enabled=$filter)><TR>";
                if ($bg_use eq 'yes'){
print "<TD style='BACKGROUND-POSITION:$kijibgposition;BACKGROUND-repeat:$kijibgrepeat;background-image:url(\"$imgurl2$bg\");'>\n";} else 
{ print "<TD>\n";}
print "<TABLE WIDTH='100%' cellpadding=1 border=0 cellspacing=0 BGCOLOR=\"$tbgcolor\">";
			$flag=1;}

print "<tr><td BGCOLOR=\"$tbgcolor\" align=center>\n";
#タイトル部分
print "<table border=0 cellpadding=0 width=100% cellspacing=0><tr>\n";
if ($sub_col_use == 1 && $cel_touka_use == 1 ) {
print "<td width=100% nowrap><table cellpadding=0 border=0 cellspacing=0><tr><td background=$cel_bg class=CBG bgcolor=$color2 width=17></td><td nowrap>";}
else {
print "<td nowrap>&nbsp;$subpoint&nbsp;";}
print "<font color=\"$subot_color\">&nbsp;$sub&nbsp;</font>";
if ($sub_col_use == 1 && $cel_touka_use == 1 ) {
print "</td><td background=$cel_bg class=CBG bgcolor=$color2 width=17></td></tr></TABLE>\n";} else {
print "&nbsp;$subpoint&nbsp;";}
print "</td></tr></TABLE>\n";
print "<table border=0 cellpadding=2 BGCOLOR=\"$tbgcolor\" width=100% cellspacing=0><tr>";
#アイコンモード
if ($icon_mode) { print "<td BGCOLOR=\"$tbgcolor\" align=center><img src=\"$imgurl$icon\" alt=\"$icon\"></td><td></td>"; }
#記事表示部分
print "<td BGCOLOR=\"$tbgcolor\" BGCOLOR=\"$color2\">";
                if ($letter_mode eq 'yes'){
$comment=~ s/<img([!-:A-~\s\=]+)>/$henkan1\img$1$henkan2/g;
$henkan1="</div><";
$henkan2="><div class=text>";
                if ( $font_tag_use ne 'yes'){
$comment =~ s/<FONT\s*(.*?)>(.*?)<\/FONT>/&lt;font $1&gt;$2&lt;\/font&gt;/ig;}}
                if ($letter_mode eq 'yes'){
print "<font color=\"$color\"><div class=text>$comment</div></font>";} else
{ print "<font color=\"$color\">$comment</font>"; }
print "<div align=right>\n";
print "<font color=\"$sub_color\"><small>Date：$date&nbsp;No\.$no</small></font>";
print "</TD></TR></TABLE>\n";
#---メインログ
}
#--------------#
# 記事表示部1  #
#--------------#
sub html_view1 {
	local($no,$reno,$date,
		$sub,$comment,$host,$pw,$color,$color2,$icon,$bg,$p_flag);
#---クッキーを取得
&get_cookie;
#---フォーム長を調整
&get_agent;
#---ヘッダを出力
	if ($ImageView == 1) { &header('ImageUp'); }
	else { &header; }
#---カウンタ処理
	if ($counter) { &counter; }
#---ページの表示位置
print "$p_position\n";
#---広告&タイトル
&top_log; 
#---ページ内リンク
if ($link_use == 1) { &plink; }
#---ページ区切り処理
	$start = $page + 1;
	$end   = $page + $p_log;
#---トピックス
if ($newpage_mode == 1) { &title_view; }
}

#--------------#
# 記事表示部2  #
#--------------#
sub html_view2 {

#---画像領域
                if ($bg_use eq 'yes'){
print "<table BGCOLOR=\"$tbgcolor\"><tr><td BGCOLOR=\"$tbgcolor\" height=$bgsize></TD></TR></TABLE>\n";}
if ($no ne ""){
	print "</TD></TR></TABLE></TD></TR></TABLE><BR>\n";}

	$next_page = $page + $p_log;
	$back_page = $page - $p_log;

	$p_flag=0;
	print "<table cellpadding=0 cellspacing=0><tr>\n";
	if ($back_page >= 0) {
		$p_flag=1;
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=mode value=\"all_view\">\n";
		print "<input type=hidden name=page value=\"$back_page\">\n";
		print "<input type=submit value=\"Back\" class=BOT>\n";
		print "&nbsp;</td></form>\n";
	}
	if ($next_page < $i) {
		$p_flag=1;
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=mode value=\"all_view\">\n";
		print "<input type=hidden name=page value=\"$next_page\">\n";
		print "<input type=submit value=\"Next\" class=BOT>\n";
		print "</td></form>\n";
	}

#---ページ移動ボタン表示
	if ($p_flag) {
		print "<td width=10></td><td>\n";
		$x=1;
		$y=0;
		while ($i > 0) {
	if ($page == $y) { print "<font class=sf>+<b>$x</b>++</font>\n"; }
	else { print "<a href=\"$script?mode=all_view&page=$y\"><font class=sf>$x</font></a>+\n"; }
			$x++;
			$y = $y + $p_log;
			$i = $i - $p_log;
		}
		print "</td>\n";
	}
	print "</tr></table><BR>\n";
#---全記事表示
&mainte;
	print "<BR>\n";
&footer;

print "\n</body>\n</html>\n";
	exit;
}
#--------------#
# 著作権表示部 #
#--------------#
sub footer {
#---著作権表示部
print "<table CELLPADDING=4 BGCOLOR=\"$table_c\">\n";
print "<tr><td align=center nowrap>\n";
print "+-- <font class=sf>Original script by</font> <a href='http://www.kent-web.com/' target='_blank'><font face=Verdana>KENT</a> --+";
if ($material_use eq 'yes'){
print "<BR>+-- <font class=sf>Material by</font> <a href='$materialhp' target='_blank'>$materialnm</a></font> --+\n";}
print "<br>+-- <font class=sf>edit by</font> <a href='http://aikon.milkcafe.to/'target='_blank' ><font face=Verdana>Aikon's CGI Kitchen</a> --+</tr></table></td></tr></table>\n";
}
#--------------#
# メンテナンス #
#--------------#
sub mainte {
print "<TABLE WIDTH=\"$mftblesize\" BGCOLOR=\"$table_c\" cellpadding=4 border=0 cellspacing=0 class=TC STYLE=filter:Alpha(opacity=$filter,enabled=$filter)><TR>";
print "<form action=\"$script\" method=\"$method\">\n";
print "<TD align=center><TABLE cellpadding=4 border=0 cellspacing=0  background=$ftbg class=CBG bgcolor=$ftbgcol width=100%><tr><td align=center nowrap><font class=sf>";
print "<font class=sf>$master_only</font>\n";
print "&nbsp;<font class=sf>No:</font><input type=text name=no size=3>\n";
print "<font class=sf>Pass:</font><input type=password name=pwd size=4 maxlength=8>&nbsp;<select name=mode>";
print "<option value=input>新規書き込み\n";
print "<option value=usr_edt>編集";
print "<option value=usr_del>削除";
print "<option value=admin>管理モード</select>\n";
print "<input type=submit value=\"GO\" class=BOT></td></tr></table></td>";
print "</form></tr></table>\n";
}
#--------------#
#ページ内リンク#
#--------------#
sub plink {
print "<TABLE WIDTH=\"$topiwid\" BGCOLOR=\"$table_c\" cellpadding=4 border=0 cellspacing=0 class=TC STYLE=filter:Alpha(opacity=$filter,enabled=$filter)><TR><TD align=right>";
if ($cel_touka_use == 1){
print "<TABLE cellpadding=0 border=0 cellspacing=0><tr>";
if ($url_use == 1){
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
print "<td>&nbsp;<a href=\"$homepage\" target='$target' title='トップページへ'>Top</a>&nbsp;</td>";}
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
print "<td>&nbsp;<a href=\"$script?mode=howto\" title='$titleの使い方'>Infomation</a>&nbsp;</td>";
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
print "<td>&nbsp;<a href=\"$script?mode=find\" title='検索'>Search</a>&nbsp;</td>";
if ($pastkey) {
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
print "<td>&nbsp;<a href=\"$script?mode=past\" title='過去ログ'>Past</a>&nbsp;</td>";}
if ($newpage_mode == 1) {
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
print "<td>&nbsp;<a href=\"$script?mode=all_view\" title='最新記事$p_log件を表\示'>List</a>&nbsp;</td>";}
print "<td background=$cel_bg class=CBG bgcolor=$cel_bgcol width=17></td>";
} else {
#---
print "<TABLE cellpadding=0 border=0 cellspacing=0><tr><td>";
if ($url_use == 1){
print "$subpoint&nbsp;<a href=\"$homepage\" target='$target' title='トップページへ'>Top</a>&nbsp;";
}
print "$subpoint&nbsp;<a href=\"$script?mode=howto\" title='$titleの使い方'>Infomation</a>&nbsp;";
print "$subpoint&nbsp;<a href=\"$script?mode=find\" title='検索'>Search</a>&nbsp;";
if ($pastkey) {	
print "$subpoint&nbsp;<a href=\"$script?mode=past\" title='過去ログ'>Past</a>&nbsp;"; 
}
if ($newpage_mode == 1) {
print "$subpoint&nbsp;<a href=\"$script?mode=all_view\" title='最新記事$p_log件を表\示'>List</a>&nbsp;";
}
print "$subpoint</td>";}
print "</tr></table></td></tr></table><BR>\n";
}

#================#
# メインフォーム #
#================#
sub main_form {
	if ($in{'pwd'} ne "" && $in{'pwd'} ne $pass) {
		&error("パスワードが違います");
	}
	if ($in{'pwd'} eq "") {
		&error("パスワードを入力してください");
	}
#---クッキーを取得
	&get_cookie;
#---フォーム長を調整
	&get_agent;
#---ヘッダを出力
	if ($ImageView == 1) { &header('ImageUp'); }
print "$bp_position";
        print "$bpoint <a href=$script?>$titleにもどります</a> $bpoint<BR>\n";
print "$sbp_position";
print "$p_position";
print "<table width=$ftblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td>";
print "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">";
print "+-- 記事書き込みForm --+</font></td></tr></table></td></tr></table>\n";
#---親記事フォーム
print <<"EOM";
<form method="$method" action="$script">
<input type=hidden name=mode value="regist">
<TABLE WIDTH=\"$ftblesize\" BGCOLOR=\"$table_c\" cellpadding=4 border=0 cellspacing=0 class=TC>
<tr><td><TABLE cellpadding=1 border=0 cellspacing=0 width=100%>
<tr>
  <td nowrap align=right><font class=sf>Title</font></td>
  <td nowrap colspan=3><input type=text name=sub size="$nam_wid">
  </td>
</tr>
<tr>
  <td nowrap valign=top align=right>
    <font class=sf>Message</font></td><td nowrap colspan=3>
    <textarea cols=$com_wid rows=$rows name=comment wrap="$wrap"></textarea>
  </td>
</tr>

EOM
print "";
#---背景枠色選択
if ($bcol_mode ==1) {
print "<tr><td nowrap align=right><font class=sf>Line Color</td><td colspan=3 nowrap>\n";

	# クッキーの色情報がない場合
	if ($c_color2 eq "") { $c_color2 = $COLOR2[0]; }
	foreach (0 .. $#COLOR2) {
		if ($c_color2 eq $COLOR2[$_]) {
	print "<input type=radio name=color2 value=\"$COLOR2[$_]\" checked>";
	print "<font color=\"$COLOR2[$_]\">■</font>";
		} else {
	print "<input type=radio name=color2 value=\"$COLOR2[$_]\">";
	print "<font color=$COLOR2[$_]>■</font>";
		}
	}

        print "</td></tr>\n";}
#---文字色選択
if ( $col_mode == 1) {
print "<tr><td nowrap align=right><font class=sf>Font Color</font></td><td colspan=3 nowrap>\n";

	# クッキーの色情報がない場合
	if ($c_color eq "") { $c_color=$COLOR[0]; }
	foreach (0 .. $#COLOR) {
		if ($c_color eq $COLOR[$_]) {
	print "<input type=radio name=color value=\"$COLOR[$_]\" checked>";
	print "<font color=\"$COLOR[$_]\">■</font>";
		} else {
	print "<input type=radio name=color value=\"$COLOR[$_]\">";
	print "<font color=\"$COLOR[$_]\">■</font>";
		}
	}

	print "</td></tr>\n";}
#---アイコンモード
if ($icon_mode) {
print "<tr><td nowrap align=right><font class=sf>Icon</font></td><td colspan=3><select name=icon>\n";
		foreach(0 .. $#icon1) {
			if ($c_icon eq "$icon1[$_]") {
		print "<option value=\"$icon1[$_]\" selected>$icon2[$_]\n";			   } else {
			print "<option value=\"$icon1[$_]\">$icon2[$_]\n";
			}
		}
		print "</select></small>\n";
#---イメージ参照リンク
		if ($ImageView == 1) {
			print "&nbsp;*<a href=\"javascript:ImageUp()\"><font class=sf>Iconimage List</font></a>*</td>";
		} else {
			print "&nbsp;*<a href=\"$script?mode=image\" target=\"_blank\"><font class=sf>Iconimage List</a>*";
		}
		print "</td></tr>\n";
	}
#---記事部背景画像
#記事部背景使用の場合のリスト
#<!--スクリプト-->
print "<script language=\"javascript\">\n";
print "<!--\n";
print "function ImageUp2(){window.open(\"$script?mode=image2\",\"ImageUp2\",\"width=$img2_w,height=$img2_h,scrollbars=yes,status=no,resizable=no,toolbar=no,location=no,menubar=no\");}\n";
print "-->\n";
print "</script>\n";
if ($bg_use eq 'yes') {
print "<tr><td nowrap align=right><font class=sf>Graphics</font></td><td colspan=3><select name=bg>\n";
		foreach(0 .. $#bg) {
		if ($c_bg eq "$bg[$_]") {
		print "<option value=\"$bg[$_]\" selected>$bg2[$_]\n";			   } else {
		print "<option value=\"$bg[$_]\">$bg2[$_]\n";
			}
		}
		print "</select></small>\n";
#---背景画像イメージ参照のリンク
		if ($Image2View == 1) {
		print "&nbsp;*<a href=\"javascript:ImageUp2()\"><font class=sf>Backimage List</font></a>*";
		} else {
			print "&nbsp;*<a href=\"$script?mode=image2\" target=\"_blank\"><font face=Verdana class=sf>Backimage List</font></a>*";
		}
		print "</td></tr>\n";
	}
print "<tr><td nowrap align=right><font class=sf>Password</font></td>";
print "<td colspan=3><input type=password name=pwd size=8 maxlength=8 value=\"$c_pwd\">";
print "&nbsp;<input type=submit value=\"Submit\" class=BOT>&nbsp;<input type=reset value=\"Reset\" class=BOT></td></tr></table></TD></TR>";
	print "</TABLE></TD></form></TR></TABLE><BR>\n";

	exit;
}
#--------------#
#   初期表示   #
#--------------#
sub new_view {

&html_view1;
#---記事を展開
	open(IN,"$logfile") || &error("Open Error : $logfile");
	$top = <IN>;
	$i=0;
	$flag=0;
	while (<IN>) {
		($no,$reno,$date,$sub,
		$comment,$host,$pw,$color,$color2,$icon,$bg) = split(/<>/);
		# 題名の長さ
		if (length($sub) > $sub_len*2) {
			$sub = substr($sub,0,$sub_len*2);
			$sub .= "...";

		}

                $i++;
#---メインログ
&main_log;

                if ($i >= 1) { last; }
	}
	close(IN);
&html_view2;
}
#--------------#
#   単体表示   #
#--------------#
sub com_view {
&html_view1;

	# 記事を展開
	open(IN,"$logfile") || &error("Open Error : $logfile");
	$top = <IN>;
	$i=0;
	$flag=0;
	while (<IN>) {
		($no,$reno,$date,$sub,
		$comment,$host,$pw,$color,$color2,$icon,$bg) = split(/<>/);
		if ($in{'no'} eq "$no" || $in{'no'} eq "$reno") {
		# 題名の長さ
		if (length($sub) > $sub_len*2) {
			$sub = substr($sub,0,$sub_len*2);
			$sub .= "...";	}

#---メインログ
&main_log;
            }
	}
	close(IN);
&html_view2;
}
#--------------#
#  全記事表示  #
#--------------#
sub all_view {
&html_view1;

#---記事を展開
	open(IN,"$logfile") || &error("Open Error : $logfile");
	$top = <IN>;
	$i=0;
	$flag=0;
	while (<IN>) {
		($no,$reno,$date,$sub,
		$comment,$host,$pw,$color,$color2,$icon,$bg) = split(/<>/);
		if ($reno eq "") { $i++; }
		if ($i < $start) { next; }
		if ($i > $end) { next; }

		# 題名の長さ
		if (length($sub) > $sub_len*2) {
			$sub = substr($sub,0,$sub_len*2);
			$sub .= "...";
		}
#---メインログ
&main_log;

	}
	close(IN);
&html_view2;
}
#--------------#
# タイトル表示 #
#--------------#
sub title_view {

#---一覧表示
print "<table border=0 cellpadding=0 cellspacing=0 BGCOLOR=\"$tbgcolor\"><tr><td width=$topiwid>";
print "<table border=0 cellpadding=5 cellspacing=0 class=TTT width=100%><tr><td>$toptpointl&nbsp;$subtitle&nbsp;$toptpointr&nbsp;$info</td></tr></table>";
print "</td></tr>\n";

		open(IN,"$logfile") || &error("Open Error : $logfile");
		$top = <IN>;
		$i=0;
	        $flag=0;
		while (<IN>) {
($no,$reno,$date,$sub,$comment,$host,$pw,$color,$color2,$icon,$bg) = split(/<>/);
		if (length($sub) > $topisub_len*2) {
			$sub = substr($sub,0,$topisub_len*2);
			$sub .= "...";}
			if ($reno eq "") { $i++; }
			if ($i < $start) { next; }
			if ($i > $end) { last; }

			($date,$dmy) = split(/\(/, $date);

		$flag=1;
print "<tr><td><table border=0 cellpadding=5 cellspacing=0 class=TTT width=100%><tr>";
print "<td>$topipoint&nbsp;<small><font color=$sub_color>$date</font></small>";
print "&nbsp;<font color=$color><a href=\"$script?mode=com_view&no=$no\">$sub</a></font>";
print "</td></tr></table></td></tr>\n";}
		close(IN);
print "</table><BR>\n";

}
#----------------#
#  ログ書込処理  #
#----------------#
sub regist {
	local(@lines,@new,@tmp,$top,$no,$ip,$time2,$no2,$reno2,
		$date2,$sub2,$com2,$flag,$ango,$stop,$match);

	# フォーム入力チェック
	&form_check;

	# 時間を取得
	&get_time;

	# クッキーを発行
	&set_cookie;

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

	# ログを開く
	open(IN,"$logfile") || &error("Open Error : $logfile");
	@lines = <IN>;
	close(IN);

	# 記事NO処理
	$top = shift(@lines);
	($no,$ip,$time2) = split(/<>/, $top);
	$no++;

	# 連続投稿チェック
	if ($addr eq $ip && $wait > $times - $time2)
		{ &error("連続投稿はもうしばらく時間をおいて下さい"); }

	# URL自動リンク
	if ($autolink) { &auto_link($in{'comment'}); }

	# 重複チェック
	$flag=0;
	foreach (@lines) {
		($no2,$reno2,$date2,$mail2,$sub2,$com2) = split(/<>/);

		if ($in{'comment'} eq $com2) {
			$flag=1; last;
		}
	}
	if ($flag) { &error("重複投稿のため処理を中断しました"); }

	# パスワードを暗号化
	if ($in{'pwd'} ne "") { $ango = &encrypt($in{'pwd'}); }


	# 親記事の場合
	if ($in{'reno'} eq "") {

		$i=0;
		$stop=0;
		foreach (@lines) {
			($no2,$reno2) = split(/<>/);
			$i++;
			if ($i > $max-1 && $reno2 eq "") { $stop=1; }
			if (!$stop) { push(@new,$_); }
			elsif ($stop && $pastkey) { push(@data,$_); }
		}

unshift(@new,"$no<><>$date<>$in{'sub'}<>$in{'comment'}<>$host<>$ango<>$in{'color'}<>$in{'color2'}<>$in{'icon'}<>$in{'bg'}<>\n");
		unshift(@new,"$no<>$addr<>$times<>\n");

		# 過去ログ更新
		if ($data[0]) { &pastlog; }

		# 更新
		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @new;
		close(OUT);
	}

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

	# メール処理
}

#----------------#
#  デコード処理  #
#----------------#
sub decode {
	local($buffer, @pairs, $name, $value);
	$post_flag=0;
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		$post_flag=1;
		if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }
	@pairs = split(/&/, $buffer);
	foreach (@pairs) {
		($name,$value) = split(/=/);

		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

		# 文字コードをシフトJIS変換
		&jcode'convert(*value, "sjis", "", "z");

		# タグ処理
		if ($tagkey) { $value =~ s/<>/&lt;&gt;/g; }
		else {
			$value =~ s/</&lt;/g;
			$value =~ s/>/&gt;/g;
			$value =~ s/\"/&quot;/g;
		}

		# 改行等処理
		if ($name eq "comment") {
			$value =~ s/\r\n/<br>/g;
			$value =~ s/\r/<br>/g;
			$value =~ s/\n/<br>/g;
		} else {
			$value =~ s/\r//g;
			$value =~ s/\n//g;
		}

		# 一括削除用
		if ($name eq "del") { push(@DEL,$value); }

		$in{$name} = $value;
	}
	$mode = $in{'mode'};
	$page = $in{'page'};
	$in{'url'} =~ s/^http\:\/\///;
	if ($in{'sub'} eq "") { $in{'sub'} = "$nontitle"; }
                if ($letter_mode eq 'yes'){
$comment=~ s/<img([!-:A-~\s\=]+)>/$henkan1\img$1$henkan2/g;
$henkan1="</div><";
$henkan2="><div class=text>";
                if ( $font_tag_use ne 'yes'){
$comment =~ s/<FONT\s*(.*?)>(.*?)<\/FONT>/&lt;font $1&gt;$2&lt;\/font&gt;/ig;}
}
}

#----------------------------#
#  掲示板の使い方メッセージ  #
#----------------------------#
sub howto {
        if ($newpage_mode == 1 && $link_use == 1){
$newpage_msg = "<font color=$alink>タイトルをクリック</font>していただくと、当該記事が表\示されます。また、トップメニューの<font color=$alink>「List」をクリック</font>していただくと、最新記事$p_log件をまとめて閲覧する事ができます。\n";}
else {
$newpage_msg = "最新記事$p_log件をご案内しています。\n";
}

	&header;
	print <<"EOM";
$bp_position
$bpoint <a href=$script?>$titleにもどる</a> $bpoint<BR><BR>
$sbp_position
$p_position
<table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color="$text">+-- $titleについてのご案内です --+</font></td></tr></table></td></tr></table>

<P>
<table width=$tblesize border=0 cellpadding=10 CELLSPACING=0 class=TC>
<tr><td bgcolor="$table_c">
<OL>
<LI>$titleを閲覧くださってありがとうございます。<P>
<LI>$help_msg<P>
<LI>$newpage_msg<P>
<LI>過去の投稿記事から<font color=$alink>「キーワード」によって簡易検索ができます。</font>トップメニューの<a href="$script?mode=find"><font color=$alink>「Search」</a>をクリック</font>してください。<P>
<LI>当サイトを、これからもどうぞよろしくお願いします。
</OL>
</td></tr></table>
</center>
</body>
</html>
EOM
	exit;
}

#------------------#
#  ワード検索処理  #
#------------------#
sub find {
	local($no,$reno,$date,$sub,$com);

	&header;
	print <<"EOM";
$bp_position
$bpoint <a href=$script?>$titleにもどる</a> $bpoint<BR><BR>
$sbp_position
$p_position
<table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- ワード検索 --+</font></td></tr></table></td></tr></table><P>
<table width=$tblesize><tr><td>検索したい<b>キーワード</b>を入力し、「条件」「表\示」を選択して「検索」ボタンを押して下さい。<BR>
キーワードは「半角スペース」で区切って複数指定することができます。</td></tr></table>
<P><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
	if (!$in{'cond'}) { $in{'cond'} = "AND"; }
	foreach ("AND", "OR") {
		if ($in{'cond'} eq "$_") {
			print "<option value=\"$_\" selected>$_\n";
		} else {
			print "<option value=\"$_\">$_\n";
		}
	}
	print "</select>\n 表\示：<select name=view>\n";
	if ($in{'view'} eq "") { $in{'view'} = $p_log; }
	foreach (5,10,15,20) {
		if ($in{'view'} == $_) {
			print "<option value=\"$_\" selected>$_件\n";
		} else {
			print "<option value=\"$_\">$_件\n";
		}
	}
print "</select>\n <input type=submit value='検索' class=BOT></form></UL>\n";

	# ワード検索の実行と結果表示
	if ($in{'word'} ne ""){

		# 入力内容を整理
		$in{'word'} =~ s/　/ /g;
		@pairs = split(/\s+/, $in{'word'});

		# ファイルを読み込み
		@new=();
		open(IN,"$logfile") || &error("Open Error : $logfile");
		$top = <IN>;
		while (<IN>) {
			$flag=0;
			foreach $pair (@pairs) {
				if (index($_,$pair) >= 0) {
					$flag=1;
					if ($in{'cond'} eq 'OR') { last; }
				} else {
				if ($in{'cond'} eq 'AND') { $flag=0; last; }
				}
			}
			if ($flag) { push(@new,$_); }
		}
		close(IN);

		# 検索終了
		$count = @new;
		print "検索結果：<b>$count</b>件\n";
		if ($page eq '') { $page = 0; }
		$end_data = @new - 1;
		$page_end = $page + $in{'view'} - 1;
		if ($page_end >= $end_data) { $page_end = $end_data; }

		$next_line = $page_end + 1;
		$back_line = $page - $in{'view'};

		$eword = &url_enc($in{'word'});
		if ($back_line >= 0) {
			print "[<a href=\"$script?mode=find&page=$back_line&word=$eword&view=$in{'view'}&cond=$in{'cond'}\">前の$in{'view'}件</a>]\n";
		}
		if ($page_end ne "$end_data") {
			print "[<a href=\"$script?mode=find&page=$next_line&word=$eword&view=$in{'view'}&cond=$in{'cond'}\">次の$in{'view'}件</a>]\n";
		}
		print "[<a href=\"$script?mode=find\">検索やり直し</a>]\n";
print "<table><tr><td align=left width=600>\n";

		foreach ($page .. $page_end) {
			($no,$reno,$date,$sub,$com)
							= split(/<>/, $new[$_]);

			# 結果を表示
print "<hr size=1 class=HR>[<b>$no</b>] <font color=\"$subt_color\">$sub</font>";
print " 投稿日：<small>$date</small> <font class=sf>$url</font><br>\n";
			print "<blockquote>$com</blockquote>\n";
		}
		print "<hr size=1 class=HR>\n";
	}
	print "</body>\n</html>\n";
	exit;
}

#---------------------------------#
#  ブラウザを判断:フォーム幅調整  #
#---------------------------------#
sub get_agent {
	# ブラウザ名を取得
	$agent = $ENV{'HTTP_USER_AGENT'};

	if ($agent=~/[\( ]Win98;/i||$agent=~/\(Windows_98;/i||$agent=~/\(WinNT;/i) { 
		$nam_wid = 15;
		$com_wid = $nfcom_wid;
	} elsif ($agent =~ /MSIE 4/i || $agent =~ /MSIE 5/i || $agent =~ /MSIE 6/i) { 
		$nam_wid = 40;
		$com_wid = $fcom_wid;
	} else {
		$nam_wid = 40;
		$com_wid = $fcom_wid;
	}
}

#------------------#
#  クッキーの発行  #
#------------------#
sub set_cookie {
	# クッキーは60日間有効
	local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+60*24*60*60);

	@month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",
			$week[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec);
	$cook="pwd<>$in{'pwd'}\,icon<>$in{'icon'}\,bg<>$in{'bg'}\,color<>$in{'color'}\,color2<>$in{'color2'}";
	print "Set-Cookie: YYBBS=$cook; expires=$gmt\n";
}

#------------------#
#  クッキーを取得  #
#------------------#
sub get_cookie {
	local($key, $val, @pairs);
	@pairs = split(/;/, $ENV{'HTTP_COOKIE'});
	foreach (@pairs) {
		($key,$val) = split(/=/);
		$key =~ s/\s//g;
		$GET{$key} = $val;
	}
	@pairs = split(/,/, $GET{'YYBBS'});
	foreach (@pairs) {
		($key,$val) = split(/<>/);
		$COOK{$key} = $val;
	}
	$c_pwd   = $COOK{'pwd'};
	$c_icon  = $COOK{'icon'};
	$c_bg  = $COOK{'bg'};
	$c_color = $COOK{'color'};
	$c_color2 = $COOK{'color2'};

	if ($in{'pwd'})   { $c_pwd   = $in{'pwd'}; }
	if ($in{'icon'})  { $c_icon  = $in{'icon'}; }
	if ($in{'bg'})  { $c_icon  = $in{'bg'}; }
	if ($in{'color'}) { $c_color = $in{'color'}; }
	if ($in{'color2'}) { $c_color2 = $in{'color2'}; }
}

#--------------#
#  エラー処理  #
#--------------#
sub error {
	if ($lockflag) { &unlock; }

	&header if (!$head_flag);
	print "<center><hr size=1 class=HR width=400><h3>ERROR !</h3>\n";
	print "<P><font color=#A45F20>$_[0]</font>\n";
	print "<P><hr size=1 class=HR width=400></center>\n</body>\n</html>\n";
	exit;
}


#--------------#
#  管理モード  #
#--------------#
sub admin {
	local($dmy,$no,$reno,$date,$sub,
		$com,$host,$pw,$next_page,$back_page);

	if ($in{'pwd'} ne "" && $in{'pwd'} ne $pass) {
		&error("パスワードが違います");
	}
	if ($in{'pwd'} eq "") {
		&error("パスワードを入力してください");
	}

	&header;
print "$bp_position";
        print "$bpoint <a href=$script?>$titleにもどる</a> $bpoint<BR>\n";
print "$sbp_position";
print "<center><table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 管理モード --+</font></td></tr></table></td></tr></table>\n";

{
		# 削除処理
		if ($DEL[0]) {

			# ロック処理
			if ($lockkey) { &lock; }

			# 削除情報をマッチングし更新
			@new=();
			open(IN,"$logfile") || &error("Open Error : $logfile");
			$top = <IN>;
			while (<IN>) {
				$flag=0;
				($no,$reno,$date) = split(/<>/);
				foreach $del (@DEL) {
					if ($no == $del || $reno == $del) {
						$flag=1; last;
					}
				}
				if ($flag == 0) { push(@new,$_); }
			}
			close(IN);

			# 更新
			unshift(@new,$top);
			open(OUT,">$logfile") || &error("Write Error : $logfile");
			print OUT @new;
			close(OUT);

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

		# 管理を表示
		if ($page eq "") { $page = 0; }
		print "<P><center><table><tr><td>\n";
		print "<UL><LI>削除する記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";

		print "</td></tr></table>\n";
		print "<form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "<input type=hidden name=page value=\"$page\">\n";
		print "<input type=hidden name=pwd value=\"$in{'pwd'}\">\n";
		print "<input type=hidden name=action value=\"$in{'action'}\">\n";
		print "<input type=submit value=\"削除します\" class=BOT>";
		print " <input type=reset value=\"やり直します\" class=BOT>\n";
#---
print "<P><table border=1 width=80\% bordercolor=\"$mas_col\" BGCOLOR=\"$table_c\">";
print "<tr><td><TABLE width=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td nowrap><font class=sf>Mark</font></td></tr></table></td>";
print "<td><TABLE width=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td nowrap>記事<font class=sf>No.</font></td></tr></table></td>";
print "<td><TABLE width=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td nowrap><font class=sf>Day</fpnt></td></tr></table></td>";
print "<td><TABLE width=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td nowrap><font class=sf>Title</font></td></tr></table></td>";
print "<td><TABLE width=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td nowrap><font class=sf>Comment</font></td></tr></table></td></tr>";

		# ページ区切り処理
		$start = $page + 1;
		$end   = $page + $p_log;

		open(IN,"$logfile") || &error("Open Error : $logfile");
		$top = <IN>;
		$i=0;
		while (<IN>) {
			($no,$reno,$date,$sub,$com,$host,$pw)
								 = split(/<>/);
			if ($reno eq "") { $i++; }
			if ($i < $start) { next; }
			if ($i > $end) { last; }

			($date,$dmy) = split(/\(/, $date);

			$com =~ s/<br>//ig;
			$com =~ s/</&lt;/g;
			$com =~ s/>/&gt;/g;
			if (length($com) > 100) {
				$com = substr($com,0,98);
				$com .= "...";
			}

			if ($reno eq "") { print "<tr><td colspan=5><br></td></tr>\n"; }

			# 削除チェックボックス
#---変更
print "<tr><td align=center><input type=checkbox name=del value=\"$no\"></td>";
print "<td nowrap>記事<font class=sf> No.$no</font></td>";
print "<td><small>$date</small></td>";
print "<td>$sub</td>";
print "<td>$com<div align=right>$url <small>$host</small></div></td></tr>";


	}
		close(IN);
print "<tr><td colspan=5><BR></td></tr>\n";
print "</table></form>\n";
	}

	$next_page = $page + $p_log;
	$back_page = $page - $p_log;

	print "<P><table cellspacing=0 cellpadding=0><tr>\n";
	if ($back_page >= 0) {
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=page value=\"$back_page\">\n";
		print "<input type=hidden name=pwd value=\"$in{'pwd'}\">\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "<input type=hidden name=action value=\"$in{'action'}\">\n";
		print "<input type=submit value=\"前の$p_log組\" class=BOT>\n";
		print "&nbsp;</td></form>\n";
	}
	if ($next_page < $i) {
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=page value=\"$next_page\">\n";
		print "<input type=hidden name=pwd value=\"$in{'pwd'}\">\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "<input type=hidden name=action value=\"$in{'action'}\">\n";
		print "<input type=submit value=\"次の$p_log組\" class=BOT>\n";
		print "</td></form>\n";
	}
	print "</tr></table></center>\n</body>\n</html>\n";
	exit;
}

#------------------#
#  ユーザ記事削除  #
#------------------#
sub usr_del {
	local(@lines,@new,$no,$reno,$dt,$sub,$com,$host,$pw,$top,$PW);

	# POST限定
	if ($MethPost && !$post_flag) { &error("不正なアクセスです"); }

	if ($in{'no'} eq '' || $in{'pwd'} eq '')
		{ &error("記事Noまたはパスワードが入力モレです"); }

	# ロック処理
	if ($lockkey) { &lock; }

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

	$flag=0;
	foreach (@lines) {
	($no,$reno,$dt,$sub,$com,$host,$pw) = split(/<>/);

		if ($flag == 0 && $in{'no'} == $no) {
			$PW = $pw;
			if ($reno eq "") { $flag=2; }
			else { $flag=1; }
		}
		elsif ($flag == 2 && $in{'no'} == $reno) { next; }
		else { push(@new,$_); }
	}

	if ($flag == 0) { &error("該当記事が見当たりません"); }
	if ($PW eq '') { &error("該当記事にはパスワードが設定されていません"); }

	# パスワードを照合
	$match = &decrypt("$in{'pwd'}","$PW");
	if ($match ne 'yes') { &error("パスワードが違います"); }

	# 更新
	unshift(@new,$top);
	open(OUT,">$logfile") || &error("Write Error : $logfile");
	print OUT @new;
	close(OUT);

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

#----------------#
#  記事修正処理  #
#----------------#
sub usr_edt {
	local($no,$reno,$dt,$sub,$com,
	$host,$pw,$color,$color2,$icon,$bg,$flag,$top,$flag,$pattern);

	if ($in{'no'} eq '' || $in{'pwd'} eq '')
		{ &error("記事Noまたはパスワードが入力モレです"); }

	if ($in{'action'} eq "edit") {
		# フォーム入力チェック
		&form_check;

		# ロック処理
		&lock if ($lockkey);
	}

	$flag=0;
	open(IN,"$logfile") || &error("Open Error : $logfile");
	$top = <IN>;
	while (<IN>) {
		($no,$reno,$dt,$sub,$com,$host,$pw,$color,$color2,$icon,$bg)
									 = split(/<>/);
		if ($in{'no'} == $no) {
			$pw2 = $pw;
			$flag=1;
			if ($in{'action'} ne "edit") { last; }
			else {
				if ($autolink) { &auto_link($in{'comment'}); }
$_ = "$no<>$reno<>$dt<>$in{'sub'}<>$in{'comment'}<>$host<>$pw<>$in{'color'}<>$color2<>$in{'icon'}<>$bg<>\n";
			}
		}
		if ($in{'action'} eq "edit") { push(@new,$_); }
	}
	close(IN);
	if (!$flag) { &error("該当の記事が見当たりません"); }
	if ($pw2 eq "") { &error("パスワードが設定されていません"); }
	$check = &decrypt("$in{'pwd'}", "$pw2");
	if ($check ne "yes") { &error("パスワードが違います"); }

	if ($in{'action'} eq "edit") {
		unshift(@new,$top);
		open(OUT,">$logfile") || &error("Write Error : $logfile");
		print OUT @new;
		close(OUT);

		&unlock if ($lockkey);
		&set_cookie;

		&header;

print "$bp_position\n";
print "$bpoint <a href=$script?>$titleにもどります</a> $bpoint\n";
print "$sbp_position\n";
print "$p_position\n";
print "<BR><table width='$tblesize' border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 以下のとおり修正が完了しました --+</font></td></tr></table></td></tr></table>\n";
print "<BR><table border=0 CELLSPACING=0 cellpadding=2 width='$tblesize' bgcolor=\"$table_c\" class=TC><tr><td>\n";
print "<table border=0 cellpadding=3 width='100%'><tr><td>\n";
print "<font class=sf>Title：</font>$in{'sub'}<br>\n";
print "<font class=sf>Message：</font><font color=\"$in{'color'}\">$in{'comment'}</font>\n";
print "</td></tr></table></td></tr></table>\n";
print "<P><form action=\"$script\">\n";
print "<input type=submit value='ページを更新します' class=BOT></form>\n";
print "</div>\n</body>\n</html>\n";
		exit;
	}

	&get_agent;
	$com =~ s/<br>/\r/g;
	$pattern = 'http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+';
	$com =~ s/<a href="$pattern" target='_top'>($pattern)<\/a>/$1/go;
	$com =~ s/&lt;/</g;
	$com =~ s/&gt;/>/g;
	$com =~ s/&quot;/\"/g;

	if ($ImageView == 1) { &header('ImageUp'); }
	else { &header; }
	print <<"EOM";
$p_position
<table width=$ftblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 記事編集ページ --+</font></td></tr></table></td></tr></table><BR><BR>
<TABLE BORDER=0 BGCOLOR=\"$table_c\" CELLSPACING=0 CELLPADDING=2 class=TC width=$ftblesize>
<TR>
<form action="$script" method="$method">
<input type=hidden name=mode value="usr_edt">
<input type=hidden name=action value="edit">
<input type=hidden name=pwd value="$in{'pwd'}">
<input type=hidden name=no value="$in{'no'}">
<TD>
<table border=0 cellspacing=0 cellpadding=1 width=100%>
<tr>
  <td nowrap align=right><font class=sf>Title</font></td>
  <td><input type=text name=sub size="$nam_wid" value="$sub"> 
  </td>
</tr>
<tr>
  <td nowrap align=right valign=top>
    <font class=sf>Message</font></td><td>
    <textarea cols=$com_wid rows=$rows name=comment wrap="$wrap">$com</textarea>
  </td>
</tr>

EOM
	
	if ($icon_mode) {
print "<tr><td nowrap align=right><font class=sf>Icon</td><td><select name=icon>\n";
		foreach(0 .. $#icon1) {
			if ($icon eq $icon1[$_]) {
		print "<option value=\"$icon1[$_]\" selected>$icon2[$_]\n";			   } else {
		print "<option value=\"$icon1[$_]\">$icon2[$_]\n";
			}
		}
		print "</select> <small></small>\n";
		# イメージ参照のリンク
		if ($ImageView == 1) {
			print " *<a href=\"javascript:ImageUp()\"><font class=sf>Iconimage List</font></a>*";
		} else {
			print " *<a href=\"$script?mode=image\" target=\"_blank\"><font class=sf>Iconimage List</font></a>*";
		}
		print "</td></tr>\n";
	}
if ($col_mode == 1){
print "<tr><td nowrap align=right><font class=sf>Font Color</font></td><td nowrap>\n";
	# クッキーの色情報がない場合

	foreach (0 .. $#COLOR) {
		if ($color eq "$COLOR[$_]") {
	print "<input type=radio name=color value=\"$COLOR[$_]\" checked>";
	print "<font color=\"$COLOR[$_]\">■</font>";
		} else {
	print "<input type=radio name=color value=\"$COLOR[$_]\">";
	print "<font color=\"$COLOR[$_]\">■</font>";		}
	}
print "</td></tr>\n";}
print "<tr><td nowrap align=right></td><td nowrap><input type=submit value=Submit class=BOT>&nbsp;<input type=reset value=Reset class=BOT></td></tr>\n";
print "</table></tr></td>";
print "<tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=right><font color=\"$text\">変更する箇所だけを修正し、送信ボタンを押して下さい。</font></td></tr></table>\n";
print "</td></tr></table></td></tr></table></td></form></tr></table></center>\n</body>\n</html>\n";
	exit;
}

#------------------------#
#  フォーム入力チェック  #
#------------------------#
sub form_check {
	local($ref_url);

	# POST限定
	if ($MethPost && !$post_flag) { &error("不正なアクセスです"); }

	# コメントは必須

	if ($in{'comment'} eq "") { &error("コメントが入力されていません"); }
	

	
}

#--------------#
#  時間を取得  #
#--------------#
sub get_time {
	$ENV{'TZ'} = "JST-9";
	$times = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($times);
	@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

	# 日時のフォーマット
	$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d",
			$year+1900,$mon+1,$mday,$week[$wday],$hour,$min);
}

#----------------#
#  カウンタ処理  #
#----------------#
sub counter {
	local($cntup,@cnts,$cnt);

	# 閲覧時のみカウントアップ
	if ($mode eq '') { $cntup=1; } else { $cntup=0; }

	# カウントファイルを読みこみ
	open(IN,"$cntfile") || &error("Open Error : $cntfile");
	eval "flock(IN, 1);";
	$data = <IN>;
	close(IN);

	# IPチェックとログ破損チェック
	($cnt, $ip) = split(/:/, $data);
	if ($addr eq $ip || $cnt eq "") { $cntup=0; }

	# カウントアップ
	if ($cntup) {
		$cnt++;
		open(OUT,"+< $cntfile") || &error("Write Error : $cntfile");
		eval "flock(OUT, 2);";
		truncate(OUT, 0);
		seek(OUT, 0, 0);
		print OUT "$cnt\:$addr";
		close(OUT);
	}

	# 桁数調整
	while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; }
	@cnts = split(//, $cnt);

	# GIFカウンタ表示
	if ($counter == 2) {
		foreach (0 .. $#cnts) {
			print "<img src=\"$gif_path$cnts[$_]\.gif\" alt=\"$cnts[$_]\" width=\"$mini_w\" height=\"$mini_h\">";
		}
	}
	# テキストカウンタ表示
	else {
		print "<font color=\"$cnt_color\" face=\"verdana,Times New Roman,Arial\">$cnt</font><br>\n";
	}
}

#--------------#
#  ロック処理  #
#--------------#
sub lock {
	local($retry,$mtime);

	# 1分以上古いロックは削除する
	if (-e $lockfile) {
		($mtime) = (stat($lockfile))[9];
		if ($mtime < time - 60) { &unlock; }
	}
	# symlink関数式ロック
	if ($lockkey == 1) {
		$retry = 5;
		while (!symlink(".", $lockfile)) {
			if (--$retry <= 0) { &error('LOCK is BUSY'); }
			sleep(1);
		}
	# mkdir関数式ロック
	} elsif ($lockkey == 2) {
		$retry = 5;
		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 encrypt {
	local($inpw) = $_[0];
	local(@SALT, $salt, $encrypt);

	@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
	srand;
	$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
	$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
	return $encrypt;
}

#----------------------#
#  パスワード照合処理  #
#----------------------#
sub decrypt {
	local($inpw, $logpw) = @_;
	local($salt, $key, $check);

	$salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2);
	$check = "no";
	if (crypt($inpw, $salt) eq $logpw || crypt($inpw, '$1$' . $salt) eq $logpw)
		{ $check = "yes"; }
	return $check;
}

#------------------#
#  HTMLのヘッダー  #
#------------------#
sub header {
	$head_flag=1;
	print "Content-type: text/html\n\n";
	print <<"EOM";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE type="text/css">
<!--
a:link    {font-size:$lb_size;text-decoration:none; color:$link }	
a:visited {font-size:$lb_size;text-decoration:none; color:$vlink }	
a:active  {font-size:$lb_size;text-decoration:none; color:$alink }	
a:hover   {font-size:$lb_size;color:$alink;text-decoration:none; position:relative; top:1px; left:1px;}
input,select,textarea,text {background-color:$fbcolor;border:$f_lsize $f_lstyle $f_ltcolor;font-size:$fb_size;color:$f_lttcolor;font-family:'MS UI Gothic',Osaka,\"ＭＳ Ｐゴシック\",chicago,Arial,sans-serif;}
.BOT{border:$f_lsize $f_lstyle $f_ltcolor;;background-image:url(\"$botbg\");color:$botcolor;font-family:verdana,chicago,Arial,'MS UI Gothic',Osaka,sans-serif;font-size:$sfpt }	
body,tr,td,tt,th { font-size: $b_size;font-family:$font_family; }
body { BACKGROUND-attachment:fixed;BACKGROUND-POSITION:$bgposition;BACKGROUND-repeat:$bgrepeat;}
BODY { scrollbar-arrow-color:$scrollbararrowcolor; scrollbar-face-color: 
$scrollbarfacecolor; scrollbar-base-color:$scrollbarbasecolor;scrollbar-darkshadow-color:$scrollbardarkshadowcolor;scrollbar-shadow-color:$scrollbarshadowcolor;scrollbar-highlight-color:$scrollbarhighlightcolor; scrollbar-track-color:$scrollbartrackcolor; }
SPAN { font-size: $t_size; font-family:$t_face;}
.text {line-height:20px; font-size:12px; background:url('$letter_l'); margin:0px 4px 4px 4px;}
.sf{font-size:$sfpt}
.TC { BORDER: $wakucolor $wakusize $wakustyle;}
.HR { BORDER: $hrcolor $hrsize $hrstyle;}
.TTT {background:url('$letter_l');BACKGROUND-POSITION:center bottom;BACKGROUND-repeat:repeat-x;}
.CBG {BACKGROUND-POSITION:center center;BACKGROUND-repeat:repeat;}
-->
</STYLE>
EOM
	# JavaScriptヘッダー
	if ($ImageView == 1 && $_[0] eq "ImageUp") {
		print "<META http-equiv=\"Content-Script-Type\" content=\"text/javascript\">\n";
		print "<SCRIPT type=\"text/javascript\">\n";
		print "<!--\n";
		print "function ImageUp() {\n";
		print "window.open(\"$script?mode=image\",\"window1\",\"width=$img_w,height=$img_h,scrollbars=1\");\n}\n//-->\n</SCRIPT>\n";
	}
#ランダムな壁紙の設定
if ($backgif_use ==1){
print "<SCRIPT type=\"text/javascript\">\n";
print "<!--\n";
print "var kaHa3=$kazu;\n";
print "var bgImHa3=new Array();\n";
print "bgImHa3[0]=\"$javabg0\";\n";
print "bgImHa3[1]=\"$javabg1\";\n";
print "bgImHa3[2]=\"$javabg2\";\n";
print "bgImHa3[3]=\"$javabg3\";\n";
print "bgImHa3[4]=\"$javabg4\";\n";
print "bgImHa3[5]=\"$javabg5\";\n";
print "bgImHa3[6]=\"$javabg6\";\n";
print "bgImHa3[7]=\"$javabg7\";\n";
	print "-->\n";
	print "</SCRIPT>\n";}
#ランダムな壁紙の設定終了
	print <<"EOM";
<!--
///////////////////////////////////////////////////
// 背景 No.3 Produced by「CLUB とむやん君」
// URL http://www2s.biglobe.ne.jp/~club_tom/
// 上の2行は著作権表\示ですので消さないで下さい
///////////////////////////////////////////////////
-->
EOM
print "<title>$title</title></head>\n";
print "<body bgcolor=\"$bgcolor\" text=\"$text\" link=\"$link\" vlink=\"$vlink\" alink=\"$alink\">\n";
if ($backgif_use ==1){
print "<SCRIPT type=\"text/javascript\">\n";
print "<!--\n";
print "document.write('<BODY BACKGROUND='+bgImHa3[Math.floor(Math.random()*(kaHa3+1))]+'>');\n";
	print "-->\n";
	print "</SCRIPT>\n";}
}

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

#--------------------#
#  画像イメージ表示  #
#--------------------#
sub image {
	local($i,$j,$stop);

	&header;
print "<center><table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 画像イメージサンプル --+</font></td></tr></table></td></tr></table>\n";
	print "<P>現在登録されているアイコンは以下のとおりです\n";
	print "<P><table border=0 cellpadding=5 cellspacing=0 class=TC><tr>\n";

	$i=0; $j=0;
	$stop = @icon1;
	foreach (0 .. $#icon1) {
		$i++; $j++;
		print "<td><img src=\"$imgurl$icon1[$_]\" ALIGN=middle alt=\"$icon1[$_]\"><BR>$icon2[$_]</td>\n";
		if ($j != $stop && $i >= $iconline) { print "</tr><tr>\n"; $i=0; }
		elsif ($j == $stop) {
			if ($i == 0) { last; }
			while ($i < $iconline) { print "<td><br></td>"; $i++; }
		}
	}

	print "</tr></table><br>\n";
	print "<FORM><INPUT TYPE=\"button\" VALUE=\"  CLOSE  \" onClick=\"top.close();\"></FORM>\n";
	print "</center>\n</body>\n</html>\n";
	exit;
}

#--------------------#
# 画像イメージ2表示  #
#--------------------#
sub image2 {
	local($i,$j,$stop);

	&header;
print "<center><table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 画像イメージサンプル --+</font></td></tr></table></td></tr></table>\n";
	print "<P>現在登録されている記事部背景画像は以下のとおりです\n";
	print "<P><table border=0 cellpadding=5 cellspacing=0 class=TC><tr>\n";

	$i=0; $j=0;
	$stop = @bg1;
	foreach (0 .. $#bg) {
		$i++; $j++;
		print "<td><img src=\"$imgurl2$bg[$_]\" ALIGN=middle alt=\"$bg[$_]\"><BR>$bg2[$_]</td>\n";
		if ($j != $stop && $i >= $bgline) { print "</tr><tr>\n"; $i=0; }
		elsif ($j == $stop) {
			if ($i == 0) { last; }
			while ($i < $bgline) { print "<td><br></td>"; $i++; }
		}
	}

	print "</tr></table><br>\n";
	print "<FORM><INPUT TYPE=\"button\" VALUE=\"  CLOSE  \" onClick=\"top.close();\"></FORM>\n";
	print "</center>\n</body>\n</html>\n";
	exit;
}

#----------------#
#  ホスト名取得  #
#----------------#
sub get_host {
	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};

	if ($get_remotehost) {
		if ($host eq "" || $host eq "$addr") {
			$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
		}
	}
	if ($host eq "") { $host = $addr; }
}

#----------------#
#  過去ログ生成  #
#----------------#
sub pastlog {
	local($count,$pastfile,@temp,$pno,$preno,$pdate,$psub,$pcom,$pho);
	local($past_flag)=0;

	# 過去NOを開く
	open(NO,"$nofile") || &error("Open Error : $nofile");
	$count = <NO>;
	close(NO);

	# 過去ログのファイル名を定義
	$pastfile = "$pastdir$count\.dat";

	# 過去ログを開く
	open(IN,"$pastfile") || &error("Open Error : $pastfile");
	@past = <IN>;
	close(IN);

	# 規定の行数をオーバーすると次ファイルを自動生成
	if ($#past > $log_line) {
		$past_flag=1;

		# カウントファイル更新
		$count++;
		open(NO,">$nofile") || &error("Write Error : $nofile");
		print NO $count;
		close(NO);

		$pastfile = "$pastdir$count\.dat";
		@past=();
	}

	@temp=();
	foreach (@data) {
		($pno,$preno,$pdate,$psub,$pcom,$pho)
								 = split(/<>/);

		# 保存記事をフォーマット
push(@temp,"[<b>$pno</b>] <font color=\"$subt_color\">$psub</font> 投稿日：<small>$pdate</small> $purl<br><blockquote>$pcom</blockquote><!-- $pho -->\n");
	}

	# 過去ログを更新
	unshift(@past,@temp);
	open(OUT,">$pastfile") || &error("Write Error : $pastfile");
	print OUT @past;
	close(OUT);

	if ($past_flag) { chmod(0666,$pastfile); }
}

#------------#
#  過去ログ  #
#------------#
sub past {
	local($pastno,@new,$count,@pairs,$pair);

	open(IN,"$nofile") || &error("Open Error : $nofile");
	$pastno = <IN>;
	close(IN);

	if (!$in{'pastlog'}) { $in{'pastlog'} = $pastno; }

	&header;
	print <<"EOM";
$bp_position
$bpoint <a href=$script?>$titleにもどる</a> $bpoint<BR>
$sbp_position
$p_position
<table width=$tblesize border=0 cellpadding=2 CELLSPACING=0 class=TC><tr><td><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=4 width=100% background=$ftbg class=CBG bgcolor=$ftbgcol><tr><td align=center><font color=\"$text\">+-- 過去ログ [$in{'pastlog'}] --+</font></td></tr></table></td></tr></table>

<P><table><tr>
<form action="$script" method="$method"><td>
<input type=hidden name=mode value=past>
過去ログ：<select name=pastlog>
EOM

	$pastkey = $pastno;
	while ($pastkey > 0) {
		if ($in{'pastlog'} == $pastkey) {
		print "<option value=\"$pastkey\" selected>$pastkey Page\n";
		} else {
			print "<option value=\"$pastkey\">$pastkey Page\n";
		}
		$pastkey--;
	}
	print "</select>\n<input type=submit value='移動' class=BOT></td></form></tr><tr>\n";
	print "<form action=\"$script\" method=\"$method\"><td>\n";
	print "<input type=hidden name=mode value=past>\n";
	print "<input type=hidden name=pastlog value=\"$in{'pastlog'}\">\n";
	print "ワード検索：<input type=text name=word size=30 value=\"$in{'word'}\">\n";
	print "条件：<select name=cond>\n";

	foreach ('AND', 'OR') {
		if ($in{'cond'} eq "$_") {
			print "<option value=\"$_\" selected>$_\n";
		} else {
			print "<option value=\"$_\">$_\n";
		}
	}
	print "</select>\n";
	print "表\示：<select name=view>\n";
	if ($in{'view'} eq "") { $in{'view'} = $p_log; }
	foreach (5,10,15,20,25,30) {
		if ($in{'view'} eq "$_") {
			print "<option value=\"$_\" selected>$_件\n";
		} else {
			print "<option value=\"$_\">$_件\n";
		}
	}
	print "</select>\n<input type=submit value='検索' class=BOT></td></form>\n";
	print "</td></tr></table>\n";
	print "<table width=70%><tr><td>\n";

	# 表示ログを定義
	$in{'pastlog'} =~ s/\D//g;
	$file = "$pastdir$in{'pastlog'}\.dat";

	# ワード検索処理
	if ($in{'word'} ne "") {
		$in{'word'} =~ s/　/ /g;
		@pairs = split(/\s+/, $in{'word'});

		@new=();
		open(IN,"$file") || &error("Open Error : $file");
		while (<IN>) {
			$flag=0;
			foreach $pair (@pairs) {
				if (index($_,$pair) >= 0) {
					$flag=1;
					if ($in{'cond'} eq 'OR') { last; }
				} else {
					if ($in{'cond'} eq 'AND') { $flag=0; last; }
				}
			}
			if ($flag) { push(@new,$_); }
		}
		close(IN);

		$count = @new;
		print "検索結果：<b>$count</b>件\n";
		if ($page eq '') { $page = 0; }
		$end_data = @new - 1;
		$page_end = $page + $in{'view'} - 1;
		if ($page_end >= $end_data) { $page_end = $end_data; }

		$next_line = $page_end + 1;
		$back_line = $page - $in{'view'};

		$eword = &url_enc($in{'word'});
		if ($back_line >= 0) {
			print "[<a href=\"$script?mode=past&page=$back_line&word=$eword&view=$in{'view'}&cond=$in{'cond'}&pastlog=$in{'pastlog'}\">前の$in{'view'}件</a>]\n";
		}
		if ($page_end ne "$end_data") {
			print "[<a href=\"$script?mode=past&page=$next_line&word=$eword&view=$in{'view'}&cond=$in{'cond'}&pastlog=$in{'pastlog'}\">次の$in{'view'}件</a>]\n";
		}
		print "[<a href=\"$script?mode=past&pastlog=$in{'pastlog'}\">検索やり直し</a>]\n";

		# 表示開始
		foreach ($page .. $page_end) {
			print $new[$_];
		}
		print "<BR><hr noshade size=1 class=HR>\n";
		print "</body></html>\n";
		exit;
	}
	print "<hr noshade size=1 class=HR>\n";
	# ページ区切り処理
	$start = $page + 1;
	$end   = $page + $p_log;

	$i=0;
	open(IN,"$file") || &error("Open Error : $file");
	while (<IN>) {

		$flag=0;
		if ($_ =~ /^\[\<b\>\d+\<\/b\>\]/) { $flag=1; $i++; }
		if ($i < $start) { next; }
		if ($i > $end) { last; }


		if ($flag) { print $_; }
		else {

			print "<blockquote>$_</blockquote>\n";
		}
	}
	close(IN);
	print "<hr noshade size=1 class=HR>\n";

	$next_page = $page + $p_log;
	$back_page = $page - $p_log;

	print "<table>\n";
	if ($back_page >= 0) {
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=mode value=past>\n";
		print "<input type=hidden name=pastlog value=\"$in{'pastlog'}\">\n";
		print "<input type=hidden name=page value=\"$back_page\">\n";
		print "<input type=submit value=\"前の$p_log件\" class=BOT>\n";
		print "</td></form>\n";
	}
	if ($next_page < $i) {
		print "<td><form action=\"$script\" method=\"$method\">\n";
		print "<input type=hidden name=mode value=past>\n";
		print "<input type=hidden name=pastlog value=\"$in{'pastlog'}\">\n";
		print "<input type=hidden name=page value=\"$next_page\">\n";
		print "<input type=submit value=\"次の$p_log件\" class=BOT>\n";
		print "</td></form>\n";
	}
	print "</table></td></tr></table>\n</body>\n</html>\n";
	exit;
}

#------------------#
#  チェックモード  #
#------------------#
sub check {
	&header;
	print "<h2>Check Mode</h2>\n";
	print "<UL>\n";

	# ログパス
	if (-e $logfile) { print "<LI>ログファイルのパス：OK\n"; }
	else { print "<LI>ログファイルのパス：NG → $logfile\n"; }

	# ログパーミッション
	if (-r $logfile && -w $logfile) { print "<LI>ログファイルのパーミッション：OK\n"; }
	else { print "<LI>ログファイルのパーミッション：NG\n"; }

	# カウンタログ
	print "<LI>カウンタ：";
	if ($counter) {
		print "設定あり\n";
		if (-e $cntfile) { print "<LI>カウンタログファイルのパス：OK\n"; }
		else { print "<LI>カウンタログファイルのパス：NG → $cntfile\n"; }
	}
	else { print "設定なし\n"; }

	# ロックディレクトリ
	print "<LI>ロック形式：";
	if ($lockkey == 0) { print "ロック設定なし\n"; }
	else {
		if ($lockkey == 1) { print "symlink\n"; }
		else { print "mkdir\n"; }

		($lockdir) = $lockfile =~ /(.*)[\\\/].*$/;
		print "<LI>ロックディレクトリ：$lockdir\n";

		if (-d $lockdir) { print "<LI>ロックディレクトリのパス：OK\n"; }
		else { print "<LI>ロックディレクトリのパス：NG → $lockdir\n"; }

		if (-r $lockdir && -w $lockdir && -x $lockdir) {
			print "<LI>ロックディレクトリのパーミッション：OK\n";
		} else {
			print "<LI>ロックディレクトリのパーミッション：NG → $lockdir\n";
		}
	}

	# 過去ログ
	print "<LI>過去ログ：";
	if ($pastkey == 0) { print "設定なし\n"; }
	else {
		print "設定あり\n";

		# NOファイル
		if (-e $nofile) { print "<LI>NOファイルパス：OK\n"; }
		else { print "<LI>NOファイルのパス：NG → $nofile\n"; }
		if (-r $nofile && -w $nofile) { print "<LI>NOファイルパーミッション：OK\n"; }
		else { print "<LI>NOファイルパーミッション：NG → $nofile\n"; }

		# ディレクトリ
		if (-d $pastdir) { print "<LI>過去ログディレクトリパス：OK\n"; }
		else { print "<LI>過去ログディレクトリのパス：NG → $pastdir\n"; }
		if (-r $pastdir && -w $pastdir && -x $pastdir) {
			print "<LI>過去ログディレクトリパーミッション：OK\n";
		} else {
			print "<LI>過去ログディレクトリパーミッション：NG → $pastdir\n";
		}
	}

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

#-----------------#
#  URLエンコード  #
#-----------------#
sub url_enc {
	local($_) = @_;

	s/(\W)/'%' . unpack('H2', $1)/eg;
	s/\s/+/g;
	$_;
}
