Merge pull request #12 from irixxxx/master
[libpicofe.git] / menu.c
diff --git a/menu.c b/menu.c
index 50138f3..96b1ea2 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -981,10 +981,9 @@ static int dirent_seek_char(struct dirent **namelist, int len, int sel, char c)
 {\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
@@ -992,7 +991,7 @@ static int dirent_seek_char(struct dirent **namelist, int len, int sel, char c)
                        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
@@ -1109,14 +1108,14 @@ rescan:
                                namelist[sel]->d_name);\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
+               if      (inp & PBTN_UP  )  { sel--;   if (sel < 0)   sel = n-1; }\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 = n-1; }\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 = n-1; }\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
@@ -1319,10 +1318,10 @@ static char *action_binds(int player_idx, int action_mask, int dev_id)
        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
@@ -1459,9 +1458,12 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_
 \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