// license:BSD-3-Clause // copyright-holders:Olivier Galibert, R. Belmont //============================================================ // // sdlos_*.c - OS specific low level code // // SDLMAME by Olivier Galibert and R. Belmont // //============================================================ // standard sdl header #include "sdlinc.h" #define WIN32_LEAN_AND_MEAN #include // MAME headers #include "osdcore.h" #include "strconv.h" //============================================================ // get_clipboard_text_by_format //============================================================ static char *get_clipboard_text_by_format(UINT format, char *(*convert)(LPCVOID data)) { char *result = NULL; HANDLE data_handle; LPVOID data; // check to see if this format is available if (IsClipboardFormatAvailable(format)) { // open the clipboard if (OpenClipboard(NULL)) { // try to access clipboard data data_handle = GetClipboardData(format); if (data_handle != NULL) { // lock the data data = GlobalLock(data_handle); if (data != NULL) { // invoke the convert result = (*convert)(data); // unlock the data GlobalUnlock(data_handle); } } // close out the clipboard CloseClipboard(); } } return result; } //============================================================ // convert_wide //============================================================ static char *convert_wide(LPCVOID data) { return utf8_from_wstring((LPCWSTR) data); } //============================================================ // convert_ansi //============================================================ static char *convert_ansi(LPCVOID data) { return utf8_from_astring((LPCSTR) data); } //============================================================ // osd_get_clipboard_text //============================================================ char *osd_get_clipboard_text(void) { char *result = NULL; // try to access unicode text if (result == NULL) result = get_clipboard_text_by_format(CF_UNICODETEXT, convert_wide); // try to access ANSI text if (result == NULL) result = get_clipboard_text_by_format(CF_TEXT, convert_ansi); return result; }