#!/usr/bin/perl

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++　　[ もっと書き込み隊 ]
#+++		･････>>> All Created by Tacky
#+++		･････>>> Copyright (c) 1999.10 Tacky's Room. All rights reserved....
#+++        Email    >>> tacky2@ops.dti.ne.jp      Homepage >>> http://tackysroom.com/
#+++
#+++ 設置方法構成(具体例)
#+++ public_html（ホームページディレクトリ）
#+++ |-- cgi-bin（任意のディレクトリ）
#+++   |-- jcode.pl       (755)…(日本語ライブラリ)
#+++   |-- mkakikomitai.cgi (755)…(スクリプト本体)
#+++   |-- mkakikomitai.txt (666)…(ログファイル)…空のままアップロード
#+++   |-- mkakikomitai_cnt.txt (666)…(昇進状態設定用ファイル)…空のままアップロード
#+++   |-- mkakikomitai.cnt (666)…(カウンターファイル)…空のままアップロード
#+++   |---img（カウンター設置する方のみ）※注意：プロバがhi-hoの方は、ここにディレクトリは作れません。
#+++   |   |--num6.0.gif〜9.gifまで置いて下さい。
#+++   |---old(777)…過去ログ作成する場合に作成して下さい。
#+++       |--何も置かなくて結構です。
#+++ 　　■( )内はパーミッッションの値です。
#+++ 　　■gif以外はアスキーモード、gifはバイナリーモードでアップロードして下さい。
#+++ 　　■mkakikomitai.lockは自動作成＆削除しますので、各自でご用意する必要はありません。
#+++ 　　■ログファイル・ロックファイルの指定はフルパス(http://〜)で指定するとエラーになりますのでご注意下さい。
#+++ 　　■設置時にエラーになる方は、$scriptの指定をhttpからのフルパス(http://〜)で指定してみて下さい。
#+++
#+++ >>> Update-History...
#+++    2005.04.13(Ver0.942 ) >> ・検索結果画面でタグ閉じ忘れがありました。
#+++    2005.01.20(Ver0.941 ) >> ・過去ログを作成しない場合($olddir="")、検索機能に不具合がありました。
#+++    2004.03.09(Ver0.94 )  >> ・アイコンの位置をtop→middleに戻しました。
#+++　　　　　　　　　　　　　　 ・新着表示のロジックを変更しました。Ver0.93以前に書き込まれた記事が新着になる事はありませんのでご了承下さい。
#+++    2004.03.08(Ver0.93 )  >> ・簡易表示時の最新更新者が親記事の日時になっているバグ対処
#+++    2004.03.06(Ver0.92 )  >> ・一括レス時に「タイトル必須エラー」となるバグ対処
#+++    2004.03.05(Ver0.91 )  >> ・レス時に「タイトル必須エラー」となるバグ対処
#+++    2004.03.03(Ver0.9 )  >>  ・検索機能追加
#+++　　　　　　　　　　　　 　　・「簡易表示（一覧表示）」と「詳細表示（通常表示）」を可能に
#+++　　　　　　　　　　　　 　　・入力フォームの文字を変えられるようにしました
#+++　　　　　　　　　　　　 　　・「昇進資格説明」と「昇進状態」を１つのボタンに統合
#+++　　　　　　　　　　　　 　　・カウンターに最新ホスト情報を格納し無駄なカウントをしないように。
#+++　　　　　　　　　　　　 　　・スクロールにBACK/NEXTの他に指定ページ移動機能を追加
#+++　　　　　　　　　　　　 　　・入力フォームの「タイトル」必須入力チェックをする、しないの設定を追加
#+++　　　　　　　　　　　　 　　・修正、削除を管理人のみとする設定を追加
#+++    2004.02.07(Ver0.882 )>>  ・セキュリティ強化
#+++    2004.01.05(Ver0.881 )>>  ・子記事がある親記事を削除しようとした場合「パスワードが違います」となるバグを修正(Ver0.88のバグ）
#+++    2003.11.21(Ver0.88 ) >>  ・連続投稿禁止機能とPOST投稿チェックを追加
#+++    2001.04.05(Ver0.871) >>  ・にゃぽにか機能と自動リンク機能の設定方法によってにゃぽにか機能がオフなのにオンになってしまいました。
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#━＜初期設定開始＞━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
require '../da_jcode.pl';													#日本語コード変換
$url						= 'http://www.gyuttoweb.com/gyuttogroup/yuppiestation/index.html';	#戻り先ＵＲＬ
$script						= './yup_board001.cgi';						#このＣＧＩの名前を指定
$logfile					= '../yup_board001_data/mkakikomitai.txt';						#ログファイルの名前を指定　　http://〜で指定してはダメですよ
$lockfile					= './mkakikomitai.lock';					#ロックファイルの名前を指定(自分で作る必要無し)　　http://〜で指定してはダメですよ
$cntfile					= '../yup_board001_data/mkakikomitai.cnt';						#カウンターファイルの名前を指定（未使用の場合は'')
$logfile2					= '../yup_board001_data/mkakikomitai_cnt.txt';					#←昇進機能を使う場合#投稿者毎の投稿回数を保持するファイルの名前を指定。使わない場合は''として下さい。


$title						= 'ゆぴすてぼーど：閲覧専用';						#タイトルを指定
$titlelogo					= '';	#タイトル画像を指定。src=の後ろに画像のパスを指定してね。（使用しない場合は、''で良い)
$backpicture				= '';										#背景画像を指定（使用しない場合は、''で良い)
$bgcolor					= '#ffffff';								#背景色を指定
$tbgcolor					= '';										#入力フォームの背景色を指定(透明にしたい場合は'')
$tcolor					    = "#6a3535";								# 文字色
$linkcolor				    = "#00ffff";								# リンク色（未読リンク）
$vlinkcolor					= "#0080ff";								# リンク色（既読リンク）
$alinkcolor		 			= "#ff80c0";								# リンク色（押した時）
$hovercolor					= '#00bb00';								#ﾘﾝｸをﾎﾟｲﾝﾄした際のｱﾝﾀﾞｰﾗｲﾝ色(IEのみ)	i000331
$pt							= '10pt';									#全体のフォントサイズ（pt指定以外何があるのか、僕知らない。(^^ゞ）	#i000331
$res_gif					= './res.gif';	#メッセージ表示部分にある「返信」に画像を使う場合、画像ファイルを指定。画像を使わない場合は、以下を''として下さい。

$name_color					= "#000000";								#投稿メッセージ表示部分の「名前」の色
$msg_color					= "#ffffff";								#投稿メッセージ表示部分の「メッセージ」の背景色

$titleset					= 1;										#入力フォームに「タイトル」必要？(0:不要 1:必要)

$homelinklogo				= '<img src=kakikomitai_linkhome.gif width=50 height=12 border=0>';	#ホームページ・リンク画像へのIMGタグを指定(未使用の場合は'')
$maillinklogo				= '<img src=kakikomitai_linkmail.gif width=50 height=12 border=0>';	#メール・リンク画像へのIMGタグを指定(未使用の場合は'')

$top_l						= '<img src=spacer.gif width=8 height=8>';		#メッセージ部左上隅の透過画像へのIMGタグを指定(未使用の場合は'')
$top_r						= '<img src=spacer.gif width=8 height=8>';		#メッセージ部右上隅の透過画像へのIMGタグを指定(未使用の場合は'')
$bottom_l					= '<img src=spacer.gif width=8 height=8>';	#メッセージ部左下隅の透過画像へのIMGタグを指定(未使用の場合は'')
$bottom_r					= '<img src=spacer.gif width=8 height=8>';	#メッセージ部右下隅の透過画像へのIMGタグを指定(未使用の場合は'')

$datamax					= 1000 ;										#最大データ保存件数(親記事）…越えたら過去ログを作成します。（過去ログ作成する設定の場合）
$pagemax					= 10 ;										#１ページ内に表示する件数(親記事の件数)
$password					= 'yupisute1984';									#メンテナンス用パスワード（管理者用）
$tag						= 'no';										#タグ許可(yes,no)
$resflag					= 'yes' ;									#最新レスを先頭に表示する？(yes,no)
$hostflag					= 'no' ;									#リモートホストを表示する？(yes.no)

$row						= 4;										#入力フォーム・メッセージ欄の行数
$col						= 52;										#入力フォーム・メッセージ欄の文字数
$t_width					= 460 ;										#メッセージ表示欄のテーブル横幅(width)。pixelで指定

#色の指定(背景色)
@COLORS_B = ('#ffff80','#ff8080','#ffb18c','#77ffbb','#68ffff','#379bff','#c488ff');
#↑みたいに、背景色は選択しないという（１色でいい）方はチェック(1)
$colb_use					= 0;	#(0:色指定する 1:色指定しない）
$colb						= '#cccccc' ;	#上記が'1'の場合、背景色を指定
#色の指定(文字色)
@COLORS_F = ('#6a3535','#ff5959','#ff7533','#00e874','#00c4c4','#0080ff','#ac59ff','#000000');
#↑みたいに、文字色は選択しないという（１色でいい）方はチェック(1)
$colf_use					= 0;	#(0:色指定する 1:色指定しない）
$colf						= '#000000' ;	#上記が'1'の場合、文字色を指定

#入力フォームの各項目見出し部分(NAME,EMAIL,HP,TITLE等）に画像を使用しない場合は、０を設定
$gif_flg			= 1;														#(0:使用しない　1:使用する)

#入力フォームの各項目見出しに、ダウンロードした画像をそのまま
#使用する場合は、GIFを置くパスだけ修正してね
$gif_name			= './kakikomitai_name.gif';		#入力フォーム(name)
$gif_email			= './kakikomitai_email.gif';	#入力フォーム(email)
$gif_home			= './kakikomitai_homepage.gif';	#入力フォーム(homepage)
$gif_title			= './kakikomitai_title.gif';	#入力フォーム(title)
$gif_message		= './kakikomitai_message.gif';	#入力フォーム(message)

$icon_use			= 'no';										#アイコンを使用しますか？(yes,no)


$method						= 'POST';									#METHODの指定(POST又はGET)

#<<<↓の画像はそのまま使用してね。パスだけ修正。
$gif_spacer			= './spacer.gif';				#ダミー透過画像

#掲示板荒らし対策。排除したいプロバのアドレスを設定して下さい。
#　"xxx?.com"とした場合、"xxx1.com","xxx2.com"等、「？」の部分が文字列１つと判断します
#  "xxx*.com"とした場合、"xxx1.com","xxx12345.com等、「＊」の部分が０個以上の文字列と判断します。
@DANGER_LIST=("pcsupport.no","yyy.com","zzz*.or.jp");

#掲示板荒らし対策その２。メッセージ最大文字数を指定。特に設定しない場合は、''として下さい。
$maxword = '2000' ;		#２０００＝日本語で１０００文字という意味です。

#↓昇進機能を使う場合のみ設定。昇進機能を使用しない場合は、このままで構いません。
@rank = ('初登場','ゆぴすて検定５級','ゆぴすて検定４級','ゆぴすて検定３級','ゆぴすて検定２級','ゆぴすて検定１級','ゆぴすて研究員','ゆぴすて博士助手','ゆぴすて博士','ゆぴすて大臣','ゆぴすて王','ゆぴすて皇帝');
#↓指定した回数で昇進していきます
@rankno = ('1','2','5','10','20','50','80','100','130','150','200','300');

#投稿時に管理者にメール送信する場合、sendmailのパスを指定
#プロバがsendmailに対応していなければなりません。詳細はプロバに質問して下さいね。
#※使用しない（又は、できない）場合は、$sendmail = "";のようにして下さい!!
$sendmail = "";

#メール送信先アドレス。（管理者のアドレス）…「@」の前には「\」を必ずつけてね。「\」を付けないとInternalServererrorになるからね。でもなんない時もあるなぁ。よくわからん。(^^;;;
#（Sendmailを使わない場合は設定しても意味ありません）
$smail_address = "xxxxx\@xxxxx.co.jp";

$sendsw			= 1 ;	#Sendmailを使う場合： 0:管理人の投稿($smail_addressで指定したメルアド入力時）はメール送信しない　1:全ての記事に対してメール送信する

$hiho			= 0 ;	#プロバイダーが「hi-ho」の人のみ「1」にして下さい。　※Sendmail使う場合

#投稿時のパスワードをcrypt関数を使用する（暗号化）
#crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。
$ango			= 1 ;	#0:使用しない 1:使用する　（推奨：１：使用する）

#<<< 過去ログ設定…指定したディレクトリ($olddir)直下に"01.txt".."10.txt"のように作成します
#<<< ※CGIと同じ階層には、設置出来ません。必ず過去ログ保存用フォルダを作成してください。
$olddir			= '../yup_board001_data/old/' ;	#過去ログ作成用ディレクトリを指定。(不要の場合は'')
$oldmax			= 100 ;			#１過去ログファイルの最大件数（親記事）。越えたら次の過去ログを作成します

#『にゃぽにか学習帳』のようにノートっぽくログを表示します？
$nya			= 0 ;	#にゃぽにかバージョンにする？(0:しない 1:する)…書き込みの１行毎に横線を入れてノートみたいにする
$maru			= 1 ;	#ログ表示部のテーブルの四角枠を丸くする？(0:しない 1:する)…しない場合、$top_l,r,$bottom_l,rの画像は不要です

#=============================================================================================================================================================================================
#ＣＳＳ設定　("EOM"〜EOMの間にメッセージを書いてください）
#※使用しない場合は、$css_style = "";とし、そこから先頭がEOMの行までを削除して下さい。
$css_style = <<"EOM";
STYLE=font-size:$pt;background-color:#ffffff;border-style:solid;border-color:#333333;border-width:1;
a:link    {text-decoration:none; color:#00ffff }
a:visited {text-decoration:none; color:#0080ff }
a:active  {text-decoration:none; color:#ff80c0 }
a:hover   {text-decoration:underline; color:#ff80c0; }
EOM

#■↓の機能がわからない、又は降格はしないのであれば、「$rdm = 0 ;」と、０を指定してください。
$rdm = 0 ;		#0〜30のランダム値を$rdm2で割った余りが０の場合、以下のランダム降格を行います
#もし、降格の確率が多い場合は、$rdmの値を増やしてください。＜15以下の値で。
@DOWN = (1,2,3,5,7,10) ;		#ランダム降格(左記で設定した値の中からランダムに投稿回数を減少させます)
#減少回数は２個くらいでいいなら、@DOWN(1,3);としてね。＜１回分投稿回数を減少、又は３回分投稿回数減少の意味となります。
#ちなみに、-10とかを設定したら、一気に昇進となります。

$kaisu_disp = 1 ;	#投稿回数をログ表示部にも表示する？(0:no 1:yes)

$ikkiflg	= 0 ;	#一気にレスモードを使う？(0:no 1:yes)
$ikkiflg2	= 0 ;	#一気にレスモードを使うのは管理者だけにする？(0:no 1:yes)　
					#※１の場合は入力フォームのパスワードに管理者パスワード($password)を入力しないとエラーとします

#一気にレスを使う場合、一括レスがONの際に入力フォームの下に表示させるメッセージ。表示しない場合は、この次の行〜先頭がEOMの行までを削除してね。
$ikkimsg = <<"EOM";
<center><table width=500><tr><td>
■一括レスがONの場合は、各記事の下にあるメッセージ欄を複数入力する事によって、一度に
複数記事へのレスが出来ます。※注意：１ページ毎。<br>
一括レスをON→OFFにすると、各記事の下のメッセージ欄は非表\示となります。
</td></tr></table>
EOM

$autolink	= 1 ;	#「http〜」を入力すると「こちら」と自動リンクするのを使う？(0:no 1:yes)　

#Ver0.88の追加機能 2003/11/21
$renchan1		= 0 ;		#指定分以内の連続投稿はｴﾗｰとする。設定しない場合は0としてね。※「一気にレス機能がOFFのみ」
$renchan2		= 0 ;		#指定回数以上の連続投稿はｴﾗｰとする。設定しない場合は0としてね。※「一気にレス機能がOFFのみ」

#◆◆◆↓セキュリティ◆◆◆
$postchk		= 1;		#投稿時・メンテナンス時のMethodをPOST限定にする場合は１。以外は０。
$urlchk			= '';		#ここで指定されたアドレス(CGIの設置アドレスを記入)以外から投稿があった場合をエラーとします。設定しない場合は''
$kanriup		= 0;		#管理人以外（パスワードは管理パスワードでなければ不可とする）は修正・削除出来ないようにする？(0:NO 1:YES)
#◆◆◆↑セキュリティ◆◆◆

$kaniflg			= 0;				#「簡易表示」機能を利用する？(0:NO 1:YES)
$kaniflg2			= 1;				#「簡易表示」機能を利用する場合、初期表示はどっち？(0:簡易表示 1:詳細表示)
$list_width			= '75%' ;									#簡易表示一覧画面のテーブル幅をピクセル又は％で指定。
$list_bgcolor1		= '#CF430E';								#簡易表示一覧のログ表示部の背景色（見出し部）
$list_bgcolor2		= '#FFFFFF';								#簡易表示一覧のログ表示部の背景色（明細部）
$list_txcolor1		= '#FFFFFF';								#簡易表示一覧のログ表示部の文字色（見出し部）
$list_txcolor2		= '#000000';								#簡易表示一覧のログ表示部の文字色（明細部）
$list_bdcolor		= '#990000';								#簡易表示一覧のログ表示部のテーブル枠色
$newtime			= 48 ;										#簡易表示一覧・何時間以内に投稿（又はレス）記事を「新着情報」としますか？
$newgif				= './ani_111.gif' ;							#簡易表示一覧・新着情報に表示させる「new」の画像

#▼入力フォームの文字　※$gif_flg=0（画像を使わない場合）のみ
$lbl_name			= 'お名前';			#入力フォームの「名前」に表示する文字
$lbl_email			= 'メールアドレス';	#入力フォームの「Email」に表示する文字
$lbl_url			= 'ホームページ';	#入力フォームの「URL」に表示する文字
$lbl_ttl			= 'タイトル';		#入力フォームの「タイトル」に表示する文字
$lbl_comment		= 'メッセージ';		#入力フォームの「メッセージ」に表示する文字
$lbl_bcolor			= 'Haikei color';			#入力フォームの「背景色」に表示する文字
$lbl_fcolor			= 'Moji color';			#入力フォームの「文字色」に表示する文字
$lbl_icon			= 'アイコン';		#入力フォームの「アイコン」に表示する文字
$lbl_iconlist		= 'アイコン一覧';	#入力フォームの「アイコン一覧」に表示する文字
$lbl_pass			= 'パスワード';		#入力フォームの「パスワード」に表示する文字
$lbl_submit			= 'Submit';			#入力フォームの「Submit」ボタンに表示する文字
$lbl_res			= 'Reply';			#入力フォームの「RES」ボタンに表示する文字
$lbl_clear			= 'Clear';		#入力フォームの「Clear」ボタンに表示する文字

$dwnflg				= 0;				#「ログをダウンロード」を利用する？(0:NO 1:YES)
$titleflg			= 0;				#入力フォームの「タイトル」を必須入力としますか？(0:NO 1:YES)

#<<<　ここから下はいじらない方がいいです。
@errtag = ('table','meta','form','!--','embed','html','body','tr','td','th','a');		#デンジャラ〜なタグ

#━＜初期設定終了＞━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

#utime time(), time(), __FILE__; 								# スクリプト生成日時の更新

###############################################################################
#### Main Process  START  #####################################################
###############################################################################
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/,/./g;	$col2 = 1;if ($agent =~ /Mozilla\/4/i && $agent !~ /compatible/i) { $col2 = 0.8; }
$ENV{'TZ'} = "JST-9";

$today = time;										#投稿時間
$newday = time - ( 60 * 60 * $newtime ) ;	#$newtime時間前
$renday = time - ( $renchan1 * 60 ) ;				#$renchan1分前

&logchk ;
&cookieget;															#<<<COOKIEの取得
&decode ;															#<<<デコード
if	( $FORM{'action'} eq 'icondisp' )	{ &icondisp ; }				#<<<アイコン一覧を見る
if ( $FORM{'action'} eq "maintenance" ) { 				      		#<<<"処理"がメンテナンスの場合
	&Maintenance;
	&dataread ;														#<<<ログ読み込み
}
if	( $FORM{'action'} eq "update" )		{ 							#<<<ログファイル更新（編集時）
	&update ;
	&cookieget;														#<<<COOKIEの取得
	&dataread ;														#<<<ログ読み込み
}
if	( $FORM{'action'} eq 'regist' )	{
	&regist ;
	&cookieget;														#<<<COOKIEの取得
	&dataread ;														#<<<ログ読み込み
	&logchk ;
	$FORM{'action'} = "" ;
}
if	( $FORM{'action'} eq 'find' )	{ &find ; }						#<<<記事検索
if	( $FORM{'action'} eq 'info' )	{ &info ; }						#<<<昇進資格説明
if	( $FORM{'action'} eq 'download' )	{	&dataread ;	&download ;	}			#<<<ログをダウンロードするi001112
&dataread ;															#<<<ログ読み込み
&header ;															#<<<htmlヘッダー出力
&header2 ;
if ( $FORM{'action'} ne 'res' )	{
	&forminput if ( $FORM{'action'} ne 'view' ) ;		#<<<入力フォーム表示
	&view ;																#<<<ログ表示
}	else	{
	&view ;																#<<<ログ表示
	&forminput if ( $FORM{'action'} ne 'oldlogfind' || $FORM{'oldlogno'} == 0 ) ;		#<<<入力フォーム表示
}
&footer ;															#<<<htmlフッター出力
exit;
###############################################################################
#### Main Process  END  #######################################################
###############################################################################
###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		$post = 1;
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else {
		$post = 0;
		$buffer = $ENV{'QUERY_STRING'};
	}
	@pairs = split(/&/,$buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ tr/+/ /;
		$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		if ($tag eq 'yes') {
	        #危険なタグは禁止!!!
			foreach ( @errtag )	{
				if ($value =~ /<$_(.|\n)*>/i) {	 &error("使用出来ないタグが入力されています");	}
			}
		}
		$value =~ s/\,/，/g;
		if ( $name ne 'comment' && $name !~ /rescomment/ )	{	$value =~ s/\r\n//g;	$value =~ s/\r|\n//g;	}
		if ( $tag ne 'yes' || $name ne 'comment' )	{
			$value =~ s/&/&amp;/g;	$value =~ s/"/&quot;/g;
			$value =~ s/</&lt;/g;	$value =~ s/>/&gt;/g;
		}
		&jcode'convert(*value,'sjis');
		$FORM{$name} = $value;
	}
	$FORM{'hp'}   =~ s/^http\:\/\///;
	$FORM{'comment'} =~ s/\r\n/<br>/g;	$FORM{'comment'} =~ s/\r|\n/<br>/g;

	for ( 1..$pagemax )	{
		$wk = "rescomment" . $_ ;
		if ( $FORM{$wk} ne '' ) {
			$FORM{$wk} =~ s/\r\n/<br>/g;	$FORM{$wk} =~ s/\r|\n/<br>/g;
		}
	}
	if ( $FORM{'action'} eq 'regist' || $FORM{'action'} eq 'maintenance' ||
		 $FORM{'action'} eq 'update' || $FORM{'action'} eq 'res' )	{
		if ( $postchk && !$post )	{	&error("不正な投稿です。");	}
		if ( $urlchk && $ENV{HTTP_REFERER} !~ /$urlchk/i )	{	exit;	}
	}
	if ( $kaniflg == 1 && $kaniflg2 == 1 && $FORM{'type'} eq '') {
		$FORM{'type'} = 1 ;
	}
}
###<--------------------------------------------------------------
###<---   入力フォーム
###<--------------------------------------------------------------
sub forminput {

}
###<--------------------------------------------------------------
###<---   HTMLヘッダー書き出し
###<--------------------------------------------------------------
sub header {
	print "Content-type: text/html; charset=Shift_JIS\n\n";
	print "<html>\n<head>\n";
	print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
	print "<script language='javascript' src='../../gyuttogroup/yuppiestation/bkabe1.js'></script>\n";
	print "<script language='javascript' src='../../gyuttogroup/yuppiestation/bkabe2.js'></script>\n";
	print "<LINK REL=StyleSheet HREF='../../gyuttogroup/yuppiestation/bkabe.css'>\n";
	print "<title>$title</title>\n";
	#<<<CSS START>>>
	print "<style type=\"text/css\">\n";
	print "<!--\n";
print <<"EOM";
body,td,tr,table { 
  color:$tcolor; font-size: $pt;	
}
EOM
	print $css_style;
	print "-->\n";
	print "</style>\n";
	#<<<CSS END>>>
	print "</head>\n";
	if ($backpicture) { $set = "background=\"$backpicture\""; if ( $bgcolor ) { $set .= " bgcolor=\"$bgcolor\"" ; }	}
	elsif ($bgcolor )	{ $set = "bgcolor=\"$bgcolor\""; }
	print "<body $set text=$tcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
}
###<--------------------------------------------------------------
###<---   ヘッダー上部書き出し
###<--------------------------------------------------------------
sub header2 {

}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer {

	print "<table width=100% border=0 cellspacing=0 cellpadding=0>\n";
	print "<tr><form><td width=1%>";

	if ( $logfile2 && $FORM{'action'} ne 'download' && $FORM{'action'} ne 'info')	{
		print "<form>\n";
		print "<td width=5>&nbsp;</td><td width=1%><INPUT TYPE=button VALUE=\"投稿ランキング\" ";
		print "onClick=\"parent.location.href = \'$script?action=info&type=$FORM{'type'}\'\" $css_style></td></form>\n";
	}
	if ( $FORM{'action'} ne 'view' && $FORM{'action'} ne 'res' && $FORM{'action'} ne 'find' && $FORM{'action'} ne 'info') { 
		if ( $FORM{'type'} == 1 || $kaniflg == 0 )	{
			if ( $ikkiflg == 1 && $FORM{'oldlogno'} == 0 )	{
				if ( $FORM{'kflg'} eq '' )	{
					print "<form>\n";
					print "<td width=5>&nbsp;</td><td width=1%><INPUT TYPE=button VALUE=\"一括レスON\" ";
					print "onClick=\"parent.location.href = \'$script?kflg=1&type=$FORM{'type'}\'\" $css_style></td></form>\n";
				}	else	{
					print "<form>\n";
					print "<td width=5>&nbsp;</td><td width=1%><INPUT TYPE=button VALUE=\"一括レスOFF\" ";
					print "onClick=\"parent.location.href = \'$script?type=$FORM{'type'}\'\" $css_style></td></form>\n";
				}
			}
		}
		if ( $kaniflg == 1 )	{
			if ( $FORM{'type'} != 1 )	{
				print "<form>\n";
				print "<td width=5>&nbsp;</td><td width=1%><INPUT TYPE=button VALUE=\"詳細表\示\" ";
				print "onClick=\"parent.location.href = \'$script?type=1&disppage=$FORM{'disppage'}&oldlogno=$FORM{'oldlogno'}\'\" $css_style></td></form>\n";
			}	else	{
				print "<form>\n";
				print "<td width=5>&nbsp;</td><td width=1%><INPUT TYPE=button VALUE=\"簡易表\示\" ";
				print "onClick=\"parent.location.href = \'$script?type=0&disppage=$FORM{'disppage'}&oldlogno=$FORM{'oldlogno'}\'\" $css_style></td></form>\n";
			}
		}
	}
	if ( $FORM{'action'} ne 'find' )	{
		print "<form><td width=5 nowrap>&nbsp;</td>";
		print "<td width=1%>\n";
		print "<INPUT TYPE=button VALUE=\"記事検索\" ";
		print "onClick=\"parent.location.href = \'$script?action=find&type=$FORM{'type'}\'\" $css_style></td></form>\n";
	}
	if (  $FORM{'action'} eq 'view' || $FORM{'action'} eq 'res' || $FORM{'action'} eq 'find' || $FORM{'action'} eq 'info')	{
		print "<form><td width=5 nowrap>&nbsp;</td>";
		print "<td width=1%>\n";
		print "<INPUT TYPE=button VALUE=\"前画面に戻る\" ";
		if ( $FORM{'action'} eq 'find' )	{
			print "onClick=\"parent.location.href = \'$script?type=$FORM{'type'}\'\" $css_style></td></form>\n";
		}	else	{
			print "onClick=\"parent.location.href = \'$script?type=$FORM{'type'}&disppage=$FORM{'disppage'}&oldlogno=$FORM{'oldlogno'}\'\" $css_style></td></form>\n";
		}
	}	else	{
		if ( $#oldcnt >= 0 ) {
			print "<form action=\"$script\" method=\"$method\">\n";
			print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">\n";
			print "<td width=1% nowrap>\n";
			print "&nbsp;&nbsp;<select name=\"oldlogno\" $css_style>\n";
			print "<option value=0>現行ログ";
			@oldcnt = reverse @oldcnt ;
			$i = @oldcnt ;
			foreach ( @oldcnt ) {
				$i = sprintf("%02d",$i ) ;
				if ( $FORM{'oldlogno'} == $i ) { $dmy = "selected" ; } else { $dmy = "" ;}
				print "<option value=$i $dmy >過去ログ$i";
				$i-- ;
			}
			print "</select>\n";
			print "<input type=hidden name=\"action\" value=\"oldlogfind\">\n";
			print "</td><td><input type=submit value=\"表\示\" $css_style></td></form>\n";
		}
	}
	print "<td width=10 nowrap>&nbsp;</td>";
	print "<td align=\"right\" NOWRAP>";




	print "</tr></table>\n";


	#<<<　↓消さないでネ♪
	print "<div align=right><FONT COLOR='#ffffff'>\n";
	print "YUPPIE STATION message board<br>\n";
	print "Script by<a href=\"http://tackysroom.com\" target=_blank>mkakikomitai Ver0.942 Tacky\'sRoom</a>\n";
	print "</font></div>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   ログファイル読み込み
###<--------------------------------------------------------------
sub	dataread	{
	#<<<ログ読み込み
	if ( $FORM{'oldlogno'} eq '' || $FORM{'oldlogno'} == 0 ) {
		if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	}	else	{
		$wk = $olddir . $FORM{'oldlogno'} . ".txt" ;
		if ( !(open(IN,"$wk")))	{	&error("ログファイル($wk)のオープンに失敗しました");	}
	}

	if ( $FORM{'action'} eq 'find' ) {	#過去ログ
		@new=();
		foreach $buf ( <IN> )	{
			($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
			if ( $FORM{'fname'} ne '') {
				if ( index($name,$FORM{'fname'}) == -1 && index($ttl,$FORM{'fname'}) == -1 && index($comment,$FORM{'fname'}) == -1) {
					next;
				}
			}
			$found = 0;
			foreach $buf2 ( @new )	{
				if ( $resno eq '' )	{
					if ( $resno == $buf2 )	{	$found = 1; last ; }
				}	else	{
					if ( $no == $buf2 )	{	$found = 1; last ; }
				}
			}
			if ( $found == 0 )	{
				if ( $resno eq '' )	{
					push(@new,$no);
				}	else	{
					push(@new,$resno);
				}
			}
		}
		close(IN);

		if ( $FORM{'oldlogno'} == 0) {
			if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
			foreach $buf ( <IN> )	{
				($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
				$found = 0;
				foreach $buf2 ( @new )	{
					if ( $resno ne '' )	{
						if ( $resno == $buf2 )	{	$found = 1; last ; }
					}	else	{
						if ( $no == $buf2 )	{	$found = 1; last ; }
					}
				}
				if ( $found == 1 )	{	push(@LOG,$buf) ;	}
			}
			close(IN);
		}	else	{
			if ( !(opendir(DIR,"$olddir")))	{	&error("過去ログ保存用フォルダ($olddir)が見つからないか又は開けません");	}
			@oldcnt	= grep(/\.txt/,readdir(DIR));
			closedir(DIR) ;
			@oldcnt = reverse @oldcnt ;
			foreach $buf3 ( @oldcnt )	{
				$wk = $olddir . $buf3 ;
				if ( !(open(IN,"$wk")))	{	&error("ログファイル($wk)のオープンに失敗しました");	}
				foreach $buf ( <IN> )	{
					($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
					$found = 0;
					foreach $buf2 ( @new )	{
						if ( $resno ne '' )	{
							if ( $resno == $buf2 )	{	$found = 1; last ; }
						}	else	{
							if ( $no == $buf2 )	{	$found = 1; last ; }
						}
					}
					if ( $found == 1 )	{	push(@LOG,$buf) ;	}
				}
				close(IN);
			}
		}
	}	else	{
		@LOG = <IN>;
	}

	@RESLOG = () ; @MAINLOG = () ;
	@rescnttbl=();@RESNAME=();
	$MAXNO = '';
	@SVLOG = () ;
	foreach ( @LOG )	{
		($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$_);
		if ( $resno eq '' )	{
			push(@MAINLOG,$_) ;
		}	else	{
			push(@RESLOG,$_) ;
		}
		push(@SVLOG,"$_");
		if ( $no >= $MAXNO ) {			#最新の投稿Noを退避
			$MAXNO = $no ;
		}
		if ( $resno ne '' ) {
			if ( $RESNAME[$resno] eq '' ) { $RESNAME[$resno] = $name ; }
			if ( $RESDATE[$resno] < $regdate ) { $RESDATE[$resno] = $regdate ; }
			$rescnttbl[$resno]++ ; 	#返信数をカウント
		}	else	{
			if ( $RESDATE[$no] < $regdate ) { $RESDATE[$no] = $regdate ; }
		}
	}
	if ( $FORM{'action'} ne 'oldlogfind' || $FORM{'oldlogno'} == 0 ) {
		@RESLOG = reverse @RESLOG ; #レスログは古い順に。
	}																

	#<<<カウンターファイル読み込み（初回表示時のみ）
	if ( $cntfile && $FORM{'action'} ne 'download' && $FORM{'action'} ne 'info' && $FORM{'action'} ne 'find')	{
		if ( !(open(IN,"$cntfile")))	{	&error("カウンターファイル($cntfile)のオープンに失敗しました");	}
		($COUNT,$h) = split(/,/,<IN>);
		$h =~ s/\n//;
		close(IN);
		if ( $host ne $h)	{
			$COUNT++ ;
			if ( !(open(OUT,">$cntfile")))	{	&error("カウンターファイル($cntfile)のオープンに失敗しました");	}
			print OUT "$COUNT,$host";
			close(OUT);
		}
	}

}
###<--------------------------------------------------------------
###<---   検索画面表示
###<--------------------------------------------------------------
sub	find	{
	&dataread if ( $FORM{'fname'} ) ;									#<<<ログ読み込み
	&header ;															#<<<htmlヘッダー出力
	&header2 ;															#<<<htmlヘッダー出力
	print "<br><br><br><div align=center><table cellpadding=1><tr>\n";
	print "<form action=\"$script\" method=\"$method\">\n";
	print "<input type=hidden name=\"action\" value=\"find\">\n";
	print "<td>\n";
	print "検索文字：<input type=text name=\"fname\" size=30 value=\"$FORM{'fname'}\" $css_style>\n";
	print "</td>\n";
	if ( $#oldcnt >= 0 ) {
		print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">\n";
		print "<td align=left nowrap>\n";
		print "&nbsp;検索対象ログ：<select name=\"oldlogno\" $css_style>\n";
		print "<option value=0>現行ログ";
		@oldcnt = reverse @oldcnt ;
		$i = @oldcnt ;
		foreach ( @oldcnt ) {
			$i = sprintf("%02d",$i ) ;
			if ( $FORM{'oldlogno'} == $i ) { $dmy = "selected" ; } else { $dmy = "" ;}
			print "<option value=$i $dmy >過去ログ$i";
			$i-- ;
		}
		print "</select>\n";
		print "</td>\n";
	}
	print "</tr><tr>\n";
	if ( $#oldcnt >= 0 ) {
		print "<td colspan=2 align=center>\n";
	}	else	{
		print "<td>\n";
	}
	print "<br><INPUT type=submit value=\"検索します\" $css_style>\n";
	print "</td>\n";
	print "</form>";
	print "</tr></table></div>\n";
	&view if ( $FORM{'fname'} ) ;

	exit;
}
###<--------------------------------------------------------------
###<---   ログ表示
###<--------------------------------------------------------------
sub	view	{
	print "<P ALIGN=RIGHT><TABLE WIDTH='460' BORDER='0' CELLSPACING='0'
CELLPADDING='0' CELLPADDING='0' style='FILTER: Alpha(opacity=70); BACKGROUND-COLOR: #ffffff'>
  <TR>
    <TD WIDTH='100%'>
    <TABLE WIDTH='460' BORDER='0' CELLSPACING='2' CELLPADDING='0'>
      <TR>
        <TD WIDTH='100%'>
        <FONT SIZE='+1'>Yupisute Board</font><FONT SIZE='-1'>　〜掲示板〜<BR>
<BR>
        この掲示板は閲覧専用です。以下の機能\は不正投稿および転用防止のためここからはご利用頂けません。ご利用頂くためには「Yupisute
        Club(無料)」の登録が必要です。ご協力よろしくお願いします。<BR>
<BR>
        　・書き込みおよびレス機能\<BR>
        　・メンテナンスモード<BR>
        　・書き込まれたメールアドレスの表\示</FONT></TD> 
      </TR>
    </TABLE></TD>
  </TR>
</TABLE><br>\n";
	print "<P ALIGN=RIGHT>\n";

	#表示対象ページの先頭データ件数を算出
	$dm = @MAINLOG;
	if ( $dm % $pagemax == 0) {
		$p = $dm / $pagemax ;
	}	else	{
		$p = $dm / $pagemax + 1;
	}
	$p = sprintf("%3d",$p);
	if ( $FORM{'page'} eq "NEXT" )	{
		if ( $FORM{'disppage'} == 0 ) { $FORM{'disppage'} = 1 }	;
		$d = ($FORM{'disppage'} + 1) * $pagemax - $pagemax ;
		$FORM{'disppage'} = $FORM{'disppage'} + 1 ;
	}	elsif	( $FORM{'page'} eq "BACK" ) 	{
		$d = ($FORM{'disppage'} - 1) * $pagemax - $pagemax ;
		$FORM{'disppage'} = $FORM{'disppage'} - 1 ;
	}	elsif	( $FORM{'disppage'} ne "" ) 	{
		$d = $FORM{'disppage'} * $pagemax - $pagemax ;
	}	else	{
		$d = 0	;
		$FORM{'disppage'} = 1 ;
	}
	if ( $msg_color ) { $tbbg = "bgcolor=\"$msg_color\"" ; } else { $tbbg = "" ; }
	$z = 1 ;

	if ( $FORM{'action'} eq 'download' ) { #i001112
		$d = 0 ; $pagemax = $dm ;	$maru = 0 ; $maillinklogo=""; $homelinklogo="";	$icon_use = "no";
		print "<br><font size=+2>$title</font>\n";
	}

	if ( $FORM{'action'} eq 'find' )	{
		print "<br><b><font size=+1>" . @MAINLOG . "件見つかりました</font></b><br><br>" ;
		$pagemax = 9999 ;
	}

	if ( ($kaniflg == 1 && $FORM{'type'} != 1) && $FORM{'action'} ne 'view' && $FORM{'action'} ne 'download')	{
		print "<br><table border=0 cellspacing=0 cellpadding=1 width=\"$list_width\">\n";
		print "<tr><td bgcolor=$list_bdcolor>\n";
		print "<table border=0 cellspacing=1 cellpadding=3 width=\"100%\">\n";
		print "<tr>\n";
		print "<td bgcolor=\"$list_bgcolor1\" nowrap align=right><font color=\"$list_txcolor1\">No.</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" nowrap width=50%><font color=\"$list_txcolor1\">▼クリックで記事表\示</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" width=23%><font color=\"$list_txcolor1\">お名前</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" width=5% nowrap align=right><font color=\"$list_txcolor1\">返信</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" width=10% nowrap align=right><font color=\"$list_txcolor1\">最終更新日時</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" width=10% nowrap><font color=\"$list_txcolor1\">最終返信者</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor1\" width=2%><font color=\"$list_txcolor1\">新着</font></td>\n";
		print "</tr>\n";
		$wk = $FORM{'word'} ;
		$wk =~ s/(\W)/sprintf("%%%02X", ord($1))/ego;
		$wk =~ tr/ /+/;
		$z = 1 ;
		for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ )	{
			($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$host,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$MAINLOG[$i]);
			if ( !$ttl )	{	$ttl = "（無題）"; }
			print "<tr>\n";
			print "<td bgcolor=\"$list_bgcolor2\" nowrap align=right><font color=\"$list_txcolor2\">$no</font></td>\n";
			print "<td bgcolor=\"$list_bgcolor2\" width=50%><font color=\"$list_txcolor2\">\n";
			print "<a href=\"$script?type=$FORM{'type'}&action=view&disppage=$FORM{'disppage'}&no=$no&oldlogno=$FORM{'oldlogno'}\">$ttl</a></font></td>\n";
			print "<td bgcolor=\"$list_bgcolor2\" width=23%><font color=\"$list_txcolor2\">$name</font></td>\n";
			print "<td bgcolor=\"$list_bgcolor2\" width=5% nowrap align=right><font color=\"$list_txcolor2\">\n";
			if ( $rescnttbl[$no] > 0 ) { print "$rescnttbl[$no]回" ; } else { print "&nbsp;"; }
			print "</font></td>\n";
			print "<td bgcolor=\"$list_bgcolor2\" width=10% nowrap align=right><font color=\"$list_txcolor2\">" . timeconv($RESDATE[$no]) . "</font></td>\n";
			print "<td bgcolor=\"$list_bgcolor2\" width=10%><font color=\"$list_txcolor2\">$RESNAME[$no]</td>";
			print "<td bgcolor=\"$list_bgcolor2\" width=2%><font color=\"$list_txcolor2\">\n";
			if ( $RESDATE[$no]  ge  $newday )	{
				print "<img src=\"$newgif\" border=0>";
			}	else	{	print "&nbsp;";	}
			print "</td></tr>\n";
			$z++ ;
		}
		print "</table>\n"  ;
		print "</td></tr></table>\n"  ;
		print "</form>\n";
	}	else	{
		for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ )	{
			($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$host,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$MAINLOG[$i]);
			if	( (($FORM{'action'} ne 'res' && ($kaniflg == 0 || $FORM{'type'} == 1 || ($FORM{'action'} eq 'view' && $FORM{'type'} == 0 && $FORM{'no'} eq $no))) || ($FORM{'action'} eq 'res' && $FORM{'no'} eq $no)) || $FORM{'action'} eq 'download' )	{
				if	( $FORM{'action'} ne 'res' && $FORM{'kflg'} eq '' )	{
					print "<form action=$script method=$method>";
					print "<input type=hidden name=\"action\" value=\"res\">";
					print "<input type=hidden name=\"no\" value=\"$no\">";
					print "<input type=hidden name=\"disppage\" value=\"$FORM{'disppage'}\">\n";
					print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">";
				}
				$svno = $no;
				$comment =~ s/<br>/<br><hr size=1 noshade>/g if ( $nya == 1 ) ;
				$comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\"  TARGET='_blank'>こちら<\/a>/g if ( $autolink == 1 ) ;
				if ( $colf_use != 1 )	{
					$color_f = $COLORS_F[$color_f] ;	#文字色
				}	else	{
					$color_f = $colf ;					#文字色
				}
				if ( $colb_use != 1 )	{
					$color = $COLORS_B[$color] ;		#背景色
				}	else	{
					$color = $colb ;					#背景色
				}
				print "<table border=0 cellspacing=0 cellpadding=0 width=\"$t_width\" style='FILTER: Alpha(opacity=70)'>\n";
				if ( $maru == 1 ) {	#四角枠を丸める場合
					print "<tr>\n";
					print "<td bgcolor=\"$color\">$top_l</td>\n";
					print "<td bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
					print "<td bgcolor=\"$color\" align=\"right\" valign=\"top\">$top_r</td>\n";
					print "</tr>\n";
				}	else	{
					print "<tr>\n";
					print "<td bgcolor=\"$color\" colspan=3><img src=\"$gif_spacer\" width=1 height=8></td>\n";
					print "</tr>\n";
				}
				print "<tr>\n";
				print "<td width=8 bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
				print "<td bgcolor=\"$color\">\n";
					if ( $titleset == 1 ) {
						if ( !($ttl) )	{	$ttl = "(無題)";	}
						print "<font color=\"$name_color\">■--$ttl</font><br>\n";
					}
					print "<font color=\"$name_color\">++ $name&nbsp;&nbsp;&nbsp;";
					if ( $logfile2 ne '' )	{
						$ranking = &rankget($ksu) ;
						print "&nbsp;&nbsp;<font color=\"$name_color\" size=-1>($ranking)";
						if ( $kaisu_disp == 1 ) { print "…$ksu回"; }
						print "</font>&nbsp;&nbsp;&nbsp;\n";
					}	else	{
						print "</font>&nbsp;&nbsp;&nbsp;\n";
					}
					print "<font color=\"$name_color\" size=-1>";
					if ( $email ne '' )	{

					}
					if ( $hp ne '' )	{
						print "<a href=\"http://$hp\" target=_blank>";
						if ( $homelinklogo )	{	print "$homelinklogo";
						}	else	{	print "[URL]";	}
						print "</a>\n";
					}
					if	( $FORM{'action'} ne 'view' )	{
						if	( $FORM{'action'} ne 'res' && $FORM{'oldlogno'} == 0  && $FORM{'kflg'} eq '' && $FORM{'action'} ne 'download' )	{
							if ( $res_gif )	{

							}
						}
					}
					print "</font>\n";
				print "</td>\n";
				print "<td width=8 bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
				print "</tr><tr>\n";
				print "<td width=8 bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
				print "<td bgcolor=\"$color\">\n";
					print "<hr size=1 noshade color=#ffffff>";
					print "<div align=center><table border=0 cellspacing=0 cellpadding=5 width=100%>\n";
					print "<tr><td $tbbg valign=middle>\n";
					#アイコン表示
					if ( $icon_use eq 'yes' )	{	&icon_set($name) ;
					}	else	{	print "&nbsp;";	}
					print "</td><td $tbbg width=\"95%\">\n";
					print "<font color=\"$color_f\">$comment</font></div>\n";
					$no = sprintf("%d",$no);
					print "<div align=right><font color=\"$color_f\" size=-1>";
					if ( $hostflag eq 'yes')	{		print "($host)";	}
					print ".." . timeconv($regdate) . "\[$no\]</font></td></tr></table></div><hr size=1 noshade color=#ffffff>";
					#レス表示
					$j = 0 ;
					foreach $buf ( @RESLOG )	{
						($no2,$name,$email,$hp,$ttl,$comment,$regdate,$col_f,$col_b,$resno,$host,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);	#u001103
						if ( $no eq $resno )	{
							if ( $colf_use != 1 )	{	#文字色　（背景色は元メッセージと同様）
								$col_f = $COLORS_F[$col_f] ;	#文字色
							}	else	{
								$col_f = $colf ;					#文字色
							}
							print "<div align=right><table border=0 cellspacing=0 cellpadding=0 width=85%>\n";
							print "<tr><td bgcolor=\"$color\">\n";
								print "<table cellpadding=3 cellspacing=0 border=0 width=100%>\n";
								print "<tr><td bgcolor=\"$color\" colspan=2>\n";
								print "<font color=\"$name_color\">++ $name</font>\n";
								if ( $logfile2 ne '' )	{
									$ranking = &rankget($ksu) ;
									print "&nbsp;&nbsp;<font color=\"$name_color\" size=-1>($ranking)";
									if ( $kaisu_disp == 1 ) { print "…$ksu回"; }
									print "</font>&nbsp;&nbsp;&nbsp;\n";
								}	else	{
									print "</font>&nbsp;&nbsp;&nbsp;\n";
								}
								print "<font color=\"$name_color\" size=-1>";
								if ( $email ne '' )	{
									print "<a href=\"mailto:$email\">";
									if ( $maillinklogo )	{	print "$maillinklogo";
									}	else	{	print "[MAIL]";		}
									print "</a>\n";
								}
								if ( $hp ne '' )	{
									print "<a href=\"http://$hp\" target=_blank>";
									if ( $homelinklogo )	{	print "$homelinklogo";
									}	else	{	print "[URL]";		}
									print "</a>\n";
								}
								print "</td></tr>\n";
								print "<tr><td $tbbg valign=middle>\n";
								#アイコン表示
								if ( $icon_use eq 'yes' )	{
									&icon_set($name) ;
								}	else	{
									print "&nbsp;";
								}
								print "</td><td $tbbg width=\"95%\">\n";
								$comment =~ s/<br>/<br><hr size=1 noshade>/g if ( $nya == 1 ) ;
								$comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\" TARGET='_blank'>こちら<\/a>/g if ( $autolink == 1 ) ;
								print "<font color=\"$col_f\">$comment</font><br>\n";
								$no2 = sprintf("%d",$no2);
								print "<div align=right><font color=\"$col_f\" size=-1>";
								if ( $hostflag eq 'yes')	{
									print "($host)";
								}
								print ".." . timeconv($regdate) . "\[$no2\]</font></div>\n";
								print "</td></tr></table>\n";
							print "</td></tr></table></div>\n";
							$j++;
						}
					}
				print "</td>\n";
				print "<td width=8 bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
				print "</tr>\n";
				if ( $maru == 1 ) {	#四角枠を丸める場合
					print "<tr>\n";
					print "<td bgcolor=\"$color\">$bottom_l</td>\n";
					print "<td bgcolor=\"$color\"><img src=\"$gif_spacer\" width=1 height=1></td>\n";
					print "<td bgcolor=\"$color\" align=\"right\" valign=\"bottom\">$bottom_r</td>\n";
					print "</tr>\n";
				}	else	{
					print "<tr>\n";
					print "<td bgcolor=\"$color\" colspan=3><img src=\"$gif_spacer\" width=1 height=8></td>\n";
					print "</tr>\n";
				}
				print "</table>";	#u001103
			    if ( $FORM{'kflg'} == 1 && $FORM{'action'} ne 'download' ) {	#i001112
					print "<input type=hidden name=\"resno$z\" value=$no>\n";
					print "▲への返信メッセージです。▼<br><textarea name=\"rescomment$z\" cols=\"$col\" rows=\"$row\" $dmy $css_style>$c_comment</textarea><br><br>\n";
				}						
				print "<br>\n" if ( $FORM{'action'} eq 'find' ) ;
				print "</form>\n" if ( $FORM{'kflg'} eq '' ) ;
			}
			$z++;
		}
		print "</form>\n" if ( $FORM{'kflg'} == 1 ) ;	#i001112
	}
	if ( $FORM{'action'} eq 'download' ) { return; }	#i001112
	if	( $FORM{'action'} ne 'view' && $FORM{'action'} ne 'res' && $FORM{'action'} ne 'download')	{
		$dm = @MAINLOG;
		if ( $dm % $pagemax == 0) {
			$p = $dm / $pagemax ;
		}	else	{
			$p = $dm / $pagemax + 1;
		}
		$p = sprintf("%3d",$p);
		print "<table><tr><form action=$script method=$method>\n";
		print "<td><input type=hidden name=\"disppage\" value=\"$FORM{'disppage'}\">\n";
		print "<input type=hidden name=\"action\" value=\"$FORM{'action'}\">\n";
		print "<input type=hidden name=\"oldlogno\" value=\"$FORM{'oldlogno'}\">\n";
		print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">\n";
		print "<input type=hidden name=\"kflg\" value=\"$FORM{'kflg'}\">\n";		
		if ( $FORM{'disppage'} != 0 && $FORM{'disppage'} !=1)	{
			print "<input type=submit name=\"page\" value=BACK $css_style>\n";
		}
		if ( $FORM{'disppage'} + 1 <= $p )	{
			print "<input type=submit name=\"page\" value=NEXT $css_style>\n";
		}
		print "</td></form>\n";
		if ( $p > 1 )	{
			print "<form action=$script method=POST>\n";
			print "<input type=hidden name=\"action\" value=\"$FORM{'action'}\">\n";
			print "<input type=hidden name=\"oldlogno\" value=\"$FORM{'oldlogno'}\">\n";
			print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">\n";
			print "<input type=hidden name=\"kflg\" value=\"$FORM{'kflg'}\">\n";		
			print "<td align=center nowrap>&nbsp;&nbsp;";
			print "<select name=disppage $css_style>\n";
			for ( $i = 1 ; $i <= $p ; $i++ )	{
				if ( $FORM{'disppage'} == $i ) { $dmy = "selected"; } else { $dmy = ""; }
				print "<option value=$i $dmy >$iページ\n";
			}
			print "</select>&nbsp;<input type=submit value=\"移動\" $css_style></td></form>\n";
		}
		print "</tr></table>\n";
	}	elsif	( $FORM{'action'} eq 'view' )	{
		if ( $FORM{'action'} ne 'oldlogfind' || $FORM{'oldlogno'} == 0 ) {		#<<<入力フォーム表示
			$FORM{'action'} = 'res';$FORM{'no'} = $svno;$sw=1;
			&forminput ;
		}
		print "<form>\n";
		print "<br><br><br><INPUT TYPE=button VALUE=\"前画面に戻る\"  $css_style ";
		print "onClick=\"parent.location.href = \'$script?type=$FORM{'type'}&disppage=$FORM{'disppage'}&oldlogno=$FORM{'oldlogno'}\'\" $css_style></form>\n";
	}

	if ( $FORM{'action'} ne 'res' || $sw == 1 )	{
		if ( $dwnflg == 1 )	{
			print "<P ALIGN=RIGHT><HR ALIGN=RIGHT WIDTH=460 SIZE=4>\n";
			print "<form action=\"$script\" method=\"$method\">\n";
			print "<input type=hidden name=\"action\" value=\"download\">\n";
			print "<input type=hidden name=\"oldlogno\" value=\"$FORM{'oldlogno'}\">\n";
			print "<input type=hidden name=\"type\" value=\"$FORM{'type'}\">\n";
			print "<input type=submit value=\"ログをダウンロード\" $css_style>\n";
			print "<br>拡張子はhtmに変更して下さい。";
			print "</form>\n";
		}
		if ( $FORM{'oldlogno'} == 0 || $FORM{'oldlogno'} eq '')	{
			print "<P ALIGN=RIGHT><HR ALIGN=RIGHT WIDTH=460 SIZE=4>\n";

		}
	}
}
###<--------------------------------------------------------------
###<---   ログ出力
###<--------------------------------------------------------------
sub	regist	{
	&comchk ;
	
	for ( $i = $pagemax ; $i >= 1 ; $i-- )	{
		$wk = "resno" . $i ;
		$rno = $FORM{$wk} ;
		$wk = "rescomment" . $i ;
		$rcom = $FORM{$wk} ;
		if ( $rno ne '' && $rcom ne '' )	{
			if ( $maxword ne '' && (length($rcom) > $maxword))	{	&error("メッセージは$maxword文字までしか登録出来ません。");	}
		}
	}

	&filelock ;	#ファイルロック

	&dataread ;															#<<<ログ読み込み

	if ( $FORM{'kflg'} eq '' ) {
	($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$SVLOG[0]);
	if ( $name eq $FORM{'name'} && $ttl eq $FORM{'title'} && $comment eq $FORM{'comment'} )	{
		&fileunlock ;	&error("二重投稿は禁止しています。") ;
	}
	if ( $logfile2 ne '' && ( $FORM{'action'} ne 'oldlogfind' || $FORM{'oldlogno'} == 0 ))	{
		if ( !(open(IN2,"$logfile2")))	{	&fileunlock ;	&error("ログファイル２($logfile2)のオープンに失敗しました");	}
		$flg = 0 ;
		while ( <IN2> )	{
 			($n,$k) = split(/,/,$_);
			$k =~ s/\n//;
			if ( $FORM{'name'} eq $n )	{
				if ( $rdm != 0 )	{
					#■ランダムに投稿回数を減少させる
					srand(time ^ ($$ + ($$ << 15)));
					$w	= int(rand(30)) ;
					$p = 0 ;
					#■乱数が$rdmで割り切れる場合のみ投稿回数を減少させる
					if ( $w % $rdm == 0 )  {
						$k	= $k - $DOWN[int(rand($#DOWN))] ;
						if ( $k < 0 ) { $k = 0 ; }
					}	else	{
						$k++;
					}
				}	else	{
					$k++ ;
				}
				$dcnt = $k ;
				$flg = 9;
			}
			push(@sv,"$n,$k\n");
		}
		if ( $flg == 0 ) 	{
			push(@sv,"$FORM{'name'},1\n");
			$dcnt = 1;
		}
		close(IN2);
		if ( !(open(OUT2,">$logfile2")))	{	&fileunlock ;	&error("ログファイル($logfile2)のオープンに失敗しました");	}
		print OUT2 @sv;
		close(OUT2);
	}

	$dcnt2 = @SVLOG;
	if ( $dcnt2 < 1 )	{
		$no = 1;										#１件目
	}	else	{
		$no = $MAXNO + 1;
	}

	#レス記事登録時で、ログを先頭に移動する場合の処理
	$write_cnt = 1 ;
	if ( $resflag eq 'yes' && $FORM{'resno'} ne '')	{
		$cnt = 0 ;	$oyacnt = 1 ;
		foreach $buf ( @SVLOG )	{
			($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
			if ( $renchan2 != 0 && $hst ne $host )	{	last ; }
			&renchk;
			if ( $oyano eq $FORM{'resno'} )	{
				$sv_title = $ttl ;
				splice(@SVLOG,$cnt,1);
				$wk = "$oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon";
				unshift(@SVLOG,$wk);
				last ;
			}
			$cnt++ ;
		}
	}	else	{
		foreach $buf ( @SVLOG )	{
			($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
			if ( $renchan2 != 0 && $hst ne $host )	{	last ; }
			&renchk ;
			if ( $oyano eq $FORM{'resno'} )	{
				$sv_title = $ttl ;
				last ;
			}
		}
	}

	if ( $olddir ) {	#過去ログ作成処理
		if ( !($FORM{'resno'}) && $#MAINLOG + 1 >= $datamax ) {
			($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$MAINLOG[$#MAINLOG]);
			@OLD = () ;
			if ( $#oldcnt >= 0 ) {
				if ( !(open(IN,"$oldfile")))	{	&fileunlock ;	&error("ログファイル($oldfile)のオープンに失敗しました");	}
				@OLD = <IN>;
				close(IN);
				if ( $#OLD + 1 >= $oldmax ) {
					$i = sprintf("%02d",$#oldcnt + 2) ;
					$oldfile = "$olddir$i" . ".txt" ;
					@OLD = () ;
				}
			}	else	{
					$oldfile = "$olddir" . "01.txt" ;
			}
			$cnt = 0 ;
			@SVLOG2 = @SVLOG ; @SVLOG = () ;
			foreach $buf ( @SVLOG2 ) {
				($oyano2,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno2,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
				if ( $oyano == $oyano2 || $oyano == $resno2) {
					unshift(@OLD,$buf) ;
				}	else	{
					push(@SVLOG,$buf);
				}
				$cnt++ ;
			}
			if ( !(open(OUT,">$oldfile")))	{	&fileunlock ;	&error("過去ログファイル($oldfile)のオープンに失敗しました");	}
			print OUT @OLD;
			close(OUT);
			# パーミッション変更
			chmod(0666,"$oldfile");
		}
	}	else	{
		if ( !($FORM{'resno'}) && $#MAINLOG + 1 >= $datamax ) {
			($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$MAINLOG[$#MAINLOG]);
			@SVLOG2 = @SVLOG ; @SVLOG = () ;
			foreach $buf ( @SVLOG2 ) {
				($oyano2,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno2,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
				if ( $oyano == $oyano2 || $oyano == $resno2) {
				}	else	{
					push(@SVLOG,$buf);
				}
			}
		}
	}
	# パスワードの暗号化（crypt関数使用））
	if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }
	else	{ $pass = '' ; }
	unshift(@SVLOG,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'title'},$FORM{'comment'},$today,$FORM{'color_f'},$FORM{'color'},$FORM{'resno'},$host,$dcnt,$pass,$dmy,$dmy,$FORM{'icon'}\n");
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @SVLOG;
	close(OUT);

	}	else	{			#↓i001103
	for ( $i = $pagemax ; $i >= 1 ; $i-- )	{
		$wk = "resno" . $i ;
		$rno = $FORM{$wk} ;
		$wk = "rescomment" . $i ;
		$rcom = $FORM{$wk} ;
		if ( $rno ne '' && $rcom ne '' )	{
			&dataread ;		#<<<ログ読み込み
			($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$SVLOG[0]);
			if ( $name eq $FORM{'name'} && $comment eq $rcom && $resno == $resno )	{
				&fileunlock ;	&error("二重投稿は禁止しています。") ;
			}
			if ( $logfile2 ne '' )	{
				if ( !(open(IN2,"$logfile2")))	{	&fileunlock ;	&error("ログファイル２($logfile2)のオープンに失敗しました");	}
				$flg = 0 ;
				@sv = ();
				while ( <IN2> )	{
		 			($n,$k) = split(/,/,$_);
					$k =~ s/\n//;
					if ( $FORM{'name'} eq $n )	{
						$k++ ;
						$dcnt = $k ;
						$flg = 9;
					}
					push(@sv,"$n,$k\n");
				}
				if ( $flg == 0 ) 	{
					push(@sv,"$FORM{'name'},1\n");
					$dcnt = 1;
				}
				close(IN2);
				if ( !(open(OUT2,">$logfile2")))	{	&fileunlock ;	&error("ログファイル($logfile2)のオープンに失敗しました");	}
				print OUT2 @sv;
				close(OUT2);
			}
			$dcnt2 = @SVLOG;
			if ( $dcnt2 < 1 )	{
				$no = 1;										#１件目
			}	else	{
				($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$SVLOG[0]);
				$no++;
			}
			#レス記事登録時で、ログを先頭に移動する場合の処理
			if ( $resflag eq 'yes')	{
				$cnt = 0 ;	$oyacnt = 1 ;
				foreach $buf ( @SVLOG )	{
					($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
					if ( $oyano eq $rno )	{
						splice(@SVLOG,$cnt,1);
						$wk = "$oyano,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon";
						unshift(@SVLOG,$wk);
						last ;
					}
					$cnt++ ;
				}
			}
			# パスワードの暗号化（crypt関数使用））
			if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }
			else	{ $pass = '' ; }
			unshift(@SVLOG,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},,$rcom,$today,$FORM{'color_f'},,$rno,$host,$dcnt,$pass,$dmy,$dmy,$FORM{'icon'}\n");
			if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
			print OUT @SVLOG;
			close(OUT);
		}
	}

	}						#↑i001103

	&fileunlock ;	#ファイルロック解除
	$wk = $smail_address ;	$wk =~ s/\\//g;
	if ( $sendmail && ($sendsw == 1 || ( $sendsw == 0 && $FORM{'email'} ne $wk ) ) ) { &SMail ;	}

	#COOKIE設定
	&cookieset ;
}
###<--------------------------------------------------------------
###<---   メンテナンスモード
###<--------------------------------------------------------------

###<--------------------------------------------------------------
###<---   ログファイル更新
###<--------------------------------------------------------------
sub update {
	&comchk ;
	&filelock ;	#ファイルロック
	&dataread ;															#<<<ログ読み込み
	$j = 0 ;	@new = () ;
    foreach $buf (@SVLOG) {
		($no,$name,$email,$hp,$ttl,$comment,$regdate,$color_f,$color,$resno,$hst,$ksu,$pass,$dmy,$dmy,$icon) = split(/,/,$buf);
		if ( $FORM{'no'} eq $no || ( $FORM{'proc'} eq 'delete' && $FORM{'no'} eq $resno ) )	{								#<<<メンテ対象者の場合
			if ( $FORM{'pass'} ne $password && (&pass_dec($pass))) {
				&fileunlock ;	#ファイルロック解除
				&error("パスワードが違います。");
			}
			if ( $FORM{'proc'} eq "edit" )	{
				if ( $rno eq '' )	{
					push(@new,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'title'},$FORM{'comment'},$regdate,$FORM{'color_f'},$FORM{'color'},$resno,$host,$ksu,$pass,$dmy,$dmy,$FORM{'icon'}\n");
				}	else	{
					push(@new,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$ttl,$FORM{'comment'},$regdate,$FORM{'color_f'},$FORM{'color'},$resno,$host,$ksu,$pass,$dmy,$dmy,$FORM{'icon'}\n");
				}
			}
		}	else	{
			$found = 0 ;
			if ( $FORM{'proc'} eq 'delete' ) {
				@DELWORD = split(/ /,$FORM{'no'});
				foreach $word ( @DELWORD )	{
					if ( $word && ( $no eq $word || $resno eq $word ) ) {
						if ($FORM{'pass'} ne $password && (&pass_dec($pass))) {
						}	else	{
							$found = 1 ; last ;
						}
					}	#u000726
				}
			}
			if ( $found == 0 ) { push(@new,$buf);	}
		}
	}
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
	$FORM{'action'} = '' ;

}
###<--------------------------------------------------------------
###<---   Information(アイコン一覧)
###<--------------------------------------------------------------

###<--------------------------------------------------------------
###<---   アイコン表示
###<--------------------------------------------------------------

###<-------------------------------------------------------------
###<---   クッキー取得
###<--------------------------------------------------------------
sub cookieget	{
	$cookies = $ENV{'HTTP_COOKIE'};
	@pairs = split(/;/,$cookies);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ s/ //g;
		$DUMMY{$name} = $value;
	}
	@pairs = split(/,/,$DUMMY{'mkakikomitai'});
	foreach $pair (@pairs) {
		($name, $value) = split(/\!/, $pair);
		$COOKIE{$name} = $value;
	}

	if ($FORM{'name'})  { $COOKIE{'nm'}  = $FORM{'name'}; }
	if ($FORM{'email'}) { $COOKIE{'em'} = $FORM{'email'}; }
	if ($FORM{'hp'})   { $COOKIE{'hp'}   = $FORM{'hp'}; }
	if ($FORM{'pass'})   { $COOKIE{'ps'}   = $FORM{'pass'}; }
	if ($FORM{'icon'})  { $COOKIE{'icon'}  = $FORM{'icon'}; }
	if ($FORM{'color'}) { $COOKIE{'cl'} = $FORM{'color'}; }
	if ($FORM{'color_f'}) { $COOKIE{'cl_f'} = $FORM{'color_f'}; }

}
###<-------------------------------------------------------------
###<---   クッキー設定
###<--------------------------------------------------------------
sub cookieset {
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)
		=gmtime(time + 30*24*60*60);
	$yearg  += 1900 ;
	if ($secg  < 10)  { $secg  = "0$secg";  }
	if ($ming  < 10)  { $ming  = "0$ming";  }
	if ($hourg < 10)  { $hourg = "0$hourg"; }
	if ($mdayg < 10)  { $mdayg = "0$mdayg"; }
	$mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
	$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
	$date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT";
	if ($FORM{'color'} eq '') { $FORM{'color'} = $COOKIE{'cl'} ; }
	$cook="nm\!$FORM{'name'},em\!$FORM{'email'},hp\!$FORM{'hp'},cl_f\!$FORM{'color_f'},cl\!$FORM{'color'},ps\!$FORM{'pass'},icon\!$FORM{'icon'}";
	print "Set-Cookie: mkakikomitai=$cook; expires=$date_gmt\n";
}
###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {
	&header ;
	&header2 ;
	print "<div align=center><br><br><br><br><br><b>$_[0]</b><br><br><br>[<a href=\"javascript:history.back()\">BACK</a>]<br><br><br></div>\n";
	&footer;
	exit;
}
###<--------------------------------------------------------------
###<---   ファイルロック設定
###<--------------------------------------------------------------
sub filelock {
	if (-e $lockfile) {
		($ftm) = (stat($lockfile))[9];
		if ($ftm < time - 150) { unlink($lockfile); }
	}
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {
			open(LOCK,">$lockfile");
			close(LOCK);
			return;
		}
	}
	&error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。<br>又は設置時にロックファイル($lockfile)が残ったままかもしれませんので、同ファイルを削除して下さい。");
}
###<--------------------------------------------------------------
###<---   ファイルロック解除
###<--------------------------------------------------------------
sub fileunlock {
	if (-e $lockfile) { unlink($lockfile); }
}
###<-------------------------------------------------------------
###<---   ランキング取得
###<--------------------------------------------------------------
sub rankget	{
	$set = 0 ;
	$tmax = $#rankno ;
	for ( $j = 0 ; $j <= $tmax ; $j++ )	{
		if ( $_[0] >= $rankno[$j] )	{
			$ranking = $rank[$j] ;
			$rank_idx = $j ;
		}
	}
	return ($ranking);
}
###<--------------------------------------------------------------
###<---   Information
###<--------------------------------------------------------------
sub info	{
	&header ;															#<<<htmlヘッダー出力
	&header2 ;															#<<<htmlヘッダー出力
	print "<P ALIGN=RIGHT><font size=4 style='background-color: #ffffff'><b><<< ゆぴすて投稿数ランク >>></b></font><br>\n";
	print "<font style='background-color: #ffffff'>以下の投稿回数でランクアップします(￣+ー￣)</font><br>\n";
	$i =  0;
	print "<table cellpadding=1 cellspacing=0 border=0 bgcolor=\"#000000\"><tr><td>\n";
	print "<table cellpadding=3 cellspacing=1 border=0>\n";
	$k = $#rank ;
	for ( @rank )	{
		print "<tr><td align=left width=100 nowrap bgcolor=\"$list_bgcolor1\"><font color=\"$list_txcolor1\">$rank[$i]</font></td>\n";
		print "<td align=right width=150 nowrap bgcolor=\"$list_bgcolor2\"><font color=\"$list_txcolor2\">";
		$j = $rankno[$i+1] - 1 ;
		if ( $i != $k )	{
			print "$rankno[$i]&nbsp;〜$j&nbsp;回\n";
		}	else	{
			print "$rankno[$i]&nbsp;以上\n";
		}
		print "</font></td></tr>\n";
		$i++;
	}
	print "</table></td></tr></table>";

	if ( !(open(IN,"$logfile2")))	{	&error("ログファイル($logfile2)のオープンに失敗しました");	}
	while ( <IN> ) 	{
		($n,$k) = split(/,/,$_);
		$k =~ s/\n//g;
		push(@RANKDATA,"$k,$n") ;
	}
	close(IN);
	@RANKDATA = sort { $a <=> $b } @RANKDATA ;
	@RANKDATA = reverse @RANKDATA ;

	print "<br>\n";
	print "<font size=4 style='background-color: #ffffff'><b><<< ゆぴすたーの投稿ランキング >>></b></font><br>\n";
	print "<table cellpadding=1 cellspacing=0 border=0 bgcolor=#000000><tr><td>\n";
	print "<table cellpadding=5 cellspacing=1 border=0>\n";
	print "<tr><td bgcolor=\"$list_bgcolor1\"><font color=\"$list_txcolor1\">お名前</font></td>\n";
	print "<td bgcolor=\"$list_bgcolor1\"><font color=\"$list_txcolor1\">投稿回数</font></td>\n";
	print "<td bgcolor=\"$list_bgcolor1\"><font color=\"$list_txcolor1\">昇進状態</font></td></tr>\n";
	foreach ( @RANKDATA )	{
		($k,$n) = split(/,/,$_);
		for ( $j = 0 ; $j <= $#rankno ; $j++ )	{
			if ( $k >= $rankno[$j] )	{
				$ranking = $rank[$j] ;
				$rank_idx = $j ;
			}
		}
		print "<tr><td bgcolor=\"$list_bgcolor2\"><font color=\"$list_txcolor2\">$n</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor2\" align=right><font color=\"$list_txcolor2\">$k回</font></td>\n";
		print "<td bgcolor=\"$list_bgcolor2\"><font color=\"$list_txcolor2\">$ranking</font></td></tr>\n";
	}
	print "</table></td></tr></table><br><font style='background-color: #ffffff'>名前が分かれちゃってる場合は連絡してください<(_ _)></font><br><br><br><br><br><br>\n";
	&footer ;
	exit;
}

###<-------------------------------------------------------------
###<---   SendMail
###<--------------------------------------------------------------
sub SMail {
	$name = $FORM{'name'};
	$email = $FORM{'email'};
	$ttl = $FORM{'title'};
	$ttl2 = $title;
	$comment = $FORM{'comment'};
	$comment =~ s/<br>/\n/g;

	if ($FORM{'resno'} ne "") { $ttl = "「$sv_title」についての返信です"; }
	elsif ($FORM{'resno'} eq "" && $ttl eq "") { $ttl = "無題"; }
   	&jcode'convert(*ttl,'jis');
   	&jcode'convert(*name,'jis');
   	&jcode'convert(*today,'jis');
   	&jcode'convert(*comment,'jis');
	$comment =~ s/&lt;/</g;
	$comment =~ s/&gt;/>/g;

	if ( !($email) ) { $email = $smail_address ; }

	if ( $hiho == 1 )	{
	   	&jcode'convert(*ttl2,'euc');
		open(MAIL,"| $sendmail -s \"$ttl2\" -f \"$email\" $smail_address") || &error("Sendmail Error!!");
	}	else	{
	   	&jcode'convert(*ttl2,'jis');
		open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!");
		print MAIL "X-Mailer: $ttl2\n";
		print MAIL "To: $smail_address\n";
		print MAIL "From: $email\n";
		print MAIL "Subject: $ttl2\n";
		print MAIL "Content-Transfer-Encoding: 7bit\n";
		print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
		print MAIL "\n\n";
	}

	print MAIL "<<< $ttl2 >>>\n\n";
	print MAIL "----------------------------------------------------------------\n";
	print MAIL "DATE : $today\n";
	print MAIL "NAME : $name\n";
	print MAIL "EMAIL: $email\n";
	if ($FORM{'hp'} ne "") { print MAIL "URL  : http://$FORM{'hp'}\n"; }
	print MAIL "TITLE: $ttl\n\n";
	print MAIL "$comment\n\n";
	print MAIL "----------------------------------------------------------------\n";
	close(MAIL);
}
###<-------------------------------------------------------------
###<---   パスワード暗号化
###<--------------------------------------------------------------
sub pass_enc {
	if ( $ango == 1 ) {	$pass = crypt($_[0], $_[0]);	}
	else	{	$pass = $_[0];	}
}
###<-------------------------------------------------------------
###<---   パスワードチェック
###<--------------------------------------------------------------
sub pass_dec {
	if ( $ango == 1 ) {
		if ($_[0] ne '' && ( crypt($FORM{'pass'}, $_[0]) eq $_[0]) )  {	return 0 ;	}
	}	else	{	if ($FORM{'pass'} eq $_[0]) {	return 0 ;	}	}
	return 1;
}
###<-------------------------------------------------------------
###<---   ログファイルチェック
###<--------------------------------------------------------------
sub logchk {
	# ホスト名を取得
	$host  = $ENV{'REMOTE_HOST'};
	$addr  = $ENV{'REMOTE_ADDR'};
	if ($host eq "" || $host eq "$addr") {
		($p1,$p2,$p3,$p4) = split(/\./,$addr);
		$temp = pack("C4",$p1,$p2,$p3,$p4);
		$host = gethostbyaddr("$temp", 2);
		if ($host eq "") { $host = $addr; }
	}
	if ( $olddir ) {	#過去ログ設定する場合、該当ディレクトリの存在チェック
		if ( !(opendir(DIR,"$olddir")))	{	&error("過去ログ保存用フォルダ($olddir)が見つからないか又は開けません");	}
		@oldcnt	= grep(/\.txt/,readdir(DIR));
		$i = sprintf("%02d",$#oldcnt + 1) ;
		$oldfile = "$olddir$i" . ".txt" ;
		closedir(DIR) ;
	}
}
###<-------------------------------------------------------------
###<---   ログダウンロードi001112
###<--------------------------------------------------------------
sub download {
    print "Content-type: text/download\n\n";
    print "<html><head><title>$title</title></head>";
	$wk = "bgcolor=\"$bgcolor\"";
	print "<body $wk text=$tcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
	&view ;
	print "<br><br><br>\n";
	&footer ;
    exit;
}
###<-------------------------------------------------------------
###<---   連続投稿チェック
###<--------------------------------------------------------------
sub renchk {
	if ( $renchan1 != 0 || $renchan2 != 0 )	{
		if ( $renchan2 != 0 && $hst eq $host )	{
			$write_cnt++ ;
			if ( $write_cnt >= $renchan2 )	{	&fileunlock ;	&error("$renchan2回以上の連続投稿は禁止しています");	}
		}
		if ( $renchan1 != 0 && $regdate ge $renday )	{
			if ( $hst eq $host )	{	&fileunlock ;	&error("$renchan1分以内の連続投稿は禁止しています");	}
		}
	}
}
###<-------------------------------------------------------------
###<---   共通チェック
###<--------------------------------------------------------------
sub comchk {
	#掲示板荒らし対策
	foreach $buf(@DANGER_LIST){
		if ( $buf ) {
			$buf=~ s/\./\\./g;		$buf=~ s/\?/\./g;		$buf=~ s/\*/\.\*/g;
			if($host =~ /$buf/gi){	&error("\申\し\訳ありません。<br>あなたのプロバイダーからは投稿できませんでした． ");	}
		}
	}
	if ( $FORM{'action'} eq 'regist' || ( $FORM{'action'} eq 'update' && $FORM{'proc'} eq 'edit') )	{
		if ( $FORM{'name'} eq '')	{	&error("お名前を入力して下さい。");	}
		if ( $titleflg == 1 && $FORM{'title'} eq '' && $FORM{'kflg'} eq '' && $FORM{'resno'} eq '' )	{	&error("タイトルを入力して下さい。");	}

		if ( $FORM{'kflg'} eq '' ) {														
			if ( $FORM{'comment'} eq '')	{	&error("メッセージは省略出来ません。");	}
			if ( $maxword ne '' && (length($FORM{'comment'}) > $maxword))	{	&error("メッセージは$maxword文字までしか登録出来ません。");	}
		}	else	{
			if ( $ikkiflg2 == 1 )	{
				if ( $FORM{'pass'} ne $password )	{	&error("申\し訳ありませんが、管理者以外は一括レスは出来ません。");	}
			}
		}
	}
	if ( $FORM{'action'} ne 'regist' )	{
		if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい。");	}
		if ( $kanriup == 1 && $FORM{'pass'} ne $password )	{	&error("管理人以外は修正・削除が出来ません。"); }
	}
}
###<-------------------------------------------------------------
###<---   日付変換
###<--------------------------------------------------------------
sub timeconv {
	if ( $_[0] =~ /\(/ ) { return $_[0] ; }	#旧Ver対応
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]);	#システム日時・時刻取得
	$year  = sprintf("%02d",$year + 1900);	$month = sprintf("%02d",$mon + 1);	$mday  = sprintf("%02d",$mday);
	$hour  = sprintf("%02d",$hour);	$min   = sprintf("%02d",$min);
	if ( substr($month,0,1) == 0 )	{	$month =~ s/0/ /;	}	if ( substr($mday,0,1) == 0 )	{	$mday =~ s/0/ /;	}
	$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];	
	return "$month/$mday($week) $hour:$min";
}
