#!/usr/local/bin/perl
##########################################
#Á¦ÀÛÀÚ: À±¼®¹ü (http://yCHAT.ml.org)
#ÀÚ·á½Ç 7.0 (1998³â 10 ¿ù 4ÀÏ)
###########################################################################

##########################################
# Modified by jylee@math.ewha.ac.kr
# 1. Multi-DB : using ?grade=0a&topic=0
# 2. Unified $base_dir/data.txt -> Upcount.txt
# 3. $base_dir/filelist.txt -> list_txt = List-??.txt
# 4. $path/* -> UpFiles/gradename/*
# 5. pcode : Time dependent passcode to avoid automatic input (2008/1/28)
##########################################

$cgi_url = "index.cgi"; #cgi È­ÀÏ À§Ä¡ URL
$icon_url = "icons";  #icon ÀúÀåÀ§Ä¡ URL

$page_display = 20; #ÇÑ È­¸é¿¡ º¸¿©ÁÙ ±Û ¼ö
$admin_pass = "235711"; #°ü¸®ÀÚ ¾ÏÈ£
$data_txt = "UpCount.txt";  # Unique File ID (increamental counter)
# 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)

######################################################################
&get_input;

$gradeidx = 0;
@gradecode=('1a', '2a');
@gradename=('Handout','Software');
for ($i=0; $i<=$#gradecode; $i++) {
   if ( $gradecode[$i] eq $INV{'grade'} ) { $gradeidx = $i; }
}
$list_txt = "List-$gradecode[$gradeidx].txt";
$UpFiles = "UpFiles/$gradename[$gradeidx]";       # 

$topicidx = 0;
@topiclist=('Àü»ê¼öÇÐ|À¯ÇÑ¼öÇÐ|¼öÄ¡ÇØ¼®|°úÇÐ°è»ê|±âÅ¸',
 '¼öÇÐ|³×Æ®¿÷|¸ÖÆ¼¹Ìµð¾î|±âÅ¸');
@topicname = ('ÀüÃ¼³»¿ë',split('[|]',$topiclist[$gradeidx]));
@topicname2 = ('ÀÏ¹Ý',split('[|]',$topiclist[$gradeidx]));
if ( $INV{'topic'} <= $#topicname & $INV{'topic'} >= 0 ) {
   $topicidx = $INV{'topic'};
}

$gradeCGI = "grade=$gradecode[$gradeidx]";
$topicCGI = ($topicidx!=0) ? "&topic=$topicidx" : "";
$keywdCGI = ($INV{'keyword'} ne "") ? "&keyword=$INV{'keyword'}" : "";

#######################################################################
if ($INV{'action'} eq "") {
	&openfile;
	&display;
}

##############################################################################
sub openfile {

   if ( $topicidx==0 && $INV{'keyword'} eq "" ) {
      open (DATAFILE, "$list_txt");
      @Data = <DATAFILE>;
      close (DATAFILE);
      $tot_num = @Data;
      $all_num = $tot_num;
      return;
   }

   if ( $topicidx!=0 && $INV{'keyword'} ne "" ) {
      $regex = "$topicname[$topicidx].*$INV{'keyword'}"; 
   } elsif ( $topicidx!=0 ) {
      $regex = $topicname[$topicidx];
   } else {
      $regex = $INV{'keyword'};
   }

   @Data = ();
   $tot_num = 0;
   $all_num = 0;
   open (DATAFILE, "$list_txt");
   foreach $Line (<DATAFILE>) {
      $all_num++;
      if ($Line =~ m/$regex/i) {
         $tot_num++;
         push(@Data, $Line);
      }
   }
   close (DATAFILE);
}

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

sub display {		
   $cgi_url_now = "$cgi_url?$gradeCGI";

   $tot_page= int($tot_num/$page_display);
   if ($tot_num==0 || $tot_page<($tot_num/$page_display)) {
      $tot_page = $tot_page+1;
   }

   $page = ( $INV{'page'} ne "" ) ? $INV{'page'} : $tot_page ;
   $page = ( $page=>1 && $page<=$tot_page ) ? $page : $tot_page;
            
   &html_header("");
   print "<font  color=#00889f><b>$gradename[$gradeidx]</b></font><font size=-1> ÀÚ·á½ÇÀÇ </font>";
   print "<font color=red size=-1>$all_num</font><font size=-1>°³ ÀÚ·á Áß </font>";
   print "<font color=#00889f><b>$topicname[$topicidx]</b></font><font size=-1> Ç×¸ñ";
   if ( $INV{'keyword'} ne "" ) {
      print "¿¡¼­ <b>$INV{'keyword'}</b>";
   }
   print "  °ü·Ã ÀÚ·á´Â <font color=red size=-1>$tot_num</font>°³ ÀÔ´Ï´Ù.</font>\n";
   print "<hr size=1 width=90%>\n";
   print "<table border=0 width=90% cellspacing=1 cellpadding=1> <tr>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>Á¾·ù</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>È­ÀÏ ÀÌ¸§</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>È­ÀÏ ¼³¸í</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>µî·ÏÀÚ</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>µî·ÏÀÏ</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>Àü¼Û</b></font></td>
      <td align=center bgcolor=#00829c>
            <font size=-1 color=ffffff><b>»èÁ¦</b></font></td></tr>\n";
            
   $start_count = ($page-1) * $page_display;
   $end_count = $page * $page_display - 1;
   if ( $end_count > $tot_num-1 ) {
      $end_count = $tot_num-1;
      $start_count = $end_count-$page_display+1;
      $start_count = $start_count<0 ? 0 : $start_count;
   }

   for ($h=$start_count;$h<=$end_count;$h++) {
      $Message = $Data[$h];
      @TempData = split (/\|/, $Message);
      $rmfile = $TempData[2];
    
      if ( $TempData[7] !~ "http" ) {
         $File = "<td align=center><font size=-1>"
               . "<a href=$cgi_url?grade=$gradecode[$gradeidx]"
               . "&action=down&f_name=$TempData[2]>$TempData[2]</a>"
               . "($TempData[7])</font></td>"
      } else {
         $File = "<td align=center><font size=-1>"
              .  "<a href=http://$TempData[2]>$TempData[2]</a></font></td>";
      }
      if ( $TempData[4] eq "") {
         $up_person = $TempData[3];
      } elsif ($TempData[4] =~ /:/ ) {
         $up_person = "<a href=\"$TempData[4]\">$TempData[3]</a>";
      } else {
         $up_person = "<a href=\"mailto:$TempData[4]\">$TempData[3]</a>";
      }

      print "<tr bgcolor=#dddddd>
         <td align=center>
         <font size=-1>$TempData[9]</font></td>
         $File
         <td><font size=-1>$TempData[5]</a></font></td>
         <td align=center><font size=-1>$up_person</font></td>
         <td align=center><font size=-1>$TempData[6]</font></td>
         <td align=center><font size=-1>$TempData[8]</td>
         <td align=center><font size=-1> <a href=
           \"$cgi_url_now&action=remove&value=$TempData[0]&name=$rmfile\">
           <img src=$icon_url/remove2.gif border=0></a></font></td>
         </tr>\n";
   }
   print "</table></center>\n";

   print "<center><font size=-1>|\n";
   for ($i=1;$i<$page;$i++) {
      print "<a href=$cgi_url_now&$topicCGI$keywdCGI&page=$i> $i</a> |\n";
   }
   print "$page |\n";
   for ($i=$page+1;$i<=$tot_page;$i++) {
      print "<a href=$cgi_url_now&$topicCGI$keywdCGI&page=$i> $i</a> |\n";
   }
   print "</font><hr size=1 width=90%>\n";

   &tailer;

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

sub html_header {
   print "Content-type: text/html\n\n";
   print "<HTML>\n";
   print "<Head><Title>@_</Title>\n";
   print <<EOT;
<!-- Script of Selective announcement --> 
<SCRIPT LANGUAGE="JavaScript">
 function changePost(form) {
    location = "$cgi_url?action=post"
          + "&grade="+form.grade.options[form.grade.selectedIndex].value;
 }
 function changeGrade(form) {
    location = "$cgi_url?"
          + "grade="+form.grade.options[form.grade.selectedIndex].value;
 }
 function changeTopic(form) {
    location = "$cgi_url?"
          + "grade="+form.grade.options[form.grade.selectedIndex].value
          + "&topic="+form.topic.options[form.topic.selectedIndex].value;
 }
</SCRIPT>
<!-- End of JavaScript --> 
EOT
   print "</Head>\n";
   print "<Body bgcolor=ffffff><center>\n";
   print "<font size=+2 color=#00889f><b>@_</b></font>\n";
}

sub tailer {
   print "<table width=90% border=0><tr>\n";

   print "<td><FORM>";
   print "ºÐ·ù <SELECT NAME=grade SIZE=1 onChange=changeGrade(this.form)>\n";
   for ($i=0; $i<=$#gradecode; $i++) {
      print "<OPTION";
      if ( $i == $gradeidx ) {print " SELECTED";}
      print " VALUE=$gradecode[$i]> $gradename[$i]\n";
   }
   print "</SELECT><br>";
   print "Ç×¸ñ <SELECT NAME=topic SIZE=1 onChange=changeTopic(this.form)>\n";
   for ($i=0; $i<=$#topicname; $i++) {
      print "<OPTION";
      if ( $i == $topicidx ) {print " SELECTED";}
      print " VALUE=$i> $topicname[$i]\n";
   }
   print "</SELECT>";
   print "</FORM></td>\n";

   print "<td><a href=\"$cgi_url?$gradeCGI$topicCGI&action=post\">";
   print "<img src=$icon_url/write.gif border=0 alt=ÀÚ·áµî·Ï></a></td>\n";

   print "<td align=center>";
   print "<form action=\"$cgi_url\">";
   print "<input type=text name=keyword size=12>\n<br>\n";
   print "<input type=submit value=\"°Ë»ö\">";
   print "<input type=reset value=\"»èÁ¦\">\n";
   print "<input type=hidden name=grade value=$gradecode[$gradeidx]>\n<br>\n";
   print "<input type=hidden name=topic value=$topicidx>\n<br>\n";
   print "</form></td>";

   print "<td align=right>\n"; &button2; print "</td>";

   print "</tr></table></center><p>\n";
}

sub button2 {
   $cgi_url_now = "$cgi_url?$gradeCGI$topicCGI$keywdCGI";
   if ($page > 1) {
      print "<a href=\"$cgi_url_now&page=" , $page-1 ,
         "\"> <img src=$icon_url/prev.gif border=0 alt=ÀÌÀüÆäÀÌÁö></a>\n";
   } else {
#     print "<img src=$icon_url/prev_n.gif border=0>\n";
   }
   if ($page < $tot_page) {
      print "<a href=\"$cgi_url_now&page=" , $page+1 ,
         "\"> <img src=$icon_url/next.gif border=0 alt=ÀÌÀüÆäÀÌÁö></a></td>\n";
   } else {
#     print "<img src=$icon_url/next_n.gif border=0></td>\n";
   }
}

################################################################
if ($INV{'action'} eq "down") { 

   $f_name = "$INV{'f_name'}";
   &openfile;

   open(FIL, ">$list_txt");
   for ($i=0;$i<=$tot_num;$i++) {
      $dd = $Data[$i];
      @Tem = split(/\|/,$dd);
      if ($Tem[2] eq $f_name) {
         $Tem[8] = $Tem[8]+1;
         print FIL join('|',@Tem);
      } else {
         print FIL $dd;
      }
   }
   close FIL;

   @t = split(/[.]/,$f_name); $ext_name = ($#t!=0) ? "$t[$#t]" : "";
   $ext_name =~ tr/A-Z/a-z/;
   %type_list=( 'hwp','application/hwp', 'ppt','application/ppt',
       'txt', 'text/plain');
   if ( $type_list{"$ext_name"} ne "" ) {
       $ext_type = $type_list{"$ext_name"};
   } elsif ( $ext_name ne "" ) {
       $ext_type = "applicatoin/$ext_name";
   } else {
       $ext_type = "application/octet-stream";
   }
   
   print "Content-type: $ext_type\n";
   print "Content-Disposition: attachment; filename=\"$f_name\"\n\n";

   open (FILE, "$UpFiles/$f_name") ;
   binmode(FILE);
   binmode(STDOUT);
   binmode(STDERR);
   print <FILE>;
   close (FILE);
   exit;
}

#########################################################
if ($INV{'action'} eq "post") { 
   &html_header('ÀÚ·áµî·Ï');
   print "<table><tr><td><ol>\n";
   print "<li>E-Mail³­¿¡´Â ÀüÀÚ¿ìÆíÁÖ¼Ò³ª È¨ÆäÀÌÁö ÁÖ¼Ò¸¦ ¾²½Ç ¼ö ÀÖ½À´Ï´Ù.\n";
   print "<li>È­ÀÏµî·Ï È¤Àº ¸µÅ©µî·ÏÁß <b>ÇÏ³ª¸¸ ¼±ÅÃ</b>ÇÏ½Ê½Ã¿À.\n";
   print "<li>¼³¸íÀº °£°áÇÏ°Ô ±â·ÏÇØ ÁÖ½Ê½Ã¿À.\n";
   print "</ol></td></table>\n";

   print "<form method=post action=\"$cgi_url\" enctype=multipart/form-data>\n";
   print "<input type=hidden name=\"action\" value=\"post2\">\n";
   print "<table><tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>¼º  ¸í</font></td>";
   print "<td><input type=text name=\"Author\" size=10></td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>E-MAIL<br>Home-URL</font></td>";
   print "<td><input type=text name=\"EMail\" size=40></td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>ºñ¹Ð¹øÈ£</font></td>";
   print "<td><input type=password name=\"passwd\" size=8>";
   print " (º»ÀÎÀÌ ÃßÈÄ »èÁ¦ÇÏ·Á¸é ¾²½Ê½Ã¿À.)</td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>ÀÚ·áºÐ·ù</font></td><td>";
   print "<SELECT NAME=\"grade\" SIZE=1 onChange=changePost(this.form)>\n";
   for ($i=0; $i<=$#gradecode; $i++) {
      print "<OPTION ";
      if ( $i == $gradeidx ) {print "SELECTED ";}
      print "VALUE=\"$gradecode[$i]\">$gradename[$i]\n";
   }
   print "</SELECT>\n";
   print "<SELECT NAME=\"topic\" SIZE=1>\n";
   for ($i=0; $i<=$#topicname2; $i++) {
      print "<OPTION ";
      if ( $i == $topicidx ) {print "SELECTED ";}
      print "VALUE=$i> $topicname2[$i]\n";
   }
   print "</SELECT>\n";
#  @uptypelist = ('ÇÐ½ÀÁöµµ¾È', 'º¸Á¶ÀÚ·á','±³¼ö¸ÅÃ¼¹°', 'CAI', '±×¿Ü');
#  print "<SELECT NAME=\"uptype\" SIZE=1>\n";
#  for ($i=0; $i<=$#uptypelist; $i++) {
#     print "<OPTION VALUE=$uptypelist[$i]> $uptypelist[$i]\n";
#  }
#  print "</SELECT>\n";
   print "</td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>È­ÀÏµî·Ï<br>¶Ç´Â<br>¸µÅ©µî·Ï</font></td>";
   print "<td><input type=file size=30 name=upfile> <br>";
   print "<input type=text size=37 name=uplink> </td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>¼³ ¸í</font></td>";
   print "<td><input type=text name=\"Subject\" size=40></td></tr>\n";

   print "<tr><td bgcolor=336699 align=center>";
   print "<font color=ffffff size=-1>µî·ÏÀÎÁõ¹øÈ£</font></td>";
   $pcode = $pcode*43189669%(60*60*24*365) + 40000000; # 400000000~71535999
   print "<td><input type=text name=\"passcode\" size=8>";
   print " (ÀÚµ¿»ý¼º¹æÁö¸¦ À§ÇØ <b>".$pcode."</b>¸¦ ÀÔ·ÂÇÏ½Ê½Ã¿À.)</td></tr>\n";

   print "</table>\n";

   print "<input type=submit value=\"ÀÚ·á µî·Ï\">";
   print "<input type=reset value=\"´Ù½Ã ÀÛ¼º\">";

   print "</form><hr size=1 width=90%>\n";
   print "</center></body></html>\n";
}

########################################################################
if ($INV{'action'} eq "post2") { 
	
   $err = "";
   $err .= ($INV{'Author'} eq "") ? "¼º¸í³­ÀÌ ºñ¾î ÀÖ½À´Ï´Ù<br>\n" : "";
   @t = split('[:@]',$INV{'EMail'});
   $err .= ( ($INV{'EMail'} ne "") && ($t[0] eq "" || $#t != 1) )
             ? "E-MAIL È¤Àº URL ÁÖ¼Ò¸¦ È®ÀÎÇÏ½Ê½Ã¿À<br>\n" : "";
   $err .= ($INV{'upfile'} ne "" && $INV{'uplink'} ne "")
            ? "È­ÀÏ°ú ¸µÅ© Áß ÇÏ³ª¸¸¿¡ ÀÚ·á¸¦ µî·ÏÇÏ½Ê½Ã¿À.<br>\n" : "";
   $err .= ($INV{'uplink'} ne "" && $INV{'uplink'} !~ "^http://.")
             ? "UpLink URL ÁÖ¼Ò¸¦ È®ÀÎÇÏ½Ê½Ã¿À.<br>\n" : "";
   $err .= ($INV{'Subject'} eq "") ? "¼³¸í³­ÀÌ ºñ¾î ÀÖ½À´Ï´Ù<br>\n" : "";
   $err .= (length($INV{'Subject'}) > 70 ) ? "¼³¸í³­ÀÌ ³Ê¹« ±é´Ï´Ù<br>\n" : "";
   $passcode = ($INV{'passcode'}-40000000) * 832429 % (60*60*24*365);
   $err .= ($pcode+($passcode<=$pcode?0:60*60*24*365) < $passcode+3600)
             ? "" : "µî·ÏÀÎÁõ¹øÈ£¸¦ È®ÀÎÇØ ÁÖ½Ê½Ã¿À <br>\n";
   if ( $err ne "" ) {&error;}


   open (MSGNUM, "$data_txt");
   $MsgNum = <MSGNUM>;
   close MSGNUM;
   $MsgNum = ($MsgNum+1)%10000;
       	
   if ($INV{'upfile'}) {
       @t = split(/\"/,$real_file); $full_name = $t[3];
       @t = split(/[\/\\]/,$full_name); $org_name = ($t[$#t]);
       @t = split(/[.]/,$org_name); $ext_name = ($#t!=0) ? ".$t[$#t]" : "";

       $cp_name = "$topicname2[$topicidx]-$MsgNum$ext_name";
       $cp_name = "$org_name";
       if (-e "$UpFiles/$cp_name") {
          $err = "exit";
          &error;
       } elsif ( ! open(FILE, ">$UpFiles/$cp_name")) {
          $err = "File Opening Error";
          &error;
       }
       binmode FILE; 
       print FILE $INV{'upfile'};
       close FILE;

       $size = (-s "$UpFiles/$cp_name");
       $size = int($size/1024+.5);
       $size = "$size" . "k";
   } else {
       $cp_name = substr($INV{'uplink'},7,length($INV{'uplink'})-7);
       $size = "http";
   }

   open (MSGNUM, ">$data_txt");
   print MSGNUM "$MsgNum\n";
   close MSGNUM;

   $INV{'passwd'} =~ s/ //go;    
   $INV{'passwd'} =~ s/^\t//go;    
	
   &get_date;
   open (DATAF, ">>$list_txt");
   print DATAF "$MsgNum|$INV{'passwd'}|$cp_name|";
   print DATAF "$INV{'Author'}|$INV{'EMail'}|$INV{'Subject'}|";
   print DATAF "$shortdate|$size|0|";
   #print DATAF "$INV{'uptype'}|$ENV{'REMOTE_ADDR'}|$org_name\n";
   print DATAF "$topicname2[$topicidx]|$ENV{'REMOTE_ADDR'}|$org_name\n";
   close (DATAF);

   &openfile;
   &display;
}

##############################################################################
if ($INV{'action'} eq "remove") { 

   open (DATAFILE, "$list_txt");
   @Data = <DATAFILE>;
   close (DATAFILE);

   foreach $Line (@Data) {
      @Temp = split(/\|/, $Line);
      if ($Temp[0] == $INV{'value'}) { 
         $subject = $Temp[2];
      }
   }

   if ($INV{'passwd'} eq "") {
      if ($INV{'name_2'} ne "") {
         $err = pass;
         &error;     
      }
      &html_header("$subject »èÁ¦");
      print "ÀÌ È­ÀÏÀ» »èÁ¦ÇÏ·Á¸é µî·Ï ´ç½ÃÀÇ ºñ¹Ð¹øÈ£¸¦ ³ÖÀ¸½Ã¿À\n";
      print "<form method=post action=\"$cgi_url\">\n";
      print "<input type=hidden name=action value=\"remove\">\n";
      print "<input type=hidden name=grade value=$gradecode[$gradeidx]>\n";
      print "<input type=hidden name=topic value=$topicidx>\n";
      print "<input type=hidden name=name_2 value=\"$INV{'name'}\">\n";
      print "<input type=hidden name=value value=\"$INV{'value'}\">\n";
      print "<table><tr><th bgcolor=#opfdcf>ºñ¹Ð¹øÈ£</th>\n";
      print "<td><input type=password name=\"passwd\" size=8></td>\n";
      print "<td colspan=2 align=center>";
      print "<input type=submit value=\"±Û »èÁ¦\"></td>\n";
      print "<td></form></td></tr></table>\n";
      print "<hr size=1 width=80%>\n";
      print "</center></body></html>\n";
      exit;             
   }
            
   if ($INV{'passwd'} ne $admin_pass) {
      foreach $Line (@Data) {
         @Temp = split(/\|/, $Line);
         if ($Temp[0] == $INV{'value'}) { 
            if ($INV{'passwd'} ne $Temp[1]) {
	       $err = "pass";
	       &error;
            }
         }
      }
   }

   open (DATAFIL, ">$list_txt");
   foreach $Line (@Data) {
      @Temp = split(/\|/, $Line);
      if ($Temp[0] == $INV{'value'}) { 
         $rm_file = $Temp[2];
         unlink ("$UpFiles/$rm_file");
      } else {
         print DATAFIL "$Line";
      }
   }
   close (DATAFIL);     
   &openfile;
   &display;
}


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

sub get_input {
   if ($ENV{'QUERY_STRING'}) {
      @args = split(/&/, $ENV{'QUERY_STRING'});

      foreach $pair (@args) {
         ($name, $value) = split(/=/, $pair);

         # Un-Webify plus signs and %-encoding
         $value =~ tr/+/ /;
         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
         $value =~ s/<!--(.|\n)*-->//g;
   
         if ($AllowHTML != 1) {
            $value =~ s/<([^>]|\n)*>//g;
         }
   
         $INV{$name} = $value;
      } 
  } else {
      $content_type = $ENV{'CONTENT_TYPE'};
      $content_len = $ENV{'CONTENT_LENGTH'};

      binmode STDIN;
      read(STDIN, $buffer, $content_len);
 
      if ((!$content_type) ||
              ($content_type eq 'application/x-www-form-urlencoded')) {
         # Process the name=value argument pairs
         @args = split(/&/, $buffer);
 
         $data = '';

         foreach $pair (@args) {
             ($name, $value) = split(/=/, $pair);
        
             # Unescape the argument value 
             $value =~ tr/+/ /;
             $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 
             # Save the name=value pair for use below.
             $INV{$name} = $value;

         }
     } elsif ($content_type =~ m#^multipart/form-data#) {
                # find boundary

         ($boundary = $content_type) =~ s/^.*boundary=(.*)$/\1/;
 
         @pairs = split(/--$boundary/, $buffer);
         @pairs = splice(@pairs,1,$#pairs-1);

         for $part (@pairs) {
             ($dump,$fline,$value) = split(/\r\n/,$part,3);
              if($fline =~ /filename/) {
		  $real_file = $fline;
             }

             next if $fline =~ /filename=\"\"/;
             $fline =~ s/^Content-Disposition: form-data; //;
             (@columns) = split(/;\s+/, $fline);
             ($name = $columns[0]) =~ s/^name="([^"]+)"$/\1/g;
 
             if ($#columns > 0) {

                if ($value =~ /^Content-Type:/) {
                   ($dump,$dump,$value) = split(/\r\n/,$value,3);
                } else {
                   ($dump,$value) = split(/\r\n/,$value,2);
                }
             } else {
                                ($dump,$value) = split(/\r\n/,$value,2);
                if (grep(/^$name$/, keys(%CGI))) {
                   if (@{$INV{$name}} > 0) {
                      push(@{$INV{$name}}, $value);
                   } else {
                      $arrvalue = $INV{$name};
                      undef $INV{$name};
                      $INV{$name}[0] = $arrvalue;
                      push(@{$INV{$name}}, $value);
                   }
                } else {
                   next if $value =~ /^\s*$/;
                   $INV{$name} = $value;
		   chop($INV{$name});
                   chop($INV{$name});
                }
                next;
            }
            $INV{$name} = $value;
          }
      } else {
           print "Invalid content type!\n";
           exit(1);
      }

   }
}
##################################################################################################################
sub error {
   &html_header("Access Denied<br>");

   if ($err eq "pass") {
      print "µî·Ï ´ç½ÃÀÇ ºñ¹Ð¹øÈ£°¡ ¾Æ´Õ´Ï´Ù. Á¤È®È÷ ±â·ÏÇÏ¿©";
   } elsif($err eq "exit") {
      print "Ã·ºÎÇÏ´Â È­ÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù. <br>ÀÌ¸§À» ¹Ù²Û ÈÄ¿¡";
   } else {
      print "$err";
   }
   print "<br>ÁË¼ÛÇÏÁö¸¸ ´Ù½Ã ½Ãµµ ÇÏ½Ê½Ã¿À.";
   print "</BODY>\n";
   print "</HTML>\n";
   exit;	
}

 ############################################################
 # Ã·ºÎÈ­ÀÏ È®ÀÎ
 #################################################

sub secu {
   if ($upname =~ /[;><&\*'\|\/\\]/ ) {
      &html_header("Security Problem");
      print "The upload file name is invalid.\n";
      print "</BODY></HTML>\n";
      exit(1);
   }
 }

 ##################################################
 # Write out the upload file
 #################################################
sub get_date {
   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
   if ($sec < 10)  { $sec = "0$sec";   }
   if ($min < 10)  { $min = "0$min";   }
   if ($hour < 10) { $hour = "0$hour"; }
   if ($mday < 10) { $mday = "0$mday"; }
   if ($mon < 10)  { $mon = "0$mon";  }
   if ($year<1900) {$year += 1900;}
   $month = ($mon + 1);
   if ($month < 10)  { $month = "0$month";  }
   $date = "$year³â $month¿ù$mdayÀÏ/$hour½Ã\:$minºÐ\:$secÃÊ"; 
   $shortdate = "$year/$month/$mday";
}
##########################################################
exit(0);
 
