#!/usr/local/bin/perl

# BraBBS Ver 1.01
#
# 17.May.98 -Mototaka Kakihara-

#
# CODE henkan script wo soubi!(w
#
require './jcode.pl';

#
# BODY TAG INIT.
#
$tmp  = "<BODY background=\"../images/daimoku.jpg\">\n";

#
# Number file
#
$nofile = "num.dat";

#

# COOKIE

#

sub getCookie {    if ($ENV{'HTTP_COOKIE'} ne "") {

        for $yy (split(/; */, $ENV{'HTTP_COOKIE'})) {

            ($info, $value) = split(/=/, $yy);

            $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;

            $COOKIE{$info} = $value;

        }

        $ENV{'HTTP_COOKIE'} = "";

    }

    return($COOKIE{$_[0]});

}



#
# index file
#
$idxfile = "index.dat";

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
   &Parse_form_rtn;           # 引数取得処理
   if    ($F{'KBN'} eq 'INPUT') {
      &Display_form_rtn;      # 入力フォーム表示処理
      exit;
   }
   elsif ($F{'KBN'} eq 'WRITE') {
      &Check_input_rtn;       # 入力項目チェック処理
      &Get_no_rtn;            # 記事Ｎｏ取得処理
      &Add_index_rtn;         # 索引情報追加処理
      &Create_detail_rtn;     # 明細ファイル作成処理
   }
}


#
# LOG wo Hyouji.
#
&Print_LOG;

sub Parse_form_rtn {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   @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/\t//g;
      &jcode'convert(*value,'sjis');
      $F{$name} = $value;
   }
   $resnum = $F{'RES'};

   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
   $mon++;
   if ($sec  < 10) { $sec  = "0$sec";  }
   if ($min  < 10) { $min  = "0$min";  }
   if ($hour < 10) { $hour = "0$hour"; }
   if ($mon  < 10) { $mon  = "0$mon";  }
   if ($mday < 10) { $mday = "0$mday"; }
   $today = "$year/$mon/$mday $hour:$min:$sec";
}

sub Display_form_rtn {
   $info = &getCookie("InfoBraBBS");

   @namemail = split(/,/, $info);

   print "Content-type: text/html\n\n";
   print "<HTML>\n";
   print "$tmp\n";
   print "<FORM METHOD=\"POST\" ACTION=\"brabbs.cgi\">\n";
   print "<CENTER><H1>零戦社交場掲示板</H1></CENTER><hr color=#008000>\n";
   print "TITLE ：\n";
   print "<INPUT TYPE=TEXT NAME=\"TITLE\" VALUE=\"$title\" SIZE=52 MAXLENGTH=50><BR>\n";
   print "NAME  ：\n";
   print "<INPUT TYPE=TEXT NAME=\"NAME\" SIZE=12 MAXLENGTH=10 VALUE=\"$namemail[0]\"><BR>\n";
   print "E-mail：\n";
   print "<INPUT TYPE=TEXT NAME=\"MAIL\" SIZE=50 VALUE=\"$namemail[1]\"><BR>\n";
   print "DATA  ：\n";
   print "<TEXTAREA COLS=80 ROWS=10 NAME=\"DETAIL\"></TEXTAREA><BR>\n";
   print "<CENTER>\n";
   print "<INPUT TYPE=\"hidden\" NAME=\"KBN\" VALUE=\"WRITE\">\n";
   print "<INPUT TYPE=\"hidden\" NAME=\"RES\" VALUE=\"$resnum\">\n";
   print "<INPUT TYPE=\"submit\" VALUE=\"SEND\">　　";
   print "<INPUT TYPE=\"reset\" VALUE=\"CANSEL\"><BR>\n";
   print "$title";
   print "</CENTER>\n";
   print "</FORM>\n";
   print "</BODY></HTML>\n";
}

sub Check_input_rtn {
   if ($F{'TITLE'})  { $title  = $F{'TITLE'};  }
   else              { &Error_rtn(ERR001);     }
   if ($F{'NAME'})   { $name   = $F{'NAME'};   }
   else              { &Error_rtn(ERR002);     }
   if ($F{'MAIL'})   { $mail   = $F{'MAIL'};   }
   else              { &Error_rtn(ERR003);     }
   if ($F{'DETAIL'}) { $detail = $F{'DETAIL'}; }
   else              { &Error_rtn(ERR004);     }


#

# COOKIE no SET.

#

   if (($COOKIE{'InfoBraBBS'} eq "") || ($COOKIE{'InfoBraBBS'} ne $name)) {

      print "Set-Cookie: ";

      print "InfoBraBBS=$name,$mail;";

      print "expires=Thu, 1-Jan-2030 00:00:00 GMT; ";

      print "\n";

   }



}

sub Error_rtn {
   local($errcd) = $_[0];
   print "Content-type: text/html\n\n";
   print "<HTML>\n";
   print "$tmp\n";
   print "<CENTER><H1>エラー</H1>\n";
   print "以下の項目は省略できません！<P>\n";
   if    ($errcd eq 'ERR001') { print "タイトル<BR>\n"; }
   elsif ($errcd eq 'ERR002') { print "氏名<BR>\n";     }
   elsif ($errcd eq 'ERR003') { print "E-mail<BR>\n";   }
   elsif ($errcd eq 'ERR004') { print "内容<BR>\n";     }
   print "[戻る]で戻って内容を確かめて下さい。\n";
   print "</CENTER>\n";
   print "</BODY></HTML>\n";
   exit;
}

sub Get_no_rtn {
   open(NUM,"$nofile");
   $num = <NUM>;
   close(NUM);

   if ($num >= 99999) { $num = "1"; }
   else               { $num++;     }

   open(NUM,">$nofile") || die $!;
   print NUM "$num";
   close(NUM);
}

sub Add_index_rtn {
   open(IDX,"$idxfile") || die $!;
      @idxg = <IDX>;
   close(IDX);

   open(IDX,">$idxfile") || die $!;
      print IDX "$num\t$resnum\t0\t$today\t$title\t$name\t$mail\n";
      foreach $idx (@idxg) {
         if ($resnum != 0) {
            ($a,$b,$c,$d,$e,$f,$g) = split(/\t/,$idx);
            if ($a == $resnum) {
               $c++;
               $idx = "$a\t$b\t$c\t$d\t$e\t$f\t$g";
            }
         }
         print IDX "$idx";
      }
   close(IDX);
}

sub Create_detail_rtn {

    if ($resnum != 0) {

       open(NEW,">>bbsdata/$resnum.html") || die $!;
          print NEW "($num)$title<BR>\n";
          print NEW "Name:$name\n";
          print NEW "&nbsp e-mail:<A HREF=\"mailto:$mail\">$mail</A>\n";
          print NEW "&nbsp Update:$today<BR><BR>\n";
          print NEW "<P>\n<PRE>\n";
          print NEW "$detail</PRE><hr color=#008000>\n";
       close(NEW);

       return;
    }

   open(NEW,">bbsdata/$num.html") || die $!;
      print NEW "<HTML><HEAD><TITLE>($num)$title</TITLE></HEAD>\n";
      print NEW "$tmp\n";
      print NEW "<H2>($num)$title</H2>\n";
      print NEW "<DIV ALIGN=right><A HREF=\"../brabbs.cgi\">[BACK TO BBS INDEX]</A></DIV><BR>\n";

      print NEW "<FORM METHOD=\"POST\" ACTION=\"../brabbs.cgi\">\n";
      print NEW "<INPUT TYPE=\"hidden\" NAME=\"KBN\" VALUE=\"INPUT\">\n";
      print NEW "<INPUT TYPE=\"hidden\" NAME=\"RES\" VALUE=\"$num\">\n";
      print NEW "<DIV ALIGN=right><INPUT TYPE=\"submit\" VALUE=\"RES.\"></DIV></FORM>\n";

      print NEW "<hr color=#008000>Name:$name &nbsp\n";
      print NEW "&nbsp e-mail:<A HREF=\"mailto:$mail\">$mail</A>\n";
      print NEW "&nbsp Update:$today<BR><BR>\n";
      print NEW "<P>\n<PRE>\n";
      print NEW "$detail</PRE><hr color=#008000>\n";

#      print NEW "</BODY>\n</HTML>\n";
   close(NEW);
}

sub Print_LOG {
   print "Content-type:text/html\n\n";
   print "<HTML>\n";
   print "$tmp\n";
   print "<CENTER>\n";
   print "<H1>零戦社交場掲示板</H1>\n";
   print "<FORM METHOD=\"POST\" ACTION=\"brabbs.cgi\">\n";
   print "<INPUT TYPE=\"hidden\" NAME=\"RES\" VALUE=\"0\">\n";
   print "<INPUT TYPE=\"hidden\" NAME=\"KBN\" VALUE=\"INPUT\">\n";
   print "<INPUT TYPE=\"submit\" VALUE=\"NEW POST!\"></FORM>\n";
   print "<TABLE BORDER=\"1\" WIDTH=\"740\">\n";
   print "<TH WIDTH=\"40\">No</TH><TH WIDTH=\"30\">Update</TH>\n";
   print "<TH WIDTH=\"100\">Name</TH><TH WIDTH=\"350\">TITLE</TH>\n";
   print "<TH WIDTH=\"50\">Res.</TH>\n";

   open(IDX,"$idxfile");
      @idxg = <IDX>;
   close(IDX);

   foreach $idx (@idxg) {
      ($num,$resnum,$res,$date,$title,$name,$mail) = split(/\t/,$idx);

         if( $resnum == 0 ) {
            print "<TR><TD ALIGN=right>$num</TD>\n";
            print "<TD><FONT SIZE=2>$date</FONT></TD>\n<TD>$name</TD>\n";
            print "<TD><A HREF=\"bbsdata/$num.html\">$title</A></TD>\n";
            print "<TD ALIGN=right>$res</TD></TR>\n";
         }
   }

   print "</TABLE>\n<BR>";
   print "</CENTER></BODY></HTML>\n";
}
