mirror of
https://github.com/holub/mame
synced 2025-05-29 09:03:08 +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_full_software_name(NULL),
|
||||||
m_software_info_ptr(NULL),
|
m_software_info_ptr(NULL),
|
||||||
m_software_part_ptr(NULL),
|
m_software_part_ptr(NULL),
|
||||||
|
m_software_list_name(NULL),
|
||||||
m_readonly(false),
|
m_readonly(false),
|
||||||
m_created(false),
|
m_created(false),
|
||||||
m_formatlist(NULL),
|
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 */
|
/* 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)
|
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"
|
// 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
|
// 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)
|
if (m_software_info_ptr && m_full_software_name)
|
||||||
m_err = set_image_filename(m_software_info_ptr->shortname);
|
m_err = set_image_filename(m_full_software_name);
|
||||||
|
|
||||||
m_from_swlist = TRUE;
|
m_from_swlist = TRUE;
|
||||||
}
|
}
|
||||||
@ -1045,6 +1046,7 @@ void device_image_interface::clear()
|
|||||||
m_full_software_name = NULL;
|
m_full_software_name = NULL;
|
||||||
m_software_info_ptr = NULL;
|
m_software_info_ptr = NULL;
|
||||||
m_software_part_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;
|
image = _image;
|
||||||
|
|
||||||
sld = 0;
|
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();
|
swi = image->software_entry();
|
||||||
swp = image->part_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()
|
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(":");
|
||||||
temp_name.cat(swp->name);
|
temp_name.cat(swp->name);
|
||||||
hook_load(temp_name, true);
|
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)));
|
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;
|
state = SELECT_ONE_PART;
|
||||||
} else {
|
} else {
|
||||||
image->load(software_info_name);
|
swp = software_find_part(swi, NULL, NULL);
|
||||||
|
load_software_part();
|
||||||
software_list_close(swl);
|
software_list_close(swl);
|
||||||
ui_menu::stack_pop(machine());
|
ui_menu::stack_pop(machine());
|
||||||
}
|
}
|
||||||
|
@ -221,6 +221,7 @@ public:
|
|||||||
|
|
||||||
const software_info *software_entry() { return m_software_info_ptr; }
|
const software_info *software_entry() { return m_software_info_ptr; }
|
||||||
const software_part *part_entry() { return m_software_part_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; }
|
void set_working_directory(const char *working_directory) { m_working_directory = working_directory; }
|
||||||
const char * working_directory();
|
const char * working_directory();
|
||||||
@ -296,6 +297,7 @@ protected:
|
|||||||
char *m_full_software_name;
|
char *m_full_software_name;
|
||||||
software_info *m_software_info_ptr;
|
software_info *m_software_info_ptr;
|
||||||
software_part *m_software_part_ptr;
|
software_part *m_software_part_ptr;
|
||||||
|
char *m_software_list_name;
|
||||||
|
|
||||||
/* info read from the hash file/software list */
|
/* info read from the hash file/software list */
|
||||||
astring m_longname;
|
astring m_longname;
|
||||||
|
@ -539,7 +539,7 @@ static void display_loading_rom_message(rom_load_data *romdata, const char *name
|
|||||||
else
|
else
|
||||||
sprintf(buffer, "Loading Complete");
|
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.
|
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_list *software_list_ptr = NULL;
|
||||||
software_info *software_info_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;
|
bool result = false;
|
||||||
*sw_info = NULL;
|
*sw_info = NULL;
|
||||||
*sw_part = 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);
|
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++;
|
new_part++;
|
||||||
}
|
}
|
||||||
|
*list_name = auto_strdup( image->device().machine(), swlist_name );
|
||||||
|
|
||||||
/* Tell the world which part we actually loaded */
|
/* 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 );
|
*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);
|
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);
|
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);
|
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