/*****************************************************************************
 * Bison/Flexプログラム部分をテストするための、Windowsアプリケーションの雛型 *
 * □ビルド・実行方法:                                                       *
 * ┃"C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"  *
 * ┃make -f winapp.mk run                                                   *
 *****************************************************************************/
#ifndef __WINAPP_H__
#define __WINAPP_H__
/*{{定型コード:winapp.h======================================================*/
#include <clip.h>
/* y.tab.y */
extern int yynerrs;
#if     (YYDEBUG!=0)
extern int yydebug;
#endif/*(YYDEBUG!=0)*/
int yyparse();
void yyerror(const char* fmt, ...);
/* lex.yy.l */
extern FILE* yyin;
extern FILE* yyout;
extern int yylineno;
int yylex();
void yylex_init(FILE* input_file);
/* winapp.c */
void push_location(const char* path);
void pop_location();
/*}}定型コード:winapp.h======================================================*/
/*---------------------------------------------------------------------------*/
/* グローバル関数宣言 */
int cast_dbl_to_int(double d);
void inst_def(char* lab);
void inst_end();
//{{2017/06/20追加:join命令を追加しました。
void inst_join();
//}}2017/06/20追加:join命令を追加しました。
//{{2017/05/23追加:hide命令を追加しました。
void inst_hide();
//}}2017/05/23追加:hide命令を追加しました。
void inst_repeat(int num);
void inst_wait(int num);
void inst_call(char* lab);
//{{2017/05/13追加:fork命令を追加しました。
void inst_fork();
//}}2017/05/13追加:fork命令を追加しました。
void inst_act(int flush, int num);
//{{2016/09/10追加:actの引数として、演出番号の直接指定だけでなく、演出名も指定出来るようにしました。演出名に対する番号は、当ツールが自動的に割り振ります。
void inst_act_lab(int flush, char* actName);
//}}2016/09/10追加:actの引数として、演出番号の直接指定だけでなく、演出名も指定出来るようにしました。演出名に対する番号は、当ツールが自動的に割り振ります。
//{{2017/03/02追加:actの引数として、演出文字列も指定出来るようにしました。演出番号は当ツールが自動的に割り振り、演出番号と演出文字列の対応はレジストリスクリプトとして出力します。
void inst_act_str(int flush, char* actStr);
//}}2017/03/02追加:actの引数として、演出文字列も指定出来るようにしました。演出番号は当ツールが自動的に割り振り、演出番号と演出文字列の対応はレジストリスクリプトとして出力します。
//{{2017/09/17追加:actとifの引数として、BLOBも指定出来るようにしました。
void inst_act_blob(int flush, char* actName/*NULL可*/, char* actBlob);
//}}2017/09/17追加:actとifの引数として、BLOBも指定出来るようにしました。
//{{2017/09/03追加:if命令を追加しました。
void inst_if(int num);
void inst_if_lab(char* cndName);
void inst_if_str(char* cndStr);
//}}2017/09/03追加:if命令を追加しました。
//{{2017/09/17追加:actとifの引数として、BLOBも指定出来るようにしました。
void inst_if_blob(char* cndName/*NULL可*/, char* cndBlob);
//}}2017/09/17追加:actとifの引数として、BLOBも指定出来るようにしました。
void inst_on(int unlock, char* trig, char* lab, int lock);
/*---------------------------------------------------------------------------*/
/*--- 変更履歴 ---*/
// * Mon Feb 09 23:59:59 JST 2015 Naoyuki Sawa
// - 1st リリース。
// * Tue Feb 10 21:37:28 JST 2015 Naoyuki Sawa
// - 最適化機能を追加しました。
// * Mon Feb 23 21:02:26 JST 2015 Naoyuki Sawa
// - '-o'オプションを追加しました。
//   これまでは、バイナリデータが必要な場合、Cソース形式で出力してからCSrc2Rom.bat等でバイナリ変換していましたが、
//   今後は、当ツールから直接バイナリデータを出力することが出来るようになりました。
// - これまで、1パス目でセマンティクスエラーが発生した時に、継続せずに終了してしまっていました。
//   1パス目の処理を修正し、致命的なエラーが発生した場合(yyparse()!=0)のみ、処理を打ち切るように修正しました。
//   セマンティクスエラー(yynerrs!=0)だけならば、全てのセマンティクスエラーを報告するために、処理を継続します。
// - '.'ローカルラベルの書式を追加しました。NASMのローカルラベルに似た書式です。
//   グローバルラベル定義～グローバルラベル定義の間でのローカルラベルとなります。
// * Mon Feb 23 21:51:49 JST 2015 Naoyuki Sawa
// - 「.」で始まるローカルラベルは、「.」の後が数字で始まっても良い事にしました。   ┬これらのラベルの<例>は、
// - 先行して「`」を書けば、数字で始まるグローバルラベルを定義できるようにしました。┴lex.yy.lを参照してください。
//   このようにした理由は、プログラム固有の都合で、演出番号を数字だけで定義したいケースが有ったからです。
//   具体的には、「12345」という演出番号から「DirTblNo_12345」を生成したいケースが有ったからです。
// - ちなみに「'」でなく「`」にした理由は、もし「'」だとCプリプロセッサを併用した場合に閉じていない文字と見なされてエラーになるからです。
// * Mon Mar 02 21:47:20 JST 2015 Naoyuki Sawa
// - TBL_DirTblNo[0]に(DirTblNo_Max+1)を格納するようにしました。
//   アプリケーションは「TBL_DirSeq=&TBL_DirTblNo[TBL_DirTblNo[0]]」でデータの先頭位置を求められるようになりました。
//   ヘッダファイルを見なくてもバイナリだけを見て処理できるようにするためです。
//   尚、DirTblNo_Maxの定義もこれまで通りヘッダファイルに出力していますので、DirTblNo_Maxもこれまで通り使用可能です。
//   DirTblNo_Maxを使ってデータの先頭位置を求める場合は「TBL_DirSeq=&TBL_DirTblNo[(DirTblNo_Max+1)]」としてください。
// * Fri Mar 06 21:00:56 JST 2015 Naoyuki Sawa
// - '-e'オプションを追加しました。
//   標準エラー出力をリダイレクトすると、進捗表示と混ざって見づらかったので、ログファイルを生成できるようにしました。
// * Sat Oct 10 21:13:38 JST 2015 Naoyuki Sawa
// - '~'演算子を対応しました。
// * Thu Oct 15 21:01:52 JST 2015 Naoyuki Sawa
// - '-n'オプションを追加しました。
//   詳細は、/clip/tool/dLotTblC/winapp.h の同日のコメントを参照して下さい。
// * Fri Oct 16 21:16:43 JST 2015 Naoyuki Sawa
// - clipstr.hのstrnatcmp(),strnatcasecmp()の動作を変更した事に伴い、当ツールをリビルドしました。
//   上記の関数の動作変更は、当ツールの使用方法では影響無いのですが、念のためにリビルドする事にしました。
// * Sat Nov 14 21:55:38 JST 2015 Naoyuki Sawa
// - 「Boehm GC」をマルチスレッド対応にした事,及び,それに伴ってclipbpe.cモジュールを修正した事に伴い、当ツールもプロジェクト設定の変更を行ってリビルドしました。
//   詳細は、/clip/tool/gc/README.TXT と /clip/clipbpe.c の2015/11/03のコメントを参照して下さい。
// - ゼロ除算エラーと、範囲外ビットシフトのハンドリングを追加しました。
//   これまでは前者はCPU例外で終了し、後者は無視してしまっていました。今後はエラーと見なします。
// - '%'演算子を対応しました。
// * Fri Nov 20 21:44:18 JST 2015 Naoyuki Sawa
// - 'on'命令のトリガを、これまでは番号で指定していましたが、トリガ名で指定するように変更しました。
//   アプリケーションが、トリガ番号を意識しなくても良い方が、使い易いと思ったからです。
//   今後は、アプリケーションがトリガ番号を決めるのでなく、当ツールがトリガ名に対してトリガ番号を割り当てます。
//   この変更に伴い、標準出力にトリガ番号の出力を追加しました。プレフィクスは'DirTrg_'固定です。
// - '-nl',-nt'オプションを追加しました。
//   ラベル名とトリガ名のソート方法を個別に変更したい場合は、'-n'の代りに、これらのオプションを使用して下さい。
// * Sun Nov 22 21:02:41 JST 2015 Naoyuki Sawa
// - 環境変数'プログラム名_OPTION'で指定されたオプション(有れば)を、コマンドライン引数にマージするようにしました。
//   詳細は、/clip/clipmisc.c の同日のコメントを参照して下さい。
// - GCに'-DLARGE_CONFIG'を付けてリビルドした事に伴い、当アプリケーションもリビルドしました。
//   詳細は、/clip/tool/gc/README.TXT の同日のコメントを参照して下さい。
// * Sat Jan 02 21:26:28 JST 2016 Naoyuki Sawa
// - '<<','>>'と'<','>'に対して、これまでlex.yy.lがどちらも'<','>'を返していましたが、前者についてはT_SHL,T_SHRを返すようにして区別しました。
//   詳細は、/clip/tool/dPrpTblC/winapp.h の2015/12/27のコメントを参照して下さい。
// * Sun Jan 03 21:17:56 JST 2016 Naoyuki Sawa
// - プレフィクス文字列を固定にしました。
//   これまで使って来てプレフィクス文字列を変更する必要性が無く、毎回'-p'オプションを指定する事が却って手間になる事が判ったからです。
//   この変更に伴い、'-p'オプションを廃止しました。
// * Sun Feb 21 21:02:01 JST 2016 Naoyuki Sawa
// - libclipのライブラリ化の伴い、以下の変更を行いました。
//   ・extclip.hとextclip.cを削除しました。extclip.hとextclip.cはlibclipに含まれるようになったからです。
//   ・"CLiP Files"を削除しました。CLiPライブラリの各モジュールはlibclipに含まれるようになったからです。
//   当ツールの動作には変更有りません。
// * Tue Mar 01 21:34:55 JST 2016 Naoyuki Sawa
// - clipstd.hにてC4131の警告レベルを引き上げましたが、Bison/Flexの生成コードには旧スタイルの宣言が使われているので、Bison/Flexの生成コードのみ警告レベルを元に戻しました。
// * Sun Apr 24 21:05:43 JST 2016 Naoyuki Sawa
// - 2016/04/23に、/clip/clipstd.hにparsonとLibYAMLのインクルードを追加した事に伴い、当プロジェクトにもparsonとLibYAMLのインクルードパスとライブラリパスの設定を追加しました。
//   当プロジェクトはparsonもLibYAMLも使用していませんが、インクルードパスとライブラリパスの設定を追加しないとビルドエラーになるからです。
// - libclip.lib,gc.lib,pthreadVC2(d).lib,sqlite.lib,pdcurses.libのリンク指定を、/clip/libclip/extclip.hで指定するようにし、個別のアプリケーション設定からは削除しました。
//   parson.lib,yaml.libのリンク指定を、/clip/clipstd.hで指定するようにし、個別のアプリケーション設定からは削除しました。
// * Mon Apr 25 22:45:55 JST 2016 Naoyuki Sawa
// - 実数の計算式に対応しました。
//   暗黙の型変換のルールは、C言語と同じです。
//   キャスト演算子は、'(int)'と'(double)'のみ対応しています。
// - あくまでも途中計算で実数の計算式が使えるだけであり、最終的には整数にキャストする必要が有る事に注意して下さい。
//   例は、/clip/tool/dTexDefC/winapp.hの同日のコメントを参照して下さい。
// * Tue Apr 26 22:39:26 JST 2016 Naoyuki Sawa
// - 実数の計算式から、整数引数への、暗黙の型変換を対応しました。
//   '-w'オプションを指定しなければ、C言語と同様に、警告無しで処理します。
//   '-w'オプション,又は,'-wcast'オプションを指定すると、暗黙の型変換によって誤差が発生した時のみ警告を表示し、最終的にエラー終了します。
//   C言語と違って、誤差が発生しなかった時は警告を表示しない事に注意して下さい。
// - 上記の変更のために、'-w'オプションを処理する仕組みとして、getsubopt()を導入しました。
//   今後、他の種類の警告を追加する時は、この仕組みを使って警告を追加出来ます。
// * Thu Jun 09 21:26:53 JST 2016 Naoyuki Sawa
// - lex.yy.lにて、数値(T_NUM)の解析を、既存の10進数と16進数に加えて、新しく8進数と2進数も解析出来るようにしました。
// * Sat Jul 02 21:34:21 JST 2016 Naoyuki Sawa
// - 2016/06/14に、/clip/clipstd.hに'#pragma comment(lib, "liblua.lib")'を追加した事に伴い、当プロジェクトにもlibluaのライブラリパスの設定を追加しました。
//   現在の所、当プロジェクトはlibluaを使用していませんが、インクルードパスとライブラリパスの設定を追加しないとビルドエラーになるからです。
//   尚、libluaのインクルードパスは以前から設定していたので、今回、追加したのはlibluaのライブラリパスのみです。
// - 2016/07/01に、/clip/libclip/extclip.hに'#include <sqlite3.h>'と'#pragma comment(lib, "sqlite3.lib")'を追加した事に伴い、当プロジェクトにもsqlite3のインクルードパスとライブラリパスの設定を追加しました。
//   現在の所、当プロジェクトはsqlite3を使用していませんが、インクルードパスとライブラリパスの設定を追加しないとビルドエラーになるからです。
// * Sun Jul 10 11:29:13 JST 2016 Naoyuki Sawa
// - y.tab.yのint_argの文法規則の最後に、「;」が抜けていたミスを修正しました。
//   bison.exeはこのような単純なミスを自動的に補ってくれるので、bison.exeのエラーにもならず、生成したプログラムの動作上も問題無く、これまで気付きませんでした。
//   しかし、間違った記述であった事には違い無いので、修正しておく事にしました。
// * Sat Sep 10 21:46:35 JST 2016 Naoyuki Sawa
// - actの引数として、演出番号の直接指定だけでなく、演出名も指定出来るようにしました。
//   演出名に対する番号は、当ツールが自動的に割り振ります。
//   この機能を追加した理由は、以下の通りです。
// - これまではactの引数には数値しか指定出来なかったので、まず演出番号を#define等で定義してから、その番号を使って演出シーケンサスクリプトを書く、という手順が必要でした。
//   演出番号が、ムービー番号やサウンド番号等の素材番号ならばそれでも良いのですが、プログラム処理に対する演出指示の場合、それらに一つ一つ演出番号を定義するのは手間が大きいという問題が有りました。
//   そこで、演出番号を#define等で定義しなくても、演出シーケンサスクリプト内でactの引数として直接(#define定義されていない)シンボルを書けば、それを演出名と見なして、当ツールが番号を割り振るようにしました。
//   ムービー番号やサウンド番号等の場合は数値に意味が有るので予め定義しておく必要が有りますが、プログラム処理に対する演出指示ならば番号には意味が無いので当ツールが割り振った一意な番号でも問題無いはずです。
// - これまでどおりの演出番号指定によるactと、今回追加した演出名指定によるactは、併用可能です。
//   ただしその場合、両者の番号は重複する可能性が有る事に注意して下さい。対策方法は、以下の通りです。
//   演出名に対して当ツールが割り振る番号は、2016/09/10現在の実装では、1～65536の範囲となっています。
//   従って、(方法①)ムービー番号やサウンド番号等は65537以上の値としておけば、重複しません。
//   又は別の方法として、(方法②)演出シーケンサのチャネルを分けて、チャネル0はムービー用として演出番号による指定、チャネル1はプログラム用として演出名に対する番号による指定、のように判断する方法も有ります。
//   方法①の方が、番号指定と演出名指定を混在できるので望ましいと思いますが、アプリケーション毎に検討して下さい。
// * Fri Sep 16 21:30:10 JST 2016 Naoyuki Sawa
// - '-q'オプションを追加しました。
//   /clip/test.win/を元にしたプロジェクトで、VC++6.0のカスタムビルドから呼び出された場合に、'\r'による同じ行の重ね書きが上手く認識されず、VC++6.0の出力ペインに進捗表示が多く出過ぎて、その他の重要なエラーが見づらくなってしまう問題を避けるためです。
//   基本的には、VC++6.0のカスタムビルドから呼び出す場合だけに'-q'オプションを使用し、コマンドラインから呼び出す場合はこれまで通り'-q'オプションは指定しなくて構いません。
// * Wed Sep 21 21:20:16 JST 2016 Naoyuki Sawa
// - die(～)で終了していた箇所を、error(EXIT_FAILURE,～)で終了するように変更しました。
//   変更した理由は、以下の通りです。
// - die()は、標準エラー出力がコンソールでなければ、エラーメッセージをメッセージボックスで表示します。
//   通常はそれが望ましい動作なのですが、VC++6.0やVS2015のカスタムビルドとして当ツールを呼び出した場合に、使い辛い問題が生じます。
//   VC++6.0やVS2015は、カスタムビルドとして呼び出すツールの標準エラー出力をリダイレクトして、アウトプットウインドウに表示します。
//   標準エラー出力がコンソールでないので、当ツールはエラー終了する場合に、メッセージボックスを表示します。
//   結果として、カスタムビルドとして呼び出したツールがエラーになると、いちいちメッセージボックスを表示して停止し、使い辛い問題が生じました。
//   元々、die()が標準エラー出力がコンソールでなければエラーメッセージをメッセージボックスで表示するようにした理由は、コマンドプロンプトを持たないウインドウアプリケーションのためであり、
//   当ツールのようなコンソールアプリケーションの標準エラー出力がリダイレクトされた場合にメッセージボックスを表示する必要はあまり有りません。
//   そこで、当ツールがエラー終了する時にdie()を呼び出すのをやめて、error()で終了するように変更する事にしました。
// * Sun Sep 25 21:05:26 JST 2016 Naoyuki Sawa
// - /clip/test.win/lex.yy.lの'popen'対応処理を、当ツールのlex.yy.lにマージしました。
//   当ツールの'popen'対応は必須ではないのですが、本日dFsmMapC.exeに上記の変更を行ったついでに当ツールも対応しておく事にしました。
// - エラーメッセージに、現在の行番号だけでなく、現在のファイル名も表示するようにしました。
//   エラーメッセージの形式は、VC++6.0に合わせて、「ファイル名(行番号) : エラーメッセージ」としました。
// * Tue Sep 27 21:08:22 JST 2016 Naoyuki Sawa
// - 演出シーケンスのラベルを、標準出力のラベル定義,及び,アドレステーブルに出力しないようにしました。
//   具体的には、以下の通りです。
// - これまでは、ローカルラベルの書式(@@,.～)で定義されたラベル以外は、演出テーブルのラベルも演出シーケンスのラベルも全て出力していました。
//   しかし、実際にアプリケーションから使用するラベルは、演出テーブルのラベルだけであり、演出シーケンスのラベルは不要でした。
//   演出シーケンスのラベルも定義されていると、アプリケーションからは、演出テーブルのラベルか演出シーケンスのラベルか判断出来ないので、間違ってDirSeqCh_SetTblNo()に演出シーケンスのラベル番号を指定してしまったりして、却ってバグの原因となっていました。
//   本来は、演出テーブルのラベルだけを出力すべきでした。
//   そうなっていなかった理由は、当ツールのy.tab.yは、演出テーブルや演出シーケンスをブロックとして認識しておらず、ラベルが宣言された時点ではどちらのラベルであるかを判断出来なかったためです。
// - 一般的なスクリプトの書き方では、演出テーブルのラベルをグローバルラベルの形式で定義して、演出シーケンスのラベルをローカルラベルの形式で定義すると思うので、これまでの動作でも支障はありませんでした。
//   ＜例1＞
//   │Table1
//   │  on `1on goto .1on
//   │  on `2on goto .2on
//   │end
//   │.1on
//   │  act 101
//   │end
//   │.2on
//   │  act 102
//   │end
//   │Table2
//   │  on `1on goto .1on
//   │  on `2on goto .2on
//   │end
//   │.1on
//   │  act 101
//   │end
//   │.2on
//   │  act 102
//   │end
//   しかし、演出シーケンスをパーツと見なして共通化して、複数の演出テーブルから利用する場合は、演出シーケンスのラベルもグローバルラベルとして定義する必要が有り、演出シーケンスのラベルが出力されてしまう問題が生じました。
//   ＜例2＞
//   │Table1
//   │  on `1on goto Seq1
//   │  on `2on goto Seq2
//   │end
//   │Seq1		#//このラベルは出力したくないのに出力されてしまっていた。
//   │  act 101
//   │end
//   │Seq2		#//このラベルは出力したくないのに出力されてしまっていた。
//   │  act 102
//   │end
//   実は、＜例2＞の場合も、＜例1＞のように書いても、最適化によって同じ演出シーケンスはまとめられるので同じ出力結果になるのですが、手書きで書く場合に同じ演出シーケンスを複数書くことを避けるために、明示的に＜例2＞のように書きたいケースはまま有ります。
// - そこで今回、＜例2＞のように書いた場合に、演出シーケンスのラベルは出力しないように、修正する事にしました。
//   今回の変更点は、output()内のラベルを出力する直前に、演出シーケンスのラベルをテーブルから削除するように変更した事だけですので、エンバグの危険は低いと思います。
//   演出テーブルのラベルであるか演出シーケンスのラベルであるかを判断している方法は、output()内の「TBL_Label[0～(nLabel-1)]から、演出シーケンスのラベルを削除する。」処理のコメントを参照して下さい。
// * Wed Sep 28 21:26:44 JST 2016 Naoyuki Sawa
// - error()の文字列の最後に余計な改行が付いていたのを削除しました。
//   error()は指定された文字列の後に(もし有ればエラー名を挟んで)自動的に改行を出力するので、アプリケーション側で文字列の最後に改行を付けると、文字列とエラー名の間に余計な改行が出力されたり、二回改行してしまう問題が生じていました。
// * Sun Oct 02 21:48:17 JST 2016 Naoyuki Sawa
// - ";"によるマルチステートメントに対応しました。
//   変更箇所は、lex.yy.lの「\n { return T_EOL; }」の上の行に、「";" |」を追加しただけです。
// - マルチステートメント対応が必要になった理由は、主にdDirSeqC.exeのためです。
//   Cプリプロセッサで一つのマクロで複数のact命令を生成する時に、Cプリプロセッサの制限のために複数行に分けられないからです。
//   今回マルチステートメントを対応した事によって、「act ～; act ～; act ～」のように一行で複数のact命令が可能になりました。
//   dDirSeqC.exe以外のツールについては、今すぐにマルチステートメント対応が必要な訳ではないのですが、上述の通り変更箇所は少ないので、他のツールも一緒に変更しておく事にしました。
// * Wed Mar 01 22:47:42 JST 2017 Naoyuki Sawa
// - '-xc','-xcs'オプションを追加しました。
//   詳細は、/clip/tool/dRegTblC/winapp.hの2017/02/27のコメントを参照して下さい。
// * Thu Mar 02 22:09:26 JST 2017 Naoyuki Sawa
// - actの引数として、文字列も指定出来るようにしました。
//   番号は当ツールが自動的に割り振り、番号と文字列の対応はレジストリスクリプトとして出力します。
//   この変更に伴い、'-r'オプションを追加しました。
// - レジストリキーの名前は、"DirAct"とする事にしました。
//   演出名の定義も"#define DirAct_～"で出力していて同じプレフィクスに見えますが、それとは全く関係有りません。
//   演出名の定義はCソース用の定数であるのに対して、演出文字列の定義はレジストリスクリプトのキー名だからです。
//   アプリケーションの処理としては、演出名のDirAct_～の定数をそのまま使い、演出文字列はRegKey_DirAct,及び,fnActに渡された演出番号をキーとしてレジストリデータから文字列を取得します。
//   両方とも'DirAct'という名前にしたのは紛らわしい気もしますが、元々、演出名も演出文字列も、表現方法が異なるだけで目的としては同じであり、同じ'DirAct'という名前にしておく方が意図が伝わり易いと思ってそうしました。
// - ちなみに、いっその事、演出文字列だけでなく、演出名もレジストリスクリプトに出力しておく方が、何かの役に立つかもしれない、と思ったのですが、やっぱりやめる事にしました。
//   演出名はやはり'DirAct_～'というC言語定数として判定すべきであり、うっかり間違えて判定漏れして、演出文字列だと判断してレジストリスクリプトから取得しようとした時に、文字列が取れてしまうと、発見し辛いバグになる恐れが有るからです。
//   □アプリケーションのfnAct関数において、望ましいの処理順序は、以下の通りです。
//   │void fnAct(struct _ST_DirSeq* pDirSeq, int iCh, int ActNo, int bOverFlow) {
//   │  char* actStr;
//   │  switch(ActNo) {
//   │  case 明示的に指定した演出番号X: ～; return;
//   │  case 明示的に指定した演出番号Y: ～; return;
//   │  case DirAct_Foo: ～; return;	//┬上の説明を補足しますと、もし演出名の文字列もレジストリスクリプトに出力してしまうと、これらの演出目の判定が漏れていた時に、この下の演出文字列の処理で演出名をパースしてしまう事になり、偶然正しい演出文字列としてパースされてしまうと、発見し辛いバグになる恐れが有るので、演出名の文字列はレジストリスクリプトに出力しない事にした、という事です。
//   │  case DirAct_Bar: ～; return;	//┘
//   │  }
//   │  actStr = REG_get_string_l(TBL_RegTbl, RegKey_DirAct, ActNo, -1);
//   │  if(actStr) { ～; return; }
//   │  DIE(); //不明な演出番号
//   │}
// - 今回、actの引数として文字列も指定出来るようにした理由は、以下の通りです。
//   actの引数は24ビットに制限されており、あまり多くの情報を持たせる事は出来ませんでした。
//   actの引数を24ビットに制限している理由は、clipdirs.cモジュールにおいて、ST_DirSeq.pActBufに確保する容量を少なくするためで、RAMが少ない組み込み環境でも動作させたい事を考慮すると、actの引数サイズを安易に大きくする事は出来ません。
//   しかし、別の要望として、24ビットには収まらない情報を、演出コマンドとして指定したい事も有りました。
//   例えば、リソースを文字列で指定して再生開始したい場合などです。
//   これまで、大きな情報は、複数のコマンドに分ける等して対応して来ましたが(/clip/test.win/cpp.cppのfnAct()のActHi_set_arg1等を参照して下さい)、文字列で指定するとなるといよいよその方法でも対処出来なくなって来ました。
//   そこで今回、演出シーケンサスクリプトの仕様を追加して、actの引数に文字列を指定出来るようにする事にしました。
//   尚、演出シーケンサの仕様は追加していません。
//   演出シーケンサの観点からは、文字列によるコマンドも、これまで通り、演出番号に見えます。
//   演出番号を使って、レジストリスクリプトから文字列を取り出すのは、アプリケーション定義のfnAct()の役割です。
//   演出シーケンサの仕様は追加していないので、今回の変更に伴う、clipdirs.cモジュールの変更は有りません。
// - 今回、actの引数として文字列も指定出来るようにした事によって、かなり柔軟性は高くなったと思います。
//   たとえば、リソースを文字列で指定して再生開始したい場合は、以下のように指定する事が出来ます。
//   │act "sound play ch(1) beep.wav" #//┐
//   │act "movie play ch(2) demo.avi" #//├これはあくまでも例です。左記の通りに書けばすぐに動く訳では有りません。実際に解釈するのはアプリケーション定義のfnAct()の役割です。
//   │act "movie stop ch(3)"          #//┘
//   しかし、文字列を多用すると、オーバーヘッドが大きかったり(実行時に文字列をパースしてコマンドを解釈する必要が有るので)、バグが発生し易くなる問題が有ります。
//   やはり、できるだけこれまで通り、直接指定した演出番号や、自動的に番号が割り振られる演出名を使って下さい。
//   演出文字列は、どうしても必要な場合だけ使うようにして下さい。
//   特に、処理能力の小さい組み込み環境では、演出文字列は使わない方が良いと思います。
// * Thu Mar 16 23:39:55 JST 2017 Naoyuki Sawa
// - 複数の入力ファイルを指定した時に、最後以外のファイルでエラーが発生した場合、当ツールの終了ステータスが0になっていたバグを修正しました。
//   詳細は、/clip/tool/dEnmDefC/winapp.hの同日のコメントを参照して下さい。
// * Mon May 08 08:35:51 JST 2017 Naoyuki Sawa
// - ライブラリのバグ修正に伴う、ツールのリビルドを行いました。
//   詳細は、clipmisc.cの'Sun May 07 09:13:01 JST 2017 Naoyuki Sawa'のコメントを参照して下さい。
// * Sat May 13 21:44:35 JST 2017 Naoyuki Sawa
// - fork命令を追加しました。
// * Tue May 23 23:35:30 JST 2017 Naoyuki Sawa
// - hide命令を追加しました。
//   詳細は、/clip/clipdirs.cの同日のコメントを参照して下さい。
// * Tue Jun 20 21:14:16 JST 2017 Naoyuki Sawa
// - join命令を追加しました。
//   詳細は、/clip/clipdirs.cの同日のコメントを参照して下さい。
// * Sun Sep 03 23:36:18 JST 2017 Naoyuki Sawa
// - if命令を追加しました。
//   詳細は、/clip/clipdirs.cの同日のコメントを参照して下さい。
// * Sun Sep 17 23:49:48 JST 2017 Naoyuki Sawa
// - actとifの引数として、BLOBも指定出来るようにしました。
//   そうする事にした理由は、以下の通りです。
// - 既に2017/03/02,及び,2017/09/03に、actとifの引数として文字列を指定出来るようにしていました。
//   24ビットの演出番号,及び,条件番号だけでは表現し切れない情報を表現するためにそうしていたのですが、しかし、実行時に文字列をパースしてコマンドを解釈する必要が有り、実行時の負荷が大きいという問題が有りました。(2017/03/02のコメントで書いた通りです。)
//   そこで、実行時の負荷が小さく、多くの情報を格納できる形式として、BLOBも指定出来るようにしました。
//   なお、BLOBを指定出来るようにした事により、敢えて文字列を指定する事はほぼ無くなったと思いますが、一応、文字列を指定する機能もそのまま残してあります。
//   □アプリケーションのfnAct関数において、望ましいの処理順序は、以下の通りです。(fnCnd関数も同様です)
//   │void fnAct(struct _ST_DirSeq* pDirSeq, int iCh, int ActNo, int bOverFlow) {
//   │  char* actStr;
//   │  switch(ActNo) {
//   │  case 明示的に指定した演出番号X: ～; return;
//   │  case 明示的に指定した演出番号Y: ～; return;
//   │  case DirAct_Foo: ～; return;
//   │  case DirAct_Bar: ～; return;
//   │  }
//   │  actStr  = REG_get_string_l(TBL_RegTbl, RegKey_DirAct, ActNo, -1);
//   │  if(actStr ) { ～; return; }
//   │  actBlob = REG_get_blob_l(  TBL_RegTbl, RegKey_DirAct, ActNo, -1);	//┬注目
//   │  if(actBlob) { ～; return; }						//┘
//   │  DIE(); //不明な演出番号
//   │}
// - 現在の所、actとifの引数として指定したBLOBは、当ツール自身では解釈せずにそのままレジストリスクリプトに出力し、dRegTblC.exeにて解釈するようにしています。
//   そのため、最終的に同じ内容になるBLOBが、当ツールでは文字列として判断するので別のBLOBと判断される可能性があり(式の表現や空白など違いのため)、最終的に同じになる演出BLOBや条件BLOBに対して、異なる演出番号や条件番号が割り当てられる可能性が有ります。
//   この問題により、当ツールが本来最適化出来るデータを最適化出来ない場合があり容量の無駄が生じる可能性がありますが、動作上は問題有りません。
// * Thu May 03 23:59:59 JST 2018 Naoyuki Sawa
// - Boehm GCを修正した事に伴い、当ツールもリビルドしました。
//   詳細は、/clip/tool/gc/README.TXTの'Wed May 02 23:59:59 JST 2018 Naoyuki Sawa'のコメントを参照して下さい。
/* バージョン定義 */
#define VERSION "20180503"
/*---------------------------------------------------------------------------*/
#endif/*__WINAPP_H__*/
