diff options
Diffstat (limited to 'src/emu/softlist.cpp')
-rw-r--r-- | src/emu/softlist.cpp | 254 |
1 files changed, 127 insertions, 127 deletions
diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index a8cdbb0f19f..2a5ceaccdcc 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -22,7 +22,7 @@ // TYPE DEFINITIONS //************************************************************************** -typedef tagmap_t<software_info *> softlist_map; +typedef std::unordered_map<std::string,software_info *> softlist_map; // ======================> softlist_parser @@ -45,7 +45,7 @@ private: // internal parsing helpers const char *filename() const { return m_list.filename(); } - const char *infoname() const { return (m_current_info != NULL) ? m_current_info->shortname() : "???"; } + const char *infoname() const { return (m_current_info != nullptr) ? m_current_info->shortname() : "???"; } int line() const { return XML_GetCurrentLineNumber(m_parser); } int column() const { return XML_GetCurrentColumnNumber(m_parser); } const char *parser_error() const { return XML_ErrorString(XML_GetErrorCode(m_parser)); } @@ -107,7 +107,7 @@ const device_type SOFTWARE_LIST = &device_creator<software_list_device>; //------------------------------------------------- software_part::software_part(software_info &info, const char *name, const char *interface) - : m_next(NULL), + : m_next(nullptr), m_info(info), m_name(name), m_interface(interface) @@ -125,13 +125,13 @@ software_part::software_part(software_info &info, const char *name, const char * const char *software_part::feature(const char *feature_name) const { - assert(feature_name != NULL); + assert(feature_name != nullptr); // scan the feature list for an entry matching feature_name and return the value - for (const feature_list_item *feature = m_featurelist.first(); feature != NULL; feature = feature->next()) + for (const feature_list_item *feature = m_featurelist.first(); feature != nullptr; feature = feature->next()) if (strcmp(feature->name(), feature_name) == 0) return feature->value(); - return NULL; + return nullptr; } @@ -146,7 +146,7 @@ bool software_part::is_compatible(const software_list_device &swlistdev) const // get the compatibility feature and the softlist filter; if either is NULL, assume compatible const char *compatibility = feature("compatibility"); const char *filter = swlistdev.filter(); - if (compatibility == NULL || filter == NULL) + if (compatibility == nullptr || filter == nullptr) return true; // copy the comma-delimited strings and ensure they end with a final comma @@ -172,7 +172,7 @@ bool software_part::is_compatible(const software_list_device &swlistdev) const bool software_part::matches_interface(const char *interface_list) const { // if we have no interface, then we match by default - if (m_interface == NULL) + if (m_interface == nullptr) return true; // copy the comma-delimited interface list and ensure it ends with a final comma @@ -194,21 +194,21 @@ bool software_part::matches_interface(const char *interface_list) const //------------------------------------------------- software_info::software_info(software_list_device &list, const char *name, const char *parent, const char *supported) - : m_next(NULL), + : m_next(nullptr), m_list(list), m_supported(SOFTWARE_SUPPORTED_YES), m_shortname(name), - m_longname(NULL), + m_longname(nullptr), m_parentname(parent), - m_year(NULL), - m_publisher(NULL) + m_year(nullptr), + m_publisher(nullptr) { // ensure strings we are passed are in the string pool assert(list.string_pool_contains(name)); assert(list.string_pool_contains(parent)); // handle the supported flag if provided - if (supported != NULL) + if (supported != nullptr) { if (strcmp(supported, "partial") == 0) m_supported = SOFTWARE_SUPPORTED_PARTIAL; @@ -226,21 +226,21 @@ software_info::software_info(software_list_device &list, const char *name, const software_part *software_info::find_part(const char *partname, const char *interface) { // if neither partname nor interface supplied, then we just return the first entry - if (partname != NULL && strlen(partname)==0) partname = NULL; + if (partname != nullptr && strlen(partname)==0) partname = nullptr; - if (partname == NULL && interface == NULL) + if (partname == nullptr && interface == nullptr) return m_partdata.first(); // look for the part by name and match against the interface if provided - for (software_part *part = m_partdata.first(); part != NULL; part = part->next()) - if (partname != NULL && strcmp(partname, part->name()) == 0) + for (software_part *part = m_partdata.first(); part != nullptr; part = part->next()) + if (partname != nullptr && strcmp(partname, part->name()) == 0) { - if (interface == NULL || part->matches_interface(interface)) + if (interface == nullptr || part->matches_interface(interface)) return part; } - else if (partname == NULL && part->matches_interface(interface)) + else if (partname == nullptr && part->matches_interface(interface)) return part; - return NULL; + return nullptr; } @@ -255,7 +255,7 @@ bool software_info::has_multiple_parts(const char *interface) const int count = 0; // increment the count for each match and stop if we hit more than 1 - for (software_part *part = first_part(); part != NULL; part = part->next()) + for (software_part *part = first_part(); part != nullptr; part = part->next()) if (part->matches_interface(interface)) if (++count > 1) return true; @@ -276,10 +276,10 @@ bool software_info::has_multiple_parts(const char *interface) const software_list_device::software_list_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, SOFTWARE_LIST, "Software list", tag, owner, clock, "software_list", __FILE__), m_list_type(SOFTWARE_LIST_ORIGINAL_SYSTEM), - m_filter(NULL), + m_filter(nullptr), m_parsed(false), - m_file(mconfig.options().hash_path(), OPEN_FLAG_READ), - m_description(NULL) + m_file(mconfig.options().hash_path(), OPEN_FLAG_READ), + m_description(nullptr) { } @@ -326,7 +326,7 @@ void software_list_device::device_start() void software_list_device::find_approx_matches(const char *name, int matches, software_info **list, const char *interface) { // if no name, return - if (name == NULL || name[0] == 0) + if (name == nullptr || name[0] == 0) return; // initialize everyone's states @@ -334,14 +334,14 @@ void software_list_device::find_approx_matches(const char *name, int matches, so for (int matchnum = 0; matchnum < matches; matchnum++) { penalty[matchnum] = 9999; - list[matchnum] = NULL; + list[matchnum] = nullptr; } // iterate over our info (will cause a parse if needed) - for (software_info *swinfo = first_software_info(); swinfo != NULL; swinfo = swinfo->next()) + for (software_info *swinfo = first_software_info(); swinfo != nullptr; swinfo = swinfo->next()) { software_part *part = swinfo->first_part(); - if ((interface == NULL || part->matches_interface(interface)) && part->is_compatible(*this)) + if ((interface == nullptr || part->matches_interface(interface)) && part->is_compatible(*this)) { // pick the best match between driver name and description int longpenalty = driver_list::penalty_compare(name, swinfo->longname()); @@ -377,7 +377,7 @@ void software_list_device::release() { osd_printf_verbose("Resetting %s\n", m_file.filename()); m_parsed = false; - m_description = NULL; + m_description = nullptr; m_errors.clear(); m_infolist.reset(); m_stringpool.reset(); @@ -393,10 +393,10 @@ software_list_device *software_list_device::find_by_name(const machine_config &c { // iterate over each device in the system and find a match software_list_device_iterator deviter(config.root_device()); - for (software_list_device *swlistdev = deviter.first(); swlistdev != NULL; swlistdev = deviter.next()) + for (software_list_device *swlistdev = deviter.first(); swlistdev != nullptr; swlistdev = deviter.next()) if (strcmp(swlistdev->list_name(), name) == 0) return swlistdev; - return NULL; + return nullptr; } @@ -415,14 +415,14 @@ void software_list_device::display_matches(const machine_config &config, const c "supported software items (best match first):\n\n", name); // iterate through lists - for (software_list_device *swlistdev = deviter.first(); swlistdev != NULL; swlistdev = deviter.next()) + for (software_list_device *swlistdev = deviter.first(); swlistdev != nullptr; swlistdev = deviter.next()) { // get the top 16 approximate matches for the selected device interface (i.e. only carts for cartslot, etc.) - software_info *matches[16] = { 0 }; + software_info *matches[16] = { nullptr }; swlistdev->find_approx_matches(name, ARRAY_LENGTH(matches), matches, interface); // if we found some, print them - if (matches[0] != 0) + if (matches[0] != nullptr) { // different output depending on original system or compatible if (swlistdev->list_type() == SOFTWARE_LIST_ORIGINAL_SYSTEM) @@ -431,9 +431,9 @@ void software_list_device::display_matches(const machine_config &config, const c osd_printf_error("* Compatible software list \"%s\" (%s) matches: \n", swlistdev->list_name(), swlistdev->description()); // print them out - for (int softnum = 0; softnum < ARRAY_LENGTH(matches); softnum++) - if (matches[softnum] != NULL) - osd_printf_error("%-18s%s\n", matches[softnum]->shortname(), matches[softnum]->longname()); + for (auto & matche : matches) + if (matche != nullptr) + osd_printf_error("%-18s%s\n", matche->shortname(), matche->longname()); osd_printf_error("\n"); } @@ -450,13 +450,13 @@ void software_list_device::display_matches(const machine_config &config, const c software_info *software_list_device::find(const char *look_for, software_info *prev) { // NULL search returns nothing - if (look_for == NULL) - return NULL; + if (look_for == nullptr) + return nullptr; - bool iswild = strchr(look_for, '*') != NULL || strchr(look_for, '?'); + bool iswild = strchr(look_for, '*') != nullptr || strchr(look_for, '?'); // find a match (will cause a parse if needed when calling first_software_info) - for (prev = (prev != NULL) ? prev->next() : first_software_info(); prev != NULL; prev = prev->next()) + for (prev = (prev != nullptr) ? prev->next() : first_software_info(); prev != nullptr; prev = prev->next()) if ((iswild && core_strwildcmp(look_for, prev->shortname()) == 0) || core_stricmp(look_for, prev->shortname()) == 0) break; @@ -525,7 +525,7 @@ void software_list_device::internal_validity_check(validity_checker &valid) softlist_map names; softlist_map descriptions; - for (software_info *swinfo = first_software_info(); swinfo != NULL; swinfo = swinfo->next()) + for (software_info *swinfo = first_software_info(); swinfo != nullptr; swinfo = swinfo->next()) { // first parse and output core errors if any if (m_errors.length() > 0) @@ -537,21 +537,21 @@ void software_list_device::internal_validity_check(validity_checker &valid) // Now check if the xml data is valid: // Did we lost any description? - if (swinfo->longname() == NULL) + if (swinfo->longname() == nullptr) { osd_printf_error("%s: %s has no description\n", filename(), swinfo->shortname()); break; } // Did we lost any year? - if (swinfo->year() == NULL) + if (swinfo->year() == nullptr) { osd_printf_error("%s: %s has no year\n", filename(), swinfo->shortname()); break; } // Did we lost any publisher? - if (swinfo->publisher() == NULL) + if (swinfo->publisher() == nullptr) { osd_printf_error("%s: %s has no publisher\n", filename(), swinfo->shortname()); break; @@ -567,19 +567,19 @@ void software_list_device::internal_validity_check(validity_checker &valid) // Second, since the xml is fine, run additional checks: // check for duplicate names - if (names.add(swinfo->shortname(), swinfo, false) == TMERR_DUPLICATE) + if (!names.insert(std::make_pair(swinfo->shortname(), swinfo)).second) { - software_info *match = names.find(swinfo->shortname()); + software_info *match = names.find(swinfo->shortname())->second; osd_printf_error("%s: %s is a duplicate name (%s)\n", filename(), swinfo->shortname(), match->shortname()); } // check for duplicate descriptions std::string longname = std::string(swinfo->longname()); - if (descriptions.add(strmakelower(longname).c_str(), swinfo, false) == TMERR_DUPLICATE) + if (!descriptions.insert(std::make_pair(strmakelower(longname), swinfo)).second) osd_printf_error("%s: %s is a duplicate description (%s)\n", filename(), swinfo->longname(), swinfo->shortname()); bool is_clone = false; - if (swinfo->parentname() != NULL) + if (swinfo->parentname() != nullptr) { is_clone = true; if (strcmp(swinfo->parentname(), swinfo->shortname()) == 0) @@ -591,9 +591,9 @@ void software_list_device::internal_validity_check(validity_checker &valid) // make sure the parent exists software_info *swinfo2 = find(swinfo->parentname()); - if (swinfo2 == NULL) + if (swinfo2 == nullptr) osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo->parentname(), swinfo->shortname()); - else if (swinfo2->parentname() != NULL) + else if (swinfo2->parentname() != nullptr) osd_printf_error("%s: %s is a clone of a clone\n", filename(), swinfo->shortname()); } @@ -611,19 +611,19 @@ void software_list_device::internal_validity_check(validity_checker &valid) } softlist_map part_names; - for (software_part *part = swinfo->first_part(); part != NULL; part = part->next()) + for (software_part *part = swinfo->first_part(); part != nullptr; part = part->next()) { - if (part->interface() == NULL) + if (part->interface() == nullptr) osd_printf_error("%s: %s has a part (%s) without interface\n", filename(), swinfo->shortname(), part->name()); - if (part->romdata() == NULL) + if (part->romdata() == nullptr) osd_printf_error("%s: %s has a part (%s) with no data\n", filename(), swinfo->shortname(), part->name()); - if (part_names.add(part->name(), swinfo, false) == TMERR_DUPLICATE) + if (!part_names.insert(std::make_pair(part->name(), swinfo)).second) osd_printf_error("%s: %s has a part (%s) whose name is duplicate\n", filename(), swinfo->shortname(), part->name()); - for (const rom_entry *data = part->romdata(); data->_name != NULL; data++) - if (data->_hashdata != NULL) + for (const rom_entry *data = part->romdata(); data->_name != nullptr; data++) + if (data->_hashdata != nullptr) { // make sure the hash is valid hash_collection hashes; @@ -652,8 +652,8 @@ softlist_parser::softlist_parser(software_list_device &list, std::string &errors m_errors(errors), m_done(false), m_data_accum_expected(false), - m_current_info(NULL), - m_current_part(NULL), + m_current_info(nullptr), + m_current_part(nullptr), m_pos(POS_ROOT) { osd_printf_verbose("Parsing %s\n", m_list.m_file.filename()); @@ -665,8 +665,8 @@ softlist_parser::softlist_parser(software_list_device &list, std::string &errors memcallbacks.free_fcn = expat_free; // create the parser - m_parser = XML_ParserCreate_MM(NULL, &memcallbacks, NULL); - if (m_parser == NULL) + m_parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); + if (m_parser == nullptr) throw std::bad_alloc(); // set the handlers @@ -708,7 +708,7 @@ void *softlist_parser::expat_malloc(size_t size) void *softlist_parser::expat_realloc(void *ptr, size_t size) { - if (ptr != NULL) global_free_array((UINT8 *)ptr); + if (ptr != nullptr) global_free_array((UINT8 *)ptr); return global_alloc_array_clear(UINT8, size); } @@ -775,16 +775,16 @@ void softlist_parser::parse_attributes(const char **attributes, int numattrs, co void softlist_parser::add_rom_entry(const char *name, const char *hashdata, UINT32 offset, UINT32 length, UINT32 flags) { // get the current part - if (m_current_part == NULL) + if (m_current_part == nullptr) { parse_error("ROM entry added in invalid context"); return; } // make sure we don't add duplicate regions - if (name != NULL && (flags & ROMENTRY_TYPEMASK) == ROMENTRYTYPE_REGION) - for (unsigned int romentry = 0; romentry < m_current_part->m_romdata.size(); romentry++) - if (m_current_part->m_romdata[romentry]._name != NULL && strcmp(m_current_part->m_romdata[romentry]._name, name) == 0) + if (name != nullptr && (flags & ROMENTRY_TYPEMASK) == ROMENTRYTYPE_REGION) + for (auto & elem : m_current_part->m_romdata) + if (elem._name != nullptr && strcmp(elem._name, name) == 0) parse_error("Duplicated dataarea %s in software %s", name, infoname()); // create the new entry and append it @@ -852,12 +852,12 @@ void softlist_parser::end_handler(void *data, const char *name) break; case POS_MAIN: - state->m_current_info = NULL; + state->m_current_info = nullptr; break; case POS_SOFT: state->parse_soft_end(name); - state->m_current_part = NULL; + state->m_current_part = nullptr; break; case POS_PART: @@ -906,10 +906,10 @@ void softlist_parser::parse_root_start(const char *tagname, const char **attribu if (strcmp(tagname, "softwarelist") == 0) { static const char *attrnames[] = { "name", "description" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[1] != NULL) + if (attrvalues[1] != nullptr) m_list.m_description = m_list.add_string(attrvalues[1]); } else @@ -928,10 +928,10 @@ void softlist_parser::parse_main_start(const char *tagname, const char **attribu if (strcmp(tagname, "software") == 0) { static const char *attrnames[] = { "name", "cloneof", "supported" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL) + if (attrvalues[0] != nullptr) m_current_info = &m_list.m_infolist.append(*global_alloc(software_info(m_list, m_list.add_string(attrvalues[0]), m_list.add_string(attrvalues[1]), attrvalues[2]))); else parse_error("No name defined for item"); @@ -949,7 +949,7 @@ void softlist_parser::parse_main_start(const char *tagname, const char **attribu void softlist_parser::parse_soft_start(const char *tagname, const char **attributes) { // get the current info; error if none - if (m_current_info == NULL) + if (m_current_info == nullptr) { parse_error("Tag %s found outside of software context", tagname); return; @@ -971,10 +971,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu else if (strcmp(tagname, "info") == 0) { static const char *attrnames[] = { "name", "value" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL && attrvalues[1] != NULL) + if (attrvalues[0] != nullptr && attrvalues[1] != nullptr) m_current_info->m_other_info.append(*global_alloc(feature_list_item(m_list.add_string(attrvalues[0]), m_list.add_string(attrvalues[1])))); else parse_error("Incomplete other_info definition"); @@ -984,10 +984,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu else if (strcmp(tagname, "sharedfeat") == 0) { static const char *attrnames[] = { "name", "value" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL && attrvalues[1] != NULL) + if (attrvalues[0] != nullptr && attrvalues[1] != nullptr) m_current_info->m_shared_info.append(*global_alloc(feature_list_item(m_list.add_string(attrvalues[0]), m_list.add_string(attrvalues[1])))); else parse_error("Incomplete sharedfeat definition"); @@ -997,10 +997,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu else if (strcmp(tagname, "part" ) == 0) { static const char *attrnames[] = { "name", "interface" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL && attrvalues[1] != NULL && strcmp(attrvalues[0], "") != 0 && strcmp(attrvalues[1], "") != 0) + if (attrvalues[0] != nullptr && attrvalues[1] != nullptr && strcmp(attrvalues[0], "") != 0 && strcmp(attrvalues[1], "") != 0) m_current_part = &m_current_info->m_partdata.append(*global_alloc(software_part(*m_current_info, m_list.add_string(attrvalues[0]), m_list.add_string(attrvalues[1])))); else parse_error("Incomplete part definition"); @@ -1018,7 +1018,7 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu void softlist_parser::parse_part_start(const char *tagname, const char **attributes) { // get the current part; error if none - if (m_current_part == NULL) + if (m_current_part == nullptr) { parse_error("Tag %s found outside of part context", tagname); return; @@ -1028,17 +1028,17 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu if (strcmp(tagname, "dataarea") == 0) { static const char *attrnames[] = { "name", "size", "width", "endianness" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL && attrvalues[1] != NULL && strcmp(attrvalues[0], "") != 0 && strcmp(attrvalues[1], "") != 0) + if (attrvalues[0] != nullptr && attrvalues[1] != nullptr && strcmp(attrvalues[0], "") != 0 && strcmp(attrvalues[1], "") != 0) { // handle region attributes const char *width = attrvalues[2]; const char *endianness = attrvalues[3]; UINT32 regionflags = ROMENTRYTYPE_REGION; - if (width != NULL) + if (width != nullptr) { if (strcmp(width, "8") == 0) regionflags |= ROMREGION_8BIT; @@ -1051,7 +1051,7 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu else parse_error("Invalid dataarea width"); } - if (endianness != NULL) + if (endianness != nullptr) { if (strcmp(endianness, "little") == 0) regionflags |= ROMREGION_LE; @@ -1061,7 +1061,7 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu parse_error("Invalid dataarea endianness"); } - add_rom_entry(attrvalues[0], NULL, 0, strtol(attrvalues[1], NULL, 0), regionflags); + add_rom_entry(attrvalues[0], nullptr, 0, strtol(attrvalues[1], nullptr, 0), regionflags); } else parse_error("Incomplete dataarea definition"); @@ -1071,11 +1071,11 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu else if (strcmp(tagname, "diskarea") == 0) { static const char *attrnames[] = { "name" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL) - add_rom_entry(attrvalues[0], NULL, 0, 1, ROMENTRYTYPE_REGION | ROMREGION_DATATYPEDISK); + if (attrvalues[0] != nullptr) + add_rom_entry(attrvalues[0], nullptr, 0, 1, ROMENTRYTYPE_REGION | ROMREGION_DATATYPEDISK); else parse_error("Incomplete diskarea definition"); } @@ -1084,10 +1084,10 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu else if (strcmp(tagname, "feature") == 0) { static const char *attrnames[] = { "name", "value" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); - if (attrvalues[0] != NULL) + if (attrvalues[0] != nullptr) m_current_part->m_featurelist.append(*global_alloc(feature_list_item(m_list.add_string(attrvalues[0]), m_list.add_string(attrvalues[1])))); else parse_error("Incomplete feature definition"); @@ -1109,7 +1109,7 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu void softlist_parser::parse_data_start(const char *tagname, const char **attributes) { // get the current part; error if none - if (m_current_part == NULL) + if (m_current_part == nullptr) { parse_error("Tag %s found outside of part context", tagname); return; @@ -1119,7 +1119,7 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu if (strcmp(tagname, "rom") == 0) { static const char *attrnames[] = { "name", "size", "crc", "sha1", "offset", "value", "status", "loadflag" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); const char *name = attrvalues[0]; @@ -1130,34 +1130,34 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu const char *value = attrvalues[5]; const char *status = attrvalues[6]; const char *loadflag = attrvalues[7]; - if (sizestr != NULL && offsetstr != NULL) + if (sizestr != nullptr && offsetstr != nullptr) { - UINT32 length = strtol(sizestr, NULL, 0); - UINT32 offset = strtol(offsetstr, NULL, 0); - - if (loadflag != NULL && strcmp(loadflag, "reload") == 0) - add_rom_entry(NULL, NULL, offset, length, ROMENTRYTYPE_RELOAD | ROM_INHERITFLAGS); - else if (loadflag != NULL && strcmp(loadflag, "reload_plain") == 0) - add_rom_entry(NULL, NULL, offset, length, ROMENTRYTYPE_RELOAD); - else if (loadflag != NULL && strcmp(loadflag, "continue") == 0) - add_rom_entry(NULL, NULL, offset, length, ROMENTRYTYPE_CONTINUE | ROM_INHERITFLAGS); - else if (loadflag != NULL && strcmp(loadflag, "fill") == 0) - add_rom_entry(NULL, (const char *)(FPTR)(strtol(value, NULL, 0) & 0xff), offset, length, ROMENTRYTYPE_FILL); - else if (name != NULL) + UINT32 length = strtol(sizestr, nullptr, 0); + UINT32 offset = strtol(offsetstr, nullptr, 0); + + if (loadflag != nullptr && strcmp(loadflag, "reload") == 0) + add_rom_entry(nullptr, nullptr, offset, length, ROMENTRYTYPE_RELOAD | ROM_INHERITFLAGS); + else if (loadflag != nullptr && strcmp(loadflag, "reload_plain") == 0) + add_rom_entry(nullptr, nullptr, offset, length, ROMENTRYTYPE_RELOAD); + else if (loadflag != nullptr && strcmp(loadflag, "continue") == 0) + add_rom_entry(nullptr, nullptr, offset, length, ROMENTRYTYPE_CONTINUE | ROM_INHERITFLAGS); + else if (loadflag != nullptr && strcmp(loadflag, "fill") == 0) + add_rom_entry(nullptr, (const char *)(FPTR)(strtol(value, nullptr, 0) & 0xff), offset, length, ROMENTRYTYPE_FILL); + else if (name != nullptr) { - bool baddump = (status != NULL && strcmp(status, "baddump") == 0); - bool nodump = (status != NULL && strcmp(status, "nodump") == 0); + bool baddump = (status != nullptr && strcmp(status, "baddump") == 0); + bool nodump = (status != nullptr && strcmp(status, "nodump") == 0); std::string hashdata; if (nodump) { strprintf(hashdata, "%s", NO_DUMP); - if (crc != NULL && sha1 != NULL) + if (crc != nullptr && sha1 != nullptr) parse_error("No need for hash definition"); } else { - if (crc != NULL && sha1 != NULL) + if (crc != nullptr && sha1 != nullptr) strprintf(hashdata, "%c%s%c%s%s", hash_collection::HASH_CRC, crc, hash_collection::HASH_SHA1, sha1, (baddump ? BAD_DUMP : "")); else parse_error("Incomplete rom hash definition"); @@ -1165,15 +1165,15 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu // Handle loadflag attribute int romflags = 0; - if (loadflag != NULL && strcmp(loadflag, "load16_word_swap") == 0) + if (loadflag != nullptr && strcmp(loadflag, "load16_word_swap") == 0) romflags = ROM_GROUPWORD | ROM_REVERSE; - else if (loadflag != NULL && strcmp(loadflag, "load16_byte") == 0) + else if (loadflag != nullptr && strcmp(loadflag, "load16_byte") == 0) romflags = ROM_SKIP(1); - else if (loadflag != NULL && strcmp(loadflag, "load32_word_swap") == 0) + else if (loadflag != nullptr && strcmp(loadflag, "load32_word_swap") == 0) romflags = ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2); - else if (loadflag != NULL && strcmp(loadflag, "load32_word") == 0) + else if (loadflag != nullptr && strcmp(loadflag, "load32_word") == 0) romflags = ROM_GROUPWORD | ROM_SKIP(2); - else if (loadflag != NULL && strcmp(loadflag, "load32_byte") == 0) + else if (loadflag != nullptr && strcmp(loadflag, "load32_byte") == 0) romflags = ROM_SKIP(3); add_rom_entry(name, hashdata.c_str(), offset, length, ROMENTRYTYPE_ROM | romflags); @@ -1189,24 +1189,24 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu else if (strcmp(tagname, "disk") == 0) { static const char *attrnames[] = { "name", "sha1", "status", "writeable" }; - const char *attrvalues[ARRAY_LENGTH(attrnames)] = { 0 }; + const char *attrvalues[ARRAY_LENGTH(attrnames)] = { nullptr }; parse_attributes(attributes, ARRAY_LENGTH(attrnames), attrnames, attrvalues); const char *name = attrvalues[0]; const char *sha1 = attrvalues[1]; const char *status = attrvalues[2]; const char *writeablestr = attrvalues[3]; - if (name != NULL && sha1 != NULL) + if (name != nullptr && sha1 != nullptr) { - bool baddump = (status != NULL && strcmp(status, "baddump") == 0); - bool nodump = (status != NULL && strcmp(status, "nodump" ) == 0); - bool writeable = (writeablestr != NULL && strcmp(writeablestr, "yes") == 0); + bool baddump = (status != nullptr && strcmp(status, "baddump") == 0); + bool nodump = (status != nullptr && strcmp(status, "nodump" ) == 0); + bool writeable = (writeablestr != nullptr && strcmp(writeablestr, "yes") == 0); std::string hashdata; strprintf(hashdata, "%c%s%s", hash_collection::HASH_SHA1, sha1, (nodump ? NO_DUMP : (baddump ? BAD_DUMP : ""))); add_rom_entry(name, hashdata.c_str(), 0, 0, ROMENTRYTYPE_ROM | (writeable ? DISK_READWRITE : DISK_READONLY)); } - else if (status == NULL || !strcmp(status, "nodump")) // a no_dump chd is not an incomplete entry + else if (status == nullptr || !strcmp(status, "nodump")) // a no_dump chd is not an incomplete entry parse_error("Incomplete disk definition"); } @@ -1225,7 +1225,7 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu void softlist_parser::parse_soft_end(const char *tagname) { - assert(m_current_info != NULL); + assert(m_current_info != nullptr); // <description> if (strcmp(tagname, "description") == 0) @@ -1243,18 +1243,18 @@ void softlist_parser::parse_soft_end(const char *tagname) else if (strcmp(tagname, "part") == 0) { // get the last part - assert(m_current_part != NULL); - if (m_current_part == NULL) + assert(m_current_part != nullptr); + if (m_current_part == nullptr) return; // was any dataarea/rom information encountered? if so, add a terminator - if (m_current_part->romdata() != NULL) - add_rom_entry(NULL, NULL, 0, 0, ROMENTRYTYPE_END); + if (m_current_part->romdata() != nullptr) + add_rom_entry(nullptr, nullptr, 0, 0, ROMENTRYTYPE_END); // get the info; if present, copy shared data (we assume name/value strings live // in the string pool and don't need to be reallocated) - if (m_current_info != NULL) - for (feature_list_item *item = m_current_info->shared_info(); item != NULL; item = item->next()) + if (m_current_info != nullptr) + for (feature_list_item *item = m_current_info->shared_info(); item != nullptr; item = item->next()) m_current_part->m_featurelist.append(*global_alloc(feature_list_item(item->name(), item->value()))); } } |