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

short VarSearch(unchar *vname,VARSYS2 *var,unsint *type)
/* 変数サーチ */
/* return=0: その変数は定義されていない
	 >0: その変数の格納位置（数値確定）
	 <0:-その変数の格納位置（数値未確定）
*/
{
short p;
unsint fdbl=0;
	if (var->vpoint>VTOP2) {
	    /* ハッシュで最初のサーチポイントを決める */
	    p=var->vhash[hash(vname)%var->vhsize];
	    if (p) { /* ハッシュにはあった */
		if (p<0) {fdbl=1; p=-p;} /* 重複ありの時 */
		do { /* 格納エリアからサーチ */
		    /* 変数名比較 */
		    if (strcmp(var->vwork[p].adrs,vname)==0) { /* 発見 */
		      unsint ty;
			ty=var->vwork[p].type; /* 型 */
			if (type!=NULL) *type=ty;
			return(ty&VKAKU? -p:p); /* 未確定:確定 */
		    }
		    if (!fdbl) break; /* ﾊｯｼｭ重複無し:ここで一致しなければなし */
		} while ((++p)<var->vpoint);
	    } /* ハッシュにない */
	} /* 変数は１つもない */
	/* この変数は登録されていない */
	return(0);
}
