input: get rid of pl2 flag, use 'bind types' instead
[libpicofe.git] / common / menu.c
index 221a3b8..c74d314 100644 (file)
@@ -328,7 +328,7 @@ static void me_draw(const menu_entry *entries, int sel)
 {\r
        const menu_entry *ent;\r
        int x, y, w = 0, h = 0;\r
-       int offs, opt_offs = 27 * me_mfont_w;\r
+       int offs, col2_offs = 27 * me_mfont_w;\r
        const char *name;\r
        int asel = 0;\r
        int i, n;\r
@@ -353,9 +353,9 @@ static void me_draw(const menu_entry *entries, int sel)
 \r
                if (ent->beh != MB_NONE)\r
                {\r
-                       if (wt > opt_offs)\r
-                               opt_offs = wt + me_mfont_w;\r
-                       wt = opt_offs;\r
+                       if (wt > col2_offs)\r
+                               col2_offs = wt + me_mfont_w;\r
+                       wt = col2_offs;\r
 \r
                        switch (ent->beh) {\r
                        case MB_NONE: break;\r
@@ -415,10 +415,10 @@ static void me_draw(const menu_entry *entries, int sel)
                case MB_NONE:\r
                        break;\r
                case MB_OPT_ONOFF:\r
-                       text_out16(x + opt_offs, y, (*(int *)ent->var & ent->mask) ? "ON" : "OFF");\r
+                       text_out16(x + col2_offs, y, (*(int *)ent->var & ent->mask) ? "ON" : "OFF");\r
                        break;\r
                case MB_OPT_RANGE:\r
-                       text_out16(x + opt_offs, y, "%i", *(int *)ent->var);\r
+                       text_out16(x + col2_offs, y, "%i", *(int *)ent->var);\r
                        break;\r
                case MB_OPT_CUSTOM:\r
                case MB_OPT_CUSTONOFF:\r
@@ -428,7 +428,7 @@ static void me_draw(const menu_entry *entries, int sel)
                        if (ent->generate_name)\r
                                name = ent->generate_name(ent->id, &offs);\r
                        if (name != NULL)\r
-                               text_out16(x + opt_offs + offs * me_mfont_w, y, "%s", name);\r
+                               text_out16(x + col2_offs + offs * me_mfont_w, y, "%s", name);\r
                        break;\r
                }\r
 \r
@@ -1084,8 +1084,8 @@ static int menu_loop_savestate(int is_loading)
 \r
 static char *action_binds(int player_idx, int action_mask, int dev_id)\r
 {\r
+       int k, count, can_combo, type;\r
        const int *binds;\r
-       int k, count;\r
 \r
        static_buff[0] = 0;\r
 \r
@@ -1094,21 +1094,30 @@ static char *action_binds(int player_idx, int action_mask, int dev_id)
                return static_buff;\r
 \r
        count = in_get_dev_info(dev_id, IN_INFO_BIND_COUNT);\r
+       can_combo = in_get_dev_info(dev_id, IN_INFO_DOES_COMBOS);\r
+\r
+       type = IN_BINDTYPE_EMU;\r
+       if (player_idx >= 0) {\r
+               can_combo = 0;\r
+               type = IN_BINDTYPE_PLAYER12;\r
+       }\r
+       if (player_idx == 1)\r
+               action_mask <<= 16;\r
+\r
        for (k = 0; k < count; k++)\r
        {\r
                const char *xname;\r
                int len;\r
-               if (!(binds[k] & action_mask))\r
-                       continue;\r
 \r
-               if (player_idx >= 0 && ((binds[k] >> 16) & 3) != player_idx)\r
+               if (!(binds[IN_BIND_OFFS(k, type)] & action_mask))\r
                        continue;\r
 \r
                xname = in_get_key_name(dev_id, k);\r
                len = strlen(static_buff);\r
                if (len) {\r
-                       strncat(static_buff, " + ", sizeof(static_buff) - len - 1);\r
-                       len += 3;\r
+                       strncat(static_buff, can_combo ? " + " : ", ",\r
+                               sizeof(static_buff) - len - 1);\r
+                       len += can_combo ? 3 : 2;\r
                }\r
                strncat(static_buff, xname, sizeof(static_buff) - len - 1);\r
        }\r
@@ -1116,7 +1125,7 @@ static char *action_binds(int player_idx, int action_mask, int dev_id)
        return static_buff;\r
 }\r
 \r
-static int count_bound_keys(int dev_id, int action_mask, int player_idx)\r
+static int count_bound_keys(int dev_id, int action_mask, int bindtype)\r
 {\r
        const int *binds;\r
        int k, keys = 0;\r
@@ -1129,13 +1138,8 @@ static int count_bound_keys(int dev_id, int action_mask, int player_idx)
        count = in_get_dev_info(dev_id, IN_INFO_BIND_COUNT);\r
        for (k = 0; k < count; k++)\r
        {\r
-               if (!(binds[k] & action_mask))\r
-                       continue;\r
-\r
-               if (player_idx >= 0 && ((binds[k] >> 16) & 3) != player_idx)\r
-                       continue;\r
-\r
-               keys++;\r
+               if (binds[IN_BIND_OFFS(k, bindtype)] & action_mask)\r
+                       keys++;\r
        }\r
 \r
        return keys;\r
@@ -1191,7 +1195,8 @@ static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_
 static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_idx)\r
 {\r
        int i, sel = 0, menu_sel_max = opt_cnt - 1;\r
-       int dev_id, dev_count, kc, is_down, mkey, unbind;\r
+       int dev_id, dev_count, kc, is_down, mkey;\r
+       int unbind, bindtype, mask;\r
 \r
        for (i = 0, dev_id = -1, dev_count = 0; i < IN_MAX_DEVS; i++) {\r
                if (in_get_dev_name(i, 1, 0) != NULL) {\r
@@ -1244,19 +1249,20 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_
                for (is_down = 1; is_down; )\r
                        kc = in_update_keycode(&dev_id, &is_down, -1);\r
 \r
-               i = count_bound_keys(dev_id, opts[sel].mask, player_idx);\r
+               bindtype = player_idx >= 0 ? IN_BINDTYPE_PLAYER12 : IN_BINDTYPE_EMU;\r
+               mask = opts[sel].mask;\r
+               if (player_idx == 1)\r
+                       mask <<= 16;\r
+\r
+               i = count_bound_keys(dev_id, mask, bindtype);\r
                unbind = (i > 0);\r
 \r
                /* allow combos if device supports them */\r
-               if (i == 1 && in_get_dev_info(dev_id, IN_INFO_DOES_COMBOS))\r
+               if (i == 1 && bindtype == IN_BINDTYPE_EMU &&\r
+                               in_get_dev_info(dev_id, IN_INFO_DOES_COMBOS))\r
                        unbind = 0;\r
 \r
-               in_bind_key(dev_id, kc, opts[sel].mask, unbind);\r
-               if (player_idx >= 0) {\r
-                       /* FIXME */\r
-                       in_bind_key(dev_id, kc, 3 << 16, 1);\r
-                       in_bind_key(dev_id, kc, player_idx << 16, 0);\r
-               }\r
+               in_bind_key(dev_id, kc, bindtype, mask, unbind);\r
        }\r
 }\r
 \r
@@ -1280,10 +1286,6 @@ me_bind_action me_ctrl_actions[15] =
        { "Z      ", 0x0100 }\r
 };\r
 \r
-// player2_flag, reserved, ?, ?,\r
-// ?, ?, fast forward, menu\r
-// "NEXT SAVE SLOT", "PREV SAVE SLOT", "SWITCH RENDERER", "SAVE STATE",\r
-// "LOAD STATE", "VOLUME UP", "VOLUME DOWN", "DONE"\r
 me_bind_action emuctrl_actions[] =\r
 {\r
        { "Load State       ", PEV_STATE_LOAD },\r