#!/usr/bin/perl
#	↑サーバーの「perl」のパスを指定。
#	駄目なら｢#!/usr/local/bin/perl5｣
#	それでも駄目ならサーバー管理者に問い合わせて下さい。

###########################################################################
##------------------- まが CGI(iバックナンバー)  -------------------
##   (C)Copyright 2001 by Chama.ne.jp
##   E-mail:master@chama.ne.jp
##   HP:http://www.chama.ne.jp
###########################################################################
# 免責事項、バージョン情報などはkanri.cgiを参照
#---------- ↓初期設定項目 -----------------------------------------------#
#バックナンバー一覧CGI名
$ibackno_cgi = 'ibackno.cgi';

#本文表示CGI名
$ibackno2_cgi = 'ibackno2.cgi';

#管理ＣＧＩ名
$kanri_cgi = 'kanri.cgi';

#マガジン削除ＣＧＩ名
$mdele_cgi = 'mdele.cgi';

#マガジンの修正ＣＧＩ名
$msyuusei_cgi = 'msyuusei.cgi';

#マガジン配信ＣＧＩ名
$mail2_cgi = 'mail2.cgi';

#基本情報ファイル名
$k_file = 'def/kihon.dat';

#ＣＧＩ名著作権表示ファイル名
$cgi_file = 'def/cgi.dat';

#リストデータファイル名
$index_file = 'def/index2.dat';

#バックナンバー表示情報ファイル名
$backnoset_file = 'def/ibacknoset.dat';

#配信内容保存ディレクトリの指定
$result_dir = 'data/result';

#<<name>>を変換
$d_name = '＜＜name＞＞';
#---------- ↓プログラム--------------------------------------------------#
#----------↑設定終了↓以下は修正しない。---------------------------------
require './jcode.pl';
$ENV{'TZ'} = "JST-9";
$time = time;
&decode;
#ファイルロック
&o_lock;

#基本ファイルを開く
&k_open;

#ＣＧＩファイルを開く
&cgi_open;

#メルマガリストを取得
&f_open;

#バックナンバー設定データファイルを開く
&backnoset_open;

&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_next = $in{'next'};
}
#基本ファイルのOPEN------------------------------------------------------
sub k_open{
	open KF,"$k_file" or die "$k_file オープン失敗";
		while (<KF>){
			chomp $_;
			$_ =~s/[\r\n\t\f]//g;
			($mail,$url,$logo,$title,$title_size,$title_color,
			$word_size,$word_color,$table_color,$td_color,$data,
			$bg_file,$pass,$sendmail,$pc_prevmax,$i_prevmax,$track_color,
			$face_color,$shadow_color,$darkshadow_color,$hightlight_color,
			$dlight_color,$arrow_color,$subject_form,$subject_in,$subject_out,
			$mail_on,$title_on,$i_url,$i_logo,$i_bg_file,$kanriname,$flagname1,
			$flagname2,$flagname3,$flagname4,$flagname5,
			$flagname6,$flagname7,$flagname8,$flagname9,$html_mail,$maillist1,
			$maillist2,$mail_name,$backdefprev,$bgcolor,$ibgcolor) = split(/<>/,$_);
		}
	close KF;
	$pc_prevmax = $i_prevmax;
}
#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 f_open{
	$l_cnt = 0;
	#メルマガデータを取得
	open IIN,"$index_file" or die "$index_file オープン失敗";
	while (<IIN>){
		$_ =~ s/[\r\n\t\f]//g;
		($l_no[$l_cnt],$l_time[$l_cnt],$l_prev[$l_cnt],$l_mno[$l_cnt],
			$l_title[$l_cnt],$l_html[$l_cnt],$l_cnt[$l_cnt],
			$l_flag[1][$l_cnt],$l_flag[2][$l_cnt],$l_flag[3][$l_cnt],
			$l_flag[4][$l_cnt],$l_flag[5][$l_cnt],$l_flag[6][$l_cnt],
			$l_flag[7][$l_cnt],$l_flag[8][$l_cnt],$l_flag[9][$l_cnt]) = split(/<>/,$_);
		$recnt = 1;
		$reok = 0;
		if($in{'flag'}){
			while(9 >= $recnt){
				if($in{'flag'} == $recnt && $l_flag[$recnt][$l_cnt] == 1){
					$reok = 1;
				}
				$recnt++;
			}
		}else{
			$reok = 1;
		}
		if($l_prev[$l_cnt] == 1 && $reok == 1 && $l_cnt[$l_cnt] > 0 && $l_time[$l_cnt] < $time){
			$l_cnt++;
		}
	}
	close IIN;
}
#データファイルのOPEN------------------------------------------------------
sub backnoset_open{
	$bset_cnt = 0;
	open BACKSETIN,"$backnoset_file" or die "$backnoset_file オープン失敗";
	while (<BACKSETIN>){
		$_ =~ s/[\r\t\f\n]//g;
		$backsetdata[$bset_cnt] = $_;
		$bset_cnt++;
	}
	close BACKSETIN;
	$backsetheader = $backsetdata[0];
	$backsetfooter = $backsetdata[1];
	($bsetdot,$bsetday,$bsetimage,$bsettarget,$bsethtmlmail,$readcntset) = split(/<>/,$backsetdata[2]);
	$backsetbody = $backsetdata[3];
	$backsetbodyhead = $backsetdata[4];
	$backsetbodyfoot = $backsetdata[5];
	$backsetprev = $backsetdata[6];
}
#一覧表示----------------------------------------------------------
sub prev{
	&top;
	$backsetheader =~ s/&br;/\n/g;
	$backsetheader =~ s/<<home>>/$i_url/g;
	print $backsetheader;
	$backsetbodyhead =~ s/&br;/\n/g;
	$backsetbodyhead =~ s/<<home>>/$i_url/g;
	print $backsetbodyhead;

	$p_cnt = $in_next;
	$last_cnt = $p_cnt + $pc_prevmax;
	if($last_cnt > $l_cnt){
		$last_cnt = $l_cnt;
	}
	$backsetbody =~ s/&br;/\n/g;
	while($last_cnt > $p_cnt){
		$prevbody = $backsetbody;
		$prevbody =~ s/%NO%/$l_no[$p_cnt]/g;
		$prevno = $l_cnt - $p_cnt;
		$prevbody =~ s/%NO2%/$prevno/g;
		$l_title[$p_cnt] =~ s/</&lt;/g;
		$l_title[$p_cnt] =~ s/>/&gt;/g;
		$prevbody =~ s/%TITLE%/$l_title[$p_cnt]/g;
		($sec,$min,$hou,$mda,$mon,$yea,$wda,$yda,$isd) = localtime($l_time[$p_cnt]);
		$prevtime = sprintf("%02d年%02d月%02d日",$yea + 1900,$mon + 1,$mda);
		$prevtime .= sprintf("%02d時%02d分%02d秒",$hou,$min,$sec);
		$prevbody =~ s/%TIME%/$prevtime/g;
		$prevbody =~ s/%COUNT%/$l_cnt[$p_cnt]/g;
		print $prevbody;
		$p_cnt++;
	}
	$backsetbodyfoot =~ s/&br;/\n/g;
	$backsetbodyfoot =~ s/<<home>>/$url/g;
	print $backsetbodyfoot;

	if($in_next > 0){
		$bf_cnt = $in_next - $pc_prevmax;
		if($bf_cnt < 0){
			$bf_cnt = 0;
		}
		print "<A href=\"$backno_cgi\?next=$bf_cnt\">";
		print "BACK";
		print "</A>\n";
		print "<br>\n";
	}
	if($l_cnt > $p_cnt){
		$next_cnt = $p_cnt;
		print "<A href=\"$backno_cgi\?next=$next_cnt\">";
		print "NEXT";
		print "</A>\n";
		print "<br>\n";
	}
	$backsetfooter =~ s/&br;/\n/g;
	$backsetfooter =~ s/<<home>>/$i_url/g;
	if($in{'flag'}){
		$p_flag = 'flag'.$in{'flag'}.'=1';
	}else{
		$p_flag = '';
	}
	$backsetfooter =~ s/%FLAG%/$p_flag/g;
	print $backsetfooter;
	&last;
}
#HTMLprintサブルーチン---------------------------------------------------
sub top{
	print "Content-type:text/html\n\n";
	print "<html><head><title>$title</title>\n";
	print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
	print "<META http-equiv=\"Content-Style-Type\" content=\"text/css\">\n";
	print "<STYLE type=text/css>\n";
	print '<!--',"\n";
	print 'body {scrollbar-Track-Color:',$track_color,';',"\n";
	print 'scrollbar-Face-Color:',$face_color,';',"\n";
	print 'scrollbar-Shadow-Color:',$shadow_color,';',"\n";
	print 'scrollbar-DarkShadow-Color:',$darkshadow_color,';',"\n";
	print 'scrollbar-Highlight-Color:',$hightlight_color,';',"\n";
	print 'scrollbar-3dLight-Color:',$dlight_color,';',"\n";
	print 'scrollbar-Arrow-Color:',$arrow_color,';}',"\n";
	print 'INPUT{',"\n";
	print 'color : blown;border-width : 1px 1px 1px 1px;border-style : solid solid solid solid;border-color : navy navy navy navy;}',"\n";
	print '-->',"\n";
	print "</STYLE>\n";
	print "</head>\n";
	print "<body bgcolor=\"$ibgcolor\" background=\"$bg_file\">\n";
	print "<font size=$word_size color=$word_color>\n";
	if($i_logo){
		print "<IMG src=$i_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 size=$title_size color=$title_color>\n";
		print "$title\n";
		print "</font>\n";
		print "</td>\n";
		print "</tr>\n";
		print "</table>\n";
	}
}
sub last{
	#ロック解除
	&c_lock;

	if($copyright){
		print "<center>";
		print "<HR width=\"95%\" color=\"$word_color\">\n";
		print "<font class=\"word\" size=\"$word_size\" color=\"$word_color\">\n";
		print $copyright;
		print "</font>\n";
		print "</center>";
	}
	print "</body></html>\n";
	exit;
}

#データロック------------------------------------------------
sub o_lock{
	open(LOCK,">data.lock");
	flock(LOCK,2);
}

#ロック解除--------------------------------------------------
sub c_lock{
	close(LOCK);
}