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

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 // * Sat Feb 21 13:26:55 JST 2015 Naoyuki Sawa
REM // - dLotTblC.exe自身が抽選表idを扱うようになったことに伴い、MkLotTbl.batを変更しました。
REM //   変更前のMkLotTbl.batは、「clip/keep/12_MkLotTblNo_bat_MkLotTblNo_awk_削除前保存.20150221」に保存しておきました。
REM // * Wed Feb 25 21:01:46 JST 2015 Naoyuki Sawa
REM // - 環境変数'LOTTBL_BIN'によって、テキスト形式とバイナリ形式の出力を選択できるようにしました。
REM //   環境変数'LOTTBL_BIN'が定義されていなければ、テキスト形式で出力します。出力ファイル=LotTbl.h,LotTbl.c
REM //   環境変数'LOTTBL_BIN'が定義されていたら、バイナリ形式で出力します。出力ファイル=LotTbl.h,%LOTTBL_BIN%
REM // * Sun Mar 01 12:04:24 JST 2015 Naoyuki Sawa
REM // - エクセルファイル以外も指定できるようにしました。
REM //   エクセルファイルを指定した場合は、これまでと同様に動作します。
REM // - ただし、引数の最初のファイルだけで判断しているので、エクセルファイルとそれ以外を混在して指定する事は出来ません。
REM // * Wed Mar 04 00:39:19 JST 2015 Naoyuki Sawa
REM // - 'cpp.exe'の前段に'dpesc5c.exe'を通すように変更しました。
REM //   コメント行の行末のマルチバイト文字の2バイト目が偶然'\'に一致して、Cプリプロセッサが誤って次の行も削除してしまう問題を、
REM //   当バッチファイル自身が回避するようになったので、当バッチファイルを呼び出す処理が明示的に回避する必要は無くなりました。
REM // * Fri Mar 06 21:00:56 JST 2015 Naoyuki Sawa
REM // - '-e'オプションを指定して、エラー発生時にエラーログファイルが生成されるようにしました。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│MkLotTbl.bat エクセルファイル.xls [エクセルファイル.xls ...]
REM //│MkLotTbl.bat テキストファイル.csv [テキストファイル.csv ...]
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 //LotSym.hが無ければ、空のファイルとして作成しておきます。
IF NOT EXIST LotSym.h touch.exe LotSym.h

REM //==========================================================================
REM //最初の引数の拡張子の「.(3文字)」の部分を取得する。本当は個々の引数について検査すべきなのだが、簡単のために、全てエクセル,又は,全てエクセル以外だと仮定する事にした。
SET x=%~x1
SET x=%x:~0,4%
REM //最初の引数の拡張子が「.xls*」ならば…
IF /I "%x%" EQU ".xls" (

  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 1
  REM //--------------------------------------------------------------------------
  REM //一時フォルダ内の全てのcsvを、Cプリプロセッサで処理し、csvに変換した時に付けられた行末の余分な','が有れば削除し、連結して一時ファイルに保存する。
  dpesc5c.exe %TMPDIR%*.csv | cpp.exe -include LotSym.h | onigsed.exe -e "s/\([[:blank:]]*,[[:blank:]]*\)*$//" > %TMPNAM%
  IF ERRORLEVEL 1 EXIT /B 1
  REM //--------------------------------------------------------------------------
  REM //一時フォルダ(MkLotTbl.tmp\)はもう不要なので、削除する。
  RD /S /Q %TMPDIR%

REM //最初の引数の拡張子が「.xls*」以外ならば…
) ELSE (

  REM //--------------------------------------------------------------------------
  REM //当バッチスクリプトの引数に指定された全てのファイルを、Cプリプロセッサで処理し、csvに変換した時に付けられた行末の余分な','が有れば削除し、連結して一時ファイルに保存する。
  dpesc5c.exe %*            | cpp.exe -include LotSym.h | onigsed.exe -e "s/\([[:blank:]]*,[[:blank:]]*\)*$//" > %TMPNAM%
  IF ERRORLEVEL 1 EXIT /B 1

)
REM //==========================================================================

REM //--------------------------------------------------------------------------
REM //抽選テーブルコンパイラを実行する。
REM //環境変数'LOTTBL_BIN'が定義されていなければ、テキスト形式で出力します。
IF "%LOTTBL_BIN%" EQU "" (
  dLotTblC.exe -e -pLotTblNo_                %TMPNAM% > LotTbl.c
  IF ERRORLEVEL 1 EXIT /B 1
  REM //LotTbl.cから、抽選表id定義の行を抽出して、LotTbl.hを作成します。
  onigsed.exe -n -e "/^#define LotTblNo_/p" ^
                 -e "/^\(const int TBL_LotTblNo\[[1-9][0-9]*\]\)={$/{s//extern \1;/;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
REM //環境変数'LOTTBL_BIN'が定義されてたら、バイナリ形式で出力します。
) ELSE (
  dLotTblC.exe -e -pLotTblNo_ -o%LOTTBL_BIN% %TMPNAM% > LotTbl.h
  IF ERRORLEVEL 1 EXIT /B 1
)
DEL %TMPNAM%
