Esempio n. 1
0
File: FED.C Progetto: MegaGod/TW
void main_menu( void ) {
	static int pageno = 0; char status;
	char ch;
	file_menu( );
	while ( 1 ) {
		ch = select_font( &pageno, &status );
		switch ( status ) {
		case RET:
			edit( ch );
			break;
		case 3:
			file_menu( );
		}
	}
}
Esempio n. 2
0
/*
 * Root Menu
 */
int menu(unsigned int level, unsigned int n_menu, unsigned int select)
{
	int s,ss=0;

	while(1){
		frame(level,menus[n_menu].items,select);
		disp_menu(level,n_menu);
		s=select_menu(level,n_menu);
		switch(s){
		case -1:
		case 999:
			return(s);
			break;
		default:
			switch(menus[n_menu].next[s]){
			case 0:
				return(s);
				break;
			case 99:
				switch(file_menu(level+1, s)){
				case -1:
					return(-1);
					break;
				case 999:
					break;
				default:
					return(s);
					break;
				}
				break;
			default:
				ss=menu(level+1,menus[n_menu].next[s],s);
				if(ss==-1){
					return(ss);
				}else if(ss==999){
					break;
				}else{
					return(s*10+ss);
				}
			}
			break;
		}
	}
	return(-1);
}
Esempio n. 3
0
/*
 * File Select Menu
 */
int file_menu(unsigned int level, unsigned int select)
{
	FRESULT f;
	unsigned int total,offset,num,i;
	unsigned char *items;
	BYTE *attrib;

	f=f_opendir(&dirs, "\0");	// current directory
	switch(f){
		case FR_OK:
			total=0; offset=0; num=0;
			while((f_readdir(&dirs, &finfo) == FR_OK) && finfo.fname[0]){
				total++;
			}
			break;
		case FR_INT_ERR:
		case FR_NOT_READY:
		default:
			return(-1);
			break;
	}
	f_readdir(&dirs, (FILINFO *)NULL);	// rewind
	items=malloc(total*13);
	attrib=malloc(total*sizeof(BYTE));
	for(i=0;i<total;i++){
		f_readdir(&dirs, &finfo);
		memcpy(&items[i*13], finfo.fname, 13);
		attrib[i]=finfo.fattrib;
	}

	if(total>23){
		frame(level,23,select);
	}else{
		frame(level,total,select);
	}

	disp_files(level,&items[offset],total);

	MZ_disp(level*13+13,num+1,0x04);
	while(1){
		if((z80_sts.status&S_FBTN)==0){
			free(items); free(attrib);
			return(-1);
		}
		switch(get_key()){
		case 0x08:	// directory back
			MZ_disp(level*13+13,num+1,0x9a);
			f_chdir("..");
			free(items); free(attrib);
			return(file_menu(level,select));
			break;
		case 0x0d:	// select
			MZ_disp(level*13+13,num+1,0x9a);
			if(attrib[offset+num]&AM_DIR){
				f_chdir((TCHAR*)&items[(offset+num)*13]);
				free(items); free(attrib);
				return(file_menu(level,select));
			}else{
				memcpy(fname, &items[(offset+num)*13], 13);
				free(items); free(attrib);
				return(0);
			}
			break;
		case 0x1b:	// escape select
			z80_sts.status&=~S_FBTN;
			break;
		case 0x1d:	// back to menu
			MZ_disp(level*13+13,num+1,0x9a);
			free(items); free(attrib);
			return(999);
			break;
		case 0x1e:	// up
			if(num>0){
				MZ_disp(level*13+13,num,0x04);
				MZ_disp(level*13+13,num+1,0x9a);
				num--;
			}else{
				if(offset>0){
					offset--;
					disp_files(level,&items[offset*13],total);
				}
			}
			break;
		case 0x1f:	// down
			if(total>23){
				if(num<22){
					MZ_disp(level*13+13,num+1,0x9a);
					MZ_disp(level*13+13,num+2,0x04);
					num++;
				}else{
					if((num+offset)<(total-1)){
						offset++;
						disp_files(level,&items[offset*13],total);
					}
				}
			}else{
				if(num<(total-1)){
					MZ_disp(level*13+13,num+1,0x9a);
					MZ_disp(level*13+13,num+2,0x04);
					num++;
				}
			}
			break;
		default:
			break;
		}
	}
	return(-1);
}