mirror of
https://github.com/holub/mame
synced 2025-04-26 02:07:14 +03:00
clifront.c: Added verifysoftlist command for verifying software availability for separate software lists. [Wilbert Pol]
This commit is contained in:
parent
0262585431
commit
099782e9a1
@ -90,6 +90,7 @@ const options_entry cli_options::s_option_entries[] =
|
|||||||
{ CLICOMMAND_LISTSOFTWARE ";lsoft", "0", OPTION_COMMAND, "list known software for the system" },
|
{ CLICOMMAND_LISTSOFTWARE ";lsoft", "0", OPTION_COMMAND, "list known software for the system" },
|
||||||
{ CLICOMMAND_VERIFYSOFTWARE ";vsoft", "0", OPTION_COMMAND, "verify known software for the system" },
|
{ CLICOMMAND_VERIFYSOFTWARE ";vsoft", "0", OPTION_COMMAND, "verify known software for the system" },
|
||||||
{ CLICOMMAND_GETSOFTLIST ";glist", "0", OPTION_COMMAND, "retrieve software list by name" },
|
{ CLICOMMAND_GETSOFTLIST ";glist", "0", OPTION_COMMAND, "retrieve software list by name" },
|
||||||
|
{ CLICOMMAND_VERIFYSOFTLIST ";vlist", "0", OPTION_COMMAND, "verify software list by name" },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1434,6 +1435,105 @@ void cli_frontend::getsoftlist(const char *gamename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
verifysoftlist - verify software list by name
|
||||||
|
-------------------------------------------------*/
|
||||||
|
void cli_frontend::verifysoftlist(const char *gamename)
|
||||||
|
{
|
||||||
|
int_map list_map;
|
||||||
|
int correct = 0;
|
||||||
|
int incorrect = 0;
|
||||||
|
int notfound = 0;
|
||||||
|
int matched = 0;
|
||||||
|
|
||||||
|
driver_enumerator drivlist(m_options);
|
||||||
|
media_auditor auditor(drivlist);
|
||||||
|
|
||||||
|
while (drivlist.next())
|
||||||
|
{
|
||||||
|
software_list_device_iterator iter(drivlist.config().root_device());
|
||||||
|
for (const software_list_device *swlist = iter.first(); swlist != NULL; swlist = iter.next())
|
||||||
|
{
|
||||||
|
software_list *list = software_list_open(m_options, swlist->list_name(), FALSE, NULL);
|
||||||
|
if ( list )
|
||||||
|
{
|
||||||
|
if ((mame_strwildcmp(swlist->list_name(),gamename)==0) && list_map.add(swlist->list_name(), 0, false) != TMERR_DUPLICATE)
|
||||||
|
{
|
||||||
|
matched++;
|
||||||
|
|
||||||
|
// Get the actual software list contents
|
||||||
|
software_list_parse( list, NULL, NULL );
|
||||||
|
|
||||||
|
for ( software_info *swinfo = software_list_find( list, "*", NULL ); swinfo != NULL; swinfo = software_list_find( list, "*", swinfo ) )
|
||||||
|
{
|
||||||
|
media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST);
|
||||||
|
|
||||||
|
// if not found, count that and leave it at that
|
||||||
|
if (summary == media_auditor::NOTFOUND)
|
||||||
|
{
|
||||||
|
notfound++;
|
||||||
|
}
|
||||||
|
// else display information about what we discovered
|
||||||
|
else if(summary != media_auditor::NONE_NEEDED)
|
||||||
|
{
|
||||||
|
// output the summary of the audit
|
||||||
|
astring summary_string;
|
||||||
|
auditor.summarize(swinfo->shortname,&summary_string);
|
||||||
|
mame_printf_info("%s", summary_string.cstr());
|
||||||
|
|
||||||
|
// display information about what we discovered
|
||||||
|
mame_printf_info("romset %s:%s ", swlist->list_name(), swinfo->shortname);
|
||||||
|
|
||||||
|
// switch off of the result
|
||||||
|
switch (summary)
|
||||||
|
{
|
||||||
|
case media_auditor::INCORRECT:
|
||||||
|
mame_printf_info("is bad\n");
|
||||||
|
incorrect++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case media_auditor::CORRECT:
|
||||||
|
mame_printf_info("is good\n");
|
||||||
|
correct++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case media_auditor::BEST_AVAILABLE:
|
||||||
|
mame_printf_info("is best available\n");
|
||||||
|
correct++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
software_list_close( list );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear out any cached files
|
||||||
|
zip_file_cache_clear();
|
||||||
|
|
||||||
|
// return an error if none found
|
||||||
|
if (matched == 0)
|
||||||
|
throw emu_fatalerror(MAMERR_NO_SUCH_GAME, "No matching software lists found for '%s'", gamename);
|
||||||
|
|
||||||
|
// if we didn't get anything at all, display a generic end message
|
||||||
|
if (matched > 0 && correct == 0 && incorrect == 0)
|
||||||
|
{
|
||||||
|
throw emu_fatalerror(MAMERR_MISSING_FILES, "no romsets found for software list \"%s\"!\n", gamename);
|
||||||
|
}
|
||||||
|
// otherwise, print a summary
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (incorrect > 0)
|
||||||
|
throw emu_fatalerror(MAMERR_MISSING_FILES, "%d romsets found in %d software lists, %d were OK.\n", correct + incorrect, matched, correct);
|
||||||
|
mame_printf_info("%d romsets found in %d software lists, %d romsets were OK.\n", correct, matched, correct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// romident - identify ROMs by looking for
|
// romident - identify ROMs by looking for
|
||||||
// matches in our internal database
|
// matches in our internal database
|
||||||
@ -1543,6 +1643,7 @@ void cli_frontend::execute_commands(const char *exename)
|
|||||||
{ CLICOMMAND_VERIFYSOFTWARE, &cli_frontend::verifysoftware },
|
{ CLICOMMAND_VERIFYSOFTWARE, &cli_frontend::verifysoftware },
|
||||||
{ CLICOMMAND_ROMIDENT, &cli_frontend::romident },
|
{ CLICOMMAND_ROMIDENT, &cli_frontend::romident },
|
||||||
{ CLICOMMAND_GETSOFTLIST, &cli_frontend::getsoftlist },
|
{ CLICOMMAND_GETSOFTLIST, &cli_frontend::getsoftlist },
|
||||||
|
{ CLICOMMAND_VERIFYSOFTLIST, &cli_frontend::verifysoftlist },
|
||||||
};
|
};
|
||||||
|
|
||||||
// find the command
|
// find the command
|
||||||
|
@ -77,6 +77,7 @@
|
|||||||
#define CLICOMMAND_LISTSOFTWARE "listsoftware"
|
#define CLICOMMAND_LISTSOFTWARE "listsoftware"
|
||||||
#define CLICOMMAND_VERIFYSOFTWARE "verifysoftware"
|
#define CLICOMMAND_VERIFYSOFTWARE "verifysoftware"
|
||||||
#define CLICOMMAND_GETSOFTLIST "getsoftlist"
|
#define CLICOMMAND_GETSOFTLIST "getsoftlist"
|
||||||
|
#define CLICOMMAND_VERIFYSOFTLIST "verifysoftlist"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -126,6 +127,7 @@ public:
|
|||||||
void verifysamples(const char *gamename = "*");
|
void verifysamples(const char *gamename = "*");
|
||||||
void romident(const char *filename);
|
void romident(const char *filename);
|
||||||
void getsoftlist(const char *gamename = "*");
|
void getsoftlist(const char *gamename = "*");
|
||||||
|
void verifysoftlist(const char *gamename = "*");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// internal helpers
|
// internal helpers
|
||||||
|
Loading…
Reference in New Issue
Block a user