diff options
author | Vas Crabb <vas@vastheman.com> | 2019-09-26 20:53:06 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2019-09-26 20:53:06 +1000 |
commit | 9a12ab37afb3e43d9d3c296b34348b835bafb2ea (patch) | |
tree | 6af7ce1fc5f52b1518100a1be926514cd2f34feb /src/osd/modules/lib | |
parent | 9d4b7b02acdb79fac05606f57c3fddd08593cba8 (diff) |
Make osd_printf_* use util/strformat semantics.
(nw) This has been a long time coming but it's here at last. It should
be easier now that logerror, popmessage and osd_printf_* behave like
string_format and stream_format. Remember the differences from printf:
* Any object with a stream out operator works with %s
* %d, %i, %o, %x, %X, etc. work out the size by magic
* No sign extending promotion to int for short/char
* No widening/narrowing conversions for characters/strings
* Same rules on all platforms, insulated from C runtime library
* No format warnings from compiler
* Assert in debug builds if number of arguments doesn't match format
(nw) Also removed a pile of redundant c_str and string_format, and some
workarounds for not being able to portably format 64-bit integers or
long long.
Diffstat (limited to 'src/osd/modules/lib')
-rw-r--r-- | src/osd/modules/lib/osdobj_common.cpp | 37 | ||||
-rw-r--r-- | src/osd/modules/lib/osdobj_common.h | 4 |
2 files changed, 22 insertions, 19 deletions
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index 51474b810b0..3cba4c81cfb 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -13,6 +13,9 @@ #include "osdepend.h" #include "modules/lib/osdobj_common.h" +#include <iostream> + + const options_entry osd_options::s_option_entries[] = { { nullptr, nullptr, OPTION_HEADER, "OSD KEYBOARD MAPPING OPTIONS" }, @@ -381,28 +384,28 @@ void osd_common_t::update_option(const std::string &key, std::vector<const char //------------------------------------------------- // output_callback - callback for osd_printf_... //------------------------------------------------- -void osd_common_t::output_callback(osd_output_channel channel, const char *msg, va_list args) +void osd_common_t::output_callback(osd_output_channel channel, const util::format_argument_pack<std::ostream> &args) { switch (channel) { - case OSD_OUTPUT_CHANNEL_ERROR: - case OSD_OUTPUT_CHANNEL_WARNING: - vfprintf(stderr, msg, args); - break; - case OSD_OUTPUT_CHANNEL_INFO: - case OSD_OUTPUT_CHANNEL_LOG: - vfprintf(stdout, msg, args); - break; - case OSD_OUTPUT_CHANNEL_VERBOSE: - if (verbose()) vfprintf(stdout, msg, args); - break; - case OSD_OUTPUT_CHANNEL_DEBUG: + case OSD_OUTPUT_CHANNEL_ERROR: + case OSD_OUTPUT_CHANNEL_WARNING: + util::stream_format(std::cerr, args); + break; + case OSD_OUTPUT_CHANNEL_INFO: + case OSD_OUTPUT_CHANNEL_LOG: + util::stream_format(std::cout, args); + break; + case OSD_OUTPUT_CHANNEL_VERBOSE: + if (verbose()) util::stream_format(std::cout, args); + break; + case OSD_OUTPUT_CHANNEL_DEBUG: #ifdef MAME_DEBUG - vfprintf(stdout, msg, args); + util::stream_format(std::cout, args); #endif - break; - default: - break; + break; + default: + break; } } diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h index 37e043f53ad..4a377276855 100644 --- a/src/osd/modules/lib/osdobj_common.h +++ b/src/osd/modules/lib/osdobj_common.h @@ -245,7 +245,7 @@ public: virtual osd_options &options() { return m_options; } // osd_output interface ... - virtual void output_callback(osd_output_channel channel, const char *msg, va_list args) override; + virtual void output_callback(osd_output_channel channel, const util::format_argument_pack<std::ostream> &args) override; bool verbose() const { return m_print_verbose; } virtual void set_verbose(bool print_verbose) override { m_print_verbose = print_verbose; } @@ -279,7 +279,7 @@ private: opt_val = ""; else if (!m_mod_man.type_has_name(opt_name.c_str(), opt_val.c_str())) { - osd_printf_warning("Value %s not supported for option %s - falling back to auto\n", opt_val.c_str(), opt_name.c_str()); + osd_printf_warning("Value %s not supported for option %s - falling back to auto\n", opt_val, opt_name); opt_val = ""; } return m_mod_man.select_module(opt_name.c_str(), opt_val.c_str()); |