/*****************************************************************************
 * 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.h======================================================*/
/*---------------------------------------------------------------------------*/
/* グローバル関数宣言 */
void inst_def(char* lab);
void inst_end();
void inst_goto(char* lab);
void inst_call(char* lab);
void inst_repeat(int num);
void inst_speed(int num);
void inst_move_init();
void inst_move_rel(int num);
void inst_move_abs(int num);
void inst_move_stop();
void inst_wait_rel(int num);
void inst_wait_abs(int num);
void inst_wait_stop();
void inst_user(int num);
void inst_move_direct(int num, int if_cond, int until_cond);	/*{{2014/11/28追加:パルスモーターの直接制御を追加したことに伴い、シーケンサの命令セット,命令コード,命令コード定義用マクロを変更しました。}}*/
void inst_if_on();	/*{{2014/12/12追加:条件分岐'if on','if off'を追加したことに伴い、シーケンサの命令セット,命令コード,命令コード定義用マクロを変更しました。}}*/
void inst_if_off();	/*{{2014/12/12追加:条件分岐'if on','if off'を追加したことに伴い、シーケンサの命令セット,命令コード,命令コード定義用マクロを変更しました。}}*/
/*---------------------------------------------------------------------------*/
/*--- 変更履歴 ---*/
// * Wed May 21 21:16:56 JST 2014 Naoyuki Sawa
// - 1st リリース。
// * Tue Feb 24 21:00:20 JST 2015 Naoyuki Sawa
// - '-o'オプションを追加しました。
//   これまでは、バイナリデータが必要な場合、Cソース形式で出力してからCSrc2Rom.bat等でバイナリ変換していましたが、
//   今後は、当ツールから直接バイナリデータを出力することが出来るようになりました。
// - これまで、1パス目でセマンティクスエラーが発生した時に、継続せずに終了してしまっていました。
//   1パス目の処理を修正し、致命的なエラーが発生した場合(yyparse()!=0)のみ、処理を打ち切るように修正しました。
//   セマンティクスエラー(yynerrs!=0)だけならば、全てのセマンティクスエラーを報告するために、処理を継続します。
// - 演算子 /,&,^,|,<<,>> を対応しました。
//   既にdLotTblC.exeとdDirSeqC.exeでそのようにしていたので、dRudSeqC.exeもそれに合わせることにしました。
// - 数値が10進数だけでなく16進数も受け付けるようにしました。
//   既にdLotTblC.exeとdDirSeqC.exeでそのようにしていたので、dRudSeqC.exeもそれに合わせることにしました。
// - 先行して「`」を書けば、数字で始まるラベルを定義できるようにしました。
//   既にdDirSeqC.exeでそのようにしていたので、dRudSeqC.exeもそれに合わせることにしました。
//   このようにした理由は、プログラム固有の都合で、ラベルを数字だけで定義したいケースが有ったからです。
//   具体的には、「12345」というラベルから「SndSeqNo_12345」を生成したいケースが有ったからです。
// * Mon Mar 02 21:47:20 JST 2015 Naoyuki Sawa
// - inst_call()でローカルラベルの処理を行うのを忘れていたバグを修正しました。
//   前バージョンまでは、gotoではローカルラベル参照が使えるが、callではローカルラベル参照が使えないバグがありました。
// - '.'ローカルラベルを対応しました。dLotTblC.exe等と同じなので、詳細はそれらのソースのコメントを参照してください。
// - TBL_RudSeqNo[0]に(RudSeqNo_Max+1)を格納するようにしました。
//   アプリケーションは「TBL_RudSeq=&TBL_RudSeqNo[TBL_RudSeqNo[0]]」でデータの先頭位置を求められるようになりました。
//   ヘッダファイルを見なくてもバイナリだけを見て処理できるようにするためです。
//   尚、RudSeqNo_Maxの定義もこれまで通りヘッダファイルに出力していますので、RudSeqNo_Maxもこれまで通り使用可能です。
//   RudSeqNo_Maxを使ってデータの先頭位置を求める場合は「TBL_RudSeq=&TBL_RudSeqNo[(RudSeqNo_Max+1)]」としてください。
// * Fri Mar 06 21:00:56 JST 2015 Naoyuki Sawa
// - '-e'オプションを追加しました。
//   標準エラー出力をリダイレクトすると、進捗表示と混ざって見づらかったので、ログファイルを生成できるようにしました。
/* バージョン定義 */
#define VERSION "20150306"
/*---------------------------------------------------------------------------*/
#endif/*__WINAPP_H__*/
