#!/usr/bin/perl -U

#############################################################################
# wookie's Web Board version 1.3 beta 2                                     #
#                   Homepage : http://interpia.net/~wookie                  #
# Coded 11/09/96 , Last Modified 05/01/97                                   #
#
# Revision by jyllee@ewha.ac.kr
#   2008/02/01 : pcode - time dependent passcode;
#	write_form(), followup_form(), write_err(), modify_form_display()
#   2009/09/29 : get_variables() new_file
#############################################################################

$base_dir = '.';			# °Ô½ÃÆÇÀÇ Àý´ë°æ·Î
$base_url = '.';			# °Ô½ÃÆÇÀÇ URL
$cgi_url  = 'index.cgi';		# ½ºÅ©¸³Æ®ÀÇ URL

# pcode : Time dependent passcode to avoid automatic input (2008/1/28)
# p*43189669*832429 = p (mod n) where n=60*60*24*365=2^7*3^3*5^3*73
$pcode = time() % (60*60*24*365); # 1 (Year)  = 31536000 (Second)

#############################################################################

&parse_form;
umask(022);

$FORM{'bb'} = '1stboard' unless $FORM{'bb'};
$FORM{'h'} = 'r1' unless $FORM{'h'};
$FORM{'w'} = '1' unless $FORM{'w'};

if (-e "$base_dir/$FORM{'bb'}/board.cfg") {
	require "$base_dir/$FORM{'bb'}/board.cfg";
} else {
	require "$base_dir/board.cfg";
}

if    ($FORM{'h'} eq 'r1') { &get_index_line; }
elsif ($FORM{'h'} eq 'r2') { &get_index_line_sorted; }
else { $FORM{'h'} = 'r1'; &get_index_line; }

$make_small_font_size = 1; #added by jylee
$bttn_v1 = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r1&w=1\"><img src=\"$base_url/icons/view1.gif\" border=0 alt=\"±Û¸ñ·Ïº¸±â\"></a>";
$bttn_v2 = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r2&w=1\"><img src=\"$base_url/icons/view2.gif\" border=0 alt=\"°Ô½Ã¼ø±Û¸ñ·Ïº¸±â\"></a>";
$bttn_wr = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=write_form&h=$FORM{'h'}&w=$FORM{'w'}\"><img src=\"$base_url/icons/write.gif\" border=0 alt=\"±Û¾²±â\"></a>";
$bttn_fo = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=followup_form&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\"><img src=\"$base_url/icons/followup.gif\" border=0 alt=\"°ü·Ã±Û¾²±â\"></a>";
$bttn_mo = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=modify_form&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\"><img src=\"$base_url/icons/modify.gif\" border=0 alt=\"±Û¼öÁ¤\"></a>";
$bttn_rm = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=confirm_remove&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\"><img src=\"$base_url/icons/remove.gif\" border=0 alt=\"±Û»èÁ¦\"></a>";
$bttn_ad = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=login_form&h=$FORM{'h'}&w=$FORM{'w'}\"><img src=\"$base_url/icons/admin.gif\" border=0 alt=\"°ü¸®ÀÚÁ¢¼Ó\"></a>";
#$bttn_ad = "";  #deleted by jylee
$bttn_np = "<img src=\"$base_url/icons/next_n.gif\" alt=\"´ÙÀ½ÆäÀÌÁö\">";
$bttn_pp = "<img src=\"$base_url/icons/prev_n.gif\" alt=\"ÀÌÀüÆäÀÌÁö\">";
$bttn_np = ""; $bttn_pp = "";

$board_width = $board_width - 100 if ($make_small_font_size == 1);
$board_width = 548 - 70 if ($board_width < 548);  # -70 added by jylee
$base_length = $board_width / 7.1 - 1.4;
$base_length =~ s/(\d*)\.\d*/\1/;
$subject_length = $base_length - 41;
$textarea_width = $base_length ;#- 15;
($al,$dl,$hl) = (78,80,38);
($al,$dl,$hl) = (62,66,31) if ($make_small_font_size == 1);
$index_table_width = $board_width - 4;
$sl = ($index_table_width - ($al + $dl + $hl)) / 2;
$sl =~ s/(\d*)\.\d*/\1/;


if ($FORM{'c'}) {
	$c = $FORM{'c'};
	if    ($c eq 'view_index'        ) { &view_index;        }
	elsif ($c eq 'read'              ) { &read_mesg;         }
	elsif ($c eq 'write_form'        ) { &write_form;        }
	elsif ($c eq 'followup_form'     ) { &followup_form;     }
	elsif ($c eq 'write'             ) { &write;             }
	elsif ($c eq 'modify_form'       ) { &modify_form;       }
	elsif ($c eq 'modify'            ) { &modify;            }
	elsif ($c eq 'confirm_remove'    ) { &confirm_remove;    }
	elsif ($c eq 'remove'            ) { &remove;            }
	elsif ($c eq 'find'              ) { &find;              }
	elsif ($c eq 'find_help'         ) { &find_help;         }
	elsif ($c eq 'login_form'        ) { &login_form;        }
	elsif ($c eq 'admin_login'       ) { &admin_login;       }
	elsif ($c eq 'ch_admin_info'     ) { &ch_admin_info;     }
	else { $c = 'view_index'; &view_index; }
} else {
	$c = 'view_index';
	&view_index;
}


sub print_html {

	local($IDXH) = shift(@_);

	print "Content-type: text/html";
	print "; charset=euc-kr" if ($charset_kr == 1);
	print "\n\n";

	$top = "<center><table width=$board_width><tr><td>";

	open(HEADER,"$base_dir/$FORM{'bb'}/$head_file") || &open_err("$FORM{'bb'}/$head_file");
	while (<HEADER>) {
		s?<([^b]*)body([^>]*)>?<\1body\2>$top?oi;
		print;
	}
	close(HEADER);

	local(@TH) = ('', 'Á¦             ¸ñ','±Û¾´ÀÌ','±Û¾´½Ã°¢','Á¶È¸');
	@TH = &make_small_size(@TH) if ($make_small_font_size == 1);
	local($ths1,$ths2,$tha,$thd,$thc) = @TH;
	$bmark1 = 1;
print "<center>$separator" . &button; #by jylee
#	print "<center>";
	$bmark1 = 0;
	print "$IDXH";
	print "$separator<table border=0 width=$index_table_width><tr align=center";
	print " bgcolor=$index_th_color" if ($index_th_color);
	print "><th width=$2 nowrap>$ths11</th><th width=$sl+$sl nowrap>$ths2</th>"
	. "<th width=$al nowrap>$tha </th><th width=$dl nowrap>$thd</th>"
	. "<th width=$hl nowrap>$thc</th></tr><tr><td colspan=5 height=3></td></tr>\n";
	foreach (@_) {
		local(@TD) = split(/\|/,$_);
		@TD = &make_small_size(@TD) if ($make_small_font_size == 1);
		local($subject,$author,$date,$hit) = @TD;
		print "<tr";
		print " bgcolor=$index_td_color" if ($index_td_color);
		print "><td colspan=2 nowrap>$subject</td>"
		. "<td nowrap>$author</td><td nowrap align=center>$date</td>"
		. "<td nowrap align=right>$hit </td></tr>\n";
	}
	print "<tr><td colspan=5 height=3></td></tr></table>$separator\n";
	$bmark2 = 1;
	print &button . &findform . "$separator</center>\n";
	$bmark2 = 0;

	$bottom =
#	"<ul type=square><li>TESTING\n</ul>" .
	"</td></tr></table></center></body>\n";

	open(FOOTER,"$base_dir/$FORM{'bb'}/$foot_file") || &open_err("$FORM{'bb'}/$foot_file");
	while (<FOOTER>) {
		s?<[^/]*/[^b]*body[^>]*>?$bottom?oi;
		print;
	}
	close(FOOTER);

	exit;
}


sub make_small_size {

	local(@STD);
	foreach (@_) {
		$std = "<font size=-1>$_</font>";
		push(@STD,$std);
	}
	return @STD;
}


sub button {

	if ($FORM{'h'} eq 'r1' && !($match_num)) {
		if ($end_line < $#LINES) {
			$bttn_np = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r1&w=$down_key\"><img src=\"$base_url/icons/next.gif\" border=0 alt=\"´ÙÀ½ÆäÀÌÁö\"></a>";
		}
		if ($start_line > 2) {
			$bttn_pp = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r1&w=$up_key\"><img src=\"$base_url/icons/prev.gif\" border=0 alt=\"ÀÌÀüÆäÀÌÁö\"></a>";
		}
	}
	if ($FORM{'h'} eq 'r2' && !($match_num)) {
		if ($next_num <= $order) {
			$bttn_np = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r2&w=$next_num\"><img src=\"$base_url/icons/next.gif\" border=0 alt=\"´ÙÀ½ÆäÀÌÁö\"></a>";
		}
		if ($back_num > (1 - $post_num_a_page_sorted)) {
			$bttn_pp = "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=view_index&h=r2&w=$back_num\"><img src=\"$base_url/icons/prev.gif\" border=0 alt=\"ÀÌÀüÆäÀÌÁö\"></a>";
		}
	}

	$BT = "$bttn_v1\n$bttn_v2\n";

	if ($c eq 'read') {
		$BT .= "$bttn_ad\n" if ($bmark1 || $bmark2);
		$BT .= "$bttn_wr\n";
		unless ($bmark2) {
			$BT .= "$bttn_fo\n";
#			if (&check_admin_auth && $bmark1 && $make_small_font_size == 1) {
#				$BT .= "<br>"
#			}
#			elsif (&check_admin_auth && $bmark1 && $board_width < 644) {
#				$BT .= "<br>"
#			}
			$BT .= "$bttn_mo\n";
			$BT .= "$bttn_rm\n" if (&check_admin_auth && $bmark1);
		}
		if ($FORM{'i_f'}) {
			$bttn_np = "<img src=\"$base_url/icons/next_n.gif\" alt=\"´ÙÀ½ÆäÀÌÁö\">";
			$bttn_pp = "<img src=\"$base_url/icons/prev_n.gif\" alt=\"ÀÌÀüÆäÀÌÁö\">";
$bttn_np = ""; $bttn_pp = "";
		}
#		if ($board_width < 644 && !($bmark2)) {
#			$BT .= "<br>"
#		}
#		elsif ($make_small_font_size == 1 && !($bmark2)) {
#			$BT .= "<br>"
#		}
		$BT .= "$bttn_np\n$bttn_pp\n" unless $bmark1;
	} else {
		$BT .= "$bttn_ad\n$bttn_wr\n$bttn_np\n$bttn_pp\n";
	}

	return $BT;
}


sub write_form {

	$IDXH = "$separator<table width=95%><tr><td>";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	$IDXH .= "<br><font size=+2><b>±Û ¾²±â</b></font><p>\n"
	. "ÀÌ¸§, Á¦¸ñ, ³»¿ëÀº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.<br>\n";

	unless (&check_admin_auth) {
		$IDXH .= "Password´Â ÀÌ ±Û °íÀ¯ÀÇ ÆÐ½º¿öµå·Î, <br>" 
           .  "ÀÔ·ÂÇÏÁö ¾ÊÀ¸¸é º»ÀÎµµ Â÷ÈÄ ÀÌ ±ÛÀ» ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.<br>\n";
	}
	$IDXH .= "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"write\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"1\">\n";
	if (&check_admin_auth) {
		$IDXH .= "<b>ÀÌ ¸§ :</b> $master_name<br>\n"
		. "<b>e-mail:</b> $master_email<br>\n"
		. "<input type=hidden name=\"name\" value=\"$master_name\">\n"
		. "<input type=hidden name=\"email\" value=\"$master_email\">\n"
		. "<input type=hidden name=\"id\" value=\"webmaster\">\n";
	} else {
		$IDXH .= "<b>ÀÌ ¸§ :</b> <input type=text name=\"name\" size=11 maxlength=8> \n"
		. "<b>Password :</b> <input type=password name=\"passwd\" size=11 maxlength=8><br>\n"
		. "<b>e-mail:</b> <input type=text name=\"email\" size=45><br>\n";
	}
   $IDXH .= "<b>Á¦  ¸ñ :</b> <input type=text "
         . "name=\"subject\" size=45 maxlength=$subject_length><p>\n"
	 . "<b>³» ¿ë :</b><br><textarea COLS=$textarea_width ROWS=20 "
         . "name=\"body\" wrap=\"soft\"></textarea><p>\n";

   $pcode = $pcode*43189669%(60*60*24*365) + 40000000; # 400000000~71535999
   $IDXH .= "<b>µî·ÏÀÎÁõÄÚµå:</b> <input type=text name=\"passcode\" size=8>\n"
         . "(ÀÚµ¿»ý¼º¹æÁö¸¦ À§ÇØ <b>".$pcode."</b>¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.)<p>\n";

   $IDXH .= "<input type=submit value=\"       ÀÛ¼º¿Ï·á         \">"
         . "<input type=reset value=\"  ´Ù½Ã¾²±â  \">\n"
         . "</form>";
   $IDXH .= "</font>" if ($make_small_font_size == 1);
   $IDXH .= "</td></tr></table><p>$separator\n" . &button;

   &view_index;
}


sub followup_form {

	&error unless ($c eq 'followup_form' && $FORM{'n'} =~  /^\d{9,10}$/);

	open(MESGFILE, "$base_dir/$FORM{'bb'}/$msg_dir/$FORM{'n'}") || &open_err("$FORM{'bb'}/$msg_dir/$FORM{'n'}");
	@MESGLINES = <MESGFILE>;
	close(MESGFILE);

	local($user, $hd_fm, $subject, $name, $long_date, $email) = split(/\|/, $MESGLINES[0]);
	chop($email);

	$IDXH = "$separator<table width=95%><tr><td>";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	$IDXH .= "<br><img src=\"$base_url/icons/close.gif\"> <a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\">$subject</a> -- ";
	if ($email) {
		$IDXH .= "<a href=\"mailto:$email\">$name</a>";
	} else {  
		$IDXH .= "$name";
	}
	$IDXH .= "<p>¿¡ ´ëÇÑ <font size=+2><b>°ü·Ã±Û ¾²±â</b></font><p>\n"
	. "ÀÌ¸§, Á¦¸ñ, ³»¿ëÀº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.<br>\n";
	unless (&check_admin_auth) {
		$IDXH .= "Password´Â ±Û¼öÁ¤½Ã ÀÌ¿ëµÇ´Â ÀÌ±Û °íÀ¯ÀÇ ÆÐ½º¿öµå·Î, ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ ¹«¹æÇÏÁö¸¸<br>"
		. "ÀÔ·ÂÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â ±Û¾´ÀÌ º»ÀÎµµ ±ÛÀ» ¼öÁ¤ÇÒ ¼ö ¾ø°ÔµË´Ï´Ù.<br>\n";
	}
	$IDXH .= "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"write\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
	. "<input type=hidden name=\"followup\" value=\"$hd_fm\">\n";
	if (&check_admin_auth) {
		$IDXH .= "<b>ÀÌ ¸§ :</b> $master_name<br>\n"
		. "<b>e-mail:</b> $master_email<br>\n"
		. "<input type=hidden name=\"name\" value=\"$master_name\">\n"
		. "<input type=hidden name=\"email\" value=\"$master_email\">\n"
		. "<input type=hidden name=\"id\" value=\"webmaster\">\n";
	} else {
		$IDXH .= "<b>ÀÌ ¸§ :</b> <input type=text name=\"name\" size=11 maxlength=8> \n"
		. "<b>Password :</b> <input type=password name=\"passwd\" size=11 maxlength=8><br>\n"
		. "<b>e-mail:</b> <input type=text name=\"email\" size=42><br>\n";
	}

	$IDXH .= "<b>Á¦ ¸ñ :</b> <input type=text name=\"subject\" ";
	if ($subject =~ /^Re:/) {
		$IDXH .= "value=\"$subject\"";
	} else {
	    $IDXH .= "value=\"Re: $subject\"";
	}
	$IDXH .= " size=42 maxlength=$subject_length><p>\n"
	. "<b>³» ¿ë :</b><br>"
	. "<textarea name=\"body\" COLS=$textarea_width ROWS=20 wrap=\"soft\">\n";
	$MESGLINES[$#MESGLINES] =~ s/\n//;
	for ($j = 1; $j <= $#MESGLINES; $j++) {
		$MESGLINES[$j] =~ s/\r//;
		if ($MESGLINES[$j] =~ /^>/) { $IDXH .= ">$MESGLINES[$j]"; }
		else { $IDXH .= "> $MESGLINES[$j]"; }
	}
	$IDXH .= "</textarea><p>\n";

   $pcode = $pcode*43189669%(60*60*24*365) + 40000000; # 400000000~71535999
   $IDXH .= "<b>µî·ÏÀÎÁõÄÚµå:</b> <input type=text name=\"passcode\" size=8>\n"
         . "(ÀÚµ¿»ý¼º¹æÁö¸¦ À§ÇØ <b>".$pcode."</b>¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.)<p>\n";

   $IDXH .= "<input type=submit value=\"       ÀÛ¼º¿Ï·á         \">"
         . "<input type=reset value=\"  ´Ù½Ã¾²±â  \">\n"
         . "</form>";
   $IDXH .= "</font>" if ($make_small_font_size == 1);
   $IDXH .= "</td></tr></table><p>$separator\n" . &button;

   &view_index;
}


sub view_index {

	if ($FORM{'h'} eq 'r1') {
		&get_index_line if ($c eq 'write' || $c eq 'modify' || $c eq 'remove');
		&get_index_info;
		push(@IDX, $IDXH);
		&get_index;
	} elsif ($FORM{'h'} eq 'r2') {
		&get_index_line_sorted if ($c eq 'write' || $c eq 'modify' || $c eq 'remove');
		&get_index_info_sorted;
		push(@IDX, $IDXH);
		&get_index_sorted;
	}

	&print_html(@IDX);
}


sub get_index_line {

	open(SUBJECT,"$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	@LINES = <SUBJECT>;
	close(SUBJECT);

	&error(illegal_idx) unless ($LINES[0] =~ /^<new>$/);

	$srch = 0;
	$order = 0;
	for ($i = 1; $i <= $#LINES; $i++) {
		if ($LINES[$i] =~ /t\|1\|/) {
			$srch++;
			$MAIN{$srch} = $i;
			$MAIN_NUM{$i} = $srch;
		}
		if ($LINES[$i] =~ /t\|/) {
			$order++;
		}
	}

	$w = "$FORM{'w'}";
	if ($w && $w > 0) {
		$start_line = $MAIN{$w};
		$down_key = $w + $main_post_num_a_page;
		$end_line = $MAIN{$down_key} - 1;
	} else {
		$start_line = 1;
		$down_key = $main_post_num_a_page + 1;
		$end_line = $MAIN{$down_key} - 1;
	}

	if ($end_line == -1) {
		$end_line = $#LINES;
		$up_line = $srch - $main_post_num_a_page + 1;
		$down_key = $srch + 1;
		$start_line = $MAIN{$up_line};
	}

	$up_key = $down_key - ($main_post_num_a_page * 2);
}


sub get_index_info {

	local($from,$to);
	$IDXH .= "<p><font color=red>±Û¸ñ·Ï</font> : ";
        $IDXH .= " ÁÖ °Ô½Ã¹° <font color=red>$srch</font>\n";
	$IDXH .= "(Çö ÆäÀÌÁö ¹üÀ§ <font color=red>";
	if ($srch == 0) {
		$IDXH .= "0~0";
	} else {
		if ($srch <= $main_post_num_a_page) {
			$from = $srch;
			$to = 1;
			$w = 1;
		} else {
			if ($w && $w < $srch && $w > 0) {
				$from = $srch - $w + 1;
			} elsif ($w >= $srch) {
				$from = $main_post_num_a_page;
			} else {
				$from = $srch;
				$w = 1;
			}
			$to = $from - $main_post_num_a_page + 1;
		}
		if ($to <= 0) {
			$to = 1;
			$from = $main_post_num_a_page;
		}
		$IDXH .= "$from~$to";
	}

	$IDXH .= "</font>) / ÃÑ °Ô½Ã¹° <font color=red>$order</font>";
}


sub get_index {

	local($c_time) = time;
	local($a_num);

	if ($srch > 0) {
		$thread_depth = "1" if ($thread_depth <= 0);
		for ($j = $start_line; $j <= $end_line; $j++) {
			if ($LINES[$j] =~ /t\|/) {
				local($mark, $post_depth, $post_num, $post, $id, $subject, $name, $date, $count, $email) = split(/\|/, $LINES[$j]);
				chop($email) if ($email =~ /\n$/);

				if ($attach_num == 1 && $MAIN_NUM{$j}) {
					$a_num = $srch - $MAIN_NUM{$j} + 1;
					if ($a_num > 999) { $a_space = "0"; }
					elsif ($a_num > 99) { $a_space = "4"; }
					elsif ($a_num > 9) { $a_space = "8"; }
					else { $a_space = "12"; }
				}

				if ($post_depth <= $thread_depth) {
					$space = 9 * ($post_depth - 1);
				} else {
					$space = 9 * ($thread_depth - 1);
				}
				if ($c_time - $post_num < 24 * 60 * 60 * $day_for_new_post) {
					if ($post eq 'n') {
						$icon = "close_new.gif";
					} elsif ($post eq 'y') {
						$icon = "open_new.gif";
					}
				} else {
					if ($post eq 'n') {
						$icon = "close.gif";
					} elsif ($post eq 'y') {
						$icon = "open.gif";
					}
				}

				if ($c eq 'read' && $post_num == $FORM{'n'}) {
					$icon = "reading.gif";
					$count++;
				}

				if ($attach_num == 1) {
					if ($MAIN_NUM{$j}) {
						$IDX = "<img src=\"$base_url/icons/space.gif\" hspace=$a_space>$a_num ";
					} else {
						$IDX = "<img src=\"$base_url/icons/space.gif\" hspace=16> ";
					}
					$IDX .= "<img src=\"$base_url/icons/space.gif\" hspace=$space>";
				} else {
					$IDX = "<img src=\"$base_url/icons/space.gif\" hspace=$space>";
				}
				$IDX .= "<img src=\"$base_url/icons/$icon\"> "
				. "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$post_num&h=r1&w=$w\">$subject</a>";
				if ($email) {
					$IDX .= "|- <a href=\"mailto:$email\">$name</a>";
				} else {
					$IDX .= "|- $name";
				}
				$IDX .= "|$date";
				$IDX .= "|$count";

				push(@IDX , $IDX);
			}

		}
	} else {
		$IDX = "<center><br><font color=red><b>°Ô½ÃµÈ ±ÛÀÌ ¾ø½À´Ï´Ù.</b></font><p></center>";
		push(@IDX, $IDX);
	}
}


sub get_index_line_sorted {

	open(SUBJECT,"$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	@LINES = <SUBJECT>;
	close(SUBJECT);

	&error(illegal_idx) unless ($LINES[0] =~ /^<new>$/);

	foreach $line (@LINES) {
		if ($line =~ /t\|/) {
			local($mark2, $post_depth2, $post_num2, $post2, $id2, $subject2, $name2, $date2, $count2, $email2) = split(/\|/, $line);
			chop($email2) if ($email2 =~ /\n$/);

			$ID{$post_num2} = $id2;
			$SBJ{$post_num2} = $subject2;
			$NAME{$post_num2} = $name2;
			$DATE{$post_num2} = $date2;
			$POST{$post_num2} = $post2;
			$COUNT{$post_num2} = $count2;
			$EMAIL{$post_num2} = $email2;
		}
	}

	$order = 0;
	foreach (sort {$b <=> $a} keys %DATE) {
		$order++;
		$ORDER{$_} = $order;
		$FILE_NUM{$order} = $_;
	}

	$w = "$FORM{'w'}";
	if ($w) {
		if ($w <= 0) {	
			$start_order = 1;
		} elsif (($w + $post_num_a_page_sorted) > $order) {
			$start_order = $order - $post_num_a_page_sorted + 1;
		} else {
			$start_order = $w;
		}
	} else {
		$w = 1;
		$start_order = 1;
	}

	$next_num = $start_order + $post_num_a_page_sorted;
	$back_num = $start_order - $post_num_a_page_sorted;
}


sub get_index_info_sorted {

	local($from,$to);
	if ($order == 0) {
		$from = 0; $to = 0;
	} elsif ($order <= $post_num_a_page_sorted) {
		$from = $order; $to = 1;
	} else {
		$from = $order - $next_num + $post_num_a_page_sorted + 1;
		$to = $from - $post_num_a_page_sorted + 1;
	}
	$IDXH .= "<p><font color=red>°Ô½Ã¼ø ±Û¸ñ·Ï</font> : ÃÑ °Ô½Ã¹° <font color=red>$order</font> "
	. "(Çö ÆäÀÌÁö ¹üÀ§ <font color=red>$from~$to</font>)";

}


sub get_index_sorted {

	local($c_time) = time;
	local($a_num);

	if ($LINES[1] =~ /t/) {
		foreach $key (sort {$b <=> $a} keys %DATE) {
			if ($ORDER{$key} >= $start_order && $ORDER{$key} < $start_order + $post_num_a_page_sorted) {

				if ($attach_num == 1) {
					$a_num = $order - $ORDER{$key} + 1;
					if ($a_num > 999) { $space = "0"; }
					elsif ($a_num > 99) { $space = "4"; }
					elsif ($a_num > 9) { $space = "8"; }
					else { $space = "12"; }
				}

				if ($c_time - $key < 24 * 60 * 60 * $day_for_new_post) {
					if ($POST{$key} eq 'n') {
						$icon = "close_new.gif";
					} elsif ($POST{$key} eq 'y') {
						$icon = "open_new.gif";
					}
				} else {
					if ($POST{$key} eq 'n') {
						$icon = "close.gif";
					} elsif ($POST{$key} eq 'y') {
						$icon = "open.gif";
					}
				}

				if ($c eq 'read' && $key == $FORM{'n'}) {
					$icon = "reading.gif";
					$COUNT{$key}++;
				}
				if ($attach_num == 1) {
					$IDX = "<img src=\"$base_url/icons/space.gif\" hspace=$space>$a_num "
					. "<img src=\"$base_url/icons/$icon\">";
				} else {
					$IDX = "<img src=\"$base_url/icons/$icon\">";
				}
				$IDX .= " <a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$key&h=r2&w=$w\">$SBJ{$key}</a>";
				if ($EMAIL{$key}) {
					$IDX .= "|- <a href=\"mailto:$EMAIL{$key}\">$NAME{$key}</a>";
				} elsif ($EMAIL{$key} eq '') {
					$IDX .= "|- $NAME{$key}";
				}
				$IDX .= "|$DATE{$key}|$COUNT{$key}";

				push(@IDX, $IDX);
			}
		}
	} else {
		$IDX = "<center><br><font color=red><b>°Ô½ÃµÈ ±ÛÀÌ ¾ø½À´Ï´Ù.</b></font><p></center>";
		push(@IDX, $IDX);
	}
}


sub read_mesg {

	&error unless ($FORM{'n'} && $FORM{'n'} =~ /^\d{9,10}$/);

	open(MESGFILE, "$base_dir/$FORM{'bb'}/$msg_dir/$FORM{'n'}") || &open_err("$FORM{'bb'}/$msg_dir/$FORM{'n'}");
	@MESGLINES = <MESGFILE>;
	close(MESGFILE);

	($user, $hd_fm, $subject, $name, $long_date, $email) = split(/\|/, $MESGLINES[0]);
	local($id, $cryptpasswd) = split(/:/, $user);
	chop($email);
	@for_list = split(/,/,$hd_fm);
	$findline = $for_list[0];

	&lock;
	open(SUBJECT,">$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	foreach $line (@LINES) {
		if ($line =~ /t\|([^\|]*)\|$FORM{'n'}/) {
			local($i_mark, $i_post_depth, $i_post_num, $i_post, $i_id, $i_subject, $i_name, $i_date, $i_count, $i_email) = split(/\|/, $line);
			$i_count++;
			chop($i_email) if ($i_email =~ /\n$/);
			print SUBJECT "$i_mark|$i_post_depth|$i_post_num|$i_post|$i_id|$i_subject|$i_name|$i_date|$i_count|$i_email\n";
		} else {
			print SUBJECT "$line";
		}
	}
	close(SUBJECT);
	&unlock;

	$IDXH = "$separator<table width=95%><tr><td><font size=-1><li type=circle> ";
	if ($email) {
		$IDXH .= "±Û¾´ÀÌ : <a href=\"mailto:$email\">$name</a>";
	} elsif ($email eq '') {
		$IDXH .= "±Û¾´ÀÌ : $name";
	}
	$IDXH .= " ($id) , ±Û¾´½Ã°¢ : $long_date</font><p>\n";

	if ($make_small_font_size == 1) {
		$subject = "<font size=+1>$subject</font>";
	} else {
		$subject = "<font size=+2>$subject</font>";
	}
	$IDXH .= "<center><b>$subject</b></center><p>\n";
	$MESGLINES[$#MESGLINES] =~ s/\n//;
	for ($j = 1; $j <= $#MESGLINES; $j++) {
		if ($allow_html eq '0') {
			$MESGLINES[$j] =~ s/</\&lt\;/g;
			$MESGLINES[$j] =~ s/>/\&gt\;/g;
		} else {
			$MESGLINES[$j] =~ s?((\s)(http://.*\.\S+))|(^http://.*\.\S+)?\2<a href=\"\3\4\" target=\"_bank\">\3\4</a>?goi;
			$MESGLINES[$j] =~ s?((\s)(ftp://.*\.\S+))|(^ftp://.*\.\S+)?\2<a href=\"\3\4\" target=\"_bank\">\3\4</a>?goi;
			$MESGLINES[$j] =~ s?((\s)(mailto:.*\@.*\.\S+))|(^mailto:.*\@.*\.\S+)?\2<a href=\"\3\4\">\3\4</a>?goi;
			$MESGLINES[$j] =~ s?((\s)(gopher://.*\.\S+))|(^gopher://.*\.\S+)?\2<a href=\"\3\4\">\3\4</a>?goi;
			$MESGLINES[$j] =~ s?((\s)(news:.*\.\S+))|(^news:.*\.\S+)?\2<a href=\"\3\4\">\3\4</a>?goi;
		}
		if ($conv_space eq '1') {
			$MESGLINES[$j] =~ s/^ /\&nbsp\;/;
			$MESGLINES[$j] =~ s/  / \&nbsp\;/g;
		}
		$MESGLINES[$j] =~ s/\r//;
		$MESGLINES[$j] =~ s/\n/\n<br>/;
		$MSG_LINES .= "$MESGLINES[$j]";
	}

	$MSG_LINES = "<font size=-1>$MSG_LINES</font>" if ($make_small_font_size == 1);

	if ($FORM{'i_f'} && $FORM{'keyword'} && $FORM{'f_s'} eq 'ft_b') {
		$MSG_LINES =~ s/($FORM{'keyword'})/<font color=red><u><b>\1<\/b><\/u><\/font>/gi;
	}
	$IDXH .= $MSG_LINES;
	$IDXH .= "\n</td></tr></table><p>$separator\n" . &button;

	if ($FORM{'i_f'}) {
		&find;
	} else {
		&view_index;
	}
}


sub write {

	&get_variables;
	&get_time;
	&add_index;
	&make_cryptpasswd if ($passwd);
	&new_file;
	&mail_to_master if ($mail_to_master == 1);
	&return_html(complete_write);
}


sub get_variables {

	foreach $key (keys %FORM) {
		if ($key eq 'name' || $key eq 'id' || $key eq 'email') {
			$FORM{$key} =~ s/\|/&#124/g;
			$FORM{$key} =~ s/^\s+//;
			if ($denude_tag_if_not_body == 1) {
				$FORM{$key} =~ s/</\&lt\;/g;
				$FORM{$key} =~ s/>/\&gt\;/g;
			}
		}
	}
	if ($FORM{'followup'}) {
		$followup = "1";
		@followups = @followup_num = split(/,/, $FORM{'followup'});
		$last_message = pop(@followups);
 	} else {
		$followup = "0";
	}

	$passcode = ($FORM{'passcode'}-40000000) * 832429 % (60*60*24*365);
	if ($pcode+($passcode<=$pcode?0:60*60*24*365) > $passcode+3600) {
                &write_err(no_passcode);
	}

	if ($FORM{'name'}) {
		$name = "$FORM{'name'}";
	} else {
		&write_err(no_name);
	}
	if ($FORM{'passwd'}) {
		$passwd = "$FORM{'passwd'}";
	}
	if ($FORM{'id'}) {
		$id = "$FORM{'id'}";
	} else {
		$id = "guest";
	}
	if ($FORM{'email'} =~ /.*\@.*\..*/) {
		$email = "$FORM{'email'}";
	}
	$FORM{'subject'}  =~ s/^\s+//;
	if ($FORM{'subject'}) {
		$subject = "$FORM{'subject'}";
		if (length($subject) > 2*$subject_length) {
			$subject = substr($subject, 0, $subject_length-2)." ";
		}
		$subject =~ s/\|/&#124/g;
		if ($denude_tag_if_not_body == 1) {
			$subject =~ s/</\&lt\;/g;
			$subject =~ s/>/\&gt\;/g;
		}
	} else {
		&write_err(no_subject);
	}
	if ($FORM{'body'}) {
		$body = "$FORM{'body'}";
	} else {
		&write_err(no_body);
	}
}


sub add_index {

	while(-e "$base_dir/$FORM{'bb'}/$msg_dir/$num") {
		$num++;
	}

	&lock;
	open(INDEX,"$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	@index = <INDEX>;
	close(INDEX);

	open(INDEX,">$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	if ($followup == 0) {
		foreach $index_line (@index) {
			if ($index_line =~ /<new>/) {
				print INDEX "<new>\n";
				print INDEX "t|1|$num|n|$id|$subject|$name|$date|0|$email\n";
				print INDEX "i|1|$num\n";
			} else {
				print INDEX "$index_line";
			}
		}
	} else {
		foreach $index_line (@index) {
			$index_line =~ s/t\|([^\|]*)\|$last_message\|n/t\|\1\|$last_message\|y/;
			if ($index_line =~ /i\|([^\|]*)\|$last_message\n/) {
				$dp = $1;
				$dp2 = $dp + 1;
				print INDEX "t|$dp2|$num|n|$id|$subject|$name|$date|0|$email\n";
				print INDEX "i|$dp2|$num\n";
				print INDEX "i|$dp|$last_message\n";
			} else {
				print INDEX "$index_line";
			}
		}
	}
	close(INDEX);
	&unlock;
}


sub new_file {
        # Check passcode again if anybody bypasses get_variables() routine
        $passcode = ($FORM{'passcode'}-40000000) * 832429 % (60*60*24*365);
        if ($pcode+($passcode<=$pcode?0:60*60*24*365) > $passcode+3600) {
                &write_err(no_passcode);
        }  

	open(NEWFILE,">$base_dir/$FORM{'bb'}/$msg_dir/$num") || &open_err("$FORM{'bb'}/$msg_dir/$num");
	print NEWFILE "$id:$cryptpasswd|";
	if ($c eq 'modify') {
		print NEWFILE "$FORM{'hd_fm'}|";
	} else {
		if ($followup == 1) {
			foreach $followup_num (@followup_num) {
				print NEWFILE "$followup_num,";
			}
		}
		print NEWFILE "$num|";
	}
	print NEWFILE "$subject|$name|$long_date|$email\n";
	print NEWFILE "$body\n";
	close(NEWFILE);
}


sub return_html {

	$IDXH = "<p><table width=95%><tr><td align=center><b>\n";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	if ($_[0] eq 'complete_write') {
		$IDXH .= "$name´ÔÀÇ ";
		if    ($c eq 'write' ) { $IDXH .= "±Û¾²±â°¡"; }
		elsif ($c eq 'modify') { $IDXH .= "±Û¼öÁ¤ÀÌ"; }
		$IDXH .= " ¿Ï·áµÇ¾ú½À´Ï´Ù.";
	} elsif ($_[0] eq 'ch_admin_info_success') {
		$IDXH .= "°ü¸®ÀÚ ID¿Í Password°¡ º¯°æµÇ¾ú½À´Ï´Ù.";
	} elsif ($_[0] eq 'complete_remove') {
		$IDXH .= "±Û»èÁ¦°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.";
	}
	$IDXH .= "</b>";
	$IDXH .= "</font>" if ($make_small_font_size == 1);
	$IDXH .= "</td></tr></table>\n";

	&view_index;
}


sub error {

	if ($_[0] eq 'cannot_ch_admin_info') {
		$IDXH = "$separator<p>";
	} else {
		$IDXH = "<p>";
	}
	$IDXH .= "<table width=95%><tr><td>\n";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	if ($_[0] eq 'illegal_idx') {
		$IDXH .= "<center><b>ÀÎµ¦½ºÈ­ÀÏ($idx_file)ÀÇ Çü½ÄÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù!</b></center>\n";
	} elsif ($_[0] eq 'cannot_modify') {
		$IDXH .= "<img src=\"$base_url/icons/close.gif\"> \n"
		. "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\">$subject</a> -- \n";
		if ($email) {
			$IDXH .= "<a href=\"mailto:$email\">$name</a>\n";
		} else {
			$IDXH .= "$name\n";
		}
		$IDXH .= "<p><b>À§±ÛÀº Password°¡ ÀÔ·ÂµÇÁö ¾ÊÀº ±ÛÀÌ¹Ç·Î ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù!</b><p>\n"
		. "¼öÁ¤À» ¿øÇÏ½Ã¸é <a href=\"mailto:$master_email\">°ü¸®ÀÚ</a>¿¡°Ô ¹®ÀÇÇÏ½Ê½Ã¿ä.\n";
	} elsif ($_[0] eq 'not_same') {
		$IDXH .= "<img src=\"$base_url/icons/close.gif\"> \n"
		. "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\">$orig_subject</a> -- \n";
		if ($orig_email) {
			$IDXH .= "<a href=\"mailto:$orig_email\">$orig_name</a>\n";
		} else {
			$IDXH .= "$orig_name\n";
		}
		$IDXH .= "<p><b>À§±ÛÀÇ Password¿Í ÀÔ·ÂÇÑ Password°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù!</b><p>\n"
		. "¼öÁ¤À» ¿øÇÏ½Ã¸é <a href=\"mailto:$master_email\">°ü¸®ÀÚ</a>¿¡°Ô ¹®ÀÇÇÏ½Ê½Ã¿ä.\n";
	} elsif ($_[0] eq 'not_auth') {
		$IDXH .= "<b>±Û»èÁ¦ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.<br>±Û»èÁ¦´Â °ü¸®ÀÚ¸¸ ÇÒ ¼ö ÀÖÀ¸¸ç\n"
		. "±Û»èÁ¦ÇÏ·Á¸é ¸ÕÀú °ü¸®ÀÚ Á¢¼ÓÇØ¾ß ÇÕ´Ï´Ù.</b>\n";
	} elsif ($_[0] eq 'admin_login_fail') {
		$IDXH .= "<center><b>°ü¸®ÀÚ (Á¢¼Ó) ±ÇÇÑÀÌ ¾ø½À´Ï´Ù!</b></center>\n";
	} elsif ($_[0] eq 'cannot_ch_admin_info') {
		$IDXH .= "<center><b>°ü¸®ÀÚ ID¿Í Password¸¦ º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù! ´Ù½Ã Á¤È®ÇÏ°Ô ÀÔ·ÂÇÏ¼¼¿ä.</b></center>"
		. "</td></tr></table>\n";
		&admin_login_success;
	} else {
		$IDXH .= "<center><b>°Ô½ÃÆÇÀ» Á¤»ó ÀÛµ¿½ÃÅ°Áö ¾ÊÀ¸¼Ì½À´Ï´Ù.</b></center>";
	}
	$IDXH .= "</font>" if ($make_small_font_size == 1);
	$IDXH .= "</td></tr></table>\n";

	&view_index;
}


sub open_err {

	print "Content-type: text/html";
	print "; charset=euc-kr" if ($charset_kr == 1);
	print "\n\n";
	print "$base_dir/$_[0] À»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù!";
	exit;
}


sub write_err {

	$IDXH = "$separator<table width=95%><tr><td><br>\n";
	if ($_[0] eq 'no_name') {
		$IDXH .= "<b><font size=+2>±Û¾²±â ¿À·ù - <font color=red>ÀÌ¸§À» ÀÔ·ÂÇÏ¼¼¿ä!</font></font></b><p>\n";
	} elsif ($_[0] eq 'no_subject') {
		$IDXH .= "<b><font size=+2>±Û¾²±â ¿À·ù - <font color=red>Á¦¸ñÀ» ÀÔ·ÂÇÏ¼¼¿ä!</font></font></b><p>\n";
	} elsif ($_[0] eq 'no_body') {
		$IDXH .= "<b><font size=+2>±Û¾²±â ¿À·ù - <font color=red>³»¿ëÀ» ÀÔ·ÂÇÏ¼¼¿ä!</font></font></b><p>\n";
	} elsif ($_[0] eq 'no_passcode') {
		$IDXH .= "<b><font size=+2>±Û¾²±â ¿À·ù - <font color=red>µî·ÏÀÎÁõ¹øÈ£¸¦ È®ÀÎÇØ ÁÖ½Ê½Ã¿À!</font></font></b><p>\n";
	}

	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	$IDXH .= "ÀÌ¸§, Á¦¸ñ, ³»¿ëÀº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.<br>\n";
	if ($c eq 'modify') {
		unless (&check_admin_auth) {
			$IDXH .= "Password¶õ¿¡´Â ±ÛÀÛ¼º½Ã ÀÔ·ÂÇÑ ÀÌ±ÛÀÇ ÆÐ½º¿öµå¸¦ ÀÔ·ÂÇÏ¼¼¿ä.<br>ÆÐ½º¿öµå°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ±ÛÀ» ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.<br>\n";
		}
		$IDXH .= "<form method=POST action=\"$cgi_url\">\n"
		. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
		. "<input type=hidden name=\"c\" value=\"modify\">\n"
		. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
		. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
		. "<input type=hidden name=\"n\" value=\"$FORM{'n'}\">\n"
		. "<input type=hidden name=\"hd_fm\" value=\"$FORM{'hd_fm'}\">\n"
		. "<input type=hidden name=\"id\" value=\"$FORM{'id'}\">\n";
	} else {
		unless (&check_admin_auth) {
			$IDXH .= "Password´Â ±Û¼öÁ¤½Ã ÀÌ¿ëµÇ´Â ÀÌ±Û °íÀ¯ÀÇ ÆÐ½º¿öµå·Î, ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ ¹«¹æÇÏÁö¸¸<br>ÀÔ·ÂÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â ±Û¾´ÀÌ º»ÀÎµµ ±ÛÀ» ¼öÁ¤ÇÒ ¼ö ¾ø°ÔµË´Ï´Ù.<br>\n";
		}
		$IDXH .= "<form method=POST action=\"$cgi_url\">\n"
		. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
		. "<input type=hidden name=\"c\" value=\"$c\">\n"
		. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
		. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
		. "<input type=hidden name=\"id\" value=\"$FORM{'id'}\">\n";
		if ($followup == 1) {
			$IDXH .= "<input type=hidden name=\"followup\" value=\"$FORM{'followup'}\">\n";
		}
	}

	$IDXH .= "<b>ÀÌ ¸§ :</b> <input type=text name=\"name\" value=\"$FORM{'name'}\" size=11 maxlength=8> \n";
	unless (&check_admin_auth) {
		$IDXH .= "<b>Password :</b> <input type=password name=\"passwd\" value=\"$FORM{'passwd'}\" size=11 maxlength=8>\n";
	}
	$IDXH .= "<br><b>e-mail:</b> <input type=text name=\"email\" value=\"$FORM{'email'}\" size=42><br>\n"
	. "<b>Á¦ ¸ñ :</b> <input type=text name=\"subject\" value=\"$FORM{'subject'}\" size=42 maxlength=$subject_length><p>\n"
	. "<b>³» ¿ë :</b><br>\n"
	. "<textarea COLS=$textarea_width ROWS=20 name=\"body\" wrap=\"soft\">\n";
	$FORM{'body'} =~ s/\r//g;
	$IDXH .= "$FORM{'body'}"
	. "</textarea><p>\n";

   $pcode = $pcode*43189669%(60*60*24*365) + 40000000; # 400000000~71535999
   $IDXH .= "<b>µî·ÏÀÎÁõÄÚµå:</b> <input type=text name=\"passcode\" size=8>\n"
         . "(ÀÚµ¿»ý¼º¹æÁö¸¦ À§ÇØ <b>".$pcode."</b>¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.)<p>\n";

   $IDXH .= "<input type=submit value=\"       ÀÛ¼º¿Ï·á         \">"
         . "<input type=reset value=\"  ´Ù½Ã¾²±â  \">\n"
         . "</form>";
   $IDXH .= "</font>" if ($make_small_font_size == 1);
   $IDXH .= "</td></tr></table><p>$separator\n" . &button;

   &view_index;
}


sub findform {

	$FDF = "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"find\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
        . "<table><tr><td>°Ë»ö´ë»ó";
	if ($FORM{'f_s'} eq 'ft_b') { $ob = " checked";	}
	elsif ($FORM{'f_s'} eq 'ft_a') { $oa = " checked"; }
	else { $os = " checked"; }
	$FDF .= "<input type=\"radio\" name=\"f_s\" value=\"ft_s\"$os>Á¦¸ñ\n"
	. "<input type=\"radio\" name=\"f_s\" value=\"ft_b\"$ob>º»¹®\n"
	. "<input type=\"radio\" name=\"f_s\" value=\"ft_a\"$oa>±Û¾´ÀÌ\n"
	. "&nbsp;°á°ú°³¼ö<select radio name=\"f_r\">\n";
	if ($FORM{'f_r'} eq '10')      { $r10 = " selected";  }
	elsif ($FORM{'f_r'} eq '15')   { $r15 = " selected";  }
	elsif ($FORM{'f_r'} eq '20')   { $r20 = " selected";  }
	elsif ($FORM{'f_r'} eq '30')   { $r30 = " selected";  }
	elsif ($FORM{'f_r'} eq '40')   { $r40 = " selected";  }
	elsif ($FORM{'f_r'} eq 'ALL') { $rall = " selected"; }
	else { $r25 = " selected"; }
	$FDF .= "<option$r10>10<option$r15>15<option$r20>20<option$r25>25<option$r30>30<option$r40>40<option$rall>ALL"
	. "</select><br>\n"
	. "°Ë »ö ¾î <INPUT TYPE=TEXT NAME=\"keyword\" SIZE=26 value=\"$FORM{'keyword'}\">\n"
	. "<INPUT TYPE=SUBMIT VALUE=\" °Ë »ö \">\n"
        . "</td><td>"
	. "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=find_help&h=$FORM{'h'}&w=$FORM{'w'}\">\n"
	. "<img src=\"$base_url/icons/findhelp.gif\" border=0 alt=\"°Ë»öµµ¿ò¸»\"></a>\n"
        . "</td></tr></table>"
        . "</form>\n";
	return $FDF;
}


sub find {

	$FORM{'keyword'} =~ s/^\s+//;
	$FORM{'keyword'} =~ s/\s+$//;
	&no_keyword unless $FORM{'keyword'};
	$FORM{'f_r'} = "25" unless $FORM{'f_r'};
	$FORM{'f_s'} = "ft_s" unless $FORM{'f_s'};

	if ($FORM{'f_s'} eq 'ft_b') { $target = 'º»¹®'; }
	elsif ($FORM{'f_s'} eq 'ft_a') { $target = '±Û¾´ÀÌ'; }
	else { $target = 'Á¦¸ñ'; }

	if ($FORM{'f_r'} eq 'ALL') {
		$rn = "99999";
	} else {
		$rn = "$FORM{'f_r'}";
	}

	@keyword = split(/\s+/,$FORM{'keyword'});
	$words = join(' , ', @keyword);

	if ($FORM{'f_s'} eq 'ft_b') {

		opendir(LIST, "$base_dir/$FORM{'bb'}/$msg_dir") || &open_err("$FORM{'bb'}/$msg_dir");
		@FILES = grep(/^\d{9,10}$/, readdir(LIST));
		closedir LIST;

		foreach $FILE (@FILES) {
			open(FILE,"$base_dir/$FORM{'bb'}/$msg_dir/$FILE") || &open_err("$FORM{'bb'}/$msg_dir/$FILE");
			@BLINES = <FILE>;
			close(FILE);

			local($user, $hd_fm, $subject, $name, $long_date, $email) = split(/\|/, $BLINES[0]);
			local($id, $cryptpasswd) = split(/:/, $user);
			$long_date =~ /19..³â (.*)¿ù(.*)ÀÏ (..):(..):../;
			local($mon, $mday, $hour, $sec) = ($1, $2, $3, $4);
			$mon = "0$mon" if (length($mon) == 1);
			$mday = "0$mday" if (length($mday) == 1);
			$short_date = "$mon/$mday $hour:$sec";
			chop($email) if ($email =~ /\n$/);

			$FIND_ID{$FILE} = $id;
			$FIND_SBJ{$FILE} = $subject;
			$FIND_NAME{$FILE} = $name;
			$FIND_DATE{$FILE} = $short_date;
			$FIND_EMAIL{$FILE} = $email;
			$FIND_ICON{$FILE} = "close.gif";

			for ($i = 1; $i <= $#BLINES; $i++) {
				chop($BLINES[$i]);
				$FIND_BODY{$FILE} .= $BLINES[$i];
			}

			foreach $keyword (@keyword) {
				if ($FIND_BODY{$FILE} !~ /$keyword/i) {
					$match{$FILE} = 'no';
					last;
				} else {
					$match{$FILE} = 'yes';
				}
			}
		}

		&get_title;
	} else {

		for ($i = 1; $i <= $#LINES; $i++) {
			if ($LINES[$i] =~ /t\|/) {
				local($mark, $post_depth, $post_num, $post, $id, $subject, $name, $date, $count, $email) = split(/\|/, $LINES[$i]);
				chop($email) if ($email =~ /\n$/);
				$FILE = $post_num;
				$FIND_ID{$FILE} = $id;
				$FIND_SBJ{$FILE} = $subject;
				$FIND_NAME{$FILE} = $name;
				$FIND_DATE{$FILE} = $date;
				$FIND_COUNT{$FILE} = $count;
				if ($post eq 'y') { $FIND_ICON{$FILE} = "open.gif"; }
				else { $FIND_ICON{$FILE} = "close.gif"; }
				$FIND_EMAIL{$FILE} = $email;
				chop($FIND_EMAIL{$FILE}) if ($FIND_EMAIL{$FILE} =~ /\n$/);
			}
			foreach $keyword (@keyword) {
				if ($FORM{'f_s'} eq 'ft_s') {
					if ($FIND_SBJ{$FILE} !~ /$keyword/i) {
						$match{$FILE} = 'no';
						last;
					} else {
						$match{$FILE} = 'yes';
						$FIND_SBJ{$FILE} =~ s/($keyword)/<b>\1<\/b>/gi;
					}

				} elsif ($FORM{'f_s'} eq 'ft_a') {
					if ($FIND_NAME{$FILE} !~ /$keyword/i) {
						$match{$FILE} = 'no';
						last;
					} else {
						$match{$FILE} = 'yes';
						$FIND_NAME{$FILE} =~ s/($keyword)/<b>\1<\/b>/gi;
					}
				}
			}
		}

		&get_title;
	}
}


sub get_title {

	$match_num = 0;
	foreach $key (keys %match) {
		$match_num++ if ($match{$key} eq 'yes');
	}

	&find_failed if ($match_num == 0);

	$findnum = 0;
	foreach $key (sort {$b <=> $a} keys %match) {

		if ($match{$key} eq 'yes') {

			last if ($findnum >= $rn);

			$findnum++;

			if ($attach_num == 1) {
				if ($findnum > 99) { $a_space = "0"; }
				elsif ($findnum > 9) { $a_space = "4"; }
				else { $a_space = "8"; }
				$IDX = "<img src=\"$base_url/icons/space.gif\" hspace=$a_space\">$findnum "
				. "<img src=\"$base_url/icons/$FIND_ICON{$key}\"> ";
			} else {
				$IDX = "<img src=\"$base_url/icons/$FIND_ICON{$key}\"> ";
			}
			$IDX .= "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$key"
			. "&h=$FORM{'h'}&w=$FORM{'w'}&f_s=$FORM{'f_s'}"
			. "&f_r=$FORM{'f_r'}&i_f=1&keyword=$FORM{'keyword'}\">$FIND_SBJ{$key}</a>";

			if ($FIND_EMAIL{$key}) {
				$IDX .= "|- <a href=\"mailto:$FIND_EMAIL{$key}\">$FIND_NAME{$key}</a>";
			} else {
				$IDX .= "|- $FIND_NAME{$key}";
			}
			$IDX .= "|$FIND_DATE{$key}|$FIND_COUNT{$key}";

			push(@IDX, $IDX);
		}
	}

	if ($c ne 'read') {
		$IDXH = "<p><font color=blue><$target °Ë»ö></font> \n";
		$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
		$IDXH .= "°Ë»ö¾î <font color=red>$words</font> (À¸)·Î °Ë»öÇÑ °á°ú<p>\n"
		. "<b>°Ë»öµÇ¾îÁø ÃÑ <font color=red>$match_num</font>°³ÀÇ °Ô½Ã¹° Áß ÃÖ±Ù"
		. " <font color=red>$findnum</font>°³ÀÇ °Ô½Ã¹°ÀÌ °á°ú·Î Ãâ·ÂµÇ¾ú½À´Ï´Ù.</b><p>\n";
		$IDXH .= "</font>" if ($make_small_font_size == 1);
	}

	unshift(@IDX, $IDXH);

	&print_html(@IDX);
}


sub find_failed {

	$IDXH = "<p><font color=blue size=+1><$target °Ë»ö></font> \n"
	. "°Ë»ö¾î <font color=red size=+1>$words</font> (À¸)·Î °Ë»öÇÑ °á°ú</font><p>\n"
	. "<b>ÀÔ·ÂÇÑ °Ë»ö¾î°¡ <font color=blue>$target</font>¿¡ µé¾îÀÖ´Â ¾î¶°ÇÑ ±Ûµµ Ã£À» ¼ö ¾ø½À´Ï´Ù!</b>\n";

	&view_index;
}


sub no_keyword {

	$IDXH = "<p><b>°Ë»ö¾î¸¦ ÀÔ·ÂÇÏ¼¼¿ä!</b><p>\n";
	&view_index;
}


sub find_help {

	$IDXH = "$separator<p><table width=95%><tr><td><font size=+2 color=black>\n"
	. "<b>°Ë»ö µµ¿ò¸»</b></font><p>°Ë»ö´ë»ó°ú °á°ú°³¼ö¸¦ Á¤ÇÏ°í °Ë»ö¾î¸¦ ÀÔ·ÂÇÑ ÈÄ,\n"
	. "°Ë»ö¹öÆ°À» Å¬¸¯ÇÏ¸é ÇØ´ç °Ë»ö¾î¿¡ ÀÇÇÑ °Ë»öÀÌ ÀÌ·ç¾îÁý´Ï´Ù. °Ë»ö°á°ú´Â ÃÖ±Ù\n"
	. "°Ô½Ã¹°·ÎºÎÅÍ Á¤ÇØÁØ °á°ú°³¼ö ¸¸Å­¸¸ Ãâ·ÂµË´Ï´Ù. °Ë»ö¾î°¡ ¿µ¹®ÀÚÀÏ °æ¿ì¿¡´Â\n"
	. "´ë¼Ò¹®ÀÚ ±¸º°¾øÀÌ °Ë»öÇÕ´Ï´Ù.<p> µ¿½Ã¿¡ ¿©·¯ °Ë»ö¾î·Î °Ë»öÇÒ °æ¿ì¿¡´Â ½ºÆäÀÌ½º¸¦\n"
	. "°Ë»ö¾î »çÀÌ¿¡ µÎ¾î¾ß ÇÏ°í ÀÌ °æ¿ì AND¿¬»êÀÌ µÇ¾î ÀÔ·ÂÇÑ ¸ðµç °Ë»ö¾î°¡ Æ÷ÇÔµÈ\n"
	. "°Ô½Ã¹°¸¸À» °Ë»ö°á°ú·Î º¸¿©ÁÝ´Ï´Ù.<p> ¿¹¸¦ µé¾î °Ë»ö´ë»óÀ» 'Á¦¸ñ'À¸·Î ¼³Á¤ÇÏ°í\n"
	. "°Ë»ö¾î¸¦ <b>wookie »ç¶û you</b> ¶ó°í ÀÔ·ÂÇÏ¿´´Ù¸é <font color=black><b>wookie\n"
	. "»ç¶û you</b></font> ¸¦ ¿¬°áµÈ ÇÏ³ªÀÇ ´Ü¾î·Î º¸°í °Ë»öÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó\n"
	. "<font color=blue><b>wookie</b></font>, <font color=red><b>»ç¶û</b></font>,\n"
	. "<font color=green><b>you</b></font> ÀÇ ¼¼´Ü¾î·Î ³ª´©¾î <font color=red><b>ºÐ¸®</b>\n"
	. "</font>°Ë»öÇÑ ÈÄ, ÀÌ ¼¼´Ü¾î°¡ Á¦¸ñ¿¡ <font color=red><b>¸ðµÎ</b></font> µé¾îÀÖ´Â\n"
	. "°Ô½Ã¹°ÀÌ ÀÖÀ¸¸é (¼¼ ´Ü¾î°¡ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´õ¶óµµ) ±× °Ô½Ã¹°À» °á°ú·Î º¸¿©ÁÝ´Ï´Ù.\n"
	. "ÀÌÃ³·³ AND¿¬»êÀ» ÅëÇÏ¿© º¸´Ù À¯¿¬ÇÏ°í È®ÀåµÈ °Ë»öÀ» ÇÏ°ÔµË´Ï´Ù.</td></tr></table><p>\n"
	. "$separator" . &button;

	&view_index;
}


sub modify_form {

	&error unless ($c eq 'modify_form' && $FORM{'n'} =~ /^\d{9,10}$/);

	open(MESGFILE, "$base_dir/$FORM{'bb'}/$msg_dir/$FORM{'n'}") || &open_err("$FORM{'bb'}/$msg_dir/$FORM{'n'}");
	@MESGLINES = <MESGFILE>;
	close(MESGFILE);

	local($user, $hd_fm, $subject, $name, $long_date, $email) = split(/\|/, $MESGLINES[0]);
	local($id, $cryptpasswd) = split(/:/, $user);
	chop($email) if ($email =~ /\n$/);

	if (&check_admin_auth) {
      	&modify_form_display;
	} else {
		if ($cryptpasswd) {
			&modify_form_display;
		} else {
			&error(cannot_modify);
		}
	}
}


sub modify_form_display {

	$IDXH = "$separator<table><tr><td><br>\n";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	$IDXH .= "<br><img src=\"$base_url/icons/close.gif\"> \n"
	. "<a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\">$subject</a> -- ";
	if ($email) {
		$IDXH .= "<a href=\"mailto:$email\">$name</a>";
	} else {  
		$IDXH .= "$name";
	}
	$IDXH .= "<p><font size=+2><b>±Û ¼öÁ¤</b></font><p>\n"
	. "ÀÌ¸§, Á¦¸ñ, ³»¿ëÀº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.<br>\n";
	unless (&check_admin_auth) {
		$IDXH .= "Password¶õ¿¡´Â ±ÛÀÛ¼º½Ã ÀÔ·ÂÇÑ ÀÌ±ÛÀÇ ÆÐ½º¿öµå¸¦ ÀÔ·ÂÇÏ¼¼¿ä.<br>ÆÐ½º¿öµå°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ±ÛÀ» ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.<br>\n";
	}
	$IDXH .= "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"modify\">\n"
	. "<input type=hidden name=\"n\" value=\"$FORM{'n'}\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
	. "<input type=hidden name=\"hd_fm\" value=\"$hd_fm\">\n"
	. "<b>ÀÌ ¸§ :</b> <input type=text name=\"name\" size=11 maxlength=8 value=\"$name\"> \n";
	unless (&check_admin_auth) {
		$IDXH .= "<b>Password :</b> <input type=password name=\"passwd\" size=11 maxlength=8>\n";
	}
	$IDXH .= "<br><b>e-mail:</b> <input type=text name=\"email\" size=42 value=\"$email\"><br>\n"
	. "<b>Á¦ ¸ñ :</b> <input type=text name=\"subject\"value=\"$subject\" size=42 maxlength=$subject_length><p>\n"
	. "<b>³» ¿ë :</b><br>\n"
	. "<textarea name=\"body\" COLS=$textarea_width ROWS=20 wrap=\"soft\">\n";
	$MESGLINES[$#MESGLINES] =~ s/\n//;
	for ($j = 1; $j <= $#MESGLINES; $j++) {
		$MESGLINES[$j] =~ s/\r//;
		$IDXH .= "$MESGLINES[$j]";
	}
	$IDXH .= "</textarea><p>\n";

   $pcode = $pcode*43189669%(60*60*24*365) + 40000000; # 400000000~71535999
   $IDXH .= "<b>µî·ÏÀÎÁõÄÚµå:</b> <input type=text name=\"passcode\" size=8>\n"
         . "(ÀÚµ¿»ý¼º¹æÁö¸¦ À§ÇØ <b>".$pcode."</b>¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.)<p>\n";

   $IDXH .= "<input type=submit value=\"       ÀÛ¼º¿Ï·á         \">"
         . "<input type=reset value=\"  ´Ù½Ã¾²±â  \">\n"
         . "</form>";
   $IDXH .= "</font>" if ($make_small_font_size == 1);
   $IDXH .= "</td></tr></table><p>$separator\n" . &button;

   &view_index;
}


sub modify {

	&error unless ($FORM{'hd_fm'} && $FORM{'n'} && $FORM{'n'} =~ /^\d{9,10}$/);

	&get_variables;

	open(MESGFILE, "$base_dir/$FORM{'bb'}/$msg_dir/$FORM{'n'}") || &open_err("$FORM{'bb'}/$msg_dir/$FORM{'n'}");
	@MESGLINES = <MESGFILE>;
	close(MESGFILE);
	($user, $orig_hd_fm, $orig_subject, $orig_name, $long_date, $orig_email) = split(/\|/, $MESGLINES[0]);
	($id, $cryptpasswd) = split(/:/, $user);
	chop($orig_email) if ($orig_email =~ /\n$/);

	if (&check_admin_auth) {
      	&modifying;
	} else {
		$test_passwd = crypt($passwd, substr($cryptpasswd, 0, 2));
		if ($test_passwd eq $cryptpasswd) {
			&modifying;
		} else {
			&error(not_same);
		}
	}
}


sub modifying {

	&lock;
	open(INDEX,"$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	@index = <INDEX>;
	close(INDEX);

	open(INDEX,">$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	foreach $index_line (@index) {
		if ($index_line =~ /t\|([^\|]*)\|$FORM{'n'}\|(.)\|([^\|]*)\|[^\|]*\|[^\|]*\|([^\|]*)\|([^\|]*)\|[^\n]*/) {
			$dc_count = $5 - 1;
			print INDEX "t|$1|$FORM{'n'}|$2|$3|$subject|$name|$4|$dc_count|$email\n";
		} else {
			print INDEX "$index_line";
		}
	}
	close(INDEX);
	&unlock;

	$num = "$FORM{'n'}";
	&new_file;
	&return_html(complete_write);
}


sub confirm_remove {

	if (!($ENV{'HTTP_COOKIE'})) { &error(not_auth); }

	elsif ($ENV{'HTTP_COOKIE'}) {
		&get_cookie;
		&get_admin_passwd;
		if (!($cookie_passwd eq $master_passwd && $cookie_id eq $master_id)) {
	      	&error(not_auth);
		}
	}

	for ($i = 1; $i <= $#LINES; $i++) {
		if ($LINES[$i] =~ /t\|[^\|]*\|$FORM{'n'}\|/) {
			($mark, $post_depth, $post_num, $post, $id, $subject, $name, $date, $count, $email) = split(/\|/, $LINES[$i]);
			chop($email) if ($email =~ /\n$/);
			last;
		}
	}

	$IDXH = "$separator<table width=95%><tr><td><br>\n"
	. "<font size=+2><b>±Û »èÁ¦</b></font><p>$FORM{'n'}<br>";
	if ($post eq 'y') {
		$IDXH .= "<img src=\"$base_url/icons/open.gif\">";
	} else {
		$IDXH .= "<img src=\"$base_url/icons/close.gif\">";
	}
	$IDXH .= " <a href=\"$cgi_url?bb=$FORM{'bb'}&c=read&n=$FORM{'n'}&h=$FORM{'h'}&w=$FORM{'w'}\">$subject</a> -- ";
	if ($email) {
		$IDXH .= "<a href=\"mailto:$email\">$name</a>";
	} else {
		$IDXH .= "$name";
	}
	$IDXH .= " ( $date )<p>\n";

 	if ($post eq 'y') {
		$IDXH .= "À§±ÛÀº °ü·Ã±ÛÀ» °¡Áö°í ÀÖ´Â ±ÛÀÔ´Ï´Ù. ÀÌ±ÛÀ» »èÁ¦ÇÏ¸é °ü·Ã±Ûµµ ¸ðµÎ »èÁ¦µË´Ï´Ù.<br>\n"
		. "°ü·Ã±ÛÀ» È®ÀÎÇÏ°í »èÁ¦¿©ºÎ¸¦ °áÁ¤ÇÏ½Ã±â ¹Ù¶ø´Ï´Ù.<p>\n";
	}

	$IDXH .= "ÇÑ¹ø »èÁ¦ÇÑ ±ÛÀº º¹±¸ÇÒ ¼ö ¾øÀ¸¹Ç·Î »èÁ¦¿¡ ½ÅÁßÀ» ±âÇÏ±â ¹Ù¶ø´Ï´Ù.<br>\n"
	. "À§±Û $FORM{'n'}ÀÇ »èÁ¦¸¦ ¿øÇÏ½Ã¸é »èÁ¦ ¹öÆ°À» Å¬¸¯ÇÏ½Ê½Ã¿ä.<br>\n"
	. "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"remove\">\n"	
	. "<input type=hidden name=\"n\" value=\"$FORM{'n'}\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
	. "<input type=submit value=\"          »èÁ¦ !          \">\n"
	. "</form><br></td></tr></table>$separator\n"
	. &button;

	&view_index;
}


sub remove {

	if (!($ENV{'HTTP_COOKIE'})) { &error(not_auth); }

	elsif ($ENV{'HTTP_COOKIE'}) {
		&get_cookie;
		&get_admin_passwd;
		if (!($cookie_passwd eq $master_passwd && $cookie_id eq $master_id)) {
	      	&error(not_auth);
		}
	}

	&lock;
	open(INDEX,"$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	@RMLINES = <INDEX>;
	close(INDEX);

	for ($i = 1; $i <= $#RMLINES; $i++) {
		if ($RMLINES[$i] =~ /^t\|[^\|]*\|$FORM{'n'}/) {
			$rm_start_line = $i;
		}
		if ($RMLINES[$i] =~ /^i\|[^\|]*\|$FORM{'n'}/) {
			$rm_end_line = $i;
			last;
		}
	}

	for ($i = $rm_start_line; $i <= $rm_end_line; $i++) {
		if ($RMLINES[$i] =~ /^t\|[^\|]*\|([^\|]*)/) {
			push(@RM_FILES , $1);
		}
	}

	$ch_icon_line = $rm_start_line - 1;

	if ($RMLINES[$ch_icon_line] =~ /^t\|([^\|]*)\|([^\|]*)/) {
		$find_depth = $1 + 1;
		$up_file_num = $2;

		for ($k = $ch_icon_line; $k <= $#LINES; $k++) {
			if ($RMLINES[$k] =~ /^i\|[^\|]*\|$up_file_num/) {
				$between_end = $k;
				last;
			}
		}
		$other = "0";
		for ($h = $ch_icon_line; $h <= $between_end; $h++) {
			if ($RMLINES[$h] =~ /^t\|$find_depth\|/) {
				$other++;
			}
		}
		if ($other eq "1") {
			$RMLINES[$ch_icon_line] =~ s/t\|([^\|]*)\|$up_file_num\|.\|/t\|\1\|$up_file_num\|n\|/;
		}
	}

	open(INDEX,">$base_dir/$FORM{'bb'}/$idx_file") || &open_err("$FORM{'bb'}/$idx_file");
	for ($j=0; $j <= $#RMLINES; $j++) {
		if ($j < $rm_start_line || $j > $rm_end_line ) {
			print INDEX "$RMLINES[$j]";
		}
	}
	close(INDEX);
	&unlock;
	foreach (@RM_FILES) {
		unlink("$base_dir/$FORM{'bb'}/$msg_dir/$_");
	}

	&return_html(complete_remove);
}


sub login_form {

	&admin_login_success if (&check_admin_auth);

	$IDXH = "$separator<p><table width=95%><tr><td>";
	$IDXH .= "<font size=-1>" if ($make_small_font_size == 1);
	$IDXH .= "<font size=+2><b>°ü¸®ÀÚ Á¢¼Ó</b></font><p>\n"
	. "°ü¸®ÀÚ ID¿Í Password¸¦ ÀÔ·ÂÇÏ°í Á¢¼Ó ¹öÆ°À» Å¬¸¯ÇÏ½Ê½Ã¿ä.<br>\n"
	. "<form method=POST action=\"$cgi_url\">\n"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"admin_login\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
	. "<b>°ü¸®ÀÚ ID :</b> <input type=text name=\"master_id\" size=11 maxlength=8> \n"
	. "<b>Password :</b> <input type=password name=\"master_passwd\" size=11 maxlength=8><p>\n"
	. "<input type=submit value=\"           Á¢¼Ó           \"></form>";
	$IDXH .= "</font>" if ($make_small_font_size == 1);
	$IDXH .= "</td></table>$separator\n" . &button;
	
	&view_index;
}


sub admin_login {

	&get_admin_passwd;
	$test_passwd = crypt($FORM{'master_passwd'}, substr($master_passwd, 0, 2));
	&error(admin_login_fail) unless ($test_passwd eq $master_passwd && $FORM{'master_id'} eq $master_id);
	print "Set-Cookie: wookie's_Web_Board_admin_cookie=$master_id:$master_passwd\n";
	&admin_login_success;
}


sub admin_login_success {

	&get_time;

	unless (&check_admin_auth) {
	        $login_count++;
	        open(FILE,">$base_dir/$FORM{'bb'}/$passwd_file") || &open_err("$FORM{'bb'}/$passwd_file");
        	print FILE "$master_id:$master_passwd|$login_count|$long_date";
        	close(FILE);
	}
	if ($c eq 'ch_admin_info' || $c eq 'add_new_board') {
		$IDXH .= "<p><table width=95%><tr><td align=center><br>\n";
	} else {
		$IDXH = "$separator<table width=95%><tr><td align=center><br>\n"
		. "<h3>$master_name´ÔÀÇ °ü¸®ÀÚÁ¢¼ÓÀ» È¯¿µÇÕ´Ï´Ù. ^______^</h3><p>"
		. "Áö±ÝºÎÅÍ ±Û¼öÁ¤°ú ±Û»èÁ¦¸¦ ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.<br>\n"
		. "°ü¸®ÀÚÁ¢¼Ó»óÅÂ´Â ºê¶ó¿ìÀú¸¦ Á¾·áÇÏ±â Àü±îÁö °è¼Ó À¯ÁöµË´Ï´Ù.<br>\n"
		. "ID¿Í Password º¯°æÀÇ ÇÊ¿ä¼ºÀÌ ÀÖÀ¸¸é ¾Æ·¡ÀÇ º¯°æ¸ðµå¿¡¼­ º¯°æÇÏ½Ê½Ã¿ä.<br>\n";
	}
	$IDXH .= "<form><table border=1 cellspacing=1 cellpadding=3 width=535><tr valign=middle>"
	. "<th colspan=2>°ü¸®ÀÚ Á¢¼ÓÁ¤º¸</th><th>°ü¸®ÀÚ ID, Password º¯°æ</th></tr>\n"
	. "<tr><td width=120>°ü¸®ÀÚ ÀÌ¸§</td><td>$master_name</td>\n"
	. "<td rowspan=5 align=center>\n"
	. "<form method=POST action=\"$cgi_url\">"
	. "<input type=hidden name=\"bb\" value=\"$FORM{'bb'}\">\n"
	. "<input type=hidden name=\"c\" value=\"ch_admin_info\">\n"
	. "<input type=hidden name=\"h\" value=\"$FORM{'h'}\">\n"
	. "<input type=hidden name=\"w\" value=\"$FORM{'w'}\">\n"
	. "Çö °ü¸®ÀÚ ID : <input type=text name=\"old_id\" size=11 maxlength=8><br>\n"
	. "»õ °ü¸®ÀÚ ID : <input type=text name=\"new_id\" size=11 maxlength=8><p>\n"
	. "Çö Password : <input type=password name=\"old_passwd\" size=11 maxlength=8><br>\n"
	. "»õ Password : <input type=password name=\"new_passwd_1\" size=11 maxlength=8><br>\n"
	. "Password È®ÀÎ:<input type=password name=\"new_passwd_2\" size=11 maxlength=8><p>\n"
	. "<input type=submit value=\"       º¯°æ      \"></td>\n"
	. "<tr><td>°ü¸®ÀÚ E-Mail</td><td>$master_email</td>\n"
	. "<tr><td>Á¢¼ÓÈ½¼ö</td><td>$login_count</td>"
	. "<tr><td>Á¢¼Ó½Ã°¢</td><td>$long_date</td>\n"
	. "<tr><td>ÀÌÀüÁ¢¼Ó½Ã°¢</td><td>$login_time</td></table></form></td></tr></table>\n"
	. "$separator\n" . &button;

	&view_index;
}


sub ch_admin_info {

	&error(cannot_ch_admin_info) unless (&check_admin_auth);
	&error(cannot_ch_admin_info) if ($FORM{'new_passwd_1'} ne $FORM{'new_passwd_2'});

	$test_passwd = crypt($FORM{'old_passwd'}, substr($master_passwd, 0, 2));
	if ($test_passwd eq $master_passwd && $FORM{'old_id'} eq $master_id) {
		$passwd = "$FORM{'new_passwd_1'}";
		&make_cryptpasswd;
		open(PASSWD,">$base_dir/$FORM{'bb'}/$passwd_file") || &open_err("$base_dir/$FORM{'bb'}/$passwd_file");
		if ($FORM{'new_id'}) {
			$new_master_id = $FORM{'new_id'};
		} else {
			$new_master_id = $master_id;
		}
		print PASSWD "$new_master_id:$cryptpasswd|$login_count|$login_time";
		close(PASSWD);
		print "Set-Cookie: wookie's_Web_Board_admin_cookie=$new_master_id:$cryptpasswd\n";
		&return_html(ch_admin_info_success);
	} else {
		&error(cannot_ch_admin_info);
	}
}


sub parse_form {

	$_ = $ENV{'REQUEST_METHOD'};
	if (/POST/) {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
		$ENV{'QUERY_STRING'} = $buffer;
	} else {
		$buffer = $ENV{'QUERY_STRING'};
	}
	@pairs = split(/&/, $buffer);
	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/\n//g unless ($name eq 'body');
		$FORM{$name} = $value;
	}
}


sub get_time {

	$num = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($num);
	$sec = "0$sec" if ($sec < 10);
	$min = "0$min" if ($min < 10);
	$hour = "0$hour" if ($hour < 10);
	$mday2 = $mday;
	$mday2 = "0$mday" if ($mday < 10);
	$month = $month2 = $mon + 1;
	$month2 = "0$month" if ($month < 10);
	@MONTHS = ("1¿ù","2¿ù","3¿ù","4¿ù","5¿ù","6¿ù","7¿ù","8¿ù","9¿ù","10¿ù","11¿ù","12¿ù");
        if ($year<1900) {$year += 1900;}
	$date = "$year/$month2/$mday2 $hour\:$min";
	$long_date = "$year³â $MONTHS[$mon]$mdayÀÏ $hour:$min:$sec";
}      


sub get_admin_passwd {

	open(PASSWD, "$base_dir/$FORM{'bb'}/$passwd_file");
	$line = <PASSWD>;
	close(PASSWD);
	($passwd_line, $login_count, $login_time) = split(/\|/, $line);

	chop($login_time) if ($login_time =~ /\n$/);
	($master_id, $master_passwd) = split(/:/, $passwd_line);

}


sub get_cookie {

	@cookies = split(/; /, $ENV{'HTTP_COOKIE'});
	foreach (@cookies) {
		($ck_name, $ck_value) = split(/=/, $_);
		$COOKIE{$ck_name} = $ck_value;
	}
	($cookie_id, $cookie_passwd) = split(/:/, $COOKIE{'wookie\'s_Web_Board_admin_cookie'});
}


sub make_cryptpasswd {

	@saltset = ('a' .. 'z' , 'A' .. 'Z' , '0' .. '9' , '.' , '/');
	$salt = "$saltset[int(rand(64))]$saltset[int(rand(64))]";
	$cryptpasswd = crypt($passwd, $salt);
}


sub check_admin_auth {

	if ($ENV{'HTTP_COOKIE'}) {
		&get_cookie;
		&get_admin_passwd;
		if ($cookie_passwd eq $master_passwd && $cookie_id eq $master_id) {
			return 1;
		} else {
			return 0;
		}
	} else {
		return 0;
	}
}


sub lock {

	$lockfile = "$base_dir/$FORM{'bb'}/$FORM{'bb'}.lock";
	while (-e "$lockfile") {
		$current_time = time;
		if (($current_time - (stat($lockfile))[9]) > 15) {
			unlink("$lockfile");
			last;
		}
		select(undef, undef, undef, .5);
	}
	open(LOCKFILE, ">$lockfile");
}

sub unlock {
	close(LOCKFILE);
	unlink("$base_dir/$FORM{'bb'}/$FORM{'bb'}.lock");
}


sub mail_to_master {

	open (MAIL, "|$mailprog $master_email") || &open_err("$mailprog");
	print MAIL "Reply-to: $name <$email>\n";
	print MAIL "From: $name <$email>\n";
	print MAIL "Subject: New Post to $FORM{'bb'}\n\n";
	print MAIL "New Post to $FORM{'bb'}\n";
	print MAIL "----------------------------------------------------------------\n";
	print MAIL "\(±Û¹øÈ£\)Á¦¸ñ : \($num\) $subject\n";
	print MAIL "±Û ¾´ ÀÌ : $name <mailto:$email>\n";
	print MAIL "±Û¾´½Ã°¢ : $long_date\n";
	print MAIL "----------------------------------------------------------------\n";
	print MAIL "$body\n";
	print MAIL "----------------------------------------------------------------\n";
	close (MAIL);
}

exit;
