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

REM //--------------------------------------------------------------------------
REM // * Sun Oct 22 23:53:05 JST 2017 Naoyuki Sawa
REM // - 1st リリース。MkDirSeq.batをベースにしました。
REM // * Sat Nov 04 23:56:59 JST 2017 Naoyuki Sawa
REM // - dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
REM //   詳細は、/clip/tool/dSnrSeqC/winapp.h の同日のコメントを参照して下さい。

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

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

REM //--------------------------------------------------------------------------
REM //□「シナリオシーケンサコンパイラ」を実行します。
REM //□環境変数'CSHARP'が定義されていなければ、出力ソースをC言語形式とする。
IF "%CSHARP%" EQU "" (
  REM //環境変数'SNRSEQ_BIN'が定義されていなければ、テキスト形式で出力します。
  IF "%SNRSEQ_BIN%" EQU "" (
REM //{{2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
REM //    dSnrSeqC.exe -e                     %TMPNAM% > SnrSeq.c
REM //↓2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    dSnrSeqC.exe -e -l                     %TMPNAM% > SnrSeq.c
REM //}}2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    IF ERRORLEVEL 1 GOTO L_ERR
    REM //SnrSeq.cから、ラベル定義の行を抽出して、SnrSeq.hを作成します。
    onigsed.exe -n -e "/^#define /p" ^
                   -e "/^\(const int TBL_SnrTblNo\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
     < SnrSeq.c > SnrSeq.h
    IF ERRORLEVEL 1 GOTO L_ERR
  REM //環境変数'SNRSEQ_BIN'が定義されてたら、バイナリ形式で出力します。
  ) ELSE (
REM //{{2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
REM //    dSnrSeqC.exe -e      -o%SNRSEQ_BIN% %TMPNAM% > SnrSeq.h
REM //↓2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    dSnrSeqC.exe -e -l      -o%SNRSEQ_BIN% %TMPNAM% > SnrSeq.h
REM //}}2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    IF ERRORLEVEL 1 GOTO L_ERR
  )
REM //□環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とする。
) ELSE (
  REM //環境変数'SNRSEQ_BIN'が定義されていなければ、テキスト形式で出力します。
  IF "%SNRSEQ_BIN%" EQU "" (
REM //{{2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
REM //    dSnrSeqC.exe -e -xcs                %TMPNAM% > SnrSeq.cs
REM //↓2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    dSnrSeqC.exe -e -l -xcs                %TMPNAM% > SnrSeq.cs
REM //}}2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    IF ERRORLEVEL 1 GOTO L_ERR
    REM //C#形式ではソース一つなので、ラベル定義の行を抽出する処理は不要です。
  REM //環境変数'SNRSEQ_BIN'が定義されてたら、バイナリ形式で出力します。
  ) ELSE (
REM //{{2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
REM //    dSnrSeqC.exe -e -xcs -o%SNRSEQ_BIN% %TMPNAM% > SnrSeq.cs
REM //↓2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    dSnrSeqC.exe -e -l -xcs -o%SNRSEQ_BIN% %TMPNAM% > SnrSeq.cs
REM //}}2017/11/04変更:dSnrSeqC.exeの'-l'オプションを常に指定するようにしました。
    IF ERRORLEVEL 1 GOTO L_ERR
  )
  REM //ConvertCsToH.batを使ってC#形式の出力ソースからC言語形式のヘッダファイルを生成する。
  CALL ConvertCsToH.bat SnrSeq.cs > SnrSeq.h
  IF ERRORLEVEL 1 GOTO L_ERR
)
DEL %TMPNAM%

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

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