mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
check characters in softlist setnames, fix errors (nw)
This commit is contained in:
parent
5c334d982f
commit
0036e43b7b
@ -15256,7 +15256,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-68">
|
||||
<software name="fs2_68">
|
||||
<description>Fun School 2 (For 6-8 year olds)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
@ -15267,7 +15267,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-ov8">
|
||||
<software name="fs2_ov8">
|
||||
<description>Fun School 2 (For the Over-8s)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
@ -15278,7 +15278,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-un6">
|
||||
<software name="fs2_un6">
|
||||
<description>Fun School 2 (For Under 6s)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
|
@ -3730,7 +3730,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-68">
|
||||
<software name="fs2_68">
|
||||
<description>Fun School 2 (For 6-8 year olds)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
@ -3741,7 +3741,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-ov8">
|
||||
<software name="fs2_ov8">
|
||||
<description>Fun School 2 (For the Over-8s)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
|
@ -3991,7 +3991,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-68">
|
||||
<software name="fs2_68">
|
||||
<description>Fun School 2 (For 6-8 year olds)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
@ -4002,7 +4002,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-ov8">
|
||||
<software name="fs2_ov8">
|
||||
<description>Fun School 2 (For the Over-8s)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
@ -4013,7 +4013,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fs2-un6">
|
||||
<software name="fs2_un6">
|
||||
<description>Fun School 2 (For Under 6s)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Database Educational Software</publisher>
|
||||
|
@ -621,7 +621,7 @@ come from... they might be eventually removed -->
|
||||
|
||||
|
||||
<!-- This is only Sord memory expansion -->
|
||||
<software name="em-5" supported="no">
|
||||
<software name="em_5" supported="no">
|
||||
<description>EM-5 Expansion memory 32Kb</description>
|
||||
<year>198?</year>
|
||||
<publisher>Sord</publisher>
|
||||
|
@ -9178,7 +9178,7 @@ If the program doesn't automatically start, start it with RUN
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="tvc-ass">
|
||||
<software name="tvc_ass">
|
||||
<description>TVC-Assembler v1.0</description>
|
||||
<year>198?</year>
|
||||
<publisher><unknown></publisher>
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
<softwarelist name="unichamp" description="Unisonic Champion 2711 cartridges">
|
||||
|
||||
<software name="pac-02">
|
||||
<software name="pac_02">
|
||||
<description>Professional Poker Games</description>
|
||||
<year>1977</year>
|
||||
<publisher>Unisonic</publisher>
|
||||
@ -15,7 +15,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pac-03">
|
||||
<software name="pac_03">
|
||||
<description>Assorted Family Fun</description>
|
||||
<year>1977</year>
|
||||
<publisher>Unisonic</publisher>
|
||||
@ -27,7 +27,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pac-04">
|
||||
<software name="pac_04">
|
||||
<description>Family Card Games</description>
|
||||
<year>1977</year>
|
||||
<publisher>Unisonic</publisher>
|
||||
@ -39,7 +39,7 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pac-05">
|
||||
<software name="pac_05">
|
||||
<description>Math</description>
|
||||
<year>1977</year>
|
||||
<publisher>Unisonic</publisher>
|
||||
|
@ -419,6 +419,8 @@ void software_list_device::internal_validity_check(validity_checker &valid)
|
||||
softlist_map descriptions;
|
||||
for (const software_info &swinfo : get_info())
|
||||
{
|
||||
std::string const &shortname(swinfo.shortname());
|
||||
|
||||
// first parse and output core errors if any
|
||||
if (m_errors.length() > 0)
|
||||
{
|
||||
@ -431,52 +433,51 @@ void software_list_device::internal_validity_check(validity_checker &valid)
|
||||
// Did we lost any description?
|
||||
if (swinfo.longname().empty())
|
||||
{
|
||||
osd_printf_error("%s: %s has no description\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s has no description\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
// Did we lost any year?
|
||||
if (swinfo.year().empty())
|
||||
{
|
||||
osd_printf_error("%s: %s has no year\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s has no year\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
// Did we lost any publisher?
|
||||
if (swinfo.publisher().empty())
|
||||
{
|
||||
osd_printf_error("%s: %s has no publisher\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s has no publisher\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
// Did we lost the software parts?
|
||||
if (swinfo.parts().empty())
|
||||
{
|
||||
osd_printf_error("%s: %s has no part\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s has no part\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
// Second, since the xml is fine, run additional checks:
|
||||
|
||||
// check for duplicate names
|
||||
if (!names.insert(std::make_pair(swinfo.shortname(), &swinfo)).second)
|
||||
if (!names.insert(std::make_pair(shortname, &swinfo)).second)
|
||||
{
|
||||
const software_info *match = names.find(swinfo.shortname())->second;
|
||||
osd_printf_error("%s: %s is a duplicate name (%s)\n", filename(), swinfo.shortname().c_str(), match->shortname().c_str());
|
||||
const software_info *match = names.find(shortname)->second;
|
||||
osd_printf_error("%s: %s is a duplicate name (%s)\n", filename(), shortname.c_str(), match->shortname().c_str());
|
||||
}
|
||||
|
||||
// check for duplicate descriptions
|
||||
std::string longname = std::string(swinfo.longname());
|
||||
std::string longname(swinfo.longname());
|
||||
if (!descriptions.insert(std::make_pair(strmakelower(longname), &swinfo)).second)
|
||||
osd_printf_error("%s: %s is a duplicate description (%s)\n", filename(), swinfo.longname().c_str(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s is a duplicate description (%s)\n", filename(), swinfo.longname().c_str(), shortname.c_str());
|
||||
|
||||
bool is_clone = false;
|
||||
if (!swinfo.parentname().empty())
|
||||
bool const is_clone(!swinfo.parentname().empty());
|
||||
if (is_clone)
|
||||
{
|
||||
is_clone = true;
|
||||
if (swinfo.parentname() == swinfo.shortname())
|
||||
if (swinfo.parentname() == shortname)
|
||||
{
|
||||
osd_printf_error("%s: %s is set as a clone of itself\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s is set as a clone of itself\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
@ -484,21 +485,29 @@ void software_list_device::internal_validity_check(validity_checker &valid)
|
||||
const software_info *swinfo2 = find(swinfo.parentname().c_str());
|
||||
|
||||
if (swinfo2 == nullptr)
|
||||
osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname().c_str(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname().c_str(), shortname.c_str());
|
||||
else if (!swinfo2->parentname().empty())
|
||||
osd_printf_error("%s: %s is a clone of a clone\n", filename(), swinfo.shortname().c_str());
|
||||
osd_printf_error("%s: %s is a clone of a clone\n", filename(), shortname.c_str());
|
||||
}
|
||||
|
||||
// make sure the driver name is 8 chars or less
|
||||
if ((is_clone && swinfo.shortname().length() > NAME_LEN_CLONE) || (!is_clone && swinfo.shortname().length() > NAME_LEN_PARENT))
|
||||
osd_printf_error("%s: %s %s driver name must be %d characters or less\n", filename(), swinfo.shortname().c_str(),
|
||||
// make sure the driver name isn't too long
|
||||
if (shortname.length() > (is_clone ? NAME_LEN_CLONE : NAME_LEN_PARENT))
|
||||
osd_printf_error("%s: %s %s software name must be %d characters or less\n", filename(), shortname.c_str(),
|
||||
is_clone ? "clone" : "parent", is_clone ? NAME_LEN_CLONE : NAME_LEN_PARENT);
|
||||
|
||||
// make sure the year is only digits, '?' or '+'
|
||||
for (const char *s = swinfo.year().c_str(); *s != 0; s++)
|
||||
if (!isdigit((UINT8)*s) && *s != '?' && *s != '+')
|
||||
// make sure the driver name doesn't contain invalid characters
|
||||
for (char ch : shortname)
|
||||
if (((ch < '0') || (ch > '9')) && ((ch < 'a') || (ch > 'z')) && (ch != '_'))
|
||||
{
|
||||
osd_printf_error("%s: %s has an invalid year '%s'\n", filename(), swinfo.shortname().c_str(), swinfo.year().c_str());
|
||||
osd_printf_error("%s: %s contains invalid characters\n", filename(), shortname.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
// make sure the year is only digits, '?' or '+'
|
||||
for (char ch : swinfo.year())
|
||||
if (!isdigit(UINT8(ch)) && (ch != '?') && (ch != '+'))
|
||||
{
|
||||
osd_printf_error("%s: %s has an invalid year '%s'\n", filename(), shortname.c_str(), swinfo.year().c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
@ -506,18 +515,16 @@ void software_list_device::internal_validity_check(validity_checker &valid)
|
||||
for (const software_part &part : swinfo.parts())
|
||||
{
|
||||
if (part.interface().empty())
|
||||
osd_printf_error("%s: %s has a part (%s) without interface\n", filename(), swinfo.shortname().c_str(), part.name().c_str());
|
||||
osd_printf_error("%s: %s has a part (%s) without interface\n", filename(), shortname.c_str(), part.name().c_str());
|
||||
|
||||
if (part.romdata().empty())
|
||||
osd_printf_error("%s: %s has a part (%s) with no data\n", filename(), swinfo.shortname().c_str(), part.name().c_str());
|
||||
osd_printf_error("%s: %s has a part (%s) with no data\n", filename(), shortname.c_str(), part.name().c_str());
|
||||
|
||||
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().c_str(), part.name().c_str());
|
||||
osd_printf_error("%s: %s has a part (%s) whose name is duplicate\n", filename(), shortname.c_str(), part.name().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// release all the memory
|
||||
release();
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user