mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
Make softlist validation better (no whatsnew)
This commit is contained in:
parent
68aa0f2f61
commit
4e3a633be2
@ -68,12 +68,13 @@ INLINE void ATTR_PRINTF(2,3) parse_error(parse_state *state, const char *fmt, ..
|
||||
unknown_tag
|
||||
-------------------------------------------------*/
|
||||
|
||||
INLINE void unknown_tag(parse_state *state, const char *tagname)
|
||||
INLINE void unknown_tag(software_list *swlist, const char *tagname)
|
||||
{
|
||||
parse_error(state, "[%lu:%lu]: Unknown tag: %s\n",
|
||||
XML_GetCurrentLineNumber(state->parser),
|
||||
XML_GetCurrentColumnNumber(state->parser),
|
||||
tagname);
|
||||
parse_error(&swlist->state, "%s: Unknown tag: %s (line %lu column %lu)\n",
|
||||
swlist->file->filename(),
|
||||
tagname,
|
||||
XML_GetCurrentLineNumber(swlist->state.parser),
|
||||
XML_GetCurrentColumnNumber(swlist->state.parser));
|
||||
}
|
||||
|
||||
|
||||
@ -82,12 +83,13 @@ INLINE void unknown_tag(parse_state *state, const char *tagname)
|
||||
unknown_attribute
|
||||
-------------------------------------------------*/
|
||||
|
||||
INLINE void unknown_attribute(parse_state *state, const char *attrname)
|
||||
INLINE void unknown_attribute(software_list *swlist, const char *attrname)
|
||||
{
|
||||
parse_error(state, "[%lu:%lu]: Unknown attribute: %s\n",
|
||||
XML_GetCurrentLineNumber(state->parser),
|
||||
XML_GetCurrentColumnNumber(state->parser),
|
||||
attrname);
|
||||
parse_error(&swlist->state, "%s: Unknown attribute: %s (line %lu column %lu)\n",
|
||||
swlist->file->filename(),
|
||||
attrname,
|
||||
XML_GetCurrentLineNumber(swlist->state.parser),
|
||||
XML_GetCurrentColumnNumber(swlist->state.parser));
|
||||
}
|
||||
|
||||
|
||||
@ -96,13 +98,14 @@ INLINE void unknown_attribute(parse_state *state, const char *attrname)
|
||||
unknown_attribute_value
|
||||
-------------------------------------------------*/
|
||||
|
||||
INLINE void unknown_attribute_value(parse_state *state,
|
||||
INLINE void unknown_attribute_value(software_list *swlist,
|
||||
const char *attrname, const char *attrvalue)
|
||||
{
|
||||
parse_error(state, "[%lu:%lu]: Unknown attribute value: %s\n",
|
||||
XML_GetCurrentLineNumber(state->parser),
|
||||
XML_GetCurrentColumnNumber(state->parser),
|
||||
attrvalue);
|
||||
parse_error(&swlist->state, "%s: Unknown attribute value: %s (line %lu column %lu)\n",
|
||||
swlist->file->filename(),
|
||||
attrvalue,
|
||||
XML_GetCurrentLineNumber(swlist->state.parser),
|
||||
XML_GetCurrentColumnNumber(swlist->state.parser));
|
||||
}
|
||||
|
||||
|
||||
@ -347,7 +350,7 @@ static void start_handler(void *data, const char *tagname, const char **attribut
|
||||
}
|
||||
else
|
||||
{
|
||||
unknown_tag(&swlist->state, tagname);
|
||||
unknown_tag(swlist, tagname);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -445,7 +448,7 @@ static void start_handler(void *data, const char *tagname, const char **attribut
|
||||
}
|
||||
else
|
||||
{
|
||||
unknown_tag(&swlist->state, tagname);
|
||||
unknown_tag(swlist, tagname);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -544,7 +547,7 @@ static void start_handler(void *data, const char *tagname, const char **attribut
|
||||
}
|
||||
}
|
||||
else
|
||||
unknown_tag(&swlist->state, tagname);
|
||||
unknown_tag(swlist, tagname);
|
||||
|
||||
if (text_dest && swlist->softinfo)
|
||||
swlist->state.text_dest = text_dest;
|
||||
@ -652,8 +655,11 @@ static void start_handler(void *data, const char *tagname, const char **attribut
|
||||
add_feature( swlist, name, value );
|
||||
}
|
||||
}
|
||||
else if (!strcmp(tagname, "dipswitch"))
|
||||
{
|
||||
}
|
||||
else
|
||||
unknown_tag( &swlist->state, tagname );
|
||||
unknown_tag(swlist, tagname );
|
||||
break;
|
||||
|
||||
case POS_DATA:
|
||||
@ -792,8 +798,11 @@ static void start_handler(void *data, const char *tagname, const char **attribut
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!strcmp(tagname, "dipvalue"))
|
||||
{
|
||||
}
|
||||
else
|
||||
unknown_tag(&swlist->state, tagname);
|
||||
unknown_tag(swlist, tagname);
|
||||
break;
|
||||
}
|
||||
swlist->state.pos = (softlist_parse_position) (swlist->state.pos + 1);
|
||||
@ -967,10 +976,11 @@ void software_list_parse(software_list *swlist,
|
||||
swlist->state.done = swlist->file->eof();
|
||||
if (XML_Parse(swlist->state.parser, buf, len, swlist->state.done) == XML_STATUS_ERROR)
|
||||
{
|
||||
parse_error(&swlist->state, "[%lu:%lu]: %s\n",
|
||||
parse_error(&swlist->state, "%s: %s (line %lu column %lu)\n",
|
||||
swlist->file->filename(),
|
||||
XML_ErrorString(XML_GetErrorCode(swlist->state.parser)),
|
||||
XML_GetCurrentLineNumber(swlist->state.parser),
|
||||
XML_GetCurrentColumnNumber(swlist->state.parser),
|
||||
XML_ErrorString(XML_GetErrorCode(swlist->state.parser)));
|
||||
XML_GetCurrentColumnNumber(swlist->state.parser));
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
@ -1666,6 +1676,11 @@ static DEVICE_START( software_list )
|
||||
{
|
||||
}
|
||||
|
||||
void validate_error_proc(const char *message)
|
||||
{
|
||||
mame_printf_error("%s",message);
|
||||
}
|
||||
|
||||
void validate_softlists(emu_options &options)
|
||||
{
|
||||
driver_enumerator drivlist(options);
|
||||
@ -1713,6 +1728,8 @@ void validate_softlists(emu_options &options)
|
||||
if (!seen_before)
|
||||
{
|
||||
lists[list_count++] = swlist->list_name[i];
|
||||
software_list_parse( list, &validate_error_proc, NULL );
|
||||
|
||||
for (software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo))
|
||||
{
|
||||
const char *s;
|
||||
@ -1723,21 +1740,21 @@ void validate_softlists(emu_options &options)
|
||||
/* Did we lost any description? */
|
||||
if (swinfo->longname == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s has no description\n", swlist->list_name[i], swinfo->shortname);
|
||||
mame_printf_error("%s: %s has no description\n", list->file->filename(), swinfo->shortname);
|
||||
error = TRUE; break;
|
||||
}
|
||||
|
||||
/* Did we lost any year? */
|
||||
if (swinfo->year == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s has no year\n", swlist->list_name[i], swinfo->shortname);
|
||||
mame_printf_error("%s: %s has no year\n", list->file->filename(), swinfo->shortname);
|
||||
error = TRUE; break;
|
||||
}
|
||||
|
||||
/* Did we lost any publisher? */
|
||||
if (swinfo->publisher == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s has no publisher\n", swlist->list_name[i], swinfo->shortname);
|
||||
mame_printf_error("%s: %s has no publisher\n", list->file->filename(), swinfo->shortname);
|
||||
error = TRUE; break;
|
||||
}
|
||||
|
||||
@ -1747,7 +1764,7 @@ void validate_softlists(emu_options &options)
|
||||
if (names.add(swinfo->shortname, swinfo, FALSE) == TMERR_DUPLICATE)
|
||||
{
|
||||
software_info *match = names.find(swinfo->shortname);
|
||||
mame_printf_error("%s: %s is a duplicate name (%s)\n", swlist->list_name[i], swinfo->shortname, match->shortname);
|
||||
mame_printf_error("%s: %s is a duplicate name (%s)\n", list->file->filename(), swinfo->shortname, match->shortname);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
@ -1755,7 +1772,7 @@ void validate_softlists(emu_options &options)
|
||||
if (descriptions.add(swinfo->longname, swinfo, FALSE) == TMERR_DUPLICATE)
|
||||
{
|
||||
software_info *match = names.find(swinfo->shortname);
|
||||
mame_printf_error("%s: %s is a duplicate description (%s)\n", swlist->list_name[i], swinfo->longname, match->longname);
|
||||
mame_printf_error("%s: %s is a duplicate description (%s)\n", list->file->filename(), swinfo->longname, match->longname);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
@ -1765,7 +1782,7 @@ void validate_softlists(emu_options &options)
|
||||
|
||||
if (strcmp(swinfo->parentname, swinfo->shortname) == 0)
|
||||
{
|
||||
mame_printf_error("%s: %s is set as a clone of itself\n", swlist->list_name[i], swinfo->shortname);
|
||||
mame_printf_error("%s: %s is set as a clone of itself\n", list->file->filename(), swinfo->shortname);
|
||||
error = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -1775,14 +1792,14 @@ void validate_softlists(emu_options &options)
|
||||
|
||||
if (!swinfo2)
|
||||
{
|
||||
mame_printf_error("%s: parent '%s' software for '%s' not found\n", swlist->list_name[i], swinfo->parentname, swinfo->shortname);
|
||||
mame_printf_error("%s: parent '%s' software for '%s' not found\n", list->file->filename(), swinfo->parentname, swinfo->shortname);
|
||||
error = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (swinfo2->parentname != NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s is a clone of a clone\n", swlist->list_name[i], swinfo->shortname);
|
||||
mame_printf_error("%s: %s is a clone of a clone\n", list->file->filename(), swinfo->shortname);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
@ -1791,7 +1808,7 @@ void validate_softlists(emu_options &options)
|
||||
/* make sure the driver name is 8 chars or less */
|
||||
if ((is_clone && strlen(swinfo->shortname) > NAME_LEN_CLONE) || ((!is_clone) && strlen(swinfo->shortname) > NAME_LEN_PARENT))
|
||||
{
|
||||
mame_printf_error("%s: %s %s driver name must be %d characters or less\n", swlist->list_name[i], swinfo->shortname,
|
||||
mame_printf_error("%s: %s %s driver name must be %d characters or less\n", list->file->filename(), swinfo->shortname,
|
||||
is_clone ? "clone" : "parent", is_clone ? NAME_LEN_CLONE : NAME_LEN_PARENT);
|
||||
error = TRUE;
|
||||
}
|
||||
@ -1800,7 +1817,7 @@ void validate_softlists(emu_options &options)
|
||||
for (s = swinfo->year; *s; s++)
|
||||
if (!isdigit((UINT8)*s) && *s != '?' && *s != '+')
|
||||
{
|
||||
mame_printf_error("%s: %s has an invalid year '%s'\n", swlist->list_name[i], swinfo->shortname, swinfo->year);
|
||||
mame_printf_error("%s: %s has an invalid year '%s'\n", list->file->filename(), swinfo->shortname, swinfo->year);
|
||||
error = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -1809,13 +1826,13 @@ void validate_softlists(emu_options &options)
|
||||
{
|
||||
if (swpart->interface_ == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s has a part (%s) without interface\n", swlist->list_name[i], swinfo->shortname, swpart->name);
|
||||
mame_printf_error("%s: %s has a part (%s) without interface\n", list->file->filename(), swinfo->shortname, swpart->name);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
if (software_find_romdata(swpart, NULL) == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s has a part (%s) with no data\n", swlist->list_name[i], swinfo->shortname, swpart->name);
|
||||
mame_printf_error("%s: %s has a part (%s) with no data\n", list->file->filename(), swinfo->shortname, swpart->name);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
@ -1831,7 +1848,7 @@ void validate_softlists(emu_options &options)
|
||||
for (str = data->_name; *str; str++)
|
||||
if (tolower((UINT8)*str) != *str)
|
||||
{
|
||||
mame_printf_error("%s: %s has upper case ROM name %s\n", swlist->list_name[i], swinfo->shortname, data->_name);
|
||||
mame_printf_error("%s: %s has upper case ROM name %s\n", list->file->filename(), swinfo->shortname, data->_name);
|
||||
error = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -1840,7 +1857,7 @@ void validate_softlists(emu_options &options)
|
||||
hash_collection hashes;
|
||||
if (!hashes.from_internal_string(data->_hashdata))
|
||||
{
|
||||
mame_printf_error("%s: %s has rom '%s' with an invalid hash string '%s'\n", swlist->list_name[i], swinfo->shortname, data->_name, data->_hashdata);
|
||||
mame_printf_error("%s: %s has rom '%s' with an invalid hash string '%s'\n", list->file->filename(), swinfo->shortname, data->_name, data->_hashdata);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user