diff --git a/cheats.c b/cheats.c index 569dd8f43e..67adf333d6 100644 --- a/cheats.c +++ b/cheats.c @@ -32,6 +32,34 @@ #include "config.h" #endif +struct item_cheat +{ + char *desc; + bool state; + char *code; +}; + +struct cheat_manager +{ + struct item_cheat *cheats; + unsigned ptr; + unsigned size; + unsigned buf_size; +}; + +unsigned cheat_manager_get_buf_size(cheat_manager_t *handle) +{ + if (!handle) + return 0; + return handle->buf_size; +} + +unsigned cheat_manager_get_size(cheat_manager_t *handle) +{ + if (!handle) + return 0; + return handle->size; +} void cheat_manager_apply_cheats(cheat_manager_t *handle) { @@ -49,6 +77,14 @@ void cheat_manager_apply_cheats(cheat_manager_t *handle) } } +void cheat_manager_set_code(cheat_manager_t *handle, unsigned i, const char *str) +{ + if (!handle) + return; + handle->cheats[i].code = strdup(str); + handle->cheats[i].state = true; +} + /** * cheat_manager_save: * @path : Path to cheats file (relative path). @@ -266,6 +302,14 @@ void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx) RARCH_LOG("%s\n", msg); } +void cheat_manager_toggle_index(cheat_manager_t *handle, unsigned i) +{ + if (!handle) + return; + + handle->cheats[i].state = !handle->cheats[i].state; + cheat_manager_update(handle, i); +} void cheat_manager_toggle(cheat_manager_t *handle) { @@ -298,3 +342,24 @@ void cheat_manager_index_prev(cheat_manager_t *handle) cheat_manager_update(handle, handle->ptr); } + +const char *cheat_manager_get_code(cheat_manager_t *handle, unsigned i) +{ + if (!handle) + return NULL; + return handle->cheats[i].code; +} + +const char *cheat_manager_get_desc(cheat_manager_t *handle, unsigned i) +{ + if (!handle) + return NULL; + return handle->cheats[i].desc; +} + +bool cheat_manager_get_code_state(cheat_manager_t *handle, unsigned i) +{ + if (!handle) + return false; + return handle->cheats[i].state; +} diff --git a/cheats.h b/cheats.h index 51ae737174..e1d324fbdf 100644 --- a/cheats.h +++ b/cheats.h @@ -23,23 +23,10 @@ extern "C" { #endif -struct item_cheat -{ - char *desc; - bool state; - char *code; -}; - -struct cheat_manager -{ - struct item_cheat *cheats; - unsigned ptr; - unsigned size; - unsigned buf_size; -}; - typedef struct cheat_manager cheat_manager_t; +unsigned cheat_manager_get_size(cheat_manager_t *handle); + cheat_manager_t *cheat_manager_new(unsigned size); cheat_manager_t *cheat_manager_load(const char *path); @@ -56,6 +43,8 @@ bool cheat_manager_save(cheat_manager_t *handle, const char *path); bool cheat_manager_realloc(cheat_manager_t *handle, unsigned new_size); +void cheat_manager_set_code(cheat_manager_t *handle, unsigned index, const char *str); + void cheat_manager_free(cheat_manager_t *handle); void cheat_manager_index_next(cheat_manager_t *handle); @@ -68,6 +57,16 @@ void cheat_manager_apply_cheats(cheat_manager_t *handle); void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx); +void cheat_manager_toggle_index(cheat_manager_t *handle, unsigned i); + +unsigned cheat_manager_get_buf_size(cheat_manager_t *handle); + +const char *cheat_manager_get_desc(cheat_manager_t *handle, unsigned i); + +const char *cheat_manager_get_code(cheat_manager_t *handle, unsigned i); + +bool cheat_manager_get_code_state(cheat_manager_t *handle, unsigned i); + #ifdef __cplusplus } #endif diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index f3c0186dbf..15f5e48563 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -46,7 +46,7 @@ static void menu_action_setting_disp_set_label_cheat_num_passes( *w = 19; strlcpy(s2, path, len2); if (global && global->cheat) - snprintf(s, len, "%u", global->cheat->buf_size); + snprintf(s, len, "%u", cheat_manager_get_buf_size(global->cheat)); } static void menu_action_setting_disp_set_label_remap_file_load( @@ -409,12 +409,12 @@ static void menu_action_setting_disp_set_label_cheat( if (!global) return; - if (cheat_index < global->cheat->buf_size) + if (cheat_index < cheat_manager_get_buf_size(global->cheat)) snprintf(s, len, "%s : (%s)", - (global->cheat->cheats[cheat_index].code != NULL) - ? global->cheat->cheats[cheat_index].code : + (cheat_manager_get_code(global->cheat, cheat_index) != NULL) + ? cheat_manager_get_code(global->cheat, cheat_index) : menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE), - global->cheat->cheats[cheat_index].state ? + cheat_manager_get_code_state(global->cheat, cheat_index) ? menu_hash_to_str(MENU_VALUE_ON) : menu_hash_to_str(MENU_VALUE_OFF) ); diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index eb3d7c6b6e..2b7836e9e7 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -231,8 +231,8 @@ static int action_left_cheat_num_passes(unsigned type, const char *label, if (!cheat) return -1; - if (cheat->size) - new_size = cheat->size - 1; + if (cheat_manager_get_size(cheat)) + new_size = cheat_manager_get_size(cheat) - 1; menu_entries_set_refresh(false); cheat_manager_realloc(cheat, new_size); diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index f8867db51b..7381c872e0 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -70,8 +70,7 @@ int generic_action_cheat_toggle(size_t idx, unsigned type, const char *label, if (!cheat) return -1; - cheat->cheats[idx].state = !cheat->cheats[idx].state; - cheat_manager_update(cheat, idx); + cheat_manager_toggle_index(cheat, idx); return 0; } @@ -260,7 +259,7 @@ static int action_right_cheat_num_passes(unsigned type, const char *label, if (!cheat) return -1; - new_size = cheat->size + 1; + new_size = cheat_manager_get_size(cheat) + 1; menu_entries_set_refresh(false); cheat_manager_realloc(cheat, new_size); diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index 20e7e8a72e..979ec5dbff 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -236,7 +236,7 @@ static int action_start_cheat_num_passes(unsigned type, const char *label) if (!cheat) return -1; - if (cheat->size) + if (cheat_manager_get_size(cheat)) { menu_entries_set_refresh(false); cheat_manager_realloc(cheat, 0); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 753b12e706..cc8296bc1a 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2008,13 +2008,13 @@ static int menu_displaylist_parse_options_cheats(menu_displaylist_info_t *info) menu_hash_to_str(MENU_LABEL_CHEAT_APPLY_CHANGES), MENU_SETTING_ACTION, 0, 0); - for (i = 0; i < cheat->size; i++) + for (i = 0; i < cheat_manager_get_size(cheat); i++) { char cheat_label[64] = {0}; snprintf(cheat_label, sizeof(cheat_label), "%s #%u: ", menu_hash_to_str(MENU_VALUE_CHEAT), i); - if (cheat->cheats[i].desc) - strlcat(cheat_label, cheat->cheats[i].desc, sizeof(cheat_label)); + if (cheat_manager_get_desc(cheat, i)) + strlcat(cheat_label, cheat_manager_get_desc(cheat, i), sizeof(cheat_label)); menu_list_push(info->list, cheat_label, "", MENU_SETTINGS_CHEAT_BEGIN + i, 0, 0); } diff --git a/menu/menu_input.c b/menu/menu_input.c index 5d729810c3..4c67caf8a2 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -186,9 +186,7 @@ void menu_input_st_cheat_callback(void *userdata, const char *str) if (cheat && str && *str) { unsigned cheat_index = menu_input->keyboard.type - MENU_SETTINGS_CHEAT_BEGIN; - - cheat->cheats[cheat_index].code = strdup(str); - cheat->cheats[cheat_index].state = true; + cheat_manager_set_code(cheat, cheat_index, str); } menu_input_key_end_line();