/*****************************************************************************/
/* コマンドラインから指定オプションを捜す関数：複数数値入力付		     */
/*****************************************************************************/

#include "defines.h"
#include "aparam.h"	// check_param2()
#include "acdata.h"	// atoi3()

//#define	DEBUG	1

extern	int	_Pcheck_Last_;
extern	int	_Pcheck_Num_;
extern	char	_Pcheck_No_[];

/*****************************************************************************/

int check_param3n(const char *param,unchar *argv[],int argc,int num[],int mode
								,int limit,int min,int *get)
/* mode
	bit0 : 無効
	bit1 : 0=大文字小文字区別しない    , 1=区別する
	bit2 : 0=数値指定がない時はnum[0〜limit-1]を変更しない , 1=全て0にする
	bit3 : 1="〜”が後ろについている   , 0=ついていない
	bit4 : 無効（常に１にする）
	bit5 : 無効（常に０にする）

  num[]
  	取り込んだ数値群を入れる配列
  	必ずnum[limit]確保しておくこと。
  limit
  	引数として取り得る数値の数>=1
  	これ以上の指定があっても無視する。
  min
    	これ以下の引数の時はエラーにする<=limit
  	０の場合は全省略も可能＝個数エラー判定なし。
  get
  	実際に取り込んだ数値数
*/
{
int i,j=0;
	if (mode&BIT2) {
		for (i=0;i<limit;i++) num[i]=0; /* とりあえず0にする */
	}
	if (get!=NULL) *get=0; // まずは取り込んでいないの印
	
	i=check_param2(param,argv,argc,mode|BIT0); /* paramから始まるモードでサーチ */
	if (i) { /* オプションが見付かった時 */
		int num2;
		unchar *p,c;
		p=&(argv[i][_Pcheck_Last_]);
		while ((c=*p)!=0) { /* 数値指定がある...かもしれない */
			if (((mode&BIT3) && c=='\"') || ((mode&BIT4) && c==',')) break;
			while (c==',') c=*++p; /* セパレーター','スキップ */
			#ifdef DEBUG
			printf("p=%s\n",p);
			#endif
			if (atoi3s(&p,&num2,1)==-2) {
				/* 数値指定がおかしい */
				#ifdef DEBUG
				printf("数値指定がおかしい:p=%s\n",p);
				#endif
			    ERR:;
				/* オプション解除 */
				_Pcheck_No_[--_Pcheck_Num_]=0; /* argv[]番号解除 */
				return(0);
			}
			num[j++]=num2;
			if (j>=limit) break; // 制限に達した
		}
	}
	if (get!=NULL) *get=j;
	if (j<min) {
		#ifdef DEBUG
		printf("数値指定が足りない2\n");
		#endif
		goto ERR; // 数値指定が足りない
	}
	return(i);
}

/*****************************************************************************/

#ifdef DEBUG
void main(int argc,unchar *argv[])
{
int i,get;
#define	LIMIT 5
int num[LIMIT];
	i=check_param3n("N",argv,argc,num,0,LIMIT,3,&get);
	printf("i=%d,get=%d\n",i,get);
	if (get>LIMIT) get=LIMIT;
	for (i=0;i<get;i++) {
		printf("num[%d]=%d\n",i,num[i]);
	}
}
#endif

/*****************************************************************************/
