#!/usr/local/bin/perl

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++　　[ ノ〜マルチゃん！ ]
#+++		・・・・・>>> All Created by Tacky				     
#+++		・・・・・>>> Copyright (c) 1999.7 Tacky's Room. All rights reserved....
#+++        Email    >>> tacky2@ops.dti.ne.jp
#+++        Homepage >>> http://tackysroom.com/
#+++
#+++ >>> Update-History...
#+++
#+++	2006.06.05(Ver0.91)  >>　$urllink=2の時、$urerrnm[1]以降がエラーになりませんでした
#+++    2006.05.26(Ver0.9 )  >>  セキュリティ追加
#+++    2004.03.03(Ver0.893 )>>  不具合対応
#+++    2004.02.07(Ver0.892) >>  セキュリティ強化
#+++    2001.05.01(Ver0.891) >>  投稿時にnamruchan_cnt.txtに無駄なデータを書き込んでおりました。申し訳ありません。m(_ _)m
#+++    2001.04.12(Ver0.89)  >>  二重登録禁止チェックを追加
#+++                         >>  Locationヘッダが使えないサーバー対応
#+++                         >>  ボタンとかCSS指定追加
#+++    2000.07.26(Ver0.88)  >>  削除を行った場合ログファイルが壊れる不具合修正
#+++    2000.07.12  >>  ファイルロックが解除されない場合がある不具合修正
#+++	2000.06.16  >>　CSS追加・ロック処理見直し・ログファイル保存形式変更(COMMENT欄の改行を<BR>で保存するようにしました)・フォントサイズ指定可・Apache+Netscape文字化け対応
#+++				    [name]等に半角スペ−スを入れると半角スペ−ス以降認識しないバグ修正・アイコン一覧を見やすくしました。
#+++					入力フォ−ムにパスワ−ドを追加し、投稿者からの修正・削除を可能にしました
#+++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
require './jcode.pl';													#日本語コード変換
$url					=  "http://www.heppoko.gr.jp/~yumepage/GakkounoKAIDAN/yomi.html";		#戻り先ＵＲＬ
$url_target				= "";										#戻り先のURLを表示する際のターゲット
$script					=  "./nmaruchan.cgi";							#このＣＧＩの名前を指定
$titlename 				= '要望とか，感想とかをバシッと書いてください';				#タイトルを指定
$titlelogo 				= '';									#タイトルロゴを指定
$logfile				= './nmaruchan.txt';							#ログファイルの名前を指定
$lockfile				= './nmaruchan.lock';							#ロックファイルの名前を指定
$backpicture 			= '';										#背景画像を指定。省略時は''
$bgcolor 				= '#000000';								#背景色を指定

$textcolor			    = "#FFFFFF";									# 文字色
$linkcolor		   	 	= "#0055FF";									# リンク色（未読リンク）
$vlinkcolor				= "#FF5500";									# リンク色（既読リンク）
$alinkcolor		 		= "#0033FF";									# リンク色（押した時）
$hlinkcolor				= '#00FFFF';									#リンクをポイントした際のアンダ−ライン色(IEのみ)	u000301
$pt						= '9pt';								#全体のフォントサイズ（pt指定以外何があるのか、僕知らない。(^^ゞ）

$sz						= '50%';								#ログ表示部のtable幅。pixel又は%で指定してね。

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

#↓管理者用アイコンとアイコンの名前の指定。$oicon_gif[2]...[5]のように適当に増やして下さいね。
#  $oiconnmに指定した名前で投稿された場合、$oicon_gifのアイコンが表示されるようになってます。
$oicon_gif[0] = './kuma.gif' ;		$oiconnm[0] = 'Tacky' ;
$oicon_gif[1] = './parappa.gif' ;	$oiconnm[1] = 'Tacky2';

#↓訪問者用アイコンとアイコンの名前の指定。$icon_gif[3]...[10]のように適当に増やして下さいね。
$icon_gif[0] = './img/satuki001.jpg' ;	
$icon_gif[1] = './img/momoko001.jpg' ;	
$icon_gif[2] = './img/hajime001.jpg' ;	
$icon_gif[3] = './img/reo001.jpg' ;	
$icon_gif[4] = './img/keiichirou001.jpg' ;	
$icon_gif[5] = './img/ka-ya001.jpg' ;	
$icon_gif[6] = './img/satuki002.jpg' ;	
$icon_gif[7] = './img/aya001.jpg' ;	
$icon_gif[8] = './img/misono001.jpg' ;	
$icon_gif[9] = './img/tomomi001.jpg' ;	
$icon_gif[10] = './img/mio001.jpg' ;	
$icon_gif[11] = './img/momoko002.jpg' ;	
$icon_gif[12] = './img/satuki003.jpg' ;	
$icon_gif[13] = './img/hajime002.jpg' ;	
$icon_gif[14] = './img/keita001.jpg' ;	
$icon_gif[15] = './img/satuki004.jpg' ;
$icon_gif[16] = './img/matsushima001.jpg' ;
$icon_gif[17] = './img/sakata001.jpg' ;
$icon_gif[18] = './img/okabe001.jpg' ;
$icon_gif[19] = './img/momoko003.jpg' ;
$icon_gif[20] = './img/anko001.jpg' ;
$icon_gif[21] = './img/reiko001.jpg' ;
$icon_gif[22] = './img/shou001.jpg' ;
$iconnm[0] = 'さつき01' ;
$iconnm[1] = '桃子01' ;
$iconnm[2] = 'ハジメ01' ;
$iconnm[3] = 'レオ01' ;
$iconnm[4] = '敬一郎01' ;
$iconnm[5] = 'カーヤ01' ;
$iconnm[6] = 'さつき02' ;
$iconnm[7] = '江藤アヤ01' ;
$iconnm[8] = '清原美園01' ;
$iconnm[9] = '高橋ともみ01' ;
$iconnm[10] = '今井澪01' ;
$iconnm[11] = '桃子02' ;
$iconnm[12] = 'さつき03' ;
$iconnm[13] = 'ハジメ02' ;
$iconnm[14] = '圭太01' ;
$iconnm[15] = 'さつき04' ;
$iconnm[16] = '松嶋01' ;
$iconnm[17] = '坂田01' ;
$iconnm[18] = '岡部01' ;
$iconnm[19] = '桃子03' ;
$iconnm[20] = 'アンコ01' ;
$iconnm[21] = 'レイコ01' ;
$iconnm[22] = 'シヨウ01' ;



#昇進機能を使う場合、投稿者毎の投稿回数を保持するファイルの名前を指定。使わない場合は''として下さい。
$logfile2				= '';	#←昇進機能を使う場合
#↓昇進機能を使う場合のみ設定。昇進機能を使用しない場合は、このままで構いません。
@rank = ('幼稚園生','小学校低学年','小学校中学年','小学校高学年','中学生','高校生','大学生','大学院生','平社員','課長','部長','社長');
#↓指定した回数で昇進していきます
@rankno = ('0','4','6','8','10','15','20','25','30','50','80','100');

#投稿時に背景色及び文字色の選択を行いますか？ 'no'の場合は、元メッセージ時・レスメッセージの２色のみの設定。
$color_use				= 'yes' ;

#↓$color_useが'no'の場合
$moto_bgcolor			= '#ffcc00' ;				#元メッセージの背景色
$moto_txcolor			= '#990000' ;				#元メッセージの文字色
$res_bgcolor			= '#ffffcc' ;				#レスメッセージの背景色
$res_txcolor			= '#666666' ;				#レスメッセージの文字色

#↓$color_useが'yes'の場合
#色の指定（入力フォーム上にチェックボックスが表示されます）
#背景色
@COLORS = ('#FFCCCC','#FFFF99','#CCFFFF','#CCFFCC','#CCFF00','#FFCC00','#CCCCFF','#99CCFF','#CCCC66','#990000');
#文字色
@COLORS2  = ('#000000','#666666','#000066','#990000','#999900','#cc3399','#ff0000','#339900','#ffffff');

$datamax				= 200 ;											#最大データ保存件数
$pagemax				= 20 ;											#１ページ内に表示する件数
$password				= 'YN0417';										#メンテナンス用パスワード（管理者用）
$tag					= 'no';											#タグ許可(yes,no)
$resflag				= 'yes' ;										#最新レスを先頭に表示する？(yes,no)
$agentflag				= 'no' ;										#投稿者の使用ブラウザ・ＯＳを表示する？(yes.no)
$hostflag				= 'yes' ;										#リモートホストを表示する？(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=("xxx.com","yyy.com","zzz*.or.jp");

#掲示板荒らし対策その２。メッセージ最大文字数を指定。特に設定しない場合は、''として下さい。
$maxword = '1000' ;

#■■■ Ver0.86より追加↓ ■■■
$s_col 		= 60 ;			#メッセージ欄の桁数
$s_row 		= 4 ;			#メッセージ欄の行数

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

#アイコン一覧を表示する際、１行にアイコンを何個表示します？
$icon_line					= 5 ;	#←の場合、５個表示したら改行するって事です。
#=============================================================================================================================================================================================
#フォームＣＳＳ設定　※使用しない場合は、$css_style = "";とし、そこから２行(先頭がEOMの行までを)を削除して下さい。
$css_style = <<"EOM";
STYLE=font-size:$pt;color:#000000;background-color:#ffffDD;border-style:solid;border-color:#000000;border-width:1;
EOM

#■■■ Ver0.86より追加↑ ■■■

#■■■ Ver0.89より追加↑ ■■■
$damedame		= 0 ;	#Locationヘッダが使えないサーバーは1。通常は0でいいはず。※トクトク、3nopage,WinNTサーバー等が1かな。

#◆◆◆↓セキュリティ◆◆◆
$postchk		= 1;		#投稿時・メンテナンス時のMethodをPOST限定にする場合は１。以外は０。
$urlchk			= '';	#ここで指定されたアドレス(CGIの設置アドレスを記入)以外から投稿があった場合をエラーとします。設定しない場合は''
$renchan		= 5 ;		#指定回数以上の連続投稿はエラ−とする。設定しない場合は0としてね。

$urllink		= 1 ;		#タイトル及び本文にhttpからのリンクがあったらエラーにする？
							#(0:しない 1:URLは全てする 2:以下の$urlerrで指定された文字が含まれているURLのみエラーとする
#↓$urllink=2の場合、以下に指定した文字を含むURLをエラーとする
$urlerrnm[0]	= 'exe';
$urlerrnm[1]	= 'virus';
$kaigyo			= 0;		#指定値分の改行が連続した場合、１行改行に置換します。　※指定しない場合は0
$name_comment	= 'coxmment';#定期的に投稿してくるような事があったらこの名前を適当に変えてみて下さい。自動投稿スクリプトの種類によっては全然意味無いけど。
@errword 		= ('','');	#投稿禁止語句　ex.@errword = ('死ね','テストテスト');
$urlcnt			= 2;		#メッセージ欄に記入出来るURLの個数　※指定しない場合は0
$japan			= 1;		#メッセージ欄に"全角文字/半角カナ(但し半角カナは文字化けする事もあります)"が１文字でも無ければエラーとする？(0:no 1:yes)
$mailerr		= 0;		#メアド欄を入力されたらエラーにする？(0:no 1:yes)　※自動書込ツールはメアドを指定してくる事が多い為あえてエラーとしてみる
$urlerr			= 0;		#URL欄を入力されたらエラーにする？(0:no 1:yes)　※自動書込ツールはURLを指定してくる事が多い為あえてエラーとしてみる

#◆◆◆↑セキュリティ◆◆◆

#スクロールバーの色変更。よくわからない方は、"EOM"の次の行から先頭がEOMの行の間を削除してね。
$scrollbar = <<"EOM";
BODY{
scrollbar-base-color : #eeeeee;
}
EOM

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

#<<<地域テーブル
@areatbl = ('北海道','青　森','岩　手','秋　田','宮　城','山　形','福　島',
'栃　木','群　馬','茨　城','埼　玉','東　京','千　葉','神奈川','山　梨','長　野',
'新　潟','富　山','石　川','福　井','静　岡','愛　知','岐　阜','三　重','滋　賀',
'京　都','大　阪','兵　庫','奈　良','和歌山','鳥　取','島　根','岡　山','広　島',
'山　口','徳　島','香　川','愛　媛','高　知','福　岡','佐　賀','長　崎','熊　本',
'大　分','宮　崎','鹿児島','沖　縄','その他','内緒♪');

###############################################################################
#### Main Process  START  #####################################################
###############################################################################

$agentsoft = $ENV{'HTTP_USER_AGENT'};
$agentsoft =~ s/,/./g;
$agentsoft =~ s/; Yahoo\! JAPAN Version Windows 95\/NT CD-ROM Edition 1.0.//g;
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);	#システム日時・時刻取得
$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 = ('日','月','火','水','木','金','土') [$wday];  $today = "$month/$mday($week) $hour:$min";
&cookieget;															#<<<COOKIEの取得
&decode ;															#<<<デコード
if ( $FORM{'action'} eq "maintenance" ) { &Maintenance; }    		#<<<"処理"がメンテナンスの場合
if	( $FORM{'action'} eq "update" )		{ &update ; }				#<<<ログファイル更新（編集時）
if	( $FORM{'action'} eq 'regist' )	{ &regist ; }					#<<<ログ登録処理
if	( $FORM{'action'} eq 'res' )	{ &res ; }						#<<<レス書き込み処理
if	( $FORM{'action'} eq 'info' )	{ &info ; }						#<<<昇進資格
if	( $FORM{'action'} eq 'icondisp' )	{ &icondisp ; }				#<<<アイコン一覧を見る
&header ;															#<<<htmlヘッダー出力
&forminput ;														#<<<入力フォーム表示
&view ;																#<<<ログ表示
&footer ;															#<<<htmlフッター出力
exit;
###############################################################################
#### Main Process  END  #######################################################
###############################################################################
###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{	
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});$post=1;
	} else { $buffer = $ENV{'QUERY_STRING'}; $post=0;}
	@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("使用出来ないタグが入力されています");	}}
		}
		if ( $urllink && ($name eq 'name' || $name eq 'title' || $name eq 'hp' || $name eq $name_comment )) {
			if ( $urllink == 1 ) {
				if ( $value =~ /tp:\/\//i && $name ne 'hp' ) {
					&error("セキュリティ対策の為、URLは入力出来ません。");
				}
			}	else	{
				foreach $buf ( @urlerrnm ) {
					if ( $value =~ /([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/i ) {
						if ( $3 =~ /$buf/ ) {
							&error("文字「$buf」は、セキュリティ対策の為、入力出来ません。");
						}
					}
				}
			}
			$value =~ s/(\r\n){$kaigyo,}/$1/g if ( $kaigyo ) ;
		}
		if ( $name ne $name_comment )	{	$value =~ s/\r\n//g;	$value =~ s/\r|\n//g;	}
		$value =~ s/\,/&#44;/g;
		if ( $name ne $name_comment )	{	$value =~ s/\r\n//g;	$value =~ s/\r|\n//g;	}
		if ( $tag ne 'yes' || $name ne $name_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{$name_comment} =~ s/\r\n/<br>/g;	$FORM{$name_comment} =~ s/\r|\n/<br>/g;	
	$FORM{'hp'}   =~ s/^http\:\/\///;

	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;	}
	}

}
###<--------------------------------------------------------------
###<---   入力フォーム
###<--------------------------------------------------------------
sub forminput { 
	print "<center>\n";
	if ( $FORM{'action'} ne 'res' )	{
		if ( $titlelogo )	{
			print "<img src=\"$titlelogo\"><br>\n";
		}	else	{
			print "<b><font size=\"+1\" color=#990000>$titlename</font></b><br>\n";
		}
	}	else	{
		print "<b><font size=\"+1\" color=#990000>返信用フォームです</font></b><br>\n";
	}
	print "|<a href=$url target=$url_target>HOMEに戻る</a>&nbsp;|";
	if ( $logfile2 ne '' )	{	print "&nbsp;<a href=$script?action=info>昇進資格</a>|\n";	}
	print "<br><br>\n";
	print "<form name=inputform action=$script method=$method>\n";
	if ( $FORM{'action'} eq 'maintenance' )	{
		print "<input type=\"hidden\" name=\"action\" value=\"update\">\n";
		print "<input type=hidden name=\"proc\" value=\"edit\">\n";
		print "<input type=\"hidden\" name=\"no\" value=$no>\n";
		$FORM{'title'} = "" ;
	}	else	{
		print "<input type=hidden name=\"action\" value=\"regist\">\n";
		$c_name = $COOKIE{'nm'} ;	$c_email = $COOKIE{'em'} ;	$c_hp = $COOKIE{'hp'} ;
		$c_icon = $COOKIE{'icon'} ;	$c_area = $COOKIE{'area'} ;	$c_title = "" ;
		$c_comment = "" ;	$c_resno = "" ;	$c_color = $COOKIE{'cl'} ;	$c_color2 = $COOKIE{'cl2'} ;	$c_pass = $COOKIE{'ps'} ;
	}
	print "<table  border=0 cellspacing=0 cellpadding=1>\n";
	print "<tr><td align=right>Name</td>\n";
	print "<td><input type=text name=\"name\" size=30 value=\"$c_name\" $css_style></td>\n";
	print "<td align=right>Email</td>\n";
	print "<td><input type=text name=\"email\" size=30 value=\"$c_email\" $css_style></td></tr>\n";
	print "<tr><td align=right>URL</td>\n";
	print "<td><input type=text name=\"hp\" size=30 value=\"http://$c_hp\" $css_style></td>\n";
	print "<td align=right>\n";
	if	( $FORM{'action'} ne 'res' && $c_resno eq '' )	{
		print "Title</td>\n";
	}	else	{
		print "&nbsp;</td>\n";
	}
	print "<td>";
	if	( $FORM{'action'} ne 'res' && $c_resno eq '' )	{
		print "<input type=text name=\"title\" size=30 value=\"$c_title\" $css_style></td></tr>\n";
	}	else	{
		print "&nbsp;</td></tr>\n";
	}
	if ( $icon_use eq 'yes' )	{
		print "<tr><td align=left nowrap>発信地</td>\n";
		print "<td align=left>\n";
		&areaset ;
		print "</td><td align=right>Icon</td>\n";
		print "<td>";
		print "<select name=\"icon\" $css_style>\n";
		$i = 0 ;
		for ( @iconnm ) {
			if ( $i == $c_icon )	{	$dmy = "selected";	}	else	{	$dmy = "" ;	} 
			print "<option value=$i $dmy>$iconnm[$i]\n";
			$i++ ;
		}
		print "</select>\n";
		print "&nbsp;&nbsp;<a href=\"$script?action=icondisp\">アイコン一覧</a>\n";
		print "</td></tr>\n";
	}
	if ( $color_use eq 'yes' )	{
		print "<tr><td>背景色</td>\n";
		print "<td colspan=3>\n";
		if ( !($c_color) ) { $c_color = 0 ; }		#i000329
		foreach ( $i = 0 ; $i <=  $#COLORS ; $i++) {
			if ( $c_color ne '' &&  $i == $c_color )	{	$dmy = "checked";	}	else	{	$dmy = '';	}			#u000329
			print "<input type=radio name=color value=$i $dmy>\n";
			print "<font color=$COLORS[$i]>■</font>\n";
		}
		print "</td></tr><tr>\n";
		print "<td>文字色</td>\n";
		print "<td colspan=3>\n";
		if ( !($c_color2) ) { $c_color2 = 0 ; }		#i000329
		foreach ( $i = 0 ; $i <=  $#COLORS2 ; $i++) {
			if ( $c_color2 ne '' &&  $i == $c_color2 )	{	$dmy = "checked";	}	else	{	$dmy = '';	}		#u000329
			print "<input type=radio name=color2 value=$i $dmy>\n";
			print "<font color=$COLORS2[$i]>■</font>\n";
		}
		print "</td></tr>\n";
	}
	print "<tr><td align=center colspan=4>\n";
	print "<textarea name=\"$name_comment\" cols=$s_col rows=$s_row wrap=soft $css_style>$c_comment</textarea></td></tr>\n";

	print "<tr>\n";
	if ( $icon_use ne 'yes' )	{
		print "<td align=left nowrap>発信地</td>\n";
		print "<td align=left>\n";
		&areaset ;
		print "</td><td colspan=2>\n";
	}	else	{
		print "<td align=\"center\" colspan=4>\n";
	}
	if ( $FORM{'action'} ne 'res' )	{
		print "<input type=submit value=登　録 $css_style>&nbsp;&nbsp;\n";
	}	else	{
		print "<input type=submit value=返　信 $css_style>\n";
		print "<input type=hidden name=\"resno\" value=$FORM{'no'}>\n";
	}
	print "<input type=reset value=クリア $css_style>\n";
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "&nbsp;&nbsp;Password:&nbsp;<input type=password name=\"pass\" size=6 maxlength=8 value=\"$c_pass\" $css_style>(英数字4〜8文字)\n";
	}	else	{
		print "<input type=hidden name=pass value=\"$FORM{'pass'}\">\n";
	}
	print "</td></tr></table></form>\n";
	print "</center>\n";
}
###<--------------------------------------------------------------
###<---   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 "<title>$titlename</title>\n";
	#<<<CSS START>>>
	print "<style type=\"text/css\">\n";
	print "<!--\n";
	print "a:link    {font-size: 10pt; text-decoration:none; color:$linkcolor }\n";
	print "a:visited {font-size: 10pt; text-decoration:none; color:$vlinkcolor }\n";
	print "a:active  {font-size: 10pt; text-decoration:none; color:$alinkcolor }\n";
	print "a:hover   {font-size: 10pt; text-decoration:underline; color:$hlinkcolor }\n";
	print "body,tr,td { font-size: $pt;}\n";
	if ( $scrollbar ) { print $scrollbar; }
	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=$textcolor link=$linkcolor vlink=$vlinkcolor alink=$alinkcolor>\n";
}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer { 
	#<<<　↓消さないでネ♪
	print "<div align=right>\n";
	print "<a href=http://tackysroom.com target=_top>ノ〜マルチゃん！ Ver0.91 Created by Tacky\'s Room</a>\n";
	print "</div>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   ログファイル読み込み
###<--------------------------------------------------------------
sub	dataread	{
	#<<<ログ読み込み
	if ( !(open(IN,"$logfile")))	{	&error("ログファイル($logfile)のオープンに失敗しました");	}
	@LOG = <IN>;
	close(IN);
	@RESLOG = () ; @MAINLOG = () ;
	$MAXNO = '';
	foreach ( @LOG )	{
		($no,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$_);
		if ( $resno eq '' )	{
			push(@MAINLOG,"$_") ;
		}	else	{
			push(@RESLOG,"$_") ;
		}
		push(@SVLOG,"$_");
		if ( $no >= $MAXNO ) {			#最新の投稿ｂ退避
			$MAXNO = $no ;
		}
	}
	@RESLOG = reverse @RESLOG ;			#レスログは古い順に。
}
###<--------------------------------------------------------------
###<---   ログ表示
###<--------------------------------------------------------------
sub	view	{
	&dataread ;															#<<<ログ読み込み
	local($pagemax2,$dm,$p,$d,$col,$col2,$i,$z) ;

	print "<center><hr width=90% size=1 color=#000000>\n";

	#表示対象ページの先頭データ件数を算出
	$dm = @MAINLOG;
	if	( $FORM{'action'} ne 'res' )	{
		$p = $dm / $pagemax ;
		if ( $dm % $pagemax != 0) {	$p++ ;	}
		$p = sprintf("%3d",$p);
		if ( $FORM{'page'} eq "NEXT" )	{
			$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 ;
		}	else	{
			$d = 0	;
			$FORM{'disppage'} = 1 ;
		}
		$pagemax2 = $pagemax ;
	}	else	{
		$pagemax2 = $dm ;
		$d = 0 ;
	}
	$z = 1 ;
	for ( $i = $d ; ( $z <= $pagemax2 ) && ( $i < $dm ); $i++ )	{ 
		($no,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$bcolor,$fcolor,$ps,$hst) = split(/,/,$MAINLOG[$i]);
		$hst =~ s/\n//g;
		if ( $color_use eq 'yes' )	{
			$col = $COLORS[$bcolor] ;
			$col2 = $COLORS2[$fcolor] ;
		}	else	{
			$col = $moto_bgcolor ;
			$col2 = $moto_txcolor ;
		}
		if	( $FORM{'action'} ne 'res' || ($FORM{'action'} eq 'res' && $FORM{'no'} eq $no) )	{		
			print "<br><br>\n";
			if	( $FORM{'action'} ne 'res' )	{
				print "<form action=$script method=$method>";
				print "<input type=hidden name=bbschoice value=$FORM{'bbschoice'}>";
				print "<input type=hidden name=\"action\" value=\"res\">";
				print "<input type=hidden name=\"no\" value=\"$no\">";
			}
			print "<table cellpadding=0 cellspacing=0 border=0 width=$sz>\n";
			print "<tr><td>\n";

			print "<table cellpadding=0 cellspacing=0 border=0 width=100%>\n";
			print "<tr><td colspan=3 bgcolor=#000000 height=1>\n";
			print "<img src=\"$gif_spacer\" border=0 width=100% height=1></td></tr>\n";
			print "<tr>";
			print "<td bgcolor=#000000 width=1>\n";
			print "<img src=\"$gif_spacer\" border=0 width=1></td>\n";
			print "<td>";

			print "<table cellpadding=5 cellspacing=0 border=0 width=100%>";
			print "<tr>\n";
			print "<td bgcolor=\"$col\" colspan=2>\n";
			print "<font color=\"$col2\" $dmy><b>◆ $title</b></font>\n";
			if ( length($title) > 30 ) {	$dmy = 'size=-1' }	else	{	$dmy = ''	}
			print "&nbsp;&nbsp;&nbsp;<font color=\"$col2\">++ <b>$name</b></font>\n";
			if ( $logfile2 ne '' )	{
				$ranking = &rankget($ksu) ;
				print "&nbsp;&nbsp;<font color=\"$col2\" size=-1>($ranking)</font>&nbsp;&nbsp;&nbsp;\n";
			}	else	{
				print "&nbsp;&nbsp;&nbsp;\n";
			}
			print "<font color=\"$col2\" size=-1>";
			if ( $email ne '' )	{
				print "<a href=\"mailto:$email\">[Email]</a>\n";
			}
			if ( $hp ne '' )	{
				print "<a href=\"http://$hp\" target=_blank>[URL]</a>\n";
			}
			print " ..( $areatbl[$area] )</font>\n";
			if	( $FORM{'action'} ne 'res' )	{	print "<input type=submit value=\"返信\" $css_style>\n";	}
			print "<hr size=1 width=100% color=#000000>";
			print "</td>\n";
			print "</tr><tr><td bgcolor=\"$col\">\n";
			if ( $icon_use eq 'yes' )	{
				&icon_set($name) ;
			}	else	{
				print "&nbsp;";
			}
			print "</td><td bgcolor=\"$col\" width=95%>\n";
			$comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\">こちら<\/a>/g;
			$comment =~ s/&amp;/&/g;
			print "<font color=\"$col2\">$comment\n";
			print "<br><div align=right>\n";
			if ( $agentflag eq 'yes' ) {	print "$agent&nbsp;";	}
			if ( $hostflag eq 'yes' ) {	print "$hst&nbsp;";	}
			print "++ $regdate\[$no\]</div></font>\n";
			print "</td></tr>\n";
			print "</table>\n";

			print "</td>";
			print "<td bgcolor=#000000 width=1>\n";
			print "<img src=\"$gif_spacer\" border=0 width=1></td></tr>\n";

			print "<tr><td colspan=3 bgcolor=#000000 height=1>\n";
			print "<img src=\"$gif_spacer\" border=0 width=100% height=1></td></tr>\n";

			print "</td></tr></table>\n";
			print "</td></tr><tr><td>";	
			foreach $buf ( @RESLOG )	{
				($no2,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$k,$bcolor,$fcolor,$ps,$hst) = split(/,/,$buf);
				$hst =~ s/\n//g;
				if ( $color_use eq 'yes' )	{
					$col = $COLORS[$bcolor] ;
					$col2 = $COLORS2[$fcolor] ;
				}	else	{
					$col = $res_bgcolor ;
					$col2 = $res_txcolor ;
				}
				if ( $no eq $resno )	{
					print "<br><div align=\"right\">";
				  	print "<table cellpadding=0 cellspacing=0 border=0 width=85%>\n";

					print "<tr><td colspan=3 bgcolor=#000000 height=1>\n";
					print "<img src=\"$gif_spacer\" border=0 width=100% height=1></td></tr>\n";
					print "<tr>";
					print "<td bgcolor=#000000 width=1>\n";
					print "<img src=\"$gif_spacer\" border=0 width=1></td>\n";
					print "<td>";

					print "<table cellpadding=5 cellspacing=0 border=0 width=100%>\n";
					print "<tr>";
					print "<td bgcolor=\"$col\" colspan=2>\n";
					print "<font color=\"$col2\">++ <b>$name</b>\n";
					if ( $logfile2 ne '' )	{
						$ranking = &rankget($k) ;
						print "&nbsp;&nbsp;<font color=\"$col2\" size=-1>($ranking)</font>&nbsp;&nbsp;&nbsp;\n";
					}	else	{
						print "&nbsp;&nbsp;&nbsp;\n";
					}
					print "<font color=\"$col2\" size=-1>";
					if ( $email ne '' )	{
						print "<a href=\"mailto:$email\">[Email]</a>\n";
					}
					if ( $hp ne '' )	{
						print "<a href=\"http://$hp\" target=_blank>[URL]</a>\n";
					}
					print " ..( $areatbl[$area] )</font>\n";
					print "<hr size=1 width=100% color=#000000>";
					print "</td>";
					print "</tr>\n";
					print "<tr>";
					print "<td bgcolor=\"$col\" valign=\"middle\">";
					if ( $icon_use eq 'yes' )	{
						&icon_set($name) ;
					}	else	{
						print "&nbsp;";
					}
					print "</td>\n";
					print "<td bgcolor=\"$col\" width=95%>";
					$comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1<a href=\"$2$3\">こちら<\/a>/g;
					$comment =~ s/&amp;/&/g;
					print "<font color=\"$col2\">$comment\n";
					print "<br><div align=right>\n";
					if ( $agentflag eq 'yes' ) {	print "$agent&nbsp;";	}
					if ( $hostflag eq 'yes' ) {	print "$hst&nbsp;";	}
					print "++ $regdate\[$no2\]</div></font>\n";
					print "</td>";
					print "</tr></table></div>\n";

					print "</td>";
					print "<td bgcolor=#000000 width=1>\n";
					print "<img src=\"$gif_spacer\" border=0 width=1></td></tr>\n";

					print "<tr><td colspan=3 bgcolor=#000000 height=1>\n";
					print "<img src=\"$gif_spacer\" border=0 width=100% height=1></td></tr>\n";

		  			print "</td></tr></table>\n";
				}
			}
			if	( $FORM{'action'} ne 'res' )	{	print "</form>\n";	}
	 		print "</td></tr></table>\n";
		}
		$z++;
	}

	print "</center>\n";	
	if	( $FORM{'action'} ne 'res' )	{
		print "<center>\n";	
		print "<form action=$script method=$method>\n";
		print "<input type=hidden name=\"disppage\" value=$FORM{'disppage'}>\n";
		if ( $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 "</form>\n";
		print "<hr width=90% size=1 color=#000000><br><br>\n";
		print "</center>\n";	
		print "<div align=right><form action=\"$script\" method=\"$method\">\n";
		print "No.<input type=text name=\"no\" size=3 $css_style>\n";
		print "Pass<input type=password name=\"pass\" size=10 $css_style>\n";
		print "</font>\n";
		print "<select name=\"proc\" $css_style>\n";
		print "<option value=\"edit\">編集\n";
		print "<option value=\"delete\">削除\n";
		print "</select>\n";
		print "<input type=hidden name=\"action\" value=\"maintenance\">\n";
		print "<input type=submit value=\"admin\" $css_style>\n";
		print "</form></div>\n";	
	}	

}
###<--------------------------------------------------------------
###<---   ログ出力
###<--------------------------------------------------------------
sub	regist	{
	# ホスト名を取得
	$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; }
	}
	#掲示板荒らし対策
	foreach $buf(@DANGER_LIST){
		if ( $buf ) {
			# パターンマッチを変換
			$buf=~ s/\./\\./g;		$buf=~ s/\?/\./g;		$buf=~ s/\*/\.\*/g;
			if($host =~ /$buf/gi){	&error("\申\し\訳ありません。<br>あなたのプロバイダーからは投稿できませんでした． ");	}
		}
	}
	if ( $maxword ne '' && (length($FORM{$name_comment}) > $maxword))	{	&error("メッセージは$maxword文字までしか登録出来ません。");	}
	if ( $FORM{'name'} eq '')	{	&error("お名前を入力して下さい。");	}
	if ( $FORM{$name_comment} eq '')	{	&error("メッセージは省略出来ません。");	}
	if ( $FORM{'title'} eq '')	{	$FORM{'title'} = '（無題）';}
	# URLと同じものが本文にあったら宣伝
	if ($FORM{'hp'}){
		if ( $FORM{$name_comment} =~ /$FORM{'hp'}/) {
			&error("宣伝投稿と見なされますので投稿出来ません");
		}
	}
	if ( $urlcnt ) {
		$urlnum = ($FORM{$name_comment} =~ s/(h?ttp)/$1/ig);
		if ( $urlnum > $urlcnt ) { &error("URLは" . ($urlcnt + 1) . "個以上は記入出来ません"); }
	}
	if ( $japan ) {
		$str = $FORM{$name_comment};
		jcode::convert(\$str, 'euc','sjis');
		if($str =~ /[\xA1-\xFE][\xA1-\xFE]/ || $str =~ /\x8E/ || $str =~ /[\x8E\xA1-\xFE]/){
		}	else	{
			&error("半角英数字のみの投稿は出来ません。");
		}
	}
	if ( $mailerr == 1 && $FORM{'email'} ) { &error("セキュリティ対策の為、メールアドレスは入力出来ません。");	}
	if ( $urlerr == 1 && $FORM{'hp'} ) { &error("セキュリティ対策の為、URLは入力出来ません。");	}

	&filelock ;	#ファイルロック
	&dataread ;															#<<<ログ読み込み
	foreach ( @SVLOG )	{
		($oyano,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$_);
		$hst =~ s/\n//;
		if ( $hst ne $host )	{	$chk=1; }
		if ( $renchan != 0 && $hst eq $host && $chk != 1 )	{
			$write_cnt++ ;
			if ( $write_cnt + 1 >= $renchan )	{	&fileunlock ;	&error("$renchan回以上の連続投稿は禁止しています");	}
		}

		if ( $name eq $FORM{'name'} && $comment eq $FORM{$name_comment} )	{
			&fileunlock ;	&error("二重投稿は禁止しています。") ;			last ;
		}
	}

	if ( $logfile2 ne '' )	{
		if ( !(open(IN2,"$logfile2")))	{	&fileunlock ;	&error("ログファイル２($logfile2)のオープンに失敗しました");	}
		$flg = 0 ;
		while ( <IN2> )	{
 			($n,$k) = split(/,/,$_);
			$k =~ s/\n//g;	#u010502
			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 >= $datamax) {	pop(@SVLOG);	}
	if ( $dcnt2 < 1 )	{
		$no = 1;										#１件目
	}	else	{
		$no = $MAXNO + 1;
	}
	#レス記事登録時で、ログを先頭に移動する場合の処理
	if ( $resflag eq 'yes' && $FORM{'resno'} ne '')	{
		$cnt = 0 ;
		foreach $buf ( @SVLOG )	{
			($oyano,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$buf);
			if ( $oyano eq $FORM{'resno'} )	{
				splice(@SVLOG,$cnt,1);
				$wk = "$oyano,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$col,$col2,$ps,$hst";
				unshift(@SVLOG,$wk);
				last ;
			}
			$cnt++ ;
		}
	}	
	#管理者の投稿の場合、管理者用アイコンに置き換える
	for ( $i = 0 ; $i <= $#oiconnm ; $i++ )	{
		if ( $FORM{'name'} eq $oiconnm[$i] )	{
			$FORM{'icon'} = $i ;
			last ;
		}
	}
	# パスワードの暗号化（crypt関数使用））
	if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass = '' ; }
	unshift(@SVLOG,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'icon'},$FORM{'title'},$FORM{$name_comment},$today,$FORM{'resno'},$FORM{'area'},$agentsoft,$dcnt,$FORM{'color'},$FORM{'color2'},$pass,$host\n");
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @SVLOG;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
	#COOKIE設定
	&cookieset ;
	if ( $damedame == 0 )	{
		print "Location: $script?\n\n";
	}	else	{
		print "Content-type: text/html\n\n";
		print "<html><head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=";
		print "$script\"></head><body></body></html>\n\n";
	}
	exit ;
}
###<--------------------------------------------------------------
###<---   メンテナンスモード
###<--------------------------------------------------------------
sub Maintenance {
	if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい。");	}

	$found = 0 ;
	&dataread ;															#<<<ログ読み込み
	foreach ( @SVLOG )	{ 
		($no,$name,$email,$hp,$icon,$title,$comment,$regdate,$resno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$_);
		if ( $FORM{'no'} eq $no )	{		
			if ($FORM{'pass'} ne $password && (&pass_dec($ps))) { &error("パスワードが違います。"); }
			$found = 1 ;
			if ( $FORM{'proc'} eq "delete" )	{
				&update ;
				exit;
			}
			&header ;

			$found2 = 0 ;
			for ( $k = 0 ; $k <= $#oiconnm ; $k++ )	{
				if ( $name eq $oiconnm[$k] )	{	$found2 = 1 ;	last ;	}
			}
			if ( $found2 == 0 )	{	$c_icon = $icon ;	}	else	{	$c_icon = 0 ;}
			$c_name = $name ;	$c_email = $email ;	$c_hp = $hp ;	
			$c_title = $title ;	$c_comment = $comment ;	$c_area = $area ;	$c_resno = $resno ;
			$c_color = $col ;	$c_color2 = $col2 ;	$c_pass = $FORM{'pass'} ;
			$c_comment =~ s/\<br\>/\n/g;
			&forminput ;
			last;
		}
	}
	if ( $found == 0 )	{ &error("該当する記事Noのデータは存在していません。"); }
	&footer ;
	exit;
}

###<--------------------------------------------------------------
###<---   ログファイル更新
###<--------------------------------------------------------------
sub update {
	&filelock ;	#ファイルロック
	&dataread ;															#<<<ログ読み込み
	if ( $FORM{'proc'} eq 'delete' )	{
	    foreach (@LOG) {
			($no,$name,$email,$hp,$icon,$title,$comment,$regdate,$rno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$_);
			if ( $FORM{'no'} eq $no)	{								#<<<メンテ対象者の場合
				$delname = $name ;
				last ;
			}
		}
		#訪問回数を１減算
		if ( $logfile2 ne '' )	{
			if ( !(open(IN2,"$logfile2")))	{	&fileunlock ;	&error("ログファイル２($logfile2)のオープンに失敗しました");	}
			$flg = 0 ;
			while ( <IN2> )	{
	 			($n,$k) = split(/,/,$_);
				$k =~ s/\n//g;
				if ( $delname eq $n )	{	$k--;	}
				push(@sv,"$n,$k\n");
			}
			close(IN2);
			if ( !(open(OUT2,">$logfile2")))	{	&fileunlock ;	&error("ログファイル($logfile2)のオープンに失敗しました");	}
			print OUT2 @sv;
			close(OUT2);
		}
	}
	@new = ();
	$j = 0 ; $delsw = 0 ;
	@LOG = reverse @LOG ;
    foreach (@LOG) {
		($no,$name,$email,$hp,$icon,$title,$comment,$regdate,$rno,$area,$agent,$ksu,$col,$col2,$ps,$hst) = split(/,/,$_);
		if ( $FORM{'no'} eq $no)	{								#<<<メンテ対象者の場合
			if ($FORM{'pass'} ne $password && (&pass_dec($ps))) {
				&fileunlock ;	#ファイルロック解除
				&error("パスワードが違います。"); 
			}
			$delsw = 1 ;
			$svname = $name ;
			if ( $FORM{'proc'} eq "edit" )	{
				#管理者の投稿の場合、管理者用アイコンに置き換える
				for ( $i = 0 ; $i <= $#oiconnm ; $i++ )	{
					if ( $FORM{'name'} eq $oiconnm[$i] )	{ $FORM{'icon'} = $i ;	last ; }
				}
				if ( $rno eq '' )	{
					push(@new,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'icon'},$FORM{'title'},$FORM{$name_comment},$regdate,$rno,$FORM{'area'},$agent,$ksu,$FORM{'color'},$FORM{'color2'},$ps,$hst");
				}	else	{
					push(@new,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'icon'},$title,$FORM{$name_comment},$regdate,$rno,$FORM{'area'},$agent,$ksu,$FORM{'color'},$FORM{'color2'},$ps,$hst");
				}
			}
		}	else	{
			if ( $FORM{'proc'} eq 'delete' && $FORM{'no'} eq $rno )	{
				if ( $delname eq $name )	{	$j++;	}
			}	else	{
				if ( $FORM{'proc'} eq 'delete' )	{
					if ( $delname eq $name )	{	$j++;	}
				}
			} 
			if ( $FORM{'proc'} eq 'delete' && $name eq $delname)	{
				push(@new,"$no,$name,$email,$hp,$icon,$title,$comment,$regdate,$rno,$area,$agent,$j,$col,$col2,$ps,$hst");	#u000726
			}	else	{
				push(@new,"$_");
			}
		}
	}
	@new = reverse @new ;
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
	if ( $damedame == 0 )	{
		print "Location: $script?\n\n";
	}	else	{
		print "Content-type: text/html\n\n";
		print "<html><head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=";
		print "$script\"></head><body></body></html>\n\n";
	}
	exit;
}
###<--------------------------------------------------------------
###<---   レス書き込み処理
###<--------------------------------------------------------------
sub res {
	&header ;
	&forminput ;
	print "<center>\n";
	&view ;
	print "</center>\n";
	print "<br>\n";
	print "<a href=\"$script\">戻る</a>\n";
	&footer ;
	exit;
}
###<-------------------------------------------------------------
###<---   ランキング取得
###<--------------------------------------------------------------
sub rankget	{
	$set = 0 ;
	$tmax = $#rankno ;
	for ( $j = 0 ; $j <= $tmax ; $j++ )	{
		if ( $_[0] >= $rankno[$j] )	{	$ranking = $rank[$j] ;	}
	}
	return ($ranking);
}
###<-------------------------------------------------------------
###<---   クッキー取得
###<--------------------------------------------------------------
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{'nmaruchan'});
	foreach $pair (@pairs) {
		($name, $value) = split(/\!/, $pair);
		$COOKIE{$name} = $value;
	}
}
###<-------------------------------------------------------------
###<---   クッキー設定
###<--------------------------------------------------------------
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";
	$cook="nm\!$FORM{'name'},em\!$FORM{'email'},hp\!$FORM{'hp'},icon\!$FORM{'icon'},area\!$FORM{'area'},cl\!$FORM{'color'},cl2\!$FORM{'color2'},ps\!$FORM{'pass'}";
	print "Set-Cookie: nmaruchan=$cook; expires=$date_gmt\n";
}
###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {
	&header ;
	print "<br><br>$_[0]\n";
	&footer;
	exit;
}
###<--------------------------------------------------------------
###<---   地域情報設定
###<--------------------------------------------------------------
sub areaset	{	
	print " <SELECT name=area $css_style>\n";
	$k = $#areatbl ;
	for ( $i = 0 ; $i <= $k; $i++ )	{
		$j = sprintf("%02d",$i);
		if ( $c_area == $i )	{	$dmy = "selected";	}	else	{	$dmy = "";	}
		print "  <OPTION value=$j $dmy>$areatbl[$i]\n";
	}	
	print "</SELECT>\n";
}

###<--------------------------------------------------------------
###<---   Information
###<--------------------------------------------------------------
sub info	{	
	&header ;															#<<<htmlヘッダー出力
	print "<center><font size=5><b>+++ ほんわか君・\昇\進資格 +++</b></font><br><br>\n";
	print "<b>以下の投稿回数に従って、あなたは\昇\進していきます!!</b><br><br>\n";
	$i =  0;
	print "<table cellpadding=5 cellspacing=0 border=1 bgcolor=#ffcc33>\n";
	$k = $#rank ;
	for ( @rank )	{
		print "<tr><td align=left width=100 nowrap>$rank[$i]</td>\n";
		print "<td align=right width=150 nowrap>";
		$j = $rankno[$i+1] - 1 ;
		if ( $i != $k )	{
			print "$rankno[$i]&nbsp;〜$j&nbsp;回\n";
		}	else	{
			print "$rankno[$i]&nbsp;以上\n";
		}
		print "</td></tr>\n";
		$i++;
	}
	print "</table></center>";
	print "<a href=$script>戻る</a><br><br><br>\n";
	&footer ;															#<<<htmlフッター出力
	exit;
}
###<--------------------------------------------------------------
###<---   Information(アイコン一覧)
###<--------------------------------------------------------------
sub icondisp	{	
	&header ;															#<<<htmlヘッダー出力
	print "<center><br><br>■■■ アイコン一覧 ■■■<br><br>\n";
	print "<table cellpadding=5 cellspacing=0 border=0>\n";
	$i = 0 ; $j = 0 ;
	while ( 1 )	{
		print "<tr>\n";
		for ( $ln = 1 ; $j <= $#icon_gif && $ln <= $icon_line ; ) {
			print "<td align=\"center\"><img src=\"$icon_gif[$j]\" border=0></td>\n";
			print "<td align=\"center\">$iconnm[$j]</td>\n";
			$j++ ; $ln++ ;
		}
		if ( $j > $#icon_gif ) { 
			if ( $ln < $icon_line ) {
				for ( ; $ln <= $icon_line ; ) {
					print "<td align=\"center\">&nbsp;</td>\n";
					print "<td align=\"center\">&nbsp;</td>\n";
					$ln++ ;
				}
			}
			print "</tr>\n";
			last ;
		}
		print "</tr>\n";
		$i++;
	}
	print "</table></center>";
	&footer ;															#<<<htmlフッター出力
	exit;
}
###<--------------------------------------------------------------
###<---   アイコン表示
###<--------------------------------------------------------------
sub icon_set	{	
	#管理者の投稿の場合、管理者用アイコンに置き換える
	$found = 0 ;
	for ( $k = 0 ; $k <= $#oiconnm ; $k++ )	{
		if ( $_[0] eq $oiconnm[$k] )	{
			$found = 1 ;
			print "<img src=\"$oicon_gif[$k]\" border=0>";
			last ;
		}
	}
	if ( $found == 0 )	{
		print "<img src=\"$icon_gif[$icon]\" border=0>";
	}		
}
###<--------------------------------------------------------------
###<---   ファイルロック設定
###<--------------------------------------------------------------
sub filelock {
	foreach (1 .. 5) {
		if (-e $lockfile) { sleep(1); }
		else {
			open(LOCK,">$lockfile");
			close(LOCK);
			return;
		}
	}
	&error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。"); 
}
###<--------------------------------------------------------------
###<---   ファイルロック解除
###<--------------------------------------------------------------
sub fileunlock {
	if (-e $lockfile) { unlink($lockfile); }
}
###<-------------------------------------------------------------
###<---   パスワード暗号化
###<--------------------------------------------------------------
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;
}
