Skip to content

Commit 62b81b6

Browse files
Splaserbdm110
andauthored
menu: allow direct input for exact cheat search value (#19070)
* (menu) Add input callback for exact cheat search and update menu action * Updated to fix the C89 CI failure by removing the C++-style comment. --------- Co-authored-by: bdm110 <bdm110@prontmail.com>
1 parent 58090bb commit 62b81b6

3 files changed

Lines changed: 63 additions & 2 deletions

File tree

cheat_manager.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,6 +1264,66 @@ int cheat_manager_search_exact(rarch_setting_t *setting, size_t idx, bool wrapar
12641264
return cheat_manager_search(CHEAT_SEARCH_TYPE_EXACT);
12651265
}
12661266

1267+
static void cheat_manager_search_exact_input_cb(void *userdata,
1268+
const char *line)
1269+
{
1270+
char *end = NULL;
1271+
unsigned long value = 0;
1272+
unsigned max_value = 0;
1273+
1274+
if (!line || !*line)
1275+
{
1276+
menu_input_dialog_end();
1277+
return;
1278+
}
1279+
1280+
errno = 0;
1281+
value = strtoul(line, &end, 0);
1282+
1283+
if (errno || end == line)
1284+
{
1285+
menu_input_dialog_end();
1286+
return;
1287+
}
1288+
1289+
max_value = cheat_manager_get_state_search_size(
1290+
cheat_manager_state.search_bit_size);
1291+
1292+
if (value > max_value)
1293+
value = max_value;
1294+
1295+
cheat_manager_state.search_exact_value = (unsigned)value;
1296+
1297+
menu_input_dialog_end();
1298+
1299+
cheat_manager_search(CHEAT_SEARCH_TYPE_EXACT);
1300+
}
1301+
1302+
int cheat_manager_search_exact_input(rarch_setting_t *setting,
1303+
size_t idx, bool wraparound)
1304+
{
1305+
#ifdef HAVE_MENU
1306+
char value_buf[32];
1307+
menu_input_ctx_line_t line;
1308+
1309+
memset(&line, 0, sizeof(line));
1310+
1311+
snprintf(value_buf, sizeof(value_buf), "%u",
1312+
cheat_manager_state.search_exact_value);
1313+
1314+
line.label = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_SEARCH_EXACT);
1315+
line.label_setting = value_buf;
1316+
line.type = MENU_ENUM_LABEL_CHEAT_SEARCH_EXACT;
1317+
line.idx = idx;
1318+
line.cb = cheat_manager_search_exact_input_cb;
1319+
1320+
if (menu_input_dialog_start(&line))
1321+
return 0;
1322+
#endif
1323+
1324+
return cheat_manager_search_exact(setting, idx, wraparound);
1325+
}
1326+
12671327
int cheat_manager_search_lt(rarch_setting_t *setting, size_t idx, bool wraparound)
12681328
{
12691329
return cheat_manager_search(CHEAT_SEARCH_TYPE_LT);

cheat_manager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w
248248

249249
int cheat_manager_search_exact(rarch_setting_t *setting, size_t idx, bool wraparound);
250250

251+
int cheat_manager_search_exact_input(rarch_setting_t *setting, size_t idx, bool wraparound);
252+
251253
int cheat_manager_search_lt(rarch_setting_t *setting, size_t idx, bool wraparound);
252254

253255
int cheat_manager_search_gt(rarch_setting_t *setting, size_t idx, bool wraparound);

menu/menu_setting.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12966,8 +12966,7 @@ static bool setting_append_list(
1296612966
menu_settings_list_current_add_range(list, list_info,
1296712967
0, cheat_manager_get_state_search_size(cheat_manager_state.search_bit_size), 1, true, true);
1296812968
(*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_cheat_exact;
12969-
(*list)[list_info->index - 1].action_ok = &cheat_manager_search_exact;
12970-
12969+
(*list)[list_info->index - 1].action_ok = &cheat_manager_search_exact_input;
1297112970
CONFIG_UINT(
1297212971
list, list_info,
1297312972
&cheat_manager_state.dummy,

0 commit comments

Comments
 (0)