#include "defines.h"
#include "acdata.h"

int atoi3b(unchar *str,int *num,int base,int mode,unchar *(*after))
/* base進数の文字列を数値に直す：base=2〜10,16 */
/* mode : BIT0 : 0=通常 , 1="〜"／,〜付きモード */
{
long v=0;
int ret=0; /* ret=0:数値読み取り完了 */
unsint c;
	while ((c=*str++)!=0) {
		if (c=='_') continue; /* セパレーター */
		if ((mode&BIT0) && (c=='\"'||c==',')) break;
		c=hval(c);
		if (c>=base) {
			/* 途中でbase進文字でない文字が出て来た */
			/* cはunsignedなので>=baseでいい */
			/* 一応変換出来たところまでの数は返すがエラーが立つ */
			ret=-2;
			break;
		}
		v=v*base+c;
	}
	*num=v;
	if (after!=NULL) *after=str-1; /* base進数文字でないものの位置 */
	return(ret);
}
