#!/usr/bin/perl
# 
# 先頭行の例:a #!/usr/bin/perl
# 先頭行の例:b #!/usr/local/bin/perl
# 先頭行の例:c #!/bin/perl
#     オリジナルスクリプト[Joyful Note]の規定
#    ┌───────────────────────────────
#    │  JOYFUL NOTE v1.21 (2002/01/15)
#    │  Copyright(C) Kent Web 2002
#    │  webmaster@kent-web.com
#    │  http://www.kent-web.com/
#    └───────────────────────────────
      $originalver = 'Joyful Note v1.21';
#    ┌───────────────────────────────
#    │ [注意事項]
#    │ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
#    │    いかなる損害に対して作者は一切の責任を負いません。
#    │ 2. 設置に関する質問はサポート掲示板にお願いいたします。
#    │    直接メールによる質問は一切お受けいたしておりません。
#    │ 3. 添付の home.gif は L.O.V.E の mayuRin さんによる画像です。
#    └───────────────────────────────
$ver = 'JOYFULYY v2.50y24m71'; # (不正なURL対策)
#  ◆URLの中の不正なタグ対策:表示ではタグを無効削除、タグがあればタグを無効にする
# ★★★★★★★★★★★一時製作用★★★★★★★★★★★★★★
	$test = 0;
	# 各画像にコメントを投稿する $pic_comment(0:no 1:yes)
	if ($test && -e "x_makeflg.txt"){ $pic_comment = 1; $pic_comgyo = 5; }
	undef $test;
# この改造スクリプト[JOYFULYY]では、以下の規定をお守りください。
#┌─────────────────────────────────
#│  JOYFULYY
#│  This was edited by Yamamoto
#│  raikouspace@nifty.com
#│  http://izu22.cool.ne.jp/y-pg/
#│  http://homepage1.nifty.com/raikou/
#└─────────────────────────────────
# 改造版著作権表示部(削除改変不可)
#┌─────────────────────────────────
#│ [追加注意事項]
#│ 1. このスクリプトはJOYFUL NOTE v1.21を改造したものです。 
#│    設置に関する質問その他の質問を「Kent Web」様にしないでください。
#│    また、「Kent Web」様のサポート掲示板での問い合わせもしないでください。
#│ 2. 以下の利用規定に基づき「Kent Web」様に著作権のあるCGIスクリプトを
#│    改造し再配布します。
#│    「再配布の規定について」http://www.kent-web.com/pubc/saihaifu.html
#│    「フリーソフト利用規定」http://www.kent-web.com/pubc/kitei.html
#│ 2. このスクリプトの利用規定は「Kent Web」様の「再配布の規定について」
#│    および「フリーソフト利用規定」の主旨と同様のものとします。
#│    この改造スクリプトを再改造できますが、著作権表示部は削除改変不可です。
#│    著作権表示部に再改造者の著作権表示を追加してご使用ください。
#│ 3. このスクリプトを使用したいかなる損害に対しても、
#│    作者および改造者は一切の責任を負いません。
#│ 5  改造者への質問は、こちらにお願いします。
#│    「JOYFULYYのご案内」http://izu22.cool.ne.jp/y-pg/
#└─────────────────────────────────
# 各種項目の設定は、項目設定プログラム「j_set.cgi」を起動して、
# インターネット接続で行いますので、ここでのエディター修正は不要です。
# 通常は、このスクリプトをエディター修正することはありませんので注意ください。
# --------------------- #
#      臨時項目設定     #
# --------------------- #
# ここでは、一部の方がエディターで設定できるように臨時の設定を行います
# JOYFULYYのバージョンアップをしますと、ここの設定は消えてしまいますので、
# バージョンアップ版でも、同様に設定しなおしてください。
# 日記帳モードで管理者用パスワード入力欄を先頭行トップメニュー末尾に移動します。(0:no 1:yes)
#              パスワード入力欄が大きいのでサイズ指定をする予定
#              しかし、form文を入れるために下に一行分の余白が出てしまう・・・
	$dailypasst = 0;
# 記事を新規投稿する時に、先頭ではなく末尾に投稿されるようにする(0:no 1:yes)
#   改造ね!っとへお問い合わせのMakiさんのご希望です(正式ご提供するかどかは検討中です)
#   でも、最大記事数を超えた時には最新記事から過去ログへ移行することになってしまいます!
#   最大記事数を大きく設定した上で、サーバーの容量不足にもご注意ください。
	$reg_endposition = 0;
# 返信・追加ボタンを強制的非表示にする(0:no 1:yes)
	$undisplay_resbt = 0;
# ---------------------------- #
#     改造者向け説明と設定     #
# ---------------------------- #
# <★特記★>
# 改造者がログ形式を変更して新しいアイテムを追加出来る予約フィールドを用意しました
# このファイルの「sub inperm_sub」にある
# <高度な改造者向けの予約フィールドの解説> の解説をお読みください。
# CGIの製作に慣れている方には独自の新機能を実現しやすくなっています!(v2.50y24m63より)
# <ライブラリのバージョン設定>
# もし、改造したライブラリ先頭スクリプトの $lib_ver 変数に独自のバージョンを設定した場合は、
# 以下のバージョン変数にも同じものを設定すれば、改造バージョンの整合性が保たれます。
# (もし、改造版使用者が間違って別のバージョンのライブラリを使うとエラーになります)
# (旧バージョンの改造ライブラリを再配布する場合もご利用ください)
# 例えば、j_lib_r1.cgi を改造し先頭スクリプトに、$lib_ver = "v2.50y21kaizou"; を設定した場合は、
# 以下にも同様に設定します 例:$lib_r1_ver = "v2.50y21kaizou"
# もちろん、最新版のライブラリを改造して再配布する時にはなにも設定する必要はありません。
	$lib_r1_ver = "";
	$lib_r2_ver = "";
	$lib_r3_ver = "";
	$lib_w1_ver = "";
	$lib_w2_ver = "";
	$lib_x1_ver = "";
	$lib_x2_ver = "";
# 	改造版再配布でバージョンチェックの必要がないならば、
# 	ライブラリ読み込み時点でのバージョンチェック(&libchk)を行わない方法もあります。
# 	以下で「0」を設定すればライブラリのバージョンチェックを行いません。
	$lib_ver_check = 1; # 0:チェックしない 1:チェックする
# <著作権表示>
# 掲示板の著作権表示部の出力は j_lib_r2.cgi の「sub html_log_end」にあります。
# そこには改造者による著作権表示のサンプルもありますので簡単に出来ると思います。
# 参考にしてください。
# <参考:巡回ソフト>
# 掲示板巡回ソフト用のエクステンション用区切りは「j_lib_r2.cgi」の先頭で説明しています。
# -------------------------------- #
#    改造者向け固定ファイル指定    #
# -------------------------------- #
# JOYFULYY掲示板では、各ファイル名を項目設定プログラムで設定しますので、
# ここで指定する必要はありません、通常は変更しないように注意してください。
# しかし、一部のファイル名は固定していますので項目設定プログラムでは変更できません。
# もし、固定したファイル名を変更する必要がある時にはここで変更してください。
# さらに、項目設定プログラム(j_set.cgi)でも同様の変更を行う必要があります
# (指定方法は全てFTP指定です)
# [注意]
#   このファイル「./joyfulyy.cgi」の指定は項目設定の「■ライブラリ、ディレクトリ、ファイルの設定」
#   の「■スクリプトのファイル名」で設定しますのでここにはありません。
# 項目設定の関係
	$setpro_file = "./j_set.cgi"; # 項目設定プログラム
	$setfile = "./j_param.cgi"; # j_set.cgiによって自動生成される「設定項目ファイル」です
# ライブラリのファイル名(臨時版v2.50y21より)
#  (ここではjoyfulyy.cgiが適宜読み込んで処理を行うスクリプトをライブラリと呼んでいます)
	$lib_r1 = "./j_lib_r1.cgi"; #  ◇ページ表示の共通サブルーチンのライブラリ
	$lib_r2 = "./j_lib_r2.cgi"; #  ◇通常ページ表示のライブラリ
	$lib_r3 = "./j_lib_r3.cgi"; #  ◇その他のページ表示のライブラリ
	$lib_w1 = "./j_lib_w1.cgi"; #  ◇記事書き込みライブラリ
	$lib_w2 = "./j_lib_w2.cgi"; #  ◇メール送信のライブラリ
	$lib_x1 = "./j_lib_x1.cgi"; #  ◇その他のライブラリ
	$lib_x2 = "./j_lib_x2.cgi"; #  ◇ログ破損対策のライブラリ
	$lib_x3 = "./j_lib_x3.cgi"; #  ◇項目設定用ライブラリ(これはj_set.cgiでも再設定が必要)
# 直リンク防止:画像出力スクリプト「j_trance.cgi」
	$trance_scr = "./j_trance.cgi"; # j_set.cgiが自動生成します(j_set.cgiでも再設定が必要)
# 改造者向け試作ファイル名(まだ利用されていないと思います)
	$remake_file = "./j_init.cgi"; # 使用方法は追って確立したいです、希望者はお申し出ください
# 特殊管理設定:通常使用にはまったく無関係です
	$adminfile = "./j_admin.cgi"; # JOYFULYYをレンタル等する場合等に使用する設定です
# --------------------- #
#    製作用臨時設定     #
# --------------------- #
# 指定秒スリープモード(製作者が一時的に使用する設定です一般にはまったく無関係です)
# タスクマネージャーで使用メモリを観察するために、指定秒スリープ(停止)するものです。
	$test_sleep = 0; # 以下の停止と秒数を有効にする (0:無効 1:有効)
	if ($test_sleep){
		$test_sleep_exit = 3;   # 秒数:通常ページ表示後など全てのexit直前の停止時間
		$test_sleep_head = 1;   # 秒数:通常ページヘッダーを表示したあとの停止時間
		$test_sleep_max = 4;    # 秒数:投稿直後の最大メモリ使用時の停止時間
		$test_sleep_logchk = 1; # 秒数:投稿後の正常書き込みデータ確認後の停止時間
	}
	$test_sleep_error = 3;  # 秒数:強制エラーでの停止時間、但し「123sleep」があれば常時停止
# Windows XPの不明なバグ(JavaScript関連バグ)を回避する (0:no 1:yes)
	$test_escape = 0;
# --------------------- #
#      各殊設定終了     #
# --------------------- #
# ***** 処理開始 *****
# 【注:このディレクトリ移動処理は j_set.cgi のものと同等にする】
# <ともくん方式の自動化>
# 自身のファイルが読めない時自動処理によってアクティブディレクトリを移動
# chdir 'd:/1yam/apache//1y/0j/b-imp/img/'; # テスト用
if (!(-e $setpro_file)){ # 項目設定プログラムが読めない時
	# まず、ドキュメントルートとスクリプト名を使って絶対パスを作成する
	$droot = $ENV{'DOCUMENT_ROOT'}; # ルート
	$droot =~ s/(\/[^\/]*$)//; # 右端削除 v2.50y21sにて「/」も削除
	$spass = $ENV{'SCRIPT_NAME'}; # $spass = $ENV{'PATH_INFO'};
	$spass =~ s/(\/[^\/]*$)/\//; # 右端削除
	$spass =~ s/\~//g; # チィルダ削除
	# 以下のともくん方式を自動化して試みる!
	# ともくん方式→ chdir 'C:\home\test\joyfulyy'; # <-もちろんそれぞれの環境に合わせて書き換える
	$allpass = $droot . $spass;
	$rslt = chdir $allpass; # このディレクトリをアクティブにする
	if ($rslt){ $setfile_msg_sp = "[ chdir $allpass ]"; } # 項目設定で表示するため
	if (!(-e $setpro_file)){
		if ($allpass =~ /:\\/){
			$droot = $ENV{'DOCUMENT_ROOT'}; # ルート
			$droot =~ s/(\\[^\\]*$)/\\/; # 右端削除
			$spass = $ENV{'SCRIPT_NAME'}; # $spass = $ENV{'PATH_INFO'};
			$spass =~ s/(\\[^\\]*$)/\\/; # 右端削除
			$spass =~ s/\~//g; # チィルダ削除
			$allpass = $droot . $spass;
		} else {
			$allpass =~ s/\//\\/g;
		}
		$rslt = chdir $allpass; # このディレクトリをアクティブにする
		if ($rslt){ $setfile_msg_sp = "[ chdir $allpass ]"; } # 項目設定で説明を表示するため
	}
	if ($setfile_msg_sp){ # ともくん方式の自動化のメッセージ
		$setfile_tmsg .= "このサーバーではパスの指定が特殊なためプログラムが動作出来ません。
";
		$setfile_tmsg .= "そのため起動時に「chdir」コマンドを自動生成して";
		$setfile_tmsg .= "アクティブディレクトリを移動して動作しています。
→ $setfile_msg_sp
";
		if (!(-e $setpro_file)){ # 項目設定プログラムが読めない時
			$setfile_tmsg .= "しかしながら、このCGIプログラムから項目設定プログラム「$setpro_file」を";
			$setfile_tmsg .= "見つけることが出来ませんでしたので失敗しています。
";
			$setfile_tmsg .= "エディター修正で joyfulyy.cgi 、j_set.cgi の中の「固定ファイル指定」をサーバー仕様に合わせて修正する必要があります。
";
		} else {
			$setfile_tmsg .= "その結果、項目設定プログラム「$setpro_file」の存在を確認できましたので、";
			$setfile_tmsg .= "このまま掲示板をお使い頂けると思います。
";
			$setfile_tmsg .= "しかし、もし閲覧者が掲示板を開けなくなる場合があれば、この処理は不向きですので、
";
			$setfile_tmsg .= "エディター修正で joyfulyy.cgi 、j_set.cgi の中の「固定ファイル指定」をサーバー仕様に合わせて修正する必要があります。
";
		}
	} elsif (!(-e $setpro_file)){ # それでも見つからなかった
		$setfile_msg_sp = "ダミー";
		$setfile_tmsg .= "このサーバーではパスの指定が特殊なためプログラムが動作出来ません
";
		$setfile_tmsg .= "そのため起動時に「chdir」コマンドを試行してみましたが効果がありませんでした。
";
		$setfile_tmsg .= "エディター修正で joyfulyy.cgi 、j_set.cgi の中の「固定ファイル指定」をサーバー仕様に合わせて修正する必要があります。
";
	}
}
# 設定項目ファイル読み込み
if (-e $setfile) {
	require $setfile; &joy_pm_set;
} else {
	# まだ項目設定ファイルが作成されていない
	$setfile_name = $setfile; $setfile_name =~ s/.*\/([^\/]*)$/$1/;
	$setpro_file_name = $setpro_file; $setpro_file_name =~ s/.*\/([^\/]*)$/$1/;
	# 項目設定プログラムが読めない時
	if (!(-e $setpro_file)){ 
		$msg ="設定項目ファイル($setfile_name)と、設定項目プログラム($setpro_file_name)が見つかりませんでした
";
		if ($setfile_msg_sp){ # ともくん方式の自動化のメッセージを追加
			$msg .= $setfile_tmsg;
		}
		$msg .="
先ず、設定項目プログラム($setpro_file_name)をブラウザからURL指定で開いて確認してください。
";
		&header;
		print "
$msg  | 
$ver