@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0
SET TMPNAM=%~n0.tmp

REM //--------------------------------------------------------------------------
REM // * Tue Feb 24 21:00:20 JST 2015 Naoyuki Sawa
REM // - dSndSeqC.exe自身がラベルを扱うようになったことに伴い、MkSndSeq.batを変更しました。
REM //   変更前のMkSndSeq.batは、「clip/keep/14_MkSndSeqNo_bat_MkSndSeqNo_awk_削除前保存.20150224」に保存しておきました。
REM // * Wed Feb 25 21:01:46 JST 2015 Naoyuki Sawa
REM // - 環境変数'SNDDEF_BIN'によって、テキスト形式とバイナリ形式の出力を選択できるようにしました。
REM //   環境変数'SNDDEF_BIN'が定義されていなければ、テキスト形式で出力します。出力ファイル=SndDef.h,SndDef.c
REM //   環境変数'SNDDEF_BIN'が定義されていたら、バイナリ形式で出力します。出力ファイル=SndDef.h,%SNDDEF_BIN%
REM // * Sat Feb 28 21:15:39 JST 2015 Naoyuki Sawa
REM //   'cpp.exe'も通すように変更しました。
REM //   スクリプトの中でCプリプロセッサの疑似命令も使えるようになりました。
REM // * Wed Mar 04 00:39:19 JST 2015 Naoyuki Sawa
REM // - 'cpp.exe'の前段に'dpesc5c.exe'を通すように変更しました。
REM //   コメント行の行末のマルチバイト文字の2バイト目が偶然'\'に一致して、Cプリプロセッサが誤って次の行も削除してしまう問題を、
REM //   当バッチファイル自身が回避するようになったので、当バッチファイルを呼び出す処理が明示的に回避する必要は無くなりました。
REM // * Fri Mar 06 21:00:56 JST 2015 Naoyuki Sawa
REM // - '-e'オプションを指定して、エラー発生時にエラーログファイルが生成されるようにしました。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│CALL MkSndDef.bat サウンドシーケンサスクリプト [[サウンドシーケンサスクリプト] ...]
REM //│(サウンドシーケンサスクリプトの書式は、dSndSeqC.exeの説明を参照してください。)

REM //--------------------------------------------------------------------------
REM //□SndDef.hとSndDef.cが既に有れば、確実に削除しておきます。
REM EXIST SndDef.h DEL SndDef.h
REM EXIST SndDef.c DEL SndDef.c

REM //--------------------------------------------------------------------------
REM //□'cpp.exe'を通しているので、LEDシーケンサスクリプト内でCプリプロセッサの疑似命令も使えます。
REM //│'cpp.exe'に'-P'を指定していないので'# 行番号 "ファイル名"'が生成されますが、dLedSeqC.exeがコメントとして無視するので問題ありません。
REM //│'cpp.exe'に'-P'を指定してもしなくても同じ結果になるはずです。
dpesc5c.exe %* | cpp.exe > %TMPNAM%
IF ERRORLEVEL 1 EXIT /B 1

REM //--------------------------------------------------------------------------
REM //□「サウンドシーケンサコンパイラ」を実行します。
REM //環境変数'SNDDEF_BIN'が定義されていなければ、テキスト形式で出力します。
IF "%SNDDEF_BIN%" EQU "" (
  dSndSeqC.exe -e -pSndSeqNo_                %TMPNAM% > SndDef.c
  IF ERRORLEVEL 1 EXIT /B 1
  REM //SndDef.cから、ラベル定義の行を抽出して、SndDef.hを作成します。
  onigsed.exe -n -e "/^#define SndSeqNo_/p" ^
                 -e "/^\(const int TBL_SndSeqNo\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
                 -e "/^\(const unsigned char TBL_SndSeq\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
   < SndDef.c > SndDef.h
  IF ERRORLEVEL 1 EXIT /B 1
REM //環境変数'SNDDEF_BIN'が定義されてたら、バイナリ形式で出力します。
) ELSE (
  dSndSeqC.exe -e -pSndSeqNo_ -o%SNDDEF_BIN% %TMPNAM% > SndDef.h
  IF ERRORLEVEL 1 EXIT /B 1
)
DEL %TMPNAM%
