summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/softlist.c
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2010-07-06 09:27:57 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2010-07-06 09:27:57 +0000
commit4d9a17ee08327b44238d0393f2fc4162d4db6159 (patch)
treeed9420e7066ebdc987898e75f728d6953672d7f6 /src/emu/softlist.c
parentfc27db65e14e3e7722d1f45684f47179b838e4ed (diff)
Support for multiple software list per driver [Miodrag Milanovic]
Diffstat (limited to 'src/emu/softlist.c')
-rw-r--r--src/emu/softlist.c72
1 files changed, 35 insertions, 37 deletions
diff --git a/src/emu/softlist.c b/src/emu/softlist.c
index abf8f47c18a..c0669264ce1 100644
--- a/src/emu/softlist.c
+++ b/src/emu/softlist.c
@@ -991,38 +991,39 @@ bool load_software_part(device_image_interface *image, const char *path, softwar
else
{
/* Loop through all the software lists named in the driver */
- running_device *swlists = devtag_get_device( image->device().machine, __SOFTWARE_LIST_TAG );
-
- if ( swlists )
+ for (device_t *swlists = image->device().machine->m_devicelist.first(SOFTWARE_LIST); swlists != NULL; swlists = swlists->typenext())
{
-
- software_list_config *swlist = (software_list_config *)downcast<const legacy_device_config_base *>(&swlists->baseconfig())->inline_config();
- UINT32 i = DEVINFO_STR_SWLIST_0;
-
- while ( ! software_part_ptr && i <= DEVINFO_STR_SWLIST_MAX )
+ if ( swlists )
{
- swlist_name = swlist->list_name[i-DEVINFO_STR_SWLIST_0];
+
+ software_list_config *swlist = (software_list_config *)downcast<const legacy_device_config_base *>(&swlists->baseconfig())->inline_config();
+ UINT32 i = DEVINFO_STR_SWLIST_0;
- if ( swlist_name && *swlist_name )
+ while ( ! software_part_ptr && i <= DEVINFO_STR_SWLIST_MAX )
{
- if ( software_list_ptr )
- {
- software_list_close( software_list_ptr );
- }
-
- software_list_ptr = software_list_open( image->device().machine->options(), swlist_name, FALSE, NULL );
+ swlist_name = swlist->list_name[i-DEVINFO_STR_SWLIST_0];
- if ( software_list_ptr )
+ if ( swlist_name && *swlist_name )
{
- software_info_ptr = software_list_find( software_list_ptr, swname, NULL );
+ if ( software_list_ptr )
+ {
+ software_list_close( software_list_ptr );
+ }
+
+ software_list_ptr = software_list_open( image->device().machine->options(), swlist_name, FALSE, NULL );
- if ( software_info_ptr )
+ if ( software_list_ptr )
{
- software_part_ptr = software_find_part( software_info_ptr, swpart, interface );
+ software_info_ptr = software_list_find( software_list_ptr, swname, NULL );
+
+ if ( software_info_ptr )
+ {
+ software_part_ptr = software_find_part( software_info_ptr, swpart, interface );
+ }
}
}
+ i++;
}
- i++;
}
}
@@ -1387,29 +1388,26 @@ void ui_mess_menu_software_list(running_machine *machine, ui_menu *menu, void *p
/* list of available software lists - i.e. cartridges, floppies */
static void ui_mess_menu_populate_software_list(running_machine *machine, ui_menu *menu)
{
- for (const device_config *dev = machine->config->m_devicelist.first(); dev != NULL; dev = dev->next())
+ for (const device_config *dev = machine->config->m_devicelist.first(SOFTWARE_LIST); dev != NULL; dev = dev->typenext())
{
- if (!strcmp(dev->tag(), __SOFTWARE_LIST_TAG))
- {
- software_list_config *swlist = (software_list_config *)downcast<const legacy_device_config_base *>(dev)->inline_config();
+ software_list_config *swlist = (software_list_config *)downcast<const legacy_device_config_base *>(dev)->inline_config();
- for (int i = 0; i < DEVINFO_STR_SWLIST_MAX - DEVINFO_STR_SWLIST_0; i++)
+ for (int i = 0; i < DEVINFO_STR_SWLIST_MAX - DEVINFO_STR_SWLIST_0; i++)
+ {
+ if (swlist->list_name[i])
{
- if (swlist->list_name[i])
- {
- software_list *list = software_list_open(machine->options(), swlist->list_name[i], FALSE, NULL);
+ software_list *list = software_list_open(machine->options(), swlist->list_name[i], FALSE, NULL);
- if (list)
+ if (list)
+ {
+ /* todo: fix this */
+ for (software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo))
{
- /* todo: fix this */
- for (software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo))
- {
- }
+ }
- ui_menu_item_append(menu, list->description, NULL, 0, swlist->list_name[i]);
+ ui_menu_item_append(menu, list->description, NULL, 0, swlist->list_name[i]);
- software_list_close(list);
- }
+ software_list_close(list);
}
}
}