{\r
int i;\r
\r
- sel++;\r
for (i = sel + 1; ; i++) {\r
if (i >= len)\r
- i = 1;\r
+ i = 0;\r
if (i == sel)\r
break;\r
\r
break;\r
}\r
\r
- return i - 1;\r
+ return i;\r
}\r
\r
-static const char *menu_loop_romsel(char *curr_path, int len,\r
+static const char *menu_loop_romsel_d(char *curr_path, int len,\r
const char **filter_exts,\r
int (*extra_filter)(struct dirent **namelist, int count,\r
- const char *basedir))\r
+ const char *basedir),\r
+ void (*draw_prep)(void))\r
{\r
static char rom_fname_reload[256]; // used for scratch and return\r
char sel_fname[256];\r
curr_path_restore = p;\r
snprintf(sel_fname, sizeof(sel_fname), "%s", p + 1);\r
}\r
-\r
- if (rom_fname_reload[0] == 0)\r
- show_help = 2;\r
}\r
+ show_help = 2;\r
\r
rescan:\r
if (namelist != NULL) {\r
+ n += !n;\r
while (n-- > 0)\r
free(namelist[n]);\r
free(namelist);\r
filter = scandir_filter;\r
\r
n = scandir(curr_path, &namelist, filter, (void *)scandir_cmp);\r
- if (n < 0) {\r
+ if (n < 0 || !namelist) {\r
lprintf("menu_loop_romsel failed, dir: %s\n", curr_path);\r
\r
// try data root\r
plat_get_data_dir(curr_path, len);\r
n = scandir(curr_path, &namelist, filter, (void *)scandir_cmp);\r
- if (n < 0) {\r
+ if (n < 0 || !namelist) {\r
// oops, we failed\r
lprintf("menu_loop_romsel failed, dir: %s\n", curr_path);\r
- return NULL;\r
+ namelist = malloc(sizeof(*namelist));\r
+ namelist[0] = calloc(1, sizeof(**namelist));\r
}\r
}\r
\r
\r
for (;;)\r
{\r
+ if (draw_prep != NULL)\r
+ draw_prep();\r
draw_dirlist(curr_path, namelist, n, sel, show_help);\r
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT\r
| PBTN_L|PBTN_R|PBTN_MA2|PBTN_MA3|PBTN_MOK|PBTN_MBACK\r
g_menu_filter_off = !g_menu_filter_off;\r
snprintf(sel_fname, sizeof(sel_fname), "%s",\r
namelist[sel]->d_name);\r
+ show_help = 2;\r
goto rescan;\r
}\r
- if (inp & PBTN_UP ) { sel--; if (sel < 0) sel = n-1; }\r
- if (inp & PBTN_DOWN) { sel++; if (sel > n-1) sel = 0; }\r
- if (inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }\r
- if (inp & PBTN_L) { sel-=24; if (sel < 0) sel = 0; }\r
- if (inp & PBTN_RIGHT) { sel+=10; if (sel > n-1) sel = n-1; }\r
- if (inp & PBTN_R) { sel+=24; if (sel > n-1) sel = n-1; }\r
-\r
- if ((inp & PBTN_MOK) || (inp & (PBTN_MENU|PBTN_MA2)) == (PBTN_MENU|PBTN_MA2))\r
+ int last = n ? n-1 : 0;\r
+ if (inp & PBTN_UP ) { sel--; if (sel < 0) sel = last; }\r
+ else if (inp & PBTN_DOWN) { sel++; if (sel > n-1) sel = 0; }\r
+ else if (inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }\r
+ else if (inp & PBTN_RIGHT) { sel+=10; if (sel > n-1) sel = last; }\r
+ else if (inp & PBTN_L) { sel-=24; if (sel < 0) sel = 0; }\r
+ else if (inp & PBTN_R) { sel+=24; if (sel > n-1) sel = last; }\r
+\r
+ else if ((inp & PBTN_MOK) || (inp & (PBTN_MENU|PBTN_MA2)) == (PBTN_MENU|PBTN_MA2))\r
{\r
if (namelist[sel]->d_type == DT_REG)\r
{\r
strcat(newdir, "/");\r
strcat(newdir, namelist[sel]->d_name);\r
}\r
- ret = menu_loop_romsel(newdir, newlen, filter_exts, extra_filter);\r
+ ret = menu_loop_romsel_d(newdir, newlen, filter_exts, extra_filter, draw_prep);\r
free(newdir);\r
break;\r
}\r
return ret;\r
}\r
\r
+static const char *menu_loop_romsel(char *curr_path, int len,\r
+ const char **filter_exts,\r
+ int (*extra_filter)(struct dirent **namelist, int count,\r
+ const char *basedir))\r
+{\r
+ return menu_loop_romsel_d(curr_path, len, filter_exts, extra_filter, NULL);\r
+}\r
+\r
// ------------ savestate loader ------------\r
\r
#define STATE_SLOT_COUNT 10\r
type = IN_BINDTYPE_EMU;\r
if (player_idx >= 0) {\r
can_combo = 0;\r
- type = IN_BINDTYPE_PLAYER12;\r
+ type = IN_BINDTYPE_PLAYER12 + (player_idx >> 1);\r
+ if (player_idx & 1)\r
+ action_mask <<= 16;\r
}\r
- if (player_idx == 1)\r
- action_mask <<= 16;\r
\r
if (dev_id >= 0)\r
dev = dev_last = dev_id;\r
\r
dev_id = -1; // show all\r
mask_shift = 0;\r
- if (player_idx == 1)\r
- mask_shift = 16;\r
- bindtype = player_idx >= 0 ? IN_BINDTYPE_PLAYER12 : IN_BINDTYPE_EMU;\r
+ if (player_idx >= 0) {\r
+ if (player_idx & 1)\r
+ mask_shift = 16;\r
+ bindtype = IN_BINDTYPE_PLAYER12 + (player_idx >> 1);\r
+ } else\r
+ bindtype = IN_BINDTYPE_EMU;\r
\r
for (;;)\r
{\r