refactor cheats.c

This commit is contained in:
twinaphex 2015-09-06 03:51:08 +02:00
parent 0b098b9301
commit 8fc96b52a3
8 changed files with 93 additions and 32 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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)
);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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();