#include "defines.h"
#include "amacro.h"
#include "acdata.h"
#include "acmp.h"
#include "vsiki.h"

unchar *NumRead(unchar *str,long *num)
/* 数字読み取り */
/* NumReadはコマンドラインで使われることを想定しないため、１文字コードは'〜'固定である */
{
int base=10; /* デフォルトは１０進数 */
unsint c;
unchar *str0;
	str0=str;
	switch (*str) { /* １文字目で判断 */
		case '\'': /* １文字（２バイトコード対応）*/
			str++; /* 'を飛ばす */
			c=*str++;
			if (check_kanji1(c)) c=(c<<8)|*str++;
			*num=(long)c;
			/* 'で括る必要がある */
			if (*str++!='\'') return(NULL); /* 括られていない */
			return(str);
		case '%': /* ２進数 */
			base=2;
			break;
		case '@': /* ８進数 */
			base=8;
			break;
		case '$': /* １６進数 */
			base=16;
			break;
	}
	/* 数字 */
	if (base!=10) {str++; str0++;}/* 進数記号をはずす */
	/* base進数の文字列を数値に直す：base=2〜10,16 */
	atol3b(str,num,base,0,&str);
	return(str==str0? NULL:str); /* 数字が１文字もない時はエラー */
}
