さて、HTMLの出力側も整理してみました。
各部分の出力をサブルーチン化して、メインの流れを分かりやすくすると、以下のようになりました。
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;
}まずはヘッダ部を出力、次に日付リストを出力。
それからメッセージデータを一行づつ取り出して、データの日付(Line_Day)が表示する日付(Day_Count)と同じ場合だけ、それをHTMLに整形して出力します。
このとき、Line_Type が80番ならシステムメッセージ、81番ならキャラクターの登場メッセージ、それ以外なら単なる発言としてサブルーチンを呼んでいます。
それが一通り終わったら、表示する日付が現在進行中の日付の場合だけ入力用のフォームを出します。
最後に日付のリストとフッターを出力して終わりですね。
細かな部分で、必要と思われるものは明日以降にまた解説します。