/* ファイル／ディレクトリ名をメニュー項目にセットする */

#include <stdio.h>
#include <direct.h>	// getcwd()
#include <string.h>
#include "doslibm.h"
#include "defines.h"
#include "astring.h"
#include "abuff.h"
#include "acmp.h"

#define FBMAX	30	/* ファイルセレクト最大ページ */
#define FNMAX	22	/* ファイル名最大長さ 18+'.'+3 */

int MFileSet(ms,msatr,tale,wild,page,fbefore,FMAX)
unchar *ms[],*wild,tale[];
int msatr[],*page,fbefore,FMAX;
{
int ret,fno,fpage=0,no=0; /* 項目数 */
unchar cdir[MAXPATH];
static _FILBUF fb[FBMAX],fblock0,fblock,fblock2;
	if (*page==1) { /* 最初のページ */
		fblock_buff(fb,FBMAX,1,&fblock0); /* top page dummy */
		ret=FILES(&fblock,"*.*",FA_ARCH|FA_DIREC);
	} else { /* ２ページ目以降 */
		fpage=1;
		msatr[++no]=(BIT9|'B'); /* 特殊色１で書く */
		strcpy(ms[no],"<△BACK>");
		if (fbefore) { /* 前ページ戻りの時 */
			fblock=fblock_buff(fb,FBMAX,*page,NULL);
			if (fblock.name[0]==0) {/* これ以上戻れないとき */
				/* この処理は手抜きである */
				/* でも100*30以上のファイルを１ディレクトリ
					に入れる方がおかしい */
				/* 前のページが読めない時は今のページを読む */
				beep();
				(*page)++;
				fblock=fblock_buff(fb,FBMAX,*page,NULL);
			}
		}
		/* その続きから */
		ret=NFILES(&fblock);
	}
	
	fno=0; /* ファイル数 */
	while (ret>=0) {
		if (fblock.atr&FA_VOL) goto NEXT1; /* volume : MS-DOS 対応 */
		if (fblock.atr&FA_DIREC) { /* directory */
			if (fblock.name[1]==0
			 && fblock.name[0]=='.') goto NEXT1; /* ｶﾚﾝﾄ */
			msatr[++no]=(CheckParentDir(fblock.name)? 'U':'I');
			/* 操作キーの関係で'D'が使えないから */
			strcpy(ms[no],"[");
			strcat(&ms[no][1],fblock.name);
			strcat(ms[no],"]");
		} else { /* file */
			/* ディレクトリとファイルサーチを一体化するために
			    "*.*"でサーチして、ファイルはここで比較をする */
			if (!fcpwild(wild,fblock.name)) goto NEXT1;
			msatr[++no]=0;
			strcpy(ms[no],fblock.name);
		}
		fno++; /* ファイル・ディレクトリ数 */
		if (fno>=FMAX) { /* １ページのファイル数を越える */
			/* さらに次のページに１ファイルでもある時にページ追加 */
			fblock2=fblock;
			if (NFILES(&fblock2)>=0) {
				msatr[++no]=(BIT9|'N'); /* 特殊色１で書く */
				strcpy(ms[no],"<▽NEXT>");
				fblock_buff(fb,FBMAX,*page+1,&fblock);
				fpage=1;
			} /* ない時は終了 */
			break;
		}
	    NEXT1:
		ret=NFILES(&fblock);
	}
	
	/* テイル */
	getcwd(cdir,MAXPATH); /* カレントディレクトリ名 */
	sprintf2(tale,"[%s][(%s):%d]",cdir,wild,fno);
	if (fpage) sprintf2(tale,"[%s][(%s):%d][P:%d]",cdir,wild,fno,*page);
	if (fno==0) { /* No file */
		msatr[++no]=(BIT10|'X');
		strcpy(ms[no],"< No File >");
	}
	return(no);
}
