summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/osdcore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/osdcore.cpp')
-rw-r--r--src/osd/osdcore.cpp116
1 files changed, 43 insertions, 73 deletions
diff --git a/src/osd/osdcore.cpp b/src/osd/osdcore.cpp
index 51032555438..84b3dde3b05 100644
--- a/src/osd/osdcore.cpp
+++ b/src/osd/osdcore.cpp
@@ -6,12 +6,12 @@
#include <chrono>
#if defined(SDLMAME_ANDROID)
-#include <SDL2/SDL.h>
+#include <android/log.h>
#endif
#ifdef _WIN32
#include <windows.h>
-#include <stdio.h>
+#include <cstdio>
#include <shellapi.h>
#include "strconv.h"
#endif
@@ -26,7 +26,7 @@ static int m_ptr = -1;
void osd_output::push(osd_output *delegate)
{
- if (m_ptr < MAXSTACK)
+ if (m_ptr < MAXSTACK - 1)
{
delegate->m_chain = (m_ptr >= 0 ? m_stack[m_ptr] : nullptr);
m_ptr++;
@@ -37,7 +37,7 @@ void osd_output::push(osd_output *delegate)
void osd_output::pop(osd_output *delegate)
{
int f = -1;
- for (int i=0; i<=m_ptr; i++)
+ for (int i = 0; i <= m_ptr; i++)
if (m_stack[i] == delegate)
{
f = i;
@@ -59,129 +59,93 @@ void osd_output::pop(osd_output *delegate)
***************************************************************************/
/*-------------------------------------------------
- osd_printf_error - output an error to the
+ osd_vprintf_error - output an error to the
appropriate callback
-------------------------------------------------*/
-void CLIB_DECL osd_printf_error(const char *format, ...)
+void osd_vprintf_error(util::format_argument_pack<char> const &args)
{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
#if defined(SDLMAME_ANDROID)
- SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, format, argptr);
+ __android_log_write(ANDROID_LOG_ERROR, "MAME", util::string_format(args).c_str());
#else
- if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_ERROR, format, argptr);
+ if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_ERROR, args);
#endif
- va_end(argptr);
}
/*-------------------------------------------------
- osd_printf_warning - output a warning to the
+ osd_vprintf_warning - output a warning to the
appropriate callback
-------------------------------------------------*/
-void CLIB_DECL osd_printf_warning(const char *format, ...)
+void osd_vprintf_warning(util::format_argument_pack<char> const &args)
{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
#if defined(SDLMAME_ANDROID)
- SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, format, argptr);
+ __android_log_write(ANDROID_LOG_WARN, "MAME", util::string_format(args).c_str());
#else
- if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_WARNING, format, argptr);
+ if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_WARNING, args);
#endif
- va_end(argptr);
}
/*-------------------------------------------------
- osd_printf_info - output info text to the
+ osd_vprintf_info - output info text to the
appropriate callback
-------------------------------------------------*/
-void CLIB_DECL osd_printf_info(const char *format, ...)
+void osd_vprintf_info(util::format_argument_pack<char> const &args)
{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
#if defined(SDLMAME_ANDROID)
- SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, format, argptr);
+ __android_log_write(ANDROID_LOG_INFO, "MAME", util::string_format(args).c_str());
#else
- if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_INFO, format, argptr);
+ if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_INFO, args);
#endif
- va_end(argptr);
}
/*-------------------------------------------------
- osd_printf_verbose - output verbose text to
+ osd_vprintf_verbose - output verbose text to
the appropriate callback
-------------------------------------------------*/
-void CLIB_DECL osd_printf_verbose(const char *format, ...)
+void osd_vprintf_verbose(util::format_argument_pack<char> const &args)
{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
#if defined(SDLMAME_ANDROID)
- SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, format, argptr);
+ __android_log_write( ANDROID_LOG_VERBOSE, "MAME", util::string_format(args).c_str());
#else
- if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_VERBOSE, format, argptr);
+ if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_VERBOSE, args);
#endif
- va_end(argptr);
}
/*-------------------------------------------------
- osd_printf_debug - output debug text to the
+ osd_vprintf_debug - output debug text to the
appropriate callback
-------------------------------------------------*/
-void CLIB_DECL osd_printf_debug(const char *format, ...)
+void osd_vprintf_debug(util::format_argument_pack<char> const &args)
{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
#if defined(SDLMAME_ANDROID)
- SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, format, argptr);
+ __android_log_write(ANDROID_LOG_DEBUG, "MAME", util::string_format(args).c_str());
#else
- if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_DEBUG, format, argptr);
+ if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_DEBUG, args);
#endif
- va_end(argptr);
}
-/*-------------------------------------------------
- osd_printf_log - output log text to the
- appropriate callback
--------------------------------------------------*/
-
-#ifdef UNUSED_FUNCTION
-void CLIB_DECL osd_printf_log(const char *format, ...)
-{
- va_list argptr;
-
- /* do the output */
- va_start(argptr, format);
- output_cb[OSD_OUTPUT_CHANNEL_LOG])(format, argptr);
- va_end(argptr);
-}
-#endif
-
//============================================================
// osd_ticks
//============================================================
-osd_ticks_t osd_ticks(void)
+osd_ticks_t osd_ticks() noexcept
{
+#ifdef _WIN32
+ LARGE_INTEGER val;
+ QueryPerformanceCounter(&val);
+ return val.QuadPart;
+#else
return std::chrono::high_resolution_clock::now().time_since_epoch().count();
+#endif
}
@@ -189,18 +153,24 @@ osd_ticks_t osd_ticks(void)
// osd_ticks_per_second
//============================================================
-osd_ticks_t osd_ticks_per_second(void)
+osd_ticks_t osd_ticks_per_second() noexcept
{
+#ifdef _WIN32
+ LARGE_INTEGER val;
+ QueryPerformanceFrequency(&val);
+ return val.QuadPart;
+#else
return std::chrono::high_resolution_clock::period::den / std::chrono::high_resolution_clock::period::num;
+#endif
}
//============================================================
// osd_sleep
//============================================================
-void osd_sleep(osd_ticks_t duration)
+void osd_sleep(osd_ticks_t duration) noexcept
{
-#ifdef WIN32
+#ifdef _WIN32
// sleep_for appears to oversleep on Windows with gcc 8
Sleep(duration / (osd_ticks_per_second() / 1000));
#else
@@ -220,7 +190,7 @@ void osd_sleep(osd_ticks_t duration)
std::vector<std::string> osd_get_command_line(int argc, char *argv[])
{
std::vector<std::string> results;
-#ifdef WIN32
+#ifdef _WIN32
{
// Get the command line from Windows
int count;
@@ -236,7 +206,7 @@ std::vector<std::string> osd_get_command_line(int argc, char *argv[])
LocalFree(wide_args);
}
-#else // !WIN32
+#else // !_WIN32
{
// for non Windows platforms, we are assuming that arguments are
// already UTF-8; we just need to convert to std::vector<std::string>
@@ -244,6 +214,6 @@ std::vector<std::string> osd_get_command_line(int argc, char *argv[])
for (int i = 0; i < argc; i++)
results.emplace_back(argv[i]);
}
-#endif // WIN32
+#endif // _WIN32
return results;
}