Added a generic module abstraction layer and migrated font modules to

use this layer. (nw)
This commit is contained in:
couriersud 2015-01-23 19:53:42 +01:00
parent af80347955
commit 4a4ae1d5ed
19 changed files with 492 additions and 86 deletions

View File

@ -0,0 +1,26 @@
/*
* font_module.h
*
*/
#ifndef FONT_MODULE_H_
#define FONT_MODULE_H_
#include "osdepend.h"
#include "modules/osdmodule.h"
//============================================================
// CONSTANTS
//============================================================
#define OSD_FONT_PROVIDER "uifontprovider"
class font_module
{
public:
virtual ~font_module() { }
virtual osd_font *font_alloc() = 0;
};
#endif /* FONT_MODULE_H_ */

View File

@ -3,7 +3,8 @@
*
*/
#include "osdepend.h"
#include "font_module.h"
#include "modules/osdmodule.h"
#include "astring.h"
#include "corealloc.h"
@ -25,11 +26,6 @@ public:
private:
};
osd_font *osd_font_alloc()
{
return global_alloc(osd_font_none);
}
bool osd_font_none::open(const char *font_path, const char *_name, int &height)
{
return false;
@ -56,3 +52,20 @@ bool osd_font_none::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32
{
return false;
}
class font_none : public osd_module, public font_module
{
public:
font_none()
: osd_module(OSD_FONT_PROVIDER, "none"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_none);
}
};
MODULE_DEFINITION(FONT_NONE, font_none)

View File

@ -3,9 +3,12 @@
*
*/
#include <Carbon/Carbon.h>
#include "font_module.h"
#include "modules/osdmodule.h"
#include "osdepend.h"
#ifdef SDLMAME_MACOSX
#include <Carbon/Carbon.h>
#include "astring.h"
#include "corealloc.h"
@ -32,11 +35,6 @@ private:
CTFontRef m_font;
};
osd_font *osd_font_alloc()
{
return global_alloc(osd_font_osx);
}
bool osd_font_osx::open(const char *font_path, const char *_name, int &height)
{
CFStringRef font_name = NULL;
@ -183,3 +181,23 @@ bool osd_font_osx::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &
return bitmap.valid();
}
class font_osx : public osd_module, public font_module
{
public:
font_osx()
: osd_module(OSD_FONT_PROVIDER, "osx"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_osx);
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_osx, OSD_FONT_PROVIDER, "osx")
#endif
MODULE_DEFINITION(FONT_OSX, font_osx)

View File

@ -3,6 +3,11 @@
*
*/
#include "font_module.h"
#include "modules/osdmodule.h"
#if defined(SDLMAME_UNIX) && (!defined(SDLMAME_MACOSX)) && (!defined(SDLMAME_HAIKU)) && (!defined(SDLMAME_EMSCRIPTEN))
#if (SDLMAME_SDL2)
#include <SDL2/SDL_ttf.h>
#else
@ -12,7 +17,6 @@
#include <fontconfig/fontconfig.h>
#endif
#include "osdepend.h"
#include "astring.h"
#include "corealloc.h"
@ -25,10 +29,10 @@
// font with the given name
//-------------------------------------------------
class osd_font_unix : public osd_font
class osd_font_sdl : public osd_font
{
public:
virtual ~osd_font_unix() {};
virtual ~osd_font_sdl() {};
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
@ -42,12 +46,7 @@ private:
TTF_Font *m_font;
};
osd_font *osd_font_alloc()
{
return global_alloc(osd_font_unix);
}
bool osd_font_unix::open(const char *font_path, const char *_name, int &height)
bool osd_font_sdl::open(const char *font_path, const char *_name, int &height)
{
TTF_Font *font = (TTF_Font *)NULL;
bool bakedstyles = false;
@ -129,7 +128,7 @@ bool osd_font_unix::open(const char *font_path, const char *_name, int &height)
// a given OSD font
//-------------------------------------------------
void osd_font_unix::close()
void osd_font_sdl::close()
{
TTF_CloseFont(this->m_font);
}
@ -142,7 +141,7 @@ void osd_font_unix::close()
// pixel of a black & white font
//-------------------------------------------------
bool osd_font_unix::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
bool osd_font_sdl::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
{
TTF_Font *ttffont;
SDL_Surface *drawsurf;
@ -185,7 +184,7 @@ bool osd_font_unix::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32
return bitmap.valid();
}
TTF_Font * osd_font_unix::TTF_OpenFont_Magic(astring name, int fsize)
TTF_Font * osd_font_sdl::TTF_OpenFont_Magic(astring name, int fsize)
{
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
@ -199,7 +198,7 @@ TTF_Font * osd_font_unix::TTF_OpenFont_Magic(astring name, int fsize)
return TTF_OpenFont(name.cstr(), POINT_SIZE);
}
bool osd_font_unix::BDF_Check_Magic(astring name)
bool osd_font_sdl::BDF_Check_Magic(astring name)
{
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
@ -216,7 +215,7 @@ bool osd_font_unix::BDF_Check_Magic(astring name)
}
#ifndef SDLMAME_HAIKU
TTF_Font *osd_font_unix::search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles)
TTF_Font *osd_font_sdl::search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles)
{
TTF_Font *font = (TTF_Font *)NULL;
FcConfig *config;
@ -324,3 +323,38 @@ TTF_Font *osd_font_unix::search_font_config(astring name, bool bold, bool italic
return font;
}
#endif
class font_sdl : public osd_module, public font_module
{
public:
font_sdl()
: osd_module(OSD_FONT_PROVIDER, "sdl"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_sdl);
}
virtual void init()
{
if (TTF_Init() == -1)
{
osd_printf_error("SDL_ttf failed: %s\n", TTF_GetError());
}
}
virtual void exit()
{
TTF_Quit();
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_sdl, OSD_FONT_PROVIDER, "sdl")
#endif
MODULE_DEFINITION(FONT_SDL, font_sdl)

View File

@ -3,6 +3,11 @@
*
*/
#include "font_module.h"
#include "modules/osdmodule.h"
#if defined(OSD_WINDOWS) || defined(SDLMAME_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <commctrl.h>
@ -10,7 +15,8 @@
#include <tchar.h>
#include <io.h>
#include "osdepend.h"
#include "font_module.h"
#include "modules/osdmodule.h"
#include "strconv.h"
#include "astring.h"
@ -78,11 +84,6 @@ private:
HGDIOBJ m_font;
};
osd_font *osd_font_alloc()
{
return global_alloc(osd_font_windows);
}
bool osd_font_windows::open(const char *font_path, const char *_name, int &height)
{
// accept qualifiers from the name
@ -298,3 +299,22 @@ bool osd_font_windows::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT
return bitmap.valid();
}
class font_win : public osd_module, public font_module
{
public:
font_win()
: osd_module(OSD_FONT_PROVIDER, "win"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_windows);
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_win, OSD_FONT_PROVIDER, "win")
#endif
MODULE_DEFINITION(FONT_WINDOWS, font_win)

View File

@ -20,6 +20,9 @@ extern bool g_print_verbose;
const options_entry osd_options::s_option_entries[] =
{
{ NULL, NULL, OPTION_HEADER, "OSD FONT OPTIONS" },
{ OSD_FONT_PROVIDER, "auto", OPTION_STRING, "provider for ui font: " },
{ NULL, NULL, OPTION_HEADER, "OSD CLI OPTIONS" },
{ OSDCOMMAND_LIST_MIDI_DEVICES ";mlist", "0", OPTION_COMMAND, "list available MIDI I/O devices" },
{ OSDCOMMAND_LIST_NETWORK_ADAPTERS ";nlist", "0", OPTION_COMMAND, "list available network adapters" },
@ -106,9 +109,30 @@ osd_common_t::osd_common_t(osd_options &options)
{
}
#define REGISTER_MODULE(_O, _X ) { extern const module_type _X; _O . register_module( _X ); }
void osd_common_t::register_options()
{
REGISTER_MODULE(m_mod_man, FONT_OSX);
REGISTER_MODULE(m_mod_man, FONT_WINDOWS);
REGISTER_MODULE(m_mod_man, FONT_SDL);
REGISTER_MODULE(m_mod_man, FONT_NONE);
// after initialization we know which modules are supported
const char *names[20];
int num;
m_mod_man.get_module_names(OSD_FONT_PROVIDER, 20, &num, names);
dynamic_array<const char *> dnames;
for (int i = 0; i < num; i++)
dnames.append(names[i]);
update_option(OSD_FONT_PROVIDER, dnames);
// Register video options and update options
video_options_add("none", NULL);
video_register();
@ -209,6 +233,11 @@ void osd_common_t::init(running_machine &machine)
if (options.verbose())
g_print_verbose = true;
m_font_module = select_module_options<font_module *>(options, OSD_FONT_PROVIDER);
m_mod_man.init();
// ensure we get called on the way out
machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(osd_common_t::osd_exit), this));
}
@ -539,7 +568,9 @@ void osd_common_t::network_exit()
void osd_common_t::osd_exit()
{
exit_subsystems();
m_mod_man.exit();
exit_subsystems();
}
void osd_common_t::video_options_add(const char *name, void *type)

View File

@ -14,6 +14,8 @@
#define __OSDOBJ_COMMON__
#include "osdepend.h"
#include "modules/osdmodule.h"
#include "modules/font/font_module.h"
#include "cliopts.h"
//============================================================
@ -55,18 +57,6 @@
// TYPE DEFINITIONS
//============================================================
/* FIXME: core_options inherits from osd_options. This will force any
* future osd implementation to use the options below. Actually, these
* options are *private* to the osd_core. This object should actually be an
* accessor object. Later ...
*/
/* FIXME: core_options inherits from osd_options. This will force any
* future osd implementation to use the options below. Actually, these
* options are *private* to the osd_core. This object should actually be an
* accessor object. Later ...
*/
class osd_options : public cli_options
{
public:
@ -163,6 +153,8 @@ public:
// command option overrides
virtual bool execute_command(const char *command);
osd_font *font_alloc() { return m_font_module->font_alloc(); }
// FIXME: everything below seems to be osd specific and not part of
// this INTERFACE but part of the osd IMPLEMENTATION
@ -214,7 +206,29 @@ private:
running_machine * m_machine;
osd_options& m_options;
osd_module_manager m_mod_man;
font_module *m_font_module;
void update_option(const char * key, dynamic_array<const char *> &values);
// FIXME: should be elsewhere
osd_module *select_module_options(const core_options &opts, const astring &opt_name)
{
astring opt_val = opts.value(opt_name);
if (opt_val == "auto")
opt_val = "";
else if (!m_mod_man.type_has_name(opt_name, opt_val))
{
osd_printf_warning("Value %s not supported for option %s - falling back to auto\n", opt_val.cstr(), opt_name.cstr());
opt_val = "";
}
return m_mod_man.select_module(opt_name, opt_val);
}
template<class C>
C select_module_options(const core_options &opts, const astring &opt_name)
{
return dynamic_cast<C>(select_module_options(opts, opt_name));
}
protected:
osd_sound_interface* m_sound;

116
src/osd/modules/osdmodule.c Normal file
View File

@ -0,0 +1,116 @@
/*
* osdmodule.c
*
*/
#include "modules/osdmodule.h"
osd_module_manager::osd_module_manager()
{
for (int i=0; i<MAX_MODULES; i++)
{
m_modules[i] = NULL;
m_selected[i] = NULL;
}
}
osd_module_manager::~osd_module_manager()
{
for (int i = 0; m_modules[i] != NULL; i++)
{
m_modules[i]->~osd_module();
osd_free(m_modules[i]);
}
}
void osd_module_manager::register_module(const module_type &mod_type)
{
osd_module *module = mod_type();
if (module->probe())
{
osd_printf_info("===> registered module %s %s\n", module->name(), module->type());
int i;
for (i = 0; m_modules[i] != NULL; i++)
;
m_modules[i] = module;
}
else
{
osd_printf_info("===> not supported %s %s\n", module->name(), module->type());
module->~osd_module();
osd_free(module);
}
}
bool osd_module_manager::type_has_name(const char *type, const char *name)
{
return (get_module_index(type, name) >= 0);
}
osd_module *osd_module_manager::get_module_generic(const char *type, const char *name)
{
int i = get_module_index(type, name);
if (i>=0)
return m_modules[i];
else
return NULL;
}
osd_module *osd_module_manager::select_module(const char *type, const char *name)
{
osd_module *m = get_module_generic(type, name);
// FIXME: check if already exists!
int i;
for (i = 0; m_selected[i] != NULL; i++)
;
m_selected[i] = m;
return m;
}
void osd_module_manager::init()
{
for (int i = 0; m_selected[i] != NULL; i++)
{
m_selected[i]->init();
}
}
void osd_module_manager::exit()
{
// Find count
int cnt;
for (cnt = 0; m_selected[cnt] != NULL; cnt++)
;
for (int i = cnt - 1; i >= 0; i--)
{
m_selected[i]->exit();
m_selected[i] = NULL;
}
}
int osd_module_manager::get_module_index(const char *type, const char *name)
{
for (int i = 0; m_modules[i] != NULL; i++)
{
if (strcmp(m_modules[i]->type(), type) == 0 && ((name[0] == 0) || (strcmp(name, m_modules[i]->name())==0)))
return i;
}
return -1;
}
void osd_module_manager::get_module_names(const char *type, const int max, int *num, const char *names[])
{
*num = 0;
for (int i = 0; m_modules[i] != NULL; i++)
{
if ((strcmp(m_modules[i]->type(), type) == 0) && (*num < max))
{
names[*num] = m_modules[i]->name();
*num = *num + 1;
}
}
}

106
src/osd/modules/osdmodule.h Normal file
View File

@ -0,0 +1,106 @@
/***************************************************************************
osdmodule.h
OSD module manangement
*******************************************************************c********/
//#pragma once
#ifndef __OSDMODULE_H__
#define __OSDMODULE_H__
#include "osdcore.h"
#include "osdepend.h"
//============================================================
// TYPE DEFINITIONS
//============================================================
class osd_module;
// ======================> osd_module
class osd_module
{
public:
osd_module(const char *type, const char *name)
: m_name(name), m_type(type)
{}
virtual ~osd_module() { }
const char * name() const { return m_name; }
const char * type() const { return m_type; }
virtual bool probe() const { return true; }
virtual void init() { }
virtual void exit() { }
private:
astring m_name;
astring m_type;
};
// a module_type is simply a pointer to its alloc function
typedef osd_module *(*module_type)();
// this template function creates a stub which constructs a module
template<class _ModuleClass>
osd_module *module_creator()
{
void *p = osd_malloc(sizeof(_ModuleClass));
return new(p) _ModuleClass;
}
class osd_module_manager
{
public:
static const int MAX_MODULES = 32;
osd_module_manager();
~osd_module_manager();
void register_module(const module_type &mod_type);
bool type_has_name(const char *type, const char *name);
osd_module *get_module_generic(const char *type, const char *name);
template<class C>
C select_module(const char *type, const char *name = "")
{
return dynamic_cast<C>(select_module(type, name));
}
osd_module *select_module(const char *type, const char *name = "");
void get_module_names(const char *type, const int max, int *num, const char *names[]);
void init();
void exit();
private:
int get_module_index(const char *type, const char *name);
osd_module *m_modules[MAX_MODULES];
osd_module *m_selected[MAX_MODULES];
};
#define MODULE_DEFINITION(_id, _class) \
extern const module_type _id ; \
const module_type _id = &module_creator< _class >;
#define MODULE_NOT_SUPPORTED(_mod, _type, _name) \
class _mod : public osd_module { \
public: \
_mod () \
: osd_module(_type, _name) {} \
bool probe() const { return false; } \
};
#endif /* __OSDMODULE_H__ */

View File

@ -18,6 +18,7 @@
#include "unicode.h"
#include "cliopts.h"
// forward references
class input_type_entry; // FIXME: including emu.h does not work because emu.h includes osdepend.h
@ -40,12 +41,6 @@ public:
// ======================> osd_interface
/* FIXME: this should be replaced by a proper module implementation
* For the time being only one font provider can be linked
*/
osd_font *osd_font_alloc();
// description of the currently-running machine
class osd_interface
{
@ -71,9 +66,7 @@ public:
virtual void *get_slider_list() = 0; // FIXME: returns slider_state *
// font interface
// font is allocated with global_alloc; therefore use global_free!
osd_font *font_alloc() { return osd_font_alloc(); }
virtual osd_font *font_alloc() = 0;
// command option overrides
virtual bool execute_command(const char *command) = 0;

View File

@ -1,16 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
//============================================================
//
// main.c - Win32 main program
//
// Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team.
// Visit http://mamedev.org for licensing and usage restrictions.
//
// SDLMAME by Olivier Galibert and R. Belmont
//
//============================================================
// standard windows headers
#ifdef OSD_SDL
#define _WIN32_WINNT 0x0400
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
@ -38,10 +37,12 @@ extern "C" int _tmain(int argc, TCHAR **argv)
int i, rc;
char **utf8_argv;
#ifdef OSD_SDL
#ifdef MALLOC_DEBUG
{
extern int winalloc_in_main_code;
winalloc_in_main_code = TRUE;
#endif
#endif
/* convert arguments to UTF-8 */
@ -63,6 +64,7 @@ extern "C" int _tmain(int argc, TCHAR **argv)
osd_free(utf8_argv[i]);
free(utf8_argv);
#ifdef OSD_SDL
#ifdef MALLOC_DEBUG
{
void check_unfreed_mem(void);
@ -70,6 +72,7 @@ extern "C" int _tmain(int argc, TCHAR **argv)
}
winalloc_in_main_code = FALSE;
}
#endif
#endif
return rc;

View File

@ -7,6 +7,8 @@
#include "clifront.h"
#include "modules/lib/osdobj_common.h"
#include "video.h"
#include "modules/osdmodule.h"
#include "modules/font/font_module.h"
//============================================================
// System dependent defines
@ -220,7 +222,6 @@ private:
// FIXME: remove machine usage
void extract_video_config(running_machine &machine);
sdl_options &m_options;
watchdog *m_watchdog;

View File

@ -204,14 +204,14 @@ endif
ifeq ($(TARGETOS),unix)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = tc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
endif
ifeq ($(TARGETOS),linux)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = tc
SDL_NETWORK = taptun
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
ifndef NO_USE_MIDI
INCPATH += `pkg-config --cflags alsa`
@ -223,7 +223,7 @@ endif
ifeq ($(TARGETOS),freebsd)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = tc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
DEFS += -DNO_AFFINITY_NP
LIBS += -lutil
# /usr/local/include is not considered a system include directory
@ -235,7 +235,7 @@ endif
ifeq ($(TARGETOS),openbsd)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = ntc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
LIBS += -lutil
NO_USE_MIDI = 1
endif
@ -243,7 +243,7 @@ endif
ifeq ($(TARGETOS),netbsd)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = ntc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
LIBS += -lutil
NO_USE_MIDI = 1
endif
@ -252,14 +252,14 @@ ifeq ($(TARGETOS),solaris)
BASE_TARGETOS = unix
DEFS += -DNO_AFFINITY_NP -UHAVE_VSNPRINTF -DNO_vsnprintf
SYNC_IMPLEMENTATION = tc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
NO_USE_MIDI = 1
endif
ifeq ($(TARGETOS),haiku)
BASE_TARGETOS = unix
SYNC_IMPLEMENTATION = ntc
FONT_IMPLEMENTATION = unix
FONT_IMPLEMENTATION = sdl
NO_X11 = 1
NO_USE_XINPUT = 1
NO_USE_MIDI = 1
@ -430,7 +430,7 @@ OSDCOREOBJS = \
$(SDLOBJ)/sdlos_$(SDLOS_TARGETOS).o \
$(OSDOBJ)/modules/lib/osdlib_$(SDLOS_TARGETOS).o \
$(OSDOBJ)/modules/sync/sync_$(SYNC_IMPLEMENTATION).o \
$(OSDOBJ)/modules/font/font_$(FONT_IMPLEMENTATION).o \
$(OSDOBJ)/modules/osdmodule.o \
ifdef NOASM
OSDCOREOBJS += $(OSDOBJ)/modules/sync/work_mini.o
@ -451,6 +451,10 @@ OSDOBJS = \
$(SDLOBJ)/output.o \
$(SDLOBJ)/watchdog.o \
$(OSDOBJ)/modules/lib/osdobj_common.o \
$(OSDOBJ)/modules/font/font_sdl.o \
$(OSDOBJ)/modules/font/font_windows.o \
$(OSDOBJ)/modules/font/font_osx.o \
$(OSDOBJ)/modules/font/font_none.o \
ifdef NO_USE_MIDI
OSDOBJS += $(OSDOBJ)/modules/midi/none.o

View File

@ -12,11 +12,6 @@
#ifdef SDLMAME_UNIX
#if (!defined(SDLMAME_MACOSX)) && (!defined(SDLMAME_EMSCRIPTEN))
#if (SDLMAME_SDL2)
#include <SDL2/SDL_ttf.h>
#else
#include <SDL/SDL_ttf.h>
#endif
#ifndef SDLMAME_HAIKU
#include <fontconfig/fontconfig.h>
#endif
@ -61,7 +56,9 @@
#include "input.h"
#include "osdsdl.h"
#include "modules/lib/osdlib.h"
#include "modules/sound/sdl_sound.h"
#if defined(SDLMAME_EMSCRIPTEN)
#include "modules/sound/js_sound.h"
#endif
@ -269,7 +266,6 @@ sdl_options::sdl_options()
set_default_value(SDLOPTION_INIPATH, ini_path.cstr());
}
//============================================================
// main
//============================================================
@ -301,14 +297,11 @@ int main(int argc, char *argv[])
setvbuf(stdout, (char *) NULL, _IONBF, 0);
setvbuf(stderr, (char *) NULL, _IONBF, 0);
//FIXME: move to font module
// FIXME: this should be done differently
#ifdef SDLMAME_UNIX
sdl_entered_debugger = 0;
#if (!defined(SDLMAME_MACOSX)) && (!defined(SDLMAME_HAIKU)) && (!defined(SDLMAME_EMSCRIPTEN))
if (TTF_Init() == -1)
{
printf("SDL_ttf failed: %s\n", TTF_GetError());
}
FcInit();
#endif
#endif
@ -355,12 +348,8 @@ int main(int argc, char *argv[])
}
#endif
// already called...
//SDL_Quit();
#ifdef SDLMAME_UNIX
#if (!defined(SDLMAME_MACOSX)) && (!defined(SDLMAME_HAIKU)) && (!defined(SDLMAME_EMSCRIPTEN))
TTF_Quit();
if (!sdl_entered_debugger)
{
FcFini();
@ -591,6 +580,7 @@ void sdl_osd_interface::debugger_register()
// init
//============================================================
void sdl_osd_interface::init(running_machine &machine)
{
// call our parent

View File

@ -22,8 +22,10 @@
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS)
#if defined(SDLMAME_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
// the result of these functions has to be released with osd_free()
CHAR *astring_from_utf8(const char *s);

View File

@ -7,6 +7,9 @@
//============================================================
// standard windows headers
#ifdef OSD_SDL
#define _WIN32_WINNT 0x0400
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
@ -34,6 +37,14 @@ extern "C" int _tmain(int argc, TCHAR **argv)
int i, rc;
char **utf8_argv;
#ifdef OSD_SDL
#ifdef MALLOC_DEBUG
{
extern int winalloc_in_main_code;
winalloc_in_main_code = TRUE;
#endif
#endif
/* convert arguments to UTF-8 */
utf8_argv = (char **) malloc(argc * sizeof(*argv));
if (utf8_argv == NULL)
@ -53,5 +64,16 @@ extern "C" int _tmain(int argc, TCHAR **argv)
osd_free(utf8_argv[i]);
free(utf8_argv);
#ifdef OSD_SDL
#ifdef MALLOC_DEBUG
{
void check_unfreed_mem(void);
check_unfreed_mem();
}
winalloc_in_main_code = FALSE;
}
#endif
#endif
return rc;
}

View File

@ -1,5 +1,5 @@
#ifndef __NETDEV_H
#define __NETDEV_H
#ifndef __NETDEV_PCAP_H__
#define __NETDEV_PCAP_H__
void init_pcap();
void deinit_pcap();

View File

@ -22,6 +22,10 @@
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS)
#if defined(SDLMAME_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
// the result of these functions has to be released with osd_free()
CHAR *astring_from_utf8(const char *s);
@ -38,6 +42,10 @@ char *utf8_from_wstring(const WCHAR *s);
#define utf8_from_tstring utf8_from_astring
#endif // UNICODE
#if defined(SDLMAME_WIN32)
#define _tcsncpy wcsncpy
#endif
#endif //SDLMAME_WIN32

View File

@ -358,6 +358,7 @@ OSDCOREOBJS = \
$(OSDOBJ)/modules/sync/work_osd.o \
$(OSDOBJ)/modules/lib/osdlib_win32.o \
$(OSDOBJ)/modules/font/font_windows.o \
$(OSDOBJ)/modules/osdmodule.o \
$(WINOBJ)/winptty.o \
@ -381,6 +382,10 @@ OSDOBJS = \
$(WINOBJ)/winmain.o \
$(OSDOBJ)/modules/midi/portmidi.o \
$(OSDOBJ)/modules/lib/osdobj_common.o \
$(OSDOBJ)/modules/font/font_sdl.o \
$(OSDOBJ)/modules/font/font_windows.o \
$(OSDOBJ)/modules/font/font_osx.o \
$(OSDOBJ)/modules/font/font_none.o \
ifdef USE_SDL
OSDOBJS += \