#!/usr/bin/perl
$perl = '/usr/bin/perl';
$filename = 'jc-check.cgi';
$datadir = './data';
require './jcode.pl';
require './cgi-lib.pl';

$scriptcheck = './padd-bbs.cgi'; 
#↑CGIファイルの構文チェックをする場合はここにそのパスを書いてください。

#####                jc-check.cgi    Ver.1.3   24 Aug. 2001                 #####
##                                                                             ##
## このチェックスクリプトはPaddie作成のCGIを設置できるかどうかを簡単にチェック ##
## することができるように作成しました。もちろんフリーです。                    ##
##                                                                             ##
## 1〜6行目の環境設定を編集して 文字コードEUC、改行コードLF、パーミション755で ##
## 目的の場所へ設置してください。  （8行目はオプションです。）                 ##
##                                                                             ##
## また、このチェックスクリプトは無保証ですので、自己責任においてご使用下さい。##
## 万一データが破損しても、その責はPaddieには及ばないものとします。            ##
##                                                                             ##
#################################################################################
$| = 1;
$ver = '1.3';
select(STDOUT);
&ReadParse;
$text = "この文字列が正しく表示されていれば、jcode.plは正常に動作しているということになります。";
if ($in{'CHECK'} == 1)
	{
	$text2 = "cgi-libは正しく動作しているようです。<BR><BR>";
	if (-w "./" && !-d $datadir)
		{
		$form = "このディレクトリはWebサーバーによる書き込み権限がありますので、データディレクトリ自動作成のチェックを試みます。<BR><BR>";
		umask 0000;
		mkdir ($datadir,0777);
		chmod (0777,$datadir);
		$seiko = "の作成に成功しました";
		$sippai = "の作成に失敗しました";
		}
	elsif (!-d $datadir)
		{
		$form = "このディレクトリには<FONT COLOR=\"\#882222\">Webサーバーによる書き込み権限がありません<\/FONT>ので、データディレクトリを手動で作成する必要があります<BR><BR>";
		if (!-d $datadir)
			{$form .= "チェックを続けるためには<FONT COLOR=\"\#882222\">手動でデータディレクトリを作成（パーミション７７７）<\/FONT>してください。<BR><BR>";}
		$seiko = "が見つかりました。";
		$sippai = "が見つかりませんでした。";
		}
	else
		{
		$seiko = "が見つかりました。";
		$sippai = "が見つかりませんでした。";
		}
	$form .= "書き込み可能なデータディレクトリ";
	if (-w $datadir)
		{
		$form .= $seiko."。<BR><BR>続いて記録ファイル作成のチェックを試みます。<BR><BR>";
		open (OUT,">$datadir/jc-check.txt");
		print OUT "成功しました。<BR><BR><FONT COLOR=\"\#222288\" SIZE=\"5\"><STRONG>この場所はPaddie作成のCGIを設置することが可能です。<\/STRONG><\/FONT><BR>（作成されたチェック用記録ファイルは削除されます。）";
		close OUT;
		open (IN,"$datadir/jc-check.txt");
		$check = <IN>;
		close IN;
		unlink ("$datadir/jc-check.txt");
		if (-f "$datadir/jc-check.txt")
			{$dsippai = "チェック用記録ファイルの削除に失敗しました。<FONT COLOR=\"\#882222\">サーバー管理者にお問い合わせください。<\/FONT><BR><BR>";}
		if (!$check)
			{$check = "失敗しました。<BR><BR><FONT COLOR=\"\#882222\">サーバー管理者にお問い合わせください。<\/FONT>";}
		$form .= "記録ファイルの作成に$check<BR><BR>$dsippaiこのチェックスクリプトで作成したデータディレクトリが不要な場合は手動で削除してください。";
		}
	elsif (-d $datadir)
		{$form .= $sippai."。<BR><BR><FONT COLOR=\"\#882222\">データディレクトリのパーミションを確認してください。<\/FONT>";}
	}
elsif (!$in{'CHECK'})
	{
	$text2 = "cgi-libの動作がチェックされていないか、<FONT COLOR=\"\#882222\">正しく動作していない<\/FONT>ようです。<BR>下のボタンをクリックしてcgi-lib.plのチェックを行ってください。<BR>";
	$form =<<EOF;
<FORM ACTION="$filename" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="CHECK" VALUE="1"><INPUT TYPE="SUBMIT" VALUE="CGI-LIBのチェック"></FORM>
EOF
	}
if ($in{'CHECK'} < 2)
	{
	$ptext =<<EOF;
JCODE.PL<BR>
$text<BR>
The file 'jcode.pl' may be break if upper sentence isn't indicated properly.<BR><BR>
CGI-LIB.PL<BR>
$text2
EOF
	}
$printtext1 =<<EOF;
Content-type: text/html; Charset=Shift-JIS

<HTML>
<HEAD>
<TITLE>環境チェック</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<FONT COLOR="#228822"><FONT SIZE="5"><STRONG>環境チェック</STRONG></FONT>　　Ver.$ver</FONT><BR><BR>
$ptext$form
EOF
$printtext2 =<<EOF;
<HR SIZE="2"><FONT SIZE="2">
jc-check ver.$ver<BR>
(C) 2001 Paddie.</FONT></BODY></HTML>
EOF
if (-f $scriptcheck && $in{'CHECK'} == 1)
	{
	$printtext1 .= "<HR SIZE=\"2\">Perlのバージョンチェックと$scriptcheckの構文チェックを行います。<BR>";
	if (!-x $scriptcheck)
		{$printtext1 .= "！！<FONT COLOR=\"\#BB2222\">$scriptcheckのパーミションが適切ではありません。実行権限を与えてください<\/FONT>！！<BR>";}
	}
&jcode'convert(*printtext1,"sjis");
&jcode'convert(*printtext2,"sjis");
print $printtext1."<BR>";
if (-f $scriptcheck && $in{'CHECK'} == 1)
	{
	`$perl -v 1> $datadir/jc-check1.txt 2> $datadir/jc-check2.txt`;
	`$perl -wc $scriptcheck 1>> $datadir/jc-check1.txt 2>> $datadir/jc-check2.txt`;
	open (IN,"$datadir/jc-check1.txt");
	@wcin1 = <IN>;
	close IN;
	open (IN,"$datadir/jc-check2.txt");
	@wcin2 = <IN>;
	close IN;
	unlink ("$datadir/jc-check1.txt");
	unlink ("$datadir/jc-check2.txt");
	print &jcode'to("sjis","-----\[STDOUT\]標準出力（Perlのバージョン出力）-----<BR>","euc","z");
	foreach (@wcin1)
		{print &jcode'to("sjis","$_<BR>","euc","z");}
	print &jcode'to("sjis","-----\[\/STDOUT\]ここまで-----<BR><BR>-----\[STDERR\]標準エラー出力（構文チェック結果）-----<BR><BR>","euc","z");
	foreach (@wcin2)
		{
		print &jcode'to("sjis","$_<BR>","euc","z");
		if ($_ =~ /Syntax OK/i)
			{$syntaxok = 1;}
		}
	print &jcode'to("sjis","<BR>-----\[\/STDERR\]ここまで-----<BR>","euc","z");
	if ($syntaxok)
		{
		print "<FORM ACTION=\"$filename\" METHOD=\"POST\"><INPUT TYPE=\"HIDDEN\" NAME=\"CHECK\" VALUE=\"2\">";
		print &jcode'to("sjis","<INPUT TYPE=\"SUBMIT\" VALUE=\"$scriptcheckを実行してみる\"><\/FORM>","euc","z");
		}
	}
elsif (-x $scriptcheck && $in{'CHECK'} == 2)
	{
	`$perl $scriptcheck 1>> $datadir/jc-check1.txt 2>> $datadir/jc-check2.txt`;
	open (IN,"$datadir/jc-check1.txt");
	@wcin1 = <IN>;
	close IN;
	open (IN,"$datadir/jc-check2.txt");
	@wcin2 = <IN>;
	close IN;
	unlink ("$datadir/jc-check1.txt");
	unlink ("$datadir/jc-check2.txt");
	print &jcode'to("sjis","Content-type\: text\/html\;〜という表示のある行以前に何かが表示されていたら<BR>通常Internal Server Errorが出る原因となります。<BR>-----\[STDOUT\]標準出力-----<BR>","euc","z");
	foreach (@wcin1)
		{
		$_ =~ s/\</\&lt\;/g;
		$_ =~ s/\>/\&gt\;/g;
		print &jcode'to("sjis","$_<BR>","euc","z");
		}
	print &jcode'to("sjis","-----\[\/STDOUT\]ここまで-----<BR><BR>-----\[STDERR\]標準エラー出力-----<BR><BR>","euc","z");
	foreach (@wcin2)
		{
		$_ =~ s/\</\&lt\;/g;
		$_ =~ s/\>/\&gt\;/g;
		print &jcode'to("sjis","$_<BR>","euc","z");
		}
	print &jcode'to("sjis","<BR>-----\[\/STDERR\]ここまで-----<BR>","euc","z");
	}
elsif (-f $scriptcheck && $in{'CHECK'} == 2)
	{print &jcode'to("sjis","$scriptcheckのパーミションが適切ではありません。<BR>","euc","z");}
print $printtext2;
exit;