/*
	symbol.h
	整数型変数/文字列型変数の取り扱い
*/

#ifndef DEFINED_VARIABLE_A

typedef struct {  // 整数型配列
	char *name;
	unsigned int num;
	unsigned int *pinteger;
} VARIABLE_A, *PVARIABLE_A;

typedef struct {  // 文字列型配列
	char *name;
	unsigned int num;
	char **ptext;
} VARIABLE_D_A, *PVARIABLE_D_A;

#define DEFINED_VARIABLE_A 1

#endif /* DEFINED_VARIABLE_A */

EXTERN unsigned int getVariable( const char *s );				// 整数型：変数の内容を得る
EXTERN char *getVariable_d( const char *s );			// 文字列型：変数の内容を得る
EXTERN unsigned int setVariable( const char *s, unsigned int new_i );	// 整数型：変数に書き込む
EXTERN unsigned int setVariable_d( const char *s, const char *new_text ); // 文字列型：変数に書き込む
EXTERN unsigned int addVariable_d( const char *s, const char *add_text ); // 文字列型：変数に追加で書き込む (+=演算子対策)
EXTERN void free_variables( void );			// すべての変数をクリア

EXTERN unsigned int getVariable_a( const char *s, unsigned int i, unsigned int *v );	// 整数型配列：変数の内容を得る
EXTERN char *getVariable_d_a( const char *s, unsigned int i );	// 文字列型配列：変数の内容を得る
EXTERN unsigned int setVariable_a( const char *s, unsigned int i, unsigned int new_i );			// 整数型配列：変数に書き込む
EXTERN unsigned int setVariable_d_a( const char *s, unsigned int i, const char *new_text );	// 文字列型配列：変数に書き込む
EXTERN unsigned int addVariable_d_a( const char *s, unsigned int i, const char *add_text );	// 文字列型配列：変数に追加で書き込む (+=演算子対策)

EXTERN unsigned int array_variables( const char *s, unsigned int n );	// 整数型配列を確保 ( 0 〜 n-1 )
EXTERN unsigned int array_variables_d( const char *s, unsigned int n );	// 文字列型配列を確保 ( 0 〜 n-1 )

EXTERN unsigned int resize_variables( const char *s, unsigned int n );	// 整数型配列をリサイズ ( 0 〜 n-1 )
EXTERN unsigned int resize_variables_d( const char *s, unsigned int n );	// 文字列型配列をリサイズ ( 0 〜 n-1 )

EXTERN unsigned int sizeof_variables( const char *s );		// 整数型配列のサイズを取得 ( NO_VALUE : エラー )
EXTERN unsigned int sizeof_variables_d( const char *s );		// 文字列型配列のサイズを取得 ( NO_VALUE : エラー )

EXTERN PVARIABLE_A search_pointer_a( const char *s );			// 数値型配列 s が表す要素の先頭ポインタを返す
EXTERN PVARIABLE_D_A search_pointer_d_a( const char *s );		// 文字列型配列 s が表す要素の先頭ポインタを返す

EXTERN void must_def_value( unsigned char onoff );			// 配列でない変数は、利用の前に代入が必要とする

EXTERN void first_init_constvalues( void );		// 最初の１回だけ呼ばれる初期代入変数

// エラー値の定義
#ifndef NO_VALUE
#define NO_VALUE	0xffffffff
#endif /* NO_VALUE */
