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

###########################################################################
##--------------------- Chama's MEMO CGI v2.02 ---------------------------
##   (C)Copyright 2001 by Chama.ne.jp
##       E-mail:master@chama.ne.jp
##       HP:http://www.chama.ne.jp
###########################################################################
#v1.1 データ保存時に一部の不具合があった点を修正
#v2.0 簡易カウンタ機能を追加
#v2.1 更新日表示機能を追加

#---------- 免責事項 -----------------------------------------------------#
# 1.このプログラムはフリーソフトですが、著作権はChama-Net事務局中川督之にあります。
#  いかなる場合であっても、有料で売買、設置、使用、変更等を行ってはいけません。
#  また、この著作権表示、CGIを画面に表示した時のChama-Netの表示の変更は認めません。
# 2.このプログラムを使用したことによる一切の損害等は保障致しません。 
# 3.その他についてはChama-Net事務局にお問い合わせ下さい。
#  連絡先 http://www.chama.ne.jp
#  E-mail master@chama.ne.jp

#---------- ↓初期設定項目 -----------------------------------------------#
#本文情報ファイルの指定
$file = 'data.dat';

#カウンタ、更新日情報ファイルの指定
$cnt_file = 'data2.dat';

#カウンタの表示(する=yes、しない=no)
$cnt_ok = 'yes';

#更新日の表示(する=yes、しない=no)
$date_ok = 'yes';

#パスワードの指定
$pass = 'discus8';

#このCGIの名前
$cgi = 'memo.cgi';

#タイトルの指定
$title = 'MEMO-cgi';

#文字サイズの指定
$word_size=2;

#文字色の指定
$word_color='#FF0000';

#壁紙の指定(URLを’’間に入れる 例:http://・・・・○○.gif)
$bg_file = '';

#壁紙が無ければ背景色を使用
$bg_color = '#FFCC99';

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

#ファイルロック
&o_lock;

&f_open;
&c_open;
&c_write;
if($in_flag == 2){
	✓
	&write;
	&kanryou;
}


#ロック解除
&c_lock;

if($in_flag == 1){
	✓
	&form;
}

&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;
		&jcode'convert(*value,'sjis');
		$value =~ s/[\r\t\f]//g;
		$in{$name} = $value;
	}
	$in_pass = $in{'in_pass'};
	$in_text = $in{'in_text'};
	$in_flag = $in{'in_flag'};
}
#パスワードチェック---------------------------------------
sub check{
	unless($in_pass){
		$err=1;
		&err;
	}
	unless($in_pass eq $pass){
		$err = 2;
		&err;
	}
}
#データ保存-----------------------------------------------
sub write{
	open FOUT, ">$file" or die "$file オープン失敗";
	print FOUT $in_text;
	close FOUT;
}
#fileの読込み---------------------------------------------
sub f_open{
	open FIN, "$file" or die "$file オープン失敗";
		@f_data = ();
		while (<FIN>){
			chomp $_;
			@f_data = (@f_data,$_);
		}
	close FIN;
}
#カウンタ、更新日情報ファイルを開く-------------------------
sub c_open{
	open CNTIN,"$cnt_file" or die "$cnt_file オープン失敗";
		while (<CNTIN>){
			chomp $_;
			($cnt,$date) = split(/<>/,$_);
		}
	#カウントファイルを閉じる
	close CNTIN;
}
#カウンタ情報の更新----------------------------------------
sub c_write{
	$time = time;
	$now = &time($time);
	open CNTOUT, ">$cnt_file" or die "Cannot open $cnt_file:s!";
	unless($in_flag > 0){
		$cnt++;
		print CNTOUT $cnt,"<>",$date,"\n";
	}else{
		print CNTOUT $cnt,"<>",$now,"\n";
	}
	close CNTOUT;
}
#現在時刻の把握---------------------------------------------
sub time{
	$time = $_[0];
	($sec,$min,$hou,$mda,$mon,$yea,$wda,$yda,$isd) = localtime($time);
	$year_now = $yea + 1900;
	$date_now = sprintf("%02d/%02d/%02d",$yea + 1900,$mon + 1,$mda);
	$youbi_now = ('(日)','(月)','(火)','(水)','(木)','(金)','(土)') [$wda];
	$time_now = sprintf("%02d:%02d:%02d",$hou,$min,$sec);
	$now = '';
	$now .= $date_now;
#	$now .= $youbi_now;
#	$now .= $time_now;
	return($now);
}

#完了画面の表示--------------------------------------------
sub kanryou{
	&top;
	print "<table border=0 bgcolor=$word_color>\n";
	print "<tbody>\n";
	print "<tr>\n";
	print "<td align=center bgcolor=#FFFFFF>\n";
	print "<font size=3 color=$word_color>\n";
	print "入力完了";
	print "</font>\n";
	print "</td>\n";
	print "</tr>\n";
	print "</tbody>\n";
	print "</table>\n";
	print "<br><br>\n";
	print "<A href=$cgi>プレビュー</A>\n";
	&last;
}

#入力画面の表示-------------------------------------------
sub form{
	&top;
	print "<table border=0 bgcolor=$word_color>\n";
	print "<tbody>\n";
	print "<tr>\n";
	print "<td align=center bgcolor=#FFFFFF>\n";
	print "<font size=3 color=$word_color>\n";
	print "入力画面";
	print "</font>\n";
	print "</td>\n";
	print "</tr>\n";
	print "</tbody>\n";
	print "</table>\n";
	print "<br><br>\n";
	print "<form action=$cgi method=post>\n";
	print "<TEXTAREA name=in_text rows=30 cols=60>\n";
	foreach $p_file(@f_data){
		print $p_file;
		print "\n";
	}
	print "</TEXTAREA>\n";	
	print "<br>\n";
	print "<input type=hidden name=in_flag value=2>\n";
	print "<input type=\"hidden\" size=\"10\" name=\"in_pass\" value=\"$in_pass\">\n";
	print "<INPUT type=\"submit\" value=\"修正(送信)\">\n";
	print "</form>\n";
	&last;
}

#プレビュー画面の表示--------------------------------------
sub prev{
	&top;
	print "<table border=0 width=95%>\n";
	print "<tbody>\n";
	print "<tr>\n";
	print "<td>\n";
	print "<font size=$word_size color=$word_color>\n";

	foreach $p_file(@f_data){
		$p_file =~ s/[\n]/<br>/g;
		print "<br>\n";
		print $p_file;
	}
	print "</td>\n";
	print "</tr>\n";
	print "<tr>\n";
	print "<td align=right>\n";
	print "<form action=$cgi method=post>\n";
	print "<font size=2 color=#ccccff><A href=http://www.chama.ne.jp>MEMO.cgi v2.02 by Chama-Net</A></font>\n";
	print "<br>\n";
	print "<input type=hidden name=in_flag value=1>\n"; 
	print "<input type=password size=10 name=in_pass>\n";
	print "<INPUT type=submit value=管理>\n";
	print "</form>\n";
	print "</font>\n";
	print "</td>\n";
	print "</tr>\n";
	print "</tbody>\n";
	print "</table>\n";

	&last;
}

#エラー画面の表示--------------------------------------------
sub err{
	#ロック解除
	&c_lock;

	&top;
	print "<table border=0 bgcolor=$word_color>\n";
	print "<tbody>\n";
	print "<tr>\n";
	print "<td align=center bgcolor=#FFFFFF>\n";
	print "<font size=3 color=$word_color>\n";
	print "入力エラーです。";
	print "</font>\n";
	print "</td>\n";
	print "</tr>\n";
	print "</tbody>\n";
	print "</table>\n";
	print "<br><br>\n";
	if($err == 1){
		print "パスワードが入力されていません。";
	}elsif($err == 2){
		print "パスワードに誤りがあります。";
	}
	&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 '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";
	if($bg_file){
		print "<body background=$bg_file>\n";
	}else{
		print "<body bgcolor=$bg_color>\n";
	}
	print "<font size=$word_size color=$word_color>\n";
	if($date_ok eq 'yes'){
		print "最終更新:",$date,"\n";
	}
	if($cnt_ok eq 'yes'){
		print "Count:",$cnt,"\n";
	}
	print "<br>\n";
	print "<center>\n";
}

sub last{
	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);
}