#! /usr/local/bin/perl $Cgi_Main = "./jinro.cgi"; $Mode_Name{'01'} = "村人"; $Mode_Name{'05'} = "霊界"; $Mode_Name{'11'} = "人狼"; $Mode_Name{'15'} = "魔界"; $Mode_Name{'40'} = "妖精"; $Mode_Name{'50'} = "天界"; ##################### require './jcode.pl'; @Char_Name = (); @Char_Icon = (); @Msg_Line = (); ##################### Main &SYSIN_TIME; &STDIN_QUERY_STRING; if( $Query_Tbl{'mode'} ){ if( $Query_Tbl{ 'msg' } ne "" ){ &FILEIN_MSG; &FILEOUT_MSG; } print "Location: $Cgi_Main\n\n"; }else{ &FILEIN_MSG; &STDOUT_HTML; } exit(0); ##################### sub FILEIN_MSG { if( open( LOGFILE, "<./msg.txt" ) ){ flock( LOGFILE, 1 ); $line = ; $line =~ s/\r//g; ($Vil_Name, $Vil_Img, $Vil_Css) = split( /<>/, $line); $Day_Count = $Query_Tbl{'day'}; $Day_Count_Max = -1; while($line = ){ $line =~ s/\r//g; ($Line_Day, $Line_Type, $Line_Char_Index, $Line_Time, @data) = split( /<>/, $line); if($Line_Type == 81){ push(@Char_Name, $data[0]); push(@Char_Icon, $data[1]); } if($Day_Count_Max < $Line_Day){ $Day_Count_Max = $Line_Day; } push(@Msg_Line, $line); } if($Day_Count == -1){ $Day_Count = $Day_Count_Max; } close( LOGFILE ); } } ##################### sub STDOUT_HTML { &STDOUT_HEADER; &STDOUT_DAY_LIST( "header" ); for($index = 0 ; $index < @Msg_Line; $index++ ){ ($Line_Day, $Line_Type) = split( /<>/, $Msg_Line[$index]); if($Line_Day == $Day_Count){ if($Line_Type == 80){ &STDOUT_SYS( $Msg_Line[$index] ); }elsif($Line_Type == 81){ &STDOUT_CHAR( $Msg_Line[$index] ); }else{ &STDOUT_MSG( $Msg_Line[$index] ); } } } if($Day_Count == $Day_Count_Max){ &STDOUT_INPUT_FORM( "01" ); &STDOUT_INPUT_FORM( "05" ); &STDOUT_INPUT_FORM( "11" ); &STDOUT_INPUT_FORM( "15" ); &STDOUT_INPUT_FORM( "40" ); &STDOUT_INPUT_FORM( "50" ); } &STDOUT_DAY_LIST( "footer" ); &STDOUT_FOOTER; } ##################### sub STDOUT_HEADER { print "Content-type: text/html\n\n"; print "人狼BBS - $Vil_Name\n"; print "\n"; print "\n"; print "
\n"; print "\"人狼BBS\"
\n"; } ##################### sub STDOUT_FOOTER { print "
\n"; print "\n"; } ##################### sub STDOUT_MSG { ($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time, $Msg_Text) = split( /<>/, @_[0] ); print "
\n"; print "\"$Char_Name[$Msg_Char_Index]\"
\n"; print "
$Char_Name[$Msg_Char_Index] $Mode_Name{$Msg_Type}メッセージ [$Msg_Time]
\n"; print "
$Msg_Text

\n"; print "
\n"; } ##################### sub STDOUT_SYS { ($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time, $Msg_Text) = split( /<>/, @_[0] ); print "
\n"; print "
システムメッセージ [$Msg_Time]
\n"; print "
$Msg_Text

\n"; print "
\n"; } ##################### sub STDOUT_CHAR { ($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time) = split( /<>/, @_[0] ); $Char_Number = $Msg_Char_Index + 1; print "
\n"; print "
システムメッセージ [$Msg_Time]
\n"; print "
$Char_Number番目の村人 $Char_Name[$Msg_Char_Index]

\n"; print "
\n"; } ##################### sub STDOUT_DAY_LIST { print "
\n"; print "
$Vil_Name
\n"; print "
    \n"; for($index = 0; $index <= $Day_Count_Max; $index++){ if($index == $Day_Count){ print "
  • $index日目
  • "; }else{ print "
  • $index日目
  • "; } } print "

\n"; print "
\n"; } ##################### sub STDOUT_INPUT_FORM { print "
\n"; print "\"$Char_Name\"
\n"; print "
$Char_Name[0] $Mode_Name{@_[0]}メッセージ
\n"; print "
\n"; print "\n"; print "
\n"; print "\n"; print "

\n"; print "
\n"; } ##################### sub FILEOUT_MSG { $temp = "$Day_Count_Max<>$Query_Tbl{'mode'}<>0<>$Time_Stamp<>$Query_Tbl{'msg'}\n"; open( LOGFILE, ">>./msg.txt"); flock( LOGFILE, 2 ); print LOGFILE $temp; close( LOGFILE ); } ##################### sub STDIN_QUERY_STRING { if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $query, $ENV{'CONTENT_LENGTH'} ); }else{ $query = $ENV{'QUERY_STRING'}; } $Query_Tbl{'day'} = -1; @pairs = split( /&/, $query ); foreach $pair (@pairs) { local($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge; &jcode'convert(*value,'euc'); $value =~ s/\r\n/\n/g; $value =~ s/\r|\n/\n/g; $value =~ s//>/g; $value =~ s/\"/"/g; $value =~ s/\n/
/g; $Query_Tbl{ $name } = $value; } } #################### sub SYSIN_TIME{ ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $Time_Stamp = sprintf("%02d:%02d", $hour, $min); }