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

int VarWrite(unchar *vname,long num,VARSYS2 *var)
/* 変数数値代入（内容変更）*/
/* 型の変更は出来ない */
/* 新規変数の登録はVarDefineを使うこと */
{
short p;
unsint type;
	/* 変数サーチ */
	p=VarSearch(vname,var,&type);
	if (p==0) return(VARNDEF); /* 変数は未定義 */
	
	/* 変更（代入）*/
	/* モードは定義時の型に従う */
 	/* 定義時と型を変えて代入する時にはVarWriteは使えない */
	if (p<0) { /* 未確定の変数を確定する */
		p=-p;
		type=BIT15; /* 確定にする印 */
	} else { /* p>0 : 内容変更 */
		if (type&VDAI) return(VARCSTA); /* 再代入不可なのに代入しようとした */
	}
	/* VarSearchで出来たpにはエラーは無いはず */
	VarNumWrite(p,num,type,var);
	#if DEBUG
	printf2("(%d)%s[%x] <- %ld\n",var->vpoint,vname+(var->mode&BIT0),type,num);
	#endif
	return(VOK);
}
