Skip to content

Commit

Permalink
Merge pull request #7725 from fr500/subsystem
Browse files Browse the repository at this point in the history
Subsystem
  • Loading branch information
inactive123 authored Dec 11, 2018
2 parents 574972c + 479104e commit e33dfb5
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 139 deletions.
4 changes: 2 additions & 2 deletions command.c
Original file line number Diff line number Diff line change
Expand Up @@ -1901,7 +1901,7 @@ bool command_event(enum event_command cmd, void *data)
case CMD_EVENT_LOAD_CORE:
{
bool success = false;
subsystem_size = 0;
subsystem_current_count = 0;
content_clear_subsystem();
success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
(void)success;
Expand Down Expand Up @@ -2045,7 +2045,7 @@ bool command_event(enum event_command cmd, void *data)
#endif
if (is_inited)
{
subsystem_size = 0;
subsystem_current_count = 0;
content_clear_subsystem();
}
}
Expand Down
29 changes: 18 additions & 11 deletions dynamic.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
unsigned size = i;
const struct retro_subsystem_info *info =
(const struct retro_subsystem_info*)data;
subsystem_size = 0;
subsystem_current_count = 0;
RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n");

for (i = 0; info[i].ident; i++)
Expand All @@ -207,18 +207,24 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
}

RARCH_LOG("Subsystems: %d\n", i);
size = i;
size = i;

if (size > SUBSYSTEM_MAX_SUBSYSTEMS)
RARCH_WARN("Subsystems exceed subsystem max, clamping to %d\n", SUBSYSTEM_MAX_SUBSYSTEMS);

if (system)
{
for (i = 0; i < size; i++)
for (i = 0; i < size && i < SUBSYSTEM_MAX_SUBSYSTEMS; i++)
{
subsystem_data[i].desc = strdup(info[i].desc);
subsystem_data[i].ident = strdup(info[i].ident);
subsystem_data[i].id = info[i].id;
subsystem_data[i].num_roms = info[i].num_roms;

for (j = 0; j < subsystem_data[i].num_roms; j++)
if (subsystem_data[i].num_roms > SUBSYSTEM_MAX_SUBSYSTEM_ROMS)
RARCH_WARN("Subsystems exceed subsystem max roms, clamping to %d\n", SUBSYSTEM_MAX_SUBSYSTEM_ROMS);

for (j = 0; j < subsystem_data[i].num_roms && j < SUBSYSTEM_MAX_SUBSYSTEM_ROMS; j++)
{
subsystem_data_roms[i][j].desc = strdup(info[i].roms[j].desc);
subsystem_data_roms[i][j].valid_extensions = strdup(info[i].roms[j].valid_extensions);
Expand All @@ -229,25 +235,27 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
subsystem_data[i].roms = subsystem_data_roms[i];
}

for (i = 0; i < size; i++)

subsystem_current_count = size <= SUBSYSTEM_MAX_SUBSYSTEMS ? size : SUBSYSTEM_MAX_SUBSYSTEMS;
#if 0
RARCH_LOG("Subsystems: %d\n", subsystem_current_count);

for (i = 0; i < subsystem_current_count; i++)
{
#if 1
RARCH_LOG("Subsystem ID: %d\n", i);
RARCH_LOG("Special game type: %s\n", subsystem_data[i].desc);
RARCH_LOG(" Ident: %s\n", subsystem_data[i].ident);
RARCH_LOG(" ID: %u\n", subsystem_data[i].id);
RARCH_LOG(" Content:\n");
#endif

for (j = 0; j < subsystem_data[i].num_roms; j++)
{
RARCH_LOG(" %s (%s)\n",
subsystem_data[i].roms[j].desc, subsystem_data[i].roms[j].required ?
"required" : "optional");
}
}
RARCH_LOG("Subsystems: %d\n", subsystem_size);
subsystem_size = size;
RARCH_LOG("Subsystems: %d\n", subsystem_size);
#endif
}
break;
}
Expand Down Expand Up @@ -1461,7 +1469,6 @@ bool rarch_environment_cb(unsigned cmd, void *data)
cb, offsetof(struct retro_hw_render_callback, stencil));
memset(hwr + offsetof(struct retro_hw_render_callback, stencil),
0, sizeof(*cb) - offsetof(struct retro_hw_render_callback, stencil));

}
else
memcpy(hwr, cb, sizeof(*cb));
Expand Down
11 changes: 8 additions & 3 deletions dynamic.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,14 @@ bool init_libretro_sym_custom(enum rarch_core_type type, struct retro_core_t *cu
**/
void uninit_libretro_sym(struct retro_core_t *core);

struct retro_subsystem_info subsystem_data[20];
struct retro_subsystem_rom_info subsystem_data_roms[10][10];
unsigned subsystem_size;
/* Arbitrary twenty subsystems limite */
#define SUBSYSTEM_MAX_SUBSYSTEMS 20
/* Arbitrary 10 roms for each subsystem limit */
#define SUBSYSTEM_MAX_SUBSYSTEM_ROMS 10

struct retro_subsystem_info subsystem_data[SUBSYSTEM_MAX_SUBSYSTEMS];
struct retro_subsystem_rom_info subsystem_data_roms[SUBSYSTEM_MAX_SUBSYSTEMS][SUBSYSTEM_MAX_SUBSYSTEM_ROMS];
unsigned subsystem_current_count;

RETRO_END_DECLS

Expand Down
23 changes: 16 additions & 7 deletions menu/cbs/menu_cbs_sublabel.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,14 +521,23 @@ static int action_bind_sublabel_subsystem_add(
char *s, size_t len)
{
rarch_system_info_t *system = runloop_get_system_info();
const struct retro_subsystem_info *subsystem = (system && subsystem_size > 0) ?
subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL;
const struct retro_subsystem_info *subsystem;

if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
snprintf(s, len, " Current Content: %s",
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
? subsystem->roms[content_get_subsystem_rom_id()].desc
: subsystem->roms[0].desc);
/* Core fully loaded, use the subsystem data */
if (system->subsystem.data)
subsystem = system->subsystem.data + (type - MENU_SETTINGS_SUBSYSTEM_ADD);
/* Core not loaded completely, use the data we peeked on load core */
else
subsystem = subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD);

if (subsystem && subsystem_current_count > 0)
{
if (content_get_subsystem_rom_id() < subsystem->num_roms)
snprintf(s, len, " Current Content: %s",
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
? subsystem->roms[content_get_subsystem_rom_id()].desc
: subsystem->roms[0].desc);
}

return 0;
}
Expand Down
59 changes: 9 additions & 50 deletions menu/drivers/ozone/ozone.c
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,7 @@ static int ozone_list_push(void *data, void *userdata,
unsigned i = 0;
core_info_list_t *list = NULL;
menu_handle_t *menu = (menu_handle_t*)data;
const struct retro_subsystem_info* subsystem;

switch (type)
{
Expand Down Expand Up @@ -596,56 +597,14 @@ static int ozone_list_push(void *data, void *userdata,
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_setting(&entry);

if (subsystem_size > 0)
{
const struct retro_subsystem_info* subsystem = subsystem_data;
for (i = 0; i < subsystem_size; i++, subsystem++)
{
char s[PATH_MAX_LENGTH];
if (content_get_subsystem() == i)
{
if (content_get_subsystem_rom_id() < subsystem->num_roms)
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
else
{
snprintf(s, sizeof(s),
"Start %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD),
MENU_ENUM_LABEL_SUBSYSTEM_LOAD,
MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0);
}
}
else
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
}
}
/* Core fully loaded, use the subsystem data */
if (system->subsystem.data)
subsystem = system->subsystem.data;
/* Core not loaded completely, use the data we peeked on load core */
else
subsystem = subsystem_data;

menu_subsystem_populate(subsystem, info);
}

entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
Expand Down
59 changes: 9 additions & 50 deletions menu/drivers/xmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -5453,6 +5453,7 @@ static int xmb_list_push(void *data, void *userdata,
unsigned i = 0;
core_info_list_t *list = NULL;
menu_handle_t *menu = (menu_handle_t*)data;
const struct retro_subsystem_info* subsystem;

switch (type)
{
Expand Down Expand Up @@ -5548,56 +5549,14 @@ static int xmb_list_push(void *data, void *userdata,

entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_setting(&entry);
if (subsystem_size > 0)
{
const struct retro_subsystem_info* subsystem = subsystem_data;
for (i = 0; i < subsystem_size; i++, subsystem++)
{
char s[PATH_MAX_LENGTH];
if (content_get_subsystem() == i)
{
if (content_get_subsystem_rom_id() < subsystem->num_roms)
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
else
{
snprintf(s, sizeof(s),
"Start %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD),
MENU_ENUM_LABEL_SUBSYSTEM_LOAD,
MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0);
}
}
else
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
}
}
/* Core fully loaded, use the subsystem data */
if (system->subsystem.data)
subsystem = system->subsystem.data;
/* Core not loaded completely, use the data we peeked on load core */
else
subsystem = subsystem_data;

menu_subsystem_populate(subsystem, info);
}

entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
Expand Down
54 changes: 54 additions & 0 deletions menu/menu_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -2654,3 +2654,57 @@ void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha)
rgba[2] = rgba[6] = rgba[10] = rgba[14] = ((hex >> 0 ) & 0xFF) * (1.0f / 255.0f); /* b */
rgba[3] = rgba[7] = rgba[11] = rgba[15] = alpha;
}

void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info)
{
int i = 0;
if (subsystem && subsystem_current_count > 0)
{
for (i = 0; i < subsystem_current_count; i++, subsystem++)
{
char s[PATH_MAX_LENGTH];
if (content_get_subsystem() == i)
{
if (content_get_subsystem_rom_id() < subsystem->num_roms)
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
else
{
snprintf(s, sizeof(s),
"Start %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD),
MENU_ENUM_LABEL_SUBSYSTEM_LOAD,
MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0);
}
}
else
{
snprintf(s, sizeof(s),
"Load %s %s",
subsystem->desc,
i == content_get_subsystem()
? "\u2605" : " ");
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD),
MENU_ENUM_LABEL_SUBSYSTEM_ADD,
MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0);
}
}
}
}
2 changes: 2 additions & 0 deletions menu/menu_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,8 @@ void menu_driver_destroy(void);

void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha);

void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info);

extern uintptr_t menu_display_white_texture;

extern menu_display_ctx_driver_t menu_display_ctx_gl;
Expand Down
Loading

0 comments on commit e33dfb5

Please sign in to comment.