/* 変数管理システム */
#include "defines.h"
#include "vsiki.h"

int var_write(unchar *vname,long num,VARSYS *var)
/* 変数数値代入（内容変更）*/
/* 型の変更は出来ない */
/* 新規変数の登録はvar_defineを使うこと */
{
long p;
int md;
	/* 変数サーチ */
	p=var_search(vname,var,&md);
	if (p==0) return(-1); /* 変数は未定義 */
	
	/* 変更（代入）*/
	/* モードは定義時の型に従う */
 	/* 定義時と型を変えて代入する時にはvar_writeは使えない */
	if (p<0) { /* 未確定の変数を確定する */
		p=-p;
		md=-1; /* 確定にする印 */
	} else { /* p>0 : 内容変更 */
		if (md&VDAI) return(-2); /* 再代入不可なのに代入しようとした */
	}
	/* var_searchで出来たpにはエラーは無いはず */
	var_num_write(p,num,md,var);
	#if DEBUG
	printf("(%d)%s[%x] <- %ld",var->vlots+1,vname,md,num);
	#endif
	return(0);
}
