#!/usr/bin/env perl
#
# dcnote-smil :
#   SMIL ファイルを作成する.
#
# Copyright (C) GFD_Dennou_Club, 2001-.  All rights reserved.
#
#  ●Usage : dcreal-smil.pl
#
# 履歴  2001/04/10 杉山耕一朗
#       2002/11/27 小高正嗣
#       2003/09/06 杉山耕一朗
#       2004/08/16 中神雄一    : 森羅万象学校用に改訂 (RealPix ファイルを作成しない)
#       2006/03/31 森川靖大    : 上記修正を dcreal ツール群に統合
#       2006/04/04 森川靖大    : 設定ファイルの書式変更に伴う修正
#
#   libjcode-pm-perl 必要
######################################################################
#Jcode.pm モジュールの読み込み
use Jcode; 
use File::Basename;

#文字コード設定
$target_code = "euc"; 

# 設定ファイルの読み込み
$CONF = 'dcreal.conf'; 
while (@ARGV) {
    last unless ($ARGV[0] =~ /^-/);
    $_ = shift;                           
    if (/^-c/) { $CONF = shift; next; }; 
    die "unknown option $_";
}
require "$CONF";

#画像用として使える広さを計算
#修正 2004/08/16 
if ($DOUBLE_MOVIE) {
    $WIDTH = $WIDTH_SLIDE + $WIDTH_PERSON; 
    if ($HEIGHT_SLIDE <= $HEIGHT_PERSON) {
	$HEIGHT = $HEIGHT_PERSON ;
    }else{
	$HEIGHT = $HEIGHT_SLIDE ;
    }
} else {
    $WIDTH = $WIDTH_SLIDE;
    $HEIGHT = $HEIGHT_SLIDE;
}

#格納先ディレクトリ定義
$RMDIR = "../$RMDIR"; 
$SMILDIR = "$RMDIR/smi";
$IMGDIR = "$RMDIR/img-real";

#ビデオ資源ディレクトリ作成 & リンク
#スライドビデオ、講演者ビデオの 2 つを用意 : 2004/08/17

unless (-d $RMDIR) {
    mkdir $RMDIR, 0777  ;
    $i = 0; 
    while ($TRT_FILES[$i]) {
	if ($RM_FILES_SLIDE[$i] !~ /^$/){
	    print "cd $RMDIR; ln -s ../$SRC/$RM_FILES_SLIDE[$i] ./ \n";
	    system("cd $RMDIR; ln -s ../$SRC/$RM_FILES_SLIDE[$i] ./");
	}
	if ($RM_FILES_PERSON[$i] !~ /^$/){
	    print "cd $RMDIR; ln -s ../$SRC/$RM_FILES_PERSON[$i] ./ \n";
	    system("cd $RMDIR; ln -s ../$SRC/$RM_FILES_PERSON[$i] ./");
	}
	$i++;
    }
}

#SMIL ファイル格納ディレクトリ作成
mkdir $SMILDIR, 0777  unless -d $SMILDIR ;

#タイミングファイルが存在するか確認
foreach $TRT (@TRT_FILES) {
    unless (-f $TRT) {
	print "  Error: Timing file \"$TRT\" is not found. \n"; 
	exit 1;
    }
}


#タイミングファイルのオープン, 必要な情報の抽出.
$i = 0;
$e = 0;
while (@TRT_FILES[$e]) {
    open (TIMING, "$TRT_FILES[$e]");
    $start[$e] = $i;
    while (<TIMING>) {
	chomp(@_);
	#開始時間, OHP 番号, OHP タイトルを別々に保存
	$_ =~ /([0-9]+:[0-9]+:[0-9]+),(\d+):(.*)/;
	$time[$i] = $1;
	$ohp_num[$i] = $2;
	($code, $nmatch) = getcode($3);
#	print "$code, $nmatch \n"; 
	$ohp_title[$i] = Jcode::convert($3, $target_code, $code); 
	$end[$e] = $i; 
#	print "$time[$i], $ohp_num[$i], $ohp_title[$i] \n"; 
	$i++;
    }
    $e++;
    close (TIMING);
}
#print "@start, @end \n" ;


# SMIL ファイルの作成
$i = 0;
$| = 1; # print 後にフラッシュ
$ret = "";
while ($ohp_num[$i]) {
    #ファイル名の準備
    $num = sprintf("%03d", $ohp_num[$i]);
    
    #既にファイルが存在しない場合のみ SMIL ファイルを作成
    $SMIL = "$SMILDIR/$num.smi";
    
    $e = 0;
    while ($end[$e]) {
	if ($i >= $start[$e]) {
	    $RM_SLIDE = "$RM_FILES_SLIDE[$e]"; 
	    $RM_PERSON = "$RM_FILES_PERSON[$e]"; 
	}
	$e ++;
    }
    unless (-f $SMIL) {
	$ret = "\r" if ($i > 0);
	print "${ret}Making Smil files [$i/$#ohp_num] -> $SMIL";
	print "\n                        :\n" if ($i == 0);
	&print_smi($SMIL, $time[$i], $RM_SLIDE, $RM_PERSON);
    }  
    $i++;
}
print " ... done.\n ";
$| = 0; # デフォルトのバッファリングへ戻す

#print "@ohp_num \n";


print basename($0) . ": Successful \n";

exit 0;

#=======================================================================


# SMIL ファイル作成用サブルーチン
sub print_smi{
    my($smifile, $time, $RM_SLIDE, $RM_PERSON) = @_;
    open (SMIL, ">$smifile");

    #ファイルへの書き出し. 所々変数を代入. 
    if ($DOUBLE_MOVIE) {
	print SMIL <<EOT
<smil>
<head>
  <meta name="title" content="$TITLE_EN"/>
  <meta name="author" content="$NAME_EN"/>
  <meta name="copyright" content="$COPYRIGHT"/>
  <layout>
    <root-layout width="$WIDTH" height="$HEIGHT"/>
    <region id="slide" top="0" left="0" width="$WIDTH_SLIDE" height="$HEIGHT_SLIDE"/>
    <region id="person" top="0" left="$WIDTH_SLIDE" width="$WIDTH_PERSON" height="$HEIGHT_PERSON"/>
  </layout>
</head>
<body>
  <par>
     <seq>
       <video src="../$RM_SLIDE" region="slide" clip-begin="$time"/>
     </seq>
     <seq>
       <video src="../$RM_PERSON" region="person" clip-begin="$time"/>
     </seq>
  </par>
</body>
</smil>
EOT
;
    }else{
	print SMIL <<EOT
<smil>
<head>
  <meta name="title" content="$TITLE_EN"/>
  <meta name="author" content="$NAME_EN"/>
  <meta name="copyright" content="$COPYRIGHT"/>
  <layout>
    <root-layout width="$WIDTH" height="$HEIGHT"/>
    <region id="slide" top="0" left="0" width="$WIDTH" height="$HEIGHT"/>
  </layout>
</head>
<body>
  <par>
     <seq>
       <video src="../$RM_SLIDE" region="slide" clip-begin="$time"/>
     </seq>
  </par>
</body>
</smil>
EOT
;
    }
    close (SMIL);
}
