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

REM //--------------------------------------------------------------------------
REM // * Sun Mar 06 21:12:57 JST 2016 Naoyuki Sawa
REM // - 1st リリース。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│CALL MkAnmSeq.bat アニメーションスクリプト [[アニメーションスクリプト] ...]
REM //│(アニメーションスクリプトの書式は、dAnmSeqC.exeの説明を参照してください。)

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

REM //--------------------------------------------------------------------------
REM //□「ステートレスアニメーションシーケンサコンパイラ」を実行します。
REM //環境変数'ANMSEQ_BIN'が定義されていなければ、テキスト形式で出力します。
IF "%ANMSEQ_BIN%" EQU "" (
  dAnmSeqC.exe -e                %TMPNAM% > AnmSeq.c
  IF ERRORLEVEL 1 GOTO L_ERR
  REM //AnmSeq.cから、ラベル定義の行を抽出して、AnmSeq.hを作成します。
  onigsed.exe -n -e "/^#define AnmSeqNo_/p" ^
                 -e "/^#define LedCh_Max/p" ^
                 -e "/^\(const int TBL_AnmSeqNo\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
                 -e "/^\(const int TBL_AnmSeq\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
   < AnmSeq.c > AnmSeq.h
  IF ERRORLEVEL 1 GOTO L_ERR
REM //環境変数'ANMSEQ_BIN'が定義されてたら、バイナリ形式で出力します。
) ELSE (
  dAnmSeqC.exe -e -o%ANMSEQ_BIN% %TMPNAM% > AnmSeq.h
  IF ERRORLEVEL 1 GOTO L_ERR
)
DEL %TMPNAM%

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

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