summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Miodrag Milanović <mmicko@gmail.com>2015-12-28 07:17:17 +0100
committer Miodrag Milanović <mmicko@gmail.com>2015-12-28 07:17:17 +0100
commit11fcbaa28583023ea93a8f0c1f3fb9082d3295ab (patch)
treeb6c5f6ea7ba9d3ce91aaa73a7099c789dc243e0d /src
parent6e60e9bf4d38de8b7e27e5b6d0029a888a274da8 (diff)
parent5ef8cef2f1e57ef047ff7f59f9c279e86d5aec03 (diff)
Merge pull request #527 from ajrhacker/master
Allow mame -validate -verbose to display more messages [ajrhacker]
Diffstat (limited to 'src')
-rw-r--r--src/emu/clifront.cpp6
-rw-r--r--src/emu/validity.cpp77
-rw-r--r--src/emu/validity.h2
3 files changed, 58 insertions, 27 deletions
diff --git a/src/emu/clifront.cpp b/src/emu/clifront.cpp
index 331aa996121..a3535b2d07c 100644
--- a/src/emu/clifront.cpp
+++ b/src/emu/clifront.cpp
@@ -30,6 +30,8 @@
#include <new>
#include <ctype.h>
+extern bool g_print_verbose;
+
// media_identifier class identifies media by hash via a search in
@@ -1611,6 +1613,10 @@ void cli_frontend::execute_commands(const char *exename)
// validate?
if (strcmp(m_options.command(), CLICOMMAND_VALIDATE) == 0)
{
+ // hack: enable verbose output if requested
+ if (m_options.verbose())
+ g_print_verbose = true;
+
validity_checker valid(m_options);
bool result = valid.check_all();
if (!result)
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 345b47d010c..38752c39790 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -125,6 +125,7 @@ validity_checker::validity_checker(emu_options &options)
: m_drivlist(options),
m_errors(0),
m_warnings(0),
+ m_verbose(false),
m_current_driver(nullptr),
m_current_config(nullptr),
m_current_device(nullptr),
@@ -194,19 +195,15 @@ bool validity_checker::check_all()
validate_inlines();
// if we had warnings or errors, output
- if (m_errors > 0 || m_warnings > 0)
+ if (m_errors > 0 || m_warnings > 0 || m_verbose)
{
output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Core: %d errors, %d warnings\n", m_errors, m_warnings);
if (m_errors > 0)
- {
- strreplace(m_error_text, "\n", "\n ");
- output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Errors:\n %s", m_error_text.c_str());
- }
+ output_indented_errors(m_error_text, "Errors");
if (m_warnings > 0)
- {
- strreplace(m_warning_text, "\n", "\n ");
- output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Warnings:\n %s", m_warning_text.c_str());
- }
+ output_indented_errors(m_warning_text, "Warnings");
+ else if (m_verbose)
+ output_indented_errors(m_warning_text, "Messages");
output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "\n");
}
@@ -243,6 +240,7 @@ void validity_checker::validate_begin()
// reset internal state
m_errors = 0;
m_warnings = 0;
+ m_verbose = false;
m_already_checked.clear();
}
@@ -277,6 +275,7 @@ void validity_checker::validate_one(const game_driver &driver)
int start_warnings = m_warnings;
m_error_text.clear();
m_warning_text.clear();
+ m_verbose = false;
// wrap in try/except to catch fatalerrors
try
@@ -295,20 +294,16 @@ void validity_checker::validate_one(const game_driver &driver)
}
// if we had warnings or errors, output
- if (m_errors > start_errors || m_warnings > start_warnings)
+ if (m_errors > start_errors || m_warnings > start_warnings || m_verbose)
{
std::string tempstr;
output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Driver %s (file %s): %d errors, %d warnings\n", driver.name, core_filename_extract_base(tempstr, driver.source_file).c_str(), m_errors - start_errors, m_warnings - start_warnings);
if (m_errors > start_errors)
- {
- strreplace(m_error_text, "\n", "\n ");
- output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Errors:\n %s", m_error_text.c_str());
- }
+ output_indented_errors(m_error_text, "Errors");
if (m_warnings > start_warnings)
- {
- strreplace(m_warning_text, "\n", "\n ");
- output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Warnings:\n %s", m_warning_text.c_str());
- }
+ output_indented_errors(m_warning_text, "Warnings");
+ else if (m_verbose)
+ output_indented_errors(m_warning_text, "Messages");
output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "\n");
}
@@ -615,8 +610,8 @@ void validity_checker::validate_roms()
device_iterator deviter(m_current_config->root_device());
for (device_t *device = deviter.first(); device != nullptr; device = deviter.next())
{
- // for non-root devices, track the current device
- m_current_device = (device->owner() == nullptr) ? nullptr : device;
+ // track the current device
+ m_current_device = device;
// scan the ROM entries for this device
const char *last_region_name = "???";
@@ -880,8 +875,8 @@ void validity_checker::validate_inputs()
if (device->input_ports() == nullptr)
continue;
- // for non-root devices, track the current device
- m_current_device = (device == &m_current_config->root_device()) ? nullptr : device;
+ // track the current device
+ m_current_device = device;
// allocate the input ports
ioport_list portlist;
@@ -976,6 +971,10 @@ void validity_checker::validate_devices()
device_iterator iter_find(m_current_config->root_device());
for (const device_t *device = iter_find.first(); device != nullptr; device = iter_find.next())
{
+ // track the current device
+ m_current_device = device;
+
+ // try to find some objects
device->findit(true);
}
@@ -983,8 +982,8 @@ void validity_checker::validate_devices()
device_iterator iter(m_current_config->root_device());
for (const device_t *device = iter.first(); device != nullptr; device = iter.next())
{
- // for non-root devices, track the current device
- m_current_device = (device == &m_current_config->root_device()) ? nullptr : device;
+ // track the current device
+ m_current_device = device;
// validate the device tag
validate_tag(device->basetag());
@@ -1048,9 +1047,9 @@ void validity_checker::build_output_prefix(std::string &str)
// start empty
str.clear();
- // if we have a current device, indicate that
- if (m_current_device != nullptr)
- str.append(m_current_device->name()).append(" device '").append(m_current_device->tag()).append("': ");
+ // if we have a current (non-root) device, indicate that
+ if (m_current_device != nullptr && m_current_device->owner() != nullptr)
+ str.append(m_current_device->name()).append(" device '").append(m_current_device->tag()+1).append("': ");
// if we have a current port, indicate that as well
if (m_current_ioport != nullptr)
@@ -1089,6 +1088,17 @@ void validity_checker::output_callback(osd_output_channel channel, const char *m
strcatvprintf(output, msg, args);
m_warning_text.append(output);
break;
+ case OSD_OUTPUT_CHANNEL_VERBOSE:
+ // note verbose messages
+ m_verbose = true;
+
+ // output the source(driver) device 'tag'
+ build_output_prefix(output);
+
+ // generate the string and output to the original target
+ strcatvprintf(output, msg, args);
+ m_warning_text.append(output);
+ break;
default:
chain_output(channel, msg, args);
break;
@@ -1110,3 +1120,16 @@ void validity_checker::output_via_delegate(osd_output_channel channel, const cha
this->chain_output(channel, format, argptr);
va_end(argptr);
}
+
+//-------------------------------------------------
+// output_indented_errors - helper to output error
+// and warning messages with header and indents
+//-------------------------------------------------
+void validity_checker::output_indented_errors(std::string &text, const char *header)
+{
+ // remove trailing newline
+ if (text[text.size()-1] == '\n')
+ text.erase(text.size()-1, 1);
+ strreplace(text, "\n", "\n ");
+ output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "%s:\n %s\n", header, text.c_str());
+}
diff --git a/src/emu/validity.h b/src/emu/validity.h
index fa38bb20f93..148a68ab72c 100644
--- a/src/emu/validity.h
+++ b/src/emu/validity.h
@@ -81,6 +81,7 @@ private:
// output helpers
void build_output_prefix(std::string &str);
void output_via_delegate(osd_output_channel channel, const char *format, ...) ATTR_PRINTF(3,4);
+ void output_indented_errors(std::string &text, const char *header);
// internal driver list
driver_enumerator m_drivlist;
@@ -88,6 +89,7 @@ private:
// error tracking
int m_errors;
int m_warnings;
+ bool m_verbose;
std::string m_error_text;
std::string m_warning_text;