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

REM //--------------------------------------------------------------------------
REM // * Thu Sep 24 21:14:20 JST 2015 Naoyuki Sawa
REM // - 1st リリース。MkFsmMap.batをベースにしました。
REM // * Sat Sep 26 20:18:20 JST 2015 Naoyuki Sawa
REM // - TabAlign.batを呼び出して、タブ文字を追加して列幅を揃える処理を追加しました。
REM //   これはレジストリスクリプトを読み易くするためだけであり、必須ではありません。
REM // * Tue Oct 20 21:27:55 JST 2015 Naoyuki Sawa
REM // - TabAlign.batをTabAlign.exeに置き換えた事に伴い、当バッチも変更しました。
REM //   動作結果には変更有りません。
REM // * Mon Dec 21 21:46:29 JST 2015 Naoyuki Sawa
REM // - エラーが発生した時に、不完全な最終出力ファイルを確実に削除するようにしました。
REM // * Sat Jan 23 21:37:38 JST 2016 Naoyuki Sawa
REM // - パイプライン実行に、pipefail.exeを使用するように変更しました。
REM //   処理内容には、変更は有りません。
REM // * Sun Mar 26 22:13:56 JST 2017 Naoyuki Sawa
REM // - 環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とするようにしました。
REM // * Mon Mar 27 22:39:32 JST 2017 Naoyuki Sawa
REM // - 環境変数'CSHARP'が定義された場合に、ConvertCsToH.batを使ってC#形式の出力ソースからC言語形式のヘッダファイルを生成する処理も、当バッチスクリプトに含めました。
REM //   C#プロジェクトでC言語形式のヘッダファイルが必要かどうかは各アプリケーション次第なので、この処理は当バッチスクリプトでなく各アプリケーションのバッチスクリプトに書こうかとも思ったのですが、
REM //   実際の所、他のツールのスクリプトへの入力としてC言語形式のヘッダファイルは大抵必要なので、毎回、各アプリケーションのバッチスクリプトに書く手間を省くために、当バッチスクリプトに含めました。
REM //   不要ならば、各アプリケーションのバッチスクリプトで、当バッチスクリプトを呼び出した後、当バッチスクリプトが生成したC言語形式のヘッダファイルを削除して下さい。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│CALL MkPrpTbl.bat プロパティテーブルスクリプト [[プロパティテーブルスクリプト] ...]
REM //│(プロパティテーブルスクリプトの書式は、dPrpTblC.exeの説明を参照してください。)

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

REM //--------------------------------------------------------------------------
REM //□「プロパティテーブルコンパイラ」を実行します。
REM //{{2017/03/26変更:環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とするようにしました。
REM //dPrpTblC.exe -e -rRegPrpTbl.tmp %TMPNAM% > PrpTbl.h
REM //IF ERRORLEVEL 1 GOTO L_ERR
REM //↓2017/03/26変更:環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とするようにしました。
REM //□環境変数'CSHARP'が定義されていなければ、出力ソースをC言語形式とする。
IF "%CSHARP%" EQU "" (
  dPrpTblC.exe -e      -rRegPrpTbl.tmp %TMPNAM% > PrpTbl.h
  IF ERRORLEVEL 1 GOTO L_ERR
REM //□環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とする。
) ELSE (
  dPrpTblC.exe -e -xcs -rRegPrpTbl.tmp %TMPNAM% > PrpTbl.cs
  IF ERRORLEVEL 1 GOTO L_ERR
  REM //{{2017/03/27追加:環境変数'CSHARP'が定義された場合に、ConvertCsToH.batを使ってC#形式の出力ソースからC言語形式のヘッダファイルを生成する処理も、当バッチスクリプトに含めました。
  CALL ConvertCsToH.bat PrpTbl.cs > PrpTbl.h
  IF ERRORLEVEL 1 GOTO L_ERR
  REM //}}2017/03/27追加:環境変数'CSHARP'が定義された場合に、ConvertCsToH.batを使ってC#形式の出力ソースからC言語形式のヘッダファイルを生成する処理も、当バッチスクリプトに含めました。
)
REM //}}2017/03/26変更:環境変数'CSHARP'が定義されていたら、出力ソースをC#形式とするようにしました。
DEL %TMPNAM%

REM //--------------------------------------------------------------------------
REM //□タブ文字を追加して列幅を揃えます。
TabAlign.exe RegPrpTbl.tmp > RegPrpTbl.txt
IF ERRORLEVEL 1 GOTO L_ERR
DEL RegPrpTbl.tmp

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

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