#!/usr/local/bin/perl

# for ibbs.cgi v1.03

#--------------------------------------------------------------------------------------------------
# 初期設定 ここから
#--------------------------------------------------------------------------------------------------

#●タイトル設定
$title = 'iMODE絵文字';

#●絵文字データファイル(PATH)
$image_data = "./emoji.dat";

#●画面設定
$body_web = '<BODY BGCOLOR=#FFFFFF>'; # Web画面用
$body1 = '<BODY>'; # iモード対応HTML Version1.0用
$body2 = '<BODY BGCOLOR=#FFEEDD>'; # iモード対応HTML Version2.0用 (カラー対応)

#●絵文字画像用ディレクトリ(URL)
$images = "./images/";

#--------------------------------------------------------------------------------------------------
# ここまで
#--------------------------------------------------------------------------------------------------

$| = 1;
$page = 20; # 変更しないこと

if ($ENV{'HTTP_USER_AGENT'} =~ /DoCoMo/) {

	$iMODE = 1;
	if ($ENV{'HTTP_USER_AGENT'} =~ /502/) { $body = $body2; }
	else { $body = $body1; }
}
else { $body = $body_web; }

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

	($key,$val) = split(/=/,$pair);
	$key =~ tr/+/ /;
	$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
	$in{$key} = $val;
}

if (!open(IN,$image_data)) { &error("●エラー","File Not Found"); }
@BASE = <IN>;
close(IN);

if ($in{'FF'} eq '') { $FF = 0; } else { $FF = $in{'FF'}; }
$TO = $FF + $page - 1;
if ($TO > $#BASE) { $TO = $#BASE; }
$hit = 0;

foreach $num ($FF .. $#BASE) {

	$BASE[$num] =~ s/\n//g;
	$data = $BASE[$num];

	if ($in{'FF'} ne '') {

		$allhits = $in{'allhits'};
		if ($hit == $page) { last; }
		else { push(@NEW,$data); $hit++; }
	}
	else {
		if ($allhits % $page == 0) { push(@Index,$num); }
		if ($hit < $page) { $hit++; push(@NEW,$data); }
		$allhits++;
	}
}

if ($in{'allhits'} eq '') { push(@Buf,"allhits=$allhits"); $in{'allhits'} = $allhits; }
if ($in{'FF'} ne '') { @Index = split(/\s/,$in{'IDX'}); }

if (!@NEW) { &error('データなし'); }
$count_new = @NEW;

print "Content-type: text/html\n\n";

print <<"EOF";
<HTML><HEAD><TITLE>$title</TITLE></HEAD>
$body
EOF

if ($iMODE) {

	print <<"EOF";
	<DIV ALIGN="left">&#63862;$title</DIV>
	<hr size=1>
	&#63814;絵文字の書き方<br>
	&amp;#番号\;<br>
	と文中に記します
	<hr size=1>
	キー&#63879;〜&#63887;で改頁
	<hr size=1>
EOF
}
else {
	print "<H1 ALIGN=\"left\"><IMG SRC=\"$images" . "109.gif\" alt=\"\"> $title<hr size=1></H1>\n";

	print <<"EOF";
	○絵文字の書き方 <font size=+2><u>&amp;#番号\;</u></font> と文中に記します.<p>
	<hr size=1>
	<p>
EOF
}

$buf = join('&',@Buf);
$idx = join('+',@Index);

$FROM = $page_now * $page - ($page - 1);
$LAST = $FROM + $count_new - 1;

if (!$iMODE) {

	print <<"EOF";
	<table border=3>
	<tr>
	<th>番号</th>
	<th>絵文字</th>
	<th>説明</th>
	</tr>
EOF
}

foreach $data (0 .. $#NEW) {

	($num,$F16,$S10,$name) = &DecodeCSV($NEW[$data]);

	$S10 =~ s/^63(\d\d\d)/$1/g;

	if ($iMODE) {

		print "$S10 &#63$S10; $name<BR>\n";
	}
	else {
		print <<"EOF";
		<tr>
		<td align=center>$S10</td>
		<td><img src="$images$num\.gif" alt="$name"></td>
		<td>$name</td>
		</tr>
EOF
	}
}

if (!$iMODE) {

	print <<"EOF";
	</table><p>
EOF
}

if ($iMODE) { print "<hr size=1>Page:"; }
else { print "<FONT SIZE=+1> [ "; }

foreach (0 .. $#Index) {

	$view_page = $_ + 1;
	if ($FF == $Index[$_] || ($in{'FF'} eq '' && $_ == 0)) { print "↑"; $page_now = $view_page; }
	else {
		if (!$iMODE) { print " "; }
		print "<a href=\"emoji.cgi?$buf&IDX=$idx&FF=$Index[$_]\" ACCESSKEY=\"$view_page\">$view_page</a>";
	}
}

if (!$iMODE) { print " ]</FONT>\n"; }

$copyr = "$images" . "108.gif";

if ($iMODE) {

	print <<"EOF";
	<hr size=1>
	<A HREF="ibbs.cgi" ACCESSKEY="*">掲示板(*)</A><A HREF="ibbs.cgi?action=post" ACCESSKEY="#">投稿(#)</A>
	<hr size=1>
	<div align=right><a href="http://www.rescue.ne.jp/i/">&#63861;iBBS</a></div>
EOF
}
else {
	print <<"EOF";
	<hr size=1>
	<div align=right><a href="http://www.rescue.ne.jp/" target=_top>iBBS</a></div><p>
EOF
}

print <<"EOF";
</BODY></HTML>
EOF

exit;

sub DecodeCSV {

	local($text) = @_;
	local(@fields) = ();
	local($a);

	$text =~ s/\n//;
	if ($text eq '') { return (); }

	while ($text =~ m/"([^\\]*(\\.[^\\]*)*)",?|([^,]+),?|,/g) {

		$a = defined($1) ? $1 : $3;
		$a =~ s/""/"/g;

		$a =~ s/&/&amp;/g;
		$a =~ s/"/&quot;/g;
		$a =~ s/</&lt;/g;
		$a =~ s/>/&gt;/g;

		push(@fields,$a);
	}
	push(@fields, undef) if $text =~ m/,$/;

	@fields;
}

sub error {

	local (@msg) = @_;
	local ($i);

	print "Content-type: text/html\n\n";

	print <<"EOF";
	<HTML><HEAD><TITLE>$title</TITLE></HEAD>
	$body
EOF

	if ($iMODE) { print "<DIV ALIGN=\"left\">&#63862;$title</DIV>\n"; }
	else { print "<H1 ALIGN=\"left\"><IMG SRC=\"$images" . "109.gif\" alt=\"\"> $title</H1>\n"; }

	foreach $i (0 .. $#msg) { print "$msg[$i]<BR>\n"; }

	print "</body></html>\n";
	exit;
}

