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

int VarNameBuff(unchar *vname,unchar *(*adrs),VARSYS2 *var)
/* 変数名を領域に格納する */
/* バッファーは内部で自動確保する */
/* vname先頭にlenがあってはならない */
{
unchar c;
short i;
long p;
	if (var->vnb.size==0) { /* 最初 */
		/* 長さ１６の変数がいっぱい入る分確保する */
		var->vnb.size=var->vwsize*16;
		if ((var->vnb.buff=newmalloc(var->vnb.size))==NULL) return(VARNMEM);
		var->vnb.point=0;
	}
	/* 格納 */
	i=0;
	p=var->vnb.point;
	var->vnb.point+=(var->mode&BIT0); /* 最初に長さの分を飛ばしてスタート */
	do {
		c=*vname++;
		if (var->vnb.point>=var->vnb.size) { /* 入りきらない->領域拡大 */
		    unchar *buff;
			var->vnb.size+=(var->vwsize*16);
			if ((buff=realloc(var->vnb.buff,var->vnb.size))==NULL) {
				return(VARNMEM);
			}
			var->vnb.buff=buff;
		}
		var->vnb.buff[var->vnb.point++]=c;
		if (c!=0) if (++i>var->vlmax) return(VARLONG);
	} while (c!=0);
	if (var->mode&BIT0) var->vnb.buff[p]=i; /* 長さ書き込み */
	*adrs=&var->vnb.buff[p]; /* 格納アドレス */
	return(VOK);
}
