/* メニューでファイルをセレクトする */

/* 実行前に全ドライブのカレントディレクトリ保存 */
/* 実行後にそのすべてを戻す */

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

/* ファンクションキー内容 */
static unchar *msys[]={
	 " ﾄﾞﾗｲﾌﾞ "	/* F1 */
	,"WildCard"	/* F2 */
	,""		/* F3 */
	,""		/* F4 */
	,""		/* F5 */
	,""		/* F6 */
	,""		/* F7 */
	," ヘルプ "	/* F8 */
	,""		/* F9 */
	,"  終了  "	/* F10 */
};

#define FMAX	100		/* メニュー１ページ項目数 */
#define FMAX2	(FMAX+3)	/* ＋△▽タイトル */

int FileSelect(int xx[],int yy[],unchar *wild0,unchar *dir,unchar fname[])
{
int ret,no,page,fbefore,x,y,msc;
unchar wild[MAXFILEEXT],tale[DISPX],*wget;
static int msatr[FMAX2];
static unchar *ms[FMAX2],mss[FMAX2][MAXFILEEXT+2]; /* +2='['']' */
	if (OpenWildChange()) return(-1);
	
	/* ファンクションキー表示内容保存 */
	x=TWIDTH(&y);
	wget=gettext2(0,y-1,x-1,y-1);
	if (wget!=NULL) {
		pr_sysline(msys,0);    /* システムラインクリア */
		getch_mouse(NULL,0,1); /* ファンクションキーマウスセレクト */
	}
	msc=MS_STAT();
	
	/* アドレス割付 */
	for (no=0;no<FMAX2;no++) ms[no]=&mss[no][0];
	strcpy(wild,wild0); /* wildの内容は変更されることがあるので */
	
	/* 初期ディレクトリ設定 */
	chdir2(dir,0); /* 指定パスへ移動出来ない時はカレントからスタート */
	
	/* ファイル選択＆表示 */
	page=1; /* page top */
	fbefore=0; /* 前ページなし */
	do {
		/* file search (with directory) */
		no=MFileSet(ms,msatr,tale,wild,&page,fbefore,FMAX);
		
		/* select file */
		ret=MSelecter(xx,yy,ms,msatr,tale,no,page,wild);
		
		fbefore=0;
		switch (ret) {
		    case -2: /* BACK */
			page--;
			fbefore=1;
			break;
		    case -3: /* NEXT */
			page++;
			break;
		    case -1: /* directory */
		    case -4: /* wildcard */
		    case -5: /* drive */
			page=1;
			break;
		}
	} while (ret<0);
	if (ret>0) {
		/* フルパス名作成 */
		getcwd(fname,MAXPATH); /* カレントディレクトリ名 */
		dir_name2(fname,ms[ret]);
	}
	if (wget!=NULL) { /* ファンクションキー表示内容復帰 */
		puttext(0,y-1,wget);
		free(wget);
	}
	if (msc) MS_CURON(); else MS_CUROF();
	CloseWildChange();
	return(ret);
}
