Fix regression on softload item load using menus (no whatsnew)

This commit is contained in:
Miodrag Milanovic 2012-01-30 14:32:31 +00:00
parent f8611a98a2
commit 9720d9b577
5 changed files with 24 additions and 8 deletions

View File

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

View File

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

View File

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

View File

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

View File

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