int menu_input_bind_iterate(void) { int64_t current; char msg[PATH_MAX_LENGTH]; struct menu_bind_state binds; int timeout = 0; menu_handle_t *menu = menu_driver_get_ptr(); driver_t *driver = driver_get_ptr(); global_t *global = global_get_ptr(); bool bind_mode_kb = global ? global->menu.bind_mode_keyboard : false; if (!menu) return 1; menu_driver_render(); current = rarch_get_time_usec(); timeout = (menu->binds.timeout_end - current) / 1000000; snprintf(msg, sizeof(msg), bind_mode_kb ? "[%s]\npress keyboard\n(timeout %d seconds)" : "[%s]\npress joypad\n(RETURN to skip)", input_config_bind_map[ menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc, timeout); menu_driver_render_messagebox(msg); if (bind_mode_kb) return menu_input_bind_iterate_keyboard(current, timeout); binds = menu->binds; driver->block_input = true; menu_input_poll_bind_state(&binds); if ((binds.skip && !menu->binds.skip) || menu_input_poll_find_trigger(&menu->binds, &binds)) { driver->block_input = false; /* Avoid new binds triggering things right away. */ driver->flushing_input = true; binds.begin++; if (binds.begin > binds.last) return 1; binds.target++; } menu->binds = binds; return 0; }
int menu_input_bind_iterate(char *s, size_t len) { struct menu_bind_state binds; menu_input_t *menu_input = menu_input_get_ptr(); driver_t *driver = driver_get_ptr(); global_t *global = global_get_ptr(); bool bind_mode_kb = global ? global->menu.bind_mode_keyboard : false; int64_t current = rarch_get_time_usec(); int timeout = (menu_input->binds.timeout_end - current) / 1000000; if (bind_mode_kb) { snprintf(s, len, "[%s]\npress keyboard\n(timeout %d %s)", input_config_bind_map[ menu_input->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc, timeout, menu_hash_to_str(MENU_VALUE_SECONDS)); return menu_input_bind_iterate_keyboard(current, timeout); } else snprintf(s, len, "[%s]\npress joypad\n(RETURN to skip)", input_config_bind_map[ menu_input->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc); binds = menu_input->binds; input_driver_keyboard_mapping_set_block(true); menu_input_poll_bind_state(&binds, bind_port); if ((binds.skip && !menu_input->binds.skip) || menu_input_poll_find_trigger(&menu_input->binds, &binds)) { input_driver_keyboard_mapping_set_block(false); /* Avoid new binds triggering things right away. */ driver->flushing_input = true; binds.begin++; if (binds.begin > binds.last) return 1; binds.target++; } menu_input->binds = binds; return 0; }
int menu_input_bind_iterate(void) { char msg[PATH_MAX_LENGTH]; struct menu_bind_state binds; menu_handle_t *menu = menu_driver_resolve(); if (!menu) return 1; binds = menu->binds; if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) driver.menu_ctx->render(); snprintf(msg, sizeof(msg), "[%s]\npress joypad\n(RETURN to skip)", input_config_bind_map[ menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render_messagebox) driver.menu_ctx->render_messagebox( msg); driver.block_input = true; menu_input_poll_bind_state(&binds); if ((binds.skip && !menu->binds.skip) || menu_input_poll_find_trigger(&menu->binds, &binds)) { driver.block_input = false; /* Avoid new binds triggering things right away. */ driver.flushing_input = true; binds.begin++; if (binds.begin > binds.last) return 1; binds.target++; } menu->binds = binds; return 0; }