diff options
author | 2019-09-26 20:53:06 +1000 | |
---|---|---|
committer | 2019-09-26 20:53:06 +1000 | |
commit | 9a12ab37afb3e43d9d3c296b34348b835bafb2ea (patch) | |
tree | 6af7ce1fc5f52b1518100a1be926514cd2f34feb /src/osd/modules/lib/osdobj_common.cpp | |
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/osdobj_common.cpp')
-rw-r--r-- | src/osd/modules/lib/osdobj_common.cpp | 37 |
1 files changed, 20 insertions, 17 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; } } |