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

REM //--------------------------------------------------------------------------
REM // * Fri Feb 27 21:32:00 JST 2015 Naoyuki Sawa
REM // - 1st リリース。
REM // - 環境変数'LEDDEF_BIN'によって、テキスト形式とバイナリ形式の出力を選択できるようにしました。
REM //   環境変数'LEDDEF_BIN'が定義されていなければ、テキスト形式で出力します。出力ファイル=LedDef.h,LedDef.c
REM //   環境変数'LEDDEF_BIN'が定義されていたら、バイナリ形式で出力します。出力ファイル=LedDef.h,%LEDDEF_BIN%
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 // * Mon Dec 21 21:46:29 JST 2015 Naoyuki Sawa
REM // - エラーが発生した時に、不完全な最終出力ファイルを確実に削除するようにしました。
REM // * Sun Jan 03 21:17:56 JST 2016 Naoyuki Sawa
REM // - dLedSeqC.exeの'-p'オプションを廃止した事に伴い、当バッチファイルも変更しました。
REM //   詳細は、/clip/tool/dLedSeqC/winapp.h の同日のコメントを参照して下さい。
REM // * Sat Jan 23 21:37:38 JST 2016 Naoyuki Sawa
REM // - パイプライン実行に、pipefail.exeを使用するように変更しました。
REM //   処理内容には、変更は有りません。

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

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

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

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

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