#
# nmsld 用 リスト作成
#
#
#
require "perl\\tools.pl";

# 引数取得用
$g_strInputFile  = "";
$g_strOutputFile = "";
$g_strSearchPath = "";

# リスト総数
$slListMax	= 0;

# ベースリスト
@g_mapBaseList = ();
# パスリスト
@g_astrPathList = ();

# 最終リスト
@g_strList = ();

########
# main #
########
{
  print stderr "make list....\n";

  # 引数取得
  $g_strInputFile	= $ARGV[0];
  $g_strOutputFile	= $ARGV[1];
  $g_strSearchPath	= $ARGV[2];

  # ベースリスト読み込み、マップ化
  readBaseList();

  # フォルダサーチしながら、あったら登録
  searchFiles( "*.uva", $g_strSearchPath );

  output();
#  print @g_strList;
}


#######
# sub #
#######
# ベースリスト読み込み、マップ化
sub readBaseList
{
  open(fp,"$g_strInputFile") || die "cannot open file. $g_strInputFile ";
  @astrList = <fp>;
  close(fp);

  local($sNum) = 1;
  foreach $strList (@astrList){
    $strList =~ s/[\n\r\s\t]+//g;
    # //コメントと空白は無視
    if($strList =~ /\/\// || $strList eq '') { next; }
#    push(@g_strBaseList, $strList);
    # リストにも登録
    $g_mapBaseList{ $strList } = $sNum;
    $sNum++;
    $slListMax++;
  }
}


# フォルダ以下のファイルを検索して、コンバート
sub searchFiles
{
  local($strWC) = $_[0];
  local($strPathName) = $_[1];
  local($sDeep) = $_[2];
  if($strPathName eq ''){ $strPathName = "."; }
  if($sDeep eq ''){ $sDeep = 2; }

  local($l_strWC) = '^'.$strWC;
  $l_strWC =~ s/\*/[_A-Za-z0-9]\*/g;
  $l_strWC =~ s/\?/[_A-Za-z0-9]/g;
  $l_strWC =~ s/\./\\\./g;

  opendir(dh,$strPathName);
  local(@strDirNames) = readdir(dh);
  closedir(dh);

  shift(@strDirNames);	# .
  shift(@strDirNames);	# ..

  local($strLocalName) = '';
  foreach $strLocalName (@strDirNames){
    local($strFullName) = $strPathName."\/".$strLocalName;
    if(-d $strFullName){		# ディレクトリ
#      print stderr "\n";
#      print stderr "  $strFullName\n";
      searchFiles($strWC, $strFullName, $sDeep+2);
    }
    elsif(-f $strFullName && $strLocalName =~ /$l_strWC/){		# ファイル
      # TODO: この位置にコードを記述してください。

      # $strFullName  : 絶対パス
      # $strPathName  : 現在のディレクトリのパス
      # $strLocalName : ファイル名

      # uvax除外
      if(!($strLocalName =~ /\.uvax/)){
#        print $strLocalName,"\n";
        @tmp = split(/\./, $strLocalName);
        # 指定のファイルが見つかった
        if( $g_mapBaseList{ $tmp[0] } !=0){
#          push(@g_strList, "-bload $strFullName\n");
          $slNum = $g_mapBaseList{ $tmp[0] };
          $g_astrPathList[$slNum] = "-bload $strFullName\n" ;
          delete $g_mapBaseList{ $tmp[0] };
        }
      }
    }
  }
}


# ファイル出力
sub output()
{
  open(fp,"> $g_strOutputFile") || die "cannot create file. $g_strOutputFile";
  for($i=0; $i<$slListMax; $i++){
    print fp $g_astrPathList[ $i+1 ];
  }
  #  print fp @g_strList;
  close(fp);
}
