#include <stdio.h>
#include "defines.h"

/* string numeric compaire & read */
/* "string % message" の %を任意桁の数字と判断して文字列を比較する */
/* 数値識別子%は任意に変更可能 */
/* 識別子はform中に何度あってもいい */
/* %の部分に当たる数字を配列に入れて返す */
/* 漢字対応　*/

int jstrnumcmp2(unchar *form,unchar *str,unsint cn,int num[])
/* form : フォーマット付き比較文字列 */
/* str  : 比較文字列 */
/* cn   : 数値識別子（２バイト文字も指定可能）*/
/* num[]: 数字を入れる配列。必ず識別子の個数以上の容量を持った配列を与えること */
{
unsint c1,c2,cc;
unchar *str1;
int n,nc=0;
	/* 本当は必ずstrlen(form)<=strlen(str)のはずである */
	while ((c1=*form++)!=0) {
		if (check_kanji1(c1)) {
			cc=*form;
			if (cc!=0) {
				c1=(c1<<8)|cc;
				form++;
			}
		}
		if (c1==cn) { /* 数字比較フィールド */
			/* strの現在位置から任意桁の数字を飛ばす */
			/* 数字の先頭が０の時もそれを数字とみなす */
			/* ただし、数値が１桁もないときは不一致とする */
			str1=str;
			n=0;
			while (cc=*str,isdigit(cc)) {
				n=n*10+(cc-'0');
				str++;
			}
			if (str==str1) return(1); /* 数字がないので不一致 */
			num[nc++]=n;
			continue;
		}
		/* strのEOSによる終了判定がないが、先にstrが終わったときには
		   必ずそこで不一致になるのでこれでいい */
		c2=*str++;
		if (check_kanji1(c2)) {
			cc=*str;
			if (cc!=0) {
				c2=(c2<<8)|cc;
				str++;
			}
		}
		if (c1!=c2) return(1); /* 不一致 */
	}
	/* 完全一致判定 */
	return(*str!=0);
}

#if 0
main(int argc,unchar *argv[])
{
int ret;
int num[2];
	if (argc<3) {
		printf("\ajns2 form str\n");
		exit(1);
	}
	ret=jstrnumcmp2(argv[1],argv[2],'%',num);
	if (ret) printf("不一致\n");
	else printf("一致：%d\n",num[0]);
	exit(0);
}
#endif
