さて、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番ならキャラクターの登場メッセージ、それ以外なら単なる発言としてサブルーチンを呼んでいます。
それが一通り終わったら、表示する日付が現在進行中の日付の場合だけ入力用のフォームを出します。
最後に日付のリストとフッターを出力して終わりですね。
細かな部分で、必要と思われるものは明日以降にまた解説します。