/*****************************************************************************
 * 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======================================================*/
//-----------------------------------------------------------------------------
//構造体定義
//-----------------------------------------------------------------------------
//数値リスト
typedef struct _ST_ExprList {
	GSList*				sl_Value;		//値のリスト
} ST_ExprList;
ST_ExprList* ExprList_New(int iValue);
ST_ExprList* ExprList_AddValue(ST_ExprList* pExprList, int iValue);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//領域マップ
typedef struct _ST_RgnMap {
	char*				pLabel;			//領域マップラベル
	struct _ST_RgnMapBody*		pRgnMapBody;		//領域マップボディ
	//以下のフィールドは2パス目で格納する。
	int				iRgnMapNo;		//領域マップ番号(1ベース)
} ST_RgnMap;
ST_RgnMap* RgnMap_New(char* pLabel, struct _ST_RgnMapBody* pRgnMapBody);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//領域マップボディ
typedef struct _ST_RgnMapBody {
	ght_hash_table_t*		ht_RgnDef;		//領域定義のハッシュテーブル		要素数(0)には成り得ない。		領域定義ラベルをキーとする。
} ST_RgnMapBody;
ST_RgnMapBody* RgnMapBody_New(struct _ST_RgnDef* pRgnDef);
ST_RgnMapBody* RgnMapBody_AddRgnDef(ST_RgnMapBody* pRgnMapBody, struct _ST_RgnDef* pRgnDef);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//領域定義
typedef struct _ST_RgnDef {
	char*				pLabel;			//領域定義ラベル
	struct _ST_RgnDefBody*		pRgnDefBody;		//領域定義ボディ
} ST_RgnDef;
ST_RgnDef* RgnDef_New(char* pLabel, struct _ST_RgnDefBody* pRgnDefBody);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//領域定義ボディ
typedef struct _ST_RgnDefBody {
	GSList*				sl_RgnFig;		//領域図形のリスト
} ST_RgnDefBody;
ST_RgnDefBody* RgnDefBody_New(struct _ST_RgnFig* pRgnFig);
ST_RgnDefBody* RgnDefBody_AddRgnFig(ST_RgnDefBody* pRgnDefBody, struct _ST_RgnFig* pRgnFig);
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//領域図形
typedef struct _ST_RgnFig {
	int				iRgnFigType;		//領域図形の種類			RgnFigType_*
	ST_ExprList*			pExprList;		//数値リスト
} ST_RgnFig;
ST_RgnFig* RgnFig_New(int iRgnFigType, ST_ExprList* pExprList);
//-----------------------------------------------------------------------------
//定数定義
//-----------------------------------------------------------------------------
#undef  INT24_MIN		//┐
#undef  INT24_MAX		//├念のため確実に未定義としておく。(Microchipのヘッダファイル等では定義されているみたいです。)
#undef  UINT24_MAX		//┘
#define INT24_MIN		(INT32_MIN>>8)
#define INT24_MAX		(INT32_MAX>>8)
#define UINT24_MAX		((int)(UINT32_MAX>>8))	//(int)が必要です。忘れると、int変数との比較の際に、間違ってunsignedで比較してしまう。
//-----------------------------------------------------------------------------
//グローバル関数宣言
//-----------------------------------------------------------------------------
int cast_dbl_to_int(double d);
void addRgnMap(ST_RgnMap* pRgnMap);
//-----------------------------------------------------------------------------
//変更履歴
//-----------------------------------------------------------------------------
// * Tue Apr 25 23:28:44 JST 2017 Naoyuki Sawa
// - 1st リリース。
//   dVslDefCをベースにして作成しました。
// * Mon May 08 08:35:51 JST 2017 Naoyuki Sawa
// - ライブラリのバグ修正に伴う、ツールのリビルドを行いました。
//   詳細は、clipmisc.cの'Sun May 07 09:13:01 JST 2017 Naoyuki Sawa'のコメントを参照して下さい。
// * 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__*/
