@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0
SET PHRASEMAPINFO_CSV=PhraseMapInfo.csv

REM //--------------------------------------------------------------------------
REM // * Thu Sep 22 21:45:22 JST 2016 Naoyuki Sawa
REM // - 1st リリース。
REM //   XmpPmiCnv.awkを直接実行せずに、XmpPmiCnv.batから呼び出して使用して下さい。
REM // - YAMAHA AS-XMP-1で生成したPhraseMapInfo.csvを読み込んで、以下のファイルを出力します。
REM //   ・EnmXmpPmi.txt … フレーズ番号の列挙定義スクリプト
REM //   ・RegXmpPmi.txt … フレーズ情報のレジストリスクリプト
REM // - 動作確認に使用したツールのバージョンは、以下の通りです。
REM //   │YAMAHA AS-XMP-1 Version 5.6.1 (SCCビルド番号 0.0.6.8)
REM //   │GNU Awk 3.1.7(windows special Nov 24 2009)
REM // * Sat Oct 08 21:12:48 JST 2016 Naoyuki Sawa
REM // - '-x'オプションを追加しました。
REM //   '-x'オプションが指定されていたら、音源ICのフレーズ番号を直接のPhrNo列挙値とせずに、レジストリから取得する形式のデータを生成します。
REM //   この目的は、PC用アプリと共通化するために、PC用アプリで定義した1ベースのPhrNo列挙値から、間接的にフレーズ番号を取得するためです。
REM //   'clip/test.win/snd/RegPhrDef.txt'で定義されるPhrDefのPathとNextに加えて、当ツールが出力するRegXmpPmi.txtのNoとTimeフィールドがマージされます。
REM //   '-x'オプションを指定した場合、PhrNo列挙値はPC用の'clip/test.win/snd/EnmPhrDef.txt'から生成した列挙定義データを使用して下さい。
REM // - 今回の変更は、当バッチスクリプト(XmpPmiCnv.bat)のみの変更です。
REM //   Awkスクリプト(XmpPmiCnv.awk)は変更していません。
REM // * Wed Feb 01 21:56:57 JST 2017 Naoyuki Sawa
REM // - '-x'オプションのsedコマンドの二行目を、以下のように修正しました。
REM //   ×修正前「-e "s/^\t\t#\/\/\([_[:alnum:]]\+\)$/\t\tPhrNo_\1/" ^」
REM //   〇修正後「-e "s/^\t\t#\/\/\([_[:alnum:]]\+\)$/\t\tPhrNo_\U\1\E/" ^」
REM //   修正した理由は、以下の通りです。
REM // - 修正前のコマンドだと、元のwavファイルのファイル名が小文字の時に、意図したレジストリデータが生成されない問題が生じていました。
REM //   '-x'オプションによって生成されるレジストリスクリプト内のキー名が、「PhrNo_filename」のようになってしまっていたからです。
REM //   dPhrDefC.exeによってラベル名は大文字化されるので「PhrNo_FILENAME」となっており、RegTbl.txtにて当スクリプトで生成したレジストリスクリプトをEnmDef.hよりも後に読み込んでも、キー名が一致しないため数値への置き換えが行われていませんでした。
REM //   そのため、当スクリプトが生成した「PhrNo_filename」のようなラベルがそのまま新たなキー名として定義されてしまい、意図したレジストリデータが生成されない問題が生じていました。
REM //   今回の修正によって、当スクリプトが生成するレジストリスクリプトも、「PhrNo_FILENAME」のように大文字になり、RegTbl.txtに読み込んだ際に正しく数値に変換され、意図した通りのレジストリデータが生成されるようになりました。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│CALL XmpPmiCnv.bat    [PhraseMapInfo.csv]
REM //│又は
REM //│CALL XmpPmiCnv.bat -x [PhraseMapInfo.csv]				//{{2016/10/08追加:'-x'オプションを追加しました。}}

REM //{{2016/10/08追加:'-x'オプションを追加しました。
REM //--------------------------------------------------------------------------
REM //'-x'オプションが指定されていたら、OPT_X変数を空文字以外に設定する。
SET OPT_X=
IF "%1" EQU "-x" (
  SET OPT_X=1
  REM //%0はそのままで、%1以降を一つ前へずらす。
  SHIFT /1
)
REM //}}2016/10/08追加:'-x'オプションを追加しました。

REM //--------------------------------------------------------------------------
REM //コマンドライン引数でPhraseMapInfo.csvのパス名が指定されたら、それを使う。
REM //コマンドライン引数が指定されていなければ、デフォルトのパス名のままとする。
IF "%1" NEQ "" (
  SET PHRASEMAPINFO_CSV=%1
)

REM //--------------------------------------------------------------------------
REM //PhraseMapInfo.csvは、"〜"で囲まれた','を含むCSV形式なので、まずdpcsvcc.exeで変換する。
REM //その後、XmpPmiCnv.awkで読み込んで、EnmXmpPmi.txtとRegXmpPmi.txtを生成する。
pipefail.exe -q dpcsvcc.exe -c "%PHRASEMAPINFO_CSV%" ^
             ^| gawk --re-interval -f %BATDIR%XmpPmiCnv.awk
IF ERRORLEVEL 1 GOTO L_ERR

REM //{{2016/10/08追加:'-x'オプションを追加しました。
REM //--------------------------------------------------------------------------
REM //'-x'オプションが指定されていたら、音源ICのフレーズ番号を直接のPhrNo列挙値とせずに、レジストリから取得する形式のデータを生成します。
REM // - この目的は、PC用アプリと共通化するために、PC用アプリで定義した1ベースのPhrNo列挙値から、間接的にフレーズ番号を取得するためです。
REM //   'clip/test.win/snd/RegPhrDef.txt'で定義されるPhrDefのPathとNextに加えて、当ツールが出力するRegXmpPmi.txtのNoとTimeフィールドがマージされます。
IF "%OPT_X%" NEQ "" (
  REM //'EnmXmpPmi.txt'は使わないので削除する。
  REM // - '-x'オプションを指定した場合、PhrNo列挙値はPC用の'clip/test.win/snd/EnmPhrDef.txt'から生成した列挙定義データを使用して下さい。
  DEL EnmXmpPmi.txt
  REM //'RegXmpPmi.txt'のデータ形式を変換する。
  IF EXIST RegXmpPmi.txt~ DEL RegXmpPmi.txt~
  onigsed.exe -e "s/^PhrNo$/PhrDef/" ^
              -e "s/^\t\t#\/\/\([_[:alnum:]]\+\)$/\t\tPhrNo_\U\1\E/" ^
              -e "s/^\t\t\([[:digit:]]\+\)$/\t\t\t\tNo\t\t= \1/" ^
              -i~ RegXmpPmi.txt
  IF ERRORLEVEL 1 GOTO L_ERR
  IF EXIST RegXmpPmi.txt~ DEL RegXmpPmi.txt~
)
REM //}}2016/10/08追加:'-x'オプションを追加しました。

REM //--------------------------------------------------------------------------
REM //ECHO 完了しました。
REM //PAUSE
EXIT /B

REM //--------------------------------------------------------------------------
:L_ERR
REM //□不完全な最終出力ファイルを確実に削除します。
IF EXIST EnmXmpPmi.txt DEL EnmXmpPmi.txt
IF EXIST RegXmpPmi.txt DEL RegXmpPmi.txt
ECHO ###エラーが発生しました。
REM //PAUSE
EXIT /B 1
