Add basic menu

This commit is contained in:
Robin Jones 2023-03-01 07:12:20 +00:00
parent 3d77e24e58
commit fc3e3c6c24
2 changed files with 55 additions and 9 deletions

0
src/menu/extras.c Normal file
View File

View File

@ -1,7 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
// #include <sys/stat.h>
// #include <unistd.h>
#include <libdragon.h> #include <libdragon.h>
#include <fatfs/ff.h> #include <fatfs/ff.h>
@ -13,12 +11,23 @@
#include "menu_info.h" #include "menu_info.h"
#include "menu_fileinfo.h" #include "menu_fileinfo.h"
static int scroll_menu_position = 0;
static int items_in_dir = 0;
static char current_filename[256];
// e.g. if (str_endswith(cur_rom, ".z64") || str_endswith(cur_rom, ".n64"))
static bool str_endswith(const char *str, const char *suffix) {
char *p = strstr(str, suffix);
return p && p[strlen(suffix)] == '\0';
}
// FIXME: use newlib rather than fatfs to do this! // FIXME: use newlib rather than fatfs to do this!
FRESULT scan_file_path (char* path) { FRESULT scan_file_path (char* path) {
FRESULT res; FRESULT res;
DIR dir; DIR dir;
char sfno[273]; char sfno[273];
int counter = 0;
res = f_opendir(&dir, path); res = f_opendir(&dir, path);
@ -32,6 +41,8 @@ FRESULT scan_file_path (char* path) {
break; break;
} }
counter ++;
sprintf(sfno, "%c%c%c%c %10d %s/%s", sprintf(sfno, "%c%c%c%c %10d %s/%s",
((fno.fattrib & AM_DIR) ? 'D' : '-'), ((fno.fattrib & AM_DIR) ? 'D' : '-'),
((fno.fattrib & AM_RDO) ? 'R' : '-'), ((fno.fattrib & AM_RDO) ? 'R' : '-'),
@ -39,9 +50,16 @@ FRESULT scan_file_path (char* path) {
((fno.fattrib & AM_HID) ? 'H' : '-'), ((fno.fattrib & AM_HID) ? 'H' : '-'),
(int)fno.fsize, path, fno.fname); (int)fno.fsize, path, fno.fname);
if (scroll_menu_position == counter -1) {
printf("> %s\n", sfno);
sprintf(current_filename, "%s", fno.fname);
}
else {
printf(" %s\n", sfno); printf(" %s\n", sfno);
} }
} }
}
items_in_dir = counter -1;
f_closedir(&dir); f_closedir(&dir);
return res; return res;
} }
@ -80,14 +98,42 @@ void menu_main_init (settings_t *settings) {
controller_scan(); controller_scan();
joypad = get_keys_down(); joypad = get_keys_down();
if (joypad.c[0].up) {
console_clear();
if (scroll_menu_position > 0) {
scroll_menu_position --;
}
else {
scroll_menu_position = items_in_dir;
}
menu_main_refresh(settings->last_state.current_directory);
}
if (joypad.c[0].down) {
console_clear();
if ((scroll_menu_position >= 0) && (scroll_menu_position < items_in_dir)) {
scroll_menu_position ++;
}
else {
scroll_menu_position = 0;
}
menu_main_refresh(settings->last_state.current_directory);
}
if (joypad.c[0].A) { if (joypad.c[0].A) {
console_clear(); console_clear();
printf("TODO: loading ROM...\n"); printf("Loading ROM...\n");
wait_ms(1000); printf("%s\n", current_filename);
if (str_endswith(current_filename, ".z64") || str_endswith(current_filename, ".n64") || str_endswith(current_filename, ".v64")) {
assertf(flashcart_load_rom(current_filename) == FLASHCART_OK, "ROM load error");
break;
}
else {
printf("Failed... Returning to menu...\n"); printf("Failed... Returning to menu...\n");
wait_ms(1000); wait_ms(1000);
menu_main_refresh(settings->last_state.current_directory); menu_main_refresh(settings->last_state.current_directory);
} }
}
if (joypad.c[0].start) { // FIXME: the START button on any controller! if (joypad.c[0].start) { // FIXME: the START button on any controller!
console_clear(); console_clear();
menu_info(); menu_info();