//	ＡＩＧライブラリ　変数管理関数(type-2)
//		Copyright (C) 1994-95 by AIG-SOFT

#ifndef	__AIG_VAR__
#define	__AIG_VAR__	1

#include "defines.h"
#include "vserr.h"

#define	DEBUG	0


#define	VTOP2	1	/* 変数格納先頭位置：ハッシュの関係で０は使えない */

typedef struct {	/* 変数エリア１単位構造体 */
	unsint	type;	/* 変数型(BIT15/14は使えない) */
	unchar	*adrs;	/* 変数名アドレス */
	long	num;	/* 数値 */
} VAR1;

typedef struct {	// 変数エリア０単位構造体
	unsint	type;	// 変数型
	long	num;	// 数値
} VAR0;

typedef struct {	/* 変数名格納エリア構造体 */
	unchar	*buff;	/* バッファーアドレス */
	long	size;	/* バッファーサイズ */
	long	point;	/* 格納位置 */
} VARBUFF;

typedef struct { /* 変数管理システム構造体２ */
	VAR1	*vwork;	/* 変数格納エリア */
	short	vwsize;	/* 変数格納エリアサイズ(max 32K個変数) */
	short	vpoint;	/* 新規変数登録位置=登録されている変数の数+1 */
	short	*vhash;	/* ハッシュ格納エリア */
	short	vhsize;	/* ハッシュ格納エリア要素個数 */
	short	vlmax;	/* １変数最大長(<255が有効) */
	unsint	mode;	/* モード */
			/* BIT0=変数名アドレスから格納されているもの */	
			/*      1=len+name+EOS , 0=name+EOS */
	VARBUFF	vnb;	/* 変数名格納エリア（NULLなら使っていない）*/
} VARSYS2;

/* プロトタイプ宣言 */
/* 変数処理系はシステムに内部に関わるため、
	デバッグを強化するためプロトタイプ宣言のみとする */

#ifdef  __cplusplus
// 95/11 : G++対応
extern  "C" {
#endif
	int	VarOpen(short ,short ,unsint ,VARSYS2 *);
	void	VarClose(VARSYS2 *);
	short	VarSearch(unchar *,VARSYS2 *,unsint *);
	short	VarDefine(unchar *,unsint ,VARSYS2 *);
	int	VarNumRead(short ,long *,unsint *,VARSYS2 *);
	short	VarNumWrite(short ,long ,unsint ,VARSYS2 *);
	int	VarRead(unchar *,long *,unsint *,short *,VARSYS2 *);
	int	VarWrite(unchar *,long ,VARSYS2 *);
	short	VarLDefine(short ,unsint ,VARSYS2 *,VARSYS2 *);
	int	VarLRead(unchar *,long *,unsint *,short *,VARSYS2 *,VARSYS2 *);
	short	VarLSearch(unchar *,VARSYS2 *,VARSYS2 *,short *,unsint *);
	int	VarNameBuff(unchar *,unchar *(*),VARSYS2 *);
	short	VarNkchk(VARSYS2 *,void (*)(short ,unchar *));
	void	VarDump(int ,VARSYS2 *);
	void	VarDumpS(int ,VARSYS2 *);
	unchar	*VarError(int );
	void	VarLock(int ,short ,VARSYS2 *);
	VAR0	*VarLocal(VARSYS2 *);
#ifdef  __cplusplus
}
#endif

#endif
