/*
	ファイルを拡張子別のディレクトリを示す環境ファイルを参照して捜し
	フルパス名にする関数
	
	１、環境ファイルは環境変数で指定されるファイルとする
	２、環境変数がない場合はデフォルトの環境ファイルを参照する
	３、環境ファイルは拡張子 − ディレクトリの表である
	４、ディレクトリは';'でつなぎ複数指定できる
	５、環境ファイルがない、環境ファイル中にその拡張子に対する記述がない時は
		デフォルトから捜す
	６、どこにもファイルがない時はエラーを返す
*/

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

int fsearch_env_check(path,env,defenv,fname,defpath)
unchar path[MAXPATH],*env,*defenv,*fname,*defpath;
/* 引数
	path	結果のフルパス名を入れるワークエリア
	env	環境ファイルを示す環境変数名
	defenv	環境変数がない時に参照する環境ファイル名
	fname	探すべきファイル名
	defpath	環境ファイルがない時に探すパス
*/
{
#define LMAX	256
unchar envname[MAXPATH],line[LMAX];
unchar drv[MAXDRIVE],dir[MAXDIR],name[MAXFILEEXT],ext[MAXEXT];
unchar ext2[LMAX];
FILE *fp;
	/* ファイル名分解 */
        strsfn2(fname,drv,dir,name,ext);
	
	/* 環境変数サーチ */
	env_name_set(envname,defenv,env);
	
	/* 環境ファイルオープン */
	fp=fopen(envname,"rt");
	if (fp!=NULL) {
		/* 拡張子に対するパスを探す */
		while (read1line0(fp,line,ext2,LMAX)==0) {
			/* 拡張子名比較 */
			if (strcmpi(ext2,ext)==0) { /* 一致 */
			    int i,c;
				/* ディレクトリ名読みだし */
				i=strlen(ext2); /* skip 拡張子 */
				while (c=line[i],c==' '||c==TAB) i++; /* skip セパレーター */
				defpath=&line[i];
				break;
			}
		} /* 環境ファイル中になかった時はデフォルトのままサーチ */
		fclose(fp);
	} /* 環境ファイルがない -> デフォルトパスサーチ */
	
	/* パスサーチ */
	if (ext[0]!=0) {
		strcat(name,".");
		strcat(name,ext);
	}
	return(fsearch_env(path,defpath,name));
}
