#!/usr/bin/perl
#	↑サーバーの「perl」のパスを指定。
#	駄目なら｢#!/usr/local/bin/perl｣
#	それでも駄目ならサーバー管理者に問い合わせて下さい。

#######################################################
##------------------- RANDUM CGI ---------------------
##   (C)Copyright 2001 by Chama.ne.jp
##       E-mail:master@chama.ne.jp
##       HP:http://www.chama.ne.jp
#######################################################
#---------- ↓初期設定項目 -----------------------------------------------#
#保存ファイルの指定---------------------------------
#管理ＣＧＩ名
$kanri_cgi = 'kanri.cgi';

#基本情報ファイル名
$k_file = 'data/kihon.dat';

#ＣＧＩ名著作権表示ファイル名
$cgi_file = 'data/cgi.dat';

#リンク情報保存ファイル名
$link_file = 'data/link.dat';

#ヘッダー情報ファイル名
$header_file = 'data/header.dat';

#フッター情報ファイル名
$footer_file = 'data/footer.dat';

#CSSファイル名
$style_file = 'randum.css';

#---------- ↓プログラム--------------------------------------------------#
require './jcode.pl';

&decode;
#ファイルロック
&o_lock;

#基本ファイルを開く
&k_open;

#CSSファイルを開く
&stylein;

#ＣＧＩファイルを開く
&cgi_open;

#リンク情報ファイルを開く
&link_open;

#フッターファイルを開く
&footer_open;

#ヘッダーファイルを開く
&header_open;

#ロック解除
&c_lock;

#ランダム表示
&prev;

#サブルーチン--------------------------------------------------------------#
#デコード処理-------------------------------------------------------------
sub decode{
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});
	} else {
		$buff = $ENV{'QUERY_STRING'};
	}
	@pairs = split(/&/,$buff);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ s/ /　/g;
		&jcode'convert(*value,'sjis');
		$in{$name} = $value;
	}
	$in_pass = $in{'in_pass'};
	$in_flag = $in{'in_flag'};
}
#基本ファイルのOPEN------------------------------------------------------
sub k_open{
	open KF,"$k_file" or die "$k_file オープン失敗";
		while (<KF>){
			chomp $_;
			$_ =~s/\r//g;
			($mail,$url,$logo,$title,$title_size,$title_color,
			$word_size,$word_color,$table_color,$td_color,$data,
			$bg_file,$pass,$track_color,
			$face_color,$shadow_color,$darkshadow_color,$hightlight_color,
			$dlight_color,$arrow_color,$title_on,$i_url,$i_logo,$i_bg_file,
			$rcolsmax,$rrowsmax,$imgheighton,$imgheight,$comalt) = split(/<>/,$_);
		}
	close KF;
}
#スタイルシートの読み込み----------------------------------------------------
sub stylein{
	open STYLEIN,"$style_file";
	while(<STYLEIN>){
		$_ =~ s/[\r\n\f]//g;
		$stylehtml .= $_;
		$stylehtml .= "\n";
	}
	close STYLEIN;
}
#CGI情報ファイルのOPEN-------------------------------------------------------
sub cgi_open{
	open CGIIN,"$cgi_file" or die "$cgi_file オープン失敗";
		while (<CGIIN>){
			$_ =~ s/[\r\n\t\f]//g;;
			$copyright = $_;
		}
	close CGIIN;
	$copyright2 = $copyright;
	$copyright2 =~ s/&copy;/\(c\)/g;
	$copyright2 =~ s/<\/?$_[^>]*>//ig;
	$copyright2 =~ s/[\r\n\t\f]//g;
}
#リンク情報ファイルのOPEN------------------------------------------------
sub link_open{
	$l_cnt = 0;
	local $cnt = 10000;
	srand(time ^ ($$ + ($$ << 15)));
	open LINKIN,"$link_file" or die "$link_file オープン失敗";
		while (<LINKIN>){
			$_ =~ s/[\r\n\t\f]//g;;
			($l_no,$l_img,$l_url,$l_com,$l_target,$l_titletop,$l_titledown) = split(/<>/,$_);
			$l_randum = int(rand($cnt));

			$v_img{$l_no} = $l_img;
			$v_url{$l_no} = $l_url;
			$v_com{$l_no} = $l_com;
			$v_target{$l_no} = $l_target;
			$v_titletop{$l_no} = $l_titletop;
			$v_titledown{$l_no} = $l_titledown;

			$bfsort[$l_cnt] = $l_no.','.$l_randum;
			$l_cnt++;
		}
	close LINKIN;
}
#データファイルのOPEN------------------------------------------------------
sub header_open{
	$f_cnt = 0;
	open FF,"$header_file" or die "$header_file オープン失敗";
		while (<FF>){
			$_ =~ s/[\r\t\f\n]//g;
			@header_data = (@header_data,$_);
		}
	close FF;
}
#データファイルのOPEN------------------------------------------------------
sub footer_open{
	$f_cnt = 0;
	open FF,"$footer_file" or die "$footer_file オープン失敗";
		while (<FF>){
			$_ =~ s/[\r\t\f\n]//g;
			@footer_data = (@footer_data,$_);
		}
	close FF;
}
#ランダム表示--------------------------------------------------------
sub prev{
	&top;
	foreach $header_(@header_data){
		print $header_;
		print "<br>\n";
	}

	#Schwartzian Transformでソート
	@sorted = map { $_->[0] }
	sort { $a->[2] <=> $b->[2] }
	map { [$_, (split /,/)] }
	@bfsort;

	print "<table border=\"0\" width=\"90%\" cellpadding=\"1\" cellspacing=\"1\" bgcolor=\"$table_color\">\n";
	$td_cnt = 0;
	$tr_cnt = 0;
	$tr_flag = 1;
	$lastcnt = $rcolsmax * $rrowsmax;

	$tdwidth = int(100/$rcolsmax);

	foreach $sorted_(@sorted){
		$br_flag = 0;
		($no,$randum) = split(/\,/,$sorted_);
		if($tr_flag == 1){
			print "<tr bgcolor=\"$td_color\">\n";
			$tr_flag = 0;
		}
		print "<td align=\"center\" valign=\"top\" width=\"$tdwidth\%\">\n";

		print "<A href=\"$v_url{$no}\" target=\"$v_target{$no}\">";

		if($v_titletop{$no}){
			print "<font class=\"wordtop\" size=\"$word_size\" color=\"$word_color\">\n";
			print $v_titletop{$no};
			print "</font>\n";
			$br_flag = 1;
		}
		if($v_img{$no}){
			if($v_titletop{$no}){
				print "<br>";
			}
			if($v_com{$no}){
				$v_com{$no} =~ s/<br>/\n/g;
				print "<img src=\"$v_img{$no}\" border=\"0\" alt=\"$v_com{$no}\"";
			}else{
				print "<img src=\"$v_img{$no}\" border=\"0\" alt=\"$no\"";
			}
			if($imgheighton == 1){
				print " height=\"$imgheight\"";
			}else{
				print " width=\"$imgheight\"";
			}
			print ">";
			$br_flag = 1;
		}
		print "</A>";
		if($v_titledown{$no}){
			if($br_flag == 1){
				print "<br>\n";
			}
			print "<font class=\"worddown\" size=\"$word_size\" color=\"$word_color\">\n";
			print $v_titledown{$no};
			print "</font>";
			$br_flag = 1;
		}
		unless($comalt == 1){
			if($v_com{$no}){
				if($br_flag == 1){
					print "<br>\n";
				}
				print "<font class=\"wordcom\" size=\"$word_size\" color=\"$word_color\">\n";
				print $v_com{$no};
				print "</font>";
			}
		}

		$printcnt++;
		$td_cnt++;
		print "</td>\n";
		if($td_cnt >= $rcolsmax){
			print "</tr>\n";
			$tr_flag = 1;
			$td_cnt = 0;
		}

		if($printcnt == $lastcnt){
			last;
		}
	}
	if($tr_flag == 0){
		#表示する枠が残っていたら空で表示する。
		while($rcolsmax > $td_cnt){
	 		print "<td align=\"center\">\n";
			print "　\n";
			print "</td>\n";
			$td_cnt++;
		}
		print "</tr>\n";
	}
	print "</table>\n";

	foreach $footer_(@footer_data){
		print $footer_;
		print "<br>\n";
	}
	&last;
}
#HTMLprintサブルーチン---------------------------------------------------
sub top{
	print "Content-type:text/html\n\n";
	print "<html><head><title>$title</title>\n";
	print "<STYLE type=text/css>\n";
	print '<!--',"\n";
	print $stylehtml;
	print '-->',"\n";
	print "</STYLE>\n";
	print "</head>\n";
	if($bg_file){
		print "<body background=$bg_file>\n";
	}else{
		print "<body bgcolor=$bg_color>\n";
	}
	print "<font class=\"word\" size=$word_size color=$word_color>\n";
	if($logo){
		print "<IMG src=$logo>\n";
		print "<br>\n";
	}
	unless($title_on == 2){
		print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"$table_color\">\n";
		print "<tr bgcolor=\"$td_color\">\n";
		print "<td align=center>\n";
		print "<font class=\"title\" size=$title_size color=$title_color>\n";
		print "$title\n";
		print "</font>\n";
		print "</td>\n";
		print "</tr>\n";
		print "</table>\n";
	}
}
sub last{
	if($copyright){
		print "<div align=\"right\">\n";
		print $copyright;
		print "</div>\n";
	}
	print "</font>\n";
	print "</body></html>\n";
	exit;
}
#データロック------------------------------------------------
sub o_lock{
	open(LOCK,">data.lock");
	flock(LOCK,2);
}
#ロック解除--------------------------------------------------
sub c_lock{
	close(LOCK);
}