@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0

REM =====================================================================================================
REM [使い方]
REM   MkProdDef.bat 入力ファイル1.xls 入力ファイル2.xls …
REM [出力ファイル]
REM   ProdDef.h 演出制御データ定義ヘッダファイル
REM   ProdDef.c 演出制御データ定義ソースファイル
REM [例]
REM   MkProdDef.bat ProdDef1.xls ProdDef2.xls
REM   MkProdDef.bat ProdDef*.xls
REM [備考]
REM   - xdoc2txtは、下記のバージョンを使用して、動作確認を行った。
REM     ⇒ xdoc2txt 2.00  (Jan 15 2013)
REM   - エクセルファイルは、xlsx形式でなく、xls形式を使用すること。
REM     xlsx形式をxdoc2txtで変換すると、各行の先頭のタブが無くなることがあった。
REM     原因は不明であるが、xls形式を使用する方が、安全そうである。
REM   - エクセルの中に、文字列式を書いてはいけない。
REM     xdoc2txtの特性(バグ?仕様?)のために、文字列式の後に余分な改行が出力されてしまう。
REM     MkProdDef.awkのエラーになれば良い方で、偶然、エラー無く変換できてしまうと深刻なバグの原因になる。
REM     もしエクセルの中に文字列式を書く必要がある場合は、xdoc2txt以外の方法でcsv変換することを検討せよ。
REM =====================================================================================================
xdoc2txt.exe %* > __tmp__.csv
REM IF ERRORLEVEL 1 GOTO :EOF ⇒ xdoc2txtは、エラー終了してもエラーコードを設定しない問題がある。左記の条件を判断しても無意味なので、行わないことにした。
gawk.exe --re-interval -f %BATDIR%MkProdDef.awk __tmp__.csv ^
 | onigsed.exe -n -e "/{{HEADER/,/}}HEADER/w ProdDef.h" ^
                -e "/{{SOURCE/,/}}SOURCE/w ProdDef.c"
REM IF NOT ERRORLEVEL 1 DEL __tmp__.csv ⇒ 普通の方法では、パイプ前段のERRORLEVELが判断できない。複雑にしたくないので、一時ファイルは消さないことにした。

REM ProdDef.hとProdDef.cの作成途中でエラー中断した場合は、ファイルを削除して、バッチスクリプトをエラー終了します。
IF EXIST ProdDef.h ( grep.exe -q "}}HEADER" ProdDef.h || DEL ProdDef.h )
IF EXIST ProdDef.c ( grep.exe -q "}}SOURCE" ProdDef.c || DEL ProdDef.c )
IF NOT EXIST ProdDef.h EXIT /B 1
IF NOT EXIST ProdDef.c EXIT /B 1
