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

View File

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

View File

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

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

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