diff options
author | 2010-07-06 09:27:57 +0000 | |
---|---|---|
committer | 2010-07-06 09:27:57 +0000 | |
commit | 4d9a17ee08327b44238d0393f2fc4162d4db6159 (patch) | |
tree | ed9420e7066ebdc987898e75f728d6953672d7f6 /src/emu/softlist.c | |
parent | fc27db65e14e3e7722d1f45684f47179b838e4ed (diff) |
Support for multiple software list per driver [Miodrag Milanovic]
Diffstat (limited to 'src/emu/softlist.c')
-rw-r--r-- | src/emu/softlist.c | 72 |
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); } } } |