#!/usr/bin/perl

#

# all right reserved by KCEJ 1999-2001

#

# Programmed by T.Morita

#





require "config.pl" ;

require "prnt.pl" ;



#Flush the buffer immeadiatly

$| = 1 ;



open( PID, ">$pidfile" ) ;

printf( PID "%d\n", getpgrp ) ;

close PID ;

$SIG{HUP} = sub { &main_loop() } ;



#&main_loop() ;



while( 1 )

{

    sleep ;

}

exit( 0 ) ;





sub main_loop

{

    while( ! &prnt'invoke( $lockfile, $fixupfile ) ) {}



    $logfile = $date = substr( localtime, 4) ;

    $logfile =~ s/[ ]+[0-9]+ [0-9]+:[0-9]+:[0-9]+ // ;

    $logfile = $logdir."/fix".$logfile ;



    $errfile = substr( localtime, 4) ;

    $errfile =~ s/[0-9]+:[0-9]+:[0-9]+ // ;

    $errfile =~ s/[ ]+/_/g ;

    $errfile = $logdir."/err/".$errfile ;

    $errflag = 0 ;



    undef( %check_scn ) ;



    &append( $logfile   , substr( localtime, 4)." Fixup ȯư\n" ) ;

    &append( $reportfile, substr( localtime, 4)." Fixup ȯư\n" ) ;

    open( ENT ,$fixupfile ) ;

    chop( $dest_dir=<ENT> ) ;

    chop( $rest    =<ENT> ) ;

    foreach $ent ( <ENT> )

    {

        &fork( "echo '$ent' > $err_tmpfile" ) ;



	$mode = $MODE_FIXED ;

	chop $ent ;

	&append( $reportfile, substr( localtime, 4)." Fixupϡ$ent $dest_dir ˹\n" ) ;

	&append( $reportfile, "̤եοϡߤΤޤ$restĤǤ\n" ) ;

	&append( $logfile   , substr( localtime, 4)." Fixupϡ$ent $dest_dir ˹\n" ) ;

	&convert( $ent ) ;

	if ( $mode eq $MODE_ABORT )

	{

	    &renew( $entryfile, "<OPTION>[Err]$ent</OPTION>\n", "<OPTION>$ent<" ) if ( $dest_dir eq $fix_dir  );

	    &renew( $tentryfile,"<OPTION>[Err]$ent</OPTION>\n", "<OPTION>$ent<" ) if ( $dest_dir eq $temp_dir );



            &fork( "echo '-----------------------------------------------------------' >> $errfile" ) ;

            &fork( "echo '---------Error occur on $date Start---------' >> $errfile" ) ;

            &fork( "cat $err_tmpfile >> $errfile" ) ;

            &fork( "echo '---------Error occur on $date End  ---------' >> $errfile" ) ;

            &fork( "echo '-----------------------------------------------------------' >> $errfile" ) ;

	}

        unlink( $err_tmpfile ) ;

	&bbs_renew( $ent, $mode ) ;

	$rest-- ;

    }

    close ENT ;

    unlink( $reportfile ) ;

    &append( $logfile, substr( localtime, 4)." Fixup \n" ) ;

    &prnt'unlock( $fixupfile ) ;

    &prnt'unlock( $lockfile ) ;

}







#######################################################################################

#

# Main Subroutines 

#

#



sub convert

{

    local ( $file ) = @_ ;

    local $flag, $dest_d ;

    local $line, $num, $cmd ;



    $dest_d = $file ;

    $dest_d =~ s/\/[^\/]*$//g ;

    &fork( "mkdir -p $dest_dir/$dest_d" ) if ( !-e "$dest_dir/$dest_d" ) ;

    &fork( "mkdir -p $temp_dir/$dest_d" ) if ( !-e "$temp_dir/$dest_d" && $dest_dir eq $fix_dir ) ;

    #&fork( "rm -rf /tmp/*" ) ;



  BRANCH:

    {

	&com_mdl( $file, $dest_d ), last BRANCH if ( $file =~ /\.mdl$/ ) ;

	&com_mar( $file, $dest_d ), last BRANCH if ( $file =~ /\.mar$/ ) ;

	&com_mtn( $file, $dest_d ), last BRANCH if ( $file =~ /\.mtn$/ ) ;

	&com_tex( $file, $dest_d ), last BRANCH if ( $file =~ /\.(pic|bmp)$/ ) ;

	&com_scn( $file, $dest_d ), last BRANCH if ( $file =~ /\.scn$/ ) ;

	&com_inf( $file, $dest_d ), last BRANCH if ( $file =~ /\.inf$/ ) ;

	&com_pcm( $file, $dest_d ), last BRANCH if ( $file =~ /\.pcm$/ ) ;

	&com_wav( $file, $dest_d ), last BRANCH if ( $file =~ /\.wav$/ ) ;

	&com_ipu( $file, $dest_d ), last BRANCH if ( $file =~ /\.ipu$/ ) ;

	&com_l2d( $file, $dest_d ), last BRANCH if ( $file =~ /\.l2d$/ ) ;

	&com_mpv( $file, $dest_d ), last BRANCH if ( $file =~ /\.mpv$/ ) ;

	&com_other( $file, $dest_d ) ;

    }



    &fork( "rm -rf $work_dir/*" ) ;

}





#######################################################################################

# ޥɷ

#

#

#

sub com_mdl()

{

    local ( $file, $dest_d ) = @_ ;

    local $cmd, $rpt, $cv2, $kms ;

    local $dest = $file ;



    $dest =~ s/[-._0-9a-zA-Z]*\///g ;

    $dest =~ s/.mdl$// ;



    $rpt = $runtime_dir."/".$file ;

    $rpt =~ s/.mdl/.rpt/ ;

    $cv2 = $file ;

    $cv2 =~ s/.*\/([^\/]*)/$1/ ;

    $cv2 =~ s/.mdl/.cv2/ ;

    $kms = $file ;

    $kms =~ s/.*\/([^\/]*)/$1/ ;

    $kms =~ s/.mdl/.kms/ ;

    $cmd = "$mdl2kc $runtime_dir/$file $kms $cv2 -l $work_dir -r $rpt" ;

    &fork( "$cmd >> $err_tmpfile" ) and $mode = $MODE_ABORT ;



    $file =~ s/.mdl$/.kms/ ;

    &fork( "rm -f $dest_dir/$file $temp_dir/$file" ) ;

    if ( -f "$work_dir/$dest.kms" )

    {

	&fork( "cp $work_dir/$dest.kms $dest_dir/$file" ) ;

	&fork( "cp $work_dir/$dest.kms $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    }

    $file =~ s/.kms$/.cv2/ ;

    &fork( "rm -f $dest_dir/$file $temp_dir/$file" ) ;

    if ( -f "$work_dir/$dest.cv2" )

    {

	&fork( "cp $work_dir/$dest.cv2 $dest_dir/$file" ) ;

	&fork( "cp $work_dir/$dest.cv2 $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    }

    $file =~ s/.cv2$/.evm/ ;

    &fork( "rm -f $dest_dir/$file $temp_dir/$file" ) ;

    if ( -f "$work_dir/$dest.evm" )

    {

	&fork( "cp $work_dir/$dest.evm $dest_dir/$file" ) ;

	&fork( "cp $work_dir/$dest.evm $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    }

    $file =~ s/.evm$/.dar/ ;

    $flag = 1 ;

    open( LST, "ls $work_dir/*.bmp |" ) ;

    while( <LST> )

    {

	chop ;

	&fork( "$dar c $dest_dir/$file $_" ) and $mode = $MODE_ABORT if (  $flag ) ;

	&fork( "$dar a $dest_dir/$file $_" ) and $mode = $MODE_ABORT if ( !$flag ) ;

	$flag = 0 ;

    }

    close LST ;

    if ( -f "$dest_dir/$file" )

    {

	&fork( "cp $dest_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    }

}



sub com_mar()

{

    local ( $file, $dest_d ) = @_ ;



    &fork( "cp $runtime_dir/$file $dest_dir/$file" ) ;

    &fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    $file =~ s/.mar$/.h/ ;

    &fork( "cp $runtime_dir/$file $dest_dir/$file" ) ;

    &fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

}



sub com_mtn()

{

    local ( $file, $dest_d ) = @_ ;



    if ( $file =~ m/^mtn/ )

    {

	if ( $file !~ m/^mtn\/demo/ )

	{

	    &fork( "$mtn_conv -i $runtime_dir/$file -d $dest_dir/$dest_d/ >> $err_tmpfile" ) and $mode=$MODE_ABORT ;

	    &fork( "$mtn_conv -i $runtime_dir/$file -d $temp_dir/$dest_d/ >> $err_tmpfile" ) if ( $dest_dir eq $fix_dir ) ;

	}

    }

    else

    {

	print "make_mst $file \n" ;

	&make_mst( $file, $dest_d ) ;

    }

}



sub com_tex()

{

    local ( $file, $dest_d ) = @_ ;



    &fork( "$texconv -l$dest_dir/$dest_d $runtime_dir/$file >> $err_tmpfile" ) and $mode=$MODE_ABORT ;

    &fork( "$texconv -l$temp_dir/$dest_d $runtime_dir/$file" )

}



sub com_scn()

{

    local ( $file, $dest_d ) = @_ ;

    local $cmd, $base, $ext ;



    $base = $file ;

    $base =~ s/.*\/([^\/]+)\.scn$/$1/ ;

    $base =~ s/([^_]+)_[a-zA-Z0-9]+$/$1/ ;



    if ( ! $check_scn{$base} )

    {

	$check_scn{$base} = 1 ;

	if ( -f "$runtime_dir/scn/$base.scn" )

	{

	    $cmd = "$mergescene -o $work_dir/$base.scn -i $runtime_dir/scn/$base.scn " ;

	    

	    $_ = "$runtime_dir/$file\n" ;

	    open( LST, "ls $runtime_dir/scn/$base*.scn |" ) ;

	    while( <LST> )

	    {

		chop ;



		$ext = $_ ;

		$ext =~ s/.*\/([^\/]+)\.scn$/$1/ ;

		$ext  =~ s/[^_]+_([a-zA-Z0-9]+)$/$1/ ;



		$cmd .= "-h $_ -f $_ " if ( $ext =~ /^b/ ) ;

		$cmd .= "-h $_ " if ( $ext =~ /^r/ ) ;

		$cmd .= "-r $_ " if ( $ext =~ /^c/ ) ;

	    }

	    close( LST ) ;



	    &fork( "$cmd >> $err_tmpfile" ) and $mode=$MODE_ABORT ;

	    &fork( "scn2hzx -i $work_dir/$base.scn -o $work_dir/$base.hzx >> $err_tmpfile" ) and $mode=$MODE_ABORT ; 



	    &fork( "cp $work_dir/$base.hzx $dest_dir/$dest_d/$base.hzx" ) ;

	    &fork( "cp $work_dir/$base.hzx $temp_dir/$dest_d/$base.hzx" ) if ( $dest_dir eq $fix_dir ) ;

	}

	else

	{

	    printf( "Base scn-file missing($base.scn)\n" ) ;

	    $mode = $MODE_ABORT ;

	}

    }

}



sub com_inf()

{

    local ( $file, $dest_d ) = @_ ;

    local $cap = $file ;

    local $pcm = $file ;



    #pcmиѥǡ

    $pcm =~ s/inf/pcm/g ;

    $pcm =~ s/.aif//g ;

    $pcm =~ s/VC/vc/ ;

    if ( -e "$runtime_dir/$pcm" && $dest_d !~ m/sound(\....)?\/demo/ )

    {

	&make_lipsync( $file, $pcm, $dest_d ) ;

    }



    #ǥ쥯ȥ

    $dest_d =~ s/inf/cap/g ;

    &fork( "mkdir -p $fix_dir/$dest_d $temp_dir/$dest_d" ) if ( !-d "$fix_dir/$dest_d" ) ;



    $cap =~ s/inf/cap/g ;

    $cap =~ s/.aif//g ;

    $cap =~ s/VC/vc/ ;

    &fork( "convinf -f /u/develop/mj001b/tools/bin/linux -t /u/develop/mj001b/tools/bin/linux/zen_table -o $dest_dir/$cap $runtime_dir/$file >> $err_tmpfile" ) and $mode = $MODE_ABORT ;

    &fork( "cp $dest_dir/$cap $temp_dir/$cap" ) if ( $dest_dir eq $fix_dir ) ;



    if ( $cap =~ ".eng" )

    {

	$cap =~ s/\.eng/\.pal/g ;

	&fork( "convinf -f /u/develop/mj001b/tools/bin/linux -t /u/develop/mj001b/tools/bin/linux/zen_table -o $dest_dir/$cap $runtime_dir/$file >> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "cp $dest_dir/$cap $temp_dir/$cap" ) if ( $dest_dir eq $fix_dir ) ;

    }

}



sub com_pcm()

{

    local ( $file, $dest_d ) = @_ ;

    local $inf = $file ;



    &fork( "cp $runtime_dir/$file $dest_dir/$file" ) and $mode = $MODE_ABORT ;

    &fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;



    #infиѥǡ

    $inf =~ s/pcm$/aif.inf/ ;

    $inf =~ s/pcm/inf/g ;

    $inf =~ s/vc/VC/ if ( not -e "$runtime_dir/$inf" ) ;

    if ( -e "$runtime_dir/$inf" && $dest_d !~ m/sound\/demo/ )

    {

	&make_lipsync( $inf, $file, $dest_d ) ;

    }



    if ( $file =~ ".eng" )

    {

	$file =~ s/\.eng/\.pal/g ;

	&fork( "cp $runtime_dir/$file $dest_dir/$file" ) and $mode = $MODE_ABORT ;

	&fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    }

}





sub com_wav()

{

    local ( $file, $dest_d ) = @_ ;

    local $inf = $file ;



    &fork( "cp $runtime_dir/$file $dest_dir/$file" ) and $mode = $MODE_ABORT ;

    &fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;



    #infиѥǡ

    &make_lipsync_wav( $file, $dest_d ) ;

}



sub com_ipu()

{

    local ( $file, $dest_d ) = @_ ;



    &fork( "ipu2stream $runtime_dir/$file $work_dir/temp.ist" ) and $mode = $MODE_ABORT ;

    $file =~ s/.ipu$/.ist/ ;

    &fork( "cp $work_dir/temp.ist $dest_dir/$file" ) ;

    &fork( "cp $work_dir/temp.ist $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

}



sub com_l2d()

{

    local ( $file, $dest_d ) = @_ ;

    local $o2d, $src_d ;



    &com_other( $file, $dest_d ) ;



    return ;

    $src_d = $file ;

    $src_d =~ s/\/[^\/]+$// ;



    &fork( "layout2d -o $work_dir $runtime_dir/$file" )      and $mode = $MODE_ABORT ;

    &fork( "makel2ddar -i $runtime_dir/$file -l $runtime_dir/$src_d -d $work_dir" ) and $mode = $MODE_ABORT ;

    $file =~ s/.l2d$/.o2d/ ;

    $o2d = $file ;

    $o2d =~ s/.*\/([^\/]*)$/$1/g ;

    &fork( "cp $work_dir/$o2d $dest_dir/$file" ) ;

    &fork( "cp $work_dir/*.dar $dest_dir/$src_d" ) ;

    &fork( "cp $work_dir/$o2d $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

    &fork( "cp $work_dir/*.dar $temp_dir/$src_d" ) if ( $dest_dir eq $fix_dir ) ;



}





sub com_mpv()

{

    local ( $file, $dest_d ) = @_ ;

    local $dest ;



    $dest = $file ;

    if ( $file =~ "ipu" )

    {

	$dest =~ s/mpv$/ist/ ;

	&fork( "mpv2ist $runtime_dir/$file $dest_dir/$dest >> $err_tmpfile" ) and $mode=$MODE_ABORT ;

	&fork( "cp $fix_dir/$file $temp_dir/$dest" ) if ( $dest_dir eq $fix_dir ) ;

    }

    else

    {

	$dest =~ s/mpv$/sst/ ;

	&fork( "mpv2sst $runtime_dir/$file $dest_dir/$dest >> $err_tmpfile" ) and $mode=$MODE_ABORT ;

	&fork( "cp $fix_dir/$file $temp_dir/$dest" ) if ( $dest_dir eq $fix_dir ) ;

    }

}





sub com_other()

{

    local ( $file, $dest_d ) = @_ ;



    &fork( "cp $runtime_dir/$file $dest_dir/$file" ) and $mode = $MODE_ABORT ;

    &fork( "cp $runtime_dir/$file $temp_dir/$file" ) if ( $dest_dir eq $fix_dir ) ;

}































#######################################################################################

#

#ѤѴ롼

#

#

sub make_lipsync_wav()

{

    local ( $wav, $dest_d ) = @_ ;

    local $vmtn_cmd ;

    local $vsc_cmd = "" ;

    local $name ;



    $vmtn_cmd  = "vmtn -l /u/develop/mj001b/tools/shared/vmtn/" ;

    $vmtn_cmd .= "blend_eng.inf" if ( $dest_d =~ ".eng" || $dest_d =~ ".pal") ;

    $vmtn_cmd .= "blend_jp.inf"  if ( $dest_d !~ ".eng" && $dest_d !~ ".pal" ) ;

    $vmtn_cmd .= " -o $work_dir" ;



#ǼΥǥ쥯ȥ

    &fork( "mkdir -p $runtime_dir/$dest_d" ) if ( !-d "$runtime_dir/$dest_d" ) ;



    $name = $wav ;

    $name =~ s/.*([a-zA-Z][a-zA-Z][a-zA-Z])\.wav$/$1/ ;

    $name = $inf_name{"wav$name"} ;

    $vsc_cmd .= "-F " if ( $name =~ m/F$/ ) ;

    $vsc_cmd .= "-M " if ( $name =~ m/M$/ ) ;

    chop( $name ) ;

    $vmtn_cmd .= " -m /u/develop/mj001b/tools/shared/vmtn/$name.inf" ;





#SEQ

    if ( $vsc_cmd )

    {

	&fork( "vsc $vsc_cmd $runtime_dir/$wav > $work_dir/demo.seq 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "$vmtn_cmd -s $work_dir/demo.seq > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	$name = $wav ;

	$name =~ s/\.wav/\.mtn/ ;

	&fork( "mv $work_dir/*.mtn $runtime_dir/$name" ) ;



	&fork( "$vmtn_cmd:body -s $work_dir/demo.seq > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	$name = $wav ;

	$name =~ s/\.wav/_body\.mtn/ ;

	&fork( "mv $work_dir/*.mtn $runtime_dir/$name" ) ;

    }

    else

    {

	&fork( "echo 'config.pl UNDEF. Please call T.Morita' >> $err_tmpfile" ) ;

	$mode = $MODE_ABORT ;

    }

}







#######################################################################################

#

#ѤѴ롼

#

#

sub make_lipsync()

{

    local ( $inf, $pcm, $dest_d ) = @_ ;

    local $vmtn_cmd ;

    local $vsc_f_cmd = "", $vsc_m_cmd = "" ;

    local $code, $name, $name2 ;

    local $mtn_dest_d = $dest_d ;

    local $mst_dest_d = $dest_d ;

    local $pal_dest_d = $dest_d ;

    local $mst_cmd ;



#ǼΥǥ쥯ȥ

    $mtn_dest_d =~ s/pcm/mtn/ ;

    $mtn_dest_d =~ s/inf/mtn/ ;

    $mst_dest_d =~ s/pcm/mst/ ;

    $mst_dest_d =~ s/inf/mst/ ;

    $pal_dest_d =~ s/pcm/mst/ ;

    $pal_dest_d =~ s/inf/mst/ ;

    $pal_dest_d =~ s/\.eng/\.pal/g ;

    &fork( "mkdir -p $fix_dir/$mst_dest_d $temp_dir/$mst_dest_d" ) if ( !-d "$fix_dir/$mst_dest_d" ) ;

    &fork( "mkdir -p $fix_dir/$pal_dest_d $temp_dir/$pal_dest_d" ) if ( !-d "$fix_dir/$pal_dest_d" ) ;

    &fork( "mkdir -p $runtime_dir/$mtn_dest_d" ) if ( !-d "$runtime_dir/$mtn_dest_d" ) ;



    $vmtn_cmd  = "vmtn -l /u/develop/mj001b/tools/shared/vmtn/" ;

    $vmtn_cmd .= "blend_eng.inf" if ( $mst_dest_d =~ ".eng" || $mst_dest_d =~ ".pal") ;

    $vmtn_cmd .= "blend_jp.inf"  if ( $mst_dest_d !~ ".eng" && $mst_dest_d !~ ".pal" ) ;

    $vmtn_cmd .= " -i $runtime_dir/$inf -o $work_dir" ;



#SEQ

    open( INF, "dumpinf $runtime_dir/$inf | grep 'name:' |" ) ;

    foreach( <INF> )

    {

	chop ;

	s/^name:// ;

	$name = $inf_name{$_} ;

	chop( $name ) ;

	$vmtn_cmd .= " -m /u/develop/mj001b/tools/shared/vmtn/$name.inf" if ( $vmtn_cmd !~ $name ) ;

	$vsc_f_cmd .= "-F " if ( $inf_name{$_} =~ m/F$/ && $vsc_f_cmd !~ "-F" ) ;

	$vsc_m_cmd .= "-M " if ( $inf_name{$_} =~ m/M$/ && $vsc_m_cmd !~ "-M" ) ;



	if ( $name eq "" )

	{

	    &fork( "echo 'config.pl $_ UNDEF. Please call T.Morita' >> $err_tmpfile" ) ;

	    $mode = $MODE_ABORT ;

	    return ;

	}

    }

    close INF ;



    $name = $inf ;

    $name =~ s/.*\/([^\/]+)\.aif\.inf$/$1/g ;

    $name =~ s/VC/vc/ ;

    if ( $vsc_f_cmd )

    {

	&fork( "vsc $vsc_f_cmd $runtime_dir/$pcm > $work_dir/$name.female.seq 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "$vmtn_cmd -s $work_dir/$name.female.seq > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

    }

    if ( $vsc_m_cmd )

    {

	&fork( "vsc $vsc_m_cmd $runtime_dir/$pcm > $work_dir/$name.male.seq  2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "$vmtn_cmd -s $work_dir/$name.male.seq > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

    }

    print( "$vmtn_cmd -s $work_dir/$name.male.seq" )  ;



    $mst_cmd = "mtn2mst -o $dest_dir/$mst_dest_d/$name.mst" ;

    open( LS, "ls $work_dir/*.mtn |" ) ;

    foreach( <LS> )

    {

	chop ;

	$code = $_ ;

	$code =~ s/$name// ;

	$code =~ s/_// ;

	$code =~ s/.*\/([^\/]+)\.mtn$/$1/g ;



	$mst_cmd .= " -i $code $_" ;

	#print( "($code) cp $_ $runtime_dir/$mtn_dest_d/$name$inf_name{$code}.mtn\n" ) ;

	&fork( "cp $_ $runtime_dir/$mtn_dest_d/$name$inf_name{$code}.mtn" ) and $mode = $MODE_ABORT ;

    }

    close( LS ) ;



# MST

    &fork( "$mst_cmd > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

    &fork( "cp $dest_dir/$mst_dest_d/$name.mst $temp_dir/$mst_dest_d/" ) if ( $dest_dir eq $fix_dir ) ;

# PALѤΥԡ

    if ( $mst_dest_d =~ ".eng" )

    {

	$mst_cmd =~ s/\.eng/\.pal/g ;

	&fork( "mtn_util -r 6 $work_dir/ $work_dir/*.mtn" ) and $mode = $MODE_ABORT ;

	&fork( "$mst_cmd -p > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "cp $dest_dir/$pal_dest_d/$name.mst $temp_dir/$pal_dest_d/" ) if ( $dest_dir eq $fix_dir ) ;

    }

}



#######################################################################################

#

# mtn  mst 

#

#

sub make_mst()

{

    local ( $file,  $dest_d ) = @_ ;

    local $code, $name, $name2 ;

    local $mst_file, $mst_cmd ;

    local $pal_dest_d ;

    local %check_mtn ;



    $mst_file = $file ;

    $mst_file =~ s/mtn/mst/g ;

    $mst_file =~ s/(.+)[a-zA-Z][a-zA-Z][a-zA-Z](_b)?.mst$/$1.mst/ ;

    $pal_dest_d = $dest_d ;

    $pal_dest_d =~ s/\.eng/\.pal/g ;

    $mst_cmd = "mtn2mst -o $dest_dir/$mst_file " ;



    # å򥯥ꥢ

    undef( %check_mtn ) ;



    $name = $file ;

    $name =~ s/(_b)?\.mtn$// ;

    $name =~ s/(.+)[a-zA-Z][a-zA-Z][a-zA-Z]$/$1/ ;

    $name =~ s/VC/vc/ ;

    $name =~ s/\/vc/_mod\/vc/  if ( $name !~ m/_mod/ ) ;



    # ޤ_mod

    open( LS, "ls $runtime_dir/$name*.mtn |" ) ;

    foreach( <LS> )

    {

	chop ;

	$code = $_ ;

	$code =~ s/(_b)?\.mtn$// ;

	$code =~ s/.+([a-zA-Z][a-zA-Z][a-zA-Z])$/$1/ ;

	$code = $inf_name{$code} + (/_b\.mtn$/ ? 1 : 0) ;

	$mst_cmd .= " -i $code $_" ;

        $check_mtn{$code} = 1 ;

    }

    close( LS ) ;



    $name =~ s/_mod// ;

    # λĤܤ

    open( LS, "ls $runtime_dir/$name*.mtn |" ) ;

    foreach( <LS> )

    {

	chop ;

	$code = $_ ;

	$code =~ s/(_b)?\.mtn$// ;

	$code =~ s/.+([a-zA-Z][a-zA-Z][a-zA-Z])$/$1/ ;

	$code = $inf_name{$code} + (/_b\.mtn$/ ? 1 : 0) ;

	$mst_cmd .= " -i $code $_" if ( ! $check_mtn{$code} ) ;

    }

    close( LS ) ;



    # ǥ쥯ȥ꤬ʤк

    $dest_d =~ s/mtn/mst/g ;

    &fork( "mkdir -p $fix_dir/$dest_d $temp_dir/$dest_d" ) if ( !-d "$fix_dir/$dest_d" ) ;



    # mstκޥɤȯ

    &fork( "$mst_cmd > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

    &fork( "cp $dest_dir/$mst_file $temp_dir/$mst_file" ) if ( $dest_dir eq $fix_dir ) ;



# PALѤΥԡ

    if ( $mst_file =~ ".eng" )

    {

	$mst_cmd = "mtn2mst -o $dest_dir/$mst_file " ;

	$mst_cmd =~ s/\.eng/\.pal/g ;



	# ǥ쥯ȥ꤬ʤк

	$dest_d =~ s/\.eng/\.pal/g ;

	&fork( "mkdir -p $fix_dir/$dest_d $temp_dir/$dest_d" ) if ( !-d "$fix_dir/$dest_d" ) ;



	# å򥯥ꥢ

	undef( %check_mtn ) ;



	# ޤ_mod

	$name =~ s/\/vc/_mod\/vc/  if ( $name !~ m/_mod/ ) ;

	open( LS, "ls $runtime_dir/$name*.mtn |" ) ;

	foreach( <LS> )

	{

	    chop ;

	    $code = $_ ;

	    $code =~ s/(_b)?\.mtn$// ;

	    $code =~ s/.+([a-zA-Z][a-zA-Z][a-zA-Z])$/$1/ ;

	    $code = $inf_name{$code} + (/_b\.mtn$/ ? 1 : 0) ;

	    $name2 = $_ ;

	    $name2 =~ s/.*\/([^\/]+\.mtn)$/$1/g ;

	    $mst_cmd .= " -i $code $work_dir/$name2" ;

	    &fork( "mtn_util -r 6 $work_dir/ $_" ) and $mode = $MODE_ABORT ;

	    $check_mtn{$code} = 1 ;

	}

	close( LS ) ;



	$name =~ s/_mod// ;

	# λĤܤ

	open( LS, "ls $runtime_dir/$name*.mtn |" ) ;

	foreach( <LS> )

	{

	    chop ;

	    $code = $_ ;

	    $code =~ s/(_b)?\.mtn$// ;

	    $code =~ s/.+([a-zA-Z][a-zA-Z][a-zA-Z])$/$1/ ;

	    $code = $inf_name{$code} + (/_b\.mtn$/ ? 1 : 0) ;

	    if ( ! $check_mtn{$code} )

	    {

		$name2 = $_ ;

		$name2 =~ s/.*\/([^\/]+\.mtn)$/$1/g ;



		$mst_cmd .= " -i $code $work_dir/$name2" ;

		&fork( "mtn_util -r 6 $work_dir/ $_" ) and $mode = $MODE_ABORT ;

	    }

	}

	close( LS ) ;



	# mstκޥɤȯ

	&fork( "$mst_cmd -p > /dev/null 2>> $err_tmpfile" ) and $mode = $MODE_ABORT ;

	&fork( "cp $dest_dir/$mst_file $temp_dir/$mst_file" ) if ( $dest_dir eq $fix_dir ) ;

    }

}













#######################################################################################

#

# Subroutines

#

#

sub bbs_renew()

{

    local ( $file, $gif ) = @_ ;

    local $pos ;



    open( BBS, "+<$bbsfile" ) or print "Can't open BBS!!: $!\n" ;

    while( <BBS> )

    {

	if ( /&file=$file>/ )

	{

	    seek( BBS, $pos, 0 ) ;

	    s/fix\./$gif./ ;

	    print BBS ;

	    last ;

	}

	$pos = tell( BBS ) ;

    }

    close BBS ;

}



sub append

{

    local ($in,$literal) = @_ ;



    open( INOUT, ">>$in" ) ;

    print INOUT $literal ;

    close INOUT ;

}



sub renew

{

    local ( $in, $literal, $except ) = @_ ;

    local $line ;



    open( IN , $in ) ;

    open( OUT, ">$in.out" ) ;

    print OUT $literal ;

    foreach $line ( <IN> )

    {

	print OUT $line if ( $line !~ $except ) ;

    }

    close IN  ;

    close OUT ;

    &fork( "cp $in.out $in" ) ;

}



sub fork

{

    local $pid ;



#    if ( $mode = $MODE_ABORT )

#	return 0 ;



    #ޥɤեƼ¹Ԥ

    unless ( $pid = fork )

    {

        exec( $_[0] ) ;

        exit 0 ;

    }

    waitpid( $pid, 0 ) ;



    #۾ä礽ΥޥɤǤ

    $_[0] =~ s/\/u\/develop\/mj001b\/bin\/linux\/// ;

    print STDERR (localtime)." com($_[0])==>$? [$mode]\n" if ( $? ) ;



    return $? ;

}



