@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0

REM //--------------------------------------------------------------------------
REM // * Tue Feb 24 21:00:20 JST 2015 Naoyuki Sawa
REM // - dRudSeqC.exe自身がラベルを扱うようになったことに伴い、MkRudDef.batを変更しました。
REM //   変更前のMkRudDef.batは、「clip/keep/15_MkRudDefNo_bat_MkRudDefNo_awk_削除前保存.20150224」に保存しておきました。
REM // * Wed Feb 25 21:01:46 JST 2015 Naoyuki Sawa
REM // - 環境変数'RUDDEF_BIN'によって、テキスト形式とバイナリ形式の出力を選択できるようにしました。
REM //   環境変数'RUDDEF_BIN'が定義されていなければ、テキスト形式で出力します。出力ファイル=RudDef.h,RudDef.c
REM //   環境変数'RUDDEF_BIN'が定義されていたら、バイナリ形式で出力します。出力ファイル=RudDef.h,%RUDDEF_BIN%
REM // * Mon Dec 21 21:46:29 JST 2015 Naoyuki Sawa
REM // - エラーが発生した時に、不完全な最終出力ファイルを確実に削除するようにしました。

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

REM //--------------------------------------------------------------------------
REM //□「パルスモーターの台形制御シーケンサコンパイラ用プリプロセッサ」を実行します。
REM //環境変数'RUDDEF_BIN'が定義されていなければ、テキスト形式で出力します。
IF "%RUDDEF_BIN%" EQU "" (
  CALL dRudSeqP.bat %* > RudDef.c
  IF ERRORLEVEL 1 GOTO L_ERR
  REM //RudDef.cから、ラベル定義の行を抽出して、RudDef.hを作成します。
  onigsed.exe -n -e "/^#define RudSeqNo_/p" ^
                 -e "/^\(const int TBL_RudSeqNo\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
                 -e "/^\(const unsigned short TBL_RudSeq\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
   < RudDef.c > RudDef.h
  IF ERRORLEVEL 1 GOTO L_ERR
REM //環境変数'RUDDEF_BIN'が定義されてたら、バイナリ形式で出力します。
) ELSE (
  CALL dRudSeqP.bat %* > RudDef.h
  IF ERRORLEVEL 1 GOTO L_ERR
)

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

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