mirror of
https://github.com/holub/mame
synced 2025-05-28 16:43:04 +03:00
Fix regression on softload item load using menus (no whatsnew)
This commit is contained in:
parent
f8611a98a2
commit
9720d9b577
@ -82,6 +82,7 @@ device_image_interface::device_image_interface(const machine_config &mconfig, de
|
||||
m_full_software_name(NULL),
|
||||
m_software_info_ptr(NULL),
|
||||
m_software_part_ptr(NULL),
|
||||
m_software_list_name(NULL),
|
||||
m_readonly(false),
|
||||
m_created(false),
|
||||
m_formatlist(NULL),
|
||||
@ -865,11 +866,11 @@ bool device_image_interface::load_internal(const char *path, bool is_create, int
|
||||
/* Check if there's a software list defined for this device and use that if we're not creating an image */
|
||||
if (!filename_has_period)
|
||||
{
|
||||
softload = load_software_part( device().machine().options(), this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name );
|
||||
softload = load_software_part( device().machine().options(), this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name, &m_software_list_name );
|
||||
// if we had launched from softlist with a specified part, e.g. "shortname:part"
|
||||
// we would have recorded the wrong name, so record it again based on software_info
|
||||
if (m_software_info_ptr && m_software_info_ptr->shortname)
|
||||
m_err = set_image_filename(m_software_info_ptr->shortname);
|
||||
if (m_software_info_ptr && m_full_software_name)
|
||||
m_err = set_image_filename(m_full_software_name);
|
||||
|
||||
m_from_swlist = TRUE;
|
||||
}
|
||||
@ -1045,6 +1046,7 @@ void device_image_interface::clear()
|
||||
m_full_software_name = NULL;
|
||||
m_software_info_ptr = NULL;
|
||||
m_software_part_ptr = NULL;
|
||||
m_software_list_name = NULL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
@ -1104,6 +1106,13 @@ ui_menu_control_device_image::ui_menu_control_device_image(running_machine &mach
|
||||
image = _image;
|
||||
|
||||
sld = 0;
|
||||
if (image->software_list_name()) {
|
||||
software_list_device_iterator iter(machine.config().root_device());
|
||||
for (const software_list_device *swlist = iter.first(); swlist != NULL; swlist = iter.next())
|
||||
{
|
||||
if (strcmp(swlist->list_name(),image->software_list_name())==0) sld = swlist;
|
||||
}
|
||||
}
|
||||
swi = image->software_entry();
|
||||
swp = image->part_entry();
|
||||
|
||||
@ -1185,7 +1194,9 @@ void ui_menu_control_device_image::test_create(bool &can_create, bool &need_conf
|
||||
|
||||
void ui_menu_control_device_image::load_software_part()
|
||||
{
|
||||
astring temp_name(swi->shortname);
|
||||
astring temp_name(sld->list_name());
|
||||
temp_name.cat(":");
|
||||
temp_name.cat(swi->shortname);
|
||||
temp_name.cat(":");
|
||||
temp_name.cat(swp->name);
|
||||
hook_load(temp_name, true);
|
||||
@ -1251,7 +1262,8 @@ void ui_menu_control_device_image::handle()
|
||||
ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_software_parts(machine(), container, swi, image->image_interface(), &swp, false, &submenu_result)));
|
||||
state = SELECT_ONE_PART;
|
||||
} else {
|
||||
image->load(software_info_name);
|
||||
swp = software_find_part(swi, NULL, NULL);
|
||||
load_software_part();
|
||||
software_list_close(swl);
|
||||
ui_menu::stack_pop(machine());
|
||||
}
|
||||
|
@ -221,6 +221,7 @@ public:
|
||||
|
||||
const software_info *software_entry() { return m_software_info_ptr; }
|
||||
const software_part *part_entry() { return m_software_part_ptr; }
|
||||
const char *software_list_name() { return m_software_list_name; }
|
||||
|
||||
void set_working_directory(const char *working_directory) { m_working_directory = working_directory; }
|
||||
const char * working_directory();
|
||||
@ -296,6 +297,7 @@ protected:
|
||||
char *m_full_software_name;
|
||||
software_info *m_software_info_ptr;
|
||||
software_part *m_software_part_ptr;
|
||||
char *m_software_list_name;
|
||||
|
||||
/* info read from the hash file/software list */
|
||||
astring m_longname;
|
||||
|
@ -539,7 +539,7 @@ static void display_loading_rom_message(rom_load_data *romdata, const char *name
|
||||
else
|
||||
sprintf(buffer, "Loading Complete");
|
||||
|
||||
ui_set_startup_text(romdata->machine(), buffer, FALSE);
|
||||
if (!ui_is_menu_active()) ui_set_startup_text(romdata->machine(), buffer, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1675,7 +1675,7 @@ static void find_software_item(const machine_config &config, emu_options &option
|
||||
sw_info and sw_part are also set.
|
||||
-------------------------------------------------*/
|
||||
|
||||
bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name)
|
||||
bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name, char**list_name)
|
||||
{
|
||||
software_list *software_list_ptr = NULL;
|
||||
software_info *software_info_ptr = NULL;
|
||||
@ -1685,6 +1685,7 @@ bool load_software_part(emu_options &options, device_image_interface *image, con
|
||||
bool result = false;
|
||||
*sw_info = NULL;
|
||||
*sw_part = NULL;
|
||||
*list_name = NULL;
|
||||
|
||||
find_software_item(image->device().machine().config(), options, image, path, &software_list_ptr, &software_info_ptr, &software_part_ptr, &swlist_name);
|
||||
|
||||
@ -1751,6 +1752,7 @@ bool load_software_part(emu_options &options, device_image_interface *image, con
|
||||
}
|
||||
new_part++;
|
||||
}
|
||||
*list_name = auto_strdup( image->device().machine(), swlist_name );
|
||||
|
||||
/* Tell the world which part we actually loaded */
|
||||
*full_sw_name = auto_alloc_array( image->device().machine(), char, strlen(swlist_name) + strlen(software_info_ptr->shortname) + strlen(software_part_ptr->name) + 3 );
|
||||
|
@ -192,7 +192,7 @@ const char *software_get_clone(emu_options &options, char *swlist, const char *s
|
||||
UINT32 software_get_support(emu_options &options, char *swlist, const char *swname);
|
||||
const char *software_part_get_feature(const software_part *part, const char *feature_name);
|
||||
|
||||
bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name);
|
||||
bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name, char**list_name);
|
||||
|
||||
void software_display_matches(const machine_config &config, emu_options &options,const char *interface,const char *swname_bckp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user