#!/usr/bin/perl

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#+++　　[ ぷりんぷりんく ]
#+++		･････>>> All Created by Tacky
#+++		･････>>> Copyright (c) 1999.7 Tacky's Room. All rights reserved....
#+++        Email    >>> tackysrm@lily.freemail.ne.jp
#+++        Homepage >>> http://tackysroom.com/
#+++
#+++ 設置方法構成(具体例)
#+++
#+++ public_html（ホームページディレクトリ）
#+++ |
#+++ |-- cgi-bin（任意のディレクトリ）
#+++   |
#+++   |-- jcode.pl     (755)…(日本語ライブラリ)
#+++   |-- cgi-lib.pl   (755)…(CGIライブラリ)
#+++   |-- pulinpulink.cgi   (755)…(スクリプト本体)
#+++   |-- pulinpulink.txt   (666)…(ログファイル)…空のままアップロード
#+++   |-- pulinpulink_bak01.txt(666)…(バックアップファイル)…空のままアップロード
#+++   |-- pulinpulink_bak02.txt(666)…(バックアップファイル)…空のままアップロード
#+++   |--    〜
#+++   |-- pulinpulink_bakxx.txt(666)…(バックアップファイル)…空のままアップロード
#+++
#+++ 　　■( )内はパーミッッションの値です。
#+++ 　　■gif以外はアスキーモード、gifはバイナリーモードでアップロードして下さい。
#+++ 　　■pulinpulink.lockは自動作成＆削除しますので、各自でご用意する必要はありません。
#+++ 　　■設置時にエラーになる方は、各ファイルの指定をフルパス(http://〜)で指定してみて下さい。
#+++ 　　■バックアップファイルは、世代分（３日間分であれば、〜bak01.txtから〜bak03.txtの３個）作成してください。
#+++
#+++ >>> Update-History...
#+++
#+++	2006.06.05(Ver0.87)  >>　$urllink=2の時、$urerrnm[1]以降がエラーになりませんでした
#+++    2006.05.26(Ver0.86 ) >>  セキュリティ機能追加
#+++                             ランキングページでバナー画像が表示されない不具合を修正
#+++                             タグを許可した場合にタグが許可されていなかった不具合を修正
#+++    2005.02.14(Ver0.855) >>  全角文字で検索出来ないバグを修正
#+++    2005.01.15(Ver0.854) >>  投稿禁止アドレスの設定項目を追加。管理人以外投稿禁止の場合、管理人パスワードチェックを追加
#+++    2004.07.12(Ver0.853) >>  スクロール機能にバグ
#+++    2004.07.10(Ver0.852) >>  大変申し訳ありません。エラーとなるソースをアップロードしていました。
#+++    2004.06.22(Ver0.851) >>  ログが壊れる場合がある重大バグを修正。
#+++    2004.06.14(Ver0.85)  >>  画像アップロードに対応（バナーアドレスかどちらか一方しか設定出来ません）
#+++    2004.03.03(Ver0.849) >>  セキュリティ対応
#+++    2003.04.17(Ver0.848) >>  オススメを設定していないのに「オススメ０．５星」が選択されているバグを修正
#+++    2001.06.02(Ver0.847) >>  サイトに飛ばない事がある不具合を修正
#+++    2001.04.29(Ver0.846) >>  管理者以外が登録しようとした場合「オススメは登録出来ません」のエラーになり登録出来ないバグ修正。
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

require './jcode.pl';										#日本語コード変換
require './cgi-lib.pl';

$script			= './linklink.cgi';						#このＣＧＩの名前を指定
$logfile		= './link.txt';						#ログファイルの名前を指定
$lockfile		= './link.lock';						#ロックファイルの名前を指定（修正不要）

$backfile		= './link_bak';						#バックアップファイルの名前を指定　※拡張子不要！※バックアップ取らない方は、$backfile='';としてね
#▼何世代（何日間分）バックアップ取りますか？　余り大きい値にするとサーバー容量少なくなっちゃうよ。
#　※常に一番古い更新日付のバックアップファイルに自動で保存していきます。
#　※バックアップファイルは、上記の「$backfile」＋２桁の数字＋「.txt」というファイルを作成し、アップロードしてください。
#　　$backfile=2の場合は、pulinpulink_bak01.txtとpulinpulink_bak02.txtの２個という事になります。
$backcnt		= 2;

$url			= '../index.html';					#戻り先ＵＲＬを指定
$textcolor		= '#000000';								#テキストカラー
$linkcolor		= '#006666';								#未訪問リンク
$alinkcolor		= '#ffff00';								#アクティブリンクカラー
$vlinkcolor		= '#336633';								#訪問済リンク
$pt				= '11pt';									#フォントサイズ

#↓カテゴリーを設定します。[0]は修正しないで下さいね。
#　カテゴリーを増やしたい場合は[12].[13]....[20]のように追加して下さいね。
$sinchaku		= '10' ;									#新着情報を何件表示させるか？

#管理人以外の登録を認める？
$kanrisw		= 'no';		#yes,no

#いきなりGo機能は使用する？
$ikinarisw		= 'yes';		#yes,no

$CATEGORY[0]	= '新着サイト';
$CATEGORY[1]	= '各教科の勉強';
$CATEGORY[2]	= '勉強方法紹介';
$CATEGORY[3]	= '受験生の集まり';
$CATEGORY[4]	= '大学・予備校';
$CATEGORY[5]	= '営利目的（受験）';
$CATEGORY[6]	= 'その他（受験関連）';
$CATEGORY[7]	= '管理人の友人';
$CATEGORY[8]	= 'スペシャルサンクス';
$CATEGORY[9]	= '管理人オススメ';
$CATEGORY[10]	= 'その他';

$title			= '18 road リンク集';					#タイトルを指定
$titlelogo		= '18 road リンク集';						#タイトル画像を指定
$bgcolor		= '#CDD542';								#背景色を指定
$backpicture	= '';										#背景画像を指定（使用しない場合は、''で良い)

$frmtopcolor	= '#CE6322';									#ウインドウ上部の「カテゴリー変更・検索」のテーブル背景色
$frmtoptxcolor	= '#ffffff';								#ウインドウ上部の「カテゴリー変更・検索」のテーブル文字色

$frmbgcolor		= '#cc6600';								#入力フォームの背景色を指定
$frmtxcolor		= '#ffffff';								#入力フォームの文字色を指定

#↓管理者が登録した場合の「ログ表示部分色設定」
#┏━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃　┃　　　２　　　　　　　　　　　　　　　　　　　　┃
#┃１┣━━━━━━━━━━━━━━━━━━━━━━━━┫
#┃　┃　　　３　　　　　　　　　　　　　　　　　　　　┃
#┗━┻━━━━━━━━━━━━━━━━━━━━━━━━┛
#「１」の部分の色
$tblbgcolor1_k	= '#CC6633';								#ログ見出しの背景色を指定
#「２」の部分の色
$tblbgcolor2_k	= '#E1DEB0';								#ログ表示部分の背景色を指定
$tbltxcolor2_k	= '#000000';								#ログ表示部分の文字色を指定
#「３」の部分の色
$tblbgcolor3_k	= '#ffffff';								#ログ表示部分の背景色を指定
$tbltxcolor3_k	= '#000000';								#ログ表示部分の文字色を指定

#↓管理者以外が登録した場合の「ログ表示部分色設定」
#┏━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
#┃　┃　　　２　　　　　　　　　　　　　　　　　　　　┃
#┃１┣━━━━━━━━━━━━━━━━━━━━━━━━┫
#┃　┃　　　３　　　　　　　　　　　　　　　　　　　　┃
#┗━┻━━━━━━━━━━━━━━━━━━━━━━━━┛
#「１」の部分の色
$tblbgcolor1_v	= '#669900';								#ログ見出しの背景色を指定
#「２」の部分の色
$tblbgcolor2_v	= '#DEE792';								#ログ表示部分の背景色を指定
$tbltxcolor2_v	= '#000000';								#ログ表示部分の文字色を指定
#「３」の部分の色
$tblbgcolor3_v	= '#ffffcc';								#ログ表示部分の背景色を指定
$tbltxcolor3_v	= '#000000';								#ログ表示部分の文字色を指定

$linkbanner		= 'no';									#バナー表示でのリンクを可能とする(yes,no)
$password 		= 'teruzo';							#メンテナンス用パスワード
$datamax		= 500 ;										#最大データ保存件数
$pagemax		= 20 ;										#１ページ内に表示する件数

$target			= '_blank';									#リンク先を表示する際のTARGET指定
#※但し、「いきなりGO!」は常にtarget=_blankです。

$sougo_gif		= './sougo.gif';			#相互リンクの場合に使用する画像を指定。

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

#リンクバナーを固定幅で表示したい場合、以下を設定して下さい。
#どんな幅でもオッケーの場合、以下の$banner_wと$banner_hは
#$banner_w = '';と$banner_h = '';としてね。
$banner_w			= '200' ;		#バナーの横幅(Pixel)
$banner_h			= '40'  ;		#バナーの縦幅(Pixel)

#■■■<--- ↓2000.1.22(Ver0.74)からの追加機能
$word_next		= 'NEXT!';			#次画面スクロールする場合のボタンに表示する文字
$word_back		= 'BACK!';			#前画面スクロールする場合のボタンに表示する文字
#■■■<--- ↑2000.1.22(Ver0.74)からの追加機能

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

#■■■<--- ↓2001.3.4(Ver0.82)からの追加機能
$tsz			= '500';									#詳細表示（通常時）ログ表示部のテーブル幅。％またはピクセル
$tsz2			= '70%';									#簡易表示時のログ表示部のテーブル幅。％またはピクセル

$centflg		= 0 ;										#バナー（またはタイトル）のテーブル内の表示位置は？(0:LEFT 1:CENTER 2:RIGHT)
$areaflg		= 0 ;										#入力フォームに「発信地」は必要？(0:no 1:yes)
$kanriflg		= 1 ;										#入力フォームに「管理人」は必要？(0:no 1:yes)
$sougoflg		= 1 ;										#入力フォームに「相互リンク」は必要？(0:no 1:yes)

$textflg		= 2 ;										#<<<メッセージ欄の形状。（1:１行テキスト　2:複数行テキスト）
$col			= 50 ;										#<<<メッセージ欄の文字数
$row			= 5 ;										#<<<メッセージ欄の行数※１行テキストの場合は対象外

$hometarget		= '_top';									#HOMEに戻る際のリンクTARGET指定

$bdcolor		= "#000000";								#<<<ログ表示部のテーブル外枠罫線の色

$countflg		= 1 ;										#<<<ＨＰの参照数をカウントする？(0:no 1:yes)

$rankcnt		= 30 ;										#<<<ランキング何位まで表示しますか？

#フォームＣＳＳ設定　("EOM"〜EOMの間にメッセージを書いてください）
#※使用しない場合は、$css_style = "";とし、そこから２行(先頭がEOMの行までを)を削除して下さい。
$css_style = <<"EOM";
STYLE=font-size:$pt;color:#0f642d;background-color:#ffffcc;border-style:solid;border-color:#666666;border-width:1;
EOM

#フォームＣＳＳ設定　("EOM"〜EOMの間にメッセージを書いてください）　※画面上部のカテゴリー選択・検索部分のみに設定されます。
$css_style2 = <<"EOM";
STYLE=font-size:11pt;color:#000000;background-color:#ffffff;border-style:solid;border-color:#4d9900;border-width:1;
EOM

$damedame		= 0 ;	#Locationヘッダが使えないサーバーは1。通常は0でいいはず。※トクトク、3nopage,WinNTサーバー等が1かな。

#=============================================================================================================================================================================================
#タイトルの下にメッセージを表示出来ます。("EOM"の次の行〜EOMの前の行の間にメッセージを書いてください。タグ使ってオッケーです。）
#※使用しない場合は、$head_comment = "";とし、その下の行から先頭がEOMの行迄を削除して下さい。
$head_comment = <<"EOM";
現在，ゲストの方のリンク登録を制限しております，ご迷惑をおかけします。リンク希望の方は<a href="http://18road.com/about.html#mail">管理人までご連絡を</a>。<br>こちらにリンクをはりたい方は<a href="http://18road.com/about.html#link">このウェブサイトの説明</a>をお読みください。<br>（＊サイトの内容そのもの、もしくはカテゴリ分けが不適切な場合は削除します）<br>（＊18 roadは<b>リンク先のWebサイトの内容については責任を負いません。</b>）
EOM

#=============================================================================================================================================================================================

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Sendmailが使える方のみ以下の項目を設定して下さい。
#    ※Sendmailとは？
#　　　メールソフトを立ち上げないで、指定した相手にメールを送る事が出来る機能です。
#　　　自分のプロバイダーがSendmailに対応しているか、パスはどこ？等は、各自のプロバイダー
#　　　のＨＰでご確認して下さいね。
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#投稿時に管理者にメール送信する場合、sendmailのパスを指定
$sendmail = "/usr/lib/sendmail";
#メール送信先アドレス。（管理者のアドレス）…「＠」の前には必ず「￥」を付けてね。
$smail_address = "telhappy\@ybb.ne.jp";

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

$osusumesw		= 1 ;	#オススメチェックを行いますか？(0:no 1:yes)（ログ表示時に「オススメ」と文字を表示したり画像を表示したり出来ます

$iconsw			= 0 ;	#オススメアイコンパターン(0:文字で「オススメ」 1:オススメ画像を１個だけ使用 2:オススメ画像を複数使う)

$osusumettl		= '<b>管理人オススメ！</b>';	#$iconsw=0の場合のオススメ文章を書いてね。タグ使っても良いっす。

#オススメアイコンとアイコンの名前の指定。追加する場合は$icon_gif[10]...[20]のように適当に増やして下さいね。
#オススメ画像を１個だけ使う($iconsw=1の場合)は、$icon_gif[0]の設定のみ行って下さい。その他は修正不要です。
#その下は、画像サイズ。_wは幅。_hは高さです。わからない場合は_wの方だけ0にしておいてね。
$icon_gif[0] = './ani_105_05.gif' ;		$iconnm[0] = 'オススメ０．５星！！' ;
$icon_gif_w[0] = 60 ; $icon_gif_h[0] = 10 ;
$icon_gif[1] = './ani_105_10.gif' ;		$iconnm[1] = 'オススメ１．０星！！' ;
$icon_gif_w[1] = 60 ; $icon_gif_h[1] = 10 ;
$icon_gif[2] = './ani_105_15.gif' ;		$iconnm[2] = 'オススメ１．５星！！' ;
$icon_gif_w[2] = 60 ; $icon_gif_h[2] = 10 ;
$icon_gif[3] = './ani_105_20.gif' ;		$iconnm[3] = 'オススメ２．０星！！' ;
$icon_gif_w[3] = 60 ; $icon_gif_h[3] = 10 ;
$icon_gif[4] = './ani_105_25.gif' ;		$iconnm[4] = 'オススメ２．５星！！' ;
$icon_gif_w[4] = 60 ; $icon_gif_h[4] = 10 ;
$icon_gif[5] = './ani_105_30.gif' ;		$iconnm[5] = 'オススメ３．０星！！' ;
$icon_gif_w[5] = 60 ; $icon_gif_h[5] = 10 ;
$icon_gif[6] = './ani_105_35.gif' ;		$iconnm[6] = 'オススメ３．５星！！' ;
$icon_gif_w[6] = 60 ; $icon_gif_h[6] = 10 ;
$icon_gif[7] = './ani_105_40.gif' ;		$iconnm[7] = 'オススメ４．０星！！' ;
$icon_gif_w[7] = 60 ; $icon_gif_h[7] = 10 ;
$icon_gif[8] = './ani_105_45.gif' ;		$iconnm[8] = 'オススメ４．５星！！' ;
$icon_gif_w[8] = 60 ; $icon_gif_h[8] = 10 ;
$icon_gif[9] = './ani_105_50.gif' ;		$iconnm[9] = 'オススメ５．０星！！' ;
$icon_gif_w[9] = 60 ; $icon_gif_h[9] = 10 ;

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

#◆◆◆↓セキュリティ◆◆◆
$postchk		= 1;		#投稿時・メンテナンス時のMethodをPOST限定にする場合は１。以外は０。
$urlchk			= 'http://18road.com/link/linklink.cgi';	#ここで指定されたアドレス(CGIの設置アドレスを記入)以外から投稿があった場合をエラーとします。設定しない場合は''

$urllink		= 2 ;		#コメントに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)

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

$tag			= 0 ;					#管理人以外もタグ許可しますか？(0:no 1:yes)

# アップロードディレクトリのパス → パスの最後は / を付けてください。
#※hi-hoの方は、$UpFolder = "$ENV{'HOME'}/html/画像フォルダ名/";として下さいね。
#※Niftyの方は、$UpFoler  = "/homepage/画像フォルダ名/";でたぶん良いかと・・・(^^;;;
#■■画像アップロードを使わない場合は$UPFolder="";と指定して下さい。
$UpFolder = "";

# アップロードディレクトリのＵＲＬパス → パスの最後は / を付けてください。
#※hi-hoの方は、$UpUrl = "../../../ユーザー名/画像フォルダ名/";
#※Niftyの方は、$UpUrl = "http://homepage?.nifty.com/ユーザー名/画像フォルダ名/";でたぶん良いかと・・・(^^;;;
#※画像がCGIフォルダに設置可能なサーバーをご使用の方は上記$UpFolderと同じでいいと思いますわ。
$UpUrl = "./img/";

# 投稿受理最大サイズ (bytes)
# → 例 : 102400 = 100KB
$cgi_lib'maxdata = 204800;

#アップロードファイルの最大表示サイズ（Pixel）。サイズを超えた場合は画像縮小表示。
$MaxWidth	= 200;	#横幅　※必ず指定して下さい。
$MaxHeight	= 40;	#縦幅　※必ず指定して下さい。

$kotei		= 1  ;	#上記MaxWidthとMaxHeightの指定方法を
					#1:縦横比率で縮小表示　2:MaxWidthとMaxHeightの固定サイズで表示

#アップロード可能とするファイル形式。 ※追加可。
@FMT	= ("gif","jpg","jpeg","png");

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

###utime time(), time(), __FILE__; 	#トクトクの人は行頭の###をとってね。

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

if ( $UpFolder && !(-e $UpFolder) ) { &error("画像アップロード先のフォルダ($UpFolder)が存在していません。"); }

###<--- システム日時・時刻取得 ------------------------------------
$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);	$sec  = sprintf("%02d",$sec);
$week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday];
$today= "$year/$month/$mday($week) $hour:$min";

($lasttime) = (stat($logfile))[9];
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($lasttime);
$year = sprintf("%02d",$year + 1900);	$month = sprintf("%02d",$mon + 1);	$day = sprintf("%02d",$day);
$hour = sprintf("%02d",$hour);	$min  = sprintf("%02d",$min);	$sec  = sprintf("%02d",$sec);
$LASTUP = "$year$month$day" ;

&decode ;														#デコード
if ($FORM{'linkchoice'} < 1) { $FORM{'linkchoice'} = 0; }
if ( $FORM{'action'} eq "maintenance" ) {  &Maintenance; }		#"処理"がメンテナンスの場合
if ( $FORM{'action'} eq "update" ) {  &update; }  				#ログ更新処理
if ( $FORM{'action'} eq "regist" ) {  &regist; } 		 		#ログ書き込み処理
if ( $FORM{'action'} eq "link" ) {  &link; }	 		 		#カウント＆URLリンク
if ( $FORM{'action'} eq "rank" ) {  &rank; }	 		 		#ランキング表示
if ( $FORM{'action'} eq "input" ) {  &formproc2; } 		 		#投稿フォーム表示
if ( $FORM{'action'} eq "repairup" ) {  &repairup; } 	 		#バックアップ復旧作業
&header ;														#htmlヘッダー
&formproc ;														#検索フォーム
&view;															#ログ表示
&footer;														#htmlフッター
&footer2;														#htmlフッター

###<--------------------------------------------------------------
###<---   デコード＆変数代入
###<--------------------------------------------------------------
sub decode{
	&ReadParse;
	while (($name,$value) = each %in) {
		if ($name ne "fileupload") {
			&jcode'convert(*value, "sjis", "", "z");
			#タグ処理
			if ($tag == 1) {
		        #危険なタグは禁止!!!
				foreach ( @errtag )	{
					if ($value =~ /<$_(.|\n)*>/i) {	 &error("使用出来ないタグが入力されています");	}
				}
			}	else	{
				$value =~ s/&/&amp;/g;
				$value =~ s/"/&quot;/g;
				$value =~ s/</&lt;/g;
				$value =~ s/>/&gt;/g;
			}
			$value =~ s/\,/&#44;/g;
			$value =~ s/(\r\n){$kaigyo,}/$1/g if ( $kaigyo ) ;
			#改行処理
			if ($name eq $name_comment) {
				$value =~ s/\r\n/<br>/g;
				$value  =~ s/\r|\n/<br>/g;
			} else {
				$value =~ s/\r//g;
				$value =~ s/\n//g;
			}
			foreach ( @errword )	{
				if ( $_ && $value =~ /$_/) {
					&error("投稿禁止単語が入力されていますので投稿出来ません");
				}
			}
			if ( $urllink && ($name eq 'hpkanri' || $name eq 'hptitle' || $name eq 'hpaddress' || $name eq $name_comment )) {
				if ( $urllink == 1 ) {
					if ( $value =~ /tp:\/\//i && $name ne 'hpaddress' ) {
						&error("セキュリティ対策の為、URLは入力出来ません。");
					}
				}	else	{
					foreach $buf ( @urlerrnm ) {
						if ( $value =~ /([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/i ) {
							if ( $3 =~ /$buf/ ) {
								&error("文字「$buf」は、セキュリティ対策の為、入力出来ません。");
							}
						}
					}
				}
			}
		}
		$FORM{$name} = $value;
	}
	if ($ENV{'REQUEST_METHOD'} eq "POST") {$post=1;} else { $post=0; }

	if ( $FORM{'action'} eq 'regist' || $FORM{'action'} eq 'maintenance' ||
		 $FORM{'action'} eq 'update' || $FORM{'action'} eq 'repairup' )	{
		if ( $postchk && !$post )	{	&error("不正な投稿です。");	}
		if ( $urlchk && $ENV{HTTP_REFERER} !~ /$urlchk/i )	{	exit;	}
	}
	$FORM{$name_comment} =~ s/\r\n/<br>/g;	$FORM{$name_comment} =~ s/\r|\n/<br>/g;
	$FORM{'hpaddress'}   =~ s/^(https?)\:\/\///;	$FORM{'banner'}   =~ s/^(https?)\:\/\///;
}
###<--------------------------------------------------------------
###<---   ログファイル読み込み
###<--------------------------------------------------------------
sub dataread {
	if ( !(open(IN,"$logfile")))	{	&error("ログファイルのオープンに失敗しました");	}
	@data = <IN>;
	close(IN);
	$word = $FORM{'word'};
	@FINDTBL = split(/ /,$word);			#検索文字列
	foreach ( @data )	{
		($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$_);
		if ( $FORM{'linkchoice'} == $ctgr || $FORM{'linkchoice'} == 0 || $FORM{'word'} )	{
			$hpttl2 = $hpttl; $hpcom2 = $hpcom ; $kanri2 = $kanri ;
			$hpttl2 =~ tr/[a-z]/[A-Z]/;	$hpcom2 =~ tr/[a-z]/[A-Z]/;	$kanri2 =~ tr/[a-z]/[A-Z]/;
			if ( $FORM{'word'} || $FORM{'area'} ne '' ) {	#u010425
				$found = 0 ;
				if ( $FORM{'word'} ) {	#u010425
					foreach $buf ( @FINDTBL )	{
						if ( ((index($hpttl2,$buf) >= 0 || index($hpcom2,$buf) >= 0 || index($kanri2,$buf) >= 0) ||
						    ( $areaflg == 1 && $FORM{'area'} != 99 && $FORM{'area'} == $area)) && ($FORM{'linkchoice'} == $ctgr || ($FORM{'linkchoice'} == 0)) )	{	#u010403
							$found = 1 ;
							last ;
						}
					}
				}	else	{
				    if ( ($areaflg == 1 && $FORM{'area'} != 99 && $FORM{'area'} == $area) && ($FORM{'linkchoice'} == $ctgr || ($FORM{'linkchoice'} == 0)) )	{
						$found = 1 ;
					}
				}
				if ( $found == 1 )	{
					push(@CATEGORYLOG,$_);
					$ctgycnt++;
				}
			}	else	{
				$ctgrcnt++;
				if ( ($FORM{'linkchoice'} == 0 && $ctgrcnt <= $sinchaku) ||
					 ($FORM{'linkchoice'} != 0) )  {
					push(@CATEGORYLOG,$_);
				}
			}
		}
		if ( $FORM{'action'} eq 'rank' ) { push(@CATEGORYLOG,$_); }
		$CCNT{$ctgr}++ ;			#カテゴリー毎の登録件数を集計
		if ( $dt ge $updt[$ctgr] )	{
			$updt[$ctgr] = $dt ;
		}
		$GOKEI++ ;
	}
	@CATEGORYLOG = sort @CATEGORYLOG  ;
	@CATEGORYLOG = reverse @CATEGORYLOG  ;

	if ( $backfile && $FORM{'action'} eq '' ) {
		$OLDDATE = 99999999;	$BACKFLG = 0 ;
		foreach  ( 1..$backcnt ) {
			$wk = $backfile . sprintf("%02d",$_)  . ".txt" ;
			(@STATTBL) = stat($wk);
			($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($STATTBL[9]);
			$year = sprintf("%02d",$year + 1900);	$month = sprintf("%02d",$mon + 1);	$day = sprintf("%02d",$day);
			$LASTUP2 = "$year$month$day" ;
			#▼初めてバックアップする時は１個目のバックアップファイルに保存
			if ( $_ == 1 && $STATTBL[7] == 0 ) { $BAKFILE = sprintf("%02d",$_) ; last ; }
			#▼既に当日分バックアップ済
			if ( $LASTUP eq $LASTUP2 ) {	$BACKFLG = 1 ; 	}
			else	{
				#▼一番古いバックアップファイルに対して現状ログファイルをバックアップ
				if ( $OLDDATE gt $LASTUP2 && $found != 2 ) { $OLDDATE = $LASTUP2 ; $BAKFILE = sprintf("%02d",$_) ; }
				if ( $STATTBL[7] == 0 && $found != 2 ) { $BAKFILE = sprintf("%02d",$_) ; $found = 2 ; }
			}
		}
		if ( $BACKFLG == 0 ) {
			&filelock ;
			$wk = $backfile . sprintf("%02d",$BAKFILE)  . ".txt" ;
			if ( !(open(OUT,">$wk")))	{	&fileunlock ;	&error("バックアップファイル($wk)の書き込みに失敗しました");	}
			print OUT @data;
			close(OUT);
			&fileunlock ;	#ファイルロック解除
		}
	}
}
###<--------------------------------------------------------------
###<---   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>$title</title>\n";
	#<<<CSS START>>>
	print "<style type=\"text/css\">\n";
	print "<!--\n";
	print "a:link    {font-size: $pt; text-decoration:none; color:$linkcolor }\n";
	print "a:visited {font-size: $pt; text-decoration:none; color:$vlinkcolor }\n";
	print "a:active  {font-size: $pt; text-decoration:none; color:$alinkcolor }\n";
	print "a:hover   {font-size: $pt; text-decoration:underline; color:$hovercolor; }\n";
	print "body,tr,td { font-size: $pt;}\n";
	if ( $scrollbar ) { print $scrollbar; }
	print "-->\n";
	print "</style>\n";
	#<<<CSS END>>>
		print "<SCRIPT Language=\"JavaScript\">\n";
        print "<!--\n";
        print "function LinkSelect(form, sel)\n";
        print "{\n";
        print " c = sel.selectedIndex\;\n";
        print " adrs = sel.options[c].value\;\n";
        print " if (adrs != \"-\" )\n";
        print " {\n";
        print "  LinkWin=window.open(\"\",\"NewPage\")\;\n";
        print "  LinkWin.location.href=adrs\;\n";
        print " }\n";
        print "}\n";
        print "// -->\n";
        print "</SCRIPT>\n";
	print "</head>\n";
	print "<body bgcolor=$bgcolor background=$backpicture link=$linkcolor alink=$alinkcolor vlink=$vlinkcolor text=$textcolor >\n";

}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer {
	print "<center><br><br>\n";
	if ( $FORM{'action'} ne 'maintenance' && $FORM{'action'} ne 'repair')	{
		print "<form action=\"$script\" method=\"POST\"><hr width=60% size=1 color=#000000>\n";
		print "1ページに&nbsp;<b>$pagemax</b>&nbsp;件\表\示されます。<br>\n";
		if ( $kanrisw eq 'yes' ) {
			print "<font color=$tblbgcolor1_k>■</font>は管理人が、\n";
			print "<font color=$tblbgcolor1_v>■</font>は管理人以外が登録したサイトです。<br>\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 "<input type=hidden name=\"action\" value=\"maintenance\">\n";
		print "<input type=hidden name=\"linkchoice\" value=\"$FORM{'linkchoice'}\">\n";
		print "<select name=proc $css_style>\n";
		if ( $kanrisw ne 'yes' ) {	print "<option value=\"write\">write\n";	}
		print "<option value=\"edit\">edit\n";
		print "<option value=\"delete\">delete\n";
		if ( $backfile ) {	print "<option value=\"repair\">repair\n";	}
		print "</select>\n";
		print "<input type=submit value=\"admin\" $css_style>\n";
		print "<hr width=60% size=1 color=#000000></form>\n";
	}
	print "</center>\n";
}
###<--------------------------------------------------------------
###<---   HTMLフッダー書き出し
###<--------------------------------------------------------------
sub footer2 {
	print "<div align=right><font size=2><a href=http://tackysroom.com/ target=_top>pulinpulink Ver0.87 by Tacky\'s Room</a></font></div>\n";
	print "</body></html>\n";
}
###<--------------------------------------------------------------
###<---   フォーム処理
###<--------------------------------------------------------------
sub formproc {
	&dataread ;														#ログ読み込み
	print "<center>\n";
	if ( $titlelogo ne '' )	{
		print "$titlelogo<br>\n";
	}	else	{
		print "<font color=\"$textcolor\" size=+1><b>$title</b></font><br>\n";
	}
	print "<br><table cellpadding=0 cellspacing=0><tr>\n";
	print "<form action=$url target=$hometarget>\n";
	print "<td><INPUT TYPE=submit VALUE=\"HOME\" $css_style></td></form>\n";
	print "<td nowrap width=10></td>\n";
	if ( $kanrisw eq 'yes' ) {
		print "<form action=$script method=POST>\n";
		print "<input type=hidden name=action value=input>\n";
		print "<td><INPUT TYPE=submit VALUE=\"新規登録\" $css_style></td></form>\n";
	}
	print "<td nowrap width=10></td>\n";
	print "<form action=$script method=POST>\n";
	print "<input type=hidden name=action value=view>\n";
	print "<input type=hidden name=linkchoice value=$FORM{'linkchoice'}>\n";
	print "<input type=hidden name=disppage value=$FORM{'disppage'}>\n";
	print "<input type=hidden name=word value=$FORM{'word'}>\n";
	print "<input type=hidden name=area value=$FORM{'area'}>\n";
	if ( $FORM{'kflg'} eq '' )	{
		print "<input type=hidden name=kflg value=1>\n";
		print "<td><INPUT TYPE=submit VALUE=\"簡易表\示\" $css_style></td></form>\n";
	}	else	{
		print "<td><INPUT TYPE=submit VALUE=\"詳細表\示\" $css_style></td></form>\n";
	}
	print "<td nowrap width=10></td>\n";
	print "<form action=$script method=POST>\n";
	print "<input type=hidden name=action value=rank>\n";
	print "<input type=hidden name=linkchoice value=$FORM{'linkchoice'}>\n";
	print "<td><INPUT TYPE=submit VALUE=\"ランキング\" $css_style></td></form>\n";
	print "</tr></table><br>\n";

	print "<table border=0 cellpadding=0 cellspacing=0>\n";
	print "<tr><td bgcolor=#000000>";
	print "<table border=0 cellpadding=3 cellspacing=1>\n";
	print "<tr><td bgcolor=\"$frmtopcolor\" nowrap>\n";
	print "<form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=linkchoice value=$FORM{'linkchoice'}>\n";
	print "<input type=hidden name=\"action\" value=\"regist\">\n";
	print "<font color=\"$frmtoptxcolor\">カテゴリー&nbsp;&nbsp;</font></td>\n";
	if ( $kanrisw ne 'yes' ) { $dmy = "colspan=2" ; } else { $dmy = "" ; }
	print "<td bgcolor=\"$frmtopcolor\" $dmy>\n";
	print "<select name=list $css_style2 onchange=\"location.href=this.form.list.options[this.form.list.selectedIndex].value\">\n";
 	$i = 0;
	foreach ( @CATEGORY ) {
		($title) = split(/,/,$_);
		if ($i == $FORM{'linkchoice'}) { $dummy = 'selected' } else { $dummy = '' }
		print "<option $dummy value=\"$script?linkchoice=$i&kflg=$FORM{'kflg'}\">";
		$ccount  = sprintf("%03d",$CCNT{$i});
		if ( $i == 0 )	{					#新着情報の場合
			print "◆【$title】◆　...総登録件数：$GOKEI件</option>\n";
		}	elsif ( $updt[$i] )	{			#最終更新日が入っている場合
			print "■$ccount件 --\>&nbsp;【$title】</option>\n";
		}	else	{						#最終更新日が入っていない場合(カテゴリー内０件))
			print "■$ccount件 --\>&nbsp;【$title】</option>\n";
		}
		$i++;
	}
	print "</select></td></form>\n";
	print "</tr>\n";
	print "<form action=\"$script\" method=\"POST\">\n";
	print "<tr><td nowrap bgcolor=\"$frmtopcolor\">\n";
	print "<input type=hidden name=linkchoice value=$FORM{'linkchoice'}>\n";
	print "<input type=hidden name=\"kflg\" value=\"$FORM{'kflg'}\">\n";
	print "<font color=\"$frmtoptxcolor\">文字検索</font></td>\n";
	print "<td nowrap bgcolor=\"$frmtopcolor\"><input type=text size=30, name=word value=\"$FORM{'word'}\" $css_style>";
	if ( $areaflg == 1 )	{
		print "&nbsp;or&nbsp;\n";
		&areaset(0) ;
	}
	print "&nbsp--><input type=submit name=button value=\"検索\" $css_style><br><font size=2>▲カテゴリー選択時はそのカテゴリー内での検索。<br>新着サイト選択時は全サイト検索　※半角スペースで複数指定可</font>\n";
	print "</td></tr></form></table>\n";
	print "</td></tr></table>\n";
	print "<br>$head_comment" if ( $head_comment ) ;
}
###<--------------------------------------------------------------
###<---   フォーム処理
###<--------------------------------------------------------------
sub formproc2 {
	&header ;														#htmlヘッダー
	print "[<A HREF=\"JavaScript:history.back()\">BACK</A>]<br>\n";
	print "<center>\n";
	if ( $titlelogo ne '' )	{
		print "$titlelogo<br><br>\n";
	}	else	{
		print "<font color=\"$textcolor\" size=+1><b>$title</b></font><br><br>\n";
	}
	if ( $FORM{'action'} eq 'maintenance' && $FORM{'proc'} eq 'edit')	{
		print "<font color=\"$frmtxcolor\" size=+1>|||||　修正フォーム　|||||</font><br>\n";
	}	else	{
		print "<font color=\"$frmtxcolor\" size=+1>|||||　登録フォーム　|||||</font><br>\n";
	}
	print "<form name=inputform action=$script method=POST enctype=\"multipart/form-data\">\n";
	if ( $FORM{'action'} eq 'maintenance' && $FORM{'proc'} eq 'edit')	{
		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=\"$FORM{'no'}\">\n";
		print "<input type=hidden name=\"pass\" value=\"$FORM{'pass'}\">\n";
	}	else	{
		print "<input type=hidden name=\"action\" value=\"regist\">\n";
		print "<input type=hidden name=\"pass\" value=\"$FORM{'pass'}\">\n" if ( $FORM{'proc'} eq 'write' ) ;	#i050115
	}
	print "<input  type=hidden name=\"linkchoice\" value=$FORM{'linkchoice'}>\n";

	print "<table border=0 cellpadding=0 cellspacing=0 bgcolor=$bdcolor>\n";
	print "<tr><td>\n";
	print "<table border=0 cellpadding=5 cellspacing=1>\n";
	print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■カテゴリー</font></td>\n";
	print "<td bgcolor=\"$frmbgcolor\">\n";
	print "<select name=category $css_style>\n";
	$i = 0 ;
	foreach ( @CATEGORY ) {
		($title) = split(/,/,$_);
		if ( $i != 0 )	{							#「新着情報」についての登録は不可
			if ( $i == $c_category) { $dummy = 'selected' } else { $dummy = '' }
			print "<option $dummy value=$i>$title</option>\n";
		}
		$i++;
	}
	print "</select></td></tr>\n";
	print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■タイトル</font></td>\n";
	print "<td bgcolor=\"$frmbgcolor\"><input type=text size=40, name=hptitle value=\"$c_hpttl\" $css_style></td></tr>\n";
	print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■アドレス</font></td>\n";
	print "<td bgcolor=\"$frmbgcolor\"><input type=text size=40, name=hpaddress value=\"http://$c_hpadr\" $css_style></td></tr>\n";
	if ( $kanriflg == 1 )	{
		print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■管理人</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\"><input type=text size=40, name=hpkanri value=\"$c_hpkanri\" $css_style></td></tr>\n";
	}
	print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■コメント</font></td>\n";
	print "<td bgcolor=\"$frmbgcolor\">\n";
	$c_hpcom =~ s/&amp;/&/g;
	if ( $textflg != 1 )	{
		print "<textarea name=\"$name_comment\" cols=$col rows=$row $css_style>$c_hpcom</textarea>";
	}	else	{
		print "<input type=text name=\"name_comment\" size=$col value=\"$c_hpcom\">\n";
	}
	print "</td></tr>\n";
	if ( $areaflg == 1 )	{
		print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■発信地</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\">\n";
		&areaset(1) if ( $areaflg == 1 ) ;
		print "</td></tr>\n";
	}
	if ( $sougoflg == 1 )	{
		print "<tr><td bgcolor=\"$frmbgcolor\"><font color=\"$frmtxcolor\">■相互リンク</font></td>\n";
		if ( $c_sougo )	{	$dmy = "checked" ;	}	else	{	$dmy = "" ;	}
		print "<td bgcolor=\"$frmbgcolor\"><input type=checkbox name=sougo value=1 $dmy>&nbsp;<font color=\"$frmtxcolor\">相互リンクしている場合にチェック</font></td></tr>\n";
	}
	if ( $FORM{'action'} ne 'maintenance' )	{
		print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■パスワード</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\"><input type=password size=8, name=pass value=\"$c_pass\" $css_style><font color=\"$frmtxcolor\">(修正・削除に使用)</font></td></tr>\n";
	}
	if ( $osusumesw == 1 )	{
		print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\">■オススメ</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\">";
		if ( $iconsw == 2 ) {
			print "<select name=osusume $css_style>\n";
			if ( $c_osusume eq '' ) { $dmy = "selected"; } else { $dmy = ""; }
			print "<option value=\"\" $dmy>指定無し\n";	#u010405
			foreach ( 0..$#icon_gif )	{
				if ( $c_osusume ne '' && $c_osusume == $_ ) { $dmy = "selected"; } else { $dmy = ""; }	#i010429
				print "<option value=$_ $dmy>$iconnm[$_]\n";
			}
			print "</select>\n";
		}	else	{
			if ( $c_osusume == 1 ) { $dmy = "value=1 checked"; } else { $dmy = ""; }
			print "<input type=checkbox name=osusume $dmy $css_style><font color=\"$frmtxcolor\">※管理人以外はチェック出来ません。</font>";
		}
		print "</td></tr>\n";
	}
	if ( $linkbanner eq 'yes' )	{
		print "<tr><td bgcolor=\"$frmbgcolor\" nowrap><font color=\"$frmtxcolor\" >■バナーアドレス</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\" nowrap><input type=text size=40, name=banner value=\"http://$c_banner\" $css_style></td></tr>\n";
	}
	#アップロードフォルダが指定されている場合
	if ( $UpFolder ) {
		print "<tr><td bgcolor=\"$frmbgcolor\" valign=top>\n";
		print "<font color=\"$frmtxcolor\">■アップロード</font></td>\n";
		print "<td bgcolor=\"$frmbgcolor\">";
		print "<input type=file name=\"fileupload\" size=56 $css_style>\n";
		print "<font color=\"$frmtxcolor\"><br>▲バナーアドレス、ファイルアップロードの片方しか設定出来ません。</font>\n";
		if ( $c_upload ) {
			print "<br><font color=\"$frmtxcolor\">▲現在【&nbsp;<b>$c_upload</b>&nbsp;】が設定されています。<br>そのままで良い場合は何も入力しないで下さい</font>\n";
			if ( $c_upload =~ /gif|jpg|png/i ) { print "<br><img src=\"$c_upload\">\n"; }
		}
		print "<br><font color=\"$frmtxcolor\">▲アップロードファイルは最大" . int($cgi_lib'maxdata / 1024) . "kb迄ですのでご注意下さい。<br>\n";
		print "幅：$MaxWidth" . "Pixel、高さ：$MaxHeightを超える場合は画像は縮小表\示されます<br>\n";
		print "▼アップロード可能\なファイル形式<br>【&nbsp;";
		foreach ( 0..$#FMT){
			if ( $_ == $#FMT ) {
				print $FMT[$_] ;
			} else {
				print $FMT[$_] . "&nbsp;,&nbsp;" ;
			}
		}
		print "&nbsp;】</font></td></tr>\n";
	}
	print "<tr><td colspan=2 bgcolor=\"$frmbgcolor\" align=\"center\">\n";
	print "<input  type=submit name=button value=\"登録します\" $css_style>&nbsp;&nbsp;&nbsp;\n";
	print "<input type=reset value=\"もう一度入力\" $css_style></td></tr></table>\n";

	print "</td></tr></table></form></center>\n";

	if ( $FORM{'action'} eq 'maintenance' )	{
		print "<SCRIPT Language=JavaScript>\n";
		print "<!--\n";
		print "document.inputform.hptitle.focus();\n";
		print "// -->\n";
		print "</SCRIPT>\n";
	}
	&footer2;														#htmlフッター
	exit;
}
###<--------------------------------------------------------------
###<---   データ表示
###<--------------------------------------------------------------
sub view {

	#表示対象ページの先頭データ件数を算出
	$total = @CATEGORYLOG;
	if ( $total % $pagemax == 0) {	$p = $total / $pagemax ;	}
	else	{	$p = $total / $pagemax + 1;	}
	$p = sprintf("%3d",$p);
	if ( $FORM{'disppage'} ) {	$d = $FORM{'disppage'} * $pagemax - $pagemax ; 	}
	else	{	$d = 0	;	$FORM{'disppage'} = 1 ;	}

	print "<center><br>\n";
	if ( $ikinarisw eq 'yes' ) {
		print "<table width=\"80%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		print "<form action=\"$script\" method=\"POST\">\n";
		print "<tr><td align=\"center\">\n";
		$c = $#CATEGORYLOG ;
		if ( $c > 0 ) {
			print "<select name=shorturl onChange=\"LinkSelect(this.form, this)\">\n";
			$i = 0 ;
			foreach ( @CATEGORYLOG ) {
				($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$CATEGORYLOG[$i]);
				print "<option value=\"http://$hpadr\">$hpttl</option>\n";
				$i++ ;
			}
			print "</select>\n";
		}
		print "</td></tr><tr><td><br><hr size=1 color=#000000></td></tr></form></table><br>\n";
	}

	if ( $p == 0 ) { $p = 1; }

	if ( $FORM{'linkchoice'} == 0 && $FORM{'word'} eq '') {
		print "<font color=\"red\">新着サイトを$sinchaku件\表\示しています</font><br>\n";
	}
	if ( $FORM{'word'} )	{
		if ( $#CATEGORYLOG + 1 <= 0 ) {
			print "<br><br><br>指定した文字列に該当する記事はありませんでした。<br><br><br>\n";
		}	else	{
			print "<br><b>$total</b>&nbsp;件見つかりました<br>\n";
		}
	}

	$z = 1 ;
	for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $total ); $i++ )	{
		($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$CATEGORYLOG[$i]);
		$osusume =~ s/\n//g;		$imgfile =~ s/\n//g;
		&colorset ;		#セル背景色の設定
		print "<br>\n";
		if ( $FORM{'linkchoice'} == 0 ) {
			print "$CATEGORY[$ctgr]<br>\n";
		}
		if ( $areaflg == 1 && $kanri && $countflg == 1 )	{	$dmy = "colspan=3"; }
		elsif ( ($areaflg == 1 && ($kanri || $countflg == 1 )) || ($areaflg == 0 && ($kanri && $countflg == 1 )) )  { $dmy = "colspan=2"; }
		else { $dmy = ""; }
		if ( $areaflg == 0 && !($kanri) && $countflg == 0 )	{	$dmy4 = "rowspan=2"; } else { $dmy4 = "rowspan=3"; }
		if ( !($FORM{'kflg'}) )	{
			print "<table width=\"$tsz\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		}	else	{
			print "<table width=\"$tsz2\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		}
		print "<tr><td bgcolor=$bdcolor>";
			if ( !($FORM{'kflg'}) )	{
				print "<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\">\n";
				print "<tr><td $dmy4 bgcolor=\"$tblbgcolor1\" valign=\"middle\">\n";
				print "&nbsp;</td>\n";
				if ( $centflg == 0 ) { $dmy5 = "align=left"; }
				elsif ( $centflg == 1 ) { $dmy5 = "align=center"; }
				else { $dmy5 = "align=right"; }
			    print "<td width=\"100%\" $dmy bgcolor=\"$tblbgcolor2\" height=30 $dmy5>\n";

				if ( $banner eq '' )	{
					if ( $imgfile eq '' ) {
						print "<font size=+1>";
						if ( $countflg == 0 ) {
							print "<a href=\"http://$hpadr\" target=$target>";
						}	else	{
							print "<a href=\"$script?action=link&no=$no&url=$hpadr\" target=$target>";
						}
						print "$hpttl</a></font>\n";
					}	else	{
						if ( $imgfile !~ /http/i )	{
							if ( $imgfile =~ /gif/i ) {	($W,$H) = &GIFSizeGet("$UpFolder$imgfile") ;}
							if ( $imgfile =~ /jpg/i ) {	($W,$H) = &JPGSizeGet("$UpFolder$imgfile") ;}
							if ( $imgfile =~ /png/i ) {	($W,$H) = &PNGSizeGet("$UpFolder$imgfile") ;}
							$imgfile = "$UpUrl$imgfile" ;
						}	else	{
							$W = 999;$H = 999;
						}
						# 画像表示縮小
						$WS = $W ; $HS = $H ;
						if ( $kotei == 1 )	{
							if ($W > $MaxWidth || $H > $MaxHeight) {
								$W2 = $MaxWidth / $W;	$H2 = $MaxHeight / $H;
								if ($W2 < $H2) { $sv = $W2; } else { $sv = $H2; }
								$W = int ($W * $sv); $H = int ($H * $sv);
							}
						}	else	{
							$W = $MaxWidth;
							$H = $MaxHeight;
						}
						if ( $countflg == 0 ) {
							print "<a href=\"http://$hpadr\" target=$target>";
						}	else	{
							print "<a href=\"$script?action=link&no=$no&url=$hpadr\" target=$target>";
						}
						print "<img src=\"$imgfile\" border=0 width=$W height=$H vspace=2 hspace=5 alt=\"$hpttl\"></a>\n";
					}
				}	else	{
					if ( $banner_w ) { $dmy1 = "width=$banner_w"; } else { $dmy1 = ""; }
					if ( $banner_h ) { $dmy2 = "height=$banner_h"; } else { $dmy2 = ""; }
					if ( $countflg == 0 ) {
						print "<a href=\"http://$hpadr\" target=$target>";
					}	else	{
						print "<a href=\"$script?action=link&no=$no&url=$hpadr\" target=$target>";
					}
					print "<img src=\"http://$banner\" border=0 $dmy1 $dmy2 vspace=2 hspace=5 alt=\"$hpttl\"></a>\n";
				}

				print "</td></tr>";
				if ( $areaflg == 1 || $kanri || $countflg == 1 ) {
					print "<tr>";
					if ( $areaflg == 1 )	{
						print "<td bgcolor=\"$tblbgcolor2\"0>";
						print "<font color=\"$tbltxcolor2\">発信地：&nbsp;$areatbl[$area]</font></td>\n";
					}
					if ( $kanri ) {
			    		print "<td bgcolor=\"$tblbgcolor2\">";
						print "<font color=\"$tbltxcolor2\">管理人：&nbsp;$kanri</font></td>\n" if ( $kanri ) ;
					}
					if ( $countflg == 1 ) {
			    		print "<td bgcolor=\"$tblbgcolor2\" align=right>";
						print "<font color=\"$tbltxcolor2\">参照数：&nbsp;<b>$look</b>回</font>\n" ;
					}
					print "</tr>\n";
				}
				print "<tr><td $dmy bgcolor=\"$tblbgcolor3\"><font color=\"$tbltxcolor3\">";
				if ( $osusumesw != 0 && $osusume ne '')	{	#u010405
					if ( $iconsw == 0 ) {
						print "$osusumettl<br>\n";
					}	else	{
						if ( $icon_gif_w[$osusume] != 0 ) { $dmy = "width=\"$icon_gif_w[$osusume]\" height=\"$icon_gif_h[$osusume]\"" ; } else { $dmy = "" ; }
						print "<img src=$icon_gif[$osusume] $dmy><br>\n" ;
					}
				}
				$hpcom =~ s/&amp;/&/g;
				print "$hpcom</font>";
				print "<br><div align=right>";
				print "<font color=\"$tbltxcolor3\" size=2>$dt..No.[$no]</font>\n";
				if ( $sougo )	{	print "<img src=\"$sougo_gif\" border=0 align=absmiddle>";	}
	    		print "</div></td></tr></table>\n";
			}	else	{
				print "<table width=\"100%\" border=\"0\" cellpadding=\"5\" cellspacing=\"1\">\n";
				print "<tr><td bgcolor=\"$tblbgcolor2\" width=40% nowrap><font color=\"$tbltxcolor2\">■</font>\n";
				print "<font size=+1>";
				if ( $countflg == 0 ) {
					print "<a href=\"http://$hpadr\" target=$target>";
				}	else	{
					print "<a href=\"$script?action=link&no=$no&url=$hpadr\" target=$target>";
				}
				print "$hpttl</a></font></td>\n";
				$hpcom =~ s/&amp;/&/g;
				print "<td bgcolor=\"$tblbgcolor2\"><font color=\"$tbltxcolor2\">$hpcom</font>";
				print "<br><div align=right><font color=\"$tbltxcolor2\" size=2>$dt..No.[$no]</font></div></td></tr></table>\n";

			}
		print "</td></tr></table>\n";
		$z++;
	}
	print "</center>\n";
	&scrl ;
}
###<--------------------------------------------------------------
###<---   ログファイル出力
###<--------------------------------------------------------------
sub regist {
		&hostchk;
		if ( $maxword ne '' && (length($FORM{$name_comment}) > $maxword))	{	&error("メッセージは$maxword文字までしか登録出来ません。");	}
		if ($FORM{'hptitle'} eq '' )	{	&error("ホームページのタイトルを書いて下さい");	}
		if ($FORM{'hpaddress'} eq '' )	{	&error("ホームページのアドレスを書いて下さい");	}
		if ($FORM{$name_comment} eq '' )	{	&error("ホームページの紹介文を書いて下さい");	}
		if ( $urlcnt ) {
			$urlnum = ($FORM{$name_comment} =~ s/(h?ttp)/$1/ig);
			if ( $urlnum > $urlcnt ) { &error("URLは" . ($urlcnt + 1) . "個以上は記入出来ません"); }
		}
		# URLと同じものが本文にあったら宣伝
		if ($FORM{'hpaddress'}){
			if ( $FORM{$name_comment} =~ /$FORM{'hpaddress'}/) {
				&error("宣伝投稿と見なされますので投稿出来ません");
			}
		}
		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 ( $FORM{'banner'} ne '' && $FORM{'fileupload'} ne '' )	{
			&error("バナーアドレス又はファイルアップロードのどちらか一方しか設定出来ません。");
		}
		if ( $FORM{'osusume'} ne '' && $FORM{'pass'} ne $password )	{
			&error("管理者以外は、「管理者オススメ」の登録は出来ません。");
		}
		if($kanrisw eq 'no' && $FORM{'pass'} ne $password ) {					#i050115
			&error("パスワードが違います。");									#i050115
		}																		#i050115

		&filelock ;	#ファイルロック
		&dataread ;														#ログ読み込み
		$cnt = @data ;
		foreach $buf ( @data )	{
			($dt,$category,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$hpkanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$buf);
			if ( $FORM{'hpaddress'} eq $hpadr )	{	&fileunlock ;	&error("既に登録されています。");	}
		}
		if ($cnt >= $datamax) {	&fileunlock ;	&error("設定最大件数を超えた為、登録出来ません。");	}
		if ( $cnt > 0 )	{
			($dmy,$dmy,$dmy,$dmy,$dmy,$dmy,$dmy,$dmy,$dmy,$no,$s,$look,$dmy) = split(/,/,$data[0]);
			$no++ ;
		}	else	{
			$no = 1 ;
		}
		# ファイル添付処理
		$ImgFile = "";
		if ($FORM{'fileupload'}) { &fileupload; }
		# パスワードの暗号化（crypt関数使用））
		if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); }	else	{ $pass = '' ; }
		unshift(@data,"$today,$FORM{'category'},$FORM{'hptitle'},$FORM{'hpaddress'},$FORM{$name_comment},$FORM{'area'},$FORM{'banner'},$pass,$FORM{'hpkanri'},$no,$FORM{'sougo'},0,$FORM{'osusume'},$ImgFile\n");
		if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
		print OUT @data;
		close(OUT);
		if ( $sendmail ) { &SMail ;	}
		&fileunlock ;	#ファイルロック解除
		if ( $damedame == 0 )	{
			print "Location: $script?linkchoice=$FORM{'category'}?\n\n";
		}	else	{
			print "Content-type: text/html\n\n";
			print "<html><head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=";
			print "$script?linkchoice=$FORM{'category'}\"></head><body></body></html>\n\n";
		}
		exit;
}
###<--------------------------------------------------------------
###<---   メンテナンスモード
###<--------------------------------------------------------------
sub Maintenance {
	if ( $FORM{'pass'} eq "")	{	&error("パスワードを入力して下さい。");	}
	&hostchk;
	if ( $FORM{'proc'} eq 'write' || $FORM{'proc'} eq 'repair' ) {
		if ( $FORM{'pass'} ne $password )	{	&error("パスワードが違います。");	}
		if ( $FORM{'proc'} eq 'write' ) {
			&formproc2 ;
		}	else	{
			&header ;
			print "[<a href=$script>BACK</a>]\n";
			print "<center><br>";
			print "<font size=+1><b>現在のバックアップファイルの状態</b></font>\n";
			print "<br><br><table cellcpacing=10 cellpadding=5>\n";
			print "<tr><td bgcolor=#ffffcc align=center>バックアップファイル名</td>";
			print "<td bgcolor=#ffffcc align=right>ファイルサイズ</td>\n";
			print "<td bgcolor=#ffffcc align=center>最終更新日</td>\n";
			print "<td bgcolor=#ffffcc align=center>処理</td></tr>\n";
			foreach  ( 1..$backcnt ) {
				$wk = $backfile . sprintf("%02d",$_)  . ".txt" ;
				(@STATTBL) = stat($wk);
				($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($STATTBL[9]);
				$year = sprintf("%02d",$year + 1900);	$month = sprintf("%02d",$mon + 1);	$day = sprintf("%02d",$day);
				$hour = sprintf("%02d",$hour);	$min = sprintf("%02d",$min);
				print "<tr><td bgcolor=#ffffcc align=center>" . sprintf("%02d",$_) . ".txt</td>";
				if ( !($STATTBL[7]) ) {
					$STATTBL[7] = 0 ;
					$wk = "&nbsp;";
				}	else	{
					$wk = "$year年$month月$day日($hour:$min)";
				}
				print "<td bgcolor=#ffffcc align=right>$STATTBL[7]byte</td>\n";
				print "<td bgcolor=#ffffcc align=center>$wk</td>\n";
				print "<form action=$script method=POST>\n";
				print "<td bgcolor=#ffffcc align=center>";
				$wk = sprintf("%02d",$_) ;
				print "<input type=hidden name=\"action\" value=\"repairup\">\n";
				print "<input type=hidden name=\"logno\" value=\"$wk\">\n";
				print "<input type=submit value=\"このファイルから復旧します\"></td></form></tr>\n";
			}
			print "</table>\n";
			&footer ;
		}
		exit ;
	}
	$found = 0 ;
	&dataread ;														#ログ読み込み
	foreach ( @data )	{
		($dt,$c_category,$c_hpttl,$c_hpadr,$c_hpcom,$c_area,$c_banner,$pass,$c_hpkanri,$no,$c_sougo,$c_look,$c_osusume,$c_imgfile) = split(/,/,$_);
		if ( $FORM{'no'} eq $no )	{
			if ($FORM{'pass'} ne $password && (&pass_dec($pass))) { &error("パスワードが違います。"); }
			$found = 1 ;
			if ( $FORM{'proc'} eq "delete" )	{
				&update ;
				exit;
			}
			$c_osusume =~ s/\n//g;		$c_imgfile =~ s/\n//g;
			$c_hpcom =~ s/<br>/\n/g;	$c_pass = $FORM{'pass'} ;
			local ($img) = $c_imgfile =~ /([^\/]+)$/;
			$img = $UpFolder .$img;
			if($img) { $c_upload = $img ; }
			&formproc2 ;
		}
	}
	if ( $found == 0 )	{	&error("該当する記事Noのデータは存在していません。");	}
	exit;
}
###<--------------------------------------------------------------
###<---   ログファイル更新
###<--------------------------------------------------------------
sub update {
	if ( $FORM{'proc'} eq 'edit' )	{	#i010410
		if ( $maxword ne '' && (length($FORM{$name_comment}) > $maxword))	{	&error("メッセージは$maxword文字までしか登録出来ません。");	}
		if ($FORM{'hptitle'} eq '' )	{	&error("ホームページのタイトルを書いて下さい");	}
		if ($FORM{'hpaddress'} eq '' )	{	&error("ホームページのアドレスを書いて下さい");	}
		if ($FORM{$name_comment} eq '' )	{	&error("ホームページの紹介文を書いて下さい");	}
		if ( $FORM{'banner'} ne '' && $FORM{'fileupload'} ne '' )	{
			&error("バナーアドレス又はファイルアップロードのどちらか一方しか設定出来ません。");
		}
		if ( $FORM{'osusume'} ne '' && $FORM{'pass'} ne $password )	{
			&error("管理者以外は、「管理者オススメ」の登録は出来ません。");
		}
	}	#i010410
	&filelock ;	#ファイルロック
	&dataread ;														#ログ読み込み
    foreach (@data) {
		($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$_);
		if ( $FORM{'no'} eq $no)	{							#メンテ対象の場合
			$osusume =~ s/\n//g;		$imgfile =~ s/\n//g;
			if ($FORM{'pass'} ne $password && (&pass_dec($pass))) {
				&fileunlock ;	#ファイルロック解除
				&error("パスワードが違います。");
			}
			#■アップロードファイルの削除
			local ($img) = $imgfile =~ /([^\/]+)$/;
			$img = $UpFolder .$img;
			if ( ($FORM{'fileupload'} || $FORM{'proc'} eq 'delete' || $FORM{'banner'} ne '' ) && $img && (-e $img)) { 	unlink($img); }
			if ( $FORM{'proc'} eq "edit" )	{
	            # ファイル添付処理
       			$ImgFile = "";
				if($incfn{'fileupload'} =~ /http/gi) {
					$ImgFile = $FORM{'fileupload'} ;
				} elsif ($incfn{'fileupload'}) { &fileupload; }
				else { $ImgFile = $imgfile ; }
				push(@new,"$dt,$FORM{'category'},$FORM{'hptitle'},$FORM{'hpaddress'},$FORM{$name_comment},$FORM{'area'},$FORM{'banner'},$pass,$FORM{'hpkanri'},$no,$FORM{'sougo'},$look,$FORM{'osusume'},$ImgFile\n");
			}
		}	else	{
			push(@new,"$_"); 								#そのまま出力
		}
	}
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
	if ( $damedame == 0 )	{
		print "Location: $script?linkchoice=$FORM{'category'}\n\n";
	}	else	{
		print "Content-type: text/html\n\n";
		print "<html><head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=";
		print "$script?linkchoice=$FORM{'category'}\"></head><body></body></html>\n\n";
	}
	exit ;
}
###<--------------------------------------------------------------
###<---   ＨＰ参照数のカウント＆ＨＰリンク
###<--------------------------------------------------------------
sub link {
	&filelock ;	#ファイルロック
	&dataread ;														#ログ読み込み
    foreach (@data) {
		($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$img) = split(/,/,$_);
		if ( $FORM{'no'} eq $no)	{							#メンテ対象の場合
			$osusume =~ s/\n//g;		$img =~ s/\n//g;
			$look++ ;	$sv_hpadr = $hpadr ;
			push(@new,"$dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$img\n");
		}	else	{
			push(@new,"$_"); 								#そのまま出力
		}
	}
	if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
	print OUT @new;
	close(OUT);
	&fileunlock ;	#ファイルロック解除
	if ( $damedame == 0 )	{
		print "Location: http://$sv_hpadr\n\n";	#u010602
	}	else	{
		print "Content-type: text/html\n\n";
		print "<html><head><META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=";
		print "http://$sv_hpadr\"></head><body></body></html>\n\n";
	}
	exit ;
}
###<--------------------------------------------------------------
###<---   ランキング表示
###<--------------------------------------------------------------
sub rank {
	&header ;														#htmlヘッダー
	&formproc ;														#検索フォーム
	print "<center><br>\n";
	foreach ( @CATEGORYLOG ) {
		($dt,$ctgr,$hpttl,$hpadr,$hpcom,$area,$banner,$pass,$kanri,$no,$sougo,$look,$osusume,$imgfile) = split(/,/,$_);
		$imgfile =~ s/\n//g;
		$TBL_no{$no} = $no ;
		$TBL_look{$no} = $look ;
		$TBL_ctgr{$no} = $ctgr ;
		$TBL_hpttl{$no} = $hpttl ;
		$TBL_hpadr{$no} = $hpadr ;
		$TBL_hpcom{$no} = $hpcom ;
		$TBL_banner{$no} = $banner ;
		$TBL_imgfile{$no} = $imgfile ;
		$TBL_pass{$no} = $pass;
	}
	$i = 1 ;
	foreach ( sort { ( $TBL_look{$b} <=> $TBL_look{$a} ) || ( $a cmp $b ) } keys ( %TBL_look ) ) {
		if ( $i > $rankcnt ) { last ; }
		$pass = $TBL_pass{$_}; 
		&colorset ;		#セル背景色の設定
		print "<br>\n";
		if ( $FORM{'linkchoice'} == 0 ) {
			print "$CATEGORY[$TBL_ctgr{$_}]<br>\n";
		}
		print "<table width=\"$tsz\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
		print "<tr><td bgcolor=$bdcolor>";
			print "<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\">\n";
			print "<tr><td rowspan=2 bgcolor=\"$tblbgcolor1\" valign=\"middle\" align=right width=50 nowrap><b>$i</b>位</td>\n";
			if ( $centflg == 0 ) { $dmy5 = "align=left"; }
			elsif ( $centflg == 1 ) { $dmy5 = "align=center"; }
			else { $dmy5 = "align=right"; }
		    print "<td width=\"100%\" bgcolor=\"$tblbgcolor2\" height=30 $dmy5>\n";
			if ( $TBL_banner{$_} eq '' )	{
				if ( $TBL_imgfile{$_} eq '' )	{
					print "<font size=+1>";
					if ( $countflg == 0 ) {
						print "<a href=\"http://$TBL_hpadr{$_}\" target=$target>";
					}	else	{
						print "<a href=\"$script?action=link&no=$TBL_no{$_}&url=$TBL_hpadr{$_}\" target=$target>";	#u010406
					}
					print "$TBL_hpttl{$_}</a></font>\n";
				}	else	{
					if ( $TBL_imgfile{$_} !~ /http/i )	{
						if ( $TBL_imgfile{$_} =~ /gif/i ) {	($W,$H) = &GIFSizeGet("$UpFolder$TBL_imgfile{$_}") ;}
						if ( $TBL_imgfile{$_} =~ /jpg/i ) {	($W,$H) = &JPGSizeGet("$UpFolder$TBL_imgfile{$_}") ;}
						if ( $TBL_imgfile{$_} =~ /png/i ) {	($W,$H) = &PNGSizeGet("$UpFolder$TBL_imgfile{$_}") ;}
						$TBL_imgfile{$_} = "$UpUrl$TBL_imgfile{$_}" ;
					}	else	{
						$W = 999;$H = 999;
					}
					# 画像表示縮小
					$WS = $W ; $HS = $H ;
					if ( $kotei == 1 )	{
						if ($W > $MaxWidth || $H > $MaxHeight) {
							$W2 = $MaxWidth / $W;	$H2 = $MaxHeight / $H;
							if ($W2 < $H2) { $sv = $W2; } else { $sv = $H2; }
							$W = int ($W * $sv); $H = int ($H * $sv);
						}
					}	else	{
						$W = $MaxWidth;
						$H = $MaxHeight;
					}
					if ( $countflg == 0 ) {
						print "<a href=\"http://$TBL_hpadr{$_}\" target=$target>";
					}	else	{
						print "<a href=\"$script?action=link&no=$TBL_no{$_}&url=$TBL_hpadr{$_}\" target=$target>";
					}
					print "<img src=\"$TBL_imgfile{$_}\" border=0 width=$W height=$H vspace=2 hspace=5 alt=\"$TBL_hpttl{$_}\"></a>\n";
				}
			}	else	{
				if ( $banner_w ) { $dmy1 = "width=$banner_w"; } else { $dmy1 = ""; }
				if ( $banner_h ) { $dmy2 = "height=$banner_h"; } else { $dmy2 = ""; }
				if ( $countflg == 0 ) {
					print "<a href=\"http://$TBL_hpadr{$_}\" target=$target>";
				}	else	{
					print "<a href=\"$script?action=link&no=$TBL_no{$_}&url=$TBL_hpadr{$_}\" target=$target>";
				}
				print "<img src=\"http://$TBL_banner{$_}\" border=0 $dmy1 $dmy2 vspace=2 hspace=5 alt=\"$TBL_hpttl{$_}\"></a>\n";	#u010406
			}
			print "</td></tr>";
    		print "<tr><td bgcolor=\"$tblbgcolor2\" nowrap width=100% align=right>";
			print "<font color=\"$tbltxcolor2\">参照数：&nbsp;<b>$TBL_look{$_}</b>回</font>\n" ;
			print "</tr>\n";
			print "<tr><td colspan=2 bgcolor=\"$tblbgcolor3\"><font color=\"$tbltxcolor3\">$TBL_hpcom{$_}</font>";
    		print "</td></tr></table>\n";
		print "</td></tr></table>\n";
		$i++;
	}
	print "</center>\n";
	&footer;														#htmlフッター
	&footer2;														#htmlフッター
	exit ;
}
###<--------------------------------------------------------------
###<---   地域情報設定
###<--------------------------------------------------------------
sub areaset	{
	print " <SELECT name=area $css_style>\n";
	for ( $i = 0 ; $i <= $#areatbl ; $i++ )	{
		$j = sprintf("%02d",$i);
		if ( $FORM{'action'} eq 'maintenance' )	{
			if ( $c_area == $i ) {
				print "  <OPTION value=$j selected>$areatbl[$i]\n";
			}	else	{
				print "  <OPTION value=$j>$areatbl[$i]\n";
			}
		}	else	{
			if ( $FORM{'area'} == $j && $FORM{'area'} )	{
				print "  <OPTION value=$j selected>$areatbl[$i]\n";
			}	else	{
				print "  <OPTION value=$j>$areatbl[$i]\n";
			}
		}
	}
	if ( $_[0] == 0)	{
		if ( $FORM{'area'} eq '' || $FORM{'area'} == 99)	{
			print "  <OPTION value=99 selected>指定無し\n";
		}	else	{
			print "  <OPTION value=99>指定無し\n";
		}
	}
	print "</SELECT>\n";
}
###<--------------------------------------------------------------
###<---   ログ表示部のテーブルカラー設定
###<--------------------------------------------------------------
sub colorset {
	# パスワードの暗号化（crypt関数使用））
	if ( $ango == 1 ) {								#i000613
		$pass2 = crypt($password, $password);		#i000613
	}	else	{									#i000613
		$pass2 = $password;							#i000613
	}												#i000613
	if ( $pass ne $pass2 ) 	{
		$tblbgcolor1	= $tblbgcolor1_v;
		$tblbgcolor2	= $tblbgcolor2_v;
		$tbltxcolor2	= $tbltxcolor2_v;
		$tblbgcolor3	= $tblbgcolor3_v;
		$tbltxcolor3	= $tbltxcolor3_v;
	}	else	{
		$tblbgcolor1	= $tblbgcolor1_k;
		$tblbgcolor2	= $tblbgcolor2_k;
		$tbltxcolor2	= $tbltxcolor2_k;
		$tblbgcolor3	= $tblbgcolor3_k;
		$tbltxcolor3	= $tbltxcolor3_k;
	}
}
###<--------------------------------------------------------------
###<---   エラー処理
###<--------------------------------------------------------------
sub error {
	&header ;
	print "[<A HREF=\"JavaScript:history.back()\">BACK</A>]<br><br><br>\n";
	print "$_[0]<br><br><br>";
	&footer2;
	exit;
}
###<--------------------------------------------------------------
###<---   ファイルロック設定
###<--------------------------------------------------------------
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;
}
###<--------------------------------------------------------------
###<---   スクロール
###<--------------------------------------------------------------
sub	scrl	{
	$dm = @CATEGORYLOG;
	if ( $dm % $pagemax == 0) {	$p = $dm / $pagemax ;}	else {	$p = $dm / $pagemax + 1;}
	$p = sprintf("%3d",$p);
	if ( $p > 1 )	{
		print "<br><table border=0 cellpadding=0 cellspacing=3><tr>\n";
		if ( $FORM{'disppage'} + 1 <= $p && $FORM{'disppage'} != 1 )	{	$dmy = "colspan=2"; } else { $dmy = ""; }
		print "<td align=center nowrap $dmy>\n";
		for ( $i = 1 ; $i <= $p ; $i++ )	{
			if ( (!($FORM{'disppage'}) && $i != 1 ) || ( $FORM{'disppage'} && ( $i ne $FORM{'disppage'}) ) )	{
				print "<a href=$script?disppage=$i&action=$FORM{'action'}&linkchoice=$FORM{'linkchoice'}&word=$FORM{'word'}&area=$FORM{'area'}&kflg=$FORM{'kflg'}>$i</a>\n";
			}	else	{
				print "<b>$i</b>\n";
			}
			if ( $i != $p ) { print "&nbsp;"; }
		}
		print "</td></tr><tr>";
		if ( $FORM{'disppage'} != 0 && $FORM{'disppage'} !=1)	{
			print "<form action=$script>\n";
			print "<td align=center>\n";
			print "<input type=hidden name=\"linkchoice\" value=\"$FORM{'linkchoice'}\">\n";
			print "<input type=hidden name=\"word\" value=\"$FORM{'word'}\">\n";
			print "<input type=hidden name=\"area\" value=\"$FORM{'area'}\">\n";
			print "<input type=hidden name=\"kflg\" value=\"$FORM{'kflg'}\">\n";
			$pag = $FORM{'disppage'} - 1 ;
			print "<input type=hidden name=\"disppage\" value=$pag>\n";
			print "<input type=submit name=\"page\" value=\"$word_back\" $css_style></td></form>\n";
		}
		if ( $FORM{'disppage'} + 1 <= $p )	{
			print "<form action=$script>\n";
			print "<td align=center>\n";
			print "<input type=hidden name=\"linkchoice\" value=\"$FORM{'linkchoice'}\">\n";
			print "<input type=hidden name=\"word\" value=\"$FORM{'word'}\">\n";
			print "<input type=hidden name=\"area\" value=\"$FORM{'area'}\">\n";
			print "<input type=hidden name=\"kflg\" value=\"$FORM{'kflg'}\">\n";
			$pag = $FORM{'disppage'} + 1 ;
			print "<input type=hidden name=\"disppage\" value=$pag>\n";
			print "<input type=submit name=\"page\" value=\"$word_next\" $css_style></td></form>\n";
		}
		print "</tr></form></table>\n";
	}
}
###<--------------------------------------------------------------
###<---   バックアップファイル復旧作業
###<--------------------------------------------------------------
sub repairup {
		&filelock ;	#ファイルロック

		$wk = $backfile . $FORM{'logno'} . ".txt" ;
		if ( !(open(IN,"$wk")))	{	&fileunlock ;	&error("ログファイル($wk)のオープンに失敗しました");	}
		foreach ( <IN> ) {	push(@new,$_) ;	}
		close(IN);
		if ( !(open(OUT,">$logfile")))	{	&fileunlock ;	&error("ログファイル($logfile)のオープンに失敗しました");	}
		print OUT @new;
		close(OUT);

		&fileunlock ;	#ファイルロック解除

		&header ;
		print "<center><br><br><br><br><br>\n";
		print "<font size=+1><b>ログファイルの復旧が正常終了しました。</b>\n";
		print "<br><br><br>[<a href=$script>BACK</a>]</body></html>\n";
		exit;
}
###<--------------------------------------------------------------
###<---   SendMail
###<--------------------------------------------------------------
sub SMail {
	$ttl = $title;
	if ( $hiho == 1 )	{
	   	&jcode'convert(*ttl,'euc');
		open(MAIL,"| $sendmail -s \"$ttl\" -f $smail_address $smail_address ") || &error("Sendmail Error!!");
	}	else	{
		open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!");
		$mailbuf = "To: $smail_address\n";
		$mailbuf .= "From: $smail_address\n";	#u010328
		$mailbuf .= "Subject: $ttl\n";
		$mailbuf .= "MIME-Version: 1.0\n";
		$mailbuf .= "Content-type: text/plain; charset=ISO-2022-JP\n";
		$mailbuf .= "Content-type: text/plain\n";
		$mailbuf .= "\n\n";
	}
	$mailbuf .= "============================================================\n";
	$mailbuf .= "『$title』に投稿がありました\n";
	$mailbuf .= "============================================================\n\n";
	$mailbuf .= "投稿日時：$today\n\n";
	$mailbuf .= "▼カテゴリー\n";
	$mailbuf .= "$CATEGORY[$FORM{'category'}]\n\n";
	$mailbuf .= "▼ＨＰアドレス\n";
	$mailbuf .= "http://$FORM{'hpaddress'}\n\n";
	$mailbuf .= "▼ＨＰタイトル\n";
	$mailbuf .= "$FORM{'hptitle'}\n\n";
	if ( $kanriflg == 1 )	{
		$mailbuf .= "▼発信地\n";
		$mailbuf .= "$areatbl[$FORM{'area'}]\n\n";
	}
	if ( $FORM{'banner'} )	{
		$mailbuf .= "▼バナーアドレス\n";
		$mailbuf .= "http://$FORM{'banner'}\n\n";
	}
	if ( $areaflg == 1 )	{
		$mailbuf .= "▼管理人名\n";
		$mailbuf .= "$FORM{'hpkanri'}\n\n";
	}
	if ( $FORM{'sougo'} )	{
		$mailbuf .= "▼相互リンクをしています\n\n";
	}
	$mailbuf .= "▼パスワード\n";
	$mailbuf .= "$FORM{'pass'}\n\n";
	$mailbuf .= "▼ＨＰコメント\n";
	$mailbuf .= "$FORM{$name_comment}\n\n";
	$mailbuf .= "============================================================\n";
	#漢字コードＪＩＳ変換＆改行コードLF変換。
	$mailbuf	=~ s/\r\n/\n/g;		$mailbuf	=~ s/\r/\n/g;	$mailbuf	=~ s/<br>/\n/g;
	$mailbuf =~ s/&amp;/&/g;	$mailbuf =~ s/&quot;/"/g;
	$mailbuf =~ s/&lt;/</g;	$mailbuf =~ s/&gt;/>/g;
   	&jcode'convert(*mailbuf,'jis');
	print MAIL	$mailbuf ;
	close(MAIL);
}
###<--------------------------------------------------------------
###<---   画像アップロード処理
###<--------------------------------------------------------------
sub fileupload {
	if ( $UpFolder eq '' ) { $ImgFile = "" ; return ; }

	# 画像処理
	$macbin=0;
	foreach (@in) {
		if (/(.*)Content-type:(.*)/i) { $type=$2; 	}
		if (/(.*)filename=(.*)/i) { $fname=$2; }
		if (/application\/x-macbinary/i) { $macbin=1; }
	}
	$type =~ s/\r//g;	$type =~ s/\n//g;
	$ok = 0 ;
	foreach $buf(@FMT){
		if ( $buf ) {
			if($fname =~ /$buf/i){ $ok=1; $type = ".$buf"; }
		}
	}
	if ($ok == 0 ) { &fileunlock ; &error("このファイル形式はアップロード出来ません。"); }

	# マックバイナリ対策
	if ($mac) {
		$len = substr($FORM{'fileupload'},83,4);	$len = unpack("%N",$length);
		$FORM{'fileupload'} = substr($FORM{'fileupload'},128,$len);
	}
	# 添付データを書き込み
	$ImgFile = $UpFolder . $no . $type ;
	if ( !(open(OUT,">$ImgFile")))	{	&fileunlock ; &error("ファイルのアップロードに失敗しました");	}
	binmode(OUT);
	binmode(STDOUT);
	print OUT $FORM{'fileupload'};
	close(OUT);
	chmod (0666,$ImgFile);
	$ImgFile = $no . $type;
}
###<--------------------------------------------------------------
###<---   GIF画像サイズ取得
###<--------------------------------------------------------------
sub GIFSizeGet {
	open(GIF,$_[0]) || return (0,0);
	seek(GIF,6,0);
	read(GIF,$size,4);
	close(GIF);
	return ( unpack("v",substr($size,0,2)) , unpack("v",substr($size,2,2)) ) ;
}
###<--------------------------------------------------------------
###<---   PNG画像サイズ取得
###<--------------------------------------------------------------
sub PNGSizeGet {
	local($png) = @_;
	local($data);
	open(PNG, "$png") || return (0,0);
	binmode(PNG);read(PNG, $data, 24);close(PNG);
	$W = unpack("N", substr($data, 16, 20));
	$H = unpack("N", substr($data, 20, 24));
	return ($W, $H);
}
###<--------------------------------------------------------------
###<---   JPG画像サイズ取得
###<--------------------------------------------------------------
sub JPGSizeGet {
	open(JPG, $_[0]) || return (0,0);
	binmode JPG;
	read(JPG,$t,2);
	while (1) {
		read(JPG,$size,4);
		($a, $b, $c) = unpack("a a n", $size);
		if ($a ne "\xFF") { $W = $H = 0; last; }
		elsif ((ord($b) >= 0xC0) && (ord($b) <= 0xC3)) {
			read(JPG, $size, 5);
			($H, $W) = unpack("xnn", $size);	last;
		} else {read(JPG, $size, ($c - 2));}
	}
	close(JPG);
	return ($W, $H);
}
###<--------------------------------------------------------------
###<---   ホストチェック
###<--------------------------------------------------------------
sub hostchk {
	# ホスト名を取得
	$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){
		# パターンマッチを変換
		$buf=~ s/\./\\./g;		$buf=~ s/\?/\./g;		$buf=~ s/\*/\.\*/g;
		if($host =~ /$buf/gi){
			&error("\申\し\訳ありません。<br>あなたのプロバイダーからは投稿できませんでした． ");
		}
	}
}