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

long var_num_write(long point,long num,int mode,VARSYS *var)
/* 変数に数値代入（型付き）*/
{
	if (point<VTOP||point>var->vwsize) return(-2); /* ポイントがおかしい */
	if (mode<0) {
		mode=var->vwork[point+1]&(~VKAKU); /* 確定にするのみ */
	} else { /* mode>=0 */
		if (mode&BIT15) mode&=0xff; /* 再代入不可にかかわらず代入する */
		else if (var->vwork[point+1]&VDAI) return(-1); /* 再代入不可 */
	}
	var->vwork[point+1]=(unchar)mode;
	/* *(long *)(&var->vwork[point+2])=num; */
	/* 数値はワークエリア内の任意アドレスから書き込まれるので */
	/* これではうまくいかない（奇数アドレスからのこともある）*/
	/* MC68000の制約回避 */
	ltoc(num,&var->vwork[point+2]);
	#if DEBUG
	if (mode&VKAKU) prints("←未確定");
	else {
		printf("[%x]←%ld",mode,num);
		if (mode&VDAI) prints(":再代入不可");
	}
	crlf();
	#endif
	return(point+6+var->vwork[point]+1);
}
