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

REM //--------------------------------------------------------------------------
REM // * Mon Feb 16 22:03:21 JST 2015 Naoyuki Sawa
REM // - 1st リリース。
REM // - 抽選表変換ツールを、MkLotTbl.awk⇒dLotTblC.exeへ移行したことに伴い、
REM //   これまではMkLotTbl.awkを呼び出していたMkLotTbl.batを、dLotTblC.exeを呼び出すように変更しました。
REM // - 古いMkLotTbl.batとMkLotTbl.awkは不要になったので、toolフォルダから削除しました。
REM //   しかし、これまで安定して動作していた実績が有り、今後参考にするかも知れないので、
REM //   「keep/11_MkLotTbl_bat_MkLotTbl_awk_削除前保存.20150216/」に保存しておきました。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│MkLotTbl.bat エクセルファイル.xls [エクセルファイル.xls ...]
REM //■使用ソフトバージョン
REM //GNU sed version 4.1.5 with Oniguruma (ver. 2.5.0) Modified for Win32 Japanese by hogemuta@gmail.com Build date Sep 29 2009
REM //GNU Awk 3.1.7 (windows special Nov 24 2009)

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

REM //--------------------------------------------------------------------------
REM //一時フォルダ(MkLotTbl.tmp\)を作成する。既に存在している場合は空にする。
IF NOT EXIST %TMPDIR% MD %TMPDIR%
IF EXIST %TMPDIR%*.csv DEL %TMPDIR%*.csv

REM //--------------------------------------------------------------------------
REM //当バッチスクリプトの引数に指定されたエクセルファイルを全てcsvに変換し、一時フォルダに出力する。
CALL %BATDIR%ExcelSaveAsCsv.bat /D%TMPDIR% %*
IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%

REM //--------------------------------------------------------------------------
REM //一時フォルダ内のcsvを全てCプリプロセッサで処理し、csvに変換した時に付けられた行末の余分な','が有れば削除し、連結して__tmp__.csvに保存する。
REM // - 何故か'FOR'の中だけ'ECHO OFF'が効かない。原因不明。止むを得ず明示的に'@'を付けてcpp.exeのコマンドラインが__tmp__.csvに出力される事を回避した。
REM //   ちなみに別のスクリプトでは'FOR'の中でも'ECHO OFF'が効いたので、必ず起きる問題ではなさそうだ。'ExcelSaveAsCsv.bat'が何か影響しているのだろうか?
REM // - 抽選表ラベルにLotTbl_を自動的に補う事にしました。'id','id(...)'にLotTbl_を補ってしまわないようにするために、少し処理が長くなっています。
(FOR %%i IN (%TMPDIR%*.csv) DO @cpp.exe -include LotSym.h "%%i") ^
 | onigsed.exe -e "s/\([[:blank:]]*,[[:blank:]]*\)*$//" ^
               -e "/^[[:blank:]]*id\b/!{s/^[[:blank:]]*\([_[:alpha:]][_[:alnum:]]*\)/LotTbl_\1/}" ^
 > __tmp__.csv
IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%

REM //--------------------------------------------------------------------------
REM //一時フォルダ(MkLotTbl.tmp\)はもう不要なので、削除する。
RD /S /Q %TMPDIR%

REM //--------------------------------------------------------------------------
REM //抽選テーブルコンパイラを実行する。成功したら、__tmp__.csvはもう不要なので、削除する。
dLotTblC.exe __tmp__.csv > LotTbl.c
IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%
DEL __tmp__.csv

REM //--------------------------------------------------------------------------
REM //LotTbl.cから、アドレス定義の行を抽出して、LotTbl.hを作成します。
onigsed.exe -n -e "/^#define LotTbl_/p" ^
               -e "/^\(const unsigned short TBL_LotTbl\[[1-9][0-9]*\]\)={$/{s//extern \1;/;p}" ^
 < LotTbl.c > LotTbl.h
IF ERRORLEVEL 1 EXIT /B 1
