#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <doslibm.h>
#include "defines.h"
#include "aenv.h"
#include "astring.h"

int fsearch_env(unchar *path,unchar *list,unchar *fname)
/* 指定PATHのうちから指定ファイル名を探す */
/* その存在したディレクトリ名＋ファイル名を返す */
/* ファイル名中にはドライブ名／ディレクトリ名を入れないこと */
/* PATH = ?:????;?:???? */
{
_FILBUF fblock;
unchar envname[MAXPATH],envname0[128],envname1[128],c,*env;
int i=1,j,k,l;
	while (GetToken(list,i,envname0,";,")) {
		/* %〜%対応 */
		k=j=0;
		while ((c=envname0[j++])!=0) {
			if (c=='%') { /* 環境変数参照 */
				/* 環境変数抜きだし */
				l=0;
				while (c=envname0[j++],c!='%'&&c!=0) {
					envname1[l++]=c;
				}
				envname1[l]=0;
				/* 環境変数参照 */
				env=getenv2(envname1,NULL);
				if (env==NULL) { /* その環境変数はない */
					c='.'; /* カレント指定とみなす */
				} else {
					while ((envname[k]=*env++)!=0) k++;
					continue;
				}
			}
			envname[k++]=c;
		}
		envname[k]=0;
		dir_name2(envname,fname); /* フルパス名化 */
		if (FILES(&fblock,envname,FA_ARCH)>=0) {
			/* ファイルがあった */
			strcpy(path,envname); /* フルパス名を返す */
			return(i);
		}
		i++; /* 次を探す */
	}
	return(0);
}
