@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0

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

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

REM □「パルスモーターの台形制御シーケンサコンパイラ」を実行します。
REM #{{2014/11/29変更:パルスモーターの台形制御シーケンサコンパイラ用プリプロセッサを使用するように変更しました。
REM #dRudSeqC.exe %* > RudDef.c
REM #↓2014/11/29変更:パルスモーターの台形制御シーケンサコンパイラ用プリプロセッサを使用するように変更しました。
CALL dRudSeqP.bat %* > RudDef.c
REM #}}2014/11/29変更:パルスモーターの台形制御シーケンサコンパイラ用プリプロセッサを使用するように変更しました。
IF ERRORLEVEL 1 EXIT /B 1

REM □RudDef.cから、以下の行を抽出して、RudDef.hを作成します。
REM ・"RudSeq_"で始まるインデクスの定義⇒そのまま出力します。
REM   "RudSeq_"で始まらないインデクスの定義は、スクリプト内部で使用するサブルーチンのローカルシンボルと見なし、RudDef.hには出力しないことにしました。
REM   尚、ローカルシンボルの概念は、当バッチファイル独自の概念であり、dRudSeqC.exeにはローカル/グローバルの区別もシンボルの名前付け規約もありません。
REM ・データ配列の定義⇒データ配列の宣言に変換して出力します。
REM │http://www.gnu.org/software/sed/manual/html_node/Addresses.html
REM │The empty regular expression ‘//’ repeats the last regular expression match (the same holds if the empty regular expression is passed to the s command).
REM │Note that modifiers to regular expressions are evaluated when the regular expression is compiled, thus it is invalid to specify them together with the empty regular expression.
onigsed.exe -n -e "/^#define RudSeq_/p" ^
               -e "/^\(const unsigned short TBL_RudSeq\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
 < RudDef.c > RudDef.h
IF ERRORLEVEL 1 EXIT /B 1
